[Pkg-virtualbox-commits] [virtualbox] 01/03: Imported Upstream version 4.3.20-dfsg

Gianfranco Costamagna locutusofborg-guest at moszumanska.debian.org
Wed Dec 3 09:05:58 UTC 2014


This is an automated email from the git hooks/post-receive script.

locutusofborg-guest pushed a commit to branch master
in repository virtualbox.

commit c923f4d32f4c80cf283dd3a53e109335a8e8d9f8
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Wed Dec 3 09:33:37 2014 +0100

    Imported Upstream version 4.3.20-dfsg
---
 Config.kmk                                         |    15 +-
 doc/manual/en_US/user_Installation.xml             |     9 +-
 doc/manual/user_ChangeLogImpl.xml                  |   142 +
 include/VBox/err.h                                 |    13 +-
 include/VBox/vmm/pdmifs.h                          |    18 +
 include/iprt/cdefs.h                               |    14 +-
 include/iprt/types.h                               |     8 +-
 .../common/VBoxService/VBoxServiceVMInfo-win.cpp   |    76 +-
 src/VBox/Additions/linux/drm/vboxvideo_drm.c       |     5 +
 src/VBox/Devices/Audio/dsoundaudio.c               |     2 +-
 src/VBox/Devices/EFI/DevEFI.cpp                    |    24 +-
 src/VBox/Devices/EFI/Firmware/Makefile.kmk         |     4 +-
 .../PciHostBridgeDxe/PciRootBridgeIo.c             |    36 +
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ata.c       |  2822 ---
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Atapi.c     |  1976 --
 .../Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.c |   304 -
 .../Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.h |   192 -
 .../VBoxPkg/VBoxIdeBusDxe/DriverConfiguration.c    |   318 -
 .../VBoxPkg/VBoxIdeBusDxe/DriverDiagnostics.c      |   271 -
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.c       |  1400 --
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.h       |   861 -
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.c    |  1558 --
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.h    |   566 -
 .../EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeData.h   |   337 -
 .../VBoxPkg/VBoxIdeBusDxe/VBoxIdeBusDxe.inf        |   112 -
 .../VBoxPkg/VBoxIdeControllerDxe/ComponentName.c   |   213 -
 .../VBoxPkg/VBoxIdeControllerDxe/IdeController.c   |   566 -
 .../VBoxPkg/VBoxIdeControllerDxe/IdeController.h   |   445 -
 .../VBoxIdeControllerDxe/VBoxIdeControllerDxe.inf  |    82 -
 .../VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c     |     3 +-
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd      |   Bin 1048576 -> 1048576 bytes
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd      |   Bin 1048576 -> 1048576 bytes
 .../Graphics/BIOS/VBoxVgaBiosAlternative.asm       |     6 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative.md5sum    |     2 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA.cpp          |   689 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA.h            |    11 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h    |    40 +
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m    |   575 +
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp    |  6198 +++++++
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp |  1120 ++
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.h   |   800 +
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp    |  6285 +++++++
 src/VBox/Devices/Graphics/DevVGA-SVGA3d.h          |   109 +
 src/VBox/Devices/Graphics/DevVGA.cpp               |    67 +-
 src/VBox/Devices/Graphics/DevVGA.h                 |   178 +-
 src/VBox/Devices/Graphics/DevVGASavedState.h       |     1 -
 src/VBox/Devices/Graphics/shaderlib/Makefile.kup   |     0
 src/VBox/Devices/Graphics/shaderlib/directx.c      |  2548 +++
 src/VBox/Devices/Graphics/shaderlib/glsl_shader.c  |  5379 ++++++
 .../Devices/Graphics/shaderlib/libWineStub/debug.c |   512 +
 .../shaderlib/libWineStub/include/config.h         |  1275 ++
 .../Graphics/shaderlib/libWineStub/include/d3d8.h  |  1154 ++
 .../Graphics/shaderlib/libWineStub/include/d3d9.h  |  2047 ++
 .../shaderlib/libWineStub/include/wine/debug.h     |   381 +
 .../shaderlib/libWineStub/include/wine/guiddef.h   |   131 +
 .../shaderlib/libWineStub/include/wine/initguid.h  |    35 +
 .../shaderlib/libWineStub/include/wine/list.h      |   246 +
 .../shaderlib/libWineStub/include/wine/port.h      |   489 +
 .../shaderlib/libWineStub/include/wine/rbtree.h    |   357 +
 .../shaderlib/libWineStub/include/wine/unicode.h   |   355 +
 .../shaderlib/libWineStub/include/wine/wined3d.h   |  9725 ++++++++++
 src/VBox/Devices/Graphics/shaderlib/shader.c       |  2469 +++
 src/VBox/Devices/Graphics/shaderlib/shader_sm1.c   |   692 +
 src/VBox/Devices/Graphics/shaderlib/shader_sm4.c   |   441 +
 src/VBox/Devices/Graphics/shaderlib/shaderapi.c    |   711 +
 src/VBox/Devices/Graphics/shaderlib/shaderlib.h    |    48 +
 src/VBox/Devices/Graphics/shaderlib/stateblock.c   |    99 +
 src/VBox/Devices/Graphics/shaderlib/utils.c        |   138 +
 src/VBox/Devices/Graphics/shaderlib/vboxext.h      |   157 +
 .../Graphics/shaderlib/wine/include/Makefile.in    |   669 +
 .../Graphics/shaderlib/wine/include/accctrl.h      |   460 +
 .../Graphics/shaderlib/wine/include/access.idl     |    88 +
 .../Graphics/shaderlib/wine/include/aclapi.h       |    92 +
 .../Graphics/shaderlib/wine/include/aclui.h        |   247 +
 .../Graphics/shaderlib/wine/include/activaut.idl   |    38 +
 .../Graphics/shaderlib/wine/include/activdbg.idl   |   590 +
 .../Graphics/shaderlib/wine/include/activscp.idl   |   558 +
 .../Graphics/shaderlib/wine/include/adshlp.h       |    45 +
 .../Graphics/shaderlib/wine/include/advpub.h       |   290 +
 .../Graphics/shaderlib/wine/include/af_irda.h      |   110 +
 .../Graphics/shaderlib/wine/include/amaudio.h      |    56 +
 .../Graphics/shaderlib/wine/include/amstream.idl   |   327 +
 .../Graphics/shaderlib/wine/include/amvideo.idl    |   250 +
 .../Graphics/shaderlib/wine/include/appcompatapi.h |    41 +
 .../Graphics/shaderlib/wine/include/appmgmt.h      |    63 +
 .../Graphics/shaderlib/wine/include/asptlb.idl     |   142 +
 .../Graphics/shaderlib/wine/include/asynot.idl     |    68 +
 .../Graphics/shaderlib/wine/include/asysta.idl     |    60 +
 .../Graphics/shaderlib/wine/include/atlbase.h      |   275 +
 .../Graphics/shaderlib/wine/include/atliface.idl   |    96 +
 .../Graphics/shaderlib/wine/include/atlwin.h       |    62 +
 .../Graphics/shaderlib/wine/include/audevcod.h     |    53 +
 .../shaderlib/wine/include/audioclient.idl         |   336 +
 .../shaderlib/wine/include/audiopolicy.idl         |   249 +
 .../shaderlib/wine/include/audiosessiontypes.h     |    57 +
 .../Graphics/shaderlib/wine/include/austream.idl   |   117 +
 .../Graphics/shaderlib/wine/include/aviriff.h      |   333 +
 .../Devices/Graphics/shaderlib/wine/include/avrt.h |    83 +
 .../Graphics/shaderlib/wine/include/axcore.idl     |   666 +
 .../Graphics/shaderlib/wine/include/axextend.idl   |  1074 ++
 .../Graphics/shaderlib/wine/include/basetsd.h      |   333 +
 .../Graphics/shaderlib/wine/include/basetyps.h     |    92 +
 .../Graphics/shaderlib/wine/include/bcrypt.h       |    59 +
 .../Graphics/shaderlib/wine/include/binres.idl     |    58 +
 .../Graphics/shaderlib/wine/include/bits.idl       |   426 +
 .../Graphics/shaderlib/wine/include/bits1_5.idl    |    97 +
 .../Graphics/shaderlib/wine/include/bitsmsg.h      |    90 +
 .../Graphics/shaderlib/wine/include/cderr.h        |    80 +
 .../Graphics/shaderlib/wine/include/cfgmgr32.h     |   214 +
 .../Graphics/shaderlib/wine/include/cguid.h        |   118 +
 .../Graphics/shaderlib/wine/include/chprst.idl     |    52 +
 .../Graphics/shaderlib/wine/include/cierror.h      |    53 +
 .../Graphics/shaderlib/wine/include/clusapi.h      |    66 +
 .../Graphics/shaderlib/wine/include/cmdbas.idl     |    71 +
 .../Graphics/shaderlib/wine/include/cmdtxt.idl     |    53 +
 .../Graphics/shaderlib/wine/include/comcat.idl     |   241 +
 .../Graphics/shaderlib/wine/include/commctrl.h     |  5183 ++++++
 .../Graphics/shaderlib/wine/include/commctrl.rh    |   211 +
 .../Graphics/shaderlib/wine/include/commdlg.h      |   851 +
 .../shaderlib/wine/include/commoncontrols.idl      |   223 +
 .../Graphics/shaderlib/wine/include/compobj.h      |    34 +
 .../Graphics/shaderlib/wine/include/config.h       |  1273 ++
 .../Graphics/shaderlib/wine/include/config.h.in    |  1412 ++
 .../Graphics/shaderlib/wine/include/config_linux.h |  1275 ++
 .../Graphics/shaderlib/wine/include/control.idl    |   257 +
 .../Graphics/shaderlib/wine/include/cor.idl        |   117 +
 .../Graphics/shaderlib/wine/include/cordebug.idl   |  1050 ++
 .../Graphics/shaderlib/wine/include/corerror.h     |   139 +
 .../Graphics/shaderlib/wine/include/corhdr.h       |   139 +
 .../Devices/Graphics/shaderlib/wine/include/cpl.h  |    98 +
 .../Graphics/shaderlib/wine/include/crtrow.idl     |    60 +
 .../Graphics/shaderlib/wine/include/cryptdlg.h     |   323 +
 .../Graphics/shaderlib/wine/include/cryptuiapi.h   |   447 +
 .../Graphics/shaderlib/wine/include/ctfutb.idl     |    82 +
 .../Graphics/shaderlib/wine/include/ctxtcall.idl   |    58 +
 .../Graphics/shaderlib/wine/include/custcntl.h     |   137 +
 .../Graphics/shaderlib/wine/include/cvconst.h      |   719 +
 .../Devices/Graphics/shaderlib/wine/include/d3d.h  |  1577 ++
 .../Graphics/shaderlib/wine/include/d3d10.idl      |  1611 ++
 .../Graphics/shaderlib/wine/include/d3d10_1.idl    |   135 +
 .../shaderlib/wine/include/d3d10_1shader.h         |    61 +
 .../Graphics/shaderlib/wine/include/d3d10effect.h  |   866 +
 .../Graphics/shaderlib/wine/include/d3d10misc.h    |    57 +
 .../Graphics/shaderlib/wine/include/d3d10shader.h  |   242 +
 .../Graphics/shaderlib/wine/include/d3d11.idl      |  2010 ++
 .../shaderlib/wine/include/d3d11sdklayers.idl      |  1268 ++
 .../Graphics/shaderlib/wine/include/d3d11shader.h  |   217 +
 .../Devices/Graphics/shaderlib/wine/include/d3d8.h |  1162 ++
 .../Graphics/shaderlib/wine/include/d3d8caps.h     |   295 +
 .../Graphics/shaderlib/wine/include/d3d8types.h    |  1222 ++
 .../Devices/Graphics/shaderlib/wine/include/d3d9.h |  2134 +++
 .../Graphics/shaderlib/wine/include/d3d9caps.h     |   404 +
 .../Graphics/shaderlib/wine/include/d3d9types.h    |  1595 ++
 .../Graphics/shaderlib/wine/include/d3dcaps.h      |   442 +
 .../Graphics/shaderlib/wine/include/d3dcommon.idl  |   648 +
 .../Graphics/shaderlib/wine/include/d3dcompiler.h  |   132 +
 .../Graphics/shaderlib/wine/include/d3dhal.h       |   529 +
 .../Graphics/shaderlib/wine/include/d3drm.h        |   533 +
 .../Graphics/shaderlib/wine/include/d3drmdef.h     |   475 +
 .../Graphics/shaderlib/wine/include/d3drmobj.h     |  4711 +++++
 .../Graphics/shaderlib/wine/include/d3drmwin.h     |   112 +
 .../Graphics/shaderlib/wine/include/d3dtypes.h     |  1368 ++
 .../Graphics/shaderlib/wine/include/d3dvec.inl     |   143 +
 .../Graphics/shaderlib/wine/include/d3dx9.h        |    65 +
 .../Graphics/shaderlib/wine/include/d3dx9anim.h    |   417 +
 .../Graphics/shaderlib/wine/include/d3dx9core.h    |   514 +
 .../Graphics/shaderlib/wine/include/d3dx9effect.h  |   441 +
 .../Graphics/shaderlib/wine/include/d3dx9math.h    |   483 +
 .../Graphics/shaderlib/wine/include/d3dx9math.inl  |  1298 ++
 .../Graphics/shaderlib/wine/include/d3dx9mesh.h    |  1066 ++
 .../Graphics/shaderlib/wine/include/d3dx9shader.h  |   381 +
 .../Graphics/shaderlib/wine/include/d3dx9shape.h   |    55 +
 .../Graphics/shaderlib/wine/include/d3dx9tex.h     |   358 +
 .../Graphics/shaderlib/wine/include/d3dx9xof.h     |   195 +
 .../Graphics/shaderlib/wine/include/dbccmd.idl     |    45 +
 .../Graphics/shaderlib/wine/include/dbcses.idl     |    45 +
 .../Graphics/shaderlib/wine/include/dbdsad.idl     |    84 +
 .../Graphics/shaderlib/wine/include/dbghelp.h      |  1543 ++
 .../Graphics/shaderlib/wine/include/dbinit.idl     |    38 +
 .../Graphics/shaderlib/wine/include/dbprop.idl     |    75 +
 .../Graphics/shaderlib/wine/include/dbs.idl        |   740 +
 .../Devices/Graphics/shaderlib/wine/include/dbt.h  |   160 +
 .../Graphics/shaderlib/wine/include/dciddi.h       |    92 +
 .../Graphics/shaderlib/wine/include/dciman.h       |    47 +
 .../Graphics/shaderlib/wine/include/dcommon.h      |    38 +
 .../Devices/Graphics/shaderlib/wine/include/dde.h  |    88 +
 .../Devices/Graphics/shaderlib/wine/include/dde.rh |    32 +
 .../Graphics/shaderlib/wine/include/ddeml.h        |   392 +
 .../Graphics/shaderlib/wine/include/ddk/compstui.h |    80 +
 .../Graphics/shaderlib/wine/include/ddk/hidsdi.h   |    44 +
 .../Graphics/shaderlib/wine/include/ddk/imm.h      |   182 +
 .../Graphics/shaderlib/wine/include/ddk/mountmgr.h |   151 +
 .../Graphics/shaderlib/wine/include/ddk/ntddcdvd.h |   207 +
 .../Graphics/shaderlib/wine/include/ddk/ntddk.h    |   155 +
 .../Graphics/shaderlib/wine/include/ddk/ntddser.h  |   407 +
 .../Graphics/shaderlib/wine/include/ddk/ntddtape.h |    59 +
 .../Graphics/shaderlib/wine/include/ddk/usb.h      |   415 +
 .../Graphics/shaderlib/wine/include/ddk/usb100.h   |   127 +
 .../Graphics/shaderlib/wine/include/ddk/usb200.h   |    33 +
 .../Graphics/shaderlib/wine/include/ddk/usbdlib.h  |    46 +
 .../Graphics/shaderlib/wine/include/ddk/usbioctl.h |    34 +
 .../Graphics/shaderlib/wine/include/ddk/usbiodef.h |    35 +
 .../Graphics/shaderlib/wine/include/ddk/wdm.h      |  1361 ++
 .../Graphics/shaderlib/wine/include/ddk/winddiui.h |    59 +
 .../Graphics/shaderlib/wine/include/ddk/winsplp.h  |   436 +
 .../Graphics/shaderlib/wine/include/ddraw.h        |  2740 +++
 .../Graphics/shaderlib/wine/include/ddrawgdi.h     |    45 +
 .../Graphics/shaderlib/wine/include/ddrawi.h       |  1079 ++
 .../Graphics/shaderlib/wine/include/ddstream.idl   |    97 +
 .../shaderlib/wine/include/delayloadhandler.h      |    64 +
 .../Graphics/shaderlib/wine/include/devenum.idl    |    46 +
 .../Graphics/shaderlib/wine/include/devguid.h      |   115 +
 .../shaderlib/wine/include/devicetopology.idl      |   745 +
 .../Graphics/shaderlib/wine/include/devpkey.h      |    71 +
 .../Graphics/shaderlib/wine/include/devpropdef.h   |   114 +
 .../Graphics/shaderlib/wine/include/difxapi.h      |    79 +
 .../Graphics/shaderlib/wine/include/digitalv.h     |   875 +
 .../Graphics/shaderlib/wine/include/dimm.idl       |   599 +
 .../Graphics/shaderlib/wine/include/dinput.h       |  2511 +++
 .../Graphics/shaderlib/wine/include/dinputd.h      |   254 +
 .../Graphics/shaderlib/wine/include/dispdib.h      |    53 +
 .../Graphics/shaderlib/wine/include/dispex.idl     |   214 +
 .../Devices/Graphics/shaderlib/wine/include/dlgs.h |   233 +
 .../Devices/Graphics/shaderlib/wine/include/dls1.h |   212 +
 .../Devices/Graphics/shaderlib/wine/include/dls2.h |   116 +
 .../Graphics/shaderlib/wine/include/dmdls.h        |   219 +
 .../Graphics/shaderlib/wine/include/dmerror.h      |   173 +
 .../Graphics/shaderlib/wine/include/dmksctrl.h     |   119 +
 .../Devices/Graphics/shaderlib/wine/include/dmo.h  |    43 +
 .../Graphics/shaderlib/wine/include/dmoreg.h       |    87 +
 .../Graphics/shaderlib/wine/include/dmort.h        |    38 +
 .../Graphics/shaderlib/wine/include/dmplugin.h     |   308 +
 .../Graphics/shaderlib/wine/include/dmusbuff.h     |    61 +
 .../Graphics/shaderlib/wine/include/dmusicc.h      |   775 +
 .../Graphics/shaderlib/wine/include/dmusicf.h      |   918 +
 .../Graphics/shaderlib/wine/include/dmusici.h      |  1743 ++
 .../Graphics/shaderlib/wine/include/dmusics.h      |   246 +
 .../Graphics/shaderlib/wine/include/docobj.idl     |   420 +
 .../shaderlib/wine/include/docobjectservice.idl    |    76 +
 .../shaderlib/wine/include/downloadmgr.idl         |    52 +
 .../Graphics/shaderlib/wine/include/dpaddr.h       |   367 +
 .../Graphics/shaderlib/wine/include/dplay.h        |  1282 ++
 .../Graphics/shaderlib/wine/include/dplay8.h       |  1010 +
 .../Graphics/shaderlib/wine/include/dplobby.h      |   518 +
 .../Graphics/shaderlib/wine/include/dplobby8.h     |   268 +
 .../Graphics/shaderlib/wine/include/dpnathlp.h     |   201 +
 .../Graphics/shaderlib/wine/include/dsconf.h       |   176 +
 .../Graphics/shaderlib/wine/include/dsgetdc.h      |   112 +
 .../Graphics/shaderlib/wine/include/dshow.h        |    69 +
 .../Graphics/shaderlib/wine/include/dsound.h       |  1211 ++
 .../Graphics/shaderlib/wine/include/dsrole.h       |   101 +
 .../Graphics/shaderlib/wine/include/dvdmedia.h     |    63 +
 .../Graphics/shaderlib/wine/include/dwmapi.h       |   137 +
 .../Graphics/shaderlib/wine/include/dwrite.idl     |  1420 ++
 .../Graphics/shaderlib/wine/include/dwrite_1.idl   |   833 +
 .../Graphics/shaderlib/wine/include/dxdiag.h       |   164 +
 .../Graphics/shaderlib/wine/include/dxerr8.h       |    61 +
 .../Graphics/shaderlib/wine/include/dxerr9.h       |    61 +
 .../Graphics/shaderlib/wine/include/dxfile.h       |   308 +
 .../Graphics/shaderlib/wine/include/dxgi.idl       |   465 +
 .../Graphics/shaderlib/wine/include/dxgiformat.h   |   153 +
 .../Graphics/shaderlib/wine/include/dxgitype.h     |    93 +
 .../Graphics/shaderlib/wine/include/dyngraph.idl   |   159 +
 .../shaderlib/wine/include/endpointvolume.idl      |   157 +
 .../Graphics/shaderlib/wine/include/errorrep.h     |    52 +
 .../Graphics/shaderlib/wine/include/errors.h       |    54 +
 .../Graphics/shaderlib/wine/include/errrec.idl     |    87 +
 .../Graphics/shaderlib/wine/include/evcode.h       |   103 +
 .../Graphics/shaderlib/wine/include/evntprov.h     |    80 +
 .../Graphics/shaderlib/wine/include/evntrace.h     |   251 +
 .../Graphics/shaderlib/wine/include/excpt.h        |    60 +
 .../Graphics/shaderlib/wine/include/exdisp.idl     |  1055 ++
 .../Graphics/shaderlib/wine/include/exdispid.h     |   181 +
 .../Devices/Graphics/shaderlib/wine/include/fci.h  |   272 +
 .../Devices/Graphics/shaderlib/wine/include/fdi.h  |   310 +
 .../Graphics/shaderlib/wine/include/fileapi.h      |    50 +
 .../Graphics/shaderlib/wine/include/fltdefs.h      |   142 +
 .../Graphics/shaderlib/wine/include/fusion.idl     |   365 +
 .../Graphics/shaderlib/wine/include/gameux.idl     |   210 +
 .../Graphics/shaderlib/wine/include/gdiplus.h      |    74 +
 .../Graphics/shaderlib/wine/include/gdipluscolor.h |    60 +
 .../shaderlib/wine/include/gdipluscolormatrix.h    |    69 +
 .../Graphics/shaderlib/wine/include/gdiplusenums.h |   767 +
 .../Graphics/shaderlib/wine/include/gdiplusflat.h  |   753 +
 .../shaderlib/wine/include/gdiplusgpstubs.h        |   108 +
 .../shaderlib/wine/include/gdiplusimaging.h        |   462 +
 .../Graphics/shaderlib/wine/include/gdiplusinit.h  |    78 +
 .../Graphics/shaderlib/wine/include/gdiplusmem.h   |    44 +
 .../shaderlib/wine/include/gdiplusmetaheader.h     |   176 +
 .../shaderlib/wine/include/gdipluspixelformats.h   |   114 +
 .../Graphics/shaderlib/wine/include/gdiplustypes.h |   285 +
 .../Graphics/shaderlib/wine/include/guiddef.h      |   169 +
 .../Graphics/shaderlib/wine/include/hlguids.h      |    40 +
 .../Graphics/shaderlib/wine/include/hlink.idl      |   450 +
 .../Graphics/shaderlib/wine/include/htiface.idl    |   137 +
 .../Graphics/shaderlib/wine/include/htiframe.idl   |   143 +
 .../Graphics/shaderlib/wine/include/htmlhelp.h     |   461 +
 .../Devices/Graphics/shaderlib/wine/include/http.h |    75 +
 .../shaderlib/wine/include/httprequest.idl         |   201 +
 .../shaderlib/wine/include/httprequestid.h         |    51 +
 .../shaderlib/wine/include/i_cryptasn1tls.h        |    50 +
 .../Graphics/shaderlib/wine/include/iads.idl       |   788 +
 .../Graphics/shaderlib/wine/include/icftypes.idl   |    78 +
 .../Devices/Graphics/shaderlib/wine/include/icm.h  |   445 +
 .../Graphics/shaderlib/wine/include/icmpapi.h      |    62 +
 .../Graphics/shaderlib/wine/include/idispids.h     |    42 +
 .../Graphics/shaderlib/wine/include/iextag.idl     |   129 +
 .../Graphics/shaderlib/wine/include/ifdef.h        |   239 +
 .../Graphics/shaderlib/wine/include/ifmib.h        |    80 +
 .../Graphics/shaderlib/wine/include/imagehlp.h     |  1409 ++
 .../Devices/Graphics/shaderlib/wine/include/imm.h  |   587 +
 .../Graphics/shaderlib/wine/include/imnact.idl     |   308 +
 .../Graphics/shaderlib/wine/include/imnxport.idl   |  1123 ++
 .../Graphics/shaderlib/wine/include/in6addr.h      |    61 +
 .../Graphics/shaderlib/wine/include/inaddr.h       |    69 +
 .../Graphics/shaderlib/wine/include/indexsrv.idl   |   133 +
 .../Graphics/shaderlib/wine/include/initguid.h     |    35 +
 .../Graphics/shaderlib/wine/include/inputscope.idl |    93 +
 .../Graphics/shaderlib/wine/include/intshcut.h     |   123 +
 .../Graphics/shaderlib/wine/include/ipexport.h     |   128 +
 .../Graphics/shaderlib/wine/include/iphlpapi.h     |   171 +
 .../Graphics/shaderlib/wine/include/ipifcons.h     |   254 +
 .../Graphics/shaderlib/wine/include/ipmib.h        |   254 +
 .../Graphics/shaderlib/wine/include/iprtrmib.h     |    58 +
 .../Graphics/shaderlib/wine/include/iptypes.h      |   269 +
 .../Graphics/shaderlib/wine/include/isguids.h      |    37 +
 .../Graphics/shaderlib/wine/include/knownfolders.h |   151 +
 .../Devices/Graphics/shaderlib/wine/include/ks.h   |    75 +
 .../Graphics/shaderlib/wine/include/ksguid.h       |    29 +
 .../Graphics/shaderlib/wine/include/ksmedia.h      |   153 +
 .../Devices/Graphics/shaderlib/wine/include/lm.h   |    55 +
 .../Graphics/shaderlib/wine/include/lmaccess.h     |   487 +
 .../Graphics/shaderlib/wine/include/lmapibuf.h     |    49 +
 .../Devices/Graphics/shaderlib/wine/include/lmat.h |    44 +
 .../Graphics/shaderlib/wine/include/lmbrowsr.h     |    56 +
 .../Graphics/shaderlib/wine/include/lmcons.h       |    79 +
 .../Graphics/shaderlib/wine/include/lmerr.h        |   327 +
 .../Graphics/shaderlib/wine/include/lmjoin.h       |    52 +
 .../Graphics/shaderlib/wine/include/lmmsg.h        |    61 +
 .../Graphics/shaderlib/wine/include/lmserver.h     |    91 +
 .../Graphics/shaderlib/wine/include/lmshare.h      |    71 +
 .../Graphics/shaderlib/wine/include/lmstats.h      |   107 +
 .../Graphics/shaderlib/wine/include/lmuse.h        |    93 +
 .../Graphics/shaderlib/wine/include/lmuseflg.h     |    35 +
 .../Graphics/shaderlib/wine/include/lmwksta.h      |   102 +
 .../Graphics/shaderlib/wine/include/loadperf.h     |    51 +
 .../Graphics/shaderlib/wine/include/lzexpand.h     |    64 +
 .../Devices/Graphics/shaderlib/wine/include/mapi.h |   254 +
 .../Graphics/shaderlib/wine/include/mapicode.h     |   123 +
 .../Graphics/shaderlib/wine/include/mapidefs.h     |  1332 ++
 .../Graphics/shaderlib/wine/include/mapiform.h     |    56 +
 .../Graphics/shaderlib/wine/include/mapiguid.h     |    90 +
 .../Graphics/shaderlib/wine/include/mapitags.h     |   824 +
 .../Graphics/shaderlib/wine/include/mapiutil.h     |   286 +
 .../Graphics/shaderlib/wine/include/mapival.h      |   130 +
 .../Graphics/shaderlib/wine/include/mapix.h        |   196 +
 .../Graphics/shaderlib/wine/include/mciavi.h       |    52 +
 .../Devices/Graphics/shaderlib/wine/include/mcx.h  |    69 +
 .../Graphics/shaderlib/wine/include/mediaerr.h     |    38 +
 .../Graphics/shaderlib/wine/include/mediaobj.idl   |    78 +
 .../Graphics/shaderlib/wine/include/metahost.idl   |   215 +
 .../Graphics/shaderlib/wine/include/midles.h       |   142 +
 .../Graphics/shaderlib/wine/include/mimeinfo.idl   |    45 +
 .../Graphics/shaderlib/wine/include/mimeole.idl    |  1346 ++
 .../Graphics/shaderlib/wine/include/minmax.h       |    40 +
 .../Graphics/shaderlib/wine/include/mlang.idl      |   766 +
 .../Graphics/shaderlib/wine/include/mmc.idl        |    67 +
 .../Graphics/shaderlib/wine/include/mmddk.h        |   480 +
 .../shaderlib/wine/include/mmdeviceapi.idl         |   259 +
 .../Graphics/shaderlib/wine/include/mmreg.h        |   508 +
 .../Graphics/shaderlib/wine/include/mmstream.idl   |   193 +
 .../Graphics/shaderlib/wine/include/mmsystem.h     |  2531 +++
 .../Graphics/shaderlib/wine/include/mprapi.h       |    55 +
 .../Graphics/shaderlib/wine/include/mprerror.h     |    74 +
 .../Graphics/shaderlib/wine/include/msacm.h        |   801 +
 .../Graphics/shaderlib/wine/include/msacmdlg.h     |    45 +
 .../Graphics/shaderlib/wine/include/msacmdrv.h     |   168 +
 .../Graphics/shaderlib/wine/include/mscat.h        |   143 +
 .../Graphics/shaderlib/wine/include/mscoree.idl    |   249 +
 .../Graphics/shaderlib/wine/include/msctf.idl      |  1533 ++
 .../Graphics/shaderlib/wine/include/msdadc.idl     |   101 +
 .../Graphics/shaderlib/wine/include/msdaguid.h     |    36 +
 .../Graphics/shaderlib/wine/include/msdasc.idl     |   147 +
 .../Graphics/shaderlib/wine/include/mshtmcid.h     |   434 +
 .../Graphics/shaderlib/wine/include/mshtmdid.h     |  3105 ++++
 .../Graphics/shaderlib/wine/include/mshtmhst.idl   |   311 +
 .../Graphics/shaderlib/wine/include/mshtml.idl     | 18564 +++++++++++++++++++
 .../Devices/Graphics/shaderlib/wine/include/msi.h  |   719 +
 .../Graphics/shaderlib/wine/include/msidefs.h      |   290 +
 .../Graphics/shaderlib/wine/include/msident.idl    |   103 +
 .../Graphics/shaderlib/wine/include/msinkaut.idl   |  1018 +
 .../Graphics/shaderlib/wine/include/msiquery.h     |   335 +
 .../Graphics/shaderlib/wine/include/mssip.h        |   189 +
 .../Graphics/shaderlib/wine/include/mstask.idl     |   402 +
 .../Graphics/shaderlib/wine/include/mstcpip.h      |    78 +
 .../shaderlib/wine/include/msvcrt/assert.h         |    46 +
 .../Graphics/shaderlib/wine/include/msvcrt/conio.h |    63 +
 .../shaderlib/wine/include/msvcrt/crtdbg.h         |   140 +
 .../shaderlib/wine/include/msvcrt/crtdefs.h        |   248 +
 .../Graphics/shaderlib/wine/include/msvcrt/ctype.h |    85 +
 .../shaderlib/wine/include/msvcrt/direct.h         |    59 +
 .../shaderlib/wine/include/msvcrt/dirent.h         |     1 +
 .../Graphics/shaderlib/wine/include/msvcrt/dos.h   |    50 +
 .../Graphics/shaderlib/wine/include/msvcrt/eh.h    |    58 +
 .../Graphics/shaderlib/wine/include/msvcrt/errno.h |    87 +
 .../Graphics/shaderlib/wine/include/msvcrt/fcntl.h |    50 +
 .../Graphics/shaderlib/wine/include/msvcrt/float.h |   158 +
 .../Graphics/shaderlib/wine/include/msvcrt/io.h    |   184 +
 .../shaderlib/wine/include/msvcrt/limits.h         |    49 +
 .../shaderlib/wine/include/msvcrt/locale.h         |    90 +
 .../shaderlib/wine/include/msvcrt/malloc.h         |    99 +
 .../Graphics/shaderlib/wine/include/msvcrt/math.h  |   174 +
 .../shaderlib/wine/include/msvcrt/mbctype.h        |    90 +
 .../shaderlib/wine/include/msvcrt/mbstring.h       |   132 +
 .../shaderlib/wine/include/msvcrt/memory.h         |    37 +
 .../shaderlib/wine/include/msvcrt/process.h        |   126 +
 .../shaderlib/wine/include/msvcrt/search.h         |    52 +
 .../shaderlib/wine/include/msvcrt/setjmp.h         |   140 +
 .../Graphics/shaderlib/wine/include/msvcrt/share.h |    42 +
 .../shaderlib/wine/include/msvcrt/signal.h         |    63 +
 .../shaderlib/wine/include/msvcrt/stddef.h         |    60 +
 .../Graphics/shaderlib/wine/include/msvcrt/stdio.h |   272 +
 .../shaderlib/wine/include/msvcrt/stdlib.h         |   301 +
 .../shaderlib/wine/include/msvcrt/string.h         |   156 +
 .../shaderlib/wine/include/msvcrt/sys/locking.h    |    42 +
 .../shaderlib/wine/include/msvcrt/sys/stat.h       |   201 +
 .../shaderlib/wine/include/msvcrt/sys/timeb.h      |    86 +
 .../shaderlib/wine/include/msvcrt/sys/types.h      |    82 +
 .../shaderlib/wine/include/msvcrt/sys/unistd.h     |     1 +
 .../shaderlib/wine/include/msvcrt/sys/utime.h      |    88 +
 .../Graphics/shaderlib/wine/include/msvcrt/time.h  |   162 +
 .../shaderlib/wine/include/msvcrt/unistd.h         |     2 +
 .../Graphics/shaderlib/wine/include/msvcrt/wchar.h |   478 +
 .../shaderlib/wine/include/msvcrt/wctype.h         |    92 +
 .../Graphics/shaderlib/wine/include/mswsock.h      |   197 +
 .../Graphics/shaderlib/wine/include/msxml.h        |  1773 ++
 .../Graphics/shaderlib/wine/include/msxml.idl      |   366 +
 .../Graphics/shaderlib/wine/include/msxml2.idl     |  3576 ++++
 .../Graphics/shaderlib/wine/include/msxml2did.h    |   563 +
 .../Graphics/shaderlib/wine/include/msxml6.idl     |  3431 ++++
 .../Graphics/shaderlib/wine/include/msxml6did.h    |    33 +
 .../Graphics/shaderlib/wine/include/msxmldid.h     |    76 +
 .../Devices/Graphics/shaderlib/wine/include/nb30.h |   231 +
 .../Graphics/shaderlib/wine/include/ndrtypes.h     |   190 +
 .../Graphics/shaderlib/wine/include/netcon.idl     |   421 +
 .../Graphics/shaderlib/wine/include/netfw.idl      |   479 +
 .../Graphics/shaderlib/wine/include/nldef.h        |    89 +
 .../Graphics/shaderlib/wine/include/npapi.h        |   229 +
 .../Graphics/shaderlib/wine/include/nspapi.h       |   214 +
 .../Graphics/shaderlib/wine/include/ntddcdrm.h     |   194 +
 .../Graphics/shaderlib/wine/include/ntddndis.h     |   181 +
 .../Graphics/shaderlib/wine/include/ntddscsi.h     |   133 +
 .../Graphics/shaderlib/wine/include/ntddstor.h     |   288 +
 .../Graphics/shaderlib/wine/include/ntdsapi.h      |    66 +
 .../Graphics/shaderlib/wine/include/ntquery.h      |    92 +
 .../Graphics/shaderlib/wine/include/ntsecapi.h     |   403 +
 .../Graphics/shaderlib/wine/include/ntsecpkg.h     |   480 +
 .../Graphics/shaderlib/wine/include/ntstatus.h     |  1229 ++
 .../Graphics/shaderlib/wine/include/oaidl.h        |  5205 ++++++
 .../Graphics/shaderlib/wine/include/oaidl.idl      |  1651 ++
 .../Graphics/shaderlib/wine/include/objbase.h      |   511 +
 .../shaderlib/wine/include/objectarray.idl         |    56 +
 .../Graphics/shaderlib/wine/include/objidl.h       | 10438 +++++++++++
 .../Graphics/shaderlib/wine/include/objidl.idl     |  2531 +++
 .../Graphics/shaderlib/wine/include/objsafe.idl    |    54 +
 .../Graphics/shaderlib/wine/include/objsel.h       |   169 +
 .../Graphics/shaderlib/wine/include/ocidl.idl      |  1343 ++
 .../Graphics/shaderlib/wine/include/ocmm.idl       |    83 +
 .../Graphics/shaderlib/wine/include/odbcinst.h     |   141 +
 .../Devices/Graphics/shaderlib/wine/include/ole2.h |   179 +
 .../Graphics/shaderlib/wine/include/ole2ver.h      |    53 +
 .../Graphics/shaderlib/wine/include/oleacc.idl     |   305 +
 .../Graphics/shaderlib/wine/include/oleauto.h      |   772 +
 .../Graphics/shaderlib/wine/include/olectl.h       |   458 +
 .../Graphics/shaderlib/wine/include/oledb.idl      |    85 +
 .../Graphics/shaderlib/wine/include/oledberr.h     |    83 +
 .../Graphics/shaderlib/wine/include/oledlg.h       |   988 +
 .../Graphics/shaderlib/wine/include/oleidl.h       |  3645 ++++
 .../Graphics/shaderlib/wine/include/oleidl.idl     |   967 +
 .../Graphics/shaderlib/wine/include/opnrst.idl     |    56 +
 .../Graphics/shaderlib/wine/include/optary.idl     |    74 +
 .../Graphics/shaderlib/wine/include/patchapi.h     |    61 +
 .../Devices/Graphics/shaderlib/wine/include/pdh.h  |   255 +
 .../Graphics/shaderlib/wine/include/pdhmsg.h       |   120 +
 .../Graphics/shaderlib/wine/include/perhist.idl    |    47 +
 .../Graphics/shaderlib/wine/include/pktdef.h       |   257 +
 .../Graphics/shaderlib/wine/include/poppack.h      |   272 +
 .../Graphics/shaderlib/wine/include/powrprof.h     |   153 +
 .../Graphics/shaderlib/wine/include/profinfo.h     |    56 +
 .../Graphics/shaderlib/wine/include/propidl.h      |  1027 +
 .../Graphics/shaderlib/wine/include/propidl.idl    |   464 +
 .../Graphics/shaderlib/wine/include/propkey.h      |    55 +
 .../Graphics/shaderlib/wine/include/propkeydef.h   |    82 +
 .../Graphics/shaderlib/wine/include/propsys.idl    |   832 +
 .../Graphics/shaderlib/wine/include/propvarutil.h  |   127 +
 .../Graphics/shaderlib/wine/include/prsht.h        |   547 +
 .../Graphics/shaderlib/wine/include/psapi.h        |   128 +
 .../Graphics/shaderlib/wine/include/pshpack1.h     |   116 +
 .../Graphics/shaderlib/wine/include/pshpack2.h     |   116 +
 .../Graphics/shaderlib/wine/include/pshpack4.h     |   116 +
 .../Graphics/shaderlib/wine/include/pshpack8.h     |   116 +
 .../Graphics/shaderlib/wine/include/pstore.idl     |   285 +
 .../Graphics/shaderlib/wine/include/qedit.idl      |   187 +
 .../Devices/Graphics/shaderlib/wine/include/ras.h  |   526 +
 .../Graphics/shaderlib/wine/include/rasdlg.h       |    41 +
 .../Graphics/shaderlib/wine/include/raserror.h     |    38 +
 .../Graphics/shaderlib/wine/include/reason.h       |    84 +
 .../Graphics/shaderlib/wine/include/regstr.h       |    42 +
 .../shaderlib/wine/include/restartmanager.h        |    67 +
 .../Graphics/shaderlib/wine/include/richedit.h     |  1088 ++
 .../Graphics/shaderlib/wine/include/richole.idl    |   142 +
 .../Graphics/shaderlib/wine/include/rmxfguid.h     |   139 +
 .../Graphics/shaderlib/wine/include/rmxftmpl.x     |   268 +
 .../Graphics/shaderlib/wine/include/row.idl        |    51 +
 .../Graphics/shaderlib/wine/include/rowchg.idl     |    39 +
 .../Graphics/shaderlib/wine/include/rowpos.idl     |    86 +
 .../Graphics/shaderlib/wine/include/rowpsc.idl     |    45 +
 .../Devices/Graphics/shaderlib/wine/include/rpc.h  |    93 +
 .../Graphics/shaderlib/wine/include/rpcasync.h     |   211 +
 .../Graphics/shaderlib/wine/include/rpcdce.h       |   635 +
 .../Graphics/shaderlib/wine/include/rpcdcep.h      |   241 +
 .../Graphics/shaderlib/wine/include/rpcndr.h       |   786 +
 .../Graphics/shaderlib/wine/include/rpcnterr.h     |    53 +
 .../Graphics/shaderlib/wine/include/rpcproxy.h     |   394 +
 .../Graphics/shaderlib/wine/include/rpcsal.h       |   175 +
 .../Graphics/shaderlib/wine/include/rstbas.idl     |    60 +
 .../Graphics/shaderlib/wine/include/rstinf.idl     |    67 +
 .../Graphics/shaderlib/wine/include/rstloc.idl     |    76 +
 .../Graphics/shaderlib/wine/include/rstnot.idl     |    83 +
 .../Graphics/shaderlib/wine/include/rtutils.h      |    58 +
 .../Graphics/shaderlib/wine/include/scarderr.h     |   105 +
 .../Graphics/shaderlib/wine/include/schannel.h     |   249 +
 .../Graphics/shaderlib/wine/include/schemadef.h    |    54 +
 .../Graphics/shaderlib/wine/include/schnlsp.h      |    33 +
 .../Devices/Graphics/shaderlib/wine/include/sddl.h |   130 +
 .../Graphics/shaderlib/wine/include/secext.h       |    67 +
 .../Graphics/shaderlib/wine/include/security.h     |    35 +
 .../Graphics/shaderlib/wine/include/sensapi.h      |    56 +
 .../Graphics/shaderlib/wine/include/sensevts.idl   |   136 +
 .../Graphics/shaderlib/wine/include/servprov.h     |   114 +
 .../Graphics/shaderlib/wine/include/servprov.idl   |    55 +
 .../Graphics/shaderlib/wine/include/sesprp.idl     |    60 +
 .../Graphics/shaderlib/wine/include/setupapi.h     |  1873 ++
 .../Devices/Graphics/shaderlib/wine/include/sfc.h  |    55 +
 .../shaderlib/wine/include/shdeprecated.idl        |   613 +
 .../Graphics/shaderlib/wine/include/shdispid.h     |    39 +
 .../Graphics/shaderlib/wine/include/shellapi.h     |   670 +
 .../Graphics/shaderlib/wine/include/shldisp.idl    |   573 +
 .../Graphics/shaderlib/wine/include/shlguid.h      |   248 +
 .../Graphics/shaderlib/wine/include/shlobj.h       |  1775 ++
 .../Graphics/shaderlib/wine/include/shlwapi.h      |  1135 ++
 .../Graphics/shaderlib/wine/include/shobjidl.idl   |  3408 ++++
 .../Graphics/shaderlib/wine/include/shtypes.idl    |   171 +
 .../Graphics/shaderlib/wine/include/sipbase.h      |    33 +
 .../Graphics/shaderlib/wine/include/slerror.h      |    35 +
 .../Graphics/shaderlib/wine/include/slpublic.h     |    49 +
 .../Devices/Graphics/shaderlib/wine/include/snmp.h |   304 +
 .../Graphics/shaderlib/wine/include/softpub.h      |   254 +
 .../Devices/Graphics/shaderlib/wine/include/sql.h  |   755 +
 .../Graphics/shaderlib/wine/include/sqlext.h       |  1682 ++
 .../Graphics/shaderlib/wine/include/sqltypes.h     |   258 +
 .../Graphics/shaderlib/wine/include/srcrst.idl     |    62 +
 .../shaderlib/wine/include/srrestoreptapi.h        |    67 +
 .../Devices/Graphics/shaderlib/wine/include/sspi.h |   842 +
 .../Graphics/shaderlib/wine/include/stamp-h.in     |     1 +
 .../Graphics/shaderlib/wine/include/stdole2.idl    |   440 +
 .../Devices/Graphics/shaderlib/wine/include/sti.h  |   190 +
 .../Graphics/shaderlib/wine/include/storage.h      |    35 +
 .../Graphics/shaderlib/wine/include/strmif.idl     |    40 +
 .../Graphics/shaderlib/wine/include/strsafe.h      |    42 +
 .../wine/include/structuredquerycondition.idl      |    61 +
 .../Graphics/shaderlib/wine/include/svrapi.h       |    55 +
 .../Graphics/shaderlib/wine/include/t2embapi.h     |    85 +
 .../Devices/Graphics/shaderlib/wine/include/tapi.h |  1077 ++
 .../Graphics/shaderlib/wine/include/tchar.h        |   277 +
 .../Graphics/shaderlib/wine/include/tcpmib.h       |   202 +
 .../Graphics/shaderlib/wine/include/textserv.h     |   378 +
 .../Graphics/shaderlib/wine/include/textstor.idl   |   320 +
 .../Graphics/shaderlib/wine/include/tlhelp32.h     |   193 +
 .../Graphics/shaderlib/wine/include/tlogstg.idl    |    61 +
 .../Graphics/shaderlib/wine/include/tmschema.h     |  1279 ++
 .../Graphics/shaderlib/wine/include/tom.idl        |   444 +
 .../Graphics/shaderlib/wine/include/traffic.h      |    57 +
 .../Graphics/shaderlib/wine/include/transact.idl   |   235 +
 .../Graphics/shaderlib/wine/include/twain.h        |  1849 ++
 .../Graphics/shaderlib/wine/include/txcoord.idl    |   190 +
 .../Graphics/shaderlib/wine/include/txdtc.idl      |   524 +
 .../Graphics/shaderlib/wine/include/udpmib.h       |    95 +
 .../Graphics/shaderlib/wine/include/uiautomation.h |    30 +
 .../shaderlib/wine/include/uiautomationclient.idl  |   158 +
 .../shaderlib/wine/include/uiautomationcore.idl    |   100 +
 .../shaderlib/wine/include/uiautomationcoreapi.h   |    58 +
 .../Graphics/shaderlib/wine/include/unknwn.h       |   221 +
 .../Graphics/shaderlib/wine/include/unknwn.idl     |    89 +
 .../Graphics/shaderlib/wine/include/urlhist.idl    |   155 +
 .../Graphics/shaderlib/wine/include/urlmon.h       |  5449 ++++++
 .../Graphics/shaderlib/wine/include/urlmon.idl     |  2172 +++
 .../Graphics/shaderlib/wine/include/userenv.h      |   116 +
 .../Graphics/shaderlib/wine/include/usp10.h        |   304 +
 .../Graphics/shaderlib/wine/include/uuids.h        |   289 +
 .../Graphics/shaderlib/wine/include/uxtheme.h      |   217 +
 .../Graphics/shaderlib/wine/include/vdmdbg.h       |    49 +
 .../Devices/Graphics/shaderlib/wine/include/ver.h  |    37 +
 .../Graphics/shaderlib/wine/include/verrsrc.h      |   182 +
 .../Devices/Graphics/shaderlib/wine/include/vfw.h  |  1953 ++
 .../Graphics/shaderlib/wine/include/vfwmsgs.h      |   175 +
 .../Graphics/shaderlib/wine/include/vmr9.idl       |   533 +
 .../Graphics/shaderlib/wine/include/vmrender.idl   |   490 +
 .../Graphics/shaderlib/wine/include/vsstyle.h      |  1748 ++
 .../Graphics/shaderlib/wine/include/vssym32.h      |   687 +
 .../Graphics/shaderlib/wine/include/wbemcli.idl    |   671 +
 .../Graphics/shaderlib/wine/include/wbemdisp.idl   |  1130 ++
 .../Graphics/shaderlib/wine/include/wbemprov.idl   |    37 +
 .../Graphics/shaderlib/wine/include/werapi.h       |   199 +
 .../Graphics/shaderlib/wine/include/wfext.h        |    42 +
 .../Devices/Graphics/shaderlib/wine/include/wia.h  |    36 +
 .../Graphics/shaderlib/wine/include/wia_lh.idl     |   137 +
 .../Graphics/shaderlib/wine/include/wia_xp.idl     |   137 +
 .../Graphics/shaderlib/wine/include/winbase.h      |  2825 +++
 .../Graphics/shaderlib/wine/include/wincodec.idl   |  1041 ++
 .../shaderlib/wine/include/wincodecsdk.idl         |   330 +
 .../Graphics/shaderlib/wine/include/wincon.h       |   416 +
 .../Graphics/shaderlib/wine/include/wincred.h      |   303 +
 .../Graphics/shaderlib/wine/include/wincrypt.h     |  4589 +++++
 .../Graphics/shaderlib/wine/include/windef.h       |   425 +
 .../Graphics/shaderlib/wine/include/windns.h       |   666 +
 .../Graphics/shaderlib/wine/include/windows.h      |   116 +
 .../Graphics/shaderlib/wine/include/windowsx.h     |  1448 ++
 .../shaderlib/wine/include/wine/dcetypes.idl       |    97 +
 .../Graphics/shaderlib/wine/include/wine/debug.h   |   297 +
 .../Graphics/shaderlib/wine/include/wine/dplaysp.h |   375 +
 .../Graphics/shaderlib/wine/include/wine/epm.idl   |   131 +
 .../shaderlib/wine/include/wine/exception.h        |   282 +
 .../shaderlib/wine/include/wine/gdi_driver.h       |   291 +
 .../Graphics/shaderlib/wine/include/wine/irot.idl  |   106 +
 .../Graphics/shaderlib/wine/include/wine/itss.idl  |   104 +
 .../Graphics/shaderlib/wine/include/wine/library.h |   208 +
 .../Graphics/shaderlib/wine/include/wine/list.h    |   243 +
 .../shaderlib/wine/include/wine/mmsystem16.h       |   822 +
 .../Graphics/shaderlib/wine/include/wine/mscvpdb.h |  2197 +++
 .../Graphics/shaderlib/wine/include/wine/port.h    |   484 +
 .../Graphics/shaderlib/wine/include/wine/rbtree.h  |   351 +
 .../Graphics/shaderlib/wine/include/wine/rpcfc.h   |   205 +
 .../Graphics/shaderlib/wine/include/wine/server.h  |   151 +
 .../shaderlib/wine/include/wine/server_protocol.h  |  5828 ++++++
 .../shaderlib/wine/include/wine/strmbase.h         |   669 +
 .../shaderlib/wine/include/wine/svcctl.idl         |   380 +
 .../Graphics/shaderlib/wine/include/wine/test.h    |   654 +
 .../Graphics/shaderlib/wine/include/wine/unicode.h |   320 +
 .../Graphics/shaderlib/wine/include/wine/wgl.h     |  5081 +++++
 .../shaderlib/wine/include/wine/wgl_driver.h       |  2862 +++
 .../Graphics/shaderlib/wine/include/wine/wglext.h  |   943 +
 .../Graphics/shaderlib/wine/include/wine/winaspi.h |   152 +
 .../shaderlib/wine/include/wine/winbase16.h        |   572 +
 .../shaderlib/wine/include/wine/windef16.h         |   178 +
 .../shaderlib/wine/include/wine/wine_common_ver.rc |   129 +
 .../Graphics/shaderlib/wine/include/wine/wined3d.h |  9726 ++++++++++
 .../shaderlib/wine/include/wine/winedxgi.idl       |    79 +
 .../shaderlib/wine/include/wine/wingdi16.h         |   629 +
 .../shaderlib/wine/include/wine/winnet16.h         |   297 +
 .../shaderlib/wine/include/wine/winuser16.h        |   966 +
 .../Graphics/shaderlib/wine/include/wine/wpp.h     |    71 +
 .../Graphics/shaderlib/wine/include/winerror.h     |  2952 +++
 .../Graphics/shaderlib/wine/include/winevt.h       |   141 +
 .../Graphics/shaderlib/wine/include/wingdi.h       |  3809 ++++
 .../Graphics/shaderlib/wine/include/winhttp.h      |   593 +
 .../Graphics/shaderlib/wine/include/wininet.h      |  1739 ++
 .../Graphics/shaderlib/wine/include/winineti.h     |   143 +
 .../Graphics/shaderlib/wine/include/winioctl.h     |   480 +
 .../Graphics/shaderlib/wine/include/winldap.h      |   653 +
 .../Graphics/shaderlib/wine/include/winnetwk.h     |   416 +
 .../Graphics/shaderlib/wine/include/winnls.h       |   896 +
 .../Graphics/shaderlib/wine/include/winnls32.h     |    43 +
 .../Graphics/shaderlib/wine/include/winnt.h        |  5525 ++++++
 .../Graphics/shaderlib/wine/include/winnt.rh       |   450 +
 .../Graphics/shaderlib/wine/include/winperf.h      |    79 +
 .../Graphics/shaderlib/wine/include/winreg.h       |   195 +
 .../Graphics/shaderlib/wine/include/winresrc.h     |    54 +
 .../Graphics/shaderlib/wine/include/winsafer.h     |    89 +
 .../Graphics/shaderlib/wine/include/winscard.h     |   164 +
 .../Graphics/shaderlib/wine/include/winsmcrd.h     |    46 +
 .../Graphics/shaderlib/wine/include/winsnmp.h      |    64 +
 .../Graphics/shaderlib/wine/include/winsock.h      |  1057 ++
 .../Graphics/shaderlib/wine/include/winsock2.h     |   768 +
 .../Graphics/shaderlib/wine/include/winspool.h     |  1822 ++
 .../Graphics/shaderlib/wine/include/winsvc.h       |   425 +
 .../Graphics/shaderlib/wine/include/winsxs.idl     |   207 +
 .../Graphics/shaderlib/wine/include/wintab.h       |   797 +
 .../Graphics/shaderlib/wine/include/wintabx.h      |   139 +
 .../Graphics/shaderlib/wine/include/winternl.h     |  2708 +++
 .../Graphics/shaderlib/wine/include/wintrust.h     |   633 +
 .../Graphics/shaderlib/wine/include/winuser.h      |  4043 ++++
 .../Graphics/shaderlib/wine/include/winuser.rh     |  1342 ++
 .../Graphics/shaderlib/wine/include/winver.h       |    74 +
 .../Graphics/shaderlib/wine/include/wmistr.h       |    69 +
 .../Graphics/shaderlib/wine/include/wmiutils.idl   |   245 +
 .../Graphics/shaderlib/wine/include/wmsbuffer.idl  |    52 +
 .../Graphics/shaderlib/wine/include/wmsdkidl.idl   |   395 +
 .../Graphics/shaderlib/wine/include/wnaspi32.h     |   250 +
 .../Graphics/shaderlib/wine/include/wownt32.h      |   167 +
 .../Graphics/shaderlib/wine/include/wpcapi.idl     |   116 +
 .../Graphics/shaderlib/wine/include/ws2def.h       |   122 +
 .../Graphics/shaderlib/wine/include/ws2ipdef.h     |   293 +
 .../Graphics/shaderlib/wine/include/ws2spi.h       |    63 +
 .../Graphics/shaderlib/wine/include/ws2tcpip.h     |   217 +
 .../Graphics/shaderlib/wine/include/wshisotp.h     |    39 +
 .../Graphics/shaderlib/wine/include/wsipx.h        |    53 +
 .../Graphics/shaderlib/wine/include/wsnwlink.h     |    58 +
 .../Graphics/shaderlib/wine/include/wtsapi32.h     |   187 +
 .../Graphics/shaderlib/wine/include/wtypes.h       |   767 +
 .../Graphics/shaderlib/wine/include/wtypes.idl     |   848 +
 .../Graphics/shaderlib/wine/include/wuapi.idl      |  1359 ++
 .../Devices/Graphics/shaderlib/wine/include/xcmc.h |   359 +
 .../Graphics/shaderlib/wine/include/xinput.h       |   248 +
 .../Graphics/shaderlib/wine/include/xmldom.h       |    29 +
 .../Graphics/shaderlib/wine/include/xmldom.idl     |   847 +
 .../Graphics/shaderlib/wine/include/xmldomdid.h    |   214 +
 .../Graphics/shaderlib/wine/include/xmldso.idl     |    77 +
 .../Graphics/shaderlib/wine/include/xmldsodid.h    |    39 +
 .../Graphics/shaderlib/wine/include/xmllite.idl    |   304 +
 .../Graphics/shaderlib/wine/include/zmouse.h       |    55 +
 .../Graphics/shaderlib/wine/vbox/VBoxDbgGl.c       |   357 +
 .../Graphics/shaderlib/wine/vbox/VBoxDbgGl.h       |    43 +
 .../Graphics/shaderlib/wine/vbox/VBoxWineEx.h      |   147 +
 .../shaderlib/wine/vbox/libWineStub/debug.c        |   498 +
 .../wine/vbox/libWineStub/include/config.h         |  1275 ++
 .../shaderlib/wine/vbox/libWineStub/include/d3d8.h |  1154 ++
 .../shaderlib/wine/vbox/libWineStub/include/d3d9.h |  2047 ++
 .../wine/vbox/libWineStub/include/wine/debug.h     |   381 +
 .../wine/vbox/libWineStub/include/wine/list.h      |   246 +
 .../wine/vbox/libWineStub/include/wine/port.h      |   489 +
 .../wine/vbox/libWineStub/include/wine/rbtree.h    |   357 +
 .../wine/vbox/libWineStub/include/wine/unicode.h   |   355 +
 .../wine/vbox/libWineStub/include/wine/wined3d.h   |  9725 ++++++++++
 src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h   |  4569 +++++
 .../Devices/Graphics/shaderlib/wined3d_private.h   |  3432 ++++
 src/VBox/Devices/Graphics/shaderlib/winoverride.h  |    33 +
 src/VBox/Devices/Graphics/vmsvga/backdoor_def.h    |   126 +
 src/VBox/Devices/Graphics/vmsvga/svga3d_caps.h     |   132 +-
 src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h      |  1861 +-
 .../Devices/Graphics/vmsvga/svga3d_shaderdefs.h    |   522 +
 src/VBox/Devices/Graphics/vmsvga/svga_escape.h     |    80 +-
 src/VBox/Devices/Graphics/vmsvga/svga_overlay.h    |   189 +-
 src/VBox/Devices/Graphics/vmsvga/svga_reg.h        |  1597 +-
 src/VBox/Devices/Graphics/vmsvga/vmmouse_defs.h    |    71 +
 src/VBox/Devices/Graphics/vmsvga_glext/glext.h     | 13146 +++++++++++++
 src/VBox/Devices/Graphics/vmsvga_glext/glxext.h    |  1028 +
 src/VBox/Devices/Graphics/vmsvga_glext/wglext.h    |   950 +
 src/VBox/Devices/Makefile.kmk                      |   120 +-
 src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm   |    10 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative.md5sum     |     2 +-
 src/VBox/Devices/PC/DevACPI.cpp                    |     1 +
 src/VBox/Devices/PC/DevRTC.cpp                     |     2 +
 src/VBox/Devices/PC/ipxe/Makefile.kmk              |     2 +
 src/VBox/Devices/PC/ipxe/src/config/general.h      |     2 +-
 src/VBox/Devices/Storage/DevAHCI.cpp               |    90 +-
 src/VBox/Devices/Storage/DevBusLogic.cpp           |     3 +-
 src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp       |    43 +-
 src/VBox/Devices/USB/DrvVUSBRootHub.cpp            |    30 +-
 src/VBox/Devices/USB/VUSBInternal.h                |     7 +-
 src/VBox/Devices/USB/VUSBSniffer.cpp               |   746 +
 src/VBox/Devices/USB/VUSBSniffer.h                 |    87 +
 src/VBox/Devices/USB/VUSBUrb.cpp                   |    19 +-
 src/VBox/Devices/VMMDev/VMMDev.cpp                 |    10 +-
 .../Devices/testcase/tstDeviceStructSizeRC.cpp     |     4 +-
 .../Common/VBoxKeyboard/keyboard-layouts.h         |     9 +
 .../Frontends/Common/VBoxKeyboard/keyboard-list.h  |     1 +
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts |    12 +
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts |   437 +-
 .../Frontends/VirtualBox/src/globals/UIDefs.cpp    |     3 +
 src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h |     3 +
 .../VirtualBox/src/globals/VBoxGlobal.cpp          |    22 +-
 .../Frontends/VirtualBox/src/globals/VBoxGlobal.h  |     6 +-
 .../VirtualBox/src/platform/win/WinKeyboard.cpp    |   116 +
 .../VirtualBox/src/platform/win/WinKeyboard.h      |    54 +
 .../VirtualBox/src/runtime/UIFrameBuffer.cpp       |    11 +
 .../VirtualBox/src/runtime/UIKeyboardHandler.cpp   |   173 +-
 .../VirtualBox/src/runtime/UIKeyboardHandler.h     |    13 +-
 .../VirtualBox/src/runtime/UIMouseHandler.cpp      |     3 +-
 .../VirtualBox/src/runtime/UIMultiScreenLayout.cpp |     8 +-
 .../Frontends/VirtualBox/src/runtime/UISession.cpp |     8 +-
 .../Frontends/VirtualBox/src/runtime/UISession.h   |     4 +
 .../settings/global/UIGlobalSettingsDisplay.cpp    |    15 +-
 .../src/settings/global/UIGlobalSettingsDisplay.h  |     1 +
 .../src/settings/global/UIGlobalSettingsDisplay.ui |    28 +-
 .../VirtualBox/src/widgets/UIHostComboEditor.cpp   |   123 +-
 .../VirtualBox/src/widgets/UIHostComboEditor.h     |    16 +-
 .../Frontends/VirtualBox/src/wizards/UIWizard.cpp  |     3 +
 src/VBox/GuestHost/OpenGL/util/error.c             |   101 +
 src/VBox/GuestHost/OpenGL/util/net.c               |     2 +
 src/VBox/HostDrivers/Support/SUPLib.cpp            |     4 +-
 src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp |     2 +-
 src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp |    61 +-
 src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp    |     1 +
 .../Support/win/SUPHardenedVerify-win.h            |     5 +-
 .../Support/win/SUPHardenedVerifyImage-win.cpp     |    38 +-
 .../Support/win/SUPHardenedVerifyProcess-win.cpp   |     4 +-
 .../Support/win/SUPR3HardenedMain-win.cpp          |   169 +-
 src/VBox/Installer/darwin/Makefile.kmk             |     4 +
 src/VBox/Installer/linux/Makefile.kmk              |     1 +
 src/VBox/Installer/linux/rpm/rules                 |     3 +-
 src/VBox/Main/Makefile.kmk                         |    10 +-
 src/VBox/Main/glue/glue-java.xsl                   |   158 +-
 src/VBox/Main/src-client/ConsoleImpl2.cpp          |    24 +-
 src/VBox/Main/src-client/DisplayImpl.cpp           |     9 +
 src/VBox/Main/src-client/GuestDirectoryImpl.cpp    |     2 +-
 src/VBox/Main/src-client/GuestSessionImpl.cpp      |     8 +-
 src/VBox/Main/src-server/VRDEServerImpl.cpp        |     8 +-
 src/VBox/Main/webservice/vboxweb.cpp               |     4 +-
 src/VBox/Main/webservice/webtest.cpp               |     4 +-
 src/VBox/Runtime/common/misc/http.cpp              |     3 +
 src/VBox/Runtime/common/misc/s3.cpp                |     1 +
 .../r0drv/solaris/semeventwait-r0drv-solaris.h     |    10 +-
 .../Runtime/r0drv/solaris/thread2-r0drv-solaris.c  |     4 +-
 src/VBox/Runtime/r3/linux/sched-linux.cpp          |    43 +-
 src/VBox/Storage/VD.cpp                            |     1 +
 src/VBox/VMM/VMMR0/HMSVMR0.cpp                     |     7 +-
 src/VBox/VMM/VMMR0/HMVMXR0.cpp                     |   105 +-
 src/libs/Makefile.kmk                              |     2 +-
 819 files changed, 423865 insertions(+), 13222 deletions(-)

diff --git a/Config.kmk b/Config.kmk
index 67b8f87..4398062 100644
--- a/Config.kmk
+++ b/Config.kmk
@@ -208,7 +208,7 @@ VBOX_VERSION_MINOR = 3
 # This is the current build number. It should be increased every time we publish a
 # new build. The define is available in every source file. Only even build numbers
 # will be published, odd numbers are set during development.
-VBOX_VERSION_BUILD = 18
+VBOX_VERSION_BUILD = 20
 # The raw version string. This *must not* contain any other information/fields than
 # major, minor and build revision (as it is now) -- also will be used for host/guest version
 # comparison.
@@ -437,6 +437,10 @@ VBOX_WITH_WINMM =
 VBOX_WITH_INTERNAL_NETWORKING = 1
 # Enable vmsvga (svga2) graphics device variant, 2D part
 VBOX_WITH_VMSVGA = 1
+# Enable vmsvga (svga2) graphics device variant, 3D part
+if1of ($(KBUILD_TARGET), darwin win)
+ VBOX_WITH_VMSVGA3D = 1
+endif
 # Enable Host Guest Shared Memory Interface.
 VBOX_WITH_HGSMI = 1
 # Enable Video 2D Acceleration.
@@ -2601,11 +2605,7 @@ ifdef VBOX_SIGNING_MODE
   else if1of ($(VBOX_SIGNING_MODE), release development)
    VBOX_CERTIFICATE_SUBJECT_NAME ?= Oracle Corporation
    VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)" /a
-   if defined(VBOX_ONLY_ADDITIONS) || defined(VBOX_ONLY_EXTPACKS)
-    VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/VeriSign Class 3 Public Primary Certification Authority - G5.cer
-   else
-    VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-VSClass3.cer
-   endif
+   VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/VeriSign Class 3 Public Primary Certification Authority - G5.cer
    VBOX_CROSS_CERTIFICATE_FILE_ARGS ?= /ac "$(VBOX_CROSS_CERTIFICATE_FILE)"
    VBOX_TSA_URL ?= http://timestamp.verisign.com/scripts/timestamp.dll
    VBOX_TSA_URL_ARGS ?= /t "$(VBOX_TSA_URL)"
@@ -5698,7 +5698,7 @@ endif
 SVN                    ?= svn$(HOSTSUFF_EXE)
 VBOX_SVN_REV_KMK        = $(PATH_OUT)/revision.kmk
 ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 96516 $  )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 96996 $  )
  VBOX_SVN_DEP          := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries))
  ifeq ($(which $(SVN)),)
   VBOX_SVN_DEP         :=
@@ -5850,4 +5850,3 @@ st stat status:
 quick:
 	$(MAKE) VBOX_QUICK=1
 
-
diff --git a/doc/manual/en_US/user_Installation.xml b/doc/manual/en_US/user_Installation.xml
index 3d10e76..321bbca 100644
--- a/doc/manual/en_US/user_Installation.xml
+++ b/doc/manual/en_US/user_Installation.xml
@@ -221,10 +221,13 @@
       use the command line version of the installer application.</para>
 
       <para>Mount the disk image (dmg) file as described in the normal
-      installation. Then open a terminal session and execute:</para>
+      installation or use the following command line:</para>
 
-      <screen>sudo installer -pkg /Volumes/VirtualBox/VirtualBox.mpkg \
-      -target /Volumes/Macintosh\ HD</screen>
+      <screen>hdiutil attach /path/to/VirtualBox-xyz.dmg</screen>
+
+      <para>Then open a terminal session and execute:</para>
+
+      <screen>sudo installer -pkg /Volumes/VirtualBox/VirtualBox.pkg -target /Volumes/Macintosh\ HD</screen>
     </sect2>
   </sect1>
 
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index 8fa1c7b..6209caa 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -1,6 +1,148 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
   <sect1>
+    <title>Version 4.3.20 (2014-11-21)</title>
+
+    <para>This is a maintenance release. The following items were fixed and/or
+      added:</para>
+
+    <itemizedlist>
+
+      <listitem>
+        <para>VMM: fixed reboot hang of 32-bit Windows SMP guests (bug #13319,
+          #13462)</para>
+      </listitem>
+
+      <listitem>
+        <para>VMM: proper <emphasis>Math Fault</emphasis> handling with certain
+          legacy guests (bug #9042, AMD hosts)</para>
+      </listitem>
+      
+      <listitem>
+        <para>VMM: fixed a Guru Meditation <emphasis>VINF_EM_TRIPLE_FAULT</emphasis>
+          on older CPUs that don't support MSR-bitmaps (VT-x only;
+          bugs #13034, #13125, #13311, #13425, #13426, #13463, #13585)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fix 3D overlay window reparenting issue when VM goes to
+          fullscreen mode on X11 hosts.</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fix occasional loss of focus in full-screen mode on X11
+           host systems (4.3.16 regression)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: Mac OS X: wizards should have Cancel button
+          (bug #12541)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: added a global option to prevent automatic raising of the
+          new window by mouse move with multi-screen guests (bug #8878)</para>
+      </listitem>
+
+      <listitem>
+        <para>API: accept remote display port 0 as the default RDP port
+          (bug #8534)</para>
+      </listitem>
+
+      <listitem>
+        <para>VBoxManage: fixed crash when executing <emphasis>showvminfo</emphasis>
+          command under certain circumstances (bug #13190)</para>
+      </listitem>
+
+      <listitem>
+        <para>ACPI: fixed occassional Guru Meditations in ACPI timer code
+          (4.3.18 regression; bug #13521)</para>
+      </listitem>
+
+      <listitem>
+        <para>EFI: improved performance of IDE disk access</para>
+      </listitem>
+
+      <listitem>
+        <para>EFI: fixed a bug in the EFI video driver which prevented
+          Windows to boot in UEFI mode (bug #12022)</para>
+      </listitem>
+
+      <listitem>
+        <para>EFI: properly announce the amount of RAM for big VMs
+          (bugs #11103 and #13211)</para>
+      </listitem>
+
+      <listitem>
+        <para>Storage: fixed a crash under certain cicrumstances when a medium
+          was ejected from a drive attached to the SATA controller without
+          inserting a new medium before pausing or closing the VM
+          (4.3.16 regression) </para>
+      </listitem>
+
+      <listitem>
+        <para>Storage: fixed an interrupt acknowledge issue causing hanging guests
+          or slower I/O (4.3.18 regression)</para>
+      </listitem>
+
+      <listitem>
+        <para>Storage: fixed broken resume after the VM was suspended due to
+          a full disk if host I/O caching is used</para>
+      </listitem>
+
+      <listitem>
+        <para>Storage: fixed a Guru Meditation under certain conditions when
+          using the DevLsiLogic controller with VMs running in raw mode
+          (4.3 regression; bugs #12254, #12655, #12709, #12774, #12886)</para>
+      </listitem>
+
+      <listitem>
+        <para>Guest Control: fixed a bug which might lead to a crash during
+          recursive copy</para>
+      </listitem>
+
+      <listitem>
+        <para>SDK: Java COM bindings fixes</para>
+      </listitem>
+
+      <listitem>
+        <para>iPXE: enable the HTTP download protocol (bug #13628)</para>
+      </listitem>
+
+      <listitem>
+        <para>Runtime: do not use a fixed stack size creating temporary threads
+           during initialization (bug #13038)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed more startup problems on certain Windows hosts due
+          to conflicts with anti-virus software; better error reporting
+          (4.3.14 regression; bug #13187)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed DirectSound host audio failure under certain conditions
+          (bug #13418)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed additional cases of 4.3.14 regression
+          whereby AltGr stopped working for some people (bug #13216)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows Additions: preserve guest monitor layout when resizing
+          Windows 7 or newer guests</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux Additions: Linux 3.18 compile fixes (bug #13515)</para>
+      </listitem>
+
+    </itemizedlist>
+  </sect1>
+
+  <sect1>
     <title>Version 4.3.18 (2014-10-10)</title>
 
     <para>This is a maintenance release. The following items were fixed and/or
diff --git a/include/VBox/err.h b/include/VBox/err.h
index 5bd8993..83c2e35 100644
--- a/include/VBox/err.h
+++ b/include/VBox/err.h
@@ -2536,8 +2536,6 @@
 /** @} */
 
 
-/** @} */
-
 /** @name VBox Guest Control Status Codes
  * @{
  */
@@ -2548,6 +2546,17 @@
 /** @} */
 
 
+/** @name Main API Status Codes
+ * @{
+ */
+/** The configuration constructor in main failed due to a COM error.  Check
+ * the release log of the VM for further details. */
+#define VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR      (-6400)
+/** The configuration constructor in main failed due to an internal consistency
+ *  error. Consult the release log of the VM for further details. */
+#define VERR_MAIN_CONFIG_CONSTRUCTOR_IPE            (-6401)
+/** @} */
+
 /* SED-END */
 
 /** @} */
diff --git a/include/VBox/vmm/pdmifs.h b/include/VBox/vmm/pdmifs.h
index b9c2694..e8d3aba 100644
--- a/include/VBox/vmm/pdmifs.h
+++ b/include/VBox/vmm/pdmifs.h
@@ -616,9 +616,27 @@ typedef struct PDMIDISPLAYPORT
         const uint8_t *pbSrc, int32_t xSrc, int32_t ySrc, uint32_t cxSrc, uint32_t cySrc, uint32_t cbSrcLine, uint32_t cSrcBitsPerPixel,
         uint8_t       *pbDst, int32_t xDst, int32_t yDst, uint32_t cxDst, uint32_t cyDst, uint32_t cbDstLine, uint32_t cDstBitsPerPixel));
 
+#ifdef VBOX_WITH_VMSVGA
+    /**
+     * Inform the VGA device of viewport changes (as a result of e.g. scrolling)
+     *
+     * @param   pInterface          Pointer to this interface.
+     * @param   uScreenId           The screen updates are for.
+     * @param   x                   The upper left corner x coordinate of the new viewport rectangle
+     * @param   y                   The upper left corner y coordinate of the new viewport rectangle
+     * @param   cx                  The width of the new viewport rectangle
+     * @param   cy                  The height of the new viewport rectangle
+     * @thread  The emulation thread.
+     */
+    DECLR3CALLBACKMEMBER(void, pfnSetViewPort,(PPDMIDISPLAYPORT pInterface, uint32_t uScreenId, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy));
+#endif
 } PDMIDISPLAYPORT;
 /** PDMIDISPLAYPORT interface ID. */
+#ifdef VBOX_WITH_VMSVGA
+#define PDMIDISPLAYPORT_IID                     "f7ed5b9a-3940-4862-9310-1de7e3d118a4"
+#else
 #define PDMIDISPLAYPORT_IID                     "22d3d93d-3407-487a-8308-85367eae00bb"
+#endif
 
 
 typedef struct VBOXVHWACMD *PVBOXVHWACMD; /**< @todo r=bird: A line what it is to make doxygen happy. */
diff --git a/include/iprt/cdefs.h b/include/iprt/cdefs.h
index 7675afc..c1f7cf0 100644
--- a/include/iprt/cdefs.h
+++ b/include/iprt/cdefs.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2014 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1539,7 +1539,11 @@
  * @param   type    Structure type.
  * @param   member  Member.
  */
-#define RT_OFFSETOF(type, member)               ( (int)(uintptr_t)&( ((type *)(void *)0)->member) )
+#if defined(__GNUC__) && defined(__cplusplus) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+# define RT_OFFSETOF(type, member)              ( (int)(uintptr_t)&( ((type *)(void *)0x1000)->member) - 0x1000 )
+#else
+# define RT_OFFSETOF(type, member)              ( (int)(uintptr_t)&( ((type *)(void *)0)->member) )
+#endif
 
 /** @def RT_UOFFSETOF
  * Our own special offsetof() variant, returns an unsigned result.
@@ -1553,7 +1557,11 @@
  * @param   type    Structure type.
  * @param   member  Member.
  */
-#define RT_UOFFSETOF(type, member)              ( (uintptr_t)&( ((type *)(void *)0)->member) )
+#if defined(__GNUC__) && defined(__cplusplus) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+# define RT_UOFFSETOF(type, member)             ( (uintptr_t)&( ((type *)(void *)0x1000)->member) - 0x1000 )
+#else
+# define RT_UOFFSETOF(type, member)             ( (uintptr_t)&( ((type *)(void *)0)->member) )
+#endif
 
 /** @def RT_OFFSETOF_ADD
  * RT_OFFSETOF with an addend.
diff --git a/include/iprt/types.h b/include/iprt/types.h
index 52ddeef..cac8de9 100644
--- a/include/iprt/types.h
+++ b/include/iprt/types.h
@@ -487,17 +487,17 @@ typedef const RTUINT128U *PCRTUINT128U;
 /** @def RTUINT128_INIT
  * Portable RTUINT128U initializer. */
 #ifdef RT_BIG_ENDIAN
-# define RTUINT128_INIT(a_Hi, a_Lo) { a_Hi, a_Lo }
+# define RTUINT128_INIT(a_Hi, a_Lo) { { a_Hi, a_Lo } }
 #else
-# define RTUINT128_INIT(a_Hi, a_Lo) { a_Lo, a_Hi }
+# define RTUINT128_INIT(a_Hi, a_Lo) { { a_Lo, a_Hi } }
 #endif
 
 /** @def RTUINT128_INIT_C
  * Portable RTUINT128U initializer for 64-bit constants. */
 #ifdef RT_BIG_ENDIAN
-# define RTUINT128_INIT_C(a_Hi, a_Lo) { UINT64_C(a_Hi), UINT64_C(a_Lo) }
+# define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Hi), UINT64_C(a_Lo) } }
 #else
-# define RTUINT128_INIT_C(a_Hi, a_Lo) { UINT64_C(a_Lo), UINT64_C(a_Hi) }
+# define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Lo), UINT64_C(a_Hi) } }
 #endif
 
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
index e9191a1..ae565d1 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
@@ -97,7 +97,7 @@ int  VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWOR
 void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs);
 int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain);
 
-typedef BOOL WINAPI FNQUERYFULLPROCESSIMAGENAME(HANDLE,  DWORD, LPTSTR, PDWORD);
+typedef BOOL WINAPI FNQUERYFULLPROCESSIMAGENAME(HANDLE,  DWORD, LPWSTR, PDWORD);
 typedef FNQUERYFULLPROCESSIMAGENAME *PFNQUERYFULLPROCESSIMAGENAME;
 
 
@@ -129,16 +129,12 @@ static bool vboxServiceVMInfoSession0Separation(void)
  * Retrieves the module name of a given process.
  *
  * @return  IPRT status code.
- * @param   pProc
- * @param   pszBuf
- * @param   cbBuf
  */
-static int VBoxServiceVMInfoWinProcessesGetModuleName(PVBOXSERVICEVMINFOPROC const pProc,
-                                                      TCHAR *pszName, size_t cbName)
+static int VBoxServiceVMInfoWinProcessesGetModuleNameA(PVBOXSERVICEVMINFOPROC const pProc,
+                                                       PRTUTF16 *ppszName)
 {
     AssertPtrReturn(pProc, VERR_INVALID_POINTER);
-    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-    AssertReturn(cbName, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(ppszName, VERR_INVALID_POINTER);
 
     /** @todo Only do this once. Later. */
     OSVERSIONINFOEX OSInfoEx;
@@ -170,33 +166,44 @@ static int VBoxServiceVMInfoWinProcessesGetModuleName(PVBOXSERVICEVMINFOPROC con
     {
         /* Since GetModuleFileNameEx has trouble with cross-bitness stuff (32-bit apps cannot query 64-bit
            apps and vice verse) we have to use a different code path for Vista and up. */
+        WCHAR wszName[_1K];
+        DWORD dwLen = sizeof(wszName);
 
-        /* Note: For 2000 + NT4 we might just use GetModuleFileName() instead. */
+        /* Note: For 2000 + NT4 we might just use GetModuleFileNameW() instead. */
         if (OSInfoEx.dwMajorVersion >= 6 /* Vista or later */)
         {
             /* Loading the module and getting the symbol for each and every process is expensive
              * -- since this function (at the moment) only is used for debugging purposes it's okay. */
             PFNQUERYFULLPROCESSIMAGENAME pfnQueryFullProcessImageName;
             pfnQueryFullProcessImageName = (PFNQUERYFULLPROCESSIMAGENAME)
-                RTLdrGetSystemSymbol("kernel32.dll", "QueryFullProcessImageNameA");
-            /** @todo r=bird: WTF don't we query the UNICODE name? */
+                RTLdrGetSystemSymbol("kernel32.dll", "QueryFullProcessImageNameW");
             if (pfnQueryFullProcessImageName)
             {
-                /** @todo r=bird: Completely bogus use of TCHAR.
-                 *  !!ALL USE OF TCHAR IS HEREWITH BANNED IN ALL VBOX SOURCES!!
-                 *  We use WCHAR when talking to windows, everything else is WRONG. (We don't
-                 *  want Chinese MBCS being treated as UTF-8.) */
-                DWORD dwLen = cbName / sizeof(TCHAR);
-                if (!pfnQueryFullProcessImageName(h, 0 /*PROCESS_NAME_NATIVE*/, pszName, &dwLen))
+                if (!pfnQueryFullProcessImageName(h, 0 /*PROCESS_NAME_NATIVE*/, wszName, &dwLen))
                     rc = VERR_ACCESS_DENIED;
             }
         }
         else
         {
-            if (!GetModuleFileNameEx(h, NULL /* Get main executable */, pszName, cbName / sizeof(TCHAR)))
+            if (!GetModuleFileNameExW(h, NULL /* Get main executable */, wszName, dwLen))
                 rc = VERR_ACCESS_DENIED;
         }
 
+        if (   RT_FAILURE(rc)
+            && g_cVerbosity > 3)
+        {
+           VBoxServiceError("Unable to retrieve process name for PID=%ld, error=%ld\n",
+                             pProc->id, GetLastError());
+        }
+        else
+        {
+            PRTUTF16 pszName = RTUtf16Dup(wszName);
+            if (pszName)
+                *ppszName = pszName;
+            else
+                rc = VERR_NO_MEMORY;
+        }
+
         CloseHandle(h);
     }
 
@@ -576,28 +583,33 @@ uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
      * session <-> process LUIDs.
      */
     uint32_t cNumProcs = 0;
+
     for (DWORD i = 0; i < cProcs; i++)
     {
-        if (g_cVerbosity)
-        {
-            TCHAR szModule[_1K];
-            rc = VBoxServiceVMInfoWinProcessesGetModuleName(&paProcs[i], szModule, sizeof(szModule));
-            if (RT_SUCCESS(rc))
-                VBoxServiceVerbose(4, "PID=%ld: %s\n",
-                                   paProcs[i].id, szModule);
-        }
-
         PSID pProcSID = paProcs[i].pSid;
         if (   RT_SUCCESS(rc)
             && pProcSID
             && IsValidSid(pProcSID))
         {
-            if (   EqualSid(pSessionData->Sid, paProcs[i].pSid)
-                && paProcs[i].fInteractive)
+            if (EqualSid(pSessionData->Sid, paProcs[i].pSid))
             {
-                cNumProcs++;
-                if (!g_cVerbosity) /* We want a bit more info on higher verbosity. */
-                    break;
+                if (g_cVerbosity)
+                {
+                    PRTUTF16 pszName;
+                    int rc2 = VBoxServiceVMInfoWinProcessesGetModuleNameA(&paProcs[i], &pszName);
+                    VBoxServiceVerbose(4, "Session %RU32: PID=%ld (fInt=%RTbool): %ls\n",
+                                       pSessionData->Session, paProcs[i].id, paProcs[i].fInteractive,
+                                       RT_SUCCESS(rc2) ? pszName : L"<Unknown>");
+                    if (RT_SUCCESS(rc2))
+                        RTUtf16Free(pszName);
+                }
+
+                if (paProcs[i].fInteractive)
+                {
+                    cNumProcs++;
+                    if (!g_cVerbosity) /* We want a bit more info on higher verbosity. */
+                        break;
+                }
             }
         }
     }
diff --git a/src/VBox/Additions/linux/drm/vboxvideo_drm.c b/src/VBox/Additions/linux/drm/vboxvideo_drm.c
index 4ad6ef6..f979a35 100644
--- a/src/VBox/Additions/linux/drm/vboxvideo_drm.c
+++ b/src/VBox/Additions/linux/drm/vboxvideo_drm.c
@@ -122,7 +122,12 @@ static struct file_operations driver_fops =
         .open = drm_open,
         .release = drm_release,
         .unlocked_ioctl = drm_ioctl,
+# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0)
+        /* This shouldn't be necessary even for old kernels as there is
+         * nothing sensible to mmap. But we play safe and keep it for
+         * legacy reasons. */
         .mmap = drm_mmap,
+# endif
         .poll = drm_poll,
 };
 #endif
diff --git a/src/VBox/Devices/Audio/dsoundaudio.c b/src/VBox/Devices/Audio/dsoundaudio.c
index 7f73058..0c745d5 100644
--- a/src/VBox/Devices/Audio/dsoundaudio.c
+++ b/src/VBox/Devices/Audio/dsoundaudio.c
@@ -541,7 +541,7 @@ static int dsound_open (dsound *s)
     DSBUFFERDESC dsbd;
     HWND hwnd;
 
-    hwnd = GetForegroundWindow ();
+    hwnd = GetDesktopWindow ();
     hr = IDirectSound_SetCooperativeLevel (
         s->dsound,
         hwnd,
diff --git a/src/VBox/Devices/EFI/DevEFI.cpp b/src/VBox/Devices/EFI/DevEFI.cpp
index 34b4b24..1d937cf 100644
--- a/src/VBox/Devices/EFI/DevEFI.cpp
+++ b/src/VBox/Devices/EFI/DevEFI.cpp
@@ -1712,13 +1712,25 @@ static DECLCALLBACK(int) efiInitComplete(PPDMDEVINS pDevIns)
      * Memory sizes.
      */
     uint64_t const offRamHole = _4G - pThis->cbRamHole;
-    uint32_t u32;
+    uint32_t u32Low = 0;
+    uint32_t u32Chunks = 0;
     if (pThis->cbRam > 16 * _1M)
-        u32 = (uint32_t)( (RT_MIN(RT_MIN(pThis->cbRam, offRamHole), UINT32_C(0xffe00000)) - 16U * _1M) / _64K );
-    else
-        u32 = 0;
-    cmosWrite(pDevIns, 0x34, u32 & 0xff);
-    cmosWrite(pDevIns, 0x35, u32 >> 8);
+    {
+        u32Low = (uint32_t)RT_MIN(RT_MIN(pThis->cbRam, offRamHole), UINT32_C(0xffe00000));
+        u32Chunks = (u32Low - 16U * _1M) / _64K;
+    }
+    cmosWrite(pDevIns, 0x34, RT_BYTE1(u32Chunks));
+    cmosWrite(pDevIns, 0x35, RT_BYTE2(u32Chunks));
+
+    if (u32Low < pThis->cbRam)
+    {
+        uint64_t u64 = pThis->cbRam - u32Low;
+        u32Chunks = (uint32_t)(u64 / _64K);
+        cmosWrite(pDevIns, 0x5b, RT_BYTE1(u32Chunks));
+        cmosWrite(pDevIns, 0x5c, RT_BYTE2(u32Chunks));
+        cmosWrite(pDevIns, 0x5d, RT_BYTE3(u32Chunks));
+        cmosWrite(pDevIns, 0x5e, RT_BYTE4(u32Chunks));
+    }
 
     /*
      * Number of CPUs.
diff --git a/src/VBox/Devices/EFI/Firmware/Makefile.kmk b/src/VBox/Devices/EFI/Firmware/Makefile.kmk
index 2146c70..ac451db 100644
--- a/src/VBox/Devices/EFI/Firmware/Makefile.kmk
+++ b/src/VBox/Devices/EFI/Firmware/Makefile.kmk
@@ -249,7 +249,9 @@ VBOX_EFI_BUILD_CMD += \
 	-D "VBOX_PATH_ROOT=$(PATH_ROOT)" \
 	-D "VBOX_RESET_VECTOR_X86=$(VBoxEfiResetVector-x86_1_TARGET)" \
 	-D "VBOX_RESET_VECTOR_AMD64=$(VBoxEfiResetVector-amd64_1_TARGET)" \
-       $(if $(VBOX_OSE),-D "VBOX_OSE=1") \
+	$(if $(VBOX_OSE),-D "VBOX_OSE=1") \
+	--silent \
+	$(if $(KBUILD_VERBOSE),,--quiet) \
 	--no-cache \
 	--buildtarget $(VBOX_EFI_BUILD_TARGET) \
 	--tagname $(VBOX_EFI_TOOL_CHAIN)
diff --git a/src/VBox/Devices/EFI/Firmware/PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c b/src/VBox/Devices/EFI/Firmware/PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c
index cd1fd08..d07c51d 100644
--- a/src/VBox/Devices/EFI/Firmware/PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c
+++ b/src/VBox/Devices/EFI/Firmware/PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c
@@ -13,6 +13,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/ 
 
 #include "PciHostBridge.h"
+#ifdef VBOX
+# define IN_RING3
+# include <iprt/asm-amd64-x86.h>
+#endif
 
 typedef struct {
   EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     SpaceDesp[TypeMax];
@@ -994,6 +998,35 @@ RootBridgeIoIoRW (
   InStride = mInStride[Width];
   OutStride = mOutStride[Width];
   OperationWidth = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) (Width & 0x03);
+#ifdef VBOX
+  /* rep ins/outs is much faster than single port I/O */
+  if (Count > 1 && Width >= EfiPciWidthFifoUint8 && Width <= EfiPciWidthFifoUint32)
+  {
+    switch (Width)
+    {
+      case EfiPciWidthFifoUint8:
+        if (Write)
+          ASMOutStrU8((RTIOPORT)Address, (const uint8_t*)Buffer, (size_t)Count);
+        else
+          ASMInStrU8((RTIOPORT)Address, (uint8_t*)Buffer, (size_t)Count);
+        break;
+      case EfiPciWidthFifoUint16:
+        if (Write)
+          ASMOutStrU16((RTIOPORT)Address, (const uint16_t*)Buffer, (size_t)Count);
+        else
+          ASMInStrU16((RTIOPORT)Address, (uint16_t*)Buffer, (size_t)Count);
+        break;
+      case EfiPciWidthFifoUint32:
+        if (Write)
+          ASMOutStrU32((RTIOPORT)Address, (const uint32_t*)Buffer, (size_t)Count);
+        else
+          ASMInStrU32((RTIOPORT)Address, (uint32_t*)Buffer, (size_t)Count);
+        break;
+      default:
+        ASSERT (FALSE);
+    }
+  } else {
+#endif
   for (Uint8Buffer = Buffer; Count > 0; Address += InStride, Uint8Buffer += OutStride, Count--) {
     if (Write) {
       switch (OperationWidth) {
@@ -1035,6 +1068,9 @@ RootBridgeIoIoRW (
       }
     }
   }
+#ifdef VBOX
+  }
+#endif
   return EFI_SUCCESS;
 }
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ata.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ata.c
deleted file mode 100644
index efa174c..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ata.c
+++ /dev/null
@@ -1,2822 +0,0 @@
-/* $Id: Ata.c $ */
-/** @file
- * Ata.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  This file contains all helper functions on the ATA command
-
-  Copyright (c) 2006 - 2008, Intel Corporation.<BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-  @par Revision Reference:
-  2002-6: Add Atapi6 enhancement, support >120GB hard disk, including
-  update - ATAIdentify() func
-  update - AtaBlockIoReadBlocks() func
-  update - AtaBlockIoWriteBlocks() func
-  add    - AtaAtapi6Identify() func
-  add    - AtaReadSectorsExt() func
-  add    - AtaWriteSectorsExt() func
-  add    - AtaPioDataInExt() func
-  add    - AtaPioDataOutExt() func
-
-**/
-
-#include "IdeBus.h"
-/**
-  This function is called by ATAIdentify() to identity whether this disk
-  supports ATA/ATAPI6 48bit addressing, ie support >120G capacity
-
-  @param IdeDev pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                all the information of the IDE device.
-
-  @retval EFI_SUCCESS       The disk specified by IdeDev is a Atapi6 supported one and
-                            48-bit addressing must be used
-  @retval EFI_UNSUPPORTED   The disk doesn't not support Atapi6 or it supports but the
-                            capacity is below 120G, 48bit addressing is not needed
-  @retval  EFI_DEVICE_ERROR      The identify data in IdeDev is incorrect
-  @retval  EFI_INVALID_PARAMETER The identify data in IdeDev is NULL.
-
-  @note  This function must be called after DEVICE_IDENTITY command has been
-          successfully returned
-
-**/
-EFI_STATUS
-AtaAtapi6Identify (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  UINT8             Index;
-  EFI_LBA           TmpLba;
-  EFI_LBA           Capacity;
-  EFI_IDENTIFY_DATA *Atapi6IdentifyStruct;
-
-  if (IdeDev->IdData == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Atapi6IdentifyStruct = IdeDev->IdData;
-
-  if ((Atapi6IdentifyStruct->AtapiData.cmd_set_support_83 & (BIT15 | BIT14)) != 0x4000) {
-    //
-    // Per ATA-6 spec, word83: bit15 is zero and bit14 is one
-    //
-    return EFI_DEVICE_ERROR;
-  }
-
-  if ((Atapi6IdentifyStruct->AtapiData.cmd_set_support_83 & BIT10) == 0) {
-    //
-    // The device doesn't support 48 bit addressing
-    //
-    return EFI_UNSUPPORTED;
-  }
-
-  //
-  // 48 bit address feature set is supported, get maximum capacity
-  //
-  Capacity = Atapi6IdentifyStruct->AtapiData.max_user_lba_for_48bit_addr[0];
-  for (Index = 1; Index < 4; Index++) {
-    //
-    // Lower byte goes first: word[100] is the lowest word, word[103] is highest
-    //
-    TmpLba = Atapi6IdentifyStruct->AtapiData.max_user_lba_for_48bit_addr[Index];
-    Capacity |= LShiftU64 (TmpLba, 16 * Index);
-  }
-
-  if (Capacity > MAX_28BIT_ADDRESSING_CAPACITY) {
-    //
-    // Capacity exceeds 120GB. 48-bit addressing is really needed
-    //
-    IdeDev->Type = Ide48bitAddressingHardDisk;
-
-    //
-    // Fill block media information:Media->LogicalPartition ,
-    // Media->WriteCaching will be filledin the DiscoverIdeDevcie() function.
-    //
-    IdeDev->BlkIo.Media->IoAlign        = 4;
-    IdeDev->BlkIo.Media->MediaId        = 1;
-    IdeDev->BlkIo.Media->RemovableMedia = FALSE;
-    IdeDev->BlkIo.Media->MediaPresent   = TRUE;
-    IdeDev->BlkIo.Media->ReadOnly       = FALSE;
-    IdeDev->BlkIo.Media->BlockSize      = 0x200;
-    IdeDev->BlkIo.Media->LastBlock      = Capacity - 1;
-
-    return EFI_SUCCESS;
-  }
-
-  return EFI_UNSUPPORTED;
-}
-/**
-  Enable SMART of the disk if supported
-
-  @param IdeDev pointer pointing to IDE_BLK_IO_DEV data structure,used to record
-                all the information of the IDE device.
-**/
-VOID
-AtaSMARTSupport (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  EFI_STATUS        Status;
-  BOOLEAN           SMARTSupported;
-  UINT8             Device;
-  EFI_IDENTIFY_DATA *TmpAtaIdentifyPointer;
-  UINT8             DeviceSelect;
-  UINT8             LBAMid;
-  UINT8             LBAHigh;
-
-  //
-  // Detect if the device supports S.M.A.R.T.
-  //
-  if ((IdeDev->IdData->AtaData.command_set_supported_83 & 0xc000) != 0x4000) {
-    //
-    // Data in word 82 is not valid (bit15 shall be zero and bit14 shall be to one)
-    //
-    return ;
-  } else {
-    if ((IdeDev->IdData->AtaData.command_set_supported_82 & 0x0001) != 0x0001) {
-      //
-      // S.M.A.R.T is not supported by the device
-      //
-      SMARTSupported = FALSE;
-    } else {
-      SMARTSupported = TRUE;
-    }
-  }
-
-  if (!SMARTSupported) {
-    //
-    // Report nonsupport status code
-    //
-    REPORT_STATUS_CODE (
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,
-      (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_ATA_BUS_SMART_NOTSUPPORTED)
-      );
-  } else {
-    //
-    // Enable this feature
-    //
-    REPORT_STATUS_CODE (
-      EFI_PROGRESS_CODE,
-      (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_ATA_BUS_SMART_ENABLE)
-      );
-
-    Device = (UINT8) ((IdeDev->Device << 4) | 0xe0);
-    Status = AtaNonDataCommandIn (
-              IdeDev,
-              ATA_CMD_SMART,
-              Device,
-              ATA_SMART_ENABLE_OPERATION,
-              0,
-              0,
-              ATA_CONSTANT_4F,
-              ATA_CONSTANT_C2
-              );
-    //
-    // Detect if this feature is enabled
-    //
-    TmpAtaIdentifyPointer = (EFI_IDENTIFY_DATA *) AllocateZeroPool (sizeof (EFI_IDENTIFY_DATA));
-    if (TmpAtaIdentifyPointer == NULL) {
-      return;
-    }
-
-    DeviceSelect          = (UINT8) ((IdeDev->Device) << 4);
-    Status = AtaPioDataIn (
-              IdeDev,
-              (VOID *) TmpAtaIdentifyPointer,
-              sizeof (EFI_IDENTIFY_DATA),
-              ATA_CMD_IDENTIFY_DRIVE,
-              DeviceSelect,
-              0,
-              0,
-              0,
-              0
-              );
-    if (EFI_ERROR (Status)) {
-      gBS->FreePool (TmpAtaIdentifyPointer);
-      return ;
-    }
-
-    //
-    // Check if the feature is enabled
-    //
-    if ((TmpAtaIdentifyPointer->AtaData.command_set_feature_enb_85 & 0x0001) == 0x0001) {
-      //
-      // Read status data
-      //
-      AtaNonDataCommandIn (
-        IdeDev,
-        ATA_CMD_SMART,
-        Device,
-        ATA_SMART_RETURN_STATUS,
-        0,
-        0,
-        ATA_CONSTANT_4F,
-        ATA_CONSTANT_C2
-        );
-      LBAMid  = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb);
-      LBAHigh = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb);
-
-      if ((LBAMid == 0x4f) && (LBAHigh == 0xc2)) {
-        //
-        // The threshold exceeded condition is not detected by the device
-        //
-        REPORT_STATUS_CODE (
-              EFI_PROGRESS_CODE,
-              (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_ATA_BUS_SMART_UNDERTHRESHOLD)
-              );
-
-      } else if ((LBAMid == 0xf4) && (LBAHigh == 0x2c)) {
-        //
-        // The threshold exceeded condition is  detected by the device
-        //
-        REPORT_STATUS_CODE (
-              EFI_PROGRESS_CODE,
-              (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD)
-              );
-      }
-
-    } else {
-      //
-      // Report disabled status code
-      //
-      REPORT_STATUS_CODE (
-            EFI_ERROR_CODE | EFI_ERROR_MINOR,
-            (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_ATA_BUS_SMART_DISABLED)
-            );
-    }
-
-    gBS->FreePool (TmpAtaIdentifyPointer);
-  }
-
-  return ;
-}
-/**
-  Sends out an ATA Identify Command to the specified device.
-
-  This function is called by DiscoverIdeDevice() during its device
-  identification. It sends out the ATA Identify Command to the
-  specified device. Only ATA device responses to this command. If
-  the command succeeds, it returns the Identify data structure which
-  contains information about the device. This function extracts the
-  information it needs to fill the IDE_BLK_IO_DEV data structure,
-  including device type, media block size, media capacity, and etc.
-
-  @param IdeDev  pointer pointing to IDE_BLK_IO_DEV data structure,used to record
-                 all the information of the IDE device.
-
-  @retval EFI_SUCCESS      Identify ATA device successfully.
-  @retval EFI_DEVICE_ERROR ATA Identify Device Command failed or device is not ATA device.
-  @note  parameter IdeDev will be updated in this function.
-
-**/
-EFI_STATUS
-ATAIdentify (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  EFI_STATUS        Status;
-  EFI_IDENTIFY_DATA *AtaIdentifyPointer;
-  UINT32            Capacity;
-  UINT8             DeviceSelect;
-  UINTN                         Retry;
-
-  //
-  //  AtaIdentifyPointer is used for accommodating returned IDENTIFY data of
-  //  the ATA Identify command
-  //
-  AtaIdentifyPointer = (EFI_IDENTIFY_DATA *) AllocateZeroPool (sizeof (EFI_IDENTIFY_DATA));
-  if (AtaIdentifyPointer == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  //
-  //  use ATA PIO Data In protocol to send ATA Identify command
-  //  and receive data from device
-  //
-  DeviceSelect  = (UINT8) ((IdeDev->Device) << 4);
-
-
-  Retry = 3;
-  while (Retry > 0) {
-    Status = AtaPioDataIn (
-              IdeDev,
-              (VOID *) AtaIdentifyPointer,
-              sizeof (EFI_IDENTIFY_DATA),
-              ATA_CMD_IDENTIFY_DRIVE,
-              DeviceSelect,
-              0,
-              0,
-              0,
-              0
-              );
-    //
-    // If ATA Identify command succeeds, then according to the received
-    // IDENTIFY data,
-    // identify the device type ( ATA or not ).
-    // If ATA device, fill the information in IdeDev.
-    // If not ATA device, return IDE_DEVICE_ERROR
-    //
-    if (!EFI_ERROR (Status)) {
-
-      IdeDev->IdData = AtaIdentifyPointer;
-
-      //
-      // Print ATA Module Name
-      //
-      PrintAtaModuleName (IdeDev);
-
-      //
-      // bit 15 of pAtaIdentify->config is used to identify whether device is
-      // ATA device or ATAPI device.
-      // if 0, means ATA device; if 1, means ATAPI device.
-      //
-      if ((AtaIdentifyPointer->AtaData.config & 0x8000) == 0x00) {
-        //
-        // Detect if support S.M.A.R.T. If yes, enable it as default
-        //
-        AtaSMARTSupport (IdeDev);
-
-        //
-        // Check whether this device needs 48-bit addressing (ATAPI-6 ata device)
-        //
-        Status = AtaAtapi6Identify (IdeDev);
-        if (!EFI_ERROR (Status)) {
-          //
-          // It's a disk with >120GB capacity, initialized in AtaAtapi6Identify()
-          //
-          return EFI_SUCCESS;
-        } else if (Status == EFI_DEVICE_ERROR) {
-                  //
-                  // Some disk with big capacity (>200GB) is slow when being identified
-                  // and will return all zero for word83.
-                  // We try twice at first. If it fails, we do a SoftRest and try again.
-                  //
-                  Retry--;
-                  if (Retry == 1) {
-                    //
-                    // Do a SoftRest before the third attempt.
-                    //
-                    AtaSoftReset (IdeDev);
-                  }
-                  continue;
-            }
-        //
-        // This is a hard disk <= 120GB capacity, treat it as normal hard disk
-        //
-        IdeDev->Type = IdeHardDisk;
-
-        //
-        // Block Media Information:
-        // Media->LogicalPartition , Media->WriteCaching will be filled
-        // in the DiscoverIdeDevcie() function.
-        //
-        IdeDev->BlkIo.Media->IoAlign        = 4;
-        IdeDev->BlkIo.Media->MediaId        = 1;
-        IdeDev->BlkIo.Media->RemovableMedia = FALSE;
-        IdeDev->BlkIo.Media->MediaPresent   = TRUE;
-        IdeDev->BlkIo.Media->ReadOnly       = FALSE;
-        IdeDev->BlkIo.Media->BlockSize      = 0x200;
-
-        //
-        // Calculate device capacity
-        //
-        Capacity = ((UINT32)AtaIdentifyPointer->AtaData.user_addressable_sectors_hi << 16) |
-                  AtaIdentifyPointer->AtaData.user_addressable_sectors_lo ;
-        IdeDev->BlkIo.Media->LastBlock = Capacity - 1;
-
-        return EFI_SUCCESS;
-      }
-
-    }
-        break;
-  }
-
-  gBS->FreePool (AtaIdentifyPointer);
-  //
-  // Make sure the pIdData will not be freed again.
-  //
-  IdeDev->IdData = NULL;
-
-  return EFI_DEVICE_ERROR;
-}
-
-/**
-  This function is a helper function used to change the char order in a string. It
-  is designed specially for the PrintAtaModuleName() function. After the IDE device
-  is detected, the IDE driver gets the device module name by sending ATA command
-  called ATA Identify Command or ATAPI Identify Command to the specified IDE device.
-  The module name returned is a string of ASCII characters: the first character is bit8--bit15
-  of the first word, the second character is BIT0--bit7 of the first word and so on. Thus
-  the string can not be print directly before it is preprocessed by this func to change
-  the order of characters in each word in the string.
-
-  @param Destination Indicates the destination string.
-  @param Source      Indicates the source string.
-  @param Size         the length of the string
-**/
-VOID
-SwapStringChars (
-  IN CHAR8  *Destination,
-  IN CHAR8  *Source,
-  IN UINT32 Size
-  )
-{
-  UINT32  Index;
-  CHAR8   Temp;
-
-  for (Index = 0; Index < Size; Index += 2) {
-
-    Temp                    = Source[Index + 1];
-    Destination[Index + 1]  = Source[Index];
-    Destination[Index]      = Temp;
-  }
-}
-/**
-  This function is called by ATAIdentify() or ATAPIIdentify() to print device's module name.
-
-  @param  IdeDev   pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                   all the information of the IDE device.
-**/
-VOID
-PrintAtaModuleName (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  if (IdeDev->IdData == NULL) {
-    return ;
-  }
-
-  SwapStringChars (IdeDev->ModelName, IdeDev->IdData->AtaData.ModelName, 40);
-  IdeDev->ModelName[40] = 0x00;
-}
-
-/**
-  This function is used to send out ATA commands conforms to the PIO Data In Protocol.
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                      all the information of the IDE device.
-  @param Buffer       buffer contained data transferred from device to host.
-  @param ByteCount    data size in byte unit of the buffer.
-  @param AtaCommand   value of the Command Register
-  @param Head         value of the Head/Device Register
-  @param SectorCount  value of the Sector Count Register
-  @param SectorNumber value of the Sector Number Register
-  @param CylinderLsb  value of the low byte of the Cylinder Register
-  @param CylinderMsb  value of the high byte of the Cylinder Register
-
-  @retval EFI_SUCCESS      send out the ATA command and device send required data successfully.
-  @retval EFI_DEVICE_ERROR command sent failed.
-
-**/
-EFI_STATUS
-AtaPioDataIn (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  UINT32          ByteCount,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Head,
-  IN  UINT8           SectorCount,
-  IN  UINT8           SectorNumber,
-  IN  UINT8           CylinderLsb,
-  IN  UINT8           CylinderMsb
-  )
-{
-  UINTN       WordCount;
-  UINTN       Increment;
-  UINT16      *Buffer16;
-  EFI_STATUS  Status;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  //  e0:1110,0000-- bit7 and bit5 are reserved bits.
-  //           bit6 set means LBA mode
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | 0xe0 | Head)
-    );
-
-  //
-  // All ATAPI device's ATA commands can be issued regardless of the
-  // state of the DRDY
-  //
-  if (IdeDev->Type == IdeHardDisk) {
-
-    Status = DRDYReady (IdeDev, ATATIMEOUT);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-  }
-  //
-  // set all the command parameters
-  // Before write to all the following registers, BSY and DRQ must be 0.
-  //
-  Status = DRQClear2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  if (AtaCommand == ATA_CMD_SET_FEATURES) {
-    IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x03);
-  }
-
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, SectorNumber);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, CylinderLsb);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, CylinderMsb);
-
-  //
-  // send command via Command Register
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  Buffer16 = (UINT16 *) Buffer;
-
-  //
-  // According to PIO data in protocol, host can perform a series of reads to
-  // the data register after each time device set DRQ ready;
-  // The data size of "a series of read" is command specific.
-  // For most ATA command, data size received from device will not exceed
-  // 1 sector, hence the data size for "a series of read" can be the whole data
-  // size of one command request.
-  // For ATA command such as Read Sector command, the data size of one ATA
-  // command request is often larger than 1 sector, according to the
-  // Read Sector command, the data size of "a series of read" is exactly 1
-  // sector.
-  // Here for simplification reason, we specify the data size for
-  // "a series of read" to 1 sector (256 words) if data size of one ATA command
-  // request is larger than 256 words.
-  //
-  Increment = 256;
-
-  //
-  // used to record bytes of currently transferred data
-  //
-  WordCount = 0;
-
-  while (WordCount < ByteCount / 2) {
-    //
-    // Poll DRQ bit set, data transfer can be performed only when DRQ is ready.
-    //
-    Status = DRQReady2 (IdeDev, ATATIMEOUT);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    Status = CheckErrorStatus (IdeDev);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    //
-    // Get the byte count for one series of read
-    //
-    if ((WordCount + Increment) > ByteCount / 2) {
-      Increment = ByteCount / 2 - WordCount;
-    }
-
-    IDEReadPortWMultiple (
-      IdeDev->PciIo,
-      IdeDev->IoPort->Data,
-      Increment,
-      Buffer16
-      );
-
-    WordCount += Increment;
-    Buffer16 += Increment;
-
-  }
-
-  DRQClear (IdeDev, ATATIMEOUT);
-
-  return CheckErrorStatus (IdeDev);
-}
-
-/**
-  This function is used to send out ATA commands conforms to the
-  PIO Data Out Protocol.
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used
-                      to record all the information of the IDE device.
-  @param *Buffer      buffer contained data transferred from host to device.
-  @param ByteCount    data size in byte unit of the buffer.
-  @param AtaCommand   value of the Command Register
-  @param Head         value of the Head/Device Register
-  @param SectorCount  value of the Sector Count Register
-  @param SectorNumber value of the Sector Number Register
-  @param CylinderLsb  value of the low byte of the Cylinder Register
-  @param CylinderMsb  value of the high byte of the Cylinder Register
-
-  @retval EFI_SUCCESS      send out the ATA command and device received required
-                           data successfully.
-  @retval EFI_DEVICE_ERROR command sent failed.
-
-**/
-EFI_STATUS
-AtaPioDataOut (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  UINT32          ByteCount,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Head,
-  IN  UINT8           SectorCount,
-  IN  UINT8           SectorNumber,
-  IN  UINT8           CylinderLsb,
-  IN  UINT8           CylinderMsb
-  )
-{
-  UINTN       WordCount;
-  UINTN       Increment;
-  UINT16      *Buffer16;
-  EFI_STATUS  Status;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // select device via Head/Device register.
-  // Before write Head/Device register, BSY and DRQ must be 0.
-  //
-  Status = DRQClear2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // e0:1110,0000-- bit7 and bit5 are reserved bits.
-  //          bit6 set means LBA mode
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | 0xe0 | Head)
-    );
-
-  Status = DRDYReady (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // set all the command parameters
-  // Before write to all the following registers, BSY and DRQ must be 0.
-  //
-  Status = DRQClear2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, SectorNumber);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, CylinderLsb);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, CylinderMsb);
-
-  //
-  // send command via Command Register
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  Buffer16 = (UINT16 *) Buffer;
-
-  //
-  // According to PIO data out protocol, host can perform a series of
-  // writes to the data register after each time device set DRQ ready;
-  // The data size of "a series of read" is command specific.
-  // For most ATA command, data size written to device will not exceed 1 sector,
-  // hence the data size for "a series of write" can be the data size of one
-  // command request.
-  // For ATA command such as Write Sector command, the data size of one
-  // ATA command request is often larger than 1 sector, according to the
-  // Write Sector command, the data size of "a series of read" is exactly
-  // 1 sector.
-  // Here for simplification reason, we specify the data size for
-  // "a series of write" to 1 sector (256 words) if data size of one ATA command
-  // request is larger than 256 words.
-  //
-  Increment = 256;
-  WordCount = 0;
-
-  while (WordCount < ByteCount / 2) {
-
-    //
-    // DRQReady2-- read Alternate Status Register to determine the DRQ bit
-    // data transfer can be performed only when DRQ is ready.
-    //
-    Status = DRQReady2 (IdeDev, ATATIMEOUT);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    Status = CheckErrorStatus (IdeDev);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-   //
-   // Check the remaining byte count is less than 512 bytes
-   //
-   if ((WordCount + Increment) > ByteCount / 2) {
-      Increment = ByteCount / 2 - WordCount;
-    }
-    //
-    // perform a series of write without check DRQ ready
-    //
-
-    IDEWritePortWMultiple (
-      IdeDev->PciIo,
-      IdeDev->IoPort->Data,
-      Increment,
-      Buffer16
-      );
-    WordCount += Increment;
-    Buffer16 += Increment;
-
-  }
-
-  DRQClear (IdeDev, ATATIMEOUT);
-
-  return CheckErrorStatus (IdeDev);
-}
-
-/**
-  This function is used to analyze the Status Register and print out
-  some debug information and if there is ERR bit set in the Status
-  Register, the Error Register's value is also be parsed and print out.
-
-  @param IdeDev  pointer pointing to IDE_BLK_IO_DEV data structure, used to
-                 record all the information of the IDE device.
-
-  @retval EFI_SUCCESS       No err information in the Status Register.
-  @retval EFI_DEVICE_ERROR  Any err information in the Status Register.
-
-**/
-EFI_STATUS
-CheckErrorStatus (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  UINT8 StatusRegister;
-  UINT8 ErrorRegister;
-
-  StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-
-  DEBUG_CODE_BEGIN ();
-
-  if ((StatusRegister & ATA_STSREG_DWF) != 0) {
-    DEBUG (
-      (EFI_D_BLKIO,
-      "CheckErrorStatus()-- %02x : Error : Write Fault\n",
-      StatusRegister)
-      );
-  }
-
-  if ((StatusRegister & ATA_STSREG_CORR) != 0) {
-    DEBUG (
-      (EFI_D_BLKIO,
-      "CheckErrorStatus()-- %02x : Error : Corrected Data\n",
-      StatusRegister)
-      );
-   }
-
-  if ((StatusRegister & ATA_STSREG_ERR) != 0) {
-    ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-
-    if ((ErrorRegister & ATA_ERRREG_BBK) != 0) {
-      DEBUG (
-        (EFI_D_BLKIO,
-        "CheckErrorStatus()-- %02x : Error : Bad Block Detected\n",
-        ErrorRegister)
-        );
-      }
-
-      if ((ErrorRegister & ATA_ERRREG_UNC) != 0) {
-        DEBUG (
-          (EFI_D_BLKIO,
-          "CheckErrorStatus()-- %02x : Error : Uncorrectable Data\n",
-          ErrorRegister)
-          );
-      }
-
-      if ((ErrorRegister & ATA_ERRREG_MC) != 0) {
-        DEBUG (
-          (EFI_D_BLKIO,
-          "CheckErrorStatus()-- %02x : Error : Media Change\n",
-          ErrorRegister)
-          );
-      }
-
-      if ((ErrorRegister & ATA_ERRREG_ABRT) != 0) {
-        DEBUG (
-          (EFI_D_BLKIO,
-          "CheckErrorStatus()-- %02x : Error : Abort\n",
-          ErrorRegister)
-          );
-      }
-
-      if ((ErrorRegister & ATA_ERRREG_TK0NF) != 0) {
-        DEBUG (
-          (EFI_D_BLKIO,
-          "CheckErrorStatus()-- %02x : Error : Track 0 Not Found\n",
-          ErrorRegister)
-          );
-      }
-
-      if ((ErrorRegister & ATA_ERRREG_AMNF) != 0) {
-        DEBUG (
-          (EFI_D_BLKIO,
-          "CheckErrorStatus()-- %02x : Error : Address Mark Not Found\n",
-          ErrorRegister)
-          );
-      }
-    }
-
-  DEBUG_CODE_END ();
-
-  if ((StatusRegister & (ATA_STSREG_ERR | ATA_STSREG_DWF | ATA_STSREG_CORR)) == 0) {
-    return EFI_SUCCESS;
-  }
-
-  return EFI_DEVICE_ERROR;
-
-}
-
-/**
-  This function is called by the AtaBlkIoReadBlocks() to perform reading from
-  media in block unit.
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                        all the information of the IDE device.
-  @param DataBuffer     A pointer to the destination buffer for the data.
-  @param Lba            The starting logical block address to read from on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status is fully dependent on the return status of AtaPioDataIn() function.
-
-**/
-EFI_STATUS
-AtaReadSectors (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         Lba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  EFI_STATUS  Status;
-  UINTN       BlocksRemaining;
-  UINT32      Lba32;
-  UINT8       Lba0;
-  UINT8       Lba1;
-  UINT8       Lba2;
-  UINT8       Lba3;
-  UINT8       AtaCommand;
-  UINT8       SectorCount8;
-  UINT16      SectorCount;
-  UINTN       ByteCount;
-  VOID        *Buffer;
-
-  Buffer = DataBuffer;
-
-  //
-  // Using ATA Read Sector(s) command (opcode=0x20) with PIO DATA IN protocol
-  //
-  AtaCommand      = ATA_CMD_READ_SECTORS;
-
-
-  BlocksRemaining = NumberOfBlocks;
-
-  Lba32           = (UINT32) Lba;
-
-  Status          = EFI_SUCCESS;
-
-  while (BlocksRemaining > 0) {
-
-    //
-    // in ATA-3 spec, LBA is in 28 bit width
-    //
-    Lba0  = (UINT8) Lba32;
-    Lba1  = (UINT8) (Lba32 >> 8);
-    Lba2  = (UINT8) (Lba32 >> 16);
-    //
-    // low 4 bit of Lba3 stands for LBA bit24~bit27.
-    //
-    Lba3 = (UINT8) ((Lba32 >> 24) & 0x0f);
-
-    if (BlocksRemaining >= 0x100) {
-
-      //
-      //  SectorCount8 is sent to Sector Count register, 0x00 means 256
-      //  sectors to be read
-      //
-      SectorCount8 = 0x00;
-      //
-      //  SectorCount is used to record the number of sectors to be read
-      //
-      SectorCount = 256;
-    } else {
-
-      SectorCount8  = (UINT8) BlocksRemaining;
-      SectorCount   = (UINT16) BlocksRemaining;
-    }
-
-    //
-    // ByteCount is the number of bytes that will be read
-    //
-    ByteCount = SectorCount * (IdeDev->BlkIo.Media->BlockSize);
-
-    //
-    // call AtaPioDataIn() to send Read Sector Command and receive data read
-    //
-    Status = AtaPioDataIn (
-              IdeDev,
-              Buffer,
-              (UINT32) ByteCount,
-              AtaCommand,
-              Lba3,
-              SectorCount8,
-              Lba0,
-              Lba1,
-              Lba2
-              );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Lba32 += SectorCount;
-    Buffer = ((UINT8 *) Buffer + ByteCount);
-    BlocksRemaining -= SectorCount;
-  }
-
-  return Status;
-}
-
-/**
-  This function is called by the AtaBlkIoWriteBlocks() to perform writing onto
-  media in block unit.
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure,used to record
-                        all the information of the IDE device.
-  @param BufferData     A pointer to the source buffer for the data.
-  @param Lba            The starting logical block address to write onto the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status is fully dependent on the return status of AtaPioDataIn() function.
-
-**/
-EFI_STATUS
-AtaWriteSectors (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *BufferData,
-  IN  EFI_LBA         Lba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  EFI_STATUS  Status;
-  UINTN       BlocksRemaining;
-  UINT32      Lba32;
-  UINT8       Lba0;
-  UINT8       Lba1;
-  UINT8       Lba2;
-  UINT8       Lba3;
-  UINT8       AtaCommand;
-  UINT8       SectorCount8;
-  UINT16      SectorCount;
-  UINTN       ByteCount;
-  VOID        *Buffer;
-
-  Buffer = BufferData;
-
-  //
-  // Using Write Sector(s) command (opcode=0x30) with PIO DATA OUT protocol
-  //
-  AtaCommand      = ATA_CMD_WRITE_SECTORS;
-
-  BlocksRemaining = NumberOfBlocks;
-
-  Lba32           = (UINT32) Lba;
-
-  Status          = EFI_SUCCESS;
-
-  while (BlocksRemaining > 0) {
-
-    Lba0  = (UINT8) Lba32;
-    Lba1  = (UINT8) (Lba32 >> 8);
-    Lba2  = (UINT8) (Lba32 >> 16);
-    Lba3  = (UINT8) ((Lba32 >> 24) & 0x0f);
-
-    if (BlocksRemaining >= 0x100) {
-
-      //
-      //  SectorCount8 is sent to Sector Count register, 0x00 means 256 sectors
-      //  to be written
-      //
-      SectorCount8 = 0x00;
-      //
-      //  SectorCount is used to record the number of sectors to be written
-      //
-      SectorCount = 256;
-    } else {
-
-      SectorCount8  = (UINT8) BlocksRemaining;
-      SectorCount   = (UINT16) BlocksRemaining;
-    }
-
-    ByteCount = SectorCount * (IdeDev->BlkIo.Media->BlockSize);
-
-    Status = AtaPioDataOut (
-              IdeDev,
-              Buffer,
-              (UINT32) ByteCount,
-              AtaCommand,
-              Lba3,
-              SectorCount8,
-              Lba0,
-              Lba1,
-              Lba2
-              );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Lba32 += SectorCount;
-    Buffer = ((UINT8 *) Buffer + ByteCount);
-    BlocksRemaining -= SectorCount;
-  }
-
-  return Status;
-}
-/**
-  This function is used to implement the Soft Reset on the specified device. But,
-  the ATA Soft Reset mechanism is so strong a reset method that it will force
-  resetting on both devices connected to the same cable.
-
-  It is called by IdeBlkIoReset(), a interface function of Block
-  I/O protocol.
-
-  This function can also be used by the ATAPI device to perform reset when
-  ATAPI Reset command is failed.
-
-  @param IdeDev  pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                 all the information of the IDE device.
-  @retval EFI_SUCCESS       Soft reset completes successfully.
-  @retval EFI_DEVICE_ERROR  Any step during the reset process is failed.
-
-  @note  The registers initial values after ATA soft reset are different
-         to the ATA device and ATAPI device.
-**/
-EFI_STATUS
-AtaSoftReset (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-
-  UINT8 DeviceControl;
-
-  DeviceControl = 0;
-  //
-  // set SRST bit to initiate soft reset
-  //
-  DeviceControl |= ATA_CTLREG_SRST;
-
-  //
-  // disable Interrupt
-  //
-  DeviceControl |= BIT1;
-
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, DeviceControl);
-
-  //
-  // SRST should assert for at least 5 us, we use 10 us for
-  // better compatibility
-  //
-  gBS->Stall (10);
-
-  //
-  // Enable interrupt to support UDMA, and clear SRST bit
-  //
-  DeviceControl = 0;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, DeviceControl);
-
-  //
-  // Wait for at least 2 ms to check BSY status, we use 10 ms
-  // for better compatibility
-  //
-  gBS->Stall(10000);
-  //
-  // slave device needs at most 31s to clear BSY
-  //
-  if (WaitForBSYClear (IdeDev, 31000) == EFI_TIMEOUT) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to send out ATA commands conforms to the PIO Data In
-  Protocol, supporting ATA/ATAPI-6 standard
-
-  Comparing with ATA-3 data in protocol, we have two differences here:
-  1. Do NOT wait for DRQ clear before sending command into IDE device.(the
-  wait will frequently fail... cause writing function return error)
-
-  2. Do NOT wait for DRQ clear after all data read.(the wait greatly
-  slow down writing performance by 100 times!)
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used
-                      to record all the information of the IDE device.
-  @param Buffer       buffer contained data transferred from device to host.
-  @param ByteCount    data size in byte unit of the buffer.
-  @param AtaCommand   value of the Command Register
-  @param StartLba     the start LBA of this transaction
-  @param SectorCount  the count of sectors to be transferred
-
-  @retval EFI_SUCCESS      send out the ATA command and device send required data successfully.
-  @retval EFI_DEVICE_ERROR command sent failed.
-
-**/
-EFI_STATUS
-AtaPioDataInExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  OUT VOID        *Buffer,
-  IN  UINT32          ByteCount,
-  IN  UINT8           AtaCommand,
-  IN  EFI_LBA         StartLba,
-  IN  UINT16          SectorCount
-  )
-{
-  UINT8       DevSel;
-  UINT8       SectorCount8;
-  UINT8       LbaLow;
-  UINT8       LbaMid;
-  UINT8       LbaHigh;
-  UINTN       WordCount;
-  UINTN       Increment;
-  UINT16      *Buffer16;
-  EFI_STATUS  Status;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device, set bit6 as 1 to indicate LBA mode is used
-  //
-  DevSel = (UINT8) (IdeDev->Device << 4);
-  DevSel |= 0x40;
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    DevSel
-    );
-
-  //
-  // Wait for DRDY signal asserting. ATAPI device needn't wait
-  //
-  if ( (IdeDev->Type == IdeHardDisk)  ||
-        (IdeDev->Type == Ide48bitAddressingHardDisk)) {
-
-    Status = DRDYReady (IdeDev, ATATIMEOUT);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-  }
-
-  //
-  // Fill feature register if needed
-  //
-  if (AtaCommand == ATA_CMD_SET_FEATURES) {
-    IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x03);
-  }
-
-  //
-  // Fill the sector count register, which is a two-byte FIFO. Need write twice.
-  //
-  SectorCount8 = (UINT8) (SectorCount >> 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  SectorCount8 = (UINT8) SectorCount;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  //
-  // Fill the start LBA registers, which are also two-byte FIFO
-  //
-  LbaLow  = (UINT8) RShiftU64 (StartLba, 24);
-  LbaMid  = (UINT8) RShiftU64 (StartLba, 32);
-  LbaHigh = (UINT8) RShiftU64 (StartLba, 40);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  LbaLow  = (UINT8) StartLba;
-  LbaMid  = (UINT8) RShiftU64 (StartLba, 8);
-  LbaHigh = (UINT8) RShiftU64 (StartLba, 16);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  //
-  // Send command via Command Register, invoking the processing of this command
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  Buffer16 = (UINT16 *) Buffer;
-
-  //
-  // According to PIO data in protocol, host can perform a series of reads to
-  // the data register after each time device set DRQ ready;
-  //
-
-  //
-  // 256 words
-  //
-  Increment = 256;
-
-  //
-  // used to record bytes of currently transferred data
-  //
-  WordCount = 0;
-
-  while (WordCount < ByteCount / 2) {
-    //
-    // Poll DRQ bit set, data transfer can be performed only when DRQ is ready.
-    //
-    Status = DRQReady2 (IdeDev, ATATIMEOUT);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    Status = CheckErrorStatus (IdeDev);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    //
-    // Get the byte count for one series of read
-    //
-    if ((WordCount + Increment) > ByteCount / 2) {
-      Increment = ByteCount / 2 - WordCount;
-    }
-
-    IDEReadPortWMultiple (
-      IdeDev->PciIo,
-      IdeDev->IoPort->Data,
-      Increment,
-      Buffer16
-      );
-
-    WordCount += Increment;
-    Buffer16 += Increment;
-
-  }
-
-  return CheckErrorStatus (IdeDev);
-}
-/**
-  Send ATA Ext command into device with NON_DATA protocol.
-
-  @param  IdeDev Standard IDE device private data structure
-  @param  AtaCommand The ATA command to be sent
-  @param  Device The value in Device register
-  @param  Feature The value in Feature register
-  @param  SectorCount The value in SectorCount register
-  @param  LbaAddress The LBA address in 48-bit mode
-
-  @retval  EFI_SUCCESS Reading succeed
-  @retval  EFI_DEVICE_ERROR Error executing commands on this device.
-
-**/
-EFI_STATUS
-AtaCommandIssueExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Device,
-  IN  UINT16          Feature,
-  IN  UINT16          SectorCount,
-  IN  EFI_LBA         LbaAddress
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       SectorCount8;
-  UINT8       Feature8;
-  UINT8       LbaLow;
-  UINT8       LbaMid;
-  UINT8       LbaHigh;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device (bit4), set LBA mode(bit6) (use 0xe0 for compatibility)
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | 0xe0)
-    );
-
-  //
-  // ATA commands for ATA device must be issued when DRDY is set
-  //
-  Status = DRDYReady (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Pass parameter into device register block
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, Device);
-
-  //
-  // Fill the feature register, which is a two-byte FIFO. Need write twice.
-  //
-  Feature8 = (UINT8) (Feature >> 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);
-
-  Feature8 = (UINT8) Feature;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);
-
-  //
-  // Fill the sector count register, which is a two-byte FIFO. Need write twice.
-  //
-  SectorCount8 = (UINT8) (SectorCount >> 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  SectorCount8 = (UINT8) SectorCount;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  //
-  // Fill the start LBA registers, which are also two-byte FIFO
-  //
-  LbaLow = (UINT8) RShiftU64 (LbaAddress, 24);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  LbaLow = (UINT8) LbaAddress;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-
-  LbaMid = (UINT8) RShiftU64 (LbaAddress, 32);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  LbaMid = (UINT8) RShiftU64 (LbaAddress, 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-
-  LbaHigh = (UINT8) RShiftU64 (LbaAddress, 40);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-  LbaHigh = (UINT8) RShiftU64 (LbaAddress, 16);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  //
-  // Work around for Segate 160G disk writing
-  //
-  gBS->Stall (1800);
-
-  //
-  // Send command via Command Register
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  //
-  // Stall at least 400ns
-  //
-  gBS->Stall (100);
-
-  return EFI_SUCCESS;
-}
-/**
-  Send ATA Ext command into device with NON_DATA protocol
-
-  @param  IdeDev Standard IDE device private data structure
-  @param  AtaCommand The ATA command to be sent
-  @param  Device The value in Device register
-  @param  Feature The value in Feature register
-  @param  SectorCount The value in SectorCount register
-  @param  LbaAddress The LBA address in 48-bit mode
-
-  @retval  EFI_SUCCESS Reading succeed
-  @retval  EFI_DEVICE_ERROR Error executing commands on this device.
-
-**/
-EFI_STATUS
-AtaCommandIssue (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Device,
-  IN  UINT16          Feature,
-  IN  UINT16          SectorCount,
-  IN  EFI_LBA         LbaAddress
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       SectorCount8;
-  UINT8       Feature8;
-  UINT8       Lba0;
-  UINT8       Lba1;
-  UINT8       Lba2;
-  UINT8       Lba3;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device (bit4), set LBA mode(bit6) (use 0xe0 for compatibility)
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | 0xe0)
-    );
-
-  //
-  // ATA commands for ATA device must be issued when DRDY is set
-  //
-  Status = DRDYReady (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  Lba0  = (UINT8) LbaAddress;
-  Lba1  = (UINT8) RShiftU64 (LbaAddress, 8);
-  Lba2  = (UINT8) RShiftU64 (LbaAddress, 16);
-  Lba3  = (UINT8) RShiftU64 (LbaAddress, 24);
-  Device = (UINT8) (Device | Lba3);
-
-  //
-  // Pass parameter into device register block
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, Device);
-
-  //
-  // Fill the feature register, which is a two-byte FIFO. Need write twice.
-  //
-  Feature8 = (UINT8) Feature;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);
-
-  //
-  // Fill the sector count register, which is a two-byte FIFO. Need write twice.
-  //
-  SectorCount8 = (UINT8) SectorCount;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  //
-  // Fill the start LBA registers, which are also two-byte FIFO
-  //
-
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, Lba0);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, Lba1);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, Lba2);
-
-  //
-  // Send command via Command Register
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  //
-  // Stall at least 400ns
-  //
-  gBS->Stall (100);
-
-  return EFI_SUCCESS;
-}
-/**
-  Perform an ATA Udma operation (Read, ReadExt, Write, WriteExt).
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used
-                        to record all the information of the IDE device.
-  @param DataBuffer     A pointer to the source buffer for the data.
-  @param StartLba       The starting logical block address to write to
-                        on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-  @param UdmaOp         The perform operations could be AtaUdmaReadOp, AtaUdmaReadExOp,
-                        AtaUdmaWriteOp, AtaUdmaWriteExOp
-
-  @retval EFI_SUCCESS          the operation is successful.
-  @retval EFI_OUT_OF_RESOURCES Build PRD table failed
-  @retval EFI_UNSUPPORTED      Unknown channel or operations command
-  @retval EFI_DEVICE_ERROR     Ata command execute failed
-
-**/
-EFI_STATUS
-DoAtaUdma (
-  IN  IDE_BLK_IO_DEV      *IdeDev,
-  IN  VOID                *DataBuffer,
-  IN  EFI_LBA             StartLba,
-  IN  UINTN               NumberOfBlocks,
-  IN  ATA_UDMA_OPERATION  UdmaOp
-  )
-{
-  IDE_DMA_PRD                   *PrdAddr;
-  IDE_DMA_PRD                   *UsedPrdAddr;
-  IDE_DMA_PRD                   *TempPrdAddr;
-  UINT8                         RegisterValue;
-  UINT8                         Device;
-  UINT64                        IoPortForBmic;
-  UINT64                        IoPortForBmis;
-  UINT64                        IoPortForBmid;
-  EFI_STATUS                    Status;
-  UINTN                         PrdTableNum;
-  UINTN                         ByteCount;
-  UINTN                         ByteAvailable;
-  UINT8                         *PrdBuffer;
-  UINTN                         RemainBlockNum;
-  UINT8                         DeviceControl;
-  UINT32                        Count;
-  UINTN                         PageCount;
-  VOID                          *Map;
-  VOID                          *MemPage;
-  EFI_PHYSICAL_ADDRESS          DeviceAddress;
-  UINTN                         MaxDmaCommandSectors;
-  EFI_PCI_IO_PROTOCOL_OPERATION PciIoProtocolOp;
-  UINT8                         AtaCommand;
-
-  switch (UdmaOp) {
-  case AtaUdmaReadOp:
-    MaxDmaCommandSectors = ATAPI_MAX_DMA_CMD_SECTORS;
-    PciIoProtocolOp      = EfiPciIoOperationBusMasterWrite;
-    AtaCommand           = ATA_CMD_READ_DMA;
-    break;
-  case AtaUdmaReadExtOp:
-    MaxDmaCommandSectors = ATAPI_MAX_DMA_EXT_CMD_SECTORS;
-    PciIoProtocolOp      = EfiPciIoOperationBusMasterWrite;
-    AtaCommand           = ATA_CMD_READ_DMA_EXT;
-    break;
-  case AtaUdmaWriteOp:
-    MaxDmaCommandSectors = ATAPI_MAX_DMA_CMD_SECTORS;
-    PciIoProtocolOp      = EfiPciIoOperationBusMasterRead;
-    AtaCommand           = ATA_CMD_WRITE_DMA;
-    break;
-  case AtaUdmaWriteExtOp:
-    MaxDmaCommandSectors = ATAPI_MAX_DMA_EXT_CMD_SECTORS;
-    PciIoProtocolOp      = EfiPciIoOperationBusMasterRead;
-    AtaCommand           = ATA_CMD_WRITE_DMA_EXT;
-    break;
-  default:
-    return EFI_UNSUPPORTED;
-    break;
-  }
-
-  //
-  // Select device
-  //
-  Device = (UINT8) ((IdeDev->Device << 4) | 0xe0);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, Device);
-
-  //
-  // Enable interrupt to support UDMA
-  //
-  DeviceControl = 0;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, DeviceControl);
-
-  if (IdePrimary == IdeDev->Channel) {
-    IoPortForBmic = IdeDev->IoPort->BusMasterBaseAddr + BMICP_OFFSET;
-    IoPortForBmis = IdeDev->IoPort->BusMasterBaseAddr + BMISP_OFFSET;
-    IoPortForBmid = IdeDev->IoPort->BusMasterBaseAddr + BMIDP_OFFSET;
-  } else {
-    if (IdeSecondary == IdeDev->Channel) {
-      IoPortForBmic = IdeDev->IoPort->BusMasterBaseAddr + BMICS_OFFSET;
-      IoPortForBmis = IdeDev->IoPort->BusMasterBaseAddr + BMISS_OFFSET;
-      IoPortForBmid = IdeDev->IoPort->BusMasterBaseAddr + BMIDS_OFFSET;
-    } else {
-      return EFI_UNSUPPORTED;
-    }
-  }
-
-  //
-  // Read BMIS register and clear ERROR and INTR bit
-  //
-  IdeDev->PciIo->Io.Read (
-                                          IdeDev->PciIo,
-                                          EfiPciIoWidthUint8,
-                                          EFI_PCI_IO_PASS_THROUGH_BAR,
-                                          IoPortForBmis,
-                                          1,
-                                          &RegisterValue
-                                          );
-
-  RegisterValue |= (BMIS_INTERRUPT | BMIS_ERROR);
-
-  IdeDev->PciIo->Io.Write (
-                                          IdeDev->PciIo,
-                                          EfiPciIoWidthUint8,
-                                          EFI_PCI_IO_PASS_THROUGH_BAR,
-                                          IoPortForBmis,
-                                          1,
-                                          &RegisterValue
-                                          );
-
-  Status = EFI_SUCCESS;
-
-  RemainBlockNum = NumberOfBlocks;
-  while (RemainBlockNum > 0) {
-
-    if (RemainBlockNum >= MaxDmaCommandSectors) {
-      //
-      //  SectorCount is used to record the number of sectors to be read
-      //  Max 65536 sectors can be transferred at a time.
-      //
-      NumberOfBlocks = MaxDmaCommandSectors;
-      RemainBlockNum -= MaxDmaCommandSectors;
-    } else {
-      NumberOfBlocks  = (UINT16) RemainBlockNum;
-      RemainBlockNum  = 0;
-    }
-
-    //
-    // Calculate the number of PRD table to make sure the memory region
-    // not cross 64K boundary
-    //
-    ByteCount   = NumberOfBlocks * IdeDev->BlkIo.Media->BlockSize;
-    PrdTableNum = ((ByteCount >> 16) + 1) + 1;
-
-    //
-    // Build PRD table
-    //
-    PageCount = EFI_SIZE_TO_PAGES (2 * PrdTableNum * sizeof (IDE_DMA_PRD));
-    Status = IdeDev->PciIo->AllocateBuffer (
-                    IdeDev->PciIo,
-                    AllocateAnyPages,
-                    EfiBootServicesData,
-                    PageCount,
-                    &MemPage,
-                    0
-                    );
-    if (EFI_ERROR (Status)) {
-      return EFI_OUT_OF_RESOURCES;
-    }
-    ZeroMem ((VOID *) ((UINTN) MemPage), EFI_PAGES_TO_SIZE (PageCount));
-
-    PrdAddr = (IDE_DMA_PRD *) ((UINTN) MemPage);
-    //
-    // To make sure PRD is allocated in one 64K page
-    //
-    if (((UINTN) PrdAddr & 0x0FFFF) > (((UINTN) PrdAddr + PrdTableNum * sizeof (IDE_DMA_PRD) - 1) & 0x0FFFF)) {
-      UsedPrdAddr = (IDE_DMA_PRD *) ((UINTN) ((UINT8 *) PrdAddr + 0x10000) & 0xFFFF0000);
-    } else {
-      if ((UINTN) PrdAddr & 0x03) {
-        UsedPrdAddr = (IDE_DMA_PRD *) ((UINTN) ((UINT8 *) PrdAddr + 0x04) & 0xFFFFFFFC);
-      } else {
-        UsedPrdAddr = PrdAddr;
-      }
-    }
-
-    //
-    // Build the PRD table
-    //
-    Status = IdeDev->PciIo->Map (
-                       IdeDev->PciIo,
-                       PciIoProtocolOp,
-                       DataBuffer,
-                       &ByteCount,
-                       &DeviceAddress,
-                       &Map
-                       );
-    if (EFI_ERROR (Status)) {
-      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);
-      return EFI_OUT_OF_RESOURCES;
-    }
-    PrdBuffer   = (VOID *) ((UINTN) DeviceAddress);
-    TempPrdAddr = UsedPrdAddr;
-    while (TRUE) {
-
-      ByteAvailable = 0x10000 - ((UINTN) PrdBuffer & 0xFFFF);
-
-      if (ByteCount <= ByteAvailable) {
-        TempPrdAddr->RegionBaseAddr = (UINT32) ((UINTN) PrdBuffer);
-        TempPrdAddr->ByteCount      = (UINT16) ByteCount;
-        TempPrdAddr->EndOfTable     = 0x8000;
-        break;
-      }
-
-      TempPrdAddr->RegionBaseAddr = (UINT32) ((UINTN) PrdBuffer);
-      TempPrdAddr->ByteCount      = (UINT16) ByteAvailable;
-
-      ByteCount -= ByteAvailable;
-      PrdBuffer += ByteAvailable;
-      TempPrdAddr++;
-    }
-
-    //
-    // Set the base address to BMID register
-    //
-    IdeDev->PciIo->Io.Write (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint32,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmid,
-                        1,
-                        &UsedPrdAddr
-                        );
-
-    //
-    // Set BMIC register to identify the operation direction
-    //
-    IdeDev->PciIo->Io.Read (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmic,
-                        1,
-                        &RegisterValue
-                        );
-
-    if (UdmaOp == AtaUdmaReadExtOp || UdmaOp == AtaUdmaReadOp) {
-      RegisterValue |= BMIC_NREAD;
-    } else {
-      RegisterValue &= ~((UINT8) BMIC_NREAD);
-    }
-
-    IdeDev->PciIo->Io.Write (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmic,
-                        1,
-                        &RegisterValue
-                        );
-
-    if (UdmaOp == AtaUdmaWriteExtOp || UdmaOp == AtaUdmaReadExtOp) {
-      Status = AtaCommandIssueExt (
-                 IdeDev,
-                 AtaCommand,
-                 Device,
-                 0,
-                 (UINT16) NumberOfBlocks,
-                 StartLba
-                 );
-    } else {
-      Status = AtaCommandIssue (
-                 IdeDev,
-                 AtaCommand,
-                 Device,
-                 0,
-                 (UINT16) NumberOfBlocks,
-                 StartLba
-                 );
-    }
-
-    if (EFI_ERROR (Status)) {
-      IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);
-      IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);
-      return EFI_DEVICE_ERROR;
-    }
-
-    //
-    // Set START bit of BMIC register
-    //
-    IdeDev->PciIo->Io.Read (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmic,
-                        1,
-                        &RegisterValue
-                        );
-
-    RegisterValue |= BMIC_START;
-
-    IdeDev->PciIo->Io.Write (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmic,
-                        1,
-                        &RegisterValue
-                        );
-
-    //
-    // Check the INTERRUPT and ERROR bit of BMIS
-    // Max transfer number of sectors for one command is 65536(32Mbyte),
-    // it will cost 1 second to transfer these data in UDMA mode 2(33.3MBps).
-    // So set the variable Count to 2000, for about 2 second timeout time.
-    //
-    Status = EFI_SUCCESS;
-    Count = 2000;
-    while (TRUE) {
-
-      IdeDev->PciIo->Io.Read (
-                          IdeDev->PciIo,
-                          EfiPciIoWidthUint8,
-                          EFI_PCI_IO_PASS_THROUGH_BAR,
-                          IoPortForBmis,
-                          1,
-                          &RegisterValue
-                          );
-      if (((RegisterValue & (BMIS_INTERRUPT | BMIS_ERROR)) != 0) || (Count == 0)) {
-        if (((RegisterValue & BMIS_ERROR) != 0) || (Count == 0)) {
-                  Status = EFI_DEVICE_ERROR;
-                  break;
-        }
-        break;
-      }
-
-      gBS->Stall (1000);
-      Count --;
-    }
-
-    IdeDev->PciIo->FreeBuffer (IdeDev->PciIo, PageCount, MemPage);
-    IdeDev->PciIo->Unmap (IdeDev->PciIo, Map);
-    //
-    // Read BMIS register and clear ERROR and INTR bit
-    //
-    IdeDev->PciIo->Io.Read (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmis,
-                        1,
-                        &RegisterValue
-                        );
-
-    RegisterValue |= (BMIS_INTERRUPT | BMIS_ERROR);
-
-    IdeDev->PciIo->Io.Write (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmis,
-                        1,
-                        &RegisterValue
-                        );
-        //
-    // Read Status Register of IDE device to clear interrupt
-    //
-    RegisterValue = IDEReadPortB(IdeDev->PciIo,IdeDev->IoPort->Reg.Status);
-    //
-    // Clear START bit of BMIC register
-    //
-    IdeDev->PciIo->Io.Read (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmic,
-                        1,
-                        &RegisterValue
-                        );
-
-    RegisterValue &= ~((UINT8) BMIC_START);
-
-    IdeDev->PciIo->Io.Write (
-                        IdeDev->PciIo,
-                        EfiPciIoWidthUint8,
-                        EFI_PCI_IO_PASS_THROUGH_BAR,
-                        IoPortForBmic,
-                        1,
-                        &RegisterValue
-                        );
-
-    if ((RegisterValue & BMIS_ERROR) != 0) {
-      return EFI_DEVICE_ERROR;
-    }
-
-        if (EFI_ERROR (Status)) {
-          break;
-        }
-    DataBuffer = (UINT8 *) DataBuffer + NumberOfBlocks * IdeDev->BlkIo.Media->BlockSize;
-    StartLba += NumberOfBlocks;
-  }
-
-  //
-  // Disable interrupt of Select device
-  //
-  IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl);
-  DeviceControl |= ATA_CTLREG_IEN_L;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, DeviceControl);
-
-  return Status;
-}
-
-
-/**
-  This function is called by the AtaBlkIoReadBlocks() to perform reading from
-  media in block unit. The function has been enhanced to support >120GB access
-  and transfer at most 65536 blocks per command
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                        all the information of the IDE device.
-  @param DataBuffer     A pointer to the destination buffer for the data.
-  @param StartLba       The starting logical block address to read from on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status depends on the function DoAtaUdma() returns.
-**/
-EFI_STATUS
-AtaUdmaReadExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         StartLba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  return DoAtaUdma (IdeDev, DataBuffer, StartLba, NumberOfBlocks, AtaUdmaReadExtOp);
-}
-/**
-  This function is called by the AtaBlkIoReadBlocks() to perform
-  reading from media in block unit. The function has been enhanced to
-  support >120GB access and transfer at most 65536 blocks per command
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                        all the information of the IDE device.
-  @param DataBuffer     A pointer to the destination buffer for the data.
-  @param StartLba       The starting logical block address to read from
-                        on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status depends on the function DoAtaUdma() returns.
-**/
-EFI_STATUS
-AtaUdmaRead (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         StartLba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  return DoAtaUdma (IdeDev, DataBuffer, StartLba, NumberOfBlocks, AtaUdmaReadOp);
-}
-
-/**
-  This function is called by the AtaBlkIoReadBlocks() to perform
-  reading from media in block unit. The function has been enhanced to
-  support >120GB access and transfer at most 65536 blocks per command
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                        all the information of the IDE device.
-  @param DataBuffer     A pointer to the destination buffer for the data.
-  @param StartLba       The starting logical block address to read from on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status is fully dependent on the return status of AtaPioDataInExt() function.
-**/
-EFI_STATUS
-AtaReadSectorsExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         StartLba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  EFI_STATUS  Status;
-  UINTN       BlocksRemaining;
-  EFI_LBA     Lba64;
-  UINT8       AtaCommand;
-  UINT16      SectorCount;
-  UINT32      ByteCount;
-  VOID        *Buffer;
-
-  //
-  // Using ATA "Read Sectors Ext" command(opcode=0x24) with PIO DATA IN protocol
-  //
-  AtaCommand      = ATA_CMD_READ_SECTORS_EXT;
-  Buffer          = DataBuffer;
-  BlocksRemaining = NumberOfBlocks;
-  Lba64           = StartLba;
-  Status          = EFI_SUCCESS;
-
-  while (BlocksRemaining > 0) {
-
-    if (BlocksRemaining >= 0x10000) {
-      //
-      //  SectorCount is used to record the number of sectors to be read
-      //  Max 65536 sectors can be transferred at a time.
-      //
-      SectorCount = 0xffff;
-    } else {
-      SectorCount = (UINT16) BlocksRemaining;
-    }
-
-    //
-    // ByteCount is the number of bytes that will be read
-    //
-    ByteCount = SectorCount * (IdeDev->BlkIo.Media->BlockSize);
-
-    //
-    // call AtaPioDataInExt() to send Read Sector Command and receive data read
-    //
-    Status = AtaPioDataInExt (
-              IdeDev,
-              Buffer,
-              ByteCount,
-              AtaCommand,
-              Lba64,
-              SectorCount
-              );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Lba64 += SectorCount;
-    Buffer = ((UINT8 *) Buffer + ByteCount);
-    BlocksRemaining -= SectorCount;
-  }
-
-  return Status;
-}
-/**
-  This function is the ATA implementation for ReadBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice Indicates the calling context.
-  @param MediaId        The media id that the read request is for.
-  @param Lba            The starting logical block address to read from on the device.
-  @param BufferSize     The size of the Buffer in bytes. This must be a  multiple
-                        of the intrinsic block size of the device.
-
-  @param Buffer         A pointer to the destination buffer for the data. The caller
-                        is responsible for either having implicit or explicit ownership
-                        of the memory that data is read into.
-
-  @retval EFI_SUCCESS          Read Blocks successfully.
-  @retval EFI_DEVICE_ERROR     Read Blocks failed.
-  @retval EFI_NO_MEDIA         There is no media in the device.
-  @retval EFI_MEDIA_CHANGE     The MediaId is not for the current media.
-  @retval EFI_BAD_BUFFER_SIZE  The BufferSize parameter is not a multiple of the
-                               intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER  The read request contains LBAs that are not valid,
-                                 or the data buffer is not valid.
-
-  @note If Read Block error because of device error, this function will call
-        AtaSoftReset() function to reset device.
-
-**/
-EFI_STATUS
-AtaBlkIoReadBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  )
-{
-  EFI_BLOCK_IO_MEDIA  *Media;
-  UINTN               BlockSize;
-  UINTN               NumberOfBlocks;
-  EFI_STATUS          Status;
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (BufferSize == 0) {
-    return EFI_SUCCESS;
-  }
-
-  Status = EFI_SUCCESS;
-
-  //
-  //  Get the intrinsic block size
-  //
-  Media           = IdeBlkIoDevice->BlkIo.Media;
-  BlockSize       = Media->BlockSize;
-
-  NumberOfBlocks  = BufferSize / BlockSize;
-
-  if (MediaId != Media->MediaId) {
-    return EFI_MEDIA_CHANGED;
-  }
-
-  if (BufferSize % BlockSize != 0) {
-    return EFI_BAD_BUFFER_SIZE;
-  }
-
-  if (!(Media->MediaPresent)) {
-    return EFI_NO_MEDIA;
-  }
-
-  if (Lba > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Lba + NumberOfBlocks - 1) > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Media->IoAlign > 1) && (((UINTN) Buffer & (Media->IoAlign - 1)) != 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Status = EFI_SUCCESS;
-  if (IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {
-    //
-    // For ATA/ATAPI-6 device(capacity > 120GB), use ATA-6 read block mechanism
-    //
-    if (IdeBlkIoDevice->UdmaMode.Valid) {
-      Status = AtaUdmaReadExt (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    } else {
-      Status = AtaReadSectorsExt (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    }
-  } else {
-    //
-    // For ATA-3 compatible device, use ATA-3 read block mechanism
-    //
-    if (IdeBlkIoDevice->UdmaMode.Valid) {
-      Status = AtaUdmaRead (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    } else {
-      Status = AtaReadSectors (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    }
-  }
-
-  if (EFI_ERROR (Status)) {
-    AtaSoftReset (IdeBlkIoDevice);
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-
-}
-/**
-  This function is used to send out ATA commands conforms to the
-  PIO Data Out Protocol, supporting ATA/ATAPI-6 standard
-
-  Comparing with ATA-3 data out protocol, we have two differences here:<BR>
-  1. Do NOT wait for DRQ clear before sending command into IDE device.(the
-  wait will frequently fail... cause writing function return error)
-
-  2. Do NOT wait for DRQ clear after all data read.(the wait greatly
-  slow down writing performance by 100 times!)
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used
-                       to record all the information of the IDE device.
-  @param Buffer       buffer contained data transferred from host to device.
-  @param ByteCount    data size in byte unit of the buffer.
-  @param AtaCommand   value of the Command Register
-  @param StartLba     the start LBA of this transaction
-  @param SectorCount  the count of sectors to be transferred
-
-  @retval EFI_SUCCESS      send out the ATA command and device receive required
-                           data successfully.
-  @retval EFI_DEVICE_ERROR command sent failed.
-
-**/
-EFI_STATUS
-AtaPioDataOutExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  UINT32          ByteCount,
-  IN  UINT8           AtaCommand,
-  IN  EFI_LBA         StartLba,
-  IN  UINT16          SectorCount
-  )
-{
-  UINT8       DevSel;
-  UINT8       SectorCount8;
-  UINT8       LbaLow;
-  UINT8       LbaMid;
-  UINT8       LbaHigh;
-  UINTN       WordCount;
-  UINTN       Increment;
-  UINT16      *Buffer16;
-  EFI_STATUS  Status;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device. Set bit6 as 1 to indicate LBA mode is used
-  //
-  DevSel = (UINT8) (IdeDev->Device << 4);
-  DevSel |= 0x40;
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    DevSel
-    );
-
-  //
-  // Wait for DRDY signal asserting.
-  //
-  Status = DRDYReady (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Fill feature register if needed
-  //
-  if (AtaCommand == ATA_CMD_SET_FEATURES) {
-    IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x03);
-  }
-
-  //
-  // Fill the sector count register, which is a two-byte FIFO. Need write twice.
-  //
-  SectorCount8 = (UINT8) (SectorCount >> 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  SectorCount8 = (UINT8) SectorCount;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  //
-  // Fill the start LBA registers, which are also two-byte FIFO
-  //
-  LbaLow  = (UINT8) RShiftU64 (StartLba, 24);
-  LbaMid  = (UINT8) RShiftU64 (StartLba, 32);
-  LbaHigh = (UINT8) RShiftU64 (StartLba, 40);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  LbaLow  = (UINT8) StartLba;
-  LbaMid  = (UINT8) RShiftU64 (StartLba, 8);
-  LbaHigh = (UINT8) RShiftU64 (StartLba, 16);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  //
-  // Send command via Command Register, invoking the processing of this command
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  Buffer16 = (UINT16 *) Buffer;
-
-  //
-  // According to PIO Data Out protocol, host can perform a series of writes to
-  // the data register after each time device set DRQ ready;
-  //
-  Increment = 256;
-
-  //
-  // used to record bytes of currently transferred data
-  //
-  WordCount = 0;
-
-  while (WordCount < ByteCount / 2) {
-    //
-    // Poll DRQ bit set, data transfer can be performed only when DRQ is ready.
-    //
-    Status = DRQReady2 (IdeDev, ATATIMEOUT);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    Status = CheckErrorStatus (IdeDev);
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    //
-    // Write data into device by one series of writing to data register
-    //
-    if ((WordCount + Increment) > ByteCount / 2) {
-      Increment = ByteCount / 2 - WordCount;
-    }
-
-    IDEWritePortWMultiple (
-      IdeDev->PciIo,
-      IdeDev->IoPort->Data,
-      Increment,
-      Buffer16
-      );
-
-    WordCount += Increment;
-    Buffer16 += Increment;
-
-  }
-  return CheckErrorStatus (IdeDev);
-}
-/**
-  This function is called by the AtaBlkIoWriteBlocks() to perform
-  writing to media in block unit. The function has been enhanced to
-  support >120GB access and transfer at most 65536 blocks per command
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used
-                        to record all the information of the IDE device.
-  @param DataBuffer     A pointer to the source buffer for the data.
-  @param StartLba       The starting logical block address to write to
-                        on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status depends on the function DoAtaUdma() returns.
-**/
-EFI_STATUS
-AtaUdmaWriteExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         StartLba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  return DoAtaUdma (IdeDev, DataBuffer, StartLba, NumberOfBlocks, AtaUdmaWriteExtOp);
-}
-
-/**
-  This function is called by the AtaBlkIoWriteBlocks() to perform
-  writing to media in block unit.
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure, used
-                        to record all the information of the IDE device.
-  @param DataBuffer     A pointer to the source buffer for the data.
-  @param StartLba       The starting logical block address to write to
-                        on the device media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status depends on the function DoAtaUdma() returns.
-**/
-EFI_STATUS
-AtaUdmaWrite (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         StartLba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  return DoAtaUdma (IdeDev, DataBuffer, StartLba, NumberOfBlocks, AtaUdmaWriteOp);
-}
-/**
-  This function is called by the AtaBlkIoWriteBlocks() to perform
-  writing onto media in block unit. The function has been enhanced to
-  support >120GB access and transfer at most 65536 blocks per command
-
-  @param IdeDev         pointer pointing to IDE_BLK_IO_DEV data structure,used
-                        to record all the information of the IDE device.
-  @param DataBuffer     A pointer to the source buffer for the data.
-  @param StartLba       The starting logical block address to write onto the device
-                        media.
-  @param NumberOfBlocks The number of transfer data blocks.
-
-  @return status is fully dependent on the return status of AtaPioDataOutExt() function.
-**/
-EFI_STATUS
-AtaWriteSectorsExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *DataBuffer,
-  IN  EFI_LBA         StartLba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-  EFI_STATUS  Status;
-  EFI_LBA     Lba64;
-  UINTN       BlocksRemaining;
-  UINT8       AtaCommand;
-  UINT16      SectorCount;
-  UINT32      ByteCount;
-  VOID        *Buffer;
-
-  //
-  // Using ATA "Write Sectors Ext" cmd(opcode=0x24) with PIO DATA OUT protocol
-  //
-  AtaCommand      = ATA_CMD_WRITE_SECTORS_EXT;
-  Lba64           = StartLba;
-  Buffer          = DataBuffer;
-  BlocksRemaining = NumberOfBlocks;
-
-  Status          = EFI_SUCCESS;
-
-  while (BlocksRemaining > 0) {
-
-    if (BlocksRemaining >= 0x10000) {
-      //
-      //  SectorCount is used to record the number of sectors to be written.
-      //  Max 65536 sectors can be transferred at a time.
-      //
-      SectorCount = 0xffff;
-    } else {
-      SectorCount = (UINT16) BlocksRemaining;
-    }
-
-    //
-    // ByteCount is the number of bytes that will be written
-    //
-    ByteCount = SectorCount * (IdeDev->BlkIo.Media->BlockSize);
-
-    //
-    // Call AtaPioDataOutExt() to send "Write Sectors Ext" Command
-    //
-    Status = AtaPioDataOutExt (
-              IdeDev,
-              Buffer,
-              ByteCount,
-              AtaCommand,
-              Lba64,
-              SectorCount
-              );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Lba64 += SectorCount;
-    Buffer = ((UINT8 *) Buffer + ByteCount);
-    BlocksRemaining -= SectorCount;
-  }
-
-  return Status;
-}
-/**
-  This function is the ATA implementation for WriteBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice  Indicates the calling context.
-  @param MediaId         The media id that the write request is for.
-  @param Lba             The starting logical block address to write onto the device.
-  @param BufferSize      The size of the Buffer in bytes. This must be a multiple
-                         of the intrinsic block size of the device.
-  @param Buffer          A pointer to the source buffer for the data.The caller
-                         is responsible for either having implicit or explicit
-                         ownership of the memory that data is written from.
-
-  @retval EFI_SUCCESS       Write Blocks successfully.
-  @retval EFI_DEVICE_ERROR  Write Blocks failed.
-  @retval EFI_NO_MEDIA      There is no media in the device.
-  @retval EFI_MEDIA_CHANGE  The MediaId is not for the current media.
-
-  @retval EFI_BAD_BUFFER_SIZE   The BufferSize parameter is not a multiple of the
-                                intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,
-                                or the data buffer is not valid.
-
-  @note If Write Block error because of device error, this function will call
-        AtaSoftReset() function to reset device.
-**/
-EFI_STATUS
-AtaBlkIoWriteBlocks (
-  IN  IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN  UINT32           MediaId,
-  IN  EFI_LBA          Lba,
-  IN  UINTN            BufferSize,
-  OUT VOID             *Buffer
-  )
-{
-
-  EFI_BLOCK_IO_MEDIA  *Media;
-  UINTN               BlockSize;
-  UINTN               NumberOfBlocks;
-  EFI_STATUS          Status;
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (BufferSize == 0) {
-    return EFI_SUCCESS;
-  }
-
-  Status = EFI_SUCCESS;
-
-  //
-  // Get the intrinsic block size
-  //
-  Media           = IdeBlkIoDevice->BlkIo.Media;
-  BlockSize       = Media->BlockSize;
-  NumberOfBlocks  = BufferSize / BlockSize;
-
-  if (MediaId != Media->MediaId) {
-    return EFI_MEDIA_CHANGED;
-  }
-
-  if (BufferSize % BlockSize != 0) {
-    return EFI_BAD_BUFFER_SIZE;
-  }
-
-  if (Lba > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Lba + NumberOfBlocks - 1) > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Media->IoAlign > 1) && (((UINTN) Buffer & (Media->IoAlign - 1)) != 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Status = EFI_SUCCESS;
-  if (IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {
-    //
-    // For ATA/ATAPI-6 device(capacity > 120GB), use ATA-6 write block mechanism
-    //
-    if (IdeBlkIoDevice->UdmaMode.Valid) {
-      Status = AtaUdmaWriteExt (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    } else {
-      Status = AtaWriteSectorsExt (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    }
-  } else {
-    //
-    // For ATA-3 compatible device, use ATA-3 write block mechanism
-    //
-    if (IdeBlkIoDevice->UdmaMode.Valid) {
-      Status = AtaUdmaWrite (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    } else {
-      Status = AtaWriteSectors (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-    }
-  }
-
-  if (EFI_ERROR (Status)) {
-    AtaSoftReset (IdeBlkIoDevice);
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  Enable Long Physical Sector Feature for ATA device.
-
-  @param   IdeDev  The IDE device data
-
-  @retval  EFI_SUCCESS      The ATA device supports Long Physical Sector feature
-                            and corresponding fields in BlockIo structure is updated.
-  @retval  EFI_UNSUPPORTED  The device is not ATA device or Long Physical Sector
-                            feature is not supported.
-**/
-EFI_STATUS
-AtaEnableLongPhysicalSector (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  EFI_ATA_IDENTIFY_DATA  *AtaIdentifyData;
-  UINT16                 PhyLogicSectorSupport;
-
-  ASSERT (IdeDev->IdData != NULL);
-  //
-  // Only valid for ATA device
-  //
-  AtaIdentifyData       = (EFI_ATA_IDENTIFY_DATA *) &IdeDev->IdData->AtaData;
-  if ((AtaIdentifyData->config & 0x8000) != 0) {
-    return EFI_UNSUPPORTED;
-  }
-  PhyLogicSectorSupport = AtaIdentifyData->phy_logic_sector_support;
-  //
-  // Check whether Long Physical Sector Feature is supported
-  //
-  if ((PhyLogicSectorSupport & 0xc000) == 0x4000) {
-    IdeDev->BlkIo.Media->LogicalBlocksPerPhysicalBlock = 1;
-    IdeDev->BlkIo.Media->LowestAlignedLba              = 0;
-    //
-    // Check whether one physical block contains multiple physical blocks
-    //
-    if ((PhyLogicSectorSupport & 0x2000) != 0) {
-      IdeDev->BlkIo.Media->LogicalBlocksPerPhysicalBlock =
-        (UINT32) (1 << (PhyLogicSectorSupport & 0x000f));
-      //
-      // Check lowest alignment of logical blocks within physical block
-      //
-      if ((AtaIdentifyData->alignment_logic_in_phy_blocks & 0xc000) == 0x4000) {
-        IdeDev->BlkIo.Media->LowestAlignedLba =
-          (EFI_LBA) (AtaIdentifyData->alignment_logic_in_phy_blocks & 0x3fff);
-      }
-    }
-    //
-    // Check logical block size
-    //
-    IdeDev->BlkIo.Media->BlockSize = 0x200;
-    if ((PhyLogicSectorSupport & 0x1000) != 0) {
-      IdeDev->BlkIo.Media->BlockSize = (UINT32) (
-        ((AtaIdentifyData->logic_sector_size_hi << 16) |
-         AtaIdentifyData->logic_sector_size_lo) * sizeof (UINT16)
-        );
-    }
-    return EFI_SUCCESS;
-  } else {
-    return EFI_UNSUPPORTED;
-  }
-}
-/**
-  Send ATA command into device with NON_DATA protocol
-
-  @param  IdeDev Standard IDE device private data structure
-  @param  AtaCommand The ATA command to be sent
-  @param  Device The value in Device register
-  @param  Feature The value in Feature register
-  @param  SectorCount The value in SectorCount register
-  @param  LbaLow The value in LBA_LOW register
-  @param  LbaMiddle The value in LBA_MIDDLE register
-  @param  LbaHigh The value in LBA_HIGH register
-
-  @retval  EFI_SUCCESS Reading succeed
-  @retval  EFI_ABORTED Command failed
-  @retval  EFI_DEVICE_ERROR Device status error.
-
-**/
-EFI_STATUS
-AtaNonDataCommandIn (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Device,
-  IN  UINT8           Feature,
-  IN  UINT8           SectorCount,
-  IN  UINT8           LbaLow,
-  IN  UINT8           LbaMiddle,
-  IN  UINT8           LbaHigh
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       StatusRegister;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device (bit4), set Lba mode(bit6) (use 0xe0 for compatibility)
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | 0xe0)
-    );
-
-  //
-  // ATA commands for ATA device must be issued when DRDY is set
-  //
-  Status = DRDYReady (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Pass parameter into device register block
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, Device);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMiddle);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  //
-  // Send command via Command Register
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  //
-  // Wait for command completion
-  // For ATAPI_SMART_CMD, we may need more timeout to let device
-  // adjust internal states.
-  //
-  if (AtaCommand == ATA_CMD_SMART) {
-    Status = WaitForBSYClear (IdeDev, ATASMARTTIMEOUT);
-  } else {
-    Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  }
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-  if ((StatusRegister & ATA_STSREG_ERR) == ATA_STSREG_ERR) {
-    //
-    // Failed to execute command, abort operation
-    //
-    return EFI_ABORTED;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Send ATA Ext command into device with NON_DATA protocol
-
-  @param  IdeDev Standard IDE device private data structure
-  @param  AtaCommand The ATA command to be sent
-  @param  Device The value in Device register
-  @param  Feature The value in Feature register
-  @param  SectorCount The value in SectorCount register
-  @param  LbaAddress The LBA address in 48-bit mode
-
-  @retval  EFI_SUCCESS Reading succeed
-  @retval  EFI_ABORTED Command failed
-  @retval  EFI_DEVICE_ERROR Device status error.
-
-**/
-EFI_STATUS
-AtaNonDataCommandInExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Device,
-  IN  UINT16          Feature,
-  IN  UINT16          SectorCount,
-  IN  EFI_LBA         LbaAddress
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       StatusRegister;
-  UINT8       SectorCount8;
-  UINT8       Feature8;
-  UINT8       LbaLow;
-  UINT8       LbaMid;
-  UINT8       LbaHigh;
-
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device (bit4), set LBA mode(bit6) (use 0xe0 for compatibility)
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | 0xe0)
-    );
-
-  //
-  // ATA commands for ATA device must be issued when DRDY is set
-  //
-  Status = DRDYReady (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Pass parameter into device register block
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, Device);
-
-  //
-  // Fill the feature register, which is a two-byte FIFO. Need write twice.
-  //
-  Feature8 = (UINT8) (Feature >> 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);
-
-  Feature8 = (UINT8) Feature;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);
-
-  //
-  // Fill the sector count register, which is a two-byte FIFO. Need write twice.
-  //
-  SectorCount8 = (UINT8) (SectorCount >> 8);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  SectorCount8 = (UINT8) SectorCount;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);
-
-  //
-  // Fill the start LBA registers, which are also two-byte FIFO
-  //
-  LbaLow  = (UINT8) RShiftU64 (LbaAddress, 24);
-  LbaMid  = (UINT8) RShiftU64 (LbaAddress, 32);
-  LbaHigh = (UINT8) RShiftU64 (LbaAddress, 40);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  LbaLow  = (UINT8) LbaAddress;
-  LbaMid  = (UINT8) RShiftU64 (LbaAddress, 8);
-  LbaHigh = (UINT8) RShiftU64 (LbaAddress, 16);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);
-
-  //
-  // Send command via Command Register
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);
-
-  //
-  // Wait for command completion
-  //
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-  if ((StatusRegister & ATA_STSREG_ERR) == ATA_STSREG_ERR) {
-    //
-    // Failed to execute command, abort operation
-    //
-    return EFI_ABORTED;
-  }
-
-  return EFI_SUCCESS;
-}
-
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Atapi.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Atapi.c
deleted file mode 100644
index e5cbee5..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Atapi.c
+++ /dev/null
@@ -1,1976 +0,0 @@
-/* $Id: Atapi.c $ */
-/** @file
- * Atapi.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-   This file contains all helper functions on the ATAPI command
-
-  Copyright (c) 2006 - 2008, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "IdeBus.h"
-
-/**
-  This function is used to get the current status of the media residing
-  in the LS-120 drive or ZIP drive. The media status is returned in the
-  Error Status.
-
-  @param IdeDev   pointer pointing to IDE_BLK_IO_DEV data structure, used
-                  to record all the information of the IDE device.
-
-  @retval EFI_SUCCESS         The media status is achieved successfully and the media
-                              can be read/written.
-  @retval EFI_DEVICE_ERROR    Get Media Status Command is failed.
-  @retval EFI_NO_MEDIA        There is no media in the drive.
-  @retval EFI_WRITE_PROTECTED The media is writing protected.
-
-  @note  This function must be called after the LS120EnableMediaStatus()
-         with second parameter set to TRUE
-         (means enable media status notification) is called.
-**/
-EFI_STATUS
-LS120GetMediaStatus (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  UINT8       DeviceSelect;
-  UINT8       StatusValue;
-  EFI_STATUS  EfiStatus;
-  //
-  // Poll Alternate Register for BSY clear within timeout.
-  //
-  EfiStatus = WaitForBSYClear2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (EfiStatus)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device via Device/Head Register.
-  //
-  DeviceSelect = (UINT8) ((IdeDev->Device) << 4 | 0xe0);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, DeviceSelect);
-
-  //
-  // Poll Alternate Register for DRDY set within timeout.
-  // After device is selected, DRDY set indicates the device is ready to
-  // accept command.
-  //
-  EfiStatus = DRDYReady2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (EfiStatus)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Get Media Status Command is sent
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, 0xDA);
-
-  //
-  // BSY bit will clear after command is complete.
-  //
-  EfiStatus = WaitForBSYClear2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (EfiStatus)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // the media status is returned by the command in the ERROR register
-  //
-  StatusValue = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-
-  if ((StatusValue & BIT1) != 0) {
-    return EFI_NO_MEDIA;
-  }
-
-  if ((StatusValue & BIT6) != 0) {
-    return EFI_WRITE_PROTECTED;
-  } else {
-    return EFI_SUCCESS;
-  }
-}
-/**
-  This function is used to send Enable Media Status Notification Command
-  or Disable Media Status Notification Command.
-
-  @param IdeDev pointer pointing to IDE_BLK_IO_DEV data structure, used
-                to record all the information of the IDE device.
-
-  @param Enable a flag that indicates whether enable or disable media
-                status notification.
-  @retval EFI_SUCCESS      If command completes successfully.
-  @retval EFI_DEVICE_ERROR If command failed.
-**/
-EFI_STATUS
-LS120EnableMediaStatus (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  BOOLEAN         Enable
-  )
-{
-  UINT8       DeviceSelect;
-  EFI_STATUS  Status;
-
-  //
-  // Poll Alternate Register for BSY clear within timeout.
-  //
-  Status = WaitForBSYClear2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Select device via Device/Head Register.
-  //
-  DeviceSelect = (UINT8) ((IdeDev->Device) << 4 | 0xe0);
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, DeviceSelect);
-
-  //
-  // Poll Alternate Register for DRDY set within timeout.
-  // After device is selected, DRDY set indicates the device is ready to
-  // accept command.
-  //
-  Status = DRDYReady2 (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  if (Enable) {
-    //
-    // 0x95: Enable media status notification
-    //
-    IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x95);
-  } else {
-    //
-    // 0x31: Disable media status notification
-    //
-    IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x31);
-  }
-  //
-  // Set Feature Command is sent
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, 0xEF);
-
-  //
-  // BSY bit will clear after command is complete.
-  //
-  Status = WaitForBSYClear (IdeDev, ATATIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function reads the pending data in the device.
-
-  @param IdeDev   Indicates the calling context.
-
-  @retval EFI_SUCCESS   Successfully read.
-  @retval EFI_NOT_READY The BSY is set avoiding reading.
-
-**/
-EFI_STATUS
-AtapiReadPendingData (
-  IN IDE_BLK_IO_DEV     *IdeDev
-  )
-{
-  UINT8     AltRegister;
-  UINT16    TempWordBuffer;
-
-  AltRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Alt.AltStatus);
-  if ((AltRegister & ATA_STSREG_BSY) == ATA_STSREG_BSY) {
-    return EFI_NOT_READY;
-  }
-  if ((AltRegister & (ATA_STSREG_BSY | ATA_STSREG_DRQ)) == ATA_STSREG_DRQ) {
-    TempWordBuffer = IDEReadPortB (IdeDev->PciIo,IdeDev->IoPort->Alt.AltStatus);
-    while ((TempWordBuffer & (ATA_STSREG_BSY | ATA_STSREG_DRQ)) == ATA_STSREG_DRQ) {
-      IDEReadPortWMultiple (
-        IdeDev->PciIo,
-        IdeDev->IoPort->Data,
-        1,
-        &TempWordBuffer
-        );
-      TempWordBuffer = IDEReadPortB (IdeDev->PciIo,IdeDev->IoPort->Alt.AltStatus);
-    }
-  }
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is called by either AtapiPacketCommandIn() or AtapiPacketCommandOut().
-  It is used to transfer data between host and device. The data direction is specified
-  by the fourth parameter.
-
-  @param IdeDev     pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                    all the information of the IDE device.
-  @param Buffer     buffer contained data transferred between host and device.
-  @param ByteCount  data size in byte unit of the buffer.
-  @param Read       flag used to determine the data transfer direction.
-                    Read equals 1, means data transferred from device to host;
-                    Read equals 0, means data transferred from host to device.
-  @param TimeOut    timeout value for wait DRQ ready before each data stream's transfer.
-
-  @retval EFI_SUCCESS      data is transferred successfully.
-  @retval EFI_DEVICE_ERROR the device failed to transfer data.
-**/
-EFI_STATUS
-PioReadWriteData (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT16          *Buffer,
-  IN  UINT32          ByteCount,
-  IN  BOOLEAN         Read,
-  IN  UINTN           TimeOut
-  )
-{
-  //
-  // required transfer data in word unit.
-  //
-  UINT32      RequiredWordCount;
-
-  //
-  // actual transfer data in word unit.
-  //
-  UINT32      ActualWordCount;
-  UINT32      WordCount;
-  EFI_STATUS  Status;
-  UINT16      *PtrBuffer;
-
-  //
-  // No data transfer is permitted.
-  //
-  if (ByteCount == 0) {
-    return EFI_SUCCESS;
-  }
-  //
-  // for performance, we assert the ByteCount is an even number
-  // which is actually a reasonable assumption
-  ASSERT((ByteCount%2) == 0);
-
-  PtrBuffer         = Buffer;
-  RequiredWordCount = ByteCount / 2;
-  //
-  // ActuralWordCount means the word count of data really transferred.
-  //
-  ActualWordCount = 0;
-
-  while (ActualWordCount < RequiredWordCount) {
-
-    //
-    // before each data transfer stream, the host should poll DRQ bit ready,
-    // to see whether indicates device is ready to transfer data.
-    //
-    Status = DRQReady2 (IdeDev, TimeOut);
-    if (EFI_ERROR (Status)) {
-      return CheckErrorStatus (IdeDev);
-    }
-
-    //
-    // read Status Register will clear interrupt
-    //
-    IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-
-    //
-    // get current data transfer size from Cylinder Registers.
-    //
-    WordCount = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb) << 8;
-    WordCount = WordCount | IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb);
-    WordCount = WordCount & 0xffff;
-    WordCount /= 2;
-
-    WordCount = MIN (WordCount, (RequiredWordCount - ActualWordCount));
-
-    if (Read) {
-      IDEReadPortWMultiple (
-        IdeDev->PciIo,
-        IdeDev->IoPort->Data,
-        WordCount,
-        PtrBuffer
-        );
-    } else {
-      IDEWritePortWMultiple (
-        IdeDev->PciIo,
-        IdeDev->IoPort->Data,
-        WordCount,
-        PtrBuffer
-        );
-    }
-
-    PtrBuffer += WordCount;
-    ActualWordCount += WordCount;
-  }
-
-  if (Read) {
-    //
-    // In the case where the drive wants to send more data than we need to read,
-    // the DRQ bit will be set and cause delays from DRQClear2().
-    // We need to read data from the drive until it clears DRQ so we can move on.
-    //
-    AtapiReadPendingData (IdeDev);
-  }
-
-  //
-  // After data transfer is completed, normally, DRQ bit should clear.
-  //
-  Status = DRQClear2 (IdeDev, ATAPITIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // read status register to check whether error happens.
-  //
-  return CheckErrorStatus (IdeDev);
-}
-
-/**
-  This function is used to send out ATAPI commands conforms to the Packet Command
-  with PIO Data In Protocol.
-
-  @param IdeDev    pointer pointing to IDE_BLK_IO_DEV data structure, used
-                   to record all the information of the IDE device.
-  @param Packet    pointer pointing to ATAPI_PACKET_COMMAND data structure
-                   which contains the contents of the command.
-  @param Buffer    buffer contained data transferred from device to host.
-  @param ByteCount data size in byte unit of the buffer.
-  @param TimeOut   this parameter is used to specify the timeout value for the
-                   PioReadWriteData() function.
-
-  @retval EFI_SUCCESS       send out the ATAPI packet command successfully
-                            and device sends data successfully.
-  @retval EFI_DEVICE_ERROR  the device failed to send data.
-
-**/
-EFI_STATUS
-AtapiPacketCommandIn (
-  IN  IDE_BLK_IO_DEV        *IdeDev,
-  IN  ATAPI_PACKET_COMMAND  *Packet,
-  IN  UINT16                *Buffer,
-  IN  UINT32                ByteCount,
-  IN  UINTN                 TimeOut
-  )
-{
-  UINT16      *CommandIndex;
-  EFI_STATUS  Status;
-  UINT32      Count;
-
-  //
-  // Set all the command parameters by fill related registers.
-  // Before write to all the following registers, BSY and DRQ must be 0.
-  //
-  Status = DRQClear2 (IdeDev, ATAPITIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Select device via Device/Head Register.
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | ATA_DEFAULT_CMD)  // DEFAULT_CMD: 0xa0 (1010,0000)
-    );
-
-  //
-  // No OVL; No DMA
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x00);
-
-  //
-  // set the transfersize to ATAPI_MAX_BYTE_COUNT to let the device
-  // determine how many data should be transferred.
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->CylinderLsb,
-    (UINT8) (ATAPI_MAX_BYTE_COUNT & 0x00ff)
-    );
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->CylinderMsb,
-    (UINT8) (ATAPI_MAX_BYTE_COUNT >> 8)
-    );
-
-  //
-  //  ATA_DEFAULT_CTL:0x0a (0000,1010)
-  //  Disable interrupt
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, ATA_DEFAULT_CTL);
-
-  //
-  // Send Packet command to inform device
-  // that the following data bytes are command packet.
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, ATA_CMD_PACKET);
-
-  Status = DRQReady (IdeDev, ATAPITIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Send out command packet
-  //
-  CommandIndex = Packet->Data16;
-  for (Count = 0; Count < 6; Count++, CommandIndex++) {
-
-    IDEWritePortW (IdeDev->PciIo, IdeDev->IoPort->Data, *CommandIndex);
-    gBS->Stall (10);
-  }
-
-  //
-  // call PioReadWriteData() function to get
-  // requested transfer data form device.
-  //
-  return PioReadWriteData (IdeDev, Buffer, ByteCount, 1, TimeOut);
-}
-/**
-  This function is used to send out ATAPI commands conforms to the Packet Command
-  with PIO Data Out Protocol.
-
-  @param IdeDev      pointer pointing to IDE_BLK_IO_DEV data structure, used
-                     to record all the information of the IDE device.
-  @param Packet      pointer pointing to ATAPI_PACKET_COMMAND data structure
-                     which contains the contents of the command.
-  @param Buffer      buffer contained data transferred from host to device.
-  @param ByteCount   data size in byte unit of the buffer.
-  @param TimeOut     this parameter is used to specify the timeout value
-                     for the PioReadWriteData() function.
-  @retval EFI_SUCCESS      send out the ATAPI packet command successfully
-                           and device received data successfully.
-  @retval EFI_DEVICE_ERROR the device failed to send data.
-
-**/
-EFI_STATUS
-AtapiPacketCommandOut (
-  IN  IDE_BLK_IO_DEV        *IdeDev,
-  IN  ATAPI_PACKET_COMMAND  *Packet,
-  IN  UINT16                *Buffer,
-  IN  UINT32                ByteCount,
-  IN  UINTN                 TimeOut
-  )
-{
-  UINT16      *CommandIndex;
-  EFI_STATUS  Status;
-  UINT32      Count;
-
-  //
-  // set all the command parameters
-  // Before write to all the following registers, BSY and DRQ must be 0.
-  //
-  Status = DRQClear2 (IdeDev, ATAPITIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Select device via Device/Head Register.
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((IdeDev->Device << 4) | ATA_DEFAULT_CMD)   // ATA_DEFAULT_CMD: 0xa0 (1010,0000)
-    );
-
-  //
-  // No OVL; No DMA
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, 0x00);
-
-  //
-  // set the transfersize to ATAPI_MAX_BYTE_COUNT to
-  // let the device determine how many data should be transferred.
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->CylinderLsb,
-    (UINT8) (ATAPI_MAX_BYTE_COUNT & 0x00ff)
-    );
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->CylinderMsb,
-    (UINT8) (ATAPI_MAX_BYTE_COUNT >> 8)
-    );
-
-  //
-  //  DEFAULT_CTL:0x0a (0000,1010)
-  //  Disable interrupt
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, ATA_DEFAULT_CTL);
-
-  //
-  // Send Packet command to inform device
-  // that the following data bytes are command packet.
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, ATA_CMD_PACKET);
-
-  Status = DRQReady2 (IdeDev, ATAPITIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Send out command packet
-  //
-  CommandIndex = Packet->Data16;
-  for (Count = 0; Count < 6; Count++, CommandIndex++) {
-    IDEWritePortW (IdeDev->PciIo, IdeDev->IoPort->Data, *CommandIndex);
-    gBS->Stall (10);
-  }
-
-  //
-  // call PioReadWriteData() function to send requested transfer data to device.
-  //
-  return PioReadWriteData (IdeDev, Buffer, ByteCount, 0, TimeOut);
-}
-/**
-  Sends out ATAPI Inquiry Packet Command to the specified device. This command will
-  return INQUIRY data of the device.
-
-  @param IdeDev pointer pointing to IDE_BLK_IO_DEV data structure, used
-                to record all the information of the IDE device.
-
-  @retval EFI_SUCCESS       Inquiry command completes successfully.
-  @retval EFI_DEVICE_ERROR  Inquiry command failed.
-
-  @note  Parameter "IdeDev" will be updated in this function.
-
-**/
-EFI_STATUS
-AtapiInquiry (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  ATAPI_PACKET_COMMAND  Packet;
-  EFI_STATUS            Status;
-  ATAPI_INQUIRY_DATA          *InquiryData;
-
-  //
-  // prepare command packet for the ATAPI Inquiry Packet Command.
-  //
-  ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-  Packet.Inquiry.opcode             = ATA_CMD_INQUIRY;
-  Packet.Inquiry.page_code          = 0;
-  Packet.Inquiry.allocation_length  = sizeof (ATAPI_INQUIRY_DATA);
-
-  InquiryData                       = AllocatePool (sizeof (ATAPI_INQUIRY_DATA));
-  if (InquiryData == NULL) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Send command packet and get requested Inquiry data.
-  //
-  Status = AtapiPacketCommandIn (
-            IdeDev,
-            &Packet,
-            (UINT16 *) InquiryData,
-            sizeof (ATAPI_INQUIRY_DATA),
-            ATAPITIMEOUT
-            );
-  if (EFI_ERROR (Status)) {
-    gBS->FreePool (InquiryData);
-    return EFI_DEVICE_ERROR;
-  }
-
-  IdeDev->InquiryData = InquiryData;
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is called by DiscoverIdeDevice() during its device
-  identification.
-  Its main purpose is to get enough information for the device media
-  to fill in the Media data structure of the Block I/O Protocol interface.
-
-  There are 5 steps to reach such objective:
-  1. Sends out the ATAPI Identify Command to the specified device.
-  Only ATAPI device responses to this command. If the command succeeds,
-  it returns the Identify data structure which filled with information
-  about the device. Since the ATAPI device contains removable media,
-  the only meaningful information is the device module name.
-  2. Sends out ATAPI Inquiry Packet Command to the specified device.
-  This command will return inquiry data of the device, which contains
-  the device type information.
-  3. Allocate sense data space for future use. We don't detect the media
-  presence here to improvement boot performance, especially when CD
-  media is present. The media detection will be performed just before
-  each BLK_IO read/write
-
-  @param IdeDev pointer pointing to IDE_BLK_IO_DEV data structure, used
-                 to record all the information of the IDE device.
-
-  @retval EFI_SUCCESS       Identify ATAPI device successfully.
-  @retval EFI_DEVICE_ERROR  ATAPI Identify Device Command failed or device type
-                            is not supported by this IDE driver.
-  @retval EFI_OUT_OF_RESOURCES Allocate memory for sense data failed
-
-  @note   Parameter "IdeDev" will be updated in this function.
-**/
-EFI_STATUS
-ATAPIIdentify (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  EFI_IDENTIFY_DATA *AtapiIdentifyPointer;
-  UINT8             DeviceSelect;
-  EFI_STATUS        Status;
-
-  //
-  // device select bit
-  //
-  DeviceSelect          = (UINT8) ((IdeDev->Device) << 4);
-
-  AtapiIdentifyPointer  = AllocatePool (sizeof (EFI_IDENTIFY_DATA));
-  if (AtapiIdentifyPointer == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-  //
-  // Send ATAPI Identify Command to get IDENTIFY data.
-  //
-  Status = AtaPioDataIn (
-            IdeDev,
-            (VOID *) AtapiIdentifyPointer,
-            sizeof (EFI_IDENTIFY_DATA),
-            ATA_CMD_IDENTIFY_DEVICE,
-            DeviceSelect,
-            0,
-            0,
-            0,
-            0
-            );
-
-  if (EFI_ERROR (Status)) {
-    gBS->FreePool (AtapiIdentifyPointer);
-    return EFI_DEVICE_ERROR;
-  }
-
-  IdeDev->IdData = AtapiIdentifyPointer;
-  PrintAtaModuleName (IdeDev);
-
-  //
-  // Send ATAPI Inquiry Packet Command to get INQUIRY data.
-  //
-  Status = AtapiInquiry (IdeDev);
-  if (EFI_ERROR (Status)) {
-    gBS->FreePool (IdeDev->IdData);
-    //
-    // Make sure the pIdData will not be freed again.
-    //
-    IdeDev->IdData = NULL;
-    return EFI_DEVICE_ERROR;
-  }
-  //
-  // Get media removable info from INQUIRY data.
-  //
-  IdeDev->BlkIo.Media->RemovableMedia = (UINT8) ((IdeDev->InquiryData->RMB & 0x80) == 0x80);
-
-  //
-  // Identify device type via INQUIRY data.
-  //
-  switch (IdeDev->InquiryData->peripheral_type & 0x1f) {
-
-  //
-  // Magnetic Disk
-  //
-  case 0x00:
-
-    //
-    // device is LS120 or ZIP drive.
-    //
-    IdeDev->Type = IdeMagnetic;
-
-    IdeDev->BlkIo.Media->MediaId      = 0;
-    //
-    // Give initial value
-    //
-    IdeDev->BlkIo.Media->MediaPresent = FALSE;
-
-    IdeDev->BlkIo.Media->LastBlock  = 0;
-    IdeDev->BlkIo.Media->BlockSize  = 0x200;
-    break;
-
-  //
-  // CD-ROM
-  //
-  case 0x05:
-
-    IdeDev->Type                      = IdeCdRom;
-    IdeDev->BlkIo.Media->MediaId      = 0;
-    //
-    // Give initial value
-    //
-    IdeDev->BlkIo.Media->MediaPresent = FALSE;
-
-    IdeDev->BlkIo.Media->LastBlock  = 0;
-    IdeDev->BlkIo.Media->BlockSize  = 0x800;
-    IdeDev->BlkIo.Media->ReadOnly   = TRUE;
-    break;
-
-  //
-  // Tape
-  //
-  case 0x01:
-
-  //
-  // WORM
-  //
-  case 0x04:
-
-  //
-  // Optical
-  //
-  case 0x07:
-
-  default:
-    IdeDev->Type = IdeUnknown;
-    gBS->FreePool (IdeDev->IdData);
-    gBS->FreePool (IdeDev->InquiryData);
-    //
-    // Make sure the pIdData and pInquiryData will not be freed again.
-    //
-    IdeDev->IdData       = NULL;
-    IdeDev->InquiryData  = NULL;
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // original sense data numbers
-  //
-  IdeDev->SenseDataNumber = 20;
-
-  IdeDev->SenseData = AllocatePool (IdeDev->SenseDataNumber * sizeof (ATAPI_REQUEST_SENSE_DATA));
-  if (IdeDev->SenseData == NULL) {
-    gBS->FreePool (IdeDev->IdData);
-    gBS->FreePool (IdeDev->InquiryData);
-    //
-    // Make sure the pIdData and pInquiryData will not be freed again.
-    //
-    IdeDev->IdData       = NULL;
-    IdeDev->InquiryData  = NULL;
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  Sends out ATAPI Request Sense Packet Command to the specified device. This command
-  will return all the current Sense data in the device.  This function will pack
-  all the Sense data in one single buffer.
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used
-                      to record all the information of the IDE device.
-  @param SenseCounts  allocated in this function, and freed by the calling function.
-                      This buffer is used to accommodate all the sense data returned
-                      by the device.
-
-  @retval EFI_SUCCESS      Request Sense command completes successfully.
-  @retval EFI_DEVICE_ERROR Request Sense command failed.
-**/
-EFI_STATUS
-AtapiRequestSense (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  OUT UINTN           *SenseCounts
-  )
-{
-  EFI_STATUS            Status;
-  ATAPI_REQUEST_SENSE_DATA    *Sense;
-  UINT16                *Ptr;
-  BOOLEAN               FetchSenseData;
-  ATAPI_PACKET_COMMAND  Packet;
-
-  *SenseCounts = 0;
-
-  ZeroMem (IdeDev->SenseData, sizeof (ATAPI_REQUEST_SENSE_DATA) * (IdeDev->SenseDataNumber));
-  //
-  // fill command packet for Request Sense Packet Command
-  //
-  ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-  Packet.RequestSence.opcode            = ATA_CMD_REQUEST_SENSE;
-  Packet.RequestSence.allocation_length = sizeof (ATAPI_REQUEST_SENSE_DATA);
-
-  //
-  // initialize pointer
-  //
-  Ptr = (UINT16 *) IdeDev->SenseData;
-  //
-  //  request sense data from device continuously until no sense data
-  //  exists in the device.
-  //
-  for (FetchSenseData = TRUE; FetchSenseData;) {
-
-    Sense = (ATAPI_REQUEST_SENSE_DATA *) Ptr;
-
-    //
-    // send out Request Sense Packet Command and get one Sense data form device
-    //
-    Status = AtapiPacketCommandIn (
-              IdeDev,
-              &Packet,
-              Ptr,
-              sizeof (ATAPI_REQUEST_SENSE_DATA),
-              ATAPITIMEOUT
-              );
-    //
-    // failed to get Sense data
-    //
-    if (EFI_ERROR (Status)) {
-      if (*SenseCounts == 0) {
-        return EFI_DEVICE_ERROR;
-      } else {
-        return EFI_SUCCESS;
-      }
-    }
-
-    (*SenseCounts)++;
-    //
-    // We limit MAX sense data count to 20 in order to avoid dead loop. Some
-    // incompatible ATAPI devices don't retrieve NO_SENSE when there is no media.
-    // In this case, dead loop occurs if we don't have a gatekeeper. 20 is
-    // supposed to be large enough for any ATAPI device.
-    //
-    if ((Sense->sense_key != ATA_SK_NO_SENSE) && ((*SenseCounts) < 20)) {
-      //
-      // Ptr is word-based pointer
-      //
-      Ptr += (sizeof (ATAPI_REQUEST_SENSE_DATA) + 1) >> 1;
-
-    } else {
-      //
-      // when no sense key, skip out the loop
-      //
-      FetchSenseData = FALSE;
-    }
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to parse sense data. Only the first sense data is honoured
-
-  @param IdeDev     Indicates the calling context.
-  @param SenseCount Count of sense data.
-  @param Result    The parsed result.
-
-  @retval EFI_SUCCESS           Successfully parsed.
-  @retval EFI_INVALID_PARAMETER Count of sense data is zero.
-
-**/
-EFI_STATUS
-ParseSenseData (
-  IN IDE_BLK_IO_DEV     *IdeDev,
-  IN UINTN              SenseCount,
-  OUT SENSE_RESULT      *Result
-  )
-{
-  ATAPI_REQUEST_SENSE_DATA      *SenseData;
-
-  if (SenseCount == 0) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Only use the first sense data
-  //
-  SenseData = IdeDev->SenseData;
-  *Result   = SenseOtherSense;
-
-  switch (SenseData->sense_key) {
-  case ATA_SK_NO_SENSE:
-    *Result = SenseNoSenseKey;
-    break;
-  case ATA_SK_NOT_READY:
-    switch (SenseData->addnl_sense_code) {
-    case ATA_ASC_NO_MEDIA:
-      *Result = SenseNoMedia;
-      break;
-    case ATA_ASC_MEDIA_UPSIDE_DOWN:
-      *Result = SenseMediaError;
-      break;
-    case ATA_ASC_NOT_READY:
-      if (SenseData->addnl_sense_code_qualifier == ATA_ASCQ_IN_PROGRESS) {
-        *Result = SenseDeviceNotReadyNeedRetry;
-      } else {
-        *Result = SenseDeviceNotReadyNoRetry;
-      }
-      break;
-    }
-    break;
-  case ATA_SK_UNIT_ATTENTION:
-    if (SenseData->addnl_sense_code == ATA_ASC_MEDIA_CHANGE) {
-      *Result = SenseMediaChange;
-    }
-    break;
-  case ATA_SK_MEDIUM_ERROR:
-    switch (SenseData->addnl_sense_code) {
-    case ATA_ASC_MEDIA_ERR1:
-    case ATA_ASC_MEDIA_ERR2:
-    case ATA_ASC_MEDIA_ERR3:
-    case ATA_ASC_MEDIA_ERR4:
-      *Result = SenseMediaError;
-      break;
-    }
-    break;
-  default:
-    break;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Sends out ATAPI Test Unit Ready Packet Command to the specified device
-  to find out whether device is accessible.
-
-  @param IdeDev    Pointer pointing to IDE_BLK_IO_DEV data structure, used
-                   to record all the information of the IDE device.
-  @param SResult   Sense result for this packet command.
-
-  @retval EFI_SUCCESS      Device is accessible.
-  @retval EFI_DEVICE_ERROR Device is not accessible.
-
-**/
-EFI_STATUS
-AtapiTestUnitReady (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  OUT SENSE_RESULT    *SResult
-  )
-{
-  ATAPI_PACKET_COMMAND  Packet;
-  EFI_STATUS            Status;
-  UINTN                                 SenseCount;
-
-  //
-  // fill command packet
-  //
-  ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-  Packet.TestUnitReady.opcode = ATA_CMD_TEST_UNIT_READY;
-
-  //
-  // send command packet
-  //
-  Status = AtapiPacketCommandIn (IdeDev, &Packet, NULL, 0, ATAPITIMEOUT);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  Status = AtapiRequestSense (IdeDev, &SenseCount);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  ParseSenseData (IdeDev, SenseCount, SResult);
-  return EFI_SUCCESS;
-}
-
-
-/**
-  Sends out ATAPI Read Capacity Packet Command to the specified device.
-  This command will return the information regarding the capacity of the
-  media in the device.
-
-  Current device status will impact device's response to the Read Capacity
-  Command. For example, if the device once reset, the Read Capacity
-  Command will fail. The Sense data record the current device status, so
-  if the Read Capacity Command failed, the Sense data must be requested
-  and be analyzed to determine if the Read Capacity Command should retry.
-
-  @param IdeDev    Pointer pointing to IDE_BLK_IO_DEV data structure, used
-                   to record all the information of the IDE device.
-  @param SResult   Sense result for this packet command
-
-  @retval EFI_SUCCESS      Read Capacity Command finally completes successfully.
-  @retval EFI_DEVICE_ERROR Read Capacity Command failed because of device error.
-  @retval EFI_NOT_READY    Operation succeeds but returned capacity is 0
-
-  @note Parameter "IdeDev" will be updated in this function.
-
-
-**/
-EFI_STATUS
-AtapiReadCapacity (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  OUT SENSE_RESULT        *SResult
-  )
-{
-  //
-  // status returned by Read Capacity Packet Command
-  //
-  EFI_STATUS                Status;
-  EFI_STATUS                SenseStatus;
-  ATAPI_PACKET_COMMAND      Packet;
-  UINTN                                         SenseCount;
-
-  //
-  // used for capacity data returned from ATAPI device
-  //
-  ATAPI_READ_CAPACITY_DATA        Data;
-  ATAPI_READ_FORMAT_CAPACITY_DATA FormatData;
-
-  ZeroMem (&Data, sizeof (Data));
-  ZeroMem (&FormatData, sizeof (FormatData));
-
-  if (IdeDev->Type == IdeCdRom) {
-
-    ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-    Packet.Inquiry.opcode = ATA_CMD_READ_CAPACITY;
-    Status = AtapiPacketCommandIn (
-               IdeDev,
-               &Packet,
-               (UINT16 *) &Data,
-               sizeof (ATAPI_READ_CAPACITY_DATA),
-               ATAPITIMEOUT
-               );
-
-  } else {
-    //
-    // Type == IdeMagnetic
-    //
-    ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-    Packet.ReadFormatCapacity.opcode                = ATA_CMD_READ_FORMAT_CAPACITY;
-    Packet.ReadFormatCapacity.allocation_length_lo  = 12;
-    Status = AtapiPacketCommandIn (
-               IdeDev,
-               &Packet,
-               (UINT16 *) &FormatData,
-               sizeof (ATAPI_READ_FORMAT_CAPACITY_DATA),
-               ATAPITIMEOUT
-               );
-  }
-
-  if (Status == EFI_TIMEOUT) {
-    return Status;
-  }
-
-  SenseStatus = AtapiRequestSense (IdeDev, &SenseCount);
-
-  if (!EFI_ERROR (SenseStatus)) {
-        ParseSenseData (IdeDev, SenseCount, SResult);
-
-        if (!EFI_ERROR (Status) && *SResult == SenseNoSenseKey) {
-      if (IdeDev->Type == IdeCdRom) {
-
-        IdeDev->BlkIo.Media->LastBlock = (Data.LastLba3 << 24) |
-          (Data.LastLba2 << 16) |
-          (Data.LastLba1 << 8) |
-          Data.LastLba0;
-
-              IdeDev->BlkIo.Media->MediaPresent = TRUE;
-
-        IdeDev->BlkIo.Media->ReadOnly = TRUE;
-
-        //
-        // Because the user data portion in the sector of the Data CD supported
-        // is always 0x800
-        //
-        IdeDev->BlkIo.Media->BlockSize = 0x800;
-      }
-
-      if (IdeDev->Type == IdeMagnetic) {
-
-        if (FormatData.DesCode == 3) {
-          IdeDev->BlkIo.Media->MediaPresent = FALSE;
-          IdeDev->BlkIo.Media->LastBlock    = 0;
-        } else {
-
-          IdeDev->BlkIo.Media->LastBlock =  (FormatData.LastLba3 << 24) |
-            (FormatData.LastLba2 << 16) |
-            (FormatData.LastLba1 << 8)  |
-            FormatData.LastLba0;
-          if (IdeDev->BlkIo.Media->LastBlock != 0) {
-            IdeDev->BlkIo.Media->LastBlock--;
-
-            IdeDev->BlkIo.Media->BlockSize = (FormatData.BlockSize2 << 16) |
-              (FormatData.BlockSize1 << 8) |
-              FormatData.BlockSize0;
-
-            IdeDev->BlkIo.Media->MediaPresent = TRUE;
-          } else {
-            IdeDev->BlkIo.Media->MediaPresent = FALSE;
-            //
-            // Return EFI_NOT_READY operation succeeds but returned capacity is 0
-            //
-            return EFI_NOT_READY;
-          }
-
-          IdeDev->BlkIo.Media->BlockSize = 0x200;
-
-        }
-      }
-    }
-
-    return EFI_SUCCESS;
-
-  } else {
-    return EFI_DEVICE_ERROR;
-  }
-}
-/**
-  This function is used to test the current media write-protected or not residing
-  in the LS-120 drive or ZIP drive.
-  @param IdeDev          pointer pointing to IDE_BLK_IO_DEV data structure, used
-                         to record all the information of the IDE device.
-  @param WriteProtected  if True, current media is write protected.
-                         if FALSE, current media is writable
-
-  @retval EFI_SUCCESS         The media write-protected status is achieved successfully
-  @retval EFI_DEVICE_ERROR    Get Media Status Command is failed.
-**/
-EFI_STATUS
-IsLS120orZipWriteProtected (
-  IN  IDE_BLK_IO_DEV    *IdeDev,
-  OUT BOOLEAN           *WriteProtected
-  )
-{
-  EFI_STATUS  Status;
-
-  *WriteProtected = FALSE;
-
-  Status          = LS120EnableMediaStatus (IdeDev, TRUE);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // the Get Media Status Command is only valid
-  // if a Set Features/Enable Media Status Command has been previously issued.
-  //
-  if (LS120GetMediaStatus (IdeDev) == EFI_WRITE_PROTECTED) {
-
-    *WriteProtected = TRUE;
-  } else {
-
-    *WriteProtected = FALSE;
-  }
-
-  //
-  // After Get Media Status Command completes,
-  // Set Features/Disable Media Command should be sent.
-  //
-  Status = LS120EnableMediaStatus (IdeDev, FALSE);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Used before read/write blocks from/to ATAPI device media. Since ATAPI device
-  media is removable, it is necessary to detect whether media is present and
-  get current present media's information, and if media has been changed, Block
-  I/O Protocol need to be reinstalled.
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used
-                      to record all the information of the IDE device.
-  @param MediaChange  return value that indicates if the media of the device has been
-                      changed.
-
-  @retval EFI_SUCCESS       media found successfully.
-  @retval EFI_DEVICE_ERROR  any error encounters during media detection.
-  @retval EFI_NO_MEDIA      media not found.
-
-  @note
-  parameter IdeDev may be updated in this function.
-
-**/
-EFI_STATUS
-AtapiDetectMedia (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  OUT BOOLEAN         *MediaChange
-  )
-{
-  EFI_STATUS                    Status;
-  EFI_STATUS                    CleanStateStatus;
-  EFI_BLOCK_IO_MEDIA            OldMediaInfo;
-  UINTN                         RetryTimes;
-  UINTN                         RetryNotReady;
-  SENSE_RESULT                  SResult;
-  BOOLEAN                       WriteProtected;
-
-  CopyMem (&OldMediaInfo, IdeDev->BlkIo.Media, sizeof (EFI_BLOCK_IO_MEDIA));
-  *MediaChange  = FALSE;
-  //
-  // Retry for SenseDeviceNotReadyNeedRetry.
-  // Each retry takes 1s and we limit the upper boundary to
-  // 120 times about 2 min.
-  //
-  RetryNotReady = 120;
-
-  //
-  // Do Test Unit Ready
-  //
- DoTUR:
-  //
-  // Retry 5 times
-  //
-  RetryTimes = 5;
-  while (RetryTimes != 0) {
-
-    Status = AtapiTestUnitReady (IdeDev, &SResult);
-
-    if (EFI_ERROR (Status)) {
-      //
-      // Test Unit Ready error without sense data.
-      // For some devices, this means there's extra data
-      // that has not been read, so we read these extra
-      // data out before going on.
-      //
-      CleanStateStatus = AtapiReadPendingData (IdeDev);
-      if (EFI_ERROR (CleanStateStatus)) {
-        //
-        // Busy wait failed, try again
-        //
-        RetryTimes--;
-      }
-      //
-      // Try again without counting down RetryTimes
-      //
-      continue;
-    } else {
-      switch (SResult) {
-      case SenseNoSenseKey:
-        if (IdeDev->BlkIo.Media->MediaPresent) {
-          goto Done;
-        } else {
-          //
-          // Media present but the internal structure need refreshed.
-          // Try Read Capacity
-          //
-          goto DoRC;
-        }
-        break;
-
-      case SenseDeviceNotReadyNeedRetry:
-        if (--RetryNotReady == 0) {
-          return EFI_DEVICE_ERROR;
-        }
-        gBS->Stall (1000 * STALL_1_MILLI_SECOND);
-        continue;
-        break;
-
-      case SenseNoMedia:
-        IdeDev->BlkIo.Media->MediaPresent = FALSE;
-        IdeDev->BlkIo.Media->LastBlock    = 0;
-        goto Done;
-        break;
-
-      case SenseDeviceNotReadyNoRetry:
-      case SenseMediaError:
-        return EFI_DEVICE_ERROR;
-
-      case SenseMediaChange:
-        IdeDev->BlkIo.Media->MediaId++;
-        goto DoRC;
-        break;
-
-      default:
-        RetryTimes--;
-        break;
-      }
-    }
-  }
-
-  return EFI_DEVICE_ERROR;
-
-  //
-  // Do Read Capacity
-  //
- DoRC:
-    RetryTimes = 5;
-
-    while (RetryTimes != 0) {
-
-      Status = AtapiReadCapacity (IdeDev, &SResult);
-
-      if (EFI_ERROR (Status)) {
-        RetryTimes--;
-        continue;
-      } else {
-        switch (SResult) {
-        case SenseNoSenseKey:
-          goto Done;
-          break;
-
-        case SenseDeviceNotReadyNeedRetry:
-          //
-          // We use Test Unit Ready to retry which
-          // is faster.
-          //
-          goto DoTUR;
-          break;
-
-        case SenseNoMedia:
-          IdeDev->BlkIo.Media->MediaPresent = FALSE;
-          IdeDev->BlkIo.Media->LastBlock    = 0;
-          goto Done;
-          break;
-
-        case SenseDeviceNotReadyNoRetry:
-        case SenseMediaError:
-          return EFI_DEVICE_ERROR;
-
-        case SenseMediaChange:
-          IdeDev->BlkIo.Media->MediaId++;
-          continue;
-          break;
-
-        default:
-          RetryTimes--;
-          break;
-        }
-      }
-    }
-
-  return EFI_DEVICE_ERROR;
-
- Done:
-  //
-  // the following code is to check the write-protected for LS120 media
-  //
-  if ((IdeDev->BlkIo.Media->MediaPresent) && (IdeDev->Type == IdeMagnetic)) {
-
-    Status = IsLS120orZipWriteProtected (IdeDev, &WriteProtected);
-    if (!EFI_ERROR (Status)) {
-
-      if (WriteProtected) {
-
-        IdeDev->BlkIo.Media->ReadOnly = TRUE;
-      } else {
-
-        IdeDev->BlkIo.Media->ReadOnly = FALSE;
-      }
-
-    }
-  }
-
-  if (IdeDev->BlkIo.Media->MediaId != OldMediaInfo.MediaId) {
-    //
-    // Media change information got from the device
-    //
-    *MediaChange = TRUE;
-  }
-
-  if (IdeDev->BlkIo.Media->ReadOnly != OldMediaInfo.ReadOnly) {
-    *MediaChange = TRUE;
-    IdeDev->BlkIo.Media->MediaId += 1;
-  }
-
-  if (IdeDev->BlkIo.Media->BlockSize != OldMediaInfo.BlockSize) {
-    *MediaChange = TRUE;
-    IdeDev->BlkIo.Media->MediaId += 1;
-  }
-
-  if (IdeDev->BlkIo.Media->LastBlock != OldMediaInfo.LastBlock) {
-    *MediaChange = TRUE;
-    IdeDev->BlkIo.Media->MediaId += 1;
-  }
-
-  if (IdeDev->BlkIo.Media->MediaPresent != OldMediaInfo.MediaPresent) {
-    if (IdeDev->BlkIo.Media->MediaPresent) {
-      //
-      // when change from no media to media present, reset the MediaId to 1.
-      //
-      IdeDev->BlkIo.Media->MediaId = 1;
-    } else {
-      //
-      // when no media, reset the MediaId to zero.
-      //
-      IdeDev->BlkIo.Media->MediaId = 0;
-    }
-
-    *MediaChange = TRUE;
-  }
-
-  //
-  // if any change on current existing media,
-  // the Block I/O protocol need to be reinstalled.
-  //
-  if (*MediaChange) {
-    gBS->ReinstallProtocolInterface (
-          IdeDev->Handle,
-          &gEfiBlockIoProtocolGuid,
-          &IdeDev->BlkIo,
-          &IdeDev->BlkIo
-          );
-  }
-
-  if (IdeDev->BlkIo.Media->MediaPresent) {
-    return EFI_SUCCESS;
-  } else {
-    return EFI_NO_MEDIA;
-  }
-}
-
-/**
-  This function is called by the AtapiBlkIoReadBlocks() to perform
-  read from media in block unit.
-
-  The main command used to access media here is READ(10) Command.
-  READ(10) Command requests that the ATAPI device media transfer
-  specified data to the host. Data is transferred in block(sector)
-  unit. The maximum number of blocks that can be transferred once is
-  65536. This is the main difference between READ(10) and READ(12)
-  Command. The maximum number of blocks in READ(12) is 2 power 32.
-
-  @param IdeDev           pointer pointing to IDE_BLK_IO_DEV data structure, used
-                          to record all the information of the IDE device.
-  @param Buffer           A pointer to the destination buffer for the data.
-  @param Lba              The starting logical block address to read from on the
-                          device media.
-  @param NumberOfBlocks   The number of transfer data blocks.
-
-  @return status is fully dependent on the return status of AtapiPacketCommandIn() function.
-
-**/
-EFI_STATUS
-AtapiReadSectors (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  EFI_LBA         Lba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-
-  ATAPI_PACKET_COMMAND  Packet;
-  ATAPI_READ10_CMD            *Read10Packet;
-  EFI_STATUS            Status;
-  UINTN                 BlocksRemaining;
-  UINT32                Lba32;
-  UINT32                BlockSize;
-  UINT32                ByteCount;
-  UINT16                SectorCount;
-  VOID                  *PtrBuffer;
-  UINT16                MaxBlock;
-  UINTN                 TimeOut;
-
-  //
-  // fill command packet for Read(10) command
-  //
-  ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-  Read10Packet  = &Packet.Read10;
-  Lba32         = (UINT32) Lba;
-  PtrBuffer     = Buffer;
-
-  BlockSize     = IdeDev->BlkIo.Media->BlockSize;
-
-  //
-  // limit the data bytes that can be transferred by one Read(10) Command
-  //
-  MaxBlock        = 65535;
-
-  BlocksRemaining = NumberOfBlocks;
-
-  Status          = EFI_SUCCESS;
-  while (BlocksRemaining > 0) {
-
-    if (BlocksRemaining <= MaxBlock) {
-
-      SectorCount = (UINT16) BlocksRemaining;
-    } else {
-
-      SectorCount = MaxBlock;
-    }
-
-    //
-    // fill the Packet data structure
-    //
-
-    Read10Packet->opcode = ATA_CMD_READ_10;
-
-    //
-    // Lba0 ~ Lba3 specify the start logical block address of the data transfer.
-    // Lba0 is MSB, Lba3 is LSB
-    //
-    Read10Packet->Lba3  = (UINT8) (Lba32 & 0xff);
-    Read10Packet->Lba2  = (UINT8) (Lba32 >> 8);
-    Read10Packet->Lba1  = (UINT8) (Lba32 >> 16);
-    Read10Packet->Lba0  = (UINT8) (Lba32 >> 24);
-
-    //
-    // TranLen0 ~ TranLen1 specify the transfer length in block unit.
-    // TranLen0 is MSB, TranLen is LSB
-    //
-    Read10Packet->TranLen1  = (UINT8) (SectorCount & 0xff);
-    Read10Packet->TranLen0  = (UINT8) (SectorCount >> 8);
-
-    ByteCount               = SectorCount * BlockSize;
-
-    if (IdeDev->Type == IdeCdRom) {
-      TimeOut = CDROMLONGTIMEOUT;
-    } else {
-      TimeOut = ATAPILONGTIMEOUT;
-    }
-
-    Status = AtapiPacketCommandIn (
-              IdeDev,
-              &Packet,
-              (UINT16 *) PtrBuffer,
-              ByteCount,
-              TimeOut
-              );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Lba32 += SectorCount;
-    PtrBuffer = (UINT8 *) PtrBuffer + SectorCount * BlockSize;
-    BlocksRemaining -= SectorCount;
-  }
-
-  return Status;
-}
-
-/**
-  This function is called by the AtapiBlkIoWriteBlocks() to perform
-  write onto media in block unit.
-  The main command used to access media here is Write(10) Command.
-  Write(10) Command requests that the ATAPI device media transfer
-  specified data to the host. Data is transferred in block (sector)
-  unit. The maximum number of blocks that can be transferred once is
-  65536.
-
-  @param IdeDev          pointer pointing to IDE_BLK_IO_DEV data structure, used
-                         to record all the information of the IDE device.
-  @param Buffer          A pointer to the source buffer for the data.
-  @param Lba             The starting logical block address to write onto
-                         the device media.
-  @param NumberOfBlocks  The number of transfer data blocks.
-
-  @return status is fully dependent on the return status of AtapiPacketCommandOut() function.
-
-**/
-EFI_STATUS
-AtapiWriteSectors (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  EFI_LBA         Lba,
-  IN  UINTN           NumberOfBlocks
-  )
-{
-
-  ATAPI_PACKET_COMMAND  Packet;
-  ATAPI_READ10_CMD            *Read10Packet;
-
-  EFI_STATUS            Status;
-  UINTN                 BlocksRemaining;
-  UINT32                Lba32;
-  UINT32                BlockSize;
-  UINT32                ByteCount;
-  UINT16                SectorCount;
-  VOID                  *PtrBuffer;
-  UINT16                MaxBlock;
-
-  //
-  // fill command packet for Write(10) command
-  // Write(10) command packet has the same data structure as
-  // Read(10) command packet,
-  // so here use the Read10Packet data structure
-  // for the Write(10) command packet.
-  //
-  ZeroMem (&Packet, sizeof (ATAPI_PACKET_COMMAND));
-  Read10Packet  = &Packet.Read10;
-
-  Lba32         = (UINT32) Lba;
-  PtrBuffer     = Buffer;
-
-  BlockSize     = IdeDev->BlkIo.Media->BlockSize;
-
-  //
-  // limit the data bytes that can be transferred by one Read(10) Command
-  //
-  MaxBlock        = (UINT16) (65536 / BlockSize);
-
-  BlocksRemaining = NumberOfBlocks;
-
-  Status          = EFI_SUCCESS;
-  while (BlocksRemaining > 0) {
-
-    if (BlocksRemaining >= MaxBlock) {
-      SectorCount = MaxBlock;
-    } else {
-      SectorCount = (UINT16) BlocksRemaining;
-    }
-
-    //
-    // Command code is WRITE_10.
-    //
-    Read10Packet->opcode = ATA_CMD_WRITE_10;
-
-    //
-    // Lba0 ~ Lba3 specify the start logical block address of the data transfer.
-    // Lba0 is MSB, Lba3 is LSB
-    //
-    Read10Packet->Lba3  = (UINT8) (Lba32 & 0xff);
-    Read10Packet->Lba2  = (UINT8) (Lba32 >> 8);
-    Read10Packet->Lba1  = (UINT8) (Lba32 >> 16);
-    Read10Packet->Lba0  = (UINT8) (Lba32 >> 24);
-
-    //
-    // TranLen0 ~ TranLen1 specify the transfer length in block unit.
-    // TranLen0 is MSB, TranLen is LSB
-    //
-    Read10Packet->TranLen1  = (UINT8) (SectorCount & 0xff);
-    Read10Packet->TranLen0  = (UINT8) (SectorCount >> 8);
-
-    ByteCount               = SectorCount * BlockSize;
-
-    Status = AtapiPacketCommandOut (
-              IdeDev,
-              &Packet,
-              (UINT16 *) PtrBuffer,
-              ByteCount,
-              ATAPILONGTIMEOUT
-              );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Lba32 += SectorCount;
-    PtrBuffer = ((UINT8 *) PtrBuffer + SectorCount * BlockSize);
-    BlocksRemaining -= SectorCount;
-  }
-
-  return Status;
-}
-/**
-  This function is used to implement the Soft Reset on the specified
-  ATAPI device. Different from the AtaSoftReset(), here reset is a ATA
-  Soft Reset Command special for ATAPI device, and it only take effects
-  on the specified ATAPI device, not on the whole IDE bus.
-  Since the ATAPI soft reset is needed when device is in exceptional
-  condition (such as BSY bit is always set ), I think the Soft Reset
-  command should be sent without waiting for the BSY clear and DRDY
-  set.
-  This function is called by IdeBlkIoReset(),
-  a interface function of Block I/O protocol.
-
-  @param IdeDev    pointer pointing to IDE_BLK_IO_DEV data structure, used
-                   to record all the information of the IDE device.
-
-  @retval EFI_SUCCESS      Soft reset completes successfully.
-  @retval EFI_DEVICE_ERROR Any step during the reset process is failed.
-
-**/
-EFI_STATUS
-AtapiSoftReset (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  UINT8       Command;
-  UINT8       DeviceSelect;
-  EFI_STATUS  Status;
-
-  //
-  // for ATAPI device, no need to wait DRDY ready after device selecting.
-  // (bit7 and bit5 are both set to 1 for backward compatibility)
-  //
-  DeviceSelect = (UINT8) (((BIT7 | BIT5) | (IdeDev->Device << 4)));
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, DeviceSelect);
-
-  Command = ATA_CMD_SOFT_RESET;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, Command);
-
-  //
-  // BSY cleared is the only status return to the host by the device
-  // when reset is completed.
-  // slave device needs at most 31s to clear BSY
-  //
-  Status = WaitForBSYClear (IdeDev, 31000);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // stall 5 seconds to make the device status stable
-  //
-  gBS->Stall (5000000);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is the ATAPI implementation for ReadBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice Indicates the calling context.
-  @param MediaId        The media id that the read request is for.
-  @param Lba            The starting logical block address to read from on the device.
-  @param BufferSize     The size of the Buffer in bytes. This must be a multiple
-                        of the intrinsic block size of the device.
-  @param Buffer         A pointer to the destination buffer for the data. The caller
-                        is responsible for either having implicit or explicit
-                        ownership of the memory that data is read into.
-
-  @retval EFI_SUCCESS           Read Blocks successfully.
-  @retval EFI_DEVICE_ERROR      Read Blocks failed.
-  @retval EFI_NO_MEDIA          There is no media in the device.
-  @retval EFI_MEDIA_CHANGED     The MediaId is not for the current media.
-  @retval EFI_BAD_BUFFER_SIZE   The BufferSize parameter is not a multiple of the
-                                intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
-                                or the data buffer is not valid.
-**/
-EFI_STATUS
-AtapiBlkIoReadBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  )
-{
-  EFI_BLOCK_IO_MEDIA  *Media;
-  UINTN               BlockSize;
-  UINTN               NumberOfBlocks;
-  EFI_STATUS          Status;
-
-  BOOLEAN             MediaChange;
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (BufferSize == 0) {
-    return EFI_SUCCESS;
-  }
-
-  //
-  // ATAPI device media is removable, so it is a must
-  // to detect media first before read operation
-  //
-  MediaChange = FALSE;
-  Status      = AtapiDetectMedia (IdeBlkIoDevice, &MediaChange);
-  if (EFI_ERROR (Status)) {
-
-    if (IdeBlkIoDevice->Cache != NULL) {
-      gBS->FreePool (IdeBlkIoDevice->Cache);
-      IdeBlkIoDevice->Cache = NULL;
-    }
-
-    return Status;
-  }
-  //
-  // Get the intrinsic block size
-  //
-  Media           = IdeBlkIoDevice->BlkIo.Media;
-  BlockSize       = Media->BlockSize;
-
-  NumberOfBlocks  = BufferSize / BlockSize;
-
-  if (!(Media->MediaPresent)) {
-
-    if (IdeBlkIoDevice->Cache != NULL) {
-      gBS->FreePool (IdeBlkIoDevice->Cache);
-      IdeBlkIoDevice->Cache = NULL;
-    }
-    return EFI_NO_MEDIA;
-
-  }
-
-  if ((MediaId != Media->MediaId) || MediaChange) {
-
-    if (IdeBlkIoDevice->Cache != NULL) {
-      gBS->FreePool (IdeBlkIoDevice->Cache);
-      IdeBlkIoDevice->Cache = NULL;
-    }
-    return EFI_MEDIA_CHANGED;
-  }
-
-  if (BufferSize % BlockSize != 0) {
-    return EFI_BAD_BUFFER_SIZE;
-  }
-
-  if (Lba > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Lba + NumberOfBlocks - 1) > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Media->IoAlign > 1) && (((UINTN) Buffer & (Media->IoAlign - 1)) != 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // if all the parameters are valid, then perform read sectors command
-  // to transfer data from device to host.
-  //
-  Status = AtapiReadSectors (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Read blocks succeeded
-  //
-
-  //
-  // save the first block to the cache for performance
-  //
-  if (Lba == 0 && (IdeBlkIoDevice->Cache == NULL)) {
-    IdeBlkIoDevice->Cache = AllocatePool (BlockSize);
-    if (IdeBlkIoDevice->Cache!= NULL) {
-      CopyMem ((UINT8 *) IdeBlkIoDevice->Cache, (UINT8 *) Buffer, BlockSize);
-    }
-  }
-
-  return EFI_SUCCESS;
-
-}
-/**
-  This function is the ATAPI implementation for WriteBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice  Indicates the calling context.
-  @param MediaId         The media id that the write request is for.
-  @param Lba             The starting logical block address to write onto the device.
-  @param BufferSize      The size of the Buffer in bytes. This must be a multiple
-                         of the intrinsic block size of the device.
-  @param Buffer          A pointer to the source buffer for the data. The caller
-                         is responsible for either having implicit or explicit ownership
-                         of the memory that data is written from.
-
-  @retval EFI_SUCCESS            Write Blocks successfully.
-  @retval EFI_DEVICE_ERROR       Write Blocks failed.
-  @retval EFI_NO_MEDIA           There is no media in the device.
-  @retval EFI_MEDIA_CHANGE       The MediaId is not for the current media.
-  @retval EFI_BAD_BUFFER_SIZE    The BufferSize parameter is not a multiple of the
-                                 intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER  The write request contains LBAs that are not valid,
-                                 or the data buffer is not valid.
-
-  @retval EFI_WRITE_PROTECTED    The write protected is enabled or the media does not support write
-**/
-EFI_STATUS
-AtapiBlkIoWriteBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  )
-{
-
-  EFI_BLOCK_IO_MEDIA  *Media;
-  UINTN               BlockSize;
-  UINTN               NumberOfBlocks;
-  EFI_STATUS          Status;
-  BOOLEAN             MediaChange;
-
-  if (Lba == 0 && IdeBlkIoDevice->Cache != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->Cache);
-    IdeBlkIoDevice->Cache = NULL;
-  }
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (BufferSize == 0) {
-    return EFI_SUCCESS;
-  }
-
-  //
-  // ATAPI device media is removable,
-  // so it is a must to detect media first before write operation
-  //
-  MediaChange = FALSE;
-  Status      = AtapiDetectMedia (IdeBlkIoDevice, &MediaChange);
-  if (EFI_ERROR (Status)) {
-
-    if (Lba == 0 && IdeBlkIoDevice->Cache != NULL) {
-      gBS->FreePool (IdeBlkIoDevice->Cache);
-      IdeBlkIoDevice->Cache = NULL;
-    }
-    return Status;
-  }
-
-  //
-  // Get the intrinsic block size
-  //
-  Media           = IdeBlkIoDevice->BlkIo.Media;
-  BlockSize       = Media->BlockSize;
-  NumberOfBlocks  = BufferSize / BlockSize;
-
-  if (!(Media->MediaPresent)) {
-
-    if (Lba == 0 && IdeBlkIoDevice->Cache != NULL) {
-      gBS->FreePool (IdeBlkIoDevice->Cache);
-      IdeBlkIoDevice->Cache = NULL;
-    }
-    return EFI_NO_MEDIA;
-  }
-
-  if ((MediaId != Media->MediaId) || MediaChange) {
-
-    if (Lba == 0 && IdeBlkIoDevice->Cache != NULL) {
-      gBS->FreePool (IdeBlkIoDevice->Cache);
-      IdeBlkIoDevice->Cache = NULL;
-    }
-    return EFI_MEDIA_CHANGED;
-  }
-
-  if (Media->ReadOnly) {
-    return EFI_WRITE_PROTECTED;
-  }
-
-  if (BufferSize % BlockSize != 0) {
-    return EFI_BAD_BUFFER_SIZE;
-  }
-
-  if (Lba > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Lba + NumberOfBlocks - 1) > Media->LastBlock) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Media->IoAlign > 1) && (((UINTN) Buffer & (Media->IoAlign - 1)) != 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // if all the parameters are valid,
-  // then perform write sectors command to transfer data from host to device.
-  //
-  Status = AtapiWriteSectors (IdeBlkIoDevice, Buffer, Lba, NumberOfBlocks);
-  if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-
-}
-
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.c
deleted file mode 100644
index 41dee53..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/* $Id: ComponentName.c $ */
-/** @file
- * ComponentName.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  UEFI Component Name(2) protocol implementation for ConPlatform driver.
-
-  Copyright (c) 2006 - 2008, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "IdeBus.h"
-
-//
-// EFI Component Name Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gIDEBusComponentName = {
-  IDEBusComponentNameGetDriverName,
-  IDEBusComponentNameGetControllerName,
-  "eng"
-};
-
-//
-// EFI Component Name 2 Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gIDEBusComponentName2 = {
-  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) IDEBusComponentNameGetDriverName,
-  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) IDEBusComponentNameGetControllerName,
-  "en"
-};
-
-
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIDEBusDriverNameTable[] = {
-  { "eng;en", (CHAR16 *) L"PCI IDE/ATAPI Bus Driver" },
-  { NULL , NULL }
-};
-
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIDEBusControllerNameTable[] = {
-  { "eng;en", (CHAR16 *) L"PCI IDE/ATAPI Controller" },
-  { NULL , NULL }
-};
-
-/**
-  Retrieves a Unicode string that is the user readable name of the driver.
-
-  This function retrieves the user readable name of a driver in the form of a
-  Unicode string. If the driver specified by This has a user readable name in
-  the language specified by Language, then a pointer to the driver name is
-  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
-  by This does not support the language specified by Language,
-  then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language. This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified
-                                in RFC 4646 or ISO 639-2 language code format.
-
-  @param  DriverName[out]       A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                driver specified by This in the language
-                                specified by Language.
-
-  @retval EFI_SUCCESS           The Unicode string for the Driver specified by
-                                This and the language specified by Language was
-                                returned in DriverName.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER DriverName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusComponentNameGetDriverName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **DriverName
-  )
-{
-  return LookupUnicodeString2 (
-           Language,
-           This->SupportedLanguages,
-           mIDEBusDriverNameTable,
-           DriverName,
-           (BOOLEAN)(This == &gIDEBusComponentName)
-           );
-}
-
-/**
-  Retrieves a Unicode string that is the user readable name of the controller
-  that is being managed by a driver.
-
-  This function retrieves the user readable name of the controller specified by
-  ControllerHandle and ChildHandle in the form of a Unicode string. If the
-  driver specified by This has a user readable name in the language specified by
-  Language, then a pointer to the controller name is returned in ControllerName,
-  and EFI_SUCCESS is returned.  If the driver specified by This is not currently
-  managing the controller specified by ControllerHandle and ChildHandle,
-  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
-  support the language specified by Language, then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  ControllerHandle[in]  The handle of a controller that the driver
-                                specified by This is managing.  This handle
-                                specifies the controller whose name is to be
-                                returned.
-
-  @param  ChildHandle[in]       The handle of the child controller to retrieve
-                                the name of.  This is an optional parameter that
-                                may be NULL.  It will be NULL for device
-                                drivers.  It will also be NULL for a bus drivers
-                                that wish to retrieve the name of the bus
-                                controller.  It will not be NULL for a bus
-                                driver that wishes to retrieve the name of a
-                                child controller.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language.  This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified in
-                                RFC 4646 or ISO 639-2 language code format.
-
-  @param  ControllerName[out]   A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                controller specified by ControllerHandle and
-                                ChildHandle in the language specified by
-                                Language from the point of view of the driver
-                                specified by This.
-
-  @retval EFI_SUCCESS           The Unicode string for the user readable name in
-                                the language specified by Language for the
-                                driver specified by This was returned in
-                                DriverName.
-
-  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-
-  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
-                                EFI_HANDLE.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
-                                managing the controller specified by
-                                ControllerHandle and ChildHandle.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusComponentNameGetControllerName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
-  IN  EFI_HANDLE                                      ControllerHandle,
-  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
-  IN  CHAR8                                           *Language,
-  OUT CHAR16                                          **ControllerName
-  )
-{
-  EFI_STATUS            Status;
-  EFI_BLOCK_IO_PROTOCOL *BlockIo;
-  IDE_BLK_IO_DEV        *IdeBlkIoDevice;
-
-  //
-  // Make sure this driver is currently managing ControllHandle
-  //
-  Status = EfiTestManagedDevice (
-             ControllerHandle,
-             gIDEBusDriverBinding.DriverBindingHandle,
-             &gEfiIdeControllerInitProtocolGuid
-             );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  if (ChildHandle == NULL) {
-    return LookupUnicodeString2 (
-             Language,
-             This->SupportedLanguages,
-             mIDEBusControllerNameTable,
-             ControllerName,
-             (BOOLEAN)(This == &gIDEBusComponentName)
-             );
-  }
-
-  Status = EfiTestChildHandle (
-             ControllerHandle,
-             ChildHandle,
-             &gEfiPciIoProtocolGuid
-             );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Get the child context
-  //
-  Status = gBS->OpenProtocol (
-                  ChildHandle,
-                  &gEfiBlockIoProtocolGuid,
-                  (VOID **) &BlockIo,
-                  gIDEBusDriverBinding.DriverBindingHandle,
-                  ChildHandle,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-    return EFI_UNSUPPORTED;
-  }
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (BlockIo);
-
-  return LookupUnicodeString2 (
-           Language,
-           This->SupportedLanguages,
-           IdeBlkIoDevice->ControllerNameTable,
-           ControllerName,
-           (BOOLEAN)(This == &gIDEBusComponentName)
-           );
-}
-
-/**
-  Add the component name for the IDE/ATAPI device
-
-  @param  IdeBlkIoDevicePtr A pointer to the IDE_BLK_IO_DEV instance.
-
-**/
-VOID
-AddName (
-  IN  IDE_BLK_IO_DEV               *IdeBlkIoDevicePtr
-  )
-{
-  UINTN   StringIndex;
-  CHAR16  ModelName[41];
-
-  //
-  // Add Component Name for the IDE/ATAPI device that was discovered.
-  //
-  IdeBlkIoDevicePtr->ControllerNameTable = NULL;
-  for (StringIndex = 0; StringIndex < 41; StringIndex++) {
-    ModelName[StringIndex] = IdeBlkIoDevicePtr->ModelName[StringIndex];
-  }
-
-  AddUnicodeString2 (
-    "eng",
-    gIDEBusComponentName.SupportedLanguages,
-    &IdeBlkIoDevicePtr->ControllerNameTable,
-    ModelName,
-    TRUE
-    );
-  AddUnicodeString2 (
-    "en",
-    gIDEBusComponentName2.SupportedLanguages,
-    &IdeBlkIoDevicePtr->ControllerNameTable,
-    ModelName,
-    FALSE
-    );
-
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.h
deleted file mode 100644
index 62b70c4..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/ComponentName.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/* $Id: ComponentName.h $ */
-/** @file
- * ComponentName.h
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-
-  UEFI Component Name(2) protocol implementation header file for IDE Bus driver.
-
-  Copyright (c) 2006, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _IDE_BUS_COMPONENT_NAME_H_
-#define _IDE_BUS_COMPONENT_NAME_H_
-
-#define ADD_IDE_ATAPI_NAME(x) AddName ((x));
-
-extern EFI_COMPONENT_NAME_PROTOCOL   gIDEBusComponentName;
-extern EFI_COMPONENT_NAME2_PROTOCOL  gIDEBusComponentName2;
-
-
-//
-// EFI Component Name Functions
-//
-/**
-  Retrieves a Unicode string that is the user readable name of the driver.
-
-  This function retrieves the user readable name of a driver in the form of a
-  Unicode string. If the driver specified by This has a user readable name in
-  the language specified by Language, then a pointer to the driver name is
-  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
-  by This does not support the language specified by Language,
-  then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language. This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified
-                                in RFC 4646 or ISO 639-2 language code format.
-
-  @param  DriverName[out]       A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                driver specified by This in the language
-                                specified by Language.
-
-  @retval EFI_SUCCESS           The Unicode string for the Driver specified by
-                                This and the language specified by Language was
-                                returned in DriverName.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER DriverName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusComponentNameGetDriverName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **DriverName
-  );
-
-
-/**
-  Retrieves a Unicode string that is the user readable name of the controller
-  that is being managed by a driver.
-
-  This function retrieves the user readable name of the controller specified by
-  ControllerHandle and ChildHandle in the form of a Unicode string. If the
-  driver specified by This has a user readable name in the language specified by
-  Language, then a pointer to the controller name is returned in ControllerName,
-  and EFI_SUCCESS is returned.  If the driver specified by This is not currently
-  managing the controller specified by ControllerHandle and ChildHandle,
-  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
-  support the language specified by Language, then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  ControllerHandle[in]  The handle of a controller that the driver
-                                specified by This is managing.  This handle
-                                specifies the controller whose name is to be
-                                returned.
-
-  @param  ChildHandle[in]       The handle of the child controller to retrieve
-                                the name of.  This is an optional parameter that
-                                may be NULL.  It will be NULL for device
-                                drivers.  It will also be NULL for a bus drivers
-                                that wish to retrieve the name of the bus
-                                controller.  It will not be NULL for a bus
-                                driver that wishes to retrieve the name of a
-                                child controller.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language.  This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified in
-                                RFC 4646 or ISO 639-2 language code format.
-
-  @param  ControllerName[out]   A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                controller specified by ControllerHandle and
-                                ChildHandle in the language specified by
-                                Language from the point of view of the driver
-                                specified by This.
-
-  @retval EFI_SUCCESS           The Unicode string for the user readable name in
-                                the language specified by Language for the
-                                driver specified by This was returned in
-                                DriverName.
-
-  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-
-  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
-                                EFI_HANDLE.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
-                                managing the controller specified by
-                                ControllerHandle and ChildHandle.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusComponentNameGetControllerName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
-  IN  EFI_HANDLE                                      ControllerHandle,
-  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
-  IN  CHAR8                                           *Language,
-  OUT CHAR16                                          **ControllerName
-  );
-
-
-/**
-  Add the component name for the IDE/ATAPI device
-
-  @param  IdeBlkIoDevicePtr A pointer to the IDE_BLK_IO_DEV instance.
-
-**/
-VOID
-AddName (
-  IN  IDE_BLK_IO_DEV               *IdeBlkIoDevicePtr
-  );
-
-#endif
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/DriverConfiguration.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/DriverConfiguration.c
deleted file mode 100644
index e3b1476..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/DriverConfiguration.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/* $Id: DriverConfiguration.c $ */
-/** @file
- * DriverConfiguration.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  Implementation of UEFI Driver Configuration Protocol for IDE bus driver which
-  provides ability to set IDE bus controller specific options.
-
-  Copyright (c) 2006 - 2008, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#include "IdeBus.h"
-
-CHAR16 *OptionString[4] = {
-  L"Enable Primary Master    (Y/N)? -->",
-  L"Enable Primary Slave     (Y/N)? -->",
-  L"Enable Secondary Master  (Y/N)? -->",
-  L"Enable Secondary Slave   (Y/N)? -->"
-};
-
-//
-// EFI Driver Configuration Protocol
-//
-EFI_DRIVER_CONFIGURATION_PROTOCOL gIDEBusDriverConfiguration = {
-  IDEBusDriverConfigurationSetOptions,
-  IDEBusDriverConfigurationOptionsValid,
-  IDEBusDriverConfigurationForceDefaults,
-  "eng"
-};
-
-/**
-  Interpret keyboard input.
-
-  @retval  EFI_ABORTED  Get an 'ESC' key inputted.
-  @retval  EFI_SUCCESS  Get an 'Y' or 'y' inputted.
-  @retval  EFI_NOT_FOUND Get an 'N' or 'n' inputted..
-
-**/
-EFI_STATUS
-GetResponse (
-  VOID
-  )
-{
-  EFI_STATUS    Status;
-  EFI_INPUT_KEY Key;
-
-  while (TRUE) {
-    Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
-    if (!EFI_ERROR (Status)) {
-      if (Key.ScanCode == SCAN_ESC) {
-        return EFI_ABORTED;
-      }
-
-      switch (Key.UnicodeChar) {
-
-      //
-      // fall through
-      //
-      case L'y':
-      case L'Y':
-        gST->ConOut->OutputString (gST->ConOut, L"Y\n");
-        return EFI_SUCCESS;
-
-      //
-      // fall through
-      //
-      case L'n':
-      case L'N':
-        gST->ConOut->OutputString (gST->ConOut, L"N\n");
-        return EFI_NOT_FOUND;
-      }
-
-    }
-  }
-}
-
-/**
-  Allows the user to set controller specific options for a controller that a
-  driver is currently managing.
-
-  @param  This              A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.
-  @param  ControllerHandle  The handle of the controller to set options on.
-  @param  ChildHandle       The handle of the child controller to set options on.
-                            This is an optional parameter that may be NULL.
-                            It will be NULL for device drivers, and for a bus drivers
-                            that wish to set options for the bus controller.
-                            It will not be NULL for a bus driver that wishes to set
-                            options for one of its child controllers.
-  @param  Language          A pointer to a three character ISO 639-2 language identifier.
-                            This is the language of the user interface that should be presented
-                            to the user, and it must match one of the languages specified in
-                            SupportedLanguages. The number of languages supported by a driver is up to
-                            the driver writer.
-  @param  ActionRequired    A pointer to the action that the calling agent is required
-                            to perform when this function returns.
-
-
-  @retval  EFI_SUCCESS           The driver specified by This successfully set the configuration
-                                 options for the controller specified by ControllerHandle..
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ActionRequired is NULL.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support setting configuration options for
-                                 the controller specified by ControllerHandle and ChildHandle.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the language specified by Language.
-  @retval  EFI_DEVICE_ERROR      A device error occurred while attempt to set the configuration options for the
-                                 controller specified by ControllerHandle and ChildHandle.
-  @retval  EFI_OUT_RESOURCES     There are not enough resources available to set the configuration options for the
-                                 controller specified by ControllerHandle and ChildHandle
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverConfigurationSetOptions (
-  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL                      *This,
-  IN  EFI_HANDLE                                             ControllerHandle,
-  IN  EFI_HANDLE                                             ChildHandle  OPTIONAL,
-  IN  CHAR8                                                  *Language,
-  OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED               *ActionRequired
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       Value;
-  UINT8       NewValue;
-  UINTN       DataSize;
-  UINTN       Index;
-
-  if (ChildHandle != NULL) {
-    return EFI_UNSUPPORTED;
-  }
-
-  *ActionRequired = EfiDriverConfigurationActionNone;
-
-  DataSize        = sizeof (Value);
-  Status = gRT->GetVariable (
-                  L"Configuration",
-                  &gEfiCallerIdGuid,
-                  NULL,
-                  &DataSize,
-                  &Value
-                  );
-
-  gST->ConOut->OutputString (gST->ConOut, L"IDE Bus Driver Configuration\n");
-  gST->ConOut->OutputString (gST->ConOut, L"===============================\n");
-
-  NewValue = 0;
-  for (Index = 0; Index < 4; Index++) {
-    gST->ConOut->OutputString (gST->ConOut, OptionString[Index]);
-
-    Status = GetResponse ();
-    if (Status == EFI_ABORTED) {
-      return EFI_SUCCESS;
-    }
-
-    if (!EFI_ERROR (Status)) {
-      NewValue = (UINT8) (NewValue | (1 << Index));
-    }
-  }
-
-  if (EFI_ERROR (Status) || (NewValue != Value)) {
-    gRT->SetVariable (
-          L"Configuration",
-          &gEfiCallerIdGuid,
-          EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
-          sizeof (NewValue),
-          &NewValue
-          );
-
-    *ActionRequired = EfiDriverConfigurationActionRestartController;
-  } else {
-    *ActionRequired = EfiDriverConfigurationActionNone;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Tests to see if a controller's current configuration options are valid.
-
-  @param  This             A pointer to the EFI_DRIVER_CONFIGURATION_PROTOCOL instance.
-  @param  ControllerHandle The handle of the controller to test if it's current configuration options
-                           are valid.
-  @param  ChildHandle      The handle of the child controller to test if it's current configuration
-                           options are valid.  This is an optional parameter that may be NULL. It will
-                           be NULL for device drivers.  It will also be NULL for a bus drivers that
-                           wish to test the configuration options for the bus controller. It will
-                           not be NULL for a bus driver that wishes to test configuration options for
-                           one of its child controllers.
-  @retval  EFI_SUCCESS           The controller specified by ControllerHandle and ChildHandle that is being
-                                 managed by the driver specified by This has a valid set of  configuration
-                                 options.
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_UNSUPPORTED       The driver specified by This is not currently  managing the controller
-                                 specified by ControllerHandle and ChildHandle.
-  @retval  EFI_DEVICE_ERROR      The controller specified by ControllerHandle and ChildHandle that is being
-                                 managed by the driver specified by This has an invalid set of configuration
-                                 options.
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverConfigurationOptionsValid (
-  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL               *This,
-  IN  EFI_HANDLE                                      ControllerHandle,
-  IN  EFI_HANDLE                                      ChildHandle  OPTIONAL
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       Value;
-  UINTN       DataSize;
-
-  if (ChildHandle != NULL) {
-    return EFI_UNSUPPORTED;
-  }
-
-  DataSize = sizeof (Value);
-  Status = gRT->GetVariable (
-                  L"Configuration",
-                  &gEfiCallerIdGuid,
-                  NULL,
-                  &DataSize,
-                  &Value
-                  );
-  if (EFI_ERROR (Status) || Value > 0x0f) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  Forces a driver to set the default configuration options for a controller.
-
-  @param  This             A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.
-  @param  ControllerHandle The handle of the controller to force default configuration options on.
-  @param  ChildHandle      The handle of the child controller to force default configuration
-                           options on  This is an optional parameter that may be NULL.  It
-                           will be NULL for device drivers. It will also be NULL for a bus
-                           drivers that wish to force default configuration options for the bus
-                           controller.  It will not be NULL for a bus driver that wishes to force
-                           default configuration options for one of its child controllers.
-  @param  DefaultType      The type of default configuration options to force on the controller
-                           specified by ControllerHandle and ChildHandle.
-  @param  ActionRequired   A pointer to the action that the calling agent is required to perform
-                           when this function returns.
-
-  @retval  EFI_SUCCESS           The driver specified by This successfully forced the
-                                 default configuration options on the controller specified by
-                                 ControllerHandle and ChildHandle.
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ActionRequired is NULL.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support forcing the default
-                                 configuration options on the controller specified by ControllerHandle
-                                 and ChildHandle.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the configuration type
-                                 specified by DefaultType.
-  @retval  EFI_DEVICE_ERROR      A device error occurred while attempt to force the default configuration
-                                 options on the controller specified by  ControllerHandle and ChildHandle.
-  @retval  EFI_OUT_RESOURCES     There are not enough resources available to force the default configuration
-                                 options on the controller specified by ControllerHandle and ChildHandle.
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverConfigurationForceDefaults (
-  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL                      *This,
-  IN  EFI_HANDLE                                             ControllerHandle,
-  IN  EFI_HANDLE                                             ChildHandle  OPTIONAL,
-  IN  UINT32                                                 DefaultType,
-  OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED               *ActionRequired
-  )
-{
-  UINT8 Value;
-
-  if (ChildHandle != NULL) {
-    return EFI_UNSUPPORTED;
-  }
-
-  Value = 0x0f;
-  gRT->SetVariable (
-        L"Configuration",
-        &gEfiCallerIdGuid,
-        EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
-        sizeof (Value),
-        &Value
-        );
-  *ActionRequired = EfiDriverConfigurationActionRestartController;
-  return EFI_SUCCESS;
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/DriverDiagnostics.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/DriverDiagnostics.c
deleted file mode 100644
index 9a27dfb..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/DriverDiagnostics.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* $Id: DriverDiagnostics.c $ */
-/** @file
- * DriverDiagnostics.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  Implementation of UEFI driver Diagnostics protocol which to perform diagnostic on the IDE
-  Bus controller.
-
-  Copyright (c) 2006 - 2008, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#include "IdeBus.h"
-
-#define IDE_BUS_DIAGNOSTIC_ERROR  L"PCI IDE/ATAPI Driver Diagnostics Failed"
-
-//
-// EFI Driver Diagnostics Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS_PROTOCOL gIDEBusDriverDiagnostics = {
-  IDEBusDriverDiagnosticsRunDiagnostics,
-  "eng"
-};
-
-//
-// EFI Driver Diagnostics 2 Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2 = {
-  (EFI_DRIVER_DIAGNOSTICS2_RUN_DIAGNOSTICS) IDEBusDriverDiagnosticsRunDiagnostics,
-  "en"
-};
-
-/**
-  Runs diagnostics on a controller.
-
-  @param  This             A pointer to the EFI_DRIVER_DIAGNOSTICS_PROTOCOLinstance.
-  @param  ControllerHandle The handle of the controller to run diagnostics on.
-  @param  ChildHandle      The handle of the child controller to run diagnostics on
-                           This is an optional parameter that may be NULL.  It will
-                           be NULL for device drivers.  It will also be NULL for a
-                           bus drivers that wish to run diagnostics on the bus controller.
-                           It will not be NULL for a bus driver that wishes to run
-                           diagnostics on one of its child controllers.
-  @param  DiagnosticType   Indicates type of diagnostics to perform on the controller
-                           specified by ControllerHandle and ChildHandle.
-  @param  Language         A pointer to a three character ISO 639-2 language identifier.
-                           This is the language in which the optional error message should
-                           be returned in Buffer, and it must match one of the languages
-                           specified in SupportedLanguages. The number of languages supported by
-                           a driver is up to the driver writer.
-  @param  ErrorType        A GUID that defines the format of the data returned in Buffer.
-  @param  BufferSize       The size, in bytes, of the data returned in Buffer.
-  @param  Buffer           A buffer that contains a Null-terminated Unicode string
-                           plus some additional data whose format is defined by ErrorType.
-                           Buffer is allocated by this function with AllocatePool(), and
-                           it is the caller's responsibility to free it with a call to FreePool().
-
-  @retval  EFI_SUCCESS           The controller specified by ControllerHandle and ChildHandle passed
-                                 the diagnostic.
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER Language is NULL.
-  @retval  EFI_INVALID_PARAMETER ErrorType is NULL.
-  @retval  EFI_INVALID_PARAMETER BufferType is NULL.
-  @retval  EFI_INVALID_PARAMETER Buffer is NULL.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support running
-                                 diagnostics for the controller specified by ControllerHandle
-                                 and ChildHandle.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the
-                                 type of diagnostic specified by DiagnosticType.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the language
-                                 specified by Language.
-  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to complete the
-                                 diagnostics.
-  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to return the
-                                 status information in ErrorType, BufferSize,and Buffer.
-  @retval  EFI_DEVICE_ERROR      The controller specified by ControllerHandle and ChildHandle
-                                 did not pass the diagnostic.
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverDiagnosticsRunDiagnostics (
-  IN  EFI_DRIVER_DIAGNOSTICS_PROTOCOL               *This,
-  IN  EFI_HANDLE                                    ControllerHandle,
-  IN  EFI_HANDLE                                    ChildHandle  OPTIONAL,
-  IN  EFI_DRIVER_DIAGNOSTIC_TYPE                    DiagnosticType,
-  IN  CHAR8                                         *Language,
-  OUT EFI_GUID                                      **ErrorType,
-  OUT UINTN                                         *BufferSize,
-  OUT CHAR16                                        **Buffer
-  )
-{
-  EFI_STATUS            Status;
-  EFI_PCI_IO_PROTOCOL   *PciIo;
-  EFI_BLOCK_IO_PROTOCOL *BlkIo;
-  IDE_BLK_IO_DEV        *IdeBlkIoDevice;
-  UINT32                VendorDeviceId;
-  VOID                  *BlockBuffer;
-  CHAR8                 *SupportedLanguages;
-  BOOLEAN               Iso639Language;
-  BOOLEAN               Found;
-  UINTN                 Index;
-
-  if (Language         == NULL ||
-      ErrorType        == NULL ||
-      Buffer           == NULL ||
-      ControllerHandle == NULL ||
-      BufferSize       == NULL) {
-
-    return EFI_INVALID_PARAMETER;
-  }
-
-  SupportedLanguages = This->SupportedLanguages;
-  Iso639Language = (BOOLEAN)(This == &gIDEBusDriverDiagnostics);
-  //
-  // Make sure Language is in the set of Supported Languages
-  //
-  Found = FALSE;
-  while (*SupportedLanguages != 0) {
-    if (Iso639Language) {
-      if (CompareMem (Language, SupportedLanguages, 3) == 0) {
-        Found = TRUE;
-        break;
-      }
-      SupportedLanguages += 3;
-    } else {
-      for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
-      if ((AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) && (Language[Index] == 0)) {
-        Found = TRUE;
-        break;
-      }
-      SupportedLanguages += Index;
-      for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
-    }
-  }
-  //
-  // If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
-  //
-  if (!Found) {
-    return EFI_UNSUPPORTED;
-  }
-
-  *ErrorType  = NULL;
-  *BufferSize = 0;
-
-  if (ChildHandle == NULL) {
-    Status = gBS->OpenProtocol (
-                    ControllerHandle,
-                    &gEfiCallerIdGuid,
-                    NULL,
-                    gIDEBusDriverBinding.DriverBindingHandle,
-                    ControllerHandle,
-                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL
-                    );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    Status = gBS->OpenProtocol (
-                    ControllerHandle,
-                    &gEfiPciIoProtocolGuid,
-                    (VOID **) &PciIo,
-                    gIDEBusDriverBinding.DriverBindingHandle,
-                    ControllerHandle,
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                    );
-    if (EFI_ERROR (Status)) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    //
-    // Use services of PCI I/O Protocol to test the PCI IDE/ATAPI Controller
-    // The following test simply reads the Device ID and Vendor ID.
-    // It should never fail.  A real test would perform more advanced
-    // diagnostics.
-    //
-
-    Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0, 1, &VendorDeviceId);
-    if (EFI_ERROR (Status) || VendorDeviceId == 0xffffffff) {
-      return EFI_DEVICE_ERROR;
-    }
-
-    return EFI_SUCCESS;
-  }
-
-  Status = gBS->OpenProtocol (
-                  ChildHandle,
-                  &gEfiBlockIoProtocolGuid,
-                  (VOID **) &BlkIo,
-                  gIDEBusDriverBinding.DriverBindingHandle,
-                  ChildHandle,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (BlkIo);
-
-  //
-  // Use services available from IdeBlkIoDevice to test the IDE/ATAPI device
-  //
-  Status = gBS->AllocatePool (
-                  EfiBootServicesData,
-                  IdeBlkIoDevice->BlkMedia.BlockSize,
-                  (VOID **) &BlockBuffer
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  Status = IdeBlkIoDevice->BlkIo.ReadBlocks (
-                                  &IdeBlkIoDevice->BlkIo,
-                                  IdeBlkIoDevice->BlkMedia.MediaId,
-                                  0,
-                                  IdeBlkIoDevice->BlkMedia.BlockSize,
-                                  BlockBuffer
-                                  );
-
-  if (EFI_ERROR (Status)) {
-    *ErrorType  = &gEfiCallerIdGuid;
-    *BufferSize = sizeof (IDE_BUS_DIAGNOSTIC_ERROR);
-
-    Status = gBS->AllocatePool (
-                    EfiBootServicesData,
-                    (UINTN) (*BufferSize),
-                    (VOID **) Buffer
-                    );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    CopyMem (*Buffer, IDE_BUS_DIAGNOSTIC_ERROR, *BufferSize);
-
-    Status = EFI_DEVICE_ERROR;
-  }
-
-  gBS->FreePool (BlockBuffer);
-
-  return Status;
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.c
deleted file mode 100644
index 785aefd..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.c
+++ /dev/null
@@ -1,1400 +0,0 @@
-/* $Id: Ide.c $ */
-/** @file
- * Ide.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  The file containing the helper functions implement of the Ide Bus driver
-
-  Copyright (c) 2006 - 2008, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "IdeBus.h"
-
-BOOLEAN ChannelDeviceDetected = FALSE;
-BOOLEAN SlaveDeviceExist      = FALSE;
-UINT8   SlaveDeviceType       = INVALID_DEVICE_TYPE;
-BOOLEAN MasterDeviceExist     = FALSE;
-UINT8   MasterDeviceType      = INVALID_DEVICE_TYPE;
-
-/**
-  read a one-byte data from a IDE port.
-
-  @param  PciIo  The PCI IO protocol instance
-  @param  Port   the IDE Port number
-
-  @return  the one-byte data read from IDE port
-**/
-UINT8
-IDEReadPortB (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port
-  )
-{
-  UINT8 Data;
-
-  Data = 0;
-  //
-  // perform 1-byte data read from register
-  //
-  PciIo->Io.Read (
-              PciIo,
-              EfiPciIoWidthUint8,
-              EFI_PCI_IO_PASS_THROUGH_BAR,
-              (UINT64) Port,
-              1,
-              &Data
-              );
-  return Data;
-}
-/**
-  Reads multiple words of data from the IDE data port.
-  Call the IO abstraction once to do the complete read,
-  not one word at a time
-
-  @param  PciIo Pointer to the EFI_PCI_IO instance
-  @param  Port IO port to read
-  @param  Count No. of UINT16's to read
-  @param  Buffer Pointer to the data buffer for read
-
-**/
-VOID
-IDEReadPortWMultiple (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINTN                 Count,
-  OUT VOID                  *Buffer
-  )
-{
-  UINT16  *AlignedBuffer;
-  UINT16  *WorkingBuffer;
-  UINTN   Size;
-
-  //
-  // Prepare an 16-bit aligned working buffer. CpuIo will return failure and
-  // not perform actual I/O operations if buffer pointer passed in is not at
-  // natural boundary. The "Buffer" argument is passed in by user and may not
-  // at 16-bit natural boundary.
-  //
-  Size = sizeof (UINT16) * Count;
-
-  gBS->AllocatePool (
-        EfiBootServicesData,
-        Size + 1,
-        (VOID**)&WorkingBuffer
-        );
-
-  AlignedBuffer = (UINT16 *) ((UINTN)(((UINTN) WorkingBuffer + 0x1) & (~0x1)));
-
-  //
-  // Perform UINT16 data read from FIFO
-  //
-  PciIo->Io.Read (
-              PciIo,
-              EfiPciIoWidthFifoUint16,
-              EFI_PCI_IO_PASS_THROUGH_BAR,
-              (UINT64) Port,
-              Count,
-              (UINT16*)AlignedBuffer
-              );
-
-  //
-  // Copy data to user buffer
-  //
-  CopyMem (Buffer, (UINT16*)AlignedBuffer, Size);
-  gBS->FreePool (WorkingBuffer);
-}
-
-/**
-  write a 1-byte data to a specific IDE port.
-
-  @param  PciIo  PCI IO protocol instance
-  @param  Port   The IDE port to be writen
-  @param  Data   The data to write to the port
-**/
-VOID
-IDEWritePortB (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINT8                 Data
-  )
-{
-  //
-  // perform 1-byte data write to register
-  //
-  PciIo->Io.Write (
-              PciIo,
-              EfiPciIoWidthUint8,
-              EFI_PCI_IO_PASS_THROUGH_BAR,
-              (UINT64) Port,
-              1,
-              &Data
-              );
-
-}
-
-/**
-  write a 1-word data to a specific IDE port.
-
-  @param  PciIo  PCI IO protocol instance
-  @param  Port   The IDE port to be writen
-  @param  Data   The data to write to the port
-**/
-VOID
-IDEWritePortW (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINT16                Data
-  )
-{
-  //
-  // perform 1-word data write to register
-  //
-  PciIo->Io.Write (
-              PciIo,
-              EfiPciIoWidthUint16,
-              EFI_PCI_IO_PASS_THROUGH_BAR,
-              (UINT64) Port,
-              1,
-              &Data
-              );
-}
-
-/**
-  Write multiple words of data to the IDE data port.
-  Call the IO abstraction once to do the complete read,
-  not one word at a time
-
-  @param  PciIo Pointer to the EFI_PCI_IO instance
-  @param  Port IO port to read
-  @param  Count No. of UINT16's to read
-  @param  Buffer Pointer to the data buffer for read
-
-**/
-VOID
-IDEWritePortWMultiple (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINTN                 Count,
-  IN  VOID                  *Buffer
-  )
-{
-  UINT16  *AlignedBuffer;
-  UINT32  *WorkingBuffer;
-  UINTN   Size;
-
-  //
-  // Prepare an 16-bit aligned working buffer. CpuIo will return failure and
-  // not perform actual I/O operations if buffer pointer passed in is not at
-  // natural boundary. The "Buffer" argument is passed in by user and may not
-  // at 16-bit natural boundary.
-  //
-  Size = sizeof (UINT16) * Count;
-
-  gBS->AllocatePool (
-        EfiBootServicesData,
-        Size + 1,
-        (VOID **) &WorkingBuffer
-        );
-
-  AlignedBuffer = (UINT16 *) ((UINTN)(((UINTN) WorkingBuffer + 0x1) & (~0x1)));
-
-  //
-  // Copy data from user buffer to working buffer
-  //
-  CopyMem ((UINT16 *) AlignedBuffer, Buffer, Size);
-
-  //
-  // perform UINT16 data write to the FIFO
-  //
-  PciIo->Io.Write (
-              PciIo,
-              EfiPciIoWidthFifoUint16,
-              EFI_PCI_IO_PASS_THROUGH_BAR,
-              (UINT64) Port,
-              Count,
-              (UINT16 *) AlignedBuffer
-              );
-
-  gBS->FreePool (WorkingBuffer);
-}
-/**
-  Get IDE IO port registers' base addresses by mode. In 'Compatibility' mode,
-  use fixed addresses. In Native-PCI mode, get base addresses from BARs in
-  the PCI IDE controller's Configuration Space.
-
-  The steps to get IDE IO port registers' base addresses for each channel
-  as follows:
-
-  1. Examine the Programming Interface byte of the Class Code fields in PCI IDE
-  controller's Configuration Space to determine the operating mode.
-
-  2. a) In 'Compatibility' mode, use fixed addresses shown in the Table 1 below.
-  <pre>
-  ___________________________________________
-  |           | Command Block | Control Block |
-  |  Channel  |   Registers   |   Registers   |
-  |___________|_______________|_______________|
-  |  Primary  |  1F0h - 1F7h  |  3F6h - 3F7h  |
-  |___________|_______________|_______________|
-  | Secondary |  170h - 177h  |  376h - 377h  |
-  |___________|_______________|_______________|
-
-  Table 1. Compatibility resource mappings
-  </pre>
-
-  b) In Native-PCI mode, IDE registers are mapped into IO space using the BARs
-  in IDE controller's PCI Configuration Space, shown in the Table 2 below.
-  <pre>
-  ___________________________________________________
-  |           |   Command Block   |   Control Block   |
-  |  Channel  |     Registers     |     Registers     |
-  |___________|___________________|___________________|
-  |  Primary  | BAR at offset 0x10| BAR at offset 0x14|
-  |___________|___________________|___________________|
-  | Secondary | BAR at offset 0x18| BAR at offset 0x1C|
-  |___________|___________________|___________________|
-
-  Table 2. BARs for Register Mapping
-  </pre>
-  @note Refer to Intel ICH4 datasheet, Control Block Offset: 03F4h for
-  primary, 0374h for secondary. So 2 bytes extra offset should be
-  added to the base addresses read from BARs.
-
-  For more details, please refer to PCI IDE Controller Specification and Intel
-  ICH4 Datasheet.
-
-  @param  PciIo Pointer to the EFI_PCI_IO_PROTOCOL instance
-  @param  IdeRegsBaseAddr Pointer to IDE_REGISTERS_BASE_ADDR to
-           receive IDE IO port registers' base addresses
-
-  @retval EFI_UNSUPPORTED return this value when the BARs is not IO type
-  @retval EFI_SUCCESS     Get the Base address successfully
-  @retval other           read the pci configuration data error
-
-**/
-EFI_STATUS
-GetIdeRegistersBaseAddr (
-  IN  EFI_PCI_IO_PROTOCOL         *PciIo,
-  OUT IDE_REGISTERS_BASE_ADDR     *IdeRegsBaseAddr
-  )
-{
-  EFI_STATUS  Status;
-  PCI_TYPE00  PciData;
-  UINT8       PciClass;
-  UINT8       PciSubClass;
-  BOOLEAN     fIDEAhciEmulation = FALSE;
-
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        0,
-                        sizeof (PciData),
-                        &PciData
-                        );
-
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        PCI_CLASSCODE_OFFSET + 2,
-                        1,
-                        &PciClass
-                        );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        PCI_CLASSCODE_OFFSET + 1,
-                        1,
-                        &PciSubClass
-                        );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-  switch (PciSubClass)
-  {
-     case PCI_CLASS_MASS_STORAGE_IDE:
-        fIDEAhciEmulation = FALSE;
-        break;
-     case 0x6:
-        fIDEAhciEmulation = TRUE;
-        break;
-     default:
-        ASSERT_EFI_ERROR((EFI_UNSUPPORTED));
-        return EFI_UNSUPPORTED;
-  }
-  DEBUG((DEBUG_INFO, "class primary code: %x\n", PciData.Hdr.ClassCode[0] & IDE_PRIMARY_OPERATING_MODE));
-  DEBUG((DEBUG_INFO, "class secondary code: %x\n", PciData.Hdr.ClassCode[0] & IDE_SECONDARY_OPERATING_MODE));
-  if ((PciData.Hdr.ClassCode[0] & IDE_PRIMARY_OPERATING_MODE) == 0) {
-     IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  = fIDEAhciEmulation ? 0x1e8 : 0x1f0;
-     IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  = fIDEAhciEmulation ? 0x3e6 :0x3f6;
-  } else {
-    //
-    // The BARs should be of IO type
-    //
-    if ((PciData.Device.Bar[0] & BIT0) == 0 ||
-        (PciData.Device.Bar[1] & BIT0) == 0) {
-      return EFI_UNSUPPORTED;
-    }
-
-    IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  =
-    fIDEAhciEmulation ? 0x1e8 : (UINT16) (PciData.Device.Bar[0] & 0x0000fff8);
-    IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  =
-    fIDEAhciEmulation ? 0x3e6 :(UINT16) ((PciData.Device.Bar[1] & 0x0000fffc) + 2);
-  }
-  IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr     =
-  fIDEAhciEmulation ? 0 : (UINT16)((PciData.Device.Bar[4] & 0x0000fff0));
-
-  if ((PciData.Hdr.ClassCode[0] & IDE_SECONDARY_OPERATING_MODE) == 0) {
-    IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  = fIDEAhciEmulation ? 0x168 : 0x170;
-    IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  = fIDEAhciEmulation ? 0x366 : 0x376;
-  } else {
-    //
-    // The BARs should be of IO type
-    //
-    if ((PciData.Device.Bar[2] & BIT0) == 0 ||
-        (PciData.Device.Bar[3] & BIT0) == 0) {
-      return EFI_UNSUPPORTED;
-    }
-    IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  =
-    fIDEAhciEmulation ? 0x168 : (UINT16) (PciData.Device.Bar[2] & 0x0000fff8);
-    IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  =
-    fIDEAhciEmulation ? 0x366 : (UINT16) ((PciData.Device.Bar[3] & 0x0000fffc) + 2);
-  }
-  IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr     =
-  (UINT16) ((PciData.Device.Bar[fIDEAhciEmulation ? 5 : 4] & 0x0000fff0));
-
-  DEBUG((DEBUG_INFO, "%a:%d CommandBlockBaseAddr:%x, "
-                     "ControlBlockBaseAddr:%x, "
-                     "BusMasterBaseAddr:%x\n", __FILE__, __LINE__,
-                     IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr,
-                     IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr,
-                     IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr));
-  DEBUG((DEBUG_INFO, "%a:%d CommandBlockBaseAddr:%x, "
-                     "ControlBlockBaseAddr:%x, "
-                     "BusMasterBaseAddr:%x\n", __FILE__, __LINE__,
-                     IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr,
-                     IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr,
-                     IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr));
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used to requery IDE resources. The IDE controller will
-  probably switch between native and legacy modes during the EFI->CSM->OS
-  transfer. We do this everytime before an BlkIo operation to ensure its
-  success.
-
-  @param  IdeDev The BLK_IO private data which specifies the IDE device
-
-  @retval EFI_INVALID_PARAMETER return this value when the channel is invalid
-  @retval EFI_SUCCESS           reassign the IDE IO resource successfully
-  @retval other                 get the IDE current base address effor
-
-**/
-EFI_STATUS
-ReassignIdeResources (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  EFI_STATUS              Status;
-  IDE_REGISTERS_BASE_ADDR IdeRegsBaseAddr[IdeMaxChannel];
-  UINT16                  CommandBlockBaseAddr;
-  UINT16                  ControlBlockBaseAddr;
-
-  if (IdeDev->Channel >= IdeMaxChannel) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Requery IDE IO port registers' base addresses in case of the switch of
-  // native and legacy modes
-  //
-  Status = GetIdeRegistersBaseAddr (IdeDev->PciIo, IdeRegsBaseAddr);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  ZeroMem (IdeDev->IoPort, sizeof (IDE_BASE_REGISTERS));
-  CommandBlockBaseAddr                = IdeRegsBaseAddr[IdeDev->Channel].CommandBlockBaseAddr;
-  ControlBlockBaseAddr                = IdeRegsBaseAddr[IdeDev->Channel].ControlBlockBaseAddr;
-
-  IdeDev->IoPort->Data                = CommandBlockBaseAddr;
-  (*(UINT16 *) &IdeDev->IoPort->Reg1) = (UINT16) (CommandBlockBaseAddr + 0x01);
-  IdeDev->IoPort->SectorCount         = (UINT16) (CommandBlockBaseAddr + 0x02);
-  IdeDev->IoPort->SectorNumber        = (UINT16) (CommandBlockBaseAddr + 0x03);
-  IdeDev->IoPort->CylinderLsb         = (UINT16) (CommandBlockBaseAddr + 0x04);
-  IdeDev->IoPort->CylinderMsb         = (UINT16) (CommandBlockBaseAddr + 0x05);
-  IdeDev->IoPort->Head                = (UINT16) (CommandBlockBaseAddr + 0x06);
-
-  (*(UINT16 *) &IdeDev->IoPort->Reg)  = (UINT16) (CommandBlockBaseAddr + 0x07);
-  (*(UINT16 *) &IdeDev->IoPort->Alt)  = ControlBlockBaseAddr;
-  IdeDev->IoPort->DriveAddress        = (UINT16) (ControlBlockBaseAddr + 0x01);
-  IdeDev->IoPort->MasterSlave         = (UINT16) ((IdeDev->Device == IdeMaster) ? 1 : 0);
-
-  IdeDev->IoPort->BusMasterBaseAddr   = IdeRegsBaseAddr[IdeDev->Channel].BusMasterBaseAddr;
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is called by DiscoverIdeDevice(). It is used for detect
-  whether the IDE device exists in the specified Channel as the specified
-  Device Number.
-
-  There is two IDE channels: one is Primary Channel, the other is
-  Secondary Channel.(Channel is the logical name for the physical "Cable".)
-  Different channel has different register group.
-
-  On each IDE channel, at most two IDE devices attach,
-  one is called Device 0 (Master device), the other is called Device 1
-  (Slave device). The devices on the same channel co-use the same register
-  group, so before sending out a command for a specified device via command
-  register, it is a must to select the current device to accept the command
-  by set the device number in the Head/Device Register.
-
-  @param IdeDev  pointer to IDE_BLK_IO_DEV data structure, used to record all the
-                 information of the IDE device.
-
-  @retval EFI_SUCCESS successfully detects device.
-
-  @retval other       any failure during detection process will return this value.
-
-**/
-EFI_STATUS
-DetectIDEController (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       SectorCountReg;
-  UINT8       LBALowReg;
-  UINT8       LBAMidReg;
-  UINT8       LBAHighReg;
-  UINT8       InitStatusReg;
-  UINT8       StatusReg;
-
-  //
-  // Select slave device
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((1 << 4) | 0xe0)
-    );
-  gBS->Stall (100);
-
-  //
-  // Save the init slave status register
-  //
-  InitStatusReg = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-
-  //
-  // Select Master back
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((0 << 4) | 0xe0)
-    );
-  gBS->Stall (100);
-
-  //
-  // Send ATA Device Execut Diagnostic command.
-  // This command should work no matter DRDY is ready or not
-  //
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, 0x90);
-
-  Status    = WaitForBSYClear (IdeDev, 3500);
-  if (EFI_ERROR (Status)) {
-    DEBUG((EFI_D_ERROR, "New detecting method: Send Execute Diagnostic Command: WaitForBSYClear: Status: %d\n", Status));
-    return Status;
-  }
-  //
-  // Read device signature
-  //
-  //
-  // Select Master
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((0 << 4) | 0xe0)
-    );
-  gBS->Stall (100);
-  SectorCountReg = IDEReadPortB (
-                     IdeDev->PciIo,
-                     IdeDev->IoPort->SectorCount
-                     );
-  LBALowReg      = IDEReadPortB (
-                     IdeDev->PciIo,
-                     IdeDev->IoPort->SectorNumber
-                     );
-  LBAMidReg      = IDEReadPortB (
-                     IdeDev->PciIo,
-                     IdeDev->IoPort->CylinderLsb
-                     );
-  LBAHighReg     = IDEReadPortB (
-                     IdeDev->PciIo,
-                     IdeDev->IoPort->CylinderMsb
-                     );
-  if ((SectorCountReg == 0x1) &&
-      (LBALowReg      == 0x1) &&
-      (LBAMidReg      == 0x0) &&
-      (LBAHighReg     == 0x0)) {
-    MasterDeviceExist = TRUE;
-    MasterDeviceType  = ATA_DEVICE_TYPE;
-  } else {
-    if ((LBAMidReg      == 0x14) &&
-        (LBAHighReg     == 0xeb)) {
-      MasterDeviceExist = TRUE;
-      MasterDeviceType  = ATAPI_DEVICE_TYPE;
-    }
-  }
-
-  //
-  // For some Hard Drive, it takes some time to get
-  // the right signature when operating in single slave mode.
-  // We stall 20ms to work around this.
-  //
-  if (!MasterDeviceExist) {
-    gBS->Stall (20000);
-  }
-
-  //
-  // Select Slave
-  //
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    (UINT8) ((1 << 4) | 0xe0)
-    );
-  gBS->Stall (100);
-  SectorCountReg = IDEReadPortB (
-                     IdeDev->PciIo,
-                     IdeDev->IoPort->SectorCount
-                     );
-  LBALowReg  = IDEReadPortB (
-                 IdeDev->PciIo,
-                 IdeDev->IoPort->SectorNumber
-                 );
-  LBAMidReg  = IDEReadPortB (
-                 IdeDev->PciIo,
-                 IdeDev->IoPort->CylinderLsb
-                 );
-  LBAHighReg = IDEReadPortB (
-                 IdeDev->PciIo,
-                 IdeDev->IoPort->CylinderMsb
-                 );
-  StatusReg  = IDEReadPortB (
-                 IdeDev->PciIo,
-                 IdeDev->IoPort->Reg.Status
-                 );
-  if ((SectorCountReg == 0x1) &&
-      (LBALowReg      == 0x1) &&
-      (LBAMidReg      == 0x0) &&
-      (LBAHighReg     == 0x0)) {
-    SlaveDeviceExist = TRUE;
-    SlaveDeviceType  = ATA_DEVICE_TYPE;
-  } else {
-    if ((LBAMidReg     == 0x14) &&
-        (LBAHighReg    == 0xeb)) {
-      SlaveDeviceExist = TRUE;
-      SlaveDeviceType  = ATAPI_DEVICE_TYPE;
-    }
-  }
-
-  //
-  // When single master is plugged, slave device
-  // will be wrongly detected. Here's the workaround
-  // for ATA devices by detecting DRY bit in status
-  // register.
-  // NOTE: This workaround doesn't apply to ATAPI.
-  //
-  if (MasterDeviceExist && SlaveDeviceExist &&
-      (StatusReg & ATA_STSREG_DRDY) == 0               &&
-      (InitStatusReg & ATA_STSREG_DRDY) == 0           &&
-      MasterDeviceType == SlaveDeviceType   &&
-      SlaveDeviceType != ATAPI_DEVICE_TYPE) {
-    SlaveDeviceExist = FALSE;
-  }
-
-  //
-  // Indicate this channel has been detected
-  //
-  ChannelDeviceDetected = TRUE;
-  return EFI_SUCCESS;
-}
-/**
-  Detect if there is disk attached to this port
-
-  @param  IdeDev The BLK_IO private data which specifies the IDE device.
-
-  @retval EFI_NOT_FOUND   The device or channel is not found
-  @retval EFI_SUCCESS     The device is found
-
-**/
-EFI_STATUS
-DiscoverIdeDevice (
-  IN IDE_BLK_IO_DEV *IdeDev
-  )
-{
-  EFI_STATUS  Status;
-  EFI_STATUS  LongPhyStatus;
-
-  //
-  // If a channel has not been checked, check it now. Then set it to "checked" state
-  // After this step, all devices in this channel have been checked.
-  //
-  if (!ChannelDeviceDetected) {
-    Status = DetectIDEController (IdeDev);
-    if (EFI_ERROR (Status)) {
-      return EFI_NOT_FOUND;
-    }
-  }
-
-  Status = EFI_NOT_FOUND;
-
-  //
-  // Device exists. test if it is an ATA device.
-  // Prefer the result from DetectIDEController,
-  // if failed, try another device type to handle
-  // devices that not follow the spec.
-  //
-  if ((IdeDev->Device == IdeMaster) && (MasterDeviceExist)) {
-    if (MasterDeviceType == ATA_DEVICE_TYPE) {
-      Status = ATAIdentify (IdeDev);
-      if (EFI_ERROR (Status)) {
-        Status = ATAPIIdentify (IdeDev);
-        if (!EFI_ERROR (Status)) {
-          MasterDeviceType = ATAPI_DEVICE_TYPE;
-        }
-      }
-    } else {
-      Status = ATAPIIdentify (IdeDev);
-      if (EFI_ERROR (Status)) {
-        Status = ATAIdentify (IdeDev);
-        if (!EFI_ERROR (Status)) {
-          MasterDeviceType = ATA_DEVICE_TYPE;
-        }
-      }
-    }
-  }
-  if ((IdeDev->Device == IdeSlave) && (SlaveDeviceExist)) {
-    if (SlaveDeviceType == ATA_DEVICE_TYPE) {
-      Status = ATAIdentify (IdeDev);
-      if (EFI_ERROR (Status)) {
-        Status = ATAPIIdentify (IdeDev);
-        if (!EFI_ERROR (Status)) {
-          SlaveDeviceType = ATAPI_DEVICE_TYPE;
-        }
-      }
-    } else {
-      Status = ATAPIIdentify (IdeDev);
-      if (EFI_ERROR (Status)) {
-        Status = ATAIdentify (IdeDev);
-        if (!EFI_ERROR (Status)) {
-          SlaveDeviceType = ATA_DEVICE_TYPE;
-        }
-      }
-    }
-  }
-  if (EFI_ERROR (Status)) {
-    return EFI_NOT_FOUND;
-  }
-  //
-  // Init Block I/O interface
-  //
-  LongPhyStatus = AtaEnableLongPhysicalSector (IdeDev);
-  if (!EFI_ERROR (LongPhyStatus)) {
-    IdeDev->BlkIo.Revision = EFI_BLOCK_IO_PROTOCOL_REVISION2;
-  } else {
-    IdeDev->BlkIo.Revision = EFI_BLOCK_IO_PROTOCOL_REVISION;
-  }
-  IdeDev->BlkIo.Reset               = IDEBlkIoReset;
-  IdeDev->BlkIo.ReadBlocks          = IDEBlkIoReadBlocks;
-  IdeDev->BlkIo.WriteBlocks         = IDEBlkIoWriteBlocks;
-  IdeDev->BlkIo.FlushBlocks         = IDEBlkIoFlushBlocks;
-
-  IdeDev->BlkMedia.LogicalPartition = FALSE;
-  IdeDev->BlkMedia.WriteCaching     = FALSE;
-
-  //
-  // Init Disk Info interface
-  //
-  gBS->CopyMem (&IdeDev->DiskInfo.Interface, &gEfiDiskInfoIdeInterfaceGuid, sizeof (EFI_GUID));
-  IdeDev->DiskInfo.Inquiry    = IDEDiskInfoInquiry;
-  IdeDev->DiskInfo.Identify   = IDEDiskInfoIdentify;
-  IdeDev->DiskInfo.SenseData  = IDEDiskInfoSenseData;
-  IdeDev->DiskInfo.WhichIde   = IDEDiskInfoWhichIde;
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This interface is used to initialize all state data related to the detection of one
-  channel.
-**/
-VOID
-InitializeIDEChannelData (
-  VOID
-  )
-{
-  ChannelDeviceDetected = FALSE;
-  MasterDeviceExist = FALSE;
-  MasterDeviceType  = 0xff;
-  SlaveDeviceExist  = FALSE;
-  SlaveDeviceType   = 0xff;
-}
-/**
-  This function is used to poll for the DRQ bit clear in the Status
-  Register. DRQ is cleared when the device is finished transferring data.
-  So this function is called after data transfer is finished.
-
-  @param IdeDev                 pointer pointing to IDE_BLK_IO_DEV data structure, used
-                                to record all the information of the IDE device.
-  @param TimeoutInMilliSeconds  used to designate the timeout for the DRQ clear.
-
-  @retval EFI_SUCCESS           DRQ bit clear within the time out.
-
-  @retval EFI_TIMEOUT           DRQ bit not clear within the time out.
-
-  @note
-  Read Status Register will clear interrupt status.
-
-**/
-EFI_STATUS
-DRQClear (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   StatusRegister;
-  UINT8   ErrorRegister;
-
-  Delay = (UINT32) (((TimeoutInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-
-    StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-
-    //
-    // wait for BSY == 0 and DRQ == 0
-    //
-    if ((StatusRegister & (ATA_STSREG_DRQ | ATA_STSREG_BSY)) == 0) {
-      break;
-    }
-
-    if ((StatusRegister & (ATA_STSREG_BSY | ATA_STSREG_ERR)) == ATA_STSREG_ERR) {
-
-      ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-      if ((ErrorRegister & ATA_ERRREG_ABRT) == ATA_ERRREG_ABRT) {
-        return EFI_ABORTED;
-      }
-    }
-
-    //
-    //  Stall for 30 us
-    //
-    gBS->Stall (30);
-
-    Delay--;
-
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to poll for the DRQ bit clear in the Alternate
-  Status Register. DRQ is cleared when the device is finished
-  transferring data. So this function is called after data transfer
-  is finished.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure, used
-                               to record all the information of the IDE device.
-
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ clear.
-
-  @retval EFI_SUCCESS          DRQ bit clear within the time out.
-
-  @retval EFI_TIMEOUT          DRQ bit not clear within the time out.
-  @note   Read Alternate Status Register will not clear interrupt status.
-
-**/
-EFI_STATUS
-DRQClear2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   AltRegister;
-  UINT8   ErrorRegister;
-
-  Delay = (UINT32) (((TimeoutInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-
-    AltRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Alt.AltStatus);
-
-    //
-    //  wait for BSY == 0 and DRQ == 0
-    //
-    if ((AltRegister & (ATA_STSREG_DRQ | ATA_STSREG_BSY)) == 0) {
-      break;
-    }
-
-    if ((AltRegister & (ATA_STSREG_BSY | ATA_STSREG_ERR)) == ATA_STSREG_ERR) {
-
-      ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-      if ((ErrorRegister & ATA_ERRREG_ABRT) == ATA_ERRREG_ABRT) {
-        return EFI_ABORTED;
-      }
-    }
-
-    //
-    // Stall for 30 us
-    //
-    gBS->Stall (30);
-
-    Delay--;
-
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used to poll for the DRQ bit set in the
-  Status Register.
-  DRQ is set when the device is ready to transfer data. So this function
-  is called after the command is sent to the device and before required
-  data is transferred.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure,used to
-                               record all the information of the IDE device.
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS          DRQ bit set within the time out.
-  @retval EFI_TIMEOUT          DRQ bit not set within the time out.
-  @retval EFI_ABORTED          DRQ bit not set caused by the command abort.
-
-  @note  Read Status Register will clear interrupt status.
-
-**/
-EFI_STATUS
-DRQReady (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   StatusRegister;
-  UINT8   ErrorRegister;
-
-  Delay = (UINT32) (((TimeoutInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-    //
-    //  read Status Register will clear interrupt
-    //
-    StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-
-    //
-    //  BSY==0,DRQ==1
-    //
-    if ((StatusRegister & (ATA_STSREG_BSY | ATA_STSREG_DRQ)) == ATA_STSREG_DRQ) {
-      break;
-    }
-
-    if ((StatusRegister & (ATA_STSREG_BSY | ATA_STSREG_ERR)) == ATA_STSREG_ERR) {
-
-      ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-      if ((ErrorRegister & ATA_ERRREG_ABRT) == ATA_ERRREG_ABRT) {
-        return EFI_ABORTED;
-      }
-    }
-
-    //
-    // Stall for 30 us
-    //
-    gBS->Stall (30);
-
-    Delay--;
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to poll for the DRQ bit set in the Alternate Status Register.
-  DRQ is set when the device is ready to transfer data. So this function is called after
-  the command is sent to the device and before required data is transferred.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure, used to
-                               record all the information of the IDE device.
-
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS           DRQ bit set within the time out.
-  @retval EFI_TIMEOUT           DRQ bit not set within the time out.
-  @retval EFI_ABORTED           DRQ bit not set caused by the command abort.
-  @note  Read Alternate Status Register will not clear interrupt status.
-
-**/
-EFI_STATUS
-DRQReady2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   AltRegister;
-  UINT8   ErrorRegister;
-
-  Delay = (UINT32) (((TimeoutInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-
-  do {
-    //
-    //  Read Alternate Status Register will not clear interrupt status
-    //
-    AltRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Alt.AltStatus);
-    //
-    // BSY == 0 , DRQ == 1
-    //
-    if ((AltRegister & (ATA_STSREG_BSY | ATA_STSREG_DRQ)) == ATA_STSREG_DRQ) {
-      break;
-    }
-
-    if ((AltRegister & (ATA_STSREG_BSY | ATA_STSREG_ERR)) == ATA_STSREG_ERR) {
-
-      ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-      if ((ErrorRegister & ATA_ERRREG_ABRT) == ATA_ERRREG_ABRT) {
-        return EFI_ABORTED;
-      }
-    }
-
-    //
-    // Stall for 30 us
-    //
-    gBS->Stall (30);
-
-    Delay--;
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used to poll for the BSY bit clear in the Status Register. BSY
-  is clear when the device is not busy. Every command must be sent after device is not busy.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure, used
-                               to record all the information of the IDE device.
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS          BSY bit clear within the time out.
-  @retval EFI_TIMEOUT          BSY bit not clear within the time out.
-
-  @note Read Status Register will clear interrupt status.
-**/
-EFI_STATUS
-WaitForBSYClear (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   StatusRegister;
-
-  Delay = (UINT32) (((TimeoutInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-
-    StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-    if ((StatusRegister & ATA_STSREG_BSY) == 0x00) {
-      break;
-    }
-
-    //
-    // Stall for 30 us
-    //
-    gBS->Stall (30);
-
-    Delay--;
-
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to poll for the BSY bit clear in the Alternate Status Register.
-  BSY is clear when the device is not busy. Every command must be sent after device is
-  not busy.
-
-  @param IdeDev               pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                              all the information of the IDE device.
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS         BSY bit clear within the time out.
-  @retval EFI_TIMEOUT         BSY bit not clear within the time out.
-  @note   Read Alternate Status Register will not clear interrupt status.
-
-**/
-EFI_STATUS
-WaitForBSYClear2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   AltRegister;
-
-  Delay = (UINT32) (((TimeoutInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-    AltRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Alt.AltStatus);
-    if ((AltRegister & ATA_STSREG_BSY) == 0x00) {
-      break;
-    }
-
-    gBS->Stall (30);
-
-    Delay--;
-
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to poll for the DRDY bit set in the Status Register. DRDY
-  bit is set when the device is ready to accept command. Most ATA commands must be
-  sent after DRDY set except the ATAPI Packet Command.
-
-  @param IdeDev               pointer pointing to IDE_BLK_IO_DEV data structure, used
-                              to record all the information of the IDE device.
-  @param DelayInMilliSeconds  used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS         DRDY bit set within the time out.
-  @retval EFI_TIMEOUT         DRDY bit not set within the time out.
-
-  @note  Read Status Register will clear interrupt status.
-**/
-EFI_STATUS
-DRDYReady (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           DelayInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   StatusRegister;
-  UINT8   ErrorRegister;
-
-  Delay = (UINT32) (((DelayInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-    StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);
-    //
-    //  BSY == 0 , DRDY == 1
-    //
-    if ((StatusRegister & (ATA_STSREG_DRDY | ATA_STSREG_BSY)) == ATA_STSREG_DRDY) {
-      break;
-    }
-
-    if ((StatusRegister & (ATA_STSREG_BSY | ATA_STSREG_ERR)) == ATA_STSREG_ERR) {
-
-      ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-      if ((ErrorRegister & ATA_ERRREG_ABRT) == ATA_ERRREG_ABRT) {
-        return EFI_ABORTED;
-      }
-    }
-
-    gBS->Stall (30);
-
-    Delay--;
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  This function is used to poll for the DRDY bit set in the Alternate Status Register.
-  DRDY bit is set when the device is ready to accept command. Most ATA commands must
-  be sent after DRDY set except the ATAPI Packet Command.
-
-  @param IdeDev              pointer pointing to IDE_BLK_IO_DEV data structure, used
-                             to record all the information of the IDE device.
-  @param DelayInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS      DRDY bit set within the time out.
-  @retval EFI_TIMEOUT      DRDY bit not set within the time out.
-
-  @note  Read Alternate Status Register will clear interrupt status.
-
-**/
-EFI_STATUS
-DRDYReady2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           DelayInMilliSeconds
-  )
-{
-  UINT32  Delay;
-  UINT8   AltRegister;
-  UINT8   ErrorRegister;
-
-  Delay = (UINT32) (((DelayInMilliSeconds * STALL_1_MILLI_SECOND) / 30) + 1);
-  do {
-    AltRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Alt.AltStatus);
-    //
-    //  BSY == 0 , DRDY == 1
-    //
-    if ((AltRegister & (ATA_STSREG_DRDY | ATA_STSREG_BSY)) == ATA_STSREG_DRDY) {
-      break;
-    }
-
-    if ((AltRegister & (ATA_STSREG_BSY | ATA_STSREG_ERR)) == ATA_STSREG_ERR) {
-
-      ErrorRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Error);
-      if ((ErrorRegister & ATA_ERRREG_ABRT) == ATA_ERRREG_ABRT) {
-        return EFI_ABORTED;
-      }
-    }
-
-    gBS->Stall (30);
-
-    Delay--;
-  } while (Delay > 0);
-
-  if (Delay == 0) {
-    return EFI_TIMEOUT;
-  }
-
-  return EFI_SUCCESS;
-}
-/**
-  Release resources of an IDE device before stopping it.
-
-  @param IdeBlkIoDevice  Standard IDE device private data structure
-
-**/
-VOID
-ReleaseIdeResources (
-  IN  IDE_BLK_IO_DEV  *IdeBlkIoDevice
-  )
-{
-  if (IdeBlkIoDevice == NULL) {
-    return ;
-  }
-
-  //
-  // Release all the resources occupied by the IDE_BLK_IO_DEV
-  //
-
-  if (IdeBlkIoDevice->SenseData != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->SenseData);
-    IdeBlkIoDevice->SenseData = NULL;
-  }
-
-  if (IdeBlkIoDevice->Cache != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->Cache);
-    IdeBlkIoDevice->Cache = NULL;
-  }
-
-  if (IdeBlkIoDevice->IdData != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->IdData);
-    IdeBlkIoDevice->IdData = NULL;
-  }
-
-  if (IdeBlkIoDevice->InquiryData != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->InquiryData);
-    IdeBlkIoDevice->InquiryData = NULL;
-  }
-
-  if (IdeBlkIoDevice->ControllerNameTable != NULL) {
-    FreeUnicodeStringTable (IdeBlkIoDevice->ControllerNameTable);
-    IdeBlkIoDevice->ControllerNameTable = NULL;
-  }
-
-  if (IdeBlkIoDevice->IoPort != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->IoPort);
-  }
-
-  if (IdeBlkIoDevice->DevicePath != NULL) {
-    gBS->FreePool (IdeBlkIoDevice->DevicePath);
-  }
-
-  if (IdeBlkIoDevice->ExitBootServiceEvent != NULL) {
-    gBS->CloseEvent (IdeBlkIoDevice->ExitBootServiceEvent);
-    IdeBlkIoDevice->ExitBootServiceEvent = NULL;
-  }
-
-  gBS->FreePool (IdeBlkIoDevice);
-  IdeBlkIoDevice = NULL;
-
-  return ;
-}
-/**
-  Set the calculated Best transfer mode to a detected device.
-
-  @param IdeDev       Standard IDE device private data structure
-  @param TransferMode The device transfer mode to be set
-  @return Set transfer mode Command execute status.
-
-**/
-EFI_STATUS
-SetDeviceTransferMode (
-  IN IDE_BLK_IO_DEV       *IdeDev,
-  IN ATA_TRANSFER_MODE    *TransferMode
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       DeviceSelect;
-  UINT8       SectorCount;
-
-  DeviceSelect  = 0;
-  DeviceSelect  = (UINT8) ((IdeDev->Device) << 4);
-  SectorCount   = *((UINT8 *) TransferMode);
-
-  //
-  // Send SET FEATURE command (sub command 0x03) to set pio mode.
-  //
-  Status = AtaNonDataCommandIn (
-            IdeDev,
-            ATA_CMD_SET_FEATURES,
-            DeviceSelect,
-            0x03,
-            SectorCount,
-            0,
-            0,
-            0
-            );
-
-  return Status;
-}
-/**
-  Set drive parameters for devices not support PACKETS command.
-
-  @param IdeDev          Standard IDE device private data structure
-  @param DriveParameters The device parameters to be set into the disk
-  @return SetParameters Command execute status.
-
-**/
-EFI_STATUS
-SetDriveParameters (
-  IN IDE_BLK_IO_DEV       *IdeDev,
-  IN ATA_DRIVE_PARMS      *DriveParameters
-  )
-{
-  EFI_STATUS  Status;
-  UINT8       DeviceSelect;
-
-  DeviceSelect  = 0;
-  DeviceSelect  = (UINT8) ((IdeDev->Device) << 4);
-
-  //
-  // Send Init drive parameters
-  //
-  Status = AtaNonDataCommandIn (
-            IdeDev,
-            ATA_CMD_INIT_DRIVE_PARAM,
-            (UINT8) (DeviceSelect + DriveParameters->Heads),
-            0,
-            DriveParameters->Sector,
-            0,
-            0,
-            0
-            );
-
-  //
-  // Send Set Multiple parameters
-  //
-  Status = AtaNonDataCommandIn (
-            IdeDev,
-            ATA_CMD_SET_MULTIPLE_MODE,
-            DeviceSelect,
-            0,
-            DriveParameters->MultipleSector,
-            0,
-            0,
-            0
-            );
-  return Status;
-}
-
-/**
-  Enable Interrupt on IDE controller.
-
-  @param  IdeDev   Standard IDE device private data structure
-
-  @retval  EFI_SUCCESS Enable Interrupt successfully
-**/
-EFI_STATUS
-EnableInterrupt (
-  IN IDE_BLK_IO_DEV       *IdeDev
-  )
-{
-  UINT8 DeviceControl;
-
-  //
-  // Enable interrupt for DMA operation
-  //
-  DeviceControl = 0;
-  IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Alt.DeviceControl, DeviceControl);
-
-  return EFI_SUCCESS;
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.h
deleted file mode 100644
index 9bba746..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/Ide.h
+++ /dev/null
@@ -1,861 +0,0 @@
-/* $Id: Ide.h $ */
-/** @file
- * Ide.h
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  Header file for IDE Bus Driver, containing the helper functions'
-  prototype.
-
-  Copyright (c) 2006 - 2007 Intel Corporation. <BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-  @par Revision Reference:
-  2002-6: Add Atapi6 enhancement, support >120GB hard disk, including
-  Add - IDEBlkIoReadBlocksExt() func definition
-  Add - IDEBlkIoWriteBlocksExt() func definition
-
-**/
-
-#ifndef _IDE_H_
-#define _IDE_H_
-
-//
-// Helper functions Prototype
-//
-/**
-  read a one-byte data from a IDE port.
-
-  @param  PciIo  The PCI IO protocol instance
-  @param  Port   the IDE Port number
-
-  return  the one-byte data read from IDE port
-**/
-UINT8
-IDEReadPortB (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port
-  );
-
-/**
-  Reads multiple words of data from the IDE data port.
-  Call the IO abstraction once to do the complete read,
-  not one word at a time.
-
-  @param  PciIo Pointer to the EFI_PCI_IO instance
-  @param  Port IO port to read
-  @param  Count No. of UINT16's to read
-  @param  Buffer Pointer to the data buffer for read
-
-**/
-VOID
-IDEReadPortWMultiple (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINTN                 Count,
-  OUT  VOID                 *Buffer
-  );
-
-/**
-  write a 1-byte data to a specific IDE port.
-
-  @param  PciIo  PCI IO protocol instance
-  @param  Port   The IDE port to be writen
-  @param  Data   The data to write to the port
-**/
-VOID
-IDEWritePortB (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINT8                 Data
-  );
-
-/**
-  write a 1-word data to a specific IDE port.
-
-  @param  PciIo  PCI IO protocol instance
-  @param  Port   The IDE port to be writen
-  @param  Data   The data to write to the port
-**/
-VOID
-IDEWritePortW (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINT16                Data
-  );
-
-/**
-  Write multiple words of data to the IDE data port.
-  Call the IO abstraction once to do the complete read,
-  not one word at a time.
-
-  @param  PciIo Pointer to the EFI_PCI_IO instance
-  @param  Port IO port to read
-  @param  Count No. of UINT16's to read
-  @param  Buffer Pointer to the data buffer for read
-
-**/
-VOID
-IDEWritePortWMultiple (
-  IN  EFI_PCI_IO_PROTOCOL   *PciIo,
-  IN  UINT16                Port,
-  IN  UINTN                 Count,
-  IN  VOID                  *Buffer
-  );
-
-/**
-  Get IDE IO port registers' base addresses by mode. In 'Compatibility' mode,
-  use fixed addresses. In Native-PCI mode, get base addresses from BARs in
-  the PCI IDE controller's Configuration Space.
-
-  The steps to get IDE IO port registers' base addresses for each channel
-  as follows:
-
-  1. Examine the Programming Interface byte of the Class Code fields in PCI IDE
-  controller's Configuration Space to determine the operating mode.
-
-  2. a) In 'Compatibility' mode, use fixed addresses shown in the Table 1 below.
-  <pre>
-  ___________________________________________
-  |           | Command Block | Control Block |
-  |  Channel  |   Registers   |   Registers   |
-  |___________|_______________|_______________|
-  |  Primary  |  1F0h - 1F7h  |  3F6h - 3F7h  |
-  |___________|_______________|_______________|
-  | Secondary |  170h - 177h  |  376h - 377h  |
-  |___________|_______________|_______________|
-
-  Table 1. Compatibility resource mappings
-  </pre>
-
-  b) In Native-PCI mode, IDE registers are mapped into IO space using the BARs
-  in IDE controller's PCI Configuration Space, shown in the Table 2 below.
-  <pre>
-  ___________________________________________________
-  |           |   Command Block   |   Control Block   |
-  |  Channel  |     Registers     |     Registers     |
-  |___________|___________________|___________________|
-  |  Primary  | BAR at offset 0x10| BAR at offset 0x14|
-  |___________|___________________|___________________|
-  | Secondary | BAR at offset 0x18| BAR at offset 0x1C|
-  |___________|___________________|___________________|
-
-  Table 2. BARs for Register Mapping
-  </pre>
-  @note Refer to Intel ICH4 datasheet, Control Block Offset: 03F4h for
-  primary, 0374h for secondary. So 2 bytes extra offset should be
-  added to the base addresses read from BARs.
-
-  For more details, please refer to PCI IDE Controller Specification and Intel
-  ICH4 Datasheet.
-
-  @param  PciIo Pointer to the EFI_PCI_IO_PROTOCOL instance
-  @param  IdeRegsBaseAddr Pointer to IDE_REGISTERS_BASE_ADDR to
-          receive IDE IO port registers' base addresses
-
-  @retval EFI_UNSUPPORTED return this value when the BARs is not IO type
-  @retval EFI_SUCCESS     Get the Base address successfully
-  @retval other           read the pci configuration data error
-
-**/
-EFI_STATUS
-GetIdeRegistersBaseAddr (
-  IN  EFI_PCI_IO_PROTOCOL         *PciIo,
-  OUT IDE_REGISTERS_BASE_ADDR     *IdeRegsBaseAddr
-  );
-
-/**
-  This function is used to requery IDE resources. The IDE controller will
-  probably switch between native and legacy modes during the EFI->CSM->OS
-  transfer. We do this everytime before an BlkIo operation to ensure its
-  success.
-
-  @param  IdeDev The BLK_IO private data which specifies the IDE device
-
-  @retval EFI_INVALID_PARAMETER return this value when the channel is invalid
-  @retval EFI_SUCCESS           reassign the IDE IO resource successfully
-  @retval other                 get the IDE current base address effor
-
-**/
-EFI_STATUS
-ReassignIdeResources (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  Detect if there is disk attached to this port.
-
-  @param  IdeDev The BLK_IO private data which specifies the IDE device.
-
-  @retval EFI_NOT_FOUND   The device or channel is not found
-  @retval EFI_SUCCESS     The device is found
-
-**/
-EFI_STATUS
-DiscoverIdeDevice (
-  IN IDE_BLK_IO_DEV *IdeDev
-  );
-
-/**
-  This interface is used to initialize all state data related to the
-  detection of one channel.
-
-**/
-VOID
-InitializeIDEChannelData (
-  VOID
-  );
-
-/**
-  This function is used to poll for the DRQ bit clear in the Status
-  Register. DRQ is cleared when the device is finished transferring data.
-  So this function is called after data transfer is finished.
-
-  @param IdeDev                 pointer pointing to IDE_BLK_IO_DEV data structure, used
-                                to record all the information of the IDE device.
-  @param TimeoutInMilliSeconds  used to designate the timeout for the DRQ clear.
-
-  @retval EFI_SUCCESS           DRQ bit clear within the time out.
-
-  @retval EFI_TIMEOUT           DRQ bit not clear within the time out.
-
-  @note
-  Read Status Register will clear interrupt status.
-
-**/
-EFI_STATUS
-DRQClear (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the DRQ bit clear in the Alternate
-  Status Register. DRQ is cleared when the device is finished
-  transferring data. So this function is called after data transfer
-  is finished.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure, used
-                               to record all the information of the IDE device.
-
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ clear.
-
-  @retval EFI_SUCCESS          DRQ bit clear within the time out.
-
-  @retval EFI_TIMEOUT          DRQ bit not clear within the time out.
-  @note
-  Read Alternate Status Register will not clear interrupt status.
-
-**/
-EFI_STATUS
-DRQClear2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the DRQ bit set in the
-  Status Register.
-  DRQ is set when the device is ready to transfer data. So this function
-  is called after the command is sent to the device and before required
-  data is transferred.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure,used to
-                               record all the information of the IDE device.
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS          DRQ bit set within the time out.
-  @retval EFI_TIMEOUT          DRQ bit not set within the time out.
-  @retval EFI_ABORTED          DRQ bit not set caused by the command abort.
-
-  @note  Read Status Register will clear interrupt status.
-
-**/
-EFI_STATUS
-DRQReady (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the DRQ bit set in the Alternate Status Register.
-  DRQ is set when the device is ready to transfer data. So this function is called after
-  the command is sent to the device and before required data is transferred.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure, used to
-                               record all the information of the IDE device.
-
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS           DRQ bit set within the time out.
-  @retval EFI_TIMEOUT           DRQ bit not set within the time out.
-  @retval EFI_ABORTED           DRQ bit not set caused by the command abort.
-  @note  Read Alternate Status Register will not clear interrupt status.
-
-**/
-EFI_STATUS
-DRQReady2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the BSY bit clear in the Status Register. BSY
-  is clear when the device is not busy. Every command must be sent after device is not busy.
-
-  @param IdeDev                pointer pointing to IDE_BLK_IO_DEV data structure, used
-                               to record all the information of the IDE device.
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS          BSY bit clear within the time out.
-  @retval EFI_TIMEOUT          BSY bit not clear within the time out.
-
-  @note Read Status Register will clear interrupt status.
-**/
-EFI_STATUS
-WaitForBSYClear (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the BSY bit clear in the Alternate Status Register.
-  BSY is clear when the device is not busy. Every command must be sent after device is
-  not busy.
-
-  @param IdeDev               pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                              all the information of the IDE device.
-  @param TimeoutInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS         BSY bit clear within the time out.
-  @retval EFI_TIMEOUT         BSY bit not clear within the time out.
-  @note   Read Alternate Status Register will not clear interrupt status.
-
-**/
-EFI_STATUS
-WaitForBSYClear2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           TimeoutInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the DRDY bit set in the Status Register. DRDY
-  bit is set when the device is ready to accept command. Most ATA commands must be
-  sent after DRDY set except the ATAPI Packet Command.
-
-  @param IdeDev               pointer pointing to IDE_BLK_IO_DEV data structure, used
-                              to record all the information of the IDE device.
-  @param DelayInMilliSeconds  used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS         DRDY bit set within the time out.
-  @retval EFI_TIMEOUT         DRDY bit not set within the time out.
-
-  @note  Read Status Register will clear interrupt status.
-**/
-EFI_STATUS
-DRDYReady (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           DelayInMilliSeconds
-  );
-
-/**
-  This function is used to poll for the DRDY bit set in the Alternate Status Register.
-  DRDY bit is set when the device is ready to accept command. Most ATA commands must
-  be sent after DRDY set except the ATAPI Packet Command.
-
-  @param IdeDev              pointer pointing to IDE_BLK_IO_DEV data structure, used
-                             to record all the information of the IDE device.
-  @param DelayInMilliSeconds used to designate the timeout for the DRQ ready.
-
-  @retval EFI_SUCCESS      DRDY bit set within the time out.
-  @retval EFI_TIMEOUT      DRDY bit not set within the time out.
-
-  @note  Read Alternate Status Register will clear interrupt status.
-
-**/
-EFI_STATUS
-DRDYReady2 (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINTN           DelayInMilliSeconds
-  );
-
-//
-//  ATA device functions' prototype
-//
-/**
-  Sends out an ATA Identify Command to the specified device.
-
-  This function is called by DiscoverIdeDevice() during its device
-  identification. It sends out the ATA Identify Command to the
-  specified device. Only ATA device responses to this command. If
-  the command succeeds, it returns the Identify data structure which
-  contains information about the device. This function extracts the
-  information it needs to fill the IDE_BLK_IO_DEV data structure,
-  including device type, media block size, media capacity, and etc.
-
-  @param IdeDev  pointer pointing to IDE_BLK_IO_DEV data structure,used to record
-                 all the information of the IDE device.
-
-  @retval EFI_SUCCESS      Identify ATA device successfully.
-  @retval EFI_DEVICE_ERROR ATA Identify Device Command failed or device is not ATA device.
-  @note  parameter IdeDev will be updated in this function.
-
-**/
-EFI_STATUS
-ATAIdentify (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  This function is called by ATAIdentify() or ATAPIIdentify() to print device's module name.
-
-  @param  IdeDev   pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                   all the information of the IDE device.
-**/
-VOID
-PrintAtaModuleName (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-/**
-  This function is used to send out ATA commands conforms to the PIO Data In Protocol.
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                      all the information of the IDE device.
-  @param Buffer       buffer contained data transferred from device to host.
-  @param ByteCount    data size in byte unit of the buffer.
-  @param AtaCommand   value of the Command Register
-  @param Head         value of the Head/Device Register
-  @param SectorCount  value of the Sector Count Register
-  @param SectorNumber value of the Sector Number Register
-  @param CylinderLsb  value of the low byte of the Cylinder Register
-  @param CylinderMsb  value of the high byte of the Cylinder Register
-
-  @retval EFI_SUCCESS      send out the ATA command and device send required data successfully.
-  @retval EFI_DEVICE_ERROR command sent failed.
-
-**/
-EFI_STATUS
-AtaPioDataIn (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  UINT32          ByteCount,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Head,
-  IN  UINT8           SectorCount,
-  IN  UINT8           SectorNumber,
-  IN  UINT8           CylinderLsb,
-  IN  UINT8           CylinderMsb
-  );
-
-/**
-  This function is used to send out ATA commands conforms to the
-  PIO Data Out Protocol.
-
-  @param IdeDev       pointer pointing to IDE_BLK_IO_DEV data structure, used
-                      to record all the information of the IDE device.
-  @param *Buffer      buffer contained data transferred from host to device.
-  @param ByteCount    data size in byte unit of the buffer.
-  @param AtaCommand   value of the Command Register
-  @param Head         value of the Head/Device Register
-  @param SectorCount  value of the Sector Count Register
-  @param SectorNumber value of the Sector Number Register
-  @param CylinderLsb  value of the low byte of the Cylinder Register
-  @param CylinderMsb  value of the high byte of the Cylinder Register
-
-  @retval EFI_SUCCESS      send out the ATA command and device received required
-                           data successfully.
-  @retval EFI_DEVICE_ERROR command sent failed.
-
-**/
-EFI_STATUS
-AtaPioDataOut (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  VOID            *Buffer,
-  IN  UINT32          ByteCount,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Head,
-  IN  UINT8           SectorCount,
-  IN  UINT8           SectorNumber,
-  IN  UINT8           CylinderLsb,
-  IN  UINT8           CylinderMsb
-  );
-
-/**
-  This function is used to analyze the Status Register and print out
-  some debug information and if there is ERR bit set in the Status
-  Register, the Error Register's value is also be parsed and print out.
-
-  @param IdeDev  pointer pointing to IDE_BLK_IO_DEV data structure, used to
-                 record all the information of the IDE device.
-
-  @retval EFI_SUCCESS       No err information in the Status Register.
-  @retval EFI_DEVICE_ERROR  Any err information in the Status Register.
-
-**/
-EFI_STATUS
-CheckErrorStatus (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  This function is used to implement the Soft Reset on the specified device. But,
-  the ATA Soft Reset mechanism is so strong a reset method that it will force
-  resetting on both devices connected to the same cable.
-
-  It is called by IdeBlkIoReset(), a interface function of Block
-  I/O protocol.
-
-  This function can also be used by the ATAPI device to perform reset when
-  ATAPI Reset command is failed.
-
-  @param IdeDev  pointer pointing to IDE_BLK_IO_DEV data structure, used to record
-                 all the information of the IDE device.
-  @retval EFI_SUCCESS       Soft reset completes successfully.
-  @retval EFI_DEVICE_ERROR  Any step during the reset process is failed.
-
-  @note  The registers initial values after ATA soft reset are different
-         to the ATA device and ATAPI device.
-**/
-EFI_STATUS
-AtaSoftReset (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  This function is the ATA implementation for ReadBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice Indicates the calling context.
-  @param MediaId        The media id that the read request is for.
-  @param Lba            The starting logical block address to read from on the device.
-  @param BufferSize     The size of the Buffer in bytes. This must be a  multiple
-                        of the intrinsic block size of the device.
-
-  @param Buffer         A pointer to the destination buffer for the data. The caller
-                        is responsible for either having implicit or explicit ownership
-                        of the memory that data is read into.
-
-  @retval EFI_SUCCESS          Read Blocks successfully.
-  @retval EFI_DEVICE_ERROR     Read Blocks failed.
-  @retval EFI_NO_MEDIA         There is no media in the device.
-  @retval EFI_MEDIA_CHANGE     The MediaId is not for the current media.
-  @retval EFI_BAD_BUFFER_SIZE  The BufferSize parameter is not a multiple of the
-                               intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER  The read request contains LBAs that are not valid,
-                                 or the data buffer is not valid.
-
-  @note If Read Block error because of device error, this function will call
-        AtaSoftReset() function to reset device.
-
-**/
-EFI_STATUS
-AtaBlkIoReadBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  );
-
-/**
-  This function is the ATA implementation for WriteBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice  Indicates the calling context.
-  @param MediaId         The media id that the write request is for.
-  @param Lba             The starting logical block address to write onto the device.
-  @param BufferSize      The size of the Buffer in bytes. This must be a multiple
-                         of the intrinsic block size of the device.
-  @param Buffer          A pointer to the source buffer for the data.The caller
-                         is responsible for either having implicit or explicit
-                         ownership of the memory that data is written from.
-
-  @retval EFI_SUCCESS       Write Blocks successfully.
-  @retval EFI_DEVICE_ERROR  Write Blocks failed.
-  @retval EFI_NO_MEDIA      There is no media in the device.
-  @retval EFI_MEDIA_CHANGE  The MediaId is not for the current media.
-
-  @retval EFI_BAD_BUFFER_SIZE   The BufferSize parameter is not a multiple of the
-                                intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,
-                                or the data buffer is not valid.
-
-  @note If Write Block error because of device error, this function will call
-        AtaSoftReset() function to reset device.
-**/
-EFI_STATUS
-AtaBlkIoWriteBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  );
-
-/**
-  This function is called by DiscoverIdeDevice() during its device
-  identification.
-  Its main purpose is to get enough information for the device media
-  to fill in the Media data structure of the Block I/O Protocol interface.
-
-  There are 5 steps to reach such objective:
-  1. Sends out the ATAPI Identify Command to the specified device.
-  Only ATAPI device responses to this command. If the command succeeds,
-  it returns the Identify data structure which filled with information
-  about the device. Since the ATAPI device contains removable media,
-  the only meaningful information is the device module name.
-  2. Sends out ATAPI Inquiry Packet Command to the specified device.
-  This command will return inquiry data of the device, which contains
-  the device type information.
-  3. Allocate sense data space for future use. We don't detect the media
-  presence here to improvement boot performance, especially when CD
-  media is present. The media detection will be performed just before
-  each BLK_IO read/write
-
-  @param IdeDev pointer pointing to IDE_BLK_IO_DEV data structure, used
-                 to record all the information of the IDE device.
-
-  @retval EFI_SUCCESS       Identify ATAPI device successfully.
-  @retval EFI_DEVICE_ERROR  ATAPI Identify Device Command failed or device type
-                            is not supported by this IDE driver.
-  @retval EFI_OUT_OF_RESOURCES Allocate memory for sense data failed
-
-  @note   Parameter "IdeDev" will be updated in this function.
-**/
-EFI_STATUS
-ATAPIIdentify (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  This function is used to implement the Soft Reset on the specified
-  ATAPI device. Different from the AtaSoftReset(), here reset is a ATA
-  Soft Reset Command special for ATAPI device, and it only take effects
-  on the specified ATAPI device, not on the whole IDE bus.
-  Since the ATAPI soft reset is needed when device is in exceptional
-  condition (such as BSY bit is always set ), I think the Soft Reset
-  command should be sent without waiting for the BSY clear and DRDY
-  set.
-  This function is called by IdeBlkIoReset(),
-  a interface function of Block I/O protocol.
-
-  @param IdeDev    pointer pointing to IDE_BLK_IO_DEV data structure, used
-                   to record all the information of the IDE device.
-
-  @retval EFI_SUCCESS      Soft reset completes successfully.
-  @retval EFI_DEVICE_ERROR Any step during the reset process is failed.
-
-**/
-EFI_STATUS
-AtapiSoftReset (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  This function is the ATAPI implementation for ReadBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice Indicates the calling context.
-  @param MediaId        The media id that the read request is for.
-  @param Lba            The starting logical block address to read from on the device.
-  @param BufferSize     The size of the Buffer in bytes. This must be a multiple
-                        of the intrinsic block size of the device.
-  @param Buffer         A pointer to the destination buffer for the data. The caller
-                        is responsible for either having implicit or explicit
-                        ownership of the memory that data is read into.
-
-  @retval EFI_SUCCESS           Read Blocks successfully.
-  @retval EFI_DEVICE_ERROR      Read Blocks failed.
-  @retval EFI_NO_MEDIA          There is no media in the device.
-  @retval EFI_MEDIA_CHANGED     The MediaId is not for the current media.
-  @retval EFI_BAD_BUFFER_SIZE   The BufferSize parameter is not a multiple of the
-                                intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
-                                or the data buffer is not valid.
-**/
-EFI_STATUS
-AtapiBlkIoReadBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  );
-
-/**
-  This function is the ATAPI implementation for WriteBlocks in the
-  Block I/O Protocol interface.
-
-  @param IdeBlkIoDevice  Indicates the calling context.
-  @param MediaId         The media id that the write request is for.
-  @param Lba             The starting logical block address to write onto the device.
-  @param BufferSize      The size of the Buffer in bytes. This must be a multiple
-                         of the intrinsic block size of the device.
-  @param Buffer          A pointer to the source buffer for the data. The caller
-                         is responsible for either having implicit or explicit ownership
-                         of the memory that data is written from.
-
-  @retval EFI_SUCCESS            Write Blocks successfully.
-  @retval EFI_DEVICE_ERROR       Write Blocks failed.
-  @retval EFI_NO_MEDIA           There is no media in the device.
-  @retval EFI_MEDIA_CHANGE       The MediaId is not for the current media.
-  @retval EFI_BAD_BUFFER_SIZE    The BufferSize parameter is not a multiple of the
-                                 intrinsic block size of the device.
-  @retval EFI_INVALID_PARAMETER  The write request contains LBAs that are not valid,
-                                 or the data buffer is not valid.
-
-  @retval EFI_WRITE_PROTECTED    The write protected is enabled or the media does not support write
-**/
-EFI_STATUS
-AtapiBlkIoWriteBlocks (
-  IN IDE_BLK_IO_DEV   *IdeBlkIoDevice,
-  IN UINT32           MediaId,
-  IN EFI_LBA          Lba,
-  IN UINTN            BufferSize,
-  OUT VOID            *Buffer
-  );
-
-/**
-  Release resources of an IDE device before stopping it.
-
-  @param IdeBlkIoDevice  Standard IDE device private data structure
-
-**/
-VOID
-ReleaseIdeResources (
-  IN  IDE_BLK_IO_DEV  *IdeBlkIoDevice
-  );
-
-/**
-  Set the calculated Best transfer mode to a detected device
-
-  @param IdeDev       Standard IDE device private data structure
-  @param TransferMode The device transfer mode to be set
-  @return Set transfer mode Command execute status.
-**/
-EFI_STATUS
-SetDeviceTransferMode (
-  IN IDE_BLK_IO_DEV       *IdeDev,
-  IN ATA_TRANSFER_MODE    *TransferMode
-  );
-/**
-  Send ATA command into device with NON_DATA protocol.
-
-  @param  IdeDev Standard IDE device private data structure
-  @param  AtaCommand The ATA command to be sent
-  @param  Device The value in Device register
-  @param  Feature The value in Feature register
-  @param  SectorCount The value in SectorCount register
-  @param  LbaLow The value in LBA_LOW register
-  @param  LbaMiddle The value in LBA_MIDDLE register
-  @param  LbaHigh The value in LBA_HIGH register
-
-  @retval  EFI_SUCCESS Reading succeed
-  @retval  EFI_ABORTED Command failed
-  @retval  EFI_DEVICE_ERROR Device status error.
-
-**/
-EFI_STATUS
-AtaNonDataCommandIn (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Device,
-  IN  UINT8           Feature,
-  IN  UINT8           SectorCount,
-  IN  UINT8           LbaLow,
-  IN  UINT8           LbaMiddle,
-  IN  UINT8           LbaHigh
-  );
-
-/**
-  Send ATA Ext command into device with NON_DATA protocol.
-
-  @param  IdeDev Standard IDE device private data structure
-  @param  AtaCommand The ATA command to be sent
-  @param  Device The value in Device register
-  @param  Feature The value in Feature register
-  @param  SectorCount The value in SectorCount register
-  @param  LbaAddress The Lba address in 48-bit mode
-
-  @retval  EFI_SUCCESS Reading succeed
-  @retval  EFI_ABORTED Command failed
-  @retval  EFI_DEVICE_ERROR Device status error.
-
-**/
-EFI_STATUS
-AtaNonDataCommandInExt (
-  IN  IDE_BLK_IO_DEV  *IdeDev,
-  IN  UINT8           AtaCommand,
-  IN  UINT8           Device,
-  IN  UINT16          Feature,
-  IN  UINT16          SectorCount,
-  IN  EFI_LBA         LbaAddress
-  );
-/**
-  Enable Long Physical Sector Feature for ATA device.
-
-  @param   IdeDev  The IDE device data
-
-  @retval  EFI_SUCCESS      The ATA device supports Long Physical Sector feature
-                            and corresponding fields in BlockIo structure is updated.
-  @retval  EFI_UNSUPPORTED  The device is not ATA device or Long Physical Sector
-                            feature is not supported.
-**/
-EFI_STATUS
-AtaEnableLongPhysicalSector (
-  IN  IDE_BLK_IO_DEV  *IdeDev
-  );
-
-/**
-  Set drive parameters for devices not support PACKETS command.
-
-  @param IdeDev          Standard IDE device private data structure
-  @param DriveParameters The device parameters to be set into the disk
-  @return SetParameters Command execute status.
-
-**/
-EFI_STATUS
-SetDriveParameters (
-  IN IDE_BLK_IO_DEV       *IdeDev,
-  IN ATA_DRIVE_PARMS      *DriveParameters
-  );
-
-/**
-  Enable Interrupt on IDE controller.
-
-  @param  IdeDev   Standard IDE device private data structure
-
-  @retval  EFI_SUCCESS Enable Interrupt successfully
-**/
-EFI_STATUS
-EnableInterrupt (
-  IN IDE_BLK_IO_DEV       *IdeDev
-  );
-#endif
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.c
deleted file mode 100644
index 6ebf255..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.c
+++ /dev/null
@@ -1,1558 +0,0 @@
-/* $Id: IdeBus.c $ */
-/** @file
- * IdeBus.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  This file implement UEFI driver for IDE Bus which includes device identification,
-  Child device(Disk, CDROM, etc) enumeration and child handler installation, and
-  driver stop.
-
-  Copyright (c) 2006 - 2009, Intel Corporation
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-  @par Revision Reference:
-  This module is modified from DXE\IDE module for Ide Controller Init support
-
-**/
-
-#include "IdeBus.h"
-
-#define PCI_CLASS_MASS_STORAGE  0x01
-#define PCI_SUB_CLASS_IDE       0x01
-
-
-//
-// IDE Bus Driver Binding Protocol Instance
-//
-EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding = {
-  IDEBusDriverBindingSupported,
-  IDEBusDriverBindingStart,
-  IDEBusDriverBindingStop,
-  0xa,
-  NULL,
-  NULL
-};
-/**
-  Deregister an IDE device and free resources
-
-  @param  This Protocol instance pointer.
-  @param  Controller Ide device handle
-  @param  Handle Handle of device to deregister driver on
-
-  @retval EFI_SUCCESS  Deregister a specific IDE device successfully
-
-
-**/
-EFI_STATUS
-DeRegisterIdeDevice (
-  IN  EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN  EFI_HANDLE                     Controller,
-  IN  EFI_HANDLE                     Handle
-  )
-{
-  EFI_STATUS            Status;
-  EFI_BLOCK_IO_PROTOCOL *BlkIo;
-  IDE_BLK_IO_DEV        *IdeBlkIoDevice;
-  EFI_PCI_IO_PROTOCOL   *PciIo;
-  UINTN                 Index;
-
-  Status = gBS->OpenProtocol (
-                  Handle,
-                  &gEfiBlockIoProtocolGuid,
-                  (VOID **) &BlkIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (BlkIo);
-
-  //
-  // Report Status code: Device disabled
-  //
-  REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-    EFI_PROGRESS_CODE,
-    (EFI_IO_BUS_ATA_ATAPI | EFI_P_PC_DISABLE),
-    IdeBlkIoDevice->DevicePath
-    );
-
-  //
-  // Close the child handle
-  //
-  Status = gBS->CloseProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  This->DriverBindingHandle,
-                  Handle
-                  );
-
-  Status = gBS->UninstallMultipleProtocolInterfaces (
-                  Handle,
-                  &gEfiDevicePathProtocolGuid,
-                  IdeBlkIoDevice->DevicePath,
-                  &gEfiBlockIoProtocolGuid,
-                  &IdeBlkIoDevice->BlkIo,
-                  &gEfiDiskInfoProtocolGuid,
-                  &IdeBlkIoDevice->DiskInfo,
-                  NULL
-                  );
-
-  if (EFI_ERROR (Status)) {
-    gBS->OpenProtocol (
-          Controller,
-          &gEfiPciIoProtocolGuid,
-          (VOID **) &PciIo,
-          This->DriverBindingHandle,
-          Handle,
-          EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
-          );
-    return Status;
-  }
-
-  //
-  // Release allocated resources
-  //
-  Index = IdeBlkIoDevice->Channel * 2 + IdeBlkIoDevice->Device;
-  if (Index < MAX_IDE_DEVICE) {
-    IdeBlkIoDevice->IdeBusDriverPrivateData->HaveScannedDevice[Index] = FALSE;
-  }
-  ReleaseIdeResources (IdeBlkIoDevice);
-
-  return EFI_SUCCESS;
-}
-/**
-  Supported function of Driver Binding protocol for this driver.
-
-  @param This                A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
-  @param ControllerHandle    The handle of the controller to test.
-  @param RemainingDevicePath A pointer to the remaining portion of a device path.
-
-  @retval  EFI_SUCCESS Driver loaded.
-  @retval  other       Driver not loaded.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverBindingSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  )
-{
-  EFI_STATUS                        Status;
-  EFI_DEVICE_PATH_PROTOCOL          *ParentDevicePath;
-  EFI_DEV_PATH                      *Node;
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *IdeInit;
-
-  if (RemainingDevicePath != NULL) {
-    Node = (EFI_DEV_PATH *) RemainingDevicePath;
-    //
-    // Check if RemainingDevicePath is the End of Device Path Node,
-    // if yes, go on checking other conditions
-    //
-    if (!IsDevicePathEnd (Node)) {
-      //
-      // If RemainingDevicePath isn't the End of Device Path Node,
-      // check its validation
-      //
-      if (Node->DevPath.Type != MESSAGING_DEVICE_PATH ||
-          Node->DevPath.SubType != MSG_ATAPI_DP ||
-          DevicePathNodeLength(&Node->DevPath) != sizeof(ATAPI_DEVICE_PATH)) {
-        return EFI_UNSUPPORTED;
-      }
-    }
-  }
-
-  //
-  // Verify the Ide Controller Init Protocol, which installed by the
-  // IdeController module.
-  // Note 1: PciIo protocol has been opened BY_DRIVER by ide_init, so We can't
-  //         open BY_DRIVER here) That's why we don't check pciio protocol
-  // Note 2: ide_init driver check ide controller's pci config space, so we dont
-  //         check here any more to save code size
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiIdeControllerInitProtocolGuid,
-                  (VOID **) &IdeInit,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-
-  if (Status == EFI_ALREADY_STARTED) {
-    return EFI_SUCCESS;
-  }
-
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Close the I/O Abstraction(s) used to perform the supported test
-  //
-  gBS->CloseProtocol (
-        Controller,
-        &gEfiIdeControllerInitProtocolGuid,
-        This->DriverBindingHandle,
-        Controller
-        );
-
-  //
-  // Open the EFI Device Path protocol needed to perform the supported test
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiDevicePathProtocolGuid,
-                  (VOID **) &ParentDevicePath,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  if (Status == EFI_ALREADY_STARTED) {
-    return EFI_SUCCESS;
-  }
-
-  //
-  // Close protocol, don't use device path protocol in the Support() function
-  //
-  gBS->CloseProtocol (
-        Controller,
-        &gEfiDevicePathProtocolGuid,
-        This->DriverBindingHandle,
-        Controller
-        );
-
-  return Status;
-}
-
-
-/**
-  Start function of Driver binding protocol which start this driver on Controller
-  by detecting all disks and installing BlockIo protocol on them.
-
-  @param  This                Protocol instance pointer.
-  @param  Controller          Handle of device to bind driver to.
-  @param  RemainingDevicePath produce all possible children.
-
-  @retval  EFI_SUCCESS         This driver is added to ControllerHandle.
-  @retval  EFI_ALREADY_STARTED This driver is already running on ControllerHandle.
-  @retval  other               This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverBindingStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  )
-{
-  EFI_STATUS                        Status;
-  EFI_STATUS                        SavedStatus;
-  EFI_PCI_IO_PROTOCOL               *PciIo;
-  EFI_DEVICE_PATH_PROTOCOL          *ParentDevicePath;
-  EFI_DEV_PATH                      *Node;
-  UINT8                             IdeChannel;
-  UINT8                             BeginningIdeChannel;
-  UINT8                             EndIdeChannel;
-  UINT8                             IdeDevice;
-  UINT8                             BeginningIdeDevice;
-  UINT8                             EndIdeDevice;
-  IDE_BLK_IO_DEV                    *IdeBlkIoDevice[IdeMaxChannel][IdeMaxDevice];
-  IDE_BLK_IO_DEV                    *IdeBlkIoDevicePtr;
-  IDE_REGISTERS_BASE_ADDR           IdeRegsBaseAddr[IdeMaxChannel];
-  ATA_TRANSFER_MODE                 TransferMode;
-  ATA_DRIVE_PARMS                   DriveParameters;
-  EFI_DEV_PATH                      NewNode;
-  UINT8                             ConfigurationOptions;
-  UINT16                            CommandBlockBaseAddr;
-  UINT16                            ControlBlockBaseAddr;
-  UINTN                             DataSize;
-  IDE_BUS_DRIVER_PRIVATE_DATA       *IdeBusDriverPrivateData;
-  UINT64                            Supports;
-
-  //
-  // Local variables declaration for IdeControllerInit support
-  //
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *IdeInit;
-  BOOLEAN                           EnumAll;
-  BOOLEAN                           ChannelEnabled;
-  UINT8                             MaxDevices;
-  EFI_IDENTIFY_DATA                 IdentifyData;
-  EFI_ATA_COLLECTIVE_MODE           *SupportedModes;
-
-  IdeBusDriverPrivateData = NULL;
-  SupportedModes          = NULL;
-
-  //
-  // Perform IdeBus initialization
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiDevicePathProtocolGuid,
-                  (VOID **) &ParentDevicePath,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {
-    return Status;
-  }
-
-  //
-  // Now open the IDE_CONTROLLER_INIT protocol. Step7.1
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiIdeControllerInitProtocolGuid,
-                  (VOID **) &IdeInit,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-
-  //
-  // The following OpenProtocol function with _GET_PROTOCOL attribute and
-  // will not return EFI_ALREADY_STARTED, so save it for now
-  //
-  SavedStatus = Status;
-
-  if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {
-    DEBUG ((EFI_D_ERROR, "Open Init, Status=%x", Status));
-    //
-    // open protocol is not SUCCESS or not ALREADY_STARTED, error exit
-    //
-    goto ErrorExit;
-  }
-
-  //
-  // Save Enumall. Step7.2
-  //
-  EnumAll       = IdeInit->EnumAll;
-
-  //
-  // Consume PCI I/O protocol. Note that the OpenProtocol with _GET_PROTOCOL
-  // attribute will not return EFI_ALREADY_STARTED
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **) &PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-    DEBUG ((EFI_D_ERROR, "Open PciIo, Status=%x", Status));
-    goto ErrorExit;
-  }
-
-  //
-  // We must check EFI_ALREADY_STARTED because many ATAPI devices are removable
-  //
-  if (SavedStatus != EFI_ALREADY_STARTED) {
-    IdeBusDriverPrivateData = AllocatePool (sizeof (IDE_BUS_DRIVER_PRIVATE_DATA));
-    if (IdeBusDriverPrivateData == NULL) {
-      Status = EFI_OUT_OF_RESOURCES;
-      goto ErrorExit;
-    }
-
-    ZeroMem (IdeBusDriverPrivateData, sizeof (IDE_BUS_DRIVER_PRIVATE_DATA));
-    Status = gBS->InstallMultipleProtocolInterfaces (
-                    &Controller,
-                    &gEfiCallerIdGuid,
-                    IdeBusDriverPrivateData,
-                    NULL
-                    );
-    if (EFI_ERROR (Status)) {
-      goto ErrorExit;
-    }
-
-  } else {
-    Status = gBS->OpenProtocol (
-                    Controller,
-                    &gEfiCallerIdGuid,
-                    (VOID **) &IdeBusDriverPrivateData,
-                    This->DriverBindingHandle,
-                    Controller,
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                    );
-    if (EFI_ERROR (Status)) {
-      IdeBusDriverPrivateData = NULL;
-      goto ErrorExit;
-    }
-  }
-
-  Status = PciIo->Attributes (
-                    PciIo,
-                    EfiPciIoAttributeOperationSupported,
-                    0,
-                    &Supports
-                    );
-  if (!EFI_ERROR (Status)) {
-    Supports &= EFI_PCI_DEVICE_ENABLE;
-    Status = PciIo->Attributes (
-                      PciIo,
-                      EfiPciIoAttributeOperationEnable,
-                      Supports,
-                      NULL
-                      );
-  }
-
-  if (EFI_ERROR (Status)) {
-    goto ErrorExit;
-  }
-
-  //
-  // Read the environment variable that contains the IDEBus Driver's
-  // Config options that were set by the Driver Configuration Protocol
-  //
-  DataSize = sizeof (ConfigurationOptions);
-  Status = gRT->GetVariable (
-                  (CHAR16 *) L"Configuration",
-                  &gEfiCallerIdGuid,
-                  NULL,
-                  &DataSize,
-                  &ConfigurationOptions
-                  );
-  if (EFI_ERROR (Status)) {
-    ConfigurationOptions = 0x0f;
-  }
-
-   if (EnumAll || RemainingDevicePath == NULL) {
-    //
-    // If IdeInit->EnumAll is TRUE or RemainingDevicePath is NULL,
-    // must enumerate all IDE devices anyway
-    //
-    BeginningIdeChannel = IdePrimary;
-    EndIdeChannel       = IdeSecondary;
-    BeginningIdeDevice  = IdeMaster;
-    EndIdeDevice        = IdeSlave;
-
-  } else if (!IsDevicePathEnd (RemainingDevicePath)) {
-    //
-    // If RemainingDevicePath isn't the End of Device Path Node,
-    // only scan the specified device by RemainingDevicePath
-    //
-    Node                = (EFI_DEV_PATH *) RemainingDevicePath;
-    BeginningIdeChannel = Node->Atapi.PrimarySecondary;
-    EndIdeChannel       = BeginningIdeChannel;
-    BeginningIdeDevice  = Node->Atapi.SlaveMaster;
-    EndIdeDevice        = BeginningIdeDevice;
-    if (BeginningIdeChannel >= IdeMaxChannel || EndIdeChannel >= IdeMaxChannel) {
-      Status = EFI_INVALID_PARAMETER;
-      goto ErrorExit;
-    }
-    if (BeginningIdeDevice >= IdeMaxDevice|| EndIdeDevice >= IdeMaxDevice) {
-      Status = EFI_INVALID_PARAMETER;
-      goto ErrorExit;
-    }
-
-  } else {
-    //
-    // If RemainingDevicePath is the End of Device Path Node,
-    // skip enumerate any device and return EFI_SUCCESS
-    //
-    BeginningIdeChannel = IdeMaxChannel;
-    EndIdeChannel       = IdeMaxChannel - 1;
-    BeginningIdeDevice  = IdeMaxDevice;
-    EndIdeDevice        = IdeMaxDevice - 1;
-  }
-
-  //
-  // Obtain IDE IO port registers' base addresses
-  //
-  Status = GetIdeRegistersBaseAddr (PciIo, IdeRegsBaseAddr);
-  if (EFI_ERROR (Status)) {
-    goto ErrorExit;
-  }
-
-  //
-  // Report status code: begin IdeBus initialization
-  //
-  REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-    EFI_PROGRESS_CODE,
-    (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_RESET),
-    ParentDevicePath
-    );
-
-  //
-  // Strictly follow the enumeration based on IDE_CONTROLLER_INIT protocol
-  //
-  for (IdeChannel = BeginningIdeChannel; IdeChannel <= EndIdeChannel; IdeChannel++) {
-
-    IdeInit->NotifyPhase (IdeInit, EfiIdeBeforeChannelEnumeration, IdeChannel);
-
-    //
-    // now obtain channel information fron IdeControllerInit protocol. Step9
-    //
-    Status = IdeInit->GetChannelInfo (
-                        IdeInit,
-                        IdeChannel,
-                        &ChannelEnabled,
-                        &MaxDevices
-                        );
-    if (EFI_ERROR (Status)) {
-      DEBUG ((EFI_D_ERROR, "[GetChannel, Status=%x]", Status));
-      continue;
-    }
-
-    if (!ChannelEnabled) {
-      continue;
-    }
-
-    EndIdeDevice = (UINT8) MIN ((MaxDevices - 1), EndIdeDevice);
-    ASSERT (EndIdeDevice < IdeMaxDevice);
-    //
-    // Now inform the IDE Controller Init Module. Sept10
-    //
-    IdeInit->NotifyPhase (IdeInit, EfiIdeBeforeChannelReset, IdeChannel);
-
-    //
-    // No reset channel function implemented. Sept11
-    //
-    IdeInit->NotifyPhase (IdeInit, EfiIdeAfterChannelReset, IdeChannel);
-
-    //
-    // Step13
-    //
-    IdeInit->NotifyPhase (
-              IdeInit,
-              EfiIdeBusBeforeDevicePresenceDetection,
-              IdeChannel
-              );
-
-    //
-    // Prepare to detect IDE device of this channel
-    //
-    InitializeIDEChannelData ();
-
-    //
-    // -- 1st inner loop --- Master/Slave ------------  Step14
-    //
-    for (IdeDevice = BeginningIdeDevice; IdeDevice <= EndIdeDevice; IdeDevice++) {
-      //
-      // Check whether the configuration options allow this device
-      //
-      if ((ConfigurationOptions & (1 << (IdeChannel * 2 + IdeDevice))) == 0) {
-        continue;
-      }
-
-      //
-      // The device has been scanned in another Start(), No need to scan it again
-      // for perf optimization.
-      //
-      if (IdeBusDriverPrivateData->HaveScannedDevice[IdeChannel * 2 + IdeDevice]) {
-        continue;
-      }
-
-      //
-      // create child handle for the detected device.
-      //
-      IdeBlkIoDevice[IdeChannel][IdeDevice] = AllocatePool (sizeof (IDE_BLK_IO_DEV));
-      if (IdeBlkIoDevice[IdeChannel][IdeDevice] == NULL) {
-        continue;
-      }
-
-      IdeBlkIoDevicePtr = IdeBlkIoDevice[IdeChannel][IdeDevice];
-
-      ZeroMem (IdeBlkIoDevicePtr, sizeof (IDE_BLK_IO_DEV));
-
-      IdeBlkIoDevicePtr->Signature  = IDE_BLK_IO_DEV_SIGNATURE;
-      IdeBlkIoDevicePtr->Channel    = (EFI_IDE_CHANNEL) IdeChannel;
-      IdeBlkIoDevicePtr->Device     = (EFI_IDE_DEVICE) IdeDevice;
-
-      //
-      // initialize Block IO interface's Media pointer
-      //
-      IdeBlkIoDevicePtr->BlkIo.Media = &IdeBlkIoDevicePtr->BlkMedia;
-
-      //
-      // Initialize IDE IO port addresses, including Command Block registers
-      // and Control Block registers
-      //
-      IdeBlkIoDevicePtr->IoPort = AllocatePool (sizeof (IDE_BASE_REGISTERS));
-      if (IdeBlkIoDevicePtr->IoPort == NULL) {
-        continue;
-      }
-
-      ZeroMem (IdeBlkIoDevicePtr->IoPort, sizeof (IDE_BASE_REGISTERS));
-      CommandBlockBaseAddr = IdeRegsBaseAddr[IdeChannel].CommandBlockBaseAddr;
-      ControlBlockBaseAddr = IdeRegsBaseAddr[IdeChannel].ControlBlockBaseAddr;
-
-      IdeBlkIoDevicePtr->IoPort->Data = CommandBlockBaseAddr;
-      (*(UINT16 *) &IdeBlkIoDevicePtr->IoPort->Reg1) = (UINT16) (CommandBlockBaseAddr + 0x01);
-      IdeBlkIoDevicePtr->IoPort->SectorCount = (UINT16) (CommandBlockBaseAddr + 0x02);
-      IdeBlkIoDevicePtr->IoPort->SectorNumber = (UINT16) (CommandBlockBaseAddr + 0x03);
-      IdeBlkIoDevicePtr->IoPort->CylinderLsb = (UINT16) (CommandBlockBaseAddr + 0x04);
-      IdeBlkIoDevicePtr->IoPort->CylinderMsb = (UINT16) (CommandBlockBaseAddr + 0x05);
-      IdeBlkIoDevicePtr->IoPort->Head = (UINT16) (CommandBlockBaseAddr + 0x06);
-      (*(UINT16 *) &IdeBlkIoDevicePtr->IoPort->Reg) = (UINT16) (CommandBlockBaseAddr + 0x07);
-
-      (*(UINT16 *) &IdeBlkIoDevicePtr->IoPort->Alt) = ControlBlockBaseAddr;
-      IdeBlkIoDevicePtr->IoPort->DriveAddress = (UINT16) (ControlBlockBaseAddr + 0x01);
-
-      IdeBlkIoDevicePtr->IoPort->MasterSlave = (UINT16) ((IdeDevice == IdeMaster) ? 1 : 0);
-
-      IdeBlkIoDevicePtr->PciIo = PciIo;
-      IdeBlkIoDevicePtr->IdeBusDriverPrivateData = IdeBusDriverPrivateData;
-      IdeBlkIoDevicePtr->IoPort->BusMasterBaseAddr = IdeRegsBaseAddr[IdeChannel].BusMasterBaseAddr;
-
-      //
-      // Report Status code: is about to detect IDE drive
-      //
-      REPORT_STATUS_CODE_EX (
-        EFI_PROGRESS_CODE,
-        (EFI_IO_BUS_ATA_ATAPI | EFI_P_PC_PRESENCE_DETECT),
-        0,
-        &gEfiCallerIdGuid,
-        NULL,
-        NULL,
-        0
-      );
-
-      //
-      // Discover device, now!
-      //
-      PERF_START (NULL, "DiscoverIdeDevice", "IDE", 0);
-      Status = DiscoverIdeDevice (IdeBlkIoDevicePtr);
-      PERF_END (NULL, "DiscoverIdeDevice", "IDE", 0);
-
-      IdeBusDriverPrivateData->HaveScannedDevice[IdeChannel * 2 + IdeDevice]  = TRUE;
-      IdeBusDriverPrivateData->DeviceProcessed[IdeChannel * 2 + IdeDevice]    = FALSE;
-
-      if (!EFI_ERROR (Status)) {
-        //
-        // Set Device Path
-        //
-        ZeroMem (&NewNode, sizeof (NewNode));
-        NewNode.DevPath.Type    = MESSAGING_DEVICE_PATH;
-        NewNode.DevPath.SubType = MSG_ATAPI_DP;
-        SetDevicePathNodeLength (&NewNode.DevPath, sizeof (ATAPI_DEVICE_PATH));
-
-        NewNode.Atapi.PrimarySecondary  = (UINT8) IdeBlkIoDevicePtr->Channel;
-        NewNode.Atapi.SlaveMaster       = (UINT8) IdeBlkIoDevicePtr->Device;
-        NewNode.Atapi.Lun               = IdeBlkIoDevicePtr->Lun;
-        IdeBlkIoDevicePtr->DevicePath = AppendDevicePathNode (
-                                          ParentDevicePath,
-                                          &NewNode.DevPath
-                                          );
-        if (IdeBlkIoDevicePtr->DevicePath == NULL) {
-          ReleaseIdeResources (IdeBlkIoDevicePtr);
-          continue;
-        }
-
-        //
-        // Submit identify data to IDE controller init driver
-        //
-        CopyMem (&IdentifyData, IdeBlkIoDevicePtr->IdData, sizeof (IdentifyData));
-        IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice] = TRUE;
-        IdeInit->SubmitData (IdeInit, IdeChannel, IdeDevice, &IdentifyData);
-      } else {
-        //
-        // Device detection failed
-        //
-        IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice] = FALSE;
-        IdeInit->SubmitData (IdeInit, IdeChannel, IdeDevice, NULL);
-        ReleaseIdeResources (IdeBlkIoDevicePtr);
-        IdeBlkIoDevicePtr = NULL;
-      }
-      //
-      // end of 1st inner loop ---
-      //
-    }
-    //
-    // end of 1st outer loop =========
-    //
-  }
-
-  //
-  // = 2nd outer loop == Primary/Secondary =================
-  //
-  for (IdeChannel = BeginningIdeChannel; IdeChannel <= EndIdeChannel; IdeChannel++) {
-
-    //
-    // -- 2nd inner loop --- Master/Slave --------
-    //
-    for (IdeDevice = BeginningIdeDevice; IdeDevice <= EndIdeDevice; IdeDevice++) {
-
-      if (IdeBusDriverPrivateData->DeviceProcessed[IdeChannel * 2 + IdeDevice]) {
-        continue;
-      }
-
-      if (!IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice]) {
-        continue;
-      }
-
-      Status = IdeInit->CalculateMode (
-                          IdeInit,
-                          IdeChannel,
-                          IdeDevice,
-                          &SupportedModes
-                          );
-      if (EFI_ERROR (Status)) {
-        DEBUG ((EFI_D_ERROR, "[bStStp20S=%x]", Status));
-        continue;
-      }
-
-      IdeBlkIoDevicePtr = IdeBlkIoDevice[IdeChannel][IdeDevice];
-
-      //
-      // Set best supported PIO mode on this IDE device
-      //
-      if (SupportedModes->PioMode.Mode <= AtaPioMode2) {
-        TransferMode.ModeCategory = ATA_MODE_CATEGORY_DEFAULT_PIO;
-      } else {
-        TransferMode.ModeCategory = ATA_MODE_CATEGORY_FLOW_PIO;
-      }
-
-      TransferMode.ModeNumber = (UINT8) (SupportedModes->PioMode.Mode);
-
-      if (SupportedModes->ExtModeCount == 0){
-        Status                  = SetDeviceTransferMode (IdeBlkIoDevicePtr, &TransferMode);
-
-        if (EFI_ERROR (Status)) {
-          IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice] = FALSE;
-          ReleaseIdeResources (IdeBlkIoDevicePtr);
-          IdeBlkIoDevicePtr = NULL;
-          continue;
-        }
-      }
-
-      //
-      // Set supported DMA mode on this IDE device. Note that UDMA & MDMA cannot
-      // be set together. Only one DMA mode can be set to a device. If setting
-      // DMA mode operation fails, we can continue moving on because we only use
-      // PIO mode at boot time. DMA modes are used by certain kind of OS booting
-      //
-      if (SupportedModes->UdmaMode.Valid) {
-
-        TransferMode.ModeCategory = ATA_MODE_CATEGORY_UDMA;
-        TransferMode.ModeNumber   = (UINT8) (SupportedModes->UdmaMode.Mode);
-        Status                    = SetDeviceTransferMode (IdeBlkIoDevicePtr, &TransferMode);
-
-        if (EFI_ERROR (Status)) {
-          IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice] = FALSE;
-          ReleaseIdeResources (IdeBlkIoDevicePtr);
-          IdeBlkIoDevicePtr = NULL;
-          continue;
-        }
-        //
-        // Record Udma Mode
-        //
-        IdeBlkIoDevicePtr->UdmaMode.Valid = TRUE;
-        IdeBlkIoDevicePtr->UdmaMode.Mode  = SupportedModes->UdmaMode.Mode;
-        EnableInterrupt (IdeBlkIoDevicePtr);
-      } else if (SupportedModes->MultiWordDmaMode.Valid) {
-
-        TransferMode.ModeCategory = ATA_MODE_CATEGORY_MDMA;
-        TransferMode.ModeNumber   = (UINT8) SupportedModes->MultiWordDmaMode.Mode;
-        Status                    = SetDeviceTransferMode (IdeBlkIoDevicePtr, &TransferMode);
-
-        if (EFI_ERROR (Status)) {
-          IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice] = FALSE;
-          ReleaseIdeResources (IdeBlkIoDevicePtr);
-          IdeBlkIoDevicePtr = NULL;
-          continue;
-        }
-
-        EnableInterrupt (IdeBlkIoDevicePtr);
-      }
-      //
-      // Init driver parameters
-      //
-      DriveParameters.Sector          = (UINT8) IdeBlkIoDevicePtr->IdData->AtaData.sectors_per_track;
-      DriveParameters.Heads           = (UINT8) (IdeBlkIoDevicePtr->IdData->AtaData.heads - 1);
-      DriveParameters.MultipleSector  = (UINT8) IdeBlkIoDevicePtr->IdData->AtaData.multi_sector_cmd_max_sct_cnt;
-      //
-      // Set Parameters for the device:
-      // 1) Init
-      // 2) Establish the block count for READ/WRITE MULTIPLE (EXT) command
-      //
-      if ((IdeBlkIoDevicePtr->Type == IdeHardDisk) || (IdeBlkIoDevicePtr->Type == Ide48bitAddressingHardDisk)) {
-        Status = SetDriveParameters (IdeBlkIoDevicePtr, &DriveParameters);
-      }
-
-      //
-      // Record PIO mode used in private data
-      //
-      IdeBlkIoDevicePtr->PioMode = (ATA_PIO_MODE) SupportedModes->PioMode.Mode;
-
-      //
-      // Set IDE controller Timing Blocks in the PCI Configuration Space
-      //
-      IdeInit->SetTiming (IdeInit, IdeChannel, IdeDevice, SupportedModes);
-
-      //
-      // Add Component Name for the IDE/ATAPI device that was discovered.
-      //
-      IdeBlkIoDevicePtr->ControllerNameTable = NULL;
-      ADD_IDE_ATAPI_NAME (IdeBlkIoDevicePtr);
-
-      Status = gBS->InstallMultipleProtocolInterfaces (
-                      &IdeBlkIoDevicePtr->Handle,
-                      &gEfiDevicePathProtocolGuid,
-                      IdeBlkIoDevicePtr->DevicePath,
-                      &gEfiBlockIoProtocolGuid,
-                      &IdeBlkIoDevicePtr->BlkIo,
-                      &gEfiDiskInfoProtocolGuid,
-                      &IdeBlkIoDevicePtr->DiskInfo,
-                      NULL
-                      );
-
-      if (EFI_ERROR (Status)) {
-        ReleaseIdeResources (IdeBlkIoDevicePtr);
-      }
-
-      gBS->OpenProtocol (
-            Controller,
-            &gEfiPciIoProtocolGuid,
-            (VOID **) &PciIo,
-            This->DriverBindingHandle,
-            IdeBlkIoDevicePtr->Handle,
-            EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
-            );
-
-      IdeBusDriverPrivateData->DeviceProcessed[IdeChannel * 2 + IdeDevice] = TRUE;
-
-      //
-      // Report status code: device enabled!
-      //
-      REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-        EFI_PROGRESS_CODE,
-        (EFI_IO_BUS_ATA_ATAPI | EFI_P_PC_ENABLE),
-        IdeBlkIoDevicePtr->DevicePath
-        );
-
-      //
-      // Create event to clear pending IDE interrupt
-      //
-      Status = gBS->CreateEventEx (
-                      EVT_NOTIFY_SIGNAL,
-                      TPL_NOTIFY,
-                      ClearInterrupt,
-                      IdeBlkIoDevicePtr,
-                      &gEfiEventExitBootServicesGuid,
-                      &IdeBlkIoDevicePtr->ExitBootServiceEvent
-                      );
-
-      //
-      // end of 2nd inner loop ----
-      //
-    }
-    //
-    // end of 2nd outer loop ==========
-    //
-  }
-
-  //
-  // All configurations done! Notify IdeController to do post initialization
-  // work such as saving IDE controller PCI settings for S3 resume
-  //
-  IdeInit->NotifyPhase (IdeInit, EfiIdeBusPhaseMaximum, 0);
-
-  if (SupportedModes != NULL) {
-    FreePool (SupportedModes);
-  }
-
-  PERF_START (NULL, "Finish IDE detection", "IDE", 1);
-  PERF_END (NULL, "Finish IDE detection", "IDE", 0);
-
-  return EFI_SUCCESS;
-
-ErrorExit:
-
-  //
-  // Report error code: controller error
-  //
-  REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-    EFI_ERROR_CODE | EFI_ERROR_MINOR,
-    (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_EC_CONTROLLER_ERROR),
-    ParentDevicePath
-    );
-
-  gBS->CloseProtocol (
-        Controller,
-        &gEfiIdeControllerInitProtocolGuid,
-        This->DriverBindingHandle,
-        Controller
-        );
-
-  gBS->UninstallMultipleProtocolInterfaces (
-        Controller,
-        &gEfiCallerIdGuid,
-        IdeBusDriverPrivateData,
-        NULL
-        );
-
-  if (IdeBusDriverPrivateData != NULL) {
-    gBS->FreePool (IdeBusDriverPrivateData);
-  }
-
-  if (SupportedModes != NULL) {
-    gBS->FreePool (SupportedModes);
-  }
-
-  gBS->CloseProtocol (
-        Controller,
-        &gEfiPciIoProtocolGuid,
-        This->DriverBindingHandle,
-        Controller
-        );
-
-  gBS->CloseProtocol (
-        Controller,
-        &gEfiDevicePathProtocolGuid,
-        This->DriverBindingHandle,
-        Controller
-        );
-
-  return Status;
-
-}
-/**
-  Stop function of Driver Binding Protocol which is to stop the driver on Controller Handle and all
-  child handle attached to the controller handle if there are.
-
-  @param  This Protocol instance pointer.
-  @param  Controller Handle of device to stop driver on
-  @param  NumberOfChildren Not used
-  @param  ChildHandleBuffer Not used
-
-  @retval  EFI_SUCCESS This driver is removed DeviceHandle
-  @retval  other This driver was not removed from this device
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverBindingStop (
-  IN  EFI_DRIVER_BINDING_PROTOCOL     *This,
-  IN  EFI_HANDLE                      Controller,
-  IN  UINTN                           NumberOfChildren,
-  IN  EFI_HANDLE                      *ChildHandleBuffer
-  )
-{
-  EFI_STATUS                  Status;
-  EFI_PCI_IO_PROTOCOL         *PciIo;
-  BOOLEAN                     AllChildrenStopped;
-  UINTN                       Index;
-  IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;
-  UINT64                      Supports;
-
-  IdeBusDriverPrivateData = NULL;
-
-  if (NumberOfChildren == 0) {
-
-    Status = gBS->OpenProtocol (
-                    Controller,
-                    &gEfiPciIoProtocolGuid,
-                    (VOID **) &PciIo,
-                    This->DriverBindingHandle,
-                    Controller,
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                    );
-    if (!EFI_ERROR (Status)) {
-      Status = PciIo->Attributes (
-                        PciIo,
-                        EfiPciIoAttributeOperationSupported,
-                        0,
-                        &Supports
-                        );
-      if (!EFI_ERROR (Status)) {
-        Supports &= EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO | EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO | EFI_PCI_DEVICE_ENABLE;
-        PciIo->Attributes (
-                PciIo,
-                EfiPciIoAttributeOperationDisable,
-                Supports,
-                NULL
-                );
-      }
-    }
-
-    gBS->OpenProtocol (
-          Controller,
-          &gEfiCallerIdGuid,
-          (VOID **) &IdeBusDriverPrivateData,
-          This->DriverBindingHandle,
-          Controller,
-          EFI_OPEN_PROTOCOL_GET_PROTOCOL
-          );
-
-    gBS->UninstallMultipleProtocolInterfaces (
-          Controller,
-          &gEfiCallerIdGuid,
-          IdeBusDriverPrivateData,
-          NULL
-          );
-
-    if (IdeBusDriverPrivateData != NULL) {
-      gBS->FreePool (IdeBusDriverPrivateData);
-    }
-    //
-    // Close the bus driver
-    //
-    gBS->CloseProtocol (
-          Controller,
-          &gEfiIdeControllerInitProtocolGuid,
-          This->DriverBindingHandle,
-          Controller
-          );
-    gBS->CloseProtocol (
-          Controller,
-          &gEfiPciIoProtocolGuid,
-          This->DriverBindingHandle,
-          Controller
-          );
-    gBS->CloseProtocol (
-          Controller,
-          &gEfiDevicePathProtocolGuid,
-          This->DriverBindingHandle,
-          Controller
-          );
-
-    return EFI_SUCCESS;
-  }
-
-  AllChildrenStopped = TRUE;
-
-  for (Index = 0; Index < NumberOfChildren; Index++) {
-
-    Status = DeRegisterIdeDevice (This, Controller, ChildHandleBuffer[Index]);
-
-    if (EFI_ERROR (Status)) {
-      AllChildrenStopped = FALSE;
-    }
-  }
-
-  if (!AllChildrenStopped) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  issue ATA or ATAPI command to reset a block IO device.
-  @param  This                  Block IO protocol instance pointer.
-  @param  ExtendedVerification  If FALSE,for ATAPI device, driver will only invoke ATAPI reset method
-                                If TRUE, for ATAPI device, driver need invoke ATA reset method after
-                                invoke ATAPI reset method
-
-  @retval EFI_DEVICE_ERROR      When the device is neighther ATA device or ATAPI device.
-  @retval EFI_SUCCESS           The device reset successfully
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoReset (
-  IN  EFI_BLOCK_IO_PROTOCOL   *This,
-  IN  BOOLEAN                 ExtendedVerification
-  )
-{
-  IDE_BLK_IO_DEV  *IdeBlkIoDevice;
-  EFI_STATUS      Status;
-  EFI_TPL         OldTpl;
-
-  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (This);
-  //
-  // Requery IDE IO resources in case of the switch of native and legacy modes
-  //
-  ReassignIdeResources (IdeBlkIoDevice);
-
-  //
-  // for ATA device, using ATA reset method
-  //
-  if (IdeBlkIoDevice->Type == IdeHardDisk ||
-      IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {
-    Status = AtaSoftReset (IdeBlkIoDevice);
-    goto Done;
-  }
-
-  if (IdeBlkIoDevice->Type == IdeUnknown) {
-    Status = EFI_DEVICE_ERROR;
-    goto Done;
-  }
-
-  //
-  // for ATAPI device, using ATAPI reset method
-  //
-  Status = AtapiSoftReset (IdeBlkIoDevice);
-  if (ExtendedVerification) {
-    Status = AtaSoftReset (IdeBlkIoDevice);
-  }
-
-Done:
-  gBS->RestoreTPL (OldTpl);
-  return Status;
-}
-
-/**
-  Read data from a block IO device
-
-  @param  This       Block IO protocol instance pointer.
-  @param  MediaId    The media ID of the device
-  @param  Lba        Starting LBA address to read data
-  @param  BufferSize The size of data to be read
-  @param  Buffer     Caller supplied buffer to save data
-
-  @retval EFI_DEVICE_ERROR  unknown device type
-  @retval other             read data status.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoReadBlocks (
-  IN  EFI_BLOCK_IO_PROTOCOL   *This,
-  IN  UINT32                  MediaId,
-  IN  EFI_LBA                 Lba,
-  IN  UINTN                   BufferSize,
-  OUT VOID                    *Buffer
-  )
-{
-  IDE_BLK_IO_DEV  *IdeBlkIoDevice;
-  EFI_STATUS      Status;
-  EFI_TPL         OldTpl;
-
-  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (This);
-
-  //
-  // Requery IDE IO resources in case of the switch of native and legacy modes
-  //
-  ReassignIdeResources (IdeBlkIoDevice);
-
-  //
-  // For ATA compatible device, use ATA read block's mechanism
-  //
-  if (IdeBlkIoDevice->Type == IdeHardDisk ||
-      IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {
-    Status = AtaBlkIoReadBlocks (
-            IdeBlkIoDevice,
-            MediaId,
-            Lba,
-            BufferSize,
-            Buffer
-            );
-    goto Done;
-  }
-
-  if (IdeBlkIoDevice->Type == IdeUnknown) {
-    Status = EFI_DEVICE_ERROR;
-    goto Done;
-  }
-
-  //
-  // for ATAPI device, using ATAPI read block's mechanism
-  //
-  Status = AtapiBlkIoReadBlocks (
-          IdeBlkIoDevice,
-          MediaId,
-          Lba,
-          BufferSize,
-          Buffer
-          );
-
-Done:
-  gBS->RestoreTPL (OldTpl);
-
-  return Status;
-}
-
-/**
-  Write data to block io device.
-
-  @param  This       Protocol instance pointer.
-  @param  MediaId    The media ID of the device
-  @param  Lba        Starting LBA address to write data
-  @param  BufferSize The size of data to be written
-  @param  Buffer     Caller supplied buffer to save data
-
-  @retval EFI_DEVICE_ERROR  unknown device type
-  @retval other             write data status
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoWriteBlocks (
-  IN  EFI_BLOCK_IO_PROTOCOL   *This,
-  IN  UINT32                  MediaId,
-  IN  EFI_LBA                 Lba,
-  IN  UINTN                   BufferSize,
-  IN  VOID                    *Buffer
-  )
-{
-  IDE_BLK_IO_DEV  *IdeBlkIoDevice;
-  EFI_STATUS      Status;
-  EFI_TPL         OldTpl;
-
-  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (This);
-  //
-  // Requery IDE IO resources in case of the switch of native and legacy modes
-  //
-  ReassignIdeResources (IdeBlkIoDevice);
-
-  //
-  // for ATA device, using ATA write block's mechanism
-  //
-  if (IdeBlkIoDevice->Type == IdeHardDisk ||
-      IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {
-
-    Status = AtaBlkIoWriteBlocks (
-            IdeBlkIoDevice,
-            MediaId,
-            Lba,
-            BufferSize,
-            Buffer
-            );
-    goto Done;
-  }
-
-  if (IdeBlkIoDevice->Type == IdeUnknown) {
-    Status = EFI_DEVICE_ERROR;
-    goto Done;
-  }
-
-  //
-  // for ATAPI device, using ATAPI write block's mechanism
-  //
-  Status = AtapiBlkIoWriteBlocks (
-          IdeBlkIoDevice,
-          MediaId,
-          Lba,
-          BufferSize,
-          Buffer
-          );
-
-Done:
-  gBS->RestoreTPL (OldTpl);
-  return Status;
-}
-/**
-  Flushes all modified data to a physical block devices
-
-  @param  This  Indicates a pointer to the calling context which to specify a
-                specific block device
-
-  @retval EFI_SUCCESS   Always return success.
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoFlushBlocks (
-  IN  EFI_BLOCK_IO_PROTOCOL   *This
-  )
-{
-  //
-  // return directly
-  //
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used by the IDE bus driver to get inquiry data.
-  Data format of Identify data is defined by the Interface GUID.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  InquiryData           Pointer to a buffer for the inquiry data.
-  @param  InquiryDataSize       Pointer to the value for the inquiry data size.
-
-  @retval EFI_SUCCESS           The command was accepted without any errors.
-  @retval EFI_NOT_FOUND         Device does not support this data class
-  @retval EFI_DEVICE_ERROR      Error reading InquiryData from device
-  @retval EFI_BUFFER_TOO_SMALL  InquiryDataSize not big enough
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoInquiry (
-  IN     EFI_DISK_INFO_PROTOCOL   *This,
-  IN OUT VOID                     *InquiryData,
-  IN OUT UINT32                   *InquiryDataSize
-  )
-{
-  IDE_BLK_IO_DEV  *IdeBlkIoDevice;
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS (This);
-
-  if (*InquiryDataSize < sizeof (ATAPI_INQUIRY_DATA)) {
-    *InquiryDataSize = sizeof (ATAPI_INQUIRY_DATA);
-    return EFI_BUFFER_TOO_SMALL;
-  }
-
-  if (IdeBlkIoDevice->InquiryData == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  gBS->CopyMem (InquiryData, IdeBlkIoDevice->InquiryData, sizeof (ATAPI_INQUIRY_DATA));
-  *InquiryDataSize = sizeof (ATAPI_INQUIRY_DATA);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used by the IDE bus driver to get identify data.
-  Data format of Identify data is defined by the Interface GUID.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  IdentifyData          Pointer to a buffer for the identify data.
-  @param  IdentifyDataSize      Pointer to the value for the identify data size.
-
-  @retval EFI_SUCCESS           The command was accepted without any errors.
-  @retval EFI_NOT_FOUND         Device does not support this data class
-  @retval EFI_DEVICE_ERROR      Error reading IdentifyData from device
-  @retval EFI_BUFFER_TOO_SMALL  IdentifyDataSize not big enough
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoIdentify (
-  IN     EFI_DISK_INFO_PROTOCOL   *This,
-  IN OUT VOID                     *IdentifyData,
-  IN OUT UINT32                   *IdentifyDataSize
-  )
-{
-  IDE_BLK_IO_DEV  *IdeBlkIoDevice;
-
-  IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS (This);
-
-  if (*IdentifyDataSize < sizeof (EFI_IDENTIFY_DATA)) {
-    *IdentifyDataSize = sizeof (EFI_IDENTIFY_DATA);
-    return EFI_BUFFER_TOO_SMALL;
-  }
-
-  if (IdeBlkIoDevice->IdData == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  gBS->CopyMem (IdentifyData, IdeBlkIoDevice->IdData, sizeof (EFI_IDENTIFY_DATA));
-  *IdentifyDataSize = sizeof (EFI_IDENTIFY_DATA);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used by the IDE bus driver to get sense data.
-  Data format of Sense data is defined by the Interface GUID.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  SenseData             Pointer to the SenseData.
-  @param  SenseDataSize         Size of SenseData in bytes.
-  @param  SenseDataNumber       Pointer to the value for the identify data size.
-
-  @retval EFI_SUCCESS           The command was accepted without any errors.
-  @retval EFI_NOT_FOUND         Device does not support this data class
-  @retval EFI_DEVICE_ERROR      Error reading InquiryData from device
-  @retval EFI_BUFFER_TOO_SMALL  SenseDataSize not big enough
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoSenseData (
-  IN     EFI_DISK_INFO_PROTOCOL   *This,
-  IN OUT VOID                     *SenseData,
-  IN OUT UINT32                   *SenseDataSize,
-  OUT    UINT8                    *SenseDataNumber
-  )
-{
-  return EFI_NOT_FOUND;
-}
-
-/**
-  This function is used by the IDE bus driver to get controller information.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  IdeChannel            Pointer to the Ide Channel number. Primary or secondary.
-  @param  IdeDevice             Pointer to the Ide Device number. Master or slave.
-
-  @retval EFI_SUCCESS           IdeChannel and IdeDevice are valid
-  @retval EFI_UNSUPPORTED       This is not an IDE device
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoWhichIde (
-  IN  EFI_DISK_INFO_PROTOCOL   *This,
-  OUT UINT32                   *IdeChannel,
-  OUT UINT32                   *IdeDevice
-  )
-{
-  IDE_BLK_IO_DEV  *IdeBlkIoDevice;
-
-  IdeBlkIoDevice  = IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS (This);
-  *IdeChannel     = IdeBlkIoDevice->Channel;
-  *IdeDevice      = IdeBlkIoDevice->Device;
-
-  return EFI_SUCCESS;
-}
-
-/**
-  The is an event(generally the event is exitBootService event) call back function.
-  Clear pending IDE interrupt before OS loader/kernel take control of the IDE device.
-
-  @param  Event   Pointer to this event
-  @param  Context Event handler private data
-
-**/
-VOID
-EFIAPI
-ClearInterrupt (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  )
-{
-  EFI_STATUS      Status;
-  UINT64          IoPortForBmis;
-  UINT8           RegisterValue;
-  IDE_BLK_IO_DEV  *IdeDev;
-
-  //
-  // Get our context
-  //
-  IdeDev = (IDE_BLK_IO_DEV *) Context;
-
-  //
-  // Obtain IDE IO port registers' base addresses
-  //
-  Status = ReassignIdeResources (IdeDev);
-  if (EFI_ERROR (Status)) {
-    return;
-  }
-
-  //
-  // Check whether interrupt is pending
-  //
-
-  //
-  // Reset IDE device to force it de-assert interrupt pin
-  // Note: this will reset all devices on this IDE channel
-  //
-  AtaSoftReset (IdeDev);
-  if (EFI_ERROR (Status)) {
-    return;
-  }
-
-  //
-  // Get base address of IDE Bus Master Status Register
-  //
-  if (IdePrimary == IdeDev->Channel) {
-    IoPortForBmis = IdeDev->IoPort->BusMasterBaseAddr + BMISP_OFFSET;
-  } else {
-    if (IdeSecondary == IdeDev->Channel) {
-      IoPortForBmis = IdeDev->IoPort->BusMasterBaseAddr + BMISS_OFFSET;
-    } else {
-      return;
-    }
-  }
-  //
-  // Read BMIS register and clear ERROR and INTR bit
-  //
-  IdeDev->PciIo->Io.Read (
-                      IdeDev->PciIo,
-                      EfiPciIoWidthUint8,
-                      EFI_PCI_IO_PASS_THROUGH_BAR,
-                      IoPortForBmis,
-                      1,
-                      &RegisterValue
-                      );
-
-  RegisterValue |= (BMIS_INTERRUPT | BMIS_ERROR);
-
-  IdeDev->PciIo->Io.Write (
-                      IdeDev->PciIo,
-                      EfiPciIoWidthUint8,
-                      EFI_PCI_IO_PASS_THROUGH_BAR,
-                      IoPortForBmis,
-                      1,
-                      &RegisterValue
-                      );
-
-  //
-  // Select the other device on this channel to ensure this device to release the interrupt pin
-  //
-  if (IdeDev->Device == 0) {
-    RegisterValue = (1 << 4) | 0xe0;
-  } else {
-    RegisterValue = (0 << 4) | 0xe0;
-  }
-  IDEWritePortB (
-    IdeDev->PciIo,
-    IdeDev->IoPort->Head,
-    RegisterValue
-    );
-
-}
-
-/**
-  The user Entry Point for module IdeBus. The user code starts with this function.
-
-  @param[in] ImageHandle    The firmware allocated handle for the EFI image.
-  @param[in] SystemTable    A pointer to the EFI System Table.
-
-  @retval EFI_SUCCESS       The entry point is executed successfully.
-  @retval other             Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeIdeBus(
-  IN EFI_HANDLE           ImageHandle,
-  IN EFI_SYSTEM_TABLE     *SystemTable
-  )
-{
-  EFI_STATUS              Status;
-
-  //
-  // Install driver model protocol(s).
-  //
-  Status = EfiLibInstallAllDriverProtocols2 (
-             ImageHandle,
-             SystemTable,
-             &gIDEBusDriverBinding,
-             ImageHandle,
-             &gIDEBusComponentName,
-             &gIDEBusComponentName2,
-             NULL,
-             NULL,
-             &gIDEBusDriverDiagnostics,
-             &gIDEBusDriverDiagnostics2
-             );
-  ASSERT_EFI_ERROR (Status);
-
-  return Status;
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.h
deleted file mode 100644
index d8711b6..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeBus.h
+++ /dev/null
@@ -1,566 +0,0 @@
-/* $Id: IdeBus.h $ */
-/** @file
- * IdeBus.h
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  Header file for IDE Bus Driver.
-
-  Copyright (c) 2006 - 2007 Intel Corporation. <BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _IDE_BUS_H_
-#define _IDE_BUS_H_
-
-
-
-#include <FrameworkDxe.h>
-
-#include <Protocol/IdeControllerInit.h>
-#include <Protocol/BlockIo.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/DiskInfo.h>
-#include <Protocol/DevicePath.h>
-
-#include <Library/DebugLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/BaseLib.h>
-#include <Library/UefiLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/ReportStatusCodeLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/PerformanceLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/DevicePathLib.h>
-
-#include <Guid/EventGroup.h>
-
-#include <IndustryStandard/Pci.h>
-#include "IdeData.h"
-
-//
-// Global Variables
-//
-extern EFI_DRIVER_BINDING_PROTOCOL      gIDEBusDriverBinding;
-extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL  gIDEBusDriverDiagnostics;
-extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2;
-
-//
-// Extra Definition to porting
-//
-#define MAX_IDE_DEVICE    4
-#define MAX_IDE_CHANNELS  2
-#define MAX_IDE_DRIVES    2
-
-#define INVALID_DEVICE_TYPE 0xff
-#define ATA_DEVICE_TYPE     0x00
-#define ATAPI_DEVICE_TYPE   0x01
-
-typedef struct {
-  BOOLEAN HaveScannedDevice[MAX_IDE_DEVICE];
-  BOOLEAN DeviceFound[MAX_IDE_DEVICE];
-  BOOLEAN DeviceProcessed[MAX_IDE_DEVICE];
-} IDE_BUS_DRIVER_PRIVATE_DATA;
-
-#define IDE_BLK_IO_DEV_SIGNATURE  SIGNATURE_32 ('i', 'b', 'i', 'd')
-
-typedef struct {
-  UINT32                      Signature;
-
-  EFI_HANDLE                  Handle;
-  EFI_BLOCK_IO_PROTOCOL       BlkIo;
-  EFI_BLOCK_IO_MEDIA          BlkMedia;
-  EFI_DISK_INFO_PROTOCOL      DiskInfo;
-  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
-  EFI_PCI_IO_PROTOCOL         *PciIo;
-  IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;
-
-  //
-  // Local Data for IDE interface goes here
-  //
-  EFI_IDE_CHANNEL             Channel;
-  EFI_IDE_DEVICE              Device;
-  UINT16                      Lun;
-  IDE_DEVICE_TYPE             Type;
-
-  IDE_BASE_REGISTERS          *IoPort;
-  UINT16                      AtapiError;
-
-  ATAPI_INQUIRY_DATA                *InquiryData;
-  EFI_IDENTIFY_DATA           *IdData;
-  ATA_PIO_MODE                PioMode;
-  EFI_ATA_MODE                UdmaMode;
-  CHAR8                       ModelName[41];
-  ATAPI_REQUEST_SENSE_DATA          *SenseData;
-  UINT8                       SenseDataNumber;
-  UINT8                       *Cache;
-
-  //
-  // ExitBootService Event, it is used to clear pending IDE interrupt
-  //
-  EFI_EVENT                   ExitBootServiceEvent;
-
-  EFI_UNICODE_STRING_TABLE    *ControllerNameTable;
-} IDE_BLK_IO_DEV;
-
-#include "ComponentName.h"
-
-#define IDE_BLOCK_IO_DEV_FROM_THIS(a)           CR (a, IDE_BLK_IO_DEV, BlkIo, IDE_BLK_IO_DEV_SIGNATURE)
-#define IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS(a) CR (a, IDE_BLK_IO_DEV, DiskInfo, IDE_BLK_IO_DEV_SIGNATURE)
-
-#include "Ide.h"
-
-
-/**
-  Supported function of Driver Binding protocol for this driver.
-
-  @param This                A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
-  @param ControllerHandle    The handle of the controller to test.
-  @param RemainingDevicePath A pointer to the remaining portion of a device path.
-
-  @retval  EFI_SUCCESS Driver loaded.
-  @retval  other       Driver not loaded.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverBindingSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  );
-
-/**
-  Start function of Driver binding protocol which start this driver on Controller
-  by detecting all disks and installing BlockIo protocol on them.
-
-  @param  This                Protocol instance pointer.
-  @param  Controller          Handle of device to bind driver to.
-  @param  RemainingDevicePath produce all possible children.
-
-  @retval  EFI_SUCCESS         This driver is added to ControllerHandle.
-  @retval  EFI_ALREADY_STARTED This driver is already running on ControllerHandle.
-  @retval  other               This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverBindingStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  );
-
-/**
-  Stop function of Driver Binding Protocol which is to stop the driver on Controller Handle and all
-  child handle attached to the controller handle if there are.
-
-  @param  This Protocol instance pointer.
-  @param  Controller Handle of device to stop driver on
-  @param  NumberOfChildren Not used
-  @param  ChildHandleBuffer Not used
-
-  @retval  EFI_SUCCESS This driver is removed DeviceHandle
-  @retval  other This driver was not removed from this device
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverBindingStop (
-  IN  EFI_DRIVER_BINDING_PROTOCOL *This,
-  IN  EFI_HANDLE                  Controller,
-  IN  UINTN                       NumberOfChildren,
-  IN  EFI_HANDLE                  *ChildHandleBuffer
-  );
-
-//
-// EFI Driver Configuration Functions
-//
-/**
-  Allows the user to set controller specific options for a controller that a
-  driver is currently managing.
-
-  @param  This              A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.
-  @param  ControllerHandle  The handle of the controller to set options on.
-  @param  ChildHandle       The handle of the child controller to set options on.
-                            This is an optional parameter that may be NULL.
-                            It will be NULL for device drivers, and for a bus drivers
-                            that wish to set options for the bus controller.
-                            It will not be NULL for a bus driver that wishes to set
-                            options for one of its child controllers.
-  @param  Language          A pointer to a three character ISO 639-2 language identifier.
-                            This is the language of the user interface that should be presented
-                            to the user, and it must match one of the languages specified in
-                            SupportedLanguages. The number of languages supported by a driver is up to
-                            the driver writer.
-  @param  ActionRequired    A pointer to the action that the calling agent is required
-                            to perform when this function returns.
-
-
-  @retval  EFI_SUCCESS           The driver specified by This successfully set the configuration
-                                 options for the controller specified by ControllerHandle..
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ActionRequired is NULL.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support setting configuration options for
-                                 the controller specified by ControllerHandle and ChildHandle.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the language specified by Language.
-  @retval  EFI_DEVICE_ERROR      A device error occurred while attempt to set the configuration options for the
-                                 controller specified by ControllerHandle and ChildHandle.
-  @retval  EFI_OUT_RESOURCES     There are not enough resources available to set the configuration options for the
-                                 controller specified by ControllerHandle and ChildHandle
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverConfigurationSetOptions (
-  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL                      *This,
-  IN  EFI_HANDLE                                             ControllerHandle,
-  IN  EFI_HANDLE                                             ChildHandle  OPTIONAL,
-  IN  CHAR8                                                  *Language,
-  OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED               *ActionRequired
-  );
-
-/**
-  Tests to see if a controller's current configuration options are valid.
-
-  @param  This             A pointer to the EFI_DRIVER_CONFIGURATION_PROTOCOL instance.
-  @param  ControllerHandle The handle of the controller to test if it's current configuration options
-                           are valid.
-  @param  ChildHandle      The handle of the child controller to test if it's current configuration
-                           options are valid.  This is an optional parameter that may be NULL. It will
-                           be NULL for device drivers.  It will also be NULL for a bus drivers that
-                           wish to test the configuration options for the bus controller. It will
-                           not be NULL for a bus driver that wishes to test configuration options for
-                           one of its child controllers.
-  @retval  EFI_SUCCESS           The controller specified by ControllerHandle and ChildHandle that is being
-                                 managed by the driver specified by This has a valid set of  configuration
-                                 options.
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_UNSUPPORTED       The driver specified by This is not currently  managing the controller
-                                 specified by ControllerHandle and ChildHandle.
-  @retval  EFI_DEVICE_ERROR      The controller specified by ControllerHandle and ChildHandle that is being
-                                 managed by the driver specified by This has an invalid set of configuration
-                                 options.
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverConfigurationOptionsValid (
-  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL               *This,
-  IN  EFI_HANDLE                                      ControllerHandle,
-  IN  EFI_HANDLE                                      ChildHandle  OPTIONAL
-  );
-
-/**
-  Forces a driver to set the default configuration options for a controller.
-
-  @param  This             A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.
-  @param  ControllerHandle The handle of the controller to force default configuration options on.
-  @param  ChildHandle      The handle of the child controller to force default configuration
-                           options on  This is an optional parameter that may be NULL.  It
-                           will be NULL for device drivers. It will also be NULL for a bus
-                           drivers that wish to force default configuration options for the bus
-                           controller.  It will not be NULL for a bus driver that wishes to force
-                           default configuration options for one of its child controllers.
-  @param  DefaultType      The type of default configuration options to force on the controller
-                           specified by ControllerHandle and ChildHandle.
-  @param  ActionRequired   A pointer to the action that the calling agent is required to perform
-                           when this function returns.
-
-  @retval  EFI_SUCCESS           The driver specified by This successfully forced the
-                                 default configuration options on the controller specified by
-                                 ControllerHandle and ChildHandle.
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ActionRequired is NULL.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support forcing the default
-                                 configuration options on the controller specified by ControllerHandle
-                                 and ChildHandle.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the configuration type
-                                 specified by DefaultType.
-  @retval  EFI_DEVICE_ERROR      A device error occurred while attempt to force the default configuration
-                                 options on the controller specified by  ControllerHandle and ChildHandle.
-  @retval  EFI_OUT_RESOURCES     There are not enough resources available to force the default configuration
-                                 options on the controller specified by ControllerHandle and ChildHandle.
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverConfigurationForceDefaults (
-  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL                      *This,
-  IN  EFI_HANDLE                                             ControllerHandle,
-  IN  EFI_HANDLE                                             ChildHandle  OPTIONAL,
-  IN  UINT32                                                 DefaultType,
-  OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED               *ActionRequired
-  );
-
-//
-// EFI Driver Diagnostics Functions
-//
-/**
-  Runs diagnostics on a controller.
-
-  @param  This             A pointer to the EFI_DRIVER_DIAGNOSTICS_PROTOCOLinstance.
-  @param  ControllerHandle The handle of the controller to run diagnostics on.
-  @param  ChildHandle      The handle of the child controller to run diagnostics on
-                           This is an optional parameter that may be NULL.  It will
-                           be NULL for device drivers.  It will also be NULL for a
-                           bus drivers that wish to run diagnostics on the bus controller.
-                           It will not be NULL for a bus driver that wishes to run
-                           diagnostics on one of its child controllers.
-  @param  DiagnosticType   Indicates type of diagnostics to perform on the controller
-                           specified by ControllerHandle and ChildHandle.
-  @param  Language         A pointer to a three character ISO 639-2 language identifier.
-                           This is the language in which the optional error message should
-                           be returned in Buffer, and it must match one of the languages
-                           specified in SupportedLanguages. The number of languages supported by
-                           a driver is up to the driver writer.
-  @param  ErrorType        A GUID that defines the format of the data returned in Buffer.
-  @param  BufferSize       The size, in bytes, of the data returned in Buffer.
-  @param  Buffer           A buffer that contains a Null-terminated Unicode string
-                           plus some additional data whose format is defined by ErrorType.
-                           Buffer is allocated by this function with AllocatePool(), and
-                           it is the caller's responsibility to free it with a call to FreePool().
-
-  @retval  EFI_SUCCESS           The controller specified by ControllerHandle and ChildHandle passed
-                                 the diagnostic.
-  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
-  @retval  EFI_INVALID_PARAMETER Language is NULL.
-  @retval  EFI_INVALID_PARAMETER ErrorType is NULL.
-  @retval  EFI_INVALID_PARAMETER BufferType is NULL.
-  @retval  EFI_INVALID_PARAMETER Buffer is NULL.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support running
-                                 diagnostics for the controller specified by ControllerHandle
-                                 and ChildHandle.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the
-                                 type of diagnostic specified by DiagnosticType.
-  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the language
-                                 specified by Language.
-  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to complete the
-                                 diagnostics.
-  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to return the
-                                 status information in ErrorType, BufferSize,and Buffer.
-  @retval  EFI_DEVICE_ERROR      The controller specified by ControllerHandle and ChildHandle
-                                 did not pass the diagnostic.
-**/
-EFI_STATUS
-EFIAPI
-IDEBusDriverDiagnosticsRunDiagnostics (
-  IN  EFI_DRIVER_DIAGNOSTICS_PROTOCOL               *This,
-  IN  EFI_HANDLE                                    ControllerHandle,
-  IN  EFI_HANDLE                                    ChildHandle  OPTIONAL,
-  IN  EFI_DRIVER_DIAGNOSTIC_TYPE                    DiagnosticType,
-  IN  CHAR8                                         *Language,
-  OUT EFI_GUID                                      **ErrorType,
-  OUT UINTN                                         *BufferSize,
-  OUT CHAR16                                        **Buffer
-  );
-
-/**
-  issue ATA or ATAPI command to reset a block IO device.
-  @param  This                  Block IO protocol instance pointer.
-  @param  ExtendedVerification  If FALSE,for ATAPI device, driver will only invoke ATAPI reset method
-                                If TRUE, for ATAPI device, driver need invoke ATA reset method after
-                                invoke ATAPI reset method
-
-  @retval EFI_DEVICE_ERROR      When the device is neighther ATA device or ATAPI device.
-  @retval EFI_SUCCESS           The device reset successfully
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoReset (
-  IN  EFI_BLOCK_IO_PROTOCOL       *This,
-  IN  BOOLEAN                     ExtendedVerification
-  );
-
-/**
-  Read data from a block IO device.
-
-  @param  This       Block IO protocol instance pointer.
-  @param  MediaId    The media ID of the device
-  @param  Lba        Starting LBA address to read data
-  @param  BufferSize The size of data to be read
-  @param  Buffer     Caller supplied buffer to save data
-
-  @retval EFI_DEVICE_ERROR  unknown device type
-  @retval EFI_SUCCESS       read the data successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoReadBlocks (
-  IN  EFI_BLOCK_IO_PROTOCOL       *This,
-  IN  UINT32                      MediaId,
-  IN  EFI_LBA                     Lba,
-  IN  UINTN                       BufferSize,
-  OUT VOID                        *Buffer
-  );
-
-/**
-  Write data to block io device
-
-  @param  This       Protocol instance pointer.
-  @param  MediaId    The media ID of the device
-  @param  Lba        Starting LBA address to write data
-  @param  BufferSize The size of data to be written
-  @param  Buffer     Caller supplied buffer to save data
-
-  @retval EFI_DEVICE_ERROR  unknown device type
-  @retval other             write data status
-
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoWriteBlocks (
-  IN  EFI_BLOCK_IO_PROTOCOL       *This,
-  IN  UINT32                      MediaId,
-  IN  EFI_LBA                     Lba,
-  IN  UINTN                       BufferSize,
-  IN  VOID                        *Buffer
-  );
-
-/**
-  Flushes all modified data to a physical block devices
-
-  @param  This  Indicates a pointer to the calling context which to specify a
-                specific block device
-
-  @retval EFI_SUCCESS   Always return success.
-**/
-EFI_STATUS
-EFIAPI
-IDEBlkIoFlushBlocks (
-  IN  EFI_BLOCK_IO_PROTOCOL       *This
-  );
-/**
-  This function is used by the IDE bus driver to get inquiry data.
-  Data format of Identify data is defined by the Interface GUID.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  InquiryData           Pointer to a buffer for the inquiry data.
-  @param  InquiryDataSize       Pointer to the value for the inquiry data size.
-
-  @retval EFI_SUCCESS           The command was accepted without any errors.
-  @retval EFI_NOT_FOUND         Device does not support this data class
-  @retval EFI_DEVICE_ERROR      Error reading InquiryData from device
-  @retval EFI_BUFFER_TOO_SMALL  InquiryDataSize not big enough
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoInquiry (
-  IN EFI_DISK_INFO_PROTOCOL       *This,
-  IN OUT VOID                     *InquiryData,
-  IN OUT UINT32                   *InquiryDataSize
-  );
-
-/**
-  This function is used by the IDE bus driver to get identify data.
-  Data format of Identify data is defined by the Interface GUID.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  IdentifyData          Pointer to a buffer for the identify data.
-  @param  IdentifyDataSize      Pointer to the value for the identify data size.
-
-  @retval EFI_SUCCESS           The command was accepted without any errors.
-  @retval EFI_NOT_FOUND         Device does not support this data class
-  @retval EFI_DEVICE_ERROR      Error reading IdentifyData from device
-  @retval EFI_BUFFER_TOO_SMALL  IdentifyDataSize not big enough
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoIdentify (
-  IN EFI_DISK_INFO_PROTOCOL       *This,
-  IN OUT VOID                     *IdentifyData,
-  IN OUT UINT32                   *IdentifyDataSize
-  );
-
-/**
-  This function is used by the IDE bus driver to get sense data.
-  Data format of Sense data is defined by the Interface GUID.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  SenseData             Pointer to the SenseData.
-  @param  SenseDataSize         Size of SenseData in bytes.
-  @param  SenseDataNumber       Pointer to the value for the identify data size.
-
-  @retval EFI_SUCCESS           The command was accepted without any errors.
-  @retval EFI_NOT_FOUND         Device does not support this data class
-  @retval EFI_DEVICE_ERROR      Error reading InquiryData from device
-  @retval EFI_BUFFER_TOO_SMALL  SenseDataSize not big enough
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoSenseData (
-  IN EFI_DISK_INFO_PROTOCOL       *This,
-  IN OUT VOID                     *SenseData,
-  IN OUT UINT32                   *SenseDataSize,
-  OUT UINT8                       *SenseDataNumber
-  );
-
-/**
-  This function is used by the IDE bus driver to get controller information.
-
-  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
-  @param  IdeChannel            Pointer to the Ide Channel number. Primary or secondary.
-  @param  IdeDevice             Pointer to the Ide Device number. Master or slave.
-
-  @retval EFI_SUCCESS           IdeChannel and IdeDevice are valid
-  @retval EFI_UNSUPPORTED       This is not an IDE device
-
-**/
-EFI_STATUS
-EFIAPI
-IDEDiskInfoWhichIde (
-  IN EFI_DISK_INFO_PROTOCOL       *This,
-  OUT UINT32                      *IdeChannel,
-  OUT UINT32                      *IdeDevice
-  );
-/**
-  The is an event(generally the event is exitBootService event) call back function.
-  Clear pending IDE interrupt before OS loader/kernel take control of the IDE device.
-
-  @param  Event   Pointer to this event
-  @param  Context Event handler private data
-
-**/
-VOID
-EFIAPI
-ClearInterrupt (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  );
-#endif
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeData.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeData.h
deleted file mode 100644
index afec8c1..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/IdeData.h
+++ /dev/null
@@ -1,337 +0,0 @@
-/* $Id: IdeData.h $ */
-/** @file
- * IdeData.h
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  Header file for IDE Bus Driver's Data Structures
-
-  Copyright (c) 2006 - 2007 Intel Corporation. <BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _IDE_DATA_H_
-#define _IDE_DATA_H_
-
-#include <IndustryStandard/Atapi.h>
-
-//
-// common constants
-//
-#define STALL_1_MILLI_SECOND  1000    // stall 1 ms
-#define STALL_1_SECOND        1000000 // stall 1 second
-typedef enum {
-  IdePrimary    = 0,
-  IdeSecondary  = 1,
-  IdeMaxChannel = 2
-} EFI_IDE_CHANNEL;
-
-typedef enum {
-  IdeMaster     = 0,
-  IdeSlave      = 1,
-  IdeMaxDevice  = 2
-} EFI_IDE_DEVICE;
-
-typedef enum {
-  IdeMagnetic,                        /* ZIP Drive or LS120 Floppy Drive */
-  IdeCdRom,                           /* ATAPI CDROM */
-  IdeHardDisk,                        /* Hard Disk */
-  Ide48bitAddressingHardDisk,         /* Hard Disk larger than 120GB */
-  IdeUnknown
-} IDE_DEVICE_TYPE;
-
-typedef enum {
-  SenseNoSenseKey,
-  SenseDeviceNotReadyNoRetry,
-  SenseDeviceNotReadyNeedRetry,
-  SenseNoMedia,
-  SenseMediaChange,
-  SenseMediaError,
-  SenseOtherSense
-} SENSE_RESULT;
-
-typedef enum {
-  AtaUdmaReadOp,
-  AtaUdmaReadExtOp,
-  AtaUdmaWriteOp,
-  AtaUdmaWriteExtOp
-} ATA_UDMA_OPERATION;
-
-//
-// IDE Registers
-//
-typedef union {
-  UINT16  Command;        /* when write */
-  UINT16  Status;         /* when read */
-} IDE_CMD_OR_STATUS;
-
-typedef union {
-  UINT16  Error;          /* when read */
-  UINT16  Feature;        /* when write */
-} IDE_ERROR_OR_FEATURE;
-
-typedef union {
-  UINT16  AltStatus;      /* when read */
-  UINT16  DeviceControl;  /* when write */
-} IDE_ALTSTATUS_OR_DEVICECONTROL;
-
-//
-// IDE registers set
-//
-typedef struct {
-  UINT16                          Data;
-  IDE_ERROR_OR_FEATURE            Reg1;
-  UINT16                          SectorCount;
-  UINT16                          SectorNumber;
-  UINT16                          CylinderLsb;
-  UINT16                          CylinderMsb;
-  UINT16                          Head;
-  IDE_CMD_OR_STATUS               Reg;
-
-  IDE_ALTSTATUS_OR_DEVICECONTROL  Alt;
-  UINT16                          DriveAddress;
-
-  UINT16                          MasterSlave;
-  UINT16                          BusMasterBaseAddr;
-} IDE_BASE_REGISTERS;
-
-//
-// IDE registers' base addresses
-//
-typedef struct {
-  UINT16  CommandBlockBaseAddr;
-  UINT16  ControlBlockBaseAddr;
-  UINT16  BusMasterBaseAddr;
-} IDE_REGISTERS_BASE_ADDR;
-
-//
-// Bit definitions in Programming Interface byte of the Class Code field
-// in PCI IDE controller's Configuration Space
-//
-#define IDE_PRIMARY_OPERATING_MODE            BIT0
-#define IDE_PRIMARY_PROGRAMMABLE_INDICATOR    BIT1
-#define IDE_SECONDARY_OPERATING_MODE          BIT2
-#define IDE_SECONDARY_PROGRAMMABLE_INDICATOR  BIT3
-
-
-//
-// Bus Master Reg
-//
-#define BMIC_NREAD      BIT3
-#define BMIC_START      BIT0
-#define BMIS_INTERRUPT  BIT2
-#define BMIS_ERROR      BIT1
-
-#define BMICP_OFFSET    0x00
-#define BMISP_OFFSET    0x02
-#define BMIDP_OFFSET    0x04
-#define BMICS_OFFSET    0x08
-#define BMISS_OFFSET    0x0A
-#define BMIDS_OFFSET    0x0C
-
-//
-// Time Out Value For IDE Device Polling
-//
-
-//
-// ATATIMEOUT is used for waiting time out for ATA device
-//
-
-//
-// 1 second
-//
-#define ATATIMEOUT  1000
-
-//
-// ATAPITIMEOUT is used for waiting operation
-// except read and write time out for ATAPI device
-//
-
-//
-// 1 second
-//
-#define ATAPITIMEOUT  1000
-
-//
-// ATAPILONGTIMEOUT is used for waiting read and
-// write operation timeout for ATAPI device
-//
-
-//
-// 2 seconds
-//
-#define CDROMLONGTIMEOUT  2000
-
-//
-// 5 seconds
-//
-#define ATAPILONGTIMEOUT  5000
-
-//
-// 10 seconds
-//
-#define ATASMARTTIMEOUT   10000
-
-
-//
-// ATAPI6 related data structure definition
-//
-
-//
-// The maximum sectors count in 28 bit addressing mode
-//
-#define MAX_28BIT_ADDRESSING_CAPACITY 0xfffffff
-
-#pragma pack(1)
-
-typedef struct {
-  UINT32  RegionBaseAddr;
-  UINT16  ByteCount;
-  UINT16  EndOfTable;
-} IDE_DMA_PRD;
-
-#pragma pack()
-
-#define SETFEATURE        TRUE
-#define CLEARFEATURE      FALSE
-
-///
-/// PIO mode definition
-///
-typedef enum _ATA_PIO_MODE_ {
-  AtaPioModeBelow2,
-  AtaPioMode2,
-  AtaPioMode3,
-  AtaPioMode4
-} ATA_PIO_MODE;
-
-//
-// Multi word DMA definition
-//
-typedef enum _ATA_MDMA_MODE_ {
-  AtaMdmaMode0,
-  AtaMdmaMode1,
-  AtaMdmaMode2
-} ATA_MDMA_MODE;
-
-//
-// UDMA mode definition
-//
-typedef enum _ATA_UDMA_MODE_ {
-  AtaUdmaMode0,
-  AtaUdmaMode1,
-  AtaUdmaMode2,
-  AtaUdmaMode3,
-  AtaUdmaMode4,
-  AtaUdmaMode5
-} ATA_UDMA_MODE;
-
-#define ATA_MODE_CATEGORY_DEFAULT_PIO 0x00
-#define ATA_MODE_CATEGORY_FLOW_PIO    0x01
-#define ATA_MODE_CATEGORY_MDMA        0x04
-#define ATA_MODE_CATEGORY_UDMA        0x08
-
-#pragma pack(1)
-
-typedef struct {
-  UINT8 ModeNumber : 3;
-  UINT8 ModeCategory : 5;
-} ATA_TRANSFER_MODE;
-
-typedef struct {
-  UINT8 Sector;
-  UINT8 Heads;
-  UINT8 MultipleSector;
-} ATA_DRIVE_PARMS;
-
-#pragma pack()
-//
-// IORDY Sample Point field value
-//
-#define ISP_5_CLK 0
-#define ISP_4_CLK 1
-#define ISP_3_CLK 2
-#define ISP_2_CLK 3
-
-//
-// Recovery Time field value
-//
-#define RECVY_4_CLK 0
-#define RECVY_3_CLK 1
-#define RECVY_2_CLK 2
-#define RECVY_1_CLK 3
-
-//
-// Slave IDE Timing Register Enable
-//
-#define SITRE BIT14
-
-//
-// DMA Timing Enable Only Select 1
-//
-#define DTE1  BIT7
-
-//
-// Pre-fetch and Posting Enable Select 1
-//
-#define PPE1  BIT6
-
-//
-// IORDY Sample Point Enable Select 1
-//
-#define IE1 BIT5
-
-//
-// Fast Timing Bank Drive Select 1
-//
-#define TIME1 BIT4
-
-//
-// DMA Timing Enable Only Select 0
-//
-#define DTE0  BIT3
-
-//
-// Pre-fetch and Posting Enable Select 0
-//
-#define PPE0  BIT2
-
-//
-// IOREY Sample Point Enable Select 0
-//
-#define IE0 BIT1
-
-//
-// Fast Timing Bank Drive Select 0
-//
-#define TIME0 BIT0
-
-#endif
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/VBoxIdeBusDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/VBoxIdeBusDxe.inf
deleted file mode 100644
index c16fc5b..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeBusDxe/VBoxIdeBusDxe.inf
+++ /dev/null
@@ -1,112 +0,0 @@
-# $Id: VBoxIdeBusDxe.inf $
-## @file
-# VBoxIdeBusDxe.inf
-#
-
-#
-# Copyright (C) 2010 Oracle Corporation
-#
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-#
-# The contents of this file may alternatively be used under the terms
-# of the Common Development and Distribution License Version 1.0
-# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-# VirtualBox OSE distribution, in which case the provisions of the
-# CDDL are applicable instead of those of the GPL.
-#
-# You may elect to license modified versions of this file under the
-# terms and conditions of either the GPL or the CDDL or both.
-#
-
-#/** @file
-# Component description file for IdeBus module.
-#
-# IDE bus driver. This driver will enumerate IDE device and export the blockIo
-#  protocol for every device.
-# Copyright (c) 2006 - 2009, Intel Corporation
-#
-#  All rights reserved. This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution. The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-#**/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = IdeBusDxe
-  FILE_GUID                      = 2f709c46-d2e7-11df-ad38-080027a4ca0d
-  MODULE_TYPE                    = UEFI_DRIVER
-  VERSION_STRING                 = 1.0
-  EFI_SPECIFICATION_VERSION      = 0x00020000
-  ENTRY_POINT                    = InitializeIdeBus
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
-#
-#  DRIVER_BINDING                =  gIDEBusDriverBinding                         
-#  COMPONENT_NAME                =  gIDEBusComponentName
-#  COMPONENT_NAME2               =  gIDEBusComponentName2                         
-#  Variable Guid C Name: gConfigurationGuid Variable Name: L"Configuration"
-#
-#
-
-[Sources.common]
-  DriverDiagnostics.c
-  DriverConfiguration.c
-  ComponentName.h
-  ComponentName.c
-  Atapi.c
-  Ata.c
-  Ide.c
-  IdeBus.c
-  IdeData.h
-  Ide.h
-  IdeBus.h
-
-
-[Packages]
-  MdePkg/MdePkg.dec
-  VBoxPkg/VBoxPkg.dec
-  IntelFrameworkPkg/IntelFrameworkPkg.dec
-  IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec  
-
-
-[LibraryClasses]
-  DevicePathLib
-  UefiRuntimeServicesTableLib
-  UefiBootServicesTableLib
-  PerformanceLib
-  MemoryAllocationLib
-  ReportStatusCodeLib
-  BaseMemoryLib
-  UefiLib
-  BaseLib
-  UefiDriverEntryPoint
-  DebugLib
-
-
-[Guids]
-  gEfiDiskInfoIdeInterfaceGuid                  # CONSUMES  ## GUID
-  gEfiEventExitBootServicesGuid                 # CONSUMES  ## Event
-
-
-[Protocols]
-  gEfiDiskInfoProtocolGuid                      # BY_START
-  gEfiBlockIoProtocolGuid                       # BY_START
-  gEfiIdeControllerInitProtocolGuid             # TO_START
-  gEfiPciIoProtocolGuid                         # TO_START
-  gEfiDevicePathProtocolGuid                    # TO_START
-
-
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/ComponentName.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/ComponentName.c
deleted file mode 100644
index a6bbc05..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/ComponentName.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* $Id: ComponentName.c $ */
-/** @file
- * ComponentName.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  This portion is to register the IDE Controller Driver name:
-  "IDE Controller Init Driver"
-
-  Copyright (c) 2008 Intel Corporation. <BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "IdeController.h"
-
-//
-// EFI Component Name Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gIdeControllerComponentName = {
-  IdeControllerComponentNameGetDriverName,
-  IdeControllerComponentNameGetControllerName,
-  "eng"
-};
-
-//
-// EFI Component Name 2 Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2 = {
-  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) IdeControllerComponentNameGetDriverName,
-  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) IdeControllerComponentNameGetControllerName,
-  "en"
-};
-
-//
-// Driver Name Strings
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerDriverNameTable[] = {
-  {
-    "eng;en",
-    (CHAR16 *)L"IDE Controller Init Driver"
-  },
-  {
-    NULL,
-    NULL
-  }
-};
-
-//
-// Controller Name Strings
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerControllerNameTable[] = {
-  {
-    "eng;en",
-    (CHAR16 *)L"PCAT IDE Controller"
-  },
-  {
-    NULL,
-    NULL
-  }
-};
-
-EFI_STATUS
-EFIAPI
-IdeControllerComponentNameGetDriverName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **DriverName
-  )
-/*++
-
-  Routine Description:
-    Retrieves a Unicode string that is the user readable name of the EFI Driver.
-
-  Arguments:
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-    Language   - A pointer to a three character ISO 639-2 language identifier.
-                 This is the language of the driver name that that the caller
-                 is requesting, and it must match one of the languages specified
-                 in SupportedLanguages.  The number of languages supported by a
-                 driver is up to the driver writer.
-    DriverName - A pointer to the Unicode string to return.  This Unicode string
-                 is the name of the driver specified by This in the language
-                 specified by Language.
-
-  Returns:
-    EFI_SUCCESS           - The Unicode string for the Driver specified by This
-                            and the language specified by Language was returned
-                            in DriverName.
-    EFI_INVALID_PARAMETER - Language is NULL.
-    EFI_INVALID_PARAMETER - DriverName is NULL.
-    EFI_UNSUPPORTED       - The driver specified by This does not support the
-                            language specified by Language.
-
---*/
-{
-  return LookupUnicodeString2 (
-           Language,
-           This->SupportedLanguages,
-           mIdeControllerDriverNameTable,
-           DriverName,
-           (BOOLEAN)(This == &gIdeControllerComponentName)
-           );
-}
-
-EFI_STATUS
-EFIAPI
-IdeControllerComponentNameGetControllerName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
-  IN  EFI_HANDLE                                      ControllerHandle,
-  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
-  IN  CHAR8                                           *Language,
-  OUT CHAR16                                          **ControllerName
-  )
-/*++
-
-  Routine Description:
-    Retrieves a Unicode string that is the user readable name of the controller
-    that is being managed by an EFI Driver.
-
-  Arguments:
-    This             - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-    ControllerHandle - The handle of a controller that the driver specified by
-                       This is managing.  This handle specifies the controller
-                       whose name is to be returned.
-    ChildHandle      - The handle of the child controller to retrieve the name
-                       of.  This is an optional parameter that may be NULL.  It
-                       will be NULL for device drivers.  It will also be NULL
-                       for a bus drivers that wish to retrieve the name of the
-                       bus controller.  It will not be NULL for a bus driver
-                       that wishes to retrieve the name of a child controller.
-    Language         - A pointer to a three character ISO 639-2 language
-                       identifier.  This is the language of the controller name
-                       that that the caller is requesting, and it must match one
-                       of the languages specified in SupportedLanguages.  The
-                       number of languages supported by a driver is up to the
-                       driver writer.
-    ControllerName   - A pointer to the Unicode string to return.  This Unicode
-                       string is the name of the controller specified by
-                       ControllerHandle and ChildHandle in the language
-                       specified by Language from the point of view of the
-                       driver specified by This.
-
-  Returns:
-    EFI_SUCCESS           - The Unicode string for the user readable name in the
-                            language specified by Language for the driver
-                            specified by This was returned in DriverName.
-    EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.
-    EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid
-                            EFI_HANDLE.
-    EFI_INVALID_PARAMETER - Language is NULL.
-    EFI_INVALID_PARAMETER - ControllerName is NULL.
-    EFI_UNSUPPORTED       - The driver specified by This is not currently
-                            managing the controller specified by
-                            ControllerHandle and ChildHandle.
-    EFI_UNSUPPORTED       - The driver specified by This does not support the
-                            language specified by Language.
-
---*/
-{
-  EFI_STATUS            Status;
-
-  //
-  // Make sure this driver is currently managing ControllHandle
-  //
-  Status = EfiTestManagedDevice (
-             ControllerHandle,
-             gIdeControllerDriverBinding.DriverBindingHandle,
-             &gEfiPciIoProtocolGuid
-             );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  if (ChildHandle != NULL) {
-    return EFI_UNSUPPORTED;
-  }
-
-  return LookupUnicodeString2 (
-          Language,
-          This->SupportedLanguages,
-          mIdeControllerControllerNameTable,
-          ControllerName,
-          (BOOLEAN)(This == &gIdeControllerComponentName)
-          );
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/IdeController.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/IdeController.c
deleted file mode 100644
index 73c6a5f..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/IdeController.c
+++ /dev/null
@@ -1,566 +0,0 @@
-/* $Id: IdeController.c $ */
-/** @file
- * IdeController.c
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  This driver module produces IDE_CONTROLLER_INIT protocol and will be used by
-  IDE Bus driver to support platform dependent timing information. This driver
-  is responsible for early initialization of IDE controller.
-
-  Copyright (c) 2008 - 2009 Intel Corporation. <BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "IdeController.h"
-
-//
-//  EFI_DRIVER_BINDING_PROTOCOL instance
-//
-EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding = {
-  IdeControllerSupported,
-  IdeControllerStart,
-  IdeControllerStop,
-  0xa,
-  NULL,
-  NULL
-};
-
-//
-//  EFI_IDE_CONTROLLER_PROVATE_DATA Template
-//
-EFI_IDE_CONTROLLER_INIT_PROTOCOL  gEfiIdeControllerInit = {
-  IdeInitGetChannelInfo,
-  IdeInitNotifyPhase,
-  IdeInitSubmitData,
-  IdeInitDisqualifyMode,
-  IdeInitCalculateMode,
-  IdeInitSetTiming,
-  ICH_IDE_ENUMER_ALL,
-  ICH_IDE_MAX_CHANNEL
-};
-
-//
-//  EFI_ATA_COLLECTIVE_MODE Template
-//
-EFI_ATA_COLLECTIVE_MODE  gEfiAtaCollectiveModeTemplate = {
-  {
-    TRUE,                   // PioMode.Valid
-    0                       // PioMode.Mode
-  },
-  {
-    TRUE,                   // SingleWordDmaMode.Valid
-    0
-  },
-  {
-    FALSE,                  // MultiWordDmaMode.Valid
-    0
-  },
-  {
-    TRUE,                   // UdmaMode.Valid
-    0                       // UdmaMode.Mode
-  }
-};
-
-static BOOLEAN gfIdeAhciEmulation = FALSE;
-
-EFI_STATUS
-EFIAPI
-InitializeIdeControllerDriver (
-  IN EFI_HANDLE       ImageHandle,
-  IN EFI_SYSTEM_TABLE *SystemTable
-  )
-/*++
-  Routine Description:
-
-    Chipset Ide Driver EntryPoint function. It follows the standard EFI driver
-    model. It's called by StartImage() of DXE Core
-
-  Arguments:
-
-    ImageHandle  -- While the driver image loaded be the ImageLoader(),
-                    an image handle is assigned to this driver binary,
-                    all activities of the driver is tied to this ImageHandle
-    *SystemTable -- A pointer to the system table, for all BS(Boo Services) and
-                    RT(Runtime Services)
-
-  Returns:
-
-    Always call EfiLibInstallDriverBindingProtocol( ) and return the result
-
---*/
-{
-  EFI_STATUS  Status;
-
-  //
-  // Install driver model protocol(s).
-  //
-  Status = EfiLibInstallDriverBindingComponentName2 (
-             ImageHandle,
-             SystemTable,
-             &gIdeControllerDriverBinding,
-             ImageHandle,
-             &gIdeControllerComponentName,
-             &gIdeControllerComponentName2
-             );
-  ASSERT_EFI_ERROR (Status);
-
-  return Status;
-}
-
-EFI_STATUS
-EFIAPI
-IdeControllerSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL *This,
-  IN EFI_HANDLE                  Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL    *RemainingDevicePath
-  )
-/*++
-
-  Routine Description:
-
-  Register Driver Binding protocol for this driver.
-
-  Arguments:
-
-    This                 -- a pointer points to the Binding Protocol instance
-    Controller           -- The handle of controller to be tested.
-    *RemainingDevicePath -- A pointer to the device path. Ignored by device
-                            driver but used by bus driver
-
-  Returns:
-
-    EFI_SUCCESS          -- Driver loaded.
-    other                -- Driver not loaded.
---*/
-{
-  EFI_STATUS                Status;
-  EFI_PCI_IO_PROTOCOL       *PciIo;
-  UINT8                     PciClass;
-  UINT8                     PciSubClass;
-
-  //
-  // Attempt to Open PCI I/O Protocol
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **) &PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Now further check the PCI header: Base class (offset 0x0B) and
-  // Sub Class (offset 0x0A). This controller should be an Ide controller
-  //
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        PCI_CLASSCODE_OFFSET + 2,
-                        1,
-                        &PciClass
-                        );
-  if (EFI_ERROR (Status)) {
-    goto Done;
-  }
-
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        PCI_CLASSCODE_OFFSET + 1,
-                        1,
-                        &PciSubClass
-                        );
-  if (EFI_ERROR (Status)) {
-    goto Done;
-  }
-
-  //
-  // Examine Ide PCI Configuration table fields
-  //
-  if ((PciClass != PCI_CLASS_MASS_STORAGE) || ((PciSubClass != PCI_CLASS_MASS_STORAGE_IDE) && (PciSubClass != 0x06 /*SATA*/))) {
-    Status = EFI_UNSUPPORTED;
-  }
-  if (PciSubClass == 0x6)
-    gfIdeAhciEmulation = TRUE;
-
-Done:
-  gBS->CloseProtocol (
-        Controller,
-        &gEfiPciIoProtocolGuid,
-        This->DriverBindingHandle,
-        Controller
-        );
-
-  return Status;
-}
-
-EFI_STATUS
-EFIAPI
-IdeControllerStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
-  )
-/*++
-
-  Routine Description:
-
-    This routine is called right after the .Supported() called and return
-    EFI_SUCCESS. Notes: The supported protocols are checked but the Protocols
-    are closed.
-
-  Arguments:
-
-    This                 -- a pointer points to the Binding Protocol instance
-    Controller           -- The handle of controller to be tested. Parameter
-                            passed by the caller
-    *RemainingDevicePath -- A pointer to the device path. Should be ignored by
-                            device driver
---*/
-{
-  EFI_STATUS           Status;
-  EFI_PCI_IO_PROTOCOL  *PciIo;
-
-  //
-  // Now test and open the EfiPciIoProtocol
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **) &PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  //
-  // Status == EFI_SUCCESS - A normal execution flow, SUCCESS and the program proceeds.
-  // Status == ALREADY_STARTED - A non-zero Status code returned. It indicates
-  //           that the protocol has been opened and should be treated as a
-  //           normal condition and the program proceeds. The Protocol will not
-  //           opened 'again' by this call.
-  // Status != ALREADY_STARTED - Error status, terminate program execution
-  //
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Install IDE_CONTROLLER_INIT protocol
-  //
-  return gBS->InstallMultipleProtocolInterfaces (
-                &Controller,
-                &gEfiIdeControllerInitProtocolGuid, &gEfiIdeControllerInit,
-                NULL
-                );
-}
-
-EFI_STATUS
-EFIAPI
-IdeControllerStop (
-  IN  EFI_DRIVER_BINDING_PROTOCOL     *This,
-  IN  EFI_HANDLE                      Controller,
-  IN  UINTN                           NumberOfChildren,
-  IN  EFI_HANDLE                      *ChildHandleBuffer
-  )
-/*++
-
-  Routine Description:
-    Stop this driver on Controller Handle.
-
-  Arguments:
-    This              - Protocol instance pointer.
-    Controller        - Handle of device to stop driver on
-    NumberOfChildren  - Not used
-    ChildHandleBuffer - Not used
-
-  Returns:
-    EFI_SUCCESS       - This driver is removed DeviceHandle
-    other             - This driver was not removed from this device
-
---*/
-{
-  EFI_STATUS                        Status;
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *IdeControllerInit;
-
-  //
-  // Open the produced protocol
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiIdeControllerInitProtocolGuid,
-                  (VOID **) &IdeControllerInit,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-     return EFI_UNSUPPORTED;
-  }
-
-  //
-  // Make sure the protocol was produced by this driver
-  //
-  if (IdeControllerInit != &gEfiIdeControllerInit) {
-    return EFI_UNSUPPORTED;
-  }
-
-  //
-  // Uninstall the IDE Controller Init Protocol
-  //
-  Status = gBS->UninstallMultipleProtocolInterfaces (
-                  Controller,
-                  &gEfiIdeControllerInitProtocolGuid, &gEfiIdeControllerInit,
-                  NULL
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Close protocols opened by Ide controller driver
-  //
-  return gBS->CloseProtocol (
-                Controller,
-                &gEfiPciIoProtocolGuid,
-                This->DriverBindingHandle,
-                Controller
-                );
-}
-
-//
-// Interface functions of IDE_CONTROLLER_INIT protocol
-//
-EFI_STATUS
-EFIAPI
-IdeInitGetChannelInfo (
-  IN   EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
-  IN   UINT8                            Channel,
-  OUT  BOOLEAN                          *Enabled,
-  OUT  UINT8                            *MaxDevices
-  )
-/*++
-Routine Description:
-
-  This function can be used to obtain information about a specified channel.
-  It's usually used by IDE Bus driver during enumeration process.
-
-Arguments:
-
-  This       -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  Channel    -- Channel number (0 based, either 0 or 1)
-  Enabled    -- TRUE if the channel is enabled. If the channel is disabled,
-                then it will no be enumerated.
-  MaxDevices -- The Max number of IDE devices that the bus driver can expect
-                on this channel. For ATA/ATAPI, this number is either 1 or 2.
-
-Returns:
-  EFI_STATUS
-
---*/
-{
-  //
-  // Channel number (0 based, either 0 or 1)
-  //
-  if (Channel < ICH_IDE_MAX_CHANNEL) {
-    *Enabled    = TRUE;
-    *MaxDevices = ICH_IDE_MAX_DEVICES;
-    return EFI_SUCCESS;
-  }
-
-  *Enabled = FALSE;
-  return EFI_INVALID_PARAMETER;
-}
-
-
-EFI_STATUS
-EFIAPI
-IdeInitNotifyPhase (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN  EFI_IDE_CONTROLLER_ENUM_PHASE      Phase,
-  IN  UINT8                              Channel
-  )
-/*++
-
-Routine Description:
-
-  This function is called by IdeBus driver before executing certain actions.
-  This allows IDE Controller Init to prepare for each action.
-
-Arguments:
-
-  This     -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  Phase    -- phase indicator defined by IDE_CONTROLLER_INIT protocol
-  Channel  -- Channel number (0 based, either 0 or 1)
-
-Returns:
-
---*/
-{
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-IdeInitSubmitData (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL    *This,
-  IN  UINT8                               Channel,
-  IN  UINT8                               Device,
-  IN  EFI_IDENTIFY_DATA                   *IdentifyData
-  )
-/*++
-
-Routine Description:
-
-  This function is called by IdeBus driver to submit EFI_IDENTIFY_DATA data structure
-  obtained from IDE deivce. This structure is used to set IDE timing
-
-Arguments:
-
-  This         -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  Channel      -- IDE channel number (0 based, either 0 or 1)
-  Device       -- IDE device number
-  IdentifyData -- A pointer to EFI_IDENTIFY_DATA data structure
-
-Returns:
-
---*/
-{
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-IdeInitDisqualifyMode (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL    *This,
-  IN  UINT8                               Channel,
-  IN  UINT8                               Device,
-  IN  EFI_ATA_COLLECTIVE_MODE             *BadModes
-  )
-/*++
-
-Routine Description:
-
-  This function is called by IdeBus driver to disqualify unsupported operation
-  mode on specific IDE device
-
-Arguments:
-
-  This     -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  Channel  -- IDE channel number (0 based, either 0 or 1)
-  Device   -- IDE device number
-  BadModes -- Operation mode indicator
-
-Returns:
-
---*/
-{
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-IdeInitCalculateMode (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL       *This,
-  IN  UINT8                                  Channel,
-  IN  UINT8                                  Device,
-  OUT EFI_ATA_COLLECTIVE_MODE                **SupportedModes
-  )
-/*++
-
-Routine Description:
-
-  This function is called by IdeBus driver to calculate the best operation mode
-  supported by specific IDE device
-
-Arguments:
-
-  This           -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  Channel        -- IDE channel number (0 based, either 0 or 1)
-  Device         -- IDE device number
-  SupportedModes -- Modes collection supported by IDE device
-
-Returns:
-
---*/
-{
-  if (Channel >= ICH_IDE_MAX_CHANNEL || Device >= ICH_IDE_MAX_DEVICES) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  *SupportedModes = AllocateCopyPool (sizeof (EFI_ATA_COLLECTIVE_MODE), &gEfiAtaCollectiveModeTemplate);
-  if (*SupportedModes == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-  EFI_ATA_COLLECTIVE_MODE *pSupportedModes = (*SupportedModes);
-  pSupportedModes->PioMode.Mode = 3; /* AtaPioMode4 see VBoxIdeBusDxe/IdeData.h */
-  if (gfIdeAhciEmulation)
-  {
-     pSupportedModes->UdmaMode.Valid = FALSE;
-     pSupportedModes->MultiWordDmaMode.Valid = FALSE;
-  }
-
-  return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-EFIAPI
-IdeInitSetTiming (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL    *This,
-  IN  UINT8                               Channel,
-  IN  UINT8                               Device,
-  IN  EFI_ATA_COLLECTIVE_MODE             *Modes
-  )
-/*++
-
-Routine Description:
-
-  This function is called by IdeBus driver to set appropriate timing on IDE
-  controller according supported operation mode
-
-Arguments:
-
-  This           -- the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  Channel        -- IDE channel number (0 based, either 0 or 1)
-  Device         -- IDE device number
-
-Returns:
-
---*/
-{
-  return EFI_SUCCESS;
-}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/IdeController.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/IdeController.h
deleted file mode 100644
index 3b0297c..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/IdeController.h
+++ /dev/null
@@ -1,445 +0,0 @@
-/* $Id: IdeController.h $ */
-/** @file
- * IdeController.h
- */
-
-/*
- * Copyright (C) 2009-2010 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/** @file
-  Header file for IDE controller driver.
-
-  Copyright (c) 2008 Intel Corporation. <BR>
-  All rights reserved. This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _IDE_CONTROLLER_H
-#define _IDE_CONTROLLER_H
-
-#include <Uefi.h>
-#include <Protocol/ComponentName.h>
-#include <Protocol/DriverBinding.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/IdeControllerInit.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <IndustryStandard/Pci.h>
-
-//
-// Global Variables definitions
-//
-extern EFI_DRIVER_BINDING_PROTOCOL  gIdeControllerDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL  gIdeControllerComponentName;
-extern EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2;
-
-//
-// Supports 2 channel max
-//
-#define ICH_IDE_MAX_CHANNEL 0x02
-//
-// Supports 2 devices max
-//
-#define ICH_IDE_MAX_DEVICES 0x02
-#define ICH_IDE_ENUMER_ALL  FALSE
-
-//
-// Driver binding functions declaration
-//
-EFI_STATUS
-EFIAPI
-IdeControllerSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL       *This,
-  IN EFI_HANDLE                        Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL          *RemainingDevicePath
-  )
-/*++
-
-  Routine Description:
-
-  Register Driver Binding protocol for this driver.
-
-  Arguments:
-
-    This                 -- a pointer points to the Binding Protocol instance
-    Controller           -- The handle of controller to be tested.
-    *RemainingDevicePath -- A pointer to the device path. Ignored by device
-                            driver but used by bus driver
-
-  Returns:
-
-    EFI_SUCCESS          -- Driver loaded.
-    other                -- Driver not loaded.
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeControllerStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL        *This,
-  IN EFI_HANDLE                         Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL           *RemainingDevicePath
-  )
-/*++
-
-  Routine Description:
-
-    This routine is called right after the .Supported() called and return
-    EFI_SUCCESS. Notes: The supported protocols are checked but the Protocols
-    are closed.
-
-  Arguments:
-
-    This                 -- a pointer points to the Binding Protocol instance
-    Controller           -- The handle of controller to be tested. Parameter
-                            passed by the caller
-    *RemainingDevicePath -- A pointer to the device path. Should be ignored by
-                            device driver
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeControllerStop (
-  IN  EFI_DRIVER_BINDING_PROTOCOL       *This,
-  IN  EFI_HANDLE                        Controller,
-  IN  UINTN                             NumberOfChildren,
-  IN  EFI_HANDLE                        *ChildHandleBuffer
-  )
-/*++
-
-  Routine Description:
-    Stop this driver on Controller Handle.
-
-  Arguments:
-    This              - Protocol instance pointer.
-    Controller        - Handle of device to stop driver on
-    NumberOfChildren  - Not used
-    ChildHandleBuffer - Not used
-
-  Returns:
-    EFI_SUCCESS       - This driver is removed DeviceHandle
-    other             - This driver was not removed from this device
-
---*/
-;
-
-//
-// IDE controller init functions declaration
-//
-EFI_STATUS
-EFIAPI
-IdeInitGetChannelInfo (
-  IN   EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
-  IN   UINT8                            Channel,
-  OUT  BOOLEAN                          *Enabled,
-  OUT  UINT8                            *MaxDevices
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This        - TODO: add argument description
-  Channel     - TODO: add argument description
-  Enabled     - TODO: add argument description
-  MaxDevices  - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeInitNotifyPhase (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
-  IN  EFI_IDE_CONTROLLER_ENUM_PHASE     Phase,
-  OUT UINT8                             Channel
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This    - TODO: add argument description
-  Phase   - TODO: add argument description
-  Channel - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeInitSubmitData (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
-  IN  UINT8                             Channel,
-  IN  UINT8                             Device,
-  IN  EFI_IDENTIFY_DATA                 *IdentifyData
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This          - TODO: add argument description
-  Channel       - TODO: add argument description
-  Device        - TODO: add argument description
-  IdentifyData  - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeInitSubmitFailingModes (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
-  IN  UINT8                             Channel,
-  IN  UINT8                             Device
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This    - TODO: add argument description
-  Channel - TODO: add argument description
-  Device  - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeInitDisqualifyMode (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
-  IN  UINT8                             Channel,
-  IN  UINT8                             Device,
-  IN  EFI_ATA_COLLECTIVE_MODE           *BadModes
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This      - TODO: add argument description
-  Channel   - TODO: add argument description
-  Device    - TODO: add argument description
-  BadModes  - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeInitCalculateMode (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
-  IN  UINT8                             Channel,
-  IN  UINT8                             Device,
-  IN  EFI_ATA_COLLECTIVE_MODE           **SupportedModes
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This            - TODO: add argument description
-  Channel         - TODO: add argument description
-  Device          - TODO: add argument description
-  SupportedModes  - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeInitSetTiming (
-  IN  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
-  IN  UINT8                             Channel,
-  IN  UINT8                             Device,
-  IN  EFI_ATA_COLLECTIVE_MODE           *Modes
-  )
-/*++
-
-Routine Description:
-
-  TODO: Add function description
-
-Arguments:
-
-  This    - TODO: add argument description
-  Channel - TODO: add argument description
-  Device  - TODO: add argument description
-  Modes   - TODO: add argument description
-
-Returns:
-
-  TODO: add return values
-
---*/
-;
-
-//
-// Forward reference declaration
-//
-EFI_STATUS
-EFIAPI
-IdeControllerComponentNameGetDriverName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **DriverName
-  )
-/*++
-
-  Routine Description:
-    Retrieves a Unicode string that is the user readable name of the EFI Driver.
-
-  Arguments:
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-    Language   - A pointer to a three character ISO 639-2 language identifier.
-                 This is the language of the driver name that that the caller
-                 is requesting, and it must match one of the languages specified
-                 in SupportedLanguages.  The number of languages supported by a
-                 driver is up to the driver writer.
-    DriverName - A pointer to the Unicode string to return.  This Unicode string
-                 is the name of the driver specified by This in the language
-                 specified by Language.
-
-  Returns:
-    EFI_SUCCESS           - The Unicode string for the Driver specified by This
-                            and the language specified by Language was returned
-                            in DriverName.
-    EFI_INVALID_PARAMETER - Language is NULL.
-    EFI_INVALID_PARAMETER - DriverName is NULL.
-    EFI_UNSUPPORTED       - The driver specified by This does not support the
-                            language specified by Language.
-
---*/
-;
-
-EFI_STATUS
-EFIAPI
-IdeControllerComponentNameGetControllerName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,
-  IN  EFI_HANDLE                                      ControllerHandle,
-  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,
-  IN  CHAR8                                           *Language,
-  OUT CHAR16                                          **ControllerName
-  )
-/*++
-
-  Routine Description:
-    Retrieves a Unicode string that is the user readable name of the controller
-    that is being managed by an EFI Driver.
-
-  Arguments:
-    This             - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-    ControllerHandle - The handle of a controller that the driver specified by
-                       This is managing.  This handle specifies the controller
-                       whose name is to be returned.
-    ChildHandle      - The handle of the child controller to retrieve the name
-                       of.  This is an optional parameter that may be NULL.  It
-                       will be NULL for device drivers.  It will also be NULL
-                       for a bus drivers that wish to retrieve the name of the
-                       bus controller.  It will not be NULL for a bus driver
-                       that wishes to retrieve the name of a child controller.
-    Language         - A pointer to a three character ISO 639-2 language
-                       identifier.  This is the language of the controller name
-                       that that the caller is requesting, and it must match one
-                       of the languages specified in SupportedLanguages.  The
-                       number of languages supported by a driver is up to the
-                       driver writer.
-    ControllerName   - A pointer to the Unicode string to return.  This Unicode
-                       string is the name of the controller specified by
-                       ControllerHandle and ChildHandle in the language
-                       specified by Language from the point of view of the
-                       driver specified by This.
-
-  Returns:
-    EFI_SUCCESS           - The Unicode string for the user readable name in the
-                            language specified by Language for the driver
-                            specified by This was returned in DriverName.
-    EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.
-    EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid
-                            EFI_HANDLE.
-    EFI_INVALID_PARAMETER - Language is NULL.
-    EFI_INVALID_PARAMETER - ControllerName is NULL.
-    EFI_UNSUPPORTED       - The driver specified by This is not currently
-                            managing the controller specified by
-                            ControllerHandle and ChildHandle.
-    EFI_UNSUPPORTED       - The driver specified by This does not support the
-                            language specified by Language.
-
---*/
-;
-
-#endif
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/VBoxIdeControllerDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/VBoxIdeControllerDxe.inf
deleted file mode 100644
index 1b0cf6b..0000000
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxIdeControllerDxe/VBoxIdeControllerDxe.inf
+++ /dev/null
@@ -1,82 +0,0 @@
-# $Id: VBoxIdeControllerDxe.inf $
-## @file
-# VBoxIdeControllerDxe.inf
-#
-
-#
-# Copyright (C) 2010 Oracle Corporation
-#
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-#
-# The contents of this file may alternatively be used under the terms
-# of the Common Development and Distribution License Version 1.0
-# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-# VirtualBox OSE distribution, in which case the provisions of the
-# CDDL are applicable instead of those of the GPL.
-#
-# You may elect to license modified versions of this file under the
-# terms and conditions of either the GPL or the CDDL or both.
-#
-
-#
-# This code is based on:
-#
-#/** @file
-#  
-#    Component description file for the IDE Controller Init module.
-#
-#  Copyright (c) 2008, Intel Corporation. <BR>
-#  All rights reserved. This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#  
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#  
-#**/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = IdeController
-  FILE_GUID                      = de85315c-d4da-11df-8015-080027a4ca0d
-  MODULE_TYPE                    = UEFI_DRIVER
-  VERSION_STRING                 = 1.0
-  EDK_RELEASE_VERSION            = 0x00020000
-  EFI_SPECIFICATION_VERSION      = 0x00020000
-  ENTRY_POINT                    = InitializeIdeControllerDriver
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
-#
-
-[Sources.common]
-  ComponentName.c
-  IdeController.c
-  IdeController.h
-
-[Packages]
-  VBoxPkg/VBoxPkg.dec
-  MdePkg/MdePkg.dec
-  IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-[LibraryClasses]
-  UefiDriverEntryPoint
-  DebugLib
-  UefiLib
-  BaseLib
-  BaseMemoryLib
-  MemoryAllocationLib
-  UefiBootServicesTableLib
-
-[Protocols]
-  gEfiPciIoProtocolGuid  
-  gEfiIdeControllerInitProtocolGuid
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c
index c816fdf..f267e4f 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c
@@ -85,7 +85,8 @@ VBoxVgaCompleteModeData (
 
   DEBUG((DEBUG_INFO, "%a:%d FrameBufferBase:%x\n", __FILE__, __LINE__, FrameBufDesc->AddrRangeMin));
   Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin;
-  Mode->FrameBufferSize = (UINTN)(FrameBufDesc->AddrRangeMax - FrameBufDesc->AddrRangeMin);
+  Mode->FrameBufferSize = Info->PixelsPerScanLine * Info->VerticalResolution
+                        * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL);    /* 32bpp only! */
 
   return EFI_SUCCESS;
 }
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd
index de413bd..6d4d015 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd differ
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd
index 043d1d8..9eeb19c 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd differ
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
index 2eb6243..a247557 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
@@ -6781,7 +6781,7 @@ vesa_pm_end:                                 ; 0xc4714 LB 0x1
 
 section _DATA progbits vstart=0x4800 align=1 ; size=0x36e1 class=DATA group=DGROUP
 _msg_vga_init:                               ; 0xc4800 LB 0x2f
-    db  'Oracle VM VirtualBox Version 4.3.16 VGA BIOS', 00dh, 00ah, 000h
+    db  'Oracle VM VirtualBox Version 4.3.20 VGA BIOS', 00dh, 00ah, 000h
 _vga_modes:                                  ; 0xc482f LB 0x80
     db  000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
     db  002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
@@ -7669,7 +7669,7 @@ _vbebios_vendor_name:                        ; 0xc7e35 LB 0x13
 _vbebios_product_name:                       ; 0xc7e48 LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
 _vbebios_product_revision:                   ; 0xc7e69 LB 0x24
-    db  'Oracle VM VirtualBox Version 4.3.16', 000h
+    db  'Oracle VM VirtualBox Version 4.3.20', 000h
 _vbebios_info_string:                        ; 0xc7e8d LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
 _no_vbebios_info_string:                     ; 0xc7eb8 LB 0x29
@@ -7700,4 +7700,4 @@ section CONST2 progbits vstart=0x7ee2 align=1 ; size=0x0 class=DATA group=DGROUP
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
index 24e13a6..bca723d 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
@@ -1 +1 @@
-18129b395c9f0948c4a3418cd7956b85 *VBoxVgaBios.rom
+f0c2efede19d504be4e738110eed5820 *VBoxVgaBios.rom
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
index 8d473a0..df3b92c 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
@@ -45,6 +45,9 @@
 //#define DEBUG_GMR_ACCESS
 #endif
 
+/** Converts a display port interface pointer to a vga state pointer. */
+#define IDISPLAYPORT_2_VGASTATE(pInterface) ( (PVGASTATE)((uintptr_t)pInterface - RT_OFFSETOF(VGASTATE, IPort)) )
+
 #include "DevVGA-SVGA.h"
 #include "vmsvga/svga_reg.h"
 #include "vmsvga/svga_escape.h"
@@ -68,6 +71,7 @@ typedef struct
 /* GMR slot */
 typedef struct
 {
+    uint32_t                    cMaxPages;
     uint32_t                    cbTotal;
     uint32_t                    numDescriptors;
     PVMSVGAGMRDESCRIPTOR        paDesc;
@@ -83,6 +87,16 @@ typedef struct
         uint32_t            bytesPerLine;
         SVGAGMRImageFormat  format;
     } GMRFB;
+    struct 
+    {
+        bool                fActive;
+        uint32_t            xHotspot;
+        uint32_t            yHotspot;
+        uint32_t            width;
+        uint32_t            height;
+        uint32_t            cbData;
+        void               *pData;
+    } Cursor;
     SVGAColorBGRX           colorAnnotation;
     STAMPROFILE             StatR3CmdPresent;
     STAMPROFILE             StatR3CmdDrawPrimitive;
@@ -106,6 +120,7 @@ static SSMFIELD const g_aVMSVGAGMRDESCRIPTORFields[] =
  */
 static SSMFIELD const g_aGMRFields[] =
 {
+    SSMFIELD_ENTRY(             GMR, cMaxPages),
     SSMFIELD_ENTRY(             GMR, cbTotal),
     SSMFIELD_ENTRY(             GMR, numDescriptors),
     SSMFIELD_ENTRY_IGN_HCPTR(   GMR, paDesc),
@@ -119,6 +134,13 @@ static SSMFIELD const g_aVMSVGASTATEFields[] =
 {
     SSMFIELD_ENTRY_IGNORE(      VMSVGASTATE, aGMR),
     SSMFIELD_ENTRY(             VMSVGASTATE, GMRFB),
+    SSMFIELD_ENTRY(             VMSVGASTATE, Cursor.fActive),
+    SSMFIELD_ENTRY(             VMSVGASTATE, Cursor.xHotspot),
+    SSMFIELD_ENTRY(             VMSVGASTATE, Cursor.yHotspot),
+    SSMFIELD_ENTRY(             VMSVGASTATE, Cursor.width),
+    SSMFIELD_ENTRY(             VMSVGASTATE, Cursor.height),
+    SSMFIELD_ENTRY(             VMSVGASTATE, Cursor.cbData),
+    SSMFIELD_ENTRY_IGN_HCPTR(   VMSVGASTATE, Cursor.pData),
     SSMFIELD_ENTRY(             VMSVGASTATE, colorAnnotation),
     SSMFIELD_ENTRY_IGNORE(      VMSVGASTATE, StatR3CmdPresent),
     SSMFIELD_ENTRY_IGNORE(      VMSVGASTATE, StatR3CmdDrawPrimitive),
@@ -131,41 +153,43 @@ static SSMFIELD const g_aVMSVGASTATEFields[] =
  */
 static SSMFIELD const g_aVGAStateSVGAFields[] =
 {
-    SSMFIELD_ENTRY_IGNORE(          VGAState, svga.u64HostWindowId),
-    SSMFIELD_ENTRY_IGN_HCPTR(       VGAState, svga.pFIFOR3),
-    SSMFIELD_ENTRY_IGN_HCPTR(       VGAState, svga.pFIFOR0),
-    SSMFIELD_ENTRY_IGN_HCPTR(       VGAState, svga.pSVGAState),
-    SSMFIELD_ENTRY_IGN_HCPTR(       VGAState, svga.p3dState),
-    SSMFIELD_ENTRY_IGNORE(          VGAState, svga.pFrameBufferBackup),
-    SSMFIELD_ENTRY_IGN_GCPHYS(      VGAState, svga.GCPhysFIFO),
-    SSMFIELD_ENTRY_IGNORE(          VGAState, svga.cbFIFO),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32SVGAId),
-    SSMFIELD_ENTRY(                 VGAState, svga.fEnabled),
-    SSMFIELD_ENTRY(                 VGAState, svga.fConfigured),
-    SSMFIELD_ENTRY(                 VGAState, svga.fBusy),
-    SSMFIELD_ENTRY(                 VGAState, svga.fTraces),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32GuestId),
-    SSMFIELD_ENTRY(                 VGAState, svga.cScratchRegion),
-    SSMFIELD_ENTRY(                 VGAState, svga.au32ScratchRegion),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32IrqStatus),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32IrqMask),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32PitchLock),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32CurrentGMRId),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32RegCaps),
-    SSMFIELD_ENTRY_IGNORE(          VGAState, svga.BasePort),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32IndexReg),
-    SSMFIELD_ENTRY_IGNORE(          VGAState, svga.FIFORequestSem),
-    SSMFIELD_ENTRY_IGN_HCPTR(       VGAState, svga.pFIFOIOThread),
-    SSMFIELD_ENTRY(                 VGAState, svga.iWidth),
-    SSMFIELD_ENTRY(                 VGAState, svga.iHeight),
-    SSMFIELD_ENTRY(                 VGAState, svga.iBpp),
-    SSMFIELD_ENTRY(                 VGAState, svga.cbScanline),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32MaxWidth),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32MaxHeight),
-    SSMFIELD_ENTRY(                 VGAState, svga.u32ActionFlags),
-    SSMFIELD_ENTRY(                 VGAState, svga.f3DEnabled),
-    SSMFIELD_ENTRY(                 VGAState, svga.fVRAMTracking),
-    SSMFIELD_ENTRY(                 VGAState, svga.Padding6),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, u64HostWindowId),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, pFIFOR3),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, pFIFOR0),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, pSVGAState),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, p3dState),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, pFrameBufferBackup),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, pFIFOExtCmdParam),    
+    SSMFIELD_ENTRY_IGN_GCPHYS(      VMSVGAState, GCPhysFIFO),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, cbFIFO),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32SVGAId),
+    SSMFIELD_ENTRY(                 VMSVGAState, fEnabled),
+    SSMFIELD_ENTRY(                 VMSVGAState, fConfigured),
+    SSMFIELD_ENTRY(                 VMSVGAState, fBusy),
+    SSMFIELD_ENTRY(                 VMSVGAState, fTraces),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32GuestId),
+    SSMFIELD_ENTRY(                 VMSVGAState, cScratchRegion),
+    SSMFIELD_ENTRY(                 VMSVGAState, au32ScratchRegion),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32IrqStatus),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32IrqMask),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32PitchLock),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32CurrentGMRId),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32RegCaps),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, BasePort),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32IndexReg),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, FIFORequestSem),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, FIFOExtCmdSem),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGAState, pFIFOIOThread),
+    SSMFIELD_ENTRY(                 VMSVGAState, uWidth),
+    SSMFIELD_ENTRY(                 VMSVGAState, uHeight),
+    SSMFIELD_ENTRY(                 VMSVGAState, uBpp),
+    SSMFIELD_ENTRY(                 VMSVGAState, cbScanline),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32MaxWidth),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32MaxHeight),
+    SSMFIELD_ENTRY(                 VMSVGAState, u32ActionFlags),
+    SSMFIELD_ENTRY(                 VMSVGAState, f3DEnabled),
+    SSMFIELD_ENTRY(                 VMSVGAState, fVRAMTracking),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, u8FIFOExtCommand),
     SSMFIELD_ENTRY_TERM()
 };
 #endif /* IN_RING3 */
@@ -422,6 +446,31 @@ static const char *vmsvgaFIFOCmdToString(uint32_t u32Cmd)
 #endif
 
 /**
+ * Inform the VGA device of viewport changes (as a result of e.g. scrolling)
+ *
+ * @param   pInterface          Pointer to this interface.
+ * @param   
+ * @param   uScreenId           The screen updates are for.
+ * @param   x                   The upper left corner x coordinate of the new viewport rectangle
+ * @param   y                   The upper left corner y coordinate of the new viewport rectangle
+ * @param   cx                  The width of the new viewport rectangle
+ * @param   cy                  The height of the new viewport rectangle
+ * @thread  The emulation thread.
+ */
+DECLCALLBACK(void) vmsvgaPortSetViewPort(PPDMIDISPLAYPORT pInterface, uint32_t uScreenId, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
+{
+    PVGASTATE pThis = IDISPLAYPORT_2_VGASTATE(pInterface);
+
+    Log(("vmsvgaPortSetViewPort: screen %d (%d,%d)(%d,%d)\n", uScreenId, x, y, cx, cy));
+
+    pThis->svga.viewport.x  = x;
+    pThis->svga.viewport.y  = y;
+    pThis->svga.viewport.cx = RT_MIN(cx, (uint32_t)pThis->svga.uWidth);
+    pThis->svga.viewport.cy = RT_MIN(cy, (uint32_t)pThis->svga.uHeight);
+    return;
+}
+
+/**
  * Read port register
  *
  * @returns VBox status code.
@@ -446,9 +495,9 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
     case SVGA_REG_WIDTH:
     {
         if (    pThis->svga.fEnabled
-            &&  pThis->svga.iWidth != -1)
+            &&  pThis->svga.uWidth != VMSVGA_VAL_UNINITIALIZED)
         {
-            *pu32 = pThis->svga.iWidth;
+            *pu32 = pThis->svga.uWidth;
         }
         else
         {
@@ -464,9 +513,9 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
     case SVGA_REG_HEIGHT:
     {
         if (    pThis->svga.fEnabled
-            &&  pThis->svga.iHeight != -1)
+            &&  pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
         {
-            *pu32 = pThis->svga.iHeight;
+            *pu32 = pThis->svga.uHeight;
         }
         else
         {
@@ -489,12 +538,12 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
 
     case SVGA_REG_DEPTH:
         /* This returns the color depth of the current mode. */
-        switch (pThis->svga.iBpp)
+        switch (pThis->svga.uBpp)
         {
         case 15:
         case 16:
         case 24:
-            *pu32 = pThis->svga.iBpp;
+            *pu32 = pThis->svga.uBpp;
             break;
 
         default:
@@ -506,9 +555,9 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
 
     case SVGA_REG_HOST_BITS_PER_PIXEL: /* (Deprecated) */
         if (    pThis->svga.fEnabled
-            &&  pThis->svga.iBpp != (unsigned)-1)
+            &&  pThis->svga.uBpp != VMSVGA_VAL_UNINITIALIZED)
         {
-            *pu32 = pThis->svga.iBpp;
+            *pu32 = pThis->svga.uBpp;
         }
         else
         {
@@ -522,9 +571,9 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
 
     case SVGA_REG_BITS_PER_PIXEL:      /* Current bpp in the guest */
         if (    pThis->svga.fEnabled
-            &&  pThis->svga.iBpp != (unsigned)-1)
+            &&  pThis->svga.uBpp != VMSVGA_VAL_UNINITIALIZED)
         {
-            *pu32 = (pThis->svga.iBpp + 7) & ~7;
+            *pu32 = (pThis->svga.uBpp + 7) & ~7;
         }
         else
         {
@@ -544,12 +593,12 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
     case SVGA_REG_GREEN_MASK:
     case SVGA_REG_BLUE_MASK:
     {
-        uint32_t iBpp;
+        uint32_t uBpp;
 
         if (    pThis->svga.fEnabled
-            &&  pThis->svga.iBpp != (unsigned)-1)
+            &&  pThis->svga.uBpp != VMSVGA_VAL_UNINITIALIZED)
         {
-            iBpp = pThis->svga.iBpp;
+            uBpp = pThis->svga.uBpp;
         }
         else
         {
@@ -557,11 +606,11 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
             rc = VINF_IOM_R3_IOPORT_READ;
             break;
 #else
-            iBpp = pThis->pDrv->cBits;
+            uBpp = pThis->pDrv->cBits;
 #endif
         }
         uint32_t u32RedMask, u32GreenMask, u32BlueMask;
-        switch (iBpp)
+        switch (uBpp)
         {
         case 8:
             u32RedMask   = 0x07;
@@ -645,10 +694,10 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
 #else
         /* VMWare testcases want at least 4 MB in case the hardware is disabled. */
         if (    pThis->svga.fEnabled
-            &&  pThis->svga.iHeight != -1)
+            &&  pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
         {
             /* Hardware enabled; return real framebuffer size .*/
-            *pu32 = (uint32_t)pThis->svga.iHeight * pThis->svga.cbScanline;
+            *pu32 = (uint32_t)pThis->svga.uHeight * pThis->svga.cbScanline;
         }
         else
             *pu32 = RT_MAX(0x100000, (uint32_t)pThis->pDrv->cy * pThis->pDrv->cbScanline);
@@ -771,11 +820,11 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
         break;
 
     case SVGA_REG_DISPLAY_WIDTH:     /* The display's width */
-        *pu32 = pThis->svga.iWidth;
+        *pu32 = pThis->svga.uWidth;
         break;
 
     case SVGA_REG_DISPLAY_HEIGHT:    /* The display's height */
-        *pu32 = pThis->svga.iHeight;
+        *pu32 = pThis->svga.uHeight;
         break;
 
     case SVGA_REG_NUM_DISPLAYS:        /* (Deprecated) */
@@ -805,20 +854,29 @@ int vmsvgaChangeMode(PVGASTATE pThis)
 {
     int rc;
 
-    if (    pThis->svga.iWidth == -1
-        ||  pThis->svga.iHeight == -1
-        ||  pThis->svga.iBpp == (unsigned)-1)
+    if (    pThis->svga.uWidth  == VMSVGA_VAL_UNINITIALIZED
+        ||  pThis->svga.uHeight == VMSVGA_VAL_UNINITIALIZED
+        ||  pThis->svga.uBpp    == VMSVGA_VAL_UNINITIALIZED)
     {
         /* Mode change in progress; wait for all values to be set. */
-        Log(("vmsvgaChangeMode: BOGUS sEnable LFB mode and resize to (%d,%d) bpp=%d\n", pThis->svga.iWidth, pThis->svga.iHeight, pThis->svga.iBpp));
+        Log(("vmsvgaChangeMode: BOGUS sEnable LFB mode and resize to (%d,%d) bpp=%d\n", pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp));
         return VINF_SUCCESS;
     }
 
-    if (    pThis->last_bpp         == (unsigned)pThis->svga.iBpp
-        &&  pThis->last_scr_width   == (unsigned)pThis->svga.iWidth
-        &&  pThis->last_scr_height  == (unsigned)pThis->svga.iHeight
-        &&  pThis->last_width       == (unsigned)pThis->svga.iWidth
-        &&  pThis->last_height      == (unsigned)pThis->svga.iHeight
+    if (    pThis->svga.uWidth == 0
+        ||  pThis->svga.uHeight == 0
+        ||  pThis->svga.uBpp == 0)
+    {
+        /* Invalid mode change. */
+        Log(("vmsvgaChangeMode: BOGUS sEnable LFB mode and resize to (%d,%d) bpp=%d\n", pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp));
+        return VINF_SUCCESS;
+    }
+
+    if (    pThis->last_bpp         == (unsigned)pThis->svga.uBpp
+        &&  pThis->last_scr_width   == (unsigned)pThis->svga.uWidth
+        &&  pThis->last_scr_height  == (unsigned)pThis->svga.uHeight
+        &&  pThis->last_width       == (unsigned)pThis->svga.uWidth
+        &&  pThis->last_height      == (unsigned)pThis->svga.uHeight
         )
     {
         /* Nothing to do. */
@@ -826,23 +884,30 @@ int vmsvgaChangeMode(PVGASTATE pThis)
         return VINF_SUCCESS;
     }
 
-    Log(("vmsvgaChangeMode: sEnable LFB mode and resize to (%d,%d) bpp=%d\n", pThis->svga.iWidth, pThis->svga.iHeight, pThis->svga.iBpp));
-    pThis->svga.cbScanline = ((pThis->svga.iWidth * pThis->svga.iBpp + 7) & ~7) / 8;
+    Log(("vmsvgaChangeMode: sEnable LFB mode and resize to (%d,%d) bpp=%d\n", pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp));
+    pThis->svga.cbScanline = ((pThis->svga.uWidth * pThis->svga.uBpp + 7) & ~7) / 8;
 
     pThis->pDrv->pfnLFBModeChange(pThis->pDrv, true);
-    rc = pThis->pDrv->pfnResize(pThis->pDrv, pThis->svga.iBpp, pThis->CTX_SUFF(vram_ptr), pThis->svga.cbScanline, pThis->svga.iWidth, pThis->svga.iHeight);
+    rc = pThis->pDrv->pfnResize(pThis->pDrv, pThis->svga.uBpp, pThis->CTX_SUFF(vram_ptr), pThis->svga.cbScanline, pThis->svga.uWidth, pThis->svga.uHeight);
     AssertRC(rc);
     AssertReturn(rc == VINF_SUCCESS || rc == VINF_VGA_RESIZE_IN_PROGRESS, rc);
 
     /* last stuff */
-    pThis->last_bpp         = pThis->svga.iBpp;
-    pThis->last_scr_width   = pThis->svga.iWidth;
-    pThis->last_scr_height  = pThis->svga.iHeight;
-    pThis->last_width       = pThis->svga.iWidth;
-    pThis->last_height      = pThis->svga.iHeight;
+    pThis->last_bpp         = pThis->svga.uBpp;
+    pThis->last_scr_width   = pThis->svga.uWidth;
+    pThis->last_scr_height  = pThis->svga.uHeight;
+    pThis->last_width       = pThis->svga.uWidth;
+    pThis->last_height      = pThis->svga.uHeight;
     
     ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
 
+    /* vmsvgaPortSetViewPort not called after state load; set sensible defaults. */
+    if (    pThis->svga.viewport.cx == 0
+        &&  pThis->svga.viewport.cy == 0)
+    {
+        pThis->svga.viewport.cx = pThis->svga.uWidth;
+        pThis->svga.viewport.cy = pThis->svga.uHeight;
+    }
     return VINF_SUCCESS;
 }
 #endif /* IN_RING3 */
@@ -871,11 +936,11 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
 
     case SVGA_REG_ENABLE:
         if (    pThis->svga.fEnabled    == u32
-            &&  pThis->last_bpp         == (unsigned)pThis->svga.iBpp
-            &&  pThis->last_scr_width   == (unsigned)pThis->svga.iWidth
-            &&  pThis->last_scr_height  == (unsigned)pThis->svga.iHeight
-            &&  pThis->last_width       == (unsigned)pThis->svga.iWidth
-            &&  pThis->last_height      == (unsigned)pThis->svga.iHeight
+            &&  pThis->last_bpp         == (unsigned)pThis->svga.uBpp
+            &&  pThis->last_scr_width   == (unsigned)pThis->svga.uWidth
+            &&  pThis->last_scr_height  == (unsigned)pThis->svga.uHeight
+            &&  pThis->last_width       == (unsigned)pThis->svga.uWidth
+            &&  pThis->last_height      == (unsigned)pThis->svga.uHeight
             )
             /* Nothing to do. */
             break;
@@ -891,19 +956,19 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
         pThis->svga.fEnabled = u32;
         if (pThis->svga.fEnabled)
         {
-            if (    pThis->svga.iWidth == -1
-                &&  pThis->svga.iHeight == -1
-                &&  pThis->svga.iBpp == (unsigned)-1)
+            if (    pThis->svga.uWidth  == VMSVGA_VAL_UNINITIALIZED
+                &&  pThis->svga.uHeight == VMSVGA_VAL_UNINITIALIZED
+                &&  pThis->svga.uBpp    == VMSVGA_VAL_UNINITIALIZED)
             {
                 /* Keep the current mode. */
-                pThis->svga.iWidth  = pThis->pDrv->cx;
-                pThis->svga.iHeight = pThis->pDrv->cy;
-                pThis->svga.iBpp    = (pThis->pDrv->cBits + 7) & ~7;
+                pThis->svga.uWidth  = pThis->pDrv->cx;
+                pThis->svga.uHeight = pThis->pDrv->cy;
+                pThis->svga.uBpp    = (pThis->pDrv->cBits + 7) & ~7;
             }
 
-            if (    pThis->svga.iWidth != -1
-                &&  pThis->svga.iHeight != -1
-                &&  pThis->svga.iBpp != (unsigned)-1)
+            if (    pThis->svga.uWidth  != VMSVGA_VAL_UNINITIALIZED
+                &&  pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED
+                &&  pThis->svga.uBpp    != VMSVGA_VAL_UNINITIALIZED)
             {
                 rc = vmsvgaChangeMode(pThis);
                 AssertRCReturn(rc, rc);
@@ -920,9 +985,9 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
             /* Restore the text mode backup. */
             memcpy(pThis->vram_ptrR3, pThis->svga.pFrameBufferBackup, VMSVGA_FRAMEBUFFER_BACKUP_SIZE);
 
-/*            pThis->svga.iHeight    = -1;
-            pThis->svga.iWidth     = -1;
-            pThis->svga.iBpp       = -1;
+/*            pThis->svga.uHeight    = -1;
+            pThis->svga.uWidth     = -1;
+            pThis->svga.uBpp       = -1;
             pThis->svga.cbScanline = 0; */
             pThis->pDrv->pfnLFBModeChange(pThis->pDrv, false);
 
@@ -935,10 +1000,10 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
         break;
 
     case SVGA_REG_WIDTH:
-        if (pThis->svga.iWidth == (int) u32)
+        if (pThis->svga.uWidth == u32)
             break; /* nop */
 
-        pThis->svga.iWidth = (int) u32;
+        pThis->svga.uWidth = u32;
         if (pThis->svga.fEnabled)
         {
 #ifdef IN_RING3
@@ -952,10 +1017,10 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
         break;
 
     case SVGA_REG_HEIGHT:
-        if (pThis->svga.iHeight == (int) u32)
+        if (pThis->svga.uHeight == u32)
             break; /* nop */
 
-        pThis->svga.iHeight = (int) u32;
+        pThis->svga.uHeight = u32;
         if (pThis->svga.fEnabled)
         {
 #ifdef IN_RING3
@@ -973,10 +1038,10 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
         break;
 
     case SVGA_REG_BITS_PER_PIXEL:      /* Current bpp in the guest */
-        if (pThis->svga.iBpp == u32)
+        if (pThis->svga.uBpp == u32)
             break; /* nop */
 
-        pThis->svga.iBpp = u32;
+        pThis->svga.uBpp = u32;
         if (pThis->svga.fEnabled)
         {
 #ifdef IN_RING3
@@ -1252,7 +1317,7 @@ PDMBOTHCBDECL(int) vmsvgaIORead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port,
         break;
 
     case SVGA_IRQSTATUS_PORT:
-        Log(("vmsvgaIORead: SVGA_IRQSTATUS_PORT %x\n", pThis->svga.u32IrqStatus));
+        LogFlow(("vmsvgaIORead: SVGA_IRQSTATUS_PORT %x\n", pThis->svga.u32IrqStatus));
         *pu32 = pThis->svga.u32IrqStatus;
         break;
     }
@@ -1802,6 +1867,8 @@ static void *vmsvgaFIFOGetCmdBuffer(PPDMTHREAD pThread, uint32_t *pFIFO, uint32_
     uint8_t *pCmdBuffer;
 
     Assert(ppfBounceBuffer);
+    /* Commands bigger than the fifo buffer are invalid. */
+    AssertReturn(cbCmd <= cbFIFOCmd, NULL);
 
     *pSize          += cbCmd;
     *ppfBounceBuffer = NULL;
@@ -1881,6 +1948,57 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
         Log(("vmsvgaFIFOLoop: min  %x max  %x\n", pFIFO[SVGA_FIFO_MIN], pFIFO[SVGA_FIFO_MAX]));
         Log(("vmsvgaFIFOLoop: next %x stop %x\n", pFIFO[SVGA_FIFO_NEXT_CMD], pFIFO[SVGA_FIFO_STOP]));
 
+        if (pThis->svga.u8FIFOExtCommand != VMSVGA_FIFO_EXTCMD_NONE)
+        {
+            switch (pThis->svga.u8FIFOExtCommand)
+            {
+            case VMSVGA_FIFO_EXTCMD_RESET:
+                Log(("vmsvgaFIFOLoop: reset the fifo thread.\n"));
+#ifdef VBOX_WITH_VMSVGA3D
+                if (pThis->svga.f3DEnabled)
+                {
+                    /* The 3d subsystem must be reset from the fifo thread. */
+                    vmsvga3dReset(pThis);
+                }
+#endif
+                break;
+
+            case VMSVGA_FIFO_EXTCMD_TERMINATE:
+                Log(("vmsvgaFIFOLoop: terminate the fifo thread.\n"));
+#ifdef VBOX_WITH_VMSVGA3D
+                if (pThis->svga.f3DEnabled)
+                {
+                    /* The 3d subsystem must be shut down from the fifo thread. */
+                    vmsvga3dTerminate(pThis);
+                }
+#endif
+                break;
+
+            case VMSVGA_FIFO_EXTCMD_SAVESTATE:
+                Log(("vmsvgaFIFOLoop: VMSVGA_FIFO_EXTCMD_SAVESTATE.\n"));
+#ifdef VBOX_WITH_VMSVGA3D
+                vmsvga3dSaveExec(pThis, (PSSMHANDLE)pThis->svga.pFIFOExtCmdParam);
+#endif
+                break;
+
+            case VMSVGA_FIFO_EXTCMD_LOADSTATE:
+            {
+                Log(("vmsvgaFIFOLoop: VMSVGA_FIFO_EXTCMD_LOADSTATE.\n"));
+#ifdef VBOX_WITH_VMSVGA3D
+                PVMSVGA_STATE_LOAD pLoadState = (PVMSVGA_STATE_LOAD)pThis->svga.pFIFOExtCmdParam;
+                vmsvga3dLoadExec(pThis, pLoadState->pSSM, pLoadState->uVersion, pLoadState->uPass);
+#endif
+                break;
+            }
+            }
+
+            pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_NONE;
+
+            /* Signal the end of the external command. */
+            RTSemEventSignal(pThis->svga.FIFOExtCmdSem);
+            continue;
+        }
+
         if (    !pThis->svga.fEnabled
             ||  !pThis->svga.fConfigured)
         {
@@ -1926,6 +2044,10 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
 #else
                 {}
 #endif
+            /* Check for pending external commands. */
+            if (pThis->svga.u8FIFOExtCommand != VMSVGA_FIFO_EXTCMD_NONE)
+                break;
+
             u32Current = pFIFO[SVGA_FIFO_STOP];
 
             u32Cmd = u32Current / sizeof(uint32_t);
@@ -1987,6 +2109,9 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
 
                 Log(("vmsvgaFIFOLoop: ALPHA_CURSOR id=%d size (%d,%d) hotspot (%d,%d)\n", pCursor->id, pCursor->width, pCursor->height, pCursor->hotspotX, pCursor->hotspotY));
 
+                /* Check against a reasonable upper limit to prevent integer overflows in the sanity checks below. */
+                AssertReturn(pCursor->height < 2048 && pCursor->width < 2048, VERR_INVALID_PARAMETER);
+
                 /* Refetch the command buffer with the added bitmap data; undo size increase (ugly) */
                 cbCmd = sizeof(SVGAFifoCmdDefineAlphaCursor) + pCursor->width * pCursor->height * sizeof(uint32_t) /* 32-bit BRGA format */;
                 size  = sizeof(uint32_t);    /* command dword */
@@ -2018,8 +2143,17 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                                                             pCursor->height,
                                                             pCursorCopy);
                 AssertRC(rc);
-                RTMemFree(pCursorCopy);
 
+                if (pSVGAState->Cursor.fActive)
+                    RTMemFree(pSVGAState->Cursor.pData);
+
+                pSVGAState->Cursor.fActive  = true;
+                pSVGAState->Cursor.xHotspot = pCursor->hotspotX;
+                pSVGAState->Cursor.yHotspot = pCursor->hotspotY;
+                pSVGAState->Cursor.width    = pCursor->width;
+                pSVGAState->Cursor.height   = pCursor->height;
+                pSVGAState->Cursor.cbData   = cbCursorShape;
+                pSVGAState->Cursor.pData    = pCursorCopy;
                 break;
             }
 
@@ -2079,9 +2213,15 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 AssertBreak(pCmd->numPages <= VMSVGA_MAX_GMR_PAGES);
 
                 if (!pCmd->numPages)
+                {
                     vmsvgaGMRFree(pThis, pCmd->gmrId);
-                /* else everything done in remap */
-
+                }
+                else
+                {
+                    PGMR pGMR = &pSVGAState->aGMR[pCmd->gmrId];
+                    pGMR->cMaxPages = pCmd->numPages;
+                }
+                /* everything done in remap */
                 break;
             }
 
@@ -2091,12 +2231,10 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 SVGAFifoCmdRemapGMR2 *pCmd = (SVGAFifoCmdRemapGMR2 *)vmsvgaFIFOGetCmdBuffer(pThread, pFIFO, sizeof(SVGAFifoCmdRemapGMR2), &size, &pBounceBuffer);
                 uint32_t cbPageDesc = (pCmd->flags & SVGA_REMAP_GMR2_PPN64) ? sizeof(uint64_t) : sizeof(uint32_t);
                 uint32_t cbCmd;
+                uint64_t *paNewPage64 = NULL;
 
                 Log(("vmsvgaFIFOLoop: SVGA_CMD_REMAP_GMR2 id=%x flags=%x offset=%x npages=%x\n", pCmd->gmrId, pCmd->flags, pCmd->offsetPages, pCmd->numPages));
 
-                /* @todo */
-                AssertBreak(pCmd->offsetPages == 0);
-
                 /* Refetch the command buffer with the variable data; undo size increase (ugly) */
                 cbCmd = sizeof(SVGAFifoCmdRemapGMR2);
                 if (pCmd->flags & SVGA_REMAP_GMR2_VIA_GMR)
@@ -2120,12 +2258,32 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
 
                 /* Validate current GMR id. */
                 AssertBreak(pCmd->gmrId < VMSVGA_MAX_GMR_IDS);
-                AssertBreak(pCmd->numPages <= VMSVGA_MAX_GMR_PAGES);
+                AssertBreak(pCmd->offsetPages + pCmd->numPages <= pGMR->cMaxPages);
+                AssertBreak(!pCmd->offsetPages || pGMR->paDesc); /* @todo */
+
+                /* Save the old page descriptors as an array of page addresses (>> PAGE_SHIFT) */
+                if (pGMR->paDesc)
+                {
+                    uint32_t idxPage = 0;
+                    paNewPage64 = (uint64_t *)RTMemAllocZ(pGMR->cMaxPages * sizeof(uint64_t));
+                    AssertBreak(paNewPage64);
+
+                    for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
+                    {
+                        for (uint32_t j = 0; j < pGMR->paDesc[i].numPages; j++)
+                        {
+                            paNewPage64[idxPage++] = (pGMR->paDesc[i].GCPhys + j * PAGE_SIZE) >> PAGE_SHIFT;
+                        }
+                    }
+                    AssertBreak(idxPage == pGMR->cbTotal >> PAGE_SHIFT);
+                }
 
                 /* Free the old GMR if present. */
-                vmsvgaGMRFree(pThis, pCmd->gmrId);
+                if (pGMR->paDesc)
+                    RTMemFree(pGMR->paDesc);
 
-                pGMR->paDesc = (PVMSVGAGMRDESCRIPTOR)RTMemAllocZ(pCmd->numPages * sizeof(VMSVGAGMRDESCRIPTOR));
+                /* Allocate the maximum amount possible (everything non-continuous) */
+                pGMR->paDesc = (PVMSVGAGMRDESCRIPTOR)RTMemAllocZ(pGMR->cMaxPages * sizeof(VMSVGAGMRDESCRIPTOR));
                 AssertBreak(pGMR->paDesc);
 
                 if (pCmd->flags & SVGA_REMAP_GMR2_VIA_GMR)
@@ -2135,12 +2293,30 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 }
                 else
                 {
-                    uint32_t *pPage32 = (uint32_t *)(pCmd + 1);
-                    uint64_t *pPage64 = (uint64_t *)(pCmd + 1);
-                    uint32_t iDescriptor = 0;
-                    RTGCPHYS GCPhys;
+                    uint32_t            *pPage32 = (uint32_t *)(pCmd + 1);
+                    uint64_t            *pPage64 = (uint64_t *)(pCmd + 1);
+                    uint32_t             iDescriptor = 0;
+                    RTGCPHYS             GCPhys;
+                    PVMSVGAGMRDESCRIPTOR paDescOld = NULL;
+                    bool                 fGCPhys64 = !!(pCmd->flags & SVGA_REMAP_GMR2_PPN64);
+
+                    if (paNewPage64)
+                    {
+                        /* Overwrite the old page array with the new page values. */
+                        for (uint32_t i = pCmd->offsetPages; i < pCmd->offsetPages + pCmd->numPages; i++)
+                        {
+                            if (pCmd->flags & SVGA_REMAP_GMR2_PPN64)
+                                paNewPage64[i] = pPage64[i - pCmd->offsetPages];
+                            else
+                                paNewPage64[i] = pPage32[i - pCmd->offsetPages];
+                        }
+                        /* Use the updated page array instead of the command data. */
+                        fGCPhys64      = true;
+                        pPage64        = paNewPage64;
+                        pCmd->numPages = pGMR->cbTotal >> PAGE_SHIFT;
+                    }
 
-                    if (pCmd->flags & SVGA_REMAP_GMR2_PPN64)
+                    if (fGCPhys64)
                         GCPhys = (pPage64[0] << PAGE_SHIFT) & 0x00000FFFFFFFFFFFULL;    /* seeing rubbish in the top bits with certain linux guests*/
                     else
                         GCPhys = pPage32[0] << PAGE_SHIFT;
@@ -2177,6 +2353,9 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                     pGMR->numDescriptors = iDescriptor + 1;
                 }
 
+                if (paNewPage64)
+                    RTMemFree(paNewPage64);
+
 #ifdef DEBUG_GMR_ACCESS
                 VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaRegisterGMR, 2, pThis->pDevInsR3, pCmd->gmrId);
 #endif
@@ -2201,8 +2380,8 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 if (pCmd->screen.flags & SVGA_SCREEN_BLANKING)
                     Log(("vmsvgaFIFOLoop: SVGA_CMD_DEFINE_SCREEN flags SVGA_SCREEN_BLANKING\n"));
 
-                pThis->svga.iWidth  = pCmd->screen.size.width;
-                pThis->svga.iHeight = pCmd->screen.size.height;
+                pThis->svga.uWidth  = pCmd->screen.size.width;
+                pThis->svga.uHeight = pCmd->screen.size.height;
                 vmsvgaChangeMode(pThis);
                 break;
             }
@@ -2229,12 +2408,12 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
             case SVGA_CMD_BLIT_GMRFB_TO_SCREEN:
             {
                 SVGAFifoCmdBlitGMRFBToScreen *pCmd = (SVGAFifoCmdBlitGMRFBToScreen *)vmsvgaFIFOGetCmdBuffer(pThread, pFIFO, sizeof(SVGAFifoCmdBlitGMRFBToScreen), &size, &pBounceBuffer);
-                int32_t width, height;
+                uint32_t width, height;
 
                 Log(("vmsvgaFIFOLoop: SVGA_CMD_BLIT_GMRFB_TO_SCREEN src=(%d,%d) dest id=%d (%d,%d)(%d,%d)\n", pCmd->srcOrigin.x, pCmd->srcOrigin.y, pCmd->destScreenId, pCmd->destRect.left, pCmd->destRect.top, pCmd->destRect.right, pCmd->destRect.bottom));
 
                 /* @todo */
-                AssertBreak(pSVGAState->GMRFB.format.s.bitsPerPixel == pThis->svga.iBpp);
+                AssertBreak(pSVGAState->GMRFB.format.s.bitsPerPixel == pThis->svga.uBpp);
                 AssertBreak(pCmd->destScreenId == 0);
 
                 if (pCmd->destRect.left < 0)
@@ -2254,18 +2433,19 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                     break;  /* Nothing to do. */
 
                 /* Clip to screen dimensions. */
-                if (width > pThis->svga.iWidth)
-                    width = pThis->svga.iWidth;
-                if (height > pThis->svga.iHeight)
-                    height = pThis->svga.iHeight;
+                if (width > pThis->svga.uWidth)
+                    width = pThis->svga.uWidth;
+                if (height > pThis->svga.uHeight)
+                    height = pThis->svga.uHeight;
 
                 unsigned offsetSource = (pCmd->srcOrigin.x * pSVGAState->GMRFB.format.s.bitsPerPixel) / 8 + pSVGAState->GMRFB.bytesPerLine * pCmd->srcOrigin.y;
-                unsigned offsetDest   = (pCmd->destRect.left * RT_ALIGN(pThis->svga.iBpp, 8)) / 8 + pThis->svga.cbScanline * pCmd->destRect.top;
-                unsigned cbCopyWidth  = (width * RT_ALIGN(pThis->svga.iBpp, 8)) / 8;
+                unsigned offsetDest   = (pCmd->destRect.left * RT_ALIGN(pThis->svga.uBpp, 8)) / 8 + pThis->svga.cbScanline * pCmd->destRect.top;
+                unsigned cbCopyWidth  = (width * RT_ALIGN(pThis->svga.uBpp, 8)) / 8;
+
+                AssertReturn(offsetDest < pThis->vram_size, VERR_INVALID_PARAMETER);
 
                 rc = vmsvgaGMRTransfer(pThis, SVGA3D_WRITE_HOST_VRAM, pThis->CTX_SUFF(vram_ptr) + offsetDest, pThis->svga.cbScanline, pSVGAState->GMRFB.ptr, offsetSource, pSVGAState->GMRFB.bytesPerLine, cbCopyWidth, height);
                 AssertRC(rc);
-
                 vgaR3UpdateDisplay(pThis, pCmd->destRect.left, pCmd->destRect.top, pCmd->destRect.right - pCmd->destRect.left, pCmd->destRect.bottom - pCmd->destRect.top);
                 break;
             }
@@ -2662,15 +2842,17 @@ void vmsvgaGMRFree(PVGASTATE pThis, uint32_t idGMR)
     /* Free the old descriptor if present. */
     if (pSVGAState->aGMR[idGMR].numDescriptors)
     {
+        PGMR pGMR = &pSVGAState->aGMR[idGMR];
 #ifdef DEBUG_GMR_ACCESS
         VMR3ReqCallWait(PDMDevHlpGetVM(pThis->pDevInsR3), VMCPUID_ANY, (PFNRT)vmsvgaUnregisterGMR, 2, pThis->pDevInsR3, idGMR);
 #endif
 
-        Assert(pSVGAState->aGMR[idGMR].paDesc);
-        RTMemFree(pSVGAState->aGMR[idGMR].paDesc);
-        pSVGAState->aGMR[idGMR].paDesc         = NULL;
-        pSVGAState->aGMR[idGMR].numDescriptors = 0;
-        pSVGAState->aGMR[idGMR].cbTotal        = 0;
+        Assert(pGMR->paDesc);
+        RTMemFree(pGMR->paDesc);
+        pGMR->paDesc         = NULL;
+        pGMR->numDescriptors = 0;
+        pGMR->cbTotal        = 0;
+        pGMR->cMaxPages      = 0;
     }
     Assert(!pSVGAState->aGMR[idGMR].cbTotal);
 }
@@ -2689,7 +2871,7 @@ void vmsvgaGMRFree(PVGASTATE pThis, uint32_t idGMR)
  * @param   cbWidth         Source width in bytes
  * @param   cHeight         Source height
  */
-int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_t *pDest, uint32_t cbDestPitch, SVGAGuestPtr src, uint32_t cbSrcOffset, uint32_t cbSrcPitch, uint32_t cbWidth, uint32_t cHeight)
+int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_t *pDest, int32_t cbDestPitch, SVGAGuestPtr src, uint32_t cbSrcOffset, int32_t cbSrcPitch, uint32_t cbWidth, uint32_t cHeight)
 {
     PVMSVGASTATE            pSVGAState = (PVMSVGASTATE)pThis->svga.pSVGAState;
     PGMR                    pGMR;
@@ -2704,6 +2886,7 @@ int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_
     if (src.gmrId == SVGA_GMR_FRAMEBUFFER)
     {
         cbSrcOffset += src.offset;
+        AssertReturn(src.offset < pThis->vram_size, VERR_INVALID_PARAMETER);
         AssertReturn(cbSrcOffset + cbSrcPitch * (cHeight - 1) + cbWidth <= pThis->vram_size, VERR_INVALID_PARAMETER);
 
         uint8_t *pSrc  = pThis->CTX_SUFF(vram_ptr) + cbSrcOffset;
@@ -2711,8 +2894,8 @@ int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_
         if (transfer == SVGA3D_READ_HOST_VRAM)
         {
             /* switch src & dest */
-            uint8_t *pTemp       = pDest;
-            uint32_t cbTempPitch = cbDestPitch;
+            uint8_t *pTemp      = pDest;
+            int32_t cbTempPitch = cbDestPitch;
 
             pDest = pSrc;
             pSrc  = pTemp;
@@ -2722,7 +2905,8 @@ int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_
         }
 
         if (    pThis->svga.cbScanline == cbDestPitch
-            &&  cbWidth == cbDestPitch)
+            &&  cbWidth == cbDestPitch
+            &&  cbSrcPitch == cbDestPitch)
         {
             memcpy(pDest, pSrc, cbWidth * cHeight);
         }
@@ -2744,8 +2928,9 @@ int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_
     pDesc  = pGMR->paDesc;
 
     cbSrcOffset += src.offset;
+    AssertReturn(src.offset < pGMR->cbTotal, VERR_INVALID_PARAMETER);
     AssertReturn(cbSrcOffset + cbSrcPitch * (cHeight - 1) + cbWidth <= pGMR->cbTotal, VERR_INVALID_PARAMETER);
-
+    
     for (unsigned i = 0; i < cHeight; i++)
     {
         unsigned cbCurrentWidth = cbWidth;
@@ -2765,9 +2950,14 @@ int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_
             unsigned cbToCopy;
             
             if (uCurrentOffset + cbCurrentWidth <= uDescOffset + pDesc->numPages * PAGE_SIZE) 
+            {
                 cbToCopy = cbCurrentWidth;
+            }
             else 
+            {
                 cbToCopy = (uDescOffset + pDesc->numPages * PAGE_SIZE - uCurrentOffset);
+                AssertReturn(cbToCopy <= cbCurrentWidth, VERR_INVALID_PARAMETER);
+            }
 
             LogFlow(("vmsvgaGMRTransfer: %s phys=%RGp\n", (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", pDesc->GCPhys + uCurrentOffset - uDescOffset));
 
@@ -2832,11 +3022,11 @@ static void vmsvgaSetTraces(PVGASTATE pThis, bool fTraces)
         unsigned cbFrameBuffer = pThis->vram_size;
 
         Log(("vmsvgaSetTraces: enable dirty page handling for the frame buffer only (%x bytes)\n", 0));
-        if (pThis->svga.iHeight != -1)
+        if (pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
         {
             Assert(pThis->svga.cbScanline);
             /* Hardware enabled; return real framebuffer size .*/
-            cbFrameBuffer = (uint32_t)pThis->svga.iHeight * pThis->svga.cbScanline;
+            cbFrameBuffer = (uint32_t)pThis->svga.uHeight * pThis->svga.cbScanline;
             cbFrameBuffer = RT_ALIGN(cbFrameBuffer, PAGE_SIZE);
         }
 
@@ -2878,6 +3068,7 @@ DECLCALLBACK(int) vmsvgaR3IORegionMap(PPCIDEVICE pPciDev, int iRegion, RTGCPHYS
     PPDMDEVINS  pDevIns = pPciDev->pDevIns;
     PVGASTATE   pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
 
+    Log(("vgasvgaR3IORegionMap: iRegion=%d GCPhysAddress=%RGp cb=%#x enmType=%d\n", iRegion, GCPhysAddress, cb, enmType));
     if (enmType == PCI_ADDRESS_SPACE_IO)
     {
         AssertReturn(iRegion == 0, VERR_INTERNAL_ERROR);
@@ -2943,39 +3134,105 @@ int vmsvgaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint3
     int          rc;
 
     /* Load our part of the VGAState */
-    rc = SSMR3GetStruct(pSSM, &pThis->svga, g_aVGAStateSVGAFields);
-    AssertReturn(rc, rc);
+    rc = SSMR3GetStructEx(pSSM, &pThis->svga, sizeof(pThis->svga), 0, g_aVGAStateSVGAFields, NULL);
+    AssertRCReturn(rc, rc);
 
     /* Load the framebuffer backup. */
     rc = SSMR3GetMem(pSSM, pThis->svga.pFrameBufferBackup, VMSVGA_FRAMEBUFFER_BACKUP_SIZE);
-    AssertReturn(rc, rc);
+    AssertRCReturn(rc, rc);
 
     /* Load the VMSVGA state. */
-    rc = SSMR3GetStruct(pSSM, pSVGAState, g_aVMSVGASTATEFields);
-    AssertReturn(rc, rc);
+    rc = SSMR3GetStructEx(pSSM, pSVGAState, sizeof(*pSVGAState), 0, g_aVMSVGASTATEFields, NULL);
+    AssertRCReturn(rc, rc);
 
-    /* Save the GMR state */
+    /* Load the active cursor bitmaps. */
+    if (pSVGAState->Cursor.fActive)
+    {
+        pSVGAState->Cursor.pData = RTMemAlloc(pSVGAState->Cursor.cbData);
+        AssertReturn(pSVGAState->Cursor.pData, VERR_NO_MEMORY);
+
+        rc = SSMR3GetMem(pSSM, pSVGAState->Cursor.pData, pSVGAState->Cursor.cbData);
+        AssertRCReturn(rc, rc);
+    }
+
+    /* Load the GMR state */
     for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
     {
-        rc = SSMR3GetStruct(pSSM, &pSVGAState->aGMR[i], g_aGMRFields);
-        AssertReturn(rc, rc); 
+        PGMR pGMR = &pSVGAState->aGMR[i];
 
-        for (uint32_t j = 0; j < pSVGAState->aGMR[i].numDescriptors; j++)
+        rc = SSMR3GetStructEx(pSSM, pGMR, sizeof(*pGMR), 0, g_aGMRFields, NULL);
+        AssertRCReturn(rc, rc); 
+
+        if (pGMR->numDescriptors)
         {
-            rc = SSMR3GetStruct(pSSM, &pSVGAState->aGMR[i].paDesc[j], g_aVMSVGAGMRDESCRIPTORFields);
-            AssertReturn(rc, rc);
+            /* Allocate the maximum amount possible (everything non-continuous) */
+            Assert(pGMR->cMaxPages || pGMR->cbTotal);
+            pGMR->paDesc = (PVMSVGAGMRDESCRIPTOR)RTMemAllocZ((pGMR->cMaxPages) ? pGMR->cMaxPages : (pGMR->cbTotal >> PAGE_SHIFT) * sizeof(VMSVGAGMRDESCRIPTOR));
+            AssertReturn(pGMR->paDesc, VERR_NO_MEMORY);
+
+            for (uint32_t j = 0; j < pGMR->numDescriptors; j++)
+            {
+                rc = SSMR3GetStructEx(pSSM, &pGMR->paDesc[j], sizeof(pGMR->paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
+                AssertRCReturn(rc, rc);
+            }
         }
     }
 
 #ifdef VBOX_WITH_VMSVGA3D
-    if (    uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA
-        &&  pThis->svga.f3DEnabled)
-        vmsvga3dLoadExec(pThis, pSSM, uVersion, uPass);
+    if (pThis->svga.f3DEnabled)
+    {
+        VMSVGA_STATE_LOAD loadstate;
+
+        loadstate.pSSM     = pSSM;
+        loadstate.uVersion = uVersion;
+        loadstate.uPass    = uPass;
+
+        /* Save the 3d state in the FIFO thread. */
+        pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_LOADSTATE;
+        pThis->svga.pFIFOExtCmdParam = (void *)&loadstate;
+        /* Hack alert: resume the IO thread as it has been suspended before the destruct callback. 
+         * The PowerOff notification isn't working, so not an option in this case.
+         */
+        PDMR3ThreadResume(pThis->svga.pFIFOIOThread);
+        RTSemEventSignal(pThis->svga.FIFORequestSem);
+        /* Wait for the end of the command. */
+        rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, RT_INDEFINITE_WAIT);
+        AssertRC(rc);
+        PDMR3ThreadSuspend(pThis->svga.pFIFOIOThread);
+    }
 #endif
 
     return VINF_SUCCESS;
 }
 
+/**
+ * Reinit the video mode after the state has been loaded.
+ */
+int vmsvgaLoadDone(PPDMDEVINS pDevIns)
+{
+    PVGASTATE    pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
+    PVMSVGASTATE pSVGAState = (PVMSVGASTATE)pThis->svga.pSVGAState;
+
+    pThis->last_bpp = VMSVGA_VAL_UNINITIALIZED;   /* force mode reset */
+    vmsvgaChangeMode(pThis);
+
+    /* Set the active cursor. */
+    if (pSVGAState->Cursor.fActive)
+    {
+        int rc;
+
+        rc = pThis->pDrv->pfnVBVAMousePointerShape (pThis->pDrv,
+                                                    true,
+                                                    true,
+                                                    pSVGAState->Cursor.xHotspot,
+                                                    pSVGAState->Cursor.yHotspot,
+                                                    pSVGAState->Cursor.width,
+                                                    pSVGAState->Cursor.height,
+                                                    pSVGAState->Cursor.pData);
+        AssertRC(rc);
+    }
+    return VINF_SUCCESS;
+}
 
 /**
  * @copydoc FNSSMDEVSAVEEXEC
@@ -2987,38 +3244,114 @@ int vmsvgaSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
     int          rc;
 
     /* Save our part of the VGAState */
-    rc = SSMR3PutStruct(pSSM, &pThis->svga, g_aVGAStateSVGAFields);
-    AssertReturn(rc, rc);
+    rc = SSMR3PutStructEx(pSSM, &pThis->svga, sizeof(pThis->svga), 0, g_aVGAStateSVGAFields, NULL);
+    AssertRCReturn(rc, rc);
 
     /* Save the framebuffer backup. */
     rc = SSMR3PutMem(pSSM, pThis->svga.pFrameBufferBackup, VMSVGA_FRAMEBUFFER_BACKUP_SIZE);
-    AssertReturn(rc, rc);
+    AssertRCReturn(rc, rc);
 
     /* Save the VMSVGA state. */
-    rc = SSMR3PutStruct(pSSM, pSVGAState, g_aVMSVGASTATEFields);
-    AssertReturn(rc, rc);
+    rc = SSMR3PutStructEx(pSSM, pSVGAState, sizeof(*pSVGAState), 0, g_aVMSVGASTATEFields, NULL);
+    AssertRCReturn(rc, rc);
+
+    /* Save the active cursor bitmaps. */
+    if (pSVGAState->Cursor.fActive)
+    {
+        rc = SSMR3PutMem(pSSM, pSVGAState->Cursor.pData, pSVGAState->Cursor.cbData);
+        AssertRCReturn(rc, rc);
+    }
 
     /* Save the GMR state */
     for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
     {
-        rc = SSMR3PutStruct(pSSM, &pSVGAState->aGMR[i], g_aGMRFields);
-        AssertReturn(rc, rc);
+        rc = SSMR3PutStructEx(pSSM, &pSVGAState->aGMR[i], sizeof(pSVGAState->aGMR[i]), 0, g_aGMRFields, NULL);
+        AssertRCReturn(rc, rc);
 
         for (uint32_t j = 0; j < pSVGAState->aGMR[i].numDescriptors; j++)
         {
-            rc = SSMR3PutStruct(pSSM, &pSVGAState->aGMR[i].paDesc[j], g_aVMSVGAGMRDESCRIPTORFields);
-            AssertReturn(rc, rc);
+            rc = SSMR3PutStructEx(pSSM, &pSVGAState->aGMR[i].paDesc[j], sizeof(pSVGAState->aGMR[i].paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
+            AssertRCReturn(rc, rc);
         }
     }
 
 #ifdef VBOX_WITH_VMSVGA3D
     if (pThis->svga.f3DEnabled)
-        vmsvga3dSaveExec(pThis, pSSM);
+    {
+        /* Save the 3d state in the FIFO thread. */
+        pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_SAVESTATE;
+        pThis->svga.pFIFOExtCmdParam = (void *)pSSM;
+        /* Hack alert: resume the IO thread as it has been suspended before the destruct callback. 
+         * The PowerOff notification isn't working, so not an option in this case.
+         */
+        PDMR3ThreadResume(pThis->svga.pFIFOIOThread);
+        RTSemEventSignal(pThis->svga.FIFORequestSem);
+        /* Wait for the end of the external command. */
+        rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, RT_INDEFINITE_WAIT);
+        AssertRC(rc);
+        PDMR3ThreadSuspend(pThis->svga.pFIFOIOThread);
+    }
 #endif
     return VINF_SUCCESS;
 }
 
 /**
+ * Resets the SVGA hardware state
+ *
+ * @returns VBox status code.
+ * @param   pDevIns     The device instance.
+ */
+int vmsvgaReset(PPDMDEVINS pDevIns)
+{
+    PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
+    PVMSVGASTATE pSVGAState = (PVMSVGASTATE)pThis->svga.pSVGAState;
+
+    /* Reset before init? */
+    if (!pSVGAState)
+        return VINF_SUCCESS;
+
+    Log(("vmsvgaReset\n"));
+
+    pThis->svga.pFIFOR3[SVGA_FIFO_NEXT_CMD]         = pThis->svga.pFIFOR3[SVGA_FIFO_STOP]                 = 0;
+
+    /* Reset the FIFO thread. */
+    pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_RESET;
+    RTSemEventSignal(pThis->svga.FIFORequestSem);
+    /* Wait for the end of the termination sequence. */
+    int rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, 10000);
+    AssertRC(rc);
+
+    pThis->svga.cScratchRegion = VMSVGA_SCRATCH_SIZE;
+    memset(pThis->svga.au32ScratchRegion, 0, sizeof(pThis->svga.au32ScratchRegion));
+    memset(pThis->svga.pSVGAState, 0, sizeof(VMSVGASTATE));
+    memset(pThis->svga.pFrameBufferBackup, 0, VMSVGA_FRAMEBUFFER_BACKUP_SIZE);
+
+    /* Register caps. */
+    pThis->svga.u32RegCaps = SVGA_CAP_GMR | SVGA_CAP_GMR2 | SVGA_CAP_CURSOR | SVGA_CAP_CURSOR_BYPASS_2 | SVGA_CAP_EXTENDED_FIFO | SVGA_CAP_IRQMASK | SVGA_CAP_PITCHLOCK | SVGA_CAP_TRACES | SVGA_CAP_SCREEN_OBJECT_2 | SVGA_CAP_ALPHA_CURSOR;
+#ifdef VBOX_WITH_VMSVGA3D
+    pThis->svga.u32RegCaps |= SVGA_CAP_3D;
+#endif
+
+    /* Setup FIFO capabilities. */
+    pThis->svga.pFIFOR3[SVGA_FIFO_CAPABILITIES] = SVGA_FIFO_CAP_FENCE | SVGA_FIFO_CAP_CURSOR_BYPASS_3 | SVGA_FIFO_CAP_GMR2 | SVGA_FIFO_CAP_3D_HWVERSION_REVISED | SVGA_FIFO_CAP_SCREEN_OBJECT_2;
+
+    /* Valid with SVGA_FIFO_CAP_SCREEN_OBJECT_2 */
+    pThis->svga.pFIFOR3[SVGA_FIFO_CURSOR_SCREEN_ID] = SVGA_ID_INVALID;
+
+    /* VRAM tracking is enabled by default during bootup. */
+    pThis->svga.fVRAMTracking = true;
+    pThis->svga.fEnabled      = false;
+
+    /* Invalidate current settings. */
+    pThis->svga.uWidth     = VMSVGA_VAL_UNINITIALIZED;
+    pThis->svga.uHeight    = VMSVGA_VAL_UNINITIALIZED;
+    pThis->svga.uBpp       = VMSVGA_VAL_UNINITIALIZED;
+    pThis->svga.cbScanline = 0;
+
+    return rc;
+}
+
+/**
  * Cleans up the SVGA hardware state
  *
  * @returns VBox status code.
@@ -3028,9 +3361,25 @@ int vmsvgaDestruct(PPDMDEVINS pDevIns)
 {
     PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     PVMSVGASTATE pSVGAState = (PVMSVGASTATE)pThis->svga.pSVGAState;
+    int          rc;
+
+    /* Stop the FIFO thread. */
+    pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_TERMINATE;
+    /* Hack alert: resume the IO thread as it has been suspended before the destruct callback. 
+     * The PowerOff notification isn't working, so not an option in this case.
+     */
+    PDMR3ThreadResume(pThis->svga.pFIFOIOThread);
+    RTSemEventSignal(pThis->svga.FIFORequestSem);
+    /* Wait for the end of the termination sequence. */
+    rc = RTSemEventWait(pThis->svga.FIFOExtCmdSem, 10000);
+    AssertRC(rc);
+    PDMR3ThreadSuspend(pThis->svga.pFIFOIOThread);
 
     if (pSVGAState)
     {
+        if (pSVGAState->Cursor.fActive)
+            RTMemFree(pSVGAState->Cursor.pData);
+
         for (unsigned i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
         {
             if (pSVGAState->aGMR[i].paDesc)
@@ -3038,12 +3387,13 @@ int vmsvgaDestruct(PPDMDEVINS pDevIns)
         }
         RTMemFree(pSVGAState);
     }
+    if (pThis->svga.pFrameBufferBackup)
+        RTMemFree(pThis->svga.pFrameBufferBackup);
+    if (pThis->svga.FIFOExtCmdSem)
+        RTSemEventDestroy(pThis->svga.FIFOExtCmdSem);
+    if (pThis->svga.FIFORequestSem)
+        RTSemEventDestroy(pThis->svga.FIFORequestSem);
 
-#ifdef VBOX_WITH_VMSVGA3D
-    /** @todo */
-    if (pThis->svga.f3DEnabled)
-        vmsvga3dTerminate(pThis);
-#endif
     return VINF_SUCCESS;
 }
 
@@ -3079,8 +3429,16 @@ int vmsvgaInit(PPDMDEVINS pDevIns)
         return rc;
     }
 
+    /* Create event semaphore. */
+    rc = RTSemEventCreate(&pThis->svga.FIFOExtCmdSem);
+    if (RT_FAILURE(rc))
+    {
+        Log(("%s: Failed to create event semaphore for external fifo cmd handling.\n", __FUNCTION__));
+        return rc;
+    }
+
     /* Register caps. */
-    pThis->svga.u32RegCaps = SVGA_CAP_GMR | SVGA_CAP_GMR2 | SVGA_CAP_CURSOR | SVGA_CAP_CURSOR_BYPASS_2 | SVGA_CAP_EXTENDED_FIFO | SVGA_CAP_IRQMASK | SVGA_CAP_PITCHLOCK | SVGA_CAP_TRACES | SVGA_CAP_SCREEN_OBJECT_2;
+    pThis->svga.u32RegCaps = SVGA_CAP_GMR | SVGA_CAP_GMR2 | SVGA_CAP_CURSOR | SVGA_CAP_CURSOR_BYPASS_2 | SVGA_CAP_EXTENDED_FIFO | SVGA_CAP_IRQMASK | SVGA_CAP_PITCHLOCK | SVGA_CAP_TRACES | SVGA_CAP_SCREEN_OBJECT_2 | SVGA_CAP_ALPHA_CURSOR;
 #ifdef VBOX_WITH_VMSVGA3D
     pThis->svga.u32RegCaps |= SVGA_CAP_3D;
 #endif
@@ -3104,9 +3462,9 @@ int vmsvgaInit(PPDMDEVINS pDevIns)
     pThis->svga.fVRAMTracking = true;
 
     /* Invalidate current settings. */
-    pThis->svga.iWidth     = -1;
-    pThis->svga.iHeight    = -1;
-    pThis->svga.iBpp       = -1;
+    pThis->svga.uWidth     = VMSVGA_VAL_UNINITIALIZED;
+    pThis->svga.uHeight    = VMSVGA_VAL_UNINITIALIZED;
+    pThis->svga.uBpp       = VMSVGA_VAL_UNINITIALIZED;
     pThis->svga.cbScanline = 0;
 
     pThis->svga.u32MaxWidth  = VBE_DISPI_MAX_YRES;
@@ -3150,6 +3508,7 @@ DECLCALLBACK(void) vmsvgaR3PowerOn(PPDMDEVINS pDevIns)
 {
     PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     int       rc;
+
 #ifdef VBOX_WITH_VMSVGA3D
     if (pThis->svga.f3DEnabled)
     {
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.h b/src/VBox/Devices/Graphics/DevVGA-SVGA.h
index 31564e4..c680318 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA.h
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.h
@@ -12,7 +12,6 @@
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
-
 #ifndef __DEVVGA_SVGA_H__
 #define __DEVVGA_SVGA_H__
 
@@ -24,23 +23,29 @@
 /** Surface memory available to the guest. */
 #define VMSVGA_SURFACE_SIZE             (512*1024*1024)
 /** Maximum GMR pages. */
-#define VMSVGA_MAX_GMR_PAGES            0x2000
+#define VMSVGA_MAX_GMR_PAGES            0x100000
 /** Maximum nr of GMR ids. */
 #define VMSVGA_MAX_GMR_IDS              0x100
 /** Size of the region to backup when switching into svga mode. */
 #define VMSVGA_FRAMEBUFFER_BACKUP_SIZE  (32*1024)
 
+#define VMSVGA_VAL_UNINITIALIZED        (unsigned)-1
+
 /* u32ActionFlags */
 #define VMSVGA_ACTION_CHANGEMODE_BIT    0
 #define VMSVGA_ACTION_CHANGEMODE        RT_BIT(VMSVGA_ACTION_CHANGEMODE_BIT)
 
 DECLCALLBACK(int) vmsvgaR3IORegionMap(PPCIDEVICE pPciDev, int iRegion, RTGCPHYS GCPhysAddress, uint32_t cb, PCIADDRESSSPACE enmType);
 
+DECLCALLBACK(void) vmsvgaPortSetViewPort(PPDMIDISPLAYPORT pInterface, uint32_t uScreenId, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
+
 int vmsvgaInit(PPDMDEVINS pDevIns);
+int vmsvgaReset(PPDMDEVINS pDevIns);
 int vmsvgaDestruct(PPDMDEVINS pDevIns);
 int vmsvgaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
+int vmsvgaLoadDone(PPDMDEVINS pDevIns);
 int vmsvgaSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM);
 DECLCALLBACK(void) vmsvgaR3PowerOn(PPDMDEVINS pDevIns);
+DECLCALLBACK(void) vmsvgaR3PowerOff(PPDMDEVINS pDevIns);
 
 #endif  /* __DEVVGA_SVGA_H__ */
-
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
new file mode 100644
index 0000000..b75778e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
@@ -0,0 +1,40 @@
+/** @file
+ * VirtualBox OpenGL Cocoa Window System Helper Implementation.
+ */
+
+/*
+ * Copyright (C) 2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef __DevVGA_SVGA3d_cocoa_h
+#define __DevVGA_SVGA3d_cocoa_h
+
+#include <iprt/cdefs.h>
+#include <VBox/VBoxCocoa.h>
+#include <OpenGL/OpenGL.h>
+
+RT_C_DECLS_BEGIN
+
+ADD_COCOA_NATIVE_REF(NSView);
+ADD_COCOA_NATIVE_REF(NSOpenGLContext);
+
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaCreateContext(NativeNSOpenGLContextRef *ppCtx, NativeNSOpenGLContextRef pShareCtx);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaDestroyContext(NativeNSOpenGLContextRef pCtrx);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaCreateView(NativeNSViewRef *ppView, NativeNSViewRef pParentView);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaDestroyView(NativeNSViewRef pView);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaViewSetSize(NativeNSViewRef pView, int w, int h);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx);
+__attribute__ ((visibility("default"))) void vmsvga3dCocoaSwapBuffers(NativeNSOpenGLContextRef pCtx);
+
+RT_C_DECLS_END
+
+#endif /* !__DevVGA_SVGA3d_cocoa_h */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
new file mode 100644
index 0000000..b39b455
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
@@ -0,0 +1,575 @@
+/** @file
+ * VirtualBox OpenGL Cocoa Window System Helper Implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include "DevVGA-SVGA3d-cocoa.h"
+#import <Cocoa/Cocoa.h>
+#import <OpenGL/gl.h>
+
+#include <iprt/thread.h>
+
+# define DEBUG_MSG(text) \
+    do {} while (0)
+#ifdef DEBUG_VERBOSE
+# define DEBUG_MSG_1(text) \
+    DEBUG_MSG(text)
+#else
+# define DEBUG_MSG_1(text) \
+    do {} while (0)
+#endif
+
+# define CHECK_GL_ERROR()\
+    do {} while (0)
+
+/** Custom OpenGL context class.
+ *
+ * This implementation doesn't allow to set a view to the
+ * context, but save the view for later use. Also it saves a copy of the
+ * pixel format used to create that context for later use. */
+ at interface VMSVGA3DOpenGLContext: NSOpenGLContext
+{
+ at private
+    NSOpenGLPixelFormat *m_pPixelFormat;
+    NSView              *m_pView;
+}
+- (NSOpenGLPixelFormat*)openGLPixelFormat;
+ at end
+
+ at interface VMSVGA3DOverlayView: NSView
+{
+ at private
+    NSView          *m_pParentView;
+    NSWindow        *m_pOverlayWin;
+    
+    NSOpenGLContext *m_pGLCtx;
+    
+    /* position/size */
+    NSPoint          m_Pos;
+    NSSize           m_Size;
+    
+    /** This is necessary for clipping on the root window */
+    NSRect           m_RootRect;
+    float            m_yInvRootOffset;
+}
+- (id)initWithFrame:(NSRect)frame parentView:(NSView*)pparentView;
+- (void)setGLCtx:(NSOpenGLContext*)pCtx;
+- (NSOpenGLContext*)glCtx;
+- (void)setOverlayWin: (NSWindow*)win;
+- (NSWindow*)overlayWin;
+- (void)setPos:(NSPoint)pos;
+- (NSPoint)pos;
+- (void)setSize:(NSSize)size;
+- (NSSize) size;
+- (void)updateViewportCS;
+- (void)reshape;
+ at end
+
+/** Helper view.
+ *
+ * This view is added as a sub view of the parent view to track
+ * main window changes. Whenever the main window is changed
+ * (which happens on fullscreen/seamless entry/exit) the overlay
+ * window is informed & can add them self as a child window
+ * again. */
+ at class VMSVGA3DOverlayWindow;
+ at interface VMSVGA3DOverlayHelperView: NSView
+{
+ at private
+    VMSVGA3DOverlayWindow *m_pOverlayWindow;
+}
+-(id)initWithOverlayWindow:(VMSVGA3DOverlayWindow*)pOverlayWindow;
+ at end
+
+/** Custom window class.
+ *
+ * This is the overlay window which contains our custom NSView.
+ * Its a direct child of the Qt Main window. It marks its background
+ * transparent & non opaque to make clipping possible. It also disable mouse
+ * events and handle frame change events of the parent view. */
+ at interface VMSVGA3DOverlayWindow: NSWindow
+{
+ at private
+    NSView                    *m_pParentView;
+    VMSVGA3DOverlayView       *m_pOverlayView;
+    VMSVGA3DOverlayHelperView *m_pOverlayHelperView;
+    NSThread                  *m_Thread;
+}
+- (id)initWithParentView:(NSView*)pParentView overlayView:(VMSVGA3DOverlayView*)pOverlayView;
+- (void)parentWindowFrameChanged:(NSNotification *)note;
+- (void)parentWindowChanged:(NSWindow*)pWindow;
+ at end
+
+
+/********************************************************************************
+*
+* VMSVGA3DOpenGLContext class implementation
+*
+********************************************************************************/
+ at implementation VMSVGA3DOpenGLContext
+
+-(id)initWithFormat:(NSOpenGLPixelFormat*)format shareContext:(NSOpenGLContext*)share
+{
+    m_pPixelFormat = NULL;
+    m_pView = NULL;
+
+    self = [super initWithFormat:format shareContext:share];
+    if (self)
+        m_pPixelFormat = format;
+
+    DEBUG_MSG(("OCTX(%p): init VMSVGA3DOpenGLContext\n", (void*)self));
+
+    return self;
+}
+
+- (void)dealloc
+{
+    DEBUG_MSG(("OCTX(%p): dealloc VMSVGA3DOpenGLContext\n", (void*)self));
+
+    [m_pPixelFormat release];
+
+    [super dealloc];
+}
+
+-(bool)isDoubleBuffer
+{
+    GLint val;
+    [m_pPixelFormat getValues:&val forAttribute:NSOpenGLPFADoubleBuffer forVirtualScreen:0];
+    return val == 1 ? YES : NO;
+}
+
+-(void)setView:(NSView*)view
+{
+    DEBUG_MSG(("OCTX(%p): setView: new view: %p\n", (void*)self, (void*)view));
+
+    m_pView = view;
+}
+
+-(NSView*)view
+{
+    return m_pView;
+}
+
+-(void)clearDrawable
+{
+    DEBUG_MSG(("OCTX(%p): clearDrawable\n", (void*)self));
+
+    m_pView = NULL;;
+    [super clearDrawable];
+}
+
+-(NSOpenGLPixelFormat*)openGLPixelFormat
+{
+    return m_pPixelFormat;
+}
+
+ at end
+
+
+
+ at implementation VMSVGA3DOverlayView
+
+- (id)initWithFrame:(NSRect) frame parentView:(NSView*)pParentView
+{
+    m_pParentView    = pParentView;
+    m_pGLCtx         = nil;
+    m_Pos            = NSZeroPoint;
+    m_Size           = NSMakeSize(1, 1);
+    m_RootRect       = NSMakeRect(0, 0, m_Size.width, m_Size.height);
+    m_yInvRootOffset = 0;
+    
+    self = [super initWithFrame: frame];
+    
+    return self;
+}
+
+- (void)setGLCtx:(NSOpenGLContext*)pCtx
+{
+    if (m_pGLCtx == pCtx)
+        return;
+    if (m_pGLCtx)
+        [m_pGLCtx clearDrawable];
+    m_pGLCtx = pCtx;
+}
+
+- (NSOpenGLContext*)glCtx
+{
+    return m_pGLCtx;
+}
+
+- (void)setOverlayWin:(NSWindow*)pWin
+{
+    m_pOverlayWin = pWin;
+}
+
+- (NSWindow*)overlayWin
+{
+    return m_pOverlayWin;
+}
+
+- (void)setPos:(NSPoint)pos
+{
+    m_Pos = pos;
+    [self reshape];
+}
+
+- (NSPoint)pos
+{
+    return m_Pos;
+}
+
+- (void)setSize:(NSSize)size
+{
+    m_Size = size;
+    [self reshape];
+}
+
+- (NSSize)size
+{
+    return m_Size;
+}
+
+- (void)updateViewportCS
+{
+    DEBUG_MSG(("OVIW(%p): updateViewport\n", (void*)self));
+
+    /* Update the viewport for our OpenGL view */
+/*    [m_pSharedGLCtx update]; */
+        
+    /* Clear background to transparent */
+//    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+- (void)reshape
+{
+    NSRect parentFrame = NSZeroRect;
+    NSPoint parentPos  = NSZeroPoint;
+    NSPoint childPos   = NSZeroPoint;
+    NSRect childFrame  = NSZeroRect;
+    NSRect newFrame    = NSZeroRect;
+
+    DEBUG_MSG(("OVIW(%p): reshape\n", (void*)self));
+
+    /* Getting the right screen coordinates of the parents frame is a little bit
+     * complicated. */
+    parentFrame = [m_pParentView frame];
+    parentPos = [[m_pParentView window] convertBaseToScreen:[[m_pParentView superview] convertPointToBase:NSMakePoint(parentFrame.origin.x, parentFrame.origin.y + parentFrame.size.height)]];
+    parentFrame.origin.x = parentPos.x;
+    parentFrame.origin.y = parentPos.y;
+
+    /* Calculate the new screen coordinates of the overlay window. */
+    childPos = NSMakePoint(m_Pos.x, m_Pos.y + m_Size.height);
+    childPos = [[m_pParentView window] convertBaseToScreen:[[m_pParentView superview] convertPointToBase:childPos]];
+
+    /* Make a frame out of it. */
+    childFrame = NSMakeRect(childPos.x, childPos.y, m_Size.width, m_Size.height);
+
+    /* We have to make sure that the overlay window will not be displayed out
+     * of the parent window. So intersect both frames & use the result as the new
+     * frame for the window. */
+    newFrame = NSIntersectionRect(parentFrame, childFrame);
+
+    DEBUG_MSG(("[%#p]: parentFrame pos[%f : %f] size[%f : %f]\n",
+          (void*)self, 
+         parentFrame.origin.x, parentFrame.origin.y,
+         parentFrame.size.width, parentFrame.size.height));
+    DEBUG_MSG(("[%#p]: childFrame pos[%f : %f] size[%f : %f]\n",
+          (void*)self, 
+         childFrame.origin.x, childFrame.origin.y,
+         childFrame.size.width, childFrame.size.height));
+         
+    DEBUG_MSG(("[%#p]: newFrame pos[%f : %f] size[%f : %f]\n",
+          (void*)self, 
+         newFrame.origin.x, newFrame.origin.y,
+         newFrame.size.width, newFrame.size.height));
+    
+    /* Later we have to correct the texture position in the case the window is
+     * out of the parents window frame. So save the shift values for later use. */ 
+    m_RootRect.origin.x = newFrame.origin.x - childFrame.origin.x;
+    m_RootRect.origin.y =  childFrame.size.height + childFrame.origin.y - (newFrame.size.height + newFrame.origin.y);
+    m_RootRect.size = newFrame.size;
+    m_yInvRootOffset = newFrame.origin.y - childFrame.origin.y;
+    
+    DEBUG_MSG(("[%#p]: m_RootRect pos[%f : %f] size[%f : %f]\n",
+         (void*)self, 
+         m_RootRect.origin.x, m_RootRect.origin.y,
+         m_RootRect.size.width, m_RootRect.size.height));
+
+    /* Set the new frame. */
+    [[self window] setFrame:newFrame display:YES];
+
+#if 0
+    /* Make sure the context is updated according */
+    /* [self updateViewport]; */
+    if (m_pSharedGLCtx)
+    {
+        VBOX_CR_RENDER_CTX_INFO CtxInfo; 
+        vboxCtxEnter(m_pSharedGLCtx, &CtxInfo);
+    
+        [self updateViewportCS];
+    
+        vboxCtxLeave(&CtxInfo);
+    }
+#endif
+}
+
+ at end
+
+/********************************************************************************
+*
+* VMSVGA3DOverlayHelperView class implementation
+*
+********************************************************************************/
+ at implementation VMSVGA3DOverlayHelperView
+
+-(id)initWithOverlayWindow:(VMSVGA3DOverlayWindow*)pOverlayWindow
+{
+    self = [super initWithFrame:NSZeroRect];
+
+    m_pOverlayWindow = pOverlayWindow;
+
+    return self;
+}
+
+-(void)viewDidMoveToWindow
+{
+    DEBUG_MSG(("OHVW(%p): viewDidMoveToWindow: new win: %p\n", (void*)self, (void*)[self window]));
+
+    [m_pOverlayWindow parentWindowChanged:[self window]];
+}
+
+ at end
+
+
+/********************************************************************************
+*
+* VMSVGA3DOverlayWindow class implementation
+*
+********************************************************************************/
+ at implementation VMSVGA3DOverlayWindow
+
+- (id)initWithParentView:(NSView*)pParentView overlayView:(VMSVGA3DOverlayView*)pOverlayView
+{
+    NSWindow *pParentWin = nil;
+
+    if((self = [super initWithContentRect:NSZeroRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]))
+    {
+        m_pParentView = pParentView;
+        m_pOverlayView = pOverlayView;
+        m_Thread = [NSThread currentThread];
+
+        [m_pOverlayView setOverlayWin: self];
+
+        m_pOverlayHelperView = [[VMSVGA3DOverlayHelperView alloc] initWithOverlayWindow:self];
+        /* Add the helper view as a child of the parent view to get notifications */
+        [pParentView addSubview:m_pOverlayHelperView];
+
+        /* Make sure this window is transparent */
+#ifdef SHOW_WINDOW_BACKGROUND
+        /* For debugging */
+        [self setBackgroundColor:[NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:0.7]];
+#else
+        [self setBackgroundColor:[NSColor clearColor]];
+#endif
+        [self setOpaque:NO];
+        [self setAlphaValue:.999];
+        /* Disable mouse events for this window */
+        [self setIgnoresMouseEvents:YES];
+
+        pParentWin = [m_pParentView window];
+
+        /* Initial set the position to the parents view top/left (Compiz fix). */
+        [self setFrameOrigin:
+            [pParentWin convertBaseToScreen:
+                [m_pParentView convertPoint:NSZeroPoint toView:nil]]];
+
+        /* Set the overlay view as our content view */
+        [self setContentView:m_pOverlayView];
+
+        /* Add ourself as a child to the parent views window. Note: this has to
+         * be done last so that everything else is setup in
+         * parentWindowChanged. */
+        [pParentWin addChildWindow:self ordered:NSWindowAbove];
+    }
+    DEBUG_MSG(("OWIN(%p): init OverlayWindow\n", (void*)self));
+
+    return self;
+}
+
+- (void)dealloc
+{
+    DEBUG_MSG(("OWIN(%p): dealloc OverlayWindow\n", (void*)self));
+
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+    [m_pOverlayHelperView removeFromSuperview];
+    [m_pOverlayHelperView release];
+
+    [super dealloc];
+}
+
+- (void)parentWindowFrameChanged:(NSNotification*)pNote
+{
+    DEBUG_MSG(("OWIN(%p): parentWindowFrameChanged\n", (void*)self));
+
+    [m_pOverlayView reshape];
+}
+
+- (void)parentWindowChanged:(NSWindow*)pWindow
+{
+    DEBUG_MSG(("OWIN(%p): parentWindowChanged\n", (void*)self));
+
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+    if(pWindow != nil)
+    {
+        /* Ask to get notifications when our parent window frame changes. */
+        [[NSNotificationCenter defaultCenter]
+            addObserver:self
+            selector:@selector(parentWindowFrameChanged:)
+            name:NSWindowDidResizeNotification
+            object:pWindow];
+        /* Add us self as child window */
+        [pWindow addChildWindow:self ordered:NSWindowAbove];
+        [m_pOverlayView reshape];
+    }
+}
+
+ at end
+
+
+void vmsvga3dCocoaCreateContext(NativeNSOpenGLContextRef *ppCtx, NativeNSOpenGLContextRef pShareCtx)
+{
+    NSOpenGLPixelFormat *pFmt = nil;
+
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+#if 1
+    NSOpenGLPixelFormatAttribute attribs[] =
+    {
+        NSOpenGLPFAWindow,
+        NSOpenGLPFADoubleBuffer,
+        NSOpenGLPFAAccelerated,
+        NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute)24,
+        NSOpenGLPFAAlphaSize, (NSOpenGLPixelFormatAttribute)8,
+        NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)24,
+        0
+    };
+#else
+    NSOpenGLPixelFormatAttribute attribs[] =
+    {
+        NSOpenGLPFADoubleBuffer,
+        NSOpenGLPFAAccelerated,
+        NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute)24,
+        NSOpenGLPFADepthSize, 24,
+        NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
+        0
+    };
+#endif
+
+    /* Choose a pixel format */
+    pFmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
+
+    if (pFmt)
+    {
+        *ppCtx = [[VMSVGA3DOpenGLContext alloc] initWithFormat:pFmt shareContext:pShareCtx];
+        DEBUG_MSG(("New context %X\n", (uint)*ppCtx));
+    }
+
+    [pPool release];
+}
+
+void vmsvga3dCocoaDestroyContext(NativeNSOpenGLContextRef pCtx)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    [pCtx release];
+    [pPool release];
+}
+
+void vmsvga3dCocoaCreateView(NativeNSViewRef *ppView, NativeNSViewRef pParentView)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    
+    /* Create our worker view */
+    VMSVGA3DOverlayView* pView = [[VMSVGA3DOverlayView alloc] initWithFrame:NSZeroRect parentView:pParentView];
+
+    if (pView)
+    {
+        /* We need a real window as container for the view */
+        [[VMSVGA3DOverlayWindow alloc] initWithParentView:pParentView overlayView:pView];
+        /* Return the freshly created overlay view */
+        *ppView = pView;
+    }
+    
+    [pPool release];
+}
+
+void vmsvga3dCocoaDestroyView(NativeNSViewRef pView)
+{
+    NSWindow *pWin = nil;
+    
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    [pView setHidden: YES];
+    
+    [pWin release];
+    [pView release];
+    [pPool release];
+}
+
+void vmsvga3dCocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    [(VMSVGA3DOverlayView*)pView setPos:NSMakePoint(x, y)];
+
+    [pPool release];
+}
+
+void vmsvga3dCocoaViewSetSize(NativeNSViewRef pView, int w, int h)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    [(VMSVGA3DOverlayView*)pView setSize:NSMakeSize(w, h)];
+
+    [pPool release];
+}
+
+void vmsvga3dCocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    DEBUG_MSG(("cocoaViewMakeCurrentContext(%p, %p)\n", (void*)pView, (void*)pCtx));
+
+    if (pView)
+    {
+        [(VMSVGA3DOverlayView*)pView setGLCtx:pCtx];
+//        [(VMSVGA3DOverlayView*)pView makeCurrentFBO];
+        [pCtx makeCurrentContext];
+    }
+    else
+    {
+    	[NSOpenGLContext clearCurrentContext];
+    }
+
+    [pPool release];
+}
+
+void vmsvga3dCocoaSwapBuffers(NativeNSOpenGLContextRef pCtx)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    
+    [pCtx flushBuffer];
+    
+    [pPool release];
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
new file mode 100644
index 0000000..3feacd7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
@@ -0,0 +1,6198 @@
+/* $Id: DevVGA-SVGA3d-ogl.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2013-2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#include <iprt/mem.h>
+#include <iprt/avl.h>
+
+#include <VBox/VMMDev.h>
+#include <VBox/VBoxVideo.h>
+#include <VBox/bioslogo.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "vmsvga/svga_reg.h"
+#include "vmsvga/svga3d_reg.h"
+#include "vmsvga/svga3d_shaderdefs.h"
+
+#ifdef RT_OS_WINDOWS
+# include <GL/gl.h>
+# include "vmsvga_glext/wglext.h"
+
+#elif defined(RT_OS_DARWIN)
+# include <OpenGL/OpenGL.h>
+# include <OpenGL/gl3.h>
+# include <OpenGL/gl3ext.h>
+# define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
+# include <OpenGL/gl.h>
+# include <OpenGL/glext.h>
+# include "DevVGA-SVGA3d-cocoa.h"
+/* work around conflicting definition of GLhandleARB in VMware's glext.h */
+//#define GL_ARB_shader_objects
+// HACK
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+# define GL_RGBA_S3TC 0x83A2
+# define GL_ALPHA8_EXT 0x803c
+# define GL_LUMINANCE8_EXT 0x8040
+# define GL_LUMINANCE16_EXT 0x8042
+# define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+# define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+# define GL_INT_2_10_10_10_REV 0x8D9F
+#else
+# include <X11/Xlib.h>
+# include <X11/Xatom.h>
+# include <GL/gl.h>
+# include <GL/glx.h>
+# include <GL/glext.h>
+//HACK FOR NOW
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+#endif
+#include "vmsvga_glext/glext.h"
+
+#include "shaderlib/shaderlib.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <float.h>
+
+#ifdef RT_OS_WINDOWS
+#define OGLGETPROCADDRESS       wglGetProcAddress
+#elif defined(RT_OS_DARWIN)
+#include <dlfcn.h>
+void *MyNSGLGetProcAddress(const char *name)
+{
+    static void *s_image = NULL;
+    if (s_image == NULL)
+        s_image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY);
+    return (s_image ? dlsym(s_image, name) : NULL);
+}
+# define OGLGETPROCADDRESS       MyNSGLGetProcAddress
+#else
+#define OGLGETPROCADDRESS(x)    glXGetProcAddress((const GLubyte *)x)
+#endif
+
+/* Invert y-coordinate for OpenGL's bottom left origin. */
+#define D3D_TO_OGL_Y_COORD(ptrSurface, y_coordinate)                (ptrSurface->pMipmapLevels[0].size.height - (y_coordinate))
+#define D3D_TO_OGL_Y_COORD_MIPLEVEL(ptrMipLevel, y_coordinate)      (ptrMipLevel->size.height - (y_coordinate))
+
+#define OPENGL_INVALID_ID               0
+
+//#define MANUAL_FLIP_SURFACE_DATA
+/* Enable to render the result of DrawPrimitive in a seperate window. */
+//#define DEBUG_GFX_WINDOW
+
+/*******************************************************************************
+*   Structures and Typedefs                                                    *
+*******************************************************************************/
+#define VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState)                          \
+    do { (pState)->idActiveContext = OPENGL_INVALID_ID; } while (0)
+
+#ifdef RT_OS_WINDOWS
+# define VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext)                   \
+    if ((pState)->idActiveContext != pContext->id)                        \
+    {                                                                     \
+        BOOL makecurret = wglMakeCurrent((pContext)->hdc, (pContext)->hglrc); \
+        Assert(makecurret == TRUE);                                       \
+        pState->idActiveContext = (pContext)->id;                         \
+    } else do { } while (0)
+
+#elif defined(RT_OS_DARWIN)
+# define VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext) \
+    if ((pState)->idActiveContext != (pContext)->id)                    \
+    {                                                                   \
+        vmsvga3dCocoaViewMakeCurrentContext((pContext)->cocoaView, (pContext)->cocoaContext); \
+        (pState)->idActiveContext = (pContext)->id;                     \
+    } else do { } while (0)
+#else
+# define VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext) \
+    if ((pState)->idActiveContext != (pContext)->id)                    \
+    {                                                                   \
+        Bool makecurret = glXMakeCurrent((pState)->display,             \
+                                         (pContext)->window,            \
+                                         (pContext)->glxContext);       \
+        Assert(makecurret == True);                                     \
+        (pState)->idActiveContext = (pContext)->id;                     \
+    } else do { } while (0)
+#endif
+
+#ifdef VBOX_STRICT
+# define VMSVGA3D_CHECK_LAST_ERROR(pState, pContext) do {                   \
+    Assert((pState)->idActiveContext == (pContext)->id);                    \
+    (pContext)->lastError = glGetError();                                   \
+    AssertMsgReturn((pContext)->lastError == GL_NO_ERROR, ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, (pContext)->lastError), VERR_INTERNAL_ERROR); \
+    } while (0)
+#else
+# define VMSVGA3D_CHECK_LAST_ERROR(pState, pContext)                        do { } while (0)
+#endif
+
+#ifdef VBOX_STRICT
+# define VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext) do {              \
+    Assert((pState)->idActiveContext == (pContext)->id);                    \
+    (pContext)->lastError = glGetError();                                   \
+    AssertMsg((pContext)->lastError == GL_NO_ERROR, ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, (pContext)->lastError)); \
+    } while (0)
+#else
+# define VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext)                   do { } while (0)
+#endif
+
+typedef struct
+{
+    SVGA3dSize              size;
+    uint32_t                cbSurface;
+    uint32_t                cbSurfacePitch;
+    void                   *pSurfaceData;
+    bool                    fDirty;
+} VMSVGA3DMIPMAPLEVEL, *PVMSVGA3DMIPMAPLEVEL;
+
+/**
+ * SSM descriptor table for the VMSVGA3DMIPMAPLEVEL structure.
+ */
+static SSMFIELD const g_aVMSVGA3DMIPMAPLEVELFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, size),
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, cbSurface),
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, cbSurfacePitch),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DMIPMAPLEVEL, pSurfaceData),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DMIPMAPLEVEL, fDirty),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    uint32_t                id;
+    uint32_t                idAssociatedContext;
+    uint32_t                flags;
+    SVGA3dSurfaceFormat     format; 
+    GLint                   internalFormatGL;
+    GLint                   formatGL;
+    GLint                   typeGL;
+    union
+    {
+        GLuint              texture;
+        GLuint              buffer;
+        GLuint              renderbuffer;
+    } oglId;
+    SVGA3dSurfaceFace       faces[SVGA3D_MAX_SURFACE_FACES];
+    uint32_t                cFaces;
+    PVMSVGA3DMIPMAPLEVEL    pMipmapLevels; 
+    uint32_t                multiSampleCount;
+    SVGA3dTextureFilter     autogenFilter;
+    uint32_t                cbBlock;        /* block/pixel size in bytes */
+    /* Dirty state; surface was manually updated. */
+    bool                    fDirty;
+} VMSVGA3DSURFACE, *PVMSVGA3DSURFACE;
+
+/**
+ * SSM descriptor table for the VMSVGA3DSURFACE structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSURFACEFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, id),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idAssociatedContext),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, flags),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, format),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, internalFormatGL),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, formatGL),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, typeGL),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, id),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, faces),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, cFaces),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSURFACE, pMipmapLevels),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, multiSampleCount),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, autogenFilter),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, cbBlock),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, fDirty),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    uint32_t                        id;
+    uint32_t                        cid;
+    SVGA3dShaderType                type;
+    uint32_t                        cbData;
+    void                           *pShaderProgram;
+    union
+    {
+        void                       *pVertexShader;
+        void                       *pPixelShader;
+    } u;
+} VMSVGA3DSHADER, *PVMSVGA3DSHADER;
+
+/**
+ * SSM descriptor table for the VMSVGA3DSHADER structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSHADERFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, id),
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, cid),
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, type),
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, cbData),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSHADER, pShaderProgram),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSHADER, u.pVertexShader),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    bool        fValid;
+    float       matrix[16];
+} VMSVGATRANSFORMSTATE, *PVMSVGATRANSFORMSTATE;
+
+typedef struct
+{
+    bool            fValid;
+    SVGA3dMaterial  material;
+} VMSVGAMATERIALSTATE, *PVMSVGAMATERIALSTATE;
+
+typedef struct
+{
+    bool            fValid;
+    float           plane[4];
+} VMSVGACLIPPLANESTATE, *PVMSVGACLIPPLANESTATE;
+
+typedef struct
+{
+    bool            fEnabled;
+    bool            fValidData;
+    SVGA3dLightData data;
+} VMSVGALIGHTSTATE, *PVMSVGALIGHTSTATE;
+
+typedef struct
+{
+    bool                    fValid;
+    SVGA3dShaderConstType   ctype;
+    uint32_t                value[4];
+} VMSVGASHADERCONST, *PVMSVGASHADERCONST;
+
+/**
+ * SSM descriptor table for the VMSVGASHADERCONST structure.
+ */
+static SSMFIELD const g_aVMSVGASHADERCONSTFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGASHADERCONST, fValid),
+    SSMFIELD_ENTRY(                 VMSVGASHADERCONST, ctype),
+    SSMFIELD_ENTRY(                 VMSVGASHADERCONST, value),
+    SSMFIELD_ENTRY_TERM()
+};
+
+#define VMSVGA3D_UPDATE_SCISSORRECT     RT_BIT(0)
+#define VMSVGA3D_UPDATE_ZRANGE          RT_BIT(1)
+#define VMSVGA3D_UPDATE_VIEWPORT        RT_BIT(2)
+#define VMSVGA3D_UPDATE_VERTEXSHADER    RT_BIT(3)
+#define VMSVGA3D_UPDATE_PIXELSHADER     RT_BIT(4)
+#define VMSVGA3D_UPDATE_TRANSFORM       RT_BIT(5)
+#define VMSVGA3D_UPDATE_MATERIAL        RT_BIT(6)
+
+typedef struct
+{
+    uint32_t                id;
+#ifdef RT_OS_WINDOWS
+    /* Device context of the context window. */
+    HDC                     hdc;
+    /* OpenGL rendering context handle. */
+    HGLRC                   hglrc;
+    /* Device context window handle. */
+    HWND                    hwnd;
+#elif defined(RT_OS_DARWIN)
+    /* OpenGL rendering context */
+    NativeNSOpenGLContextRef cocoaContext;
+    NativeNSViewRef          cocoaView;
+#else
+    /** XGL rendering context handle */
+    GLXContext              glxContext;
+    /** Device context window handle */
+    Window                  window;
+    /** flag whether the window is mapped (=visible) */
+    bool                    fMapped;
+#endif
+    /* Framebuffer object associated with this context. */
+    GLuint                  idFramebuffer;
+    /* Read and draw framebuffer objects for various operations. */
+    GLuint                  idReadFramebuffer;
+    GLuint                  idDrawFramebuffer;
+    /* Last GL error recorded. */
+    GLenum                  lastError;
+
+    /* Current active render target (if any) */
+    uint32_t                sidRenderTarget;
+    /* Current selected texture surfaces (if any) */
+    uint32_t                aSidActiveTexture[SVGA3D_MAX_TEXTURE_STAGE];
+    /* Per context pixel and vertex shaders. */
+    uint32_t                cPixelShaders;
+    PVMSVGA3DSHADER         paPixelShader;
+    uint32_t                cVertexShaders;
+    PVMSVGA3DSHADER         paVertexShader;
+    void                   *pShaderContext;
+    /* Keep track of the internal state to be able to recreate the context properly (save/restore, window resize). */
+    struct
+    {
+        uint32_t                u32UpdateFlags;
+
+        SVGA3dRenderState       aRenderState[SVGA3D_RS_MAX];
+        SVGA3dTextureState      aTextureState[SVGA3D_MAX_TEXTURE_STAGE][SVGA3D_TS_MAX];
+        VMSVGATRANSFORMSTATE    aTransformState[SVGA3D_TRANSFORM_MAX];
+        VMSVGAMATERIALSTATE     aMaterial[SVGA3D_FACE_MAX];
+        VMSVGACLIPPLANESTATE    aClipPlane[SVGA3D_CLIPPLANE_MAX];
+        VMSVGALIGHTSTATE        aLightData[SVGA3D_MAX_LIGHTS];
+
+        uint32_t                aRenderTargets[SVGA3D_RT_MAX];
+        SVGA3dRect              RectScissor;
+        SVGA3dRect              RectViewPort;
+        SVGA3dZRange            zRange;
+        uint32_t                shidPixel;
+        uint32_t                shidVertex;
+
+        uint32_t                cPixelShaderConst;
+        PVMSVGASHADERCONST      paPixelShaderConst;
+        uint32_t                cVertexShaderConst;
+        PVMSVGASHADERCONST      paVertexShaderConst;
+    } state;
+} VMSVGA3DCONTEXT, *PVMSVGA3DCONTEXT;
+
+/**
+ * SSM descriptor table for the VMSVGA3DCONTEXT structure.
+ */
+static SSMFIELD const g_aVMSVGA3DCONTEXTFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, id),
+#ifdef RT_OS_WINDOWS
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, hdc),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, hglrc),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, hwnd),
+#endif
+
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, idFramebuffer),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, idReadFramebuffer),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, idDrawFramebuffer),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, lastError),
+
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, sidRenderTarget),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, aSidActiveTexture),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, cPixelShaders),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, paPixelShader),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, cVertexShaders),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, paVertexShader),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, pShaderContext),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.u32UpdateFlags),
+
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aRenderState),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aTextureState),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aTransformState),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aMaterial),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aClipPlane),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aLightData),
+
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aRenderTargets),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.RectScissor),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.RectViewPort),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.zRange),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.shidPixel),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.shidVertex),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.cPixelShaderConst),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, state.paPixelShaderConst),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.cVertexShaderConst),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, state.paVertexShaderConst),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+#ifdef RT_OS_WINDOWS
+    /** Window Thread. */
+    R3PTRTYPE(RTTHREAD)     pWindowThread;
+    DWORD                   idWindowThread;
+    HMODULE                 hInstance;
+    /** Window request semaphore. */
+    RTSEMEVENT              WndRequestSem;
+#elif defined(RT_OS_LINUX)
+    /* The X display */
+    Display                 *display;
+    R3PTRTYPE(RTTHREAD)    pWindowThread;
+    bool                    bTerminate;
+#endif
+
+    float                   fGLVersion;
+    /* Current active context. */
+    uint32_t                idActiveContext;
+
+    struct
+    {
+        PFNGLISRENDERBUFFERPROC                         glIsRenderbuffer;
+        PFNGLBINDRENDERBUFFERPROC                       glBindRenderbuffer;
+        PFNGLDELETERENDERBUFFERSPROC                    glDeleteRenderbuffers;
+        PFNGLGENRENDERBUFFERSPROC                       glGenRenderbuffers;
+        PFNGLRENDERBUFFERSTORAGEPROC                    glRenderbufferStorage;
+        PFNGLGETRENDERBUFFERPARAMETERIVPROC             glGetRenderbufferParameteriv;
+        PFNGLISFRAMEBUFFERPROC                          glIsFramebuffer;
+        PFNGLBINDFRAMEBUFFERPROC                        glBindFramebuffer;
+        PFNGLDELETEFRAMEBUFFERSPROC                     glDeleteFramebuffers;
+        PFNGLGENFRAMEBUFFERSPROC                        glGenFramebuffers;
+        PFNGLCHECKFRAMEBUFFERSTATUSPROC                 glCheckFramebufferStatus;
+        PFNGLFRAMEBUFFERTEXTURE1DPROC                   glFramebufferTexture1D;
+        PFNGLFRAMEBUFFERTEXTURE2DPROC                   glFramebufferTexture2D;
+        PFNGLFRAMEBUFFERTEXTURE3DPROC                   glFramebufferTexture3D;
+        PFNGLFRAMEBUFFERRENDERBUFFERPROC                glFramebufferRenderbuffer;
+        PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC    glGetFramebufferAttachmentParameteriv;
+        PFNGLGENERATEMIPMAPPROC                         glGenerateMipmap;
+        PFNGLBLITFRAMEBUFFERPROC                        glBlitFramebuffer;
+        PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC         glRenderbufferStorageMultisample;
+        PFNGLFRAMEBUFFERTEXTURELAYERPROC                glFramebufferTextureLayer;
+        PFNGLPOINTPARAMETERFPROC                        glPointParameterf;
+        PFNGLBLENDEQUATIONPROC                          glBlendEquation;
+        PFNGLBLENDEQUATIONSEPARATEPROC                  glBlendEquationSeparate;
+        PFNGLBLENDFUNCSEPARATEPROC                      glBlendFuncSeparate;
+        PFNGLSTENCILOPSEPARATEPROC                      glStencilOpSeparate;
+        PFNGLSTENCILFUNCSEPARATEPROC                    glStencilFuncSeparate;
+        PFNGLBLENDCOLORPROC                             glBlendColor;
+        PFNGLBINDBUFFERPROC                             glBindBuffer;
+        PFNGLDELETEBUFFERSPROC                          glDeleteBuffers;
+        PFNGLGENBUFFERSPROC                             glGenBuffers;
+        PFNGLBUFFERDATAPROC                             glBufferData;
+        PFNGLMAPBUFFERPROC                              glMapBuffer;
+        PFNGLUNMAPBUFFERPROC                            glUnmapBuffer;
+        PFNGLENABLEVERTEXATTRIBARRAYPROC                glEnableVertexAttribArray;
+        PFNGLDISABLEVERTEXATTRIBARRAYPROC               glDisableVertexAttribArray;
+        PFNGLVERTEXATTRIBPOINTERPROC                    glVertexAttribPointer;
+        PFNGLFOGCOORDPOINTERPROC                        glFogCoordPointer;
+        PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC        glDrawElementsInstancedBaseVertex;
+        PFNGLDRAWELEMENTSBASEVERTEXPROC                 glDrawElementsBaseVertex;
+        PFNGLACTIVETEXTUREPROC                          glActiveTexture;
+        PFNGLCLIENTACTIVETEXTUREPROC                    glClientActiveTexture;
+        PFNGLGETPROGRAMIVARBPROC                        glGetProgramivARB;
+        PFNGLPROVOKINGVERTEXPROC                        glProvokingVertex;
+        bool                                            fEXT_stencil_two_side;
+    } ext;
+
+    struct
+    {
+        GLint                           maxActiveLights;
+        GLint                           maxTextureBufferSize;
+        GLint                           maxTextures;
+        GLint                           maxClipDistances;
+        GLint                           maxColorAttachments;
+        GLint                           maxRectangleTextureSize;
+        GLint                           maxTextureAnisotropy;
+        GLint                           maxVertexShaderInstructions;
+        GLint                           maxFragmentShaderInstructions;
+        GLint                           maxVertexShaderTemps;
+        GLint                           maxFragmentShaderTemps;
+        GLfloat                         flPointSize[2];
+        SVGA3dPixelShaderVersion        fragmentShaderVersion;
+        SVGA3dVertexShaderVersion       vertexShaderVersion;
+        bool                            fS3TCSupported;
+    } caps;
+
+    uint32_t                cContexts;
+    PVMSVGA3DCONTEXT        paContext;
+    uint32_t                cSurfaces;
+    PVMSVGA3DSURFACE        paSurface;
+#ifdef DEBUG_GFX_WINDOW_TEST_CONTEXT
+    uint32_t                idTestContext;
+#endif
+} VMSVGA3DSTATE, *PVMSVGA3DSTATE;
+
+/**
+ * SSM descriptor table for the VMSVGA3DSTATE structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSTATEFields[] =
+{
+#ifdef RT_OS_WINDOWS
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, pWindowThread),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, idWindowThread),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, hInstance),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, WndRequestSem),
+#elif defined(RT_OS_LINUX)
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, display),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, pWindowThread),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, bTerminate),
+#endif
+    SSMFIELD_ENTRY(                 VMSVGA3DSTATE, fGLVersion),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, idActiveContext),
+
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, ext),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, caps),
+
+    SSMFIELD_ENTRY(                 VMSVGA3DSTATE, cContexts),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, paContext),
+    SSMFIELD_ENTRY(                 VMSVGA3DSTATE, cSurfaces),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, paSurface),
+    SSMFIELD_ENTRY_TERM()
+};
+
+
+/* Define the default light parameters as specified by MSDN. */
+/* @todo move out; fetched from Wine */
+const SVGA3dLightData vmsvga3d_default_light =
+{
+    SVGA3D_LIGHTTYPE_DIRECTIONAL,   /* type */
+    false,                          /* inWorldSpace */
+    { 1.0f, 1.0f, 1.0f, 0.0f },     /* diffuse r,g,b,a */
+    { 0.0f, 0.0f, 0.0f, 0.0f },     /* specular r,g,b,a */
+    { 0.0f, 0.0f, 0.0f, 0.0f },     /* ambient r,g,b,a, */
+    { 0.0f, 0.0f, 0.0f },           /* position x,y,z */
+    { 0.0f, 0.0f, 1.0f },           /* direction x,y,z */
+    0.0f,                           /* range */
+    0.0f,                           /* falloff */
+    0.0f, 0.0f, 0.0f,               /* attenuation 0,1,2 */
+    0.0f,                           /* theta */
+    0.0f                            /* phi */
+};
+
+RT_C_DECLS_BEGIN
+static int vmsvga3dCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface);
+static void vmsvgaColor2GLFloatArray(uint32_t color, GLfloat *pRed, GLfloat *pGreen, GLfloat *pBlue, GLfloat *pAlpha);
+RT_C_DECLS_END
+
+static bool vmsvga3dCheckGLExtension(const char *pExtensionName)
+{
+    char *pSupportedExtensions = (char *)glGetString(GL_EXTENSIONS);
+    char *pExtensionSupported  = pSupportedExtensions;
+    size_t cbExtension         = strlen(pExtensionName);
+
+    while (true)
+    {
+        pExtensionSupported = strstr(pExtensionSupported, pExtensionName);
+        if (pExtensionSupported == NULL)
+            break;
+
+        if (    (    pExtensionSupported == pSupportedExtensions
+                 || *(pExtensionSupported-1) == ' ')
+            &&  (    pExtensionSupported[cbExtension] == ' '
+                 ||  pExtensionSupported[cbExtension] == 0)
+           )
+            return true;
+
+        pExtensionSupported += cbExtension;
+    }
+    return false;
+}
+
+int vmsvga3dInit(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE   pState;
+    int              rc;
+
+    AssertCompile(GL_TRUE == 1);
+    AssertCompile(GL_FALSE == 0);
+
+    pThis->svga.p3dState = RTMemAllocZ(sizeof(VMSVGA3DSTATE));
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+    pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+
+#ifdef RT_OS_WINDOWS
+    /* Create event semaphore. */
+    rc = RTSemEventCreate(&pState->WndRequestSem);
+    if (RT_FAILURE(rc))
+    {
+        Log(("%s: Failed to create event semaphore for window handling.\n", __FUNCTION__));
+        return rc;
+    }
+
+    /* Create the async IO thread. */
+    rc = RTThreadCreate(&pState->pWindowThread, vmsvga3dWindowThread, pState->WndRequestSem, 0, RTTHREADTYPE_GUI, 0, "VMSVGA3DWND");
+    if (RT_FAILURE(rc))
+    {
+        AssertMsgFailed(("%s: Async IO Thread creation for 3d window handling failed rc=%d\n", __FUNCTION__, rc));
+        return rc;
+    }
+#endif
+    return VINF_SUCCESS;
+}
+
+/* We must delay window creation until the PowerOn phase. Init is too early and will cause failures. */
+int vmsvga3dPowerOn(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+    PVMSVGA3DCONTEXT pContext;
+    int              rc;
+
+    if (pState->fGLVersion != 0.0)
+        return VINF_SUCCESS;    /* already initialized (load state) */
+
+    /* OpenGL function calls aren't possible without a valid current context, so create a fake one here. */
+    rc = vmsvga3dContextDefine(pThis, 1);
+    AssertRCReturn(rc, rc);
+
+    pContext = &pState->paContext[1];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    LogRel(("VMSVGA3d: OpenGL version: %s\nOpenGL Vendor: %s\nOpenGL Renderer: %s\n", glGetString(GL_VERSION), glGetString(GL_VENDOR), glGetString(GL_RENDERER)));
+    LogRel(("VMSVGA3d: OpenGL shader language version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)));
+    LogRel(("VMSVGA3d: OpenGL extensions: %s\n\n", glGetString(GL_EXTENSIONS)));
+    pState->fGLVersion     = atof((const char *)glGetString(GL_VERSION));
+
+    if (vmsvga3dCheckGLExtension("GL_ARB_framebuffer_object"))
+    {
+        pState->ext.glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)OGLGETPROCADDRESS("glIsRenderbuffer");
+        pState->ext.glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)OGLGETPROCADDRESS("glBindRenderbuffer");
+        pState->ext.glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)OGLGETPROCADDRESS("glDeleteRenderbuffers");
+        pState->ext.glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)OGLGETPROCADDRESS("glGenRenderbuffers");
+        pState->ext.glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)OGLGETPROCADDRESS("glRenderbufferStorage");
+        pState->ext.glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)OGLGETPROCADDRESS("glGetRenderbufferParameteriv");
+        pState->ext.glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)OGLGETPROCADDRESS("glIsFramebuffer");
+        pState->ext.glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)OGLGETPROCADDRESS("glBindFramebuffer");
+        pState->ext.glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)OGLGETPROCADDRESS("glDeleteFramebuffers");
+        pState->ext.glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)OGLGETPROCADDRESS("glGenFramebuffers");
+        pState->ext.glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)OGLGETPROCADDRESS("glCheckFramebufferStatus");
+        pState->ext.glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)OGLGETPROCADDRESS("glFramebufferTexture1D");
+        pState->ext.glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)OGLGETPROCADDRESS("glFramebufferTexture2D");
+        pState->ext.glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)OGLGETPROCADDRESS("glFramebufferTexture3D");
+        pState->ext.glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)OGLGETPROCADDRESS("glFramebufferRenderbuffer");
+        pState->ext.glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)OGLGETPROCADDRESS("glGetFramebufferAttachmentParameteriv");
+        pState->ext.glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)OGLGETPROCADDRESS("glGenerateMipmap");
+        pState->ext.glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)OGLGETPROCADDRESS("glBlitFramebuffer");
+        pState->ext.glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)OGLGETPROCADDRESS("glRenderbufferStorageMultisample");
+        pState->ext.glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)OGLGETPROCADDRESS("glFramebufferTextureLayer");
+    }
+    pState->ext.glPointParameterf           = (PFNGLPOINTPARAMETERFPROC)OGLGETPROCADDRESS("glPointParameterf");
+    AssertMsgReturn(pState->ext.glPointParameterf, ("glPointParameterf missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glBlendEquation             = (PFNGLBLENDEQUATIONPROC)OGLGETPROCADDRESS("glBlendEquation");
+    AssertMsgReturn(pState->ext.glBlendEquation, ("glBlendEquation missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glBlendEquationSeparate     = (PFNGLBLENDEQUATIONSEPARATEPROC)OGLGETPROCADDRESS("glBlendEquationSeparate");
+    AssertMsgReturn(pState->ext.glBlendEquationSeparate, ("glBlendEquationSeparate missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glBlendFuncSeparate         = (PFNGLBLENDFUNCSEPARATEPROC)OGLGETPROCADDRESS("glBlendFuncSeparate");
+    AssertMsgReturn(pState->ext.glBlendFuncSeparate, ("glBlendFuncSeparate missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glStencilOpSeparate         = (PFNGLSTENCILOPSEPARATEPROC)OGLGETPROCADDRESS("glStencilOpSeparate");
+    AssertMsgReturn(pState->ext.glStencilOpSeparate, ("glStencilOpSeparate missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glStencilFuncSeparate       = (PFNGLSTENCILFUNCSEPARATEPROC)OGLGETPROCADDRESS("glStencilFuncSeparate");
+    AssertMsgReturn(pState->ext.glStencilFuncSeparate, ("glStencilFuncSeparate missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glBlendColor                = (PFNGLBLENDCOLORPROC)OGLGETPROCADDRESS("glBlendColor");
+    AssertMsgReturn(pState->ext.glBlendColor, ("glBlendColor missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glBindBuffer                = (PFNGLBINDBUFFERPROC)OGLGETPROCADDRESS("glBindBuffer");
+    AssertMsgReturn(pState->ext.glBindBuffer, ("glBindBuffer missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glDeleteBuffers             = (PFNGLDELETEBUFFERSPROC)OGLGETPROCADDRESS("glDeleteBuffers");
+    AssertMsgReturn(pState->ext.glDeleteBuffers, ("glDeleteBuffers missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glGenBuffers                = (PFNGLGENBUFFERSPROC)OGLGETPROCADDRESS("glGenBuffers");
+    AssertMsgReturn(pState->ext.glGenBuffers, ("glGenBuffers missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glBufferData                = (PFNGLBUFFERDATAPROC)OGLGETPROCADDRESS("glBufferData");
+    AssertMsgReturn(pState->ext.glBufferData, ("glBufferData missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glMapBuffer                 = (PFNGLMAPBUFFERPROC)OGLGETPROCADDRESS("glMapBuffer");
+    AssertMsgReturn(pState->ext.glMapBuffer, ("glMapBuffer missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glUnmapBuffer               = (PFNGLUNMAPBUFFERPROC)OGLGETPROCADDRESS("glUnmapBuffer");
+    AssertMsgReturn(pState->ext.glUnmapBuffer, ("glUnmapBuffer missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glEnableVertexAttribArray   = (PFNGLENABLEVERTEXATTRIBARRAYPROC)OGLGETPROCADDRESS("glEnableVertexAttribArray");
+    AssertMsgReturn(pState->ext.glEnableVertexAttribArray, ("glEnableVertexAttribArray missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glDisableVertexAttribArray  = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)OGLGETPROCADDRESS("glDisableVertexAttribArray");
+    AssertMsgReturn(pState->ext.glDisableVertexAttribArray, ("glDisableVertexAttribArray missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glVertexAttribPointer       = (PFNGLVERTEXATTRIBPOINTERPROC)OGLGETPROCADDRESS("glVertexAttribPointer");
+    AssertMsgReturn(pState->ext.glVertexAttribPointer, ("glVertexAttribPointer missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glFogCoordPointer           = (PFNGLFOGCOORDPOINTERPROC)OGLGETPROCADDRESS("glFogCoordPointer");
+    AssertMsgReturn(pState->ext.glFogCoordPointer, ("glFogCoordPointer missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glActiveTexture             = (PFNGLACTIVETEXTUREPROC)OGLGETPROCADDRESS("glActiveTexture");
+    AssertMsgReturn(pState->ext.glActiveTexture, ("glActiveTexture missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glClientActiveTexture       = (PFNGLCLIENTACTIVETEXTUREPROC)OGLGETPROCADDRESS("glClientActiveTexture");
+    AssertMsgReturn(pState->ext.glClientActiveTexture, ("glClientActiveTexture missing"), VERR_NOT_IMPLEMENTED);
+    pState->ext.glGetProgramivARB           = (PFNGLGETPROGRAMIVARBPROC)OGLGETPROCADDRESS("glGetProgramivARB");
+    AssertMsgReturn(pState->ext.glGetProgramivARB, ("glGetProgramivARB missing"), VERR_NOT_IMPLEMENTED);
+
+    /* OpenGL 3.2 core */
+    if (vmsvga3dCheckGLExtension("GL_ARB_draw_elements_base_vertex"))
+    {
+        pState->ext.glDrawElementsBaseVertex          = (PFNGLDRAWELEMENTSBASEVERTEXPROC)OGLGETPROCADDRESS("glDrawElementsBaseVertex");
+        pState->ext.glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)OGLGETPROCADDRESS("glDrawElementsInstancedBaseVertex");
+    }
+    else
+        LogRel(("VMSVGA3d: missing extension GL_ARB_draw_elements_base_vertex\n"));
+
+    /* OpenGL 3.2 core */
+    if (vmsvga3dCheckGLExtension("GL_ARB_provoking_vertex"))
+    {
+        pState->ext.glProvokingVertex                 = (PFNGLPROVOKINGVERTEXPROC)OGLGETPROCADDRESS("glProvokingVertex");
+    }
+    else
+        LogRel(("VMSVGA3d: missing extension GL_ARB_provoking_vertex\n"));
+
+    /* Extension support */
+    pState->ext.fEXT_stencil_two_side = vmsvga3dCheckGLExtension("GL_EXT_stencil_two_side");
+
+    /* First set sensible defaults. */
+    pState->caps.maxActiveLights               = 1;
+    pState->caps.maxTextureBufferSize          = 65536;
+    pState->caps.maxTextures                   = 1;
+    pState->caps.maxClipDistances              = 4;
+    pState->caps.maxColorAttachments           = 1;
+    pState->caps.maxRectangleTextureSize       = 2048;
+    pState->caps.maxTextureAnisotropy          = 2;
+    pState->caps.maxVertexShaderInstructions   = 1024;
+    pState->caps.maxFragmentShaderInstructions = 1024;
+    pState->caps.vertexShaderVersion           = SVGA3DVSVERSION_NONE;
+    pState->caps.fragmentShaderVersion         = SVGA3DPSVERSION_NONE;
+
+    /* Query capabilities */
+    glGetIntegerv(GL_MAX_LIGHTS, &pState->caps.maxActiveLights);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE, &pState->caps.maxTextureBufferSize);
+#ifdef DEBUG_bird
+    if (pState->fGLVersion >= 3.1) /* darwin: Requires GL 3.1, so triggers on older mac os x versions. */
+#endif
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext); 
+    glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &pState->caps.maxTextures);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    glGetIntegerv(GL_MAX_CLIP_DISTANCES, &pState->caps.maxClipDistances);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &pState->caps.maxColorAttachments);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE, &pState->caps.maxRectangleTextureSize);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &pState->caps.maxTextureAnisotropy);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, pState->caps.flPointSize);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+    if (pState->ext.glGetProgramivARB)
+    {
+        pState->ext.glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &pState->caps.maxFragmentShaderTemps);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        pState->ext.glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &pState->caps.maxFragmentShaderInstructions);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        pState->ext.glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &pState->caps.maxVertexShaderTemps);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        pState->ext.glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &pState->caps.maxVertexShaderInstructions);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    }
+    pState->caps.fS3TCSupported = vmsvga3dCheckGLExtension("GL_EXT_texture_compression_s3tc");
+
+    /* http://http://www.opengl.org/wiki/Detecting_the_Shader_Model 
+     * ARB Assembly Language
+     * These are done through testing the presence of extensions. You should test them in this order:
+     * GL_NV_gpu_program4: SM 4.0 or better.
+     * GL_NV_vertex_program3: SM 3.0 or better.
+     * GL_ARB_fragment_program: SM 2.0 or better.
+     * ATI does not support higher than SM 2.0 functionality in assembly shaders.
+     *
+     * @todo: distinguish between vertex and pixel shaders???
+     */
+    if (vmsvga3dCheckGLExtension("GL_NV_gpu_program4"))
+    {
+        pState->caps.vertexShaderVersion   = SVGA3DVSVERSION_40;
+        pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_40;
+    }
+    else
+    if (    vmsvga3dCheckGLExtension("GL_NV_vertex_program3")
+        ||  vmsvga3dCheckGLExtension("GL_ARB_shader_texture_lod"))  /* Wine claims this suggests SM 3.0 support */
+    {
+        pState->caps.vertexShaderVersion   = SVGA3DVSVERSION_30;
+        pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_30;
+    }
+    else
+    if (vmsvga3dCheckGLExtension("GL_ARB_fragment_program"))
+    {
+        pState->caps.vertexShaderVersion   = SVGA3DVSVERSION_20;
+        pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_20;
+    }
+    else
+    {
+        LogRel(("VMSVGA3D: WARNING: unknown support for assembly shaders!!\n"));
+        pState->caps.vertexShaderVersion   = SVGA3DVSVERSION_11;
+        pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_11;
+    }
+
+    if (!vmsvga3dCheckGLExtension("GL_ARB_vertex_array_bgra"))
+    {
+        /* @todo Intel drivers don't support this extension! */
+        LogRel(("VMSVGA3D: WARNING: Missing required extension GL_ARB_vertex_array_bgra (d3dcolor)!!!\n"));
+    }
+#if 0
+   SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND             = 11,
+   SVGA3D_DEVCAP_QUERY_TYPES                       = 15,
+   SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING         = 16,
+   SVGA3D_DEVCAP_MAX_POINT_SIZE                    = 17,
+   SVGA3D_DEVCAP_MAX_SHADER_TEXTURES               = 18,
+   SVGA3D_DEVCAP_MAX_VOLUME_EXTENT                 = 21,
+   SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT                = 22,
+   SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO          = 23,
+   SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY            = 24,
+   SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT               = 25,
+   SVGA3D_DEVCAP_MAX_VERTEX_INDEX                  = 26,
+   SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS  = 28,
+   SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS           = 29,
+   SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS         = 30,
+   SVGA3D_DEVCAP_TEXTURE_OPS                       = 31,
+   SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8               = 32,
+   SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8               = 33,
+   SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10            = 34,
+   SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5               = 35,
+   SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5               = 36,
+   SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4               = 37,
+   SVGA3D_DEVCAP_SURFACEFMT_R5G6B5                 = 38,
+   SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16            = 39,
+   SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8      = 40,
+   SVGA3D_DEVCAP_SURFACEFMT_ALPHA8                 = 41,
+   SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8             = 42,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D16                  = 43,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8                = 44,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8                = 45,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT1                   = 46,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT2                   = 47,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT3                   = 48,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT4                   = 49,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT5                   = 50,
+   SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8           = 51,
+   SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10            = 52,
+   SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8               = 53,
+   SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8               = 54,
+   SVGA3D_DEVCAP_SURFACEFMT_CxV8U8                 = 55,
+   SVGA3D_DEVCAP_SURFACEFMT_R_S10E5                = 56,
+   SVGA3D_DEVCAP_SURFACEFMT_R_S23E8                = 57,
+   SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5               = 58,
+   SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8               = 59,
+   SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5             = 60,
+   SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8             = 61,
+   SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES        = 63,
+   SVGA3D_DEVCAP_SURFACEFMT_V16U16                 = 65,
+   SVGA3D_DEVCAP_SURFACEFMT_G16R16                 = 66,
+   SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16           = 67,
+   SVGA3D_DEVCAP_SURFACEFMT_UYVY                   = 68,
+   SVGA3D_DEVCAP_SURFACEFMT_YUY2                   = 69,
+   SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES    = 70,
+   SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES       = 71,
+   SVGA3D_DEVCAP_ALPHATOCOVERAGE                   = 72,
+   SVGA3D_DEVCAP_SUPERSAMPLE                       = 73,
+   SVGA3D_DEVCAP_AUTOGENMIPMAPS                    = 74,
+   SVGA3D_DEVCAP_SURFACEFMT_NV12                   = 75,
+   SVGA3D_DEVCAP_SURFACEFMT_AYUV                   = 76,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_DF16                 = 79,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_DF24                 = 80,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT            = 81,
+   SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM              = 82,
+   SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM              = 83,
+#endif
+
+    /* Initialize the shader library. */
+    rc = ShaderInitLib();
+    AssertRC(rc);
+
+    /* Cleanup */
+    rc = vmsvga3dContextDestroy(pThis, 1);
+    AssertRC(rc);
+
+#ifndef RT_OS_DARWIN
+    /* on the Mac, OpenGL 3 came very late so we have a capable 2.1 implementation */
+    if (pState->fGLVersion < 3.0)
+    {
+        LogRel(("VMSVGA3d: unsupported OpenGL version; minimum is 3.0\n"));
+        return VERR_NOT_IMPLEMENTED;
+    }
+#endif
+    if (    !pState->ext.glIsRenderbuffer
+        ||  !pState->ext.glBindRenderbuffer
+        ||  !pState->ext.glDeleteRenderbuffers
+        ||  !pState->ext.glGenRenderbuffers
+        ||  !pState->ext.glRenderbufferStorage
+        ||  !pState->ext.glGetRenderbufferParameteriv
+        ||  !pState->ext.glIsFramebuffer
+        ||  !pState->ext.glBindFramebuffer
+        ||  !pState->ext.glDeleteFramebuffers
+        ||  !pState->ext.glGenFramebuffers
+        ||  !pState->ext.glCheckFramebufferStatus
+        ||  !pState->ext.glFramebufferTexture1D
+        ||  !pState->ext.glFramebufferTexture2D
+        ||  !pState->ext.glFramebufferTexture3D
+        ||  !pState->ext.glFramebufferRenderbuffer
+        ||  !pState->ext.glGetFramebufferAttachmentParameteriv
+        ||  !pState->ext.glGenerateMipmap
+        ||  !pState->ext.glBlitFramebuffer
+        ||  !pState->ext.glRenderbufferStorageMultisample
+        ||  !pState->ext.glFramebufferTextureLayer)
+    {
+        LogRel(("VMSVGA3d: missing required OpenGL extension; aborting\n"));
+        return VERR_NOT_IMPLEMENTED;
+    }
+
+#ifdef DEBUG_DEBUG_GFX_WINDOW_TEST_CONTEXT
+    pState->idTestContext = SVGA_ID_INVALID;
+#endif
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dReset(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+
+    /* Destroy all leftover surfaces. */
+    for (uint32_t i = 0; i < pState->cSurfaces; i++)
+    {
+        if (pState->paSurface[i].id != SVGA3D_INVALID_ID)
+            vmsvga3dSurfaceDestroy(pThis, pState->paSurface[i].id);
+    }
+
+    /* Destroy all leftover contexts. */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        if (pState->paContext[i].id != SVGA3D_INVALID_ID)
+            vmsvga3dContextDestroy(pThis, pState->paContext[i].id);
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dTerminate(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+    int            rc;
+
+    rc = vmsvga3dReset(pThis);
+    AssertRCReturn(rc, rc);
+
+    /* Terminate the shader library. */
+    rc = ShaderDestroyLib();
+    AssertRC(rc);
+
+#ifdef RT_OS_WINDOWS
+    /* Terminate the window creation thread. */
+    rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_EXIT, 0, 0);
+    AssertRCReturn(rc, rc);
+
+    RTSemEventDestroy(pState->WndRequestSem);
+#elif defined(RT_OS_DARWIN)
+
+#elif defined(RT_OS_LINUX)
+    /* signal to the thread that it is supposed to exit */
+    pState->bTerminate = true;
+    /* wait for it to terminate */
+    rc = RTThreadWait(pState->pWindowThread, 10000, NULL);
+    AssertRC(rc);
+    XCloseDisplay(pState->display);
+#endif
+
+    return VINF_SUCCESS;
+}
+
+/* Shared functions that depend on private structure definitions. */
+#define VMSVGA3D_OPENGL
+#include "DevVGA-SVGA3d-shared.h"
+
+static uint32_t vmsvga3dGetSurfaceFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps)
+{
+    uint32_t result = 0;
+
+    /* @todo missing:
+     * 
+     * SVGA3DFORMAT_OP_PIXELSIZE
+     */
+
+    switch (idx3dCaps)
+    {
+    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+        result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB 
+               |  SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+               |  SVGA3DFORMAT_OP_DISPLAYMODE           /* Should not be set for alpha formats. */
+               |  SVGA3DFORMAT_OP_3DACCELERATION;       /* implies OP_DISPLAYMODE */
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+        result |=     SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB 
+                  |   SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+                  |   SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET;
+        break;
+    }
+
+    /* @todo check hardware caps! */
+    switch (idx3dCaps)
+    {
+    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+    case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+        result |= SVGA3DFORMAT_OP_TEXTURE
+               |  SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
+               |  SVGA3DFORMAT_OP_OFFSCREENPLAIN
+               |  SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
+               |  SVGA3DFORMAT_OP_VOLUMETEXTURE
+               |  SVGA3DFORMAT_OP_CUBETEXTURE
+               |  SVGA3DFORMAT_OP_SRGBREAD
+               |  SVGA3DFORMAT_OP_SRGBWRITE;
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+        result |= SVGA3DFORMAT_OP_ZSTENCIL
+               |  SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
+               |  SVGA3DFORMAT_OP_TEXTURE /* Necessary for Ubuntu Unity */;
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+        result |= SVGA3DFORMAT_OP_TEXTURE
+               |  SVGA3DFORMAT_OP_VOLUMETEXTURE
+               |  SVGA3DFORMAT_OP_CUBETEXTURE
+               |  SVGA3DFORMAT_OP_SRGBREAD;
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+    case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+    case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+    case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+
+    case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+    case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+    case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+    case SVGA3D_DEVCAP_SURFACEFMT_AYUV:
+        break;
+    }
+    Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+
+    return result;
+}
+
+static uint32_t vmsvga3dGetDepthFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps)
+{
+    uint32_t result = 0;
+
+    /* @todo test this somehow */
+    result = SVGA3DFORMAT_OP_ZSTENCIL | SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH;
+
+    Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+    return result;
+}
+
+
+int vmsvga3dQueryCaps(PVGASTATE pThis, uint32_t idx3dCaps, uint32_t *pu32Val)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    int       rc = VINF_SUCCESS;
+
+    *pu32Val = 0;
+
+    switch (idx3dCaps)
+    {
+    case SVGA3D_DEVCAP_3D:
+        *pu32Val = 1; /* boolean? */
+        break;
+
+    case SVGA3D_DEVCAP_MAX_LIGHTS:
+        *pu32Val = pState->caps.maxActiveLights;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURES:
+        *pu32Val = pState->caps.maxTextures;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+        *pu32Val = pState->caps.maxClipDistances;
+        break;
+
+    case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+        *pu32Val = pState->caps.vertexShaderVersion;
+        break;
+
+    case SVGA3D_DEVCAP_VERTEX_SHADER:
+        /* boolean? */
+        *pu32Val = (pState->caps.vertexShaderVersion != SVGA3DVSVERSION_NONE);
+        break;
+
+    case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+        *pu32Val = pState->caps.fragmentShaderVersion;
+        break;
+
+    case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+        /* boolean? */
+        *pu32Val = (pState->caps.fragmentShaderVersion != SVGA3DPSVERSION_NONE);
+        break;
+
+    case SVGA3D_DEVCAP_S23E8_TEXTURES:
+    case SVGA3D_DEVCAP_S10E5_TEXTURES:
+        /* Must be obsolete by now; surface format caps specify the same thing. */
+        rc = VERR_INVALID_PARAMETER;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+        break;
+
+    /*
+     *   2. The BUFFER_FORMAT capabilities are deprecated, and they always
+     *      return TRUE. Even on physical hardware that does not support
+     *      these formats natively, the SVGA3D device will provide an emulation
+     *      which should be invisible to the guest OS.
+     */
+    case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+    case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+    case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+        *pu32Val = 1;
+        break;
+
+    case SVGA3D_DEVCAP_QUERY_TYPES:
+        break;
+
+    case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+        break;
+
+    case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+        AssertCompile(sizeof(uint32_t) == sizeof(float));
+        *(float *)pu32Val = pState->caps.flPointSize[1];
+        break;
+
+    case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+        /* @todo ?? */
+        rc = VERR_INVALID_PARAMETER;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+    case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+        *pu32Val = pState->caps.maxRectangleTextureSize;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+        //*pu32Val = pCaps->MaxVolumeExtent;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+        *pu32Val = 32768;   /* hardcoded in Wine */
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+        //*pu32Val = pCaps->MaxTextureAspectRatio;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+        *pu32Val = pState->caps.maxTextureAnisotropy;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+    case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+        *pu32Val =  0xFFFFF; /* hardcoded in Wine */
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+        *pu32Val = pState->caps.maxVertexShaderInstructions;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+        *pu32Val = pState->caps.maxFragmentShaderInstructions;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+        *pu32Val = pState->caps.maxVertexShaderTemps;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+        *pu32Val = pState->caps.maxFragmentShaderTemps;
+        break;
+
+    case SVGA3D_DEVCAP_TEXTURE_OPS:
+        break;
+
+    case SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES:
+        break;
+
+    case SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES:
+        break;
+
+    case SVGA3D_DEVCAP_ALPHATOCOVERAGE:
+        break;
+
+    case SVGA3D_DEVCAP_SUPERSAMPLE:
+        break;
+
+    case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+        //*pu32Val = !!(pCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP);
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+        break;
+
+    case SVGA3D_DEVCAP_MAX_RENDER_TARGETS:  /* @todo same thing? */
+    case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+        *pu32Val = pState->caps.maxColorAttachments;
+        break;
+
+    /*
+     * This is the maximum number of SVGA context IDs that the guest
+     * can define using SVGA_3D_CMD_CONTEXT_DEFINE.
+     */
+    case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+        *pu32Val = SVGA3D_MAX_CONTEXT_IDS;
+        break;
+
+    /*
+     * This is the maximum number of SVGA surface IDs that the guest
+     * can define using SVGA_3D_CMD_SURFACE_DEFINE*.
+     */
+    case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+        *pu32Val = SVGA3D_MAX_SURFACE_IDS;
+        break;
+
+    /* Supported surface formats. */
+    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+    case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+        *pu32Val = 0;   /* apparently not supported in OpenGL */
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+    case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+    case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+    case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+    case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+    case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+    case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+    case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+    case SVGA3D_DEVCAP_SURFACEFMT_AYUV:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM:
+    case SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM:
+        Log(("CAPS: Unknown CAP %s\n", vmsvga3dGetCapString(idx3dCaps)));
+        rc = VERR_INVALID_PARAMETER;
+        *pu32Val = 0;
+        break;
+
+    default:
+        Log(("CAPS: Unexpected CAP %d\n", idx3dCaps));
+        rc = VERR_INVALID_PARAMETER;
+        break;
+    }
+
+    Log(("CAPS: %s - %x\n", vmsvga3dGetCapString(idx3dCaps), *pu32Val));
+    return rc;
+}
+
+/**
+ * Convert SVGA format value to its OpenGL equivalent
+ */
+static void vmsvga3dSurfaceFormat2OGL(PVMSVGA3DSURFACE pSurface, SVGA3dSurfaceFormat format)
+{
+    switch (format)
+    {
+    case SVGA3D_X8R8G8B8:
+        pSurface->internalFormatGL = GL_RGB8;
+        pSurface->formatGL = GL_BGRA;
+        pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+        break;
+    case SVGA3D_A8R8G8B8:
+        pSurface->internalFormatGL = GL_RGBA8;
+        pSurface->formatGL = GL_BGRA;
+        pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+        break;
+    case SVGA3D_R5G6B5:
+        pSurface->internalFormatGL = GL_RGB;
+        pSurface->formatGL = GL_RGB;
+        pSurface->typeGL = GL_UNSIGNED_SHORT_5_6_5;
+        break;
+    case SVGA3D_X1R5G5B5:
+        pSurface->internalFormatGL = GL_RGB;
+        pSurface->formatGL = GL_RGB;
+        pSurface->typeGL = GL_UNSIGNED_SHORT_1_5_5_5_REV;
+        break;
+    case SVGA3D_A1R5G5B5:
+        pSurface->internalFormatGL = GL_RGBA;
+        pSurface->formatGL = GL_RGB;
+        pSurface->typeGL = GL_UNSIGNED_SHORT_1_5_5_5_REV;
+        break;
+    case SVGA3D_A4R4G4B4:
+        pSurface->internalFormatGL = GL_RGBA;
+        pSurface->formatGL = GL_RGBA;
+        pSurface->typeGL =  GL_UNSIGNED_SHORT_4_4_4_4;
+        break;
+
+    case SVGA3D_Z_D32:
+        pSurface->internalFormatGL = GL_DEPTH_COMPONENT32;
+        pSurface->formatGL = GL_DEPTH_COMPONENT;
+        pSurface->typeGL = GL_UNSIGNED_INT;
+        break;
+    case SVGA3D_Z_D16:
+        pSurface->internalFormatGL = GL_DEPTH_COMPONENT16;
+        pSurface->formatGL = GL_DEPTH_COMPONENT;
+        pSurface->typeGL = GL_UNSIGNED_SHORT;
+        break;
+    case SVGA3D_Z_D24S8:
+        pSurface->internalFormatGL = GL_DEPTH24_STENCIL8;
+        pSurface->formatGL = GL_DEPTH_STENCIL;
+        pSurface->typeGL = GL_UNSIGNED_INT;
+        break;
+    case SVGA3D_Z_D15S1:
+        pSurface->internalFormatGL = GL_DEPTH_COMPONENT16;  /* @todo ??? */
+        pSurface->formatGL = GL_DEPTH_STENCIL;
+        pSurface->typeGL = GL_UNSIGNED_SHORT;
+        break;
+    case SVGA3D_Z_D24X8:
+        pSurface->internalFormatGL = GL_DEPTH_COMPONENT24;
+        pSurface->formatGL = GL_DEPTH_COMPONENT;
+        pSurface->typeGL = GL_UNSIGNED_INT;
+        break;
+
+    /* Advanced D3D9 depth formats. */
+    case SVGA3D_Z_DF16:
+        pSurface->internalFormatGL = GL_DEPTH_COMPONENT16;
+        pSurface->formatGL = GL_DEPTH_COMPONENT;
+        pSurface->typeGL = GL_FLOAT;
+        break;
+
+    case SVGA3D_Z_DF24:
+        pSurface->internalFormatGL = GL_DEPTH_COMPONENT24;
+        pSurface->formatGL = GL_DEPTH_COMPONENT;
+        pSurface->typeGL = GL_FLOAT;        /* ??? */
+        break;
+
+    case SVGA3D_Z_D24S8_INT:
+        pSurface->internalFormatGL = GL_DEPTH24_STENCIL8;
+        pSurface->formatGL = GL_DEPTH_STENCIL;
+        pSurface->typeGL = GL_INT;        /* ??? */
+        break;
+
+    case SVGA3D_DXT1:
+        pSurface->internalFormatGL = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+        pSurface->formatGL = GL_RGBA_S3TC;          /* ??? */
+        pSurface->typeGL = GL_UNSIGNED_INT;         /* ??? */
+        break;
+
+    case SVGA3D_DXT3:
+        pSurface->internalFormatGL = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
+        pSurface->formatGL = GL_RGBA_S3TC;          /* ??? */
+        pSurface->typeGL = GL_UNSIGNED_INT;         /* ??? */
+        break;
+
+    case SVGA3D_DXT5:
+        pSurface->internalFormatGL = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+        pSurface->formatGL = GL_RGBA_S3TC;
+        pSurface->typeGL = GL_UNSIGNED_INT;
+        break;
+
+    case SVGA3D_LUMINANCE8:
+        pSurface->internalFormatGL = GL_LUMINANCE8_EXT;
+        pSurface->formatGL = GL_LUMINANCE;
+        pSurface->typeGL = GL_UNSIGNED_BYTE;
+        break;
+
+    case SVGA3D_LUMINANCE16:
+        pSurface->internalFormatGL = GL_LUMINANCE16_EXT;
+        pSurface->formatGL = GL_LUMINANCE;
+        pSurface->typeGL = GL_UNSIGNED_SHORT;
+        break;
+
+    case SVGA3D_LUMINANCE4_ALPHA4:
+        pSurface->internalFormatGL = GL_LUMINANCE4_ALPHA4_EXT;
+        pSurface->formatGL = GL_LUMINANCE_ALPHA;
+        pSurface->typeGL = GL_UNSIGNED_BYTE;
+        break;
+
+    case SVGA3D_LUMINANCE8_ALPHA8:
+        pSurface->internalFormatGL = GL_LUMINANCE8_ALPHA8_EXT;
+        pSurface->formatGL = GL_LUMINANCE_ALPHA;
+        pSurface->typeGL = GL_UNSIGNED_BYTE;    /* unsigned_short causes issues even though this type should be 16-bit */
+        break;
+
+    case SVGA3D_ALPHA8:
+        pSurface->internalFormatGL = GL_ALPHA8_EXT;
+        pSurface->formatGL = GL_ALPHA;
+        pSurface->typeGL = GL_UNSIGNED_BYTE;
+        break;
+
+#if 0
+
+    /* Bump-map formats */
+    case SVGA3D_BUMPU8V8:
+        return D3DFMT_V8U8;
+    case SVGA3D_BUMPL6V5U5:
+        return D3DFMT_L6V5U5;
+    case SVGA3D_BUMPX8L8V8U8:
+        return D3DFMT_X8L8V8U8;
+    case SVGA3D_BUMPL8V8U8:
+        /* No corresponding D3D9 equivalent. */
+        AssertFailedReturn(D3DFMT_UNKNOWN);
+    /* signed bump-map formats */
+    case SVGA3D_V8U8:
+        return D3DFMT_V8U8;
+    case SVGA3D_Q8W8V8U8:
+        return D3DFMT_Q8W8V8U8;
+    case SVGA3D_CxV8U8:
+        return D3DFMT_CxV8U8;
+    /* mixed bump-map formats */
+    case SVGA3D_X8L8V8U8:
+        return D3DFMT_X8L8V8U8;
+    case SVGA3D_A2W10V10U10:
+        return D3DFMT_A2W10V10U10;
+#endif
+
+    case SVGA3D_ARGB_S10E5:   /* 16-bit floating-point ARGB */
+        pSurface->internalFormatGL = GL_RGBA16F;
+        pSurface->formatGL = GL_RGBA;
+        pSurface->typeGL = GL_FLOAT;
+        break;
+
+    case SVGA3D_ARGB_S23E8:   /* 32-bit floating-point ARGB */
+        pSurface->internalFormatGL = GL_RGBA32F;
+        pSurface->formatGL = GL_RGBA;
+        pSurface->typeGL = GL_FLOAT;    /* ?? */
+        break;
+
+    case SVGA3D_A2R10G10B10:
+        pSurface->internalFormatGL = GL_RGB10_A2; /* ?? */
+        pSurface->formatGL = GL_RGBA;
+        pSurface->typeGL = GL_UNSIGNED_INT;
+        break;
+
+
+    /* Single- and dual-component floating point formats */
+    case SVGA3D_R_S10E5:
+        pSurface->internalFormatGL = GL_R16F;
+        pSurface->formatGL = GL_RED;
+        pSurface->typeGL = GL_FLOAT;
+        break;
+    case SVGA3D_R_S23E8:
+        pSurface->internalFormatGL = GL_R32F;
+        pSurface->formatGL = GL_RG;
+        pSurface->typeGL = GL_FLOAT;
+        break;
+    case SVGA3D_RG_S10E5:
+        pSurface->internalFormatGL = GL_RG16F;
+        pSurface->formatGL = GL_RG;
+        pSurface->typeGL = GL_FLOAT;
+        break;
+    case SVGA3D_RG_S23E8:
+        pSurface->internalFormatGL = GL_RG32F;
+        pSurface->formatGL = GL_RG;
+        pSurface->typeGL = GL_FLOAT;
+        break;
+
+    /*
+     * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+     * the most efficient format to use when creating new surfaces
+     * expressly for index or vertex data.
+     */
+    case SVGA3D_BUFFER:
+        pSurface->internalFormatGL = -1;
+        pSurface->formatGL = -1;
+        pSurface->typeGL = -1;
+        break;
+
+#if 0
+        return D3DFMT_UNKNOWN;
+
+    case SVGA3D_V16U16:
+        return D3DFMT_V16U16;
+#endif
+
+    case SVGA3D_G16R16:
+        pSurface->internalFormatGL = GL_RG16;
+        pSurface->formatGL = GL_RG;
+        pSurface->typeGL = GL_UNSIGNED_INT;
+        break;
+
+    case SVGA3D_A16B16G16R16:
+        pSurface->internalFormatGL = GL_RGBA16;
+        pSurface->formatGL = GL_RG;
+        pSurface->typeGL = GL_UNSIGNED_INT;     /* ??? */
+        break;
+
+#if 0
+    /* Packed Video formats */
+    case SVGA3D_UYVY:
+        return D3DFMT_UYVY;
+    case SVGA3D_YUY2:
+        return D3DFMT_YUY2;
+
+    /* Planar video formats */
+    case SVGA3D_NV12:
+        return (D3DFORMAT)MAKEFOURCC('N', 'V', '1', '2');
+
+    /* Video format with alpha */
+    case SVGA3D_AYUV:
+        return (D3DFORMAT)MAKEFOURCC('A', 'Y', 'U', 'V');
+
+    case SVGA3D_BC4_UNORM:
+    case SVGA3D_BC5_UNORM:
+        /* Unknown; only in DX10 & 11 */
+        break;
+#endif
+    default:
+        AssertMsgFailed(("Unsupported format %d\n", format));
+        break;
+    }
+}
+
+
+#if 0
+/**
+ * Convert SVGA multi sample count value to its D3D equivalent
+ */
+D3DMULTISAMPLE_TYPE vmsvga3dMultipeSampleCount2D3D(uint32_t multisampleCount)
+{
+    AssertCompile(D3DMULTISAMPLE_2_SAMPLES == 2);
+    AssertCompile(D3DMULTISAMPLE_16_SAMPLES == 16);
+
+    if (multisampleCount > 16)
+        return D3DMULTISAMPLE_NONE;
+
+    /* @todo exact same mapping as d3d? */
+    return (D3DMULTISAMPLE_TYPE)multisampleCount;
+}
+#endif
+
+int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags, SVGA3dSurfaceFormat format, SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES],
+                          uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter, uint32_t cMipLevels, SVGA3dSize *pMipLevelSize)
+{
+    PVMSVGA3DSURFACE pSurface;
+    PVMSVGA3DSTATE   pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSurfaceDefine: sid=%x surfaceFlags=%x format=%s (%x) multiSampleCount=%d autogenFilter=%d, cMipLevels=%d size=(%d,%d,%d)\n", 
+         sid, surfaceFlags, vmsvgaSurfaceType2String(format), format, multisampleCount, autogenFilter, cMipLevels, pMipLevelSize->width, pMipLevelSize->height, pMipLevelSize->depth));
+
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(cMipLevels >= 1, VERR_INVALID_PARAMETER);
+    /* Assuming all faces have the same nr of mipmaps. */
+    AssertReturn(!(surfaceFlags & SVGA3D_SURFACE_CUBEMAP) || cMipLevels == face[0].numMipLevels * 6, VERR_INVALID_PARAMETER);
+    AssertReturn((surfaceFlags & SVGA3D_SURFACE_CUBEMAP) || cMipLevels == face[0].numMipLevels, VERR_INVALID_PARAMETER);
+
+    if (sid >= pState->cSurfaces)
+    {
+        pState->paSurface = (PVMSVGA3DSURFACE )RTMemRealloc(pState->paSurface, sizeof(VMSVGA3DSURFACE) * (sid + 1));
+        AssertReturn(pState->paSurface, VERR_NO_MEMORY);
+        memset(&pState->paSurface[pState->cSurfaces], 0, sizeof(VMSVGA3DSURFACE) * (sid + 1 - pState->cSurfaces));
+        for (uint32_t i = pState->cSurfaces; i < sid + 1; i++)
+            pState->paSurface[i].id = SVGA3D_INVALID_ID;
+
+        pState->cSurfaces = sid + 1;
+    }
+    /* If one already exists with this id, then destroy it now. */
+    if (pState->paSurface[sid].id != SVGA3D_INVALID_ID)
+        vmsvga3dSurfaceDestroy(pThis, sid);
+
+    pSurface = &pState->paSurface[sid];
+    memset(pSurface, 0, sizeof(*pSurface));
+    pSurface->id                    = sid;
+    pSurface->idAssociatedContext   = SVGA3D_INVALID_ID;
+    vmsvga3dSurfaceFormat2OGL(pSurface, format);
+
+    pSurface->oglId.buffer = OPENGL_INVALID_ID;
+
+    /* The surface type is sort of undefined now, even though the hints and format can help to clear that up. 
+     * In some case we'll have to wait until the surface is used to create the D3D object.
+     */
+    switch (format)
+    {
+    case SVGA3D_Z_D32:
+    case SVGA3D_Z_D16:
+    case SVGA3D_Z_D24S8:
+    case SVGA3D_Z_D15S1:
+    case SVGA3D_Z_D24X8:
+    case SVGA3D_Z_DF16:
+    case SVGA3D_Z_DF24:
+    case SVGA3D_Z_D24S8_INT:
+        surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+        break;
+
+    /* Texture compression formats */
+    case SVGA3D_DXT1:
+    case SVGA3D_DXT2:
+    case SVGA3D_DXT3:
+    case SVGA3D_DXT4:
+    case SVGA3D_DXT5:
+    /* Bump-map formats */
+    case SVGA3D_BUMPU8V8:
+    case SVGA3D_BUMPL6V5U5:
+    case SVGA3D_BUMPX8L8V8U8:
+    case SVGA3D_BUMPL8V8U8:
+    case SVGA3D_V8U8:
+    case SVGA3D_Q8W8V8U8:
+    case SVGA3D_CxV8U8:
+    case SVGA3D_X8L8V8U8:
+    case SVGA3D_A2W10V10U10:
+    case SVGA3D_V16U16:
+    /* Typical render target formats; we should allow render target buffers to be used as textures. */
+    case SVGA3D_X8R8G8B8:
+    case SVGA3D_A8R8G8B8:
+    case SVGA3D_R5G6B5:
+    case SVGA3D_X1R5G5B5:
+    case SVGA3D_A1R5G5B5:
+    case SVGA3D_A4R4G4B4:
+        surfaceFlags |= SVGA3D_SURFACE_HINT_TEXTURE;
+        break;
+
+    case SVGA3D_LUMINANCE8:
+    case SVGA3D_LUMINANCE4_ALPHA4:
+    case SVGA3D_LUMINANCE16:
+    case SVGA3D_LUMINANCE8_ALPHA8:
+    case SVGA3D_ARGB_S10E5:   /* 16-bit floating-point ARGB */
+    case SVGA3D_ARGB_S23E8:   /* 32-bit floating-point ARGB */
+    case SVGA3D_A2R10G10B10:
+    case SVGA3D_ALPHA8:
+    case SVGA3D_R_S10E5:
+    case SVGA3D_R_S23E8:
+    case SVGA3D_RG_S10E5:
+    case SVGA3D_RG_S23E8:
+    case SVGA3D_G16R16:
+    case SVGA3D_A16B16G16R16:
+    case SVGA3D_UYVY:
+    case SVGA3D_YUY2:
+    case SVGA3D_NV12:
+    case SVGA3D_AYUV:
+    case SVGA3D_BC4_UNORM:
+    case SVGA3D_BC5_UNORM:
+        break;
+
+    /*
+     * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+     * the most efficient format to use when creating new surfaces
+     * expressly for index or vertex data.
+     */
+    case SVGA3D_BUFFER:
+        break;
+
+    default:
+        break;
+    }
+
+    pSurface->flags             = surfaceFlags;
+    pSurface->format            = format;
+    memcpy(pSurface->faces, face, sizeof(face));
+    pSurface->cFaces            = 1;        /* check for cube maps later */
+    pSurface->multiSampleCount  = multisampleCount;
+    pSurface->autogenFilter     = autogenFilter;
+    Assert(autogenFilter != SVGA3D_TEX_FILTER_FLATCUBIC);
+    Assert(autogenFilter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+    pSurface->pMipmapLevels     = (PVMSVGA3DMIPMAPLEVEL)RTMemAllocZ(cMipLevels * sizeof(VMSVGA3DMIPMAPLEVEL));
+    AssertReturn(pSurface->pMipmapLevels, VERR_NO_MEMORY);
+
+    for (uint32_t i=0; i < cMipLevels; i++)
+        pSurface->pMipmapLevels[i].size = pMipLevelSize[i];
+
+    pSurface->cbBlock = vmsvga3dSurfaceFormatSize(format);
+
+    switch (surfaceFlags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+    {
+    case SVGA3D_SURFACE_CUBEMAP:
+        Log(("SVGA3D_SURFACE_CUBEMAP\n"));
+        pSurface->cFaces = 6;
+        break;
+
+    case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+        Log(("SVGA3D_SURFACE_HINT_INDEXBUFFER\n"));
+        /* else type unknown at this time; postpone buffer creation */
+        break;
+
+    case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+        Log(("SVGA3D_SURFACE_HINT_VERTEXBUFFER\n"));
+        /* Type unknown at this time; postpone buffer creation */
+        break;
+
+    case SVGA3D_SURFACE_HINT_TEXTURE:
+        Log(("SVGA3D_SURFACE_HINT_TEXTURE\n"));
+        break;
+
+    case SVGA3D_SURFACE_HINT_RENDERTARGET:
+        Log(("SVGA3D_SURFACE_HINT_RENDERTARGET\n"));
+        break;
+
+    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+        Log(("SVGA3D_SURFACE_HINT_DEPTHSTENCIL\n"));
+        break;
+
+    default:
+        /* Unknown; decide later. */
+        break;
+    }
+   
+    /* Allocate buffer to hold the surface data until we can move it into a D3D object */
+    for (uint32_t iFace=0; iFace < pSurface->cFaces; iFace++)
+    {
+        for (uint32_t i=0; i < pSurface->faces[iFace].numMipLevels; i++)
+        {
+            uint32_t idx = i + iFace * pSurface->faces[0].numMipLevels;
+
+            Log(("vmsvga3dSurfaceDefine: face %d mip level %d (%d,%d,%d)\n", iFace, i, pSurface->pMipmapLevels[idx].size.width, pSurface->pMipmapLevels[idx].size.height, pSurface->pMipmapLevels[idx].size.depth));
+            Log(("vmsvga3dSurfaceDefine: cbPitch=%x cbBlock=%x \n", pSurface->cbBlock * pSurface->pMipmapLevels[idx].size.width, pSurface->cbBlock));
+
+            pSurface->pMipmapLevels[idx].cbSurfacePitch = pSurface->cbBlock * pSurface->pMipmapLevels[idx].size.width;
+            pSurface->pMipmapLevels[idx].cbSurface      = pSurface->pMipmapLevels[idx].cbSurfacePitch * pSurface->pMipmapLevels[idx].size.height * pSurface->pMipmapLevels[idx].size.depth;
+            pSurface->pMipmapLevels[idx].pSurfaceData   = RTMemAllocZ(pSurface->pMipmapLevels[idx].cbSurface);
+            AssertReturn(pSurface->pMipmapLevels[idx].pSurfaceData, VERR_NO_MEMORY);
+        }
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceDestroy(PVGASTATE pThis, uint32_t sid)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    if (    sid < pState->cSurfaces
+        &&  pState->paSurface[sid].id == sid)
+    {
+        PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+        PVMSVGA3DCONTEXT pContext = NULL;
+
+        Log(("vmsvga3dSurfaceDestroy id %x\n", sid));
+
+        /* @todo stricter checks for associated context */
+        uint32_t cid = pSurface->idAssociatedContext;
+        if (    cid <= pState->cContexts
+            &&  pState->paContext[cid].id == cid)
+        {
+            pContext = &pState->paContext[cid];
+            VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+        }
+        else
+        {
+            /* Pick any active context; we need something here */
+            for (cid = 0; cid < pState->cContexts; cid++)
+            {
+                if (pState->paContext[cid].id == cid)
+                {
+                    pContext = &pState->paContext[cid];
+                    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+                    break;
+                }
+            }
+            AssertReturn(pContext, VERR_INTERNAL_ERROR);    /* otherwise crashes/fails */
+        }
+
+        switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+        {
+        case SVGA3D_SURFACE_CUBEMAP:
+            AssertFailed(); /* @todo */
+            break;
+
+        case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+        case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+            if (pSurface->oglId.buffer != OPENGL_INVALID_ID)
+            {
+                pState->ext.glDeleteBuffers(1, &pSurface->oglId.buffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            break;
+
+        case SVGA3D_SURFACE_HINT_TEXTURE:
+        case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+            if (pSurface->oglId.texture != OPENGL_INVALID_ID)
+            {
+                glDeleteTextures(1, &pSurface->oglId.texture);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            break;
+
+        case SVGA3D_SURFACE_HINT_RENDERTARGET:
+        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE:    /* @todo actual texture surface not supported */
+            if (pSurface->oglId.renderbuffer != OPENGL_INVALID_ID)
+            {
+                pState->ext.glDeleteRenderbuffers(1, &pSurface->oglId.renderbuffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            break;
+
+        default:
+            break;
+        }
+
+        if (pSurface->pMipmapLevels)
+        {
+            for (uint32_t face=0; face < pSurface->cFaces; face++)
+            {
+                for (uint32_t i=0; i < pSurface->faces[face].numMipLevels; i++)
+                {
+                    uint32_t idx = i + face * pSurface->faces[0].numMipLevels;
+                    if (pSurface->pMipmapLevels[idx].pSurfaceData)
+                        RTMemFree(pSurface->pMipmapLevels[idx].pSurfaceData);
+                }
+            }
+            RTMemFree(pSurface->pMipmapLevels);
+        }
+
+        memset(pSurface, 0, sizeof(*pSurface));
+        pSurface->id = SVGA3D_INVALID_ID;
+    }
+    else
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceCopy(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    uint32_t            sidSrc = src.sid;
+    uint32_t            sidDest = dest.sid;
+    int                 rc = VINF_SUCCESS;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sidSrc < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidSrc < pState->cSurfaces && pState->paSurface[sidSrc].id == sidSrc, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < pState->cSurfaces && pState->paSurface[sidDest].id == sidDest, VERR_INVALID_PARAMETER);
+
+    for (uint32_t i = 0; i < cCopyBoxes; i++)
+    {
+        SVGA3dBox destBox, srcBox;
+
+        srcBox.x = pBox[i].srcx;
+        srcBox.y = pBox[i].srcy;
+        srcBox.z = pBox[i].srcz;
+        srcBox.w = pBox[i].w;
+        srcBox.h = pBox[i].h;
+        srcBox.d = pBox[i].z;
+
+        destBox.x = pBox[i].x;
+        destBox.y = pBox[i].y;
+        destBox.z = pBox[i].z;
+        destBox.w = pBox[i].w;
+        destBox.h = pBox[i].h;
+        destBox.z = pBox[i].z;
+
+        rc = vmsvga3dSurfaceStretchBlt(pThis, dest, destBox, src, srcBox, SVGA3D_STRETCH_BLT_LINEAR);
+        AssertRCReturn(rc, rc);
+    }
+    return VINF_SUCCESS;
+}
+
+/* Create D3D texture object for the specified surface. */
+static int vmsvga3dCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface)
+{
+    GLint activeTexture = 0;
+
+    glGenTextures(1, &pSurface->oglId.texture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    /* @todo Set the mip map generation filter settings. */
+
+    glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Must bind texture to the current context in order to change it. */
+    glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    if (pSurface->fDirty)
+    {
+        Log(("vmsvga3dCreateTexture: sync dirty texture\n"));
+        for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+        {
+            if (pSurface->pMipmapLevels[i].fDirty)
+            {
+                Log(("vmsvga3dCreateTexture: sync dirty texture mipmap level %d (pitch %x)\n", i, pSurface->pMipmapLevels[i].cbSurfacePitch));
+
+                glTexImage2D(GL_TEXTURE_2D, 
+                             i, 
+                             pSurface->internalFormatGL, 
+                             pSurface->pMipmapLevels[i].size.width, 
+                             pSurface->pMipmapLevels[i].size.height, 
+                             0, 
+                             pSurface->formatGL, 
+                             pSurface->typeGL, 
+                             pSurface->pMipmapLevels[i].pSurfaceData);
+
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                pSurface->pMipmapLevels[i].fDirty = false;
+            }
+        }
+        pSurface->fDirty = false;
+    }
+    else
+        /* Reserve texture memory. */
+        glTexImage2D(GL_TEXTURE_2D, 
+                     0, 
+                     pSurface->internalFormatGL, 
+                     pSurface->pMipmapLevels[0].size.width, 
+                     pSurface->pMipmapLevels[0].size.height, 
+                     0, 
+                     pSurface->formatGL,
+                     pSurface->typeGL, 
+                     NULL);
+
+    /* Restore the old active texture. */
+    glBindTexture(GL_TEXTURE_2D, activeTexture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    pSurface->flags              |= SVGA3D_SURFACE_HINT_TEXTURE;
+    pSurface->idAssociatedContext = idAssociatedContext;
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dBox destBox, SVGA3dSurfaceImageId src, SVGA3dBox srcBox, SVGA3dStretchBltMode mode)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurfaceSrc;
+    uint32_t            sidSrc = src.sid;
+    PVMSVGA3DSURFACE    pSurfaceDest;
+    uint32_t            sidDest = dest.sid;
+    int                 rc = VINF_SUCCESS;
+    uint32_t            cid;
+    PVMSVGA3DCONTEXT    pContext;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sidSrc < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidSrc < pState->cSurfaces && pState->paSurface[sidSrc].id == sidSrc, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < pState->cSurfaces && pState->paSurface[sidDest].id == sidDest, VERR_INVALID_PARAMETER);
+
+    pSurfaceSrc  = &pState->paSurface[sidSrc];
+    pSurfaceDest = &pState->paSurface[sidDest];
+    AssertReturn(pSurfaceSrc->faces[0].numMipLevels > src.mipmap, VERR_INVALID_PARAMETER);
+    AssertReturn(pSurfaceDest->faces[0].numMipLevels > dest.mipmap, VERR_INVALID_PARAMETER);
+
+    Log(("vmsvga3dSurfaceStretchBlt: src sid=%x (%d,%d)(%d,%d) dest sid=%x (%d,%d)(%d,%d) mode=%x\n", src.sid, srcBox.x, srcBox.y, srcBox.x + srcBox.w, srcBox.y + srcBox.h, dest.sid, destBox.x, destBox.y, destBox.x + destBox.w, destBox.y + destBox.h, mode));
+
+    /* @todo stricter checks for associated context */
+    cid = pSurfaceDest->idAssociatedContext;
+    if (cid == SVGA3D_INVALID_ID)
+        cid = pSurfaceSrc->idAssociatedContext;
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSurfaceStretchBlt invalid context id!\n"));
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    if (pSurfaceSrc->oglId.texture == OPENGL_INVALID_ID)
+    {
+        /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
+        Log(("vmsvga3dSurfaceStretchBlt: unknown src surface id=%x type=%d format=%d -> create texture\n", sidSrc, pSurfaceSrc->flags, pSurfaceSrc->format));
+        rc = vmsvga3dCreateTexture(pState, pContext, cid, pSurfaceSrc);
+        AssertRCReturn(rc, rc);
+    }
+
+    if (pSurfaceDest->oglId.texture == OPENGL_INVALID_ID)
+    {
+        /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
+        Log(("vmsvga3dSurfaceStretchBlt: unknown dest surface id=%x type=%d format=%d -> create texture\n", sidDest, pSurfaceDest->flags, pSurfaceDest->format));
+        rc = vmsvga3dCreateTexture(pState, pContext, cid, pSurfaceDest);
+        AssertRCReturn(rc, rc);
+    }
+
+    /* Activate the read and draw framebuffer objects. */
+    pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, pContext->idDrawFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Bind the source and destination objects to the right place. */
+    pState->ext.glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pSurfaceSrc->oglId.texture, src.mipmap);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    pState->ext.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pSurfaceDest->oglId.texture, dest.mipmap);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    Log(("src conv. (%d,%d)(%d,%d); dest conv (%d,%d)(%d,%d)\n", srcBox.x, D3D_TO_OGL_Y_COORD(pSurfaceSrc, srcBox.y + srcBox.h),     
+         srcBox.x + srcBox.w, D3D_TO_OGL_Y_COORD(pSurfaceSrc, srcBox.y), destBox.x, D3D_TO_OGL_Y_COORD(pSurfaceDest, destBox.y + destBox.h),  
+         destBox.x + destBox.w, D3D_TO_OGL_Y_COORD(pSurfaceDest, destBox.y)));
+
+    pState->ext.glBlitFramebuffer(srcBox.x,
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                                  D3D_TO_OGL_Y_COORD(pSurfaceSrc, srcBox.y + srcBox.h),     /* inclusive */
+#else
+                                  srcBox.y,
+#endif
+                                  srcBox.x + srcBox.w,                                      /* exclusive. */
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                                  D3D_TO_OGL_Y_COORD(pSurfaceSrc, srcBox.y),                /* exclusive */
+#else
+                                  srcBox.y + srcBox.h,
+#endif
+                                  destBox.x,
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                                  D3D_TO_OGL_Y_COORD(pSurfaceDest, destBox.y + destBox.h),  /* inclusive. */
+#else
+                                  destBox.y,
+#endif
+                                  destBox.x + destBox.w,                                    /* exclusive. */
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                                  D3D_TO_OGL_Y_COORD(pSurfaceDest, destBox.y),              /* exclusive */                         
+#else
+                                  destBox.y + destBox.h,
+#endif
+                                  GL_COLOR_BUFFER_BIT,
+                                  (mode == SVGA3D_STRETCH_BLT_POINT) ? GL_NEAREST : GL_LINEAR);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Reset the frame buffer association */
+    pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceDMA(PVGASTATE pThis, SVGA3dGuestImage guest, SVGA3dSurfaceImageId host, SVGA3dTransferType transfer, uint32_t cCopyBoxes, SVGA3dCopyBox *pBoxes)
+{
+    PVMSVGA3DSTATE          pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE        pSurface;
+    PVMSVGA3DMIPMAPLEVEL    pMipLevel;
+    uint32_t                sid = host.sid;
+    int                     rc = VINF_SUCCESS;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    pSurface = &pState->paSurface[sid];
+    AssertReturn(pSurface->faces[0].numMipLevels > host.mipmap, VERR_INVALID_PARAMETER);
+    pMipLevel = &pSurface->pMipmapLevels[host.mipmap];
+
+    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
+        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+    else
+        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+
+    if (pSurface->oglId.texture == OPENGL_INVALID_ID)
+    {
+        AssertReturn(pSurface->pMipmapLevels[host.mipmap].pSurfaceData, VERR_INTERNAL_ERROR);
+
+        for (unsigned i = 0; i < cCopyBoxes; i++)
+        {
+            unsigned uDestOffset;
+            unsigned cbSrcPitch;
+            uint8_t *pBufferStart;
+
+            Log(("Copy box %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n", i, pBoxes[i].srcx, pBoxes[i].srcy, pBoxes[i].srcz, pBoxes[i].w, pBoxes[i].h, pBoxes[i].d, pBoxes[i].x, pBoxes[i].y));
+            /* Apparently we're supposed to clip it (gmr test sample) */
+            if (pBoxes[i].x + pBoxes[i].w > pMipLevel->size.width)
+                pBoxes[i].w = pMipLevel->size.width - pBoxes[i].x;
+            if (pBoxes[i].y + pBoxes[i].h > pMipLevel->size.height)
+                pBoxes[i].h = pMipLevel->size.height - pBoxes[i].y;
+            if (pBoxes[i].z + pBoxes[i].d > pMipLevel->size.depth)
+                pBoxes[i].d = pMipLevel->size.depth - pBoxes[i].z;
+
+            if (    !pBoxes[i].w
+                ||  !pBoxes[i].h
+                ||  !pBoxes[i].d
+                ||   pBoxes[i].x > pMipLevel->size.width
+                ||   pBoxes[i].y > pMipLevel->size.height
+                ||   pBoxes[i].z > pMipLevel->size.depth)
+            {
+                Log(("Empty box; skip\n"));
+                continue;
+            }
+
+            uDestOffset = pBoxes[i].x * pSurface->cbBlock + pBoxes[i].y * pMipLevel->cbSurfacePitch + pBoxes[i].z * pMipLevel->size.height * pMipLevel->cbSurfacePitch;
+            AssertReturn(uDestOffset + pBoxes[i].w * pSurface->cbBlock * pBoxes[i].h * pBoxes[i].d <= pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+
+            cbSrcPitch = (guest.pitch == 0) ? pBoxes[i].w * pSurface->cbBlock : guest.pitch;
+#ifdef MANUAL_FLIP_SURFACE_DATA
+            pBufferStart =    (uint8_t *)pMipLevel->pSurfaceData
+                            + pBoxes[i].x * pSurface->cbBlock 
+                            + pMipLevel->cbSurface - pBoxes[i].y * pMipLevel->cbSurfacePitch
+                            - pMipLevel->cbSurfacePitch;      /* flip image during copy */
+#else
+            pBufferStart = (uint8_t *)pMipLevel->pSurfaceData + uDestOffset;
+#endif
+            rc = vmsvgaGMRTransfer(pThis, 
+                                    transfer,
+                                    pBufferStart,
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                                    -(int32_t)pMipLevel->cbSurfacePitch, 
+#else
+                                    (int32_t)pMipLevel->cbSurfacePitch, 
+#endif
+                                    guest.ptr,
+                                    pBoxes[i].srcx * pSurface->cbBlock + (pBoxes[i].srcy + pBoxes[i].srcz * pBoxes[i].h) * cbSrcPitch,
+                                    cbSrcPitch,
+                                    pBoxes[i].w * pSurface->cbBlock,
+                                    pBoxes[i].d * pBoxes[i].h);
+
+            LogFlow(("first line:\n%.*Rhxd\n", pMipLevel->cbSurface, pMipLevel->pSurfaceData));
+
+            AssertRC(rc);
+        }
+        pSurface->pMipmapLevels[host.mipmap].fDirty = true;
+        pSurface->fDirty = true;
+    }
+    else
+    {
+        /* @todo stricter checks for associated context */
+        uint32_t cid = pSurface->idAssociatedContext;
+        if (    cid >= pState->cContexts
+            ||  pState->paContext[cid].id != cid)
+        {
+            Log(("vmsvga3dSurfaceDMA invalid context id (%x - %x)!\n", cid, (cid >= pState->cContexts) ? -1 : pState->paContext[cid].id));
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+        VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+        for (unsigned i = 0; i < cCopyBoxes; i++)
+        {
+            bool fVertex = false;
+            unsigned cbSrcPitch;
+
+            /* Apparently we're supposed to clip it (gmr test sample) */
+            if (pBoxes[i].x + pBoxes[i].w > pMipLevel->size.width)
+                pBoxes[i].w = pMipLevel->size.width - pBoxes[i].x;
+            if (pBoxes[i].y + pBoxes[i].h > pMipLevel->size.height)
+                pBoxes[i].h = pMipLevel->size.height - pBoxes[i].y;
+            if (pBoxes[i].z + pBoxes[i].d > pMipLevel->size.depth)
+                pBoxes[i].d = pMipLevel->size.depth - pBoxes[i].z;
+
+            Assert((pBoxes[i].d == 1 || pBoxes[i].d == 0) && pBoxes[i].z == 0);
+
+            if (    !pBoxes[i].w
+                ||  !pBoxes[i].h
+                ||   pBoxes[i].x > pMipLevel->size.width
+                ||   pBoxes[i].y > pMipLevel->size.height)
+            {
+                Log(("Empty box; skip\n"));
+                continue;
+            }
+
+            Log(("Copy box %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n", i, pBoxes[i].srcx, pBoxes[i].srcy, pBoxes[i].srcz, pBoxes[i].w, pBoxes[i].h, pBoxes[i].d, pBoxes[i].x, pBoxes[i].y));
+
+            cbSrcPitch = (guest.pitch == 0) ? pBoxes[i].w * pSurface->cbBlock : guest.pitch;
+
+            switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+            {
+            case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+            case SVGA3D_SURFACE_HINT_TEXTURE:
+            case SVGA3D_SURFACE_HINT_RENDERTARGET:
+            {
+                uint32_t cbSurfacePitch;
+                uint8_t *pDoubleBuffer, *pBufferStart;
+                unsigned uDestOffset = 0;
+
+                pDoubleBuffer = (uint8_t *)RTMemAlloc(pMipLevel->cbSurface);
+                AssertReturn(pDoubleBuffer, VERR_NO_MEMORY);
+
+                if (transfer == SVGA3D_READ_HOST_VRAM)
+                {
+                    GLint activeTexture;
+
+                    glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    glGetTexImage(GL_TEXTURE_2D,
+                                  host.mipmap,
+                                  pSurface->formatGL, 
+                                  pSurface->typeGL, 
+                                  pDoubleBuffer);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    /* Restore the old active texture. */
+                    glBindTexture(GL_TEXTURE_2D, activeTexture);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    uDestOffset = pBoxes[i].x * pSurface->cbBlock + pBoxes[i].y * pMipLevel->cbSurfacePitch;
+                    AssertReturn(uDestOffset + pBoxes[i].w * pSurface->cbBlock + (pBoxes[i].h - 1) * pMipLevel->cbSurfacePitch <= pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+
+                    cbSurfacePitch = pMipLevel->cbSurfacePitch;
+
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                    pBufferStart =   pDoubleBuffer 
+                                   + pBoxes[i].x * pSurface->cbBlock 
+                                   + pMipLevel->cbSurface - pBoxes[i].y * cbSurfacePitch 
+                                   - cbSurfacePitch;      /* flip image during copy */
+#else
+                    pBufferStart = pDoubleBuffer + uDestOffset;
+#endif
+                }
+                else
+                {
+                    cbSurfacePitch = pBoxes[i].w * pSurface->cbBlock;
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                    pBufferStart = pDoubleBuffer + cbSurfacePitch * pBoxes[i].h - cbSurfacePitch;      /* flip image during copy */
+#else
+                    pBufferStart = pDoubleBuffer;
+#endif
+                }
+
+                rc = vmsvgaGMRTransfer(pThis, 
+                                       transfer,
+                                       pBufferStart,
+#ifdef MANUAL_FLIP_SURFACE_DATA
+                                       -(int32_t)cbSurfacePitch,
+#else
+                                       (int32_t)cbSurfacePitch,
+#endif
+                                       guest.ptr,
+                                       pBoxes[i].srcx * pSurface->cbBlock + pBoxes[i].srcy * cbSrcPitch,
+                                       cbSrcPitch,
+                                       pBoxes[i].w * pSurface->cbBlock,
+                                       pBoxes[i].h);
+                AssertRC(rc);
+
+                /* Update the opengl surface data. */
+                if (transfer == SVGA3D_WRITE_HOST_VRAM)
+                {
+                    GLint activeTexture = 0;
+                    GLint alignment;
+
+                    glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    /* Must bind texture to the current context in order to change it. */
+                    glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    Log(("vmsvga3dSurfaceDMA: copy texture mipmap level %d (pitch %x)\n", host.mipmap, pMipLevel->cbSurfacePitch));
+
+                    /* Set row length and alignment of the input data. */
+                    glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
+                    glPixelStorei(GL_UNPACK_ROW_LENGTH, pBoxes[i].w);
+                    glPixelStorei(GL_UNPACK_ALIGNMENT, pSurface->cbBlock);
+
+                    glTexSubImage2D(GL_TEXTURE_2D,
+                                    host.mipmap,
+                                    pBoxes[i].x,
+                                    pBoxes[i].y,
+                                    pBoxes[i].w,
+                                    pBoxes[i].h,
+                                    pSurface->formatGL, 
+                                    pSurface->typeGL, 
+                                    pDoubleBuffer);
+
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                    /* Restore old values. */
+                    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
+                    glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
+
+                    /* Restore the old active texture. */
+                    glBindTexture(GL_TEXTURE_2D, activeTexture);
+                    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+                }
+                /* Free the double buffer. */
+                RTMemFree(pDoubleBuffer);
+
+                LogFlow(("first line:\n%.*Rhxd\n", pBoxes[i].w * pSurface->cbBlock, pDoubleBuffer));
+                break;
+            }
+
+            case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+                AssertFailed(); /* @todo */
+                break;
+
+            case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+            case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+            {
+                uint8_t *pData;
+                unsigned uDestOffset;
+
+                Assert(pBoxes[i].h == 1);
+
+                pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pSurface->oglId.buffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                pData = (uint8_t *)pState->ext.glMapBuffer(GL_ARRAY_BUFFER, (transfer == SVGA3D_READ_HOST_VRAM) ? GL_READ_ONLY : GL_WRITE_ONLY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                Assert(pData);
+
+                uDestOffset = pBoxes[i].x * pSurface->cbBlock + pBoxes[i].y * pMipLevel->cbSurfacePitch;
+                AssertReturn(uDestOffset + pBoxes[i].w * pSurface->cbBlock + (pBoxes[i].h - 1) * pMipLevel->cbSurfacePitch <= pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+
+                Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n", (fVertex) ? "vertex" : "index", pBoxes[i].x, pBoxes[i].y, pBoxes[i].x + pBoxes[i].w, pBoxes[i].y + pBoxes[i].h));
+
+                rc = vmsvgaGMRTransfer(pThis, 
+                                       transfer,
+                                       pData + uDestOffset, 
+                                       pMipLevel->cbSurfacePitch, 
+                                       guest.ptr,
+                                       pBoxes[i].srcx * pSurface->cbBlock + pBoxes[i].srcy * cbSrcPitch,
+                                       cbSrcPitch,
+                                       pBoxes[i].w * pSurface->cbBlock,
+                                       pBoxes[i].h);
+                AssertRC(rc);
+
+                LogFlow(("first line:\n%.*Rhxd\n", cbSrcPitch, pData));
+
+                pState->ext.glUnmapBuffer(GL_ARRAY_BUFFER);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            }
+
+            default:
+                AssertFailed();
+                break;
+            }
+        }
+    }
+    return rc;
+}
+
+int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, uint32_t dest, SVGASignedRect destRect, SVGA3dSurfaceImageId src, SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *pRect)
+{
+    /* Requires SVGA_FIFO_CAP_SCREEN_OBJECT support */
+    Log(("vmsvga3dSurfaceBlitToScreen: dest=%d (%d,%d)(%d,%d) surface=%x (face=%d, mipmap=%d) (%d,%d)(%d,%d) cRects=%d\n", dest, destRect.left, destRect.top, destRect.right, destRect.bottom, src.sid, src.face, src.mipmap, srcRect.left, srcRect.top, srcRect.right, srcRect.bottom, cRects));
+    for (uint32_t i = 0; i < cRects; i++)
+    {
+        Log(("vmsvga3dSurfaceBlitToScreen: clipping rect %d (%d,%d)(%d,%d)\n", i, pRect[i].left, pRect[i].top, pRect[i].right, pRect[i].bottom));
+    }
+
+    /* @todo Only screen 0 for now. */
+    AssertReturn(dest == 0, VERR_INTERNAL_ERROR);
+    AssertReturn(src.mipmap == 0 && src.face == 0, VERR_INVALID_PARAMETER);
+    /* @todo scaling */
+    AssertReturn(destRect.right - destRect.left == srcRect.right - srcRect.left && destRect.bottom - destRect.top == srcRect.bottom - srcRect.top, VERR_INVALID_PARAMETER);
+
+    if (cRects == 0)
+    {
+        /* easy case; no clipping */
+        SVGA3dCopyBox        box;
+        SVGA3dGuestImage     dst;
+       
+        box.x       = destRect.left;
+        box.y       = destRect.top;
+        box.z       = 0;
+        box.w       = destRect.right - destRect.left;
+        box.h       = destRect.bottom - destRect.top;
+        box.d       = 1;
+        box.srcx    = srcRect.left;
+        box.srcy    = srcRect.top;
+        box.srcz    = 0;
+
+        dst.ptr.gmrId  = SVGA_GMR_FRAMEBUFFER;
+        dst.ptr.offset = 0;
+        dst.pitch      = pThis->svga.cbScanline;
+
+        int rc = vmsvga3dSurfaceDMA(pThis, dst, src, SVGA3D_READ_HOST_VRAM, 1, &box);
+        AssertRCReturn(rc, rc);
+
+        vgaR3UpdateDisplay(pThis, box.x, box.y, box.w, box.h);
+        return VINF_SUCCESS;
+    }
+    else
+    {
+        SVGA3dGuestImage dst;
+        SVGA3dCopyBox    box;
+
+        box.srcz    = 0;
+        box.z       = 0;
+        box.d       = 1;
+
+        dst.ptr.gmrId  = SVGA_GMR_FRAMEBUFFER;
+        dst.ptr.offset = 0;
+        dst.pitch      = pThis->svga.cbScanline;
+
+        /* @todo merge into one SurfaceDMA call */
+        for (uint32_t i = 0; i < cRects; i++)
+        {   
+            /* The clipping rectangle is relative to the top-left corner of srcRect & destRect. Adjust here. */
+            box.srcx = srcRect.left + pRect[i].left;
+            box.srcy = srcRect.top  + pRect[i].top;
+
+            box.x    = pRect[i].left + destRect.left;
+            box.y    = pRect[i].top  + destRect.top;
+            box.z    = 0;
+            box.w    = pRect[i].right - pRect[i].left;
+            box.h    = pRect[i].bottom - pRect[i].top;
+
+            int rc = vmsvga3dSurfaceDMA(pThis, dst, src, SVGA3D_READ_HOST_VRAM, 1, &box);
+            AssertRCReturn(rc, rc);
+
+            vgaR3UpdateDisplay(pThis, box.x, box.y, box.w, box.h);
+        }
+
+        return VINF_SUCCESS;
+    }
+}
+
+int vmsvga3dGenerateMipmaps(PVGASTATE pThis, uint32_t sid, SVGA3dTextureFilter filter)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurface;
+    int                 rc = VINF_SUCCESS;
+    PVMSVGA3DCONTEXT    pContext;
+    uint32_t            cid;
+    GLint               activeTexture = 0;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    pSurface = &pState->paSurface[sid];
+    AssertReturn(pSurface->idAssociatedContext != SVGA3D_INVALID_ID, VERR_INTERNAL_ERROR);
+
+    Assert(filter != SVGA3D_TEX_FILTER_FLATCUBIC);
+    Assert(filter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+    pSurface->autogenFilter = filter;
+
+    Log(("vmsvga3dGenerateMipmaps: sid=%x filter=%d\n", sid, filter));
+
+    /* @todo stricter checks for associated context */
+    cid = pSurface->idAssociatedContext;
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dGenerateMipmaps invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    if (pSurface->oglId.texture == OPENGL_INVALID_ID)
+    {
+        /* Unknown surface type; turn it into a texture. */
+        Log(("vmsvga3dGenerateMipmaps: unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->flags, pSurface->format));
+        rc = vmsvga3dCreateTexture(pState, pContext, cid, pSurface);
+        AssertRCReturn(rc, rc);
+    }
+    else
+    {
+        /* @todo new filter */
+        AssertFailed();
+    }
+
+    glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Must bind texture to the current context in order to change it. */
+    glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Generate the mip maps. */
+    pState->ext.glGenerateMipmap(GL_TEXTURE_2D);    
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Restore the old texture. */
+    glBindTexture(GL_TEXTURE_2D, activeTexture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3dCopyRect *pRect)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurface;
+    int                 rc = VINF_SUCCESS;
+    PVMSVGA3DCONTEXT    pContext;
+    uint32_t            cid;
+    struct 
+    {
+        uint32_t        x;
+        uint32_t        y;
+        uint32_t        cx;
+        uint32_t        cy;
+    } srcViewPort;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    pSurface = &pState->paSurface[sid];
+    AssertReturn(pSurface->idAssociatedContext != SVGA3D_INVALID_ID, VERR_INTERNAL_ERROR);
+
+    /* @todo stricter checks for associated context */
+    cid = pSurface->idAssociatedContext;
+    Log(("vmsvga3dCommandPresent: sid=%x cRects=%d cid=%x\n", sid, cRects, cid));
+    for (uint32_t i=0; i < cRects; i++)
+    {
+        Log(("vmsvga3dCommandPresent: rectangle %d src=(%d,%d) (%d,%d)(%d,%d)\n", i, pRect[i].srcx, pRect[i].srcy, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
+    }
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dCommandPresent invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Source surface different size? */
+    if (pSurface->pMipmapLevels[0].size.width  != pThis->svga.uWidth ||
+        pSurface->pMipmapLevels[0].size.height != pThis->svga.uHeight)
+    {
+        float xMultiplier = (float)pSurface->pMipmapLevels[0].size.width / (float)pThis->svga.uWidth;
+        float yMultiplier = (float)pSurface->pMipmapLevels[0].size.height / (float)pThis->svga.uHeight;
+
+        LogFlow(("size (%d vs %d) (%d vs %d) multiplier %d\n", pSurface->pMipmapLevels[0].size.width, pThis->svga.uWidth, pSurface->pMipmapLevels[0].size.height, pThis->svga.uHeight, (int)(xMultiplier * 100.0), (int)(yMultiplier * 100.0)));
+
+        srcViewPort.x  = (uint32_t)((float)pThis->svga.viewport.x  * xMultiplier);
+        srcViewPort.y  = (uint32_t)((float)pThis->svga.viewport.y  * yMultiplier);
+        srcViewPort.cx = (uint32_t)((float)pThis->svga.viewport.cx * xMultiplier);
+        srcViewPort.cy = (uint32_t)((float)pThis->svga.viewport.cy * yMultiplier);
+    }
+    else
+    {
+        srcViewPort.x  = pThis->svga.viewport.x;
+        srcViewPort.y  = pThis->svga.viewport.y;
+        srcViewPort.cx = pThis->svga.viewport.cx;
+        srcViewPort.cy = pThis->svga.viewport.cy;
+    }
+
+#if 1
+    /* @note this path is slightly faster than the glBlitFrameBuffer path below. */
+    SVGA3dCopyRect rect;
+    uint32_t oldVShader, oldPShader;
+    GLint oldTextureId;
+
+    if (cRects == 0)
+    {
+        rect.x = rect.y = rect.srcx = rect.srcy = 0;
+        rect.w = pSurface->pMipmapLevels[0].size.width;
+        rect.h = pSurface->pMipmapLevels[0].size.height;
+        pRect  = ▭
+        cRects = 1;
+    }
+
+    //glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_VIEWPORT_BIT);
+
+#if 0
+    glDisable(GL_CULL_FACE);
+    glDisable(GL_BLEND);
+    glDisable(GL_ALPHA_TEST);
+    glDisable(GL_SCISSOR_TEST);
+    glDisable(GL_STENCIL_TEST);
+    glEnable(GL_DEPTH_TEST);
+    glDepthFunc(GL_ALWAYS);
+    glDepthMask(GL_TRUE);
+    glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+    glViewport(0, 0, pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height);
+#endif
+
+    glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTextureId);
+
+    oldVShader = pContext->state.shidVertex;
+    oldPShader = pContext->state.shidPixel;
+    vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, SVGA_ID_INVALID);
+    vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, SVGA_ID_INVALID);
+
+    /* Flush shader changes. */
+    if (pContext->pShaderContext)
+        ShaderUpdateState(pContext->pShaderContext, 0);
+
+    /* Activate the read and draw framebuffer objects. */
+    pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 /* back buffer */);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    pState->ext.glActiveTexture(GL_TEXTURE0);
+    glEnable(GL_TEXTURE_2D);
+    glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+//    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+//    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+    /* Reset the transformation matrices. */
+    glMatrixMode(GL_MODELVIEW);
+    glPushMatrix();
+    glLoadIdentity();
+    glMatrixMode(GL_PROJECTION);
+    glPushMatrix();
+    glLoadIdentity();
+    glScalef(1.0f, -1.0f, 1.0f);
+    glOrtho(0, pThis->svga.uWidth, pThis->svga.uHeight, 0, 0.0, -1.0);
+
+    for (uint32_t i = 0; i < cRects; i++)
+    {
+        float left, right, top, bottom; /* Texture coordinates */
+        int   vertexLeft, vertexRight, vertexTop, vertexBottom;
+
+        pRect[i].srcx = RT_MAX(pRect[i].srcx, srcViewPort.x);
+        pRect[i].srcy = RT_MAX(pRect[i].srcy, srcViewPort.y);
+        pRect[i].x    = RT_MAX(pRect[i].x, pThis->svga.viewport.x) - pThis->svga.viewport.x;
+        pRect[i].y    = RT_MAX(pRect[i].y, pThis->svga.viewport.y) - pThis->svga.viewport.y;
+        pRect[i].w    = pThis->svga.viewport.cx;
+        pRect[i].h    = pThis->svga.viewport.cy;
+
+        if (    pRect[i].x + pRect[i].w <= pThis->svga.viewport.x
+            ||  pThis->svga.viewport.x + pThis->svga.viewport.cx <= pRect[i].x
+            ||  pRect[i].y + pRect[i].h <= pThis->svga.viewport.y
+            ||  pThis->svga.viewport.y + pThis->svga.viewport.cy <= pRect[i].y)
+        {
+            /* Intersection is empty; skip */
+            continue;
+        }
+
+        left   = pRect[i].srcx;
+        right  = pRect[i].srcx + pRect[i].w;
+        top    = pRect[i].srcy + pRect[i].h;
+        bottom = pRect[i].srcy;
+
+        left   /= pSurface->pMipmapLevels[0].size.width;
+        right  /= pSurface->pMipmapLevels[0].size.width;
+        top    /= pSurface->pMipmapLevels[0].size.height;
+        bottom /= pSurface->pMipmapLevels[0].size.height;
+
+        vertexLeft   = pRect[i].x;
+        vertexRight  = pRect[i].x + pRect[i].w;
+        vertexTop    = ((uint32_t)pThis->svga.uHeight >= pRect[i].y + pRect[i].h) ? pThis->svga.uHeight - pRect[i].y - pRect[i].h : 0;
+        vertexBottom = pThis->svga.uHeight - pRect[i].y;
+
+        Log(("view port (%d,%d)(%d,%d)\n", srcViewPort.x, srcViewPort.y, srcViewPort.cx, srcViewPort.cy));
+        Log(("vertex (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", vertexLeft, vertexBottom, vertexLeft, vertexTop, vertexRight, vertexTop, vertexRight, vertexBottom));
+        Log(("texture (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", pRect[i].srcx, pSurface->pMipmapLevels[0].size.height - (pRect[i].srcy + pRect[i].h), pRect[i].srcx, pSurface->pMipmapLevels[0].size.height - pRect[i].srcy, pRect[i].srcx + pRect[i].w, pSurface->pMipmapLevels[0].size.height - pRect[i].srcy, pRect[i].srcx + pRect[i].w, pSurface->pMipmapLevels[0].size.height - (pRect[i].srcy + pRect[i].h)));
+
+        glBegin(GL_QUADS);
+        /* bottom left */
+        glTexCoord2f(left, bottom);
+        glVertex2i(vertexLeft, vertexBottom);
+
+        /* top left */
+        glTexCoord2f(left, top);
+        glVertex2i(vertexLeft, vertexTop);
+
+        /* top right */
+        glTexCoord2f(right, top);
+        glVertex2i(vertexRight, vertexTop);
+
+        /* bottom right */
+        glTexCoord2f(right, bottom);
+        glVertex2i(vertexRight, vertexBottom);
+
+        glEnd();
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    }
+
+    /* Restore old settings. */
+    glMatrixMode(GL_PROJECTION);
+    glPopMatrix();
+    glMatrixMode(GL_MODELVIEW);
+    glPopMatrix();
+
+    //glPopAttrib();
+
+    glBindTexture(GL_TEXTURE_2D, oldTextureId);
+    vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, oldVShader);
+    vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, oldPShader);
+
+    /* Reset the frame buffer association */
+    pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+#else
+    /* Activate the read and draw framebuffer objects. */
+    pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 /* back buffer */);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+    /* Bind the source objects to the right place. */
+    pState->ext.glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pSurface->oglId.texture, 0 /* level 0 */);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+    /* Blit the surface rectangle(s) to the back buffer. */
+    if (cRects == 0)
+    {
+        Log(("view port (%d,%d)(%d,%d)\n", srcViewPort.x, srcViewPort.y, srcViewPort.cx, srcViewPort.cy));
+        pState->ext.glBlitFramebuffer(srcViewPort.x,
+                                      srcViewPort.y,
+                                      srcViewPort.x + srcViewPort.cx,   /* exclusive. */
+                                      srcViewPort.y + srcViewPort.cy,   /* exclusive. (reverse to flip the image) */
+                                      0,
+                                      pThis->svga.viewport.cy, /* exclusive. */
+                                      pThis->svga.viewport.cx, /* exclusive. */
+                                      0,
+                                      GL_COLOR_BUFFER_BIT,
+                                      GL_LINEAR);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+    }
+    else
+    {
+        for (uint32_t i = 0; i < cRects; i++)
+        {
+            if (    pRect[i].x + pRect[i].w <= pThis->svga.viewport.x
+                ||  pThis->svga.viewport.x + pThis->svga.viewport.cx <= pRect[i].x
+                ||  pRect[i].y + pRect[i].h <= pThis->svga.viewport.y
+                ||  pThis->svga.viewport.y + pThis->svga.viewport.cy <= pRect[i].y)
+            {
+                /* Intersection is empty; skip */
+                continue;
+            }
+
+            pState->ext.glBlitFramebuffer(RT_MAX(pRect[i].srcx, srcViewPort.x),
+                                          pSurface->pMipmapLevels[0].size.width - RT_MAX(pRect[i].srcy, srcViewPort.y),   /* exclusive. (reverse to flip the image) */
+                                          RT_MIN(pRect[i].srcx + pRect[i].w, srcViewPort.x + srcViewPort.cx),  /* exclusive. */
+                                          pSurface->pMipmapLevels[0].size.width - RT_MIN(pRect[i].srcy + pRect[i].h, srcViewPort.y + srcViewPort.cy),
+                                          RT_MAX(pRect[i].x, pThis->svga.viewport.x) - pThis->svga.viewport.x,
+                                          pThis->svga.uHeight - (RT_MIN(pRect[i].y + pRect[i].h, pThis->svga.viewport.y + pThis->svga.viewport.cy) - pThis->svga.viewport.y),  /* exclusive. */
+                                          RT_MIN(pRect[i].x + pRect[i].w, pThis->svga.viewport.x + pThis->svga.viewport.cx) - pThis->svga.viewport.x,  /* exclusive. */
+                                          pThis->svga.uHeight - (RT_MAX(pRect[i].y, pThis->svga.viewport.y) - pThis->svga.viewport.y),
+                                          GL_COLOR_BUFFER_BIT,
+                                          GL_LINEAR);
+        }
+    }
+    /* Reset the frame buffer association */
+    pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
+    VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+#endif
+
+    /* Flip the front and back buffers. */
+#ifdef RT_OS_WINDOWS
+    BOOL ret = SwapBuffers(pContext->hdc);
+    AssertMsg(ret, ("SwapBuffers failed with %d\n", GetLastError()));
+#elif defined(RT_OS_DARWIN)
+    vmsvga3dCocoaSwapBuffers(pContext->cocoaContext);
+#else
+    /* show the window if not already done */
+    if (!pContext->fMapped)
+    {
+        XMapWindow(pState->display, pContext->window);
+        pContext->fMapped = true;
+    }
+    /* now swap the buffers, i.e. display the rendering result */
+    glXSwapBuffers(pState->display, pContext->window);
+#endif
+    return VINF_SUCCESS;
+}
+
+#ifdef RT_OS_LINUX
+/**
+ * X11 event handling thread
+ * @param ThreadSelf thread handle
+ * @param pvUser pointer to pState structure
+ * @returns VBox status code
+ */
+DECLCALLBACK(int) vmsvga3dXEventThread(RTTHREAD ThreadSelf, void *pvUser)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pvUser;
+    while (!pState->bTerminate)
+    {
+        while (XPending(pState->display) > 0)
+        {
+            XEvent event;
+            XNextEvent(pState->display, &event);
+
+            switch (event.type)
+            {
+                default:
+                    break;
+            }
+        }
+        /* sleep for 16ms to not burn too many cycles */
+        RTThreadSleep(16);
+    }
+    return VINF_SUCCESS;
+}
+#endif // RT_OS_LINUX
+
+
+/**
+ * Create a new 3d context
+ *
+ * @returns VBox status code.
+ * @param   pThis           VGA device instance data.
+ * @param   cid             Context id
+ */
+int vmsvga3dContextDefine(PVGASTATE pThis, uint32_t cid)
+{
+    int                     rc;
+    PVMSVGA3DCONTEXT        pContext;
+    PVMSVGA3DSTATE          pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+    Log(("vmsvga3dContextDefine id %x\n", cid));
+#ifdef DEBUG_DEBUG_GFX_WINDOW_TEST_CONTEXT
+    if (pState->idTestContext == SVGA_ID_INVALID)
+    {
+        pState->idTestContext = 207;
+        rc = vmsvga3dContextDefine(pThis, pState->idTestContext);
+        AssertRCReturn(rc, rc);
+    }
+#endif
+
+    if (cid >= pState->cContexts)
+    {
+        pState->paContext = (PVMSVGA3DCONTEXT)RTMemRealloc(pState->paContext, sizeof(VMSVGA3DCONTEXT) * (cid + 1));
+        AssertReturn(pState->paContext, VERR_NO_MEMORY);
+        memset(&pState->paContext[pState->cContexts], 0, sizeof(VMSVGA3DCONTEXT) * (cid + 1 - pState->cContexts));
+        for (uint32_t i = pState->cContexts; i < cid + 1; i++)
+            pState->paContext[i].id = SVGA3D_INVALID_ID;
+
+        pState->cContexts = cid + 1;
+    }
+    /* If one already exists with this id, then destroy it now. */
+    if (pState->paContext[cid].id != SVGA3D_INVALID_ID)
+        vmsvga3dContextDestroy(pThis, cid);
+
+    pContext = &pState->paContext[cid];
+    memset(pContext, 0, sizeof(*pContext));
+    pContext->id                = cid;
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+        pContext->aSidActiveTexture[i] = SVGA3D_INVALID_ID;
+
+    pContext->sidRenderTarget   = SVGA3D_INVALID_ID;
+    pContext->state.shidVertex  = SVGA3D_INVALID_ID;
+    pContext->state.shidPixel   = SVGA3D_INVALID_ID;
+    pContext->idFramebuffer     = OPENGL_INVALID_ID;
+    pContext->idReadFramebuffer = OPENGL_INVALID_ID;
+    pContext->idDrawFramebuffer = OPENGL_INVALID_ID;
+
+    rc = ShaderContextCreate(&pContext->pShaderContext);
+    AssertRCReturn(rc, rc);
+
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); i++)
+        pContext->state.aRenderTargets[i] = SVGA3D_INVALID_ID;
+
+    AssertReturn(pThis->svga.u64HostWindowId, VERR_INTERNAL_ERROR);
+
+#ifdef RT_OS_WINDOWS
+    /* Create a context window. */
+    CREATESTRUCT cs;
+    cs.lpCreateParams   = NULL;
+    cs.dwExStyle        = WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT;
+# ifdef DEBUG_GFX_WINDOW
+    cs.lpszName         = (char *)RTMemAllocZ(256);
+    RTStrPrintf((char *)cs.lpszName, 256, "Context %d OpenGL Window", cid);
+# else
+    cs.lpszName         = NULL;
+# endif
+    cs.lpszClass        = 0;
+# ifdef DEBUG_GFX_WINDOW
+    cs.style            = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE | WS_CAPTION;
+# else
+    cs.style            = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_DISABLED | WS_CHILD | WS_VISIBLE;
+# endif
+    cs.x                = 0;
+    cs.y                = 0;
+    cs.cx               = pThis->svga.uWidth;
+    cs.cy               = pThis->svga.uHeight;
+    cs.hwndParent       = (HWND)pThis->svga.u64HostWindowId;
+    cs.hMenu            = NULL;
+    cs.hInstance        = pState->hInstance;
+
+    rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_CREATEWINDOW, (WPARAM)&pContext->hwnd, (LPARAM)&cs);
+    AssertRCReturn(rc, rc);
+
+    pContext->hdc   = GetDC(pContext->hwnd);
+    AssertMsgReturn(pContext->hdc, ("GetDC %x failed with %d\n", pContext->hwnd, GetLastError()), VERR_INTERNAL_ERROR);
+    
+    PIXELFORMATDESCRIPTOR pfd = { 
+        sizeof(PIXELFORMATDESCRIPTOR),  /*  size of this pfd */
+        1,                              /* version number */
+        PFD_DRAW_TO_WINDOW |            /* support window */
+        PFD_DOUBLEBUFFER   |            /* support double buffering */
+        PFD_SUPPORT_OPENGL,             /* support OpenGL */
+        PFD_TYPE_RGBA,                  /* RGBA type */
+        24,                             /* 24-bit color depth */
+        0, 0, 0, 0, 0, 0,               /* color bits ignored */
+        8,                              /* alpha buffer */
+        0,                              /* shift bit ignored */
+        0,                              /* no accumulation buffer */
+        0, 0, 0, 0,                     /* accum bits ignored */
+        16,                             /* set depth buffer  */
+        16,                             /* set stencil buffer */
+        0,                              /* no auxiliary buffer */
+        PFD_MAIN_PLANE,                 /* main layer */
+        0,                              /* reserved */
+        0, 0, 0                         /* layer masks ignored */
+    }; 
+    int     pixelFormat;
+    BOOL    ret;
+
+    pixelFormat = ChoosePixelFormat(pContext->hdc, &pfd);
+    /* @todo is this really necessary?? */
+    pixelFormat = ChoosePixelFormat(pContext->hdc, &pfd);
+    AssertMsgReturn(pixelFormat != 0, ("ChoosePixelFormat failed with %d\n", GetLastError()), VERR_INTERNAL_ERROR);
+
+    ret = SetPixelFormat(pContext->hdc, pixelFormat, &pfd);
+    AssertMsgReturn(ret == TRUE, ("SetPixelFormat failed with %d\n", GetLastError()), VERR_INTERNAL_ERROR);
+
+    pContext->hglrc = wglCreateContext(pContext->hdc);
+    AssertMsgReturn(pContext->hglrc, ("wglCreateContext %x failed with %d\n", pContext->hdc, GetLastError()), VERR_INTERNAL_ERROR);    
+
+    // TODO isn't this default on Linux since OpenGL 1.1?
+    /* Find the first active context to share the display list with (necessary for sharing e.g. textures between contexts). */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        if (    pState->paContext[i].id != SVGA3D_INVALID_ID
+            &&  i != pContext->id)
+        {
+            Log(("Sharing display lists between cid=%d and cid=%d\n", pContext->id, i));
+            ret = wglShareLists(pState->paContext[i].hglrc, pContext->hglrc);
+            Assert(ret == TRUE);
+            break;
+        }
+    }
+
+#elif defined(RT_OS_DARWIN)
+    /* Find the first active context to share the display list with (necessary for sharing e.g. textures between contexts). */
+    NativeNSOpenGLContextRef shareContext = NULL;
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        if (    pState->paContext[i].id != SVGA3D_INVALID_ID
+            &&  i != pContext->id)
+        {
+            Log(("Sharing display lists between cid=%d and cid=%d\n", pContext->id, i));
+            shareContext = pState->paContext[i].cocoaContext;
+            break;
+        }
+    }
+    vmsvga3dCocoaCreateContext(&pContext->cocoaContext, shareContext);
+    NativeNSViewRef pHostView = (NativeNSViewRef*)pThis->svga.u64HostWindowId;
+    vmsvga3dCocoaCreateView(&pContext->cocoaView, pHostView);
+#else
+    Window hostWindow = (Window)pThis->svga.u64HostWindowId;
+
+    if (pState->display == NULL)
+    { 
+        /* get an X display and make sure we have glX 1.3 */
+        pState->display = XOpenDisplay(0);
+        Assert(pState->display);
+        int glxMajor, glxMinor;
+        Bool ret = glXQueryVersion(pState->display, &glxMajor, &glxMinor);
+        AssertMsgReturn(ret && glxMajor == 1 && glxMinor >= 3, ("glX >=1.3 not present"), VERR_INTERNAL_ERROR);
+        /* start our X event handling thread */
+        rc = RTThreadCreate(&pState->pWindowThread, vmsvga3dXEventThread, pState, 0, RTTHREADTYPE_GUI, RTTHREADFLAGS_WAITABLE, "VMSVGA3DXEVENT");
+           if (RT_FAILURE(rc))
+        {
+            AssertMsgFailed(("%s: Async IO Thread creation for 3d window handling failed rc=%d\n", __FUNCTION__, rc));
+            return rc;
+        }
+    }
+    int attrib[] =
+    {
+        GLX_RGBA,
+        GLX_RED_SIZE, 1,
+        GLX_GREEN_SIZE, 1,
+        GLX_BLUE_SIZE, 1,
+        //GLX_ALPHA_SIZE, 1, this flips the bbos screen
+        GLX_DOUBLEBUFFER,
+        None
+    };
+    XVisualInfo *vi = glXChooseVisual(pState->display, DefaultScreen(pState->display), attrib);
+    XSetWindowAttributes swa;
+    swa.colormap = XCreateColormap(pState->display, XDefaultRootWindow(pState->display), vi->visual, AllocNone);
+    swa.border_pixel = 0;
+    swa.background_pixel = 0;
+    swa.event_mask = StructureNotifyMask | ExposureMask;
+    unsigned long flags = CWBorderPixel | CWBackPixel | CWColormap | CWEventMask;
+    pContext->window = XCreateWindow(pState->display, hostWindow,//XDefaultRootWindow(pState->display),//hostWindow,
+                                     0, 0, pThis->svga.uWidth, pThis->svga.uHeight,
+                                     0, vi->depth, InputOutput,
+                                     vi->visual, flags, &swa);
+    AssertMsgReturn(pContext->window, ("XCreateWindow failed"), VERR_INTERNAL_ERROR);
+    uint32_t cardinal_alpha = (uint32_t) (0.5 * (uint32_t)-1) ;
+
+    /* the window is hidden by default and only mapped when CommandPresent is executed on it */
+
+    /* Find the first active context to share the display list with (necessary for sharing e.g. textures between contexts). */
+    GLXContext shareContext = NULL;
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        if (    pState->paContext[i].id != SVGA3D_INVALID_ID
+            &&  i != pContext->id)
+        {
+            Log(("Sharing display lists between cid=%d and cid=%d\n", pContext->id, i));
+            shareContext = pState->paContext[i].glxContext;
+            break;
+        }
+    }
+
+    pContext->glxContext = glXCreateContext(pState->display, vi, shareContext, GL_TRUE);
+    AssertMsgReturn(pContext->glxContext, ("glXCreateContext failed"), VERR_INTERNAL_ERROR);
+#endif
+
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* NULL during the first PowerOn call. */
+    if (pState->ext.glGenFramebuffers)
+    {
+        /* Create a framebuffer object for this context. */
+        pState->ext.glGenFramebuffers(1, &pContext->idFramebuffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        /* Bind the object to the framebuffer target. */
+        pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        /* Create read and draw framebuffer objects for this context. */
+        pState->ext.glGenFramebuffers(1, &pContext->idReadFramebuffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        pState->ext.glGenFramebuffers(1, &pContext->idDrawFramebuffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    }
+#if 0
+    /* @todo move to shader lib!!! */
+    /* Clear the screen */
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
+    glClearIndex(0);
+    glClearDepth(1);
+    glClearStencil(0xffff);
+    glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
+    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+    glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
+    if (pState->ext.glProvokingVertex)
+        pState->ext.glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);
+    /* @todo move to shader lib!!! */
+#endif
+    return VINF_SUCCESS;
+}
+
+/**
+ * Destroy an existing 3d context
+ *
+ * @returns VBox status code.
+ * @param   pThis           VGA device instance data.
+ * @param   cid             Context id
+ */
+int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+    if (    cid < pState->cContexts
+        &&  pState->paContext[cid].id == cid)
+    {
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+
+        Log(("vmsvga3dContextDestroy id %x\n", cid));
+
+        VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+        /* Destroy all leftover pixel shaders. */
+        for (uint32_t i = 0; i < pContext->cPixelShaders; i++)
+        {
+            if (pContext->paPixelShader[i].id != SVGA3D_INVALID_ID)
+                vmsvga3dShaderDestroy(pThis, pContext->paPixelShader[i].cid, pContext->paPixelShader[i].id, pContext->paPixelShader[i].type);
+        }
+        if (pContext->paPixelShader)
+            RTMemFree(pContext->paPixelShader);
+
+        /* Destroy all leftover vertex shaders. */
+        for (uint32_t i = 0; i < pContext->cVertexShaders; i++)
+        {
+            if (pContext->paVertexShader[i].id != SVGA3D_INVALID_ID)
+                vmsvga3dShaderDestroy(pThis, pContext->paVertexShader[i].cid, pContext->paVertexShader[i].id, pContext->paVertexShader[i].type);
+        }
+        if (pContext->paVertexShader)
+            RTMemFree(pContext->paVertexShader);
+
+        if (pContext->state.paVertexShaderConst)
+            RTMemFree(pContext->state.paVertexShaderConst);
+        if (pContext->state.paPixelShaderConst)
+            RTMemFree(pContext->state.paPixelShaderConst);
+
+        if (pContext->pShaderContext)
+        {
+            int rc = ShaderContextDestroy(pContext->pShaderContext);
+            AssertRC(rc);
+        }
+
+        if (pContext->idFramebuffer != OPENGL_INVALID_ID)
+        {
+            /* Unbind the object from the framebuffer target. */
+            pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, 0 /* back buffer */);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            pState->ext.glDeleteFramebuffers(1, &pContext->idFramebuffer);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            if (pContext->idReadFramebuffer != OPENGL_INVALID_ID)
+            {
+                pState->ext.glDeleteFramebuffers(1, &pContext->idReadFramebuffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            if (pContext->idDrawFramebuffer != OPENGL_INVALID_ID)
+            {
+                pState->ext.glDeleteFramebuffers(1, &pContext->idDrawFramebuffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+        }
+#ifdef RT_OS_WINDOWS
+        wglMakeCurrent(NULL, NULL);
+        wglDeleteContext(pContext->hglrc);
+        ReleaseDC(pContext->hwnd, pContext->hdc);
+
+        /* Destroy the window we've created. */
+        int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_DESTROYWINDOW, (WPARAM)pContext->hwnd, 0);
+        AssertRC(rc);
+#elif defined(RT_OS_DARWIN)
+        vmsvga3dCocoaDestroyView(pContext->cocoaView);
+        vmsvga3dCocoaDestroyContext(pContext->cocoaContext);
+#elif defined(RT_OS_LINUX)
+        glXMakeCurrent(pState->display, None, NULL);
+        glXDestroyContext(pState->display, pContext->glxContext);
+        XDestroyWindow(pState->display, pContext->window);
+#endif
+
+        memset(pContext, 0, sizeof(*pContext));
+        pContext->id = SVGA3D_INVALID_ID;
+
+        VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState);
+    }
+    else
+        AssertFailed();
+
+    return VINF_SUCCESS;
+}
+
+/* Handle resize */
+int vmsvga3dChangeMode(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    /* Resize all active contexts. */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[i];
+        uint32_t cid = pContext->id;
+
+        if (cid != SVGA3D_INVALID_ID)
+        {
+#ifdef RT_OS_WINDOWS
+            CREATESTRUCT          cs;
+
+            memset(&cs, 0, sizeof(cs));            
+            cs.cx = pThis->svga.uWidth;
+            cs.cy = pThis->svga.uHeight;
+
+            /* Resize the window. */
+            int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_RESIZEWINDOW, (WPARAM)pContext->hwnd, (LPARAM)&cs);
+            AssertRC(rc);
+#elif defined(RT_OS_DARWIN)
+            vmsvga3dCocoaViewSetSize(pContext->cocoaView, pThis->svga.uWidth, pThis->svga.uHeight);
+#elif defined(RT_OS_LINUX)
+            XWindowChanges wc;
+            wc.width = pThis->svga.uWidth;
+            wc.height = pThis->svga.uHeight;
+            XConfigureWindow(pState->display, pContext->window, CWWidth | CWHeight, &wc);
+#endif
+        }
+    }
+    return VINF_SUCCESS;
+}
+
+
+int vmsvga3dSetTransform(PVGASTATE pThis, uint32_t cid, SVGA3dTransformType type, float matrix[16])
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    bool                  fModelViewChanged = false;
+
+    Log(("vmsvga3dSetTransform cid=%x %s\n", cid, vmsvgaTransformToString(type)));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetTransform invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Save this matrix for vm state save/restore. */
+    pContext->state.aTransformState[type].fValid = true;
+    memcpy(pContext->state.aTransformState[type].matrix, matrix, sizeof(pContext->state.aTransformState[type].matrix));
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_TRANSFORM;
+
+    Log(("Matrix [%d %d %d %d]\n", (int)(matrix[0] * 10.0), (int)(matrix[1] * 10.0), (int)(matrix[2] * 10.0), (int)(matrix[3] * 10.0)));
+    Log(("       [%d %d %d %d]\n", (int)(matrix[4] * 10.0), (int)(matrix[5] * 10.0), (int)(matrix[6] * 10.0), (int)(matrix[7] * 10.0)));
+    Log(("       [%d %d %d %d]\n", (int)(matrix[8] * 10.0), (int)(matrix[9] * 10.0), (int)(matrix[10] * 10.0), (int)(matrix[11] * 10.0)));
+    Log(("       [%d %d %d %d]\n", (int)(matrix[12] * 10.0), (int)(matrix[13] * 10.0), (int)(matrix[14] * 10.0), (int)(matrix[15] * 10.0)));
+
+    switch (type)
+    {
+    case SVGA3D_TRANSFORM_VIEW:
+        /* View * World = Model View */
+        glMatrixMode(GL_MODELVIEW);
+        glLoadMatrixf(matrix);
+        if (pContext->state.aTransformState[SVGA3D_TRANSFORM_WORLD].fValid)
+            glMultMatrixf(pContext->state.aTransformState[SVGA3D_TRANSFORM_WORLD].matrix);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        fModelViewChanged = true;
+        break;
+
+    case SVGA3D_TRANSFORM_PROJECTION:
+    {
+        int rc = ShaderTransformProjection(pContext->state.RectViewPort.w, pContext->state.RectViewPort.h, matrix);
+        AssertRCReturn(rc, rc);
+        break;
+    }
+
+    case SVGA3D_TRANSFORM_TEXTURE0:
+        glMatrixMode(GL_TEXTURE);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        glLoadMatrixf(matrix);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        break;
+
+    case SVGA3D_TRANSFORM_TEXTURE1:
+    case SVGA3D_TRANSFORM_TEXTURE2:
+    case SVGA3D_TRANSFORM_TEXTURE3:
+    case SVGA3D_TRANSFORM_TEXTURE4:
+    case SVGA3D_TRANSFORM_TEXTURE5:
+    case SVGA3D_TRANSFORM_TEXTURE6:
+    case SVGA3D_TRANSFORM_TEXTURE7:
+        Log(("vmsvga3dSetTransform: unsupported SVGA3D_TRANSFORM_TEXTUREx transform!!\n"));
+        return VERR_INVALID_PARAMETER;
+
+    case SVGA3D_TRANSFORM_WORLD:
+        /* View * World = Model View */
+        glMatrixMode(GL_MODELVIEW);
+        if (pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].fValid)
+            glLoadMatrixf(pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].matrix);
+        else
+            glLoadIdentity();
+        glMultMatrixf(matrix);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        fModelViewChanged = true;
+        break;
+
+    case SVGA3D_TRANSFORM_WORLD1:
+    case SVGA3D_TRANSFORM_WORLD2:
+    case SVGA3D_TRANSFORM_WORLD3:
+        Log(("vmsvga3dSetTransform: unsupported SVGA3D_TRANSFORM_WORLDx transform!!\n"));
+        return VERR_INVALID_PARAMETER;
+
+    default:
+        Log(("vmsvga3dSetTransform: unknown type!!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    /* Apparently we need to reset the light and clip data after modifying the modelview matrix. */
+    if (fModelViewChanged)
+    {
+        /* Reprogram the clip planes. */
+        for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aClipPlane); j++)
+        {
+            if (pContext->state.aClipPlane[j].fValid == true)
+                vmsvga3dSetClipPlane(pThis, cid, j, pContext->state.aClipPlane[j].plane);
+        }
+
+        /* Reprogram the light data. */
+        for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aLightData); j++)
+        {
+            if (pContext->state.aLightData[j].fValidData == true)
+                vmsvga3dSetLightData(pThis, cid, j, &pContext->state.aLightData[j].data);
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetZRange(PVGASTATE pThis, uint32_t cid, SVGA3dZRange zRange)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetZRange cid=%x min=%d max=%d\n", cid, (uint32_t)(zRange.min * 100.0), (uint32_t)(zRange.max * 100.0)));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetZRange invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    pContext->state.zRange = zRange;
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_ZRANGE;
+
+    if (zRange.min < -1.0)
+        zRange.min = -1.0;
+    if (zRange.max > 1.0)
+        zRange.max = 1.0;
+
+    glDepthRange((GLdouble)zRange.min, (GLdouble)zRange.max);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    return VINF_SUCCESS;
+}
+
+/**
+ * Convert SVGA blend op value to its OpenGL equivalent
+ */
+static GLenum vmsvga3dBlendOp2GL(uint32_t blendOp)
+{
+    switch (blendOp)
+    {
+    case SVGA3D_BLENDOP_ZERO:
+        return GL_ZERO;
+    case SVGA3D_BLENDOP_ONE:
+        return GL_ONE;
+    case SVGA3D_BLENDOP_SRCCOLOR:
+        return GL_SRC_COLOR;
+    case SVGA3D_BLENDOP_INVSRCCOLOR:
+        return GL_ONE_MINUS_SRC_COLOR;
+    case SVGA3D_BLENDOP_SRCALPHA:
+        return GL_SRC_ALPHA;
+    case SVGA3D_BLENDOP_INVSRCALPHA:
+        return GL_ONE_MINUS_SRC_ALPHA;
+    case SVGA3D_BLENDOP_DESTALPHA:
+        return GL_DST_ALPHA;
+    case SVGA3D_BLENDOP_INVDESTALPHA:
+        return GL_ONE_MINUS_DST_ALPHA;
+    case SVGA3D_BLENDOP_DESTCOLOR:
+        return GL_DST_COLOR;
+    case SVGA3D_BLENDOP_INVDESTCOLOR:
+        return GL_ONE_MINUS_DST_COLOR;
+    case SVGA3D_BLENDOP_SRCALPHASAT:
+        return GL_SRC_ALPHA_SATURATE;
+    case SVGA3D_BLENDOP_BLENDFACTOR:
+        return GL_CONSTANT_ALPHA;       /* @todo correct?? */
+    case SVGA3D_BLENDOP_INVBLENDFACTOR:
+        return GL_ONE_MINUS_CONSTANT_ALPHA;       /* @todo correct?? */
+    default:
+        AssertFailed();
+        return GL_ONE;
+    }
+}
+
+static GLenum vmsvga3dBlendEquation2GL(uint32_t blendEq)
+{
+    switch (blendEq)
+    {
+    case SVGA3D_BLENDEQ_ADD:
+        return GL_FUNC_ADD;
+    case SVGA3D_BLENDEQ_SUBTRACT:
+        return GL_FUNC_SUBTRACT;
+    case SVGA3D_BLENDEQ_REVSUBTRACT:
+        return GL_FUNC_REVERSE_SUBTRACT;
+    case SVGA3D_BLENDEQ_MINIMUM:
+        return GL_MIN;
+    case SVGA3D_BLENDEQ_MAXIMUM:
+        return GL_MAX;
+    default:
+        AssertFailed();
+        return GL_FUNC_ADD;
+    }
+}
+
+static GLenum vmsvgaCmpFunc2GL(uint32_t cmpFunc)
+{
+    switch (cmpFunc)
+    {
+    case SVGA3D_CMP_NEVER:
+        return GL_NEVER;
+    case SVGA3D_CMP_LESS:
+        return GL_LESS;
+    case SVGA3D_CMP_EQUAL:
+        return GL_EQUAL;
+    case SVGA3D_CMP_LESSEQUAL:
+        return GL_LEQUAL;
+    case SVGA3D_CMP_GREATER:
+        return GL_GREATER;
+    case SVGA3D_CMP_NOTEQUAL:
+        return GL_NOTEQUAL;
+    case SVGA3D_CMP_GREATEREQUAL:
+        return GL_GEQUAL;
+    case SVGA3D_CMP_ALWAYS:
+        return GL_ALWAYS;
+    default: 
+        AssertFailed();
+        return GL_LESS;
+    }
+}
+
+static GLenum vmsvgaStencipOp2GL(uint32_t stencilOp)
+{
+    switch (stencilOp)
+    {
+    case SVGA3D_STENCILOP_KEEP:
+        return GL_KEEP;
+    case SVGA3D_STENCILOP_ZERO:
+        return GL_ZERO;
+    case SVGA3D_STENCILOP_REPLACE:
+        return GL_REPLACE;
+    case SVGA3D_STENCILOP_INCRSAT:
+        return GL_INCR_WRAP;
+    case SVGA3D_STENCILOP_DECRSAT:
+        return GL_DECR_WRAP;
+    case SVGA3D_STENCILOP_INVERT:
+        return GL_INVERT;
+    case SVGA3D_STENCILOP_INCR:
+        return GL_INCR;
+    case SVGA3D_STENCILOP_DECR:
+        return GL_DECR;
+    default:
+        AssertFailed();
+        return GL_KEEP;
+    }
+}
+
+int vmsvga3dSetRenderState(PVGASTATE pThis, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState)
+{
+    uint32_t                    val;
+    PVMSVGA3DCONTEXT            pContext;
+    PVMSVGA3DSTATE              pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetRenderState cid=%x cRenderStates=%d\n", cid, cRenderStates));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetRenderState invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    for (unsigned i = 0; i < cRenderStates; i++)
+    {
+        GLenum enableCap = ~0U;
+        Log(("vmsvga3dSetRenderState: cid=%d state=%s (%d) val=%x\n", cid, vmsvga3dGetRenderStateName(pRenderState[i].state), pRenderState[i].state, pRenderState[i].uintValue));        
+        /* Save the render state for vm state saving. */
+        if (pRenderState[i].state < SVGA3D_RS_MAX)
+            pContext->state.aRenderState[pRenderState[i].state] = pRenderState[i];
+
+        switch (pRenderState[i].state)
+        {
+        case SVGA3D_RS_ZENABLE:                /* SVGA3dBool */    
+            enableCap = GL_DEPTH_TEST;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_ZWRITEENABLE:           /* SVGA3dBool */
+            glDepthMask(!!pRenderState[i].uintValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_ALPHATESTENABLE:        /* SVGA3dBool */
+            enableCap = GL_ALPHA_TEST;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_DITHERENABLE:           /* SVGA3dBool */
+            enableCap = GL_DITHER;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGENABLE:              /* SVGA3dBool */
+            enableCap = GL_FOG;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SPECULARENABLE:         /* SVGA3dBool */
+            Log(("vmsvga3dSetRenderState: WARNING: not applicable.\n"));
+            break;
+
+        case SVGA3D_RS_LIGHTINGENABLE:         /* SVGA3dBool */
+            enableCap = GL_LIGHTING;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_NORMALIZENORMALS:       /* SVGA3dBool */
+            /* not applicable */
+            Log(("vmsvga3dSetRenderState: WARNING: not applicable.\n"));
+            break;
+
+        case SVGA3D_RS_POINTSPRITEENABLE:      /* SVGA3dBool */
+            enableCap = GL_POINT_SPRITE_ARB;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_POINTSIZE:              /* float */
+            /* @todo we need to apply scaling for point sizes below the min or above the max; see Wine) */
+            if (pRenderState[i].floatValue < pState->caps.flPointSize[0])
+                pRenderState[i].floatValue = pState->caps.flPointSize[0];
+            if (pRenderState[i].floatValue > pState->caps.flPointSize[1])
+                pRenderState[i].floatValue = pState->caps.flPointSize[1];
+
+            glPointSize(pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            Log(("SVGA3D_RS_POINTSIZE: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+            break;
+
+        case SVGA3D_RS_POINTSIZEMIN:           /* float */
+            pState->ext.glPointParameterf(GL_POINT_SIZE_MIN, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            Log(("SVGA3D_RS_POINTSIZEMIN: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+            break;
+
+        case SVGA3D_RS_POINTSIZEMAX:           /* float */
+            pState->ext.glPointParameterf(GL_POINT_SIZE_MAX, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            Log(("SVGA3D_RS_POINTSIZEMAX: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+            break;
+
+        case SVGA3D_RS_POINTSCALEENABLE:       /* SVGA3dBool */
+        case SVGA3D_RS_POINTSCALE_A:           /* float */
+        case SVGA3D_RS_POINTSCALE_B:           /* float */
+        case SVGA3D_RS_POINTSCALE_C:           /* float */
+            Log(("vmsvga3dSetRenderState: WARNING: not applicable.\n"));
+            break;
+
+        case SVGA3D_RS_AMBIENT:                /* SVGA3dColor */
+        {
+            GLfloat color[4]; /* red, green, blue, alpha */
+
+            vmsvgaColor2GLFloatArray(pRenderState[i].uintValue, &color[0], &color[1], &color[2], &color[3]);
+
+            glLightModelfv(GL_LIGHT_MODEL_AMBIENT, color);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_CLIPPLANEENABLE:        /* SVGA3dClipPlanes */
+        {
+            AssertCompile(SVGA3D_CLIPPLANE_MAX == (1 << 5));
+            for (uint32_t j = 0; j <= 5; j++)
+            {
+                if (pRenderState[i].uintValue & RT_BIT(j))
+                    glEnable(GL_CLIP_PLANE0 + j);
+                else
+                    glDisable(GL_CLIP_PLANE0 + j);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            break;
+        }
+
+        case SVGA3D_RS_FOGCOLOR:               /* SVGA3dColor */
+        {
+            GLfloat color[4]; /* red, green, blue, alpha */
+
+            vmsvgaColor2GLFloatArray(pRenderState[i].uintValue, &color[0], &color[1], &color[2], &color[3]);
+
+            glFogfv(GL_FOG_COLOR, color);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_FOGSTART:               /* float */
+            glFogf(GL_FOG_START, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_FOGEND:                 /* float */
+            glFogf(GL_FOG_END, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_FOGDENSITY:             /* float */
+            glFogf(GL_FOG_DENSITY, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_RANGEFOGENABLE:         /* SVGA3dBool */
+            glFogi(GL_FOG_COORD_SRC, (pRenderState[i].uintValue) ? GL_FOG_COORD : GL_FRAGMENT_DEPTH);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_FOGMODE:                /* SVGA3dFogMode */
+        {
+            SVGA3dFogMode mode;
+            mode.uintValue = pRenderState[i].uintValue;
+
+            enableCap = GL_FOG_MODE;
+            switch (mode.s.function)
+            {
+            case SVGA3D_FOGFUNC_EXP:
+                val = GL_EXP;
+                break;
+            case SVGA3D_FOGFUNC_EXP2:
+                val = GL_EXP2;
+                break;
+            case SVGA3D_FOGFUNC_LINEAR:
+                val = GL_LINEAR;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected fog function %d\n", mode.s.function), VERR_INTERNAL_ERROR);
+                break;
+            }
+
+            /* @todo how to switch between vertex and pixel fog modes??? */
+            Assert(mode.s.type == SVGA3D_FOGTYPE_PIXEL);
+#if 0
+            /* The fog type determines the render state. */
+            switch (mode.s.type)
+            {
+            case SVGA3D_FOGTYPE_VERTEX:
+                renderState = D3DRS_FOGVERTEXMODE;
+                break;
+            case SVGA3D_FOGTYPE_PIXEL:
+                renderState = D3DRS_FOGTABLEMODE;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected fog type %d\n", mode.s.type), VERR_INTERNAL_ERROR);
+                break;
+            }
+#endif
+
+            /* Set the fog base to depth or range. */
+            switch (mode.s.base)
+            {
+            case SVGA3D_FOGBASE_DEPTHBASED:
+                glFogi(GL_FOG_COORD_SRC, GL_FRAGMENT_DEPTH);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_FOGBASE_RANGEBASED:
+                glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            default:
+                /* ignore */
+                AssertMsgFailed(("Unexpected fog base %d\n", mode.s.base));
+                break;
+            }
+            break;
+        }
+
+        case SVGA3D_RS_FILLMODE:               /* SVGA3dFillMode */
+        {
+            SVGA3dFillMode mode;
+
+            mode.uintValue = pRenderState[i].uintValue;
+
+            switch (mode.s.mode)
+            {
+            case SVGA3D_FILLMODE_POINT:
+                val = GL_POINT;
+                break;
+            case SVGA3D_FILLMODE_LINE:
+                val = GL_LINE;
+                break;
+            case SVGA3D_FILLMODE_FILL:
+                val = GL_FILL;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected fill mode %d\n", mode.s.mode), VERR_INTERNAL_ERROR);
+                break;
+            }
+            /* @note only front and back faces */
+            Assert(mode.s.face == SVGA3D_FACE_FRONT_BACK);
+            glPolygonMode(GL_FRONT_AND_BACK, val);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_SHADEMODE:              /* SVGA3dShadeMode */
+            switch (pRenderState[i].uintValue)
+            {
+            case SVGA3D_SHADEMODE_FLAT:
+                val = GL_FLAT;
+                break;
+
+            case SVGA3D_SHADEMODE_SMOOTH:
+                val = GL_SMOOTH;
+                break;
+
+            default:
+                AssertMsgFailedReturn(("Unexpected shade mode %d\n", pRenderState[i].uintValue), VERR_INTERNAL_ERROR);
+                break;
+            }
+
+            glShadeModel(val);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_LINEPATTERN:            /* SVGA3dLinePattern */
+            /* No longer supported by d3d; mesagl comments suggest not all backends support it */
+            /* @todo */
+            Log(("WARNING: SVGA3D_RS_LINEPATTERN %x not supported!!\n", pRenderState[i].uintValue));
+            /*
+            renderState = D3DRS_LINEPATTERN;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_LINEAA:                 /* SVGA3dBool */
+            enableCap = GL_LINE_SMOOTH;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_LINEWIDTH:              /* float */
+            glLineWidth(pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+        {
+            /* Refresh the blending state based on the new enable setting. */
+            SVGA3dRenderState renderstate[2];
+
+            renderstate[0].state     = SVGA3D_RS_SRCBLEND;
+            renderstate[0].uintValue = pContext->state.aRenderState[SVGA3D_RS_SRCBLEND].uintValue;
+            renderstate[1].state     = SVGA3D_RS_BLENDEQUATION;
+            renderstate[1].uintValue = pContext->state.aRenderState[SVGA3D_RS_BLENDEQUATION].uintValue;
+
+            int rc = vmsvga3dSetRenderState(pThis, cid, 2, renderstate);
+            AssertRCReturn(rc, rc);
+
+            if (pContext->state.aRenderState[SVGA3D_RS_BLENDENABLE].uintValue != 0)
+                continue;   /* ignore if blend is already enabled */
+            /* no break */
+        }
+
+        case SVGA3D_RS_BLENDENABLE:            /* SVGA3dBool */
+            enableCap = GL_BLEND;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SRCBLENDALPHA:          /* SVGA3dBlendOp */
+        case SVGA3D_RS_DSTBLENDALPHA:          /* SVGA3dBlendOp */
+        case SVGA3D_RS_SRCBLEND:               /* SVGA3dBlendOp */
+        case SVGA3D_RS_DSTBLEND:               /* SVGA3dBlendOp */
+        {
+            GLint srcRGB, srcAlpha, dstRGB, dstAlpha;
+            GLint blendop = vmsvga3dBlendOp2GL(pRenderState[i].uintValue);
+
+            glGetIntegerv(GL_BLEND_SRC_RGB, &srcRGB);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_BLEND_DST_RGB, &dstRGB);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_BLEND_DST_ALPHA, &dstAlpha);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_BLEND_SRC_ALPHA, &srcAlpha);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            switch (pRenderState[i].state)
+            {
+            case SVGA3D_RS_SRCBLEND:
+                srcRGB = blendop;
+                break;
+            case SVGA3D_RS_DSTBLEND:
+                dstRGB = blendop;
+                break;
+            case SVGA3D_RS_SRCBLENDALPHA:
+                srcAlpha = blendop;
+                break;
+            case SVGA3D_RS_DSTBLENDALPHA:
+                dstAlpha = blendop;
+                break;
+            default:
+                /* not possible; shut up gcc */
+                AssertFailed();
+                break;
+            }
+
+            if (pContext->state.aRenderState[SVGA3D_RS_SEPARATEALPHABLENDENABLE].uintValue != 0)
+                pState->ext.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+            else
+                glBlendFunc(srcRGB, dstRGB);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_BLENDEQUATIONALPHA:     /* SVGA3dBlendEquation */
+        case SVGA3D_RS_BLENDEQUATION:          /* SVGA3dBlendEquation */
+            if (pContext->state.aRenderState[SVGA3D_RS_SEPARATEALPHABLENDENABLE].uintValue != 0)
+                pState->ext.glBlendEquationSeparate(vmsvga3dBlendEquation2GL(pContext->state.aRenderState[SVGA3D_RS_BLENDEQUATION].uintValue), 
+                                                    vmsvga3dBlendEquation2GL(pContext->state.aRenderState[SVGA3D_RS_BLENDEQUATIONALPHA].uintValue));
+            else
+                pState->ext.glBlendEquation(vmsvga3dBlendEquation2GL(pRenderState[i].uintValue));
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_BLENDCOLOR:             /* SVGA3dColor */
+        {
+            GLfloat red, green, blue, alpha;
+
+            vmsvgaColor2GLFloatArray(pRenderState[i].uintValue, &red, &green, &blue, &alpha);
+
+            pState->ext.glBlendColor(red, green, blue, alpha);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_CULLMODE:               /* SVGA3dFace */
+        {
+            GLenum mode = GL_BACK;  /* default for OpenGL */
+
+            switch (pRenderState[i].uintValue)
+            {
+            case SVGA3D_FACE_NONE:
+                break;
+            case SVGA3D_FACE_FRONT:
+                mode = GL_FRONT;
+                break;
+            case SVGA3D_FACE_BACK:
+                mode = GL_BACK;
+                break;
+            case SVGA3D_FACE_FRONT_BACK:
+                mode = GL_FRONT_AND_BACK;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected cull mode %d\n", pRenderState[i].uintValue), VERR_INTERNAL_ERROR);
+                break;
+            }
+            enableCap = GL_CULL_FACE;
+            if (pRenderState[i].uintValue != SVGA3D_FACE_NONE)
+            {
+                glCullFace(mode);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                val = 1;
+            }
+            else
+                val = 0;
+            break;
+        }
+
+        case SVGA3D_RS_ZFUNC:                  /* SVGA3dCmpFunc */
+            glDepthFunc(vmsvgaCmpFunc2GL(pRenderState[i].uintValue));
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_ALPHAFUNC:              /* SVGA3dCmpFunc */
+        {
+            GLclampf ref;
+
+            glGetFloatv(GL_ALPHA_TEST_REF, &ref);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glAlphaFunc(vmsvgaCmpFunc2GL(pRenderState[i].uintValue), ref);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_ALPHAREF:               /* float (0.0 .. 1.0) */
+        {
+            GLint func;
+
+            glGetIntegerv(GL_ALPHA_TEST_FUNC, &func);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glAlphaFunc(func, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_STENCILENABLE:          /* SVGA3dBool */
+            enableCap = GL_STENCIL_TEST;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILFUNC:            /* SVGA3dCmpFunc */
+        case SVGA3D_RS_STENCILREF:             /* uint32_t */
+        case SVGA3D_RS_STENCILMASK:            /* uint32_t */
+        {
+            GLint func, ref;
+            GLuint mask;
+
+            glGetIntegerv(GL_STENCIL_FUNC, &func);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint *)&mask);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_REF, &ref);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            switch (pRenderState[i].state)
+            {
+            case SVGA3D_RS_STENCILFUNC:            /* SVGA3dCmpFunc */
+                func = vmsvgaCmpFunc2GL(pRenderState[i].uintValue);
+                break;
+
+            case SVGA3D_RS_STENCILREF:             /* uint32_t */
+                ref = pRenderState[i].uintValue;
+                break;
+
+            case SVGA3D_RS_STENCILMASK:            /* uint32_t */
+                mask = pRenderState[i].uintValue;
+                break;
+
+            default:
+                /* not possible; shut up gcc */
+                AssertFailed();
+                break;
+            }
+
+            glStencilFunc(func, ref, mask);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_STENCILWRITEMASK:       /* uint32_t */
+            glStencilMask(pRenderState[i].uintValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_STENCILFAIL:            /* SVGA3dStencilOp */
+        case SVGA3D_RS_STENCILZFAIL:           /* SVGA3dStencilOp */
+        case SVGA3D_RS_STENCILPASS:            /* SVGA3dStencilOp */
+        {
+            GLint sfail, dpfail, dppass;
+            GLenum stencilop = vmsvgaStencipOp2GL(pRenderState[i].uintValue);
+
+            glGetIntegerv(GL_STENCIL_FAIL, &sfail);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &dpfail);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &dppass);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            switch (pRenderState[i].state)
+            {
+            case SVGA3D_RS_STENCILFAIL:            /* SVGA3dStencilOp */
+                sfail = stencilop;
+                break;
+            case SVGA3D_RS_STENCILZFAIL:           /* SVGA3dStencilOp */
+                dpfail = stencilop;
+                break;
+            case SVGA3D_RS_STENCILPASS:            /* SVGA3dStencilOp */
+                dppass = stencilop;
+                break;
+            default:
+                /* not possible; shut up gcc */
+                AssertFailed();
+                break;
+            }
+            glStencilOp(sfail, dpfail, dppass);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_STENCILENABLE2SIDED:    /* SVGA3dBool */
+            /* @note GL_EXT_stencil_two_side required! */
+            if (pState->ext.fEXT_stencil_two_side)
+            {
+                enableCap = GL_STENCIL_TEST_TWO_SIDE_EXT;
+                val = pRenderState[i].uintValue;
+            }
+            else
+                Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_RS_STENCILENABLE2SIDED\n"));
+            break;
+
+        case SVGA3D_RS_CCWSTENCILFUNC:         /* SVGA3dCmpFunc */
+        {
+            /* @todo SVGA3D_RS_STENCILFAIL/ZFAIL/PASS for front & back faces
+             *       SVGA3D_RS_CCWSTENCILFAIL/ZFAIL/PASS for back faces ??
+             */
+            GLint ref;
+            GLuint mask;
+
+            glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, (GLint *)&mask);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_BACK_REF, &ref);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            pState->ext.glStencilFuncSeparate(GL_BACK, vmsvgaCmpFunc2GL(pRenderState[i].uintValue), ref, mask);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_CCWSTENCILFAIL:         /* SVGA3dStencilOp */
+        case SVGA3D_RS_CCWSTENCILZFAIL:        /* SVGA3dStencilOp */
+        case SVGA3D_RS_CCWSTENCILPASS:         /* SVGA3dStencilOp */
+        {
+            /* @todo SVGA3D_RS_STENCILFAIL/ZFAIL/PASS for front & back faces
+             *       SVGA3D_RS_CCWSTENCILFAIL/ZFAIL/PASS for back faces ??
+             */
+            GLint sfail, dpfail, dppass;
+            GLenum stencilop = vmsvgaStencipOp2GL(pRenderState[i].uintValue);
+
+            glGetIntegerv(GL_STENCIL_BACK_FAIL, &sfail);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL, &dpfail);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS, &dppass);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            switch (pRenderState[i].state)
+            {
+            case SVGA3D_RS_CCWSTENCILFAIL:         /* SVGA3dStencilOp */
+                sfail = stencilop;
+                break;
+            case SVGA3D_RS_CCWSTENCILZFAIL:        /* SVGA3dStencilOp */
+                dpfail = stencilop;
+                break;
+            case SVGA3D_RS_CCWSTENCILPASS:         /* SVGA3dStencilOp */
+                dppass = stencilop;
+                break;
+            default:
+                /* not possible; shut up gcc */
+                AssertFailed();
+                break;
+            }
+            pState->ext.glStencilOpSeparate(GL_BACK, sfail, dpfail, dppass);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_ZBIAS:                  /* float */
+            /* @todo unknown meaning; depth bias is not identical
+            renderState = D3DRS_DEPTHBIAS;
+            val = pRenderState[i].uintValue;
+            */
+            Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_RS_ZBIAS\n"));
+            break;
+
+        case SVGA3D_RS_DEPTHBIAS:              /* float */
+        {
+            GLfloat factor;
+
+            /* @todo not sure if the d3d & ogl definitions are identical. */
+
+            /* Do not change the factor part. */
+            glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &factor);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            glPolygonOffset(factor, pRenderState[i].floatValue);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_SLOPESCALEDEPTHBIAS:    /* float */
+        {
+            GLfloat units;
+
+            /* @todo not sure if the d3d & ogl definitions are identical. */
+
+            /* Do not change the factor part. */
+            glGetFloatv(GL_POLYGON_OFFSET_UNITS, &units);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            glPolygonOffset(pRenderState[i].floatValue, units);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_COLORWRITEENABLE:       /* SVGA3dColorMask */
+        {
+            GLboolean red, green, blue, alpha;
+            SVGA3dColorMask mask;
+
+            mask.uintValue = pRenderState[i].uintValue;
+
+            red     = mask.s.red;
+            green   = mask.s.green;
+            blue    = mask.s.blue;
+            alpha   = mask.s.alpha;
+
+            glColorMask(red, green, blue, alpha);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_RS_COLORWRITEENABLE1:      /* SVGA3dColorMask to D3DCOLORWRITEENABLE_* */
+        case SVGA3D_RS_COLORWRITEENABLE2:      /* SVGA3dColorMask to D3DCOLORWRITEENABLE_* */
+        case SVGA3D_RS_COLORWRITEENABLE3:      /* SVGA3dColorMask to D3DCOLORWRITEENABLE_* */
+            Log(("vmsvga3dSetRenderState: WARNING SVGA3D_RS_COLORWRITEENABLEx not supported!!\n"));
+            break;
+
+        case SVGA3D_RS_SCISSORTESTENABLE:      /* SVGA3dBool */
+            enableCap = GL_SCISSOR_TEST;
+            val = pRenderState[i].uintValue;
+            break;
+
+#if 0
+        case SVGA3D_RS_DIFFUSEMATERIALSOURCE:  /* SVGA3dVertexMaterial */
+            AssertCompile(D3DMCS_COLOR2 == SVGA3D_VERTEXMATERIAL_SPECULAR);
+            renderState = D3DRS_DIFFUSEMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial */
+            renderState = D3DRS_SPECULARMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_AMBIENTMATERIALSOURCE:  /* SVGA3dVertexMaterial */
+            renderState = D3DRS_AMBIENTMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial */
+            renderState = D3DRS_EMISSIVEMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+#endif
+
+        case SVGA3D_RS_WRAP3:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP4:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP5:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP6:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP7:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP8:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP9:                  /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP10:                 /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP11:                 /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP12:                 /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP13:                 /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP14:                 /* SVGA3dWrapFlags */
+        case SVGA3D_RS_WRAP15:                 /* SVGA3dWrapFlags */
+            Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_WRAPx (x >= 3)\n"));
+            break;
+
+        case SVGA3D_RS_LASTPIXEL:              /* SVGA3dBool */
+        case SVGA3D_RS_TWEENFACTOR:            /* float */
+        case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
+        case SVGA3D_RS_VERTEXBLEND:            /* SVGA3dVertexBlendFlags */
+            Log(("vmsvga3dSetRenderState: WARNING not applicable!!\n"));
+            break;
+
+        case SVGA3D_RS_MULTISAMPLEANTIALIAS:   /* SVGA3dBool */
+            enableCap = GL_MULTISAMPLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_MULTISAMPLEMASK:        /* uint32_t */
+        case SVGA3D_RS_ANTIALIASEDLINEENABLE:  /* SVGA3dBool */
+            Log(("vmsvga3dSetRenderState: WARNING not applicable??!!\n"));
+            break;
+
+        case SVGA3D_RS_COORDINATETYPE:         /* SVGA3dCoordinateType */
+            Assert(pRenderState[i].uintValue == SVGA3D_COORDINATE_LEFTHANDED);
+            /* @todo setup a view matrix to scale the world space by -1 in the z-direction for right handed coordinates. */
+            /*
+            renderState = D3DRS_COORDINATETYPE;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_FRONTWINDING:           /* SVGA3dFrontWinding */
+            Assert(pRenderState[i].uintValue == SVGA3D_FRONTWINDING_CW);
+            /* Invert the selected mode because of y-inversion (?) */
+            glFrontFace((pRenderState[i].uintValue != SVGA3D_FRONTWINDING_CW) ? GL_CW : GL_CCW);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RS_OUTPUTGAMMA:            /* float */
+            //AssertFailed();
+            /*
+            D3DRS_SRGBWRITEENABLE ??
+            renderState = D3DRS_OUTPUTGAMMA;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+#if 0
+
+        case SVGA3D_RS_VERTEXMATERIALENABLE:   /* SVGA3dBool */
+            //AssertFailed();
+            renderState = D3DRS_INDEXEDVERTEXBLENDENABLE;       /* correct?? */
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_TEXTUREFACTOR:          /* SVGA3dColor */
+            renderState = D3DRS_TEXTUREFACTOR;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_LOCALVIEWER:            /* SVGA3dBool */
+            renderState = D3DRS_LOCALVIEWER;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_ZVISIBLE:               /* SVGA3dBool */
+            AssertFailed();
+            /*
+            renderState = D3DRS_ZVISIBLE;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_CLIPPING:               /* SVGA3dBool */
+            renderState = D3DRS_CLIPPING;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP0:                  /* SVGA3dWrapFlags */
+            glTexParameter GL_TEXTURE_WRAP_S
+            Assert(SVGA3D_WRAPCOORD_3 == D3DWRAPCOORD_3);
+            renderState = D3DRS_WRAP0;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP1:                  /* SVGA3dWrapFlags */
+            glTexParameter GL_TEXTURE_WRAP_T
+            renderState = D3DRS_WRAP1;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP2:                  /* SVGA3dWrapFlags */
+            glTexParameter GL_TEXTURE_WRAP_R
+            renderState = D3DRS_WRAP2;
+            val = pRenderState[i].uintValue;
+            break;
+
+
+        case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+            renderState = D3DRS_SEPARATEALPHABLENDENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+
+        case SVGA3D_RS_BLENDEQUATIONALPHA:     /* SVGA3dBlendEquation */
+            renderState = D3DRS_BLENDOPALPHA;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_TRANSPARENCYANTIALIAS:  /* SVGA3dTransparencyAntialiasType */
+            AssertFailed();
+            /*
+            renderState = D3DRS_TRANSPARENCYANTIALIAS;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+#endif
+        default:
+            AssertFailed();
+            break;
+        }
+
+        if (enableCap != ~0U)
+        {
+            if (val)
+                glEnable(enableCap);
+            else
+                glDisable(enableCap);
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target)
+{
+    PVMSVGA3DCONTEXT            pContext;
+    PVMSVGA3DSTATE              pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE            pRenderTarget;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(type < SVGA3D_RT_MAX, VERR_INVALID_PARAMETER);
+    AssertReturn(target.face == 0, VERR_INVALID_PARAMETER);
+    AssertReturn(target.mipmap == 0, VERR_INVALID_PARAMETER);
+
+    Log(("vmsvga3dSetRenderTarget cid=%x type=%x surface id=%x\n", cid, type, target.sid));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetRenderTarget invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Save for vm state save/restore. */
+    pContext->state.aRenderTargets[type] = target.sid;
+
+    if (target.sid == SVGA3D_INVALID_ID)
+    {
+        /* Disable render target. */
+        switch (type)
+        {
+        case SVGA3D_RT_DEPTH:
+        case SVGA3D_RT_STENCIL:
+            pState->ext.glFramebufferRenderbuffer(GL_FRAMEBUFFER, (type == SVGA3D_RT_DEPTH) ? GL_DEPTH_ATTACHMENT : GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        case SVGA3D_RT_COLOR0:
+        case SVGA3D_RT_COLOR1:
+        case SVGA3D_RT_COLOR2:
+        case SVGA3D_RT_COLOR3:
+        case SVGA3D_RT_COLOR4:
+        case SVGA3D_RT_COLOR5:
+        case SVGA3D_RT_COLOR6:
+        case SVGA3D_RT_COLOR7:
+            pContext->sidRenderTarget = SVGA3D_INVALID_ID;
+            pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + type - SVGA3D_RT_COLOR0, 0, 0, 0);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        return VINF_SUCCESS;
+    }
+
+    AssertReturn(target.sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(target.sid < pState->cSurfaces && pState->paSurface[target.sid].id == target.sid, VERR_INVALID_PARAMETER);
+    pRenderTarget = &pState->paSurface[target.sid];
+
+    switch (type)
+    {
+    case SVGA3D_RT_DEPTH:
+    case SVGA3D_RT_STENCIL:
+        if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
+        {
+            Log(("vmsvga3dSetRenderTarget: create renderbuffer to be used as render target; surface id=%x type=%d format=%d\n", target.sid, pRenderTarget->flags, pRenderTarget->internalFormatGL));
+            pState->ext.glGenRenderbuffers(1, &pRenderTarget->oglId.renderbuffer);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            pState->ext.glBindRenderbuffer(GL_RENDERBUFFER, pRenderTarget->oglId.renderbuffer);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            pState->ext.glRenderbufferStorage(GL_RENDERBUFFER, 
+                                              pRenderTarget->internalFormatGL, 
+                                              pRenderTarget->pMipmapLevels[0].size.width, 
+                                              pRenderTarget->pMipmapLevels[0].size.height);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+            pRenderTarget->idAssociatedContext = cid;
+        }
+        else
+        {
+            pState->ext.glBindRenderbuffer(GL_RENDERBUFFER, pRenderTarget->oglId.renderbuffer);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        }
+        Assert(pRenderTarget->idAssociatedContext == cid);
+        Assert(!pRenderTarget->fDirty);
+        AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
+
+        pRenderTarget->flags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+
+        pState->ext.glFramebufferRenderbuffer(GL_FRAMEBUFFER, (type == SVGA3D_RT_DEPTH) ? GL_DEPTH_ATTACHMENT : GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, pRenderTarget->oglId.renderbuffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        break;
+
+    case SVGA3D_RT_COLOR0:
+    case SVGA3D_RT_COLOR1:
+    case SVGA3D_RT_COLOR2:
+    case SVGA3D_RT_COLOR3:
+    case SVGA3D_RT_COLOR4:
+    case SVGA3D_RT_COLOR5:
+    case SVGA3D_RT_COLOR6:
+    case SVGA3D_RT_COLOR7:
+    {
+        /* A texture surface can be used as a render target to fill it and later on used as a texture. */
+        if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
+        {
+            Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->flags, pRenderTarget->format));
+            int rc = vmsvga3dCreateTexture(pState, pContext, cid, pRenderTarget);
+            AssertRCReturn(rc, rc);
+        }
+
+        AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
+        Assert(!pRenderTarget->fDirty);
+
+        pRenderTarget->flags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
+
+        pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + type - SVGA3D_RT_COLOR0, GL_TEXTURE_2D, pRenderTarget->oglId.texture, target.mipmap);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        pContext->sidRenderTarget = target.sid;
+
+#ifdef DEBUG
+        GLenum status = pState->ext.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+        if (status != GL_FRAMEBUFFER_COMPLETE)
+            Log(("vmsvga3dSetRenderTarget: WARNING: glCheckFramebufferStatus returned %x\n", status));
+#endif
+        /* @todo use glDrawBuffers too? */
+        break;
+    }
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    return VINF_SUCCESS;
+}
+
+#if 0
+/**
+ * Convert SVGA texture combiner value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureCombiner2D3D(uint32_t value)
+{
+    switch (value)
+    {
+    case SVGA3D_TC_DISABLE:
+        return D3DTOP_DISABLE;
+    case SVGA3D_TC_SELECTARG1:
+        return D3DTOP_SELECTARG1;
+    case SVGA3D_TC_SELECTARG2:
+        return D3DTOP_SELECTARG2;
+    case SVGA3D_TC_MODULATE:
+        return D3DTOP_MODULATE;
+    case SVGA3D_TC_ADD:
+        return D3DTOP_ADD;
+    case SVGA3D_TC_ADDSIGNED:
+        return D3DTOP_ADDSIGNED;
+    case SVGA3D_TC_SUBTRACT:
+        return D3DTOP_SUBTRACT;
+    case SVGA3D_TC_BLENDTEXTUREALPHA:
+        return D3DTOP_BLENDTEXTUREALPHA;
+    case SVGA3D_TC_BLENDDIFFUSEALPHA:
+        return D3DTOP_BLENDDIFFUSEALPHA;
+    case SVGA3D_TC_BLENDCURRENTALPHA:
+        return D3DTOP_BLENDCURRENTALPHA;
+    case SVGA3D_TC_BLENDFACTORALPHA:
+        return D3DTOP_BLENDFACTORALPHA;
+    case SVGA3D_TC_MODULATE2X:
+        return D3DTOP_MODULATE2X;
+    case SVGA3D_TC_MODULATE4X:
+        return D3DTOP_MODULATE4X;
+    case SVGA3D_TC_DSDT:
+        AssertFailed(); /* @todo ??? */
+        return D3DTOP_DISABLE;
+    case SVGA3D_TC_DOTPRODUCT3:
+        return D3DTOP_DOTPRODUCT3;
+    case SVGA3D_TC_BLENDTEXTUREALPHAPM:
+        return D3DTOP_BLENDTEXTUREALPHAPM;
+    case SVGA3D_TC_ADDSIGNED2X:
+        return D3DTOP_ADDSIGNED2X;
+    case SVGA3D_TC_ADDSMOOTH:
+        return D3DTOP_ADDSMOOTH;
+    case SVGA3D_TC_PREMODULATE:
+        return D3DTOP_PREMODULATE;
+    case SVGA3D_TC_MODULATEALPHA_ADDCOLOR:
+        return D3DTOP_MODULATEALPHA_ADDCOLOR;
+    case SVGA3D_TC_MODULATECOLOR_ADDALPHA:
+        return D3DTOP_MODULATECOLOR_ADDALPHA;
+    case SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR:
+        return D3DTOP_MODULATEINVALPHA_ADDCOLOR;
+    case SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA:
+        return D3DTOP_MODULATEINVCOLOR_ADDALPHA;
+    case SVGA3D_TC_BUMPENVMAPLUMINANCE:
+        return D3DTOP_BUMPENVMAPLUMINANCE;
+    case SVGA3D_TC_MULTIPLYADD:
+        return D3DTOP_MULTIPLYADD;
+    case SVGA3D_TC_LERP:
+        return D3DTOP_LERP;
+    default:
+        AssertFailed();
+        return D3DTOP_DISABLE;
+    }
+}
+
+/**
+ * Convert SVGA texture arg data value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureArgData2D3D(uint32_t value)
+{
+    switch (value)
+    {
+    case SVGA3D_TA_CONSTANT:
+        return D3DTA_CONSTANT;
+    case SVGA3D_TA_PREVIOUS:
+        return D3DTA_CURRENT;   /* current = previous */
+    case SVGA3D_TA_DIFFUSE:
+        return D3DTA_DIFFUSE;
+    case SVGA3D_TA_TEXTURE:
+        return D3DTA_TEXTURE;
+    case SVGA3D_TA_SPECULAR:
+        return D3DTA_SPECULAR;
+    default:
+        AssertFailed();
+        return 0;
+    }
+}
+
+/**
+ * Convert SVGA texture transform flag value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextTransformFlags2D3D(uint32_t value)
+{
+    switch (value)
+    {
+    case SVGA3D_TEX_TRANSFORM_OFF:
+        return D3DTTFF_DISABLE;
+    case SVGA3D_TEX_TRANSFORM_S:
+        return D3DTTFF_COUNT1;      /* @todo correct? */
+    case SVGA3D_TEX_TRANSFORM_T:
+        return D3DTTFF_COUNT2;      /* @todo correct? */
+    case SVGA3D_TEX_TRANSFORM_R:
+        return D3DTTFF_COUNT3;      /* @todo correct? */
+    case SVGA3D_TEX_TRANSFORM_Q:
+        return D3DTTFF_COUNT4;      /* @todo correct? */
+    case SVGA3D_TEX_PROJECTED:
+        return D3DTTFF_PROJECTED;
+    default:
+        AssertFailed();
+        return 0;
+    }
+}
+#endif
+
+static GLenum vmsvga3dTextureAddress2OGL(SVGA3dTextureAddress value)
+{
+    switch (value)
+    {
+    case SVGA3D_TEX_ADDRESS_WRAP:
+        return GL_REPEAT;
+    case SVGA3D_TEX_ADDRESS_MIRROR:
+        return GL_MIRRORED_REPEAT;
+    case SVGA3D_TEX_ADDRESS_CLAMP:
+        return GL_CLAMP_TO_EDGE;
+    case SVGA3D_TEX_ADDRESS_BORDER:
+        return GL_CLAMP_TO_BORDER;
+    case SVGA3D_TEX_ADDRESS_MIRRORONCE:
+        AssertFailed();
+        return GL_CLAMP_TO_EDGE_SGIS; /* @todo correct? */
+
+    case SVGA3D_TEX_ADDRESS_EDGE:        
+    case SVGA3D_TEX_ADDRESS_INVALID:
+    default:
+        AssertFailed();
+        return GL_REPEAT;   /* default */
+    }
+}
+
+static GLenum vmsvga3dTextureFilter2OGL(SVGA3dTextureFilter value)
+{
+    switch (value)
+    {
+    case SVGA3D_TEX_FILTER_NONE:
+    case SVGA3D_TEX_FILTER_LINEAR:
+        return GL_LINEAR;
+    case SVGA3D_TEX_FILTER_NEAREST:
+        return GL_NEAREST;
+    case SVGA3D_TEX_FILTER_ANISOTROPIC:
+        /* @todo */
+    case SVGA3D_TEX_FILTER_FLATCUBIC:       // Deprecated, not implemented
+    case SVGA3D_TEX_FILTER_GAUSSIANCUBIC:   // Deprecated, not implemented
+    case SVGA3D_TEX_FILTER_PYRAMIDALQUAD:   // Not currently implemented
+    case SVGA3D_TEX_FILTER_GAUSSIANQUAD:    // Not currently implemented
+    default:
+        AssertFailed();
+        return GL_LINEAR;   /* default */
+    }
+}
+
+uint32_t vmsvga3dSVGA3dColor2RGBA(SVGA3dColor value)
+{
+    /* flip the red and blue bytes */
+    uint8_t blue = value & 0xff;
+    uint8_t red  = (value >> 16) & 0xff;
+    return (value & 0xff00ff00) | red | (blue << 16);
+}
+
+int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
+{
+    GLenum                      val;
+    GLenum                      currentStage = ~0L;
+    PVMSVGA3DCONTEXT            pContext;
+    PVMSVGA3DSTATE              pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetTextureState %x cTextureState=%d\n", cid, cTextureStates));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetTextureState invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    for (unsigned i = 0; i < cTextureStates; i++)
+    {
+        GLenum textureType = ~0U;
+        GLenum samplerType = ~0U;
+
+        Log(("vmsvga3dSetTextureState: cid=%x stage=%d type=%s (%x) val=%x\n", cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
+        /* Record the texture state for vm state saving. */
+        if (    pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE
+            &&  pTextureState[i].name < SVGA3D_TS_MAX)
+        {
+            pContext->state.aTextureState[pTextureState[i].stage][pTextureState[i].name] = pTextureState[i];
+        }
+
+        /* Active the right texture unit for subsequent texture state changes. */
+        if (pTextureState[i].stage != currentStage)
+        {
+            pState->ext.glActiveTexture(GL_TEXTURE0 + pTextureState[i].stage);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            currentStage = pTextureState[i].stage;
+        }
+
+        switch (pTextureState[i].name)
+        {
+        case SVGA3D_TS_BUMPENVMAT00:                /* float */
+        case SVGA3D_TS_BUMPENVMAT01:                /* float */
+        case SVGA3D_TS_BUMPENVMAT10:                /* float */
+        case SVGA3D_TS_BUMPENVMAT11:                /* float */
+        case SVGA3D_TS_BUMPENVLSCALE:               /* float */
+        case SVGA3D_TS_BUMPENVLOFFSET:              /* float */
+            Log(("vmsvga3dSetTextureState: bump mapping texture options not supported!!\n"));
+            break;
+
+        case SVGA3D_TS_COLOROP:                     /* SVGA3dTextureCombiner */
+        case SVGA3D_TS_COLORARG0:                   /* SVGA3dTextureArgData */
+        case SVGA3D_TS_COLORARG1:                   /* SVGA3dTextureArgData */
+        case SVGA3D_TS_COLORARG2:                   /* SVGA3dTextureArgData */
+        case SVGA3D_TS_ALPHAOP:                     /* SVGA3dTextureCombiner */
+        case SVGA3D_TS_ALPHAARG0:                   /* SVGA3dTextureArgData */
+        case SVGA3D_TS_ALPHAARG1:                   /* SVGA3dTextureArgData */
+        case SVGA3D_TS_ALPHAARG2:                   /* SVGA3dTextureArgData */
+            /* @todo; not used by MesaGL */
+            Log(("vmsvga3dSetTextureState: colorop/alphaop not yet supported!!\n"));
+            break;
+#if 0
+
+        case SVGA3D_TS_TEXCOORDINDEX:               /* uint32_t */
+            textureType = D3DTSS_TEXCOORDINDEX;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_TEXTURETRANSFORMFLAGS:       /* SVGA3dTexTransformFlags */
+            textureType = D3DTSS_TEXTURETRANSFORMFLAGS;
+            val = vmsvga3dTextTransformFlags2D3D(pTextureState[i].value);
+            break;
+#endif
+
+        case SVGA3D_TS_BIND_TEXTURE:                /* SVGA3dSurfaceId */
+            if (pTextureState[i].value == SVGA3D_INVALID_ID)
+            {
+                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x\n", pTextureState[i].stage, pTextureState[i].value));
+
+                pContext->aSidActiveTexture[currentStage] = SVGA3D_INVALID_ID;
+                /* Unselect the currently associated texture. */
+                glBindTexture(GL_TEXTURE_2D, 0);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                /* Necessary for the fixed pipeline. */
+                glDisable(GL_TEXTURE_2D);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            else
+            {
+                uint32_t sid = pTextureState[i].value;
+
+                AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+                AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+                PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+
+                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x (%d,%d)\n", pTextureState[i].stage, pTextureState[i].value, pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height));
+
+                if (pSurface->oglId.texture == OPENGL_INVALID_ID)
+                {
+                    Assert(pSurface->idAssociatedContext == SVGA3D_INVALID_ID);
+                    Log(("CreateTexture (%d,%d) level=%d\n", pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height, pSurface->faces[0].numMipLevels));
+                    int rc = vmsvga3dCreateTexture(pState, pContext, cid, pSurface);
+                    AssertRCReturn(rc, rc);
+                }
+
+                glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                /* Necessary for the fixed pipeline. */
+                glEnable(GL_TEXTURE_2D);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                if (pContext->aSidActiveTexture[currentStage] != sid)
+                {
+                    /* Recreate the texture state as glBindTexture resets them all (sigh). */
+                    for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)
+                    {
+                        for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)
+                        {
+                            SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureState[iStage][j];
+
+                            if (    pTextureStateIter->name != SVGA3D_TS_INVALID
+                                &&  pTextureStateIter->name != SVGA3D_TS_BIND_TEXTURE)
+                                vmsvga3dSetTextureState(pThis, pContext->id, 1, pTextureStateIter);
+                        }
+                    }
+                }
+                pContext->aSidActiveTexture[currentStage] = sid;
+            }
+            /* Finished; continue with the next one. */
+            continue;
+
+        case SVGA3D_TS_ADDRESSW:                    /* SVGA3dTextureAddress */
+            textureType = GL_TEXTURE_WRAP_R;    /* R = W */
+            val = vmsvga3dTextureAddress2OGL((SVGA3dTextureAddress)pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_ADDRESSU:                    /* SVGA3dTextureAddress */
+            textureType = GL_TEXTURE_WRAP_S;    /* S = U */
+            val = vmsvga3dTextureAddress2OGL((SVGA3dTextureAddress)pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_ADDRESSV:                    /* SVGA3dTextureAddress */
+            textureType = GL_TEXTURE_WRAP_T;    /* T = V */
+            val = vmsvga3dTextureAddress2OGL((SVGA3dTextureAddress)pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_MIPFILTER:                   /* SVGA3dTextureFilter */
+            //AssertFailed(); /* @todo */
+            //samplerType = D3DSAMP_MIPFILTER;
+            val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_MAGFILTER:                   /* SVGA3dTextureFilter */
+            textureType = GL_TEXTURE_MAG_FILTER;
+            val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)pTextureState[i].value);
+            Assert(val == GL_NEAREST || val == GL_LINEAR);
+            break;
+
+        case SVGA3D_TS_MINFILTER:                   /* SVGA3dTextureFilter */
+            textureType = GL_TEXTURE_MIN_FILTER;
+            val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_BORDERCOLOR:                 /* SVGA3dColor */
+        {
+            GLfloat color[4]; /* red, green, blue, alpha */
+
+            vmsvgaColor2GLFloatArray(pTextureState[i].value, &color[0], &color[1], &color[2], &color[3]);
+
+            glTexParameterfv(GL_TEXTURE_2D /* @todo flexible type */, GL_TEXTURE_BORDER_COLOR, color);   /* Identical; default 0.0 identical too */
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+        }
+
+        case SVGA3D_TS_TEXTURE_LOD_BIAS:            /* float */
+            glTexParameterf(GL_TEXTURE_2D /* @todo flexible type */, GL_TEXTURE_LOD_BIAS, pTextureState[i].value);   /* Identical; default 0.0 identical too */
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            break;
+            
+        case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:        /* uint32_t */
+            textureType = GL_TEXTURE_MAX_LEVEL;
+            val = pTextureState[i].value;   /* Identical?? */
+            break;
+
+#if 0      
+        case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL:   /* uint32_t */
+            samplerType = D3DSAMP_MAXANISOTROPY;
+            val = pTextureState[i].value;   /* Identical?? */
+            break;
+            
+        case SVGA3D_TS_GAMMA:                       /* float */
+            samplerType = D3DSAMP_SRGBTEXTURE;
+            /* Boolean in D3D */
+            if (pTextureState[i].floatValue == 1.0f)
+                val = FALSE;
+            else
+                val = TRUE;
+            break;           
+#endif
+        /* Internal commands, that don't map directly to the SetTextureStageState API. */
+        case SVGA3D_TS_TEXCOORDGEN:                 /* SVGA3dTextureCoordGen */
+            AssertFailed();
+            break;
+
+        default:
+            //AssertFailed();
+            break;
+        }
+
+        if (textureType != ~0U)
+        {
+            glTexParameteri(GL_TEXTURE_2D /* @todo flexible type */, textureType, val);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetMaterial(PVGASTATE pThis, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    GLenum                oglFace;
+
+    Log(("vmsvga3dSetMaterial cid=%x face %d\n", cid, face));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetMaterial invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    switch (face)
+    {
+    case SVGA3D_FACE_NONE:
+    case SVGA3D_FACE_FRONT:
+        oglFace = GL_FRONT;
+        break;
+
+    case SVGA3D_FACE_BACK:
+        oglFace = GL_BACK;
+        break;
+
+    case SVGA3D_FACE_FRONT_BACK:
+        oglFace = GL_FRONT_AND_BACK;
+        break;
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    /* Save for vm state save/restore. */
+    pContext->state.aMaterial[face].fValid = true;
+    pContext->state.aMaterial[face].material = *pMaterial;
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_MATERIAL;
+
+    glMaterialfv(oglFace, GL_DIFFUSE, pMaterial->diffuse);
+    glMaterialfv(oglFace, GL_AMBIENT, pMaterial->ambient);
+    glMaterialfv(oglFace, GL_SPECULAR, pMaterial->specular);
+    glMaterialfv(oglFace, GL_EMISSION, pMaterial->emissive);
+    glMaterialfv(oglFace, GL_SHININESS, &pMaterial->shininess);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    return VINF_SUCCESS;
+}
+
+/* @todo Move into separate library as we are using logic from Wine here. */
+int vmsvga3dSetLightData(PVGASTATE pThis, uint32_t cid, uint32_t index, SVGA3dLightData *pData)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    float                 QuadAttenuation;
+
+    Log(("vmsvga3dSetLightData cid=%x index=%d type=%d\n", cid, index, pData->type));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetLightData invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Store for vm state save/restore */
+    if (index < SVGA3D_MAX_LIGHTS)
+    {
+        pContext->state.aLightData[index].fValidData = true;
+        pContext->state.aLightData[index].data = *pData;
+    }
+    else
+        AssertFailed();
+
+    if (    pData->attenuation0 < 0.0f 
+        ||  pData->attenuation1 < 0.0f 
+        ||  pData->attenuation2 < 0.0f)
+    {
+        Log(("vmsvga3dSetLightData: invalid negative attenuation values!!\n"));
+        return VINF_SUCCESS;    /* ignore; could crash the GL driver */
+    }
+
+    /* Light settings are affected by the model view in OpenGL, the View transform in direct3d */
+    glMatrixMode(GL_MODELVIEW);
+    glPushMatrix();
+    glLoadMatrixf(pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].matrix);
+
+    glLightfv(GL_LIGHT0 + index, GL_DIFFUSE, pData->diffuse);
+    glLightfv(GL_LIGHT0 + index, GL_SPECULAR, pData->specular);
+    glLightfv(GL_LIGHT0 + index, GL_AMBIENT, pData->ambient);
+
+    if (pData->range * pData->range >= FLT_MIN)
+        QuadAttenuation = 1.4f / (pData->range * pData->range);
+    else 
+        QuadAttenuation = 0.0f;
+
+    switch (pData->type)
+    {
+    case SVGA3D_LIGHTTYPE_POINT:
+    {
+        GLfloat position[4];
+
+        position[0] = pData->position[0];
+        position[1] = pData->position[1];
+        position[2] = pData->position[2];
+        position[3] = 1.0f;
+
+        glLightfv(GL_LIGHT0 + index, GL_POSITION, position);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        
+        glLightf(GL_LIGHT0 + index, GL_SPOT_CUTOFF, 180.0f);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        
+        /* Attenuation - Are these right? guessing... */
+        glLightf(GL_LIGHT0 + index, GL_CONSTANT_ATTENUATION, pData->attenuation0);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        
+        glLightf(GL_LIGHT0 + index, GL_LINEAR_ATTENUATION, pData->attenuation1);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        glLightf(GL_LIGHT0 + index, GL_QUADRATIC_ATTENUATION, (QuadAttenuation < pData->attenuation2) ? pData->attenuation2 : QuadAttenuation);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        /* @todo range */
+        break;
+    }
+
+    case SVGA3D_LIGHTTYPE_SPOT1:
+    {
+        GLfloat exponent;
+        GLfloat position[4];
+        const GLfloat pi = 4.0f * atanf(1.0f);
+
+        position[0] = pData->position[0];
+        position[1] = pData->position[1];
+        position[2] = pData->position[2];
+        position[3] = 1.0f;
+
+        glLightfv(GL_LIGHT0 + index, GL_POSITION, position);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        position[0] = pData->direction[0];
+        position[1] = pData->direction[1];
+        position[2] = pData->direction[2];
+        position[3] = 1.0f;
+
+        glLightfv(GL_LIGHT0 + index, GL_SPOT_DIRECTION, position);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        /*
+         * opengl-ish and d3d-ish spot lights use too different models for the
+         * light "intensity" as a function of the angle towards the main light direction,
+         * so we only can approximate very roughly.
+         * however spot lights are rather rarely used in games (if ever used at all).
+         * furthermore if still used, probably nobody pays attention to such details.
+         */
+        if (pData->falloff == 0)
+        {
+            /* Falloff = 0 is easy, because d3d's and opengl's spot light equations have the
+             * falloff resp. exponent parameter as an exponent, so the spot light lighting
+             * will always be 1.0 for both of them, and we don't have to care for the
+             * rest of the rather complex calculation
+             */
+            exponent = 0.0f;
+        } 
+        else 
+        {
+            float rho = pData->theta + (pData->phi - pData->theta) / (2 * pData->falloff);
+            if (rho < 0.0001f) 
+                rho = 0.0001f;
+            exponent = -0.3f/log(cos(rho/2));
+        }
+        if (exponent > 128.0f)
+            exponent = 128.0f;
+
+        glLightf(GL_LIGHT0 + index, GL_SPOT_EXPONENT, exponent);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        glLightf(GL_LIGHT0 + index, GL_SPOT_CUTOFF, pData->phi * 90.0 / pi);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        /* Attenuation - Are these right? guessing... */
+        glLightf(GL_LIGHT0 + index, GL_CONSTANT_ATTENUATION, pData->attenuation0);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        
+        glLightf(GL_LIGHT0 + index, GL_LINEAR_ATTENUATION, pData->attenuation1);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        glLightf(GL_LIGHT0 + index, GL_QUADRATIC_ATTENUATION, (QuadAttenuation < pData->attenuation2) ? pData->attenuation2 : QuadAttenuation);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        /* @todo range */
+        break;
+    }
+
+    case SVGA3D_LIGHTTYPE_DIRECTIONAL:
+    {
+        GLfloat position[4];
+
+        position[0] = -pData->direction[0];
+        position[1] = -pData->direction[1];
+        position[2] = -pData->direction[2];
+        position[3] = 0.0f;
+
+        glLightfv(GL_LIGHT0 + index, GL_POSITION, position); /* Note gl uses w position of 0 for direction! */
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        glLightf(GL_LIGHT0 + index, GL_SPOT_CUTOFF, 180.0f);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+        glLightf(GL_LIGHT0 + index, GL_SPOT_EXPONENT, 0.0f);
+        VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+        break;
+    }
+
+    case SVGA3D_LIGHTTYPE_SPOT2:
+    default:
+        Log(("Unsupported light type!!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    /* Restore the modelview matrix */
+    glPopMatrix();
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetLightEnabled(PVGASTATE pThis, uint32_t cid, uint32_t index, uint32_t enabled)
+{    
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetLightEnabled cid=%x %d -> %d\n", cid, index, enabled));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetLightEnabled invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Store for vm state save/restore */
+    if (index < SVGA3D_MAX_LIGHTS)
+        pContext->state.aLightData[index].fEnabled = !!enabled;
+    else
+        AssertFailed();
+
+    if (enabled)
+    {
+        /* Load the default settings if none have been set yet. */
+        if (!pContext->state.aLightData[index].fValidData)
+            vmsvga3dSetLightData(pThis, cid, index, (SVGA3dLightData *)&vmsvga3d_default_light);
+        glEnable(GL_LIGHT0 + index);
+    }
+    else
+        glDisable(GL_LIGHT0 + index);
+
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetViewPort(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetViewPort cid=%x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetViewPort invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Save for vm state save/restore. */
+    pContext->state.RectViewPort = *pRect;
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VIEWPORT;
+
+    /* @todo y-inversion for partial viewport coordinates? */
+    glViewport(pRect->x, pRect->y, pRect->w, pRect->h);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    /* Reset the projection matrix as that relies on the viewport setting. */
+    if (pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].fValid == true)
+    {
+        vmsvga3dSetTransform(pThis, cid, SVGA3D_TRANSFORM_PROJECTION, pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].matrix);
+    }
+    else
+    {
+        float matrix[16];
+
+        /* identity matrix if no matrix set. */
+        memset(matrix, 0, sizeof(matrix));
+        matrix[0]  = 1.0;
+        matrix[5]  = 1.0;
+        matrix[10] = 1.0;
+        matrix[15] = 1.0;
+        vmsvga3dSetTransform(pThis, cid, SVGA3D_TRANSFORM_PROJECTION, matrix);
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid,  uint32_t index, float plane[4])
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    double                oglPlane[4];
+
+    Log(("vmsvga3dSetClipPlane cid=%x %d (%d,%d)(%d,%d)\n", cid, index, (unsigned)(plane[0] * 100.0), (unsigned)(plane[1] * 100.0), (unsigned)(plane[2] * 100.0), (unsigned)(plane[3] * 100.0)));
+    AssertReturn(index < SVGA3D_CLIPPLANE_MAX, VERR_INVALID_PARAMETER);
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetClipPlane invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Store for vm state save/restore. */
+    pContext->state.aClipPlane[index].fValid = true;
+    memcpy(pContext->state.aClipPlane[index].plane, plane, sizeof(plane));
+
+    /* @todo clip plane affected by model view in OpenGL & view in D3D + vertex shader -> not transformed (see Wine; state.c clipplane) */
+    oglPlane[0] = (double)plane[0];
+    oglPlane[1] = (double)plane[1];
+    oglPlane[2] = (double)plane[2];
+    oglPlane[3] = (double)plane[3];
+
+    glClipPlane(GL_CLIP_PLANE0 + index, oglPlane);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetScissorRect(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetScissorRect cid=%x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetScissorRect invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Store for vm state save/restore. */
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_SCISSORRECT;
+    pContext->state.RectScissor = *pRect;
+
+    glScissor(pRect->x, pRect->y, pRect->w, pRect->h);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    return VINF_SUCCESS;
+}
+
+static void vmsvgaColor2GLFloatArray(uint32_t color, GLfloat *pRed, GLfloat *pGreen, GLfloat *pBlue, GLfloat *pAlpha)
+{
+    /* Convert byte color components to float (0-1.0) */
+    *pAlpha = (GLfloat)(color >> 24) / 255.0;
+    *pRed   = (GLfloat)((color >> 16) & 0xff) / 255.0;
+    *pGreen = (GLfloat)((color >> 8) & 0xff) / 255.0;
+    *pBlue  = (GLfloat)(color & 0xff) / 255.0;
+}
+
+int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect)
+{
+    GLbitfield            mask = 0;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    GLboolean             fDepthWriteEnabled = GL_FALSE;
+
+    Log(("vmsvga3dCommandClear cid=%x clearFlag=%x color=%x depth=%d stencil=%x cRects=%d\n", cid, clearFlag, color, (uint32_t)(depth * 100.0), stencil, cRects));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dCommandClear invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    if (clearFlag & SVGA3D_CLEAR_COLOR)
+    {
+        GLfloat red, green, blue, alpha;
+
+        vmsvgaColor2GLFloatArray(color, &red, &green, &blue, &alpha);
+
+        /* Set the color clear value. */
+        glClearColor(red, green, blue, alpha);
+
+        mask |= GL_COLOR_BUFFER_BIT;
+    }
+    if (clearFlag & SVGA3D_CLEAR_STENCIL)
+    {
+        /* @todo possibly the same problem as with glDepthMask */
+        glClearStencil(stencil);
+        mask |= GL_STENCIL_BUFFER_BIT;
+    }
+    if (clearFlag & SVGA3D_CLEAR_DEPTH)
+    {
+        glClearDepth((GLdouble)depth);
+        mask |= GL_DEPTH_BUFFER_BIT;
+
+        /* glClear will not clear the depth buffer if writing is disabled. */
+        glGetBooleanv(GL_DEPTH_WRITEMASK, &fDepthWriteEnabled);
+        if (fDepthWriteEnabled == GL_FALSE)
+            glDepthMask(GL_TRUE);
+    }
+
+    if (cRects)
+    {
+        /* Save the current scissor test bit and scissor box. */
+        glPushAttrib(GL_SCISSOR_BIT);
+        glEnable(GL_SCISSOR_TEST);
+        for (unsigned i=0; i < cRects; i++)
+        {
+            Log(("vmsvga3dCommandClear: rect %d (%d,%d)(%d,%d)\n", i, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
+            glScissor(pRect[i].x, pRect[i].y, pRect[i].w, pRect[i].h);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            glClear(mask);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        }
+        /* Restore the old scissor test bit and box */
+        glPopAttrib();
+    }
+    else
+    {
+        glClear(mask);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    }
+
+    /* Restore depth write state. */
+    if (    (clearFlag & SVGA3D_CLEAR_DEPTH)
+        && fDepthWriteEnabled == GL_FALSE)
+        glDepthMask(GL_FALSE);
+
+    return VINF_SUCCESS;
+}
+
+/* Convert VMWare vertex declaration to its OpenGL equivalent. */
+int vmsvga3dVertexDecl2OGL(SVGA3dVertexArrayIdentity &identity, GLint &size, GLenum &type, GLboolean &normalized)
+{
+    normalized = GL_FALSE;
+    switch (identity.type)
+    {
+    case SVGA3D_DECLTYPE_FLOAT1:
+        size = 1;
+        type = GL_FLOAT;
+        break;
+    case SVGA3D_DECLTYPE_FLOAT2:
+        size = 2;
+        type = GL_FLOAT;
+        break;
+    case SVGA3D_DECLTYPE_FLOAT3:
+        size = 3;
+        type = GL_FLOAT;
+        break;
+    case SVGA3D_DECLTYPE_FLOAT4:
+        size = 4;
+        type = GL_FLOAT;
+        break;
+
+    case SVGA3D_DECLTYPE_D3DCOLOR:
+        size = GL_BGRA;                 /* @note requires GL_ARB_vertex_array_bgra */
+        type = GL_UNSIGNED_BYTE;
+        normalized = GL_TRUE;   /* glVertexAttribPointer fails otherwise */
+        break;
+
+    case SVGA3D_DECLTYPE_UBYTE4N:
+        normalized = GL_TRUE;
+        /* no break */
+    case SVGA3D_DECLTYPE_UBYTE4:
+        size = 4;
+        type = GL_UNSIGNED_BYTE;
+        break;
+
+    case SVGA3D_DECLTYPE_SHORT2N:
+        normalized = GL_TRUE;
+        /* no break */
+    case SVGA3D_DECLTYPE_SHORT2:
+        size = 2;
+        type = GL_SHORT;
+        break;
+
+    case SVGA3D_DECLTYPE_SHORT4N:
+        normalized = GL_TRUE;
+        /* no break */
+    case SVGA3D_DECLTYPE_SHORT4:
+        size = 4;
+        type = GL_SHORT;
+        break;
+
+    case SVGA3D_DECLTYPE_USHORT4N:
+        normalized = GL_TRUE;
+        size = 4;
+        type = GL_UNSIGNED_SHORT;
+        break;
+
+    case SVGA3D_DECLTYPE_USHORT2N:
+        normalized = GL_TRUE;
+        size = 2;
+        type = GL_UNSIGNED_SHORT;
+        break;
+
+    case SVGA3D_DECLTYPE_UDEC3:
+        size = 3;
+        type = GL_UNSIGNED_INT_2_10_10_10_REV;    /* @todo correct? */
+        break;
+
+    case SVGA3D_DECLTYPE_DEC3N:
+        normalized = true;
+        size = 3;
+        type = GL_INT_2_10_10_10_REV;    /* @todo correct? */
+        break;
+
+    case SVGA3D_DECLTYPE_FLOAT16_2:
+        size = 2;
+        type = GL_HALF_FLOAT;
+        break;
+    case SVGA3D_DECLTYPE_FLOAT16_4:
+        size = 4;
+        type = GL_HALF_FLOAT;
+        break;
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    //pVertexElement->Method      = identity.method;
+    //pVertexElement->Usage       = identity.usage;
+
+    return VINF_SUCCESS;
+}
+
+/* Convert VMWare primitive type to its OpenGL equivalent. */
+/* Calculate the vertex count based on the primitive type and nr of primitives. */
+int vmsvga3dPrimitiveType2OGL(SVGA3dPrimitiveType PrimitiveType, GLenum *pMode, uint32_t cPrimitiveCount, uint32_t *pcVertices)
+{
+    switch (PrimitiveType)
+    {
+    case SVGA3D_PRIMITIVE_TRIANGLELIST:
+        *pMode      = GL_TRIANGLES;
+        *pcVertices = cPrimitiveCount * 3;
+        break;
+    case SVGA3D_PRIMITIVE_POINTLIST:
+        *pMode = GL_POINTS;
+        *pcVertices = cPrimitiveCount;
+        break;
+    case SVGA3D_PRIMITIVE_LINELIST:
+        *pMode = GL_LINES;
+        *pcVertices = cPrimitiveCount * 2;
+        break;
+    case SVGA3D_PRIMITIVE_LINESTRIP:
+        *pMode = GL_LINE_STRIP;
+        *pcVertices = cPrimitiveCount + 1;
+        break;
+    case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+        *pMode = GL_TRIANGLE_STRIP;
+        *pcVertices = cPrimitiveCount + 2;
+        break;
+    case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+        *pMode = GL_TRIANGLE_FAN;
+        *pcVertices = cPrimitiveCount + 2;
+        break;
+    default:
+        return VERR_INVALID_PARAMETER;
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
+{
+    unsigned            sidVertex = pVertexDecl[0].array.surfaceId;
+    PVMSVGA3DSURFACE    pVertexSurface;
+
+    AssertReturn(sidVertex < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidVertex < pState->cSurfaces && pState->paSurface[sidVertex].id == sidVertex, VERR_INVALID_PARAMETER);
+
+    pVertexSurface = &pState->paSurface[sidVertex];
+    Log(("vmsvga3dDrawPrimitives: vertex surface %x\n", sidVertex));
+
+    /* Create and/or bind the vertex buffer. */
+    if (pVertexSurface->oglId.buffer == OPENGL_INVALID_ID)
+    {
+        Log(("vmsvga3dDrawPrimitives: create vertex buffer fDirty=%d size=%x bytes\n", pVertexSurface->fDirty, pVertexSurface->pMipmapLevels[0].cbSurface));
+        pState->ext.glGenBuffers(1, &pVertexSurface->oglId.buffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pVertexSurface->oglId.buffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        Assert(pVertexSurface->fDirty);
+        /* @todo rethink usage dynamic/static */
+        pState->ext.glBufferData(GL_ARRAY_BUFFER, pVertexSurface->pMipmapLevels[0].cbSurface, pVertexSurface->pMipmapLevels[0].pSurfaceData, GL_DYNAMIC_DRAW);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+        pVertexSurface->pMipmapLevels[0].fDirty = false;
+        pVertexSurface->fDirty = false;
+
+        pVertexSurface->flags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+    }
+    else
+    {
+        Assert(pVertexSurface->fDirty == false);
+        pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pVertexSurface->oglId.buffer);
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    }
+    pVertexSurface->idAssociatedContext = pContext->id;
+
+    /* Setup the vertex declarations. */
+    for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+    {
+        GLint size;
+        GLenum type;
+        GLboolean normalized;
+        GLuint index = iVertexDeclBase + iVertex;
+
+        Log(("vmsvga3dDrawPrimitives: array index %d type=%s (%d) method=%s (%d) usage=%s (%d) usageIndex=%d stride=%d offset=%d\n", index, vmsvgaDeclType2String(pVertexDecl[iVertex].identity.type), pVertexDecl[iVertex].identity.type, vmsvgaDeclMethod2String(pVertexDecl[iVertex].identity.method), pVertexDecl[iVertex].identity.method, vmsvgaDeclUsage2String(pVertexDecl[iVertex].identity.usage), pVertexDecl[iVertex].identity.usage, pVertexDecl[iVertex].identity.usageIndex, pVertexDecl[iVer [...]
+
+        int rc = vmsvga3dVertexDecl2OGL(pVertexDecl[iVertex].identity, size, type, normalized);
+        AssertRCReturn(rc, rc);
+
+        if (pContext->state.shidVertex != SVGA_ID_INVALID)
+        {
+            /* Use numbered vertex arrays when shaders are active. */
+            pState->ext.glEnableVertexAttribArray(index);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            pState->ext.glVertexAttribPointer(index, size, type, normalized, pVertexDecl[iVertex].array.stride, (const GLvoid *)pVertexDecl[iVertex].array.offset);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            /* case SVGA3D_DECLUSAGE_COLOR:    @todo color component order not identical!! test GL_BGRA!!  */
+        }
+        else
+        {
+            /* Use the predefined selection of vertex streams for the fixed pipeline. */
+            switch (pVertexDecl[iVertex].identity.usage)
+            {
+            case SVGA3D_DECLUSAGE_POSITION:
+                glEnableClientState(GL_VERTEX_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                glVertexPointer(size, type, pVertexDecl[iVertex].array.stride, (const GLvoid *)pVertexDecl[iVertex].array.offset);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_BLENDINDICES:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_NORMAL:
+                glEnableClientState(GL_NORMAL_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                glNormalPointer(type, pVertexDecl[iVertex].array.stride, (const GLvoid *)pVertexDecl[iVertex].array.offset);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_PSIZE:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_TEXCOORD:
+                /* Specify the affected texture unit. */
+                pState->ext.glClientActiveTexture(GL_TEXTURE0 + pVertexDecl[iVertex].identity.usageIndex);
+                glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                glTexCoordPointer(size, type, pVertexDecl[iVertex].array.stride, (const GLvoid *)pVertexDecl[iVertex].array.offset);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_TANGENT:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_BINORMAL:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_TESSFACTOR:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_POSITIONT:
+                AssertFailed(); /* see position_transformed in Wine */
+                break;
+            case SVGA3D_DECLUSAGE_COLOR:    /* @todo color component order not identical!! test GL_BGRA!! */
+                glEnableClientState(GL_COLOR_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                glColorPointer(size, type, pVertexDecl[iVertex].array.stride, (const GLvoid *)pVertexDecl[iVertex].array.offset);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_FOG:
+                glEnableClientState(GL_FOG_COORD_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                pState->ext.glFogCoordPointer(type, pVertexDecl[iVertex].array.stride, (const GLvoid *)pVertexDecl[iVertex].array.offset);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_DEPTH:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_SAMPLE:
+                AssertFailed();
+                break;
+            case SVGA3D_DECLUSAGE_MAX: AssertFailed(); break; /* shut up gcc */
+            }
+        }
+       
+#ifdef LOG_ENABLED
+        if (pVertexDecl[iVertex].array.stride == 0)
+            Log(("vmsvga3dDrawPrimitives: stride == 0! Can be valid\n"));
+#endif
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
+{
+    /* Setup the vertex declarations. */
+    for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+    {
+        if (pContext->state.shidVertex != SVGA_ID_INVALID)
+        {
+            /* Use numbered vertex arrays when shaders are active. */
+            pState->ext.glDisableVertexAttribArray(iVertexDeclBase + iVertex);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        }
+        else
+        {
+            /* Use the predefined selection of vertex streams for the fixed pipeline. */
+            switch (pVertexDecl[iVertex].identity.usage)
+            {
+            case SVGA3D_DECLUSAGE_POSITION:
+                glDisableClientState(GL_VERTEX_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+                break;
+            case SVGA3D_DECLUSAGE_BLENDINDICES:
+                break;
+            case SVGA3D_DECLUSAGE_NORMAL:
+                glDisableClientState(GL_NORMAL_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_PSIZE:
+                break;
+            case SVGA3D_DECLUSAGE_TEXCOORD:
+                /* Specify the affected texture unit. */
+                pState->ext.glClientActiveTexture(GL_TEXTURE0 + pVertexDecl[iVertex].identity.usageIndex);
+                glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_TANGENT:
+                break;
+            case SVGA3D_DECLUSAGE_BINORMAL:
+                break;
+            case SVGA3D_DECLUSAGE_TESSFACTOR:
+                break;
+            case SVGA3D_DECLUSAGE_POSITIONT:
+                break;
+            case SVGA3D_DECLUSAGE_COLOR:    /* @todo color component order not identical!! */
+                glDisableClientState(GL_COLOR_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_FOG:
+                glDisableClientState(GL_FOG_COORD_ARRAY);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                break;
+            case SVGA3D_DECLUSAGE_DEPTH:
+                break;
+            case SVGA3D_DECLUSAGE_SAMPLE:
+                break;
+            case SVGA3D_DECLUSAGE_MAX: AssertFailed(); break; /* shut up gcc */
+            }
+        }
+    }
+    /* Unbind the vertex buffer after usage. */
+    pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
+{
+    PVMSVGA3DCONTEXT             pContext;
+    PVMSVGA3DSTATE               pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_INTERNAL_ERROR);
+    int                          rc = VERR_NOT_IMPLEMENTED;
+    uint32_t                     iCurrentVertex;
+
+    Log(("vmsvga3dDrawPrimitives cid=%x numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
+
+    AssertReturn(numVertexDecls && numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, VERR_INVALID_PARAMETER);
+    AssertReturn(numRanges && numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, VERR_INVALID_PARAMETER);
+    AssertReturn(!cVertexDivisor || cVertexDivisor == numVertexDecls, VERR_INVALID_PARAMETER);
+    /* @todo */
+    Assert(!cVertexDivisor);
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dDrawPrimitives invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    /* Flush any shader changes. */
+    if (pContext->pShaderContext)
+    {
+        uint32_t rtHeight = 0;
+
+        if (pContext->sidRenderTarget != SVGA_ID_INVALID)
+        {
+            PVMSVGA3DSURFACE pRenderTarget = &pState->paSurface[pContext->sidRenderTarget];
+            rtHeight = pRenderTarget->pMipmapLevels[0].size.height;
+        }
+
+        ShaderUpdateState(pContext->pShaderContext, rtHeight);
+    }
+
+    /* Process all vertex declarations. Each vertex buffer is represented by one stream. */
+    iCurrentVertex   = 0;
+    while (iCurrentVertex < numVertexDecls)
+    {
+        uint32_t sidVertex = SVGA_ID_INVALID;
+        uint32_t iVertex;
+
+        for (iVertex = iCurrentVertex; iVertex < numVertexDecls; iVertex++)
+        {
+            if (    sidVertex != SVGA_ID_INVALID
+                &&  pVertexDecl[iVertex].array.surfaceId != sidVertex
+               )
+                break;
+            sidVertex = pVertexDecl[iVertex].array.surfaceId;
+        }
+
+        rc = vmsvga3dDrawPrimitivesProcessVertexDecls(pState, pContext, iCurrentVertex, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
+        AssertRCReturn(rc, rc);
+
+        iCurrentVertex = iVertex;
+    }
+
+    /* Now draw the primitives. */
+    for (unsigned iPrimitive = 0; iPrimitive < numRanges; iPrimitive++)
+    {
+        GLenum           modeDraw;
+        unsigned         sidIndex  = pRange[iPrimitive].indexArray.surfaceId;
+        PVMSVGA3DSURFACE pIndexSurface = NULL;
+        unsigned         cVertices;
+
+        Log(("Primitive %d: type %s\n", iPrimitive, vmsvga3dPrimitiveType2String(pRange[iPrimitive].primType)));
+        rc = vmsvga3dPrimitiveType2OGL(pRange[iPrimitive].primType, &modeDraw, pRange[iPrimitive].primitiveCount, &cVertices);
+        if (RT_FAILURE(rc))
+        {
+            AssertRC(rc);
+            goto internal_error;
+        }
+
+        if (sidIndex != SVGA3D_INVALID_ID)
+        {
+            AssertMsg(pRange[iPrimitive].indexWidth == sizeof(uint32_t) || pRange[iPrimitive].indexWidth == sizeof(uint16_t), ("Unsupported primitive width %d\n", pRange[iPrimitive].indexWidth));
+
+            if (    sidIndex >= SVGA3D_MAX_SURFACE_IDS
+                ||  sidIndex >= pState->cSurfaces 
+                ||  pState->paSurface[sidIndex].id != sidIndex)
+            {
+                Assert(sidIndex < SVGA3D_MAX_SURFACE_IDS);
+                Assert(sidIndex < pState->cSurfaces && pState->paSurface[sidIndex].id == sidIndex);
+                rc = VERR_INVALID_PARAMETER;
+                goto internal_error;
+            }
+            pIndexSurface = &pState->paSurface[sidIndex];
+            Log(("vmsvga3dDrawPrimitives: index surface %x\n", sidIndex));
+
+            if (pIndexSurface->oglId.buffer == OPENGL_INVALID_ID)
+            {
+                Log(("vmsvga3dDrawPrimitives: create index buffer fDirty=%d size=%x bytes\n", pIndexSurface->fDirty, pIndexSurface->pMipmapLevels[0].cbSurface));
+
+                pState->ext.glGenBuffers(1, &pIndexSurface->oglId.buffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pIndexSurface->oglId.buffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                Assert(pIndexSurface->fDirty);
+
+                /* @todo rethink usage dynamic/static */
+                pState->ext.glBufferData(GL_ELEMENT_ARRAY_BUFFER, pIndexSurface->pMipmapLevels[0].cbSurface, pIndexSurface->pMipmapLevels[0].pSurfaceData, GL_DYNAMIC_DRAW);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                pIndexSurface->pMipmapLevels[0].fDirty = false;
+                pIndexSurface->fDirty = false;
+
+                pIndexSurface->flags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+            }
+            else
+            {
+                Assert(pIndexSurface->fDirty == false);
+
+                pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pIndexSurface->oglId.buffer);
+                VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+            }
+            pIndexSurface->idAssociatedContext = pContext->id;
+        }
+
+        if (!pIndexSurface)
+        {
+            /* Render without an index buffer */
+            Log(("DrawPrimitive %x cPrimitives=%d cVertices=%d index index bias=%d\n", modeDraw, pRange[iPrimitive].primitiveCount, cVertices, pRange[iPrimitive].indexBias));
+            glDrawArrays(modeDraw, pRange[iPrimitive].indexBias, cVertices);
+        }
+        else
+        {
+            Assert(pRange[iPrimitive].indexBias >= 0);  /* @todo */
+            Assert(pRange[iPrimitive].indexWidth == pRange[iPrimitive].indexArray.stride);
+           
+            /* Render with an index buffer */
+            Log(("DrawIndexedPrimitive %x cPrimitives=%d cVertices=%d hint.first=%d hint.last=%d index offset=%d primitivecount=%d index width=%d index bias=%d\n", modeDraw, pRange[iPrimitive].primitiveCount, cVertices, pVertexDecl[0].rangeHint.first,  pVertexDecl[0].rangeHint.last,  pRange[iPrimitive].indexArray.offset, pRange[iPrimitive].primitiveCount,  pRange[iPrimitive].indexWidth, pRange[iPrimitive].indexBias));
+            if (pRange[iPrimitive].indexBias == 0)
+            {
+                glDrawElements(modeDraw, 
+                               cVertices,
+                               (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, 
+                               (GLvoid *)(pRange[iPrimitive].indexArray.offset));   /* byte offset in indices buffer */
+            }
+            else
+                pState->ext.glDrawElementsBaseVertex(modeDraw, 
+                                                     cVertices, 
+                                                     (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, 
+                                                     (GLvoid *)(pRange[iPrimitive].indexArray.offset),   /* byte offset in indices buffer */
+                                                     pRange[iPrimitive].indexBias);        /* basevertex */
+
+            /* Unbind the index buffer after usage. */
+            pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+        }
+        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    }
+
+internal_error:
+
+    /* Deactivate the vertex declarations. */
+    iCurrentVertex   = 0;
+    while (iCurrentVertex < numVertexDecls)
+    {
+        uint32_t sidVertex = SVGA_ID_INVALID;
+        uint32_t iVertex;
+
+        for (iVertex = iCurrentVertex; iVertex < numVertexDecls; iVertex++)
+        {
+            if (    sidVertex != SVGA_ID_INVALID
+                &&  pVertexDecl[iVertex].array.surfaceId != sidVertex
+               )
+                break;
+            sidVertex = pVertexDecl[iVertex].array.surfaceId;
+        }
+
+        rc = vmsvga3dDrawPrimitivesCleanupVertexDecls(pState, pContext, iCurrentVertex, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
+        AssertRCReturn(rc, rc);
+
+        iCurrentVertex = iVertex;
+    }
+#ifdef DEBUG
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+    {
+        if (pContext->aSidActiveTexture[i] != SVGA3D_INVALID_ID)
+        {
+            GLint activeTexture = 0;
+            GLint activeTextureUnit = 0;
+
+            glGetIntegerv(GL_ACTIVE_TEXTURE, &activeTextureUnit);
+            pState->ext.glActiveTexture(GL_TEXTURE0 + i);
+
+            glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+            pState->ext.glActiveTexture(activeTextureUnit);
+
+            if (pContext->aSidActiveTexture[activeTextureUnit - GL_TEXTURE0] != SVGA3D_INVALID_ID)
+            {
+                PVMSVGA3DSURFACE pTexture;
+                pTexture = &pState->paSurface[pContext->aSidActiveTexture[activeTextureUnit - GL_TEXTURE0]];
+
+                AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture, ("%x vs %x unit %d - %d\n", pTexture->oglId.texture, activeTexture, i, activeTextureUnit - GL_TEXTURE0));
+            }
+        }
+    }
+#endif
+
+#ifdef DEBUG_GFX_WINDOW
+    if (pContext->aSidActiveTexture[0])
+    {
+        SVGA3dCopyRect rect;
+
+        rect.srcx = rect.srcy = rect.x = rect.y = 0;
+        rect.w = 800;
+        rect.h = 600;
+        vmsvga3dCommandPresent(pThis, pContext->sidRenderTarget, 0, NULL);
+    }
+#endif
+    return rc;
+}
+
+
+int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSHADER       pShader;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    int                   rc;
+
+    Log(("vmsvga3dShaderDefine cid=%x shid=%x type=%s cbData=%x\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cbData));
+    LogFlow(("shader code:\n%.*Rhxd\n", cbData, pShaderData));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderDefine invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    AssertReturn(shid < SVGA3D_MAX_SHADER_IDS, VERR_INVALID_PARAMETER);
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        if (shid >= pContext->cVertexShaders)
+        {
+            pContext->paVertexShader = (PVMSVGA3DSHADER)RTMemRealloc(pContext->paVertexShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+            AssertReturn(pContext->paVertexShader, VERR_NO_MEMORY);
+            memset(&pContext->paVertexShader[pContext->cVertexShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cVertexShaders));
+            for (uint32_t i = pContext->cVertexShaders; i < shid + 1; i++)
+                pContext->paVertexShader[i].id = SVGA3D_INVALID_ID;
+            pContext->cVertexShaders = shid + 1;
+        }
+        /* If one already exists with this id, then destroy it now. */
+        if (pContext->paVertexShader[shid].id != SVGA3D_INVALID_ID)
+            vmsvga3dShaderDestroy(pThis, cid, shid, pContext->paVertexShader[shid].type);
+
+        pShader = &pContext->paVertexShader[shid];
+    }
+    else
+    {
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (shid >= pContext->cPixelShaders)
+        {
+            pContext->paPixelShader = (PVMSVGA3DSHADER)RTMemRealloc(pContext->paPixelShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+            AssertReturn(pContext->paPixelShader, VERR_NO_MEMORY);
+            memset(&pContext->paPixelShader[pContext->cPixelShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cPixelShaders));
+            for (uint32_t i = pContext->cPixelShaders; i < shid + 1; i++)
+                pContext->paPixelShader[i].id = SVGA3D_INVALID_ID;
+            pContext->cPixelShaders = shid + 1;
+        }
+        /* If one already exists with this id, then destroy it now. */
+        if (pContext->paPixelShader[shid].id != SVGA3D_INVALID_ID)
+            vmsvga3dShaderDestroy(pThis, cid, shid, pContext->paPixelShader[shid].type);
+
+        pShader = &pContext->paPixelShader[shid];
+    }
+
+    memset(pShader, 0, sizeof(*pShader));
+    pShader->id     = shid;
+    pShader->cid    = cid;
+    pShader->type   = type;
+    pShader->cbData = cbData;
+    pShader->pShaderProgram = RTMemAllocZ(cbData);
+    AssertReturn(pShader->pShaderProgram, VERR_NO_MEMORY);
+    memcpy(pShader->pShaderProgram, pShaderData, cbData);
+
+    switch (type)
+    {
+    case SVGA3D_SHADERTYPE_VS:
+        rc = ShaderCreateVertexShader(pContext->pShaderContext, (const uint32_t *)pShaderData, &pShader->u.pVertexShader);
+        break;
+
+    case SVGA3D_SHADERTYPE_PS:
+        rc = ShaderCreatePixelShader(pContext->pShaderContext, (const uint32_t *)pShaderData, &pShader->u.pPixelShader);
+        break;
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    return rc;
+}
+
+int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    PVMSVGA3DSHADER       pShader = NULL;
+    int                   rc;
+
+    Log(("vmsvga3dShaderDestroy cid=%x shid=%x type=%s\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL"));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderDestroy invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        if (    shid < pContext->cVertexShaders
+            &&  pContext->paVertexShader[shid].id == shid)
+        {
+            pShader = &pContext->paVertexShader[shid];
+            rc = ShaderDestroyVertexShader(pContext->pShaderContext, pShader->u.pVertexShader);
+            AssertRC(rc);
+        }
+    }
+    else
+    {
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (    shid < pContext->cPixelShaders
+            &&  pContext->paPixelShader[shid].id == shid)
+        {
+            pShader = &pContext->paPixelShader[shid];
+            rc = ShaderDestroyPixelShader(pContext->pShaderContext, pShader->u.pPixelShader);
+            AssertRC(rc);
+        }
+    }
+
+    if (pShader)
+    {
+        if (pShader->pShaderProgram)
+            RTMemFree(pShader->pShaderProgram);
+        memset(pShader, 0, sizeof(*pShader));
+        pShader->id = SVGA3D_INVALID_ID;
+    }
+    else
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
+{
+    PVMSVGA3DCONTEXT    pContext;
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    int                 rc;
+
+    Log(("vmsvga3dShaderSet cid=%x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderSet invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        /* Save for vm state save/restore. */
+        pContext->state.shidVertex = shid;
+        pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VERTEXSHADER;
+
+        if (    shid < pContext->cVertexShaders
+            &&  pContext->paVertexShader[shid].id == shid)
+        {
+            PVMSVGA3DSHADER pShader = &pContext->paVertexShader[shid];
+            Assert(type == pShader->type);
+
+            rc = ShaderSetVertexShader(pContext->pShaderContext, pShader->u.pVertexShader);
+            AssertRCReturn(rc, rc);
+        }
+        else
+        if (shid == SVGA_ID_INVALID)
+        {
+            /* Unselect shader. */
+            rc = ShaderSetVertexShader(pContext->pShaderContext, NULL);
+            AssertRCReturn(rc, rc);
+        }
+        else
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+    else
+    {
+        /* Save for vm state save/restore. */
+        pContext->state.shidPixel = shid;
+        pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_PIXELSHADER;
+
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (    shid < pContext->cPixelShaders
+            &&  pContext->paPixelShader[shid].id == shid)
+        {
+            PVMSVGA3DSHADER pShader = &pContext->paPixelShader[shid];
+            Assert(type == pShader->type);
+
+            rc = ShaderSetPixelShader(pContext->pShaderContext, pShader->u.pPixelShader);
+            AssertRCReturn(rc, rc);
+        }
+        else
+        if (shid == SVGA_ID_INVALID)
+        {
+            /* Unselect shader. */
+            rc = ShaderSetPixelShader(pContext->pShaderContext, NULL);
+            AssertRCReturn(rc, rc);
+        }
+        else
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    int                   rc;
+
+    Log(("vmsvga3dShaderSetConst cid=%x reg=%x type=%s cregs=%d ctype=%x\n", cid, reg, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cRegisters, ctype));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderSetConst invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+    for (uint32_t i = 0; i < cRegisters; i++)
+    {
+#ifdef LOG_ENABLED
+        switch (ctype)
+        {
+            case SVGA3D_CONST_TYPE_FLOAT:
+            {
+                float *pValuesF = (float *)pValues;
+                Log(("Constant %d: value=%d-%d-%d-%d\n", reg + i, (int)(pValuesF[i*4 + 0] * 100.0), (int)(pValuesF[i*4 + 1] * 100.0), (int)(pValuesF[i*4 + 2] * 100.0), (int)(pValuesF[i*4 + 3] * 100.0)));
+                break;
+            }
+
+            case SVGA3D_CONST_TYPE_INT:
+                Log(("Constant %d: value=%x-%x-%x-%x\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+                break;
+
+            case SVGA3D_CONST_TYPE_BOOL:
+                Log(("Constant %d: value=%x-%x-%x-%x\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+                break;
+        }
+#endif
+        vmsvga3dSaveShaderConst(pContext, reg + i, type, ctype, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]);
+    }
+
+    switch (type)
+    {
+    case SVGA3D_SHADERTYPE_VS:
+        switch (ctype)
+        {
+        case SVGA3D_CONST_TYPE_FLOAT:
+            rc = ShaderSetVertexShaderConstantF(pContext->pShaderContext, reg, (const float *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_INT:
+            rc = ShaderSetVertexShaderConstantI(pContext->pShaderContext, reg, (const int32_t *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_BOOL:
+            rc = ShaderSetVertexShaderConstantB(pContext->pShaderContext, reg, (const uint8_t *)pValues, cRegisters);
+            break;
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        AssertRCReturn(rc, rc);
+        break;
+
+    case SVGA3D_SHADERTYPE_PS:
+        switch (ctype)
+        {
+        case SVGA3D_CONST_TYPE_FLOAT:
+            rc = ShaderSetPixelShaderConstantF(pContext->pShaderContext, reg, (const float *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_INT:
+            rc = ShaderSetPixelShaderConstantI(pContext->pShaderContext, reg, (const int32_t *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_BOOL:
+            rc = ShaderSetPixelShaderConstantB(pContext->pShaderContext, reg, (const uint8_t *)pValues, cRegisters);
+            break;
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        AssertRCReturn(rc, rc);
+        break;
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    return VINF_SUCCESS;
+}
+
+
+int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type)
+{
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+{
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+{
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
new file mode 100644
index 0000000..0cc60c9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
@@ -0,0 +1,1120 @@
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#include <iprt/mem.h>
+#include <iprt/avl.h>
+
+#include <VBox/VMMDev.h>
+#include <VBox/VBoxVideo.h>
+#include <VBox/bioslogo.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "vmsvga/svga_reg.h"
+#include "vmsvga/svga3d_reg.h"
+#include "vmsvga/svga3d_shaderdefs.h"
+
+
+#ifdef RT_OS_WINDOWS
+/*******************************************************************************
+*   Structures and Typedefs                                                    *
+*******************************************************************************/
+#define     VMSVGA3D_WNDCLASSNAME       "VMSVGA3DWNDCLS"
+
+static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+#endif
+
+#ifdef RT_OS_WINDOWS
+/**
+ * Send a message to the async window thread and wait for a reply
+ *
+ * @returns VBox status code.
+ * @param   pWindowThread   Thread handle
+ * @param   WndRequestSem   Semaphore handle for waiting
+ * @param   msg             Message id
+ * @param   wParam          First parameter
+ * @param   lParam          Second parameter
+ */
+int vmsvga3dSendThreadMessage(RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+    int  rc;
+    BOOL ret;
+
+    ret = PostThreadMessage(RTThreadGetNative(pWindowThread), msg, wParam, lParam);
+    AssertMsgReturn(ret, ("PostThreadMessage %x failed with %d\n", RTThreadGetNative(pWindowThread), GetLastError()), VERR_INTERNAL_ERROR);
+
+    rc = RTSemEventWait(WndRequestSem, RT_INDEFINITE_WAIT);
+    Assert(RT_SUCCESS(rc));
+
+    return rc;
+}
+
+/**
+ * The async window handling thread
+ *
+ * @returns VBox status code.
+ * @param   pDevIns     The VGA device instance.
+ * @param   pThread     The send thread.
+ */
+DECLCALLBACK(int) vmsvga3dWindowThread(RTTHREAD ThreadSelf, void *pvUser)
+{
+    RTSEMEVENT      WndRequestSem = (RTSEMEVENT)pvUser;
+    WNDCLASSEX      wc;
+
+    /* Register our own window class. */
+    wc.cbSize           = sizeof(wc);
+    wc.style            = CS_OWNDC;
+    wc.lpfnWndProc      = (WNDPROC) vmsvga3dWndProc;
+    wc.cbClsExtra       = 0;
+    wc.cbWndExtra       = 0;
+    wc.hInstance        = GetModuleHandle("VBoxDD.dll");    /* @todo hardcoded name.. */
+    wc.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
+    wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
+    wc.hbrBackground    = NULL;
+    wc.lpszMenuName     = NULL;
+    wc.lpszClassName    = VMSVGA3D_WNDCLASSNAME;
+    wc.hIconSm          = NULL;
+
+    if (!RegisterClassEx(&wc))
+    {
+        Log(("RegisterClass failed with %x\n", GetLastError()));
+        return VERR_INTERNAL_ERROR;
+    }
+
+    LogFlow(("vmsvga3dWindowThread: started loop\n"));
+    while (true)
+    {
+        MSG msg;
+
+        if (GetMessage(&msg, 0, 0, 0))
+        {
+            if (msg.message == WM_VMSVGA3D_EXIT)
+            {
+                /* Signal to the caller that we're done. */
+                RTSemEventSignal(WndRequestSem);
+                break;
+            }
+
+            if (msg.message == WM_VMSVGA3D_WAKEUP)
+            {
+                continue;
+            }
+            if (msg.message == WM_VMSVGA3D_CREATEWINDOW)
+            {
+                HWND          *pHwnd = (HWND *)msg.wParam;
+                LPCREATESTRUCT pCS = (LPCREATESTRUCT) msg.lParam;
+
+#ifdef DEBUG_GFX_WINDOW
+                RECT rectClient;
+
+                rectClient.left     = 0;
+                rectClient.top      = 0;
+                rectClient.right    = pCS->cx;
+                rectClient.bottom   = pCS->cy;
+                AdjustWindowRectEx(&rectClient, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE | WS_CAPTION, FALSE, WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT);
+                pCS->cx = rectClient.right - rectClient.left;
+                pCS->cy = rectClient.bottom - rectClient.top;
+#endif
+                *pHwnd = CreateWindowEx(pCS->dwExStyle, 
+                                        VMSVGA3D_WNDCLASSNAME, 
+                                        pCS->lpszName, 
+                                        pCS->style,
+#ifdef DEBUG_GFX_WINDOW
+                                        0,
+                                        0,
+#else
+                                        pCS->x, 
+                                        pCS->y, 
+#endif
+                                        pCS->cx, 
+                                        pCS->cy,
+#ifdef DEBUG_GFX_WINDOW
+                                        0,
+#else
+                                        pCS->hwndParent, 
+#endif
+                                        pCS->hMenu, 
+                                        pCS->hInstance, 
+                                        NULL);
+                AssertMsg(*pHwnd, ("CreateWindowEx %x %s %s %x (%d,%d)(%d,%d), %x %x %x error=%x\n", pCS->dwExStyle, pCS->lpszName, VMSVGA3D_WNDCLASSNAME, pCS->style, pCS->x, 
+                                    pCS->y, pCS->cx, pCS->cy,pCS->hwndParent, pCS->hMenu, pCS->hInstance, GetLastError()));
+
+                /* Signal to the caller that we're done. */
+                RTSemEventSignal(WndRequestSem);
+                continue;
+            }
+            else
+            if (msg.message == WM_VMSVGA3D_DESTROYWINDOW)
+            {
+                BOOL ret = DestroyWindow((HWND)msg.wParam);
+                Assert(ret);
+                /* Signal to the caller that we're done. */
+                RTSemEventSignal(WndRequestSem);
+                continue;
+            }
+            else
+            if (msg.message == WM_VMSVGA3D_RESIZEWINDOW)
+            {
+                HWND hwnd = (HWND)msg.wParam;
+                LPCREATESTRUCT pCS = (LPCREATESTRUCT) msg.lParam;
+
+#ifdef DEBUG_GFX_WINDOW
+                RECT rectClient;
+
+                rectClient.left     = 0;
+                rectClient.top      = 0;
+                rectClient.right    = pCS->cx;
+                rectClient.bottom   = pCS->cy;
+                AdjustWindowRectEx(&rectClient, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE | WS_CAPTION, FALSE, WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT);
+                pCS->cx = rectClient.right - rectClient.left;
+                pCS->cy = rectClient.bottom - rectClient.top;
+#endif
+                BOOL ret = SetWindowPos(hwnd, 0, pCS->x, pCS->y, pCS->cx, pCS->cy, SWP_NOZORDER | SWP_NOMOVE);
+                Assert(ret);
+
+                /* Signal to the caller that we're done. */
+                RTSemEventSignal(WndRequestSem);
+                continue;
+            }
+
+            TranslateMessage(&msg);
+            DispatchMessage(&msg);
+        }
+        else
+        {
+            Log(("GetMessage failed with %x\n", GetLastError()));
+            break;
+        }
+    }
+
+    Log(("vmsvga3dWindowThread: end loop\n"));
+    return VINF_SUCCESS;
+}
+
+/* Window procedure for our top level window overlays. */
+static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+    switch (uMsg)
+    {
+        case WM_CLOSE:
+            break;
+
+        case WM_DESTROY:
+            break;
+
+        case WM_NCHITTEST:
+            return HTNOWHERE;
+    }
+    return DefWindowProc(hwnd, uMsg, wParam, lParam);
+}
+#endif /* RT_OS_WINDOWS */
+
+/**
+ * Calculate the size of one pixel
+ */
+uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format)
+{
+    switch (format)
+    {
+    case SVGA3D_X8R8G8B8:
+    case SVGA3D_A8R8G8B8:
+        return 4;
+
+    case SVGA3D_R5G6B5:
+    case SVGA3D_X1R5G5B5:
+    case SVGA3D_A1R5G5B5:
+    case SVGA3D_A4R4G4B4:
+        return 2;
+
+    case SVGA3D_Z_D32:
+    case SVGA3D_Z_D24S8:
+    case SVGA3D_Z_D24X8:
+    case SVGA3D_Z_DF24:
+    case SVGA3D_Z_D24S8_INT:
+        return 4;
+
+    case SVGA3D_Z_D16:
+    case SVGA3D_Z_DF16:
+    case SVGA3D_Z_D15S1:
+        return 2;
+
+    case SVGA3D_LUMINANCE8:
+    case SVGA3D_LUMINANCE4_ALPHA4:
+        return 1;
+
+    case SVGA3D_LUMINANCE16:
+    case SVGA3D_LUMINANCE8_ALPHA8:
+        return 2;
+
+    case SVGA3D_DXT1:
+    case SVGA3D_DXT2:
+        return 8;
+
+    case SVGA3D_DXT3:
+    case SVGA3D_DXT4:
+    case SVGA3D_DXT5:
+        return 16;
+
+    case SVGA3D_BUMPU8V8:
+    case SVGA3D_BUMPL6V5U5:
+        return 2;
+
+    case SVGA3D_BUMPX8L8V8U8:
+    case SVGA3D_Q8W8V8U8:
+        return 4;
+
+    case SVGA3D_V8U8:
+    case SVGA3D_CxV8U8:
+        return 2;
+
+    case SVGA3D_X8L8V8U8:
+    case SVGA3D_A2W10V10U10:
+        return 4;
+
+    case SVGA3D_ARGB_S10E5:   /* 16-bit floating-point ARGB */
+        return 2;
+    case SVGA3D_ARGB_S23E8:   /* 32-bit floating-point ARGB */
+        return 4;
+
+    case SVGA3D_A2R10G10B10:
+        return 4;
+
+    case SVGA3D_ALPHA8:
+        return 1;
+
+    case SVGA3D_R_S10E5:
+        return 2;
+
+    case SVGA3D_R_S23E8:
+    case SVGA3D_RG_S10E5:
+        return 4;
+
+    case SVGA3D_RG_S23E8:
+        return 8;
+
+    /*
+     * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+     * the most efficient format to use when creating new surfaces
+     * expressly for index or vertex data.
+     */
+    case SVGA3D_BUFFER:
+        return 1;
+
+    case SVGA3D_V16U16:
+        return 4;
+
+    case SVGA3D_G16R16:
+        return 32;
+    case SVGA3D_A16B16G16R16:
+        return 8;
+    }
+    AssertFailedReturn(4);
+}
+
+#ifdef LOG_ENABLED
+const char *vmsvga3dGetCapString(uint32_t idxCap)
+{
+    switch (idxCap)
+    {
+    case SVGA3D_DEVCAP_3D:
+        return "SVGA3D_DEVCAP_3D";
+    case SVGA3D_DEVCAP_MAX_LIGHTS:
+        return "SVGA3D_DEVCAP_MAX_LIGHTS";
+    case SVGA3D_DEVCAP_MAX_TEXTURES:
+        return "SVGA3D_DEVCAP_MAX_TEXTURES";
+    case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+        return "SVGA3D_DEVCAP_MAX_CLIP_PLANES";
+    case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+        return "SVGA3D_DEVCAP_VERTEX_SHADER_VERSION";
+    case SVGA3D_DEVCAP_VERTEX_SHADER:
+        return "SVGA3D_DEVCAP_VERTEX_SHADER";
+    case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+        return "SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION";
+    case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+        return "SVGA3D_DEVCAP_FRAGMENT_SHADER";
+    case SVGA3D_DEVCAP_MAX_RENDER_TARGETS:
+        return "SVGA3D_DEVCAP_MAX_RENDER_TARGETS";
+    case SVGA3D_DEVCAP_S23E8_TEXTURES:
+        return "SVGA3D_DEVCAP_S23E8_TEXTURES";
+    case SVGA3D_DEVCAP_S10E5_TEXTURES:
+        return "SVGA3D_DEVCAP_S10E5_TEXTURES";
+    case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+        return "SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND";
+    case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+        return "SVGA3D_DEVCAP_D16_BUFFER_FORMAT";
+    case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+        return "SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT";
+    case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+        return "SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT";
+    case SVGA3D_DEVCAP_QUERY_TYPES:
+        return "SVGA3D_DEVCAP_QUERY_TYPES";
+    case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+        return "SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING";
+    case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+        return "SVGA3D_DEVCAP_MAX_POINT_SIZE";
+    case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+        return "SVGA3D_DEVCAP_MAX_SHADER_TEXTURES";
+    case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+        return "SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH";
+    case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+        return "SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT";
+    case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+        return "SVGA3D_DEVCAP_MAX_VOLUME_EXTENT";
+    case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+        return "SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT";
+    case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+        return "SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO";
+    case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+        return "SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY";
+    case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+        return "SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT";
+    case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+        return "SVGA3D_DEVCAP_MAX_VERTEX_INDEX";
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+        return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS";
+    case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+        return "SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS";
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+        return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS";
+    case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+        return "SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS";
+    case SVGA3D_DEVCAP_TEXTURE_OPS:
+        return "SVGA3D_DEVCAP_TEXTURE_OPS";
+    case SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES:
+        return "SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES";
+    case SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES:
+        return "SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES";
+    case SVGA3D_DEVCAP_ALPHATOCOVERAGE:
+        return "SVGA3D_DEVCAP_ALPHATOCOVERAGE";
+    case SVGA3D_DEVCAP_SUPERSAMPLE:
+        return "SVGA3D_DEVCAP_SUPERSAMPLE";
+    case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+        return "SVGA3D_DEVCAP_AUTOGENMIPMAPS";
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+        return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES";
+    case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+        return "SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS";
+    case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+        return "SVGA3D_DEVCAP_MAX_CONTEXT_IDS";
+    case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+        return "SVGA3D_DEVCAP_MAX_SURFACE_IDS";
+    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8";
+    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8";
+    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+        return "SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10";
+    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5";
+    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5";
+    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+        return "SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4";
+    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_R5G6B5";
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+        return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16";
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8";
+    case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_ALPHA8";
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8";
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Z_D16";
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8";
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8";
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Z_DF16";
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Z_DF24";
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT";
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+        return "SVGA3D_DEVCAP_SURFACEFMT_DXT1";
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+        return "SVGA3D_DEVCAP_SURFACEFMT_DXT2";
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+        return "SVGA3D_DEVCAP_SURFACEFMT_DXT3";
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+        return "SVGA3D_DEVCAP_SURFACEFMT_DXT4";
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_DXT5";
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8";
+    case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+        return "SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10";
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8";
+    case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8";
+    case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_CxV8U8";
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_R_S10E5";
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_R_S23E8";
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5";
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8";
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+        return "SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5";
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+        return "SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8";
+    case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+        return "SVGA3D_DEVCAP_SURFACEFMT_V16U16";
+    case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+        return "SVGA3D_DEVCAP_SURFACEFMT_G16R16";
+    case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+        return "SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16";
+    case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+        return "SVGA3D_DEVCAP_SURFACEFMT_UYVY";
+    case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+        return "SVGA3D_DEVCAP_SURFACEFMT_YUY2";
+    case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+        return "SVGA3D_DEVCAP_SURFACEFMT_NV12";
+    case SVGA3D_DEVCAP_SURFACEFMT_AYUV:
+        return "SVGA3D_DEVCAP_SURFACEFMT_AYUV";
+    case SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM:
+        return "SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM";
+    case SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM:
+        return "SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM";
+    default:
+        return "UNEXPECTED";
+    }
+}
+
+const char *vmsvga3dGet3dFormatString(uint32_t format)
+{
+    static char szFormat[1024];
+
+    szFormat[0] = 0;
+
+    if (format & SVGA3DFORMAT_OP_TEXTURE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_TEXTURE\n");
+    if (format & SVGA3DFORMAT_OP_VOLUMETEXTURE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_VOLUMETEXTURE\n");
+    if (format & SVGA3DFORMAT_OP_CUBETEXTURE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_CUBETEXTURE\n");
+    if (format & SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET\n");
+    if (format & SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET\n");
+    if (format & SVGA3DFORMAT_OP_ZSTENCIL)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_ZSTENCIL\n");
+    if (format & SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH\n");
+    if (format & SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET\n");
+    if (format & SVGA3DFORMAT_OP_DISPLAYMODE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_DISPLAYMODE\n");
+    if (format & SVGA3DFORMAT_OP_3DACCELERATION)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_3DACCELERATION\n");
+    if (format & SVGA3DFORMAT_OP_PIXELSIZE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_PIXELSIZE\n");
+    if (format & SVGA3DFORMAT_OP_CONVERT_TO_ARGB)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_CONVERT_TO_ARGB\n");
+    if (format & SVGA3DFORMAT_OP_OFFSCREENPLAIN)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_OFFSCREENPLAIN\n");
+    if (format & SVGA3DFORMAT_OP_SRGBREAD)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_SRGBREAD\n");
+    if (format & SVGA3DFORMAT_OP_BUMPMAP)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_BUMPMAP\n");
+    if (format & SVGA3DFORMAT_OP_DMAP)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_DMAP\n");
+    if (format & SVGA3DFORMAT_OP_NOFILTER)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_NOFILTER\n");
+    if (format & SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB\n");
+    if (format & SVGA3DFORMAT_OP_SRGBWRITE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_SRGBWRITE\n");
+    if (format & SVGA3DFORMAT_OP_NOALPHABLEND)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_NOALPHABLEND\n");
+    if (format & SVGA3DFORMAT_OP_AUTOGENMIPMAP)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_AUTOGENMIPMAP\n");
+    if (format & SVGA3DFORMAT_OP_VERTEXTEXTURE)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_VERTEXTEXTURE\n");
+    if (format & SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP)
+        strcat(szFormat, "   - SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP\n");
+   return szFormat;
+}
+
+const char *vmsvga3dGetRenderStateName(uint32_t state)
+{
+    switch (state)
+    {
+    case SVGA3D_RS_ZENABLE:                /* SVGA3dBool */            
+        return "SVGA3D_RS_ZENABLE";
+    case SVGA3D_RS_ZWRITEENABLE:           /* SVGA3dBool */
+        return "SVGA3D_RS_ZWRITEENABLE";
+    case SVGA3D_RS_ALPHATESTENABLE:        /* SVGA3dBool */
+        return "SVGA3D_RS_ALPHATESTENABLE";
+    case SVGA3D_RS_DITHERENABLE:           /* SVGA3dBool */
+        return "SVGA3D_RS_DITHERENABLE";
+    case SVGA3D_RS_BLENDENABLE:            /* SVGA3dBool */
+        return "SVGA3D_RS_BLENDENABLE";
+    case SVGA3D_RS_FOGENABLE:              /* SVGA3dBool */
+        return "SVGA3D_RS_FOGENABLE";
+    case SVGA3D_RS_SPECULARENABLE:         /* SVGA3dBool */
+        return "SVGA3D_RS_SPECULARENABLE";
+    case SVGA3D_RS_STENCILENABLE:          /* SVGA3dBool */
+        return "SVGA3D_RS_STENCILENABLE";
+    case SVGA3D_RS_LIGHTINGENABLE:         /* SVGA3dBool */
+        return "SVGA3D_RS_LIGHTINGENABLE";
+    case SVGA3D_RS_NORMALIZENORMALS:       /* SVGA3dBool */
+        return "SVGA3D_RS_NORMALIZENORMALS";
+    case SVGA3D_RS_POINTSPRITEENABLE:      /* SVGA3dBool */
+        return "SVGA3D_RS_POINTSPRITEENABLE";
+    case SVGA3D_RS_POINTSCALEENABLE:       /* SVGA3dBool */
+        return "SVGA3D_RS_POINTSCALEENABLE";
+    case SVGA3D_RS_STENCILREF:             /* uint32_t */
+        return "SVGA3D_RS_STENCILREF";
+    case SVGA3D_RS_STENCILMASK:            /* uint32_t */
+        return "SVGA3D_RS_STENCILMASK";
+    case SVGA3D_RS_STENCILWRITEMASK:       /* uint32_t */
+        return "SVGA3D_RS_STENCILWRITEMASK";
+    case SVGA3D_RS_POINTSIZE:              /* float */
+        return "SVGA3D_RS_POINTSIZE";
+    case SVGA3D_RS_POINTSIZEMIN:           /* float */
+        return "SVGA3D_RS_POINTSIZEMIN";
+    case SVGA3D_RS_POINTSIZEMAX:           /* float */
+        return "SVGA3D_RS_POINTSIZEMAX";
+    case SVGA3D_RS_POINTSCALE_A:           /* float */
+        return "SVGA3D_RS_POINTSCALE_A";
+    case SVGA3D_RS_POINTSCALE_B:           /* float */
+        return "SVGA3D_RS_POINTSCALE_B";
+    case SVGA3D_RS_POINTSCALE_C:           /* float */
+        return "SVGA3D_RS_POINTSCALE_C";
+    case SVGA3D_RS_AMBIENT:                /* SVGA3dColor - identical */
+        return "SVGA3D_RS_AMBIENT";
+    case SVGA3D_RS_CLIPPLANEENABLE:        /* SVGA3dClipPlanes - identical */
+        return "SVGA3D_RS_CLIPPLANEENABLE";
+    case SVGA3D_RS_FOGCOLOR:               /* SVGA3dColor - identical */
+        return "SVGA3D_RS_FOGCOLOR";
+    case SVGA3D_RS_FOGSTART:               /* float */
+        return "SVGA3D_RS_FOGSTART";
+    case SVGA3D_RS_FOGEND:                 /* float */
+        return "SVGA3D_RS_FOGEND";
+    case SVGA3D_RS_FOGDENSITY:             /* float */
+        return "SVGA3D_RS_FOGDENSITY";
+    case SVGA3D_RS_RANGEFOGENABLE:         /* SVGA3dBool */
+        return "SVGA3D_RS_RANGEFOGENABLE";
+    case SVGA3D_RS_FOGMODE:                /* SVGA3dFogMode */
+        return "SVGA3D_RS_FOGMODE";
+    case SVGA3D_RS_FILLMODE:               /* SVGA3dFillMode */
+        return "SVGA3D_RS_FILLMODE";
+    case SVGA3D_RS_SHADEMODE:              /* SVGA3dShadeMode */
+        return "SVGA3D_RS_SHADEMODE";
+    case SVGA3D_RS_LINEPATTERN:            /* SVGA3dLinePattern */
+        return "SVGA3D_RS_LINEPATTERN";
+    case SVGA3D_RS_SRCBLEND:               /* SVGA3dBlendOp */
+        return "SVGA3D_RS_SRCBLEND";
+    case SVGA3D_RS_DSTBLEND:               /* SVGA3dBlendOp */
+        return "SVGA3D_RS_DSTBLEND";
+    case SVGA3D_RS_BLENDEQUATION:          /* SVGA3dBlendEquation */
+        return "SVGA3D_RS_BLENDEQUATION";
+    case SVGA3D_RS_CULLMODE:               /* SVGA3dFace */
+        return "SVGA3D_RS_CULLMODE";
+    case SVGA3D_RS_ZFUNC:                  /* SVGA3dCmpFunc */
+        return "SVGA3D_RS_ZFUNC";
+    case SVGA3D_RS_ALPHAFUNC:              /* SVGA3dCmpFunc */
+        return "SVGA3D_RS_ALPHAFUNC";
+    case SVGA3D_RS_STENCILFUNC:            /* SVGA3dCmpFunc */
+        return "SVGA3D_RS_STENCILFUNC";
+    case SVGA3D_RS_STENCILFAIL:            /* SVGA3dStencilOp */
+        return "SVGA3D_RS_STENCILFAIL";
+    case SVGA3D_RS_STENCILZFAIL:           /* SVGA3dStencilOp */
+        return "SVGA3D_RS_STENCILZFAIL";
+    case SVGA3D_RS_STENCILPASS:            /* SVGA3dStencilOp */
+        return "SVGA3D_RS_STENCILPASS";
+    case SVGA3D_RS_ALPHAREF:               /* float (0.0 .. 1.0) */
+        return "SVGA3D_RS_ALPHAREF";
+    case SVGA3D_RS_FRONTWINDING:           /* SVGA3dFrontWinding */
+        return "SVGA3D_RS_FRONTWINDING";
+    case SVGA3D_RS_COORDINATETYPE:         /* SVGA3dCoordinateType */
+        return "SVGA3D_RS_COORDINATETYPE";
+    case SVGA3D_RS_ZBIAS:                  /* float */
+        return "SVGA3D_RS_ZBIAS";
+    case SVGA3D_RS_COLORWRITEENABLE:       /* SVGA3dColorMask */
+        return "SVGA3D_RS_COLORWRITEENABLE";
+    case SVGA3D_RS_VERTEXMATERIALENABLE:   /* SVGA3dBool */
+        return "SVGA3D_RS_VERTEXMATERIALENABLE";
+    case SVGA3D_RS_DIFFUSEMATERIALSOURCE:  /* SVGA3dVertexMaterial */
+        return "SVGA3D_RS_DIFFUSEMATERIALSOURCE";
+    case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial */
+        return "SVGA3D_RS_SPECULARMATERIALSOURCE";
+    case SVGA3D_RS_AMBIENTMATERIALSOURCE:  /* SVGA3dVertexMaterial */
+        return "SVGA3D_RS_AMBIENTMATERIALSOURCE";
+    case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial */
+        return "SVGA3D_RS_EMISSIVEMATERIALSOURCE";
+    case SVGA3D_RS_TEXTUREFACTOR:          /* SVGA3dColor */
+        return "SVGA3D_RS_TEXTUREFACTOR";
+    case SVGA3D_RS_LOCALVIEWER:            /* SVGA3dBool */
+        return "SVGA3D_RS_LOCALVIEWER";
+    case SVGA3D_RS_SCISSORTESTENABLE:      /* SVGA3dBool */
+        return "SVGA3D_RS_SCISSORTESTENABLE";
+    case SVGA3D_RS_BLENDCOLOR:             /* SVGA3dColor */
+        return "SVGA3D_RS_BLENDCOLOR";
+    case SVGA3D_RS_STENCILENABLE2SIDED:    /* SVGA3dBool */
+        return "SVGA3D_RS_STENCILENABLE2SIDED";
+    case SVGA3D_RS_CCWSTENCILFUNC:         /* SVGA3dCmpFunc */
+        return "SVGA3D_RS_CCWSTENCILFUNC";
+    case SVGA3D_RS_CCWSTENCILFAIL:         /* SVGA3dStencilOp */
+        return "SVGA3D_RS_CCWSTENCILFAIL";
+    case SVGA3D_RS_CCWSTENCILZFAIL:        /* SVGA3dStencilOp */
+        return "SVGA3D_RS_CCWSTENCILZFAIL";
+    case SVGA3D_RS_CCWSTENCILPASS:         /* SVGA3dStencilOp */
+        return "SVGA3D_RS_CCWSTENCILPASS";
+    case SVGA3D_RS_VERTEXBLEND:            /* SVGA3dVertexBlendFlags */
+        return "SVGA3D_RS_VERTEXBLEND";
+    case SVGA3D_RS_SLOPESCALEDEPTHBIAS:    /* float */
+        return "SVGA3D_RS_SLOPESCALEDEPTHBIAS";
+    case SVGA3D_RS_DEPTHBIAS:              /* float */
+        return "SVGA3D_RS_DEPTHBIAS";
+    case SVGA3D_RS_OUTPUTGAMMA:            /* float */
+        return "SVGA3D_RS_OUTPUTGAMMA";
+    case SVGA3D_RS_ZVISIBLE:               /* SVGA3dBool */
+        return "SVGA3D_RS_ZVISIBLE";
+    case SVGA3D_RS_LASTPIXEL:              /* SVGA3dBool */
+        return "SVGA3D_RS_LASTPIXEL";
+    case SVGA3D_RS_CLIPPING:               /* SVGA3dBool */
+        return "SVGA3D_RS_CLIPPING";
+    case SVGA3D_RS_WRAP0:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP0";
+    case SVGA3D_RS_WRAP1:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP1";
+    case SVGA3D_RS_WRAP2:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP2";
+    case SVGA3D_RS_WRAP3:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP3";
+    case SVGA3D_RS_WRAP4:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP4";
+    case SVGA3D_RS_WRAP5:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP5";
+    case SVGA3D_RS_WRAP6:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP6";
+    case SVGA3D_RS_WRAP7:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP7";
+    case SVGA3D_RS_WRAP8:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP8";
+    case SVGA3D_RS_WRAP9:                  /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP9";
+    case SVGA3D_RS_WRAP10:                 /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP10";
+    case SVGA3D_RS_WRAP11:                 /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP11";
+    case SVGA3D_RS_WRAP12:                 /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP12";
+    case SVGA3D_RS_WRAP13:                 /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP13";
+    case SVGA3D_RS_WRAP14:                 /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP14";
+    case SVGA3D_RS_WRAP15:                 /* SVGA3dWrapFlags */
+        return "SVGA3D_RS_WRAP15";
+    case SVGA3D_RS_MULTISAMPLEANTIALIAS:   /* SVGA3dBool */
+        return "SVGA3D_RS_MULTISAMPLEANTIALIAS";
+    case SVGA3D_RS_MULTISAMPLEMASK:        /* uint32_t */
+        return "SVGA3D_RS_MULTISAMPLEMASK";
+    case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
+        return "SVGA3D_RS_INDEXEDVERTEXBLENDENABLE";
+    case SVGA3D_RS_TWEENFACTOR:            /* float */
+        return "SVGA3D_RS_TWEENFACTOR";
+    case SVGA3D_RS_ANTIALIASEDLINEENABLE:  /* SVGA3dBool */
+        return "SVGA3D_RS_ANTIALIASEDLINEENABLE";
+    case SVGA3D_RS_COLORWRITEENABLE1:      /* SVGA3dColorMask */
+        return "SVGA3D_RS_COLORWRITEENABLE1";
+    case SVGA3D_RS_COLORWRITEENABLE2:      /* SVGA3dColorMask */
+        return "SVGA3D_RS_COLORWRITEENABLE2";
+    case SVGA3D_RS_COLORWRITEENABLE3:      /* SVGA3dColorMask */
+        return "SVGA3D_RS_COLORWRITEENABLE3";
+    case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+        return "SVGA3D_RS_SEPARATEALPHABLENDENABLE";
+    case SVGA3D_RS_SRCBLENDALPHA:          /* SVGA3dBlendOp */
+        return "SVGA3D_RS_SRCBLENDALPHA";
+    case SVGA3D_RS_DSTBLENDALPHA:          /* SVGA3dBlendOp */
+        return "SVGA3D_RS_DSTBLENDALPHA";
+    case SVGA3D_RS_BLENDEQUATIONALPHA:     /* SVGA3dBlendEquation */
+        return "SVGA3D_RS_BLENDEQUATIONALPHA";
+    case SVGA3D_RS_TRANSPARENCYANTIALIAS:  /* SVGA3dTransparencyAntialiasType */
+        return "SVGA3D_RS_TRANSPARENCYANTIALIAS";
+    case SVGA3D_RS_LINEAA:                 /* SVGA3dBool */
+        return "SVGA3D_RS_LINEAA";
+    case SVGA3D_RS_LINEWIDTH:              /* float */
+        return "SVGA3D_RS_LINEWIDTH";
+    default:
+        return "UNKNOWN";
+    }
+}
+
+const char *vmsvga3dTextureStateToString(SVGA3dTextureStateName textureState)
+{
+    switch (textureState)
+    {
+    case SVGA3D_TS_BIND_TEXTURE:
+        return "SVGA3D_TS_BIND_TEXTURE";
+    case SVGA3D_TS_COLOROP:
+        return "SVGA3D_TS_COLOROP";
+    case SVGA3D_TS_COLORARG1:
+        return "SVGA3D_TS_COLORARG1";
+    case SVGA3D_TS_COLORARG2:
+        return "SVGA3D_TS_COLORARG2";
+    case SVGA3D_TS_ALPHAOP:
+        return "SVGA3D_TS_ALPHAOP";
+    case SVGA3D_TS_ALPHAARG1:
+        return "SVGA3D_TS_ALPHAARG1";
+    case SVGA3D_TS_ALPHAARG2:
+        return "SVGA3D_TS_ALPHAARG2";
+    case SVGA3D_TS_ADDRESSU:
+        return "SVGA3D_TS_ADDRESSU";
+    case SVGA3D_TS_ADDRESSV:
+        return "SVGA3D_TS_ADDRESSV";
+    case SVGA3D_TS_MIPFILTER:
+        return "SVGA3D_TS_MIPFILTER";
+    case SVGA3D_TS_MAGFILTER:
+        return "SVGA3D_TS_MAGFILTER";
+    case SVGA3D_TS_MINFILTER:
+        return "SVGA3D_TS_MINFILTER";
+    case SVGA3D_TS_BORDERCOLOR:
+        return "SVGA3D_TS_BORDERCOLOR";
+    case SVGA3D_TS_TEXCOORDINDEX:
+        return "SVGA3D_TS_TEXCOORDINDEX";
+    case SVGA3D_TS_TEXTURETRANSFORMFLAGS:
+        return "SVGA3D_TS_TEXTURETRANSFORMFLAGS";
+    case SVGA3D_TS_TEXCOORDGEN:
+        return "SVGA3D_TS_TEXCOORDGEN";
+    case SVGA3D_TS_BUMPENVMAT00:
+        return "SVGA3D_TS_BUMPENVMAT00";
+    case SVGA3D_TS_BUMPENVMAT01:
+        return "SVGA3D_TS_BUMPENVMAT01";
+    case SVGA3D_TS_BUMPENVMAT10:
+        return "SVGA3D_TS_BUMPENVMAT10";
+    case SVGA3D_TS_BUMPENVMAT11:
+        return "SVGA3D_TS_BUMPENVMAT11";
+    case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:
+        return "SVGA3D_TS_TEXTURE_MIPMAP_LEVEL";
+    case SVGA3D_TS_TEXTURE_LOD_BIAS:
+        return "SVGA3D_TS_TEXTURE_LOD_BIAS";
+    case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL:
+        return "SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL";
+    case SVGA3D_TS_ADDRESSW:
+        return "SVGA3D_TS_ADDRESSW";
+    case SVGA3D_TS_GAMMA:
+        return "SVGA3D_TS_GAMMA";
+    case SVGA3D_TS_BUMPENVLSCALE:
+        return "SVGA3D_TS_BUMPENVLSCALE";
+    case SVGA3D_TS_BUMPENVLOFFSET:
+        return "SVGA3D_TS_BUMPENVLOFFSET";
+    case SVGA3D_TS_COLORARG0:
+        return "SVGA3D_TS_COLORARG0";
+    case SVGA3D_TS_ALPHAARG0:
+        return "SVGA3D_TS_ALPHAARG0";
+    default:
+        return "UNKNOWN";
+    }
+}
+
+const char *vmsvgaTransformToString(SVGA3dTransformType type)
+{
+    switch (type)
+    {
+    case SVGA3D_TRANSFORM_INVALID:
+        return "SVGA3D_TRANSFORM_INVALID";
+    case SVGA3D_TRANSFORM_WORLD:
+        return "SVGA3D_TRANSFORM_WORLD";
+    case SVGA3D_TRANSFORM_VIEW:
+        return "SVGA3D_TRANSFORM_VIEW";
+    case SVGA3D_TRANSFORM_PROJECTION:
+        return "SVGA3D_TRANSFORM_PROJECTION";
+    case SVGA3D_TRANSFORM_TEXTURE0:
+        return "SVGA3D_TRANSFORM_TEXTURE0";
+    case SVGA3D_TRANSFORM_TEXTURE1:
+        return "SVGA3D_TRANSFORM_TEXTURE1";
+    case SVGA3D_TRANSFORM_TEXTURE2:
+        return "SVGA3D_TRANSFORM_TEXTURE2";
+    case SVGA3D_TRANSFORM_TEXTURE3:
+        return "SVGA3D_TRANSFORM_TEXTURE3";
+    case SVGA3D_TRANSFORM_TEXTURE4:
+        return "SVGA3D_TRANSFORM_TEXTURE4";
+    case SVGA3D_TRANSFORM_TEXTURE5:
+        return "SVGA3D_TRANSFORM_TEXTURE5";
+    case SVGA3D_TRANSFORM_TEXTURE6:
+        return "SVGA3D_TRANSFORM_TEXTURE6";
+    case SVGA3D_TRANSFORM_TEXTURE7:
+        return "SVGA3D_TRANSFORM_TEXTURE7";
+    case SVGA3D_TRANSFORM_WORLD1:
+        return "SVGA3D_TRANSFORM_WORLD1";
+    case SVGA3D_TRANSFORM_WORLD2:
+        return "SVGA3D_TRANSFORM_WORLD2";
+    case SVGA3D_TRANSFORM_WORLD3:
+        return "SVGA3D_TRANSFORM_WORLD3";
+    default:
+        return "UNKNOWN";
+    }
+}
+
+const char *vmsvgaDeclUsage2String(SVGA3dDeclUsage usage)
+{
+    switch (usage)
+    {
+    case SVGA3D_DECLUSAGE_POSITION:
+        return "SVGA3D_DECLUSAGE_POSITION";
+    case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+        return "SVGA3D_DECLUSAGE_BLENDWEIGHT";
+    case SVGA3D_DECLUSAGE_BLENDINDICES:
+        return "SVGA3D_DECLUSAGE_BLENDINDICES";
+    case SVGA3D_DECLUSAGE_NORMAL:
+        return "SVGA3D_DECLUSAGE_NORMAL";
+    case SVGA3D_DECLUSAGE_PSIZE:
+        return "SVGA3D_DECLUSAGE_PSIZE";
+    case SVGA3D_DECLUSAGE_TEXCOORD:
+        return "SVGA3D_DECLUSAGE_TEXCOORD";
+    case SVGA3D_DECLUSAGE_TANGENT:
+        return "SVGA3D_DECLUSAGE_TANGENT";
+    case SVGA3D_DECLUSAGE_BINORMAL:
+        return "SVGA3D_DECLUSAGE_BINORMAL";
+    case SVGA3D_DECLUSAGE_TESSFACTOR:
+        return "SVGA3D_DECLUSAGE_TESSFACTOR";
+    case SVGA3D_DECLUSAGE_POSITIONT:
+        return "SVGA3D_DECLUSAGE_POSITIONT";
+    case SVGA3D_DECLUSAGE_COLOR:
+        return "SVGA3D_DECLUSAGE_COLOR";
+    case SVGA3D_DECLUSAGE_FOG:
+        return "SVGA3D_DECLUSAGE_FOG";
+    case SVGA3D_DECLUSAGE_DEPTH:
+        return "SVGA3D_DECLUSAGE_DEPTH";
+    case SVGA3D_DECLUSAGE_SAMPLE:
+        return "SVGA3D_DECLUSAGE_SAMPLE";
+    default:
+        return "UNKNOWN!!";
+    }
+}
+
+const char *vmsvgaDeclMethod2String(SVGA3dDeclMethod method)
+{
+    switch (method)
+    {
+    case SVGA3D_DECLMETHOD_DEFAULT:
+        return "SVGA3D_DECLMETHOD_DEFAULT";
+    case SVGA3D_DECLMETHOD_PARTIALU:
+        return "SVGA3D_DECLMETHOD_PARTIALU";
+    case SVGA3D_DECLMETHOD_PARTIALV:
+        return "SVGA3D_DECLMETHOD_PARTIALV";
+    case SVGA3D_DECLMETHOD_CROSSUV:
+        return "SVGA3D_DECLMETHOD_CROSSUV";
+    case SVGA3D_DECLMETHOD_UV:
+        return "SVGA3D_DECLMETHOD_UV";
+    case SVGA3D_DECLMETHOD_LOOKUP:
+        return "SVGA3D_DECLMETHOD_LOOKUP";
+    case SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED:
+        return "SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED";
+    default:
+        return "UNKNOWN!!";
+    }
+}
+
+const char *vmsvgaDeclType2String(SVGA3dDeclType type)
+{
+    switch (type)
+    {
+    case SVGA3D_DECLTYPE_FLOAT1:
+        return "SVGA3D_DECLTYPE_FLOAT1";
+    case SVGA3D_DECLTYPE_FLOAT2:
+        return "SVGA3D_DECLTYPE_FLOAT2";
+    case SVGA3D_DECLTYPE_FLOAT3:
+        return "SVGA3D_DECLTYPE_FLOAT3";
+    case SVGA3D_DECLTYPE_FLOAT4:
+        return "SVGA3D_DECLTYPE_FLOAT4";
+    case SVGA3D_DECLTYPE_D3DCOLOR:
+        return "SVGA3D_DECLTYPE_D3DCOLOR";
+    case SVGA3D_DECLTYPE_UBYTE4:
+        return "SVGA3D_DECLTYPE_UBYTE4";
+    case SVGA3D_DECLTYPE_SHORT2:
+        return "SVGA3D_DECLTYPE_SHORT2";
+    case SVGA3D_DECLTYPE_SHORT4:
+        return "SVGA3D_DECLTYPE_SHORT4";
+    case SVGA3D_DECLTYPE_UBYTE4N:
+        return "SVGA3D_DECLTYPE_UBYTE4N";
+    case SVGA3D_DECLTYPE_SHORT2N:
+        return "SVGA3D_DECLTYPE_SHORT2N";
+    case SVGA3D_DECLTYPE_SHORT4N:
+        return "SVGA3D_DECLTYPE_SHORT4N";
+    case SVGA3D_DECLTYPE_USHORT2N:
+        return "SVGA3D_DECLTYPE_USHORT2N";
+    case SVGA3D_DECLTYPE_USHORT4N:
+        return "SVGA3D_DECLTYPE_USHORT4N";
+    case SVGA3D_DECLTYPE_UDEC3:
+        return "SVGA3D_DECLTYPE_UDEC3";
+    case SVGA3D_DECLTYPE_DEC3N:
+        return "SVGA3D_DECLTYPE_DEC3N";
+    case SVGA3D_DECLTYPE_FLOAT16_2:
+        return "SVGA3D_DECLTYPE_FLOAT16_2";
+    case SVGA3D_DECLTYPE_FLOAT16_4:
+        return "SVGA3D_DECLTYPE_FLOAT16_4";
+    default:
+        return "UNKNOWN!!";
+    }
+}
+
+const char *vmsvgaSurfaceType2String(SVGA3dSurfaceFormat format)
+{
+    switch (format)
+    {
+    case SVGA3D_X8R8G8B8:
+        return "SVGA3D_X8R8G8B8";
+    case SVGA3D_A8R8G8B8:
+        return "SVGA3D_A8R8G8B8";
+    case SVGA3D_R5G6B5:
+        return "SVGA3D_R5G6B5";
+    case SVGA3D_X1R5G5B5:
+        return "SVGA3D_X1R5G5B5";
+    case SVGA3D_A1R5G5B5:
+        return "SVGA3D_A1R5G5B5";
+    case SVGA3D_A4R4G4B4:
+        return "SVGA3D_A4R4G4B4";
+    case SVGA3D_Z_D32:
+        return "SVGA3D_Z_D32";
+    case SVGA3D_Z_D16:
+        return "SVGA3D_Z_D16";
+    case SVGA3D_Z_D24S8:
+        return "SVGA3D_Z_D24S8";
+    case SVGA3D_Z_D15S1:
+        return "SVGA3D_Z_D15S1";
+    case SVGA3D_Z_D24X8:
+        return "SVGA3D_Z_D24X8";
+    case SVGA3D_Z_DF16:
+        return "SVGA3D_Z_DF16";
+    case SVGA3D_Z_DF24:
+        return "SVGA3D_Z_DF24";
+    case SVGA3D_Z_D24S8_INT:
+        return "SVGA3D_Z_D24S8_INT";
+    case SVGA3D_LUMINANCE8:
+        return "SVGA3D_LUMINANCE8";
+    case SVGA3D_LUMINANCE4_ALPHA4:
+        return "SVGA3D_LUMINANCE4_ALPHA4";
+    case SVGA3D_LUMINANCE16:
+        return "SVGA3D_LUMINANCE16";
+    case SVGA3D_LUMINANCE8_ALPHA8:
+        return "SVGA3D_LUMINANCE8_ALPHA8";
+    case SVGA3D_DXT1:
+        return "SVGA3D_DXT1";
+    case SVGA3D_DXT2:
+        return "SVGA3D_DXT2";
+    case SVGA3D_DXT3:
+        return "SVGA3D_DXT3";
+    case SVGA3D_DXT4:
+        return "SVGA3D_DXT4";
+    case SVGA3D_DXT5:
+        return "SVGA3D_DXT5";
+    case SVGA3D_BUMPU8V8:
+        return "SVGA3D_BUMPU8V8";
+    case SVGA3D_BUMPL6V5U5:
+        return "SVGA3D_BUMPL6V5U5";
+    case SVGA3D_BUMPX8L8V8U8:
+        return "SVGA3D_BUMPX8L8V8U8";
+    case SVGA3D_BUMPL8V8U8:
+        return "SVGA3D_BUMPL8V8U8";
+    case SVGA3D_V8U8:
+        return "SVGA3D_V8U8";
+    case SVGA3D_Q8W8V8U8:
+        return "SVGA3D_Q8W8V8U8";
+    case SVGA3D_CxV8U8:
+        return "SVGA3D_CxV8U8";
+    case SVGA3D_X8L8V8U8:
+        return "SVGA3D_X8L8V8U8";
+    case SVGA3D_A2W10V10U10:
+        return "SVGA3D_A2W10V10U10";
+    case SVGA3D_ARGB_S10E5:
+        return "SVGA3D_ARGB_S10E5";
+    case SVGA3D_ARGB_S23E8:
+        return "SVGA3D_ARGB_S23E8";
+    case SVGA3D_A2R10G10B10:
+        return "SVGA3D_A2R10G10B10";
+    case SVGA3D_ALPHA8:
+        return "SVGA3D_ALPHA8";
+    case SVGA3D_R_S10E5:
+        return "SVGA3D_R_S10E5";
+    case SVGA3D_R_S23E8:
+        return "SVGA3D_R_S23E8";
+    case SVGA3D_RG_S10E5:
+        return "SVGA3D_RG_S10E5";
+    case SVGA3D_RG_S23E8:
+        return "SVGA3D_RG_S23E8";
+    case SVGA3D_BUFFER:
+        return "SVGA3D_BUFFER";
+    case SVGA3D_V16U16:
+        return "SVGA3D_V16U16";
+    case SVGA3D_G16R16:
+        return "SVGA3D_G16R16";
+    case SVGA3D_A16B16G16R16:
+        return "SVGA3D_A16B16G16R16";
+    case SVGA3D_UYVY:
+        return "SVGA3D_UYVY";
+    case SVGA3D_YUY2:
+        return "SVGA3D_YUY2";
+    case SVGA3D_NV12:
+        return "SVGA3D_NV12";
+    case SVGA3D_AYUV:
+        return "SVGA3D_AYUV";
+    case SVGA3D_BC4_UNORM:
+        return "SVGA3D_BC4_UNORM";
+    case SVGA3D_BC5_UNORM:
+        return "SVGA3D_BC5_UNORM";
+    }
+    return "UNKNOWN!!";
+}
+
+const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType)
+{
+    switch (PrimitiveType)
+    {
+    case SVGA3D_PRIMITIVE_TRIANGLELIST:
+        return "SVGA3D_PRIMITIVE_TRIANGLELIST";
+    case SVGA3D_PRIMITIVE_POINTLIST:
+        return "SVGA3D_PRIMITIVE_POINTLIST";
+    case SVGA3D_PRIMITIVE_LINELIST:
+        return "SVGA3D_PRIMITIVE_LINELIST";
+    case SVGA3D_PRIMITIVE_LINESTRIP:
+        return "SVGA3D_PRIMITIVE_LINESTRIP";
+    case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+        return "SVGA3D_PRIMITIVE_TRIANGLESTRIP";
+    case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+        return "SVGA3D_PRIMITIVE_TRIANGLEFAN";
+    default:
+        return "UNKNOWN";
+    }
+}
+
+#endif /* LOG_ENABLED */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.h
new file mode 100644
index 0000000..8f59416
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.h
@@ -0,0 +1,800 @@
+/** @file
+ * VMware SVGA device -- 3D part
+ */
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef __DEVVMWARE3D_STATE_H__
+#define __DEVVMWARE3D_STATE_H__
+
+int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    int            rc;
+    uint32_t       cContexts, cSurfaces;
+
+    /* Must initialize now as the recreation calls below rely on an initialized 3d subsystem. */
+    vmsvga3dPowerOn(pThis);
+
+    /* Get the generic 3d state first. */
+    rc = SSMR3GetStructEx(pSSM, pState, sizeof(*pState), 0, g_aVMSVGA3DSTATEFields, NULL);
+    AssertRCReturn(rc, rc);
+
+    cContexts                           = pState->cContexts;
+    cSurfaces                           = pState->cSurfaces;
+    pState->cContexts                   = 0;
+    pState->cSurfaces                   = 0;
+
+    /* Fetch all active contexts. */
+    for (uint32_t i = 0; i < cContexts; i++)
+    {
+        PVMSVGA3DCONTEXT pContext;
+        uint32_t         cid;
+
+        /* Get the context id */
+        rc = SSMR3GetU32(pSSM, &cid);
+        AssertRCReturn(rc, rc);
+
+        if (cid != SVGA3D_INVALID_ID)
+        {
+            uint32_t cPixelShaderConst, cVertexShaderConst, cPixelShaders, cVertexShaders;
+
+            rc = vmsvga3dContextDefine(pThis, cid);
+            AssertRCReturn(rc, rc);
+
+            pContext = &pState->paContext[i];
+            AssertReturn(pContext->id == cid, VERR_INTERNAL_ERROR);
+
+            rc = SSMR3GetStructEx(pSSM, pContext, sizeof(*pContext), 0, g_aVMSVGA3DCONTEXTFields, NULL);
+            AssertRCReturn(rc, rc);
+
+            cPixelShaders                       = pContext->cPixelShaders;
+            cVertexShaders                      = pContext->cVertexShaders;
+            cPixelShaderConst                   = pContext->state.cPixelShaderConst;
+            cVertexShaderConst                  = pContext->state.cVertexShaderConst;
+            pContext->cPixelShaders             = 0;
+            pContext->cVertexShaders            = 0;
+            pContext->state.cPixelShaderConst   = 0;
+            pContext->state.cVertexShaderConst  = 0;
+
+            /* Fetch all pixel shaders. */
+            for (uint32_t j = 0; j < cPixelShaders; j++)
+            {
+                VMSVGA3DSHADER  shader;
+                uint32_t        shid;
+
+                /* Fetch the id first. */
+                rc = SSMR3GetU32(pSSM, &shid);
+                AssertRCReturn(rc, rc);
+
+                if (shid != SVGA3D_INVALID_ID)
+                {
+                    uint32_t *pData;
+
+                    /* Fetch a copy of the shader struct. */
+                    rc = SSMR3GetStructEx(pSSM, &shader, sizeof(shader), 0, g_aVMSVGA3DSHADERFields, NULL);
+                    AssertRCReturn(rc, rc);
+
+                    pData = (uint32_t *)RTMemAlloc(shader.cbData);
+                    AssertReturn(pData, VERR_NO_MEMORY);
+
+                    rc = SSMR3GetMem(pSSM, pData, shader.cbData);
+                    AssertRCReturn(rc, rc);
+
+                    rc = vmsvga3dShaderDefine(pThis, cid, shid, shader.type, shader.cbData, pData);
+                    AssertRCReturn(rc, rc);
+
+                    RTMemFree(pData);
+                }
+            }
+
+            /* Fetch all vertex shaders. */
+            for (uint32_t j = 0; j < cVertexShaders; j++)
+            {
+                VMSVGA3DSHADER  shader;
+                uint32_t        shid;
+
+                /* Fetch the id first. */
+                rc = SSMR3GetU32(pSSM, &shid);
+                AssertRCReturn(rc, rc);
+
+                if (shid != SVGA3D_INVALID_ID)
+                {
+                    uint32_t *pData;
+
+                    /* Fetch a copy of the shader struct. */
+                    rc = SSMR3GetStructEx(pSSM, &shader, sizeof(shader), 0, g_aVMSVGA3DSHADERFields, NULL);
+                    AssertRCReturn(rc, rc);
+
+                    pData = (uint32_t *)RTMemAlloc(shader.cbData);
+                    AssertReturn(pData, VERR_NO_MEMORY);
+
+                    rc = SSMR3GetMem(pSSM, pData, shader.cbData);
+                    AssertRCReturn(rc, rc);
+
+                    rc = vmsvga3dShaderDefine(pThis, cid, shid, shader.type, shader.cbData, pData);
+                    AssertRCReturn(rc, rc);
+
+                    RTMemFree(pData);
+                }
+            }
+
+            /* Fetch pixel shader constants. */
+            for (uint32_t j = 0; j < cPixelShaderConst; j++)
+            {
+                VMSVGASHADERCONST ShaderConst;
+
+                rc = SSMR3GetStructEx(pSSM, &ShaderConst, sizeof(ShaderConst), 0, g_aVMSVGASHADERCONSTFields, NULL);
+                AssertRCReturn(rc, rc);
+
+                if (ShaderConst.fValid)
+                {
+                    rc = vmsvga3dShaderSetConst(pThis, cid, j, SVGA3D_SHADERTYPE_PS, ShaderConst.ctype, 1, ShaderConst.value);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+
+            /* Fetch vertex shader constants. */
+            for (uint32_t j = 0; j < cVertexShaderConst; j++)
+            {
+                VMSVGASHADERCONST ShaderConst;
+
+                rc = SSMR3GetStructEx(pSSM, &ShaderConst, sizeof(ShaderConst), 0, g_aVMSVGASHADERCONSTFields, NULL);
+                AssertRCReturn(rc, rc);
+
+                if (ShaderConst.fValid)
+                {
+                    rc = vmsvga3dShaderSetConst(pThis, cid, j, SVGA3D_SHADERTYPE_VS, ShaderConst.ctype, 1, ShaderConst.value);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+
+        }
+    }
+
+    /* Fetch all surfaces. */
+    for (uint32_t i = 0; i < cSurfaces; i++)
+    {
+        uint32_t sid;
+
+        /* Fetch the id first. */
+        rc = SSMR3GetU32(pSSM, &sid);
+        AssertRCReturn(rc, rc);
+
+        if (sid != SVGA3D_INVALID_ID)
+        {
+            VMSVGA3DSURFACE  surface;
+
+            /* Fetch the surface structure first. */
+            rc = SSMR3GetStructEx(pSSM, &surface, sizeof(surface), 0, g_aVMSVGA3DSURFACEFields, NULL);
+            AssertRCReturn(rc, rc);
+
+            {
+                uint32_t             cMipLevels = surface.faces[0].numMipLevels * surface.cFaces;
+                PVMSVGA3DMIPMAPLEVEL pMipmapLevel = (PVMSVGA3DMIPMAPLEVEL)RTMemAlloc(cMipLevels * sizeof(VMSVGA3DMIPMAPLEVEL));
+                AssertReturn(pMipmapLevel, VERR_NO_MEMORY);
+                SVGA3dSize *pMipmapLevelSize = (SVGA3dSize *)RTMemAlloc(cMipLevels * sizeof(SVGA3dSize));
+                AssertReturn(pMipmapLevelSize, VERR_NO_MEMORY);
+
+                /* Load the mip map level info. */
+                for (uint32_t face=0; face < surface.cFaces; face++)
+                {
+                    for (uint32_t j = 0; j < surface.faces[0].numMipLevels; j++)
+                    {
+                        uint32_t idx = j + face * surface.faces[0].numMipLevels;
+                        /* Load the mip map level struct. */
+                        rc = SSMR3GetStructEx(pSSM, &pMipmapLevel[idx], sizeof(pMipmapLevel[idx]), 0, g_aVMSVGA3DMIPMAPLEVELFields, NULL);
+                        AssertRCReturn(rc, rc);
+
+                        pMipmapLevelSize[idx] = pMipmapLevel[idx].size;
+                    }
+                }
+
+                rc = vmsvga3dSurfaceDefine(pThis, sid, surface.flags, surface.format, surface.faces, surface.multiSampleCount, surface.autogenFilter, cMipLevels, pMipmapLevelSize);
+                AssertRCReturn(rc, rc);
+
+                RTMemFree(pMipmapLevelSize);
+                RTMemFree(pMipmapLevel);
+            }
+
+            PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+            Assert(pSurface->id == sid);
+
+            pSurface->fDirty = false;
+
+            /* Load the mip map level data. */
+            for (uint32_t j = 0; j < pSurface->faces[0].numMipLevels * pSurface->cFaces; j++)
+            {
+                PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->pMipmapLevels[j];
+                bool fDataPresent = false;
+
+                Assert(pMipmapLevel->cbSurface);
+                pMipmapLevel->pSurfaceData = RTMemAllocZ(pMipmapLevel->cbSurface);
+                AssertReturn(pMipmapLevel->pSurfaceData, VERR_NO_MEMORY);
+                
+                /* Fetch the data present boolean first. */
+                rc = SSMR3GetBool(pSSM, &fDataPresent);
+                AssertRCReturn(rc, rc);
+
+                Log(("Surface sid=%x: load mipmap level %d with %x bytes data (present=%d).\n", sid, j, pMipmapLevel->cbSurface, fDataPresent));
+
+                if (fDataPresent)
+                {
+                    rc = SSMR3GetMem(pSSM, pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+                    AssertRCReturn(rc, rc);
+                    pMipmapLevel->fDirty = true;
+                    pSurface->fDirty     = true;
+                }
+                else
+                {
+                    pMipmapLevel->fDirty = false;
+                }
+            }
+        }
+    }
+
+    /* Reinitialize all active contexts. */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[i];
+        uint32_t cid = pContext->id;
+
+        if (cid != SVGA3D_INVALID_ID)
+        {
+            /* First set the render targets as they change the internal state (reset viewport etc) */
+            Log(("vmsvga3dLoadExec: Recreate render targets BEGIN\n"));
+            for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aRenderTargets); j++)
+            {
+                if (pContext->state.aRenderTargets[j] != SVGA3D_INVALID_ID)
+                {
+                    SVGA3dSurfaceImageId target;
+
+                    target.sid      = pContext->state.aRenderTargets[j];
+                    target.face     = 0;
+                    target.mipmap   = 0;
+                    rc = vmsvga3dSetRenderTarget(pThis, cid, (SVGA3dRenderTargetType)j, target);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+            Log(("vmsvga3dLoadExec: Recreate render targets END\n"));
+
+            /* Recreate the render state */
+            Log(("vmsvga3dLoadExec: Recreate render state BEGIN\n"));
+            for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aRenderState); j++)
+            {
+                SVGA3dRenderState *pRenderState = &pContext->state.aRenderState[j];
+
+                if (pRenderState->state != SVGA3D_RS_INVALID)
+                    vmsvga3dSetRenderState(pThis, pContext->id, 1, pRenderState);
+            }
+            Log(("vmsvga3dLoadExec: Recreate render state END\n"));
+
+            /* Recreate the texture state */
+            Log(("vmsvga3dLoadExec: Recreate texture state BEGIN\n"));
+            for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)
+            {
+                for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)
+                {
+                    SVGA3dTextureState *pTextureState = &pContext->state.aTextureState[iStage][j];
+
+                    if (pTextureState->name != SVGA3D_TS_INVALID)
+                        vmsvga3dSetTextureState(pThis, pContext->id, 1, pTextureState);
+                }
+            }
+            Log(("vmsvga3dLoadExec: Recreate texture state END\n"));
+
+            /* Reprogram the clip planes. */
+            for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aClipPlane); j++)
+            {
+                if (pContext->state.aClipPlane[j].fValid == true)
+                    vmsvga3dSetClipPlane(pThis, cid, j, pContext->state.aClipPlane[j].plane);
+            }
+
+            /* Reprogram the light data. */
+            for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aLightData); j++)
+            {
+                if (pContext->state.aLightData[j].fValidData == true)
+                    vmsvga3dSetLightData(pThis, cid, j, &pContext->state.aLightData[j].data);
+                if (pContext->state.aLightData[j].fEnabled)
+                    vmsvga3dSetLightEnabled(pThis, cid, j, true);
+            }
+
+            /* Recreate the transform state. */
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_TRANSFORM)
+            {
+                for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTransformState); j++)
+                {
+                    if (pContext->state.aTransformState[j].fValid == true)
+                        vmsvga3dSetTransform(pThis, cid, (SVGA3dTransformType)j, pContext->state.aTransformState[j].matrix);
+                }
+            }
+
+            /* Reprogram the material data. */
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_MATERIAL)
+            {
+                for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aMaterial); j++)
+                {
+                    if (pContext->state.aMaterial[j].fValid == true)
+                        vmsvga3dSetMaterial(pThis, cid, (SVGA3dFace)j, &pContext->state.aMaterial[j].material);
+                }
+            }
+
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_SCISSORRECT)
+                vmsvga3dSetScissorRect(pThis, cid, &pContext->state.RectScissor);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_ZRANGE)
+                vmsvga3dSetZRange(pThis, cid, pContext->state.zRange);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
+                vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER)
+                vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER)
+                vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
+        }
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    int            rc;
+
+    /* Save a copy of the generic 3d state first. */
+    rc = SSMR3PutStructEx(pSSM, pState, sizeof(*pState), 0, g_aVMSVGA3DSTATEFields, NULL);
+    AssertRCReturn(rc, rc);
+
+    /* Save all active contexts. */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[i];
+        uint32_t cid = pContext->id;
+
+        /* Save the id first. */
+        rc = SSMR3PutU32(pSSM, cid);
+        AssertRCReturn(rc, rc);
+
+        if (cid != SVGA3D_INVALID_ID)
+        {
+            /* Save a copy of the context structure first. */
+            rc = SSMR3PutStructEx(pSSM, pContext, sizeof(*pContext), 0, g_aVMSVGA3DCONTEXTFields, NULL);
+            AssertRCReturn(rc, rc);
+
+            /* Save all pixel shaders. */
+            for (uint32_t j = 0; j < pContext->cPixelShaders; j++)
+            {
+                PVMSVGA3DSHADER pShader = &pContext->paPixelShader[j];
+
+                /* Save the id first. */
+                rc = SSMR3PutU32(pSSM, pShader->id);
+                AssertRCReturn(rc, rc);
+
+                if (pShader->id != SVGA3D_INVALID_ID)
+                {
+                    uint32_t cbData = pShader->cbData;
+
+                    /* Save a copy of the shader struct. */
+                    rc = SSMR3PutStructEx(pSSM, pShader, sizeof(*pShader), 0, g_aVMSVGA3DSHADERFields, NULL);
+                    AssertRCReturn(rc, rc);
+
+                    Log(("Save pixelshader shid=%d with %x bytes code.\n", pShader->id, cbData));
+                    rc = SSMR3PutMem(pSSM, pShader->pShaderProgram, cbData);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+
+            /* Save all vertex shaders. */
+            for (uint32_t j = 0; j < pContext->cVertexShaders; j++)
+            {
+                PVMSVGA3DSHADER pShader = &pContext->paVertexShader[j];
+
+                /* Save the id first. */
+                rc = SSMR3PutU32(pSSM, pShader->id);
+                AssertRCReturn(rc, rc);
+
+                if (pShader->id != SVGA3D_INVALID_ID)
+                {
+                    uint32_t cbData = pShader->cbData;
+
+                    /* Save a copy of the shader struct. */
+                    rc = SSMR3PutStructEx(pSSM, pShader, sizeof(*pShader), 0, g_aVMSVGA3DSHADERFields, NULL);
+                    AssertRCReturn(rc, rc);
+
+                    Log(("Save vertex shader shid=%d with %x bytes code.\n", pShader->id, cbData));
+                    /* Fetch the shader code and save it. */
+                    rc = SSMR3PutMem(pSSM, pShader->pShaderProgram, cbData);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+
+            /* Save pixel shader constants. */
+            for (uint32_t j = 0; j < pContext->state.cPixelShaderConst; j++)
+            {
+                rc = SSMR3PutStructEx(pSSM, &pContext->state.paPixelShaderConst[j], sizeof(pContext->state.paPixelShaderConst[j]), 0, g_aVMSVGASHADERCONSTFields, NULL);
+                AssertRCReturn(rc, rc);
+            }
+
+            /* Save vertex shader constants. */
+            for (uint32_t j = 0; j < pContext->state.cVertexShaderConst; j++)
+            {
+                rc = SSMR3PutStructEx(pSSM, &pContext->state.paVertexShaderConst[j], sizeof(pContext->state.paVertexShaderConst[j]), 0, g_aVMSVGASHADERCONSTFields, NULL);
+                AssertRCReturn(rc, rc);
+            }
+        }
+    }
+
+    /* Save all active surfaces. */
+    for (uint32_t sid = 0; sid < pState->cSurfaces; sid++)
+    {
+        PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+
+        /* Save the id first. */
+        rc = SSMR3PutU32(pSSM, pSurface->id);
+        AssertRCReturn(rc, rc);
+
+        if (pSurface->id != SVGA3D_INVALID_ID)
+        {
+            /* Save a copy of the surface structure first. */
+            rc = SSMR3PutStructEx(pSSM, pSurface, sizeof(*pSurface), 0, g_aVMSVGA3DSURFACEFields, NULL);
+            AssertRCReturn(rc, rc);
+
+            /* Save the mip map level info. */
+            for (uint32_t face=0; face < pSurface->cFaces; face++)
+            {
+                for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+                {
+                    uint32_t idx = i + face * pSurface->faces[0].numMipLevels;
+                    PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->pMipmapLevels[idx];
+
+                    /* Save a copy of the mip map level struct. */
+                    rc = SSMR3PutStructEx(pSSM, pMipmapLevel, sizeof(*pMipmapLevel), 0, g_aVMSVGA3DMIPMAPLEVELFields, NULL);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+
+            /* Save the mip map level data. */
+            for (uint32_t face=0; face < pSurface->cFaces; face++)
+            {
+                for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+                {
+                    uint32_t idx = i + face * pSurface->faces[0].numMipLevels;
+                    PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->pMipmapLevels[idx];
+
+                    Log(("Surface sid=%d: save mipmap level %d with %x bytes data.\n", sid, i, pMipmapLevel->cbSurface));
+
+#ifdef VMSVGA3D_DIRECT3D
+                    if (!pSurface->u.pSurface)
+#else
+                    if (pSurface->oglId.texture == OPENGL_INVALID_ID)
+#endif
+                    {
+                        if (pMipmapLevel->fDirty)
+                        {
+                            /* Data follows */
+                            rc = SSMR3PutBool(pSSM, true);
+                            AssertRCReturn(rc, rc);
+
+                            Assert(pMipmapLevel->cbSurface);
+                            rc = SSMR3PutMem(pSSM, pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+                            AssertRCReturn(rc, rc);
+                        }
+                        else
+                        {
+                            /* No data follows */
+                            rc = SSMR3PutBool(pSSM, false);
+                            AssertRCReturn(rc, rc);
+                        }
+                    }
+                    else
+                    {
+#ifdef VMSVGA3D_DIRECT3D
+                        void            *pData;
+                        bool             fRenderTargetTexture = false;
+                        bool             fTexture = false;
+                        bool             fVertex = false;
+                        bool             fSkipSave = false;
+                        HRESULT          hr;
+
+                        Assert(pMipmapLevel->cbSurface);
+                        pData = RTMemAllocZ(pMipmapLevel->cbSurface);
+                        AssertReturn(pData, VERR_NO_MEMORY);
+
+                        switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                        {
+                        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+                        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE:
+                            /* @todo unable to easily fetch depth surface data in d3d 9 */
+                            fSkipSave = true;
+                            break;
+                        case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                            fRenderTargetTexture = true;
+                            /* no break */
+                        case SVGA3D_SURFACE_HINT_TEXTURE:
+                            fTexture = true;
+                            /* no break */
+                        case SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        {
+                            D3DLOCKED_RECT LockedRect;
+
+                            if (fTexture)
+                            {
+                                if (pSurface->bounce.pTexture)
+                                {
+                                    if (    !pSurface->fDirty
+                                        &&  fRenderTargetTexture
+                                        &&  i == 0 /* only the first time */)
+                                    {
+                                        IDirect3DSurface9 *pSrc, *pDest;
+
+                                        /* @todo stricter checks for associated context */
+                                        uint32_t cid = pSurface->idAssociatedContext;
+                                        if (    cid >= pState->cContexts
+                                            ||  pState->paContext[cid].id != cid)
+                                        {
+                                            Log(("vmsvga3dSaveExec invalid context id (%x - %x)!\n", cid, (cid >= pState->cContexts) ? -1 : pState->paContext[cid].id));
+                                            AssertFailedReturn(VERR_INVALID_PARAMETER);
+                                        }
+                                        PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+
+                                        hr = pSurface->bounce.pTexture->GetSurfaceLevel(i, &pDest);
+                                        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                                        hr = pSurface->u.pTexture->GetSurfaceLevel(i, &pSrc);
+                                        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                                        hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
+                                        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                                        pSrc->Release();
+                                        pDest->Release();
+                                    }
+
+                                    hr = pSurface->bounce.pTexture->LockRect(i, /* texture level */
+                                                                             &LockedRect,
+                                                                             NULL,
+                                                                             D3DLOCK_READONLY);
+                                }
+                                else
+                                    hr = pSurface->u.pTexture->LockRect(i, /* texture level */
+                                                                        &LockedRect,
+                                                                        NULL,
+                                                                        D3DLOCK_READONLY);
+                            }
+                            else
+                                hr = pSurface->u.pSurface->LockRect(&LockedRect,
+                                                                    NULL,
+                                                                    D3DLOCK_READONLY);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+               
+                            /* Copy the data one line at a time in case the internal pitch is different. */
+                            for (uint32_t j = 0; j < pMipmapLevel->size.height; j++)
+                            {
+                                memcpy((uint8_t *)pData + j * pMipmapLevel->cbSurfacePitch, (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch, pMipmapLevel->cbSurfacePitch);
+                            }
+
+                            if (fTexture)
+                            {
+                                if (pSurface->bounce.pTexture)
+                                {
+                                    hr = pSurface->bounce.pTexture->UnlockRect(i);
+                                    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                                }
+                                else
+                                    hr = pSurface->u.pTexture->UnlockRect(i);
+                            }
+                            else
+                                hr = pSurface->u.pSurface->UnlockRect();
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                            break;
+                        }
+
+                        case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+                            fVertex = true;
+                            /* no break */
+
+                        case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+                        {
+                            uint8_t *pD3DData;
+
+                            if (fVertex)
+                                hr = pSurface->u.pVertexBuffer->Lock(0, 0, (void **)&pD3DData, D3DLOCK_READONLY);
+                            else        
+                                hr = pSurface->u.pIndexBuffer->Lock(0, 0, (void **)&pD3DData, D3DLOCK_READONLY);
+                            AssertMsg(hr == D3D_OK, ("vmsvga3dSaveExec: Lock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+
+                            memcpy(pData, pD3DData, pMipmapLevel->cbSurface);
+
+                            if (fVertex)
+                                hr = pSurface->u.pVertexBuffer->Unlock();
+                            else
+                                hr = pSurface->u.pIndexBuffer->Unlock();
+                            AssertMsg(hr == D3D_OK, ("vmsvga3dSaveExec: Unlock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+                            break;
+                        }
+
+                        default:
+                            AssertFailed();
+                            break;
+                        }
+
+                        if (!fSkipSave)
+                        {
+                            /* Data follows */
+                            rc = SSMR3PutBool(pSSM, true);
+                            AssertRCReturn(rc, rc);
+
+                            /* And write the surface data. */
+                            rc = SSMR3PutMem(pSSM, pData, pMipmapLevel->cbSurface);
+                            AssertRCReturn(rc, rc);
+                        }
+                        else
+                        {
+                            /* No data follows */
+                            rc = SSMR3PutBool(pSSM, false);
+                            AssertRCReturn(rc, rc);
+                        }
+
+                        RTMemFree(pData);
+#elif defined(VMSVGA3D_OPENGL)
+                        void *pData = NULL;
+
+                        /* @todo stricter checks for associated context */
+                        uint32_t cid = pSurface->idAssociatedContext;
+                        if (    cid >= pState->cContexts
+                            ||  pState->paContext[cid].id != cid)
+                        {
+                            Log(("vmsvga3dSaveExec: invalid context id (%x - %x)!\n", cid, (cid >= pState->cContexts) ? -1 : pState->paContext[cid].id));
+                            AssertFailedReturn(VERR_INVALID_PARAMETER);
+                        }
+                        PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+                        VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+                        Assert(pMipmapLevel->cbSurface);
+
+                        switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                        {
+                        default:
+                            AssertFailed();
+                            /* no break */
+                        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+                        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE:
+                            /* @todo fetch data from the renderbuffer */
+                            /* No data follows */
+                            rc = SSMR3PutBool(pSSM, false);
+                            AssertRCReturn(rc, rc);
+                            break;
+
+                        case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        case SVGA3D_SURFACE_HINT_TEXTURE:
+                        case SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        {
+                            GLint activeTexture;
+
+                            pData = RTMemAllocZ(pMipmapLevel->cbSurface);
+                            AssertReturn(pData, VERR_NO_MEMORY);
+
+                            glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+                            VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                            glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+                            VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                            glGetTexImage(GL_TEXTURE_2D,
+                                          i,
+                                          pSurface->formatGL, 
+                                          pSurface->typeGL, 
+                                          pData);
+                            VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+                            /* Data follows */
+                            rc = SSMR3PutBool(pSSM, true);
+                            AssertRCReturn(rc, rc);
+
+                            /* And write the surface data. */
+                            rc = SSMR3PutMem(pSSM, pData, pMipmapLevel->cbSurface);
+                            AssertRCReturn(rc, rc);
+
+                            /* Restore the old active texture. */
+                            glBindTexture(GL_TEXTURE_2D, activeTexture);
+                            VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+                            break;
+                        }
+
+                        case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+                        case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+                        {
+                            uint8_t *pBufferData;
+
+                            pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pSurface->oglId.buffer);
+                            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                            pBufferData = (uint8_t *)pState->ext.glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
+                            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+                            Assert(pBufferData);
+
+                            /* Data follows */
+                            rc = SSMR3PutBool(pSSM, true);
+                            AssertRCReturn(rc, rc);
+
+                            /* And write the surface data. */
+                            rc = SSMR3PutMem(pSSM, pBufferData, pMipmapLevel->cbSurface);
+                            AssertRCReturn(rc, rc);
+
+                            pState->ext.glUnmapBuffer(GL_ARRAY_BUFFER);
+                            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                            pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+                            VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+                        }
+                        }
+                        if (pData)
+                            RTMemFree(pData);
+#else
+#error "Unexpected 3d backend"
+#endif
+                    }
+                }
+            }
+        }
+    }
+    return VINF_SUCCESS;
+}
+
+static uint32_t vmsvga3dSaveShaderConst(PVMSVGA3DCONTEXT pContext, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t val1, uint32_t val2, uint32_t val3, uint32_t val4)
+{
+    /* Choose a sane upper limit. */
+    AssertReturn(reg < _32K, VERR_INVALID_PARAMETER);
+
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        if (pContext->state.cVertexShaderConst <= reg)
+        {
+            pContext->state.paVertexShaderConst = (PVMSVGASHADERCONST)RTMemRealloc(pContext->state.paVertexShaderConst, sizeof(VMSVGASHADERCONST) * (reg + 1));
+            AssertReturn(pContext->state.paVertexShaderConst, VERR_NO_MEMORY);
+            for (uint32_t i = pContext->state.cVertexShaderConst; i < reg + 1; i++)
+                pContext->state.paVertexShaderConst[i].fValid = false;
+            pContext->state.cVertexShaderConst = reg + 1;
+        }
+
+        pContext->state.paVertexShaderConst[reg].fValid   = true;
+        pContext->state.paVertexShaderConst[reg].ctype    = ctype;
+        pContext->state.paVertexShaderConst[reg].value[0] = val1;
+        pContext->state.paVertexShaderConst[reg].value[1] = val2;
+        pContext->state.paVertexShaderConst[reg].value[2] = val3;
+        pContext->state.paVertexShaderConst[reg].value[3] = val4;
+    }
+    else
+    {
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (pContext->state.cPixelShaderConst <= reg)
+        {
+            pContext->state.paPixelShaderConst = (PVMSVGASHADERCONST)RTMemRealloc(pContext->state.paPixelShaderConst, sizeof(VMSVGASHADERCONST) * (reg + 1));
+            AssertReturn(pContext->state.paPixelShaderConst, VERR_NO_MEMORY);
+            for (uint32_t i = pContext->state.cPixelShaderConst; i < reg + 1; i++)
+                pContext->state.paPixelShaderConst[i].fValid = false;
+            pContext->state.cPixelShaderConst = reg + 1;
+        }
+
+        pContext->state.paPixelShaderConst[reg].fValid   = true;
+        pContext->state.paPixelShaderConst[reg].ctype    = ctype;
+        pContext->state.paPixelShaderConst[reg].value[0] = val1;
+        pContext->state.paPixelShaderConst[reg].value[1] = val2;
+        pContext->state.paPixelShaderConst[reg].value[2] = val3;
+        pContext->state.paPixelShaderConst[reg].value[3] = val4;
+    }
+
+    return VINF_SUCCESS;
+}
+
+
+#endif  /* __DEVVMWARE3D_STATE_H__ */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
new file mode 100644
index 0000000..d943216
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
@@ -0,0 +1,6285 @@
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#include <iprt/mem.h>
+#include <iprt/avl.h>
+
+#include <VBox/VMMDev.h>
+#include <VBox/VBoxVideo.h>
+#include <VBox/bioslogo.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "vmsvga/svga_reg.h"
+#include "vmsvga/svga3d_reg.h"
+#include "vmsvga/svga3d_shaderdefs.h"
+
+#include <d3d9.h>
+
+/* Enable to disassemble defined shaders. */
+//#define DUMP_SHADER_DISASSEMBLY
+
+#ifdef DUMP_SHADER_DISASSEMBLY
+#include <d3dx9shader.h>
+#endif
+
+/* Enable to render the result of DrawPrimitive in a seperate window. */
+//#define DEBUG_GFX_WINDOW
+
+/* Enable to use Wine to convert D3D to opengl */
+//#define VBOX_VMSVGA3D_WITH_OPENGL
+
+#define FOURCC_INTZ     (D3DFORMAT)MAKEFOURCC('I', 'N', 'T', 'Z')
+#define FOURCC_NULL     (D3DFORMAT)MAKEFOURCC('N', 'U', 'L', 'L')
+
+/*******************************************************************************
+*   Structures and Typedefs                                                    *
+*******************************************************************************/
+
+typedef struct
+{
+    SVGA3dSize              size;
+    uint32_t                cbSurface;
+    uint32_t                cbSurfacePitch;
+    void                   *pSurfaceData;
+    bool                    fDirty;
+} VMSVGA3DMIPMAPLEVEL, *PVMSVGA3DMIPMAPLEVEL;
+
+/**
+ * SSM descriptor table for the VMSVGA3DMIPMAPLEVEL structure.
+ */
+static SSMFIELD const g_aVMSVGA3DMIPMAPLEVELFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, size),
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, cbSurface),
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, cbSurfacePitch),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DMIPMAPLEVEL, pSurfaceData),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DMIPMAPLEVEL, fDirty),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    /* Key is context id. */
+    AVLU32NODECORE          Core;
+    union
+    {
+        IDirect3DSurface9          *pSurface;
+        IDirect3DTexture9          *pTexture;
+        IDirect3DCubeTexture9      *pCubeTexture;
+    } u;
+} VMSVGA3DSHAREDSURFACE, *PVMSVGA3DSHAREDSURFACE;
+
+typedef struct
+{
+    uint32_t                id;
+    uint32_t                idAssociatedContext;
+    uint32_t                flags;
+    SVGA3dSurfaceFormat     format; 
+    SVGA3dSurfaceFace       faces[SVGA3D_MAX_SURFACE_FACES];
+    uint32_t                cFaces;
+    PVMSVGA3DMIPMAPLEVEL    pMipmapLevels; 
+    uint32_t                multiSampleCount;
+    SVGA3dTextureFilter     autogenFilter;
+    D3DFORMAT               formatD3D;
+    DWORD                   fUsageD3D;
+    D3DMULTISAMPLE_TYPE     multiSampleTypeD3D;
+    uint32_t                cbBlock;        /* block/pixel size in bytes */
+    /* Dirty state; surface was manually updated. */
+    bool                    fDirty;
+    /* Handle for shared objects (currently only textures & render targets). */
+    HANDLE                  hSharedObject;
+    /** Event query inserted after each GPU operation that updates or uses this surface. */
+    IDirect3DQuery9        *pQuery;
+    union
+    {
+        IDirect3DSurface9          *pSurface;
+        IDirect3DCubeTexture9      *pCubeTexture;
+        IDirect3DIndexBuffer9      *pIndexBuffer;
+        IDirect3DTexture9          *pTexture;
+        IDirect3DVertexBuffer9     *pVertexBuffer;
+    } u;
+    union
+    {
+        IDirect3DTexture9          *pTexture;
+    } bounce;
+    AVLU32TREE              pSharedObjectTree;
+    bool                    fStencilAsTexture;
+} VMSVGA3DSURFACE, *PVMSVGA3DSURFACE;
+
+/**
+ * SSM descriptor table for the VMSVGA3DSURFACE structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSURFACEFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, id),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idAssociatedContext),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, flags),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, format),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, faces),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, cFaces),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSURFACE, pMipmapLevels),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, multiSampleCount),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, autogenFilter),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, format),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, formatD3D),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, fUsageD3D),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, multiSampleTypeD3D),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, cbBlock),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, fDirty),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSURFACE, hSharedObject),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSURFACE, pQuery),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSURFACE, u.pSurface),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSURFACE, bounce.pTexture),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, pSharedObjectTree),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSURFACE, fStencilAsTexture),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    uint32_t                        id;
+    uint32_t                        cid;
+    SVGA3dShaderType                type;
+    uint32_t                        cbData;
+    void                           *pShaderProgram;
+    union
+    {
+        IDirect3DVertexShader9     *pVertexShader;
+        IDirect3DPixelShader9      *pPixelShader;
+    } u;
+} VMSVGA3DSHADER, *PVMSVGA3DSHADER;
+
+/**
+ * SSM descriptor table for the VMSVGA3DSHADER structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSHADERFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, id),
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, cid),
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, type),
+    SSMFIELD_ENTRY(                 VMSVGA3DSHADER, cbData),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSHADER, pShaderProgram),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSHADER, u.pVertexShader),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    bool        fValid;
+    float       matrix[16];
+} VMSVGATRANSFORMSTATE, *PVMSVGATRANSFORMSTATE;
+
+typedef struct
+{
+    bool            fValid;
+    SVGA3dMaterial  material;
+} VMSVGAMATERIALSTATE, *PVMSVGAMATERIALSTATE;
+
+typedef struct
+{
+    bool            fValid;
+    float           plane[4];
+} VMSVGACLIPPLANESTATE, *PVMSVGACLIPPLANESTATE;
+
+typedef struct
+{
+    bool            fEnabled;
+    bool            fValidData;
+    SVGA3dLightData data;
+} VMSVGALIGHTSTATE, *PVMSVGALIGHTSTATE;
+
+typedef struct
+{
+    bool                    fValid;
+    SVGA3dShaderConstType   ctype;
+    uint32_t                value[4];
+} VMSVGASHADERCONST, *PVMSVGASHADERCONST;
+
+/**
+ * SSM descriptor table for the VMSVGASHADERCONST structure.
+ */
+static SSMFIELD const g_aVMSVGASHADERCONSTFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGASHADERCONST, fValid),
+    SSMFIELD_ENTRY(                 VMSVGASHADERCONST, ctype),
+    SSMFIELD_ENTRY(                 VMSVGASHADERCONST, value),
+    SSMFIELD_ENTRY_TERM()
+};
+
+#define VMSVGA3D_UPDATE_SCISSORRECT     RT_BIT(0)
+#define VMSVGA3D_UPDATE_ZRANGE          RT_BIT(1)
+#define VMSVGA3D_UPDATE_VIEWPORT        RT_BIT(2)
+#define VMSVGA3D_UPDATE_VERTEXSHADER    RT_BIT(3)
+#define VMSVGA3D_UPDATE_PIXELSHADER     RT_BIT(4)
+#define VMSVGA3D_UPDATE_TRANSFORM       RT_BIT(5)
+#define VMSVGA3D_UPDATE_MATERIAL        RT_BIT(6)
+
+typedef struct
+{
+    uint32_t                id;
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+    IDirect3DDevice9       *pDevice;
+#else
+    IDirect3DDevice9Ex     *pDevice;
+#endif
+    HWND                    hwnd;
+    /* Current active render target (if any) */
+    uint32_t                sidRenderTarget;
+    /* Current selected texture surfaces (if any) */
+    uint32_t                aSidActiveTexture[SVGA3D_MAX_TEXTURE_STAGE];
+    /* Per context pixel and vertex shaders. */
+    uint32_t                cPixelShaders;
+    PVMSVGA3DSHADER         paPixelShader;
+    uint32_t                cVertexShaders;
+    PVMSVGA3DSHADER         paVertexShader;
+    /* Keep track of the internal state to be able to recreate the context properly (save/restore, window resize). */
+    struct
+    {
+        uint32_t                u32UpdateFlags;
+
+        SVGA3dRenderState       aRenderState[SVGA3D_RS_MAX];
+        SVGA3dTextureState      aTextureState[SVGA3D_MAX_TEXTURE_STAGE][SVGA3D_TS_MAX];
+        VMSVGATRANSFORMSTATE    aTransformState[SVGA3D_TRANSFORM_MAX];
+        VMSVGAMATERIALSTATE     aMaterial[SVGA3D_FACE_MAX];
+        VMSVGACLIPPLANESTATE    aClipPlane[SVGA3D_CLIPPLANE_MAX];
+        VMSVGALIGHTSTATE        aLightData[SVGA3D_MAX_LIGHTS];
+
+        uint32_t                aRenderTargets[SVGA3D_RT_MAX];
+        SVGA3dRect              RectScissor;
+        SVGA3dRect              RectViewPort;
+        SVGA3dZRange            zRange;
+        uint32_t                shidPixel;
+        uint32_t                shidVertex;
+
+        uint32_t                cPixelShaderConst;
+        PVMSVGASHADERCONST      paPixelShaderConst;
+        uint32_t                cVertexShaderConst;
+        PVMSVGASHADERCONST      paVertexShaderConst;
+    } state;
+} VMSVGA3DCONTEXT, *PVMSVGA3DCONTEXT;
+
+/**
+ * SSM descriptor table for the VMSVGA3DCONTEXT structure.
+ */
+static SSMFIELD const g_aVMSVGA3DCONTEXTFields[] =
+{
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, id),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, pDevice),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, hwnd),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, sidRenderTarget),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, aSidActiveTexture),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, cPixelShaders),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, paPixelShader),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, cVertexShaders),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, paVertexShader),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.u32UpdateFlags),
+
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aRenderState),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aTextureState),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aTransformState),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aMaterial),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aClipPlane),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aLightData),
+
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aRenderTargets),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.RectScissor),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.RectViewPort),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.zRange),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.shidPixel),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.shidVertex),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.cPixelShaderConst),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, state.paPixelShaderConst),
+    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.cVertexShaderConst),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, state.paVertexShaderConst),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+    IDirect3D9             *pD3D9;
+#else
+    IDirect3D9Ex           *pD3D9;
+#endif
+    D3DCAPS9                caps; 
+
+    /** Window Thread. */
+    R3PTRTYPE(RTTHREAD)     pWindowThread;
+    HMODULE                 hInstance;
+    /** Window request semaphore. */
+    RTSEMEVENT              WndRequestSem;
+
+    uint32_t                cContexts;
+    uint32_t                cSurfaces;
+    PVMSVGA3DCONTEXT        paContext;
+    PVMSVGA3DSURFACE        paSurface;
+
+    bool                    fSupportedSurfaceINTZ;
+    bool                    fSupportedSurfaceNULL;
+} VMSVGA3DSTATE, *PVMSVGA3DSTATE;
+
+/**
+ * SSM descriptor table for the VMSVGA3DSTATE structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSTATEFields[] =
+{
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, pD3D9),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, caps),
+
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, pWindowThread),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, hInstance),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, WndRequestSem),
+
+    SSMFIELD_ENTRY(                 VMSVGA3DSTATE, cContexts),
+    SSMFIELD_ENTRY(                 VMSVGA3DSTATE, cSurfaces),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, paContext),
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DSTATE, paSurface),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, fSupportedSurfaceINTZ),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DSTATE, fSupportedSurfaceNULL),
+    SSMFIELD_ENTRY_TERM()
+};
+
+typedef struct
+{
+    DWORD                   Usage;
+    D3DRESOURCETYPE         ResourceType;
+    SVGA3dFormatOp          FormatOp;
+} VMSVGA3DFORMATSUPPORT;
+
+VMSVGA3DFORMATSUPPORT aFormatSupport[] = 
+{
+    {
+        0,
+        D3DRTYPE_SURFACE,
+        SVGA3DFORMAT_OP_OFFSCREENPLAIN,
+    },
+    {
+        D3DUSAGE_RENDERTARGET,
+        D3DRTYPE_SURFACE,
+        (SVGA3dFormatOp) (SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET | SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET),
+    },
+    {
+        D3DUSAGE_AUTOGENMIPMAP,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_AUTOGENMIPMAP,
+    },
+    {
+        D3DUSAGE_DMAP,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_DMAP,
+    },
+    {
+        0,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_TEXTURE,
+    },
+    {
+        0,
+        D3DRTYPE_CUBETEXTURE,
+        SVGA3DFORMAT_OP_CUBETEXTURE,
+    },
+    {
+        0,
+        D3DRTYPE_VOLUMETEXTURE,
+        SVGA3DFORMAT_OP_VOLUMETEXTURE,
+    },
+    {
+        D3DUSAGE_QUERY_VERTEXTEXTURE,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_VERTEXTEXTURE,
+    },
+    {
+        D3DUSAGE_QUERY_LEGACYBUMPMAP,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_BUMPMAP,
+    },
+    {
+        D3DUSAGE_QUERY_SRGBREAD,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_SRGBREAD,
+    },
+    {
+        D3DUSAGE_QUERY_SRGBWRITE,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_SRGBWRITE,
+    }
+};
+
+VMSVGA3DFORMATSUPPORT aFeatureReject[] = 
+{
+    {
+        D3DUSAGE_QUERY_WRAPANDMIP,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP
+    },
+    {
+        D3DUSAGE_QUERY_FILTER,
+        D3DRTYPE_TEXTURE,
+        SVGA3DFORMAT_OP_NOFILTER
+    },
+    {
+        D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING,
+        D3DRTYPE_TEXTURE, /* ?? */
+        SVGA3DFORMAT_OP_NOALPHABLEND
+    },    
+};
+
+static void vmsvgaDumpD3DCaps(D3DCAPS9 *pCaps);
+static int vmsvga3dCreateTexture(PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface);
+
+RT_C_DECLS_BEGIN
+RT_C_DECLS_END
+
+int vmsvga3dInit(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState;
+    int rc;
+
+    pThis->svga.p3dState = RTMemAllocZ(sizeof(VMSVGA3DSTATE));
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+    pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+
+    /* Create event semaphore. */
+    rc = RTSemEventCreate(&pState->WndRequestSem);
+    if (RT_FAILURE(rc))
+    {
+        Log(("%s: Failed to create event semaphore for window handling.\n", __FUNCTION__));
+        return rc;
+    }
+
+    /* Create the async IO thread. */
+    rc = RTThreadCreate(&pState->pWindowThread, vmsvga3dWindowThread, pState->WndRequestSem, 0, RTTHREADTYPE_GUI, 0, "VMSVGA3DWND");
+    if (RT_FAILURE(rc))
+    {
+        AssertMsgFailed(("%s: Async IO Thread creation for 3d window handling failed rc=%d\n", __FUNCTION__, rc));
+        return rc;
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dPowerOn(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+    HRESULT hr;
+
+    if (pState->pD3D9)
+        return VINF_SUCCESS;    /* already initialized (load state) */
+
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+    pState->pD3D9 = Direct3DCreate9(D3D_SDK_VERSION);
+    AssertReturn(pState->pD3D9, VERR_INTERNAL_ERROR);
+#else
+    hr = Direct3DCreate9Ex(D3D_SDK_VERSION, &pState->pD3D9);
+    AssertReturn(hr == D3D_OK, VERR_INTERNAL_ERROR);
+#endif
+    hr = pState->pD3D9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &pState->caps);
+    AssertReturn(hr == D3D_OK, VERR_INTERNAL_ERROR);
+
+    vmsvgaDumpD3DCaps(&pState->caps);
+
+    /* Check if INTZ is supported. */
+    hr = pState->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                          D3DDEVTYPE_HAL,
+                                          D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                          0,
+                                          D3DRTYPE_TEXTURE,
+                                          FOURCC_INTZ);
+    if (hr != D3D_OK)
+    {
+        /* INTZ support is essential to support depth surfaces used as textures. */
+        LogRel(("VMSVGA: texture format INTZ not supported!!!\n"));
+    }
+    else
+        pState->fSupportedSurfaceINTZ = true;
+
+    /* Check if NULL is supported. */
+    hr = pState->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                          D3DDEVTYPE_HAL,
+                                          D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                          D3DUSAGE_RENDERTARGET,
+                                          D3DRTYPE_SURFACE,
+                                          FOURCC_NULL);
+    if (hr != D3D_OK)
+    {
+        /* NULL is a dummy surface which can be used as a render target to save memory. */
+        LogRel(("VMSVGA: surface format NULL not supported!!!\n"));
+    }
+    else
+        pState->fSupportedSurfaceNULL = true;
+
+
+    /*  Check if DX9 depth stencil textures are supported */
+    hr = pState->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                          D3DDEVTYPE_HAL,
+                                          D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                          D3DUSAGE_DEPTHSTENCIL,
+                                          D3DRTYPE_TEXTURE,
+                                          D3DFMT_D16);
+    if (hr != D3D_OK)
+    {
+        LogRel(("VMSVGA: texture format D3DFMT_D16 not supported\n"));
+    }
+
+    hr = pState->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                          D3DDEVTYPE_HAL,
+                                          D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                          D3DUSAGE_DEPTHSTENCIL,
+                                          D3DRTYPE_TEXTURE,
+                                          D3DFMT_D24X8);
+    if (hr != D3D_OK)
+    {
+        LogRel(("VMSVGA: texture format D3DFMT_D24X8 not supported\n"));
+    }
+    hr = pState->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                          D3DDEVTYPE_HAL,
+                                          D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                          D3DUSAGE_DEPTHSTENCIL,
+                                          D3DRTYPE_TEXTURE,
+                                          D3DFMT_D24S8);
+    if (hr != D3D_OK)
+    {
+        LogRel(("VMSVGA: texture format D3DFMT_D24S8 not supported\n"));
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dReset(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+
+    /* Destroy all leftover surfaces. */
+    for (uint32_t i = 0; i < pState->cSurfaces; i++)
+    {
+        if (pState->paSurface[i].id != SVGA3D_INVALID_ID)
+            vmsvga3dSurfaceDestroy(pThis, pState->paSurface[i].id);
+    }
+
+    /* Destroy all leftover contexts. */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        if (pState->paContext[i].id != SVGA3D_INVALID_ID)
+            vmsvga3dContextDestroy(pThis, pState->paContext[i].id);
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dTerminate(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pThis->svga.p3dState, VERR_NO_MEMORY);
+
+    int rc = vmsvga3dReset(pThis);
+    AssertRCReturn(rc, rc);
+
+    /* Terminate the window creation thread. */
+    rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_EXIT, 0, 0);
+    AssertRCReturn(rc, rc);
+
+    RTSemEventDestroy(pState->WndRequestSem);
+
+    if (pState->pD3D9)
+        pState->pD3D9->Release();
+
+    return VINF_SUCCESS;
+}
+
+/* Shared functions that depend on private structure definitions. */
+#define VMSVGA3D_DIRECT3D
+#include "DevVGA-SVGA3d-shared.h"
+
+
+static uint32_t vmsvga3dGetSurfaceFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps, D3DFORMAT format)
+{
+    NOREF(idx3dCaps);
+    HRESULT  hr;
+    uint32_t result = 0;
+
+    /* Try if the format can be used for the primary display. */
+    hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                            D3DDEVTYPE_HAL,
+                                            format,
+                                            0,
+                                            D3DRTYPE_SURFACE,
+                                            format);
+
+    for (unsigned i = 0; i < RT_ELEMENTS(aFormatSupport); i++)
+    {
+        hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                                D3DDEVTYPE_HAL,
+                                                D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                                aFormatSupport[i].Usage,
+                                                aFormatSupport[i].ResourceType,
+                                                format);
+        if (hr == D3D_OK)
+            result |= aFormatSupport[i].FormatOp;
+    }
+
+    /* Check for features only if the format is supported in any form. */
+    if (result)
+    {
+        for (unsigned i = 0; i < RT_ELEMENTS(aFeatureReject); i++)
+        {
+            hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                                    D3DDEVTYPE_HAL,
+                                                    D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                                    aFeatureReject[i].Usage,
+                                                    aFeatureReject[i].ResourceType,
+                                                    format);
+            if (hr != D3D_OK)
+                result |= aFeatureReject[i].FormatOp;
+        }
+    }
+
+    /* @todo missing:
+     * 
+     * SVGA3DFORMAT_OP_PIXELSIZE
+     */
+
+    switch (idx3dCaps)
+    {
+    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+        result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB 
+               |  SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+               |  SVGA3DFORMAT_OP_DISPLAYMODE           /* Should not be set for alpha formats. */
+               |  SVGA3DFORMAT_OP_3DACCELERATION;       /* implies OP_DISPLAYMODE */
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+        result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB 
+               |  SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+               |  SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET;
+        break;
+
+    }
+    Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+
+    return result;
+}
+
+static uint32_t vmsvga3dGetDepthFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps, D3DFORMAT format)
+{
+    HRESULT  hr;
+    uint32_t result = 0;
+        
+    hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT, 
+                                            D3DDEVTYPE_HAL,
+                                            D3DFMT_X8R8G8B8,    /* assume standard 32-bit display mode */
+                                            D3DUSAGE_DEPTHSTENCIL,
+                                            D3DRTYPE_SURFACE,
+                                            format);
+    if (hr == D3D_OK)
+        result =  SVGA3DFORMAT_OP_ZSTENCIL 
+                | SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
+                | SVGA3DFORMAT_OP_TEXTURE /* Necessary for Ubuntu Unity */;
+
+    Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+    return result;
+}
+
+
+int vmsvga3dQueryCaps(PVGASTATE pThis, uint32_t idx3dCaps, uint32_t *pu32Val)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    D3DCAPS9 *pCaps = &pState->caps;
+    int       rc = VINF_SUCCESS;
+
+    *pu32Val = 0;
+
+    switch (idx3dCaps)
+    {
+    case SVGA3D_DEVCAP_3D:
+        *pu32Val = 1; /* boolean? */
+        break;
+
+    case SVGA3D_DEVCAP_MAX_LIGHTS:
+        *pu32Val = pCaps->MaxActiveLights;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURES:
+        *pu32Val = pCaps->MaxSimultaneousTextures;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+        *pu32Val = pCaps->MaxUserClipPlanes;
+        break;
+
+    case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+        switch (pCaps->VertexShaderVersion)
+        {
+        case D3DVS_VERSION(1,1):
+            *pu32Val = SVGA3DVSVERSION_11;
+            break;
+        case D3DVS_VERSION(2,0):
+            *pu32Val = SVGA3DVSVERSION_20;
+            break;
+        case D3DVS_VERSION(3,0):
+            *pu32Val = SVGA3DVSVERSION_30;
+            break;
+        case D3DVS_VERSION(4,0):
+            *pu32Val = SVGA3DVSVERSION_40;
+            break;
+        default:
+            LogRel(("VMSVGA: Unsupported vertex shader version %x\n", pCaps->VertexShaderVersion));
+            break;
+        }
+        break;
+
+    case SVGA3D_DEVCAP_VERTEX_SHADER:
+        /* boolean? */
+        *pu32Val = 1;
+        break;
+
+    case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+        switch (pCaps->PixelShaderVersion)
+        {
+        case D3DPS_VERSION(1,1):
+            *pu32Val = SVGA3DPSVERSION_11;
+            break;
+        case D3DPS_VERSION(1,2):
+            *pu32Val = SVGA3DPSVERSION_12;
+            break;
+        case D3DPS_VERSION(1,3):
+            *pu32Val = SVGA3DPSVERSION_13;
+            break;
+        case D3DPS_VERSION(1,4):
+            *pu32Val = SVGA3DPSVERSION_14;
+            break;
+        case D3DPS_VERSION(2,0):
+            *pu32Val = SVGA3DPSVERSION_20;
+            break;
+        case D3DPS_VERSION(3,0):
+            *pu32Val = SVGA3DPSVERSION_30;
+            break;
+        case D3DPS_VERSION(4,0):
+            *pu32Val = SVGA3DPSVERSION_40;
+            break;
+        default:
+            LogRel(("VMSVGA: Unsupported pixel shader version %x\n", pCaps->PixelShaderVersion));
+            break;
+        }
+        break;
+
+    case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+        /* boolean? */
+        *pu32Val = 1;
+        break;
+
+    case SVGA3D_DEVCAP_S23E8_TEXTURES:
+    case SVGA3D_DEVCAP_S10E5_TEXTURES:
+        /* Must be obsolete by now; surface format caps specify the same thing. */
+        rc = VERR_INVALID_PARAMETER;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+        break;
+
+    /*
+     *   2. The BUFFER_FORMAT capabilities are deprecated, and they always
+     *      return TRUE. Even on physical hardware that does not support
+     *      these formats natively, the SVGA3D device will provide an emulation
+     *      which should be invisible to the guest OS.
+     */
+    case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+    case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+    case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+        *pu32Val = 1;
+        break;
+
+    case SVGA3D_DEVCAP_QUERY_TYPES:
+        break;
+
+    case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+        break;
+
+    case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+        AssertCompile(sizeof(uint32_t) == sizeof(float));
+        *(float *)pu32Val = pCaps->MaxPointSize;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+        /* @todo ?? */
+        rc = VERR_INVALID_PARAMETER;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+        *pu32Val = pCaps->MaxTextureWidth;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+        *pu32Val = pCaps->MaxTextureHeight;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+        *pu32Val = pCaps->MaxVolumeExtent;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+        *pu32Val = pCaps->MaxTextureRepeat;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+        *pu32Val = pCaps->MaxTextureAspectRatio;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+        *pu32Val = pCaps->MaxAnisotropy;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+        *pu32Val = pCaps->MaxPrimitiveCount;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+        *pu32Val = pCaps->MaxVertexIndex;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+        *pu32Val = pCaps->MaxVertexShader30InstructionSlots;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+        *pu32Val = pCaps->MaxPixelShader30InstructionSlots;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+        *pu32Val = pCaps->VS20Caps.NumTemps;
+        break;
+
+    case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+        *pu32Val = pCaps->PS20Caps.NumTemps;
+        break;
+
+    case SVGA3D_DEVCAP_TEXTURE_OPS:
+        break;
+
+    case SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES:
+        break;
+
+    case SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES:
+        break;
+
+    case SVGA3D_DEVCAP_ALPHATOCOVERAGE:
+        break;
+
+    case SVGA3D_DEVCAP_SUPERSAMPLE:
+        break;
+
+    case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+        *pu32Val = !!(pCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP);
+        break;
+
+    case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+        break;
+
+    case SVGA3D_DEVCAP_MAX_RENDER_TARGETS:  /* @todo same thing? */
+    case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+        *pu32Val = pCaps->NumSimultaneousRTs;
+        break;
+
+    /*
+     * This is the maximum number of SVGA context IDs that the guest
+     * can define using SVGA_3D_CMD_CONTEXT_DEFINE.
+     */
+    case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+        *pu32Val = SVGA3D_MAX_CONTEXT_IDS;
+        break;
+
+    /*
+     * This is the maximum number of SVGA surface IDs that the guest
+     * can define using SVGA_3D_CMD_SURFACE_DEFINE*.
+     */
+    case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+        *pu32Val = SVGA3D_MAX_SURFACE_IDS;
+        break;
+
+    /* Supported surface formats. */
+    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_X8R8G8B8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A8R8G8B8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A2R10G10B10);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_X1R5G5B5);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A1R5G5B5);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A4R4G4B4);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A4R4G4B4);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_L16);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A8L8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_L8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+        *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D16);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT: /* @todo not correct */
+        *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D24S8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+        *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D24X8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+        /* @todo supposed to be floating-point, but unable to find a match for D3D9... */
+        *pu32Val = 0;
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+        *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D24FS8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT1);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT2);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT3);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT4);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT5);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_X8L8V8U8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A2W10V10U10);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_V8U8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_Q8W8V8U8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_CxV8U8);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_R16F);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_R32F);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_G16R16F);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_G32R32F);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A16B16G16R16F);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A32B32G32R32F);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_V16U16);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_G16R16);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A16B16G16R16);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_UYVY);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_YUY2);
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, (D3DFORMAT)MAKEFOURCC('N', 'V', '1', '2'));
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_AYUV:
+        *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, (D3DFORMAT)MAKEFOURCC('A', 'Y', 'U', 'V'));
+        break;
+
+    case SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM:
+    case SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM:
+        /* Unknown; only in DX10 & 11 */
+        Log(("CAPS: Unknown CAP %s\n", vmsvga3dGetCapString(idx3dCaps)));
+        rc = VERR_INVALID_PARAMETER;
+        *pu32Val = 0;
+        break;
+
+    default:
+        Log(("CAPS: Unexpected CAP %d\n", idx3dCaps));
+        rc = VERR_INVALID_PARAMETER;
+        break;
+    }
+#if 0
+    /* Dump of VMWare Player caps (from their log); for debugging purposes */
+    switch (idx3dCaps)
+    {
+    case 0: 
+        *pu32Val = 0x00000001;
+        break;
+    case 1:
+        *pu32Val = 0x0000000a;
+        break;
+    case 2: 
+        *pu32Val = 0x00000008;
+        break;
+    case 3: *pu32Val = 0x00000006; break;
+    case 4: *pu32Val = 0x00000007; break;
+    case 5: *pu32Val = 0x00000001; break;
+    case 6: *pu32Val = 0x0000000d; break;
+    case 7: *pu32Val = 0x00000001; break;
+    case 8: *pu32Val = 0x00000004; break;
+    case 9: *pu32Val = 0x00000001; break;
+    case 10: *pu32Val = 0x00000001; break;
+    case 11: *pu32Val = 0x00000004; break;
+    case 12: *pu32Val = 0x00000001; break;
+    case 13: *pu32Val = 0x00000001; break;
+    case 14: *pu32Val = 0x00000001; break;
+    case 15: *pu32Val = 0x00000001; break;
+    case 16: *pu32Val = 0x00000001; break;
+    case 17: *pu32Val = (uint32_t)256.000000; break;
+    case 18: *pu32Val = 0x00000014; break;
+    case 19: *pu32Val = 0x00001000; break;
+    case 20: *pu32Val = 0x00001000; break;
+    case 21: *pu32Val = 0x00000800; break;
+    case 22: *pu32Val = 0x00002000; break;
+    case 23: *pu32Val = 0x00000800; break;
+    case 24: *pu32Val = 0x00000010; break;
+    case 25: *pu32Val = 0x000fffff; break;
+    case 26: *pu32Val = 0x00ffffff; break;
+    case 27: *pu32Val = 0xffffffff; break;
+    case 28: *pu32Val = 0xffffffff; break;
+    case 29: *pu32Val = 0x00000020; break;
+    case 30: *pu32Val = 0x00000020; break;
+    case 31: *pu32Val = 0x03ffffff; break;
+    case 32: *pu32Val = 0x0098ec1f; break;
+    case 33: *pu32Val = 0x0098e11f; break;
+    case 34: *pu32Val = 0x0098e01f; break;
+    case 35: *pu32Val = 0x012c2000; break;
+    case 36: *pu32Val = 0x0098e11f; break;
+    case 37: *pu32Val = 0x0090c11f; break;
+    case 38: *pu32Val = 0x0098ec1f; break;
+    case 39: *pu32Val = 0x00804007; break;
+    case 40: *pu32Val = 0x0080c007; break;
+    case 41: *pu32Val = 0x00804007; break;
+    case 42: *pu32Val = 0x0080c007; break;
+    case 43: *pu32Val = 0x000000c1; break;
+    case 44: *pu32Val = 0x000000c1; break;
+    case 45: *pu32Val = 0x000000c1; break;
+    case 46: *pu32Val = 0x00808005; break;
+    case 47: *pu32Val = 0x00808005; break;
+    case 48: *pu32Val = 0x00808005; break;
+    case 49: *pu32Val = 0x00808005; break;
+    case 50: *pu32Val = 0x00808005; break;
+    case 51: *pu32Val = 0x01240000; break;
+    case 52: *pu32Val = 0x00814007; break;
+    case 53: *pu32Val = 0x00814007; break;
+    case 54: *pu32Val = 0x00814007; break;
+    case 55: *pu32Val = 0x01240000; break;
+    case 56: *pu32Val = 0x0080401f; break;
+    case 57: *pu32Val = 0x0080401f; break;
+    case 58: *pu32Val = 0x0080401f; break;
+    case 59: *pu32Val = 0x0080401f; break;
+    case 60: *pu32Val = 0x0080601f; break;
+    case 61: *pu32Val = 0x0080401f; break;
+    case 62: *pu32Val = 0x00000000; break;
+    case 63: *pu32Val = 0x00000004; break;
+    case 64: *pu32Val = 0x00000004; break;
+    case 65: *pu32Val = 0x00814005; break;
+    case 66: *pu32Val = 0x0080401f; break;
+    case 67: *pu32Val = 0x0080601f; break;
+    case 68: *pu32Val = 0x00006009; break;
+    case 69: *pu32Val = 0x00006001; break;
+    case 70: *pu32Val = 0x00000001; break;
+    case 71: *pu32Val = 0x0000000b; break;
+    case 72: *pu32Val = 0x00000001; break;
+    case 73: *pu32Val = 0x00000000; break;
+    case 74: *pu32Val = 0x00000000; break;
+    case 75: *pu32Val = 0x01246000; break;
+    case 76: *pu32Val = 0x00004009; break;
+    case 77: *pu32Val = 0x00000100; break;
+    case 78: *pu32Val = 0x00008000; break;
+    case 79: *pu32Val = 0x000000c1; break;
+    case 80: *pu32Val = 0x01240000; break;
+    case 81: *pu32Val = 0x000000c1; break;
+    case 82: *pu32Val = 0x00800005; break;
+    case 83: *pu32Val = 0x00800005; break;
+    case 84: *pu32Val = 0x00000000; break;
+    case 85: *pu32Val = 0x00000000; break;
+    case 86: *pu32Val = 0x00000000; break;
+    case 87: *pu32Val = 0x00000000; break;
+    case 88: *pu32Val = 0x00000000; break;
+    case 89: *pu32Val = (uint32_t) 0.000000; break;
+    case 90: *pu32Val = (uint32_t) 0.000000; break;
+    case 91: *pu32Val = 0x00006009; break;
+    default:
+//        Log(("CAPS: Unexpected CAP %d\n", idx3dCaps));
+//        rc = VERR_INVALID_PARAMETER;
+        break;
+    }
+#endif
+    Log(("CAPS: %d=%s - %x\n", idx3dCaps, vmsvga3dGetCapString(idx3dCaps), *pu32Val));
+    return rc;
+}
+
+/**
+ * Convert SVGA format value to its D3D equivalent
+ */
+static D3DFORMAT vmsvga3dSurfaceFormat2D3D(SVGA3dSurfaceFormat format)
+{
+    switch (format)
+    {
+    case SVGA3D_X8R8G8B8:
+        return D3DFMT_X8R8G8B8;
+    case SVGA3D_A8R8G8B8:
+        return D3DFMT_A8R8G8B8;
+    case SVGA3D_R5G6B5:
+        return D3DFMT_R5G6B5;
+    case SVGA3D_X1R5G5B5:
+        return D3DFMT_X1R5G5B5;
+    case SVGA3D_A1R5G5B5:
+        return D3DFMT_A1R5G5B5;
+    case SVGA3D_A4R4G4B4:
+        return D3DFMT_A4R4G4B4;
+
+    case SVGA3D_Z_D32:
+        return D3DFMT_D32;
+    case SVGA3D_Z_D16:
+        return D3DFMT_D16;
+    case SVGA3D_Z_D24S8_INT:    /* @todo not correct */
+    case SVGA3D_Z_D24S8:
+        return D3DFMT_D24S8;
+    case SVGA3D_Z_D15S1:
+        return D3DFMT_D15S1;
+    case SVGA3D_Z_D24X8:
+        return D3DFMT_D24X8;
+    /* Advanced D3D9 depth formats. */
+    case SVGA3D_Z_DF16:
+        /* @todo supposed to be floating-point, but unable to find a match for D3D9... */
+        AssertFailedReturn(D3DFMT_UNKNOWN);
+    case SVGA3D_Z_DF24:
+        return D3DFMT_D24FS8;
+
+    case SVGA3D_LUMINANCE8:
+        return D3DFMT_L8;
+    case SVGA3D_LUMINANCE4_ALPHA4:
+        return D3DFMT_A4L4;
+    case SVGA3D_LUMINANCE16:
+        return D3DFMT_L16;
+    case SVGA3D_LUMINANCE8_ALPHA8:
+        return D3DFMT_A8L8;
+
+    case SVGA3D_DXT1:
+        return D3DFMT_DXT1;
+    case SVGA3D_DXT2:
+        return D3DFMT_DXT2;
+    case SVGA3D_DXT3:
+        return D3DFMT_DXT3;
+    case SVGA3D_DXT4:
+        return D3DFMT_DXT4;
+    case SVGA3D_DXT5:
+        return D3DFMT_DXT5;
+
+    /* Bump-map formats */
+    case SVGA3D_BUMPU8V8:
+        return D3DFMT_V8U8;
+    case SVGA3D_BUMPL6V5U5:
+        return D3DFMT_L6V5U5;
+    case SVGA3D_BUMPX8L8V8U8:
+        return D3DFMT_X8L8V8U8;
+    case SVGA3D_BUMPL8V8U8:
+        /* No corresponding D3D9 equivalent. */
+        AssertFailedReturn(D3DFMT_UNKNOWN);
+    /* signed bump-map formats */
+    case SVGA3D_V8U8:
+        return D3DFMT_V8U8;
+    case SVGA3D_Q8W8V8U8:
+        return D3DFMT_Q8W8V8U8;
+    case SVGA3D_CxV8U8:
+        return D3DFMT_CxV8U8;
+    /* mixed bump-map formats */
+    case SVGA3D_X8L8V8U8:
+        return D3DFMT_X8L8V8U8;
+    case SVGA3D_A2W10V10U10:
+        return D3DFMT_A2W10V10U10;
+
+    case SVGA3D_ARGB_S10E5:   /* 16-bit floating-point ARGB */
+        return D3DFMT_A16B16G16R16F;
+    case SVGA3D_ARGB_S23E8:   /* 32-bit floating-point ARGB */
+        return D3DFMT_A32B32G32R32F;
+
+    case SVGA3D_A2R10G10B10:
+        return D3DFMT_A2R10G10B10;
+
+    case SVGA3D_ALPHA8:
+        return D3DFMT_A8;
+
+    /* Single- and dual-component floating point formats */
+    case SVGA3D_R_S10E5:
+        return D3DFMT_R16F;
+    case SVGA3D_R_S23E8:
+        return D3DFMT_R32F;
+    case SVGA3D_RG_S10E5:
+        return D3DFMT_G16R16F;
+    case SVGA3D_RG_S23E8:
+        return D3DFMT_G32R32F;
+
+    /*
+     * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+     * the most efficient format to use when creating new surfaces
+     * expressly for index or vertex data.
+     */
+    case SVGA3D_BUFFER:
+        return D3DFMT_UNKNOWN;
+
+    case SVGA3D_V16U16:
+        return D3DFMT_V16U16;
+
+    case SVGA3D_G16R16:
+        return D3DFMT_G16R16;
+    case SVGA3D_A16B16G16R16:
+        return D3DFMT_A16B16G16R16;
+
+    /* Packed Video formats */
+    case SVGA3D_UYVY:
+        return D3DFMT_UYVY;
+    case SVGA3D_YUY2:
+        return D3DFMT_YUY2;
+
+    /* Planar video formats */
+    case SVGA3D_NV12:
+        return (D3DFORMAT)MAKEFOURCC('N', 'V', '1', '2');
+
+    /* Video format with alpha */
+    case SVGA3D_AYUV:
+        return (D3DFORMAT)MAKEFOURCC('A', 'Y', 'U', 'V');
+
+    case SVGA3D_BC4_UNORM:
+    case SVGA3D_BC5_UNORM:
+        /* Unknown; only in DX10 & 11 */
+        break;
+    }
+    AssertFailedReturn(D3DFMT_UNKNOWN);
+}
+
+/**
+ * Convert SVGA multi sample count value to its D3D equivalent
+ */
+D3DMULTISAMPLE_TYPE vmsvga3dMultipeSampleCount2D3D(uint32_t multisampleCount)
+{
+    AssertCompile(D3DMULTISAMPLE_2_SAMPLES == 2);
+    AssertCompile(D3DMULTISAMPLE_16_SAMPLES == 16);
+
+    if (multisampleCount > 16)
+        return D3DMULTISAMPLE_NONE;
+
+    /* @todo exact same mapping as d3d? */
+    return (D3DMULTISAMPLE_TYPE)multisampleCount;
+}
+
+int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags, SVGA3dSurfaceFormat format, SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES],
+                          uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter, uint32_t cMipLevels, SVGA3dSize *pMipLevelSize)
+{
+    PVMSVGA3DSURFACE pSurface;
+    PVMSVGA3DSTATE   pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+   
+    Log(("vmsvga3dSurfaceDefine: sid=%x surfaceFlags=%x format=%s (%x) multiSampleCount=%d autogenFilter=%d, cMipLevels=%d size=(%d,%d,%d)\n", 
+         sid, surfaceFlags, vmsvgaSurfaceType2String(format), format, multisampleCount, autogenFilter, cMipLevels, pMipLevelSize->width, pMipLevelSize->height, pMipLevelSize->depth));
+
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(cMipLevels >= 1, VERR_INVALID_PARAMETER);
+    /* Assuming all faces have the same nr of mipmaps. */
+    AssertReturn(!(surfaceFlags & SVGA3D_SURFACE_CUBEMAP) || cMipLevels == face[0].numMipLevels * 6, VERR_INVALID_PARAMETER);
+    AssertReturn((surfaceFlags & SVGA3D_SURFACE_CUBEMAP) || cMipLevels == face[0].numMipLevels, VERR_INVALID_PARAMETER);
+
+    if (sid >= pState->cSurfaces)
+    {
+        pState->paSurface = (PVMSVGA3DSURFACE )RTMemRealloc(pState->paSurface, sizeof(VMSVGA3DSURFACE) * (sid + 1));
+        AssertReturn(pState->paSurface, VERR_NO_MEMORY);
+        memset(&pState->paSurface[pState->cSurfaces], 0, sizeof(VMSVGA3DSURFACE) * (sid + 1 - pState->cSurfaces));
+        for (uint32_t i = pState->cSurfaces; i < sid + 1; i++)
+            pState->paSurface[i].id = SVGA3D_INVALID_ID;
+
+        pState->cSurfaces = sid + 1;
+    }
+    /* If one already exists with this id, then destroy it now. */
+    if (pState->paSurface[sid].id != SVGA3D_INVALID_ID)
+        vmsvga3dSurfaceDestroy(pThis, sid);
+
+    pSurface = &pState->paSurface[sid];
+    memset(pSurface, 0, sizeof(*pSurface));
+    pSurface->id                    = sid;
+    pSurface->idAssociatedContext   = SVGA3D_INVALID_ID;
+    pSurface->hSharedObject         = NULL;
+    pSurface->pSharedObjectTree     = NULL;
+
+    /* The surface type is sort of undefined now, even though the hints and format can help to clear that up. 
+     * In some case we'll have to wait until the surface is used to create the D3D object.
+     */
+    switch (format)
+    {
+    case SVGA3D_Z_D32:
+    case SVGA3D_Z_D16:
+    case SVGA3D_Z_D24S8:
+    case SVGA3D_Z_D15S1:
+    case SVGA3D_Z_D24X8:
+    case SVGA3D_Z_DF16:
+    case SVGA3D_Z_DF24:
+    case SVGA3D_Z_D24S8_INT:
+        surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+        break;
+
+    /* Texture compression formats */
+    case SVGA3D_DXT1:
+    case SVGA3D_DXT2:
+    case SVGA3D_DXT3:
+    case SVGA3D_DXT4:
+    case SVGA3D_DXT5:
+    /* Bump-map formats */
+    case SVGA3D_BUMPU8V8:
+    case SVGA3D_BUMPL6V5U5:
+    case SVGA3D_BUMPX8L8V8U8:
+    case SVGA3D_BUMPL8V8U8:
+    case SVGA3D_V8U8:
+    case SVGA3D_Q8W8V8U8:
+    case SVGA3D_CxV8U8:
+    case SVGA3D_X8L8V8U8:
+    case SVGA3D_A2W10V10U10:
+    case SVGA3D_V16U16:
+    /* Typical render target formats; we should allow render target buffers to be used as textures. */
+    case SVGA3D_X8R8G8B8:
+    case SVGA3D_A8R8G8B8:
+    case SVGA3D_R5G6B5:
+    case SVGA3D_X1R5G5B5:
+    case SVGA3D_A1R5G5B5:
+    case SVGA3D_A4R4G4B4:
+        surfaceFlags |= SVGA3D_SURFACE_HINT_TEXTURE;
+        break;
+
+    case SVGA3D_LUMINANCE8:
+    case SVGA3D_LUMINANCE4_ALPHA4:
+    case SVGA3D_LUMINANCE16:
+    case SVGA3D_LUMINANCE8_ALPHA8:
+    case SVGA3D_ARGB_S10E5:   /* 16-bit floating-point ARGB */
+    case SVGA3D_ARGB_S23E8:   /* 32-bit floating-point ARGB */
+    case SVGA3D_A2R10G10B10:
+    case SVGA3D_ALPHA8:
+    case SVGA3D_R_S10E5:
+    case SVGA3D_R_S23E8:
+    case SVGA3D_RG_S10E5:
+    case SVGA3D_RG_S23E8:
+    case SVGA3D_G16R16:
+    case SVGA3D_A16B16G16R16:
+    case SVGA3D_UYVY:
+    case SVGA3D_YUY2:
+    case SVGA3D_NV12:
+    case SVGA3D_AYUV:
+    case SVGA3D_BC4_UNORM:
+    case SVGA3D_BC5_UNORM:
+        break;
+
+    /*
+     * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+     * the most efficient format to use when creating new surfaces
+     * expressly for index or vertex data.
+     */
+    case SVGA3D_BUFFER:
+        break;
+    }
+
+    pSurface->flags             = surfaceFlags;
+    pSurface->format            = format;
+    memcpy(pSurface->faces, face, sizeof(face));
+    pSurface->cFaces            = 1;    /* check for cube maps later */
+    pSurface->multiSampleCount  = multisampleCount;
+    pSurface->autogenFilter     = autogenFilter;
+    Assert(autogenFilter != SVGA3D_TEX_FILTER_FLATCUBIC);
+    Assert(autogenFilter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+    pSurface->pMipmapLevels     = (PVMSVGA3DMIPMAPLEVEL)RTMemAllocZ(cMipLevels * sizeof(VMSVGA3DMIPMAPLEVEL));
+    AssertReturn(pSurface->pMipmapLevels, VERR_NO_MEMORY);
+
+    for (uint32_t i=0; i < cMipLevels; i++)
+        pSurface->pMipmapLevels[i].size = pMipLevelSize[i];
+
+    /* Translate the format and usage flags to D3D. */
+    pSurface->formatD3D         = vmsvga3dSurfaceFormat2D3D(format);
+    pSurface->cbBlock           = vmsvga3dSurfaceFormatSize(format);
+    pSurface->multiSampleTypeD3D= vmsvga3dMultipeSampleCount2D3D(multisampleCount);
+    pSurface->fUsageD3D         = 0;
+    if (surfaceFlags & SVGA3D_SURFACE_HINT_DYNAMIC)
+        pSurface->fUsageD3D |= D3DUSAGE_DYNAMIC;
+    if (surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET)
+        pSurface->fUsageD3D |= D3DUSAGE_RENDERTARGET;
+    if (surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
+        pSurface->fUsageD3D |= D3DUSAGE_DEPTHSTENCIL;
+    if (surfaceFlags & SVGA3D_SURFACE_HINT_WRITEONLY)
+        pSurface->fUsageD3D |= D3DUSAGE_WRITEONLY;
+    if (surfaceFlags & SVGA3D_SURFACE_AUTOGENMIPMAPS)
+        pSurface->fUsageD3D |= D3DUSAGE_AUTOGENMIPMAP;
+
+    switch (surfaceFlags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+    {
+    case SVGA3D_SURFACE_CUBEMAP:
+        Log(("SVGA3D_SURFACE_CUBEMAP\n"));
+        pSurface->cFaces = 6;
+        break;
+
+    case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+        Log(("SVGA3D_SURFACE_HINT_INDEXBUFFER\n"));
+        /* else type unknown at this time; postpone buffer creation */
+        break;
+
+    case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+        Log(("SVGA3D_SURFACE_HINT_VERTEXBUFFER\n"));
+        /* Type unknown at this time; postpone buffer creation */
+        break;
+
+    case SVGA3D_SURFACE_HINT_TEXTURE:
+        Log(("SVGA3D_SURFACE_HINT_TEXTURE\n"));
+        break;
+
+    case SVGA3D_SURFACE_HINT_RENDERTARGET:
+        Log(("SVGA3D_SURFACE_HINT_RENDERTARGET\n"));
+        break;
+
+    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+        Log(("SVGA3D_SURFACE_HINT_DEPTHSTENCIL\n"));
+        break;
+
+    default:
+        /* Unknown; decide later. */
+        break;
+    }
+   
+    Assert(!pSurface->u.pSurface);
+
+    /* Allocate buffer to hold the surface data until we can move it into a D3D object */
+    for (uint32_t iFace=0; iFace < pSurface->cFaces; iFace++)
+    {
+        for (uint32_t i=0; i < pSurface->faces[iFace].numMipLevels; i++)
+        {
+            uint32_t idx = i + iFace * pSurface->faces[0].numMipLevels;
+
+            Log(("vmsvga3dSurfaceDefine: face %d mip level %d (%d,%d,%d)\n", iFace, i, pSurface->pMipmapLevels[idx].size.width, pSurface->pMipmapLevels[idx].size.height, pSurface->pMipmapLevels[idx].size.depth));
+            Log(("vmsvga3dSurfaceDefine: cbPitch=%x cbBlock=%x \n", pSurface->cbBlock * pSurface->pMipmapLevels[idx].size.width, pSurface->cbBlock));
+
+            pSurface->pMipmapLevels[idx].cbSurfacePitch = pSurface->cbBlock * pSurface->pMipmapLevels[idx].size.width;
+            pSurface->pMipmapLevels[idx].cbSurface      = pSurface->pMipmapLevels[idx].cbSurfacePitch * pSurface->pMipmapLevels[idx].size.height * pSurface->pMipmapLevels[idx].size.depth;
+            pSurface->pMipmapLevels[idx].pSurfaceData   = RTMemAllocZ(pSurface->pMipmapLevels[idx].cbSurface);
+            AssertReturn(pSurface->pMipmapLevels[idx].pSurfaceData, VERR_NO_MEMORY);
+        }
+    }
+    return VINF_SUCCESS;
+}
+
+/*
+ * Release all shared surface objects. 
+ */
+static int vmsvga3dSharedSurfaceDestroyTree(PAVLU32NODECORE pNode, void *pParam)
+{
+    PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)pNode;
+    PVMSVGA3DSURFACE       pSurface = (PVMSVGA3DSURFACE)pParam;
+
+    switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+    {
+    case SVGA3D_SURFACE_HINT_TEXTURE:
+    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+        Log(("vmsvga3dSharedSurfaceDestroyTree: release shared object for context %d\n", pNode->Key));
+        Assert(pSharedSurface->u.pTexture);
+        if (pSharedSurface->u.pTexture)
+            pSharedSurface->u.pTexture->Release();
+        break;
+
+    default:
+        AssertFailed();
+        break;
+    }
+    RTMemFree(pNode);
+    return 0;
+}
+
+int vmsvga3dSurfaceDestroy(PVGASTATE pThis, uint32_t sid)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    if (    sid < pState->cSurfaces
+        &&  pState->paSurface[sid].id == sid)
+    {
+        PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+
+        Log(("vmsvga3dSurfaceDestroy id %x\n", sid));
+
+        /* Check all contexts if this surface is used as a render target or active texture. */
+        for (uint32_t cid = 0; cid < pState->cContexts; cid++)
+        {
+            PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+            if (pContext->id == cid)
+            {
+                for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+                {
+                    if (pContext->aSidActiveTexture[i] == sid)
+                        pContext->aSidActiveTexture[i] = SVGA3D_INVALID_ID;
+                }
+                if (pContext->sidRenderTarget == sid)
+                    pContext->sidRenderTarget = SVGA3D_INVALID_ID;
+            }
+        }
+
+        RTAvlU32Destroy(&pSurface->pSharedObjectTree, vmsvga3dSharedSurfaceDestroyTree, pSurface);
+        Assert(pSurface->pSharedObjectTree == NULL);
+
+        switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+        {
+        case SVGA3D_SURFACE_CUBEMAP:
+            AssertFailed(); /* @todo */
+            break;
+
+        case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+            if (pSurface->u.pIndexBuffer)
+                pSurface->u.pIndexBuffer->Release();
+            break;
+
+        case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+            if (pSurface->u.pVertexBuffer)
+                pSurface->u.pVertexBuffer->Release();
+            break;
+
+        case SVGA3D_SURFACE_HINT_TEXTURE:
+        case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+            if (pSurface->u.pTexture)
+                pSurface->u.pTexture->Release();
+            if (pSurface->bounce.pTexture)
+                pSurface->bounce.pTexture->Release();
+            break;
+
+        case SVGA3D_SURFACE_HINT_RENDERTARGET:
+        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE:    /* @todo actual texture surface not supported */
+            if (pSurface->fStencilAsTexture)
+                pSurface->u.pTexture->Release();
+            else
+            if (pSurface->u.pSurface)
+                pSurface->u.pSurface->Release();
+            break;
+
+        default:
+            AssertMsg(!pSurface->u.pSurface, ("type=%x\n", (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))));
+            break;
+        }
+
+        if (pSurface->pMipmapLevels)
+        {
+            for (uint32_t face=0; face < pSurface->cFaces; face++)
+            {
+                for (uint32_t i=0; i < pSurface->faces[face].numMipLevels; i++)
+                {
+                    uint32_t idx = i + face * pSurface->faces[0].numMipLevels;
+                    if (pSurface->pMipmapLevels[idx].pSurfaceData)
+                        RTMemFree(pSurface->pMipmapLevels[idx].pSurfaceData);
+                }
+            }
+            RTMemFree(pSurface->pMipmapLevels);
+        }
+        if (pSurface->pQuery)
+            pSurface->pQuery->Release();
+
+        memset(pSurface, 0, sizeof(*pSurface));
+        pSurface->id = SVGA3D_INVALID_ID;
+    }
+    else
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+    return VINF_SUCCESS;
+}
+
+/* Get the shared surface copy or create a new one. */
+static PVMSVGA3DSHAREDSURFACE vmsvga3dSurfaceGetSharedCopy(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface)
+{
+    Assert(pSurface->hSharedObject);
+
+    PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTAvlU32Get(&pSurface->pSharedObjectTree, pContext->id);
+    if (!pSharedSurface)
+    {
+        HRESULT hr;
+        bool    ret;
+
+        Log(("vmsvga3dSurfaceGetSharedCopy: Create shared texture copy d3d (%d,%d) cMip=%d usage %x format %x.\n", 
+              pSurface->pMipmapLevels[0].size.width, 
+              pSurface->pMipmapLevels[0].size.height, 
+              pSurface->faces[0], 
+              pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+              pSurface->formatD3D));
+            
+        pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTMemAllocZ(sizeof(*pSharedSurface));
+        AssertReturn(pSharedSurface, NULL);
+
+        pSharedSurface->Core.Key = pContext->id;
+        ret = RTAvlU32Insert(&pSurface->pSharedObjectTree, &pSharedSurface->Core);
+        AssertReturn(ret, NULL);
+
+        /* Create shadow copy of the original shared texture. Shared d3d resources require Vista+ and have some restrictions. */
+        hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width, 
+                                              pSurface->pMipmapLevels[0].size.height, 
+                                              pSurface->faces[0].numMipLevels, 
+                                              pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET /* required for use as a StretchRect destination */,
+                                              pSurface->formatD3D,
+                                              D3DPOOL_DEFAULT,
+                                              &pSharedSurface->u.pTexture,
+                                              &pSurface->hSharedObject);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceGetSharedCopy: CreateTexture failed with %x\n", hr), NULL);
+    }
+    return pSharedSurface;
+}
+
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+#define vmsvga3dSurfaceTrackUsage(a, b, c)
+#define vmsvga3dSurfaceFlush(a, b)
+#else
+/* Inject a query event into the D3D pipeline so we can check when usage of this surface has finished. 
+ * (D3D does not synchronize shared surface usage)
+ */
+static int vmsvga3dSurfaceTrackUsage(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t sid)
+{
+    PVMSVGA3DSTATE   pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE pSurface  = &pState->paSurface[sid];
+    HRESULT          hr;
+
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    /* Nothing to do if this surface hasn't been shared. */
+    if (pSurface->pSharedObjectTree == NULL)
+        return VINF_SUCCESS;
+
+    Log(("vmsvga3dSurfaceTrackUsage: track usage of surface id=%x (cid=%x)\n", sid, pContext->id));
+
+    /* Release the previous query object. */
+    if (pSurface->pQuery)
+    {
+        Log(("vmsvga3dSurfaceTrackUsage: release old query object\n"));
+        pSurface->pQuery->Release();
+        pSurface->pQuery = NULL;
+    }
+    hr = pContext->pDevice->CreateQuery(D3DQUERYTYPE_EVENT, &pSurface->pQuery);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: CreateQuery failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    hr = pSurface->pQuery->Issue(D3DISSUE_END);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: Issue failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return VINF_SUCCESS;
+}
+
+
+/* Wait for all drawing, that uses this surface, to finish. */
+static int vmsvga3dSurfaceFlush(PVGASTATE pThis, PVMSVGA3DSURFACE pSurface)
+{
+    HRESULT hr;
+
+    if (!pSurface->pQuery)
+    {
+        LogFlow(("vmsvga3dSurfaceFlush: no query object\n"));
+        return VINF_SUCCESS;    /* nothing to wait for */
+    }
+    Assert(pSurface->pSharedObjectTree);
+
+    Log(("vmsvga3dSurfaceFlush: wait for draw to finish (sid=%x)\n", pSurface->id));
+    while (true)
+    {
+        hr = pSurface->pQuery->GetData(NULL, 0, D3DGETDATA_FLUSH);
+        if (hr != S_FALSE) break;
+
+        RTThreadSleep(1);
+    }
+    AssertMsgReturn(hr == S_OK, ("vmsvga3dSurfaceFinishDrawing: GetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    pSurface->pQuery->Release();
+    pSurface->pQuery = NULL;
+
+    return VINF_SUCCESS;
+}
+#endif /* VBOX_VMSVGA3D_WITH_OPENGL */
+
+int vmsvga3dSurfaceCopy(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurfaceSrc;
+    uint32_t            sidSrc = src.sid;
+    PVMSVGA3DSURFACE    pSurfaceDest;
+    uint32_t            sidDest = dest.sid;
+    int                 rc = VINF_SUCCESS;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sidSrc < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidSrc < pState->cSurfaces && pState->paSurface[sidSrc].id == sidSrc, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < pState->cSurfaces && pState->paSurface[sidDest].id == sidDest, VERR_INVALID_PARAMETER);
+
+    pSurfaceSrc  = &pState->paSurface[sidSrc];
+    pSurfaceDest = &pState->paSurface[sidDest];
+
+    AssertReturn(pSurfaceSrc->faces[0].numMipLevels > src.mipmap, VERR_INVALID_PARAMETER);
+    AssertReturn(pSurfaceDest->faces[0].numMipLevels > dest.mipmap, VERR_INVALID_PARAMETER);
+
+   // AssertMsgReturn(pSurfaceSrc->format == pSurfaceDest->format, ("Format mismatch (%d vs %d)!!\n", pSurfaceSrc->format, pSurfaceDest->format), VERR_INVALID_PARAMETER);
+
+    bool fSrcTexture  = !!(pSurfaceSrc->flags & SVGA3D_SURFACE_HINT_TEXTURE);
+    bool fDestTexture = !!(pSurfaceDest->flags & SVGA3D_SURFACE_HINT_TEXTURE);
+
+    if (    fDestTexture
+        &&  !pSurfaceDest->u.pSurface
+        &&  pSurfaceSrc->u.pSurface)
+    {
+        uint32_t            cid;
+        PVMSVGA3DCONTEXT    pContext;
+
+        /* @todo stricter checks for associated context */
+        cid = pSurfaceSrc->idAssociatedContext;
+        if (    cid >= pState->cContexts
+            ||  pState->paContext[cid].id != cid)
+        {
+            Log(("vmsvga3dSurfaceCopy invalid context id!\n"));
+            return VERR_INVALID_PARAMETER;
+        }
+        pContext = &pState->paContext[cid];
+
+        Log(("vmsvga3dSurfaceCopy: create texture surface id=%x type=%d format=%d -> create texture\n", sidDest, pSurfaceDest->flags, pSurfaceDest->format));
+        rc = vmsvga3dCreateTexture(pContext, cid, pSurfaceDest);
+        AssertRCReturn(rc, rc);
+    }
+
+    if (    pSurfaceSrc->u.pSurface
+        &&  pSurfaceDest->u.pSurface)
+    {
+        uint32_t                cid;
+        PVMSVGA3DCONTEXT        pContext;
+        IDirect3DTexture9      *pSrcTexture = pSurfaceSrc->u.pTexture;
+
+        /* @todo stricter checks for associated context */
+        cid = pSurfaceDest->idAssociatedContext;
+        if (    cid >= pState->cContexts
+            ||  pState->paContext[cid].id != cid)   
+        {
+            Log(("vmsvga3dSurfaceCopy invalid context id!\n"));
+            return VERR_INVALID_PARAMETER;
+        }
+        pContext = &pState->paContext[cid];
+
+        /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+        vmsvga3dSurfaceFlush(pThis, pSurfaceSrc);
+        vmsvga3dSurfaceFlush(pThis, pSurfaceDest);
+
+#ifndef VBOX_VMSVGA3D_WITH_OPENGL
+        if (    fSrcTexture 
+            &&  pSurfaceSrc->idAssociatedContext != cid)
+        {
+            Log(("vmsvga3dSurfaceCopy; using texture %x created for another context (%d vs %d)\n", sidSrc, pSurfaceSrc->idAssociatedContext, cid));
+
+            PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pThis, pContext, pSurfaceSrc);
+            AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+            pSrcTexture = pSharedSurface->u.pTexture;
+        }
+#endif
+
+        for (uint32_t i = 0; i < cCopyBoxes; i++)
+        {
+            HRESULT     hr;
+            RECT        RectSrc;
+            RECT        RectDest;
+            IDirect3DSurface9 *pSrc;
+            IDirect3DSurface9 *pDest;
+
+            RectSrc.left    = pBox[i].srcx;
+            RectSrc.top     = pBox[i].srcy;
+            RectSrc.right   = pBox[i].srcx + pBox[i].w;   /* exclusive */
+            RectSrc.bottom  = pBox[i].srcy + pBox[i].h;   /* exclusive */
+            RectDest.left   = pBox[i].x;
+            RectDest.top    = pBox[i].y;
+            RectDest.right  = pBox[i].x + pBox[i].w;   /* exclusive */
+            RectDest.bottom = pBox[i].y + pBox[i].h;   /* exclusive */
+
+            Log(("vmsvga3dSurfaceCopy: (StretchRect) copy src sid=%x face=%d mipmap=%d (%d,%d)(%d,%d) to dest sid=%x face=%d mipmap=%d (%d,%d)\n", sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom, sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+
+            if (    sidSrc == sidDest
+                &&  pBox[i].srcx == pBox[i].x
+                &&  pBox[i].srcy == pBox[i].y)
+            {
+                Log(("vmsvga3dSurfaceCopy: redundant copy to the same surface at the same coordinates. Ignore. \n"));
+                continue;
+            }
+            Assert(sidSrc != sidDest);
+            Assert(!pBox[i].srcz && !pBox[i].z);
+
+            if (fSrcTexture)
+            {
+                hr = pSrcTexture->GetSurfaceLevel(src.mipmap /* Texture level */,
+                                                  &pSrc);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+            else
+                pSrc = pSurfaceSrc->u.pSurface;
+
+            if (fDestTexture)
+            {
+                hr = pSurfaceDest->u.pTexture->GetSurfaceLevel(dest.mipmap /* Texture level */,
+                                                              &pDest);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+            else
+                pDest = pSurfaceDest->u.pSurface;
+
+            /* UpdateSurface is too picky; use StretchRect instead */
+            hr = pContext->pDevice->StretchRect(pSrc, &RectSrc, pDest, &RectDest, D3DTEXF_NONE);
+
+            /* GetSurfaceLevel increases the reference count; release the objects again. */
+            if (fDestTexture)
+                pDest->Release();
+            if (fSrcTexture)
+                pSrc->Release();
+
+            /* Track the StretchRect operation. */
+            vmsvga3dSurfaceTrackUsage(pThis, pContext, sidSrc);
+            vmsvga3dSurfaceTrackUsage(pThis, pContext, sidDest);
+
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: UpdateSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+    }
+    else
+    for (uint32_t i = 0; i < cCopyBoxes; i++)
+    {
+        HRESULT        hr = D3D_OK;
+        D3DLOCKED_RECT LockedSrcRect;
+        D3DLOCKED_RECT LockedDestRect;
+        RECT           Rect;
+
+        Rect.left   = pBox[i].srcx;
+        Rect.top    = pBox[i].srcy;
+        Rect.right  = pBox[i].srcx + pBox[i].w;   /* exclusive */
+        Rect.bottom = pBox[i].srcy + pBox[i].h;   /* exclusive */
+
+        Log(("vmsvga3dSurfaceCopy: (manual) copy src=%x src=%x face=%d (%d,%d)(%d,%d) to dest=%x src=%x face=%d (%d,%d)\n", sidSrc, src.face, src.mipmap, Rect.left, Rect.top, Rect.right, Rect.bottom, sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+            
+        Assert(!pBox[i].srcz && !pBox[i].z);
+
+        if (!pSurfaceSrc->u.pSurface)
+        {
+            LockedSrcRect.pBits = (void *)pSurfaceSrc->pMipmapLevels[src.mipmap].pSurfaceData;
+            LockedSrcRect.Pitch  = pSurfaceSrc->pMipmapLevels[src.mipmap].cbSurfacePitch;
+        }
+        else
+        {
+            /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+            vmsvga3dSurfaceFlush(pThis, pSurfaceSrc);
+
+            if (fSrcTexture)
+            {
+                Assert(!pSurfaceSrc->bounce.pTexture);
+                hr = pSurfaceSrc->u.pTexture->LockRect(src.mipmap, /* Texture level */
+                                                       &LockedSrcRect,
+                                                       &Rect,
+                                                       D3DLOCK_READONLY);
+            }
+            else
+                hr = pSurfaceSrc->u.pSurface->LockRect(&LockedSrcRect,
+                                                       &Rect,
+                                                       D3DLOCK_READONLY);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+
+        if (!pSurfaceDest->u.pSurface)
+        {
+            LockedDestRect.pBits = (void *)pSurfaceDest->pMipmapLevels[dest.mipmap].pSurfaceData;
+            LockedDestRect.Pitch  = pSurfaceDest->pMipmapLevels[dest.mipmap].cbSurfacePitch;
+        }
+        else
+        {
+            /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+            vmsvga3dSurfaceFlush(pThis, pSurfaceDest);
+
+            if (fDestTexture)
+            {
+                Assert(!pSurfaceDest->bounce.pTexture);
+                hr = pSurfaceDest->u.pTexture->LockRect(dest.mipmap, /* texture level */
+                                                        &LockedDestRect,
+                                                        &Rect,
+                                                        0);
+            }
+            else
+                hr = pSurfaceDest->u.pSurface->LockRect(&LockedDestRect,
+                                                        &Rect,
+                                                        0);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+
+        uint8_t *pDest = (uint8_t *)LockedDestRect.pBits + LockedDestRect.Pitch * pBox[i].y + pBox[i].x * pSurfaceDest->cbBlock;
+        uint8_t *pSrc  = (uint8_t *)LockedSrcRect.pBits + LockedSrcRect.Pitch * pBox[i].srcy + pBox[i].srcx * pSurfaceSrc->cbBlock;
+
+        for (int32_t j = Rect.top; j < Rect.bottom; j++)
+        {
+            memcpy(pDest, pSrc, pBox[i].w * pSurfaceSrc->cbBlock);
+
+            pDest += LockedDestRect.Pitch;
+            pSrc  += LockedSrcRect.Pitch;
+        }
+
+        if (pSurfaceDest->u.pSurface)
+        {
+            if (fDestTexture)
+                hr = pSurfaceDest->u.pTexture->UnlockRect(dest.mipmap /* Texture level */);
+            else
+                hr = pSurfaceDest->u.pSurface->UnlockRect();
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: Unlock failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+
+        if (pSurfaceSrc->u.pSurface)
+        {
+            if (fSrcTexture)
+                hr = pSurfaceSrc->u.pTexture->UnlockRect(src.mipmap /* Texture level */);
+            else
+                hr = pSurfaceSrc->u.pSurface->UnlockRect();
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: Unlock failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+
+/* Create D3D texture object for the specified surface. */
+static int vmsvga3dCreateTexture(PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface)
+{
+    HRESULT hr;
+    IDirect3DTexture9 *pTexture;
+
+    Assert(pSurface->hSharedObject == NULL);
+
+    if (    pSurface->formatD3D == D3DFMT_D24S8
+        ||  pSurface->formatD3D == D3DFMT_D24X8)
+    {
+        Assert(pSurface->faces[0].numMipLevels == 1);
+        /* Use the INTZ format for a depth/stencil surface that will be used as a texture */
+        hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width, 
+                                              pSurface->pMipmapLevels[0].size.height, 
+                                              1,
+                                              D3DUSAGE_DEPTHSTENCIL,
+                                              FOURCC_INTZ,
+                                              D3DPOOL_DEFAULT,
+                                              &pSurface->u.pTexture,
+                                              &pSurface->hSharedObject /* might result in poor performance */);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCreateTexture: CreateTexture INTZ failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        pTexture = pSurface->u.pTexture;
+
+        pSurface->fStencilAsTexture = true;
+    }
+    else
+    {
+        hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width, 
+                                              pSurface->pMipmapLevels[0].size.height, 
+                                              pSurface->faces[0].numMipLevels, 
+                                              pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET /* required for use as a StretchRect destination */,
+                                              pSurface->formatD3D,
+                                              D3DPOOL_DEFAULT,
+                                              &pSurface->u.pTexture,
+                                              &pSurface->hSharedObject);
+        if (hr == D3D_OK)
+        {
+            /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */ 
+            hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width, 
+                                                  pSurface->pMipmapLevels[0].size.height, 
+                                                  pSurface->faces[0].numMipLevels, 
+                                                  (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+                                                  pSurface->formatD3D,
+                                                  D3DPOOL_SYSTEMMEM,
+                                                  &pSurface->bounce.pTexture,
+                                                  NULL);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCreateTexture: CreateTexture (systemmem) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            pTexture = pSurface->bounce.pTexture;
+        }
+        else
+        {
+            Log(("Format not accepted -> try old method\n"));
+            /* The format was probably not accepted; fall back to our old mode. */
+            hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width, 
+                                                  pSurface->pMipmapLevels[0].size.height, 
+                                                  pSurface->faces[0].numMipLevels, 
+                                                  (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) |  D3DUSAGE_DYNAMIC /* Lockable */,
+                                                  pSurface->formatD3D,
+                                                  D3DPOOL_DEFAULT,
+                                                  &pSurface->u.pTexture,
+                                                  &pSurface->hSharedObject /* might result in poor performance */);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCreateTexture: CreateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            pTexture = pSurface->u.pTexture;
+        }
+    }
+
+    if (pSurface->autogenFilter != SVGA3D_TEX_FILTER_NONE)
+    {
+        /* Set the mip map generation filter settings. */
+        hr = pSurface->u.pTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)pSurface->autogenFilter);
+        AssertMsg(hr == D3D_OK, ("vmsvga3dCreateTexture: SetAutoGenFilterType failed with %x\n", hr));
+    }
+
+    if (pSurface->fDirty)
+    {
+        Log(("vmsvga3dCreateTexture: sync dirty texture\n"));
+        for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+        {
+            if (pSurface->pMipmapLevels[i].fDirty)
+            {
+                D3DLOCKED_RECT LockedRect;
+
+                hr = pTexture->LockRect(i, /* texture level */
+                                        &LockedRect,
+                                        NULL,   /* entire texture */
+                                        0);
+
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCreateTexture: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                Log(("vmsvga3dCreateTexture: sync dirty texture mipmap level %d (pitch %x vs %x)\n", i, LockedRect.Pitch, pSurface->pMipmapLevels[i].cbSurfacePitch));
+
+                uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+                uint8_t *pSrc  = (uint8_t *)pSurface->pMipmapLevels[i].pSurfaceData;
+                for (uint32_t j = 0; j < pSurface->pMipmapLevels[i].size.height; j++)
+                {
+                    memcpy(pDest, pSrc, pSurface->pMipmapLevels[i].cbSurfacePitch);
+
+                    pDest += LockedRect.Pitch;
+                    pSrc  += pSurface->pMipmapLevels[i].cbSurfacePitch;
+                }
+
+                hr = pTexture->UnlockRect(i /* texture level */);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCreateTexture: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                pSurface->pMipmapLevels[i].fDirty = false;
+            }
+        }
+        if (pSurface->bounce.pTexture)
+        {
+            Log(("vmsvga3dCreateTexture: sync dirty texture from bounce buffer\n"));
+
+            hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCreateTexture: UpdateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+            /* We will now use the bounce texture for all memory accesses, so free our surface memory buffer. */
+            for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+            {
+                RTMemFree(pSurface->pMipmapLevels[i].pSurfaceData);
+                pSurface->pMipmapLevels[i].pSurfaceData = NULL;
+            }
+        }
+        pSurface->fDirty = false;
+    }
+    pSurface->flags              |= SVGA3D_SURFACE_HINT_TEXTURE;
+    pSurface->idAssociatedContext = idAssociatedContext;
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dBox destBox, SVGA3dSurfaceImageId src, SVGA3dBox srcBox, SVGA3dStretchBltMode mode)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurfaceSrc;
+    uint32_t            sidSrc = src.sid;
+    PVMSVGA3DSURFACE    pSurfaceDest;
+    uint32_t            sidDest = dest.sid;
+    int                 rc = VINF_SUCCESS;
+    uint32_t            cid;
+    PVMSVGA3DCONTEXT    pContext;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sidSrc < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidSrc < pState->cSurfaces && pState->paSurface[sidSrc].id == sidSrc, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sidDest < pState->cSurfaces && pState->paSurface[sidDest].id == sidDest, VERR_INVALID_PARAMETER);
+
+    pSurfaceSrc  = &pState->paSurface[sidSrc];
+    pSurfaceDest = &pState->paSurface[sidDest];
+    AssertReturn(pSurfaceSrc->faces[0].numMipLevels > src.mipmap, VERR_INVALID_PARAMETER);
+    AssertReturn(pSurfaceDest->faces[0].numMipLevels > dest.mipmap, VERR_INVALID_PARAMETER);
+
+    Log(("vmsvga3dSurfaceStretchBlt: src sid=%x (%d,%d)(%d,%d) dest sid=%x (%d,%d)(%d,%d) mode=%x\n", src.sid, srcBox.x, srcBox.y, srcBox.x + srcBox.w, srcBox.y + srcBox.h, dest.sid, destBox.x, destBox.y, destBox.x + destBox.w, destBox.y + destBox.h, mode));
+
+    /* @todo stricter checks for associated context */
+    cid = pSurfaceDest->idAssociatedContext;
+    if (cid == SVGA3D_INVALID_ID)
+        cid = pSurfaceSrc->idAssociatedContext;
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSurfaceStretchBlt invalid context id!\n"));
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+    pContext = &pState->paContext[cid];
+
+    if (!pSurfaceSrc->u.pSurface)
+    {
+        /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
+        Log(("vmsvga3dSurfaceStretchBlt: unknown src surface id=%x type=%d format=%d -> create texture\n", sidSrc, pSurfaceSrc->flags, pSurfaceSrc->format));
+        rc = vmsvga3dCreateTexture(pContext, cid, pSurfaceSrc);
+        AssertRCReturn(rc, rc);
+    }
+
+    if (!pSurfaceDest->u.pSurface)
+    {
+        /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
+        Log(("vmsvga3dSurfaceStretchBlt: unknown dest surface id=%x type=%d format=%d -> create texture\n", sidDest, pSurfaceDest->flags, pSurfaceDest->format));
+        rc = vmsvga3dCreateTexture(pContext, cid, pSurfaceDest);
+        AssertRCReturn(rc, rc);
+    }
+
+    /* Flush the drawing pipeline for this surface as it could be used in a shared context. */
+    vmsvga3dSurfaceFlush(pThis, pSurfaceSrc);
+    vmsvga3dSurfaceFlush(pThis, pSurfaceDest);
+
+    bool fSrcTexture  = !!(pSurfaceSrc->flags & SVGA3D_SURFACE_HINT_TEXTURE);
+    bool fDestTexture = !!(pSurfaceDest->flags & SVGA3D_SURFACE_HINT_TEXTURE);
+
+    HRESULT                 hr;
+    RECT                    RectSrc;
+    RECT                    RectDest;
+    D3DTEXTUREFILTERTYPE    moded3d;
+    IDirect3DSurface9      *pSrc;
+    IDirect3DSurface9      *pDest;
+
+    RectSrc.left    = srcBox.x;
+    RectSrc.top     = srcBox.y;
+    RectSrc.right   = srcBox.x + srcBox.w;   /* exclusive */
+    RectSrc.bottom  = srcBox.y + srcBox.h;   /* exclusive */
+    RectDest.left   = destBox.x;
+    RectDest.top    = destBox.y;
+    RectDest.right  = destBox.x + destBox.w;   /* exclusive */
+    RectDest.bottom = destBox.y + destBox.h;   /* exclusive */
+
+    Assert(!destBox.z && !srcBox.z);
+
+    if (fSrcTexture)
+    {
+        hr = pSurfaceSrc->u.pTexture->GetSurfaceLevel(src.mipmap /* Texture level */,
+                                                      &pSrc);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+    else
+        pSrc = pSurfaceSrc->u.pSurface;
+
+    if (fDestTexture)
+    {
+        hr = pSurfaceDest->u.pTexture->GetSurfaceLevel(dest.mipmap /* Texture level */,
+                                                      &pDest);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+    else
+        pDest = pSurfaceDest->u.pSurface;
+
+    switch (mode)
+    {
+    case SVGA3D_STRETCH_BLT_POINT:
+        moded3d = D3DTEXF_POINT;
+        break;
+
+    case SVGA3D_STRETCH_BLT_LINEAR:
+        moded3d = D3DTEXF_LINEAR;
+        break;
+
+    default:
+        AssertFailed();
+        moded3d = D3DTEXF_NONE;
+        break;
+    }
+
+    hr = pContext->pDevice->StretchRect(pSrc, &RectSrc, pDest, &RectDest, moded3d);
+
+    /* GetSurfaceLevel increases the reference count; release the objects again. */
+    if (fDestTexture)
+        pDest->Release();
+    if (fSrcTexture)
+        pSrc->Release();
+
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    /* Track the StretchRect operation. */
+    vmsvga3dSurfaceTrackUsage(pThis, pContext, sidSrc);
+    vmsvga3dSurfaceTrackUsage(pThis, pContext, sidDest);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceDMA(PVGASTATE pThis, SVGA3dGuestImage guest, SVGA3dSurfaceImageId host, SVGA3dTransferType transfer, uint32_t cCopyBoxes, SVGA3dCopyBox *pBoxes)
+{
+    PVMSVGA3DSTATE          pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE        pSurface;
+    PVMSVGA3DMIPMAPLEVEL    pMipLevel;
+    uint32_t                sid = host.sid;
+    int                     rc = VINF_SUCCESS;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    pSurface = &pState->paSurface[sid];
+    AssertReturn(pSurface->faces[0].numMipLevels > host.mipmap, VERR_INVALID_PARAMETER);
+    pMipLevel = &pSurface->pMipmapLevels[host.mipmap];
+
+    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
+        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+    else
+        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%x cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, transfer, cCopyBoxes));
+
+    if (!pSurface->u.pSurface)
+    {
+        AssertReturn(pSurface->pMipmapLevels[host.mipmap].pSurfaceData, VERR_INTERNAL_ERROR);
+
+        for (unsigned i = 0; i < cCopyBoxes; i++)
+        {
+            unsigned uDestOffset;
+            unsigned cbSrcPitch;
+
+            Log(("Copy box %d (%d,%d,%d)(%d,%d,%d)\n", i, pBoxes[i].srcx, pBoxes[i].srcy, pBoxes[i].srcz, pBoxes[i].w, pBoxes[i].h, pBoxes[i].d));
+            /* Apparently we're supposed to clip it (gmr test sample) */
+            if (pBoxes[i].x + pBoxes[i].w > pMipLevel->size.width)
+                pBoxes[i].w = pMipLevel->size.width - pBoxes[i].x;
+            if (pBoxes[i].y + pBoxes[i].h > pMipLevel->size.height)
+                pBoxes[i].h = pMipLevel->size.height - pBoxes[i].y;
+            if (pBoxes[i].z + pBoxes[i].d > pMipLevel->size.depth)
+                pBoxes[i].d = pMipLevel->size.depth - pBoxes[i].z;
+
+            if (    !pBoxes[i].w
+                ||  !pBoxes[i].h
+                ||  !pBoxes[i].d
+                ||   pBoxes[i].x > pMipLevel->size.width
+                ||   pBoxes[i].y > pMipLevel->size.height
+                ||   pBoxes[i].z > pMipLevel->size.depth)
+            {
+                Log(("Empty box; skip\n"));
+                continue;
+            }
+
+            uDestOffset = pBoxes[i].x * pSurface->cbBlock + pBoxes[i].y * pMipLevel->cbSurfacePitch + pBoxes[i].z * pMipLevel->size.height * pMipLevel->cbSurfacePitch;
+            AssertReturn(uDestOffset + pBoxes[i].w * pSurface->cbBlock * pBoxes[i].h * pBoxes[i].d <= pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+
+            cbSrcPitch = (guest.pitch == 0) ? pBoxes[i].w * pSurface->cbBlock : guest.pitch;
+
+            rc = vmsvgaGMRTransfer(pThis, 
+                                    transfer,
+                                    (uint8_t *)pMipLevel->pSurfaceData + uDestOffset, 
+                                    pMipLevel->cbSurfacePitch, 
+                                    guest.ptr,
+                                    pBoxes[i].srcx * pSurface->cbBlock + (pBoxes[i].srcy + pBoxes[i].srcz * pBoxes[i].h) * cbSrcPitch,
+                                    cbSrcPitch,
+                                    pBoxes[i].w * pSurface->cbBlock,
+                                    pBoxes[i].d * pBoxes[i].h);
+
+            LogFlow(("first line:\n%.*Rhxd\n", pMipLevel->cbSurfacePitch, pMipLevel->pSurfaceData));
+
+            AssertRC(rc);
+        }
+        pSurface->pMipmapLevels[host.mipmap].fDirty = true;
+        pSurface->fDirty = true;
+    }
+    else
+    {
+        HRESULT hr = D3D_OK;
+        DWORD   dwFlags = 0;
+
+        /* Flush the drawing pipeline for this surface as it could be used in a shared context. */
+        vmsvga3dSurfaceFlush(pThis, pSurface);
+
+        if (transfer == SVGA3D_READ_HOST_VRAM)
+            dwFlags |= D3DLOCK_READONLY;
+
+        for (unsigned i = 0; i < cCopyBoxes; i++)
+        {
+            bool fTexture = false;
+            bool fVertex = false;
+            bool fRenderTargetTexture = false;
+            unsigned cbSrcPitch;
+
+            /* Apparently we're supposed to clip it (gmr test sample) */
+            if (pBoxes[i].x + pBoxes[i].w > pMipLevel->size.width)
+                pBoxes[i].w = pMipLevel->size.width - pBoxes[i].x;
+            if (pBoxes[i].y + pBoxes[i].h > pMipLevel->size.height)
+                pBoxes[i].h = pMipLevel->size.height - pBoxes[i].y;
+            if (pBoxes[i].z + pBoxes[i].d > pMipLevel->size.depth)
+                pBoxes[i].d = pMipLevel->size.depth - pBoxes[i].z;
+
+            Assert((pBoxes[i].d == 1 || pBoxes[i].d == 0) && pBoxes[i].z == 0);
+
+            if (    !pBoxes[i].w
+                ||  !pBoxes[i].h
+                ||   pBoxes[i].x > pMipLevel->size.width
+                ||   pBoxes[i].y > pMipLevel->size.height)
+            {
+                Log(("Empty box; skip\n"));
+                continue;
+            }
+
+            cbSrcPitch = (guest.pitch == 0) ? pBoxes[i].w * pSurface->cbBlock : guest.pitch;
+
+            switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+            {
+            case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                fRenderTargetTexture = true;
+                /* no break */
+            case SVGA3D_SURFACE_HINT_TEXTURE:
+                fTexture = true;
+                /* no break */
+            case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+                if (pSurface->fStencilAsTexture)
+                    fTexture = true;
+                /* no break */
+            case SVGA3D_SURFACE_HINT_RENDERTARGET:
+            {
+                D3DLOCKED_RECT LockedRect;
+                RECT Rect;
+
+                Rect.left   = pBoxes[i].x;
+                Rect.top    = pBoxes[i].y;
+                Rect.right  = pBoxes[i].x + pBoxes[i].w;   /* exclusive */
+                Rect.bottom = pBoxes[i].y + pBoxes[i].h;   /* exclusive */
+
+                /* @todo inefficient for VRAM buffers!! */
+                if (fTexture)
+                {
+                    if (pSurface->bounce.pTexture)
+                    {
+                        if (    transfer == SVGA3D_READ_HOST_VRAM
+                            &&  fRenderTargetTexture
+                            &&  i == 0 /* only the first time */)
+                        {
+                            IDirect3DSurface9 *pSrc, *pDest;
+
+                            /* @todo stricter checks for associated context */
+                            uint32_t cid = pSurface->idAssociatedContext;
+                            if (    cid >= pState->cContexts
+                                ||  pState->paContext[cid].id != cid)
+                            {
+                                Log(("vmsvga3dSurfaceDMA invalid context id (%x - %x)!\n", cid, (cid >= pState->cContexts) ? -1 : pState->paContext[cid].id));
+                                AssertFailedReturn(VERR_INVALID_PARAMETER);
+                            }
+                            PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+
+                            /* @todo only sync when something was actually rendered (since the last sync) */
+                            Log(("vmsvga3dSurfaceDMA: sync bounce buffer\n"));
+                            hr = pSurface->bounce.pTexture->GetSurfaceLevel(host.mipmap, &pDest);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                            hr = pSurface->u.pTexture->GetSurfaceLevel(host.mipmap, &pSrc);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                            hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                            pSrc->Release();
+                            pDest->Release();
+                        }
+
+                        hr = pSurface->bounce.pTexture->LockRect(host.mipmap, /* texture level */
+                                                                 &LockedRect,
+                                                                 &Rect,
+                                                                 dwFlags);
+                    }
+                    else
+                        hr = pSurface->u.pTexture->LockRect(host.mipmap, /* texture level */
+                                                            &LockedRect,
+                                                            &Rect,
+                                                            dwFlags);
+                }
+                else
+                    hr = pSurface->u.pSurface->LockRect(&LockedRect,
+                                                        &Rect,
+                                                        dwFlags);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                if (fTexture)
+                    Log(("Lock TEXTURE (bounce=%d) memory for rectangle (%d,%d)(%d,%d)\n", !!(pSurface->bounce.pTexture), Rect.left, Rect.top, Rect.right, Rect.bottom));
+                else
+                    Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n", (pSurface->flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL) ? "DEPTH-STENCIL" : "RENDERTARGET", Rect.left, Rect.top, Rect.right, Rect.bottom));
+                
+                rc = vmsvgaGMRTransfer(pThis, 
+                                       transfer,
+                                       (uint8_t *)LockedRect.pBits, 
+                                       LockedRect.Pitch, 
+                                       guest.ptr,
+                                       pBoxes[i].srcx * pSurface->cbBlock + pBoxes[i].srcy * cbSrcPitch,
+                                       cbSrcPitch,
+                                       pBoxes[i].w * pSurface->cbBlock,
+                                       pBoxes[i].h);
+                AssertRC(rc);
+
+                LogFlow(("first line:\n%.*Rhxd\n", pBoxes[i].w * pSurface->cbBlock, LockedRect.pBits));
+
+                if (fTexture)
+                {
+                    if (pSurface->bounce.pTexture)
+                    {
+                        hr = pSurface->bounce.pTexture->UnlockRect(host.mipmap);
+                        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                        if (transfer == SVGA3D_WRITE_HOST_VRAM)
+                        {
+                            /* @todo stricter checks for associated context */
+                            uint32_t cid = pSurface->idAssociatedContext;
+                            if (    cid >= pState->cContexts
+                                ||  pState->paContext[cid].id != cid)
+                            {
+                                Log(("vmsvga3dSurfaceDMA invalid context id!\n"));
+                                AssertFailedReturn(VERR_INVALID_PARAMETER);
+                            }
+                            PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+
+                            Log(("vmsvga3dSurfaceDMA: sync texture from bounce buffer\n"));
+
+                            /* Copy the new contents to the actual texture object. */
+                            hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: UpdateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                            /* Track the copy operation. */
+                            vmsvga3dSurfaceTrackUsage(pThis, pContext, pSurface->id);
+                        }
+                    }
+                    else
+                        hr = pSurface->u.pTexture->UnlockRect(host.mipmap);
+                }
+                else
+                    hr = pSurface->u.pSurface->UnlockRect();
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                break;
+            }
+
+            case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+                fVertex = true;
+                /* no break */
+
+            case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+            {
+                uint8_t *pData;
+                unsigned uDestOffset;
+
+                uDestOffset = pBoxes[i].x * pSurface->cbBlock + pBoxes[i].y * pSurface->pMipmapLevels[host.mipmap].cbSurfacePitch;
+                AssertReturn(uDestOffset + pBoxes[i].w * pSurface->cbBlock + (pBoxes[i].h - 1) * pSurface->pMipmapLevels[host.mipmap].cbSurfacePitch <= pSurface->pMipmapLevels[host.mipmap].cbSurface, VERR_INTERNAL_ERROR);
+
+                /* @todo lock only as much as we really need */
+                if (fVertex)
+                    hr = pSurface->u.pVertexBuffer->Lock(0, 0, (void **)&pData, dwFlags);
+                else        
+                    hr = pSurface->u.pIndexBuffer->Lock(0, 0, (void **)&pData, dwFlags);
+                AssertMsg(hr == D3D_OK, ("vmsvga3dSurfaceDMA: Lock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+
+                Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n", (fVertex) ? "vertex" : "index", pBoxes[i].x, pBoxes[i].y, pBoxes[i].x + pBoxes[i].w, pBoxes[i].y + pBoxes[i].h));
+
+                rc = vmsvgaGMRTransfer(pThis, 
+                                       transfer,
+                                       pData + uDestOffset, 
+                                       pSurface->pMipmapLevels[host.mipmap].cbSurfacePitch, 
+                                       guest.ptr,
+                                       pBoxes[i].srcx * pSurface->cbBlock + pBoxes[i].srcy * cbSrcPitch,
+                                       cbSrcPitch,
+                                       pBoxes[i].w * pSurface->cbBlock,
+                                       pBoxes[i].h);
+                AssertRC(rc);
+
+                LogFlow(("first line:\n%.*Rhxd\n", cbSrcPitch, pData));
+
+                if (fVertex)
+                    hr = pSurface->u.pVertexBuffer->Unlock();
+                else
+                    hr = pSurface->u.pIndexBuffer->Unlock();
+                AssertMsg(hr == D3D_OK, ("vmsvga3dSurfaceDMA: Unlock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+                break;
+            }
+
+            default:
+                AssertFailed();
+                break;
+            }
+        }
+    }
+    return rc;
+}
+
+int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, uint32_t dest, SVGASignedRect destRect, SVGA3dSurfaceImageId src, SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *pRect)
+{
+    /* Requires SVGA_FIFO_CAP_SCREEN_OBJECT support */
+    Log(("vmsvga3dSurfaceBlitToScreen: dest=%d (%d,%d)(%d,%d) surface=%x (face=%d, mipmap=%d) (%d,%d)(%d,%d) cRects=%d\n", dest, destRect.left, destRect.top, destRect.right, destRect.bottom, src.sid, src.face, src.mipmap, srcRect.left, srcRect.top, srcRect.right, srcRect.bottom, cRects));
+    for (uint32_t i = 0; i < cRects; i++)
+    {
+        Log(("vmsvga3dSurfaceBlitToScreen: clipping rect %d (%d,%d)(%d,%d)\n", i, pRect[i].left, pRect[i].top, pRect[i].right, pRect[i].bottom));
+    }
+
+    /* @todo Only screen 0 for now. */
+    AssertReturn(dest == 0, VERR_INTERNAL_ERROR);
+    AssertReturn(src.mipmap == 0 && src.face == 0, VERR_INVALID_PARAMETER);
+    /* @todo scaling */
+    AssertReturn(destRect.right - destRect.left == srcRect.right - srcRect.left && destRect.bottom - destRect.top == srcRect.bottom - srcRect.top, VERR_INVALID_PARAMETER);
+
+    if (cRects == 0)
+    {
+        /* easy case; no clipping */
+        SVGA3dCopyBox        box;
+        SVGA3dGuestImage     dest;
+       
+        box.x       = destRect.left;
+        box.y       = destRect.top;
+        box.z       = 0;
+        box.w       = destRect.right - destRect.left;
+        box.h       = destRect.bottom - destRect.top;
+        box.d       = 1;
+        box.srcx    = srcRect.left;
+        box.srcy    = srcRect.top;
+        box.srcz    = 0;
+
+        dest.ptr.gmrId  = SVGA_GMR_FRAMEBUFFER;
+        dest.ptr.offset = 0;
+        dest.pitch      = pThis->svga.cbScanline;
+
+        int rc = vmsvga3dSurfaceDMA(pThis, dest, src, SVGA3D_READ_HOST_VRAM, 1, &box);
+        AssertRCReturn(rc, rc);
+
+        vgaR3UpdateDisplay(pThis, box.x, box.y, box.w, box.h);
+        return VINF_SUCCESS;
+    }
+    else
+    {
+        SVGA3dGuestImage dest;
+        SVGA3dCopyBox    box;
+
+        box.srcz    = 0;
+        box.z       = 0;
+        box.d       = 1;
+
+        dest.ptr.gmrId  = SVGA_GMR_FRAMEBUFFER;
+        dest.ptr.offset = 0;
+        dest.pitch      = pThis->svga.cbScanline;
+
+        /* @todo merge into one SurfaceDMA call */
+        for (uint32_t i = 0; i < cRects; i++)
+        {   
+            /* The clipping rectangle is relative to the top-left corner of srcRect & destRect. Adjust here. */
+            box.srcx = srcRect.left + pRect[i].left;
+            box.srcy = srcRect.top  + pRect[i].top;
+
+            box.x    = pRect[i].left + destRect.left;
+            box.y    = pRect[i].top  + destRect.top;
+            box.z    = 0;
+            box.w    = pRect[i].right - pRect[i].left;
+            box.h    = pRect[i].bottom - pRect[i].top;
+
+            int rc = vmsvga3dSurfaceDMA(pThis, dest, src, SVGA3D_READ_HOST_VRAM, 1, &box);
+            AssertRCReturn(rc, rc);
+
+            vgaR3UpdateDisplay(pThis, box.x, box.y, box.w, box.h);
+        }
+
+#if 0
+        {
+            PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+            HRESULT hr;
+            PVMSVGA3DSURFACE    pSurface;
+            PVMSVGA3DCONTEXT    pContext;
+            uint32_t            sid = src.sid;
+            AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+            AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+            pSurface = &pState->paSurface[sid];
+            uint32_t            cid;
+
+            /* @todo stricter checks for associated context */
+            cid = pSurface->idAssociatedContext;
+
+            if (    cid >= pState->cContexts
+                ||  pState->paContext[cid].id != cid)
+            {
+                Log(("vmsvga3dGenerateMipmaps invalid context id!\n"));
+                return VERR_INVALID_PARAMETER;
+            }
+            pContext = &pState->paContext[cid];
+
+            if (pSurface->id == 0x5e)
+            {
+                IDirect3DSurface9 *pSrc;
+
+                hr = pSurface->u.pTexture->GetSurfaceLevel(0/* Texture level */,
+                                                           &pSrc);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                pContext->pDevice->ColorFill(pSrc, NULL, (D3DCOLOR)0x11122255);
+                pSrc->Release();
+            }
+        }
+#endif
+
+        return VINF_SUCCESS;
+    }
+}
+
+int vmsvga3dGenerateMipmaps(PVGASTATE pThis, uint32_t sid, SVGA3dTextureFilter filter)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurface;
+    int                 rc = VINF_SUCCESS;
+    HRESULT             hr;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    pSurface = &pState->paSurface[sid];
+    AssertReturn(pSurface->idAssociatedContext != SVGA3D_INVALID_ID, VERR_INTERNAL_ERROR);
+
+    Assert(filter != SVGA3D_TEX_FILTER_FLATCUBIC);
+    Assert(filter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+    pSurface->autogenFilter = filter;
+
+    Log(("vmsvga3dGenerateMipmaps: sid=%x filter=%d\n", sid, filter));
+
+    if (!pSurface->u.pSurface)
+    {
+        PVMSVGA3DCONTEXT    pContext;
+        uint32_t            cid;
+
+        /* @todo stricter checks for associated context */
+        cid = pSurface->idAssociatedContext;
+
+        if (    cid >= pState->cContexts
+            ||  pState->paContext[cid].id != cid)
+        {
+            Log(("vmsvga3dGenerateMipmaps invalid context id!\n"));
+            return VERR_INVALID_PARAMETER;
+        }
+        pContext = &pState->paContext[cid];
+
+        /* Unknown surface type; turn it into a texture. */
+        Log(("vmsvga3dGenerateMipmaps: unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->flags, pSurface->format));
+        rc = vmsvga3dCreateTexture(pContext, cid, pSurface);
+        AssertRCReturn(rc, rc);
+    }
+    else
+    {
+        hr = pSurface->u.pTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)filter);
+        AssertMsg(hr == D3D_OK, ("vmsvga3dGenerateMipmaps: SetAutoGenFilterType failed with %x\n", hr));
+    }
+
+    /* Generate the mip maps. */
+    pSurface->u.pTexture->GenerateMipSubLevels();
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3dCopyRect *pRect)
+{
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE    pSurface;
+    int                 rc = VINF_SUCCESS;
+    PVMSVGA3DCONTEXT    pContext;
+    uint32_t            cid;
+    HRESULT             hr;
+    IDirect3DSurface9  *pBackBuffer;
+    IDirect3DSurface9  *pSurfaceD3D;
+    struct 
+    {
+        uint32_t        x;
+        uint32_t        y;
+        uint32_t        cx;
+        uint32_t        cy;
+    } srcViewPort;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+    pSurface = &pState->paSurface[sid];
+    AssertReturn(pSurface->idAssociatedContext != SVGA3D_INVALID_ID, VERR_INTERNAL_ERROR);
+
+    /* @todo stricter checks for associated context */
+    cid = pSurface->idAssociatedContext;
+    Log(("vmsvga3dCommandPresent: sid=%x cRects=%d cid=%x\n", sid, cRects, cid));
+    for (uint32_t i=0; i < cRects; i++)
+    {
+        Log(("vmsvga3dCommandPresent: rectangle %d src=(%d,%d) (%d,%d)(%d,%d)\n", i, pRect[i].srcx, pRect[i].srcy, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
+    }
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dCommandPresent invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    hr = pContext->pDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: GetBackBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
+    {
+        hr = pSurface->u.pTexture->GetSurfaceLevel(0, &pSurfaceD3D);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);        
+    }
+    else
+        pSurfaceD3D = pSurface->u.pSurface;
+
+    /* Source surface different size? */
+    if (pSurface->pMipmapLevels[0].size.width  != pThis->svga.uWidth ||
+        pSurface->pMipmapLevels[0].size.height != pThis->svga.uHeight)
+    {
+        float xMultiplier = (float)pSurface->pMipmapLevels[0].size.width / (float)pThis->svga.uWidth;
+        float yMultiplier = (float)pSurface->pMipmapLevels[0].size.height / (float)pThis->svga.uHeight;
+
+        srcViewPort.x  = (uint32_t)((float)pThis->svga.viewport.x  * xMultiplier);
+        srcViewPort.y  = (uint32_t)((float)pThis->svga.viewport.y  * yMultiplier);
+        srcViewPort.cx = (uint32_t)((float)pThis->svga.viewport.cx * xMultiplier);
+        srcViewPort.cy = (uint32_t)((float)pThis->svga.viewport.cy * yMultiplier);
+    }
+    else
+    {
+        srcViewPort.x  = pThis->svga.viewport.x;
+        srcViewPort.y  = pThis->svga.viewport.y;
+        srcViewPort.cx = pThis->svga.viewport.cx;
+        srcViewPort.cy = pThis->svga.viewport.cy;
+    }
+
+    /* @note the viewport doesn't affect blitting. */
+    if (cRects == 0)
+    {
+        RECT rectDest, rectSrc;
+
+        rectSrc.left    = srcViewPort.x;
+        rectSrc.top     = srcViewPort.y;
+        rectSrc.right   = rectSrc.left + srcViewPort.cx;
+        rectSrc.bottom  = rectSrc.top  + srcViewPort.cy;
+        rectDest.left   = 0;
+        rectDest.top    = 0;
+        rectDest.right  = pThis->svga.viewport.cx;
+        rectDest.bottom = pThis->svga.viewport.cy;
+        hr = pContext->pDevice->StretchRect(pSurfaceD3D, &rectSrc, pBackBuffer, &rectDest, D3DTEXF_NONE);
+    }
+    else
+    {
+        for (uint32_t i = 0; i < cRects; i++)
+        {
+            RECT rectSrc;
+            RECT rectDest;
+
+            if (    pRect[i].x + pRect[i].w <= pThis->svga.viewport.x
+                ||  pThis->svga.viewport.x + pThis->svga.viewport.cx <= pRect[i].x
+                ||  pRect[i].y + pRect[i].h <= pThis->svga.viewport.y
+                ||  pThis->svga.viewport.y + pThis->svga.viewport.cy <= pRect[i].y)
+            {
+                /* Intersection is empty; skip */
+                continue;
+            }
+
+            rectSrc.left    = RT_MAX(pRect[i].srcx, srcViewPort.x);
+            rectSrc.top     = RT_MAX(pRect[i].srcy, srcViewPort.y);
+            rectSrc.right   = RT_MIN(pRect[i].srcx + pRect[i].w, srcViewPort.x + srcViewPort.cx);
+            rectSrc.bottom  = RT_MIN(pRect[i].srcy + pRect[i].h, srcViewPort.y + srcViewPort.cy);
+            rectDest.left   = RT_MAX(pRect[i].x, pThis->svga.viewport.x) - pThis->svga.viewport.x;
+            rectDest.top    = RT_MAX(pRect[i].y, pThis->svga.viewport.y) - pThis->svga.viewport.y;
+            rectDest.right  = RT_MIN(pRect[i].x + pRect[i].w, pThis->svga.viewport.x + pThis->svga.viewport.cx) - pThis->svga.viewport.x;
+            rectDest.bottom = RT_MIN(pRect[i].y + pRect[i].h, pThis->svga.viewport.y + pThis->svga.viewport.cy) - pThis->svga.viewport.y;
+
+            hr = pContext->pDevice->StretchRect(pSurfaceD3D, &rectSrc, pBackBuffer, &rectDest, D3DTEXF_NONE);
+            AssertBreak(hr == D3D_OK);
+        }
+    }
+
+    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
+        pSurfaceD3D->Release();
+
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    hr = pContext->pDevice->Present(NULL, NULL, NULL, NULL);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: Present failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    pBackBuffer->Release();
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * Create a new 3d context
+ *
+ * @returns VBox status code.
+ * @param   pThis           VGA device instance data.
+ * @param   cid             Context id
+ */
+int vmsvga3dContextDefine(PVGASTATE pThis, uint32_t cid)
+{
+    int                     rc;
+    PVMSVGA3DCONTEXT        pContext;
+    HRESULT                 hr;
+    D3DPRESENT_PARAMETERS   PresParam;
+    PVMSVGA3DSTATE          pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+    Log(("vmsvga3dContextDefine id %x\n", cid));
+
+    if (cid >= pState->cContexts)
+    {
+        pState->paContext = (PVMSVGA3DCONTEXT)RTMemRealloc(pState->paContext, sizeof(VMSVGA3DCONTEXT) * (cid + 1));
+        AssertReturn(pState->paContext, VERR_NO_MEMORY);
+        memset(&pState->paContext[pState->cContexts], 0, sizeof(VMSVGA3DCONTEXT) * (cid + 1 - pState->cContexts));
+        for (uint32_t i = pState->cContexts; i < cid + 1; i++)
+            pState->paContext[i].id = SVGA3D_INVALID_ID;
+
+        pState->cContexts = cid + 1;
+    }
+    /* If one already exists with this id, then destroy it now. */
+    if (pState->paContext[cid].id != SVGA3D_INVALID_ID)
+        vmsvga3dContextDestroy(pThis, cid);
+
+    pContext = &pState->paContext[cid];
+    memset(pContext, 0, sizeof(*pContext));
+    pContext->id               = cid;
+    for (uint32_t i = 0; i< RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+        pContext->aSidActiveTexture[i] = SVGA3D_INVALID_ID;
+    pContext->sidRenderTarget  = SVGA3D_INVALID_ID;
+    pContext->state.shidVertex = SVGA3D_INVALID_ID;
+    pContext->state.shidPixel  = SVGA3D_INVALID_ID;
+
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); i++)
+        pContext->state.aRenderTargets[i] = SVGA3D_INVALID_ID;
+
+    /* Create a context window. */
+    CREATESTRUCT cs;
+
+    AssertReturn(pThis->svga.u64HostWindowId, VERR_INTERNAL_ERROR);
+
+    cs.lpCreateParams   = NULL;
+    cs.dwExStyle        = WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT;
+#ifdef DEBUG_GFX_WINDOW
+    cs.lpszName         = (char *)RTMemAllocZ(256);
+    RTStrPrintf((char *)cs.lpszName, 256, "Context %d OpenGL Window", cid);
+#else
+    cs.lpszName         = NULL;
+#endif
+    cs.lpszClass        = NULL;
+#ifdef DEBUG_GFX_WINDOW
+    cs.style            = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE | WS_CAPTION;
+#else
+    cs.style            = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_DISABLED | WS_CHILD | WS_VISIBLE;
+#endif
+    cs.x                = 0;
+    cs.y                = 0;
+    cs.cx               = pThis->svga.uWidth;
+    cs.cy               = pThis->svga.uHeight;
+    cs.hwndParent       = (HWND)pThis->svga.u64HostWindowId;
+    cs.hMenu            = NULL;
+    cs.hInstance        = pState->hInstance;
+
+    rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_CREATEWINDOW, (WPARAM)&pContext->hwnd, (LPARAM)&cs);
+    AssertRCReturn(rc, rc);
+
+    /* Changed when the function returns. */
+    PresParam.BackBufferWidth               = 0;
+    PresParam.BackBufferHeight              = 0;
+    PresParam.BackBufferFormat              = D3DFMT_UNKNOWN;
+    PresParam.BackBufferCount               = 0;
+
+    PresParam.MultiSampleType               = D3DMULTISAMPLE_NONE;
+    PresParam.MultiSampleQuality            = 0;
+    PresParam.SwapEffect                    = D3DSWAPEFFECT_FLIP;
+    PresParam.hDeviceWindow                 = pContext->hwnd;
+    PresParam.Windowed                      = TRUE;     /* @todo */
+    PresParam.EnableAutoDepthStencil        = FALSE;
+    PresParam.AutoDepthStencilFormat        = D3DFMT_UNKNOWN;   /* not relevant */
+    PresParam.Flags                         = 0;
+    PresParam.FullScreen_RefreshRateInHz    = 0;        /* windowed -> 0 */
+    /* @todo consider using D3DPRESENT_DONOTWAIT so we don't wait for the GPU during Present calls. */
+    PresParam.PresentationInterval          = D3DPRESENT_INTERVAL_IMMEDIATE;
+
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+    hr = pState->pD3D9->CreateDevice(D3DADAPTER_DEFAULT,
+                                     D3DDEVTYPE_HAL,
+                                     pContext->hwnd,
+                                     D3DCREATE_MULTITHREADED | D3DCREATE_MIXED_VERTEXPROCESSING, //D3DCREATE_HARDWARE_VERTEXPROCESSING,
+                                     &PresParam,
+                                     &pContext->pDevice);
+#else
+    hr = pState->pD3D9->CreateDeviceEx(D3DADAPTER_DEFAULT,
+                                       D3DDEVTYPE_HAL,
+                                       pContext->hwnd,
+                                       D3DCREATE_MULTITHREADED | D3DCREATE_MIXED_VERTEXPROCESSING, //D3DCREATE_HARDWARE_VERTEXPROCESSING,
+                                       &PresParam,
+                                       NULL,
+                                       &pContext->pDevice);
+#endif
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dContextDefine: CreateDevice failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    Log(("vmsvga3dContextDefine: Backbuffer (%d,%d) count=%d format=%x\n", PresParam.BackBufferWidth, PresParam.BackBufferHeight, PresParam.BackBufferCount, PresParam.BackBufferFormat));
+    return VINF_SUCCESS;
+}
+
+/**
+ * Destroy an existing 3d context
+ *
+ * @returns VBox status code.
+ * @param   pThis           VGA device instance data.
+ * @param   cid             Context id
+ */
+int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+    if (    cid < pState->cContexts
+        &&  pState->paContext[cid].id == cid)
+    {
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[cid];
+
+        Log(("vmsvga3dContextDestroy id %x\n", cid));
+
+        /* Check for all surfaces that are associated with this context to remove all dependencies */
+        for (uint32_t sid = 0; sid < pState->cSurfaces; sid++)
+        {
+            PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+            if (    pSurface->id == sid
+                &&  pSurface->idAssociatedContext == cid)
+            {
+                int rc;
+
+                Log(("vmsvga3dContextDestroy: remove all dependencies for surface %x\n", sid));
+
+                uint32_t            surfaceFlags = pSurface->flags;
+                SVGA3dSurfaceFormat format = pSurface->format;
+                SVGA3dSurfaceFace   face[SVGA3D_MAX_SURFACE_FACES];
+                uint32_t            multisampleCount = pSurface->multiSampleCount;
+                SVGA3dTextureFilter autogenFilter = pSurface->autogenFilter;
+                SVGA3dSize         *pMipLevelSize;
+                uint32_t            cFaces = pSurface->cFaces;
+
+                pMipLevelSize = (SVGA3dSize *)RTMemAllocZ(pSurface->faces[0].numMipLevels * pSurface->cFaces * sizeof(SVGA3dSize));
+                AssertReturn(pMipLevelSize, VERR_NO_MEMORY);
+
+                for (uint32_t face=0; face < pSurface->cFaces; face++)
+                {
+                    for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+                    {
+                        uint32_t idx = i + face * pSurface->faces[0].numMipLevels;
+                        memcpy(&pMipLevelSize[idx], &pSurface->pMipmapLevels[idx].size, sizeof(SVGA3dSize));
+                    }
+                }
+                memcpy(face, pSurface->faces, sizeof(pSurface->faces));
+
+                /* Recreate the surface with the original settings; destroys the contents, but that seems fairly safe since the context is also destroyed. */
+                /** @todo not safe with shared objects */
+                Assert(pSurface->pSharedObjectTree == NULL);
+
+                rc = vmsvga3dSurfaceDestroy(pThis, sid);
+                AssertRC(rc);
+
+                rc = vmsvga3dSurfaceDefine(pThis, sid, surfaceFlags, format, face, multisampleCount, autogenFilter, face[0].numMipLevels * cFaces, pMipLevelSize);
+                AssertRC(rc);
+
+                Assert(!pSurface->u.pSurface);
+            }
+            else
+            {
+                /* Check for a shared surface object. */
+                PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTAvlU32Get(&pSurface->pSharedObjectTree, cid);
+                if (pSharedSurface)
+                {
+                    Log(("vmsvga3dContextDestroy: remove shared dependency for surface %x\n", sid));
+
+                    switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                    {
+                    case SVGA3D_SURFACE_HINT_TEXTURE:
+                    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        Assert(pSharedSurface->u.pTexture);
+                        if (pSharedSurface->u.pTexture)
+                            pSharedSurface->u.pTexture->Release();
+                        break;
+
+                    default:
+                        AssertFailed();
+                        break;
+                    }
+                    RTAvlU32Remove(&pSurface->pSharedObjectTree, cid);
+                    RTMemFree(pSharedSurface);
+                }
+            }
+        }
+
+        /* Destroy all leftover pixel shaders. */
+        for (uint32_t i = 0; i < pContext->cPixelShaders; i++)
+        {
+            if (pContext->paPixelShader[i].id != SVGA3D_INVALID_ID)
+                vmsvga3dShaderDestroy(pThis, pContext->paPixelShader[i].cid, pContext->paPixelShader[i].id, pContext->paPixelShader[i].type);
+        }
+        if (pContext->paPixelShader)
+            RTMemFree(pContext->paPixelShader);
+
+        /* Destroy all leftover vertex shaders. */
+        for (uint32_t i = 0; i < pContext->cVertexShaders; i++)
+        {
+            if (pContext->paVertexShader[i].id != SVGA3D_INVALID_ID)
+                vmsvga3dShaderDestroy(pThis, pContext->paVertexShader[i].cid, pContext->paVertexShader[i].id, pContext->paVertexShader[i].type);
+        }
+        if (pContext->paVertexShader)
+            RTMemFree(pContext->paVertexShader);
+
+        if (pContext->state.paVertexShaderConst)
+            RTMemFree(pContext->state.paVertexShaderConst);
+        if (pContext->state.paPixelShaderConst)
+            RTMemFree(pContext->state.paPixelShaderConst);
+
+        /* Release the D3D device object */
+        pContext->pDevice->Release();
+
+        /* Destroy the window we've created. */
+        int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_DESTROYWINDOW, (WPARAM)pContext->hwnd, 0);
+        AssertRC(rc);
+
+        memset(pContext, 0, sizeof(*pContext));
+        pContext->id = SVGA3D_INVALID_ID;
+    }
+    else
+        AssertFailed();
+
+    return VINF_SUCCESS;
+}
+
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+#define vmsvga3dContextTrackUsage(pThis, pContext)
+#else
+static int vmsvga3dContextTrackUsage(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext)
+{
+    /* Inject fences to make sure we can track surface usage in case the client wants to reuse it in another context. */
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+    {
+        if (pContext->aSidActiveTexture[i] != SVGA3D_INVALID_ID)
+            vmsvga3dSurfaceTrackUsage(pThis, pContext, pContext->aSidActiveTexture[i]);
+    }
+    if (pContext->sidRenderTarget != SVGA3D_INVALID_ID)
+        vmsvga3dSurfaceTrackUsage(pThis, pContext, pContext->sidRenderTarget);
+    return VINF_SUCCESS;
+}
+#endif
+
+/* Handle resize */
+int vmsvga3dChangeMode(PVGASTATE pThis)
+{
+    PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    /* Resize all active contexts. */
+    for (uint32_t i = 0; i < pState->cContexts; i++)
+    {
+        PVMSVGA3DCONTEXT pContext = &pState->paContext[i];
+        uint32_t cid = pContext->id;
+
+        if (cid != SVGA3D_INVALID_ID)
+        {
+            CREATESTRUCT          cs;
+            D3DPRESENT_PARAMETERS PresParam;
+            D3DVIEWPORT9          viewportOrg;
+            HRESULT               hr;
+
+#ifdef VMSVGA3D_DIRECT3D9_RESET
+            /* Sync back all surface data as everything is lost after the Reset. */
+            for (uint32_t sid = 0; sid < pState->cSurfaces; sid++)
+            {
+                PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+                if (    pSurface->id == sid
+                    &&  pSurface->idAssociatedContext == cid
+                    &&  pSurface->u.pSurface)
+                {
+                    Log(("vmsvga3dChangeMode: sync back data of surface sid=%x (fDirty=%d)\n", sid, pSurface->fDirty));
+
+                    /* Reallocate our surface memory buffers. */
+                    for (uint32_t i = 0; i < pSurface->cMipLevels; i++)
+                    {
+                        PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->pMipmapLevels[i];
+
+                        pMipmapLevel->pSurfaceData   = RTMemAllocZ(pMipmapLevel->cbSurface);
+                        AssertReturn(pMipmapLevel->pSurfaceData, VERR_NO_MEMORY);
+
+                        if (!pSurface->fDirty)
+                        {
+                            D3DLOCKED_RECT LockedRect;
+
+                            if (pSurface->bounce.pTexture)
+                            {
+                                IDirect3DSurface9 *pSrc, *pDest;
+
+                                /* @todo only sync when something was actually rendered (since the last sync) */
+                                Log(("vmsvga3dChangeMode: sync bounce buffer (level %d)\n", i));
+                                hr = pSurface->bounce.pTexture->GetSurfaceLevel(i, &pDest);
+                                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                                hr = pSurface->u.pTexture->GetSurfaceLevel(i, &pSrc);
+                                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                                hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
+                                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                                pSrc->Release();
+                                pDest->Release();
+
+                                hr = pSurface->bounce.pTexture->LockRect(i,
+                                                                         &LockedRect,
+                                                                         NULL,
+                                                                         D3DLOCK_READONLY);
+                            }
+                            else
+                                hr = pSurface->u.pTexture->LockRect(i,
+                                                                    &LockedRect,
+                                                                    NULL,
+                                                                    D3DLOCK_READONLY);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                            /* Copy the data one line at a time in case the internal pitch is different. */
+                            for (uint32_t j = 0; j < pMipmapLevel->size.height; j++)
+                            {
+                                memcpy((uint8_t *)pMipmapLevel->pSurfaceData + j * pMipmapLevel->cbSurfacePitch, (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch, pMipmapLevel->cbSurfacePitch);
+                            }
+
+                            if (pSurface->bounce.pTexture)
+                                hr = pSurface->bounce.pTexture->UnlockRect(i);
+                            else
+                                hr = pSurface->u.pTexture->UnlockRect(i);
+                            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                        }
+                    }
+
+
+                    switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                    {
+                    case SVGA3D_SURFACE_CUBEMAP:
+                        AssertFailed(); /* @todo */
+                        break;
+
+                    case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+                        pSurface->u.pIndexBuffer->Release();
+                        break;
+
+                    case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+                        pSurface->u.pVertexBuffer->Release();
+                        pSurface->u.pVertexBuffer = NULL;
+                        break;
+
+                    case SVGA3D_SURFACE_HINT_TEXTURE:
+                    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        pSurface->u.pTexture->Release();
+                        pSurface->u.pTexture = NULL;
+                        if (pSurface->bounce.pTexture)
+                        {
+                            pSurface->bounce.pTexture->Release();
+                            pSurface->bounce.pTexture = NULL;
+                        }
+                        break;
+
+                    case SVGA3D_SURFACE_HINT_RENDERTARGET:
+                    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+                        if (pSurface->fStencilAsTexture)
+                            pSurface->u.pTexture->Release();
+                        else
+                            pSurface->u.pSurface->Release();
+                        pSurface->u.pSurface = NULL;
+                        break;
+
+                    default:
+                        break;
+                    }
+                    RTAvlU32Destroy(&pSurface->pSharedObjectTree, vmsvga3dSharedSurfaceDestroyTree, pSurface);
+                    Assert(pSurface->pSharedObjectTree == NULL);
+
+                    pSurface->idAssociatedContext = SVGA3D_INVALID_ID;
+                    pSurface->hSharedObject       = 0;
+                }
+            }
+#endif /* #ifdef VMSVGA3D_DIRECT3D9_RESET */
+            memset(&cs, 0, sizeof(cs));            
+            cs.cx = pThis->svga.uWidth;
+            cs.cy = pThis->svga.uHeight;
+
+            Log(("vmsvga3dChangeMode: Resize window %x of context %d to (%d,%d)\n", pContext->hwnd, pContext->id, cs.cx, cs.cy));
+
+            hr = pContext->pDevice->GetViewport(&viewportOrg);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+            Log(("vmsvga3dChangeMode: old viewport settings (%d,%d)(%d,%d) z=%d/%d\n", viewportOrg.X, viewportOrg.Y, viewportOrg.Width, viewportOrg.Height, (uint32_t)(viewportOrg.MinZ * 100.0), (uint32_t)(viewportOrg.MaxZ * 100.0)));
+
+            /* Resize the window. */
+            int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_RESIZEWINDOW, (WPARAM)pContext->hwnd, (LPARAM)&cs);
+            AssertRC(rc);
+
+            /* Changed when the function returns. */
+            PresParam.BackBufferWidth               = 0;
+            PresParam.BackBufferHeight              = 0;
+            PresParam.BackBufferFormat              = D3DFMT_UNKNOWN;
+            PresParam.BackBufferCount               = 0;
+
+            PresParam.MultiSampleType               = D3DMULTISAMPLE_NONE;
+            PresParam.MultiSampleQuality            = 0;
+            PresParam.SwapEffect                    = D3DSWAPEFFECT_FLIP;
+            PresParam.hDeviceWindow                 = pContext->hwnd;
+            PresParam.Windowed                      = TRUE;     /* @todo */
+            PresParam.EnableAutoDepthStencil        = FALSE;
+            PresParam.AutoDepthStencilFormat        = D3DFMT_UNKNOWN;   /* not relevant */
+            PresParam.Flags                         = 0;
+            PresParam.FullScreen_RefreshRateInHz    = 0;        /* windowed -> 0 */
+            /* @todo consider using D3DPRESENT_DONOTWAIT so we don't wait for the GPU during Present calls. */
+            PresParam.PresentationInterval          = D3DPRESENT_INTERVAL_IMMEDIATE;;
+
+#ifdef VBOX_VMSVGA3D_WITH_OPENGL
+            hr = pContext->pDevice->Reset(&PresParam);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: Reset failed with %x\n", hr), VERR_INTERNAL_ERROR);
+#else
+            /* ResetEx does not trash the device state */
+            hr = pContext->pDevice->ResetEx(&PresParam, NULL);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: Reset failed with %x\n", hr), VERR_INTERNAL_ERROR);
+#endif
+            Log(("vmsvga3dChangeMode: Backbuffer (%d,%d) count=%d format=%x\n", PresParam.BackBufferWidth, PresParam.BackBufferHeight, PresParam.BackBufferCount, PresParam.BackBufferFormat));
+
+            /* ResetEx changes the viewport; restore it again. */
+            hr = pContext->pDevice->SetViewport(&viewportOrg);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+#ifdef LOG_ENABLED
+            {
+                D3DVIEWPORT9          viewport;
+                hr = pContext->pDevice->GetViewport(&viewport);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                Log(("vmsvga3dChangeMode: changed viewport settings (%d,%d)(%d,%d) z=%d/%d\n", viewport.X, viewport.Y, viewport.Width, viewport.Height, (uint32_t)(viewport.MinZ * 100.0), (uint32_t)(viewport.MaxZ * 100.0)));
+            }
+#endif
+
+            /* First set the render targets as they change the internal state (reset viewport etc) */
+            Log(("vmsvga3dChangeMode: Recreate render targets BEGIN\n"));
+            for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aRenderTargets); j++)
+            {
+                if (pContext->state.aRenderTargets[j] != SVGA3D_INVALID_ID)
+                {
+                    SVGA3dSurfaceImageId target;
+
+                    target.sid      = pContext->state.aRenderTargets[j];
+                    target.face     = 0;
+                    target.mipmap   = 0;
+                    rc = vmsvga3dSetRenderTarget(pThis, cid, (SVGA3dRenderTargetType)j, target);
+                    AssertRCReturn(rc, rc);
+                }
+            }
+
+#ifdef VMSVGA3D_DIRECT3D9_RESET
+            /* Recreate the render state */
+            Log(("vmsvga3dChangeMode: Recreate render state BEGIN\n"));
+            for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderState); i++)
+            {
+                SVGA3dRenderState *pRenderState = &pContext->state.aRenderState[i];
+
+                if (pRenderState->state != SVGA3D_RS_INVALID)
+                    vmsvga3dSetRenderState(pThis, pContext->id, 1, pRenderState);
+            }
+            Log(("vmsvga3dChangeMode: Recreate render state END\n"));
+
+            /* Recreate the texture state */
+            Log(("vmsvga3dChangeMode: Recreate texture state BEGIN\n"));
+            for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)
+            {
+                for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)
+                {
+                    SVGA3dTextureState *pTextureState = &pContext->state.aTextureState[iStage][j];
+
+                    if (pTextureState->name != SVGA3D_RS_INVALID)
+                        vmsvga3dSetTextureState(pThis, pContext->id, 1, pTextureState);
+                }
+            }
+            Log(("vmsvga3dChangeMode: Recreate texture state END\n"));
+
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_SCISSORRECT)
+                vmsvga3dSetScissorRect(pThis, cid, &pContext->state.RectScissor);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_ZRANGE)
+                vmsvga3dSetZRange(pThis, cid, pContext->state.zRange);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
+                vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER)
+                vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
+            if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER)
+                vmsvga3dShaderSet(pThis, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
+            /** @todo restore more state data */
+#endif /* #ifdef VMSVGA3D_DIRECT3D9_RESET */
+        }
+    }
+    return VINF_SUCCESS;
+}
+
+
+int vmsvga3dSetTransform(PVGASTATE pThis, uint32_t cid, SVGA3dTransformType type, float matrix[16])
+{
+    D3DTRANSFORMSTATETYPE d3dState;
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetTransform %x %s\n", cid, vmsvgaTransformToString(type)));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetTransform invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    switch (type)
+    {
+    case SVGA3D_TRANSFORM_VIEW:
+        d3dState = D3DTS_VIEW;
+        break;
+    case SVGA3D_TRANSFORM_PROJECTION:
+        d3dState = D3DTS_PROJECTION;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE0:
+        d3dState = D3DTS_TEXTURE0;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE1:
+        d3dState = D3DTS_TEXTURE1;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE2:
+        d3dState = D3DTS_TEXTURE2;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE3:
+        d3dState = D3DTS_TEXTURE3;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE4:
+        d3dState = D3DTS_TEXTURE4;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE5:
+        d3dState = D3DTS_TEXTURE5;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE6:
+        d3dState = D3DTS_TEXTURE6;
+        break;
+    case SVGA3D_TRANSFORM_TEXTURE7:
+        d3dState = D3DTS_TEXTURE7;
+        break;
+    case SVGA3D_TRANSFORM_WORLD:
+        d3dState = D3DTS_WORLD;
+        break;
+    case SVGA3D_TRANSFORM_WORLD1:
+        d3dState = D3DTS_WORLD1;
+        break;
+    case SVGA3D_TRANSFORM_WORLD2:
+        d3dState = D3DTS_WORLD2;
+        break;
+    case SVGA3D_TRANSFORM_WORLD3:
+        d3dState = D3DTS_WORLD3;
+        break;
+
+    default:
+        Log(("vmsvga3dSetTransform: unknown type!!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    /* Save this matrix for vm state save/restore. */
+    pContext->state.aTransformState[type].fValid = true;
+    memcpy(pContext->state.aTransformState[type].matrix, matrix, sizeof(pContext->state.aTransformState[type].matrix));
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_TRANSFORM;
+
+    Log(("Matrix [%d %d %d %d]\n", (int)(matrix[0] * 10.0), (int)(matrix[1] * 10.0), (int)(matrix[2] * 10.0), (int)(matrix[3] * 10.0)));
+    Log(("       [%d %d %d %d]\n", (int)(matrix[4] * 10.0), (int)(matrix[5] * 10.0), (int)(matrix[6] * 10.0), (int)(matrix[7] * 10.0)));
+    Log(("       [%d %d %d %d]\n", (int)(matrix[8] * 10.0), (int)(matrix[9] * 10.0), (int)(matrix[10] * 10.0), (int)(matrix[11] * 10.0)));
+    Log(("       [%d %d %d %d]\n", (int)(matrix[12] * 10.0), (int)(matrix[13] * 10.0), (int)(matrix[14] * 10.0), (int)(matrix[15] * 10.0)));
+    hr = pContext->pDevice->SetTransform(d3dState, (const D3DMATRIX *)matrix);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTransform: SetTransform failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetZRange(PVGASTATE pThis, uint32_t cid, SVGA3dZRange zRange)
+{
+    D3DVIEWPORT9          viewport;
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetZRange %x min=%d max=%d\n", cid, (uint32_t)(zRange.min * 100.0), (uint32_t)(zRange.max * 100.0)));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetZRange invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+    pContext->state.zRange = zRange;
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_ZRANGE;
+
+    hr = pContext->pDevice->GetViewport(&viewport);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetZRange: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    Log(("vmsvga3dSetZRange: old viewport settings (%d,%d)(%d,%d) z=%d/%d\n", viewport.X, viewport.Y, viewport.Width, viewport.Height, (uint32_t)(viewport.MinZ * 100.0), (uint32_t)(viewport.MaxZ * 100.0)));
+    /* @todo convert the depth range from -1-1 to 0-1 although we shouldn't be getting such values in the first place... */
+    if (zRange.min < 0.0)
+        zRange.min = 0.0;
+    if (zRange.max > 1.0)
+        zRange.max = 1.0;
+
+    viewport.MinZ = zRange.min;
+    viewport.MaxZ = zRange.max;
+    hr = pContext->pDevice->SetViewport(&viewport);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetZRange: SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
+
+/**
+ * Convert SVGA blend op value to its D3D equivalent
+ */
+static DWORD vmsvga3dBlendOp2D3D(uint32_t blendOp, DWORD defaultBlendOp)
+{
+    switch (blendOp)
+    {
+    case SVGA3D_BLENDOP_ZERO:
+        return D3DBLEND_ZERO;
+    case SVGA3D_BLENDOP_ONE:
+        return D3DBLEND_ONE;
+    case SVGA3D_BLENDOP_SRCCOLOR:
+        return D3DBLEND_SRCCOLOR;
+    case SVGA3D_BLENDOP_INVSRCCOLOR:
+        return D3DBLEND_INVSRCCOLOR;
+    case SVGA3D_BLENDOP_SRCALPHA:
+        return D3DBLEND_SRCALPHA;
+    case SVGA3D_BLENDOP_INVSRCALPHA:
+        return D3DBLEND_INVSRCALPHA;
+    case SVGA3D_BLENDOP_DESTALPHA:
+        return D3DBLEND_DESTALPHA;
+    case SVGA3D_BLENDOP_INVDESTALPHA:
+        return D3DBLEND_INVDESTALPHA;
+    case SVGA3D_BLENDOP_DESTCOLOR:
+        return D3DBLEND_DESTCOLOR;
+    case SVGA3D_BLENDOP_INVDESTCOLOR:
+        return D3DBLEND_INVDESTCOLOR;
+    case SVGA3D_BLENDOP_SRCALPHASAT:
+        return D3DBLEND_SRCALPHASAT;
+    case SVGA3D_BLENDOP_BLENDFACTOR:
+        return D3DBLEND_BLENDFACTOR;
+    case SVGA3D_BLENDOP_INVBLENDFACTOR:
+        return D3DBLEND_INVBLENDFACTOR;
+    default:
+        AssertFailed();
+        return defaultBlendOp;
+    }
+}
+
+int vmsvga3dSetRenderState(PVGASTATE pThis, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState)
+{
+    DWORD                       val;
+    HRESULT                     hr;
+    PVMSVGA3DCONTEXT            pContext;
+    PVMSVGA3DSTATE              pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetRenderState %x cRenderStates=%d\n", cid, cRenderStates));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetRenderState invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    for (unsigned i = 0; i < cRenderStates; i++)
+    {
+        D3DRENDERSTATETYPE renderState = D3DRS_FORCE_DWORD;
+
+        Log(("vmsvga3dSetRenderState: state=%s (%d) val=%x\n", vmsvga3dGetRenderStateName(pRenderState[i].state), pRenderState[i].state, pRenderState[i].uintValue));
+        /* Save the render state for vm state saving. */
+        if (pRenderState[i].state < SVGA3D_RS_MAX)
+            pContext->state.aRenderState[pRenderState[i].state] = pRenderState[i];
+
+        switch (pRenderState[i].state)
+        {
+        case SVGA3D_RS_ZENABLE:                /* SVGA3dBool */            
+            renderState = D3DRS_ZENABLE;
+            val = pRenderState[i].uintValue;
+            Assert(val == D3DZB_FALSE || val == D3DZB_TRUE);
+            break;
+
+        case SVGA3D_RS_ZWRITEENABLE:           /* SVGA3dBool */
+            renderState = D3DRS_ZWRITEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_ALPHATESTENABLE:        /* SVGA3dBool */
+            renderState = D3DRS_ALPHATESTENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_DITHERENABLE:           /* SVGA3dBool */
+            renderState = D3DRS_DITHERENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_BLENDENABLE:            /* SVGA3dBool */
+            renderState = D3DRS_ALPHABLENDENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGENABLE:              /* SVGA3dBool */
+            renderState = D3DRS_FOGENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SPECULARENABLE:         /* SVGA3dBool */
+            renderState = D3DRS_SPECULARENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_LIGHTINGENABLE:         /* SVGA3dBool */
+            renderState = D3DRS_LIGHTING;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_NORMALIZENORMALS:       /* SVGA3dBool */
+            renderState = D3DRS_NORMALIZENORMALS;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_POINTSPRITEENABLE:      /* SVGA3dBool */
+            renderState = D3DRS_POINTSPRITEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_POINTSCALEENABLE:       /* SVGA3dBool */
+            renderState = D3DRS_POINTSCALEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_POINTSIZE:              /* float */
+            renderState = D3DRS_POINTSIZE;
+            val = pRenderState[i].uintValue;
+            Log(("SVGA3D_RS_POINTSIZE: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+            break;
+
+        case SVGA3D_RS_POINTSIZEMIN:           /* float */
+            renderState = D3DRS_POINTSIZE_MIN;
+            val = pRenderState[i].uintValue;
+            Log(("SVGA3D_RS_POINTSIZEMIN: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+            break;
+
+        case SVGA3D_RS_POINTSIZEMAX:           /* float */
+            renderState = D3DRS_POINTSIZE_MAX;
+            val = pRenderState[i].uintValue;
+            Log(("SVGA3D_RS_POINTSIZEMAX: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+            break;
+
+        case SVGA3D_RS_POINTSCALE_A:           /* float */
+            renderState = D3DRS_POINTSCALE_A;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_POINTSCALE_B:           /* float */
+            renderState = D3DRS_POINTSCALE_B;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_POINTSCALE_C:           /* float */
+            renderState = D3DRS_POINTSCALE_C;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_AMBIENT:                /* SVGA3dColor - identical */
+            renderState = D3DRS_AMBIENT;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CLIPPLANEENABLE:        /* SVGA3dClipPlanes - identical */
+            renderState = D3DRS_CLIPPLANEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGCOLOR:               /* SVGA3dColor - identical */
+            renderState = D3DRS_FOGCOLOR;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGSTART:               /* float */
+            renderState = D3DRS_FOGSTART;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGEND:                 /* float */
+            renderState = D3DRS_FOGEND;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGDENSITY:             /* float */
+            renderState = D3DRS_FOGDENSITY;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_RANGEFOGENABLE:         /* SVGA3dBool */
+            renderState = D3DRS_RANGEFOGENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FOGMODE:                /* SVGA3dFogMode */
+        {
+            SVGA3dFogMode mode;
+            mode.uintValue = pRenderState[i].uintValue;
+
+            switch (mode.s.function)
+            {
+            case SVGA3D_FOGFUNC_INVALID:
+                val = D3DFOG_NONE;
+                break;
+            case SVGA3D_FOGFUNC_EXP:
+                val = D3DFOG_EXP;
+                break;
+            case SVGA3D_FOGFUNC_EXP2:
+                val = D3DFOG_EXP2;
+                break;
+            case SVGA3D_FOGFUNC_LINEAR:
+                val = D3DFOG_LINEAR;
+                break;
+            case SVGA3D_FOGFUNC_PER_VERTEX: /* unable to find a d3d9 equivalent */
+                AssertMsgFailedReturn(("Unsupported fog function SVGA3D_FOGFUNC_PER_VERTEX\n"), VERR_INTERNAL_ERROR);
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected fog function %d\n", mode.s.function), VERR_INTERNAL_ERROR);
+                break;
+            }
+
+            /* The fog type determines the render state. */
+            switch (mode.s.type)
+            {
+            case SVGA3D_FOGTYPE_VERTEX:
+                renderState = D3DRS_FOGVERTEXMODE;
+                break;
+            case SVGA3D_FOGTYPE_PIXEL:
+                renderState = D3DRS_FOGTABLEMODE;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected fog type %d\n", mode.s.type), VERR_INTERNAL_ERROR);
+                break;
+            }
+
+            /* Set the fog base to depth or range. */
+            switch (mode.s.base)
+            {
+            case SVGA3D_FOGBASE_DEPTHBASED:
+                hr = pContext->pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, FALSE);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderState: SetRenderState SVGA3D_FOGBASE_DEPTHBASED failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                break;
+            case SVGA3D_FOGBASE_RANGEBASED:
+                hr = pContext->pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, TRUE);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderState: SetRenderState SVGA3D_FOGBASE_RANGEBASED failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                break;
+            default:
+                /* ignore */
+                AssertMsgFailed(("Unexpected fog base %d\n", mode.s.base));
+                break;
+            }
+            break;
+        }
+
+        case SVGA3D_RS_FILLMODE:               /* SVGA3dFillMode */
+        {
+            SVGA3dFillMode mode;
+
+            mode.uintValue = pRenderState[i].uintValue;
+
+            switch (mode.s.mode)
+            {
+            case SVGA3D_FILLMODE_POINT:
+                val = D3DFILL_POINT;
+                break;
+            case SVGA3D_FILLMODE_LINE:
+                val = D3DFILL_WIREFRAME;
+                break;
+            case SVGA3D_FILLMODE_FILL:
+                val = D3DFILL_SOLID;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected fill mode %d\n", mode.s.mode), VERR_INTERNAL_ERROR);
+                break;
+            }
+            /* @todo ignoring face for now. */
+            renderState = D3DRS_FILLMODE;
+            break;
+        }
+
+        case SVGA3D_RS_SHADEMODE:              /* SVGA3dShadeMode */
+            renderState = D3DRS_SHADEMODE;
+            AssertCompile(D3DSHADE_FLAT == SVGA3D_SHADEMODE_FLAT);
+            val = pRenderState[i].uintValue;    /* SVGA3dShadeMode == D3DSHADEMODE */
+            break;
+
+        case SVGA3D_RS_LINEPATTERN:            /* SVGA3dLinePattern */
+            /* No longer supported by d3d; mesagl comments suggest not all backends support it */
+            /* @todo */
+            Log(("WARNING: SVGA3D_RS_LINEPATTERN %x not supported!!\n", pRenderState[i].uintValue));
+            /*
+            renderState = D3DRS_LINEPATTERN;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_SRCBLEND:               /* SVGA3dBlendOp */
+            renderState = D3DRS_SRCBLEND;
+            val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ONE /* default */);
+            break;
+
+        case SVGA3D_RS_DSTBLEND:               /* SVGA3dBlendOp */
+            renderState = D3DRS_DESTBLEND;
+            val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ZERO /* default */);
+            break;
+
+        case SVGA3D_RS_BLENDEQUATION:          /* SVGA3dBlendEquation - identical */
+            AssertCompile(SVGA3D_BLENDEQ_MAXIMUM == D3DBLENDOP_MAX);
+            renderState = D3DRS_BLENDOP;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CULLMODE:               /* SVGA3dFace */
+        {
+            switch (pRenderState[i].uintValue)
+            {
+            case SVGA3D_FACE_NONE:
+                val = D3DCULL_NONE;
+                break;
+            case SVGA3D_FACE_FRONT:
+                val = D3DCULL_CW;
+                break;
+            case SVGA3D_FACE_BACK:
+                val = D3DCULL_CCW;
+                break;
+            case SVGA3D_FACE_FRONT_BACK:
+                AssertFailed();
+                val = D3DCULL_CW;
+                break;
+            default:
+                AssertMsgFailedReturn(("Unexpected cull mode %d\n", pRenderState[i].uintValue), VERR_INTERNAL_ERROR);
+                break;
+            }
+            renderState = D3DRS_CULLMODE;
+            break;
+        }
+
+        case SVGA3D_RS_ZFUNC:                  /* SVGA3dCmpFunc - identical */
+            AssertCompile(SVGA3D_CMP_ALWAYS == D3DCMP_ALWAYS);
+            renderState = D3DRS_ZFUNC;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_ALPHAFUNC:              /* SVGA3dCmpFunc - identical */
+            renderState = D3DRS_ALPHAFUNC;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILENABLE:          /* SVGA3dBool */
+            renderState = D3DRS_STENCILENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILREF:             /* uint32_t */
+            renderState = D3DRS_STENCILREF;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILMASK:            /* uint32_t */
+            renderState = D3DRS_STENCILMASK;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILWRITEMASK:       /* uint32_t */
+            renderState = D3DRS_STENCILWRITEMASK;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILFUNC:            /* SVGA3dCmpFunc - identical */
+            renderState = D3DRS_STENCILFUNC;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILFAIL:            /* SVGA3dStencilOp - identical */
+            AssertCompile(D3DSTENCILOP_KEEP == SVGA3D_STENCILOP_KEEP);
+            AssertCompile(D3DSTENCILOP_DECR == SVGA3D_STENCILOP_DECR);
+            renderState = D3DRS_STENCILFAIL;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILZFAIL:           /* SVGA3dStencilOp - identical */
+            renderState = D3DRS_STENCILZFAIL;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILPASS:            /* SVGA3dStencilOp - identical */
+            renderState = D3DRS_STENCILPASS;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_ALPHAREF:               /* float (0.0 .. 1.0) */
+            renderState = D3DRS_ALPHAREF;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_FRONTWINDING:           /* SVGA3dFrontWinding */
+            Assert(pRenderState[i].uintValue == SVGA3D_FRONTWINDING_CW);
+            /*
+            renderState = D3DRS_FRONTWINDING; //D3DRS_TWOSIDEDSTENCILMODE
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_COORDINATETYPE:         /* SVGA3dCoordinateType */
+            Assert(pRenderState[i].uintValue == SVGA3D_COORDINATE_LEFTHANDED);
+            /* @todo setup a view matrix to scale the world space by -1 in the z-direction for right handed coordinates. */
+            /*
+            renderState = D3DRS_COORDINATETYPE;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_ZBIAS:                  /* float */
+            /* @todo unknown meaning; depth bias is not identical
+            renderState = D3DRS_DEPTHBIAS;
+            val = pRenderState[i].uintValue;
+            */
+            Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_RS_ZBIAS\n"));
+            break;
+
+        case SVGA3D_RS_SLOPESCALEDEPTHBIAS:    /* float */
+            renderState = D3DRS_SLOPESCALEDEPTHBIAS;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_DEPTHBIAS:              /* float */
+            renderState = D3DRS_DEPTHBIAS;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_COLORWRITEENABLE:       /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+            renderState = D3DRS_COLORWRITEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_VERTEXMATERIALENABLE:   /* SVGA3dBool */
+            //AssertFailed();
+            renderState = D3DRS_INDEXEDVERTEXBLENDENABLE;       /* correct?? */
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_DIFFUSEMATERIALSOURCE:  /* SVGA3dVertexMaterial - identical */
+            AssertCompile(D3DMCS_COLOR2 == SVGA3D_VERTEXMATERIAL_SPECULAR);
+            renderState = D3DRS_DIFFUSEMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial - identical */
+            renderState = D3DRS_SPECULARMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_AMBIENTMATERIALSOURCE:  /* SVGA3dVertexMaterial - identical */
+            renderState = D3DRS_AMBIENTMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial - identical */
+            renderState = D3DRS_EMISSIVEMATERIALSOURCE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_TEXTUREFACTOR:          /* SVGA3dColor - identical */
+            renderState = D3DRS_TEXTUREFACTOR;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_LOCALVIEWER:            /* SVGA3dBool */
+            renderState = D3DRS_LOCALVIEWER;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SCISSORTESTENABLE:      /* SVGA3dBool */
+            renderState = D3DRS_SCISSORTESTENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_BLENDCOLOR:             /* SVGA3dColor - identical */
+            renderState = D3DRS_BLENDFACTOR;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_STENCILENABLE2SIDED:    /* SVGA3dBool */
+            renderState = D3DRS_TWOSIDEDSTENCILMODE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CCWSTENCILFUNC:         /* SVGA3dCmpFunc - identical */
+            renderState = D3DRS_CCW_STENCILFUNC;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CCWSTENCILFAIL:         /* SVGA3dStencilOp - identical */
+            renderState = D3DRS_CCW_STENCILFAIL;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CCWSTENCILZFAIL:        /* SVGA3dStencilOp - identical */
+            renderState = D3DRS_CCW_STENCILZFAIL;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CCWSTENCILPASS:         /* SVGA3dStencilOp - identical */
+            renderState = D3DRS_CCW_STENCILPASS;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_VERTEXBLEND:            /* SVGA3dVertexBlendFlags - identical */
+            AssertCompile(SVGA3D_VBLEND_DISABLE == D3DVBF_DISABLE);
+            renderState = D3DRS_VERTEXBLEND;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_OUTPUTGAMMA:            /* float */
+            //AssertFailed();
+            /*
+            D3DRS_SRGBWRITEENABLE ??
+            renderState = D3DRS_OUTPUTGAMMA;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_ZVISIBLE:               /* SVGA3dBool */
+            AssertFailed();
+            /*
+            renderState = D3DRS_ZVISIBLE;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_LASTPIXEL:              /* SVGA3dBool */
+            renderState = D3DRS_LASTPIXEL;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_CLIPPING:               /* SVGA3dBool */
+            renderState = D3DRS_CLIPPING;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP0:                  /* SVGA3dWrapFlags - identical */
+            Assert(SVGA3D_WRAPCOORD_3 == D3DWRAPCOORD_3);
+            renderState = D3DRS_WRAP0;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP1:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP1;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP2:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP2;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP3:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP3;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP4:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP4;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP5:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP5;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP6:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP6;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP7:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP7;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP8:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP8;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP9:                  /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP9;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP10:                 /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP10;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP11:                 /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP11;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP12:                 /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP12;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP13:                 /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP13;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP14:                 /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP14;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_WRAP15:                 /* SVGA3dWrapFlags - identical */
+            renderState = D3DRS_WRAP15;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_MULTISAMPLEANTIALIAS:   /* SVGA3dBool */
+            renderState = D3DRS_MULTISAMPLEANTIALIAS;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_MULTISAMPLEMASK:        /* uint32_t */
+            renderState = D3DRS_MULTISAMPLEMASK;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
+            renderState = D3DRS_INDEXEDVERTEXBLENDENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_TWEENFACTOR:            /* float */
+            renderState = D3DRS_TWEENFACTOR;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_ANTIALIASEDLINEENABLE:  /* SVGA3dBool */
+            renderState = D3DRS_ANTIALIASEDLINEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_COLORWRITEENABLE1:      /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+            renderState = D3DRS_COLORWRITEENABLE1;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_COLORWRITEENABLE2:      /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+            renderState = D3DRS_COLORWRITEENABLE2;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_COLORWRITEENABLE3:      /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+            renderState = D3DRS_COLORWRITEENABLE3;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+            renderState = D3DRS_SEPARATEALPHABLENDENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_SRCBLENDALPHA:          /* SVGA3dBlendOp */
+            renderState = D3DRS_SRCBLENDALPHA;
+            val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ONE /* default */);
+            break;
+
+        case SVGA3D_RS_DSTBLENDALPHA:          /* SVGA3dBlendOp */
+            renderState = D3DRS_DESTBLENDALPHA;
+            val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ZERO /* default */);
+            break;
+
+        case SVGA3D_RS_BLENDEQUATIONALPHA:     /* SVGA3dBlendEquation - identical */
+            renderState = D3DRS_BLENDOPALPHA;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_TRANSPARENCYANTIALIAS:  /* SVGA3dTransparencyAntialiasType */
+            AssertFailed();
+            /*
+            renderState = D3DRS_TRANSPARENCYANTIALIAS;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+
+        case SVGA3D_RS_LINEAA:                 /* SVGA3dBool */
+            renderState = D3DRS_ANTIALIASEDLINEENABLE;
+            val = pRenderState[i].uintValue;
+            break;
+
+        case SVGA3D_RS_LINEWIDTH:              /* float */
+            AssertFailed();
+            /*
+            renderState = D3DRS_LINEWIDTH;
+            val = pRenderState[i].uintValue;
+            */
+            break;
+        }
+
+        if (renderState != D3DRS_FORCE_DWORD)
+        {
+            hr = pContext->pDevice->SetRenderState(renderState, val);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderState: SetRenderState failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target)
+{
+    HRESULT                     hr;
+    PVMSVGA3DCONTEXT            pContext;
+    PVMSVGA3DSTATE              pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    PVMSVGA3DSURFACE            pRenderTarget;
+
+    AssertReturn(pState, VERR_NO_MEMORY);
+    AssertReturn(type < SVGA3D_RT_MAX, VERR_INVALID_PARAMETER);
+    AssertReturn(target.face == 0, VERR_INVALID_PARAMETER);
+    AssertReturn(target.mipmap == 0, VERR_INVALID_PARAMETER);
+
+    Log(("vmsvga3dSetRenderTarget cid=%x type=%x surface id=%x\n", cid, type, target.sid));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetRenderTarget invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    /* Save for vm state save/restore. */
+    pContext->state.aRenderTargets[type] = target.sid;
+
+    if (target.sid == SVGA3D_INVALID_ID)
+    {
+        /* Disable render target. */
+        switch (type)
+        {
+        case SVGA3D_RT_DEPTH:
+            hr = pContext->pDevice->SetDepthStencilSurface(NULL);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            break;
+
+        case SVGA3D_RT_STENCIL:
+            /* ignore; correct?? */
+            break;
+
+        case SVGA3D_RT_COLOR0:
+        case SVGA3D_RT_COLOR1:
+        case SVGA3D_RT_COLOR2:
+        case SVGA3D_RT_COLOR3:
+        case SVGA3D_RT_COLOR4:
+        case SVGA3D_RT_COLOR5:
+        case SVGA3D_RT_COLOR6:
+        case SVGA3D_RT_COLOR7:
+            pContext->sidRenderTarget = SVGA3D_INVALID_ID;
+
+            if (pState->fSupportedSurfaceNULL)
+            {
+                /* Create a dummy render target to satisfy D3D. This path is usually taken only to render into a depth buffer without
+                 * wishing to update an actual color render target
+                 */
+                IDirect3DSurface9* pDummyRenderTarget;
+                hr = pContext->pDevice->CreateRenderTarget(pThis->svga.uWidth, 
+                                                           pThis->svga.uHeight, 
+                                                           FOURCC_NULL,
+                                                           D3DMULTISAMPLE_NONE, 
+                                                           0, 
+                                                           FALSE, 
+                                                           &pDummyRenderTarget, 
+                                                           NULL);
+
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: CreateRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pDummyRenderTarget);
+                pDummyRenderTarget->Release();
+            }
+            else
+                hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, NULL);
+
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            break;
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        return VINF_SUCCESS;
+    }
+
+    AssertReturn(target.sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+    AssertReturn(target.sid < pState->cSurfaces && pState->paSurface[target.sid].id == target.sid, VERR_INVALID_PARAMETER);
+    pRenderTarget = &pState->paSurface[target.sid];
+
+    switch (type)
+    {
+    case SVGA3D_RT_DEPTH:
+    case SVGA3D_RT_STENCIL:
+        if (!pRenderTarget->u.pSurface)
+        {
+            DWORD cQualityLevels = 0;
+
+            /* Query the nr of quality levels for this particular format */
+            if (pRenderTarget->multiSampleTypeD3D != D3DMULTISAMPLE_NONE)
+            {
+                hr = pState->pD3D9->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT,
+                                                               D3DDEVTYPE_HAL,
+                                                               pRenderTarget->formatD3D,
+                                                               TRUE,        /* Windowed */
+                                                               pRenderTarget->multiSampleTypeD3D,
+                                                               &cQualityLevels);
+                Assert(hr == D3D_OK || hr == D3DERR_NOTAVAILABLE);
+            }
+
+            if (    pState->fSupportedSurfaceINTZ
+                &&  pRenderTarget->multiSampleTypeD3D == D3DMULTISAMPLE_NONE
+                &&  (   pRenderTarget->formatD3D == D3DFMT_D24S8
+                     || pRenderTarget->formatD3D == D3DFMT_D24X8))
+            {
+                Log(("vmsvga3dSetRenderTarget: Creating stencil surface as texture!\n"));
+                int rc = vmsvga3dCreateTexture(pContext, cid, pRenderTarget);
+                AssertRC(rc);   /* non-fatal */
+            }
+            
+            if (!pRenderTarget->fStencilAsTexture)
+            {
+                Log(("vmsvga3dSetRenderTarget DEPTH/STENCIL; cQualityLevels=%d\n", cQualityLevels));
+                hr = pContext->pDevice->CreateDepthStencilSurface(pRenderTarget->pMipmapLevels[0].size.width, 
+                                                                  pRenderTarget->pMipmapLevels[0].size.height,
+                                                                  pRenderTarget->formatD3D,
+                                                                  pRenderTarget->multiSampleTypeD3D,
+                                                                  ((cQualityLevels >= 1) ? cQualityLevels - 1 : 0),   /* 0 - (levels-1) */
+                                                                  FALSE,    /* not discardable */
+                                                                  &pRenderTarget->u.pSurface,
+                                                                  NULL);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: CreateDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+
+            pRenderTarget->idAssociatedContext = cid;
+
+#if 0 /* doesn't work */
+            if (    !pRenderTarget->fStencilAsTexture
+                &&  pRenderTarget->fDirty)
+            {
+                Log(("vmsvga3dSetRenderTarget: sync dirty depth/stencil buffer\n"));
+                Assert(pRenderTarget->faces[0].numMipLevels == 1);
+
+                for (uint32_t i = 0; i < pRenderTarget->faces[0].numMipLevels; i++)
+                {
+                    if (pRenderTarget->pMipmapLevels[i].fDirty)
+                    {
+                        D3DLOCKED_RECT LockedRect;
+
+                        hr = pRenderTarget->u.pSurface->LockRect(&LockedRect,
+                                                                 NULL,   /* entire surface */
+                                                                 0);
+
+                        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                        Log(("vmsvga3dSetRenderTarget: sync dirty texture mipmap level %d (pitch %x vs %x)\n", i, LockedRect.Pitch, pRenderTarget->pMipmapLevels[i].cbSurfacePitch));
+
+                        uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+                        uint8_t *pSrc  = (uint8_t *)pRenderTarget->pMipmapLevels[i].pSurfaceData;
+                        for (uint32_t j = 0; j < pRenderTarget->pMipmapLevels[i].size.height; j++)
+                        {
+                            memcpy(pDest, pSrc, pRenderTarget->pMipmapLevels[i].cbSurfacePitch);
+
+                            pDest += LockedRect.Pitch;
+                            pSrc  += pRenderTarget->pMipmapLevels[i].cbSurfacePitch;
+                        }
+
+                        hr = pRenderTarget->u.pSurface->UnlockRect();
+                        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                        pRenderTarget->pMipmapLevels[i].fDirty = false;
+                    }
+                }
+            }
+#endif
+        }
+        Assert(pRenderTarget->idAssociatedContext == cid);
+
+        /* @todo Assert(!pRenderTarget->fDirty); */
+
+        AssertReturn(pRenderTarget->u.pSurface, VERR_INVALID_PARAMETER);
+
+        pRenderTarget->fUsageD3D            |= D3DUSAGE_DEPTHSTENCIL;
+        pRenderTarget->flags                |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+
+        if (pRenderTarget->fStencilAsTexture)
+        {
+            IDirect3DSurface9 *pStencilSurface;
+
+            hr = pRenderTarget->u.pTexture->GetSurfaceLevel(0, &pStencilSurface);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+            hr = pContext->pDevice->SetDepthStencilSurface(pStencilSurface);
+            pStencilSurface->Release();
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        else
+        {
+            hr = pContext->pDevice->SetDepthStencilSurface(pRenderTarget->u.pSurface);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        break;
+
+    case SVGA3D_RT_COLOR0:
+    case SVGA3D_RT_COLOR1:
+    case SVGA3D_RT_COLOR2:
+    case SVGA3D_RT_COLOR3:
+    case SVGA3D_RT_COLOR4:
+    case SVGA3D_RT_COLOR5:
+    case SVGA3D_RT_COLOR6:
+    case SVGA3D_RT_COLOR7:
+    {
+        IDirect3DSurface9 *pSurface;
+        bool fTexture = false;
+        bool fShared = false;
+
+        /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+        vmsvga3dSurfaceFlush(pThis, pRenderTarget);
+
+        if (pRenderTarget->flags & SVGA3D_SURFACE_HINT_TEXTURE)
+        {
+            fTexture = true;
+
+            /* A texture surface can be used as a render target to fill it and later on used as a texture. */
+            if (!pRenderTarget->u.pTexture)
+            {
+                Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->flags, pRenderTarget->format));
+                int rc = vmsvga3dCreateTexture(pContext, cid, pRenderTarget);
+                AssertRCReturn(rc, rc);
+            }
+
+#ifndef VBOX_VMSVGA3D_WITH_OPENGL
+            if (pRenderTarget->idAssociatedContext != cid)
+            {
+                Log(("vmsvga3dSetRenderTarget; using texture %x created for another context (%d vs %d)\n", target.sid, pRenderTarget->idAssociatedContext, cid));
+
+                PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pThis, pContext, pRenderTarget);
+                AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+                hr = pSharedSurface->u.pTexture->GetSurfaceLevel(0 /* Texture level 0 */,
+                                                                 &pSurface);
+
+                fShared = true;
+            }
+            else
+#endif
+                hr = pRenderTarget->u.pTexture->GetSurfaceLevel(0 /* Texture level 0 */,
+                                                                &pSurface);
+
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        else
+        {
+            if (!pRenderTarget->u.pSurface)
+            {
+                DWORD cQualityLevels = 0;
+
+                /* Query the nr of quality levels for this particular format */
+                if (pRenderTarget->multiSampleTypeD3D != D3DMULTISAMPLE_NONE)
+                {
+                    hr = pState->pD3D9->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT,
+                                                                   D3DDEVTYPE_HAL,
+                                                                   pRenderTarget->formatD3D,
+                                                                   TRUE,        /* Windowed */
+                                                                   pRenderTarget->multiSampleTypeD3D,
+                                                                   &cQualityLevels);
+                    Assert(hr == D3D_OK || hr == D3DERR_NOTAVAILABLE);
+                }
+
+                Log(("vmsvga3dSetRenderTarget COLOR; cQualityLevels=%d\n", cQualityLevels));
+                Log(("Create rendertarget (%d,%d) format=%x multisample=%x\n", pRenderTarget->pMipmapLevels[0].size.width, pRenderTarget->pMipmapLevels[0].size.height, pRenderTarget->formatD3D, pRenderTarget->multiSampleTypeD3D));
+
+                hr = pContext->pDevice->CreateRenderTarget(pRenderTarget->pMipmapLevels[0].size.width, 
+                                                           pRenderTarget->pMipmapLevels[0].size.height, 
+                                                           pRenderTarget->formatD3D,
+                                                           pRenderTarget->multiSampleTypeD3D,
+                                                           ((cQualityLevels >= 1) ? cQualityLevels - 1 : 0),   /* 0 - (levels-1) */
+                                                           TRUE,   /* lockable */
+                                                           &pRenderTarget->u.pSurface,
+                                                           NULL);
+                AssertReturn(hr == D3D_OK, VERR_INTERNAL_ERROR);
+
+                pRenderTarget->idAssociatedContext   = cid;
+            }
+            else
+                AssertReturn(pRenderTarget->fUsageD3D & D3DUSAGE_RENDERTARGET, VERR_INVALID_PARAMETER);
+
+            Assert(pRenderTarget->idAssociatedContext == cid);
+            pSurface = pRenderTarget->u.pSurface;
+        }
+
+        AssertReturn(pRenderTarget->u.pSurface, VERR_INVALID_PARAMETER);
+        Assert(!pRenderTarget->fDirty);
+
+        pRenderTarget->fUsageD3D            |= D3DUSAGE_RENDERTARGET;
+        pRenderTarget->flags                |= SVGA3D_SURFACE_HINT_RENDERTARGET;
+
+        hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pSurface);
+        if (fTexture)
+            pSurface->Release();    /* Release reference to texture level 0 */
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        pContext->sidRenderTarget = target.sid;
+
+        /* Changing the render target resets the viewport; restore it here. */
+        if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
+            vmsvga3dSetViewPort(pThis, cid, &pContext->state.RectViewPort);
+
+        break;
+    }
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Convert SVGA texture combiner value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureCombiner2D3D(uint32_t value)
+{
+    switch (value)
+    {
+    case SVGA3D_TC_DISABLE:
+        return D3DTOP_DISABLE;
+    case SVGA3D_TC_SELECTARG1:
+        return D3DTOP_SELECTARG1;
+    case SVGA3D_TC_SELECTARG2:
+        return D3DTOP_SELECTARG2;
+    case SVGA3D_TC_MODULATE:
+        return D3DTOP_MODULATE;
+    case SVGA3D_TC_ADD:
+        return D3DTOP_ADD;
+    case SVGA3D_TC_ADDSIGNED:
+        return D3DTOP_ADDSIGNED;
+    case SVGA3D_TC_SUBTRACT:
+        return D3DTOP_SUBTRACT;
+    case SVGA3D_TC_BLENDTEXTUREALPHA:
+        return D3DTOP_BLENDTEXTUREALPHA;
+    case SVGA3D_TC_BLENDDIFFUSEALPHA:
+        return D3DTOP_BLENDDIFFUSEALPHA;
+    case SVGA3D_TC_BLENDCURRENTALPHA:
+        return D3DTOP_BLENDCURRENTALPHA;
+    case SVGA3D_TC_BLENDFACTORALPHA:
+        return D3DTOP_BLENDFACTORALPHA;
+    case SVGA3D_TC_MODULATE2X:
+        return D3DTOP_MODULATE2X;
+    case SVGA3D_TC_MODULATE4X:
+        return D3DTOP_MODULATE4X;
+    case SVGA3D_TC_DSDT:
+        AssertFailed(); /* @todo ??? */
+        return D3DTOP_DISABLE;
+    case SVGA3D_TC_DOTPRODUCT3:
+        return D3DTOP_DOTPRODUCT3;
+    case SVGA3D_TC_BLENDTEXTUREALPHAPM:
+        return D3DTOP_BLENDTEXTUREALPHAPM;
+    case SVGA3D_TC_ADDSIGNED2X:
+        return D3DTOP_ADDSIGNED2X;
+    case SVGA3D_TC_ADDSMOOTH:
+        return D3DTOP_ADDSMOOTH;
+    case SVGA3D_TC_PREMODULATE:
+        return D3DTOP_PREMODULATE;
+    case SVGA3D_TC_MODULATEALPHA_ADDCOLOR:
+        return D3DTOP_MODULATEALPHA_ADDCOLOR;
+    case SVGA3D_TC_MODULATECOLOR_ADDALPHA:
+        return D3DTOP_MODULATECOLOR_ADDALPHA;
+    case SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR:
+        return D3DTOP_MODULATEINVALPHA_ADDCOLOR;
+    case SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA:
+        return D3DTOP_MODULATEINVCOLOR_ADDALPHA;
+    case SVGA3D_TC_BUMPENVMAPLUMINANCE:
+        return D3DTOP_BUMPENVMAPLUMINANCE;
+    case SVGA3D_TC_MULTIPLYADD:
+        return D3DTOP_MULTIPLYADD;
+    case SVGA3D_TC_LERP:
+        return D3DTOP_LERP;
+    default:
+        AssertFailed();
+        return D3DTOP_DISABLE;
+    }
+}
+
+/**
+ * Convert SVGA texture arg data value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureArgData2D3D(uint32_t value)
+{
+    switch (value)
+    {
+    case SVGA3D_TA_CONSTANT:
+        return D3DTA_CONSTANT;
+    case SVGA3D_TA_PREVIOUS:
+        return D3DTA_CURRENT;   /* current = previous */
+    case SVGA3D_TA_DIFFUSE:
+        return D3DTA_DIFFUSE;
+    case SVGA3D_TA_TEXTURE:
+        return D3DTA_TEXTURE;
+    case SVGA3D_TA_SPECULAR:
+        return D3DTA_SPECULAR;
+    default:
+        AssertFailed();
+        return 0;
+    }
+}
+
+/**
+ * Convert SVGA texture transform flag value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextTransformFlags2D3D(uint32_t value)
+{
+    switch (value)
+    {
+    case SVGA3D_TEX_TRANSFORM_OFF:
+        return D3DTTFF_DISABLE;
+    case SVGA3D_TEX_TRANSFORM_S:
+        return D3DTTFF_COUNT1;      /* @todo correct? */
+    case SVGA3D_TEX_TRANSFORM_T:
+        return D3DTTFF_COUNT2;      /* @todo correct? */
+    case SVGA3D_TEX_TRANSFORM_R:
+        return D3DTTFF_COUNT3;      /* @todo correct? */
+    case SVGA3D_TEX_TRANSFORM_Q:
+        return D3DTTFF_COUNT4;      /* @todo correct? */
+    case SVGA3D_TEX_PROJECTED:
+        return D3DTTFF_PROJECTED;
+    default:
+        AssertFailed();
+        return 0;
+    }
+}
+
+int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
+{
+    DWORD                       val;
+    HRESULT                     hr;
+    PVMSVGA3DCONTEXT            pContext;
+    PVMSVGA3DSTATE              pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetTextureState %x cTextureState=%d\n", cid, cTextureStates));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetTextureState invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    for (unsigned i = 0; i < cTextureStates; i++)
+    {
+        D3DTEXTURESTAGESTATETYPE textureType = D3DTSS_FORCE_DWORD;
+        D3DSAMPLERSTATETYPE      samplerType = D3DSAMP_FORCE_DWORD;
+
+        Log(("vmsvga3dSetTextureState: cid=%x stage=%d type=%s (%x) val=%x\n", cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
+        /* Record the texture state for vm state saving. */
+        if (    pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE
+            &&  pTextureState[i].name < SVGA3D_TS_MAX)
+        {
+            pContext->state.aTextureState[pTextureState[i].stage][pTextureState[i].name] = pTextureState[i];
+        }
+
+        switch (pTextureState[i].name)
+        {
+        case SVGA3D_TS_COLOROP:                     /* SVGA3dTextureCombiner */
+            textureType = D3DTSS_COLOROP;
+            val = vmsvga3dTextureCombiner2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_COLORARG0:                   /* SVGA3dTextureArgData */
+            textureType = D3DTSS_COLORARG0;
+            val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_COLORARG1:                   /* SVGA3dTextureArgData */
+            textureType = D3DTSS_COLORARG1;
+            val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_COLORARG2:                   /* SVGA3dTextureArgData */
+            textureType = D3DTSS_COLORARG2;
+            val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_ALPHAOP:                     /* SVGA3dTextureCombiner */
+            textureType = D3DTSS_ALPHAOP;
+            val = vmsvga3dTextureCombiner2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_ALPHAARG0:                   /* SVGA3dTextureArgData */
+            textureType = D3DTSS_ALPHAARG0;
+            val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_ALPHAARG1:                   /* SVGA3dTextureArgData */
+            textureType = D3DTSS_ALPHAARG1;
+            val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_ALPHAARG2:                   /* SVGA3dTextureArgData */
+            textureType = D3DTSS_ALPHAARG2;
+            val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_BUMPENVMAT00:                /* float */
+            textureType = D3DTSS_BUMPENVMAT00;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_BUMPENVMAT01:                /* float */
+            textureType = D3DTSS_BUMPENVMAT01;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_BUMPENVMAT10:                /* float */
+            textureType = D3DTSS_BUMPENVMAT10;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_BUMPENVMAT11:                /* float */
+            textureType = D3DTSS_BUMPENVMAT11;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_TEXCOORDINDEX:               /* uint32_t */
+            textureType = D3DTSS_TEXCOORDINDEX;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_BUMPENVLSCALE:               /* float */
+            textureType = D3DTSS_BUMPENVLSCALE;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_BUMPENVLOFFSET:              /* float */
+            textureType = D3DTSS_BUMPENVLOFFSET;
+            val = pTextureState[i].value;
+            break;
+
+        case SVGA3D_TS_TEXTURETRANSFORMFLAGS:       /* SVGA3dTexTransformFlags */
+            textureType = D3DTSS_TEXTURETRANSFORMFLAGS;
+            val = vmsvga3dTextTransformFlags2D3D(pTextureState[i].value);
+            break;
+
+        case SVGA3D_TS_BIND_TEXTURE:                /* SVGA3dSurfaceId */
+            if (pTextureState[i].value == SVGA3D_INVALID_ID)
+            {
+                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x\n", pTextureState[i].stage, pTextureState[i].value));
+
+                pContext->aSidActiveTexture[pTextureState[i].stage] = SVGA3D_INVALID_ID;
+                /* Unselect the currently associated texture. */
+                hr = pContext->pDevice->SetTexture(pTextureState[i].stage,
+                                                   NULL);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTextureState: SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+            else
+            {
+                HRESULT hr;
+                uint32_t sid = pTextureState[i].value;
+
+                AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+                AssertReturn(sid < pState->cSurfaces && pState->paSurface[sid].id == sid, VERR_INVALID_PARAMETER);
+
+                PVMSVGA3DSURFACE pSurface = &pState->paSurface[sid];
+
+                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x (%d,%d)\n", pTextureState[i].stage, pTextureState[i].value, pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height));
+
+                if (!pSurface->u.pTexture)
+                {
+                    Assert(pSurface->idAssociatedContext == SVGA3D_INVALID_ID);
+                    Log(("CreateTexture (%d,%d) level=%d fUsage=%x format=%x\n", pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height, pSurface->faces[0].numMipLevels, pSurface->fUsageD3D, pSurface->formatD3D));
+                    int rc = vmsvga3dCreateTexture(pContext, cid, pSurface);
+                    AssertRCReturn(rc, rc);
+                }
+                else
+                {
+                    /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+                    vmsvga3dSurfaceFlush(pThis, pSurface);
+                }
+
+#ifndef VBOX_VMSVGA3D_WITH_OPENGL
+                if (pSurface->idAssociatedContext != cid)
+                {
+                    Log(("vmsvga3dSetTextureState; using texture %x created for another context (%d vs %d)\n", sid, pSurface->idAssociatedContext, cid));
+    
+                    PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pThis, pContext, pSurface);
+                    AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+                    hr = pContext->pDevice->SetTexture(pTextureState[i].stage,
+                                                       pSharedSurface->u.pTexture);
+                }
+                else
+#endif
+                    hr = pContext->pDevice->SetTexture(pTextureState[i].stage,
+                                                       pSurface->u.pTexture);
+
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTextureState: SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                pContext->aSidActiveTexture[pTextureState[i].stage] = sid;
+            }
+            /* Finished; continue with the next one. */
+            continue;
+
+        case SVGA3D_TS_ADDRESSW:                    /* SVGA3dTextureAddress */
+            samplerType = D3DSAMP_ADDRESSW;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+            break;
+
+        case SVGA3D_TS_ADDRESSU:                    /* SVGA3dTextureAddress */
+            samplerType = D3DSAMP_ADDRESSU;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+            break;
+
+        case SVGA3D_TS_ADDRESSV:                    /* SVGA3dTextureAddress */
+            samplerType = D3DSAMP_ADDRESSV;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+            break;
+
+        case SVGA3D_TS_MIPFILTER:                   /* SVGA3dTextureFilter */
+            samplerType = D3DSAMP_MIPFILTER;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_FLATCUBIC);
+            Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+            break;
+
+        case SVGA3D_TS_MAGFILTER:                   /* SVGA3dTextureFilter */
+            samplerType = D3DSAMP_MAGFILTER;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_FLATCUBIC);
+            Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+            break;
+
+        case SVGA3D_TS_MINFILTER:                   /* SVGA3dTextureFilter */
+            samplerType = D3DSAMP_MINFILTER;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_FLATCUBIC);
+            Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+            break;
+
+        case SVGA3D_TS_BORDERCOLOR:                 /* SVGA3dColor */
+            samplerType = D3DSAMP_BORDERCOLOR;
+            val = pTextureState[i].value;   /* Identical */
+            break;
+            
+        case SVGA3D_TS_TEXTURE_LOD_BIAS:            /* float */
+            samplerType = D3DSAMP_MIPMAPLODBIAS;
+            val = pTextureState[i].value;   /* Identical */
+            break;
+            
+        case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:        /* uint32_t */
+            samplerType = D3DSAMP_MAXMIPLEVEL;
+            val = pTextureState[i].value;   /* Identical?? */
+            break;
+            
+        case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL:   /* uint32_t */
+            samplerType = D3DSAMP_MAXANISOTROPY;
+            val = pTextureState[i].value;   /* Identical?? */
+            break;
+            
+        case SVGA3D_TS_GAMMA:                       /* float */
+            samplerType = D3DSAMP_SRGBTEXTURE;
+            /* Boolean in D3D */
+            if (pTextureState[i].floatValue == 1.0f)
+                val = FALSE;
+            else
+                val = TRUE;
+            break;           
+
+        /* Internal commands, that don't map directly to the SetTextureStageState API. */
+        case SVGA3D_TS_TEXCOORDGEN:                 /* SVGA3dTextureCoordGen */
+            AssertFailed();
+            break;
+        }
+
+        if (textureType != D3DTSS_FORCE_DWORD)
+        {
+            hr = pContext->pDevice->SetTextureStageState(pTextureState[i].stage, textureType, val);
+        }
+        else
+        {
+            Assert(samplerType != D3DSAMP_FORCE_DWORD);
+            hr = pContext->pDevice->SetSamplerState(pTextureState[i].stage, samplerType, val);
+        }
+
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTextureState: SetTextureStageState failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetMaterial(PVGASTATE pThis, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial)
+{
+    HRESULT               hr;
+    D3DMATERIAL9          material;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetMaterial %x face %d\n", cid, face));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetMaterial invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    AssertReturn(face < SVGA3D_FACE_MAX, VERR_INVALID_PARAMETER);
+
+    /* Save for vm state save/restore. */
+    pContext->state.aMaterial[face].fValid = true;
+    pContext->state.aMaterial[face].material = *pMaterial;
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_MATERIAL;
+
+    /* @note face not used for D3D9 */
+    /* @todo ignore everything except SVGA3D_FACE_NONE? */
+    //Assert(face == SVGA3D_FACE_NONE);
+    if (face != SVGA3D_FACE_NONE)
+        Log(("Unsupported face %d!!\n", face));
+
+    material.Diffuse.r     = pMaterial->diffuse[0];
+    material.Diffuse.g     = pMaterial->diffuse[1];
+    material.Diffuse.b     = pMaterial->diffuse[2];
+    material.Diffuse.a     = pMaterial->diffuse[3];
+    material.Ambient.r     = pMaterial->ambient[0];
+    material.Ambient.g     = pMaterial->ambient[1];
+    material.Ambient.b     = pMaterial->ambient[2];
+    material.Ambient.a     = pMaterial->ambient[3];
+    material.Specular.r    = pMaterial->specular[0];
+    material.Specular.g    = pMaterial->specular[1];
+    material.Specular.b    = pMaterial->specular[2];
+    material.Specular.a    = pMaterial->specular[3];
+    material.Emissive.r    = pMaterial->emissive[0];
+    material.Emissive.g    = pMaterial->emissive[1];
+    material.Emissive.b    = pMaterial->emissive[2];
+    material.Emissive.a    = pMaterial->emissive[3];
+    material.Power         = pMaterial->shininess;
+
+    hr = pContext->pDevice->SetMaterial(&material);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetMaterial: SetMaterial failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetLightData(PVGASTATE pThis, uint32_t cid, uint32_t index, SVGA3dLightData *pData)
+{
+    HRESULT               hr;
+    D3DLIGHT9             light;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetLightData %x index=%d\n", cid, index));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetLightData invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    switch (pData->type)
+    {
+    case SVGA3D_LIGHTTYPE_POINT:
+        light.Type = D3DLIGHT_POINT;
+        break;
+
+    case SVGA3D_LIGHTTYPE_SPOT1:    /* 1-cone, in degrees */
+        light.Type = D3DLIGHT_SPOT;
+        break;
+
+    case SVGA3D_LIGHTTYPE_DIRECTIONAL:
+        light.Type = D3DLIGHT_DIRECTIONAL;
+        break;
+
+    case SVGA3D_LIGHTTYPE_SPOT2:    /* 2-cone, in radians */
+    default:
+        Log(("Unsupported light type!!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    /* Store for vm state save/restore */
+    if (index < SVGA3D_MAX_LIGHTS)
+    {
+        pContext->state.aLightData[index].fValidData = true;
+        pContext->state.aLightData[index].data = *pData;
+    }
+    else
+        AssertFailed();
+
+    light.Diffuse.r     = pData->diffuse[0];
+    light.Diffuse.g     = pData->diffuse[1];
+    light.Diffuse.b     = pData->diffuse[2];
+    light.Diffuse.a     = pData->diffuse[3];
+    light.Specular.r    = pData->specular[0];
+    light.Specular.g    = pData->specular[1];
+    light.Specular.b    = pData->specular[2];
+    light.Specular.a    = pData->specular[3];
+    light.Ambient.r     = pData->ambient[0];
+    light.Ambient.g     = pData->ambient[1];
+    light.Ambient.b     = pData->ambient[2];
+    light.Ambient.a     = pData->ambient[3];
+    light.Position.x    = pData->position[0];
+    light.Position.y    = pData->position[1];
+    light.Position.z    = pData->position[2];       /* @note 4th position not available in D3D9 */
+    light.Direction.x   = pData->direction[0];
+    light.Direction.y   = pData->direction[1];
+    light.Direction.z   = pData->direction[2];      /* @note 4th position not available in D3D9 */
+    light.Range         = pData->range;
+    light.Falloff       = pData->falloff;
+    light.Attenuation0  = pData->attenuation0;
+    light.Attenuation1  = pData->attenuation1;
+    light.Attenuation2  = pData->attenuation2;
+    light.Theta         = pData->theta;
+    light.Phi           = pData->phi;
+
+    hr = pContext->pDevice->SetLight(index, &light);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetLightData: SetLight failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetLightEnabled(PVGASTATE pThis, uint32_t cid, uint32_t index, uint32_t enabled)
+{
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetLightEnabled %x %d -> %d\n", cid, index, enabled));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetLightEnabled invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    /* Store for vm state save/restore */
+    if (index < SVGA3D_MAX_LIGHTS)
+        pContext->state.aLightData[index].fEnabled = !!enabled;
+    else
+        AssertFailed();
+
+    hr = pContext->pDevice->LightEnable(index, (BOOL)enabled);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetLightEnabled: LightEnable failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetViewPort(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
+{
+    HRESULT               hr;
+    D3DVIEWPORT9          viewPort;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetViewPort %x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetViewPort invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    /* Save for vm state save/restore. */
+    pContext = &pState->paContext[cid];
+    pContext->state.RectViewPort = *pRect;
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VIEWPORT;
+
+    hr = pContext->pDevice->GetViewport(&viewPort);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetViewPort: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    viewPort.X      = pRect->x;
+    viewPort.Y      = pRect->y;
+    viewPort.Width  = pRect->w;
+    viewPort.Height = pRect->h;
+    /* viewPort.MinZ & MaxZ are not changed from the current setting. */
+
+    hr = pContext->pDevice->SetViewport(&viewPort);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetViewPort: SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid,  uint32_t index, float plane[4])
+{
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetClipPlane %x %d (%d,%d)(%d,%d)\n", cid, index, (unsigned)(plane[0] * 100.0), (unsigned)(plane[1] * 100.0), (unsigned)(plane[2] * 100.0), (unsigned)(plane[3] * 100.0)));
+    AssertReturn(index < SVGA3D_CLIPPLANE_MAX, VERR_INVALID_PARAMETER);
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetClipPlane invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    /* Store for vm state save/restore. */
+    pContext->state.aClipPlane[index].fValid = true;
+    memcpy(pContext->state.aClipPlane[index].plane, plane, sizeof(plane));
+
+    hr = pContext->pDevice->SetClipPlane(index, plane);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetClipPlane: SetClipPlane failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect)
+{
+    DWORD                 clearFlagD3D = 0;
+    D3DRECT              *pRectD3D = NULL;
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dCommandClear %x clearFlag=%x color=%x depth=%d stencil=%x cRects=%d\n", cid, clearFlag, color, (uint32_t)(depth * 100.0), stencil, cRects));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dCommandClear invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    if (clearFlag & SVGA3D_CLEAR_COLOR)
+        clearFlagD3D |= D3DCLEAR_TARGET;
+    if (clearFlag & SVGA3D_CLEAR_STENCIL)
+        clearFlagD3D |= D3DCLEAR_STENCIL;
+    if (clearFlag & SVGA3D_CLEAR_DEPTH)
+        clearFlagD3D |= D3DCLEAR_ZBUFFER;
+
+    if (cRects)
+    {
+        pRectD3D = (D3DRECT *)RTMemAlloc(sizeof(D3DRECT) * cRects);
+        AssertReturn(pRectD3D, VERR_NO_MEMORY);
+
+        for (unsigned i=0; i < cRects; i++)
+        {
+            Log(("vmsvga3dCommandClear: rect %d (%d,%d)(%d,%d)\n", i, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
+            pRectD3D[i].x1 = pRect[i].x;
+            pRectD3D[i].y1 = pRect[i].y;
+            pRectD3D[i].x2 = pRect[i].x + pRect[i].w;   /* exclusive */
+            pRectD3D[i].y2 = pRect[i].y + pRect[i].h;   /* exclusive */
+        }
+    }
+
+    hr = pContext->pDevice->Clear(cRects, pRectD3D, clearFlagD3D, (D3DCOLOR)color, depth, stencil);
+    if (pRectD3D)
+        RTMemFree(pRectD3D);
+
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandClear: Clear failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    /* Make sure we can track drawing usage of active render targets. */
+    if (pContext->sidRenderTarget != SVGA3D_INVALID_ID)
+        vmsvga3dSurfaceTrackUsage(pThis, pContext, pContext->sidRenderTarget);
+
+    return VINF_SUCCESS;
+}
+
+/* Convert VMWare vertex declaration to its D3D equivalent. */
+int vmsvga3dVertexDecl2D3D(SVGA3dVertexArrayIdentity &identity, D3DVERTEXELEMENT9 *pVertexElement)
+{
+    /* usage, method and type are identical; make sure. */
+    AssertCompile(SVGA3D_DECLTYPE_FLOAT1 == D3DDECLTYPE_FLOAT1);
+    AssertCompile(SVGA3D_DECLTYPE_FLOAT16_4 == D3DDECLTYPE_FLOAT16_4);
+    AssertCompile(SVGA3D_DECLMETHOD_DEFAULT == D3DDECLMETHOD_DEFAULT);
+    AssertCompile(SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED == D3DDECLMETHOD_LOOKUPPRESAMPLED);
+    AssertCompile(D3DDECLUSAGE_POSITION == SVGA3D_DECLUSAGE_POSITION);
+    AssertCompile(D3DDECLUSAGE_SAMPLE == SVGA3D_DECLUSAGE_SAMPLE);
+
+    pVertexElement->Stream      = 0;
+    pVertexElement->Offset      = 0;
+    pVertexElement->Type        = identity.type;
+    pVertexElement->Method      = identity.method;
+    pVertexElement->Usage       = identity.usage;
+    pVertexElement->UsageIndex  = identity.usageIndex;
+    return VINF_SUCCESS;
+}
+
+/* Convert VMWare primitive type to its D3D equivalent. */
+int vmsvga3dPrimitiveType2D3D(SVGA3dPrimitiveType PrimitiveType, D3DPRIMITIVETYPE *pPrimitiveTypeD3D)
+{
+    switch (PrimitiveType)
+    {
+    case SVGA3D_PRIMITIVE_TRIANGLELIST:
+        *pPrimitiveTypeD3D = D3DPT_TRIANGLELIST;
+        break;
+    case SVGA3D_PRIMITIVE_POINTLIST:
+        *pPrimitiveTypeD3D = D3DPT_POINTLIST;
+        break;
+    case SVGA3D_PRIMITIVE_LINELIST:
+        *pPrimitiveTypeD3D = D3DPT_LINELIST;
+        break;
+    case SVGA3D_PRIMITIVE_LINESTRIP:
+        *pPrimitiveTypeD3D = D3DPT_LINESTRIP;
+        break;
+    case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+        *pPrimitiveTypeD3D = D3DPT_TRIANGLESTRIP;
+        break;
+    case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+        *pPrimitiveTypeD3D = D3DPT_TRIANGLEFAN;
+        break;
+    default:
+        return VERR_INVALID_PARAMETER;
+    }
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t idStream, D3DVERTEXELEMENT9 *pVertexElement)
+{
+    HRESULT               hr;
+    int                   rc;
+    uint32_t              uVertexMinOffset = 0xffffffff;
+    uint32_t              uVertexMaxOffset = 0;
+
+    /* Create a vertex declaration array */
+    for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+    {
+        unsigned            sidVertex = pVertexDecl[iVertex].array.surfaceId;
+        PVMSVGA3DSURFACE    pVertexSurface;
+
+        AssertReturn(sidVertex < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+        AssertReturn(sidVertex < pState->cSurfaces && pState->paSurface[sidVertex].id == sidVertex, VERR_INVALID_PARAMETER);
+
+        pVertexSurface = &pState->paSurface[sidVertex];
+        Log(("vmsvga3dDrawPrimitives: vertex surface %x stream %d\n", sidVertex, idStream));
+        Log(("vmsvga3dDrawPrimitives: type=%s (%d) method=%s (%d) usage=%s (%d) usageIndex=%d stride=%d offset=%d\n", vmsvgaDeclType2String(pVertexDecl[iVertex].identity.type), pVertexDecl[iVertex].identity.type, vmsvgaDeclMethod2String(pVertexDecl[iVertex].identity.method), pVertexDecl[iVertex].identity.method, vmsvgaDeclUsage2String(pVertexDecl[iVertex].identity.usage), pVertexDecl[iVertex].identity.usage, pVertexDecl[iVertex].identity.usageIndex, pVertexDecl[iVertex].array.stride, pVe [...]
+
+        rc = vmsvga3dVertexDecl2D3D(pVertexDecl[iVertex].identity, &pVertexElement[iVertex]);
+        AssertRCReturn(rc, rc);
+        pVertexElement[iVertex].Stream = idStream;
+
+#ifdef LOG_ENABLED
+        if (pVertexDecl[iVertex].array.stride == 0)
+            Log(("vmsvga3dDrawPrimitives: stride == 0! Can be valid\n"));
+#endif
+
+        /* Find the min and max vertex offset to determine the right base offset to use in the vertex declaration. */
+        if (pVertexDecl[iVertex].array.offset > uVertexMaxOffset)
+            uVertexMaxOffset = pVertexDecl[iVertex].array.offset;
+        if (pVertexDecl[iVertex].array.offset < uVertexMinOffset)
+            uVertexMinOffset = pVertexDecl[iVertex].array.offset;
+
+        if (!pVertexSurface->u.pVertexBuffer)
+        {
+            Assert(iVertex == 0);
+
+            Log(("vmsvga3dDrawPrimitives: create vertex buffer fDirty=%d\n", pVertexSurface->fDirty));
+            hr = pContext->pDevice->CreateVertexBuffer(pVertexSurface->pMipmapLevels[0].cbSurface,
+                                                       D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY /* possible severe performance penalty otherwise (according to d3d debug output) */,
+                                                       0, /* non-FVF */
+                                                       D3DPOOL_DEFAULT,
+                                                       &pVertexSurface->u.pVertexBuffer,
+                                                       NULL);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: CreateVertexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+            if (pVertexSurface->fDirty)
+            {
+                void *pData;
+
+                hr = pVertexSurface->u.pVertexBuffer->Lock(0, 0, &pData, 0);
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: Lock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                memcpy(pData, pVertexSurface->pMipmapLevels[0].pSurfaceData, pVertexSurface->pMipmapLevels[0].cbSurface);
+
+                hr = pVertexSurface->u.pVertexBuffer->Unlock();
+                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: Unlock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                pVertexSurface->pMipmapLevels[0].fDirty = false;
+                pVertexSurface->fDirty = false;
+            }
+            pVertexSurface->flags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+        }
+        else
+            Assert(pVertexSurface->fDirty == false);
+    }
+
+    /* Set the right vertex offset values for each declaration. */
+    for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+    {
+        pVertexElement[iVertex].Offset = pVertexDecl[iVertex].array.offset - uVertexMinOffset;
+#ifdef LOG_ENABLED
+        if (pVertexElement[iVertex].Offset >= pVertexDecl[0].array.stride)
+            Log(("vmsvga3dDrawPrimitives: WARNING: offset > stride!!\n"));
+#endif
+
+        Log(("vmsvga3dDrawPrimitives: vertex %d offset = %d (stride %d) (min=%d max=%d)\n", iVertex, pVertexDecl[iVertex].array.offset, pVertexDecl[iVertex].array.stride, uVertexMinOffset, uVertexMaxOffset));
+    }
+
+    PVMSVGA3DSURFACE pVertexSurface;
+    unsigned         sidVertex = pVertexDecl[0].array.surfaceId;
+    unsigned         strideVertex = pVertexDecl[0].array.stride;
+
+    pVertexSurface = &pState->paSurface[sidVertex];
+
+    Log(("vmsvga3dDrawPrimitives: SetStreamSource %d min offset=%d stride=%d\n", idStream, uVertexMinOffset, strideVertex));
+    hr = pContext->pDevice->SetStreamSource(idStream,
+                                            pVertexSurface->u.pVertexBuffer,
+                                            uVertexMinOffset,
+                                            strideVertex);
+
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetStreamSource failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
+{
+    PVMSVGA3DCONTEXT             pContext;
+    PVMSVGA3DSTATE               pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_INTERNAL_ERROR);
+    int                          rc;
+    HRESULT                      hr;
+    uint32_t                     iCurrentVertex, iCurrentStreamId;
+    IDirect3DVertexDeclaration9 *pVertexDeclD3D = NULL;
+    D3DVERTEXELEMENT9           *pVertexElement = NULL;
+    D3DVERTEXELEMENT9            VertexEnd = D3DDECL_END();
+
+    Log(("vmsvga3dDrawPrimitives %x numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
+
+    AssertReturn(numVertexDecls && numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, VERR_INVALID_PARAMETER);
+    AssertReturn(numRanges && numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, VERR_INVALID_PARAMETER);
+    AssertReturn(!cVertexDivisor || cVertexDivisor == numVertexDecls, VERR_INVALID_PARAMETER);
+    /* @todo */
+    Assert(!cVertexDivisor);
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dDrawPrimitives invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    pContext = &pState->paContext[cid];
+
+    /* Begin a scene before rendering anything. */
+    hr = pContext->pDevice->BeginScene();
+    AssertMsgReturn(hr == D3D_OK, ("BeginScene failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    pVertexElement = (D3DVERTEXELEMENT9 *)RTMemAllocZ(sizeof(D3DVERTEXELEMENT9) * (numVertexDecls + 1));
+    if (!pVertexElement)
+    {
+        Assert(pVertexElement);
+        rc = VERR_INTERNAL_ERROR;
+        goto internal_error;
+    }
+
+    /* Process all vertex declarations. Each vertex buffer is represented by one stream source id. */
+    iCurrentVertex   = 0;
+    iCurrentStreamId = 0;
+    while (iCurrentVertex < numVertexDecls)
+    {
+        uint32_t sidVertex = SVGA_ID_INVALID;
+        uint32_t iVertex;
+        uint32_t uVertexMinOffset = 0xffffffff;
+
+        for (iVertex = iCurrentVertex; iVertex < numVertexDecls; iVertex++)
+        {
+            if (    (   sidVertex != SVGA_ID_INVALID
+                     && pVertexDecl[iVertex].array.surfaceId != sidVertex
+                    )
+                /* We must put vertex declarations that start at a different element in another stream as d3d only handles offsets < stride. */
+                ||  (   uVertexMinOffset != 0xffffffff
+                     && pVertexDecl[iVertex].array.offset >= uVertexMinOffset + pVertexDecl[iCurrentVertex].array.stride
+                    )
+               )
+                break;
+            sidVertex = pVertexDecl[iVertex].array.surfaceId;
+
+            if (uVertexMinOffset > pVertexDecl[iVertex].array.offset)
+                uVertexMinOffset = pVertexDecl[iVertex].array.offset;
+        }
+
+        rc = vmsvga3dDrawPrimitivesProcessVertexDecls(pState, pContext, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex], iCurrentStreamId, &pVertexElement[iCurrentVertex]);
+        if (RT_FAILURE(rc))
+            goto internal_error;
+
+        iCurrentVertex = iVertex;
+        iCurrentStreamId++;
+    }
+
+    /* Mark the end. */
+    memcpy(&pVertexElement[numVertexDecls], &VertexEnd, sizeof(VertexEnd));
+
+    hr = pContext->pDevice->CreateVertexDeclaration(&pVertexElement[0],
+                                                    &pVertexDeclD3D);
+    if (hr != D3D_OK)
+    {
+        AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: CreateVertexDeclaration failed with %x\n", hr));
+        rc = VERR_INTERNAL_ERROR;
+        goto internal_error;
+    }
+
+    hr = pContext->pDevice->SetVertexDeclaration(pVertexDeclD3D);
+    if (hr != D3D_OK)
+    {
+        AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetVertexDeclaration failed with %x\n", hr));
+        rc = VERR_INTERNAL_ERROR;
+        goto internal_error;
+    }
+
+    /* Now draw the primitives. */
+    for (unsigned iPrimitive = 0; iPrimitive < numRanges; iPrimitive++)
+    {
+        D3DPRIMITIVETYPE PrimitiveTypeD3D;
+        unsigned         sidIndex  = pRange[iPrimitive].indexArray.surfaceId;
+        PVMSVGA3DSURFACE pIndexSurface = NULL;
+
+        Log(("Primitive %d: type %s\n", iPrimitive, vmsvga3dPrimitiveType2String(pRange[iPrimitive].primType)));
+        rc = vmsvga3dPrimitiveType2D3D(pRange[iPrimitive].primType, &PrimitiveTypeD3D);
+        if (RT_FAILURE(rc))
+        {
+            AssertRC(rc);
+            goto internal_error;
+        }
+
+        /* Triangle strips or fans with just one primitive don't make much sense and are identical to triangle lists.
+         * Workaround for NVidia driver crash when encountering some of these.
+         */
+        if (    pRange[iPrimitive].primitiveCount == 1
+            &&  (   PrimitiveTypeD3D == D3DPT_TRIANGLESTRIP
+                 || PrimitiveTypeD3D == D3DPT_TRIANGLEFAN))
+            PrimitiveTypeD3D = D3DPT_TRIANGLELIST;
+
+        if (sidIndex != SVGA3D_INVALID_ID)
+        {
+            AssertMsg(pRange[iPrimitive].indexWidth == sizeof(uint32_t) || pRange[iPrimitive].indexWidth == sizeof(uint16_t), ("Unsupported primitive width %d\n", pRange[iPrimitive].indexWidth));
+
+            if (    sidIndex >= SVGA3D_MAX_SURFACE_IDS
+                ||  sidIndex >= pState->cSurfaces 
+                ||  pState->paSurface[sidIndex].id != sidIndex)
+            {
+                Assert(sidIndex < SVGA3D_MAX_SURFACE_IDS);
+                Assert(sidIndex < pState->cSurfaces && pState->paSurface[sidIndex].id == sidIndex);
+                rc = VERR_INVALID_PARAMETER;
+                goto internal_error;
+            }
+            pIndexSurface = &pState->paSurface[sidIndex];
+            Log(("vmsvga3dDrawPrimitives: index surface %x\n", sidIndex));
+
+            if (!pIndexSurface->u.pIndexBuffer)
+            {
+                Log(("vmsvga3dDrawPrimitives: create index buffer fDirty=%d\n", pIndexSurface->fDirty));
+
+                hr = pContext->pDevice->CreateIndexBuffer(pIndexSurface->pMipmapLevels[0].cbSurface,
+                                                          D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY /* possible severe performance penalty otherwise (according to d3d debug output */,
+                                                          (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? D3DFMT_INDEX16 : D3DFMT_INDEX32,
+                                                          D3DPOOL_DEFAULT,
+                                                          &pIndexSurface->u.pIndexBuffer,
+                                                          NULL);
+                if (hr != D3D_OK)
+                {
+                    AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: CreateIndexBuffer failed with %x\n", hr));
+                    rc = VERR_INTERNAL_ERROR;
+                    goto internal_error;
+                }
+
+                if (pIndexSurface->fDirty)
+                {
+                    void *pData;
+
+                    Log(("vmsvga3dDrawPrimitives: sync index buffer\n"));
+
+                    hr = pIndexSurface->u.pIndexBuffer->Lock(0, 0, &pData, 0);
+                    AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: Lock vertex failed with %x\n", hr));
+
+                    memcpy(pData, pIndexSurface->pMipmapLevels[0].pSurfaceData, pIndexSurface->pMipmapLevels[0].cbSurface);
+
+                    hr = pIndexSurface->u.pIndexBuffer->Unlock();
+                    AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: Unlock vertex failed with %x\n", hr));
+
+                    pIndexSurface->pMipmapLevels[0].fDirty = false;
+                    pIndexSurface->fDirty = false;
+                }
+                pIndexSurface->flags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+            }
+            else
+                Assert(pIndexSurface->fDirty == false);
+
+            hr = pContext->pDevice->SetIndices(pIndexSurface->u.pIndexBuffer);
+            AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetIndices vertex failed with %x\n", hr));
+        }
+        else
+        {
+            hr = pContext->pDevice->SetIndices(NULL);
+            AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetIndices vertex (NULL) failed with %x\n", hr));
+        }
+
+        PVMSVGA3DSURFACE pVertexSurface;
+        unsigned         sidVertex = pVertexDecl[0].array.surfaceId;
+        unsigned         strideVertex = pVertexDecl[0].array.stride;
+
+        pVertexSurface = &pState->paSurface[sidVertex];
+
+        if (!pIndexSurface)
+        {
+            /* Render without an index buffer */
+            Log(("DrawPrimitive %x primitivecount=%d index index bias=%d stride=%d\n", PrimitiveTypeD3D, pRange[iPrimitive].primitiveCount,  pRange[iPrimitive].indexBias, strideVertex));
+
+            hr = pContext->pDevice->DrawPrimitive(PrimitiveTypeD3D,
+                                                  pRange[iPrimitive].indexBias,
+                                                  pRange[iPrimitive].primitiveCount);
+            if (hr != D3D_OK)
+            {
+                AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: DrawPrimitive failed with %x\n", hr));
+                rc = VERR_INTERNAL_ERROR;
+                goto internal_error;
+            }
+        }
+        else
+        {
+            Assert(pRange[iPrimitive].indexBias >= 0);  /* @todo */
+
+            UINT numVertices;
+
+            if (pVertexDecl[0].rangeHint.last) 
+                numVertices = pVertexDecl[0].rangeHint.last - pVertexDecl[0].rangeHint.first + 1;
+            else
+                numVertices = pVertexSurface->pMipmapLevels[0].cbSurface / strideVertex - pVertexDecl[0].array.offset / strideVertex - pVertexDecl[0].rangeHint.first - pRange[iPrimitive].indexBias;
+
+            /* Render with an index buffer */
+            Log(("DrawIndexedPrimitive %x startindex=%d numVertices=%d, primitivecount=%d index format=%d index bias=%d stride=%d\n", PrimitiveTypeD3D, pVertexDecl[0].rangeHint.first,  numVertices, pRange[iPrimitive].primitiveCount,  (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? D3DFMT_INDEX16 : D3DFMT_INDEX32, pRange[iPrimitive].indexBias, strideVertex));
+
+            hr = pContext->pDevice->DrawIndexedPrimitive(PrimitiveTypeD3D,
+                                                         pRange[iPrimitive].indexBias,      /* BaseVertexIndex */
+                                                         0,                                 /* MinVertexIndex */
+                                                         numVertices,
+                                                         pRange[iPrimitive].indexArray.offset / pRange[iPrimitive].indexWidth,    /* StartIndex */
+                                                         pRange[iPrimitive].primitiveCount);
+            if (hr != D3D_OK)
+            {
+                AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: DrawIndexedPrimitive failed with %x\n", hr));
+                rc = VERR_INTERNAL_ERROR;
+                goto internal_error;
+            }
+        }
+    }
+    pVertexDeclD3D->Release();
+    RTMemFree(pVertexElement);
+
+    hr = pContext->pDevice->EndScene();
+    AssertMsgReturn(hr == D3D_OK, ("EndScene failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    /* Clear streams above 1 as they might accidentally be reused in the future. */
+    if (iCurrentStreamId > 1)
+    {
+        for (uint32_t i = 1; i < iCurrentStreamId; i++)
+        {
+            Log(("vmsvga3dDrawPrimitives: clear stream %d\n", i));
+            hr = pContext->pDevice->SetStreamSource(i, NULL, 0, 0);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetStreamSource failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+    }
+
+#if 0 /* Flush queue */
+    {
+        IDirect3DQuery9        *pQuery;
+        hr = pContext->pDevice->CreateQuery(D3DQUERYTYPE_EVENT, &pQuery);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: CreateQuery failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        hr = pQuery->Issue(D3DISSUE_END);
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: Issue failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        while (true)
+        {
+            hr = pQuery->GetData(NULL, 0, D3DGETDATA_FLUSH);
+            if (hr != S_FALSE) break;
+
+            RTThreadSleep(1);
+        }
+        AssertMsgReturn(hr == S_OK, ("vmsvga3dSurfaceFinishDrawing: GetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        pQuery->Release();
+    }
+#endif
+
+    /* Make sure we can track drawing usage of active render targets and textures. */
+    vmsvga3dContextTrackUsage(pThis, pContext);
+
+#ifdef DEBUG_GFX_WINDOW
+    if (pContext->aSidActiveTexture[0] == 0x62)
+////    if (pContext->sidActiveTexture == 0x3d)
+    {
+        SVGA3dCopyRect rect;
+
+        rect.srcx = rect.srcy = rect.x = rect.y = 0;
+        rect.w = 800;
+        rect.h = 600;
+        vmsvga3dCommandPresent(pThis, pContext->sidRenderTarget /*pContext->aSidActiveTexture[0] */, 0, &rect);
+    }
+#endif
+    return rc;
+
+internal_error:
+    if (pVertexDeclD3D)
+        pVertexDeclD3D->Release();
+    if (pVertexElement)
+        RTMemFree(pVertexElement);
+
+    hr = pContext->pDevice->EndScene();
+    AssertMsgReturn(hr == D3D_OK, ("EndScene failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return rc;
+}
+
+int vmsvga3dSetScissorRect(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
+{
+    HRESULT               hr;
+    RECT                  rect;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dSetScissorRect %x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dSetScissorRect invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    /* Store for vm state save/restore. */
+    pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_SCISSORRECT;
+    pContext->state.RectScissor = *pRect;
+
+    rect.left   = pRect->x;
+    rect.top    = pRect->y;
+    rect.right  = rect.left + pRect->w;  /* exclusive */
+    rect.bottom = rect.top + pRect->h;   /* exclusive */
+
+    hr = pContext->pDevice->SetScissorRect(&rect);
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetScissorRect: SetScissorRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    return VINF_SUCCESS;
+}
+
+
+int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData)
+{
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSHADER       pShader;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dShaderDefine %x shid=%x type=%s cbData=%x\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cbData));
+    LogFlow(("shader code:\n%.*Rhxd\n", cbData, pShaderData));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderDefine invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    AssertReturn(shid < SVGA3D_MAX_SHADER_IDS, VERR_INVALID_PARAMETER);
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        if (shid >= pContext->cVertexShaders)
+        {
+            pContext->paVertexShader = (PVMSVGA3DSHADER)RTMemRealloc(pContext->paVertexShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+            AssertReturn(pContext->paVertexShader, VERR_NO_MEMORY);
+            memset(&pContext->paVertexShader[pContext->cVertexShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cVertexShaders));
+            for (uint32_t i = pContext->cVertexShaders; i < shid + 1; i++)
+                pContext->paVertexShader[i].id = SVGA3D_INVALID_ID;
+            pContext->cVertexShaders = shid + 1;
+        }
+        /* If one already exists with this id, then destroy it now. */
+        if (pContext->paVertexShader[shid].id != SVGA3D_INVALID_ID)
+            vmsvga3dShaderDestroy(pThis, cid, shid, pContext->paVertexShader[shid].type);
+
+        pShader = &pContext->paVertexShader[shid];
+    }
+    else
+    {
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (shid >= pContext->cPixelShaders)
+        {
+            pContext->paPixelShader = (PVMSVGA3DSHADER)RTMemRealloc(pContext->paPixelShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+            AssertReturn(pContext->paPixelShader, VERR_NO_MEMORY);
+            memset(&pContext->paPixelShader[pContext->cPixelShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cPixelShaders));
+            for (uint32_t i = pContext->cPixelShaders; i < shid + 1; i++)
+                pContext->paPixelShader[i].id = SVGA3D_INVALID_ID;
+            pContext->cPixelShaders = shid + 1;
+        }
+        /* If one already exists with this id, then destroy it now. */
+        if (pContext->paPixelShader[shid].id != SVGA3D_INVALID_ID)
+            vmsvga3dShaderDestroy(pThis, cid, shid, pContext->paPixelShader[shid].type);
+
+        pShader = &pContext->paPixelShader[shid];
+    }
+
+    memset(pShader, 0, sizeof(*pShader));
+    pShader->id     = shid;
+    pShader->cid    = cid;
+    pShader->type   = type;
+    pShader->cbData = cbData;
+    pShader->pShaderProgram = RTMemAllocZ(cbData);
+    AssertReturn(pShader->pShaderProgram, VERR_NO_MEMORY);
+    memcpy(pShader->pShaderProgram, pShaderData, cbData);
+
+    switch (type)
+    {
+    case SVGA3D_SHADERTYPE_VS:
+        hr = pContext->pDevice->CreateVertexShader((const DWORD *)pShaderData, &pShader->u.pVertexShader);
+        break;
+
+    case SVGA3D_SHADERTYPE_PS:
+        hr = pContext->pDevice->CreatePixelShader((const DWORD *)pShaderData, &pShader->u.pPixelShader);
+        break;
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+#ifdef DUMP_SHADER_DISASSEMBLY
+    LPD3DXBUFFER pDisassembly;
+
+    hr = D3DXDisassembleShader((const DWORD *)pShaderData, FALSE, NULL, &pDisassembly);
+    if (hr == D3D_OK)
+    {
+        Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
+        pDisassembly->Release();
+    }
+#endif
+    if (hr != D3D_OK)
+    {
+        RTMemFree(pShader->pShaderProgram);
+        memset(pShader, 0, sizeof(*pShader));
+        pShader->id = SVGA3D_INVALID_ID;
+    }
+
+    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderDefine: CreateVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type)
+{
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    PVMSVGA3DSHADER       pShader = NULL;
+
+    Log(("vmsvga3dShaderDestroy %x shid=%x type=%s\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL"));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderDestroy invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        if (    shid < pContext->cVertexShaders
+            &&  pContext->paVertexShader[shid].id == shid)
+        {
+            pShader = &pContext->paVertexShader[shid];
+            pShader->u.pVertexShader->Release();
+        }
+    }
+    else
+    {
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (    shid < pContext->cPixelShaders
+            &&  pContext->paPixelShader[shid].id == shid)
+        {
+            pShader = &pContext->paPixelShader[shid];
+            pShader->u.pPixelShader->Release();
+        }
+    }
+
+    if (pShader)
+    {
+        if (pShader->pShaderProgram)
+            RTMemFree(pShader->pShaderProgram);
+
+        memset(pShader, 0, sizeof(*pShader));
+        pShader->id = SVGA3D_INVALID_ID;
+    }
+    else
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
+{
+    PVMSVGA3DCONTEXT    pContext;
+    PVMSVGA3DSTATE      pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+    HRESULT             hr;
+
+    Log(("vmsvga3dShaderSet %x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderSet invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    if (type == SVGA3D_SHADERTYPE_VS)
+    {
+        /* Save for vm state save/restore. */
+        pContext->state.shidVertex = shid;
+        pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VERTEXSHADER;
+
+        if (    shid < pContext->cVertexShaders
+            &&  pContext->paVertexShader[shid].id == shid)
+        {
+            PVMSVGA3DSHADER pShader = &pContext->paVertexShader[shid];
+            Assert(type == pShader->type);
+
+            hr = pContext->pDevice->SetVertexShader(pShader->u.pVertexShader);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        else
+        if (shid == SVGA_ID_INVALID)
+        {
+            /* Unselect shader. */
+            hr = pContext->pDevice->SetVertexShader(NULL);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        else
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+    else
+    {
+        /* Save for vm state save/restore. */
+        pContext->state.shidPixel = shid;
+        pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_PIXELSHADER;
+
+        Assert(type == SVGA3D_SHADERTYPE_PS);
+        if (    shid < pContext->cPixelShaders
+            &&  pContext->paPixelShader[shid].id == shid)
+        {
+            PVMSVGA3DSHADER pShader = &pContext->paPixelShader[shid];
+            Assert(type == pShader->type);
+
+            hr = pContext->pDevice->SetPixelShader(pShader->u.pPixelShader);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        else
+        if (shid == SVGA_ID_INVALID)
+        {
+            /* Unselect shader. */
+            hr = pContext->pDevice->SetPixelShader(NULL);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+        else
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues)
+{
+    HRESULT               hr;
+    PVMSVGA3DCONTEXT      pContext;
+    PVMSVGA3DSTATE        pState = (PVMSVGA3DSTATE)pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    Log(("vmsvga3dShaderSetConst %x reg=%x type=%s ctype=%x\n", cid, reg, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", ctype));
+
+    if (    cid >= pState->cContexts
+        ||  pState->paContext[cid].id != cid)
+    {
+        Log(("vmsvga3dShaderSetConst invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+    pContext = &pState->paContext[cid];
+
+    for (uint32_t i = 0; i < cRegisters; i++)
+    {
+        Log(("Constant %d: value=%x-%x-%x-%x\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+        vmsvga3dSaveShaderConst(pContext, reg + i, type, ctype, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]);
+    }
+
+    switch (type)
+    {
+    case SVGA3D_SHADERTYPE_VS:
+        switch (ctype)
+        {
+        case SVGA3D_CONST_TYPE_FLOAT:
+            hr = pContext->pDevice->SetVertexShaderConstantF(reg, (const float *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_INT:
+            hr = pContext->pDevice->SetVertexShaderConstantI(reg, (const int *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_BOOL:
+            hr = pContext->pDevice->SetVertexShaderConstantB(reg, (const BOOL *)pValues, cRegisters);
+            break;
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSetConst: SetVertexShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        break;
+
+    case SVGA3D_SHADERTYPE_PS:
+        switch (ctype)
+        {
+        case SVGA3D_CONST_TYPE_FLOAT:
+        {
+            hr = pContext->pDevice->SetPixelShaderConstantF(reg, (const float *)pValues, cRegisters);
+            break;
+        }
+
+        case SVGA3D_CONST_TYPE_INT:
+            hr = pContext->pDevice->SetPixelShaderConstantI(reg, (const int *)pValues, cRegisters);
+            break;
+
+        case SVGA3D_CONST_TYPE_BOOL:
+            hr = pContext->pDevice->SetPixelShaderConstantB(reg, (const BOOL *)pValues, cRegisters);
+            break;
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+        }
+        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSetConst: SetPixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        break;
+
+    default:
+        AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+    return VINF_SUCCESS;
+}
+
+
+int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type)
+{
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+{
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+{
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+static void vmsvgaDumpD3DCaps(D3DCAPS9 *pCaps)
+{
+    LogRel(("\nD3D device caps: DevCaps2:\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_ADAPTIVETESSRTPATCH)
+        LogRel((" - D3DDEVCAPS2_ADAPTIVETESSRTPATCH\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_ADAPTIVETESSNPATCH)
+        LogRel((" - D3DDEVCAPS2_ADAPTIVETESSNPATCH\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES)
+        LogRel((" - D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_DMAPNPATCH)
+        LogRel((" - D3DDEVCAPS2_DMAPNPATCH\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH)
+        LogRel((" - D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_STREAMOFFSET)
+        LogRel((" - D3DDEVCAPS2_STREAMOFFSET\n"));
+    if (pCaps->DevCaps2 & D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET)
+        LogRel((" - D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET\n"));
+
+    LogRel(("\nCaps2:\n"));
+    if (pCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP)
+        LogRel((" - D3DCAPS2_CANAUTOGENMIPMAP\n"));
+    if (pCaps->Caps2 & D3DCAPS2_CANCALIBRATEGAMMA)
+        LogRel((" - D3DCAPS2_CANCALIBRATEGAMMA\n"));
+    if (pCaps->Caps2 & D3DCAPS2_CANSHARERESOURCE)
+        LogRel((" - D3DCAPS2_CANSHARERESOURCE\n"));
+    if (pCaps->Caps2 & D3DCAPS2_CANMANAGERESOURCE)
+        LogRel((" - D3DCAPS2_CANMANAGERESOURCE\n"));
+    if (pCaps->Caps2 & D3DCAPS2_DYNAMICTEXTURES)
+        LogRel((" - D3DCAPS2_DYNAMICTEXTURES\n"));
+    if (pCaps->Caps2 & D3DCAPS2_FULLSCREENGAMMA)
+        LogRel((" - D3DCAPS2_FULLSCREENGAMMA\n"));
+
+    LogRel(("\nCaps3:\n"));
+    if (pCaps->Caps3 & D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD)
+        LogRel((" - D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD\n"));
+    if (pCaps->Caps3 & D3DCAPS3_COPY_TO_VIDMEM)
+        LogRel((" - D3DCAPS3_COPY_TO_VIDMEM\n"));
+    if (pCaps->Caps3 & D3DCAPS3_COPY_TO_SYSTEMMEM)
+        LogRel((" - D3DCAPS3_COPY_TO_SYSTEMMEM\n"));
+    if (pCaps->Caps3 & D3DCAPS3_DXVAHD)
+        LogRel((" - D3DCAPS3_DXVAHD\n"));
+    if (pCaps->Caps3 & D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION)
+        LogRel((" - D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION\n"));
+
+    LogRel(("\nPresentationIntervals:\n"));
+    if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_IMMEDIATE)
+        LogRel((" - D3DPRESENT_INTERVAL_IMMEDIATE\n"));
+    if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_ONE)
+        LogRel((" - D3DPRESENT_INTERVAL_ONE\n"));
+    if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_TWO)
+        LogRel((" - D3DPRESENT_INTERVAL_TWO\n"));
+    if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_THREE)
+        LogRel((" - D3DPRESENT_INTERVAL_THREE\n"));
+    if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_FOUR)
+        LogRel((" - D3DPRESENT_INTERVAL_FOUR\n"));
+
+    LogRel(("\nDevcaps:\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_CANBLTSYSTONONLOCAL)
+        LogRel((" - D3DDEVCAPS_CANBLTSYSTONONLOCAL\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_CANRENDERAFTERFLIP)
+        LogRel((" - D3DDEVCAPS_CANRENDERAFTERFLIP\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_DRAWPRIMITIVES2)
+        LogRel((" - D3DDEVCAPS_DRAWPRIMITIVES2\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_DRAWPRIMITIVES2EX)
+        LogRel((" - D3DDEVCAPS_DRAWPRIMITIVES2EX\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_DRAWPRIMTLVERTEX)
+        LogRel((" - D3DDEVCAPS_DRAWPRIMTLVERTEX\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_EXECUTESYSTEMMEMORY)
+        LogRel((" - D3DDEVCAPS_EXECUTESYSTEMMEMORY\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_EXECUTEVIDEOMEMORY)
+        LogRel((" - D3DDEVCAPS_EXECUTEVIDEOMEMORY\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_HWRASTERIZATION)
+        LogRel((" - D3DDEVCAPS_HWRASTERIZATION\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
+        LogRel((" - D3DDEVCAPS_HWTRANSFORMANDLIGHT\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_NPATCHES)
+        LogRel((" - D3DDEVCAPS_NPATCHES\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_PUREDEVICE)
+        LogRel((" - D3DDEVCAPS_PUREDEVICE\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_QUINTICRTPATCHES)
+        LogRel((" - D3DDEVCAPS_QUINTICRTPATCHES\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_RTPATCHES)
+        LogRel((" - D3DDEVCAPS_RTPATCHES\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_RTPATCHHANDLEZERO)
+        LogRel((" - D3DDEVCAPS_RTPATCHHANDLEZERO\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_SEPARATETEXTUREMEMORIES)
+        LogRel((" - D3DDEVCAPS_SEPARATETEXTUREMEMORIES\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_TEXTURENONLOCALVIDMEM)
+        LogRel((" - D3DDEVCAPS_TEXTURENONLOCALVIDMEM\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_TEXTURESYSTEMMEMORY)
+        LogRel((" - D3DDEVCAPS_TEXTURESYSTEMMEMORY\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_TEXTUREVIDEOMEMORY)
+        LogRel((" - D3DDEVCAPS_TEXTUREVIDEOMEMORY\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_TLVERTEXSYSTEMMEMORY)
+        LogRel((" - D3DDEVCAPS_TLVERTEXSYSTEMMEMORY\n"));
+    if (pCaps->DevCaps & D3DDEVCAPS_TLVERTEXVIDEOMEMORY)
+        LogRel((" - D3DDEVCAPS_TLVERTEXVIDEOMEMORY\n"));
+
+    LogRel(("\nTextureCaps:\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_ALPHA)
+        LogRel((" - D3DPTEXTURECAPS_ALPHA\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_ALPHAPALETTE)
+        LogRel((" - D3DPTEXTURECAPS_ALPHAPALETTE\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP)
+        LogRel((" - D3DPTEXTURECAPS_CUBEMAP\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2)
+        LogRel((" - D3DPTEXTURECAPS_CUBEMAP_POW2\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_MIPCUBEMAP)
+        LogRel((" - D3DPTEXTURECAPS_MIPCUBEMAP\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_MIPMAP)
+        LogRel((" - D3DPTEXTURECAPS_MIPMAP\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_MIPVOLUMEMAP)
+        LogRel((" - D3DPTEXTURECAPS_MIPVOLUMEMAP\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL)
+        LogRel((" - D3DPTEXTURECAPS_NONPOW2CONDITIONAL\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_POW2)
+        LogRel((" - D3DPTEXTURECAPS_POW2\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_NOPROJECTEDBUMPENV)
+        LogRel((" - D3DPTEXTURECAPS_NOPROJECTEDBUMPENV\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_PERSPECTIVE)
+        LogRel((" - D3DPTEXTURECAPS_PERSPECTIVE\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_POW2)
+        LogRel((" - D3DPTEXTURECAPS_POW2\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_PROJECTED)
+        LogRel((" - D3DPTEXTURECAPS_PROJECTED\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_SQUAREONLY)
+        LogRel((" - D3DPTEXTURECAPS_SQUAREONLY\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE)
+        LogRel((" - D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP)
+        LogRel((" - D3DPTEXTURECAPS_VOLUMEMAP\n"));
+    if (pCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP_POW2)
+        LogRel((" - D3DPTEXTURECAPS_VOLUMEMAP_POW2\n"));
+
+    LogRel(("\nTextureFilterCaps\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_CONVOLUTIONMONO)
+        LogRel((" - D3DPTFILTERCAPS_CONVOLUTIONMONO\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MAGFPOINT\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MAGFLINEAR\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC)
+        LogRel((" - D3DPTFILTERCAPS_MAGFANISOTROPIC\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MAGFGAUSSIANQUAD\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MINFPOINT\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MINFLINEAR\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC)
+        LogRel((" - D3DPTFILTERCAPS_MINFANISOTROPIC\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFPYRAMIDALQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MINFPYRAMIDALQUAD\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFGAUSSIANQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MINFGAUSSIANQUAD\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MIPFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MIPFPOINT\n"));
+    if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MIPFLINEAR\n"));
+
+    LogRel(("\nCubeTextureFilterCaps\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_CONVOLUTIONMONO)
+        LogRel((" - D3DPTFILTERCAPS_CONVOLUTIONMONO\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MAGFPOINT\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MAGFLINEAR\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC)
+        LogRel((" - D3DPTFILTERCAPS_MAGFANISOTROPIC\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MAGFGAUSSIANQUAD\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MINFPOINT\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MINFLINEAR\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC)
+        LogRel((" - D3DPTFILTERCAPS_MINFANISOTROPIC\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFPYRAMIDALQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MINFPYRAMIDALQUAD\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFGAUSSIANQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MINFGAUSSIANQUAD\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MIPFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MIPFPOINT\n"));
+    if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MIPFLINEAR\n"));
+
+    LogRel(("\nVolumeTextureFilterCaps\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_CONVOLUTIONMONO)
+        LogRel((" - D3DPTFILTERCAPS_CONVOLUTIONMONO\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MAGFPOINT\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MAGFLINEAR\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC)
+        LogRel((" - D3DPTFILTERCAPS_MAGFANISOTROPIC\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MAGFGAUSSIANQUAD\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MINFPOINT\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MINFLINEAR\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC)
+        LogRel((" - D3DPTFILTERCAPS_MINFANISOTROPIC\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFPYRAMIDALQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MINFPYRAMIDALQUAD\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFGAUSSIANQUAD)
+        LogRel((" - D3DPTFILTERCAPS_MINFGAUSSIANQUAD\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MIPFPOINT)
+        LogRel((" - D3DPTFILTERCAPS_MIPFPOINT\n"));
+    if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR)
+        LogRel((" - D3DPTFILTERCAPS_MIPFLINEAR\n"));
+
+    LogRel(("\nTextureAddressCaps:\n"));
+    if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_BORDER)
+        LogRel((" - D3DPTADDRESSCAPS_BORDER\n"));
+    if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_CLAMP)
+        LogRel((" - D3DPTADDRESSCAPS_CLAMP\n"));
+    if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_INDEPENDENTUV)
+        LogRel((" - D3DPTADDRESSCAPS_INDEPENDENTUV\n"));
+    if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_MIRROR)
+        LogRel((" - D3DPTADDRESSCAPS_MIRROR\n"));
+    if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_MIRRORONCE)
+        LogRel((" - D3DPTADDRESSCAPS_MIRRORONCE\n"));
+    if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_WRAP)
+        LogRel((" - D3DPTADDRESSCAPS_WRAP\n"));
+
+    LogRel(("\nTextureOpCaps:\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_DISABLE)
+        LogRel((" - D3DTEXOPCAPS_DISABLE\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_SELECTARG1)
+        LogRel((" - D3DTEXOPCAPS_SELECTARG1\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_SELECTARG2)
+        LogRel((" - D3DTEXOPCAPS_SELECTARG2\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATE)
+        LogRel((" - D3DTEXOPCAPS_MODULATE\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATE2X)
+        LogRel((" - D3DTEXOPCAPS_MODULATE2X\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATE4X)
+        LogRel((" - D3DTEXOPCAPS_MODULATE4X\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADD)
+        LogRel((" - D3DTEXOPCAPS_ADD\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED)
+        LogRel((" - D3DTEXOPCAPS_ADDSIGNED\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED2X)
+        LogRel((" - D3DTEXOPCAPS_ADDSIGNED2X\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_SUBTRACT)
+        LogRel((" - D3DTEXOPCAPS_SUBTRACT\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADDSMOOTH)
+        LogRel((" - D3DTEXOPCAPS_ADDSMOOTH\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDDIFFUSEALPHA)
+        LogRel((" - D3DTEXOPCAPS_BLENDDIFFUSEALPHA\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDTEXTUREALPHA)
+        LogRel((" - D3DTEXOPCAPS_BLENDTEXTUREALPHA\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDFACTORALPHA)
+        LogRel((" - D3DTEXOPCAPS_BLENDFACTORALPHA\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDTEXTUREALPHAPM)
+        LogRel((" - D3DTEXOPCAPS_BLENDTEXTUREALPHAPM\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDCURRENTALPHA)
+        LogRel((" - D3DTEXOPCAPS_BLENDCURRENTALPHA\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_PREMODULATE)
+        LogRel((" - D3DTEXOPCAPS_PREMODULATE\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR)
+        LogRel((" - D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA)
+        LogRel((" - D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR)
+        LogRel((" - D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA)
+        LogRel((" - D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAP)
+        LogRel((" - D3DTEXOPCAPS_BUMPENVMAP\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAPLUMINANCE)
+        LogRel((" - D3DTEXOPCAPS_BUMPENVMAPLUMINANCE\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_DOTPRODUCT3)
+        LogRel((" - D3DTEXOPCAPS_DOTPRODUCT3\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MULTIPLYADD)
+        LogRel((" - D3DTEXOPCAPS_MULTIPLYADD\n"));
+    if (pCaps->TextureOpCaps & D3DTEXOPCAPS_LERP)
+        LogRel((" - D3DTEXOPCAPS_LERP\n"));
+
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
new file mode 100644
index 0000000..6e7cbd3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
@@ -0,0 +1,109 @@
+/** @file
+ * DevVMWare - VMWare SVGA device - 3D part
+ */
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef __DEVVMWARE3D_H__
+#define __DEVVMWARE3D_H__
+
+#include "vmsvga/svga_reg.h"
+#include "vmsvga/svga3d_reg.h"
+#include "vmsvga/svga_escape.h"
+#include "vmsvga/svga_overlay.h"
+
+#if defined(RT_OS_WINDOWS) && defined(IN_RING3)
+#include <windows.h>
+
+#define WM_VMSVGA3D_WAKEUP                      (WM_APP+1)
+#define WM_VMSVGA3D_CREATEWINDOW                (WM_APP+2)
+#define WM_VMSVGA3D_DESTROYWINDOW               (WM_APP+3)
+#define WM_VMSVGA3D_RESIZEWINDOW                (WM_APP+4)
+#define WM_VMSVGA3D_EXIT                        (WM_APP+5)
+
+DECLCALLBACK(int) vmsvga3dWindowThread(RTTHREAD ThreadSelf, void *pvUser);
+int vmsvga3dSendThreadMessage(RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, UINT msg, WPARAM wParam, LPARAM lParam);
+
+#endif
+
+/* Arbitrary limit */
+#define SVGA3D_MAX_SHADER_IDS                   0x100
+/* D3D allows up to 8 texture stages. */
+#define SVGA3D_MAX_TEXTURE_STAGE                8
+/* Arbitrary upper limit; seen 8 so far. */
+#define SVGA3D_MAX_LIGHTS                       32
+
+void vmsvgaGMRFree(PVGASTATE pThis, uint32_t idGMR);
+int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType transfer, uint8_t *pDest, int32_t cbDestPitch, SVGAGuestPtr src, uint32_t cbSrcOffset, int32_t cbSrcPitch, uint32_t cbWidth, uint32_t cHeight);
+
+int vmsvga3dInit(PVGASTATE pThis);
+int vmsvga3dPowerOn(PVGASTATE pThis);
+int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
+int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM);
+int vmsvga3dTerminate(PVGASTATE pThis);
+int vmsvga3dReset(PVGASTATE pThis);
+int vmsvga3dQueryCaps(PVGASTATE pThis, uint32_t idx3dCaps, uint32_t *pu32Val);
+
+int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags, SVGA3dSurfaceFormat format, SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES], uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter, uint32_t cMipLevels, SVGA3dSize *pMipLevelSize);
+int vmsvga3dSurfaceDestroy(PVGASTATE pThis, uint32_t sid);
+int vmsvga3dSurfaceCopy(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox);
+int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dBox destBox, SVGA3dSurfaceImageId src, SVGA3dBox srcBox, SVGA3dStretchBltMode mode);
+int vmsvga3dSurfaceDMA(PVGASTATE pThis, SVGA3dGuestImage guest, SVGA3dSurfaceImageId host, SVGA3dTransferType transfer, uint32_t cCopyBoxes, SVGA3dCopyBox *pBoxes);
+int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, uint32_t dest, SVGASignedRect destRect, SVGA3dSurfaceImageId src, SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *pRect);
+
+int vmsvga3dContextDefine(PVGASTATE pThis, uint32_t cid);
+int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid);
+
+int vmsvga3dChangeMode(PVGASTATE pThis);
+
+int vmsvga3dSetTransform(PVGASTATE pThis, uint32_t cid, SVGA3dTransformType type, float matrix[16]);
+int vmsvga3dSetZRange(PVGASTATE pThis, uint32_t cid, SVGA3dZRange zRange);
+int vmsvga3dSetRenderState(PVGASTATE pThis, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState);
+int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target);
+int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState);
+int vmsvga3dSetMaterial(PVGASTATE pThis, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial);
+int vmsvga3dSetLightData(PVGASTATE pThis, uint32_t cid, uint32_t index, SVGA3dLightData *pData);
+int vmsvga3dSetLightEnabled(PVGASTATE pThis, uint32_t cid, uint32_t index, uint32_t enabled);
+int vmsvga3dSetViewPort(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect);
+int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid,  uint32_t index, float plane[4]);
+int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect);
+int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3dCopyRect *pRect);
+int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pNumRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor);
+int vmsvga3dSetScissorRect(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect);
+int vmsvga3dGenerateMipmaps(PVGASTATE pThis, uint32_t sid, SVGA3dTextureFilter filter);
+
+int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData);
+int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type);
+int vmsvga3dShaderSet(PVGASTATE pThis, uint32_t cid, SVGA3dShaderType type, uint32_t shid);
+int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues);
+
+int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type);
+int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult);
+int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult);
+
+
+uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format);
+
+#ifdef LOG_ENABLED
+const char *vmsvga3dGetCapString(uint32_t idxCap);
+const char *vmsvga3dGet3dFormatString(uint32_t format);
+const char *vmsvga3dGetRenderStateName(uint32_t state);
+const char *vmsvga3dTextureStateToString(SVGA3dTextureStateName textureState);
+const char *vmsvgaTransformToString(SVGA3dTransformType type);
+const char *vmsvgaDeclUsage2String(SVGA3dDeclUsage usage);
+const char *vmsvgaDeclType2String(SVGA3dDeclType type);
+const char *vmsvgaDeclMethod2String(SVGA3dDeclMethod method);
+const char *vmsvgaSurfaceType2String(SVGA3dSurfaceFormat format);
+const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType);
+#endif
+
+#endif  /* __DEVVMWARE3D_H__ */
diff --git a/src/VBox/Devices/Graphics/DevVGA.cpp b/src/VBox/Devices/Graphics/DevVGA.cpp
index a21fe7e..d29f950 100644
--- a/src/VBox/Devices/Graphics/DevVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA.cpp
@@ -2096,16 +2096,16 @@ int vgaR3UpdateDisplay(VGAState *s, unsigned xStart, unsigned yStart, unsigned w
     }
     /* @todo might crash if a blit follows a resolution change very quickly (seen this many times!) */
 
-    if (    s->svga.iWidth == -1
-        ||  s->svga.iHeight == -1
-        ||  s->svga.iBpp == UINT32_MAX)
+    if (    s->svga.uWidth  == VMSVGA_VAL_UNINITIALIZED
+        ||  s->svga.uHeight == VMSVGA_VAL_UNINITIALIZED
+        ||  s->svga.uBpp    == VMSVGA_VAL_UNINITIALIZED)
     {
         /* Intermediate state; skip redraws. */
         AssertFailed();
         return VINF_SUCCESS;
     }
 
-    switch(s->svga.iBpp) {
+    switch(s->svga.uBpp) {
     default:
     case 0:
     case 8:
@@ -2161,20 +2161,20 @@ static int vmsvga_draw_graphic(PVGASTATE pThis, bool full_update, bool fFailOnRe
     uint32_t v, addr1, addr;
     vga_draw_line_func *vga_draw_line;
 
-    if (    pThis->svga.iWidth == -1
-        ||  pThis->svga.iHeight == -1
-        ||  pThis->svga.iBpp == UINT32_MAX)
+    if (    pThis->svga.uWidth  == VMSVGA_VAL_UNINITIALIZED
+        ||  pThis->svga.uHeight == VMSVGA_VAL_UNINITIALIZED
+        ||  pThis->svga.uBpp    == VMSVGA_VAL_UNINITIALIZED)
     {
         /* Intermediate state; skip redraws. */
         return VINF_SUCCESS;
     }
 
-    width  = pThis->svga.iWidth;
-    height = pThis->svga.iHeight;
+    width  = pThis->svga.uWidth;
+    height = pThis->svga.uHeight;
 
     disp_width = width;
 
-    switch(pThis->svga.iBpp) {
+    switch(pThis->svga.uBpp) {
     default:
     case 0:
     case 8:
@@ -5269,7 +5269,7 @@ static DECLCALLBACK(int) vgaR3IORegionMap(PPCIDEVICE pPciDev, /*unsigned*/ int i
     int         rc;
     PPDMDEVINS  pDevIns = pPciDev->pDevIns;
     PVGASTATE   pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
-    LogFlow(("vgaR3IORegionMap: iRegion=%d GCPhysAddress=%RGp cb=%#x enmType=%d\n", iRegion, GCPhysAddress, cb, enmType));
+    Log(("vgaR3IORegionMap: iRegion=%d GCPhysAddress=%RGp cb=%#x enmType=%d\n", iRegion, GCPhysAddress, cb, enmType));
 #ifdef VBOX_WITH_VMSVGA
     AssertReturn((iRegion == ((pThis->fVMSVGAEnabled) ? 1 : 0)) && (enmType == ((pThis->fVMSVGAEnabled) ? PCI_ADDRESS_SPACE_MEM : PCI_ADDRESS_SPACE_MEM_PREFETCH)), VERR_INTERNAL_ERROR);    
 #else
@@ -5308,10 +5308,21 @@ static DECLCALLBACK(int) vgaR3IORegionMap(PPCIDEVICE pPciDev, /*unsigned*/ int i
          */
         Assert(pThis->GCPhysVRAM);
 #ifdef VBOX_WITH_VMSVGA
-        Assert(!pThis->svga.fEnabled);
+        Assert(!pThis->svga.fEnabled || !pThis->svga.fVRAMTracking);
+        if (    !pThis->svga.fEnabled
+            ||  (   pThis->svga.fEnabled
+                 && pThis->svga.fVRAMTracking
+                )
+           )
+        {
 #endif
         rc = PGMHandlerPhysicalDeregister(PDMDevHlpGetVM(pDevIns), pThis->GCPhysVRAM);
         AssertRC(rc);
+#ifdef VBOX_WITH_VMSVGA
+        }
+        else
+            rc = VINF_SUCCESS;
+#endif
         pThis->GCPhysVRAM = 0;
         /* NB: VBE_DISPI_INDEX_FB_BASE_HI is left unchanged here. */
     }
@@ -5404,9 +5415,11 @@ static DECLCALLBACK(int) vgaR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 #endif
 
 #ifdef VBOX_WITH_VMSVGA
-    if (    rc == VINF_SUCCESS
-        &&  pThis->fVMSVGAEnabled)
+    if (pThis->fVMSVGAEnabled)
+    {
         rc = vmsvgaSaveExec(pDevIns, pSSM);
+        AssertRCReturn(rc, rc);
+    }
 #endif
 
     return rc;
@@ -5483,8 +5496,7 @@ static DECLCALLBACK(int) vgaR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint
         }
 
 #ifdef VBOX_WITH_VMSVGA
-        if (    uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_2D
-            &&  pThis->fVMSVGAEnabled)
+        if (pThis->fVMSVGAEnabled)
         {
             rc = vmsvgaLoadExec(pDevIns, pSSM, uVersion, uPass);
             AssertRCReturn(rc, rc);
@@ -5500,19 +5512,26 @@ static DECLCALLBACK(int) vgaR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint
  */
 static DECLCALLBACK(int) vgaR3LoadDone(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
+    int rc = VINF_SUCCESS;
+
 #ifdef VBOX_WITH_HGSMI
     PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     VBVAPause(pThis, (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) == 0);
-    int rc = vboxVBVALoadStateDone(pDevIns, pSSM);
+    rc = vboxVBVALoadStateDone(pDevIns, pSSM);
     AssertRCReturn(rc, rc);
 # ifdef VBOX_WITH_VDMA
     rc = vboxVDMASaveLoadDone(pThis->pVdma);
     AssertRCReturn(rc, rc);
 # endif
-    return VINF_SUCCESS;
-#else
-    return VINF_SUCCESS;
 #endif
+#ifdef VBOX_WITH_VMSVGA
+    if (pThis->fVMSVGAEnabled)
+    {
+        rc = vmsvgaLoadDone(pDevIns);
+        AssertRCReturn(rc, rc);
+    }
+#endif
+    return rc;
 }
 
 
@@ -5531,6 +5550,11 @@ static DECLCALLBACK(void)  vgaR3Reset(PPDMDEVINS pDevIns)
     if (pThis->pVdma)
         vboxVDMAReset(pThis->pVdma);
 
+#ifdef VBOX_WITH_VMSVGA
+    if (pThis->fVMSVGAEnabled)
+        vmsvgaReset(pDevIns);
+#endif
+
 #ifdef VBOX_WITH_HGSMI
     VBVAReset(pThis);
 #endif /* VBOX_WITH_HGSMI */
@@ -5971,6 +5995,9 @@ static DECLCALLBACK(int)   vgaR3Construct(PPDMDEVINS pDevIns, int iInstance, PCF
     pThis->IPort.pfnUpdateDisplayRect   = vgaPortUpdateDisplayRect;
     pThis->IPort.pfnCopyRect            = vgaPortCopyRect;
     pThis->IPort.pfnSetRenderVRAM       = vgaPortSetRenderVRAM;
+#ifdef VBOX_WITH_VMSVGA
+    pThis->IPort.pfnSetViewPort         = vmsvgaPortSetViewPort;
+#endif
 
 #if defined(VBOX_WITH_HGSMI)
 # if defined(VBOX_WITH_VIDEOHWACCEL)
diff --git a/src/VBox/Devices/Graphics/DevVGA.h b/src/VBox/Devices/Graphics/DevVGA.h
index d3e68da..f5ac821 100644
--- a/src/VBox/Devices/Graphics/DevVGA.h
+++ b/src/VBox/Devices/Graphics/DevVGA.h
@@ -211,6 +211,108 @@ typedef struct _VBOX_VHWA_PENDINGCMD
 } VBOX_VHWA_PENDINGCMD;
 #endif
 
+#ifdef VBOX_WITH_VMSVGA
+
+#define VMSVGA_FIFO_EXTCMD_NONE                 0
+#define VMSVGA_FIFO_EXTCMD_TERMINATE            1
+#define VMSVGA_FIFO_EXTCMD_SAVESTATE            2
+#define VMSVGA_FIFO_EXTCMD_LOADSTATE            3
+#define VMSVGA_FIFO_EXTCMD_RESET                4
+
+typedef struct
+{
+    PSSMHANDLE      pSSM;
+    uint32_t        uVersion;
+    uint32_t        uPass;
+} VMSVGA_STATE_LOAD, *PVMSVGA_STATE_LOAD;
+
+typedef struct
+{
+    /** The host window handle */
+    uint64_t                    u64HostWindowId;
+    /** The R3 FIFO pointer. */
+    R3PTRTYPE(uint32_t *)       pFIFOR3;
+    /** The R0 FIFO pointer. */
+    R0PTRTYPE(uint32_t *)       pFIFOR0;
+    /** R3 Opaque pointer to svga state. */
+    R3PTRTYPE(void *)           pSVGAState;
+    /** R3 Opaque pointer to 3d state. */
+    R3PTRTYPE(void *)           p3dState;
+    /** R3 Opaque pointer to a copy of the first 32k of the framebuffer before switching into svga mode. */
+    R3PTRTYPE(void *)           pFrameBufferBackup;
+    /** R3 Opaque pointer to an external fifo cmd parameter. */
+    R3PTRTYPE(void *)           pFIFOExtCmdParam;
+
+    /** Guest physical address of the FIFO memory range. */
+    RTGCPHYS                    GCPhysFIFO;
+    /** Size in bytes of the FIFO memory range. */
+    uint32_t                    cbFIFO;
+    /** SVGA id. */
+    uint32_t                    u32SVGAId;
+    /** SVGA extensions enabled or not. */
+    uint32_t                    fEnabled;
+    /** SVGA memory area configured status. */
+    uint32_t                    fConfigured;
+    /** Device is busy handling FIFO requests. */
+    uint32_t                    fBusy;
+    /** Traces (dirty page detection) enabled or not. */
+    uint32_t                    fTraces;
+    /** Guest OS identifier. */
+    uint32_t                    u32GuestId;
+    /** Scratch region size. */
+    uint32_t                    cScratchRegion;
+    /** Scratch array. */
+    uint32_t                    au32ScratchRegion[VMSVGA_SCRATCH_SIZE];
+    /** Irq status. */
+    uint32_t                    u32IrqStatus;
+    /** Irq mask. */
+    uint32_t                    u32IrqMask;
+    /** Pitch lock. */
+    uint32_t                    u32PitchLock;
+    /** Current GMR id. (SVGA_REG_GMR_ID) */
+    uint32_t                    u32CurrentGMRId;
+    /** Register caps. */
+    uint32_t                    u32RegCaps;
+    uint32_t                    Padding2;
+    /** Physical address of command mmio range. */
+    RTIOPORT                    BasePort;
+    /** Port io index register. */
+    uint32_t                    u32IndexReg;
+    /** FIFO request semaphore. */
+    RTSEMEVENT                  FIFORequestSem;
+    /** FIFO external command semaphore. */
+    RTSEMEVENT                  FIFOExtCmdSem;
+    /** FIFO IO Thread. */
+    R3PTRTYPE(PPDMTHREAD)       pFIFOIOThread;
+    uint32_t                    uWidth;
+    uint32_t                    uHeight;
+    uint32_t                    uBpp;
+    uint32_t                    cbScanline;
+    /** Maximum width supported. */
+    uint32_t                    u32MaxWidth;
+    /** Maximum height supported. */
+    uint32_t                    u32MaxHeight;
+    /** Viewport rectangle */
+    struct
+    {
+        uint32_t                x;
+        uint32_t                y;
+        uint32_t                cx;
+        uint32_t                cy;
+    } viewport;
+    /** Action flags */
+    uint32_t                    u32ActionFlags;
+    /** SVGA 3d extensions enabled or not. */
+    bool                        f3DEnabled;
+    /** VRAM page monitoring enabled or not. */
+    bool                        fVRAMTracking;
+    /** External command to be executed in the FIFO thread. */
+    uint8_t                     u8FIFOExtCommand;
+    bool                        Padding6[HC_ARCH_BITS == 64 ? 1 : 5];
+} VMSVGAState;
+#endif /* VBOX_WITH_VMSVGA */
+
+
 typedef struct VGAState {
 #ifndef VBOX
     VGA_STATE_COMMON
@@ -307,78 +409,10 @@ typedef struct VGAState {
     R0PTRTYPE(uint8_t *)        vram_ptrR0;
 
 #ifdef VBOX_WITH_VMSVGA
-    struct
-    {
-        /** The host window handle */
-        uint64_t                    u64HostWindowId;
-        /** The R3 FIFO pointer. */
-        R3PTRTYPE(uint32_t *)       pFIFOR3;
-        /** The R0 FIFO pointer. */
-        R0PTRTYPE(uint32_t *)       pFIFOR0;
-        /** R3 Opaque pointer to svga state. */
-        R3PTRTYPE(void *)           pSVGAState;
-        /** R3 Opaque pointer to 3d state. */
-        R3PTRTYPE(void *)           p3dState;
-        /** R3 Opaque pointer to a copy of the first 32k of the framebuffer before switching into svga mode. */
-        R3PTRTYPE(void *)           pFrameBufferBackup;
-#if HC_ARCH_BITS == 32
-        uint32_t                    Padding3;
-#endif
-        /** Guest physical address of the FIFO memory range. */
-        RTGCPHYS                    GCPhysFIFO;
-        /** Size in bytes of the FIFO memory range. */
-        uint32_t                    cbFIFO;
-        /** SVGA id. */
-        uint32_t                    u32SVGAId;
-        /** SVGA extensions enabled or not. */
-        uint32_t                    fEnabled;
-        /** SVGA memory area configured status. */
-        uint32_t                    fConfigured;
-        /** Device is busy handling FIFO requests. */
-        uint32_t                    fBusy;
-        /** Traces (dirty page detection) enabled or not. */
-        uint32_t                    fTraces;
-        /** Guest OS identifier. */
-        uint32_t                    u32GuestId;
-        /** Scratch region size. */
-        uint32_t                    cScratchRegion;
-        /** Scratch array. */
-        uint32_t                    au32ScratchRegion[VMSVGA_SCRATCH_SIZE];
-        /** Irq status. */
-        uint32_t                    u32IrqStatus;
-        /** Irq mask. */
-        uint32_t                    u32IrqMask;
-        /** Pitch lock. */
-        uint32_t                    u32PitchLock;
-        /** Current GMR id. (SVGA_REG_GMR_ID) */
-        uint32_t                    u32CurrentGMRId;
-        /** Register caps. */
-        uint32_t                    u32RegCaps;
-        /** Physical address of command mmio range. */
-        uint32_t                    Padding2;
-        RTIOPORT                    BasePort;
-        /** Port io index register. */
-        uint32_t                    u32IndexReg;
-        /** FIFO request semaphore. */
-        RTSEMEVENT                  FIFORequestSem;
-        /** FIFO IO Thread. */
-        R3PTRTYPE(PPDMTHREAD)       pFIFOIOThread;
-        int32_t                     iWidth;
-        int32_t                     iHeight;
-        uint32_t                    iBpp;
-        uint32_t                    cbScanline;
-        /** Maximum width supported. */
-        uint32_t                    u32MaxWidth;
-        /** Maximum height supported. */
-        uint32_t                    u32MaxHeight;
-        /** Action flags */
-        uint32_t                    u32ActionFlags;
-        /** SVGA 3d extensions enabled or not. */
-        bool                        f3DEnabled;
-        /** VRAM page monitoring enabled or not. */
-        bool                        fVRAMTracking;
-        bool                        Padding6[2];
-    } svga;
+# if HC_ARCH_BITS == 32
+    uint32_t                    Padding3;
+# endif
+    VMSVGAState                 svga;
 #endif
 
     /** The number of monitors. */
diff --git a/src/VBox/Devices/Graphics/DevVGASavedState.h b/src/VBox/Devices/Graphics/DevVGASavedState.h
index 9ecc7a0..7caecd5 100644
--- a/src/VBox/Devices/Graphics/DevVGASavedState.h
+++ b/src/VBox/Devices/Graphics/DevVGASavedState.h
@@ -26,7 +26,6 @@
 #define VGA_SAVEDSTATE_VERSION_FIXED_PENDVHWA 14
 #define VGA_SAVEDSTATE_VERSION_3D           13
 #define VGA_SAVEDSTATE_VERSION_HGSMIMA      12 /* HGSMI memory allocator. */
-#define VGA_SAVEDSTATE_VERSION_VMSVGA       11
 #define VGA_SAVEDSTATE_VERSION_VMSVGA_2D    10 /* <- internal build with 2d state only */
 #define VGA_SAVEDSTATE_VERSION_WITH_PENDVHWA 10
 #define VGA_SAVEDSTATE_VERSION_INV_GCMDFIFO 8 /* <- states upto and including this version may contain invalid completed Guest Commands fifo entries */
diff --git a/src/VBox/Devices/Graphics/shaderlib/Makefile.kup b/src/VBox/Devices/Graphics/shaderlib/Makefile.kup
new file mode 100644
index 0000000..e69de29
diff --git a/src/VBox/Devices/Graphics/shaderlib/directx.c b/src/VBox/Devices/Graphics/shaderlib/directx.c
new file mode 100644
index 0000000..458d2bd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/directx.c
@@ -0,0 +1,2548 @@
+/*
+ * IWineD3D implementation
+ *
+ * Copyright 2002-2004 Jason Edmeades
+ * Copyright 2003-2004 Raphael Junqueira
+ * Copyright 2004 Christian Costa
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include "wined3d_private.h"
+
+#ifdef VBOX_WITH_WDDM
+# include <VBox/VBoxCrHgsmi.h>
+#endif
+
+#ifdef VBOX_WITH_VMSVGA
+# ifdef RT_OS_WINDOWS
+DECLIMPORT(void) APIENTRY glFinish(void);
+# else
+void glFinish(void);
+# endif
+#endif
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+WINE_DECLARE_DEBUG_CHANNEL(d3d_caps);
+
+#define GLINFO_LOCATION (*gl_info)
+#define WINE_DEFAULT_VIDMEM (64 * 1024 * 1024)
+
+/* The d3d device ID */
+static const GUID IID_D3DDEVICE_D3DUID = { 0xaeb2cdd4, 0x6e41, 0x43ea, { 0x94,0x1c,0x83,0x61,0xcc,0x76,0x07,0x81 } };
+
+
+/* Extension detection */
+static const struct {
+    const char *extension_string;
+    GL_SupportedExt extension;
+    DWORD version;
+} EXTENSION_MAP[] = {
+    /* APPLE */
+    {"GL_APPLE_client_storage",             APPLE_CLIENT_STORAGE,           0                           },
+    {"GL_APPLE_fence",                      APPLE_FENCE,                    0                           },
+    {"GL_APPLE_float_pixels",               APPLE_FLOAT_PIXELS,             0                           },
+    {"GL_APPLE_flush_buffer_range",         APPLE_FLUSH_BUFFER_RANGE,       0                           },
+    {"GL_APPLE_flush_render",               APPLE_FLUSH_RENDER,             0                           },
+    {"GL_APPLE_ycbcr_422",                  APPLE_YCBCR_422,                0                           },
+
+    /* ARB */
+    {"GL_ARB_color_buffer_float",           ARB_COLOR_BUFFER_FLOAT,         0                           },
+    {"GL_ARB_depth_buffer_float",           ARB_DEPTH_BUFFER_FLOAT,         0                           },
+    {"GL_ARB_depth_clamp",                  ARB_DEPTH_CLAMP,                0                           },
+    {"GL_ARB_depth_texture",                ARB_DEPTH_TEXTURE,              0                           },
+    {"GL_ARB_draw_buffers",                 ARB_DRAW_BUFFERS,               0                           },
+    {"GL_ARB_fragment_program",             ARB_FRAGMENT_PROGRAM,           0                           },
+    {"GL_ARB_fragment_shader",              ARB_FRAGMENT_SHADER,            0                           },
+    {"GL_ARB_framebuffer_object",           ARB_FRAMEBUFFER_OBJECT,         0                           },
+    {"GL_ARB_geometry_shader4",             ARB_GEOMETRY_SHADER4,           0                           },
+    {"GL_ARB_half_float_pixel",             ARB_HALF_FLOAT_PIXEL,           0                           },
+    {"GL_ARB_half_float_vertex",            ARB_HALF_FLOAT_VERTEX,          0                           },
+    {"GL_ARB_imaging",                      ARB_IMAGING,                    0                           },
+    {"GL_ARB_map_buffer_range",             ARB_MAP_BUFFER_RANGE,           0                           },
+    {"GL_ARB_multisample",                  ARB_MULTISAMPLE,                0                           }, /* needs GLX_ARB_MULTISAMPLE as well */
+    {"GL_ARB_multitexture",                 ARB_MULTITEXTURE,               0                           },
+    {"GL_ARB_occlusion_query",              ARB_OCCLUSION_QUERY,            0                           },
+    {"GL_ARB_pixel_buffer_object",          ARB_PIXEL_BUFFER_OBJECT,        0                           },
+    {"GL_ARB_point_parameters",             ARB_POINT_PARAMETERS,           0                           },
+    {"GL_ARB_point_sprite",                 ARB_POINT_SPRITE,               0                           },
+    {"GL_ARB_provoking_vertex",             ARB_PROVOKING_VERTEX,           0                           },
+    {"GL_ARB_shader_objects",               ARB_SHADER_OBJECTS,             0                           },
+    {"GL_ARB_shader_texture_lod",           ARB_SHADER_TEXTURE_LOD,         0                           },
+    {"GL_ARB_shading_language_100",         ARB_SHADING_LANGUAGE_100,       0                           },
+    {"GL_ARB_sync",                         ARB_SYNC,                       0                           },
+    {"GL_ARB_texture_border_clamp",         ARB_TEXTURE_BORDER_CLAMP,       0                           },
+    {"GL_ARB_texture_compression",          ARB_TEXTURE_COMPRESSION,        0                           },
+    {"GL_ARB_texture_cube_map",             ARB_TEXTURE_CUBE_MAP,           0                           },
+    {"GL_ARB_texture_env_add",              ARB_TEXTURE_ENV_ADD,            0                           },
+    {"GL_ARB_texture_env_combine",          ARB_TEXTURE_ENV_COMBINE,        0                           },
+    {"GL_ARB_texture_env_dot3",             ARB_TEXTURE_ENV_DOT3,           0                           },
+    {"GL_ARB_texture_float",                ARB_TEXTURE_FLOAT,              0                           },
+    {"GL_ARB_texture_mirrored_repeat",      ARB_TEXTURE_MIRRORED_REPEAT,    0                           },
+    {"GL_IBM_texture_mirrored_repeat",      ARB_TEXTURE_MIRRORED_REPEAT,    0                           },
+    {"GL_ARB_texture_non_power_of_two",     ARB_TEXTURE_NON_POWER_OF_TWO,   MAKEDWORD_VERSION(2, 0)     },
+    {"GL_ARB_texture_rectangle",            ARB_TEXTURE_RECTANGLE,          0                           },
+    {"GL_ARB_texture_rg",                   ARB_TEXTURE_RG,                 0                           },
+    {"GL_ARB_vertex_array_bgra",            ARB_VERTEX_ARRAY_BGRA,          0                           },
+    {"GL_ARB_vertex_blend",                 ARB_VERTEX_BLEND,               0                           },
+    {"GL_ARB_vertex_buffer_object",         ARB_VERTEX_BUFFER_OBJECT,       0                           },
+    {"GL_ARB_vertex_program",               ARB_VERTEX_PROGRAM,             0                           },
+    {"GL_ARB_vertex_shader",                ARB_VERTEX_SHADER,              0                           },
+
+    /* ATI */
+    {"GL_ATI_fragment_shader",              ATI_FRAGMENT_SHADER,            0                           },
+    {"GL_ATI_separate_stencil",             ATI_SEPARATE_STENCIL,           0                           },
+    {"GL_ATI_texture_compression_3dc",      ATI_TEXTURE_COMPRESSION_3DC,    0                           },
+    {"GL_ATI_texture_env_combine3",         ATI_TEXTURE_ENV_COMBINE3,       0                           },
+    {"GL_ATI_texture_mirror_once",          ATI_TEXTURE_MIRROR_ONCE,        0                           },
+
+    /* EXT */
+    {"GL_EXT_blend_color",                  EXT_BLEND_COLOR,                0                           },
+    {"GL_EXT_blend_equation_separate",      EXT_BLEND_EQUATION_SEPARATE,    0                           },
+    {"GL_EXT_blend_func_separate",          EXT_BLEND_FUNC_SEPARATE,        0                           },
+    {"GL_EXT_blend_minmax",                 EXT_BLEND_MINMAX,               0                           },
+    {"GL_EXT_draw_buffers2",                EXT_DRAW_BUFFERS2,              0                           },
+    {"GL_EXT_fog_coord",                    EXT_FOG_COORD,                  0                           },
+    {"GL_EXT_framebuffer_blit",             EXT_FRAMEBUFFER_BLIT,           0                           },
+    {"GL_EXT_framebuffer_multisample",      EXT_FRAMEBUFFER_MULTISAMPLE,    0                           },
+    {"GL_EXT_framebuffer_object",           EXT_FRAMEBUFFER_OBJECT,         0                           },
+    {"GL_EXT_gpu_program_parameters",       EXT_GPU_PROGRAM_PARAMETERS,     0                           },
+    {"GL_EXT_gpu_shader4",                  EXT_GPU_SHADER4,                0                           },
+    {"GL_EXT_packed_depth_stencil",         EXT_PACKED_DEPTH_STENCIL,       0                           },
+    {"GL_EXT_paletted_texture",             EXT_PALETTED_TEXTURE,           0                           },
+    {"GL_EXT_point_parameters",             EXT_POINT_PARAMETERS,           0                           },
+    {"GL_EXT_provoking_vertex",             EXT_PROVOKING_VERTEX,           0                           },
+    {"GL_EXT_secondary_color",              EXT_SECONDARY_COLOR,            0                           },
+    {"GL_EXT_stencil_two_side",             EXT_STENCIL_TWO_SIDE,           0                           },
+    {"GL_EXT_stencil_wrap",                 EXT_STENCIL_WRAP,               0                           },
+    {"GL_EXT_texture3D",                    EXT_TEXTURE3D,                  MAKEDWORD_VERSION(1, 2)     },
+    {"GL_EXT_texture_compression_rgtc",     EXT_TEXTURE_COMPRESSION_RGTC,   0                           },
+    {"GL_EXT_texture_compression_s3tc",     EXT_TEXTURE_COMPRESSION_S3TC,   0                           },
+    {"GL_EXT_texture_env_add",              EXT_TEXTURE_ENV_ADD,            0                           },
+    {"GL_EXT_texture_env_combine",          EXT_TEXTURE_ENV_COMBINE,        0                           },
+    {"GL_EXT_texture_env_dot3",             EXT_TEXTURE_ENV_DOT3,           0                           },
+    {"GL_EXT_texture_filter_anisotropic",   EXT_TEXTURE_FILTER_ANISOTROPIC, 0                           },
+    {"GL_EXT_texture_lod_bias",             EXT_TEXTURE_LOD_BIAS,           0                           },
+    {"GL_EXT_texture_sRGB",                 EXT_TEXTURE_SRGB,               0                           },
+    {"GL_EXT_vertex_array_bgra",            EXT_VERTEX_ARRAY_BGRA,          0                           },
+
+    /* NV */
+    {"GL_NV_depth_clamp",                   NV_DEPTH_CLAMP,                 0                           },
+    {"GL_NV_fence",                         NV_FENCE,                       0                           },
+    {"GL_NV_fog_distance",                  NV_FOG_DISTANCE,                0                           },
+    {"GL_NV_fragment_program",              NV_FRAGMENT_PROGRAM,            0                           },
+    {"GL_NV_fragment_program2",             NV_FRAGMENT_PROGRAM2,           0                           },
+    {"GL_NV_fragment_program_option",       NV_FRAGMENT_PROGRAM_OPTION,     0                           },
+    {"GL_NV_half_float",                    NV_HALF_FLOAT,                  0                           },
+    {"GL_NV_light_max_exponent",            NV_LIGHT_MAX_EXPONENT,          0                           },
+    {"GL_NV_register_combiners",            NV_REGISTER_COMBINERS,          0                           },
+    {"GL_NV_register_combiners2",           NV_REGISTER_COMBINERS2,         0                           },
+    {"GL_NV_texgen_reflection",             NV_TEXGEN_REFLECTION,           0                           },
+    {"GL_NV_texture_env_combine4",          NV_TEXTURE_ENV_COMBINE4,        0                           },
+    {"GL_NV_texture_shader",                NV_TEXTURE_SHADER,              0                           },
+    {"GL_NV_texture_shader2",               NV_TEXTURE_SHADER2,             0                           },
+    {"GL_NV_vertex_program",                NV_VERTEX_PROGRAM,              0                           },
+    {"GL_NV_vertex_program1_1",             NV_VERTEX_PROGRAM1_1,           0                           },
+    {"GL_NV_vertex_program2",               NV_VERTEX_PROGRAM2,             0                           },
+    {"GL_NV_vertex_program2_option",        NV_VERTEX_PROGRAM2_OPTION,      0                           },
+    {"GL_NV_vertex_program3",               NV_VERTEX_PROGRAM3,             0                           },
+
+    /* SGI */
+    {"GL_SGIS_generate_mipmap",             SGIS_GENERATE_MIPMAP,           0                           },
+};
+
+/**********************************************************
+ * Utility functions follow
+ **********************************************************/
+
+const struct min_lookup minMipLookup[] =
+{
+    /* NONE         POINT                       LINEAR */
+    {{GL_NEAREST,   GL_NEAREST,                 GL_NEAREST}},               /* NONE */
+    {{GL_NEAREST,   GL_NEAREST_MIPMAP_NEAREST,  GL_NEAREST_MIPMAP_LINEAR}}, /* POINT*/
+    {{GL_LINEAR,    GL_LINEAR_MIPMAP_NEAREST,   GL_LINEAR_MIPMAP_LINEAR}},  /* LINEAR */
+};
+
+const struct min_lookup minMipLookup_noFilter[] =
+{
+    /* NONE         POINT                       LINEAR */
+    {{GL_NEAREST,   GL_NEAREST,                 GL_NEAREST}},               /* NONE */
+    {{GL_NEAREST,   GL_NEAREST,                 GL_NEAREST}},               /* POINT */
+    {{GL_NEAREST,   GL_NEAREST,                 GL_NEAREST}},               /* LINEAR */
+};
+
+const struct min_lookup minMipLookup_noMip[] =
+{
+    /* NONE         POINT                       LINEAR */
+    {{GL_NEAREST,   GL_NEAREST,                 GL_NEAREST}},               /* NONE */
+    {{GL_NEAREST,   GL_NEAREST,                 GL_NEAREST}},               /* POINT */
+    {{GL_LINEAR,    GL_LINEAR,                  GL_LINEAR }},               /* LINEAR */
+};
+
+const GLenum magLookup[] =
+{
+    /* NONE     POINT       LINEAR */
+    GL_NEAREST, GL_NEAREST, GL_LINEAR,
+};
+
+const GLenum magLookup_noFilter[] =
+{
+    /* NONE     POINT       LINEAR */
+    GL_NEAREST, GL_NEAREST, GL_NEAREST,
+};
+
+/* drawStridedSlow attributes */
+glAttribFunc position_funcs[WINED3D_FFP_EMIT_COUNT];
+glAttribFunc diffuse_funcs[WINED3D_FFP_EMIT_COUNT];
+glAttribFunc specular_func_3ubv;
+glAttribFunc specular_funcs[WINED3D_FFP_EMIT_COUNT];
+glAttribFunc normal_funcs[WINED3D_FFP_EMIT_COUNT];
+glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT];
+
+
+/**********************************************************
+ * IWineD3D parts follows
+ **********************************************************/
+
+/* GL locking is done by the caller */
+static inline BOOL test_arb_vs_offset_limit(const struct wined3d_gl_info *gl_info)
+{
+    GLuint prog;
+    BOOL ret = FALSE;
+    const char *testcode =
+        "!!ARBvp1.0\n"
+        "PARAM C[66] = { program.env[0..65] };\n"
+        "ADDRESS A0;"
+        "PARAM zero = {0.0, 0.0, 0.0, 0.0};\n"
+        "ARL A0.x, zero.x;\n"
+        "MOV result.position, C[A0.x + 65];\n"
+        "END\n";
+
+    while(glGetError());
+    GL_EXTCALL(glGenProgramsARB(1, &prog));
+    if(!prog) {
+        ERR("Failed to create an ARB offset limit test program\n");
+    }
+    GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prog));
+    GL_EXTCALL(glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+                                  strlen(testcode), testcode));
+    if(glGetError() != 0) {
+        TRACE("OpenGL implementation does not allow indirect addressing offsets > 63\n");
+        TRACE("error: %s\n", debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+        ret = TRUE;
+    } else TRACE("OpenGL implementation allows offsets > 63\n");
+
+    GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0));
+    GL_EXTCALL(glDeleteProgramsARB(1, &prog));
+    checkGLcall("ARB vp offset limit test cleanup");
+
+    return ret;
+}
+
+static DWORD ver_for_ext(GL_SupportedExt ext)
+{
+    unsigned int i;
+    for (i = 0; i < (sizeof(EXTENSION_MAP) / sizeof(*EXTENSION_MAP)); ++i) {
+        if(EXTENSION_MAP[i].extension == ext) {
+            return EXTENSION_MAP[i].version;
+        }
+    }
+    return 0;
+}
+
+static BOOL match_ati_r300_to_500(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (card_vendor != HW_VENDOR_ATI) return FALSE;
+    if (device == CARD_ATI_RADEON_9500) return TRUE;
+    if (device == CARD_ATI_RADEON_X700) return TRUE;
+    if (device == CARD_ATI_RADEON_X1600) return TRUE;
+    return FALSE;
+}
+
+static BOOL match_geforce5(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (card_vendor == HW_VENDOR_NVIDIA)
+    {
+        if (device == CARD_NVIDIA_GEFORCEFX_5800 || device == CARD_NVIDIA_GEFORCEFX_5600)
+        {
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+static BOOL match_apple(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    /* MacOS has various specialities in the extensions it advertises. Some have to be loaded from
+     * the opengl 1.2+ core, while other extensions are advertised, but software emulated. So try to
+     * detect the Apple OpenGL implementation to apply some extension fixups afterwards.
+     *
+     * Detecting this isn't really easy. The vendor string doesn't mention Apple. Compile-time checks
+     * aren't sufficient either because a Linux binary may display on a macos X server via remote X11.
+     * So try to detect the GL implementation by looking at certain Apple extensions. Some extensions
+     * like client storage might be supported on other implementations too, but GL_APPLE_flush_render
+     * is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So
+     * the chance that other implementations support them is rather small since Win32 QuickTime uses
+     * DirectDraw, not OpenGL.
+     *
+     * This test has been moved into wined3d_guess_gl_vendor()
+     */
+    if (gl_vendor == GL_VENDOR_APPLE)
+    {
+        return TRUE;
+    }
+    return FALSE;
+}
+
+/* Context activation is done by the caller. */
+static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
+{
+    /* Some OpenGL implementations, namely Apple's Geforce 8 driver, advertises PBOs,
+     * but glTexSubImage from a PBO fails miserably, with the first line repeated over
+     * all the texture. This function detects this bug by its symptom and disables PBOs
+     * if the test fails.
+     *
+     * The test uploads a 4x4 texture via the PBO in the "native" format GL_BGRA,
+     * GL_UNSIGNED_INT_8_8_8_8_REV. This format triggers the bug, and it is what we use
+     * for D3DFMT_A8R8G8B8. Then the texture is read back without any PBO and the data
+     * read back is compared to the original. If they are equal PBOs are assumed to work,
+     * otherwise the PBO extension is disabled. */
+    GLuint texture, pbo;
+    static const unsigned int pattern[] =
+    {
+        0x00000000, 0x000000ff, 0x0000ff00, 0x40ff0000,
+        0x80ffffff, 0x40ffff00, 0x00ff00ff, 0x0000ffff,
+        0x00ffff00, 0x00ff00ff, 0x0000ffff, 0x000000ff,
+        0x80ff00ff, 0x0000ffff, 0x00ff00ff, 0x40ff00ff
+    };
+    unsigned int check[sizeof(pattern) / sizeof(pattern[0])];
+
+    /* No PBO -> No point in testing them. */
+    if (!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT]) return;
+
+    ENTER_GL();
+
+    while (glGetError());
+    glGenTextures(1, &texture);
+    glBindTexture(GL_TEXTURE_2D, texture);
+
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 4, 4, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0);
+    checkGLcall("Specifying the PBO test texture");
+
+    GL_EXTCALL(glGenBuffersARB(1, &pbo));
+    GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo));
+    GL_EXTCALL(glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, sizeof(pattern), pattern, GL_STREAM_DRAW_ARB));
+    checkGLcall("Specifying the PBO test pbo");
+
+    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
+    checkGLcall("Loading the PBO test texture");
+
+    GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
+#ifdef VBOX_WITH_VMSVGA
+    glFinish();
+#else
+    wglFinish(); /* just to be sure */
+#endif
+    memset(check, 0, sizeof(check));
+    glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, check);
+    checkGLcall("Reading back the PBO test texture");
+
+    glDeleteTextures(1, &texture);
+    GL_EXTCALL(glDeleteBuffersARB(1, &pbo));
+    checkGLcall("PBO test cleanup");
+
+    LEAVE_GL();
+
+    if (memcmp(check, pattern, sizeof(check)))
+    {
+        WARN_(d3d_caps)("PBO test failed, read back data doesn't match original.\n");
+        WARN_(d3d_caps)("Disabling PBOs. This may result in slower performance.\n");
+        gl_info->supported[ARB_PIXEL_BUFFER_OBJECT] = FALSE;
+    }
+    else
+    {
+        TRACE_(d3d_caps)("PBO test successful.\n");
+    }
+}
+
+static BOOL match_apple_intel(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    return (card_vendor == HW_VENDOR_INTEL) && (gl_vendor == GL_VENDOR_APPLE);
+}
+
+static BOOL match_apple_nonr500ati(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (gl_vendor != GL_VENDOR_APPLE) return FALSE;
+    if (card_vendor != HW_VENDOR_ATI) return FALSE;
+    if (device == CARD_ATI_RADEON_X1600) return FALSE;
+    return TRUE;
+}
+
+static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    return gl_vendor == GL_VENDOR_FGLRX;
+
+}
+
+static BOOL match_dx10_capable(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    /* DX9 cards support 40 single float varyings in hardware, most drivers report 32. ATI misreports
+     * 44 varyings. So assume that if we have more than 44 varyings we have a dx10 card.
+     * This detection is for the gl_ClipPos varying quirk. If a d3d9 card really supports more than 44
+     * varyings and we subtract one in dx9 shaders its not going to hurt us because the dx9 limit is
+     * hardcoded
+     *
+     * dx10 cards usually have 64 varyings */
+    return gl_info->limits.glsl_varyings > 44;
+}
+
+/* A GL context is provided by the caller */
+static BOOL match_allows_spec_alpha(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    GLenum error;
+    DWORD data[16];
+
+    if (!gl_info->supported[EXT_SECONDARY_COLOR]) return FALSE;
+
+    ENTER_GL();
+    while(glGetError());
+    GL_EXTCALL(glSecondaryColorPointerEXT)(4, GL_UNSIGNED_BYTE, 4, data);
+    error = glGetError();
+    LEAVE_GL();
+
+    if(error == GL_NO_ERROR)
+    {
+        TRACE("GL Implementation accepts 4 component specular color pointers\n");
+        return TRUE;
+    }
+    else
+    {
+        TRACE("GL implementation does not accept 4 component specular colors, error %s\n",
+              debug_glerror(error));
+        return FALSE;
+    }
+}
+
+static BOOL match_apple_nvts(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (!match_apple(gl_info, gl_renderer, gl_vendor, card_vendor, device)) return FALSE;
+    return gl_info->supported[NV_TEXTURE_SHADER];
+}
+
+/* A GL context is provided by the caller */
+static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    GLuint prog;
+    BOOL ret = FALSE;
+    GLint pos;
+    const char *testcode =
+        "!!ARBvp1.0\n"
+        "OPTION NV_vertex_program2;\n"
+        "MOV result.clip[0], 0.0;\n"
+        "MOV result.position, 0.0;\n"
+        "END\n";
+
+    if (!gl_info->supported[NV_VERTEX_PROGRAM2_OPTION]) return FALSE;
+
+    ENTER_GL();
+    while(glGetError());
+
+    GL_EXTCALL(glGenProgramsARB(1, &prog));
+    if(!prog)
+    {
+        ERR("Failed to create the NVvp clip test program\n");
+        LEAVE_GL();
+        return FALSE;
+    }
+    GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prog));
+    GL_EXTCALL(glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+                                  strlen(testcode), testcode));
+    glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
+    if(pos != -1)
+    {
+        WARN("GL_NV_vertex_program2_option result.clip[] test failed\n");
+        TRACE("error: %s\n", debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+        ret = TRUE;
+        while(glGetError());
+    }
+    else TRACE("GL_NV_vertex_program2_option result.clip[] test passed\n");
+
+    GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0));
+    GL_EXTCALL(glDeleteProgramsARB(1, &prog));
+    checkGLcall("GL_NV_vertex_program2_option result.clip[] test cleanup");
+
+    LEAVE_GL();
+    return ret;
+}
+
+/* Context activation is done by the caller. */
+static BOOL match_fbo_tex_update(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    char data[4 * 4 * 4];
+    GLuint tex, fbo;
+    GLenum status;
+
+#ifndef VBOX_WITH_VMSVGA
+    if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) return FALSE;
+#endif
+    memset(data, 0xcc, sizeof(data));
+
+    ENTER_GL();
+
+    glGenTextures(1, &tex);
+    glBindTexture(GL_TEXTURE_2D, tex);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 4, 4, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
+    checkGLcall("glTexImage2D");
+
+    gl_info->fbo_ops.glGenFramebuffers(1, &fbo);
+    gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+    gl_info->fbo_ops.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
+    checkGLcall("glFramebufferTexture2D");
+
+    status = gl_info->fbo_ops.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+    if (status != GL_FRAMEBUFFER_COMPLETE) ERR("FBO status %#x\n", status);
+    checkGLcall("glCheckFramebufferStatus");
+
+    memset(data, 0x11, sizeof(data));
+    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, data);
+    checkGLcall("glTexSubImage2D");
+
+    glClearColor(0.996, 0.729, 0.745, 0.792);
+    glClear(GL_COLOR_BUFFER_BIT);
+    checkGLcall("glClear");
+
+    glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, data);
+    checkGLcall("glGetTexImage");
+
+    gl_info->fbo_ops.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
+    gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, 0);
+    glBindTexture(GL_TEXTURE_2D, 0);
+    checkGLcall("glBindTexture");
+
+    gl_info->fbo_ops.glDeleteFramebuffers(1, &fbo);
+    glDeleteTextures(1, &tex);
+    checkGLcall("glDeleteTextures");
+
+    LEAVE_GL();
+
+    return *(DWORD *)data == 0x11111111;
+}
+
+static void quirk_arb_constants(struct wined3d_gl_info *gl_info)
+{
+    TRACE_(d3d_caps)("Using ARB vs constant limit(=%u) for GLSL.\n", gl_info->limits.arb_vs_native_constants);
+    gl_info->limits.glsl_vs_float_constants = gl_info->limits.arb_vs_native_constants;
+    TRACE_(d3d_caps)("Using ARB ps constant limit(=%u) for GLSL.\n", gl_info->limits.arb_ps_native_constants);
+    gl_info->limits.glsl_ps_float_constants = gl_info->limits.arb_ps_native_constants;
+}
+
+static void quirk_apple_glsl_constants(struct wined3d_gl_info *gl_info)
+{
+    quirk_arb_constants(gl_info);
+    /* MacOS needs uniforms for relative addressing offsets. This can accumulate to quite a few uniforms.
+     * Beyond that the general uniform isn't optimal, so reserve a number of uniforms. 12 vec4's should
+     * allow 48 different offsets or other helper immediate values. */
+    TRACE_(d3d_caps)("Reserving 12 GLSL constants for compiler private use.\n");
+    gl_info->reserved_glsl_constants = max(gl_info->reserved_glsl_constants, 12);
+}
+
+/* fglrx crashes with a very bad kernel panic if GL_POINT_SPRITE_ARB is set to GL_COORD_REPLACE_ARB
+ * on more than one texture unit. This means that the d3d9 visual point size test will cause a
+ * kernel panic on any machine running fglrx 9.3(latest that supports r300 to r500 cards). This
+ * quirk only enables point sprites on the first texture unit. This keeps point sprites working in
+ * most games, but avoids the crash
+ *
+ * A more sophisticated way would be to find all units that need texture coordinates and enable
+ * point sprites for one if only one is found, and software emulate point sprites in drawStridedSlow
+ * if more than one unit needs texture coordinates(This requires software ffp and vertex shaders though)
+ *
+ * Note that disabling the extension entirely does not gain predictability because there is no point
+ * sprite capability flag in d3d, so the potential rendering bugs are the same if we disable the extension. */
+static void quirk_one_point_sprite(struct wined3d_gl_info *gl_info)
+{
+    if (gl_info->supported[ARB_POINT_SPRITE])
+    {
+        TRACE("Limiting point sprites to one texture unit.\n");
+        gl_info->limits.point_sprite_units = 1;
+    }
+}
+
+static void quirk_ati_dx9(struct wined3d_gl_info *gl_info)
+{
+    quirk_arb_constants(gl_info);
+
+    /* MacOS advertises GL_ARB_texture_non_power_of_two on ATI r500 and earlier cards, although
+     * these cards only support GL_ARB_texture_rectangle(D3DPTEXTURECAPS_NONPOW2CONDITIONAL).
+     * If real NP2 textures are used, the driver falls back to software. We could just remove the
+     * extension and use GL_ARB_texture_rectangle instead, but texture_rectangle is inconventient
+     * due to the non-normalized texture coordinates. Thus set an internal extension flag,
+     * GL_WINE_normalized_texrect, which signals the code that it can use non power of two textures
+     * as per GL_ARB_texture_non_power_of_two, but has to stick to the texture_rectangle limits.
+     *
+     * fglrx doesn't advertise GL_ARB_texture_non_power_of_two, but it advertises opengl 2.0 which
+     * has this extension promoted to core. The extension loading code sets this extension supported
+     * due to that, so this code works on fglrx as well. */
+    if(gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO])
+    {
+        TRACE("GL_ARB_texture_non_power_of_two advertised on R500 or earlier card, removing.\n");
+        gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO] = FALSE;
+        gl_info->supported[WINE_NORMALIZED_TEXRECT] = TRUE;
+    }
+
+    /* fglrx has the same structural issues as the one described in quirk_apple_glsl_constants, although
+     * it is generally more efficient. Reserve just 8 constants. */
+    TRACE_(d3d_caps)("Reserving 8 GLSL constants for compiler private use.\n");
+    gl_info->reserved_glsl_constants = max(gl_info->reserved_glsl_constants, 8);
+}
+
+static void quirk_no_np2(struct wined3d_gl_info *gl_info)
+{
+    /*  The nVidia GeForceFX series reports OpenGL 2.0 capabilities with the latest drivers versions, but
+     *  doesn't explicitly advertise the ARB_tex_npot extension in the GL extension string.
+     *  This usually means that ARB_tex_npot is supported in hardware as long as the application is staying
+     *  within the limits enforced by the ARB_texture_rectangle extension. This however is not true for the
+     *  FX series, which instantly falls back to a slower software path as soon as ARB_tex_npot is used.
+     *  We therefore completely remove ARB_tex_npot from the list of supported extensions.
+     *
+     *  Note that wine_normalized_texrect can't be used in this case because internally it uses ARB_tex_npot,
+     *  triggering the software fallback. There is not much we can do here apart from disabling the
+     *  software-emulated extension and reenable ARB_tex_rect (which was previously disabled
+     *  in IWineD3DImpl_FillGLCaps).
+     *  This fixup removes performance problems on both the FX 5900 and FX 5700 (e.g. for framebuffer
+     *  post-processing effects in the game "Max Payne 2").
+     *  The behaviour can be verified through a simple test app attached in bugreport #14724. */
+    TRACE("GL_ARB_texture_non_power_of_two advertised through OpenGL 2.0 on NV FX card, removing.\n");
+    gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO] = FALSE;
+    gl_info->supported[ARB_TEXTURE_RECTANGLE] = TRUE;
+}
+
+static void quirk_texcoord_w(struct wined3d_gl_info *gl_info)
+{
+    /* The Intel GPUs on MacOS set the .w register of texcoords to 0.0 by default, which causes problems
+     * with fixed function fragment processing. Ideally this flag should be detected with a test shader
+     * and OpenGL feedback mode, but some GL implementations (MacOS ATI at least, probably all MacOS ones)
+     * do not like vertex shaders in feedback mode and return an error, even though it should be valid
+     * according to the spec.
+     *
+     * We don't want to enable this on all cards, as it adds an extra instruction per texcoord used. This
+     * makes the shader slower and eats instruction slots which should be available to the d3d app.
+     *
+     * ATI Radeon HD 2xxx cards on MacOS have the issue. Instead of checking for the buggy cards, blacklist
+     * all radeon cards on Macs and whitelist the good ones. That way we're prepared for the future. If
+     * this workaround is activated on cards that do not need it, it won't break things, just affect
+     * performance negatively. */
+    TRACE("Enabling vertex texture coord fixes in vertex shaders.\n");
+    gl_info->quirks |= WINED3D_QUIRK_SET_TEXCOORD_W;
+}
+
+static void quirk_clip_varying(struct wined3d_gl_info *gl_info)
+{
+    gl_info->quirks |= WINED3D_QUIRK_GLSL_CLIP_VARYING;
+}
+
+static void quirk_allows_specular_alpha(struct wined3d_gl_info *gl_info)
+{
+    gl_info->quirks |= WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA;
+}
+
+static void quirk_apple_nvts(struct wined3d_gl_info *gl_info)
+{
+    gl_info->supported[NV_TEXTURE_SHADER] = FALSE;
+    gl_info->supported[NV_TEXTURE_SHADER2] = FALSE;
+}
+
+static void quirk_disable_nvvp_clip(struct wined3d_gl_info *gl_info)
+{
+    gl_info->quirks |= WINED3D_QUIRK_NV_CLIP_BROKEN;
+}
+
+static void quirk_fbo_tex_update(struct wined3d_gl_info *gl_info)
+{
+    gl_info->quirks |= WINED3D_QUIRK_FBO_TEX_UPDATE;
+}
+
+static BOOL match_ati_hd4800(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (card_vendor != HW_VENDOR_ATI) return FALSE;
+    if (device == CARD_ATI_RADEON_HD4800) return TRUE;
+    return FALSE;
+}
+
+static void quirk_fullsize_blit(struct wined3d_gl_info *gl_info)
+{
+    gl_info->quirks |= WINED3D_QUIRK_FULLSIZE_BLIT;
+}
+
+#ifdef VBOX_WITH_WDDM
+static BOOL match_mesa_nvidia(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (card_vendor != HW_VENDOR_NVIDIA) return FALSE;
+    if (gl_vendor != GL_VENDOR_MESA) return FALSE;
+    return TRUE;
+}
+
+static void quirk_no_shader_3(struct wined3d_gl_info *gl_info)
+{
+    int vs_selected_mode, ps_selected_mode;
+    select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+    if (vs_selected_mode != SHADER_GLSL && ps_selected_mode != SHADER_GLSL)
+        return;
+
+    gl_info->limits.arb_ps_instructions = 512;
+}
+#endif
+
+static BOOL match_intel(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    if (card_vendor == HW_VENDOR_INTEL) return TRUE;
+    if (gl_vendor == HW_VENDOR_INTEL) return TRUE;
+    return FALSE;
+}
+
+static void quirk_force_blit(struct wined3d_gl_info *gl_info)
+{
+    gl_info->quirks |= WINED3D_QUIRK_FORCE_BLIT;
+}
+
+struct driver_quirk
+{
+    BOOL (*match)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+            enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device);
+    void (*apply)(struct wined3d_gl_info *gl_info);
+    const char *description;
+};
+
+static const struct driver_quirk quirk_table[] =
+{
+    {
+        match_ati_r300_to_500,
+        quirk_ati_dx9,
+        "ATI GLSL constant and normalized texrect quirk"
+    },
+    /* MacOS advertises more GLSL vertex shader uniforms than supported by the hardware, and if more are
+     * used it falls back to software. While the compiler can detect if the shader uses all declared
+     * uniforms, the optimization fails if the shader uses relative addressing. So any GLSL shader
+     * using relative addressing falls back to software.
+     *
+     * ARB vp gives the correct amount of uniforms, so use it instead of GLSL. */
+    {
+        match_apple,
+        quirk_apple_glsl_constants,
+        "Apple GLSL uniform override"
+    },
+    {
+        match_geforce5,
+        quirk_no_np2,
+        "Geforce 5 NP2 disable"
+    },
+    {
+        match_apple_intel,
+        quirk_texcoord_w,
+        "Init texcoord .w for Apple Intel GPU driver"
+    },
+    {
+        match_apple_nonr500ati,
+        quirk_texcoord_w,
+        "Init texcoord .w for Apple ATI >= r600 GPU driver"
+    },
+    {
+        match_fglrx,
+        quirk_one_point_sprite,
+        "Fglrx point sprite crash workaround"
+    },
+    {
+        match_dx10_capable,
+        quirk_clip_varying,
+        "Reserved varying for gl_ClipPos"
+    },
+    {
+        /* GL_EXT_secondary_color does not allow 4 component secondary colors, but most
+         * GL implementations accept it. The Mac GL is the only implementation known to
+         * reject it.
+         *
+         * If we can pass 4 component specular colors, do it, because (a) we don't have
+         * to screw around with the data, and (b) the D3D fixed function vertex pipeline
+         * passes specular alpha to the pixel shader if any is used. Otherwise the
+         * specular alpha is used to pass the fog coordinate, which we pass to opengl
+         * via GL_EXT_fog_coord.
+         */
+        match_allows_spec_alpha,
+        quirk_allows_specular_alpha,
+        "Allow specular alpha quirk"
+    },
+    {
+        /* The pixel formats provided by GL_NV_texture_shader are broken on OSX
+         * (rdar://5682521).
+         */
+        match_apple_nvts,
+        quirk_apple_nvts,
+        "Apple NV_texture_shader disable"
+    },
+#ifndef VBOX_WITH_VMSVGA
+    {
+        match_broken_nv_clip,
+        quirk_disable_nvvp_clip,
+        "Apple NV_vertex_program clip bug quirk"
+    },
+#endif
+    {
+        match_fbo_tex_update,
+        quirk_fbo_tex_update,
+        "FBO rebind for attachment updates"
+    },
+    {
+        match_ati_hd4800,
+        quirk_fullsize_blit,
+        "Fullsize blit"
+    },
+#ifdef VBOX_WITH_WDDM
+    {
+        match_mesa_nvidia,
+        quirk_no_shader_3,
+        "disable shader 3 support"
+    },
+#endif
+    {
+        match_intel,
+        quirk_force_blit,
+        "force framebuffer blit when possible"
+    }
+};
+
+/* Context activation is done by the caller. */
+static void fixup_extensions(struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+    unsigned int i;
+
+    for (i = 0; i < (sizeof(quirk_table) / sizeof(*quirk_table)); ++i)
+    {
+        if (!quirk_table[i].match(gl_info, gl_renderer, gl_vendor, card_vendor, device)) continue;
+        TRACE_(d3d_caps)("Applying driver quirk \"%s\".\n", quirk_table[i].description);
+        quirk_table[i].apply(gl_info);
+    }
+
+    /* Find out if PBOs work as they are supposed to. */
+    test_pbo_functionality(gl_info);
+}
+
+
+/* Certain applications (Steam) complain if we report an outdated driver version. In general,
+ * reporting a driver version is moot because we are not the Windows driver, and we have different
+ * bugs, features, etc.
+ *
+ * The driver version has the form "x.y.z.w".
+ *
+ * "x" is the Windows version the driver is meant for:
+ * 4 -> 95/98/NT4
+ * 5 -> 2000
+ * 6 -> 2000/XP
+ * 7 -> Vista
+ * 8 -> Win 7
+ *
+ * "y" is the Direct3D level the driver supports:
+ * 11 -> d3d6
+ * 12 -> d3d7
+ * 13 -> d3d8
+ * 14 -> d3d9
+ * 15 -> d3d10
+ *
+ * "z" is unknown, possibly vendor specific.
+ *
+ * "w" is the vendor specific driver version.
+ */
+struct driver_version_information
+{
+    WORD vendor;                    /* reported PCI card vendor ID  */
+    WORD card;                      /* reported PCI card device ID  */
+    const char *description;        /* Description of the card e.g. NVIDIA RIVA TNT */
+    WORD d3d_level;                 /* driver hiword to report      */
+    WORD lopart_hi, lopart_lo;      /* driver loword to report      */
+};
+
+static const struct driver_version_information driver_version_table[] =
+{
+    /* Nvidia drivers. Geforce6 and newer cards are supported by the current driver (180.x)
+     * GeforceFX support is up to 173.x, - driver uses numbering x.y.11.7341 for 173.41 where x is the windows revision (6=2000/xp, 7=vista), y is unknown
+     * Geforce2MX/3/4 up to 96.x - driver uses numbering 9.6.8.9 for 96.89
+     * TNT/Geforce1/2 up to 71.x - driver uses numbering 7.1.8.6 for 71.86
+     *
+     * All version numbers used below are from the Linux nvidia drivers. */
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_RIVA_TNT,           "NVIDIA RIVA TNT",                  1,  8,  6      },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_RIVA_TNT2,          "NVIDIA RIVA TNT2/TNT2 Pro",        1,  8,  6      },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE,            "NVIDIA GeForce 256",               1,  8,  6      },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE2_MX,        "NVIDIA GeForce2 MX/MX 400",        6,  4,  3      },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE2,           "NVIDIA GeForce2 GTS/GeForce2 Pro", 1,  8,  6      },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE3,           "NVIDIA GeForce3",                  6,  10, 9371   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE4_MX,        "NVIDIA GeForce4 MX 460",           6,  10, 9371   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE4_TI4200,    "NVIDIA GeForce4 Ti 4200",          6,  10, 9371   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCEFX_5200,     "NVIDIA GeForce FX 5200",           15, 11, 7516   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCEFX_5600,     "NVIDIA GeForce FX 5600",           15, 11, 7516   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCEFX_5800,     "NVIDIA GeForce FX 5800",           15, 11, 7516   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_6200,       "NVIDIA GeForce 6200",              15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_6600GT,     "NVIDIA GeForce 6600 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_6800,       "NVIDIA GeForce 6800",              15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_7300,       "NVIDIA GeForce Go 7300",           15, 11, 8585   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_7400,       "NVIDIA GeForce Go 7400",           15, 11, 8585   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_7600,       "NVIDIA GeForce 7600 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_7800GT,     "NVIDIA GeForce 7800 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_8300GS,     "NVIDIA GeForce 8300 GS",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_8600GT,     "NVIDIA GeForce 8600 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_8600MGT,    "NVIDIA GeForce 8600M GT",          15, 11, 8585   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_8800GTS,    "NVIDIA GeForce 8800 GTS",          15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_9200,       "NVIDIA GeForce 9200",              15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_9400GT,     "NVIDIA GeForce 9400 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_9500GT,     "NVIDIA GeForce 9500 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_9600GT,     "NVIDIA GeForce 9600 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_9800GT,     "NVIDIA GeForce 9800 GT",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_GTX260,     "NVIDIA GeForce GTX 260",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_GTX275,     "NVIDIA GeForce GTX 275",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_GTX280,     "NVIDIA GeForce GTX 280",           15, 11, 8618   },
+    {HW_VENDOR_NVIDIA,     CARD_NVIDIA_GEFORCE_GT240,      "NVIDIA GeForce GT 240",            15, 11, 8618   },
+
+    /* ATI cards. The driver versions are somewhat similar, but not quite the same. Let's hardcode. */
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_9500,           "ATI Radeon 9500",                  14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_X700,           "ATI Radeon X700 SE",               14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_X1600,          "ATI Radeon X1600 Series",          14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD2350,         "ATI Mobility Radeon HD 2350",      14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD2600,         "ATI Mobility Radeon HD 2600",      14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD2900,         "ATI Radeon HD 2900 XT",            14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD4350,         "ATI Radeon HD 4350",               14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD4600,         "ATI Radeon HD 4600 Series",        14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD4700,         "ATI Radeon HD 4700 Series",        14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD4800,         "ATI Radeon HD 4800 Series",        14, 10, 6764    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD5700,         "ATI Radeon HD 5700 Series",        14, 10, 8681    },
+    {HW_VENDOR_ATI,        CARD_ATI_RADEON_HD5800,         "ATI Radeon HD 5800 Series",        14, 10, 8681    },
+
+    /* TODO: Add information about legacy ATI hardware, Intel and other cards. */
+};
+
+
+static DWORD wined3d_parse_gl_version(const char *gl_version)
+{
+    const char *ptr = gl_version;
+    int major, minor;
+
+    major = atoi(ptr);
+    if (major <= 0) ERR_(d3d_caps)("Invalid opengl major version: %d.\n", major);
+
+    while (isdigit(*ptr)) ++ptr;
+    if (*ptr++ != '.') ERR_(d3d_caps)("Invalid opengl version string: %s.\n", debugstr_a(gl_version));
+
+    minor = atoi(ptr);
+
+    TRACE_(d3d_caps)("Found OpenGL version: %d.%d.\n", major, minor);
+
+    return MAKEDWORD_VERSION(major, minor);
+}
+
+static enum wined3d_gl_vendor wined3d_guess_gl_vendor(struct wined3d_gl_info *gl_info, const char *gl_vendor_string, const char *gl_renderer)
+{
+
+    /* MacOS has various specialities in the extensions it advertises. Some have to be loaded from
+     * the opengl 1.2+ core, while other extensions are advertised, but software emulated. So try to
+     * detect the Apple OpenGL implementation to apply some extension fixups afterwards.
+     *
+     * Detecting this isn't really easy. The vendor string doesn't mention Apple. Compile-time checks
+     * aren't sufficient either because a Linux binary may display on a macos X server via remote X11.
+     * So try to detect the GL implementation by looking at certain Apple extensions. Some extensions
+     * like client storage might be supported on other implementations too, but GL_APPLE_flush_render
+     * is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So
+     * the chance that other implementations support them is rather small since Win32 QuickTime uses
+     * DirectDraw, not OpenGL. */
+    if (gl_info->supported[APPLE_FENCE]
+            && gl_info->supported[APPLE_CLIENT_STORAGE]
+            && gl_info->supported[APPLE_FLUSH_RENDER]
+            && gl_info->supported[APPLE_YCBCR_422])
+        return GL_VENDOR_APPLE;
+
+    if (strstr(gl_vendor_string, "NVIDIA"))
+        return GL_VENDOR_NVIDIA;
+
+    if (strstr(gl_vendor_string, "ATI"))
+        return GL_VENDOR_FGLRX;
+
+    if (strstr(gl_vendor_string, "Intel(R)")
+            || strstr(gl_renderer, "Intel(R)")
+            || strstr(gl_vendor_string, "Intel Inc."))
+    {
+        if (strstr(gl_renderer, "Mesa"))
+            return GL_VENDOR_MESA;
+        return GL_VENDOR_INTEL;
+    }
+
+    if (strstr(gl_vendor_string, "Mesa")
+            || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
+            || strstr(gl_vendor_string, "DRI R300 Project")
+            || strstr(gl_vendor_string, "X.Org R300 Project")
+            || strstr(gl_vendor_string, "Tungsten Graphics, Inc")
+            || strstr(gl_vendor_string, "VMware, Inc.")
+            || strstr(gl_renderer, "Mesa")
+            || strstr(gl_renderer, "Gallium"))
+        return GL_VENDOR_MESA;
+
+    FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning GL_VENDOR_UNKNOWN.\n",
+            debugstr_a(gl_vendor_string));
+
+    return GL_VENDOR_UNKNOWN;
+}
+
+static enum wined3d_pci_vendor wined3d_guess_card_vendor(const char *gl_vendor_string, const char *gl_renderer)
+{
+    if (strstr(gl_vendor_string, "NVIDIA"))
+        return HW_VENDOR_NVIDIA;
+
+    if (strstr(gl_vendor_string, "ATI")
+            || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
+            || strstr(gl_vendor_string, "X.Org R300 Project")
+            || strstr(gl_vendor_string, "DRI R300 Project"))
+        return HW_VENDOR_ATI;
+
+    if (strstr(gl_vendor_string, "Intel(R)")
+            || strstr(gl_renderer, "Intel(R)")
+            || strstr(gl_vendor_string, "Intel Inc."))
+        return HW_VENDOR_INTEL;
+
+    if (strstr(gl_vendor_string, "Mesa")
+            || strstr(gl_vendor_string, "Tungsten Graphics, Inc")
+            || strstr(gl_vendor_string, "VMware, Inc."))
+        return HW_VENDOR_SOFTWARE;
+
+    FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning HW_VENDOR_NVIDIA.\n", debugstr_a(gl_vendor_string));
+
+    return HW_VENDOR_NVIDIA;
+}
+
+
+
+static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+#ifndef VBOX_WITH_WDDM
+    if (WINE_D3D10_CAPABLE(gl_info))
+#endif
+    {
+        /* Geforce 200 - highend */
+        if (strstr(gl_renderer, "GTX 280")
+                || strstr(gl_renderer, "GTX 285")
+                || strstr(gl_renderer, "GTX 295"))
+        {
+            *vidmem = 1024;
+            return CARD_NVIDIA_GEFORCE_GTX280;
+        }
+
+        /* Geforce 200 - midend high */
+        if (strstr(gl_renderer, "GTX 275"))
+        {
+            *vidmem = 896;
+            return CARD_NVIDIA_GEFORCE_GTX275;
+        }
+
+        /* Geforce 200 - midend */
+        if (strstr(gl_renderer, "GTX 260"))
+        {
+            *vidmem = 1024;
+            return CARD_NVIDIA_GEFORCE_GTX260;
+        }
+        /* Geforce 200 - midend */
+        if (strstr(gl_renderer, "GT 240"))
+        {
+           *vidmem = 512;
+           return CARD_NVIDIA_GEFORCE_GT240;
+        }
+
+        /* Geforce9 - highend / Geforce 200 - midend (GTS 150/250 are based on the same core) */
+        if (strstr(gl_renderer, "9800")
+                || strstr(gl_renderer, "GTS 150")
+                || strstr(gl_renderer, "GTS 250"))
+        {
+            *vidmem = 512;
+            return CARD_NVIDIA_GEFORCE_9800GT;
+        }
+
+        /* Geforce9 - midend */
+        if (strstr(gl_renderer, "9600"))
+        {
+            *vidmem = 384; /* The 9600GSO has 384MB, the 9600GT has 512-1024MB */
+            return CARD_NVIDIA_GEFORCE_9600GT;
+        }
+
+        /* Geforce9 - midend low / Geforce 200 - low */
+        if (strstr(gl_renderer, "9500")
+                || strstr(gl_renderer, "GT 120")
+                || strstr(gl_renderer, "GT 130"))
+        {
+            *vidmem = 256; /* The 9500GT has 256-1024MB */
+            return CARD_NVIDIA_GEFORCE_9500GT;
+        }
+
+        /* Geforce9 - lowend */
+        if (strstr(gl_renderer, "9400"))
+        {
+            *vidmem = 256; /* The 9400GT has 256-1024MB */
+            return CARD_NVIDIA_GEFORCE_9400GT;
+        }
+
+        /* Geforce9 - lowend low */
+        if (strstr(gl_renderer, "9100")
+                || strstr(gl_renderer, "9200")
+                || strstr(gl_renderer, "9300")
+                || strstr(gl_renderer, "G 100"))
+        {
+            *vidmem = 256; /* The 9100-9300 cards have 256MB */
+            return CARD_NVIDIA_GEFORCE_9200;
+        }
+
+        /* Geforce8 - highend */
+        if (strstr(gl_renderer, "8800"))
+        {
+            *vidmem = 320; /* The 8800GTS uses 320MB, a 8800GTX can have 768MB */
+            return CARD_NVIDIA_GEFORCE_8800GTS;
+        }
+
+        /* Geforce8 - midend mobile */
+        if (strstr(gl_renderer, "8600 M"))
+        {
+            *vidmem = 512;
+            return CARD_NVIDIA_GEFORCE_8600MGT;
+        }
+
+        /* Geforce8 - midend */
+        if (strstr(gl_renderer, "8600")
+                || strstr(gl_renderer, "8700"))
+        {
+            *vidmem = 256;
+            return CARD_NVIDIA_GEFORCE_8600GT;
+        }
+
+        /* Geforce8 - lowend */
+        if (strstr(gl_renderer, "8100")
+                || strstr(gl_renderer, "8200")
+                || strstr(gl_renderer, "8300")
+                || strstr(gl_renderer, "8400")
+                || strstr(gl_renderer, "8500"))
+        {
+            *vidmem = 128; /* 128-256MB for a 8300, 256-512MB for a 8400 */
+            return CARD_NVIDIA_GEFORCE_8300GS;
+        }
+
+        /* Geforce8-compatible fall back if the GPU is not in the list yet */
+        *vidmem = 128;
+        return CARD_NVIDIA_GEFORCE_8300GS;
+    }
+
+    /* Both the GeforceFX, 6xxx and 7xxx series support D3D9. The last two types have more
+     * shader capabilities, so we use the shader capabilities to distinguish between FX and 6xxx/7xxx.
+     */
+    if (WINE_D3D9_CAPABLE(gl_info) && gl_info->supported[NV_VERTEX_PROGRAM3])
+    {
+        /* Geforce7 - highend */
+        if (strstr(gl_renderer, "7800")
+                || strstr(gl_renderer, "7900")
+                || strstr(gl_renderer, "7950")
+                || strstr(gl_renderer, "Quadro FX 4")
+                || strstr(gl_renderer, "Quadro FX 5"))
+        {
+            *vidmem = 256; /* A 7800GT uses 256MB while highend 7900 cards can use 512MB */
+            return CARD_NVIDIA_GEFORCE_7800GT;
+        }
+
+        /* Geforce7 midend */
+        if (strstr(gl_renderer, "7600")
+                || strstr(gl_renderer, "7700"))
+        {
+            *vidmem = 256; /* The 7600 uses 256-512MB */
+            return CARD_NVIDIA_GEFORCE_7600;
+        }
+
+        /* Geforce7 lower medium */
+        if (strstr(gl_renderer, "7400"))
+        {
+            *vidmem = 256; /* The 7400 uses 256-512MB */
+            return CARD_NVIDIA_GEFORCE_7400;
+        }
+
+        /* Geforce7 lowend */
+        if (strstr(gl_renderer, "7300"))
+        {
+            *vidmem = 256; /* Mac Pros with this card have 256 MB */
+            return CARD_NVIDIA_GEFORCE_7300;
+        }
+
+        /* Geforce6 highend */
+        if (strstr(gl_renderer, "6800"))
+        {
+            *vidmem = 128; /* The 6800 uses 128-256MB, the 7600 uses 256-512MB */
+            return CARD_NVIDIA_GEFORCE_6800;
+        }
+
+        /* Geforce6 - midend */
+        if (strstr(gl_renderer, "6600")
+                || strstr(gl_renderer, "6610")
+                || strstr(gl_renderer, "6700"))
+        {
+            *vidmem = 128; /* A 6600GT has 128-256MB */
+            return CARD_NVIDIA_GEFORCE_6600GT;
+        }
+
+        /* Geforce6/7 lowend */
+        *vidmem = 64; /* */
+        return CARD_NVIDIA_GEFORCE_6200; /* Geforce 6100/6150/6200/7300/7400/7500 */
+    }
+
+    if (WINE_D3D9_CAPABLE(gl_info))
+    {
+        /* GeforceFX - highend */
+        if (strstr(gl_renderer, "5800")
+                || strstr(gl_renderer, "5900")
+                || strstr(gl_renderer, "5950")
+                || strstr(gl_renderer, "Quadro FX"))
+        {
+            *vidmem = 256; /* 5800-5900 cards use 256MB */
+            return CARD_NVIDIA_GEFORCEFX_5800;
+        }
+
+        /* GeforceFX - midend */
+        if (strstr(gl_renderer, "5600")
+                || strstr(gl_renderer, "5650")
+                || strstr(gl_renderer, "5700")
+                || strstr(gl_renderer, "5750"))
+        {
+            *vidmem = 128; /* A 5600 uses 128-256MB */
+            return CARD_NVIDIA_GEFORCEFX_5600;
+        }
+
+        /* GeforceFX - lowend */
+        *vidmem = 64; /* Normal FX5200 cards use 64-256MB; laptop (non-standard) can have less */
+        return CARD_NVIDIA_GEFORCEFX_5200; /* GeforceFX 5100/5200/5250/5300/5500 */
+    }
+
+    if (WINE_D3D8_CAPABLE(gl_info))
+    {
+        if (strstr(gl_renderer, "GeForce4 Ti") || strstr(gl_renderer, "Quadro4"))
+        {
+            *vidmem = 64; /* Geforce4 Ti cards have 64-128MB */
+            return CARD_NVIDIA_GEFORCE4_TI4200; /* Geforce4 Ti4200/Ti4400/Ti4600/Ti4800, Quadro4 */
+        }
+
+        *vidmem = 64; /* Geforce3 cards have 64-128MB */
+        return CARD_NVIDIA_GEFORCE3; /* Geforce3 standard/Ti200/Ti500, Quadro DCC */
+    }
+
+    if (WINE_D3D7_CAPABLE(gl_info))
+    {
+        if (strstr(gl_renderer, "GeForce4 MX"))
+        {
+            /* Most Geforce4MX GPUs have at least 64MB of memory, some
+             * early models had 32MB but most have 64MB or even 128MB. */
+            *vidmem = 64;
+            return CARD_NVIDIA_GEFORCE4_MX; /* MX420/MX440/MX460/MX4000 */
+        }
+
+        if (strstr(gl_renderer, "GeForce2 MX") || strstr(gl_renderer, "Quadro2 MXR"))
+        {
+            *vidmem = 32; /* Geforce2MX GPUs have 32-64MB of video memory */
+            return CARD_NVIDIA_GEFORCE2_MX; /* Geforce2 standard/MX100/MX200/MX400, Quadro2 MXR */
+        }
+
+        if (strstr(gl_renderer, "GeForce2") || strstr(gl_renderer, "Quadro2"))
+        {
+            *vidmem = 32; /* Geforce2 GPUs have 32-64MB of video memory */
+            return CARD_NVIDIA_GEFORCE2; /* Geforce2 GTS/Pro/Ti/Ultra, Quadro2 */
+        }
+
+        /* Most Geforce1 cards have 32MB, there are also some rare 16
+         * and 64MB (Dell) models. */
+        *vidmem = 32;
+        return CARD_NVIDIA_GEFORCE; /* Geforce 256/DDR, Quadro */
+    }
+
+    if (strstr(gl_renderer, "TNT2"))
+    {
+        *vidmem = 32; /* Most TNT2 boards have 32MB, though there are 16MB boards too */
+        return CARD_NVIDIA_RIVA_TNT2; /* Riva TNT2 standard/M64/Pro/Ultra */
+    }
+
+    *vidmem = 16; /* Most TNT boards have 16MB, some rare models have 8MB */
+    return CARD_NVIDIA_RIVA_TNT; /* Riva TNT, Vanta */
+
+}
+
+static enum wined3d_pci_device select_card_ati_binary(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+    /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+     *
+     * Beware: renderer string do not match exact card model,
+     * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
+#ifndef VBOX_WITH_WDDM
+    if (WINE_D3D10_CAPABLE(gl_info))
+#endif
+    {
+        /* Radeon EG CYPRESS XT / PRO HD5800 - highend */
+        if (strstr(gl_renderer, "HD 5800")          /* Radeon EG CYPRESS HD58xx generic renderer string */
+                || strstr(gl_renderer, "HD 5850")   /* Radeon EG CYPRESS XT */
+                || strstr(gl_renderer, "HD 5870"))  /* Radeon EG CYPRESS PRO */
+        {
+            *vidmem = 1024; /* note: HD58xx cards use 1024MB  */
+            return CARD_ATI_RADEON_HD5800;
+        }
+
+        /* Radeon EG JUNIPER XT / LE HD5700 - midend */
+        if (strstr(gl_renderer, "HD 5700")          /* Radeon EG JUNIPER HD57xx generic renderer string */
+                || strstr(gl_renderer, "HD 5750")   /* Radeon EG JUNIPER LE */
+                || strstr(gl_renderer, "HD 5770"))  /* Radeon EG JUNIPER XT */
+        {
+            *vidmem = 512; /* note: HD5770 cards use 1024MB and HD5750 cards use 512MB or 1024MB  */
+            return CARD_ATI_RADEON_HD5700;
+        }
+
+        /* Radeon R7xx HD4800 - highend */
+        if (strstr(gl_renderer, "HD 4800")          /* Radeon RV7xx HD48xx generic renderer string */
+                || strstr(gl_renderer, "HD 4830")   /* Radeon RV770 */
+                || strstr(gl_renderer, "HD 4850")   /* Radeon RV770 */
+                || strstr(gl_renderer, "HD 4870")   /* Radeon RV770 */
+                || strstr(gl_renderer, "HD 4890"))  /* Radeon RV790 */
+        {
+            *vidmem = 512; /* note: HD4890 cards use 1024MB */
+            return CARD_ATI_RADEON_HD4800;
+        }
+
+        /* Radeon R740 HD4700 - midend */
+        if (strstr(gl_renderer, "HD 4700")          /* Radeon RV770 */
+                || strstr(gl_renderer, "HD 4770"))  /* Radeon RV740 */
+        {
+            *vidmem = 512;
+            return CARD_ATI_RADEON_HD4700;
+        }
+
+        /* Radeon R730 HD4600 - midend */
+        if (strstr(gl_renderer, "HD 4600")          /* Radeon RV730 */
+                || strstr(gl_renderer, "HD 4650")   /* Radeon RV730 */
+                || strstr(gl_renderer, "HD 4670"))  /* Radeon RV730 */
+        {
+            *vidmem = 512;
+            return CARD_ATI_RADEON_HD4600;
+        }
+
+        /* Radeon R710 HD4500/HD4350 - lowend */
+        if (strstr(gl_renderer, "HD 4350")          /* Radeon RV710 */
+                || strstr(gl_renderer, "HD 4550"))  /* Radeon RV710 */
+        {
+            *vidmem = 256;
+            return CARD_ATI_RADEON_HD4350;
+        }
+
+        /* Radeon R6xx HD2900/HD3800 - highend */
+        if (strstr(gl_renderer, "HD 2900")
+                || strstr(gl_renderer, "HD 3870")
+                || strstr(gl_renderer, "HD 3850"))
+        {
+            *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+            return CARD_ATI_RADEON_HD2900;
+        }
+
+        /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+        if (strstr(gl_renderer, "HD 2600")
+                || strstr(gl_renderer, "HD 3830")
+                || strstr(gl_renderer, "HD 3690")
+                || strstr(gl_renderer, "HD 3650"))
+        {
+            *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+            return CARD_ATI_RADEON_HD2600;
+        }
+
+        /* Radeon R6xx HD2350/HD2400/HD3400 - lowend
+         * Note HD2300=DX9, HD2350=DX10 */
+        if (strstr(gl_renderer, "HD 2350")
+                || strstr(gl_renderer, "HD 2400")
+                || strstr(gl_renderer, "HD 3470")
+                || strstr(gl_renderer, "HD 3450")
+                || strstr(gl_renderer, "HD 3430")
+                || strstr(gl_renderer, "HD 3400"))
+        {
+            *vidmem = 256; /* HD2350/2400 use 256MB, HD34xx use 256-512MB */
+            return CARD_ATI_RADEON_HD2350;
+        }
+
+        /* Radeon R6xx/R7xx integrated */
+        if (strstr(gl_renderer, "HD 3100")
+                || strstr(gl_renderer, "HD 3200")
+                || strstr(gl_renderer, "HD 3300"))
+        {
+            *vidmem = 128; /* 128MB */
+            return CARD_ATI_RADEON_HD3200;
+        }
+
+        /* Default for when no GPU has been found */
+        *vidmem = 128; /* 128MB */
+        return CARD_ATI_RADEON_HD3200;
+    }
+
+    if (WINE_D3D8_CAPABLE(gl_info))
+    {
+        /* Radeon R5xx */
+        if (strstr(gl_renderer, "X1600")
+                || strstr(gl_renderer, "X1650")
+                || strstr(gl_renderer, "X1800")
+                || strstr(gl_renderer, "X1900")
+                || strstr(gl_renderer, "X1950"))
+        {
+            *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
+            return CARD_ATI_RADEON_X1600;
+        }
+
+        /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300/X2500/HD2300 (lowend R5xx)
+         * Note X2300/X2500/HD2300 are R5xx GPUs with a 2xxx naming but they are still DX9-only */
+        if (strstr(gl_renderer, "X700")
+                || strstr(gl_renderer, "X800")
+                || strstr(gl_renderer, "X850")
+                || strstr(gl_renderer, "X1300")
+                || strstr(gl_renderer, "X1400")
+                || strstr(gl_renderer, "X1450")
+                || strstr(gl_renderer, "X1550")
+                || strstr(gl_renderer, "X2300")
+                || strstr(gl_renderer, "X2500")
+                || strstr(gl_renderer, "HD 2300")
+                )
+        {
+            *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
+            return CARD_ATI_RADEON_X700;
+        }
+
+        /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
+        if (strstr(gl_renderer, "Radeon Xpress"))
+        {
+            *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
+            return CARD_ATI_RADEON_XPRESS_200M;
+        }
+
+        /* Radeon R3xx */
+        *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
+        return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
+    }
+
+    if (WINE_D3D8_CAPABLE(gl_info))
+    {
+        *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
+        return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
+    }
+
+    if (WINE_D3D7_CAPABLE(gl_info))
+    {
+        *vidmem = 32; /* There are models with up to 64MB */
+        return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
+    }
+
+    *vidmem = 16; /* There are 16-32MB models */
+    return CARD_ATI_RAGE_128PRO;
+
+}
+
+static enum wined3d_pci_device select_card_intel_binary(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+    if (strstr(gl_renderer, "X3100"))
+    {
+        /* MacOS calls the card GMA X3100, Google findings also suggest the name GM965 */
+        *vidmem = 128;
+        return CARD_INTEL_X3100;
+    }
+
+    if (strstr(gl_renderer, "GMA 950") || strstr(gl_renderer, "945GM"))
+    {
+        /* MacOS calls the card GMA 950, but everywhere else the PCI ID is named 945GM */
+        *vidmem = 64;
+        return CARD_INTEL_I945GM;
+    }
+
+    if (strstr(gl_renderer, "915GM")) return CARD_INTEL_I915GM;
+    if (strstr(gl_renderer, "915G")) return CARD_INTEL_I915G;
+    if (strstr(gl_renderer, "865G")) return CARD_INTEL_I865G;
+    if (strstr(gl_renderer, "855G")) return CARD_INTEL_I855G;
+    if (strstr(gl_renderer, "830G")) return CARD_INTEL_I830G;
+    return CARD_INTEL_I915G;
+
+}
+
+static enum wined3d_pci_device select_card_ati_mesa(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+    /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+     *
+     * Beware: renderer string do not match exact card model,
+     * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
+    if (strstr(gl_renderer, "Gallium"))
+    {
+        /* Radeon R7xx HD4800 - highend */
+        if (strstr(gl_renderer, "R700")          /* Radeon R7xx HD48xx generic renderer string */
+                || strstr(gl_renderer, "RV770")  /* Radeon RV770 */
+                || strstr(gl_renderer, "RV790"))  /* Radeon RV790 */
+        {
+            *vidmem = 512; /* note: HD4890 cards use 1024MB */
+            return CARD_ATI_RADEON_HD4800;
+        }
+
+        /* Radeon R740 HD4700 - midend */
+        if (strstr(gl_renderer, "RV740"))          /* Radeon RV740 */
+        {
+            *vidmem = 512;
+            return CARD_ATI_RADEON_HD4700;
+        }
+
+        /* Radeon R730 HD4600 - midend */
+        if (strstr(gl_renderer, "RV730"))        /* Radeon RV730 */
+        {
+            *vidmem = 512;
+            return CARD_ATI_RADEON_HD4600;
+        }
+
+        /* Radeon R710 HD4500/HD4350 - lowend */
+        if (strstr(gl_renderer, "RV710"))          /* Radeon RV710 */
+        {
+            *vidmem = 256;
+            return CARD_ATI_RADEON_HD4350;
+        }
+
+        /* Radeon R6xx HD2900/HD3800 - highend */
+        if (strstr(gl_renderer, "R600")
+                || strstr(gl_renderer, "RV670")
+                || strstr(gl_renderer, "R680"))
+        {
+            *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+            return CARD_ATI_RADEON_HD2900;
+        }
+
+        /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+        if (strstr(gl_renderer, "RV630")
+                || strstr(gl_renderer, "RV635"))
+        {
+            *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+            return CARD_ATI_RADEON_HD2600;
+        }
+
+        /* Radeon R6xx HD2350/HD2400/HD3400 - lowend */
+        if (strstr(gl_renderer, "RV610")
+                || strstr(gl_renderer, "RV620"))
+        {
+            *vidmem = 256; /* HD2350/2400 use 256MB, HD34xx use 256-512MB */
+            return CARD_ATI_RADEON_HD2350;
+        }
+
+        /* Radeon R6xx/R7xx integrated */
+        if (strstr(gl_renderer, "RS780")
+                || strstr(gl_renderer, "RS880"))
+        {
+            *vidmem = 128; /* 128MB */
+            return CARD_ATI_RADEON_HD3200;
+        }
+
+        /* Radeon R5xx */
+        if (strstr(gl_renderer, "RV530")
+                || strstr(gl_renderer, "RV535")
+                || strstr(gl_renderer, "RV560")
+                || strstr(gl_renderer, "R520")
+                || strstr(gl_renderer, "RV570")
+                || strstr(gl_renderer, "R580"))
+        {
+            *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
+            return CARD_ATI_RADEON_X1600;
+        }
+
+        /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300 (lowend R5xx) */
+        if (strstr(gl_renderer, "R410")
+                || strstr(gl_renderer, "R420")
+                || strstr(gl_renderer, "R423")
+                || strstr(gl_renderer, "R430")
+                || strstr(gl_renderer, "R480")
+                || strstr(gl_renderer, "R481")
+                || strstr(gl_renderer, "RV410")
+                || strstr(gl_renderer, "RV515")
+                || strstr(gl_renderer, "RV516"))
+        {
+            *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
+            return CARD_ATI_RADEON_X700;
+        }
+
+        /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
+        if (strstr(gl_renderer, "RS400")
+                || strstr(gl_renderer, "RS480")
+                || strstr(gl_renderer, "RS482")
+                || strstr(gl_renderer, "RS485")
+                || strstr(gl_renderer, "RS600")
+                || strstr(gl_renderer, "RS690")
+                || strstr(gl_renderer, "RS740"))
+        {
+            *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
+            return CARD_ATI_RADEON_XPRESS_200M;
+        }
+
+        /* Radeon R3xx */
+        if (strstr(gl_renderer, "R300")
+                || strstr(gl_renderer, "RV350")
+                || strstr(gl_renderer, "RV351")
+                || strstr(gl_renderer, "RV360")
+                || strstr(gl_renderer, "RV370")
+                || strstr(gl_renderer, "R350")
+                || strstr(gl_renderer, "R360"))
+        {
+            *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
+            return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
+        }
+    }
+
+    if (WINE_D3D9_CAPABLE(gl_info))
+    {
+        /* Radeon R7xx HD4800 - highend */
+        if (strstr(gl_renderer, "(R700")          /* Radeon R7xx HD48xx generic renderer string */
+                || strstr(gl_renderer, "(RV770")  /* Radeon RV770 */
+                || strstr(gl_renderer, "(RV790"))  /* Radeon RV790 */
+        {
+            *vidmem = 512; /* note: HD4890 cards use 1024MB */
+            return CARD_ATI_RADEON_HD4800;
+        }
+
+        /* Radeon R740 HD4700 - midend */
+        if (strstr(gl_renderer, "(RV740"))          /* Radeon RV740 */
+        {
+            *vidmem = 512;
+            return CARD_ATI_RADEON_HD4700;
+        }
+
+        /* Radeon R730 HD4600 - midend */
+        if (strstr(gl_renderer, "(RV730"))        /* Radeon RV730 */
+        {
+            *vidmem = 512;
+            return CARD_ATI_RADEON_HD4600;
+        }
+
+        /* Radeon R710 HD4500/HD4350 - lowend */
+        if (strstr(gl_renderer, "(RV710"))          /* Radeon RV710 */
+        {
+            *vidmem = 256;
+            return CARD_ATI_RADEON_HD4350;
+        }
+
+        /* Radeon R6xx HD2900/HD3800 - highend */
+        if (strstr(gl_renderer, "(R600")
+                || strstr(gl_renderer, "(RV670")
+                || strstr(gl_renderer, "(R680"))
+        {
+            *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+            return CARD_ATI_RADEON_HD2900;
+        }
+
+        /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+        if (strstr(gl_renderer, "(RV630")
+                || strstr(gl_renderer, "(RV635"))
+        {
+            *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+            return CARD_ATI_RADEON_HD2600;
+        }
+
+        /* Radeon R6xx HD2300/HD2400/HD3400 - lowend */
+        if (strstr(gl_renderer, "(RV610")
+                || strstr(gl_renderer, "(RV620"))
+        {
+            *vidmem = 256; /* HD2350/2400 use 256MB, HD34xx use 256-512MB */
+            return CARD_ATI_RADEON_HD2350;
+        }
+
+        /* Radeon R6xx/R7xx integrated */
+        if (strstr(gl_renderer, "(RS780")
+                || strstr(gl_renderer, "(RS880"))
+        {
+            *vidmem = 128; /* 128MB */
+            return CARD_ATI_RADEON_HD3200;
+        }
+    }
+
+    if (WINE_D3D8_CAPABLE(gl_info))
+    {
+        *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
+        return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
+    }
+
+    if (WINE_D3D7_CAPABLE(gl_info))
+    {
+        *vidmem = 32; /* There are models with up to 64MB */
+        return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
+    }
+
+    *vidmem = 16; /* There are 16-32MB models */
+    return CARD_ATI_RAGE_128PRO;
+
+}
+
+static enum wined3d_pci_device select_card_nvidia_mesa(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+    FIXME_(d3d_caps)("Card selection not handled for Mesa Nouveau driver\n");
+#ifndef VBOX_WITH_WDDM
+    if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
+#else
+    /* tmp work around to disable quirk_no_np2 quirk for mesa drivers */
+    if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE_6200;
+#endif
+    if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
+    if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
+    if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
+    return CARD_NVIDIA_RIVA_128;
+}
+
+static enum wined3d_pci_device select_card_intel_cmn(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+    if (strstr(gl_renderer, "HD Graphics")
+            || strstr(gl_renderer, "Sandybridge"))
+        return CARD_INTEL_SBHD;
+    FIXME_(d3d_caps)("Card selection not handled for Windows Intel driver\n");
+    return CARD_INTEL_I915G;
+}
+
+static enum wined3d_pci_device select_card_intel_mesa(const struct wined3d_gl_info *gl_info,
+        const char *gl_renderer, unsigned int *vidmem)
+{
+    return select_card_intel_cmn(gl_info, gl_renderer, vidmem);
+}
+
+struct vendor_card_selection
+{
+    enum wined3d_gl_vendor gl_vendor;
+    enum wined3d_pci_vendor card_vendor;
+    const char *description;        /* Description of the card selector i.e. Apple OS/X Intel */
+    enum wined3d_pci_device (*select_card)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+            unsigned int *vidmem );
+};
+
+static const struct vendor_card_selection vendor_card_select_table[] =
+{
+    {GL_VENDOR_NVIDIA, HW_VENDOR_NVIDIA,  "Nvidia binary driver",     select_card_nvidia_binary},
+    {GL_VENDOR_APPLE,  HW_VENDOR_NVIDIA,  "Apple OSX NVidia binary driver",   select_card_nvidia_binary},
+    {GL_VENDOR_APPLE,  HW_VENDOR_ATI,     "Apple OSX AMD/ATI binary driver",  select_card_ati_binary},
+    {GL_VENDOR_APPLE,  HW_VENDOR_INTEL,   "Apple OSX Intel binary driver",    select_card_intel_binary},
+    {GL_VENDOR_FGLRX,  HW_VENDOR_ATI,     "AMD/ATI binary driver",    select_card_ati_binary},
+    {GL_VENDOR_MESA,   HW_VENDOR_ATI,     "Mesa AMD/ATI driver",      select_card_ati_mesa},
+    {GL_VENDOR_MESA,   HW_VENDOR_NVIDIA,  "Mesa Nouveau driver",      select_card_nvidia_mesa},
+    {GL_VENDOR_MESA,   HW_VENDOR_INTEL,   "Mesa Intel driver",        select_card_intel_mesa},
+    {GL_VENDOR_INTEL,  HW_VENDOR_INTEL,   "Windows Intel binary driver",  select_card_intel_cmn}
+};
+
+
+static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+        enum wined3d_gl_vendor *gl_vendor, enum wined3d_pci_vendor *card_vendor, unsigned int *vidmem)
+{
+    /* Above is a list of Nvidia and ATI GPUs. Both vendors have dozens of
+     * different GPUs with roughly the same features. In most cases GPUs from a
+     * certain family differ in clockspeeds, the amount of video memory and the
+     * number of shader pipelines.
+     *
+     * A Direct3D device object contains the PCI id (vendor + device) of the
+     * videocard which is used for rendering. Various applications use this
+     * information to get a rough estimation of the features of the card and
+     * some might use it for enabling 3d effects only on certain types of
+     * videocards. In some cases games might even use it to work around bugs
+     * which happen on certain videocards/driver combinations. The problem is
+     * that OpenGL only exposes a rendering string containing the name of the
+     * videocard and not the PCI id.
+     *
+     * Various games depend on the PCI id, so somehow we need to provide one.
+     * A simple option is to parse the renderer string and translate this to
+     * the right PCI id. This is a lot of work because there are more than 200
+     * GPUs just for Nvidia. Various cards share the same renderer string, so
+     * the amount of code might be 'small' but there are quite a number of
+     * exceptions which would make this a pain to maintain. Another way would
+     * be to query the PCI id from the operating system (assuming this is the
+     * videocard which is used for rendering which is not always the case).
+     * This would work but it is not very portable. Second it would not work
+     * well in, let's say, a remote X situation in which the amount of 3d
+     * features which can be used is limited.
+     *
+     * As said most games only use the PCI id to get an indication of the
+     * capabilities of the card. It doesn't really matter if the given id is
+     * the correct one if we return the id of a card with similar 3d features.
+     *
+     * The code below checks the OpenGL capabilities of a videocard and matches
+     * that to a certain level of Direct3D functionality. Once a card passes
+     * the Direct3D9 check, we know that the card (in case of Nvidia) is at
+     * least a GeforceFX. To give a better estimate we do a basic check on the
+     * renderer string but if that won't pass we return a default card. This
+     * way is better than maintaining a full card database as even without a
+     * full database we can return a card with similar features. Second the
+     * size of the database can be made quite small because when you know what
+     * type of 3d functionality a card has, you know to which GPU family the
+     * GPU must belong. Because of this you only have to check a small part of
+     * the renderer string to distinguishes between different models from that
+     * family.
+     *
+     * The code also selects a default amount of video memory which we will
+     * use for an estimation of the amount of free texture memory. In case of
+     * real D3D the amount of texture memory includes video memory and system
+     * memory (to be specific AGP memory or in case of PCIE TurboCache /
+     * HyperMemory). We don't know how much system memory can be addressed by
+     * the system but we can make a reasonable estimation about the amount of
+     * video memory. If the value is slightly wrong it doesn't matter as we
+     * didn't include AGP-like memory which makes the amount of addressable
+     * memory higher and second OpenGL isn't that critical it moves to system
+     * memory behind our backs if really needed. Note that the amount of video
+     * memory can be overruled using a registry setting. */
+
+    int i;
+
+    for (i = 0; i < (sizeof(vendor_card_select_table) / sizeof(*vendor_card_select_table)); ++i)
+    {
+        if ((vendor_card_select_table[i].gl_vendor != *gl_vendor)
+            || (vendor_card_select_table[i].card_vendor != *card_vendor))
+                continue;
+        TRACE_(d3d_caps)("Applying card_selector \"%s\".\n", vendor_card_select_table[i].description);
+        return vendor_card_select_table[i].select_card(gl_info, gl_renderer, vidmem);
+    }
+
+    FIXME_(d3d_caps)("No card selector available for GL vendor %d and card vendor %04x.\n",
+                     *gl_vendor, *card_vendor);
+
+    /* Default to generic Nvidia hardware based on the supported OpenGL extensions. The choice
+     * for Nvidia was because the hardware and drivers they make are of good quality. This makes
+     * them a good generic choice. */
+    *card_vendor = HW_VENDOR_NVIDIA;
+#ifndef VBOX_WITH_WDDM
+    if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
+#else
+    /* tmp work around to disable quirk_no_np2 quirk for not-recognized drivers */
+    if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE_6200;
+#endif
+
+    if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
+    if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
+    if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
+    return CARD_NVIDIA_RIVA_128;
+}
+
+#ifndef VBOX_WITH_VMSVGA
+static const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter)
+{
+    const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+    int vs_selected_mode, ps_selected_mode;
+
+    select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+    if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+            && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_fragment_pipeline;
+    else if (ps_selected_mode == SHADER_ATI) return &atifs_fragment_pipeline;
+    else if (gl_info->supported[NV_REGISTER_COMBINERS]
+            && gl_info->supported[NV_TEXTURE_SHADER2]) return &nvts_fragment_pipeline;
+    else if (gl_info->supported[NV_REGISTER_COMBINERS]) return &nvrc_fragment_pipeline;
+    else return &ffp_fragment_pipeline;
+}
+#endif
+
+static const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter)
+{
+    int vs_selected_mode, ps_selected_mode;
+
+    select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
+    if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) return &glsl_shader_backend;
+#ifndef VBOX_WITH_VMSVGA
+    if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) return &arb_program_shader_backend;
+#endif
+    return &none_shader_backend;
+}
+
+#ifndef VBOX_WITH_VMSVGA
+static const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter)
+{
+    const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+    int vs_selected_mode, ps_selected_mode;
+
+    select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+    if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+            && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit;
+    else return &ffp_blit;
+}
+#endif
+
+/* Context activation is done by the caller. */
+BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter)
+{
+    struct wined3d_driver_info *driver_info = &adapter->driver_info;
+    struct wined3d_gl_info *gl_info = &adapter->gl_info;
+    const char *GL_Extensions    = NULL;
+    const char *WGL_Extensions   = NULL;
+    const char *gl_vendor_str, *gl_renderer_str, *gl_version_str;
+    struct fragment_caps fragment_caps;
+    enum wined3d_gl_vendor gl_vendor;
+    enum wined3d_pci_vendor card_vendor;
+    enum wined3d_pci_device device;
+    GLint       gl_max;
+    GLfloat     gl_floatv[2];
+    unsigned    i;
+    HDC         hdc;
+    unsigned int vidmem=0;
+    DWORD gl_version;
+    size_t len;
+
+    TRACE_(d3d_caps)("(%p)\n", gl_info);
+
+    ENTER_GL();
+
+    gl_renderer_str = (const char *)glGetString(GL_RENDERER);
+    TRACE_(d3d_caps)("GL_RENDERER: %s.\n", debugstr_a(gl_renderer_str));
+    if (!gl_renderer_str)
+    {
+        LEAVE_GL();
+        ERR_(d3d_caps)("Received a NULL GL_RENDERER.\n");
+        return FALSE;
+    }
+
+    gl_vendor_str = (const char *)glGetString(GL_VENDOR);
+    TRACE_(d3d_caps)("GL_VENDOR: %s.\n", debugstr_a(gl_vendor_str));
+    if (!gl_vendor_str)
+    {
+        LEAVE_GL();
+        ERR_(d3d_caps)("Received a NULL GL_VENDOR.\n");
+        return FALSE;
+    }
+
+    /* Parse the GL_VERSION field into major and minor information */
+    gl_version_str = (const char *)glGetString(GL_VERSION);
+    TRACE_(d3d_caps)("GL_VERSION: %s.\n", debugstr_a(gl_version_str));
+    if (!gl_version_str)
+    {
+        LEAVE_GL();
+        ERR_(d3d_caps)("Received a NULL GL_VERSION.\n");
+        return FALSE;
+    }
+    gl_version = wined3d_parse_gl_version(gl_version_str);
+
+    /*
+     * Initialize openGL extension related variables
+     *  with Default values
+     */
+    memset(gl_info->supported, 0, sizeof(gl_info->supported));
+    gl_info->limits.blends = 1;
+    gl_info->limits.buffers = 1;
+    gl_info->limits.textures = 1;
+    gl_info->limits.fragment_samplers = 1;
+    gl_info->limits.vertex_samplers = 0;
+    gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers + gl_info->limits.vertex_samplers;
+    gl_info->limits.sampler_stages = 1;
+    gl_info->limits.glsl_vs_float_constants = 0;
+    gl_info->limits.glsl_ps_float_constants = 0;
+    gl_info->limits.arb_vs_float_constants = 0;
+    gl_info->limits.arb_vs_native_constants = 0;
+    gl_info->limits.arb_vs_instructions = 0;
+    gl_info->limits.arb_vs_temps = 0;
+    gl_info->limits.arb_ps_float_constants = 0;
+    gl_info->limits.arb_ps_local_constants = 0;
+    gl_info->limits.arb_ps_instructions = 0;
+    gl_info->limits.arb_ps_temps = 0;
+
+    /* Retrieve opengl defaults */
+    glGetIntegerv(GL_MAX_CLIP_PLANES, &gl_max);
+    gl_info->limits.clipplanes = min(WINED3DMAXUSERCLIPPLANES, gl_max);
+    TRACE_(d3d_caps)("ClipPlanes support - num Planes=%d\n", gl_max);
+
+    glGetIntegerv(GL_MAX_LIGHTS, &gl_max);
+    gl_info->limits.lights = gl_max;
+    TRACE_(d3d_caps)("Lights support - max lights=%d\n", gl_max);
+
+    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_max);
+    gl_info->limits.texture_size = gl_max;
+    TRACE_(d3d_caps)("Maximum texture size support - max texture size=%d\n", gl_max);
+
+    glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, gl_floatv);
+    gl_info->limits.pointsize_min = gl_floatv[0];
+    gl_info->limits.pointsize_max = gl_floatv[1];
+    TRACE_(d3d_caps)("Maximum point size support - max point size=%f\n", gl_floatv[1]);
+
+    /* Parse the gl supported features, in theory enabling parts of our code appropriately. */
+    GL_Extensions = (const char *)glGetString(GL_EXTENSIONS);
+    if (!GL_Extensions)
+    {
+        LEAVE_GL();
+        ERR_(d3d_caps)("Received a NULL GL_EXTENSIONS.\n");
+        return FALSE;
+    }
+
+    LEAVE_GL();
+
+    TRACE_(d3d_caps)("GL_Extensions reported:\n");
+
+    gl_info->supported[WINED3D_GL_EXT_NONE] = TRUE;
+
+    gl_info->supported[VBOX_SHARED_CONTEXTS] = TRUE;
+
+    while (*GL_Extensions)
+    {
+        const char *start;
+        char current_ext[256];
+
+        while (isspace(*GL_Extensions)) ++GL_Extensions;
+        start = GL_Extensions;
+        while (!isspace(*GL_Extensions) && *GL_Extensions) ++GL_Extensions;
+
+        len = GL_Extensions - start;
+        if (!len || len >= sizeof(current_ext)) continue;
+
+        memcpy(current_ext, start, len);
+        current_ext[len] = '\0';
+        TRACE_(d3d_caps)("- %s\n", debugstr_a(current_ext));
+
+        for (i = 0; i < (sizeof(EXTENSION_MAP) / sizeof(*EXTENSION_MAP)); ++i)
+        {
+            if (!strcmp(current_ext, EXTENSION_MAP[i].extension_string))
+            {
+                TRACE_(d3d_caps)(" FOUND: %s support.\n", EXTENSION_MAP[i].extension_string);
+                gl_info->supported[EXTENSION_MAP[i].extension] = TRUE;
+                break;
+            }
+        }
+    }
+
+#ifdef VBOX_WITH_VMSVGA
+# ifdef RT_OS_WINDOWS
+# define OGLGETPROCADDRESS       wglGetProcAddress
+# elif RT_OS_DARWIN
+extern void (*MyNSGLGetProcAddress(const char *name))(void);
+# define OGLGETPROCADDRESS       MyNSGLGetProcAddress
+# else
+extern void (*glXGetProcAddress(const GLubyte *procname))( void );
+# define OGLGETPROCADDRESS(x)    glXGetProcAddress((const GLubyte *)x)
+# endif
+#endif
+
+    /* Now work out what GL support this card really has */
+#define USE_GL_FUNC(type, pfn, ext, replace) \
+{ \
+    DWORD ver = ver_for_ext(ext); \
+    if (gl_info->supported[ext]) gl_info->pfn = (type)OGLGETPROCADDRESS(#pfn); \
+    else if (ver && ver <= gl_version) gl_info->pfn = (type)OGLGETPROCADDRESS(#replace); \
+    else gl_info->pfn = NULL; \
+}
+    GL_EXT_FUNCS_GEN;
+#undef USE_GL_FUNC
+
+#ifndef VBOX_WITH_VMSVGA
+#define USE_GL_FUNC(type, pfn, ext, replace) gl_info->pfn = (type)OGLGETPROCADDRESS(#pfn);
+    WGL_EXT_FUNCS_GEN;
+#undef USE_GL_FUNC
+#endif
+
+    ENTER_GL();
+
+    /* Now mark all the extensions supported which are included in the opengl core version. Do this *after*
+     * loading the functions, otherwise the code above will load the extension entry points instead of the
+     * core functions, which may not work. */
+    for (i = 0; i < (sizeof(EXTENSION_MAP) / sizeof(*EXTENSION_MAP)); ++i)
+    {
+        if (!gl_info->supported[EXTENSION_MAP[i].extension]
+                && EXTENSION_MAP[i].version <= gl_version && EXTENSION_MAP[i].version)
+        {
+            TRACE_(d3d_caps)(" GL CORE: %s support.\n", EXTENSION_MAP[i].extension_string);
+            gl_info->supported[EXTENSION_MAP[i].extension] = TRUE;
+        }
+    }
+
+    if (gl_info->supported[APPLE_FENCE])
+    {
+        /* GL_NV_fence and GL_APPLE_fence provide the same functionality basically.
+         * The apple extension interacts with some other apple exts. Disable the NV
+         * extension if the apple one is support to prevent confusion in other parts
+         * of the code. */
+        gl_info->supported[NV_FENCE] = FALSE;
+    }
+    if (gl_info->supported[APPLE_FLOAT_PIXELS])
+    {
+        /* GL_APPLE_float_pixels == GL_ARB_texture_float + GL_ARB_half_float_pixel
+         *
+         * The enums are the same:
+         * GL_RGBA16F_ARB     = GL_RGBA_FLOAT16_APPLE = 0x881A
+         * GL_RGB16F_ARB      = GL_RGB_FLOAT16_APPLE  = 0x881B
+         * GL_RGBA32F_ARB     = GL_RGBA_FLOAT32_APPLE = 0x8814
+         * GL_RGB32F_ARB      = GL_RGB_FLOAT32_APPLE  = 0x8815
+         * GL_HALF_FLOAT_ARB  = GL_HALF_APPLE         = 0x140B
+         */
+        if (!gl_info->supported[ARB_TEXTURE_FLOAT])
+        {
+            TRACE_(d3d_caps)(" IMPLIED: GL_ARB_texture_float support(from GL_APPLE_float_pixels.\n");
+            gl_info->supported[ARB_TEXTURE_FLOAT] = TRUE;
+        }
+        if (!gl_info->supported[ARB_HALF_FLOAT_PIXEL])
+        {
+            TRACE_(d3d_caps)(" IMPLIED: GL_ARB_half_float_pixel support(from GL_APPLE_float_pixels.\n");
+            gl_info->supported[ARB_HALF_FLOAT_PIXEL] = TRUE;
+        }
+    }
+    if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
+    {
+        /* GL_ARB_map_buffer_range and GL_APPLE_flush_buffer_range provide the same
+         * functionality. Prefer the ARB extension */
+        gl_info->supported[APPLE_FLUSH_BUFFER_RANGE] = FALSE;
+    }
+    if (gl_info->supported[ARB_TEXTURE_CUBE_MAP])
+    {
+        TRACE_(d3d_caps)(" IMPLIED: NVIDIA (NV) Texture Gen Reflection support.\n");
+        gl_info->supported[NV_TEXGEN_REFLECTION] = TRUE;
+    }
+    if (!gl_info->supported[ARB_DEPTH_CLAMP] && gl_info->supported[NV_DEPTH_CLAMP])
+    {
+        TRACE_(d3d_caps)(" IMPLIED: ARB_depth_clamp support (by NV_depth_clamp).\n");
+        gl_info->supported[ARB_DEPTH_CLAMP] = TRUE;
+    }
+    if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] && gl_info->supported[EXT_VERTEX_ARRAY_BGRA])
+    {
+        TRACE_(d3d_caps)(" IMPLIED: ARB_vertex_array_bgra support (by EXT_vertex_array_bgra).\n");
+        gl_info->supported[ARB_VERTEX_ARRAY_BGRA] = TRUE;
+    }
+    if (gl_info->supported[NV_TEXTURE_SHADER2])
+    {
+        if (gl_info->supported[NV_REGISTER_COMBINERS])
+        {
+            /* Also disable ATI_FRAGMENT_SHADER if register combiners and texture_shader2
+             * are supported. The nv extensions provide the same functionality as the
+             * ATI one, and a bit more(signed pixelformats). */
+            gl_info->supported[ATI_FRAGMENT_SHADER] = FALSE;
+        }
+    }
+
+    if (gl_info->supported[NV_REGISTER_COMBINERS])
+    {
+        glGetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &gl_max);
+        gl_info->limits.general_combiners = gl_max;
+        TRACE_(d3d_caps)("Max general combiners: %d.\n", gl_max);
+    }
+    if (gl_info->supported[ARB_DRAW_BUFFERS])
+    {
+        glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &gl_max);
+        gl_info->limits.buffers = gl_max;
+        TRACE_(d3d_caps)("Max draw buffers: %u.\n", gl_max);
+    }
+    if (gl_info->supported[ARB_MULTITEXTURE])
+    {
+        glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &gl_max);
+        gl_info->limits.textures = min(MAX_TEXTURES, gl_max);
+        TRACE_(d3d_caps)("Max textures: %d.\n", gl_info->limits.textures);
+
+        if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
+        {
+            GLint tmp;
+            glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &tmp);
+            gl_info->limits.fragment_samplers = min(MAX_FRAGMENT_SAMPLERS, tmp);
+        }
+        else
+        {
+            gl_info->limits.fragment_samplers = max(gl_info->limits.fragment_samplers, gl_max);
+        }
+        TRACE_(d3d_caps)("Max fragment samplers: %d.\n", gl_info->limits.fragment_samplers);
+
+        if (gl_info->supported[ARB_VERTEX_SHADER])
+        {
+            GLint tmp;
+            glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, &tmp);
+            gl_info->limits.vertex_samplers = tmp;
+            glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &tmp);
+            gl_info->limits.combined_samplers = tmp;
+
+            /* Loading GLSL sampler uniforms is much simpler if we can assume that the sampler setup
+             * is known at shader link time. In a vertex shader + pixel shader combination this isn't
+             * an issue because then the sampler setup only depends on the two shaders. If a pixel
+             * shader is used with fixed function vertex processing we're fine too because fixed function
+             * vertex processing doesn't use any samplers. If fixed function fragment processing is
+             * used we have to make sure that all vertex sampler setups are valid together with all
+             * possible fixed function fragment processing setups. This is true if vsamplers + MAX_TEXTURES
+             * <= max_samplers. This is true on all d3d9 cards that support vtf(gf 6 and gf7 cards).
+             * dx9 radeon cards do not support vertex texture fetch. DX10 cards have 128 samplers, and
+             * dx9 is limited to 8 fixed function texture stages and 4 vertex samplers. DX10 does not have
+             * a fixed function pipeline anymore.
+             *
+             * So this is just a check to check that our assumption holds true. If not, write a warning
+             * and reduce the number of vertex samplers or probably disable vertex texture fetch. */
+            if (gl_info->limits.vertex_samplers && gl_info->limits.combined_samplers < 12
+                    && MAX_TEXTURES + gl_info->limits.vertex_samplers > gl_info->limits.combined_samplers)
+            {
+                FIXME("OpenGL implementation supports %u vertex samplers and %u total samplers.\n",
+                        gl_info->limits.vertex_samplers, gl_info->limits.combined_samplers);
+                FIXME("Expected vertex samplers + MAX_TEXTURES(=8) > combined_samplers.\n");
+                if (gl_info->limits.combined_samplers > MAX_TEXTURES)
+                    gl_info->limits.vertex_samplers = gl_info->limits.combined_samplers - MAX_TEXTURES;
+                else
+                    gl_info->limits.vertex_samplers = 0;
+            }
+        }
+        else
+        {
+            gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers;
+        }
+        TRACE_(d3d_caps)("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
+        TRACE_(d3d_caps)("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
+    }
+    if (gl_info->supported[ARB_VERTEX_BLEND])
+    {
+        glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
+        gl_info->limits.blends = gl_max;
+        TRACE_(d3d_caps)("Max blends: %u.\n", gl_info->limits.blends);
+    }
+    if (gl_info->supported[EXT_TEXTURE3D])
+    {
+        glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &gl_max);
+        gl_info->limits.texture3d_size = gl_max;
+        TRACE_(d3d_caps)("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
+    }
+    if (gl_info->supported[EXT_TEXTURE_FILTER_ANISOTROPIC])
+    {
+        glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max);
+        gl_info->limits.anisotropy = gl_max;
+        TRACE_(d3d_caps)("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
+    }
+    if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
+    {
+        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
+        gl_info->limits.arb_ps_float_constants = gl_max;
+        TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
+        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
+        gl_info->limits.arb_ps_native_constants = gl_max;
+        TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
+                gl_info->limits.arb_ps_native_constants);
+        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
+        gl_info->limits.arb_ps_temps = gl_max;
+        TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
+        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
+        gl_info->limits.arb_ps_instructions = gl_max;
+        TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
+        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &gl_max));
+        gl_info->limits.arb_ps_local_constants = gl_max;
+        TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
+    }
+    if (gl_info->supported[ARB_VERTEX_PROGRAM])
+    {
+        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
+        gl_info->limits.arb_vs_float_constants = gl_max;
+        TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
+        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
+        gl_info->limits.arb_vs_native_constants = gl_max;
+        TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
+                gl_info->limits.arb_vs_native_constants);
+        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
+        gl_info->limits.arb_vs_temps = gl_max;
+        TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
+        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
+        gl_info->limits.arb_vs_instructions = gl_max;
+        TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
+#ifndef VBOX_WITH_VMSVGA
+        if (test_arb_vs_offset_limit(gl_info)) gl_info->quirks |= WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT;
+#endif
+    }
+    if (gl_info->supported[ARB_VERTEX_SHADER])
+    {
+        glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max);
+        gl_info->limits.glsl_vs_float_constants = gl_max / 4;
+#ifdef VBOX_WITH_WDDM
+        /* AFAICT the " / 4" here comes from that we're going to use the glsl_vs/ps_float_constants to create vec4 arrays,
+         * thus each array element has 4 components, so the actual number of vec4 arrays is GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+         * win8 Aero won't properly work with this constant < 256 in any way,
+         * while Intel drivers I've encountered this problem with supports vec4 arrays of size >  GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+         * so use it here.
+         * @todo: add logging
+         * @todo: perhaps should be movet to quirks?
+         * */
+        if (gl_info->limits.glsl_vs_float_constants < 256 && gl_max >= 256)
+        {
+            DWORD dwVersion = GetVersion();
+            DWORD dwMajor = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+            DWORD dwMinor = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+            /* tmp workaround Win8 Aero requirement for 256 */
+            if (dwMajor > 6 || dwMinor > 1)
+            {
+                gl_info->limits.glsl_vs_float_constants = 256;
+            }
+        }
+#endif
+        TRACE_(d3d_caps)("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
+    }
+    if (gl_info->supported[ARB_FRAGMENT_SHADER])
+    {
+        glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max);
+        gl_info->limits.glsl_ps_float_constants = gl_max / 4;
+#ifdef VBOX_WITH_WDDM
+        /* AFAICT the " / 4" here comes from that we're going to use the glsl_vs/ps_float_constants to create vec4 arrays,
+         * thus each array element has 4 components, so the actual number of vec4 arrays is GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+         * win8 Aero won't properly work with this constant < 256 in any way,
+         * while Intel drivers I've encountered this problem with supports vec4 arrays of size >  GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+         * so use it here.
+         * @todo: add logging
+         * @todo: perhaps should be movet to quirks?
+         * */
+        if (gl_info->limits.glsl_ps_float_constants < 256 && gl_max >= 256)
+        {
+            DWORD dwVersion = GetVersion();
+            DWORD dwMajor = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+            DWORD dwMinor = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+            /* tmp workaround Win8 Aero requirement for 256 */
+            if (dwMajor > 6 || dwMinor > 1)
+            {
+                gl_info->limits.glsl_ps_float_constants = 256;
+            }
+        }
+#endif
+        TRACE_(d3d_caps)("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
+        glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max);
+        gl_info->limits.glsl_varyings = gl_max;
+        TRACE_(d3d_caps)("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
+    }
+    if (gl_info->supported[ARB_SHADING_LANGUAGE_100])
+    {
+        const char *str = (const char *)glGetString(GL_SHADING_LANGUAGE_VERSION_ARB);
+        unsigned int major, minor;
+
+        TRACE_(d3d_caps)("GLSL version string: %s.\n", debugstr_a(str));
+
+        /* The format of the GLSL version string is "major.minor[.release] [vendor info]". */
+        sscanf(str, "%u.%u", &major, &minor);
+        gl_info->glsl_version = MAKEDWORD_VERSION(major, minor);
+    }
+    if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])
+    {
+        glGetFloatv(GL_MAX_SHININESS_NV, &gl_info->limits.shininess);
+    }
+    else
+    {
+        gl_info->limits.shininess = 128.0f;
+    }
+    if (gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO])
+    {
+        /* If we have full NP2 texture support, disable
+         * GL_ARB_texture_rectangle because we will never use it.
+         * This saves a few redundant glDisable calls. */
+        gl_info->supported[ARB_TEXTURE_RECTANGLE] = FALSE;
+    }
+    if (gl_info->supported[ATI_FRAGMENT_SHADER])
+    {
+        /* Disable NV_register_combiners and fragment shader if this is supported.
+         * generally the NV extensions are preferred over the ATI ones, and this
+         * extension is disabled if register_combiners and texture_shader2 are both
+         * supported. So we reach this place only if we have incomplete NV dxlevel 8
+         * fragment processing support. */
+        gl_info->supported[NV_REGISTER_COMBINERS] = FALSE;
+        gl_info->supported[NV_REGISTER_COMBINERS2] = FALSE;
+        gl_info->supported[NV_TEXTURE_SHADER] = FALSE;
+        gl_info->supported[NV_TEXTURE_SHADER2] = FALSE;
+    }
+    if (gl_info->supported[NV_HALF_FLOAT])
+    {
+        /* GL_ARB_half_float_vertex is a subset of GL_NV_half_float. */
+        gl_info->supported[ARB_HALF_FLOAT_VERTEX] = TRUE;
+    }
+    if (gl_info->supported[ARB_POINT_SPRITE])
+    {
+        gl_info->limits.point_sprite_units = gl_info->limits.textures;
+    }
+    else
+    {
+        gl_info->limits.point_sprite_units = 0;
+    }
+#ifndef VBOX_WITH_VMSVGA
+    checkGLcall("extension detection");
+#endif
+    LEAVE_GL();
+
+#ifndef VBOX_WITH_VMSVGA
+    adapter->fragment_pipe = select_fragment_implementation(adapter);
+#endif
+    adapter->shader_backend = select_shader_backend(adapter);
+#ifndef VBOX_WITH_VMSVGA
+    adapter->blitter = select_blit_implementation(adapter);
+
+    adapter->fragment_pipe->get_caps(gl_info, &fragment_caps);
+    gl_info->limits.texture_stages = fragment_caps.MaxTextureBlendStages;
+    TRACE_(d3d_caps)("Max texture stages: %u.\n", gl_info->limits.texture_stages);
+
+    /* In some cases the number of texture stages can be larger than the number
+     * of samplers. The GF4 for example can use only 2 samplers (no fragment
+     * shaders), but 8 texture stages (register combiners). */
+    gl_info->limits.sampler_stages = max(gl_info->limits.fragment_samplers, gl_info->limits.texture_stages);
+#endif
+
+    if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT])
+    {
+        gl_info->fbo_ops.glIsRenderbuffer = gl_info->glIsRenderbuffer;
+        gl_info->fbo_ops.glBindRenderbuffer = gl_info->glBindRenderbuffer;
+        gl_info->fbo_ops.glDeleteRenderbuffers = gl_info->glDeleteRenderbuffers;
+        gl_info->fbo_ops.glGenRenderbuffers = gl_info->glGenRenderbuffers;
+        gl_info->fbo_ops.glRenderbufferStorage = gl_info->glRenderbufferStorage;
+        gl_info->fbo_ops.glRenderbufferStorageMultisample = gl_info->glRenderbufferStorageMultisample;
+        gl_info->fbo_ops.glGetRenderbufferParameteriv = gl_info->glGetRenderbufferParameteriv;
+        gl_info->fbo_ops.glIsFramebuffer = gl_info->glIsFramebuffer;
+        gl_info->fbo_ops.glBindFramebuffer = gl_info->glBindFramebuffer;
+        gl_info->fbo_ops.glDeleteFramebuffers = gl_info->glDeleteFramebuffers;
+        gl_info->fbo_ops.glGenFramebuffers = gl_info->glGenFramebuffers;
+        gl_info->fbo_ops.glCheckFramebufferStatus = gl_info->glCheckFramebufferStatus;
+        gl_info->fbo_ops.glFramebufferTexture1D = gl_info->glFramebufferTexture1D;
+        gl_info->fbo_ops.glFramebufferTexture2D = gl_info->glFramebufferTexture2D;
+        gl_info->fbo_ops.glFramebufferTexture3D = gl_info->glFramebufferTexture3D;
+        gl_info->fbo_ops.glFramebufferRenderbuffer = gl_info->glFramebufferRenderbuffer;
+        gl_info->fbo_ops.glGetFramebufferAttachmentParameteriv = gl_info->glGetFramebufferAttachmentParameteriv;
+        gl_info->fbo_ops.glBlitFramebuffer = gl_info->glBlitFramebuffer;
+        gl_info->fbo_ops.glGenerateMipmap = gl_info->glGenerateMipmap;
+    }
+    else
+    {
+        if (gl_info->supported[EXT_FRAMEBUFFER_OBJECT])
+        {
+            gl_info->fbo_ops.glIsRenderbuffer = gl_info->glIsRenderbufferEXT;
+            gl_info->fbo_ops.glBindRenderbuffer = gl_info->glBindRenderbufferEXT;
+            gl_info->fbo_ops.glDeleteRenderbuffers = gl_info->glDeleteRenderbuffersEXT;
+            gl_info->fbo_ops.glGenRenderbuffers = gl_info->glGenRenderbuffersEXT;
+            gl_info->fbo_ops.glRenderbufferStorage = gl_info->glRenderbufferStorageEXT;
+            gl_info->fbo_ops.glGetRenderbufferParameteriv = gl_info->glGetRenderbufferParameterivEXT;
+            gl_info->fbo_ops.glIsFramebuffer = gl_info->glIsFramebufferEXT;
+            gl_info->fbo_ops.glBindFramebuffer = gl_info->glBindFramebufferEXT;
+            gl_info->fbo_ops.glDeleteFramebuffers = gl_info->glDeleteFramebuffersEXT;
+            gl_info->fbo_ops.glGenFramebuffers = gl_info->glGenFramebuffersEXT;
+            gl_info->fbo_ops.glCheckFramebufferStatus = gl_info->glCheckFramebufferStatusEXT;
+            gl_info->fbo_ops.glFramebufferTexture1D = gl_info->glFramebufferTexture1DEXT;
+            gl_info->fbo_ops.glFramebufferTexture2D = gl_info->glFramebufferTexture2DEXT;
+            gl_info->fbo_ops.glFramebufferTexture3D = gl_info->glFramebufferTexture3DEXT;
+            gl_info->fbo_ops.glFramebufferRenderbuffer = gl_info->glFramebufferRenderbufferEXT;
+            gl_info->fbo_ops.glGetFramebufferAttachmentParameteriv = gl_info->glGetFramebufferAttachmentParameterivEXT;
+            gl_info->fbo_ops.glGenerateMipmap = gl_info->glGenerateMipmapEXT;
+        }
+#ifndef VBOX_WITH_VMSVGA
+        else if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
+        {
+            WARN_(d3d_caps)("Framebuffer objects not supported, falling back to backbuffer offscreen rendering mode.\n");
+            wined3d_settings.offscreen_rendering_mode = ORM_BACKBUFFER;
+        }
+#endif
+        if (gl_info->supported[EXT_FRAMEBUFFER_BLIT])
+        {
+            gl_info->fbo_ops.glBlitFramebuffer = gl_info->glBlitFramebufferEXT;
+        }
+        if (gl_info->supported[EXT_FRAMEBUFFER_MULTISAMPLE])
+        {
+            gl_info->fbo_ops.glRenderbufferStorageMultisample = gl_info->glRenderbufferStorageMultisampleEXT;
+        }
+    }
+
+#ifndef VBOX_WITH_VMSVGA
+    /* MRTs are currently only supported when FBOs are used. */
+    if (wined3d_settings.offscreen_rendering_mode != ORM_FBO)
+    {
+        gl_info->limits.buffers = 1;
+    }
+#endif
+    gl_vendor = wined3d_guess_gl_vendor(gl_info, gl_vendor_str, gl_renderer_str);
+    card_vendor = wined3d_guess_card_vendor(gl_vendor_str, gl_renderer_str);
+    TRACE_(d3d_caps)("found GL_VENDOR (%s)->(0x%04x/0x%04x)\n", debugstr_a(gl_vendor_str), gl_vendor, card_vendor);
+
+    device = wined3d_guess_card(gl_info, gl_renderer_str, &gl_vendor, &card_vendor, &vidmem);
+    TRACE_(d3d_caps)("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", card_vendor, device);
+
+    /* If we have an estimate use it, else default to 64MB;  */
+    if(vidmem)
+        gl_info->vidmem = vidmem*1024*1024; /* convert from MBs to bytes */
+    else
+        gl_info->vidmem = WINE_DEFAULT_VIDMEM;
+
+    gl_info->wrap_lookup[WINED3DTADDRESS_WRAP - WINED3DTADDRESS_WRAP] = GL_REPEAT;
+    gl_info->wrap_lookup[WINED3DTADDRESS_MIRROR - WINED3DTADDRESS_WRAP] =
+            gl_info->supported[ARB_TEXTURE_MIRRORED_REPEAT] ? GL_MIRRORED_REPEAT_ARB : GL_REPEAT;
+    gl_info->wrap_lookup[WINED3DTADDRESS_CLAMP - WINED3DTADDRESS_WRAP] = GL_CLAMP_TO_EDGE;
+    gl_info->wrap_lookup[WINED3DTADDRESS_BORDER - WINED3DTADDRESS_WRAP] =
+            gl_info->supported[ARB_TEXTURE_BORDER_CLAMP] ? GL_CLAMP_TO_BORDER_ARB : GL_REPEAT;
+    gl_info->wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP] =
+            gl_info->supported[ATI_TEXTURE_MIRROR_ONCE] ? GL_MIRROR_CLAMP_TO_EDGE_ATI : GL_REPEAT;
+
+#ifndef VBOX_WITH_VMSVGA
+    /* Make sure there's an active HDC else the WGL extensions will fail */
+    hdc = pwglGetCurrentDC();
+    if (hdc) {
+        /* Not all GL drivers might offer WGL extensions e.g. VirtualBox */
+        if(GL_EXTCALL(wglGetExtensionsStringARB))
+            WGL_Extensions = GL_EXTCALL(wglGetExtensionsStringARB(hdc));
+
+        if (NULL == WGL_Extensions) {
+            ERR("   WGL_Extensions returns NULL\n");
+        } else {
+            TRACE_(d3d_caps)("WGL_Extensions reported:\n");
+            while (*WGL_Extensions != 0x00) {
+                const char *Start;
+                char ThisExtn[256];
+
+                while (isspace(*WGL_Extensions)) WGL_Extensions++;
+                Start = WGL_Extensions;
+                while (!isspace(*WGL_Extensions) && *WGL_Extensions != 0x00) {
+                    WGL_Extensions++;
+                }
+
+                len = WGL_Extensions - Start;
+                if (len == 0 || len >= sizeof(ThisExtn))
+                    continue;
+
+                memcpy(ThisExtn, Start, len);
+                ThisExtn[len] = '\0';
+                TRACE_(d3d_caps)("- %s\n", debugstr_a(ThisExtn));
+
+                if (!strcmp(ThisExtn, "WGL_ARB_pixel_format")) {
+                    gl_info->supported[WGL_ARB_PIXEL_FORMAT] = TRUE;
+                    TRACE_(d3d_caps)("FOUND: WGL_ARB_pixel_format support\n");
+                }
+                if (!strcmp(ThisExtn, "WGL_WINE_pixel_format_passthrough")) {
+                    gl_info->supported[WGL_WINE_PIXEL_FORMAT_PASSTHROUGH] = TRUE;
+                    TRACE_(d3d_caps)("FOUND: WGL_WINE_pixel_format_passthrough support\n");
+                }
+            }
+        }
+    }
+#endif
+
+    fixup_extensions(gl_info, gl_renderer_str, gl_vendor, card_vendor, device);
+#ifndef VBOX_WITH_VMSVGA
+    init_driver_info(driver_info, card_vendor, device);
+    add_gl_compat_wrappers(gl_info);
+#endif
+
+    return TRUE;
+}
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c b/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
new file mode 100644
index 0000000..b0e9ded
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
@@ -0,0 +1,5379 @@
+/*
+ * GLSL pixel and vertex shader implementation
+ *
+ * Copyright 2006 Jason Green
+ * Copyright 2006-2007 Henri Verbeet
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/*
+ * D3D shader asm has swizzles on source parameters, and write masks for
+ * destination parameters. GLSL uses swizzles for both. The result of this is
+ * that for example "mov dst.xw, src.zyxw" becomes "dst.xw = src.zw" in GLSL.
+ * Ie, to generate a proper GLSL source swizzle, we need to take the D3D write
+ * mask for the destination parameter into account.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+#include <limits.h>
+#include <stdio.h>
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+WINE_DECLARE_DEBUG_CHANNEL(d3d_constants);
+WINE_DECLARE_DEBUG_CHANNEL(d3d_caps);
+WINE_DECLARE_DEBUG_CHANNEL(d3d);
+
+#ifdef VBOX_WITH_VMSVGA
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/log.h>
+#undef WDLOG
+#define WDLOG(_m) Log(_m)
+#undef CONST
+#define CONST const
+#endif
+ 
+#define GLINFO_LOCATION      (*gl_info)
+
+#define WINED3D_GLSL_SAMPLE_PROJECTED   0x1
+#define WINED3D_GLSL_SAMPLE_RECT        0x2
+#define WINED3D_GLSL_SAMPLE_LOD         0x4
+#define WINED3D_GLSL_SAMPLE_GRAD        0x8
+
+typedef struct {
+    char reg_name[150];
+    char mask_str[6];
+} glsl_dst_param_t;
+
+typedef struct {
+    char reg_name[150];
+    char param_str[200];
+} glsl_src_param_t;
+
+typedef struct {
+    const char *name;
+    DWORD coord_mask;
+} glsl_sample_function_t;
+
+enum heap_node_op
+{
+    HEAP_NODE_TRAVERSE_LEFT,
+    HEAP_NODE_TRAVERSE_RIGHT,
+    HEAP_NODE_POP,
+};
+
+struct constant_entry
+{
+    unsigned int idx;
+    unsigned int version;
+};
+
+struct constant_heap
+{
+    struct constant_entry *entries;
+    unsigned int *positions;
+    unsigned int size;
+};
+
+/* GLSL shader private data */
+struct shader_glsl_priv {
+    struct wined3d_shader_buffer shader_buffer;
+    struct wine_rb_tree program_lookup;
+    struct glsl_shader_prog_link *glsl_program;
+    struct constant_heap vconst_heap;
+    struct constant_heap pconst_heap;
+    unsigned char *stack;
+    GLhandleARB depth_blt_program[tex_type_count];
+    UINT next_constant_version;
+};
+
+/* Struct to maintain data about a linked GLSL program */
+struct glsl_shader_prog_link {
+    struct wine_rb_entry        program_lookup_entry;
+    struct list                 vshader_entry;
+    struct list                 pshader_entry;
+    GLhandleARB                 programId;
+    GLint                       *vuniformF_locations;
+    GLint                       *puniformF_locations;
+    GLint                       vuniformI_locations[MAX_CONST_I];
+    GLint                       puniformI_locations[MAX_CONST_I];
+    GLint                       posFixup_location;
+    GLint                       np2Fixup_location;
+    GLint                       bumpenvmat_location[MAX_TEXTURES];
+    GLint                       luminancescale_location[MAX_TEXTURES];
+    GLint                       luminanceoffset_location[MAX_TEXTURES];
+    GLint                       ycorrection_location;
+    GLenum                      vertex_color_clamp;
+    IWineD3DVertexShader        *vshader;
+    IWineD3DPixelShader         *pshader;
+    struct vs_compile_args      vs_args;
+    struct ps_compile_args      ps_args;
+    UINT                        constant_version;
+    const struct wined3d_context *context;
+    UINT                        inp2Fixup_info;
+};
+
+#ifdef VBOX_WITH_VMSVGA
+# define WINEFIXUPINFO_NOINDEX (~0U)
+#else
+#define WINEFIXUPINFO_NOINDEX (~0UL)
+#endif
+#define WINEFIXUPINFO_GET(_p) get_fixup_info((const IWineD3DPixelShaderImpl*)(_p)->pshader, (_p)->inp2Fixup_info)
+#define WINEFIXUPINFO_ISVALID(_p) ((_p)->inp2Fixup_info != WINEFIXUPINFO_NOINDEX)
+#ifdef VBOX_WITH_VMSVGA
+# define WINEFIXUPINFO_INIT(_p) do { (_p)->inp2Fixup_info = WINEFIXUPINFO_NOINDEX; } while (0)
+#else
+#define WINEFIXUPINFO_INIT(_p) ((_p)->inp2Fixup_info == WINEFIXUPINFO_NOINDEX)
+#endif
+
+typedef struct {
+    IWineD3DVertexShader         *vshader;
+    IWineD3DPixelShader          *pshader;
+    struct ps_compile_args       ps_args;
+    struct vs_compile_args       vs_args;
+    const struct wined3d_context *context;
+} glsl_program_key_t;
+
+struct shader_glsl_ctx_priv {
+    const struct vs_compile_args    *cur_vs_args;
+    const struct ps_compile_args    *cur_ps_args;
+    struct ps_np2fixup_info         *cur_np2fixup_info;
+};
+
+struct glsl_ps_compiled_shader
+{
+    struct ps_compile_args          args;
+    struct ps_np2fixup_info         np2fixup;
+    GLhandleARB                     prgId;
+    const struct wined3d_context    *context;
+};
+
+struct glsl_pshader_private
+{
+    struct glsl_ps_compiled_shader  *gl_shaders;
+    UINT                            num_gl_shaders, shader_array_size;
+};
+
+struct glsl_vs_compiled_shader
+{
+    struct vs_compile_args          args;
+    GLhandleARB                     prgId;
+    const struct wined3d_context    *context;
+};
+
+struct glsl_vshader_private
+{
+    struct glsl_vs_compiled_shader  *gl_shaders;
+    UINT                            num_gl_shaders, shader_array_size;
+};
+
+static const char *debug_gl_shader_type(GLenum type)
+{
+    switch (type)
+    {
+#define WINED3D_TO_STR(u) case u: return #u
+        WINED3D_TO_STR(GL_VERTEX_SHADER_ARB);
+        WINED3D_TO_STR(GL_GEOMETRY_SHADER_ARB);
+        WINED3D_TO_STR(GL_FRAGMENT_SHADER_ARB);
+#undef WINED3D_TO_STR
+        default:
+            return wine_dbg_sprintf("UNKNOWN(%#x)", type);
+    }
+}
+
+/* Extract a line from the info log.
+ * Note that this modifies the source string. */
+static char *get_info_log_line(char **ptr, int *pcbStr)
+{
+    char *p, *q;
+    const int cbStr = *pcbStr;
+
+    if (!cbStr)
+    {
+        /* zero-length string */
+        return NULL;
+    }
+
+    if ((*ptr)[cbStr-1] != '\0')
+    {
+        ERR("string should be null-rerminated, forcing it!");
+        (*ptr)[cbStr-1] = '\0';
+    }
+    p = *ptr;
+    if (!*p)
+    {
+        *pcbStr = 0;
+        return NULL;
+    }
+
+    if (!(q = strstr(p, "\n")))
+    {
+        /* the string contains a single line! */
+        *ptr += strlen(p);
+        *pcbStr = 0;
+        return p;
+    }
+
+    *q = '\0';
+    *pcbStr = cbStr - (((uintptr_t)q) - ((uintptr_t)p)) - 1;
+    Assert((*pcbStr) >= 0);
+    Assert((*pcbStr) < cbStr);
+    *ptr = q + 1;
+
+    return p;
+}
+
+/** Prints the GLSL info log which will contain error messages if they exist */
+/* GL locking is done by the caller */
+static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleARB obj)
+{
+    int infologLength = 0;
+    char *infoLog;
+    unsigned int i;
+    BOOL is_spam;
+
+    static const char * const spam[] =
+    {
+        "Vertex shader was successfully compiled to run on hardware.\n",    /* fglrx          */
+        "Fragment shader was successfully compiled to run on hardware.\n",  /* fglrx, with \n */
+        "Fragment shader was successfully compiled to run on hardware.",    /* fglrx, no \n   */
+        "Fragment shader(s) linked, vertex shader(s) linked. \n ",          /* fglrx, with \n */
+        "Fragment shader(s) linked, vertex shader(s) linked.",              /* fglrx, no \n   */
+        "Vertex shader(s) linked, no fragment shader(s) defined. \n ",      /* fglrx, with \n */
+        "Vertex shader(s) linked, no fragment shader(s) defined.",          /* fglrx, no \n   */
+        "Fragment shader(s) linked, no vertex shader(s) defined. \n ",      /* fglrx, with \n */
+        "Fragment shader(s) linked, no vertex shader(s) defined.",          /* fglrx, no \n   */
+    };
+
+#ifndef VBOXWINEDBG_SHADERS
+    if (!TRACE_ON(d3d_shader) && !FIXME_ON(d3d_shader)) return;
+#endif
+
+    GL_EXTCALL(glGetObjectParameterivARB(obj,
+               GL_OBJECT_INFO_LOG_LENGTH_ARB,
+               &infologLength));
+
+    /* A size of 1 is just a null-terminated string, so the log should be bigger than
+     * that if there are errors. */
+    if (infologLength > 1)
+    {
+        char *ptr, *line;
+        int cbPtr;
+
+        /* Fglrx doesn't terminate the string properly, but it tells us the proper length.
+         * So use HEAP_ZERO_MEMORY to avoid uninitialized bytes
+         */
+        infoLog = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, infologLength);
+        GL_EXTCALL(glGetInfoLogARB(obj, infologLength, NULL, infoLog));
+        is_spam = FALSE;
+
+        for(i = 0; i < sizeof(spam) / sizeof(spam[0]); i++) {
+            if(strcmp(infoLog, spam[i]) == 0) {
+                is_spam = TRUE;
+                break;
+            }
+        }
+
+        ptr = infoLog;
+        cbPtr = infologLength;
+        if (is_spam)
+        {
+            WDLOG(("Spam received from GLSL shader #%u:\n", obj));
+            while ((line = get_info_log_line(&ptr, &cbPtr))) WDLOG(("    %s\n", line));
+        }
+        else
+        {
+            WDLOG(("Error received from GLSL shader #%u:\n", obj));
+            while ((line = get_info_log_line(&ptr, &cbPtr))) WDLOG(("    %s\n", line));
+        }
+        HeapFree(GetProcessHeap(), 0, infoLog);
+    }
+}
+
+static void shader_glsl_dump_shader_source(const struct wined3d_gl_info *gl_info, GLhandleARB shader)
+{
+    char *ptr;
+    GLint tmp, source_size;
+    char *source = NULL;
+    int cbPtr;
+
+    GL_EXTCALL(glGetObjectParameterivARB(shader, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &tmp));
+
+    source = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tmp);
+    if (!source)
+    {
+        ERR("Failed to allocate %d bytes for shader source.\n", tmp);
+        return;
+    }
+
+    source_size = tmp;
+
+    WDLOG(("Object %u:\n", shader));
+    GL_EXTCALL(glGetObjectParameterivARB(shader, GL_OBJECT_SUBTYPE_ARB, &tmp));
+    WDLOG(("    GL_OBJECT_SUBTYPE_ARB: %s.\n", debug_gl_shader_type(tmp)));
+    GL_EXTCALL(glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &tmp));
+    WDLOG(("    GL_OBJECT_COMPILE_STATUS_ARB: %d.\n", tmp));
+    WDLOG(("\n"));
+
+    ptr = source;
+    cbPtr = source_size;
+    GL_EXTCALL(glGetShaderSourceARB(shader, source_size, NULL, source));
+#if 0
+    while ((line = get_info_log_line(&ptr, &cbPtr))) WDLOG(("    %s\n", line));
+#else
+    WDLOG(("*****shader source***\n"));
+    WDLOG(("    %s\n", source));
+    WDLOG(("\n*****END shader source***\n\n"));
+#endif
+    WDLOG(("\n"));
+}
+
+/* GL locking is done by the caller. */
+static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_info, GLhandleARB program)
+{
+    GLint i, object_count;
+    GLhandleARB *objects;
+    char *source = NULL;
+
+    WDLOG(("\n***************************dumping program %d******************************\n", program));
+
+    GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_ATTACHED_OBJECTS_ARB, &object_count));
+    objects = HeapAlloc(GetProcessHeap(), 0, object_count * sizeof(*objects));
+    if (!objects)
+    {
+        ERR("Failed to allocate object array memory.\n");
+        return;
+    }
+
+    GL_EXTCALL(glGetAttachedObjectsARB(program, object_count, NULL, objects));
+    for (i = 0; i < object_count; ++i)
+    {
+        shader_glsl_dump_shader_source(gl_info, objects[i]);
+    }
+
+    HeapFree(GetProcessHeap(), 0, source);
+    HeapFree(GetProcessHeap(), 0, objects);
+
+    WDLOG(("\n***************************END dumping program %d******************************\n\n", program));
+}
+
+/* GL locking is done by the caller. */
+static void shader_glsl_validate_compile_link(const struct wined3d_gl_info *gl_info, GLhandleARB program, GLboolean fIsProgram)
+{
+    GLint tmp = -1;
+
+#ifndef VBOXWINEDBG_SHADERS
+    if (!TRACE_ON(d3d_shader) && !FIXME_ON(d3d_shader)) return;
+#endif
+
+    GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_TYPE_ARB, &tmp));
+    if (tmp == GL_PROGRAM_OBJECT_ARB)
+    {
+        if (!fIsProgram)
+        {
+            ERR("this is a program, but shader expected");
+        }
+        GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &tmp));
+        if (!tmp)
+        {
+            ERR("Program %p link status invalid.\n", (void *)(uintptr_t)program);
+#ifndef VBOXWINEDBG_SHADERS
+            shader_glsl_dump_program_source(gl_info, program);
+#endif
+        }
+#if defined(VBOX_WITH_VMSVGA) && defined(DEBUG)
+        shader_glsl_dump_program_source(gl_info, program);
+#endif
+    }
+    else if (tmp == GL_SHADER_OBJECT_ARB)
+    {
+        if (fIsProgram)
+        {
+            ERR("this is a shader, but program expected");
+        }
+
+        GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_COMPILE_STATUS_ARB, &tmp));
+        if (!tmp)
+        {
+            ERR("Shader %p compile status invalid.\n", (void *)(uintptr_t)program);
+            shader_glsl_dump_shader_source(gl_info, program);
+        }
+    }
+    else
+    {
+        ERR("unexpected oject type(%d)!", tmp);
+    }
+
+    print_glsl_info_log(gl_info, program);
+}
+
+/**
+ * Loads (pixel shader) samplers
+ */
+/* GL locking is done by the caller */
+static void shader_glsl_load_psamplers(const struct wined3d_gl_info *gl_info,
+        DWORD *tex_unit_map, GLhandleARB programId)
+{
+    GLint name_loc;
+    int i;
+    char sampler_name[20];
+
+    for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i) {
+        snprintf(sampler_name, sizeof(sampler_name), "Psampler%d", i);
+        name_loc = GL_EXTCALL(glGetUniformLocationARB(programId, sampler_name));
+        if (name_loc != -1) {
+            DWORD mapped_unit = tex_unit_map[i];
+            if (mapped_unit != WINED3D_UNMAPPED_STAGE && mapped_unit < gl_info->limits.fragment_samplers)
+            {
+                TRACE("Loading %s for texture %d\n", sampler_name, mapped_unit);
+                GL_EXTCALL(glUniform1iARB(name_loc, mapped_unit));
+                checkGLcall("glUniform1iARB");
+            } else {
+                ERR("Trying to load sampler %s on unsupported unit %d\n", sampler_name, mapped_unit);
+            }
+        }
+    }
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_load_vsamplers(const struct wined3d_gl_info *gl_info,
+        DWORD *tex_unit_map, GLhandleARB programId)
+{
+    GLint name_loc;
+    char sampler_name[20];
+    int i;
+
+    for (i = 0; i < MAX_VERTEX_SAMPLERS; ++i) {
+        snprintf(sampler_name, sizeof(sampler_name), "Vsampler%d", i);
+        name_loc = GL_EXTCALL(glGetUniformLocationARB(programId, sampler_name));
+        if (name_loc != -1) {
+            DWORD mapped_unit = tex_unit_map[MAX_FRAGMENT_SAMPLERS + i];
+            if (mapped_unit != WINED3D_UNMAPPED_STAGE && mapped_unit < gl_info->limits.combined_samplers)
+            {
+                TRACE("Loading %s for texture %d\n", sampler_name, mapped_unit);
+                GL_EXTCALL(glUniform1iARB(name_loc, mapped_unit));
+                checkGLcall("glUniform1iARB");
+            } else {
+                ERR("Trying to load sampler %s on unsupported unit %d\n", sampler_name, mapped_unit);
+            }
+        }
+    }
+}
+
+/* GL locking is done by the caller */
+static inline void walk_constant_heap(const struct wined3d_gl_info *gl_info, const float *constants,
+        const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version)
+{
+    int stack_idx = 0;
+    unsigned int heap_idx = 1;
+    unsigned int idx;
+
+    if (heap->entries[heap_idx].version <= version) return;
+
+    idx = heap->entries[heap_idx].idx;
+    if (constant_locations[idx] != -1) GL_EXTCALL(glUniform4fvARB(constant_locations[idx], 1, &constants[idx * 4]));
+    stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+
+    while (stack_idx >= 0)
+    {
+        /* Note that we fall through to the next case statement. */
+        switch(stack[stack_idx])
+        {
+            case HEAP_NODE_TRAVERSE_LEFT:
+            {
+                unsigned int left_idx = heap_idx << 1;
+                if (left_idx < heap->size && heap->entries[left_idx].version > version)
+                {
+                    heap_idx = left_idx;
+                    idx = heap->entries[heap_idx].idx;
+                    if (constant_locations[idx] != -1)
+                        GL_EXTCALL(glUniform4fvARB(constant_locations[idx], 1, &constants[idx * 4]));
+
+                    stack[stack_idx++] = HEAP_NODE_TRAVERSE_RIGHT;
+                    stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+                    break;
+                }
+            }
+
+            case HEAP_NODE_TRAVERSE_RIGHT:
+            {
+                unsigned int right_idx = (heap_idx << 1) + 1;
+                if (right_idx < heap->size && heap->entries[right_idx].version > version)
+                {
+                    heap_idx = right_idx;
+                    idx = heap->entries[heap_idx].idx;
+                    if (constant_locations[idx] != -1)
+                        GL_EXTCALL(glUniform4fvARB(constant_locations[idx], 1, &constants[idx * 4]));
+
+                    stack[stack_idx++] = HEAP_NODE_POP;
+                    stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+                    break;
+                }
+            }
+
+            case HEAP_NODE_POP:
+            {
+                heap_idx >>= 1;
+                --stack_idx;
+                break;
+            }
+        }
+    }
+    checkGLcall("walk_constant_heap()");
+}
+
+/* GL locking is done by the caller */
+static inline void apply_clamped_constant(const struct wined3d_gl_info *gl_info, GLint location, const GLfloat *data)
+{
+    GLfloat clamped_constant[4];
+
+    if (location == -1) return;
+
+    clamped_constant[0] = data[0] < -1.0f ? -1.0f : data[0] > 1.0f ? 1.0f : data[0];
+    clamped_constant[1] = data[1] < -1.0f ? -1.0f : data[1] > 1.0f ? 1.0f : data[1];
+    clamped_constant[2] = data[2] < -1.0f ? -1.0f : data[2] > 1.0f ? 1.0f : data[2];
+    clamped_constant[3] = data[3] < -1.0f ? -1.0f : data[3] > 1.0f ? 1.0f : data[3];
+
+    GL_EXTCALL(glUniform4fvARB(location, 1, clamped_constant));
+}
+
+/* GL locking is done by the caller */
+static inline void walk_constant_heap_clamped(const struct wined3d_gl_info *gl_info, const float *constants,
+        const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version)
+{
+    int stack_idx = 0;
+    unsigned int heap_idx = 1;
+    unsigned int idx;
+
+    if (heap->entries[heap_idx].version <= version) return;
+
+    idx = heap->entries[heap_idx].idx;
+    apply_clamped_constant(gl_info, constant_locations[idx], &constants[idx * 4]);
+    stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+
+    while (stack_idx >= 0)
+    {
+        /* Note that we fall through to the next case statement. */
+        switch(stack[stack_idx])
+        {
+            case HEAP_NODE_TRAVERSE_LEFT:
+            {
+                unsigned int left_idx = heap_idx << 1;
+                if (left_idx < heap->size && heap->entries[left_idx].version > version)
+                {
+                    heap_idx = left_idx;
+                    idx = heap->entries[heap_idx].idx;
+                    apply_clamped_constant(gl_info, constant_locations[idx], &constants[idx * 4]);
+
+                    stack[stack_idx++] = HEAP_NODE_TRAVERSE_RIGHT;
+                    stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+                    break;
+                }
+            }
+
+            case HEAP_NODE_TRAVERSE_RIGHT:
+            {
+                unsigned int right_idx = (heap_idx << 1) + 1;
+                if (right_idx < heap->size && heap->entries[right_idx].version > version)
+                {
+                    heap_idx = right_idx;
+                    idx = heap->entries[heap_idx].idx;
+                    apply_clamped_constant(gl_info, constant_locations[idx], &constants[idx * 4]);
+
+                    stack[stack_idx++] = HEAP_NODE_POP;
+                    stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+                    break;
+                }
+            }
+
+            case HEAP_NODE_POP:
+            {
+                heap_idx >>= 1;
+                --stack_idx;
+                break;
+            }
+        }
+    }
+    checkGLcall("walk_constant_heap_clamped()");
+}
+
+/* Loads floating point constants (aka uniforms) into the currently set GLSL program. */
+/* GL locking is done by the caller */
+static void shader_glsl_load_constantsF(IWineD3DBaseShaderImpl *This, const struct wined3d_gl_info *gl_info,
+        const float *constants, const GLint *constant_locations, const struct constant_heap *heap,
+        unsigned char *stack, UINT version)
+{
+    const local_constant *lconst;
+
+    /* 1.X pshaders have the constants clamped to [-1;1] implicitly. */
+    if (This->baseShader.reg_maps.shader_version.major == 1
+            && shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type))
+        walk_constant_heap_clamped(gl_info, constants, constant_locations, heap, stack, version);
+    else
+        walk_constant_heap(gl_info, constants, constant_locations, heap, stack, version);
+
+    if (!This->baseShader.load_local_constsF)
+    {
+        TRACE("No need to load local float constants for this shader\n");
+        return;
+    }
+
+    /* Immediate constants are clamped to [-1;1] at shader creation time if needed */
+    LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry)
+    {
+        GLint location = constant_locations[lconst->idx];
+        /* We found this uniform name in the program - go ahead and send the data */
+        if (location != -1) GL_EXTCALL(glUniform4fvARB(location, 1, (const GLfloat *)lconst->value));
+    }
+    checkGLcall("glUniform4fvARB()");
+}
+
+/* Loads integer constants (aka uniforms) into the currently set GLSL program. */
+/* GL locking is done by the caller */
+static void shader_glsl_load_constantsI(IWineD3DBaseShaderImpl *This, const struct wined3d_gl_info *gl_info,
+        const GLint locations[MAX_CONST_I], const int *constants, WORD constants_set)
+{
+    unsigned int i;
+    struct list* ptr;
+
+    for (i = 0; constants_set; constants_set >>= 1, ++i)
+    {
+        if (!(constants_set & 1)) continue;
+
+        TRACE_(d3d_constants)("Loading constants %u: %i, %i, %i, %i\n",
+                i, constants[i*4], constants[i*4+1], constants[i*4+2], constants[i*4+3]);
+
+        /* We found this uniform name in the program - go ahead and send the data */
+        GL_EXTCALL(glUniform4ivARB(locations[i], 1, &constants[i*4]));
+        checkGLcall("glUniform4ivARB");
+    }
+
+    /* Load immediate constants */
+    ptr = list_head(&This->baseShader.constantsI);
+    while (ptr) {
+        const struct local_constant *lconst = LIST_ENTRY(ptr, const struct local_constant, entry);
+        unsigned int idx = lconst->idx;
+        const GLint *values = (const GLint *)lconst->value;
+
+        TRACE_(d3d_constants)("Loading local constants %i: %i, %i, %i, %i\n", idx,
+            values[0], values[1], values[2], values[3]);
+
+        /* We found this uniform name in the program - go ahead and send the data */
+        GL_EXTCALL(glUniform4ivARB(locations[idx], 1, values));
+        checkGLcall("glUniform4ivARB");
+        ptr = list_next(&This->baseShader.constantsI, ptr);
+    }
+}
+
+/* Loads boolean constants (aka uniforms) into the currently set GLSL program. */
+/* GL locking is done by the caller */
+static void shader_glsl_load_constantsB(IWineD3DBaseShaderImpl *This, const struct wined3d_gl_info *gl_info,
+        GLhandleARB programId, const BOOL *constants, WORD constants_set)
+{
+    GLint tmp_loc;
+    unsigned int i;
+    char tmp_name[8];
+    const char *prefix;
+    struct list* ptr;
+
+    switch (This->baseShader.reg_maps.shader_version.type)
+    {
+        case WINED3D_SHADER_TYPE_VERTEX:
+            prefix = "VB";
+            break;
+
+        case WINED3D_SHADER_TYPE_GEOMETRY:
+            prefix = "GB";
+            break;
+
+        case WINED3D_SHADER_TYPE_PIXEL:
+            prefix = "PB";
+            break;
+
+        default:
+            FIXME("Unknown shader type %#x.\n",
+                    This->baseShader.reg_maps.shader_version.type);
+            prefix = "UB";
+            break;
+    }
+
+    /* TODO: Benchmark and see if it would be beneficial to store the
+     * locations of the constants to avoid looking up each time */
+    for (i = 0; constants_set; constants_set >>= 1, ++i)
+    {
+        if (!(constants_set & 1)) continue;
+
+        TRACE_(d3d_constants)("Loading constants %i: %i;\n", i, constants[i]);
+
+        /* TODO: Benchmark and see if it would be beneficial to store the
+         * locations of the constants to avoid looking up each time */
+        snprintf(tmp_name, sizeof(tmp_name), "%s[%i]", prefix, i);
+        tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, tmp_name));
+        if (tmp_loc != -1)
+        {
+            /* We found this uniform name in the program - go ahead and send the data */
+            GL_EXTCALL(glUniform1ivARB(tmp_loc, 1, &constants[i]));
+            checkGLcall("glUniform1ivARB");
+        }
+    }
+
+    /* Load immediate constants */
+    ptr = list_head(&This->baseShader.constantsB);
+    while (ptr) {
+        const struct local_constant *lconst = LIST_ENTRY(ptr, const struct local_constant, entry);
+        unsigned int idx = lconst->idx;
+        const GLint *values = (const GLint *)lconst->value;
+
+        TRACE_(d3d_constants)("Loading local constants %i: %i\n", idx, values[0]);
+
+        snprintf(tmp_name, sizeof(tmp_name), "%s[%i]", prefix, idx);
+        tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, tmp_name));
+        if (tmp_loc != -1) {
+            /* We found this uniform name in the program - go ahead and send the data */
+            GL_EXTCALL(glUniform1ivARB(tmp_loc, 1, values));
+            checkGLcall("glUniform1ivARB");
+        }
+        ptr = list_next(&This->baseShader.constantsB, ptr);
+    }
+}
+
+static void reset_program_constant_version(struct wine_rb_entry *entry, void *context)
+{
+    WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry)->constant_version = 0;
+}
+
+static const struct ps_np2fixup_info * get_fixup_info(const IWineD3DPixelShaderImpl *shader, UINT inp2fixup_info)
+{
+    struct glsl_pshader_private    *shader_data = shader->baseShader.backend_data;
+
+    if (inp2fixup_info == WINEFIXUPINFO_NOINDEX)
+        return NULL;
+
+    if (!shader->baseShader.backend_data)
+    {
+        ERR("no backend data\n");
+        return NULL;
+    }
+    shader_data = shader->baseShader.backend_data;
+
+    if (inp2fixup_info >= shader_data->num_gl_shaders)
+    {
+        ERR("invalid index\n");
+        return NULL;
+    }
+
+    return &shader_data->gl_shaders[inp2fixup_info].np2fixup;
+}
+
+/**
+ * Loads the texture dimensions for NP2 fixup into the currently set GLSL program.
+ */
+/* GL locking is done by the caller (state handler) */
+static void shader_glsl_load_np2fixup_constants(
+    IWineD3DDevice* device,
+    char usePixelShader,
+    char useVertexShader) {
+
+    const IWineD3DDeviceImpl* deviceImpl = (const IWineD3DDeviceImpl*) device;
+    const struct glsl_shader_prog_link* prog = ((struct shader_glsl_priv *)(deviceImpl->shader_priv))->glsl_program;
+
+    if (!prog) {
+        /* No GLSL program set - nothing to do. */
+        return;
+    }
+
+    if (!usePixelShader) {
+        /* NP2 texcoord fixup is (currently) only done for pixelshaders. */
+        return;
+    }
+
+    if (prog->ps_args.np2_fixup && -1 != prog->np2Fixup_location) {
+        const struct wined3d_gl_info *gl_info = &deviceImpl->adapter->gl_info;
+        const IWineD3DStateBlockImpl* stateBlock = (const IWineD3DStateBlockImpl*) deviceImpl->stateBlock;
+        UINT i;
+        UINT fixup = prog->ps_args.np2_fixup;
+        GLfloat np2fixup_constants[4 * MAX_FRAGMENT_SAMPLERS];
+
+        const struct ps_np2fixup_info *np2Fixup_info = WINEFIXUPINFO_GET(prog);
+
+        for (i = 0; fixup; fixup >>= 1, ++i) {
+            const unsigned char idx = np2Fixup_info->idx[i];
+            const IWineD3DBaseTextureImpl* const tex = (const IWineD3DBaseTextureImpl*) stateBlock->textures[i];
+            GLfloat* tex_dim = &np2fixup_constants[(idx >> 1) * 4];
+
+            if (!tex) {
+                FIXME("Nonexistent texture is flagged for NP2 texcoord fixup\n");
+                continue;
+            }
+
+            if (idx % 2) {
+                tex_dim[2] = tex->baseTexture.pow2Matrix[0]; tex_dim[3] = tex->baseTexture.pow2Matrix[5];
+            } else {
+                tex_dim[0] = tex->baseTexture.pow2Matrix[0]; tex_dim[1] = tex->baseTexture.pow2Matrix[5];
+            }
+        }
+
+        GL_EXTCALL(glUniform4fvARB(prog->np2Fixup_location, np2Fixup_info->num_consts, np2fixup_constants));
+    }
+}
+
+/**
+ * Loads the app-supplied constants into the currently set GLSL program.
+ */
+/* GL locking is done by the caller (state handler) */
+static void shader_glsl_load_constants(const struct wined3d_context *context,
+        char usePixelShader, char useVertexShader)
+{
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    IWineD3DDeviceImpl *device = context_get_device(context);
+    IWineD3DStateBlockImpl* stateBlock = device->stateBlock;
+    struct shader_glsl_priv *priv = device->shader_priv;
+
+    GLhandleARB programId;
+    struct glsl_shader_prog_link *prog = priv->glsl_program;
+    UINT constant_version;
+    int i;
+
+    if (!prog) {
+        /* No GLSL program set - nothing to do. */
+        return;
+    }
+    programId = prog->programId;
+    constant_version = prog->constant_version;
+
+    if (useVertexShader) {
+        IWineD3DBaseShaderImpl* vshader = (IWineD3DBaseShaderImpl*) stateBlock->vertexShader;
+
+        /* Load DirectX 9 float constants/uniforms for vertex shader */
+        shader_glsl_load_constantsF(vshader, gl_info, stateBlock->vertexShaderConstantF,
+                prog->vuniformF_locations, &priv->vconst_heap, priv->stack, constant_version);
+
+        /* Load DirectX 9 integer constants/uniforms for vertex shader */
+        shader_glsl_load_constantsI(vshader, gl_info, prog->vuniformI_locations, stateBlock->vertexShaderConstantI,
+                stateBlock->changed.vertexShaderConstantsI & vshader->baseShader.reg_maps.integer_constants);
+
+        /* Load DirectX 9 boolean constants/uniforms for vertex shader */
+        shader_glsl_load_constantsB(vshader, gl_info, programId, stateBlock->vertexShaderConstantB,
+                stateBlock->changed.vertexShaderConstantsB & vshader->baseShader.reg_maps.boolean_constants);
+
+        /* Upload the position fixup params */
+        GL_EXTCALL(glUniform4fvARB(prog->posFixup_location, 1, &device->posFixup[0]));
+        checkGLcall("glUniform4fvARB");
+    }
+
+    if (usePixelShader) {
+
+        IWineD3DBaseShaderImpl* pshader = (IWineD3DBaseShaderImpl*) stateBlock->pixelShader;
+
+        /* Load DirectX 9 float constants/uniforms for pixel shader */
+        shader_glsl_load_constantsF(pshader, gl_info, stateBlock->pixelShaderConstantF,
+                prog->puniformF_locations, &priv->pconst_heap, priv->stack, constant_version);
+
+        /* Load DirectX 9 integer constants/uniforms for pixel shader */
+        shader_glsl_load_constantsI(pshader, gl_info, prog->puniformI_locations, stateBlock->pixelShaderConstantI,
+                stateBlock->changed.pixelShaderConstantsI & pshader->baseShader.reg_maps.integer_constants);
+
+        /* Load DirectX 9 boolean constants/uniforms for pixel shader */
+        shader_glsl_load_constantsB(pshader, gl_info, programId, stateBlock->pixelShaderConstantB,
+                stateBlock->changed.pixelShaderConstantsB & pshader->baseShader.reg_maps.boolean_constants);
+
+        /* Upload the environment bump map matrix if needed. The needsbumpmat member specifies the texture stage to load the matrix from.
+         * It can't be 0 for a valid texbem instruction.
+         */
+        for(i = 0; i < MAX_TEXTURES; i++) {
+            const float *data;
+
+            if(prog->bumpenvmat_location[i] == -1) continue;
+
+            data = (const float *)&stateBlock->textureState[i][WINED3DTSS_BUMPENVMAT00];
+            GL_EXTCALL(glUniformMatrix2fvARB(prog->bumpenvmat_location[i], 1, 0, data));
+            checkGLcall("glUniformMatrix2fvARB");
+
+            /* texbeml needs the luminance scale and offset too. If texbeml is used, needsbumpmat
+             * is set too, so we can check that in the needsbumpmat check
+             */
+            if(prog->luminancescale_location[i] != -1) {
+                const GLfloat *scale = (const GLfloat *)&stateBlock->textureState[i][WINED3DTSS_BUMPENVLSCALE];
+                const GLfloat *offset = (const GLfloat *)&stateBlock->textureState[i][WINED3DTSS_BUMPENVLOFFSET];
+
+                GL_EXTCALL(glUniform1fvARB(prog->luminancescale_location[i], 1, scale));
+                checkGLcall("glUniform1fvARB");
+                GL_EXTCALL(glUniform1fvARB(prog->luminanceoffset_location[i], 1, offset));
+                checkGLcall("glUniform1fvARB");
+            }
+        }
+
+        if(((IWineD3DPixelShaderImpl *) pshader)->vpos_uniform) {
+            float correction_params[4];
+
+            if (context->render_offscreen)
+            {
+                correction_params[0] = 0.0f;
+                correction_params[1] = 1.0f;
+            } else {
+                /* position is window relative, not viewport relative */
+#ifdef VBOX_WITH_VMSVGA
+                correction_params[0] = device->rtHeight;               
+#else
+                correction_params[0] = ((IWineD3DSurfaceImpl *)context->current_rt)->currentDesc.Height;
+#endif
+                correction_params[1] = -1.0f;
+            }
+            GL_EXTCALL(glUniform4fvARB(prog->ycorrection_location, 1, correction_params));
+        }
+    }
+
+    if (priv->next_constant_version == UINT_MAX)
+    {
+        TRACE("Max constant version reached, resetting to 0.\n");
+        wine_rb_for_each_entry(&priv->program_lookup, reset_program_constant_version, NULL);
+        priv->next_constant_version = 1;
+    }
+    else
+    {
+        prog->constant_version = priv->next_constant_version++;
+    }
+}
+
+static inline void update_heap_entry(struct constant_heap *heap, unsigned int idx,
+        unsigned int heap_idx, DWORD new_version)
+{
+    struct constant_entry *entries = heap->entries;
+    unsigned int *positions = heap->positions;
+    unsigned int parent_idx;
+
+    while (heap_idx > 1)
+    {
+        parent_idx = heap_idx >> 1;
+
+        if (new_version <= entries[parent_idx].version) break;
+
+        entries[heap_idx] = entries[parent_idx];
+        positions[entries[parent_idx].idx] = heap_idx;
+        heap_idx = parent_idx;
+    }
+
+    entries[heap_idx].version = new_version;
+    entries[heap_idx].idx = idx;
+    positions[idx] = heap_idx;
+}
+
+static void shader_glsl_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count)
+{
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    struct shader_glsl_priv *priv = This->shader_priv;
+    struct constant_heap *heap = &priv->vconst_heap;
+    UINT i;
+
+    for (i = start; i < count + start; ++i)
+    {
+        if (!This->stateBlock->changed.vertexShaderConstantsF[i])
+            update_heap_entry(heap, i, heap->size++, priv->next_constant_version);
+        else
+            update_heap_entry(heap, i, heap->positions[i], priv->next_constant_version);
+    }
+}
+
+static void shader_glsl_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count)
+{
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    struct shader_glsl_priv *priv = This->shader_priv;
+    struct constant_heap *heap = &priv->pconst_heap;
+    UINT i;
+
+    for (i = start; i < count + start; ++i)
+    {
+        if (!This->stateBlock->changed.pixelShaderConstantsF[i])
+            update_heap_entry(heap, i, heap->size++, priv->next_constant_version);
+        else
+            update_heap_entry(heap, i, heap->positions[i], priv->next_constant_version);
+    }
+}
+
+static unsigned int vec4_varyings(DWORD shader_major, const struct wined3d_gl_info *gl_info)
+{
+    unsigned int ret = gl_info->limits.glsl_varyings / 4;
+    /* 4.0 shaders do not write clip coords because d3d10 does not support user clipplanes */
+    if(shader_major > 3) return ret;
+
+    /* 3.0 shaders may need an extra varying for the clip coord on some cards(mostly dx10 ones) */
+    if (gl_info->quirks & WINED3D_QUIRK_GLSL_CLIP_VARYING) ret -= 1;
+    return ret;
+}
+
+/** Generate the variable & register declarations for the GLSL output target */
+static void shader_generate_glsl_declarations(const struct wined3d_context *context,
+        struct wined3d_shader_buffer *buffer, IWineD3DBaseShader *iface,
+        const shader_reg_maps *reg_maps, struct shader_glsl_ctx_priv *ctx_priv)
+{
+    IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
+    IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *) This->baseShader.device;
+    const struct ps_compile_args *ps_args = ctx_priv->cur_ps_args;
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    unsigned int i, extra_constants_needed = 0;
+    const local_constant *lconst;
+    DWORD map;
+
+    /* There are some minor differences between pixel and vertex shaders */
+    char pshader = shader_is_pshader_version(reg_maps->shader_version.type);
+    char prefix = pshader ? 'P' : 'V';
+
+    /* Prototype the subroutines */
+    for (i = 0, map = reg_maps->labels; map; map >>= 1, ++i)
+    {
+        if (map & 1) shader_addline(buffer, "void subroutine%u();\n", i);
+    }
+
+    /* Declare the constants (aka uniforms) */
+    if (This->baseShader.limits.constant_float > 0) {
+        unsigned max_constantsF;
+        /* Unless the shader uses indirect addressing, always declare the maximum array size and ignore that we need some
+         * uniforms privately. E.g. if GL supports 256 uniforms, and we need 2 for the pos fixup and immediate values, still
+         * declare VC[256]. If the shader needs more uniforms than we have it won't work in any case. If it uses less, the
+         * compiler will figure out which uniforms are really used and strip them out. This allows a shader to use c255 on
+         * a dx9 card, as long as it doesn't also use all the other constants.
+         *
+         * If the shader uses indirect addressing the compiler must assume that all declared uniforms are used. In this case,
+         * declare only the amount that we're assured to have.
+         *
+         * Thus we run into problems in these two cases:
+         * 1) The shader really uses more uniforms than supported
+         * 2) The shader uses indirect addressing, less constants than supported, but uses a constant index > #supported consts
+         */
+        if (pshader)
+        {
+            /* No indirect addressing here. */
+            max_constantsF = gl_info->limits.glsl_ps_float_constants;
+        }
+        else
+        {
+            if(This->baseShader.reg_maps.usesrelconstF) {
+                /* Subtract the other potential uniforms from the max available (bools, ints, and 1 row of projection matrix).
+                 * Subtract another uniform for immediate values, which have to be loaded via uniform by the driver as well.
+                 * The shader code only uses 0.5, 2.0, 1.0, 128 and -128 in vertex shader code, so one vec4 should be enough
+                 * (Unfortunately the Nvidia driver doesn't store 128 and -128 in one float).
+                 *
+                 * Writing gl_ClipVertex requires one uniform for each clipplane as well.
+                 */
+#ifdef VBOX_WITH_WDDM
+                if (gl_info->limits.glsl_vs_float_constants == 256)
+                {
+                    DWORD dwVersion = GetVersion();
+                    DWORD dwMajor = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+                    DWORD dwMinor = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+                    /* tmp workaround Win8 Aero requirement for 256 */
+                    if (dwMajor > 6 || dwMinor > 1)
+                    {
+                        /* tmp work-around to make Internet Explorer in win8 work with GPU supporting only with 256 shader uniform vars
+                         * @todo: make it more robust */
+                        max_constantsF = gl_info->limits.glsl_vs_float_constants - 1;
+                    }
+                    else
+                        max_constantsF = gl_info->limits.glsl_vs_float_constants - 3;
+                }
+                else
+#endif
+                {
+                    max_constantsF = gl_info->limits.glsl_vs_float_constants - 3;
+                }
+
+                if(ctx_priv->cur_vs_args->clip_enabled)
+                {
+                    max_constantsF -= gl_info->limits.clipplanes;
+                }
+                max_constantsF -= count_bits(This->baseShader.reg_maps.integer_constants);
+                /* Strictly speaking a bool only uses one scalar, but the nvidia(Linux) compiler doesn't pack them properly,
+                 * so each scalar requires a full vec4. We could work around this by packing the booleans ourselves, but
+                 * for now take this into account when calculating the number of available constants
+                 */
+                max_constantsF -= count_bits(This->baseShader.reg_maps.boolean_constants);
+                /* Set by driver quirks in directx.c */
+                max_constantsF -= gl_info->reserved_glsl_constants;
+            }
+            else
+            {
+                max_constantsF = gl_info->limits.glsl_vs_float_constants;
+            }
+        }
+        max_constantsF = min(This->baseShader.limits.constant_float, max_constantsF);
+        shader_addline(buffer, "uniform vec4 %cC[%u];\n", prefix, max_constantsF);
+    }
+
+    /* Always declare the full set of constants, the compiler can remove the unused ones because d3d doesn't(yet)
+     * support indirect int and bool constant addressing. This avoids problems if the app uses e.g. i0 and i9.
+     */
+    if (This->baseShader.limits.constant_int > 0 && This->baseShader.reg_maps.integer_constants)
+        shader_addline(buffer, "uniform ivec4 %cI[%u];\n", prefix, This->baseShader.limits.constant_int);
+
+    if (This->baseShader.limits.constant_bool > 0 && This->baseShader.reg_maps.boolean_constants)
+        shader_addline(buffer, "uniform bool %cB[%u];\n", prefix, This->baseShader.limits.constant_bool);
+
+    if(!pshader) {
+        shader_addline(buffer, "uniform vec4 posFixup;\n");
+        /* Predeclaration; This function is added at link time based on the pixel shader.
+         * VS 3.0 shaders have an array OUT[] the shader writes to, earlier versions don't have
+         * that. We know the input to the reorder function at vertex shader compile time, so
+         * we can deal with that. The reorder function for a 1.x and 2.x vertex shader can just
+         * read gl_FrontColor. The output depends on the pixel shader. The reorder function for a
+         * 1.x and 2.x pshader or for fixed function will write gl_FrontColor, and for a 3.0 shader
+         * it will write to the varying array. Here we depend on the shader optimizer on sorting that
+         * out. The nvidia driver only does that if the parameter is inout instead of out, hence the
+         * inout.
+         */
+        if (reg_maps->shader_version.major >= 3)
+        {
+            shader_addline(buffer, "void order_ps_input(in vec4[%u]);\n", MAX_REG_OUTPUT);
+        } else {
+            shader_addline(buffer, "void order_ps_input();\n");
+        }
+    } else {
+        for (i = 0, map = reg_maps->bumpmat; map; map >>= 1, ++i)
+        {
+            if (!(map & 1)) continue;
+
+            shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i);
+
+            if (reg_maps->luminanceparams & (1 << i))
+            {
+                shader_addline(buffer, "uniform float luminancescale%d;\n", i);
+                shader_addline(buffer, "uniform float luminanceoffset%d;\n", i);
+                extra_constants_needed++;
+            }
+
+            extra_constants_needed++;
+        }
+
+        if (ps_args->srgb_correction)
+        {
+            shader_addline(buffer, "const vec4 srgb_const0 = vec4(%.8e, %.8e, %.8e, %.8e);\n",
+                    srgb_pow, srgb_mul_high, srgb_sub_high, srgb_mul_low);
+            shader_addline(buffer, "const vec4 srgb_const1 = vec4(%.8e, 0.0, 0.0, 0.0);\n",
+                    srgb_cmp);
+        }
+        if (reg_maps->vpos || reg_maps->usesdsy)
+        {
+            if (This->baseShader.limits.constant_float + extra_constants_needed
+                    + 1 < gl_info->limits.glsl_ps_float_constants)
+            {
+                shader_addline(buffer, "uniform vec4 ycorrection;\n");
+                ((IWineD3DPixelShaderImpl *) This)->vpos_uniform = 1;
+                extra_constants_needed++;
+            } else {
+                /* This happens because we do not have proper tracking of the constant registers that are
+                 * actually used, only the max limit of the shader version
+                 */
+                FIXME("Cannot find a free uniform for vpos correction params\n");
+                AssertFailed();
+                shader_addline(buffer, "const vec4 ycorrection = vec4(%f, %f, 0.0, 0.0);\n",
+                        context->render_offscreen ? 0.0f : ((IWineD3DSurfaceImpl *)device->render_targets[0])->currentDesc.Height,
+                        context->render_offscreen ? 1.0f : -1.0f);
+            }
+            shader_addline(buffer, "vec4 vpos;\n");
+        }
+    }
+
+    /* Declare texture samplers */
+    for (i = 0; i < This->baseShader.limits.sampler; i++) {
+        if (reg_maps->sampler_type[i])
+        {
+            switch (reg_maps->sampler_type[i])
+            {
+                case WINED3DSTT_1D:
+                    shader_addline(buffer, "uniform sampler1D %csampler%u;\n", prefix, i);
+                    break;
+                case WINED3DSTT_2D:
+                    if(device->stateBlock->textures[i] &&
+                       IWineD3DBaseTexture_GetTextureDimensions(device->stateBlock->textures[i]) == GL_TEXTURE_RECTANGLE_ARB) {
+                        shader_addline(buffer, "uniform sampler2DRect %csampler%u;\n", prefix, i);
+                    } else {
+                        shader_addline(buffer, "uniform sampler2D %csampler%u;\n", prefix, i);
+                    }
+                    break;
+                case WINED3DSTT_CUBE:
+                    shader_addline(buffer, "uniform samplerCube %csampler%u;\n", prefix, i);
+                    break;
+                case WINED3DSTT_VOLUME:
+                    shader_addline(buffer, "uniform sampler3D %csampler%u;\n", prefix, i);
+                    break;
+                default:
+                    shader_addline(buffer, "uniform unsupported_sampler %csampler%u;\n", prefix, i);
+                    FIXME("Unrecognized sampler type: %#x\n", reg_maps->sampler_type[i]);
+                    break;
+            }
+        }
+    }
+
+    /* Declare uniforms for NP2 texcoord fixup:
+     * This is NOT done inside the loop that declares the texture samplers since the NP2 fixup code
+     * is currently only used for the GeforceFX series and when forcing the ARB_npot extension off.
+     * Modern cards just skip the code anyway, so put it inside a separate loop. */
+    if (pshader && ps_args->np2_fixup) {
+
+        struct ps_np2fixup_info* const fixup = ctx_priv->cur_np2fixup_info;
+        UINT cur = 0;
+
+        /* NP2/RECT textures in OpenGL use texcoords in the range [0,width]x[0,height]
+         * while D3D has them in the (normalized) [0,1]x[0,1] range.
+         * samplerNP2Fixup stores texture dimensions and is updated through
+         * shader_glsl_load_np2fixup_constants when the sampler changes. */
+
+        for (i = 0; i < This->baseShader.limits.sampler; ++i) {
+            if (reg_maps->sampler_type[i]) {
+                if (!(ps_args->np2_fixup & (1 << i))) continue;
+
+                if (WINED3DSTT_2D != reg_maps->sampler_type[i]) {
+                    FIXME("Non-2D texture is flagged for NP2 texcoord fixup.\n");
+                    continue;
+                }
+
+                fixup->idx[i] = cur++;
+            }
+        }
+
+        fixup->num_consts = (cur + 1) >> 1;
+        shader_addline(buffer, "uniform vec4 %csamplerNP2Fixup[%u];\n", prefix, fixup->num_consts);
+    }
+
+    /* Declare address variables */
+    for (i = 0, map = reg_maps->address; map; map >>= 1, ++i)
+    {
+        if (map & 1) shader_addline(buffer, "ivec4 A%u;\n", i);
+    }
+
+    /* Declare texture coordinate temporaries and initialize them */
+    for (i = 0, map = reg_maps->texcoord; map; map >>= 1, ++i)
+    {
+        if (map & 1) shader_addline(buffer, "vec4 T%u = gl_TexCoord[%u];\n", i, i);
+    }
+
+    /* Declare input register varyings. Only pixel shader, vertex shaders have that declared in the
+     * helper function shader that is linked in at link time
+     */
+    if (pshader && reg_maps->shader_version.major >= 3)
+    {
+        if (use_vs(device->stateBlock))
+        {
+            shader_addline(buffer, "varying vec4 IN[%u];\n", vec4_varyings(reg_maps->shader_version.major, gl_info));
+        } else {
+            /* TODO: Write a replacement shader for the fixed function vertex pipeline, so this isn't needed.
+             * For fixed function vertex processing + 3.0 pixel shader we need a separate function in the
+             * pixel shader that reads the fixed function color into the packed input registers.
+             */
+            shader_addline(buffer, "vec4 IN[%u];\n", vec4_varyings(reg_maps->shader_version.major, gl_info));
+        }
+    }
+
+    /* Declare output register temporaries */
+    if(This->baseShader.limits.packed_output) {
+        shader_addline(buffer, "vec4 OUT[%u];\n", This->baseShader.limits.packed_output);
+    }
+
+    /* Declare temporary variables */
+    for (i = 0, map = reg_maps->temporary; map; map >>= 1, ++i)
+    {
+        if (map & 1) shader_addline(buffer, "vec4 R%u;\n", i);
+    }
+
+    /* Declare attributes */
+    if (reg_maps->shader_version.type == WINED3D_SHADER_TYPE_VERTEX)
+    {
+        for (i = 0, map = reg_maps->input_registers; map; map >>= 1, ++i)
+        {
+            if (map & 1) shader_addline(buffer, "attribute vec4 attrib%i;\n", i);
+        }
+    }
+
+    /* Declare loop registers aLx */
+    for (i = 0; i < reg_maps->loop_depth; i++) {
+        shader_addline(buffer, "int aL%u;\n", i);
+        shader_addline(buffer, "int tmpInt%u;\n", i);
+    }
+
+    /* Temporary variables for matrix operations */
+    shader_addline(buffer, "vec4 tmp0;\n");
+    shader_addline(buffer, "vec4 tmp1;\n");
+
+    /* Local constants use a different name so they can be loaded once at shader link time
+     * They can't be hardcoded into the shader text via LC = {x, y, z, w}; because the
+     * float -> string conversion can cause precision loss.
+     */
+    if(!This->baseShader.load_local_constsF) {
+        LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry) {
+            shader_addline(buffer, "uniform vec4 %cLC%u;\n", prefix, lconst->idx);
+        }
+    }
+
+    shader_addline(buffer, "const float FLT_MAX = 1e38;\n");
+
+    /* Start the main program */
+    shader_addline(buffer, "void main() {\n");
+    if(pshader && reg_maps->vpos) {
+        /* DirectX apps expect integer values, while OpenGL drivers add approximately 0.5. This causes
+         * off-by-one problems as spotted by the vPos d3d9 visual test. Unfortunately the ATI cards do
+         * not add exactly 0.5, but rather something like 0.49999999 or 0.50000001, which still causes
+         * precision troubles when we just substract 0.5.
+         *
+         * To deal with that just floor() the position. This will eliminate the fraction on all cards.
+         *
+         * TODO: Test how that behaves with multisampling once we can enable multisampling in winex11.
+         *
+         * An advantage of floor is that it works even if the driver doesn't add 1/2. It is somewhat
+         * questionable if 1.5, 2.5, ... are the proper values to return in gl_FragCoord, even though
+         * coordinates specify the pixel centers instead of the pixel corners. This code will behave
+         * correctly on drivers that returns integer values.
+         */
+        shader_addline(buffer, "vpos = floor(vec4(0, ycorrection[0], 0, 0) + gl_FragCoord * vec4(1, ycorrection[1], 1, 1));\n");
+    }
+}
+
+/*****************************************************************************
+ * Functions to generate GLSL strings from DirectX Shader bytecode begin here.
+ *
+ * For more information, see http://wiki.winehq.org/DirectX-Shaders
+ ****************************************************************************/
+
+/* Prototypes */
+static void shader_glsl_add_src_param(const struct wined3d_shader_instruction *ins,
+        const struct wined3d_shader_src_param *wined3d_src, DWORD mask, glsl_src_param_t *glsl_src);
+
+/** Used for opcode modifiers - They multiply the result by the specified amount */
+static const char * const shift_glsl_tab[] = {
+    "",           /*  0 (none) */
+    "2.0 * ",     /*  1 (x2)   */
+    "4.0 * ",     /*  2 (x4)   */
+    "8.0 * ",     /*  3 (x8)   */
+    "16.0 * ",    /*  4 (x16)  */
+    "32.0 * ",    /*  5 (x32)  */
+    "",           /*  6 (x64)  */
+    "",           /*  7 (x128) */
+    "",           /*  8 (d256) */
+    "",           /*  9 (d128) */
+    "",           /* 10 (d64)  */
+    "",           /* 11 (d32)  */
+    "0.0625 * ",  /* 12 (d16)  */
+    "0.125 * ",   /* 13 (d8)   */
+    "0.25 * ",    /* 14 (d4)   */
+    "0.5 * "      /* 15 (d2)   */
+};
+
+/* Generate a GLSL parameter that does the input modifier computation and return the input register/mask to use */
+static void shader_glsl_gen_modifier(DWORD src_modifier, const char *in_reg, const char *in_regswizzle, char *out_str)
+{
+    out_str[0] = 0;
+
+    switch (src_modifier)
+    {
+    case WINED3DSPSM_DZ: /* Need to handle this in the instructions itself (texld & texcrd). */
+    case WINED3DSPSM_DW:
+    case WINED3DSPSM_NONE:
+        sprintf(out_str, "%s%s", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_NEG:
+        sprintf(out_str, "-%s%s", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_NOT:
+        sprintf(out_str, "!%s%s", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_BIAS:
+        sprintf(out_str, "(%s%s - vec4(0.5)%s)", in_reg, in_regswizzle, in_regswizzle);
+        break;
+    case WINED3DSPSM_BIASNEG:
+        sprintf(out_str, "-(%s%s - vec4(0.5)%s)", in_reg, in_regswizzle, in_regswizzle);
+        break;
+    case WINED3DSPSM_SIGN:
+        sprintf(out_str, "(2.0 * (%s%s - 0.5))", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_SIGNNEG:
+        sprintf(out_str, "-(2.0 * (%s%s - 0.5))", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_COMP:
+        sprintf(out_str, "(1.0 - %s%s)", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_X2:
+        sprintf(out_str, "(2.0 * %s%s)", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_X2NEG:
+        sprintf(out_str, "-(2.0 * %s%s)", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_ABS:
+        sprintf(out_str, "abs(%s%s)", in_reg, in_regswizzle);
+        break;
+    case WINED3DSPSM_ABSNEG:
+        sprintf(out_str, "-abs(%s%s)", in_reg, in_regswizzle);
+        break;
+    default:
+        FIXME("Unhandled modifier %u\n", src_modifier);
+        sprintf(out_str, "%s%s", in_reg, in_regswizzle);
+    }
+}
+
+/** Writes the GLSL variable name that corresponds to the register that the
+ * DX opcode parameter is trying to access */
+static void shader_glsl_get_register_name(const struct wined3d_shader_register *reg,
+        char *register_name, BOOL *is_color, const struct wined3d_shader_instruction *ins)
+{
+    /* oPos, oFog and oPts in D3D */
+    static const char * const hwrastout_reg_names[] = { "gl_Position", "gl_FogFragCoord", "gl_PointSize" };
+
+    IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type);
+
+    *is_color = FALSE;
+
+    switch (reg->type)
+    {
+        case WINED3DSPR_TEMP:
+            sprintf(register_name, "R%u", reg->idx);
+            break;
+
+        case WINED3DSPR_INPUT:
+            /* vertex shaders */
+            if (!pshader)
+            {
+                struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+                if (priv->cur_vs_args->swizzle_map & (1 << reg->idx)) *is_color = TRUE;
+                sprintf(register_name, "attrib%u", reg->idx);
+                break;
+            }
+
+            /* pixel shaders >= 3.0 */
+            if (This->baseShader.reg_maps.shader_version.major >= 3)
+            {
+                DWORD idx = ((IWineD3DPixelShaderImpl *)This)->input_reg_map[reg->idx];
+                unsigned int in_count = vec4_varyings(This->baseShader.reg_maps.shader_version.major, gl_info);
+
+                if (reg->rel_addr)
+                {
+                    glsl_src_param_t rel_param;
+
+                    shader_glsl_add_src_param(ins, reg->rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
+
+                    /* Removing a + 0 would be an obvious optimization, but macos doesn't see the NOP
+                     * operation there */
+                    if (idx)
+                    {
+                        if (((IWineD3DPixelShaderImpl *)This)->declared_in_count > in_count)
+                        {
+                            sprintf(register_name,
+                                    "((%s + %u) > %d ? (%s + %u) > %d ? gl_SecondaryColor : gl_Color : IN[%s + %u])",
+                                    rel_param.param_str, idx, in_count - 1, rel_param.param_str, idx, in_count,
+                                    rel_param.param_str, idx);
+                        }
+                        else
+                        {
+                            sprintf(register_name, "IN[%s + %u]", rel_param.param_str, idx);
+                        }
+                    }
+                    else
+                    {
+                        if (((IWineD3DPixelShaderImpl *)This)->declared_in_count > in_count)
+                        {
+                            sprintf(register_name, "((%s) > %d ? (%s) > %d ? gl_SecondaryColor : gl_Color : IN[%s])",
+                                    rel_param.param_str, in_count - 1, rel_param.param_str, in_count,
+                                    rel_param.param_str);
+                        }
+                        else
+                        {
+                            sprintf(register_name, "IN[%s]", rel_param.param_str);
+                        }
+                    }
+                }
+                else
+                {
+                    if (idx == in_count) sprintf(register_name, "gl_Color");
+                    else if (idx == in_count + 1) sprintf(register_name, "gl_SecondaryColor");
+                    else sprintf(register_name, "IN[%u]", idx);
+                }
+            }
+            else
+            {
+                if (reg->idx == 0) strcpy(register_name, "gl_Color");
+                else strcpy(register_name, "gl_SecondaryColor");
+                break;
+            }
+            break;
+
+        case WINED3DSPR_CONST:
+            {
+                const char prefix = pshader ? 'P' : 'V';
+
+                /* Relative addressing */
+                if (reg->rel_addr)
+                {
+                    glsl_src_param_t rel_param;
+                    shader_glsl_add_src_param(ins, reg->rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
+                    if (reg->idx) sprintf(register_name, "%cC[%s + %u]", prefix, rel_param.param_str, reg->idx);
+                    else sprintf(register_name, "%cC[%s]", prefix, rel_param.param_str);
+                }
+                else
+                {
+                    if (shader_constant_is_local(This, reg->idx))
+                        sprintf(register_name, "%cLC%u", prefix, reg->idx);
+                    else
+                        sprintf(register_name, "%cC[%u]", prefix, reg->idx);
+                }
+            }
+            break;
+
+        case WINED3DSPR_CONSTINT:
+            if (pshader) sprintf(register_name, "PI[%u]", reg->idx);
+            else sprintf(register_name, "VI[%u]", reg->idx);
+            break;
+
+        case WINED3DSPR_CONSTBOOL:
+            if (pshader) sprintf(register_name, "PB[%u]", reg->idx);
+            else sprintf(register_name, "VB[%u]", reg->idx);
+            break;
+
+        case WINED3DSPR_TEXTURE: /* case WINED3DSPR_ADDR: */
+            if (pshader) sprintf(register_name, "T%u", reg->idx);
+            else sprintf(register_name, "A%u", reg->idx);
+            break;
+
+        case WINED3DSPR_LOOP:
+            sprintf(register_name, "aL%u", This->baseShader.cur_loop_regno - 1);
+            break;
+
+        case WINED3DSPR_SAMPLER:
+            if (pshader) sprintf(register_name, "Psampler%u", reg->idx);
+            else sprintf(register_name, "Vsampler%u", reg->idx);
+            break;
+
+        case WINED3DSPR_COLOROUT:
+            if (reg->idx >= gl_info->limits.buffers)
+                WARN("Write to render target %u, only %d supported.\n", reg->idx, gl_info->limits.buffers);
+
+            sprintf(register_name, "gl_FragData[%u]", reg->idx);
+            break;
+
+        case WINED3DSPR_RASTOUT:
+            sprintf(register_name, "%s", hwrastout_reg_names[reg->idx]);
+            break;
+
+        case WINED3DSPR_DEPTHOUT:
+            sprintf(register_name, "gl_FragDepth");
+            break;
+
+        case WINED3DSPR_ATTROUT:
+            if (reg->idx == 0) sprintf(register_name, "gl_FrontColor");
+            else sprintf(register_name, "gl_FrontSecondaryColor");
+            break;
+
+        case WINED3DSPR_TEXCRDOUT:
+            /* Vertex shaders >= 3.0: WINED3DSPR_OUTPUT */
+            if (This->baseShader.reg_maps.shader_version.major >= 3) sprintf(register_name, "OUT[%u]", reg->idx);
+            else sprintf(register_name, "gl_TexCoord[%u]", reg->idx);
+            break;
+
+        case WINED3DSPR_MISCTYPE:
+            if (reg->idx == 0)
+            {
+                /* vPos */
+                sprintf(register_name, "vpos");
+            }
+            else if (reg->idx == 1)
+            {
+                /* Note that gl_FrontFacing is a bool, while vFace is
+                 * a float for which the sign determines front/back */
+                sprintf(register_name, "(gl_FrontFacing ? 1.0 : -1.0)");
+            }
+            else
+            {
+                FIXME("Unhandled misctype register %d\n", reg->idx);
+                sprintf(register_name, "unrecognized_register");
+            }
+            break;
+
+        case WINED3DSPR_IMMCONST:
+            switch (reg->immconst_type)
+            {
+                case WINED3D_IMMCONST_FLOAT:
+                    sprintf(register_name, "%.8e", *(const float *)reg->immconst_data);
+                    break;
+
+                case WINED3D_IMMCONST_FLOAT4:
+                    sprintf(register_name, "vec4(%.8e, %.8e, %.8e, %.8e)",
+                            *(const float *)&reg->immconst_data[0], *(const float *)&reg->immconst_data[1],
+                            *(const float *)&reg->immconst_data[2], *(const float *)&reg->immconst_data[3]);
+                    break;
+
+                default:
+                    FIXME("Unhandled immconst type %#x\n", reg->immconst_type);
+                    sprintf(register_name, "<unhandled_immconst_type %#x>", reg->immconst_type);
+            }
+            break;
+
+        default:
+            FIXME("Unhandled register name Type(%d)\n", reg->type);
+            sprintf(register_name, "unrecognized_register");
+            break;
+    }
+}
+
+static void shader_glsl_write_mask_to_str(DWORD write_mask, char *str)
+{
+    *str++ = '.';
+    if (write_mask & WINED3DSP_WRITEMASK_0) *str++ = 'x';
+    if (write_mask & WINED3DSP_WRITEMASK_1) *str++ = 'y';
+    if (write_mask & WINED3DSP_WRITEMASK_2) *str++ = 'z';
+    if (write_mask & WINED3DSP_WRITEMASK_3) *str++ = 'w';
+    *str = '\0';
+}
+
+/* Get the GLSL write mask for the destination register */
+static DWORD shader_glsl_get_write_mask(const struct wined3d_shader_dst_param *param, char *write_mask)
+{
+    DWORD mask = param->write_mask;
+
+    if (shader_is_scalar(&param->reg))
+    {
+        mask = WINED3DSP_WRITEMASK_0;
+        *write_mask = '\0';
+    }
+    else
+    {
+        shader_glsl_write_mask_to_str(mask, write_mask);
+    }
+
+    return mask;
+}
+
+static unsigned int shader_glsl_get_write_mask_size(DWORD write_mask) {
+    unsigned int size = 0;
+
+    if (write_mask & WINED3DSP_WRITEMASK_0) ++size;
+    if (write_mask & WINED3DSP_WRITEMASK_1) ++size;
+    if (write_mask & WINED3DSP_WRITEMASK_2) ++size;
+    if (write_mask & WINED3DSP_WRITEMASK_3) ++size;
+
+    return size;
+}
+
+static void shader_glsl_swizzle_to_str(const DWORD swizzle, BOOL fixup, DWORD mask, char *str)
+{
+    /* For registers of type WINED3DDECLTYPE_D3DCOLOR, data is stored as "bgra",
+     * but addressed as "rgba". To fix this we need to swap the register's x
+     * and z components. */
+    const char *swizzle_chars = fixup ? "zyxw" : "xyzw";
+
+    *str++ = '.';
+    /* swizzle bits fields: wwzzyyxx */
+    if (mask & WINED3DSP_WRITEMASK_0) *str++ = swizzle_chars[swizzle & 0x03];
+    if (mask & WINED3DSP_WRITEMASK_1) *str++ = swizzle_chars[(swizzle >> 2) & 0x03];
+    if (mask & WINED3DSP_WRITEMASK_2) *str++ = swizzle_chars[(swizzle >> 4) & 0x03];
+    if (mask & WINED3DSP_WRITEMASK_3) *str++ = swizzle_chars[(swizzle >> 6) & 0x03];
+    *str = '\0';
+}
+
+static void shader_glsl_get_swizzle(const struct wined3d_shader_src_param *param,
+        BOOL fixup, DWORD mask, char *swizzle_str)
+{
+    if (shader_is_scalar(&param->reg))
+        *swizzle_str = '\0';
+    else
+        shader_glsl_swizzle_to_str(param->swizzle, fixup, mask, swizzle_str);
+}
+
+/* From a given parameter token, generate the corresponding GLSL string.
+ * Also, return the actual register name and swizzle in case the
+ * caller needs this information as well. */
+static void shader_glsl_add_src_param(const struct wined3d_shader_instruction *ins,
+        const struct wined3d_shader_src_param *wined3d_src, DWORD mask, glsl_src_param_t *glsl_src)
+{
+    BOOL is_color = FALSE;
+    char swizzle_str[6];
+
+    glsl_src->reg_name[0] = '\0';
+    glsl_src->param_str[0] = '\0';
+    swizzle_str[0] = '\0';
+
+    shader_glsl_get_register_name(&wined3d_src->reg, glsl_src->reg_name, &is_color, ins);
+    shader_glsl_get_swizzle(wined3d_src, is_color, mask, swizzle_str);
+    shader_glsl_gen_modifier(wined3d_src->modifiers, glsl_src->reg_name, swizzle_str, glsl_src->param_str);
+}
+
+/* From a given parameter token, generate the corresponding GLSL string.
+ * Also, return the actual register name and swizzle in case the
+ * caller needs this information as well. */
+static DWORD shader_glsl_add_dst_param(const struct wined3d_shader_instruction *ins,
+        const struct wined3d_shader_dst_param *wined3d_dst, glsl_dst_param_t *glsl_dst)
+{
+    BOOL is_color = FALSE;
+
+    glsl_dst->mask_str[0] = '\0';
+    glsl_dst->reg_name[0] = '\0';
+
+    shader_glsl_get_register_name(&wined3d_dst->reg, glsl_dst->reg_name, &is_color, ins);
+    return shader_glsl_get_write_mask(wined3d_dst, glsl_dst->mask_str);
+}
+
+/* Append the destination part of the instruction to the buffer, return the effective write mask */
+static DWORD shader_glsl_append_dst_ext(struct wined3d_shader_buffer *buffer,
+        const struct wined3d_shader_instruction *ins, const struct wined3d_shader_dst_param *dst)
+{
+    glsl_dst_param_t glsl_dst;
+    DWORD mask;
+
+    mask = shader_glsl_add_dst_param(ins, dst, &glsl_dst);
+    if (mask) shader_addline(buffer, "%s%s = %s(", glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]);
+
+    return mask;
+}
+
+/* Append the destination part of the instruction to the buffer, return the effective write mask */
+static DWORD shader_glsl_append_dst(struct wined3d_shader_buffer *buffer, const struct wined3d_shader_instruction *ins)
+{
+    return shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]);
+}
+
+/** Process GLSL instruction modifiers */
+static void shader_glsl_add_instruction_modifiers(const struct wined3d_shader_instruction *ins)
+{
+    glsl_dst_param_t dst_param;
+    DWORD modifiers;
+
+    if (!ins->dst_count) return;
+
+    modifiers = ins->dst[0].modifiers;
+    if (!modifiers) return;
+
+    shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+
+    if (modifiers & WINED3DSPDM_SATURATE)
+    {
+        /* _SAT means to clamp the value of the register to between 0 and 1 */
+        shader_addline(ins->ctx->buffer, "%s%s = clamp(%s%s, 0.0, 1.0);\n", dst_param.reg_name,
+                dst_param.mask_str, dst_param.reg_name, dst_param.mask_str);
+    }
+
+    if (modifiers & WINED3DSPDM_MSAMPCENTROID)
+    {
+        FIXME("_centroid modifier not handled\n");
+    }
+
+    if (modifiers & WINED3DSPDM_PARTIALPRECISION)
+    {
+        /* MSDN says this modifier can be safely ignored, so that's what we'll do. */
+    }
+}
+
+static inline const char *shader_get_comp_op(DWORD op)
+{
+    switch (op) {
+        case COMPARISON_GT: return ">";
+        case COMPARISON_EQ: return "==";
+        case COMPARISON_GE: return ">=";
+        case COMPARISON_LT: return "<";
+        case COMPARISON_NE: return "!=";
+        case COMPARISON_LE: return "<=";
+        default:
+            FIXME("Unrecognized comparison value: %u\n", op);
+            return "(\?\?)";
+    }
+}
+
+static void shader_glsl_get_sample_function(const struct wined3d_gl_info *gl_info,
+        DWORD sampler_type, DWORD flags, glsl_sample_function_t *sample_function)
+{
+    BOOL projected = flags & WINED3D_GLSL_SAMPLE_PROJECTED;
+    BOOL texrect = flags & WINED3D_GLSL_SAMPLE_RECT;
+    BOOL lod = flags & WINED3D_GLSL_SAMPLE_LOD;
+    BOOL grad = flags & WINED3D_GLSL_SAMPLE_GRAD;
+
+    /* Note that there's no such thing as a projected cube texture. */
+    switch(sampler_type) {
+        case WINED3DSTT_1D:
+            if(lod) {
+                sample_function->name = projected ? "texture1DProjLod" : "texture1DLod";
+            }
+            else  if (grad)
+            {
+                if (gl_info->supported[EXT_GPU_SHADER4])
+                    sample_function->name = projected ? "texture1DProjGrad" : "texture1DGrad";
+                else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+                    sample_function->name = projected ? "texture1DProjGradARB" : "texture1DGradARB";
+                else
+                {
+                    FIXME("Unsupported 1D grad function.\n");
+                    sample_function->name = "unsupported1DGrad";
+                }
+            }
+            else
+            {
+                sample_function->name = projected ? "texture1DProj" : "texture1D";
+            }
+            sample_function->coord_mask = WINED3DSP_WRITEMASK_0;
+            break;
+        case WINED3DSTT_2D:
+            if(texrect) {
+                if(lod) {
+                    sample_function->name = projected ? "texture2DRectProjLod" : "texture2DRectLod";
+                }
+                else  if (grad)
+                {
+                    if (gl_info->supported[EXT_GPU_SHADER4])
+                        sample_function->name = projected ? "texture2DRectProjGrad" : "texture2DRectGrad";
+                    else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+                        sample_function->name = projected ? "texture2DRectProjGradARB" : "texture2DRectGradARB";
+                    else
+                    {
+                        FIXME("Unsupported RECT grad function.\n");
+                        sample_function->name = "unsupported2DRectGrad";
+                    }
+                }
+                else
+                {
+                    sample_function->name = projected ? "texture2DRectProj" : "texture2DRect";
+                }
+            } else {
+                if(lod) {
+                    sample_function->name = projected ? "texture2DProjLod" : "texture2DLod";
+                }
+                else  if (grad)
+                {
+                    if (gl_info->supported[EXT_GPU_SHADER4])
+                        sample_function->name = projected ? "texture2DProjGrad" : "texture2DGrad";
+                    else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+                        sample_function->name = projected ? "texture2DProjGradARB" : "texture2DGradARB";
+                    else
+                    {
+                        FIXME("Unsupported 2D grad function.\n");
+                        sample_function->name = "unsupported2DGrad";
+                    }
+                }
+                else
+                {
+                    sample_function->name = projected ? "texture2DProj" : "texture2D";
+                }
+            }
+            sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1;
+            break;
+        case WINED3DSTT_CUBE:
+            if(lod) {
+                sample_function->name = "textureCubeLod";
+            }
+            else if (grad)
+            {
+                if (gl_info->supported[EXT_GPU_SHADER4])
+                    sample_function->name = "textureCubeGrad";
+                else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+                    sample_function->name = "textureCubeGradARB";
+                else
+                {
+                    FIXME("Unsupported Cube grad function.\n");
+                    sample_function->name = "unsupportedCubeGrad";
+                }
+            }
+            else
+            {
+                sample_function->name = "textureCube";
+            }
+            sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+            break;
+        case WINED3DSTT_VOLUME:
+            if(lod) {
+                sample_function->name = projected ? "texture3DProjLod" : "texture3DLod";
+            }
+            else  if (grad)
+            {
+                if (gl_info->supported[EXT_GPU_SHADER4])
+                    sample_function->name = projected ? "texture3DProjGrad" : "texture3DGrad";
+                else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+                    sample_function->name = projected ? "texture3DProjGradARB" : "texture3DGradARB";
+                else
+                {
+                    FIXME("Unsupported 3D grad function.\n");
+                    sample_function->name = "unsupported3DGrad";
+                }
+            }
+            else
+            {
+                sample_function->name = projected ? "texture3DProj" : "texture3D";
+            }
+            sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+            break;
+        default:
+            sample_function->name = "";
+            sample_function->coord_mask = 0;
+            FIXME("Unrecognized sampler type: %#x;\n", sampler_type);
+            break;
+    }
+}
+
+static void shader_glsl_append_fixup_arg(char *arguments, const char *reg_name,
+        BOOL sign_fixup, enum fixup_channel_source channel_source)
+{
+    switch(channel_source)
+    {
+        case CHANNEL_SOURCE_ZERO:
+            strcat(arguments, "0.0");
+            break;
+
+        case CHANNEL_SOURCE_ONE:
+            strcat(arguments, "1.0");
+            break;
+
+        case CHANNEL_SOURCE_X:
+            strcat(arguments, reg_name);
+            strcat(arguments, ".x");
+            break;
+
+        case CHANNEL_SOURCE_Y:
+            strcat(arguments, reg_name);
+            strcat(arguments, ".y");
+            break;
+
+        case CHANNEL_SOURCE_Z:
+            strcat(arguments, reg_name);
+            strcat(arguments, ".z");
+            break;
+
+        case CHANNEL_SOURCE_W:
+            strcat(arguments, reg_name);
+            strcat(arguments, ".w");
+            break;
+
+        default:
+            FIXME("Unhandled channel source %#x\n", channel_source);
+            strcat(arguments, "undefined");
+            break;
+    }
+
+    if (sign_fixup) strcat(arguments, " * 2.0 - 1.0");
+}
+
+static void shader_glsl_color_correction(const struct wined3d_shader_instruction *ins, struct color_fixup_desc fixup)
+{
+    struct wined3d_shader_dst_param dst;
+    unsigned int mask_size, remaining;
+    glsl_dst_param_t dst_param;
+    char arguments[256];
+    DWORD mask;
+
+    mask = 0;
+    if (fixup.x_sign_fixup || fixup.x_source != CHANNEL_SOURCE_X) mask |= WINED3DSP_WRITEMASK_0;
+    if (fixup.y_sign_fixup || fixup.y_source != CHANNEL_SOURCE_Y) mask |= WINED3DSP_WRITEMASK_1;
+    if (fixup.z_sign_fixup || fixup.z_source != CHANNEL_SOURCE_Z) mask |= WINED3DSP_WRITEMASK_2;
+    if (fixup.w_sign_fixup || fixup.w_source != CHANNEL_SOURCE_W) mask |= WINED3DSP_WRITEMASK_3;
+    mask &= ins->dst[0].write_mask;
+
+    if (!mask) return; /* Nothing to do */
+
+    if (is_complex_fixup(fixup))
+    {
+        enum complex_fixup complex_fixup = get_complex_fixup(fixup);
+        FIXME("Complex fixup (%#x) not supported\n",complex_fixup);
+        return;
+    }
+
+    mask_size = shader_glsl_get_write_mask_size(mask);
+
+    dst = ins->dst[0];
+    dst.write_mask = mask;
+    shader_glsl_add_dst_param(ins, &dst, &dst_param);
+
+    arguments[0] = '\0';
+    remaining = mask_size;
+    if (mask & WINED3DSP_WRITEMASK_0)
+    {
+        shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.x_sign_fixup, fixup.x_source);
+        if (--remaining) strcat(arguments, ", ");
+    }
+    if (mask & WINED3DSP_WRITEMASK_1)
+    {
+        shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.y_sign_fixup, fixup.y_source);
+        if (--remaining) strcat(arguments, ", ");
+    }
+    if (mask & WINED3DSP_WRITEMASK_2)
+    {
+        shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.z_sign_fixup, fixup.z_source);
+        if (--remaining) strcat(arguments, ", ");
+    }
+    if (mask & WINED3DSP_WRITEMASK_3)
+    {
+        shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.w_sign_fixup, fixup.w_source);
+        if (--remaining) strcat(arguments, ", ");
+    }
+
+    if (mask_size > 1)
+    {
+        shader_addline(ins->ctx->buffer, "%s%s = vec%u(%s);\n",
+                dst_param.reg_name, dst_param.mask_str, mask_size, arguments);
+    }
+    else
+    {
+        shader_addline(ins->ctx->buffer, "%s%s = %s;\n", dst_param.reg_name, dst_param.mask_str, arguments);
+    }
+}
+
+static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_shader_instruction *ins,
+        DWORD sampler, const glsl_sample_function_t *sample_function, DWORD swizzle,
+        const char *dx, const char *dy,
+        const char *bias, const char *coord_reg_fmt, ...)
+{
+    const char *sampler_base;
+    char dst_swizzle[6];
+    struct color_fixup_desc fixup;
+    BOOL np2_fixup = FALSE;
+    BOOL tmirror_tmp_reg = FALSE;
+    va_list args;
+
+    shader_glsl_swizzle_to_str(swizzle, FALSE, ins->dst[0].write_mask, dst_swizzle);
+
+    if (shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type))
+    {
+        const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+        fixup = priv->cur_ps_args->color_fixup[sampler];
+        sampler_base = "Psampler";
+
+        if (priv->cur_ps_args->np2_fixup & (1 << sampler)) {
+            if(bias) {
+                FIXME("Biased sampling from NP2 textures is unsupported\n");
+            } else {
+                np2_fixup = TRUE;
+            }
+        }
+
+        if (priv->cur_ps_args->t_mirror & (1 << sampler))
+        {
+            if (ins->ctx->reg_maps->sampler_type[sampler]==WINED3DSTT_2D)
+            {
+                if (sample_function->coord_mask & WINED3DSP_WRITEMASK_1)
+                {
+                    glsl_src_param_t coord_param;
+                    shader_glsl_add_src_param(ins, &ins->src[0], sample_function->coord_mask, &coord_param);
+
+                    if (ins->src[0].reg.type != WINED3DSPR_INPUT)
+                    {
+                        shader_addline(ins->ctx->buffer, "%s.y=1.0-%s.y;\n",
+                                       coord_param.reg_name, coord_param.reg_name);
+                    }
+                    else
+                    {
+                        tmirror_tmp_reg = TRUE;
+                        shader_addline(ins->ctx->buffer, "tmp0.xy=vec2(%s.x, 1.0-%s.y).xy;\n",
+                                       coord_param.reg_name, coord_param.reg_name);
+                    }
+                }
+                else
+                {
+                    DebugBreak();
+                    FIXME("Unexpected coord_mask with t_mirror\n");
+                }
+            }
+        }
+    } else {
+        sampler_base = "Vsampler";
+        fixup = COLOR_FIXUP_IDENTITY; /* FIXME: Vshader color fixup */
+    }
+
+    shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+    shader_addline(ins->ctx->buffer, "%s(%s%u, ", sample_function->name, sampler_base, sampler);
+
+    if (tmirror_tmp_reg)
+    {
+        shader_addline(ins->ctx->buffer, "%s", "tmp0.xy");
+    }
+    else
+    {
+        va_start(args, coord_reg_fmt);
+        shader_vaddline(ins->ctx->buffer, coord_reg_fmt, args);
+        va_end(args);
+    }
+
+    if(bias) {
+        shader_addline(ins->ctx->buffer, ", %s)%s);\n", bias, dst_swizzle);
+    } else {
+        if (np2_fixup) {
+            const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+            const unsigned char idx = priv->cur_np2fixup_info->idx[sampler];
+
+            shader_addline(ins->ctx->buffer, " * PsamplerNP2Fixup[%u].%s)%s);\n", idx >> 1,
+                           (idx % 2) ? "zw" : "xy", dst_swizzle);
+        } else if(dx && dy) {
+            shader_addline(ins->ctx->buffer, ", %s, %s)%s);\n", dx, dy, dst_swizzle);
+        } else {
+            shader_addline(ins->ctx->buffer, ")%s);\n", dst_swizzle);
+        }
+    }
+
+    if(!is_identity_fixup(fixup)) {
+        shader_glsl_color_correction(ins, fixup);
+    }
+}
+
+/*****************************************************************************
+ * Begin processing individual instruction opcodes
+ ****************************************************************************/
+
+/* Generate GLSL arithmetic functions (dst = src1 + src2) */
+static void shader_glsl_arith(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    DWORD write_mask;
+    char op;
+
+    /* Determine the GLSL operator to use based on the opcode */
+    switch (ins->handler_idx)
+    {
+        case WINED3DSIH_MUL: op = '*'; break;
+        case WINED3DSIH_ADD: op = '+'; break;
+        case WINED3DSIH_SUB: op = '-'; break;
+        default:
+            op = ' ';
+            FIXME("Opcode %#x not yet handled in GLSL\n", ins->handler_idx);
+            break;
+    }
+
+    write_mask = shader_glsl_append_dst(buffer, ins);
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+    shader_addline(buffer, "%s %c %s);\n", src0_param.param_str, op, src1_param.param_str);
+}
+
+/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
+static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
+{
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+    DWORD write_mask;
+
+    write_mask = shader_glsl_append_dst(buffer, ins);
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+
+    /* In vs_1_1 WINED3DSIO_MOV can write to the address register. In later
+     * shader versions WINED3DSIO_MOVA is used for this. */
+    if (ins->ctx->reg_maps->shader_version.major == 1
+            && !shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type)
+            && ins->dst[0].reg.type == WINED3DSPR_ADDR)
+    {
+        /* This is a simple floor() */
+        unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+        if (mask_size > 1) {
+            shader_addline(buffer, "ivec%d(floor(%s)));\n", mask_size, src0_param.param_str);
+        } else {
+            shader_addline(buffer, "int(floor(%s)));\n", src0_param.param_str);
+        }
+    }
+    else if(ins->handler_idx == WINED3DSIH_MOVA)
+    {
+        /* We need to *round* to the nearest int here. */
+        unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+        if (gl_info->supported[EXT_GPU_SHADER4])
+        {
+            if (mask_size > 1)
+                shader_addline(buffer, "ivec%d(round(%s)));\n", mask_size, src0_param.param_str);
+            else
+                shader_addline(buffer, "int(round(%s)));\n", src0_param.param_str);
+        }
+        else
+        {
+            if (mask_size > 1)
+                shader_addline(buffer, "ivec%d(floor(abs(%s) + vec%d(0.5)) * sign(%s)));\n",
+                        mask_size, src0_param.param_str, mask_size, src0_param.param_str);
+            else
+                shader_addline(buffer, "int(floor(abs(%s) + 0.5) * sign(%s)));\n",
+                        src0_param.param_str, src0_param.param_str);
+        }
+    }
+    else
+    {
+        shader_addline(buffer, "%s);\n", src0_param.param_str);
+    }
+}
+
+/* Process the dot product operators DP3 and DP4 in GLSL (dst = dot(src0, src1)) */
+static void shader_glsl_dot(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    DWORD dst_write_mask, src_write_mask;
+    unsigned int dst_size = 0;
+
+    dst_write_mask = shader_glsl_append_dst(buffer, ins);
+    dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
+
+    /* dp3 works on vec3, dp4 on vec4 */
+    if (ins->handler_idx == WINED3DSIH_DP4)
+    {
+        src_write_mask = WINED3DSP_WRITEMASK_ALL;
+    } else {
+        src_write_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    }
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_write_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], src_write_mask, &src1_param);
+
+    if (dst_size > 1) {
+        shader_addline(buffer, "vec%d(dot(%s, %s)));\n", dst_size, src0_param.param_str, src1_param.param_str);
+    } else {
+        shader_addline(buffer, "dot(%s, %s));\n", src0_param.param_str, src1_param.param_str);
+    }
+}
+
+/* Note that this instruction has some restrictions. The destination write mask
+ * can't contain the w component, and the source swizzles have to be .xyzw */
+static void shader_glsl_cross(const struct wined3d_shader_instruction *ins)
+{
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    char dst_mask[6];
+
+    shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+    shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], src_mask, &src1_param);
+    shader_addline(ins->ctx->buffer, "cross(%s, %s)%s);\n", src0_param.param_str, src1_param.param_str, dst_mask);
+}
+
+/* Process the WINED3DSIO_POW instruction in GLSL (dst = |src0|^src1)
+ * Src0 and src1 are scalars. Note that D3D uses the absolute of src0, while
+ * GLSL uses the value as-is. */
+static void shader_glsl_pow(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    DWORD dst_write_mask;
+    unsigned int dst_size;
+
+    dst_write_mask = shader_glsl_append_dst(buffer, ins);
+    dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+
+    if (dst_size > 1) {
+        shader_addline(buffer, "vec%d(pow(abs(%s), %s)));\n", dst_size, src0_param.param_str, src1_param.param_str);
+    } else {
+        shader_addline(buffer, "pow(abs(%s), %s));\n", src0_param.param_str, src1_param.param_str);
+    }
+}
+
+/* Process the WINED3DSIO_LOG instruction in GLSL (dst = log2(|src0|))
+ * Src0 is a scalar. Note that D3D uses the absolute of src0, while
+ * GLSL uses the value as-is. */
+static void shader_glsl_log(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+    DWORD dst_write_mask;
+    unsigned int dst_size;
+
+    dst_write_mask = shader_glsl_append_dst(buffer, ins);
+    dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+
+    if (dst_size > 1)
+    {
+        shader_addline(buffer, "vec%d(%s == 0.0 ? -FLT_MAX : log2(abs(%s))));\n",
+                dst_size, src0_param.param_str, src0_param.param_str);
+    }
+    else
+    {
+        shader_addline(buffer, "%s == 0.0 ? -FLT_MAX : log2(abs(%s)));\n",
+                src0_param.param_str, src0_param.param_str);
+    }
+}
+
+/* Map the opcode 1-to-1 to the GL code (arg->dst = instruction(src0, src1, ...) */
+static void shader_glsl_map2gl(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src_param;
+    const char *instruction;
+    DWORD write_mask;
+    unsigned i;
+
+    /* Determine the GLSL function to use based on the opcode */
+    /* TODO: Possibly make this a table for faster lookups */
+    switch (ins->handler_idx)
+    {
+        case WINED3DSIH_MIN: instruction = "min"; break;
+        case WINED3DSIH_MAX: instruction = "max"; break;
+        case WINED3DSIH_ABS: instruction = "abs"; break;
+        case WINED3DSIH_FRC: instruction = "fract"; break;
+        case WINED3DSIH_EXP: instruction = "exp2"; break;
+        case WINED3DSIH_DSX: instruction = "dFdx"; break;
+        case WINED3DSIH_DSY: instruction = "ycorrection.y * dFdy"; break;
+        default: instruction = "";
+            FIXME("Opcode %#x not yet handled in GLSL\n", ins->handler_idx);
+            break;
+    }
+
+    write_mask = shader_glsl_append_dst(buffer, ins);
+
+    shader_addline(buffer, "%s(", instruction);
+
+    if (ins->src_count)
+    {
+        shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param);
+        shader_addline(buffer, "%s", src_param.param_str);
+        for (i = 1; i < ins->src_count; ++i)
+        {
+            shader_glsl_add_src_param(ins, &ins->src[i], write_mask, &src_param);
+            shader_addline(buffer, ", %s", src_param.param_str);
+        }
+    }
+
+    shader_addline(buffer, "));\n");
+}
+
+static void shader_glsl_nrm(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src_param;
+    unsigned int mask_size;
+    DWORD write_mask;
+    char dst_mask[6];
+
+    write_mask = shader_glsl_get_write_mask(ins->dst, dst_mask);
+    mask_size = shader_glsl_get_write_mask_size(write_mask);
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param);
+
+    shader_addline(buffer, "tmp0.x = length(%s);\n", src_param.param_str);
+    shader_glsl_append_dst(buffer, ins);
+    if (mask_size > 1)
+    {
+        shader_addline(buffer, "tmp0.x == 0.0 ? vec%u(0.0) : (%s / tmp0.x));\n",
+                mask_size, src_param.param_str);
+    }
+    else
+    {
+        shader_addline(buffer, "tmp0.x == 0.0 ? 0.0 : (%s / tmp0.x));\n",
+                src_param.param_str);
+    }
+}
+
+/** Process the WINED3DSIO_EXPP instruction in GLSL:
+ * For shader model 1.x, do the following (and honor the writemask, so use a temporary variable):
+ *   dst.x = 2^(floor(src))
+ *   dst.y = src - floor(src)
+ *   dst.z = 2^src   (partial precision is allowed, but optional)
+ *   dst.w = 1.0;
+ * For 2.0 shaders, just do this (honoring writemask and swizzle):
+ *   dst = 2^src;    (partial precision is allowed, but optional)
+ */
+static void shader_glsl_expp(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src_param);
+
+    if (ins->ctx->reg_maps->shader_version.major < 2)
+    {
+        char dst_mask[6];
+
+        shader_addline(ins->ctx->buffer, "tmp0.x = exp2(floor(%s));\n", src_param.param_str);
+        shader_addline(ins->ctx->buffer, "tmp0.y = %s - floor(%s);\n", src_param.param_str, src_param.param_str);
+        shader_addline(ins->ctx->buffer, "tmp0.z = exp2(%s);\n", src_param.param_str);
+        shader_addline(ins->ctx->buffer, "tmp0.w = 1.0;\n");
+
+        shader_glsl_append_dst(ins->ctx->buffer, ins);
+        shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+        shader_addline(ins->ctx->buffer, "tmp0%s);\n", dst_mask);
+    } else {
+        DWORD write_mask;
+        unsigned int mask_size;
+
+        write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+        mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+        if (mask_size > 1) {
+            shader_addline(ins->ctx->buffer, "vec%d(exp2(%s)));\n", mask_size, src_param.param_str);
+        } else {
+            shader_addline(ins->ctx->buffer, "exp2(%s));\n", src_param.param_str);
+        }
+    }
+}
+
+/** Process the RCP (reciprocal or inverse) opcode in GLSL (dst = 1 / src) */
+static void shader_glsl_rcp(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src_param;
+    DWORD write_mask;
+    unsigned int mask_size;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    mask_size = shader_glsl_get_write_mask_size(write_mask);
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src_param);
+
+    if (mask_size > 1)
+    {
+        shader_addline(ins->ctx->buffer, "vec%d(%s == 0.0 ? FLT_MAX : 1.0 / %s));\n",
+                mask_size, src_param.param_str, src_param.param_str);
+    }
+    else
+    {
+        shader_addline(ins->ctx->buffer, "%s == 0.0 ? FLT_MAX : 1.0 / %s);\n",
+                src_param.param_str, src_param.param_str);
+    }
+}
+
+static void shader_glsl_rsq(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src_param;
+    DWORD write_mask;
+    unsigned int mask_size;
+
+    write_mask = shader_glsl_append_dst(buffer, ins);
+    mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src_param);
+
+    if (mask_size > 1)
+    {
+        shader_addline(buffer, "vec%d(%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s))));\n",
+                mask_size, src_param.param_str, src_param.param_str);
+    }
+    else
+    {
+        shader_addline(buffer, "%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s)));\n",
+                src_param.param_str, src_param.param_str);
+    }
+}
+
+/** Process signed comparison opcodes in GLSL. */
+static void shader_glsl_compare(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    DWORD write_mask;
+    unsigned int mask_size;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    mask_size = shader_glsl_get_write_mask_size(write_mask);
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+
+    if (mask_size > 1) {
+        const char *compare;
+
+        switch(ins->handler_idx)
+        {
+            case WINED3DSIH_SLT: compare = "lessThan"; break;
+            case WINED3DSIH_SGE: compare = "greaterThanEqual"; break;
+            default: compare = "";
+                FIXME("Can't handle opcode %#x\n", ins->handler_idx);
+        }
+
+        shader_addline(ins->ctx->buffer, "vec%d(%s(%s, %s)));\n", mask_size, compare,
+                src0_param.param_str, src1_param.param_str);
+    } else {
+        switch(ins->handler_idx)
+        {
+            case WINED3DSIH_SLT:
+                /* Step(src0, src1) is not suitable here because if src0 == src1 SLT is supposed,
+                 * to return 0.0 but step returns 1.0 because step is not < x
+                 * An alternative is a bvec compare padded with an unused second component.
+                 * step(src1 * -1.0, src0 * -1.0) is not an option because it suffers from the same
+                 * issue. Playing with not() is not possible either because not() does not accept
+                 * a scalar.
+                 */
+                shader_addline(ins->ctx->buffer, "(%s < %s) ? 1.0 : 0.0);\n",
+                        src0_param.param_str, src1_param.param_str);
+                break;
+            case WINED3DSIH_SGE:
+                /* Here we can use the step() function and safe a conditional */
+                shader_addline(ins->ctx->buffer, "step(%s, %s));\n", src1_param.param_str, src0_param.param_str);
+                break;
+            default:
+                FIXME("Can't handle opcode %#x\n", ins->handler_idx);
+        }
+
+    }
+}
+
+/** Process CMP instruction in GLSL (dst = src0 >= 0.0 ? src1 : src2), per channel */
+static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    glsl_src_param_t src2_param;
+    DWORD write_mask, cmp_channel = 0;
+    unsigned int i, j;
+    char mask_char[6];
+    BOOL temp_destination = FALSE;
+
+    if (shader_is_scalar(&ins->src[0].reg))
+    {
+        write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+        shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
+        shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+        shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+        shader_addline(ins->ctx->buffer, "%s >= 0.0 ? %s : %s);\n",
+                       src0_param.param_str, src1_param.param_str, src2_param.param_str);
+    } else {
+        DWORD dst_mask = ins->dst[0].write_mask;
+        struct wined3d_shader_dst_param dst = ins->dst[0];
+
+        /* Cycle through all source0 channels */
+        for (i=0; i<4; i++) {
+            write_mask = 0;
+            /* Find the destination channels which use the current source0 channel */
+            for (j=0; j<4; j++) {
+                if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i)
+                {
+                    write_mask |= WINED3DSP_WRITEMASK_0 << j;
+                    cmp_channel = WINED3DSP_WRITEMASK_0 << j;
+                }
+            }
+            dst.write_mask = dst_mask & write_mask;
+
+            /* Splitting the cmp instruction up in multiple lines imposes a problem:
+            * The first lines may overwrite source parameters of the following lines.
+            * Deal with that by using a temporary destination register if needed
+            */
+            if ((ins->src[0].reg.idx == ins->dst[0].reg.idx
+                    && ins->src[0].reg.type == ins->dst[0].reg.type)
+                    || (ins->src[1].reg.idx == ins->dst[0].reg.idx
+                    && ins->src[1].reg.type == ins->dst[0].reg.type)
+                    || (ins->src[2].reg.idx == ins->dst[0].reg.idx
+                    && ins->src[2].reg.type == ins->dst[0].reg.type))
+            {
+                write_mask = shader_glsl_get_write_mask(&dst, mask_char);
+                if (!write_mask) continue;
+                shader_addline(ins->ctx->buffer, "tmp0%s = (", mask_char);
+                temp_destination = TRUE;
+            } else {
+                write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst);
+                if (!write_mask) continue;
+            }
+
+            shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param);
+            shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+            shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+            shader_addline(ins->ctx->buffer, "%s >= 0.0 ? %s : %s);\n",
+                        src0_param.param_str, src1_param.param_str, src2_param.param_str);
+        }
+
+        if(temp_destination) {
+            shader_glsl_get_write_mask(&ins->dst[0], mask_char);
+            shader_glsl_append_dst(ins->ctx->buffer, ins);
+            shader_addline(ins->ctx->buffer, "tmp0%s);\n", mask_char);
+        }
+    }
+
+}
+
+/** Process the CND opcode in GLSL (dst = (src0 > 0.5) ? src1 : src2) */
+/* For ps 1.1-1.3, only a single component of src0 is used. For ps 1.4
+ * the compare is done per component of src0. */
+static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins)
+{
+    struct wined3d_shader_dst_param dst;
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    glsl_src_param_t src2_param;
+    DWORD write_mask, cmp_channel = 0;
+    unsigned int i, j;
+    DWORD dst_mask;
+    DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
+            ins->ctx->reg_maps->shader_version.minor);
+
+    if (shader_version < WINED3D_SHADER_VERSION(1, 4))
+    {
+        write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+        shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+        shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+        shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+        /* Fun: The D3DSI_COISSUE flag changes the semantic of the cnd instruction for < 1.4 shaders */
+        if (ins->coissue)
+        {
+            shader_addline(ins->ctx->buffer, "%s /* COISSUE! */);\n", src1_param.param_str);
+        } else {
+            shader_addline(ins->ctx->buffer, "%s > 0.5 ? %s : %s);\n",
+                    src0_param.param_str, src1_param.param_str, src2_param.param_str);
+        }
+        return;
+    }
+    /* Cycle through all source0 channels */
+    dst_mask = ins->dst[0].write_mask;
+    dst = ins->dst[0];
+    for (i=0; i<4; i++) {
+        write_mask = 0;
+        /* Find the destination channels which use the current source0 channel */
+        for (j=0; j<4; j++) {
+            if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i)
+            {
+                write_mask |= WINED3DSP_WRITEMASK_0 << j;
+                cmp_channel = WINED3DSP_WRITEMASK_0 << j;
+            }
+        }
+
+        dst.write_mask = dst_mask & write_mask;
+        write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst);
+        if (!write_mask) continue;
+
+        shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param);
+        shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+        shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+        shader_addline(ins->ctx->buffer, "%s > 0.5 ? %s : %s);\n",
+                src0_param.param_str, src1_param.param_str, src2_param.param_str);
+    }
+}
+
+/** GLSL code generation for WINED3DSIO_MAD: Multiply the first 2 opcodes, then add the last */
+static void shader_glsl_mad(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    glsl_src_param_t src2_param;
+    DWORD write_mask;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+    shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+    shader_addline(ins->ctx->buffer, "(%s * %s) + %s);\n",
+            src0_param.param_str, src1_param.param_str, src2_param.param_str);
+}
+
+/* Handles transforming all WINED3DSIO_M?x? opcodes for
+   Vertex shaders to GLSL codes */
+static void shader_glsl_mnxn(const struct wined3d_shader_instruction *ins)
+{
+    int i;
+    int nComponents = 0;
+    struct wined3d_shader_dst_param tmp_dst = {{0}};
+    struct wined3d_shader_src_param tmp_src[2] = {{{0}}};
+    struct wined3d_shader_instruction tmp_ins;
+
+    memset(&tmp_ins, 0, sizeof(tmp_ins));
+
+    /* Set constants for the temporary argument */
+    tmp_ins.ctx = ins->ctx;
+    tmp_ins.dst_count = 1;
+    tmp_ins.dst = &tmp_dst;
+    tmp_ins.src_count = 2;
+    tmp_ins.src = tmp_src;
+
+    switch(ins->handler_idx)
+    {
+        case WINED3DSIH_M4x4:
+            nComponents = 4;
+            tmp_ins.handler_idx = WINED3DSIH_DP4;
+            break;
+        case WINED3DSIH_M4x3:
+            nComponents = 3;
+            tmp_ins.handler_idx = WINED3DSIH_DP4;
+            break;
+        case WINED3DSIH_M3x4:
+            nComponents = 4;
+            tmp_ins.handler_idx = WINED3DSIH_DP3;
+            break;
+        case WINED3DSIH_M3x3:
+            nComponents = 3;
+            tmp_ins.handler_idx = WINED3DSIH_DP3;
+            break;
+        case WINED3DSIH_M3x2:
+            nComponents = 2;
+            tmp_ins.handler_idx = WINED3DSIH_DP3;
+            break;
+        default:
+            break;
+    }
+
+    tmp_dst = ins->dst[0];
+    tmp_src[0] = ins->src[0];
+    tmp_src[1] = ins->src[1];
+    for (i = 0; i < nComponents; ++i)
+    {
+        tmp_dst.write_mask = WINED3DSP_WRITEMASK_0 << i;
+        shader_glsl_dot(&tmp_ins);
+        ++tmp_src[1].reg.idx;
+    }
+}
+
+/**
+    The LRP instruction performs a component-wise linear interpolation
+    between the second and third operands using the first operand as the
+    blend factor.  Equation:  (dst = src2 + src0 * (src1 - src2))
+    This is equivalent to mix(src2, src1, src0);
+*/
+static void shader_glsl_lrp(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    glsl_src_param_t src2_param;
+    DWORD write_mask;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+    shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+    shader_addline(ins->ctx->buffer, "mix(%s, %s, %s));\n",
+            src2_param.param_str, src1_param.param_str, src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_LIT instruction in GLSL:
+ * dst.x = dst.w = 1.0
+ * dst.y = (src0.x > 0) ? src0.x
+ * dst.z = (src0.x > 0) ? ((src0.y > 0) ? pow(src0.y, src.w) : 0) : 0
+ *                                        where src.w is clamped at +- 128
+ */
+static void shader_glsl_lit(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    glsl_src_param_t src3_param;
+    char dst_mask[6];
+
+    shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_1, &src1_param);
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src3_param);
+
+    /* The sdk specifies the instruction like this
+     * dst.x = 1.0;
+     * if(src.x > 0.0) dst.y = src.x
+     * else dst.y = 0.0.
+     * if(src.x > 0.0 && src.y > 0.0) dst.z = pow(src.y, power);
+     * else dst.z = 0.0;
+     * dst.w = 1.0;
+     *
+     * Obviously that has quite a few conditionals in it which we don't like. So the first step is this:
+     * dst.x = 1.0                                  ... No further explanation needed
+     * dst.y = max(src.y, 0.0);                     ... If x < 0.0, use 0.0, otherwise x. Same as the conditional
+     * dst.z = x > 0.0 ? pow(max(y, 0.0), p) : 0;   ... 0 ^ power is 0, and otherwise we use y anyway
+     * dst.w = 1.0.                                 ... Nothing fancy.
+     *
+     * So we still have one conditional in there. So do this:
+     * dst.z = pow(max(0.0, src.y) * step(0.0, src.x), power);
+     *
+     * step(0.0, x) will return 1 if src.x > 0.0, and 0 otherwise. So if y is 0 we get pow(0.0 * 1.0, power),
+     * which sets dst.z to 0. If y > 0, but x = 0.0, we get pow(y * 0.0, power), which results in 0 too.
+     * if both x and y are > 0, we get pow(y * 1.0, power), as it is supposed to
+     */
+    shader_addline(ins->ctx->buffer,
+            "vec4(1.0, max(%s, 0.0), pow(max(0.0, %s) * step(0.0, %s), clamp(%s, -128.0, 128.0)), 1.0)%s);\n",
+            src0_param.param_str, src1_param.param_str, src0_param.param_str, src3_param.param_str, dst_mask);
+}
+
+/** Process the WINED3DSIO_DST instruction in GLSL:
+ * dst.x = 1.0
+ * dst.y = src0.x * src0.y
+ * dst.z = src0.z
+ * dst.w = src1.w
+ */
+static void shader_glsl_dst(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0y_param;
+    glsl_src_param_t src0z_param;
+    glsl_src_param_t src1y_param;
+    glsl_src_param_t src1w_param;
+    char dst_mask[6];
+
+    shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_1, &src0y_param);
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &src0z_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_1, &src1y_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_3, &src1w_param);
+
+    shader_addline(ins->ctx->buffer, "vec4(1.0, %s * %s, %s, %s))%s;\n",
+            src0y_param.param_str, src1y_param.param_str, src0z_param.param_str, src1w_param.param_str, dst_mask);
+}
+
+/** Process the WINED3DSIO_SINCOS instruction in GLSL:
+ * VS 2.0 requires that specific cosine and sine constants be passed to this instruction so the hardware
+ * can handle it.  But, these functions are built-in for GLSL, so we can just ignore the last 2 params.
+ *
+ * dst.x = cos(src0.?)
+ * dst.y = sin(src0.?)
+ * dst.z = dst.z
+ * dst.w = dst.w
+ */
+static void shader_glsl_sincos(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    DWORD write_mask;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+
+    switch (write_mask) {
+        case WINED3DSP_WRITEMASK_0:
+            shader_addline(ins->ctx->buffer, "cos(%s));\n", src0_param.param_str);
+            break;
+
+        case WINED3DSP_WRITEMASK_1:
+            shader_addline(ins->ctx->buffer, "sin(%s));\n", src0_param.param_str);
+            break;
+
+        case (WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1):
+            shader_addline(ins->ctx->buffer, "vec2(cos(%s), sin(%s)));\n", src0_param.param_str, src0_param.param_str);
+            break;
+
+        default:
+            ERR("Write mask should be .x, .y or .xy\n");
+            break;
+    }
+}
+
+/* sgn in vs_2_0 has 2 extra parameters(registers for temporary storage) which we don't use
+ * here. But those extra parameters require a dedicated function for sgn, since map2gl would
+ * generate invalid code
+ */
+static void shader_glsl_sgn(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    DWORD write_mask;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+
+    shader_addline(ins->ctx->buffer, "sign(%s));\n", src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_LOOP instruction in GLSL:
+ * Start a for() loop where src1.y is the initial value of aL,
+ *  increment aL by src1.z for a total of src1.x iterations.
+ *  Need to use a temporary variable for this operation.
+ */
+/* FIXME: I don't think nested loops will work correctly this way. */
+static void shader_glsl_loop(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src1_param;
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    const DWORD *control_values = NULL;
+    const local_constant *constant;
+
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_ALL, &src1_param);
+
+    /* Try to hardcode the loop control parameters if possible. Direct3D 9 class hardware doesn't support real
+     * varying indexing, but Microsoft designed this feature for Shader model 2.x+. If the loop control is
+     * known at compile time, the GLSL compiler can unroll the loop, and replace indirect addressing with direct
+     * addressing.
+     */
+    if (ins->src[1].reg.type == WINED3DSPR_CONSTINT)
+    {
+        LIST_FOR_EACH_ENTRY(constant, &shader->baseShader.constantsI, local_constant, entry) {
+            if (constant->idx == ins->src[1].reg.idx)
+            {
+                control_values = constant->value;
+                break;
+            }
+        }
+    }
+
+    if (control_values)
+    {
+        struct wined3d_shader_loop_control loop_control;
+        loop_control.count = control_values[0];
+        loop_control.start = control_values[1];
+        loop_control.step = (int)control_values[2];
+
+        if (loop_control.step > 0)
+        {
+            shader_addline(ins->ctx->buffer, "for (aL%u = %u; aL%u < (%u * %d + %u); aL%u += %d) {\n",
+                    shader->baseShader.cur_loop_depth, loop_control.start,
+                    shader->baseShader.cur_loop_depth, loop_control.count, loop_control.step, loop_control.start,
+                    shader->baseShader.cur_loop_depth, loop_control.step);
+        }
+        else if (loop_control.step < 0)
+        {
+            shader_addline(ins->ctx->buffer, "for (aL%u = %u; aL%u > (%u * %d + %u); aL%u += %d) {\n",
+                    shader->baseShader.cur_loop_depth, loop_control.start,
+                    shader->baseShader.cur_loop_depth, loop_control.count, loop_control.step, loop_control.start,
+                    shader->baseShader.cur_loop_depth, loop_control.step);
+        }
+        else
+        {
+            shader_addline(ins->ctx->buffer, "for (aL%u = %u, tmpInt%u = 0; tmpInt%u < %u; tmpInt%u++) {\n",
+                    shader->baseShader.cur_loop_depth, loop_control.start, shader->baseShader.cur_loop_depth,
+                    shader->baseShader.cur_loop_depth, loop_control.count,
+                    shader->baseShader.cur_loop_depth);
+        }
+    } else {
+        shader_addline(ins->ctx->buffer,
+                "for (tmpInt%u = 0, aL%u = %s.y; tmpInt%u < %s.x; tmpInt%u++, aL%u += %s.z) {\n",
+                shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_regno,
+                src1_param.reg_name, shader->baseShader.cur_loop_depth, src1_param.reg_name,
+                shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_regno, src1_param.reg_name);
+    }
+
+    shader->baseShader.cur_loop_depth++;
+    shader->baseShader.cur_loop_regno++;
+}
+
+static void shader_glsl_end(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+
+    shader_addline(ins->ctx->buffer, "}\n");
+
+    if (ins->handler_idx == WINED3DSIH_ENDLOOP)
+    {
+        shader->baseShader.cur_loop_depth--;
+        shader->baseShader.cur_loop_regno--;
+    }
+
+    if (ins->handler_idx == WINED3DSIH_ENDREP)
+    {
+        shader->baseShader.cur_loop_depth--;
+    }
+}
+
+static void shader_glsl_rep(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    glsl_src_param_t src0_param;
+    const DWORD *control_values = NULL;
+    const local_constant *constant;
+
+    /* Try to hardcode local values to help the GLSL compiler to unroll and optimize the loop */
+    if (ins->src[0].reg.type == WINED3DSPR_CONSTINT)
+    {
+        LIST_FOR_EACH_ENTRY(constant, &shader->baseShader.constantsI, local_constant, entry)
+        {
+            if (constant->idx == ins->src[0].reg.idx)
+            {
+                control_values = constant->value;
+                break;
+            }
+        }
+    }
+
+    if(control_values) {
+        shader_addline(ins->ctx->buffer, "for (tmpInt%d = 0; tmpInt%d < %d; tmpInt%d++) {\n",
+                       shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_depth,
+                       control_values[0], shader->baseShader.cur_loop_depth);
+    } else {
+        shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+        shader_addline(ins->ctx->buffer, "for (tmpInt%d = 0; tmpInt%d < %s; tmpInt%d++) {\n",
+                shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_depth,
+                src0_param.param_str, shader->baseShader.cur_loop_depth);
+    }
+    shader->baseShader.cur_loop_depth++;
+}
+
+static void shader_glsl_if(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+    shader_addline(ins->ctx->buffer, "if (%s) {\n", src0_param.param_str);
+}
+
+static void shader_glsl_ifc(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+
+    shader_addline(ins->ctx->buffer, "if (%s %s %s) {\n",
+            src0_param.param_str, shader_get_comp_op(ins->flags), src1_param.param_str);
+}
+
+static void shader_glsl_else(const struct wined3d_shader_instruction *ins)
+{
+    shader_addline(ins->ctx->buffer, "} else {\n");
+}
+
+static void shader_glsl_break(const struct wined3d_shader_instruction *ins)
+{
+    shader_addline(ins->ctx->buffer, "break;\n");
+}
+
+/* FIXME: According to MSDN the compare is done per component. */
+static void shader_glsl_breakc(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+
+    shader_addline(ins->ctx->buffer, "if (%s %s %s) break;\n",
+            src0_param.param_str, shader_get_comp_op(ins->flags), src1_param.param_str);
+}
+
+static void shader_glsl_label(const struct wined3d_shader_instruction *ins)
+{
+    shader_addline(ins->ctx->buffer, "}\n");
+    shader_addline(ins->ctx->buffer, "void subroutine%u () {\n",  ins->src[0].reg.idx);
+}
+
+static void shader_glsl_call(const struct wined3d_shader_instruction *ins)
+{
+    shader_addline(ins->ctx->buffer, "subroutine%u();\n", ins->src[0].reg.idx);
+}
+
+static void shader_glsl_callnz(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src1_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+    shader_addline(ins->ctx->buffer, "if (%s) subroutine%u();\n", src1_param.param_str, ins->src[0].reg.idx);
+}
+
+static void shader_glsl_ret(const struct wined3d_shader_instruction *ins)
+{
+    /* No-op. The closing } is written when a new function is started, and at the end of the shader. This
+     * function only suppresses the unhandled instruction warning
+     */
+}
+
+/*********************************************
+ * Pixel Shader Specific Code begins here
+ ********************************************/
+static void shader_glsl_tex(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+    DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
+            ins->ctx->reg_maps->shader_version.minor);
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_sample_function_t sample_function;
+    DWORD sample_flags = 0;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
+    DWORD sampler_idx;
+    DWORD mask = 0, swizzle;
+
+    /* 1.0-1.4: Use destination register as sampler source.
+     * 2.0+: Use provided sampler source. */
+    if (shader_version < WINED3D_SHADER_VERSION(2,0)) sampler_idx = ins->dst[0].reg.idx;
+    else sampler_idx = ins->src[1].reg.idx;
+    sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+
+    if (shader_version < WINED3D_SHADER_VERSION(1,4))
+    {
+        const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+        DWORD flags = (priv->cur_ps_args->tex_transform >> (sampler_idx * WINED3D_PSARGS_TEXTRANSFORM_SHIFT))
+                      & WINED3D_PSARGS_TEXTRANSFORM_MASK;
+
+        /* Projected cube textures don't make a lot of sense, the resulting coordinates stay the same. */
+        if (flags & WINED3D_PSARGS_PROJECTED && sampler_type != WINED3DSTT_CUBE) {
+            sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+            switch (flags & ~WINED3D_PSARGS_PROJECTED) {
+                case WINED3DTTFF_COUNT1: FIXME("WINED3DTTFF_PROJECTED with WINED3DTTFF_COUNT1?\n"); break;
+                case WINED3DTTFF_COUNT2: mask = WINED3DSP_WRITEMASK_1; break;
+                case WINED3DTTFF_COUNT3: mask = WINED3DSP_WRITEMASK_2; break;
+                case WINED3DTTFF_COUNT4:
+                case WINED3DTTFF_DISABLE: mask = WINED3DSP_WRITEMASK_3; break;
+            }
+        }
+    }
+    else if (shader_version < WINED3D_SHADER_VERSION(2,0))
+    {
+        DWORD src_mod = ins->src[0].modifiers;
+
+        if (src_mod == WINED3DSPSM_DZ) {
+            sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+            mask = WINED3DSP_WRITEMASK_2;
+        } else if (src_mod == WINED3DSPSM_DW) {
+            sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+            mask = WINED3DSP_WRITEMASK_3;
+        }
+    } else {
+        if (ins->flags & WINED3DSI_TEXLD_PROJECT)
+        {
+            /* ps 2.0 texldp instruction always divides by the fourth component. */
+            sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+            mask = WINED3DSP_WRITEMASK_3;
+        }
+    }
+
+    if(deviceImpl->stateBlock->textures[sampler_idx] &&
+       IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
+        sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
+    }
+
+    shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
+    mask |= sample_function.coord_mask;
+
+    if (shader_version < WINED3D_SHADER_VERSION(2,0)) swizzle = WINED3DSP_NOSWIZZLE;
+    else swizzle = ins->src[1].swizzle;
+
+    /* 1.0-1.3: Use destination register as coordinate source.
+       1.4+: Use provided coordinate source register. */
+    if (shader_version < WINED3D_SHADER_VERSION(1,4))
+    {
+        char coord_mask[6];
+        shader_glsl_write_mask_to_str(mask, coord_mask);
+        shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, NULL,
+                "T%u%s", sampler_idx, coord_mask);
+    } else {
+        glsl_src_param_t coord_param;
+        shader_glsl_add_src_param(ins, &ins->src[0], mask, &coord_param);
+        if (ins->flags & WINED3DSI_TEXLD_BIAS)
+        {
+            glsl_src_param_t bias;
+            shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &bias);
+            shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, bias.param_str,
+                    "%s", coord_param.param_str);
+        } else {
+            shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, NULL,
+                    "%s", coord_param.param_str);
+        }
+    }
+}
+
+static void shader_glsl_texldd(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_sample_function_t sample_function;
+    glsl_src_param_t coord_param, dx_param, dy_param;
+    DWORD sample_flags = WINED3D_GLSL_SAMPLE_GRAD;
+    DWORD sampler_type;
+    DWORD sampler_idx;
+    DWORD swizzle = ins->src[1].swizzle;
+
+    if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4])
+    {
+        FIXME("texldd used, but not supported by hardware. Falling back to regular tex\n");
+        shader_glsl_tex(ins);
+        return;
+    }
+
+    sampler_idx = ins->src[1].reg.idx;
+    sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    if(deviceImpl->stateBlock->textures[sampler_idx] &&
+       IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
+        sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
+    }
+
+    shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
+    shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
+    shader_glsl_add_src_param(ins, &ins->src[2], sample_function.coord_mask, &dx_param);
+    shader_glsl_add_src_param(ins, &ins->src[3], sample_function.coord_mask, &dy_param);
+
+    shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, dx_param.param_str, dy_param.param_str, NULL,
+                                "%s", coord_param.param_str);
+}
+
+static void shader_glsl_texldl(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_sample_function_t sample_function;
+    glsl_src_param_t coord_param, lod_param;
+    DWORD sample_flags = WINED3D_GLSL_SAMPLE_LOD;
+    DWORD sampler_type;
+    DWORD sampler_idx;
+    DWORD swizzle = ins->src[1].swizzle;
+
+    sampler_idx = ins->src[1].reg.idx;
+    sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    if(deviceImpl->stateBlock->textures[sampler_idx] &&
+       IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
+        sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
+    }
+    shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
+    shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &lod_param);
+
+    if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4]
+            && shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type))
+    {
+        /* The GLSL spec claims the Lod sampling functions are only supported in vertex shaders.
+         * However, they seem to work just fine in fragment shaders as well. */
+        WARN("Using %s in fragment shader.\n", sample_function.name);
+    }
+    shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, lod_param.param_str,
+            "%s", coord_param.param_str);
+}
+
+static void shader_glsl_texcoord(const struct wined3d_shader_instruction *ins)
+{
+    /* FIXME: Make this work for more than just 2D textures */
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    DWORD write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+    if (!(ins->ctx->reg_maps->shader_version.major == 1 && ins->ctx->reg_maps->shader_version.minor == 4))
+    {
+        char dst_mask[6];
+
+        shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+        shader_addline(buffer, "clamp(gl_TexCoord[%u], 0.0, 1.0)%s);\n",
+                ins->dst[0].reg.idx, dst_mask);
+    } else {
+        DWORD reg = ins->src[0].reg.idx;
+        DWORD src_mod = ins->src[0].modifiers;
+        char dst_swizzle[6];
+
+        shader_glsl_get_swizzle(&ins->src[0], FALSE, write_mask, dst_swizzle);
+
+        if (src_mod == WINED3DSPSM_DZ) {
+            glsl_src_param_t div_param;
+            unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+            shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &div_param);
+
+            if (mask_size > 1) {
+                shader_addline(buffer, "gl_TexCoord[%u]%s / vec%d(%s));\n", reg, dst_swizzle, mask_size, div_param.param_str);
+            } else {
+                shader_addline(buffer, "gl_TexCoord[%u]%s / %s);\n", reg, dst_swizzle, div_param.param_str);
+            }
+        } else if (src_mod == WINED3DSPSM_DW) {
+            glsl_src_param_t div_param;
+            unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+            shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &div_param);
+
+            if (mask_size > 1) {
+                shader_addline(buffer, "gl_TexCoord[%u]%s / vec%d(%s));\n", reg, dst_swizzle, mask_size, div_param.param_str);
+            } else {
+                shader_addline(buffer, "gl_TexCoord[%u]%s / %s);\n", reg, dst_swizzle, div_param.param_str);
+            }
+        } else {
+            shader_addline(buffer, "gl_TexCoord[%u]%s);\n", reg, dst_swizzle);
+        }
+    }
+}
+
+/** Process the WINED3DSIO_TEXDP3TEX instruction in GLSL:
+ * Take a 3-component dot product of the TexCoord[dstreg] and src,
+ * then perform a 1D texture lookup from stage dstregnum, place into dst. */
+static void shader_glsl_texdp3tex(const struct wined3d_shader_instruction *ins)
+{
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_src_param_t src0_param;
+    glsl_sample_function_t sample_function;
+    DWORD sampler_idx = ins->dst[0].reg.idx;
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    UINT mask_size;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+    /* Do I have to take care about the projected bit? I don't think so, since the dp3 returns only one
+     * scalar, and projected sampling would require 4.
+     *
+     * It is a dependent read - not valid with conditional NP2 textures
+     */
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+    mask_size = shader_glsl_get_write_mask_size(sample_function.coord_mask);
+
+    switch(mask_size)
+    {
+        case 1:
+            shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+                    "dot(gl_TexCoord[%u].xyz, %s)", sampler_idx, src0_param.param_str);
+            break;
+
+        case 2:
+            shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+                    "vec2(dot(gl_TexCoord[%u].xyz, %s), 0.0)", sampler_idx, src0_param.param_str);
+            break;
+
+        case 3:
+            shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+                    "vec3(dot(gl_TexCoord[%u].xyz, %s), 0.0, 0.0)", sampler_idx, src0_param.param_str);
+            break;
+
+        default:
+            FIXME("Unexpected mask size %u\n", mask_size);
+            break;
+    }
+}
+
+/** Process the WINED3DSIO_TEXDP3 instruction in GLSL:
+ * Take a 3-component dot product of the TexCoord[dstreg] and src. */
+static void shader_glsl_texdp3(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    DWORD dstreg = ins->dst[0].reg.idx;
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    DWORD dst_mask;
+    unsigned int mask_size;
+
+    dst_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    mask_size = shader_glsl_get_write_mask_size(dst_mask);
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+    if (mask_size > 1) {
+        shader_addline(ins->ctx->buffer, "vec%d(dot(T%u.xyz, %s)));\n", mask_size, dstreg, src0_param.param_str);
+    } else {
+        shader_addline(ins->ctx->buffer, "dot(T%u.xyz, %s));\n", dstreg, src0_param.param_str);
+    }
+}
+
+/** Process the WINED3DSIO_TEXDEPTH instruction in GLSL:
+ * Calculate the depth as dst.x / dst.y   */
+static void shader_glsl_texdepth(const struct wined3d_shader_instruction *ins)
+{
+    glsl_dst_param_t dst_param;
+
+    shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+
+    /* Tests show that texdepth never returns anything below 0.0, and that r5.y is clamped to 1.0.
+     * Negative input is accepted, -0.25 / -0.5 returns 0.5. GL should clamp gl_FragDepth to [0;1], but
+     * this doesn't always work, so clamp the results manually. Whether or not the x value is clamped at 1
+     * too is irrelevant, since if x = 0, any y value < 1.0 (and > 1.0 is not allowed) results in a result
+     * >= 1.0 or < 0.0
+     */
+    shader_addline(ins->ctx->buffer, "gl_FragDepth = clamp((%s.x / min(%s.y, 1.0)), 0.0, 1.0);\n",
+            dst_param.reg_name, dst_param.reg_name);
+}
+
+/** Process the WINED3DSIO_TEXM3X2DEPTH instruction in GLSL:
+ * Last row of a 3x2 matrix multiply, use the result to calculate the depth:
+ * Calculate tmp0.y = TexCoord[dstreg] . src.xyz;  (tmp0.x has already been calculated)
+ * depth = (tmp0.y == 0.0) ? 1.0 : tmp0.x / tmp0.y
+ */
+static void shader_glsl_texm3x2depth(const struct wined3d_shader_instruction *ins)
+{
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    DWORD dstreg = ins->dst[0].reg.idx;
+    glsl_src_param_t src0_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+    shader_addline(ins->ctx->buffer, "tmp0.y = dot(T%u.xyz, %s);\n", dstreg, src0_param.param_str);
+    shader_addline(ins->ctx->buffer, "gl_FragDepth = (tmp0.y == 0.0) ? 1.0 : clamp(tmp0.x / tmp0.y, 0.0, 1.0);\n");
+}
+
+/** Process the WINED3DSIO_TEXM3X2PAD instruction in GLSL
+ * Calculate the 1st of a 2-row matrix multiplication. */
+static void shader_glsl_texm3x2pad(const struct wined3d_shader_instruction *ins)
+{
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    DWORD reg = ins->dst[0].reg.idx;
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+    shader_addline(buffer, "tmp0.x = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_TEXM3X3PAD instruction in GLSL
+ * Calculate the 1st or 2nd row of a 3-row matrix multiplication. */
+static void shader_glsl_texm3x3pad(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    DWORD reg = ins->dst[0].reg.idx;
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
+    glsl_src_param_t src0_param;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+    shader_addline(buffer, "tmp0.%c = dot(T%u.xyz, %s);\n", 'x' + current_state->current_row, reg, src0_param.param_str);
+    current_state->texcoord_w[current_state->current_row++] = reg;
+}
+
+static void shader_glsl_texm3x2tex(const struct wined3d_shader_instruction *ins)
+{
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    DWORD reg = ins->dst[0].reg.idx;
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    glsl_src_param_t src0_param;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
+    glsl_sample_function_t sample_function;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+    shader_addline(buffer, "tmp0.y = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+
+    /* Sample the texture using the calculated coordinates */
+    shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xy");
+}
+
+/** Process the WINED3DSIO_TEXM3X3TEX instruction in GLSL
+ * Perform the 3rd row of a 3x3 matrix multiply, then sample the texture using the calculated coordinates */
+static void shader_glsl_texm3x3tex(const struct wined3d_shader_instruction *ins)
+{
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_src_param_t src0_param;
+    DWORD reg = ins->dst[0].reg.idx;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
+    glsl_sample_function_t sample_function;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+    shader_addline(ins->ctx->buffer, "tmp0.z = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+
+    /* Dependent read, not valid with conditional NP2 */
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+
+    /* Sample the texture using the calculated coordinates */
+    shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
+
+    current_state->current_row = 0;
+}
+
+/** Process the WINED3DSIO_TEXM3X3 instruction in GLSL
+ * Perform the 3rd row of a 3x3 matrix multiply */
+static void shader_glsl_texm3x3(const struct wined3d_shader_instruction *ins)
+{
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
+    glsl_src_param_t src0_param;
+    char dst_mask[6];
+    DWORD reg = ins->dst[0].reg.idx;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+    shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+    shader_addline(ins->ctx->buffer, "vec4(tmp0.xy, dot(T%u.xyz, %s), 1.0)%s);\n", reg, src0_param.param_str, dst_mask);
+
+    current_state->current_row = 0;
+}
+
+/* Process the WINED3DSIO_TEXM3X3SPEC instruction in GLSL
+ * Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */
+static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    DWORD reg = ins->dst[0].reg.idx;
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
+    WINED3DSAMPLER_TEXTURE_TYPE stype = ins->ctx->reg_maps->sampler_type[reg];
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    glsl_sample_function_t sample_function;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], src_mask, &src1_param);
+
+    /* Perform the last matrix multiply operation */
+    shader_addline(buffer, "tmp0.z = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+    /* Reflection calculation */
+    shader_addline(buffer, "tmp0.xyz = -reflect((%s), normalize(tmp0.xyz));\n", src1_param.param_str);
+
+    /* Dependent read, not valid with conditional NP2 */
+    shader_glsl_get_sample_function(gl_info, stype, 0, &sample_function);
+
+    /* Sample the texture */
+    shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
+
+    current_state->current_row = 0;
+}
+
+/* Process the WINED3DSIO_TEXM3X3VSPEC instruction in GLSL
+ * Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */
+static void shader_glsl_texm3x3vspec(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    DWORD reg = ins->dst[0].reg.idx;
+    struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+    SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
+    glsl_src_param_t src0_param;
+    DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
+    glsl_sample_function_t sample_function;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+    /* Perform the last matrix multiply operation */
+    shader_addline(buffer, "tmp0.z = dot(vec3(T%u), vec3(%s));\n", reg, src0_param.param_str);
+
+    /* Construct the eye-ray vector from w coordinates */
+    shader_addline(buffer, "tmp1.xyz = normalize(vec3(gl_TexCoord[%u].w, gl_TexCoord[%u].w, gl_TexCoord[%u].w));\n",
+            current_state->texcoord_w[0], current_state->texcoord_w[1], reg);
+    shader_addline(buffer, "tmp0.xyz = -reflect(tmp1.xyz, normalize(tmp0.xyz));\n");
+
+    /* Dependent read, not valid with conditional NP2 */
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+
+    /* Sample the texture using the calculated coordinates */
+    shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
+
+    current_state->current_row = 0;
+}
+
+/** Process the WINED3DSIO_TEXBEM instruction in GLSL.
+ * Apply a fake bump map transform.
+ * texbem is pshader <= 1.3 only, this saves a few version checks
+ */
+static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+    IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+    glsl_sample_function_t sample_function;
+    glsl_src_param_t coord_param;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
+    DWORD sampler_idx;
+    DWORD mask;
+    DWORD flags;
+    char coord_mask[6];
+
+    sampler_idx = ins->dst[0].reg.idx;
+    flags = (priv->cur_ps_args->tex_transform >> (sampler_idx * WINED3D_PSARGS_TEXTRANSFORM_SHIFT))
+            & WINED3D_PSARGS_TEXTRANSFORM_MASK;
+
+    sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    /* Dependent read, not valid with conditional NP2 */
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+    mask = sample_function.coord_mask;
+
+    shader_glsl_write_mask_to_str(mask, coord_mask);
+
+    /* with projective textures, texbem only divides the static texture coord, not the displacement,
+         * so we can't let the GL handle this.
+         */
+    if (flags & WINED3D_PSARGS_PROJECTED) {
+        DWORD div_mask=0;
+        char coord_div_mask[3];
+        switch (flags & ~WINED3D_PSARGS_PROJECTED) {
+            case WINED3DTTFF_COUNT1: FIXME("WINED3DTTFF_PROJECTED with WINED3DTTFF_COUNT1?\n"); break;
+            case WINED3DTTFF_COUNT2: div_mask = WINED3DSP_WRITEMASK_1; break;
+            case WINED3DTTFF_COUNT3: div_mask = WINED3DSP_WRITEMASK_2; break;
+            case WINED3DTTFF_COUNT4:
+            case WINED3DTTFF_DISABLE: div_mask = WINED3DSP_WRITEMASK_3; break;
+        }
+        shader_glsl_write_mask_to_str(div_mask, coord_div_mask);
+        shader_addline(ins->ctx->buffer, "T%u%s /= T%u%s;\n", sampler_idx, coord_mask, sampler_idx, coord_div_mask);
+    }
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &coord_param);
+
+    shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+            "T%u%s + vec4(bumpenvmat%d * %s, 0.0, 0.0)%s", sampler_idx, coord_mask, sampler_idx,
+            coord_param.param_str, coord_mask);
+
+    if (ins->handler_idx == WINED3DSIH_TEXBEML)
+    {
+        glsl_src_param_t luminance_param;
+        glsl_dst_param_t dst_param;
+
+        shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &luminance_param);
+        shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+
+        shader_addline(ins->ctx->buffer, "%s%s *= (%s * luminancescale%d + luminanceoffset%d);\n",
+                dst_param.reg_name, dst_param.mask_str,
+                luminance_param.param_str, sampler_idx, sampler_idx);
+    }
+}
+
+static void shader_glsl_bem(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param, src1_param;
+    DWORD sampler_idx = ins->dst[0].reg.idx;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src1_param);
+
+    shader_glsl_append_dst(ins->ctx->buffer, ins);
+    shader_addline(ins->ctx->buffer, "%s + bumpenvmat%d * %s);\n",
+            src0_param.param_str, sampler_idx, src1_param.param_str);
+}
+
+/** Process the WINED3DSIO_TEXREG2AR instruction in GLSL
+ * Sample 2D texture at dst using the alpha & red (wx) components of src as texture coordinates */
+static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins)
+{
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_src_param_t src0_param;
+    DWORD sampler_idx = ins->dst[0].reg.idx;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    glsl_sample_function_t sample_function;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
+
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+    shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+            "%s.wx", src0_param.reg_name);
+}
+
+/** Process the WINED3DSIO_TEXREG2GB instruction in GLSL
+ * Sample 2D texture at dst using the green & blue (yz) components of src as texture coordinates */
+static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins)
+{
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_src_param_t src0_param;
+    DWORD sampler_idx = ins->dst[0].reg.idx;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    glsl_sample_function_t sample_function;
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
+
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+    shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+            "%s.yz", src0_param.reg_name);
+}
+
+/** Process the WINED3DSIO_TEXREG2RGB instruction in GLSL
+ * Sample texture at dst using the rgb (xyz) components of src as texture coordinates */
+static void shader_glsl_texreg2rgb(const struct wined3d_shader_instruction *ins)
+{
+    const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+    glsl_src_param_t src0_param;
+    DWORD sampler_idx = ins->dst[0].reg.idx;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+    glsl_sample_function_t sample_function;
+
+    /* Dependent read, not valid with conditional NP2 */
+    shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+    shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &src0_param);
+
+    shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+            "%s", src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_TEXKILL instruction in GLSL.
+ * If any of the first 3 components are < 0, discard this pixel */
+static void shader_glsl_texkill(const struct wined3d_shader_instruction *ins)
+{
+    glsl_dst_param_t dst_param;
+
+    /* The argument is a destination parameter, and no writemasks are allowed */
+    shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+    if (ins->ctx->reg_maps->shader_version.major >= 2)
+    {
+        /* 2.0 shaders compare all 4 components in texkill */
+        shader_addline(ins->ctx->buffer, "if (any(lessThan(%s.xyzw, vec4(0.0)))) discard;\n", dst_param.reg_name);
+    } else {
+        /* 1.X shaders only compare the first 3 components, probably due to the nature of the texkill
+         * instruction as a tex* instruction, and phase, which kills all a / w components. Even if all
+         * 4 components are defined, only the first 3 are used
+         */
+        shader_addline(ins->ctx->buffer, "if (any(lessThan(%s.xyz, vec3(0.0)))) discard;\n", dst_param.reg_name);
+    }
+}
+
+/** Process the WINED3DSIO_DP2ADD instruction in GLSL.
+ * dst = dot2(src0, src1) + src2 */
+static void shader_glsl_dp2add(const struct wined3d_shader_instruction *ins)
+{
+    glsl_src_param_t src0_param;
+    glsl_src_param_t src1_param;
+    glsl_src_param_t src2_param;
+    DWORD write_mask;
+    unsigned int mask_size;
+
+    write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+    mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+    shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src0_param);
+    shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src1_param);
+    shader_glsl_add_src_param(ins, &ins->src[2], WINED3DSP_WRITEMASK_0, &src2_param);
+
+    if (mask_size > 1) {
+        shader_addline(ins->ctx->buffer, "vec%d(dot(%s, %s) + %s));\n",
+                mask_size, src0_param.param_str, src1_param.param_str, src2_param.param_str);
+    } else {
+        shader_addline(ins->ctx->buffer, "dot(%s, %s) + %s);\n",
+                src0_param.param_str, src1_param.param_str, src2_param.param_str);
+    }
+}
+
+static void shader_glsl_input_pack(IWineD3DPixelShader *iface, struct wined3d_shader_buffer *buffer,
+        const struct wined3d_shader_signature_element *input_signature, const struct shader_reg_maps *reg_maps,
+        enum vertexprocessing_mode vertexprocessing)
+{
+    unsigned int i;
+    IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
+    WORD map = reg_maps->input_registers;
+
+    for (i = 0; map; map >>= 1, ++i)
+    {
+        const char *semantic_name;
+        UINT semantic_idx;
+        char reg_mask[6];
+
+        /* Unused */
+        if (!(map & 1)) continue;
+
+        semantic_name = input_signature[i].semantic_name;
+        semantic_idx = input_signature[i].semantic_idx;
+        shader_glsl_write_mask_to_str(input_signature[i].mask, reg_mask);
+
+        if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_TEXCOORD))
+        {
+            if (semantic_idx < 8 && vertexprocessing == pretransformed)
+                shader_addline(buffer, "IN[%u]%s = gl_TexCoord[%u]%s;\n",
+                        This->input_reg_map[i], reg_mask, semantic_idx, reg_mask);
+            else
+                shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                        This->input_reg_map[i], reg_mask, reg_mask);
+        }
+        else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_COLOR))
+        {
+            if (semantic_idx == 0)
+                shader_addline(buffer, "IN[%u]%s = vec4(gl_Color)%s;\n",
+                        This->input_reg_map[i], reg_mask, reg_mask);
+            else if (semantic_idx == 1)
+                shader_addline(buffer, "IN[%u]%s = vec4(gl_SecondaryColor)%s;\n",
+                        This->input_reg_map[i], reg_mask, reg_mask);
+            else
+                shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                        This->input_reg_map[i], reg_mask, reg_mask);
+        }
+        else
+        {
+            shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                    This->input_reg_map[i], reg_mask, reg_mask);
+        }
+    }
+}
+
+/*********************************************
+ * Vertex Shader Specific Code begins here
+ ********************************************/
+
+static void add_glsl_program_entry(struct shader_glsl_priv *priv, struct glsl_shader_prog_link *entry) {
+    glsl_program_key_t key;
+
+    key.vshader = entry->vshader;
+    key.pshader = entry->pshader;
+    key.vs_args = entry->vs_args;
+    key.ps_args = entry->ps_args;
+    key.context = entry->context;
+
+    if (wine_rb_put(&priv->program_lookup, &key, &entry->program_lookup_entry) == -1)
+    {
+        ERR("Failed to insert program entry.\n");
+    }
+}
+
+static struct glsl_shader_prog_link *get_glsl_program_entry(struct shader_glsl_priv *priv,
+        IWineD3DVertexShader *vshader, IWineD3DPixelShader *pshader, struct vs_compile_args *vs_args,
+        struct ps_compile_args *ps_args, const struct wined3d_context *context) {
+    struct wine_rb_entry *entry;
+    glsl_program_key_t key;
+
+    key.vshader = vshader;
+    key.pshader = pshader;
+    key.vs_args = *vs_args;
+    key.ps_args = *ps_args;
+    key.context = context;
+
+    entry = wine_rb_get(&priv->program_lookup, &key);
+    return entry ? WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry) : NULL;
+}
+
+/* GL locking is done by the caller */
+static void delete_glsl_program_entry(struct shader_glsl_priv *priv, const struct wined3d_gl_info *gl_info,
+        struct glsl_shader_prog_link *entry)
+{
+    glsl_program_key_t key;
+
+    key.vshader = entry->vshader;
+    key.pshader = entry->pshader;
+    key.vs_args = entry->vs_args;
+    key.ps_args = entry->ps_args;
+    key.context = entry->context;
+    wine_rb_remove(&priv->program_lookup, &key);
+
+    if (context_get_current() == entry->context)
+    {
+        TRACE("deleting program %p\n", (void *)(uintptr_t)entry->programId);
+        GL_EXTCALL(glDeleteObjectARB(entry->programId));
+        checkGLcall("glDeleteObjectARB");
+    }
+    else
+    {
+        WARN("Attempting to delete program %p created in ctx %p from ctx %p\n", (void *)(uintptr_t)entry->programId, entry->context, context_get_current());
+    }
+    
+    if (entry->vshader) list_remove(&entry->vshader_entry);
+    if (entry->pshader) list_remove(&entry->pshader_entry);
+    HeapFree(GetProcessHeap(), 0, entry->vuniformF_locations);
+    HeapFree(GetProcessHeap(), 0, entry->puniformF_locations);
+    HeapFree(GetProcessHeap(), 0, entry);
+}
+
+static void handle_ps3_input(struct wined3d_shader_buffer *buffer, const struct wined3d_gl_info *gl_info, const DWORD *map,
+        const struct wined3d_shader_signature_element *input_signature, const struct shader_reg_maps *reg_maps_in,
+        const struct wined3d_shader_signature_element *output_signature, const struct shader_reg_maps *reg_maps_out)
+{
+    unsigned int i, j;
+    const char *semantic_name_in, *semantic_name_out;
+    UINT semantic_idx_in, semantic_idx_out;
+    DWORD *set;
+    DWORD in_idx;
+    unsigned int in_count = vec4_varyings(3, gl_info);
+    char reg_mask[6], reg_mask_out[6];
+    char destination[50];
+    WORD input_map, output_map;
+
+    set = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*set) * (in_count + 2));
+
+    if (!output_signature)
+    {
+        /* Save gl_FrontColor & gl_FrontSecondaryColor before overwriting them. */
+        shader_addline(buffer, "vec4 front_color = gl_FrontColor;\n");
+        shader_addline(buffer, "vec4 front_secondary_color = gl_FrontSecondaryColor;\n");
+    }
+
+    input_map = reg_maps_in->input_registers;
+    for (i = 0; input_map; input_map >>= 1, ++i)
+    {
+        if (!(input_map & 1)) continue;
+
+        in_idx = map[i];
+        if (in_idx >= (in_count + 2)) {
+            FIXME("More input varyings declared than supported, expect issues\n");
+            continue;
+        }
+        else if (map[i] == ~0U)
+        {
+            /* Declared, but not read register */
+            continue;
+        }
+
+        if (in_idx == in_count) {
+            sprintf(destination, "gl_FrontColor");
+        } else if (in_idx == in_count + 1) {
+            sprintf(destination, "gl_FrontSecondaryColor");
+        } else {
+            sprintf(destination, "IN[%u]", in_idx);
+        }
+
+        semantic_name_in = input_signature[i].semantic_name;
+        semantic_idx_in = input_signature[i].semantic_idx;
+        set[map[i]] = input_signature[i].mask;
+        shader_glsl_write_mask_to_str(input_signature[i].mask, reg_mask);
+
+        if (!output_signature)
+        {
+            if (shader_match_semantic(semantic_name_in, WINED3DDECLUSAGE_COLOR))
+            {
+                if (semantic_idx_in == 0)
+                    shader_addline(buffer, "%s%s = front_color%s;\n",
+                            destination, reg_mask, reg_mask);
+                else if (semantic_idx_in == 1)
+                    shader_addline(buffer, "%s%s = front_secondary_color%s;\n",
+                            destination, reg_mask, reg_mask);
+                else
+                    shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                            destination, reg_mask, reg_mask);
+            }
+            else if (shader_match_semantic(semantic_name_in, WINED3DDECLUSAGE_TEXCOORD))
+            {
+                if (semantic_idx_in < 8)
+                {
+                    shader_addline(buffer, "%s%s = gl_TexCoord[%u]%s;\n",
+                            destination, reg_mask, semantic_idx_in, reg_mask);
+                }
+                else
+                {
+                    shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                            destination, reg_mask, reg_mask);
+                }
+            }
+            else if (shader_match_semantic(semantic_name_in, WINED3DDECLUSAGE_FOG))
+            {
+                shader_addline(buffer, "%s%s = vec4(gl_FogFragCoord, 0.0, 0.0, 0.0)%s;\n",
+                        destination, reg_mask, reg_mask);
+            }
+            else
+            {
+                shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                        destination, reg_mask, reg_mask);
+            }
+        } else {
+            BOOL found = FALSE;
+
+            output_map = reg_maps_out->output_registers;
+            for (j = 0; output_map; output_map >>= 1, ++j)
+            {
+                if (!(output_map & 1)) continue;
+
+                semantic_name_out = output_signature[j].semantic_name;
+                semantic_idx_out = output_signature[j].semantic_idx;
+                shader_glsl_write_mask_to_str(output_signature[j].mask, reg_mask_out);
+
+                if (semantic_idx_in == semantic_idx_out
+                        && !strcmp(semantic_name_in, semantic_name_out))
+                {
+                    shader_addline(buffer, "%s%s = OUT[%u]%s;\n",
+                            destination, reg_mask, j, reg_mask);
+                    found = TRUE;
+                }
+            }
+            if(!found) {
+                shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+                               destination, reg_mask, reg_mask);
+            }
+        }
+    }
+
+    /* This is solely to make the compiler / linker happy and avoid warning about undefined
+     * varyings. It shouldn't result in any real code executed on the GPU, since all read
+     * input varyings are assigned above, if the optimizer works properly.
+     */
+    for(i = 0; i < in_count + 2; i++) {
+        if (set[i] && set[i] != WINED3DSP_WRITEMASK_ALL)
+        {
+            unsigned int size = 0;
+            memset(reg_mask, 0, sizeof(reg_mask));
+            if(!(set[i] & WINED3DSP_WRITEMASK_0)) {
+                reg_mask[size] = 'x';
+                size++;
+            }
+            if(!(set[i] & WINED3DSP_WRITEMASK_1)) {
+                reg_mask[size] = 'y';
+                size++;
+            }
+            if(!(set[i] & WINED3DSP_WRITEMASK_2)) {
+                reg_mask[size] = 'z';
+                size++;
+            }
+            if(!(set[i] & WINED3DSP_WRITEMASK_3)) {
+                reg_mask[size] = 'w';
+                size++;
+            }
+
+            if (i == in_count) {
+                sprintf(destination, "gl_FrontColor");
+            } else if (i == in_count + 1) {
+                sprintf(destination, "gl_FrontSecondaryColor");
+            } else {
+                sprintf(destination, "IN[%u]", i);
+            }
+
+            if (size == 1) {
+                shader_addline(buffer, "%s.%s = 0.0;\n", destination, reg_mask);
+            } else {
+                shader_addline(buffer, "%s.%s = vec%u(0.0);\n", destination, reg_mask, size);
+            }
+        }
+    }
+
+    HeapFree(GetProcessHeap(), 0, set);
+}
+
+static void generate_texcoord_assignment(struct wined3d_shader_buffer *buffer, IWineD3DVertexShaderImpl *vs, IWineD3DPixelShaderImpl *ps)
+{
+    DWORD map;
+    unsigned int i;
+    char reg_mask[6];
+
+    if (!ps)
+        return;
+
+    for (i = 0, map = ps->baseShader.reg_maps.texcoord; map && i < min(8, MAX_REG_TEXCRD); map >>= 1, ++i)
+    {
+        if (!map & 1)
+            continue;
+
+        /* so far we assume that if texcoord_mask has any write flags, they are assigned appropriately with pixel shader */
+        if ((vs->baseShader.reg_maps.texcoord_mask[i]) & WINED3DSP_WRITEMASK_ALL)
+            continue;
+
+        shader_glsl_write_mask_to_str(WINED3DSP_WRITEMASK_ALL, reg_mask);
+        shader_addline(buffer, "gl_TexCoord[%u]%s = gl_MultiTexCoord%u%s;\n", i, reg_mask, i, reg_mask);
+    }
+}
+
+/* GL locking is done by the caller */
+static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer *buffer,
+        IWineD3DVertexShader *a_vertexshader, IWineD3DPixelShader *pixelshader, const struct wined3d_gl_info *gl_info)
+{
+    GLhandleARB ret = 0;
+    IWineD3DVertexShaderImpl *vs = (IWineD3DVertexShaderImpl *) a_vertexshader;
+    IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *) pixelshader;
+    IWineD3DDeviceImpl *device;
+    DWORD vs_major = vs->baseShader.reg_maps.shader_version.major;
+    DWORD ps_major = ps ? ps->baseShader.reg_maps.shader_version.major : 0;
+    unsigned int i;
+    const char *semantic_name;
+    UINT semantic_idx;
+    char reg_mask[6];
+    const struct wined3d_shader_signature_element *output_signature;
+
+    shader_buffer_clear(buffer);
+
+    shader_addline(buffer, "#version 120\n");
+
+    if(vs_major < 3 && ps_major < 3) {
+        /* That one is easy: The vertex shader writes to the builtin varyings, the pixel shader reads from them.
+         * Take care about the texcoord .w fixup though if we're using the fixed function fragment pipeline
+         */
+        device = (IWineD3DDeviceImpl *) vs->baseShader.device;
+        if ((gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W)
+                && ps_major == 0 && vs_major > 0 && !device->frag_pipe->ffp_proj_control)
+        {
+            shader_addline(buffer, "void order_ps_input() {\n");
+            for(i = 0; i < min(8, MAX_REG_TEXCRD); i++) {
+                if(vs->baseShader.reg_maps.texcoord_mask[i] != 0 &&
+                   vs->baseShader.reg_maps.texcoord_mask[i] != WINED3DSP_WRITEMASK_ALL) {
+                    shader_addline(buffer, "gl_TexCoord[%u].w = 1.0;\n", i);
+                }
+            }
+            shader_addline(buffer, "}\n");
+        } else {
+            shader_addline(buffer, "void order_ps_input() {\n");
+            generate_texcoord_assignment(buffer, vs, ps);
+            shader_addline(buffer, "}\n");
+        }
+    } else if(ps_major < 3 && vs_major >= 3) {
+        WORD map = vs->baseShader.reg_maps.output_registers;
+
+        /* The vertex shader writes to its own varyings, the pixel shader needs them in the builtin ones */
+        output_signature = vs->baseShader.output_signature;
+
+        shader_addline(buffer, "void order_ps_input(in vec4 OUT[%u]) {\n", MAX_REG_OUTPUT);
+        for (i = 0; map; map >>= 1, ++i)
+        {
+            DWORD write_mask;
+
+            if (!(map & 1)) continue;
+
+            semantic_name = output_signature[i].semantic_name;
+            semantic_idx = output_signature[i].semantic_idx;
+            write_mask = output_signature[i].mask;
+            shader_glsl_write_mask_to_str(write_mask, reg_mask);
+
+            if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_COLOR))
+            {
+                if (semantic_idx == 0)
+                    shader_addline(buffer, "gl_FrontColor%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+                else if (semantic_idx == 1)
+                    shader_addline(buffer, "gl_FrontSecondaryColor%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+            }
+            else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_POSITION))
+            {
+                shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+            }
+            else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_TEXCOORD))
+            {
+                if (semantic_idx < 8)
+                {
+                    if (!(gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W) || ps_major > 0)
+                        write_mask |= WINED3DSP_WRITEMASK_3;
+
+                    shader_addline(buffer, "gl_TexCoord[%u]%s = OUT[%u]%s;\n",
+                            semantic_idx, reg_mask, i, reg_mask);
+                    if (!(write_mask & WINED3DSP_WRITEMASK_3))
+                        shader_addline(buffer, "gl_TexCoord[%u].w = 1.0;\n", semantic_idx);
+                }
+            }
+            else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_PSIZE))
+            {
+                shader_addline(buffer, "gl_PointSize = OUT[%u].x;\n", i);
+            }
+            else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_FOG))
+            {
+                shader_addline(buffer, "gl_FogFragCoord = OUT[%u].%c;\n", i, reg_mask[1]);
+            }
+        }
+        shader_addline(buffer, "}\n");
+
+    } else if(ps_major >= 3 && vs_major >= 3) {
+        WORD map = vs->baseShader.reg_maps.output_registers;
+
+        output_signature = vs->baseShader.output_signature;
+
+        /* This one is tricky: a 3.0 pixel shader reads from a 3.0 vertex shader */
+        shader_addline(buffer, "varying vec4 IN[%u];\n", vec4_varyings(3, gl_info));
+        shader_addline(buffer, "void order_ps_input(in vec4 OUT[%u]) {\n", MAX_REG_OUTPUT);
+
+        /* First, sort out position and point size. Those are not passed to the pixel shader */
+        for (i = 0; map; map >>= 1, ++i)
+        {
+            if (!(map & 1)) continue;
+
+            semantic_name = output_signature[i].semantic_name;
+            shader_glsl_write_mask_to_str(output_signature[i].mask, reg_mask);
+
+            if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_POSITION))
+            {
+                shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+            }
+            else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_PSIZE))
+            {
+                shader_addline(buffer, "gl_PointSize = OUT[%u].x;\n", i);
+            }
+        }
+
+        /* Then, fix the pixel shader input */
+        handle_ps3_input(buffer, gl_info, ps->input_reg_map, ps->baseShader.input_signature,
+                &ps->baseShader.reg_maps, output_signature, &vs->baseShader.reg_maps);
+
+        shader_addline(buffer, "}\n");
+    } else if(ps_major >= 3 && vs_major < 3) {
+        shader_addline(buffer, "varying vec4 IN[%u];\n", vec4_varyings(3, gl_info));
+        shader_addline(buffer, "void order_ps_input() {\n");
+        /* The vertex shader wrote to the builtin varyings. There is no need to figure out position and
+         * point size, but we depend on the optimizers kindness to find out that the pixel shader doesn't
+         * read gl_TexCoord and gl_ColorX, otherwise we'll run out of varyings
+         */
+        handle_ps3_input(buffer, gl_info, ps->input_reg_map, ps->baseShader.input_signature,
+                &ps->baseShader.reg_maps, NULL, NULL);
+        shader_addline(buffer, "}\n");
+    } else {
+        ERR("Unexpected vertex and pixel shader version condition: vs: %d, ps: %d\n", vs_major, ps_major);
+    }
+
+    ret = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+    checkGLcall("glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB)");
+    GL_EXTCALL(glShaderSourceARB(ret, 1, (const char**)&buffer->buffer, NULL));
+    checkGLcall("glShaderSourceARB(ret, 1, &buffer->buffer, NULL)");
+    GL_EXTCALL(glCompileShaderARB(ret));
+    checkGLcall("glCompileShaderARB(ret)");
+    shader_glsl_validate_compile_link(gl_info, ret, FALSE);
+    return ret;
+}
+
+/* GL locking is done by the caller */
+static void hardcode_local_constants(IWineD3DBaseShaderImpl *shader, const struct wined3d_gl_info *gl_info,
+        GLhandleARB programId, char prefix)
+{
+    const local_constant *lconst;
+    GLint tmp_loc;
+    const float *value;
+    char glsl_name[8];
+
+    LIST_FOR_EACH_ENTRY(lconst, &shader->baseShader.constantsF, local_constant, entry) {
+        value = (const float *)lconst->value;
+        snprintf(glsl_name, sizeof(glsl_name), "%cLC%u", prefix, lconst->idx);
+        tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+        GL_EXTCALL(glUniform4fvARB(tmp_loc, 1, value));
+    }
+    checkGLcall("Hardcoding local constants");
+}
+
+/* GL locking is done by the caller */
+#ifdef VBOX_WITH_VMSVGA
+static GLhandleARB shader_glsl_generate_pshader(const struct wined3d_context *context,
+#else
+static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context,
+#endif
+        struct wined3d_shader_buffer *buffer, IWineD3DPixelShaderImpl *This,
+        const struct ps_compile_args *args, struct ps_np2fixup_info *np2fixup_info)
+{
+    const struct shader_reg_maps *reg_maps = &This->baseShader.reg_maps;
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    CONST DWORD *function = This->baseShader.function;
+    struct shader_glsl_ctx_priv priv_ctx;
+
+    /* Create the hw GLSL shader object and assign it as the shader->prgId */
+    GLhandleARB shader_obj = GL_EXTCALL(glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB));
+
+    memset(&priv_ctx, 0, sizeof(priv_ctx));
+    priv_ctx.cur_ps_args = args;
+    priv_ctx.cur_np2fixup_info = np2fixup_info;
+
+    shader_addline(buffer, "#version 120\n");
+
+    if (gl_info->supported[ARB_SHADER_TEXTURE_LOD] && reg_maps->usestexldd)
+    {
+        shader_addline(buffer, "#extension GL_ARB_shader_texture_lod : enable\n");
+    }
+    if (gl_info->supported[ARB_TEXTURE_RECTANGLE])
+    {
+        /* The spec says that it doesn't have to be explicitly enabled, but the nvidia
+         * drivers write a warning if we don't do so
+         */
+        shader_addline(buffer, "#extension GL_ARB_texture_rectangle : enable\n");
+    }
+    if (gl_info->supported[EXT_GPU_SHADER4])
+    {
+        shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
+    }
+
+    /* Base Declarations */
+    shader_generate_glsl_declarations(context, buffer, (IWineD3DBaseShader *)This, reg_maps, &priv_ctx);
+
+    /* Pack 3.0 inputs */
+    if (reg_maps->shader_version.major >= 3 && args->vp_mode != vertexshader)
+    {
+        shader_glsl_input_pack((IWineD3DPixelShader *) This, buffer,
+                This->baseShader.input_signature, reg_maps, args->vp_mode);
+    }
+
+    /* Base Shader Body */
+    shader_generate_main((IWineD3DBaseShader *)This, buffer, reg_maps, function, &priv_ctx);
+
+    /* Pixel shaders < 2.0 place the resulting color in R0 implicitly */
+    if (reg_maps->shader_version.major < 2)
+    {
+        /* Some older cards like GeforceFX ones don't support multiple buffers, so also not gl_FragData */
+        shader_addline(buffer, "gl_FragData[0] = R0;\n");
+    }
+
+    if (args->srgb_correction)
+    {
+        shader_addline(buffer, "tmp0.xyz = pow(gl_FragData[0].xyz, vec3(srgb_const0.x));\n");
+        shader_addline(buffer, "tmp0.xyz = tmp0.xyz * vec3(srgb_const0.y) - vec3(srgb_const0.z);\n");
+        shader_addline(buffer, "tmp1.xyz = gl_FragData[0].xyz * vec3(srgb_const0.w);\n");
+        shader_addline(buffer, "bvec3 srgb_compare = lessThan(gl_FragData[0].xyz, vec3(srgb_const1.x));\n");
+        shader_addline(buffer, "gl_FragData[0].xyz = mix(tmp0.xyz, tmp1.xyz, vec3(srgb_compare));\n");
+        shader_addline(buffer, "gl_FragData[0] = clamp(gl_FragData[0], 0.0, 1.0);\n");
+    }
+    /* Pixel shader < 3.0 do not replace the fog stage.
+     * This implements linear fog computation and blending.
+     * TODO: non linear fog
+     * NOTE: gl_Fog.start and gl_Fog.end don't hold fog start s and end e but
+     * -1/(e-s) and e/(e-s) respectively.
+     */
+    if (reg_maps->shader_version.major < 3)
+    {
+        switch(args->fog) {
+            case FOG_OFF: break;
+            case FOG_LINEAR:
+                shader_addline(buffer, "float fogstart = -1.0 / (gl_Fog.end - gl_Fog.start);\n");
+                shader_addline(buffer, "float fogend = gl_Fog.end * -fogstart;\n");
+                shader_addline(buffer, "float Fog = clamp(gl_FogFragCoord * fogstart + fogend, 0.0, 1.0);\n");
+                shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n");
+                break;
+            case FOG_EXP:
+                /* Fog = e^(-gl_Fog.density * gl_FogFragCoord) */
+                shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_FogFragCoord);\n");
+                shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);\n");
+                shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n");
+                break;
+            case FOG_EXP2:
+                /* Fog = e^(-(gl_Fog.density * gl_FogFragCoord)^2) */
+                shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord);\n");
+                shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);\n");
+                shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n");
+                break;
+        }
+    }
+
+    shader_addline(buffer, "}\n");
+
+    TRACE("Compiling shader object %p\n", (void *)(uintptr_t)shader_obj);
+    GL_EXTCALL(glShaderSourceARB(shader_obj, 1, (const char**)&buffer->buffer, NULL));
+    GL_EXTCALL(glCompileShaderARB(shader_obj));
+    shader_glsl_validate_compile_link(gl_info, shader_obj, FALSE);
+
+    /* Store the shader object */
+    return shader_obj;
+}
+
+/* GL locking is done by the caller */
+#ifdef VBOX_WITH_VMSVGA
+static GLhandleARB shader_glsl_generate_vshader(const struct wined3d_context *context,
+#else
+static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context,
+#endif
+        struct wined3d_shader_buffer *buffer, IWineD3DVertexShaderImpl *This,
+        const struct vs_compile_args *args)
+{
+    const struct shader_reg_maps *reg_maps = &This->baseShader.reg_maps;
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    CONST DWORD *function = This->baseShader.function;
+    struct shader_glsl_ctx_priv priv_ctx;
+
+    /* Create the hw GLSL shader program and assign it as the shader->prgId */
+    GLhandleARB shader_obj = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+
+    shader_addline(buffer, "#version 120\n");
+
+    if (gl_info->supported[EXT_GPU_SHADER4])
+    {
+        shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
+    }
+
+    memset(&priv_ctx, 0, sizeof(priv_ctx));
+    priv_ctx.cur_vs_args = args;
+
+    /* Base Declarations */
+    shader_generate_glsl_declarations(context, buffer, (IWineD3DBaseShader *)This, reg_maps, &priv_ctx);
+
+    /* Base Shader Body */
+    shader_generate_main((IWineD3DBaseShader*)This, buffer, reg_maps, function, &priv_ctx);
+
+    /* Unpack 3.0 outputs */
+    if (reg_maps->shader_version.major >= 3) shader_addline(buffer, "order_ps_input(OUT);\n");
+    else shader_addline(buffer, "order_ps_input();\n");
+
+    /* The D3DRS_FOGTABLEMODE render state defines if the shader-generated fog coord is used
+     * or if the fragment depth is used. If the fragment depth is used(FOGTABLEMODE != NONE),
+     * the fog frag coord is thrown away. If the fog frag coord is used, but not written by
+     * the shader, it is set to 0.0(fully fogged, since start = 1.0, end = 0.0)
+     */
+    if(args->fog_src == VS_FOG_Z) {
+        shader_addline(buffer, "gl_FogFragCoord = gl_Position.z;\n");
+    } else if (!reg_maps->fog) {
+        shader_addline(buffer, "gl_FogFragCoord = 0.0;\n");
+    }
+
+    /* Write the final position.
+     *
+     * OpenGL coordinates specify the center of the pixel while d3d coords specify
+     * the corner. The offsets are stored in z and w in posFixup. posFixup.y contains
+     * 1.0 or -1.0 to turn the rendering upside down for offscreen rendering. PosFixup.x
+     * contains 1.0 to allow a mad.
+     */
+    shader_addline(buffer, "gl_Position.y = gl_Position.y * posFixup.y;\n");
+    shader_addline(buffer, "gl_Position.xy += posFixup.zw * gl_Position.ww;\n");
+    if(args->clip_enabled) {
+        shader_addline(buffer, "gl_ClipVertex = gl_Position;\n");
+    }
+
+    /* Z coord [0;1]->[-1;1] mapping, see comment in transform_projection in state.c
+     *
+     * Basically we want (in homogeneous coordinates) z = z * 2 - 1. However, shaders are run
+     * before the homogeneous divide, so we have to take the w into account: z = ((z / w) * 2 - 1) * w,
+     * which is the same as z = z * 2 - w.
+     */
+    shader_addline(buffer, "gl_Position.z = gl_Position.z * 2.0 - gl_Position.w;\n");
+
+    shader_addline(buffer, "}\n");
+
+    TRACE("Compiling shader object %p\n", (void *)(uintptr_t)shader_obj);
+    GL_EXTCALL(glShaderSourceARB(shader_obj, 1, (const char**)&buffer->buffer, NULL));
+    GL_EXTCALL(glCompileShaderARB(shader_obj));
+    shader_glsl_validate_compile_link(gl_info, shader_obj, FALSE);
+
+    return shader_obj;
+}
+
+static GLhandleARB find_glsl_pshader(const struct wined3d_context *context,
+        struct wined3d_shader_buffer *buffer, IWineD3DPixelShaderImpl *shader,
+        const struct ps_compile_args *args,
+        UINT *inp2fixup_info
+        )
+{
+    UINT i;
+    DWORD new_size;
+    struct glsl_ps_compiled_shader *new_array;
+    struct glsl_pshader_private    *shader_data;
+    struct ps_np2fixup_info        *np2fixup = NULL;
+    GLhandleARB ret;
+
+    if (!shader->baseShader.backend_data)
+    {
+        shader->baseShader.backend_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data));
+        if (!shader->baseShader.backend_data)
+        {
+            ERR("Failed to allocate backend data.\n");
+            return 0;
+        }
+    }
+    shader_data = shader->baseShader.backend_data;
+
+    /* Usually we have very few GL shaders for each d3d shader(just 1 or maybe 2),
+     * so a linear search is more performant than a hashmap or a binary search
+     * (cache coherency etc)
+     */
+    for(i = 0; i < shader_data->num_gl_shaders; i++) {
+        if(shader_data->gl_shaders[i].context==context
+           && memcmp(&shader_data->gl_shaders[i].args, args, sizeof(*args)) == 0) {
+            if(args->np2_fixup) {
+                *inp2fixup_info = i;
+            }
+            return shader_data->gl_shaders[i].prgId;
+        }
+    }
+
+    TRACE("No matching GL shader found for shader %p, compiling a new shader.\n", shader);
+    if(shader_data->shader_array_size == shader_data->num_gl_shaders) {
+        if (shader_data->num_gl_shaders)
+        {
+            new_size = shader_data->shader_array_size + max(1, shader_data->shader_array_size / 2);
+            new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders,
+                                    new_size * sizeof(*shader_data->gl_shaders));
+        } else {
+            new_array = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data->gl_shaders));
+            new_size = 1;
+        }
+
+        if(!new_array) {
+            ERR("Out of memory\n");
+            return 0;
+        }
+        shader_data->gl_shaders = new_array;
+        shader_data->shader_array_size = new_size;
+    }
+
+    shader_data->gl_shaders[shader_data->num_gl_shaders].context = context;
+    shader_data->gl_shaders[shader_data->num_gl_shaders].args = *args;
+
+    memset(&shader_data->gl_shaders[shader_data->num_gl_shaders].np2fixup, 0, sizeof(struct ps_np2fixup_info));
+    if (args->np2_fixup) np2fixup = &shader_data->gl_shaders[shader_data->num_gl_shaders].np2fixup;
+
+    pixelshader_update_samplers(&shader->baseShader.reg_maps,
+            ((IWineD3DDeviceImpl *)shader->baseShader.device)->stateBlock->textures);
+
+    shader_buffer_clear(buffer);
+    ret = shader_glsl_generate_pshader(context, buffer, shader, args, np2fixup);
+    *inp2fixup_info = shader_data->num_gl_shaders;
+    shader_data->gl_shaders[shader_data->num_gl_shaders++].prgId = ret;
+
+    return ret;
+}
+
+static inline BOOL vs_args_equal(const struct vs_compile_args *stored, const struct vs_compile_args *new,
+                                 const DWORD use_map) {
+    if((stored->swizzle_map & use_map) != new->swizzle_map) return FALSE;
+    if((stored->clip_enabled) != new->clip_enabled) return FALSE;
+    return stored->fog_src == new->fog_src;
+}
+
+static GLhandleARB find_glsl_vshader(const struct wined3d_context *context,
+        struct wined3d_shader_buffer *buffer, IWineD3DVertexShaderImpl *shader,
+        const struct vs_compile_args *args)
+{
+    UINT i;
+    DWORD new_size;
+    struct glsl_vs_compiled_shader *new_array;
+    DWORD use_map = ((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.use_map;
+    struct glsl_vshader_private *shader_data;
+    GLhandleARB ret;
+
+    if (!shader->baseShader.backend_data)
+    {
+        shader->baseShader.backend_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data));
+        if (!shader->baseShader.backend_data)
+        {
+            ERR("Failed to allocate backend data.\n");
+            return 0;
+        }
+    }
+    shader_data = shader->baseShader.backend_data;
+
+    /* Usually we have very few GL shaders for each d3d shader(just 1 or maybe 2),
+     * so a linear search is more performant than a hashmap or a binary search
+     * (cache coherency etc)
+     */
+    for(i = 0; i < shader_data->num_gl_shaders; i++) {
+        if(shader_data->gl_shaders[i].context==context
+           && vs_args_equal(&shader_data->gl_shaders[i].args, args, use_map)) {
+            return shader_data->gl_shaders[i].prgId;
+        }
+    }
+
+    TRACE("No matching GL shader found for shader %p, compiling a new shader.\n", shader);
+
+    if(shader_data->shader_array_size == shader_data->num_gl_shaders) {
+        if (shader_data->num_gl_shaders)
+        {
+            new_size = shader_data->shader_array_size + max(1, shader_data->shader_array_size / 2);
+            new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders,
+                                    new_size * sizeof(*shader_data->gl_shaders));
+        } else {
+            new_array = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data->gl_shaders));
+            new_size = 1;
+        }
+
+        if(!new_array) {
+            ERR("Out of memory\n");
+            return 0;
+        }
+        shader_data->gl_shaders = new_array;
+        shader_data->shader_array_size = new_size;
+    }
+
+    shader_data->gl_shaders[shader_data->num_gl_shaders].context = context;
+    shader_data->gl_shaders[shader_data->num_gl_shaders].args = *args;
+
+    shader_buffer_clear(buffer);
+    ret = shader_glsl_generate_vshader(context, buffer, shader, args);
+    shader_data->gl_shaders[shader_data->num_gl_shaders++].prgId = ret;
+
+    return ret;
+}
+
+/** Sets the GLSL program ID for the given pixel and vertex shader combination.
+ * It sets the programId on the current StateBlock (because it should be called
+ * inside of the DrawPrimitive() part of the render loop).
+ *
+ * If a program for the given combination does not exist, create one, and store
+ * the program in the hash table.  If it creates a program, it will link the
+ * given objects, too.
+ */
+
+/* GL locking is done by the caller */
+static void set_glsl_shader_program(const struct wined3d_context *context,
+        IWineD3DDeviceImpl *device, BOOL a_use_ps, BOOL a_use_vs)
+{
+    IWineD3DVertexShader *vshader = a_use_vs ? device->stateBlock->vertexShader : NULL;
+    IWineD3DPixelShader *pshader = a_use_ps ? device->stateBlock->pixelShader : NULL;
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    struct shader_glsl_priv *priv = device->shader_priv;
+    struct glsl_shader_prog_link *entry    = NULL;
+    GLhandleARB programId                  = 0;
+    GLhandleARB reorder_shader_id          = 0;
+    unsigned int i;
+    char glsl_name[8];
+    struct ps_compile_args ps_compile_args;
+    struct vs_compile_args vs_compile_args;
+
+    if (vshader) find_vs_compile_args((IWineD3DVertexShaderImpl *)vshader, device->stateBlock, &vs_compile_args);
+    if (pshader) find_ps_compile_args((IWineD3DPixelShaderImpl *)pshader, device->stateBlock, &ps_compile_args);
+
+    entry = get_glsl_program_entry(priv, vshader, pshader, &vs_compile_args, &ps_compile_args, context);
+    if (entry) {
+        priv->glsl_program = entry;
+        return;
+    }
+
+    /* If we get to this point, then no matching program exists, so we create one */
+    programId = GL_EXTCALL(glCreateProgramObjectARB());
+    TRACE("Created new GLSL shader program %p\n", (void *)(uintptr_t)programId);
+
+    /* Create the entry */
+    entry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct glsl_shader_prog_link));
+    entry->context = context;
+    entry->programId = programId;
+    entry->vshader = vshader;
+    entry->pshader = pshader;
+    entry->vs_args = vs_compile_args;
+    entry->ps_args = ps_compile_args;
+    entry->constant_version = 0;
+    WINEFIXUPINFO_INIT(entry);
+    /* Add the hash table entry */
+    add_glsl_program_entry(priv, entry);
+
+    /* Set the current program */
+    priv->glsl_program = entry;
+
+    /* Attach GLSL vshader */
+    if (vshader)
+    {
+        GLhandleARB vshader_id = find_glsl_vshader(context, &priv->shader_buffer,
+                (IWineD3DVertexShaderImpl *)vshader, &vs_compile_args);
+        WORD map = ((IWineD3DBaseShaderImpl *)vshader)->baseShader.reg_maps.input_registers;
+        char tmp_name[10];
+
+        reorder_shader_id = generate_param_reorder_function(&priv->shader_buffer, vshader, pshader, gl_info);
+        TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)reorder_shader_id, (void *)(uintptr_t)programId);
+        GL_EXTCALL(glAttachObjectARB(programId, reorder_shader_id));
+        checkGLcall("glAttachObjectARB");
+        /* Flag the reorder function for deletion, then it will be freed automatically when the program
+         * is destroyed
+         */
+        GL_EXTCALL(glDeleteObjectARB(reorder_shader_id));
+
+        TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)vshader_id, (void *)(uintptr_t)programId);
+        GL_EXTCALL(glAttachObjectARB(programId, vshader_id));
+        checkGLcall("glAttachObjectARB");
+
+        /* Bind vertex attributes to a corresponding index number to match
+         * the same index numbers as ARB_vertex_programs (makes loading
+         * vertex attributes simpler).  With this method, we can use the
+         * exact same code to load the attributes later for both ARB and
+         * GLSL shaders.
+         *
+         * We have to do this here because we need to know the Program ID
+         * in order to make the bindings work, and it has to be done prior
+         * to linking the GLSL program. */
+        for (i = 0; map; map >>= 1, ++i)
+        {
+            if (!(map & 1)) continue;
+
+            snprintf(tmp_name, sizeof(tmp_name), "attrib%u", i);
+            GL_EXTCALL(glBindAttribLocationARB(programId, i, tmp_name));
+        }
+        checkGLcall("glBindAttribLocationARB");
+
+        list_add_head(&((IWineD3DBaseShaderImpl *)vshader)->baseShader.linked_programs, &entry->vshader_entry);
+    }
+
+    /* Attach GLSL pshader */
+    if (pshader)
+    {
+        GLhandleARB pshader_id = find_glsl_pshader(context, &priv->shader_buffer,
+                (IWineD3DPixelShaderImpl *)pshader, &ps_compile_args,
+                &entry->inp2Fixup_info
+                );
+        TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)pshader_id, (void *)(uintptr_t)programId);
+        GL_EXTCALL(glAttachObjectARB(programId, pshader_id));
+        checkGLcall("glAttachObjectARB");
+
+        list_add_head(&((IWineD3DBaseShaderImpl *)pshader)->baseShader.linked_programs, &entry->pshader_entry);
+    }
+
+    /* Link the program */
+    TRACE("Linking GLSL shader program %p\n", (void *)(uintptr_t)programId);
+    GL_EXTCALL(glLinkProgramARB(programId));
+    shader_glsl_validate_compile_link(gl_info, programId, TRUE);
+
+    entry->vuniformF_locations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(GLhandleARB) * gl_info->limits.glsl_vs_float_constants);
+    for (i = 0; i < gl_info->limits.glsl_vs_float_constants; ++i)
+    {
+        snprintf(glsl_name, sizeof(glsl_name), "VC[%i]", i);
+        entry->vuniformF_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+    }
+    for (i = 0; i < MAX_CONST_I; ++i)
+    {
+        snprintf(glsl_name, sizeof(glsl_name), "VI[%i]", i);
+        entry->vuniformI_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+    }
+    entry->puniformF_locations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(GLhandleARB) * gl_info->limits.glsl_ps_float_constants);
+    for (i = 0; i < gl_info->limits.glsl_ps_float_constants; ++i)
+    {
+        snprintf(glsl_name, sizeof(glsl_name), "PC[%i]", i);
+        entry->puniformF_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+    }
+    for (i = 0; i < MAX_CONST_I; ++i)
+    {
+        snprintf(glsl_name, sizeof(glsl_name), "PI[%i]", i);
+        entry->puniformI_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+    }
+
+    if(pshader) {
+        char name[32];
+
+        for(i = 0; i < MAX_TEXTURES; i++) {
+            sprintf(name, "bumpenvmat%u", i);
+            entry->bumpenvmat_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name));
+            sprintf(name, "luminancescale%u", i);
+            entry->luminancescale_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name));
+            sprintf(name, "luminanceoffset%u", i);
+            entry->luminanceoffset_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name));
+        }
+
+        if (ps_compile_args.np2_fixup) {
+            if (WINEFIXUPINFO_ISVALID(entry)) {
+                entry->np2Fixup_location = GL_EXTCALL(glGetUniformLocationARB(programId, "PsamplerNP2Fixup"));
+            } else {
+                FIXME("NP2 texcoord fixup needed for this pixelshader, but no fixup uniform found.\n");
+            }
+        }
+    }
+
+    entry->posFixup_location = GL_EXTCALL(glGetUniformLocationARB(programId, "posFixup"));
+    entry->ycorrection_location = GL_EXTCALL(glGetUniformLocationARB(programId, "ycorrection"));
+    checkGLcall("Find glsl program uniform locations");
+
+    if (pshader
+            && ((IWineD3DPixelShaderImpl *)pshader)->baseShader.reg_maps.shader_version.major >= 3
+            && ((IWineD3DPixelShaderImpl *)pshader)->declared_in_count > vec4_varyings(3, gl_info))
+    {
+        TRACE("Shader %p needs vertex color clamping disabled\n", (void *)(uintptr_t)programId);
+        entry->vertex_color_clamp = GL_FALSE;
+    } else {
+        entry->vertex_color_clamp = GL_FIXED_ONLY_ARB;
+    }
+
+    /* Set the shader to allow uniform loading on it */
+    GL_EXTCALL(glUseProgramObjectARB(programId));
+    checkGLcall("glUseProgramObjectARB(programId)");
+
+#ifdef DEBUG_misha
+    {
+        GLint programIdTest = -1;
+        glGetIntegerv(GL_CURRENT_PROGRAM,  &programIdTest);
+        Assert(programIdTest == programId);
+    }
+#endif
+
+    /* Load the vertex and pixel samplers now. The function that finds the mappings makes sure
+     * that it stays the same for each vertexshader-pixelshader pair(=linked glsl program). If
+     * a pshader with fixed function pipeline is used there are no vertex samplers, and if a
+     * vertex shader with fixed function pixel processing is used we make sure that the card
+     * supports enough samplers to allow the max number of vertex samplers with all possible
+     * fixed function fragment processing setups. So once the program is linked these samplers
+     * won't change.
+     */
+    if (vshader) shader_glsl_load_vsamplers(gl_info, device->texUnitMap, programId);
+    if (pshader) shader_glsl_load_psamplers(gl_info, device->texUnitMap, programId);
+
+    /* If the local constants do not have to be loaded with the environment constants,
+     * load them now to have them hardcoded in the GLSL program. This saves some CPU cycles
+     * later
+     */
+    if (pshader && !((IWineD3DBaseShaderImpl *)pshader)->baseShader.load_local_constsF)
+    {
+        hardcode_local_constants((IWineD3DBaseShaderImpl *) pshader, gl_info, programId, 'P');
+    }
+    if (vshader && !((IWineD3DBaseShaderImpl *)vshader)->baseShader.load_local_constsF)
+    {
+        hardcode_local_constants((IWineD3DBaseShaderImpl *) vshader, gl_info, programId, 'V');
+    }
+}
+
+/* GL locking is done by the caller */
+static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info, enum tex_types tex_type)
+{
+    GLhandleARB program_id;
+    GLhandleARB vshader_id, pshader_id;
+    static const char *blt_vshader[] =
+    {
+        "#version 120\n"
+        "void main(void)\n"
+        "{\n"
+        "    gl_Position = gl_Vertex;\n"
+        "    gl_FrontColor = vec4(1.0);\n"
+        "    gl_TexCoord[0] = gl_MultiTexCoord0;\n"
+        "}\n"
+    };
+
+    static const char *blt_pshaders[tex_type_count] =
+    {
+        /* tex_1d */
+        NULL,
+        /* tex_2d */
+        "#version 120\n"
+        "uniform sampler2D sampler;\n"
+        "void main(void)\n"
+        "{\n"
+        "    gl_FragDepth = texture2D(sampler, gl_TexCoord[0].xy).x;\n"
+        "}\n",
+        /* tex_3d */
+        NULL,
+        /* tex_cube */
+        "#version 120\n"
+        "uniform samplerCube sampler;\n"
+        "void main(void)\n"
+        "{\n"
+        "    gl_FragDepth = textureCube(sampler, gl_TexCoord[0].xyz).x;\n"
+        "}\n",
+        /* tex_rect */
+        "#version 120\n"
+        "#extension GL_ARB_texture_rectangle : enable\n"
+        "uniform sampler2DRect sampler;\n"
+        "void main(void)\n"
+        "{\n"
+        "    gl_FragDepth = texture2DRect(sampler, gl_TexCoord[0].xy).x;\n"
+        "}\n",
+    };
+
+    if (!blt_pshaders[tex_type])
+    {
+        FIXME("tex_type %#x not supported\n", tex_type);
+        tex_type = tex_2d;
+    }
+
+    vshader_id = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+    GL_EXTCALL(glShaderSourceARB(vshader_id, 1, blt_vshader, NULL));
+    GL_EXTCALL(glCompileShaderARB(vshader_id));
+    shader_glsl_validate_compile_link(gl_info, vshader_id, FALSE);
+
+    pshader_id = GL_EXTCALL(glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB));
+    GL_EXTCALL(glShaderSourceARB(pshader_id, 1, &blt_pshaders[tex_type], NULL));
+    GL_EXTCALL(glCompileShaderARB(pshader_id));
+
+    shader_glsl_validate_compile_link(gl_info, vshader_id, FALSE);
+
+    program_id = GL_EXTCALL(glCreateProgramObjectARB());
+    GL_EXTCALL(glAttachObjectARB(program_id, vshader_id));
+    GL_EXTCALL(glAttachObjectARB(program_id, pshader_id));
+    GL_EXTCALL(glLinkProgramARB(program_id));
+    shader_glsl_validate_compile_link(gl_info, program_id, TRUE);
+
+    /* Once linked we can mark the shaders for deletion. They will be deleted once the program
+     * is destroyed
+     */
+    GL_EXTCALL(glDeleteObjectARB(vshader_id));
+    GL_EXTCALL(glDeleteObjectARB(pshader_id));
+    return program_id;
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS)
+{
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    IWineD3DDeviceImpl *device = context_get_device(context);
+    struct shader_glsl_priv *priv = device->shader_priv;
+    GLhandleARB program_id = 0;
+    GLenum old_vertex_color_clamp, current_vertex_color_clamp;
+
+    old_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vertex_color_clamp : GL_FIXED_ONLY_ARB;
+
+    if (useVS || usePS) set_glsl_shader_program(context, device, usePS, useVS);
+    else priv->glsl_program = NULL;
+
+    current_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vertex_color_clamp : GL_FIXED_ONLY_ARB;
+
+    if (old_vertex_color_clamp != current_vertex_color_clamp)
+    {
+        if (gl_info->supported[ARB_COLOR_BUFFER_FLOAT])
+        {
+            GL_EXTCALL(glClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, current_vertex_color_clamp));
+            checkGLcall("glClampColorARB");
+        }
+        else
+        {
+            FIXME("vertex color clamp needs to be changed, but extension not supported.\n");
+        }
+    }
+
+    program_id = priv->glsl_program ? priv->glsl_program->programId : 0;
+    if (program_id) TRACE("Using GLSL program %p\n", (void *)(uintptr_t)program_id);
+    GL_EXTCALL(glUseProgramObjectARB(program_id));
+    checkGLcall("glUseProgramObjectARB");
+#ifdef DEBUG_misha
+    {
+        GLint programIdTest = -1;
+        glGetIntegerv(GL_CURRENT_PROGRAM,  &programIdTest);
+        Assert(programIdTest == program_id);
+    }
+#endif
+
+    /* In case that NP2 texcoord fixup data is found for the selected program, trigger a reload of the
+     * constants. This has to be done because it can't be guaranteed that sampler() (from state.c) is
+     * called between selecting the shader and using it, which results in wrong fixup for some frames. */
+    if (priv->glsl_program && WINEFIXUPINFO_ISVALID(priv->glsl_program))
+    {
+        shader_glsl_load_np2fixup_constants((IWineD3DDevice *)device, usePS, useVS);
+    }
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_select_depth_blt(IWineD3DDevice *iface, enum tex_types tex_type) {
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+    struct shader_glsl_priv *priv = This->shader_priv;
+    GLhandleARB *blt_program = &priv->depth_blt_program[tex_type];
+
+    if (!*blt_program) {
+        GLint loc;
+        *blt_program = create_glsl_blt_shader(gl_info, tex_type);
+        loc = GL_EXTCALL(glGetUniformLocationARB(*blt_program, "sampler"));
+        GL_EXTCALL(glUseProgramObjectARB(*blt_program));
+#ifdef DEBUG_misha
+        {
+            GLint programIdTest = -1;
+            glGetIntegerv(GL_CURRENT_PROGRAM,  &programIdTest);
+            Assert(programIdTest == *blt_program);
+        }
+#endif
+        GL_EXTCALL(glUniform1iARB(loc, 0));
+    } else {
+        GL_EXTCALL(glUseProgramObjectARB(*blt_program));
+#ifdef DEBUG_misha
+        {
+            GLint programIdTest = -1;
+            glGetIntegerv(GL_CURRENT_PROGRAM,  &programIdTest);
+            Assert(programIdTest == *blt_program);
+        }
+#endif
+    }
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_deselect_depth_blt(IWineD3DDevice *iface) {
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+    struct shader_glsl_priv *priv = This->shader_priv;
+    GLhandleARB program_id;
+
+    program_id = priv->glsl_program ? priv->glsl_program->programId : 0;
+    if (program_id) TRACE("Using GLSL program %p\n", (void *)(uintptr_t)program_id);
+
+    GL_EXTCALL(glUseProgramObjectARB(program_id));
+    checkGLcall("glUseProgramObjectARB");
+#ifdef DEBUG_misha
+    {
+        GLint programIdTest = -1;
+        glGetIntegerv(GL_CURRENT_PROGRAM,  &programIdTest);
+        Assert(programIdTest == program_id);
+    }
+#endif
+}
+
+static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
+    const struct list *linked_programs;
+    IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *) iface;
+    IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)This->baseShader.device;
+    struct shader_glsl_priv *priv = device->shader_priv;
+    const struct wined3d_gl_info *gl_info;
+    struct wined3d_context *context;
+
+    /* Note: Do not use QueryInterface here to find out which shader type this is because this code
+     * can be called from IWineD3DBaseShader::Release
+     */
+    char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type);
+
+    if(pshader) {
+        struct glsl_pshader_private *shader_data;
+        shader_data = This->baseShader.backend_data;
+        if(!shader_data || shader_data->num_gl_shaders == 0)
+        {
+            HeapFree(GetProcessHeap(), 0, shader_data);
+            This->baseShader.backend_data = NULL;
+            return;
+        }
+
+        context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+        gl_info = context->gl_info;
+
+        if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->pshader == iface)
+        {
+            ENTER_GL();
+            shader_glsl_select(context, FALSE, FALSE);
+            LEAVE_GL();
+        }
+    } else {
+        struct glsl_vshader_private *shader_data;
+        shader_data = This->baseShader.backend_data;
+        if(!shader_data || shader_data->num_gl_shaders == 0)
+        {
+            HeapFree(GetProcessHeap(), 0, shader_data);
+            This->baseShader.backend_data = NULL;
+            return;
+        }
+
+        context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+        gl_info = context->gl_info;
+
+        if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->vshader == iface)
+        {
+            ENTER_GL();
+            shader_glsl_select(context, FALSE, FALSE);
+            LEAVE_GL();
+        }
+    }
+
+    linked_programs = &This->baseShader.linked_programs;
+
+    TRACE("Deleting linked programs\n");
+    if (linked_programs->next) {
+        struct glsl_shader_prog_link *entry, *entry2;
+
+        ENTER_GL();
+        if(pshader) {
+            LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, struct glsl_shader_prog_link, pshader_entry) {
+                delete_glsl_program_entry(priv, gl_info, entry);
+            }
+        } else {
+            LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, struct glsl_shader_prog_link, vshader_entry) {
+                delete_glsl_program_entry(priv, gl_info, entry);
+            }
+        }
+        LEAVE_GL();
+    }
+
+    if(pshader) {
+        UINT i;
+        struct glsl_pshader_private *shader_data = This->baseShader.backend_data;
+
+        ENTER_GL();
+        for(i = 0; i < shader_data->num_gl_shaders; i++) {
+            if (shader_data->gl_shaders[i].context==context_get_current())
+            {
+                TRACE("deleting pshader %p\n", (void *)(uintptr_t)shader_data->gl_shaders[i].prgId);
+                GL_EXTCALL(glDeleteObjectARB(shader_data->gl_shaders[i].prgId));
+                checkGLcall("glDeleteObjectARB");
+            }
+            else
+            {
+                WARN("Attempting to delete pshader %p created in ctx %p from ctx %p\n",
+                     (void *)(uintptr_t)shader_data->gl_shaders[i].prgId, shader_data->gl_shaders[i].context, context_get_current());
+            }
+        }
+        LEAVE_GL();
+        HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
+    }
+    else
+    {
+        UINT i;
+        struct glsl_vshader_private *shader_data = This->baseShader.backend_data;
+
+        ENTER_GL();
+        for(i = 0; i < shader_data->num_gl_shaders; i++) {
+            if (shader_data->gl_shaders[i].context==context_get_current())
+            {
+                TRACE("deleting vshader %p\n", (void *)(uintptr_t)shader_data->gl_shaders[i].prgId);
+                GL_EXTCALL(glDeleteObjectARB(shader_data->gl_shaders[i].prgId));
+                checkGLcall("glDeleteObjectARB");
+            }
+            else
+            {
+                WARN("Attempting to delete vshader %p created in ctx %p from ctx %p\n",
+                     (void *)(uintptr_t)shader_data->gl_shaders[i].prgId, shader_data->gl_shaders[i].context, context_get_current());
+            }
+        }
+        LEAVE_GL();
+        HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
+    }
+
+    HeapFree(GetProcessHeap(), 0, This->baseShader.backend_data);
+    This->baseShader.backend_data = NULL;
+
+    context_release(context);
+}
+
+static int glsl_program_key_compare(const void *key, const struct wine_rb_entry *entry)
+{
+    const glsl_program_key_t *k = key;
+    const struct glsl_shader_prog_link *prog = WINE_RB_ENTRY_VALUE(entry,
+            const struct glsl_shader_prog_link, program_lookup_entry);
+    int cmp;
+
+    if (k->context > prog->context) return 1;
+    else if (k->context < prog->context) return -1;
+
+    if (k->vshader > prog->vshader) return 1;
+    else if (k->vshader < prog->vshader) return -1;
+
+    if (k->pshader > prog->pshader) return 1;
+    else if (k->pshader < prog->pshader) return -1;
+
+    if (k->vshader && (cmp = memcmp(&k->vs_args, &prog->vs_args, sizeof(prog->vs_args)))) return cmp;
+    if (k->pshader && (cmp = memcmp(&k->ps_args, &prog->ps_args, sizeof(prog->ps_args)))) return cmp;
+
+    return 0;
+}
+
+static BOOL constant_heap_init(struct constant_heap *heap, unsigned int constant_count)
+{
+    SIZE_T size = (constant_count + 1) * sizeof(*heap->entries) + constant_count * sizeof(*heap->positions);
+    void *mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
+
+    if (!mem)
+    {
+        ERR("Failed to allocate memory\n");
+        return FALSE;
+    }
+
+    heap->entries = mem;
+    heap->entries[1].version = 0;
+    heap->positions = (unsigned int *)(heap->entries + constant_count + 1);
+    heap->size = 1;
+
+    return TRUE;
+}
+
+static void constant_heap_free(struct constant_heap *heap)
+{
+    HeapFree(GetProcessHeap(), 0, heap->entries);
+}
+
+static const struct wine_rb_functions wined3d_glsl_program_rb_functions =
+{
+    wined3d_rb_alloc,
+    wined3d_rb_realloc,
+    wined3d_rb_free,
+    glsl_program_key_compare,
+};
+
+static HRESULT shader_glsl_alloc(IWineD3DDevice *iface) {
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+    struct shader_glsl_priv *priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct shader_glsl_priv));
+    SIZE_T stack_size = wined3d_log2i(max(gl_info->limits.glsl_vs_float_constants,
+            gl_info->limits.glsl_ps_float_constants)) + 1;
+
+    if (!shader_buffer_init(&priv->shader_buffer))
+    {
+        ERR("Failed to initialize shader buffer.\n");
+        goto fail;
+    }
+
+    priv->stack = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, stack_size * sizeof(*priv->stack));
+    if (!priv->stack)
+    {
+        ERR("Failed to allocate memory.\n");
+        goto fail;
+    }
+    if (!constant_heap_init(&priv->vconst_heap, gl_info->limits.glsl_vs_float_constants))
+    {
+        ERR("Failed to initialize vertex shader constant heap\n");
+        goto fail;
+    }
+    if (!constant_heap_init(&priv->pconst_heap, gl_info->limits.glsl_ps_float_constants))
+    {
+        ERR("Failed to initialize pixel shader constant heap\n");
+        goto fail;
+    }
+
+    if (wine_rb_init(&priv->program_lookup, &wined3d_glsl_program_rb_functions) == -1)
+    {
+        ERR("Failed to initialize rbtree.\n");
+        goto fail;
+    }
+
+    priv->next_constant_version = 1;
+
+    This->shader_priv = priv;
+    return WINED3D_OK;
+
+fail:
+    constant_heap_free(&priv->pconst_heap);
+    constant_heap_free(&priv->vconst_heap);
+    HeapFree(GetProcessHeap(), 0, priv->stack);
+    shader_buffer_free(&priv->shader_buffer);
+    HeapFree(GetProcessHeap(), 0, priv);
+    return E_OUTOFMEMORY;
+}
+
+/* Context activation is done by the caller. */
+static void shader_glsl_free(IWineD3DDevice *iface) {
+    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+    struct shader_glsl_priv *priv = This->shader_priv;
+    int i;
+
+    ENTER_GL();
+    for (i = 0; i < tex_type_count; ++i)
+    {
+        if (priv->depth_blt_program[i])
+        {
+            GL_EXTCALL(glDeleteObjectARB(priv->depth_blt_program[i]));
+        }
+    }
+    LEAVE_GL();
+
+    wine_rb_destroy(&priv->program_lookup, NULL, NULL);
+    constant_heap_free(&priv->pconst_heap);
+    constant_heap_free(&priv->vconst_heap);
+    HeapFree(GetProcessHeap(), 0, priv->stack);
+    shader_buffer_free(&priv->shader_buffer);
+
+    HeapFree(GetProcessHeap(), 0, This->shader_priv);
+    This->shader_priv = NULL;
+}
+
+static BOOL shader_glsl_dirty_const(IWineD3DDevice *iface) {
+    /* TODO: GL_EXT_bindable_uniform can be used to share constants across shaders */
+    return FALSE;
+}
+
+static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *pCaps)
+{
+    /* Nvidia Geforce6/7 or Ati R4xx/R5xx cards with GLSL support, support VS 3.0 but older Nvidia/Ati
+     * models with GLSL support only support 2.0. In case of nvidia we can detect VS 2.0 support based
+     * on the version of NV_vertex_program.
+     * For Ati cards there's no way using glsl (it abstracts the lowlevel info away) and also not
+     * using ARB_vertex_program. It is safe to assume that when a card supports pixel shader 2.0 it
+     * supports vertex shader 2.0 too and the way around. We can detect ps2.0 using the maximum number
+     * of native instructions, so use that here. For more info see the pixel shader versioning code below.
+     */
+    if ((gl_info->supported[NV_VERTEX_PROGRAM2] && !gl_info->supported[NV_VERTEX_PROGRAM3])
+            || gl_info->limits.arb_ps_instructions <= 512
+            || gl_info->limits.glsl_vs_float_constants < 256)
+        pCaps->VertexShaderVersion = WINED3DVS_VERSION(2,0);
+    else
+        pCaps->VertexShaderVersion = WINED3DVS_VERSION(3,0);
+    TRACE_(d3d_caps)("Hardware vertex shader version %d.%d enabled (GLSL)\n", (pCaps->VertexShaderVersion >> 8) & 0xff, pCaps->VertexShaderVersion & 0xff);
+    pCaps->MaxVertexShaderConst = gl_info->limits.glsl_vs_float_constants;
+
+    /* Older DX9-class videocards (GeforceFX / Radeon >9500/X*00) only support pixel shader 2.0/2.0a/2.0b.
+     * In OpenGL the extensions related to GLSL abstract lowlevel GL info away which is needed
+     * to distinguish between 2.0 and 3.0 (and 2.0a/2.0b). In case of Nvidia we use their fragment
+     * program extensions. On other hardware including ATI GL_ARB_fragment_program offers the info
+     * in max native instructions. Intel and others also offer the info in this extension but they
+     * don't support GLSL (at least on Windows).
+     *
+     * PS2.0 requires at least 96 instructions, 2.0a/2.0b go up to 512. Assume that if the number
+     * of instructions is 512 or less we have to do with ps2.0 hardware.
+     * NOTE: ps3.0 hardware requires 512 or more instructions but ati and nvidia offer 'enough' (1024 vs 4096) on their most basic ps3.0 hardware.
+     */
+    if ((gl_info->supported[NV_FRAGMENT_PROGRAM] && !gl_info->supported[NV_FRAGMENT_PROGRAM2])
+            || gl_info->limits.arb_ps_instructions <= 512
+            || gl_info->limits.glsl_vs_float_constants < 256)
+        pCaps->PixelShaderVersion = WINED3DPS_VERSION(2,0);
+    else
+        pCaps->PixelShaderVersion = WINED3DPS_VERSION(3,0);
+
+    pCaps->MaxPixelShaderConst = gl_info->limits.glsl_ps_float_constants;
+
+    /* FIXME: The following line is card dependent. -8.0 to 8.0 is the
+     * Direct3D minimum requirement.
+     *
+     * Both GL_ARB_fragment_program and GLSL require a "maximum representable magnitude"
+     * of colors to be 2^10, and 2^32 for other floats. Should we use 1024 here?
+     *
+     * The problem is that the refrast clamps temporary results in the shader to
+     * [-MaxValue;+MaxValue]. If the card's max value is bigger than the one we advertize here,
+     * then applications may miss the clamping behavior. On the other hand, if it is smaller,
+     * the shader will generate incorrect results too. Unfortunately, GL deliberately doesn't
+     * offer a way to query this.
+     */
+    pCaps->PixelShader1xMaxValue = 8.0;
+    TRACE_(d3d_caps)("Hardware pixel shader version %d.%d enabled (GLSL)\n", (pCaps->PixelShaderVersion >> 8) & 0xff, pCaps->PixelShaderVersion & 0xff);
+
+    pCaps->VSClipping = TRUE;
+}
+
+static BOOL shader_glsl_color_fixup_supported(struct color_fixup_desc fixup)
+{
+    if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
+    {
+        TRACE("Checking support for fixup:\n");
+        dump_color_fixup_desc(fixup);
+    }
+
+    /* We support everything except YUV conversions. */
+    if (!is_complex_fixup(fixup))
+    {
+        TRACE("[OK]\n");
+        return TRUE;
+    }
+
+    TRACE("[FAILED]\n");
+    return FALSE;
+}
+
+static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TABLE_SIZE] =
+{
+    /* WINED3DSIH_ABS           */ shader_glsl_map2gl,
+    /* WINED3DSIH_ADD           */ shader_glsl_arith,
+    /* WINED3DSIH_BEM           */ shader_glsl_bem,
+    /* WINED3DSIH_BREAK         */ shader_glsl_break,
+    /* WINED3DSIH_BREAKC        */ shader_glsl_breakc,
+    /* WINED3DSIH_BREAKP        */ NULL,
+    /* WINED3DSIH_CALL          */ shader_glsl_call,
+    /* WINED3DSIH_CALLNZ        */ shader_glsl_callnz,
+    /* WINED3DSIH_CMP           */ shader_glsl_cmp,
+    /* WINED3DSIH_CND           */ shader_glsl_cnd,
+    /* WINED3DSIH_CRS           */ shader_glsl_cross,
+    /* WINED3DSIH_CUT           */ NULL,
+    /* WINED3DSIH_DCL           */ NULL,
+    /* WINED3DSIH_DEF           */ NULL,
+    /* WINED3DSIH_DEFB          */ NULL,
+    /* WINED3DSIH_DEFI          */ NULL,
+    /* WINED3DSIH_DP2ADD        */ shader_glsl_dp2add,
+    /* WINED3DSIH_DP3           */ shader_glsl_dot,
+    /* WINED3DSIH_DP4           */ shader_glsl_dot,
+    /* WINED3DSIH_DST           */ shader_glsl_dst,
+    /* WINED3DSIH_DSX           */ shader_glsl_map2gl,
+    /* WINED3DSIH_DSY           */ shader_glsl_map2gl,
+    /* WINED3DSIH_ELSE          */ shader_glsl_else,
+    /* WINED3DSIH_EMIT          */ NULL,
+    /* WINED3DSIH_ENDIF         */ shader_glsl_end,
+    /* WINED3DSIH_ENDLOOP       */ shader_glsl_end,
+    /* WINED3DSIH_ENDREP        */ shader_glsl_end,
+    /* WINED3DSIH_EXP           */ shader_glsl_map2gl,
+    /* WINED3DSIH_EXPP          */ shader_glsl_expp,
+    /* WINED3DSIH_FRC           */ shader_glsl_map2gl,
+    /* WINED3DSIH_IADD          */ NULL,
+    /* WINED3DSIH_IF            */ shader_glsl_if,
+    /* WINED3DSIH_IFC           */ shader_glsl_ifc,
+    /* WINED3DSIH_IGE           */ NULL,
+    /* WINED3DSIH_LABEL         */ shader_glsl_label,
+    /* WINED3DSIH_LIT           */ shader_glsl_lit,
+    /* WINED3DSIH_LOG           */ shader_glsl_log,
+    /* WINED3DSIH_LOGP          */ shader_glsl_log,
+    /* WINED3DSIH_LOOP          */ shader_glsl_loop,
+    /* WINED3DSIH_LRP           */ shader_glsl_lrp,
+    /* WINED3DSIH_LT            */ NULL,
+    /* WINED3DSIH_M3x2          */ shader_glsl_mnxn,
+    /* WINED3DSIH_M3x3          */ shader_glsl_mnxn,
+    /* WINED3DSIH_M3x4          */ shader_glsl_mnxn,
+    /* WINED3DSIH_M4x3          */ shader_glsl_mnxn,
+    /* WINED3DSIH_M4x4          */ shader_glsl_mnxn,
+    /* WINED3DSIH_MAD           */ shader_glsl_mad,
+    /* WINED3DSIH_MAX           */ shader_glsl_map2gl,
+    /* WINED3DSIH_MIN           */ shader_glsl_map2gl,
+    /* WINED3DSIH_MOV           */ shader_glsl_mov,
+    /* WINED3DSIH_MOVA          */ shader_glsl_mov,
+    /* WINED3DSIH_MUL           */ shader_glsl_arith,
+    /* WINED3DSIH_NOP           */ NULL,
+    /* WINED3DSIH_NRM           */ shader_glsl_nrm,
+    /* WINED3DSIH_PHASE         */ NULL,
+    /* WINED3DSIH_POW           */ shader_glsl_pow,
+    /* WINED3DSIH_RCP           */ shader_glsl_rcp,
+    /* WINED3DSIH_REP           */ shader_glsl_rep,
+    /* WINED3DSIH_RET           */ shader_glsl_ret,
+    /* WINED3DSIH_RSQ           */ shader_glsl_rsq,
+    /* WINED3DSIH_SETP          */ NULL,
+    /* WINED3DSIH_SGE           */ shader_glsl_compare,
+    /* WINED3DSIH_SGN           */ shader_glsl_sgn,
+    /* WINED3DSIH_SINCOS        */ shader_glsl_sincos,
+    /* WINED3DSIH_SLT           */ shader_glsl_compare,
+    /* WINED3DSIH_SUB           */ shader_glsl_arith,
+    /* WINED3DSIH_TEX           */ shader_glsl_tex,
+    /* WINED3DSIH_TEXBEM        */ shader_glsl_texbem,
+    /* WINED3DSIH_TEXBEML       */ shader_glsl_texbem,
+    /* WINED3DSIH_TEXCOORD      */ shader_glsl_texcoord,
+    /* WINED3DSIH_TEXDEPTH      */ shader_glsl_texdepth,
+    /* WINED3DSIH_TEXDP3        */ shader_glsl_texdp3,
+    /* WINED3DSIH_TEXDP3TEX     */ shader_glsl_texdp3tex,
+    /* WINED3DSIH_TEXKILL       */ shader_glsl_texkill,
+    /* WINED3DSIH_TEXLDD        */ shader_glsl_texldd,
+    /* WINED3DSIH_TEXLDL        */ shader_glsl_texldl,
+    /* WINED3DSIH_TEXM3x2DEPTH  */ shader_glsl_texm3x2depth,
+    /* WINED3DSIH_TEXM3x2PAD    */ shader_glsl_texm3x2pad,
+    /* WINED3DSIH_TEXM3x2TEX    */ shader_glsl_texm3x2tex,
+    /* WINED3DSIH_TEXM3x3       */ shader_glsl_texm3x3,
+    /* WINED3DSIH_TEXM3x3DIFF   */ NULL,
+    /* WINED3DSIH_TEXM3x3PAD    */ shader_glsl_texm3x3pad,
+    /* WINED3DSIH_TEXM3x3SPEC   */ shader_glsl_texm3x3spec,
+    /* WINED3DSIH_TEXM3x3TEX    */ shader_glsl_texm3x3tex,
+    /* WINED3DSIH_TEXM3x3VSPEC  */ shader_glsl_texm3x3vspec,
+    /* WINED3DSIH_TEXREG2AR     */ shader_glsl_texreg2ar,
+    /* WINED3DSIH_TEXREG2GB     */ shader_glsl_texreg2gb,
+    /* WINED3DSIH_TEXREG2RGB    */ shader_glsl_texreg2rgb,
+};
+
+static void shader_glsl_handle_instruction(const struct wined3d_shader_instruction *ins) {
+    SHADER_HANDLER hw_fct;
+
+    /* Select handler */
+    hw_fct = shader_glsl_instruction_handler_table[ins->handler_idx];
+
+    /* Unhandled opcode */
+    if (!hw_fct)
+    {
+        FIXME("Backend can't handle opcode %#x\n", ins->handler_idx);
+        return;
+    }
+    hw_fct(ins);
+
+    shader_glsl_add_instruction_modifiers(ins);
+}
+
+const shader_backend_t glsl_shader_backend = {
+    shader_glsl_handle_instruction,
+    shader_glsl_select,
+    shader_glsl_select_depth_blt,
+    shader_glsl_deselect_depth_blt,
+    shader_glsl_update_float_vertex_constants,
+    shader_glsl_update_float_pixel_constants,
+    shader_glsl_load_constants,
+    shader_glsl_load_np2fixup_constants,
+    shader_glsl_destroy,
+    shader_glsl_alloc,
+    shader_glsl_free,
+    shader_glsl_dirty_const,
+    shader_glsl_get_caps,
+    shader_glsl_color_fixup_supported,
+};
+
+#if defined(VBOXWINEDBG_SHADERS) || defined(VBOX_WINE_WITH_PROFILE)
+void vboxWDbgPrintF(char * szString, ...)
+{
+    char szBuffer[4096*2] = {0};
+    va_list pArgList;
+    va_start(pArgList, szString);
+    _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), szString, pArgList);
+    va_end(pArgList);
+
+    OutputDebugStringA(szBuffer);
+}
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c b/src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c
new file mode 100644
index 0000000..e3467a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c
@@ -0,0 +1,512 @@
+/*
+ * Management of the debugging channels
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "initguid.h"
+#include <objbase.h>
+#include <wine/wined3d.h>
+#include <windows.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "wine/debug.h"
+//#include "wine/library.h"
+
+#ifdef VBOX_WITH_WDDM
+#include <VBoxDispMpLogger.h>
+#include <iprt/err.h>
+#else
+#include <iprt/log.h>
+#endif
+
+#if VBOX_WITH_VMSVGA
+/* WINE defines this as inline in its headers, directly accessing a memory location */
+#ifndef RT_OS_WINDOWS
+#define GetCurrentThreadId() (1)
+#endif
+#endif
+
+static const char * const debug_classes[] = { "fixme", "err", "warn", "trace" };
+
+#define MAX_DEBUG_OPTIONS 256
+
+typedef DECLCALLBACK(void) FNVBOXWINELOGBACKDOOR(char* pcszStr);
+typedef FNVBOXWINELOGBACKDOOR *PFNVBOXWINELOGBACKDOOR;
+static PFNVBOXWINELOGBACKDOOR vbox_log_backdoor = NULL;
+static unsigned char default_flags = (1 << __WINE_DBCL_ERR) | (1 << __WINE_DBCL_FIXME) | (1 << __WINE_DBCL_WARN);
+static int nb_debug_options = -1;
+static struct __wine_debug_channel debug_options[MAX_DEBUG_OPTIONS];
+
+static struct __wine_debug_functions funcs;
+
+static void debug_init(void);
+
+static int cmp_name( const void *p1, const void *p2 )
+{
+    const char *name = p1;
+    const struct __wine_debug_channel *chan = p2;
+    return strcmp( name, chan->name );
+}
+
+/* get the flags to use for a given channel, possibly setting them too in case of lazy init */
+unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel )
+{
+    if (nb_debug_options == -1) debug_init();
+
+    if (nb_debug_options)
+    {
+        struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,
+                                                    sizeof(debug_options[0]), cmp_name );
+        if (opt) return opt->flags;
+    }
+    /* no option for this channel */
+    if (channel->flags & (1 << __WINE_DBCL_INIT)) channel->flags = default_flags;
+    return default_flags;
+}
+
+/* set the flags to use for a given channel; return 0 if the channel is not available to set */
+int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+                                  unsigned char set, unsigned char clear )
+{
+    if (nb_debug_options == -1) debug_init();
+
+    if (nb_debug_options)
+    {
+        struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,
+                                                    sizeof(debug_options[0]), cmp_name );
+        if (opt)
+        {
+            opt->flags = (opt->flags & ~clear) | set;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+/* add a new debug option at the end of the option list */
+static void add_option( const char *name, unsigned char set, unsigned char clear )
+{
+    int min = 0, max = nb_debug_options - 1, pos, res;
+
+    if (!name[0])  /* "all" option */
+    {
+        default_flags = (default_flags & ~clear) | set;
+        return;
+    }
+    if (strlen(name) >= sizeof(debug_options[0].name)) return;
+
+    while (min <= max)
+    {
+        pos = (min + max) / 2;
+        res = strcmp( name, debug_options[pos].name );
+        if (!res)
+        {
+            debug_options[pos].flags = (debug_options[pos].flags & ~clear) | set;
+            return;
+        }
+        if (res < 0) max = pos - 1;
+        else min = pos + 1;
+    }
+    if (nb_debug_options >= MAX_DEBUG_OPTIONS) return;
+
+    pos = min;
+    if (pos < nb_debug_options) memmove( &debug_options[pos + 1], &debug_options[pos],
+                                         (nb_debug_options - pos) * sizeof(debug_options[0]) );
+    strcpy( debug_options[pos].name, name );
+    debug_options[pos].flags = (default_flags & ~clear) | set;
+    nb_debug_options++;
+}
+
+/* parse a set of debugging option specifications and add them to the option list */
+static void parse_options( const char *str )
+{
+    char *opt, *next, *options;
+    unsigned int i;
+
+    if (!(options = strdup(str))) return;
+    for (opt = options; opt; opt = next)
+    {
+        const char *p;
+        unsigned char set = 0, clear = 0;
+
+        if ((next = strchr( opt, ',' ))) *next++ = 0;
+
+        p = opt + strcspn( opt, "+-" );
+        if (!p[0]) p = opt;  /* assume it's a debug channel name */
+
+        if (p > opt)
+        {
+            for (i = 0; i < sizeof(debug_classes)/sizeof(debug_classes[0]); i++)
+            {
+                int len = strlen(debug_classes[i]);
+                if (len != (p - opt)) continue;
+                if (!memcmp( opt, debug_classes[i], len ))  /* found it */
+                {
+                    if (*p == '+') set |= 1 << i;
+                    else clear |= 1 << i;
+                    break;
+                }
+            }
+            if (i == sizeof(debug_classes)/sizeof(debug_classes[0])) /* bad class name, skip it */
+                continue;
+        }
+        else
+        {
+            if (*p == '-') clear = ~0;
+            else set = ~0;
+        }
+        if (*p == '+' || *p == '-') p++;
+        if (!p[0]) continue;
+
+        if (!strcmp( p, "all" ))
+            default_flags = (default_flags & ~clear) | set;
+        else
+            add_option( p, set, clear );
+    }
+    free( options );
+}
+
+
+/* print the usage message */
+static void debug_usage(void)
+{
+    static const char usage[] =
+        "Syntax of the WINEDEBUG variable:\n"
+        "  WINEDEBUG=[class]+xxx,[class]-yyy,...\n\n"
+        "Example: WINEDEBUG=+all,warn-heap\n"
+        "    turns on all messages except warning heap messages\n"
+        "Available message classes: err, warn, fixme, trace\n";
+    write( 2, usage, sizeof(usage) - 1 );
+    exit(1);
+}
+
+#ifndef VBOX_WITH_WDDM
+static DECLCALLBACK(void) vbox_log_backdoor_rt(char* pcszStr)
+{
+    RTLogPrintf("%s", pcszStr);
+}
+#else
+static DECLCALLBACK(void) vbox_log_backdoor_dispmp(char* pcszStr)
+{
+    VBoxDispMpLoggerLog(pcszStr);
+}
+#endif
+static void vbox_log_v(const char *pszFormat, va_list args)
+{
+    if (vbox_log_backdoor)
+    {
+        static char buf[8092];
+        int offset = sprintf(buf, "[0x%lx.0x%lx] Wine Debug: ", (unsigned long)GetCurrentProcessId(), (unsigned long)GetCurrentThreadId());
+        vsprintf(buf + offset, pszFormat, args);
+        vbox_log_backdoor(buf);
+    }
+}
+
+/* initialize all options at startup */
+static void debug_init(void)
+{
+    char *wine_debug;
+
+    if (nb_debug_options != -1) return;  /* already initialized */
+    nb_debug_options = 0;
+    if ((wine_debug = getenv("WINEDEBUG")))
+    {
+#ifndef VBOX_WITH_VMSVGA
+        Assert(0);
+#endif
+        if (!strcmp( wine_debug, "help" ))
+            debug_usage();
+        else if (getenv("WINEDEBUG_BACKDOOR"))
+        {
+#ifdef VBOX_WITH_WDDM
+            int rc = VBoxDispMpLoggerInit();
+            if (RT_SUCCESS(rc))
+                vbox_log_backdoor = vbox_log_backdoor_dispmp;
+//            else
+#else
+                vbox_log_backdoor = vbox_log_backdoor_rt;
+#endif
+        }
+        parse_options( wine_debug );
+    }
+}
+
+/* varargs wrapper for funcs.dbg_vprintf */
+int wine_dbg_printf( const char *format, ... )
+{
+    int ret;
+    va_list valist;
+
+    va_start(valist, format);
+    ret = funcs.dbg_vprintf( format, valist );
+    va_end(valist);
+    return ret;
+}
+
+/* printf with temp buffer allocation */
+const char *wine_dbg_sprintf( const char *format, ... )
+{
+    static const int max_size = 200;
+    char *ret;
+    int len;
+    va_list valist;
+
+    va_start(valist, format);
+    ret = funcs.get_temp_buffer( max_size );
+    len = vsnprintf( ret, max_size, format, valist );
+    if (len == -1 || len >= max_size) ret[max_size-1] = 0;
+    else funcs.release_temp_buffer( ret, len + 1 );
+    va_end(valist);
+    return ret;
+}
+
+
+/* varargs wrapper for funcs.dbg_vlog */
+int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                  const char *func, const char *format, ... )
+{
+    int ret;
+    va_list valist;
+
+    if (!(__wine_dbg_get_channel_flags( channel ) & (1 << cls))) return -1;
+
+    va_start(valist, format);
+    ret = funcs.dbg_vlog( cls, channel, func, format, valist );
+    va_end(valist);
+    return ret;
+}
+
+#if !defined(VBOX_WITH_VMSVGA) || defined(RT_OS_WINDOWS)
+int interlocked_xchg_add( int *dest, int incr )
+{
+    return InterlockedExchangeAdd(dest, incr);
+}
+#endif
+
+/* allocate some tmp string space */
+/* FIXME: this is not 100% thread-safe */
+static char *get_temp_buffer( size_t size )
+{
+    static char *list[32];
+    static int pos;
+    char *ret;
+    int idx;
+
+    idx = interlocked_xchg_add( &pos, 1 ) % (sizeof(list)/sizeof(list[0]));
+    if ((ret = realloc( list[idx], size ))) list[idx] = ret;
+    return ret;
+}
+
+
+/* release unused part of the buffer */
+static void release_temp_buffer( char *buffer, size_t size )
+{
+    /* don't bother doing anything */
+}
+
+
+/* default implementation of wine_dbgstr_an */
+static const char *default_dbgstr_an( const char *str, int n )
+{
+    static const char hex[16] = "0123456789abcdef";
+    char *dst, *res;
+    size_t size;
+
+    if (!((ULONG_PTR)str >> 16))
+    {
+        if (!str) return "(null)";
+        res = funcs.get_temp_buffer( 6 );
+        sprintf( res, "#%04x", LOWORD(str) );
+        return res;
+    }
+    if (n == -1) n = strlen(str);
+    if (n < 0) n = 0;
+    size = 10 + min( 300, n * 4 );
+    dst = res = funcs.get_temp_buffer( size );
+    *dst++ = '"';
+    while (n-- > 0 && dst <= res + size - 9)
+    {
+        unsigned char c = *str++;
+        switch (c)
+        {
+        case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+        case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+        case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+        case '"':  *dst++ = '\\'; *dst++ = '"'; break;
+        case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+        default:
+            if (c >= ' ' && c <= 126)
+                *dst++ = c;
+            else
+            {
+                *dst++ = '\\';
+                *dst++ = 'x';
+                *dst++ = hex[(c >> 4) & 0x0f];
+                *dst++ = hex[c & 0x0f];
+            }
+        }
+    }
+    *dst++ = '"';
+    if (n > 0)
+    {
+        *dst++ = '.';
+        *dst++ = '.';
+        *dst++ = '.';
+    }
+    *dst++ = 0;
+    funcs.release_temp_buffer( res, dst - res );
+    return res;
+}
+
+
+/* default implementation of wine_dbgstr_wn */
+static const char *default_dbgstr_wn( const WCHAR *str, int n )
+{
+    char *dst, *res;
+    size_t size;
+
+    if (!((ULONG_PTR)str >> 16))
+    {
+        if (!str) return "(null)";
+        res = funcs.get_temp_buffer( 6 );
+        sprintf( res, "#%04x", LOWORD(str) );
+        return res;
+    }
+    if (n == -1)
+    {
+        const WCHAR *end = str;
+        while (*end) end++;
+        n = end - str;
+    }
+    if (n < 0) n = 0;
+    size = 12 + min( 300, n * 5 );
+    dst = res = funcs.get_temp_buffer( size );
+    *dst++ = 'L';
+    *dst++ = '"';
+    while (n-- > 0 && dst <= res + size - 10)
+    {
+        WCHAR c = *str++;
+        switch (c)
+        {
+        case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+        case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+        case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+        case '"':  *dst++ = '\\'; *dst++ = '"'; break;
+        case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+        default:
+            if (c >= ' ' && c <= 126)
+                *dst++ = c;
+            else
+            {
+                *dst++ = '\\';
+                sprintf(dst,"%04x",c);
+                dst+=4;
+            }
+        }
+    }
+    *dst++ = '"';
+    if (n > 0)
+    {
+        *dst++ = '.';
+        *dst++ = '.';
+        *dst++ = '.';
+    }
+    *dst++ = 0;
+    funcs.release_temp_buffer( res, dst - res );
+    return res;
+}
+
+
+/* default implementation of wine_dbg_vprintf */
+static int default_dbg_vprintf( const char *format, va_list args )
+{
+    vbox_log_v(format, args);
+#ifdef DEBUG_leo
+    static FILE *output=NULL;
+    static int first_time = 1;
+
+    if (first_time)
+    {   
+        first_time = 0;
+        output = fopen( "winelog.txt", "w" );
+    }
+
+    if (output) vfprintf( output, format, args );
+#endif
+    return vfprintf( stdout, format, args );
+}
+
+
+/* default implementation of wine_dbg_vlog */
+static int default_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                             const char *func, const char *format, va_list args )
+{
+    int ret = 0;
+
+    if (cls < sizeof(debug_classes)/sizeof(debug_classes[0]))
+        ret += wine_dbg_printf( "%s:[%#x]:%s:%s ", debug_classes[cls], GetCurrentThreadId(), channel->name, func );
+    if (format)
+        ret += funcs.dbg_vprintf( format, args );
+    return ret;
+}
+
+/* wrappers to use the function pointers */
+
+const char *wine_dbgstr_an( const char * s, int n )
+{
+    return funcs.dbgstr_an(s, n);
+}
+
+const char *wine_dbgstr_wn( const WCHAR *s, int n )
+{
+    return funcs.dbgstr_wn(s, n);
+}
+
+void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+                               struct __wine_debug_functions *old_funcs, size_t size )
+{
+    if (old_funcs) memcpy( old_funcs, &funcs, min(sizeof(funcs),size) );
+    if (new_funcs) memcpy( &funcs, new_funcs, min(sizeof(funcs),size) );
+}
+
+static struct __wine_debug_functions funcs =
+{
+    get_temp_buffer,
+    release_temp_buffer,
+    default_dbgstr_an,
+    default_dbgstr_wn,
+    default_dbg_vprintf,
+    default_dbg_vlog
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h
new file mode 100644
index 0000000..a639e36
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h
@@ -0,0 +1,1275 @@
+/* include/config.h.  Generated from config.h.in by configure.  */
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+#include <stddef.h>
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH /* */
+
+/* Define to the file extension for executables. */
+#define EXEEXT ".exe"
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+/* #undef HAVE_ALSA_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+/* #undef HAVE_AL_AL_H */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+/* #undef HAVE_ARPA_NAMESER_H */
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+/* #undef HAVE_CAPI20_H */
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+/* #undef HAVE_CUPS_CUPS_H */
+
+/* Define to 1 if you have the <curses.h> header file. */
+/* #undef HAVE_CURSES_H */
+
+/* Define if you have the daylight variable */
+/* #undef HAVE_DAYLIGHT*/
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+/* #undef HAVE_DBUS_DBUS_H */
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+   file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+/* #undef HAVE_DLADDR */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H*/
+
+/* Define to 1 if you have the `dlopen' function. */
+/* #undef HAVE_DLOPEN*/
+
+/* Define to 1 if you have the <elf.h> header file. */
+/* #undef HAVE_ELF_H*/
+
+/* Define to 1 if you have the `epoll_create' function. */
+/* #undef HAVE_EPOLL_CREATE */
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+/* #undef HAVE_FONTCONFIG_FONTCONFIG_H */
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+/* #undef HAVE_FUTIMESAT */
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `getdirentries' function. */
+/* #undef HAVE_GETDIRENTRIES */
+
+/* Define to 1 if you have the `getnameinfo' function. */
+/* #undef HAVE_GETNAMEINFO */
+
+/* Define to 1 if you have the `getnetbyname' function. */
+/* #undef HAVE_GETNETBYNAME */
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+/* #undef HAVE_GETPAGESIZE */
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef HAVE_GETPWUID */
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+/* #undef HAVE_GETUID */
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+/* #undef HAVE_GRP_H */
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+/* #undef HAVE_GSM_GSM_H */
+
+/* Define to 1 if you have the <gsm.h> header file. */
+/* #undef HAVE_GSM_H */
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+/* #undef HAVE_HAL_LIBHAL_H */
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#define HAVE_IEEEFP_H 1
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define to 1 if you have the `isinf' function. */
+/* #undef HAVE_ISINF */
+
+/* Define to 1 if you have the `isnan' function. */
+/* #undef HAVE_ISNAN */
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+/* #undef HAVE_LBER_H */
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+/* #undef HAVE_LCMS_H */
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+/* #undef HAVE_LDAP_H */
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+/* #undef HAVE_LIBXML_PARSER_H */
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+/* #undef HAVE_LIBXSLT_PATTERN_H */
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+/* #undef HAVE_LIBXSLT_TRANSFORM_H */
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+/* #undef HAVE_LINK_H */
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+/* #undef HAVE_LINUX_22_JOYSTICK_API */
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+/* #undef HAVE_LINUX_CAPI_H */
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+/* #undef HAVE_LINUX_CDROM_H */
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+/* #undef HAVE_LINUX_HDREG_H */
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+/* #undef HAVE_LINUX_INPUT_H */
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+/* #undef HAVE_LINUX_IOCTL_H */
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+/* #undef HAVE_LINUX_IPX_H */
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+/* #undef HAVE_LINUX_IRDA_H */
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+/* #undef HAVE_LINUX_JOYSTICK_H */
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+/* #undef HAVE_LINUX_MAJOR_H */
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+/* #undef HAVE_LINUX_PARAM_H */
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+/* #undef HAVE_LINUX_SERIAL_H */
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+/* #undef HAVE_LINUX_TYPES_H */
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+/* #undef HAVE_MPG123_H */
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+/* #undef HAVE_NCURSES_H */
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+/* #undef HAVE_NETINET_IF_ETHER_H */
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+/* #undef HAVE_NETINET_IN_H */
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+/* #undef HAVE_NETINET_IN_SYSTM_H */
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+/* #undef HAVE_NETINET_IP_H */
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+/* #undef HAVE_NETINET_IP_ICMP_H */
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* #undef HAVE_NETINET_TCP_H */
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+/* #undef HAVE_NETINET_UDP_H */
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+/* #undef HAVE_NETIPX_IPX_H */
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+/* #undef HAVE_NET_IF_ARP_H */
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+/* #undef HAVE_NET_IF_H */
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+/* #undef HAVE_NET_ROUTE_H */
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+/* #undef HAVE_NS_MSG__MSG_PTR */
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+/* #undef HAVE_OPENSSL_ERR_H */
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+/* #undef HAVE_OPENSSL_SSL_H */
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+/* #undef HAVE_PID_T */
+
+/* Define to 1 if you have the `pipe2' function. */
+/* #undef HAVE_PIPE2 */
+
+/* Define to 1 if you have the <png.h> header file. */
+/* #undef HAVE_PNG_H */
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+/* #undef HAVE_PPDEV */
+
+/* Define to 1 if you have the `prctl' function. */
+/* #undef HAVE_PRCTL */
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+/* #undef HAVE_PTHREAD_GETATTR_NP */
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+/* #undef HAVE_PWD_H */
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+/* #undef HAVE_RESOLV */
+
+/* Define to 1 if you have the <resolv.h> header file. */
+/* #undef HAVE_RESOLV_H */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+/* #undef HAVE_SCHED_SETAFFINITY */
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+/* #undef HAVE_SCSI_SCSI_H */
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+/* #undef HAVE_SCSI_SCSI_IOCTL_H */
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+/* #undef HAVE_SCSI_SG_H */
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+/* #undef HAVE_SETRLIMIT */
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+/* #undef HAVE_SIGALTSTACK */
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T_SI_FD */
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+/* #undef HAVE_SNPRINTF */
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+#define HAVE_SPAWNVP 1
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+/* #undef HAVE_STDINT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+/* #undef HAVE_STROPTS_H */
+
+/* Define to 1 if you have the `strtold' function. */
+/* #undef HAVE_STRTOLD */
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+/* #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID */
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef HAVE_SYMLINK */
+
+/* Define to 1 if you have the <syscall.h> header file. */
+/* #undef HAVE_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+/* #undef HAVE_SYS_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#define HAVE_SYS_ELF32_H 1
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+/* #undef HAVE_SYS_EPOLL_H */
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+/* #undef HAVE_SYS_INOTIFY_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+/* #undef HAVE_SYS_MMAN_H */
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+/* #undef HAVE_SYS_PRCTL_H */
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+/* #undef HAVE_SYS_PTRACE_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef HAVE_SYS_RESOURCE_H */
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+/* #undef HAVE_SYS_SHM_H */
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+/* #undef HAVE_SYS_SIGNAL_H */
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+/* #undef HAVE_SYS_SOCKETVAR_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+/* #undef HAVE_SYS_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+/* #undef HAVE_SYS_USER_H */
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+/* #undef HAVE_SYS_UTSNAME_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+/* #undef HAVE_SYS_VM86_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+/* #undef HAVE_UCONTEXT_H */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+/* #undef HAVE_VSNPRINTF */
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_ZLIB 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+#define HAVE__PCLOSE 1
+
+/* Define to 1 if you have the `_popen' function. */
+#define HAVE__POPEN 1
+
+/* Define to 1 if you have the `_snprintf' function. */
+#define HAVE__SNPRINTF 1
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#define HAVE__SPAWNVP 1
+
+/* Define to 1 if you have the `_strdup' function. */
+#define HAVE__STRDUP 1
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#define HAVE__VSNPRINTF 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel at winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.dll"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl _" #name suffix "\n\t.def _" #name suffix "; .scl 2; .type 32; .endef\n_" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"
+
+/* Define to a macro to generate an assembly function with C calling
+   convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) "_" name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) "@" #args
+
+/* Define to a macro to generate an assembly function with stdcall calling
+   convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h
new file mode 100644
index 0000000..cf1eff3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h
@@ -0,0 +1,1154 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8_H
+#define __WINE_D3D8_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION  0x0800
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef __WINESRC__
+# include <windows.h>
+#endif
+
+#include <d3d8types.h>
+#include <d3d8caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE                  0x00000002L
+#define D3DCREATE_MULTITHREADED                 0x00000004L
+#define D3DCREATE_PUREDEVICE                    0x00000010L
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L
+#define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN                         0x00000001L
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION              220
+#define D3DADAPTER_DEFAULT           0
+#define D3DENUM_NO_WHQL_LEVEL        2
+
+#define _FACD3D  0x876
+#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
+
+/*
+ * Direct3D Errors
+ */
+#define D3D_OK                                  S_OK
+#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
+
+#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D8,              0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);
+typedef struct IDirect3D8 *LPDIRECT3D8;
+
+DEFINE_GUID(IID_IDirect3DDevice8,        0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF);
+typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8;
+
+DEFINE_GUID(IID_IDirect3DResource8,      0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F);
+typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer8,  0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95);
+typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DVolume8,        0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0);
+typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;
+
+DEFINE_GUID(IID_IDirect3DSwapChain8,     0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD);
+typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;
+
+DEFINE_GUID(IID_IDirect3DSurface8,       0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD);
+typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer8,   0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86);
+typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture8,   0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E);
+typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DTexture8,       0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58);
+typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture8,   0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50);
+typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD);
+typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;
+
+/*****************************************************************************
+ * IDirect3D8 interface
+ */
+#define INTERFACE IDirect3D8
+DECLARE_INTERFACE_(IDirect3D8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D8 methods ***/
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;
+    STDMETHOD_(UINT,GetAdapterCount             )(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT  Adapter, DWORD  Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE;
+    STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT  Adapter) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT  Adapter, UINT  Mode, D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT  Adapter, D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT  Adapter, D3DDEVTYPE  CheckType, D3DFORMAT  DisplayFormat, D3DFORMAT  BackBufferFormat, BOOL  Windowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, DWORD  Usage, D3DRESOURCETYPE  RType, D3DFORMAT  CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  SurfaceFormat, BOOL  Windowed, D3DMULTISAMPLE_TYPE  MultiSampleType) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, D3DFORMAT  RenderTargetFormat, D3DFORMAT  DepthStencilFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DCAPS8 * pCaps) PURE;
+    STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT  Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType,HWND  hFocusWindow, DWORD  BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b)                    (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D8_AddRef(p)                                (p)->lpVtbl->AddRef(p)
+#define IDirect3D8_Release(p)                               (p)->lpVtbl->Release(p)
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D8_GetAdapterCount(p)                       (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->lpVtbl->GetAdapterModeCount(p,a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b)                    (p)->QueryInterface(a,b)
+#define IDirect3D8_AddRef(p)                                (p)->AddRef()
+#define IDirect3D8_Release(p)                               (p)->Release()
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->RegisterSoftwareDevice(a)
+#define IDirect3D8_GetAdapterCount(p)                       (p)->GetAdapterCount()
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->GetAdapterModeCount(a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->EnumAdapterModes(a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->GetAdapterMonitor(a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume8 interface
+ */
+#define INTERFACE IDirect3DVolume8
+DECLARE_INTERFACE_(IDirect3DVolume8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVolume8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid,CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID   refguid,void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE;
+    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox, DWORD  Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume8_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolume8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolume8_Release(p)                   (p)->Release()
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DVolume8_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)
+#define IDirect3DVolume8_UnlockBox(p)                 (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain8 interface
+ */
+#define INTERFACE IDirect3DSwapChain8
+DECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain8 methods ***/
+    STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect, CONST RECT * pDestRect, HWND  hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer, D3DBACKBUFFER_TYPE  Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c)             (p)->lpVtbl->Present(p,a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSwapChain8_Release(p)                   (p)->Release()
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c)             (p)->Present(a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface8 interface
+ */
+#define INTERFACE IDirect3DSurface8
+DECLARE_INTERFACE_(IDirect3DSurface8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSurface8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid,CONST void * pData,DWORD  SizeOfData,DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT * pLockedRect, CONST RECT * pRect,DWORD  Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface8_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSurface8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSurface8_Release(p)                   (p)->Release()
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DSurface8_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)
+#define IDirect3DSurface8_UnlockRect(p)                (p)->UnlockRect()
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource8 interface
+ */
+#define INTERFACE IDirect3DResource8
+DECLARE_INTERFACE_(IDirect3DResource8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource8_GetType(p)                   (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DResource8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DResource8_Release(p)                   (p)->Release()
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DResource8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DResource8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DResource8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DResource8_GetType(p)                   (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer8 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer8
+DECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DVertexBuffer8 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC  * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVertexBuffer8_Release(p)                   (p)->Release()
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVertexBuffer8_GetType(p)                   (p)->GetType()
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->Unlock()
+#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer8 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer8
+DECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DIndexBuffer8 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DIndexBuffer8_Release(p)                   (p)->Release()
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DIndexBuffer8_GetType(p)                   (p)->GetType()
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->Unlock()
+#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture8 interface
+ */
+#define INTERFACE IDirect3DBaseTexture8
+DECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DBaseTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DBaseTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DBaseTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture8 interface
+ */
+#define INTERFACE IDirect3DCubeTexture8
+DECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DCubeTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD  Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES  FaceType,CONST RECT * pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DCubeTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DCubeTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DCubeTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture8 interface
+ */
+#define INTERFACE IDirect3DTexture8
+DECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(GetSurfaceLevel)(THIS_ UINT  Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE;
+    STDMETHOD(LockRect)(THIS_ UINT  Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD  Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ UINT  Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT * pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a)              (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a)              (p)->UnlockRect(a)
+#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture8 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture8
+DECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DVolumeTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DVOLUME_DESC * pDesc) PURE;
+    STDMETHOD(GetVolumeLevel)(THIS_ UINT  Level,IDirect3DVolume8 ** ppVolumeLevel) PURE;
+    STDMETHOD(LockBox)(THIS_ UINT  Level,D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox,DWORD  Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS_ UINT  Level) PURE;
+    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX * pDirtyBox) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolumeTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVolumeTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice8 interface
+ */
+#define INTERFACE IDirect3DDevice8
+DECLARE_INTERFACE_(IDirect3DDevice8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice8 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD  Bytes) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS  * pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT  XHotSpot, UINT  YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE;
+    STDMETHOD_(void,SetCursorPosition)(THIS_ UINT  XScreenSpace, UINT  YScreenSpace,DWORD  Flags) PURE;
+    STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL  bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect,CONST RECT * pDestRect,HWND  hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer,D3DBACKBUFFER_TYPE  Type,IDirect3DSurface8 ** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE;
+    STDMETHOD_(void,SetGammaRamp)(THIS_ DWORD  Flags,CONST D3DGAMMARAMP * pRamp) PURE;
+    STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT  Width,UINT  Height,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DTexture8 ** ppTexture) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT  Width,UINT  Height,UINT  Depth,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT  EdgeLength,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT  Length,DWORD  Usage,DWORD  FVF,D3DPOOL  Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT  Length,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,BOOL  Lockable,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CreateImageSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 * pSourceSurface,CONST RECT * pSourceRectsArray,UINT  cRects,IDirect3DSurface8 * pDestinationSurface,CONST POINT * pDestPointsArray) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE;
+    STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD  Count,CONST D3DRECT * pRects,DWORD  Flags,D3DCOLOR  Color,float  Z,DWORD  Stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE  State,CONST D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE  State,D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE  State, CONST D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT8 * pViewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL8 * pMaterial) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD  Index,CONST D3DLIGHT8 * pLight) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD  Index,D3DLIGHT8 * pLight) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD  Index,BOOL  Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD  Index,BOOL * pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD  Index,CONST float * pPlane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD  Index,float * pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD  Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD * pValue) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE;
+    STDMETHOD(ApplyStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(CaptureStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(DeleteStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE  Type,DWORD * pToken) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS8 * pClipStatus) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 ** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 * pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD * pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD  Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE;
+    STDMETHOD(GetInfo)(THIS_ DWORD  DevInfoID,void * pDevInfoStruct,DWORD  DevInfoStructSize) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT  PaletteNumber,CONST PALETTEENTRY * pEntries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT  PaletteNumber,PALETTEENTRY * pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT  PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT  * PaletteNumber) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  StartVertex,UINT  PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  minIndex,UINT  NumVertices,UINT  startIndex,UINT  primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  PrimitiveCount,CONST void * pVertexStreamZeroData,UINT  VertexStreamZeroStride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  MinVertexIndex,UINT  NumVertexIndices,UINT  PrimitiveCount,CONST void * pIndexData,D3DFORMAT  IndexDataFormat,CONST void * pVertexStreamZeroData,UINT  VertexStreamZeroStride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT  SrcStartIndex,UINT  DestIndex,UINT  VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD  Flags) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD * pDeclaration,CONST DWORD * pFunction,DWORD * pHandle,DWORD  Usage) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE;
+    STDMETHOD(DeleteVertexShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD  Register,CONST void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT  Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT  BaseVertexIndex) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD * pFunction,DWORD * pHandle) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE;
+    STDMETHOD(DeletePixelShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD  Register,CONST void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT  Handle,CONST float * pNumSegs,CONST D3DRECTPATCH_INFO * pRectPatchInfo) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT  Handle,CONST float * pNumSegs,CONST D3DTRIPATCH_INFO * pTriPatchInfo) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT  Handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice8_AddRef(p)                                 (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice8_Release(p)                                (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)
+#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice8_Reset(p,a)                                (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->lpVtbl->SetGammaRamp(p,a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->lpVtbl->GetGammaRamp(p,a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->lpVtbl->CopyRects(p,a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->lpVtbl->GetFrontBuffer(p,a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice8_BeginScene(p)                             (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice8_EndScene(p)                               (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice8_SetViewport(p,a)                          (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice8_GetViewport(p,a)                          (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->lpVtbl->GetInfo(p,a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->lpVtbl->processVertices(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->lpVtbl->DeleteVertexShader(p,a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->lpVtbl->SetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->lpVtbl->GetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->lpVtbl->SetIndices(p,a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->lpVtbl->GetIndices(p,a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->lpVtbl->DeletePixelShader(p,a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->lpVtbl->DeletePatch(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->QueryInterface(a,b)
+#define IDirect3DDevice8_AddRef(p)                                 (p)->AddRef()
+#define IDirect3DDevice8_Release(p)                                (p)->Release()
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->TestCooperativeLevel()
+#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->GetAvailableTextureMem()
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->ResourceManagerDiscardBytes(a)
+#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->GetDirect3D(a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->GetDeviceCaps(a)
+#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->GetDisplayMode(a)
+#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->GetCreationParameters(a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->ShowCursor(a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice8_Reset(p,a)                                (p)->Reset(a)
+#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->Present(a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->GetBackBuffer(a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->GetRasterStatus(a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->SetGammaRamp(a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->GetGammaRamp(a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->CreateTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->CreateCubeTexture(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->CreateVertexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->CreateIndexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->CreateRenderTarget(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->CreateDepthStencilSurface(a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->CreateImageSurface(a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->CopyRects(a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->UpdateTexture(a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->GetFrontBuffer(a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->GetRenderTarget(a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice8_BeginScene(p)                             (p)->BeginScene()
+#define IDirect3DDevice8_EndScene(p)                               (p)->EndScene()
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->SetTransform(a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->GetTransform(a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice8_SetViewport(p,a)                          (p)->SetViewport(a)
+#define IDirect3DDevice8_GetViewport(p,a)                          (p)->GetViewport(a)
+#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->SetMaterial(a)
+#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->GetMaterial(a)
+#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->SetLight(a,b)
+#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->GetLight(a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->LightEnable(a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->GetLightEnable(a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->SetClipPlane(a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->GetClipPlane(a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->SetRenderState(a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->GetRenderState(a,b)
+#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->BeginStateBlock()
+#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->EndStateBlock(a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->ApplyStateBlock(a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->CaptureStateBlock(a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->DeleteStateBlock(a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->SetClipStatus(a)
+#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->GetClipStatus(a)
+#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->GetTexture(a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->SetTexture(a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->ValidateDevice(a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->GetInfo(a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->DrawIndexedPrimitive(a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->processVertices(a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->CreateVertexShader(a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->SetVertexShader(a)
+#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->GetVertexShader(a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->DeleteVertexShader(a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->SetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->GetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->GetVertexShaderDeclaration(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->GetVertexShaderFunction(a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->SetStreamSource(a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->GetStreamSource(a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->SetIndices(a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->GetIndices(a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->SetPixelShader(a)
+#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->GetPixelShader(a)
+#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->DeletePixelShader(a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->SetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->GetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->GetPixelShaderFunction(a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->DeletePatch(a)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* defined(__cplusplus) */
+
+/* Define the main entrypoint as well */
+IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_D3D8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h
new file mode 100644
index 0000000..0e13947
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h
@@ -0,0 +1,2047 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ *                         Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9_H
+#define __WINE_D3D9_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION  0x0900
+#endif
+
+
+
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+# ifndef __WINESRC__
+# include <windows.h>
+# endif
+#endif
+#include <d3d9types.h>
+#include <d3d9caps.h>
+#ifdef VBOX_WINE_WITHOUT_LIBWINE
+# include <d3dhal.h>
+# include <d3dtypes.h>
+# include <d3dcaps.h>
+#endif
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE                  0x00000002L
+#define D3DCREATE_MULTITHREADED                 0x00000004L
+#define D3DCREATE_PUREDEVICE                    0x00000010L
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L
+#define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     0x00000100L
+#define D3DCREATE_ADAPTERGROUP_DEVICE           0x00000200L
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN                         0x00000001L
+
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION                         32
+#define D3DADAPTER_DEFAULT                      0
+#define D3DENUM_NO_WHQL_LEVEL                   0x00000002L
+#define D3DPRESENT_BACK_BUFFERS_MAX             3L
+#define D3DSGR_NO_CALIBRATION                   0x00000000L
+#define D3DSGR_CALIBRATE                        0x00000001L
+
+#define _FACD3D  0x876
+#define MAKE_D3DHRESULT( code )                 MAKE_HRESULT( 1, _FACD3D, code )
+#define MAKE_D3DSTATUS( code )                  MAKE_HRESULT( 0, _FACD3D, code )
+
+/*****************************************************************************
+ * Direct3D Errors
+ */
+#define D3D_OK                                  S_OK
+#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
+#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
+#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)
+#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D9,                   0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);
+typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;
+
+DEFINE_GUID(IID_IDirect3D9Ex,                 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);
+typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;
+
+DEFINE_GUID(IID_IDirect3DDevice9,             0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);
+typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;
+
+DEFINE_GUID(IID_IDirect3DDevice9Ex,           0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);
+typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;
+
+DEFINE_GUID(IID_IDirect3DResource9,           0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);
+typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer9,       0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);
+typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DVolume9,             0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);
+typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9,          0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);
+typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9Ex,        0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);
+typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;
+
+DEFINE_GUID(IID_IDirect3DSurface9,            0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);
+typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer9,        0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);
+typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture9,        0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);
+typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DTexture9,            0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);
+typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture9,        0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);
+typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture9,      0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);
+typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVertexDeclaration9,  0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);
+typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;
+
+DEFINE_GUID(IID_IDirect3DVertexShader9,       0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);
+typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;
+
+DEFINE_GUID(IID_IDirect3DPixelShader9,        0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);
+typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;
+
+DEFINE_GUID(IID_IDirect3DStateBlock9,         0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);
+typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;
+
+DEFINE_GUID(IID_IDirect3DQuery9,              0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);
+typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
+
+/*****************************************************************************
+ * IDirect3D9 interface
+ */
+#define INTERFACE IDirect3D9
+DECLARE_INTERFACE_(IDirect3D9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D9 methods ***/
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D9_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9_AddRef(p)             (p)->AddRef()
+#define IDirect3D9_Release(p)            (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9_GetAdapterCount(p)                         (p)->GetAdapterCount()
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3D9Ex interface
+ */
+#define INTERFACE IDirect3D9Ex
+DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D9 methods ***/
+
+    /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that
+     * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's
+     * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9.
+     * This is probably because even in MS's header IDirect3D9Ex inherits from IDirect3D9, which makes the
+     * C++ inferface compatible, and nobody uses the C interface in Windows world.
+     */
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+
+    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+    /*** IDirect3D9Ex methods ***/
+    STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter) PURE;
+    STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter, UINT Mode, D3DDISPLAYMODEEX* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
+    STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;
+    STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D9Ex_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+/*** IDirect3D9Ex methods ***/
+#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b)               (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d)              (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c)           (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)
+#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)
+#define IDirect3D9Ex_GetAdapterLUID(p,a,b)                      (p)->lpVtbl->GetAdapterLUID(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9Ex_AddRef(p)             (p)->AddRef()
+#define IDirect3D9Ex_Release(p)            (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->GetAdapterCount()
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume9 interface
+ */
+#define INTERFACE IDirect3DVolume9
+DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVolume9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;
+    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume9_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolume9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolume9_Release(p)                   (p)->Release()
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DVolume9_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)
+#define IDirect3DVolume9_UnlockBox(p)                 (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9 interface
+ */
+#define INTERFACE IDirect3DSwapChain9
+DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain9 methods ***/
+    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->lpVtbl->GetPresentParameters(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSwapChain9_Release(p)                   (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->GetPresentParameters(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource9 interface
+ */
+#define INTERFACE IDirect3DResource9
+DECLARE_INTERFACE_(IDirect3DResource9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource9_GetType(p)                   (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DResource9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DResource9_Release(p)                   (p)->Release()
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DResource9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DResource9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DResource9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DResource9_GetType(p)                   (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface9 interface
+ */
+#define INTERFACE IDirect3DSurface9
+DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DSurface9 methods ***/
+    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DSurface9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DSurface9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DSurface9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface9_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
+#define IDirect3DSurface9_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSurface9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSurface9_Release(p)                   (p)->Release()
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DSurface9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DSurface9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DSurface9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DSurface9_GetType(p)                   (p)->GetType()
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DSurface9_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)
+#define IDirect3DSurface9_UnlockRect(p)                (p)->UnlockRect()
+#define IDirect3DSurface9_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer9 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer9
+DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DVertexBuffer9 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVertexBuffer9_Release(p)                   (p)->Release()
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVertexBuffer9_GetType(p)                   (p)->GetType()
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->Unlock()
+#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer9 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer9
+DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DIndexBuffer9 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DIndexBuffer9_Release(p)                   (p)->Release()
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DIndexBuffer9_GetType(p)                   (p)->GetType()
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->Unlock()
+#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture9 interface
+ */
+#define INTERFACE IDirect3DBaseTexture9
+DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture9_AddRef(p)              (p)->AddRef()
+#define IDirect3DBaseTexture9_Release(p)             (p)->Release()
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->SetPriority(a)
+#define IDirect3DBaseTexture9_GetPriority(p)             (p)->GetPriority()
+#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->PreLoad()
+#define IDirect3DBaseTexture9_GetType(p)                 (p)->GetType()
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->SetLOD(a)
+#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->GetLOD()
+#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->GetLevelCount()
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture9 interface
+ */
+#define INTERFACE IDirect3DCubeTexture9
+DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DCubeTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture9_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture9_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture9_GetPriority(p)              (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture9_GetType(p)                  (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture9_AddRef(p)                   (p)->AddRef()
+#define IDirect3DCubeTexture9_Release(p)                  (p)->Release()
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->GetDevice(a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->SetPriority(a)
+#define IDirect3DCubeTexture9_GetPriority(p)              (p)->GetPriority()
+#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->PreLoad()
+#define IDirect3DCubeTexture9_GetType(p)                  (p)->GetType()
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->SetLOD(a)
+#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->GetLOD()
+#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->GetLevelCount()
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->SetAutoGenFilterType(a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->GetAutoGenFilterType()
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->GenerateMipSubLevels()
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture9 interface
+ */
+#define INTERFACE IDirect3DTexture9
+DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;
+    STDMETHOD(LockRect)(THIS_ UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture9_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture9_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a)            (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
+#define IDirect3DTexture9_AddRef(p)                  (p)->AddRef()
+#define IDirect3DTexture9_Release(p)                 (p)->Release()
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)
+#define IDirect3DTexture9_SetPriority(p,a)           (p)->SetPriority(a)
+#define IDirect3DTexture9_GetPriority(p)             (p)->GetPriority()
+#define IDirect3DTexture9_PreLoad(p)                 (p)->PreLoad()
+#define IDirect3DTexture9_GetType(p)                 (p)->GetType()
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a)                (p)->SetLOD(a)
+#define IDirect3DTexture9_GetLOD(p)                  (p)->GetLOD()
+#define IDirect3DTexture9_GetLevelCount(p)           (p)->GetLevelCount()
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()
+#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a)            (p)->UnlockRect(a)
+#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture9 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture9
+DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DVolumeTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;
+    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;
+    STDMETHOD(LockBox)(THIS_ UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture9_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexDeclaration9 interface
+ */
+#define INTERFACE IDirect3DVertexDeclaration9
+DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexDeclaration9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexDeclaration9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->lpVtbl->GetDeclaration(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->AddRef()
+#define IDirect3DVertexDeclaration9_Release(p)             (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->GetDeclaration(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexShader9 interface
+ */
+#define INTERFACE IDirect3DVertexShader9
+DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexShader9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexShader9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DVertexShader9_AddRef(p)              (p)->AddRef()
+#define IDirect3DVertexShader9_Release(p)             (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DPixelShader9 interface
+ */
+#define INTERFACE IDirect3DPixelShader9
+DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DPixelShader9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DPixelShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DPixelShader9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DPixelShader9_AddRef(p)              (p)->AddRef()
+#define IDirect3DPixelShader9_Release(p)             (p)->Release()
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DStateBlock9 interface
+ */
+#define INTERFACE IDirect3DStateBlock9
+DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DStateBlock9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(Capture)(THIS) PURE;
+    STDMETHOD(Apply)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DStateBlock9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DStateBlock9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DStateBlock9_Capture(p)             (p)->lpVtbl->Capture(p)
+#define IDirect3DStateBlock9_Apply(p)               (p)->lpVtbl->Apply(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DStateBlock9_AddRef(p)              (p)->AddRef()
+#define IDirect3DStateBlock9_Release(p)             (p)->Release()
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DStateBlock9_Capture(p)             (p)->Capture()
+#define IDirect3DStateBlock9_Apply(p)               (p)->Apply()
+#endif
+
+/*****************************************************************************
+ * IDirect3DQuery9 interface
+ */
+#define INTERFACE IDirect3DQuery9
+DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DQuery9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;
+    STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;
+    STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;
+    STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)
+#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->AddRef()
+#define IDirect3DQuery9_Release(p) (p)->Release()
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DQuery9_GetType(p) (p)->GetType()
+#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()
+#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice9 interface
+ */
+#define INTERFACE IDirect3DDevice9
+DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice9 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(EvictManagedResources)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
+    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
+    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
+    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+    STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
+    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+    STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9_EndScene(p)                                   (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice9_Release(p)            (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()
+#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->EvictManagedResources()
+#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->GetDirect3D(a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->ShowCursor(a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9_Reset(p,a)                                    (p)->Reset(a)
+#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9_BeginScene(p)                                 (p)->BeginScene()
+#define IDirect3DDevice9_EndScene(p)                                   (p)->EndScene()
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->SetTransform(a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->GetTransform(a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9_SetViewport(p,a)                              (p)->SetViewport(a)
+#define IDirect3DDevice9_GetViewport(p,a)                              (p)->GetViewport(a)
+#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->SetMaterial(a)
+#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->GetMaterial(a)
+#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->SetLight(a,b)
+#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->GetLight(a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->LightEnable(a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->BeginStateBlock()
+#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->EndStateBlock(a)
+#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->SetClipStatus(a)
+#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->GetClipStatus(a)
+#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->GetTexture(a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->SetTexture(a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->ValidateDevice(a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->SetScissorRect(a)
+#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->GetScissorRect(a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)
+#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->GetNPatchMode()
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->SetFVF(a)
+#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->GetFVF(a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->SetVertexShader(a)
+#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->GetVertexShader(a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_SetIndices(p,a)                               (p)->SetIndices(a)
+#define IDirect3DDevice9_GetIndices(p,a)                               (p)->GetIndices(a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->SetPixelShader(a)
+#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->GetPixelShader(a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->DeletePatch(a)
+#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice9Ex interface
+ */
+#define INTERFACE IDirect3DDevice9Ex
+DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice9 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(EvictManagedResources)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
+    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
+    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
+    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+    STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
+    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+    STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+    /* IDirect3DDevice9Ex methods */
+    STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;
+    STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,
+            IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,
+            D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;
+    STDMETHOD(PresentEx)(THIS_ CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags) PURE;
+    STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE;
+    STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;
+    STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;
+    STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;
+    STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;
+    STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE;
+    STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;
+    STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+    STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+    STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,
+            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,
+            IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;
+    STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;
+    STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9Ex_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9Ex_EndScene(p)                                   (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->lpVtbl->PresentEx(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->lpVtbl->GetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->lpVtbl->SetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->lpVtbl->WaitForVBlank(p,a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->lpVtbl->CheckResourceResidency(p,a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->lpVtbl->SetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->lpVtbl->GetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->lpVtbl->CheckDeviceState(p,a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                 (p)->lpVtbl->ResetEx(p,a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9Ex_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice9Ex_Release(p)            (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->EvictManagedResources()
+#define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->GetDirect3D(a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->ShowCursor(a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->Reset(a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->BeginScene()
+#define IDirect3DDevice9Ex_EndScene(p)                                   (p)->EndScene()
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->SetTransform(a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->GetTransform(a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->SetViewport(a)
+#define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->GetViewport(a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->SetMaterial(a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->GetMaterial(a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->SetLight(a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->GetLight(a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->LightEnable(a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->BeginStateBlock()
+#define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->EndStateBlock(a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->SetClipStatus(a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->GetClipStatus(a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->GetTexture(a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->SetTexture(a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->ValidateDevice(a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->SetScissorRect(a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->GetScissorRect(a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->GetNPatchMode()
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->SetFVF(a)
+#define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->GetFVF(a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->SetVertexShader(a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->GetVertexShader(a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->SetIndices(a)
+#define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->GetIndices(a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->SetPixelShader(a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->GetPixelShader(a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->DeletePatch(a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->SetConvolutionMonoKernel(a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->ComposeRects(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->PresentEx(a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->GetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->SetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->WaitForVBlank(a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->CheckResourceResidency(a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->SetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->GetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->CheckDeviceState(a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                (p)->ResetEx(a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->GetDisplayModeEx(a,b,c)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* defined(__cplusplus) */
+
+int         WINAPI D3DPERF_BeginEvent(D3DCOLOR,LPCWSTR);
+int         WINAPI D3DPERF_EndEvent(void);
+DWORD       WINAPI D3DPERF_GetStatus(void);
+BOOL        WINAPI D3DPERF_QueryRepeatFrame(void);
+void        WINAPI D3DPERF_SetMarker(D3DCOLOR,LPCWSTR);
+void        WINAPI D3DPERF_SetOptions(DWORD);
+void        WINAPI D3DPERF_SetRegion(D3DCOLOR,LPCWSTR);
+
+/* Define the main entrypoint as well */
+IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+
+#endif /* __WINE_D3D9_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h
new file mode 100644
index 0000000..dd01932
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h
@@ -0,0 +1,381 @@
+/*
+ * Wine debugging interface
+ *
+ * Copyright 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_DEBUG_H
+#define __WINE_WINE_DEBUG_H
+
+#include <windows.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef VBOX_WINE_WITH_IPRT
+# include <iprt/assert.h>
+#else
+# define AssertBreakpoint() do { } while (0)
+# define Assert(_expr) do { } while (0)
+# ifdef DEBUG_misha
+#  include <iprt/cdefs.h>
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _GUID;
+
+//#ifdef DEBUG
+//# define VBOX_WINE_DEBUG
+//#endif
+
+#ifdef VBOX_WINE_DEBUG
+# ifndef VBOX_WINE_DEBUG_DEFINES
+extern DWORD g_VBoxVDbgBreakOnD3DErr;
+# else
+#  ifdef DEBUG_misha
+#   define _ERR_BREAK_DEFAULT 1
+#  else
+#   define _ERR_BREAK_DEFAULT 0
+#  endif
+DWORD g_VBoxVDbgBreakOnD3DErr = _ERR_BREAK_DEFAULT;
+# endif
+
+# define _ERR_BREAK() Assert(0)
+# define _ERR_ASSERT(_e) Assert((_e))
+# define _ERR_CHECK_BREAK(_t) do { \
+        if (g_VBoxVDbgBreakOn##_t) { _ERR_BREAK(); } \
+    } while (0)
+# define _ERR_CHECK_ASSERT(_t, _e) do { \
+        if (g_VBoxVDbgBreakOn##_t) { _ERR_ASSERT(_e); } \
+    } while (0)
+
+# define ERR_D3D() _ERR_CHECK_BREAK(D3DErr)
+# define ASSERT_D3D(_e) _ERR_CHECK_ASSERT(D3DErr, _e)
+#else
+# define ERR_D3D() ERR("Error!");
+# define ASSERT_D3D(_e) do { \
+        if (!(_e)) \
+        { \
+            ERR("Error: Assertion failure expr (%s)", #_e); \
+        } \
+    } while (0)
+#endif /* #ifdef VBOX_WINE_DEBUG */
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+/*
+ * Internal definitions (do not use these directly)
+ */
+
+enum __wine_debug_class
+{
+    __WINE_DBCL_FIXME,
+    __WINE_DBCL_ERR,
+    __WINE_DBCL_WARN,
+    __WINE_DBCL_TRACE,
+
+    __WINE_DBCL_INIT = 7  /* lazy init flag */
+};
+
+struct __wine_debug_channel
+{
+    unsigned char flags;
+    char name[15];
+};
+
+#ifndef WINE_NO_TRACE_MSGS
+# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE))
+#else
+# define __WINE_GET_DEBUGGING_TRACE(dbch) 0
+#endif
+
+#ifndef WINE_NO_DEBUG_MSGS
+# define __WINE_GET_DEBUGGING_WARN(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_WARN))
+# if 0// && defined(DEBUG_misha)
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) (RT_BREAKPOINT(), ((dbch)->flags & (1 << __WINE_DBCL_FIXME)))
+# else
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME))
+# endif
+#else
+# define __WINE_GET_DEBUGGING_WARN(dbch)  0
+# if 0 && defined(DEBUG_misha)
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) (RT_BREAKPOINT(), 0)
+# else
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) 0
+# endif
+#endif
+
+/* define error macro regardless of what is configured */
+#if defined(DEBUG_misha)
+#define __WINE_GET_DEBUGGING_ERR(dbch)  (RT_BREAKPOINT(), ((dbch)->flags & (1 << __WINE_DBCL_ERR)))
+#else
+#define __WINE_GET_DEBUGGING_ERR(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_ERR))
+#endif
+
+#define __WINE_GET_DEBUGGING(dbcl,dbch)  __WINE_GET_DEBUGGING##dbcl(dbch)
+
+#define __WINE_IS_DEBUG_ON(dbcl,dbch) \
+  (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl)))
+
+#ifdef __GNUC__
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+       struct __wine_debug_channel * const __dbch = (dbch); \
+       const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
+       __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(args...) \
+    wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(args...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(args...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(args...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#elif defined(__SUNPRO_C)
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+       struct __wine_debug_channel * const __dbch = (dbch); \
+       const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
+       __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(...) \
+   wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args)
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#else  /* !__GNUC__ && !__SUNPRO_C */
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+    (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \
+     (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
+     (void)0 : (void)wine_dbg_printf
+
+#define __WINE_PRINTF_ATTR(fmt, args)
+
+#endif  /* !__GNUC__ && !__SUNPRO_C */
+
+struct __wine_debug_functions
+{
+    char * (*get_temp_buffer)( size_t n );
+    void   (*release_temp_buffer)( char *buffer, size_t n );
+    const char * (*dbgstr_an)( const char * s, int n );
+    const char * (*dbgstr_wn)( const WCHAR *s, int n );
+    int (*dbg_vprintf)( const char *format, va_list args );
+    int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                     const char *function, const char *format, va_list args );
+};
+
+extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel );
+extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+                                         unsigned char set, unsigned char clear );
+extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+                                      struct __wine_debug_functions *old_funcs, size_t size );
+
+/*
+ * Exported definitions and macros
+ */
+
+/* These functions return a printable version of a string, including
+   quotes.  The string will be valid for some time, but not indefinitely
+   as strings are re-used.  */
+extern const char *wine_dbgstr_an( const char * s, int n );
+extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
+extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+
+extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func,
+                         const char *format, ... ) __WINE_PRINTF_ATTR(4,5);
+
+static inline const char *wine_dbgstr_a( const char *s )
+{
+    return wine_dbgstr_an( s, -1 );
+}
+
+static inline const char *wine_dbgstr_w( const WCHAR *s )
+{
+    return wine_dbgstr_wn( s, -1 );
+}
+
+static inline const char *wine_dbgstr_guid( const GUID *id )
+{
+    if (!id) return "(null)";
+    if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( "<guid-0x%04hx>", (WORD)(ULONG_PTR)id );
+    return wine_dbg_sprintf( "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+                             id->Data1, id->Data2, id->Data3,
+                             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
+                             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
+}
+
+static inline const char *wine_dbgstr_point( const POINT *pt )
+{
+    if (!pt) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)", pt->x, pt->y );
+}
+
+static inline const char *wine_dbgstr_size( const SIZE *size )
+{
+    if (!size) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)", size->cx, size->cy );
+}
+
+static inline const char *wine_dbgstr_rect( const RECT *rect )
+{
+    if (!rect) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)-(%d,%d)", rect->left, rect->top,
+                             rect->right, rect->bottom );
+}
+
+static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
+{
+    if (sizeof(ll) > sizeof(unsigned long) && ll >> 32)
+        return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
+    else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
+}
+
+#ifndef WINE_TRACE
+#define WINE_TRACE                 __WINE_DPRINTF(_TRACE,__wine_dbch___default)
+#define WINE_TRACE_(ch)            __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)
+#endif
+#define WINE_TRACE_ON(ch)          __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)
+
+#ifndef WINE_WARN
+#define WINE_WARN                  __WINE_DPRINTF(_WARN,__wine_dbch___default)
+#define WINE_WARN_(ch)             __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)
+#endif
+#define WINE_WARN_ON(ch)           __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)
+
+#ifndef WINE_FIXME
+#define WINE_FIXME                 __WINE_DPRINTF(_FIXME,__wine_dbch___default)
+#define WINE_FIXME_(ch)            __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)
+#endif
+#define WINE_FIXME_ON(ch)          __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)
+
+#define WINE_ERR                   __WINE_DPRINTF(_ERR,__wine_dbch___default)
+#define WINE_ERR_(ch)              __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)
+#define WINE_ERR_ON(ch)            __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)
+
+#define WINE_DECLARE_DEBUG_CHANNEL(ch) \
+    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }
+#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \
+    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \
+    static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch
+
+#define WINE_DPRINTF               wine_dbg_printf
+#define WINE_MESSAGE               wine_dbg_printf
+
+#ifdef __WINESRC__
+/* Wine uses shorter names that are very likely to conflict with other software */
+
+static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
+static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
+static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); }
+static inline const char *debugstr_a( const char *s )  { return wine_dbgstr_an( s, -1 ); }
+static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+#define TRACE                      WINE_TRACE
+#define TRACE_(ch)                 WINE_TRACE_(ch)
+#define TRACE_ON(ch)               WINE_TRACE_ON(ch)
+
+#define WARN                       WINE_WARN
+#define WARN_(ch)                  WINE_WARN_(ch)
+#define WARN_ON(ch)                WINE_WARN_ON(ch)
+
+#define FIXME                      WINE_FIXME
+#define FIXME_(ch)                 WINE_FIXME_(ch)
+#define FIXME_ON(ch)               WINE_FIXME_ON(ch)
+
+#undef ERR  /* Solaris got an 'ERR' define in <sys/reg.h> */
+#define ERR                        WINE_ERR
+#define ERR_(ch)                   WINE_ERR_(ch)
+#define ERR_ON(ch)                 WINE_ERR_ON(ch)
+
+#define DPRINTF                    WINE_DPRINTF
+#define MESSAGE                    WINE_MESSAGE
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#if 0//def DEBUG_misha
+# define VBOXWINEDBG_SHADERS
+#endif
+
+#if defined(VBOXWINEDBG_SHADERS) || defined(VBOX_WINE_WITH_PROFILE)
+#include <stdio.h>
+#include <stdarg.h>
+
+void vboxWDbgPrintF(char * szString, ...);
+#endif
+
+#ifdef VBOXWINEDBG_SHADERS
+# define WDLOG(_m) do {\
+        vboxWDbgPrintF _m ; \
+    } while (0)
+#else
+
+# define WDLOG(_m) do { } while (0)
+#endif
+
+#endif  /* __WINE_WINE_DEBUG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h
new file mode 100644
index 0000000..466c406
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID
+{
+#ifdef _MSC_VER
+    unsigned long  Data1;
+#else
+    unsigned int   Data1;
+#endif
+    unsigned short Data2;
+    unsigned short Data3;
+    unsigned char  Data4[ 8 ];
+} GUID;
+#endif
+
+#undef DEFINE_GUID
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        EXTERN_C const GUID name DECLSPEC_HIDDEN; \
+        EXTERN_C const GUID name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        const GUID name DECLSPEC_HIDDEN; \
+        const GUID name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#endif
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+    EXTERN_C const GUID name DECLSPEC_HIDDEN
+#endif
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+	DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+#ifndef _GUIDDEF_H_
+#define _GUIDDEF_H_
+
+#ifndef __LPGUID_DEFINED__
+#define __LPGUID_DEFINED___
+typedef GUID *LPGUID;
+#endif
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef GUID IID,*LPIID;
+typedef GUID CLSID,*LPCLSID;
+typedef GUID FMTID,*LPFMTID;
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
+#define IID_NULL   GUID_NULL
+#define CLSID_NULL GUID_NULL
+#define FMTID_NULL GUID_NULL
+
+#ifdef __midl_proxy
+#define __MIDL_CONST
+#else
+#define __MIDL_CONST const
+#endif
+
+#endif /* ndef __IID_DEFINED__ */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define REFGUID             const GUID &
+#define REFCLSID            const CLSID &
+#define REFIID              const IID &
+#define REFFMTID            const FMTID &
+#else /* !defined(__cplusplus) && !defined(CINTERFACE) */
+#define REFGUID             const GUID* __MIDL_CONST
+#define REFCLSID            const CLSID* __MIDL_CONST
+#define REFIID              const IID* __MIDL_CONST
+#define REFFMTID            const FMTID* __MIDL_CONST
+#endif /* !defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
+#else /* defined(__cplusplus) && !defined(CINTERFACE) */
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#endif /* defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#include <string.h>
+inline bool operator==(const GUID& guidOne, const GUID& guidOther)
+{
+    return !memcmp(&guidOne,&guidOther,sizeof(GUID));
+}
+inline bool operator!=(const GUID& guidOne, const GUID& guidOther)
+{
+    return !(guidOne == guidOther);
+}
+#endif
+
+extern const IID GUID_NULL;
+
+#endif /* _GUIDDEF_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h
new file mode 100644
index 0000000..33c7e1a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h
@@ -0,0 +1,35 @@
+/*
+ * Defines a minimum set of macros create GUID's to keep the size
+ * small
+ *
+ * This file should be included into "only GUID definition *.h" like
+ * shlguid.h
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define INITGUID
+#include <guiddef.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h
new file mode 100644
index 0000000..cdc61fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h
@@ -0,0 +1,246 @@
+/*
+ * Linked lists support
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SERVER_LIST_H
+#define __WINE_SERVER_LIST_H
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+struct list
+{
+    struct list *next;
+    struct list *prev;
+};
+
+/* Define a list like so:
+ *
+ *   struct gadget
+ *   {
+ *       struct list  entry;   <-- doesn't have to be the first item in the struct
+ *       int          a, b;
+ *   };
+ *
+ *   static struct list global_gadgets = LIST_INIT( global_gadgets );
+ *
+ * or
+ *
+ *   struct some_global_thing
+ *   {
+ *       struct list gadgets;
+ *   };
+ *
+ *   list_init( &some_global_thing->gadgets );
+ *
+ * Manipulate it like this:
+ *
+ *   list_add_head( &global_gadgets, &new_gadget->entry );
+ *   list_remove( &new_gadget->entry );
+ *   list_add_after( &some_random_gadget->entry, &new_gadget->entry );
+ *
+ * And to iterate over it:
+ *
+ *   struct gadget *gadget;
+ *   LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
+ *   {
+ *       ...
+ *   }
+ *
+ */
+
+/* add an element after the specified one */
+static inline void list_add_after( struct list *elem, struct list *to_add )
+{
+    to_add->next = elem->next;
+    to_add->prev = elem;
+    elem->next->prev = to_add;
+    elem->next = to_add;
+}
+
+/* add an element before the specified one */
+static inline void list_add_before( struct list *elem, struct list *to_add )
+{
+    to_add->next = elem;
+    to_add->prev = elem->prev;
+    elem->prev->next = to_add;
+    elem->prev = to_add;
+}
+
+/* add element at the head of the list */
+static inline void list_add_head( struct list *list, struct list *elem )
+{
+    list_add_after( list, elem );
+}
+
+/* add element at the tail of the list */
+static inline void list_add_tail( struct list *list, struct list *elem )
+{
+    list_add_before( list, elem );
+}
+
+/* remove an element from its list */
+static inline void list_remove( struct list *elem )
+{
+    elem->next->prev = elem->prev;
+    elem->prev->next = elem->next;
+}
+
+/* get the next element */
+static inline struct list *list_next( const struct list *list, const struct list *elem )
+{
+    struct list *ret = elem->next;
+    if (elem->next == list) ret = NULL;
+    return ret;
+}
+
+/* get the previous element */
+static inline struct list *list_prev( const struct list *list, const struct list *elem )
+{
+    struct list *ret = elem->prev;
+    if (elem->prev == list) ret = NULL;
+    return ret;
+}
+
+/* get the first element */
+static inline struct list *list_head( const struct list *list )
+{
+    return list_next( list, list );
+}
+
+/* get the last element */
+static inline struct list *list_tail( const struct list *list )
+{
+    return list_prev( list, list );
+}
+
+/* check if a list is empty */
+static inline int list_empty( const struct list *list )
+{
+    return list->next == list;
+}
+
+/* initialize a list */
+static inline void list_init( struct list *list )
+{
+    list->next = list->prev = list;
+}
+
+/* count the elements of a list */
+static inline unsigned int list_count( const struct list *list )
+{
+    unsigned count = 0;
+    const struct list *ptr;
+    for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
+    return count;
+}
+
+/* move all elements from src to the tail of dst */
+static inline void list_move_tail( struct list *dst, struct list *src )
+{
+    if (list_empty(src)) return;
+
+    dst->prev->next = src->next;
+    src->next->prev = dst->prev;
+    dst->prev = src->prev;
+    src->prev->next = dst;
+    list_init(src);
+}
+
+/* move all elements from src to the head of dst */
+static inline void list_move_head( struct list *dst, struct list *src )
+{
+    if (list_empty(src)) return;
+
+    dst->next->prev = src->prev;
+    src->prev->next = dst->next;
+    dst->next = src->next;
+    src->next->prev = dst;
+    list_init(src);
+}
+
+/* iterate through the list */
+#define LIST_FOR_EACH(cursor,list) \
+    for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
+
+/* iterate through the list, with safety against removal */
+#define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \
+    for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
+         (cursor) != (list); \
+         (cursor) = (cursor2), (cursor2) = (cursor)->next)
+
+/* iterate through the list using a list entry */
+#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \
+    for ((elem) = LIST_ENTRY((list)->next, type, field); \
+         &(elem)->field != (list); \
+         (elem) = LIST_ENTRY((elem)->field.next, type, field))
+
+/* iterate through the list using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
+    for ((cursor) = LIST_ENTRY((list)->next, type, field), \
+         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \
+         &(cursor)->field != (list); \
+         (cursor) = (cursor2), \
+         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field))
+
+/* iterate through the list in reverse order */
+#define LIST_FOR_EACH_REV(cursor,list) \
+    for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
+
+/* iterate through the list in reverse order, with safety against removal */
+#define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
+    for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
+         (cursor) != (list); \
+         (cursor) = (cursor2), (cursor2) = (cursor)->prev)
+
+/* iterate through the list in reverse order using a list entry */
+#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
+    for ((elem) = LIST_ENTRY((list)->prev, type, field); \
+         &(elem)->field != (list); \
+         (elem) = LIST_ENTRY((elem)->field.prev, type, field))
+
+/* iterate through the list in reverse order using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
+    for ((cursor) = LIST_ENTRY((list)->prev, type, field), \
+         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \
+         &(cursor)->field != (list); \
+         (cursor) = (cursor2), \
+         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field))
+
+/* macros for statically initialized lists */
+#undef LIST_INIT
+#define LIST_INIT(list)  { &(list), &(list) }
+
+/* get pointer to object containing list element */
+#undef LIST_ENTRY
+#define LIST_ENTRY(elem, type, field) \
+    ((type *)((char *)(elem) - (unsigned long)(&((type *)0)->field)))
+
+#endif  /* __WINE_SERVER_LIST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h
new file mode 100644
index 0000000..3c514f1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h
@@ -0,0 +1,489 @@
+/*
+ * Wine porting definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_PORT_H
+#define __WINE_WINE_PORT_H
+
+#ifndef __WINE_CONFIG_H
+# error You must include config.h to use this header
+#endif
+
+#ifdef __WINE_BASETSD_H
+# error You must include port.h before all other headers
+#endif
+
+#define _GNU_SOURCE  /* for pread/pwrite */
+#include <fcntl.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+#ifdef HAVE_PROCESS_H
+# include <process.h>
+#endif
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+/* Can't use windef.h here, cause it'd cause problems with NONAMELESSUNION/STRUCT later */
+#ifndef inline
+#define inline
+#endif
+
+/****************************************************************
+ * Type definitions
+ */
+
+#if !defined(_MSC_VER) && !defined(__int64)
+#  if defined(__x86_64__) || defined(_WIN64)
+#    define __int64 long
+#  else
+#    define __int64 long long
+#  endif
+#endif
+
+#ifndef HAVE_MODE_T
+typedef int mode_t;
+#endif
+#ifndef HAVE_OFF_T
+typedef long off_t;
+#endif
+#ifndef HAVE_PID_T
+typedef int pid_t;
+#endif
+#ifndef HAVE_SIZE_T
+typedef unsigned int size_t;
+#endif
+#ifndef HAVE_SSIZE_T
+typedef int ssize_t;
+#endif
+#ifndef HAVE_FSBLKCNT_T
+typedef unsigned long fsblkcnt_t;
+#endif
+#ifndef HAVE_FSFILCNT_T
+typedef unsigned long fsfilcnt_t;
+#endif
+
+#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS
+struct statvfs
+{
+    unsigned long f_bsize;
+    unsigned long f_frsize;
+    fsblkcnt_t    f_blocks;
+    fsblkcnt_t    f_bfree;
+    fsblkcnt_t    f_bavail;
+    fsfilcnt_t    f_files;
+    fsfilcnt_t    f_ffree;
+    fsfilcnt_t    f_favail;
+    unsigned long f_fsid;
+    unsigned long f_flag;
+    unsigned long f_namemax;
+};
+#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */
+
+
+/****************************************************************
+ * Macro definitions
+ */
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+#define RTLD_LAZY    0x001
+#define RTLD_NOW     0x002
+#define RTLD_GLOBAL  0x100
+#endif
+
+#ifdef HAVE_ONE_ARG_MKDIR
+#define mkdir(path,mode) mkdir(path)
+#endif
+
+#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)
+#define ftruncate chsize
+#endif
+
+#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)
+#define popen _popen
+#endif
+
+#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)
+#define pclose _pclose
+#endif
+
+#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)
+#define strdup _strdup
+#endif
+
+#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)
+#define snprintf _snprintf
+#endif
+
+#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)
+#define vsnprintf _vsnprintf
+#endif
+
+#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)
+#define strtoll _strtoi64
+#endif
+
+#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)
+#define strtoull _strtoui64
+#endif
+
+#ifndef S_ISLNK
+# define S_ISLNK(mod) (0)
+#endif
+
+#ifndef S_ISSOCK
+# define S_ISSOCK(mod) (0)
+#endif
+
+#ifndef S_ISDIR
+# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)
+#endif
+
+#ifndef S_ISCHR
+# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)
+#endif
+
+#ifndef S_ISFIFO
+# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)
+#endif
+
+#ifndef S_ISREG
+# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)
+#endif
+
+/* So we open files in 64 bit access mode on Linux */
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK 0
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/****************************************************************
+ * Constants
+ */
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#ifndef M_PI_2
+#define M_PI_2 1.570796326794896619
+#endif
+
+
+/****************************************************************
+ * Function definitions (only when using libwine_port)
+ */
+
+#ifndef NO_LIBWINE_PORT
+
+#ifndef HAVE_FSTATVFS
+int fstatvfs( int fd, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_GETOPT_LONG
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+struct option;
+
+#ifndef HAVE_STRUCT_OPTION_NAME
+struct option
+{
+    const char *name;
+    int has_arg;
+    int *flag;
+    int val;
+};
+#endif
+
+extern int getopt_long (int ___argc, char *const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind);
+extern int getopt_long_only (int ___argc, char *const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind);
+#endif  /* HAVE_GETOPT_LONG */
+
+#ifndef HAVE_FFS
+int ffs( int x );
+#endif
+
+#ifndef HAVE_FUTIMES
+struct timeval;
+int futimes(int fd, const struct timeval *tv);
+#endif
+
+#ifndef HAVE_GETPAGESIZE
+size_t getpagesize(void);
+#endif  /* HAVE_GETPAGESIZE */
+
+#ifndef HAVE_GETTID
+pid_t gettid(void);
+#endif /* HAVE_GETTID */
+
+#ifndef HAVE_ISINF
+int isinf(double x);
+#endif
+
+#ifndef HAVE_ISNAN
+int isnan(double x);
+#endif
+
+#ifndef HAVE_LSTAT
+int lstat(const char *file_name, struct stat *buf);
+#endif /* HAVE_LSTAT */
+
+#ifndef HAVE_MEMMOVE
+void *memmove(void *dest, const void *src, size_t len);
+#endif /* !defined(HAVE_MEMMOVE) */
+
+#ifndef HAVE_POLL
+struct pollfd
+{
+    int fd;
+    short events;
+    short revents;
+};
+#define POLLIN   0x01
+#define POLLPRI  0x02
+#define POLLOUT  0x04
+#define POLLERR  0x08
+#define POLLHUP  0x10
+#define POLLNVAL 0x20
+int poll( struct pollfd *fds, unsigned int count, int timeout );
+#endif /* HAVE_POLL */
+
+#ifndef HAVE_PREAD
+ssize_t pread( int fd, void *buf, size_t count, off_t offset );
+#endif /* HAVE_PREAD */
+
+#ifndef HAVE_PWRITE
+ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );
+#endif /* HAVE_PWRITE */
+
+#ifndef HAVE_READLINK
+int readlink( const char *path, char *buf, size_t size );
+#endif /* HAVE_READLINK */
+
+#ifndef HAVE_STATVFS
+int statvfs( const char *path, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_STRNCASECMP
+# ifndef HAVE__STRNICMP
+int strncasecmp(const char *str1, const char *str2, size_t n);
+# else
+# define strncasecmp _strnicmp
+# endif
+#endif /* !defined(HAVE_STRNCASECMP) */
+
+#ifndef HAVE_STRERROR
+const char *strerror(int err);
+#endif /* !defined(HAVE_STRERROR) */
+
+#ifndef HAVE_STRCASECMP
+# ifndef HAVE__STRICMP
+int strcasecmp(const char *str1, const char *str2);
+# else
+# define strcasecmp _stricmp
+# endif
+#endif /* !defined(HAVE_STRCASECMP) */
+
+#ifndef HAVE_SYMLINK
+int symlink(const char *from, const char *to);
+#endif
+
+#ifndef HAVE_USLEEP
+int usleep (unsigned int useconds);
+#endif /* !defined(HAVE_USLEEP) */
+
+#ifdef __i386__
+static inline void *memcpy_unaligned( void *dst, const void *src, size_t size )
+{
+    return memcpy( dst, src, size );
+}
+#else
+extern void *memcpy_unaligned( void *dst, const void *src, size_t size );
+#endif /* __i386__ */
+
+extern int mkstemps(char *template, int suffix_len);
+
+/* Process creation flags */
+#ifndef _P_WAIT
+# define _P_WAIT    0
+# define _P_NOWAIT  1
+# define _P_OVERLAY 2
+# define _P_NOWAITO 3
+# define _P_DETACH  4
+#endif
+#ifndef HAVE_SPAWNVP
+extern int spawnvp(int mode, const char *cmdname, const char * const argv[]);
+#endif
+
+/* Interlocked functions */
+
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern inline int interlocked_xchg( int *dest, int val );
+extern inline void *interlocked_xchg_ptr( void **dest, void *val );
+extern inline int interlocked_xchg_add( int *dest, int incr );
+
+extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare )
+{
+    int ret;
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+    return ret;
+}
+
+extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )
+{
+    void *ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; cmpxchgq %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#else
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#endif
+    return ret;
+}
+
+extern inline int interlocked_xchg( int *dest, int val )
+{
+    int ret;
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+    return ret;
+}
+
+extern inline void *interlocked_xchg_ptr( void **dest, void *val )
+{
+    void *ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; xchgq %0,(%1)"
+                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+#endif
+    return ret;
+}
+
+extern inline int interlocked_xchg_add( int *dest, int incr )
+{
+    int ret;
+    __asm__ __volatile__( "lock; xaddl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+    return ret;
+}
+
+#ifdef __x86_64__
+extern inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                                    __int64 xchg_low, __int64 *compare );
+extern inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                                    __int64 xchg_low, __int64 *compare )
+{
+    unsigned char ret;
+    __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
+                          : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
+                            "=a" (compare[0]), "=d" (compare[1])
+                          : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
+                            "c" (xchg_high), "b" (xchg_low) );
+    return ret;
+}
+#endif
+
+#else  /* __GNUC__ */
+
+extern int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern int interlocked_xchg( int *dest, int val );
+extern void *interlocked_xchg_ptr( void **dest, void *val );
+extern int interlocked_xchg_add( int *dest, int incr );
+#ifdef _WIN64
+extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                             __int64 xchg_low, __int64 *compare );
+#endif
+
+#endif  /* __GNUC__ */
+
+#else /* NO_LIBWINE_PORT */
+
+#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable
+
+#define ffs                     __WINE_NOT_PORTABLE(ffs)
+#define fstatvfs                __WINE_NOT_PORTABLE(fstatvfs)
+#define futimes                 __WINE_NOT_PORTABLE(futimes)
+#define getopt_long             __WINE_NOT_PORTABLE(getopt_long)
+#define getopt_long_only        __WINE_NOT_PORTABLE(getopt_long_only)
+#define getpagesize             __WINE_NOT_PORTABLE(getpagesize)
+#define interlocked_cmpxchg     __WINE_NOT_PORTABLE(interlocked_cmpxchg)
+#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)
+#define interlocked_xchg        __WINE_NOT_PORTABLE(interlocked_xchg)
+#define interlocked_xchg_ptr    __WINE_NOT_PORTABLE(interlocked_xchg_ptr)
+#define interlocked_xchg_add    __WINE_NOT_PORTABLE(interlocked_xchg_add)
+#define lstat                   __WINE_NOT_PORTABLE(lstat)
+#define memcpy_unaligned        __WINE_NOT_PORTABLE(memcpy_unaligned)
+#undef memmove
+#define memmove                 __WINE_NOT_PORTABLE(memmove)
+#define pread                   __WINE_NOT_PORTABLE(pread)
+#define pwrite                  __WINE_NOT_PORTABLE(pwrite)
+#define spawnvp                 __WINE_NOT_PORTABLE(spawnvp)
+#define statvfs                 __WINE_NOT_PORTABLE(statvfs)
+#define strcasecmp              __WINE_NOT_PORTABLE(strcasecmp)
+#define strerror                __WINE_NOT_PORTABLE(strerror)
+#define strncasecmp             __WINE_NOT_PORTABLE(strncasecmp)
+#define usleep                  __WINE_NOT_PORTABLE(usleep)
+
+#endif /* NO_LIBWINE_PORT */
+
+#endif /* !defined(__WINE_WINE_PORT_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h
new file mode 100644
index 0000000..cda5fd4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h
@@ -0,0 +1,357 @@
+/*
+ * Red-black search tree support
+ *
+ * Copyright 2009 Henri Verbeet
+ * Copyright 2009 Andrew Riedi
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_RBTREE_H
+#define __WINE_WINE_RBTREE_H
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+
+#define WINE_RB_ENTRY_VALUE(element, type, field) \
+    ((type *)((char *)(element) - FIELD_OFFSET(type, field)))
+
+struct wine_rb_entry
+{
+    struct wine_rb_entry *left;
+    struct wine_rb_entry *right;
+    unsigned int flags;
+};
+
+struct wine_rb_stack
+{
+    struct wine_rb_entry ***entries;
+    size_t count;
+    size_t size;
+};
+
+struct wine_rb_functions
+{
+    void *(*alloc)(size_t size);
+    void *(*realloc)(void *ptr, size_t size);
+    void (*free)(void *ptr);
+    int (*compare)(const void *key, const struct wine_rb_entry *entry);
+};
+
+struct wine_rb_tree
+{
+    const struct wine_rb_functions *functions;
+    struct wine_rb_entry *root;
+    struct wine_rb_stack stack;
+};
+
+typedef void (wine_rb_traverse_func_t)(struct wine_rb_entry *entry, void *context);
+
+#define WINE_RB_FLAG_RED                0x1
+#define WINE_RB_FLAG_STOP               0x2
+#define WINE_RB_FLAG_TRAVERSED_LEFT     0x4
+#define WINE_RB_FLAG_TRAVERSED_RIGHT    0x8
+
+static inline void wine_rb_stack_clear(struct wine_rb_stack *stack)
+{
+    stack->count = 0;
+}
+
+static inline void wine_rb_stack_push(struct wine_rb_stack *stack, struct wine_rb_entry **entry)
+{
+    stack->entries[stack->count++] = entry;
+}
+
+static inline int wine_rb_ensure_stack_size(struct wine_rb_tree *tree, size_t size)
+{
+    struct wine_rb_stack *stack = &tree->stack;
+
+    if (size > stack->size)
+    {
+        size_t new_size = stack->size << 1;
+        struct wine_rb_entry ***new_entries = tree->functions->realloc(stack->entries,
+                new_size * sizeof(*stack->entries));
+
+        if (!new_entries) return -1;
+
+        stack->entries = new_entries;
+        stack->size = new_size;
+    }
+
+    return 0;
+}
+
+static inline int wine_rb_is_red(struct wine_rb_entry *entry)
+{
+    return entry && (entry->flags & WINE_RB_FLAG_RED);
+}
+
+static inline void wine_rb_rotate_left(struct wine_rb_entry **entry)
+{
+    struct wine_rb_entry *e = *entry;
+    struct wine_rb_entry *right = e->right;
+
+    e->right = right->left;
+    right->left = e;
+    right->flags &= ~WINE_RB_FLAG_RED;
+    right->flags |= e->flags & WINE_RB_FLAG_RED;
+    e->flags |= WINE_RB_FLAG_RED;
+    *entry = right;
+}
+
+static inline void wine_rb_rotate_right(struct wine_rb_entry **entry)
+{
+    struct wine_rb_entry *e = *entry;
+    struct wine_rb_entry *left = e->left;
+
+    e->left = left->right;
+    left->right = e;
+    left->flags &= ~WINE_RB_FLAG_RED;
+    left->flags |= e->flags & WINE_RB_FLAG_RED;
+    e->flags |= WINE_RB_FLAG_RED;
+    *entry = left;
+}
+
+static inline void wine_rb_flip_color(struct wine_rb_entry *entry)
+{
+    entry->flags ^= WINE_RB_FLAG_RED;
+    entry->left->flags ^= WINE_RB_FLAG_RED;
+    entry->right->flags ^= WINE_RB_FLAG_RED;
+}
+
+static inline void wine_rb_fixup(struct wine_rb_stack *stack)
+{
+    while (stack->count)
+    {
+        struct wine_rb_entry **entry = stack->entries[stack->count - 1];
+
+        if ((*entry)->flags & WINE_RB_FLAG_STOP)
+        {
+            (*entry)->flags &= ~WINE_RB_FLAG_STOP;
+            return;
+        }
+
+        if (wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->left)) wine_rb_rotate_left(entry);
+        if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->left->left)) wine_rb_rotate_right(entry);
+        if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->right)) wine_rb_flip_color(*entry);
+        --stack->count;
+    }
+}
+
+static inline void wine_rb_move_red_left(struct wine_rb_entry **entry)
+{
+    wine_rb_flip_color(*entry);
+    if (wine_rb_is_red((*entry)->right->left))
+    {
+        wine_rb_rotate_right(&(*entry)->right);
+        wine_rb_rotate_left(entry);
+        wine_rb_flip_color(*entry);
+    }
+}
+
+static inline void wine_rb_move_red_right(struct wine_rb_entry **entry)
+{
+    wine_rb_flip_color(*entry);
+    if (wine_rb_is_red((*entry)->left->left))
+    {
+        wine_rb_rotate_right(entry);
+        wine_rb_flip_color(*entry);
+    }
+}
+
+static inline void wine_rb_postorder(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    struct wine_rb_entry **entry;
+
+    if (!tree->root) return;
+
+    for (entry = &tree->root;;)
+    {
+        struct wine_rb_entry *e = *entry;
+
+        if (e->left && !(e->flags & WINE_RB_FLAG_TRAVERSED_LEFT))
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            e->flags |= WINE_RB_FLAG_TRAVERSED_LEFT;
+            entry = &e->left;
+            continue;
+        }
+
+        if (e->right && !(e->flags & WINE_RB_FLAG_TRAVERSED_RIGHT))
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            e->flags |= WINE_RB_FLAG_TRAVERSED_RIGHT;
+            entry = &e->right;
+            continue;
+        }
+
+        e->flags &= ~(WINE_RB_FLAG_TRAVERSED_LEFT | WINE_RB_FLAG_TRAVERSED_RIGHT);
+        callback(e, context);
+
+        if (!tree->stack.count) break;
+        entry = tree->stack.entries[--tree->stack.count];
+    }
+}
+
+static inline int wine_rb_init(struct wine_rb_tree *tree, const struct wine_rb_functions *functions)
+{
+    tree->functions = functions;
+    tree->root = NULL;
+
+    tree->stack.entries = functions->alloc(16 * sizeof(*tree->stack.entries));
+    if (!tree->stack.entries) return -1;
+    tree->stack.size = 16;
+    tree->stack.count = 0;
+
+    return 0;
+}
+
+static inline void wine_rb_for_each_entry(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    wine_rb_postorder(tree, callback, context);
+}
+
+static inline void wine_rb_destroy(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    /* Note that we use postorder here because the callback will likely free the entry. */
+    if (callback) wine_rb_postorder(tree, callback, context);
+
+    tree->root = NULL;
+    tree->functions->free(tree->stack.entries);
+}
+
+static inline struct wine_rb_entry *wine_rb_get(const struct wine_rb_tree *tree, const void *key)
+{
+    struct wine_rb_entry *entry = tree->root;
+    while (entry)
+    {
+        int c = tree->functions->compare(key, entry);
+        if (!c) return entry;
+        entry = c < 0 ? entry->left : entry->right;
+    }
+    return NULL;
+}
+
+static inline int wine_rb_put(struct wine_rb_tree *tree, const void *key, struct wine_rb_entry *entry)
+{
+    struct wine_rb_entry **parent = &tree->root;
+    size_t black_height = 1;
+
+    while (*parent)
+    {
+        int c;
+
+        if (!wine_rb_is_red(*parent)) ++black_height;
+
+        wine_rb_stack_push(&tree->stack, parent);
+
+        c = tree->functions->compare(key, *parent);
+        if (!c)
+        {
+            wine_rb_stack_clear(&tree->stack);
+            return -1;
+        }
+        else if (c < 0) parent = &(*parent)->left;
+        else parent = &(*parent)->right;
+    }
+
+    /* After insertion, the path length to any node should be <= (black_height + 1) * 2. */
+    if (wine_rb_ensure_stack_size(tree, black_height << 1) == -1)
+    {
+        wine_rb_stack_clear(&tree->stack);
+        return -1;
+    }
+
+    entry->flags = WINE_RB_FLAG_RED;
+    entry->left = NULL;
+    entry->right = NULL;
+    *parent = entry;
+
+    wine_rb_fixup(&tree->stack);
+    tree->root->flags &= ~WINE_RB_FLAG_RED;
+
+    return 0;
+}
+
+static inline void wine_rb_remove(struct wine_rb_tree *tree, const void *key)
+{
+    struct wine_rb_entry **entry = &tree->root;
+
+    while (*entry)
+    {
+        if (tree->functions->compare(key, *entry) < 0)
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            if (!wine_rb_is_red((*entry)->left) && !wine_rb_is_red((*entry)->left->left)) wine_rb_move_red_left(entry);
+            entry = &(*entry)->left;
+        }
+        else
+        {
+            if (wine_rb_is_red((*entry)->left)) wine_rb_rotate_right(entry);
+            if (!tree->functions->compare(key, *entry) && !(*entry)->right)
+            {
+                *entry = NULL;
+                break;
+            }
+            if (!wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->right->left))
+                wine_rb_move_red_right(entry);
+            if (!tree->functions->compare(key, *entry))
+            {
+                struct wine_rb_entry **e = &(*entry)->right;
+                struct wine_rb_entry *m = *e;
+                while (m->left) m = m->left;
+
+                wine_rb_stack_push(&tree->stack, entry);
+                (*entry)->flags |= WINE_RB_FLAG_STOP;
+
+                while ((*e)->left)
+                {
+                    wine_rb_stack_push(&tree->stack, e);
+                    if (!wine_rb_is_red((*e)->left) && !wine_rb_is_red((*e)->left->left)) wine_rb_move_red_left(e);
+                    e = &(*e)->left;
+                }
+                *e = NULL;
+                wine_rb_fixup(&tree->stack);
+
+                *m = **entry;
+                *entry = m;
+
+                break;
+            }
+            else
+            {
+                wine_rb_stack_push(&tree->stack, entry);
+                entry = &(*entry)->right;
+            }
+        }
+    }
+
+    wine_rb_fixup(&tree->stack);
+    if (tree->root) tree->root->flags &= ~WINE_RB_FLAG_RED;
+}
+
+#endif  /* __WINE_WINE_RBTREE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h
new file mode 100644
index 0000000..9f3185c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h
@@ -0,0 +1,355 @@
+/*
+ * Wine internal Unicode definitions
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_UNICODE_H
+#define __WINE_WINE_UNICODE_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINE_UNICODE_API
+# if defined(_MSC_VER) || defined(__MINGW32__)
+#  define WINE_UNICODE_API DECLSPEC_IMPORT
+# else
+#  define WINE_UNICODE_API
+# endif
+#endif
+
+/*#ifndef WINE_UNICODE_INLINE
+#define WINE_UNICODE_INLINE extern inline
+#endif*/
+#define WINE_UNICODE_INLINE static __inline
+
+/* code page info common to SBCS and DBCS */
+struct cp_info
+{
+    unsigned int          codepage;          /* codepage id */
+    unsigned int          char_size;         /* char size (1 or 2 bytes) */
+    WCHAR                 def_char;          /* default char value (can be double-byte) */
+    WCHAR                 def_unicode_char;  /* default Unicode char value */
+    const char           *name;              /* code page name */
+};
+
+struct sbcs_table
+{
+    struct cp_info        info;
+    const WCHAR          *cp2uni;            /* code page -> Unicode map */
+    const WCHAR          *cp2uni_glyphs;     /* code page -> Unicode map with glyph chars */
+    const unsigned char  *uni2cp_low;        /* Unicode -> code page map */
+    const unsigned short *uni2cp_high;
+};
+
+struct dbcs_table
+{
+    struct cp_info        info;
+    const WCHAR          *cp2uni;            /* code page -> Unicode map */
+    const unsigned char  *cp2uni_leadbytes;
+    const unsigned short *uni2cp_low;        /* Unicode -> code page map */
+    const unsigned short *uni2cp_high;
+    unsigned char         lead_bytes[12];    /* lead bytes ranges */
+};
+
+union cptable
+{
+    struct cp_info    info;
+    struct sbcs_table sbcs;
+    struct dbcs_table dbcs;
+};
+
+extern const union cptable *wine_cp_get_table( unsigned int codepage );
+extern const union cptable *wine_cp_enum_table( unsigned int index );
+
+extern int wine_cp_mbstowcs( const union cptable *table, int flags,
+                             const char *src, int srclen,
+                             WCHAR *dst, int dstlen );
+extern int wine_cp_wcstombs( const union cptable *table, int flags,
+                             const WCHAR *src, int srclen,
+                             char *dst, int dstlen, const char *defchar, int *used );
+extern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+
+extern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 );
+extern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen );
+
+extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );
+extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );
+extern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n );
+extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
+extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern int sprintfW( WCHAR *str, const WCHAR *format, ... );
+extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );
+extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );
+extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );
+
+#ifdef WINE_UNICODE_INLINE
+
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch );
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
+{
+    return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
+}
+
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];
+    return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];
+    return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
+}
+
+/* the character type contains the C1_* flags in the low 12 bits */
+/* and the C2_* type in the high 4 bits */
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch );
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const unsigned short wine_wctype_table[];
+    return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc );
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_CNTRL;
+}
+
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc );
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_PUNCT;
+}
+
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc );
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_SPACE;
+}
+
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_DIGIT;
+}
+
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_XDIGIT;
+}
+
+WINE_UNICODE_INLINE int islowerW( WCHAR wc );
+WINE_UNICODE_INLINE int islowerW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_LOWER;
+}
+
+WINE_UNICODE_INLINE int isupperW( WCHAR wc );
+WINE_UNICODE_INLINE int isupperW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_UPPER;
+}
+
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc );
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc );
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc );
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isprintW( WCHAR wc );
+WINE_UNICODE_INLINE int isprintW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+/* some useful string manipulation routines */
+
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str );
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )
+{
+    const WCHAR *s = str;
+    while (*s) s++;
+    return s - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
+{
+    WCHAR *p = dst;
+    while ((*p++ = *src++));
+    return dst;
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead
+
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 );
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+    while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n );
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+{
+    if (n <= 0) return 0;
+    while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
+{
+    strcpyW( dst + strlenW(dst), src );
+    return dst;
+}
+
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+{
+    do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);
+    return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
+{
+    WCHAR *ret = NULL;
+    do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
+{
+    for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;
+    return NULL;
+}
+
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )
+{
+    const WCHAR *ptr;
+    for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
+    return ptr - str;
+}
+
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject );
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )
+{
+    const WCHAR *ptr;
+    for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
+    return ptr - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )
+{
+    WCHAR *ret = str;
+    while ((*str = tolowerW(*str))) str++;
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )
+{
+    WCHAR *ret = str;
+    while ((*str = toupperW(*str))) str++;
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+    const WCHAR *end;
+    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;
+    return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+    const WCHAR *end;
+    WCHAR *ret = NULL;
+    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;
+    return ret;
+}
+
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str );
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str )
+{
+    return strtolW( str, (WCHAR **)0, 10 );
+}
+
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str );
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str )
+{
+    return (int)atolW( str );
+}
+#endif //#ifdef WINE_UNICODE_INLINE
+
+#undef WINE_UNICODE_INLINE
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINE_UNICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h
new file mode 100644
index 0000000..5dbf7a4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h
@@ -0,0 +1,9725 @@
+/*** Autogenerated by WIDL 1.1.43 from ../../include/wine/wined3d.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WINED3D_H
+#define __WIDL_WINED3D_H
+
+#ifdef VBOX_WITH_WDDM
+#include "../../../vbox/VBoxWineEx.h"
+#endif
+
+# define DECLSPEC_HIDDEN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IWineD3DDeviceParent_FWD_DEFINED__
+#define __IWineD3DDeviceParent_FWD_DEFINED__
+typedef interface IWineD3DDeviceParent IWineD3DDeviceParent;
+#endif
+
+#ifndef __IWineD3DBase_FWD_DEFINED__
+#define __IWineD3DBase_FWD_DEFINED__
+typedef interface IWineD3DBase IWineD3DBase;
+#endif
+
+#ifndef __IWineD3D_FWD_DEFINED__
+#define __IWineD3D_FWD_DEFINED__
+typedef interface IWineD3D IWineD3D;
+#endif
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DRendertargetView_FWD_DEFINED__
+#define __IWineD3DRendertargetView_FWD_DEFINED__
+typedef interface IWineD3DRendertargetView IWineD3DRendertargetView;
+#endif
+
+#ifndef __IWineD3DPalette_FWD_DEFINED__
+#define __IWineD3DPalette_FWD_DEFINED__
+typedef interface IWineD3DPalette IWineD3DPalette;
+#endif
+
+#ifndef __IWineD3DClipper_FWD_DEFINED__
+#define __IWineD3DClipper_FWD_DEFINED__
+typedef interface IWineD3DClipper IWineD3DClipper;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DBaseTexture_FWD_DEFINED__
+#define __IWineD3DBaseTexture_FWD_DEFINED__
+typedef interface IWineD3DBaseTexture IWineD3DBaseTexture;
+#endif
+
+#ifndef __IWineD3DTexture_FWD_DEFINED__
+#define __IWineD3DTexture_FWD_DEFINED__
+typedef interface IWineD3DTexture IWineD3DTexture;
+#endif
+
+#ifndef __IWineD3DCubeTexture_FWD_DEFINED__
+#define __IWineD3DCubeTexture_FWD_DEFINED__
+typedef interface IWineD3DCubeTexture IWineD3DCubeTexture;
+#endif
+
+#ifndef __IWineD3DVolumeTexture_FWD_DEFINED__
+#define __IWineD3DVolumeTexture_FWD_DEFINED__
+typedef interface IWineD3DVolumeTexture IWineD3DVolumeTexture;
+#endif
+
+#ifndef __IWineD3DVertexDeclaration_FWD_DEFINED__
+#define __IWineD3DVertexDeclaration_FWD_DEFINED__
+typedef interface IWineD3DVertexDeclaration IWineD3DVertexDeclaration;
+#endif
+
+#ifndef __IWineD3DStateBlock_FWD_DEFINED__
+#define __IWineD3DStateBlock_FWD_DEFINED__
+typedef interface IWineD3DStateBlock IWineD3DStateBlock;
+#endif
+
+#ifndef __IWineD3DQuery_FWD_DEFINED__
+#define __IWineD3DQuery_FWD_DEFINED__
+typedef interface IWineD3DQuery IWineD3DQuery;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DBuffer_FWD_DEFINED__
+#define __IWineD3DBuffer_FWD_DEFINED__
+typedef interface IWineD3DBuffer IWineD3DBuffer;
+#endif
+
+#ifndef __IWineD3DBaseShader_FWD_DEFINED__
+#define __IWineD3DBaseShader_FWD_DEFINED__
+typedef interface IWineD3DBaseShader IWineD3DBaseShader;
+#endif
+
+#ifndef __IWineD3DVertexShader_FWD_DEFINED__
+#define __IWineD3DVertexShader_FWD_DEFINED__
+typedef interface IWineD3DVertexShader IWineD3DVertexShader;
+#endif
+
+#ifndef __IWineD3DGeometryShader_FWD_DEFINED__
+#define __IWineD3DGeometryShader_FWD_DEFINED__
+typedef interface IWineD3DGeometryShader IWineD3DGeometryShader;
+#endif
+
+#ifndef __IWineD3DPixelShader_FWD_DEFINED__
+#define __IWineD3DPixelShader_FWD_DEFINED__
+typedef interface IWineD3DPixelShader IWineD3DPixelShader;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+
+#if 0
+typedef HANDLE HMONITOR;
+typedef struct _RGNDATAHEADER {
+    DWORD dwSize;
+    DWORD iType;
+    DWORD nCount;
+    DWORD nRgnSize;
+    RECT rcBound;
+} RGNDATAHEADER;
+typedef struct _RGNDATA {
+    RGNDATAHEADER rdh;
+    char Buffer[1];
+} RGNDATA;
+typedef struct _LUID {
+    DWORD LowPart;
+    LONG HighPart;
+} LUID;
+typedef struct _LUID *PLUID;
+#endif
+#define WINED3D_OK                                  S_OK
+#define _FACWINED3D (0x876)
+
+#define MAKE_WINED3DSTATUS(code)                    MAKE_HRESULT(0, _FACWINED3D, code)
+#define WINED3DOK_NOAUTOGEN                         MAKE_WINED3DSTATUS(2159)
+#define MAKE_WINED3DHRESULT(code)                   MAKE_HRESULT(1, _FACWINED3D, code)
+#define WINED3DERR_WRONGTEXTUREFORMAT               MAKE_WINED3DHRESULT(2072)
+#define WINED3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_WINED3DHRESULT(2073)
+#define WINED3DERR_UNSUPPORTEDCOLORARG              MAKE_WINED3DHRESULT(2074)
+#define WINED3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_WINED3DHRESULT(2075)
+#define WINED3DERR_UNSUPPORTEDALPHAARG              MAKE_WINED3DHRESULT(2076)
+#define WINED3DERR_TOOMANYOPERATIONS                MAKE_WINED3DHRESULT(2077)
+#define WINED3DERR_CONFLICTINGTEXTUREFILTER         MAKE_WINED3DHRESULT(2078)
+#define WINED3DERR_UNSUPPORTEDFACTORVALUE           MAKE_WINED3DHRESULT(2079)
+#define WINED3DERR_CONFLICTINGRENDERSTATE           MAKE_WINED3DHRESULT(2081)
+#define WINED3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_WINED3DHRESULT(2082)
+#define WINED3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_WINED3DHRESULT(2086)
+#define WINED3DERR_DRIVERINTERNALERROR              MAKE_WINED3DHRESULT(2087)
+#define WINED3DERR_NOTFOUND                         MAKE_WINED3DHRESULT(2150)
+#define WINED3DERR_MOREDATA                         MAKE_WINED3DHRESULT(2151)
+#define WINED3DERR_DEVICELOST                       MAKE_WINED3DHRESULT(2152)
+#define WINED3DERR_DEVICENOTRESET                   MAKE_WINED3DHRESULT(2153)
+#define WINED3DERR_NOTAVAILABLE                     MAKE_WINED3DHRESULT(2154)
+#define WINED3DERR_OUTOFVIDEOMEMORY                 MAKE_WINED3DHRESULT(380)
+#define WINED3DERR_INVALIDDEVICE                    MAKE_WINED3DHRESULT(2155)
+#define WINED3DERR_INVALIDCALL                      MAKE_WINED3DHRESULT(2156)
+#define WINED3DERR_DRIVERINVALIDCALL                MAKE_WINED3DHRESULT(2157)
+#define WINED3DERR_WASSTILLDRAWING                  MAKE_WINED3DHRESULT(540)
+#define WINEDDERR_NOTAOVERLAYSURFACE                MAKE_WINED3DHRESULT(580)
+#define WINEDDERR_NOTLOCKED                         MAKE_WINED3DHRESULT(584)
+#define WINEDDERR_NODC                              MAKE_WINED3DHRESULT(586)
+#define WINEDDERR_DCALREADYCREATED                  MAKE_WINED3DHRESULT(620)
+#define WINEDDERR_NOTFLIPPABLE                      MAKE_WINED3DHRESULT(582)
+#define WINEDDERR_SURFACEBUSY                       MAKE_WINED3DHRESULT(430)
+#define WINEDDERR_INVALIDRECT                       MAKE_WINED3DHRESULT(150)
+#define WINEDDERR_NOCLIPLIST                        MAKE_WINED3DHRESULT(205)
+#define WINEDDERR_OVERLAYNOTVISIBLE                 MAKE_WINED3DHRESULT(577)
+typedef DWORD WINED3DCOLOR;
+typedef enum _WINED3DLIGHTTYPE {
+    WINED3DLIGHT_POINT = 1,
+    WINED3DLIGHT_SPOT = 2,
+    WINED3DLIGHT_DIRECTIONAL = 3,
+    WINED3DLIGHT_PARALLELPOINT = 4,
+    WINED3DLIGHT_GLSPOT = 5,
+    WINED3DLIGHT_FORCE_DWORD = 0x7fffffff
+} WINED3DLIGHTTYPE;
+typedef enum _WINED3DPRIMITIVETYPE {
+    WINED3DPT_UNDEFINED = 0,
+    WINED3DPT_POINTLIST = 1,
+    WINED3DPT_LINELIST = 2,
+    WINED3DPT_LINESTRIP = 3,
+    WINED3DPT_TRIANGLELIST = 4,
+    WINED3DPT_TRIANGLESTRIP = 5,
+    WINED3DPT_TRIANGLEFAN = 6,
+    WINED3DPT_LINELIST_ADJ = 10,
+    WINED3DPT_LINESTRIP_ADJ = 11,
+    WINED3DPT_TRIANGLELIST_ADJ = 12,
+    WINED3DPT_TRIANGLESTRIP_ADJ = 13,
+    WINED3DPT_FORCE_DWORD = 0x7fffffff
+} WINED3DPRIMITIVETYPE;
+typedef enum _WINED3DDEVTYPE {
+    WINED3DDEVTYPE_HAL = 1,
+    WINED3DDEVTYPE_REF = 2,
+    WINED3DDEVTYPE_SW = 3,
+    WINED3DDEVTYPE_NULLREF = 4,
+    WINED3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} WINED3DDEVTYPE;
+typedef enum _WINED3DDEGREETYPE {
+    WINED3DDEGREE_LINEAR = 1,
+    WINED3DDEGREE_QUADRATIC = 2,
+    WINED3DDEGREE_CUBIC = 3,
+    WINED3DDEGREE_QUINTIC = 5,
+    WINED3DDEGREE_FORCE_DWORD = 0x7fffffff
+} WINED3DDEGREETYPE;
+typedef enum _WINED3DFORMAT {
+    WINED3DFMT_UNKNOWN = 0,
+    WINED3DFMT_B8G8R8_UNORM = 1,
+    WINED3DFMT_B5G5R5X1_UNORM = 2,
+    WINED3DFMT_B4G4R4A4_UNORM = 3,
+    WINED3DFMT_B2G3R3_UNORM = 4,
+    WINED3DFMT_B2G3R3A8_UNORM = 5,
+    WINED3DFMT_B4G4R4X4_UNORM = 6,
+    WINED3DFMT_R8G8B8X8_UNORM = 7,
+    WINED3DFMT_B10G10R10A2_UNORM = 8,
+    WINED3DFMT_P8_UINT_A8_UNORM = 9,
+    WINED3DFMT_P8_UINT = 10,
+    WINED3DFMT_L8_UNORM = 11,
+    WINED3DFMT_L8A8_UNORM = 12,
+    WINED3DFMT_L4A4_UNORM = 13,
+    WINED3DFMT_R5G5_SNORM_L6_UNORM = 14,
+    WINED3DFMT_R8G8_SNORM_L8X8_UNORM = 15,
+    WINED3DFMT_R10G11B11_SNORM = 16,
+    WINED3DFMT_R10G10B10_SNORM_A2_UNORM = 17,
+    WINED3DFMT_D16_LOCKABLE = 18,
+    WINED3DFMT_D32_UNORM = 19,
+    WINED3DFMT_S1_UINT_D15_UNORM = 20,
+    WINED3DFMT_X8D24_UNORM = 21,
+    WINED3DFMT_S4X4_UINT_D24_UNORM = 22,
+    WINED3DFMT_L16_UNORM = 23,
+    WINED3DFMT_S8_UINT_D24_FLOAT = 24,
+    WINED3DFMT_VERTEXDATA = 25,
+    WINED3DFMT_R8G8_SNORM_Cx = 26,
+    WINED3DFMT_R32G32B32A32_TYPELESS = 27,
+    WINED3DFMT_R32G32B32A32_FLOAT = 28,
+    WINED3DFMT_R32G32B32A32_UINT = 29,
+    WINED3DFMT_R32G32B32A32_SINT = 30,
+    WINED3DFMT_R32G32B32_TYPELESS = 31,
+    WINED3DFMT_R32G32B32_FLOAT = 32,
+    WINED3DFMT_R32G32B32_UINT = 33,
+    WINED3DFMT_R32G32B32_SINT = 34,
+    WINED3DFMT_R16G16B16A16_TYPELESS = 35,
+    WINED3DFMT_R16G16B16A16_FLOAT = 36,
+    WINED3DFMT_R16G16B16A16_UNORM = 37,
+    WINED3DFMT_R16G16B16A16_UINT = 38,
+    WINED3DFMT_R16G16B16A16_SNORM = 39,
+    WINED3DFMT_R16G16B16A16_SINT = 40,
+    WINED3DFMT_R32G32_TYPELESS = 41,
+    WINED3DFMT_R32G32_FLOAT = 42,
+    WINED3DFMT_R32G32_UINT = 43,
+    WINED3DFMT_R32G32_SINT = 44,
+    WINED3DFMT_R32G8X24_TYPELESS = 45,
+    WINED3DFMT_D32_FLOAT_S8X24_UINT = 46,
+    WINED3DFMT_R32_FLOAT_X8X24_TYPELESS = 47,
+    WINED3DFMT_X32_TYPELESS_G8X24_UINT = 48,
+    WINED3DFMT_R10G10B10A2_TYPELESS = 49,
+    WINED3DFMT_R10G10B10A2_UNORM = 50,
+    WINED3DFMT_R10G10B10A2_UINT = 51,
+    WINED3DFMT_R10G10B10A2_SNORM = 52,
+    WINED3DFMT_R11G11B10_FLOAT = 53,
+    WINED3DFMT_R8G8B8A8_TYPELESS = 54,
+    WINED3DFMT_R8G8B8A8_UNORM = 55,
+    WINED3DFMT_R8G8B8A8_UNORM_SRGB = 56,
+    WINED3DFMT_R8G8B8A8_UINT = 57,
+    WINED3DFMT_R8G8B8A8_SNORM = 58,
+    WINED3DFMT_R8G8B8A8_SINT = 59,
+    WINED3DFMT_R16G16_TYPELESS = 60,
+    WINED3DFMT_R16G16_FLOAT = 61,
+    WINED3DFMT_R16G16_UNORM = 62,
+    WINED3DFMT_R16G16_UINT = 63,
+    WINED3DFMT_R16G16_SNORM = 64,
+    WINED3DFMT_R16G16_SINT = 65,
+    WINED3DFMT_R32_TYPELESS = 66,
+    WINED3DFMT_D32_FLOAT = 67,
+    WINED3DFMT_R32_FLOAT = 68,
+    WINED3DFMT_R32_UINT = 69,
+    WINED3DFMT_R32_SINT = 70,
+    WINED3DFMT_R24G8_TYPELESS = 71,
+    WINED3DFMT_D24_UNORM_S8_UINT = 72,
+    WINED3DFMT_R24_UNORM_X8_TYPELESS = 73,
+    WINED3DFMT_X24_TYPELESS_G8_UINT = 74,
+    WINED3DFMT_R8G8_TYPELESS = 75,
+    WINED3DFMT_R8G8_UNORM = 76,
+    WINED3DFMT_R8G8_UINT = 77,
+    WINED3DFMT_R8G8_SNORM = 78,
+    WINED3DFMT_R8G8_SINT = 79,
+    WINED3DFMT_R16_TYPELESS = 80,
+    WINED3DFMT_R16_FLOAT = 81,
+    WINED3DFMT_D16_UNORM = 82,
+    WINED3DFMT_R16_UNORM = 83,
+    WINED3DFMT_R16_UINT = 84,
+    WINED3DFMT_R16_SNORM = 85,
+    WINED3DFMT_R16_SINT = 86,
+    WINED3DFMT_R8_TYPELESS = 87,
+    WINED3DFMT_R8_UNORM = 88,
+    WINED3DFMT_R8_UINT = 89,
+    WINED3DFMT_R8_SNORM = 90,
+    WINED3DFMT_R8_SINT = 91,
+    WINED3DFMT_A8_UNORM = 92,
+    WINED3DFMT_R1_UNORM = 93,
+    WINED3DFMT_R9G9B9E5_SHAREDEXP = 94,
+    WINED3DFMT_R8G8_B8G8_UNORM = 95,
+    WINED3DFMT_G8R8_G8B8_UNORM = 96,
+    WINED3DFMT_BC1_TYPELESS = 97,
+    WINED3DFMT_BC1_UNORM = 98,
+    WINED3DFMT_BC1_UNORM_SRGB = 99,
+    WINED3DFMT_BC2_TYPELESS = 100,
+    WINED3DFMT_BC2_UNORM = 101,
+    WINED3DFMT_BC2_UNORM_SRGB = 102,
+    WINED3DFMT_BC3_TYPELESS = 103,
+    WINED3DFMT_BC3_UNORM = 104,
+    WINED3DFMT_BC3_UNORM_SRGB = 105,
+    WINED3DFMT_BC4_TYPELESS = 106,
+    WINED3DFMT_BC4_UNORM = 107,
+    WINED3DFMT_BC4_SNORM = 108,
+    WINED3DFMT_BC5_TYPELESS = 109,
+    WINED3DFMT_BC5_UNORM = 110,
+    WINED3DFMT_BC5_SNORM = 111,
+    WINED3DFMT_B5G6R5_UNORM = 112,
+    WINED3DFMT_B5G5R5A1_UNORM = 113,
+    WINED3DFMT_B8G8R8A8_UNORM = 114,
+    WINED3DFMT_B8G8R8X8_UNORM = 115,
+    WINED3DFMT_UYVY = (((ULONG)(unsigned char)'U' | ((ULONG)(unsigned char)'Y' << 8)) | ((ULONG)(unsigned char)'V' << 16)) | ((ULONG)(unsigned char)'Y' << 24),
+    WINED3DFMT_YUY2 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'U' << 8)) | ((ULONG)(unsigned char)'Y' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_YV12 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'1' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_DXT1 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+    WINED3DFMT_DXT2 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_DXT3 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'3' << 24),
+    WINED3DFMT_DXT4 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'4' << 24),
+    WINED3DFMT_DXT5 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'5' << 24),
+    WINED3DFMT_MULTI2_ARGB8 = (((ULONG)(unsigned char)'M' | ((ULONG)(unsigned char)'E' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+    WINED3DFMT_G8R8_G8B8 = (((ULONG)(unsigned char)'G' | ((ULONG)(unsigned char)'R' << 8)) | ((ULONG)(unsigned char)'G' << 16)) | ((ULONG)(unsigned char)'B' << 24),
+    WINED3DFMT_R8G8_B8G8 = (((ULONG)(unsigned char)'R' | ((ULONG)(unsigned char)'G' << 8)) | ((ULONG)(unsigned char)'B' << 16)) | ((ULONG)(unsigned char)'G' << 24),
+    WINED3DFMT_ATI2N = (((ULONG)(unsigned char)'A' | ((ULONG)(unsigned char)'T' << 8)) | ((ULONG)(unsigned char)'I' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_INST = (((ULONG)(unsigned char)'I' | ((ULONG)(unsigned char)'N' << 8)) | ((ULONG)(unsigned char)'S' << 16)) | ((ULONG)(unsigned char)'T' << 24),
+    WINED3DFMT_NVHU = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'U' << 24),
+    WINED3DFMT_NVHS = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'S' << 24),
+    WINED3DFMT_FORCE_DWORD = 0xffffffff
+} WINED3DFORMAT;
+typedef enum _WINED3DRENDERSTATETYPE {
+    WINED3DRS_ANTIALIAS = 2,
+    WINED3DRS_TEXTUREPERSPECTIVE = 4,
+    WINED3DRS_WRAPU = 5,
+    WINED3DRS_WRAPV = 6,
+    WINED3DRS_ZENABLE = 7,
+    WINED3DRS_FILLMODE = 8,
+    WINED3DRS_SHADEMODE = 9,
+    WINED3DRS_LINEPATTERN = 10,
+    WINED3DRS_MONOENABLE = 11,
+    WINED3DRS_ROP2 = 12,
+    WINED3DRS_PLANEMASK = 13,
+    WINED3DRS_ZWRITEENABLE = 14,
+    WINED3DRS_ALPHATESTENABLE = 15,
+    WINED3DRS_LASTPIXEL = 16,
+    WINED3DRS_SRCBLEND = 19,
+    WINED3DRS_DESTBLEND = 20,
+    WINED3DRS_CULLMODE = 22,
+    WINED3DRS_ZFUNC = 23,
+    WINED3DRS_ALPHAREF = 24,
+    WINED3DRS_ALPHAFUNC = 25,
+    WINED3DRS_DITHERENABLE = 26,
+    WINED3DRS_ALPHABLENDENABLE = 27,
+    WINED3DRS_FOGENABLE = 28,
+    WINED3DRS_SPECULARENABLE = 29,
+    WINED3DRS_ZVISIBLE = 30,
+    WINED3DRS_SUBPIXEL = 31,
+    WINED3DRS_SUBPIXELX = 32,
+    WINED3DRS_STIPPLEDALPHA = 33,
+    WINED3DRS_FOGCOLOR = 34,
+    WINED3DRS_FOGTABLEMODE = 35,
+    WINED3DRS_FOGSTART = 36,
+    WINED3DRS_FOGEND = 37,
+    WINED3DRS_FOGDENSITY = 38,
+    WINED3DRS_STIPPLEENABLE = 39,
+    WINED3DRS_EDGEANTIALIAS = 40,
+    WINED3DRS_COLORKEYENABLE = 41,
+    WINED3DRS_MIPMAPLODBIAS = 46,
+    WINED3DRS_ZBIAS = 47,
+    WINED3DRS_RANGEFOGENABLE = 48,
+    WINED3DRS_ANISOTROPY = 49,
+    WINED3DRS_FLUSHBATCH = 50,
+    WINED3DRS_TRANSLUCENTSORTINDEPENDENT = 51,
+    WINED3DRS_STENCILENABLE = 52,
+    WINED3DRS_STENCILFAIL = 53,
+    WINED3DRS_STENCILZFAIL = 54,
+    WINED3DRS_STENCILPASS = 55,
+    WINED3DRS_STENCILFUNC = 56,
+    WINED3DRS_STENCILREF = 57,
+    WINED3DRS_STENCILMASK = 58,
+    WINED3DRS_STENCILWRITEMASK = 59,
+    WINED3DRS_TEXTUREFACTOR = 60,
+    WINED3DRS_WRAP0 = 128,
+    WINED3DRS_WRAP1 = 129,
+    WINED3DRS_WRAP2 = 130,
+    WINED3DRS_WRAP3 = 131,
+    WINED3DRS_WRAP4 = 132,
+    WINED3DRS_WRAP5 = 133,
+    WINED3DRS_WRAP6 = 134,
+    WINED3DRS_WRAP7 = 135,
+    WINED3DRS_CLIPPING = 136,
+    WINED3DRS_LIGHTING = 137,
+    WINED3DRS_EXTENTS = 138,
+    WINED3DRS_AMBIENT = 139,
+    WINED3DRS_FOGVERTEXMODE = 140,
+    WINED3DRS_COLORVERTEX = 141,
+    WINED3DRS_LOCALVIEWER = 142,
+    WINED3DRS_NORMALIZENORMALS = 143,
+    WINED3DRS_COLORKEYBLENDENABLE = 144,
+    WINED3DRS_DIFFUSEMATERIALSOURCE = 145,
+    WINED3DRS_SPECULARMATERIALSOURCE = 146,
+    WINED3DRS_AMBIENTMATERIALSOURCE = 147,
+    WINED3DRS_EMISSIVEMATERIALSOURCE = 148,
+    WINED3DRS_VERTEXBLEND = 151,
+    WINED3DRS_CLIPPLANEENABLE = 152,
+    WINED3DRS_SOFTWAREVERTEXPROCESSING = 153,
+    WINED3DRS_POINTSIZE = 154,
+    WINED3DRS_POINTSIZE_MIN = 155,
+    WINED3DRS_POINTSPRITEENABLE = 156,
+    WINED3DRS_POINTSCALEENABLE = 157,
+    WINED3DRS_POINTSCALE_A = 158,
+    WINED3DRS_POINTSCALE_B = 159,
+    WINED3DRS_POINTSCALE_C = 160,
+    WINED3DRS_MULTISAMPLEANTIALIAS = 161,
+    WINED3DRS_MULTISAMPLEMASK = 162,
+    WINED3DRS_PATCHEDGESTYLE = 163,
+    WINED3DRS_PATCHSEGMENTS = 164,
+    WINED3DRS_DEBUGMONITORTOKEN = 165,
+    WINED3DRS_POINTSIZE_MAX = 166,
+    WINED3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+    WINED3DRS_COLORWRITEENABLE = 168,
+    WINED3DRS_TWEENFACTOR = 170,
+    WINED3DRS_BLENDOP = 171,
+    WINED3DRS_POSITIONDEGREE = 172,
+    WINED3DRS_NORMALDEGREE = 173,
+    WINED3DRS_SCISSORTESTENABLE = 174,
+    WINED3DRS_SLOPESCALEDEPTHBIAS = 175,
+    WINED3DRS_ANTIALIASEDLINEENABLE = 176,
+    WINED3DRS_MINTESSELLATIONLEVEL = 178,
+    WINED3DRS_MAXTESSELLATIONLEVEL = 179,
+    WINED3DRS_ADAPTIVETESS_X = 180,
+    WINED3DRS_ADAPTIVETESS_Y = 181,
+    WINED3DRS_ADAPTIVETESS_Z = 182,
+    WINED3DRS_ADAPTIVETESS_W = 183,
+    WINED3DRS_ENABLEADAPTIVETESSELLATION = 184,
+    WINED3DRS_TWOSIDEDSTENCILMODE = 185,
+    WINED3DRS_CCW_STENCILFAIL = 186,
+    WINED3DRS_CCW_STENCILZFAIL = 187,
+    WINED3DRS_CCW_STENCILPASS = 188,
+    WINED3DRS_CCW_STENCILFUNC = 189,
+    WINED3DRS_COLORWRITEENABLE1 = 190,
+    WINED3DRS_COLORWRITEENABLE2 = 191,
+    WINED3DRS_COLORWRITEENABLE3 = 192,
+    WINED3DRS_BLENDFACTOR = 193,
+    WINED3DRS_SRGBWRITEENABLE = 194,
+    WINED3DRS_DEPTHBIAS = 195,
+    WINED3DRS_WRAP8 = 198,
+    WINED3DRS_WRAP9 = 199,
+    WINED3DRS_WRAP10 = 200,
+    WINED3DRS_WRAP11 = 201,
+    WINED3DRS_WRAP12 = 202,
+    WINED3DRS_WRAP13 = 203,
+    WINED3DRS_WRAP14 = 204,
+    WINED3DRS_WRAP15 = 205,
+    WINED3DRS_SEPARATEALPHABLENDENABLE = 206,
+    WINED3DRS_SRCBLENDALPHA = 207,
+    WINED3DRS_DESTBLENDALPHA = 208,
+    WINED3DRS_BLENDOPALPHA = 209,
+    WINED3DRS_FORCE_DWORD = 0x7fffffff
+} WINED3DRENDERSTATETYPE;
+#define WINEHIGHEST_RENDER_STATE (WINED3DRS_BLENDOPALPHA)
+
+typedef enum _WINED3DBLEND {
+    WINED3DBLEND_ZERO = 1,
+    WINED3DBLEND_ONE = 2,
+    WINED3DBLEND_SRCCOLOR = 3,
+    WINED3DBLEND_INVSRCCOLOR = 4,
+    WINED3DBLEND_SRCALPHA = 5,
+    WINED3DBLEND_INVSRCALPHA = 6,
+    WINED3DBLEND_DESTALPHA = 7,
+    WINED3DBLEND_INVDESTALPHA = 8,
+    WINED3DBLEND_DESTCOLOR = 9,
+    WINED3DBLEND_INVDESTCOLOR = 10,
+    WINED3DBLEND_SRCALPHASAT = 11,
+    WINED3DBLEND_BOTHSRCALPHA = 12,
+    WINED3DBLEND_BOTHINVSRCALPHA = 13,
+    WINED3DBLEND_BLENDFACTOR = 14,
+    WINED3DBLEND_INVBLENDFACTOR = 15,
+    WINED3DBLEND_FORCE_DWORD = 0x7fffffff
+} WINED3DBLEND;
+typedef enum _WINED3DBLENDOP {
+    WINED3DBLENDOP_ADD = 1,
+    WINED3DBLENDOP_SUBTRACT = 2,
+    WINED3DBLENDOP_REVSUBTRACT = 3,
+    WINED3DBLENDOP_MIN = 4,
+    WINED3DBLENDOP_MAX = 5,
+    WINED3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} WINED3DBLENDOP;
+typedef enum _WINED3DVERTEXBLENDFLAGS {
+    WINED3DVBF_DISABLE = 0,
+    WINED3DVBF_1WEIGHTS = 1,
+    WINED3DVBF_2WEIGHTS = 2,
+    WINED3DVBF_3WEIGHTS = 3,
+    WINED3DVBF_TWEENING = 255,
+    WINED3DVBF_0WEIGHTS = 256
+} WINED3DVERTEXBLENDFLAGS;
+typedef enum _WINED3DCMPFUNC {
+    WINED3DCMP_NEVER = 1,
+    WINED3DCMP_LESS = 2,
+    WINED3DCMP_EQUAL = 3,
+    WINED3DCMP_LESSEQUAL = 4,
+    WINED3DCMP_GREATER = 5,
+    WINED3DCMP_NOTEQUAL = 6,
+    WINED3DCMP_GREATEREQUAL = 7,
+    WINED3DCMP_ALWAYS = 8,
+    WINED3DCMP_FORCE_DWORD = 0x7fffffff
+} WINED3DCMPFUNC;
+typedef enum _WINED3DZBUFFERTYPE {
+    WINED3DZB_FALSE = 0,
+    WINED3DZB_TRUE = 1,
+    WINED3DZB_USEW = 2,
+    WINED3DZB_FORCE_DWORD = 0x7fffffff
+} WINED3DZBUFFERTYPE;
+typedef enum _WINED3DFOGMODE {
+    WINED3DFOG_NONE = 0,
+    WINED3DFOG_EXP = 1,
+    WINED3DFOG_EXP2 = 2,
+    WINED3DFOG_LINEAR = 3,
+    WINED3DFOG_FORCE_DWORD = 0x7fffffff
+} WINED3DFOGMODE;
+typedef enum _WINED3DSHADEMODE {
+    WINED3DSHADE_FLAT = 1,
+    WINED3DSHADE_GOURAUD = 2,
+    WINED3DSHADE_PHONG = 3,
+    WINED3DSHADE_FORCE_DWORD = 0x7fffffff
+} WINED3DSHADEMODE;
+typedef enum _WINED3DFILLMODE {
+    WINED3DFILL_POINT = 1,
+    WINED3DFILL_WIREFRAME = 2,
+    WINED3DFILL_SOLID = 3,
+    WINED3DFILL_FORCE_DWORD = 0x7fffffff
+} WINED3DFILLMODE;
+typedef enum _WINED3DCULL {
+    WINED3DCULL_NONE = 1,
+    WINED3DCULL_CW = 2,
+    WINED3DCULL_CCW = 3,
+    WINED3DCULL_FORCE_DWORD = 0x7fffffff
+} WINED3DCULL;
+typedef enum _WINED3DSTENCILOP {
+    WINED3DSTENCILOP_KEEP = 1,
+    WINED3DSTENCILOP_ZERO = 2,
+    WINED3DSTENCILOP_REPLACE = 3,
+    WINED3DSTENCILOP_INCRSAT = 4,
+    WINED3DSTENCILOP_DECRSAT = 5,
+    WINED3DSTENCILOP_INVERT = 6,
+    WINED3DSTENCILOP_INCR = 7,
+    WINED3DSTENCILOP_DECR = 8,
+    WINED3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} WINED3DSTENCILOP;
+typedef enum _WINED3DMATERIALCOLORSOURCE {
+    WINED3DMCS_MATERIAL = 0,
+    WINED3DMCS_COLOR1 = 1,
+    WINED3DMCS_COLOR2 = 2,
+    WINED3DMCS_FORCE_DWORD = 0x7fffffff
+} WINED3DMATERIALCOLORSOURCE;
+typedef enum _WINED3DPATCHEDGESTYLE {
+    WINED3DPATCHEDGE_DISCRETE = 0,
+    WINED3DPATCHEDGE_CONTINUOUS = 1,
+    WINED3DPATCHEDGE_FORCE_DWORD = 0x7fffffff
+} WINED3DPATCHEDGESTYLE;
+typedef enum _WINED3DBACKBUFFER_TYPE {
+    WINED3DBACKBUFFER_TYPE_MONO = 0,
+    WINED3DBACKBUFFER_TYPE_LEFT = 1,
+    WINED3DBACKBUFFER_TYPE_RIGHT = 2,
+    WINED3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DBACKBUFFER_TYPE;
+typedef enum _WINED3DSWAPEFFECT {
+    WINED3DSWAPEFFECT_DISCARD = 1,
+    WINED3DSWAPEFFECT_FLIP = 2,
+    WINED3DSWAPEFFECT_COPY = 3,
+    WINED3DSWAPEFFECT_COPY_VSYNC = 4,
+    WINED3DSWAPEFFECT_FORCE_DWORD = 0xffffffff
+} WINED3DSWAPEFFECT;
+typedef enum _WINED3DSAMPLERSTATETYPE {
+    WINED3DSAMP_ADDRESSU = 1,
+    WINED3DSAMP_ADDRESSV = 2,
+    WINED3DSAMP_ADDRESSW = 3,
+    WINED3DSAMP_BORDERCOLOR = 4,
+    WINED3DSAMP_MAGFILTER = 5,
+    WINED3DSAMP_MINFILTER = 6,
+    WINED3DSAMP_MIPFILTER = 7,
+    WINED3DSAMP_MIPMAPLODBIAS = 8,
+    WINED3DSAMP_MAXMIPLEVEL = 9,
+    WINED3DSAMP_MAXANISOTROPY = 10,
+    WINED3DSAMP_SRGBTEXTURE = 11,
+    WINED3DSAMP_ELEMENTINDEX = 12,
+    WINED3DSAMP_DMAPOFFSET = 13,
+    WINED3DSAMP_FORCE_DWORD = 0x7fffffff
+} WINED3DSAMPLERSTATETYPE;
+#define WINED3D_HIGHEST_SAMPLER_STATE (WINED3DSAMP_DMAPOFFSET)
+
+typedef enum _WINED3DMULTISAMPLE_TYPE {
+    WINED3DMULTISAMPLE_NONE = 0,
+    WINED3DMULTISAMPLE_NONMASKABLE = 1,
+    WINED3DMULTISAMPLE_2_SAMPLES = 2,
+    WINED3DMULTISAMPLE_3_SAMPLES = 3,
+    WINED3DMULTISAMPLE_4_SAMPLES = 4,
+    WINED3DMULTISAMPLE_5_SAMPLES = 5,
+    WINED3DMULTISAMPLE_6_SAMPLES = 6,
+    WINED3DMULTISAMPLE_7_SAMPLES = 7,
+    WINED3DMULTISAMPLE_8_SAMPLES = 8,
+    WINED3DMULTISAMPLE_9_SAMPLES = 9,
+    WINED3DMULTISAMPLE_10_SAMPLES = 10,
+    WINED3DMULTISAMPLE_11_SAMPLES = 11,
+    WINED3DMULTISAMPLE_12_SAMPLES = 12,
+    WINED3DMULTISAMPLE_13_SAMPLES = 13,
+    WINED3DMULTISAMPLE_14_SAMPLES = 14,
+    WINED3DMULTISAMPLE_15_SAMPLES = 15,
+    WINED3DMULTISAMPLE_16_SAMPLES = 16,
+    WINED3DMULTISAMPLE_FORCE_DWORD = 0xffffffff
+} WINED3DMULTISAMPLE_TYPE;
+typedef enum _WINED3DTEXTURESTAGESTATETYPE {
+    WINED3DTSS_COLOROP = 0,
+    WINED3DTSS_COLORARG1 = 1,
+    WINED3DTSS_COLORARG2 = 2,
+    WINED3DTSS_ALPHAOP = 3,
+    WINED3DTSS_ALPHAARG1 = 4,
+    WINED3DTSS_ALPHAARG2 = 5,
+    WINED3DTSS_BUMPENVMAT00 = 6,
+    WINED3DTSS_BUMPENVMAT01 = 7,
+    WINED3DTSS_BUMPENVMAT10 = 8,
+    WINED3DTSS_BUMPENVMAT11 = 9,
+    WINED3DTSS_TEXCOORDINDEX = 10,
+    WINED3DTSS_BUMPENVLSCALE = 11,
+    WINED3DTSS_BUMPENVLOFFSET = 12,
+    WINED3DTSS_TEXTURETRANSFORMFLAGS = 13,
+    WINED3DTSS_COLORARG0 = 14,
+    WINED3DTSS_ALPHAARG0 = 15,
+    WINED3DTSS_RESULTARG = 16,
+    WINED3DTSS_CONSTANT = 17,
+    WINED3DTSS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURESTAGESTATETYPE;
+#define WINED3D_HIGHEST_TEXTURE_STATE (WINED3DTSS_CONSTANT)
+
+typedef enum _WINED3DTEXTURETRANSFORMFLAGS {
+    WINED3DTTFF_DISABLE = 0,
+    WINED3DTTFF_COUNT1 = 1,
+    WINED3DTTFF_COUNT2 = 2,
+    WINED3DTTFF_COUNT3 = 3,
+    WINED3DTTFF_COUNT4 = 4,
+    WINED3DTTFF_PROJECTED = 256,
+    WINED3DTTFF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURETRANSFORMFLAGS;
+typedef enum _WINED3DTEXTUREOP {
+    WINED3DTOP_DISABLE = 1,
+    WINED3DTOP_SELECTARG1 = 2,
+    WINED3DTOP_SELECTARG2 = 3,
+    WINED3DTOP_MODULATE = 4,
+    WINED3DTOP_MODULATE2X = 5,
+    WINED3DTOP_MODULATE4X = 6,
+    WINED3DTOP_ADD = 7,
+    WINED3DTOP_ADDSIGNED = 8,
+    WINED3DTOP_ADDSIGNED2X = 9,
+    WINED3DTOP_SUBTRACT = 10,
+    WINED3DTOP_ADDSMOOTH = 11,
+    WINED3DTOP_BLENDDIFFUSEALPHA = 12,
+    WINED3DTOP_BLENDTEXTUREALPHA = 13,
+    WINED3DTOP_BLENDFACTORALPHA = 14,
+    WINED3DTOP_BLENDTEXTUREALPHAPM = 15,
+    WINED3DTOP_BLENDCURRENTALPHA = 16,
+    WINED3DTOP_PREMODULATE = 17,
+    WINED3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+    WINED3DTOP_MODULATECOLOR_ADDALPHA = 19,
+    WINED3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+    WINED3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+    WINED3DTOP_BUMPENVMAP = 22,
+    WINED3DTOP_BUMPENVMAPLUMINANCE = 23,
+    WINED3DTOP_DOTPRODUCT3 = 24,
+    WINED3DTOP_MULTIPLYADD = 25,
+    WINED3DTOP_LERP = 26,
+    WINED3DTOP_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREOP;
+typedef enum _WINED3DTEXTUREADDRESS {
+    WINED3DTADDRESS_WRAP = 1,
+    WINED3DTADDRESS_MIRROR = 2,
+    WINED3DTADDRESS_CLAMP = 3,
+    WINED3DTADDRESS_BORDER = 4,
+    WINED3DTADDRESS_MIRRORONCE = 5,
+    WINED3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREADDRESS;
+typedef enum _WINED3DTRANSFORMSTATETYPE {
+    WINED3DTS_VIEW = 2,
+    WINED3DTS_PROJECTION = 3,
+    WINED3DTS_TEXTURE0 = 16,
+    WINED3DTS_TEXTURE1 = 17,
+    WINED3DTS_TEXTURE2 = 18,
+    WINED3DTS_TEXTURE3 = 19,
+    WINED3DTS_TEXTURE4 = 20,
+    WINED3DTS_TEXTURE5 = 21,
+    WINED3DTS_TEXTURE6 = 22,
+    WINED3DTS_TEXTURE7 = 23,
+    WINED3DTS_WORLD = 256,
+    WINED3DTS_WORLD1 = 257,
+    WINED3DTS_WORLD2 = 258,
+    WINED3DTS_WORLD3 = 259,
+    WINED3DTS_FORCE_DWORD = 0x7fffffff
+} WINED3DTRANSFORMSTATETYPE;
+#define WINED3DTS_WORLDMATRIX(index) (WINED3DTRANSFORMSTATETYPE)(index + 256)
+typedef enum _WINED3DBASISTYPE {
+    WINED3DBASIS_BEZIER = 0,
+    WINED3DBASIS_BSPLINE = 1,
+    WINED3DBASIS_INTERPOLATE = 2,
+    WINED3DBASIS_FORCE_DWORD = 0x7fffffff
+} WINED3DBASISTYPE;
+typedef enum _WINED3DCUBEMAP_FACES {
+    WINED3DCUBEMAP_FACE_POSITIVE_X = 0,
+    WINED3DCUBEMAP_FACE_NEGATIVE_X = 1,
+    WINED3DCUBEMAP_FACE_POSITIVE_Y = 2,
+    WINED3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+    WINED3DCUBEMAP_FACE_POSITIVE_Z = 4,
+    WINED3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+    WINED3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} WINED3DCUBEMAP_FACES;
+typedef enum _WINED3DTEXTUREFILTERTYPE {
+    WINED3DTEXF_NONE = 0,
+    WINED3DTEXF_POINT = 1,
+    WINED3DTEXF_LINEAR = 2,
+    WINED3DTEXF_ANISOTROPIC = 3,
+    WINED3DTEXF_FLATCUBIC = 4,
+    WINED3DTEXF_GAUSSIANCUBIC = 5,
+    WINED3DTEXF_PYRAMIDALQUAD = 6,
+    WINED3DTEXF_GAUSSIANQUAD = 7,
+    WINED3DTEXF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREFILTERTYPE;
+typedef enum _WINED3DRESOURCETYPE {
+    WINED3DRTYPE_SURFACE = 1,
+    WINED3DRTYPE_VOLUME = 2,
+    WINED3DRTYPE_TEXTURE = 3,
+    WINED3DRTYPE_VOLUMETEXTURE = 4,
+    WINED3DRTYPE_CUBETEXTURE = 5,
+    WINED3DRTYPE_BUFFER = 6,
+    WINED3DRTYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DRESOURCETYPE;
+#define WINED3DRTYPECOUNT (WINED3DRTYPE_BUFFER + 1)
+
+typedef enum _WINED3DPOOL {
+    WINED3DPOOL_DEFAULT = 0,
+    WINED3DPOOL_MANAGED = 1,
+    WINED3DPOOL_SYSTEMMEM = 2,
+    WINED3DPOOL_SCRATCH = 3,
+    WINED3DPOOL_FORCE_DWORD = 0x7fffffff
+} WINED3DPOOL;
+typedef enum _WINED3DQUERYTYPE {
+    WINED3DQUERYTYPE_VCACHE = 4,
+    WINED3DQUERYTYPE_RESOURCEMANAGER = 5,
+    WINED3DQUERYTYPE_VERTEXSTATS = 6,
+    WINED3DQUERYTYPE_EVENT = 8,
+    WINED3DQUERYTYPE_OCCLUSION = 9,
+    WINED3DQUERYTYPE_TIMESTAMP = 10,
+    WINED3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+    WINED3DQUERYTYPE_TIMESTAMPFREQ = 12,
+    WINED3DQUERYTYPE_PIPELINETIMINGS = 13,
+    WINED3DQUERYTYPE_INTERFACETIMINGS = 14,
+    WINED3DQUERYTYPE_VERTEXTIMINGS = 15,
+    WINED3DQUERYTYPE_PIXELTIMINGS = 16,
+    WINED3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+    WINED3DQUERYTYPE_CACHEUTILIZATION = 18
+} WINED3DQUERYTYPE;
+#define WINED3DISSUE_BEGIN (1 << 1)
+
+#define WINED3DISSUE_END (1 << 0)
+
+#define WINED3DGETDATA_FLUSH (1 << 0)
+
+typedef enum _WINED3DSTATEBLOCKTYPE {
+    WINED3DSBT_INIT = 0,
+    WINED3DSBT_ALL = 1,
+    WINED3DSBT_PIXELSTATE = 2,
+    WINED3DSBT_VERTEXSTATE = 3,
+    WINED3DSBT_RECORDED = 4,
+    WINED3DSBT_FORCE_DWORD = 0xffffffff
+} WINED3DSTATEBLOCKTYPE;
+typedef enum _WINED3DDECLMETHOD {
+    WINED3DDECLMETHOD_DEFAULT = 0,
+    WINED3DDECLMETHOD_PARTIALU = 1,
+    WINED3DDECLMETHOD_PARTIALV = 2,
+    WINED3DDECLMETHOD_CROSSUV = 3,
+    WINED3DDECLMETHOD_UV = 4,
+    WINED3DDECLMETHOD_LOOKUP = 5,
+    WINED3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} WINED3DDECLMETHOD;
+typedef enum _WINED3DDECLUSAGE {
+    WINED3DDECLUSAGE_POSITION = 0,
+    WINED3DDECLUSAGE_BLENDWEIGHT = 1,
+    WINED3DDECLUSAGE_BLENDINDICES = 2,
+    WINED3DDECLUSAGE_NORMAL = 3,
+    WINED3DDECLUSAGE_PSIZE = 4,
+    WINED3DDECLUSAGE_TEXCOORD = 5,
+    WINED3DDECLUSAGE_TANGENT = 6,
+    WINED3DDECLUSAGE_BINORMAL = 7,
+    WINED3DDECLUSAGE_TESSFACTOR = 8,
+    WINED3DDECLUSAGE_POSITIONT = 9,
+    WINED3DDECLUSAGE_COLOR = 10,
+    WINED3DDECLUSAGE_FOG = 11,
+    WINED3DDECLUSAGE_DEPTH = 12,
+    WINED3DDECLUSAGE_SAMPLE = 13
+} WINED3DDECLUSAGE;
+typedef enum _WINED3DSURFTYPE {
+    SURFACE_UNKNOWN = 0,
+    SURFACE_OPENGL = 1,
+    SURFACE_GDI = 2
+} WINED3DSURFTYPE;
+enum wined3d_sysval_semantic {
+    WINED3D_SV_DEPTH = 0xffffffff,
+    WINED3D_SV_TARGET0 = 0,
+    WINED3D_SV_TARGET1 = 1,
+    WINED3D_SV_TARGET2 = 2,
+    WINED3D_SV_TARGET3 = 3,
+    WINED3D_SV_TARGET4 = 4,
+    WINED3D_SV_TARGET5 = 5,
+    WINED3D_SV_TARGET6 = 6,
+    WINED3D_SV_TARGET7 = 7
+};
+
+#define WINED3DCOLORWRITEENABLE_RED (1 << 0)
+
+#define WINED3DCOLORWRITEENABLE_GREEN (1 << 1)
+
+#define WINED3DCOLORWRITEENABLE_BLUE (1 << 2)
+
+#define WINED3DCOLORWRITEENABLE_ALPHA (1 << 3)
+
+#define WINED3DADAPTER_DEFAULT (0)
+
+#define WINED3DENUM_NO_WHQL_LEVEL (2)
+
+#define WINED3DPRESENT_BACK_BUFFER_MAX (3)
+
+#define WINED3DTSS_TCI_PASSTHRU (0x0)
+
+#define WINED3DTSS_TCI_CAMERASPACENORMAL (0x10000)
+
+#define WINED3DTSS_TCI_CAMERASPACEPOSITION (0x20000)
+
+#define WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR (0x30000)
+
+#define WINED3DTSS_TCI_SPHEREMAP (0x40000)
+
+#define WINED3DTA_SELECTMASK (0xf)
+
+#define WINED3DTA_DIFFUSE (0x0)
+
+#define WINED3DTA_CURRENT (0x1)
+
+#define WINED3DTA_TEXTURE (0x2)
+
+#define WINED3DTA_TFACTOR (0x3)
+
+#define WINED3DTA_SPECULAR (0x4)
+
+#define WINED3DTA_TEMP (0x5)
+
+#define WINED3DTA_CONSTANT (0x6)
+
+#define WINED3DTA_COMPLEMENT (0x10)
+
+#define WINED3DTA_ALPHAREPLICATE (0x20)
+
+#define WINED3DPRESENTFLAG_LOCKABLE_BACKBUFFER (0x1)
+
+#define WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL (0x2)
+
+#define WINED3DPRESENTFLAG_DEVICECLIP (0x4)
+
+#define WINED3DPRESENTFLAG_VIDEO (0x10)
+
+#define WINED3DPRESENTFLAG_NOAUTOROTATE (0x20)
+
+#define WINED3DPRESENTFLAG_UNPRUNEDMODE (0x40)
+
+#define WINED3DDP_MAXTEXCOORD (8)
+
+#define WINED3DUSAGE_RENDERTARGET (0x1)
+
+#define WINED3DUSAGE_DEPTHSTENCIL (0x2)
+
+#define WINED3DUSAGE_WRITEONLY (0x8)
+
+#define WINED3DUSAGE_SOFTWAREPROCESSING (0x10)
+
+#define WINED3DUSAGE_DONOTCLIP (0x20)
+
+#define WINED3DUSAGE_POINTS (0x40)
+
+#define WINED3DUSAGE_RTPATCHES (0x80)
+
+#define WINED3DUSAGE_NPATCHES (0x100)
+
+#define WINED3DUSAGE_DYNAMIC (0x200)
+
+#define WINED3DUSAGE_AUTOGENMIPMAP (0x400)
+
+#define WINED3DUSAGE_DMAP (0x4000)
+
+#define WINED3DUSAGE_MASK (0x4fff)
+
+#define WINED3DUSAGE_STATICDECL (0x40000000)
+
+#define WINED3DUSAGE_OVERLAY (0x80000000)
+
+#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP (0x8000)
+
+#define WINED3DUSAGE_QUERY_FILTER (0x20000)
+
+#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x80000)
+
+#define WINED3DUSAGE_QUERY_SRGBREAD (0x10000)
+
+#define WINED3DUSAGE_QUERY_SRGBWRITE (0x40000)
+
+#define WINED3DUSAGE_QUERY_VERTEXTEXTURE (0x100000)
+
+#define WINED3DUSAGE_QUERY_WRAPANDMIP (0x200000)
+
+#define WINED3DUSAGE_QUERY_MASK (0x3f8000)
+
+#define WINED3DLOCK_READONLY (0x10)
+
+#define WINED3DLOCK_NOSYSLOCK (0x800)
+
+#define WINED3DLOCK_NOOVERWRITE (0x1000)
+
+#define WINED3DLOCK_DISCARD (0x2000)
+
+#define WINED3DLOCK_DONOTWAIT (0x4000)
+
+#define WINED3DLOCK_NO_DIRTY_UPDATE (0x8000)
+
+#define WINED3DPRESENT_RATE_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_ONE (0x1)
+
+#define WINED3DPRESENT_INTERVAL_TWO (0x2)
+
+#define WINED3DPRESENT_INTERVAL_THREE (0x4)
+
+#define WINED3DPRESENT_INTERVAL_FOUR (0x8)
+
+#define WINED3DPRESENT_INTERVAL_IMMEDIATE (0x80000000)
+
+#define WINED3DMAXUSERCLIPPLANES (32)
+
+#define WINED3DCLIPPLANE0 (1 << 0)
+
+#define WINED3DCLIPPLANE1 (1 << 1)
+
+#define WINED3DCLIPPLANE2 (1 << 2)
+
+#define WINED3DCLIPPLANE3 (1 << 3)
+
+#define WINED3DCLIPPLANE4 (1 << 4)
+
+#define WINED3DCLIPPLANE5 (1 << 5)
+
+#define WINED3DFVF_RESERVED0 (0x1)
+
+#define WINED3DFVF_POSITION_MASK (0x400e)
+
+#define WINED3DFVF_XYZ (0x2)
+
+#define WINED3DFVF_XYZRHW (0x4)
+
+#define WINED3DFVF_XYZB1 (0x6)
+
+#define WINED3DFVF_XYZB2 (0x8)
+
+#define WINED3DFVF_XYZB3 (0xa)
+
+#define WINED3DFVF_XYZB4 (0xc)
+
+#define WINED3DFVF_XYZB5 (0xe)
+
+#define WINED3DFVF_XYZW (0x4002)
+
+#define WINED3DFVF_NORMAL (0x10)
+
+#define WINED3DFVF_PSIZE (0x20)
+
+#define WINED3DFVF_DIFFUSE (0x40)
+
+#define WINED3DFVF_SPECULAR (0x80)
+
+#define WINED3DFVF_TEXCOUNT_MASK (0xf00)
+
+#define WINED3DFVF_TEXCOUNT_SHIFT (8)
+
+#define WINED3DFVF_TEX0 (0x0)
+
+#define WINED3DFVF_TEX1 (0x100)
+
+#define WINED3DFVF_TEX2 (0x200)
+
+#define WINED3DFVF_TEX3 (0x300)
+
+#define WINED3DFVF_TEX4 (0x400)
+
+#define WINED3DFVF_TEX5 (0x500)
+
+#define WINED3DFVF_TEX6 (0x600)
+
+#define WINED3DFVF_TEX7 (0x700)
+
+#define WINED3DFVF_TEX8 (0x800)
+
+#define WINED3DFVF_LASTBETA_UBYTE4 (0x1000)
+
+#define WINED3DFVF_LASTBETA_D3DCOLOR (0x8000)
+
+#define WINED3DFVF_RESERVED2 (0x6000)
+
+#define WINED3DFVF_TEXTUREFORMAT1 (3)
+
+#define WINED3DFVF_TEXTUREFORMAT2 (0)
+
+#define WINED3DFVF_TEXTUREFORMAT3 (1)
+
+#define WINED3DFVF_TEXTUREFORMAT4 (2)
+
+#define WINED3DFVF_TEXCOORDSIZE1(CoordIndex) (WINED3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE2(CoordIndex) (WINED3DFVF_TEXTUREFORMAT2)
+#define WINED3DFVF_TEXCOORDSIZE3(CoordIndex) (WINED3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE4(CoordIndex) (WINED3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define WINED3DCLEAR_TARGET (0x1)
+
+#define WINED3DCLEAR_ZBUFFER (0x2)
+
+#define WINED3DCLEAR_STENCIL (0x4)
+
+#define WINED3DSTREAMSOURCE_INDEXEDDATA (1 << 30)
+
+#define WINED3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define WINED3DSPD_IUNKNOWN (0x1)
+
+#define WINED3DCREATE_FPU_PRESERVE (0x2)
+
+#define WINED3DCREATE_PUREDEVICE (0x10)
+
+#define WINED3DCREATE_SOFTWARE_VERTEXPROCESSING (0x20)
+
+#define WINED3DCREATE_HARDWARE_VERTEXPROCESSING (0x40)
+
+#define WINED3DCREATE_MIXED_VERTEXPROCESSING (0x80)
+
+#define WINED3DCREATE_DISABLE_DRIVER_MANAGEMENT (0x100)
+
+#define WINED3DCREATE_ADAPTERGROUP_DEVICE (0x200)
+
+#define WINED3DDMAPSAMPLER (0x100)
+
+#define WINED3DVERTEXTEXTURESAMPLER0 (WINED3DDMAPSAMPLER + 1)
+
+#define WINED3DVERTEXTEXTURESAMPLER1 (WINED3DDMAPSAMPLER + 2)
+
+#define WINED3DVERTEXTEXTURESAMPLER2 (WINED3DDMAPSAMPLER + 3)
+
+#define WINED3DVERTEXTEXTURESAMPLER3 (WINED3DDMAPSAMPLER + 4)
+
+#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD (0x20)
+
+#define WINED3DCAPS3_LINEAR_TO_SRGB_PRESENTATION (0x80)
+
+#define WINED3DCAPS3_COPY_TO_VIDMEM (0x100)
+
+#define WINED3DCAPS3_COPY_TO_SYSTEMMEM (0x200)
+
+#define WINED3DCAPS3_RESERVED (0x8000001f)
+
+#define WINED3DDEVCAPS2_STREAMOFFSET (0x1)
+
+#define WINED3DDEVCAPS2_DMAPNPATCH (0x2)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSRTPATCH (0x4)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSNPATCH (0x8)
+
+#define WINED3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (0x10)
+
+#define WINED3DDEVCAPS2_PRESAMPLEDDMAPNPATCH (0x20)
+
+#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET (0x40)
+
+#define WINED3DDTCAPS_UBYTE4 (0x1)
+
+#define WINED3DDTCAPS_UBYTE4N (0x2)
+
+#define WINED3DDTCAPS_SHORT2N (0x4)
+
+#define WINED3DDTCAPS_SHORT4N (0x8)
+
+#define WINED3DDTCAPS_USHORT2N (0x10)
+
+#define WINED3DDTCAPS_USHORT4N (0x20)
+
+#define WINED3DDTCAPS_UDEC3 (0x40)
+
+#define WINED3DDTCAPS_DEC3N (0x80)
+
+#define WINED3DDTCAPS_FLOAT16_2 (0x100)
+
+#define WINED3DDTCAPS_FLOAT16_4 (0x200)
+
+#define WINED3DFVFCAPS_TEXCOORDCOUNTMASK (0xffff)
+
+#define WINED3DFVFCAPS_DONOTSTRIPELEMENTS (0x80000)
+
+#define WINED3DFVFCAPS_PSIZE (0x100000)
+
+#define WINED3DLINECAPS_TEXTURE (0x1)
+
+#define WINED3DLINECAPS_ZTEST (0x2)
+
+#define WINED3DLINECAPS_BLEND (0x4)
+
+#define WINED3DLINECAPS_ALPHACMP (0x8)
+
+#define WINED3DLINECAPS_FOG (0x10)
+
+#define WINED3DLINECAPS_ANTIALIAS (0x20)
+
+#define WINED3DMAX30SHADERINSTRUCTIONS (32768)
+
+#define WINED3DMIN30SHADERINSTRUCTIONS (512)
+
+#define WINED3DPBLENDCAPS_ZERO (0x1)
+
+#define WINED3DPBLENDCAPS_ONE (0x2)
+
+#define WINED3DPBLENDCAPS_SRCCOLOR (0x4)
+
+#define WINED3DPBLENDCAPS_INVSRCCOLOR (0x8)
+
+#define WINED3DPBLENDCAPS_SRCALPHA (0x10)
+
+#define WINED3DPBLENDCAPS_INVSRCALPHA (0x20)
+
+#define WINED3DPBLENDCAPS_DESTALPHA (0x40)
+
+#define WINED3DPBLENDCAPS_INVDESTALPHA (0x80)
+
+#define WINED3DPBLENDCAPS_DESTCOLOR (0x100)
+
+#define WINED3DPBLENDCAPS_INVDESTCOLOR (0x200)
+
+#define WINED3DPBLENDCAPS_SRCALPHASAT (0x400)
+
+#define WINED3DPBLENDCAPS_BOTHSRCALPHA (0x800)
+
+#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA (0x1000)
+
+#define WINED3DPBLENDCAPS_BLENDFACTOR (0x2000)
+
+#define WINED3DPCMPCAPS_NEVER (0x1)
+
+#define WINED3DPCMPCAPS_LESS (0x2)
+
+#define WINED3DPCMPCAPS_EQUAL (0x4)
+
+#define WINED3DPCMPCAPS_LESSEQUAL (0x8)
+
+#define WINED3DPCMPCAPS_GREATER (0x10)
+
+#define WINED3DPCMPCAPS_NOTEQUAL (0x20)
+
+#define WINED3DPCMPCAPS_GREATEREQUAL (0x40)
+
+#define WINED3DPCMPCAPS_ALWAYS (0x80)
+
+#define WINED3DPMISCCAPS_MASKZ (0x2)
+
+#define WINED3DPMISCCAPS_LINEPATTERNREP (0x4)
+
+#define WINED3DPMISCCAPS_CULLNONE (0x10)
+
+#define WINED3DPMISCCAPS_CULLCW (0x20)
+
+#define WINED3DPMISCCAPS_CULLCCW (0x40)
+
+#define WINED3DPMISCCAPS_COLORWRITEENABLE (0x80)
+
+#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS (0x100)
+
+#define WINED3DPMISCCAPS_CLIPTLVERTS (0x200)
+
+#define WINED3DPMISCCAPS_TSSARGTEMP (0x400)
+
+#define WINED3DPMISCCAPS_BLENDOP (0x800)
+
+#define WINED3DPMISCCAPS_NULLREFERENCE (0x1000)
+
+#define WINED3DPMISCCAPS_INDEPENDENTWRITEMASKS (0x4000)
+
+#define WINED3DPMISCCAPS_PERSTAGECONSTANT (0x8000)
+
+#define WINED3DPMISCCAPS_FOGANDSPECULARALPHA (0x10000)
+
+#define WINED3DPMISCCAPS_SEPARATEALPHABLEND (0x20000)
+
+#define WINED3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS (0x40000)
+
+#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING (0x80000)
+
+#define WINED3DPMISCCAPS_FOGVERTEXCLAMPED (0x100000)
+
+#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMTEMPS (32)
+
+#define WINED3DPS20_MIN_NUMTEMPS (12)
+
+#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS (512)
+
+#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS (96)
+
+#define WINED3DPS20CAPS_ARBITRARYSWIZZLE (0x1)
+
+#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS (0x2)
+
+#define WINED3DPS20CAPS_PREDICATION (0x4)
+
+#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT (0x8)
+
+#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (0x10)
+
+#define WINED3DPTADDRESSCAPS_WRAP (0x1)
+
+#define WINED3DPTADDRESSCAPS_MIRROR (0x2)
+
+#define WINED3DPTADDRESSCAPS_CLAMP (0x4)
+
+#define WINED3DPTADDRESSCAPS_BORDER (0x8)
+
+#define WINED3DPTADDRESSCAPS_INDEPENDENTUV (0x10)
+
+#define WINED3DPTADDRESSCAPS_MIRRORONCE (0x20)
+
+#define WINED3DSTENCILCAPS_KEEP (0x1)
+
+#define WINED3DSTENCILCAPS_ZERO (0x2)
+
+#define WINED3DSTENCILCAPS_REPLACE (0x4)
+
+#define WINED3DSTENCILCAPS_INCRSAT (0x8)
+
+#define WINED3DSTENCILCAPS_DECRSAT (0x10)
+
+#define WINED3DSTENCILCAPS_INVERT (0x20)
+
+#define WINED3DSTENCILCAPS_INCR (0x40)
+
+#define WINED3DSTENCILCAPS_DECR (0x80)
+
+#define WINED3DSTENCILCAPS_TWOSIDED (0x100)
+
+#define WINED3DTEXOPCAPS_DISABLE (0x1)
+
+#define WINED3DTEXOPCAPS_SELECTARG1 (0x2)
+
+#define WINED3DTEXOPCAPS_SELECTARG2 (0x4)
+
+#define WINED3DTEXOPCAPS_MODULATE (0x8)
+
+#define WINED3DTEXOPCAPS_MODULATE2X (0x10)
+
+#define WINED3DTEXOPCAPS_MODULATE4X (0x20)
+
+#define WINED3DTEXOPCAPS_ADD (0x40)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED (0x80)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED2X (0x100)
+
+#define WINED3DTEXOPCAPS_SUBTRACT (0x200)
+
+#define WINED3DTEXOPCAPS_ADDSMOOTH (0x400)
+
+#define WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA (0x800)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHA (0x1000)
+
+#define WINED3DTEXOPCAPS_BLENDFACTORALPHA (0x2000)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM (0x4000)
+
+#define WINED3DTEXOPCAPS_BLENDCURRENTALPHA (0x8000)
+
+#define WINED3DTEXOPCAPS_PREMODULATE (0x10000)
+
+#define WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR (0x20000)
+
+#define WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA (0x40000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR (0x80000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA (0x100000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAP (0x200000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE (0x400000)
+
+#define WINED3DTEXOPCAPS_DOTPRODUCT3 (0x800000)
+
+#define WINED3DTEXOPCAPS_MULTIPLYADD (0x1000000)
+
+#define WINED3DTEXOPCAPS_LERP (0x2000000)
+
+#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DVS20_MAX_NUMTEMPS (32)
+
+#define WINED3DVS20_MIN_NUMTEMPS (12)
+
+#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DVS20_MIN_STATICFLOWCONTROLDEPTH (1)
+
+#define WINED3DVS20CAPS_PREDICATION (0x1)
+
+#define WINED3DCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINED3DCAPS2_FULLSCREENGAMMA (0x20000)
+
+#define WINED3DCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINED3DCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINED3DCAPS2_RESERVED (0x2000000)
+
+#define WINED3DCAPS2_CANMANAGERESOURCE (0x10000000)
+
+#define WINED3DCAPS2_DYNAMICTEXTURES (0x20000000)
+
+#define WINED3DCAPS2_CANAUTOGENMIPMAP (0x40000000)
+
+#define WINED3DPRASTERCAPS_DITHER (0x1)
+
+#define WINED3DPRASTERCAPS_ROP2 (0x2)
+
+#define WINED3DPRASTERCAPS_XOR (0x4)
+
+#define WINED3DPRASTERCAPS_PAT (0x8)
+
+#define WINED3DPRASTERCAPS_ZTEST (0x10)
+
+#define WINED3DPRASTERCAPS_SUBPIXEL (0x20)
+
+#define WINED3DPRASTERCAPS_SUBPIXELX (0x40)
+
+#define WINED3DPRASTERCAPS_FOGVERTEX (0x80)
+
+#define WINED3DPRASTERCAPS_FOGTABLE (0x100)
+
+#define WINED3DPRASTERCAPS_STIPPLE (0x200)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTDEPENDENT (0x400)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT (0x800)
+
+#define WINED3DPRASTERCAPS_ANTIALIASEDGES (0x1000)
+
+#define WINED3DPRASTERCAPS_MIPMAPLODBIAS (0x2000)
+
+#define WINED3DPRASTERCAPS_ZBIAS (0x4000)
+
+#define WINED3DPRASTERCAPS_ZBUFFERLESSHSR (0x8000)
+
+#define WINED3DPRASTERCAPS_FOGRANGE (0x10000)
+
+#define WINED3DPRASTERCAPS_ANISOTROPY (0x20000)
+
+#define WINED3DPRASTERCAPS_WBUFFER (0x40000)
+
+#define WINED3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT (0x80000)
+
+#define WINED3DPRASTERCAPS_WFOG (0x100000)
+
+#define WINED3DPRASTERCAPS_ZFOG (0x200000)
+
+#define WINED3DPRASTERCAPS_COLORPERSPECTIVE (0x400000)
+
+#define WINED3DPRASTERCAPS_SCISSORTEST (0x1000000)
+
+#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS (0x2000000)
+
+#define WINED3DPRASTERCAPS_DEPTHBIAS (0x4000000)
+
+#define WINED3DPRASTERCAPS_MULTISAMPLE_TOGGLE (0x8000000)
+
+#define WINED3DPSHADECAPS_COLORFLATMONO (0x1)
+
+#define WINED3DPSHADECAPS_COLORFLATRGB (0x2)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDMONO (0x4)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDRGB (0x8)
+
+#define WINED3DPSHADECAPS_COLORPHONGMONO (0x10)
+
+#define WINED3DPSHADECAPS_COLORPHONGRGB (0x20)
+
+#define WINED3DPSHADECAPS_SPECULARFLATMONO (0x40)
+
+#define WINED3DPSHADECAPS_SPECULARFLATRGB (0x80)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDMONO (0x100)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB (0x200)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGMONO (0x400)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGRGB (0x800)
+
+#define WINED3DPSHADECAPS_ALPHAFLATBLEND (0x1000)
+
+#define WINED3DPSHADECAPS_ALPHAFLATSTIPPLED (0x2000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND (0x4000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDSTIPPLED (0x8000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGBLEND (0x10000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGSTIPPLED (0x20000)
+
+#define WINED3DPSHADECAPS_FOGFLAT (0x40000)
+
+#define WINED3DPSHADECAPS_FOGGOURAUD (0x80000)
+
+#define WINED3DPSHADECAPS_FOGPHONG (0x100000)
+
+#define WINED3DPTEXTURECAPS_PERSPECTIVE (0x1)
+
+#define WINED3DPTEXTURECAPS_POW2 (0x2)
+
+#define WINED3DPTEXTURECAPS_ALPHA (0x4)
+
+#define WINED3DPTEXTURECAPS_TRANSPARENCY (0x8)
+
+#define WINED3DPTEXTURECAPS_BORDER (0x10)
+
+#define WINED3DPTEXTURECAPS_SQUAREONLY (0x20)
+
+#define WINED3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE (0x40)
+
+#define WINED3DPTEXTURECAPS_ALPHAPALETTE (0x80)
+
+#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL (0x100)
+
+#define WINED3DPTEXTURECAPS_PROJECTED (0x400)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP (0x800)
+
+#define WINED3DPTEXTURECAPS_COLORKEYBLEND (0x1000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP (0x2000)
+
+#define WINED3DPTEXTURECAPS_MIPMAP (0x4000)
+
+#define WINED3DPTEXTURECAPS_MIPVOLUMEMAP (0x8000)
+
+#define WINED3DPTEXTURECAPS_MIPCUBEMAP (0x10000)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP_POW2 (0x20000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP_POW2 (0x40000)
+
+#define WINED3DPTEXTURECAPS_NOPROJECTEDBUMPENV (0x200000)
+
+#define WINED3DPTFILTERCAPS_NEAREST (0x1)
+
+#define WINED3DPTFILTERCAPS_LINEAR (0x2)
+
+#define WINED3DPTFILTERCAPS_MIPNEAREST (0x4)
+
+#define WINED3DPTFILTERCAPS_MIPLINEAR (0x8)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST (0x10)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR (0x20)
+
+#define WINED3DPTFILTERCAPS_MINFPOINT (0x100)
+
+#define WINED3DPTFILTERCAPS_MINFLINEAR (0x200)
+
+#define WINED3DPTFILTERCAPS_MINFANISOTROPIC (0x400)
+
+#define WINED3DPTFILTERCAPS_MIPFPOINT (0x10000)
+
+#define WINED3DPTFILTERCAPS_MIPFLINEAR (0x20000)
+
+#define WINED3DPTFILTERCAPS_MAGFPOINT (0x1000000)
+
+#define WINED3DPTFILTERCAPS_MAGFLINEAR (0x2000000)
+
+#define WINED3DPTFILTERCAPS_MAGFANISOTROPIC (0x4000000)
+
+#define WINED3DPTFILTERCAPS_MAGFPYRAMIDALQUAD (0x8000000)
+
+#define WINED3DPTFILTERCAPS_MAGFGAUSSIANQUAD (0x10000000)
+
+#define WINED3DVTXPCAPS_TEXGEN (0x1)
+
+#define WINED3DVTXPCAPS_MATERIALSOURCE7 (0x2)
+
+#define WINED3DVTXPCAPS_VERTEXFOG (0x4)
+
+#define WINED3DVTXPCAPS_DIRECTIONALLIGHTS (0x8)
+
+#define WINED3DVTXPCAPS_POSITIONALLIGHTS (0x10)
+
+#define WINED3DVTXPCAPS_LOCALVIEWER (0x20)
+
+#define WINED3DVTXPCAPS_TWEENING (0x40)
+
+#define WINED3DVTXPCAPS_TEXGEN_SPHEREMAP (0x100)
+
+#define WINED3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER (0x200)
+
+#define WINED3DCURSORCAPS_COLOR (0x1)
+
+#define WINED3DCURSORCAPS_LOWRES (0x2)
+
+#define WINED3DDEVCAPS_FLOATTLVERTEX (0x1)
+
+#define WINED3DDEVCAPS_SORTINCREASINGZ (0x2)
+
+#define WINED3DDEVCAPS_SORTDECREASINGZ (0x4)
+
+#define WINED3DDEVCAPS_SORTEXACT (0x8)
+
+#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY (0x10)
+
+#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY (0x20)
+
+#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY (0x40)
+
+#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY (0x80)
+
+#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY (0x100)
+
+#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY (0x200)
+
+#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX (0x400)
+
+#define WINED3DDEVCAPS_CANRENDERAFTERFLIP (0x800)
+
+#define WINED3DDEVCAPS_TEXTURENONLOCALVIDMEM (0x1000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2 (0x2000)
+
+#define WINED3DDEVCAPS_SEPARATETEXTUREMEMORIES (0x4000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX (0x8000)
+
+#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT (0x10000)
+
+#define WINED3DDEVCAPS_CANBLTSYSTONONLOCAL (0x20000)
+
+#define WINED3DDEVCAPS_HWRASTERIZATION (0x80000)
+
+#define WINED3DDEVCAPS_PUREDEVICE (0x100000)
+
+#define WINED3DDEVCAPS_QUINTICRTPATCHES (0x200000)
+
+#define WINED3DDEVCAPS_RTPATCHES (0x400000)
+
+#define WINED3DDEVCAPS_RTPATCHHANDLEZERO (0x800000)
+
+#define WINED3DDEVCAPS_NPATCHES (0x1000000)
+
+#define WINEDDBLTFX_ARITHSTRETCHY (0x1)
+
+#define WINEDDBLTFX_MIRRORLEFTRIGHT (0x2)
+
+#define WINEDDBLTFX_MIRRORUPDOWN (0x4)
+
+#define WINEDDBLTFX_NOTEARING (0x8)
+
+#define WINEDDBLTFX_ROTATE180 (0x10)
+
+#define WINEDDBLTFX_ROTATE270 (0x20)
+
+#define WINEDDBLTFX_ROTATE90 (0x40)
+
+#define WINEDDBLTFX_ZBUFFERRANGE (0x80)
+
+#define WINEDDBLTFX_ZBUFFERBASEDEST (0x100)
+
+#define WINEDDBLT_ALPHADEST (0x1)
+
+#define WINEDDBLT_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDBLT_ALPHADESTNEG (0x4)
+
+#define WINEDDBLT_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDBLT_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDBLT_ALPHASRC (0x20)
+
+#define WINEDDBLT_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDBLT_ALPHASRCNEG (0x80)
+
+#define WINEDDBLT_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDBLT_ASYNC (0x200)
+
+#define WINEDDBLT_COLORFILL (0x400)
+
+#define WINEDDBLT_DDFX (0x800)
+
+#define WINEDDBLT_DDROPS (0x1000)
+
+#define WINEDDBLT_KEYDEST (0x2000)
+
+#define WINEDDBLT_KEYDESTOVERRIDE (0x4000)
+
+#define WINEDDBLT_KEYSRC (0x8000)
+
+#define WINEDDBLT_KEYSRCOVERRIDE (0x10000)
+
+#define WINEDDBLT_ROP (0x20000)
+
+#define WINEDDBLT_ROTATIONANGLE (0x40000)
+
+#define WINEDDBLT_ZBUFFER (0x80000)
+
+#define WINEDDBLT_ZBUFFERDESTCONSTOVERRIDE (0x100000)
+
+#define WINEDDBLT_ZBUFFERDESTOVERRIDE (0x200000)
+
+#define WINEDDBLT_ZBUFFERSRCCONSTOVERRIDE (0x400000)
+
+#define WINEDDBLT_ZBUFFERSRCOVERRIDE (0x800000)
+
+#define WINEDDBLT_WAIT (0x1000000)
+
+#define WINEDDBLT_DEPTHFILL (0x2000000)
+
+#define WINEDDBLT_DONOTWAIT (0x8000000)
+
+#define WINEDDBLTFAST_NOCOLORKEY (0x0)
+
+#define WINEDDBLTFAST_SRCCOLORKEY (0x1)
+
+#define WINEDDBLTFAST_DESTCOLORKEY (0x2)
+
+#define WINEDDBLTFAST_WAIT (0x10)
+
+#define WINEDDBLTFAST_DONOTWAIT (0x20)
+
+#define WINEDDSD_CAPS (0x1)
+
+#define WINEDDSD_HEIGHT (0x2)
+
+#define WINEDDSD_WIDTH (0x4)
+
+#define WINEDDSD_PITCH (0x8)
+
+#define WINEDDSD_BACKBUFFERCOUNT (0x20)
+
+#define WINEDDSD_ZBUFFERBITDEPTH (0x40)
+
+#define WINEDDSD_ALPHABITDEPTH (0x80)
+
+#define WINEDDSD_LPSURFACE (0x800)
+
+#define WINEDDSD_PIXELFORMAT (0x1000)
+
+#define WINEDDSD_CKDESTOVERLAY (0x2000)
+
+#define WINEDDSD_CKDESTBLT (0x4000)
+
+#define WINEDDSD_CKSRCOVERLAY (0x8000)
+
+#define WINEDDSD_CKSRCBLT (0x10000)
+
+#define WINEDDSD_MIPMAPCOUNT (0x20000)
+
+#define WINEDDSD_REFRESHRATE (0x40000)
+
+#define WINEDDSD_LINEARSIZE (0x80000)
+
+#define WINEDDSD_TEXTURESTAGE (0x100000)
+
+#define WINEDDSD_FVF (0x200000)
+
+#define WINEDDSD_SRCVBHANDLE (0x400000)
+
+#define WINEDDSD_ALL (0x7ff9ee)
+
+#define WINEDDCKEY_COLORSPACE (0x1)
+
+#define WINEDDCKEY_DESTBLT (0x2)
+
+#define WINEDDCKEY_DESTOVERLAY (0x4)
+
+#define WINEDDCKEY_SRCBLT (0x8)
+
+#define WINEDDCKEY_SRCOVERLAY (0x10)
+
+#define WINEDDGBS_CANBLT (0x1)
+
+#define WINEDDGBS_ISBLTDONE (0x2)
+
+#define WINEDDGFS_CANFLIP (0x1)
+
+#define WINEDDGFS_ISFLIPDONE (0x2)
+
+#define WINEDDFLIP_WAIT (0x1)
+
+#define WINEDDFLIP_EVEN (0x2)
+
+#define WINEDDFLIP_ODD (0x4)
+
+#define WINEDDFLIP_NOVSYNC (0x8)
+
+#define WINEDDFLIP_STEREO (0x10)
+
+#define WINEDDFLIP_DONOTWAIT (0x20)
+
+#define WINEDDFLIP_INTERVAL2 (0x2000000)
+
+#define WINEDDFLIP_INTERVAL3 (0x3000000)
+
+#define WINEDDFLIP_INTERVAL4 (0x4000000)
+
+#define WINEDDOVER_ALPHADEST (0x1)
+
+#define WINEDDOVER_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDOVER_ALPHADESTNEG (0x4)
+
+#define WINEDDOVER_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDOVER_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDOVER_ALPHASRC (0x20)
+
+#define WINEDDOVER_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDOVER_ALPHASRCNEG (0x80)
+
+#define WINEDDOVER_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDOVER_HIDE (0x200)
+
+#define WINEDDOVER_KEYDEST (0x400)
+
+#define WINEDDOVER_KEYDESTOVERRIDE (0x800)
+
+#define WINEDDOVER_KEYSRC (0x1000)
+
+#define WINEDDOVER_KEYSRCOVERRIDE (0x2000)
+
+#define WINEDDOVER_SHOW (0x4000)
+
+#define WINEDDOVER_ADDDIRTYRECT (0x8000)
+
+#define WINEDDOVER_REFRESHDIRTYRECTS (0x10000)
+
+#define WINEDDOVER_REFRESHALL (0x20000)
+
+#define WINEDDOVER_DDFX (0x80000)
+
+#define WINEDDOVER_AUTOFLIP (0x100000)
+
+#define WINEDDOVER_BOB (0x200000)
+
+#define WINEDDOVER_OVERRIDEBOBWEAVE (0x400000)
+
+#define WINEDDOVER_INTERLEAVED (0x800000)
+
+#define WINEDDSCAPS_RESERVED1 (0x1)
+
+#define WINEDDSCAPS_ALPHA (0x2)
+
+#define WINEDDSCAPS_BACKBUFFER (0x4)
+
+#define WINEDDSCAPS_COMPLEX (0x8)
+
+#define WINEDDSCAPS_FLIP (0x10)
+
+#define WINEDDSCAPS_FRONTBUFFER (0x20)
+
+#define WINEDDSCAPS_OFFSCREENPLAIN (0x40)
+
+#define WINEDDSCAPS_OVERLAY (0x80)
+
+#define WINEDDSCAPS_PALETTE (0x100)
+
+#define WINEDDSCAPS_PRIMARYSURFACE (0x200)
+
+#define WINEDDSCAPS_PRIMARYSURFACELEFT (0x400)
+
+#define WINEDDSCAPS_SYSTEMMEMORY (0x800)
+
+#define WINEDDSCAPS_TEXTURE (0x1000)
+
+#define WINEDDSCAPS_3DDEVICE (0x2000)
+
+#define WINEDDSCAPS_VIDEOMEMORY (0x4000)
+
+#define WINEDDSCAPS_VISIBLE (0x8000)
+
+#define WINEDDSCAPS_WRITEONLY (0x10000)
+
+#define WINEDDSCAPS_ZBUFFER (0x20000)
+
+#define WINEDDSCAPS_OWNDC (0x40000)
+
+#define WINEDDSCAPS_LIVEVIDEO (0x80000)
+
+#define WINEDDSCAPS_HWCODEC (0x100000)
+
+#define WINEDDSCAPS_MODEX (0x200000)
+
+#define WINEDDSCAPS_MIPMAP (0x400000)
+
+#define WINEDDSCAPS_RESERVED2 (0x800000)
+
+#define WINEDDSCAPS_ALLOCONLOAD (0x4000000)
+
+#define WINEDDSCAPS_VIDEOPORT (0x8000000)
+
+#define WINEDDSCAPS_LOCALVIDMEM (0x10000000)
+
+#define WINEDDSCAPS_NONLOCALVIDMEM (0x20000000)
+
+#define WINEDDSCAPS_STANDARDVGAMODE (0x40000000)
+
+#define WINEDDSCAPS_OPTIMIZED (0x80000000)
+
+#define WINEDDCKEYCAPS_DESTBLT (0x1)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACE (0x2)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACEYUV (0x4)
+
+#define WINEDDCKEYCAPS_DESTBLTYUV (0x8)
+
+#define WINEDDCKEYCAPS_DESTOVERLAY (0x10)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACE (0x20)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACEYUV (0x40)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYONEACTIVE (0x80)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYYUV (0x100)
+
+#define WINEDDCKEYCAPS_SRCBLT (0x200)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACE (0x400)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACEYUV (0x800)
+
+#define WINEDDCKEYCAPS_SRCBLTYUV (0x1000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAY (0x2000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACE (0x4000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACEYUV (0x8000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYONEACTIVE (0x10000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYYUV (0x20000)
+
+#define WINEDDCKEYCAPS_NOCOSTOVERLAY (0x40000)
+
+#define WINEDDFXCAPS_BLTALPHA (0x1)
+
+#define WINEDDFXCAPS_OVERLAYALPHA (0x4)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHYN (0x10)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHY (0x20)
+
+#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT (0x40)
+
+#define WINEDDFXCAPS_BLTMIRRORUPDOWN (0x80)
+
+#define WINEDDFXCAPS_BLTROTATION (0x100)
+
+#define WINEDDFXCAPS_BLTROTATION90 (0x200)
+
+#define WINEDDFXCAPS_BLTSHRINKX (0x400)
+
+#define WINEDDFXCAPS_BLTSHRINKXN (0x800)
+
+#define WINEDDFXCAPS_BLTSHRINKY (0x1000)
+
+#define WINEDDFXCAPS_BLTSHRINKYN (0x2000)
+
+#define WINEDDFXCAPS_BLTSTRETCHX (0x4000)
+
+#define WINEDDFXCAPS_BLTSTRETCHXN (0x8000)
+
+#define WINEDDFXCAPS_BLTSTRETCHY (0x10000)
+
+#define WINEDDFXCAPS_BLTSTRETCHYN (0x20000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHY (0x40000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHYN (0x8)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKX (0x80000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKXN (0x100000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKY (0x200000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKYN (0x400000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHX (0x800000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHXN (0x1000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHY (0x2000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHYN (0x4000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORLEFTRIGHT (0x8000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORUPDOWN (0x10000000)
+
+#define WINEDDCAPS_3D (0x1)
+
+#define WINEDDCAPS_ALIGNBOUNDARYDEST (0x2)
+
+#define WINEDDCAPS_ALIGNSIZEDEST (0x4)
+
+#define WINEDDCAPS_ALIGNBOUNDARYSRC (0x8)
+
+#define WINEDDCAPS_ALIGNSIZESRC (0x10)
+
+#define WINEDDCAPS_ALIGNSTRIDE (0x20)
+
+#define WINEDDCAPS_BLT (0x40)
+
+#define WINEDDCAPS_BLTQUEUE (0x80)
+
+#define WINEDDCAPS_BLTFOURCC (0x100)
+
+#define WINEDDCAPS_BLTSTRETCH (0x200)
+
+#define WINEDDCAPS_GDI (0x400)
+
+#define WINEDDCAPS_OVERLAY (0x800)
+
+#define WINEDDCAPS_OVERLAYCANTCLIP (0x1000)
+
+#define WINEDDCAPS_OVERLAYFOURCC (0x2000)
+
+#define WINEDDCAPS_OVERLAYSTRETCH (0x4000)
+
+#define WINEDDCAPS_PALETTE (0x8000)
+
+#define WINEDDCAPS_PALETTEVSYNC (0x10000)
+
+#define WINEDDCAPS_READSCANLINE (0x20000)
+
+#define WINEDDCAPS_STEREOVIEW (0x40000)
+
+#define WINEDDCAPS_VBI (0x80000)
+
+#define WINEDDCAPS_ZBLTS (0x100000)
+
+#define WINEDDCAPS_ZOVERLAYS (0x200000)
+
+#define WINEDDCAPS_COLORKEY (0x400000)
+
+#define WINEDDCAPS_ALPHA (0x800000)
+
+#define WINEDDCAPS_COLORKEYHWASSIST (0x1000000)
+
+#define WINEDDCAPS_NOHARDWARE (0x2000000)
+
+#define WINEDDCAPS_BLTCOLORFILL (0x4000000)
+
+#define WINEDDCAPS_BANKSWITCHED (0x8000000)
+
+#define WINEDDCAPS_BLTDEPTHFILL (0x10000000)
+
+#define WINEDDCAPS_CANCLIP (0x20000000)
+
+#define WINEDDCAPS_CANCLIPSTRETCHED (0x40000000)
+
+#define WINEDDCAPS_CANBLTSYSMEM (0x80000000)
+
+#define WINEDDCAPS2_CERTIFIED (0x1)
+
+#define WINEDDCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINEDDCAPS2_VIDEOPORT (0x4)
+
+#define WINEDDCAPS2_AUTOFLIPOVERLAY (0x8)
+
+#define WINEDDCAPS2_CANBOBINTERLEAVED (0x10)
+
+#define WINEDDCAPS2_CANBOBNONINTERLEAVED (0x20)
+
+#define WINEDDCAPS2_COLORCONTROLOVERLAY (0x40)
+
+#define WINEDDCAPS2_COLORCONTROLPRIMARY (0x80)
+
+#define WINEDDCAPS2_CANDROPZ16BIT (0x100)
+
+#define WINEDDCAPS2_NONLOCALVIDMEM (0x200)
+
+#define WINEDDCAPS2_NONLOCALVIDMEMCAPS (0x400)
+
+#define WINEDDCAPS2_NOPAGELOCKREQUIRED (0x800)
+
+#define WINEDDCAPS2_WIDESURFACES (0x1000)
+
+#define WINEDDCAPS2_CANFLIPODDEVEN (0x2000)
+
+#define WINEDDCAPS2_CANBOBHARDWARE (0x4000)
+
+#define WINEDDCAPS2_COPYFOURCC (0x8000)
+
+#define WINEDDCAPS2_PRIMARYGAMMA (0x20000)
+
+#define WINEDDCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINEDDCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINEDDCAPS2_FLIPINTERVAL (0x200000)
+
+#define WINEDDCAPS2_FLIPNOVSYNC (0x400000)
+
+#define WINEDDCAPS2_CANMANAGETEXTURE (0x800000)
+
+#define WINEDDCAPS2_TEXMANINNONLOCALVIDMEM (0x1000000)
+
+#define WINEDDCAPS2_STEREO (0x2000000)
+
+#define WINEDDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL (0x4000000)
+
+#define WINEDDPCAPS_4BIT (0x1)
+
+#define WINEDDPCAPS_8BITENTRIES (0x2)
+
+#define WINEDDPCAPS_8BIT (0x4)
+
+#define WINEDDPCAPS_INITIALIZE (0x8)
+
+#define WINEDDPCAPS_PRIMARYSURFACE (0x10)
+
+#define WINEDDPCAPS_PRIMARYSURFACELEFT (0x20)
+
+#define WINEDDPCAPS_ALLOW256 (0x40)
+
+#define WINEDDPCAPS_VSYNC (0x80)
+
+#define WINEDDPCAPS_1BIT (0x100)
+
+#define WINEDDPCAPS_2BIT (0x200)
+
+#define WINEDDPCAPS_ALPHA (0x400)
+
+typedef struct _WINED3DDISPLAYMODE {
+    UINT Width;
+    UINT Height;
+    UINT RefreshRate;
+    WINED3DFORMAT Format;
+} WINED3DDISPLAYMODE;
+typedef enum _WINED3DSCANLINEORDERING {
+  WINED3DSCANLINEORDERING_UNKNOWN    = 0,
+  WINED3DSCANLINEORDERING_PROGRESSIVE   = 1,
+  WINED3DSCANLINEORDERING_INTERLACED    = 2
+} WINED3DSCANLINEORDERING;
+typedef struct _WINED3DDISPLAYMODEEX {
+    UINT Size;
+    UINT Width;
+    UINT Height;
+    UINT RefreshRate;
+    WINED3DFORMAT Format;
+    WINED3DSCANLINEORDERING ScanLineOrdering;
+} WINED3DDISPLAYMODEEX;
+typedef enum _WINED3DDISPLAYROTATION {
+  WINED3DDISPLAYROTATION_IDENTITY   = 1,
+  WINED3DDISPLAYROTATION_90         = 2,
+  WINED3DDISPLAYROTATION_180        = 3,
+  WINED3DDISPLAYROTATION_270        = 4
+} WINED3DDISPLAYROTATION;
+typedef struct _WINED3DCOLORVALUE {
+    float r;
+    float g;
+    float b;
+    float a;
+} WINED3DCOLORVALUE;
+typedef struct _WINED3DVECTOR {
+    float x;
+    float y;
+    float z;
+} WINED3DVECTOR;
+typedef struct _WINED3DMATRIX {
+    union {
+        struct {
+            float _11;
+            float _12;
+            float _13;
+            float _14;
+            float _21;
+            float _22;
+            float _23;
+            float _24;
+            float _31;
+            float _32;
+            float _33;
+            float _34;
+            float _41;
+            float _42;
+            float _43;
+            float _44;
+        } s;
+        float m[4][4];
+    } u;
+} WINED3DMATRIX;
+typedef struct _WINED3DRECT {
+    LONG x1;
+    LONG y1;
+    LONG x2;
+    LONG y2;
+} WINED3DRECT;
+typedef struct _WINED3DLIGHT {
+    WINED3DLIGHTTYPE Type;
+    WINED3DCOLORVALUE Diffuse;
+    WINED3DCOLORVALUE Specular;
+    WINED3DCOLORVALUE Ambient;
+    WINED3DVECTOR Position;
+    WINED3DVECTOR Direction;
+    float Range;
+    float Falloff;
+    float Attenuation0;
+    float Attenuation1;
+    float Attenuation2;
+    float Theta;
+    float Phi;
+} WINED3DLIGHT;
+typedef struct _WINED3DMATERIAL {
+    WINED3DCOLORVALUE Diffuse;
+    WINED3DCOLORVALUE Ambient;
+    WINED3DCOLORVALUE Specular;
+    WINED3DCOLORVALUE Emissive;
+    float Power;
+} WINED3DMATERIAL;
+typedef struct _WINED3DVIEWPORT {
+    DWORD X;
+    DWORD Y;
+    DWORD Width;
+    DWORD Height;
+    float MinZ;
+    float MaxZ;
+} WINED3DVIEWPORT;
+typedef struct _WINED3DGAMMARAMP {
+    WORD red[256];
+    WORD green[256];
+    WORD blue[256];
+} WINED3DGAMMARAMP;
+typedef struct _WINED3DLINEPATTERN {
+    WORD wRepeatFactor;
+    WORD wLinePattern;
+} WINED3DLINEPATTERN;
+typedef struct _WINEDD3DRECTPATCH_INFO {
+    UINT StartVertexOffsetWidth;
+    UINT StartVertexOffsetHeight;
+    UINT Width;
+    UINT Height;
+    UINT Stride;
+    WINED3DBASISTYPE Basis;
+    WINED3DDEGREETYPE Degree;
+} WINED3DRECTPATCH_INFO;
+typedef struct _WINED3DTRIPATCH_INFO {
+    UINT StartVertexOffset;
+    UINT NumVertices;
+    WINED3DBASISTYPE Basis;
+    WINED3DDEGREETYPE Degree;
+} WINED3DTRIPATCH_INFO;
+typedef struct _WINED3DADAPTER_IDENTIFIER {
+    char *driver;
+    UINT driver_size;
+    char *description;
+    UINT description_size;
+    char *device_name;
+    UINT device_name_size;
+    LARGE_INTEGER driver_version;
+    DWORD vendor_id;
+    DWORD device_id;
+    DWORD subsystem_id;
+    DWORD revision;
+    GUID device_identifier;
+    DWORD whql_level;
+    LUID adapter_luid;
+    SIZE_T video_memory;
+} WINED3DADAPTER_IDENTIFIER;
+typedef struct _WINED3DPRESENT_PARAMETERS {
+    UINT BackBufferWidth;
+    UINT BackBufferHeight;
+    WINED3DFORMAT BackBufferFormat;
+    UINT BackBufferCount;
+    WINED3DMULTISAMPLE_TYPE MultiSampleType;
+    DWORD MultiSampleQuality;
+    WINED3DSWAPEFFECT SwapEffect;
+    HWND hDeviceWindow;
+    BOOL Windowed;
+    BOOL EnableAutoDepthStencil;
+    WINED3DFORMAT AutoDepthStencilFormat;
+    DWORD Flags;
+    UINT FullScreen_RefreshRateInHz;
+    UINT PresentationInterval;
+    BOOL AutoRestoreDisplayMode;
+#ifdef VBOX_WITH_WDDM
+    struct VBOXUHGSMI *pHgsmi;
+#endif
+} WINED3DPRESENT_PARAMETERS;
+typedef struct _WINED3DSURFACE_DESC {
+    WINED3DFORMAT format;
+    WINED3DRESOURCETYPE resource_type;
+    DWORD usage;
+    WINED3DPOOL pool;
+    UINT size;
+    WINED3DMULTISAMPLE_TYPE multisample_type;
+    DWORD multisample_quality;
+    UINT width;
+    UINT height;
+} WINED3DSURFACE_DESC;
+typedef struct _WINED3DVOLUME_DESC {
+    WINED3DFORMAT Format;
+    WINED3DRESOURCETYPE Type;
+    DWORD Usage;
+    WINED3DPOOL Pool;
+    UINT Size;
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+} WINED3DVOLUME_DESC;
+typedef struct _WINED3DCLIPSTATUS {
+    DWORD ClipUnion;
+    DWORD ClipIntersection;
+} WINED3DCLIPSTATUS;
+typedef struct _WINED3DVERTEXELEMENT {
+    WINED3DFORMAT format;
+    WORD input_slot;
+    WORD offset;
+    UINT output_slot;
+    BYTE method;
+    BYTE usage;
+    BYTE usage_idx;
+} WINED3DVERTEXELEMENT;
+typedef struct _WINED3DDEVICE_CREATION_PARAMETERS {
+    UINT AdapterOrdinal;
+    WINED3DDEVTYPE DeviceType;
+    HWND hFocusWindow;
+    DWORD BehaviorFlags;
+} WINED3DDEVICE_CREATION_PARAMETERS;
+typedef struct _WINED3DDEVINFO_BANDWIDTHTIMINGS {
+    float MaxBandwidthUtilized;
+    float FrontEndUploadMemoryUtilizedPercent;
+    float VertexRateUtilizedPercent;
+    float TriangleSetupRateUtilizedPercent;
+    float FillRateUtilizedPercent;
+} WINED3DDEVINFO_BANDWIDTHTIMINGS;
+typedef struct _WINED3DDEVINFO_CACHEUTILIZATION {
+    float TextureCacheHitRate;
+    float PostTransformVertexCacheHitRate;
+} WINED3DDEVINFO_CACHEUTILIZATION;
+typedef struct _WINED3DDEVINFO_INTERFACETIMINGS {
+    float WaitingForGPUToUseApplicationResourceTimePercent;
+    float WaitingForGPUToAcceptMoreCommandsTimePercent;
+    float WaitingForGPUToStayWithinLatencyTimePercent;
+    float WaitingForGPUExclusiveResourceTimePercent;
+    float WaitingForGPUOtherTimePercent;
+} WINED3DDEVINFO_INTERFACETIMINGS;
+typedef struct _WINED3DDEVINFO_PIPELINETIMINGS {
+    float VertexProcessingTimePercent;
+    float PixelProcessingTimePercent;
+    float OtherGPUProcessingTimePercent;
+    float GPUIdleTimePercent;
+} WINED3DDEVINFO_PIPELINETIMINGS;
+typedef struct _WINED3DDEVINFO_STAGETIMINGS {
+    float MemoryProcessingPercent;
+    float ComputationProcessingPercent;
+} WINED3DDEVINFO_STAGETIMINGS;
+typedef struct _WINED3DRASTER_STATUS {
+    BOOL InVBlank;
+    UINT ScanLine;
+} WINED3DRASTER_STATUS;
+typedef struct WINED3DRESOURCESTATS {
+    BOOL bThrashing;
+    DWORD ApproxBytesDownloaded;
+    DWORD NumEvicts;
+    DWORD NumVidCreates;
+    DWORD LastPri;
+    DWORD NumUsed;
+    DWORD NumUsedInVidMem;
+    DWORD WorkingSet;
+    DWORD WorkingSetBytes;
+    DWORD TotalManaged;
+    DWORD TotalBytes;
+} WINED3DRESOURCESTATS;
+typedef struct _WINED3DDEVINFO_RESOURCEMANAGER {
+    WINED3DRESOURCESTATS stats[7];
+} WINED3DDEVINFO_RESOURCEMANAGER;
+typedef struct _WINED3DDEVINFO_VERTEXSTATS {
+    DWORD NumRenderedTriangles;
+    DWORD NumExtraClippingTriangles;
+} WINED3DDEVINFO_VERTEXSTATS;
+typedef struct _WINED3DLOCKED_RECT {
+    INT Pitch;
+    void *pBits;
+} WINED3DLOCKED_RECT;
+typedef struct _WINED3DLOCKED_BOX {
+    INT RowPitch;
+    INT SlicePitch;
+    void *pBits;
+} WINED3DLOCKED_BOX;
+typedef struct _WINED3DBOX {
+    UINT Left;
+    UINT Top;
+    UINT Right;
+    UINT Bottom;
+    UINT Front;
+    UINT Back;
+} WINED3DBOX;
+typedef struct WINED3DDEVINFO_VCACHE {
+    DWORD Pattern;
+    DWORD OptMethod;
+    DWORD CacheSize;
+    DWORD MagicNumber;
+} WINED3DDEVINFO_VCACHE;
+typedef struct _WINED3DBUFFER_DESC {
+    WINED3DRESOURCETYPE Type;
+    DWORD Usage;
+    WINED3DPOOL Pool;
+    UINT Size;
+} WINED3DBUFFER_DESC;
+typedef struct WineDirect3DStridedData {
+    WINED3DFORMAT format;
+    const BYTE *lpData;
+    DWORD dwStride;
+} WineDirect3DStridedData;
+typedef struct WineDirect3DVertexStridedData {
+    WineDirect3DStridedData position;
+    WineDirect3DStridedData normal;
+    WineDirect3DStridedData diffuse;
+    WineDirect3DStridedData specular;
+    WineDirect3DStridedData texCoords[8];
+    BOOL position_transformed;
+} WineDirect3DVertexStridedData;
+typedef struct _WINED3DVSHADERCAPS2_0 {
+    DWORD Caps;
+    INT DynamicFlowControlDepth;
+    INT NumTemps;
+    INT StaticFlowControlDepth;
+} WINED3DVSHADERCAPS2_0;
+typedef struct _WINED3DPSHADERCAPS2_0 {
+    DWORD Caps;
+    INT DynamicFlowControlDepth;
+    INT NumTemps;
+    INT StaticFlowControlDepth;
+    INT NumInstructionSlots;
+} WINED3DPSHADERCAPS2_0;
+typedef struct _WINEDDCAPS {
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD CKeyCaps;
+    DWORD FXCaps;
+    DWORD FXAlphaCaps;
+    DWORD PalCaps;
+    DWORD SVCaps;
+    DWORD SVBCaps;
+    DWORD SVBCKeyCaps;
+    DWORD SVBFXCaps;
+    DWORD VSBCaps;
+    DWORD VSBCKeyCaps;
+    DWORD VSBFXCaps;
+    DWORD SSBCaps;
+    DWORD SSBCKeyCaps;
+    DWORD SSBFXCaps;
+    DWORD ddsCaps;
+    DWORD StrideAlign;
+} WINEDDCAPS;
+typedef struct _WINED3DCAPS {
+    WINED3DDEVTYPE DeviceType;
+    UINT AdapterOrdinal;
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD Caps3;
+    DWORD PresentationIntervals;
+    DWORD CursorCaps;
+    DWORD DevCaps;
+    DWORD PrimitiveMiscCaps;
+    DWORD RasterCaps;
+    DWORD ZCmpCaps;
+    DWORD SrcBlendCaps;
+    DWORD DestBlendCaps;
+    DWORD AlphaCmpCaps;
+    DWORD ShadeCaps;
+    DWORD TextureCaps;
+    DWORD TextureFilterCaps;
+    DWORD CubeTextureFilterCaps;
+    DWORD VolumeTextureFilterCaps;
+    DWORD TextureAddressCaps;
+    DWORD VolumeTextureAddressCaps;
+    DWORD LineCaps;
+    DWORD MaxTextureWidth;
+    DWORD MaxTextureHeight;
+    DWORD MaxVolumeExtent;
+    DWORD MaxTextureRepeat;
+    DWORD MaxTextureAspectRatio;
+    DWORD MaxAnisotropy;
+    float MaxVertexW;
+    float GuardBandLeft;
+    float GuardBandTop;
+    float GuardBandRight;
+    float GuardBandBottom;
+    float ExtentsAdjust;
+    DWORD StencilCaps;
+    DWORD FVFCaps;
+    DWORD TextureOpCaps;
+    DWORD MaxTextureBlendStages;
+    DWORD MaxSimultaneousTextures;
+    DWORD VertexProcessingCaps;
+    DWORD MaxActiveLights;
+    DWORD MaxUserClipPlanes;
+    DWORD MaxVertexBlendMatrices;
+    DWORD MaxVertexBlendMatrixIndex;
+    float MaxPointSize;
+    DWORD MaxPrimitiveCount;
+    DWORD MaxVertexIndex;
+    DWORD MaxStreams;
+    DWORD MaxStreamStride;
+    DWORD VertexShaderVersion;
+    DWORD MaxVertexShaderConst;
+    DWORD PixelShaderVersion;
+    float PixelShader1xMaxValue;
+    DWORD DevCaps2;
+    float MaxNpatchTessellationLevel;
+    DWORD Reserved5;
+    UINT MasterAdapterOrdinal;
+    UINT AdapterOrdinalInGroup;
+    UINT NumberOfAdaptersInGroup;
+    DWORD DeclTypes;
+    DWORD NumSimultaneousRTs;
+    DWORD StretchRectFilterCaps;
+    WINED3DVSHADERCAPS2_0 VS20Caps;
+    WINED3DPSHADERCAPS2_0 PS20Caps;
+    DWORD VertexTextureFilterCaps;
+    DWORD MaxVShaderInstructionsExecuted;
+    DWORD MaxPShaderInstructionsExecuted;
+    DWORD MaxVertexShader30InstructionSlots;
+    DWORD MaxPixelShader30InstructionSlots;
+    DWORD Reserved2;
+    DWORD Reserved3;
+    WINEDDCAPS DirectDrawCaps;
+} WINED3DCAPS;
+typedef struct _WINEDDCOLORKEY {
+    DWORD dwColorSpaceLowValue;
+    DWORD dwColorSpaceHighValue;
+} WINEDDCOLORKEY;
+typedef struct _WINEDDCOLORKEY *LPWINEDDCOLORKEY;
+typedef struct _WINEDDBLTFX {
+    DWORD dwSize;
+    DWORD dwDDFX;
+    DWORD dwROP;
+    DWORD dwDDROP;
+    DWORD dwRotationAngle;
+    DWORD dwZBufferOpCode;
+    DWORD dwZBufferLow;
+    DWORD dwZBufferHigh;
+    DWORD dwZBufferBaseDest;
+    DWORD dwZDestConstBitDepth;
+    union {
+        DWORD dwZDestConst;
+        struct IWineD3DSurface *lpDDSZBufferDest;
+    } DUMMYUNIONNAME1;
+    DWORD dwZSrcConstBitDepth;
+    union {
+        DWORD dwZSrcConst;
+        struct IWineD3DSurface *lpDDSZBufferSrc;
+    } DUMMYUNIONNAME2;
+    DWORD dwAlphaEdgeBlendBitDepth;
+    DWORD dwAlphaEdgeBlend;
+    DWORD dwReserved;
+    DWORD dwAlphaDestConstBitDepth;
+    union {
+        DWORD dwAlphaDestConst;
+        struct IWineD3DSurface *lpDDSAlphaDest;
+    } DUMMYUNIONNAME3;
+    DWORD dwAlphaSrcConstBitDepth;
+    union {
+        DWORD dwAlphaSrcConst;
+        struct IWineD3DSurface *lpDDSAlphaSrc;
+    } DUMMYUNIONNAME4;
+    union {
+        DWORD dwFillColor;
+        DWORD dwFillDepth;
+        DWORD dwFillPixel;
+        struct IWineD3DSurface *lpDDSPattern;
+    } DUMMYUNIONNAME5;
+    WINEDDCOLORKEY ddckDestColorkey;
+    WINEDDCOLORKEY ddckSrcColorkey;
+} WINEDDBLTFX;
+typedef struct _WINEDDBLTFX *LPWINEDDBLTFX;
+typedef struct _WINEDDOVERLAYFX {
+    DWORD dwSize;
+    DWORD dwAlphaEdgeBlendBitDepth;
+    DWORD dwAlphaEdgeBlend;
+    DWORD dwReserved;
+    DWORD dwAlphaDestConstBitDepth;
+    union {
+        DWORD dwAlphaDestConst;
+        struct IWineD3DSurface *lpDDSAlphaDest;
+    } DUMMYUNIONNAME1;
+    DWORD dwAlphaSrcConstBitDepth;
+    union {
+        DWORD dwAlphaSrcConst;
+        struct IWineD3DSurface *lpDDSAlphaSrc;
+    } DUMMYUNIONNAME2;
+    WINEDDCOLORKEY dckDestColorkey;
+    WINEDDCOLORKEY dckSrcColorkey;
+    DWORD dwDDFX;
+    DWORD dwFlags;
+} WINEDDOVERLAYFX;
+struct wined3d_buffer_desc {
+    UINT byte_width;
+    DWORD usage;
+    UINT bind_flags;
+    UINT cpu_access_flags;
+    UINT misc_flags;
+};
+
+struct wined3d_shader_signature_element {
+    const char *semantic_name;
+    UINT semantic_idx;
+    enum wined3d_sysval_semantic sysval_semantic;
+    DWORD component_type;
+    UINT register_idx;
+    DWORD mask;
+};
+
+struct wined3d_shader_signature {
+    UINT element_count;
+    struct wined3d_shader_signature_element *elements;
+    char *string_data;
+};
+
+struct wined3d_parent_ops {
+    void (STDMETHODCALLTYPE *wined3d_object_destroyed)(void *parent);
+};
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDeviceParent interface
+ */
+#ifndef __IWineD3DDeviceParent_INTERFACE_DEFINED__
+#define __IWineD3DDeviceParent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDeviceParent, 0xaeb62dfc, 0xbdcb, 0x4f02, 0x95,0x19, 0x1e,0xee,0xa0,0x0c,0x15,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDeviceParent : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE WineD3DDeviceCreated(
+        IWineD3DDevice *device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        DWORD usage,
+        WINED3DPOOL pool,
+        UINT level,
+        WINED3DCUBEMAP_FACES face,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRenderTarget(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL lockable,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilSurface(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL discard,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        UINT depth,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        DWORD usage,
+        IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain) = 0;
+
+};
+#else
+typedef struct IWineD3DDeviceParentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DDeviceParent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DDeviceParent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DDeviceParent* This);
+
+    /*** IWineD3DDeviceParent methods ***/
+    void (STDMETHODCALLTYPE *WineD3DDeviceCreated)(
+        IWineD3DDeviceParent* This,
+        IWineD3DDevice *device);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        DWORD usage,
+        WINED3DPOOL pool,
+        UINT level,
+        WINED3DCUBEMAP_FACES face,
+        IWineD3DSurface **surface
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderTarget)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL lockable,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDepthStencilSurface)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL discard,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        UINT depth,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        DWORD usage,
+        IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+        IWineD3DDeviceParent* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain);
+
+    END_INTERFACE
+} IWineD3DDeviceParentVtbl;
+interface IWineD3DDeviceParent {
+    CONST_VTBL IWineD3DDeviceParentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDeviceParent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDeviceParent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDeviceParent_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DDeviceParent methods ***/
+#define IWineD3DDeviceParent_WineD3DDeviceCreated(This,device) (This)->lpVtbl->WineD3DDeviceCreated(This,device)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface)
+#endif
+#define IWineD3DDeviceParent_CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface) (This)->lpVtbl->CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface)
+#define IWineD3DDeviceParent_CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface) (This)->lpVtbl->CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume)
+#endif
+#define IWineD3DDeviceParent_CreateSwapChain(This,present_parameters,swapchain) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DDeviceParent_WineD3DDeviceCreated_Proxy(
+    IWineD3DDeviceParent* This,
+    IWineD3DDevice *device);
+void __RPC_STUB IWineD3DDeviceParent_WineD3DDeviceCreated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSurface_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    DWORD usage,
+    WINED3DPOOL pool,
+    UINT level,
+    WINED3DCUBEMAP_FACES face,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateRenderTarget_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    BOOL lockable,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateDepthStencilSurface_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    BOOL discard,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateVolume_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    UINT depth,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    DWORD usage,
+    IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DDeviceParent_CreateVolume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSwapChain_Proxy(
+    IWineD3DDeviceParent* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters,
+    IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDeviceParent_CreateSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DDeviceParent_INTERFACE_DEFINED__ */
+
+typedef ULONG (STDMETHODCALLTYPE *D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
+typedef HRESULT (STDMETHODCALLTYPE *D3DCB_ENUMRESOURCES)(IWineD3DResource *resource,void *pData);
+/*****************************************************************************
+ * IWineD3DBase interface
+ */
+#ifndef __IWineD3DBase_INTERFACE_DEFINED__
+#define __IWineD3DBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBase, 0x46799311, 0x8e0e, 0x40ce, 0xb2,0xec, 0xdd,0xb9,0x9f,0x18,0xfc,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBase : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetParent(
+        IUnknown **parent) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBase* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBase* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBase* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBase* This,
+        IUnknown **parent);
+
+    END_INTERFACE
+} IWineD3DBaseVtbl;
+interface IWineD3DBase {
+    CONST_VTBL IWineD3DBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBase_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBase_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBase_GetParent_Proxy(
+    IWineD3DBase* This,
+    IUnknown **parent);
+void __RPC_STUB IWineD3DBase_GetParent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3D interface
+ */
+#ifndef __IWineD3D_INTERFACE_DEFINED__
+#define __IWineD3D_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3D, 0x108f9c44, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3D : public IWineD3DBase
+{
+    virtual UINT STDMETHODCALLTYPE GetAdapterCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterSoftwareDevice(
+        void *pInitializeFunction) = 0;
+
+    virtual HMONITOR STDMETHODCALLTYPE GetAdapterMonitor(
+        UINT adapter_idx) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetAdapterModeCount(
+        UINT adapter_idx,
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAdapterModes(
+        UINT adapter_idx,
+        WINED3DFORMAT format,
+        UINT mode_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayMode(
+        UINT adapter_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayModeEx(
+        UINT adapter_idx,
+        WINED3DDISPLAYMODEEX *mode,
+        WINED3DDISPLAYROTATION *rotation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterIdentifier(
+        UINT adapter_idx,
+        DWORD flags,
+        WINED3DADAPTER_IDENTIFIER *identifier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceMultiSampleType(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT surface_format,
+        BOOL windowed,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD *quality_levels) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDepthStencilMatch(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        WINED3DFORMAT render_target_format,
+        WINED3DFORMAT depth_stencil_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceType(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT display_format,
+        WINED3DFORMAT backbuffer_format,
+        BOOL windowed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormat(
+        UINT adaper_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        DWORD usage,
+        WINED3DRESOURCETYPE resource_type,
+        WINED3DFORMAT check_format,
+        WINED3DSURFTYPE surface_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormatConversion(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT source_format,
+        WINED3DFORMAT target_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DCAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        HWND focus_window,
+        DWORD behaviour_flags,
+        IUnknown *parent,
+        IWineD3DDeviceParent *device_parent,
+        IWineD3DDevice **device) = 0;
+
+};
+#else
+typedef struct IWineD3DVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3D* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3D* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3D* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3D* This,
+        IUnknown **parent);
+
+    /*** IWineD3D methods ***/
+    UINT (STDMETHODCALLTYPE *GetAdapterCount)(
+        IWineD3D* This);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterSoftwareDevice)(
+        IWineD3D* This,
+        void *pInitializeFunction);
+
+    HMONITOR (STDMETHODCALLTYPE *GetAdapterMonitor)(
+        IWineD3D* This,
+        UINT adapter_idx);
+
+    UINT (STDMETHODCALLTYPE *GetAdapterModeCount)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAdapterModes)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DFORMAT format,
+        UINT mode_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayMode)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayModeEx)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDISPLAYMODEEX *mode,
+        WINED3DDISPLAYROTATION *rotation);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterIdentifier)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        DWORD flags,
+        WINED3DADAPTER_IDENTIFIER *identifier);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceMultiSampleType)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT surface_format,
+        BOOL windowed,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD *quality_levels);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDepthStencilMatch)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        WINED3DFORMAT render_target_format,
+        WINED3DFORMAT depth_stencil_format);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceType)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT display_format,
+        WINED3DFORMAT backbuffer_format,
+        BOOL windowed);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceFormat)(
+        IWineD3D* This,
+        UINT adaper_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        DWORD usage,
+        WINED3DRESOURCETYPE resource_type,
+        WINED3DFORMAT check_format,
+        WINED3DSURFTYPE surface_type);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceFormatConversion)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT source_format,
+        WINED3DFORMAT target_format);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DCAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        HWND focus_window,
+        DWORD behaviour_flags,
+        IUnknown *parent,
+        IWineD3DDeviceParent *device_parent,
+        IWineD3DDevice **device);
+
+    END_INTERFACE
+} IWineD3DVtbl;
+interface IWineD3D {
+    CONST_VTBL IWineD3DVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3D_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3D_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3D_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3D_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3D methods ***/
+#define IWineD3D_GetAdapterCount(This) (This)->lpVtbl->GetAdapterCount(This)
+#define IWineD3D_RegisterSoftwareDevice(This,pInitializeFunction) (This)->lpVtbl->RegisterSoftwareDevice(This,pInitializeFunction)
+#define IWineD3D_GetAdapterMonitor(This,adapter_idx) (This)->lpVtbl->GetAdapterMonitor(This,adapter_idx)
+#define IWineD3D_GetAdapterModeCount(This,adapter_idx,format) (This)->lpVtbl->GetAdapterModeCount(This,adapter_idx,format)
+#define IWineD3D_EnumAdapterModes(This,adapter_idx,format,mode_idx,mode) (This)->lpVtbl->EnumAdapterModes(This,adapter_idx,format,mode_idx,mode)
+#define IWineD3D_GetAdapterDisplayMode(This,adapter_idx,mode) (This)->lpVtbl->GetAdapterDisplayMode(This,adapter_idx,mode)
+#define IWineD3D_GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation) (This)->lpVtbl->GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation)
+#define IWineD3D_GetAdapterIdentifier(This,adapter_idx,flags,identifier) (This)->lpVtbl->GetAdapterIdentifier(This,adapter_idx,flags,identifier)
+#define IWineD3D_CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels) (This)->lpVtbl->CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels)
+#define IWineD3D_CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format) (This)->lpVtbl->CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format)
+#define IWineD3D_CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed) (This)->lpVtbl->CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed)
+#define IWineD3D_CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type) (This)->lpVtbl->CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type)
+#define IWineD3D_CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format) (This)->lpVtbl->CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format)
+#define IWineD3D_GetDeviceCaps(This,adapter_idx,device_type,caps) (This)->lpVtbl->GetDeviceCaps(This,adapter_idx,device_type,caps)
+#define IWineD3D_CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device) (This)->lpVtbl->CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device)
+#endif
+
+#endif
+
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterCount_Proxy(
+    IWineD3D* This);
+void __RPC_STUB IWineD3D_GetAdapterCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_RegisterSoftwareDevice_Proxy(
+    IWineD3D* This,
+    void *pInitializeFunction);
+void __RPC_STUB IWineD3D_RegisterSoftwareDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HMONITOR STDMETHODCALLTYPE IWineD3D_GetAdapterMonitor_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx);
+void __RPC_STUB IWineD3D_GetAdapterMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterModeCount_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3D_GetAdapterModeCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_EnumAdapterModes_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DFORMAT format,
+    UINT mode_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_EnumAdapterModes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayMode_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_GetAdapterDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayModeEx_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDISPLAYMODEEX *mode,
+    WINED3DDISPLAYROTATION *rotation);
+void __RPC_STUB IWineD3D_GetAdapterDisplayModeEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterIdentifier_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    DWORD flags,
+    WINED3DADAPTER_IDENTIFIER *identifier);
+void __RPC_STUB IWineD3D_GetAdapterIdentifier_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceMultiSampleType_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT surface_format,
+    BOOL windowed,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD *quality_levels);
+void __RPC_STUB IWineD3D_CheckDeviceMultiSampleType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDepthStencilMatch_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT adapter_format,
+    WINED3DFORMAT render_target_format,
+    WINED3DFORMAT depth_stencil_format);
+void __RPC_STUB IWineD3D_CheckDepthStencilMatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceType_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT display_format,
+    WINED3DFORMAT backbuffer_format,
+    BOOL windowed);
+void __RPC_STUB IWineD3D_CheckDeviceType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormat_Proxy(
+    IWineD3D* This,
+    UINT adaper_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT adapter_format,
+    DWORD usage,
+    WINED3DRESOURCETYPE resource_type,
+    WINED3DFORMAT check_format,
+    WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3D_CheckDeviceFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormatConversion_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT source_format,
+    WINED3DFORMAT target_format);
+void __RPC_STUB IWineD3D_CheckDeviceFormatConversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetDeviceCaps_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DCAPS *caps);
+void __RPC_STUB IWineD3D_GetDeviceCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CreateDevice_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    HWND focus_window,
+    DWORD behaviour_flags,
+    IUnknown *parent,
+    IWineD3DDeviceParent *device_parent,
+    IWineD3DDevice **device);
+void __RPC_STUB IWineD3D_CreateDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3D_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DResource interface
+ */
+#ifndef __IWineD3DResource_INTERFACE_DEFINED__
+#define __IWineD3DResource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DResource, 0x1f3bfb34, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DResource : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
+        REFGUID guid,
+        void *data,
+        DWORD *data_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FreePrivateData(
+        REFGUID guid) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE SetPriority(
+        DWORD new_priority) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetPriority(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE PreLoad(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE UnLoad(
+        ) = 0;
+
+    virtual WINED3DRESOURCETYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DResourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DResource* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DResource* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DResource* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DResource* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DResource* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DResource* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DResource* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DResource* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DResource* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    END_INTERFACE
+} IWineD3DResourceVtbl;
+interface IWineD3DResource {
+    CONST_VTBL IWineD3DResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DResource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DResource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DResource_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DResource_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DResource_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DResource_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DResource_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DResource_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DResource_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DResource_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DResource_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DResource_GetType(This) (This)->lpVtbl->GetType(This)
+# ifdef VBOX_WITH_WDDM
+#  define IWineD3DResource_SetShRcState(This, enmState) (This)->lpVtbl->SetShRcState(This, enmState)
+# endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DResource_SetPrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid,
+    const void *data,
+    DWORD data_size,
+    DWORD flags);
+void __RPC_STUB IWineD3DResource_SetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_GetPrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid,
+    void *data,
+    DWORD *data_size);
+void __RPC_STUB IWineD3DResource_GetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_FreePrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid);
+void __RPC_STUB IWineD3DResource_FreePrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_SetPriority_Proxy(
+    IWineD3DResource* This,
+    DWORD new_priority);
+void __RPC_STUB IWineD3DResource_SetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_GetPriority_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_PreLoad_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_PreLoad_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_UnLoad_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_UnLoad_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DRESOURCETYPE STDMETHODCALLTYPE IWineD3DResource_GetType_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DResource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DRendertargetView interface
+ */
+#ifndef __IWineD3DRendertargetView_INTERFACE_DEFINED__
+#define __IWineD3DRendertargetView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DRendertargetView, 0xf7d8abf4, 0xfb93, 0x43e4, 0x9c,0x96, 0x46,0x18,0xcf,0x9b,0x3c,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DRendertargetView : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetResource(
+        IWineD3DResource **resource) = 0;
+
+};
+#else
+typedef struct IWineD3DRendertargetViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DRendertargetView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DRendertargetView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DRendertargetView* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DRendertargetView* This,
+        IUnknown **parent);
+
+    /*** IWineD3DRendertargetView methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetResource)(
+        IWineD3DRendertargetView* This,
+        IWineD3DResource **resource);
+
+    END_INTERFACE
+} IWineD3DRendertargetViewVtbl;
+interface IWineD3DRendertargetView {
+    CONST_VTBL IWineD3DRendertargetViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DRendertargetView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DRendertargetView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DRendertargetView_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DRendertargetView_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DRendertargetView methods ***/
+#define IWineD3DRendertargetView_GetResource(This,resource) (This)->lpVtbl->GetResource(This,resource)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DRendertargetView_GetResource_Proxy(
+    IWineD3DRendertargetView* This,
+    IWineD3DResource **resource);
+void __RPC_STUB IWineD3DRendertargetView_GetResource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DRendertargetView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPalette interface
+ */
+#ifndef __IWineD3DPalette_INTERFACE_DEFINED__
+#define __IWineD3DPalette_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPalette, 0xf756720c, 0x32b9, 0x4439, 0xb5,0xa3, 0x1d,0x6c,0x97,0x03,0x7d,0x9e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPalette : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetEntries(
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCaps(
+        DWORD *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEntries(
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        const PALETTEENTRY *entries) = 0;
+
+};
+#else
+typedef struct IWineD3DPaletteVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DPalette* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DPalette* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DPalette* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DPalette* This,
+        IUnknown **parent);
+
+    /*** IWineD3DPalette methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEntries)(
+        IWineD3DPalette* This,
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *GetCaps)(
+        IWineD3DPalette* This,
+        DWORD *caps);
+
+    HRESULT (STDMETHODCALLTYPE *SetEntries)(
+        IWineD3DPalette* This,
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        const PALETTEENTRY *entries);
+
+    END_INTERFACE
+} IWineD3DPaletteVtbl;
+interface IWineD3DPalette {
+    CONST_VTBL IWineD3DPaletteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPalette_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPalette_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPalette_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPalette_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DPalette methods ***/
+#define IWineD3DPalette_GetEntries(This,flags,start,count,entries) (This)->lpVtbl->GetEntries(This,flags,start,count,entries)
+#define IWineD3DPalette_GetCaps(This,caps) (This)->lpVtbl->GetCaps(This,caps)
+#define IWineD3DPalette_SetEntries(This,flags,start,count,entries) (This)->lpVtbl->SetEntries(This,flags,start,count,entries)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetEntries_Proxy(
+    IWineD3DPalette* This,
+    DWORD flags,
+    DWORD start,
+    DWORD count,
+    PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_GetEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetCaps_Proxy(
+    IWineD3DPalette* This,
+    DWORD *caps);
+void __RPC_STUB IWineD3DPalette_GetCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_SetEntries_Proxy(
+    IWineD3DPalette* This,
+    DWORD flags,
+    DWORD start,
+    DWORD count,
+    const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_SetEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DPalette_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DClipper interface
+ */
+#ifndef __IWineD3DClipper_INTERFACE_DEFINED__
+#define __IWineD3DClipper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DClipper, 0x8f2bceb1, 0xd338, 0x488c, 0xab,0x7f, 0x0e,0xc9,0x80,0xbf,0x5d,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DClipper : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClipList(
+        const RECT *rect,
+        RGNDATA *clip_list,
+        DWORD *clip_list_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHWnd(
+        HWND *hwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsClipListChanged(
+        BOOL *changed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipList(
+        const RGNDATA *clip_list,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHWnd(
+        DWORD flags,
+        HWND hwnd) = 0;
+
+};
+#else
+typedef struct IWineD3DClipperVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DClipper* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DClipper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DClipper* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DClipper* This,
+        IUnknown **parent);
+
+    /*** IWineD3DClipper methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClipList)(
+        IWineD3DClipper* This,
+        const RECT *rect,
+        RGNDATA *clip_list,
+        DWORD *clip_list_size);
+
+    HRESULT (STDMETHODCALLTYPE *GetHWnd)(
+        IWineD3DClipper* This,
+        HWND *hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *IsClipListChanged)(
+        IWineD3DClipper* This,
+        BOOL *changed);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipList)(
+        IWineD3DClipper* This,
+        const RGNDATA *clip_list,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetHWnd)(
+        IWineD3DClipper* This,
+        DWORD flags,
+        HWND hwnd);
+
+    END_INTERFACE
+} IWineD3DClipperVtbl;
+interface IWineD3DClipper {
+    CONST_VTBL IWineD3DClipperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DClipper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DClipper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DClipper_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DClipper_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DClipper methods ***/
+#define IWineD3DClipper_GetClipList(This,rect,clip_list,clip_list_size) (This)->lpVtbl->GetClipList(This,rect,clip_list,clip_list_size)
+#define IWineD3DClipper_GetHWnd(This,hwnd) (This)->lpVtbl->GetHWnd(This,hwnd)
+#define IWineD3DClipper_IsClipListChanged(This,changed) (This)->lpVtbl->IsClipListChanged(This,changed)
+#define IWineD3DClipper_SetClipList(This,clip_list,flags) (This)->lpVtbl->SetClipList(This,clip_list,flags)
+#define IWineD3DClipper_SetHWnd(This,flags,hwnd) (This)->lpVtbl->SetHWnd(This,flags,hwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetClipList_Proxy(
+    IWineD3DClipper* This,
+    const RECT *rect,
+    RGNDATA *clip_list,
+    DWORD *clip_list_size);
+void __RPC_STUB IWineD3DClipper_GetClipList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetHWnd_Proxy(
+    IWineD3DClipper* This,
+    HWND *hwnd);
+void __RPC_STUB IWineD3DClipper_GetHWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_IsClipListChanged_Proxy(
+    IWineD3DClipper* This,
+    BOOL *changed);
+void __RPC_STUB IWineD3DClipper_IsClipListChanged_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetClipList_Proxy(
+    IWineD3DClipper* This,
+    const RGNDATA *clip_list,
+    DWORD flags);
+void __RPC_STUB IWineD3DClipper_SetClipList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetHWnd_Proxy(
+    IWineD3DClipper* This,
+    DWORD flags,
+    HWND hwnd);
+void __RPC_STUB IWineD3DClipper_SetHWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DClipper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSurface interface
+ */
+#ifndef __IWineD3DSurface_INTERFACE_DEFINED__
+#define __IWineD3DSurface_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSurface, 0x37cd5526, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSurface : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        REFIID riid,
+        void **container) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDC(
+        HDC *dc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
+        HDC dc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flip(
+        IWineD3DSurface *override,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Blt(
+        const RECT *dst_rect,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD flags,
+        const WINEDDBLTFX *blt_fx,
+        WINED3DTEXTUREFILTERTYPE filter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBltStatus(
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlipStatus(
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsLost(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Restore(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BltFast(
+        DWORD dst_x,
+        DWORD dst_y,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD trans) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPalette(
+        IWineD3DPalette **palette) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPalette(
+        IWineD3DPalette *palette) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RealizePalette(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetColorKey(
+        DWORD flags,
+        const WINEDDCOLORKEY *color_key) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetPitch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMem(
+        void *mem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOverlayPosition(
+        LONG x,
+        LONG y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOverlayPosition(
+        LONG *x,
+        LONG *y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateOverlayZOrder(
+        DWORD flags,
+        IWineD3DSurface *ref) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateOverlay(
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const RECT *dst_rect,
+        DWORD flags,
+        const WINEDDOVERLAYFX *fx) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipper(
+        IWineD3DClipper *clipper) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipper(
+        IWineD3DClipper **clipper) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+        BOOL srgb_mode) = 0;
+
+    virtual void STDMETHODCALLTYPE BindTexture(
+        BOOL srgb) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveSnapshot(
+        const char *filename) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainer(
+        IWineD3DBase *container) = 0;
+
+    virtual const void * STDMETHODCALLTYPE GetData(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFormat(
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PrivateSetup(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE ModifyLocation(
+        DWORD location,
+        BOOL persistent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadLocation(
+        DWORD location,
+        const RECT *rect) = 0;
+
+    virtual WINED3DSURFTYPE STDMETHODCALLTYPE GetImplType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawOverlay(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DSurfaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DSurface* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DSurface* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DSurface* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DSurface* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DSurface* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DSurface* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DSurface* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DSurface methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IWineD3DSurface* This,
+        REFIID riid,
+        void **container);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DSurface* This,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DSurface* This,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDC)(
+        IWineD3DSurface* This,
+        HDC *dc);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseDC)(
+        IWineD3DSurface* This,
+        HDC dc);
+
+    HRESULT (STDMETHODCALLTYPE *Flip)(
+        IWineD3DSurface* This,
+        IWineD3DSurface *override,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *Blt)(
+        IWineD3DSurface* This,
+        const RECT *dst_rect,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD flags,
+        const WINEDDBLTFX *blt_fx,
+        WINED3DTEXTUREFILTERTYPE filter);
+
+    HRESULT (STDMETHODCALLTYPE *GetBltStatus)(
+        IWineD3DSurface* This,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlipStatus)(
+        IWineD3DSurface* This,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *IsLost)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *Restore)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *BltFast)(
+        IWineD3DSurface* This,
+        DWORD dst_x,
+        DWORD dst_y,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD trans);
+
+    HRESULT (STDMETHODCALLTYPE *GetPalette)(
+        IWineD3DSurface* This,
+        IWineD3DPalette **palette);
+
+    HRESULT (STDMETHODCALLTYPE *SetPalette)(
+        IWineD3DSurface* This,
+        IWineD3DPalette *palette);
+
+    HRESULT (STDMETHODCALLTYPE *RealizePalette)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetColorKey)(
+        IWineD3DSurface* This,
+        DWORD flags,
+        const WINEDDCOLORKEY *color_key);
+
+    DWORD (STDMETHODCALLTYPE *GetPitch)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetMem)(
+        IWineD3DSurface* This,
+        void *mem);
+
+    HRESULT (STDMETHODCALLTYPE *SetOverlayPosition)(
+        IWineD3DSurface* This,
+        LONG x,
+        LONG y);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverlayPosition)(
+        IWineD3DSurface* This,
+        LONG *x,
+        LONG *y);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateOverlayZOrder)(
+        IWineD3DSurface* This,
+        DWORD flags,
+        IWineD3DSurface *ref);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateOverlay)(
+        IWineD3DSurface* This,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const RECT *dst_rect,
+        DWORD flags,
+        const WINEDDOVERLAYFX *fx);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipper)(
+        IWineD3DSurface* This,
+        IWineD3DClipper *clipper);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipper)(
+        IWineD3DSurface* This,
+        IWineD3DClipper **clipper);
+
+    HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+        IWineD3DSurface* This,
+        BOOL srgb_mode);
+
+    void (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DSurface* This,
+        BOOL srgb);
+
+    HRESULT (STDMETHODCALLTYPE *SaveSnapshot)(
+        IWineD3DSurface* This,
+        const char *filename);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainer)(
+        IWineD3DSurface* This,
+        IWineD3DBase *container);
+
+    const void * (STDMETHODCALLTYPE *GetData)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFormat)(
+        IWineD3DSurface* This,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *PrivateSetup)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *ModifyLocation)(
+        IWineD3DSurface* This,
+        DWORD location,
+        BOOL persistent);
+
+    HRESULT (STDMETHODCALLTYPE *LoadLocation)(
+        IWineD3DSurface* This,
+        DWORD location,
+        const RECT *rect);
+
+    WINED3DSURFTYPE (STDMETHODCALLTYPE *GetImplType)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *DrawOverlay)(
+        IWineD3DSurface* This);
+
+    END_INTERFACE
+} IWineD3DSurfaceVtbl;
+interface IWineD3DSurface {
+    CONST_VTBL IWineD3DSurfaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSurface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSurface_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSurface_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSurface_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DSurface_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DSurface_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DSurface_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DSurface_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DSurface_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DSurface_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DSurface_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DSurface_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DSurface methods ***/
+#define IWineD3DSurface_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DSurface_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DSurface_LockRect(This,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,locked_rect,rect,flags)
+#define IWineD3DSurface_UnlockRect(This) (This)->lpVtbl->UnlockRect(This)
+#define IWineD3DSurface_GetDC(This,dc) (This)->lpVtbl->GetDC(This,dc)
+#define IWineD3DSurface_ReleaseDC(This,dc) (This)->lpVtbl->ReleaseDC(This,dc)
+#define IWineD3DSurface_Flip(This,override,flags) (This)->lpVtbl->Flip(This,override,flags)
+#define IWineD3DSurface_Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter) (This)->lpVtbl->Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter)
+#define IWineD3DSurface_GetBltStatus(This,flags) (This)->lpVtbl->GetBltStatus(This,flags)
+#define IWineD3DSurface_GetFlipStatus(This,flags) (This)->lpVtbl->GetFlipStatus(This,flags)
+#define IWineD3DSurface_IsLost(This) (This)->lpVtbl->IsLost(This)
+#define IWineD3DSurface_Restore(This) (This)->lpVtbl->Restore(This)
+#define IWineD3DSurface_BltFast(This,dst_x,dst_y,src_surface,src_rect,trans) (This)->lpVtbl->BltFast(This,dst_x,dst_y,src_surface,src_rect,trans)
+#define IWineD3DSurface_GetPalette(This,palette) (This)->lpVtbl->GetPalette(This,palette)
+#define IWineD3DSurface_SetPalette(This,palette) (This)->lpVtbl->SetPalette(This,palette)
+#define IWineD3DSurface_RealizePalette(This) (This)->lpVtbl->RealizePalette(This)
+#define IWineD3DSurface_SetColorKey(This,flags,color_key) (This)->lpVtbl->SetColorKey(This,flags,color_key)
+#define IWineD3DSurface_GetPitch(This) (This)->lpVtbl->GetPitch(This)
+#define IWineD3DSurface_SetMem(This,mem) (This)->lpVtbl->SetMem(This,mem)
+#define IWineD3DSurface_SetOverlayPosition(This,x,y) (This)->lpVtbl->SetOverlayPosition(This,x,y)
+#define IWineD3DSurface_GetOverlayPosition(This,x,y) (This)->lpVtbl->GetOverlayPosition(This,x,y)
+#define IWineD3DSurface_UpdateOverlayZOrder(This,flags,ref) (This)->lpVtbl->UpdateOverlayZOrder(This,flags,ref)
+#define IWineD3DSurface_UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx) (This)->lpVtbl->UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx)
+#define IWineD3DSurface_SetClipper(This,clipper) (This)->lpVtbl->SetClipper(This,clipper)
+#define IWineD3DSurface_GetClipper(This,clipper) (This)->lpVtbl->GetClipper(This,clipper)
+#define IWineD3DSurface_LoadTexture(This,srgb_mode) (This)->lpVtbl->LoadTexture(This,srgb_mode)
+#define IWineD3DSurface_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DSurface_SaveSnapshot(This,filename) (This)->lpVtbl->SaveSnapshot(This,filename)
+#define IWineD3DSurface_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#define IWineD3DSurface_GetData(This) (This)->lpVtbl->GetData(This)
+#define IWineD3DSurface_SetFormat(This,format) (This)->lpVtbl->SetFormat(This,format)
+#define IWineD3DSurface_PrivateSetup(This) (This)->lpVtbl->PrivateSetup(This)
+#define IWineD3DSurface_ModifyLocation(This,location,persistent) (This)->lpVtbl->ModifyLocation(This,location,persistent)
+#define IWineD3DSurface_LoadLocation(This,location,rect) (This)->lpVtbl->LoadLocation(This,location,rect)
+#define IWineD3DSurface_GetImplType(This) (This)->lpVtbl->GetImplType(This)
+#define IWineD3DSurface_DrawOverlay(This) (This)->lpVtbl->DrawOverlay(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetContainer_Proxy(
+    IWineD3DSurface* This,
+    REFIID riid,
+    void **container);
+void __RPC_STUB IWineD3DSurface_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDesc_Proxy(
+    IWineD3DSurface* This,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DSurface_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LockRect_Proxy(
+    IWineD3DSurface* This,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UnlockRect_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDC_Proxy(
+    IWineD3DSurface* This,
+    HDC *dc);
+void __RPC_STUB IWineD3DSurface_GetDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_ReleaseDC_Proxy(
+    IWineD3DSurface* This,
+    HDC dc);
+void __RPC_STUB IWineD3DSurface_ReleaseDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Flip_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DSurface *override,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_Flip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Blt_Proxy(
+    IWineD3DSurface* This,
+    const RECT *dst_rect,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    DWORD flags,
+    const WINEDDBLTFX *blt_fx,
+    WINED3DTEXTUREFILTERTYPE filter);
+void __RPC_STUB IWineD3DSurface_Blt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetBltStatus_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetBltStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetFlipStatus_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetFlipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_IsLost_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_IsLost_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Restore_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_Restore_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_BltFast_Proxy(
+    IWineD3DSurface* This,
+    DWORD dst_x,
+    DWORD dst_y,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    DWORD trans);
+void __RPC_STUB IWineD3DSurface_BltFast_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetPalette_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DPalette **palette);
+void __RPC_STUB IWineD3DSurface_GetPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetPalette_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DPalette *palette);
+void __RPC_STUB IWineD3DSurface_SetPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_RealizePalette_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_RealizePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetColorKey_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags,
+    const WINEDDCOLORKEY *color_key);
+void __RPC_STUB IWineD3DSurface_SetColorKey_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DSurface_GetPitch_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetPitch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetMem_Proxy(
+    IWineD3DSurface* This,
+    void *mem);
+void __RPC_STUB IWineD3DSurface_SetMem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetOverlayPosition_Proxy(
+    IWineD3DSurface* This,
+    LONG x,
+    LONG y);
+void __RPC_STUB IWineD3DSurface_SetOverlayPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetOverlayPosition_Proxy(
+    IWineD3DSurface* This,
+    LONG *x,
+    LONG *y);
+void __RPC_STUB IWineD3DSurface_GetOverlayPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlayZOrder_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags,
+    IWineD3DSurface *ref);
+void __RPC_STUB IWineD3DSurface_UpdateOverlayZOrder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlay_Proxy(
+    IWineD3DSurface* This,
+    const RECT *src_rect,
+    IWineD3DSurface *dst_surface,
+    const RECT *dst_rect,
+    DWORD flags,
+    const WINEDDOVERLAYFX *fx);
+void __RPC_STUB IWineD3DSurface_UpdateOverlay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetClipper_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DClipper *clipper);
+void __RPC_STUB IWineD3DSurface_SetClipper_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetClipper_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DClipper **clipper);
+void __RPC_STUB IWineD3DSurface_GetClipper_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadTexture_Proxy(
+    IWineD3DSurface* This,
+    BOOL srgb_mode);
+void __RPC_STUB IWineD3DSurface_LoadTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_BindTexture_Proxy(
+    IWineD3DSurface* This,
+    BOOL srgb);
+void __RPC_STUB IWineD3DSurface_BindTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SaveSnapshot_Proxy(
+    IWineD3DSurface* This,
+    const char *filename);
+void __RPC_STUB IWineD3DSurface_SaveSnapshot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetContainer_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DBase *container);
+void __RPC_STUB IWineD3DSurface_SetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+const void * STDMETHODCALLTYPE IWineD3DSurface_GetData_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetFormat_Proxy(
+    IWineD3DSurface* This,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3DSurface_SetFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_PrivateSetup_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_PrivateSetup_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_ModifyLocation_Proxy(
+    IWineD3DSurface* This,
+    DWORD location,
+    BOOL persistent);
+void __RPC_STUB IWineD3DSurface_ModifyLocation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadLocation_Proxy(
+    IWineD3DSurface* This,
+    DWORD location,
+    const RECT *rect);
+void __RPC_STUB IWineD3DSurface_LoadLocation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DSURFTYPE STDMETHODCALLTYPE IWineD3DSurface_GetImplType_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetImplType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_DrawOverlay_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_DrawOverlay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DSurface_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolume interface
+ */
+#ifndef __IWineD3DVolume_INTERFACE_DEFINED__
+#define __IWineD3DVolume_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolume, 0x24769ed8, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolume : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        REFIID riid,
+        void **container) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DVOLUME_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockBox(
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+        int gl_level,
+        BOOL srgb_mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainer(
+        IWineD3DBase *container) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVolume* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVolume* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVolume* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVolume* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DVolume* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DVolume* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DVolume* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DVolume* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DVolume* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DVolume methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IWineD3DVolume* This,
+        REFIID riid,
+        void **container);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DVolume* This,
+        WINED3DVOLUME_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *LockBox)(
+        IWineD3DVolume* This,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+        IWineD3DVolume* This);
+
+    HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+        IWineD3DVolume* This,
+        int gl_level,
+        BOOL srgb_mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainer)(
+        IWineD3DVolume* This,
+        IWineD3DBase *container);
+
+    END_INTERFACE
+} IWineD3DVolumeVtbl;
+interface IWineD3DVolume {
+    CONST_VTBL IWineD3DVolumeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolume_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolume_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolume_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolume_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolume_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolume_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolume_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolume_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolume_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolume_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DVolume methods ***/
+#define IWineD3DVolume_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DVolume_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DVolume_LockBox(This,locked_box,box,flags) (This)->lpVtbl->LockBox(This,locked_box,box,flags)
+#define IWineD3DVolume_UnlockBox(This) (This)->lpVtbl->UnlockBox(This)
+#define IWineD3DVolume_LoadTexture(This,gl_level,srgb_mode) (This)->lpVtbl->LoadTexture(This,gl_level,srgb_mode)
+#define IWineD3DVolume_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetContainer_Proxy(
+    IWineD3DVolume* This,
+    REFIID riid,
+    void **container);
+void __RPC_STUB IWineD3DVolume_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetDesc_Proxy(
+    IWineD3DVolume* This,
+    WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolume_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LockBox_Proxy(
+    IWineD3DVolume* This,
+    WINED3DLOCKED_BOX *locked_box,
+    const WINED3DBOX *box,
+    DWORD flags);
+void __RPC_STUB IWineD3DVolume_LockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_UnlockBox_Proxy(
+    IWineD3DVolume* This);
+void __RPC_STUB IWineD3DVolume_UnlockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LoadTexture_Proxy(
+    IWineD3DVolume* This,
+    int gl_level,
+    BOOL srgb_mode);
+void __RPC_STUB IWineD3DVolume_LoadTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_SetContainer_Proxy(
+    IWineD3DVolume* This,
+    IWineD3DBase *container);
+void __RPC_STUB IWineD3DVolume_SetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVolume_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseTexture interface
+ */
+#ifndef __IWineD3DBaseTexture_INTERFACE_DEFINED__
+#define __IWineD3DBaseTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseTexture, 0x3c2aebf6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseTexture : public IWineD3DResource
+{
+    virtual DWORD STDMETHODCALLTYPE SetLOD(
+        DWORD new_lod) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetLOD(
+        ) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetLevelCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAutoGenFilterType(
+        WINED3DTEXTUREFILTERTYPE filter_type) = 0;
+
+    virtual WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE GetAutoGenFilterType(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE GenerateMipSubLevels(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE SetDirty(
+        BOOL dirty) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE GetDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindTexture(
+        BOOL srgb) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetTextureDimensions(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE IsCondNP2(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBaseTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBaseTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBaseTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBaseTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DBaseTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DBaseTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DBaseTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DBaseTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DBaseTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DBaseTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DBaseTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DBaseTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DBaseTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DBaseTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DBaseTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DBaseTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DBaseTexture* This);
+
+    END_INTERFACE
+} IWineD3DBaseTextureVtbl;
+interface IWineD3DBaseTexture {
+    CONST_VTBL IWineD3DBaseTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBaseTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBaseTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBaseTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBaseTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBaseTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBaseTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBaseTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBaseTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DBaseTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DBaseTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DBaseTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DBaseTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DBaseTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DBaseTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DBaseTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DBaseTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DBaseTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DBaseTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DBaseTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_SetLOD_Proxy(
+    IWineD3DBaseTexture* This,
+    DWORD new_lod);
+void __RPC_STUB IWineD3DBaseTexture_SetLOD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLOD_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLOD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLevelCount_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLevelCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_SetAutoGenFilterType_Proxy(
+    IWineD3DBaseTexture* This,
+    WINED3DTEXTUREFILTERTYPE filter_type);
+void __RPC_STUB IWineD3DBaseTexture_SetAutoGenFilterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE IWineD3DBaseTexture_GetAutoGenFilterType_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetAutoGenFilterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DBaseTexture_GenerateMipSubLevels_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GenerateMipSubLevels_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_SetDirty_Proxy(
+    IWineD3DBaseTexture* This,
+    BOOL dirty);
+void __RPC_STUB IWineD3DBaseTexture_SetDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_GetDirty_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_BindTexture_Proxy(
+    IWineD3DBaseTexture* This,
+    BOOL srgb);
+void __RPC_STUB IWineD3DBaseTexture_BindTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DBaseTexture_GetTextureDimensions_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetTextureDimensions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_IsCondNP2_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_IsCondNP2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBaseTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DTexture interface
+ */
+#ifndef __IWineD3DTexture_INTERFACE_DEFINED__
+#define __IWineD3DTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DTexture, 0x3e72cc1c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceLevel(
+        UINT level,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+        const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DTexture* This);
+
+    /*** IWineD3DTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DTexture* This,
+        UINT level,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceLevel)(
+        IWineD3DTexture* This,
+        UINT level,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DTexture* This,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DTexture* This,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+        IWineD3DTexture* This,
+        const RECT *dirty_rect);
+
+    END_INTERFACE
+} IWineD3DTextureVtbl;
+interface IWineD3DTexture {
+    CONST_VTBL IWineD3DTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DTexture methods ***/
+#define IWineD3DTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DTexture_GetSurfaceLevel(This,level,surface) (This)->lpVtbl->GetSurfaceLevel(This,level,surface)
+#define IWineD3DTexture_LockRect(This,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,level,locked_rect,rect,flags)
+#define IWineD3DTexture_UnlockRect(This,level) (This)->lpVtbl->UnlockRect(This,level)
+#define IWineD3DTexture_AddDirtyRect(This,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetLevelDesc_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetSurfaceLevel_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DTexture_GetSurfaceLevel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_LockRect_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DTexture_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_UnlockRect_Proxy(
+    IWineD3DTexture* This,
+    UINT level);
+void __RPC_STUB IWineD3DTexture_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_AddDirtyRect_Proxy(
+    IWineD3DTexture* This,
+    const RECT *dirty_rect);
+void __RPC_STUB IWineD3DTexture_AddDirtyRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DCubeTexture interface
+ */
+#ifndef __IWineD3DCubeTexture_INTERFACE_DEFINED__
+#define __IWineD3DCubeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DCubeTexture, 0x41752900, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DCubeTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCubeMapSurface(
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        WINED3DCUBEMAP_FACES face,
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+        WINED3DCUBEMAP_FACES face,
+        const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DCubeTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DCubeTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DCubeTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DCubeTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DCubeTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DCubeTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DCubeTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DCubeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DCubeTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DCubeTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DCubeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DCubeTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DCubeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DCubeTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DCubeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DCubeTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DCubeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DCubeTexture* This);
+
+    /*** IWineD3DCubeTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DCubeTexture* This,
+        UINT level,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetCubeMapSurface)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        const RECT *dirty_rect);
+
+    END_INTERFACE
+} IWineD3DCubeTextureVtbl;
+interface IWineD3DCubeTexture {
+    CONST_VTBL IWineD3DCubeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DCubeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DCubeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DCubeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DCubeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DCubeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DCubeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DCubeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DCubeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DCubeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DCubeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DCubeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DCubeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DCubeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DCubeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DCubeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DCubeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DCubeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DCubeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DCubeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DCubeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DCubeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DCubeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DCubeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DCubeTexture methods ***/
+#define IWineD3DCubeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DCubeTexture_GetCubeMapSurface(This,face,level,surface) (This)->lpVtbl->GetCubeMapSurface(This,face,level,surface)
+#define IWineD3DCubeTexture_LockRect(This,face,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,face,level,locked_rect,rect,flags)
+#define IWineD3DCubeTexture_UnlockRect(This,face,level) (This)->lpVtbl->UnlockRect(This,face,level)
+#define IWineD3DCubeTexture_AddDirtyRect(This,face,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,face,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetLevelDesc_Proxy(
+    IWineD3DCubeTexture* This,
+    UINT level,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DCubeTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetCubeMapSurface_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DCubeTexture_GetCubeMapSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_LockRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DCubeTexture_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_UnlockRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level);
+void __RPC_STUB IWineD3DCubeTexture_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_AddDirtyRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    const RECT *dirty_rect);
+void __RPC_STUB IWineD3DCubeTexture_AddDirtyRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DCubeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture interface
+ */
+#ifndef __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+#define __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolumeTexture, 0x7b39470c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolumeTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DVOLUME_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVolumeLevel(
+        UINT level,
+        IWineD3DVolume **volume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockBox(
+        UINT level,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyBox(
+        const WINED3DBOX *dirty_box) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVolumeTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVolumeTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVolumeTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVolumeTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DVolumeTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DVolumeTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DVolumeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DVolumeTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DVolumeTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DVolumeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DVolumeTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DVolumeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DVolumeTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DVolumeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DVolumeTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DVolumeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DVolumeTexture* This);
+
+    /*** IWineD3DVolumeTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        WINED3DVOLUME_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        IWineD3DVolume **volume);
+
+    HRESULT (STDMETHODCALLTYPE *LockBox)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+        IWineD3DVolumeTexture* This,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyBox)(
+        IWineD3DVolumeTexture* This,
+        const WINED3DBOX *dirty_box);
+
+    END_INTERFACE
+} IWineD3DVolumeTextureVtbl;
+interface IWineD3DVolumeTexture {
+    CONST_VTBL IWineD3DVolumeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolumeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolumeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolumeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolumeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolumeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolumeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolumeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolumeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolumeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolumeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolumeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolumeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DVolumeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DVolumeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DVolumeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DVolumeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DVolumeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DVolumeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DVolumeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DVolumeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DVolumeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DVolumeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DVolumeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DVolumeTexture methods ***/
+#define IWineD3DVolumeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DVolumeTexture_GetVolumeLevel(This,level,volume) (This)->lpVtbl->GetVolumeLevel(This,level,volume)
+#define IWineD3DVolumeTexture_LockBox(This,level,locked_box,box,flags) (This)->lpVtbl->LockBox(This,level,locked_box,box,flags)
+#define IWineD3DVolumeTexture_UnlockBox(This,level) (This)->lpVtbl->UnlockBox(This,level)
+#define IWineD3DVolumeTexture_AddDirtyBox(This,dirty_box) (This)->lpVtbl->AddDirtyBox(This,dirty_box)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetLevelDesc_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolumeTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetVolumeLevel_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DVolumeTexture_GetVolumeLevel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_LockBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    WINED3DLOCKED_BOX *locked_box,
+    const WINED3DBOX *box,
+    DWORD flags);
+void __RPC_STUB IWineD3DVolumeTexture_LockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_UnlockBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level);
+void __RPC_STUB IWineD3DVolumeTexture_UnlockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_AddDirtyBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    const WINED3DBOX *dirty_box);
+void __RPC_STUB IWineD3DVolumeTexture_AddDirtyBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVolumeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration interface
+ */
+#ifndef __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+#define __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexDeclaration, 0x7cd55be6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexDeclaration : public IWineD3DBase
+{
+};
+#else
+typedef struct IWineD3DVertexDeclarationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVertexDeclaration* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVertexDeclaration* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVertexDeclaration* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVertexDeclaration* This,
+        IUnknown **parent);
+
+    END_INTERFACE
+} IWineD3DVertexDeclarationVtbl;
+interface IWineD3DVertexDeclaration {
+    CONST_VTBL IWineD3DVertexDeclarationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexDeclaration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexDeclaration_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexDeclaration_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexDeclaration_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DVertexDeclaration_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DStateBlock interface
+ */
+#ifndef __IWineD3DStateBlock_INTERFACE_DEFINED__
+#define __IWineD3DStateBlock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DStateBlock, 0x83b073ce, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DStateBlock : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Capture(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Apply(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitStartupStateBlock(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DStateBlockVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DStateBlock* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DStateBlock* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DStateBlock* This);
+
+    /*** IWineD3DStateBlock methods ***/
+    HRESULT (STDMETHODCALLTYPE *Capture)(
+        IWineD3DStateBlock* This);
+
+    HRESULT (STDMETHODCALLTYPE *Apply)(
+        IWineD3DStateBlock* This);
+
+    HRESULT (STDMETHODCALLTYPE *InitStartupStateBlock)(
+        IWineD3DStateBlock* This);
+
+    END_INTERFACE
+} IWineD3DStateBlockVtbl;
+interface IWineD3DStateBlock {
+    CONST_VTBL IWineD3DStateBlockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DStateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DStateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DStateBlock_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DStateBlock methods ***/
+#define IWineD3DStateBlock_Capture(This) (This)->lpVtbl->Capture(This)
+#define IWineD3DStateBlock_Apply(This) (This)->lpVtbl->Apply(This)
+#define IWineD3DStateBlock_InitStartupStateBlock(This) (This)->lpVtbl->InitStartupStateBlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Capture_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Capture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Apply_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Apply_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_InitStartupStateBlock_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_InitStartupStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DStateBlock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DQuery interface
+ */
+#ifndef __IWineD3DQuery_INTERFACE_DEFINED__
+#define __IWineD3DQuery_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DQuery, 0x905ddbac, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DQuery : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetData(
+        void *data,
+        DWORD data_size,
+        DWORD flags) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetDataSize(
+        ) = 0;
+
+    virtual WINED3DQUERYTYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Issue(
+        DWORD flags) = 0;
+
+};
+#else
+typedef struct IWineD3DQueryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DQuery* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DQuery* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DQuery* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DQuery* This,
+        IUnknown **parent);
+
+    /*** IWineD3DQuery methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IWineD3DQuery* This,
+        void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    DWORD (STDMETHODCALLTYPE *GetDataSize)(
+        IWineD3DQuery* This);
+
+    WINED3DQUERYTYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DQuery* This);
+
+    HRESULT (STDMETHODCALLTYPE *Issue)(
+        IWineD3DQuery* This,
+        DWORD flags);
+
+    END_INTERFACE
+} IWineD3DQueryVtbl;
+interface IWineD3DQuery {
+    CONST_VTBL IWineD3DQueryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DQuery_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DQuery_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DQuery methods ***/
+#define IWineD3DQuery_GetData(This,data,data_size,flags) (This)->lpVtbl->GetData(This,data,data_size,flags)
+#define IWineD3DQuery_GetDataSize(This) (This)->lpVtbl->GetDataSize(This)
+#define IWineD3DQuery_GetType(This) (This)->lpVtbl->GetType(This)
+#define IWineD3DQuery_Issue(This,flags) (This)->lpVtbl->Issue(This,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_GetData_Proxy(
+    IWineD3DQuery* This,
+    void *data,
+    DWORD data_size,
+    DWORD flags);
+void __RPC_STUB IWineD3DQuery_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DQuery_GetDataSize_Proxy(
+    IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetDataSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DQUERYTYPE STDMETHODCALLTYPE IWineD3DQuery_GetType_Proxy(
+    IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_Issue_Proxy(
+    IWineD3DQuery* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DQuery_Issue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DQuery_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSwapChain interface
+ */
+#ifndef __IWineD3DSwapChain_INTERFACE_DEFINED__
+#define __IWineD3DSwapChain_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSwapChain, 0x34d01b10, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSwapChain : public IWineD3DBase
+{
+    virtual void STDMETHODCALLTYPE Destroy(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDevice(
+        IWineD3DDevice **device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Present(
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDestWindowOverride(
+        HWND window) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+        IWineD3DSurface *dst_surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+        WINED3DRASTER_STATUS *raster_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPresentParameters(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGammaRamp(
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGammaRamp(
+        WINED3DGAMMARAMP *ramp) = 0;
+
+};
+#else
+typedef struct IWineD3DSwapChainVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DSwapChain* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DSwapChain* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DSwapChain* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DSwapChain* This,
+        IUnknown **parent);
+
+    /*** IWineD3DSwapChain methods ***/
+    void (STDMETHODCALLTYPE *Destroy)(
+        IWineD3DSwapChain* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        IWineD3DSwapChain* This,
+        IWineD3DDevice **device);
+
+    HRESULT (STDMETHODCALLTYPE *Present)(
+        IWineD3DSwapChain* This,
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetDestWindowOverride)(
+        IWineD3DSwapChain* This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+        IWineD3DSwapChain* This,
+        IWineD3DSurface *dst_surface);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+        IWineD3DSwapChain* This,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+        IWineD3DSwapChain* This,
+        WINED3DRASTER_STATUS *raster_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+        IWineD3DSwapChain* This,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPresentParameters)(
+        IWineD3DSwapChain* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetGammaRamp)(
+        IWineD3DSwapChain* This,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp);
+
+    HRESULT (STDMETHODCALLTYPE *GetGammaRamp)(
+        IWineD3DSwapChain* This,
+        WINED3DGAMMARAMP *ramp);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IWineD3DSwapChain* This);
+
+    HRESULT (STDMETHODCALLTYPE *PresentRt)(
+        IWineD3DSwapChain* This,
+        IWineD3DSurface* surf);
+#endif
+    END_INTERFACE
+} IWineD3DSwapChainVtbl;
+interface IWineD3DSwapChain {
+    CONST_VTBL IWineD3DSwapChainVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSwapChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSwapChain_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSwapChain_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSwapChain_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DSwapChain methods ***/
+#define IWineD3DSwapChain_Destroy(This) (This)->lpVtbl->Destroy(This)
+#define IWineD3DSwapChain_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#define IWineD3DSwapChain_Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags)
+#define IWineD3DSwapChain_SetDestWindowOverride(This,window) (This)->lpVtbl->SetDestWindowOverride(This,window)
+#define IWineD3DSwapChain_GetFrontBufferData(This,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,dst_surface)
+#define IWineD3DSwapChain_GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DSwapChain_GetRasterStatus(This,raster_status) (This)->lpVtbl->GetRasterStatus(This,raster_status)
+#define IWineD3DSwapChain_GetDisplayMode(This,mode) (This)->lpVtbl->GetDisplayMode(This,mode)
+#define IWineD3DSwapChain_GetPresentParameters(This,present_parameters) (This)->lpVtbl->GetPresentParameters(This,present_parameters)
+#define IWineD3DSwapChain_SetGammaRamp(This,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,flags,ramp)
+#define IWineD3DSwapChain_GetGammaRamp(This,ramp) (This)->lpVtbl->GetGammaRamp(This,ramp)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DSwapChain_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DSwapChain_PresentRt(This,surf) (This)->lpVtbl->PresentRt(This,surf)
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DSwapChain_Destroy_Proxy(
+    IWineD3DSwapChain* This);
+void __RPC_STUB IWineD3DSwapChain_Destroy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDevice_Proxy(
+    IWineD3DSwapChain* This,
+    IWineD3DDevice **device);
+void __RPC_STUB IWineD3DSwapChain_GetDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_Present_Proxy(
+    IWineD3DSwapChain* This,
+    const RECT *src_rect,
+    const RECT *dst_rect,
+    HWND dst_window_override,
+    const RGNDATA *dirty_region,
+    DWORD flags);
+void __RPC_STUB IWineD3DSwapChain_Present_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetDestWindowOverride_Proxy(
+    IWineD3DSwapChain* This,
+    HWND window);
+void __RPC_STUB IWineD3DSwapChain_SetDestWindowOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetFrontBufferData_Proxy(
+    IWineD3DSwapChain* This,
+    IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DSwapChain_GetFrontBufferData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetBackBuffer_Proxy(
+    IWineD3DSwapChain* This,
+    UINT backbuffer_idx,
+    WINED3DBACKBUFFER_TYPE backbuffer_type,
+    IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DSwapChain_GetBackBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetRasterStatus_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DSwapChain_GetRasterStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDisplayMode_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DSwapChain_GetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetPresentParameters_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DSwapChain_GetPresentParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetGammaRamp_Proxy(
+    IWineD3DSwapChain* This,
+    DWORD flags,
+    const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_SetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetGammaRamp_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_GetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DSwapChain_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBuffer interface
+ */
+#ifndef __IWineD3DBuffer_INTERFACE_DEFINED__
+#define __IWineD3DBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBuffer, 0xb3f028e8, 0x1a40, 0x4ab3, 0x92,0x92, 0x5b,0xf6,0xcf,0xd8,0x02,0x09);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBuffer : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE Map(
+        UINT offset,
+        UINT size,
+        BYTE **data,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unmap(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DBUFFER_DESC *desc) = 0;
+
+};
+#else
+typedef struct IWineD3DBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBuffer* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBuffer* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DBuffer* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DBuffer* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DBuffer* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DBuffer* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DBuffer* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Map)(
+        IWineD3DBuffer* This,
+        UINT offset,
+        UINT size,
+        BYTE **data,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *Unmap)(
+        IWineD3DBuffer* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DBuffer* This,
+        WINED3DBUFFER_DESC *desc);
+
+    END_INTERFACE
+} IWineD3DBufferVtbl;
+interface IWineD3DBuffer {
+    CONST_VTBL IWineD3DBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBuffer_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBuffer_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBuffer_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBuffer_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBuffer_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBuffer_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBuffer_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBuffer_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBuffer_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBuffer methods ***/
+#define IWineD3DBuffer_Map(This,offset,size,data,flags) (This)->lpVtbl->Map(This,offset,size,data,flags)
+#define IWineD3DBuffer_Unmap(This) (This)->lpVtbl->Unmap(This)
+#define IWineD3DBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Map_Proxy(
+    IWineD3DBuffer* This,
+    UINT offset,
+    UINT size,
+    BYTE **data,
+    DWORD flags);
+void __RPC_STUB IWineD3DBuffer_Map_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Unmap_Proxy(
+    IWineD3DBuffer* This);
+void __RPC_STUB IWineD3DBuffer_Unmap_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_GetDesc_Proxy(
+    IWineD3DBuffer* This,
+    WINED3DBUFFER_DESC *desc);
+void __RPC_STUB IWineD3DBuffer_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseShader interface
+ */
+#ifndef __IWineD3DBaseShader_INTERFACE_DEFINED__
+#define __IWineD3DBaseShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseShader, 0xeac93065, 0xa4df, 0x446f, 0x86,0xa1, 0x9e,0xf2,0xbc,0xa4,0x0a,0x3c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseShader : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFunction(
+        void *data,
+        UINT *data_size) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBaseShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBaseShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBaseShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBaseShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DBaseShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DBaseShaderVtbl;
+interface IWineD3DBaseShader {
+    CONST_VTBL IWineD3DBaseShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DBaseShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBaseShader_GetFunction_Proxy(
+    IWineD3DBaseShader* This,
+    void *data,
+    UINT *data_size);
+void __RPC_STUB IWineD3DBaseShader_GetFunction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBaseShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexShader interface
+ */
+#ifndef __IWineD3DVertexShader_INTERFACE_DEFINED__
+#define __IWineD3DVertexShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexShader, 0x7f7a2b60, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexShader : public IWineD3DBaseShader
+{
+    virtual HRESULT STDMETHODCALLTYPE SetLocalConstantsF(
+        UINT start_idx,
+        const float *src_data,
+        UINT vector4f_count) = 0;
+
+};
+#else
+typedef struct IWineD3DVertexShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVertexShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVertexShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVertexShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVertexShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DVertexShader* This,
+        void *data,
+        UINT *data_size);
+
+    /*** IWineD3DVertexShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetLocalConstantsF)(
+        IWineD3DVertexShader* This,
+        UINT start_idx,
+        const float *src_data,
+        UINT vector4f_count);
+
+    END_INTERFACE
+} IWineD3DVertexShaderVtbl;
+interface IWineD3DVertexShader {
+    CONST_VTBL IWineD3DVertexShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DVertexShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+/*** IWineD3DVertexShader methods ***/
+#define IWineD3DVertexShader_SetLocalConstantsF(This,start_idx,src_data,vector4f_count) (This)->lpVtbl->SetLocalConstantsF(This,start_idx,src_data,vector4f_count)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVertexShader_SetLocalConstantsF_Proxy(
+    IWineD3DVertexShader* This,
+    UINT start_idx,
+    const float *src_data,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DVertexShader_SetLocalConstantsF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVertexShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DGeometryShader interface
+ */
+#ifndef __IWineD3DGeometryShader_INTERFACE_DEFINED__
+#define __IWineD3DGeometryShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DGeometryShader, 0x8276c113, 0x388b, 0x49d1, 0xad,0x8b, 0xc9,0xdd,0x8b,0xcb,0xab,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DGeometryShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DGeometryShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DGeometryShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DGeometryShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DGeometryShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DGeometryShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DGeometryShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DGeometryShaderVtbl;
+interface IWineD3DGeometryShader {
+    CONST_VTBL IWineD3DGeometryShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DGeometryShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DGeometryShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DGeometryShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DGeometryShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DGeometryShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DGeometryShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPixelShader interface
+ */
+#ifndef __IWineD3DPixelShader_INTERFACE_DEFINED__
+#define __IWineD3DPixelShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPixelShader, 0x818503da, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPixelShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DPixelShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DPixelShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DPixelShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DPixelShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DPixelShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DPixelShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DPixelShaderVtbl;
+interface IWineD3DPixelShader {
+    CONST_VTBL IWineD3DPixelShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPixelShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPixelShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPixelShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPixelShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DPixelShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DPixelShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DDevice interface
+ */
+#ifndef __IWineD3DDevice_INTERFACE_DEFINED__
+#define __IWineD3DDevice_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDevice, 0x6d10a2ce, 0x09d0, 0x4a53, 0xa4,0x27, 0x11,0x38,0x8f,0x9f,0x8c,0xa5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDevice : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateBuffer(
+        struct wined3d_buffer_desc *desc,
+        const void *data,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        IWineD3DBuffer **buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexBuffer(
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **vertex_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateIndexBuffer(
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **index_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStateBlock(
+        WINED3DSTATEBLOCKTYPE type,
+        IWineD3DStateBlock **stateblock,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        BOOL lockable,
+        BOOL discard,
+        UINT level,
+        IWineD3DSurface **surface,
+        DWORD usage,
+        WINED3DPOOL pool,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        WINED3DSURFTYPE surface_type,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRendertargetView(
+        IWineD3DResource *resource,
+        IUnknown *parent,
+        IWineD3DRendertargetView **rendertarget_view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTexture(
+        UINT width,
+        UINT height,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolumeTexture(
+        UINT width,
+        UINT height,
+        UINT depth,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolumeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pavClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+        UINT width,
+        UINT height,
+        UINT depth,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolume **volume,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCubeTexture(
+        UINT edge_length,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DCubeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateQuery(
+        WINED3DQUERYTYPE type,
+        IWineD3DQuery **query,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain,
+        IUnknown *parent,
+        WINED3DSURFTYPE surface_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclaration(
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        const WINED3DVERTEXELEMENT *elements,
+        UINT element_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclarationFromFVF(
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        DWORD fvf) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexShader(
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DVertexShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader(
+        const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DGeometryShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePixelShader(
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DPixelShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePalette(
+        DWORD flags,
+        const PALETTEENTRY *palette_entry,
+        IWineD3DPalette **palette,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Init3D(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitGDI(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Uninit3D(
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UninitGDI(
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+    virtual void STDMETHODCALLTYPE SetMultithreaded(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EvictManagedResources(
+        ) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetAvailableTextureMem(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+        UINT swapchain_idx,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+        WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+        WINED3DCAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDirect3D(
+        IWineD3D **d3d) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+        UINT swapchain_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDisplayMode(
+        UINT swapchain_idx,
+        const WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetNumberOfSwapChains(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+        UINT swapchain_idx,
+        WINED3DRASTER_STATUS *raster_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSwapChain(
+        UINT swapchain_idx,
+        IWineD3DSwapChain **swapchain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDialogBoxMode(
+        BOOL enable_dialogs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCursorProperties(
+        UINT x_hotspot,
+        UINT y_hotspot,
+        IWineD3DSurface *cursor_surface) = 0;
+
+    virtual void STDMETHODCALLTYPE SetCursorPosition(
+        int x_screen_space,
+        int y_screen_space,
+        DWORD flags) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE ShowCursor(
+        BOOL show) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipPlane(
+        DWORD plane_idx,
+        const float *plane) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipPlane(
+        DWORD plane_idx,
+        float *plane) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipStatus(
+        const WINED3DCLIPSTATUS *clip_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipStatus(
+        WINED3DCLIPSTATUS *clip_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCurrentTexturePalette(
+        UINT palette_number) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentTexturePalette(
+        UINT *palette_number) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDepthStencilSurface(
+        IWineD3DSurface *depth_stencil) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDepthStencilSurface(
+        IWineD3DSurface **depth_stencil) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGammaRamp(
+        UINT swapchain_idx,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual void STDMETHODCALLTYPE GetGammaRamp(
+        UINT swapchain_idx,
+        WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIndexBuffer(
+        IWineD3DBuffer *index_buffer,
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexBuffer(
+        IWineD3DBuffer **index_buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBaseVertexIndex(
+        INT base_index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBaseVertexIndex(
+        INT *base_index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLight(
+        DWORD light_idx,
+        const WINED3DLIGHT *light) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLight(
+        DWORD light_idx,
+        WINED3DLIGHT *light) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLightEnable(
+        DWORD light_idx,
+        BOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLightEnable(
+        DWORD light_idx,
+        BOOL *enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMaterial(
+        const WINED3DMATERIAL *material) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaterial(
+        WINED3DMATERIAL *material) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetNPatchMode(
+        float segments) = 0;
+
+    virtual float STDMETHODCALLTYPE GetNPatchMode(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPaletteEntries(
+        UINT palette_number,
+        const PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPaletteEntries(
+        UINT palette_number,
+        PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShader(
+        IWineD3DPixelShader *shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShader(
+        IWineD3DPixelShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantB(
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantB(
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantI(
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantI(
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantF(
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantF(
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderState(
+        WINED3DRENDERSTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderState(
+        WINED3DRENDERSTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderTarget(
+        DWORD render_target_idx,
+        IWineD3DSurface *render_target,
+        BOOL set_viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderTarget(
+        DWORD render_target_idx,
+        IWineD3DSurface **render_target) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrontBackBuffers(
+        IWineD3DSurface *front,
+        IWineD3DSurface *back) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSamplerState(
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSamplerState(
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetScissorRect(
+        const RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetScissorRect(
+        RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSoftwareVertexProcessing(
+        BOOL software) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE GetSoftwareVertexProcessing(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSource(
+        UINT stream_idx,
+        IWineD3DBuffer *buffer,
+        UINT offset,
+        UINT stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSource(
+        UINT stream_idx,
+        IWineD3DBuffer **buffer,
+        UINT *offset,
+        UINT *stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSourceFreq(
+        UINT stream_idx,
+        UINT divider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSourceFreq(
+        UINT stream_idx,
+        UINT *divider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTexture(
+        DWORD stage,
+        IWineD3DBaseTexture *texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTexture(
+        DWORD stage,
+        IWineD3DBaseTexture **texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTextureStageState(
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextureStageState(
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexDeclaration(
+        IWineD3DVertexDeclaration *declaration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexDeclaration(
+        IWineD3DVertexDeclaration **declaration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShader(
+        IWineD3DVertexShader *shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShader(
+        IWineD3DVertexShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantB(
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantB(
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantI(
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantI(
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantF(
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantF(
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewport(
+        const WINED3DVIEWPORT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetViewport(
+        WINED3DVIEWPORT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MultiplyTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ValidateDevice(
+        DWORD *num_passes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessVertices(
+        UINT src_start_idx,
+        UINT dst_idx,
+        UINT vertex_count,
+        IWineD3DBuffer *dest_buffer,
+        IWineD3DVertexDeclaration *declaration,
+        DWORD flags,
+        DWORD DestFVF) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginStateBlock(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndStateBlock(
+        IWineD3DStateBlock **stateblock) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginScene(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndScene(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Present(
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        DWORD rect_count,
+        const WINED3DRECT *rects,
+        DWORD flags,
+        WINED3DCOLOR color,
+        float z,
+        DWORD stencil) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearRendertargetView(
+        IWineD3DRendertargetView *rendertarget_view,
+        const float color[4]) = 0;
+
+    virtual void STDMETHODCALLTYPE SetPrimitiveType(
+        WINED3DPRIMITIVETYPE primitive_topology) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPrimitiveType(
+        WINED3DPRIMITIVETYPE *primitive_topology) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitive(
+        UINT start_vertex,
+        UINT vertex_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitive(
+        UINT start_idx,
+        UINT index_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveUP(
+        UINT vertex_count,
+        const void *stream_data,
+        UINT stream_stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveUP(
+        UINT index_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format,
+        const void *stream_data,
+        UINT stream_stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveStrided(
+        UINT vertex_count,
+        const WineDirect3DVertexStridedData *strided_data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveStrided(
+        UINT index_count,
+        const WineDirect3DVertexStridedData *strided_data,
+        UINT vertex_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawRectPatch(
+        UINT handle,
+        const float *num_segs,
+        const WINED3DRECTPATCH_INFO *rect_patch_info) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawTriPatch(
+        UINT handle,
+        const float *num_segs,
+        const WINED3DTRIPATCH_INFO *tri_patch_info) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeletePatch(
+        UINT handle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ColorFill(
+        IWineD3DSurface *surface,
+        const WINED3DRECT *rect,
+        WINED3DCOLOR color) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateTexture(
+        IWineD3DBaseTexture *src_texture,
+        IWineD3DBaseTexture *dst_texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateSurface(
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const POINT *dst_point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+        UINT swapchain_idx,
+        IWineD3DSurface *dst_surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumResources(
+        HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+        void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceFromDC(
+        HDC dc,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AcquireFocusWindow(
+        HWND window) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseFocusWindow(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddSwapChain(
+        IWineD3DSwapChain *swapchain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveSwapChain(
+        IWineD3DSwapChain *swapchain) = 0;
+
+#ifdef VBOX_WITH_WDDM
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VolBlt(IWineD3DDevice *iface,
+            IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+            const WINED3DBOX *pSrcBoxArg,
+            const VBOXPOINT3D *pDstPoin3D
+            ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VolTexBlt(IWineD3DDevice *iface,
+            IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+            const WINED3DBOX *pSrcBoxArg,
+            const VBOXPOINT3D *pDstPoin3D
+            ) = 0;
+#endif
+};
+#else
+typedef struct IWineD3DDeviceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DDevice* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DDevice* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DDevice* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DDevice* This,
+        IUnknown **parent);
+
+    /*** IWineD3DDevice methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateBuffer)(
+        IWineD3DDevice* This,
+        struct wined3d_buffer_desc *desc,
+        const void *data,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        IWineD3DBuffer **buffer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexBuffer)(
+        IWineD3DDevice* This,
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **vertex_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateIndexBuffer)(
+        IWineD3DDevice* This,
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **index_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStateBlock)(
+        IWineD3DDevice* This,
+        WINED3DSTATEBLOCKTYPE type,
+        IWineD3DStateBlock **stateblock,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        BOOL lockable,
+        BOOL discard,
+        UINT level,
+        IWineD3DSurface **surface,
+        DWORD usage,
+        WINED3DPOOL pool,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        WINED3DSURFTYPE surface_type,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateRendertargetView)(
+        IWineD3DDevice* This,
+        IWineD3DResource *resource,
+        IUnknown *parent,
+        IWineD3DRendertargetView **rendertarget_view);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTexture)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolumeTexture)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT depth,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolumeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT depth,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolume **volume,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateCubeTexture)(
+        IWineD3DDevice* This,
+        UINT edge_length,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DCubeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateQuery)(
+        IWineD3DDevice* This,
+        WINED3DQUERYTYPE type,
+        IWineD3DQuery **query,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain,
+        IUnknown *parent,
+        WINED3DSURFTYPE surface_type);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        const WINED3DVERTEXELEMENT *elements,
+        UINT element_count);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexDeclarationFromFVF)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        DWORD fvf);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexShader)(
+        IWineD3DDevice* This,
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DVertexShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGeometryShader)(
+        IWineD3DDevice* This,
+        const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DGeometryShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePixelShader)(
+        IWineD3DDevice* This,
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DPixelShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePalette)(
+        IWineD3DDevice* This,
+        DWORD flags,
+        const PALETTEENTRY *palette_entry,
+        IWineD3DPalette **palette,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *Init3D)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *InitGDI)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *Uninit3D)(
+        IWineD3DDevice* This,
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+    HRESULT (STDMETHODCALLTYPE *UninitGDI)(
+        IWineD3DDevice* This,
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+    void (STDMETHODCALLTYPE *SetMultithreaded)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EvictManagedResources)(
+        IWineD3DDevice* This);
+
+    UINT (STDMETHODCALLTYPE *GetAvailableTextureMem)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+        IWineD3DDevice* This,
+        WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+        IWineD3DDevice* This,
+        WINED3DCAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *GetDirect3D)(
+        IWineD3DDevice* This,
+        IWineD3D **d3d);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetDisplayMode)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        const WINED3DDISPLAYMODE *mode);
+
+    UINT (STDMETHODCALLTYPE *GetNumberOfSwapChains)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DRASTER_STATUS *raster_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetSwapChain)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        IWineD3DSwapChain **swapchain);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetDialogBoxMode)(
+        IWineD3DDevice* This,
+        BOOL enable_dialogs);
+
+    HRESULT (STDMETHODCALLTYPE *SetCursorProperties)(
+        IWineD3DDevice* This,
+        UINT x_hotspot,
+        UINT y_hotspot,
+        IWineD3DSurface *cursor_surface);
+
+    void (STDMETHODCALLTYPE *SetCursorPosition)(
+        IWineD3DDevice* This,
+        int x_screen_space,
+        int y_screen_space,
+        DWORD flags);
+
+    BOOL (STDMETHODCALLTYPE *ShowCursor)(
+        IWineD3DDevice* This,
+        BOOL show);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipPlane)(
+        IWineD3DDevice* This,
+        DWORD plane_idx,
+        const float *plane);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipPlane)(
+        IWineD3DDevice* This,
+        DWORD plane_idx,
+        float *plane);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipStatus)(
+        IWineD3DDevice* This,
+        const WINED3DCLIPSTATUS *clip_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipStatus)(
+        IWineD3DDevice* This,
+        WINED3DCLIPSTATUS *clip_status);
+
+    HRESULT (STDMETHODCALLTYPE *SetCurrentTexturePalette)(
+        IWineD3DDevice* This,
+        UINT palette_number);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTexturePalette)(
+        IWineD3DDevice* This,
+        UINT *palette_number);
+
+    HRESULT (STDMETHODCALLTYPE *SetDepthStencilSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *depth_stencil);
+
+    HRESULT (STDMETHODCALLTYPE *GetDepthStencilSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface **depth_stencil);
+
+    void (STDMETHODCALLTYPE *SetGammaRamp)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp);
+
+    void (STDMETHODCALLTYPE *GetGammaRamp)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DGAMMARAMP *ramp);
+
+    HRESULT (STDMETHODCALLTYPE *SetIndexBuffer)(
+        IWineD3DDevice* This,
+        IWineD3DBuffer *index_buffer,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexBuffer)(
+        IWineD3DDevice* This,
+        IWineD3DBuffer **index_buffer);
+
+    HRESULT (STDMETHODCALLTYPE *SetBaseVertexIndex)(
+        IWineD3DDevice* This,
+        INT base_index);
+
+    HRESULT (STDMETHODCALLTYPE *GetBaseVertexIndex)(
+        IWineD3DDevice* This,
+        INT *base_index);
+
+    HRESULT (STDMETHODCALLTYPE *SetLight)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        const WINED3DLIGHT *light);
+
+    HRESULT (STDMETHODCALLTYPE *GetLight)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        WINED3DLIGHT *light);
+
+    HRESULT (STDMETHODCALLTYPE *SetLightEnable)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        BOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *GetLightEnable)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        BOOL *enable);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaterial)(
+        IWineD3DDevice* This,
+        const WINED3DMATERIAL *material);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaterial)(
+        IWineD3DDevice* This,
+        WINED3DMATERIAL *material);
+
+    HRESULT (STDMETHODCALLTYPE *SetNPatchMode)(
+        IWineD3DDevice* This,
+        float segments);
+
+    float (STDMETHODCALLTYPE *GetNPatchMode)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPaletteEntries)(
+        IWineD3DDevice* This,
+        UINT palette_number,
+        const PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IWineD3DDevice* This,
+        UINT palette_number,
+        PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShader)(
+        IWineD3DDevice* This,
+        IWineD3DPixelShader *shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShader)(
+        IWineD3DDevice* This,
+        IWineD3DPixelShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderState)(
+        IWineD3DDevice* This,
+        WINED3DRENDERSTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderState)(
+        IWineD3DDevice* This,
+        WINED3DRENDERSTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderTarget)(
+        IWineD3DDevice* This,
+        DWORD render_target_idx,
+        IWineD3DSurface *render_target,
+        BOOL set_viewport);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderTarget)(
+        IWineD3DDevice* This,
+        DWORD render_target_idx,
+        IWineD3DSurface **render_target);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrontBackBuffers)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *front,
+        IWineD3DSurface *back);
+
+    HRESULT (STDMETHODCALLTYPE *SetSamplerState)(
+        IWineD3DDevice* This,
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetSamplerState)(
+        IWineD3DDevice* This,
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetScissorRect)(
+        IWineD3DDevice* This,
+        const RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *GetScissorRect)(
+        IWineD3DDevice* This,
+        RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *SetSoftwareVertexProcessing)(
+        IWineD3DDevice* This,
+        BOOL software);
+
+    BOOL (STDMETHODCALLTYPE *GetSoftwareVertexProcessing)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSource)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        IWineD3DBuffer *buffer,
+        UINT offset,
+        UINT stride);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSource)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        IWineD3DBuffer **buffer,
+        UINT *offset,
+        UINT *stride);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSourceFreq)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        UINT divider);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSourceFreq)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        UINT *divider);
+
+    HRESULT (STDMETHODCALLTYPE *SetTexture)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        IWineD3DBaseTexture *texture);
+
+    HRESULT (STDMETHODCALLTYPE *GetTexture)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        IWineD3DBaseTexture **texture);
+
+    HRESULT (STDMETHODCALLTYPE *SetTextureStageState)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextureStageState)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *GetTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration *declaration);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShader)(
+        IWineD3DDevice* This,
+        IWineD3DVertexShader *shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShader)(
+        IWineD3DDevice* This,
+        IWineD3DVertexShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewport)(
+        IWineD3DDevice* This,
+        const WINED3DVIEWPORT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *GetViewport)(
+        IWineD3DDevice* This,
+        WINED3DVIEWPORT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *MultiplyTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *ValidateDevice)(
+        IWineD3DDevice* This,
+        DWORD *num_passes);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessVertices)(
+        IWineD3DDevice* This,
+        UINT src_start_idx,
+        UINT dst_idx,
+        UINT vertex_count,
+        IWineD3DBuffer *dest_buffer,
+        IWineD3DVertexDeclaration *declaration,
+        DWORD flags,
+        DWORD DestFVF);
+
+    HRESULT (STDMETHODCALLTYPE *BeginStateBlock)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndStateBlock)(
+        IWineD3DDevice* This,
+        IWineD3DStateBlock **stateblock);
+
+    HRESULT (STDMETHODCALLTYPE *BeginScene)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndScene)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *Present)(
+        IWineD3DDevice* This,
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IWineD3DDevice* This,
+        DWORD rect_count,
+        const WINED3DRECT *rects,
+        DWORD flags,
+        WINED3DCOLOR color,
+        float z,
+        DWORD stencil);
+
+    void (STDMETHODCALLTYPE *ClearRendertargetView)(
+        IWineD3DDevice* This,
+        IWineD3DRendertargetView *rendertarget_view,
+        const float color[4]);
+
+    void (STDMETHODCALLTYPE *SetPrimitiveType)(
+        IWineD3DDevice* This,
+        WINED3DPRIMITIVETYPE primitive_topology);
+
+    void (STDMETHODCALLTYPE *GetPrimitiveType)(
+        IWineD3DDevice* This,
+        WINED3DPRIMITIVETYPE *primitive_topology);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitive)(
+        IWineD3DDevice* This,
+        UINT start_vertex,
+        UINT vertex_count);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitive)(
+        IWineD3DDevice* This,
+        UINT start_idx,
+        UINT index_count);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitiveUP)(
+        IWineD3DDevice* This,
+        UINT vertex_count,
+        const void *stream_data,
+        UINT stream_stride);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveUP)(
+        IWineD3DDevice* This,
+        UINT index_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format,
+        const void *stream_data,
+        UINT stream_stride);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitiveStrided)(
+        IWineD3DDevice* This,
+        UINT vertex_count,
+        const WineDirect3DVertexStridedData *strided_data);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveStrided)(
+        IWineD3DDevice* This,
+        UINT index_count,
+        const WineDirect3DVertexStridedData *strided_data,
+        UINT vertex_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format);
+
+    HRESULT (STDMETHODCALLTYPE *DrawRectPatch)(
+        IWineD3DDevice* This,
+        UINT handle,
+        const float *num_segs,
+        const WINED3DRECTPATCH_INFO *rect_patch_info);
+
+    HRESULT (STDMETHODCALLTYPE *DrawTriPatch)(
+        IWineD3DDevice* This,
+        UINT handle,
+        const float *num_segs,
+        const WINED3DTRIPATCH_INFO *tri_patch_info);
+
+    HRESULT (STDMETHODCALLTYPE *DeletePatch)(
+        IWineD3DDevice* This,
+        UINT handle);
+
+    HRESULT (STDMETHODCALLTYPE *ColorFill)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *surface,
+        const WINED3DRECT *rect,
+        WINED3DCOLOR color);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateTexture)(
+        IWineD3DDevice* This,
+        IWineD3DBaseTexture *src_texture,
+        IWineD3DBaseTexture *dst_texture);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const POINT *dst_point);
+
+    HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        IWineD3DSurface *dst_surface);
+
+    HRESULT (STDMETHODCALLTYPE *EnumResources)(
+        IWineD3DDevice* This,
+        HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceFromDC)(
+        IWineD3DDevice* This,
+        HDC dc,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *AcquireFocusWindow)(
+        IWineD3DDevice* This,
+        HWND window);
+
+    void (STDMETHODCALLTYPE *ReleaseFocusWindow)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *AddSwapChain)(
+        IWineD3DDevice* This,
+        IWineD3DSwapChain *swapchain);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveSwapChain)(
+        IWineD3DDevice* This,
+        IWineD3DSwapChain *swapchain);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *VolBlt)(IWineD3DDevice *iface,
+            IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+            const WINED3DBOX *pSrcBoxArg,
+            const struct VBOXPOINT3D *pDstPoin3D
+            );
+
+    HRESULT (STDMETHODCALLTYPE *VolTexBlt)(IWineD3DDevice *iface,
+            IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+            const WINED3DBOX *pSrcBoxArg,
+            const struct VBOXPOINT3D *pDstPoin3D
+            );
+
+    HRESULT (STDMETHODCALLTYPE *FlushToHost)(
+            IWineD3DDevice *iface);
+
+    HRESULT (STDMETHODCALLTYPE *Finish)(
+        IWineD3DDevice* This);
+#endif
+
+    END_INTERFACE
+} IWineD3DDeviceVtbl;
+interface IWineD3DDevice {
+    CONST_VTBL IWineD3DDeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDevice_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DDevice_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DDevice methods ***/
+#define IWineD3DDevice_CreateBuffer(This,desc,data,parent,parent_ops,buffer) (This)->lpVtbl->CreateBuffer(This,desc,data,parent,parent_ops,buffer)
+#define IWineD3DDevice_CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops) (This)->lpVtbl->CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops) (This)->lpVtbl->CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateStateBlock(This,type,stateblock,parent) (This)->lpVtbl->CreateStateBlock(This,type,stateblock,parent)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateRendertargetView(This,resource,parent,rendertarget_view) (This)->lpVtbl->CreateRendertargetView(This,resource,parent,rendertarget_view)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateQuery(This,type,query,parent) (This)->lpVtbl->CreateQuery(This,type,query,parent)
+#define IWineD3DDevice_CreateSwapChain(This,present_parameters,swapchain,parent,surface_type) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain,parent,surface_type)
+#define IWineD3DDevice_CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count) (This)->lpVtbl->CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count)
+#define IWineD3DDevice_CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf) (This)->lpVtbl->CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf)
+#define IWineD3DDevice_CreateVertexShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateVertexShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePixelShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreatePixelShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePalette(This,flags,palette_entry,palette,parent) (This)->lpVtbl->CreatePalette(This,flags,palette_entry,palette,parent)
+#define IWineD3DDevice_Init3D(This,present_parameters) (This)->lpVtbl->Init3D(This,present_parameters)
+#define IWineD3DDevice_InitGDI(This,present_parameters) (This)->lpVtbl->InitGDI(This,present_parameters)
+#define IWineD3DDevice_Uninit3D(This,destroy_swapchain_callback) (This)->lpVtbl->Uninit3D(This,destroy_swapchain_callback)
+#define IWineD3DDevice_UninitGDI(This,destroy_swapchain_callback) (This)->lpVtbl->UninitGDI(This,destroy_swapchain_callback)
+#define IWineD3DDevice_SetMultithreaded(This) (This)->lpVtbl->SetMultithreaded(This)
+#define IWineD3DDevice_EvictManagedResources(This) (This)->lpVtbl->EvictManagedResources(This)
+#define IWineD3DDevice_GetAvailableTextureMem(This) (This)->lpVtbl->GetAvailableTextureMem(This)
+#define IWineD3DDevice_GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DDevice_GetCreationParameters(This,creation_parameters) (This)->lpVtbl->GetCreationParameters(This,creation_parameters)
+#define IWineD3DDevice_GetDeviceCaps(This,caps) (This)->lpVtbl->GetDeviceCaps(This,caps)
+#define IWineD3DDevice_GetDirect3D(This,d3d) (This)->lpVtbl->GetDirect3D(This,d3d)
+#define IWineD3DDevice_GetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->GetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_SetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->SetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_GetNumberOfSwapChains(This) (This)->lpVtbl->GetNumberOfSwapChains(This)
+#define IWineD3DDevice_GetRasterStatus(This,swapchain_idx,raster_status) (This)->lpVtbl->GetRasterStatus(This,swapchain_idx,raster_status)
+#define IWineD3DDevice_GetSwapChain(This,swapchain_idx,swapchain) (This)->lpVtbl->GetSwapChain(This,swapchain_idx,swapchain)
+#define IWineD3DDevice_Reset(This,present_parameters) (This)->lpVtbl->Reset(This,present_parameters)
+#define IWineD3DDevice_SetDialogBoxMode(This,enable_dialogs) (This)->lpVtbl->SetDialogBoxMode(This,enable_dialogs)
+#define IWineD3DDevice_SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface) (This)->lpVtbl->SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface)
+#define IWineD3DDevice_SetCursorPosition(This,x_screen_space,y_screen_space,flags) (This)->lpVtbl->SetCursorPosition(This,x_screen_space,y_screen_space,flags)
+#define IWineD3DDevice_ShowCursor(This,show) (This)->lpVtbl->ShowCursor(This,show)
+#define IWineD3DDevice_SetClipPlane(This,plane_idx,plane) (This)->lpVtbl->SetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_GetClipPlane(This,plane_idx,plane) (This)->lpVtbl->GetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_SetClipStatus(This,clip_status) (This)->lpVtbl->SetClipStatus(This,clip_status)
+#define IWineD3DDevice_GetClipStatus(This,clip_status) (This)->lpVtbl->GetClipStatus(This,clip_status)
+#define IWineD3DDevice_SetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->SetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_GetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->GetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_SetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->SetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_GetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->GetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_SetGammaRamp(This,swapchain_idx,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,swapchain_idx,flags,ramp)
+#define IWineD3DDevice_GetGammaRamp(This,swapchain_idx,ramp) (This)->lpVtbl->GetGammaRamp(This,swapchain_idx,ramp)
+#define IWineD3DDevice_SetIndexBuffer(This,index_buffer,format) (This)->lpVtbl->SetIndexBuffer(This,index_buffer,format)
+#define IWineD3DDevice_GetIndexBuffer(This,index_buffer) (This)->lpVtbl->GetIndexBuffer(This,index_buffer)
+#define IWineD3DDevice_SetBaseVertexIndex(This,base_index) (This)->lpVtbl->SetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_GetBaseVertexIndex(This,base_index) (This)->lpVtbl->GetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_SetLight(This,light_idx,light) (This)->lpVtbl->SetLight(This,light_idx,light)
+#define IWineD3DDevice_GetLight(This,light_idx,light) (This)->lpVtbl->GetLight(This,light_idx,light)
+#define IWineD3DDevice_SetLightEnable(This,light_idx,enable) (This)->lpVtbl->SetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_GetLightEnable(This,light_idx,enable) (This)->lpVtbl->GetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_SetMaterial(This,material) (This)->lpVtbl->SetMaterial(This,material)
+#define IWineD3DDevice_GetMaterial(This,material) (This)->lpVtbl->GetMaterial(This,material)
+#define IWineD3DDevice_SetNPatchMode(This,segments) (This)->lpVtbl->SetNPatchMode(This,segments)
+#define IWineD3DDevice_GetNPatchMode(This) (This)->lpVtbl->GetNPatchMode(This)
+#define IWineD3DDevice_SetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->SetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_GetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_SetPixelShader(This,shader) (This)->lpVtbl->SetPixelShader(This,shader)
+#define IWineD3DDevice_GetPixelShader(This,shader) (This)->lpVtbl->GetPixelShader(This,shader)
+#define IWineD3DDevice_SetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetRenderState(This,state,value) (This)->lpVtbl->SetRenderState(This,state,value)
+#define IWineD3DDevice_GetRenderState(This,state,value) (This)->lpVtbl->GetRenderState(This,state,value)
+#define IWineD3DDevice_SetRenderTarget(This,render_target_idx,render_target,set_viewport) (This)->lpVtbl->SetRenderTarget(This,render_target_idx,render_target,set_viewport)
+#define IWineD3DDevice_GetRenderTarget(This,render_target_idx,render_target) (This)->lpVtbl->GetRenderTarget(This,render_target_idx,render_target)
+#define IWineD3DDevice_SetFrontBackBuffers(This,front,back) (This)->lpVtbl->SetFrontBackBuffers(This,front,back)
+#define IWineD3DDevice_SetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->SetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_GetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->GetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_SetScissorRect(This,rect) (This)->lpVtbl->SetScissorRect(This,rect)
+#define IWineD3DDevice_GetScissorRect(This,rect) (This)->lpVtbl->GetScissorRect(This,rect)
+#define IWineD3DDevice_SetSoftwareVertexProcessing(This,software) (This)->lpVtbl->SetSoftwareVertexProcessing(This,software)
+#define IWineD3DDevice_GetSoftwareVertexProcessing(This) (This)->lpVtbl->GetSoftwareVertexProcessing(This)
+#define IWineD3DDevice_SetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->SetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_GetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->GetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_SetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->SetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_GetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->GetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_SetTexture(This,stage,texture) (This)->lpVtbl->SetTexture(This,stage,texture)
+#define IWineD3DDevice_GetTexture(This,stage,texture) (This)->lpVtbl->GetTexture(This,stage,texture)
+#define IWineD3DDevice_SetTextureStageState(This,stage,state,value) (This)->lpVtbl->SetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_GetTextureStageState(This,stage,state,value) (This)->lpVtbl->GetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_SetTransform(This,state,matrix) (This)->lpVtbl->SetTransform(This,state,matrix)
+#define IWineD3DDevice_GetTransform(This,state,matrix) (This)->lpVtbl->GetTransform(This,state,matrix)
+#define IWineD3DDevice_SetVertexDeclaration(This,declaration) (This)->lpVtbl->SetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_GetVertexDeclaration(This,declaration) (This)->lpVtbl->GetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_SetVertexShader(This,shader) (This)->lpVtbl->SetVertexShader(This,shader)
+#define IWineD3DDevice_GetVertexShader(This,shader) (This)->lpVtbl->GetVertexShader(This,shader)
+#define IWineD3DDevice_SetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetViewport(This,viewport) (This)->lpVtbl->SetViewport(This,viewport)
+#define IWineD3DDevice_GetViewport(This,viewport) (This)->lpVtbl->GetViewport(This,viewport)
+#define IWineD3DDevice_MultiplyTransform(This,state,matrix) (This)->lpVtbl->MultiplyTransform(This,state,matrix)
+#define IWineD3DDevice_ValidateDevice(This,num_passes) (This)->lpVtbl->ValidateDevice(This,num_passes)
+#define IWineD3DDevice_ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF) (This)->lpVtbl->ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF)
+#define IWineD3DDevice_BeginStateBlock(This) (This)->lpVtbl->BeginStateBlock(This)
+#define IWineD3DDevice_EndStateBlock(This,stateblock) (This)->lpVtbl->EndStateBlock(This,stateblock)
+#define IWineD3DDevice_BeginScene(This) (This)->lpVtbl->BeginScene(This)
+#define IWineD3DDevice_EndScene(This) (This)->lpVtbl->EndScene(This)
+#define IWineD3DDevice_Present(This,src_rect,dst_rect,dst_window_override,dirty_region) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region)
+#define IWineD3DDevice_Clear(This,rect_count,rects,flags,color,z,stencil) (This)->lpVtbl->Clear(This,rect_count,rects,flags,color,z,stencil)
+#define IWineD3DDevice_ClearRendertargetView(This,rendertarget_view,color) (This)->lpVtbl->ClearRendertargetView(This,rendertarget_view,color)
+#define IWineD3DDevice_SetPrimitiveType(This,primitive_topology) (This)->lpVtbl->SetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_GetPrimitiveType(This,primitive_topology) (This)->lpVtbl->GetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_DrawPrimitive(This,start_vertex,vertex_count) (This)->lpVtbl->DrawPrimitive(This,start_vertex,vertex_count)
+#define IWineD3DDevice_DrawIndexedPrimitive(This,start_idx,index_count) (This)->lpVtbl->DrawIndexedPrimitive(This,start_idx,index_count)
+#define IWineD3DDevice_DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride) (This)->lpVtbl->DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride)
+#define IWineD3DDevice_DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride) (This)->lpVtbl->DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride)
+#define IWineD3DDevice_DrawPrimitiveStrided(This,vertex_count,strided_data) (This)->lpVtbl->DrawPrimitiveStrided(This,vertex_count,strided_data)
+#define IWineD3DDevice_DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format) (This)->lpVtbl->DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format)
+#define IWineD3DDevice_DrawRectPatch(This,handle,num_segs,rect_patch_info) (This)->lpVtbl->DrawRectPatch(This,handle,num_segs,rect_patch_info)
+#define IWineD3DDevice_DrawTriPatch(This,handle,num_segs,tri_patch_info) (This)->lpVtbl->DrawTriPatch(This,handle,num_segs,tri_patch_info)
+#define IWineD3DDevice_DeletePatch(This,handle) (This)->lpVtbl->DeletePatch(This,handle)
+#define IWineD3DDevice_ColorFill(This,surface,rect,color) (This)->lpVtbl->ColorFill(This,surface,rect,color)
+#define IWineD3DDevice_UpdateTexture(This,src_texture,dst_texture) (This)->lpVtbl->UpdateTexture(This,src_texture,dst_texture)
+#define IWineD3DDevice_UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point) (This)->lpVtbl->UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point)
+#define IWineD3DDevice_GetFrontBufferData(This,swapchain_idx,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,swapchain_idx,dst_surface)
+#define IWineD3DDevice_EnumResources(This,callback,data) (This)->lpVtbl->EnumResources(This,callback,data)
+#define IWineD3DDevice_GetSurfaceFromDC(This,dc,surface) (This)->lpVtbl->GetSurfaceFromDC(This,dc,surface)
+#define IWineD3DDevice_AcquireFocusWindow(This,window) (This)->lpVtbl->AcquireFocusWindow(This,window)
+#define IWineD3DDevice_ReleaseFocusWindow(This) (This)->lpVtbl->ReleaseFocusWindow(This)
+#define IWineD3DDevice_AddSwapChain(This,swapchain) (This)->lpVtbl->AddSwapChain(This,swapchain)
+#define IWineD3DDevice_RemoveSwapChain(This,swapchain) (This)->lpVtbl->RemoveSwapChain(This,swapchain)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DDevice_VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_FlushToHost(This) (This)->lpVtbl->FlushToHost(This)
+#define IWineD3DDevice_Finish(This) (This)->lpVtbl->Finish(This)
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateBuffer_Proxy(
+    IWineD3DDevice* This,
+    struct wined3d_buffer_desc *desc,
+    const void *data,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    IWineD3DBuffer **buffer);
+void __RPC_STUB IWineD3DDevice_CreateBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT length,
+    DWORD usage,
+    WINED3DPOOL pool,
+    IWineD3DBuffer **vertex_buffer,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT length,
+    DWORD usage,
+    WINED3DPOOL pool,
+    IWineD3DBuffer **index_buffer,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateStateBlock_Proxy(
+    IWineD3DDevice* This,
+    WINED3DSTATEBLOCKTYPE type,
+    IWineD3DStateBlock **stateblock,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSurface_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    BOOL lockable,
+    BOOL discard,
+    UINT level,
+    IWineD3DSurface **surface,
+    DWORD usage,
+    WINED3DPOOL pool,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    WINED3DSURFTYPE surface_type,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateRendertargetView_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DResource *resource,
+    IUnknown *parent,
+    IWineD3DRendertargetView **rendertarget_view);
+void __RPC_STUB IWineD3DDevice_CreateRendertargetView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolumeTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT depth,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DVolumeTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolumeTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolume_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT depth,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DVolume **volume,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateCubeTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT edge_length,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DCubeTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateCubeTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateQuery_Proxy(
+    IWineD3DDevice* This,
+    WINED3DQUERYTYPE type,
+    IWineD3DQuery **query,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateQuery_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSwapChain_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters,
+    IWineD3DSwapChain **swapchain,
+    IUnknown *parent,
+    WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3DDevice_CreateSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    const WINED3DVERTEXELEMENT *elements,
+    UINT element_count);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclarationFromFVF_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    DWORD fvf);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclarationFromFVF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *function,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DVertexShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateGeometryShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *byte_code,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DGeometryShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateGeometryShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePixelShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *function,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DPixelShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreatePixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePalette_Proxy(
+    IWineD3DDevice* This,
+    DWORD flags,
+    const PALETTEENTRY *palette_entry,
+    IWineD3DPalette **palette,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreatePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Init3D_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Init3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_InitGDI_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_InitGDI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Uninit3D_Proxy(
+    IWineD3DDevice* This,
+    ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_Uninit3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UninitGDI_Proxy(
+    IWineD3DDevice* This,
+    ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_UninitGDI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetMultithreaded_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_SetMultithreaded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EvictManagedResources_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EvictManagedResources_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetAvailableTextureMem_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetAvailableTextureMem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBackBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    UINT backbuffer_idx,
+    WINED3DBACKBUFFER_TYPE backbuffer_type,
+    IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DDevice_GetBackBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCreationParameters_Proxy(
+    IWineD3DDevice* This,
+    WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+void __RPC_STUB IWineD3DDevice_GetCreationParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDeviceCaps_Proxy(
+    IWineD3DDevice* This,
+    WINED3DCAPS *caps);
+void __RPC_STUB IWineD3DDevice_GetDeviceCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDirect3D_Proxy(
+    IWineD3DDevice* This,
+    IWineD3D **d3d);
+void __RPC_STUB IWineD3DDevice_GetDirect3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDisplayMode_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_GetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDisplayMode_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    const WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_SetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetNumberOfSwapChains_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNumberOfSwapChains_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRasterStatus_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DDevice_GetRasterStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSwapChain_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDevice_GetSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Reset_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDialogBoxMode_Proxy(
+    IWineD3DDevice* This,
+    BOOL enable_dialogs);
+void __RPC_STUB IWineD3DDevice_SetDialogBoxMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCursorProperties_Proxy(
+    IWineD3DDevice* This,
+    UINT x_hotspot,
+    UINT y_hotspot,
+    IWineD3DSurface *cursor_surface);
+void __RPC_STUB IWineD3DDevice_SetCursorProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetCursorPosition_Proxy(
+    IWineD3DDevice* This,
+    int x_screen_space,
+    int y_screen_space,
+    DWORD flags);
+void __RPC_STUB IWineD3DDevice_SetCursorPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_ShowCursor_Proxy(
+    IWineD3DDevice* This,
+    BOOL show);
+void __RPC_STUB IWineD3DDevice_ShowCursor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipPlane_Proxy(
+    IWineD3DDevice* This,
+    DWORD plane_idx,
+    const float *plane);
+void __RPC_STUB IWineD3DDevice_SetClipPlane_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipPlane_Proxy(
+    IWineD3DDevice* This,
+    DWORD plane_idx,
+    float *plane);
+void __RPC_STUB IWineD3DDevice_GetClipPlane_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipStatus_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_SetClipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipStatus_Proxy(
+    IWineD3DDevice* This,
+    WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_GetClipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCurrentTexturePalette_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number);
+void __RPC_STUB IWineD3DDevice_SetCurrentTexturePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCurrentTexturePalette_Proxy(
+    IWineD3DDevice* This,
+    UINT *palette_number);
+void __RPC_STUB IWineD3DDevice_GetCurrentTexturePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDepthStencilSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *depth_stencil);
+void __RPC_STUB IWineD3DDevice_SetDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDepthStencilSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface **depth_stencil);
+void __RPC_STUB IWineD3DDevice_GetDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetGammaRamp_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    DWORD flags,
+    const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_SetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetGammaRamp_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_GetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBuffer *index_buffer,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3DDevice_SetIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBuffer **index_buffer);
+void __RPC_STUB IWineD3DDevice_GetIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetBaseVertexIndex_Proxy(
+    IWineD3DDevice* This,
+    INT base_index);
+void __RPC_STUB IWineD3DDevice_SetBaseVertexIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBaseVertexIndex_Proxy(
+    IWineD3DDevice* This,
+    INT *base_index);
+void __RPC_STUB IWineD3DDevice_GetBaseVertexIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLight_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    const WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_SetLight_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLight_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_GetLight_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLightEnable_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    BOOL enable);
+void __RPC_STUB IWineD3DDevice_SetLightEnable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLightEnable_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    BOOL *enable);
+void __RPC_STUB IWineD3DDevice_GetLightEnable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetMaterial_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_SetMaterial_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetMaterial_Proxy(
+    IWineD3DDevice* This,
+    WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_GetMaterial_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetNPatchMode_Proxy(
+    IWineD3DDevice* This,
+    float segments);
+void __RPC_STUB IWineD3DDevice_SetNPatchMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+float STDMETHODCALLTYPE IWineD3DDevice_GetNPatchMode_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNPatchMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPaletteEntries_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number,
+    const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_SetPaletteEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPaletteEntries_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number,
+    PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_GetPaletteEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DPixelShader *shader);
+void __RPC_STUB IWineD3DDevice_SetPixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DPixelShader **shader);
+void __RPC_STUB IWineD3DDevice_GetPixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderState_Proxy(
+    IWineD3DDevice* This,
+    WINED3DRENDERSTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetRenderState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderState_Proxy(
+    IWineD3DDevice* This,
+    WINED3DRENDERSTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetRenderState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderTarget_Proxy(
+    IWineD3DDevice* This,
+    DWORD render_target_idx,
+    IWineD3DSurface *render_target,
+    BOOL set_viewport);
+void __RPC_STUB IWineD3DDevice_SetRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderTarget_Proxy(
+    IWineD3DDevice* This,
+    DWORD render_target_idx,
+    IWineD3DSurface **render_target);
+void __RPC_STUB IWineD3DDevice_GetRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetFrontBackBuffers_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *front,
+    IWineD3DSurface *back);
+void __RPC_STUB IWineD3DDevice_SetFrontBackBuffers_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSamplerState_Proxy(
+    IWineD3DDevice* This,
+    DWORD sampler_idx,
+    WINED3DSAMPLERSTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetSamplerState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSamplerState_Proxy(
+    IWineD3DDevice* This,
+    DWORD sampler_idx,
+    WINED3DSAMPLERSTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetSamplerState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetScissorRect_Proxy(
+    IWineD3DDevice* This,
+    const RECT *rect);
+void __RPC_STUB IWineD3DDevice_SetScissorRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetScissorRect_Proxy(
+    IWineD3DDevice* This,
+    RECT *rect);
+void __RPC_STUB IWineD3DDevice_GetScissorRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSoftwareVertexProcessing_Proxy(
+    IWineD3DDevice* This,
+    BOOL software);
+void __RPC_STUB IWineD3DDevice_SetSoftwareVertexProcessing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_GetSoftwareVertexProcessing_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetSoftwareVertexProcessing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSource_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    IWineD3DBuffer *buffer,
+    UINT offset,
+    UINT stride);
+void __RPC_STUB IWineD3DDevice_SetStreamSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSource_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    IWineD3DBuffer **buffer,
+    UINT *offset,
+    UINT *stride);
+void __RPC_STUB IWineD3DDevice_GetStreamSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSourceFreq_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    UINT divider);
+void __RPC_STUB IWineD3DDevice_SetStreamSourceFreq_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSourceFreq_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    UINT *divider);
+void __RPC_STUB IWineD3DDevice_GetStreamSourceFreq_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTexture_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    IWineD3DBaseTexture *texture);
+void __RPC_STUB IWineD3DDevice_SetTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTexture_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    IWineD3DBaseTexture **texture);
+void __RPC_STUB IWineD3DDevice_GetTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTextureStageState_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    WINED3DTEXTURESTAGESTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetTextureStageState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTextureStageState_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    WINED3DTEXTURESTAGESTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetTextureStageState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_SetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_GetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration *declaration);
+void __RPC_STUB IWineD3DDevice_SetVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration);
+void __RPC_STUB IWineD3DDevice_GetVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexShader *shader);
+void __RPC_STUB IWineD3DDevice_SetVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexShader **shader);
+void __RPC_STUB IWineD3DDevice_GetVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetViewport_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_SetViewport_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetViewport_Proxy(
+    IWineD3DDevice* This,
+    WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_GetViewport_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_MultiplyTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_MultiplyTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ValidateDevice_Proxy(
+    IWineD3DDevice* This,
+    DWORD *num_passes);
+void __RPC_STUB IWineD3DDevice_ValidateDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ProcessVertices_Proxy(
+    IWineD3DDevice* This,
+    UINT src_start_idx,
+    UINT dst_idx,
+    UINT vertex_count,
+    IWineD3DBuffer *dest_buffer,
+    IWineD3DVertexDeclaration *declaration,
+    DWORD flags,
+    DWORD DestFVF);
+void __RPC_STUB IWineD3DDevice_ProcessVertices_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginStateBlock_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndStateBlock_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DStateBlock **stateblock);
+void __RPC_STUB IWineD3DDevice_EndStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginScene_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginScene_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndScene_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EndScene_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Present_Proxy(
+    IWineD3DDevice* This,
+    const RECT *src_rect,
+    const RECT *dst_rect,
+    HWND dst_window_override,
+    const RGNDATA *dirty_region);
+void __RPC_STUB IWineD3DDevice_Present_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Clear_Proxy(
+    IWineD3DDevice* This,
+    DWORD rect_count,
+    const WINED3DRECT *rects,
+    DWORD flags,
+    WINED3DCOLOR color,
+    float z,
+    DWORD stencil);
+void __RPC_STUB IWineD3DDevice_Clear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ClearRendertargetView_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DRendertargetView *rendertarget_view,
+    const float color[4]);
+void __RPC_STUB IWineD3DDevice_ClearRendertargetView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetPrimitiveType_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRIMITIVETYPE primitive_topology);
+void __RPC_STUB IWineD3DDevice_SetPrimitiveType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetPrimitiveType_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRIMITIVETYPE *primitive_topology);
+void __RPC_STUB IWineD3DDevice_GetPrimitiveType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitive_Proxy(
+    IWineD3DDevice* This,
+    UINT start_vertex,
+    UINT vertex_count);
+void __RPC_STUB IWineD3DDevice_DrawPrimitive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitive_Proxy(
+    IWineD3DDevice* This,
+    UINT start_idx,
+    UINT index_count);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveUP_Proxy(
+    IWineD3DDevice* This,
+    UINT vertex_count,
+    const void *stream_data,
+    UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveUP_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveUP_Proxy(
+    IWineD3DDevice* This,
+    UINT index_count,
+    const void *index_data,
+    WINED3DFORMAT index_data_format,
+    const void *stream_data,
+    UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveUP_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveStrided_Proxy(
+    IWineD3DDevice* This,
+    UINT vertex_count,
+    const WineDirect3DVertexStridedData *strided_data);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveStrided_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveStrided_Proxy(
+    IWineD3DDevice* This,
+    UINT index_count,
+    const WineDirect3DVertexStridedData *strided_data,
+    UINT vertex_count,
+    const void *index_data,
+    WINED3DFORMAT index_data_format);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveStrided_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawRectPatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle,
+    const float *num_segs,
+    const WINED3DRECTPATCH_INFO *rect_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawRectPatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawTriPatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle,
+    const float *num_segs,
+    const WINED3DTRIPATCH_INFO *tri_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawTriPatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DeletePatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle);
+void __RPC_STUB IWineD3DDevice_DeletePatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ColorFill_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *surface,
+    const WINED3DRECT *rect,
+    WINED3DCOLOR color);
+void __RPC_STUB IWineD3DDevice_ColorFill_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateTexture_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBaseTexture *src_texture,
+    IWineD3DBaseTexture *dst_texture);
+void __RPC_STUB IWineD3DDevice_UpdateTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    IWineD3DSurface *dst_surface,
+    const POINT *dst_point);
+void __RPC_STUB IWineD3DDevice_UpdateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetFrontBufferData_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DDevice_GetFrontBufferData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EnumResources_Proxy(
+    IWineD3DDevice* This,
+    HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+    void *data);
+void __RPC_STUB IWineD3DDevice_EnumResources_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSurfaceFromDC_Proxy(
+    IWineD3DDevice* This,
+    HDC dc,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDevice_GetSurfaceFromDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_AcquireFocusWindow_Proxy(
+    IWineD3DDevice* This,
+    HWND window);
+void __RPC_STUB IWineD3DDevice_AcquireFocusWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ReleaseFocusWindow_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_ReleaseFocusWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DDevice_INTERFACE_DEFINED__ */
+
+IWineD3D * STDMETHODCALLTYPE  WineDirect3DCreate(UINT dxVersion,IUnknown *parent);
+
+IWineD3DClipper * STDMETHODCALLTYPE  WineDirect3DCreateClipper(IUnknown *parent);
+
+#ifdef VBOX_WINE_NO_LOCK
+#define wined3d_mutex_lock() do {} while (0)
+#define wined3d_mutex_unlock() do {} while (0)
+#else
+void STDMETHODCALLTYPE  wined3d_mutex_lock(void);
+
+void STDMETHODCALLTYPE  wined3d_mutex_unlock(void);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WINED3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/shader.c b/src/VBox/Devices/Graphics/shaderlib/shader.c
new file mode 100644
index 0000000..ff8e0d7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shader.c
@@ -0,0 +1,2469 @@
+/*
+ * Copyright 2002-2003 Jason Edmeades
+ * Copyright 2002-2003 Raphael Junqueira
+ * Copyright 2004 Christian Costa
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2006 Ivan Gyurdiev
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+WINE_DECLARE_DEBUG_CHANNEL(d3d);
+
+static const char *shader_opcode_names[] =
+{
+    /* WINED3DSIH_ABS           */ "abs",
+    /* WINED3DSIH_ADD           */ "add",
+    /* WINED3DSIH_BEM           */ "bem",
+    /* WINED3DSIH_BREAK         */ "break",
+    /* WINED3DSIH_BREAKC        */ "breakc",
+    /* WINED3DSIH_BREAKP        */ "breakp",
+    /* WINED3DSIH_CALL          */ "call",
+    /* WINED3DSIH_CALLNZ        */ "callnz",
+    /* WINED3DSIH_CMP           */ "cmp",
+    /* WINED3DSIH_CND           */ "cnd",
+    /* WINED3DSIH_CRS           */ "crs",
+    /* WINED3DSIH_CUT           */ "cut",
+    /* WINED3DSIH_DCL           */ "dcl",
+    /* WINED3DSIH_DEF           */ "def",
+    /* WINED3DSIH_DEFB          */ "defb",
+    /* WINED3DSIH_DEFI          */ "defi",
+    /* WINED3DSIH_DP2ADD        */ "dp2add",
+    /* WINED3DSIH_DP3           */ "dp3",
+    /* WINED3DSIH_DP4           */ "dp4",
+    /* WINED3DSIH_DST           */ "dst",
+    /* WINED3DSIH_DSX           */ "dsx",
+    /* WINED3DSIH_DSY           */ "dsy",
+    /* WINED3DSIH_ELSE          */ "else",
+    /* WINED3DSIH_EMIT          */ "emit",
+    /* WINED3DSIH_ENDIF         */ "endif",
+    /* WINED3DSIH_ENDLOOP       */ "endloop",
+    /* WINED3DSIH_ENDREP        */ "endrep",
+    /* WINED3DSIH_EXP           */ "exp",
+    /* WINED3DSIH_EXPP          */ "expp",
+    /* WINED3DSIH_FRC           */ "frc",
+    /* WINED3DSIH_IADD          */ "iadd",
+    /* WINED3DSIH_IF            */ "if",
+    /* WINED3DSIH_IFC           */ "ifc",
+    /* WINED3DSIH_IGE           */ "ige",
+    /* WINED3DSIH_LABEL         */ "label",
+    /* WINED3DSIH_LIT           */ "lit",
+    /* WINED3DSIH_LOG           */ "log",
+    /* WINED3DSIH_LOGP          */ "logp",
+    /* WINED3DSIH_LOOP          */ "loop",
+    /* WINED3DSIH_LRP           */ "lrp",
+    /* WINED3DSIH_LT            */ "lt",
+    /* WINED3DSIH_M3x2          */ "m3x2",
+    /* WINED3DSIH_M3x3          */ "m3x3",
+    /* WINED3DSIH_M3x4          */ "m3x4",
+    /* WINED3DSIH_M4x3          */ "m4x3",
+    /* WINED3DSIH_M4x4          */ "m4x4",
+    /* WINED3DSIH_MAD           */ "mad",
+    /* WINED3DSIH_MAX           */ "max",
+    /* WINED3DSIH_MIN           */ "min",
+    /* WINED3DSIH_MOV           */ "mov",
+    /* WINED3DSIH_MOVA          */ "mova",
+    /* WINED3DSIH_MUL           */ "mul",
+    /* WINED3DSIH_NOP           */ "nop",
+    /* WINED3DSIH_NRM           */ "nrm",
+    /* WINED3DSIH_PHASE         */ "phase",
+    /* WINED3DSIH_POW           */ "pow",
+    /* WINED3DSIH_RCP           */ "rcp",
+    /* WINED3DSIH_REP           */ "rep",
+    /* WINED3DSIH_RET           */ "ret",
+    /* WINED3DSIH_RSQ           */ "rsq",
+    /* WINED3DSIH_SETP          */ "setp",
+    /* WINED3DSIH_SGE           */ "sge",
+    /* WINED3DSIH_SGN           */ "sgn",
+    /* WINED3DSIH_SINCOS        */ "sincos",
+    /* WINED3DSIH_SLT           */ "slt",
+    /* WINED3DSIH_SUB           */ "sub",
+    /* WINED3DSIH_TEX           */ "texld",
+    /* WINED3DSIH_TEXBEM        */ "texbem",
+    /* WINED3DSIH_TEXBEML       */ "texbeml",
+    /* WINED3DSIH_TEXCOORD      */ "texcrd",
+    /* WINED3DSIH_TEXDEPTH      */ "texdepth",
+    /* WINED3DSIH_TEXDP3        */ "texdp3",
+    /* WINED3DSIH_TEXDP3TEX     */ "texdp3tex",
+    /* WINED3DSIH_TEXKILL       */ "texkill",
+    /* WINED3DSIH_TEXLDD        */ "texldd",
+    /* WINED3DSIH_TEXLDL        */ "texldl",
+    /* WINED3DSIH_TEXM3x2DEPTH  */ "texm3x2depth",
+    /* WINED3DSIH_TEXM3x2PAD    */ "texm3x2pad",
+    /* WINED3DSIH_TEXM3x2TEX    */ "texm3x2tex",
+    /* WINED3DSIH_TEXM3x3       */ "texm3x3",
+    /* WINED3DSIH_TEXM3x3DIFF   */ "texm3x3diff",
+    /* WINED3DSIH_TEXM3x3PAD    */ "texm3x3pad",
+    /* WINED3DSIH_TEXM3x3SPEC   */ "texm3x3spec",
+    /* WINED3DSIH_TEXM3x3TEX    */ "texm3x3tex",
+    /* WINED3DSIH_TEXM3x3VSPEC  */ "texm3x3vspec",
+    /* WINED3DSIH_TEXREG2AR     */ "texreg2ar",
+    /* WINED3DSIH_TEXREG2GB     */ "texreg2gb",
+    /* WINED3DSIH_TEXREG2RGB    */ "texreg2rgb",
+};
+
+static const char *semantic_names[] =
+{
+    /* WINED3DDECLUSAGE_POSITION        */ "SV_POSITION",
+    /* WINED3DDECLUSAGE_BLENDWEIGHT     */ "BLENDWEIGHT",
+    /* WINED3DDECLUSAGE_BLENDINDICES    */ "BLENDINDICES",
+    /* WINED3DDECLUSAGE_NORMAL          */ "NORMAL",
+    /* WINED3DDECLUSAGE_PSIZE           */ "PSIZE",
+    /* WINED3DDECLUSAGE_TEXCOORD        */ "TEXCOORD",
+    /* WINED3DDECLUSAGE_TANGENT         */ "TANGENT",
+    /* WINED3DDECLUSAGE_BINORMAL        */ "BINORMAL",
+    /* WINED3DDECLUSAGE_TESSFACTOR      */ "TESSFACTOR",
+    /* WINED3DDECLUSAGE_POSITIONT       */ "POSITIONT",
+    /* WINED3DDECLUSAGE_COLOR           */ "COLOR",
+    /* WINED3DDECLUSAGE_FOG             */ "FOG",
+    /* WINED3DDECLUSAGE_DEPTH           */ "DEPTH",
+    /* WINED3DDECLUSAGE_SAMPLE          */ "SAMPLE",
+};
+
+static const char *shader_semantic_name_from_usage(WINED3DDECLUSAGE usage)
+{
+    if (usage >= sizeof(semantic_names) / sizeof(*semantic_names))
+    {
+        FIXME("Unrecognized usage %#x.\n", usage);
+        return "UNRECOGNIZED";
+    }
+
+    return semantic_names[usage];
+}
+
+static WINED3DDECLUSAGE shader_usage_from_semantic_name(const char *name)
+{
+    unsigned int i;
+
+    for (i = 0; i < sizeof(semantic_names) / sizeof(*semantic_names); ++i)
+    {
+        if (!strcmp(name, semantic_names[i])) return i;
+    }
+
+    return ~0U;
+}
+
+BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage)
+{
+    return !strcmp(semantic_name, shader_semantic_name_from_usage(usage));
+}
+
+static void shader_signature_from_semantic(struct wined3d_shader_signature_element *e,
+        const struct wined3d_shader_semantic *s)
+{
+    e->semantic_name = shader_semantic_name_from_usage(s->usage);
+    e->semantic_idx = s->usage_idx;
+    e->sysval_semantic = 0;
+    e->component_type = 0;
+    e->register_idx = s->reg.reg.idx;
+    e->mask = s->reg.write_mask;
+}
+
+static const struct wined3d_shader_frontend *shader_select_frontend(DWORD version_token)
+{
+    switch (version_token >> 16)
+    {
+        case WINED3D_SM1_VS:
+        case WINED3D_SM1_PS:
+            return &sm1_shader_frontend;
+
+        case WINED3D_SM4_PS:
+        case WINED3D_SM4_VS:
+        case WINED3D_SM4_GS:
+            return &sm4_shader_frontend;
+
+        default:
+            FIXME("Unrecognised version token %#x\n", version_token);
+            return NULL;
+    }
+}
+
+void shader_buffer_clear(struct wined3d_shader_buffer *buffer)
+{
+    buffer->buffer[0] = '\0';
+    buffer->bsize = 0;
+    buffer->lineNo = 0;
+    buffer->newline = TRUE;
+}
+
+BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer)
+{
+    buffer->buffer = HeapAlloc(GetProcessHeap(), 0, SHADER_PGMSIZE);
+    if (!buffer->buffer)
+    {
+        ERR("Failed to allocate shader buffer memory.\n");
+        return FALSE;
+    }
+
+    shader_buffer_clear(buffer);
+    return TRUE;
+}
+
+void shader_buffer_free(struct wined3d_shader_buffer *buffer)
+{
+    HeapFree(GetProcessHeap(), 0, buffer->buffer);
+}
+
+int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *format, va_list args)
+{
+    char *base = buffer->buffer + buffer->bsize;
+    int rc;
+
+    rc = vsnprintf(base, SHADER_PGMSIZE - 1 - buffer->bsize, format, args);
+
+    if (rc < 0 /* C89 */ || (unsigned int)rc > SHADER_PGMSIZE - 1 - buffer->bsize /* C99 */)
+    {
+        ERR("The buffer allocated for the shader program string "
+            "is too small at %d bytes.\n", SHADER_PGMSIZE);
+        buffer->bsize = SHADER_PGMSIZE - 1;
+        return -1;
+    }
+
+    if (buffer->newline)
+    {
+        TRACE("GL HW (%u, %u) : %s", buffer->lineNo + 1, buffer->bsize, base);
+        buffer->newline = FALSE;
+    }
+    else
+    {
+        TRACE("%s", base);
+    }
+
+    buffer->bsize += rc;
+    if (buffer->buffer[buffer->bsize-1] == '\n')
+    {
+        ++buffer->lineNo;
+        buffer->newline = TRUE;
+    }
+
+    return 0;
+}
+
+int shader_addline(struct wined3d_shader_buffer *buffer, const char *format, ...)
+{
+    va_list args;
+    int ret;
+
+    va_start(args, format);
+    ret = shader_vaddline(buffer, format, args);
+    va_end(args);
+
+    return ret;
+}
+
+static void shader_init(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+    shader->ref = 1;
+    shader->device = (IWineD3DDevice *)device;
+    shader->parent = parent;
+    shader->parent_ops = parent_ops;
+    list_init(&shader->linked_programs);
+    list_add_head(&device->shaders, &shader->shader_list_entry);
+}
+
+/* Convert floating point offset relative to a register file to an absolute
+ * offset for float constants. */
+static unsigned int shader_get_float_offset(WINED3DSHADER_PARAM_REGISTER_TYPE register_type, UINT register_idx)
+{
+    switch (register_type)
+    {
+        case WINED3DSPR_CONST: return register_idx;
+        case WINED3DSPR_CONST2: return 2048 + register_idx;
+        case WINED3DSPR_CONST3: return 4096 + register_idx;
+        case WINED3DSPR_CONST4: return 6144 + register_idx;
+        default:
+            FIXME("Unsupported register type: %u.\n", register_type);
+            return register_idx;
+    }
+}
+
+static void shader_delete_constant_list(struct list *clist)
+{
+    struct local_constant *constant;
+    struct list *ptr;
+
+    ptr = list_head(clist);
+    while (ptr)
+    {
+        constant = LIST_ENTRY(ptr, struct local_constant, entry);
+        ptr = list_next(clist, ptr);
+        HeapFree(GetProcessHeap(), 0, constant);
+    }
+    list_init(clist);
+}
+
+static inline void set_bitmap_bit(DWORD *bitmap, DWORD bit)
+{
+    DWORD idx, shift;
+    idx = bit >> 5;
+    shift = bit & 0x1f;
+    bitmap[idx] |= (1 << shift);
+}
+
+static void shader_record_register_usage(IWineD3DBaseShaderImpl *shader, struct shader_reg_maps *reg_maps,
+        const struct wined3d_shader_register *reg, enum wined3d_shader_type shader_type)
+{
+    switch (reg->type)
+    {
+        case WINED3DSPR_TEXTURE: /* WINED3DSPR_ADDR */
+            if (shader_type == WINED3D_SHADER_TYPE_PIXEL) reg_maps->texcoord |= 1 << reg->idx;
+            else reg_maps->address |= 1 << reg->idx;
+            break;
+
+        case WINED3DSPR_TEMP:
+            reg_maps->temporary |= 1 << reg->idx;
+            break;
+
+        case WINED3DSPR_INPUT:
+            if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+            {
+                if (reg->rel_addr)
+                {
+                    /* If relative addressing is used, we must assume that all registers
+                     * are used. Even if it is a construct like v3[aL], we can't assume
+                     * that v0, v1 and v2 aren't read because aL can be negative */
+                    unsigned int i;
+                    for (i = 0; i < MAX_REG_INPUT; ++i)
+                    {
+                        ((IWineD3DPixelShaderImpl *)shader)->input_reg_used[i] = TRUE;
+                    }
+                }
+                else
+                {
+                    ((IWineD3DPixelShaderImpl *)shader)->input_reg_used[reg->idx] = TRUE;
+                }
+            }
+            else reg_maps->input_registers |= 1 << reg->idx;
+            break;
+
+        case WINED3DSPR_RASTOUT:
+            if (reg->idx == 1) reg_maps->fog = 1;
+            break;
+
+        case WINED3DSPR_MISCTYPE:
+            if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+            {
+                if (reg->idx == 0) reg_maps->vpos = 1;
+                else if (reg->idx == 1) reg_maps->usesfacing = 1;
+            }
+            break;
+
+        case WINED3DSPR_CONST:
+            if (reg->rel_addr)
+            {
+                if (shader_type != WINED3D_SHADER_TYPE_PIXEL)
+                {
+                    if (reg->idx < ((IWineD3DVertexShaderImpl *)shader)->min_rel_offset)
+                    {
+                        ((IWineD3DVertexShaderImpl *)shader)->min_rel_offset = reg->idx;
+                    }
+                    if (reg->idx > ((IWineD3DVertexShaderImpl *)shader)->max_rel_offset)
+                    {
+                        ((IWineD3DVertexShaderImpl *)shader)->max_rel_offset = reg->idx;
+                    }
+                }
+                reg_maps->usesrelconstF = TRUE;
+            }
+            else
+            {
+                set_bitmap_bit(reg_maps->constf, reg->idx);
+            }
+            break;
+
+        case WINED3DSPR_CONSTINT:
+            reg_maps->integer_constants |= (1 << reg->idx);
+            break;
+
+        case WINED3DSPR_CONSTBOOL:
+            reg_maps->boolean_constants |= (1 << reg->idx);
+            break;
+
+        case WINED3DSPR_COLOROUT:
+            reg_maps->highest_render_target = max(reg_maps->highest_render_target, reg->idx);
+            break;
+
+        default:
+            TRACE("Not recording register of type %#x and idx %u\n", reg->type, reg->idx);
+            break;
+    }
+}
+
+static unsigned int get_instr_extra_regcount(enum WINED3D_SHADER_INSTRUCTION_HANDLER instr, unsigned int param)
+{
+    switch (instr)
+    {
+        case WINED3DSIH_M4x4:
+        case WINED3DSIH_M3x4:
+            return param == 1 ? 3 : 0;
+
+        case WINED3DSIH_M4x3:
+        case WINED3DSIH_M3x3:
+            return param == 1 ? 2 : 0;
+
+        case WINED3DSIH_M3x2:
+            return param == 1 ? 1 : 0;
+
+        default:
+            return 0;
+    }
+}
+
+/* Note that this does not count the loop register as an address register. */
+static HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3d_shader_frontend *fe,
+        struct shader_reg_maps *reg_maps, struct wined3d_shader_signature_element *input_signature,
+        struct wined3d_shader_signature_element *output_signature, const DWORD *byte_code, DWORD constf_size)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+    unsigned int cur_loop_depth = 0, max_loop_depth = 0;
+    void *fe_data = shader->baseShader.frontend_data;
+    struct wined3d_shader_version shader_version;
+    const DWORD *ptr = byte_code;
+
+    memset(reg_maps, 0, sizeof(*reg_maps));
+
+    /* get_registers_used() is called on every compile on some 1.x shaders,
+     * which can result in stacking up a collection of local constants.
+     * Delete the old constants if existing. */
+    shader_delete_constant_list(&shader->baseShader.constantsF);
+    shader_delete_constant_list(&shader->baseShader.constantsB);
+    shader_delete_constant_list(&shader->baseShader.constantsI);
+
+    fe->shader_read_header(fe_data, &ptr, &shader_version);
+    reg_maps->shader_version = shader_version;
+
+    reg_maps->constf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(*reg_maps->constf) * ((constf_size + 31) / 32));
+    if (!reg_maps->constf)
+    {
+        ERR("Failed to allocate constant map memory.\n");
+        return E_OUTOFMEMORY;
+    }
+
+    while (!fe->shader_is_end(fe_data, &ptr))
+    {
+        struct wined3d_shader_instruction ins;
+        const char *comment;
+        UINT comment_size;
+        UINT param_size;
+
+        /* Skip comments. */
+        fe->shader_read_comment(&ptr, &comment, &comment_size);
+        if (comment) continue;
+
+        /* Fetch opcode. */
+        fe->shader_read_opcode(fe_data, &ptr, &ins, &param_size);
+
+        /* Unhandled opcode, and its parameters. */
+        if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+        {
+            TRACE("Skipping unrecognized instruction.\n");
+            ptr += param_size;
+            continue;
+        }
+
+        /* Handle declarations. */
+        if (ins.handler_idx == WINED3DSIH_DCL)
+        {
+            struct wined3d_shader_semantic semantic;
+
+            fe->shader_read_semantic(&ptr, &semantic);
+
+            switch (semantic.reg.reg.type)
+            {
+                /* Mark input registers used. */
+                case WINED3DSPR_INPUT:
+                    reg_maps->input_registers |= 1 << semantic.reg.reg.idx;
+                    shader_signature_from_semantic(&input_signature[semantic.reg.reg.idx], &semantic);
+                    break;
+
+                /* Vertex shader: mark 3.0 output registers used, save token. */
+                case WINED3DSPR_OUTPUT:
+                    reg_maps->output_registers |= 1 << semantic.reg.reg.idx;
+                    shader_signature_from_semantic(&output_signature[semantic.reg.reg.idx], &semantic);
+                    if (semantic.usage == WINED3DDECLUSAGE_FOG) reg_maps->fog = 1;
+                    break;
+
+                /* Save sampler usage token. */
+                case WINED3DSPR_SAMPLER:
+                    reg_maps->sampler_type[semantic.reg.reg.idx] = semantic.sampler_type;
+                    break;
+
+                default:
+                    TRACE("Not recording DCL register type %#x.\n", semantic.reg.reg.type);
+                    break;
+            }
+        }
+        else if (ins.handler_idx == WINED3DSIH_DEF)
+        {
+            struct wined3d_shader_src_param rel_addr;
+            struct wined3d_shader_dst_param dst;
+
+            local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+            if (!lconst) return E_OUTOFMEMORY;
+
+            fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+            lconst->idx = dst.reg.idx;
+
+            memcpy(lconst->value, ptr, 4 * sizeof(DWORD));
+            ptr += 4;
+
+            /* In pixel shader 1.X shaders, the constants are clamped between [-1;1] */
+            if (shader_version.major == 1 && shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+            {
+                float *value = (float *)lconst->value;
+                if (value[0] < -1.0f) value[0] = -1.0f;
+                else if (value[0] > 1.0f) value[0] = 1.0f;
+                if (value[1] < -1.0f) value[1] = -1.0f;
+                else if (value[1] > 1.0f) value[1] = 1.0f;
+                if (value[2] < -1.0f) value[2] = -1.0f;
+                else if (value[2] > 1.0f) value[2] = 1.0f;
+                if (value[3] < -1.0f) value[3] = -1.0f;
+                else if (value[3] > 1.0f) value[3] = 1.0f;
+            }
+
+            list_add_head(&shader->baseShader.constantsF, &lconst->entry);
+        }
+        else if (ins.handler_idx == WINED3DSIH_DEFI)
+        {
+            struct wined3d_shader_src_param rel_addr;
+            struct wined3d_shader_dst_param dst;
+
+            local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+            if (!lconst) return E_OUTOFMEMORY;
+
+            fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+            lconst->idx = dst.reg.idx;
+
+            memcpy(lconst->value, ptr, 4 * sizeof(DWORD));
+            ptr += 4;
+
+            list_add_head(&shader->baseShader.constantsI, &lconst->entry);
+            reg_maps->local_int_consts |= (1 << dst.reg.idx);
+        }
+        else if (ins.handler_idx == WINED3DSIH_DEFB)
+        {
+            struct wined3d_shader_src_param rel_addr;
+            struct wined3d_shader_dst_param dst;
+
+            local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+            if (!lconst) return E_OUTOFMEMORY;
+
+            fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+            lconst->idx = dst.reg.idx;
+
+            memcpy(lconst->value, ptr, sizeof(DWORD));
+            ++ptr;
+
+            list_add_head(&shader->baseShader.constantsB, &lconst->entry);
+            reg_maps->local_bool_consts |= (1 << dst.reg.idx);
+        }
+        /* If there's a loop in the shader. */
+        else if (ins.handler_idx == WINED3DSIH_LOOP
+                || ins.handler_idx == WINED3DSIH_REP)
+        {
+            struct wined3d_shader_src_param src, rel_addr;
+
+            fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+
+            /* Rep and Loop always use an integer constant for the control parameters. */
+            if (ins.handler_idx == WINED3DSIH_REP)
+            {
+                reg_maps->integer_constants |= 1 << src.reg.idx;
+            }
+            else
+            {
+                fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+                reg_maps->integer_constants |= 1 << src.reg.idx;
+            }
+
+            cur_loop_depth++;
+            if (cur_loop_depth > max_loop_depth) max_loop_depth = cur_loop_depth;
+        }
+        else if (ins.handler_idx == WINED3DSIH_ENDLOOP
+                || ins.handler_idx == WINED3DSIH_ENDREP)
+        {
+            cur_loop_depth--;
+        }
+        /* For subroutine prototypes. */
+        else if (ins.handler_idx == WINED3DSIH_LABEL)
+        {
+            struct wined3d_shader_src_param src, rel_addr;
+
+            fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+            reg_maps->labels |= 1 << src.reg.idx;
+        }
+        /* Set texture, address, temporary registers. */
+        else
+        {
+            BOOL color0_mov = FALSE;
+            int i, limit;
+
+            /* This will loop over all the registers and try to
+             * make a bitmask of the ones we're interested in.
+             *
+             * Relative addressing tokens are ignored, but that's
+             * okay, since we'll catch any address registers when
+             * they are initialized (required by spec). */
+            if (ins.dst_count)
+            {
+                struct wined3d_shader_src_param dst_rel_addr;
+                struct wined3d_shader_dst_param dst_param;
+
+                fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+
+                shader_record_register_usage(shader, reg_maps, &dst_param.reg, shader_version.type);
+
+                /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and
+                 * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel
+                 * shaders because TECRDOUT isn't used in them, but future register types might cause issues */
+                if (shader_version.type == WINED3D_SHADER_TYPE_VERTEX && shader_version.major < 3
+                        && dst_param.reg.type == WINED3DSPR_TEXCRDOUT)
+                {
+                    reg_maps->texcoord_mask[dst_param.reg.idx] |= dst_param.write_mask;
+                }
+
+                if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+                {
+                    IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)shader;
+
+                    if (dst_param.reg.type == WINED3DSPR_COLOROUT && dst_param.reg.idx == 0)
+                    {
+                    /* Many 2.0 and 3.0 pixel shaders end with a MOV from a temp register to
+                     * COLOROUT 0. If we know this in advance, the ARB shader backend can skip
+                     * the mov and perform the sRGB write correction from the source register.
+                     *
+                     * However, if the mov is only partial, we can't do this, and if the write
+                     * comes from an instruction other than MOV it is hard to do as well. If
+                     * COLOROUT 0 is overwritten partially later, the marker is dropped again. */
+
+                        ps->color0_mov = FALSE;
+                        if (ins.handler_idx == WINED3DSIH_MOV)
+                        {
+                            /* Used later when the source register is read. */
+                            color0_mov = TRUE;
+                        }
+                    }
+                    /* Also drop the MOV marker if the source register is overwritten prior to the shader
+                     * end
+                     */
+                    else if (dst_param.reg.type == WINED3DSPR_TEMP && dst_param.reg.idx == ps->color0_reg)
+                    {
+                        ps->color0_mov = FALSE;
+                    }
+                }
+
+                /* Declare 1.x samplers implicitly, based on the destination reg. number. */
+                if (shader_version.major == 1
+                        && (ins.handler_idx == WINED3DSIH_TEX
+                            || ins.handler_idx == WINED3DSIH_TEXBEM
+                            || ins.handler_idx == WINED3DSIH_TEXBEML
+                            || ins.handler_idx == WINED3DSIH_TEXDP3TEX
+                            || ins.handler_idx == WINED3DSIH_TEXM3x2TEX
+                            || ins.handler_idx == WINED3DSIH_TEXM3x3SPEC
+                            || ins.handler_idx == WINED3DSIH_TEXM3x3TEX
+                            || ins.handler_idx == WINED3DSIH_TEXM3x3VSPEC
+                            || ins.handler_idx == WINED3DSIH_TEXREG2AR
+                            || ins.handler_idx == WINED3DSIH_TEXREG2GB
+                            || ins.handler_idx == WINED3DSIH_TEXREG2RGB))
+                {
+                    /* Fake sampler usage, only set reserved bit and type. */
+                    DWORD sampler_code = dst_param.reg.idx;
+
+                    TRACE("Setting fake 2D sampler for 1.x pixelshader.\n");
+                    reg_maps->sampler_type[sampler_code] = WINED3DSTT_2D;
+
+                    /* texbem is only valid with < 1.4 pixel shaders */
+                    if (ins.handler_idx == WINED3DSIH_TEXBEM
+                            || ins.handler_idx == WINED3DSIH_TEXBEML)
+                    {
+                        reg_maps->bumpmat |= 1 << dst_param.reg.idx;
+                        if (ins.handler_idx == WINED3DSIH_TEXBEML)
+                        {
+                            reg_maps->luminanceparams |= 1 << dst_param.reg.idx;
+                        }
+                    }
+                }
+                else if (ins.handler_idx == WINED3DSIH_BEM)
+                {
+                    reg_maps->bumpmat |= 1 << dst_param.reg.idx;
+                }
+            }
+
+            if (ins.handler_idx == WINED3DSIH_NRM) reg_maps->usesnrm = 1;
+            else if (ins.handler_idx == WINED3DSIH_DSY) reg_maps->usesdsy = 1;
+            else if (ins.handler_idx == WINED3DSIH_DSX) reg_maps->usesdsx = 1;
+            else if (ins.handler_idx == WINED3DSIH_TEXLDD) reg_maps->usestexldd = 1;
+            else if (ins.handler_idx == WINED3DSIH_TEXLDL) reg_maps->usestexldl = 1;
+            else if (ins.handler_idx == WINED3DSIH_MOVA) reg_maps->usesmova = 1;
+            else if (ins.handler_idx == WINED3DSIH_IFC) reg_maps->usesifc = 1;
+            else if (ins.handler_idx == WINED3DSIH_CALL) reg_maps->usescall = 1;
+
+            limit = ins.src_count + (ins.predicate ? 1 : 0);
+            for (i = 0; i < limit; ++i)
+            {
+                struct wined3d_shader_src_param src_param, src_rel_addr;
+                unsigned int count;
+
+                fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+                count = get_instr_extra_regcount(ins.handler_idx, i);
+
+                shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type);
+                while (count)
+                {
+                    ++src_param.reg.idx;
+                    shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type);
+                    --count;
+                }
+
+                if (color0_mov)
+                {
+                    IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)shader;
+                    if (src_param.reg.type == WINED3DSPR_TEMP
+                            && src_param.swizzle == WINED3DSP_NOSWIZZLE)
+                    {
+                        ps->color0_mov = TRUE;
+                        ps->color0_reg = src_param.reg.idx;
+                    }
+                }
+            }
+        }
+    }
+    reg_maps->loop_depth = max_loop_depth;
+
+    shader->baseShader.functionLength = ((const char *)ptr - (const char *)byte_code);
+
+    return WINED3D_OK;
+}
+
+unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max)
+{
+    DWORD map = 1 << max;
+    map |= map - 1;
+    map &= reg_maps->shader_version.major < 3 ? ~reg_maps->texcoord : ~reg_maps->input_registers;
+
+    return wined3d_log2i(map);
+}
+
+static void shader_dump_decl_usage(const struct wined3d_shader_semantic *semantic,
+        const struct wined3d_shader_version *shader_version)
+{
+    TRACE("dcl");
+
+    if (semantic->reg.reg.type == WINED3DSPR_SAMPLER)
+    {
+        switch (semantic->sampler_type)
+        {
+            case WINED3DSTT_2D: TRACE("_2d"); break;
+            case WINED3DSTT_CUBE: TRACE("_cube"); break;
+            case WINED3DSTT_VOLUME: TRACE("_volume"); break;
+            default: TRACE("_unknown_ttype(0x%08x)", semantic->sampler_type);
+        }
+    }
+    else
+    {
+        /* Pixel shaders 3.0 don't have usage semantics. */
+        if (shader_version->major < 3 && shader_version->type == WINED3D_SHADER_TYPE_PIXEL) return;
+        else TRACE("_");
+
+        switch (semantic->usage)
+        {
+            case WINED3DDECLUSAGE_POSITION:
+                TRACE("position%u", semantic->usage_idx);
+                break;
+
+            case WINED3DDECLUSAGE_BLENDINDICES:
+                TRACE("blend");
+                break;
+
+            case WINED3DDECLUSAGE_BLENDWEIGHT:
+                TRACE("weight");
+                break;
+
+            case WINED3DDECLUSAGE_NORMAL:
+                TRACE("normal%u", semantic->usage_idx);
+                break;
+
+            case WINED3DDECLUSAGE_PSIZE:
+                TRACE("psize");
+                break;
+
+            case WINED3DDECLUSAGE_COLOR:
+                if (semantic->usage_idx == 0) TRACE("color");
+                else TRACE("specular%u", (semantic->usage_idx - 1));
+                break;
+
+            case WINED3DDECLUSAGE_TEXCOORD:
+                TRACE("texture%u", semantic->usage_idx);
+                break;
+
+            case WINED3DDECLUSAGE_TANGENT:
+                TRACE("tangent");
+                break;
+
+            case WINED3DDECLUSAGE_BINORMAL:
+                TRACE("binormal");
+                break;
+
+            case WINED3DDECLUSAGE_TESSFACTOR:
+                TRACE("tessfactor");
+                break;
+
+            case WINED3DDECLUSAGE_POSITIONT:
+                TRACE("positionT%u", semantic->usage_idx);
+                break;
+
+            case WINED3DDECLUSAGE_FOG:
+                TRACE("fog");
+                break;
+
+            case WINED3DDECLUSAGE_DEPTH:
+                TRACE("depth");
+                break;
+
+            case WINED3DDECLUSAGE_SAMPLE:
+                TRACE("sample");
+                break;
+
+            default:
+                FIXME("unknown_semantics(0x%08x)", semantic->usage);
+        }
+    }
+}
+
+static void shader_dump_register(const struct wined3d_shader_register *reg,
+        const struct wined3d_shader_version *shader_version)
+{
+    static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"};
+    static const char * const misctype_reg_names[] = {"vPos", "vFace"};
+    UINT offset = reg->idx;
+
+    switch (reg->type)
+    {
+        case WINED3DSPR_TEMP:
+            TRACE("r");
+            break;
+
+        case WINED3DSPR_INPUT:
+            TRACE("v");
+            break;
+
+        case WINED3DSPR_CONST:
+        case WINED3DSPR_CONST2:
+        case WINED3DSPR_CONST3:
+        case WINED3DSPR_CONST4:
+            TRACE("c");
+            offset = shader_get_float_offset(reg->type, reg->idx);
+            break;
+
+        case WINED3DSPR_TEXTURE: /* vs: case WINED3DSPR_ADDR */
+            TRACE("%c", shader_version->type == WINED3D_SHADER_TYPE_PIXEL ? 't' : 'a');
+            break;
+
+        case WINED3DSPR_RASTOUT:
+            TRACE("%s", rastout_reg_names[reg->idx]);
+            break;
+
+        case WINED3DSPR_COLOROUT:
+            TRACE("oC");
+            break;
+
+        case WINED3DSPR_DEPTHOUT:
+            TRACE("oDepth");
+            break;
+
+        case WINED3DSPR_ATTROUT:
+            TRACE("oD");
+            break;
+
+        case WINED3DSPR_TEXCRDOUT:
+            /* Vertex shaders >= 3.0 use general purpose output registers
+             * (WINED3DSPR_OUTPUT), which can include an address token. */
+            if (shader_version->major >= 3) TRACE("o");
+            else TRACE("oT");
+            break;
+
+        case WINED3DSPR_CONSTINT:
+            TRACE("i");
+            break;
+
+        case WINED3DSPR_CONSTBOOL:
+            TRACE("b");
+            break;
+
+        case WINED3DSPR_LABEL:
+            TRACE("l");
+            break;
+
+        case WINED3DSPR_LOOP:
+            TRACE("aL");
+            break;
+
+        case WINED3DSPR_SAMPLER:
+            TRACE("s");
+            break;
+
+        case WINED3DSPR_MISCTYPE:
+            if (reg->idx > 1) FIXME("Unhandled misctype register %u.\n", reg->idx);
+            else TRACE("%s", misctype_reg_names[reg->idx]);
+            break;
+
+        case WINED3DSPR_PREDICATE:
+            TRACE("p");
+            break;
+
+        case WINED3DSPR_IMMCONST:
+            TRACE("l");
+            break;
+
+        case WINED3DSPR_CONSTBUFFER:
+            TRACE("cb");
+            break;
+
+        default:
+            TRACE("unhandled_rtype(%#x)", reg->type);
+            break;
+    }
+
+    if (reg->type == WINED3DSPR_IMMCONST)
+    {
+        TRACE("(");
+        switch (reg->immconst_type)
+        {
+            case WINED3D_IMMCONST_FLOAT:
+                TRACE("%.8e", *(const float *)reg->immconst_data);
+                break;
+
+            case WINED3D_IMMCONST_FLOAT4:
+                TRACE("%.8e, %.8e, %.8e, %.8e",
+                        *(const float *)&reg->immconst_data[0], *(const float *)&reg->immconst_data[1],
+                        *(const float *)&reg->immconst_data[2], *(const float *)&reg->immconst_data[3]);
+                break;
+
+            default:
+                TRACE("<unhandled immconst_type %#x>", reg->immconst_type);
+                break;
+        }
+        TRACE(")");
+    }
+    else if (reg->type != WINED3DSPR_RASTOUT && reg->type != WINED3DSPR_MISCTYPE)
+    {
+        if (reg->array_idx != ~0U)
+        {
+            TRACE("%u[%u", offset, reg->array_idx);
+            if (reg->rel_addr)
+            {
+                TRACE(" + ");
+                shader_dump_src_param(reg->rel_addr, shader_version);
+            }
+            TRACE("]");
+        }
+        else
+        {
+            if (reg->rel_addr)
+            {
+                TRACE("[");
+                shader_dump_src_param(reg->rel_addr, shader_version);
+                TRACE(" + ");
+            }
+            TRACE("%u", offset);
+            if (reg->rel_addr) TRACE("]");
+        }
+    }
+}
+
+void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
+        const struct wined3d_shader_version *shader_version)
+{
+    DWORD write_mask = param->write_mask;
+
+    shader_dump_register(&param->reg, shader_version);
+
+    if (write_mask != WINED3DSP_WRITEMASK_ALL)
+    {
+        static const char *write_mask_chars = "xyzw";
+
+        TRACE(".");
+        if (write_mask & WINED3DSP_WRITEMASK_0) TRACE("%c", write_mask_chars[0]);
+        if (write_mask & WINED3DSP_WRITEMASK_1) TRACE("%c", write_mask_chars[1]);
+        if (write_mask & WINED3DSP_WRITEMASK_2) TRACE("%c", write_mask_chars[2]);
+        if (write_mask & WINED3DSP_WRITEMASK_3) TRACE("%c", write_mask_chars[3]);
+    }
+}
+
+void shader_dump_src_param(const struct wined3d_shader_src_param *param,
+        const struct wined3d_shader_version *shader_version)
+{
+    DWORD src_modifier = param->modifiers;
+    DWORD swizzle = param->swizzle;
+
+    if (src_modifier == WINED3DSPSM_NEG
+            || src_modifier == WINED3DSPSM_BIASNEG
+            || src_modifier == WINED3DSPSM_SIGNNEG
+            || src_modifier == WINED3DSPSM_X2NEG
+            || src_modifier == WINED3DSPSM_ABSNEG)
+        TRACE("-");
+    else if (src_modifier == WINED3DSPSM_COMP)
+        TRACE("1-");
+    else if (src_modifier == WINED3DSPSM_NOT)
+        TRACE("!");
+
+    if (src_modifier == WINED3DSPSM_ABS || src_modifier == WINED3DSPSM_ABSNEG)
+        TRACE("abs(");
+
+    shader_dump_register(&param->reg, shader_version);
+
+    if (src_modifier)
+    {
+        switch (src_modifier)
+        {
+            case WINED3DSPSM_NONE:    break;
+            case WINED3DSPSM_NEG:     break;
+            case WINED3DSPSM_NOT:     break;
+            case WINED3DSPSM_BIAS:    TRACE("_bias"); break;
+            case WINED3DSPSM_BIASNEG: TRACE("_bias"); break;
+            case WINED3DSPSM_SIGN:    TRACE("_bx2"); break;
+            case WINED3DSPSM_SIGNNEG: TRACE("_bx2"); break;
+            case WINED3DSPSM_COMP:    break;
+            case WINED3DSPSM_X2:      TRACE("_x2"); break;
+            case WINED3DSPSM_X2NEG:   TRACE("_x2"); break;
+            case WINED3DSPSM_DZ:      TRACE("_dz"); break;
+            case WINED3DSPSM_DW:      TRACE("_dw"); break;
+            case WINED3DSPSM_ABSNEG:  TRACE(")"); break;
+            case WINED3DSPSM_ABS:     TRACE(")"); break;
+            default:                  TRACE("_unknown_modifier(%#x)", src_modifier);
+        }
+    }
+
+    if (swizzle != WINED3DSP_NOSWIZZLE)
+    {
+        static const char *swizzle_chars = "xyzw";
+        DWORD swizzle_x = swizzle & 0x03;
+        DWORD swizzle_y = (swizzle >> 2) & 0x03;
+        DWORD swizzle_z = (swizzle >> 4) & 0x03;
+        DWORD swizzle_w = (swizzle >> 6) & 0x03;
+
+        if (swizzle_x == swizzle_y
+                && swizzle_x == swizzle_z
+                && swizzle_x == swizzle_w)
+        {
+            TRACE(".%c", swizzle_chars[swizzle_x]);
+        }
+        else
+        {
+            TRACE(".%c%c%c%c", swizzle_chars[swizzle_x], swizzle_chars[swizzle_y],
+                    swizzle_chars[swizzle_z], swizzle_chars[swizzle_w]);
+        }
+    }
+}
+
+/* Shared code in order to generate the bulk of the shader string.
+ * NOTE: A description of how to parse tokens can be found on MSDN. */
+void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
+        const shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+    IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+    const struct wined3d_shader_frontend *fe = shader->baseShader.frontend;
+    void *fe_data = shader->baseShader.frontend_data;
+    struct wined3d_shader_src_param src_rel_addr[4];
+    struct wined3d_shader_src_param src_param[4];
+    struct wined3d_shader_version shader_version;
+    struct wined3d_shader_src_param dst_rel_addr;
+    struct wined3d_shader_dst_param dst_param;
+    struct wined3d_shader_instruction ins;
+    struct wined3d_shader_context ctx;
+    const DWORD *ptr = byte_code;
+    DWORD i;
+
+    /* Initialize current parsing state. */
+    ctx.shader = iface;
+    ctx.gl_info = &device->adapter->gl_info;
+    ctx.reg_maps = reg_maps;
+    ctx.buffer = buffer;
+    ctx.backend_data = backend_ctx;
+
+    ins.ctx = &ctx;
+    ins.dst = &dst_param;
+    ins.src = src_param;
+    shader->baseShader.parse_state.current_row = 0;
+
+    fe->shader_read_header(fe_data, &ptr, &shader_version);
+
+    while (!fe->shader_is_end(fe_data, &ptr))
+    {
+        const char *comment;
+        UINT comment_size;
+        UINT param_size;
+
+        /* Skip comment tokens. */
+        fe->shader_read_comment(&ptr, &comment, &comment_size);
+        if (comment) continue;
+
+        /* Read opcode. */
+        fe->shader_read_opcode(fe_data, &ptr, &ins, &param_size);
+
+        /* Unknown opcode and its parameters. */
+        if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+        {
+            TRACE("Skipping unrecognized instruction.\n");
+            ptr += param_size;
+            continue;
+        }
+
+        /* Nothing to do. */
+        if (ins.handler_idx == WINED3DSIH_DCL
+                || ins.handler_idx == WINED3DSIH_NOP
+                || ins.handler_idx == WINED3DSIH_DEF
+                || ins.handler_idx == WINED3DSIH_DEFI
+                || ins.handler_idx == WINED3DSIH_DEFB
+                || ins.handler_idx == WINED3DSIH_PHASE)
+        {
+            ptr += param_size;
+            continue;
+        }
+
+        /* Destination token */
+        if (ins.dst_count) fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+
+        /* Predication token */
+        if (ins.predicate)
+        {
+            FIXME("Predicates not implemented.\n");
+            ins.predicate = *ptr++;
+        }
+
+        /* Other source tokens */
+        for (i = 0; i < ins.src_count; ++i)
+        {
+            fe->shader_read_src_param(fe_data, &ptr, &src_param[i], &src_rel_addr[i]);
+        }
+
+        /* Call appropriate function for output target */
+        device->shader_backend->shader_handle_instruction(&ins);
+    }
+}
+
+static void shader_dump_ins_modifiers(const struct wined3d_shader_dst_param *dst)
+{
+    DWORD mmask = dst->modifiers;
+
+    switch (dst->shift)
+    {
+        case 0: break;
+        case 13: TRACE("_d8"); break;
+        case 14: TRACE("_d4"); break;
+        case 15: TRACE("_d2"); break;
+        case 1: TRACE("_x2"); break;
+        case 2: TRACE("_x4"); break;
+        case 3: TRACE("_x8"); break;
+        default: TRACE("_unhandled_shift(%d)", dst->shift); break;
+    }
+
+    if (mmask & WINED3DSPDM_SATURATE)         TRACE("_sat");
+    if (mmask & WINED3DSPDM_PARTIALPRECISION) TRACE("_pp");
+    if (mmask & WINED3DSPDM_MSAMPCENTROID)    TRACE("_centroid");
+
+    mmask &= ~(WINED3DSPDM_SATURATE | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_MSAMPCENTROID);
+    if (mmask) FIXME("_unrecognized_modifier(%#x)", mmask);
+}
+
+static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, const DWORD *byte_code)
+{
+    struct wined3d_shader_version shader_version;
+    const DWORD *ptr = byte_code;
+    const char *type_prefix;
+    DWORD i;
+
+    TRACE("Parsing %p.\n", byte_code);
+
+    fe->shader_read_header(fe_data, &ptr, &shader_version);
+
+    switch (shader_version.type)
+    {
+        case WINED3D_SHADER_TYPE_VERTEX:
+            type_prefix = "vs";
+            break;
+
+        case WINED3D_SHADER_TYPE_GEOMETRY:
+            type_prefix = "gs";
+            break;
+
+        case WINED3D_SHADER_TYPE_PIXEL:
+            type_prefix = "ps";
+            break;
+
+        default:
+            FIXME("Unhandled shader type %#x.\n", shader_version.type);
+            type_prefix = "unknown";
+            break;
+    }
+
+    TRACE("%s_%u_%u\n", type_prefix, shader_version.major, shader_version.minor);
+
+    while (!fe->shader_is_end(fe_data, &ptr))
+    {
+        struct wined3d_shader_instruction ins;
+        const char *comment;
+        UINT comment_size;
+        UINT param_size;
+
+        /* comment */
+        fe->shader_read_comment(&ptr, &comment, &comment_size);
+        if (comment)
+        {
+            if (comment_size > 4 && *(const DWORD *)comment == WINEMAKEFOURCC('T', 'E', 'X', 'T'))
+            {
+                const char *end = comment + comment_size;
+                const char *ptr = comment + 4;
+                const char *line = ptr;
+
+                TRACE("// TEXT\n");
+                while (ptr != end)
+                {
+                    if (*ptr == '\n')
+                    {
+                        UINT len = ptr - line;
+                        if (len && *(ptr - 1) == '\r') --len;
+                        TRACE("// %s\n", debugstr_an(line, len));
+                        line = ++ptr;
+                    }
+                    else ++ptr;
+                }
+                if (line != ptr) TRACE("// %s\n", debugstr_an(line, ptr - line));
+            }
+            else TRACE("// %s\n", debugstr_an(comment, comment_size));
+            continue;
+        }
+
+        fe->shader_read_opcode(fe_data, &ptr, &ins, &param_size);
+        if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+        {
+            TRACE("Skipping unrecognized instruction.\n");
+            ptr += param_size;
+            continue;
+        }
+
+        if (ins.handler_idx == WINED3DSIH_DCL)
+        {
+            struct wined3d_shader_semantic semantic;
+
+            fe->shader_read_semantic(&ptr, &semantic);
+
+            shader_dump_decl_usage(&semantic, &shader_version);
+            shader_dump_ins_modifiers(&semantic.reg);
+            TRACE(" ");
+            shader_dump_dst_param(&semantic.reg, &shader_version);
+        }
+        else if (ins.handler_idx == WINED3DSIH_DEF)
+        {
+            struct wined3d_shader_src_param rel_addr;
+            struct wined3d_shader_dst_param dst;
+
+            fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+            TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.reg.type, dst.reg.idx),
+                    *(const float *)(ptr),
+                    *(const float *)(ptr + 1),
+                    *(const float *)(ptr + 2),
+                    *(const float *)(ptr + 3));
+            ptr += 4;
+        }
+        else if (ins.handler_idx == WINED3DSIH_DEFI)
+        {
+            struct wined3d_shader_src_param rel_addr;
+            struct wined3d_shader_dst_param dst;
+
+            fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+            TRACE("defi i%u = %d, %d, %d, %d", dst.reg.idx,
+                    *(ptr),
+                    *(ptr + 1),
+                    *(ptr + 2),
+                    *(ptr + 3));
+            ptr += 4;
+        }
+        else if (ins.handler_idx == WINED3DSIH_DEFB)
+        {
+            struct wined3d_shader_src_param rel_addr;
+            struct wined3d_shader_dst_param dst;
+
+            fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+            TRACE("defb b%u = %s", dst.reg.idx, *ptr ? "true" : "false");
+            ++ptr;
+        }
+        else
+        {
+            struct wined3d_shader_src_param dst_rel_addr, src_rel_addr;
+            struct wined3d_shader_dst_param dst_param;
+            struct wined3d_shader_src_param src_param;
+
+            if (ins.dst_count)
+            {
+                fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+            }
+
+            /* Print out predication source token first - it follows
+             * the destination token. */
+            if (ins.predicate)
+            {
+                fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+                TRACE("(");
+                shader_dump_src_param(&src_param, &shader_version);
+                TRACE(") ");
+            }
+
+            /* PixWin marks instructions with the coissue flag with a '+' */
+            if (ins.coissue) TRACE("+");
+
+            TRACE("%s", shader_opcode_names[ins.handler_idx]);
+
+            if (ins.handler_idx == WINED3DSIH_IFC
+                    || ins.handler_idx == WINED3DSIH_BREAKC)
+            {
+                switch (ins.flags)
+                {
+                    case COMPARISON_GT: TRACE("_gt"); break;
+                    case COMPARISON_EQ: TRACE("_eq"); break;
+                    case COMPARISON_GE: TRACE("_ge"); break;
+                    case COMPARISON_LT: TRACE("_lt"); break;
+                    case COMPARISON_NE: TRACE("_ne"); break;
+                    case COMPARISON_LE: TRACE("_le"); break;
+                    default: TRACE("_(%u)", ins.flags);
+                }
+            }
+            else if (ins.handler_idx == WINED3DSIH_TEX
+                    && shader_version.major >= 2
+                    && (ins.flags & WINED3DSI_TEXLD_PROJECT))
+            {
+                TRACE("p");
+            }
+
+            /* We already read the destination token, print it. */
+            if (ins.dst_count)
+            {
+                shader_dump_ins_modifiers(&dst_param);
+                TRACE(" ");
+                shader_dump_dst_param(&dst_param, &shader_version);
+            }
+
+            /* Other source tokens */
+            for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i)
+            {
+                fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+                TRACE(!i ? " " : ", ");
+                shader_dump_src_param(&src_param, &shader_version);
+            }
+        }
+        TRACE("\n");
+    }
+}
+
+static void shader_cleanup(IWineD3DBaseShader *iface)
+{
+    IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+
+    ((IWineD3DDeviceImpl *)shader->baseShader.device)->shader_backend->shader_destroy(iface);
+    HeapFree(GetProcessHeap(), 0, shader->baseShader.reg_maps.constf);
+    HeapFree(GetProcessHeap(), 0, shader->baseShader.function);
+    shader_delete_constant_list(&shader->baseShader.constantsF);
+    shader_delete_constant_list(&shader->baseShader.constantsB);
+    shader_delete_constant_list(&shader->baseShader.constantsI);
+    list_remove(&shader->baseShader.shader_list_entry);
+
+    if (shader->baseShader.frontend && shader->baseShader.frontend_data)
+    {
+        shader->baseShader.frontend->shader_free(shader->baseShader.frontend_data);
+    }
+}
+
+static void shader_none_handle_instruction(const struct wined3d_shader_instruction *ins) {}
+static void shader_none_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) {}
+static void shader_none_select_depth_blt(IWineD3DDevice *iface, enum tex_types tex_type) {}
+static void shader_none_deselect_depth_blt(IWineD3DDevice *iface) {}
+static void shader_none_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
+static void shader_none_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
+static void shader_none_load_constants(const struct wined3d_context *context, char usePS, char useVS) {}
+static void shader_none_load_np2fixup_constants(IWineD3DDevice *iface, char usePS, char useVS) {}
+static void shader_none_destroy(IWineD3DBaseShader *iface) {}
+static HRESULT shader_none_alloc(IWineD3DDevice *iface) {return WINED3D_OK;}
+static void shader_none_free(IWineD3DDevice *iface) {}
+static BOOL shader_none_dirty_const(IWineD3DDevice *iface) {return FALSE;}
+
+static void shader_none_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *caps)
+{
+    /* Set the shader caps to 0 for the none shader backend */
+    caps->VertexShaderVersion = 0;
+    caps->PixelShaderVersion = 0;
+    caps->PixelShader1xMaxValue = 0.0f;
+}
+
+static BOOL shader_none_color_fixup_supported(struct color_fixup_desc fixup)
+{
+    if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
+    {
+        TRACE("Checking support for fixup:\n");
+        dump_color_fixup_desc(fixup);
+    }
+
+    /* Faked to make some apps happy. */
+    if (!is_complex_fixup(fixup))
+    {
+        TRACE("[OK]\n");
+        return TRUE;
+    }
+
+    TRACE("[FAILED]\n");
+    return FALSE;
+}
+
+const shader_backend_t none_shader_backend = {
+    shader_none_handle_instruction,
+    shader_none_select,
+    shader_none_select_depth_blt,
+    shader_none_deselect_depth_blt,
+    shader_none_update_float_vertex_constants,
+    shader_none_update_float_pixel_constants,
+    shader_none_load_constants,
+    shader_none_load_np2fixup_constants,
+    shader_none_destroy,
+    shader_none_alloc,
+    shader_none_free,
+    shader_none_dirty_const,
+    shader_none_get_caps,
+    shader_none_color_fixup_supported,
+};
+
+static void shader_get_parent(IWineD3DBaseShaderImpl *shader, IUnknown **parent)
+{
+    *parent = shader->baseShader.parent;
+    IUnknown_AddRef(*parent);
+    TRACE("shader %p, returning %p.\n", shader, *parent);
+}
+
+static HRESULT shader_get_function(IWineD3DBaseShaderImpl *shader, void *data, UINT *data_size)
+{
+    if (!data)
+    {
+        *data_size = shader->baseShader.functionLength;
+        return WINED3D_OK;
+    }
+
+    if (*data_size < shader->baseShader.functionLength)
+    {
+        /* MSDN claims (for d3d8 at least) that if *pSizeOfData is smaller
+         * than the required size we should write the required size and
+         * return D3DERR_MOREDATA. That's not actually true. */
+        return WINED3DERR_INVALIDCALL;
+    }
+
+    memcpy(data, shader->baseShader.function, shader->baseShader.functionLength);
+
+    return WINED3D_OK;
+}
+
+static HRESULT shader_set_function(IWineD3DBaseShaderImpl *shader, const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature, DWORD float_const_count)
+{
+    struct shader_reg_maps *reg_maps = &shader->baseShader.reg_maps;
+    const struct wined3d_shader_frontend *fe;
+    HRESULT hr;
+
+    TRACE("shader %p, byte_code %p, output_signature %p, float_const_count %u.\n",
+            shader, byte_code, output_signature, float_const_count);
+
+    fe = shader_select_frontend(*byte_code);
+    if (!fe)
+    {
+        FIXME("Unable to find frontend for shader.\n");
+        return WINED3DERR_INVALIDCALL;
+    }
+    shader->baseShader.frontend = fe;
+    shader->baseShader.frontend_data = fe->shader_init(byte_code, output_signature);
+    if (!shader->baseShader.frontend_data)
+    {
+        FIXME("Failed to initialize frontend.\n");
+        return WINED3DERR_INVALIDCALL;
+    }
+
+    /* First pass: trace shader. */
+    if (TRACE_ON(d3d_shader)) shader_trace_init(fe, shader->baseShader.frontend_data, byte_code);
+
+    /* Initialize immediate constant lists. */
+    list_init(&shader->baseShader.constantsF);
+    list_init(&shader->baseShader.constantsB);
+    list_init(&shader->baseShader.constantsI);
+
+    /* Second pass: figure out which registers are used, what the semantics are, etc. */
+    hr = shader_get_registers_used((IWineD3DBaseShader *)shader, fe,
+            reg_maps, shader->baseShader.input_signature, shader->baseShader.output_signature,
+            byte_code, float_const_count);
+    if (FAILED(hr)) return hr;
+
+    shader->baseShader.function = HeapAlloc(GetProcessHeap(), 0, shader->baseShader.functionLength);
+    if (!shader->baseShader.function) return E_OUTOFMEMORY;
+    memcpy(shader->baseShader.function, byte_code, shader->baseShader.functionLength);
+
+    return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE vertexshader_QueryInterface(IWineD3DVertexShader *iface, REFIID riid, void **object)
+{
+    TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+    if (IsEqualGUID(riid, &IID_IWineD3DVertexShader)
+            || IsEqualGUID(riid, &IID_IWineD3DBaseShader)
+            || IsEqualGUID(riid, &IID_IWineD3DBase)
+            || IsEqualGUID(riid, &IID_IUnknown))
+    {
+        IUnknown_AddRef(iface);
+        *object = iface;
+        return S_OK;
+    }
+
+    WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+    *object = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE vertexshader_AddRef(IWineD3DVertexShader *iface)
+{
+    IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl *)iface;
+    ULONG refcount = InterlockedIncrement(&shader->baseShader.ref);
+
+    TRACE("%p increasing refcount to %u.\n", shader, refcount);
+
+    return refcount;
+}
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+static void shader_chache_put(PVBOXEXT_HASHCACHE pCache, IWineD3DBaseShaderImpl *pShader);
+#endif
+
+static ULONG STDMETHODCALLTYPE vertexshader_Release(IWineD3DVertexShader *iface)
+{
+    IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl *)iface;
+    ULONG refcount = InterlockedDecrement(&shader->baseShader.ref);
+
+    TRACE("%p decreasing refcount to %u.\n", shader, refcount);
+
+    if (!refcount)
+    {
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+        shader_chache_put(&((IWineD3DDeviceImpl*)shader->baseShader.device)->vshaderCache, (IWineD3DBaseShaderImpl*)shader);
+#else
+        shader_cleanup((IWineD3DBaseShader *)iface);
+#ifndef VBOX_WITH_VMSVGA
+        shader->baseShader.parent_ops->wined3d_object_destroyed(shader->baseShader.parent);
+#endif
+        HeapFree(GetProcessHeap(), 0, shader);
+#endif
+    }
+
+    return refcount;
+}
+
+static HRESULT STDMETHODCALLTYPE vertexshader_GetParent(IWineD3DVertexShader *iface, IUnknown **parent)
+{
+    TRACE("iface %p, parent %p.\n", iface, parent);
+
+    shader_get_parent((IWineD3DBaseShaderImpl *)iface, parent);
+
+    return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE vertexshader_GetFunction(IWineD3DVertexShader *iface, void *data, UINT *data_size)
+{
+    TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
+
+    return shader_get_function((IWineD3DBaseShaderImpl *)iface, data, data_size);
+}
+
+/* Set local constants for d3d8 shaders. */
+static HRESULT STDMETHODCALLTYPE vertexshader_SetLocalConstantsF(IWineD3DVertexShader *iface,
+        UINT start_idx, const float *src_data, UINT count)
+{
+    IWineD3DVertexShaderImpl *shader =(IWineD3DVertexShaderImpl *)iface;
+    IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+    UINT i, end_idx;
+
+    TRACE("iface %p, start_idx %u, src_data %p, count %u.\n", iface, start_idx, src_data, count);
+
+    end_idx = start_idx + count;
+    if (end_idx > device->d3d_vshader_constantF)
+    {
+        WARN("end_idx %u > float constants limit %u.\n", end_idx, device->d3d_vshader_constantF);
+        end_idx = device->d3d_vshader_constantF;
+    }
+
+    for (i = start_idx; i < end_idx; ++i)
+    {
+        local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+        if (!lconst) return E_OUTOFMEMORY;
+
+        lconst->idx = i;
+        memcpy(lconst->value, src_data + (i - start_idx) * 4 /* 4 components */, 4 * sizeof(float));
+        list_add_head(&shader->baseShader.constantsF, &lconst->entry);
+    }
+
+    return WINED3D_OK;
+}
+
+static const IWineD3DVertexShaderVtbl IWineD3DVertexShader_Vtbl =
+{
+    /* IUnknown methods */
+    vertexshader_QueryInterface,
+    vertexshader_AddRef,
+    vertexshader_Release,
+    /* IWineD3DBase methods */
+    vertexshader_GetParent,
+    /* IWineD3DBaseShader methods */
+    vertexshader_GetFunction,
+    /* IWineD3DVertexShader methods */
+    vertexshader_SetLocalConstantsF,
+};
+
+void find_vs_compile_args(IWineD3DVertexShaderImpl *shader,
+        IWineD3DStateBlockImpl *stateblock, struct vs_compile_args *args)
+{
+    args->fog_src = stateblock->renderState[WINED3DRS_FOGTABLEMODE] == WINED3DFOG_NONE ? VS_FOG_COORD : VS_FOG_Z;
+    args->clip_enabled = stateblock->renderState[WINED3DRS_CLIPPING]
+            && stateblock->renderState[WINED3DRS_CLIPPLANEENABLE];
+    args->swizzle_map = ((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.swizzle_map;
+}
+
+static BOOL match_usage(BYTE usage1, BYTE usage_idx1, BYTE usage2, BYTE usage_idx2)
+{
+    if (usage_idx1 != usage_idx2) return FALSE;
+    if (usage1 == usage2) return TRUE;
+    if (usage1 == WINED3DDECLUSAGE_POSITION && usage2 == WINED3DDECLUSAGE_POSITIONT) return TRUE;
+    if (usage2 == WINED3DDECLUSAGE_POSITION && usage1 == WINED3DDECLUSAGE_POSITIONT) return TRUE;
+
+    return FALSE;
+}
+
+BOOL vshader_get_input(IWineD3DVertexShader *iface, BYTE usage_req, BYTE usage_idx_req, unsigned int *regnum)
+{
+    IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl *)iface;
+    WORD map = shader->baseShader.reg_maps.input_registers;
+    unsigned int i;
+
+    for (i = 0; map; map >>= 1, ++i)
+    {
+        if (!(map & 1)) continue;
+
+        if (match_usage(shader->attributes[i].usage,
+                shader->attributes[i].usage_idx, usage_req, usage_idx_req))
+        {
+            *regnum = i;
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+static void vertexshader_set_limits(IWineD3DVertexShaderImpl *shader)
+{
+    DWORD shader_version = WINED3D_SHADER_VERSION(shader->baseShader.reg_maps.shader_version.major,
+            shader->baseShader.reg_maps.shader_version.minor);
+    IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+
+    shader->baseShader.limits.texcoord = 0;
+    shader->baseShader.limits.attributes = 16;
+    shader->baseShader.limits.packed_input = 0;
+
+    switch (shader_version)
+    {
+        case WINED3D_SHADER_VERSION(1, 0):
+        case WINED3D_SHADER_VERSION(1, 1):
+            shader->baseShader.limits.temporary = 12;
+            shader->baseShader.limits.constant_bool = 0;
+            shader->baseShader.limits.constant_int = 0;
+            shader->baseShader.limits.address = 1;
+            shader->baseShader.limits.packed_output = 0;
+            shader->baseShader.limits.sampler = 0;
+            shader->baseShader.limits.label = 0;
+            /* TODO: vs_1_1 has a minimum of 96 constants. What happens when
+             * a vs_1_1 shader is used on a vs_3_0 capable card that has 256
+             * constants? */
+            shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+            break;
+
+        case WINED3D_SHADER_VERSION(2, 0):
+        case WINED3D_SHADER_VERSION(2, 1):
+            shader->baseShader.limits.temporary = 12;
+            shader->baseShader.limits.constant_bool = 16;
+            shader->baseShader.limits.constant_int = 16;
+            shader->baseShader.limits.address = 1;
+            shader->baseShader.limits.packed_output = 0;
+            shader->baseShader.limits.sampler = 0;
+            shader->baseShader.limits.label = 16;
+            shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+            break;
+
+        case WINED3D_SHADER_VERSION(4, 0):
+            FIXME("Using 3.0 limits for 4.0 shader.\n");
+            /* Fall through. */
+
+        case WINED3D_SHADER_VERSION(3, 0):
+            shader->baseShader.limits.temporary = 32;
+            shader->baseShader.limits.constant_bool = 32;
+            shader->baseShader.limits.constant_int = 32;
+            shader->baseShader.limits.address = 1;
+            shader->baseShader.limits.packed_output = 12;
+            shader->baseShader.limits.sampler = 4;
+            shader->baseShader.limits.label = 16; /* FIXME: 2048 */
+            /* DX10 cards on Windows advertise a d3d9 constant limit of 256
+             * even though they are capable of supporting much more (GL
+             * drivers advertise 1024). d3d9.dll and d3d8.dll clamp the
+             * wined3d-advertised maximum. Clamp the constant limit for <= 3.0
+             * shaders to 256. */
+            shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+            break;
+
+        default:
+            shader->baseShader.limits.temporary = 12;
+            shader->baseShader.limits.constant_bool = 16;
+            shader->baseShader.limits.constant_int = 16;
+            shader->baseShader.limits.address = 1;
+            shader->baseShader.limits.packed_output = 0;
+            shader->baseShader.limits.sampler = 0;
+            shader->baseShader.limits.label = 16;
+            shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+            FIXME("Unrecognized vertex shader version \"%u.%u\".\n",
+                    shader->baseShader.reg_maps.shader_version.major,
+                    shader->baseShader.reg_maps.shader_version.minor);
+    }
+}
+
+HRESULT vertexshader_init(IWineD3DVertexShaderImpl *shader, IWineD3DDeviceImpl *device,
+        const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+    const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+    struct shader_reg_maps *reg_maps = &shader->baseShader.reg_maps;
+    unsigned int i;
+    HRESULT hr;
+    WORD map;
+
+    if (!byte_code) return WINED3DERR_INVALIDCALL;
+
+    shader->lpVtbl = &IWineD3DVertexShader_Vtbl;
+    shader_init(&shader->baseShader, device, parent, parent_ops);
+
+    hr = shader_set_function((IWineD3DBaseShaderImpl *)shader, byte_code,
+            output_signature, device->d3d_vshader_constantF);
+    if (FAILED(hr))
+    {
+        WARN("Failed to set function, hr %#x.\n", hr);
+        shader_cleanup((IWineD3DBaseShader *)shader);
+        return hr;
+    }
+
+    map = shader->baseShader.reg_maps.input_registers;
+    for (i = 0; map; map >>= 1, ++i)
+    {
+        if (!(map & 1) || !shader->baseShader.input_signature[i].semantic_name) continue;
+
+        shader->attributes[i].usage =
+                shader_usage_from_semantic_name(shader->baseShader.input_signature[i].semantic_name);
+        shader->attributes[i].usage_idx = shader->baseShader.input_signature[i].semantic_idx;
+    }
+
+    if (output_signature)
+    {
+        for (i = 0; i < output_signature->element_count; ++i)
+        {
+            struct wined3d_shader_signature_element *e = &output_signature->elements[i];
+            reg_maps->output_registers |= 1 << e->register_idx;
+            shader->baseShader.output_signature[e->register_idx] = *e;
+        }
+    }
+
+    vertexshader_set_limits(shader);
+
+    if (device->vs_selected_mode == SHADER_ARB
+            && (gl_info->quirks & WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT)
+            && shader->min_rel_offset <= shader->max_rel_offset)
+    {
+        if (shader->max_rel_offset - shader->min_rel_offset > 127)
+        {
+            FIXME("The difference between the minimum and maximum relative offset is > 127.\n");
+            FIXME("Which this OpenGL implementation does not support. Try using GLSL.\n");
+            FIXME("Min: %d, Max: %d.\n", shader->min_rel_offset, shader->max_rel_offset);
+        }
+        else if (shader->max_rel_offset - shader->min_rel_offset > 63)
+        {
+            shader->rel_offset = shader->min_rel_offset + 63;
+        }
+        else if (shader->max_rel_offset > 63)
+        {
+            shader->rel_offset = shader->min_rel_offset;
+        }
+        else
+        {
+            shader->rel_offset = 0;
+        }
+    }
+
+    shader->baseShader.load_local_constsF = shader->baseShader.reg_maps.usesrelconstF
+            && !list_empty(&shader->baseShader.constantsF);
+
+    return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE geometryshader_QueryInterface(IWineD3DGeometryShader *iface,
+        REFIID riid, void **object)
+{
+    TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+    if (IsEqualGUID(riid, &IID_IWineD3DGeometryShader)
+            || IsEqualGUID(riid, &IID_IWineD3DBaseShader)
+            || IsEqualGUID(riid, &IID_IWineD3DBase)
+            || IsEqualGUID(riid, &IID_IUnknown))
+    {
+        IUnknown_AddRef(iface);
+        *object = iface;
+        return S_OK;
+    }
+
+    WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+    *object = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE geometryshader_AddRef(IWineD3DGeometryShader *iface)
+{
+    struct wined3d_geometryshader *shader = (struct wined3d_geometryshader *)iface;
+    ULONG refcount = InterlockedIncrement(&shader->base_shader.ref);
+
+    TRACE("%p increasing refcount to %u.\n", shader, refcount);
+
+    return refcount;
+}
+
+static ULONG STDMETHODCALLTYPE geometryshader_Release(IWineD3DGeometryShader *iface)
+{
+    struct wined3d_geometryshader *shader = (struct wined3d_geometryshader *)iface;
+    ULONG refcount = InterlockedDecrement(&shader->base_shader.ref);
+
+    TRACE("%p decreasing refcount to %u.\n", shader, refcount);
+
+    if (!refcount)
+    {
+        shader_cleanup((IWineD3DBaseShader *)iface);
+        shader->base_shader.parent_ops->wined3d_object_destroyed(shader->base_shader.parent);
+        HeapFree(GetProcessHeap(), 0, shader);
+    }
+
+    return refcount;
+}
+
+static HRESULT STDMETHODCALLTYPE geometryshader_GetParent(IWineD3DGeometryShader *iface, IUnknown **parent)
+{
+    TRACE("iface %p, parent %p.\n", iface, parent);
+
+    shader_get_parent((IWineD3DBaseShaderImpl *)iface, parent);
+
+    return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE geometryshader_GetFunction(IWineD3DGeometryShader *iface, void *data, UINT *data_size)
+{
+    TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
+
+    return shader_get_function((IWineD3DBaseShaderImpl *)iface, data, data_size);
+}
+
+static const IWineD3DGeometryShaderVtbl wined3d_geometryshader_vtbl =
+{
+    /* IUnknown methods */
+    geometryshader_QueryInterface,
+    geometryshader_AddRef,
+    geometryshader_Release,
+    /* IWineD3DBase methods */
+    geometryshader_GetParent,
+    /* IWineD3DBaseShader methods */
+    geometryshader_GetFunction,
+};
+
+HRESULT geometryshader_init(struct wined3d_geometryshader *shader, IWineD3DDeviceImpl *device,
+        const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+    HRESULT hr;
+
+    shader->vtbl = &wined3d_geometryshader_vtbl;
+    shader_init(&shader->base_shader, device, parent, parent_ops);
+
+    hr = shader_set_function((IWineD3DBaseShaderImpl *)shader, byte_code, output_signature, 0);
+    if (FAILED(hr))
+    {
+        WARN("Failed to set function, hr %#x.\n", hr);
+        shader_cleanup((IWineD3DBaseShader *)shader);
+        return hr;
+    }
+
+    shader->base_shader.load_local_constsF = FALSE;
+
+    return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE pixelshader_QueryInterface(IWineD3DPixelShader *iface, REFIID riid, void **object)
+{
+    TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+    if (IsEqualGUID(riid, &IID_IWineD3DPixelShader)
+            || IsEqualGUID(riid, &IID_IWineD3DBaseShader)
+            || IsEqualGUID(riid, &IID_IWineD3DBase)
+            || IsEqualGUID(riid, &IID_IUnknown))
+    {
+        IUnknown_AddRef(iface);
+        *object = iface;
+        return S_OK;
+    }
+
+    WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+    *object = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE pixelshader_AddRef(IWineD3DPixelShader *iface)
+{
+    IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)iface;
+    ULONG refcount = InterlockedIncrement(&shader->baseShader.ref);
+
+    TRACE("%p increasing refcount to %u.\n", shader, refcount);
+
+    return refcount;
+}
+
+static ULONG STDMETHODCALLTYPE pixelshader_Release(IWineD3DPixelShader *iface)
+{
+    IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)iface;
+    ULONG refcount = InterlockedDecrement(&shader->baseShader.ref);
+
+    TRACE("%p decreasing refcount to %u.\n", shader, refcount);
+
+    if (!refcount)
+    {
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+        shader_chache_put(&((IWineD3DDeviceImpl*)shader->baseShader.device)->pshaderCache, (IWineD3DBaseShaderImpl*)shader);
+#else
+        shader_cleanup((IWineD3DBaseShader *)iface);
+#ifndef VBOX_WITH_VMSVGA
+        shader->baseShader.parent_ops->wined3d_object_destroyed(shader->baseShader.parent);
+#endif
+        HeapFree(GetProcessHeap(), 0, shader);
+#endif
+    }
+
+    return refcount;
+}
+
+static HRESULT STDMETHODCALLTYPE pixelshader_GetParent(IWineD3DPixelShader *iface, IUnknown **parent)
+{
+    TRACE("iface %p, parent %p.\n", iface, parent);
+
+    shader_get_parent((IWineD3DBaseShaderImpl *)iface, parent);
+
+    return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE pixelshader_GetFunction(IWineD3DPixelShader *iface, void *data, UINT *data_size)
+{
+    TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
+
+    return shader_get_function((IWineD3DBaseShaderImpl *)iface, data, data_size);
+}
+
+static const IWineD3DPixelShaderVtbl IWineD3DPixelShader_Vtbl =
+{
+    /* IUnknown methods */
+    pixelshader_QueryInterface,
+    pixelshader_AddRef,
+    pixelshader_Release,
+    /* IWineD3DBase methods */
+    pixelshader_GetParent,
+    /* IWineD3DBaseShader methods */
+    pixelshader_GetFunction
+};
+
+void find_ps_compile_args(IWineD3DPixelShaderImpl *shader,
+        IWineD3DStateBlockImpl *stateblock, struct ps_compile_args *args)
+{
+    IWineD3DBaseTextureImpl *texture;
+    UINT i;
+
+    memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */
+    args->srgb_correction = stateblock->renderState[WINED3DRS_SRGBWRITEENABLE] ? 1 : 0;
+    args->np2_fixup = 0;
+    args->t_mirror = 0;
+
+    if (shader->baseShader.reg_maps.shader_version.major==1
+        && shader->baseShader.reg_maps.shader_version.minor<=3)
+    {
+        for (i=0; i<4; ++i)
+        {
+            DWORD flags = stateblock->textureState[i][WINED3DTSS_TEXTURETRANSFORMFLAGS];
+            DWORD tex_transform = flags & ~WINED3DTTFF_PROJECTED;
+            if (flags & WINED3DTTFF_PROJECTED)
+            {
+                tex_transform |= WINED3D_PSARGS_PROJECTED;
+            }
+            args->tex_transform |= tex_transform << (i*WINED3D_PSARGS_TEXTRANSFORM_SHIFT);
+        }
+    }
+
+    for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i)
+    {
+        if (!shader->baseShader.reg_maps.sampler_type[i]) continue;
+        texture = (IWineD3DBaseTextureImpl *)stateblock->textures[i];
+        if (!texture)
+        {
+            args->color_fixup[i] = COLOR_FIXUP_IDENTITY;
+            continue;
+        }
+        args->color_fixup[i] = texture->resource.format_desc->color_fixup;
+
+        /* Flag samplers that need NP2 texcoord fixup. */
+        if (!texture->baseTexture.pow2Matrix_identity)
+        {
+            args->np2_fixup |= (1 << i);
+        }
+
+        if (texture->baseTexture.t_mirror)
+        {
+            args->t_mirror |= (1 << i);
+        }
+    }
+    if (shader->baseShader.reg_maps.shader_version.major >= 3)
+    {
+        if (((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.position_transformed)
+        {
+            args->vp_mode = pretransformed;
+        }
+        else if (use_vs(stateblock))
+        {
+            args->vp_mode = vertexshader;
+        }
+        else
+        {
+            args->vp_mode = fixedfunction;
+        }
+        args->fog = FOG_OFF;
+    }
+    else
+    {
+        args->vp_mode = vertexshader;
+        if (stateblock->renderState[WINED3DRS_FOGENABLE])
+        {
+            switch (stateblock->renderState[WINED3DRS_FOGTABLEMODE])
+            {
+                case WINED3DFOG_NONE:
+                    if (((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.position_transformed
+                            || use_vs(stateblock))
+                    {
+                        args->fog = FOG_LINEAR;
+                        break;
+                    }
+
+                    switch (stateblock->renderState[WINED3DRS_FOGVERTEXMODE])
+                    {
+                        case WINED3DFOG_NONE: /* Fall through. */
+                        case WINED3DFOG_LINEAR: args->fog = FOG_LINEAR; break;
+                        case WINED3DFOG_EXP:    args->fog = FOG_EXP;    break;
+                        case WINED3DFOG_EXP2:   args->fog = FOG_EXP2;   break;
+                    }
+                    break;
+
+                case WINED3DFOG_LINEAR: args->fog = FOG_LINEAR; break;
+                case WINED3DFOG_EXP:    args->fog = FOG_EXP;    break;
+                case WINED3DFOG_EXP2:   args->fog = FOG_EXP2;   break;
+            }
+        }
+        else
+        {
+            args->fog = FOG_OFF;
+        }
+    }
+}
+
+static void pixelshader_set_limits(IWineD3DPixelShaderImpl *shader)
+{
+    DWORD shader_version = WINED3D_SHADER_VERSION(shader->baseShader.reg_maps.shader_version.major,
+            shader->baseShader.reg_maps.shader_version.minor);
+
+    shader->baseShader.limits.attributes = 0;
+    shader->baseShader.limits.address = 0;
+    shader->baseShader.limits.packed_output = 0;
+
+    switch (shader_version)
+    {
+        case WINED3D_SHADER_VERSION(1, 0):
+        case WINED3D_SHADER_VERSION(1, 1):
+        case WINED3D_SHADER_VERSION(1, 2):
+        case WINED3D_SHADER_VERSION(1, 3):
+            shader->baseShader.limits.temporary = 2;
+            shader->baseShader.limits.constant_float = 8;
+            shader->baseShader.limits.constant_int = 0;
+            shader->baseShader.limits.constant_bool = 0;
+            shader->baseShader.limits.texcoord = 4;
+            shader->baseShader.limits.sampler = 4;
+            shader->baseShader.limits.packed_input = 0;
+            shader->baseShader.limits.label = 0;
+            break;
+
+        case WINED3D_SHADER_VERSION(1, 4):
+            shader->baseShader.limits.temporary = 6;
+            shader->baseShader.limits.constant_float = 8;
+            shader->baseShader.limits.constant_int = 0;
+            shader->baseShader.limits.constant_bool = 0;
+            shader->baseShader.limits.texcoord = 6;
+            shader->baseShader.limits.sampler = 6;
+            shader->baseShader.limits.packed_input = 0;
+            shader->baseShader.limits.label = 0;
+            break;
+
+        /* FIXME: Temporaries must match D3DPSHADERCAPS2_0.NumTemps. */
+        case WINED3D_SHADER_VERSION(2, 0):
+            shader->baseShader.limits.temporary = 32;
+            shader->baseShader.limits.constant_float = 32;
+            shader->baseShader.limits.constant_int = 16;
+            shader->baseShader.limits.constant_bool = 16;
+            shader->baseShader.limits.texcoord = 8;
+            shader->baseShader.limits.sampler = 16;
+            shader->baseShader.limits.packed_input = 0;
+            break;
+
+        case WINED3D_SHADER_VERSION(2, 1):
+            shader->baseShader.limits.temporary = 32;
+            shader->baseShader.limits.constant_float = 32;
+            shader->baseShader.limits.constant_int = 16;
+            shader->baseShader.limits.constant_bool = 16;
+            shader->baseShader.limits.texcoord = 8;
+            shader->baseShader.limits.sampler = 16;
+            shader->baseShader.limits.packed_input = 0;
+            shader->baseShader.limits.label = 16;
+            break;
+
+        case WINED3D_SHADER_VERSION(4, 0):
+            FIXME("Using 3.0 limits for 4.0 shader.\n");
+            /* Fall through. */
+
+        case WINED3D_SHADER_VERSION(3, 0):
+            shader->baseShader.limits.temporary = 32;
+            shader->baseShader.limits.constant_float = 224;
+            shader->baseShader.limits.constant_int = 16;
+            shader->baseShader.limits.constant_bool = 16;
+            shader->baseShader.limits.texcoord = 0;
+            shader->baseShader.limits.sampler = 16;
+            shader->baseShader.limits.packed_input = 12;
+            shader->baseShader.limits.label = 16; /* FIXME: 2048 */
+            break;
+
+        default:
+            shader->baseShader.limits.temporary = 32;
+            shader->baseShader.limits.constant_float = 32;
+            shader->baseShader.limits.constant_int = 16;
+            shader->baseShader.limits.constant_bool = 16;
+            shader->baseShader.limits.texcoord = 8;
+            shader->baseShader.limits.sampler = 16;
+            shader->baseShader.limits.packed_input = 0;
+            shader->baseShader.limits.label = 0;
+            FIXME("Unrecognized pixel shader version %u.%u\n",
+                    shader->baseShader.reg_maps.shader_version.major,
+                    shader->baseShader.reg_maps.shader_version.minor);
+    }
+}
+
+HRESULT pixelshader_init(IWineD3DPixelShaderImpl *shader, IWineD3DDeviceImpl *device,
+        const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+    const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+    unsigned int i, highest_reg_used = 0, num_regs_used = 0;
+    HRESULT hr;
+
+    if (!byte_code) return WINED3DERR_INVALIDCALL;
+
+    shader->lpVtbl = &IWineD3DPixelShader_Vtbl;
+    shader_init(&shader->baseShader, device, parent, parent_ops);
+
+    hr = shader_set_function((IWineD3DBaseShaderImpl *)shader, byte_code,
+            output_signature, device->d3d_pshader_constantF);
+    if (FAILED(hr))
+    {
+        WARN("Failed to set function, hr %#x.\n", hr);
+        shader_cleanup((IWineD3DBaseShader *)shader);
+        return hr;
+    }
+
+    pixelshader_set_limits(shader);
+
+    for (i = 0; i < MAX_REG_INPUT; ++i)
+    {
+        if (shader->input_reg_used[i])
+        {
+            ++num_regs_used;
+            highest_reg_used = i;
+        }
+    }
+
+    /* Don't do any register mapping magic if it is not needed, or if we can't
+     * achieve anything anyway */
+    if (highest_reg_used < (gl_info->limits.glsl_varyings / 4)
+            || num_regs_used > (gl_info->limits.glsl_varyings / 4))
+    {
+        if (num_regs_used > (gl_info->limits.glsl_varyings / 4))
+        {
+            /* This happens with relative addressing. The input mapper function
+             * warns about this if the higher registers are declared too, so
+             * don't write a FIXME here */
+            WARN("More varying registers used than supported\n");
+        }
+
+        for (i = 0; i < MAX_REG_INPUT; ++i)
+        {
+            shader->input_reg_map[i] = i;
+        }
+
+        shader->declared_in_count = highest_reg_used + 1;
+    }
+    else
+    {
+        shader->declared_in_count = 0;
+        for (i = 0; i < MAX_REG_INPUT; ++i)
+        {
+            if (shader->input_reg_used[i]) shader->input_reg_map[i] = shader->declared_in_count++;
+            else shader->input_reg_map[i] = ~0U;
+        }
+    }
+
+    shader->baseShader.load_local_constsF = FALSE;
+
+    return WINED3D_OK;
+}
+
+void pixelshader_update_samplers(struct shader_reg_maps *reg_maps, IWineD3DBaseTexture * const *textures)
+{
+    WINED3DSAMPLER_TEXTURE_TYPE *sampler_type = reg_maps->sampler_type;
+    unsigned int i;
+
+    if (reg_maps->shader_version.major != 1) return;
+
+    for (i = 0; i < max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS); ++i)
+    {
+        /* We don't sample from this sampler. */
+        if (!sampler_type[i]) continue;
+
+        if (!textures[i])
+        {
+            WARN("No texture bound to sampler %u, using 2D.\n", i);
+            sampler_type[i] = WINED3DSTT_2D;
+            continue;
+        }
+
+        switch (IWineD3DBaseTexture_GetTextureDimensions(textures[i]))
+        {
+            case GL_TEXTURE_RECTANGLE_ARB:
+            case GL_TEXTURE_2D:
+                /* We have to select between texture rectangles and 2D
+                 * textures later because 2.0 and 3.0 shaders only have
+                 * WINED3DSTT_2D as well. */
+                sampler_type[i] = WINED3DSTT_2D;
+                break;
+
+            case GL_TEXTURE_3D:
+                sampler_type[i] = WINED3DSTT_VOLUME;
+                break;
+
+            case GL_TEXTURE_CUBE_MAP_ARB:
+                sampler_type[i] = WINED3DSTT_CUBE;
+                break;
+
+            default:
+                FIXME("Unrecognized texture type %#x, using 2D.\n",
+                        IWineD3DBaseTexture_GetTextureDimensions(textures[i]));
+                sampler_type[i] = WINED3DSTT_2D;
+        }
+    }
+}
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+
+static void shader_reinit(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+    shader->ref = 1;
+    shader->device = (IWineD3DDevice *)device;
+    shader->parent = parent;
+    shader->parent_ops = parent_ops;
+#ifdef DEBUG
+    {
+        IWineD3DBaseShaderImpl *tstShader;
+        LIST_FOR_EACH_ENTRY(tstShader, &device->shaders, IWineD3DBaseShaderImpl, baseShader.shader_list_entry) {
+            if (&tstShader->baseShader == shader)
+                return;
+        }
+        ERR("shader not in list!");
+    }
+#endif
+}
+
+static DECLCALLBACK(uint32_t) shader_cache_hash(void *pvKey)
+{
+    uint32_t u32Hash, i;
+    DWORD *function;
+    IWineD3DBaseShaderImpl *pShader = (IWineD3DBaseShaderImpl *)pvKey;
+    if (pShader->baseShader.u32CacheDataInited)
+        return pShader->baseShader.u32Hash;
+
+    u32Hash = pShader->baseShader.functionLength;
+    function = pShader->baseShader.function;
+    for (i = 0; i < pShader->baseShader.functionLength / 4; ++i)
+    {
+        u32Hash += *function++;
+    }
+
+    for (i = 0; i < pShader->baseShader.functionLength % 4; ++i)
+    {
+        u32Hash += *((uint8_t*)function)++;
+    }
+
+    pShader->baseShader.u32Hash = u32Hash;
+    pShader->baseShader.u32CacheDataInited = TRUE;
+    return pShader->baseShader.u32Hash;
+}
+
+static DECLCALLBACK(bool) shader_cache_equal(void *pvKey1, void *pvKey2)
+{
+    IWineD3DBaseShaderImpl *pShader1 = (IWineD3DBaseShaderImpl *)pvKey1;
+    IWineD3DBaseShaderImpl *pShader2 = (IWineD3DBaseShaderImpl *)pvKey2;
+
+    if (pShader1 == pShader2)
+        return TRUE;
+
+    if (pShader1->baseShader.functionLength != pShader2->baseShader.functionLength)
+        return FALSE;
+
+    if (shader_cache_hash(pvKey1) != shader_cache_hash(pvKey2))
+    {
+#ifdef DEBUG_misha
+        Assert(memcmp(pShader1->baseShader.function, pShader2->baseShader.function, pShader1->baseShader.functionLength));
+#endif
+        return FALSE;
+    }
+
+    return !memcmp(pShader1->baseShader.function, pShader2->baseShader.function, pShader1->baseShader.functionLength);
+}
+
+#define VBOX_SHADER_FROM_CACHE_ENTRY(_pEntry) RT_FROM_MEMBER(RT_FROM_MEMBER((_pEntry), IWineD3DBaseShaderClass, CacheEntry), IWineD3DBaseShaderImpl, baseShader)
+
+static DECLCALLBACK(void) shader_cache_cleanup_entry(void *pvKey, struct VBOXEXT_HASHCACHE_ENTRY *pEntry)
+{
+    IWineD3DBaseShaderImpl *pShader = VBOX_SHADER_FROM_CACHE_ENTRY(pEntry);
+    shader_cleanup((IWineD3DBaseShader *)pShader);
+    if (pShader->baseShader.parent)
+        pShader->baseShader.parent_ops->wined3d_object_destroyed(pShader->baseShader.parent);
+    HeapFree(GetProcessHeap(), 0, pShader);
+}
+
+static void shader_chache_init(PVBOXEXT_HASHCACHE pCache)
+{
+    VBoxExtCacheInit(pCache, 1024, shader_cache_hash, shader_cache_equal, shader_cache_cleanup_entry);
+}
+
+static void shader_chache_term(PVBOXEXT_HASHCACHE pCache)
+{
+    VBoxExtCacheTerm(pCache);
+}
+
+static void shader_chache_put(PVBOXEXT_HASHCACHE pCache, IWineD3DBaseShaderImpl *pShader)
+{
+    if (pShader->baseShader.parent)
+    {
+        pShader->baseShader.parent_ops->wined3d_object_destroyed(pShader->baseShader.parent);
+        pShader->baseShader.parent = NULL;
+    }
+
+    VBoxExtCachePut(pCache, pShader, &pShader->baseShader.CacheEntry);
+}
+
+static IWineD3DBaseShaderImpl* shader_chache_get(PVBOXEXT_HASHCACHE pCache, IWineD3DBaseShaderImpl *pShader)
+{
+    PVBOXEXT_HASHCACHE_ENTRY pEntry = VBoxExtCacheGet(pCache, pShader);
+    IWineD3DBaseShaderImpl *pCachedShader;
+
+    if (!pEntry)
+        return pShader;
+
+    pCachedShader = VBOX_SHADER_FROM_CACHE_ENTRY(pEntry);
+    shader_reinit(&pCachedShader->baseShader, (IWineD3DDeviceImpl *)pShader->baseShader.device,
+            pShader->baseShader.parent, pShader->baseShader.parent_ops);
+    pShader->baseShader.parent = NULL;
+    /* we can not do a IWineD3DBaseShader_Release here since this would result in putting a shader to the cache */
+    shader_cleanup((IWineD3DBaseShader *)pShader);
+    HeapFree(GetProcessHeap(), 0, pShader);
+    return pCachedShader;
+}
+
+IWineD3DVertexShaderImpl * vertexshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DVertexShaderImpl *object)
+{
+    return (IWineD3DVertexShaderImpl*)shader_chache_get(&device->vshaderCache, (IWineD3DBaseShaderImpl *)object);
+}
+
+IWineD3DPixelShaderImpl * pixelshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DPixelShaderImpl *object)
+{
+    return (IWineD3DPixelShaderImpl*)shader_chache_get(&device->pshaderCache, (IWineD3DBaseShaderImpl *)object);
+}
+
+void shader_chaches_init(IWineD3DDeviceImpl *device)
+{
+    shader_chache_init(&device->vshaderCache);
+    shader_chache_init(&device->pshaderCache);
+}
+
+void shader_chaches_term(IWineD3DDeviceImpl *device)
+{
+    shader_chache_term(&device->vshaderCache);
+    shader_chache_term(&device->pshaderCache);
+}
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c b/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c
new file mode 100644
index 0000000..aed014d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c
@@ -0,0 +1,692 @@
+/*
+ * Copyright 2002-2003 Jason Edmeades
+ * Copyright 2002-2003 Raphael Junqueira
+ * Copyright 2004 Christian Costa
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2006 Ivan Gyurdiev
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+
+/* DCL usage masks */
+#define WINED3DSP_DCL_USAGE_SHIFT               0
+#define WINED3DSP_DCL_USAGE_MASK                (0xf << WINED3DSP_DCL_USAGE_SHIFT)
+#define WINED3DSP_DCL_USAGEINDEX_SHIFT          16
+#define WINED3DSP_DCL_USAGEINDEX_MASK           (0xf << WINED3DSP_DCL_USAGEINDEX_SHIFT)
+
+/* DCL sampler type */
+#define WINED3DSP_TEXTURETYPE_SHIFT             27
+#define WINED3DSP_TEXTURETYPE_MASK              (0xf << WINED3DSP_TEXTURETYPE_SHIFT)
+
+/* Opcode-related masks */
+#define WINED3DSI_OPCODE_MASK                   0x0000ffff
+
+#define WINED3D_OPCODESPECIFICCONTROL_SHIFT     16
+#define WINED3D_OPCODESPECIFICCONTROL_MASK      (0xff << WINED3D_OPCODESPECIFICCONTROL_SHIFT)
+
+#define WINED3DSI_INSTLENGTH_SHIFT              24
+#define WINED3DSI_INSTLENGTH_MASK               (0xf << WINED3DSI_INSTLENGTH_SHIFT)
+
+#define WINED3DSI_COISSUE                       (1 << 30)
+
+#define WINED3DSI_COMMENTSIZE_SHIFT             16
+#define WINED3DSI_COMMENTSIZE_MASK              (0x7fff << WINED3DSI_COMMENTSIZE_SHIFT)
+
+#define WINED3DSHADER_INSTRUCTION_PREDICATED    (1 << 28)
+
+/* Register number mask */
+#define WINED3DSP_REGNUM_MASK                   0x000007ff
+
+/* Register type masks  */
+#define WINED3DSP_REGTYPE_SHIFT                 28
+#define WINED3DSP_REGTYPE_MASK                  (0x7 << WINED3DSP_REGTYPE_SHIFT)
+#define WINED3DSP_REGTYPE_SHIFT2                8
+#define WINED3DSP_REGTYPE_MASK2                 (0x18 << WINED3DSP_REGTYPE_SHIFT2)
+
+/* Relative addressing mask */
+#define WINED3DSHADER_ADDRESSMODE_SHIFT         13
+#define WINED3DSHADER_ADDRESSMODE_MASK          (1 << WINED3DSHADER_ADDRESSMODE_SHIFT)
+
+/* Destination modifier mask */
+#define WINED3DSP_DSTMOD_SHIFT                  20
+#define WINED3DSP_DSTMOD_MASK                   (0xf << WINED3DSP_DSTMOD_SHIFT)
+
+/* Destination shift mask */
+#define WINED3DSP_DSTSHIFT_SHIFT                24
+#define WINED3DSP_DSTSHIFT_MASK                 (0xf << WINED3DSP_DSTSHIFT_SHIFT)
+
+/* Write mask */
+#define WINED3D_SM1_WRITEMASK_SHIFT             16
+#define WINED3D_SM1_WRITEMASK_MASK              (0xf << WINED3D_SM1_WRITEMASK_SHIFT)
+
+/* Swizzle mask */
+#define WINED3DSP_SWIZZLE_SHIFT                 16
+#define WINED3DSP_SWIZZLE_MASK                  (0xff << WINED3DSP_SWIZZLE_SHIFT)
+
+/* Source modifier mask */
+#define WINED3DSP_SRCMOD_SHIFT                  24
+#define WINED3DSP_SRCMOD_MASK                   (0xf << WINED3DSP_SRCMOD_SHIFT)
+
+#define WINED3DSP_END                           0x0000ffff
+
+#define WINED3D_SM1_VERSION_MAJOR(version)      (((version) >> 8) & 0xff)
+#define WINED3D_SM1_VERSION_MINOR(version)      (((version) >> 0) & 0xff)
+
+enum WINED3DSHADER_ADDRESSMODE_TYPE
+{
+    WINED3DSHADER_ADDRMODE_ABSOLUTE = 0 << WINED3DSHADER_ADDRESSMODE_SHIFT,
+    WINED3DSHADER_ADDRMODE_RELATIVE = 1 << WINED3DSHADER_ADDRESSMODE_SHIFT,
+};
+
+enum wined3d_sm1_opcode
+{
+    WINED3D_SM1_OP_NOP          = 0x00,
+    WINED3D_SM1_OP_MOV          = 0x01,
+    WINED3D_SM1_OP_ADD          = 0x02,
+    WINED3D_SM1_OP_SUB          = 0x03,
+    WINED3D_SM1_OP_MAD          = 0x04,
+    WINED3D_SM1_OP_MUL          = 0x05,
+    WINED3D_SM1_OP_RCP          = 0x06,
+    WINED3D_SM1_OP_RSQ          = 0x07,
+    WINED3D_SM1_OP_DP3          = 0x08,
+    WINED3D_SM1_OP_DP4          = 0x09,
+    WINED3D_SM1_OP_MIN          = 0x0a,
+    WINED3D_SM1_OP_MAX          = 0x0b,
+    WINED3D_SM1_OP_SLT          = 0x0c,
+    WINED3D_SM1_OP_SGE          = 0x0d,
+    WINED3D_SM1_OP_EXP          = 0x0e,
+    WINED3D_SM1_OP_LOG          = 0x0f,
+    WINED3D_SM1_OP_LIT          = 0x10,
+    WINED3D_SM1_OP_DST          = 0x11,
+    WINED3D_SM1_OP_LRP          = 0x12,
+    WINED3D_SM1_OP_FRC          = 0x13,
+    WINED3D_SM1_OP_M4x4         = 0x14,
+    WINED3D_SM1_OP_M4x3         = 0x15,
+    WINED3D_SM1_OP_M3x4         = 0x16,
+    WINED3D_SM1_OP_M3x3         = 0x17,
+    WINED3D_SM1_OP_M3x2         = 0x18,
+    WINED3D_SM1_OP_CALL         = 0x19,
+    WINED3D_SM1_OP_CALLNZ       = 0x1a,
+    WINED3D_SM1_OP_LOOP         = 0x1b,
+    WINED3D_SM1_OP_RET          = 0x1c,
+    WINED3D_SM1_OP_ENDLOOP      = 0x1d,
+    WINED3D_SM1_OP_LABEL        = 0x1e,
+    WINED3D_SM1_OP_DCL          = 0x1f,
+    WINED3D_SM1_OP_POW          = 0x20,
+    WINED3D_SM1_OP_CRS          = 0x21,
+    WINED3D_SM1_OP_SGN          = 0x22,
+    WINED3D_SM1_OP_ABS          = 0x23,
+    WINED3D_SM1_OP_NRM          = 0x24,
+    WINED3D_SM1_OP_SINCOS       = 0x25,
+    WINED3D_SM1_OP_REP          = 0x26,
+    WINED3D_SM1_OP_ENDREP       = 0x27,
+    WINED3D_SM1_OP_IF           = 0x28,
+    WINED3D_SM1_OP_IFC          = 0x29,
+    WINED3D_SM1_OP_ELSE         = 0x2a,
+    WINED3D_SM1_OP_ENDIF        = 0x2b,
+    WINED3D_SM1_OP_BREAK        = 0x2c,
+    WINED3D_SM1_OP_BREAKC       = 0x2d,
+    WINED3D_SM1_OP_MOVA         = 0x2e,
+    WINED3D_SM1_OP_DEFB         = 0x2f,
+    WINED3D_SM1_OP_DEFI         = 0x30,
+
+    WINED3D_SM1_OP_TEXCOORD     = 0x40,
+    WINED3D_SM1_OP_TEXKILL      = 0x41,
+    WINED3D_SM1_OP_TEX          = 0x42,
+    WINED3D_SM1_OP_TEXBEM       = 0x43,
+    WINED3D_SM1_OP_TEXBEML      = 0x44,
+    WINED3D_SM1_OP_TEXREG2AR    = 0x45,
+    WINED3D_SM1_OP_TEXREG2GB    = 0x46,
+    WINED3D_SM1_OP_TEXM3x2PAD   = 0x47,
+    WINED3D_SM1_OP_TEXM3x2TEX   = 0x48,
+    WINED3D_SM1_OP_TEXM3x3PAD   = 0x49,
+    WINED3D_SM1_OP_TEXM3x3TEX   = 0x4a,
+    WINED3D_SM1_OP_TEXM3x3DIFF  = 0x4b,
+    WINED3D_SM1_OP_TEXM3x3SPEC  = 0x4c,
+    WINED3D_SM1_OP_TEXM3x3VSPEC = 0x4d,
+    WINED3D_SM1_OP_EXPP         = 0x4e,
+    WINED3D_SM1_OP_LOGP         = 0x4f,
+    WINED3D_SM1_OP_CND          = 0x50,
+    WINED3D_SM1_OP_DEF          = 0x51,
+    WINED3D_SM1_OP_TEXREG2RGB   = 0x52,
+    WINED3D_SM1_OP_TEXDP3TEX    = 0x53,
+    WINED3D_SM1_OP_TEXM3x2DEPTH = 0x54,
+    WINED3D_SM1_OP_TEXDP3       = 0x55,
+    WINED3D_SM1_OP_TEXM3x3      = 0x56,
+    WINED3D_SM1_OP_TEXDEPTH     = 0x57,
+    WINED3D_SM1_OP_CMP          = 0x58,
+    WINED3D_SM1_OP_BEM          = 0x59,
+    WINED3D_SM1_OP_DP2ADD       = 0x5a,
+    WINED3D_SM1_OP_DSX          = 0x5b,
+    WINED3D_SM1_OP_DSY          = 0x5c,
+    WINED3D_SM1_OP_TEXLDD       = 0x5d,
+    WINED3D_SM1_OP_SETP         = 0x5e,
+    WINED3D_SM1_OP_TEXLDL       = 0x5f,
+    WINED3D_SM1_OP_BREAKP       = 0x60,
+
+    WINED3D_SM1_OP_PHASE        = 0xfffd,
+    WINED3D_SM1_OP_COMMENT      = 0xfffe,
+    WINED3D_SM1_OP_END          = 0Xffff,
+};
+
+struct wined3d_sm1_opcode_info
+{
+    enum wined3d_sm1_opcode opcode;
+    UINT dst_count;
+    UINT param_count;
+    enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+    DWORD min_version;
+    DWORD max_version;
+};
+
+struct wined3d_sm1_data
+{
+    struct wined3d_shader_version shader_version;
+    const struct wined3d_sm1_opcode_info *opcode_table;
+};
+
+/* This table is not order or position dependent. */
+static const struct wined3d_sm1_opcode_info vs_opcode_table[] =
+{
+    /* Arithmetic */
+    {WINED3D_SM1_OP_NOP,      0, 0, WINED3DSIH_NOP,          0,                           0                          },
+    {WINED3D_SM1_OP_MOV,      1, 2, WINED3DSIH_MOV,          0,                           0                          },
+    {WINED3D_SM1_OP_MOVA,     1, 2, WINED3DSIH_MOVA,         WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_ADD,      1, 3, WINED3DSIH_ADD,          0,                           0                          },
+    {WINED3D_SM1_OP_SUB,      1, 3, WINED3DSIH_SUB,          0,                           0                          },
+    {WINED3D_SM1_OP_MAD,      1, 4, WINED3DSIH_MAD,          0,                           0                          },
+    {WINED3D_SM1_OP_MUL,      1, 3, WINED3DSIH_MUL,          0,                           0                          },
+    {WINED3D_SM1_OP_RCP,      1, 2, WINED3DSIH_RCP,          0,                           0                          },
+    {WINED3D_SM1_OP_RSQ,      1, 2, WINED3DSIH_RSQ,          0,                           0                          },
+    {WINED3D_SM1_OP_DP3,      1, 3, WINED3DSIH_DP3,          0,                           0                          },
+    {WINED3D_SM1_OP_DP4,      1, 3, WINED3DSIH_DP4,          0,                           0                          },
+    {WINED3D_SM1_OP_MIN,      1, 3, WINED3DSIH_MIN,          0,                           0                          },
+    {WINED3D_SM1_OP_MAX,      1, 3, WINED3DSIH_MAX,          0,                           0                          },
+    {WINED3D_SM1_OP_SLT,      1, 3, WINED3DSIH_SLT,          0,                           0                          },
+    {WINED3D_SM1_OP_SGE,      1, 3, WINED3DSIH_SGE,          0,                           0                          },
+    {WINED3D_SM1_OP_ABS,      1, 2, WINED3DSIH_ABS,          0,                           0                          },
+    {WINED3D_SM1_OP_EXP,      1, 2, WINED3DSIH_EXP,          0,                           0                          },
+    {WINED3D_SM1_OP_LOG,      1, 2, WINED3DSIH_LOG,          0,                           0                          },
+    {WINED3D_SM1_OP_EXPP,     1, 2, WINED3DSIH_EXPP,         0,                           0                          },
+    {WINED3D_SM1_OP_LOGP,     1, 2, WINED3DSIH_LOGP,         0,                           0                          },
+    {WINED3D_SM1_OP_LIT,      1, 2, WINED3DSIH_LIT,          0,                           0                          },
+    {WINED3D_SM1_OP_DST,      1, 3, WINED3DSIH_DST,          0,                           0                          },
+    {WINED3D_SM1_OP_LRP,      1, 4, WINED3DSIH_LRP,          0,                           0                          },
+    {WINED3D_SM1_OP_FRC,      1, 2, WINED3DSIH_FRC,          0,                           0                          },
+    {WINED3D_SM1_OP_POW,      1, 3, WINED3DSIH_POW,          0,                           0                          },
+    {WINED3D_SM1_OP_CRS,      1, 3, WINED3DSIH_CRS,          0,                           0                          },
+    {WINED3D_SM1_OP_SGN,      1, 4, WINED3DSIH_SGN,          WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
+    {WINED3D_SM1_OP_SGN,      1, 2, WINED3DSIH_SGN,          WINED3D_SHADER_VERSION(3,0), -1                         },
+    {WINED3D_SM1_OP_NRM,      1, 2, WINED3DSIH_NRM,          0,                           0                          },
+    {WINED3D_SM1_OP_SINCOS,   1, 4, WINED3DSIH_SINCOS,       WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
+    {WINED3D_SM1_OP_SINCOS,   1, 2, WINED3DSIH_SINCOS,       WINED3D_SHADER_VERSION(3,0), -1                         },
+    /* Matrix */
+    {WINED3D_SM1_OP_M4x4,     1, 3, WINED3DSIH_M4x4,         0,                           0                          },
+    {WINED3D_SM1_OP_M4x3,     1, 3, WINED3DSIH_M4x3,         0,                           0                          },
+    {WINED3D_SM1_OP_M3x4,     1, 3, WINED3DSIH_M3x4,         0,                           0                          },
+    {WINED3D_SM1_OP_M3x3,     1, 3, WINED3DSIH_M3x3,         0,                           0                          },
+    {WINED3D_SM1_OP_M3x2,     1, 3, WINED3DSIH_M3x2,         0,                           0                          },
+    /* Declare registers */
+    {WINED3D_SM1_OP_DCL,      0, 2, WINED3DSIH_DCL,          0,                           0                          },
+    /* Constant definitions */
+    {WINED3D_SM1_OP_DEF,      1, 5, WINED3DSIH_DEF,          0,                           0                          },
+    {WINED3D_SM1_OP_DEFB,     1, 2, WINED3DSIH_DEFB,         0,                           0                          },
+    {WINED3D_SM1_OP_DEFI,     1, 5, WINED3DSIH_DEFI,         0,                           0                          },
+    /* Flow control */
+    {WINED3D_SM1_OP_REP,      0, 1, WINED3DSIH_REP,          WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_ENDREP,   0, 0, WINED3DSIH_ENDREP,       WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_IF,       0, 1, WINED3DSIH_IF,           WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_IFC,      0, 2, WINED3DSIH_IFC,          WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_ELSE,     0, 0, WINED3DSIH_ELSE,         WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_ENDIF,    0, 0, WINED3DSIH_ENDIF,        WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_BREAK,    0, 0, WINED3DSIH_BREAK,        WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_BREAKC,   0, 2, WINED3DSIH_BREAKC,       WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_BREAKP,   0, 1, WINED3DSIH_BREAKP,       0,                           0                          },
+    {WINED3D_SM1_OP_CALL,     0, 1, WINED3DSIH_CALL,         WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_CALLNZ,   0, 2, WINED3DSIH_CALLNZ,       WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_LOOP,     0, 2, WINED3DSIH_LOOP,         WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_RET,      0, 0, WINED3DSIH_RET,          WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_ENDLOOP,  0, 0, WINED3DSIH_ENDLOOP,      WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_LABEL,    0, 1, WINED3DSIH_LABEL,        WINED3D_SHADER_VERSION(2,0), -1                         },
+
+    {WINED3D_SM1_OP_SETP,     1, 3, WINED3DSIH_SETP,         0,                           0                          },
+    {WINED3D_SM1_OP_TEXLDL,   1, 3, WINED3DSIH_TEXLDL,       WINED3D_SHADER_VERSION(3,0), -1                         },
+    {0,                       0, 0, WINED3DSIH_TABLE_SIZE,   0,                           0                          },
+};
+
+static const struct wined3d_sm1_opcode_info ps_opcode_table[] =
+{
+    /* Arithmetic */
+    {WINED3D_SM1_OP_NOP,      0, 0, WINED3DSIH_NOP,          0,                           0                          },
+    {WINED3D_SM1_OP_MOV,      1, 2, WINED3DSIH_MOV,          0,                           0                          },
+    {WINED3D_SM1_OP_ADD,      1, 3, WINED3DSIH_ADD,          0,                           0                          },
+    {WINED3D_SM1_OP_SUB,      1, 3, WINED3DSIH_SUB,          0,                           0                          },
+    {WINED3D_SM1_OP_MAD,      1, 4, WINED3DSIH_MAD,          0,                           0                          },
+    {WINED3D_SM1_OP_MUL,      1, 3, WINED3DSIH_MUL,          0,                           0                          },
+    {WINED3D_SM1_OP_RCP,      1, 2, WINED3DSIH_RCP,          0,                           0                          },
+    {WINED3D_SM1_OP_RSQ,      1, 2, WINED3DSIH_RSQ,          0,                           0                          },
+    {WINED3D_SM1_OP_DP3,      1, 3, WINED3DSIH_DP3,          0,                           0                          },
+    {WINED3D_SM1_OP_DP4,      1, 3, WINED3DSIH_DP4,          0,                           0                          },
+    {WINED3D_SM1_OP_MIN,      1, 3, WINED3DSIH_MIN,          0,                           0                          },
+    {WINED3D_SM1_OP_MAX,      1, 3, WINED3DSIH_MAX,          0,                           0                          },
+    {WINED3D_SM1_OP_SLT,      1, 3, WINED3DSIH_SLT,          0,                           0                          },
+    {WINED3D_SM1_OP_SGE,      1, 3, WINED3DSIH_SGE,          0,                           0                          },
+    {WINED3D_SM1_OP_ABS,      1, 2, WINED3DSIH_ABS,          0,                           0                          },
+    {WINED3D_SM1_OP_EXP,      1, 2, WINED3DSIH_EXP,          0,                           0                          },
+    {WINED3D_SM1_OP_LOG,      1, 2, WINED3DSIH_LOG,          0,                           0                          },
+    {WINED3D_SM1_OP_EXPP,     1, 2, WINED3DSIH_EXPP,         0,                           0                          },
+    {WINED3D_SM1_OP_LOGP,     1, 2, WINED3DSIH_LOGP,         0,                           0                          },
+    {WINED3D_SM1_OP_DST,      1, 3, WINED3DSIH_DST,          0,                           0                          },
+    {WINED3D_SM1_OP_LRP,      1, 4, WINED3DSIH_LRP,          0,                           0                          },
+    {WINED3D_SM1_OP_FRC,      1, 2, WINED3DSIH_FRC,          0,                           0                          },
+    {WINED3D_SM1_OP_CND,      1, 4, WINED3DSIH_CND,          WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,4)},
+    {WINED3D_SM1_OP_CMP,      1, 4, WINED3DSIH_CMP,          WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(3,0)},
+    {WINED3D_SM1_OP_POW,      1, 3, WINED3DSIH_POW,          0,                           0                          },
+    {WINED3D_SM1_OP_CRS,      1, 3, WINED3DSIH_CRS,          0,                           0                          },
+    {WINED3D_SM1_OP_NRM,      1, 2, WINED3DSIH_NRM,          0,                           0                          },
+    {WINED3D_SM1_OP_SINCOS,   1, 4, WINED3DSIH_SINCOS,       WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
+    {WINED3D_SM1_OP_SINCOS,   1, 2, WINED3DSIH_SINCOS,       WINED3D_SHADER_VERSION(3,0), -1                         },
+    {WINED3D_SM1_OP_DP2ADD,   1, 4, WINED3DSIH_DP2ADD,       WINED3D_SHADER_VERSION(2,0), -1                         },
+    /* Matrix */
+    {WINED3D_SM1_OP_M4x4,     1, 3, WINED3DSIH_M4x4,         0,                           0                          },
+    {WINED3D_SM1_OP_M4x3,     1, 3, WINED3DSIH_M4x3,         0,                           0                          },
+    {WINED3D_SM1_OP_M3x4,     1, 3, WINED3DSIH_M3x4,         0,                           0                          },
+    {WINED3D_SM1_OP_M3x3,     1, 3, WINED3DSIH_M3x3,         0,                           0                          },
+    {WINED3D_SM1_OP_M3x2,     1, 3, WINED3DSIH_M3x2,         0,                           0                          },
+    /* Register declarations */
+    {WINED3D_SM1_OP_DCL,      0, 2, WINED3DSIH_DCL,          0,                           0                          },
+    /* Flow control */
+    {WINED3D_SM1_OP_REP,      0, 1, WINED3DSIH_REP,          WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_ENDREP,   0, 0, WINED3DSIH_ENDREP,       WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_IF,       0, 1, WINED3DSIH_IF,           WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_IFC,      0, 2, WINED3DSIH_IFC,          WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_ELSE,     0, 0, WINED3DSIH_ELSE,         WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_ENDIF,    0, 0, WINED3DSIH_ENDIF,        WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_BREAK,    0, 0, WINED3DSIH_BREAK,        WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_BREAKC,   0, 2, WINED3DSIH_BREAKC,       WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_BREAKP,   0, 1, WINED3DSIH_BREAKP,       0,                           0                          },
+    {WINED3D_SM1_OP_CALL,     0, 1, WINED3DSIH_CALL,         WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_CALLNZ,   0, 2, WINED3DSIH_CALLNZ,       WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_LOOP,     0, 2, WINED3DSIH_LOOP,         WINED3D_SHADER_VERSION(3,0), -1                         },
+    {WINED3D_SM1_OP_RET,      0, 0, WINED3DSIH_RET,          WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_ENDLOOP,  0, 0, WINED3DSIH_ENDLOOP,      WINED3D_SHADER_VERSION(3,0), -1                         },
+    {WINED3D_SM1_OP_LABEL,    0, 1, WINED3DSIH_LABEL,        WINED3D_SHADER_VERSION(2,1), -1                         },
+    /* Constant definitions */
+    {WINED3D_SM1_OP_DEF,      1, 5, WINED3DSIH_DEF,          0,                           0                          },
+    {WINED3D_SM1_OP_DEFB,     1, 2, WINED3DSIH_DEFB,         0,                           0                          },
+    {WINED3D_SM1_OP_DEFI,     1, 5, WINED3DSIH_DEFI,         0,                           0                          },
+    /* Texture */
+    {WINED3D_SM1_OP_TEXCOORD, 1, 1, WINED3DSIH_TEXCOORD,     0,                           WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXCOORD, 1, 2, WINED3DSIH_TEXCOORD,     WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+    {WINED3D_SM1_OP_TEXKILL,  1, 1, WINED3DSIH_TEXKILL,      WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(3,0)},
+    {WINED3D_SM1_OP_TEX,      1, 1, WINED3DSIH_TEX,          0,                           WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEX,      1, 2, WINED3DSIH_TEX,          WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+    {WINED3D_SM1_OP_TEX,      1, 3, WINED3DSIH_TEX,          WINED3D_SHADER_VERSION(2,0), -1                         },
+    {WINED3D_SM1_OP_TEXBEM,   1, 2, WINED3DSIH_TEXBEM,       0,                           WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXBEML,  1, 2, WINED3DSIH_TEXBEML,      WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXREG2AR,      1, 2, WINED3DSIH_TEXREG2AR,    WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXREG2GB,      1, 2, WINED3DSIH_TEXREG2GB,    WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXREG2RGB,     1, 2, WINED3DSIH_TEXREG2RGB,   WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x2PAD,     1, 2, WINED3DSIH_TEXM3x2PAD,   WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x2TEX,     1, 2, WINED3DSIH_TEXM3x2TEX,   WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x3PAD,     1, 2, WINED3DSIH_TEXM3x3PAD,   WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x3DIFF,    1, 2, WINED3DSIH_TEXM3x3DIFF,  WINED3D_SHADER_VERSION(0,0), WINED3D_SHADER_VERSION(0,0)},
+    {WINED3D_SM1_OP_TEXM3x3SPEC,    1, 3, WINED3DSIH_TEXM3x3SPEC,  WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x3VSPEC,   1, 2, WINED3DSIH_TEXM3x3VSPEC, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x3TEX,     1, 2, WINED3DSIH_TEXM3x3TEX,   WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXDP3TEX,      1, 2, WINED3DSIH_TEXDP3TEX,    WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x2DEPTH,   1, 2, WINED3DSIH_TEXM3x2DEPTH, WINED3D_SHADER_VERSION(1,3), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXDP3,   1, 2, WINED3DSIH_TEXDP3,       WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXM3x3,  1, 2, WINED3DSIH_TEXM3x3,      WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+    {WINED3D_SM1_OP_TEXDEPTH, 1, 1, WINED3DSIH_TEXDEPTH,     WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+    {WINED3D_SM1_OP_BEM,      1, 3, WINED3DSIH_BEM,          WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+    {WINED3D_SM1_OP_DSX,      1, 2, WINED3DSIH_DSX,          WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_DSY,      1, 2, WINED3DSIH_DSY,          WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_TEXLDD,   1, 5, WINED3DSIH_TEXLDD,       WINED3D_SHADER_VERSION(2,1), -1                         },
+    {WINED3D_SM1_OP_SETP,     1, 3, WINED3DSIH_SETP,         0,                           0                          },
+    {WINED3D_SM1_OP_TEXLDL,   1, 3, WINED3DSIH_TEXLDL,       WINED3D_SHADER_VERSION(3,0), -1                         },
+    {WINED3D_SM1_OP_PHASE,    0, 0, WINED3DSIH_PHASE,        0,                           0                          },
+    {0,                       0, 0, WINED3DSIH_TABLE_SIZE,   0,                           0                          },
+};
+
+/* Read a parameter opcode from the input stream,
+ * and possibly a relative addressing token.
+ * Return the number of tokens read */
+static int shader_get_param(const struct wined3d_sm1_data *priv, const DWORD *ptr, DWORD *token, DWORD *addr_token)
+{
+    UINT count = 1;
+
+    *token = *ptr;
+
+    /* PS >= 3.0 have relative addressing (with token)
+     * VS >= 2.0 have relative addressing (with token)
+     * VS >= 1.0 < 2.0 have relative addressing (without token)
+     * The version check below should work in general */
+    if (*ptr & WINED3DSHADER_ADDRMODE_RELATIVE)
+    {
+        if (priv->shader_version.major < 2)
+        {
+            *addr_token = (1 << 31)
+                    | ((WINED3DSPR_ADDR << WINED3DSP_REGTYPE_SHIFT2) & WINED3DSP_REGTYPE_MASK2)
+                    | ((WINED3DSPR_ADDR << WINED3DSP_REGTYPE_SHIFT) & WINED3DSP_REGTYPE_MASK)
+                    | (WINED3DSP_NOSWIZZLE << WINED3DSP_SWIZZLE_SHIFT);
+        }
+        else
+        {
+            *addr_token = *(ptr + 1);
+            ++count;
+        }
+    }
+
+    return count;
+}
+
+static const struct wined3d_sm1_opcode_info *shader_get_opcode(const struct wined3d_sm1_data *priv, DWORD code)
+{
+    DWORD shader_version = WINED3D_SHADER_VERSION(priv->shader_version.major, priv->shader_version.minor);
+    const struct wined3d_sm1_opcode_info *opcode_table = priv->opcode_table;
+    DWORD i = 0;
+
+    while (opcode_table[i].handler_idx != WINED3DSIH_TABLE_SIZE)
+    {
+        if ((code & WINED3DSI_OPCODE_MASK) == opcode_table[i].opcode
+                && shader_version >= opcode_table[i].min_version
+                && (!opcode_table[i].max_version || shader_version <= opcode_table[i].max_version))
+        {
+            return &opcode_table[i];
+        }
+        ++i;
+    }
+
+    FIXME("Unsupported opcode %#x(%d) masked %#x, shader version %#x\n",
+            code, code, code & WINED3DSI_OPCODE_MASK, shader_version);
+
+    return NULL;
+}
+
+/* Return the number of parameters to skip for an opcode */
+static int shader_skip_opcode(const struct wined3d_sm1_data *priv,
+        const struct wined3d_sm1_opcode_info *opcode_info, DWORD opcode_token)
+{
+   /* Shaders >= 2.0 may contain address tokens, but fortunately they
+    * have a useful length mask - use it here. Shaders 1.0 contain no such tokens */
+    return (priv->shader_version.major >= 2)
+            ? ((opcode_token & WINED3DSI_INSTLENGTH_MASK) >> WINED3DSI_INSTLENGTH_SHIFT) : opcode_info->param_count;
+}
+
+static void shader_parse_src_param(DWORD param, const struct wined3d_shader_src_param *rel_addr,
+        struct wined3d_shader_src_param *src)
+{
+    src->reg.type = ((param & WINED3DSP_REGTYPE_MASK) >> WINED3DSP_REGTYPE_SHIFT)
+            | ((param & WINED3DSP_REGTYPE_MASK2) >> WINED3DSP_REGTYPE_SHIFT2);
+    src->reg.idx = param & WINED3DSP_REGNUM_MASK;
+    src->reg.array_idx = ~0U;
+    src->swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT;
+    src->modifiers = (param & WINED3DSP_SRCMOD_MASK) >> WINED3DSP_SRCMOD_SHIFT;
+    src->reg.rel_addr = rel_addr;
+}
+
+static void shader_parse_dst_param(DWORD param, const struct wined3d_shader_src_param *rel_addr,
+        struct wined3d_shader_dst_param *dst)
+{
+    dst->reg.type = ((param & WINED3DSP_REGTYPE_MASK) >> WINED3DSP_REGTYPE_SHIFT)
+            | ((param & WINED3DSP_REGTYPE_MASK2) >> WINED3DSP_REGTYPE_SHIFT2);
+    dst->reg.idx = param & WINED3DSP_REGNUM_MASK;
+    dst->reg.array_idx = ~0U;
+    dst->write_mask = (param & WINED3D_SM1_WRITEMASK_MASK) >> WINED3D_SM1_WRITEMASK_SHIFT;
+    dst->modifiers = (param & WINED3DSP_DSTMOD_MASK) >> WINED3DSP_DSTMOD_SHIFT;
+    dst->shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
+    dst->reg.rel_addr = rel_addr;
+}
+
+/* Read the parameters of an unrecognized opcode from the input stream
+ * Return the number of tokens read.
+ *
+ * Note: This function assumes source or destination token format.
+ * It will not work with specially-formatted tokens like DEF or DCL,
+ * but hopefully those would be recognized */
+static int shader_skip_unrecognized(const struct wined3d_sm1_data *priv, const DWORD *ptr)
+{
+    int tokens_read = 0;
+    int i = 0;
+
+    /* TODO: Think of a good name for 0x80000000 and replace it with a constant */
+    while (*ptr & 0x80000000)
+    {
+        DWORD token, addr_token = 0;
+        struct wined3d_shader_src_param rel_addr;
+
+        tokens_read += shader_get_param(priv, ptr, &token, &addr_token);
+        ptr += tokens_read;
+
+        FIXME("Unrecognized opcode param: token=0x%08x addr_token=0x%08x name=", token, addr_token);
+
+        if (token & WINED3DSHADER_ADDRMODE_RELATIVE) shader_parse_src_param(addr_token, NULL, &rel_addr);
+
+        if (!i)
+        {
+            struct wined3d_shader_dst_param dst;
+
+            shader_parse_dst_param(token, token & WINED3DSHADER_ADDRMODE_RELATIVE ? &rel_addr : NULL, &dst);
+            shader_dump_dst_param(&dst, &priv->shader_version);
+        }
+        else
+        {
+            struct wined3d_shader_src_param src;
+
+            shader_parse_src_param(token, token & WINED3DSHADER_ADDRMODE_RELATIVE ? &rel_addr : NULL, &src);
+            shader_dump_src_param(&src, &priv->shader_version);
+        }
+        FIXME("\n");
+        ++i;
+    }
+    return tokens_read;
+}
+
+static void *shader_sm1_init(const DWORD *byte_code, const struct wined3d_shader_signature *output_signature)
+{
+    struct wined3d_sm1_data *priv;
+    BYTE major, minor;
+
+    major = WINED3D_SM1_VERSION_MAJOR(*byte_code);
+    minor = WINED3D_SM1_VERSION_MINOR(*byte_code);
+    if (WINED3D_SHADER_VERSION(major, minor) > WINED3D_SHADER_VERSION(3, 0))
+    {
+        WARN("Invalid shader version %u.%u (%#x).\n", major, minor, *byte_code);
+        return NULL;
+    }
+
+    priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
+    if (!priv)
+    {
+        ERR("Failed to allocate private data\n");
+        return NULL;
+    }
+
+    if (output_signature)
+    {
+        FIXME("SM 1-3 shader shouldn't have output signatures.\n");
+    }
+
+    switch (*byte_code >> 16)
+    {
+        case WINED3D_SM1_VS:
+            priv->shader_version.type = WINED3D_SHADER_TYPE_VERTEX;
+            priv->opcode_table = vs_opcode_table;
+            break;
+
+        case WINED3D_SM1_PS:
+            priv->shader_version.type = WINED3D_SHADER_TYPE_PIXEL;
+            priv->opcode_table = ps_opcode_table;
+            break;
+
+        default:
+            FIXME("Unrecognized shader type %#x\n", *byte_code >> 16);
+            HeapFree(GetProcessHeap(), 0, priv);
+            return NULL;
+    }
+
+    return priv;
+}
+
+static void shader_sm1_free(void *data)
+{
+    HeapFree(GetProcessHeap(), 0, data);
+}
+
+static void shader_sm1_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
+{
+    struct wined3d_sm1_data *priv = data;
+    DWORD version_token;
+
+    version_token = *(*ptr)++;
+    TRACE("version: 0x%08x\n", version_token);
+
+    priv->shader_version.major = WINED3D_SM1_VERSION_MAJOR(version_token);
+    priv->shader_version.minor = WINED3D_SM1_VERSION_MINOR(version_token);
+    *shader_version = priv->shader_version;
+}
+
+static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
+        UINT *param_size)
+{
+    struct wined3d_sm1_data *priv = data;
+    const struct wined3d_sm1_opcode_info *opcode_info;
+    DWORD opcode_token;
+
+    opcode_token = *(*ptr)++;
+    opcode_info = shader_get_opcode(priv, opcode_token);
+    if (!opcode_info)
+    {
+        FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token);
+        ins->handler_idx = WINED3DSIH_TABLE_SIZE;
+        *param_size = shader_skip_unrecognized(priv, *ptr);
+        return;
+    }
+
+    ins->handler_idx = opcode_info->handler_idx;
+    ins->flags = (opcode_token & WINED3D_OPCODESPECIFICCONTROL_MASK) >> WINED3D_OPCODESPECIFICCONTROL_SHIFT;
+    ins->coissue = opcode_token & WINED3DSI_COISSUE;
+    ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED;
+    ins->dst_count = opcode_info->dst_count ? 1 : 0;
+    ins->src_count = opcode_info->param_count - opcode_info->dst_count;
+    *param_size = shader_skip_opcode(priv, opcode_info, opcode_token);
+}
+
+static void shader_sm1_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+        struct wined3d_shader_src_param *src_rel_addr)
+{
+    struct wined3d_sm1_data *priv = data;
+    DWORD token, addr_token;
+
+    *ptr += shader_get_param(priv, *ptr, &token, &addr_token);
+    if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
+    {
+        shader_parse_src_param(addr_token, NULL, src_rel_addr);
+        shader_parse_src_param(token, src_rel_addr, src_param);
+    }
+    else
+    {
+        shader_parse_src_param(token, NULL, src_param);
+    }
+}
+
+static void shader_sm1_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+        struct wined3d_shader_src_param *dst_rel_addr)
+{
+    struct wined3d_sm1_data *priv = data;
+    DWORD token, addr_token;
+
+    *ptr += shader_get_param(priv, *ptr, &token, &addr_token);
+    if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
+    {
+        shader_parse_src_param(addr_token, NULL, dst_rel_addr);
+        shader_parse_dst_param(token, dst_rel_addr, dst_param);
+    }
+    else
+    {
+        shader_parse_dst_param(token, NULL, dst_param);
+    }
+}
+
+static void shader_sm1_read_semantic(const DWORD **ptr, struct wined3d_shader_semantic *semantic)
+{
+    DWORD usage_token = *(*ptr)++;
+    DWORD dst_token = *(*ptr)++;
+
+    semantic->usage = (usage_token & WINED3DSP_DCL_USAGE_MASK) >> WINED3DSP_DCL_USAGE_SHIFT;
+    semantic->usage_idx = (usage_token & WINED3DSP_DCL_USAGEINDEX_MASK) >> WINED3DSP_DCL_USAGEINDEX_SHIFT;
+    semantic->sampler_type = (usage_token & WINED3DSP_TEXTURETYPE_MASK) >> WINED3DSP_TEXTURETYPE_SHIFT;
+    shader_parse_dst_param(dst_token, NULL, &semantic->reg);
+}
+
+static void shader_sm1_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size)
+{
+    DWORD token = **ptr;
+    UINT size;
+
+    if ((token & WINED3DSI_OPCODE_MASK) != WINED3D_SM1_OP_COMMENT)
+    {
+        *comment = NULL;
+        return;
+    }
+
+    size = (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT;
+    *comment = (const char *)++(*ptr);
+    *comment_size = size * sizeof(DWORD);
+    *ptr += size;
+}
+
+static BOOL shader_sm1_is_end(void *data, const DWORD **ptr)
+{
+    if (**ptr == WINED3DSP_END)
+    {
+        ++(*ptr);
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
+const struct wined3d_shader_frontend sm1_shader_frontend =
+{
+    shader_sm1_init,
+    shader_sm1_free,
+    shader_sm1_read_header,
+    shader_sm1_read_opcode,
+    shader_sm1_read_src_param,
+    shader_sm1_read_dst_param,
+    shader_sm1_read_semantic,
+    shader_sm1_read_comment,
+    shader_sm1_is_end,
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c b/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c
new file mode 100644
index 0000000..824411d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c
@@ -0,0 +1,441 @@
+/*
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+
+#define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT    24
+#define WINED3D_SM4_INSTRUCTION_LENGTH_MASK     (0xf << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT)
+
+#define WINED3D_SM4_OPCODE_MASK                 0xff
+
+#define WINED3D_SM4_REGISTER_ORDER_SHIFT        20
+#define WINED3D_SM4_REGISTER_ORDER_MASK         (0x3 << WINED3D_SM4_REGISTER_ORDER_SHIFT)
+
+#define WINED3D_SM4_REGISTER_TYPE_SHIFT         12
+#define WINED3D_SM4_REGISTER_TYPE_MASK          (0xf << WINED3D_SM4_REGISTER_TYPE_SHIFT)
+
+#define WINED3D_SM4_IMMCONST_TYPE_SHIFT         0
+#define WINED3D_SM4_IMMCONST_TYPE_MASK          (0x3 << WINED3D_SM4_IMMCONST_TYPE_SHIFT)
+
+#define WINED3D_SM4_WRITEMASK_SHIFT             4
+#define WINED3D_SM4_WRITEMASK_MASK              (0xf << WINED3D_SM4_WRITEMASK_SHIFT)
+
+#define WINED3D_SM4_SWIZZLE_SHIFT               4
+#define WINED3D_SM4_SWIZZLE_MASK                (0xff << WINED3D_SM4_SWIZZLE_SHIFT)
+
+#define WINED3D_SM4_VERSION_MAJOR(version)      (((version) >> 4) & 0xf)
+#define WINED3D_SM4_VERSION_MINOR(version)      (((version) >> 0) & 0xf)
+
+enum wined3d_sm4_opcode
+{
+    WINED3D_SM4_OP_ADD      = 0x00,
+    WINED3D_SM4_OP_BREAK    = 0x02,
+    WINED3D_SM4_OP_BREAKC   = 0x03,
+    WINED3D_SM4_OP_CUT      = 0x09,
+    WINED3D_SM4_OP_DP3      = 0x10,
+    WINED3D_SM4_OP_DP4      = 0x11,
+    WINED3D_SM4_OP_EMIT     = 0x13,
+    WINED3D_SM4_OP_ENDIF    = 0x15,
+    WINED3D_SM4_OP_ENDLOOP  = 0x16,
+    WINED3D_SM4_OP_EXP      = 0x19,
+    WINED3D_SM4_OP_IADD     = 0x1e,
+    WINED3D_SM4_OP_IF       = 0x1f,
+    WINED3D_SM4_OP_IGE      = 0x21,
+    WINED3D_SM4_OP_LOG      = 0x2f,
+    WINED3D_SM4_OP_LT       = 0x31,
+    WINED3D_SM4_OP_MIN      = 0x33,
+    WINED3D_SM4_OP_MAX      = 0x34,
+    WINED3D_SM4_OP_MOV      = 0x36,
+    WINED3D_SM4_OP_MUL      = 0x38,
+    WINED3D_SM4_OP_RET      = 0x3e,
+    WINED3D_SM4_OP_RSQ      = 0x44,
+    WINED3D_SM4_OP_SINCOS   = 0x4d,
+};
+
+enum wined3d_sm4_register_type
+{
+    WINED3D_SM4_RT_TEMP         = 0x0,
+    WINED3D_SM4_RT_INPUT        = 0x1,
+    WINED3D_SM4_RT_OUTPUT       = 0x2,
+    WINED3D_SM4_RT_IMMCONST     = 0x4,
+    WINED3D_SM4_RT_CONSTBUFFER  = 0x8,
+};
+
+enum wined3d_sm4_immconst_type
+{
+    WINED3D_SM4_IMMCONST_FLOAT  = 0x1,
+    WINED3D_SM4_IMMCONST_FLOAT4 = 0x2,
+};
+
+struct wined3d_sm4_data
+{
+    struct wined3d_shader_version shader_version;
+    const DWORD *end;
+    const struct wined3d_shader_signature *output_signature;
+};
+
+struct wined3d_sm4_opcode_info
+{
+    enum wined3d_sm4_opcode opcode;
+    enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+    UINT dst_count;
+    UINT src_count;
+};
+
+struct sysval_map
+{
+    enum wined3d_sysval_semantic sysval;
+    WINED3DSHADER_PARAM_REGISTER_TYPE register_type;
+    UINT register_idx;
+};
+
+static const struct wined3d_sm4_opcode_info opcode_table[] =
+{
+    {WINED3D_SM4_OP_ADD,    WINED3DSIH_ADD,         1,  2},
+    {WINED3D_SM4_OP_BREAK,  WINED3DSIH_BREAK,       0,  0},
+    {WINED3D_SM4_OP_BREAKC, WINED3DSIH_BREAKP,      0,  1},
+    {WINED3D_SM4_OP_CUT,    WINED3DSIH_CUT,         0,  0},
+    {WINED3D_SM4_OP_DP3,    WINED3DSIH_DP3,         1,  2},
+    {WINED3D_SM4_OP_DP4,    WINED3DSIH_DP4,         1,  2},
+    {WINED3D_SM4_OP_EMIT,   WINED3DSIH_EMIT,        0,  0},
+    {WINED3D_SM4_OP_ENDIF,  WINED3DSIH_ENDIF,       0,  0},
+    {WINED3D_SM4_OP_ENDLOOP,WINED3DSIH_ENDLOOP,     0,  0},
+    {WINED3D_SM4_OP_EXP,    WINED3DSIH_EXP,         1,  1},
+    {WINED3D_SM4_OP_IADD,   WINED3DSIH_IADD,        1,  2},
+    {WINED3D_SM4_OP_IF,     WINED3DSIH_IF,          0,  1},
+    {WINED3D_SM4_OP_IGE,    WINED3DSIH_IGE,         1,  2},
+    {WINED3D_SM4_OP_LOG,    WINED3DSIH_LOG,         1,  1},
+    {WINED3D_SM4_OP_LT,     WINED3DSIH_LT,          1,  2},
+    {WINED3D_SM4_OP_MIN,    WINED3DSIH_MIN,         1,  2},
+    {WINED3D_SM4_OP_MAX,    WINED3DSIH_MAX,         1,  2},
+    {WINED3D_SM4_OP_MOV,    WINED3DSIH_MOV,         1,  1},
+    {WINED3D_SM4_OP_MUL,    WINED3DSIH_MUL,         1,  2},
+    {WINED3D_SM4_OP_RET,    WINED3DSIH_RET,         0,  0},
+    {WINED3D_SM4_OP_RSQ,    WINED3DSIH_RSQ,         1,  1},
+    {WINED3D_SM4_OP_SINCOS, WINED3DSIH_SINCOS,      1,  2},
+};
+
+static const WINED3DSHADER_PARAM_REGISTER_TYPE register_type_table[] =
+{
+    /* WINED3D_SM4_RT_TEMP */           WINED3DSPR_TEMP,
+    /* WINED3D_SM4_RT_INPUT */          WINED3DSPR_INPUT,
+    /* WINED3D_SM4_RT_OUTPUT */         WINED3DSPR_OUTPUT,
+    /* UNKNOWN */                       0,
+    /* WINED3D_SM4_RT_IMMCONST */       WINED3DSPR_IMMCONST,
+    /* UNKNOWN */                       0,
+    /* UNKNOWN */                       0,
+    /* UNKNOWN */                       0,
+    /* WINED3D_SM4_RT_CONSTBUFFER */    WINED3DSPR_CONSTBUFFER,
+};
+
+static const struct sysval_map sysval_map[] =
+{
+    {WINED3D_SV_DEPTH,      WINED3DSPR_DEPTHOUT,    0},
+    {WINED3D_SV_TARGET0,    WINED3DSPR_COLOROUT,    0},
+    {WINED3D_SV_TARGET1,    WINED3DSPR_COLOROUT,    1},
+    {WINED3D_SV_TARGET2,    WINED3DSPR_COLOROUT,    2},
+    {WINED3D_SV_TARGET3,    WINED3DSPR_COLOROUT,    3},
+    {WINED3D_SV_TARGET4,    WINED3DSPR_COLOROUT,    4},
+    {WINED3D_SV_TARGET5,    WINED3DSPR_COLOROUT,    5},
+    {WINED3D_SV_TARGET6,    WINED3DSPR_COLOROUT,    6},
+    {WINED3D_SV_TARGET7,    WINED3DSPR_COLOROUT,    7},
+};
+
+static const struct wined3d_sm4_opcode_info *get_opcode_info(enum wined3d_sm4_opcode opcode)
+{
+    unsigned int i;
+
+    for (i = 0; i < sizeof(opcode_table) / sizeof(*opcode_table); ++i)
+    {
+        if (opcode == opcode_table[i].opcode) return &opcode_table[i];
+    }
+
+    return NULL;
+}
+
+static void map_sysval(enum wined3d_sysval_semantic sysval, struct wined3d_shader_register *reg)
+{
+    unsigned int i;
+
+    for (i = 0; i < sizeof(sysval_map) / sizeof(*sysval_map); ++i)
+    {
+        if (sysval == sysval_map[i].sysval)
+        {
+            reg->type = sysval_map[i].register_type;
+            reg->idx = sysval_map[i].register_idx;
+        }
+    }
+}
+
+static void map_register(struct wined3d_sm4_data *priv, struct wined3d_shader_register *reg)
+{
+    switch (priv->shader_version.type)
+    {
+        case WINED3D_SHADER_TYPE_PIXEL:
+            if (reg->type == WINED3DSPR_OUTPUT)
+            {
+                unsigned int i;
+                const struct wined3d_shader_signature *s = priv->output_signature;
+
+                if (!s)
+                {
+                    ERR("Shader has no output signature, unable to map register.\n");
+                    break;
+                }
+
+                for (i = 0; i < s->element_count; ++i)
+                {
+                    if (s->elements[i].register_idx == reg->idx)
+                    {
+                        map_sysval(s->elements[i].sysval_semantic, reg);
+                        break;
+                    }
+                }
+            }
+            break;
+
+        default:
+            break;
+    }
+}
+
+static void *shader_sm4_init(const DWORD *byte_code, const struct wined3d_shader_signature *output_signature)
+{
+    struct wined3d_sm4_data *priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
+    if (!priv)
+    {
+        ERR("Failed to allocate private data\n");
+        return NULL;
+    }
+
+    priv->output_signature = output_signature;
+
+    return priv;
+}
+
+static void shader_sm4_free(void *data)
+{
+    HeapFree(GetProcessHeap(), 0, data);
+}
+
+static void shader_sm4_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
+{
+    struct wined3d_sm4_data *priv = data;
+    DWORD version_token;
+
+    priv->end = *ptr;
+
+    version_token = *(*ptr)++;
+    TRACE("version: 0x%08x\n", version_token);
+
+    TRACE("token count: %u\n", **ptr);
+    priv->end += *(*ptr)++;
+
+    switch (version_token >> 16)
+    {
+        case WINED3D_SM4_PS:
+            priv->shader_version.type = WINED3D_SHADER_TYPE_PIXEL;
+            break;
+
+        case WINED3D_SM4_VS:
+            priv->shader_version.type = WINED3D_SHADER_TYPE_VERTEX;
+            break;
+
+        case WINED3D_SM4_GS:
+            priv->shader_version.type = WINED3D_SHADER_TYPE_GEOMETRY;
+            break;
+
+        default:
+            FIXME("Unrecognized shader type %#x\n", version_token >> 16);
+    }
+    priv->shader_version.major = WINED3D_SM4_VERSION_MAJOR(version_token);
+    priv->shader_version.minor = WINED3D_SM4_VERSION_MINOR(version_token);
+
+    *shader_version = priv->shader_version;
+}
+
+static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
+        UINT *param_size)
+{
+    const struct wined3d_sm4_opcode_info *opcode_info;
+    DWORD token = *(*ptr)++;
+    DWORD opcode = token & WINED3D_SM4_OPCODE_MASK;
+
+    *param_size = ((token & WINED3D_SM4_INSTRUCTION_LENGTH_MASK) >> WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT) - 1;
+
+    opcode_info = get_opcode_info(opcode);
+    if (!opcode_info)
+    {
+        FIXME("Unrecognized opcode %#x, token 0x%08x\n", opcode, token);
+        ins->handler_idx = WINED3DSIH_TABLE_SIZE;
+        return;
+    }
+
+    ins->handler_idx = opcode_info->handler_idx;
+    ins->flags = 0;
+    ins->coissue = 0;
+    ins->predicate = 0;
+    ins->dst_count = opcode_info->dst_count;
+    ins->src_count = opcode_info->src_count;
+}
+
+static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+        struct wined3d_shader_src_param *src_rel_addr)
+{
+    struct wined3d_sm4_data *priv = data;
+    DWORD token = *(*ptr)++;
+    enum wined3d_sm4_register_type register_type;
+    DWORD order;
+
+    register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT;
+    if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table))
+    {
+        FIXME("Unhandled register type %#x\n", register_type);
+        src_param->reg.type = WINED3DSPR_TEMP;
+    }
+    else
+    {
+        src_param->reg.type = register_type_table[register_type];
+    }
+
+    order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
+
+    if (order < 1) src_param->reg.idx = ~0U;
+    else src_param->reg.idx = *(*ptr)++;
+
+    if (order < 2) src_param->reg.array_idx = ~0U;
+    else src_param->reg.array_idx = *(*ptr)++;
+
+    if (order > 2) FIXME("Unhandled order %u.\n", order);
+
+    if (register_type == WINED3D_SM4_RT_IMMCONST)
+    {
+        enum wined3d_sm4_immconst_type immconst_type =
+                (token & WINED3D_SM4_IMMCONST_TYPE_MASK) >> WINED3D_SM4_IMMCONST_TYPE_SHIFT;
+        src_param->swizzle = WINED3DSP_NOSWIZZLE;
+
+        switch(immconst_type)
+        {
+            case WINED3D_SM4_IMMCONST_FLOAT:
+                src_param->reg.immconst_type = WINED3D_IMMCONST_FLOAT;
+                memcpy(src_param->reg.immconst_data, *ptr, 1 * sizeof(DWORD));
+                *ptr += 1;
+                break;
+
+            case WINED3D_SM4_IMMCONST_FLOAT4:
+                src_param->reg.immconst_type = WINED3D_IMMCONST_FLOAT4;
+                memcpy(src_param->reg.immconst_data, *ptr, 4 * sizeof(DWORD));
+                *ptr += 4;
+                break;
+
+            default:
+                FIXME("Unhandled immediate constant type %#x\n", immconst_type);
+                break;
+        }
+    }
+    else
+    {
+        src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
+    }
+
+    src_param->modifiers = 0;
+    src_param->reg.rel_addr = NULL;
+
+    map_register(priv, &src_param->reg);
+}
+
+static void shader_sm4_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+        struct wined3d_shader_src_param *dst_rel_addr)
+{
+    struct wined3d_sm4_data *priv = data;
+    DWORD token = *(*ptr)++;
+    enum wined3d_sm4_register_type register_type;
+    DWORD order;
+
+    register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT;
+    if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table))
+    {
+        FIXME("Unhandled register type %#x\n", register_type);
+        dst_param->reg.type = WINED3DSPR_TEMP;
+    }
+    else
+    {
+        dst_param->reg.type = register_type_table[register_type];
+    }
+
+    order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
+
+    if (order < 1) dst_param->reg.idx = ~0U;
+    else dst_param->reg.idx = *(*ptr)++;
+
+    if (order < 2) dst_param->reg.array_idx = ~0U;
+    else dst_param->reg.array_idx = *(*ptr)++;
+
+    if (order > 2) FIXME("Unhandled order %u.\n", order);
+
+    dst_param->write_mask = (token & WINED3D_SM4_WRITEMASK_MASK) >> WINED3D_SM4_WRITEMASK_SHIFT;
+    dst_param->modifiers = 0;
+    dst_param->shift = 0;
+    dst_param->reg.rel_addr = NULL;
+
+    map_register(priv, &dst_param->reg);
+}
+
+static void shader_sm4_read_semantic(const DWORD **ptr, struct wined3d_shader_semantic *semantic)
+{
+    FIXME("ptr %p, semantic %p stub!\n", ptr, semantic);
+}
+
+static void shader_sm4_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size)
+{
+    FIXME("ptr %p, comment %p, comment_size %p stub!\n", ptr, comment, comment_size);
+    *comment = NULL;
+}
+
+static BOOL shader_sm4_is_end(void *data, const DWORD **ptr)
+{
+    struct wined3d_sm4_data *priv = data;
+    return *ptr == priv->end;
+}
+
+const struct wined3d_shader_frontend sm4_shader_frontend =
+{
+    shader_sm4_init,
+    shader_sm4_free,
+    shader_sm4_read_header,
+    shader_sm4_read_opcode,
+    shader_sm4_read_src_param,
+    shader_sm4_read_dst_param,
+    shader_sm4_read_semantic,
+    shader_sm4_read_comment,
+    shader_sm4_is_end,
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderapi.c b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
new file mode 100644
index 0000000..789982b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
@@ -0,0 +1,711 @@
+/** @file
+ * shaderlib -- interface to WINE's Direct3D shader functions
+ */
+
+/*
+ * Copyright (C) 2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <iprt/err.h>
+#include <iprt/mem.h>
+#include <iprt/assert.h>
+#include <iprt/log.h>
+#include "wined3d_private.h"
+
+#include "shaderlib.h"
+
+#ifdef RT_OS_WINDOWS
+#define OGLGETPROCADDRESS       wglGetProcAddress
+#elif RT_OS_DARWIN
+#include <mach-o/dyld.h>
+void *MyNSGLGetProcAddress(const char *name)
+{
+    NSSymbol symbol = NULL;
+    char *symbolName = malloc(strlen(name) + 2);
+    strcpy(symbolName + 1, name);
+    symbolName[0] = '_';
+    if (NSIsSymbolNameDefined(symbolName))
+        symbol = NSLookupAndBindSymbol(symbolName);
+    free(symbolName);
+    return symbol ? NSAddressOfSymbol(symbol) : NULL;
+}
+#define OGLGETPROCADDRESS(x)   MyNSGLGetProcAddress((const char *)x)
+#else
+extern void (*glXGetProcAddress(const GLubyte *procname))( void );
+#define OGLGETPROCADDRESS(x)    glXGetProcAddress((const GLubyte *)x)
+#endif
+
+#undef GL_EXT_FUNCS_GEN 
+#define GL_EXT_FUNCS_GEN \
+    /* GL_ARB_shader_objects */ \
+    USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, \
+            glGetObjectParameterivARB,                  ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC, \
+            glGetObjectParameterfvARB,                  ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC, \
+            glGetUniformLocationARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETACTIVEUNIFORMARBPROC, \
+            glGetActiveUniformARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, \
+            glUniform1iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IARBPROC, \
+            glUniform2iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IARBPROC, \
+            glUniform3iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IARBPROC, \
+            glUniform4iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FARBPROC, \
+            glUniform1fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FARBPROC, \
+            glUniform2fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FARBPROC, \
+            glUniform3fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FARBPROC, \
+            glUniform4fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FVARBPROC, \
+            glUniform1fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FVARBPROC, \
+            glUniform2fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FVARBPROC, \
+            glUniform3fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FVARBPROC, \
+            glUniform4fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IVARBPROC, \
+            glUniform1ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IVARBPROC, \
+            glUniform2ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IVARBPROC, \
+            glUniform3ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IVARBPROC, \
+            glUniform4ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC, \
+            glUniformMatrix2fvARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC, \
+            glUniformMatrix3fvARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC, \
+            glUniformMatrix4fvARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMFVARBPROC, \
+            glGetUniformfvARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMIVARBPROC, \
+            glGetUniformivARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETINFOLOGARBPROC, \
+            glGetInfoLogARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC, \
+            glUseProgramObjectARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCREATESHADEROBJECTARBPROC, \
+            glCreateShaderObjectARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLSHADERSOURCEARBPROC, \
+            glShaderSourceARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCOMPILESHADERARBPROC, \
+            glCompileShaderARB,                         ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC, \
+            glCreateProgramObjectARB,                   ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLATTACHOBJECTARBPROC, \
+            glAttachObjectARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLLINKPROGRAMARBPROC, \
+            glLinkProgramARB,                           ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLDETACHOBJECTARBPROC, \
+            glDetachObjectARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLDELETEOBJECTARBPROC, \
+            glDeleteObjectARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLVALIDATEPROGRAMARBPROC, \
+            glValidateProgramARB,                       ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC, \
+            glGetAttachedObjectsARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETHANDLEARBPROC, \
+            glGetHandleARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETSHADERSOURCEARBPROC, \
+            glGetShaderSourceARB,                       ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC, \
+            glBindAttribLocationARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETATTRIBLOCATIONARBPROC, \
+            glGetAttribLocationARB,                     ARB_SHADER_OBJECTS,             NULL) \
+
+extern BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter);
+
+static struct wined3d_context *pCurrentContext = NULL;
+static struct wined3d_adapter adapter = {0};
+static bool fInitializedLibrary = false;
+
+#define SHADER_SET_CURRENT_CONTEXT(ctx) \
+    pCurrentContext = (struct wined3d_context *)ctx;
+
+SHADERDECL(int) ShaderInitLib()
+{
+    struct wined3d_gl_info *gl_info = &adapter.gl_info;
+
+#ifdef RT_OS_WINDOWS
+#define USE_GL_FUNC(pfn) pfn = (void*)GetProcAddress(GetModuleHandle("opengl32.dll"), #pfn);
+#else
+#define USE_GL_FUNC(pfn) pfn = (void*)OGLGETPROCADDRESS(#pfn);
+#endif
+
+    /* Dynamically load all GL core functions */
+    GL_FUNCS_GEN;
+#undef USE_GL_FUNC
+
+#define USE_GL_FUNC(type, pfn, ext, replace) \
+{ \
+    gl_info->pfn = (void*)OGLGETPROCADDRESS(#pfn); \
+}
+    GL_EXT_FUNCS_GEN;
+
+    IWineD3DImpl_FillGLCaps(&adapter);
+    fInitializedLibrary = true;
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderDestroyLib()
+{
+    return VINF_SUCCESS;
+}
+
+struct IWineD3DDeviceImpl *context_get_device(const struct wined3d_context *context)
+{
+    return context->pDeviceContext;
+}
+
+struct wined3d_context *context_get_current(void)
+{
+    return pCurrentContext;
+}
+
+struct wined3d_context *context_acquire(IWineD3DDeviceImpl *This, IWineD3DSurface *target, enum ContextUsage usage)
+{
+    return pCurrentContext;
+}
+
+SHADERDECL(int) ShaderContextCreate(void **ppShaderContext)
+{
+    struct wined3d_context *pContext;
+    HRESULT hr;
+
+    pContext = (struct wined3d_context *)RTMemAllocZ(sizeof(struct wined3d_context));
+    AssertReturn(pContext, VERR_NO_MEMORY);
+    pContext->pDeviceContext = (IWineD3DDeviceImpl *)RTMemAllocZ(sizeof(IWineD3DDeviceImpl));
+    AssertReturn(pContext->pDeviceContext, VERR_NO_MEMORY);
+
+    pContext->gl_info = &adapter.gl_info;
+
+    pContext->pDeviceContext->adapter = &adapter;
+    pContext->pDeviceContext->shader_backend = &glsl_shader_backend;
+    pContext->pDeviceContext->ps_selected_mode = SHADER_GLSL;
+    pContext->pDeviceContext->vs_selected_mode = SHADER_GLSL;
+    pContext->render_offscreen = false;
+
+    list_init(&pContext->pDeviceContext->shaders);
+
+    if (fInitializedLibrary)
+    {
+        struct shader_caps shader_caps;
+        uint32_t state;
+
+        /* Initialize the shader backend. */
+        hr = pContext->pDeviceContext->shader_backend->shader_alloc_private((IWineD3DDevice *)pContext->pDeviceContext);
+        AssertReturn(hr == S_OK, VERR_INTERNAL_ERROR);
+
+        memset(&shader_caps, 0, sizeof(shader_caps));
+        pContext->pDeviceContext->shader_backend->shader_get_caps(&adapter.gl_info, &shader_caps);
+        pContext->pDeviceContext->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst;
+        pContext->pDeviceContext->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst;
+        pContext->pDeviceContext->vs_clipping = shader_caps.VSClipping;
+
+        pContext->pDeviceContext->stateBlock = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pContext->pDeviceContext->stateBlock));
+        AssertReturn(pContext->pDeviceContext->stateBlock, VERR_NO_MEMORY);
+        hr = stateblock_init(pContext->pDeviceContext->stateBlock, pContext->pDeviceContext, 0);
+        AssertReturn(hr == S_OK, VERR_INTERNAL_ERROR);
+        pContext->pDeviceContext->updateStateBlock = pContext->pDeviceContext->stateBlock;
+
+        pContext->pDeviceContext->stateBlock->vertexDecl = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DVertexDeclarationImpl));
+        AssertReturn(pContext->pDeviceContext->stateBlock->vertexDecl, VERR_NO_MEMORY);
+
+        /* Initialize the texture unit mapping to a 1:1 mapping */
+        for (state = 0; state < MAX_COMBINED_SAMPLERS; ++state)
+        {
+            if (state < pContext->gl_info->limits.fragment_samplers)
+            {
+                pContext->pDeviceContext->texUnitMap[state] = state;
+                pContext->pDeviceContext->rev_tex_unit_map[state] = state;
+            } else {
+                pContext->pDeviceContext->texUnitMap[state] = WINED3D_UNMAPPED_STAGE;
+                pContext->pDeviceContext->rev_tex_unit_map[state] = WINED3D_UNMAPPED_STAGE;
+            }
+        }
+    }
+
+    *ppShaderContext = (void *)pContext;
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderContextDestroy(void *pShaderContext)
+{
+    struct wined3d_context *pContext = (struct wined3d_context *)pShaderContext;
+
+    if (pContext->pDeviceContext)
+    {
+        IWineD3DStateBlockImpl *This = pContext->pDeviceContext->stateBlock;
+
+        /* Fails during init only. */
+        if (pContext->pDeviceContext->shader_priv)
+            pContext->pDeviceContext->shader_backend->shader_free_private((IWineD3DDevice *)pContext->pDeviceContext);
+
+        if (This)
+        {
+            if (This->vertexShaderConstantF)
+                HeapFree(GetProcessHeap(), 0, This->vertexShaderConstantF);
+            if (This->changed.vertexShaderConstantsF)
+                HeapFree(GetProcessHeap(), 0, This->changed.vertexShaderConstantsF);
+            if (This->pixelShaderConstantF)
+                HeapFree(GetProcessHeap(), 0, This->pixelShaderConstantF);
+            if (This->changed.pixelShaderConstantsF)
+                HeapFree(GetProcessHeap(), 0, This->changed.pixelShaderConstantsF);
+            if (This->contained_vs_consts_f)
+                HeapFree(GetProcessHeap(), 0, This->contained_vs_consts_f);
+            if (This->contained_ps_consts_f)
+                HeapFree(GetProcessHeap(), 0, This->contained_ps_consts_f);
+            if (This->vertexDecl)
+                HeapFree(GetProcessHeap(), 0, This->vertexDecl);
+            HeapFree(GetProcessHeap(), 0, This);
+        }
+
+        RTMemFree(pContext->pDeviceContext);
+    }
+    RTMemFree(pShaderContext);
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderCreateVertexShader(void *pShaderContext, const uint32_t *pShaderData, void **pShaderObj)
+{
+    IWineD3DDeviceImpl *This;
+    IWineD3DVertexShaderImpl *object;
+    HRESULT hr;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+    if (!object)
+    {
+        Log(("Failed to allocate shader memory.\n"));
+        return VERR_NO_MEMORY;
+    }
+
+    hr = vertexshader_init(object, This, pShaderData, NULL, NULL, NULL);
+    if (FAILED(hr))
+    {
+        Log(("Failed to initialize vertex shader, hr %#x.\n", hr));
+        HeapFree(GetProcessHeap(), 0, object);
+        return VERR_INTERNAL_ERROR;
+    }
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+    object = vertexshader_check_cached(This, object);
+#endif
+
+    Log(("Created vertex shader %p.\n", object));
+    *pShaderObj = (void *)object;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderCreatePixelShader(void *pShaderContext, const uint32_t *pShaderData, void **pShaderObj)
+{
+    IWineD3DDeviceImpl *This;
+    IWineD3DPixelShaderImpl *object;
+    HRESULT hr;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+    if (!object)
+    {
+        Log(("Failed to allocate shader memory.\n"));
+        return VERR_NO_MEMORY;
+    }
+
+    hr = pixelshader_init(object, This, pShaderData, NULL, NULL, NULL);
+    if (FAILED(hr))
+    {
+        Log(("Failed to initialize pixel shader, hr %#x.\n", hr));
+        HeapFree(GetProcessHeap(), 0, object);
+        return VERR_INTERNAL_ERROR;
+    }
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+    object = pixelshader_check_cached(This, object);
+#endif
+
+    Log(("Created pixel shader %p.\n", object));
+    *pShaderObj = (void *)object;
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderDestroyVertexShader(void *pShaderContext, void *pShaderObj)
+{
+    IWineD3DVertexShaderImpl *object = (IWineD3DVertexShaderImpl *)pShaderObj;
+    AssertReturn(pShaderObj, VERR_INVALID_PARAMETER);
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+
+    object->lpVtbl->Release((IWineD3DVertexShader *)object);
+	return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderDestroyPixelShader(void *pShaderContext, void *pShaderObj)
+{
+    IWineD3DPixelShaderImpl *object = (IWineD3DPixelShaderImpl *)pShaderObj;
+    AssertReturn(pShaderObj, VERR_INVALID_PARAMETER);
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+
+    object->lpVtbl->Release((IWineD3DPixelShader *)object);
+	return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShader(void *pShaderContext, void *pShaderObj)
+{
+    IWineD3DDeviceImpl *This;
+    IWineD3DVertexShader* pShader;
+    IWineD3DVertexShader* oldShader;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+    pShader   = (IWineD3DVertexShader* )pShaderObj;
+    oldShader = This->updateStateBlock->vertexShader;
+
+    if(oldShader == pShader) {
+        /* Checked here to allow proper stateblock recording */
+        Log(("App is setting the old shader over, nothing to do\n"));
+        return VINF_SUCCESS;
+    }
+
+    This->updateStateBlock->vertexShader         = pShader;
+    This->updateStateBlock->changed.vertexShader = TRUE;
+
+    Log(("(%p) : setting pShader(%p)\n", This, pShader));
+    if(pShader) IWineD3DVertexShader_AddRef(pShader);
+    if(oldShader) IWineD3DVertexShader_Release(oldShader);
+
+    pCurrentContext->fChangedVertexShader = true;
+    pCurrentContext->fChangedVertexShaderConstant = true;    /* force constant reload. */
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShader(void *pShaderContext, void *pShaderObj)
+{
+    IWineD3DDeviceImpl *This;
+    IWineD3DPixelShader* pShader;
+    IWineD3DPixelShader* oldShader;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+    pShader   = (IWineD3DPixelShader* )pShaderObj;
+    oldShader = This->updateStateBlock->pixelShader;
+
+    if(oldShader == pShader) {
+        /* Checked here to allow proper stateblock recording */
+        Log(("App is setting the old shader over, nothing to do\n"));
+        return VINF_SUCCESS;
+    }
+
+    This->updateStateBlock->pixelShader         = pShader;
+    This->updateStateBlock->changed.pixelShader = TRUE;
+
+    Log(("(%p) : setting pShader(%p)\n", This, pShader));
+    if(pShader) IWineD3DPixelShader_AddRef(pShader);
+    if(oldShader) IWineD3DPixelShader_Release(oldShader);
+
+    pCurrentContext->fChangedPixelShader = true;
+    pCurrentContext->fChangedPixelShaderConstant = true;    /* force constant reload. */
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShaderConstantB(void *pShaderContext, uint32_t start, const uint8_t *srcData, uint32_t count)
+{
+    IWineD3DDeviceImpl *This;
+    unsigned int i, cnt = min(count, MAX_CONST_B - start);
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    Log(("(ShaderSetVertexShaderConstantB %p, srcData %p, start %d, count %d)\n",
+            srcData, start, count));
+
+    if (!srcData || start >= MAX_CONST_B)
+    {
+        Log(("incorrect vertex shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    memcpy(&This->updateStateBlock->vertexShaderConstantB[start], srcData, cnt * sizeof(BOOL));
+    for (i = 0; i < cnt; i++)
+        Log(("Set BOOL constant %u to %s\n", start + i, srcData[i]? "true":"false"));
+
+    for (i = start; i < cnt + start; ++i) {
+        This->updateStateBlock->changed.vertexShaderConstantsB |= (1 << i);
+    }
+
+    pCurrentContext->fChangedVertexShaderConstant = true;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShaderConstantI(void *pShaderContext, uint32_t start, const int32_t *srcData, uint32_t count)
+{
+    IWineD3DDeviceImpl *This;
+    unsigned int i, cnt = min(count, MAX_CONST_I - start);
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    Log(("(ShaderSetVertexShaderConstantI %p, srcData %p, start %d, count %d)\n",
+            srcData, start, count));
+
+    if (!srcData || start >= MAX_CONST_I)
+    {
+        Log(("incorrect vertex shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    memcpy(&This->updateStateBlock->vertexShaderConstantI[start * 4], srcData, cnt * sizeof(int32_t) * 4);
+
+    for (i = start; i < cnt + start; ++i) {
+        This->updateStateBlock->changed.vertexShaderConstantsI |= (1 << i);
+    }
+
+    pCurrentContext->fChangedVertexShaderConstant = true;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShaderConstantF(void *pShaderContext, uint32_t start, const float *srcData, uint32_t count)
+{
+    IWineD3DDeviceImpl *This;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    Log(("(ShaderSetVertexShaderConstantF %p, srcData %p, start %d, count %d)\n",
+            srcData, start, count));
+
+    if (srcData == NULL || start + count > This->d3d_vshader_constantF || start > This->d3d_vshader_constantF)
+    {
+        Log(("incorrect vertex shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+        return VERR_INVALID_PARAMETER;
+    }
+    memcpy(&This->updateStateBlock->vertexShaderConstantF[start * 4], srcData, count * sizeof(float) * 4);
+
+    This->shader_backend->shader_update_float_vertex_constants((IWineD3DDevice *)This, start, count);
+
+    memset(This->updateStateBlock->changed.vertexShaderConstantsF + start, 1,
+           sizeof(*This->updateStateBlock->changed.vertexShaderConstantsF) * count);
+
+    pCurrentContext->fChangedVertexShaderConstant = true;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShaderConstantB(void *pShaderContext, uint32_t start, const uint8_t *srcData, uint32_t count)
+{
+    IWineD3DDeviceImpl *This;
+    unsigned int i, cnt = min(count, MAX_CONST_B - start);
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    Log(("(ShaderSetPixelShaderConstantB %p, srcData %p, start %d, count %d)\n",
+            srcData, start, count));
+
+    if (!srcData || start >= MAX_CONST_B)
+    {
+        Log(("incorrect pixel shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    memcpy(&This->updateStateBlock->pixelShaderConstantB[start], srcData, cnt * sizeof(BOOL));
+    for (i = 0; i < cnt; i++)
+        Log(("Set BOOL constant %u to %s\n", start + i, srcData[i]? "true":"false"));
+
+    for (i = start; i < cnt + start; ++i) {
+        This->updateStateBlock->changed.pixelShaderConstantsB |= (1 << i);
+    }
+
+    pCurrentContext->fChangedPixelShaderConstant = true;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShaderConstantI(void *pShaderContext, uint32_t start, const int32_t *srcData, uint32_t count)
+{
+    IWineD3DDeviceImpl *This;
+    unsigned int i, cnt = min(count, MAX_CONST_I - start);
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    Log(("(ShaderSetPixelShaderConstantI %p, srcData %p, start %d, count %d)\n",
+            srcData, start, count));
+
+    if (!srcData || start >= MAX_CONST_I)
+    {
+        Log(("incorrect pixel shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    memcpy(&This->updateStateBlock->pixelShaderConstantI[start * 4], srcData, cnt * sizeof(int32_t) * 4);
+
+    for (i = start; i < cnt + start; ++i) {
+        This->updateStateBlock->changed.pixelShaderConstantsI |= (1 << i);
+    }
+
+    pCurrentContext->fChangedPixelShaderConstant = true;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShaderConstantF(void *pShaderContext, uint32_t start, const float *srcData, uint32_t count)
+{
+    IWineD3DDeviceImpl *This;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = pCurrentContext->pDeviceContext;
+
+    Log(("(ShaderSetPixelShaderConstantF %p, srcData %p, start %d, count %d)\n",
+            srcData, start, count));
+
+    if (srcData == NULL || start + count > This->d3d_pshader_constantF || start > This->d3d_pshader_constantF)
+    {
+        Log(("incorrect pixel shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    memcpy(&This->updateStateBlock->pixelShaderConstantF[start * 4], srcData, count * sizeof(float) * 4);
+
+    This->shader_backend->shader_update_float_pixel_constants((IWineD3DDevice *)This, start, count);
+
+    memset(This->updateStateBlock->changed.pixelShaderConstantsF + start, 1,
+            sizeof(*This->updateStateBlock->changed.pixelShaderConstantsF) * count);
+
+    pCurrentContext->fChangedPixelShaderConstant = true;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight)
+{
+    IWineD3DDeviceImpl *pThis;
+    GLfloat yoffset;
+    GLint viewport[4];
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    pThis = pCurrentContext->pDeviceContext;
+
+    glGetIntegerv(GL_VIEWPORT, viewport);
+#ifdef DEBUG
+    AssertReturn(glGetError() == GL_NO_ERROR, VERR_INTERNAL_ERROR);
+#endif
+
+    yoffset = -(63.0f / 64.0f) / viewport[3] /* height */;
+    pThis->posFixup[0] = 1.0f;  /* This is needed to get the x coord unmodified through a MAD. */
+    pThis->posFixup[1] = -1.0f;  /* y-inversion */
+    pThis->posFixup[2] = (63.0f / 64.0f) / viewport[2] /* width */;
+    pThis->posFixup[3] = pThis->posFixup[1] * yoffset;
+
+    pThis->rtHeight = rtHeight;
+
+    /* @todo missing state:
+     * - fog enable (stateblock->renderState[WINED3DRS_FOGENABLE])
+     * - fog mode (stateblock->renderState[WINED3DRS_FOGTABLEMODE])
+     * - stateblock->vertexDecl->position_transformed
+     */
+
+    if (    pCurrentContext->fChangedPixelShader 
+        ||  pCurrentContext->fChangedVertexShader)
+        pThis->shader_backend->shader_select(pCurrentContext, !!pThis->updateStateBlock->pixelShader, !!pThis->updateStateBlock->vertexShader);
+    pCurrentContext->fChangedPixelShader = pCurrentContext->fChangedVertexShader = false;
+
+    if (    pCurrentContext->fChangedPixelShaderConstant 
+        ||  pCurrentContext->fChangedVertexShaderConstant)
+        pThis->shader_backend->shader_load_constants(pCurrentContext, !!pThis->updateStateBlock->pixelShader, !!pThis->updateStateBlock->vertexShader);
+    pCurrentContext->fChangedPixelShaderConstant  = false;
+    pCurrentContext->fChangedVertexShaderConstant = false;
+
+    return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16])
+{
+#ifdef DEBUG
+    GLenum lastError;
+#endif
+    GLfloat xoffset, yoffset;
+
+    /* Assumes OpenGL context has been activated. */
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+
+    /* The rule is that the window coordinate 0 does not correspond to the
+       beginning of the first pixel, but the center of the first pixel.
+       As a consequence if you want to correctly draw one line exactly from
+       the left to the right end of the viewport (with all matrices set to
+       be identity), the x coords of both ends of the line would be not
+       -1 and 1 respectively but (-1-1/viewport_widh) and (1-1/viewport_width)
+       instead.
+
+       1.0 / Width is used because the coord range goes from -1.0 to 1.0, then we
+       divide by the Width/Height, so we need the half range(1.0) to translate by
+       half a pixel.
+
+       The other fun is that d3d's output z range after the transformation is [0;1],
+       but opengl's is [-1;1]. Since the z buffer is in range [0;1] for both, gl
+       scales [-1;1] to [0;1]. This would mean that we end up in [0.5;1] and loose a lot
+       of Z buffer precision and the clear values do not match in the z test. Thus scale
+       [0;1] to [-1;1], so when gl undoes that we utilize the full z range
+    */
+
+    /*
+     * Careful with the order of operations here, we're essentially working backwards:
+     * x = x + 1/w;
+     * y = (y - 1/h) * flip;
+     * z = z * 2 - 1;
+     *
+     * Becomes:
+     * glTranslatef(0.0, 0.0, -1.0);
+     * glScalef(1.0, 1.0, 2.0);
+     *
+     * glScalef(1.0, flip, 1.0);
+     * glTranslatef(1/w, -1/h, 0.0);
+     *
+     * This is equivalent to:
+     * glTranslatef(1/w, -flip/h, -1.0)
+     * glScalef(1.0, flip, 2.0);
+     */
+    /* Translate by slightly less than a half pixel to force a top-left
+     * filling convention. We want the difference to be large enough that
+     * it doesn't get lost due to rounding inside the driver, but small
+     * enough to prevent it from interfering with any anti-aliasing. */
+    xoffset = (63.0f / 64.0f) / cxViewPort;
+    yoffset = -(63.0f / 64.0f) / cyViewPort;
+
+    glTranslatef(xoffset, -yoffset, -1.0f);
+    /* flip y coordinate origin too */
+    glScalef(1.0f, -1.0f, 2.0f);
+
+    glMultMatrixf(matrix);
+
+#ifdef DEBUG
+    lastError = glGetError();                                     \
+    AssertMsgReturn(lastError == GL_NO_ERROR, ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, lastError), VERR_INTERNAL_ERROR);
+#endif
+    return VINF_SUCCESS;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderlib.h b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
new file mode 100644
index 0000000..a427994
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
@@ -0,0 +1,48 @@
+#ifndef __SHADERLIB_H__
+#define __SHADERLIB_H__
+
+#include <VBox/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef IN_SHADERLIB_STATIC
+#  define SHADERDECL(type)           DECLHIDDEN(type) RTCALL
+#else
+#  define SHADERDECL(type)           DECLEXPORT(type) RTCALL
+#endif
+
+
+SHADERDECL(int) ShaderInitLib();
+SHADERDECL(int) ShaderDestroyLib();
+
+SHADERDECL(int) ShaderContextCreate(void **ppShaderContext);
+SHADERDECL(int) ShaderContextDestroy(void *pShaderContext);
+
+SHADERDECL(int) ShaderCreateVertexShader(void *pShaderContext, const uint32_t *pShaderData, void **pShaderObj);
+SHADERDECL(int) ShaderCreatePixelShader(void *pShaderContext, const uint32_t *pShaderData, void **pShaderObj);
+
+SHADERDECL(int) ShaderDestroyVertexShader(void *pShaderContext, void *pShaderObj);
+SHADERDECL(int) ShaderDestroyPixelShader(void *pShaderContext, void *pShaderObj);
+
+SHADERDECL(int) ShaderSetVertexShader(void *pShaderContext, void *pShaderObj);
+SHADERDECL(int) ShaderSetPixelShader(void *pShaderContext, void *pShaderObj);
+
+SHADERDECL(int) ShaderSetVertexShaderConstantB(void *pShaderContext, uint32_t reg, const uint8_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetVertexShaderConstantI(void *pShaderContext, uint32_t reg, const int32_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetVertexShaderConstantF(void *pShaderContext, uint32_t reg, const float *pValues, uint32_t cRegisters);
+
+SHADERDECL(int) ShaderSetPixelShaderConstantB(void *pShaderContext, uint32_t reg, const uint8_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetPixelShaderConstantI(void *pShaderContext, uint32_t reg, const int32_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetPixelShaderConstantF(void *pShaderContext, uint32_t reg, const float *pValues, uint32_t cRegisters);
+
+SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight);
+
+SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SHADERLIB_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/stateblock.c b/src/VBox/Devices/Graphics/shaderlib/stateblock.c
new file mode 100644
index 0000000..1507ec3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/stateblock.c
@@ -0,0 +1,99 @@
+/*
+ * state block implementation
+ *
+ * Copyright 2002 Raphael Junqueira
+ * Copyright 2004 Jason Edmeades
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2007 Stefan Dösinger for CodeWeavers
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+
+/* Allocates the correct amount of space for pixel and vertex shader constants,
+ * along with their set/changed flags on the given stateblock object
+ */
+static HRESULT stateblock_allocate_shader_constants(IWineD3DStateBlockImpl *object)
+{
+    IWineD3DDeviceImpl *device = object->device;
+
+    /* Allocate space for floating point constants */
+    object->pixelShaderConstantF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(float) * device->d3d_pshader_constantF * 4);
+    if (!object->pixelShaderConstantF) goto fail;
+
+    object->changed.pixelShaderConstantsF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(BOOL) * device->d3d_pshader_constantF);
+    if (!object->changed.pixelShaderConstantsF) goto fail;
+
+    object->vertexShaderConstantF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(float) * device->d3d_vshader_constantF * 4);
+    if (!object->vertexShaderConstantF) goto fail;
+
+    object->changed.vertexShaderConstantsF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            sizeof(BOOL) * device->d3d_vshader_constantF);
+    if (!object->changed.vertexShaderConstantsF) goto fail;
+
+    object->contained_vs_consts_f = HeapAlloc(GetProcessHeap(), 0,
+            sizeof(DWORD) * device->d3d_vshader_constantF);
+    if (!object->contained_vs_consts_f) goto fail;
+
+    object->contained_ps_consts_f = HeapAlloc(GetProcessHeap(), 0,
+            sizeof(DWORD) * device->d3d_pshader_constantF);
+    if (!object->contained_ps_consts_f) goto fail;
+
+    return WINED3D_OK;
+
+fail:
+    ERR("Failed to allocate memory\n");
+    HeapFree(GetProcessHeap(), 0, object->pixelShaderConstantF);
+    HeapFree(GetProcessHeap(), 0, object->changed.pixelShaderConstantsF);
+    HeapFree(GetProcessHeap(), 0, object->vertexShaderConstantF);
+    HeapFree(GetProcessHeap(), 0, object->changed.vertexShaderConstantsF);
+    HeapFree(GetProcessHeap(), 0, object->contained_vs_consts_f);
+    HeapFree(GetProcessHeap(), 0, object->contained_ps_consts_f);
+    return E_OUTOFMEMORY;
+}
+
+static inline void stateblock_set_bits(DWORD *map, UINT map_size)
+{
+    DWORD mask = (1 << (map_size & 0x1f)) - 1;
+    memset(map, 0xff, (map_size >> 5) * sizeof(*map));
+    if (mask) map[map_size >> 5] = mask;
+}
+
+
+HRESULT stateblock_init(IWineD3DStateBlockImpl *stateblock, IWineD3DDeviceImpl *device, WINED3DSTATEBLOCKTYPE type)
+{
+    stateblock->ref = 1;
+    stateblock->device = device;
+    stateblock->blockType = type;
+
+    return stateblock_allocate_shader_constants(stateblock);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/utils.c b/src/VBox/Devices/Graphics/shaderlib/utils.c
new file mode 100644
index 0000000..08ca4ae
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/utils.c
@@ -0,0 +1,138 @@
+/* $Id: utils.c $ */
+/** @file
+ * DevVMWare/Shaderlib - Utility/Stub Functions & Data.
+ */
+
+/*
+ * Copyright (C) 2013-2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <iprt/err.h>
+#include <iprt/mem.h>
+#include <iprt/assert.h>
+#include <windows.h>
+#include "wined3d_private.h"
+
+
+
+void *wined3d_rb_alloc(size_t size)
+{
+    return RTMemAlloc(size);
+}
+
+void *wined3d_rb_realloc(void *ptr, size_t size)
+{
+    return RTMemRealloc(ptr, size);
+}
+
+void wined3d_rb_free(void *ptr)
+{
+    RTMemFree(ptr);
+}
+
+/* This small helper function is used to convert a bitmask into the number of masked bits */
+unsigned int count_bits(unsigned int mask)
+{
+    unsigned int count;
+    for (count = 0; mask; ++count)
+    {
+        mask &= mask - 1;
+    }
+    return count;
+}
+
+UINT wined3d_log2i(UINT32 x)
+{
+    static const UINT l[] =
+    {
+        ~0U, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+          4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+          5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+          5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+          6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+          6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+          6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+          6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+          7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+    };
+    UINT32 i;
+
+    return (i = x >> 16) ? (x = i >> 8) ? l[x] + 24 : l[i] + 16 : (i = x >> 8) ? l[i] + 8 : l[x];
+}
+
+/* Set the shader type for this device, depending on the given capabilities
+ * and the user preferences in wined3d_settings. */
+void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected)
+{
+    *vs_selected = SHADER_GLSL;
+    *ps_selected = SHADER_GLSL;
+}
+
+const char *debug_glerror(GLenum error) {
+    switch(error) {
+#define GLERROR_TO_STR(u) case u: return #u
+        GLERROR_TO_STR(GL_NO_ERROR);
+        GLERROR_TO_STR(GL_INVALID_ENUM);
+        GLERROR_TO_STR(GL_INVALID_VALUE);
+        GLERROR_TO_STR(GL_INVALID_OPERATION);
+        GLERROR_TO_STR(GL_STACK_OVERFLOW);
+        GLERROR_TO_STR(GL_STACK_UNDERFLOW);
+        GLERROR_TO_STR(GL_OUT_OF_MEMORY);
+        GLERROR_TO_STR(GL_INVALID_FRAMEBUFFER_OPERATION);
+#undef GLERROR_TO_STR
+        default:
+            return "unrecognized";
+    }
+}
+
+void dump_color_fixup_desc(struct color_fixup_desc fixup)
+{
+}
+
+void context_release(struct wined3d_context *context)
+{
+}
+
+static void CDECL wined3d_do_nothing(void)
+{
+}
+
+void (* CDECL wine_tsx11_lock_ptr)(void)   = wined3d_do_nothing;
+void (* CDECL wine_tsx11_unlock_ptr)(void) = wined3d_do_nothing;
+
+LPVOID      WINAPI VBoxHeapAlloc(HANDLE hHeap, DWORD heaptype,SIZE_T size)
+{
+    return RTMemAllocZ(size);
+}
+
+BOOL        WINAPI VBoxHeapFree(HANDLE hHeap, DWORD heaptype,LPVOID ptr)
+{
+    RTMemFree(ptr);
+    return TRUE;
+}
+
+LPVOID      WINAPI VBoxHeapReAlloc(HANDLE hHeap,DWORD heaptype,LPVOID ptr ,SIZE_T size)
+{
+    return RTMemRealloc(ptr, size);
+}
+
+void VBoxDebugBreak()
+{
+    AssertFailed();
+}
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/vboxext.h b/src/VBox/Devices/Graphics/shaderlib/vboxext.h
new file mode 100644
index 0000000..ce27843
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/vboxext.h
@@ -0,0 +1,157 @@
+/* $Id: vboxext.h $ */
+/** @file
+ *
+ * VBox extension to Wine D3D
+ *
+ * Copyright (C) 2011-2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef ___VBOXEXT_H__
+#define ___VBOXEXT_H__
+
+#ifdef VBOX_WINE_WITHOUT_LIBWINE
+# include <windows.h>
+#endif
+
+#include <iprt/list.h>
+
+HRESULT VBoxExtCheckInit();
+HRESULT VBoxExtCheckTerm();
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+# ifndef VBOX_WITH_WDDM
+/* Windows destroys HDC created by a given thread when the thread is terminated
+ * this leads to a mess-up in Wine & Chromium code in some situations, e.g.
+ * D3D device is created in one thread, then the thread is terminated,
+ * then device is started to be used in another thread */
+HDC VBoxExtGetDC(HWND hWnd);
+int VBoxExtReleaseDC(HWND hWnd, HDC hDC);
+# endif
+/* We need to do a VBoxTlsRefRelease for the current thread context on thread exit to avoid memory leaking
+ * Calling VBoxTlsRefRelease may result in a call to context dtor callback, which is supposed to be run under wined3d lock.
+ * We can not acquire a wined3d lock in DllMain since this would result in a lock order violation, which may result in a deadlock.
+ * In other words, wined3d may internally call Win32 API functions which result in a DLL lock acquisition while holding wined3d lock.
+ * So lock order should always be "wined3d lock" -> "dll lock".
+ * To avoid possible deadlocks we make an asynchronous call to a worker thread to make a context release from there. */
+struct wined3d_context;
+void VBoxExtReleaseContextAsync(struct wined3d_context *context);
+#endif
+
+/* API for creating & destroying windows */
+HRESULT VBoxExtWndDestroy(HWND hWnd, HDC hDC);
+HRESULT VBoxExtWndCreate(DWORD width, DWORD height, HWND *phWnd, HDC *phDC);
+
+
+/* hashmap */
+typedef DECLCALLBACK(uint32_t) FNVBOXEXT_HASHMAP_HASH(void *pvKey);
+typedef FNVBOXEXT_HASHMAP_HASH *PFNVBOXEXT_HASHMAP_HASH;
+
+typedef DECLCALLBACK(bool) FNVBOXEXT_HASHMAP_EQUAL(void *pvKey1, void *pvKey2);
+typedef FNVBOXEXT_HASHMAP_EQUAL *PFNVBOXEXT_HASHMAP_EQUAL;
+
+struct VBOXEXT_HASHMAP;
+struct VBOXEXT_HASHMAP_ENTRY;
+typedef DECLCALLBACK(bool) FNVBOXEXT_HASHMAP_VISITOR(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor);
+typedef FNVBOXEXT_HASHMAP_VISITOR *PFNVBOXEXT_HASHMAP_VISITOR;
+
+typedef struct VBOXEXT_HASHMAP_ENTRY
+{
+    RTLISTNODE ListNode;
+    void *pvKey;
+    uint32_t u32Hash;
+} VBOXEXT_HASHMAP_ENTRY, *PVBOXEXT_HASHMAP_ENTRY;
+
+typedef struct VBOXEXT_HASHMAP_BUCKET
+{
+    RTLISTNODE EntryList;
+} VBOXEXT_HASHMAP_BUCKET, *PVBOXEXT_HASHMAP_BUCKET;
+
+#define VBOXEXT_HASHMAP_NUM_BUCKETS 29
+
+typedef struct VBOXEXT_HASHMAP
+{
+    PFNVBOXEXT_HASHMAP_HASH pfnHash;
+    PFNVBOXEXT_HASHMAP_EQUAL pfnEqual;
+    uint32_t cEntries;
+    VBOXEXT_HASHMAP_BUCKET aBuckets[VBOXEXT_HASHMAP_NUM_BUCKETS];
+} VBOXEXT_HASHMAP, *PVBOXEXT_HASHMAP;
+
+void VBoxExtHashInit(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_HASH pfnHash, PFNVBOXEXT_HASHMAP_EQUAL pfnEqual);
+PVBOXEXT_HASHMAP_ENTRY VBoxExtHashPut(PVBOXEXT_HASHMAP pMap, void *pvKey, PVBOXEXT_HASHMAP_ENTRY pEntry);
+PVBOXEXT_HASHMAP_ENTRY VBoxExtHashGet(PVBOXEXT_HASHMAP pMap, void *pvKey);
+PVBOXEXT_HASHMAP_ENTRY VBoxExtHashRemove(PVBOXEXT_HASHMAP pMap, void *pvKey);
+void* VBoxExtHashRemoveEntry(PVBOXEXT_HASHMAP pMap, PVBOXEXT_HASHMAP_ENTRY pEntry);
+void VBoxExtHashVisit(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_VISITOR pfnVisitor, void *pvVisitor);
+void VBoxExtHashCleanup(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_VISITOR pfnVisitor, void *pvVisitor);
+
+DECLINLINE(uint32_t) VBoxExtHashSize(PVBOXEXT_HASHMAP pMap)
+{
+    return pMap->cEntries;
+}
+
+DECLINLINE(void*) VBoxExtHashEntryKey(PVBOXEXT_HASHMAP_ENTRY pEntry)
+{
+    return pEntry->pvKey;
+}
+
+struct VBOXEXT_HASHCACHE_ENTRY;
+typedef DECLCALLBACK(void) FNVBOXEXT_HASHCACHE_CLEANUP_ENTRY(void *pvKey, struct VBOXEXT_HASHCACHE_ENTRY *pEntry);
+typedef FNVBOXEXT_HASHCACHE_CLEANUP_ENTRY *PFNVBOXEXT_HASHCACHE_CLEANUP_ENTRY;
+
+typedef struct VBOXEXT_HASHCACHE_ENTRY
+{
+    VBOXEXT_HASHMAP_ENTRY MapEntry;
+    uint32_t u32Usage;
+} VBOXEXT_HASHCACHE_ENTRY, *PVBOXEXT_HASHCACHE_ENTRY;
+
+typedef struct VBOXEXT_HASHCACHE
+{
+    VBOXEXT_HASHMAP Map;
+    uint32_t cMaxElements;
+    PFNVBOXEXT_HASHCACHE_CLEANUP_ENTRY pfnCleanupEntry;
+} VBOXEXT_HASHCACHE, *PVBOXEXT_HASHCACHE;
+
+#define VBOXEXT_HASHCACHE_FROM_MAP(_pMap) RT_FROM_MEMBER((_pMap), VBOXEXT_HASHCACHE, Map)
+#define VBOXEXT_HASHCACHE_ENTRY_FROM_MAP(_pEntry) RT_FROM_MEMBER((_pEntry), VBOXEXT_HASHCACHE_ENTRY, MapEntry)
+
+DECLINLINE(void) VBoxExtCacheInit(PVBOXEXT_HASHCACHE pCache, uint32_t cMaxElements,
+        PFNVBOXEXT_HASHMAP_HASH pfnHash,
+        PFNVBOXEXT_HASHMAP_EQUAL pfnEqual,
+        PFNVBOXEXT_HASHCACHE_CLEANUP_ENTRY pfnCleanupEntry)
+{
+    VBoxExtHashInit(&pCache->Map, pfnHash, pfnEqual);
+    pCache->cMaxElements = cMaxElements;
+    pCache->pfnCleanupEntry = pfnCleanupEntry;
+}
+
+DECLINLINE(PVBOXEXT_HASHCACHE_ENTRY) VBoxExtCacheGet(PVBOXEXT_HASHCACHE pCache, void *pvKey)
+{
+    PVBOXEXT_HASHMAP_ENTRY pEntry = VBoxExtHashRemove(&pCache->Map, pvKey);
+    return VBOXEXT_HASHCACHE_ENTRY_FROM_MAP(pEntry);
+}
+
+DECLINLINE(void) VBoxExtCachePut(PVBOXEXT_HASHCACHE pCache, void *pvKey, PVBOXEXT_HASHCACHE_ENTRY pEntry)
+{
+    PVBOXEXT_HASHMAP_ENTRY pOldEntry = VBoxExtHashPut(&pCache->Map, pvKey, &pEntry->MapEntry);
+    PVBOXEXT_HASHCACHE_ENTRY pOld;
+    if (!pOldEntry)
+        return;
+    pOld = VBOXEXT_HASHCACHE_ENTRY_FROM_MAP(pOldEntry);
+    if (pOld != pEntry)
+        pCache->pfnCleanupEntry(pvKey, pOld);
+}
+
+void VBoxExtCacheCleanup(PVBOXEXT_HASHCACHE pCache);
+
+DECLINLINE(void) VBoxExtCacheTerm(PVBOXEXT_HASHCACHE pCache)
+{
+    VBoxExtCacheCleanup(pCache);
+}
+
+#endif /* #ifndef ___VBOXEXT_H__*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in b/src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in
new file mode 100644
index 0000000..d11c0f0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in
@@ -0,0 +1,669 @@
+PRIVATE_IDL_H_SRCS = \
+	wine/winedxgi.idl
+
+PUBLIC_IDL_H_SRCS = \
+	activaut.idl \
+	activdbg.idl \
+	activscp.idl \
+	amstream.idl \
+	amvideo.idl \
+	asptlb.idl \
+	atliface.idl \
+	audioclient.idl \
+	audiopolicy.idl \
+	austream.idl \
+	bits.idl \
+	bits1_5.idl \
+	comcat.idl \
+	commoncontrols.idl \
+	control.idl \
+	cor.idl \
+	cordebug.idl \
+	ctfutb.idl \
+	ctxtcall.idl \
+	d3d10.idl \
+	d3d10_1.idl \
+	d3d11.idl \
+	d3d11sdklayers.idl \
+	d3dcommon.idl \
+	ddstream.idl \
+	devicetopology.idl \
+	dimm.idl \
+	dispex.idl \
+	docobj.idl \
+	docobjectservice.idl \
+	downloadmgr.idl \
+	dwrite.idl \
+	dwrite_1.idl \
+	dxgi.idl \
+	endpointvolume.idl \
+	exdisp.idl \
+	fusion.idl \
+	gameux.idl \
+	hlink.idl \
+	htiface.idl \
+	htiframe.idl \
+	httprequest.idl \
+	iads.idl \
+	icftypes.idl \
+	iextag.idl \
+	imnact.idl \
+	imnxport.idl \
+	indexsrv.idl \
+	inputscope.idl \
+	mediaobj.idl \
+	metahost.idl \
+	mimeinfo.idl \
+	mimeole.idl \
+	mlang.idl \
+	mmc.idl \
+	mmdeviceapi.idl \
+	mmstream.idl \
+	mscoree.idl \
+	msctf.idl \
+	msdadc.idl \
+	msdasc.idl \
+	mshtmhst.idl \
+	mshtml.idl \
+	msident.idl \
+	msinkaut.idl \
+	mstask.idl \
+	msxml.idl \
+	msxml2.idl \
+	msxml6.idl \
+	netcon.idl \
+	netfw.idl \
+	oaidl.idl \
+	objectarray.idl \
+	objidl.idl \
+	objsafe.idl \
+	ocidl.idl \
+	ocmm.idl \
+	oleacc.idl \
+	oledb.idl \
+	oleidl.idl \
+	optary.idl \
+	perhist.idl \
+	propidl.idl \
+	propsys.idl \
+	pstore.idl \
+	qedit.idl \
+	richole.idl \
+	sensevts.idl \
+	servprov.idl \
+	shdeprecated.idl \
+	shldisp.idl \
+	shobjidl.idl \
+	shtypes.idl \
+	strmif.idl \
+	structuredquerycondition.idl \
+	textstor.idl \
+	tlogstg.idl \
+	tom.idl \
+	transact.idl \
+	txcoord.idl \
+	txdtc.idl \
+	uiautomationclient.idl \
+	uiautomationcore.idl \
+	unknwn.idl \
+	urlhist.idl \
+	urlmon.idl \
+	vmr9.idl \
+	wbemcli.idl \
+	wbemdisp.idl \
+	wbemprov.idl \
+	wia_lh.idl \
+	wia_xp.idl \
+	wincodec.idl \
+	wincodecsdk.idl \
+	wine/itss.idl \
+	wine/svcctl.idl \
+	winsxs.idl \
+	wmiutils.idl \
+	wmsbuffer.idl \
+	wmsdkidl.idl \
+	wpcapi.idl \
+	wtypes.idl \
+	wuapi.idl \
+	xmllite.idl
+
+IDL_TLB_SRCS = \
+	stdole2.idl
+
+XTEMPLATE_SRCS = \
+	rmxftmpl.x
+
+SRCDIR_INCLUDES = \
+	$(IDL_TLB_SRCS) \
+	$(PUBLIC_IDL_H_SRCS) \
+	$(XTEMPLATE_SRCS) \
+	accctrl.h \
+	access.idl \
+	aclapi.h \
+	aclui.h \
+	adshlp.h \
+	advpub.h \
+	af_irda.h \
+	amaudio.h \
+	appcompatapi.h \
+	appmgmt.h \
+	asynot.idl \
+	asysta.idl \
+	atlbase.h \
+	atlwin.h \
+	audevcod.h \
+	audiosessiontypes.h \
+	aviriff.h \
+	avrt.h \
+	axcore.idl \
+	axextend.idl \
+	basetsd.h \
+	basetyps.h \
+	bcrypt.h \
+	binres.idl \
+	bitsmsg.h \
+	cderr.h \
+	cfgmgr32.h \
+	cguid.h \
+	chprst.idl \
+	cierror.h \
+	clusapi.h \
+	cmdbas.idl \
+	cmdtxt.idl \
+	commctrl.h \
+	commctrl.rh \
+	commdlg.h \
+	compobj.h \
+	corerror.h \
+	corhdr.h \
+	cpl.h \
+	crtrow.idl \
+	cryptdlg.h \
+	cryptuiapi.h \
+	custcntl.h \
+	cvconst.h \
+	d3d.h \
+	d3d10_1shader.h \
+	d3d10effect.h \
+	d3d10misc.h \
+	d3d10shader.h \
+	d3d11shader.h \
+	d3d8.h \
+	d3d8caps.h \
+	d3d8types.h \
+	d3d9.h \
+	d3d9caps.h \
+	d3d9types.h \
+	d3dcaps.h \
+	d3dcompiler.h \
+	d3dhal.h \
+	d3drm.h \
+	d3drmdef.h \
+	d3drmobj.h \
+	d3drmwin.h \
+	d3dtypes.h \
+	d3dvec.inl \
+	d3dx9.h \
+	d3dx9anim.h \
+	d3dx9core.h \
+	d3dx9effect.h \
+	d3dx9math.h \
+	d3dx9math.inl \
+	d3dx9mesh.h \
+	d3dx9shader.h \
+	d3dx9shape.h \
+	d3dx9tex.h \
+	d3dx9xof.h \
+	dbccmd.idl \
+	dbcses.idl \
+	dbdsad.idl \
+	dbghelp.h \
+	dbinit.idl \
+	dbprop.idl \
+	dbs.idl \
+	dbt.h \
+	dciddi.h \
+	dciman.h \
+	dcommon.h \
+	dde.h \
+	dde.rh \
+	ddeml.h \
+	ddk/compstui.h \
+	ddk/hidsdi.h \
+	ddk/imm.h \
+	ddk/mountmgr.h \
+	ddk/ntddcdvd.h \
+	ddk/ntddk.h \
+	ddk/ntddser.h \
+	ddk/ntddtape.h \
+	ddk/usb.h \
+	ddk/usb100.h \
+	ddk/usb200.h \
+	ddk/usbdlib.h \
+	ddk/usbioctl.h \
+	ddk/usbiodef.h \
+	ddk/wdm.h \
+	ddk/winddiui.h \
+	ddk/winsplp.h \
+	ddraw.h \
+	ddrawgdi.h \
+	ddrawi.h \
+	delayloadhandler.h \
+	devenum.idl \
+	devguid.h \
+	devpkey.h \
+	devpropdef.h \
+	difxapi.h \
+	digitalv.h \
+	dinput.h \
+	dinputd.h \
+	dispdib.h \
+	dlgs.h \
+	dls1.h \
+	dls2.h \
+	dmdls.h \
+	dmerror.h \
+	dmksctrl.h \
+	dmo.h \
+	dmoreg.h \
+	dmort.h \
+	dmplugin.h \
+	dmusbuff.h \
+	dmusicc.h \
+	dmusicf.h \
+	dmusici.h \
+	dmusics.h \
+	dpaddr.h \
+	dplay.h \
+	dplay8.h \
+	dplobby.h \
+	dplobby8.h \
+	dpnathlp.h \
+	dsconf.h \
+	dsgetdc.h \
+	dshow.h \
+	dsound.h \
+	dsrole.h \
+	dvdmedia.h \
+	dwmapi.h \
+	dxdiag.h \
+	dxerr8.h \
+	dxerr9.h \
+	dxfile.h \
+	dxgiformat.h \
+	dxgitype.h \
+	dyngraph.idl \
+	errorrep.h \
+	errors.h \
+	errrec.idl \
+	evcode.h \
+	evntprov.h \
+	evntrace.h \
+	excpt.h \
+	exdispid.h \
+	fci.h \
+	fdi.h \
+	fileapi.h \
+	fltdefs.h \
+	gdiplus.h \
+	gdipluscolor.h \
+	gdipluscolormatrix.h \
+	gdiplusenums.h \
+	gdiplusflat.h \
+	gdiplusgpstubs.h \
+	gdiplusimaging.h \
+	gdiplusinit.h \
+	gdiplusmem.h \
+	gdiplusmetaheader.h \
+	gdipluspixelformats.h \
+	gdiplustypes.h \
+	guiddef.h \
+	hlguids.h \
+	htmlhelp.h \
+	http.h \
+	httprequestid.h \
+	i_cryptasn1tls.h \
+	icm.h \
+	icmpapi.h \
+	idispids.h \
+	ifdef.h \
+	ifmib.h \
+	imagehlp.h \
+	imm.h \
+	in6addr.h \
+	inaddr.h \
+	initguid.h \
+	intshcut.h \
+	ipexport.h \
+	iphlpapi.h \
+	ipifcons.h \
+	ipmib.h \
+	iprtrmib.h \
+	iptypes.h \
+	isguids.h \
+	knownfolders.h \
+	ks.h \
+	ksguid.h \
+	ksmedia.h \
+	lm.h \
+	lmaccess.h \
+	lmapibuf.h \
+	lmat.h \
+	lmbrowsr.h \
+	lmcons.h \
+	lmerr.h \
+	lmjoin.h \
+	lmmsg.h \
+	lmserver.h \
+	lmshare.h \
+	lmstats.h \
+	lmuse.h \
+	lmuseflg.h \
+	lmwksta.h \
+	loadperf.h \
+	lzexpand.h \
+	mapi.h \
+	mapicode.h \
+	mapidefs.h \
+	mapiform.h \
+	mapiguid.h \
+	mapitags.h \
+	mapiutil.h \
+	mapival.h \
+	mapix.h \
+	mciavi.h \
+	mcx.h \
+	mediaerr.h \
+	midles.h \
+	minmax.h \
+	mmddk.h \
+	mmreg.h \
+	mmsystem.h \
+	mprapi.h \
+	mprerror.h \
+	msacm.h \
+	msacmdlg.h \
+	msacmdrv.h \
+	mscat.h \
+	msdaguid.h \
+	mshtmcid.h \
+	mshtmdid.h \
+	msi.h \
+	msidefs.h \
+	msiquery.h \
+	mssip.h \
+	mstcpip.h \
+	msvcrt/assert.h \
+	msvcrt/conio.h \
+	msvcrt/crtdbg.h \
+	msvcrt/crtdefs.h \
+	msvcrt/ctype.h \
+	msvcrt/direct.h \
+	msvcrt/dirent.h \
+	msvcrt/dos.h \
+	msvcrt/eh.h \
+	msvcrt/errno.h \
+	msvcrt/fcntl.h \
+	msvcrt/float.h \
+	msvcrt/io.h \
+	msvcrt/limits.h \
+	msvcrt/locale.h \
+	msvcrt/malloc.h \
+	msvcrt/math.h \
+	msvcrt/mbctype.h \
+	msvcrt/mbstring.h \
+	msvcrt/memory.h \
+	msvcrt/process.h \
+	msvcrt/search.h \
+	msvcrt/setjmp.h \
+	msvcrt/share.h \
+	msvcrt/signal.h \
+	msvcrt/stddef.h \
+	msvcrt/stdio.h \
+	msvcrt/stdlib.h \
+	msvcrt/string.h \
+	msvcrt/sys/locking.h \
+	msvcrt/sys/stat.h \
+	msvcrt/sys/timeb.h \
+	msvcrt/sys/types.h \
+	msvcrt/sys/unistd.h \
+	msvcrt/sys/utime.h \
+	msvcrt/time.h \
+	msvcrt/unistd.h \
+	msvcrt/wchar.h \
+	msvcrt/wctype.h \
+	mswsock.h \
+	msxml2did.h \
+	msxml6did.h \
+	msxmldid.h \
+	nb30.h \
+	ndrtypes.h \
+	nldef.h \
+	npapi.h \
+	nspapi.h \
+	ntddcdrm.h \
+	ntddndis.h \
+	ntddscsi.h \
+	ntddstor.h \
+	ntdsapi.h \
+	ntquery.h \
+	ntsecapi.h \
+	ntsecpkg.h \
+	ntstatus.h \
+	objbase.h \
+	objsel.h \
+	odbcinst.h \
+	ole2.h \
+	ole2ver.h \
+	oleauto.h \
+	olectl.h \
+	oledberr.h \
+	oledlg.h \
+	opnrst.idl \
+	patchapi.h \
+	pdh.h \
+	pdhmsg.h \
+	pktdef.h \
+	poppack.h \
+	powrprof.h \
+	profinfo.h \
+	propkey.h \
+	propkeydef.h \
+	propvarutil.h \
+	prsht.h \
+	psapi.h \
+	pshpack1.h \
+	pshpack2.h \
+	pshpack4.h \
+	pshpack8.h \
+	ras.h \
+	rasdlg.h \
+	raserror.h \
+	reason.h \
+	regstr.h \
+	restartmanager.h \
+	richedit.h \
+	rmxfguid.h \
+	row.idl \
+	rowchg.idl \
+	rowpos.idl \
+	rowpsc.idl \
+	rpc.h \
+	rpcasync.h \
+	rpcdce.h \
+	rpcdcep.h \
+	rpcndr.h \
+	rpcnterr.h \
+	rpcproxy.h \
+	rpcsal.h \
+	rstbas.idl \
+	rstinf.idl \
+	rstloc.idl \
+	rstnot.idl \
+	rtutils.h \
+	scarderr.h \
+	schannel.h \
+	schemadef.h \
+	schnlsp.h \
+	sddl.h \
+	secext.h \
+	security.h \
+	sensapi.h \
+	sesprp.idl \
+	setupapi.h \
+	sfc.h \
+	shdispid.h \
+	shellapi.h \
+	shlguid.h \
+	shlobj.h \
+	shlwapi.h \
+	sipbase.h \
+	slerror.h \
+	slpublic.h \
+	snmp.h \
+	softpub.h \
+	sql.h \
+	sqlext.h \
+	sqltypes.h \
+	srcrst.idl \
+	srrestoreptapi.h \
+	sspi.h \
+	sti.h \
+	storage.h \
+	strsafe.h \
+	svrapi.h \
+	t2embapi.h \
+	tapi.h \
+	tchar.h \
+	tcpmib.h \
+	textserv.h \
+	tlhelp32.h \
+	tmschema.h \
+	traffic.h \
+	twain.h \
+	udpmib.h \
+	uiautomation.h \
+	uiautomationcoreapi.h \
+	userenv.h \
+	usp10.h \
+	uuids.h \
+	uxtheme.h \
+	vdmdbg.h \
+	ver.h \
+	verrsrc.h \
+	vfw.h \
+	vfwmsgs.h \
+	vmrender.idl \
+	vsstyle.h \
+	vssym32.h \
+	werapi.h \
+	wfext.h \
+	wia.h \
+	winbase.h \
+	wincon.h \
+	wincred.h \
+	wincrypt.h \
+	windef.h \
+	windns.h \
+	windows.h \
+	windowsx.h \
+	wine/debug.h \
+	wine/exception.h \
+	wine/library.h \
+	wine/unicode.h \
+	winerror.h \
+	winevt.h \
+	wingdi.h \
+	winhttp.h \
+	wininet.h \
+	winineti.h \
+	winioctl.h \
+	winldap.h \
+	winnetwk.h \
+	winnls.h \
+	winnls32.h \
+	winnt.h \
+	winnt.rh \
+	winperf.h \
+	winreg.h \
+	winresrc.h \
+	winsafer.h \
+	winscard.h \
+	winsmcrd.h \
+	winsnmp.h \
+	winsock.h \
+	winsock2.h \
+	winspool.h \
+	winsvc.h \
+	wintab.h \
+	wintabx.h \
+	winternl.h \
+	wintrust.h \
+	winuser.h \
+	winuser.rh \
+	winver.h \
+	wmistr.h \
+	wnaspi32.h \
+	wownt32.h \
+	ws2def.h \
+	ws2ipdef.h \
+	ws2spi.h \
+	ws2tcpip.h \
+	wshisotp.h \
+	wsipx.h \
+	wsnwlink.h \
+	wtsapi32.h \
+	xcmc.h \
+	xinput.h \
+	xmldom.h \
+	xmldom.idl \
+	xmldomdid.h \
+	xmldso.idl \
+	xmldsodid.h \
+	zmouse.h
+
+EXTRASUBDIRS = \
+	ddk \
+	msvcrt \
+	msvcrt/sys \
+	wine
+
+INSTALLDIRS = \
+	$(DESTDIR)$(includedir)/windows/ddk \
+	$(DESTDIR)$(includedir)/windows \
+	$(DESTDIR)$(includedir)/msvcrt/sys \
+	$(DESTDIR)$(includedir)/msvcrt \
+	$(DESTDIR)$(includedir)
+
+IDL_H_SRCS = $(PUBLIC_IDL_H_SRCS) $(PRIVATE_IDL_H_SRCS)
+
+ at MAKE_RULES@
+
+OBJDIR_INCLUDES = $(PUBLIC_IDL_H_SRCS:.idl=.h) $(XTEMPLATE_SRCS:.x=.h)
+
+all: $(IDL_H_SRCS:.idl=.h) $(IDL_TLB_SRCS:.idl=.tlb) $(XTEMPLATE_SRCS:.x=.h)
+
+rmxftmpl.h: rmxftmpl.x $(MAKEXFTMPL)
+	$(MAKEXFTMPL) -i D3DRM_XTEMPLATES -s D3DRM_XTEMPLATE_BYTES -o $@ $(srcdir)/rmxftmpl.x
+
+install install-dev:: $(OBJDIR_INCLUDES) $(INSTALLDIRS)
+	for f in $(SRCDIR_INCLUDES); do case $$f in \
+	  wine/*)   $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/`expr $$f : 'wine/\(.*\)'` ;; \
+	  msvcrt/*) $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/$$f ;; \
+	  *)        $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/windows/$$f ;; \
+	esac; done
+	for f in $(OBJDIR_INCLUDES); do case $$f in \
+	  wine/*)   $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/`expr $$f : 'wine/\(.*\)'` ;; \
+	  msvcrt/*) $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/$$f ;; \
+	  *)        $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/windows/$$f ;; \
+	esac; done
+
+# Don't just do a rm -rf on $(includedir) -- don't want to wipe out
+# anything extra the user may have put there.
+uninstall::
+	for f in $(SRCDIR_INCLUDES) $(OBJDIR_INCLUDES); do case $$f in \
+	  wine/*)   $(RM) $(DESTDIR)$(includedir)/`expr $$f : 'wine/\(.*\)'` ;; \
+	  msvcrt/*) $(RM) $(DESTDIR)$(includedir)/$$f ;; \
+	  *)        $(RM) $(DESTDIR)$(includedir)/windows/$$f ;; \
+	esac; done
+	-rmdir $(INSTALLDIRS)
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h
new file mode 100644
index 0000000..e361f21
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h
@@ -0,0 +1,460 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ACCCTRL_H
+#define __WINE_ACCCTRL_H
+
+#include <wtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _SE_OBJECT_TYPE
+{
+    SE_UNKNOWN_OBJECT_TYPE = 0,
+    SE_FILE_OBJECT,
+    SE_SERVICE,
+    SE_PRINTER,
+    SE_REGISTRY_KEY,
+    SE_LMSHARE,
+    SE_KERNEL_OBJECT,
+    SE_WINDOW_OBJECT,
+    SE_DS_OBJECT,
+    SE_DS_OBJECT_ALL,
+    SE_PROVIDER_DEFINED_OBJECT,
+    SE_WMIGUID_OBJECT,
+    SE_REGISTRY_WOW64_32KEY
+} SE_OBJECT_TYPE;
+
+typedef enum _TRUSTEE_TYPE
+{
+    TRUSTEE_IS_UNKNOWN,
+    TRUSTEE_IS_USER,
+    TRUSTEE_IS_GROUP,
+    TRUSTEE_IS_DOMAIN,
+    TRUSTEE_IS_ALIAS,
+    TRUSTEE_IS_WELL_KNOWN_GROUP,
+    TRUSTEE_IS_DELETED,
+    TRUSTEE_IS_INVALID,
+    TRUSTEE_IS_COMPUTER
+} TRUSTEE_TYPE;
+
+typedef enum _TRUSTEE_FORM
+{
+    TRUSTEE_IS_SID,
+    TRUSTEE_IS_NAME,
+    TRUSTEE_BAD_FORM,
+    TRUSTEE_IS_OBJECTS_AND_SID,
+    TRUSTEE_IS_OBJECTS_AND_NAME
+} TRUSTEE_FORM;
+
+typedef enum _MULTIPLE_TRUSTEE_OPERATION
+{
+    NO_MULTIPLE_TRUSTEE,
+    TRUSTEE_IS_IMPERSONATE,
+} MULTIPLE_TRUSTEE_OPERATION;
+
+typedef struct  _OBJECTS_AND_SID
+{
+    DWORD   ObjectsPresent;
+    GUID    ObjectTypeGuid;
+    GUID    InheritedObjectTypeGuid;
+    SID    *pSid;
+} OBJECTS_AND_SID, *POBJECTS_AND_SID;
+
+typedef struct  _OBJECTS_AND_NAME_A
+{
+    DWORD          ObjectsPresent;
+    SE_OBJECT_TYPE ObjectType;
+    LPSTR          ObjectTypeName;
+    LPSTR          InheritedObjectTypeName;
+    LPSTR          ptstrName;
+} OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;
+
+typedef struct  _OBJECTS_AND_NAME_W
+{
+    DWORD          ObjectsPresent;
+    SE_OBJECT_TYPE ObjectType;
+    LPWSTR         ObjectTypeName;
+    LPWSTR         InheritedObjectTypeName;
+    LPWSTR         ptstrName;
+} OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;
+
+DECL_WINELIB_TYPE_AW(OBJECTS_AND_NAME_)
+DECL_WINELIB_TYPE_AW(POBJECTS_AND_NAME_)
+
+typedef struct _TRUSTEE_A
+{
+    struct _TRUSTEE_A          *pMultipleTrustee;
+    MULTIPLE_TRUSTEE_OPERATION  MultipleTrusteeOperation;
+    TRUSTEE_FORM                TrusteeForm;
+    TRUSTEE_TYPE                TrusteeType;
+    LPSTR                       ptstrName;
+} TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
+
+typedef struct _TRUSTEE_W
+{
+    struct _TRUSTEE_W          *pMultipleTrustee;
+    MULTIPLE_TRUSTEE_OPERATION  MultipleTrusteeOperation;
+    TRUSTEE_FORM                TrusteeForm;
+    TRUSTEE_TYPE                TrusteeType;
+    LPWSTR                      ptstrName;
+} TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;
+
+DECL_WINELIB_TYPE_AW(TRUSTEE_)
+DECL_WINELIB_TYPE_AW(PTRUSTEE_)
+DECL_WINELIB_TYPE_AW(TRUSTEE)
+DECL_WINELIB_TYPE_AW(PTRUSTEE)
+
+typedef enum _ACCESS_MODE
+{
+    NOT_USED_ACCESS = 0,
+    GRANT_ACCESS,
+    SET_ACCESS,
+    DENY_ACCESS,
+    REVOKE_ACCESS,
+    SET_AUDIT_SUCCESS,
+    SET_AUDIT_FAILURE
+} ACCESS_MODE;
+
+#define NO_INHERITANCE                      0x0
+#define SUB_OBJECTS_ONLY_INHERIT            0x1
+#define SUB_CONTAINERS_ONLY_INHERIT         0x2
+#define SUB_CONTAINERS_AND_OBJECTS_INHERIT  0x3
+#define INHERIT_NO_PROPAGATE                0x4
+#define INHERIT_ONLY                        0x8
+#define INHERITED_ACCESS_ENTRY              0x10
+#define INHERITED_PARENT                    0x10000000
+#define INHERITED_GRANDPARENT               0x20000000
+
+typedef struct _EXPLICIT_ACCESS_A
+{
+    DWORD        grfAccessPermissions;
+    ACCESS_MODE  grfAccessMode;
+    DWORD        grfInheritance;
+    TRUSTEE_A    Trustee;
+} EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;
+
+typedef struct _EXPLICIT_ACCESS_W
+{
+    DWORD        grfAccessPermissions;
+    ACCESS_MODE  grfAccessMode;
+    DWORD        grfInheritance;
+    TRUSTEE_W    Trustee;
+} EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;
+
+DECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS_)
+DECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS_)
+DECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS)
+DECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS)
+
+typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
+typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
+
+typedef struct _ACTRL_ACCESS_ENTRYA
+{
+    TRUSTEE_A     Trustee;
+    ULONG         fAccessFlags;
+    ACCESS_RIGHTS Access;
+    ACCESS_RIGHTS ProvSpecificAccess;
+    INHERIT_FLAGS Inheritance;
+    LPSTR         lpInheritProperty;
+} ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;
+
+typedef struct _ACTRL_ACCESS_ENTRYW
+{
+    TRUSTEE_W     Trustee;
+    ULONG         fAccessFlags;
+    ACCESS_RIGHTS Access;
+    ACCESS_RIGHTS ProvSpecificAccess;
+    INHERIT_FLAGS Inheritance;
+    LPWSTR        lpInheritProperty;
+} ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY)
+
+
+typedef struct _ACTRL_ACCESS_ENTRY_LISTA
+{
+    ULONG                cEntries;
+    ACTRL_ACCESS_ENTRYA *pAccessList;
+} ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;
+
+typedef struct _ACTRL_ACCESS_ENTRY_LISTW
+{
+    ULONG                cEntries;
+    ACTRL_ACCESS_ENTRYW *pAccessList;
+} ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY_LIST)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY_LIST)
+
+typedef struct _ACTRL_PROPERTY_ENTRYA
+{
+    LPSTR                     lpProperty;
+    PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
+    ULONG                     fListFlags;
+} ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;
+
+typedef struct _ACTRL_PROPERTY_ENTRYW
+{
+    LPWSTR                    lpProperty;
+    PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
+    ULONG                     fListFlags;
+} ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_PROPERTY_ENTRY)
+DECL_WINELIB_TYPE_AW(PACTRL_PROPERTY_ENTRY)
+
+typedef struct _ACTRL_ALISTA
+{
+    ULONG                  cEntries;
+    PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
+} ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;
+
+typedef struct _ACTRL_ALISTW
+{
+    ULONG                  cEntries;
+    PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
+} ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS)
+DECL_WINELIB_TYPE_AW(ACTRL_AUDIT)
+DECL_WINELIB_TYPE_AW(PACTRL_AUDIT)
+
+#define TRUSTEE_ACCESS_ALLOWED      0x00000001
+#define TRUSTEE_ACCESS_READ         0x00000002
+#define TRUSTEE_ACCESS_WRITE        0x00000004
+
+#define TRUSTEE_ACCESS_EXPLICIT     0x00000001
+#define TRUSTEE_ACCESS_READ_WRITE   (TRUSTEE_ACCESS_READ|TRUSTEE_ACCESS_WRITE)
+#define TRUSTEE_ACCESS_ALL          0xFFFFFFFF
+
+typedef struct _TRUSTEE_ACCESSA
+{
+    LPSTR         lpProperty;
+    ACCESS_RIGHTS Access;
+    ULONG         fAccessFlags;
+    ULONG         fReturnedAccess;
+} TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;
+
+typedef struct _TRUSTEE_ACCESSW
+{
+    LPWSTR        lpProperty;
+    ACCESS_RIGHTS Access;
+    ULONG         fAccessFlags;
+    ULONG         fReturnedAccess;
+} TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;
+
+DECL_WINELIB_TYPE_AW(TRUSTEE_ACCESS)
+DECL_WINELIB_TYPE_AW(PTRUSTEE_ACCESS)
+
+#define ACTRL_RESERVED              0x00000000
+#define ACTRL_PERM_1                0x00000001
+#define ACTRL_PERM_2                0x00000002
+#define ACTRL_PERM_3                0x00000004
+#define ACTRL_PERM_4                0x00000008
+#define ACTRL_PERM_5                0x00000010
+#define ACTRL_PERM_6                0x00000020
+#define ACTRL_PERM_7                0x00000040
+#define ACTRL_PERM_8                0x00000080
+#define ACTRL_PERM_9                0x00000100
+#define ACTRL_PERM_10               0x00000200
+#define ACTRL_PERM_11               0x00000400
+#define ACTRL_PERM_12               0x00000800
+#define ACTRL_PERM_13               0x00001000
+#define ACTRL_PERM_14               0x00002000
+#define ACTRL_PERM_15               0x00004000
+#define ACTRL_PERM_16               0x00008000
+#define ACTRL_PERM_17               0x00010000
+#define ACTRL_PERM_18               0x00020000
+#define ACTRL_PERM_19               0x00040000
+#define ACTRL_PERM_20               0x00080000
+
+#define ACTRL_ACCESS_ALLOWED        0x00000001
+#define ACTRL_ACCESS_DENIED         0x00000002
+#define ACTRL_AUDIT_SUCCESS         0x00000004
+#define ACTRL_AUDIT_FAILURE         0x00000008
+
+#define ACTRL_ACCESS_PROTECTED      0x00000001
+
+#define ACTRL_SYSTEM_ACCESS         0x04000000
+#define ACTRL_DELETE                0x08000000
+#define ACTRL_READ_CONTROL          0x10000000
+#define ACTRL_CHANGE_ACCESS         0x20000000
+#define ACTRL_CHANGE_OWNER          0x40000000
+#define ACTRL_SYNCHRONIZE           0x80000000
+#define ACTRL_STD_RIGHTS_ALL        0xf8000000
+#define ACTRL_STD_RIGHT_REQUIRED    (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE)
+
+#define ACTRL_DS_OPEN               ACTRL_RESERVED
+#define ACTRL_DS_CREATE_CHILD       ACTRL_PERM_1
+#define ACTRL_DS_DELETE_CHILD       ACTRL_PERM_2
+#define ACTRL_DS_LIST               ACTRL_PERM_3
+#define ACTRL_DS_SELF               ACTRL_PERM_4
+#define ACTRL_DS_READ_PROP          ACTRL_PERM_5
+#define ACTRL_DS_WRITE_PROP         ACTRL_PERM_6
+#define ACTRL_DS_DELETE_TREE        ACTRL_PERM_7
+#define ACTRL_DS_LIST_OBJECT        ACTRL_PERM_8
+#define ACTRL_DS_CONTROL_ACCESS     ACTRL_PERM_9
+
+#define ACTRL_FILE_READ             ACTRL_PERM_1
+#define ACTRL_FILE_WRITE            ACTRL_PERM_2
+#define ACTRL_FILE_APPEND           ACTRL_PERM_3
+#define ACTRL_FILE_READ_PROP        ACTRL_PERM_4
+#define ACTRL_FILE_WRITE_PROP       ACTRL_PERM_5
+#define ACTRL_FILE_EXECUTE          ACTRL_PERM_6
+#define ACTRL_FILE_READ_ATTRIB      ACTRL_PERM_8
+#define ACTRL_FILE_WRITE_ATTRIB     ACTRL_PERM_9
+#define ACTRL_FILE_CREATE_PIPE      ACTRL_PERM_10
+#define ACTRL_DIR_LIST              ACTRL_PERM_1
+#define ACTRL_DIR_CREATE_OBJECT     ACTRL_PERM_2
+#define ACTRL_DIR_CREATE_CHILD      ACTRL_PERM_3
+#define ACTRL_DIR_DELETE_CHILD      ACTRL_PERM_7
+#define ACTRL_DIR_TRAVERSE          ACTRL_PERM_6
+#define ACTRL_KERNEL_TERMINATE      ACTRL_PERM_1
+#define ACTRL_KERNEL_THREAD         ACTRL_PERM_2
+#define ACTRL_KERNEL_VM             ACTRL_PERM_3
+#define ACTRL_KERNEL_VM_READ        ACTRL_PERM_4
+#define ACTRL_KERNEL_VM_WRITE       ACTRL_PERM_5
+#define ACTRL_KERNEL_DUP_HANDLE     ACTRL_PERM_6
+#define ACTRL_KERNEL_PROCESS        ACTRL_PERM_7
+#define ACTRL_KERNEL_SET_INFO       ACTRL_PERM_8
+#define ACTRL_KERNEL_GET_INFO       ACTRL_PERM_9
+#define ACTRL_KERNEL_CONTROL        ACTRL_PERM_10
+#define ACTRL_KERNEL_ALERT          ACTRL_PERM_11
+#define ACTRL_KERNEL_GET_CONTEXT    ACTRL_PERM_12
+#define ACTRL_KERNEL_SET_CONTEXT    ACTRL_PERM_13
+#define ACTRL_KERNEL_TOKEN          ACTRL_PERM_14
+#define ACTRL_KERNEL_IMPERSONATE    ACTRL_PERM_15
+#define ACTRL_KERNEL_DIMPERSONATE   ACTRL_PERM_16
+#define ACTRL_PRINT_SADMIN          ACTRL_PERM_1
+#define ACTRL_PRINT_SLIST           ACTRL_PERM_2
+#define ACTRL_PRINT_PADMIN          ACTRL_PERM_3
+#define ACTRL_PRINT_PUSE            ACTRL_PERM_4
+#define ACTRL_PRINT_JADMIN          ACTRL_PERM_5
+#define ACTRL_SVC_GET_INFO          ACTRL_PERM_1
+#define ACTRL_SVC_SET_INFO          ACTRL_PERM_2
+#define ACTRL_SVC_STATUS            ACTRL_PERM_3
+#define ACTRL_SVC_LIST              ACTRL_PERM_4
+#define ACTRL_SVC_START             ACTRL_PERM_5
+#define ACTRL_SVC_STOP              ACTRL_PERM_6
+#define ACTRL_SVC_PAUSE             ACTRL_PERM_7
+#define ACTRL_SVC_INTERROGATE       ACTRL_PERM_8
+#define ACTRL_SVC_UCONTROL          ACTRL_PERM_9
+#define ACTRL_REG_QUERY             ACTRL_PERM_1
+#define ACTRL_REG_SET               ACTRL_PERM_2
+#define ACTRL_REG_CREATE_CHILD      ACTRL_PERM_3
+#define ACTRL_REG_LIST              ACTRL_PERM_4
+#define ACTRL_REG_NOTIFY            ACTRL_PERM_5
+#define ACTRL_REG_LINK              ACTRL_PERM_6
+#define ACTRL_WIN_CLIPBRD           ACTRL_PERM_1
+#define ACTRL_WIN_GLOBAL_ATOMS      ACTRL_PERM_2
+#define ACTRL_WIN_CREATE            ACTRL_PERM_3
+#define ACTRL_WIN_LIST_DESK         ACTRL_PERM_4
+#define ACTRL_WIN_LIST              ACTRL_PERM_5
+#define ACTRL_WIN_READ_ATTRIBS      ACTRL_PERM_6
+#define ACTRL_WIN_WRITE_ATTRIBS     ACTRL_PERM_7
+#define ACTRL_WIN_SCREEN            ACTRL_PERM_8
+#define ACTRL_WIN_EXIT              ACTRL_PERM_9
+
+#define ACTRL_ACCESS_NO_OPTIONS                 0x00000000
+#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES    0x00000001
+
+typedef struct _ACTRL_OVERLAPPED
+{
+    union {
+        PVOID Provider;
+        ULONG Reserved1;
+    } DUMMYUNIONNAME;
+    ULONG  Reserved2;
+    HANDLE hEvent;
+} ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
+
+typedef struct _ACTRL_ACCESS_INFOA
+{
+    ULONG  fAccessPermission;
+    LPSTR  lpAccessPermissionName;
+} ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;
+
+typedef struct _ACTRL_ACCESS_INFOW
+{
+    ULONG  fAccessPermission;
+    LPWSTR lpAccessPermissionName;
+} ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_INFO)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_INFO)
+
+typedef struct _ACTRL_CONTROL_INFOA
+{
+    LPSTR  lpControlId;
+    LPSTR  lpControlName;
+} ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;
+
+typedef struct _ACTRL_CONTROL_INFOW
+{
+    LPWSTR lpControlId;
+    LPWSTR lpControlName;
+} ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_CONTROL_INFO)
+DECL_WINELIB_TYPE_AW(PACTRL_CONTROL_INFO)
+
+typedef enum _PROGRESS_INVOKE_SETTING {
+    ProgressInvokeNever = 1,
+    ProgressInvokeEveryObject,
+    ProgressInvokeOnError,
+    ProgressCancelOperation,
+    ProgressRetryOperation
+} PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING;
+
+typedef struct _INHERITED_FROMA
+{
+    LONG   GenerationGap;
+    LPSTR  AncestorName;
+} INHERITED_FROMA, *PINHERITED_FROMA;
+
+typedef struct _INHERITED_FROMW
+{
+    LONG   GenerationGap;
+    LPWSTR AncestorName;
+} INHERITED_FROMW, *PINHERITED_FROMW;
+
+DECL_WINELIB_TYPE_AW(INHERITED_FROM)
+DECL_WINELIB_TYPE_AW(PINHERITED_FROM)
+
+#define AccFree LocalFree
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ACCCTRL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl
new file mode 100644
index 0000000..5c32bd3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a8c-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IAccessor : IUnknown
+{
+
+    typedef DWORD DBACCESSORFLAGS;
+
+    typedef DWORD DBBINDSTATUS;
+
+    [local]
+    HRESULT AddRefAccessor([in] HACCESSOR hAccessor,
+                           [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount);
+
+    [call_as(AddRefAccessor)]
+    HRESULT RemoteAddRefAccessor([in] HACCESSOR hAccessor,
+                                 [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount,
+                                 [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT CreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags,
+                           [in] DBCOUNTITEM cBindings,
+                           [in, size_is(cBindings), annotation("__in_ecount(cBindings)")] const DBBINDING rgBindings[],
+                           [in] DBLENGTH cbRowSize,
+                           [out, annotation("__out")] HACCESSOR *phAccessor,
+                           [out, size_is(cBindings), annotation("__out_ecount_opt(cBindings)")] DBBINDSTATUS rgStatus[]);
+
+    [call_as(CreateAccessor)]
+    HRESULT RemoteCreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags,
+                                 [in] DBCOUNTITEM cBindings,
+                                 [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings,
+                                 [in] DBLENGTH cbRowSize,
+                                 [out] HACCESSOR *phAccessor,
+                                 [in, out, unique, size_is((ULONG)cBindings)] DBBINDSTATUS *rgStatus,
+                                 [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetBindings([in] HACCESSOR hAccessor,
+                        [out, annotation("__out")] DBACCESSORFLAGS *pdwAccessorFlags,
+                        [in, out, annotation("__out_opt")] DBCOUNTITEM *pcBindings,
+                        [out, size_is(,*pcBindings), annotation("__deref_out_ecount_opt(*pcBindings)")] DBBINDING **prgBindings);
+
+    [call_as(GetBindings)]
+    HRESULT RemoteGetBindings([in] HACCESSOR hAccessor,
+                              [out] DBACCESSORFLAGS *pdwAccessorFlags,
+                              [in, out] DBCOUNTITEM *pcBindings,
+                              [out, size_is(,(ULONG)*pcBindings)] DBBINDING **prgBindings,
+                              [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT ReleaseAccessor([in] HACCESSOR hAccessor,
+                            [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount);
+
+    [call_as(ReleaseAccessor)]
+    HRESULT RemoteReleaseAccessor([in] HACCESSOR hAccessor,
+                                  [in, out, unique] DBREFCOUNT *pcRefCount,
+                                  [out] IErrorInfo **ppErrorInfoRem);
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h
new file mode 100644
index 0000000..694804d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ACLAPI_H
+#define __WINE_ACLAPI_H
+
+#include <windows.h>
+#include <accctrl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (*FN_PROGRESS)(LPWSTR,DWORD,PPROG_INVOKE_SETTING,PVOID,BOOL);
+
+WINADVAPI DWORD  WINAPI GetExplicitEntriesFromAclA( PACL, PULONG, PEXPLICIT_ACCESS_A* );
+WINADVAPI DWORD  WINAPI GetExplicitEntriesFromAclW( PACL, PULONG, PEXPLICIT_ACCESS_W* );
+#define                 GetExplicitEntriesFromAcl WINELIB_NAME_AW(GetExplicitEntriesFromAcl)
+WINADVAPI DWORD  WINAPI GetSecurityInfo( HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD  WINAPI GetSecurityInfoExA(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCSTR, LPCSTR, PACTRL_ACCESSA*, PACTRL_AUDITA*, LPSTR*, LPSTR*);
+WINADVAPI DWORD  WINAPI GetSecurityInfoExW(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCWSTR, LPCWSTR, PACTRL_ACCESSW*, PACTRL_AUDITW*, LPWSTR*, LPWSTR*);
+#define                 GetSecurityInfoEx WINELIB_NAME_AW(GetSecurityInfoEx)
+WINADVAPI DWORD  WINAPI GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD  WINAPI GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
+#define                 GetNamedSecurityInfo WINELIB_NAME_AW(GetNamedSecurityInfo)
+WINADVAPI DWORD  WINAPI SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+WINADVAPI DWORD  WINAPI SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+#define                 SetNamedSecurityInfo WINELIB_NAME_AW(SetNamedSecurityInfo)
+WINADVAPI DWORD  WINAPI SetEntriesInAclA( ULONG, PEXPLICIT_ACCESSA, PACL, PACL*);
+WINADVAPI DWORD  WINAPI SetEntriesInAclW( ULONG, PEXPLICIT_ACCESSW, PACL, PACL*);
+#define                 SetEntriesInAcl WINELIB_NAME_AW(SetEntriesInAcl)
+WINADVAPI DWORD  WINAPI SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormA( PTRUSTEEA );
+WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormW( PTRUSTEEW );
+#define                 GetTrusteeForm WINELIB_NAME_AW(GetTrusteeForm)
+WINADVAPI LPSTR  WINAPI GetTrusteeNameA( PTRUSTEEA );
+WINADVAPI LPWSTR WINAPI GetTrusteeNameW( PTRUSTEEW );
+#define                 GetTrusteeName WINELIB_NAME_AW(GetTrusteeName)
+WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeA( PTRUSTEEA );
+WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeW( PTRUSTEEW );
+#define                 GetTrusteeType WINELIB_NAME_AW(GetTrusteeType)
+WINADVAPI DWORD  WINAPI BuildSecurityDescriptorA( PTRUSTEEA, PTRUSTEEA, ULONG, PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* );
+WINADVAPI DWORD  WINAPI BuildSecurityDescriptorW( PTRUSTEEW, PTRUSTEEW, ULONG, PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* );
+#define                 BuildSecurityDescriptor WINELIB_NAME_AW(BuildSecurityDescriptor)
+WINADVAPI void   WINAPI BuildTrusteeWithNameA( PTRUSTEEA, LPSTR );
+WINADVAPI void   WINAPI BuildTrusteeWithNameW( PTRUSTEEW, LPWSTR );
+#define                 BuildTrusteeWithName WINELIB_NAME_AW(BuildTrusteeWithName)
+WINADVAPI void   WINAPI BuildTrusteeWithObjectsAndNameA(PTRUSTEEA, POBJECTS_AND_NAME_A, SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR);
+WINADVAPI void   WINAPI BuildTrusteeWithObjectsAndNameW(PTRUSTEEW, POBJECTS_AND_NAME_W, SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR);
+#define                 BuildTrusteeWithObjectsAndName WINELIB_NAME_AW(BuildTrusteeWithObjectsAndName)
+WINADVAPI void   WINAPI BuildTrusteeWithObjectsAndSidA(PTRUSTEEA, POBJECTS_AND_SID, GUID*, GUID*, PSID);
+WINADVAPI void   WINAPI BuildTrusteeWithObjectsAndSidW(PTRUSTEEW, POBJECTS_AND_SID, GUID*, GUID*, PSID);
+#define                 BuildTrusteeWithObjectsAndSid WINELIB_NAME_AW(BuildTrusteeWithObjectsAndSid)
+WINADVAPI void   WINAPI BuildExplicitAccessWithNameA(PEXPLICIT_ACCESSA, LPSTR, DWORD, ACCESS_MODE, DWORD);
+WINADVAPI void   WINAPI BuildExplicitAccessWithNameW(PEXPLICIT_ACCESSW, LPWSTR, DWORD, ACCESS_MODE, DWORD);
+#define                 BuildExplicitAccessWithName WINELIB_NAME_AW(BuildExplicitAccessWithName)
+WINADVAPI void   WINAPI BuildTrusteeWithSidA(PTRUSTEEA pTrustee, PSID pSid);
+WINADVAPI void   WINAPI BuildTrusteeWithSidW(PTRUSTEEW pTrustee, PSID pSid);
+#define                 BuildTrusteeWithSid WINELIB_NAME_AW(BuildTrusteeWithSid)
+WINADVAPI DWORD  WINAPI GetEffectiveRightsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK);
+WINADVAPI DWORD  WINAPI GetEffectiveRightsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK);
+#define                 GetEffectiveRightsFromAcl WINELIB_NAME_AW(GetEffectiveRightsFromAcl)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ACLAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h
new file mode 100644
index 0000000..e1ad318
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2009 Nikolay Sivov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ACLUI_H
+#define __WINE_ACLUI_H
+
+#include <objbase.h>
+#include <commctrl.h>
+#include <accctrl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+
+typedef struct _SI_OBJECT_INFO
+{
+    DWORD       dwFlags;
+    HINSTANCE   hInstance;
+    LPWSTR      pszServerName;
+    LPWSTR      pszObjectName;
+    LPWSTR      pszPageTitle;
+    GUID        guidObjectType;
+} SI_OBJECT_INFO, *PSI_OBJECT_INFO;
+
+#define SI_EDIT_PERMS                0x00000000
+#define SI_EDIT_OWNER                0x00000001
+#define SI_EDIT_AUDITS               0x00000002
+#define SI_CONTAINER                 0x00000004
+#define SI_READONLY                  0x00000008
+#define SI_ADVANCED                  0x00000010
+#define SI_RESET                     0x00000020
+#define SI_OWNER_READONLY            0x00000040
+#define SI_EDIT_PROPERTIES           0x00000080
+#define SI_OWNER_RECURSE             0x00000100
+#define SI_NO_ACL_PROTECT            0x00000200
+#define SI_NO_TREE_APPLY             0x00000400
+#define SI_PAGE_TITLE                0x00000800
+#define SI_SERVER_IS_DC              0x00001000
+#define SI_RESET_DACL_TREE           0x00004000
+#define SI_RESET_SACL_TREE           0x00008000
+#define SI_OBJECT_GUID               0x00010000
+#define SI_EDIT_EFFECTIVE            0x00020000
+#define SI_RESET_DACL                0x00040000
+#define SI_RESET_SACL                0x00080000
+#define SI_RESET_OWNER               0x00100000
+#define SI_NO_ADDITIONAL_PERMISSION  0x00200000
+#define SI_VIEW_ONLY                 0x00400000
+#define SI_PERMS_ELEVATION_REQUIRED  0x01000000
+#define SI_AUDITS_ELEVATION_REQUIRED 0x02000000
+#define SI_OWNER_ELEVATION_REQUIRED  0x04000000
+#define SI_MAY_WRITE                 0x10000000
+
+#define SI_EDIT_ALL     (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS)
+
+typedef struct _SI_ACCESS
+{
+    const GUID *pguid;
+    ACCESS_MASK mask;
+    LPCWSTR     pszName;
+    DWORD       dwFlags;
+} SI_ACCESS, *PSI_ACCESS;
+
+#define SI_ACCESS_SPECIFIC  0x00010000
+#define SI_ACCESS_GENERAL   0x00020000
+#define SI_ACCESS_CONTAINER 0x00040000
+#define SI_ACCESS_PROPERTY  0x00080000
+
+typedef struct _SI_INHERIT_TYPE
+{
+    const GUID *pguid;
+    ULONG       dwFlags;
+    LPCWSTR     pszName;
+} SI_INHERIT_TYPE, *PSI_INHERIT_TYPE;
+
+typedef enum _SI_PAGE_TYPE
+{
+    SI_PAGE_PERM,
+    SI_PAGE_ADVPERM,
+    SI_PAGE_AUDIT,
+    SI_PAGE_OWNER,
+    SI_PAGE_EFFECTIVE,
+    SI_PAGE_TAKEOWNERSHIP
+} SI_PAGE_TYPE;
+
+#define PSPCB_SI_INITDIALOG (WM_USER + 1)
+
+#undef INTERFACE
+#define INTERFACE ISecurityInformation
+DECLARE_INTERFACE_IID_(ISecurityInformation, IUnknown, "965fc360-16ff-11d0-91cb-00aa00bbb723")
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+    /* ISecurityInformation methods */
+    STDMETHOD(GetObjectInformation) (THIS_ PSI_OBJECT_INFO pObjectInfo ) PURE;
+    STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation,
+                            PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
+                            BOOL fDefault ) PURE;
+    STDMETHOD(SetSecurity) (THIS_ SECURITY_INFORMATION SecurityInformation,
+                            PSECURITY_DESCRIPTOR pSecurityDescriptor ) PURE;
+    STDMETHOD(GetAccessRights) (THIS_ const GUID* pguidObjectType,
+                                DWORD dwFlags,
+                                PSI_ACCESS *ppAccess,
+                                ULONG *pcAccesses,
+                                ULONG *piDefaultAccess ) PURE;
+    STDMETHOD(MapGeneric) (THIS_ const GUID *pguidObjectType,
+                           UCHAR *pAceFlags,
+                           ACCESS_MASK *pMask) PURE;
+    STDMETHOD(GetInheritTypes) (THIS_ PSI_INHERIT_TYPE *ppInheritTypes,
+                                ULONG *pcInheritTypes ) PURE;
+    STDMETHOD(PropertySheetPageCallback)(THIS_ HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage ) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation *LPSECURITYINFO;
+
+#define INTERFACE ISecurityInformation2
+DECLARE_INTERFACE_IID_(ISecurityInformation2, IUnknown, "c3ccfdb4-6f88-11d2-a3ce-00c04fb1782a")
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+    /* ISecurityInformation2 methods */
+    STDMETHOD_(BOOL,IsDaclCanonical) (THIS_ PACL pDacl) PURE;
+    STDMETHOD(LookupSids) (THIS_ ULONG cSids, PSID *rgpSids, LPDATAOBJECT *ppdo) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation2 *LPSECURITYINFO2;
+
+#define CFSTR_ACLUI_SID_INFO_LIST   TEXT("CFSTR_ACLUI_SID_INFO_LIST")
+
+typedef struct _SID_INFO
+{
+    PSID    pSid;
+    PWSTR   pwzCommonName;
+    PWSTR   pwzClass;
+    PWSTR   pwzUPN;
+} SID_INFO, *PSID_INFO;
+
+typedef struct _SID_INFO_LIST
+{
+    ULONG       cItems;
+    SID_INFO    aSidInfo[ANYSIZE_ARRAY];
+} SID_INFO_LIST, *PSID_INFO_LIST;
+
+
+#define INTERFACE IEffectivePermission
+DECLARE_INTERFACE_IID_(IEffectivePermission, IUnknown, "3853dc76-9f35-407c-88a1-d19344365fbc")
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+    /* ISecurityInformation methods */
+    STDMETHOD(GetEffectivePermission) (THIS_
+                                       const GUID* pguidObjectType,
+                                       PSID pUserSid,
+                                       LPCWSTR pszServerName,
+                                       PSECURITY_DESCRIPTOR pSD,
+                                       POBJECT_TYPE_LIST *ppObjectTypeList,
+                                       ULONG *pcObjectTypeListLength,
+                                       PACCESS_MASK *ppGrantedAccessList,
+                                       ULONG *pcGrantedAccessListLength) PURE;
+};
+#undef INTERFACE
+typedef IEffectivePermission *LPEFFECTIVEPERMISSION;
+
+#define INTERFACE ISecurityObjectTypeInfo
+DECLARE_INTERFACE_IID_(ISecurityObjectTypeInfo, IUnknown, "fc3066eb-79ef-444b-9111-d18a75ebf2fa")
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+    /* ISecurityInformation methods */
+    STDMETHOD(GetInheritSource)(THIS_ SECURITY_INFORMATION si,
+                                PACL pACL,
+#ifndef WINE_NO_UNICODE_MACROS
+                                PINHERITED_FROM *ppInheritArray
+#else
+                                PINHERITED_FROMW *ppInheritArray
+#endif
+                                ) PURE;
+};
+#undef INTERFACE
+typedef ISecurityObjectTypeInfo *LPSecurityObjectTypeInfo;
+
+
+#define INTERFACE ISecurityInformation3
+DECLARE_INTERFACE_IID_(ISecurityInformation3, IUnknown, "e2cdc9cc-31bd-4f8f-8c8b-b641af516a1a")
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+    /* ISecurityInformation3 methods */
+    STDMETHOD(GetFullResourceName) (THIS_ LPWSTR *ppszResourceName) PURE;
+    STDMETHOD(OpenElevatedEditor) (THIS_ HWND hWnd, SI_PAGE_TYPE uPage) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation3 *LPSECURITYINFO3;
+
+DEFINE_GUID(IID_ISecurityInformation, 0x965fc360, 0x16ff, 0x11d0, 0x91, 0xcb, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x23);
+DEFINE_GUID(IID_ISecurityInformation2, 0xc3ccfdb4, 0x6f88, 0x11d2, 0xa3, 0xce, 0x0, 0xc0, 0x4f, 0xb1, 0x78, 0x2a);
+DEFINE_GUID(IID_IEffectivePermission, 0x3853dc76, 0x9f35, 0x407c, 0x88, 0xa1, 0xd1, 0x93, 0x44, 0x36, 0x5f, 0xbc);
+DEFINE_GUID(IID_ISecurityObjectTypeInfo, 0xfc3066eb, 0x79ef, 0x444b, 0x91, 0x11, 0xd1, 0x8a, 0x75, 0xeb, 0xf2, 0xfa);
+DEFINE_GUID(IID_ISecurityInformation3, 0xe2cdc9cc, 0x31bd, 0x4f8f, 0x8c, 0x8b, 0xb6, 0x41, 0xaf, 0x51, 0x6a, 0x1a);
+
+HPROPSHEETPAGE WINAPI CreateSecurityPage(LPSECURITYINFO psi);
+BOOL WINAPI EditSecurity(HWND owner, LPSECURITYINFO psi);
+HRESULT WINAPI EditSecurityAdvanced(HWND owner, LPSECURITYINFO psi, SI_PAGE_TYPE uSIPage);
+
+#ifdef __cplusplus
+}
+#endif  /* __cplusplus */
+
+#endif /* __WINE_ACLUI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl
new file mode 100644
index 0000000..1c0a499
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2008 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+cpp_quote("#ifndef _NO_AUTHOR_GUIDS")
+
+cpp_quote("DEFINE_GUID(CATID_ActiveScriptAuthor, 0xaee2a92,0xbcbb,0x11d0,0x8c,0x72,0x0,0xc0,0x4f,0xc2,0xb0,0x85);")
+
+cpp_quote("#endif")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl
new file mode 100644
index 0000000..b80d427
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl
@@ -0,0 +1,590 @@
+/*
+ * Copyright 2008 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "activscp.idl";
+/* import "dbgprop.idl"; */
+
+interface IDebugDocumentContext;
+interface IRemoteDebugApplication;
+interface IEnumDebugCodeContexts;
+
+/* FIXME: */
+interface IEnumDebugStackFrames;
+interface IDebugStackFrame;
+interface IApplicationDebugger;
+interface IEnumRemoteDebugApplicationThreads;
+interface IDebugApplicationNode;
+interface IEnumDebugExpressionContexts;
+interface IDebugApplicationThread;
+interface IDebugSyncOperation;
+interface IDebugAsyncOperation;
+interface IDebugStackFrameSniffer;
+interface IDebugThreadCall32;
+interface IActiveScriptErrorDebug;
+interface IProvideExpressionContexts;
+
+typedef enum tagBREAKPOINT_STATE {
+    BREAKPOINT_DELETED,
+    BREAKPOINT_DISABLED,
+    BREAKPOINT_ENABLED
+} BREAKPOINT_STATE;
+
+typedef DWORD APPBREAKFLAGS;
+
+typedef enum tagBREAKREASON {
+    BREAKREASON_STEP,
+    BREAKREASON_BREAKPOINT,
+    BREAKREASON_DEBUGGER_BLOCK,
+    BREAKREASON_HOST_INITIATED,
+    BREAKREASON_LANGUAGE_INITIATED,
+    BREAKREASON_DEBUGGER_HALT,
+    BREAKREASON_ERROR,
+    BREAKREASON_JIT
+} BREAKREASON;
+
+typedef enum tagBREAKRESUME_ACTION {
+    BREAKRESUMEACTION_ABORT,
+    BREAKRESUMEACTION_CONTINUE,
+    BREAKRESUMEACTION_STEP_INTO,
+    BREAKRESUMEACTION_STEP_OVER,
+    BREAKRESUMEACTION_STEP_OUT,
+    BREAKRESUMEACTION_IGNORE
+} BREAKRESUMEACTION;
+
+typedef enum tagDOCUMENTNAMETYPE {
+    DOCUMENTNAMETYPE_APPNODE,
+    DOCUMENTNAMETYPE_TITLE,
+    DOCUMENTNAMETYPE_FILE_TAIL,
+    DOCUMENTNAMETYPE_URL
+} DOCUMENTNAMETYPE;
+
+typedef enum tagERRORRESUMEACTION {
+    ERRORRESUMEACTION_ReexecuteErrorStatement,
+    ERRORRESUMEACTION_AbortCallAndReturnErrorToCaller,
+    ERRORRESUMEACTION_SkipErrorStatement,
+} ERRORRESUMEACTION;
+
+typedef WORD SOURCE_TEXT_ATTR;
+
+#ifdef INTEROPLIB
+enum enum_SOURCE_TEXT_ATTR
+{
+    SOURCETEXT_ATTR_KEYWORD        = 0x01,
+    SOURCETEXT_ATTR_COMMENT        = 0x02,
+    SOURCETEXT_ATTR_NONSOURCE      = 0x04,
+    SOURCETEXT_ATTR_OPERATOR       = 0x08,
+    SOURCETEXT_ATTR_NUMBER         = 0x10,
+    SOURCETEXT_ATTR_STRING         = 0x20,
+    SOURCETEXT_ATTR_FUNCTION_START = 0x40
+};
+#endif
+
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_KEYWORD         = 0x01;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_COMMENT         = 0x02;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NONSOURCE       = 0x04;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_OPERATOR        = 0x08;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NUMBER          = 0x10;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_STRING          = 0x20;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_FUNCTION_START  = 0x40;
+
+/************************************************************
+ *      interface IActiveScriptDebug32
+ */
+[
+    object,
+    uuid(51973c10-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IActiveScriptDebug32 : IUnknown
+{
+    HRESULT GetScriptTextAttributes(
+            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+            [in] ULONG uNumCodeChars,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwFlags,
+            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+    HRESULT GetScriptletTextAttributes(
+            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+            [in] ULONG uNumCodeChars,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwFlags,
+            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+    HRESULT EnumCodeContextsOfPosition(
+            [in] DWORD dwSourceContext,
+            [in] ULONG uCharacterOffset,
+            [in] ULONG uNumChars,
+            [out] IEnumDebugCodeContexts **ppescc);
+}
+
+[
+    object,
+    uuid(bc437e23-f5b8-47f4-bb79-7d1ce5483b86),
+    pointer_default(unique)
+]
+interface IActiveScriptDebug64 : IUnknown
+{
+    HRESULT GetScriptTextAttributes(
+            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+            [in] ULONG uNumCodeChars,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwFlags,
+            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+    HRESULT GetScriptletTextAttributes(
+            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+            [in] ULONG uNumCodeChars,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwFlags,
+            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+    HRESULT EnumCodeContextsOfPosition(
+           [in] DWORDLONG dwSourceContext,
+           [in] ULONG uCharacterOffset,
+           [in] ULONG uNumChars,
+           [out] IEnumDebugCodeContexts **ppescc);
+}
+
+/************************************************************
+ *      interface IDebugDocumentInfo
+ */
+[
+    object,
+    uuid(51973c1f-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IDebugDocumentInfo : IUnknown
+{
+    HRESULT GetName(
+            [in]  DOCUMENTNAMETYPE dnt,
+            [out] BSTR *pbstrName);
+
+    HRESULT GetDocumentClassId(
+            [out] CLSID *pclsidDocument);
+}
+
+/************************************************************
+ *      interface IDebugDocument
+ */
+[
+    object,
+    uuid(51973c21-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IDebugDocument : IDebugDocumentInfo
+{
+}
+
+/************************************************************
+ *      interface IDebugCodeContext
+ */
+[
+    object,
+    uuid(51973c13-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IDebugCodeContext : IUnknown
+{
+    HRESULT GetDocumentContext(
+            [out] IDebugDocumentContext **ppsc);
+
+    HRESULT SetBreakPoint(
+            [in]  BREAKPOINT_STATE bps);
+}
+
+/************************************************************
+ *      interface IEnumDebugCodeContexts
+ */
+[
+    object,
+    uuid(51973c1d-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IEnumDebugCodeContexts : IUnknown
+{
+    HRESULT Next(
+            [in]  ULONG celt,
+            [out] IDebugCodeContext **pscc,
+            [out] ULONG *pceltFetched);
+
+    HRESULT Skip(
+            [in]  ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+            [out] IEnumDebugCodeContexts **ppescc);
+}
+
+/************************************************************
+ *      interface IDebugDocumentContext
+ */
+[
+    object,
+    uuid(51973c28-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IDebugDocumentContext : IUnknown
+{
+    HRESULT GetDocument(
+            [out] IDebugDocument **ppsd);
+
+    HRESULT EnumCodeContexts(
+            [out] IEnumDebugCodeContexts **ppescc);
+}
+
+/************************************************************
+ *      interface IRemoteDebugApplicationThread
+ */
+[
+    object,
+    uuid(51973c37-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique)
+]
+interface IRemoteDebugApplicationThread : IUnknown
+{
+    HRESULT GetSystemThreadId(
+            [out] DWORD *dwThreadId);
+
+    HRESULT GetApplication(
+            [out] IRemoteDebugApplication **pprda);
+
+    HRESULT EnumStackFrames(
+            [out] IEnumDebugStackFrames **ppedsf);
+
+    HRESULT GetDescription(
+            [out] BSTR *pbstrDescription,
+            [out] BSTR *pbstrState);
+
+    HRESULT SetNextStatement(
+            [in]  IDebugStackFrame *pStackFrame,
+            [in]  IDebugCodeContext *pCodeContext);
+
+    HRESULT GetState(
+            [out] DWORD *pState);
+
+    HRESULT Suspend(
+            [out] DWORD *pdwCount);
+
+    HRESULT Resume(
+            [out] DWORD *pdwCount);
+
+    HRESULT GetSuspendCount(
+            [out] DWORD *pdwCount);
+}
+
+/************************************************************
+ *      interface IRemoteDebugApplication
+ */
+[
+    object,
+    uuid(51973c30-cb0c-11d0-b5c9-00a0244Aae7a),
+    pointer_default(unique)
+]
+interface IRemoteDebugApplication : IUnknown
+{
+    HRESULT ResumeFromBreakPoint(
+            [in]  IRemoteDebugApplicationThread *prptFocus,
+            [in]  BREAKRESUMEACTION bra,
+            [in]  ERRORRESUMEACTION era);
+
+    HRESULT CauseBreak();
+
+    HRESULT ConnectDebugger(
+            [in]  IApplicationDebugger *pad);
+
+    HRESULT DisconnectDebugger();
+
+    HRESULT GetDebugger(
+            [out] IApplicationDebugger **pad);
+
+    HRESULT CreateInstanceAtApplication(
+            [in]  REFCLSID rclsid,
+            [in]  IUnknown *pUnkOuter,
+            [in]  DWORD dwClsContext,
+            [in]  REFIID riid,
+            [out, iid_is(riid)] IUnknown **ppvObject);
+
+    HRESULT QueryAlive();
+
+    HRESULT EnumThreads(
+            [out] IEnumRemoteDebugApplicationThreads **pperdat);
+
+    HRESULT GetName(
+            [out] BSTR *pbstrName);
+
+    HRESULT GetRootNode(
+            [out] IDebugApplicationNode **ppdanRoot);
+
+    HRESULT EnumGlobalExpressionContexts(
+            [out] IEnumDebugExpressionContexts **ppedec);
+}
+
+/************************************************************
+ *      interface IDebugApplication32
+ */
+[
+    object,
+    uuid(51973c32-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique),
+    local
+]
+interface IDebugApplication32 : IRemoteDebugApplication
+{
+    HRESULT SetName(
+            [in] LPCOLESTR pstrName);
+
+    HRESULT StepOutComplete();
+
+    HRESULT DebugOutput(
+            [in] LPCOLESTR pstr);
+
+    HRESULT StartDebugSession();
+
+    HRESULT HandleBreakPoint(
+            [in]  BREAKREASON br,
+            [out] BREAKRESUMEACTION *pbra);
+
+    HRESULT Close();
+
+    HRESULT GetBreakFlags(
+            [out] APPBREAKFLAGS *pabf,
+            [out] IRemoteDebugApplicationThread **pprdatSteppingThread);
+
+    cpp_quote("#undef GetCurrentThread")
+    HRESULT GetCurrentThread(
+            [out] IDebugApplicationThread **pat);
+
+    HRESULT CreateAsyncDebugOperation(
+            [in]  IDebugSyncOperation *psdo,
+            [out] IDebugAsyncOperation **ppado);
+
+    HRESULT AddStackFrameSniffer(
+            [in]  IDebugStackFrameSniffer *pdsfs,
+            [out] DWORD *pdwCookie);
+
+    HRESULT RemoveStackFrameSniffer(
+            [in]  DWORD dwCookie);
+
+    HRESULT QueryCurrentThreadIsDebuggerThread();
+
+    HRESULT SynchronousCallInDebuggerThread(
+            [in]  IDebugThreadCall32 *pptc,
+            [in]  DWORD dwParam1,
+            [in]  DWORD dwParam2,
+            [in]  DWORD dwParam3);
+
+    HRESULT CreateApplicationNode(
+            [out] IDebugApplicationNode **ppdanNew);
+
+    HRESULT FireDebuggerEvent(
+            [in]  REFGUID riid,
+            [in]  IUnknown *punk);
+
+    HRESULT HandleRuntimeError(
+            [in]  IActiveScriptErrorDebug *pErrorDebug,
+            [in]  IActiveScriptSite *pScriptSite,
+            [out] BREAKRESUMEACTION *pbra,
+            [out] ERRORRESUMEACTION *perra,
+            [out] BOOL *pfCallOnScriptError);
+
+    BOOL FCanJitDebug();
+
+    BOOL FIsAutoJitDebugEnabled();
+
+    HRESULT AddGlobalExpressionContextProvider(
+            [in]  IProvideExpressionContexts *pdsfs,
+            [out] DWORD *pdwCookie);
+
+    HRESULT RemoveGlobalExpressionContextProvider(
+            [in]  DWORD dwCookie);
+}
+
+/************************************************************
+ *      interface IDebugApplication64
+ */
+[
+    object,
+    uuid(4dedc754-04c7-4f10-9e60-16a390fe6e62),
+    pointer_default(unique),
+    local
+]
+interface IDebugApplication64 : IRemoteDebugApplication
+{
+    HRESULT SetName(
+            [in] LPCOLESTR pstrName);
+
+    HRESULT StepOutComplete();
+
+    HRESULT DebugOutput(
+            [in] LPCOLESTR pstr);
+
+    HRESULT StartDebugSession();
+
+    HRESULT HandleBreakPoint(
+            [in]  BREAKREASON br,
+            [out] BREAKRESUMEACTION *pbra);
+
+    HRESULT Close();
+
+    HRESULT GetBreakFlags(
+            [out] APPBREAKFLAGS *pabf,
+            [out] IRemoteDebugApplicationThread **pprdatSteppingThread);
+
+    HRESULT GetCurrentThread(
+            [out] IDebugApplicationThread **pat);
+
+    HRESULT CreateAsyncDebugOperation(
+            [in]  IDebugSyncOperation *psdo,
+            [out] IDebugAsyncOperation **ppado);
+
+    HRESULT AddStackFrameSniffer(
+            [in]  IDebugStackFrameSniffer *pdsfs,
+            [out] DWORD *pdwCookie);
+
+    HRESULT RemoveStackFrameSniffer(
+            [in]  DWORD dwCookie);
+
+    HRESULT QueryCurrentThreadIsDebuggerThread();
+
+    HRESULT SynchronousCallInDebuggerThread(
+            [in]  IDebugThreadCall32 *pptc,
+            [in]  DWORDLONG dwParam1,
+            [in]  DWORDLONG dwParam2,
+            [in]  DWORDLONG dwParam3);
+
+    HRESULT CreateApplicationNode(
+            [out] IDebugApplicationNode **ppdanNew);
+
+    HRESULT FireDebuggerEvent(
+            [in]  REFGUID riid,
+            [in]  IUnknown *punk);
+
+    HRESULT HandleRuntimeError(
+            [in]  IActiveScriptErrorDebug *pErrorDebug,
+            [in]  IActiveScriptSite *pScriptSite,
+            [out] BREAKRESUMEACTION *pbra,
+            [out] ERRORRESUMEACTION *perra,
+            [out] BOOL *pfCallOnScriptError);
+
+    BOOL FCanJitDebug();
+
+    BOOL FIsAutoJitDebugEnabled();
+
+    HRESULT AddGlobalExpressionContextProvider(
+            [in]  IProvideExpressionContexts *pdsfs,
+            [out] DWORDLONG *pdwCookie);
+
+    HRESULT RemoveGlobalExpressionContextProvider(
+            [in]  DWORDLONG dwCookie);
+}
+
+/************************************************************
+ *      interface IActiveScriptSiteDebug32
+ */
+[
+    object,
+    uuid(51973c11-cb0c-11d0-b5c9-00a0244a0e7a),
+    pointer_default(unique),
+    local
+]
+interface IActiveScriptSiteDebug32 : IUnknown
+{
+    HRESULT GetDocumentContextFromPosition(
+            [in]  DWORD dwSourceContext,
+            [in]  ULONG uCharacterOffset,
+            [in]  ULONG uNumChars,
+            [out] IDebugDocumentContext **ppsc);
+
+    HRESULT GetApplication(
+            [out] IDebugApplication32 **ppda);
+
+    HRESULT GetRootApplicationNode(
+            [out] IDebugApplicationNode **ppdanRoot);
+
+    HRESULT OnScriptErrorDebug(
+            [in]  IActiveScriptErrorDebug *pErrorDebug,
+            [out] BOOL *pfEnterDebugger,
+            [out] BOOL *pfCallOnScriptErrorWhenContinuing);
+}
+
+/************************************************************
+ *      interface IActiveScriptSiteDebug64
+ */
+[
+    object,
+    uuid(d6b96b0a-7463-402c-92ac-89984226942f),
+    pointer_default(unique),
+    local
+]
+interface IActiveScriptSiteDebug64 : IUnknown
+{
+    HRESULT GetDocumentContextFromPosition(
+            [in]  DWORDLONG dwSourceContext,
+            [in]  ULONG uCharacterOffset,
+            [in]  ULONG uNumChars,
+            [out] IDebugDocumentContext **ppsc);
+
+    HRESULT GetApplication(
+            [out] IDebugApplication64 **ppda);
+
+    HRESULT GetRootApplicationNode(
+            [out] IDebugApplicationNode **ppdanRoot);
+
+    HRESULT OnScriptErrorDebug(
+            [in]  IActiveScriptErrorDebug *pErrorDebug,
+            [out] BOOL *pfEnterDebugger,
+            [out] BOOL *pfCallOnScriptErrorWhenContinuing);
+}
+
+cpp_quote("#ifndef DISABLE_ACTIVDBG_INTERFACE_WRAPPERS")
+cpp_quote("#ifdef _WIN64")
+
+cpp_quote("#define IActiveScriptDebug IActiveScriptDebug64")
+cpp_quote("#define IID_IActiveScriptDebug IID_IActiveScriptDebug64")
+
+cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug64")
+cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug64")
+
+cpp_quote("#define IDebugApplication IDebugApplication64")
+cpp_quote("#define IID_IDebugApplication IID_IDebugApplication64")
+
+cpp_quote("#else")
+
+cpp_quote("#define IActiveScriptDebug IActiveScriptDebug32")
+cpp_quote("#define IID_IActiveScriptDebug IID_IActiveScriptDebug32")
+
+cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug32")
+cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug32")
+
+cpp_quote("#define IDebugApplication IDebugApplication32")
+cpp_quote("#define IID_IDebugApplication IID_IDebugApplication32")
+
+cpp_quote("#endif")
+cpp_quote("#endif")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl
new file mode 100644
index 0000000..8457df4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl
@@ -0,0 +1,558 @@
+/*
+ * Copyright 2004 Kevin Koltzau
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+cpp_quote("#ifndef _NO_SCRIPT_GUIDS")
+
+cpp_quote("DEFINE_GUID(CATID_ActiveScript,       0xf0b7a1a1,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);")
+cpp_quote("DEFINE_GUID(CATID_ActiveScriptParse,  0xf0b7a1a2,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);")
+cpp_quote("DEFINE_GUID(CATID_ActiveScriptEncode, 0xf0b7a1a3,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);")
+
+cpp_quote("#endif")
+
+cpp_quote("#define SCRIPTPROP_NAME                   0x00000000")
+cpp_quote("#define SCRIPTPROP_MAJORVERSION           0x00000001")
+cpp_quote("#define SCRIPTPROP_MINORVERSION           0x00000002")
+cpp_quote("#define SCRIPTPROP_BUILDNUMBER            0x00000003")
+cpp_quote("#define SCRIPTPROP_DELAYEDEVENTSINKING    0x00001000")
+cpp_quote("#define SCRIPTPROP_CATCHEXCEPTION         0x00001001")
+cpp_quote("#define SCRIPTPROP_CONVERSIONLCID         0x00001002")
+cpp_quote("#define SCRIPTPROP_HOSTSTACKREQUIRED      0x00001003")
+cpp_quote("#define SCRIPTPROP_DEBUGGER               0x00001100")
+cpp_quote("#define SCRIPTPROP_JITDEBUG               0x00001101")
+cpp_quote("#define SCRIPTPROP_INVOKEVERSIONING       0x00004000")
+
+cpp_quote("#define SCRIPTPROP_HACK_FIBERSUPPORT                0x70000000")
+cpp_quote("#define SCRIPTPROP_HACK_TRIDENTEVENTSINK            0x70000001")
+cpp_quote("#define SCRIPTPROP_ABBREVIATE_GLOBALNAME_RESOLUTION 0x70000002")
+ 
+typedef enum tagSCRIPTSTATE {
+    SCRIPTSTATE_UNINITIALIZED = 0,
+    SCRIPTSTATE_STARTED       = 1,
+    SCRIPTSTATE_CONNECTED     = 2,
+    SCRIPTSTATE_DISCONNECTED  = 3,
+    SCRIPTSTATE_CLOSED        = 4,
+    SCRIPTSTATE_INITIALIZED   = 5
+} SCRIPTSTATE;
+
+typedef enum tagSCRIPTTHREADSTATE {
+    SCRIPTTHREADSTATE_NOTINSCRIPT = 0,
+    SCRIPTTHREADSTATE_RUNNING     = 1
+} SCRIPTTHREADSTATE;
+
+typedef enum tagSCRIPTUICITEM {
+    SCRIPTUICITEM_INPUTBOX = 1,
+    SCRIPTUICITEM_MSGBOX   = 2
+} SCRIPTUICITEM;
+
+typedef enum tagSCRIPTUICHANDLING {
+    SCRIPTUICHANDLING_ALLOW       = 0,
+    SCRIPTUICHANDLING_NOUIERROR   = 1,
+    SCRIPTUICHANDLING_NOUIDEFAULT = 2
+} SCRIPTUICHANDLING;
+
+typedef DWORD SCRIPTTHREADID;
+cpp_quote("#define SCRIPTTHREADID_CURRENT ((SCRIPTTHREADID)-1)")
+cpp_quote("#define SCRIPTTHREADID_BASE ((SCRIPTTHREADID)-2)")
+cpp_quote("#define SCRIPTTHREADID_ALL ((SCRIPTTHREADID)-3)")
+
+cpp_quote("#define SCRIPTITEM_ISVISIBLE           0x00000002")
+cpp_quote("#define SCRIPTITEM_ISSOURCE            0x00000004")
+cpp_quote("#define SCRIPTITEM_GLOBALMEMBERS       0x00000008")
+cpp_quote("#define SCRIPTITEM_ISPERSISTENT        0x00000040")
+cpp_quote("#define SCRIPTITEM_CODEONLY            0x00000200")
+cpp_quote("#define SCRIPTITEM_NOCODE              0x00000400")
+cpp_quote("#define SCRIPTITEM_ALL_FLAGS           (SCRIPTITEM_ISSOURCE | \\")
+cpp_quote("                                        SCRIPTITEM_ISVISIBLE | \\")
+cpp_quote("                                        SCRIPTITEM_ISPERSISTENT | \\")
+cpp_quote("                                        SCRIPTITEM_GLOBALMEMBERS | \\")
+cpp_quote("                                        SCRIPTITEM_NOCODE | \\")
+cpp_quote("                                        SCRIPTITEM_CODEONLY)")
+cpp_quote("#define SCRIPTTYPELIB_ISCONTROL        0x00000010")
+cpp_quote("#define SCRIPTTYPELIB_ISPERSISTENT     0x00000040")
+cpp_quote("#define SCRIPTTYPELIB_ALL_FLAGS        (SCRIPTTEXT_ISCONTROL | SCRIPTTYPELIB_ISPERSISTENT)")
+cpp_quote("#define SCRIPTTEXT_DELAYEXECUTION      0x00000001")
+cpp_quote("#define SCRIPTTEXT_ISVISIBLE           0x00000002")
+cpp_quote("#define SCRIPTTEXT_ISEXPRESSION        0x00000020")
+cpp_quote("#define SCRIPTTEXT_ISPERSISTENT        0x00000040")
+cpp_quote("#define SCRIPTTEXT_HOSTMANAGESSOURCE   0x00000080")
+cpp_quote("#define SCRIPTTEXT_ALL_FLAGS           (SCRIPTTEXT_DELAYEXECUTION | \\")
+cpp_quote("                                        SCRIPTTEXT_ISVISIBLE | \\")
+cpp_quote("                                        SCRIPTTEXT_ISEXPRESSION | \\")
+cpp_quote("                                        SCRIPTTEXT_ISPERSISTENT | \\")
+cpp_quote("                                        SCRIPTTEXT_HOSTMANAGESSOURCE)")
+cpp_quote("#define SCRIPTPROC_HOSTMANAGESSOURCE   0x00000080")
+cpp_quote("#define SCRIPTPROC_IMPLICIT_THIS       0x00000100")
+cpp_quote("#define SCRIPTPROC_IMPLICIT_PARENTS    0x00000200")
+cpp_quote("#define SCRIPTPROC_ALL_FLAGS           (SCRIPTPROC_HOSTMANAGESSOURCE | \\")
+cpp_quote("                                        SCRIPTPROC_IMPLICIT_THIS | \\")
+cpp_quote("                                        SCRIPTPROC_IMPLICIT_PARENTS)")
+cpp_quote("#define SCRIPTINFO_IUNKNOWN            0x00000001")
+cpp_quote("#define SCRIPTINFO_ITYPEINFO           0x00000002")
+cpp_quote("#define SCRIPTINFO_ALL_FLAGS           (SCRIPTINFO_IUNKNOWN | SCRIPTINFO_ITYPEINFO)")
+cpp_quote("#define SCRIPTINTERRUPT_DEBUG          0x00000001")
+cpp_quote("#define SCRIPTINTERRUPT_RAISEEXCEPTION 0x00000002")
+cpp_quote("#define SCRIPTINTERRUPT_ALL_FLAGS      (SCRIPTINTERRUPT_DEBUG | SCRIPTINTERRUPT_RAISEEXCEPTION)")
+cpp_quote("#define SCRIPTSTAT_STATEMENT_COUNT      1")
+cpp_quote("#define SCRIPTSTAT_INSTRUCTION_COUNT    2")
+cpp_quote("#define SCRIPTSTAT_INTSTRUCTION_TIME    3")
+cpp_quote("#define SCRIPTSTAT_TOTAL_TIME           4")
+
+[
+object,
+uuid(EAE1BA61-A4ED-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptError : IUnknown
+{
+    HRESULT GetExceptionInfo(
+            [out] EXCEPINFO *pexcepinfo
+    );
+    
+    HRESULT GetSourcePosition(
+            [out] DWORD *pdwSourceContext,
+            [out] ULONG *pulLineNumber,
+            [out] LONG *plCharacterPosition
+    );
+    
+    HRESULT GetSourceLineText(
+            [out] BSTR *pbstrSourceLine
+    );
+}
+
+[
+object,
+uuid(DB01A1E3-A42B-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptSite : IUnknown
+{
+    HRESULT GetLCID(
+            [out] LCID *plcid);
+    
+    HRESULT GetItemInfo(
+            [in] LPCOLESTR pstrName,
+            [in] DWORD dwReturnMask,
+            [out] IUnknown **ppiunkItem,
+            [out] ITypeInfo **ppti
+    );
+    
+    HRESULT GetDocVersionString(
+            [out] BSTR *pbstrVersion
+    );
+    
+    HRESULT OnScriptTerminate(
+            [in] const VARIANT *pvarResult,
+            [in] const EXCEPINFO *pexcepinfo
+    );
+    
+    HRESULT OnStateChange(
+            [in] SCRIPTSTATE ssScriptState
+    );
+    
+    HRESULT OnScriptError(
+            [in] IActiveScriptError *pscripterror
+    );
+    
+    HRESULT OnEnterScript(void);
+    
+    HRESULT OnLeaveScript(void);
+}
+
+cpp_quote("typedef IActiveScriptSite *PIActiveScriptSite;")
+
+[
+object,
+uuid(D10F6761-83E9-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptSiteWindow : IUnknown
+{
+    HRESULT GetWindow(
+            [out] HWND *phwnd
+    );
+
+    HRESULT EnableModeless(
+            [in] BOOL fEnable
+    );
+}
+
+[
+    object,
+    uuid(aedae97e-d7ee-4796-b960-7f092ae844ab),
+    pointer_default(unique)
+]
+interface IActiveScriptSiteUIControl : IUnknown
+{
+    HRESULT GetUIBehavior(
+            [in]  SCRIPTUICITEM UicItem,
+            [out] SCRIPTUICHANDLING *pUicHandling);
+}
+
+[
+object,
+uuid(539698A0-CDCA-11CF-A5EB-00AA0047A063),
+pointer_default(unique)
+]
+interface IActiveScriptSiteInterruptPoll : IUnknown
+{
+    HRESULT QueryContinue();
+}
+
+[
+object,
+uuid(BB1A2AE1-A4F9-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScript : IUnknown
+{
+    HRESULT SetScriptSite(
+            [in] IActiveScriptSite *pass
+    );
+
+    HRESULT GetScriptSite(
+            [in] REFIID riid,
+            [out, iid_is(riid)] void **ppvObject
+    );
+
+    HRESULT SetScriptState(
+            [in] SCRIPTSTATE ss
+    );
+
+    HRESULT GetScriptState(
+            [out] SCRIPTSTATE *pssState
+    );
+
+    HRESULT Close(void);
+
+    HRESULT AddNamedItem(
+            [in] LPCOLESTR pstrName,
+            [in] DWORD dwFlags
+    );
+
+    HRESULT AddTypeLib(
+            [in] REFGUID rguidTypeLib,
+            [in] DWORD dwMajor,
+            [in] DWORD dwMinor,
+            [in] DWORD dwFlags
+    );
+
+    HRESULT GetScriptDispatch(
+            [in] LPCOLESTR pstrItemName,
+            [out] IDispatch **ppdisp
+    );
+
+    HRESULT GetCurrentScriptThreadID(
+            [out] SCRIPTTHREADID *pstidThread
+    );
+
+    HRESULT GetScriptThreadID(
+            [in] DWORD dwWin32ThreadId,
+            [out] SCRIPTTHREADID *pstidThread
+    );
+
+    HRESULT GetScriptThreadState(
+            [in] SCRIPTTHREADID stidThread,
+            [out] SCRIPTTHREADSTATE *pstsState
+    );
+
+    HRESULT InterruptScriptThread(
+            [in] SCRIPTTHREADID stidThread,
+            [in] const EXCEPINFO *pexcepinfo,
+            [in] DWORD dwFlags
+    );
+
+    HRESULT Clone(
+            [out] IActiveScript **ppscript
+    );
+}
+
+cpp_quote("typedef IActiveScript *PIActiveScript;")
+
+[
+object,
+uuid(BB1A2AE2-A4F9-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptParse32 : IUnknown
+{
+    HRESULT InitNew(void);
+
+    HRESULT AddScriptlet(
+            [in] LPCOLESTR pstrDefaultName,
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrItemName,
+            [in] LPCOLESTR pstrSubItemName,
+            [in] LPCOLESTR pstrEventName,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] BSTR *pbstrName,
+            [out] EXCEPINFO *pexcepinfo
+    );
+
+    HRESULT ParseScriptText(
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrItemName,
+            [in] IUnknown *punkContext,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] VARIANT *pvarResult,
+            [out] EXCEPINFO *pexcepinfo
+    );
+}
+
+[
+   object,
+   uuid(c7ef7658-e1ee-480e-97ea-d52cb4d76d17),
+   pointer_default(unique)
+]
+interface IActiveScriptParse64 : IUnknown
+{
+    HRESULT InitNew(void);
+
+    HRESULT AddScriptlet(
+            [in] LPCOLESTR pstrDefaultName,
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrItemName,
+            [in] LPCOLESTR pstrSubItemName,
+            [in] LPCOLESTR pstrEventName,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORDLONG dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] BSTR *pbstrName,
+            [out] EXCEPINFO *pexcepinfo
+    );
+
+    HRESULT ParseScriptText(
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrItemName,
+            [in] IUnknown *punkContext,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORDLONG dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] VARIANT *pvarResult,
+            [out] EXCEPINFO *pexcepinfo
+    );
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParse IActiveScriptParse64")
+cpp_quote("#define IID_IActiveScriptParse IID_IActiveScriptParse64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParse IActiveScriptParse32")
+cpp_quote("#define IID_IActiveScriptParse IID_IActiveScriptParse32")
+cpp_quote("#endif")
+
+cpp_quote("typedef IActiveScriptParse *PIActiveScriptParse;")
+
+[
+object,
+uuid(1CFF0050-6FDD-11d0-9328-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IActiveScriptParseProcedureOld32 : IUnknown
+{
+    HRESULT ParseProcedureText(
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrFormalParams,
+            [in] LPCOLESTR pstrItemName,
+            [in] IUnknown *punkContext,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] IDispatch **ppdisp
+    );
+}
+
+[
+    object,
+    uuid(21f57128-08c9-4638-ba12-22d15d88dc5c),
+    pointer_default(unique)
+]
+interface IActiveScriptParseProcedureOld64 : IUnknown
+{
+    HRESULT ParseProcedureText(
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrFormalParams,
+            [in] LPCOLESTR pstrItemName,
+            [in] IUnknown *punkContext,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORDLONG dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] IDispatch **ppdisp
+    );
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld64")
+cpp_quote("#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld32")
+cpp_quote("#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld32")
+cpp_quote("#endif")
+
+[
+object,
+uuid(AA5B6A80-B834-11d0-932F-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IActiveScriptParseProcedure32 : IUnknown
+{
+    HRESULT ParseProcedureText(
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrFormalParams,
+            [in] LPCOLESTR pstrProcedureName,
+            [in] LPCOLESTR pstrItemName,
+            [in] IUnknown *punkContext,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORD dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] IDispatch **ppdisp
+    );
+}
+
+[
+    object,
+    uuid(c64713b6-e029-4cc5-9200-438b72890b6a),
+    pointer_default(unique)
+]
+interface IActiveScriptParseProcedure64 : IUnknown
+{
+    HRESULT ParseProcedureText(
+            [in] LPCOLESTR pstrCode,
+            [in] LPCOLESTR pstrFormalParams,
+            [in] LPCOLESTR pstrProcedureName,
+            [in] LPCOLESTR pstrItemName,
+            [in] IUnknown *punkContext,
+            [in] LPCOLESTR pstrDelimiter,
+            [in] DWORDLONG dwSourceContextCookie,
+            [in] ULONG ulStartingLineNumber,
+            [in] DWORD dwFlags,
+            [out] IDispatch **ppdisp
+    );
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParseProcedure IActiveScriptParseProcedure64")
+cpp_quote("#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParseProcedure IActiveScriptParseProcedure32")
+cpp_quote("#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure32")
+cpp_quote("#endif")
+
+[
+    object,
+    uuid(71ee5b20-fb04-11d1-b3a8-00a0c911e8b2),
+    pointer_default(unique)
+]
+interface IActiveScriptParseProcedure2_32 : IActiveScriptParseProcedure32
+{
+}
+
+[
+    object,
+    uuid(fe7c4271-210c-448d-9f54-76dab7047b28),
+    pointer_default(unique)
+]
+interface IActiveScriptParseProcedure2_64 : IActiveScriptParseProcedure64
+{
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_64")
+cpp_quote("#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_32")
+cpp_quote("#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_32")
+cpp_quote("#endif")
+
+[
+object,
+uuid(63CDBCB0-C1B1-11d0-9336-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IBindEventHandler : IUnknown
+{
+    HRESULT BindHandler(
+            [in] LPCOLESTR pstrEvent,
+            [in] IDispatch *pdisp
+    );
+}
+
+[
+object,
+uuid(B8DA6310-E19B-11d0-933C-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IActiveScriptStats : IUnknown
+{
+    HRESULT GetStat(
+            [in] DWORD stid,
+            [out] ULONG *pluHi,
+            [out] ULONG *pluLo
+    );
+
+    HRESULT GetStatEx(
+            [in] REFGUID guid,
+            [out] ULONG *pluHi,
+            [out] ULONG *pluLo
+    );
+
+    HRESULT ResetStats(void);
+}
+
+[
+    object,
+    uuid(4954e0d0-fbc7-11d1-8410-006008c3fbfc),
+    pointer_default(unique)
+]
+interface IActiveScriptProperty : IUnknown
+{
+    HRESULT GetProperty(
+            [in] DWORD dwProperty,
+            [in] VARIANT *pvarIndex,
+            [out] VARIANT *pvarValue);
+
+    HRESULT SetProperty(
+            [in] DWORD dwProperty,
+            [in] VARIANT *pvarIndex,
+            [in] VARIANT *pvarValue);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h
new file mode 100644
index 0000000..c066768
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ADSHLP_H
+#define __WINE_ADSHLP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI ADsBuildEnumerator(IADsContainer*,IEnumVARIANT**);
+HRESULT WINAPI ADsEnumerateNext(IEnumVARIANT*,ULONG,VARIANT*,ULONG*);
+HRESULT WINAPI ADsGetObject(LPCWSTR,REFIID,VOID**);
+HRESULT WINAPI ADsOpenObject(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,REFIID,VOID**);
+BOOL    WINAPI FreeADsMem(LPVOID);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h
new file mode 100644
index 0000000..4dd31b3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h
@@ -0,0 +1,290 @@
+/*
+ * Copyright 2004 Huw D M Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ADVPUB_H
+#define __WINE_ADVPUB_H
+
+#include <setupapi.h>
+#include <cfgmgr32.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef S_ASYNCHRONOUS
+#define S_ASYNCHRONOUS  _HRESULT_TYPEDEF_(0x401E8)
+#endif
+
+typedef struct _CabInfoA
+{
+    LPSTR  pszCab;
+    LPSTR  pszInf;
+    LPSTR  pszSection;
+    CHAR   szSrcPath[MAX_PATH];
+    DWORD  dwFlags;
+} CABINFOA, *PCABINFOA;
+
+typedef struct _CabInfoW
+{
+    LPWSTR pszCab;
+    LPWSTR pszInf;
+    LPWSTR pszSection;
+    WCHAR  szSrcPath[MAX_PATH];
+    DWORD  dwFlags;
+} CABINFOW, *PCABINFOW;
+
+DECL_WINELIB_TYPE_AW(CABINFO)
+DECL_WINELIB_TYPE_AW(PCABINFO)
+
+typedef struct _PERUSERSECTIONA
+{
+    CHAR  szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20];
+    CHAR  szDispName[128];
+    CHAR  szLocale[10];
+    CHAR  szStub[MAX_PATH * 4];
+    CHAR  szVersion[32];
+    CHAR  szCompID[128];
+    DWORD dwIsInstalled;
+    BOOL  bRollback;
+} PERUSERSECTIONA, *PPERUSERSECTIONA;
+
+typedef struct _PERUSERSECTIONW
+{
+    WCHAR szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20];
+    WCHAR szDispName[128];
+    WCHAR szLocale[10];
+    WCHAR szStub[MAX_PATH * 4];
+    WCHAR szVersion[32];
+    WCHAR szCompID[128];
+    DWORD dwIsInstalled;
+    BOOL  bRollback;
+} PERUSERSECTIONW, *PPERUSERSECTIONW;
+
+DECL_WINELIB_TYPE_AW(PERUSERSECTION)
+DECL_WINELIB_TYPE_AW(PPERUSERSECTION)
+
+typedef struct _StrEntryA
+{
+    LPSTR pszName;
+    LPSTR pszValue;
+} STRENTRYA, *LPSTRENTRYA;
+
+typedef struct _StrEntryW
+{
+    LPWSTR pszName;
+    LPWSTR pszValue;
+} STRENTRYW, *LPSTRENTRYW;
+
+DECL_WINELIB_TYPE_AW(STRENTRY)
+DECL_WINELIB_TYPE_AW(LPSTRENTRY)
+
+typedef struct _StrTableA
+{
+    DWORD cEntries;
+    STRENTRYA* pse;
+} STRTABLEA, *LPSTRTABLEA;
+typedef const STRTABLEA CSTRTABLEA, *LPCSTRTABLEA;
+
+typedef struct _StrTableW
+{
+    DWORD cEntries;
+    STRENTRYW* pse;
+} STRTABLEW, *LPSTRTABLEW;
+typedef const STRTABLEW CSTRTABLEW, *LPCSTRTABLEW;
+
+DECL_WINELIB_TYPE_AW(STRTABLE)
+DECL_WINELIB_TYPE_AW(CSTRTABLE)
+DECL_WINELIB_TYPE_AW(LPSTRTABLE)
+DECL_WINELIB_TYPE_AW(LPCSTRTABLE)
+
+/* Flags for AddDelBackupEntry */
+#define AADBE_ADD_ENTRY             0x01
+#define AADBE_DEL_ENTRY             0x02
+
+/* Flags for AdvInstallFile */
+#define AIF_WARNIFSKIP              0x00000001
+#define AIF_NOSKIP                  0x00000002
+#define AIF_NOVERSIONCHECK          0x00000004
+#define AIF_FORCE_FILE_IN_USE       0x00000008
+#define AIF_NOOVERWRITE             0x00000010
+#define AIF_NO_VERSION_DIALOG       0x00000020
+#define AIF_REPLACEONLY             0x00000400
+#define AIF_NOLANGUAGECHECK         0x10000000
+#define AIF_QUIET                   0x20000000
+
+/* Flags for RunSetupCommand */
+#define RSC_FLAG_INF                0x00000001
+#define RSC_FLAG_SKIPDISKSPACECHECK 0x00000002
+#define RSC_FLAG_QUIET              0x00000004
+#define RSC_FLAG_NGCONV             0x00000008
+#define RSC_FLAG_UPDHLPDLLS         0x00000010
+#define RSC_FLAG_DELAYREGISTEROCX   0x00000200
+#define RSC_FLAG_SETUPAPI           0x00000400
+
+/* Flags for DelNode */
+#define ADN_DEL_IF_EMPTY            0x00000001
+#define ADN_DONT_DEL_SUBDIRS        0x00000002
+#define ADN_DONT_DEL_DIR            0x00000004
+#define ADN_DEL_UNC_PATHS           0x00000008
+
+/* Flags for RegRestoreAll, RegSaveRestore, RegSaveRestoreOnINF */
+#define  IE4_RESTORE                0x00000001
+#define  IE4_BACKNEW                0x00000002
+#define  IE4_NODELETENEW            0x00000004
+#define  IE4_NOMESSAGES             0x00000008
+#define  IE4_NOPROGRESS             0x00000010
+#define  IE4_NOENUMKEY              0x00000020
+#define  IE4_NO_CRC_MAPPING         0x00000040
+#define  IE4_REGSECTION             0x00000080
+#define  IE4_FRDOALL                0x00000100
+#define  IE4_UPDREFCNT              0x00000200
+#define  IE4_USEREFCNT              0x00000400
+#define  IE4_EXTRAINCREFCNT         0x00000800
+
+/* Flags for file save and restore functions */
+#define  AFSR_RESTORE               IE4_RESTORE
+#define  AFSR_BACKNEW               IE4_BACKNEW
+#define  AFSR_NODELETENEW           IE4_NODELETENEW
+#define  AFSR_NOMESSAGES            IE4_NOMESSAGES
+#define  AFSR_NOPROGRESS            IE4_NOPROGRESS
+#define  AFSR_UPDREFCNT             IE4_UPDREFCNT
+#define  AFSR_USEREFCNT             IE4_USEREFCNT
+#define  AFSR_EXTRAINCREFCNT        IE4_EXTRAINCREFCNT
+
+HRESULT WINAPI AddDelBackupEntryA(LPCSTR lpcszFileList, LPCSTR lpcszBackupDir,
+     LPCSTR lpcszBaseName, DWORD dwFlags);
+HRESULT WINAPI AddDelBackupEntryW(LPCWSTR lpcszFileList, LPCWSTR lpcszBackupDir,
+     LPCWSTR lpcszBaseName, DWORD dwFlags);
+#define AddDelBackupEntry WINELIB_NAME_AW(AddDelBackupEntry)
+HRESULT WINAPI AdvInstallFileA(HWND hwnd, LPCSTR lpszSourceDir,
+     LPCSTR lpszSourceFile, LPCSTR lpszDestDir, LPCSTR lpszDestFile,
+     DWORD dwFlags, DWORD dwReserved);
+HRESULT WINAPI AdvInstallFileW(HWND hwnd, LPCWSTR lpszSourceDir,
+     LPCWSTR lpszSourceFile, LPCWSTR lpszDestDir, LPCWSTR lpszDestFile,
+     DWORD dwFlags, DWORD dwReserved);
+#define AdvInstallFile WINELIB_NAME_AW(AdvInstallFile)
+HRESULT WINAPI CloseINFEngine(HINF hInf);
+HRESULT WINAPI DelNodeA(LPCSTR pszFileOrDirName, DWORD dwFlags);
+HRESULT WINAPI DelNodeW(LPCWSTR pszFileOrDirName, DWORD dwFlags);
+#define DelNode WINELIB_NAME_AW(DelNode)
+HRESULT WINAPI DelNodeRunDLL32A(HWND,HINSTANCE,LPSTR,INT);
+HRESULT WINAPI DelNodeRunDLL32W(HWND,HINSTANCE,LPWSTR,INT);
+#define DelNodeRunDLL32 WINELIB_NAME_AW(DelNodeRunDLL32)
+HRESULT WINAPI ExecuteCabA( HWND hwnd, CABINFOA* pCab, LPVOID pReserved );
+HRESULT WINAPI ExecuteCabW( HWND hwnd, CABINFOW* pCab, LPVOID pReserved );
+#define ExecuteCab WINELIB_NAME_AW(ExecuteCab)
+HRESULT WINAPI ExtractFilesA(LPCSTR,LPCSTR,DWORD,LPCSTR,LPVOID,DWORD);
+HRESULT WINAPI ExtractFilesW(LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPVOID,DWORD);
+#define ExtractFiles WINELIB_NAME_AW(ExtractFiles)
+HRESULT WINAPI FileSaveMarkNotExistA(LPSTR pszFileList, LPSTR pszDir, LPSTR pszBaseName);
+HRESULT WINAPI FileSaveMarkNotExistW(LPWSTR pszFileList, LPWSTR pszDir, LPWSTR pszBaseName);
+#define FileSaveMarkNotExist WINELIB_NAME_AW(FileSaveMarkNotExist)
+HRESULT WINAPI FileSaveRestoreA(HWND hDlg, LPSTR pszFileList, LPSTR pszDir,
+     LPSTR pszBaseName, DWORD dwFlags);
+HRESULT WINAPI FileSaveRestoreW(HWND hDlg, LPWSTR pszFileList, LPWSTR pszDir,
+     LPWSTR pszBaseName, DWORD dwFlags);
+#define FileSaveRestore WINELIB_NAME_AW(FileSaveRestore)
+HRESULT WINAPI FileSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,
+     LPCSTR pszSection, LPCSTR pszBackupDir, LPCSTR pszBaseBackupFile, DWORD dwFlags);
+HRESULT WINAPI FileSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF,
+     LPCWSTR pszSection, LPCWSTR pszBackupDir, LPCWSTR pszBaseBackupFile, DWORD dwFlags);
+#define FileSaveRestoreOnINF WINELIB_NAME_AW(FileSaveRestoreOnINF)
+HRESULT WINAPI GetVersionFromFileA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+HRESULT WINAPI GetVersionFromFileW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+#define GetVersionFromFile WINELIB_NAME_AW(GetVersionFromFile)
+HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+HRESULT WINAPI GetVersionFromFileExW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+#define GetVersionFromFileEx WINELIB_NAME_AW(GetVersionFromFileEx)
+BOOL WINAPI IsNTAdmin(DWORD,LPDWORD);
+INT WINAPI LaunchINFSectionA(HWND,HINSTANCE,LPSTR,INT);
+INT WINAPI LaunchINFSectionW(HWND,HINSTANCE,LPWSTR,INT);
+#define LaunchINFSection WINELIB_NAME_AW(LaunchINFSection)
+HRESULT WINAPI LaunchINFSectionExA(HWND,HINSTANCE,LPSTR,INT);
+HRESULT WINAPI LaunchINFSectionExW(HWND,HINSTANCE,LPWSTR,INT);
+#define LaunchINFSectionEx WINELIB_NAME_AW(LaunchINFSectionEx)
+DWORD WINAPI NeedRebootInit(VOID);
+BOOL WINAPI NeedReboot(DWORD dwRebootCheck);
+HRESULT WINAPI OpenINFEngineA(LPCSTR pszInfFilename, LPCSTR pszInstallSection,
+     DWORD dwFlags, HINF *phInf, PVOID pvReserved);
+HRESULT WINAPI OpenINFEngineW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection,
+     DWORD dwFlags, HINF *phInf, PVOID pvReserved);
+#define OpenINFEngine WINELIB_NAME_AW(OpenINFEngine)
+HRESULT WINAPI RebootCheckOnInstallA(HWND hWnd, LPCSTR pszINF, LPCSTR pszSec, DWORD dwReserved);
+HRESULT WINAPI RebootCheckOnInstallW(HWND hWnd, LPCWSTR pszINF, LPCWSTR pszSec, DWORD dwReserved);
+#define RebootCheckOnInstall WINELIB_NAME_AW(RebootCheckOnInstall)
+HRESULT WINAPI RegInstallA(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable);
+HRESULT WINAPI RegInstallW(HMODULE hm, LPCWSTR pszSection, const STRTABLEW* pstTable);
+#define RegInstall WINELIB_NAME_AW(RegInstall)
+HRESULT WINAPI RegRestoreAllA(HWND hWnd, LPSTR pszTitleString, HKEY hkBackupKey);
+HRESULT WINAPI RegRestoreAllW(HWND hWnd, LPWSTR pszTitleString, HKEY hkBackupKey);
+#define RegRestoreAll WINELIB_NAME_AW(RegRestoreAll)
+HRESULT WINAPI RegSaveRestoreA(HWND hWnd, LPCSTR pszTitleString, HKEY hkBackupKey,
+     LPCSTR pcszRootKey, LPCSTR pcszSubKey, LPCSTR pcszValueName, DWORD dwFlags);
+HRESULT WINAPI RegSaveRestoreW(HWND hWnd, LPCWSTR pszTitleString, HKEY hkBackupKey,
+     LPCWSTR pcszRootKey, LPCWSTR pcszSubKey, LPCWSTR pcszValueName, DWORD dwFlags);
+#define RegSaveRestore WINELIB_NAME_AW(RegSaveRestore)
+HRESULT WINAPI RegSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,
+     LPCSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags);
+HRESULT WINAPI RegSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF,
+     LPCWSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags);
+#define RegSaveRestoreOnINF WINELIB_NAME_AW(RegSaveRestoreOnINF)
+HRESULT WINAPI RunSetupCommandA(HWND hWnd,
+     LPCSTR szCmdName, LPCSTR szInfSection, LPCSTR szDir, LPCSTR lpszTitle,
+     HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved);
+HRESULT WINAPI RunSetupCommandW(HWND hWnd,
+     LPCWSTR szCmdName, LPCWSTR szInfSection, LPCWSTR szDir, LPCWSTR lpszTitle,
+     HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved);
+#define RunSetupCommand WINELIB_NAME_AW(RunSetupCommand)
+HRESULT WINAPI SetPerUserSecValuesA(PERUSERSECTIONA* pPerUser);
+HRESULT WINAPI SetPerUserSecValuesW(PERUSERSECTIONW* pPerUser);
+#define SetPerUserSecValues WINELIB_NAME_AW(SetPerUserSecValues)
+HRESULT WINAPI TranslateInfStringA(LPCSTR pszInfFilename, LPCSTR pszInstallSection,
+     LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer,
+     DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+HRESULT WINAPI TranslateInfStringW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection,
+     LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer,
+     DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+#define TranslateInfString WINELIB_NAME_AW(TranslateInfString)
+HRESULT WINAPI TranslateInfStringExA(HINF hInf, LPCSTR pszInfFilename,
+    LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer,
+    DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+HRESULT WINAPI TranslateInfStringExW(HINF hInf, LPCWSTR pszInfFilename,
+    LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer,
+    DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+#define TranslateInfStringEx WINELIB_NAME_AW(TranslateInfStringEx)
+HRESULT WINAPI UserInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow);
+HRESULT WINAPI UserInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow);
+#define UserInstStubWrapper WINELIB_NAME_AW(UserInstStubWrapper)
+HRESULT WINAPI UserUnInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow);
+HRESULT WINAPI UserUnInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow);
+#define UserUnInstStubWrapper WINELIB_NAME_AW(UserUnInstStubWrapper)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ADVPUB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h
new file mode 100644
index 0000000..d204e53
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2009 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef AF_IRDA_H
+#define AF_IRDA_H
+
+typedef struct _IRDA_DEVICE_INFO
+{
+    UCHAR irdaDeviceID[4];
+    char  irdaDeviceName[22];
+    UCHAR irdaDeviceHints1;
+    UCHAR irdaDeviceHints2;
+    UCHAR irdaCharSet;
+} IRDA_DEVICE_INFO, *PIRDA_DEVICE_INFO;
+
+typedef struct _DEVICELIST
+{
+    ULONG            numDevice;
+    IRDA_DEVICE_INFO Device[1];
+} DEVICELIST, *PDEVICELIST;
+
+typedef struct _SOCKADDR_IRDA
+{
+    USHORT irdaAddressFamily;
+    UCHAR  irdaDeviceID[4];
+    char   irdaServiceName[25];
+} SOCKADDR_IRDA, *PSOCKADDR_IRDA, *LPSOCKADDR_IRDA;
+
+#ifdef USE_WS_PREFIX
+
+/* Socket levels and options */
+#define WS_SOL_IRLMP 0xff
+
+#define WS_IRLMP_ENUMDEVICES    ((ULONG)0x10)
+#define WS_IRLMP_IAS_SET        ((ULONG)0x11)
+#define WS_IRLMP_IAS_QUERY      ((ULONG)0x12)
+#define WS_IRLMP_SEND_PDU_LEN   ((ULONG)0x13)
+#define WS_IRLMP_EXCLUSIVE_MODE ((ULONG)0x14)
+#define WS_IRLMP_IRLPT_MODE     ((ULONG)0x15)
+#define WS_IRLMP_9WIRE_MODE     ((ULONG)0x16)
+#define WS_IRLMP_TINYTP_MODE    ((ULONG)0x17)
+#define WS_IRLMP_PARAMETERS     ((ULONG)0x18)
+#define WS_IRLMP_DISCOVER_MODE  ((ULONG)0x19)
+#define WS_IRLMP_SHARP_MODE     ((ULONG)0x20)
+
+#define WS_IAS_MAX_CLASSNAME    64
+#define WS_IAS_MAX_ATTRIBNAME   256
+
+#else
+
+/* Socket levels and options */
+#define SOL_IRLMP 0xff
+
+#define IRLMP_ENUMDEVICES    ((ULONG)0x10)
+#define IRLMP_IAS_SET        ((ULONG)0x11)
+#define IRLMP_IAS_QUERY      ((ULONG)0x12)
+#define IRLMP_SEND_PDU_LEN   ((ULONG)0x13)
+#define IRLMP_EXCLUSIVE_MODE ((ULONG)0x14)
+#define IRLMP_IRLPT_MODE     ((ULONG)0x15)
+#define IRLMP_9WIRE_MODE     ((ULONG)0x16)
+#define IRLMP_TINYTP_MODE    ((ULONG)0x17)
+#define IRLMP_PARAMETERS     ((ULONG)0x18)
+#define IRLMP_DISCOVER_MODE  ((ULONG)0x19)
+#define IRLMP_SHARP_MODE     ((ULONG)0x20)
+
+#define IAS_MAX_CLASSNAME    64
+#define IAS_MAX_ATTRIBNAME   256
+
+#endif
+
+#define IAS_MAX_OCTET_STRING 1024
+#define IAS_MAX_USER_STRING  256
+
+#define LmCharSetASCII      0x00
+#define LmCharSetISO_8859_1 0x01
+#define LmCharSetISO_8859_2 0x02
+#define LmCharSetISO_8859_3 0x03
+#define LmCharSetISO_8859_4 0x04
+#define LmCharSetISO_8859_5 0x05
+#define LmCharSetISO_8859_6 0x06
+#define LmCharSetISO_8859_7 0x07
+#define LmCharSetISO_8859_8 0x08
+#define LmCharSetISO_8859_9 0x09
+#define LmCharSetUNICODE    0xff
+
+#endif /* AF_IRDA_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h
new file mode 100644
index 0000000..cc1e46b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __AMAUDIO__
+#define __AMAUDIO__
+
+#include <mmsystem.h>
+#include <dsound.h>
+
+#undef INTERFACE
+#define INTERFACE IAMDirectSound
+
+DECLARE_INTERFACE_(IAMDirectSound,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+    /*** IAMDirectSound methods ***/
+    STDMETHOD(GetDirectSoundInterface)(THIS_ IDirectSound **ds) PURE;
+    STDMETHOD(GetPrimaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;
+    STDMETHOD(GetSecondaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;
+    STDMETHOD(ReleaseDirectSoundInterface)(THIS_ IDirectSound *ds) PURE;
+    STDMETHOD(ReleasePrimaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE;
+    STDMETHOD(ReleaseSecondaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE;
+    STDMETHOD(SetFocusWindow)(THIS_ HWND hwnd, BOOL bgaudible) PURE;
+    STDMETHOD(GetFocusWindow)(THIS_ HWND *hwnd, BOOL *bgaudible) PURE;
+};
+#undef INTERFACE
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl
new file mode 100644
index 0000000..d9664bb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+import "strmif.idl";
+
+cpp_quote("#include <ddraw.h>")
+cpp_quote("#include <mmsystem.h>")
+cpp_quote("#include <mmstream.h>")
+cpp_quote("#include <ddstream.h>")
+cpp_quote("#include <austream.h>")
+
+cpp_quote("#if 0")
+interface IDirectDraw;
+interface IDirectDrawSurface;
+cpp_quote("#endif")
+
+interface IAMMultiMediaStream;
+interface IAMMediaStream;
+interface IMediaStreamFilter;
+interface IAMMediaTypeStream;
+interface IAMMediaTypeSample;
+
+enum {
+	AMMSF_NOGRAPHTHREAD      = 0x00000001
+};
+
+enum {
+	AMMSF_ADDDEFAULTRENDERER = 0x00000001,
+	AMMSF_CREATEPEER         = 0x00000002,
+	AMMSF_STOPIFNOSAMPLES	 = 0x00000004,
+	AMMSF_NOSTALL		 = 0x00000008
+};
+
+enum {
+	AMMSF_RENDERTYPEMASK     = 0x00000003,
+	AMMSF_RENDERTOEXISTING   = 0x00000000,
+	AMMSF_RENDERALLSTREAMS   = 0x00000001,
+	AMMSF_NORENDER           = 0x00000002,
+	AMMSF_NOCLOCK            = 0x00000004,
+	AMMSF_RUN                = 0x00000008
+};
+
+
+typedef [v1_enum] enum {
+	Disabled = 0,
+	ReadData = 1,
+	RenderData = 2
+} OUTPUT_STATE;
+
+[
+object,
+uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D),
+dual,
+helpstring("IDirectShowStream Interface"),
+pointer_default(unique)
+]
+interface IDirectShowStream : IDispatch
+{
+	[propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal);
+	[propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal);
+	[propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal);
+	[propput, id(2), helpstring("propetry Video")] HRESULT Video([in] OUTPUT_STATE newVal);
+	[propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal);
+	[propput, id(3), helpstring("propetry Audio")] HRESULT Audio([in] OUTPUT_STATE newVal);
+};
+
+[
+object,
+uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMultiMediaStream : IMultiMediaStream
+{
+	HRESULT Initialize(
+		[in] STREAM_TYPE StreamType,
+		[in] DWORD dwFlags,
+		[in] IGraphBuilder *pFilterGraph);
+
+	HRESULT GetFilterGraph(
+		[out] IGraphBuilder **ppGraphBuilder);
+
+	HRESULT GetFilter(
+		[out] IMediaStreamFilter **ppFilter);
+
+	HRESULT AddMediaStream(
+		[in] IUnknown *pStreamObject,
+		[in] const MSPID *PurposeId,
+		[in] DWORD dwFlags,
+		[out] IMediaStream **ppNewStream);
+
+	HRESULT OpenFile(
+		[in] LPCWSTR pszFileName,
+		[in] DWORD dwFlags);
+
+	HRESULT OpenMoniker(
+		[in] IBindCtx *pCtx,
+		[in] IMoniker *pMoniker,
+		[in] DWORD dwFlags);
+
+	HRESULT Render(
+		[in] DWORD dwFlags);
+}
+
+
+[
+object,
+uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMediaStream : IMediaStream
+{
+	HRESULT Initialize(
+		[in] IUnknown *pSourceObject,
+		[in] DWORD dwFlags,
+		[in] REFMSPID PurposeId,
+		[in] const STREAM_TYPE StreamType);
+
+	HRESULT SetState(
+		[in] FILTER_STATE State);
+
+	HRESULT JoinAMMultiMediaStream(
+		[in] IAMMultiMediaStream *pAMMultiMediaStream);
+
+	HRESULT JoinFilter(
+		[in] IMediaStreamFilter *pMediaStreamFilter);
+
+	HRESULT JoinFilterGraph(
+		[in] IFilterGraph *pFilterGraph);
+}
+
+
+[
+object,
+local,
+uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMediaStreamFilter : IBaseFilter
+{
+	HRESULT AddMediaStream(
+		[in] IAMMediaStream *pAMMediaStream);
+
+	HRESULT GetMediaStream(
+		[in] REFMSPID idPurpose,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT EnumMediaStreams(
+		[in] long Index,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT SupportSeeking(
+		[in] BOOL bRenderer);
+
+	HRESULT ReferenceTimeToStreamTime(
+		[in] [out] REFERENCE_TIME *pTime);
+
+	HRESULT GetCurrentStreamTime(
+		[out] REFERENCE_TIME *pCurrentStreamTime);
+
+	HRESULT WaitUntil(
+		[in]  REFERENCE_TIME WaitStreamTime);
+
+	HRESULT Flush(
+		[in] BOOL bCancelEOS);
+
+	HRESULT EndOfStream();
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaSampleAllocator : IUnknown
+{
+	HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw);
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaSample : IUnknown
+{
+	HRESULT GetSurfaceAndReleaseLock(
+		[out] IDirectDrawSurface **ppDirectDrawSurface,
+		[out] RECT * pRect);
+
+	HRESULT LockMediaSamplePointer(void);
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+
+interface IAMMediaTypeStream : IMediaStream
+{
+	HRESULT GetFormat(
+		[out] AM_MEDIA_TYPE * pMediaType,
+		[in] DWORD dwFlags);
+
+	HRESULT SetFormat(
+		[in] AM_MEDIA_TYPE * pMediaType,
+		[in] DWORD dwFlags);
+
+	HRESULT CreateSample(
+		[in] long lSampleSize,
+		[in] BYTE * pbBuffer,
+		[in] DWORD dwFlags,
+		[in] IUnknown *pUnkOuter,
+		[out] IAMMediaTypeSample ** ppAMMediaTypeSample);
+
+	HRESULT GetStreamAllocatorRequirements(
+		[out] ALLOCATOR_PROPERTIES *pProps);
+
+	HRESULT SetStreamAllocatorRequirements(
+		[in] ALLOCATOR_PROPERTIES *pProps);
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMediaTypeSample : IStreamSample
+{
+	HRESULT SetPointer(
+		[in] BYTE *pBuffer,
+		[in] long lSize);
+
+	HRESULT GetPointer(
+		[out] BYTE ** ppBuffer);
+
+	long GetSize(void);
+
+	HRESULT GetTime(
+		[out] REFERENCE_TIME * pTimeStart,
+		[out] REFERENCE_TIME * pTimeEnd);
+
+	HRESULT SetTime(
+		[in] REFERENCE_TIME * pTimeStart,
+		[in] REFERENCE_TIME * pTimeEnd);
+
+	HRESULT IsSyncPoint(void);
+
+	HRESULT SetSyncPoint(
+		BOOL bIsSyncPoint);
+
+	HRESULT IsPreroll(void);
+
+	HRESULT SetPreroll(
+		BOOL bIsPreroll);
+
+	long GetActualDataLength(void);
+
+	HRESULT SetActualDataLength(long Len);
+
+	HRESULT GetMediaType(
+		AM_MEDIA_TYPE **ppMediaType);
+
+	HRESULT SetMediaType(
+		AM_MEDIA_TYPE *pMediaType);
+
+	HRESULT IsDiscontinuity(void);
+
+	HRESULT SetDiscontinuity(
+		BOOL bDiscontinuity);
+
+	HRESULT GetMediaTime(
+		[out] LONGLONG * pTimeStart,
+		[out] LONGLONG * pTimeEnd);
+
+	HRESULT SetMediaTime(
+		[in] LONGLONG * pTimeStart,
+		[in] LONGLONG * pTimeEnd);
+}
+
+[
+    uuid(49C47CE5-9BA4-11d0-8212-00C04FC32C45)
+]
+coclass AMMultiMediaStream
+{
+    [default] dispinterface IDirectShowStream;
+}
+
+cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream,  0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMAudioStream,       0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMAudioData,         0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream,   0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+cpp_quote("DEFINE_GUID(CLSID_MediaStreamFilter,   0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl
new file mode 100644
index 0000000..547025f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+/* trick widl into thinking that it knows the DirectDraw types 
+ * as there is no IDL file for them (yet) */
+cpp_quote("#if 0")
+interface IDirectDraw;
+typedef void DDSURFACEDESC,DDCAPS;
+typedef DWORD RGBQUAD;
+typedef LONGLONG REFERENCE_TIME;
+typedef struct
+{
+    DWORD 	biSize;
+    LONG  	biWidth;
+    LONG  	biHeight;
+    WORD 	biPlanes;
+    WORD 	biBitCount;
+    DWORD 	biCompression;
+    DWORD 	biSizeImage;
+    LONG  	biXPelsPerMeter;
+    LONG  	biYPelsPerMeter;
+    DWORD 	biClrUsed;
+    DWORD 	biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;
+cpp_quote("#endif")
+
+cpp_quote("#include <ddraw.h>")
+
+cpp_quote("#define AMDDS_NONE 0x00")
+cpp_quote("#define AMDDS_DCIPS 0x01")
+cpp_quote("#define AMDDS_PS 0x02")
+cpp_quote("#define AMDDS_RGBOVR 0x04")
+cpp_quote("#define AMDDS_YUVOVR 0x08")
+cpp_quote("#define AMDDS_RGBOFF 0x10")
+cpp_quote("#define AMDDS_YUVOFF 0x20")
+cpp_quote("#define AMDDS_RGBFLP 0x40")
+cpp_quote("#define AMDDS_YUVFLP 0x80")
+cpp_quote("#define AMDDS_ALL 0xFF")
+cpp_quote("#define AMDDS_DEFAULT AMDDS_ALL")
+
+cpp_quote("#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)")
+cpp_quote("#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)")
+cpp_quote("#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)")
+
+[
+    object,
+    /* uuid(36d39eb0-dd75-11ce-bf0e-00aa0055595a)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IDirectDrawVideo : IUnknown
+{
+    HRESULT GetSwitches([out] DWORD * pSwitches);
+    HRESULT SetSwitches([in] DWORD Switches);
+    HRESULT GetCaps([out] DDCAPS * pCaps);
+    HRESULT GetEmulatedCaps([out] DDCAPS *pCaps);
+    HRESULT GetSurfaceDesc([out] DDSURFACEDESC * pSurfaceDesc);
+    HRESULT GetFourCCCodes([out] DWORD * pCount, [out] DWORD * pCodes);
+    HRESULT SetDirectDraw([in] IDirectDraw *ddraw);
+    HRESULT GetDirectDraw([out] IDirectDraw **ddraw);
+    HRESULT GetSurfaceType([out] DWORD * pSurfaceType);
+    HRESULT SetDefault();
+    HRESULT UseScanLine([in] long UseScanLine);
+    HRESULT CanUseScanLine([out] long * UseScanLine);
+    HRESULT UseOverlayStretch([in] long UseOverlayStretch);
+    HRESULT CanUseOverlayStretch([out] long * UseOverlayStretch);
+    HRESULT UseWhenFullScreen([in] long UseWhenFullScreen);
+    HRESULT WillUseFullScreen([out] long * UseWhenFullScreen);
+}
+
+[
+    object,
+    /* uuid(1bd0ecb0-f8e2-11ce-aac6-0020af0b99a3)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IQualProp : IUnknown
+{
+    [propget] HRESULT FramesDroppedInRenderer([out] int * pcFrames);
+    [propget] HRESULT FramesDrawn([out] int * pcFramesDrawn);
+    [propget] HRESULT AvgFrameRate([out] int * piAvgFrameRate);
+    [propget] HRESULT Jitter([out] int * iJitter);
+    [propget] HRESULT AvgSyncOffset([out] int * piAvg);
+    [propget] HRESULT DevSyncOffset([out] int * piDev);
+}
+
+[
+    object,
+    /* uuid(dd1d7110-7836-11cf-bf47-00aa0055595a)  conflicts with uuids.h */
+    pointer_default(unique)
+]
+interface IFullScreenVideo : IUnknown
+{
+    HRESULT CountModes([out] long * pModes);
+    HRESULT GetModeInfo([in] long Mode, [out] long * pWidth, [out] long * pHeight, [out] long * pDepth);
+    HRESULT GetCurrentMode([out] long * pMode);
+    HRESULT IsModeAvailable([in] long Mode);
+    HRESULT IsModeEnabled([in] long Mode);
+    HRESULT SetEnabled([in] long Mode, [in] long bEnabled);
+    HRESULT GetClipFactor([out] long * pClipFactor);
+    HRESULT SetClipFactor([in] long ClipFactor);
+    HRESULT SetMessageDrain([in] HWND hwnd);
+    HRESULT GetMessageDrain([out] HWND * hwnd);
+    HRESULT SetMonitor([in] long Monitor);
+    HRESULT GetMonitor([out] long * Monitor);
+    HRESULT HideOnDeactivate([in] long Hide);
+    HRESULT IsHideOnDeactivate();
+    HRESULT SetCaption([in] BSTR strCaption);
+    HRESULT GetCaption([out] BSTR * pstrCaption);
+    HRESULT SetDefault();
+}
+
+[
+    object,
+    /* uuid(53479470-f1dd-11cf-bc42-00aa00ac74f6)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IFullScreenVideoEx : IFullScreenVideo
+{
+    HRESULT SetAcceleratorTable([in] HWND hwnd, [in] HACCEL hAccel);
+    HRESULT GetAcceleratorTable([out] HWND * phwnd, [out] HACCEL * phAccel);
+    HRESULT KeepPixelAspectRatio([in] long KeepAspect);
+    /* FIXME: not sure is this next method is an [out] */
+    HRESULT IsKeepPixelAspectRatio([out] long * pKeepAspect);
+}
+
+[
+    object,
+    /* uuid(61ded640-e912-11ce-a099-00aa00479a58)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IBaseVideoMixer : IUnknown
+{
+    HRESULT SetLeadPin([in] int iPin);
+    HRESULT GetLeadPin([out] int * piPin);
+    HRESULT GetInputPinCount([out] int * piPinCount);
+    HRESULT IsUsingClock([out] int * pbValue);
+    HRESULT SetUsingClock([in] int bValue);
+    HRESULT GetClockPeriod([out] int * pbValue);
+    HRESULT SetClockPeriod([in] int bValue);
+}
+
+#define iPALETTE_COLORS 256
+#define iMASK_COLORS 3
+
+cpp_quote("#define iPALETTE_COLORS 256")
+cpp_quote("#define iEGA_COLORS 16")
+cpp_quote("#define iMASK_COLORS 3")
+cpp_quote("#define iTRUECOLOR 16")
+cpp_quote("#define iRED 0")
+cpp_quote("#define iGREEN 1")
+cpp_quote("#define iBLUE 2")
+cpp_quote("#define iPALETTE 8")
+cpp_quote("#define iMAXBITS 8")
+
+typedef struct tag_TRUECOLORINFO
+{
+    DWORD dwBitMasks[iMASK_COLORS];
+    RGBQUAD bmiColors[iPALETTE_COLORS];
+} TRUECOLORINFO;
+
+typedef struct tagVIDEOINFOHEADER
+{
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+
+    BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER;
+
+typedef struct tagVIDEOINFO
+{
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+
+    BITMAPINFOHEADER bmiHeader;
+
+    union
+    {
+        RGBQUAD bmiColors[iPALETTE_COLORS];
+        DWORD dwBitMasks[iMASK_COLORS];
+        TRUECOLORINFO TrueColorInfo;
+    };
+} VIDEOINFO;
+
+typedef struct tagMPEG1VIDEOINFO
+{
+    VIDEOINFOHEADER hdr;
+    DWORD dwStartTimeCode;
+    DWORD cbSequenceHeader;
+    BYTE bSequenceHeader[1];
+} MPEG1VIDEOINFO;
+
+cpp_quote("#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140")
+cpp_quote("#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)")
+
+typedef struct tagAnalogVideoInfo
+{
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwActiveWidth;
+    DWORD dwActiveHeight;
+    REFERENCE_TIME AvgTimePerFrame;
+} ANALOGVIDEOINFO;
+
+typedef enum
+{
+    AM_PROPERTY_FRAMESTEP_STEP = 0x01,
+    AM_PROPERTY_FRAMESTEP_CANCEL = 0x02,
+    AM_PROPERTY_FRAMESTEP_CANSTEP = 0x03,
+    AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x04
+} AM_PROPERTY_FRAMESTEP;
+
+typedef struct _AM_FRAMESTEP_STEP
+{
+    DWORD dwFramesToStep;
+} AM_FRAMESTEP_STEP;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h
new file mode 100644
index 0000000..3cbe6e5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012 Detlef Riekenberg
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __APPCOMPAT_H
+#define __APPCOMPAT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI ApphelpCheckShellObject(REFCLSID, BOOL, ULONGLONG *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __APPCOMPAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h
new file mode 100644
index 0000000..c018a0e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _APPMGMT_H
+#define _APPMGMT_H
+
+typedef struct _MANAGEDAPPLICATION
+{
+    LPWSTR pszPackageName;
+    LPWSTR pszPublisher;
+    DWORD dwVersionHi;
+    DWORD dwVersionLo;
+    DWORD dwRevision;
+    GUID GpoId;
+    LPWSTR pszPolicyName;
+    GUID ProductId;
+    LANGID Language;
+    LPWSTR pszOwner;
+    LPWSTR pszCompany;
+    LPWSTR pszComments;
+    LPWSTR pszContact;
+    LPWSTR pszSupportUrl;
+    DWORD dwPathType;
+    BOOL bInstalled;
+} MANAGEDAPPLICATION, *PMANAGEDAPPLICATION;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI CommandLineFromMsiDescriptor(WCHAR*,WCHAR*,DWORD*);
+DWORD WINAPI GetManagedApplications(GUID*,DWORD,DWORD,LPDWORD,PMANAGEDAPPLICATION*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _APPMGMT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl
new file mode 100644
index 0000000..ed7a4f4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+[
+    object,
+    dual,
+    uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)
+]
+interface IRequestDictionary : IDispatch
+{
+    [propget]
+    HRESULT Item(IRequestDictionary *iface, [in, optional] VARIANT Var,
+        [retval, out] VARIANT *pVariantReturn);
+
+    [restricted, propget]
+    HRESULT _NewEnum(IRequestDictionary *iface, [retval, out] IUnknown **ppEnumReturn);
+
+    [propget]
+    HRESULT Count(IRequestDictionary *iface, [retval, out] int *cStrRet);
+
+    [propget]
+    HRESULT Key(IRequestDictionary *iface, [in] VARIANT VarKey, [retval, out]VARIANT *pvar);
+};
+
+[
+    object,
+    dual,
+    uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)
+]
+interface IResponse : IDispatch
+{
+    [propget]
+    HRESULT Buffer(IResponse *iface, [retval, out] VARIANT_BOOL *fIsBuffering);
+
+    [propput]
+    HRESULT Buffer(IResponse *iface, [in] VARIANT_BOOL fIsBuffering);
+
+    [propget]
+    HRESULT ContentType(IResponse *iface, [retval, out] BSTR *pbstrContentTypeRet);
+
+    [propput]
+    HRESULT ContentType(IResponse *iface, [in] BSTR bstrContentType);
+
+    [propget]
+    HRESULT Expires(IResponse *iface, [retval, out] VARIANT *pvarExpiresMinutesRet);
+
+    [propput]
+    HRESULT Expires(IResponse *iface, [in] long lExpiresMinutes);
+
+    [propget]
+    HRESULT ExpiresAbsolute(IResponse *iface, [retval, out] VARIANT *pvarExpiresRet);
+
+    [propput]
+    HRESULT ExpiresAbsolute(IResponse *iface, [in] DATE dtExpires);
+
+    [propget]
+    HRESULT Cookies(IResponse *iface, [retval, out] IRequestDictionary **ppCookies);
+
+    [propget]
+    HRESULT Status(IResponse *iface, [retval][out] BSTR *pbstrStatusRet);
+
+    [propput]
+    HRESULT Status(IResponse *iface, [in] BSTR bstrStatus);
+
+    [hidden]
+    HRESULT Add(IResponse *iface, [in] BSTR bstrHeaderValue, [in] BSTR bstrHeaderName);
+
+    HRESULT AddHeader(IResponse *iface, [in] BSTR bstrHeaderName, [in] BSTR bstrHeaderValue);
+
+    HRESULT AppendToLog(IResponse *iface, [in] BSTR bstrLogEntry);
+
+    HRESULT BinaryWrite(IResponse *iface, [in] VARIANT varInput);
+
+    HRESULT Clear(IResponse *iface);
+
+    HRESULT End(IResponse *iface);
+
+    HRESULT Flush(IResponse *iface);
+
+    HRESULT Redirect(IResponse *iface, [in] BSTR bstrURL);
+
+    HRESULT Write(IResponse *iface, [in] VARIANT varText);
+
+    [hidden]
+    HRESULT WriteBlock(IResponse *iface, [in] short iBlockNumber);
+
+    HRESULT IsClientConnected(IResponse *iface, [retval, out] VARIANT_BOOL *pfIsClientConnected);
+
+    [propget]
+    HRESULT get_CharSet( IResponse *iface, [retval, out] BSTR *pbstrCharSetRet);
+
+    [propput]
+    HRESULT put_CharSet(IResponse *iface, [in] BSTR bstrCharSet);
+
+    HRESULT Pics(IResponse *iface, [in] BSTR bstrHeaderValue);
+
+    [propget]
+    HRESULT get_CacheControl(IResponse *iface, [retval, out] BSTR *pbstrCacheControl);
+
+    [propput]
+    HRESULT put_CacheControl(IResponse *iface, [in] BSTR bstrCacheControl);
+
+    [propget]
+    HRESULT get_CodePage(IResponse *iface, [retval, out] long *plvar);
+
+    [propput]
+    HRESULT put_CodePage(IResponse *iface, [in] long lvar);
+
+    [propget]
+    HRESULT get_LCID(IResponse *iface, [retval, out] long *plvar);
+
+    [propput]
+    HRESULT put_LCID(IResponse *iface, [in] long lvar);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl
new file mode 100644
index 0000000..c97c3c5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a96-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBAsynchNotify : IUnknown
+{
+    [local]
+    HRESULT OnLowResource([in] DB_DWRESERVE dwReserved);
+
+    [call_as(OnLowResource)]
+    HRESULT RemoteOnLowResource([in] DB_DWRESERVE dwReserved);
+
+    [local]
+    HRESULT OnProgress([in] HCHAPTER hChapter,
+                       [in] DBASYNCHOP eOperation,
+                       [in] DBCOUNTITEM ulProgress,
+                       [in] DBCOUNTITEM ulProgressMax,
+                       [in] DBASYNCHPHASE eAsynchPhase,
+                       [in, annotation("__in_opt")] LPOLESTR pwszStatusText);
+
+    [call_as(OnProgress)]
+    HRESULT RemoteOnProgress([in] HCHAPTER hChapter,
+                             [in] DBASYNCHOP eOperation,
+                             [in] DBCOUNTITEM ulProgress,
+                             [in] DBCOUNTITEM ulProgressMax,
+                             [in] DBASYNCHPHASE eAsynchPhase,
+                             [in, unique, string] LPOLESTR pwszStatusText);
+
+    [local]
+    HRESULT OnStop([in] HCHAPTER hChapter,
+                   [in] DBASYNCHOP eOperation,
+                   [in] HRESULT hrStatus,
+                   [in, annotation("__in_opt")] LPOLESTR pwszStatusText);
+
+    [call_as(OnStop)]
+    HRESULT RemoteOnStop([in] HCHAPTER hChapter,
+                         [in] DBASYNCHOP eOperation,
+                         [in] HRESULT hrStatus,
+                         [in, unique, string] LPOLESTR pwszStatusText);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl
new file mode 100644
index 0000000..70d3d81
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a95-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBAsynchStatus : IUnknown
+{
+    [local]
+    HRESULT Abort([in] HCHAPTER hChapter,
+                  [in] DBASYNCHOP eOperation);
+
+    [call_as(Abort)]
+    HRESULT RemoteAbort([in] HCHAPTER hChapter,
+                        [in] DBASYNCHOP eOperation,
+                        [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetStatus([in] HCHAPTER hChapter,
+                      [in] DBASYNCHOP eOperation,
+                      [out, annotation("__out_opt")] DBCOUNTITEM *pulProgress,
+                      [out, annotation("__out_opt")] DBCOUNTITEM *pulProgressMax,
+                      [out, annotation("__out")] DBASYNCHPHASE *peAsynchPhase,
+                      [out, annotation("__deref_opt_inout_opt")] LPOLESTR *ppwszStatusText);
+
+    [call_as(GetStatus)]
+    HRESULT RemoteGetStatus([in] HCHAPTER hChapter,
+                            [in] DBASYNCHOP eOperation,
+                            [in, out, unique] DBCOUNTITEM *pulProgress,
+                            [in, out, unique] DBCOUNTITEM *pulProgressMax,
+                            [in, out, unique] DBASYNCHPHASE *peAsynchPhase,
+                            [in, out, unique] LPOLESTR *ppwszStatusText,
+                            [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h
new file mode 100644
index 0000000..24d6eb8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h
@@ -0,0 +1,275 @@
+/*
+ * Implementation of the Active Template Library (atl.dll)
+ *
+ * Copyright 2004 Aric Stewart 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ATLBASE_H__
+#define __WINE_ATLBASE_H__
+
+#include <atliface.h>
+#include <comcat.h>
+
+/* Wine extension: we (ab)use _ATL_VER to handle struct layout differences between ATL versions. */
+#define _ATL_VER_30  0x0300
+#define _ATL_VER_70  0x0700
+#define _ATL_VER_80  0x0800
+#define _ATL_VER_100 0x0a00
+#define _ATL_VER_110 0x0b00
+
+#ifndef _ATL_VER
+#define _ATL_VER _ATL_VER_100
+#endif
+
+typedef HRESULT (WINAPI _ATL_CREATORFUNC)(void* pv, REFIID riid, LPVOID* ppv);
+typedef HRESULT (WINAPI _ATL_CREATORARGFUNC)(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);
+typedef HRESULT (WINAPI _ATL_MODULEFUNC)(DWORD dw);
+typedef LPCSTR (WINAPI _ATL_DESCRIPTIONFUNCA)(void);
+typedef LPCWSTR (WINAPI _ATL_DESCRIPTIONFUNCW)(void);
+typedef const struct _ATL_CATMAP_ENTRY* (_ATL_CATMAPFUNC)(void);
+typedef void (WINAPI _ATL_TERMFUNC)(DWORD dw);
+
+typedef CRITICAL_SECTION CComCriticalSection;
+
+typedef struct _ATL_OBJMAP_ENTRYA_V1_TAG
+{
+    const CLSID* pclsid;
+    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+    _ATL_CREATORFUNC* pfnGetClassObject;
+    _ATL_CREATORFUNC* pfnCreateInstance;
+    IUnknown* pCF;
+    DWORD dwRegister;
+    _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;
+}_ATL_OBJMAP_ENTRYA_V1;
+
+typedef struct _ATL_OBJMAP_ENTRYW_V1_TAG
+{
+    const CLSID* pclsid;
+    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+    _ATL_CREATORFUNC* pfnGetClassObject;
+    _ATL_CREATORFUNC* pfnCreateInstance;
+    IUnknown* pCF;
+    DWORD dwRegister;
+    _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;
+} _ATL_OBJMAP_ENTRYW_V1;
+
+typedef struct _ATL_OBJMAP_ENTRYA_TAG
+{
+    const CLSID* pclsid;
+    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+    _ATL_CREATORFUNC* pfnGetClassObject;
+    _ATL_CREATORFUNC* pfnCreateInstance;
+    IUnknown* pCF;
+    DWORD dwRegister;
+    _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;
+    _ATL_CATMAPFUNC* pfnGetCategoryMap;
+    void (WINAPI *pfnObjectMain)(BOOL bStarting);
+}_ATL_OBJMAP_ENTRYA;
+
+typedef struct _ATL_OBJMAP_ENTRYW_TAG
+{
+    const CLSID* pclsid;
+    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+    _ATL_CREATORFUNC* pfnGetClassObject;
+    _ATL_CREATORFUNC* pfnCreateInstance;
+    IUnknown* pCF;
+    DWORD dwRegister;
+    _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;
+    _ATL_CATMAPFUNC* pfnGetCategoryMap;
+    void (WINAPI *pfnObjectMain)(BOOL bStarting);
+} _ATL_OBJMAP_ENTRYW, _ATL_OBJMAP_ENTRY30, _ATL_OBJMAP_ENTRY;
+
+
+typedef struct _ATL_TERMFUNC_ELEM_TAG
+{
+    _ATL_TERMFUNC* pFunc;
+    DWORD_PTR dw;
+    struct _ATL_TERMFUNC_ELEM_TAG* pNext;
+} _ATL_TERMFUNC_ELEM;
+
+typedef struct _AtlCreateWndData_TAG
+{
+    void* m_pThis;
+    DWORD m_dwThreadID;
+    struct _AtlCreateWndData_TAG* m_pNext;
+} _AtlCreateWndData;
+
+typedef struct _ATL_MODULEA_TAG
+{
+    UINT cbSize;
+    HINSTANCE m_hInst;
+    HINSTANCE m_hInstResource;
+    HINSTANCE m_hInstTypeLib;
+    _ATL_OBJMAP_ENTRYA* m_pObjMap;
+    LONG m_nLockCnt;
+    HANDLE m_hHeap;
+    union
+    {
+        CRITICAL_SECTION m_csTypeInfoHolder;
+        CRITICAL_SECTION m_csStaticDataInit;
+    } u;
+    CRITICAL_SECTION m_csWindowCreate;
+    CRITICAL_SECTION m_csObjMap;
+
+    DWORD dwAtlBuildVer;
+    _AtlCreateWndData* m_pCreateWndList;
+    BOOL m_bDestroyHeap;
+    GUID* pguidVer;
+    DWORD m_dwHeaps;
+    HANDLE* m_phHeaps;
+    int m_nHeap;
+    _ATL_TERMFUNC_ELEM* m_pTermFuncs;
+} _ATL_MODULEA;
+
+typedef struct _ATL_MODULEW_TAG
+{
+    UINT cbSize;
+    HINSTANCE m_hInst;
+    HINSTANCE m_hInstResource;
+    HINSTANCE m_hInstTypeLib;
+    _ATL_OBJMAP_ENTRYW* m_pObjMap;
+    LONG m_nLockCnt;
+    HANDLE m_hHeap;
+    union
+    {
+        CRITICAL_SECTION m_csTypeInfoHolder;
+        CRITICAL_SECTION m_csStaticDataInit;
+    } u;
+    CRITICAL_SECTION m_csWindowCreate;
+    CRITICAL_SECTION m_csObjMap;
+
+    DWORD dwAtlBuildVer;
+    _AtlCreateWndData* m_pCreateWndList;
+    BOOL m_bDestroyHeap;
+    GUID* pguidVer;
+    DWORD m_dwHeaps;
+    HANDLE* m_phHeaps;
+    int m_nHeap;
+    _ATL_TERMFUNC_ELEM* m_pTermFuncs;
+} _ATL_MODULEW;
+
+typedef struct
+{
+    void *m_aT;
+    int m_nSize;
+    int m_nAllocSize;
+} CSimpleArray;
+
+typedef struct _ATL_MODULE70
+{
+    UINT cbSize;
+    LONG m_nLockCnt;
+    _ATL_TERMFUNC_ELEM *m_pTermFuncs;
+    CComCriticalSection m_csStaticDataInitAndTypeInfo;
+} _ATL_MODULE70;
+
+typedef struct _ATL_WIN_MODULE70
+{
+    UINT cbSize;
+    CComCriticalSection m_csWindowCreate;
+    _AtlCreateWndData *m_pCreateWndList;
+    CSimpleArray /* <ATOM> */ m_rgWindowClassAtoms;
+} _ATL_WIN_MODULE70;
+
+typedef struct _ATL_COM_MODULE70
+{
+    UINT cbSize;
+    HINSTANCE m_hInstTypeLib;
+    _ATL_OBJMAP_ENTRY **m_ppAutoObjMapFirst;
+    _ATL_OBJMAP_ENTRY **m_ppAutoObjMapLast;
+    CComCriticalSection m_csObjMap;
+} _ATL_COM_MODULE70, _ATL_COM_MODULE;
+
+#if _ATL_VER >= _ATL_VER_70
+typedef _ATL_MODULE70 _ATL_MODULE;
+typedef _ATL_WIN_MODULE70 _ATL_WIN_MODULE;
+#else
+typedef _ATL_MODULEW _ATL_MODULE;
+typedef _ATL_MODULEW _ATL_WIN_MODULE;
+#endif
+
+typedef struct _ATL_INTMAP_ENTRY_TAG
+{
+    const IID* piid;
+    DWORD dw;
+    _ATL_CREATORARGFUNC* pFunc;
+} _ATL_INTMAP_ENTRY;
+
+struct _ATL_REGMAP_ENTRY
+{
+    LPCOLESTR szKey;
+    LPCOLESTR szData;
+};
+
+struct _ATL_CATMAP_ENTRY
+{
+    int iType;
+    const CATID *pcatid;
+};
+
+#define _ATL_CATMAP_ENTRY_END 0
+#define _ATL_CATMAP_ENTRY_IMPLEMENTED 1
+#define _ATL_CATMAP_ENTRY_REQUIRED 2
+
+HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID * iid, LPDWORD dpw);
+HRESULT WINAPI AtlAxAttachControl(IUnknown*,HWND,IUnknown**);
+HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);
+HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);
+HRESULT WINAPI AtlFreeMarshalStream(IStream *pStream);
+HRESULT WINAPI AtlInternalQueryInterface(void* pThis, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, void** ppvObject);
+HRESULT WINAPI AtlMarshalPtrInProc(IUnknown *pUnk, const IID *iid, IStream **ppStream);
+void    WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, void* pvObject);
+HRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE*);
+void    WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE*,_AtlCreateWndData*,void*);
+void*   WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE*);
+HRESULT WINAPI AtlModuleAddTermFunc(_ATL_MODULE *pM, _ATL_TERMFUNC *pFunc, DWORD_PTR dw);
+void WINAPI AtlCallTermFunc(_ATL_MODULE*);
+void*  WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM);
+HRESULT WINAPI AtlModuleInit(_ATL_MODULEW* pM, _ATL_OBJMAP_ENTRYW* p, HINSTANCE h);
+HRESULT WINAPI AtlModuleLoadTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex, BSTR *pbstrPath, ITypeLib **ppTypeLib);
+HRESULT WINAPI AtlModuleRegisterClassObjects(_ATL_MODULEW* pM, DWORD dwClsContext, DWORD dwFlags);
+HRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* pCLSID);
+HRESULT WINAPI AtlModuleRegisterTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex);
+HRESULT WINAPI AtlModuleUnregisterServer(_ATL_MODULEW* pM, const CLSID* pCLSID);
+HRESULT WINAPI AtlModuleUpdateRegistryFromResourceD(_ATL_MODULEW *pM, LPCOLESTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg );
+HRESULT WINAPI AtlModuleUnregisterServerEx(_ATL_MODULEW* pM, BOOL bUnRegTypeLib, const CLSID* pCLSID);
+HRESULT WINAPI AtlModuleTerm(_ATL_MODULEW* pM);
+HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID * iid, DWORD dw);
+HRESULT WINAPI AtlUnmarshalPtr(IStream *pStream, const IID *iid, IUnknown **ppUnk);
+HRESULT WINAPI AtlCreateRegistrar(IRegistrar**);
+HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE,LPCOLESTR,BOOL,struct _ATL_REGMAP_ENTRY*,IRegistrar*);
+HRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**);
+HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR);
+HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL);
+HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**);
+HRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE*,DWORD,DWORD);
+HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE*,BOOL,const CLSID*);
+BOOL WINAPI AtlWaitWithMessageLoop(HANDLE);
+HRESULT WINAPI AtlGetObjectSourceInterface(IUnknown*,GUID*,IID*,unsigned short*,unsigned short*);
+HRESULT WINAPI AtlSetPerUserRegistration(unsigned char /*bool*/);
+HRESULT WINAPI AtlGetPerUserRegistration(unsigned char /*bool*/ *);
+
+#endif /* __WINE_ATLBASE_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl
new file mode 100644
index 0000000..60e12ba
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+
+cpp_quote("#ifdef ATL_INITGUID")
+cpp_quote("#include <initguid.h>")
+cpp_quote("#endif")
+
+[
+    object,
+    uuid(e21f8a85-b05d-4243-8183-c7cb405588f7),
+    pointer_default(unique)
+]
+interface IRegistrarBase : IUnknown
+{
+    HRESULT AddReplacement(
+        [in] LPCOLESTR Key,
+        [in] LPCOLESTR item);
+
+    HRESULT ClearReplacements();
+}
+
+[
+    object,
+    uuid(44EC053B-400F-11D0-9DCD-00A0C90391D3),
+    pointer_default(unique)
+]
+interface IRegistrar : IRegistrarBase
+{
+    HRESULT ResourceRegisterSz(
+        [in] LPCOLESTR resFileName,
+        [in] LPCOLESTR szID,
+        [in] LPCOLESTR szType);
+
+    HRESULT ResourceUnregisterSz(
+        [in] LPCOLESTR resFileName,
+        [in] LPCOLESTR szID,
+        [in] LPCOLESTR szType);
+
+    HRESULT FileRegister(
+        [in] LPCOLESTR fileName);
+
+    HRESULT FileUnregister(
+        [in] LPCOLESTR fileName);
+
+    HRESULT StringRegister(
+        [in] LPCOLESTR data);
+
+    HRESULT StringUnregister(
+        [in] LPCOLESTR data);
+
+    HRESULT ResourceRegister(
+        [in] LPCOLESTR resFileName,
+        [in] UINT nID,
+        [in] LPCOLESTR szType);
+
+    HRESULT ResourceUnregister(
+        [in] LPCOLESTR resFileName,
+        [in] UINT nID,
+        [in] LPCOLESTR szType);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_Registrar,0x44ec053a,0x400f,0x11d0,0x9d,0xcd,0x00,0xa0,0xc9,0x03,0x91,0xd3);")
+
+cpp_quote("HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);")
+cpp_quote("HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);")
+cpp_quote("BOOL WINAPI AtlAxWinInit(void);")
+
+cpp_quote("HWND WINAPI AtlAxCreateDialogW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);")
+cpp_quote("HWND WINAPI AtlAxCreateDialogA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);")
+cpp_quote("#define     AtlAxCreateDialog WINELIB_NAME_AW(AtlAxCreateDialog)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h
new file mode 100644
index 0000000..ce36640
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h
@@ -0,0 +1,62 @@
+/*
+ * Active Template Library Window Functions
+ *
+ * Copyright 2006 Robert Shearman 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ATLWIN_H__
+#define __WINE_ATLWIN_H__
+
+typedef struct _ATL_WNDCLASSINFOA_TAG
+{
+    WNDCLASSEXA m_wc;
+    LPCSTR m_lpszOrigName;
+    WNDPROC pWndProc;
+    LPCSTR m_lpszCursorID;
+    BOOL m_bSystemCursor;
+    ATOM m_atom;
+    CHAR m_szAutoName[14];
+} _ATL_WNDCLASSINFOA;
+
+typedef struct _ATL_WNDCLASSINFOW_TAG
+{
+    WNDCLASSEXW m_wc;
+    LPCWSTR m_lpszOrigName;
+    WNDPROC pWndProc;
+    LPCWSTR m_lpszCursorID;
+    BOOL m_bSystemCursor;
+    ATOM m_atom;
+    WCHAR m_szAutoName[14];
+} _ATL_WNDCLASSINFOW;
+
+ATOM WINAPI AtlModuleRegisterWndClassInfoA(_ATL_MODULEA *pm, _ATL_WNDCLASSINFOA *wci, WNDPROC *pProc);
+ATOM WINAPI AtlModuleRegisterWndClassInfoW(_ATL_MODULEW *pm, _ATL_WNDCLASSINFOW *wci, WNDPROC *pProc);
+
+HDC WINAPI AtlCreateTargetDC(HDC hdc, DVTARGETDEVICE *ptd);
+void WINAPI AtlHiMetricToPixel(const SIZEL *lpSizeInHiMetric, LPSIZEL lpSizeInPix);
+void WINAPI AtlPixelToHiMetric(const SIZEL *lpSizeInPix, LPSIZEL lpSizeInHiMetric);
+
+#endif /* __WINE_ATLWIN_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h
new file mode 100644
index 0000000..03e9535
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __AUDEVCOD__
+#define __AUDEVCOD__
+
+typedef enum _tagSND_DEVICE_ERROR
+{
+    SNDDEV_ERROR_Open=1,
+    SNDDEV_ERROR_Close=2,
+    SNDDEV_ERROR_GetCaps=3,
+    SNDDEV_ERROR_PrepareHeader=4,
+    SNDDEV_ERROR_UnprepareHeader=5,
+    SNDDEV_ERROR_Reset=6,
+    SNDDEV_ERROR_Restart=7,
+    SNDDEV_ERROR_GetPosition=8,
+    SNDDEV_ERROR_Write=9,
+    SNDDEV_ERROR_Pause=10,
+    SNDDEV_ERROR_Stop=11,
+    SNDDEV_ERROR_Start=12,
+    SNDDEV_ERROR_AddBuffer=13,
+    SNDDEV_ERROR_Query=14
+} SNDDEV_ERR;
+
+#define EC_SND_DEVICE_ERROR_BASE 0x0200
+#define EC_SNDDEV_IN_ERROR       (EC_SND_DEVICE_ERROR_BASE+0x00)
+#define EC_SNDDEV_OUT_ERROR      (EC_SND_DEVICE_ERROR_BASE+0x01)
+
+#endif  /* __AUDEVCOD__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl
new file mode 100644
index 0000000..6d9a6cb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl
@@ -0,0 +1,336 @@
+/*
+ * Core Audio audioclient definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "unknwn.idl";
+import "audiosessiontypes.h";
+
+/* Forward declarations */
+interface IAudioClient;
+interface IAudioRenderClient;
+interface IAudioCaptureClient;
+interface IAudioClock;
+interface IAudioClock2;
+interface IAudioClockAdjustment;
+interface ISimpleAudioVolume;
+interface IAudioStreamVolume;
+interface IChannelAudioVolume;
+
+cpp_quote("#if 0")
+typedef struct WAVEFORMATEX /*[hidden,restricted]*/
+{
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+} WAVEFORMATEX;
+cpp_quote("#else")
+cpp_quote("#include <mmreg.h>")
+cpp_quote("#endif")
+
+cpp_quote("#if 0")
+typedef LONGLONG /*[hidden,restricted]*/ REFERENCE_TIME;
+cpp_quote("#else")
+cpp_quote("#define _IKsControl_")
+cpp_quote("#include <ks.h>")
+cpp_quote("#include <ksmedia.h>")
+cpp_quote("#endif")
+
+enum _AUDCLNT_BUFFERFLAGS
+{
+    AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1,
+    AUDCLNT_BUFFERFLAGS_SILENT = 0x2,
+    AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4
+};
+
+[
+    local,
+    pointer_default(unique),
+    uuid(1cb9ad4c-dbfa-4c32-b178-c2f568a703b2),
+    object,
+]
+interface IAudioClient : IUnknown
+{
+    HRESULT Initialize(
+        [in] AUDCLNT_SHAREMODE ShareMode,
+        [in] DWORD StreamFlags,
+        [in] REFERENCE_TIME hnsBufferDuration,
+        [in] REFERENCE_TIME hnsPeriodicity,
+        [in] const WAVEFORMATEX *pFormat,
+        [in] LPCGUID AudioSessionGuid
+    );
+    HRESULT GetBufferSize(
+        [out] UINT32 *pNumBufferFrames
+    );
+    HRESULT GetStreamLatency(
+        [out] REFERENCE_TIME *phnsLatency
+    );
+    HRESULT GetCurrentPadding(
+        [out] UINT32 *pNumPaddingFrames
+    );
+    HRESULT IsFormatSupported(
+        [in] AUDCLNT_SHAREMODE ShareMode,
+        [in] const WAVEFORMATEX *pFormat,
+        [out,unique] WAVEFORMATEX **ppClosestMatch
+    );
+    HRESULT GetMixFormat(
+        [out] WAVEFORMATEX **ppDeviceFormat
+    );
+    HRESULT GetDevicePeriod(
+        [out] REFERENCE_TIME *phnsDefaultDevicePeriod,
+        [out] REFERENCE_TIME *phnsMinimumDevicePeriod
+    );
+    HRESULT Start(void);
+    HRESULT Stop(void);
+    HRESULT Reset(void);
+    HRESULT SetEventHandle([in] HANDLE eventHandle);
+    HRESULT GetService(
+        [in] REFIID riid,
+        [iid_is(riid),out] void **ppv
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid(f294acfc-3146-4483-a7bf-addca7c260e2),
+    object,
+]
+interface IAudioRenderClient : IUnknown
+{
+    HRESULT GetBuffer(
+        [in] UINT32 NumFramesRequested,
+        [out] BYTE **ppData
+    );
+    HRESULT ReleaseBuffer(
+        [in] UINT32 NumFramesWritten,
+        [in] DWORD dwFlags
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid(c8adbd64-e71e-48a0-a4de-185c395cd317),
+    object,
+]
+interface IAudioCaptureClient : IUnknown
+{
+    HRESULT GetBuffer(
+        [out] BYTE **ppData,
+        [out] UINT32 *pNumFramesToRead,
+        [out] DWORD *pdwFlags,
+        [unique,out] UINT64 *pu64DevicePosition,
+        [unique,out] UINT64 *pu64QPCPosition
+    );
+    HRESULT ReleaseBuffer(
+        [in] UINT32 NumFramesRead
+    );
+    HRESULT GetNextPacketSize(
+        [out] UINT32 *pNumFramesInNextPacket
+    );
+}
+
+cpp_quote("#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ 0x00000001")
+
+[
+    local,
+    pointer_default(unique),
+    uuid("cd63314f-3fba-4a1b-812c-ef96358728e7"),
+    object,
+]
+interface IAudioClock : IUnknown
+{
+    HRESULT GetFrequency(
+        [out] UINT64 *pu64Frequency
+    );
+    HRESULT GetPosition(
+        [out] UINT64 *pu64Position,
+        [out,unique] UINT64 *pu64QPCPosition
+    );
+    HRESULT GetCharacteristics(
+        [out] DWORD *pdwCharacteristics
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid("6f49ff73-6727-49ac-a008-d98cf5e70048"),
+    object,
+]
+interface IAudioClock2 : IUnknown
+{
+    HRESULT GetPosition(
+        [out] UINT64 *DevicePosition,
+        [out,unique] UINT64 *QPCPosition
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid("f6e4c0a0-46d9-4fb9-be21-57a3ef2b626c"),
+    object,
+]
+interface IAudioClockAdjustment : IUnknown
+{
+    HRESULT SetSampleRate(
+        [in] float flSampleRate
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid("87ce5498-68d6-44e5-9215-6da47ef883d8"),
+    object,
+]
+interface ISimpleAudioVolume : IUnknown
+{
+    HRESULT SetMasterVolume(
+        [in] float fLevel,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT GetMasterVolume(
+        [out] float *pfLevel
+    );
+    HRESULT SetMute(
+        [in] const BOOL bMute,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT GetMute(
+        [out] BOOL *pbMute
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid("93014887-242d-4068-8a15-cf5e93b90fe3"),
+    object,
+]
+interface IAudioStreamVolume : IUnknown
+{
+    HRESULT GetChannelCount(
+        [out] UINT32 *pdwCount
+    );
+    HRESULT SetChannelVolume(
+        [in] UINT32 dwIndex,
+        [in] const float fLevel
+    );
+    HRESULT GetChannelVolume(
+        [in] UINT32 dwIndex,
+        [out] float *pfLevel
+    );
+    HRESULT SetAllVolumes(
+        [in] UINT32 dwCount,
+        [size_is(dwCount),in] const float *pfVolumes
+    );
+    HRESULT GetAllVolumes(
+        [in] UINT32 dwCount,
+        [size_is(dwCount),out] float *pfVolumes
+    );
+}
+
+[
+    local,
+    pointer_default(unique),
+    uuid("1c158861-b533-4b30-b1cf-e853e51c59b8"),
+    object,
+]
+interface IChannelAudioVolume : IUnknown
+{
+    HRESULT GetChannelCount(
+        [out] UINT32 *pdwCount
+    );
+    HRESULT SetChannelVolume(
+        [in] UINT32 dwIndex,
+        [in] const float fLevel,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT GetChannelVolume(
+        [in] UINT32 dwIndex,
+        [out] float *pfLevel
+    );
+    HRESULT SetAllVolumes(
+        [in] UINT32 dwCount,
+        [size_is(dwCount),in] const float *pfVolumes,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT GetAllVolumes(
+        [in] UINT32 dwCount,
+        [size_is(dwCount),out] float *pfVolumes
+    );
+}
+
+cpp_quote("#define FACILIY_AUDCLNT 0x889")
+cpp_quote("#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILIY_AUDCLNT, n)")
+cpp_quote("#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILIY_AUDCLNT, n)")
+cpp_quote("#define AUDCLNT_E_NOT_INITIALIZED AUDCLNT_ERR(1)")
+cpp_quote("#define AUDCLNT_E_ALREADY_INITIALIZED AUDCLNT_ERR(2)")
+cpp_quote("#define AUDCLNT_E_WRONG_ENDPOINT_TYPE AUDCLNT_ERR(3)")
+cpp_quote("#define AUDCLNT_E_DEVICE_INVALIDATED AUDCLNT_ERR(4)")
+cpp_quote("#define AUDCLNT_E_NOT_STOPPED AUDCLNT_ERR(5)")
+cpp_quote("#define AUDCLNT_E_BUFFER_TOO_LARGE AUDCLNT_ERR(6)")
+cpp_quote("#define AUDCLNT_E_OUT_OF_ORDER AUDCLNT_ERR(7)")
+cpp_quote("#define AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_ERR(8)")
+cpp_quote("#define AUDCLNT_E_INVALID_SIZE AUDCLNT_ERR(9)")
+cpp_quote("#define AUDCLNT_E_DEVICE_IN_USE AUDCLNT_ERR(0x0a)")
+cpp_quote("#define AUDCLNT_E_BUFFER_OPERATION_PENDING AUDCLNT_ERR(0x0b)")
+cpp_quote("#define AUDCLNT_E_THREAD_NOT_REGISTERED AUDCLNT_ERR(0x0c)")
+/* Not defined? cpp_quote("#define AUDCLNT_E_UNKNOWN_XXX1 AUDCLNT_ERR(0x0d)") */
+cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x0e)")
+cpp_quote("#define AUDCLNT_E_ENDPOINT_CREATE_FAILED AUDCLNT_ERR(0x0f)")
+cpp_quote("#define AUDCLNT_E_SERVICE_NOT_RUNNING AUDCLNT_ERR(0x10)")
+cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED AUDCLNT_ERR(0x11)")
+cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY AUDCLNT_ERR(0x12)")
+cpp_quote("#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x13)")
+cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_SET AUDCLNT_ERR(0x14)")
+cpp_quote("#define AUDCLNT_E_INCORRECT_BUFFER_SIZE AUDCLNT_ERR(0x15)")
+cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_ERROR AUDCLNT_ERR(0x16)")
+cpp_quote("#define AUDCLNT_E_CPUUSAGE_EXCEEDED AUDCLNT_ERR(0x17)")
+cpp_quote("#define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x18)")
+cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x19)")
+/* Hex fail */
+cpp_quote("#define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x20)")
+cpp_quote("#define AUDCLNT_E_INVALID_STREAM_FLAG AUDCLNT_ERR(0x021)")
+cpp_quote("#define AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE AUDCLNT_ERR(0x022)")
+cpp_quote("#define AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES AUDCLNT_ERR(0x023)")
+cpp_quote("#define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x024)")
+cpp_quote("#define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x025)")
+cpp_quote("#define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x026)")
+
+cpp_quote("#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)")
+cpp_quote("#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)")
+cpp_quote("#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl
new file mode 100644
index 0000000..00b55da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl
@@ -0,0 +1,249 @@
+/*
+ * Core Audio audio policy definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "propidl.idl";
+import "audiosessiontypes.h";
+import "audioclient.idl";
+
+interface IAudioSessionEvents;
+interface IAudioSessionControl;
+interface IAudioSessionControl2;
+interface IAudioSessionManager;
+interface IAudioVolumeDuckNotification;
+interface IAudioSessionNotification;
+interface IAudioSessionEnumerator;
+interface IAudioSessionManager2;
+
+typedef enum AudioSessionDisconnectReason /*[local]*/
+{
+    DisconnectReasonDeviceRemoval = 0,
+    DisconnectReasonServerShutdown,
+    DisconnectReasonFormatChanged,
+    DisconnectReasonSessionLogoff,
+    DisconnectReasonSessionDisconnected,
+    DisconnectReasonExclusiveModeOverride,
+} AudioSessionDisconnectReason;
+
+[
+    local,
+    uuid(24918acc-64b3-37c1-8ca9-74a66e9957a8),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionEvents : IUnknown
+{
+    HRESULT OnDisplayNameChanged(
+        [string,in] LPCWSTR NewDisplayName,
+        [in] LPCGUID EventContext
+    );
+    HRESULT OnIconPathChanged(
+        [string,in] LPCWSTR NewIconPath,
+        [in] LPCGUID EventContext
+    );
+    HRESULT OnSimpleVolumeChanged(
+        [in] float NewVolume,
+        [in] BOOL NewMute,
+        [in] LPCGUID EventContext
+    );
+    HRESULT OnChannelVolumeChanged(
+        [in] DWORD ChannelCount,
+        [size_is(ChannelCount),in] float *NewChannelVolumeArray,
+        [in] DWORD ChangedChannel,
+        [in] LPCGUID EventContext
+    );
+    HRESULT OnGroupingParamChanged(
+        [in] LPCGUID NewGroupingParam,
+        [in] LPCGUID EventContext
+    );
+    HRESULT OnStateChanged(
+        [in] AudioSessionState NewState
+    );
+    HRESULT OnSessionDisconnected(
+        [in] AudioSessionDisconnectReason DisconnectReason
+    );
+}
+
+[
+    local,
+    uuid(f4b1a599-7266-4319-a8ca-e70acb11e8cd),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionControl : IUnknown
+{
+    HRESULT GetState(
+        [out] AudioSessionState *pRetVal
+    );
+    HRESULT GetDisplayName(
+        [string,out] LPWSTR *pRetVal
+    );
+    HRESULT SetDisplayName(
+        [string,in] LPCWSTR DisplayName,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT GetIconPath(
+        [string,out] LPWSTR *pRetVal
+    );
+    HRESULT SetIconPath(
+        [string,in] LPCWSTR Value,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT GetGroupingParam(
+        [out] GUID *pRetVal
+    );
+    HRESULT SetGroupingParam(
+        [in] LPCGUID Override,
+        [unique,in] LPCGUID EventContext
+    );
+    HRESULT RegisterAudioSessionNotification(
+        [in] IAudioSessionEvents *NewNotifications
+    );
+    HRESULT UnregisterAudioSessionNotification(
+        [in] IAudioSessionEvents *NewNotifications
+    );
+}
+
+[
+    local,
+    uuid(bfb7ff88-7239-4fc9-8fa2-07c950be9c6d),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionControl2 : IAudioSessionControl
+{
+    HRESULT GetSessionIdentifier(
+        [string,out] LPWSTR *pRetVal
+    );
+    HRESULT GetSessionInstanceIdentifier(
+        [string,out] LPWSTR *pRetVal
+    );
+    HRESULT GetProcessId(
+        [out] DWORD *pRetVal
+    );
+    HRESULT IsSystemSoundsSession(void);
+    HRESULT SetDuckingPreferences(
+        [in] BOOL optOut
+    );
+};
+
+[
+    local,
+    uuid(bfa971f1-4d5e-40bb-935e-967039bfbee4),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionManager : IUnknown
+{
+    HRESULT GetAudioSessionControl(
+        [in] LPCGUID AudioSessionGuid,
+        [in] DWORD StreamFlags,
+        [out] IAudioSessionControl **SessionControl
+    );
+    HRESULT GetSimpleAudioVolume(
+        [in] LPCGUID AudioSessionGuid,
+        [in] DWORD StreamFlags,
+        [out] ISimpleAudioVolume **AudioVolume
+    );
+};
+
+[
+    local,
+    uuid(c3b284d4-6d39-4359-b3cf-b56ddb3bb39c),
+    pointer_default(unique),
+    object
+]
+interface IAudioVolumeDuckNotification : IUnknown
+{
+    HRESULT OnVolumeDuckNotification(
+        [in] LPCWSTR sessionID,
+        [in] UINT32 countCommunicationSessions
+    );
+    HRESULT OnVolumeUnduckNotification(
+        [in] LPCWSTR sessionID
+    );
+};
+
+[
+    local,
+    uuid(641dd20b-4d41-49cc-aba3-174b9477bb08),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionNotification : IUnknown
+{
+    HRESULT OnSessionCreated(
+        [in] IAudioSessionControl *NewSession
+    );
+};
+
+[
+    local,
+    uuid(e2f5bb11-0570-40ca-acdd-3aa01277dee8),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionEnumerator : IUnknown
+{
+    HRESULT GetCount(
+        [out] INT *SessionCount
+    );
+    HRESULT GetSession(
+        [in] INT SessionCount,
+        [out] IAudioSessionControl **Session
+    );
+};
+
+[
+    local,
+    uuid(77aa99a0-1bd6-484f-8bc7-2c654c9a9b6f),
+    pointer_default(unique),
+    object
+]
+interface IAudioSessionManager2 : IAudioSessionManager
+{
+    HRESULT GetSessionEnumerator(
+        [retval,out] IAudioSessionEnumerator **SessionEnum
+    );
+    HRESULT RegisterSessionNotification(
+        [in] IAudioSessionNotification *SessionNotification
+    );
+    HRESULT UnregisterSessionNotification(
+        [in] IAudioSessionNotification *SessionNotification
+    );
+    HRESULT RegisterDuckNotification(
+        [string,in] LPCWSTR sessionID,
+        [in] IAudioVolumeDuckNotification *duckNotification
+    );
+    HRESULT UnregisterDuckNotification(
+        [in] IAudioVolumeDuckNotification *duckNotification
+    );
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h
new file mode 100644
index 0000000..7823b6f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h
@@ -0,0 +1,57 @@
+
+/*
+ * Core Audio audio session types definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __AUDIOSESSIONTYPES__
+#define __AUDIOSESSIONTYPES__
+
+typedef enum _AUDCLNT_SHAREMODE
+{
+    AUDCLNT_SHAREMODE_SHARED,
+    AUDCLNT_SHAREMODE_EXCLUSIVE,
+} AUDCLNT_SHAREMODE;
+
+#define AUDCLNT_STREAMFLAGS_CROSSPROCESS 0x00010000
+#define AUDCLNT_STREAMFLAGS_LOOPBACK 0x00020000
+#define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000
+#define AUDCLNT_STREAMFLAGS_NOPERSIST 0x00080000
+#define AUDCLNT_STREAMFLAGS_RATEADJUST 0x00100000
+#define AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED 0x10000000
+#define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE 0x20000000
+#define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED 0x40000000
+
+typedef enum _AudioSessionState
+{
+    AudioSessionStateInactive = 0,
+    AudioSessionStateActive,
+    AudioSessionStateExpired,
+} AudioSessionState;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl
new file mode 100644
index 0000000..b3a965a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+
+cpp_quote("#if 0")
+typedef struct tWAVEFORMATEX WAVEFORMATEX;
+cpp_quote ("#endif")
+
+interface IAudioMediaStream;
+interface IAudioStreamSample;
+interface IMemoryData;
+interface IAudioData;
+
+[
+object,
+local,
+uuid(f7537560-a3be-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioMediaStream : IMediaStream
+{
+	HRESULT GetFormat(
+		[out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent
+	);
+
+	HRESULT SetFormat(
+		[in] const WAVEFORMATEX *lpWaveFormat);
+
+	HRESULT CreateSample(
+		[in] IAudioData *pAudioData,
+		[in] DWORD dwFlags,
+		[out] IAudioStreamSample **ppSample
+	);
+}
+
+
+[
+object,
+local,
+uuid(345fee00-aba5-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioStreamSample : IStreamSample
+{
+	HRESULT GetAudioData(
+		[out] IAudioData **ppAudio
+	);
+}
+
+
+[
+object,
+local,
+uuid(327fc560-af60-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IMemoryData : IUnknown
+{
+	HRESULT SetBuffer(
+		[in] DWORD cbSize,
+		[in] BYTE *pbData,
+		[in] DWORD dwFlags
+	);
+
+	HRESULT GetInfo(
+		[out] DWORD *pdwLength,
+		[out] BYTE **ppbData,
+		[out] DWORD *pcbActualData
+	);
+	HRESULT SetActual(
+		[in] DWORD cbDataValid
+	);
+}
+
+
+[
+object,
+local,
+uuid(54c719c0-af60-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioData : IMemoryData
+{
+	HRESULT GetFormat(
+		[out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent
+	);
+
+	HRESULT SetFormat(
+		[in] const WAVEFORMATEX *lpWaveFormat
+	);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h
new file mode 100644
index 0000000..59439ef
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h
@@ -0,0 +1,333 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ * Copyright (C) 2008 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* All definitions here are packed structures of on-disk formats */
+#include <pshpack2.h>
+
+typedef struct _riffchunk
+{
+    FOURCC fcc;
+    DWORD cb;
+} RIFFCHUNK, * LPRIFFCHUNK;
+
+typedef struct _rifflist
+{
+    FOURCC fcc;
+    DWORD cb;
+    FOURCC fccListType;
+} RIFFLIST, * LPRIFFLIST;
+
+#define FCC( ch0, ch1, ch2, ch3 ) \
+    ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) <<  8 ) | \
+    ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+
+#define RIFFROUND(cb) ((cb) + ((cb)&1))
+#define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk)+sizeof(RIFFCHUNK)+RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))
+
+/* flags for dwFlags member of AVIMAINHEADER */
+#define AVIF_HASINDEX       0x00000010
+#define AVIF_MUSTUSEINDEX   0x00000020
+#define AVIF_ISINTERLEAVED  0x00000100
+#define AVIF_TRUSTCKTYPE    0x00000800
+#define AVIF_WASCAPTUREFILE 0x00010000
+#define AVIF_COPYRIGHTED    0x00020000
+
+#define ckidMAINAVIHEADER FCC('a','v','i','h')
+typedef struct _avimainheader
+{
+    FOURCC fcc;
+    DWORD cb;
+    DWORD dwMicroSecPerFrame;
+    DWORD dwMaxBytesPerSec;
+    DWORD dwPaddingGranularity;
+    DWORD dwFlags;
+    DWORD dwTotalFrames;
+    DWORD dwInitialFrames;
+    DWORD dwStreams;
+    DWORD dwSuggestedBufferSize;
+    DWORD dwWidth;
+    DWORD dwHeight;
+    DWORD dwReserved[4];
+} AVIMAINHEADER;
+
+#define ckidODML FCC('o','d','m','l')
+#define ckidAVIEXTHEADER  FCC('d','m','l','h')
+typedef struct _aviextheader
+{
+    FOURCC fcc;
+    DWORD cb;
+    DWORD dwGrandFrames;
+    DWORD dwFuture[61];
+} AVIEXTHEADER;
+
+#define ckidSTREAMLIST FCC('s','t','r','l')
+
+/* flags for dwFlags member of AVISTREAMHEADER */
+#define AVISF_DISABLED         0x00000001
+#define AVISF_VIDEO_PALCHANGES 0x00010000
+
+#ifndef ckidSTREAMHEADER
+#define ckidSTREAMHEADER FCC('s','t','r','h')
+#endif
+
+#ifndef streamtypeVIDEO
+#define streamtypeVIDEO FCC('v','i','d','s')
+#define streamtypeAUDIO FCC('a','u','d','s')
+#define streamtypeMIDI FCC('m','i','d','s')
+#define streamtypeTEXT FCC('t','x','t','s')
+#endif
+
+typedef struct _avistreamheader
+{
+    FOURCC fcc;
+    DWORD cb;
+    FOURCC fccType;
+    FOURCC fccHandler;
+    DWORD dwFlags;
+    WORD wPriority;
+    WORD wLanguage;
+    DWORD dwInitialFrames;
+    DWORD dwScale;
+    DWORD dwRate;
+    DWORD dwStart;
+    DWORD dwLength;
+    DWORD dwSuggestedBufferSize;
+    DWORD dwQuality;
+    DWORD dwSampleSize;
+    struct
+    {
+        short int left;
+        short int top;
+        short int right;
+        short int bottom;
+    } rcFrame;
+} AVISTREAMHEADER;
+
+#ifndef ckidSTREAMFORMAT
+#define ckidSTREAMFORMAT FCC('s','t','r','f')
+#endif
+#define ckidAVIOLDINDEX FCC('i','d','x','1')
+
+/* flags for dwFlags member of _avioldindex_entry */
+#define AVIIF_LIST       0x00000001
+#define AVIIF_KEYFRAME   0x00000010
+#define AVIIF_NO_TIME    0x00000100
+#define AVIIF_COMPRESSOR 0x0FFF0000
+
+typedef struct _avioldindex
+{
+    FOURCC fcc;
+    DWORD cb;
+    struct _avioldindex_entry
+    {
+        DWORD dwChunkId;
+        DWORD dwFlags;
+        DWORD dwOffset;
+        DWORD dwSize;
+    } aIndex[ANYSIZE_ARRAY];
+} AVIOLDINDEX;
+
+typedef union _timecode
+{
+    struct
+    {
+        WORD wFrameRate;
+        WORD wFrameFract;
+        LONG cFrames;
+    } DUMMYSTRUCTNAME;
+    DWORDLONG qw;
+} TIMECODE;
+
+#define TIMECODE_RATE_30DROP 0
+
+/* flags for dwSMPTEflags member of TIMECODEDATA */
+#define TIMECODE_SMPTE_BINARY_GROUP 0x07
+#define TIMECODE_SMPTE_COLOR_FRAME  0x08
+
+typedef struct _timecodedata
+{
+    TIMECODE time;
+    DWORD dwSMPTEflags;
+    DWORD dwUser;
+} TIMECODEDATA;
+
+#define AVI_INDEX_OF_INDEXES      0x00
+#define AVI_INDEX_OF_CHUNKS       0x01
+#define AVI_INDEX_OF_TIMED_CHUNKS 0x02
+#define AVI_INDEX_OF_SUB_2FIELD   0x03
+#define AVI_INDEX_IS_DATA         0x80
+
+#define AVI_INDEX_SUB_DEFAULT     0x00
+#define AVI_INDEX_SUB_2FIELD      0x01
+
+typedef struct _avimetaindex
+{
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORD dwReserved[3];
+    DWORD adwIndex[ANYSIZE_ARRAY];
+} AVIMETAINDEX;
+
+#define ckidAVISUPERINDEX FCC('i','n','d','x')
+typedef struct _avisuperindex {
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORD dwReserved[3];
+    struct _avisuperindex_entry {
+        DWORDLONG qwOffset;
+        DWORD dwSize;
+        DWORD dwDuration;
+    } aIndex[ANYSIZE_ARRAY];
+} AVISUPERINDEX;
+
+#define AVISTDINDEX_DELTAFRAME (0x80000000)
+#define AVISTDINDEX_SIZEMASK (~0x80000000)
+
+typedef struct _avistdindex_entry {
+    DWORD dwOffset;
+    DWORD dwSize;
+} AVISTDINDEX_ENTRY;
+
+typedef struct _avistdindex {
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD    nEntriesInUse;
+    DWORD    dwChunkId;
+    DWORDLONG qwBaseOffset;
+    DWORD    dwReserved_3;
+    AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];
+} AVISTDINDEX;
+
+typedef struct _avitimedindex_entry {
+    DWORD dwOffset;
+    DWORD dwSize;
+    DWORD dwDuration;
+} AVITIMEDINDEX_ENTRY;
+
+typedef struct _avitimedindex {
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORDLONG qwBaseOffset;
+    DWORD dwReserved_3;
+    AVITIMEDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];
+    /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
+} AVITIMEDINDEX;
+
+typedef struct _avitimecodeindex {
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORD dwReserved[3];
+    TIMECODEDATA aIndex[ANYSIZE_ARRAY];
+} AVITIMECODEINDEX;
+
+typedef struct _avitcdlindex_entryA {
+    DWORD dwTick;
+    TIMECODE time;
+    DWORD dwSMPTEflags;
+    DWORD dwUser;
+    CHAR szReelId[12];
+} AVITCDLINDEX_ENTRYA;
+
+typedef struct _avitcdlindex_entryW {
+    DWORD dwTick;
+    TIMECODE time;
+    DWORD dwSMPTEflags;
+    DWORD dwUser;
+    WCHAR szReelId[12];
+} AVITCDLINDEX_ENTRYW;
+
+typedef struct _avitcdlindexA {
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORD dwReserved[3];
+    AVITCDLINDEX_ENTRYA aIndex[ANYSIZE_ARRAY];
+    /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
+} AVITCDLINDEXA;
+
+typedef struct _avitcdlindexW {
+    FOURCC fcc;
+    UINT cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORD dwReserved[3];
+    AVITCDLINDEX_ENTRYW aIndex[ANYSIZE_ARRAY];
+    /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
+} AVITCDLINDEXW;
+
+#define AVITCDLINDEX_ENTRY WINELIB_NAME_AW(AVITCDLINDEX_ENTRY)
+#define AVITCDLINDEX WINELIB_NAME_AW(AVITCDLINDEX)
+
+typedef struct _avifieldindex_chunk {
+    FOURCC fcc;
+    DWORD cb;
+    WORD wLongsPerEntry;
+    BYTE bIndexSubType;
+    BYTE bIndexType;
+    DWORD nEntriesInUse;
+    DWORD dwChunkId;
+    DWORDLONG qwBaseOffset;
+    DWORD dwReserved3;
+    struct _avifieldindex_entry {
+        DWORD dwOffset;
+        DWORD dwSize;
+        DWORD dwOffsetField2;
+    } aIndex[ANYSIZE_ARRAY];
+} AVIFIELDINDEX, * PAVIFIELDINDEX;
+
+#include <poppack.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h
new file mode 100644
index 0000000..b0d99a2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h
@@ -0,0 +1,83 @@
+/*
+ * avrt definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _AVRT_
+#define _AVRT_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _AVRT_PRIORITY
+{
+    AVRT_PRIORITY_LOW = -1,
+    AVRT_PRIORITY_NORMAL,
+    AVRT_PRIORITY_HIGH,
+    AVRT_PRIORITY_CRITICAL
+} AVRT_PRIORITY, *PAVRT_PRIORITY;
+
+/* Windows compiler is more lax */
+#define THREAD_ORDER_GROUP_INFINITE_TIMEOUT ((void*)((LONG_PTR)-1))
+
+HANDLE WINAPI AvSetMmThreadCharacteristicsA(LPCSTR TaskName, LPDWORD TaskIndex);
+HANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR TaskName, LPDWORD TaskIndex);
+#define AvSetMmThreadCharacteristics WINELIB_NAME_AW(AvSetMmThreadCharacteristics)
+
+HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex);
+HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex);
+#define AvSetMmMaxThreadCharacteristics WINELIB_NAME_AW(AvSetMmMaxThreadCharacteristics)
+
+BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle);
+BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY Priority);
+BOOL WINAPI AvRtCreateThreadOrderingGroup(
+    PHANDLE Context, PLARGE_INTEGER Period,
+    GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout);
+
+BOOL WINAPI AvRtCreateThreadOrderingGroupExA(
+    PHANDLE Context, PLARGE_INTEGER Period,
+    GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout,
+    LPCSTR TaskName);
+BOOL WINAPI AvRtCreateThreadOrderingGroupExW(
+    PHANDLE Context, PLARGE_INTEGER Period,
+    GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout,
+    LPCSTR TaskName);
+#define AvRtCreateThreadOrderingGroupEx WINELIB_NAME_AW(AvRtCreateThreadOrderingGroupEx)
+
+BOOL WINAPI AvRtJoinThreadOrderingGroup(PHANDLE Context, GUID *ThreadOrderingGuid, BOOL Before);
+BOOL WINAPI AvRtWaitOnThreadOrderingGroup(HANDLE Context);
+BOOL WINAPI AvRtLeaveThreadOrderingGroup(HANDLE Context);
+BOOL WINAPI AvRtDeleteThreadOrderingGroup(HANDLE Context);
+BOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, PULONG SystemResponsivenessValue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_AVRT_*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl
new file mode 100644
index 0000000..086aa81
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl
@@ -0,0 +1,666 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define CHARS_IN_GUID 39
+cpp_quote("#define CHARS_IN_GUID 39")
+
+/* GetTimeFormat is defined in winnls.h as
+ * either the W or A suffixed version */
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetTimeFormat")
+cpp_quote("#endif")
+
+typedef struct _AMMediaType
+{
+    GUID       majortype;
+    GUID       subtype;
+    BOOL       bFixedSizeSamples;
+    BOOL       bTemporalCompression;
+    ULONG      lSampleSize;
+    GUID       formattype;
+    IUnknown * pUnk;
+    ULONG      cbFormat;
+    [size_is(cbFormat)] BYTE * pbFormat;
+} AM_MEDIA_TYPE;
+
+typedef enum _PinDirection
+{
+    PINDIR_INPUT,
+    PINDIR_OUTPUT
+} PIN_DIRECTION;
+
+#define MAX_PIN_NAME    128
+#define MAX_FILTER_NAME 128
+cpp_quote("#define MAX_PIN_NAME    128")
+cpp_quote("#define MAX_FILTER_NAME 128")
+
+cpp_quote("#ifndef REFERENCE_TIME_DEFINED")
+cpp_quote("#define REFERENCE_TIME_DEFINED")
+typedef LONGLONG REFERENCE_TIME;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef REFTIME_DEFINED")
+cpp_quote("#define REFTIME_DEFINED")
+typedef DOUBLE REFTIME;
+cpp_quote("#endif")
+
+typedef DWORD_PTR HSEMAPHORE;
+typedef DWORD_PTR HEVENT;
+
+typedef struct _AllocatorProperties
+{
+    long cBuffers;
+    long cbBuffer;
+    long cbAlign;
+    long cbPrefix;
+} ALLOCATOR_PROPERTIES;
+
+interface IAMovieSetup;
+interface IEnumFilters;
+interface IEnumMediaTypes;
+interface IEnumPins;
+interface IBaseFilter;
+interface IFilterGraph;
+interface IMediaFilter;
+interface IMediaSample;
+interface IMemAllocator;
+interface IMemAllocatorCallbackTemp;
+interface IMemAllocatorNotifyCallbackTemp;
+interface IMemInputPin;
+interface IPin;
+interface IReferenceClock;
+
+[
+object,
+uuid(56a86891-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IPin : IUnknown
+{
+    typedef struct _PinInfo
+    {
+        IBaseFilter *pFilter;
+        PIN_DIRECTION dir;
+        WCHAR achName[MAX_PIN_NAME];
+    } PIN_INFO;
+
+    HRESULT Connect(
+        [in] IPin * pReceivePin,
+        [in] const AM_MEDIA_TYPE * pmt);
+
+    HRESULT ReceiveConnection(
+        [in] IPin * pConnector,
+        [in] const AM_MEDIA_TYPE *pmt);
+
+    HRESULT Disconnect(void);
+
+    HRESULT ConnectedTo(
+        [out] IPin **pPin);
+
+    HRESULT ConnectionMediaType(
+        [out] AM_MEDIA_TYPE *pmt);
+
+    HRESULT QueryPinInfo(
+        [out] PIN_INFO * pInfo);
+
+    HRESULT QueryDirection(
+        [out] PIN_DIRECTION *pPinDir);
+
+    HRESULT QueryId(
+        [out] LPWSTR * Id);
+
+    HRESULT QueryAccept(
+        [in] const AM_MEDIA_TYPE *pmt);
+
+    HRESULT EnumMediaTypes(
+        [out] IEnumMediaTypes **ppEnum);
+
+    HRESULT QueryInternalConnections(
+        [out] IPin* *apPin,
+        [in, out] ULONG *nPin);
+
+    HRESULT EndOfStream(void);
+
+    HRESULT BeginFlush(void);
+
+    HRESULT EndFlush(void);
+    HRESULT NewSegment(
+        [in] REFERENCE_TIME tStart,
+        [in] REFERENCE_TIME tStop,
+        [in] double dRate);
+}
+
+typedef IPin *PPIN;
+
+[
+object,
+uuid(56a86892-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IEnumPins : IUnknown
+{
+
+    HRESULT Next(
+        [in] ULONG cPins,
+        [out, size_is(cPins)] IPin ** ppPins,
+        [out] ULONG * pcFetched);
+
+    HRESULT Skip(
+        [in] ULONG cPins);
+
+    HRESULT Reset(void);
+
+    HRESULT Clone(
+        [out] IEnumPins **ppEnum);
+}
+
+typedef IEnumPins *PENUMPINS;
+
+[
+object,
+uuid(89c31040-846b-11ce-97d3-00aa0055595a),
+pointer_default(unique)
+]
+interface IEnumMediaTypes : IUnknown
+{
+    HRESULT Next(
+        [in] ULONG cMediaTypes,
+        [out, size_is(cMediaTypes)]
+             AM_MEDIA_TYPE ** ppMediaTypes,
+        [out] ULONG * pcFetched
+    );
+
+    HRESULT Skip(
+        [in] ULONG cMediaTypes);
+
+    HRESULT Reset(void);
+
+    HRESULT Clone(
+        [out] IEnumMediaTypes **ppEnum
+    );
+}
+
+typedef IEnumMediaTypes *PENUMMEDIATYPES;
+
+[
+object,
+uuid(56a8689f-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IFilterGraph : IUnknown
+{
+    HRESULT AddFilter(
+        [in] IBaseFilter * pFilter,
+        [in, string] LPCWSTR pName);
+
+    HRESULT RemoveFilter(
+        [in] IBaseFilter * pFilter);
+
+    HRESULT EnumFilters(
+        [out] IEnumFilters **ppEnum);
+
+    HRESULT FindFilterByName(
+        [in, string] LPCWSTR pName,
+        [out] IBaseFilter ** ppFilter);
+
+    HRESULT ConnectDirect(
+        [in] IPin * ppinOut,
+        [in] IPin * ppinIn,
+        [in, unique] const AM_MEDIA_TYPE* pmt);
+
+    HRESULT Reconnect(
+        [in] IPin * ppin);
+
+    HRESULT Disconnect(
+        [in] IPin * ppin);
+
+    HRESULT SetDefaultSyncSource(void);
+}
+
+typedef IFilterGraph *PFILTERGRAPH;
+
+[
+object,
+uuid(56a86893-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IEnumFilters : IUnknown
+{
+    HRESULT Next(
+        [in]  ULONG cFilters,
+        [out] IBaseFilter ** ppFilter,
+        [out] ULONG * pcFetched);
+
+
+    HRESULT Skip(
+        [in] ULONG cFilters);
+
+
+    HRESULT Reset(void);
+
+
+    HRESULT Clone(
+        [out] IEnumFilters **ppEnum);
+}
+
+typedef IEnumFilters *PENUMFILTERS;
+
+[
+object,
+uuid(56a86899-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMediaFilter : IPersist
+{
+    typedef enum _FilterState
+    {
+        State_Stopped,
+        State_Paused,
+        State_Running
+    } FILTER_STATE;
+
+    HRESULT Stop(void);
+    HRESULT Pause(void);
+
+    HRESULT Run(REFERENCE_TIME tStart);
+
+    HRESULT GetState(
+        [in] DWORD dwMilliSecsTimeout,
+        [out] FILTER_STATE *State);
+
+    HRESULT SetSyncSource(
+        [in] IReferenceClock * pClock);
+
+    HRESULT GetSyncSource(
+        [out] IReferenceClock ** pClock);
+}
+
+typedef IMediaFilter *PMEDIAFILTER;
+
+[
+object,
+uuid(56a86895-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IBaseFilter : IMediaFilter
+{
+    typedef struct _FilterInfo
+    {
+        WCHAR achName[MAX_FILTER_NAME];
+        IFilterGraph * pGraph;
+    } FILTER_INFO;
+
+    HRESULT EnumPins(
+        [out] IEnumPins ** ppEnum);
+
+    HRESULT FindPin(
+        [in, string] LPCWSTR Id,
+        [out] IPin ** ppPin);
+
+    HRESULT QueryFilterInfo(
+        [out] FILTER_INFO * pInfo);
+
+    HRESULT JoinFilterGraph(
+        [in] IFilterGraph * pGraph,
+        [in, string] LPCWSTR pName);
+
+    HRESULT QueryVendorInfo(
+        [out, string] LPWSTR* pVendorInfo);
+}
+
+typedef IBaseFilter *PFILTER;
+
+[
+object,
+uuid(56a86897-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IReferenceClock : IUnknown
+{
+    HRESULT GetTime(
+        [out] REFERENCE_TIME *pTime);
+
+    HRESULT AdviseTime(
+        [in] REFERENCE_TIME baseTime,
+        [in] REFERENCE_TIME streamTime,
+        [in] HEVENT hEvent,
+        [out] DWORD_PTR * pdwAdviseCookie);
+
+    HRESULT AdvisePeriodic(
+        [in] REFERENCE_TIME startTime,
+        [in] REFERENCE_TIME periodTime,
+        [in] HSEMAPHORE hSemaphore,
+        [out] DWORD_PTR * pdwAdviseCookie);
+
+    HRESULT Unadvise(
+        [in] DWORD_PTR dwAdviseCookie);
+}
+
+typedef IReferenceClock *PREFERENCECLOCK;
+
+/*
+[
+object,
+uuid(36b73885-c2c8-11cf-8b46-00805f6cef60),
+pointer_default(unique)
+]
+interface IReferenceClock2 : IReferenceClock
+{
+}
+
+typedef IReferenceClock2 *PREFERENCECLOCK2;
+
+*/
+
+[
+local,
+object,
+uuid(56a8689a-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMediaSample : IUnknown
+{
+    HRESULT GetPointer([out] BYTE ** ppBuffer);
+
+    long GetSize(void);
+
+    HRESULT GetTime(
+        [out] REFERENCE_TIME * pTimeStart,
+        [out] REFERENCE_TIME * pTimeEnd);
+
+    HRESULT SetTime(
+        [in] REFERENCE_TIME * pTimeStart,
+        [in] REFERENCE_TIME * pTimeEnd);
+
+    HRESULT IsSyncPoint(void);
+
+    HRESULT SetSyncPoint(BOOL bIsSyncPoint);
+
+    HRESULT IsPreroll(void);
+
+    HRESULT SetPreroll(BOOL bIsPreroll);
+
+    LONG GetActualDataLength(void);
+
+    HRESULT SetActualDataLength(LONG length);
+
+    HRESULT GetMediaType(AM_MEDIA_TYPE **ppMediaType);
+
+    HRESULT SetMediaType(AM_MEDIA_TYPE *pMediaType);
+
+    HRESULT IsDiscontinuity(void);
+
+    HRESULT SetDiscontinuity(BOOL bDiscontinuity);
+
+    HRESULT GetMediaTime(
+        [out] LONGLONG * pTimeStart,
+        [out] LONGLONG * pTimeEnd);
+
+    HRESULT SetMediaTime(
+        [in] LONGLONG * pTimeStart,
+        [in] LONGLONG * pTimeEnd);
+}
+
+typedef IMediaSample *PMEDIASAMPLE;
+
+enum tagAM_SAMPLE_PROPERTY_FLAGS
+{
+       AM_SAMPLE_SPLICEPOINT        = 0x01,
+       AM_SAMPLE_PREROLL            = 0x02,
+       AM_SAMPLE_DATADISCONTINUITY  = 0x04,
+       AM_SAMPLE_TYPECHANGED        = 0x08,
+       AM_SAMPLE_TIMEVALID          = 0x10,
+       AM_SAMPLE_TIMEDISCONTINUITY  = 0x40,
+       AM_SAMPLE_FLUSH_ON_PAUSE     = 0x80,
+       AM_SAMPLE_STOPVALID          = 0x100,
+       AM_SAMPLE_ENDOFSTREAM        = 0x200,
+       AM_STREAM_MEDIA              = 0,
+       AM_STREAM_CONTROL            = 1
+};
+
+typedef struct tagAM_SAMPLE2_PROPERTIES
+{
+    DWORD    cbData;
+    DWORD    dwTypeSpecificFlags;
+    DWORD    dwSampleFlags;
+    LONG     lActual;
+    REFERENCE_TIME tStart;
+    REFERENCE_TIME tStop;
+    DWORD    dwStreamId;
+    AM_MEDIA_TYPE *pMediaType;
+    BYTE    *pbBuffer;
+    LONG     cbBuffer;
+} AM_SAMPLE2_PROPERTIES;
+
+[
+        local,
+        object,
+        uuid(36b73884-c2c8-11cf-8b46-00805f6cef60),
+        pointer_default(unique)
+]
+interface IMediaSample2 : IMediaSample
+{
+    HRESULT GetProperties(
+        [in] DWORD cbProperties,
+        [out, size_is(cbProperties)] BYTE * pbProperties
+    );
+
+    HRESULT SetProperties(
+        [in] DWORD cbProperties,
+        [in, size_is(cbProperties)] const BYTE * pbProperties
+    );
+}
+
+typedef IMediaSample2 *PMEDIASAMPLE2;
+
+#define AM_GBF_PREVFRAMESKIPPED 1
+#define AM_GBF_NOTASYNCPOINT    2
+cpp_quote("#define AM_GBF_PREVFRAMESKIPPED 1")
+cpp_quote("#define AM_GBF_NOTASYNCPOINT 2")
+
+cpp_quote("#define AM_GBF_NOWAIT 4")
+cpp_quote("#define AM_GBF_NODDSURFACELOCK 8")
+
+[
+object,
+uuid(56a8689c-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMemAllocator : IUnknown
+{
+    HRESULT SetProperties(
+        [in] ALLOCATOR_PROPERTIES* pRequest,
+        [out] ALLOCATOR_PROPERTIES* pActual);
+
+    HRESULT GetProperties(
+        [out] ALLOCATOR_PROPERTIES* pProps);
+
+    HRESULT Commit(void);
+
+    HRESULT Decommit(void);
+
+    HRESULT GetBuffer(
+        [out] IMediaSample **ppBuffer,
+        [in] REFERENCE_TIME * pStartTime,
+        [in] REFERENCE_TIME * pEndTime,
+        [in] DWORD dwFlags);
+
+    HRESULT ReleaseBuffer(
+        [in] IMediaSample *pBuffer);
+}
+
+typedef IMemAllocator *PMEMALLOCATOR;
+
+[
+object,
+uuid(379a0cf0-c1de-11d2-abf5-00a0c905f375),
+pointer_default(unique)
+]
+interface IMemAllocatorCallbackTemp : IMemAllocator
+{
+    HRESULT SetNotify(
+        [in] IMemAllocatorNotifyCallbackTemp *pNotify);
+
+    HRESULT GetFreeCount(
+        [out] LONG *plBuffersFree);
+}
+
+[
+object,
+uuid(92980b30-c1de-11d2-abf5-00a0c905f375),
+pointer_default(unique)
+]
+interface IMemAllocatorNotifyCallbackTemp : IUnknown
+{
+    HRESULT NotifyRelease();
+}
+
+[
+object,
+uuid(56a8689d-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMemInputPin : IUnknown
+{
+    HRESULT GetAllocator(
+        [out] IMemAllocator ** ppAllocator);
+
+    HRESULT NotifyAllocator(
+        [in] IMemAllocator * pAllocator,
+        [in] BOOL bReadOnly);
+
+    HRESULT GetAllocatorRequirements( [out] ALLOCATOR_PROPERTIES*pProps );
+
+    HRESULT Receive(
+        [in] IMediaSample * pSample);
+
+    HRESULT ReceiveMultiple(
+        [in, size_is(nSamples)] IMediaSample **pSamples,
+        [in] long nSamples,
+        [out] long *nSamplesProcessed);
+
+    HRESULT ReceiveCanBlock();
+}
+
+typedef IMemInputPin *PMEMINPUTPIN;
+
+[
+object,
+uuid(a3d8cec0-7e5a-11cf-bbc5-00805f6cef20),
+pointer_default(unique)
+]
+interface IAMovieSetup : IUnknown
+{
+    HRESULT Register( );
+    HRESULT Unregister( );
+}
+
+typedef IAMovieSetup *PAMOVIESETUP;
+
+typedef enum AM_SEEKING_SeekingFlags
+{
+    AM_SEEKING_NoPositioning            = 0x00,
+    AM_SEEKING_AbsolutePositioning      = 0x01,
+    AM_SEEKING_RelativePositioning      = 0x02,
+    AM_SEEKING_IncrementalPositioning   = 0x03,
+    AM_SEEKING_PositioningBitsMask      = 0x03,
+    AM_SEEKING_SeekToKeyFrame           = 0x04,
+    AM_SEEKING_ReturnTime               = 0x08,
+    AM_SEEKING_Segment                  = 0x10,
+    AM_SEEKING_NoFlush                  = 0x20
+} AM_SEEKING_SEEKING_FLAGS;
+
+typedef enum AM_SEEKING_SeekingCapabilities
+{
+    AM_SEEKING_CanSeekAbsolute     = 0x001,
+    AM_SEEKING_CanSeekForwards     = 0x002,
+    AM_SEEKING_CanSeekBackwards    = 0x004,
+    AM_SEEKING_CanGetCurrentPos    = 0x008,
+    AM_SEEKING_CanGetStopPos       = 0x010,
+    AM_SEEKING_CanGetDuration      = 0x020,
+    AM_SEEKING_CanPlayBackwards    = 0x040,
+    AM_SEEKING_CanDoSegments       = 0x080,
+    AM_SEEKING_Source              = 0x100
+} AM_SEEKING_SEEKING_CAPABILITIES;
+
+[
+object,
+uuid(36b73880-c2c8-11cf-8b46-00805f6cef60),
+pointer_default(unique)
+]
+interface IMediaSeeking : IUnknown
+{
+    HRESULT GetCapabilities( [out] DWORD * pCapabilities );
+
+    HRESULT CheckCapabilities( [in,out] DWORD * pCapabilities );
+
+    HRESULT IsFormatSupported([in] const GUID * pFormat);
+
+    HRESULT QueryPreferredFormat([out] GUID * pFormat);
+
+    HRESULT GetTimeFormat([out] GUID *pFormat);
+
+    HRESULT IsUsingTimeFormat([in] const GUID * pFormat);
+
+    HRESULT SetTimeFormat([in] const GUID * pFormat);
+
+    HRESULT GetDuration([out] LONGLONG *pDuration);
+
+    HRESULT GetStopPosition([out] LONGLONG *pStop);
+
+    HRESULT GetCurrentPosition([out] LONGLONG *pCurrent);
+
+    HRESULT ConvertTimeFormat([out] LONGLONG * pTarget, [in] const GUID * pTargetFormat,
+                              [in]  LONGLONG    Source, [in] const GUID * pSourceFormat );
+
+    HRESULT SetPositions(
+        [in,out] LONGLONG * pCurrent,
+        [in] DWORD dwCurrentFlags,
+        [in,out] LONGLONG * pStop,
+        [in] DWORD dwStopFlags);
+
+    HRESULT GetPositions(
+        [out] LONGLONG * pCurrent,
+        [out] LONGLONG * pStop);
+
+    HRESULT GetAvailable(
+        [out] LONGLONG * pEarliest,
+        [out] LONGLONG * pLatest);
+
+    HRESULT SetRate([in]  double dRate);
+
+    HRESULT GetRate([out] double * pdRate);
+
+    HRESULT GetPreroll([out] LONGLONG * pllPreroll);
+}
+
+typedef IMediaSeeking *PMEDIASEEKING;
+
+enum tagAM_MEDIAEVENT_FLAGS
+{
+    AM_MEDIAEVENT_NONOTIFY = 0x01
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl
new file mode 100644
index 0000000..e3ada4f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl
@@ -0,0 +1,1074 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+interface IAMAnalogVideoDecoder;
+interface IAMAnalogVideoEncoder;
+interface IAMAudioInputMixer;
+interface IAMAudioRendererStats;
+interface IAMBufferNegotiation;
+interface IAMCameraControl;
+interface IAMCopyCaptureFileProgress;
+interface IAMCrossbar;
+interface IAMDevMemoryAllocator;
+interface IAMDevMemoryControl;
+interface IAMDroppedFrames;
+interface IAMExtDevice;
+interface IAMExtTransport;
+interface IAMGraphStreams;
+interface IAMLatency;
+interface IAMOpenProgress;
+interface IAMOverlayFX;
+interface IAMPhysicalPinInfo;
+interface IAMPushSource;
+interface IAMStreamConfig;
+interface IAMTimecodeDisplay;
+interface IAMTimecodeGenerator;
+interface IAMTimecodeReader;
+interface IAMTVTuner;
+interface IAMVfwCaptureDialogs;
+interface IAMVfwCompressDialogs;
+interface IAMVideoCompression;
+interface IAMVideoDecimationProperties;
+interface IAMVideoProcAmp;
+interface IAMGraphBuilderCallback;
+interface ICaptureGraphBuilder;
+interface ICaptureGraphBuilder2;
+interface IConfigAviMux;
+interface IConfigInterleaving;
+interface IDecimateVideoImage;
+interface IDrawVideoImage;
+interface IEnumRegFilters;
+interface IEnumStreamIdMap;
+interface IFileSourceFilter;
+interface IFileSinkFilter;
+interface IFileSinkFilter2;
+interface IFilterMapper;
+interface IFilterMapper2;
+interface IGraphBuilder;
+interface IKsPropertySet;
+interface IMediaEventSink;
+interface IMpeg2Demultiplexer;
+interface IMPEG2StreamIdMap;
+interface IOverlay;
+interface IOverlayNotify;
+interface IOverlayNotify2;
+interface IQualityControl;
+interface ISeekingPassThru;
+
+typedef struct
+{
+    CLSID Clsid;
+    LPWSTR Name;
+} REGFILTER;
+
+[
+object,
+uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IEnumRegFilters : IUnknown
+{
+    HRESULT Next
+        ( [in]  ULONG cFilters,
+          [out] REGFILTER ** apRegFilter,
+          [out] ULONG * pcFetched
+        );
+
+    HRESULT Skip(
+        [in] ULONG cFilters
+    );
+
+    HRESULT Reset(void);
+
+    HRESULT Clone(
+        [out] IEnumRegFilters **ppEnum
+    );
+}
+
+
+typedef IEnumRegFilters *PENUMREGFILTERS;
+
+[
+object,
+uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IFilterMapper : IUnknown
+{
+    enum { MERIT_PREFERRED     = 0x800000,
+           MERIT_NORMAL        = 0x600000,
+           MERIT_UNLIKELY      = 0x400000,
+           MERIT_DO_NOT_USE    = 0x200000,
+           MERIT_SW_COMPRESSOR = 0x100000,
+           MERIT_HW_COMPRESSOR = 0x100050
+         };
+
+    HRESULT RegisterFilter
+        ( [in] CLSID   clsid,
+          [in] LPCWSTR Name,
+          [in] DWORD   dwMerit
+        );
+
+    HRESULT RegisterFilterInstance
+        ( [in]  CLSID  clsid,
+          [in]  LPCWSTR Name,
+          [out] CLSID *MRId
+        );
+
+
+    HRESULT RegisterPin
+        ( [in] CLSID   Filter,
+          [in] LPCWSTR Name,
+          [in] BOOL    bRendered,
+          [in] BOOL    bOutput,
+          [in] BOOL    bZero,
+          [in] BOOL    bMany,
+          [in] CLSID   ConnectsToFilter,
+          [in] LPCWSTR ConnectsToPin
+        );
+
+    HRESULT RegisterPinType
+        ( [in] CLSID   clsFilter,
+          [in] LPCWSTR strName,
+          [in] CLSID   clsMajorType,
+          [in] CLSID   clsSubType
+        );
+
+
+    HRESULT UnregisterFilter
+        ( [in] CLSID  Filter
+        );
+
+
+    HRESULT UnregisterFilterInstance
+        ( [in] CLSID  MRId
+        );
+
+
+    HRESULT UnregisterPin
+        ( [in] CLSID   Filter,
+          [in] LPCWSTR Name
+        );
+
+    HRESULT EnumMatchingFilters
+       ( [out] IEnumRegFilters **ppEnum,
+         [in]  DWORD dwMerit,
+         [in]  BOOL  bInputNeeded,
+         [in]  CLSID clsInMaj,
+         [in]  CLSID clsInSub,
+         [in]  BOOL  bRender,
+         [in]  BOOL  bOututNeeded,
+         [in]  CLSID clsOutMaj,
+         [in]  CLSID clsOutSub
+       );
+
+}
+
+typedef struct
+{
+    const CLSID * clsMajorType;
+    const CLSID * clsMinorType;
+} REGPINTYPES;
+
+typedef struct
+{
+    LPWSTR           strName;
+    BOOL             bRendered;
+    BOOL             bOutput;
+    BOOL             bZero;
+    BOOL             bMany;
+    const CLSID *    clsConnectsToFilter;
+    const WCHAR *    strConnectsToPin;
+    UINT             nMediaTypes;
+    const REGPINTYPES * lpMediaType;
+} REGFILTERPINS;
+
+typedef struct
+{
+    CLSID clsMedium;
+    DWORD dw1;
+    DWORD dw2;
+} REGPINMEDIUM;
+
+enum
+{
+    REG_PINFLAG_B_ZERO = 0x1,
+    REG_PINFLAG_B_RENDERER = 0x2,
+    REG_PINFLAG_B_MANY = 0x4,
+    REG_PINFLAG_B_OUTPUT = 0x8
+};
+
+
+typedef struct
+{
+    DWORD dwFlags;
+    UINT             cInstances;
+    UINT             nMediaTypes;
+    [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType;
+    UINT             nMediums;
+    [size_is(nMediums)] const REGPINMEDIUM *lpMedium;
+    const CLSID      *clsPinCategory;
+} REGFILTERPINS2;
+
+typedef struct
+{
+    DWORD dwVersion;
+    DWORD dwMerit;
+    [switch_is(dwVersion)] [switch_type(DWORD)] union
+    {
+        [case(1)]
+            struct
+            {
+                ULONG cPins;
+                [size_is(cPins)] const REGFILTERPINS *rgPins;
+            };
+
+        [case(2)]
+            struct
+            {
+                ULONG cPins2;
+                [size_is(cPins2)] const REGFILTERPINS2 *rgPins2;
+            };
+
+        [default]
+            ;
+    };
+
+} REGFILTER2;
+
+
+[
+object,
+uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375),
+pointer_default(unique)
+]
+interface IFilterMapper2 : IUnknown
+{
+    HRESULT CreateCategory
+        ( [in] REFCLSID clsidCategory,
+          [in] DWORD dwCategoryMerit,
+          [in] LPCWSTR Description
+          );
+
+    HRESULT UnregisterFilter
+        ( [in] const CLSID *pclsidCategory,
+          [in] LPCOLESTR szInstance,
+          [in] REFCLSID Filter
+        );
+
+    HRESULT RegisterFilter
+        ( [in] REFCLSID clsidFilter,
+          [in] LPCWSTR Name,
+          [in, out] IMoniker **ppMoniker,
+          [in] const CLSID *pclsidCategory,
+          [in] LPCOLESTR szInstance,
+          [in] const REGFILTER2 *prf2
+        );
+
+    HRESULT EnumMatchingFilters
+       ( [out] IEnumMoniker **ppEnum,
+         [in]  DWORD dwFlags,
+         [in]  BOOL bExactMatch,
+         [in]  DWORD dwMerit,
+         [in]  BOOL  bInputNeeded,
+         [in]  DWORD cInputTypes,
+         [size_is(cInputTypes*2)]  const GUID *pInputTypes,
+         [in]  const REGPINMEDIUM *pMedIn,
+         [in]  const CLSID *pPinCategoryIn,
+         [in]  BOOL  bRender,
+         [in]  BOOL  bOutputNeeded,
+         [in]  DWORD cOutputTypes,
+         [size_is(cOutputTypes*2)]  const GUID *pOutputTypes,
+         [in]  const REGPINMEDIUM *pMedOut,
+         [in]  const CLSID *pPinCategoryOut
+       );
+}
+
+[
+object,
+uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375),
+pointer_default(unique)
+]
+interface IFilterMapper3 : IFilterMapper2
+{
+    HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum );
+}
+
+typedef enum tagQualityMessageType
+{
+    Famine,
+    Flood
+} QualityMessageType;
+
+typedef struct tagQuality
+{
+    QualityMessageType Type;
+    LONG               Proportion;
+    REFERENCE_TIME       Late;
+    REFERENCE_TIME       TimeStamp;
+} Quality;
+
+typedef IQualityControl *PQUALITYCONTROL;
+
+[
+object,
+uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IQualityControl : IUnknown
+{
+    HRESULT Notify
+        ( [in] IBaseFilter * pSelf,
+          [in] Quality q
+        );
+
+    HRESULT SetSink
+        ( [in] IQualityControl * piqc
+        );
+}
+
+enum
+{
+    CK_NOCOLORKEY  = 0x0,
+    CK_INDEX       = 0x1,
+    CK_RGB         = 0x2
+};
+
+typedef struct tagCOLORKEY
+{
+    DWORD    KeyType;
+    DWORD    PaletteIndex;
+    COLORREF LowColorValue;
+    COLORREF HighColorValue;
+} COLORKEY;
+
+enum
+{
+    ADVISE_NONE = 0x0,
+    ADVISE_CLIPPING = 0x1,
+    ADVISE_PALETTE = 0x2,
+    ADVISE_COLORKEY = 0x4,
+    ADVISE_POSITION = 0x8,
+    ADVISE_DISPLAY_CHANGE = 0x10
+};
+
+const DWORD ADVISE_ALL = ADVISE_CLIPPING |
+                         ADVISE_PALETTE  |
+                         ADVISE_COLORKEY |
+                         ADVISE_POSITION;
+
+const DWORD ADVISE_ALL2 = ADVISE_ALL |
+                          ADVISE_DISPLAY_CHANGE;
+
+cpp_quote("#ifndef _WINGDI_")
+
+/* already defined in wingdi.h, but needed for WIDL */
+
+typedef struct _RGNDATAHEADER
+{
+    DWORD dwSize;
+    DWORD iType;
+    DWORD nCount;
+    DWORD nRgnSize;
+    RECT  rcBound;
+} RGNDATAHEADER;
+
+typedef struct _RGNDATA
+{
+    RGNDATAHEADER rdh;
+    char Buffer[1];
+} RGNDATA;
+
+cpp_quote("#endif /* _WINGDI_ */")
+
+[
+object,
+local,
+uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IOverlayNotify : IUnknown
+{
+    HRESULT OnPaletteChange(
+        [in] DWORD dwColors,
+        [in] const PALETTEENTRY *pPalette);
+
+    HRESULT OnClipChange(
+        [in] const RECT *pSourceRect,
+        [in] const RECT *pDestinationRect,
+        [in] const RGNDATA *pRgnData);
+
+    HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey);
+
+    HRESULT OnPositionChange([in] const RECT *pSourceRect,
+                             [in] const RECT *pDestinationRect);
+}
+
+typedef IOverlayNotify *POVERLAYNOTIFY;
+
+cpp_quote("#if 0")
+typedef HANDLE HMONITOR;
+cpp_quote("#endif /* 0 */")
+
+[
+object,
+local,
+uuid(680EFA10-D535-11D1-87C8-00A0C9223196),
+pointer_default(unique)
+]
+interface IOverlayNotify2 : IOverlayNotify
+{
+    HRESULT OnDisplayChange(
+        HMONITOR hMonitor);
+}
+
+typedef IOverlayNotify2 *POVERLAYNOTIFY2;
+
+[
+object,
+local,
+uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IOverlay : IUnknown
+{
+    HRESULT GetPalette(
+        [out] DWORD *pdwColors,
+        [out] PALETTEENTRY **ppPalette);
+
+    HRESULT SetPalette(
+        [in] DWORD dwColors,
+        [in] PALETTEENTRY *pPalette);
+
+    HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey);
+
+    HRESULT GetColorKey([out] COLORKEY *pColorKey);
+
+    HRESULT SetColorKey([in,out] COLORKEY *pColorKey);
+
+    HRESULT GetWindowHandle([out] HWND *pHwnd);
+
+    HRESULT GetClipList([out] RECT *pSourceRect,
+                        [out] RECT *pDestinationRect,
+                        [out] RGNDATA **ppRgnData);
+
+    HRESULT GetVideoPosition([out] RECT *pSourceRect,
+                             [out] RECT *pDestinationRect);
+
+    HRESULT Advise(
+        [in] IOverlayNotify *pOverlayNotify,
+        [in] DWORD dwInterests);
+
+    HRESULT Unadvise();
+}
+
+typedef IOverlay *POVERLAY;
+
+[
+object,
+uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMediaEventSink : IUnknown
+{
+    HRESULT Notify(
+        [in] LONG EventCode,
+        [in] LONG_PTR EventParam1,
+        [in] LONG_PTR EventParam2
+    );
+}
+
+typedef IMediaEventSink *PMEDIAEVENTSINK;
+
+[
+object,
+uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IFileSourceFilter : IUnknown
+{
+    HRESULT Load(
+        [in] LPCOLESTR pszFileName,
+        [in, unique] const AM_MEDIA_TYPE *pmt
+    );
+
+    HRESULT GetCurFile(
+        [out] LPOLESTR *ppszFileName,
+        [out] AM_MEDIA_TYPE *pmt
+    );
+}
+
+typedef IFileSourceFilter *PFILTERFILESOURCE;
+
+[
+object,
+uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6),
+pointer_default(unique)
+]
+interface IFileSinkFilter : IUnknown
+{
+    HRESULT SetFileName(
+        [in] LPCOLESTR pszFileName,
+        [in, unique] const AM_MEDIA_TYPE *pmt
+    );
+
+    HRESULT GetCurFile(
+        [out] LPOLESTR *ppszFileName,
+        [out] AM_MEDIA_TYPE *pmt
+    );
+}
+
+typedef IFileSinkFilter *PFILTERFILESINK;
+
+[
+        object,
+        uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86),
+        pointer_default(unique)
+]
+interface IFileSinkFilter2 : IFileSinkFilter
+{
+    HRESULT SetMode(
+        [in] DWORD dwFlags
+    );
+
+    HRESULT GetMode(
+        [out] DWORD *pdwFlags
+    );
+}
+
+typedef IFileSinkFilter2 *PFILESINKFILTER2;
+
+typedef enum
+{
+    AM_FILE_OVERWRITE = 0x00000001,
+} AM_FILESINK_FLAGS;
+
+[
+object,
+uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IGraphBuilder : IFilterGraph
+{
+    HRESULT Connect
+        ( [in] IPin * ppinOut,
+          [in] IPin * ppinIn
+        );
+
+    HRESULT Render
+        ( [in] IPin * ppinOut
+        );
+
+    HRESULT RenderFile
+        ( [in] LPCWSTR lpcwstrFile,
+          [in, unique] LPCWSTR lpcwstrPlayList
+        );
+
+    HRESULT AddSourceFilter
+        ( [in]      LPCWSTR lpcwstrFileName,
+          [in, unique]      LPCWSTR lpcwstrFilterName,
+          [out]     IBaseFilter* *ppFilter
+        );
+
+    HRESULT SetLogFile
+        ( [in]      DWORD_PTR hFile
+        );
+
+    HRESULT Abort();
+
+    HRESULT ShouldOperationContinue();
+}
+
+
+[
+    object,
+    uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5),
+    pointer_default(unique)
+]
+interface ICaptureGraphBuilder : IUnknown {
+
+    HRESULT SetFiltergraph(
+        [in] IGraphBuilder *pfg);
+
+    HRESULT GetFiltergraph(
+        [out] IGraphBuilder **ppfg);
+
+    HRESULT SetOutputFileName(
+        [in] const GUID *pType,
+        [in] LPCOLESTR lpstrFile,
+        [out] IBaseFilter **ppf,
+        [out] IFileSinkFilter **ppSink);
+
+    [local] HRESULT FindInterface(
+        [in, unique] const GUID *pCategory,
+        [in] IBaseFilter *pf,
+        [in] REFIID riid,
+        [out] void **ppint);
+
+    [call_as(FindInterface)] HRESULT RemoteFindInterface(
+        [in, unique] const GUID *pCategory,
+        [in] IBaseFilter *pf,
+        [in] REFIID riid,
+        [out] IUnknown **ppint);
+
+    HRESULT RenderStream(
+        [in] const GUID *pCategory,
+        [in] IUnknown *pSource,
+        [in] IBaseFilter *pfCompressor,
+        [in] IBaseFilter *pfRenderer);
+
+    HRESULT ControlStream(
+        [in] const GUID *pCategory,
+        [in] IBaseFilter *pFilter,
+        [in] REFERENCE_TIME *pstart,
+        [in] REFERENCE_TIME *pstop,
+        [in] WORD wStartCookie,
+        [in] WORD wStopCookie);
+
+    HRESULT AllocCapFile(
+        [in] LPCOLESTR lpstr,
+        [in] DWORDLONG dwlSize);
+
+    HRESULT CopyCaptureFile(
+        [in] LPOLESTR lpwstrOld,
+        [in] LPOLESTR lpwstrNew,
+        [in] int fAllowEscAbort,
+        [in] IAMCopyCaptureFileProgress *pCallback);
+}
+
+[
+object,
+uuid(670d1d20-a068-11d0-b3f0-00aa003761c5),
+pointer_default(unique)
+]
+interface IAMCopyCaptureFileProgress : IUnknown
+{
+    HRESULT Progress(
+        [in] int iProgress);
+}
+
+[
+    object,
+    uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D),
+    pointer_default(unique)
+]
+interface ICaptureGraphBuilder2 : IUnknown
+{
+    HRESULT SetFiltergraph(
+        [in] IGraphBuilder *pfg);
+
+    HRESULT GetFiltergraph(
+        [out] IGraphBuilder **ppfg);
+
+    HRESULT SetOutputFileName(
+        [in] const GUID *pType,
+        [in] LPCOLESTR lpstrFile,
+        [out] IBaseFilter **ppf,
+        [out] IFileSinkFilter **ppSink);
+
+    [local] HRESULT FindInterface(
+        [in] const GUID *pCategory,
+        [in] const GUID *pType,
+        [in] IBaseFilter *pf,
+        [in] REFIID riid,
+        [out] void **ppint);
+
+    [call_as(FindInterface)] HRESULT RemoteFindInterface(
+        [in] const GUID *pCategory,
+        [in] const GUID *pType,
+        [in] IBaseFilter *pf,
+        [in] REFIID riid,
+        [out] IUnknown **ppint);
+
+    HRESULT RenderStream(
+        [in] const GUID *pCategory,
+        [in] const GUID *pType,
+        [in] IUnknown *pSource,
+        [in] IBaseFilter *pfCompressor,
+        [in] IBaseFilter *pfRenderer);
+
+    HRESULT ControlStream(
+        [in] const GUID *pCategory,
+        [in] const GUID *pType,
+        [in] IBaseFilter *pFilter,
+        [in] REFERENCE_TIME *pstart,
+        [in] REFERENCE_TIME *pstop,
+        [in] WORD wStartCookie,
+        [in] WORD wStopCookie);
+
+    HRESULT AllocCapFile(
+        [in] LPCOLESTR lpstr,
+        [in] DWORDLONG dwlSize);
+
+    HRESULT CopyCaptureFile(
+        [in] LPOLESTR lpwstrOld,
+        [in] LPOLESTR lpwstrNew,
+        [in] int fAllowEscAbort,
+        [in] IAMCopyCaptureFileProgress *pCallback);
+
+    HRESULT FindPin(
+        [in] IUnknown *pSource,
+        [in] PIN_DIRECTION pindir,
+        [in] const GUID *pCategory,
+        [in] const GUID *pType,
+        [in] BOOL fUnconnected,
+        [in] int num,
+        [out] IPin **ppPin);
+}
+
+enum _AM_RENSDEREXFLAGS
+{
+    AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01
+};
+
+[
+    object,
+    uuid(36b73882-c2c8-11cf-8b46-00805f6cef60),
+    pointer_default(unique)
+]
+interface IFilterGraph2: IGraphBuilder
+{
+    HRESULT AddSourceFilterForMoniker(
+          [in] IMoniker *pMoniker,
+          [in] IBindCtx *pCtx,
+          [in, unique] LPCWSTR lpcwstrFilterName,
+          [out] IBaseFilter **ppFilter
+    );
+
+    HRESULT ReconnectEx
+        ( [in] IPin * ppin,
+          [in, unique] const AM_MEDIA_TYPE *pmt
+        );
+
+    HRESULT RenderEx( [in] IPin *pPinOut,
+                      [in] DWORD dwFlags,
+                      [in, out] DWORD *pvContext
+                    );
+}
+
+[
+    object,
+    local,
+    uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770),
+    pointer_default(unique)
+]
+interface IStreamBuilder : IUnknown
+{
+    HRESULT Render
+        ( [in] IPin * ppinOut,
+          [in] IGraphBuilder * pGraph
+        );
+
+    HRESULT Backout
+        ( [in] IPin * ppinOut,
+          [in] IGraphBuilder * pGraph
+        );
+}
+
+
+/*****************************************************************************
+ * IAMStreamConfig interface
+ */
+[
+    object,
+    uuid(c6e13340-30ac-11d0-a18c-00a0c9118956),
+    pointer_default(unique)
+]
+interface IAMStreamConfig : IUnknown
+{
+    typedef struct _VIDEO_STREAM_CONFIG_CAPS {
+        GUID  guid;
+        ULONG VideoStandard;
+        SIZE  InputSize;
+        SIZE  MinCroppingSize;
+        SIZE  MaxCroppingSize;
+        int   CropGranularityX;
+        int   CropGranularityY;
+        int   CropAlignX;
+        int   CropAlignY;
+        SIZE  MinOutputSize;
+        SIZE  MaxOutputSize;
+        int   OutputGranularityX;
+        int   OutputGranularityY;
+        int   StretchTapsX;
+        int   StretchTapsY;
+        int   ShrinkTapsX;
+        int   ShrinkTapsY;
+        LONGLONG MinFrameInterval;
+        LONGLONG MaxFrameInterval;
+        LONG  MinBitsPerSecond;
+        LONG  MaxBitsPerSecond;
+    } VIDEO_STREAM_CONFIG_CAPS;
+
+    typedef struct _AUDIO_STREAM_CONFIG_CAPS {
+        GUID guid;
+        ULONG MinimumChannels;
+        ULONG MaximumChannels;
+        ULONG ChannelsGranularity;
+        ULONG MinimumBitsPerSample;
+        ULONG MaximumBitsPerSample;
+        ULONG BitsPerSampleGranularity;
+        ULONG MinimumSampleFrequency;
+        ULONG MaximumSampleFrequency;
+        ULONG SampleFrequencyGranularity;
+    } AUDIO_STREAM_CONFIG_CAPS;
+
+    HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt);
+    HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt);
+    HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize);
+    HRESULT GetStreamCaps( [in] int iIndex, [out] AM_MEDIA_TYPE **pmt,
+                          [out] BYTE *pSCC);
+}
+
+
+typedef enum tagVideoProcAmpProperty
+{
+    VideoProcAmp_Brightness,
+    VideoProcAmp_Contrast,
+    VideoProcAmp_Hue,
+    VideoProcAmp_Saturation,
+    VideoProcAmp_Sharpness,
+    VideoProcAmp_Gamma,
+    VideoProcAmp_ColorEnable,
+    VideoProcAmp_WhiteBalance,
+    VideoProcAmp_BacklightCompensation,
+    VideoProcAmp_Gain
+} VideoProcAmpProperty;
+
+typedef enum tagVideoProcAmpFlags
+{
+    VideoProcAmp_Flags_Auto   = 0x0001,
+    VideoProcAmp_Flags_Manual = 0x0002,
+} VideoProcAmpFlags;
+
+/*****************************************************************************
+ * IAMVideoProcAmp interface
+ */
+[
+    object,
+    uuid(c6e13360-30ac-11d0-a18c-00a0c9118956),
+    pointer_default(unique)
+]
+interface IAMVideoProcAmp : IUnknown
+{
+    HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax,
+                     [out] LONG *pSteppingDelta, [out] LONG *pDefault,
+                     [out] LONG *pCapsFlags);
+    HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags);
+    HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags);
+}
+
+
+[
+        object,
+        uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+]
+interface IAsyncReader : IUnknown
+{
+    HRESULT RequestAllocator(
+                [in]  IMemAllocator* pPreferred,
+                [in]  ALLOCATOR_PROPERTIES* pProps,
+                [out] IMemAllocator ** ppActual);
+
+    HRESULT Request(
+                [in] IMediaSample* pSample,
+                [in] DWORD_PTR dwUser);
+
+    HRESULT WaitForNext(
+                [in]  DWORD dwTimeout,
+                [out] IMediaSample** ppSample,
+                [out] DWORD_PTR * pdwUser);
+
+    HRESULT SyncReadAligned(
+                [in] IMediaSample* pSample);
+
+    HRESULT SyncRead(
+                [in]  LONGLONG llPosition,
+                [in]  LONG lLength,
+                [out, size_is(lLength)]
+                      BYTE* pBuffer);
+
+    HRESULT Length(
+                [out] LONGLONG* pTotal,
+                [out] LONGLONG* pAvailable);
+
+    HRESULT BeginFlush(void);
+
+    HRESULT EndFlush(void);
+}
+
+
+[
+    object,
+    uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770),
+    pointer_default(unique)
+]
+interface IGraphVersion : IUnknown
+{
+    HRESULT QueryVersion(LONG* pVersion);
+}
+
+[
+    object,
+    uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770),
+    pointer_default(unique)
+]
+interface IResourceConsumer : IUnknown
+{
+    HRESULT AcquireResource(
+        [in] LONG idResource);
+
+    HRESULT ReleaseResource(
+        [in] LONG idResource);
+}
+
+
+[
+    object,
+    uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770),
+    pointer_default(unique)
+]
+interface IResourceManager : IUnknown
+{
+    HRESULT Register(
+        [in] LPCWSTR pName,
+        [in] LONG   cResource,
+        [out] LONG* plToken
+        );
+
+    HRESULT RegisterGroup(
+        [in] LPCWSTR pName,
+        [in] LONG cResource,
+        [in, size_is(cResource)]
+             LONG* palTokens,
+        [out] LONG* plToken
+        );
+
+    HRESULT RequestResource(
+        [in] LONG idResource,
+        [in] IUnknown* pFocusObject,
+        [in] IResourceConsumer* pConsumer
+        );
+
+    HRESULT NotifyAcquire(
+        [in] LONG idResource,
+        [in] IResourceConsumer* pConsumer,
+        [in] HRESULT hr);
+
+    HRESULT NotifyRelease(
+        [in] LONG idResource,
+        [in] IResourceConsumer* pConsumer,
+        [in] BOOL bStillWant);
+
+    HRESULT CancelRequest(
+        [in] LONG idResource,
+        [in] IResourceConsumer* pConsumer);
+
+    HRESULT SetFocus(
+        [in] IUnknown* pFocusObject);
+
+    HRESULT ReleaseFocus(
+        [in] IUnknown* pFocusObject);
+
+}
+
+cpp_quote("#ifndef _IKsPropertySet_")
+cpp_quote("#define _IKsPropertySet_")
+cpp_quote("#define KSPROPERTY_SUPPORT_GET  1")
+cpp_quote("#define KSPROPERTY_SUPPORT_SET  2")
+
+[
+    object,
+    uuid(31efac30-515c-11d0-a9aa-00aa0061be93),
+    pointer_default(unique),
+    local
+]
+interface IKsPropertySet : IUnknown
+{
+    HRESULT Set( [in] REFGUID guidPropSet,
+                 [in] DWORD dwPropID,
+                 [in, size_is(cbInstanceData)] LPVOID pInstanceData,
+                 [in] DWORD cbInstanceData,
+                 [in, size_is(cbPropData)] LPVOID pPropData,
+                 [in] DWORD cbPropData );
+
+    HRESULT Get( [in] REFGUID guidPropSet,
+                 [in] DWORD dwPropID,
+                 [in, size_is(cbInstanceData)] LPVOID pInstanceData,
+                 [in] DWORD cbInstanceData,
+                 [out, size_is(cbPropData)] LPVOID pPropData,
+                 [in] DWORD cbPropData,
+                 [out] DWORD *pcbReturned );
+
+    HRESULT QuerySupported( [in] REFGUID guidPropSet,
+                            [in] DWORD dwPropID,
+                            [out] DWORD *pTypeSupport);
+}
+cpp_quote("#endif /* _IKsPropertySet_ */")
+
+[
+    object,
+    uuid(36b73883-c2c8-11cf-8b46-00805f6cef60),
+    pointer_default(unique)
+]
+interface ISeekingPassThru : IUnknown
+{
+    HRESULT Init( [in] BOOL bSupportRendering, [in] IPin *pPin);
+}
+
+enum _AM_FILTER_MISC_FLAGS
+{
+    AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,
+    AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2
+};
+
+[
+    local,
+    object,
+    uuid(2dd74950-a890-11d1-abe8-00a0c905f375),
+    pointer_default(unique)
+]
+interface IAMFilterMiscFlags : IUnknown
+{
+    ULONG GetMiscFlags();
+};
+
+[
+    local,
+    object,
+    uuid(4995f511-9ddb-4f12-bd3b-f04611807b79),
+    pointer_default(unique)
+]
+interface IAMGraphBuilderCallback : IUnknown
+{
+    HRESULT SelectedFilter(
+        [in] IMoniker *pMon);
+
+    HRESULT CreatedFilter(
+        [in] IBaseFilter *pFil);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h
new file mode 100644
index 0000000..065c4dd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h
@@ -0,0 +1,333 @@
+/*
+ * Compilers that uses ILP32, LP64 or P64 type models
+ * for both Win32 and Win64 are supported by this file.
+ *
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_BASETSD_H
+#define __WINE_BASETSD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*
+ * Win32 was easy to implement under Unix since most 32-bit Unices use the same
+ * type model (ILP32) as Win32, where int, long and pointer are 32-bit.
+ *
+ * Win64, however, can cause some problems. Most 64-bit Unices use the LP64 type
+ * model where int is 32-bit and long and pointer are 64-bit. Win64 on the other
+ * hand uses the LLP64 type model where int and long are 32 bit and pointer is
+ * 64-bit.
+ */
+
+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__aarch64__)) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+/* Type model independent typedefs */
+/* The __intXX types are native types defined by the MS C compiler.
+ * Apps that make use of them before they get defined here, can
+ * simply add to the command line:
+ *    -D__int8=char -D__int16=short -D__int32=int "-D__int64=long long"
+ */
+#if !defined(_MSC_VER) && !defined(__WIDL__)
+#  ifndef __int8
+#    define __int8  char
+#  endif
+#  ifndef __int16
+#    define __int16 short
+#  endif
+#  ifndef __int32
+#    define __int32 int
+#  endif
+#  ifndef __int64
+#    if defined(_WIN64) && !defined(__MINGW64__)
+#      define __int64 long
+#    else
+#      define __int64 long long
+#    endif
+#  endif
+#endif /* !defined(_MSC_VER) */
+
+/* FIXME: DECLSPEC_ALIGN should be declared only in winnt.h, but we need it here too */
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+#  define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+#  define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+typedef signed char      INT8, *PINT8;
+typedef signed short     INT16, *PINT16;
+typedef signed int       INT32, *PINT32;
+typedef unsigned char    UINT8, *PUINT8;
+typedef unsigned short   UINT16, *PUINT16;
+typedef unsigned int     UINT32, *PUINT32;
+typedef signed int       LONG32, *PLONG32;
+typedef unsigned int     ULONG32, *PULONG32;
+typedef unsigned int     DWORD32, *PDWORD32;
+
+#ifdef _MSC_VER
+typedef signed __int64   INT64, *PINT64;
+typedef unsigned __int64 UINT64, *PUINT64;
+typedef signed __int64   LONG64, *PLONG64;
+typedef unsigned __int64 ULONG64, *PULONG64;
+typedef unsigned __int64 DWORD64, *PDWORD64;
+#else
+typedef signed __int64   DECLSPEC_ALIGN(8) INT64, *PINT64;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) UINT64, *PUINT64;
+typedef signed __int64   DECLSPEC_ALIGN(8) LONG64, *PLONG64;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONG64, *PULONG64;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) DWORD64, *PDWORD64;
+#endif
+
+/* Basic pointer-sized integer types */
+
+#if defined(__midl) || defined(__WIDL__)
+
+typedef /* [public] */ signed __int3264   INT_PTR, *PINT_PTR;
+typedef /* [public] */ signed __int3264   LONG_PTR, *PLONG_PTR;
+typedef /* [public] */ unsigned __int3264 UINT_PTR, *PUINT_PTR;
+typedef /* [public] */ unsigned __int3264 ULONG_PTR, *PULONG_PTR;
+typedef ULONG_PTR                   DWORD_PTR, *PDWORD_PTR;
+
+#elif defined(_WIN64)
+
+#define __int3264 __int64
+
+typedef signed __int64   INT_PTR, *PINT_PTR;
+typedef signed __int64   LONG_PTR, *PLONG_PTR;
+typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
+typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
+typedef ULONG_PTR        DWORD_PTR, *PDWORD_PTR;
+
+#else
+
+#define __int3264 __int32
+
+typedef long          INT_PTR, *PINT_PTR;
+typedef unsigned long UINT_PTR, *PUINT_PTR;
+typedef long          LONG_PTR, *PLONG_PTR;
+typedef unsigned long ULONG_PTR, *PULONG_PTR;
+typedef ULONG_PTR     DWORD_PTR, *PDWORD_PTR;
+
+#endif
+
+/* Win32 or Win64 dependent typedef/defines. */
+
+#ifdef _WIN64
+
+#define MAXINT_PTR 0x7fffffffffffffff
+#define MININT_PTR 0x8000000000000000
+#define MAXUINT_PTR 0xffffffffffffffff
+
+typedef __int64 SHANDLE_PTR;
+typedef unsigned __int64 HANDLE_PTR;
+typedef int HALF_PTR, *PHALF_PTR;
+typedef unsigned int UHALF_PTR, *PUHALF_PTR;
+
+#define MAXHALF_PTR 0x7fffffff
+#define MINHALF_PTR 0x80000000
+#define MAXUHALF_PTR 0xffffffff
+
+#if !defined(__midl) && !defined(__WIDL__)
+
+static inline ULONG32 HandleToULong(const void *h)
+{
+    return (ULONG32)(ULONG_PTR)h;
+}
+
+static inline LONG32 HandleToLong(const void *h)
+{
+    return (LONG32)(LONG_PTR)h;
+}
+
+static inline void *ULongToHandle(ULONG32 ul)
+{
+    return (void *)(ULONG_PTR)ul;
+}
+
+static inline void *LongToHandle(LONG32 l)
+{
+    return (void *)(LONG_PTR)l;
+}
+
+static inline ULONG32 PtrToUlong(const void *p)
+{
+    return (ULONG32)(ULONG_PTR)p;
+}
+
+static inline LONG32 PtrToLong(const void *p)
+{
+    return (LONG32)(LONG_PTR)p;
+}
+
+static inline UINT32 PtrToUint(const void *p)
+{
+    return (UINT32)(UINT_PTR)p;
+}
+
+static inline INT32 PtrToInt(const void *p)
+{
+    return (INT32)(INT_PTR)p;
+}
+
+static inline UINT16 PtrToUshort(const void *p)
+{
+    return (UINT16)(ULONG_PTR)p;
+}
+
+static inline INT16 PtrToShort(const void *p)
+{
+    return (INT16)(LONG_PTR)p;
+}
+
+static inline void *IntToPtr(INT32 i)
+{
+    return (void *)(INT_PTR)i;
+}
+
+static inline void *UIntToPtr(UINT32 ui)
+{
+    return (void *)(UINT_PTR)ui;
+}
+
+static inline void *LongToPtr(LONG32 l)
+{
+    return (void *)(LONG_PTR)l;
+}
+
+static inline void *ULongToPtr(ULONG32 ul)
+{
+    return (void *)(ULONG_PTR)ul;
+}
+
+#endif  /* !__midl && !__WIDL__ */
+
+#else /* FIXME: defined(_WIN32) */
+
+#define MAXINT_PTR 0x7fffffff
+#define MININT_PTR 0x80000000
+#define MAXUINT_PTR 0xffffffff
+
+typedef long SHANDLE_PTR;
+typedef unsigned long HANDLE_PTR;
+typedef signed short HALF_PTR, *PHALF_PTR;
+typedef unsigned short UHALF_PTR, *PUHALF_PTR;
+
+#define MAXUHALF_PTR 0xffff
+#define MAXHALF_PTR 0x7fff
+#define MINHALF_PTR 0x8000
+
+#define HandleToULong(h)        ((ULONG)(ULONG_PTR)(h))
+#define HandleToLong(h)         ((LONG)(LONG_PTR)(h))
+#define ULongToHandle(ul)       ((HANDLE)(ULONG_PTR)(ul))
+#define LongToHandle(l)         ((HANDLE)(LONG_PTR)(l))
+#define PtrToUlong(p)           ((ULONG)(ULONG_PTR)(p))
+#define PtrToLong(p)            ((LONG)(LONG_PTR)(p))
+#define PtrToUint(p)            ((UINT)(UINT_PTR)(p))
+#define PtrToInt(p)             ((INT)(INT_PTR)(p))
+#define PtrToUshort(p)          ((USHORT)(ULONG_PTR)(p))
+#define PtrToShort(p)           ((SHORT)(LONG_PTR)(p))
+#define IntToPtr(i)             ((void *)(INT_PTR)((INT)i))
+#define UIntToPtr(ui)           ((void *)(UINT_PTR)((UINT)ui))
+#define LongToPtr(l)            ((void *)(LONG_PTR)((LONG)l))
+#define ULongToPtr(ul)          ((void *)(ULONG_PTR)((ULONG)ul))
+
+#endif /* defined(_WIN64) || defined(_WIN32) */
+
+#define HandleToUlong(h)        HandleToULong(h)
+#define UlongToHandle(ul)       ULongToHandle(ul)
+#define UintToPtr(ui)           UIntToPtr(ui)
+#define UlongToPtr(ul)          ULongToPtr(ul)
+
+typedef LONG_PTR SSIZE_T, *PSSIZE_T;
+typedef ULONG_PTR SIZE_T, *PSIZE_T;
+
+typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
+
+/* Some Wine-specific definitions */
+
+/* Architecture dependent settings. */
+/* These are hardcoded to avoid dependencies on config.h in Winelib apps. */
+#if defined(__i386__)
+# undef  WORDS_BIGENDIAN
+# undef  BITFIELDS_BIGENDIAN
+# define ALLOW_UNALIGNED_ACCESS
+#elif defined(__x86_64__)
+# undef  WORDS_BIGENDIAN
+# undef  BITFIELDS_BIGENDIAN
+# define ALLOW_UNALIGNED_ACCESS
+#elif defined(__sparc__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__powerpc__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__ALPHA__)
+# undef  WORDS_BIGENDIAN
+# undef  BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__ARMEB__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__ARMEL__) || defined(__arm__)
+# undef  WORDS_BIGENDIAN
+# undef  BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__AARCH64EB__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__AARCH64EL__) || defined(__aarch64__)
+# undef  WORDS_BIGENDIAN
+# undef  BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__MIPSEB__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif defined(__MIPSEL__)
+# undef  WORDS_BIGENDIAN
+# undef  BITFIELDS_BIGENDIAN
+# undef  ALLOW_UNALIGNED_ACCESS
+#elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl)
+# error Unknown CPU architecture!
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* !defined(__WINE_BASETSD_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h
new file mode 100644
index 0000000..2f9b58e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 1998 Anders Norlander
+ * Copyright (C) 2005 Steven Edwards
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _BASETYPS_H_
+#define _BASETYPS_H_
+
+#ifdef __cplusplus
+# define EXTERN_C extern "C"
+#else
+# define EXTERN_C extern
+#endif
+
+#define STDMETHODCALLTYPE  __stdcall
+#define STDMETHODVCALLTYPE __cdecl
+#define STDAPICALLTYPE     __stdcall
+#define STDAPIVCALLTYPE    __cdecl
+#define STDAPI             EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(t)         EXTERN_C t STDAPICALLTYPE
+#define STDMETHODIMP       HRESULT STDMETHODCALLTYPE
+#define STDMETHODIMP_(t)   t STDMETHODCALLTYPE
+#define STDAPIV            EXTERN_C HRESULT STDAPIVCALLTYPE
+#define STDAPIV_(t)        EXTERN_C t STDAPIVCALLTYPE
+#define STDMETHODIMPV      HRESULT STDMETHODVCALLTYPE
+#define STDMETHODIMPV_(t)  t STDMETHODVCALLTYPE
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+# define interface struct
+# define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m
+# define STDMETHOD_(t,m) virtual t STDMETHODCALLTYPE m
+# define PURE =0
+# define THIS_
+# define THIS void
+# define DECLARE_INTERFACE(i)    interface i
+# define DECLARE_INTERFACE_(i,b) interface i : public b
+#else
+# define STDMETHOD(m) HRESULT (STDMETHODCALLTYPE *m)
+# define STDMETHOD_(t,m) t (STDMETHODCALLTYPE *m)
+# define PURE
+# define THIS_ INTERFACE *,
+# define THIS INTERFACE *
+# ifdef CONST_VTABLE
+#  define DECLARE_INTERFACE(i) \
+     typedef interface i { const struct i##Vtbl *lpVtbl; } i; \
+     typedef struct i##Vtbl i##Vtbl; \
+     struct i##Vtbl
+# else
+#  define DECLARE_INTERFACE(i) \
+     typedef interface i { struct i##Vtbl *lpVtbl; } i; \
+     typedef struct i##Vtbl i##Vtbl; \
+     struct i##Vtbl
+# endif
+# define DECLARE_INTERFACE_(i,b) DECLARE_INTERFACE(i)
+#endif
+
+#include <guiddef.h>
+
+#ifndef _ERROR_STATUS_T_DEFINED
+typedef unsigned long error_status_t;
+#define _ERROR_STATUS_T_DEFINED
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+#endif /* _BASETYPS_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h
new file mode 100644
index 0000000..fa7f08a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_BCRYPT_H
+#define __WINE_BCRYPT_H
+
+#ifndef WINAPI
+#define WINAPI __stdcall
+#endif
+
+#ifndef IN
+#define IN
+#endif
+
+#ifndef OUT
+#define OUT
+#endif
+
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+
+typedef struct _BCRYPT_ALGORITHM_IDENTIFIER
+{
+    LPWSTR pszName;
+    ULONG  dwClass;
+    ULONG  dwFlags;
+} BCRYPT_ALGORITHM_IDENTIFIER;
+
+#endif  /* __WINE_BCRYPT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl
new file mode 100644
index 0000000..6bced34
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733ab1-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IBindResource : IUnknown
+{
+    [local]
+    HRESULT Bind([in] IUnknown *pUnkOuter,
+                 [in] LPCOLESTR pwszURL,
+                 [in] DBBINDURLFLAG dwBindURLFlags,
+                 [in] REFGUID rguid,
+                 [in] REFIID riid,
+                 [in] IAuthenticate *pAuthenticate,
+                 [in, out, unique] DBIMPLICITSESSION *pImplSession,
+                 [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+                 [out, iid_is(riid)] IUnknown **ppUnk);
+
+    [call_as(Bind)]
+    HRESULT RemoteBind([in] IUnknown *pUnkOuter,
+                       [in] LPCOLESTR pwszURL,
+                       [in] DBBINDURLFLAG dwBindURLFlags,
+                       [in] REFGUID rguid,
+                       [in] REFIID riid,
+                       [in] IAuthenticate *pAuthenticate,
+                       [in] IUnknown *pSessionUnkOuter,
+                       [in, unique] IID *piid,
+                       [in, out, unique, iid_is(piid)] IUnknown **ppSession,
+                       [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+                       [out, iid_is(riid)] IUnknown **ppUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl
new file mode 100644
index 0000000..b35b0b9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl
@@ -0,0 +1,426 @@
+/*
+ * Background Intelligent Transfer Service (BITS) interface
+ *
+ * Copyright 2007 Google (Roy Shea)
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+cpp_quote("#include \"bitsmsg.h\"")
+cpp_quote("#define BG_SIZE_UNKNOWN (UINT64)(-1)")
+cpp_quote("#define BG_NOTIFY_JOB_TRANSFERRED 0x0001")
+cpp_quote("#define BG_NOTIFY_JOB_ERROR 0x0002")
+cpp_quote("#define BG_NOTIFY_DISABLE 0x0004")
+cpp_quote("#define BG_NOTIFY_JOB_MODIFICATION 0x0008")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef EnumJobs")
+cpp_quote("#undef GetJob")
+cpp_quote("#endif")
+
+#define BG_ENUM_SIZEIS(maxcount) maxcount
+#define BG_ENUM_LENGTHIS(maxcount,lengthptr) lengthptr ? *lengthptr : maxcount
+
+[
+    uuid(01b7bd23-fb88-4a77-8490-5891d3e4653a),
+    odl
+]
+interface IBackgroundCopyFile : IUnknown
+{
+    typedef struct _BG_FILE_PROGRESS {
+        UINT64 BytesTotal;
+        UINT64 BytesTransferred;
+        BOOL Completed;
+    } BG_FILE_PROGRESS;
+
+    HRESULT GetRemoteName(
+            [out] LPWSTR *pVal
+    );
+
+    HRESULT GetLocalName(
+            [out] LPWSTR *pVal
+    );
+
+    HRESULT GetProgress(
+            [out] BG_FILE_PROGRESS *pVal
+    );
+}
+
+
+[
+    uuid(ca51e165-c365-424c-8d41-24aaa4ff3c40),
+    odl
+]
+interface IEnumBackgroundCopyFiles: IUnknown
+{
+    HRESULT Next(
+            [in] ULONG celt,
+            [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyFile **rgelt,
+            [in,out,unique] ULONG *pceltFetched
+    );
+
+    HRESULT Skip(
+            [in] ULONG celt
+    );
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+            [out] IEnumBackgroundCopyFiles **ppenum
+    );
+
+    HRESULT GetCount(
+            [out] ULONG *puCount
+    );
+}
+
+
+[
+    uuid(19c613a0-fcb8-4f28-81ae-897c3d078f81),
+    odl
+]
+interface IBackgroundCopyError : IUnknown
+{
+    typedef enum {
+        BG_ERROR_CONTEXT_NONE = 0,
+        BG_ERROR_CONTEXT_UNKNOWN = 1,
+        BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2,
+        BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION =3,
+        BG_ERROR_CONTEXT_LOCAL_FILE = 4,
+        BG_ERROR_CONTEXT_REMOTE_FILE = 5,
+        BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6,
+        BG_ERROR_CONTEXT_REMOTE_APPLICATION =7,
+    } BG_ERROR_CONTEXT;
+
+    HRESULT GetError(
+            [out,ref] BG_ERROR_CONTEXT *pContext,
+            [out,ref] HRESULT *pCode
+    );
+
+    HRESULT GetFile(
+            [out] IBackgroundCopyFile **pVal
+    );
+
+    HRESULT GetErrorDescription(
+            [in] DWORD LanguageId,
+            [out,ref] LPWSTR *pErrorDescription
+    );
+
+    HRESULT GetErrorContextDescription(
+            [in] DWORD LanguageId,
+            [out,ref] LPWSTR *pContextDescription
+    );
+
+    HRESULT GetProtocol(
+            [out,ref] LPWSTR *pProtocol
+    );
+}
+
+
+
+[
+    uuid(37668d37-507e-4160-9316-26306d150b12),
+    odl
+]
+interface IBackgroundCopyJob : IUnknown
+{
+    typedef struct _BG_FILE_INFO {
+        LPWSTR RemoteName;
+        LPWSTR LocalName;
+    } BG_FILE_INFO;
+
+    typedef struct _BG_JOB_PROGRESS {
+        UINT64 BytesTotal;
+        UINT64 BytesTransferred;
+        ULONG FilesTotal;
+        ULONG FilesTransferred;
+    } BG_JOB_PROGRESS;
+
+    typedef struct _BG_JOB_TIMES {
+        FILETIME CreationTime;
+        FILETIME ModificationTime;
+        FILETIME TransferCompletionTime;
+    } BG_JOB_TIMES;
+
+    typedef enum {
+        BG_JOB_PRIORITY_FOREGROUND = 0,
+        BG_JOB_PRIORITY_HIGH = 1,
+        BG_JOB_PRIORITY_NORMAL = 2,
+        BG_JOB_PRIORITY_LOW = 3
+    } BG_JOB_PRIORITY;
+
+    typedef enum {
+        BG_JOB_STATE_QUEUED = 0,
+        BG_JOB_STATE_CONNECTING = 1,
+        BG_JOB_STATE_TRANSFERRING = 2,
+        BG_JOB_STATE_SUSPENDED = 3,
+        BG_JOB_STATE_ERROR = 4,
+        BG_JOB_STATE_TRANSIENT_ERROR = 5,
+        BG_JOB_STATE_TRANSFERRED = 6,
+        BG_JOB_STATE_ACKNOWLEDGED = 7,
+        BG_JOB_STATE_CANCELLED = 8
+    } BG_JOB_STATE;
+
+    typedef enum {
+       BG_JOB_TYPE_DOWNLOAD = 0,
+       BG_JOB_TYPE_UPLOAD = 1,
+       BG_JOB_TYPE_UPLOAD_REPLY = 2
+    } BG_JOB_TYPE;
+
+    typedef enum {
+        BG_JOB_PROXY_USAGE_PRECONFIG,
+        BG_JOB_PROXY_USAGE_NO_PROXY,
+        BG_JOB_PROXY_USAGE_OVERRIDE,
+        BG_JOB_PROXY_USAGE_AUTODETECT
+    } BG_JOB_PROXY_USAGE;
+
+
+    HRESULT AddFileSet(
+            [in] ULONG cFileCount,
+            [in,size_is(cFileCount)] BG_FILE_INFO *pFileSet
+    );
+
+    HRESULT AddFile(
+            [in] LPCWSTR RemoteUrl,
+            [in] LPCWSTR LocalName
+    );
+
+    HRESULT EnumFiles(
+            [out] IEnumBackgroundCopyFiles **pEnum
+    );
+
+    HRESULT Suspend();
+
+    HRESULT Resume();
+
+    HRESULT Cancel();
+
+    HRESULT Complete();
+
+    HRESULT GetId(
+            [out] GUID *pVal
+    );
+
+    HRESULT GetType(
+            [out] BG_JOB_TYPE *pVal
+    );
+
+    HRESULT GetProgress(
+            [out] BG_JOB_PROGRESS *pVal
+    );
+
+    HRESULT GetTimes(
+            [out] BG_JOB_TIMES *pVal
+    );
+
+    HRESULT GetState(
+            [out] BG_JOB_STATE *pVal
+    );
+
+    HRESULT GetError(
+            [out] IBackgroundCopyError **ppError
+    );
+
+    HRESULT GetOwner(
+            [out] LPWSTR *pVal
+    );
+
+    HRESULT SetDisplayName(
+            [in] LPCWSTR Val
+    );
+
+    HRESULT GetDisplayName(
+            [out] LPWSTR *pVal
+    );
+
+    HRESULT SetDescription(
+            [in] LPCWSTR Val
+    );
+
+    HRESULT GetDescription(
+            [out] LPWSTR *pVal
+    );
+
+    HRESULT SetPriority(
+            [in] BG_JOB_PRIORITY Val
+    );
+
+    HRESULT GetPriority(
+            [out] BG_JOB_PRIORITY *pVal
+    );
+
+    HRESULT SetNotifyFlags(
+            [in] ULONG Val
+    );
+
+    HRESULT GetNotifyFlags(
+            [out] ULONG *pVal
+    );
+
+    HRESULT SetNotifyInterface(
+            [in] IUnknown *Val
+    );
+
+    HRESULT GetNotifyInterface(
+            [out] IUnknown ** pVal
+    );
+
+    HRESULT SetMinimumRetryDelay(
+            [in] ULONG Seconds
+    );
+
+    HRESULT GetMinimumRetryDelay(
+            [out] ULONG *Seconds
+    );
+
+    HRESULT SetNoProgressTimeout(
+            [in] ULONG Seconds
+    );
+
+    HRESULT GetNoProgressTimeout(
+            [out] ULONG *Seconds
+    );
+
+    HRESULT GetErrorCount(
+            [out] ULONG *Errors
+    );
+
+    HRESULT SetProxySettings(
+            [in] BG_JOB_PROXY_USAGE ProxyUsage,
+            [in,string,unique] const WCHAR *ProxyList,
+            [in,string,unique] const WCHAR *ProxyBypassList
+    );
+
+    HRESULT GetProxySettings(
+            [out] BG_JOB_PROXY_USAGE *pProxyUsage,
+            [out] LPWSTR *pProxyList,
+            [out] LPWSTR *pProxyBypassList
+    );
+
+    HRESULT TakeOwnership();
+}
+
+[
+    uuid(1af4f612-3b71-466f-8f58-7b6f73ac57ad),
+    odl
+]
+interface IEnumBackgroundCopyJobs : IUnknown
+{
+    HRESULT Next(
+            [in] ULONG celt,
+            [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyJob **rgelt,
+            [in,out,unique] ULONG *pceltFetched
+    );
+
+    HRESULT Skip(
+            [in] ULONG celt
+    );
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+            [out] IEnumBackgroundCopyJobs **ppenum
+    );
+
+    HRESULT GetCount(
+            [out] ULONG *puCount
+    );
+}
+
+
+[
+    uuid(97ea99c7-0186-4ad4-8df9-c5b4e0ed6b22),
+    odl
+]
+interface IBackgroundCopyCallback : IUnknown
+{
+    HRESULT JobTransferred(
+            [in] IBackgroundCopyJob *pJob
+    );
+
+    HRESULT JobError(
+            [in] IBackgroundCopyJob *pJob,
+            [in] IBackgroundCopyError *pError
+    );
+
+    HRESULT JobModification(
+            [in] IBackgroundCopyJob *pJob,
+            [in] DWORD dwReserved
+    );
+}
+
+[
+    uuid(5ce34c0d-0dc9-4c1f-897c-daa1b78cee7c),
+    odl
+]
+interface IBackgroundCopyManager : IUnknown
+{
+    cpp_quote("#define BG_JOB_ENUM_ALL_USERS 0x0001")
+
+    HRESULT CreateJob(
+            [in] LPCWSTR DisplayName,
+            [in] BG_JOB_TYPE Type,
+            [out] GUID *pJobId,
+            [out] IBackgroundCopyJob **ppJob
+    );
+
+    HRESULT GetJob(
+            [in] REFGUID jobID,
+            [out] IBackgroundCopyJob **ppJob
+    );
+
+    HRESULT EnumJobs(
+            [in] DWORD dwFlags,
+            [out] IEnumBackgroundCopyJobs **ppEnum
+    );
+    HRESULT GetErrorDescription(
+            [in] HRESULT hResult,
+            [in] DWORD LanguageId,
+            [out] LPWSTR *pErrorDescription);
+}
+
+
+[
+    uuid(1deeb74f-7915-4560-b558-918c83f176a6),
+    version(1.0)
+]
+library BackgroundCopyManager
+{
+    [
+        uuid(4991d34b-80a1-4291-83b6-3328366b9097),
+    ]
+    coclass BackgroundCopyManager
+    {
+        [default] interface IBackgroundCopyManager;
+    };
+
+    interface IBackgroundCopyCallback;
+}
+
+cpp_quote("#include \"bits1_5.h\"")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl
new file mode 100644
index 0000000..fc25670
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl
@@ -0,0 +1,97 @@
+/*
+ * Background Intelligent Transfer Service (BITS) 1.5 interface
+ *
+ * Copyright 2008 Google (Dan Hipschman)
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "bits.idl";
+#endif
+
+[
+    uuid(54b50739-686f-45eb-9dff-d6a9a0faa9af),
+    odl
+]
+interface IBackgroundCopyJob2 : IBackgroundCopyJob
+{
+    HRESULT SetNotifyCmdLine([unique] LPCWSTR prog, [unique] LPCWSTR params);
+    HRESULT GetNotifyCmdLine([out] LPWSTR *prog, [out] LPWSTR *params);
+
+    typedef struct _BG_JOB_REPLY_PROGRESS
+    {
+        UINT64 BytesTotal;
+        UINT64 BytesTransferred;
+    } BG_JOB_REPLY_PROGRESS;
+
+    HRESULT GetReplyProgress([in, out] BG_JOB_REPLY_PROGRESS *progress);
+    HRESULT GetReplyData([out, size_is( , (unsigned long) *pLength)] byte **pBuffer,
+                         [in, out, unique] UINT64 *pLength);
+    HRESULT SetReplyFileName([unique] LPCWSTR filename);
+    HRESULT GetReplyFileName([out] LPWSTR *pFilename);
+
+    typedef enum
+    {
+        BG_AUTH_TARGET_SERVER = 1,
+        BG_AUTH_TARGET_PROXY
+    } BG_AUTH_TARGET;
+
+    typedef enum
+    {
+        BG_AUTH_SCHEME_BASIC = 1,
+        BG_AUTH_SCHEME_DIGEST,
+        BG_AUTH_SCHEME_NTLM,
+        BG_AUTH_SCHEME_NEGOTIATE,
+        BG_AUTH_SCHEME_PASSPORT
+    } BG_AUTH_SCHEME;
+
+    typedef struct
+    {
+        LPWSTR UserName;
+        LPWSTR Password;
+    } BG_BASIC_CREDENTIALS;
+    typedef BG_BASIC_CREDENTIALS *PBG_BASIC_CREDENTIALS;
+
+    typedef [switch_type(BG_AUTH_SCHEME)] union
+    {
+        [case(BG_AUTH_SCHEME_BASIC, BG_AUTH_SCHEME_DIGEST, BG_AUTH_SCHEME_NTLM,
+              BG_AUTH_SCHEME_NEGOTIATE, BG_AUTH_SCHEME_PASSPORT)]
+        BG_BASIC_CREDENTIALS Basic;
+        [default]
+        ;
+    } BG_AUTH_CREDENTIALS_UNION;
+
+    typedef struct
+    {
+        BG_AUTH_TARGET Target;
+        BG_AUTH_SCHEME Scheme;
+        [switch_is(Scheme)] BG_AUTH_CREDENTIALS_UNION Credentials;
+    } BG_AUTH_CREDENTIALS;
+    typedef BG_AUTH_CREDENTIALS *PBG_AUTH_CREDENTIALS;
+
+    HRESULT SetCredentials(BG_AUTH_CREDENTIALS *cred);
+    HRESULT RemoveCredentials(BG_AUTH_TARGET target, BG_AUTH_SCHEME scheme);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h
new file mode 100644
index 0000000..e7229ae
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h
@@ -0,0 +1,90 @@
+/*
+ * Standard return values that may be generated by BITS
+ *
+ * Copyright 2007 Google (Roy Shea)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_BITMSG_H__
+#define __WINE_BITMSG_H__
+
+#define BG_S_PARTIAL_COMPLETE                   0x00200017
+#define BG_S_UNABLE_TO_DELETE_FILES             0x0020001A
+#define BG_S_OVERRIDDEN_BY_POLICY               0x00200055
+
+#define BG_E_HTTP_ERROR_400                     0x80190190
+#define BG_E_HTTP_ERROR_401                     0x80190191
+#define BG_E_HTTP_ERROR_404                     0x80190194
+#define BG_E_HTTP_ERROR_407                     0x80190197
+#define BG_E_HTTP_ERROR_414                     0x8019019E
+#define BG_E_HTTP_ERROR_501                     0x801901F5
+#define BG_E_HTTP_ERROR_503                     0x801901F7
+#define BG_E_HTTP_ERROR_504                     0x801901F8
+#define BG_E_HTTP_ERROR_505                     0x801901F9
+
+#define BG_E_NOT_FOUND                          0x80200001
+#define BG_E_INVALID_STATE                      0x80200002
+#define BG_E_EMPTY                              0x80200003
+#define BG_E_FILE_NOT_AVAILABLE                 0x80200004
+#define BG_E_PROTOCOL_NOT_AVAILABLE             0x80200005
+#define BG_E_DESTINATION_LOCKED                 0x8020000D
+#define BG_E_VOLUME_CHANGED                     0x8020000E
+#define BG_E_ERROR_INFORMATION_UNAVAILABLE      0x8020000F
+#define BG_E_NETWORK_DISCONNECTED               0x80200010
+#define BG_E_MISSING_FILE_SIZE                  0x80200011
+#define BG_E_INSUFFICIENT_HTTP_SUPPORT          0x80200012
+#define BG_E_INSUFFICIENT_RANGE_SUPPORT         0x80200013
+#define BG_E_REMOTE_NOT_SUPPORTED               0x80200014
+#define BG_E_NEW_OWNER_DIFF_MAPPING             0x80200015
+#define BG_E_NEW_OWNER_NO_FILE_ACCESS           0x80200016
+#define BG_E_PROXY_LIST_TOO_LARGE               0x80200018
+#define BG_E_PROXY_BYPASS_LIST_TOO_LARGE        0x80200019
+#define BG_E_TOO_MANY_FILES                     0x8020001C
+#define BG_E_LOCAL_FILE_CHANGED                 0x8020001D
+#define BG_E_TOO_LARGE                          0x80200020
+#define BG_E_STRING_TOO_LONG                    0x80200021
+#define BG_E_CLIENT_SERVER_PROTOCOL_MISMATCH    0x80200022
+#define BG_E_SERVER_EXECUTE_ENABLED             0x80200023
+#define BG_E_USERNAME_TOO_LARGE                 0x80200025
+#define BG_E_PASSWORD_TOO_LARGE                 0x80200026
+#define BG_E_INVALID_AUTH_TARGET                0x80200027
+#define BG_E_INVALID_AUTH_SCHEME                0x80200028
+#define BG_E_INVALID_RANGE                      0x8020002B
+#define BG_E_OVERLAPPING_RANGES                 0x8020002C
+#define BG_E_BLOCKED_BY_POLICY                  0x8020003E
+#define BG_E_INVALID_PROXY_INFO                 0x8020003F
+#define BG_E_INVALID_CREDENTIALS                0x80200040
+#define BG_E_RECORD_DELETED                     0x80200042
+#define BG_E_UPNP_ERROR                         0x80200045
+#define BG_E_PEERCACHING_DISABLED               0x80200047
+#define BG_E_BUSYCACHERECORD                    0x80200048
+#define BG_E_TOO_MANY_JOBS_PER_USER             0x80200049
+#define BG_E_TOO_MANY_JOBS_PER_MACHINE          0x80200050
+#define BG_E_TOO_MANY_FILES_IN_JOB              0x80200051
+#define BG_E_TOO_MANY_RANGES_IN_FILE            0x80200052
+#define BG_E_VALIDATION_FAILED                  0x80200053
+#define BG_E_MAXDOWNLOAD_TIMEOUT                0x80200054
+
+#endif /* #ifndef __WINE_BITMSG_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h
new file mode 100644
index 0000000..de1e71e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 1999 Bertho Stultiens
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CDERR_H
+#define __WINE_CDERR_H
+
+/* General error codes */
+#define CDERR_DIALOGFAILURE	0xFFFF
+#define CDERR_GENERALCODES	0x0000
+#define CDERR_STRUCTSIZE	0x0001
+#define CDERR_INITIALIZATION	0x0002
+#define CDERR_NOTEMPLATE	0x0003
+#define CDERR_NOHINSTANCE	0x0004
+#define CDERR_LOADSTRFAILURE	0x0005
+#define CDERR_FINDRESFAILURE	0x0006
+#define CDERR_LOADRESFAILURE	0x0007
+#define CDERR_LOCKRESFAILURE	0x0008
+#define CDERR_MEMALLOCFAILURE	0x0009
+#define CDERR_MEMLOCKFAILURE	0x000A
+#define CDERR_NOHOOK		0x000B
+#define CDERR_REGISTERMSGFAIL	0x000C
+
+/* Printer dialog error codes */
+#define PDERR_PRINTERCODES	0x1000
+#define PDERR_SETUPFAILURE	0x1001
+#define PDERR_PARSEFAILURE	0x1002
+#define PDERR_RETDEFFAILURE	0x1003
+#define PDERR_LOADDRVFAILURE	0x1004
+#define PDERR_GETDEVMODEFAIL	0x1005
+#define PDERR_INITFAILURE	0x1006
+#define PDERR_NODEVICES		0x1007
+#define PDERR_NODEFAULTPRN	0x1008
+#define PDERR_DNDMMISMATCH	0x1009
+#define PDERR_CREATEICFAILURE	0x100A
+#define PDERR_PRINTERNOTFOUND	0x100B
+#define PDERR_DEFAULTDIFFERENT	0x100C
+
+/* Chose font error codes */
+#define CFERR_CHOOSEFONTCODES	0x2000
+#define CFERR_NOFONTS		0x2001
+#define CFERR_MAXLESSTHANMIN	0x2002
+
+/* File{Open,Save} error codes */
+#define FNERR_FILENAMECODES	0x3000
+#define FNERR_SUBCLASSFAILURE	0x3001
+#define FNERR_INVALIDFILENAME	0x3002
+#define FNERR_BUFFERTOOSMALL	0x3003
+
+/* Find/Replace error codes */
+#define FRERR_FINDREPLACECODES	0x4000
+#define FRERR_BUFFERLENGTHZERO	0x4001
+
+/* Choose color error codes */
+#define CCERR_CHOOSECOLORCODES	0x5000
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h
new file mode 100644
index 0000000..a5ecc52
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _CFGMGR32_H_
+#define _CFGMGR32_H_
+
+/* FIXME: #include <cfg.h> */
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+/* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_CFGMGR32_TYPE_AW(type)  /* nothing */
+#else
+# define DECL_WINELIB_CFGMGR32_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;
+#endif
+
+#define CMAPI
+typedef DWORD CONFIGRET;
+
+#define CR_SUCCESS                      0x00
+#define CR_DEFAULT                      0x01
+#define CR_OUT_OF_MEMORY                0x02
+#define CR_INVALID_POINTER              0x03
+#define CR_INVALID_FLAG                 0x04
+#define CR_INVALID_DEVNODE              0x05
+#define CR_INVALID_DEVINST              CR_INVALID_DEVNODE
+#define CR_INVALID_RES_DES              0x06
+#define CR_INVALID_LOG_CONF             0x07
+#define CR_INVALID_ARBITRATOR           0x08
+#define CR_INVALID_NODELIST             0x09
+#define CR_DEVNODE_HAS_REQS             0x0a
+#define CR_DEVINST_HAS_REQS             CR_DEVNODE_HAS_REQS
+#define CR_INVALID_RESOURCEID           0x0b
+#define CR_DLVXD_NOT_FOUND              0x0c
+#define CR_NO_SUCH_DEVNODE              0x0d
+#define CR_NO_SUCH_DEVINST              CR_NO_SUCH_DEVNODE
+#define CR_NO_MORE_LOG_CONF             0x0e
+#define CR_NO_MORE_RES_DES              0x0f
+#define CR_ALREADY_SUCH_DEVNODE         0x10
+#define CR_ALREADY_SUCH_DEVINST         CR_ALREADY_SUCH_DEVNODE
+#define CR_INVALID_RANGE_LIST           0x11
+#define CR_INVALID_RANGE                0x12
+#define CR_FAILURE                      0x13
+#define CR_NO_SUCH_LOGICAL_DEV          0x14
+#define CR_CREATE_BLOCKED               0x15
+#define CR_NOT_SYSTEM_VM                0x16
+#define CR_REMOVE_VETOED                0x17
+#define CR_APM_VETOED                   0x18
+#define CR_INVALID_LOAD_TYPE            0x19
+#define CR_BUFFER_SMALL                 0x1a
+#define CR_NO_ARBITRATOR                0x1b
+#define CR_NO_REGISTRY_HANDLE           0x1c
+#define CR_REGISTRY_ERROR               0x1d
+#define CR_INVALID_DEVICE_ID            0x1e
+#define CR_INVALID_DATA                 0x1f
+#define CR_INVALID_API                  0x20
+#define CR_DEVLOADER_NOT_READY          0x21
+#define CR_NEED_RESTART                 0x22
+#define CR_NO_MORE_HW_PROFILES          0x23
+#define CR_DEVICE_NOT_THERE             0x24
+#define CR_NO_SUCH_VALUE                0x25
+#define CR_WRONG_TYPE                   0x26
+#define CR_INVALID_PRIORITY             0x27
+#define CR_NOT_DISABLEABLE              0x28
+#define CR_FREE_RESOURCES               0x29
+#define CR_QUERY_VETOED                 0x2a
+#define CR_CANT_SHARE_IRQ               0x2b
+#define CR_NO_DEPENDENT                 0x2c
+#define CR_SAME_RESOURCES               0x2d
+#define CR_NO_SUCH_REGISTRY_KEY         0x2e
+#define CR_INVALID_MACHINENAME          0x2f
+#define CR_REMOTE_COMM_FAILURE          0x30
+#define CR_MACHINE_UNAVAILABLE          0x31
+#define CR_NO_CM_SERVICES               0x32
+#define CR_ACCESS_DENIED                0x33
+#define CR_CALL_NOT_IMPLEMENTED         0x34
+#define CR_INVALID_PROPERTY             0x35
+#define CR_DEVICE_INTERFACE_ACTIVE      0x36
+#define CR_NO_SUCH_DEVICE_INTERFACE     0x37
+#define CR_INVALID_REFERENCE_STRING     0x38
+#define CR_INVALID_CONFLICT_LIST        0x39
+#define CR_INVALID_INDEX                0x3a
+#define CR_INVALID_STRUCTURE_SIZE       0x3b
+#define NUM_CR_RESULTS                  0x3c
+
+#define MAX_DEVICE_ID_LEN               200
+#define MAX_DEVNODE_ID_LEN              MAX_DEVICE_ID_LEN
+
+#define MAX_CLASS_NAME_LEN              32
+#define MAX_GUID_STRING_LEN             39
+#define MAX_PROFILE_LEN                 80
+
+#define CM_DRP_DEVICEDESC               0x01
+#define CM_DRP_HARDWAREID               0x02
+#define CM_DRP_COMPATIBLEIDS            0x03
+#define CM_DRP_UNUSED0                  0x04
+#define CM_DRP_SERVICE                  0x05
+#define CM_DRP_UNUSED1                  0x06
+#define CM_DRP_UNUSED2                  0x07
+#define CM_DRP_CLASS                    0x08
+#define CM_DRP_CLASSGUID                0x09
+#define CM_DRP_DRIVER                   0x0A
+#define CM_DRP_CONFIGFLAGS              0x0B
+#define CM_DRP_MFG                      0x0C
+#define CM_DRP_FRIENDLYNAME             0x0D
+#define CM_DRP_LOCATION_INFORMATION     0x0E
+#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0F
+#define CM_DRP_CAPABILITIES             0x10
+#define CM_DRP_UI_NUMBER                0x11
+#define CM_DRP_UPPERFILTERS             0x12
+#define CM_DRP_LOWERFILTERS             0x13
+#define CM_DRP_BUSTYPEGUID              0x14
+#define CM_DRP_LEGACYBUSTYPE            0x15
+#define CM_DRP_BUSNUMBER                0x16
+#define CM_DRP_ENUMERATOR_NAME          0x17
+#define CM_DRP_SECURITY                 0x18
+#define CM_DRP_SECURITY_SDS             0x19
+#define CM_DRP_DEVTYPE                  0x1A
+#define CM_DRP_EXCLUSIVE                0x1B
+#define CM_DRP_CHARACTERISTICS          0x1C
+#define CM_DRP_ADDRESS                  0x1D
+#define CM_DRP_UI_NUMBER_DESC_FORMAT    0x1E
+#define CM_DRP_DEVICE_POWER_DATA        0x1F
+#define CM_DRP_REMOVAL_POLICY           0x20
+#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT 0x21
+#define CM_DRP_REMOVAL_POLICY_OVERRIDE  0x22
+#define CM_DRP_INSTALL_STATE            0x23
+#define CM_DRP_LOCATION_PATHS           0x24
+#define CM_DRP_BASE_CONTAINERID         0x25
+#define CM_DRP_MIN                      0x01
+#define CM_DRP_MAX                      0x25
+
+#define CM_CRP_UPPERFILTERS             CM_DRP_UPPERFILTERS
+#define CM_CRP_LOWERFILTERS             CM_DRP_LOWERFILTERS
+#define CM_CRP_SECURITY                 CM_DRP_SECURITY
+#define CM_CRP_SECURITY_SDS             CM_DRP_SECURITY_SDS
+#define CM_CRP_DEVTYPE                  CM_DRP_DEVTYPE
+#define CM_CRP_EXCLUSIVE                CM_DRP_EXCLUSIVE
+#define CM_CRP_CHARACTERISTICS          CM_DRP_CHARACTERISTICS
+#define CM_CRP_MIN                      CM_DRP_MIN
+#define CM_CRP_MAX                      CM_DRP_MAX
+
+typedef DWORD DEVINST, *PDEVINST;
+typedef DWORD DEVNODE, *PDEVNODE;
+typedef HANDLE HMACHINE, *PHMACHINE;
+typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
+typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
+
+DECL_WINELIB_CFGMGR32_TYPE_AW(DEVNODEID)
+DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+CMAPI CONFIGRET WINAPI CM_Connect_MachineA(PCSTR,PHMACHINE);
+CMAPI CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR,PHMACHINE);
+#define     CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine)
+CMAPI CONFIGRET WINAPI CM_Create_DevNodeA(PDEVINST,DEVINSTID_A,DEVINST,ULONG);
+CMAPI CONFIGRET WINAPI CM_Create_DevNodeW(PDEVINST,DEVINSTID_W,DEVINST,ULONG);
+#define     CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode)
+CMAPI CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Get_Device_IDA(DEVINST,PSTR,ULONG,ULONG);
+CMAPI CONFIGRET WINAPI CM_Get_Device_IDW(DEVINST,PWSTR,ULONG,ULONG);
+#define     CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExA(DEVINST,PSTR,ULONG,ULONG,HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExW(DEVINST,PWSTR,ULONG,ULONG,HMACHINE);
+#define     CM_Get_Device_ID_Ex WINELIB_NAME_AW(CM_Get_Device_ID_Ex)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListA(PCSTR,PCHAR,ULONG,ULONG);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListW(PCWSTR,PWCHAR,ULONG,ULONG);
+#define     CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(PCSTR,PCHAR,ULONG,ULONG,HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(PCWSTR,PWCHAR,ULONG,ULONG,HMACHINE);
+#define     CM_Get_Device_ID_List_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Ex)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size(PULONG,DEVINST,ULONG);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(PULONG,DEVINST,ULONG,HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Locate_DevNodeA(PDEVINST,DEVINSTID_A,ULONG);
+CMAPI CONFIGRET WINAPI CM_Locate_DevNodeW(PDEVINST,DEVINSTID_W,ULONG);
+#define     CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode)
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef DECL_WINELIB_CFGMGR32_TYPE_AW
+
+#endif /* _CFGMGR32_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h
new file mode 100644
index 0000000..30902bf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2000 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __CGUID_H__
+#define __CGUID_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const IID GUID_NULL;
+extern const IID IID_IRpcChannel;
+extern const IID IID_IRpcStub;
+extern const IID IID_IStubManager;
+extern const IID IID_IRpcProxy;
+extern const IID IID_IProxyManager;
+extern const IID IID_IPSFactory;
+extern const IID IID_IInternalMoniker;
+extern const IID IID_IDfReserved1;
+extern const IID IID_IDfReserved2;
+extern const IID IID_IDfReserved3;
+extern const CLSID CLSID_StdMarshal;
+extern const CLSID CLSID_AggStdMarshal;
+extern const CLSID CLSID_StdAsyncActManager;
+extern const IID IID_IStub;
+extern const IID IID_IProxy;
+extern const IID IID_IEnumGeneric;
+extern const IID IID_IEnumHolder;
+extern const IID IID_IEnumCallback;
+extern const IID IID_IOleManager;
+extern const IID IID_IOlePresObj;
+extern const IID IID_IDebug;
+extern const IID IID_IDebugStream;
+extern const CLSID CLSID_PSGenObject;
+extern const CLSID CLSID_PSClientSite;
+extern const CLSID CLSID_PSClassObject;
+extern const CLSID CLSID_PSInPlaceActive;
+extern const CLSID CLSID_PSInPlaceFrame;
+extern const CLSID CLSID_PSDragDrop;
+extern const CLSID CLSID_PSBindCtx;
+extern const CLSID CLSID_PSEnumerators;
+extern const CLSID CLSID_StaticMetafile;
+extern const CLSID CLSID_StaticDib;
+extern const CLSID CID_CDfsVolume;
+extern const CLSID CLSID_DCOMAccessControl;
+extern const CLSID CLSID_StdGlobalInterfaceTable;
+extern const CLSID CLSID_ComBinding;
+extern const CLSID CLSID_StdEvent;
+extern const CLSID CLSID_ManualResetEvent;
+extern const CLSID CLSID_SynchronizeContainer;
+extern const CLSID CLSID_CCDFormKrnl;
+extern const CLSID CLSID_CCDPropertyPage;
+extern const CLSID CLSID_CCDFormDialog;
+extern const CLSID CLSID_CCDCommandButton;
+extern const CLSID CLSID_CCDComboBox;
+extern const CLSID CLSID_CCDTextBox;
+extern const CLSID CLSID_CCDCheckBox;
+extern const CLSID CLSID_CCDLabel;
+extern const CLSID CLSID_CCDOptionButton;
+extern const CLSID CLSID_CCDListBox;
+extern const CLSID CLSID_CCDScrollBar;
+extern const CLSID CLSID_CCDGroupBox;
+extern const CLSID CLSID_CCDGeneralPropertyPage;
+extern const CLSID CLSID_CCDGenericPropertyPage;
+extern const CLSID CLSID_CCDFontPropertyPage;
+extern const CLSID CLSID_CCDColorPropertyPage;
+extern const CLSID CLSID_CCDLabelPropertyPage;
+extern const CLSID CLSID_CCDCheckBoxPropertyPage;
+extern const CLSID CLSID_CCDTextBoxPropertyPage;
+extern const CLSID CLSID_CCDOptionButtonPropertyPage;
+extern const CLSID CLSID_CCDListBoxPropertyPage;
+extern const CLSID CLSID_CCDCommandButtonPropertyPage;
+extern const CLSID CLSID_CCDComboBoxPropertyPage;
+extern const CLSID CLSID_CCDScrollBarPropertyPage;
+extern const CLSID CLSID_CCDGroupBoxPropertyPage;
+extern const CLSID CLSID_CCDXObjectPropertyPage;
+extern const CLSID CLSID_CStdPropertyFrame;
+extern const CLSID CLSID_CFormPropertyPage;
+extern const CLSID CLSID_CGridPropertyPage;
+extern const CLSID CLSID_CWSJArticlePage;
+extern const CLSID CLSID_CSystemPage;
+extern const CLSID CLSID_IdentityUnmarshal;
+extern const CLSID CLSID_InProcFreeMarshaler;
+extern const CLSID CLSID_Picture_Metafile;
+extern const CLSID CLSID_Picture_EnhMetafile;
+extern const CLSID CLSID_Picture_Dib;
+extern const GUID GUID_TRISTATE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CGUID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl
new file mode 100644
index 0000000..b065464
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2013 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a93-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IChapteredRowset : IUnknown
+{
+    [local]
+    HRESULT AddRefChapter([in] HCHAPTER chapter,
+                          [out] DBREFCOUNT *refcount);
+
+    [call_as(AddRefChapter)]
+    HRESULT RemoteAddRefChapter([in] HCHAPTER chapter,
+                                [out] DBREFCOUNT *refcount,
+                                [out] IErrorInfo **errorinfo);
+
+    [local]
+    HRESULT ReleaseChapter([in] HCHAPTER chapter,
+                           [out] DBREFCOUNT *refcount);
+
+    [call_as(ReleaseChapter)]
+    HRESULT RemoteReleaseChapter([in] HCHAPTER chapter,
+                                 [out] DBREFCOUNT *refcount,
+                                 [out] IErrorInfo **errorinfo);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h
new file mode 100644
index 0000000..b0121f2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CIERROR_H__
+#define __WINE_CIERROR_H__
+
+#define CI_E_ALREADY_INITIALIZED       0x8004180a
+#define CI_E_NOT_INITIALIZED           0x8004180b
+#define CI_E_BUFFERTOOSMALL            0x8004180c
+#define CI_E_PROPERTY_NOT_CACHED       0x8004180d
+#define CI_E_INVALID_STATE             0x8004180f
+#define CI_E_FILTERING_DISABLED        0x80041810
+#define CI_E_DISK_FULL                 0x80041811
+#define CI_E_SHUTDOWN                  0x80041812
+#define CI_E_WORKID_NOTVALID           0x80041813
+#define CI_E_NOT_FOUND                 0x80041815
+#define CI_E_USE_DEFAULT_PID           0x80041816
+#define CI_E_DUPLICATE_NOTIFICATION    0x80041817
+#define CI_E_UPDATES_DISABLED          0x80041818
+#define CI_E_INVALID_FLAGS_COMBINATION 0x80041819
+#define CI_E_OUTOFSEQ_INCREMENT_DATA   0x8004181a
+#define CI_E_SHARING_VIOLATION         0x8004181b
+#define CI_E_LOGON_FAILURE             0x8004181c
+#define CI_E_NO_CATALOG                0x8004181d
+#define CI_E_STRANGE_PAGEORSECTOR_SIZE 0x8004181e
+#define CI_E_TIMEOUT                   0x8004181f
+#define CI_E_NOT_RUNNING               0x80041820
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h
new file mode 100644
index 0000000..1c8390e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2006 James Hawkins
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CLUSAPI_H
+#define __WINE_CLUSAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _HCLUSTER *HCLUSTER;
+typedef struct _HCLUSENUM *HCLUSENUM;
+
+
+typedef struct _CLUSTERVERSIONINFO
+{
+    DWORD   dwVersionInfoSize;
+    WORD    MajorVersion;
+    WORD    MinorVersion;
+    WORD    BuildNumber;
+    WCHAR   szVendorId[64];
+    WCHAR   szCSDVersion[64];
+    DWORD   dwClusterHighestVersion;
+    DWORD   dwClusterLowestVersion;
+    DWORD   dwFlags;
+    DWORD   dwReserved;
+} CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO;
+
+BOOL WINAPI CloseCluster(HCLUSTER hCluster);
+DWORD WINAPI GetClusterInformation(HCLUSTER hCluster, LPWSTR lpszClusterName,
+                                   LPDWORD lpcchClusterName, LPCLUSTERVERSIONINFO lpClusterInfo);
+DWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName, LPDWORD pdwClusterState);
+HCLUSTER WINAPI OpenCluster(LPCWSTR lpszClusterName);
+HCLUSENUM WINAPI ClusterOpenEnum(HCLUSTER hCluster, DWORD dwType);
+DWORD WINAPI ClusterEnum(HCLUSENUM hEnum, DWORD dwIndex, LPDWORD lpdwType, LPWSTR lpszName, LPDWORD lpcchName);
+DWORD WINAPI ClusterCloseEnum(HCLUSENUM hEnum);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_CLUSAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl
new file mode 100644
index 0000000..aba98bc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a63-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface ICommand : IUnknown
+{
+    [local]
+    HRESULT Cancel();
+
+    [call_as(Cancel)]
+    HRESULT RemoteCancel([out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT Execute([in, annotation("__in_opt")] IUnknown *pUnkOuter,
+                    [in] REFIID riid,
+                    [in, out, annotation("__inout_opt")] DBPARAMS *pParams,
+                    [out, annotation("__out_opt")] DBROWCOUNT *pcRowsAffected,
+                    [out, iid_is(riid), annotation("__deref_opt_out")] IUnknown **ppRowset);
+
+    [call_as(Execute)]
+    HRESULT RemoteExecute([in] IUnknown *pUnkOuter,
+                          [in] REFIID riid,
+                          [in] HACCESSOR hAccessor,
+                          [in] DB_UPARAMS cParamSets,
+                          [in, unique] GUID *pGuid,
+                          [in] ULONG ulGuidOffset,
+                          [in, unique] RMTPACK *pInputParams,
+                          [in, out, unique] RMTPACK *pOutputParams,
+                          [in] DBCOUNTITEM cBindings,
+                          [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings,
+                          [in, out, unique, size_is((ULONG)cBindings)] DBSTATUS *rgStatus,
+                          [in, out, unique] DBROWCOUNT *pcRowsAffected,
+                          [in, out, unique, iid_is(riid)] IUnknown **ppRowset);
+
+    [local]
+    HRESULT GetDBSession([in] REFIID riid,
+                         [out, iid_is(riid), annotation("__deref_out_opt")] IUnknown **ppSession);
+
+    [call_as(GetDBSession)]
+    HRESULT RemoteGetDBSession([in] REFIID riid,
+                               [out, iid_is(riid)] IUnknown **ppSession,
+                               [out] IErrorInfo **ppErrorInfoRem);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl
new file mode 100644
index 0000000..37e3e99
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a27-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface ICommandText : ICommand
+{
+    [local]
+    HRESULT GetCommandText([in, out /*, annotation("__inout_opt")*/] GUID *pguidDialect,
+                           [out /*, annotation("__deref_out")*/] LPOLESTR *ppwszCommand);
+
+    [call_as(GetCommandText)]
+    HRESULT RemoteGetCommandText([in, out, unique] GUID *pguidDialect,
+                                 [out] LPOLESTR *ppwszCommand,
+                                 [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT SetCommandText([in] REFGUID rguidDialect,
+                           [in, unique /*, annotation("__in_z_opt")*/] LPCOLESTR pwszCommand);
+
+    [call_as(SetCommandText)]
+    HRESULT RemoteSetCommandText([in] REFGUID rguidDialect,
+                                 [in, unique] LPCOLESTR pwszCommand,
+                                 [out] IErrorInfo **ppErrorInfoRem);
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl
new file mode 100644
index 0000000..23f20c3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl
@@ -0,0 +1,241 @@
+/*
+ * Copyright 2002 John K. Hohm
+ * Copyright 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+/*****************************************************************************
+ * Types
+ */
+typedef GUID CATID;
+typedef REFGUID REFCATID;
+cpp_quote("#define CATID_NULL GUID_NULL")
+cpp_quote("#define IsEqualCATID(rcatid1, rcatid2) IsEqualGUID(rcatid1, rcatid2)")
+
+/*****************************************************************************
+ * Aliases for EnumGUID
+ */
+#define IEnumCATID IEnumGUID
+cpp_quote("#define IEnumCATID IEnumGUID")
+cpp_quote("#define IID_IEnumCATID IID_IEnumGUID")
+cpp_quote("#define LPENUMCATID LPENUMGUID")
+#define IEnumCLSID IEnumGUID
+cpp_quote("#define IEnumCLSID IEnumGUID")
+cpp_quote("#define IID_IEnumCLSID IID_IEnumGUID")
+cpp_quote("#define LPENUMCLSID LPENUMGUID")
+
+
+/*****************************************************************************
+ * IEnumGUID
+ */
+[
+    object,
+    uuid(0002e000-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IEnumGUID : IUnknown
+{
+    typedef [unique] IEnumGUID *LPENUMGUID;
+
+    HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumGUID **ppenum);
+}
+
+
+/*****************************************************************************
+ * IEnumCATEGORYINFO
+ */
+[
+    object,
+    uuid(0002e011-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IEnumCATEGORYINFO : IUnknown
+{
+    typedef [unique] IEnumCATEGORYINFO *LPENUMCATEGORYINFO;
+
+    typedef struct tagCATEGORYINFO
+    {
+        CATID   catid;              /* category identifier for component */
+        LCID    lcid;               /* locale identifier */
+        OLECHAR szDescription[128]; /* description of the category */
+    } CATEGORYINFO, *LPCATEGORYINFO;
+
+    HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] CATEGORYINFO* rgelt,
+        [out] ULONG* pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumCATEGORYINFO** ppenum);
+}
+
+
+/*****************************************************************************
+ * ICatInformation
+ */
+[
+    object,
+    uuid(0002e013-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface ICatInformation : IUnknown
+{
+    typedef [unique] ICatInformation* LPCATINFORMATION;
+
+    HRESULT EnumCategories(
+        [in] LCID lcid,
+        [out] IEnumCATEGORYINFO** ppenumCategoryInfo);
+
+    HRESULT GetCategoryDesc(
+        [in] REFCATID rcatid,
+        [in] LCID lcid,
+        [out] LPWSTR* pszDesc);
+
+    [local]
+    HRESULT EnumClassesOfCategories(
+        [in] ULONG cImplemented,
+        [in,size_is(cImplemented)] CATID rgcatidImpl[],
+        [in] ULONG cRequired,
+        [in,size_is(cRequired)] CATID rgcatidReq[],
+        [out] IEnumCLSID** ppenumClsid);
+
+    [call_as(EnumClassesOfCategories)]
+    HRESULT RemoteEnumClassesOfCategories(
+        [in] ULONG cImplemented,
+        [in,unique,size_is(cImplemented)] CATID rgcatidImpl[],
+        [in] ULONG cRequired,
+        [in,unique,size_is(cRequired)] CATID rgcatidReq[],
+        [out] IEnumCLSID** ppenumClsid);
+
+    [local]
+    HRESULT IsClassOfCategories(
+        [in] REFCLSID rclsid,
+        [in] ULONG cImplemented,
+        [in,size_is(cImplemented)] CATID rgcatidImpl[],
+        [in] ULONG cRequired,
+        [in,size_is(cRequired)] CATID rgcatidReq[]);
+
+    [call_as(IsClassOfCategories)]
+    HRESULT RemoteIsClassOfCategories(
+        [in] REFCLSID rclsid,
+        [in] ULONG cImplemented,
+        [in,unique,size_is(cImplemented)] CATID rgcatidImpl[],
+        [in] ULONG cRequired,
+        [in,unique,size_is(cRequired)] CATID rgcatidReq[] );
+
+    HRESULT EnumImplCategoriesOfClass(
+        [in] REFCLSID rclsid,
+        [out] IEnumCATID** ppenumCatid);
+
+    HRESULT EnumReqCategoriesOfClass(
+        [in] REFCLSID rclsid,
+        [out] IEnumCATID** ppenumCatid);
+}
+
+
+/*****************************************************************************
+ * ICatRegister
+ */
+[
+    object,
+    uuid(0002e012-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface ICatRegister : IUnknown
+{
+    typedef [unique] ICatRegister* LPCATREGISTER;
+
+    HRESULT RegisterCategories(
+        [in] ULONG cCategories,
+        [in, size_is(cCategories)] CATEGORYINFO rgCategoryInfo[]);
+
+    HRESULT UnRegisterCategories(
+        [in] ULONG cCategories,
+        [in, size_is(cCategories)] CATID rgcatid[]);
+
+    HRESULT RegisterClassImplCategories(
+        [in] REFCLSID rclsid,
+        [in] ULONG cCategories,
+        [in, size_is(cCategories)] CATID rgcatid[]);
+
+    HRESULT UnRegisterClassImplCategories(
+        [in] REFCLSID rclsid,
+        [in] ULONG cCategories,
+        [in, size_is(cCategories)] CATID rgcatid[]);
+
+    HRESULT RegisterClassReqCategories(
+        [in] REFCLSID rclsid,
+        [in] ULONG cCategories,
+        [in, size_is(cCategories)] CATID rgcatid[]);
+
+    HRESULT UnRegisterClassReqCategories(
+        [in] REFCLSID rclsid,
+        [in] ULONG cCategories,
+        [in, size_is(cCategories)] CATID rgcatid[]);
+}
+
+
+/*****************************************************************************
+ * Category IDs
+ */
+cpp_quote("DEFINE_GUID( CATID_Insertable, 0x40fc6ed3, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_Control, 0x40fc6ed4, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_Programmable, 0x40fc6ed5, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_IsShortcut, 0x40fc6ed6, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_NeverShowExt, 0x40fc6ed7, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_DocObject, 0x40fc6ed8, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_Printable, 0x40fc6ed9, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_RequiresDataPathHost, 0x0de86a50, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToMoniker, 0x0de86a51, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToStorage, 0x0de86a52, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToStreamInit, 0x0de86a53, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToStream, 0x0de86a54, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToMemory, 0x0de86a55, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToFile, 0x0de86a56, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToPropertyBag, 0x0de86a57, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_InternetAware, 0x0de86a58, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_DesignTimeUIActivatableControl, 0xf2bb56d1, 0xdb07, 0x11d1, 0xaa, 0x6b, 0x00, 0x60, 0x97, 0xdb, 0x95, 0x39);")
+/* The Component Category Manager */
+cpp_quote("DEFINE_GUID(CLSID_StdComponentCategoriesMgr, 0x0002e005, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h
new file mode 100644
index 0000000..790889f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h
@@ -0,0 +1,5183 @@
+/*
+ * Common controls definitions
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_COMMCTRL_H
+#define __WINE_COMMCTRL_H
+
+#include <prsht.h>
+#include <commctrl.rh>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI ShowHideMenuCtl (HWND, UINT_PTR, LPINT);
+VOID WINAPI GetEffectiveClientRect (HWND, LPRECT, const INT*);
+VOID WINAPI InitCommonControls (VOID);
+
+typedef struct tagINITCOMMONCONTROLSEX {
+    DWORD dwSize;
+    DWORD dwICC;
+} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
+
+BOOL WINAPI InitCommonControlsEx (const INITCOMMONCONTROLSEX*);
+
+LANGID WINAPI GetMUILanguage (VOID);
+VOID WINAPI InitMUILanguage (LANGID uiLang);
+
+
+#define COMCTL32_VERSION                5  /* dll version */
+
+#ifndef _WIN32_IE
+#define _WIN32_IE 0x0400
+#endif
+
+#define ICC_LISTVIEW_CLASSES   0x00000001  /* listview, header */
+#define ICC_TREEVIEW_CLASSES   0x00000002  /* treeview, tooltips */
+#define ICC_BAR_CLASSES        0x00000004  /* toolbar, statusbar, trackbar, tooltips */
+#define ICC_TAB_CLASSES        0x00000008  /* tab, tooltips */
+#define ICC_UPDOWN_CLASS       0x00000010  /* updown */
+#define ICC_PROGRESS_CLASS     0x00000020  /* progress */
+#define ICC_HOTKEY_CLASS       0x00000040  /* hotkey */
+#define ICC_ANIMATE_CLASS      0x00000080  /* animate */
+#define ICC_WIN95_CLASSES      0x000000FF
+#define ICC_DATE_CLASSES       0x00000100  /* month picker, date picker, time picker, updown */
+#define ICC_USEREX_CLASSES     0x00000200  /* comboex */
+#define ICC_COOL_CLASSES       0x00000400  /* rebar (coolbar) */
+#define ICC_INTERNET_CLASSES   0x00000800  /* IP address, ... */
+#define ICC_PAGESCROLLER_CLASS 0x00001000  /* page scroller */
+#define ICC_NATIVEFNTCTL_CLASS 0x00002000  /* native font control ???*/
+#define ICC_STANDARD_CLASSES   0x00004000
+#define ICC_LINK_CLASS         0x00008000
+
+
+/* common control shared messages */
+#define CCM_FIRST            0x2000
+
+#define CCM_SETBKCOLOR       (CCM_FIRST+0x1)     /* lParam = bkColor */
+#define CCM_SETCOLORSCHEME   (CCM_FIRST+0x2)     /* lParam = COLORSCHEME struct ptr */
+#define CCM_GETCOLORSCHEME   (CCM_FIRST+0x3)     /* lParam = COLORSCHEME struct ptr */
+#define CCM_GETDROPTARGET    (CCM_FIRST+0x4)
+#define CCM_SETUNICODEFORMAT (CCM_FIRST+0x5)
+#define CCM_GETUNICODEFORMAT (CCM_FIRST+0x6)
+#define CCM_SETVERSION       (CCM_FIRST+0x7)
+#define CCM_GETVERSION       (CCM_FIRST+0x8)
+#define CCM_SETNOTIFYWINDOW  (CCM_FIRST+0x9)     /* wParam = hwndParent */
+#define CCM_SETWINDOWTHEME   (CCM_FIRST+0xb)
+#define CCM_DPISCALE         (CCM_FIRST+0xc)
+
+
+/* common notification codes (WM_NOTIFY)*/
+#define NM_FIRST                (0U-  0U)
+#define NM_LAST                 (0U- 99U)
+#define NM_OUTOFMEMORY          (NM_FIRST-1)
+#define NM_CLICK                (NM_FIRST-2)
+#define NM_DBLCLK               (NM_FIRST-3)
+#define NM_RETURN               (NM_FIRST-4)
+#define NM_RCLICK               (NM_FIRST-5)
+#define NM_RDBLCLK              (NM_FIRST-6)
+#define NM_SETFOCUS             (NM_FIRST-7)
+#define NM_KILLFOCUS            (NM_FIRST-8)
+#define NM_CUSTOMDRAW           (NM_FIRST-12)
+#define NM_HOVER                (NM_FIRST-13)
+#define NM_NCHITTEST            (NM_FIRST-14)
+#define NM_KEYDOWN              (NM_FIRST-15)
+#define NM_RELEASEDCAPTURE      (NM_FIRST-16)
+#define NM_SETCURSOR            (NM_FIRST-17)
+#define NM_CHAR                 (NM_FIRST-18)
+#define NM_TOOLTIPSCREATED      (NM_FIRST-19)
+#define NM_LDOWN                (NM_FIRST-20)
+#define NM_RDOWN                (NM_FIRST-21)
+#define NM_THEMECHANGED         (NM_FIRST-22)
+#define NM_FONTCHANGED          (NM_FIRST-23)
+#define NM_CUSTOMTEXT           (NM_FIRST-24)
+#define NM_TVSTATEIMAGECHANGING (NM_FIRST-24)
+
+#define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \
+    (fn)((hwnd), (int)(wParam), (NMHDR*)(lParam))
+#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \
+    (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR*)(pnmhdr))
+
+
+/* callback constants */
+#define LPSTR_TEXTCALLBACKA    ((LPSTR)-1)
+#define LPSTR_TEXTCALLBACKW    ((LPWSTR)-1)
+#define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK)
+
+#define I_IMAGECALLBACK          (-1)
+#define I_IMAGENONE              (-2)
+#define I_INDENTCALLBACK         (-1)
+#define I_CHILDRENCALLBACK       (-1)
+#define I_GROUPIDCALLBACK        (-1)
+#define I_GROUPIDNONE            (-2)
+#define I_COLUMNSCALLBACK        ((UINT)-1)
+
+/* owner drawn types */
+#define ODT_HEADER      100
+#define ODT_TAB         101
+#define ODT_LISTVIEW    102
+
+/* common notification structures */
+typedef struct tagNMTOOLTIPSCREATED
+{
+    NMHDR  hdr;
+    HWND hwndToolTips;
+} NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED;
+
+typedef struct tagNMMOUSE
+{
+    NMHDR   hdr;
+    DWORD_PTR   dwItemSpec;
+    DWORD_PTR   dwItemData;
+    POINT   pt;
+    DWORD   dwHitInfo;   /* info where on item or control the mouse is */
+} NMMOUSE, *LPNMMOUSE;
+
+typedef struct tagNMOBJECTNOTIFY
+{
+    NMHDR   hdr;
+    int     iItem;
+#ifdef __IID_DEFINED__
+    const IID *piid;
+#else
+    const void *piid;
+#endif
+    void    *pObject;
+    HRESULT hResult;
+    DWORD   dwFlags;
+} NMOBJECTNOTIFY, *LPNMOBJECTNOTIFY;
+
+typedef struct tagNMKEY
+{
+    NMHDR   hdr;
+    UINT    nVKey;
+    UINT    uFlags;
+} NMKEY, *LPNMKEY;
+
+typedef struct tagNMCHAR
+{
+    NMHDR   hdr;
+    UINT    ch;
+    DWORD   dwItemPrev;           /* Item previously selected */
+    DWORD   dwItemNext;           /* Item to be selected */
+} NMCHAR, *LPNMCHAR;
+
+#ifndef CCSIZEOF_STRUCT
+#define CCSIZEOF_STRUCT(name, member) \
+    (((INT)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \
+    sizeof(((name*)0)->member))
+#endif
+
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else   /* __cplusplus */
+#define SNDMSG SendMessage
+#endif  /* __cplusplus */
+#endif  /* SNDMSG */
+
+
+#ifdef __cplusplus
+#define SNDMSGA ::SendMessageA
+#define SNDMSGW ::SendMessageW
+#else
+#define SNDMSGA SendMessageA
+#define SNDMSGW SendMessageW
+#endif
+
+/* Custom Draw messages */
+
+#define CDRF_DODEFAULT          0x0
+#define CDRF_NEWFONT            0x00000002
+#define CDRF_SKIPDEFAULT        0x00000004
+#define CDRF_NOTIFYPOSTPAINT    0x00000010
+#define CDRF_NOTIFYITEMDRAW     0x00000020
+#define CDRF_NOTIFYSUBITEMDRAW  0x00000020
+#define CDRF_NOTIFYPOSTERASE    0x00000040
+#define CDRF_NOTIFYITEMERASE    0x00000080      /*  obsolete ??? */
+
+
+/* drawstage flags */
+
+#define CDDS_PREPAINT           1
+#define CDDS_POSTPAINT          2
+#define CDDS_PREERASE           3
+#define CDDS_POSTERASE          4
+
+#define CDDS_ITEM		0x00010000
+#define CDDS_ITEMPREPAINT	(CDDS_ITEM | CDDS_PREPAINT)
+#define CDDS_ITEMPOSTPAINT	(CDDS_ITEM | CDDS_POSTPAINT)
+#define CDDS_ITEMPREERASE	(CDDS_ITEM | CDDS_PREERASE)
+#define CDDS_ITEMPOSTERASE	(CDDS_ITEM | CDDS_POSTERASE)
+#define CDDS_SUBITEM            0x00020000
+
+/* itemState flags */
+
+#define CDIS_SELECTED           0x0001
+#define CDIS_GRAYED             0x0002
+#define CDIS_DISABLED           0x0004
+#define CDIS_CHECKED            0x0008
+#define CDIS_FOCUS              0x0010
+#define CDIS_DEFAULT            0x0020
+#define CDIS_HOT                0x0040
+#define CDIS_MARKED             0x0080
+#define CDIS_INDETERMINATE      0x0100
+#define CDIS_SHOWKEYBOARDCUES   0x0200
+#define CDIS_NEARHOT            0x0400
+#define CDIS_OTHERSIDEHOT       0x0800
+#define CDIS_DROPHILITED        0x1000
+
+
+typedef struct tagNMCUSTOMDRAWINFO
+{
+	NMHDR	hdr;
+	DWORD	dwDrawStage;
+	HDC	hdc;
+	RECT	rc;
+	DWORD_PTR dwItemSpec;
+	UINT	uItemState;
+	LPARAM	lItemlParam;
+} NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
+
+typedef struct tagNMTTCUSTOMDRAW
+{
+    NMCUSTOMDRAW nmcd;
+    UINT       uDrawFlags;
+} NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;
+
+
+
+
+/* StatusWindow */
+
+#define STATUSCLASSNAMEA	"msctls_statusbar32"
+#if defined(__GNUC__)
+# define STATUSCLASSNAMEW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+  's','t','a','t','u','s','b','a','r','3','2',0 }
+#elif defined(_MSC_VER)
+# define STATUSCLASSNAMEW       L"msctls_statusbar32"
+#else
+static const WCHAR STATUSCLASSNAMEW[] = { 'm','s','c','t','l','s','_',
+  's','t','a','t','u','s','b','a','r','3','2',0 };
+#endif
+#define STATUSCLASSNAME		WINELIB_NAME_AW(STATUSCLASSNAME)
+
+#define SBT_NOBORDERS		0x0100
+#define SBT_POPOUT		0x0200
+#define SBT_RTLREADING		0x0400  /* not supported */
+#define SBT_OWNERDRAW		0x1000
+
+#define SB_SIMPLEID		0x00ff
+
+#define SB_SETTEXTA		(WM_USER+1)
+#define SB_SETTEXTW		(WM_USER+11)
+#define SB_SETTEXT		WINELIB_NAME_AW(SB_SETTEXT)
+#define SB_GETTEXTA		(WM_USER+2)
+#define SB_GETTEXTW		(WM_USER+13)
+#define SB_GETTEXT		WINELIB_NAME_AW(SB_GETTEXT)
+#define SB_GETTEXTLENGTHA	(WM_USER+3)
+#define SB_GETTEXTLENGTHW	(WM_USER+12)
+#define SB_GETTEXTLENGTH	WINELIB_NAME_AW(SB_GETTEXTLENGTH)
+#define SB_SETPARTS		(WM_USER+4)
+#define SB_SETBORDERS		(WM_USER+5)
+#define SB_GETPARTS		(WM_USER+6)
+#define SB_GETBORDERS		(WM_USER+7)
+#define SB_SETMINHEIGHT		(WM_USER+8)
+#define SB_SIMPLE		(WM_USER+9)
+#define SB_GETRECT		(WM_USER+10)
+#define SB_ISSIMPLE		(WM_USER+14)
+#define SB_SETICON		(WM_USER+15)
+#define SB_SETTIPTEXTA		(WM_USER+16)
+#define SB_SETTIPTEXTW		(WM_USER+17)
+#define SB_SETTIPTEXT		WINELIB_NAME_AW(SB_SETTIPTEXT)
+#define SB_GETTIPTEXTA		(WM_USER+18)
+#define SB_GETTIPTEXTW		(WM_USER+19)
+#define SB_GETTIPTEXT		WINELIB_NAME_AW(SB_GETTIPTEXT)
+#define SB_GETICON		(WM_USER+20)
+#define SB_SETBKCOLOR		CCM_SETBKCOLOR   /* lParam = bkColor */
+#define SB_GETUNICODEFORMAT	CCM_GETUNICODEFORMAT
+#define SB_SETUNICODEFORMAT	CCM_SETUNICODEFORMAT
+
+#define SBN_FIRST		(0U-880U)
+#define SBN_LAST		(0U-899U)
+#define SBN_SIMPLEMODECHANGE	(SBN_FIRST-0)
+
+HWND WINAPI CreateStatusWindowA (LONG, LPCSTR, HWND, UINT);
+HWND WINAPI CreateStatusWindowW (LONG, LPCWSTR, HWND, UINT);
+#define CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow)
+VOID WINAPI DrawStatusTextA (HDC, LPCRECT, LPCSTR, UINT);
+VOID WINAPI DrawStatusTextW (HDC, LPCRECT, LPCWSTR, UINT);
+#define DrawStatusText WINELIB_NAME_AW(DrawStatusText)
+VOID WINAPI MenuHelp (UINT, WPARAM, LPARAM, HMENU,
+                      HINSTANCE, HWND, UINT*);
+
+typedef struct tagCOLORSCHEME
+{
+   DWORD            dwSize;
+   COLORREF         clrBtnHighlight;       /* highlight color */
+   COLORREF         clrBtnShadow;          /* shadow color */
+} COLORSCHEME, *LPCOLORSCHEME;
+
+/**************************************************************************
+ *  Drag List control
+ */
+
+typedef struct tagDRAGLISTINFO
+{
+    UINT  uNotification;
+    HWND  hWnd;
+    POINT ptCursor;
+} DRAGLISTINFO, *LPDRAGLISTINFO;
+
+#define DL_BEGINDRAG            (WM_USER+133)
+#define DL_DRAGGING             (WM_USER+134)
+#define DL_DROPPED              (WM_USER+135)
+#define DL_CANCELDRAG           (WM_USER+136)
+
+#define DL_CURSORSET            0
+#define DL_STOPCURSOR           1
+#define DL_COPYCURSOR           2
+#define DL_MOVECURSOR           3
+
+#define DRAGLISTMSGSTRINGA      "commctrl_DragListMsg"
+#if defined(__GNUC__)
+# define DRAGLISTMSGSTRINGW (const WCHAR []){ 'c','o','m','m','c','t','r','l', \
+  '_','D','r','a','g','L','i','s','t','M','s','g',0 }
+#elif defined(_MSC_VER)
+# define DRAGLISTMSGSTRINGW     L"commctrl_DragListMsg"
+#else
+static const WCHAR DRAGLISTMSGSTRINGW[] = { 'c','o','m','m','c','t','r','l',
+  '_','D','r','a','g','L','i','s','t','M','s','g',0 };
+#endif
+#define DRAGLISTMSGSTRING       WINELIB_NAME_AW(DRAGLISTMSGSTRING)
+
+BOOL WINAPI MakeDragList (HWND);
+VOID   WINAPI DrawInsert (HWND, HWND, INT);
+INT  WINAPI LBItemFromPt (HWND, POINT, BOOL);
+
+
+/* UpDown */
+
+#define UPDOWN_CLASSA           "msctls_updown32"
+#if defined(__GNUC__)
+# define UPDOWN_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+  'u','p','d','o','w','n','3','2',0 }
+#elif defined(_MSC_VER)
+# define UPDOWN_CLASSW          L"msctls_updown32"
+#else
+static const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_',
+  'u','p','d','o','w','n','3','2',0 };
+#endif
+#define UPDOWN_CLASS            WINELIB_NAME_AW(UPDOWN_CLASS)
+
+typedef struct _UDACCEL
+{
+    UINT nSec;
+    UINT nInc;
+} UDACCEL, *LPUDACCEL;
+
+#define UD_MAXVAL          0x7fff
+#define UD_MINVAL          0x8001
+
+
+#define UDN_FIRST          (0U-721)
+#define UDN_LAST           (0U-740)
+#define UDN_DELTAPOS       (UDN_FIRST-1)
+
+#define UDM_SETRANGE       (WM_USER+101)
+#define UDM_GETRANGE       (WM_USER+102)
+#define UDM_SETPOS         (WM_USER+103)
+#define UDM_GETPOS         (WM_USER+104)
+#define UDM_SETBUDDY       (WM_USER+105)
+#define UDM_GETBUDDY       (WM_USER+106)
+#define UDM_SETACCEL       (WM_USER+107)
+#define UDM_GETACCEL       (WM_USER+108)
+#define UDM_SETBASE        (WM_USER+109)
+#define UDM_GETBASE        (WM_USER+110)
+#define UDM_SETRANGE32     (WM_USER+111)
+#define UDM_GETRANGE32     (WM_USER+112)
+#define UDM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
+#define UDM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT
+#define UDM_SETPOS32       (WM_USER+113)
+#define UDM_GETPOS32       (WM_USER+114)
+
+
+#define NMUPDOWN    NM_UPDOWN
+#define LPNMUPDOWN  LPNM_UPDOWN
+
+typedef struct tagNM_UPDOWN
+{
+  NMHDR hdr;
+  int iPos;
+  int iDelta;
+} NM_UPDOWN, *LPNM_UPDOWN;
+
+HWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT,
+                                   HWND, INT, HINSTANCE, HWND,
+                                   INT, INT, INT);
+
+/* Progress Bar */
+
+#define PROGRESS_CLASSA   "msctls_progress32"
+#if defined(__GNUC__)
+# define PROGRESS_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+  'p','r','o','g','r','e','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define PROGRESS_CLASSW  L"msctls_progress32"
+#else
+static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_',
+  'p','r','o','g','r','e','s','s','3','2',0 };
+#endif
+#define PROGRESS_CLASS      WINELIB_NAME_AW(PROGRESS_CLASS)
+
+#define PBM_SETRANGE        (WM_USER+1)
+#define PBM_SETPOS          (WM_USER+2)
+#define PBM_DELTAPOS        (WM_USER+3)
+#define PBM_SETSTEP         (WM_USER+4)
+#define PBM_STEPIT          (WM_USER+5)
+#define PBM_SETRANGE32      (WM_USER+6)
+#define PBM_GETRANGE        (WM_USER+7)
+#define PBM_GETPOS          (WM_USER+8)
+#define PBM_SETBARCOLOR     (WM_USER+9)
+#define PBM_SETMARQUEE      (WM_USER+10)
+#define PBM_GETSTEP         (WM_USER+13)
+#define PBM_GETBKCOLOR      (WM_USER+14)
+#define PBM_GETBARCOLOR     (WM_USER+15)
+#define PBM_SETSTATE        (WM_USER+16)
+#define PBM_GETSTATE        (WM_USER+17)
+#define PBM_SETBKCOLOR      CCM_SETBKCOLOR
+
+
+#define PBST_NORMAL         1
+#define PBST_ERROR          2
+#define PBST_PAUSED         3
+
+typedef struct
+{
+    INT iLow;
+    INT iHigh;
+} PBRANGE, *PPBRANGE;
+
+
+/* ImageList */
+
+struct _IMAGELIST;
+typedef struct _IMAGELIST *HIMAGELIST;
+
+#define CLR_NONE         0xFFFFFFFF
+#define CLR_DEFAULT      0xFF000000
+#define CLR_HILIGHT      CLR_DEFAULT
+
+#define ILC_MASK          0x0001
+#define ILC_COLOR         0x0000
+#define ILC_COLORDDB      0x00FE
+#define ILC_COLOR4        0x0004
+#define ILC_COLOR8        0x0008
+#define ILC_COLOR16       0x0010
+#define ILC_COLOR24       0x0018
+#define ILC_COLOR32       0x0020
+#define ILC_PALETTE       0x0800  /* no longer supported by M$ */
+#define ILC_MIRROR        0x2000
+#define ILC_PERITEMMIRROR 0x8000
+
+#define ILD_NORMAL        0x0000
+#define ILD_TRANSPARENT   0x0001
+#define ILD_BLEND25       0x0002
+#define ILD_BLEND50       0x0004
+#define ILD_MASK          0x0010
+#define ILD_IMAGE         0x0020
+#define ILD_ROP           0x0040
+#define ILD_OVERLAYMASK   0x0F00
+#define ILD_PRESERVEALPHA 0x1000
+#define ILD_SCALE         0x2000
+#define ILD_DPISCALE      0x4000
+#define ILD_ASYNC         0x8000
+
+#define ILD_SELECTED     ILD_BLEND50
+#define ILD_FOCUS        ILD_BLEND25
+#define ILD_BLEND        ILD_BLEND50
+
+#define INDEXTOOVERLAYMASK(i)  ((i)<<8)
+#define INDEXTOSTATEIMAGEMASK(i) ((i)<<12)
+
+#define ILCF_MOVE        (0x00000000)
+#define ILCF_SWAP        (0x00000001)
+
+#define ILGT_NORMAL     0x0000
+#define ILGT_ASYNC      0x0001
+
+#define ILS_NORMAL	0x0000
+#define ILS_GLOW	0x0001
+#define ILS_SHADOW	0x0002
+#define ILS_SATURATE	0x0004
+#define ILS_ALPHA	0x0008
+
+typedef struct _IMAGEINFO
+{
+    HBITMAP hbmImage;
+    HBITMAP hbmMask;
+    INT     Unused1;
+    INT     Unused2;
+    RECT    rcImage;
+} IMAGEINFO, *LPIMAGEINFO;
+
+
+typedef struct _IMAGELISTDRAWPARAMS
+{
+    DWORD       cbSize;
+    HIMAGELIST  himl;
+    INT         i;
+    HDC         hdcDst;
+    INT         x;
+    INT         y;
+    INT         cx;
+    INT         cy;
+    INT         xBitmap;  /* x offset from the upperleft of bitmap */
+    INT         yBitmap;  /* y offset from the upperleft of bitmap */
+    COLORREF    rgbBk;
+    COLORREF    rgbFg;
+    UINT        fStyle;
+    DWORD       dwRop;
+    DWORD       fState;
+    DWORD       Frame;
+    COLORREF    crEffect;
+} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;
+
+#define IMAGELISTDRAWPARAMS_V3_SIZE CCSIZEOF_STRUCT(IMAGELISTDRAWPARAMS, dwRop)
+
+HRESULT  WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **);
+INT      WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP);
+INT      WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF);
+BOOL     WINAPI ImageList_BeginDrag(HIMAGELIST,INT,INT,INT);
+BOOL     WINAPI ImageList_Copy(HIMAGELIST,INT,HIMAGELIST,INT,UINT);
+HIMAGELIST WINAPI ImageList_Create(INT,INT,UINT,INT,INT);
+BOOL     WINAPI ImageList_Destroy(HIMAGELIST);
+BOOL     WINAPI ImageList_DragEnter(HWND,INT,INT);
+BOOL     WINAPI ImageList_DragLeave(HWND);
+BOOL     WINAPI ImageList_DragMove(INT,INT);
+BOOL     WINAPI ImageList_DragShowNolock (BOOL);
+BOOL     WINAPI ImageList_Draw(HIMAGELIST,INT,HDC,INT,INT,UINT);
+BOOL     WINAPI ImageList_DrawEx(HIMAGELIST,INT,HDC,INT,INT,INT,
+                                   INT,COLORREF,COLORREF,UINT);
+BOOL     WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*);
+HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST);
+VOID     WINAPI ImageList_EndDrag(VOID);
+COLORREF   WINAPI ImageList_GetBkColor(HIMAGELIST);
+HIMAGELIST WINAPI ImageList_GetDragImage(POINT*,POINT*);
+HICON    WINAPI ImageList_GetIcon(HIMAGELIST,INT,UINT);
+BOOL     WINAPI ImageList_GetIconSize(HIMAGELIST,INT*,INT*);
+INT      WINAPI ImageList_GetImageCount(HIMAGELIST);
+BOOL     WINAPI ImageList_GetImageInfo(HIMAGELIST,INT,IMAGEINFO*);
+BOOL     WINAPI ImageList_GetImageRect(HIMAGELIST,INT,LPRECT);
+HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,INT,INT,
+                                         COLORREF,UINT,UINT);
+HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,INT,INT,
+                                         COLORREF,UINT,UINT);
+#define    ImageList_LoadImage WINELIB_NAME_AW(ImageList_LoadImage)
+HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT,HIMAGELIST,INT,INT,INT);
+BOOL     WINAPI ImageList_Remove(HIMAGELIST,INT);
+BOOL     WINAPI ImageList_Replace(HIMAGELIST,INT,HBITMAP,HBITMAP);
+INT      WINAPI ImageList_ReplaceIcon(HIMAGELIST,INT,HICON);
+COLORREF   WINAPI ImageList_SetBkColor(HIMAGELIST,COLORREF);
+BOOL     WINAPI ImageList_SetDragCursorImage(HIMAGELIST,INT,INT,INT);
+
+BOOL     WINAPI ImageList_SetIconSize(HIMAGELIST,INT,INT);
+BOOL     WINAPI ImageList_SetImageCount(HIMAGELIST,UINT);
+BOOL     WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT,INT);
+
+#ifdef __IStream_INTERFACE_DEFINED__
+HIMAGELIST WINAPI ImageList_Read(LPSTREAM);
+BOOL     WINAPI ImageList_Write(HIMAGELIST, LPSTREAM);
+#endif
+
+#define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon)
+#define ImageList_ExtractIcon(hi,himl,i) ImageList_GetIcon(himl,i,0)
+#define ImageList_LoadBitmap(hi,lpbmp,cx,cGrow,crMask) \
+  ImageList_LoadImage(hi,lpbmp,cx,cGrow,crMask,IMAGE_BITMAP,0)
+#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
+
+
+#ifndef WM_MOUSEHOVER
+#define WM_MOUSEHOVER                   0x02A1
+#define WM_MOUSELEAVE                   0x02A3
+#endif
+
+#ifndef TME_HOVER
+
+#define TME_HOVER       0x00000001
+#define TME_LEAVE       0x00000002
+#define TME_NONCLIENT   0x00000010
+#define TME_QUERY       0x40000000
+#define TME_CANCEL      0x80000000
+
+
+#define HOVER_DEFAULT   0xFFFFFFFF
+
+typedef struct tagTRACKMOUSEEVENT {
+    DWORD cbSize;
+    DWORD dwFlags;
+    HWND  hwndTrack;
+    DWORD dwHoverTime;
+} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
+
+#endif
+
+BOOL WINAPI _TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
+
+/* Flat Scrollbar control */
+
+#define FLATSB_CLASSA         "flatsb_class32"
+#if defined(__GNUC__)
+# define FLATSB_CLASSW (const WCHAR []){ 'f','l','a','t','s','b','_', \
+  'c','l','a','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define FLATSB_CLASSW        L"flatsb_class32"
+#else
+static const WCHAR FLATSB_CLASSW[] = { 'f','l','a','t','s','b','_',
+  'c','l','a','s','s','3','2',0 };
+#endif
+#define FLATSB_CLASS          WINELIB_NAME_AW(FLATSB_CLASS)
+
+#define WSB_PROP_CYVSCROLL     __MSABI_LONG(0x00000001)
+#define WSB_PROP_CXHSCROLL     __MSABI_LONG(0x00000002)
+#define WSB_PROP_CYHSCROLL     __MSABI_LONG(0x00000004)
+#define WSB_PROP_CXVSCROLL     __MSABI_LONG(0x00000008)
+#define WSB_PROP_CXHTHUMB      __MSABI_LONG(0x00000010)
+#define WSB_PROP_CYVTHUMB      __MSABI_LONG(0x00000020)
+#define WSB_PROP_VBKGCOLOR     __MSABI_LONG(0x00000040)
+#define WSB_PROP_HBKGCOLOR     __MSABI_LONG(0x00000080)
+#define WSB_PROP_VSTYLE        __MSABI_LONG(0x00000100)
+#define WSB_PROP_HSTYLE        __MSABI_LONG(0x00000200)
+#define WSB_PROP_WINSTYLE      __MSABI_LONG(0x00000400)
+#define WSB_PROP_PALETTE       __MSABI_LONG(0x00000800)
+#define WSB_PROP_MASK          __MSABI_LONG(0x00000FFF)
+
+#define FSB_REGULAR_MODE       0
+#define FSB_ENCARTA_MODE       1
+#define FSB_FLAT_MODE          2
+
+
+BOOL  WINAPI FlatSB_EnableScrollBar(HWND, INT, UINT);
+BOOL  WINAPI FlatSB_ShowScrollBar(HWND, INT, BOOL);
+BOOL  WINAPI FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT);
+BOOL  WINAPI FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO);
+INT   WINAPI FlatSB_GetScrollPos(HWND, INT);
+BOOL  WINAPI FlatSB_GetScrollProp(HWND, INT, LPINT);
+INT   WINAPI FlatSB_SetScrollPos(HWND, INT, INT, BOOL);
+INT   WINAPI FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL);
+INT   WINAPI FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL);
+BOOL  WINAPI FlatSB_SetScrollProp(HWND, UINT, INT, BOOL);
+BOOL  WINAPI InitializeFlatSB(HWND);
+HRESULT WINAPI UninitializeFlatSB(HWND);
+
+/* Subclassing stuff */
+typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR);
+BOOL WINAPI SetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
+BOOL WINAPI GetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR*);
+BOOL WINAPI RemoveWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR);
+LRESULT WINAPI DefSubclassProc(HWND, UINT, WPARAM, LPARAM);
+
+int WINAPI DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF, COLORREF, int, int);
+
+/* Header control */
+
+#define WC_HEADERA		"SysHeader32"
+#if defined(__GNUC__)
+# define WC_HEADERW (const WCHAR []){ 'S','y','s','H','e','a','d','e','r','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_HEADERW             L"SysHeader32"
+#else
+static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 };
+#endif
+#define WC_HEADER		WINELIB_NAME_AW(WC_HEADER)
+
+
+#define HDI_WIDTH               0x0001
+#define HDI_HEIGHT              HDI_WIDTH
+#define HDI_TEXT                0x0002
+#define HDI_FORMAT              0x0004
+#define HDI_LPARAM              0x0008
+#define HDI_BITMAP              0x0010
+#define HDI_IMAGE               0x0020
+#define HDI_DI_SETITEM          0x0040
+#define HDI_ORDER               0x0080
+#define HDI_FILTER              0x0100
+#define HDI_STATE               0x0200
+
+#define HDIS_FOCUSED        0x00000001
+
+#define HDF_LEFT                0x0000
+#define HDF_RIGHT               0x0001
+#define HDF_CENTER              0x0002
+#define HDF_JUSTIFYMASK         0x0003
+#define HDF_RTLREADING          0x0004
+#define HDF_CHECKBOX            0x0040
+#define HDF_CHECKED             0x0080
+#define HDF_FIXEDWIDTH          0x0100
+#define HDF_SORTDOWN            0x0200
+#define HDF_SORTUP              0x0400
+#define HDF_IMAGE               0x0800
+#define HDF_BITMAP_ON_RIGHT     0x1000
+#define HDF_BITMAP              0x2000
+#define HDF_STRING              0x4000
+#define HDF_OWNERDRAW           0x8000
+#define HDF_SPLITBUTTON      0x1000000
+
+#define HHT_NOWHERE             0x0001
+#define HHT_ONHEADER            0x0002
+#define HHT_ONDIVIDER           0x0004
+#define HHT_ONDIVOPEN           0x0008
+#define HHT_ONFILTER            0x0010
+#define HHT_ONFILTERBUTTON      0x0020
+#define HHT_ABOVE               0x0100
+#define HHT_BELOW               0x0200
+#define HHT_TORIGHT             0x0400
+#define HHT_TOLEFT              0x0800
+#define HHT_ONITEMSTATEICON     0x1000
+#define HHT_ONDROPDOWN          0x2000
+#define HHT_ONOVERFLOW          0x4000
+
+#define HDM_FIRST               0x1200
+#define HDM_GETITEMCOUNT        (HDM_FIRST+0)
+#define HDM_INSERTITEMA         (HDM_FIRST+1)
+#define HDM_INSERTITEMW         (HDM_FIRST+10)
+#define HDM_INSERTITEM		WINELIB_NAME_AW(HDM_INSERTITEM)
+#define HDM_DELETEITEM          (HDM_FIRST+2)
+#define HDM_GETITEMA            (HDM_FIRST+3)
+#define HDM_GETITEMW            (HDM_FIRST+11)
+#define HDM_GETITEM		WINELIB_NAME_AW(HDM_GETITEM)
+#define HDM_SETITEMA            (HDM_FIRST+4)
+#define HDM_SETITEMW            (HDM_FIRST+12)
+#define HDM_SETITEM		WINELIB_NAME_AW(HDM_SETITEM)
+#define HDM_LAYOUT              (HDM_FIRST+5)
+#define HDM_HITTEST             (HDM_FIRST+6)
+#define HDM_GETITEMRECT         (HDM_FIRST+7)
+#define HDM_SETIMAGELIST        (HDM_FIRST+8)
+#define HDM_GETIMAGELIST        (HDM_FIRST+9)
+
+#define HDM_ORDERTOINDEX        (HDM_FIRST+15)
+#define HDM_CREATEDRAGIMAGE     (HDM_FIRST+16)
+#define HDM_GETORDERARRAY       (HDM_FIRST+17)
+#define HDM_SETORDERARRAY       (HDM_FIRST+18)
+#define HDM_SETHOTDIVIDER       (HDM_FIRST+19)
+#define HDM_SETBITMAPMARGIN     (HDM_FIRST+20)
+#define HDM_GETBITMAPMARGIN     (HDM_FIRST+21)
+#define HDM_SETFILTERCHANGETIMEOUT (HDM_FIRST+22)
+#define HDM_EDITFILTER          (HDM_FIRST+23)
+#define HDM_CLEARFILTER         (HDM_FIRST+24)
+#define HDM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT
+#define HDM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
+
+#define HDN_FIRST               (0U-300U)
+#define HDN_LAST                (0U-399U)
+#define HDN_ITEMCHANGINGA       (HDN_FIRST-0)
+#define HDN_ITEMCHANGINGW       (HDN_FIRST-20)
+#define HDN_ITEMCHANGING        WINELIB_NAME_AW(HDN_ITEMCHANGING)
+#define HDN_ITEMCHANGEDA        (HDN_FIRST-1)
+#define HDN_ITEMCHANGEDW        (HDN_FIRST-21)
+#define HDN_ITEMCHANGED         WINELIB_NAME_AW(HDN_ITEMCHANGED)
+#define HDN_ITEMCLICKA          (HDN_FIRST-2)
+#define HDN_ITEMCLICKW          (HDN_FIRST-22)
+#define HDN_ITEMCLICK           WINELIB_NAME_AW(HDN_ITEMCLICK)
+#define HDN_ITEMDBLCLICKA       (HDN_FIRST-3)
+#define HDN_ITEMDBLCLICKW       (HDN_FIRST-23)
+#define HDN_ITEMDBLCLICK        WINELIB_NAME_AW(HDN_ITEMDBLCLICK)
+#define HDN_DIVIDERDBLCLICKA    (HDN_FIRST-5)
+#define HDN_DIVIDERDBLCLICKW    (HDN_FIRST-25)
+#define HDN_DIVIDERDBLCLICK     WINELIB_NAME_AW(HDN_DIVIDERDBLCLICK)
+#define HDN_BEGINTRACKA         (HDN_FIRST-6)
+#define HDN_BEGINTRACKW         (HDN_FIRST-26)
+#define HDN_BEGINTRACK          WINELIB_NAME_AW(HDN_BEGINTRACK)
+#define HDN_ENDTRACKA           (HDN_FIRST-7)
+#define HDN_ENDTRACKW           (HDN_FIRST-27)
+#define HDN_ENDTRACK            WINELIB_NAME_AW(HDN_ENDTRACK)
+#define HDN_TRACKA              (HDN_FIRST-8)
+#define HDN_TRACKW              (HDN_FIRST-28)
+#define HDN_TRACK               WINELIB_NAME_AW(HDN_TRACK)
+#define HDN_GETDISPINFOA        (HDN_FIRST-9)
+#define HDN_GETDISPINFOW        (HDN_FIRST-29)
+#define HDN_GETDISPINFO         WINELIB_NAME_AW(HDN_GETDISPINFO)
+#define HDN_BEGINDRAG           (HDN_FIRST-10)
+#define HDN_ENDDRAG             (HDN_FIRST-11)
+#define HDN_FILTERCHANGE        (HDN_FIRST-12)
+#define HDN_FILTERBTNCLICK      (HDN_FIRST-13)
+#define HDN_BEGINFILTEREDIT     (HDN_FIRST-14)
+#define HDN_ENDFILTEREDIT       (HDN_FIRST-15)
+#define HDN_ITEMSTATEICONCLICK  (HDN_FIRST-16)
+#define HDN_ITEMKEYDOWN         (HDN_FIRST-17)
+
+typedef struct _HD_LAYOUT
+{
+    RECT      *prc;
+    WINDOWPOS *pwpos;
+} HDLAYOUT, *LPHDLAYOUT;
+
+#define HD_LAYOUT   HDLAYOUT
+
+typedef struct _HD_ITEMA
+{
+    UINT    mask;
+    INT     cxy;
+    LPSTR     pszText;
+    HBITMAP hbm;
+    INT     cchTextMax;
+    INT     fmt;
+    LPARAM    lParam;
+    /* (_WIN32_IE >= 0x0300) */
+    INT     iImage;
+    INT     iOrder;
+    /* (_WIN32_IE >= 0x0500) */
+    UINT    type;
+    LPVOID  pvFilter;
+    /* (_WIN32_WINNT >= 0x0600) */
+    UINT    state;
+} HDITEMA, *LPHDITEMA;
+
+typedef struct _HD_ITEMW
+{
+    UINT    mask;
+    INT     cxy;
+    LPWSTR    pszText;
+    HBITMAP hbm;
+    INT     cchTextMax;
+    INT     fmt;
+    LPARAM    lParam;
+    /* (_WIN32_IE >= 0x0300) */
+    INT     iImage;
+    INT     iOrder;
+    /* (_WIN32_IE >= 0x0500) */
+    UINT    type;
+    LPVOID  pvFilter;
+    /* (_WIN32_WINNT >= 0x0600) */
+    UINT    state;
+} HDITEMW, *LPHDITEMW;
+
+#define HDITEM   WINELIB_NAME_AW(HDITEM)
+#define LPHDITEM WINELIB_NAME_AW(LPHDITEM)
+#define HD_ITEM  HDITEM
+
+#define HDITEM_V1_SIZEA CCSIZEOF_STRUCT(HDITEMA, lParam)
+#define HDITEM_V1_SIZEW CCSIZEOF_STRUCT(HDITEMW, lParam)
+#define HDITEM_V1_SIZE WINELIB_NAME_AW(HDITEM_V1_SIZE)
+
+#define HDFT_ISSTRING      0x0000
+#define HDFT_ISNUMBER      0x0001
+#define HDFT_HASNOVALUE    0x8000
+
+typedef struct _HD_TEXTFILTERA
+{
+    LPSTR pszText;
+    INT cchTextMax;
+} HD_TEXTFILTERA, *LPHD_TEXTFILTERA;
+
+typedef struct _HD_TEXTFILTERW
+{
+    LPWSTR pszText;
+    INT cchTextMax;
+} HD_TEXTFILTERW, *LPHD_TEXTFILTERW;
+
+#define HD_TEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER)
+#define HDTEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER)
+#define LPHD_TEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER)
+#define LPHDTEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER)
+
+typedef struct _HD_HITTESTINFO
+{
+    POINT pt;
+    UINT  flags;
+    INT   iItem;
+} HDHITTESTINFO, *LPHDHITTESTINFO;
+
+#define HD_HITTESTINFO   HDHITTESTINFO
+
+typedef struct tagNMHEADERA
+{
+    NMHDR     hdr;
+    INT     iItem;
+    INT     iButton;
+    HDITEMA *pitem;
+} NMHEADERA, *LPNMHEADERA;
+
+typedef struct tagNMHEADERW
+{
+    NMHDR     hdr;
+    INT     iItem;
+    INT     iButton;
+    HDITEMW *pitem;
+} NMHEADERW, *LPNMHEADERW;
+
+#define NMHEADER		WINELIB_NAME_AW(NMHEADER)
+#define LPNMHEADER		WINELIB_NAME_AW(LPNMHEADER)
+#define HD_NOTIFY               NMHEADER
+
+typedef struct tagNMHDDISPINFOA
+{
+    NMHDR     hdr;
+    INT     iItem;
+    UINT    mask;
+    LPSTR     pszText;
+    INT     cchTextMax;
+    INT     iImage;
+    LPARAM    lParam;
+} NMHDDISPINFOA, *LPNMHDDISPINFOA;
+
+typedef struct tagNMHDDISPINFOW
+{
+    NMHDR     hdr;
+    INT     iItem;
+    UINT    mask;
+    LPWSTR    pszText;
+    INT     cchTextMax;
+    INT     iImage;
+    LPARAM    lParam;
+} NMHDDISPINFOW, *LPNMHDDISPINFOW;
+
+#define NMHDDISPINFO		WINELIB_NAME_AW(NMHDDISPINFO)
+#define LPNMHDDISPINFO		WINELIB_NAME_AW(LPNMHDDISPINFO)
+
+typedef struct tagNMHDFILTERBTNCLICK
+{
+    NMHDR hdr;
+    INT iItem;
+    RECT rc;
+} NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK;
+
+#define Header_GetItemCount(hwndHD) \
+  (INT)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, 0)
+#define Header_InsertItemA(hwndHD,i,phdi) \
+  (INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
+#define Header_InsertItemW(hwndHD,i,phdi) \
+  (INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
+#define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem)
+#define Header_DeleteItem(hwndHD,i) \
+  (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(INT)(i), 0)
+#define Header_GetItemA(hwndHD,i,phdi) \
+  (BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi))
+#define Header_GetItemW(hwndHD,i,phdi) \
+  (BOOL)SNDMSGW((hwndHD),HDM_GETITEMW,(WPARAM)(INT)(i),(LPARAM)(HDITEMW*)(phdi))
+#define Header_GetItem WINELIB_NAME_AW(Header_GetItem)
+#define Header_SetItemA(hwndHD,i,phdi) \
+  (BOOL)SNDMSGA((hwndHD),HDM_SETITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
+#define Header_SetItemW(hwndHD,i,phdi) \
+  (BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
+#define Header_SetItem WINELIB_NAME_AW(Header_SetItem)
+#define Header_Layout(hwndHD,playout) \
+  (BOOL)SNDMSG((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))
+#define Header_GetItemRect(hwnd,iItem,lprc) \
+  (BOOL)SNDMSG((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc)
+#define Header_SetImageList(hwnd,himl) \
+  (HIMAGELIST)SNDMSG((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl)
+#define Header_GetImageList(hwnd) \
+  (HIMAGELIST)SNDMSG((hwnd),HDM_GETIMAGELIST,0,0)
+#define Header_OrderToIndex(hwnd,i) \
+  (INT)SNDMSG((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0)
+#define Header_CreateDragImage(hwnd,i) \
+  (HIMAGELIST)SNDMSG((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0)
+#define Header_GetOrderArray(hwnd,iCount,lpi) \
+  (BOOL)SNDMSG((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
+#define Header_SetOrderArray(hwnd,iCount,lpi) \
+  (BOOL)SNDMSG((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
+#define Header_SetHotDivider(hwnd,fPos,dw) \
+  (INT)SNDMSG((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw)
+#define Header_SetUnicodeFormat(hwnd,fUnicode) \
+  (BOOL)SNDMSG((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0)
+#define Header_GetUnicodeFormat(hwnd) \
+  (BOOL)SNDMSG((hwnd),HDM_GETUNICODEFORMAT,0,0)
+
+/* Win32 5.1 Button Theme */
+#define WC_BUTTONA       "Button"
+#if defined(__GNUC__)
+# define WC_BUTTONW (const WCHAR []){ 'B','u','t','t','o','n',0 }
+#elif defined(_MSC_VER)
+# define WC_BUTTONW      L"Button"
+#else
+static const WCHAR WC_BUTTONW[] = { 'B','u','t','t','o','n',0 };
+#endif
+#define WC_BUTTON WINELIB_NAME_AW(WC_BUTTON)
+
+#define BCN_FIRST               (0U-1250U)
+#define BCN_LAST                (0U-1350U)
+
+#define BCN_HOTITEMCHANGE       (BCN_FIRST + 0x0001)
+
+typedef struct tagNMBCHOTITEM
+{
+  NMHDR hdr;
+  DWORD dwFlags;
+} NMBCHOTITEM, *LPNMBCHOTITEM;
+
+#define BST_HOT                 0x0200
+
+/* Button control styles for _WIN32_WINNT >= 0x600 */
+#define BS_SPLITBUTTON          0x0000000C
+#define BS_DEFSPLITBUTTON       0x0000000D
+#define BS_COMMANDLINK          0x0000000E
+#define BS_DEFCOMMANDLINK       0x0000000F
+
+/* Toolbar */
+
+#define TOOLBARCLASSNAMEA       "ToolbarWindow32"
+#if defined(__GNUC__)
+# define TOOLBARCLASSNAMEW (const WCHAR []){ 'T','o','o','l','b','a','r', \
+  'W','i','n','d','o','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define TOOLBARCLASSNAMEW      L"ToolbarWindow32"
+#else
+static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r',
+  'W','i','n','d','o','w','3','2',0 };
+#endif
+#define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME)
+
+#define CMB_MASKED              0x02
+
+#define TBSTATE_CHECKED         0x01
+#define TBSTATE_PRESSED         0x02
+#define TBSTATE_ENABLED         0x04
+#define TBSTATE_HIDDEN          0x08
+#define TBSTATE_INDETERMINATE   0x10
+#define TBSTATE_WRAP            0x20
+#define TBSTATE_ELLIPSES        0x40
+#define TBSTATE_MARKED          0x80
+
+
+/* as of _WIN32_IE >= 0x0500 the following symbols are obsolete,
+ * "everyone" should use the BTNS_... stuff below
+ */
+#define TBSTYLE_BUTTON          0x00
+#define TBSTYLE_SEP             0x01
+#define TBSTYLE_CHECK           0x02
+#define TBSTYLE_GROUP           0x04
+#define TBSTYLE_CHECKGROUP      (TBSTYLE_GROUP | TBSTYLE_CHECK)
+#define TBSTYLE_DROPDOWN        0x08
+#define TBSTYLE_AUTOSIZE        0x10
+#define TBSTYLE_NOPREFIX        0x20
+#define BTNS_BUTTON             TBSTYLE_BUTTON
+#define BTNS_SEP                TBSTYLE_SEP
+#define BTNS_CHECK              TBSTYLE_CHECK
+#define BTNS_GROUP              TBSTYLE_GROUP
+#define BTNS_CHECKGROUP         TBSTYLE_CHECKGROUP
+#define BTNS_DROPDOWN           TBSTYLE_DROPDOWN
+#define BTNS_AUTOSIZE           TBSTYLE_AUTOSIZE
+#define BTNS_NOPREFIX           TBSTYLE_NOPREFIX
+#define BTNS_SHOWTEXT           0x40  /* ignored unless TBSTYLE_EX_MIXEDB set */
+#define BTNS_WHOLEDROPDOWN      0x80  /* draw dropdown arrow, but without split arrow section */
+
+#define TBSTYLE_TOOLTIPS        0x0100
+#define TBSTYLE_WRAPABLE        0x0200
+#define TBSTYLE_ALTDRAG         0x0400
+#define TBSTYLE_FLAT            0x0800
+#define TBSTYLE_LIST            0x1000
+#define TBSTYLE_CUSTOMERASE     0x2000
+#define TBSTYLE_REGISTERDROP    0x4000
+#define TBSTYLE_TRANSPARENT     0x8000
+#define TBSTYLE_EX_DRAWDDARROWS         0x00000001
+#define TBSTYLE_EX_UNDOC1               0x00000004 /* similar to TBSTYLE_WRAPABLE */
+#define TBSTYLE_EX_MIXEDBUTTONS         0x00000008
+#define TBSTYLE_EX_HIDECLIPPEDBUTTONS   0x00000010 /* don't show partially obscured buttons */
+#define TBSTYLE_EX_DOUBLEBUFFER         0x00000080 /* Double Buffer the toolbar */
+
+#define TBIF_IMAGE              0x00000001
+#define TBIF_TEXT               0x00000002
+#define TBIF_STATE              0x00000004
+#define TBIF_STYLE              0x00000008
+#define TBIF_LPARAM             0x00000010
+#define TBIF_COMMAND            0x00000020
+#define TBIF_SIZE               0x00000040
+#define TBIF_BYINDEX            0x80000000
+
+#define TBBF_LARGE		0x0001
+
+#define TB_ENABLEBUTTON          (WM_USER+1)
+#define TB_CHECKBUTTON           (WM_USER+2)
+#define TB_PRESSBUTTON           (WM_USER+3)
+#define TB_HIDEBUTTON            (WM_USER+4)
+#define TB_INDETERMINATE         (WM_USER+5)
+#define TB_MARKBUTTON		 (WM_USER+6)
+#define TB_ISBUTTONENABLED       (WM_USER+9)
+#define TB_ISBUTTONCHECKED       (WM_USER+10)
+#define TB_ISBUTTONPRESSED       (WM_USER+11)
+#define TB_ISBUTTONHIDDEN        (WM_USER+12)
+#define TB_ISBUTTONINDETERMINATE (WM_USER+13)
+#define TB_ISBUTTONHIGHLIGHTED   (WM_USER+14)
+#define TB_SETSTATE              (WM_USER+17)
+#define TB_GETSTATE              (WM_USER+18)
+#define TB_ADDBITMAP             (WM_USER+19)
+#define TB_ADDBUTTONSA           (WM_USER+20)
+#define TB_ADDBUTTONSW           (WM_USER+68)
+#define TB_ADDBUTTONS            WINELIB_NAME_AW(TB_ADDBUTTONS)
+#define TB_HITTEST               (WM_USER+69)
+#define TB_INSERTBUTTONA         (WM_USER+21)
+#define TB_INSERTBUTTONW         (WM_USER+67)
+#define TB_INSERTBUTTON          WINELIB_NAME_AW(TB_INSERTBUTTON)
+#define TB_DELETEBUTTON          (WM_USER+22)
+#define TB_GETBUTTON             (WM_USER+23)
+#define TB_BUTTONCOUNT           (WM_USER+24)
+#define TB_COMMANDTOINDEX        (WM_USER+25)
+#define TB_SAVERESTOREA          (WM_USER+26)
+#define TB_SAVERESTOREW          (WM_USER+76)
+#define TB_SAVERESTORE           WINELIB_NAME_AW(TB_SAVERESTORE)
+#define TB_CUSTOMIZE             (WM_USER+27)
+#define TB_ADDSTRINGA            (WM_USER+28)
+#define TB_ADDSTRINGW            (WM_USER+77)
+#define TB_ADDSTRING             WINELIB_NAME_AW(TB_ADDSTRING)
+#define TB_GETITEMRECT           (WM_USER+29)
+#define TB_BUTTONSTRUCTSIZE      (WM_USER+30)
+#define TB_SETBUTTONSIZE         (WM_USER+31)
+#define TB_SETBITMAPSIZE         (WM_USER+32)
+#define TB_AUTOSIZE              (WM_USER+33)
+#define TB_GETTOOLTIPS           (WM_USER+35)
+#define TB_SETTOOLTIPS           (WM_USER+36)
+#define TB_SETPARENT             (WM_USER+37)
+#define TB_SETROWS               (WM_USER+39)
+#define TB_GETROWS               (WM_USER+40)
+#define TB_GETBITMAPFLAGS        (WM_USER+41)
+#define TB_SETCMDID              (WM_USER+42)
+#define TB_CHANGEBITMAP          (WM_USER+43)
+#define TB_GETBITMAP             (WM_USER+44)
+#define TB_GETBUTTONTEXTA        (WM_USER+45)
+#define TB_GETBUTTONTEXTW        (WM_USER+75)
+#define TB_GETBUTTONTEXT         WINELIB_NAME_AW(TB_GETBUTTONTEXT)
+#define TB_REPLACEBITMAP         (WM_USER+46)
+#define TB_SETINDENT             (WM_USER+47)
+#define TB_SETIMAGELIST          (WM_USER+48)
+#define TB_GETIMAGELIST          (WM_USER+49)
+#define TB_LOADIMAGES            (WM_USER+50)
+#define TB_GETRECT               (WM_USER+51) /* wParam is the Cmd instead of index */
+#define TB_SETHOTIMAGELIST       (WM_USER+52)
+#define TB_GETHOTIMAGELIST       (WM_USER+53)
+#define TB_SETDISABLEDIMAGELIST  (WM_USER+54)
+#define TB_GETDISABLEDIMAGELIST  (WM_USER+55)
+#define TB_SETSTYLE              (WM_USER+56)
+#define TB_GETSTYLE              (WM_USER+57)
+#define TB_GETBUTTONSIZE         (WM_USER+58)
+#define TB_SETBUTTONWIDTH        (WM_USER+59)
+#define TB_SETMAXTEXTROWS        (WM_USER+60)
+#define TB_GETTEXTROWS           (WM_USER+61)
+#define TB_GETOBJECT             (WM_USER+62)
+#define TB_GETBUTTONINFOW        (WM_USER+63)
+#define TB_GETBUTTONINFOA        (WM_USER+65)
+#define TB_GETBUTTONINFO         WINELIB_NAME_AW(TB_GETBUTTONINFO)
+#define TB_SETBUTTONINFOW        (WM_USER+64)
+#define TB_SETBUTTONINFOA        (WM_USER+66)
+#define TB_SETBUTTONINFO         WINELIB_NAME_AW(TB_SETBUTTONINFO)
+#define TB_SETDRAWTEXTFLAGS      (WM_USER+70)
+#define TB_GETHOTITEM            (WM_USER+71)
+#define TB_SETHOTITEM            (WM_USER+72)
+#define TB_SETANCHORHIGHLIGHT    (WM_USER+73)
+#define TB_GETANCHORHIGHLIGHT    (WM_USER+74)
+#define TB_MAPACCELERATORA       (WM_USER+78)
+#define TB_MAPACCELERATORW       (WM_USER+90)
+#define TB_MAPACCELERATOR        WINELIB_NAME_AW(TB_MAPACCELERATOR)
+#define TB_GETINSERTMARK         (WM_USER+79)
+#define TB_SETINSERTMARK         (WM_USER+80)
+#define TB_INSERTMARKHITTEST     (WM_USER+81)
+#define TB_MOVEBUTTON            (WM_USER+82)
+#define TB_GETMAXSIZE            (WM_USER+83)
+#define TB_SETEXTENDEDSTYLE      (WM_USER+84)
+#define TB_GETEXTENDEDSTYLE      (WM_USER+85)
+#define TB_GETPADDING            (WM_USER+86)
+#define TB_SETPADDING            (WM_USER+87)
+#define TB_SETINSERTMARKCOLOR    (WM_USER+88)
+#define TB_GETINSERTMARKCOLOR    (WM_USER+89)
+#define TB_SETCOLORSCHEME        CCM_SETCOLORSCHEME
+#define TB_GETCOLORSCHEME        CCM_GETCOLORSCHEME
+#define TB_SETUNICODEFORMAT      CCM_SETUNICODEFORMAT
+#define TB_GETUNICODEFORMAT      CCM_GETUNICODEFORMAT
+#define TB_GETSTRINGW            (WM_USER+91)
+#define TB_GETSTRINGA            (WM_USER+92)
+#define TB_GETSTRING             WINELIB_NAME_AW(TB_GETSTRING)
+
+/* undocumented messages in Toolbar */
+#ifdef __WINESRC__
+#define TB_UNKWN45D              (WM_USER+93)
+#define TB_SETHOTITEM2           (WM_USER+94)
+#define TB_SETLISTGAP            (WM_USER+96)
+#define TB_GETIMAGELISTCOUNT     (WM_USER+98)
+#define TB_GETIDEALSIZE          (WM_USER+99)
+#define TB_UNKWN464              (WM_USER+100)
+#endif
+
+#define TB_GETMETRICS            (WM_USER+101)
+#define TB_SETMETRICS            (WM_USER+102)
+#define TB_SETWINDOWTHEME        CCM_SETWINDOWTHEME
+
+#define TBN_FIRST               (0U-700U)
+#define TBN_LAST                (0U-720U)
+#define TBN_GETBUTTONINFOA      (TBN_FIRST-0)
+#define TBN_GETBUTTONINFOW      (TBN_FIRST-20)
+#define TBN_GETBUTTONINFO       WINELIB_NAME_AW(TBN_GETBUTTONINFO)
+#define TBN_BEGINDRAG		(TBN_FIRST-1)
+#define TBN_ENDDRAG		(TBN_FIRST-2)
+#define TBN_BEGINADJUST		(TBN_FIRST-3)
+#define TBN_ENDADJUST		(TBN_FIRST-4)
+#define TBN_RESET		(TBN_FIRST-5)
+#define TBN_QUERYINSERT		(TBN_FIRST-6)
+#define TBN_QUERYDELETE		(TBN_FIRST-7)
+#define TBN_TOOLBARCHANGE	(TBN_FIRST-8)
+#define TBN_CUSTHELP		(TBN_FIRST-9)
+#define TBN_DROPDOWN		(TBN_FIRST-10)
+#define TBN_GETOBJECT		(TBN_FIRST-12)
+#define TBN_HOTITEMCHANGE	(TBN_FIRST-13)
+#define TBN_DRAGOUT		(TBN_FIRST-14)
+#define TBN_DELETINGBUTTON	(TBN_FIRST-15)
+#define TBN_GETDISPINFOA	(TBN_FIRST-16)
+#define TBN_GETDISPINFOW	(TBN_FIRST-17)
+#define TBN_GETDISPINFO		WINELIB_NAME_AW(TBN_GETDISPINFO)
+#define TBN_GETINFOTIPA         (TBN_FIRST-18)
+#define TBN_GETINFOTIPW         (TBN_FIRST-19)
+#define TBN_GETINFOTIP          WINELIB_NAME_AW(TBN_GETINFOTIP)
+#define TBN_RESTORE	        (TBN_FIRST-21)
+#define TBN_SAVE	        (TBN_FIRST-22)
+#define TBN_INITCUSTOMIZE	(TBN_FIRST-23)
+#define TBN_WRAPHOTITEM         (TBN_FIRST-24) /* this is undocumented and the name is a guess */
+#define TBNRF_HIDEHELP		0x00000001
+
+
+/* Return values from TBN_DROPDOWN */
+#define TBDDRET_DEFAULT  0
+#define TBDDRET_NODEFAULT  1
+#define TBDDRET_TREATPRESSED  2
+
+typedef struct _NMTBCUSTOMDRAW
+{
+    NMCUSTOMDRAW nmcd;
+    HBRUSH hbrMonoDither;
+    HBRUSH hbrLines;
+    HPEN hpenLines;
+    COLORREF clrText;
+    COLORREF clrMark;
+    COLORREF clrTextHighlight;
+    COLORREF clrBtnFace;
+    COLORREF clrBtnHighlight;
+    COLORREF clrHighlightHotTrack;
+    RECT rcText;
+    int nStringBkMode;
+    int nHLStringBkMode;
+    int iListGap;
+} NMTBCUSTOMDRAW, *LPNMTBCUSTOMDRAW;
+
+/* return flags for Toolbar NM_CUSTOMDRAW notifications */
+#define TBCDRF_NOEDGES        0x00010000  /* Don't draw button edges       */
+#define TBCDRF_HILITEHOTTRACK 0x00020000  /* Use color of the button bkgnd */
+                                          /* when hottracked               */
+#define TBCDRF_NOOFFSET       0x00040000  /* No offset button if pressed   */
+#define TBCDRF_NOMARK         0x00080000  /* Don't draw default highlight  */
+                                          /* for TBSTATE_MARKED            */
+#define TBCDRF_NOETCHEDEFFECT 0x00100000  /* No etched effect for          */
+                                          /* disabled items                */
+#define TBCDRF_BLENDICON      0x00200000  /* ILD_BLEND50 on the icon image */
+#define TBCDRF_NOBACKGROUND   0x00400000  /* ILD_BLEND50 on the icon image */
+#define TBCDRF_USECDCOLORS    0x00800000
+
+
+/* This is just for old CreateToolbar. */
+/* Don't use it in new programs. */
+typedef struct _OLDTBBUTTON {
+    INT iBitmap;
+    INT idCommand;
+    BYTE  fsState;
+    BYTE  fsStyle;
+    BYTE  bReserved[2];
+    DWORD dwData;
+} OLDTBBUTTON, *POLDTBBUTTON, *LPOLDTBBUTTON;
+typedef const OLDTBBUTTON *LPCOLDTBBUTTON;
+
+
+typedef struct _TBBUTTON {
+    INT iBitmap;
+    INT idCommand;
+    BYTE  fsState;
+    BYTE  fsStyle;
+#ifdef _WIN64
+    BYTE  bReserved[6];
+#else
+    BYTE  bReserved[2];
+#endif
+    DWORD_PTR dwData;
+    INT_PTR iString;
+} TBBUTTON, *PTBBUTTON, *LPTBBUTTON;
+typedef const TBBUTTON *LPCTBBUTTON;
+
+
+typedef struct _COLORMAP {
+    COLORREF from;
+    COLORREF to;
+} COLORMAP, *LPCOLORMAP;
+
+
+typedef struct tagTBADDBITMAP {
+    HINSTANCE hInst;
+    UINT_PTR  nID;
+} TBADDBITMAP, *LPTBADDBITMAP;
+
+#define HINST_COMMCTRL         ((HINSTANCE)-1)
+#define IDB_STD_SMALL_COLOR     0
+#define IDB_STD_LARGE_COLOR     1
+#define IDB_VIEW_SMALL_COLOR    4
+#define IDB_VIEW_LARGE_COLOR    5
+#define IDB_HIST_SMALL_COLOR    8
+#define IDB_HIST_LARGE_COLOR    9
+
+#define STD_CUT                 0
+#define STD_COPY                1
+#define STD_PASTE               2
+#define STD_UNDO                3
+#define STD_REDOW               4
+#define STD_DELETE              5
+#define STD_FILENEW             6
+#define STD_FILEOPEN            7
+#define STD_FILESAVE            8
+#define STD_PRINTPRE            9
+#define STD_PROPERTIES          10
+#define STD_HELP                11
+#define STD_FIND                12
+#define STD_REPLACE             13
+#define STD_PRINT               14
+
+#define VIEW_LARGEICONS         0
+#define VIEW_SMALLICONS         1
+#define VIEW_LIST               2
+#define VIEW_DETAILS            3
+#define VIEW_SORTNAME           4
+#define VIEW_SORTSIZE           5
+#define VIEW_SORTDATE           6
+#define VIEW_SORTTYPE           7
+#define VIEW_PARENTFOLDER       8
+#define VIEW_NETCONNECT         9
+#define VIEW_NETDISCONNECT      10
+#define VIEW_NEWFOLDER          11
+#define VIEW_VIEWMENU           12
+
+#define HIST_BACK               0
+#define HIST_FORWARD            1
+#define HIST_FAVORITES          2
+#define HIST_ADDTOFAVORITES     3
+#define HIST_VIEWTREE           4
+
+typedef struct tagTBSAVEPARAMSA {
+    HKEY   hkr;
+    LPCSTR pszSubKey;
+    LPCSTR pszValueName;
+} TBSAVEPARAMSA, *LPTBSAVEPARAMSA;
+
+typedef struct tagTBSAVEPARAMSW {
+    HKEY   hkr;
+    LPCWSTR pszSubKey;
+    LPCWSTR pszValueName;
+} TBSAVEPARAMSW, *LPTBSAVEPARAMSW;
+
+#define TBSAVEPARAMS   WINELIB_NAME_AW(TBSAVEPARAMS)
+#define LPTBSAVEPARAMS WINELIB_NAME_AW(LPTBSAVEPARAMS)
+
+typedef struct
+{
+    UINT cbSize;
+    DWORD  dwMask;
+    INT  idCommand;
+    INT  iImage;
+    BYTE   fsState;
+    BYTE   fsStyle;
+    WORD   cx;
+    DWORD_PTR lParam;
+    LPSTR  pszText;
+    INT  cchText;
+} TBBUTTONINFOA, *LPTBBUTTONINFOA;
+
+typedef struct
+{
+    UINT cbSize;
+    DWORD  dwMask;
+    INT  idCommand;
+    INT  iImage;
+    BYTE   fsState;
+    BYTE   fsStyle;
+    WORD   cx;
+    DWORD_PTR lParam;
+    LPWSTR pszText;
+    INT  cchText;
+} TBBUTTONINFOW, *LPTBBUTTONINFOW;
+
+#define TBBUTTONINFO   WINELIB_NAME_AW(TBBUTTONINFO)
+#define LPTBBUTTONINFO WINELIB_NAME_AW(LPTBBUTTONINFO)
+
+typedef struct tagNMTBHOTITEM
+{
+    NMHDR hdr;
+    int idOld;
+    int idNew;
+    DWORD dwFlags;
+} NMTBHOTITEM, *LPNMTBHOTITEM;
+
+typedef struct tagNMTBGETINFOTIPA
+{
+    NMHDR  hdr;
+    LPSTR  pszText;
+    INT  cchTextMax;
+    INT  iItem;
+    LPARAM lParam;
+} NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA;
+
+typedef struct tagNMTBGETINFOTIPW
+{
+    NMHDR  hdr;
+    LPWSTR pszText;
+    INT  cchTextMax;
+    INT  iItem;
+    LPARAM lParam;
+} NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW;
+
+#define NMTBGETINFOTIP   WINELIB_NAME_AW(NMTBGETINFOTIP)
+#define LPNMTBGETINFOTIP WINELIB_NAME_AW(LPNMTBGETINFOTIP)
+
+typedef struct
+{
+    NMHDR hdr;
+    DWORD dwMask;
+    int idCommand;
+    DWORD_PTR lParam;
+    int iImage;
+    LPSTR pszText;
+    int cchText;
+} NMTBDISPINFOA, *LPNMTBDISPINFOA;
+
+typedef struct
+{
+    NMHDR hdr;
+    DWORD dwMask;
+    int idCommand;
+    DWORD_PTR lParam;
+    int iImage;
+    LPWSTR pszText;
+    int cchText;
+} NMTBDISPINFOW, *LPNMTBDISPINFOW;
+
+#define NMTBDISPINFO WINELIB_NAME_AW(NMTBDISPINFO)
+#define LPNMTBDISPINFO WINELIB_NAME_AW(LPNMTBDISPINFO)
+
+/* contents of dwMask in the NMTBDISPINFO structure */
+#define TBNF_IMAGE     0x00000001
+#define TBNF_TEXT      0x00000002
+#define TBNF_DI_SETITEM  0x10000000
+
+
+typedef struct tagNMTOOLBARA
+{
+    NMHDR    hdr;
+    INT      iItem;
+    TBBUTTON tbButton;
+    INT      cchText;
+    LPSTR    pszText;
+    RECT     rcButton; /* Version 5.80 */
+} NMTOOLBARA, *LPNMTOOLBARA, TBNOTIFYA, *LPTBNOTIFYA;
+
+typedef struct tagNMTOOLBARW
+{
+    NMHDR    hdr;
+    INT      iItem;
+    TBBUTTON tbButton;
+    INT      cchText;
+    LPWSTR   pszText;
+    RECT     rcButton; /* Version 5.80 */
+} NMTOOLBARW, *LPNMTOOLBARW, TBNOTIFYW, *LPTBNOTIFYW;
+
+#define NMTOOLBAR   WINELIB_NAME_AW(NMTOOLBAR)
+#define LPNMTOOLBAR WINELIB_NAME_AW(LPNMTOOLBAR)
+#define TBNOTIFY    WINELIB_NAME_AW(TBNOTIFY)
+#define LPTBNOTIFY  WINELIB_NAME_AW(LPTBNOTIFY)
+
+typedef struct
+{
+	HINSTANCE hInstOld;
+	UINT_PTR  nIDOld;
+	HINSTANCE hInstNew;
+	UINT_PTR  nIDNew;
+	INT       nButtons;
+} TBREPLACEBITMAP, *LPTBREPLACEBITMAP;
+
+#define HICF_OTHER          0x00000000
+#define HICF_MOUSE          0x00000001   /* Triggered by mouse             */
+#define HICF_ARROWKEYS      0x00000002   /* Triggered by arrow keys        */
+#define HICF_ACCELERATOR    0x00000004   /* Triggered by accelerator       */
+#define HICF_DUPACCEL       0x00000008   /* This accelerator is not unique */
+#define HICF_ENTERING       0x00000010   /* idOld is invalid               */
+#define HICF_LEAVING        0x00000020   /* idNew is invalid               */
+#define HICF_RESELECT       0x00000040   /* hot item reselected            */
+#define HICF_LMOUSE         0x00000080   /* left mouse button selected     */
+#define HICF_TOGGLEDROPDOWN 0x00000100   /* Toggle button's dropdown state */
+
+typedef struct
+{
+    int   iButton;
+    DWORD dwFlags;
+} TBINSERTMARK, *LPTBINSERTMARK;
+#define TBIMHT_AFTER      0x00000001 /* TRUE = insert After iButton, otherwise before */
+#define TBIMHT_BACKGROUND 0x00000002 /* TRUE if and only if missed buttons completely */
+
+typedef struct tagNMTBSAVE
+{
+    NMHDR hdr;
+    DWORD* pData;
+    DWORD* pCurrent;
+    UINT cbData;
+    int iItem;
+    int cButtons;
+    TBBUTTON tbButton;
+} NMTBSAVE, *LPNMTBSAVE;
+
+typedef struct tagNMTBRESTORE
+{
+    NMHDR hdr;
+    DWORD* pData;
+    DWORD* pCurrent;
+    UINT cbData;
+    int iItem;
+    int cButtons;
+    int cbBytesPerRecord;
+    TBBUTTON tbButton;
+} NMTBRESTORE, *LPNMTBRESTORE;
+
+#define TBMF_PAD           0x00000001
+#define TBMF_BARPAD        0x00000002
+#define TBMF_BUTTONSPACING 0x00000004
+
+typedef struct
+{
+    UINT cbSize;
+    DWORD dwMask;
+    INT cxPad;
+    INT cyPad;
+    INT cxBarPad;
+    INT cyBarPad;
+    INT cxButtonSpacing;
+    INT cyButtonSpacing;
+} TBMETRICS, *LPTBMETRICS;
+
+/* these are undocumented and the names are guesses */
+typedef struct
+{
+    NMHDR hdr;
+    HWND hwndDialog;
+} NMTBINITCUSTOMIZE;
+
+typedef struct
+{
+    NMHDR hdr;
+    INT idNew;
+    INT iDirection; /* left is -1, right is 1 */
+    DWORD dwReason; /* HICF_* */
+} NMTBWRAPHOTITEM;
+
+
+HWND WINAPI
+CreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE,
+              UINT, LPCTBBUTTON, INT);
+
+HWND WINAPI
+CreateToolbarEx(HWND, DWORD, UINT, INT,
+                HINSTANCE, UINT_PTR, LPCTBBUTTON,
+                INT, INT, INT, INT, INT, UINT);
+
+HBITMAP WINAPI
+CreateMappedBitmap (HINSTANCE, INT_PTR, UINT, LPCOLORMAP, INT);
+
+
+/* Tool tips */
+
+#define TOOLTIPS_CLASSA         "tooltips_class32"
+#if defined(__GNUC__)
+# define TOOLTIPS_CLASSW (const WCHAR []){ 't','o','o','l','t','i','p','s','_', \
+  'c','l','a','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define TOOLTIPS_CLASSW        L"tooltips_class32"
+#else
+static const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_',
+  'c','l','a','s','s','3','2',0 };
+#endif
+#define TOOLTIPS_CLASS          WINELIB_NAME_AW(TOOLTIPS_CLASS)
+
+#define INFOTIPSIZE             1024
+
+
+#define TTF_IDISHWND            0x0001
+#define TTF_CENTERTIP           0x0002
+#define TTF_RTLREADING          0x0004
+#define TTF_SUBCLASS            0x0010
+#define TTF_TRACK               0x0020
+#define TTF_ABSOLUTE            0x0080
+#define TTF_TRANSPARENT         0x0100
+#define TTF_DI_SETITEM          0x8000  /* valid only on the TTN_NEEDTEXT callback */
+
+
+#define TTDT_AUTOMATIC          0
+#define TTDT_RESHOW             1
+#define TTDT_AUTOPOP            2
+#define TTDT_INITIAL            3
+
+
+#define TTI_NONE                0
+#define TTI_INFO                1
+#define TTI_WARNING             2
+#define TTI_ERROR               3
+
+
+#define TTM_ACTIVATE            (WM_USER+1)
+#define TTM_SETDELAYTIME        (WM_USER+3)
+#define TTM_ADDTOOLA            (WM_USER+4)
+#define TTM_ADDTOOLW            (WM_USER+50)
+#define TTM_ADDTOOL             WINELIB_NAME_AW(TTM_ADDTOOL)
+#define TTM_DELTOOLA            (WM_USER+5)
+#define TTM_DELTOOLW            (WM_USER+51)
+#define TTM_DELTOOL             WINELIB_NAME_AW(TTM_DELTOOL)
+#define TTM_NEWTOOLRECTA        (WM_USER+6)
+#define TTM_NEWTOOLRECTW        (WM_USER+52)
+#define TTM_NEWTOOLRECT         WINELIB_NAME_AW(TTM_NEWTOOLRECT)
+#define TTM_RELAYEVENT          (WM_USER+7)
+#define TTM_GETTOOLINFOA        (WM_USER+8)
+#define TTM_GETTOOLINFOW        (WM_USER+53)
+#define TTM_GETTOOLINFO         WINELIB_NAME_AW(TTM_GETTOOLINFO)
+#define TTM_SETTOOLINFOA        (WM_USER+9)
+#define TTM_SETTOOLINFOW        (WM_USER+54)
+#define TTM_SETTOOLINFO         WINELIB_NAME_AW(TTM_SETTOOLINFO)
+#define TTM_HITTESTA            (WM_USER+10)
+#define TTM_HITTESTW            (WM_USER+55)
+#define TTM_HITTEST             WINELIB_NAME_AW(TTM_HITTEST)
+#define TTM_GETTEXTA            (WM_USER+11)
+#define TTM_GETTEXTW            (WM_USER+56)
+#define TTM_GETTEXT             WINELIB_NAME_AW(TTM_GETTEXT)
+#define TTM_UPDATETIPTEXTA      (WM_USER+12)
+#define TTM_UPDATETIPTEXTW      (WM_USER+57)
+#define TTM_UPDATETIPTEXT       WINELIB_NAME_AW(TTM_UPDATETIPTEXT)
+#define TTM_GETTOOLCOUNT        (WM_USER+13)
+#define TTM_ENUMTOOLSA          (WM_USER+14)
+#define TTM_ENUMTOOLSW          (WM_USER+58)
+#define TTM_ENUMTOOLS           WINELIB_NAME_AW(TTM_ENUMTOOLS)
+#define TTM_GETCURRENTTOOLA     (WM_USER+15)
+#define TTM_GETCURRENTTOOLW     (WM_USER+59)
+#define TTM_GETCURRENTTOOL      WINELIB_NAME_AW(TTM_GETCURRENTTOOL)
+#define TTM_WINDOWFROMPOINT     (WM_USER+16)
+#define TTM_TRACKACTIVATE       (WM_USER+17)
+#define TTM_TRACKPOSITION       (WM_USER+18)
+#define TTM_SETTIPBKCOLOR       (WM_USER+19)
+#define TTM_SETTIPTEXTCOLOR     (WM_USER+20)
+#define TTM_GETDELAYTIME        (WM_USER+21)
+#define TTM_GETTIPBKCOLOR       (WM_USER+22)
+#define TTM_GETTIPTEXTCOLOR     (WM_USER+23)
+#define TTM_SETMAXTIPWIDTH      (WM_USER+24)
+#define TTM_GETMAXTIPWIDTH      (WM_USER+25)
+#define TTM_SETMARGIN           (WM_USER+26)
+#define TTM_GETMARGIN           (WM_USER+27)
+#define TTM_POP                 (WM_USER+28)
+#define TTM_UPDATE              (WM_USER+29)
+#define TTM_GETBUBBLESIZE       (WM_USER+30)
+#define TTM_ADJUSTRECT          (WM_USER+31)
+#define TTM_SETTITLEA           (WM_USER+32)
+#define TTM_SETTITLEW           (WM_USER+33)
+#define TTM_SETTITLE            WINELIB_NAME_AW(TTM_SETTITLE)
+#define TTM_POPUP               (WM_USER+34)
+#define TTM_GETTITLE            (WM_USER+35)
+#define TTM_SETWINDOWTHEME      CCM_SETWINDOWTHEME
+
+
+#define TTN_FIRST               (0U-520U)
+#define TTN_LAST                (0U-549U)
+#define TTN_GETDISPINFOA        (TTN_FIRST-0)
+#define TTN_GETDISPINFOW        (TTN_FIRST-10)
+#define TTN_GETDISPINFO         WINELIB_NAME_AW(TTN_GETDISPINFO)
+#define TTN_SHOW                (TTN_FIRST-1)
+#define TTN_POP                 (TTN_FIRST-2)
+
+#define TTN_NEEDTEXT		TTN_GETDISPINFO
+#define TTN_NEEDTEXTA 		TTN_GETDISPINFOA
+#define TTN_NEEDTEXTW 		TTN_GETDISPINFOW
+
+typedef struct tagTOOLINFOA {
+    UINT cbSize;
+    UINT uFlags;
+    HWND hwnd;
+    UINT_PTR uId;
+    RECT rect;
+    HINSTANCE hinst;
+    LPSTR lpszText;
+    LPARAM lParam;
+    void *lpReserved;
+} TTTOOLINFOA, *LPTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA;
+
+typedef struct tagTOOLINFOW {
+    UINT cbSize;
+    UINT uFlags;
+    HWND hwnd;
+    UINT_PTR uId;
+    RECT rect;
+    HINSTANCE hinst;
+    LPWSTR lpszText;
+    LPARAM lParam;
+    void *lpReserved;
+} TTTOOLINFOW, *LPTOOLINFOW, *PTOOLINFOW, *LPTTTOOLINFOW;
+
+#define TTTOOLINFO WINELIB_NAME_AW(TTTOOLINFO)
+#define TOOLINFO WINELIB_NAME_AW(TTTOOLINFO)
+#define PTOOLINFO WINELIB_NAME_AW(PTOOLINFO)
+#define LPTTTOOLINFO WINELIB_NAME_AW(LPTTTOOLINFO)
+#define LPTOOLINFO WINELIB_NAME_AW(LPTOOLINFO)
+
+#define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)
+#define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)
+#define TTTOOLINFO_V1_SIZE  CCSIZEOF_STRUCT(WINELIB_NAME_AW(TTTOOLINFO), lpszText)
+#define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam)
+#define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam)
+#define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved)
+#define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved)
+
+typedef struct _TT_HITTESTINFOA
+{
+    HWND        hwnd;
+    POINT       pt;
+    TTTOOLINFOA ti;
+} TTHITTESTINFOA, *LPTTHITTESTINFOA;
+#define LPHITTESTINFOA LPTTHITTESTINFOA
+
+typedef struct _TT_HITTESTINFOW
+{
+    HWND        hwnd;
+    POINT       pt;
+    TTTOOLINFOW ti;
+} TTHITTESTINFOW, *LPTTHITTESTINFOW;
+#define LPHITTESTINFOW LPTTHITTESTINFOW
+
+#define TTHITTESTINFO WINELIB_NAME_AW(TTHITTESTINFO)
+#define LPTTHITTESTINFO WINELIB_NAME_AW(LPTTHITTESTINFO)
+#define LPHITTESTINFO WINELIB_NAME_AW(LPHITTESTINFO)
+
+typedef struct tagNMTTDISPINFOA
+{
+    NMHDR hdr;
+    LPSTR lpszText;
+    CHAR  szText[80];
+    HINSTANCE hinst;
+    UINT      uFlags;
+    LPARAM      lParam;
+} NMTTDISPINFOA, *LPNMTTDISPINFOA;
+
+typedef struct tagNMTTDISPINFOW
+{
+    NMHDR       hdr;
+    LPWSTR      lpszText;
+    WCHAR       szText[80];
+    HINSTANCE hinst;
+    UINT      uFlags;
+    LPARAM      lParam;
+} NMTTDISPINFOW, *LPNMTTDISPINFOW;
+
+#define NMTTDISPINFO WINELIB_NAME_AW(NMTTDISPINFO)
+#define LPNMTTDISPINFO WINELIB_NAME_AW(LPNMTTDISPINFO)
+
+#define NMTTDISPINFO_V1_SIZEA CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags)
+#define NMTTDISPINFO_V1_SIZEW CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags)
+#define NMTTDISPINFO_V1_SIZE WINELIB_NAME_AW(NMTTDISPINFO_V1_SIZE)
+
+typedef struct _TTGETTITLE
+{
+    DWORD dwSize;
+    UINT uTitleBitmap;
+    UINT cch;
+    WCHAR* pszTitle;
+} TTGETTITLE, *PTTGETTITLE;
+
+#define TOOLTIPTEXTW    NMTTDISPINFOW
+#define TOOLTIPTEXTA    NMTTDISPINFOA
+#define TOOLTIPTEXT     NMTTDISPINFO
+#define LPTOOLTIPTEXTW  LPNMTTDISPINFOW
+#define LPTOOLTIPTEXTA  LPNMTTDISPINFOA
+#define LPTOOLTIPTEXT   LPNMTTDISPINFO
+
+
+/* Rebar control */
+
+#define REBARCLASSNAMEA         "ReBarWindow32"
+#if defined(__GNUC__)
+# define REBARCLASSNAMEW (const WCHAR []){ 'R','e','B','a','r', \
+  'W','i','n','d','o','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define REBARCLASSNAMEW        L"ReBarWindow32"
+#else
+static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',
+  'W','i','n','d','o','w','3','2',0 };
+#endif
+#define REBARCLASSNAME          WINELIB_NAME_AW(REBARCLASSNAME)
+
+
+#define RBIM_IMAGELIST          0x00000001
+
+#define RBBIM_STYLE             0x00000001
+#define RBBIM_COLORS            0x00000002
+#define RBBIM_TEXT              0x00000004
+#define RBBIM_IMAGE             0x00000008
+#define RBBIM_CHILD             0x00000010
+#define RBBIM_CHILDSIZE         0x00000020
+#define RBBIM_SIZE              0x00000040
+#define RBBIM_BACKGROUND        0x00000080
+#define RBBIM_ID                0x00000100
+#define RBBIM_IDEALSIZE         0x00000200
+#define RBBIM_LPARAM            0x00000400
+#define RBBIM_HEADERSIZE        0x00000800
+
+#define RBBS_BREAK              0x00000001
+#define RBBS_FIXEDSIZE          0x00000002
+#define RBBS_CHILDEDGE          0x00000004
+#define RBBS_HIDDEN             0x00000008
+#define RBBS_NOVERT             0x00000010
+#define RBBS_FIXEDBMP           0x00000020
+#define RBBS_VARIABLEHEIGHT     0x00000040
+#define RBBS_GRIPPERALWAYS      0x00000080
+#define RBBS_NOGRIPPER          0x00000100
+#define RBBS_USECHEVRON         0x00000200
+#define RBBS_HIDETITLE          0x00000400
+#define RBBS_TOPALIGN           0x00000800
+
+#define RBNM_ID                 0x00000001
+#define RBNM_STYLE              0x00000002
+#define RBNM_LPARAM             0x00000004
+
+#define RBHT_NOWHERE            0x0001
+#define RBHT_CAPTION            0x0002
+#define RBHT_CLIENT             0x0003
+#define RBHT_GRABBER            0x0004
+#define RBHT_CHEVRON            0x0008
+
+#define RB_INSERTBANDA          (WM_USER+1)
+#define RB_INSERTBANDW          (WM_USER+10)
+#define RB_INSERTBAND           WINELIB_NAME_AW(RB_INSERTBAND)
+#define RB_DELETEBAND           (WM_USER+2)
+#define RB_GETBARINFO           (WM_USER+3)
+#define RB_SETBARINFO           (WM_USER+4)
+#define RB_SETBANDINFOA         (WM_USER+6)
+#define RB_SETBANDINFOW         (WM_USER+11)
+#define RB_SETBANDINFO          WINELIB_NAME_AW(RB_SETBANDINFO)
+#define RB_SETPARENT            (WM_USER+7)
+#define RB_HITTEST              (WM_USER+8)
+#define RB_GETRECT              (WM_USER+9)
+#define RB_GETBANDCOUNT         (WM_USER+12)
+#define RB_GETROWCOUNT          (WM_USER+13)
+#define RB_GETROWHEIGHT         (WM_USER+14)
+#define RB_IDTOINDEX            (WM_USER+16)
+#define RB_GETTOOLTIPS          (WM_USER+17)
+#define RB_SETTOOLTIPS          (WM_USER+18)
+#define RB_SETBKCOLOR           (WM_USER+19)
+#define RB_GETBKCOLOR           (WM_USER+20)
+#define RB_SETTEXTCOLOR         (WM_USER+21)
+#define RB_GETTEXTCOLOR         (WM_USER+22)
+#define RB_SIZETORECT           (WM_USER+23)
+#define RB_BEGINDRAG            (WM_USER+24)
+#define RB_ENDDRAG              (WM_USER+25)
+#define RB_DRAGMOVE             (WM_USER+26)
+#define RB_GETBARHEIGHT         (WM_USER+27)
+#define RB_GETBANDINFOW         (WM_USER+28)
+#define RB_GETBANDINFOA         (WM_USER+29)
+#define RB_GETBANDINFO          WINELIB_NAME_AW(RB_GETBANDINFO)
+#define RB_MINIMIZEBAND         (WM_USER+30)
+#define RB_MAXIMIZEBAND         (WM_USER+31)
+#define RB_GETBANDBORDERS       (WM_USER+34)
+#define RB_SHOWBAND             (WM_USER+35)
+#define RB_SETPALETTE           (WM_USER+37)
+#define RB_GETPALETTE           (WM_USER+38)
+#define RB_MOVEBAND             (WM_USER+39)
+#define RB_GETBANDMARGINS       (WM_USER+40)
+#define RB_PUSHCHEVRON          (WM_USER+43)
+#define RB_GETDROPTARGET        CCM_GETDROPTARGET
+#define RB_SETCOLORSCHEME       CCM_SETCOLORSCHEME
+#define RB_GETCOLORSCHEME       CCM_GETCOLORSCHEME
+#define RB_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT
+#define RB_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT
+#define RB_SETWINDOWTHEME       CCM_SETWINDOWTHEME
+
+#define RBN_FIRST               (0U-831U)
+#define RBN_LAST                (0U-859U)
+#define RBN_HEIGHTCHANGE        (RBN_FIRST-0)
+#define RBN_GETOBJECT           (RBN_FIRST-1)
+#define RBN_LAYOUTCHANGED       (RBN_FIRST-2)
+#define RBN_AUTOSIZE            (RBN_FIRST-3)
+#define RBN_BEGINDRAG           (RBN_FIRST-4)
+#define RBN_ENDDRAG             (RBN_FIRST-5)
+#define RBN_DELETINGBAND        (RBN_FIRST-6)
+#define RBN_DELETEDBAND         (RBN_FIRST-7)
+#define RBN_CHILDSIZE           (RBN_FIRST-8)
+#define RBN_CHEVRONPUSHED       (RBN_FIRST-10)
+#define RBN_MINMAX              (RBN_FIRST-21)
+#define RBN_AUTOBREAK           (RBN_FIRST-22)
+
+typedef struct tagREBARINFO
+{
+    UINT     cbSize;
+    UINT     fMask;
+    HIMAGELIST himl;
+} REBARINFO, *LPREBARINFO;
+
+typedef struct tagREBARBANDINFOA
+{
+    UINT    cbSize;
+    UINT    fMask;
+    UINT    fStyle;
+    COLORREF  clrFore;
+    COLORREF  clrBack;
+    LPSTR     lpText;
+    UINT    cch;
+    INT     iImage;
+    HWND    hwndChild;
+    UINT    cxMinChild;
+    UINT    cyMinChild;
+    UINT    cx;
+    HBITMAP hbmBack;
+    UINT    wID;
+    UINT    cyChild;
+    UINT    cyMaxChild;
+    UINT    cyIntegral;
+    UINT    cxIdeal;
+    LPARAM    lParam;
+    UINT    cxHeader;
+    /* _WIN32_WINNT >= 0x0600 */
+    RECT    rcChevronLocation;
+    UINT    uChevronState;
+} REBARBANDINFOA, *LPREBARBANDINFOA;
+
+typedef REBARBANDINFOA const *LPCREBARBANDINFOA;
+
+typedef struct tagREBARBANDINFOW
+{
+    UINT    cbSize;
+    UINT    fMask;
+    UINT    fStyle;
+    COLORREF  clrFore;
+    COLORREF  clrBack;
+    LPWSTR    lpText;
+    UINT    cch;
+    INT     iImage;
+    HWND    hwndChild;
+    UINT    cxMinChild;
+    UINT    cyMinChild;
+    UINT    cx;
+    HBITMAP hbmBack;
+    UINT    wID;
+    UINT    cyChild;
+    UINT    cyMaxChild;
+    UINT    cyIntegral;
+    UINT    cxIdeal;
+    LPARAM    lParam;
+    UINT    cxHeader;
+    /* _WIN32_WINNT >= 0x0600 */
+    RECT    rcChevronLocation;
+    UINT    uChevronState;
+} REBARBANDINFOW, *LPREBARBANDINFOW;
+
+typedef REBARBANDINFOW const *LPCREBARBANDINFOW;
+
+#define REBARBANDINFO    WINELIB_NAME_AW(REBARBANDINFO)
+#define LPREBARBANDINFO  WINELIB_NAME_AW(LPREBARBANDINFO)
+#define LPCREBARBANDINFO WINELIB_NAME_AW(LPCREBARBANDINFO)
+
+#define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID)
+#define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID)
+#define REBARBANDINFO_V3_SIZE  CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), wID)
+#define REBARBANDINFOA_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, cxHeader)
+#define REBARBANDINFOW_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, cxHeader)
+#define REBARBANDINFO_V6_SIZE  CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), cxHeader)
+
+typedef struct tagNMREBARCHILDSIZE
+{
+    NMHDR  hdr;
+    UINT uBand;
+    UINT wID;
+    RECT rcChild;
+    RECT rcBand;
+} NMREBARCHILDSIZE, *LPNMREBARCHILDSIZE;
+
+typedef struct tagNMREBAR
+{
+    NMHDR  hdr;
+    DWORD  dwMask;
+    UINT uBand;
+    UINT fStyle;
+    UINT wID;
+    LPARAM lParam;
+} NMREBAR, *LPNMREBAR;
+
+typedef struct tagNMRBAUTOSIZE
+{
+    NMHDR hdr;
+    BOOL fChanged;
+    RECT rcTarget;
+    RECT rcActual;
+} NMRBAUTOSIZE, *LPNMRBAUTOSIZE;
+
+typedef struct tagNMREBARCHEVRON
+{
+    NMHDR hdr;
+    UINT uBand;
+    UINT wID;
+    LPARAM lParam;
+    RECT rc;
+    LPARAM lParamNM;
+} NMREBARCHEVRON, *LPNMREBARCHEVRON;
+
+typedef struct _RB_HITTESTINFO
+{
+    POINT pt;
+    UINT  flags;
+    INT   iBand;
+} RBHITTESTINFO, *LPRBHITTESTINFO;
+
+#define RBAB_AUTOSIZE   0x0001
+#define RBAB_ADDBAND    0x0002
+
+typedef struct tagNMREBARAUTOBREAK
+{
+    NMHDR hdr;
+    UINT uBand;
+    UINT wID;
+    LPARAM lParam;
+    UINT uMsg;
+    UINT fStyleCurrent;
+    BOOL fAutoBreak;
+} NMREBARAUTOBREAK, *LPNMREBARAUTOBREAK;
+
+
+/* Trackbar control */
+
+#define TRACKBAR_CLASSA         "msctls_trackbar32"
+#if defined(__GNUC__)
+# define TRACKBAR_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+  't','r','a','c','k','b','a','r','3','2',0 }
+#elif defined(_MSC_VER)
+# define TRACKBAR_CLASSW        L"msctls_trackbar32"
+#else
+static const WCHAR TRACKBAR_CLASSW[] = { 'm','s','c','t','l','s','_',
+  't','r','a','c','k','b','a','r','3','2',0 };
+#endif
+#define TRACKBAR_CLASS  WINELIB_NAME_AW(TRACKBAR_CLASS)
+
+
+#define TBTS_TOP                0
+#define TBTS_LEFT               1
+#define TBTS_BOTTOM             2
+#define TBTS_RIGHT              3
+
+#define TB_LINEUP               0
+#define TB_LINEDOWN             1
+#define TB_PAGEUP               2
+#define TB_PAGEDOWN             3
+#define TB_THUMBPOSITION        4
+#define TB_THUMBTRACK           5
+#define TB_TOP                  6
+#define TB_BOTTOM               7
+#define TB_ENDTRACK             8
+
+#define TBCD_TICS               0x0001
+#define TBCD_THUMB              0x0002
+#define TBCD_CHANNEL            0x0003
+
+#define TBM_GETPOS              (WM_USER)
+#define TBM_GETRANGEMIN         (WM_USER+1)
+#define TBM_GETRANGEMAX         (WM_USER+2)
+#define TBM_GETTIC              (WM_USER+3)
+#define TBM_SETTIC              (WM_USER+4)
+#define TBM_SETPOS              (WM_USER+5)
+#define TBM_SETRANGE            (WM_USER+6)
+#define TBM_SETRANGEMIN         (WM_USER+7)
+#define TBM_SETRANGEMAX         (WM_USER+8)
+#define TBM_CLEARTICS           (WM_USER+9)
+#define TBM_SETSEL              (WM_USER+10)
+#define TBM_SETSELSTART         (WM_USER+11)
+#define TBM_SETSELEND           (WM_USER+12)
+#define TBM_GETPTICS            (WM_USER+14)
+#define TBM_GETTICPOS           (WM_USER+15)
+#define TBM_GETNUMTICS          (WM_USER+16)
+#define TBM_GETSELSTART         (WM_USER+17)
+#define TBM_GETSELEND           (WM_USER+18)
+#define TBM_CLEARSEL            (WM_USER+19)
+#define TBM_SETTICFREQ          (WM_USER+20)
+#define TBM_SETPAGESIZE         (WM_USER+21)
+#define TBM_GETPAGESIZE         (WM_USER+22)
+#define TBM_SETLINESIZE         (WM_USER+23)
+#define TBM_GETLINESIZE         (WM_USER+24)
+#define TBM_GETTHUMBRECT        (WM_USER+25)
+#define TBM_GETCHANNELRECT      (WM_USER+26)
+#define TBM_SETTHUMBLENGTH      (WM_USER+27)
+#define TBM_GETTHUMBLENGTH      (WM_USER+28)
+#define TBM_SETTOOLTIPS         (WM_USER+29)
+#define TBM_GETTOOLTIPS         (WM_USER+30)
+#define TBM_SETTIPSIDE          (WM_USER+31)
+#define TBM_SETBUDDY            (WM_USER+32)
+#define TBM_GETBUDDY            (WM_USER+33)
+#define TBM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
+#define TBM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT
+
+
+/* Pager control */
+
+#define WC_PAGESCROLLERA      "SysPager"
+#if defined(__GNUC__)
+# define WC_PAGESCROLLERW (const WCHAR []){ 'S','y','s','P','a','g','e','r',0 }
+#elif defined(_MSC_VER)
+# define WC_PAGESCROLLERW     L"SysPager"
+#else
+static const WCHAR WC_PAGESCROLLERW[] = { 'S','y','s','P','a','g','e','r',0 };
+#endif
+#define WC_PAGESCROLLER  WINELIB_NAME_AW(WC_PAGESCROLLER)
+
+
+#define PGF_INVISIBLE           0
+#define PGF_NORMAL              1
+#define PGF_GRAYED              2
+#define PGF_DEPRESSED           4
+#define PGF_HOT                 8
+
+#define PGB_TOPORLEFT           0
+#define PGB_BOTTOMORRIGHT       1
+
+/* only used with PGN_SCROLL */
+#define PGF_SCROLLUP            1
+#define PGF_SCROLLDOWN          2
+#define PGF_SCROLLLEFT          4
+#define PGF_SCROLLRIGHT         8
+
+#define PGK_SHIFT               1
+#define PGK_CONTROL             2
+#define PGK_MENU                4
+
+/* only used with PGN_CALCSIZE */
+#define PGF_CALCWIDTH           1
+#define PGF_CALCHEIGHT          2
+
+#define PGM_FIRST               0x1400
+#define PGM_SETCHILD            (PGM_FIRST+1)
+#define PGM_RECALCSIZE          (PGM_FIRST+2)
+#define PGM_FORWARDMOUSE        (PGM_FIRST+3)
+#define PGM_SETBKCOLOR          (PGM_FIRST+4)
+#define PGM_GETBKCOLOR          (PGM_FIRST+5)
+#define PGM_SETBORDER           (PGM_FIRST+6)
+#define PGM_GETBORDER           (PGM_FIRST+7)
+#define PGM_SETPOS              (PGM_FIRST+8)
+#define PGM_GETPOS              (PGM_FIRST+9)
+#define PGM_SETBUTTONSIZE       (PGM_FIRST+10)
+#define PGM_GETBUTTONSIZE       (PGM_FIRST+11)
+#define PGM_GETBUTTONSTATE      (PGM_FIRST+12)
+#define PGM_GETDROPTARGET       CCM_GETDROPTARGET
+
+#define PGN_FIRST               (0U-900U)
+#define PGN_LAST                (0U-950U)
+#define PGN_SCROLL              (PGN_FIRST-1)
+#define PGN_CALCSIZE            (PGN_FIRST-2)
+
+#include <pshpack1.h>
+
+typedef struct
+{
+    NMHDR hdr;
+    WORD  fwKeys;
+    RECT rcParent;
+    INT  iDir;
+    INT  iXpos;
+    INT  iYpos;
+    INT  iScroll;
+} NMPGSCROLL, *LPNMPGSCROLL;
+
+#include <poppack.h>
+
+typedef struct
+{
+    NMHDR hdr;
+    DWORD dwFlag;
+    INT iWidth;
+    INT iHeight;
+} NMPGCALCSIZE, *LPNMPGCALCSIZE;
+
+
+/* Treeview control */
+
+#define WC_TREEVIEWA          "SysTreeView32"
+#if defined(__GNUC__)
+# define WC_TREEVIEWW (const WCHAR []){ 'S','y','s', \
+  'T','r','e','e','V','i','e','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_TREEVIEWW         L"SysTreeView32"
+#else
+static const WCHAR WC_TREEVIEWW[] = { 'S','y','s',
+  'T','r','e','e','V','i','e','w','3','2',0 };
+#endif
+#define WC_TREEVIEW             WINELIB_NAME_AW(WC_TREEVIEW)
+
+#define TVSIL_NORMAL            0
+#define TVSIL_STATE             2
+
+#define TV_FIRST                0x1100
+#define TVM_INSERTITEMA         (TV_FIRST+0)
+#define TVM_INSERTITEMW         (TV_FIRST+50)
+#define TVM_INSERTITEM          WINELIB_NAME_AW(TVM_INSERTITEM)
+#define TVM_DELETEITEM          (TV_FIRST+1)
+#define TVM_EXPAND              (TV_FIRST+2)
+#define TVM_GETITEMRECT         (TV_FIRST+4)
+#define TVM_GETCOUNT            (TV_FIRST+5)
+#define TVM_GETINDENT           (TV_FIRST+6)
+#define TVM_SETINDENT           (TV_FIRST+7)
+#define TVM_GETIMAGELIST        (TV_FIRST+8)
+#define TVM_SETIMAGELIST        (TV_FIRST+9)
+#define TVM_GETNEXTITEM         (TV_FIRST+10)
+#define TVM_SELECTITEM          (TV_FIRST+11)
+#define TVM_GETITEMA            (TV_FIRST+12)
+#define TVM_GETITEMW            (TV_FIRST+62)
+#define TVM_GETITEM             WINELIB_NAME_AW(TVM_GETITEM)
+#define TVM_SETITEMA            (TV_FIRST+13)
+#define TVM_SETITEMW            (TV_FIRST+63)
+#define TVM_SETITEM             WINELIB_NAME_AW(TVM_SETITEM)
+#define TVM_EDITLABELA          (TV_FIRST+14)
+#define TVM_EDITLABELW          (TV_FIRST+65)
+#define TVM_EDITLABEL           WINELIB_NAME_AW(TVM_EDITLABEL)
+#define TVM_GETEDITCONTROL      (TV_FIRST+15)
+#define TVM_GETVISIBLECOUNT     (TV_FIRST+16)
+#define TVM_HITTEST             (TV_FIRST+17)
+#define TVM_CREATEDRAGIMAGE     (TV_FIRST+18)
+#define TVM_SORTCHILDREN        (TV_FIRST+19)
+#define TVM_ENSUREVISIBLE       (TV_FIRST+20)
+#define TVM_SORTCHILDRENCB      (TV_FIRST+21)
+#define TVM_ENDEDITLABELNOW     (TV_FIRST+22)
+#define TVM_GETISEARCHSTRINGA   (TV_FIRST+23)
+#define TVM_GETISEARCHSTRINGW   (TV_FIRST+64)
+#define TVM_GETISEARCHSTRING    WINELIB_NAME_AW(TVM_GETISEARCHSTRING)
+#define TVM_SETTOOLTIPS         (TV_FIRST+24)
+#define TVM_GETTOOLTIPS         (TV_FIRST+25)
+#define TVM_SETINSERTMARK       (TV_FIRST+26)
+#define TVM_SETITEMHEIGHT       (TV_FIRST+27)
+#define TVM_GETITEMHEIGHT       (TV_FIRST+28)
+#define TVM_SETBKCOLOR          (TV_FIRST+29)
+#define TVM_SETTEXTCOLOR        (TV_FIRST+30)
+#define TVM_GETBKCOLOR          (TV_FIRST+31)
+#define TVM_GETTEXTCOLOR        (TV_FIRST+32)
+#define TVM_SETSCROLLTIME       (TV_FIRST+33)
+#define TVM_GETSCROLLTIME       (TV_FIRST+34)
+#define TVM_UNKNOWN35           (TV_FIRST+35)
+#define TVM_UNKNOWN36           (TV_FIRST+36)
+#define TVM_SETINSERTMARKCOLOR  (TV_FIRST+37)
+#define TVM_GETINSERTMARKCOLOR  (TV_FIRST+38)
+#define TVM_GETITEMSTATE        (TV_FIRST+39)
+#define TVM_SETLINECOLOR        (TV_FIRST+40)
+#define TVM_GETLINECOLOR        (TV_FIRST+41)
+#define TVM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
+#define TVM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT
+#define TVM_MAPACCIDTOHTREEITEM (TV_FIRST + 42)
+#define TVM_MAPHTREEITEMTOACCID (TV_FIRST + 43)
+#define TVM_SETEXTENDEDSTYLE    (TV_FIRST + 44)
+#define TVM_GETEXTENDEDSTYLE    (TV_FIRST + 45)
+#define TVM_SETAUTOSCROLLINFO   (TV_FIRST + 59)
+#define TVM_GETSELECTEDCOUNT    (TV_FIRST + 70)
+#define TVM_SHOWINFOTIP         (TV_FIRST + 71)
+#define TVM_GETITEMPARTRECT     (TV_FIRST + 72)
+
+
+#define TVN_FIRST               (0U-400U)
+#define TVN_LAST                (0U-499U)
+
+#define TVN_SELCHANGINGA        (TVN_FIRST-1)
+#define TVN_SELCHANGINGW        (TVN_FIRST-50)
+#define TVN_SELCHANGING         WINELIB_NAME_AW(TVN_SELCHANGING)
+
+#define TVN_SELCHANGEDA         (TVN_FIRST-2)
+#define TVN_SELCHANGEDW         (TVN_FIRST-51)
+#define TVN_SELCHANGED          WINELIB_NAME_AW(TVN_SELCHANGED)
+
+#define TVN_GETDISPINFOA        (TVN_FIRST-3)
+#define TVN_GETDISPINFOW        (TVN_FIRST-52)
+#define TVN_GETDISPINFO         WINELIB_NAME_AW(TVN_GETDISPINFO)
+
+#define TVN_SETDISPINFOA        (TVN_FIRST-4)
+#define TVN_SETDISPINFOW        (TVN_FIRST-53)
+#define TVN_SETDISPINFO         WINELIB_NAME_AW(TVN_SETDISPINFO)
+
+#define TVN_ITEMEXPANDINGA      (TVN_FIRST-5)
+#define TVN_ITEMEXPANDINGW      (TVN_FIRST-54)
+#define TVN_ITEMEXPANDING       WINELIB_NAME_AW(TVN_ITEMEXPANDING)
+
+#define TVN_ITEMEXPANDEDA       (TVN_FIRST-6)
+#define TVN_ITEMEXPANDEDW       (TVN_FIRST-55)
+#define TVN_ITEMEXPANDED        WINELIB_NAME_AW(TVN_ITEMEXPANDED)
+
+#define TVN_BEGINDRAGA          (TVN_FIRST-7)
+#define TVN_BEGINDRAGW          (TVN_FIRST-56)
+#define TVN_BEGINDRAG           WINELIB_NAME_AW(TVN_BEGINDRAG)
+
+#define TVN_BEGINRDRAGA         (TVN_FIRST-8)
+#define TVN_BEGINRDRAGW         (TVN_FIRST-57)
+#define TVN_BEGINRDRAG          WINELIB_NAME_AW(TVN_BEGINRDRAG)
+
+#define TVN_DELETEITEMA         (TVN_FIRST-9)
+#define TVN_DELETEITEMW         (TVN_FIRST-58)
+#define TVN_DELETEITEM          WINELIB_NAME_AW(TVN_DELETEITEM)
+
+#define TVN_BEGINLABELEDITA     (TVN_FIRST-10)
+#define TVN_BEGINLABELEDITW     (TVN_FIRST-59)
+#define TVN_BEGINLABELEDIT      WINELIB_NAME_AW(TVN_BEGINLABELEDIT)
+
+#define TVN_ENDLABELEDITA       (TVN_FIRST-11)
+#define TVN_ENDLABELEDITW       (TVN_FIRST-60)
+#define TVN_ENDLABELEDIT        WINELIB_NAME_AW(TVN_ENDLABELEDIT)
+
+#define TVN_KEYDOWN             (TVN_FIRST-12)
+
+#define TVN_GETINFOTIPA         (TVN_FIRST-13)
+#define TVN_GETINFOTIPW         (TVN_FIRST-14)
+#define TVN_GETINFOTIP          WINELIB_NAME_AW(TVN_GETINFOTIP)
+
+#define TVN_SINGLEEXPAND        (TVN_FIRST-15)
+
+
+
+
+
+#define TVIF_TEXT             0x0001
+#define TVIF_IMAGE            0x0002
+#define TVIF_PARAM            0x0004
+#define TVIF_STATE            0x0008
+#define TVIF_HANDLE           0x0010
+#define TVIF_SELECTEDIMAGE    0x0020
+#define TVIF_CHILDREN         0x0040
+#define TVIF_INTEGRAL         0x0080
+#define TVIF_STATEEX          0x0100
+#define TVIF_EXPANDEDIMAGE    0x0200
+#define TVIF_DI_SETITEM	      0x1000
+
+#define TVI_ROOT              ((HTREEITEM)-65536)
+#define TVI_FIRST             ((HTREEITEM)-65535)
+#define TVI_LAST              ((HTREEITEM)-65534)
+#define TVI_SORT              ((HTREEITEM)-65533)
+
+#define TVIS_FOCUSED          0x0001
+#define TVIS_SELECTED         0x0002
+#define TVIS_CUT              0x0004
+#define TVIS_DROPHILITED      0x0008
+#define TVIS_BOLD             0x0010
+#define TVIS_EXPANDED         0x0020
+#define TVIS_EXPANDEDONCE     0x0040
+#define TVIS_EXPANDPARTIAL    0x0080
+#define TVIS_OVERLAYMASK      0x0f00
+#define TVIS_STATEIMAGEMASK   0xf000
+#define TVIS_USERMASK         0xf000
+
+#define TVIS_EX_FLAT          0x0001
+#define TVIS_EX_DISABLED      0x0002
+/* TVIS_EX_HWND is listed on MSDN but apparently not in any header. */
+#define TVIS_EX_ALL           0x0002
+
+#define TVHT_NOWHERE          0x0001
+#define TVHT_ONITEMICON       0x0002
+#define TVHT_ONITEMLABEL      0x0004
+#define TVHT_ONITEMINDENT     0x0008
+#define TVHT_ONITEMBUTTON     0x0010
+#define TVHT_ONITEMRIGHT      0x0020
+#define TVHT_ONITEMSTATEICON  0x0040
+#define TVHT_ONITEM           0x0046
+#define TVHT_ABOVE            0x0100
+#define TVHT_BELOW            0x0200
+#define TVHT_TORIGHT          0x0400
+#define TVHT_TOLEFT           0x0800
+
+#define TVS_SHAREDIMAGELISTS  0x0000
+#define TVS_PRIVATEIMAGELISTS 0x0400
+
+#define TVS_EX_MULTISELECT         0x0002
+#define TVS_EX_DOUBLEBUFFER        0x0004
+#define TVS_EX_NOINDENTSTATE       0x0008
+#define TVS_EX_RICHTOOLTIP         0x0010
+#define TVS_EX_AUTOHSCROLL         0x0020
+#define TVS_EX_FADEINOUTEXPANDOS   0x0040
+#define TVS_EX_PARTIALCHECKBOXES   0x0080
+#define TVS_EX_EXCLUSIONCHECKBOXES 0x0100
+#define TVS_EX_DIMMEDCHECKBOXES    0x0200
+#define TVS_EX_DRAWIMAGEASYNC      0x0400
+
+#define TVE_COLLAPSE          0x0001
+#define TVE_EXPAND            0x0002
+#define TVE_TOGGLE            0x0003
+#define TVE_EXPANDPARTIAL     0x4000
+#define TVE_COLLAPSERESET     0x8000
+
+#define TVGN_ROOT             0
+#define TVGN_NEXT             1
+#define TVGN_PREVIOUS         2
+#define TVGN_PARENT           3
+#define TVGN_CHILD            4
+#define TVGN_FIRSTVISIBLE     5
+#define TVGN_NEXTVISIBLE      6
+#define TVGN_PREVIOUSVISIBLE  7
+#define TVGN_DROPHILITE       8
+#define TVGN_CARET            9
+#define TVGN_LASTVISIBLE      10
+#define TVSI_NOSINGLEEXPAND   0x8000
+
+#define TVC_UNKNOWN           0x00
+#define TVC_BYMOUSE           0x01
+#define TVC_BYKEYBOARD        0x02
+
+
+typedef struct _TREEITEM *HTREEITEM;
+
+typedef struct {
+      UINT mask;
+      HTREEITEM hItem;
+      UINT state;
+      UINT stateMask;
+      LPSTR  pszText;
+      INT  cchTextMax;
+      INT  iImage;
+      INT  iSelectedImage;
+      INT  cChildren;
+      LPARAM lParam;
+} TVITEMA, *LPTVITEMA;
+
+typedef struct {
+      UINT mask;
+      HTREEITEM hItem;
+      UINT state;
+      UINT stateMask;
+      LPWSTR pszText;
+      INT cchTextMax;
+      INT iImage;
+      INT iSelectedImage;
+      INT cChildren;
+      LPARAM lParam;
+} TVITEMW, *LPTVITEMW;
+
+#define TV_ITEMA    TVITEMA
+#define TV_ITEMW    TVITEMW
+#define LPTV_ITEMA  LPTVITEMA
+#define LPTV_ITEMW  LPTVITEMW
+
+#define TVITEM      WINELIB_NAME_AW(TVITEM)
+#define LPTVITEM    WINELIB_NAME_AW(LPTVITEM)
+#define TV_ITEM     WINELIB_NAME_AW(TV_ITEM)
+#define LPTV_ITEM   WINELIB_NAME_AW(LPTV_ITEM)
+
+typedef struct {
+      UINT mask;
+      HTREEITEM hItem;
+      UINT state;
+      UINT stateMask;
+      LPSTR  pszText;
+      INT  cchTextMax;
+      INT  iImage;
+      INT  iSelectedImage;
+      INT  cChildren;
+      LPARAM lParam;
+      INT iIntegral;
+      UINT uStateEx;        /* _WIN32_IE >= 0x600 */
+      HWND hwnd;            /* _WIN32_IE >= 0x600 */
+      INT iExpandedImage;   /* _WIN32_IE >= 0x600 */
+} TVITEMEXA, *LPTVITEMEXA;
+
+typedef struct {
+      UINT mask;
+      HTREEITEM hItem;
+      UINT state;
+      UINT stateMask;
+      LPWSTR pszText;
+      INT cchTextMax;
+      INT iImage;
+      INT iSelectedImage;
+      INT cChildren;
+      LPARAM lParam;
+      INT iIntegral;
+      UINT uStateEx;        /* _WIN32_IE >= 0x600 */
+      HWND hwnd;            /* _WIN32_IE >= 0x600 */
+      INT iExpandedImage;   /* _WIN32_IE >= 0x600 */
+} TVITEMEXW, *LPTVITEMEXW;
+
+#define TVITEMEX   WINELIB_NAME_AW(TVITEMEX)
+#define LPTVITEMEX WINELIB_NAME_AW(LPTVITEMEX)
+
+typedef struct tagTVINSERTSTRUCTA {
+        HTREEITEM hParent;
+        HTREEITEM hInsertAfter;
+        union {
+           TVITEMEXA itemex;
+           TVITEMA   item;
+        } DUMMYUNIONNAME;
+} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;
+
+typedef struct tagTVINSERTSTRUCTW {
+        HTREEITEM hParent;
+        HTREEITEM hInsertAfter;
+        union {
+           TVITEMEXW itemex;
+           TVITEMW   item;
+        } DUMMYUNIONNAME;
+} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;
+
+#define TVINSERTSTRUCT    WINELIB_NAME_AW(TVINSERTSTRUCT)
+#define LPTVINSERTSTRUCT  WINELIB_NAME_AW(LPTVINSERTSTRUCT)
+
+#define TVINSERTSTRUCT_V1_SIZEA CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item)
+#define TVINSERTSTRUCT_V1_SIZEW CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item)
+#define TVINSERTSTRUCT_V1_SIZE    WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE)
+
+#define TV_INSERTSTRUCT    TVINSERTSTRUCT
+#define TV_INSERTSTRUCTA   TVINSERTSTRUCTA
+#define TV_INSERTSTRUCTW   TVINSERTSTRUCTW
+#define LPTV_INSERTSTRUCT  LPTVINSERTSTRUCT
+#define LPTV_INSERTSTRUCTA LPTVINSERTSTRUCTA
+#define LPTV_INSERTSTRUCTW LPTVINSERTSTRUCTW
+
+
+
+typedef struct tagNMTREEVIEWA {
+	NMHDR	hdr;
+	UINT	action;
+	TVITEMA	itemOld;
+	TVITEMA	itemNew;
+	POINT	ptDrag;
+} NMTREEVIEWA, *LPNMTREEVIEWA;
+
+typedef struct tagNMTREEVIEWW {
+	NMHDR	hdr;
+	UINT	action;
+	TVITEMW	itemOld;
+	TVITEMW	itemNew;
+	POINT	ptDrag;
+} NMTREEVIEWW, *LPNMTREEVIEWW;
+
+#define NMTREEVIEW     WINELIB_NAME_AW(NMTREEVIEW)
+#define NM_TREEVIEW    WINELIB_NAME_AW(NMTREEVIEW)
+#define NM_TREEVIEWA   NMTREEVIEWA
+#define NM_TREEVIEWW   NMTREEVIEWW
+#define LPNMTREEVIEW   WINELIB_NAME_AW(LPNMTREEVIEW)
+
+#define LPNM_TREEVIEW  LPNMTREEVIEW
+#define LPNM_TREEVIEWA LPNMTREEVIEWA
+#define LPNM_TREEVIEWW LPNMTREEVIEWW
+
+typedef struct tagTVDISPINFOA {
+	NMHDR	hdr;
+	TVITEMA	item;
+} NMTVDISPINFOA, *LPNMTVDISPINFOA;
+
+typedef struct tagTVDISPINFOW {
+	NMHDR	hdr;
+	TVITEMW	item;
+} NMTVDISPINFOW, *LPNMTVDISPINFOW;
+
+typedef struct tagTVDISPINFOEXA {
+	NMHDR	hdr;
+	TVITEMEXA	item;
+} NMTVDISPINFOEXA, *LPNMTVDISPINFOEXA;
+
+typedef struct tagTVDISPINFOEXW {
+	NMHDR	hdr;
+	TVITEMEXW	item;
+} NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW;
+
+#define NMTVDISPINFO            WINELIB_NAME_AW(NMTVDISPINFO)
+#define LPNMTVDISPINFO          WINELIB_NAME_AW(LPNMTVDISPINFO)
+#define NMTVDISPINFOEX          WINELIB_NAME_AW(NMTVDISPINFOEX)
+#define LPNMTVDISPINFOEX        WINELIB_NAME_AW(LPNMTVDISPINFOEX)
+#define TV_DISPINFOA            NMTVDISPINFOA
+#define TV_DISPINFOW            NMTVDISPINFOW
+#define TV_DISPINFO             NMTVDISPINFO
+
+typedef INT (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);
+
+typedef struct tagTVSORTCB
+{
+	HTREEITEM hParent;
+	PFNTVCOMPARE lpfnCompare;
+	LPARAM lParam;
+} TVSORTCB, *LPTVSORTCB;
+
+#define TV_SORTCB TVSORTCB
+#define LPTV_SORTCB LPTVSORTCB
+
+typedef struct tagTVHITTESTINFO {
+        POINT pt;
+        UINT flags;
+        HTREEITEM hItem;
+} TVHITTESTINFO, *LPTVHITTESTINFO;
+
+#define TV_HITTESTINFO TVHITTESTINFO
+
+
+/* Custom Draw Treeview */
+
+#define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk)
+
+#define TVCDRF_NOIMAGES     0x00010000
+
+typedef struct tagNMTVCUSTOMDRAW
+{
+    NMCUSTOMDRAW nmcd;
+    COLORREF     clrText;
+    COLORREF     clrTextBk;
+    INT iLevel;                 /* IE>0x0400 */
+} NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;
+
+/* Treeview tooltips */
+
+typedef struct tagNMTVGETINFOTIPA
+{
+    NMHDR hdr;
+    LPSTR pszText;
+    INT cchTextMax;
+    HTREEITEM hItem;
+    LPARAM lParam;
+} NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA;
+
+typedef struct tagNMTVGETINFOTIPW
+{
+    NMHDR hdr;
+    LPWSTR pszText;
+    INT cchTextMax;
+    HTREEITEM hItem;
+    LPARAM lParam;
+} NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW;
+
+#define NMTVGETINFOTIP WINELIB_NAME_AW(NMTVGETINFOTIP)
+#define LPNMTVGETINFOTIP WINELIB_NAME_AW(LPNMTVGETINFOTIP)
+
+#include <pshpack1.h>
+typedef struct tagTVKEYDOWN
+{
+    NMHDR hdr;
+    WORD wVKey;
+    UINT flags;
+} NMTVKEYDOWN, *LPNMTVKEYDOWN;
+#include <poppack.h>
+
+#define TV_KEYDOWN      NMTVKEYDOWN
+
+#define TreeView_InsertItemA(hwnd, phdi) \
+  (HTREEITEM)SNDMSGA((hwnd), TVM_INSERTITEMA, 0, \
+                            (LPARAM)(LPTVINSERTSTRUCTA)(phdi))
+#define TreeView_InsertItemW(hwnd,phdi) \
+  (HTREEITEM)SNDMSGW((hwnd), TVM_INSERTITEMW, 0, \
+                            (LPARAM)(LPTVINSERTSTRUCTW)(phdi))
+#define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem)
+
+#define TreeView_DeleteItem(hwnd, hItem) \
+  (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
+#define TreeView_DeleteAllItems(hwnd) \
+  (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
+#define TreeView_Expand(hwnd, hitem, code) \
+ (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)code, \
+	(LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_GetItemRect(hwnd, hitem, prc, code) \
+ (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), \
+			TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))
+
+#define TreeView_GetCount(hwnd) \
+    (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0)
+#define TreeView_GetIndent(hwnd) \
+    (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0)
+#define TreeView_SetIndent(hwnd, indent) \
+    (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)
+
+#define TreeView_GetImageList(hwnd, iImage) \
+    (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0)
+
+#define TreeView_SetImageList(hwnd, himl, iImage) \
+    (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, \
+ (LPARAM)(HIMAGELIST)(himl))
+
+#define TreeView_GetNextItem(hwnd, hitem, code) \
+    (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\
+(LPARAM)(HTREEITEM) (hitem))
+
+#define TreeView_GetChild(hwnd, hitem) \
+	 	TreeView_GetNextItem(hwnd, hitem , TVGN_CHILD)
+#define TreeView_GetNextSibling(hwnd, hitem) \
+		TreeView_GetNextItem(hwnd, hitem , TVGN_NEXT)
+#define TreeView_GetPrevSibling(hwnd, hitem) \
+		TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUS)
+#define TreeView_GetParent(hwnd, hitem) \
+		TreeView_GetNextItem(hwnd, hitem , TVGN_PARENT)
+#define TreeView_GetFirstVisible(hwnd)  \
+		TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE)
+#define TreeView_GetLastVisible(hwnd)   \
+		TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)
+#define TreeView_GetNextVisible(hwnd, hitem) \
+		TreeView_GetNextItem(hwnd, hitem , TVGN_NEXTVISIBLE)
+#define TreeView_GetPrevVisible(hwnd, hitem) \
+		TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUSVISIBLE)
+#define TreeView_GetSelection(hwnd) \
+		TreeView_GetNextItem(hwnd, NULL, TVGN_CARET)
+#define TreeView_GetDropHilight(hwnd) \
+		TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE)
+#define TreeView_GetRoot(hwnd) \
+		TreeView_GetNextItem(hwnd, NULL, TVGN_ROOT)
+#define TreeView_GetLastVisible(hwnd) \
+		TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)
+
+
+#define TreeView_Select(hwnd, hitem, code) \
+ (BOOL)SNDMSG((hwnd), TVM_SELECTITEM, (WPARAM)(code), \
+(LPARAM)(HTREEITEM)(hitem))
+
+
+#define TreeView_SelectItem(hwnd, hitem) \
+		TreeView_Select(hwnd, hitem, TVGN_CARET)
+#define TreeView_SelectDropTarget(hwnd, hitem) \
+       	TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
+#define TreeView_SelectSetFirstVisible(hwnd, hitem) \
+       	TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
+
+
+#define TreeView_GetItemA(hwnd, pitem) \
+ (BOOL)SNDMSGA((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem))
+#define TreeView_GetItemW(hwnd, pitem) \
+ (BOOL)SNDMSGW((hwnd), TVM_GETITEMW, 0, (LPARAM) (TVITEMW *)(pitem))
+#define TreeView_GetItem WINELIB_NAME_AW(TreeView_GetItem)
+
+#define TreeView_SetItemA(hwnd, pitem) \
+ (BOOL)SNDMSGA((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem))
+#define TreeView_SetItemW(hwnd, pitem) \
+ (BOOL)SNDMSGW((hwnd), TVM_SETITEMW, 0, (LPARAM)(const TVITEMW *)(pitem))
+#define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem)
+
+#define TreeView_EditLabel(hwnd, hitem) \
+    (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_GetEditControl(hwnd) \
+    (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0)
+
+#define TreeView_GetVisibleCount(hwnd) \
+    (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
+
+#define TreeView_HitTest(hwnd, lpht) \
+    (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0,\
+(LPARAM)(LPTVHITTESTINFO)(lpht))
+
+#define TreeView_CreateDragImage(hwnd, hitem) \
+    (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0,\
+(LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_SortChildren(hwnd, hitem, recurse) \
+    (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\
+(LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_EnsureVisible(hwnd, hitem) \
+    (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem))
+
+#define TreeView_SortChildrenCB(hwnd, psort, recurse) \
+    (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \
+    (LPARAM)(LPTV_SORTCB)(psort))
+
+#define TreeView_EndEditLabelNow(hwnd, fCancel) \
+    (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)
+
+#define TreeView_GetISearchString(hwnd, lpsz) \
+    (BOOL)SNDMSG((hwnd), TVM_GETISEARCHSTRING, 0, \
+							(LPARAM)(LPTSTR)lpsz)
+
+#define TreeView_SetToolTips(hwnd,  hwndTT) \
+    (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0)
+
+#define TreeView_GetToolTips(hwnd) \
+    (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0)
+
+#define TreeView_SetItemHeight(hwnd,  iHeight) \
+    (INT)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0)
+
+#define TreeView_GetItemHeight(hwnd) \
+    (INT)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0)
+
+#define TreeView_SetBkColor(hwnd, clr) \
+    (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr)
+
+#define TreeView_SetTextColor(hwnd, clr) \
+    (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr)
+
+#define TreeView_GetBkColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)
+
+#define TreeView_GetTextColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)
+
+#define TreeView_SetScrollTime(hwnd, uTime) \
+    (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0)
+
+#define TreeView_GetScrollTime(hwnd) \
+    (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0)
+
+#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \
+    (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \
+                       (LPARAM) (hItem))
+
+#define TreeView_SetInsertMarkColor(hwnd, clr) \
+    (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr)
+
+#define TreeView_GetInsertMarkColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
+
+#define TreeView_SetItemState(hwndTV, hti, data, _mask) \
+{ TVITEM _TVi; \
+  _TVi.mask = TVIF_STATE; \
+  _TVi.hItem = hti; \
+  _TVi.stateMask = _mask; \
+  _TVi.state = data; \
+  SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)&_TVi); \
+}
+
+#define TreeView_GetItemState(hwndTV, hti, mask) \
+   (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask))
+#define TreeView_GetCheckState(hwndTV, hti) \
+   ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti),  \
+                     TVIS_STATEIMAGEMASK))) >> 12) -1)
+
+#define TreeView_SetLineColor(hwnd, clr) \
+    (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr))
+
+#define TreeView_GetLineColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0)
+
+#define TreeView_MapAccIDToHTREEITEM(hwnd, id) \
+    (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0)
+
+#define TreeView_MapHTREEITEMToAccID(hwnd, htreeitem) \
+    (UINT)SNDMSG((hwnd), TVM_MAPHTREEITEMTOACCID, (WPARAM)htreeitem, 0)
+
+#define TreeView_SetUnicodeFormat(hwnd, fUnicode) \
+    (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+#define TreeView_GetUnicodeFormat(hwnd) \
+    (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0)
+
+/* Listview control */
+
+#define WC_LISTVIEWA          "SysListView32"
+#if defined(__GNUC__)
+# define WC_LISTVIEWW (const WCHAR []){ 'S','y','s', \
+  'L','i','s','t','V','i','e','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_LISTVIEWW         L"SysListView32"
+#else
+static const WCHAR WC_LISTVIEWW[] = { 'S','y','s',
+  'L','i','s','t','V','i','e','w','3','2',0 };
+#endif
+#define WC_LISTVIEW  WINELIB_NAME_AW(WC_LISTVIEW)
+
+#define LVSCW_AUTOSIZE -1
+#define LVSCW_AUTOSIZE_USEHEADER -2
+
+
+#define LVS_EX_GRIDLINES        0x0001
+#define LVS_EX_SUBITEMIMAGES    0x0002
+#define LVS_EX_CHECKBOXES       0x0004
+#define LVS_EX_TRACKSELECT      0x0008
+#define LVS_EX_HEADERDRAGDROP   0x0010
+#define LVS_EX_FULLROWSELECT    0x0020
+#define LVS_EX_ONECLICKACTIVATE 0x0040
+#define LVS_EX_TWOCLICKACTIVATE 0x0080
+#define LVS_EX_FLATSB           0x0100
+#define LVS_EX_REGIONAL         0x0200
+#define LVS_EX_INFOTIP          0x0400
+#define LVS_EX_UNDERLINEHOT     0x0800
+#define LVS_EX_UNDERLINECOLD    0x1000
+#define LVS_EX_MULTIWORKAREAS   0x2000
+#define LVS_EX_LABELTIP         0x4000
+#define LVS_EX_BORDERSELECT     0x8000
+#define LVS_EX_DOUBLEBUFFER     0x00010000
+#define LVS_EX_HIDELABELS       0x00020000
+#define LVS_EX_SINGLEROW        0x00040000
+#define LVS_EX_SNAPTOGRID       0x00080000
+#define LVS_EX_SIMPLESELECT     0x00100000
+#define LVS_EX_JUSTIFYCOLUMNS   0x00200000
+#define LVS_EX_TRANSPARENTBKGND 0x00400000
+#define LVS_EX_TRANSPARENTSHADOWTEXT 0x00800000
+#define LVS_EX_AUTOAUTOARRANGE  0x01000000
+#define LVS_EX_HEADERINALLVIEWS 0x02000000
+#define LVS_EX_AUTOCHECKSELECT  0x08000000
+#define LVS_EX_AUTOSIZECOLUMNS  0x10000000
+#define LVS_EX_COLUMNSNAPPOINTS 0x40000000
+#define LVS_EX_COLUMNOVERFLOW   0x80000000
+
+#define LVCF_FMT                0x0001
+#define LVCF_WIDTH              0x0002
+#define LVCF_TEXT               0x0004
+#define LVCF_SUBITEM            0x0008
+#define LVCF_IMAGE              0x0010
+#define LVCF_ORDER              0x0020
+#define LVCF_MINWIDTH           0x0040
+
+#define LVCFMT_LEFT             0x0000
+#define LVCFMT_RIGHT            0x0001
+#define LVCFMT_CENTER           0x0002
+#define LVCFMT_JUSTIFYMASK      0x0003
+#define LVCFMT_FIXED_WIDTH      0x0100
+#define LVCFMT_IMAGE            0x0800
+#define LVCFMT_BITMAP_ON_RIGHT  0x1000
+#define LVCFMT_COL_HAS_IMAGES   0x8000
+#define LVCFMT_NO_DPI_SCALE     0x00040000
+#define LVCFMT_FIXED_RATIO      0x00080000
+#define LVCFMT_LINE_BREAK       0x00100000
+#define LVCFMT_FILL             0x00200000
+#define LVCFMT_WRAP             0x00400000
+#define LVCFMT_NO_TITLE         0x00800000
+#define LVCFMT_SPLIT_BUTTON     0x01000000
+#define LVCFMT_TILE_PLACEMENTMASK (LVCFMT_LINE_BREAK | LVCFMT_FILL)
+
+#define LVSIL_NORMAL            0
+#define LVSIL_SMALL             1
+#define LVSIL_STATE             2
+#define LVSIL_GROUPHEADER       3
+
+/* following 2 flags only for LVS_OWNERDATA listviews */
+/* and only in report or list mode */
+#define LVSICF_NOINVALIDATEALL  0x0001
+#define LVSICF_NOSCROLL         0x0002
+
+
+#define LVFI_PARAM              0x0001
+#define LVFI_STRING             0x0002
+#define LVFI_SUBSTRING          0x0004
+#define LVFI_PARTIAL            0x0008
+#define LVFI_WRAP               0x0020
+#define LVFI_NEARESTXY          0x0040
+
+#define LVIF_TEXT               0x0001
+#define LVIF_IMAGE              0x0002
+#define LVIF_PARAM              0x0004
+#define LVIF_STATE              0x0008
+#define LVIF_INDENT             0x0010
+#define LVIF_GROUPID            0x0100
+#define LVIF_COLUMNS            0x0200
+#define LVIF_NORECOMPUTE        0x0800
+#define LVIF_DI_SETITEM         0x1000
+#define LVIF_COLFMT             0x00010000
+
+#define LVIR_BOUNDS             0x0000
+#define LVIR_ICON               0x0001
+#define LVIR_LABEL              0x0002
+#define LVIR_SELECTBOUNDS       0x0003
+
+#define LVIS_FOCUSED            0x0001
+#define LVIS_SELECTED           0x0002
+#define LVIS_CUT                0x0004
+#define LVIS_DROPHILITED        0x0008
+#define LVIS_ACTIVATING         0x0020
+
+#define LVIS_OVERLAYMASK        0x0F00
+#define LVIS_STATEIMAGEMASK     0xF000
+
+#define LVNI_ALL		0x0000
+#define LVNI_FOCUSED		0x0001
+#define LVNI_SELECTED		0x0002
+#define LVNI_CUT		0x0004
+#define LVNI_DROPHILITED	0x0008
+
+#define LVNI_ABOVE		0x0100
+#define LVNI_BELOW		0x0200
+#define LVNI_TOLEFT		0x0400
+#define LVNI_TORIGHT		0x0800
+
+#define LVHT_NOWHERE		0x0001
+#define LVHT_ONITEMICON		0x0002
+#define LVHT_ONITEMLABEL	0x0004
+#define LVHT_ONITEMSTATEICON	0x0008
+#define LVHT_ONITEM		(LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON)
+
+#define LVHT_ABOVE		0x0008
+#define LVHT_BELOW		0x0010
+#define LVHT_TORIGHT		0x0020
+#define LVHT_TOLEFT		0x0040
+
+#define LV_VIEW_ICON            0x0000
+#define LV_VIEW_DETAILS         0x0001
+#define LV_VIEW_SMALLICON       0x0002
+#define LV_VIEW_LIST            0x0003
+#define LV_VIEW_TILE            0x0004
+#define LV_VIEW_MAX             0x0004
+
+#define LVGF_NONE               0x00000000
+#define LVGF_HEADER             0x00000001
+#define LVGF_FOOTER             0x00000002
+#define LVGF_STATE              0x00000004
+#define LVGF_ALIGN              0x00000008
+#define LVGF_GROUPID            0x00000010
+#define LVGF_SUBTITLE           0x00000100
+#define LVGF_TASK               0x00000200
+#define LVGF_DESCRIPTIONTOP     0x00000400
+#define LVGF_DESCRIPTIONBOTTOM  0x00000800
+#define LVGF_TITLEIMAGE         0x00001000
+#define LVGF_EXTENDEDIMAGE      0x00002000
+#define LVGF_ITEMS              0x00004000
+#define LVGF_SUBSET             0x00008000
+#define LVGF_SUBSETITEMS        0x00010000
+
+#define LVGS_NORMAL             0x00000000
+#define LVGS_COLLAPSED          0x00000001
+#define LVGS_HIDDEN             0x00000002
+
+#define LVGA_HEADER_LEFT        0x00000001
+#define LVGA_HEADER_CENTER      0x00000002
+#define LVGA_HEADER_RIGHT       0x00000004
+#define LVGA_FOOTER_LEFT        0x00000008
+#define LVGA_FOOTER_CENTER      0x00000010
+#define LVGA_FOOTER_RIGHT       0x00000020
+
+#define LVGMF_NONE              0x00000000
+#define LVGMF_BORDERSIZE        0x00000001
+#define LVGMF_BORDERCOLOR       0x00000002
+#define LVGMF_TEXTCOLOR         0x00000004
+
+#define LVTVIF_AUTOSIZE         0x00000000
+#define LVTVIF_FIXEDWIDTH       0x00000001
+#define LVTVIF_FIXEDHEIGHT      0x00000002
+#define LVTVIF_FIXEDSIZE        0x00000003
+#define LVTVIF_EXTENDED         0x00000004
+
+#define LVTVIM_TILESIZE         0x00000001
+#define LVTVIM_COLUMNS          0x00000002
+#define LVTVIM_LABELMARGIN      0x00000004
+
+#define LVIM_AFTER              0x00000001
+
+#define LVM_FIRST               0x1000
+#define LVM_GETBKCOLOR          (LVM_FIRST+0)
+#define LVM_SETBKCOLOR          (LVM_FIRST+1)
+#define LVM_GETIMAGELIST        (LVM_FIRST+2)
+#define LVM_SETIMAGELIST        (LVM_FIRST+3)
+#define LVM_GETITEMCOUNT        (LVM_FIRST+4)
+#define LVM_GETITEMA            (LVM_FIRST+5)
+#define LVM_GETITEMW            (LVM_FIRST+75)
+#define LVM_GETITEM             WINELIB_NAME_AW(LVM_GETITEM)
+#define LVM_SETITEMA            (LVM_FIRST+6)
+#define LVM_SETITEMW            (LVM_FIRST+76)
+#define LVM_SETITEM             WINELIB_NAME_AW(LVM_SETITEM)
+#define LVM_INSERTITEMA         (LVM_FIRST+7)
+#define LVM_INSERTITEMW         (LVM_FIRST+77)
+#define LVM_INSERTITEM          WINELIB_NAME_AW(LVM_INSERTITEM)
+#define LVM_DELETEITEM          (LVM_FIRST+8)
+#define LVM_DELETEALLITEMS      (LVM_FIRST+9)
+#define LVM_GETCALLBACKMASK     (LVM_FIRST+10)
+#define LVM_SETCALLBACKMASK     (LVM_FIRST+11)
+#define LVM_GETNEXTITEM         (LVM_FIRST+12)
+#define LVM_FINDITEMA           (LVM_FIRST+13)
+#define LVM_FINDITEMW           (LVM_FIRST+83)
+#define LVM_FINDITEM            WINELIB_NAME_AW(LVM_FINDITEM)
+#define LVM_GETITEMRECT         (LVM_FIRST+14)
+#define LVM_SETITEMPOSITION     (LVM_FIRST+15)
+#define LVM_GETITEMPOSITION     (LVM_FIRST+16)
+#define LVM_GETSTRINGWIDTHA     (LVM_FIRST+17)
+#define LVM_GETSTRINGWIDTHW     (LVM_FIRST+87)
+#define LVM_GETSTRINGWIDTH      WINELIB_NAME_AW(LVM_GETSTRINGWIDTH)
+#define LVM_HITTEST             (LVM_FIRST+18)
+#define LVM_ENSUREVISIBLE       (LVM_FIRST+19)
+#define LVM_SCROLL              (LVM_FIRST+20)
+#define LVM_REDRAWITEMS         (LVM_FIRST+21)
+#define LVM_ARRANGE             (LVM_FIRST+22)
+#define LVM_EDITLABELA          (LVM_FIRST+23)
+#define LVM_EDITLABELW          (LVM_FIRST+118)
+#define LVM_EDITLABEL           WINELIB_NAME_AW(LVM_EDITLABEL)
+#define LVM_GETEDITCONTROL      (LVM_FIRST+24)
+#define LVM_GETCOLUMNA          (LVM_FIRST+25)
+#define LVM_GETCOLUMNW          (LVM_FIRST+95)
+#define LVM_GETCOLUMN           WINELIB_NAME_AW(LVM_GETCOLUMN)
+#define LVM_SETCOLUMNA          (LVM_FIRST+26)
+#define LVM_SETCOLUMNW          (LVM_FIRST+96)
+#define LVM_SETCOLUMN           WINELIB_NAME_AW(LVM_SETCOLUMN)
+#define LVM_INSERTCOLUMNA       (LVM_FIRST+27)
+#define LVM_INSERTCOLUMNW       (LVM_FIRST+97)
+#define LVM_INSERTCOLUMN        WINELIB_NAME_AW(LVM_INSERTCOLUMN)
+#define LVM_DELETECOLUMN        (LVM_FIRST+28)
+#define LVM_GETCOLUMNWIDTH      (LVM_FIRST+29)
+#define LVM_SETCOLUMNWIDTH      (LVM_FIRST+30)
+#define LVM_GETHEADER           (LVM_FIRST+31)
+
+#define LVM_CREATEDRAGIMAGE     (LVM_FIRST+33)
+#define LVM_GETVIEWRECT         (LVM_FIRST+34)
+#define LVM_GETTEXTCOLOR        (LVM_FIRST+35)
+#define LVM_SETTEXTCOLOR        (LVM_FIRST+36)
+#define LVM_GETTEXTBKCOLOR      (LVM_FIRST+37)
+#define LVM_SETTEXTBKCOLOR      (LVM_FIRST+38)
+#define LVM_GETTOPINDEX         (LVM_FIRST+39)
+#define LVM_GETCOUNTPERPAGE     (LVM_FIRST+40)
+#define LVM_GETORIGIN           (LVM_FIRST+41)
+#define LVM_UPDATE              (LVM_FIRST+42)
+#define LVM_SETITEMSTATE        (LVM_FIRST+43)
+#define LVM_GETITEMSTATE        (LVM_FIRST+44)
+#define LVM_GETITEMTEXTA        (LVM_FIRST+45)
+#define LVM_GETITEMTEXTW        (LVM_FIRST+115)
+#define LVM_GETITEMTEXT         WINELIB_NAME_AW(LVM_GETITEMTEXT)
+#define LVM_SETITEMTEXTA        (LVM_FIRST+46)
+#define LVM_SETITEMTEXTW        (LVM_FIRST+116)
+#define LVM_SETITEMTEXT         WINELIB_NAME_AW(LVM_SETITEMTEXT)
+#define LVM_SETITEMCOUNT        (LVM_FIRST+47)
+#define LVM_SORTITEMS           (LVM_FIRST+48)
+#define LVM_SORTITEMSEX         (LVM_FIRST+81)
+#define LVM_SETITEMPOSITION32   (LVM_FIRST+49)
+#define LVM_GETSELECTEDCOUNT    (LVM_FIRST+50)
+#define LVM_GETITEMSPACING      (LVM_FIRST+51)
+#define LVM_GETISEARCHSTRINGA   (LVM_FIRST+52)
+#define LVM_GETISEARCHSTRINGW   (LVM_FIRST+117)
+#define LVM_GETISEARCHSTRING    WINELIB_NAME_AW(LVM_GETISEARCHSTRING)
+#define LVM_SETICONSPACING      (LVM_FIRST+53)
+#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)
+#define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+55)
+#define LVM_GETSUBITEMRECT      (LVM_FIRST+56)
+#define LVM_SUBITEMHITTEST      (LVM_FIRST+57)
+#define LVM_SETCOLUMNORDERARRAY (LVM_FIRST+58)
+#define LVM_GETCOLUMNORDERARRAY (LVM_FIRST+59)
+#define LVM_SETHOTITEM          (LVM_FIRST+60)
+#define LVM_GETHOTITEM          (LVM_FIRST+61)
+#define LVM_SETHOTCURSOR        (LVM_FIRST+62)
+#define LVM_GETHOTCURSOR        (LVM_FIRST+63)
+#define LVM_APPROXIMATEVIEWRECT (LVM_FIRST+64)
+#define LVM_SETWORKAREAS        (LVM_FIRST+65)
+#define LVM_GETSELECTIONMARK    (LVM_FIRST+66)
+#define LVM_SETSELECTIONMARK    (LVM_FIRST+67)
+#define LVM_SETBKIMAGEA         (LVM_FIRST+68)
+#define LVM_SETBKIMAGEW         (LVM_FIRST+138)
+#define LVM_SETBKIMAGE          WINELIB_NAME_AW(LVM_SETBKIMAGE)
+#define LVM_GETBKIMAGEA         (LVM_FIRST+69)
+#define LVM_GETBKIMAGEW         (LVM_FIRST+139)
+#define LVM_GETBKIMAGE          WINELIB_NAME_AW(LVM_GETBKIMAGE)
+#define LVM_GETWORKAREAS        (LVM_FIRST+70)
+#define LVM_SETHOVERTIME        (LVM_FIRST+71)
+#define LVM_GETHOVERTIME        (LVM_FIRST+72)
+#define LVM_GETNUMBEROFWORKAREAS (LVM_FIRST+73)
+#define LVM_SETTOOLTIPS         (LVM_FIRST+74)
+#define LVM_GETTOOLTIPS         (LVM_FIRST+78)
+#define LVM_GETUNICODEFORMAT    (CCM_GETUNICODEFORMAT)
+#define LVM_SETUNICODEFORMAT    (CCM_SETUNICODEFORMAT)
+#define LVM_SETSELECTEDCOLUMN   (LVM_FIRST + 140)
+#define LVM_SETTILEWIDTH        (LVM_FIRST + 141)
+#define LVM_SETVIEW             (LVM_FIRST + 142)
+#define LVM_GETVIEW             (LVM_FIRST + 143)
+#define LVM_INSERTGROUP         (LVM_FIRST + 145)
+#define LVM_SETGROUPINFO        (LVM_FIRST + 147)
+#define LVM_GETGROUPINFO        (LVM_FIRST + 149)
+#define LVM_REMOVEGROUP         (LVM_FIRST + 150)
+#define LVM_MOVEGROUP           (LVM_FIRST + 151)
+#define LVM_MOVEITEMTOGROUP     (LVM_FIRST + 154)
+#define LVM_SETGROUPMETRICS     (LVM_FIRST + 155)
+#define LVM_GETGROUPMETRICS     (LVM_FIRST + 156)
+#define LVM_ENABLEGROUPVIEW     (LVM_FIRST + 157)
+#define LVM_SORTGROUPS          (LVM_FIRST + 158)
+#define LVM_INSERTGROUPSORTED   (LVM_FIRST + 159)
+#define LVM_REMOVEALLGROUPS     (LVM_FIRST + 160)
+#define LVM_HASGROUP            (LVM_FIRST + 161)
+#define LVM_SETTILEVIEWINFO     (LVM_FIRST + 162)
+#define LVM_GETTILEVIEWINFO     (LVM_FIRST + 163)
+#define LVM_SETTILEINFO         (LVM_FIRST + 164)
+#define LVM_GETTILEINFO         (LVM_FIRST + 165)
+#define LVM_SETINSERTMARK       (LVM_FIRST + 166)
+#define LVM_GETINSERTMARK       (LVM_FIRST + 167)
+#define LVM_INSERTMARKHITTEST   (LVM_FIRST + 168)
+#define LVM_GETINSERTMARKRECT   (LVM_FIRST + 169)
+#define LVM_SETINSERTMARKCOLOR  (LVM_FIRST + 170)
+#define LVM_GETINSERTMARKCOLOR  (LVM_FIRST + 171)
+#define LVM_SETINFOTIP          (LVM_FIRST + 173)
+#define LVM_GETSELECTEDCOLUMN   (LVM_FIRST + 174)
+#define LVM_ISGROUPVIEWENABLED  (LVM_FIRST + 175)
+#define LVM_GETOUTLINECOLOR     (LVM_FIRST + 176)
+#define LVM_SETOUTLINECOLOR     (LVM_FIRST + 177)
+#define LVM_CANCELEDITLABEL     (LVM_FIRST + 179)
+#define LVM_MAPINDEXTOID        (LVM_FIRST + 180)
+#define LVM_MAPIDTOINDEX        (LVM_FIRST + 181)
+#define LVM_ISITEMVISIBLE       (LVM_FIRST + 182)
+
+#define LVN_FIRST               (0U-100U)
+#define LVN_LAST                (0U-199U)
+#define LVN_ITEMCHANGING        (LVN_FIRST-0)
+#define LVN_ITEMCHANGED         (LVN_FIRST-1)
+#define LVN_INSERTITEM          (LVN_FIRST-2)
+#define LVN_DELETEITEM          (LVN_FIRST-3)
+#define LVN_DELETEALLITEMS      (LVN_FIRST-4)
+#define LVN_BEGINLABELEDITA     (LVN_FIRST-5)
+#define LVN_BEGINLABELEDITW     (LVN_FIRST-75)
+#define LVN_BEGINLABELEDIT      WINELIB_NAME_AW(LVN_BEGINLABELEDIT)
+#define LVN_ENDLABELEDITA       (LVN_FIRST-6)
+#define LVN_ENDLABELEDITW       (LVN_FIRST-76)
+#define LVN_ENDLABELEDIT        WINELIB_NAME_AW(LVN_ENDLABELEDIT)
+#define LVN_COLUMNCLICK         (LVN_FIRST-8)
+#define LVN_BEGINDRAG           (LVN_FIRST-9)
+#define LVN_BEGINRDRAG          (LVN_FIRST-11)
+#define LVN_ODCACHEHINT         (LVN_FIRST-13)
+#define LVN_ITEMACTIVATE        (LVN_FIRST-14)
+#define LVN_ODSTATECHANGED      (LVN_FIRST-15)
+#define LVN_HOTTRACK            (LVN_FIRST-21)
+#define LVN_ODFINDITEMA         (LVN_FIRST-52)
+#define LVN_ODFINDITEMW         (LVN_FIRST-79)
+#define LVN_ODFINDITEM          WINELIB_NAME_AW(LVN_ODFINDITEM)
+#define LVN_GETDISPINFOA        (LVN_FIRST-50)
+#define LVN_GETDISPINFOW        (LVN_FIRST-77)
+#define LVN_GETDISPINFO         WINELIB_NAME_AW(LVN_GETDISPINFO)
+#define LVN_SETDISPINFOA        (LVN_FIRST-51)
+#define LVN_SETDISPINFOW        (LVN_FIRST-78)
+#define LVN_SETDISPINFO         WINELIB_NAME_AW(LVN_SETDISPINFO)
+#define LVN_KEYDOWN             (LVN_FIRST-55)
+#define LVN_MARQUEEBEGIN        (LVN_FIRST-56)
+#define LVN_GETINFOTIPA         (LVN_FIRST-57)
+#define LVN_GETINFOTIPW         (LVN_FIRST-58)
+#define LVN_GETINFOTIP          WINELIB_NAME_AW(LVN_GETINFOTIP)
+#define LVN_INCREMENTALSEARCHA  (LVN_FIRST-62)
+#define LVN_INCREMENTALSEARCHW  (LVN_FIRST-63)
+#define LVN_INCREMENTALSEARCH   WINELIB_NAME_AW(LVN_INCREMENTALSEARCH)
+#define LVN_BEGINSCROLL         (LVN_FIRST-80)
+#define LVN_ENDSCROLL           (LVN_FIRST-81)
+#define LVN_LINKCLICK           (LVN_FIRST-84)
+#define LVN_ASYNCDRAWN          (LVN_FIRST-86)
+#define LVN_GETEMPTYMARKUP      (LVN_FIRST-87)
+
+/* LVN_INCREMENTALSEARCH return codes */
+#define LVNSCH_DEFAULT          -1
+#define LVNSCH_ERROR            -2
+#define LVNSCH_IGNORE           -3
+
+#define LVA_DEFAULT             0x0000
+#define LVA_ALIGNLEFT           0x0001
+#define LVA_ALIGNTOP            0x0002
+#define LVA_SNAPTOGRID          0x0005
+
+typedef struct tagLVITEMA
+{
+    UINT mask;
+    INT  iItem;
+    INT  iSubItem;
+    UINT state;
+    UINT stateMask;
+    LPSTR  pszText;
+    INT  cchTextMax;
+    INT  iImage;
+    LPARAM lParam;
+    /* (_WIN32_IE >= 0x0300) */
+    INT  iIndent;
+    /* (_WIN32_IE >= 0x0560) */
+    INT iGroupId;
+    UINT cColumns;
+    PUINT puColumns;
+    /* (_WIN32_WINNT >= 0x0600) */
+    PINT piColFmt;
+    INT iGroup;
+} LVITEMA, *LPLVITEMA;
+
+typedef struct tagLVITEMW
+{
+    UINT mask;
+    INT  iItem;
+    INT  iSubItem;
+    UINT state;
+    UINT stateMask;
+    LPWSTR pszText;
+    INT  cchTextMax;
+    INT  iImage;
+    LPARAM lParam;
+    /* (_WIN32_IE >= 0x0300) */
+    INT  iIndent;
+    /* (_WIN32_IE >= 0x0560) */
+    INT iGroupId;
+    UINT cColumns;
+    PUINT puColumns;
+    /* (_WIN32_WINNT >= 0x0600) */
+    PINT piColFmt;
+    INT iGroup;
+} LVITEMW, *LPLVITEMW;
+
+#define LVITEM   WINELIB_NAME_AW(LVITEM)
+#define LPLVITEM WINELIB_NAME_AW(LPLVITEM)
+
+#define LVITEM_V1_SIZEA CCSIZEOF_STRUCT(LVITEMA, lParam)
+#define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam)
+#define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE)
+
+#define LVITEMA_V5_SIZE CCSIZEOF_STRUCT(LVITEMA, puColumns)
+#define LVITEMW_V5_SIZE CCSIZEOF_STRUCT(LVITEMW, puColumns)
+#define LVITEM_V5_SIZE WINELIB_NAME_AW(LVITEM_V5_SIZE)
+
+#define LV_ITEM  LVITEM
+#define LV_ITEMA LVITEMA
+#define LV_ITEMW LVITEMW
+
+typedef struct LVSETINFOTIP
+{
+    UINT cbSize;
+    DWORD dwFlags;
+    LPWSTR pszText;
+    int iItem;
+    int iSubItem;
+} LVSETINFOTIP, *PLVSETINFOTIP;
+
+/* ListView background image structs and constants
+   For _WIN32_IE version 0x400 and later. */
+
+typedef struct tagLVBKIMAGEA
+{
+    ULONG ulFlags;
+    HBITMAP hbm;
+    LPSTR pszImage;
+    UINT cchImageMax;
+    int xOffsetPercent;
+    int yOffsetPercent;
+} LVBKIMAGEA, *LPLVBKIMAGEA;
+
+typedef struct tagLVBKIMAGEW
+{
+    ULONG ulFlags;
+    HBITMAP hbm;
+    LPWSTR pszImage;
+    UINT cchImageMax;
+    int xOffsetPercent;
+    int yOffsetPercent;
+} LVBKIMAGEW, *LPLVBKIMAGEW;
+
+#define LVBKIMAGE WINELIB_NAME_AW(LVBKIMAGE)
+#define LPLVBKIMAGE WINELIB_NAME_AW(LPLVBKIMAGE)
+
+#define LVBKIF_SOURCE_NONE      0x00000000
+#define LVBKIF_SOURCE_HBITMAP   0x00000001
+#define LVBKIF_SOURCE_URL       0x00000002
+#define LVBKIF_SOURCE_MASK      0x00000003
+#define LVBKIF_STYLE_NORMAL     0x00000000
+#define LVBKIF_STYLE_TILE       0x00000010
+#define LVBKIF_STYLE_MASK       0x00000010
+#define LVBKIF_FLAG_TILEOFFSET  0x00000100
+#define LVBKIF_TYPE_WATERMARK   0x10000000
+
+#define ListView_SetBkImage(hwnd, plvbki) \
+    (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)plvbki)
+
+#define ListView_GetBkImage(hwnd, plvbki) \
+    (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)plvbki)
+
+typedef struct tagLVCOLUMNA
+{
+    UINT mask;
+    INT  fmt;
+    INT  cx;
+    LPSTR  pszText;
+    INT  cchTextMax;
+    INT  iSubItem;
+    /* (_WIN32_IE >= 0x0300) */
+    INT  iImage;
+    INT  iOrder;
+    /* (_WIN32_WINNT >= 0x0600) */
+    INT  cxMin;
+    INT  cxDefault;
+    INT  cxIdeal;
+} LVCOLUMNA, *LPLVCOLUMNA;
+
+typedef struct tagLVCOLUMNW
+{
+    UINT mask;
+    INT  fmt;
+    INT  cx;
+    LPWSTR pszText;
+    INT  cchTextMax;
+    INT  iSubItem;
+    /* (_WIN32_IE >= 0x0300) */
+    INT  iImage;
+    INT  iOrder;
+    /* (_WIN32_WINNT >= 0x0600) */
+    INT  cxMin;
+    INT  cxDefault;
+    INT  cxIdeal;
+} LVCOLUMNW, *LPLVCOLUMNW;
+
+#define LVCOLUMN   WINELIB_NAME_AW(LVCOLUMN)
+#define LPLVCOLUMN WINELIB_NAME_AW(LPLVCOLUMN)
+
+#define LVCOLUMN_V1_SIZEA CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem)
+#define LVCOLUMN_V1_SIZEW CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem)
+#define LVCOLUMN_V1_SIZE WINELIB_NAME_AW(LVCOLUMN_V1_SIZE)
+
+#define LV_COLUMN       LVCOLUMN
+
+
+typedef struct tagNMLISTVIEW
+{
+    NMHDR hdr;
+    INT iItem;
+    INT iSubItem;
+    UINT uNewState;
+    UINT uOldState;
+    UINT uChanged;
+    POINT ptAction;
+    LPARAM  lParam;
+} NMLISTVIEW, *LPNMLISTVIEW;
+
+#define NM_LISTVIEW     NMLISTVIEW
+#define LPNM_LISTVIEW   LPNMLISTVIEW
+
+typedef struct tagNMITEMACTIVATE
+{
+    NMHDR hdr;
+    int iItem;
+    int iSubItem;
+    UINT uNewState;
+    UINT uOldState;
+    UINT uChanged;
+    POINT ptAction;
+    LPARAM lParam;
+    UINT uKeyFlags;
+} NMITEMACTIVATE, *LPNMITEMACTIVATE;
+
+#define LVKF_ALT     0x0001
+#define LVKF_CONTROL 0x0002
+#define LVKF_SHIFT   0x0004
+
+typedef struct tagLVDISPINFO
+{
+    NMHDR hdr;
+    LVITEMA item;
+} NMLVDISPINFOA, *LPNMLVDISPINFOA;
+
+typedef struct tagLVDISPINFOW
+{
+    NMHDR hdr;
+    LVITEMW item;
+} NMLVDISPINFOW, *LPNMLVDISPINFOW;
+
+#define NMLVDISPINFO   WINELIB_NAME_AW(NMLVDISPINFO)
+#define LPNMLVDISPINFO WINELIB_NAME_AW(LPNMLVDISPINFO)
+
+#define LV_DISPINFO	NMLVDISPINFO
+#define LV_DISPINFOA	NMLVDISPINFOA
+#define LV_DISPINFOW	NMLVDISPINFOW
+
+#include <pshpack1.h>
+typedef struct tagLVKEYDOWN
+{
+  NMHDR hdr;
+  WORD  wVKey;
+  UINT flags;
+} NMLVKEYDOWN, *LPNMLVKEYDOWN;
+#include <poppack.h>
+
+#define LV_KEYDOWN     NMLVKEYDOWN
+
+typedef struct tagNMLVGETINFOTIPA
+{
+    NMHDR hdr;
+    DWORD dwFlags;
+    LPSTR pszText;
+    int cchTextMax;
+    int iItem;
+    int iSubItem;
+    LPARAM lParam;
+} NMLVGETINFOTIPA, *LPNMLVGETINFOTIPA;
+
+typedef struct tagNMLVGETINFOTIPW
+{
+    NMHDR hdr;
+    DWORD dwFlags;
+    LPWSTR pszText;
+    int cchTextMax;
+    int iItem;
+    int iSubItem;
+    LPARAM lParam;
+} NMLVGETINFOTIPW, *LPNMLVGETINFOTIPW;
+
+#define NMLVGETINFOTIP WINELIB_NAME_AW(NMLVGETINFOTIP)
+#define LPNMLVGETINFOTIP WINELIB_NAME_AW(LPNMLVGETINFOTIP)
+
+typedef struct tagLVHITTESTINFO
+{
+    POINT pt;
+    UINT  flags;
+    INT   iItem;
+    INT   iSubItem;
+    /* (_WIN32_WINNT >= 0x0600) */
+    INT   iGroup;
+} LVHITTESTINFO, *LPLVHITTESTINFO;
+
+#define LV_HITTESTINFO LVHITTESTINFO
+#define _LV_HITTESTINFO tagLVHITTESTINFO
+#define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO,iItem)
+
+typedef struct tagLVFINDINFOA
+{
+	UINT flags;
+	LPCSTR psz;
+	LPARAM lParam;
+	POINT pt;
+	UINT vkDirection;
+} LVFINDINFOA, *LPLVFINDINFOA;
+
+typedef struct tagLVFINDINFOW
+{
+	UINT flags;
+	LPCWSTR psz;
+	LPARAM lParam;
+	POINT pt;
+	UINT vkDirection;
+} LVFINDINFOW, *LPLVFINDINFOW;
+
+#define LVFINDINFO WINELIB_NAME_AW(LVFINDINFO)
+#define LPLVFINDINFO WINELIB_NAME_AW(LPLVFINDINFO)
+
+#define LV_FINDINFO	LVFINDINFO
+#define LV_FINDINFOA	LVFINDINFOA
+#define LV_FINDINFOW	LVFINDINFOW
+
+/* Groups relates structures */
+
+typedef struct LVGROUP
+{
+	UINT cbSize;
+	UINT mask;
+	LPWSTR pszHeader;
+	INT cchHeader;
+	LPWSTR pszFooter;
+	INT cchFooter;
+	INT iGroupId;
+	UINT stateMask;
+	UINT state;
+	UINT uAlign;
+        /* (_WIN32_WINNT >= 0x0600) */
+	LPWSTR  pszSubtitle;
+	UINT    cchSubtitle;
+	LPWSTR  pszTask;
+	UINT    cchTask;
+	LPWSTR  pszDescriptionTop;
+	UINT    cchDescriptionTop;
+	LPWSTR  pszDescriptionBottom;
+	UINT    cchDescriptionBottom;
+	INT     iTitleImage;
+	INT     iExtendedImage;
+	INT     iFirstItem;
+	UINT    cItems;
+	LPWSTR  pszSubsetTitle;
+	UINT    cchSubsetTitle;
+} LVGROUP, *PLVGROUP;
+
+#define LVGROUP_V5_SIZE CCSIZEOF_STRUCT(LVGROUP, uAlign)
+
+typedef struct LVGROUPMETRICS
+{
+	UINT cbSize;
+	UINT mask;
+	UINT Left;
+	UINT Top;
+	UINT Right;
+	UINT Bottom;
+	COLORREF crLeft;
+	COLORREF crTop;
+	COLORREF crRight;
+	COLORREF crBottom;
+	COLORREF crRightHeader;
+	COLORREF crFooter;
+} LVGROUPMETRICS, *PLVGROUPMETRICS;
+
+typedef INT (*PFNLVGROUPCOMPARE)(INT, INT, VOID*);
+
+typedef struct LVINSERTGROUPSORTED
+{
+	PFNLVGROUPCOMPARE pfnGroupCompare;
+	LPVOID *pvData;
+	LVGROUP lvGroup;
+} LVINSERTGROUPSORTED, *PLVINSERTGROUPSORTED;
+
+/* Tile related structures */
+
+typedef struct LVTILEINFO
+{
+	UINT cbSize;
+	int iItem;
+	UINT cColumns;
+	PUINT puColumns;
+        /* (_WIN32_WINNT >= 0x0600) */
+	int* piColFmt;
+} LVTILEINFO, *PLVTILEINFO;
+
+typedef struct LVTILEVIEWINFO
+{
+	UINT cbSize;
+	DWORD dwMask;
+	DWORD dwFlags;
+	SIZE sizeTile;
+	int cLines;
+	RECT rcLabelMargin;
+} LVTILEVIEWINFO, *PLVTILEVIEWINFO;
+
+typedef struct LVINSERTMARK
+{
+	UINT cbSize;
+	DWORD dwFlags;
+	int iItem;
+	DWORD dwReserved;
+} LVINSERTMARK, *PLVINSERTMARK;
+
+typedef struct tagTCHITTESTINFO
+{
+	POINT pt;
+	UINT flags;
+} TCHITTESTINFO, *LPTCHITTESTINFO;
+
+#define TC_HITTESTINFO TCHITTESTINFO
+
+typedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
+
+#define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLCUSTOMDRW, clrTextBk)
+
+typedef struct tagNMLVCUSTOMDRAW
+{
+    NMCUSTOMDRAW nmcd;
+    COLORREF clrText;
+    COLORREF clrTextBk;
+    int iSubItem;	/* (_WIN32_IE >= 0x0400) */
+    DWORD dwItemType;	/* (_WIN32_IE >= 0x560) */
+    COLORREF clrFace;   /* (_WIN32_IE >= 0x560) */
+    int iIconEffect;	/* (_WIN32_IE >= 0x560) */
+    int iIconPhase;	/* (_WIN32_IE >= 0x560) */
+    int iPartId;	/* (_WIN32_IE >= 0x560) */
+    int iStateId;	/* (_WIN32_IE >= 0x560) */
+    RECT rcText;	/* (_WIN32_IE >= 0x560) */
+    UINT uAlign;	/* (_WIN32_IE >= 0x560) */
+} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
+
+typedef struct tagNMLVCACHEHINT
+{
+	NMHDR	hdr;
+	INT	iFrom;
+	INT	iTo;
+} NMLVCACHEHINT, *LPNMLVCACHEHINT;
+
+#define LPNM_CACHEHINT LPNMLVCACHEHINT
+#define PNM_CACHEHINT  LPNMLVCACHEHINT
+#define NM_CACHEHINT   NMLVCACHEHINT
+
+typedef struct tagNMLVFINDITEMA
+{
+    NMHDR hdr;
+    int iStart;
+    LVFINDINFOA lvfi;
+} NMLVFINDITEMA, *LPNMLVFINDITEMA;
+
+typedef struct tagNMLVFINDITEMW
+{
+    NMHDR hdr;
+    int iStart;
+    LVFINDINFOW lvfi;
+} NMLVFINDITEMW, *LPNMLVFINDITEMW;
+
+#define NMLVFINDITEM   WINELIB_NAME_AW(NMLVFINDITEM)
+#define LPNMLVFINDITEM WINELIB_NAME_AW(LPNMLVFINDITEM)
+#define NM_FINDITEM    NMLVFINDITEM
+#define LPNM_FINDITEM  LPNMLVFINDITEM
+#define PNM_FINDITEM   LPNMLVFINDITEM
+
+typedef struct tagNMLVODSTATECHANGE
+{
+    NMHDR hdr;
+    int iFrom;
+    int iTo;
+    UINT uNewState;
+    UINT uOldState;
+} NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE;
+
+#define PNM_ODSTATECHANGE LPNMLVODSTATECHANGE
+#define LPNM_ODSTATECHANGE LPNMLVODSTATECHANGE
+#define NM_ODSTATECHANGE NMLVODSTATECHANGE
+
+typedef struct NMLVSCROLL
+{
+    NMHDR hdr;
+    int dx;
+    int dy;
+} NMLVSCROLL, *LPNMLVSCROLL;
+
+#define ListView_SetItemCount(hwnd,count) \
+    (BOOL)SNDMSG((hwnd),LVM_SETITEMCOUNT,(WPARAM)(INT)(count),0)
+#define ListView_SetTextBkColor(hwnd,clrBk) \
+    (BOOL)SNDMSG((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+#define ListView_SetTextColor(hwnd,clrBk) \
+    (BOOL)SNDMSG((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+#define ListView_DeleteColumn(hwnd,col)\
+    (LRESULT)SNDMSG((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col))
+#define ListView_GetColumnA(hwnd,x,col)\
+    (LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))
+#define ListView_GetColumnW(hwnd,x,col)\
+    (LRESULT)SNDMSGW((hwnd),LVM_GETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))
+#define ListView_GetColumn WINELIB_NAME_AW(ListView_GetColumn)
+#define ListView_SetColumnA(hwnd,x,col)\
+    (LRESULT)SNDMSGA((hwnd),LVM_SETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))
+#define ListView_SetColumnW(hwnd,x,col)\
+    (LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))
+#define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn)
+#define ListView_GetColumnWidth(hwnd,x)\
+    (INT)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(INT)(x), 0)
+#define ListView_SetColumnWidth(hwnd,x,width)\
+    (BOOL)SNDMSG((hwnd),LVM_SETCOLUMNWIDTH,(WPARAM)(INT)(x),(LPARAM)(MAKELPARAM(width,0)))
+
+
+#define ListView_GetNextItem(hwnd,nItem,flags) \
+    (INT)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0)))
+#define ListView_FindItemA(hwnd,nItem,plvfi) \
+    (INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi))
+#define ListView_FindItemW(hwnd,nItem,plvfi) \
+    (INT)SNDMSGW((hwnd),LVM_FINDITEMW,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOW*)(plvfi))
+#define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem)
+
+#define ListView_Arrange(hwnd,code) \
+    (INT)SNDMSG((hwnd), LVM_ARRANGE, (WPARAM)(INT)(code), 0)
+#define ListView_GetItemPosition(hwnd,i,ppt) \
+    (INT)SNDMSG((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt))
+#define ListView_GetItemRect(hwnd,i,prc,code) \
+	(BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \
+	((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \
+	*)(prc)) : (LPARAM)(RECT*)NULL))
+#define ListView_SetItemA(hwnd,pitem) \
+    (INT)SNDMSGA((hwnd),LVM_SETITEMA,0,(LPARAM)(const LVITEMA *)(pitem))
+#define ListView_SetItemW(hwnd,pitem) \
+    (INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem))
+#define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem)
+#define ListView_SetItemState(hwnd,i,data,dataMask) \
+{ LVITEM _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\
+  SNDMSG(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEM)&_LVi);}
+#define ListView_GetItemState(hwnd,i,mask) \
+    (UINT)SNDMSG((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask))
+#define ListView_SetCheckState(hwndLV, i, bCheck) \
+    { LVITEM _LVi; _LVi.state = INDEXTOSTATEIMAGEMASK((bCheck)?2:1); _LVi.stateMask = LVIS_STATEIMAGEMASK; \
+    SNDMSG(hwndLV, LVM_SETITEMSTATE, (WPARAM)(UINT)(i), (LPARAM)(LPLVITEM)&_LVi);}
+#define ListView_GetCheckState(hwndLV, i) \
+    (((UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) >> 12) - 1)
+#define ListView_GetCountPerPage(hwnd) \
+    (BOOL)SNDMSG((hwnd), LVM_GETCOUNTPERPAGE, 0, 0)
+#define ListView_GetImageList(hwnd,iImageList) \
+    (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), 0)
+#define ListView_GetStringWidthA(hwnd,pstr) \
+    (INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr))
+#define ListView_GetStringWidthW(hwnd,pstr) \
+    (INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr))
+#define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth)
+#define ListView_GetTopIndex(hwnd) \
+    (BOOL)SNDMSG((hwnd), LVM_GETTOPINDEX, 0, 0)
+#define ListView_Scroll(hwnd,dx,dy) \
+    (BOOL)SNDMSG((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy))
+#define ListView_EnsureVisible(hwnd,i,fPartialOk) \
+    (BOOL)SNDMSG((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk)
+#define ListView_SetBkColor(hwnd,clrBk) \
+    (BOOL)SNDMSG((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+#define ListView_SetImageList(hwnd,himl,iImageList) \
+    (HIMAGELIST)SNDMSG((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl))
+#define ListView_GetItemCount(hwnd) \
+    (INT)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0)
+#define ListView_RedrawItems(hwnd,first,last) \
+    (BOOL)SNDMSG((hwnd),LVM_REDRAWITEMS,(WPARAM)(INT)(first),(LPARAM)(INT)(last))
+#define ListView_GetEditControl(hwnd) \
+    (HWND)SNDMSG((hwnd), LVM_GETEDITCONTROL, 0, 0)
+#define ListView_GetTextColor(hwnd)  \
+    (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, 0)
+#define ListView_GetTextBkColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, 0)
+#define ListView_GetBkColor(hwnd)  \
+    (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, 0)
+#define ListView_GetItemA(hwnd,pitem) \
+    (BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem))
+#define ListView_GetItemW(hwnd,pitem) \
+    (BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem))
+#define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem)
+#define ListView_GetOrigin(hwnd,ppt) \
+    (BOOL)SNDMSG((hwnd),LVM_GETORIGIN,0,(LPARAM)(POINT *)(ppt))
+
+#define ListView_HitTest(hwnd,pinfo) \
+    (INT)SNDMSG((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))
+
+#define ListView_InsertItemA(hwnd,pitem) \
+    (INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem))
+#define ListView_InsertItemW(hwnd,pitem) \
+    (INT)SNDMSGW((hwnd),LVM_INSERTITEMW,0,(LPARAM)(const LVITEMW *)(pitem))
+#define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem)
+
+#define ListView_DeleteAllItems(hwnd) \
+    (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, 0)
+
+#define ListView_InsertColumnA(hwnd,iCol,pcol) \
+    (INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol))
+#define ListView_InsertColumnW(hwnd,iCol,pcol) \
+    (INT)SNDMSGW((hwnd),LVM_INSERTCOLUMNW,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNW *)(pcol))
+#define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn)
+
+#define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \
+    (BOOL)SNDMSG((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare)
+#define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \
+  (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
+
+#define ListView_SetItemPosition(hwndLV, i, x, y) \
+    (BOOL)SNDMSG((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y)))
+#define ListView_GetSelectedCount(hwndLV) \
+    (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0)
+
+#define ListView_EditLabelA(hwndLV, i) \
+    (HWND)SNDMSG((hwndLV), LVM_EDITLABELA, (WPARAM)(int)(i), 0)
+#define ListView_EditLabelW(hwndLV, i) \
+    (HWND)SNDMSG((hwndLV), LVM_EDITLABELW, (WPARAM)(int)(i), 0)
+#define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel)
+
+#define ListView_GetItemTextA(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \
+{ \
+    LVITEMA _LVi;\
+    _LVi.iSubItem = _iSubItem;\
+    _LVi.cchTextMax = _cchTextMax;\
+    _LVi.pszText = _pszText;\
+    SNDMSGA(hwndLV, LVM_GETITEMTEXTA, (WPARAM)(i), (LPARAM)&_LVi);\
+}
+#define ListView_GetItemTextW(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \
+{ \
+    LVITEMW _LVi;\
+    _LVi.iSubItem = _iSubItem;\
+    _LVi.cchTextMax = _cchTextMax;\
+    _LVi.pszText = _pszText;\
+    SNDMSGW(hwndLV, LVM_GETITEMTEXTW, (WPARAM)(i), (LPARAM)&_LVi);\
+}
+#define ListView_GetItemText WINELIB_NAME_AW(ListView_GetItemText)
+#define ListView_SetItemPosition32(hwnd,n,x1,y1) \
+{ POINT ptNewPos; ptNewPos.x = (x1); ptNewPos.y = (y1); SNDMSG((hwnd), LVM_SETITEMPOSITION32, (WPARAM)(int)(n), (LPARAM)&ptNewPos); }
+#define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \
+{ LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\
+  SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);}
+#define ListView_SetItemTextW(hwndLV, i, _iSubItem, _pszText) \
+{ LVITEMW _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\
+  SNDMSGW(hwndLV, LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM) (LVITEMW*)& _LVi);}
+#define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText)
+
+#define ListView_DeleteItem(hwndLV, i) \
+    (BOOL)SNDMSG(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0)
+#define ListView_Update(hwndLV, i) \
+    (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), 0)
+#define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \
+    (BOOL)SNDMSG((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)
+#define ListView_GetExtendedListViewStyle(hwndLV) \
+    (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+#define ListView_GetHotCursor(hwndLV) \
+    (HCURSOR)SNDMSG((hwndLV), LVM_GETHOTCURSOR, 0, 0)
+#define ListView_GetHotItem(hwndLV) \
+    (int)SNDMSG((hwndLV), LVM_GETHOTITEM, 0, 0)
+#define ListView_GetItemSpacing(hwndLV, fSmall) \
+    (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0)
+#define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \
+    (BOOL)SNDMSG((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \
+                       ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : 0))
+#define ListView_GetToolTips(hwndLV) \
+    (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0)
+#define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \
+    (BOOL)SNDMSG((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)
+#define ListView_SetExtendedListViewStyle(hwndLV, dw) \
+    (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw)
+#define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \
+    (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw)
+#define ListView_SetHotCursor(hwndLV, hcur) \
+    (HCURSOR)SNDMSG((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur)
+#define ListView_SetHotItem(hwndLV, i) \
+    (int)SNDMSG((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0)
+#define ListView_SetIconSpacing(hwndLV, cx, cy) \
+    (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))
+#define ListView_SetToolTips(hwndLV, hwndNewHwnd) \
+    (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0)
+#define ListView_SubItemHitTest(hwndLV, plvhti) \
+    (int)SNDMSG((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti))
+#define ListView_GetSelectionMark(hwndLV) \
+    (int)SNDMSG((hwndLV), LVM_GETSELECTIONMARK, 0, 0)
+#define ListView_SetSelectionMark(hwndLV, iItem) \
+    (int)SNDMSG((hwndLV), LVM_SETSELECTIONMARK, 0, (LPARAM)(iItem))
+#define ListView_GetViewRect(hwndLV, prc) \
+    (BOOL)SNDMSG((hwndLV),LVM_GETVIEWRECT,0,(LPARAM)(LPRECT)(prc))
+#define ListView_GetHeader(hwndLV) \
+    (HWND)SNDMSG((hwndLV), LVM_GETHEADER, 0, 0)
+#define ListView_SetSelectedColumn(hwnd, iCol) \
+    SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0)
+#define ListView_SetTileWidth(hwnd, cpWidth) \
+    SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0)
+#define ListView_SetView(hwnd, iView) \
+    (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0)
+#define ListView_GetView(hwnd) \
+    (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0)
+#define ListView_InsertGroup(hwnd, index, pgrp) \
+    SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp)
+#define ListView_SetGroupHeaderImageList(hwnd, himl) \
+    SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, (LPARAM)himl)
+#define ListView_GetGroupHeaderImageList(hwnd) \
+    SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, 0)
+#define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) \
+    SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
+#define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) \
+    SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
+#define ListView_RemoveGroup(hwnd, iGroupId) \
+    SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0)
+#define ListView_MoveGroup(hwnd, iGroupId, toIndex) \
+    SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex)
+#define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) \
+    SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo)
+#define ListView_SetGroupMetrics(hwnd, pGroupMetrics) \
+    SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
+#define ListView_GetGroupMetrics(hwnd, pGroupMetrics) \
+    SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
+#define ListView_EnableGroupView(hwnd, fEnable) \
+    SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0)
+#define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \
+    SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv)
+#define ListView_InsertGroupSorted(hwnd, structInsert) \
+    SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0)
+#define ListView_RemoveAllGroups(hwnd) \
+    SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0)
+#define ListView_HasGroup(hwnd, dwGroupId) \
+    SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0)
+#define ListView_SetTileViewInfo(hwnd, ptvi) \
+    SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi)
+#define ListView_GetTileViewInfo(hwnd, ptvi) \
+    SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi)
+#define ListView_SetTileInfo(hwnd, pti) \
+    SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti)
+#define ListView_GetTileInfo(hwnd, pti) \
+    SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti)
+#define ListView_SetInsertMark(hwnd, lvim) \
+    (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
+#define ListView_GetInsertMark(hwnd, lvim) \
+    (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
+#define ListView_InsertMarkHitTest(hwnd, point, lvim) \
+    (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim))
+#define ListView_GetInsertMarkRect(hwnd, rc) \
+    (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc))
+#define ListView_SetInsertMarkColor(hwnd, color) \
+    (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
+#define ListView_GetInsertMarkColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0)
+#define ListView_SetInfoTip(hwndLV, plvInfoTip)\
+    (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip)
+#define ListView_GetSelectedColumn(hwnd) \
+    (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0)
+#define ListView_IsGroupViewEnabled(hwnd) \
+    (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0)
+#define ListView_GetOutlineColor(hwnd) \
+    (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0)
+#define ListView_SetOutlineColor(hwnd, color) \
+    (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
+#define ListView_CancelEditLabel(hwnd) \
+    (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0)
+#define ListView_MapIndexToID(hwnd, index) \
+    (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0)
+#define ListView_MapIDToIndex(hwnd, id) \
+    (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0)
+#define ListView_SetUnicodeFormat(hwnd, fUnicode) \
+    (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+#define ListView_GetUnicodeFormat(hwnd) \
+    (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0)
+
+/* Tab Control */
+
+#define WC_TABCONTROLA		"SysTabControl32"
+#if defined(__GNUC__)
+# define WC_TABCONTROLW (const WCHAR []){ 'S','y','s', \
+  'T','a','b','C','o','n','t','r','o','l','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_TABCONTROLW         L"SysTabControl32"
+#else
+static const WCHAR WC_TABCONTROLW[] = { 'S','y','s',
+  'T','a','b','C','o','n','t','r','o','l','3','2',0 };
+#endif
+#define WC_TABCONTROL		WINELIB_NAME_AW(WC_TABCONTROL)
+
+/* tab control styles */
+#define TCS_EX_FLATSEPARATORS   0x00000001  /* to be used with */
+#define TCS_EX_REGISTERDROP     0x00000002  /* TCM_SETEXTENDEDSTYLE */
+
+
+#define TCM_FIRST		0x1300
+
+#define TCM_GETIMAGELIST        (TCM_FIRST + 2)
+#define TCM_SETIMAGELIST        (TCM_FIRST + 3)
+#define TCM_GETITEMCOUNT	(TCM_FIRST + 4)
+#define TCM_GETITEM		WINELIB_NAME_AW(TCM_GETITEM)
+#define TCM_GETITEMA		(TCM_FIRST + 5)
+#define TCM_GETITEMW		(TCM_FIRST + 60)
+#define TCM_SETITEMA		(TCM_FIRST + 6)
+#define TCM_SETITEMW		(TCM_FIRST + 61)
+#define TCM_SETITEM		WINELIB_NAME_AW(TCM_SETITEM)
+#define TCM_INSERTITEMA		(TCM_FIRST + 7)
+#define TCM_INSERTITEMW		(TCM_FIRST + 62)
+#define TCM_INSERTITEM		WINELIB_NAME_AW(TCM_INSERTITEM)
+#define TCM_DELETEITEM          (TCM_FIRST + 8)
+#define TCM_DELETEALLITEMS      (TCM_FIRST + 9)
+#define TCM_GETITEMRECT         (TCM_FIRST + 10)
+#define TCM_GETCURSEL		(TCM_FIRST + 11)
+#define TCM_SETCURSEL           (TCM_FIRST + 12)
+#define TCM_HITTEST             (TCM_FIRST + 13)
+#define TCM_SETITEMEXTRA	(TCM_FIRST + 14)
+#define TCM_ADJUSTRECT          (TCM_FIRST + 40)
+#define TCM_SETITEMSIZE         (TCM_FIRST + 41)
+#define TCM_REMOVEIMAGE         (TCM_FIRST + 42)
+#define TCM_SETPADDING          (TCM_FIRST + 43)
+#define TCM_GETROWCOUNT         (TCM_FIRST + 44)
+#define TCM_GETTOOLTIPS         (TCM_FIRST + 45)
+#define TCM_SETTOOLTIPS         (TCM_FIRST + 46)
+#define TCM_GETCURFOCUS         (TCM_FIRST + 47)
+#define TCM_SETCURFOCUS         (TCM_FIRST + 48)
+#define TCM_SETMINTABWIDTH     (TCM_FIRST + 49)
+#define TCM_DESELECTALL         (TCM_FIRST + 50)
+#define TCM_HIGHLIGHTITEM		(TCM_FIRST + 51)
+#define TCM_SETEXTENDEDSTYLE	(TCM_FIRST + 52)
+#define TCM_GETEXTENDEDSTYLE	(TCM_FIRST + 53)
+#define TCM_SETUNICODEFORMAT	CCM_SETUNICODEFORMAT
+#define TCM_GETUNICODEFORMAT	CCM_GETUNICODEFORMAT
+
+
+#define TCIF_TEXT		0x0001
+#define TCIF_IMAGE		0x0002
+#define TCIF_RTLREADING		0x0004
+#define TCIF_PARAM		0x0008
+#define TCIF_STATE		0x0010
+
+#define TCIS_BUTTONPRESSED      0x0001
+#define TCIS_HIGHLIGHTED        0x0002
+
+/* TabCtrl Macros */
+#define TabCtrl_GetImageList(hwnd) \
+    (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, 0)
+#define TabCtrl_SetImageList(hwnd, himl) \
+    (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl))
+#define TabCtrl_GetItemCount(hwnd) \
+    (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, 0)
+#define TabCtrl_GetItemA(hwnd, iItem, pitem) \
+    (BOOL)SNDMSGA((hwnd), TCM_GETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))
+#define TabCtrl_GetItemW(hwnd, iItem, pitem) \
+    (BOOL)SNDMSGW((hwnd), TCM_GETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem))
+#define TabCtrl_GetItem WINELIB_NAME_AW(TabCtrl_GetItem)
+#define TabCtrl_SetItemA(hwnd, iItem, pitem) \
+    (BOOL)SNDMSGA((hwnd), TCM_SETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))
+#define TabCtrl_SetItemW(hwnd, iItem, pitem) \
+    (BOOL)SNDMSGW((hwnd), TCM_SETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem))
+#define TabCtrl_SetItem WINELIB_NAME_AW(TabCtrl_SetItem)
+#define TabCtrl_InsertItemA(hwnd, iItem, pitem)   \
+    (int)SNDMSGA((hwnd), TCM_INSERTITEMA, (WPARAM)(int)iItem, (LPARAM)(const TCITEMA *)(pitem))
+#define TabCtrl_InsertItemW(hwnd, iItem, pitem)   \
+    (int)SNDMSGW((hwnd), TCM_INSERTITEMW, (WPARAM)(int)iItem, (LPARAM)(const TCITEMW *)(pitem))
+#define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem)
+#define TabCtrl_DeleteItem(hwnd, i) \
+    (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0)
+#define TabCtrl_DeleteAllItems(hwnd) \
+    (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, 0)
+#define TabCtrl_GetItemRect(hwnd, i, prc) \
+    (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))
+#define TabCtrl_GetCurSel(hwnd) \
+    (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)
+#define TabCtrl_SetCurSel(hwnd, i) \
+    (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)i, 0)
+#define TabCtrl_HitTest(hwndTC, pinfo) \
+    (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))
+#define TabCtrl_SetItemExtra(hwndTC, cb) \
+    (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0)
+#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \
+    (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc)
+#define TabCtrl_SetItemSize(hwnd, x, y) \
+    (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
+#define TabCtrl_RemoveImage(hwnd, i) \
+    (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, 0)
+#define TabCtrl_SetPadding(hwnd,  cx, cy) \
+    (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
+#define TabCtrl_GetRowCount(hwnd) \
+    (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, 0)
+#define TabCtrl_GetToolTips(hwnd) \
+    (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, 0)
+#define TabCtrl_SetToolTips(hwnd, hwndTT) \
+    (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0)
+#define TabCtrl_GetCurFocus(hwnd) \
+    (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0)
+#define TabCtrl_SetCurFocus(hwnd, i) \
+    SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0)
+#define TabCtrl_SetMinTabWidth(hwnd, x) \
+    (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x)
+#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\
+    (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)
+#define TabCtrl_GetUnicodeFormat(hwnd) \
+    (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0)
+#define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \
+    (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)fUnicode, 0)
+#define TabCtrl_GetExtendedStyle(hwnd) \
+    (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)
+#define TabCtrl_SetExtendedStyle(hwnd, dwExStyle) \
+    (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle)
+#define TabCtrl_HighlightItem(hwnd, i, fHighlight) \
+    (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)i, (LPARAM)MAKELONG(fHighlight, 0))
+
+/* constants for TCHITTESTINFO */
+
+#define TCHT_NOWHERE      0x01
+#define TCHT_ONITEMICON   0x02
+#define TCHT_ONITEMLABEL  0x04
+#define TCHT_ONITEM       (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
+
+typedef struct tagTCITEMHEADERA
+{
+    UINT  mask;
+    UINT  lpReserved1;
+    UINT  lpReserved2;
+    LPSTR pszText;
+    int   cchTextMax;
+    int   iImage;
+} TCITEMHEADERA, *LPTCITEMHEADERA;
+
+typedef struct tagTCITEMHEADERW
+{
+    UINT   mask;
+    UINT   lpReserved1;
+    UINT   lpReserved2;
+    LPWSTR pszText;
+    int    cchTextMax;
+    int    iImage;
+} TCITEMHEADERW, *LPTCITEMHEADERW;
+
+#define TCITEMHEADER    WINELIB_NAME_AW(TCITEMHEADER)
+#define LPTCITEMHEADER  WINELIB_NAME_AW(LPTCITEMHEADER)
+#define TC_ITEMHEADER   WINELIB_NAME_AW(TCITEMHEADER)
+#define LPTC_ITEMHEADER WINELIB_NAME_AW(LPTCITEMHEADER)
+
+typedef struct tagTCITEMA
+{
+    UINT mask;
+    UINT dwState;
+    UINT dwStateMask;
+    LPSTR  pszText;
+    INT  cchTextMax;
+    INT  iImage;
+    LPARAM lParam;
+} TCITEMA, *LPTCITEMA;
+
+typedef struct tagTCITEMW
+{
+    UINT mask;
+    DWORD  dwState;
+    DWORD  dwStateMask;
+    LPWSTR pszText;
+    INT  cchTextMax;
+    INT  iImage;
+    LPARAM lParam;
+} TCITEMW, *LPTCITEMW;
+
+#define TCITEM    WINELIB_NAME_AW(TCITEM)
+#define LPTCITEM  WINELIB_NAME_AW(LPTCITEM)
+#define TC_ITEM   WINELIB_NAME_AW(TCITEM)
+#define LPTC_ITEM WINELIB_NAME_AW(LPTCITEM)
+
+#define TCN_FIRST               (0U-550U)
+#define TCN_LAST                (0U-580U)
+#define TCN_KEYDOWN             (TCN_FIRST - 0)
+#define TCN_SELCHANGE           (TCN_FIRST - 1)
+#define TCN_SELCHANGING         (TCN_FIRST - 2)
+#define TCN_GETOBJECT           (TCN_FIRST - 3)
+#define TCN_FOCUSCHANGE         (TCN_FIRST - 4)
+
+#include <pshpack1.h>
+typedef struct tagTCKEYDOWN
+{
+    NMHDR hdr;
+    WORD wVKey;
+    UINT flags;
+} NMTCKEYDOWN;
+#include <poppack.h>
+
+#define TC_KEYDOWN              NMTCKEYDOWN
+
+/* ComboBoxEx control */
+
+#define WC_COMBOBOXEXA        "ComboBoxEx32"
+#if defined(__GNUC__)
+# define WC_COMBOBOXEXW (const WCHAR []){ 'C','o','m','b','o', \
+  'B','o','x','E','x','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_COMBOBOXEXW       L"ComboBoxEx32"
+#else
+static const WCHAR WC_COMBOBOXEXW[] = { 'C','o','m','b','o',
+  'B','o','x','E','x','3','2',0 };
+#endif
+#define WC_COMBOBOXEX           WINELIB_NAME_AW(WC_COMBOBOXEX)
+
+#define CBEIF_TEXT              0x00000001
+#define CBEIF_IMAGE             0x00000002
+#define CBEIF_SELECTEDIMAGE     0x00000004
+#define CBEIF_OVERLAY           0x00000008
+#define CBEIF_INDENT            0x00000010
+#define CBEIF_LPARAM            0x00000020
+#define CBEIF_DI_SETITEM        0x10000000
+
+#define CBEM_INSERTITEMA        (WM_USER+1)
+#define CBEM_INSERTITEMW        (WM_USER+11)
+#define CBEM_INSERTITEM         WINELIB_NAME_AW(CBEM_INSERTITEM)
+#define CBEM_SETIMAGELIST       (WM_USER+2)
+#define CBEM_GETIMAGELIST       (WM_USER+3)
+#define CBEM_GETITEMA           (WM_USER+4)
+#define CBEM_GETITEMW           (WM_USER+13)
+#define CBEM_GETITEM            WINELIB_NAME_AW(CBEM_GETITEM)
+#define CBEM_SETITEMA           (WM_USER+5)
+#define CBEM_SETITEMW           (WM_USER+12)
+#define CBEM_SETITEM            WINELIB_NAME_AW(CBEM_SETITEM)
+#define CBEM_DELETEITEM         CB_DELETESTRING
+#define CBEM_GETCOMBOCONTROL    (WM_USER+6)
+#define CBEM_GETEDITCONTROL     (WM_USER+7)
+#define CBEM_SETEXSTYLE         (WM_USER+8)
+#define CBEM_GETEXSTYLE         (WM_USER+9)
+#define CBEM_GETEXTENDEDSTYLE   (WM_USER+9)
+#define CBEM_SETEXTENDEDSTYLE   (WM_USER+14)
+#define CBEM_SETUNICODEFORMAT   CCM_SETUNICODEFORMAT
+#define CBEM_GETUNICODEFORMAT   CCM_GETUNICODEFORMAT
+#define CBEM_HASEDITCHANGED     (WM_USER+10)
+#define CBEM_SETWINDOWTHEME     CCM_SETWINDOWTHEME
+
+#define CBEIF_TEXT              0x00000001
+#define CBEIF_IMAGE             0x00000002
+#define CBEIF_SELECTEDIMAGE     0x00000004
+#define CBEIF_OVERLAY           0x00000008
+#define CBEIF_INDENT            0x00000010
+#define CBEIF_LPARAM            0x00000020
+#define CBEIF_DI_SETITEM        0x10000000
+
+#define CBEN_FIRST              (0U-800U)
+#define CBEN_LAST               (0U-830U)
+
+#define CBEN_GETDISPINFOA       (CBEN_FIRST - 0)
+#define CBEN_GETDISPINFOW       (CBEN_FIRST - 7)
+#define CBEN_GETDISPINFO WINELIB_NAME_AW(CBEN_GETDISPINFO)
+#define CBEN_INSERTITEM         (CBEN_FIRST - 1)
+#define CBEN_DELETEITEM         (CBEN_FIRST - 2)
+#define CBEN_BEGINEDIT          (CBEN_FIRST - 4)
+#define CBEN_ENDEDITA           (CBEN_FIRST - 5)
+#define CBEN_ENDEDITW           (CBEN_FIRST - 6)
+#define CBEN_ENDEDIT WINELIB_NAME_AW(CBEN_ENDEDIT)
+#define CBEN_DRAGBEGINA         (CBEN_FIRST - 8)
+#define CBEN_DRAGBEGINW         (CBEN_FIRST - 9)
+#define CBEN_DRAGBEGIN WINELIB_NAME_AW(CBEN_DRAGBEGIN)
+
+#define CBES_EX_NOEDITIMAGE          0x00000001
+#define CBES_EX_NOEDITIMAGEINDENT    0x00000002
+#define CBES_EX_PATHWORDBREAKPROC    0x00000004
+#define CBES_EX_NOSIZELIMIT          0x00000008
+#define CBES_EX_CASESENSITIVE        0x00000010
+
+
+typedef struct tagCOMBOBOXEXITEMA
+{
+    UINT mask;
+    INT_PTR iItem;
+    LPSTR pszText;
+    int cchTextMax;
+    int iImage;
+    int iSelectedImage;
+    int iOverlay;
+    int iIndent;
+    LPARAM lParam;
+} COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA;
+typedef COMBOBOXEXITEMA const *PCCOMBOEXITEMA; /* Yes, there's a BOX missing */
+
+typedef struct tagCOMBOBOXEXITEMW
+{
+    UINT mask;
+    INT_PTR iItem;
+    LPWSTR pszText;
+    int cchTextMax;
+    int iImage;
+    int iSelectedImage;
+    int iOverlay;
+    int iIndent;
+    LPARAM lParam;
+} COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;
+typedef COMBOBOXEXITEMW const *PCCOMBOEXITEMW; /* Yes, there's a BOX missing */
+
+#define COMBOBOXEXITEM WINELIB_NAME_AW(COMBOBOXEXITEM)
+#define PCOMBOBOXEXITEM WINELIB_NAME_AW(PCOMBOBOXEXITEM)
+#define PCCOMBOBOXEXITEM WINELIB_NAME_AW(PCCOMBOEXITEM) /* Yes, there's a BOX missing */
+
+#define CBENF_KILLFOCUS               1
+#define CBENF_RETURN                  2
+#define CBENF_ESCAPE                  3
+#define CBENF_DROPDOWN                4
+
+#define CBEMAXSTRLEN 260
+
+typedef struct tagNMCBEENDEDITW
+{
+    NMHDR hdr;
+    BOOL fChanged;
+    int iNewSelection;
+    WCHAR szText[CBEMAXSTRLEN];
+    int iWhy;
+} NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW;
+
+typedef struct tagNMCBEENDEDITA
+{
+    NMHDR hdr;
+    BOOL fChanged;
+    int iNewSelection;
+    char szText[CBEMAXSTRLEN];
+    int iWhy;
+} NMCBEENDEDITA, *LPNMCBEENDEDITA, *PNMCBEENDEDITA;
+
+#define NMCBEENDEDIT WINELIB_NAME_AW(NMCBEENDEDIT)
+#define LPNMCBEENDEDIT WINELIB_NAME_AW(LPNMCBEENDEDIT)
+#define PNMCBEENDEDIT WINELIB_NAME_AW(PNMCBEENDEDIT)
+
+typedef struct
+{
+    NMHDR hdr;
+    COMBOBOXEXITEMA ceItem;
+} NMCOMBOBOXEXA, *PNMCOMBOBOXEXA;
+
+typedef struct
+{
+    NMHDR hdr;
+    COMBOBOXEXITEMW ceItem;
+} NMCOMBOBOXEXW, *PNMCOMBOBOXEXW;
+
+#define NMCOMBOBOXEX WINELIB_NAME_AW(NMCOMBOBOXEX)
+#define PNMCOMBOBOXEX WINELIB_NAME_AW(PNMCOMBOBOXEX)
+
+typedef struct
+{
+    NMHDR hdr;
+    int iItemid;
+    char szText[CBEMAXSTRLEN];
+} NMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA;
+
+typedef struct
+{
+    NMHDR hdr;
+    int iItemid;
+    WCHAR szText[CBEMAXSTRLEN];
+} NMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW;
+
+#define NMCBEDRAGBEGIN WINELIB_NAME_AW(NMCBEDRAGBEGIN)
+#define PNMCBEDRAGBEGIN WINELIB_NAME_AW(PNMCBEDRAGBEGIN)
+#define LPNMCBEDRAGBEGIN WINELIB_NAME_AW(LPNMCBEDRAGBEGIN)
+
+
+/* Hotkey control */
+
+#define HOTKEY_CLASSA           "msctls_hotkey32"
+#if defined(__GNUC__)
+# define HOTKEY_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+  'h','o','t','k','e','y','3','2',0 }
+#elif defined(_MSC_VER)
+# define HOTKEY_CLASSW          L"msctls_hotkey32"
+#else
+static const WCHAR HOTKEY_CLASSW[] = { 'm','s','c','t','l','s','_',
+  'h','o','t','k','e','y','3','2',0 };
+#endif
+#define HOTKEY_CLASS            WINELIB_NAME_AW(HOTKEY_CLASS)
+
+#define HOTKEYF_SHIFT           0x01
+#define HOTKEYF_CONTROL         0x02
+#define HOTKEYF_ALT             0x04
+#define HOTKEYF_EXT             0x08
+
+#define HKCOMB_NONE             0x0001
+#define HKCOMB_S                0x0002
+#define HKCOMB_C                0x0004
+#define HKCOMB_A                0x0008
+#define HKCOMB_SC               0x0010
+#define HKCOMB_SA               0x0020
+#define HKCOMB_CA               0x0040
+#define HKCOMB_SCA              0x0080
+
+#define HKM_SETHOTKEY           (WM_USER+1)
+#define HKM_GETHOTKEY           (WM_USER+2)
+#define HKM_SETRULES            (WM_USER+3)
+
+
+/* animate control */
+
+#define ANIMATE_CLASSA        "SysAnimate32"
+#if defined(__GNUC__)
+# define ANIMATE_CLASSW (const WCHAR []){ 'S','y','s', \
+  'A','n','i','m','a','t','e','3','2',0 }
+#elif defined(_MSC_VER)
+# define ANIMATE_CLASSW       L"SysAnimate32"
+#else
+static const WCHAR ANIMATE_CLASSW[] = { 'S','y','s',
+  'A','n','i','m','a','t','e','3','2',0 };
+#endif
+#define ANIMATE_CLASS           WINELIB_NAME_AW(ANIMATE_CLASS)
+
+
+#define ACM_OPENA               (WM_USER+100)
+#define ACM_OPENW               (WM_USER+103)
+#define ACM_OPEN                WINELIB_NAME_AW(ACM_OPEN)
+#define ACM_PLAY                (WM_USER+101)
+#define ACM_STOP                (WM_USER+102)
+
+#define ACN_START               1
+#define ACN_STOP                2
+
+#define Animate_CreateA(hwndP,id,dwStyle,hInstance) \
+    CreateWindowA(ANIMATE_CLASSA,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)
+#define Animate_CreateW(hwndP,id,dwStyle,hInstance) \
+    CreateWindowW(ANIMATE_CLASSW,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)
+#define Animate_Create WINELIB_NAME_AW(Animate_Create)
+#define Animate_OpenA(hwnd,szName) \
+    (BOOL)SNDMSGA(hwnd,ACM_OPENA,0,(LPARAM)(LPSTR)(szName))
+#define Animate_OpenW(hwnd,szName) \
+    (BOOL)SNDMSGW(hwnd,ACM_OPENW,0,(LPARAM)(LPWSTR)(szName))
+#define Animate_Open WINELIB_NAME_AW(Animate_Open)
+#define Animate_OpenExA(hwnd,hInst,szName) \
+    (BOOL)SNDMSGA(hwnd,ACM_OPENA,(WPARAM)hInst,(LPARAM)(LPSTR)(szName))
+#define Animate_OpenExW(hwnd,hInst,szName) \
+    (BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName))
+#define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx)
+#define Animate_Play(hwnd,from,to,rep) \
+    (BOOL)SNDMSG(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to))
+#define Animate_Stop(hwnd) \
+    (BOOL)SNDMSG(hwnd,ACM_STOP,0,0)
+#define Animate_Close(hwnd) \
+    (BOOL)SNDMSG(hwnd,ACM_OPENA,0,0)
+#define Animate_Seek(hwnd,frame) \
+    (BOOL)SNDMSG(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame))
+
+
+/**************************************************************************
+ * IP Address control
+ */
+
+#define WC_IPADDRESSA		"SysIPAddress32"
+#if defined(__GNUC__)
+# define WC_IPADDRESSW (const WCHAR []){ 'S','y','s', \
+  'I','P','A','d','d','r','e','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_IPADDRESSW          L"SysIPAddress32"
+#else
+static const WCHAR WC_IPADDRESSW[] = { 'S','y','s',
+  'I','P','A','d','d','r','e','s','s','3','2',0 };
+#endif
+#define WC_IPADDRESS		WINELIB_NAME_AW(WC_IPADDRESS)
+
+#define IPM_CLEARADDRESS	(WM_USER+100)
+#define IPM_SETADDRESS		(WM_USER+101)
+#define IPM_GETADDRESS		(WM_USER+102)
+#define IPM_SETRANGE		(WM_USER+103)
+#define IPM_SETFOCUS		(WM_USER+104)
+#define IPM_ISBLANK		(WM_USER+105)
+
+#define IPN_FIRST               (0U-860U)
+#define IPN_LAST                (0U-879U)
+#define IPN_FIELDCHANGED        (IPN_FIRST-0)
+
+typedef struct tagNMIPADDRESS
+{
+    NMHDR hdr;
+    INT iField;
+    INT iValue;
+} NMIPADDRESS, *LPNMIPADDRESS;
+
+#define MAKEIPRANGE(low,high) \
+    ((LPARAM)(WORD)(((BYTE)(high)<<8)+(BYTE)(low)))
+#define MAKEIPADDRESS(b1,b2,b3,b4) \
+    ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
+
+#define FIRST_IPADDRESS(x)	(((x)>>24)&0xff)
+#define SECOND_IPADDRESS(x)	(((x)>>16)&0xff)
+#define THIRD_IPADDRESS(x)	(((x)>>8)&0xff)
+#define FOURTH_IPADDRESS(x)	((x)&0xff)
+
+
+/**************************************************************************
+ * Native Font control
+ */
+
+#define WC_NATIVEFONTCTLA	"NativeFontCtl"
+#if defined(__GNUC__)
+# define WC_NATIVEFONTCTLW (const WCHAR []){ 'N','a','t','i','v','e', \
+  'F','o','n','t','C','t','l',0 }
+#elif defined(_MSC_VER)
+# define WC_NATIVEFONTCTLW      L"NativeFontCtl"
+#else
+static const WCHAR WC_NATIVEFONTCTLW[] = { 'N','a','t','i','v','e',
+  'F','o','n','t','C','t','l',0 };
+#endif
+#define WC_NATIVEFONTCTL	WINELIB_NAME_AW(WC_NATIVEFONTCTL)
+
+
+/**************************************************************************
+ * Month calendar control
+ *
+ */
+
+#define MONTHCAL_CLASSA	"SysMonthCal32"
+#if defined(__GNUC__)
+# define MONTHCAL_CLASSW (const WCHAR []){ 'S','y','s', \
+  'M','o','n','t','h','C','a','l','3','2',0 }
+#elif defined(_MSC_VER)
+# define MONTHCAL_CLASSW L"SysMonthCal32"
+#else
+static const WCHAR MONTHCAL_CLASSW[] = { 'S','y','s',
+  'M','o','n','t','h','C','a','l','3','2',0 };
+#endif
+#define MONTHCAL_CLASS		WINELIB_NAME_AW(MONTHCAL_CLASS)
+
+#define MCM_FIRST             0x1000
+#define MCN_FIRST             (0U-750U)
+#define MCN_LAST              (0U-759U)
+
+
+#define MCM_GETCURSEL         (MCM_FIRST + 1)
+#define MCM_SETCURSEL         (MCM_FIRST + 2)
+#define MCM_GETMAXSELCOUNT    (MCM_FIRST + 3)
+#define MCM_SETMAXSELCOUNT    (MCM_FIRST + 4)
+#define MCM_GETSELRANGE       (MCM_FIRST + 5)
+#define MCM_SETSELRANGE       (MCM_FIRST + 6)
+#define MCM_GETMONTHRANGE     (MCM_FIRST + 7)
+#define MCM_SETDAYSTATE       (MCM_FIRST + 8)
+#define MCM_GETMINREQRECT     (MCM_FIRST + 9)
+#define MCM_SETCOLOR          (MCM_FIRST + 10)
+#define MCM_GETCOLOR          (MCM_FIRST + 11)
+#define MCM_SETTODAY          (MCM_FIRST + 12)
+#define MCM_GETTODAY          (MCM_FIRST + 13)
+#define MCM_HITTEST           (MCM_FIRST + 14)
+#define MCM_SETFIRSTDAYOFWEEK (MCM_FIRST + 15)
+#define MCM_GETFIRSTDAYOFWEEK (MCM_FIRST + 16)
+#define MCM_GETRANGE          (MCM_FIRST + 17)
+#define MCM_SETRANGE          (MCM_FIRST + 18)
+#define MCM_GETMONTHDELTA     (MCM_FIRST + 19)
+#define MCM_SETMONTHDELTA     (MCM_FIRST + 20)
+#define MCM_GETMAXTODAYWIDTH  (MCM_FIRST + 21)
+#define MCM_GETCALENDARCOUNT  (MCM_FIRST + 23)
+#define MCM_SIZERECTTOMIN     (MCM_FIRST + 29)
+#define MCM_SETCALENDARBORDER (MCM_FIRST + 30)
+#define MCM_GETCALENDARBORDER (MCM_FIRST + 31)
+#define MCM_GETUNICODEFORMAT  CCM_GETUNICODEFORMAT
+#define MCM_SETUNICODEFORMAT  CCM_SETUNICODEFORMAT
+
+
+/* Notifications */
+
+#define MCN_SELCHANGE         (MCN_FIRST + 1)
+#define MCN_GETDAYSTATE       (MCN_FIRST + 3)
+#define MCN_SELECT            (MCN_FIRST + 4)
+
+#define MCSC_BACKGROUND   0
+#define MCSC_TEXT         1
+#define MCSC_TITLEBK      2
+#define MCSC_TITLETEXT    3
+#define MCSC_MONTHBK      4
+#define MCSC_TRAILINGTEXT 5
+
+
+#define MCHT_TITLE             0x00010000
+#define MCHT_CALENDAR          0x00020000
+#define MCHT_TODAYLINK         0x00030000
+
+#define MCHT_NEXT              0x01000000
+#define MCHT_PREV              0x02000000
+#define MCHT_NOWHERE           0x00000000
+#define MCHT_TITLEBK           (MCHT_TITLE)
+#define MCHT_TITLEMONTH        (MCHT_TITLE | 0x0001)
+#define MCHT_TITLEYEAR         (MCHT_TITLE | 0x0002)
+#define MCHT_TITLEBTNNEXT      (MCHT_TITLE | MCHT_NEXT | 0x0003)
+#define MCHT_TITLEBTNPREV      (MCHT_TITLE | MCHT_PREV | 0x0003)
+
+#define MCHT_CALENDARBK        (MCHT_CALENDAR)
+#define MCHT_CALENDARDATE      (MCHT_CALENDAR | 0x0001)
+#define MCHT_CALENDARDATENEXT  (MCHT_CALENDARDATE | MCHT_NEXT)
+#define MCHT_CALENDARDATEPREV  (MCHT_CALENDARDATE | MCHT_PREV)
+#define MCHT_CALENDARDAY       (MCHT_CALENDAR | 0x0002)
+#define MCHT_CALENDARWEEKNUM   (MCHT_CALENDAR | 0x0003)
+
+
+
+#define GMR_VISIBLE     0
+#define GMR_DAYSTATE    1
+
+
+/*  Month calendar's structures */
+
+
+typedef struct {
+        UINT cbSize;
+        POINT pt;
+        UINT uHit;
+        SYSTEMTIME st;
+        /* Vista */
+        RECT rc;
+        INT iOffset;
+        INT iRow;
+        INT iCol;
+} MCHITTESTINFO, *PMCHITTESTINFO;
+
+#define MCHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(MCHITTESTINFO, st)
+
+typedef struct tagNMSELCHANGE
+{
+    NMHDR           nmhdr;
+    SYSTEMTIME      stSelStart;
+    SYSTEMTIME      stSelEnd;
+} NMSELCHANGE, *LPNMSELCHANGE;
+
+typedef NMSELCHANGE NMSELECT, *LPNMSELECT;
+typedef DWORD MONTHDAYSTATE, *LPMONTHDAYSTATE;
+
+typedef struct tagNMDAYSTATE
+{
+    NMHDR           nmhdr;
+    SYSTEMTIME      stStart;
+    int             cDayState;
+    LPMONTHDAYSTATE prgDayState;
+} NMDAYSTATE, *LPNMDAYSTATE;
+
+
+/* macros */
+
+#define MonthCal_GetCurSel(hmc, pst) \
+		(BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))
+#define MonthCal_SetCurSel(hmc, pst)  \
+		(BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))
+#define MonthCal_GetMaxSelCount(hmc) \
+                (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0)
+#define MonthCal_SetMaxSelCount(hmc, n) \
+                (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0)
+#define MonthCal_GetSelRange(hmc, rgst) \
+		SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM) (rgst))
+#define MonthCal_SetSelRange(hmc, rgst) \
+		SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM) (rgst))
+#define MonthCal_GetMonthRange(hmc, gmr, rgst) \
+		(DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst))
+#define MonthCal_SetDayState(hmc, cbds, rgds) \
+		SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds))
+#define MonthCal_GetMinReqRect(hmc, prc) \
+		SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc))
+#define MonthCal_SetColor(hmc, iColor, clr)\
+        SNDMSG(hmc, MCM_SETCOLOR, iColor, clr)
+#define MonthCal_GetColor(hmc, iColor) \
+		SNDMSG(hmc, MCM_SETCOLOR, iColor, 0)
+#define MonthCal_GetToday(hmc, pst)\
+		(BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)pst)
+#define MonthCal_SetToday(hmc, pst)\
+		SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)pst)
+#define MonthCal_HitTest(hmc, pinfo) \
+        SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)pinfo)
+#define MonthCal_SetFirstDayOfWeek(hmc, iDay) \
+        SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay)
+#define MonthCal_GetFirstDayOfWeek(hmc) \
+        (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0)
+#define MonthCal_GetRange(hmc, rgst) \
+        (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst))
+#define MonthCal_SetRange(hmc, gd, rgst) \
+        (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+#define MonthCal_GetMonthDelta(hmc) \
+        (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0)
+#define MonthCal_SetMonthDelta(hmc, n) \
+        (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0)
+#define MonthCal_GetMaxTodayWidth(hmc) \
+        (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0)
+#define MonthCal_SetUnicodeFormat(hwnd, fUnicode)  \
+        (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+#define MonthCal_GetUnicodeFormat(hwnd)  \
+        (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0)
+
+
+/**************************************************************************
+ * Date and time picker control
+ */
+
+#define DATETIMEPICK_CLASSA	"SysDateTimePick32"
+#if defined(__GNUC__)
+# define DATETIMEPICK_CLASSW (const WCHAR []){ 'S','y','s', \
+  'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 }
+#elif defined(_MSC_VER)
+# define DATETIMEPICK_CLASSW    L"SysDateTimePick32"
+#else
+static const WCHAR DATETIMEPICK_CLASSW[] = { 'S','y','s',
+  'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 };
+#endif
+#define DATETIMEPICK_CLASS	WINELIB_NAME_AW(DATETIMEPICK_CLASS)
+
+#define DTM_FIRST        0x1000
+#define DTN_FIRST       (0U-760U)
+#define DTN_LAST        (0U-799U)
+
+
+#define DTM_GETSYSTEMTIME	(DTM_FIRST+1)
+#define DTM_SETSYSTEMTIME	(DTM_FIRST+2)
+#define DTM_GETRANGE		(DTM_FIRST+3)
+#define DTM_SETRANGE		(DTM_FIRST+4)
+#define DTM_SETFORMATA	        (DTM_FIRST+5)
+#define DTM_SETFORMATW	        (DTM_FIRST + 50)
+#define DTM_SETFORMAT		WINELIB_NAME_AW(DTM_SETFORMAT)
+#define DTM_SETMCCOLOR		(DTM_FIRST+6)
+#define DTM_GETMCCOLOR		(DTM_FIRST+7)
+#define DTM_GETMONTHCAL		(DTM_FIRST+8)
+#define DTM_SETMCFONT		(DTM_FIRST+9)
+#define DTM_GETMCFONT		(DTM_FIRST+10)
+
+
+/* Datetime Notifications */
+
+#define DTN_DATETIMECHANGE  (DTN_FIRST + 1)
+#define DTN_USERSTRINGA     (DTN_FIRST + 2)
+#define DTN_WMKEYDOWNA      (DTN_FIRST + 3)
+#define DTN_FORMATA         (DTN_FIRST + 4)
+#define DTN_FORMATQUERYA    (DTN_FIRST + 5)
+#define DTN_DROPDOWN        (DTN_FIRST + 6)
+#define DTN_CLOSEUP         (DTN_FIRST + 7)
+#define DTN_USERSTRINGW     (DTN_FIRST + 15)
+#define DTN_WMKEYDOWNW      (DTN_FIRST + 16)
+#define DTN_FORMATW         (DTN_FIRST + 17)
+#define DTN_FORMATQUERYW    (DTN_FIRST + 18)
+
+#define DTN_USERSTRING      WINELIB_NAME_AW(DTN_USERSTRING)
+#define DTN_WMKEYDOWN       WINELIB_NAME_AW(DTN_WMKEYDOWN)
+#define DTN_FORMAT          WINELIB_NAME_AW(DTN_FORMAT)
+#define DTN_FORMATQUERY     WINELIB_NAME_AW(DTN_FORMATQUERY)
+
+
+typedef struct tagNMDATETIMECHANGE
+{
+    NMHDR       nmhdr;
+    DWORD       dwFlags;
+    SYSTEMTIME  st;
+} NMDATETIMECHANGE, *LPNMDATETIMECHANGE;
+
+typedef struct tagNMDATETIMESTRINGA
+{
+    NMHDR      nmhdr;
+    LPCSTR     pszUserString;
+    SYSTEMTIME st;
+    DWORD      dwFlags;
+} NMDATETIMESTRINGA, *LPNMDATETIMESTRINGA;
+
+typedef struct tagNMDATETIMESTRINGW
+{
+    NMHDR      nmhdr;
+    LPCWSTR    pszUserString;
+    SYSTEMTIME st;
+    DWORD      dwFlags;
+} NMDATETIMESTRINGW, *LPNMDATETIMESTRINGW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMESTRING)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMESTRING)
+
+typedef struct tagNMDATETIMEWMKEYDOWNA
+{
+    NMHDR      nmhdr;
+    int        nVirtKey;
+    LPCSTR     pszFormat;
+    SYSTEMTIME st;
+} NMDATETIMEWMKEYDOWNA, *LPNMDATETIMEWMKEYDOWNA;
+
+typedef struct tagNMDATETIMEWMKEYDOWNW
+{
+    NMHDR      nmhdr;
+    int        nVirtKey;
+    LPCWSTR    pszFormat;
+    SYSTEMTIME st;
+} NMDATETIMEWMKEYDOWNW, *LPNMDATETIMEWMKEYDOWNW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMEWMKEYDOWN)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMEWMKEYDOWN)
+
+typedef struct tagNMDATETIMEFORMATA
+{
+    NMHDR nmhdr;
+    LPCSTR  pszFormat;
+    SYSTEMTIME st;
+    LPCSTR pszDisplay;
+    CHAR szDisplay[64];
+} NMDATETIMEFORMATA, *LPNMDATETIMEFORMATA;
+
+
+typedef struct tagNMDATETIMEFORMATW
+{
+    NMHDR nmhdr;
+    LPCWSTR pszFormat;
+    SYSTEMTIME st;
+    LPCWSTR pszDisplay;
+    WCHAR szDisplay[64];
+} NMDATETIMEFORMATW, *LPNMDATETIMEFORMATW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMEFORMAT)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMAT)
+
+typedef struct tagNMDATETIMEFORMATQUERYA
+{
+    NMHDR nmhdr;
+    LPCSTR pszFormat;
+    SIZE szMax;
+} NMDATETIMEFORMATQUERYA, *LPNMDATETIMEFORMATQUERYA;
+
+typedef struct tagNMDATETIMEFORMATQUERYW
+{
+    NMHDR nmhdr;
+    LPCWSTR pszFormat;
+    SIZE szMax;
+} NMDATETIMEFORMATQUERYW, *LPNMDATETIMEFORMATQUERYW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMEFORMATQUERY)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMATQUERY)
+
+
+
+#define GDT_ERROR    -1
+#define GDT_VALID    0
+#define GDT_NONE     1
+
+#define GDTR_MIN     0x0001
+#define GDTR_MAX     0x0002
+
+
+#define DateTime_GetSystemtime(hdp, pst)   \
+  (DWORD)SNDMSG (hdp, DTM_GETSYSTEMTIME , 0, (LPARAM)(pst))
+#define DateTime_SetSystemtime(hdp, gd, pst)   \
+  (BOOL)SNDMSG (hdp, DTM_SETSYSTEMTIME, (LPARAM)(gd), (LPARAM)(pst))
+#define DateTime_GetRange(hdp, rgst)  \
+  (DWORD)SNDMSG (hdp, DTM_GETRANGE, 0, (LPARAM)(rgst))
+#define DateTime_SetRange(hdp, gd, rgst) \
+   (BOOL)SNDMSG (hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+#define DateTime_SetFormatA(hdp, sz)  \
+  (BOOL)SNDMSGA (hdp, DTM_SETFORMATA, 0, (LPARAM)(sz))
+#define DateTime_SetFormatW(hdp, sz)  \
+  (BOOL)SNDMSGW (hdp, DTM_SETFORMATW, 0, (LPARAM)(sz))
+#define DateTime_SetFormat WINELIB_NAME_AW(DateTime_SetFormat)
+#define DateTime_GetMonthCalColor(hdp, iColor) \
+  SNDMSG (hdp, DTM_GETMCCOLOR, iColor, 0)
+#define DateTime_SetMonthCalColor(hdp, iColor, clr) \
+  SNDMSG (hdp, DTM_SETMCCOLOR, iColor, clr)
+#define DateTime_GetMonthCal(hdp)  \
+  (HWND) SNDMSG (hdp, DTM_GETMONTHCAL, 0, 0)
+#define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) \
+  SNDMSG (hdp, DTM_SETMCFONT, (WPARAM)hfont, (LPARAM)fRedraw)
+#define DateTime_GetMonthCalFont(hdp) \
+  SNDMSG (hdp, DTM_GETMCFONT, 0, 0)
+
+#define DA_LAST         (0x7fffffff)
+#define DPA_APPEND      (0x7fffffff)
+#define DPA_ERR         (-1)
+
+#define DSA_APPEND      (0x7fffffff)
+#define DSA_ERR         (-1)
+
+struct _DSA;
+typedef struct _DSA *HDSA;
+
+typedef INT (CALLBACK *PFNDSAENUMCALLBACK)(LPVOID, LPVOID);
+
+HDSA   WINAPI DSA_Create(INT, INT);
+BOOL   WINAPI DSA_Destroy(HDSA);
+void   WINAPI DSA_DestroyCallback(HDSA, PFNDSAENUMCALLBACK, LPVOID);
+LPVOID WINAPI DSA_GetItemPtr(HDSA, INT);
+INT    WINAPI DSA_InsertItem(HDSA, INT, LPVOID);
+
+#define DPAS_SORTED             0x0001
+#define DPAS_INSERTBEFORE       0x0002
+#define DPAS_INSERTAFTER        0x0004
+
+
+struct _DPA;
+typedef struct _DPA *HDPA;
+
+#define DPA_GetPtrCount(hdpa)  (*(INT*)(hdpa))
+
+typedef INT (CALLBACK *PFNDPAENUMCALLBACK)(LPVOID, LPVOID);
+typedef INT (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);
+typedef PVOID (CALLBACK *PFNDPAMERGE)(UINT,PVOID,PVOID,LPARAM);
+
+/* merge callback codes */
+#define DPAMM_MERGE     1
+#define DPAMM_DELETE    2
+#define DPAMM_INSERT    3
+
+/* merge options */
+#define DPAM_SORTED     0x00000001
+#define DPAM_NORMAL     0x00000002
+#define DPAM_UNION      0x00000004
+#define DPAM_INTERSECT  0x00000008
+
+HDPA   WINAPI DPA_Create(INT);
+BOOL   WINAPI DPA_Destroy(HDPA);
+LPVOID WINAPI DPA_DeletePtr(HDPA, INT);
+BOOL   WINAPI DPA_DeleteAllPtrs(HDPA);
+BOOL   WINAPI DPA_SetPtr(HDPA, INT, LPVOID);
+LPVOID WINAPI DPA_GetPtr(HDPA, INT);
+INT    WINAPI DPA_GetPtrIndex(HDPA, LPCVOID);
+ULONGLONG WINAPI DPA_GetSize(HDPA);
+BOOL   WINAPI DPA_Grow(HDPA, INT);
+INT    WINAPI DPA_InsertPtr(HDPA, INT, LPVOID);
+BOOL   WINAPI DPA_Sort(HDPA, PFNDPACOMPARE, LPARAM);
+void   WINAPI DPA_EnumCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID);
+void   WINAPI DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID);
+INT    WINAPI DPA_Search(HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT);
+BOOL   WINAPI DPA_Merge(HDPA, HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM);
+
+/* save/load from stream */
+typedef struct _DPASTREAMINFO
+{
+    INT    iPos;   /* item index */
+    LPVOID pvItem;
+} DPASTREAMINFO;
+
+struct IStream;
+typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, LPVOID);
+
+HRESULT WINAPI DPA_LoadStream(HDPA*, PFNDPASTREAM, struct IStream*, LPVOID);
+HRESULT WINAPI DPA_SaveStream(HDPA, PFNDPASTREAM, struct IStream*, LPVOID);
+
+BOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR);
+
+/**************************************************************************
+ * SysLink control
+ */
+
+#if defined(__GNUC__)
+# define WC_LINK (const WCHAR []){ 'S','y','s','L','i','n','k',0 }
+#elif defined(_MSC_VER)
+# define WC_LINK             L"SysLink"
+#else
+static const WCHAR WC_LINK[] = { 'S','y','s','L','i','n','k',0 };
+#endif
+
+/* SysLink styles */
+#define LWS_TRANSPARENT      0x0001
+#define LWS_IGNORERETURN     0x0002
+#define LWS_NOPREFIX         0x0004
+#define LWS_USEVISUALSTYLE   0x0008
+#define LWS_USECUSTOMTEXT    0x0010
+#define LWS_RIGHT            0x0020
+
+/* SysLink messages */
+#define LM_HITTEST           (WM_USER + 768)
+#define LM_GETIDEALHEIGHT    (WM_USER + 769)
+#define LM_GETIDEALSIZE      (LM_GETIDEALHEIGHT)
+#define LM_SETITEM           (WM_USER + 770)
+#define LM_GETITEM           (WM_USER + 771)
+
+/* SysLink links flags */
+
+#define LIF_ITEMINDEX   1
+#define LIF_STATE       2
+#define LIF_ITEMID      4
+#define LIF_URL         8
+
+/* SysLink links states */
+
+#define LIS_FOCUSED          0x0001
+#define LIS_ENABLED          0x0002
+#define LIS_VISITED          0x0004
+#define LIS_HOTTRACK         0x0008
+#define LIS_DEFAULTCOLORS    0x0010
+
+/* SysLink misc. */
+
+#define INVALID_LINK_INDEX  (-1)
+#define MAX_LINKID_TEXT     48
+#define L_MAX_URL_LENGTH    2084
+
+/* SysLink structures */
+
+typedef struct tagLITEM
+{
+  UINT mask;
+  int iLink;
+  UINT state;
+  UINT stateMask;
+  WCHAR szID[MAX_LINKID_TEXT];
+  WCHAR szUrl[L_MAX_URL_LENGTH];
+} LITEM, *PLITEM;
+
+typedef struct tagLHITTESTINFO
+{
+  POINT pt;
+  LITEM item;
+} LHITTESTINFO, *PLHITTESTINFO;
+
+typedef struct tagNMLINK
+{
+  NMHDR hdr;
+  LITEM item;
+} NMLINK, *PNMLINK;
+
+typedef struct tagNMLVLINK
+{
+    NMHDR hdr;
+    LITEM link;
+    int iItem;
+    int iSubItem;
+} NMLVLINK, *PNMLVLINK;
+
+/**************************************************************************
+ * Static control
+ */
+
+#define WC_STATICA		"Static"
+#if defined(__GNUC__)
+# define WC_STATICW 		(const WCHAR []){ 'S','t','a','t','i','c',0 }
+#elif defined(_MSC_VER)
+# define WC_STATICW 		L"Static"
+#else
+static const WCHAR WC_STATICW[] = { 'S','t','a','t','i','c',0 };
+#endif
+#define WC_STATIC		WINELIB_NAME_AW(WC_STATIC)
+
+/**************************************************************************
+ * Combobox control
+ */
+
+#define WC_COMBOBOXA              "ComboBox"
+#if defined(__GNUC__)
+# define WC_COMBOBOXW             (const WCHAR []){ 'C','o','m','b','o','B','o','x',0 }
+#elif defined(_MSC_VER)
+# define WC_COMBOBOXW             L"ComboBox"
+#else
+static const WCHAR WC_COMBOBOXW[] = { 'C','o','m','b','o','B','o','x',0 };
+#endif
+#define WC_COMBOBOX               WINELIB_NAME_AW(WC_COMBOBOX)
+
+/**************************************************************************
+ * Edit control
+ */
+
+#define WC_EDITA                  "Edit"
+#if defined(__GNUC__)
+# define WC_EDITW                 (const WCHAR []){ 'E','d','i','t',0 }
+#elif defined(_MSC_VER)
+# define WC_EDITW                 L"Edit"
+#else
+static const WCHAR WC_EDITW[] = { 'E','d','i','t',0 };
+#endif
+#define WC_EDIT                   WINELIB_NAME_AW(WC_EDIT)
+
+/**************************************************************************
+ * Listbox control
+ */
+
+#define WC_LISTBOXA               "ListBox"
+#if defined(__GNUC__)
+# define WC_LISTBOXW              (const WCHAR []){ 'L','i','s','t','B','o','x',0 }
+#elif defined(_MSC_VER)
+# define WC_LISTBOXW              L"ListBox"
+#else
+static const WCHAR WC_LISTBOXW[] = { 'L','i','s','t','B','o','x',0 };
+#endif
+#define WC_LISTBOX                WINELIB_NAME_AW(WC_LISTBOX)
+
+/**************************************************************************
+ * Scrollbar control
+ */
+
+#define WC_SCROLLBARA             "ScrollBar"
+#if defined(__GNUC__)
+# define WC_SCROLLBARW            (const WCHAR []){ 'S','c','r','o','l','l','B','a','r',0 }
+#elif defined(_MSC_VER)
+# define WC_SCROLLBARW            L"ScrollBar"
+#else
+static const WCHAR WC_SCROLLBARW[] = { 'S','c','r','o','l','l','B','a','r',0 };
+#endif
+#define WC_SCROLLBAR              WINELIB_NAME_AW(WC_SCROLLBAR)
+
+/**************************************************************************
+ * Task dialog
+ */
+
+#ifndef NOTASKDIALOG
+
+#include <pshpack1.h>
+
+enum _TASKDIALOG_FLAGS
+{
+    TDF_ENABLE_HYPERLINKS           = 0x0001,
+    TDF_USE_HICON_MAIN              = 0x0002,
+    TDF_USE_HICON_FOOTER            = 0x0004,
+    TDF_ALLOW_DIALOG_CANCELLATION   = 0x0008,
+    TDF_USE_COMMAND_LINKS           = 0x0010,
+    TDF_USE_COMMAND_LINKS_NO_ICON   = 0x0020,
+    TDF_EXPAND_FOOTER_AREA          = 0x0040,
+    TDF_EXPANDED_BY_DEFAULT         = 0x0080,
+    TDF_VERIFICATION_FLAG_CHECKED   = 0x0100,
+    TDF_SHOW_PROGRESS_BAR           = 0x0200,
+    TDF_SHOW_MARQUEE_PROGRESS_BAR   = 0x0400,
+    TDF_CALLBACK_TIMER              = 0x0800,
+    TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,
+    TDF_RTL_LAYOUT                  = 0x2000,
+    TDF_NO_DEFAULT_RADIO_BUTTON     = 0x4000,
+    TDF_CAN_BE_MINIMIZED            = 0x8000
+};
+typedef int TASKDIALOG_FLAGS;
+
+enum _TASKDIALOG_COMMON_BUTTON_FLAGS
+{
+    TDCBF_OK_BUTTON     = 0x0001,
+    TDCBF_YES_BUTTON    = 0x0002,
+    TDCBF_NO_BUTTON     = 0x0004,
+    TDCBF_CANCEL_BUTTON = 0x0008,
+    TDCBF_RETRY_BUTTON  = 0x0010,
+    TDCBF_CLOSE_BUTTON  = 0x0020
+};
+typedef int TASKDIALOG_COMMON_BUTTON_FLAGS;
+
+typedef struct _TASKDIALOG_BUTTON
+{
+    int     nButtonID;
+    PCWSTR  pszButtonText;
+} TASKDIALOG_BUTTON;
+
+typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR);
+
+typedef struct _TASKDIALOGCONFIG
+{
+    UINT        cbSize;
+    HWND        hwndParent;
+    HINSTANCE   hInstance;
+    TASKDIALOG_FLAGS    dwFlags;
+    TASKDIALOG_COMMON_BUTTON_FLAGS  dwCommonButtons;
+    PCWSTR      pszWindowTitle;
+    union
+    {
+        HICON   hMainIcon;
+        PCWSTR  pszMainIcon;
+    } DUMMYUNIONNAME;
+    PCWSTR      pszMainInstruction;
+    PCWSTR      pszContent;
+    UINT        cButtons;
+    const TASKDIALOG_BUTTON *pButtons;
+    int         nDefaultButton;
+    UINT        cRadioButtons;
+    const TASKDIALOG_BUTTON *pRadioButtons;
+    int         nDefaultRadioButton;
+    PCWSTR      pszVerificationText;
+    PCWSTR      pszExpandedInformation;
+    PCWSTR      pszExpandedControlText;
+    PCWSTR      pszCollapsedControlText;
+    union
+    {
+        HICON   hFooterIcon;
+        PCWSTR  pszFooterIcon;
+    } DUMMYUNIONNAME2;
+    PCWSTR      pszFooter;
+    PFTASKDIALOGCALLBACK pfCallback;
+    LONG_PTR    lpCallbackData;
+    UINT        cxWidth;
+} TASKDIALOGCONFIG;
+
+HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *);
+
+#include <poppack.h>
+
+#endif /* NOTASKDIALOG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_COMMCTRL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
new file mode 100644
index 0000000..863e141
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2008 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+#  define __MSABI_LONG(x)         x ## l
+# else
+#  define __MSABI_LONG(x)         x
+# endif
+#endif
+
+/* Header Control */
+#define HDS_HORZ            0x0000
+#define HDS_BUTTONS         0x0002
+#define HDS_HOTTRACK        0x0004
+#define HDS_HIDDEN          0x0008
+#define HDS_DRAGDROP        0x0040
+#define HDS_FULLDRAG        0x0080
+#define HDS_FILTERBAR       0x0100
+#define HDS_FLAT            0x0200
+#define HDS_CHECKBOXES      0x0400
+#define HDS_NOSIZING        0x0800
+#define HDS_OVERFLOW        0x1000
+
+/* Rebar Control */
+#define RBS_TOOLTIPS        0x0100
+#define RBS_VARHEIGHT       0x0200
+#define RBS_BANDBORDERS     0x0400
+#define RBS_FIXEDORDER      0x0800
+#define RBS_REGISTERDROP    0x1000
+#define RBS_AUTOSIZE        0x2000
+#define RBS_VERTICALGRIPPER 0x4000
+#define RBS_DBLCLKTOGGLE    0x8000
+
+/* Tool tips */
+#define TTS_ALWAYSTIP       0x01
+#define TTS_NOPREFIX        0x02
+#define TTS_NOANIMATE       0x10
+#define TTS_NOFADE          0x20
+#define TTS_BALLOON         0x40
+#define TTS_CLOSE           0x80
+#define TTS_USEVISUALSTYLE  0x100
+
+/* Statusbar Control */
+#define SBARS_SIZEGRIP      0x0100
+#define SBARS_TOOLTIPS      0x0800
+#define SBT_TOOLTIPS        0x0800
+
+/* Toolbar Control */
+#define TBS_AUTOTICKS       0x0001
+#define TBS_VERT            0x0002
+#define TBS_HORZ            0x0000
+#define TBS_TOP             0x0004
+#define TBS_BOTTOM          0x0000
+#define TBS_LEFT            0x0004
+#define TBS_RIGHT           0x0000
+#define TBS_BOTH            0x0008
+#define TBS_NOTICKS         0x0010
+#define TBS_ENABLESELRANGE  0x0020
+#define TBS_FIXEDLENGTH     0x0040
+#define TBS_NOTHUMB         0x0080
+#define TBS_TOOLTIPS        0x0100
+#define TBS_REVERSED        0x0200
+#define TBS_DOWNISLEFT      0x0400
+
+/* UpDown Control */
+#define UDS_WRAP            0x0001
+#define UDS_SETBUDDYINT     0x0002
+#define UDS_ALIGNRIGHT      0x0004
+#define UDS_ALIGNLEFT       0x0008
+#define UDS_AUTOBUDDY       0x0010
+#define UDS_ARROWKEYS       0x0020
+#define UDS_HORZ            0x0040
+#define UDS_NOTHOUSANDS     0x0080
+#define UDS_HOTTRACK        0x0100
+
+/* Progressbar Control */
+#define PBS_SMOOTH          0x01
+#define PBS_VERTICAL        0x04
+#define PBS_MARQUEE         0x08
+#define PBS_SMOOTHREVERSE   0x10
+
+/* Common Control Styles */
+#define CCS_TOP             __MSABI_LONG(0x00000001)
+#define CCS_NOMOVEY         __MSABI_LONG(0x00000002)
+#define CCS_BOTTOM          __MSABI_LONG(0x00000003)
+#define CCS_NORESIZE        __MSABI_LONG(0x00000004)
+#define CCS_NOPARENTALIGN   __MSABI_LONG(0x00000008)
+#define CCS_ADJUSTABLE      __MSABI_LONG(0x00000020)
+#define CCS_NODIVIDER       __MSABI_LONG(0x00000040)
+#define CCS_VERT            __MSABI_LONG(0x00000080)
+#define CCS_LEFT            (CCS_VERT | CCS_TOP)
+#define CCS_RIGHT           (CCS_VERT | CCS_BOTTOM)
+#define CCS_NOMOVEX         (CCS_VERT | CCS_NOMOVEY)
+
+/* Listview Control */
+#define LVS_ICON            0x0000
+#define LVS_REPORT          0x0001
+#define LVS_SMALLICON       0x0002
+#define LVS_LIST            0x0003
+#define LVS_TYPEMASK        0x0003
+#define LVS_SINGLESEL       0x0004
+#define LVS_SHOWSELALWAYS   0x0008
+#define LVS_SORTASCENDING   0x0010
+#define LVS_SORTDESCENDING  0x0020
+#define LVS_SHAREIMAGELISTS 0x0040
+#define LVS_NOLABELWRAP     0x0080
+#define LVS_AUTOARRANGE     0x0100
+#define LVS_EDITLABELS      0x0200
+#define LVS_OWNERDATA       0x1000
+#define LVS_NOSCROLL        0x2000
+#define LVS_TYPESTYLEMASK   0xfc00
+#define LVS_ALIGNTOP        0x0000
+#define LVS_ALIGNLEFT       0x0800
+#define LVS_ALIGNMASK       0x0c00
+#define LVS_OWNERDRAWFIXED  0x0400
+#define LVS_NOCOLUMNHEADER  0x4000
+#define LVS_NOSORTHEADER    0x8000
+
+/* Treeview Control */
+#define TVS_HASBUTTONS      0x0001
+#define TVS_HASLINES        0x0002
+#define TVS_LINESATROOT     0x0004
+#define TVS_EDITLABELS      0x0008
+#define TVS_DISABLEDRAGDROP 0x0010
+#define TVS_SHOWSELALWAYS   0x0020
+#define TVS_RTLREADING      0x0040
+#define TVS_NOTOOLTIPS      0x0080
+#define TVS_CHECKBOXES      0x0100
+#define TVS_TRACKSELECT     0x0200
+#define TVS_SINGLEEXPAND    0x0400
+#define TVS_INFOTIP         0x0800
+#define TVS_FULLROWSELECT   0x1000
+#define TVS_NOSCROLL        0x2000
+#define TVS_NONEVENHEIGHT   0x4000
+#define TVS_NOHSCROLL       0x8000
+
+/* Tab Control */
+#define TCS_SCROLLOPPOSITE  0x0001   /* assumes multiline tab */
+#define TCS_BOTTOM          0x0002
+#define TCS_RIGHT           0x0002
+#define TCS_MULTISELECT     0x0004  /* allow multi-select in button mode */
+#define TCS_FLATBUTTONS     0x0008
+#define TCS_FORCEICONLEFT   0x0010
+#define TCS_FORCELABELLEFT  0x0020
+#define TCS_HOTTRACK        0x0040
+#define TCS_VERTICAL        0x0080
+#define TCS_TABS            0x0000
+#define TCS_BUTTONS         0x0100
+#define TCS_SINGLELINE      0x0000
+#define TCS_MULTILINE       0x0200
+#define TCS_RIGHTJUSTIFY    0x0000
+#define TCS_FIXEDWIDTH      0x0400
+#define TCS_RAGGEDRIGHT     0x0800
+#define TCS_FOCUSONBUTTONDOWN 0x1000
+#define TCS_OWNERDRAWFIXED  0x2000
+#define TCS_TOOLTIPS        0x4000
+#define TCS_FOCUSNEVER      0x8000
+
+/* Animate Control */
+#define ACS_CENTER          0x0001
+#define ACS_TRANSPARENT     0x0002
+#define ACS_AUTOPLAY        0x0004
+#define ACS_TIMER           0x0008  /* no threads, just timers */
+
+/* Month Calendar Control */
+#define MCS_DAYSTATE        0x0001
+#define MCS_MULTISELECT     0x0002
+#define MCS_WEEKNUMBERS     0x0004
+#define MCS_NOTODAY         0x0010
+#define MCS_NOTODAYCIRCLE   0x0008
+#define MCS_NOTRAILINGDATES 0x0040
+
+/* Datetime Control */
+#define DTS_SHORTDATEFORMAT 0x0000
+#define DTS_UPDOWN          0x0001
+#define DTS_SHOWNONE        0x0002
+#define DTS_LONGDATEFORMAT  0x0004
+#define DTS_TIMEFORMAT      0x0009
+#define DTS_APPCANPARSE     0x0010
+#define DTS_RIGHTALIGN      0x0020
+
+/* Pager Control */
+#define PGS_VERT            0x00000000
+#define PGS_HORZ            0x00000001
+#define PGS_AUTOSCROLL      0x00000002
+#define PGS_DRAGNDROP       0x00000004
+
+/* Native Font Control */
+#define NFS_EDIT            0x0001
+#define NFS_STATIC          0x0002
+#define NFS_LISTCOMBO       0x0004
+#define NFS_BUTTON          0x0008
+#define NFS_ALL             0x0010
+#define NFS_USEFONTASSOC    0x0020
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h
new file mode 100644
index 0000000..bf8b7d2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h
@@ -0,0 +1,851 @@
+/*
+ * COMMDLG - Common Wine Dialog ... :-)
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_COMMDLG_H
+#define __WINE_COMMDLG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <prsht.h>
+#ifndef _WIN64
+#include <pshpack1.h>
+#endif
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else   /* __cplusplus */
+#define SNDMSG SendMessage
+#endif  /* __cplusplus */
+#endif  /* SNDMSG */
+
+#define OFN_READONLY                 0x00000001
+#define OFN_OVERWRITEPROMPT          0x00000002
+#define OFN_HIDEREADONLY             0x00000004
+#define OFN_NOCHANGEDIR              0x00000008
+#define OFN_SHOWHELP                 0x00000010
+#define OFN_ENABLEHOOK               0x00000020
+#define OFN_ENABLETEMPLATE           0x00000040
+#define OFN_ENABLETEMPLATEHANDLE     0x00000080
+#define OFN_NOVALIDATE               0x00000100
+#define OFN_ALLOWMULTISELECT         0x00000200
+#define OFN_EXTENSIONDIFFERENT       0x00000400
+#define OFN_PATHMUSTEXIST            0x00000800
+#define OFN_FILEMUSTEXIST            0x00001000
+#define OFN_CREATEPROMPT             0x00002000
+#define OFN_SHAREAWARE               0x00004000
+#define OFN_NOREADONLYRETURN         0x00008000
+#define OFN_NOTESTFILECREATE         0x00010000
+#define OFN_NONETWORKBUTTON          0x00020000
+#define OFN_NOLONGNAMES              0x00040000
+#define OFN_EXPLORER                 0x00080000
+#define OFN_NODEREFERENCELINKS       0x00100000
+#define OFN_LONGNAMES                0x00200000
+#define OFN_ENABLEINCLUDENOTIFY      0x00400000
+#define OFN_ENABLESIZING             0x00800000
+#define OFN_DONTADDTORECENT          0x02000000
+#define OFN_FORCESHOWHIDDEN          0x10000000
+
+#define OFN_SHAREFALLTHROUGH     2
+#define OFN_SHARENOWARN          1
+#define OFN_SHAREWARN            0
+
+#define SAVE_DIALOG  1
+#define OPEN_DIALOG  2
+
+typedef UINT_PTR (CALLBACK *LPOFNHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+
+typedef struct tagOFNA {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
+	LPCSTR		lpstrFilter;
+	LPSTR		lpstrCustomFilter;
+	DWORD		nMaxCustFilter;
+	DWORD		nFilterIndex;
+	LPSTR		lpstrFile;
+	DWORD		nMaxFile;
+	LPSTR		lpstrFileTitle;
+	DWORD		nMaxFileTitle;
+	LPCSTR		lpstrInitialDir;
+	LPCSTR		lpstrTitle;
+	DWORD		Flags;
+	WORD		nFileOffset;
+	WORD		nFileExtension;
+	LPCSTR		lpstrDefExt;
+	LPARAM		lCustData;
+	LPOFNHOOKPROC	lpfnHook;
+	LPCSTR		lpTemplateName;
+        void           *pvReserved;
+        DWORD           dwReserved;
+        DWORD           FlagsEx;
+} OPENFILENAMEA,*LPOPENFILENAMEA;
+
+typedef struct tagOFNW {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
+	LPCWSTR		lpstrFilter;
+	LPWSTR		lpstrCustomFilter;
+	DWORD		nMaxCustFilter;
+	DWORD		nFilterIndex;
+	LPWSTR		lpstrFile;
+	DWORD		nMaxFile;
+	LPWSTR		lpstrFileTitle;
+	DWORD		nMaxFileTitle;
+	LPCWSTR		lpstrInitialDir;
+	LPCWSTR		lpstrTitle;
+	DWORD		Flags;
+	WORD		nFileOffset;
+	WORD		nFileExtension;
+	LPCWSTR		lpstrDefExt;
+	LPARAM		lCustData;
+	LPOFNHOOKPROC	lpfnHook;
+	LPCWSTR		lpTemplateName;
+        void           *pvReserved;
+        DWORD           dwReserved;
+        DWORD           FlagsEx;
+} OPENFILENAMEW,*LPOPENFILENAMEW;
+
+DECL_WINELIB_TYPE_AW(OPENFILENAME)
+DECL_WINELIB_TYPE_AW(LPOPENFILENAME)
+
+#ifndef CDSIZEOF_STRUCT
+#define CDSIZEOF_STRUCT(type,field) ((INT_PTR)&(((type *)0)->field) + sizeof(((type*)0)->field))
+#endif
+
+#define OPENFILENAME_SIZE_VERSION_400A CDSIZEOF_STRUCT(OPENFILENAMEA,lpTemplateName)
+#define OPENFILENAME_SIZE_VERSION_400W CDSIZEOF_STRUCT(OPENFILENAMEW,lpTemplateName)
+#define OPENFILENAME_SIZE_VERSION_400 WINELIB_NAME_AW(OPENFILENAME_SIZE_VERSION_400)
+
+
+typedef struct
+{
+	NMHDR           hdr;
+	LPOPENFILENAMEA lpOFN;
+	LPSTR           pszFile;
+} OFNOTIFYA, *LPOFNOTIFYA;
+
+typedef struct
+{
+	NMHDR           hdr;
+	LPOPENFILENAMEW lpOFN;
+	LPWSTR          pszFile;
+} OFNOTIFYW, *LPOFNOTIFYW;
+
+DECL_WINELIB_TYPE_AW(OFNOTIFY)
+DECL_WINELIB_TYPE_AW(LPOFNOTIFY)
+
+typedef struct _OFNOTIFYEXA
+{
+        NMHDR           hdr;
+        LPOPENFILENAMEA lpOFN;
+        LPVOID          psf;
+        LPVOID          pidl;
+} OFNOTIFYEXA, *LPOFNOTIFYEXA;
+
+typedef struct _OFNOTIFYEXW
+{
+        NMHDR           hdr;
+        LPOPENFILENAMEW lpOFN;
+        LPVOID          psf;
+        LPVOID          pidl;
+} OFNOTIFYEXW, *LPOFNOTIFYEXW;
+
+DECL_WINELIB_TYPE_AW(OFNOTIFYEX)
+DECL_WINELIB_TYPE_AW(LPOFNOTIFYEX)
+
+typedef UINT_PTR (CALLBACK *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+
+typedef struct {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HWND		hInstance; /* Should be an HINSTANCE but MS made a typo */
+	DWORD	        rgbResult;
+	LPDWORD         lpCustColors;
+	DWORD 		Flags;
+	DWORD		lCustData;
+        LPCCHOOKPROC    lpfnHook;
+	LPCSTR 		lpTemplateName;
+} CHOOSECOLORA;
+typedef CHOOSECOLORA *LPCHOOSECOLORA;
+
+typedef struct {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HWND		hInstance; /* Should be an HINSTANCE but MS made a typo */
+	DWORD	        rgbResult;
+	LPDWORD         lpCustColors;
+	DWORD 		Flags;
+	DWORD		lCustData;
+        LPCCHOOKPROC    lpfnHook;
+	LPCWSTR 	lpTemplateName;
+} CHOOSECOLORW;
+typedef CHOOSECOLORW *LPCHOOSECOLORW;
+
+DECL_WINELIB_TYPE_AW(CHOOSECOLOR)
+DECL_WINELIB_TYPE_AW(LPCHOOSECOLOR)
+
+
+#define CC_RGBINIT               0x00000001
+#define CC_FULLOPEN              0x00000002
+#define CC_PREVENTFULLOPEN       0x00000004
+#define CC_SHOWHELP              0x00000008
+#define CC_ENABLEHOOK            0x00000010
+#define CC_ENABLETEMPLATE        0x00000020
+#define CC_ENABLETEMPLATEHANDLE  0x00000040
+#define CC_SOLIDCOLOR            0x00000080
+#define CC_ANYCOLOR              0x00000100
+
+typedef UINT_PTR (CALLBACK *LPFRHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+
+typedef struct {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
+	DWORD		Flags;
+	LPSTR		lpstrFindWhat;
+	LPSTR		lpstrReplaceWith;
+	WORD		wFindWhatLen;
+	WORD 		wReplaceWithLen;
+	LPARAM 		lCustData;
+        LPFRHOOKPROC    lpfnHook;
+	LPCSTR 		lpTemplateName;
+} FINDREPLACEA, *LPFINDREPLACEA;
+
+typedef struct {
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HINSTANCE	hInstance;
+	DWORD		Flags;
+	LPWSTR		lpstrFindWhat;
+	LPWSTR		lpstrReplaceWith;
+	WORD		wFindWhatLen;
+	WORD 		wReplaceWithLen;
+	LPARAM 		lCustData;
+        LPFRHOOKPROC    lpfnHook;
+	LPCWSTR		lpTemplateName;
+} FINDREPLACEW, *LPFINDREPLACEW;
+
+DECL_WINELIB_TYPE_AW(FINDREPLACE)
+DECL_WINELIB_TYPE_AW(LPFINDREPLACE)
+
+#define FR_DOWN                         0x00000001
+#define FR_WHOLEWORD                    0x00000002
+#define FR_MATCHCASE                    0x00000004
+#define FR_FINDNEXT                     0x00000008
+#define FR_REPLACE                      0x00000010
+#define FR_REPLACEALL                   0x00000020
+#define FR_DIALOGTERM                   0x00000040
+#define FR_SHOWHELP                     0x00000080
+#define FR_ENABLEHOOK                   0x00000100
+#define FR_ENABLETEMPLATE               0x00000200
+#define FR_NOUPDOWN                     0x00000400
+#define FR_NOMATCHCASE                  0x00000800
+#define FR_NOWHOLEWORD                  0x00001000
+#define FR_ENABLETEMPLATEHANDLE         0x00002000
+#define FR_HIDEUPDOWN                   0x00004000
+#define FR_HIDEMATCHCASE                0x00008000
+#define FR_HIDEWHOLEWORD                0x00010000
+#define FR_MATCHDIAC                    0x20000000
+#define FR_MATCHKASHIDA                 0x40000000
+#define FR_MATCHALEFHAMZA               0x80000000
+
+typedef UINT_PTR (CALLBACK *LPCFHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+
+typedef struct tagCHOOSEFONTA
+{
+	UINT  	lStructSize;
+	HWND 		hwndOwner;
+	HDC  		hDC;
+	LPLOGFONTA    lpLogFont;
+	INT		iPointSize;
+	DWORD		Flags;
+	COLORREF	rgbColors;
+	LPARAM		lCustData;
+	LPCFHOOKPROC 	lpfnHook;
+	LPCSTR		lpTemplateName;
+	HINSTANCE	hInstance;
+	LPSTR		lpszStyle;
+	WORD		nFontType;
+	WORD	___MISSING_ALIGNMENT__;
+	INT   	nSizeMin;
+	INT		nSizeMax;
+} CHOOSEFONTA, *LPCHOOSEFONTA;
+
+typedef struct tagCHOOSEFONTW
+{
+	UINT  	lStructSize;
+	HWND 		hwndOwner;
+	HDC  		hDC;
+	LPLOGFONTW    lpLogFont;
+	INT		iPointSize;
+	DWORD		Flags;
+	COLORREF	rgbColors;
+	LPARAM		lCustData;
+	LPCFHOOKPROC 	lpfnHook;
+	LPCWSTR		lpTemplateName;
+	HINSTANCE	hInstance;
+	LPWSTR		lpszStyle;
+	WORD		nFontType;
+	WORD	___MISSING_ALIGNMENT__;
+	INT   	nSizeMin;
+	INT		nSizeMax;
+} CHOOSEFONTW, *LPCHOOSEFONTW;
+
+DECL_WINELIB_TYPE_AW(CHOOSEFONT)
+DECL_WINELIB_TYPE_AW(LPCHOOSEFONT)
+
+#define CF_SCREENFONTS               0x00000001
+#define CF_PRINTERFONTS              0x00000002
+#define CF_BOTH                      (CF_SCREENFONTS | CF_PRINTERFONTS)
+#define CF_SHOWHELP                  __MSABI_LONG(0x00000004)
+#define CF_ENABLEHOOK                __MSABI_LONG(0x00000008)
+#define CF_ENABLETEMPLATE            __MSABI_LONG(0x00000010)
+#define CF_ENABLETEMPLATEHANDLE      __MSABI_LONG(0x00000020)
+#define CF_INITTOLOGFONTSTRUCT       __MSABI_LONG(0x00000040)
+#define CF_USESTYLE                  __MSABI_LONG(0x00000080)
+#define CF_EFFECTS                   __MSABI_LONG(0x00000100)
+#define CF_APPLY                     __MSABI_LONG(0x00000200)
+#define CF_ANSIONLY                  __MSABI_LONG(0x00000400)
+#define CF_SCRIPTSONLY               CF_ANSIONLY
+#define CF_NOVECTORFONTS             __MSABI_LONG(0x00000800)
+#define CF_NOOEMFONTS                CF_NOVECTORFONTS
+#define CF_NOSIMULATIONS             __MSABI_LONG(0x00001000)
+#define CF_LIMITSIZE                 __MSABI_LONG(0x00002000)
+#define CF_FIXEDPITCHONLY            __MSABI_LONG(0x00004000)
+#define CF_WYSIWYG                   __MSABI_LONG(0x00008000) /* use with CF_SCREENFONTS & CF_PRINTERFONTS */
+#define CF_FORCEFONTEXIST            __MSABI_LONG(0x00010000)
+#define CF_SCALABLEONLY              __MSABI_LONG(0x00020000)
+#define CF_TTONLY                    __MSABI_LONG(0x00040000)
+#define CF_NOFACESEL                 __MSABI_LONG(0x00080000)
+#define CF_NOSTYLESEL                __MSABI_LONG(0x00100000)
+#define CF_NOSIZESEL                 __MSABI_LONG(0x00200000)
+#define CF_SELECTSCRIPT              __MSABI_LONG(0x00400000)
+#define CF_NOSCRIPTSEL               __MSABI_LONG(0x00800000)
+#define CF_NOVERTFONTS               __MSABI_LONG(0x01000000)
+
+#define SIMULATED_FONTTYPE      0x8000
+#define PRINTER_FONTTYPE        0x4000
+#define SCREEN_FONTTYPE         0x2000
+#define BOLD_FONTTYPE           0x0100
+#define ITALIC_FONTTYPE         0x0200
+#define REGULAR_FONTTYPE        0x0400
+
+#define WM_CHOOSEFONT_GETLOGFONT        (WM_USER + 1)
+#define WM_CHOOSEFONT_SETLOGFONT	(WM_USER + 101)
+#define WM_CHOOSEFONT_SETFLAGS		(WM_USER + 102)
+
+#define LBSELCHSTRINGA  "commdlg_LBSelChangedNotify"
+#if defined(__GNUC__)
+# define LBSELCHSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 }
+#elif defined(_MSC_VER)
+# define LBSELCHSTRINGW L"commdlg_LBSelChangedNotify"
+#else
+static const WCHAR LBSELCHSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 };
+#endif
+#define LBSELCHSTRING   WINELIB_NAME_AW(LBSELCHSTRING)
+
+#define SHAREVISTRINGA  "commdlg_ShareViolation"
+#if defined(__GNUC__)
+# define SHAREVISTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 }
+#elif defined(_MSC_VER)
+# define SHAREVISTRINGW L"commdlg_ShareViolation"
+#else
+static const WCHAR SHAREVISTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 };
+#endif
+#define SHAREVISTRING   WINELIB_NAME_AW(SHAREVISTRING)
+
+#define FILEOKSTRINGA   "commdlg_FileNameOK"
+#if defined(__GNUC__)
+# define FILEOKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'F','i','l','e','N','a','m','e','O','K',0 }
+#elif defined(_MSC_VER)
+# define FILEOKSTRINGW  L"commdlg_FileNameOK"
+#else
+static const WCHAR FILEOKSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'F','i','l','e','N','a','m','e','O','K',0 };
+#endif
+#define FILEOKSTRING    WINELIB_NAME_AW(FILEOKSTRING)
+
+#define COLOROKSTRINGA  "commdlg_ColorOK"
+#if defined(__GNUC__)
+# define COLOROKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'C','o','l','o','r','O','K',0 }
+#elif defined(_MSC_VER)
+# define COLOROKSTRINGW L"commdlg_ColorOK"
+#else
+static const WCHAR COLOROKSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'C','o','l','o','r','O','K',0 };
+#endif
+#define COLOROKSTRING   WINELIB_NAME_AW(COLOROKSTRING)
+
+#define SETRGBSTRINGA   "commdlg_SetRGBColor"
+#if defined(__GNUC__)
+# define SETRGBSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'S','e','t','R','G','B','C','o','l','o','r',0 }
+#elif defined(_MSC_VER)
+# define SETRGBSTRINGW  L"commdlg_SetRGBColor"
+#else
+static const WCHAR SETRGBSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'S','e','t','R','G','B','C','o','l','o','r',0 };
+#endif
+#define SETRGBSTRING    WINELIB_NAME_AW(SETRGBSTRING)
+
+#define FINDMSGSTRINGA  "commdlg_FindReplace"
+#if defined(__GNUC__)
+# define FINDMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'F','i','n','d','R','e','p','l','a','c','e',0 }
+#elif defined(_MSC_VER)
+# define FINDMSGSTRINGW L"commdlg_FindReplace"
+#else
+static const WCHAR FINDMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'F','i','n','d','R','e','p','l','a','c','e',0 };
+#endif
+#define FINDMSGSTRING   WINELIB_NAME_AW(FINDMSGSTRING)
+
+#define HELPMSGSTRINGA  "commdlg_help"
+#if defined(__GNUC__)
+# define HELPMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+  'H','e','l','p',0 }
+#elif defined(_MSC_VER)
+# define HELPMSGSTRINGW L"commdlg_help"
+#else
+static const WCHAR HELPMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+  'H','e','l','p',0 };
+#endif
+#define HELPMSGSTRING   WINELIB_NAME_AW(HELPMSGSTRING)
+
+#define CD_LBSELNOITEMS -1
+#define CD_LBSELCHANGE   0
+#define CD_LBSELSUB      1
+#define CD_LBSELADD      2
+
+#define CDN_FIRST   (0U-601U)
+#define CDN_LAST    (0U-699U)
+
+#define CDN_INITDONE            (CDN_FIRST - 0x0000)
+#define CDN_SELCHANGE           (CDN_FIRST - 0x0001)
+#define CDN_FOLDERCHANGE        (CDN_FIRST - 0x0002)
+#define CDN_SHAREVIOLATION      (CDN_FIRST - 0x0003)
+#define CDN_HELP                (CDN_FIRST - 0x0004)
+#define CDN_FILEOK              (CDN_FIRST - 0x0005)
+#define CDN_TYPECHANGE          (CDN_FIRST - 0x0006)
+#define CDN_INCLUDEITEM         (CDN_FIRST - 0x0007)
+
+#define CDM_FIRST               (WM_USER + 100)
+#define CDM_LAST                (WM_USER + 200)
+
+#define CDM_GETSPEC             (CDM_FIRST + 0x0000)
+#define CDM_GETFILEPATH         (CDM_FIRST + 0x0001)
+#define CDM_GETFOLDERPATH       (CDM_FIRST + 0x0002)
+#define CDM_GETFOLDERIDLIST     (CDM_FIRST + 0x0003)
+#define CDM_SETCONTROLTEXT      (CDM_FIRST + 0x0004)
+#define CDM_HIDECONTROL         (CDM_FIRST + 0x0005)
+#define CDM_SETDEFEXT           (CDM_FIRST + 0x0006)
+
+
+/* Messages to query information from the open or save dialogs */
+
+#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetSpec  WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec)
+
+#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFilePath  WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath)
+
+#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPath  WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath)
+
+#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)
+
+#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \
+        (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)
+
+#define CommDlg_OpenSave_HideControl(_hdlg, _id) \
+        (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)
+
+#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \
+        (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)
+
+#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetSpec WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec)
+
+#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFilePath WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath)
+
+#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPath WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath)
+
+#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \
+        (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)
+
+#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \
+        (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)
+
+#define CommDlg_OpenSave_HideControl(_hdlg, _id) \
+        (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)
+
+#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \
+        (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)
+
+
+typedef UINT_PTR (CALLBACK *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+typedef UINT_PTR (CALLBACK *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+
+typedef struct tagPDA
+{
+    DWORD            lStructSize;
+    HWND           hwndOwner;
+    HGLOBAL        hDevMode;
+    HGLOBAL        hDevNames;
+    HDC            hDC;
+    DWORD            Flags;
+    WORD             nFromPage;
+    WORD             nToPage;
+    WORD             nMinPage;
+    WORD             nMaxPage;
+    WORD             nCopies;
+    HINSTANCE      hInstance;
+    LPARAM           lCustData;
+    LPPRINTHOOKPROC  lpfnPrintHook;
+    LPSETUPHOOKPROC  lpfnSetupHook;
+    LPCSTR           lpPrintTemplateName;
+    LPCSTR           lpSetupTemplateName;
+    HGLOBAL        hPrintTemplate;
+    HGLOBAL        hSetupTemplate;
+} PRINTDLGA, *LPPRINTDLGA;
+
+typedef struct tagPDW
+{
+    DWORD            lStructSize;
+    HWND           hwndOwner;
+    HGLOBAL        hDevMode;
+    HGLOBAL        hDevNames;
+    HDC            hDC;
+    DWORD            Flags;
+    WORD             nFromPage;
+    WORD             nToPage;
+    WORD             nMinPage;
+    WORD             nMaxPage;
+    WORD             nCopies;
+    HINSTANCE      hInstance;
+    LPARAM           lCustData;
+    LPPRINTHOOKPROC  lpfnPrintHook;
+    LPSETUPHOOKPROC  lpfnSetupHook;
+    LPCWSTR          lpPrintTemplateName;
+    LPCWSTR          lpSetupTemplateName;
+    HGLOBAL        hPrintTemplate;
+    HGLOBAL        hSetupTemplate;
+} PRINTDLGW, *LPPRINTDLGW;
+
+DECL_WINELIB_TYPE_AW(PRINTDLG)
+DECL_WINELIB_TYPE_AW(LPPRINTDLG)
+
+#define PD_ALLPAGES                   0x00000000
+#define PD_SELECTION                  0x00000001
+#define PD_PAGENUMS                   0x00000002
+#define PD_NOSELECTION                0x00000004
+#define PD_NOPAGENUMS                 0x00000008
+#define PD_COLLATE                    0x00000010
+#define PD_PRINTTOFILE                0x00000020
+#define PD_PRINTSETUP                 0x00000040
+#define PD_NOWARNING                  0x00000080
+#define PD_RETURNDC                   0x00000100
+#define PD_RETURNIC                   0x00000200
+#define PD_RETURNDEFAULT              0x00000400
+#define PD_SHOWHELP                   0x00000800
+#define PD_ENABLEPRINTHOOK            0x00001000
+#define PD_ENABLESETUPHOOK            0x00002000
+#define PD_ENABLEPRINTTEMPLATE        0x00004000
+#define PD_ENABLESETUPTEMPLATE        0x00008000
+#define PD_ENABLEPRINTTEMPLATEHANDLE  0x00010000
+#define PD_ENABLESETUPTEMPLATEHANDLE  0x00020000
+#define PD_USEDEVMODECOPIES           0x00040000
+#define PD_USEDEVMODECOPIESANDCOLLATE 0x00040000
+#define PD_DISABLEPRINTTOFILE         0x00080000
+#define PD_HIDEPRINTTOFILE            0x00100000
+#define PD_NONETWORKBUTTON            0x00200000
+#define PD_CURRENTPAGE                0x00400000
+#define PD_NOCURRENTPAGE              0x00800000
+#define PD_EXCLUSIONFLAGS             0x01000000
+#define PD_USELARGETEMPLATE           0x10000000
+
+
+#define PD_EXCL_COPIESANDCOLLATE      (DM_COPIES | DM_COLLATE)
+
+#define START_PAGE_GENERAL 0xffffffff
+
+#define PD_RESULT_CANCEL 0
+#define PD_RESULT_PRINT  1
+#define PD_RESULT_APPLY  2
+
+typedef struct
+{
+    WORD  wDriverOffset;
+    WORD  wDeviceOffset;
+    WORD  wOutputOffset;
+    WORD  wDefault;
+} DEVNAMES;
+typedef DEVNAMES * LPDEVNAMES;
+
+#define DN_DEFAULTPRN      0x0001
+
+/* PageSetupDlg stuff ... */
+#define WM_PSD_PAGESETUPDLG	(WM_USER  )
+#define WM_PSD_FULLPAGERECT	(WM_USER+1)
+#define WM_PSD_MINMARGINRECT	(WM_USER+2)
+#define WM_PSD_MARGINRECT	(WM_USER+3)
+#define WM_PSD_GREEKTEXTRECT	(WM_USER+4)
+#define WM_PSD_ENVSTAMPRECT	(WM_USER+5)
+#define WM_PSD_YAFULLPAGERECT	(WM_USER+6)
+
+typedef UINT (CALLBACK *LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM );
+typedef UINT (CALLBACK *LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM );
+
+typedef struct tagPSDA
+{
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HGLOBAL	hDevMode;
+	HGLOBAL	hDevNames;
+	DWORD		Flags;
+	POINT		ptPaperSize;
+	RECT		rtMinMargin;
+	RECT		rtMargin;
+	HINSTANCE	hInstance;
+	LPARAM		lCustData;
+	LPPAGESETUPHOOK	lpfnPageSetupHook;
+	LPPAGEPAINTHOOK	lpfnPagePaintHook;
+	LPCSTR		lpPageSetupTemplateName;
+	HGLOBAL	hPageSetupTemplate;
+} PAGESETUPDLGA,*LPPAGESETUPDLGA;
+
+typedef struct tagPSDW
+{
+	DWORD		lStructSize;
+	HWND		hwndOwner;
+	HGLOBAL	hDevMode;
+	HGLOBAL	hDevNames;
+	DWORD		Flags;
+	POINT		ptPaperSize;
+	RECT		rtMinMargin;
+	RECT		rtMargin;
+	HINSTANCE	hInstance;
+	LPARAM		lCustData;
+	LPPAGESETUPHOOK	lpfnPageSetupHook;
+	LPPAGEPAINTHOOK	lpfnPagePaintHook;
+	LPCWSTR		lpPageSetupTemplateName;
+	HGLOBAL	hPageSetupTemplate;
+} PAGESETUPDLGW,*LPPAGESETUPDLGW;
+DECL_WINELIB_TYPE_AW(PAGESETUPDLG)
+DECL_WINELIB_TYPE_AW(LPPAGESETUPDLG)
+
+#define PSD_DEFAULTMINMARGINS             0x00000000
+#define PSD_INWININIINTLMEASURE           0x00000000
+
+#define PSD_MINMARGINS                    0x00000001
+#define PSD_MARGINS                       0x00000002
+#define PSD_INTHOUSANDTHSOFINCHES         0x00000004
+#define PSD_INHUNDREDTHSOFMILLIMETERS     0x00000008
+#define PSD_DISABLEMARGINS                0x00000010
+#define PSD_DISABLEPRINTER                0x00000020
+#define PSD_NOWARNING                     0x00000080
+#define PSD_DISABLEORIENTATION            0x00000100
+#define PSD_RETURNDEFAULT                 0x00000400
+#define PSD_DISABLEPAPER                  0x00000200
+#define PSD_SHOWHELP                      0x00000800
+#define PSD_ENABLEPAGESETUPHOOK           0x00002000
+#define PSD_ENABLEPAGESETUPTEMPLATE       0x00008000
+#define PSD_ENABLEPAGESETUPTEMPLATEHANDLE 0x00020000
+#define PSD_ENABLEPAGEPAINTHOOK           0x00040000
+#define PSD_DISABLEPAGEPAINTING           0x00080000
+#define PSD_NONETWORKBUTTON               0x00200000
+
+typedef struct tagPRINTPAGERANGE
+{
+    DWORD       nFromPage;
+    DWORD       nToPage;
+} PRINTPAGERANGE, *LPPRINTPAGERANGE;
+
+typedef struct tagPDEXA
+{
+    DWORD               lStructSize;
+    HWND                hwndOwner;
+    HGLOBAL             hDevMode;
+    HGLOBAL             hDevNames;
+    HDC                 hDC;
+    DWORD               Flags;
+    DWORD               Flags2;
+    DWORD               ExclusionFlags;
+    DWORD               nPageRanges;
+    DWORD               nMaxPageRanges;
+    LPPRINTPAGERANGE    lpPageRanges;
+    DWORD               nMinPage;
+    DWORD               nMaxPage;
+    DWORD               nCopies;
+    HINSTANCE           hInstance;
+    LPCSTR              lpPrintTemplateName;
+    void* /*LPUNKNOWN*/ lpCallback;
+    DWORD               nPropertyPages;
+    HPROPSHEETPAGE*     lphPropertyPages;
+    DWORD               nStartPage;
+    DWORD               dwResultAction;
+} PRINTDLGEXA, *LPPRINTDLGEXA;
+
+typedef struct tagPDEXW
+{
+    DWORD               lStructSize;
+    HWND                hwndOwner;
+    HGLOBAL             hDevMode;
+    HGLOBAL             hDevNames;
+    HDC                 hDC;
+    DWORD               Flags;
+    DWORD               Flags2;
+    DWORD               ExclusionFlags;
+    DWORD               nPageRanges;
+    DWORD               nMaxPageRanges;
+    LPPRINTPAGERANGE    lpPageRanges;
+    DWORD               nMinPage;
+    DWORD               nMaxPage;
+    DWORD               nCopies;
+    HINSTANCE           hInstance;
+    LPCWSTR             lpPrintTemplateName;
+    void* /*LPUNKNOWN*/ lpCallback;
+    DWORD               nPropertyPages;
+    HPROPSHEETPAGE*     lphPropertyPages;
+    DWORD               nStartPage;
+    DWORD               dwResultAction;
+} PRINTDLGEXW, *LPPRINTDLGEXW;
+
+DECL_WINELIB_TYPE_AW(PRINTDLGEX)
+DECL_WINELIB_TYPE_AW(LPPRINTDLGEX)
+
+#ifdef STDMETHOD
+
+DEFINE_GUID(IID_IPrintDialogCallback, 0x5852a2c3,0x6530,0x11d1,0xb6,0xa3,0x00,0x00,0xf8,0x75,0x7b,0xf9);
+#define INTERFACE IPrintDialogCallback
+DECLARE_INTERFACE_(IPrintDialogCallback,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IPrintDialogCallback methods ***/
+    STDMETHOD(InitDone)(THIS) PURE;
+    STDMETHOD(SelectionChange)(THIS) PURE;
+    STDMETHOD(HandleMessage)(THIS_ HWND,UINT,WPARAM,LPARAM,LRESULT *) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_IPrintDialogServices, 0x509aaeda,0x5639,0x11d1,0xb6,0xa1,0x00,0x00,0xf8,0x75,0x7b,0xf9);
+#define INTERFACE IPrintDialogServices
+DECLARE_INTERFACE_(IPrintDialogServices,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IPrintDialogServices methods ***/
+    STDMETHOD(GetCurrentDevMode)(THIS_ LPDEVMODEW,UINT *) PURE;
+    STDMETHOD(GetCurrentPrinterName)(THIS_ LPWSTR,UINT *) PURE;
+    STDMETHOD(GetCurrentPortName)(THIS_ LPWSTR,UINT *) PURE;
+};
+#undef INTERFACE
+
+#endif /* STDMETHOD */
+
+BOOL  WINAPI ChooseColorA(LPCHOOSECOLORA lpChCol);
+BOOL  WINAPI ChooseColorW(LPCHOOSECOLORW lpChCol);
+#define ChooseColor WINELIB_NAME_AW(ChooseColor)
+DWORD   WINAPI CommDlgExtendedError(void);
+HWND  WINAPI FindTextA(LPFINDREPLACEA lpFind);
+HWND  WINAPI FindTextW(LPFINDREPLACEW lpFind);
+#define FindText WINELIB_NAME_AW(FindText)
+short   WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, WORD cbBuf);
+short   WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, WORD cbBuf);
+#define GetFileTitle WINELIB_NAME_AW(GetFileTitle)
+BOOL  WINAPI GetOpenFileNameA(LPOPENFILENAMEA ofn);
+BOOL  WINAPI GetOpenFileNameW(LPOPENFILENAMEW ofn);
+#define GetOpenFileName WINELIB_NAME_AW(GetOpenFileName)
+BOOL  WINAPI GetSaveFileNameA(LPOPENFILENAMEA ofn);
+BOOL  WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn);
+#define GetSaveFileName WINELIB_NAME_AW(GetSaveFileName)
+BOOL WINAPI PageSetupDlgA( LPPAGESETUPDLGA );
+BOOL WINAPI PageSetupDlgW( LPPAGESETUPDLGW );
+#define PageSetupDlg WINELIB_NAME_AW(PageSetupDlg)
+BOOL  WINAPI PrintDlgA( LPPRINTDLGA printdlg);
+BOOL  WINAPI PrintDlgW( LPPRINTDLGW printdlg);
+#define PrintDlg WINELIB_NAME_AW(PrintDlg)
+HRESULT WINAPI PrintDlgExA(LPPRINTDLGEXA);
+HRESULT WINAPI PrintDlgExW(LPPRINTDLGEXW);
+#define PrintDlgEx WINELIB_NAME_AW(PrintDlgEx)
+HWND  WINAPI ReplaceTextA( LPFINDREPLACEA lpFind);
+HWND  WINAPI ReplaceTextW( LPFINDREPLACEW lpFind);
+#define ReplaceText WINELIB_NAME_AW(ReplaceText)
+BOOL  WINAPI ChooseFontA(LPCHOOSEFONTA);
+BOOL  WINAPI ChooseFontW(LPCHOOSEFONTW);
+#define ChooseFont WINELIB_NAME_AW(ChooseFont)
+
+void COMDLG32_SetCommDlgExtendedError(DWORD err);
+
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_COMMDLG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl
new file mode 100644
index 0000000..da4255c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl
@@ -0,0 +1,223 @@
+/*
+ * Common controls v6 interface definitions
+ *
+ * Copyright 2009 Owen Rudge 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+/* Definitions required for widl, but already defined in commctrl.h for C */
+cpp_quote("#if 0")
+typedef DWORD RGBQUAD;
+typedef IUnknown* HIMAGELIST;
+
+typedef struct
+{
+    HBITMAP hbmImage;
+    HBITMAP hbmMask;
+    int     Unused1;
+    int     Unused2;
+    RECT    rcImage;
+} IMAGEINFO;
+
+typedef IMAGEINFO* LPIMAGEINFO;
+
+typedef struct
+{
+    DWORD      cbSize;
+    HIMAGELIST himl;
+    int        i;
+    HDC        hdcDst;
+    int        x;
+    int        y;
+    int        cx;
+    int        cy;
+    int        xBitmap;
+    int        yBitmap;
+    COLORREF   rgbBk;
+    COLORREF   rgbFg;
+    UINT       fStyle;
+    DWORD      dwRop;
+    DWORD      fState;
+    DWORD      Frame;
+    COLORREF   crEffect;
+} IMAGELISTDRAWPARAMS;
+
+typedef IMAGELISTDRAWPARAMS* LPIMAGELISTDRAWPARAMS;
+cpp_quote("#endif")
+
+cpp_quote("HRESULT WINAPI ImageList_CoCreateInstance(REFCLSID,const IUnknown *, REFIID,void **);")
+
+const UINT ILIF_ALPHA = 1;
+
+[
+    object,
+    uuid(46EB5926-582E-4017-9FDF-E8998DAA0950),
+    helpstring("Image List"),
+    local
+]
+interface IImageList : IUnknown
+{
+    HRESULT Add(
+        [in] HBITMAP hbmImage,
+        [in] HBITMAP hbmMask,
+        [out] int* pi);
+
+    HRESULT ReplaceIcon(
+        [in] int i,
+        [in] HICON hicon,
+        [out] int* pi);
+
+    HRESULT SetOverlayImage(
+        [in] int iImage,
+        [in] int iOverlay);
+
+    HRESULT Replace(
+        [in] int i,
+        [in] HBITMAP hbmImage,
+        [in] HBITMAP hbmMask);
+
+    HRESULT AddMasked(
+        [in] HBITMAP hbmImage,
+        [in] COLORREF crMask,
+        [out] int* pi);
+
+    HRESULT Draw(
+        [in] IMAGELISTDRAWPARAMS* pimldp);
+
+    HRESULT Remove(
+        [in] int i);
+
+    HRESULT GetIcon(
+        [in] int i,
+        [in] UINT flags,
+        [out] HICON* picon);
+
+    HRESULT GetImageInfo(
+        [in] int i,
+        [out] IMAGEINFO* pImageInfo);
+
+    HRESULT Copy(
+        [in] int iDst,
+        [in] IUnknown* punkSrc,
+        [in] int iSrc,
+        [in] UINT uFlags);
+
+    HRESULT Merge(
+        [in] int i1,
+        [in] IUnknown* punk2,
+        [in] int i2,
+        [in] int dx,
+        [in] int dy,
+        [out] REFIID riid,
+        [out] PVOID* ppv);
+
+    HRESULT Clone(
+        [in] REFIID riid,
+        [out] PVOID* ppv);
+
+    HRESULT GetImageRect(
+        [in] int i,
+        [out] RECT* prc);
+
+    HRESULT GetIconSize(
+        [out] int* cx,
+        [out] int* cy);
+
+    HRESULT SetIconSize(
+        [in] int cx,
+        [in] int cy);
+
+    HRESULT GetImageCount(
+        [out] int* pi);
+
+    HRESULT SetImageCount(
+        [in] UINT uNewCount);
+
+    HRESULT SetBkColor(
+        [in] COLORREF clrBk,
+        [out] COLORREF* pclr);
+
+    HRESULT GetBkColor(
+        [out] COLORREF* pclr);
+
+    HRESULT BeginDrag(
+        [in] int iTrack,
+        [in] int dxHotspot,
+        [in] int dyHotspot);
+
+    HRESULT EndDrag();
+
+    HRESULT DragEnter(
+        [in] HWND hwndLock,
+        [in] int x,
+        [in] int y);
+
+    HRESULT DragLeave(
+        [in] HWND hwndLock);
+
+    HRESULT DragMove(
+        [in] int x,
+        [in] int y);
+
+    HRESULT SetDragCursorImage(
+        [in] IUnknown* punk,
+        [in] int iDrag,
+        [in] int dxHotspot,
+        [in] int dyHotspot);
+
+    HRESULT DragShowNolock(
+        [in] BOOL fShow);
+
+    HRESULT GetDragImage(
+        [out] POINT * ppt,
+        [out] POINT * pptHotspot,
+        [out] REFIID riid,
+        [out] PVOID* ppv);
+
+    HRESULT GetItemFlags(
+        [in] int i,
+        [out] DWORD *dwFlags);
+
+    HRESULT GetOverlayImage(
+        [in] int iOverlay,
+        [out] int* piIndex);
+}
+
+[
+    uuid(BCADA15B-B428-420c-8D28-023590924C9F)
+]
+library CommonControlObjects
+{
+    [
+        uuid(7C476BA2-02B1-48f4-8048-B24619DDC058)
+    ]
+    coclass ImageList
+    {
+        interface IImageList;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h
new file mode 100644
index 0000000..1d082cc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_COMPOBJ_H
+#define __WINE_COMPOBJ_H
+
+/* compobj.h is just a synonym for objbase.h */
+#include <objbase.h>
+
+#endif /* __WINE_COMPOBJ_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h
new file mode 100644
index 0000000..2cd8715
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h
@@ -0,0 +1,1273 @@
+/* include/config.h.  Generated from config.h.in by configure.  */
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))
+
+/* Define to the file extension for executables. */
+#define EXEEXT ""
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+#define HAVE_ALSA_ASOUNDLIB_H 1
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+#define HAVE_AL_AL_H 1
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+#define HAVE_ARPA_NAMESER_H 1
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+#define HAVE_CAPI20_H 1
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+#define HAVE_CUPS_CUPS_H 1
+
+/* Define to 1 if you have the <curses.h> header file. */
+#define HAVE_CURSES_H 1
+
+/* Define if you have the daylight variable */
+#define HAVE_DAYLIGHT 1
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+#define HAVE_DBUS_DBUS_H 1
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+   file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+#define HAVE_DLADDR 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the `dlopen' function. */
+#define HAVE_DLOPEN 1
+
+/* Define to 1 if you have the <elf.h> header file. */
+#define HAVE_ELF_H 1
+
+/* Define to 1 if you have the `epoll_create' function. */
+#define HAVE_EPOLL_CREATE 1
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+#define HAVE_FONTCONFIG_FONTCONFIG_H 1
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+#define HAVE_FUTIMESAT 1
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#define HAVE_GETADDRINFO 1
+
+/* Define to 1 if you have the `getdirentries' function. */
+#define HAVE_GETDIRENTRIES 1
+
+/* Define to 1 if you have the `getnameinfo' function. */
+#define HAVE_GETNAMEINFO 1
+
+/* Define to 1 if you have the `getnetbyname' function. */
+#define HAVE_GETNETBYNAME 1
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+#define HAVE_GETPAGESIZE 1
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+#define HAVE_GETPWUID 1
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+#define HAVE_GETUID 1
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+#define HAVE_GRP_H 1
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+#define HAVE_GSM_GSM_H 1
+
+/* Define to 1 if you have the <gsm.h> header file. */
+#define HAVE_GSM_H 1
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+#define HAVE_HAL_LIBHAL_H 1
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+/* #undef HAVE_IEEEFP_H */
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+/* #undef HAVE_IO_H */
+
+/* Define to 1 if you have the `isinf' function. */
+#define HAVE_ISINF 1
+
+/* Define to 1 if you have the `isnan' function. */
+#define HAVE_ISNAN 1
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+#define HAVE_LBER_H 1
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+#define HAVE_LCMS_H 1
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+#define HAVE_LDAP_H 1
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+#define HAVE_LIBXML_PARSER_H 1
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+#define HAVE_LIBXSLT_PATTERN_H 1
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+#define HAVE_LIBXSLT_TRANSFORM_H 1
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+#define HAVE_LINK_H 1
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+#define HAVE_LINUX_22_JOYSTICK_API 1
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+#define HAVE_LINUX_CAPI_H 1
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+#define HAVE_LINUX_CDROM_H 1
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+#define HAVE_LINUX_GETHOSTBYNAME_R_6 1
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+#define HAVE_LINUX_HDREG_H 1
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+#define HAVE_LINUX_INPUT_H 1
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+#define HAVE_LINUX_IOCTL_H 1
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+#define HAVE_LINUX_IPX_H 1
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+#define HAVE_LINUX_IRDA_H 1
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+#define HAVE_LINUX_JOYSTICK_H 1
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+#define HAVE_LINUX_MAJOR_H 1
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+#define HAVE_LINUX_PARAM_H 1
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+#define HAVE_LINUX_SERIAL_H 1
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+#define HAVE_LINUX_TYPES_H 1
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+#define HAVE_MMAP 1
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+#define HAVE_MPG123_H 1
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+#define HAVE_NCURSES_H 1
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+#define HAVE_NETINET_IF_ETHER_H 1
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+#define HAVE_NETINET_IN_SYSTM_H 1
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+#define HAVE_NETINET_IP_H 1
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+#define HAVE_NETINET_IP_ICMP_H 1
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+#define HAVE_NETINET_TCP_H 1
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+#define HAVE_NETINET_UDP_H 1
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+#define HAVE_NETIPX_IPX_H 1
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+#define HAVE_NET_IF_ARP_H 1
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H 1
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+#define HAVE_NET_ROUTE_H 1
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+#define HAVE_NS_MSG__MSG_PTR 1
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+#define HAVE_OPENSSL_ERR_H 1
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+#define HAVE_OPENSSL_SSL_H 1
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+#define HAVE_PID_T 1
+
+/* Define to 1 if you have the `pipe2' function. */
+#define HAVE_PIPE2 1
+
+/* Define to 1 if you have the <png.h> header file. */
+#define HAVE_PNG_H 1
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+#define HAVE_PPDEV 1
+
+/* Define to 1 if you have the `prctl' function. */
+#define HAVE_PRCTL 1
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+/* #undef HAVE_PROCESS_H */
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+#define HAVE_PTHREAD_GETATTR_NP 1
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#define HAVE_PTHREAD_H 1
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#define HAVE_PWD_H 1
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+#define HAVE_RESOLV 1
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#define HAVE_RESOLV_H 1
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+#define HAVE_SCHED_SETAFFINITY 1
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+#define HAVE_SCSI_SCSI_H 1
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+#define HAVE_SCSI_SCSI_IOCTL_H 1
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+#define HAVE_SCSI_SG_H 1
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+#define HAVE_SETRLIMIT 1
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+#define HAVE_SG_IO_HDR_T_INTERFACE_ID 1
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#define HAVE_SIGALTSTACK 1
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+#define HAVE_SIGINFO_T_SI_FD 1
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+/* #undef HAVE_SPAWNVP */
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#define HAVE_STROPTS_H 1
+
+/* Define to 1 if you have the `strtold' function. */
+#define HAVE_STRTOLD 1
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+#define HAVE_STRUCT_FF_EFFECT_DIRECTION 1
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FRSIZE 1
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+#define HAVE_SYMLINK 1
+
+/* Define to 1 if you have the <syscall.h> header file. */
+#define HAVE_SYSCALL_H 1
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+#define HAVE_SYS_ASOUNDLIB_H 1
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+/* #undef HAVE_SYS_ELF32_H */
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+#define HAVE_SYS_EPOLL_H 1
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+#define HAVE_SYS_INOTIFY_H 1
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#define HAVE_SYS_MMAN_H 1
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+#define HAVE_SYS_PRCTL_H 1
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+#define HAVE_SYS_PTRACE_H 1
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define HAVE_SYS_RESOURCE_H 1
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+#define HAVE_SYS_SHM_H 1
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+#define HAVE_SYS_SIGNAL_H 1
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+#define HAVE_SYS_SOCKETVAR_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+#define HAVE_SYS_SYSCALL_H 1
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#define HAVE_SYS_SYSCTL_H 1
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+#define HAVE_SYS_USER_H 1
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#define HAVE_SYS_UTSNAME_H 1
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+#define HAVE_SYS_VM86_H 1
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+#define HAVE_UCONTEXT_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+/* #undef HAVE_ZLIB */
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+/* #undef HAVE__PCLOSE */
+
+/* Define to 1 if you have the `_popen' function. */
+/* #undef HAVE__POPEN */
+
+/* Define to 1 if you have the `_snprintf' function. */
+/* #undef HAVE__SNPRINTF */
+
+/* Define to 1 if you have the `_spawnvp' function. */
+/* #undef HAVE__SPAWNVP */
+
+/* Define to 1 if you have the `_strdup' function. */
+/* #undef HAVE__STRDUP */
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+/* #undef HAVE__VSNPRINTF */
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel at winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.so"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#define _FILE_OFFSET_BITS 64
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl " #name suffix "\n\t.type " #name suffix ", at function\n" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc\n\t.previous");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".type " __ASM_NAME(name) ", at function"
+
+/* Define to a macro to generate an assembly function with C calling
+   convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) ""
+
+/* Define to a macro to generate an assembly function with stdcall calling
+   convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in
new file mode 100644
index 0000000..01e484e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in
@@ -0,0 +1,1412 @@
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+#ifndef __WINE_CONFIG_H
+#define __WINE_CONFIG_H
+#ifndef WINE_CROSSTEST
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#undef DECLSPEC_HOTPATCH
+
+/* Define to the file extension for executables. */
+#undef EXEEXT
+
+/* Define to 1 if you have the <alias.h> header file. */
+#undef HAVE_ALIAS_H
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+#undef HAVE_ALSA_ASOUNDLIB_H
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+#undef HAVE_AL_AL_H
+
+/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>
+   header file. */
+#undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+#undef HAVE_ARPA_NAMESER_H
+
+/* Define to 1 if you have the `asctime_r' function. */
+#undef HAVE_ASCTIME_R
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#undef HAVE_ASM_TYPES_H
+
+/* Define to 1 if you have the <asm/user.h> header file. */
+#undef HAVE_ASM_USER_H
+
+/* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */
+#undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H
+
+/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */
+#undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+#undef HAVE_AUDIOUNIT_AUDIOUNIT_H
+
+/* Define to 1 if you have the `AUGraphAddNode' function. */
+#undef HAVE_AUGRAPHADDNODE
+
+/* Define to 1 if you have the <capi20.h> header file. */
+#undef HAVE_CAPI20_H
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+#undef HAVE_CARBON_CARBON_H
+
+/* Define to 1 if you have the `chsize' function. */
+#undef HAVE_CHSIZE
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the <CL/cl.h> header file. */
+#undef HAVE_CL_CL_H
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+#undef HAVE_COREAUDIO_COREAUDIO_H
+
+/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */
+#undef HAVE_CORESERVICES_CORESERVICES_H
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+#undef HAVE_CUPS_CUPS_H
+
+/* Define to 1 if you have the <curses.h> header file. */
+#undef HAVE_CURSES_H
+
+/* Define if you have the daylight variable */
+#undef HAVE_DAYLIGHT
+
+/* Define to 1 if you have the <direct.h> header file. */
+#undef HAVE_DIRECT_H
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+   file. */
+#undef HAVE_DISKARBITRATION_DISKARBITRATION_H
+
+/* Define to 1 if you have the `dladdr' function. */
+#undef HAVE_DLADDR
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `dlopen' function. */
+#undef HAVE_DLOPEN
+
+/* Define to 1 if you have the <elf.h> header file. */
+#undef HAVE_ELF_H
+
+/* Define to 1 if you have the `epoll_create' function. */
+#undef HAVE_EPOLL_CREATE
+
+/* Define to 1 if you have the `fallocate' function. */
+#undef HAVE_FALLOCATE
+
+/* Define to 1 if you have the `ffs' function. */
+#undef HAVE_FFS
+
+/* Define to 1 if you have the `finite' function. */
+#undef HAVE_FINITE
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the `fnmatch' function. */
+#undef HAVE_FNMATCH
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+#undef HAVE_FONTCONFIG_FONTCONFIG_H
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `fpclass' function. */
+#undef HAVE_FPCLASS
+
+/* Define if FreeType 2 is installed */
+#undef HAVE_FREETYPE
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+#undef HAVE_FREETYPE_FREETYPE_H
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+#undef HAVE_FREETYPE_FTGLYPH_H
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+#undef HAVE_FREETYPE_FTLCDFIL_H
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+#undef HAVE_FREETYPE_FTMODAPI_H
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+#undef HAVE_FREETYPE_FTOUTLN_H
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+#undef HAVE_FREETYPE_FTSNAMES_H
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+#undef HAVE_FREETYPE_FTTRIGON_H
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+#undef HAVE_FREETYPE_FTTYPES_H
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+#undef HAVE_FREETYPE_FTWINFNT_H
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+#undef HAVE_FREETYPE_TTNAMEID_H
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+#undef HAVE_FREETYPE_TTTABLES_H
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#undef HAVE_FSBLKCNT_T
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#undef HAVE_FSFILCNT_T
+
+/* Define to 1 if you have the `fstatfs' function. */
+#undef HAVE_FSTATFS
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#undef HAVE_FSTATVFS
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+#undef HAVE_FT2BUILD_H
+
+/* Define to 1 if you have the `ftruncate' function. */
+#undef HAVE_FTRUNCATE
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+#undef HAVE_FT_TRUETYPEENGINETYPE
+
+/* Define to 1 if you have the `futimens' function. */
+#undef HAVE_FUTIMENS
+
+/* Define to 1 if you have the `futimes' function. */
+#undef HAVE_FUTIMES
+
+/* Define to 1 if you have the `futimesat' function. */
+#undef HAVE_FUTIMESAT
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `getattrlist' function. */
+#undef HAVE_GETATTRLIST
+
+/* Define to 1 if you have the `getdirentries' function. */
+#undef HAVE_GETDIRENTRIES
+
+/* Define to 1 if you have the `getnameinfo' function. */
+#undef HAVE_GETNAMEINFO
+
+/* Define to 1 if you have the `getnetbyname' function. */
+#undef HAVE_GETNETBYNAME
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#undef HAVE_GETPROTOBYNAME
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#undef HAVE_GETPROTOBYNUMBER
+
+/* Define to 1 if you have the `getpwuid' function. */
+#undef HAVE_GETPWUID
+
+/* Define to 1 if you have the `getservbyport' function. */
+#undef HAVE_GETSERVBYPORT
+
+/* Define to 1 if you have the <gettext-po.h> header file. */
+#undef HAVE_GETTEXT_PO_H
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if we have the libgphoto2 development environment */
+#undef HAVE_GPHOTO2
+
+/* Define if we have the libgphoto2_port development environment */
+#undef HAVE_GPHOTO2_PORT
+
+/* Define to 1 if you have the <grp.h> header file. */
+#undef HAVE_GRP_H
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+#undef HAVE_GSM_GSM_H
+
+/* Define to 1 if you have the <gsm.h> header file. */
+#undef HAVE_GSM_H
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define to 1 if you have the <ifaddrs.h> header file. */
+#undef HAVE_IFADDRS_H
+
+/* Define to 1 if you have the `if_nameindex' function. */
+#undef HAVE_IF_NAMEINDEX
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+#undef HAVE_INET_MIB2_H
+
+/* Define to 1 if you have the `inet_network' function. */
+#undef HAVE_INET_NETWORK
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#undef HAVE_INET_NTOP
+
+/* Define to 1 if you have the `inet_pton' function. */
+#undef HAVE_INET_PTON
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+#undef HAVE_IOHIDMANAGERCREATE
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+#undef HAVE_IOKIT_HID_IOHIDLIB_H
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+#undef HAVE_IOKIT_IOKITLIB_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the `isinf' function. */
+#undef HAVE_ISINF
+
+/* Define to 1 if you have the `isnan' function. */
+#undef HAVE_ISNAN
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+#undef HAVE_JPEGLIB_H
+
+/* Define to 1 if you have the `kqueue' function. */
+#undef HAVE_KQUEUE
+
+/* Define to 1 if you have the <kstat.h> header file. */
+#undef HAVE_KSTAT_H
+
+/* Define to 1 if you have the <lber.h> header file. */
+#undef HAVE_LBER_H
+
+/* Define if you have the LittleCMS development environment */
+#undef HAVE_LCMS2
+
+/* Define to 1 if you have the <lcms2.h> header file. */
+#undef HAVE_LCMS2_H
+
+/* Define if you have the OpenLDAP development environment */
+#undef HAVE_LDAP
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+#undef HAVE_LDAP_COUNT_REFERENCES
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+#undef HAVE_LDAP_FIRST_REFERENCE
+
+/* Define to 1 if you have the <ldap.h> header file. */
+#undef HAVE_LDAP_H
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+#undef HAVE_LDAP_NEXT_REFERENCE
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+#undef HAVE_LDAP_PARSE_REFERENCE
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+#undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+#undef HAVE_LDAP_PARSE_SORT_CONTROL
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+#undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+#undef HAVE_LDAP_PARSE_VLV_CONTROL
+
+/* Define to 1 if you have the `gettextpo' library (-lgettextpo). */
+#undef HAVE_LIBGETTEXTPO
+
+/* Define to 1 if you have the `i386' library (-li386). */
+#undef HAVE_LIBI386
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+#undef HAVE_LIBKSTAT
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+#undef HAVE_LIBOSSAUDIO
+
+/* Define to 1 if you have the `procstat' library (-lprocstat). */
+#undef HAVE_LIBPROCSTAT
+
+/* Define to 1 if you have the <libprocstat.h> header file. */
+#undef HAVE_LIBPROCSTAT_H
+
+/* Define to 1 if you have the <libproc.h> header file. */
+#undef HAVE_LIBPROC_H
+
+/* Define to 1 if you have the <libv4l1.h> header file. */
+#undef HAVE_LIBV4L1_H
+
+/* Define if you have the libxml2 library */
+#undef HAVE_LIBXML2
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+#undef HAVE_LIBXML_PARSER_H
+
+/* Define to 1 if you have the <libxml/SAX2.h> header file. */
+#undef HAVE_LIBXML_SAX2_H
+
+/* Define to 1 if you have the <libxml/xmlsave.h> header file. */
+#undef HAVE_LIBXML_XMLSAVE_H
+
+/* Define if you have the X Shape extension */
+#undef HAVE_LIBXSHAPE
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+#undef HAVE_LIBXSLT_PATTERN_H
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+#undef HAVE_LIBXSLT_TRANSFORM_H
+
+/* Define if you have the X Shm extension */
+#undef HAVE_LIBXXSHM
+
+/* Define to 1 if you have the <link.h> header file. */
+#undef HAVE_LINK_H
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+#undef HAVE_LINUX_22_JOYSTICK_API
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+#undef HAVE_LINUX_CAPI_H
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+#undef HAVE_LINUX_CDROM_H
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+#undef HAVE_LINUX_COMPILER_H
+
+/* Define to 1 if you have the <linux/filter.h> header file. */
+#undef HAVE_LINUX_FILTER_H
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+#undef HAVE_LINUX_GETHOSTBYNAME_R_6
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+#undef HAVE_LINUX_HDREG_H
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+#undef HAVE_LINUX_INPUT_H
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+#undef HAVE_LINUX_IOCTL_H
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+#undef HAVE_LINUX_IPX_H
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+#undef HAVE_LINUX_IRDA_H
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+#undef HAVE_LINUX_JOYSTICK_H
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+#undef HAVE_LINUX_MAJOR_H
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+#undef HAVE_LINUX_PARAM_H
+
+/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
+#undef HAVE_LINUX_RTNETLINK_H
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+#undef HAVE_LINUX_SERIAL_H
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+#undef HAVE_LINUX_TYPES_H
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+#undef HAVE_LINUX_UCDROM_H
+
+/* Define to 1 if you have the <linux/videodev2.h> header file. */
+#undef HAVE_LINUX_VIDEODEV2_H
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+#undef HAVE_LINUX_VIDEODEV_H
+
+/* Define to 1 if the system has the type `long long'. */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the <lwp.h> header file. */
+#undef HAVE_LWP_H
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+#undef HAVE_MACHINE_CPU_H
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+#undef HAVE_MACHINE_LIMITS_H
+
+/* Define to 1 if you have the <machine/sysarch.h> header file. */
+#undef HAVE_MACHINE_SYSARCH_H
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+#undef HAVE_MACH_MACHINE_H
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+#undef HAVE_MACH_MACH_H
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+#undef HAVE_MACH_O_DYLD_IMAGES_H
+
+/* Define to 1 if you have the <mach-o/loader.h> header file. */
+#undef HAVE_MACH_O_LOADER_H
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+#undef HAVE_MACH_O_NLIST_H
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#undef HAVE_MNTENT_H
+
+/* Define to 1 if the system has the type `mode_t'. */
+#undef HAVE_MODE_T
+
+/* Define to 1 if you have the `mousemask' function. */
+#undef HAVE_MOUSEMASK
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+#undef HAVE_MPG123_H
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+#undef HAVE_NCURSES_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+#undef HAVE_NETINET_ICMP_VAR_H
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+#undef HAVE_NETINET_IF_ETHER_H
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+#undef HAVE_NETINET_IF_INARP_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+#undef HAVE_NETINET_IN_PCB_H
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+#undef HAVE_NETINET_IN_SYSTM_H
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+#undef HAVE_NETINET_IP_H
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+#undef HAVE_NETINET_IP_ICMP_H
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+#undef HAVE_NETINET_IP_VAR_H
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+#undef HAVE_NETINET_TCP_FSM_H
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+#undef HAVE_NETINET_TCP_H
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+#undef HAVE_NETINET_TCP_TIMER_H
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+#undef HAVE_NETINET_TCP_VAR_H
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+#undef HAVE_NETINET_UDP_H
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+#undef HAVE_NETINET_UDP_VAR_H
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+#undef HAVE_NETIPX_IPX_H
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+#undef HAVE_NET_IF_ARP_H
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+#undef HAVE_NET_IF_DL_H
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#undef HAVE_NET_IF_H
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+#undef HAVE_NET_IF_TYPES_H
+
+/* Define to 1 if you have the <net/route.h> header file. */
+#undef HAVE_NET_ROUTE_H
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+#undef HAVE_NS_MSG__MSG_PTR
+
+/* Define to 1 if the system has the type `off_t'. */
+#undef HAVE_OFF_T
+
+/* Define if mkdir takes only one argument */
+#undef HAVE_ONE_ARG_MKDIR
+
+/* Define to 1 if OpenAL is available */
+#undef HAVE_OPENAL
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+#undef HAVE_OPENAL_AL_H
+
+/* Define to 1 if you have the <OpenCL/opencl.h> header file. */
+#undef HAVE_OPENCL_OPENCL_H
+
+/* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */
+#undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES
+
+/* Define to 1 if you have the `pclose' function. */
+#undef HAVE_PCLOSE
+
+/* Define to 1 if the system has the type `pid_t'. */
+#undef HAVE_PID_T
+
+/* Define to 1 if you have the `pipe2' function. */
+#undef HAVE_PIPE2
+
+/* Define to 1 if you have the <png.h> header file. */
+#undef HAVE_PNG_H
+
+/* Define to 1 if libpng has the png_set_expand_gray_1_2_4_to_8 function. */
+#undef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
+
+/* Define to 1 if you have the `poll' function. */
+#undef HAVE_POLL
+
+/* Define to 1 if you have the <poll.h> header file. */
+#undef HAVE_POLL_H
+
+/* Define to 1 if you have the `popen' function. */
+#undef HAVE_POPEN
+
+/* Define to 1 if you have the `port_create' function. */
+#undef HAVE_PORT_CREATE
+
+/* Define to 1 if you have the <port.h> header file. */
+#undef HAVE_PORT_H
+
+/* Define if we can use ppdev.h for parallel port access */
+#undef HAVE_PPDEV
+
+/* Define to 1 if you have the `prctl' function. */
+#undef HAVE_PRCTL
+
+/* Define to 1 if you have the `pread' function. */
+#undef HAVE_PREAD
+
+/* Define to 1 if you have the <process.h> header file. */
+#undef HAVE_PROCESS_H
+
+/* Define to 1 if you have the `proc_pidinfo' function. */
+#undef HAVE_PROC_PIDINFO
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+#undef HAVE_PTHREAD_ATTR_GET_NP
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+#undef HAVE_PTHREAD_GETATTR_NP
+
+/* Define to 1 if you have the `pthread_getthreadid_np' function. */
+#undef HAVE_PTHREAD_GETTHREADID_NP
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+#undef HAVE_PTHREAD_GET_STACKADDR_NP
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+#undef HAVE_PTHREAD_GET_STACKSIZE_NP
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+#undef HAVE_PTHREAD_NP_H
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the `pwrite' function. */
+#undef HAVE_PWRITE
+
+/* Define to 1 if you have the <QuickTime/ImageCompression.h> header file. */
+#undef HAVE_QUICKTIME_IMAGECOMPRESSION_H
+
+/* Define to 1 if you have the `readdir' function. */
+#undef HAVE_READDIR
+
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
+
+/* Define to 1 if the system has the type `request_sense'. */
+#undef HAVE_REQUEST_SENSE
+
+/* Define if you have the resolver library and header */
+#undef HAVE_RESOLV
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#undef HAVE_RESOLV_H
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+#undef HAVE_SCHED_SETAFFINITY
+
+/* Define to 1 if you have the `sched_yield' function. */
+#undef HAVE_SCHED_YIELD
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+#undef HAVE_SCSIREQ_T_CMD
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+#undef HAVE_SCSI_SCSI_H
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+#undef HAVE_SCSI_SCSI_IOCTL_H
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+#undef HAVE_SCSI_SG_H
+
+/* Define to 1 if you have the <Security/Security.h> header file. */
+#undef HAVE_SECURITY_SECURITY_H
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `sendmsg' function. */
+#undef HAVE_SENDMSG
+
+/* Define to 1 if you have the `setproctitle' function. */
+#undef HAVE_SETPROCTITLE
+
+/* Define to 1 if you have the `setrlimit' function. */
+#undef HAVE_SETRLIMIT
+
+/* Define to 1 if you have the `settimeofday' function. */
+#undef HAVE_SETTIMEOFDAY
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+#undef HAVE_SG_IO_HDR_T_INTERFACE_ID
+
+/* Define if sigaddset is supported */
+#undef HAVE_SIGADDSET
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#undef HAVE_SIGALTSTACK
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+#undef HAVE_SIGINFO_T_SI_FD
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#undef HAVE_SIGPROCMASK
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#undef HAVE_SIGSET_T
+
+/* Define to 1 if the system has the type `size_t'. */
+#undef HAVE_SIZE_T
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `socketpair' function. */
+#undef HAVE_SOCKETPAIR
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#undef HAVE_SSIZE_T
+
+/* Define to 1 if you have the `SSLCopyPeerCertificates' function. */
+#undef HAVE_SSLCOPYPEERCERTIFICATES
+
+/* Define to 1 if you have the `statfs' function. */
+#undef HAVE_STATFS
+
+/* Define to 1 if you have the `statvfs' function. */
+#undef HAVE_STATVFS
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
+/* Define to 1 if you have the `strtold' function. */
+#undef HAVE_STRTOLD
+
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the `strtoull' function. */
+#undef HAVE_STRTOULL
+
+/* Define to 1 if `d_reclen' is a member of `struct dirent'. */
+#undef HAVE_STRUCT_DIRENT_D_RECLEN
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+#undef HAVE_STRUCT_FF_EFFECT_DIRECTION
+
+/* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */
+#undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+#undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST
+
+/* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */
+#undef HAVE_STRUCT_IFREQ_IFR_HWADDR
+
+/* Define to 1 if `ips_total' is a member of `struct ipstat'. */
+#undef HAVE_STRUCT_IPSTAT_IPS_TOTAL
+
+/* Define to 1 if `ips_total' is a member of `struct ip_stats'. */
+#undef HAVE_STRUCT_IP_STATS_IPS_TOTAL
+
+/* Define to 1 if the system has the type `struct link_map'. */
+#undef HAVE_STRUCT_LINK_MAP
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+#undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#undef HAVE_STRUCT_MTGET_MT_BLKNO
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+#undef HAVE_STRUCT_MTGET_MT_BLKSIZ
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#undef HAVE_STRUCT_MTGET_MT_GSTAT
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#undef HAVE_STRUCT_OPTION_NAME
+
+/* Define to 1 if the system has the type `struct r_debug'. */
+#undef HAVE_STRUCT_R_DEBUG
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+#undef HAVE_STRUCT_SOCKADDR_SA_LEN
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+#undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_BAVAIL
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_BFREE
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FAVAIL
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FFREE
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FRSIZE
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_NAMELEN
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_BLOCKS
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM
+
+/* Define to 1 if `st_atimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMESPEC
+
+/* Define to 1 if `st_birthtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIM
+
+/* Define to 1 if `st_birthtime' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIME
+
+/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIM
+
+/* Define to 1 if `st_ctimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIMESPEC
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM
+
+/* Define to 1 if `st_mtimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIMESPEC
+
+/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT___ST_BIRTHTIM
+
+/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT___ST_BIRTHTIME
+
+/* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */
+#undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT
+
+/* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */
+#undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT
+
+/* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */
+#undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+#undef HAVE_STRUCT_XINPGEN
+
+/* Define to 1 if the system has the type `struct __res_state'. */
+#undef HAVE_STRUCT___RES_STATE
+
+/* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */
+#undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6
+
+/* Define to 1 if you have the `symlink' function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <syscall.h> header file. */
+#undef HAVE_SYSCALL_H
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+#undef HAVE_SYS_ASOUNDLIB_H
+
+/* Define to 1 if you have the <sys/attr.h> header file. */
+#undef HAVE_SYS_ATTR_H
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+#undef HAVE_SYS_CDIO_H
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#undef HAVE_SYS_ELF32_H
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+#undef HAVE_SYS_EPOLL_H
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+#undef HAVE_SYS_EVENT_H
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+#undef HAVE_SYS_EXEC_ELF_H
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+#undef HAVE_SYS_INOTIFY_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#undef HAVE_SYS_IPC_H
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+#undef HAVE_SYS_LIMITS_H
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+#undef HAVE_SYS_LINK_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+#undef HAVE_SYS_MODEM_H
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#undef HAVE_SYS_MOUNT_H
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#undef HAVE_SYS_MSG_H
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#undef HAVE_SYS_MTIO_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#undef HAVE_SYS_POLL_H
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+#undef HAVE_SYS_PRCTL_H
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+#undef HAVE_SYS_PROTOSW_H
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+#undef HAVE_SYS_PTRACE_H
+
+/* Define to 1 if you have the <sys/queue.h> header file. */
+#undef HAVE_SYS_QUEUE_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+#undef HAVE_SYS_SCSIIO_H
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+#undef HAVE_SYS_SHM_H
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+#undef HAVE_SYS_SIGNAL_H
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+#undef HAVE_SYS_SOCKETVAR_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+#undef HAVE_SYS_SOCKIO_H
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#undef HAVE_SYS_STATFS_H
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#undef HAVE_SYS_STATVFS_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+#undef HAVE_SYS_STRTIO_H
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+#undef HAVE_SYS_SYSCALL_H
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#undef HAVE_SYS_SYSCTL_H
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+#undef HAVE_SYS_THR_H
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+#undef HAVE_SYS_TIHDR_H
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+#undef HAVE_SYS_TIMEOUT_H
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#undef HAVE_SYS_TIMES_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#undef HAVE_SYS_UN_H
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+#undef HAVE_SYS_USER_H
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#undef HAVE_SYS_VFS_H
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+#undef HAVE_SYS_VM86_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the `tcdrain' function. */
+#undef HAVE_TCDRAIN
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the `thr_kill2' function. */
+#undef HAVE_THR_KILL2
+
+/* Define to 1 if you have the <tiffio.h> header file. */
+#undef HAVE_TIFFIO_H
+
+/* Define to 1 if you have the `timegm' function. */
+#undef HAVE_TIMEGM
+
+/* Define if you have the timezone variable */
+#undef HAVE_TIMEZONE
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+#undef HAVE_UCONTEXT_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+#undef HAVE_VALGRIND_MEMCHECK_H
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#undef HAVE_VALGRIND_VALGRIND_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+#undef HAVE_X11_EXTENSIONS_SHAPE_H
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XF86VMODE_H
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XINERAMA_H
+
+/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XINPUT2_H
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XINPUT_H
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XRANDR_H
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XRENDER_H
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XSHM_H
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+#undef HAVE_X11_XCURSOR_XCURSOR_H
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+#undef HAVE_X11_XKBLIB_H
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+#undef HAVE_X11_XLIB_H
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+#undef HAVE_X11_XUTIL_H
+
+/* Define to 1 if `xcookie' is a member of `XEvent'. */
+#undef HAVE_XEVENT_XCOOKIE
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+#undef HAVE_XICCALLBACK_CALLBACK
+
+/* Define if you have the XKB extension */
+#undef HAVE_XKB
+
+/* Define if libxml2 has the xmlDocProperties enum */
+#undef HAVE_XMLDOC_PROPERTIES
+
+/* Define if libxml2 has the xmlFirstElementChild function */
+#undef HAVE_XMLFIRSTELEMENTCHILD
+
+/* Define if libxml2 has the xmlNewDocPI function */
+#undef HAVE_XMLNEWDOCPI
+
+/* Define if libxml2 has the xmlReadMemory function */
+#undef HAVE_XMLREADMEMORY
+
+/* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */
+#undef HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS
+
+/* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */
+#undef HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS
+
+/* Define if Xrender has the XRenderCreateLinearGradient function */
+#undef HAVE_XRENDERCREATELINEARGRADIENT
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+#undef HAVE_XRENDERSETPICTURETRANSFORM
+
+/* Define if Xrandr has the XRRGetScreenResources function */
+#undef HAVE_XRRGETSCREENRESOURCES
+
+/* Define to 1 if you have the `z' library (-lz). */
+#undef HAVE_ZLIB
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define to 1 if you have the `_finite' function. */
+#undef HAVE__FINITE
+
+/* Define to 1 if you have the `_isnan' function. */
+#undef HAVE__ISNAN
+
+/* Define to 1 if you have the `_pclose' function. */
+#undef HAVE__PCLOSE
+
+/* Define to 1 if you have the `_popen' function. */
+#undef HAVE__POPEN
+
+/* Define to 1 if you have the `_snprintf' function. */
+#undef HAVE__SNPRINTF
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#undef HAVE__SPAWNVP
+
+/* Define to 1 if you have the `_strdup' function. */
+#undef HAVE__STRDUP
+
+/* Define to 1 if you have the `_stricmp' function. */
+#undef HAVE__STRICMP
+
+/* Define to 1 if you have the `_strnicmp' function. */
+#undef HAVE__STRNICMP
+
+/* Define to 1 if you have the `_strtoi64' function. */
+#undef HAVE__STRTOI64
+
+/* Define to 1 if you have the `_strtoui64' function. */
+#undef HAVE__STRTOUI64
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#undef HAVE__VSNPRINTF
+
+/* Define to 1 if you have the `__res_getservers' function. */
+#undef HAVE___RES_GETSERVERS
+
+/* Define to 1 if you have the `__res_get_state' function. */
+#undef HAVE___RES_GET_STATE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to the soname of the libcapi20 library. */
+#undef SONAME_LIBCAPI20
+
+/* Define to the soname of the libcups library. */
+#undef SONAME_LIBCUPS
+
+/* Define to the soname of the libcurses library. */
+#undef SONAME_LIBCURSES
+
+/* Define to the soname of the libdbus-1 library. */
+#undef SONAME_LIBDBUS_1
+
+/* Define to the soname of the libfontconfig library. */
+#undef SONAME_LIBFONTCONFIG
+
+/* Define to the soname of the libfreetype library. */
+#undef SONAME_LIBFREETYPE
+
+/* Define to the soname of the libGL library. */
+#undef SONAME_LIBGL
+
+/* Define to the soname of the libgnutls library. */
+#undef SONAME_LIBGNUTLS
+
+/* Define to the soname of the libgsm library. */
+#undef SONAME_LIBGSM
+
+/* Define to the soname of the libhal library. */
+#undef SONAME_LIBHAL
+
+/* Define to the soname of the libjpeg library. */
+#undef SONAME_LIBJPEG
+
+/* Define to the soname of the libncurses library. */
+#undef SONAME_LIBNCURSES
+
+/* Define to the soname of the libodbc library. */
+#undef SONAME_LIBODBC
+
+/* Define to the soname of the libopenal library. */
+#undef SONAME_LIBOPENAL
+
+/* Define to the soname of the libOSMesa library. */
+#undef SONAME_LIBOSMESA
+
+/* Define to the soname of the libpng library. */
+#undef SONAME_LIBPNG
+
+/* Define to the soname of the libsane library. */
+#undef SONAME_LIBSANE
+
+/* Define to the soname of the libtiff library. */
+#undef SONAME_LIBTIFF
+
+/* Define to the soname of the libv4l1 library. */
+#undef SONAME_LIBV4L1
+
+/* Define to the soname of the libX11 library. */
+#undef SONAME_LIBX11
+
+/* Define to the soname of the libXcomposite library. */
+#undef SONAME_LIBXCOMPOSITE
+
+/* Define to the soname of the libXcursor library. */
+#undef SONAME_LIBXCURSOR
+
+/* Define to the soname of the libXext library. */
+#undef SONAME_LIBXEXT
+
+/* Define to the soname of the libXi library. */
+#undef SONAME_LIBXI
+
+/* Define to the soname of the libXinerama library. */
+#undef SONAME_LIBXINERAMA
+
+/* Define to the soname of the libXrandr library. */
+#undef SONAME_LIBXRANDR
+
+/* Define to the soname of the libXrender library. */
+#undef SONAME_LIBXRENDER
+
+/* Define to the soname of the libxslt library. */
+#undef SONAME_LIBXSLT
+
+/* Define to the soname of the libXxf86vm library. */
+#undef SONAME_LIBXXF86VM
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#undef __ASM_CFI
+
+/* Define to a macro to define an assembly function */
+#undef __ASM_DEFINE_FUNC
+
+/* Define to a macro to generate an assembly function directive */
+#undef __ASM_FUNC
+
+/* Define to a macro to generate an assembly function with C calling
+   convention */
+#undef __ASM_GLOBAL_FUNC
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#undef __ASM_NAME
+
+/* Define to a macro to generate an stdcall suffix */
+#undef __ASM_STDCALL
+
+/* Define to a macro to generate an assembly function with stdcall calling
+   convention */
+#undef __ASM_STDCALL_FUNC
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+#endif /* WINE_CROSSTEST */
+#endif /* __WINE_CONFIG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h
new file mode 100644
index 0000000..a639e36
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h
@@ -0,0 +1,1275 @@
+/* include/config.h.  Generated from config.h.in by configure.  */
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+#include <stddef.h>
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH /* */
+
+/* Define to the file extension for executables. */
+#define EXEEXT ".exe"
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+/* #undef HAVE_ALSA_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+/* #undef HAVE_AL_AL_H */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+/* #undef HAVE_ARPA_NAMESER_H */
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+/* #undef HAVE_CAPI20_H */
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+/* #undef HAVE_CUPS_CUPS_H */
+
+/* Define to 1 if you have the <curses.h> header file. */
+/* #undef HAVE_CURSES_H */
+
+/* Define if you have the daylight variable */
+/* #undef HAVE_DAYLIGHT*/
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+/* #undef HAVE_DBUS_DBUS_H */
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+   file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+/* #undef HAVE_DLADDR */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H*/
+
+/* Define to 1 if you have the `dlopen' function. */
+/* #undef HAVE_DLOPEN*/
+
+/* Define to 1 if you have the <elf.h> header file. */
+/* #undef HAVE_ELF_H*/
+
+/* Define to 1 if you have the `epoll_create' function. */
+/* #undef HAVE_EPOLL_CREATE */
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+/* #undef HAVE_FONTCONFIG_FONTCONFIG_H */
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+/* #undef HAVE_FUTIMESAT */
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `getdirentries' function. */
+/* #undef HAVE_GETDIRENTRIES */
+
+/* Define to 1 if you have the `getnameinfo' function. */
+/* #undef HAVE_GETNAMEINFO */
+
+/* Define to 1 if you have the `getnetbyname' function. */
+/* #undef HAVE_GETNETBYNAME */
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+/* #undef HAVE_GETPAGESIZE */
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef HAVE_GETPWUID */
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+/* #undef HAVE_GETUID */
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+/* #undef HAVE_GRP_H */
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+/* #undef HAVE_GSM_GSM_H */
+
+/* Define to 1 if you have the <gsm.h> header file. */
+/* #undef HAVE_GSM_H */
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+/* #undef HAVE_HAL_LIBHAL_H */
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#define HAVE_IEEEFP_H 1
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define to 1 if you have the `isinf' function. */
+/* #undef HAVE_ISINF */
+
+/* Define to 1 if you have the `isnan' function. */
+/* #undef HAVE_ISNAN */
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+/* #undef HAVE_LBER_H */
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+/* #undef HAVE_LCMS_H */
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+/* #undef HAVE_LDAP_H */
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+/* #undef HAVE_LIBXML_PARSER_H */
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+/* #undef HAVE_LIBXSLT_PATTERN_H */
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+/* #undef HAVE_LIBXSLT_TRANSFORM_H */
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+/* #undef HAVE_LINK_H */
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+/* #undef HAVE_LINUX_22_JOYSTICK_API */
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+/* #undef HAVE_LINUX_CAPI_H */
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+/* #undef HAVE_LINUX_CDROM_H */
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+/* #undef HAVE_LINUX_HDREG_H */
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+/* #undef HAVE_LINUX_INPUT_H */
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+/* #undef HAVE_LINUX_IOCTL_H */
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+/* #undef HAVE_LINUX_IPX_H */
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+/* #undef HAVE_LINUX_IRDA_H */
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+/* #undef HAVE_LINUX_JOYSTICK_H */
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+/* #undef HAVE_LINUX_MAJOR_H */
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+/* #undef HAVE_LINUX_PARAM_H */
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+/* #undef HAVE_LINUX_SERIAL_H */
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+/* #undef HAVE_LINUX_TYPES_H */
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+/* #undef HAVE_MPG123_H */
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+/* #undef HAVE_NCURSES_H */
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+/* #undef HAVE_NETINET_IF_ETHER_H */
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+/* #undef HAVE_NETINET_IN_H */
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+/* #undef HAVE_NETINET_IN_SYSTM_H */
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+/* #undef HAVE_NETINET_IP_H */
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+/* #undef HAVE_NETINET_IP_ICMP_H */
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* #undef HAVE_NETINET_TCP_H */
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+/* #undef HAVE_NETINET_UDP_H */
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+/* #undef HAVE_NETIPX_IPX_H */
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+/* #undef HAVE_NET_IF_ARP_H */
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+/* #undef HAVE_NET_IF_H */
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+/* #undef HAVE_NET_ROUTE_H */
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+/* #undef HAVE_NS_MSG__MSG_PTR */
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+/* #undef HAVE_OPENSSL_ERR_H */
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+/* #undef HAVE_OPENSSL_SSL_H */
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+/* #undef HAVE_PID_T */
+
+/* Define to 1 if you have the `pipe2' function. */
+/* #undef HAVE_PIPE2 */
+
+/* Define to 1 if you have the <png.h> header file. */
+/* #undef HAVE_PNG_H */
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+/* #undef HAVE_PPDEV */
+
+/* Define to 1 if you have the `prctl' function. */
+/* #undef HAVE_PRCTL */
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+/* #undef HAVE_PTHREAD_GETATTR_NP */
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+/* #undef HAVE_PWD_H */
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+/* #undef HAVE_RESOLV */
+
+/* Define to 1 if you have the <resolv.h> header file. */
+/* #undef HAVE_RESOLV_H */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+/* #undef HAVE_SCHED_SETAFFINITY */
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+/* #undef HAVE_SCSI_SCSI_H */
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+/* #undef HAVE_SCSI_SCSI_IOCTL_H */
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+/* #undef HAVE_SCSI_SG_H */
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+/* #undef HAVE_SETRLIMIT */
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+/* #undef HAVE_SIGALTSTACK */
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T_SI_FD */
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+/* #undef HAVE_SNPRINTF */
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+#define HAVE_SPAWNVP 1
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+/* #undef HAVE_STDINT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+/* #undef HAVE_STROPTS_H */
+
+/* Define to 1 if you have the `strtold' function. */
+/* #undef HAVE_STRTOLD */
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+/* #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID */
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef HAVE_SYMLINK */
+
+/* Define to 1 if you have the <syscall.h> header file. */
+/* #undef HAVE_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+/* #undef HAVE_SYS_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#define HAVE_SYS_ELF32_H 1
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+/* #undef HAVE_SYS_EPOLL_H */
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+/* #undef HAVE_SYS_INOTIFY_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+/* #undef HAVE_SYS_MMAN_H */
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+/* #undef HAVE_SYS_PRCTL_H */
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+/* #undef HAVE_SYS_PTRACE_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef HAVE_SYS_RESOURCE_H */
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+/* #undef HAVE_SYS_SHM_H */
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+/* #undef HAVE_SYS_SIGNAL_H */
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+/* #undef HAVE_SYS_SOCKETVAR_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+/* #undef HAVE_SYS_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+/* #undef HAVE_SYS_USER_H */
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+/* #undef HAVE_SYS_UTSNAME_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+/* #undef HAVE_SYS_VM86_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+/* #undef HAVE_UCONTEXT_H */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+/* #undef HAVE_VSNPRINTF */
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_ZLIB 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+#define HAVE__PCLOSE 1
+
+/* Define to 1 if you have the `_popen' function. */
+#define HAVE__POPEN 1
+
+/* Define to 1 if you have the `_snprintf' function. */
+#define HAVE__SNPRINTF 1
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#define HAVE__SPAWNVP 1
+
+/* Define to 1 if you have the `_strdup' function. */
+#define HAVE__STRDUP 1
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#define HAVE__VSNPRINTF 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel at winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.dll"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl _" #name suffix "\n\t.def _" #name suffix "; .scl 2; .type 32; .endef\n_" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"
+
+/* Define to a macro to generate an assembly function with C calling
+   convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) "_" name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) "@" #args
+
+/* Define to a macro to generate an assembly function with stdcall calling
+   convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl
new file mode 100644
index 0000000..a20cad9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2002 Lionel Ulmer
+ * Copyright (C) 2004 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+[
+    version(1.0),
+    uuid(56a868b0-0ad4-11ce-b03a-0020af0ba770)
+]
+library QuartzTypeLib
+{
+    importlib("stdole2.tlb");
+
+    typedef LONG OAFilterState;
+    typedef LONG_PTR OAHWND;
+    typedef LONG_PTR OAEVENT;
+
+    cpp_quote("#ifndef REFTIME_DEFINED")
+    cpp_quote("#define REFTIME_DEFINED")
+    typedef DOUBLE REFTIME;
+    cpp_quote("#endif")
+
+    /***************************************************************************
+     * IMediaControl interface
+     */
+    [
+        object,
+        uuid(56a868b1-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IMediaControl : IDispatch
+    {
+        HRESULT Run();
+        HRESULT Pause();
+        HRESULT Stop();
+        HRESULT GetState( [in] LONG msTimeout, [out] OAFilterState *pfs );
+        HRESULT RenderFile( [in] BSTR strFilename );
+        HRESULT AddSourceFilter( [in] BSTR strFilename, [out] IDispatch **ppUnk );
+        [propget] HRESULT FilterCollection( [out] IDispatch **ppUnk );
+        [propget] HRESULT RegFilterCollection( [out] IDispatch **ppUnk );
+        HRESULT StopWhenReady();
+    }
+
+
+    /***************************************************************************
+     * IBasicAudio interface
+     */
+    [
+        object,
+        uuid(56a868b3-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IBasicAudio : IDispatch
+    {
+        [propput] HRESULT Volume( [in] LONG lVolume );
+        [propget] HRESULT Volume( [out] LONG *plVolume );
+        [propput] HRESULT Balance( [in] LONG lBalance );
+        [propget] HRESULT Balance( [out] LONG *plBalance );
+    }
+
+
+    /***************************************************************************
+     * IVideoWindow interface
+     */
+    [
+        object,
+        uuid(56a868b4-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IVideoWindow : IDispatch
+    {
+        [propput] HRESULT Caption( [in] BSTR strCaption );
+        [propget] HRESULT Caption( [out] BSTR *strCaption );
+        [propput] HRESULT WindowStyle( [in] LONG WindowStyle );
+        [propget] HRESULT WindowStyle( [out] LONG *WindowStyle );
+        [propput] HRESULT WindowStyleEx( [in] LONG WindowStyleEx );
+        [propget] HRESULT WindowStyleEx( [out] LONG *WindowStyleEx );
+        [propput] HRESULT AutoShow( [in] LONG AutoShow );
+        [propget] HRESULT AutoShow( [out] LONG *AutoShow );
+        [propput] HRESULT WindowState( [in] LONG WindowState );
+        [propget] HRESULT WindowState( [out] LONG *WindowState );
+        [propput] HRESULT BackgroundPalette( [in] LONG BackgroundPalette );
+        [propget] HRESULT BackgroundPalette( [out] LONG *pBackgroundPalette );
+        [propput] HRESULT Visible( [in] LONG Visible );
+        [propget] HRESULT Visible( [out] LONG *pVisible );
+        [propput] HRESULT Left( [in] LONG Left );
+        [propget] HRESULT Left( [out] LONG *pLeft );
+        [propput] HRESULT Width( [in] LONG Width );
+        [propget] HRESULT Width( [out] LONG *pWidth );
+        [propput] HRESULT Top( [in] LONG Top );
+        [propget] HRESULT Top( [out] LONG *pTop );
+        [propput] HRESULT Height( [in] LONG Height );
+        [propget] HRESULT Height( [out] LONG *pHeight );
+        [propput] HRESULT Owner( [in] OAHWND Owner );
+        [propget] HRESULT Owner( [out] OAHWND *Owner );
+        [propput] HRESULT MessageDrain( [in] OAHWND Drain );
+        [propget] HRESULT MessageDrain( [out] OAHWND *Drain );
+        [propget] HRESULT BorderColor( [out] LONG *Color );
+        [propput] HRESULT BorderColor( [in] LONG Color );
+        [propget] HRESULT FullScreenMode( [out] LONG *FullScreenMode );
+        [propput] HRESULT FullScreenMode( [in] LONG FullScreenMode );
+        HRESULT SetWindowForeground( [in] LONG Focus );
+        HRESULT NotifyOwnerMessage( [in] OAHWND hwnd, [in] LONG uMsg, [in] LONG_PTR wParam, [in] LONG_PTR lParam );
+        HRESULT SetWindowPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );
+        HRESULT GetWindowPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT GetMinIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT GetMaxIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT GetRestorePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT HideCursor( [in] LONG HideCursor );
+        HRESULT IsCursorHidden( [out] LONG *CursorHidden );
+    }
+
+
+    /***************************************************************************
+     * IBasicVideo interface
+     */
+    [
+        object,
+        uuid(56a868b5-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IBasicVideo : IDispatch
+    {
+        [propget] HRESULT AvgTimePerFrame( [out] REFTIME *pAvgTimePerFrame );
+        [propget] HRESULT BitRate( [out] LONG *pBitRate );
+        [propget] HRESULT BitErrorRate( [out] LONG *pBitErrorRate );
+        [propget] HRESULT VideoWidth( [out] LONG *pVideoWidth );
+        [propget] HRESULT VideoHeight( [out] LONG *pVideoHeight );
+        [propput] HRESULT SourceLeft( [in] LONG SourceLeft );
+        [propget] HRESULT SourceLeft( [out] LONG *pSourceLeft );
+        [propput] HRESULT SourceWidth( [in] LONG SourceWidth );
+        [propget] HRESULT SourceWidth( [out] LONG *pSourceWidth );
+        [propput] HRESULT SourceTop( [in] LONG SourceTop );
+        [propget] HRESULT SourceTop( [out] LONG *pSourceTop );
+        [propput] HRESULT SourceHeight( [in] LONG SourceHeight );
+        [propget] HRESULT SourceHeight( [out] LONG *pSourceHeight );
+        [propput] HRESULT DestinationLeft( [in] LONG DestinationLeft );
+        [propget] HRESULT DestinationLeft( [out] LONG *pDestinationLeft );
+        [propput] HRESULT DestinationWidth( [in] LONG DestinationWidth );
+        [propget] HRESULT DestinationWidth( [out] LONG *pDestinationWidth );
+        [propput] HRESULT DestinationTop( [in] LONG DestinationTop );
+        [propget] HRESULT DestinationTop( [out] LONG *pDestinationTop );
+        [propput] HRESULT DestinationHeight( [in] LONG DestinationHeight );
+        [propget] HRESULT DestinationHeight( [out] LONG *pDestinationHeight );
+        HRESULT SetSourcePosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );
+        HRESULT GetSourcePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT SetDefaultSourcePosition();
+        HRESULT SetDestinationPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );
+        HRESULT GetDestinationPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT SetDefaultDestinationPosition();
+        HRESULT GetVideoSize( [out] LONG *pWidth, [out] LONG *pHeight );
+        HRESULT GetVideoPaletteEntries( [in] LONG StartIndex,
+                                        [in] LONG Entries,
+                                        [out] LONG *pRetrieved,
+                                        [out, size_is(Entries), length_is(*pRetrieved)] LONG *pPalette );
+        HRESULT GetCurrentImage( [in, out] LONG *pBufferSize,
+                                 [out, size_is(*pBufferSize), length_is(*pBufferSize)] LONG *pDIBImage );
+        HRESULT IsUsingDefaultSource();
+        HRESULT IsUsingDefaultDestination();
+    }
+
+    [
+        uuid(329bb360-f6ea-11d1-9038-00a0c9697298),
+        helpstring("IBasicVideo2"),
+        odl
+    ]
+
+    interface IBasicVideo2 : IBasicVideo
+    {
+        HRESULT GetPreferredAspectRatio([out] LONG *plAspectX, [out] LONG *plAspectY);
+    }
+
+
+    /***************************************************************************
+     * IMediaEvent interface
+     */
+    [
+        object,
+        uuid(56a868b6-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IMediaEvent : IDispatch
+    {
+        HRESULT GetEventHandle( [out] OAEVENT *hEvent );
+        HRESULT GetEvent( [out] LONG *lEventCode, [out] LONG_PTR *lParam1, [out] LONG_PTR *lParam2, [in] LONG msTimeout );
+        HRESULT WaitForCompletion( [in] LONG msTimeout, [out] LONG *pEvCode );
+        HRESULT CancelDefaultHandling( [in] LONG lEvCode );
+        HRESULT RestoreDefaultHandling( [in] LONG lEvCode );
+        HRESULT FreeEventParams( [in] LONG lEvCode, [in] LONG_PTR lParam1, [in] LONG_PTR lParam2 );
+    }
+
+
+    /***************************************************************************
+     * IMediaEventEx interface
+     */
+    [
+        object,
+        uuid(56a868c0-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IMediaEventEx : IMediaEvent
+    {
+        HRESULT SetNotifyWindow( [in] OAHWND hwnd, [in] LONG lMsg, [in] LONG_PTR lInstanceData );
+        HRESULT SetNotifyFlags( [in] LONG lNoNotifyFlags );
+        HRESULT GetNotifyFlags( [out] LONG *lplNoNotifyFlags );
+    }
+
+
+    /***************************************************************************
+     * IMediaPosition interface
+     */
+    [
+        object,
+        uuid(56a868b2-0ad4-11ce-b03a-0020af0ba770),
+        pointer_default(unique)
+    ]
+    interface IMediaPosition : IDispatch
+    {
+        HRESULT get_Duration( [out] REFTIME *plength );
+        HRESULT put_CurrentPosition( [in] REFTIME llTime );
+        HRESULT get_CurrentPosition( [out] REFTIME *pllTime );
+        HRESULT get_StopTime( [out] REFTIME *pllTime );
+        HRESULT put_StopTime( [in] REFTIME llTime );
+        HRESULT get_PrerollTime( [out] REFTIME *pllTime );
+        HRESULT put_PrerollTime( [in] REFTIME llTime );
+        HRESULT put_Rate( [in] double dRate );
+        HRESULT get_Rate( [out] double *pdRate );
+        HRESULT CanSeekForward( [out] LONG *pCanSeekForward );
+        HRESULT CanSeekBackward( [out] LONG *pCanSeekBackward );
+    }
+
+} /* library QuartzTypeLib */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl
new file mode 100644
index 0000000..738b1e3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "propidl.idl";
+
+cpp_quote("#include <ole2.h>")
+/* FIXME: #include "specstrings.h" */
+cpp_quote("#include <corerror.h>")
+cpp_quote("#include <corhdr.h>")
+
+cpp_quote("DEFINE_GUID(CLSID_CorMetaDataDispenser, 0xe5cb7a31,0x7512,0x11d2,0x89,0xce,0x00,0x80,0xc7,0x92,0xe5,0xd8);")
+cpp_quote("DEFINE_GUID(CLSID_CorMetaDataDispenserRuntime, 0x1ec2de53,0x75cc,0x11d2,0x97,0x75,0x00,0xa0,0xc9,0xb4,0xd5,0x0c);")
+
+[
+    object,
+    local,
+    uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)
+]
+interface IMetaDataDispenser : IUnknown
+{
+    HRESULT DefineScope(
+        [in] REFCLSID rclsid,
+        [in] DWORD dwCreateFlags,
+        [in] REFIID riid,
+        [out] IUnknown **ppIUnk);
+
+    HRESULT OpenScope(
+        [in] LPCWSTR szScope,
+        [in] DWORD dwOpenFlags,
+        [in] REFIID riid,
+        [out] IUnknown **ppIUnk);
+
+    HRESULT OpenScopeOnMemory(
+        [in] const void *pData,
+        [in] ULONG cbData,
+        [in] DWORD dwOpenFlags,
+        [in] REFIID riid,
+        [out] IUnknown **ppIUnk);
+}
+
+[
+    object,
+    local,
+    uuid(31bcfce2-dafb-11d2-9f81-00c04f79a0a3)
+]
+interface IMetaDataDispenserEx : IMetaDataDispenser
+{
+    HRESULT SetOption(
+        [in] REFGUID optionid,
+        [in] const VARIANT *value);
+
+    HRESULT GetOption(
+        [in] REFGUID optionid,
+        [out] VARIANT *pvalue);
+
+    HRESULT OpenScopeOnITypeInfo(
+        [in] ITypeInfo *pITI,
+        [in] DWORD dwOpenFlags,
+        [in] REFIID riid,
+        [out] IUnknown **ppIUnk);
+
+    HRESULT GetCORSystemDirectory(
+        [out, size_is(cchBuffer)] LPWSTR szBuffer,
+        [in] DWORD cchBuffer,
+        [out] DWORD *pchBuffer);
+
+    HRESULT FindAssembly(
+        [in] LPCWSTR szAppBase,
+        [in] LPCWSTR szPrivateBin,
+        [in] LPCWSTR szGlobalBin,
+        [in] LPCWSTR szAssemblyName,
+        [out, size_is(cchName)] LPWSTR szName,
+        [in] ULONG cchName,
+        [out] ULONG *pcName);
+
+    HRESULT FindAssemblyModule(
+        [in] LPCWSTR szAppBase,
+        [in] LPCWSTR szPrivateBin,
+        [in] LPCWSTR szGlobalBin,
+        [in] LPCWSTR szAssemblyName,
+        [in] LPCWSTR szModuleName,
+        [out, size_is(cchName)] LPWSTR szName,
+        [in] ULONG cchName,
+        [out] ULONG *pcName);
+}
+
+cpp_quote("BOOL        WINAPI _CorDllMain(HINSTANCE,DWORD,LPVOID);")
+cpp_quote("__int32     WINAPI _CorExeMain(void);")
+cpp_quote("__int32     WINAPI _CorExeMain2(PBYTE,DWORD,LPWSTR,LPWSTR,LPWSTR);")
+cpp_quote("VOID        WINAPI _CorImageUnloading(PVOID);")
+cpp_quote("HRESULT     WINAPI _CorValidateImage(PVOID*,LPCWSTR);")
+cpp_quote("HRESULT     WINAPI CoInitializeCor(DWORD);")
+cpp_quote("void        WINAPI CoUninitializeCor(void);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl
new file mode 100644
index 0000000..ed01893
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl
@@ -0,0 +1,1050 @@
+/*
+ * Copyright (C) 2011 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef CreateProcess")
+cpp_quote("#endif")
+
+interface ICorDebugAppDomain;
+interface ICorDebugAppDomainEnum;
+interface ICorDebugAssembly;
+interface ICorDebugAssemblyEnum;
+interface ICorDebugBreakpoint;
+interface ICorDebugBreakpointEnum;
+interface ICorDebugChain;
+interface ICorDebugChainEnum;
+interface ICorDebugClass;
+interface ICorDebugCode;
+interface ICorDebugContext;
+interface ICorDebugEditAndContinueSnapshot;
+interface ICorDebugEditAndContinueErrorInfo;
+interface ICorDebugEnum;
+interface ICorDebugErrorInfoEnum;
+interface ICorDebugEval;
+interface ICorDebugFrame;
+interface ICorDebugFrameEnum;
+interface ICorDebugFunction;
+interface ICorDebugFunctionBreakpoint;
+interface ICorDebugManagedCallback;
+interface ICorDebugManagedCallback2;
+interface ICorDebugMDA;
+interface ICorDebugModule;
+interface ICorDebugModuleBreakpoint;
+interface ICorDebugModuleEnum;
+interface ICorDebugObjectEnum;
+interface ICorDebugObjectValue;
+interface ICorDebugProcess;
+interface ICorDebugProcessEnum;
+interface ICorDebugRegisterSet;
+interface ICorDebugStepper;
+interface ICorDebugStepperEnum;
+interface ICorDebugThreadEnum;
+interface ICorDebugUnmanagedCallback;
+interface ICorDebugValue;
+interface ICorDebugValueBreakpoint;
+
+
+typedef [wire_marshal(unsigned long)] void *HPROCESS;
+typedef [wire_marshal(unsigned long)] void *HTHREAD;
+
+/* These are defined in corhrd.idl but used here. */
+cpp_quote("#if 0")
+
+typedef UINT32 mdToken;
+typedef mdToken mdModule;
+typedef SIZE_T  mdScope;
+typedef mdToken mdTypeDef;
+typedef mdToken mdSourceFile;
+typedef mdToken mdMemberRef;
+typedef mdToken mdMethodDef;
+typedef mdToken mdFieldDef;
+typedef mdToken mdSignature;
+typedef ULONG CorElementType;
+typedef SIZE_T PCCOR_SIGNATURE;
+
+typedef SIZE_T LPDEBUG_EVENT;
+
+typedef SIZE_T LPSTARTUPINFOW;
+typedef SIZE_T LPPROCESS_INFORMATION;
+
+cpp_quote("#endif")
+
+typedef ULONG64 CORDB_ADDRESS;
+typedef ULONG64 CORDB_REGISTER;
+
+typedef UINT64 TASKID;
+typedef DWORD CONNID;
+
+
+cpp_quote("#ifndef _COR_IL_MAP")
+cpp_quote("#define _COR_IL_MAP")
+
+typedef struct _COR_IL_MAP
+{
+    ULONG32 oldOffset;
+    ULONG32 newOffset;
+    BOOL    fAccurate;
+} COR_IL_MAP;
+
+cpp_quote("#endif /* _COR_IL_MAP */")
+
+cpp_quote("#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_")
+cpp_quote("#define _COR_DEBUG_IL_TO_NATIVE_MAP_")
+
+typedef enum CorDebugIlToNativeMappingTypes
+{
+    NO_MAPPING = -1,
+    PROLOG     = -2,
+    EPILOG     = -3
+} CorDebugIlToNativeMappingTypes;
+
+typedef struct COR_DEBUG_IL_TO_NATIVE_MAP
+{
+    ULONG32 ilOffset;
+    ULONG32 nativeStartOffset;
+    ULONG32 nativeEndOffset;
+} COR_DEBUG_IL_TO_NATIVE_MAP;
+
+cpp_quote("#endif /* _COR_DEBUG_IL_TO_NATIVE_MAP_ */")
+
+
+typedef enum CorDebugThreadState
+{
+    THREAD_RUN,
+    THREAD_SUSPEND
+} CorDebugThreadState;
+
+typedef enum CorDebugCreateProcessFlags
+{
+    DEBUG_NO_SPECIAL_OPTIONS        = 0x0000
+} CorDebugCreateProcessFlags;
+
+[
+    object,
+    local,
+    uuid(CC7BCAF7-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugValue : IUnknown
+{
+    HRESULT GetType([out] CorElementType *pType);
+    HRESULT GetSize([out] ULONG32 *pSize);
+    HRESULT GetAddress([out] CORDB_ADDRESS *pAddress);
+    HRESULT CreateBreakpoint([out] ICorDebugValueBreakpoint **ppBreakpoint);
+};
+
+[
+    object,
+    local,
+    uuid(938c6d66-7fb6-4f69-b389-425b8987329b),
+    pointer_default(unique)
+]
+interface ICorDebugThread : IUnknown
+{
+    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+    HRESULT GetID([out] DWORD *pdwThreadId);
+    HRESULT GetHandle([out] HTHREAD *phThreadHandle);
+    HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);
+    HRESULT SetDebugState([in] CorDebugThreadState state);
+    HRESULT GetDebugState([out] CorDebugThreadState *pState);
+
+    typedef enum CorDebugUserState
+    {
+        USER_STOP_REQUESTED     = 0x01,
+        USER_SUSPEND_REQUESTED  = 0x02,
+        USER_BACKGROUND         = 0x04,
+        USER_UNSTARTED          = 0x08,
+        USER_STOPPED            = 0x10,
+        USER_WAIT_SLEEP_JOIN    = 0x20,
+        USER_SUSPENDED          = 0x40,
+
+        USER_UNSAFE_POINT       = 0x80,
+    } CorDebugUserState;
+
+    HRESULT GetUserState([out] CorDebugUserState *pState);
+    HRESULT GetCurrentException([out] ICorDebugValue **ppExceptionObject);
+    HRESULT ClearCurrentException();
+    HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);
+    HRESULT EnumerateChains([out] ICorDebugChainEnum **ppChains);
+    HRESULT GetActiveChain([out] ICorDebugChain **ppChain);
+    HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);
+    HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);
+    HRESULT CreateEval([out] ICorDebugEval **ppEval);
+    HRESULT GetObject([out] ICorDebugValue **ppObject);
+};
+
+[
+    object,
+    local,
+    uuid(3d6f5f62-7538-11d3-8d5b-00104b35e7ef),
+    pointer_default(unique)
+]
+
+interface ICorDebugController : IUnknown
+{
+    HRESULT Stop([in] DWORD dwTimeoutIgnored);
+    HRESULT Continue([in] BOOL fIsOutOfBand);
+    HRESULT IsRunning([out] BOOL *pbRunning);
+    HRESULT HasQueuedCallbacks([in] ICorDebugThread *pThread,
+                               [out] BOOL *pbQueued);
+    HRESULT EnumerateThreads([out] ICorDebugThreadEnum **ppThreads);
+    HRESULT SetAllThreadsDebugState([in] CorDebugThreadState state,
+                                    [in] ICorDebugThread *pExceptThisThread);
+    HRESULT Detach();
+    HRESULT Terminate([in] UINT exitCode);
+    HRESULT CanCommitChanges([in] ULONG cSnapshots,
+                             [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],
+                             [out] ICorDebugErrorInfoEnum **pError);
+    HRESULT CommitChanges([in] ULONG cSnapshots,
+                          [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],
+                          [out] ICorDebugErrorInfoEnum **pError);
+};
+
+[
+    object,
+    local,
+    uuid(3d6f5f64-7538-11d3-8d5b-00104b35e7ef),
+    pointer_default(unique)
+]
+interface ICorDebugProcess : ICorDebugController
+{
+    HRESULT GetID([out] DWORD *pdwProcessId);
+    HRESULT GetHandle([out] HPROCESS *phProcessHandle);
+    HRESULT GetThread([in] DWORD dwThreadId, [out] ICorDebugThread **ppThread);
+    HRESULT EnumerateObjects([out] ICorDebugObjectEnum **ppObjects);
+    HRESULT IsTransitionStub([in] CORDB_ADDRESS address, [out] BOOL *pbTransitionStub);
+    HRESULT IsOSSuspended([in] DWORD threadID, [out] BOOL *pbSuspended);
+    HRESULT GetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize,
+                             [in, out] BYTE context[]);
+    HRESULT SetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in] BYTE context[]);
+    HRESULT ReadMemory([in] CORDB_ADDRESS address, [in] DWORD size, [out] BYTE buffer[], [out] SIZE_T *read);
+    HRESULT WriteMemory([in] CORDB_ADDRESS address, [in] DWORD size, [in] BYTE buffer[], [out] SIZE_T *written);
+    HRESULT ClearCurrentException([in] DWORD threadID);
+    HRESULT EnableLogMessages([in]BOOL fOnOff);
+    HRESULT ModifyLogSwitch([in] WCHAR *pLogSwitchName,
+                            [in]LONG lLevel);
+    HRESULT EnumerateAppDomains([out] ICorDebugAppDomainEnum **ppAppDomains);
+    HRESULT GetObject([out] ICorDebugValue **ppObject);
+    HRESULT ThreadForFiberCookie([in] DWORD fiberCookie, [out] ICorDebugThread **ppThread);
+    HRESULT GetHelperThreadID([out] DWORD *pThreadID);
+};
+
+[
+    object,
+    local,
+    uuid(3d6f5f63-7538-11d3-8d5b-00104b35e7ef),
+    pointer_default(unique)
+]
+interface ICorDebugAppDomain : ICorDebugController
+{
+    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+    HRESULT EnumerateAssemblies([out] ICorDebugAssemblyEnum **ppAssemblies);
+    HRESULT GetModuleFromMetaDataInterface([in] IUnknown *pIMetaData,
+                                           [out] ICorDebugModule **ppModule);
+    HRESULT EnumerateBreakpoints([out] ICorDebugBreakpointEnum **ppBreakpoints);
+    HRESULT EnumerateSteppers([out] ICorDebugStepperEnum **ppSteppers);
+    HRESULT IsAttached([out] BOOL *pbAttached);
+    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+    HRESULT GetObject([out] ICorDebugValue **ppObject);
+    HRESULT Attach();
+    HRESULT GetID([out] ULONG32 *pId);
+};
+
+[
+    object,
+    local,
+    uuid(3d6f5f60-7538-11d3-8d5b-00104b35e7ef),
+    pointer_default(unique)
+]
+interface ICorDebugManagedCallback : IUnknown
+{
+    HRESULT Breakpoint([in] ICorDebugAppDomain *pAppDomain,
+                       [in] ICorDebugThread *pThread,
+                       [in] ICorDebugBreakpoint *pBreakpoint);
+
+    typedef enum CorDebugStepReason
+    {
+        STEP_NORMAL,
+        STEP_RETURN,
+        STEP_CALL,
+        STEP_EXCEPTION_FILTER,
+        STEP_EXCEPTION_HANDLER,
+        STEP_INTERCEPT,
+        STEP_EXIT
+    } CorDebugStepReason;
+
+    HRESULT StepComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                         [in] ICorDebugStepper *pStepper, [in] CorDebugStepReason reason);
+    HRESULT Break([in] ICorDebugAppDomain *pAppDomain,
+                  [in] ICorDebugThread *thread);
+    HRESULT Exception([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                      [in] BOOL unhandled);
+    HRESULT EvalComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                         [in] ICorDebugEval *pEval);
+    HRESULT EvalException([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                          [in] ICorDebugEval *pEval);
+    HRESULT CreateProcess([in] ICorDebugProcess *pProcess);
+    HRESULT ExitProcess([in] ICorDebugProcess *pProcess);
+    HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,[in] ICorDebugThread *thread);
+    HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread);
+    HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);
+    HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);
+    HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);
+    HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);
+    HRESULT DebuggerError([in] ICorDebugProcess *pProcess, [in] HRESULT errorHR,
+                          [in] DWORD errorCode);
+
+    typedef enum LoggingLevelEnum
+    {
+        LTraceLevel0   = 0,
+        LTraceLevel1,
+        LTraceLevel2,
+        LTraceLevel3,
+        LTraceLevel4,
+        LStatusLevel0  = 20,
+        LStatusLevel1,
+        LStatusLevel2,
+        LStatusLevel3,
+        LStatusLevel4,
+        LWarningLevel  = 40,
+        LErrorLevel    = 50,
+        LPanicLevel    = 100
+    } LoggingLevelEnum;
+
+    typedef enum LogSwitchCallReason
+    {
+        SWITCH_CREATE,
+        SWITCH_MODIFY,
+        SWITCH_DELETE
+    } LogSwitchCallReason;
+
+    HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                       [in] LONG lLevel, [in] WCHAR *pLogSwitchName, [in] WCHAR *pMessage);
+    HRESULT LogSwitch([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                      [in] LONG lLevel, [in] ULONG ulReason, [in] WCHAR *pLogSwitchName,
+                      [in] WCHAR *pParentName);
+    HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);
+    HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);
+    HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);
+    HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);
+    HRESULT ControlCTrap([in] ICorDebugProcess *pProcess);
+    HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread);
+    HRESULT UpdateModuleSymbols([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule,
+                                [in] IStream *pSymbolStream);
+    HRESULT EditAndContinueRemap([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                                 [in] ICorDebugFunction *pFunction, [in] BOOL fAccurate);
+
+    HRESULT BreakpointSetError([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                               [in] ICorDebugBreakpoint *pBreakpoint, [in] DWORD dwError);
+};
+
+[
+    object,
+    local,
+    uuid(250E5EEA-DB5C-4C76-B6F3-8C46F12E3203),
+    pointer_default(unique)
+]
+interface ICorDebugManagedCallback2 : IUnknown
+{
+    HRESULT FunctionRemapOpportunity([in] ICorDebugAppDomain *pAppDomain,
+                   [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pOldFunction,
+                   [in] ICorDebugFunction *pNewFunction, [in] ULONG32 oldILOffset);
+
+    HRESULT CreateConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId,
+                                [in] WCHAR *pConnName);
+
+    HRESULT ChangeConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );
+
+    HRESULT DestroyConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );
+
+
+    typedef enum CorDebugExceptionCallbackType
+    {
+        DEBUG_EXCEPTION_FIRST_CHANCE = 1,
+        DEBUG_EXCEPTION_USER_FIRST_CHANCE = 2,
+        DEBUG_EXCEPTION_CATCH_HANDLER_FOUND = 3,
+        DEBUG_EXCEPTION_UNHANDLED = 4
+    } CorDebugExceptionCallbackType;
+
+    typedef enum CorDebugExceptionFlags
+    {
+        DEBUG_EXCEPTION_CAN_BE_INTERCEPTED = 0x0001
+    } CorDebugExceptionFlags;
+
+    HRESULT Exception( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                       [in] ICorDebugFrame *pFrame, [in] ULONG32 nOffset,
+                       [in] CorDebugExceptionCallbackType dwEventType, [in] DWORD dwFlags );
+
+    typedef enum CorDebugExceptionUnwindCallbackType
+    {
+        DEBUG_EXCEPTION_UNWIND_BEGIN = 1,
+        DEBUG_EXCEPTION_INTERCEPTED = 2
+    } CorDebugExceptionUnwindCallbackType;
+
+    HRESULT ExceptionUnwind( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+                             [in] CorDebugExceptionUnwindCallbackType dwEventType,
+                             [in] DWORD dwFlags );
+
+    HRESULT FunctionRemapComplete([in] ICorDebugAppDomain *pAppDomain,
+                             [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction);
+
+    HRESULT MDANotification([in] ICorDebugController * pController,
+                            [in] ICorDebugThread *pThread, [in] ICorDebugMDA * pMDA
+    );
+
+};
+[
+    object,
+    local,
+    uuid(3d6f5f61-7538-11d3-8d5b-00104b35e7ef),
+    pointer_default(unique)
+]
+interface ICorDebug : IUnknown
+{
+    HRESULT Initialize();
+    HRESULT Terminate();
+    HRESULT SetManagedHandler([in] ICorDebugManagedCallback *pCallback);
+    HRESULT SetUnmanagedHandler([in] ICorDebugUnmanagedCallback *pCallback);
+    HRESULT CreateProcess([in] LPCWSTR lpApplicationName, [in] LPWSTR lpCommandLine,
+                          [in] LPSECURITY_ATTRIBUTES lpProcessAttributes,
+                          [in] LPSECURITY_ATTRIBUTES lpThreadAttributes,
+                          [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags,
+                          [in] PVOID lpEnvironment, [in] LPCWSTR lpCurrentDirectory,
+                          [in] LPSTARTUPINFOW lpStartupInfo,
+                          [in] LPPROCESS_INFORMATION lpProcessInformation,
+                          [in] CorDebugCreateProcessFlags debuggingFlags,
+                          [out] ICorDebugProcess **ppProcess);
+
+    HRESULT DebugActiveProcess([in] DWORD id, [in] BOOL win32Attach,
+                               [out] ICorDebugProcess **ppProcess);
+    HRESULT EnumerateProcesses([out] ICorDebugProcessEnum **ppProcess);
+    HRESULT GetProcess([in] DWORD dwProcessId, [out] ICorDebugProcess **ppProcess);
+    HRESULT CanLaunchOrAttach([in] DWORD dwProcessId, [in] BOOL win32DebuggingEnabled);
+};
+
+
+[
+    object,
+    local,
+    uuid(CC7BCAE8-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugBreakpoint : IUnknown
+{
+    HRESULT Activate([in] BOOL bActive);
+    HRESULT IsActive([out] BOOL *pbActive);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAE9-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugFunctionBreakpoint : ICorDebugBreakpoint
+{
+    HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
+    HRESULT GetOffset([out] ULONG32 *pnOffset);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAEA-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugModuleBreakpoint : ICorDebugBreakpoint
+{
+    HRESULT GetModule([out] ICorDebugModule **ppModule);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAEB-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugValueBreakpoint : ICorDebugBreakpoint
+{
+    HRESULT GetValue([out] ICorDebugValue **ppValue);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAEC-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugStepper : IUnknown
+{
+    HRESULT IsActive([out] BOOL *pbActive);
+    HRESULT Deactivate();
+
+    typedef enum CorDebugIntercept
+    {
+          INTERCEPT_NONE                = 0x0 ,
+          INTERCEPT_CLASS_INIT          = 0x01,
+          INTERCEPT_EXCEPTION_FILTER    = 0x02,
+          INTERCEPT_SECURITY            = 0x04,
+          INTERCEPT_CONTEXT_POLICY      = 0x08,
+          INTERCEPT_INTERCEPTION        = 0x10,
+          INTERCEPT_ALL                 = 0xffff
+    } CorDebugIntercept;
+
+    HRESULT SetInterceptMask([in] CorDebugIntercept mask);
+
+    typedef enum CorDebugUnmappedStop
+    {
+        STOP_NONE               = 0x0,
+        STOP_PROLOG             = 0x01,
+        STOP_EPILOG             = 0x02,
+        STOP_NO_MAPPING_INFO    = 0x04,
+        STOP_OTHER_UNMAPPED     = 0x08,
+        STOP_UNMANAGED          = 0x10,
+
+        STOP_ALL                = 0xffff,
+
+    } CorDebugUnmappedStop;
+
+    HRESULT SetUnmappedStopMask([in] CorDebugUnmappedStop mask);
+    HRESULT Step([in] BOOL bStepIn);
+
+    typedef struct COR_DEBUG_STEP_RANGE
+    {
+        ULONG32 startOffset, endOffset;
+    } COR_DEBUG_STEP_RANGE;
+
+    HRESULT StepRange([in] BOOL bStepIn, [in] COR_DEBUG_STEP_RANGE ranges[], [in] ULONG32 cRangeCount);
+    HRESULT StepOut();
+    HRESULT SetRangeIL([in] BOOL bIL);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB01-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugEnum : IUnknown
+{
+    HRESULT Skip([in] ULONG celt);
+    HRESULT Reset();
+    HRESULT Clone([out] ICorDebugEnum **ppEnum);
+    HRESULT GetCount([out] ULONG *pcelt);
+};
+
+[
+    object,
+    local,
+    uuid(63ca1b24-4359-4883-bd57-13f815f58744),
+    pointer_default(unique)
+]
+
+interface ICorDebugAppDomainEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugAppDomain *values[], [out] ULONG *pceltFetched);
+
+};
+
+[
+    object,
+    local,
+    uuid(4a2a1ec9-85ec-4bfb-9f15-a89fdfe0fe83),
+    pointer_default(unique)
+]
+interface ICorDebugAssemblyEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugAssembly *values[], [out] ULONG *pceltFetched);
+
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB03-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugBreakpointEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugBreakpoint *breakpoints[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB08-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugChainEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugChain *chains[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(F0E18809-72B5-11d2-976F-00A0C9B4D50C),
+    pointer_default(unique)
+]
+interface ICorDebugErrorInfoEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugEditAndContinueErrorInfo *errors[],
+                 [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB07-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugFrameEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugFrame *frames[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB09-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugModuleEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugModule *modules[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB02-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugObjectEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] CORDB_ADDRESS objects[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB05-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugProcessEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugProcess *processes[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB04-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugStepperEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugStepper *steppers[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB06-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugThreadEnum : ICorDebugEnum
+{
+    HRESULT Next([in] ULONG celt, [out] ICorDebugThread *threads[], [out] ULONG *pceltFetched);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAEE-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugChain : IUnknown
+{
+    HRESULT GetThread([out] ICorDebugThread **ppThread);
+    HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);
+    HRESULT GetContext([out] ICorDebugContext **ppContext);
+    HRESULT GetCaller([out] ICorDebugChain **ppChain);
+    HRESULT GetCallee([out] ICorDebugChain **ppChain);
+    HRESULT GetPrevious([out] ICorDebugChain **ppChain);
+    HRESULT GetNext([out] ICorDebugChain **ppChain);
+    HRESULT IsManaged([out] BOOL *pManaged);
+    HRESULT EnumerateFrames([out] ICorDebugFrameEnum **ppFrames);
+    HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);
+    HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);
+    typedef enum CorDebugChainReason
+    {
+        CHAIN_NONE              = 0x000,
+        CHAIN_CLASS_INIT        = 0x001,
+        CHAIN_EXCEPTION_FILTER  = 0x002,
+        CHAIN_SECURITY          = 0x004,
+        CHAIN_CONTEXT_POLICY    = 0x008,
+        CHAIN_INTERCEPTION      = 0x010,
+        CHAIN_PROCESS_START     = 0x020,
+        CHAIN_THREAD_START      = 0x040,
+        CHAIN_ENTER_MANAGED     = 0x080,
+        CHAIN_ENTER_UNMANAGED   = 0x100,
+        CHAIN_DEBUGGER_EVAL     = 0x200,
+        CHAIN_CONTEXT_SWITCH    = 0x400,
+        CHAIN_FUNC_EVAL         = 0x800,
+    } CorDebugChainReason;
+
+    HRESULT GetReason([out] CorDebugChainReason *pReason);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAEF-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugFrame : IUnknown
+{
+    HRESULT GetChain([out] ICorDebugChain **ppChain);
+    HRESULT GetCode([out] ICorDebugCode **ppCode);
+    HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
+    HRESULT GetFunctionToken([out] mdMethodDef *pToken);
+    HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);
+    HRESULT GetCaller([out] ICorDebugFrame **ppFrame);
+    HRESULT GetCallee([out] ICorDebugFrame **ppFrame);
+    HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);
+};
+
+
+[
+    object,
+    local,
+    uuid(CC7BCB0B-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugRegisterSet : IUnknown
+{
+    typedef enum CorDebugRegister
+    {
+        REGISTER_INSTRUCTION_POINTER = 0,
+        REGISTER_STACK_POINTER,
+        REGISTER_FRAME_POINTER,
+
+        REGISTER_X86_EIP = 0,
+        REGISTER_X86_ESP,
+        REGISTER_X86_EBP,
+
+        REGISTER_X86_EAX,
+        REGISTER_X86_ECX,
+        REGISTER_X86_EDX,
+        REGISTER_X86_EBX,
+
+        REGISTER_X86_ESI,
+        REGISTER_X86_EDI,
+
+        REGISTER_X86_FPSTACK_0,
+        REGISTER_X86_FPSTACK_1,
+        REGISTER_X86_FPSTACK_2,
+        REGISTER_X86_FPSTACK_3,
+        REGISTER_X86_FPSTACK_4,
+        REGISTER_X86_FPSTACK_5,
+        REGISTER_X86_FPSTACK_6,
+        REGISTER_X86_FPSTACK_7,
+
+        REGISTER_AMD64_RIP = 0,
+        REGISTER_AMD64_RSP,
+        REGISTER_AMD64_RBP,
+
+        REGISTER_AMD64_RAX,
+        REGISTER_AMD64_RCX,
+        REGISTER_AMD64_RDX,
+        REGISTER_AMD64_RBX,
+
+        REGISTER_AMD64_RSI,
+        REGISTER_AMD64_RDI,
+
+        REGISTER_AMD64_R8,
+        REGISTER_AMD64_R9,
+        REGISTER_AMD64_R10,
+        REGISTER_AMD64_R11,
+        REGISTER_AMD64_R12,
+        REGISTER_AMD64_R13,
+        REGISTER_AMD64_R14,
+        REGISTER_AMD64_R15,
+
+        REGISTER_AMD64_XMM0,
+        REGISTER_AMD64_XMM1,
+        REGISTER_AMD64_XMM2,
+        REGISTER_AMD64_XMM3,
+        REGISTER_AMD64_XMM4,
+        REGISTER_AMD64_XMM5,
+        REGISTER_AMD64_XMM6,
+        REGISTER_AMD64_XMM7,
+        REGISTER_AMD64_XMM8,
+        REGISTER_AMD64_XMM9,
+        REGISTER_AMD64_XMM10,
+        REGISTER_AMD64_XMM11,
+        REGISTER_AMD64_XMM12,
+        REGISTER_AMD64_XMM13,
+        REGISTER_AMD64_XMM14,
+        REGISTER_AMD64_XMM15,
+
+        REGISTER_IA64_BSP = REGISTER_FRAME_POINTER,
+
+        REGISTER_IA64_R0  = REGISTER_IA64_BSP + 1,
+        REGISTER_IA64_F0  = REGISTER_IA64_R0  + 128,
+
+    } CorDebugRegister;
+
+    HRESULT GetRegistersAvailable([out] ULONG64 *pAvailable);
+
+    HRESULT GetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,
+                         [out] CORDB_REGISTER regBuffer[]);
+    HRESULT SetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,
+                         [in] CORDB_REGISTER regBuffer[]);
+    HRESULT GetThreadContext([in] ULONG32 contextSize, [in, out] BYTE context[]);
+    HRESULT SetThreadContext([in] ULONG32 contextSize, [in] BYTE context[]);
+}
+
+[
+    object,
+    local,
+    uuid(CC7BCAF6-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugEval : IUnknown
+{
+    HRESULT CallFunction([in] ICorDebugFunction *pFunction, [in] ULONG32 nArgs,
+                         [in] ICorDebugValue *ppArgs[]);
+    HRESULT NewObject([in] ICorDebugFunction *pConstructor, [in] ULONG32 nArgs,
+                      [in] ICorDebugValue *ppArgs[]);
+    HRESULT NewObjectNoConstructor([in] ICorDebugClass *pClass);
+    HRESULT NewString([in] LPCWSTR string);
+    HRESULT NewArray([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,
+                     [in] ULONG32 rank, [in] ULONG32 dims[], [in] ULONG32 lowBounds[]);
+    HRESULT IsActive([out] BOOL *pbActive);
+    HRESULT Abort();
+    HRESULT GetResult([out] ICorDebugValue **ppResult);
+    HRESULT GetThread([out] ICorDebugThread **ppThread);
+    HRESULT CreateValue([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,
+                        [out] ICorDebugValue **ppValue);
+};
+
+[
+    object,
+    local,
+    uuid(6DC3FA01-D7CB-11d2-8A95-0080C792E5D8),
+    pointer_default(unique)
+]
+interface ICorDebugEditAndContinueSnapshot : IUnknown
+{
+    HRESULT CopyMetaData([in] IStream *pIStream, [out] GUID *pMvid);
+    HRESULT GetMvid([out] GUID *pMvid);
+    HRESULT GetRoDataRVA([out] ULONG32 *pRoDataRVA);
+    HRESULT GetRwDataRVA([out] ULONG32 *pRwDataRVA);
+    HRESULT SetPEBytes([in] IStream *pIStream);
+    HRESULT SetILMap([in] mdToken mdFunction, [in] ULONG cMapSize, [in] COR_IL_MAP map[]);
+    HRESULT SetPESymbolBytes([in] IStream *pIStream);
+};
+
+[
+    object,
+    local,
+    uuid(dba2d8c1-e5c5-4069-8c13-10a7c6abf43d),
+    pointer_default(unique)
+]
+interface ICorDebugModule : IUnknown
+{
+    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+    HRESULT GetBaseAddress([out] CORDB_ADDRESS *pAddress);
+    HRESULT GetAssembly([out] ICorDebugAssembly **ppAssembly);
+    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+    HRESULT EnableJITDebugging([in] BOOL bTrackJITInfo, [in] BOOL bAllowJitOpts);
+    HRESULT EnableClassLoadCallbacks([in] BOOL bClassLoadCallbacks);
+    HRESULT GetFunctionFromToken([in] mdMethodDef methodDef, [out] ICorDebugFunction **ppFunction);
+    HRESULT GetFunctionFromRVA([in] CORDB_ADDRESS rva, [out] ICorDebugFunction **ppFunction);
+    HRESULT GetClassFromToken([in] mdTypeDef typeDef, [out] ICorDebugClass **ppClass);
+    HRESULT CreateBreakpoint([out] ICorDebugModuleBreakpoint **ppBreakpoint);
+    HRESULT GetEditAndContinueSnapshot([out] ICorDebugEditAndContinueSnapshot **ppEditAndContinueSnapshot);
+    HRESULT GetMetaDataInterface([in] REFIID riid, [out] IUnknown **ppObj);
+    HRESULT GetToken([out] mdModule *pToken);
+    HRESULT IsDynamic([out] BOOL *pDynamic);
+    HRESULT GetGlobalVariableValue([in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue);
+    HRESULT GetSize([out] ULONG32 *pcBytes);
+    HRESULT IsInMemory([out] BOOL *pInMemory);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAF5-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugClass : IUnknown
+{
+    HRESULT GetModule([out] ICorDebugModule **pModule);
+    HRESULT GetToken([out] mdTypeDef *pTypeDef);
+    HRESULT GetStaticFieldValue([in] mdFieldDef fieldDef, [in] ICorDebugFrame *pFrame,
+                                [out] ICorDebugValue **ppValue);
+};
+
+[
+    object,
+    local,
+    uuid(df59507c-d47a-459e-bce2-6427eac8fd06),
+    pointer_default(unique)
+]
+interface ICorDebugAssembly : IUnknown
+{
+    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+    HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);
+    HRESULT EnumerateModules([out] ICorDebugModuleEnum **ppModules);
+    HRESULT GetCodeBase([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+};
+
+
+[
+    object,
+    local,
+    uuid(CC7BCAF3-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugFunction : IUnknown
+{
+    HRESULT GetModule([out] ICorDebugModule **ppModule);
+    HRESULT GetClass([out] ICorDebugClass **ppClass);
+    HRESULT GetToken([out] mdMethodDef *pMethodDef);
+    HRESULT GetILCode([out] ICorDebugCode **ppCode);
+    HRESULT GetNativeCode([out] ICorDebugCode **ppCode);
+    HRESULT CreateBreakpoint([out] ICorDebugFunctionBreakpoint **ppBreakpoint);
+    HRESULT GetLocalVarSigToken([out] mdSignature *pmdSig);
+    HRESULT GetCurrentVersionNumber([out] ULONG32 *pnCurrentVersion);
+};
+
+[
+    object,
+    local,
+    uuid(5263E909-8CB5-11d3-BD2F-0000F80849BD),
+    pointer_default(unique)
+]
+interface ICorDebugUnmanagedCallback : IUnknown
+{
+    HRESULT DebugEvent([in] LPDEBUG_EVENT pDebugEvent, [in] BOOL fOutOfBand);
+};
+
+[
+    object,
+    local,
+    uuid(8D600D41-F4F6-4cb3-B7EC-7BD164944036),
+    pointer_default(unique)
+]
+interface ICorDebugEditAndContinueErrorInfo : IUnknown
+{
+    HRESULT GetModule([out] ICorDebugModule **ppModule);
+    HRESULT GetToken([out]mdToken *pToken);
+    HRESULT GetErrorCode([out]HRESULT *pHr);
+    HRESULT GetString([in] ULONG32 cchString, [out] ULONG32 *pcchString,
+                      [out] WCHAR szString[]);
+}
+
+[
+    object,
+    local,
+    uuid(18AD3D6E-B7D2-11d2-BD04-0000F80849BD),
+    pointer_default(unique)
+]
+interface ICorDebugObjectValue : ICorDebugValue
+{
+    HRESULT GetClass([out] ICorDebugClass **ppClass);
+    HRESULT GetFieldValue([in] ICorDebugClass *pClass, [in] mdFieldDef fieldDef,
+                          [out] ICorDebugValue **ppValue);
+    HRESULT GetVirtualMethod([in] mdMemberRef memberRef, [out] ICorDebugFunction **ppFunction);
+    HRESULT GetContext([out] ICorDebugContext **ppContext);
+    HRESULT IsValueClass([out] BOOL *pbIsValueClass);
+    HRESULT GetManagedCopy([out] IUnknown **ppObject);
+    HRESULT SetFromManagedCopy([in] IUnknown *pObject);
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCB00-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugContext : ICorDebugObjectValue
+{
+};
+
+[
+    object,
+    local,
+    uuid(CC7BCAF4-8A68-11d2-983C-0000F808342D),
+    pointer_default(unique)
+]
+interface ICorDebugCode : IUnknown
+{
+    HRESULT IsIL([out] BOOL *pbIL);
+    HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
+    HRESULT GetAddress([out] CORDB_ADDRESS *pStart);
+    HRESULT GetSize([out] ULONG32 *pcBytes);
+    HRESULT CreateBreakpoint([in] ULONG32 offset, [out] ICorDebugFunctionBreakpoint **ppBreakpoint);
+    HRESULT GetCode([in] ULONG32 startOffset, [in] ULONG32 endOffset,
+                    [in] ULONG32 cBufferAlloc, [out] BYTE buffer[], [out] ULONG32 *pcBufferSize);
+    HRESULT GetVersionNumber([out] ULONG32 *nVersion);
+    HRESULT GetILToNativeMapping([in] ULONG32 cMap, [out] ULONG32 *pcMap,
+                                 [out] COR_DEBUG_IL_TO_NATIVE_MAP map[]);
+    HRESULT GetEnCRemapSequencePoints([in] ULONG32 cMap,[out] ULONG32 *pcMap,
+                                      [out] ULONG32 offsets[]);
+};
+
+[
+    object,
+    local,
+    uuid(CC726F2F-1DB7-459b-B0EC-05F01D841B42),
+    pointer_default(unique)
+]
+interface ICorDebugMDA : IUnknown
+{
+    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
+
+    HRESULT GetDescription([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
+
+    HRESULT GetXML([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
+
+    typedef enum CorDebugMDAFlags
+    {
+        MDA_FLAG_SLIP = 0x2
+    } CorDebugMDAFlags;
+
+    HRESULT GetFlags([in] CorDebugMDAFlags * pFlags);
+
+    HRESULT GetOSThreadId([out] DWORD * pOsTid);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h
new file mode 100644
index 0000000..a7e17c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2008 James Hawkins
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CORERROR_H
+#define __WINE_CORERROR_H
+
+#include <winerror.h>
+
+#ifndef FACILITY_URT
+#define FACILITY_URT 0x13
+#endif
+
+#ifndef EMAKEHR
+#define SMAKEHR(val) MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_URT, val)
+#define EMAKEHR(val) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_URT, val)
+#endif
+
+#define COR_E_ARGUMENT              E_INVALIDARG
+#define COR_E_INVALIDCAST           E_NOINTERFACE
+#define COR_E_NULLREFERENCE         E_POINTER
+#define COR_E_OUTOFMEMORY           E_OUTOFMEMORY
+#define COR_E_UNAUTHORIZEDACCESS    E_ACCESSDENIED
+
+#define COR_E_ARITHMETIC            HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW)
+#define COR_E_STACKOVERFLOW         HRESULT_FROM_WIN32(ERROR_STACK_OVERFLOW)
+#define COR_E_ENDOFSTREAM           HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
+#define COR_E_FILENOTFOUND          HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
+#define COR_E_BAD_PATHNAME          HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME)
+#define COR_E_DIRECTORYNOTFOUND     HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)
+#define COR_E_PATHTOOLONG           HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE)
+
+#define COR_E_AMBIGUOUSMATCH    _HRESULT_TYPEDEF_(0x8000211D)
+#define COR_E_TARGETPARAMCOUNT  _HRESULT_TYPEDEF_(0x8002000E)
+#define COR_E_DIVIDEBYZERO      _HRESULT_TYPEDEF_(0x80020012)
+#define COR_E_BADIMAGEFORMAT    _HRESULT_TYPEDEF_(0x8007000B)
+
+#define COR_E_ASSEMBLYEXPECTED          EMAKEHR(0x1018)
+#define COR_E_TYPEUNLOADED              EMAKEHR(0x1013)
+#define COR_E_EXCEPTION                 EMAKEHR(0x1500)
+#define COR_E_SYSTEM                    EMAKEHR(0x1501)
+#define COR_E_ARGUMENTOUTOFRANGE        EMAKEHR(0x1502)
+#define COR_E_ARRAYTYPEMISMATCH         EMAKEHR(0x1503)
+#define COR_E_CONTEXTMARSHAL            EMAKEHR(0x1504)
+#define COR_E_TIMEOUT                   EMAKEHR(0x1505)
+#define COR_E_EXECUTIONENGINE           EMAKEHR(0x1506)
+#define COR_E_FIELDACCESS               EMAKEHR(0x1507)
+#define COR_E_INDEXOUTOFRANGE           EMAKEHR(0x1508)
+#define COR_E_INVALIDOPERATION          EMAKEHR(0x1509)
+#define COR_E_SECURITY                  EMAKEHR(0x150A)
+#define COR_E_REMOTING                  EMAKEHR(0x150B)
+#define COR_E_SERIALIZATION             EMAKEHR(0x150C)
+#define COR_E_VERIFICATION              EMAKEHR(0x150D)
+#define COR_E_SERVER                    EMAKEHR(0x150E)
+#define COR_E_SERVICEDCOMPONENT         EMAKEHR(0x150F)
+#define COR_E_METHODACCESS              EMAKEHR(0x1510)
+#define COR_E_MISSINGFIELD              EMAKEHR(0x1511)
+#define COR_E_MISSINGMEMBER             EMAKEHR(0x1512)
+#define COR_E_MISSINGMETHOD             EMAKEHR(0x1513)
+#define COR_E_MULTICASTNOTSUPPORTED     EMAKEHR(0x1514)
+#define COR_E_NOTSUPPORTED              EMAKEHR(0x1515)
+#define COR_E_OVERFLOW                  EMAKEHR(0x1516)
+#define COR_E_RANK                      EMAKEHR(0x1517)
+#define COR_E_SYNCHRONIZATIONLOCK       EMAKEHR(0x1518)
+#define COR_E_THREADINTERRUPTED         EMAKEHR(0x1519)
+#define COR_E_MEMBERACCESS              EMAKEHR(0x151A)
+#define COR_E_THREADSTATE               EMAKEHR(0x1520)
+#define COR_E_THREADSTOP                EMAKEHR(0x1521)
+#define COR_E_TYPELOAD                  EMAKEHR(0x1522)
+#define COR_E_ENTRYPOINTNOTFOUND        EMAKEHR(0x1523)
+#define COR_E_DLLNOTFOUND               EMAKEHR(0x1524)
+#define COR_E_THREADSTART               EMAKEHR(0x1525)
+#define COR_E_INVALIDCOMOBJECT          EMAKEHR(0x1527)
+#define COR_E_NOTFINITENUMBER           EMAKEHR(0x1528)
+#define COR_E_DUPLICATEWAITOBJECT       EMAKEHR(0x1529)
+#define COR_E_SEMAPHOREFULL             EMAKEHR(0x152B)
+#define COR_E_WAITHANDLECANNOTBEOPENED  EMAKEHR(0x152C)
+#define COR_E_ABANDONEDMUTEX            EMAKEHR(0x152D)
+#define COR_E_INVALIDOLEVARIANTTYPE     EMAKEHR(0x1531)
+#define COR_E_MISSINGMANIFESTRESOURCE   EMAKEHR(0x1532)
+#define COR_E_SAFEARRAYTYPEMISMATCH     EMAKEHR(0x1533)
+#define COR_E_TYPEINITIALIZATION        EMAKEHR(0x1534)
+#define COR_E_MARSHALDIRECTIVE          EMAKEHR(0x1535)
+#define COR_E_MISSINGSATELLITEASSEMBLY  EMAKEHR(0x1536)
+#define COR_E_FORMAT                    EMAKEHR(0x1537)
+#define COR_E_SAFEARRAYRANKMISMATCH     EMAKEHR(0x1538)
+#define COR_E_PLATFORMNOTSUPPORTED      EMAKEHR(0x1539)
+#define COR_E_INVALIDPROGRAM            EMAKEHR(0x153A)
+#define COR_E_OPERATIONCANCELED         EMAKEHR(0x153B)
+#define COR_E_INSUFFICIENTMEMORY        EMAKEHR(0x153D)
+#define COR_E_RUNTIMEWRAPPED            EMAKEHR(0x153E)
+#define COR_E_DEVICESNOTSUPPORTED       EMAKEHR(0x1540)
+#define COR_E_DATAMISALIGNED            EMAKEHR(0x1541)
+#define COR_E_KEYNOTFOUND               EMAKEHR(0x1577)
+#define COR_E_APPLICATION               EMAKEHR(0x1600)
+#define COR_E_INVALIDFILTERCRITERIA     EMAKEHR(0x1601)
+#define COR_E_REFLECTIONTYPELOAD        EMAKEHR(0x1602)
+#define COR_E_TARGET                    EMAKEHR(0x1603)
+#define COR_E_TARGETINVOCATION          EMAKEHR(0x1604)
+#define COR_E_CUSTOMATTRIBUTEFORMAT     EMAKEHR(0x1605)
+#define COR_E_IO                        EMAKEHR(0x1620)
+#define COR_E_FILELOAD                  EMAKEHR(0x1621)
+#define COR_E_OBJECTDISPOSED            EMAKEHR(0x1622)
+#define COR_E_FAILFAST                  EMAKEHR(0x1623)
+#define COR_E_HOSTPROTECTION            EMAKEHR(0x1640)
+#define COR_E_ILLEGAL_REENTRANCY        EMAKEHR(0x1641)
+
+#define FUSION_E_PRIVATE_ASM_DISALLOWED EMAKEHR(0x1044)
+#define FUSION_E_INVALID_NAME           EMAKEHR(0x1047)
+
+#define CLDB_E_FILE_OLDVER              EMAKEHR(0x1107)
+
+#define CLR_E_SHIM_RUNTIME              EMAKEHR(0x1700)
+#define CLR_E_SHIM_RUNTIMEEXPORT        EMAKEHR(0x1701)
+
+#endif	/* __WINE_CORERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h
new file mode 100644
index 0000000..b4e6ce5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2008 James Hawkins
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CORHDR_H
+#define __WINE_CORHDR_H
+
+typedef enum CorTokenType
+{
+    mdtModule                   = 0x00000000,
+    mdtTypeRef                  = 0x01000000,
+    mdtTypeDef                  = 0x02000000,
+    mdtFieldDef                 = 0x04000000,
+    mdtMethodDef                = 0x06000000,
+    mdtParamDef                 = 0x08000000,
+    mdtInterfaceImpl            = 0x09000000,
+    mdtMemberRef                = 0x0a000000,
+    mdtCustomAttribute          = 0x0c000000,
+    mdtPermission               = 0x0e000000,
+    mdtSignature                = 0x11000000,
+    mdtEvent                    = 0x14000000,
+    mdtProperty                 = 0x17000000,
+    mdtModuleRef                = 0x1a000000,
+    mdtTypeSpec                 = 0x1b000000,
+    mdtAssembly                 = 0x20000000,
+    mdtAssemblyRef              = 0x23000000,
+    mdtFile                     = 0x26000000,
+    mdtExportedType             = 0x27000000,
+    mdtManifestResource         = 0x28000000,
+    mdtGenericParam             = 0x2a000000,
+    mdtMethodSpec               = 0x2b000000,
+    mdtGenericParamConstraint   = 0x2c000000,
+    mdtString                   = 0x70000000,
+    mdtName                     = 0x71000000,
+    mdtBaseType                 = 0x72000000,
+} CorTokenType;
+
+typedef enum CorElementType
+{
+    ELEMENT_TYPE_END            = 0x00,
+    ELEMENT_TYPE_VOID           = 0x01,
+    ELEMENT_TYPE_BOOLEAN        = 0x02,
+    ELEMENT_TYPE_CHAR           = 0x03,
+    ELEMENT_TYPE_I1             = 0x04,
+    ELEMENT_TYPE_U1             = 0x05,
+    ELEMENT_TYPE_I2             = 0x06,
+    ELEMENT_TYPE_U2             = 0x07,
+    ELEMENT_TYPE_I4             = 0x08,
+    ELEMENT_TYPE_U4             = 0x09,
+    ELEMENT_TYPE_I8             = 0x0a,
+    ELEMENT_TYPE_U8             = 0x0b,
+    ELEMENT_TYPE_R4             = 0x0c,
+    ELEMENT_TYPE_R8             = 0x0d,
+    ELEMENT_TYPE_STRING         = 0x0e,
+    ELEMENT_TYPE_PTR            = 0x0f,
+    ELEMENT_TYPE_BYREF          = 0x10,
+    ELEMENT_TYPE_VALUETYPE      = 0x11,
+    ELEMENT_TYPE_CLASS          = 0x12,
+    ELEMENT_TYPE_VAR            = 0x13,
+    ELEMENT_TYPE_ARRAY          = 0x14,
+    ELEMENT_TYPE_GENERICINST    = 0x15,
+    ELEMENT_TYPE_TYPEDBYREF     = 0x16,
+    ELEMENT_TYPE_I              = 0x18,
+    ELEMENT_TYPE_U              = 0x19,
+    ELEMENT_TYPE_FNPTR          = 0x1b,
+    ELEMENT_TYPE_OBJECT         = 0x1c,
+    ELEMENT_TYPE_SZARRAY        = 0x1d,
+    ELEMENT_TYPE_MVAR           = 0x1e,
+    ELEMENT_TYPE_CMOD_REQD      = 0x1f,
+    ELEMENT_TYPE_CMOD_OPT       = 0x20,
+    ELEMENT_TYPE_INTERNAL       = 0x21,
+    ELEMENT_TYPE_MAX            = 0x22,
+    ELEMENT_TYPE_MODIFIER       = 0x40,
+    ELEMENT_TYPE_SENTINEL       = 0x01 | ELEMENT_TYPE_MODIFIER,
+    ELEMENT_TYPE_PINNED         = 0x05 | ELEMENT_TYPE_MODIFIER,
+    ELEMENT_TYPE_R4_HFA         = 0x06 | ELEMENT_TYPE_MODIFIER,
+    ELEMENT_TYPE_R8_HFA         = 0x07 | ELEMENT_TYPE_MODIFIER,
+
+} CorElementType;
+
+#define RidToToken(rid,tktype) ((rid) |= (tktype))
+#define TokenFromRid(rid,tktype) ((rid) | (tktype))
+#define RidFromToken(tk) ((RID)((tk) & 0x00ffffff))
+#define TypeFromToken(tk) ((ULONG32)((tk) & 0xff000000))
+#define IsNilToken(tk) ((RidFromToken(tk)) == 0)
+
+typedef LPVOID  mdScope;
+typedef ULONG32 mdToken;
+
+typedef mdToken mdModule;
+typedef mdToken mdTypeRef;
+typedef mdToken mdTypeDef;
+typedef mdToken mdFieldDef;
+typedef mdToken mdMethodDef;
+typedef mdToken mdParamDef;
+typedef mdToken mdInterfaceImpl;
+typedef mdToken mdMemberRef;
+typedef mdToken mdCustomAttribute;
+typedef mdToken mdPermission;
+typedef mdToken mdSignature;
+typedef mdToken mdEvent;
+typedef mdToken mdProperty;
+typedef mdToken mdModuleRef;
+typedef mdToken mdAssembly;
+typedef mdToken mdAssemblyRef;
+typedef mdToken mdFile;
+typedef mdToken mdExportedType;
+typedef mdToken mdManifestResource;
+typedef mdToken mdTypeSpec;
+typedef mdToken mdGenericParam;
+typedef mdToken mdMethodSpec;
+typedef mdToken mdGenericParamConstraint;
+typedef mdToken mdString;
+typedef mdToken mdCPToken;
+
+#endif /* __WINE_CORHDR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h
new file mode 100644
index 0000000..5c0bca9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h
@@ -0,0 +1,98 @@
+/*
+ * Control panel definitions
+ *
+ * Copyright (C) 2001 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_CPL
+#define _INC_CPL
+
+#include <pshpack1.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WM_CPL_LAUNCH   (WM_USER+1000)
+#define WM_CPL_LAUNCHED (WM_USER+1001)
+
+typedef LONG (APIENTRY *APPLET_PROC)(HWND hwndCpl, UINT msg, LPARAM lParam1, LPARAM lParam2);
+
+typedef struct tagCPLINFO {
+    int     idIcon;
+    int     idName;
+    int     idInfo;
+    LONG_PTR lData;
+} CPLINFO, *LPCPLINFO;
+
+typedef struct tagNEWCPLINFOA
+{
+    DWORD   dwSize;
+    DWORD   dwFlags;
+    DWORD   dwHelpContext;
+    LONG_PTR lData;
+    HICON   hIcon;
+    CHAR    szName[32];
+    CHAR    szInfo[64];
+    CHAR    szHelpFile[128];
+} NEWCPLINFOA, *LPNEWCPLINFOA;
+
+typedef struct tagNEWCPLINFOW
+{
+    DWORD   dwSize;
+    DWORD   dwFlags;
+    DWORD   dwHelpContext;
+    LONG_PTR lData;
+    HICON   hIcon;
+    WCHAR   szName[32];
+    WCHAR   szInfo[64];
+    WCHAR   szHelpFile[128];
+} NEWCPLINFOW, *LPNEWCPLINFOW;
+
+DECL_WINELIB_TYPE_AW(NEWCPLINFO)
+DECL_WINELIB_TYPE_AW(LPNEWCPLINFO)
+
+#define CPL_DYNAMIC_RES 	0
+#define CPL_INIT        	1
+#define CPL_GETCOUNT    	2
+#define CPL_INQUIRE     	3
+#define CPL_SELECT      	4
+#define CPL_DBLCLK      	5
+#define CPL_STOP        	6
+#define CPL_EXIT        	7
+#define CPL_NEWINQUIRE		8
+#define CPL_STARTWPARMSA 	9
+#define CPL_STARTWPARMSW 	10
+#define CPL_STARTWPARMS WINELIB_NAME_AW(CPL_STARTWPARMS)
+#define CPL_SETUP		200
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* _INC_CPL */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl
new file mode 100644
index 0000000..f20d7be
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733ab2-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface ICreateRow : IUnknown
+{
+    [local]
+    HRESULT CreateRow([in, unique] IUnknown *pUnkOuter,
+                      [in] LPCOLESTR pwszURL,
+                      [in] DBBINDURLFLAG dwBindURLFlags,
+                      [in] REFGUID rguid,
+                      [in] REFIID riid,
+                      [in,  unique] IAuthenticate *pAuthenticate,
+                      [in, out, unique] DBIMPLICITSESSION *pImplSession,
+                      [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+                      [out, annotation("__deref_opt_out_opt")] LPOLESTR *ppwszNewURL,
+                      [out, iid_is(riid)] IUnknown **ppUnk);
+
+    [call_as(CreateRow)]
+    HRESULT RemoteCreateRow([in] IUnknown *pUnkOuter,
+                            [in] LPCOLESTR pwszURL,
+                            [in] DBBINDURLFLAG dwBindURLFlags,
+                            [in] REFGUID rguid,
+                            [in] REFIID riid,
+                            [in] IAuthenticate *pAuthenticate,
+                            [in] IUnknown *pSessionUnkOuter,
+                            [in, unique] IID *piid,
+                            [in, out, unique, iid_is(piid)] IUnknown **ppSession,
+                            [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+                            [in, out, unique] LPOLESTR *ppwszNewURL,
+                            [out, iid_is(riid)] IUnknown **ppUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h
new file mode 100644
index 0000000..9a93e69
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2008 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __CRYPTDLG_H__
+#define __CRYPTDLG_H__
+
+#include <prsht.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CRYPTDLG_FLAGS_MASK         0xff000000
+#define CRYPTDLG_REVOCATION_DEFAULT 0x00000000
+#define CRYPTDLG_REVOCATION_ONLINE  0x80000000
+#define CRYPTDLG_REVOCATION_CACHE   0x40000000
+#define CRYPTDLG_REVOCATION_NONE    0x20000000
+
+#define CRYPTDLG_POLICY_MASK          0x0000ffff
+#define POLICY_IGNORE_NON_CRITICAL_BC 0x00000001
+
+#define CRYPTDLG_ACTION_MASK             0xffff0000
+#define ACTION_REVOCATION_DEFAULT_ONLINE 0x00010000
+#define ACTION_REVOCATION_DEFAULT_CACHE  0x00020000
+
+typedef BOOL (WINAPI *PFNCMFILTERPROC)(PCCERT_CONTEXT, DWORD, DWORD, DWORD);
+
+#define CERT_DISPWELL_SELECT                 1
+#define CERT_DISPWELL_TRUST_CA_CERT          2
+#define CERT_DISPWELL_TRUST_LEAF_CERT        3
+#define CERT_DISPWELL_TRUST_ADD_CA_CERT      4
+#define CERT_DISPWELL_TRUST_ADD_LEAF_CERT    5
+#define CERT_DISPWELL_DISTRUST_CA_CERT       6
+#define CERT_DISPWELL_DISTRUST_LEAF_CERT     7
+#define CERT_DISPWELL_DISTRUST_ADD_CA_CERT   8
+#define CERT_DISPWELL_DISTRUST_ADD_LEAF_CERT 9
+
+typedef UINT (WINAPI *PFNCMHOOKPROC)(HWND, UINT, WPARAM, LPARAM);
+
+#define CSS_SELECTCERT_MASK      0x00ffffff
+#define CSS_HIDE_PROPERTIES      0x00000001
+#define CSS_ENABLEHOOK           0x00000002
+#define CSS_ALLOWMULTISELECT     0x00000004
+#define CSS_SHOW_HELP            0x00000010
+#define CSS_ENABLETEMPLATE       0x00000020
+#define CSS_ENABLETEMPLATEHANDLE 0x00000040
+
+#define SELCERT_OK         IDOK
+#define SELCERT_CANCEL     IDCANCEL
+#define SELCERT_PROPERTIES 100
+#define SELCERT_FINEPRINT  101
+#define SELCERT_CERTLIST   102
+#define SELCERT_HELP       IDHELP
+#define SELCERT_ISSUED_TO  103
+#define SELCERT_VALIDITY   104
+#define SELCERT_ALGORITHM  105
+#define SELCERT_SERIAL_NUM 106
+#define SELCERT_THUMBPRINT 107
+
+typedef struct tagCSSA
+{
+    DWORD           dwSize;
+    HWND            hwndParent;
+    HINSTANCE       hInstance;
+    LPCSTR          pTemplateName;
+    DWORD           dwFlags;
+    LPCSTR          szTitle;
+    DWORD           cCertStore;
+    HCERTSTORE     *arrayCertStore;
+    LPCSTR          szPurposeOid;
+    DWORD           cCertContext;
+    PCCERT_CONTEXT *arrayCertContext;
+    DWORD           lCustData;
+    PFNCMHOOKPROC   pfnHook;
+    PFNCMFILTERPROC pfnFilter;
+    LPCSTR          szHelpFileName;
+    DWORD           dwHelpId;
+    HCRYPTPROV      hprov;
+} CERT_SELECT_STRUCT_A, *PCERT_SELECT_STRUCT_A;
+
+typedef struct tagCSSW
+{
+    DWORD           dwSize;
+    HWND            hwndParent;
+    HINSTANCE       hInstance;
+    LPCWSTR         pTemplateName;
+    DWORD           dwFlags;
+    LPCWSTR         szTitle;
+    DWORD           cCertStore;
+    HCERTSTORE     *arrayCertStore;
+    LPCSTR          szPurposeOid;
+    DWORD           cCertContext;
+    PCCERT_CONTEXT *arrayCertContext;
+    DWORD           lCustData;
+    PFNCMHOOKPROC   pfnHook;
+    PFNCMFILTERPROC pfnFilter;
+    LPCWSTR         szHelpFileName;
+    DWORD           dwHelpId;
+    HCRYPTPROV      hprov;
+} CERT_SELECT_STRUCT_W, *PCERT_SELECT_STRUCT_W;
+
+#define CERT_SELECT_STRUCT WINELIB_NAME_AW(CERT_SELECT_STRUCT_)
+
+BOOL WINAPI CertSelectCertificateA(PCERT_SELECT_STRUCT_A pCertSelectInfo);
+BOOL WINAPI CertSelectCertificateW(PCERT_SELECT_STRUCT_W pCertSelectInfo);
+#define CertSelectCertificate WINELIB_NAME_AW(CertSelectCertificate)
+
+#define CM_VIEWFLAGS_MASK       0x00ffffff
+#define CM_ENABLEHOOK           0x00000001
+#define CM_SHOW_HELP            0x00000002
+#define CM_SHOW_HELPICON        0x00000004
+#define CM_ENABLETEMPLATE       0x00000008
+#define CM_HIDE_ADVANCEPAGE     0x00000010
+#define CM_HIDE_TRUSTPAGE       0x00000020
+#define CM_NO_NAMECHANGE        0x00000040
+#define CM_NO_EDITTRUST         0x00000080
+#define CM_HIDE_DETAILPAGE      0x00000100
+#define CM_ADD_CERT_STORES      0x00000200
+#define CERTVIEW_CRYPTUI_LPARAM 0x00800000
+
+typedef struct tagCERT_VIEWPROPERTIES_STRUCT_A
+{
+    DWORD           dwSize;
+    HWND            hwndParent;
+    HINSTANCE       hInstance;
+    DWORD           dwFlags;
+    LPCSTR          szTitle;
+    PCCERT_CONTEXT  pCertContext;
+    LPSTR          *arrayPurposes;
+    DWORD           cArrayPurposes;
+    DWORD           cRootStores;
+    HCERTSTORE     *rghstoreRoots;
+    DWORD           cStores;
+    HCERTSTORE     *rghstoreCAs;
+    DWORD           cTrustStores;
+    HCERTSTORE     *rghstoreTrust;
+    HCRYPTPROV      hprov;
+    DWORD           lCustData;
+    DWORD           dwPad;
+    LPCSTR          szHelpFileName;
+    DWORD           dwHelpId;
+    DWORD           nStartPage;
+    DWORD           cArrayPropSheetPages;
+    /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we
+     * don't allow in our own headers.  It's probably wrong, but we're not
+     * compatible.
+     */
+    PROPSHEETPAGEA *arrayPropSheetPages;
+} CERT_VIEWPROPERTIES_STRUCT_A, *PCERT_VIEWPROPERTIES_STRUCT_A;
+
+typedef struct tagCERT_VIEWPROPERTIES_STRUCT_W
+{
+    DWORD           dwSize;
+    HWND            hwndParent;
+    HINSTANCE       hInstance;
+    DWORD           dwFlags;
+    LPCWSTR         szTitle;
+    PCCERT_CONTEXT  pCertContext;
+    LPSTR          *arrayPurposes;
+    DWORD           cArrayPurposes;
+    DWORD           cRootStores;
+    HCERTSTORE     *rghstoreRoots;
+    DWORD           cStores;
+    HCERTSTORE     *rghstoreCAs;
+    DWORD           cTrustStores;
+    HCERTSTORE     *rghstoreTrust;
+    HCRYPTPROV      hprov;
+    DWORD           lCustData;
+    DWORD           dwPad;
+    LPCWSTR         szHelpFileName;
+    DWORD           dwHelpId;
+    DWORD           nStartPage;
+    DWORD           cArrayPropSheetPages;
+    /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we
+     * don't allow in our own headers.  It's probably wrong, but we're not
+     * compatible.
+     */
+    PROPSHEETPAGEW *arrayPropSheetPages;
+} CERT_VIEWPROPERTIES_STRUCT_W, *PCERT_VIEWPROPERTIES_STRUCT_W;
+
+#define CERT_VIEWPROPERTIES_STRUCT WINELIB_NAME_AW(CERT_VIEWPROPERTIES_STRUCT_)
+#define PCERT_VIEWPROPERTIES_STRUCT \
+ WINELIB_NAME_AW(PCERT_VIEWPROPERTIES_STRUCT_)
+
+BOOL WINAPI CertViewPropertiesA(PCERT_VIEWPROPERTIES_STRUCT_A pCertViewInfo);
+BOOL WINAPI CertViewPropertiesW(PCERT_VIEWPROPERTIES_STRUCT_W pCertViewInfo);
+#define CertViewProperties WINELIB_NAME_AW(CertViewProperties)
+
+#define CERT_FILTER_OP_EXISTS     1
+#define CERT_FILTER_OP_NOT_EXISTS 2
+#define CERT_FILTER_OP_EQUALITY   3
+
+typedef struct tagCMOID
+{
+    LPCSTR szExtensionOID;
+    DWORD  dwTestOperation;
+    LPBYTE pbTestData;
+    DWORD  cbTestData;
+} CERT_FILTER_EXTENSION_MATCH;
+
+#define CERT_FILTER_INCLUDE_V1_CERTS  0x0001
+#define CERT_FILTER_VALID_TIME_RANGE  0x0002
+#define CERT_FILTER_VALID_SIGNATURE   0x0004
+#define CERT_FILTER_LEAF_CERTS_ONLY   0x0008
+#define CERT_FILTER_ISSUER_CERTS_ONLY 0x0010
+#define CERT_FILTER_KEY_EXISTS        0x0020
+
+typedef struct tagCMFLTR
+{
+    DWORD                        dwSize;
+    DWORD                        cExtensionChecks;
+    CERT_FILTER_EXTENSION_MATCH *arrayExtensionChecks;
+    DWORD                        dwCheckingFlags;
+} CERT_FILTER_DATA;
+
+DWORD WINAPI GetFriendlyNameOfCertA(PCCERT_CONTEXT pccert, LPSTR pchBuffer,
+ DWORD cchBuffer);
+DWORD WINAPI GetFriendlyNameOfCertW(PCCERT_CONTEXT pccert, LPWSTR pchBuffer,
+ DWORD cchBuffer);
+#define GetFriendlyNameOfCert WINELIB_NAME_AW(GetFriendlyNameOfCert)
+
+#define CERT_CERTIFICATE_ACTION_VERIFY \
+ { 0x7801ebd0, 0xcf4b, 0x11d0, { 0x85,0x1f,0x00,0x60,0x97,0x93,0x87,0xea }}
+#define szCERT_CERTIFICATE_ACTION_VERIFY \
+ "{7801ebd0-cf4b-11d0-851f-0060979387ea}"
+
+typedef HRESULT (WINAPI *PFNTRUSTHELPER)(PCCERT_CONTEXT, DWORD, BOOL, LPBYTE);
+
+#define CERT_VALIDITY_MASK_VALIDITY              0x0000ffff
+#define CERT_VALIDITY_BEFORE_START               0x00000001
+#define CERT_VALIDITY_AFTER_END                  0x00000002
+#define CERT_VALIDITY_SIGNATURE_FAILS            0x00000004
+#define CERT_VALIDITY_CERTIFICATE_REVOKED        0x00000008
+#define CERT_VALIDITY_KEY_USAGE_EXT_FAILURE      0x00000010
+#define CERT_VALIDITY_EXTENDED_USAGE_FAILURE     0x00000020
+#define CERT_VALIDITY_NAME_CONSTRAINTS_FAILURE   0x00000040
+#define CERT_VALIDITY_UNKNOWN_CRITICAL_EXTENSION 0x00000080
+#define CERT_VALIDITY_ISSUER_INVALID             0x00000100
+#define CERT_VALIDITY_OTHER_EXTENSION_FAILURE    0x00000200
+#define CERT_VALIDITY_PERIOD_NESTING_FAILURE     0x00000400
+#define CERT_VALIDITY_OTHER_ERROR                0x00000800
+
+#define CERT_VALIDITY_MASK_TRUST                 0xffff0000
+#define CERT_VALIDITY_EXPLICITLY_DISTRUSTED      0x01000000
+#define CERT_VALIDITY_ISSUER_DISTRUST            0x02000000
+#define CERT_VALIDITY_NO_ISSUER_CERT_FOUND       0x10000000
+#define CERT_VALIDITY_NO_CRL_FOUND               0x20000000
+#define CERT_VALIDITY_CRL_OUT_OF_DATE            0x40000000
+#define CERT_VALIDITY_NO_TRUST_DATA              0x80000000
+
+#define CERT_TRUST_MASK                0x00ffffff
+#define CERT_TRUST_DO_FULL_SEARCH      0x00000001
+#define CERT_TRUST_PERMIT_MISSING_CRLS 0x00000002
+#define CERT_TRUST_DO_FULL_TRUST       0x00000005
+#define CERT_TRUST_ADD_CERT_STORES     CM_ADD_CERT_STORES
+
+typedef struct _CERT_VERIFY_CERTIFICATE_TRUST
+{
+    DWORD            cbSize;
+    PCCERT_CONTEXT   pccert;
+    DWORD            dwFlags;
+    DWORD            dwIgnoreErr;
+    DWORD           *pdwErrors;
+    LPSTR            pszUsageOid;
+    HCRYPTPROV       hprov;
+    DWORD            cRootStores;
+    HCERTSTORE      *rghstoreRoots;
+    DWORD            cStores;
+    HCERTSTORE      *rghstoreCAs;
+    DWORD            cTrustStores;
+    HCERTSTORE      *rghstoreTrust;
+    DWORD            lCustData;
+    PFNTRUSTHELPER   pfnTrustHelper;
+    DWORD           *pcchain;
+    PCCERT_CONTEXT **prgChain;
+    DWORD          **prgdwErrors;
+    DATA_BLOB      **prgpbTrustInfo;
+} CERT_VERIFY_CERTIFICATE_TRUST, *PCERT_VERIFY_CERTIFICATE_TRUST;
+
+#define CTL_MODIFY_REQUEST_ADD_NOT_TRUSTED 1
+#define CTL_MODIFY_REQUEST_REMOVE          2
+#define CTL_MODIFY_REQUEST_ADD_TRUSTED     3
+
+typedef struct _CTL_MODIFY_REQUEST
+{
+    PCCERT_CONTEXT pccert;
+    DWORD          dwOperation;
+    DWORD          dwError;
+} CTL_MODIFY_REQUEST, *PCTL_MODIFY_REQUEST;
+
+HRESULT WINAPI CertModifyCertificatesToTrust(int cCertStore,
+ PCTL_MODIFY_REQUEST rgCerts, LPCSTR szPurpose, HWND hwnd,
+ HCERTSTORE hcertstoreTrust);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h
new file mode 100644
index 0000000..9426dc0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h
@@ -0,0 +1,447 @@
+/*
+ * Copyright (C) 2008 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __CRYPTUIAPI_H__
+#define __CRYPTUIAPI_H__
+
+#include <wintrust.h>
+#include <wincrypt.h>
+#include <prsht.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <pshpack8.h>
+
+BOOL WINAPI CryptUIDlgViewContext(DWORD dwContextType, LPVOID pvContext,
+ HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, LPVOID pvReserved);
+
+/* Values for dwDontUseColumn */
+#define CRYPTUI_SELECT_ISSUEDTO_COLUMN     0x00000001
+#define CRYPTUI_SELECT_ISSUEDBY_COLUMN     0x00000002
+#define CRYPTUI_SELECT_INTENDEDUSE_COLUMN  0x00000004
+#define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN 0x00000008
+#define CRYPTUI_SELECT_LOCATION_COLUMN     0x00000010
+#define CRYPTUI_SELECT_EXPIRATION_COLUMN   0x00000020
+
+PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore(
+ HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString,
+ DWORD dwDontUseColumn, DWORD dwFlags, LPVOID pvReserved);
+
+/* Values for CRYPTUI_CERT_MGR_STRUCT's dwFlags */
+#define CRYPTUI_CERT_MGR_PUBLISHER_TAB   0x00000004
+#define CRYPTUI_CERT_MGR_TAB_MASK        0x0000000f
+#define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG 0x00008000
+
+typedef struct _CRYPTUI_CERT_MGR_STRUCT
+{
+    DWORD   dwSize;
+    HWND    hwndParent;
+    DWORD   dwFlags;
+    LPCWSTR pwszTitle;
+    LPCSTR  pszInitUsageOID;
+} CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;
+typedef const struct _CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT;
+
+BOOL WINAPI CryptUIDlgCertMgr(PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr);
+
+typedef BOOL (WINAPI *PFNCFILTERPROC)(PCCERT_CONTEXT pCertContext,
+ BOOL *pfInitialSelectedCert, void *pvCallbackData);
+
+typedef struct tagCRYPTUI_INITDIALOG_STRUCT
+{
+    LPARAM         lParam;
+    PCCERT_CONTEXT pCertContext;
+} CRYPTUI_INITDIALOG_STRUCT, *PCRYPTUI_INITDIALOG_STRUCT;
+
+/* Values for CRYPTUI_VIEWCERTIFICATE_STRUCT's dwFlags */
+#define CRYPTUI_HIDE_HIERARCHYPAGE               0x00000001
+#define CRYPTUI_HIDE_DETAILPAGE                  0x00000002
+#define CRYPTUI_DISABLE_EDITPROPERTIES           0x00000004
+#define CRYPTUI_ENABLE_EDITPROPERTIES            0x00000008
+#define CRYPTUI_DISABLE_ADDTOSTORE               0x00000010
+#define CRYPTUI_ENABLE_ADDTOSTORE                0x00000020
+#define CRYPTUI_ACCEPT_DECLINE_STYLE             0x00000040
+#define CRYPTUI_IGNORE_UNTRUSTED_ROOT            0x00000080
+#define CRYPTUI_DONT_OPEN_STORES                 0x00000100
+#define CRYPTUI_ONLY_OPEN_ROOT_STORE             0x00000200
+#define CRYPTUI_WARN_UNTRUSTED_ROOT              0x00000400
+#define CRYPTUI_ENABLE_REVOCATION_CHECKING       0x00000800
+#define CRYPTUI_WARN_REMOTE_TRUST                0x00001000
+#define CRYPTUI_DISABLE_EXPORT                   0x00002000
+#define CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT 0x00004000
+#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN    0x00008000
+#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT CRYPTUI_ENABLE_REVOCATION_CHECKING
+#define CRYPTUI_DISABLE_HTMLLINK                 0x00010000
+#define CRYPTUI_DISABLE_ISSUERSTATEMENT          0x00020000
+
+typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA
+{
+    DWORD             dwSize;
+    HWND              hwndParent;
+    DWORD             dwFlags;
+    LPCSTR            szTitle;
+    PCCERT_CONTEXT    pCertContext;
+    LPCSTR           *rgszPurposes;
+    DWORD             cPurposes;
+    union {
+        CRYPT_PROVIDER_DATA const *pCryptProviderData;
+        HANDLE                     hWVTStateData;
+    } DUMMYUNIONNAME;
+    BOOL              fpCryptProviderDataTrustedUsage;
+    DWORD             idxSigner;
+    DWORD             idxCert;
+    BOOL              fCounterSigner;
+    DWORD             idxCounterSigner;
+    DWORD             cStores;
+    HCERTSTORE       *rghStores;
+    DWORD             cPropSheetPages;
+    LPCPROPSHEETPAGEA rgPropSheetPages;
+    DWORD             nStartPage;
+} CRYPTUI_VIEWCERTIFICATE_STRUCTA, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA;
+typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTA *PCCRYPTUI_VIEWCERTIFICATE_STRUCTA;
+
+typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW
+{
+    DWORD             dwSize;
+    HWND              hwndParent;
+    DWORD             dwFlags;
+    LPCWSTR           szTitle;
+    PCCERT_CONTEXT    pCertContext;
+    LPCSTR           *rgszPurposes;
+    DWORD             cPurposes;
+    union {
+        CRYPT_PROVIDER_DATA const *pCryptProviderData;
+        HANDLE                     hWVTStateData;
+    } DUMMYUNIONNAME;
+    BOOL              fpCryptProviderDataTrustedUsage;
+    DWORD             idxSigner;
+    DWORD             idxCert;
+    BOOL              fCounterSigner;
+    DWORD             idxCounterSigner;
+    DWORD             cStores;
+    HCERTSTORE       *rghStores;
+    DWORD             cPropSheetPages;
+    LPCPROPSHEETPAGEW rgPropSheetPages;
+    DWORD             nStartPage;
+} CRYPTUI_VIEWCERTIFICATE_STRUCTW, *PCRYPTUI_VIEWCERTIFICATE_STRUCTW;
+typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTW *PCCRYPTUI_VIEWCERTIFICATE_STRUCTW;
+
+#define CRYPTUI_VIEWCERTIFICATE_STRUCT   WINELIB_NAME_AW(CRYPTUI_VIEWCERTIFICATE_STRUCT)
+#define PCCRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(PCCRYPTUI_VIEWCERTIFICATE_STRUCT)
+
+BOOL WINAPI CryptUIDlgViewCertificateA(
+ PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, BOOL *pfPropertiesChanged);
+BOOL WINAPI CryptUIDlgViewCertificateW(
+ PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged);
+#define CryptUIDlgViewCertificate WINELIB_NAME_AW(CryptUIDlgViewCertificate)
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
+{
+    DWORD   dwSize;
+    GUID   *pGuidSubject;
+    DWORD   cbBlob;
+    BYTE   *pbBlob;
+    LPCWSTR pwszDisplayName;
+} CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
+{
+    DWORD          dwSize;
+    DWORD          cCertStore;
+    HCERTSTORE    *rghCertStore;
+    PFNCFILTERPROC pFilterCallback;
+    void          *pvCallbackData;
+} CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
+{
+    DWORD  dwSize;
+    LPWSTR pwszPvkFileName;
+    LPWSTR pwszProvName;
+    DWORD  dwProvType;
+} CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO,
+ *PCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
+{
+    DWORD  dwSize;
+    LPWSTR pwszSigningCertFileName;
+    DWORD  dwPvkChoice;
+    union {
+        PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo;
+        PCRYPT_KEY_PROV_INFO                    pPvkProvInfo;
+    } DUMMYUNIONNAME;
+} CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO,
+ *PCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
+{
+    DWORD             dwSize;
+    DWORD             dwAttrFlags;
+    LPCWSTR           pwszDescription;
+    LPCWSTR           pwszMoreInfoLocation;
+    LPCSTR            pszHashAlg;
+    LPCWSTR           pwszSigningCertDisplayString;
+    HCERTSTORE        hAdditionalCertStore;
+    PCRYPT_ATTRIBUTES psAuthenticated;
+    PCRYPT_ATTRIBUTES psUnauthenticated;
+} CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO,
+ *PCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_INFO
+{
+    DWORD   dwSize;
+    DWORD   dwSubjectChoice;
+    union {
+        LPCWSTR                              pwszFileName;
+        PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo;
+    } DUMMYUNIONNAME1;
+    DWORD   dwSigningCertChoice;
+    union {
+        PCCERT_CONTEXT                           pSigningCertContext;
+        PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO    pSigningCertStore;
+        PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo;
+    } DUMMYUNIONNAME2;
+    LPCWSTR pwszTimestampURL;
+    DWORD   dwAdditionalCertChoice;
+    PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO pSignExtInfo;
+} CRYPTUI_WIZ_DIGITAL_SIGN_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
+{
+    DWORD dwSize;
+    DWORD cbBlob;
+    BYTE *pbBlob;
+} CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
+
+/* Values for CryptUIWizDigitalSign's dwFlags */
+#define CRYPTUI_WIZ_NO_UI                            0x00000001
+#define CRYPTUI_WIZ_DIGITAL_SIGN_EXCLUDE_PAGE_HASHES 0x00000002
+#define CRYPTUI_WIZ_DIGITAL_SIGN_INCLUDE_PAGE_HASHES 0x00000004
+
+BOOL WINAPI CryptUIWizDigitalSign(DWORD dwFlags, HWND hwndParent,
+ LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo,
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext);
+
+BOOL WINAPI CryptUIWizFreeDigitalSignContext(
+ PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext);
+
+/* Values for CRYPTUI_WIZ_EXPORT_INFO's dwSubjectChoice */
+#define CRYPTUI_WIZ_EXPORT_CERT_CONTEXT                 1
+#define CRYPTUI_WIZ_EXPORT_CTL_CONTEXT                  2
+#define CRYPTUI_WIZ_EXPORT_CRL_CONTEXT                  3
+#define CRYPTUI_WIZ_EXPORT_CERT_STORE                   4
+#define CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY 5
+#define CRYPTUI_WIZ_EXPORT_FORMAT_CRL                   6
+#define CRYPTUI_WIZ_EXPORT_FORMAT_CTL                   7
+
+typedef struct _CRYPTUI_WIZ_EXPORT_INFO
+{
+    DWORD       dwSize;
+    LPCWSTR     pwszExportFileName;
+    DWORD       dwSubjectChoice;
+    union {
+        PCCERT_CONTEXT pCertContext;
+        PCCTL_CONTEXT  pCTLContext;
+        PCCRL_CONTEXT  pCRLContext;
+        HCERTSTORE     hCertStore;
+    } DUMMYUNIONNAME;
+    DWORD       cStores;
+    HCERTSTORE *rghStores;
+} CRYPTUI_WIZ_EXPORT_INFO, *PCRYPTUI_WIZ_EXPORT_INFO;
+typedef const CRYPTUI_WIZ_EXPORT_INFO *PCCRYPTUI_WIZ_EXPORT_INFO;
+
+/* Values for CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO's dwExportFormat */
+#define CRYPTUI_WIZ_EXPORT_FORMAT_DER                   1
+#define CRYPTUI_WIZ_EXPORT_FORMAT_PFX                   2
+#define CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7                 3
+#define CRYPTUI_WIZ_EXPORT_FORMAT_BASE64                4
+#define CRYPTUI_WIZ_EXPORT_FORMAT_SERIALIZED_CERT_STORE 5
+
+typedef struct _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
+{
+    DWORD   dwSize;
+    DWORD   dwExportFormat;
+    BOOL    fExportChain;
+    BOOL    fExportPrivateKeys;
+    LPCWSTR pwszPassword;
+    BOOL    fStrongEncryption;
+} CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO, *PCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;
+typedef const CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO *
+ PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;
+
+BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent,
+ LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid);
+
+/* Values for CRYPTUI_WIZ_IMPORT_SRC_INFO's dwSubjectChoice */
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_FILE         1
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT 2
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT  3
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT  4
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE   5
+
+typedef struct _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO
+{
+    DWORD   dwSize;
+    DWORD   dwSubjectChoice;
+    union {
+        LPCWSTR        pwszFileName;
+        PCCERT_CONTEXT pCertContext;
+        PCCTL_CONTEXT  pCTLContext;
+        PCCRL_CONTEXT  pCRLContext;
+        HCERTSTORE     hCertStore;
+    } DUMMYUNIONNAME;
+    DWORD   dwFlags;
+    LPCWSTR pwszPassword;
+} CRYPTUI_WIZ_IMPORT_SRC_INFO, *PCRYPTUI_WIZ_IMPORT_SRC_INFO;
+typedef const CRYPTUI_WIZ_IMPORT_SRC_INFO *PCCRYPTUI_WIZ_IMPORT_SRC_INFO;
+
+/* Values for CryptUIWizImport's dwFlags */
+#define CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000
+#define CRYPTUI_WIZ_IMPORT_ALLOW_CERT           0x00020000
+#define CRYPTUI_WIZ_IMPORT_ALLOW_CRL            0x00040000
+#define CRYPTUI_WIZ_IMPORT_ALLOW_CTL            0x00080000
+#define CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE      0x00100000
+#define CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER       0x00200000
+#define CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE    0x00400000
+
+BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent,
+ LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
+ HCERTSTORE hDestCertStore);
+
+/* Definitions missing from PSDK's cryptuiapi.h, but documented on MSDN. */
+typedef BOOL (WINAPI *PFNCCERTDISPLAYPROC)(PCCERT_CONTEXT pCertContext,
+ HWND hWndSelCertDlg, void *pvCallbackData);
+
+/* Values for CRYPTUI_SELECTCERTIFICATE_STRUCT's dwFlags */
+#define CRYPTUI_SELECTCERT_MULTISELECT 0x00000001
+
+typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTA
+{
+    DWORD               dwSize;
+    HWND                hwndParent;
+    DWORD               dwFlags;
+    LPCSTR              szTitle;
+    DWORD               dwDontUseColumn;
+    LPCSTR              szDisplayString;
+    PFNCFILTERPROC      pFilterCallback;
+    PFNCCERTDISPLAYPROC pDisplayCallback;
+    void               *pvCallbackData;
+    DWORD               cDisplayStores;
+    HCERTSTORE         *rghDisplayStores;
+    DWORD               cStores;
+    HCERTSTORE         *rghStores;
+    DWORD               cPropSheetPages;
+    LPCPROPSHEETPAGEA   rgPropSheetPages;
+    HCERTSTORE          hSelectedCertStore;
+} CRYPTUI_SELECTCERTIFICATE_STRUCTA, *PCRYPTUI_SELECTCERTIFICATE_STRUCTA;
+typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTA *
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTA;
+
+typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTW
+{
+    DWORD               dwSize;
+    HWND                hwndParent;
+    DWORD               dwFlags;
+    LPCWSTR             szTitle;
+    DWORD               dwDontUseColumn;
+    LPCWSTR             szDisplayString;
+    PFNCFILTERPROC      pFilterCallback;
+    PFNCCERTDISPLAYPROC pDisplayCallback;
+    void               *pvCallbackData;
+    DWORD               cDisplayStores;
+    HCERTSTORE         *rghDisplayStores;
+    DWORD               cStores;
+    HCERTSTORE         *rghStores;
+    DWORD               cPropSheetPages;
+    LPCPROPSHEETPAGEW   rgPropSheetPages;
+    HCERTSTORE          hSelectedCertStore;
+} CRYPTUI_SELECTCERTIFICATE_STRUCTW, *PCRYPTUI_SELECTCERTIFICATE_STRUCTW;
+typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTW *
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTW;
+
+PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA(
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc);
+PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc);
+
+typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTA
+{
+    DWORD             dwSize;
+    HWND              hwndParent;
+    DWORD             dwFlags;
+    LPCSTR            szTitle;
+    CMSG_SIGNER_INFO *pSignerInfo;
+    HCRYPTMSG         hMsg;
+    LPCSTR            pszOID;
+    DWORD_PTR         dwReserved;
+    DWORD             cStores;
+    HCERTSTORE       *rghStores;
+    DWORD             cPropSheetPages;
+    LPCPROPSHEETPAGEA rgPropSheetPages;
+} CRYPTUI_VIEWSIGNERINFO_STRUCTA, *PCRYPTUI_VIEWSIGNERINFO_STRUCTA;
+
+typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTW
+{
+    DWORD             dwSize;
+    HWND              hwndParent;
+    DWORD             dwFlags;
+    LPCWSTR           szTitle;
+    CMSG_SIGNER_INFO *pSignerInfo;
+    HCRYPTMSG         hMsg;
+    LPCSTR            pszOID;
+    DWORD_PTR         dwReserved;
+    DWORD             cStores;
+    HCERTSTORE       *rghStores;
+    DWORD             cPropSheetPages;
+    LPCPROPSHEETPAGEW rgPropSheetPages;
+} CRYPTUI_VIEWSIGNERINFO_STRUCTW, *PCRYPTUI_VIEWSIGNERINFO_STRUCTW;
+
+BOOL WINAPI CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi);
+BOOL WINAPI CryptUIDlgViewSignerInfoW(CRYPTUI_VIEWSIGNERINFO_STRUCTW *pcvsi);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl
new file mode 100644
index 0000000..2a4daa5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2010 Justin Chevrier
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+#endif
+
+interface ITfLangBarEventSink;
+interface ITfLangBarItemMgr;
+interface ITfInputProcessorProfiles;
+
+[
+    object,
+    uuid(87955690-e627-11d2-8ddb-00105a2799b5),
+    pointer_default(unique)
+]
+interface ITfLangBarMgr: IUnknown
+{
+    HRESULT AdviseEventSink(
+        [in] ITfLangBarEventSink *pSink,
+        [in] HWND hwnd,
+        [in] DWORD dwflags,
+        [in] DWORD *pdwCookie);
+
+    HRESULT UnAdviseEventSink(
+        [in] DWORD dwCookie);
+
+    HRESULT GetThreadMarshalInterface(
+        [in] DWORD dwThreadId,
+        [in] DWORD dwType,
+        [in] REFIID riid,
+        [out] IUnknown **ppunk);
+
+    HRESULT GetThreadLangBarItemMgr(
+        [in] DWORD dwThreadId,
+        [out] ITfLangBarItemMgr **pplbie,
+        [out] DWORD *pdwThreadid);
+
+    HRESULT GetInputProcessorProfiles(
+        [in] DWORD dwThreadId,
+        [out] ITfInputProcessorProfiles **ppaip,
+        [out] DWORD *pdwThreadid);
+
+    HRESULT RestoreLastFocus(
+        [out] DWORD *dwThreadId,
+        [in] BOOL fPrev);
+
+    HRESULT SetModalInput(
+        [in] ITfLangBarEventSink *pSink,
+        [in] DWORD dwThreadId,
+        [in] DWORD dwFlags);
+
+    HRESULT ShowFloating(
+        [in] DWORD dwFlags);
+
+    HRESULT GetShowFloatingStatus(
+        [out] DWORD *pdwFlags);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl
new file mode 100644
index 0000000..1d61586
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 Louis Lenders
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "objidl.idl";
+import "unknwn.idl";
+
+typedef struct tagComCallData
+{
+    DWORD dwDispid;
+    DWORD dwReserved;
+    void  *pUserDefined;
+} ComCallData;
+
+/***************************************************************************
+ * IContextCallback
+ */
+[
+  local,
+  object,
+  uuid(000001da-0000-0000-c000-000000000046),
+  pointer_default(unique)
+]
+interface IContextCallback : IUnknown
+{
+    typedef HRESULT (__stdcall *PFNCONTEXTCALL)(ComCallData *pParam);
+
+    HRESULT ContextCallback(
+            [in] PFNCONTEXTCALL pCallback,
+            [in] ComCallData *pParam,
+            [in] REFIID riid,
+            [in] int iMethod,
+            [in] IUnknown *pUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h
new file mode 100644
index 0000000..7c963ae
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2002 Gyorgy 'Nog' Jeney  
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_CUSTCNTL
+#define _INC_CUSTCNTL
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Size defs */
+#define CCHCCCLASS 32
+#define CCHCCDESC 32
+#define CCHCCTEXT 256
+
+/* Custom Control Style Structure */
+typedef struct tagCCSYLEA {
+  DWORD flStyle;
+  DWORD flExtStyle;
+  char szText[CCHCCTEXT];
+  LANGID lgid;
+  WORD wReserved1;
+} CCSTYLEA, *LPCCSTYLEA;
+
+typedef struct tagCCSYLEW {
+  DWORD flStyle;
+  DWORD flExtStyle;
+  WCHAR szText[CCHCCTEXT];
+  LANGID lgid;
+  WORD wReserved1;
+} CCSTYLEW, *LPCCSTYLEW;
+
+#define CCSTYLE   WINELIB_NAME_AW(CCSTYLE)
+#define LPCCSTYLE WINELIB_NAME_AW(LPCCSTYLE)
+
+typedef BOOL (CALLBACK *LPFNCCSTYLEA)(HWND, LPCCSTYLEA);
+typedef BOOL (CALLBACK *LPFNCCSTYLEW)(HWND, LPCCSTYLEW);
+
+#define LPFNCCSTYLE WINELIB_NAME_AW(LPFNCCSTYLE)
+
+typedef int (CALLBACK *LPFNCCSIZETOTEXTA)(DWORD, DWORD, HFONT, LPSTR);
+typedef int (CALLBACK *LPFNCCSIZETOTEXTW)(DWORD, DWORD, HFONT, LPWSTR);
+
+#define LPFNCCSIZETOTEXT WINELIB_NAME_AW(LPFNCCSIZETOTEXT)
+
+/* Custom Control style flags structure */
+typedef struct tagCCSTYLEFLAGA {
+  DWORD flStyle;
+  DWORD flStyleMask;
+  LPSTR pszStyle;
+} CCSTYLEFLAGA, *LPCCSTYLEFLAGA;
+
+typedef struct tagCCSTYLEFLAGW {
+  DWORD flStyle;
+  DWORD flStyleMask;
+  LPWSTR pszStyle;
+} CCSTYLEFLAGW, *LPCCSTYLEFLAGW;
+
+#define CCSTYLEFLAG WINELIB_NAME_AW(CCSTYLEFLAG)
+
+/* Custom Control Flags */
+#define CCF_NOTEXT 0x00000001
+
+/* CustomControl info structure */
+typedef struct tagCCINFOA {
+  char szClass[CCHCCCLASS];
+  DWORD flOptions;
+  char szDesc[CCHCCDESC];
+  UINT cxDefault;
+  UINT cyDefault;
+  DWORD flStyleDefault;
+  DWORD flExtStyleDefault;
+  DWORD flCtrlTypeMask;
+  char szTextDefault[CCHCCTEXT];
+  int cStyleFlags;
+  LPCCSTYLEFLAGA aStyleFlags;
+  LPFNCCSTYLEA lpfnStyle;
+  LPFNCCSIZETOTEXTA lpfnSizeToText;
+  DWORD dwReserved1;
+  DWORD dwReserved2;
+} CCINFOA, *LPCCINFOA;
+
+typedef struct tagCCINFOW {
+  WCHAR szClass[CCHCCCLASS];
+  DWORD flOptions;
+  WCHAR szDesc[CCHCCDESC];
+  UINT cxDefault;
+  UINT cyDefault;
+  DWORD flStyleDefault;
+  DWORD flExtStyleDefault;
+  DWORD flCtrlTypeMask;
+  int cStyleFlags;
+  LPCCSTYLEFLAGW aStyleFlags;
+  WCHAR szTextDefault[CCHCCTEXT];
+  LPFNCCSTYLEW lpfnStyle;
+  LPFNCCSIZETOTEXTW lpfnSizeToText;
+  DWORD dwReserved1;
+  DWORD dwReserved2;
+} CCINFOW, *LPCCINFOW;
+
+DECL_WINELIB_TYPE_AW(CCINFO)
+DECL_WINELIB_TYPE_AW(LPCCINFO)
+
+typedef UINT (CALLBACK *LPFNCCINFOA)(LPCCINFOA);
+typedef UINT (CALLBACK *LPFNCCINFOW)(LPCCINFOW);
+
+DECL_WINELIB_TYPE_AW(LPFNCCINFO)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INC_CUSTCNTL */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h
new file mode 100644
index 0000000..1b4e2c3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h
@@ -0,0 +1,719 @@
+/*
+ * File cvconst.h - MS debug information
+ *
+ * Copyright (C) 2004, Eric Pouech
+ * Copyright (C) 2012, André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* information in this file is highly derived from MSDN DIA information pages */
+
+/* symbols & types enumeration */
+enum SymTagEnum
+{
+   SymTagNull,
+   SymTagExe,
+   SymTagCompiland,
+   SymTagCompilandDetails,
+   SymTagCompilandEnv,
+   SymTagFunction,
+   SymTagBlock,
+   SymTagData,
+   SymTagAnnotation,
+   SymTagLabel,
+   SymTagPublicSymbol,
+   SymTagUDT,
+   SymTagEnum,
+   SymTagFunctionType,
+   SymTagPointerType,
+   SymTagArrayType,
+   SymTagBaseType,
+   SymTagTypedef, 
+   SymTagBaseClass,
+   SymTagFriend,
+   SymTagFunctionArgType, 
+   SymTagFuncDebugStart, 
+   SymTagFuncDebugEnd,
+   SymTagUsingNamespace, 
+   SymTagVTableShape,
+   SymTagVTable,
+   SymTagCustom,
+   SymTagThunk,
+   SymTagCustomType,
+   SymTagManagedType,
+   SymTagDimension,
+   SymTagMax
+};
+
+enum BasicType
+{
+    btNoType = 0,
+    btVoid = 1,
+    btChar = 2,
+    btWChar = 3,
+    btInt = 6,
+    btUInt = 7,
+    btFloat = 8,
+    btBCD = 9,
+    btBool = 10,
+    btLong = 13,
+    btULong = 14,
+    btCurrency = 25,
+    btDate = 26,
+    btVariant = 27,
+    btComplex = 28,
+    btBit = 29,
+    btBSTR = 30,
+    btHresult = 31,
+};
+
+/* kind of UDT */
+enum UdtKind
+{
+    UdtStruct,
+    UdtClass,
+    UdtUnion
+};
+
+/* where a SymTagData is */
+enum LocationType
+{
+    LocIsNull,
+    LocIsStatic,
+    LocIsTLS,
+    LocIsRegRel,
+    LocIsThisRel,
+    LocIsEnregistered,
+    LocIsBitField,
+    LocIsSlot,
+    LocIsIlRel,
+    LocInMetaData,
+    LocIsConstant
+};
+
+/* kind of SymTagData */
+enum DataKind
+{
+    DataIsUnknown,
+    DataIsLocal,
+    DataIsStaticLocal,
+    DataIsParam,
+    DataIsObjectPtr,
+    DataIsFileStatic,
+    DataIsGlobal,
+    DataIsMember,
+    DataIsStaticMember,
+    DataIsConstant
+};
+
+/* values for registers (on different CPUs) */
+enum CV_HREG_e
+{
+    /* those values are common to all supported CPUs (and CPU independent) */
+    CV_ALLREG_ERR       = 30000,
+    CV_ALLREG_TEB       = 30001,
+    CV_ALLREG_TIMER     = 30002,
+    CV_ALLREG_EFAD1     = 30003,
+    CV_ALLREG_EFAD2     = 30004,
+    CV_ALLREG_EFAD3     = 30005,
+    CV_ALLREG_VFRAME    = 30006,
+    CV_ALLREG_HANDLE    = 30007,
+    CV_ALLREG_PARAMS    = 30008,
+    CV_ALLREG_LOCALS    = 30009,
+    CV_ALLREG_TID       = 30010,
+    CV_ALLREG_ENV       = 30011,
+    CV_ALLREG_CMDLN     = 30012,
+
+    /* Intel x86 CPU */
+    CV_REG_NONE         = 0,
+    CV_REG_AL           = 1,
+    CV_REG_CL           = 2,
+    CV_REG_DL           = 3,
+    CV_REG_BL           = 4,
+    CV_REG_AH           = 5,
+    CV_REG_CH           = 6,
+    CV_REG_DH           = 7,
+    CV_REG_BH           = 8,
+    CV_REG_AX           = 9,
+    CV_REG_CX           = 10,
+    CV_REG_DX           = 11,
+    CV_REG_BX           = 12,
+    CV_REG_SP           = 13,
+    CV_REG_BP           = 14,
+    CV_REG_SI           = 15,
+    CV_REG_DI           = 16,
+    CV_REG_EAX          = 17,
+    CV_REG_ECX          = 18,
+    CV_REG_EDX          = 19,
+    CV_REG_EBX          = 20,
+    CV_REG_ESP          = 21,
+    CV_REG_EBP          = 22,
+    CV_REG_ESI          = 23,
+    CV_REG_EDI          = 24,
+    CV_REG_ES           = 25,
+    CV_REG_CS           = 26,
+    CV_REG_SS           = 27,
+    CV_REG_DS           = 28,
+    CV_REG_FS           = 29,
+    CV_REG_GS           = 30,
+    CV_REG_IP           = 31,
+    CV_REG_FLAGS        = 32,
+    CV_REG_EIP          = 33,
+    CV_REG_EFLAGS       = 34,
+
+    /* <pcode> */
+    CV_REG_TEMP         = 40,
+    CV_REG_TEMPH        = 41,
+    CV_REG_QUOTE        = 42,
+    CV_REG_PCDR3        = 43,   /* this includes PCDR4 to PCDR7 */
+    CV_REG_CR0          = 80,   /* this includes CR1 to CR4 */
+    CV_REG_DR0          = 90,   /* this includes DR1 to DR7 */
+    /* </pcode> */
+
+    CV_REG_GDTR         = 110,
+    CV_REG_GDTL         = 111,
+    CV_REG_IDTR         = 112,
+    CV_REG_IDTL         = 113,
+    CV_REG_LDTR         = 114,
+    CV_REG_TR           = 115,
+
+    CV_REG_PSEUDO1      = 116, /* this includes Pseudo02 to Pseudo09 */
+    CV_REG_ST0          = 128, /* this includes ST1 to ST7 */
+    CV_REG_CTRL         = 136,
+    CV_REG_STAT         = 137,
+    CV_REG_TAG          = 138,
+    CV_REG_FPIP         = 139,
+    CV_REG_FPCS         = 140,
+    CV_REG_FPDO         = 141,
+    CV_REG_FPDS         = 142,
+    CV_REG_ISEM         = 143,
+    CV_REG_FPEIP        = 144,
+    CV_REG_FPEDO        = 145,
+    CV_REG_MM0          = 146, /* this includes MM1 to MM7 */
+    CV_REG_XMM0         = 154, /* this includes XMM1 to XMM7 */
+    CV_REG_XMM00        = 162,
+    CV_REG_XMM0L        = 194, /* this includes XMM1L to XMM7L */
+    CV_REG_XMM0H        = 202, /* this includes XMM1H to XMM7H */
+    CV_REG_MXCSR        = 211,
+    CV_REG_EDXEAX       = 212,
+    CV_REG_EMM0L        = 220,
+    CV_REG_EMM0H        = 228,
+    CV_REG_MM00         = 236,
+    CV_REG_MM01         = 237,
+    CV_REG_MM10         = 238,
+    CV_REG_MM11         = 239,
+    CV_REG_MM20         = 240,
+    CV_REG_MM21         = 241,
+    CV_REG_MM30         = 242,
+    CV_REG_MM31         = 243,
+    CV_REG_MM40         = 244,
+    CV_REG_MM41         = 245,
+    CV_REG_MM50         = 246,
+    CV_REG_MM51         = 247,
+    CV_REG_MM60         = 248,
+    CV_REG_MM61         = 249,
+    CV_REG_MM70         = 250,
+    CV_REG_MM71         = 251,
+
+    CV_REG_YMM0         = 252, /* this includes YMM1 to YMM7 */
+    CV_REG_YMM0H        = 260, /* this includes YMM1H to YMM7H */
+    CV_REG_YMM0I0       = 268, /* this includes YMM0I1 to YMM0I3 */
+    CV_REG_YMM1I0       = 272, /* this includes YMM1I1 to YMM1I3 */
+    CV_REG_YMM2I0       = 276, /* this includes YMM2I1 to YMM2I3 */
+    CV_REG_YMM3I0       = 280, /* this includes YMM3I1 to YMM3I3 */
+    CV_REG_YMM4I0       = 284, /* this includes YMM4I1 to YMM4I3 */
+    CV_REG_YMM5I0       = 288, /* this includes YMM5I1 to YMM5I3 */
+    CV_REG_YMM6I0       = 292, /* this includes YMM6I1 to YMM6I3 */
+    CV_REG_YMM7I0       = 296, /* this includes YMM7I1 to YMM7I3 */
+    CV_REG_YMM0F0       = 300, /* this includes YMM0F1 to YMM0F7 */
+    CV_REG_YMM1F0       = 308, /* this includes YMM1F1 to YMM1F7 */
+    CV_REG_YMM2F0       = 316, /* this includes YMM2F1 to YMM2F7 */
+    CV_REG_YMM3F0       = 324, /* this includes YMM3F1 to YMM3F7 */
+    CV_REG_YMM4F0       = 332, /* this includes YMM4F1 to YMM4F7 */
+    CV_REG_YMM5F0       = 340, /* this includes YMM5F1 to YMM5F7 */
+    CV_REG_YMM6F0       = 348, /* this includes YMM6F1 to YMM6F7 */
+    CV_REG_YMM7F0       = 356, /* this includes YMM7F1 to YMM7F7 */
+    CV_REG_YMM0D0       = 364, /* this includes YMM0D1 to YMM0D3 */
+    CV_REG_YMM1D0       = 368, /* this includes YMM1D1 to YMM1D3 */
+    CV_REG_YMM2D0       = 372, /* this includes YMM2D1 to YMM2D3 */
+    CV_REG_YMM3D0       = 376, /* this includes YMM3D1 to YMM3D3 */
+    CV_REG_YMM4D0       = 380, /* this includes YMM4D1 to YMM4D3 */
+    CV_REG_YMM5D0       = 384, /* this includes YMM5D1 to YMM5D3 */
+    CV_REG_YMM6D0       = 388, /* this includes YMM6D1 to YMM6D3 */
+    CV_REG_YMM7D0       = 392, /* this includes YMM7D1 to YMM7D3 */
+
+    /* Motorola 68K CPU */
+    CV_R68_D0           = 0, /* this includes D1 to D7 too */
+    CV_R68_A0           = 8, /* this includes A1 to A7 too */
+    CV_R68_CCR          = 16,
+    CV_R68_SR           = 17,
+    CV_R68_USP          = 18,
+    CV_R68_MSP          = 19,
+    CV_R68_SFC          = 20,
+    CV_R68_DFC          = 21,
+    CV_R68_CACR         = 22,
+    CV_R68_VBR          = 23,
+    CV_R68_CAAR         = 24,
+    CV_R68_ISP          = 25,
+    CV_R68_PC           = 26,
+    CV_R68_FPCR         = 28,
+    CV_R68_FPSR         = 29,
+    CV_R68_FPIAR        = 30,
+    CV_R68_FP0          = 32, /* this includes FP1 to FP7 */
+    CV_R68_MMUSR030     = 41,
+    CV_R68_MMUSR        = 42,
+    CV_R68_URP          = 43,
+    CV_R68_DTT0         = 44,
+    CV_R68_DTT1         = 45,
+    CV_R68_ITT0         = 46,
+    CV_R68_ITT1         = 47,
+    CV_R68_PSR          = 51,
+    CV_R68_PCSR         = 52,
+    CV_R68_VAL          = 53,
+    CV_R68_CRP          = 54,
+    CV_R68_SRP          = 55,
+    CV_R68_DRP          = 56,
+    CV_R68_TC           = 57,
+    CV_R68_AC           = 58,
+    CV_R68_SCC          = 59,
+    CV_R68_CAL          = 60,
+    CV_R68_TT0          = 61,
+    CV_R68_TT1          = 62,
+    CV_R68_BAD0         = 64, /* this includes BAD1 to BAD7 */
+    CV_R68_BAC0         = 72, /* this includes BAC1 to BAC7 */
+
+    /* MIPS 4000 CPU */
+    CV_M4_NOREG         = CV_REG_NONE,
+    CV_M4_IntZERO       = 10,
+    CV_M4_IntAT         = 11,
+    CV_M4_IntV0         = 12,
+    CV_M4_IntV1         = 13,
+    CV_M4_IntA0         = 14, /* this includes IntA1 to IntA3 */
+    CV_M4_IntT0         = 18, /* this includes IntT1 to IntT7 */
+    CV_M4_IntS0         = 26, /* this includes IntS1 to IntS7 */
+    CV_M4_IntT8         = 34,
+    CV_M4_IntT9         = 35,
+    CV_M4_IntKT0        = 36,
+    CV_M4_IntKT1        = 37,
+    CV_M4_IntGP         = 38,
+    CV_M4_IntSP         = 39,
+    CV_M4_IntS8         = 40,
+    CV_M4_IntRA         = 41,
+    CV_M4_IntLO         = 42,
+    CV_M4_IntHI         = 43,
+    CV_M4_Fir           = 50,
+    CV_M4_Psr           = 51,
+    CV_M4_FltF0         = 60, /* this includes FltF1 to Flt31 */
+    CV_M4_FltFsr        = 92,
+
+    /* Alpha AXP CPU */
+    CV_ALPHA_NOREG      = CV_REG_NONE,
+    CV_ALPHA_FltF0      = 10, /* this includes FltF1 to FltF31 */
+    CV_ALPHA_IntV0      = 42,
+    CV_ALPHA_IntT0      = 43, /* this includes T1 to T7 */
+    CV_ALPHA_IntS0      = 51, /* this includes S1 to S5 */
+    CV_ALPHA_IntFP      = 57,
+    CV_ALPHA_IntA0      = 58, /* this includes A1 to A5 */
+    CV_ALPHA_IntT8      = 64,
+    CV_ALPHA_IntT9      = 65,
+    CV_ALPHA_IntT10     = 66,
+    CV_ALPHA_IntT11     = 67,
+    CV_ALPHA_IntRA      = 68,
+    CV_ALPHA_IntT12     = 69,
+    CV_ALPHA_IntAT      = 70,
+    CV_ALPHA_IntGP      = 71,
+    CV_ALPHA_IntSP      = 72,
+    CV_ALPHA_IntZERO    = 73,
+    CV_ALPHA_Fpcr       = 74,
+    CV_ALPHA_Fir        = 75,
+    CV_ALPHA_Psr        = 76,
+    CV_ALPHA_FltFsr     = 77,
+    CV_ALPHA_SoftFpcr   = 78,
+
+    /* Motorola & IBM PowerPC CPU */
+    CV_PPC_GPR0         = 1, /* this includes GPR1 to GPR31 */
+    CV_PPC_CR           = 33,
+    CV_PPC_CR0          = 34, /* this includes CR1 to CR7 */
+    CV_PPC_FPR0         = 42, /* this includes FPR1 to FPR31 */
+
+    CV_PPC_FPSCR        = 74,
+    CV_PPC_MSR          = 75,
+    CV_PPC_SR0          = 76, /* this includes SR1 to SR15 */
+    CV_PPC_PC           = 99,
+    CV_PPC_MQ           = 100,
+    CV_PPC_XER          = 101,
+    CV_PPC_RTCU         = 104,
+    CV_PPC_RTCL         = 105,
+    CV_PPC_LR           = 108,
+    CV_PPC_CTR          = 109,
+    CV_PPC_COMPARE      = 110,
+    CV_PPC_COUNT        = 111,
+    CV_PPC_DSISR        = 118,
+    CV_PPC_DAR          = 119,
+    CV_PPC_DEC          = 122,
+    CV_PPC_SDR1         = 125,
+    CV_PPC_SRR0         = 126,
+    CV_PPC_SRR1         = 127,
+    CV_PPC_SPRG0        = 372, /* this includes SPRG1 to SPRG3 */
+    CV_PPC_ASR          = 280,
+    CV_PPC_EAR          = 382,
+    CV_PPC_PVR          = 287,
+    CV_PPC_BAT0U        = 628,
+    CV_PPC_BAT0L        = 629,
+    CV_PPC_BAT1U        = 630,
+    CV_PPC_BAT1L        = 631,
+    CV_PPC_BAT2U        = 632,
+    CV_PPC_BAT2L        = 633,
+    CV_PPC_BAT3U        = 634,
+    CV_PPC_BAT3L        = 635,
+    CV_PPC_DBAT0U       = 636,
+    CV_PPC_DBAT0L       = 637,
+    CV_PPC_DBAT1U       = 638,
+    CV_PPC_DBAT1L       = 639,
+    CV_PPC_DBAT2U       = 640,
+    CV_PPC_DBAT2L       = 641,
+    CV_PPC_DBAT3U       = 642,
+    CV_PPC_DBAT3L       = 643,
+    CV_PPC_PMR0         = 1044, /* this includes PMR1 to PMR15 */
+    CV_PPC_DMISS        = 1076,
+    CV_PPC_DCMP         = 1077,
+    CV_PPC_HASH1        = 1078,
+    CV_PPC_HASH2        = 1079,
+    CV_PPC_IMISS        = 1080,
+    CV_PPC_ICMP         = 1081,
+    CV_PPC_RPA          = 1082,
+    CV_PPC_HID0         = 1108, /* this includes HID1 to HID15 */
+
+    /* Java */
+    CV_JAVA_PC          = 1,
+
+    /* Hitachi SH3 CPU */
+    CV_SH3_NOREG        = CV_REG_NONE,
+    CV_SH3_IntR0        = 10, /* this include R1 to R13 */
+    CV_SH3_IntFp        = 24,
+    CV_SH3_IntSp        = 25,
+    CV_SH3_Gbr          = 38,
+    CV_SH3_Pr           = 39,
+    CV_SH3_Mach         = 40,
+    CV_SH3_Macl         = 41,
+    CV_SH3_Pc           = 50,
+    CV_SH3_Sr           = 51,
+    CV_SH3_BarA         = 60,
+    CV_SH3_BasrA        = 61,
+    CV_SH3_BamrA        = 62,
+    CV_SH3_BbrA         = 63,
+    CV_SH3_BarB         = 64,
+    CV_SH3_BasrB        = 65,
+    CV_SH3_BamrB        = 66,
+    CV_SH3_BbrB         = 67,
+    CV_SH3_BdrB         = 68,
+    CV_SH3_BdmrB        = 69,
+    CV_SH3_Brcr         = 70,
+    CV_SH_Fpscr         = 75,
+    CV_SH_Fpul          = 76,
+    CV_SH_FpR0          = 80, /* this includes FpR1 to FpR15 */
+    CV_SH_XFpR0         = 96, /* this includes XFpR1 to XXFpR15 */
+
+    /* ARM CPU */
+    CV_ARM_NOREG        = CV_REG_NONE,
+    CV_ARM_R0           = 10, /* this includes R1 to R12 */
+    CV_ARM_SP           = 23,
+    CV_ARM_LR           = 24,
+    CV_ARM_PC           = 25,
+    CV_ARM_CPSR         = 26,
+    CV_ARM_ACC0         = 27,
+    CV_ARM_FPSCR        = 40,
+    CV_ARM_FPEXC        = 41,
+    CV_ARM_FS0          = 50, /* this includes FS1 to FS31 */
+    CV_ARM_FPEXTRA0     = 90, /* this includes FPEXTRA1 to FPEXTRA7 */
+    CV_ARM_WR0          = 128, /* this includes WR1 to WR15 */
+    CV_ARM_WCID         = 144,
+    CV_ARM_WCON         = 145,
+    CV_ARM_WCSSF        = 146,
+    CV_ARM_WCASF        = 147,
+    CV_ARM_WC4          = 148,
+    CV_ARM_WC5          = 149,
+    CV_ARM_WC6          = 150,
+    CV_ARM_WC7          = 151,
+    CV_ARM_WCGR0        = 152, /* this includes WCGR1 to WCGR3 */
+    CV_ARM_WC12         = 156,
+    CV_ARM_WC13         = 157,
+    CV_ARM_WC14         = 158,
+    CV_ARM_WC15         = 159,
+    CV_ARM_FS32         = 200, /* this includes FS33 to FS63 */
+    CV_ARM_ND0          = 300, /* this includes ND1 to ND31 */
+    CV_ARM_NQ0          = 400, /* this includes NQ1 to NQ15 */
+
+    /* Intel IA64 CPU */
+    CV_IA64_NOREG       = CV_REG_NONE,
+    CV_IA64_Br0         = 512, /* this includes Br1 to Br7 */
+    CV_IA64_P0          = 704, /* this includes P1 to P63 */
+    CV_IA64_Preds       = 768,
+    CV_IA64_IntH0       = 832, /* this includes H1 to H15 */
+    CV_IA64_Ip          = 1016,
+    CV_IA64_Umask       = 1017,
+    CV_IA64_Cfm         = 1018,
+    CV_IA64_Psr         = 1019,
+    CV_IA64_Nats        = 1020,
+    CV_IA64_Nats2       = 1021,
+    CV_IA64_Nats3       = 1022,
+    CV_IA64_IntR0       = 1024, /* this includes R1 to R127 */
+    CV_IA64_FltF0       = 2048, /* this includes FltF1 to FltF127 */
+    /* some IA64 registers missing */
+
+    /* TriCore CPU */
+    CV_TRI_NOREG        = CV_REG_NONE,
+    CV_TRI_D0           = 10, /* includes D1 to D15 */
+    CV_TRI_A0           = 26, /* includes A1 to A15 */
+    CV_TRI_E0           = 42,
+    CV_TRI_E2           = 43,
+    CV_TRI_E4           = 44,
+    CV_TRI_E6           = 45,
+    CV_TRI_E8           = 46,
+    CV_TRI_E10          = 47,
+    CV_TRI_E12          = 48,
+    CV_TRI_E14          = 49,
+    CV_TRI_EA0          = 50,
+    CV_TRI_EA2          = 51,
+    CV_TRI_EA4          = 52,
+    CV_TRI_EA6          = 53,
+    CV_TRI_EA8          = 54,
+    CV_TRI_EA10         = 55,
+    CV_TRI_EA12         = 56,
+    CV_TRI_EA14         = 57,
+    CV_TRI_PSW          = 58,
+    CV_TRI_PCXI         = 59,
+    CV_TRI_PC           = 60,
+    CV_TRI_FCX          = 61,
+    CV_TRI_LCX          = 62,
+    CV_TRI_ISP          = 63,
+    CV_TRI_ICR          = 64,
+    CV_TRI_BIV          = 65,
+    CV_TRI_BTV          = 66,
+    CV_TRI_SYSCON       = 67,
+    CV_TRI_DPRx_0       = 68, /* includes DPRx_1 to DPRx_3 */
+    CV_TRI_CPRx_0       = 68, /* includes CPRx_1 to CPRx_3 */
+    CV_TRI_DPMx_0       = 68, /* includes DPMx_1 to DPMx_3 */
+    CV_TRI_CPMx_0       = 68, /* includes CPMx_1 to CPMx_3 */
+    CV_TRI_DBGSSR       = 72,
+    CV_TRI_EXEVT        = 73,
+    CV_TRI_SWEVT        = 74,
+    CV_TRI_CREVT        = 75,
+    CV_TRI_TRnEVT       = 76,
+    CV_TRI_MMUCON       = 77,
+    CV_TRI_ASI          = 78,
+    CV_TRI_TVA          = 79,
+    CV_TRI_TPA          = 80,
+    CV_TRI_TPX          = 81,
+    CV_TRI_TFA          = 82,
+
+    /* AM33 (and the likes) CPU */
+    CV_AM33_NOREG       = CV_REG_NONE,
+    CV_AM33_E0          = 10, /* this includes E1 to E7 */
+    CV_AM33_A0          = 20, /* this includes A1 to A3 */
+    CV_AM33_D0          = 30, /* this includes D1 to D3 */
+    CV_AM33_FS0         = 40, /* this includes FS1 to FS31 */
+    CV_AM33_SP          = 80,
+    CV_AM33_PC          = 81,
+    CV_AM33_MDR         = 82,
+    CV_AM33_MDRQ        = 83,
+    CV_AM33_MCRH        = 84,
+    CV_AM33_MCRL        = 85,
+    CV_AM33_MCVF        = 86,
+    CV_AM33_EPSW        = 87,
+    CV_AM33_FPCR        = 88,
+    CV_AM33_LIR         = 89,
+    CV_AM33_LAR         = 90,
+
+    /* Mitsubishi M32R CPU */
+    CV_M32R_NOREG       = CV_REG_NONE,
+    CV_M32R_R0          = 10, /* this includes R1 to R11 */
+    CV_M32R_R12         = 22,
+    CV_M32R_R13         = 23,
+    CV_M32R_R14         = 24,
+    CV_M32R_R15         = 25,
+    CV_M32R_PSW         = 26,
+    CV_M32R_CBR         = 27,
+    CV_M32R_SPI         = 28,
+    CV_M32R_SPU         = 29,
+    CV_M32R_SPO         = 30,
+    CV_M32R_BPC         = 31,
+    CV_M32R_ACHI        = 32,
+    CV_M32R_ACLO        = 33,
+    CV_M32R_PC          = 34,
+
+    /* AMD/Intel x86_64 CPU */
+    CV_AMD64_NONE       = CV_REG_NONE,
+    CV_AMD64_AL         = CV_REG_AL,
+    CV_AMD64_CL         = CV_REG_CL,
+    CV_AMD64_DL         = CV_REG_DL,
+    CV_AMD64_BL         = CV_REG_BL,
+    CV_AMD64_AH         = CV_REG_AH,
+    CV_AMD64_CH         = CV_REG_CH,
+    CV_AMD64_DH         = CV_REG_DH,
+    CV_AMD64_BH         = CV_REG_BH,
+    CV_AMD64_AX         = CV_REG_AX,
+    CV_AMD64_CX         = CV_REG_CX,
+    CV_AMD64_DX         = CV_REG_DX,
+    CV_AMD64_BX         = CV_REG_BX,
+    CV_AMD64_SP         = CV_REG_SP,
+    CV_AMD64_BP         = CV_REG_BP,
+    CV_AMD64_SI         = CV_REG_SI,
+    CV_AMD64_DI         = CV_REG_DI,
+    CV_AMD64_EAX        = CV_REG_EAX,
+    CV_AMD64_ECX        = CV_REG_ECX,
+    CV_AMD64_EDX        = CV_REG_EDX,
+    CV_AMD64_EBX        = CV_REG_EBX,
+    CV_AMD64_ESP        = CV_REG_ESP,
+    CV_AMD64_EBP        = CV_REG_EBP,
+    CV_AMD64_ESI        = CV_REG_ESI,
+    CV_AMD64_EDI        = CV_REG_EDI,
+    CV_AMD64_ES         = CV_REG_ES,
+    CV_AMD64_CS         = CV_REG_CS,
+    CV_AMD64_SS         = CV_REG_SS,
+    CV_AMD64_DS         = CV_REG_DS,
+    CV_AMD64_FS         = CV_REG_FS,
+    CV_AMD64_GS         = CV_REG_GS,
+    CV_AMD64_FLAGS      = CV_REG_FLAGS,
+    CV_AMD64_RIP        = CV_REG_EIP,
+    CV_AMD64_EFLAGS     = CV_REG_EFLAGS,
+
+    /* <pcode> */
+    CV_AMD64_TEMP       = CV_REG_TEMP,
+    CV_AMD64_TEMPH      = CV_REG_TEMPH,
+    CV_AMD64_QUOTE      = CV_REG_QUOTE,
+    CV_AMD64_PCDR3      = CV_REG_PCDR3, /* this includes PCDR4 to PCDR7 */
+    CV_AMD64_CR0        = CV_REG_CR0,   /* this includes CR1 to CR4 */
+    CV_AMD64_DR0        = CV_REG_DR0,   /* this includes DR1 to DR7 */
+    /* </pcode> */
+
+    CV_AMD64_GDTR       = CV_REG_GDTR,
+    CV_AMD64_GDTL       = CV_REG_GDTL,
+    CV_AMD64_IDTR       = CV_REG_IDTR,
+    CV_AMD64_IDTL       = CV_REG_IDTL,
+    CV_AMD64_LDTR       = CV_REG_LDTR,
+    CV_AMD64_TR         = CV_REG_TR,
+
+    CV_AMD64_PSEUDO1    = CV_REG_PSEUDO1, /* this includes Pseudo02 to Pseudo09 */
+    CV_AMD64_ST0        = CV_REG_ST0,     /* this includes ST1 to ST7 */
+    CV_AMD64_CTRL       = CV_REG_CTRL,
+    CV_AMD64_STAT       = CV_REG_STAT,
+    CV_AMD64_TAG        = CV_REG_TAG,
+    CV_AMD64_FPIP       = CV_REG_FPIP,
+    CV_AMD64_FPCS       = CV_REG_FPCS,
+    CV_AMD64_FPDO       = CV_REG_FPDO,
+    CV_AMD64_FPDS       = CV_REG_FPDS,
+    CV_AMD64_ISEM       = CV_REG_ISEM,
+    CV_AMD64_FPEIP      = CV_REG_FPEIP,
+    CV_AMD64_FPEDO      = CV_REG_FPEDO,
+    CV_AMD64_MM0        = CV_REG_MM0,     /* this includes MM1 to MM7 */
+    CV_AMD64_XMM0       = CV_REG_XMM0,    /* this includes XMM1 to XMM7 */
+    CV_AMD64_XMM00      = CV_REG_XMM00,
+    CV_AMD64_XMM0L      = CV_REG_XMM0L,   /* this includes XMM1L to XMM7L */
+    CV_AMD64_XMM0H      = CV_REG_XMM0H,   /* this includes XMM1H to XMM7H */
+    CV_AMD64_MXCSR      = CV_REG_MXCSR,
+    CV_AMD64_EDXEAX     = CV_REG_EDXEAX,
+    CV_AMD64_EMM0L      = CV_REG_EMM0L,
+    CV_AMD64_EMM0H      = CV_REG_EMM0H,
+    CV_AMD64_MM00       = CV_REG_MM00,
+    CV_AMD64_MM01       = CV_REG_MM01,
+    CV_AMD64_MM10       = CV_REG_MM10,
+    CV_AMD64_MM11       = CV_REG_MM11,
+    CV_AMD64_MM20       = CV_REG_MM20,
+    CV_AMD64_MM21       = CV_REG_MM21,
+    CV_AMD64_MM30       = CV_REG_MM30,
+    CV_AMD64_MM31       = CV_REG_MM31,
+    CV_AMD64_MM40       = CV_REG_MM40,
+    CV_AMD64_MM41       = CV_REG_MM41,
+    CV_AMD64_MM50       = CV_REG_MM50,
+    CV_AMD64_MM51       = CV_REG_MM51,
+    CV_AMD64_MM60       = CV_REG_MM60,
+    CV_AMD64_MM61       = CV_REG_MM61,
+    CV_AMD64_MM70       = CV_REG_MM70,
+    CV_AMD64_MM71       = CV_REG_MM71,
+
+    CV_AMD64_XMM8       = 252,           /* this includes XMM9 to XMM15 */
+
+    CV_AMD64_RAX        = 328,
+    CV_AMD64_RBX        = 329,
+    CV_AMD64_RCX        = 330,
+    CV_AMD64_RDX        = 331,
+    CV_AMD64_RSI        = 332,
+    CV_AMD64_RDI        = 333,
+    CV_AMD64_RBP        = 334,
+    CV_AMD64_RSP        = 335,
+
+    CV_AMD64_R8         = 336,
+    CV_AMD64_R9         = 337,
+    CV_AMD64_R10        = 338,
+    CV_AMD64_R11        = 339,
+    CV_AMD64_R12        = 340,
+    CV_AMD64_R13        = 341,
+    CV_AMD64_R14        = 342,
+    CV_AMD64_R15        = 343,
+
+    /* Wine extension */
+    CV_ARM64_NOREG        = CV_REG_NONE,
+    CV_ARM64_X0           = 10, /* this includes X0 to X30 */
+    CV_ARM64_SP           = 41,
+    CV_ARM64_PC           = 42,
+    CV_ARM64_PSTATE       = 43,
+};
+
+typedef enum
+{
+   THUNK_ORDINAL_NOTYPE,
+   THUNK_ORDINAL_ADJUSTOR,
+   THUNK_ORDINAL_VCALL,
+   THUNK_ORDINAL_PCODE,
+   THUNK_ORDINAL_LOAD 
+} THUNK_ORDINAL;
+
+typedef enum CV_call_e
+{
+    CV_CALL_NEAR_C,
+    CV_CALL_FAR_C,
+    CV_CALL_NEAR_PASCAL,
+    CV_CALL_FAR_PASCAL,
+    CV_CALL_NEAR_FAST,
+    CV_CALL_FAR_FAST,
+    CV_CALL_SKIPPED,
+    CV_CALL_NEAR_STD,
+    CV_CALL_FAR_STD,
+    CV_CALL_NEAR_SYS,
+    CV_CALL_FAR_SYS,
+    CV_CALL_THISCALL,
+    CV_CALL_MIPSCALL,
+    CV_CALL_GENERIC,
+    CV_CALL_ALPHACALL,
+    CV_CALL_PPCCALL,
+    CV_CALL_SHCALL,
+    CV_CALL_ARMCALL,
+    CV_CALL_AM33CALL,
+    CV_CALL_TRICALL,
+    CV_CALL_SH5CALL,
+    CV_CALL_M32RCALL,
+    CV_CALL_RESERVED,
+} CV_call_e;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h
new file mode 100644
index 0000000..c431ac0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h
@@ -0,0 +1,1577 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D_H
+#define __WINE_D3D_H
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <d3dtypes.h> /* must precede d3dcaps.h */
+#include <d3dcaps.h>
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D,              0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3D2,             0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a);
+DEFINE_GUID(IID_IDirect3D3,             0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e);
+DEFINE_GUID(IID_IDirect3D7,             0xf5049e77,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+DEFINE_GUID(IID_IDirect3DRampDevice,	0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3DRGBDevice,	0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3DHALDevice,	0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+DEFINE_GUID(IID_IDirect3DMMXDevice,	0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DRefDevice,     0x50936643,0x13e9,0x11d1,0x89,0xaa,0x00,0xa0,0xc9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DTnLHalDevice,  0xf5049e78,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+DEFINE_GUID(IID_IDirect3DNullDevice,    0x8767df22,0xbacc,0x11d1,0x89,0x69,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+DEFINE_GUID(IID_IDirect3DDevice,	0x64108800,0x957d,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DDevice2,	0x93281501,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DDevice3,       0xb0ab3b60,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74);
+DEFINE_GUID(IID_IDirect3DDevice7,       0xf5049e79,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+DEFINE_GUID(IID_IDirect3DTexture,	0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3DTexture2,	0x93281502,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+
+DEFINE_GUID(IID_IDirect3DLight,		0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+
+DEFINE_GUID(IID_IDirect3DMaterial,	0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+DEFINE_GUID(IID_IDirect3DMaterial2,	0x93281503,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DMaterial3,     0xca9c46f4,0xd3c5,0x11d1,0xb7,0x5a,0x00,0x60,0x08,0x52,0xb3,0x12);
+
+DEFINE_GUID(IID_IDirect3DExecuteBuffer,	0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+
+DEFINE_GUID(IID_IDirect3DViewport,	0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+DEFINE_GUID(IID_IDirect3DViewport2,	0x93281500,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DViewport3,     0xb0ab3b61,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74);
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer,  0x7a503555,0x4a83,0x11d1,0xa5,0xdb,0x00,0xa0,0xc9,0x03,0x67,0xf8);
+DEFINE_GUID(IID_IDirect3DVertexBuffer7, 0xf5049e7d,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+
+typedef struct IDirect3D *LPDIRECT3D;
+typedef struct IDirect3D2 *LPDIRECT3D2;
+typedef struct IDirect3D3 *LPDIRECT3D3;
+typedef struct IDirect3D7 *LPDIRECT3D7;
+
+typedef struct IDirect3DLight *LPDIRECT3DLIGHT;
+
+typedef struct IDirect3DDevice *LPDIRECT3DDEVICE;
+typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;
+typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;
+typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;
+
+typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;
+typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;
+typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;
+
+typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;
+typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;
+typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;
+
+typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;
+typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;
+
+typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;
+
+typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;
+typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;
+
+/* ********************************************************************
+   Error Codes
+   ******************************************************************** */
+#define D3D_OK                          DD_OK
+#define D3DERR_BADMAJORVERSION          MAKE_DDHRESULT(700)
+#define D3DERR_BADMINORVERSION          MAKE_DDHRESULT(701)
+#define D3DERR_INVALID_DEVICE           MAKE_DDHRESULT(705)
+#define D3DERR_INITFAILED               MAKE_DDHRESULT(706)
+#define D3DERR_DEVICEAGGREGATED         MAKE_DDHRESULT(707)
+#define D3DERR_EXECUTE_CREATE_FAILED    MAKE_DDHRESULT(710)
+#define D3DERR_EXECUTE_DESTROY_FAILED   MAKE_DDHRESULT(711)
+#define D3DERR_EXECUTE_LOCK_FAILED      MAKE_DDHRESULT(712)
+#define D3DERR_EXECUTE_UNLOCK_FAILED    MAKE_DDHRESULT(713)
+#define D3DERR_EXECUTE_LOCKED           MAKE_DDHRESULT(714)
+#define D3DERR_EXECUTE_NOT_LOCKED       MAKE_DDHRESULT(715)
+#define D3DERR_EXECUTE_FAILED           MAKE_DDHRESULT(716)
+#define D3DERR_EXECUTE_CLIPPED_FAILED   MAKE_DDHRESULT(717)
+#define D3DERR_TEXTURE_NO_SUPPORT       MAKE_DDHRESULT(720)
+#define D3DERR_TEXTURE_CREATE_FAILED    MAKE_DDHRESULT(721)
+#define D3DERR_TEXTURE_DESTROY_FAILED   MAKE_DDHRESULT(722)
+#define D3DERR_TEXTURE_LOCK_FAILED      MAKE_DDHRESULT(723)
+#define D3DERR_TEXTURE_UNLOCK_FAILED    MAKE_DDHRESULT(724)
+#define D3DERR_TEXTURE_LOAD_FAILED      MAKE_DDHRESULT(725)
+#define D3DERR_TEXTURE_SWAP_FAILED      MAKE_DDHRESULT(726)
+#define D3DERR_TEXTURE_LOCKED           MAKE_DDHRESULT(727)
+#define D3DERR_TEXTURE_NOT_LOCKED       MAKE_DDHRESULT(728)
+#define D3DERR_TEXTURE_GETSURF_FAILED   MAKE_DDHRESULT(729)
+#define D3DERR_MATRIX_CREATE_FAILED     MAKE_DDHRESULT(730)
+#define D3DERR_MATRIX_DESTROY_FAILED    MAKE_DDHRESULT(731)
+#define D3DERR_MATRIX_SETDATA_FAILED    MAKE_DDHRESULT(732)
+#define D3DERR_MATRIX_GETDATA_FAILED    MAKE_DDHRESULT(733)
+#define D3DERR_SETVIEWPORTDATA_FAILED   MAKE_DDHRESULT(734)
+#define D3DERR_INVALIDCURRENTVIEWPORT   MAKE_DDHRESULT(735)
+#define D3DERR_INVALIDPRIMITIVETYPE     MAKE_DDHRESULT(736)
+#define D3DERR_INVALIDVERTEXTYPE        MAKE_DDHRESULT(737)
+#define D3DERR_TEXTURE_BADSIZE          MAKE_DDHRESULT(738)
+#define D3DERR_INVALIDRAMPTEXTURE       MAKE_DDHRESULT(739)
+#define D3DERR_MATERIAL_CREATE_FAILED   MAKE_DDHRESULT(740)
+#define D3DERR_MATERIAL_DESTROY_FAILED  MAKE_DDHRESULT(741)
+#define D3DERR_MATERIAL_SETDATA_FAILED  MAKE_DDHRESULT(742)
+#define D3DERR_MATERIAL_GETDATA_FAILED  MAKE_DDHRESULT(743)
+#define D3DERR_INVALIDPALETTE           MAKE_DDHRESULT(744)
+#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745)
+#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  MAKE_DDHRESULT(746)
+#define D3DERR_SURFACENOTINVIDMEM       MAKE_DDHRESULT(747)
+#define D3DERR_LIGHT_SET_FAILED         MAKE_DDHRESULT(750)
+#define D3DERR_LIGHTHASVIEWPORT         MAKE_DDHRESULT(751)
+#define D3DERR_LIGHTNOTINTHISVIEWPORT   MAKE_DDHRESULT(752)
+#define D3DERR_SCENE_IN_SCENE           MAKE_DDHRESULT(760)
+#define D3DERR_SCENE_NOT_IN_SCENE       MAKE_DDHRESULT(761)
+#define D3DERR_SCENE_BEGIN_FAILED       MAKE_DDHRESULT(762)
+#define D3DERR_SCENE_END_FAILED         MAKE_DDHRESULT(763)
+#define D3DERR_INBEGIN                  MAKE_DDHRESULT(770)
+#define D3DERR_NOTINBEGIN               MAKE_DDHRESULT(771)
+#define D3DERR_NOVIEWPORTS              MAKE_DDHRESULT(772)
+#define D3DERR_VIEWPORTDATANOTSET       MAKE_DDHRESULT(773)
+#define D3DERR_VIEWPORTHASNODEVICE      MAKE_DDHRESULT(774)
+#define D3DERR_NOCURRENTVIEWPORT        MAKE_DDHRESULT(775)
+#define D3DERR_INVALIDVERTEXFORMAT	MAKE_DDHRESULT(2048)
+#define D3DERR_COLORKEYATTACHED         MAKE_DDHRESULT(2050)
+#define D3DERR_VERTEXBUFFEROPTIMIZED	MAKE_DDHRESULT(2060)
+#define D3DERR_VBUF_CREATE_FAILED	MAKE_DDHRESULT(2061)
+#define D3DERR_VERTEXBUFFERLOCKED	MAKE_DDHRESULT(2062)
+#define D3DERR_VERTEXBUFFERUNLOCKFAILED	MAKE_DDHRESULT(2063)
+#define D3DERR_ZBUFFER_NOTPRESENT	MAKE_DDHRESULT(2070)
+#define D3DERR_STENCILBUFFER_NOTPRESENT	MAKE_DDHRESULT(2071)
+
+#define D3DERR_WRONGTEXTUREFORMAT		MAKE_DDHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION	MAKE_DDHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG		MAKE_DDHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION	MAKE_DDHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG		MAKE_DDHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS		MAKE_DDHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER		MAKE_DDHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE		MAKE_DDHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE		MAKE_DDHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER		MAKE_DDHRESULT(2082)
+#define D3DERR_TOOMANYPRIMITIVES		MAKE_DDHRESULT(2083)
+#define D3DERR_INVALIDMATRIX			MAKE_DDHRESULT(2084)
+#define D3DERR_TOOMANYVERTICES			MAKE_DDHRESULT(2085)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE	MAKE_DDHRESULT(2086)
+
+#define D3DERR_INVALIDSTATEBLOCK	MAKE_DDHRESULT(2100)
+#define D3DERR_INBEGINSTATEBLOCK	MAKE_DDHRESULT(2101)
+#define D3DERR_NOTINBEGINSTATEBLOCK	MAKE_DDHRESULT(2102)
+
+/* ********************************************************************
+   Enums
+   ******************************************************************** */
+#define D3DNEXT_NEXT __MSABI_LONG(0x01)
+#define D3DNEXT_HEAD __MSABI_LONG(0x02)
+#define D3DNEXT_TAIL __MSABI_LONG(0x04)
+
+#define D3DDP_WAIT               __MSABI_LONG(0x00000001)
+#define D3DDP_OUTOFORDER         __MSABI_LONG(0x00000002)
+#define D3DDP_DONOTCLIP          __MSABI_LONG(0x00000004)
+#define D3DDP_DONOTUPDATEEXTENTS __MSABI_LONG(0x00000008)
+#define D3DDP_DONOTLIGHT         __MSABI_LONG(0x00000010)
+
+/* ********************************************************************
+   Types and structures
+   ******************************************************************** */
+typedef DWORD D3DVIEWPORTHANDLE, *LPD3DVIEWPORTHANDLE;
+
+
+/*****************************************************************************
+ * IDirect3D interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirect3D
+DECLARE_INTERFACE_(IDirect3D,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D methods ***/
+    STDMETHOD(Initialize)(THIS_ REFIID riid) PURE;
+    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;
+    STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial **material, IUnknown *outer) PURE;
+    STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport **viewport, IUnknown *outer) PURE;
+    STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D methods ***/
+#define IDirect3D_Initialize(p,a)       (p)->lpVtbl->Initialize(p,a)
+#define IDirect3D_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)
+#define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+#define IDirect3D_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D_AddRef(p)             (p)->AddRef()
+#define IDirect3D_Release(p)            (p)->Release()
+/*** IDirect3D methods ***/
+#define IDirect3D_Initialize(p,a)       (p)->Initialize(a)
+#define IDirect3D_EnumDevices(p,a,b)    (p)->EnumDevices(a,b)
+#define IDirect3D_CreateLight(p,a,b)    (p)->CreateLight(a,b)
+#define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
+#define IDirect3D_FindDevice(p,a,b)     (p)->FindDevice(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3D2 interface
+ */
+#define INTERFACE IDirect3D2
+DECLARE_INTERFACE_(IDirect3D2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D2 methods ***/
+    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;
+    STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial2 **material, IUnknown *outer) PURE;
+    STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport2 **viewport, IUnknown *outer) PURE;
+    STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;
+    STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface *surface,
+            struct IDirect3DDevice2 **device) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D2 methods ***/
+#define IDirect3D2_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D2_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)
+#define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+#define IDirect3D2_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)
+#define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D2_AddRef(p)             (p)->AddRef()
+#define IDirect3D2_Release(p)            (p)->Release()
+/*** IDirect3D2 methods ***/
+#define IDirect3D2_EnumDevices(p,a,b)    (p)->EnumDevices(a,b)
+#define IDirect3D2_CreateLight(p,a,b)    (p)->CreateLight(a,b)
+#define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
+#define IDirect3D2_FindDevice(p,a,b)     (p)->FindDevice(a,b)
+#define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3D3 interface
+ */
+#define INTERFACE IDirect3D3
+DECLARE_INTERFACE_(IDirect3D3,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D3 methods ***/
+    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;
+    STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial3 **material, IUnknown *outer) PURE;
+    STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport3 **viewport, IUnknown *outer) PURE;
+    STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;
+    STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface4 *surface,
+            struct IDirect3DDevice3 **device, IUnknown *outer) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc, struct IDirect3DVertexBuffer **buffer,
+            DWORD flags, IUnknown *outer) PURE;
+    STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(EvictManagedTextures)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D3 methods ***/
+#define IDirect3D3_EnumDevices(p,a,b)            (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D3_CreateLight(p,a,b)            (p)->lpVtbl->CreateLight(p,a,b)
+#define IDirect3D3_CreateMaterial(p,a,b)         (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3D3_CreateViewport(p,a,b)         (p)->lpVtbl->CreateViewport(p,a,b)
+#define IDirect3D3_FindDevice(p,a,b)             (p)->lpVtbl->FindDevice(p,a,b)
+#define IDirect3D3_CreateDevice(p,a,b,c,d)       (p)->lpVtbl->CreateDevice(p,a,b,c,d)
+#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d)
+#define IDirect3D3_EnumZBufferFormats(p,a,b,c)   (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)
+#define IDirect3D3_EvictManagedTextures(p)       (p)->lpVtbl->EvictManagedTextures(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D3_AddRef(p)             (p)->AddRef()
+#define IDirect3D3_Release(p)            (p)->Release()
+/*** IDirect3D3 methods ***/
+#define IDirect3D3_EnumDevices(p,a,b)            (p)->EnumDevices(a,b)
+#define IDirect3D3_CreateLight(p,a,b)            (p)->CreateLight(a,b)
+#define IDirect3D3_CreateMaterial(p,a,b)         (p)->CreateMaterial(a,b)
+#define IDirect3D3_CreateViewport(p,a,b)         (p)->CreateViewport(a,b)
+#define IDirect3D3_FindDevice(p,a,b)             (p)->FindDevice(a,b)
+#define IDirect3D3_CreateDevice(p,a,b,c,d)       (p)->CreateDevice(a,b,c,d)
+#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d)
+#define IDirect3D3_EnumZBufferFormats(p,a,b,c)   (p)->EnumZBufferFormats(a,b,c)
+#define IDirect3D3_EvictManagedTextures(p)       (p)->EvictManagedTextures()
+#endif
+
+/*****************************************************************************
+ * IDirect3D7 interface
+ */
+#define INTERFACE IDirect3D7
+DECLARE_INTERFACE_(IDirect3D7,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D7 methods ***/
+    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7 cb, void *ctx) PURE;
+    STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface7 *surface,
+            struct IDirect3DDevice7 **device) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc,
+            struct IDirect3DVertexBuffer7 **buffer, DWORD flags) PURE;
+    STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(EvictManagedTextures)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D7_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D7_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D3 methods ***/
+#define IDirect3D7_EnumDevices(p,a,b)            (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D7_CreateDevice(p,a,b,c)         (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3D7_CreateVertexBuffer(p,a,b,c)   (p)->lpVtbl->CreateVertexBuffer(p,a,b,c)
+#define IDirect3D7_EnumZBufferFormats(p,a,b,c)   (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)
+#define IDirect3D7_EvictManagedTextures(p)       (p)->lpVtbl->EvictManagedTextures(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D7_AddRef(p)             (p)->AddRef()
+#define IDirect3D7_Release(p)            (p)->Release()
+/*** IDirect3D3 methods ***/
+#define IDirect3D7_EnumDevices(p,a,b)            (p)->EnumDevices(a,b)
+#define IDirect3D7_CreateDevice(p,a,b,c)         (p)->CreateDevice(a,b,c)
+#define IDirect3D7_CreateVertexBuffer(p,a,b,c)   (p)->CreateVertexBuffer(a,b,c)
+#define IDirect3D7_EnumZBufferFormats(p,a,b,c)   (p)->EnumZBufferFormats(a,b,c)
+#define IDirect3D7_EvictManagedTextures(p)       (p)->EvictManagedTextures()
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DLight interface
+ */
+#define INTERFACE IDirect3DLight
+DECLARE_INTERFACE_(IDirect3DLight,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DLight methods ***/
+    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+    STDMETHOD(SetLight)(THIS_ D3DLIGHT *data) PURE;
+    STDMETHOD(GetLight)(THIS_ D3DLIGHT *data) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DLight_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DLight_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DLight methods ***/
+#define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DLight_SetLight(p,a)   (p)->lpVtbl->SetLight(p,a)
+#define IDirect3DLight_GetLight(p,a)   (p)->lpVtbl->GetLight(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DLight_AddRef(p)             (p)->AddRef()
+#define IDirect3DLight_Release(p)            (p)->Release()
+/*** IDirect3DLight methods ***/
+#define IDirect3DLight_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3DLight_SetLight(p,a)   (p)->SetLight(a)
+#define IDirect3DLight_GetLight(p,a)   (p)->GetLight(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DMaterial interface
+ */
+#define INTERFACE IDirect3DMaterial
+DECLARE_INTERFACE_(IDirect3DMaterial,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DMaterial methods ***/
+    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DMATERIALHANDLE *handle) PURE;
+    STDMETHOD(Reserve)(THIS) PURE;
+    STDMETHOD(Unreserve)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DMaterial_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DMaterial_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DMaterial methods ***/
+#define IDirect3DMaterial_Initialize(p,a)  (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#define IDirect3DMaterial_Reserve(p)       (p)->lpVtbl->Reserve(p)
+#define IDirect3DMaterial_Unreserve(p)     (p)->lpVtbl->Unreserve(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DMaterial_AddRef(p)             (p)->AddRef()
+#define IDirect3DMaterial_Release(p)            (p)->Release()
+/*** IDirect3DMaterial methods ***/
+#define IDirect3DMaterial_Initialize(p,a)  (p)->Initialize(a)
+#define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#define IDirect3DMaterial_Reserve(p)       (p)->Reserve()
+#define IDirect3DMaterial_Unreserve(p)     (p)->Unreserve()
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DMaterial2 interface
+ */
+#define INTERFACE IDirect3DMaterial2
+DECLARE_INTERFACE_(IDirect3DMaterial2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DMaterial2 methods ***/
+    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DMATERIALHANDLE *handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DMaterial2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DMaterial2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DMaterial2 methods ***/
+#define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DMaterial2_AddRef(p)             (p)->AddRef()
+#define IDirect3DMaterial2_Release(p)            (p)->Release()
+/*** IDirect3DMaterial2 methods ***/
+#define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DMaterial3 interface
+ */
+#define INTERFACE IDirect3DMaterial3
+DECLARE_INTERFACE_(IDirect3DMaterial3,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DMaterial3 methods ***/
+    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DMaterial3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DMaterial3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DMaterial3 methods ***/
+#define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DMaterial3_AddRef(p)             (p)->AddRef()
+#define IDirect3DMaterial3_Release(p)            (p)->Release()
+/*** IDirect3DMaterial3 methods ***/
+#define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DTexture interface
+ */
+#define INTERFACE IDirect3DTexture
+DECLARE_INTERFACE_(IDirect3DTexture,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DTexture methods ***/
+    STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, IDirectDrawSurface *surface) PURE;
+    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DTEXTUREHANDLE *handle) PURE;
+    STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE;
+    STDMETHOD(Load)(THIS_ IDirect3DTexture *texture) PURE;
+    STDMETHOD(Unload)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture methods ***/
+#define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)
+#define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a)
+#define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture_AddRef(p)             (p)->AddRef()
+#define IDirect3DTexture_Release(p)            (p)->Release()
+/*** IDirect3DTexture methods ***/
+#define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)
+#define IDirect3DTexture_Load(p,a) (p)->Load(a)
+#define IDirect3DTexture_Unload(p) (p)->Unload()
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DTexture2 interface
+ */
+#define INTERFACE IDirect3DTexture2
+DECLARE_INTERFACE_(IDirect3DTexture2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DTexture2 methods ***/
+    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DTEXTUREHANDLE *handle) PURE;
+    STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE;
+    STDMETHOD(Load)(THIS_ IDirect3DTexture2 *texture) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture2 methods ***/
+#define IDirect3DTexture2_GetHandle(p,a,b)      (p)->lpVtbl->GetHandle(p,a,b)
+#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)
+#define IDirect3DTexture2_Load(p,a)             (p)->lpVtbl->Load(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture2_AddRef(p)             (p)->AddRef()
+#define IDirect3DTexture2_Release(p)            (p)->Release()
+/*** IDirect3DTexture2 methods ***/
+#define IDirect3DTexture2_GetHandle(p,a,b)      (p)->GetHandle(a,b)
+#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)
+#define IDirect3DTexture2_Load(p,a)             (p)->Load(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DViewport interface
+ */
+#define INTERFACE IDirect3DViewport
+DECLARE_INTERFACE_(IDirect3DViewport,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DViewport methods ***/
+    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+    STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;
+    STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;
+    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;
+    STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;
+    STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;
+    STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;
+    STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;
+    STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DViewport_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DViewport_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DViewport methods ***/
+#define IDirect3DViewport_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DViewport_GetViewport(p,a)             (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DViewport_SetViewport(p,a)             (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
+#define IDirect3DViewport_LightElements(p,a,b)         (p)->lpVtbl->LightElements(p,a,b)
+#define IDirect3DViewport_SetBackground(p,a)           (p)->lpVtbl->SetBackground(p,a)
+#define IDirect3DViewport_GetBackground(p,a,b)         (p)->lpVtbl->GetBackground(p,a,b)
+#define IDirect3DViewport_SetBackgroundDepth(p,a)      (p)->lpVtbl->SetBackgroundDepth(p,a)
+#define IDirect3DViewport_GetBackgroundDepth(p,a,b)    (p)->lpVtbl->GetBackgroundDepth(p,a,b)
+#define IDirect3DViewport_Clear(p,a,b,c)               (p)->lpVtbl->Clear(p,a,b,c)
+#define IDirect3DViewport_AddLight(p,a)                (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DViewport_DeleteLight(p,a)             (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DViewport_NextLight(p,a,b,c)           (p)->lpVtbl->NextLight(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DViewport_AddRef(p)             (p)->AddRef()
+#define IDirect3DViewport_Release(p)            (p)->Release()
+/*** IDirect3DViewport methods ***/
+#define IDirect3DViewport_Initialize(p,a)              (p)->Initialize(a)
+#define IDirect3DViewport_GetViewport(p,a)             (p)->GetViewport(a)
+#define IDirect3DViewport_SetViewport(p,a)             (p)->SetViewport(a)
+#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
+#define IDirect3DViewport_LightElements(p,a,b)         (p)->LightElements(a,b)
+#define IDirect3DViewport_SetBackground(p,a)           (p)->SetBackground(a)
+#define IDirect3DViewport_GetBackground(p,a,b)         (p)->GetBackground(a,b)
+#define IDirect3DViewport_SetBackgroundDepth(p,a)      (p)->SetBackgroundDepth(a)
+#define IDirect3DViewport_GetBackgroundDepth(p,a,b)    (p)->GetBackgroundDepth(a,b)
+#define IDirect3DViewport_Clear(p,a,b,c)               (p)->Clear(a,b,c)
+#define IDirect3DViewport_AddLight(p,a)                (p)->AddLight(a)
+#define IDirect3DViewport_DeleteLight(p,a)             (p)->DeleteLight(a)
+#define IDirect3DViewport_NextLight(p,a,b,c)           (p)->NextLight(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DViewport2 interface
+ */
+#define INTERFACE IDirect3DViewport2
+DECLARE_INTERFACE_(IDirect3DViewport2,IDirect3DViewport)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DViewport methods ***/
+    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+    STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;
+    STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;
+    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;
+    STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;
+    STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;
+    STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;
+    STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;
+    STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;
+    /*** IDirect3DViewport2 methods ***/
+    STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+    STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DViewport2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DViewport2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport2_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DViewport2_GetViewport(p,a)             (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DViewport2_SetViewport(p,a)             (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
+#define IDirect3DViewport2_LightElements(p,a,b)         (p)->lpVtbl->LightElements(p,a,b)
+#define IDirect3DViewport2_SetBackground(p,a)           (p)->lpVtbl->SetBackground(p,a)
+#define IDirect3DViewport2_GetBackground(p,a,b)         (p)->lpVtbl->GetBackground(p,a,b)
+#define IDirect3DViewport2_SetBackgroundDepth(p,a)      (p)->lpVtbl->SetBackgroundDepth(p,a)
+#define IDirect3DViewport2_GetBackgroundDepth(p,a,b)    (p)->lpVtbl->GetBackgroundDepth(p,a,b)
+#define IDirect3DViewport2_Clear(p,a,b,c)               (p)->lpVtbl->Clear(p,a,b,c)
+#define IDirect3DViewport2_AddLight(p,a)                (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DViewport2_DeleteLight(p,a)             (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DViewport2_NextLight(p,a,b,c)           (p)->lpVtbl->NextLight(p,a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)
+#define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DViewport2_AddRef(p)             (p)->AddRef()
+#define IDirect3DViewport2_Release(p)            (p)->Release()
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport2_Initialize(p,a)              (p)->Initialize(a)
+#define IDirect3DViewport2_GetViewport(p,a)             (p)->GetViewport(a)
+#define IDirect3DViewport2_SetViewport(p,a)             (p)->SetViewport(a)
+#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
+#define IDirect3DViewport2_LightElements(p,a,b)         (p)->LightElements(a,b)
+#define IDirect3DViewport2_SetBackground(p,a)           (p)->SetBackground(a)
+#define IDirect3DViewport2_GetBackground(p,a,b)         (p)->GetBackground(a,b)
+#define IDirect3DViewport2_SetBackgroundDepth(p,a)      (p)->SetBackgroundDepth(a)
+#define IDirect3DViewport2_GetBackgroundDepth(p,a,b)    (p)->GetBackgroundDepth(a,b)
+#define IDirect3DViewport2_Clear(p,a,b,c)               (p)->Clear(a,b,c)
+#define IDirect3DViewport2_AddLight(p,a)                (p)->AddLight(a)
+#define IDirect3DViewport2_DeleteLight(p,a)             (p)->DeleteLight(a)
+#define IDirect3DViewport2_NextLight(p,a,b,c)           (p)->NextLight(a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a)
+#define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DViewport3 interface
+ */
+#define INTERFACE IDirect3DViewport3
+DECLARE_INTERFACE_(IDirect3DViewport3,IDirect3DViewport2)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DViewport methods ***/
+    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+    STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;
+    STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;
+    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;
+    STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;
+    STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;
+    STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;
+    STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;
+    STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;
+    /*** IDirect3DViewport2 methods ***/
+    STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+    STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+    /*** IDirect3DViewport3 methods ***/
+    STDMETHOD(SetBackgroundDepth2)(THIS_ IDirectDrawSurface4 *surface) PURE;
+    STDMETHOD(GetBackgroundDepth2)(THIS_ IDirectDrawSurface4 **surface, BOOL *valid) PURE;
+    STDMETHOD(Clear2)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, DWORD color, D3DVALUE z, DWORD stencil) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DViewport3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DViewport3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport3_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DViewport3_GetViewport(p,a)             (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DViewport3_SetViewport(p,a)             (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
+#define IDirect3DViewport3_LightElements(p,a,b)         (p)->lpVtbl->LightElements(p,a,b)
+#define IDirect3DViewport3_SetBackground(p,a)           (p)->lpVtbl->SetBackground(p,a)
+#define IDirect3DViewport3_GetBackground(p,a,b)         (p)->lpVtbl->GetBackground(p,a,b)
+#define IDirect3DViewport3_SetBackgroundDepth(p,a)      (p)->lpVtbl->SetBackgroundDepth(p,a)
+#define IDirect3DViewport3_GetBackgroundDepth(p,a,b)    (p)->lpVtbl->GetBackgroundDepth(p,a,b)
+#define IDirect3DViewport3_Clear(p,a,b,c)               (p)->lpVtbl->Clear(p,a,b,c)
+#define IDirect3DViewport3_AddLight(p,a)                (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DViewport3_DeleteLight(p,a)             (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DViewport3_NextLight(p,a,b,c)           (p)->lpVtbl->NextLight(p,a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)
+#define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)
+/*** IDirect3DViewport3 methods ***/
+#define IDirect3DViewport3_SetBackgroundDepth2(p,a)   (p)->lpVtbl->SetBackgroundDepth2(p,a)
+#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b)
+#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f)      (p)->lpVtbl->Clear2(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DViewport3_AddRef(p)             (p)->AddRef()
+#define IDirect3DViewport3_Release(p)            (p)->Release()
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport3_Initialize(p,a)              (p)->Initialize(a)
+#define IDirect3DViewport3_GetViewport(p,a)             (p)->GetViewport(a)
+#define IDirect3DViewport3_SetViewport(p,a)             (p)->SetViewport(a)
+#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
+#define IDirect3DViewport3_LightElements(p,a,b)         (p)->LightElements(a,b)
+#define IDirect3DViewport3_SetBackground(p,a)           (p)->SetBackground(a)
+#define IDirect3DViewport3_GetBackground(p,a,b)         (p)->GetBackground(a,b)
+#define IDirect3DViewport3_SetBackgroundDepth(p,a)      (p)->SetBackgroundDepth(a)
+#define IDirect3DViewport3_GetBackgroundDepth(p,a,b)    (p)->GetBackgroundDepth(a,b)
+#define IDirect3DViewport3_Clear(p,a,b,c)               (p)->Clear(a,b,c)
+#define IDirect3DViewport3_AddLight(p,a)                (p)->AddLight(a)
+#define IDirect3DViewport3_DeleteLight(p,a)             (p)->DeleteLight(a)
+#define IDirect3DViewport3_NextLight(p,a,b,c)           (p)->NextLight(a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a)
+#define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a)
+/*** IDirect3DViewport3 methods ***/
+#define IDirect3DViewport3_SetBackgroundDepth2(p,a)   (p)->SetBackgroundDepth2(a)
+#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b)
+#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f)      (p)->Clear2(a,b,c,d,e,f)
+#endif
+
+
+
+/*****************************************************************************
+ * IDirect3DExecuteBuffer interface
+ */
+#define INTERFACE IDirect3DExecuteBuffer
+DECLARE_INTERFACE_(IDirect3DExecuteBuffer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DExecuteBuffer methods ***/
+    STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, D3DEXECUTEBUFFERDESC *desc) PURE;
+    STDMETHOD(Lock)(THIS_ D3DEXECUTEBUFFERDESC *desc) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(SetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE;
+    STDMETHOD(GetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE;
+    STDMETHOD(Validate)(THIS_ DWORD *offset, LPD3DVALIDATECALLBACK cb, void *ctx, DWORD reserved) PURE;
+    STDMETHOD(Optimize)(THIS_ DWORD dwDummy) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DExecuteBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DExecuteBuffer_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DExecuteBuffer methods ***/
+#define IDirect3DExecuteBuffer_Initialize(p,a,b)   (p)->lpVtbl->Initialize(p,a,b)
+#define IDirect3DExecuteBuffer_Lock(p,a)           (p)->lpVtbl->Lock(p,a)
+#define IDirect3DExecuteBuffer_Unlock(p)           (p)->lpVtbl->Unlock(p)
+#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a)
+#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a)
+#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d)
+#define IDirect3DExecuteBuffer_Optimize(p,a)       (p)->lpVtbl->Optimize(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DExecuteBuffer_AddRef(p)             (p)->AddRef()
+#define IDirect3DExecuteBuffer_Release(p)            (p)->Release()
+/*** IDirect3DExecuteBuffer methods ***/
+#define IDirect3DExecuteBuffer_Initialize(p,a,b)   (p)->Initialize(a,b)
+#define IDirect3DExecuteBuffer_Lock(p,a)           (p)->Lock(a)
+#define IDirect3DExecuteBuffer_Unlock(p)           (p)->Unlock()
+#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a)
+#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a)
+#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d)
+#define IDirect3DExecuteBuffer_Optimize(p,a)       (p)->Optimize(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice interface
+ */
+#define INTERFACE IDirect3DDevice
+DECLARE_INTERFACE_(IDirect3DDevice,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice methods ***/
+    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d, GUID *guid, D3DDEVICEDESC *desc) PURE;
+    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;
+    STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture *tex1, IDirect3DTexture *tex2) PURE;
+    STDMETHOD(CreateExecuteBuffer)(THIS_ D3DEXECUTEBUFFERDESC *desc,
+            IDirect3DExecuteBuffer **buffer, IUnknown *outer) PURE;
+    STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;
+    STDMETHOD(Execute)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport,
+            DWORD flags) PURE;
+    STDMETHOD(AddViewport)(THIS_ IDirect3DViewport *viewport) PURE;
+    STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport *viewport) PURE;
+    STDMETHOD(NextViewport)(THIS_ IDirect3DViewport *ref,
+            IDirect3DViewport **viewport, DWORD flags) PURE;
+    STDMETHOD(Pick)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport,
+            DWORD flags, D3DRECT *rect) PURE;
+    STDMETHOD(GetPickRecords)(THIS_ DWORD *count, D3DPICKRECORD *records) PURE;
+    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(CreateMatrix)(THIS_ D3DMATRIXHANDLE *matrix) PURE;
+    STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE;
+    STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE D3DMatHandle) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D **d3d) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice methods ***/
+#define IDirect3DDevice_Initialize(p,a,b,c)          (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirect3DDevice_GetCaps(p,a,b)               (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirect3DDevice_SwapTextureHandles(p,a,b)    (p)->lpVtbl->SwapTextureHandles(p,a,b)
+#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c)
+#define IDirect3DDevice_GetStats(p,a)                (p)->lpVtbl->GetStats(p,a)
+#define IDirect3DDevice_Execute(p,a,b,c)             (p)->lpVtbl->Execute(p,a,b,c)
+#define IDirect3DDevice_AddViewport(p,a)             (p)->lpVtbl->AddViewport(p,a)
+#define IDirect3DDevice_DeleteViewport(p,a)          (p)->lpVtbl->DeleteViewport(p,a)
+#define IDirect3DDevice_NextViewport(p,a,b,c)        (p)->lpVtbl->NextViewport(p,a,b,c)
+#define IDirect3DDevice_Pick(p,a,b,c,d)              (p)->lpVtbl->Pick(p,a,b,c,d)
+#define IDirect3DDevice_GetPickRecords(p,a,b)        (p)->lpVtbl->GetPickRecords(p,a,b)
+#define IDirect3DDevice_EnumTextureFormats(p,a,b)    (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice_CreateMatrix(p,a)            (p)->lpVtbl->CreateMatrix(p,a)
+#define IDirect3DDevice_SetMatrix(p,a,b)             (p)->lpVtbl->SetMatrix(p,a,b)
+#define IDirect3DDevice_GetMatrix(p,a,b)             (p)->lpVtbl->GetMatrix(p,a,b)
+#define IDirect3DDevice_DeleteMatrix(p,a)            (p)->lpVtbl->DeleteMatrix(p,a)
+#define IDirect3DDevice_BeginScene(p)                (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice_EndScene(p)                  (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice_GetDirect3D(p,a)             (p)->lpVtbl->GetDirect3D(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice_Release(p)            (p)->Release()
+/*** IDirect3DDevice methods ***/
+#define IDirect3DDevice_Initialize(p,a,b,c)          (p)->Initialize(a,b,c)
+#define IDirect3DDevice_GetCaps(p,a,b)               (p)->GetCaps(a,b)
+#define IDirect3DDevice_SwapTextureHandles(p,a,b)    (p)->SwapTextureHandles(a,b)
+#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c)
+#define IDirect3DDevice_GetStats(p,a)                (p)->GetStats(a)
+#define IDirect3DDevice_Execute(p,a,b,c)             (p)->Execute(a,b,c)
+#define IDirect3DDevice_AddViewport(p,a)             (p)->AddViewport(a)
+#define IDirect3DDevice_DeleteViewport(p,a)          (p)->DeleteViewport(a)
+#define IDirect3DDevice_NextViewport(p,a,b,c)        (p)->NextViewport(a,b,c)
+#define IDirect3DDevice_Pick(p,a,b,c,d)              (p)->Pick(a,b,c,d)
+#define IDirect3DDevice_GetPickRecords(p,a,b)        (p)->GetPickRecords(a,b)
+#define IDirect3DDevice_EnumTextureFormats(p,a,b)    (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice_CreateMatrix(p,a)            (p)->CreateMatrix(a)
+#define IDirect3DDevice_SetMatrix(p,a,b)             (p)->SetMatrix(a,b)
+#define IDirect3DDevice_GetMatrix(p,a,b)             (p)->GetMatrix(a,b)
+#define IDirect3DDevice_DeleteMatrix(p,a)            (p)->DeleteMatrix(a)
+#define IDirect3DDevice_BeginScene(p)                (p)->BeginScene()
+#define IDirect3DDevice_EndScene(p)                  (p)->EndScene()
+#define IDirect3DDevice_GetDirect3D(p,a)             (p)->GetDirect3D(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice2 interface
+ */
+#define INTERFACE IDirect3DDevice2
+DECLARE_INTERFACE_(IDirect3DDevice2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice2 methods ***/
+    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;
+    STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture2 *tex1, IDirect3DTexture2 *tex2) PURE;
+    STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;
+    STDMETHOD(AddViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;
+    STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;
+    STDMETHOD(NextViewport)(THIS_ IDirect3DViewport2 *ref,
+            IDirect3DViewport2 **viewport, DWORD flags) PURE;
+    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D2 **d3d) PURE;
+    /*** DrawPrimitive API ***/
+    STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;
+    STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport2 **viewport) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface *surface, DWORD flags) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface **surface) PURE;
+    STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dpt,D3DVERTEXTYPE dwVertexTypeDesc,DWORD dwFlags) PURE;
+    STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,
+            void *vertices, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(Vertex)(THIS_ void *vertex) PURE;
+    STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE;
+    STDMETHOD(End)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;
+    STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE;
+    STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,
+            void *vertices, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,
+            void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice2 methods ***/
+#define IDirect3DDevice2_GetCaps(p,a,b)                        (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirect3DDevice2_SwapTextureHandles(p,a,b)             (p)->lpVtbl->SwapTextureHandles(p,a,b)
+#define IDirect3DDevice2_GetStats(p,a)                         (p)->lpVtbl->GetStats(p,a)
+#define IDirect3DDevice2_AddViewport(p,a)                      (p)->lpVtbl->AddViewport(p,a)
+#define IDirect3DDevice2_DeleteViewport(p,a)                   (p)->lpVtbl->DeleteViewport(p,a)
+#define IDirect3DDevice2_NextViewport(p,a,b,c)                 (p)->lpVtbl->NextViewport(p,a,b,c)
+#define IDirect3DDevice2_EnumTextureFormats(p,a,b)             (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice2_BeginScene(p)                         (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice2_EndScene(p)                           (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice2_GetDirect3D(p,a)                      (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice2_SetCurrentViewport(p,a)               (p)->lpVtbl->SetCurrentViewport(p,a)
+#define IDirect3DDevice2_GetCurrentViewport(p,a)               (p)->lpVtbl->GetCurrentViewport(p,a)
+#define IDirect3DDevice2_SetRenderTarget(p,a,b)                (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice2_GetRenderTarget(p,a)                  (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice2_Begin(p,a,b,c)                        (p)->lpVtbl->Begin(p,a,b,c)
+#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e)             (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)
+#define IDirect3DDevice2_Vertex(p,a)                           (p)->lpVtbl->Vertex(p,a)
+#define IDirect3DDevice2_Index(p,a)                            (p)->lpVtbl->Index(p,a)
+#define IDirect3DDevice2_End(p,a)                              (p)->lpVtbl->End(p,a)
+#define IDirect3DDevice2_GetRenderState(p,a,b)                 (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice2_SetRenderState(p,a,b)                 (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice2_GetLightState(p,a,b)                  (p)->lpVtbl->GetLightState(p,a,b)
+#define IDirect3DDevice2_SetLightState(p,a,b)                  (p)->lpVtbl->SetLightState(p,a,b)
+#define IDirect3DDevice2_SetTransform(p,a,b)                   (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice2_GetTransform(p,a,b)                   (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice2_MultiplyTransform(p,a,b)              (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e)            (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice2_SetClipStatus(p,a)                    (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice2_GetClipStatus(p,a)                    (p)->lpVtbl->GetClipStatus(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice2_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice2_Release(p)            (p)->Release()
+/*** IDirect3DDevice2 methods ***/
+#define IDirect3DDevice2_GetCaps(p,a,b)                        (p)->GetCaps(a,b)
+#define IDirect3DDevice2_SwapTextureHandles(p,a,b)             (p)->SwapTextureHandles(a,b)
+#define IDirect3DDevice2_GetStats(p,a)                         (p)->GetStats(a)
+#define IDirect3DDevice2_AddViewport(p,a)                      (p)->AddViewport(a)
+#define IDirect3DDevice2_DeleteViewport(p,a)                   (p)->DeleteViewport(a)
+#define IDirect3DDevice2_NextViewport(p,a,b,c)                 (p)->NextViewport(a,b,c)
+#define IDirect3DDevice2_EnumTextureFormats(p,a,b)             (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice2_BeginScene(p)                         (p)->BeginScene()
+#define IDirect3DDevice2_EndScene(p)                           (p)->EndScene()
+#define IDirect3DDevice2_GetDirect3D(p,a)                      (p)->GetDirect3D(a)
+#define IDirect3DDevice2_SetCurrentViewport(p,a)               (p)->SetCurrentViewport(a)
+#define IDirect3DDevice2_GetCurrentViewport(p,a)               (p)->GetCurrentViewport(a)
+#define IDirect3DDevice2_SetRenderTarget(p,a,b)                (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice2_GetRenderTarget(p,a)                  (p)->GetRenderTarget(a)
+#define IDirect3DDevice2_Begin(p,a,b,c)                        (p)->Begin(a,b,c)
+#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e)             (p)->BeginIndexed(a,b,c,d,e)
+#define IDirect3DDevice2_Vertex(p,a)                           (p)->Vertex(a)
+#define IDirect3DDevice2_Index(p,a)                            (p)->Index(a)
+#define IDirect3DDevice2_End(p,a)                              (p)->End(a)
+#define IDirect3DDevice2_GetRenderState(p,a,b)                 (p)->GetRenderState(a,b)
+#define IDirect3DDevice2_SetRenderState(p,a,b)                 (p)->SetRenderState(a,b)
+#define IDirect3DDevice2_GetLightState(p,a,b)                  (p)->GetLightState(a,b)
+#define IDirect3DDevice2_SetLightState(p,a,b)                  (p)->SetLightState(a,b)
+#define IDirect3DDevice2_SetTransform(p,a,b)                   (p)->SetTransform(a,b)
+#define IDirect3DDevice2_GetTransform(p,a,b)                   (p)->GetTransform(a,b)
+#define IDirect3DDevice2_MultiplyTransform(p,a,b)              (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e)            (p)->DrawPrimitive(a,b,c,d,e)
+#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
+#define IDirect3DDevice2_SetClipStatus(p,a)                    (p)->SetClipStatus(a)
+#define IDirect3DDevice2_GetClipStatus(p,a)                    (p)->GetClipStatus(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice3 interface
+ */
+#define INTERFACE IDirect3DDevice3
+DECLARE_INTERFACE_(IDirect3DDevice3,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice3 methods ***/
+    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;
+    STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;
+    STDMETHOD(AddViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;
+    STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;
+    STDMETHOD(NextViewport)(THIS_ IDirect3DViewport3 *ref,
+            IDirect3DViewport3 **viewport, DWORD flags) PURE;
+    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D3 **d3d) PURE;
+    /*** DrawPrimitive API ***/
+    STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;
+    STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport3 **viewport) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface4 *surface, DWORD flags) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface4 **surface) PURE;
+    STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dptPrimitiveType,DWORD dwVertexTypeDesc, DWORD dwFlags) PURE;
+    STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            void *vertices, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(Vertex)(THIS_ void *vertex) PURE;
+    STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE;
+    STDMETHOD(End)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;
+    STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE;
+    STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD vertex_type,
+            void *vertices, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+    STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count,
+            DWORD flags) PURE;
+    STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb,
+            DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb,
+            WORD *indices, DWORD index_count, DWORD flags) PURE;
+    STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count,
+            DWORD flags, DWORD *ret) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirect3DTexture2 **texture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirect3DTexture2 *texture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice3 methods ***/
+#define IDirect3DDevice3_GetCaps(p,a,b)                        (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirect3DDevice3_GetStats(p,a)                         (p)->lpVtbl->GetStats(p,a)
+#define IDirect3DDevice3_AddViewport(p,a)                      (p)->lpVtbl->AddViewport(p,a)
+#define IDirect3DDevice3_DeleteViewport(p,a)                   (p)->lpVtbl->DeleteViewport(p,a)
+#define IDirect3DDevice3_NextViewport(p,a,b,c)                 (p)->lpVtbl->NextViewport(p,a,b,c)
+#define IDirect3DDevice3_EnumTextureFormats(p,a,b)             (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice3_BeginScene(p)                         (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice3_EndScene(p)                           (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice3_GetDirect3D(p,a)                      (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice3_SetCurrentViewport(p,a)               (p)->lpVtbl->SetCurrentViewport(p,a)
+#define IDirect3DDevice3_GetCurrentViewport(p,a)               (p)->lpVtbl->GetCurrentViewport(p,a)
+#define IDirect3DDevice3_SetRenderTarget(p,a,b)                (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice3_GetRenderTarget(p,a)                  (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice3_Begin(p,a,b,c)                        (p)->lpVtbl->Begin(p,a,b,c)
+#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e)             (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)
+#define IDirect3DDevice3_Vertex(p,a)                           (p)->lpVtbl->Vertex(p,a)
+#define IDirect3DDevice3_Index(p,a)                            (p)->lpVtbl->Index(p,a)
+#define IDirect3DDevice3_End(p,a)                              (p)->lpVtbl->End(p,a)
+#define IDirect3DDevice3_GetRenderState(p,a,b)                 (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice3_SetRenderState(p,a,b)                 (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice3_GetLightState(p,a,b)                  (p)->lpVtbl->GetLightState(p,a,b)
+#define IDirect3DDevice3_SetLightState(p,a,b)                  (p)->lpVtbl->SetLightState(p,a,b)
+#define IDirect3DDevice3_SetTransform(p,a,b)                   (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice3_GetTransform(p,a,b)                   (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice3_MultiplyTransform(p,a,b)              (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e)            (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice3_SetClipStatus(p,a)                    (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice3_GetClipStatus(p,a)                    (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e)     (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e)          (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e)   (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e)
+#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e)  (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)
+#define IDirect3DDevice3_GetTexture(p,a,b)                     (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice3_SetTexture(p,a,b)                     (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice3_GetTextureStageState(p,a,b,c)         (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice3_SetTextureStageState(p,a,b,c)         (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice3_ValidateDevice(p,a)                   (p)->lpVtbl->ValidateDevice(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice3_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice3_Release(p)            (p)->Release()
+/*** IDirect3DDevice3 methods ***/
+#define IDirect3DDevice3_GetCaps(p,a,b)                        (p)->GetCaps(a,b)
+#define IDirect3DDevice3_GetStats(p,a)                         (p)->GetStats(a)
+#define IDirect3DDevice3_AddViewport(p,a)                      (p)->AddViewport(a)
+#define IDirect3DDevice3_DeleteViewport(p,a)                   (p)->DeleteViewport(a)
+#define IDirect3DDevice3_NextViewport(p,a,b,c)                 (p)->NextViewport(a,b,c)
+#define IDirect3DDevice3_EnumTextureFormats(p,a,b)             (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice3_BeginScene(p)                         (p)->BeginScene()
+#define IDirect3DDevice3_EndScene(p)                           (p)->EndScene()
+#define IDirect3DDevice3_GetDirect3D(p,a)                      (p)->GetDirect3D(a)
+#define IDirect3DDevice3_SetCurrentViewport(p,a)               (p)->SetCurrentViewport(a)
+#define IDirect3DDevice3_GetCurrentViewport(p,a)               (p)->GetCurrentViewport(a)
+#define IDirect3DDevice3_SetRenderTarget(p,a,b)                (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice3_GetRenderTarget(p,a)                  (p)->GetRenderTarget(a)
+#define IDirect3DDevice3_Begin(p,a,b,c)                        (p)->Begin(a,b,c)
+#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e)             (p)->BeginIndexed(a,b,c,d,e)
+#define IDirect3DDevice3_Vertex(p,a)                           (p)->Vertex(a)
+#define IDirect3DDevice3_Index(p,a)                            (p)->Index(a)
+#define IDirect3DDevice3_End(p,a)                              (p)->End(a)
+#define IDirect3DDevice3_GetRenderState(p,a,b)                 (p)->GetRenderState(a,b)
+#define IDirect3DDevice3_SetRenderState(p,a,b)                 (p)->SetRenderState(a,b)
+#define IDirect3DDevice3_GetLightState(p,a,b)                  (p)->GetLightState(a,b)
+#define IDirect3DDevice3_SetLightState(p,a,b)                  (p)->SetLightState(a,b)
+#define IDirect3DDevice3_SetTransform(p,a,b)                   (p)->SetTransform(a,b)
+#define IDirect3DDevice3_GetTransform(p,a,b)                   (p)->GetTransform(a,b)
+#define IDirect3DDevice3_MultiplyTransform(p,a,b)              (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e)            (p)->DrawPrimitive(a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
+#define IDirect3DDevice3_SetClipStatus(p,a)                    (p)->SetClipStatus(a)
+#define IDirect3DDevice3_GetClipStatus(p,a)                    (p)->GetClipStatus(a)
+#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e)     (p)->DrawPrimitiveStrided(a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)
+#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e)          (p)->DrawPrimitiveVB(a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e)   (p)->DrawIndexedPrimitiveVB(a,b,c,d,e)
+#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e)  (p)->ComputeSphereVisibility(a,b,c,d,e)
+#define IDirect3DDevice3_GetTexture(p,a,b)                     (p)->GetTexture(a,b)
+#define IDirect3DDevice3_SetTexture(p,a,b)                     (p)->SetTexture(a,b)
+#define IDirect3DDevice3_GetTextureStageState(p,a,b,c)         (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice3_SetTextureStageState(p,a,b,c)         (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice3_ValidateDevice(p,a)                   (p)->ValidateDevice(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice7 interface
+ */
+#define INTERFACE IDirect3DDevice7
+DECLARE_INTERFACE_(IDirect3DDevice7,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice7 methods ***/
+    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC7 *desc) PURE;
+    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D7 **d3d) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface7 *surface, DWORD flags) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface7 **surface) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, D3DCOLOR color, D3DVALUE z, DWORD stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT7 *data) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT7 *data) PURE;
+    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL7 *data) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL7 *data) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ LPDWORD lpdwBlockHandle) PURE;
+    STDMETHOD(PreLoad)(THIS_ IDirectDrawSurface7 *surface) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            void *vertices, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+    STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count,
+            DWORD flags) PURE;
+    STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb,
+            DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE;
+    STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb,
+            DWORD start_vertex, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+    STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count,
+            DWORD flags, DWORD *ret) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 **surface) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 *surface) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE;
+    STDMETHOD(ApplyStateBlock)(THIS_ DWORD dwBlockHandle) PURE;
+    STDMETHOD(CaptureStateBlock)(THIS_ DWORD dwBlockHandle) PURE;
+    STDMETHOD(DeleteStateBlock)(THIS_ DWORD dwBlockHandle) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE d3dsbType,LPDWORD lpdwBlockHandle) PURE;
+    STDMETHOD(Load)(THIS_ IDirectDrawSurface7 *dst_surface, POINT *dst_point,
+            IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD dwLightIndex,BOOL bEnable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD dwLightIndex,BOOL *pbEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE;
+    STDMETHOD(GetInfo)(THIS_ DWORD info_id, void *info, DWORD info_size) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice7_QueryInterface(p,a,b)                        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice7_AddRef(p)                                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice7_Release(p)                                   (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice7 methods ***/
+#define IDirect3DDevice7_GetCaps(p,a)                                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirect3DDevice7_EnumTextureFormats(p,a,b)                    (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice7_BeginScene(p)                                (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice7_EndScene(p)                                  (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice7_GetDirect3D(p,a)                             (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice7_SetRenderTarget(p,a,b)                       (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice7_GetRenderTarget(p,a)                         (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f)                         (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice7_SetTransform(p,a,b)                          (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice7_GetTransform(p,a,b)                          (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice7_SetViewport(p,a)                             (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice7_MultiplyTransform(p,a,b)                     (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice7_GetViewport(p,a)                             (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice7_SetMaterial(p,a)                             (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice7_GetMaterial(p,a)                             (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice7_SetLight(p,a,b)                              (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice7_GetLight(p,a,b)                              (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice7_SetRenderState(p,a,b)                        (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice7_GetRenderState(p,a,b)                        (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice7_BeginStateBlock(p)                           (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice7_EndStateBlock(p,a)                           (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice7_PreLoad(p,a)                                 (p)->lpVtbl->PreLoad(p,a)
+#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e)                   (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g)        (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice7_SetClipStatus(p,a)                           (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice7_GetClipStatus(p,a)                           (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e)            (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e)                 (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)      (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e)         (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)
+#define IDirect3DDevice7_GetTexture(p,a,b)                            (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice7_SetTexture(p,a,b)                            (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice7_GetTextureStageState(p,a,b,c)                (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice7_SetTextureStageState(p,a,b,c)                (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice7_ValidateDevice(p,a)                          (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice7_ApplyStateBlock(p,a)                         (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice7_CaptureStateBlock(p,a)                       (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice7_DeleteStateBlock(p,a)                        (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice7_CreateStateBlock(p,a,b)                      (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice7_Load(p,a,b,c,d,e)                            (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DDevice7_LightEnable(p,a,b)                           (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice7_GetLightEnable(p,a,b)                        (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice7_SetClipPlane(p,a,b)                          (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice7_GetClipPlane(p,a,b)                          (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice7_GetInfo(p,a,b,c)                             (p)->lpVtbl->GetInfo(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice7_QueryInterface(p,a,b)                        (p)->QueryInterface(a,b)
+#define IDirect3DDevice7_AddRef(p)                                    (p)->AddRef()
+#define IDirect3DDevice7_Release(p)                                   (p)->Release()
+/*** IDirect3DDevice7 methods ***/
+#define IDirect3DDevice7_GetCaps(p,a)                                 (p)->GetCaps(a)
+#define IDirect3DDevice7_EnumTextureFormats(p,a,b)                    (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice7_BeginScene(p)                                (p)->BeginScene()
+#define IDirect3DDevice7_EndScene(p)                                  (p)->EndScene()
+#define IDirect3DDevice7_GetDirect3D(p,a)                             (p)->GetDirect3D(a)
+#define IDirect3DDevice7_SetRenderTarget(p,a,b)                       (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice7_GetRenderTarget(p,a)                         (p)->GetRenderTarget(a)
+#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f)                         (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice7_SetTransform(p,a,b)                          (p)->SetTransform(a,b)
+#define IDirect3DDevice7_GetTransform(p,a,b)                          (p)->GetTransform(a,b)
+#define IDirect3DDevice7_SetViewport(p,a)                             (p)->SetViewport(a)
+#define IDirect3DDevice7_MultiplyTransform(p,a,b)                     (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice7_GetViewport(p,a)                             (p)->GetViewport(a)
+#define IDirect3DDevice7_SetMaterial(p,a)                             (p)->SetMaterial(a)
+#define IDirect3DDevice7_GetMaterial(p,a)                             (p)->GetMaterial(a)
+#define IDirect3DDevice7_SetLight(p,a,b)                              (p)->SetLight(a,b)
+#define IDirect3DDevice7_GetLight(p,a,b)                              (p)->GetLight(a,b)
+#define IDirect3DDevice7_SetRenderState(p,a,b)                        (p)->SetRenderState(a,b)
+#define IDirect3DDevice7_GetRenderState(p,a,b)                        (p)->GetRenderState(a,b)
+#define IDirect3DDevice7_BeginStateBlock(p)                           (p)->BeginStateBlock()
+#define IDirect3DDevice7_EndStateBlock(p,a)                           (p)->EndStateBlock(a)
+#define IDirect3DDevice7_PreLoad(p,a)                                 (p)->PreLoad(a)
+#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e)                   (p)->DrawPrimitive(a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g)        (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
+#define IDirect3DDevice7_SetClipStatus(p,a)                           (p)->SetClipStatus(a)
+#define IDirect3DDevice7_GetClipStatus(p,a)                           (p)->GetClipStatus(a)
+#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e)            (p)->DrawPrimitiveStrided(a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)
+#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e)                 (p)->DrawPrimitiveVB(a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)      (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g)
+#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e)         (p)->ComputeSphereVisibility(a,b,c,d,e)
+#define IDirect3DDevice7_GetTexture(p,a,b)                            (p)->GetTexture(a,b)
+#define IDirect3DDevice7_SetTexture(p,a,b)                            (p)->SetTexture(a,b)
+#define IDirect3DDevice7_GetTextureStageState(p,a,b,c)                (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice7_SetTextureStageState(p,a,b,c)                (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice7_ValidateDevice(p,a)                          (p)->ValidateDevice(a)
+#define IDirect3DDevice7_ApplyStateBlock(p,a)                         (p)->ApplyStateBlock(a)
+#define IDirect3DDevice7_CaptureStateBlock(p,a)                       (p)->CaptureStateBlock(a)
+#define IDirect3DDevice7_DeleteStateBlock(p,a)                        (p)->DeleteStateBlock(a)
+#define IDirect3DDevice7_CreateStateBlock(p,a,b)                      (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice7_Load(p,a,b,c,d,e)                            (p)->Load(a,b,c,d,e)
+#define IDirect3DDevice7_LightEnable(p,a,b)                           (p)->LightEnable(a,b)
+#define IDirect3DDevice7_GetLightEnable(p,a,b)                        (p)->GetLightEnable(a,b)
+#define IDirect3DDevice7_SetClipPlane(p,a,b)                          (p)->SetClipPlane(a,b)
+#define IDirect3DDevice7_GetClipPlane(p,a,b)                          (p)->GetClipPlane(a,b)
+#define IDirect3DDevice7_GetInfo(p,a,b,c)                             (p)->GetInfo(a,b,c)
+#endif
+
+
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer interface
+ */
+#define INTERFACE IDirect3DVertexBuffer
+DECLARE_INTERFACE_(IDirect3DVertexBuffer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexBuffer methods ***/
+    STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,
+            IDirect3DVertexBuffer *src_buffer, DWORD src_idx,
+            IDirect3DDevice3 *device, DWORD flags) PURE;
+    STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE;
+    STDMETHOD(Optimize)(THIS_ IDirect3DDevice3 *device, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer methods ***/
+#define IDirect3DVertexBuffer_Lock(p,a,b,c)                    (p)->lpVtbl->Lock(p,a,b,c)
+#define IDirect3DVertexBuffer_Unlock(p)                        (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a)         (p)->lpVtbl->GetVertexBufferDesc(p,a)
+#define IDirect3DVertexBuffer_Optimize(p,a,b)                  (p)->lpVtbl->Optimize(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer_AddRef(p)             (p)->AddRef()
+#define IDirect3DVertexBuffer_Release(p)            (p)->Release()
+/*** IDirect3DVertexBuffer methods ***/
+#define IDirect3DVertexBuffer_Lock(p,a,b,c)                    (p)->Lock(a,b,c)
+#define IDirect3DVertexBuffer_Unlock(p)                        (p)->Unlock()
+#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a)         (p)->GetVertexBufferDesc(a)
+#define IDirect3DVertexBuffer_Optimize(p,a,b)                  (p)->Optimize(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer7 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer7
+DECLARE_INTERFACE_(IDirect3DVertexBuffer7,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexBuffer7 methods ***/
+    STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,
+            IDirect3DVertexBuffer7 *src_buffer, DWORD src_idx,
+            IDirect3DDevice7 *device, DWORD flags) PURE;
+    STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE;
+    STDMETHOD(Optimize)(THIS_ IDirect3DDevice7 *device, DWORD flags) PURE;
+    STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,
+            D3DDRAWPRIMITIVESTRIDEDDATA *data, DWORD fvf, IDirect3DDevice7 *device, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer7_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer7_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer7_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer7 methods ***/
+#define IDirect3DVertexBuffer7_Lock(p,a,b,c)                           (p)->lpVtbl->Lock(p,a,b,c)
+#define IDirect3DVertexBuffer7_Unlock(p)                               (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g)        (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a)                (p)->lpVtbl->GetVertexBufferDesc(p,a)
+#define IDirect3DVertexBuffer7_Optimize(p,a,b)                         (p)->lpVtbl->Optimize(p,a,b)
+#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer7_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer7_AddRef(p)                               (p)->AddRef()
+#define IDirect3DVertexBuffer7_Release(p)                              (p)->Release()
+/*** IDirect3DVertexBuffer7 methods ***/
+#define IDirect3DVertexBuffer7_Lock(p,a,b,c)                           (p)->Lock(a,b,c)
+#define IDirect3DVertexBuffer7_Unlock(p)                               (p)->Unlock()
+#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g)        (p)->ProcessVertices(a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a)                (p)->GetVertexBufferDesc(a)
+#define IDirect3DVertexBuffer7_Optimize(p,a,b)                         (p)->Optimize(a,b)
+#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g)
+#endif
+
+#endif /* __WINE_D3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl
new file mode 100644
index 0000000..b79591a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl
@@ -0,0 +1,1611 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgi.idl";
+import "d3dcommon.idl";
+
+cpp_quote("#ifndef _D3D10_CONSTANTS")
+cpp_quote("#define _D3D10_CONSTANTS")
+const float D3D10_DEFAULT_BLEND_FACTOR_ALPHA                                            = 1.0;
+const float D3D10_DEFAULT_BLEND_FACTOR_BLUE                                             = 1.0;
+const float D3D10_DEFAULT_BLEND_FACTOR_GREEN                                            = 1.0;
+const float D3D10_DEFAULT_BLEND_FACTOR_RED                                              = 1.0;
+const float D3D10_DEFAULT_BORDER_COLOR_COMPONENT                                        = 0.0;
+const float D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS                                       = 0.0;
+const float D3D10_DEFAULT_DEPTH_BIAS_CLAMP                                              = 0.0;
+const float D3D10_DEFAULT_MAX_ANISOTROPY                                                = 16.0;
+const float D3D10_DEFAULT_MIP_LOD_BIAS                                                  = 0.0;
+const float D3D10_DEFAULT_VIEWPORT_MAX_DEPTH                                            = 0.0;
+const float D3D10_DEFAULT_VIEWPORT_MIN_DEPTH                                            = 0.0;
+const float D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP                                        = 0.6;
+const float D3D10_FLOAT32_MAX                                                           = 3.402823466e+38;
+const float D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP                                   = 0.6;
+const float D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR                                    = 2.4;
+const float D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR                                      = 1.0;
+const float D3D10_FLOAT_TO_SRGB_OFFSET                                                  = 0.055;
+const float D3D10_FLOAT_TO_SRGB_SCALE_1                                                 = 12.92;
+const float D3D10_FLOAT_TO_SRGB_SCALE_2                                                 = 1.055;
+const float D3D10_FLOAT_TO_SRGB_THRESHOLD                                               = 0.0031308;
+const float D3D10_FTOI_INSTRUCTION_MAX_INPUT                                            = 2147483647.999;
+const float D3D10_FTOI_INSTRUCTION_MIN_INPUT                                            = -2147483648.999;
+const float D3D10_FTOU_INSTRUCTION_MAX_INPUT                                            = 4294967295.999;
+const float D3D10_FTOU_INSTRUCTION_MIN_INPUT                                            = 0.0;
+const float D3D10_LINEAR_GAMMA                                                          = 1.0;
+const float D3D10_MAX_BORDER_COLOR_COMPONENT                                            = 1.0;
+const float D3D10_MAX_DEPTH                                                             = 1.0;
+const float D3D10_MAX_POSITION_VALUE                                                    = 3.402823466e+34;
+const float D3D10_MIN_BORDER_COLOR_COMPONENT                                            = 0.0;
+const float D3D10_MIN_DEPTH                                                             = 0.0;
+const float D3D10_MIP_LOD_BIAS_MAX                                                      = 15.99;
+const float D3D10_MIP_LOD_BIAS_MIN                                                      = -16.0;
+const float D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT                                  = 0.5;
+const float D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH                                      = 1.4;
+const float D3D10_SRGB_GAMMA                                                            = 2.2;
+const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_1                                           = 12.92;
+const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_2                                           = 1.055;
+const float D3D10_SRGB_TO_FLOAT_EXPONENT                                                = 2.4;
+const float D3D10_SRGB_TO_FLOAT_OFFSET                                                  = 0.055;
+const float D3D10_SRGB_TO_FLOAT_THRESHOLD                                               = 0.04045;
+const float D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP                                        = 0.5;
+const float D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT                           = 0.0;
+const float D3D_SPEC_VERSION                                                            = 1.050005;
+const unsigned int D3D10_16BIT_INDEX_STRIP_CUT_VALUE                                    = 0xffff;
+const unsigned int D3D10_32BIT_INDEX_STRIP_CUT_VALUE                                    = 0xffffffff;
+const unsigned int D3D10_8BIT_INDEX_STRIP_CUT_VALUE                                     = 0xff;
+const unsigned int D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT                             = 9;
+const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_COUNT                                    = 8;
+const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT                            = 2;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT                    = 14;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS                        = 4;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT               = 32;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT                     = 15;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS               = 4;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT                    = 15;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST           = 1;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS               = 1;
+const unsigned int D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT                         = 64;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS     = 4;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT          = 1;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS     = 1;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT               = 32;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS                = 1;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT                     = 128;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST            = 1;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS                = 1;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT                         = 128;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS                       = 1;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT                            = 16;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST                   = 1;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS                       = 1;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT                                = 16;
+const unsigned int D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT                          = 32;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS                          = 4;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT                 = 32;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COUNT                               = 4096;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST                      = 3;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS                          = 3;
+const unsigned int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX                      = 10;
+const int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN                               = -10;
+const int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE                                  = -8;
+const unsigned int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE                         = 7;
+const unsigned int D3D10_DEFAULT_DEPTH_BIAS                                             = 0;
+const unsigned int D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX                              = 0;
+const unsigned int D3D10_DEFAULT_SAMPLE_MASK                                            = 0xffffffff;
+const unsigned int D3D10_DEFAULT_SCISSOR_ENDX                                           = 0;
+const unsigned int D3D10_DEFAULT_SCISSOR_ENDY                                           = 0;
+const unsigned int D3D10_DEFAULT_SCISSOR_STARTX                                         = 0;
+const unsigned int D3D10_DEFAULT_SCISSOR_STARTY                                         = 0;
+const unsigned int D3D10_DEFAULT_STENCIL_READ_MASK                                      = 0xff;
+const unsigned int D3D10_DEFAULT_STENCIL_REFERENCE                                      = 0;
+const unsigned int D3D10_DEFAULT_STENCIL_WRITE_MASK                                     = 0xff;
+const unsigned int D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX                         = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_HEIGHT                                        = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTX                                      = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTY                                      = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_WIDTH                                         = 0;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS                        = 1;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT               = 32;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT                             = 1;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST                    = 2;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS                        = 1;
+const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENTS                                   = 4;
+const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          =32;
+const unsigned int D3D10_GS_INPUT_REGISTER_COUNT                                        = 16;
+const unsigned int D3D10_GS_INPUT_REGISTER_READS_PER_INST                               = 2;
+const unsigned int D3D10_GS_INPUT_REGISTER_READ_PORTS                                   = 1;
+const unsigned int D3D10_GS_INPUT_REGISTER_VERTICES                                     = 6;
+const unsigned int D3D10_GS_OUTPUT_ELEMENTS                                             = 32;
+const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENTS                                  = 4;
+const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;
+const unsigned int D3D10_GS_OUTPUT_REGISTER_COUNT                                       = 32;
+const unsigned int D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES                        = 0;
+const unsigned int D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY                                  = 0;
+const unsigned int D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES                       = 0;
+const unsigned int D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT                             = 1;
+const unsigned int D3D10_IA_INSTANCE_ID_BIT_COUNT                                       = 32;
+const unsigned int D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT                                = 32;
+const unsigned int D3D10_IA_PRIMITIVE_ID_BIT_COUNT                                      = 32;
+const unsigned int D3D10_IA_VERTEX_ID_BIT_COUNT                                         = 32;
+const unsigned int D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT                            = 16;
+const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS                  = 64;
+const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT                        = 16;
+const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT                                = 0xffffffff;
+const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER                               = 0xffffffff;
+const unsigned int D3D10_MAX_MAXANISOTROPY                                              = 16;
+const unsigned int D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT                                   = 32;
+const unsigned int D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP                                 = 17;
+const unsigned int D3D10_MIN_MAXANISOTROPY                                              = 0;
+const unsigned int D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT                                   = 6;
+const unsigned int D3D10_MIP_LOD_RANGE_BIT_COUNT                                        = 8;
+const unsigned int D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT                     = 0;
+const unsigned int D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT                                  = 13;
+const unsigned int D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT                      = 15;
+const unsigned int D3D10_PS_FRONTFACING_DEFAULT_VALUE                                   = 0xffffffff;
+const unsigned int D3D10_PS_FRONTFACING_FALSE_VALUE                                     = 0;
+const unsigned int D3D10_PS_FRONTFACING_TRUE_VALUE                                      = 0xffffffff;
+const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENTS                                   = 4;
+const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          = 32;
+const unsigned int D3D10_PS_INPUT_REGISTER_COUNT                                        = 32;
+const unsigned int D3D10_PS_INPUT_REGISTER_READS_PER_INST                               = 2;
+const unsigned int D3D10_PS_INPUT_REGISTER_READ_PORTS                                   = 1;
+const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS                            = 1;
+const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT                   = 32;
+const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT                                 = 1;
+const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENTS                                  = 4;
+const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;
+const unsigned int D3D10_PS_OUTPUT_REGISTER_COUNT                                       = 8;
+const unsigned int D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT                             = 4096;
+const unsigned int D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP                       = 27;
+const unsigned int D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT                              = 4096;
+const unsigned int D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT                     = 4096;
+const unsigned int D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP                           = 32;
+const unsigned int D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP                                 = 32;
+const unsigned int D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION                = 8192;
+const unsigned int D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT                 = 1024;
+const unsigned int D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT                    = 4096;
+const unsigned int D3D10_REQ_MAXANISOTROPY                                              = 16;
+const unsigned int D3D10_REQ_MIP_LEVELS                                                 = 14;
+const unsigned int D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES                      = 2048;
+const unsigned int D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT                        = 4096;
+const unsigned int D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH                              = 8192;
+const unsigned int D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES                                 = 128;
+const unsigned int D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP                   = 20;
+const unsigned int D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT                           = 4096;
+const unsigned int D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION                             = 512;
+const unsigned int D3D10_REQ_TEXTURE1D_U_DIMENSION                                      = 8192;
+const unsigned int D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION                             = 512;
+const unsigned int D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION                                 = 8192;
+const unsigned int D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION                               = 2048;
+const unsigned int D3D10_REQ_TEXTURECUBE_DIMENSION                                      = 8192;
+const unsigned int D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL                   = 0;
+const unsigned int D3D10_SHADER_MAJOR_VERSION                                           = 4;
+const unsigned int D3D10_SHADER_MINOR_VERSION                                           = 0;
+const unsigned int D3D10_SHIFT_INSTRUCTION_PAD_VALUE                                    = 0;
+const unsigned int D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT                        = 5;
+const unsigned int D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT                               = 8;
+const unsigned int D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES                                  = 2048;
+const unsigned int D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES                            = 256;
+const unsigned int D3D10_SO_BUFFER_SLOT_COUNT                                           = 4;
+const unsigned int D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP                             = 0xffffffff;
+const unsigned int D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER                         = 1;
+const unsigned int D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT                               = 64;
+const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT                                   = 32;
+const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED                           = 64;
+const unsigned int D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE               = 4;
+const unsigned int D3D10_STANDARD_PIXEL_COMPONENT_COUNT                                 = 128;
+const unsigned int D3D10_STANDARD_PIXEL_ELEMENT_COUNT                                   = 32;
+const unsigned int D3D10_STANDARD_VECTOR_SIZE                                           = 4;
+const unsigned int D3D10_STANDARD_VERTEX_ELEMENT_COUNT                                  = 16;
+const unsigned int D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT                          = 64;
+const unsigned int D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT                                  = 8;
+const unsigned int D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT                                  = 6;
+const unsigned int D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT                                  = 18;
+const unsigned int D3D10_UNBOUND_MEMORY_ACCESS_RESULT                                   = 0;
+const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX                             = 15;
+const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE             = 16;
+const unsigned int D3D10_VIEWPORT_BOUNDS_MAX                                            = 16383;
+const int D3D10_VIEWPORT_BOUNDS_MIN                                                     = -16384;
+const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENTS                                   = 4;
+const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          = 32;
+const unsigned int D3D10_VS_INPUT_REGISTER_COUNT                                        = 16;
+const unsigned int D3D10_VS_INPUT_REGISTER_READS_PER_INST                               = 2;
+const unsigned int D3D10_VS_INPUT_REGISTER_READ_PORTS                                   = 1;
+const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENTS                                  = 4;
+const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;
+const unsigned int D3D10_VS_OUTPUT_REGISTER_COUNT                                       = 16;
+const unsigned int D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT                          = 10;
+const unsigned int D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP                          = 25;
+const unsigned int D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP                                = 25;
+const unsigned int D3D_MAJOR_VERSION                                                    = 10;
+const unsigned int D3D_MINOR_VERSION                                                    = 0;
+const unsigned int D3D_SPEC_DATE_DAY                                                    = 8;
+const unsigned int D3D_SPEC_DATE_MONTH                                                  = 8;
+const unsigned int D3D_SPEC_DATE_YEAR                                                   = 2006;
+cpp_quote("#endif")
+
+const unsigned int D3D10_APPEND_ALIGNED_ELEMENT                                         = 0xffffffff;
+const unsigned int _FACD3D10                                                            = 0x87;
+const unsigned int _FACD3D10DEBUG                                                       = _FACD3D10 + 1;
+const unsigned int D3D10_FILTER_TYPE_MASK                                               = 0x3;
+const unsigned int D3D10_SDK_VERSION                                                    = 29;
+
+cpp_quote("#define MAKE_D3D10_HRESULT(code)                   MAKE_HRESULT( 1, _FACD3D10, code)")
+cpp_quote("#define MAKE_D3D10_STATUS(code)                    MAKE_HRESULT( 0, _FACD3D10, code)")
+cpp_quote("#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS  MAKE_D3D10_HRESULT(1)")
+cpp_quote("#define D3D10_ERROR_FILE_NOT_FOUND                 MAKE_D3D10_HRESULT(2)")
+
+typedef enum D3D10_BLEND {
+    D3D10_BLEND_ZERO             = 1,
+    D3D10_BLEND_ONE              = 2,
+    D3D10_BLEND_SRC_COLOR        = 3,
+    D3D10_BLEND_INV_SRC_COLOR    = 4,
+    D3D10_BLEND_SRC_ALPHA        = 5,
+    D3D10_BLEND_INV_SRC_ALPHA    = 6,
+    D3D10_BLEND_DEST_ALPHA       = 7,
+    D3D10_BLEND_INV_DEST_ALPHA   = 8,
+    D3D10_BLEND_DEST_COLOR       = 9,
+    D3D10_BLEND_INV_DEST_COLOR   = 10,
+    D3D10_BLEND_SRC_ALPHA_SAT    = 11,
+    D3D10_BLEND_BLEND_FACTOR     = 14,
+    D3D10_BLEND_INV_BLEND_FACTOR = 15,
+    D3D10_BLEND_SRC1_COLOR       = 16,
+    D3D10_BLEND_INV_SRC1_COLOR   = 17,
+    D3D10_BLEND_SRC1_ALPHA       = 18,
+    D3D10_BLEND_INV_SRC1_ALPHA   = 19
+} D3D10_BLEND;
+
+typedef enum D3D10_BLEND_OP {
+    D3D10_BLEND_OP_ADD = 1,
+    D3D10_BLEND_OP_SUBTRACT,
+    D3D10_BLEND_OP_REV_SUBTRACT,
+    D3D10_BLEND_OP_MIN,
+    D3D10_BLEND_OP_MAX,
+} D3D10_BLEND_OP;
+
+typedef struct D3D10_BLEND_DESC {
+    BOOL AlphaToCoverageEnable;
+    BOOL BlendEnable[8];
+    D3D10_BLEND SrcBlend;
+    D3D10_BLEND DestBlend;
+    D3D10_BLEND_OP BlendOp;
+    D3D10_BLEND SrcBlendAlpha;
+    D3D10_BLEND DestBlendAlpha;
+    D3D10_BLEND_OP BlendOpAlpha;
+    UINT8 RenderTargetWriteMask[8];
+} D3D10_BLEND_DESC;
+
+typedef enum D3D10_DEPTH_WRITE_MASK {
+    D3D10_DEPTH_WRITE_MASK_ZERO,
+    D3D10_DEPTH_WRITE_MASK_ALL,
+} D3D10_DEPTH_WRITE_MASK;
+
+typedef enum D3D10_COMPARISON_FUNC {
+    D3D10_COMPARISON_NEVER = 1,
+    D3D10_COMPARISON_LESS,
+    D3D10_COMPARISON_EQUAL,
+    D3D10_COMPARISON_LESS_EQUAL,
+    D3D10_COMPARISON_GREATER,
+    D3D10_COMPARISON_NOT_EQUAL,
+    D3D10_COMPARISON_GREATER_EQUAL,
+    D3D10_COMPARISON_ALWAYS,
+} D3D10_COMPARISON_FUNC;
+
+typedef enum D3D10_STENCIL_OP {
+    D3D10_STENCIL_OP_KEEP = 1,
+    D3D10_STENCIL_OP_ZERO,
+    D3D10_STENCIL_OP_REPLACE,
+    D3D10_STENCIL_OP_INCR_SAT,
+    D3D10_STENCIL_OP_DECR_SAT,
+    D3D10_STENCIL_OP_INVERT,
+    D3D10_STENCIL_OP_INCR,
+    D3D10_STENCIL_OP_DECR,
+} D3D10_STENCIL_OP;
+
+typedef struct D3D10_DEPTH_STENCILOP_DESC {
+    D3D10_STENCIL_OP StencilFailOp;
+    D3D10_STENCIL_OP StencilDepthFailOp;
+    D3D10_STENCIL_OP StencilPassOp;
+    D3D10_COMPARISON_FUNC StencilFunc;
+} D3D10_DEPTH_STENCILOP_DESC;
+
+typedef struct D3D10_DEPTH_STENCIL_DESC {
+    BOOL DepthEnable;
+    D3D10_DEPTH_WRITE_MASK DepthWriteMask;
+    D3D10_COMPARISON_FUNC DepthFunc;
+    BOOL StencilEnable;
+    UINT8 StencilReadMask;
+    UINT8 StencilWriteMask;
+    D3D10_DEPTH_STENCILOP_DESC FrontFace;
+    D3D10_DEPTH_STENCILOP_DESC BackFace;
+} D3D10_DEPTH_STENCIL_DESC;
+
+typedef enum D3D10_FILL_MODE {
+    D3D10_FILL_WIREFRAME = 2,
+    D3D10_FILL_SOLID,
+} D3D10_FILL_MODE;
+
+typedef enum D3D10_CULL_MODE {
+    D3D10_CULL_NONE = 1,
+    D3D10_CULL_FRONT,
+    D3D10_CULL_BACK,
+} D3D10_CULL_MODE;
+
+typedef struct D3D10_RASTERIZER_DESC {
+    D3D10_FILL_MODE FillMode;
+    D3D10_CULL_MODE CullMode;
+    BOOL FrontCounterClockwise;
+    INT DepthBias;
+    FLOAT DepthBiasClamp;
+    FLOAT SlopeScaledDepthBias;
+    BOOL DepthClipEnable;
+    BOOL ScissorEnable;
+    BOOL MultisampleEnable;
+    BOOL AntialiasedLineEnable;
+} D3D10_RASTERIZER_DESC;
+
+typedef enum D3D10_FILTER {
+    D3D10_FILTER_MIN_MAG_MIP_POINT                          = 0,
+    D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR                   = 0x1,
+    D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT             = 0x4,
+    D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR                   = 0x5,
+    D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT                   = 0x10,
+    D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR            = 0x11,
+    D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT                   = 0x14,
+    D3D10_FILTER_MIN_MAG_MIP_LINEAR                         = 0x15,
+    D3D10_FILTER_ANISOTROPIC                                = 0x55,
+    D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT               = 0x80,
+    D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR        = 0x81,
+    D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,
+    D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR        = 0x85,
+    D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT        = 0x90,
+    D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+    D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT        = 0x94,
+    D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR              = 0x95,
+    D3D10_FILTER_COMPARISON_ANISOTROPIC                     = 0xd5,
+    D3D10_FILTER_TEXT_1BIT                                  = 0x80000000
+} D3D10_FILTER;
+
+typedef enum D3D10_TEXTURE_ADDRESS_MODE {
+    D3D10_TEXTURE_ADDRESS_WRAP = 1,
+    D3D10_TEXTURE_ADDRESS_MIRROR,
+    D3D10_TEXTURE_ADDRESS_CLAMP,
+    D3D10_TEXTURE_ADDRESS_BORDER,
+    D3D10_TEXTURE_ADDRESS_MIRROR_ONCE,
+} D3D10_TEXTURE_ADDRESS_MODE;
+
+typedef struct D3D10_SAMPLER_DESC {
+    D3D10_FILTER Filter;
+    D3D10_TEXTURE_ADDRESS_MODE AddressU;
+    D3D10_TEXTURE_ADDRESS_MODE AddressV;
+    D3D10_TEXTURE_ADDRESS_MODE AddressW;
+    FLOAT MipLODBias;
+    UINT MaxAnisotropy;
+    D3D10_COMPARISON_FUNC ComparisonFunc;
+    FLOAT BorderColor[4];
+    FLOAT MinLOD;
+    FLOAT MaxLOD;
+} D3D10_SAMPLER_DESC;
+
+typedef enum D3D10_COUNTER {
+    D3D10_COUNTER_GPU_IDLE,
+    D3D10_COUNTER_VERTEX_PROCESSING,
+    D3D10_COUNTER_GEOMETRY_PROCESSING,
+    D3D10_COUNTER_PIXEL_PROCESSING,
+    D3D10_COUNTER_OTHER_GPU_PROCESSING,
+    D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
+    D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
+    D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
+    D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION,
+    D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
+    D3D10_COUNTER_VS_MEMORY_LIMITED,
+    D3D10_COUNTER_VS_COMPUTATION_LIMITED,
+    D3D10_COUNTER_GS_MEMORY_LIMITED,
+    D3D10_COUNTER_GS_COMPUTATION_LIMITED,
+    D3D10_COUNTER_PS_MEMORY_LIMITED,
+    D3D10_COUNTER_PS_COMPUTATION_LIMITED,
+    D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
+    D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE,
+    D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000
+} D3D10_COUNTER;
+
+typedef struct D3D10_COUNTER_DESC {
+    D3D10_COUNTER Counter;
+    UINT MiscFlags;
+} D3D10_COUNTER_DESC;
+
+typedef enum D3D10_COUNTER_TYPE {
+    D3D10_COUNTER_TYPE_FLOAT32,
+    D3D10_COUNTER_TYPE_UINT16,
+    D3D10_COUNTER_TYPE_UINT32,
+    D3D10_COUNTER_TYPE_UINT64,
+} D3D10_COUNTER_TYPE;
+
+typedef struct D3D10_COUNTER_INFO {
+    D3D10_COUNTER LastDeviceDependentCounter;
+    UINT NumSimultaneousCounters;
+    UINT8 NumDetectableParallelUnits;
+} D3D10_COUNTER_INFO;
+
+typedef enum D3D10_RESOURCE_DIMENSION {
+    D3D10_RESOURCE_DIMENSION_UNKNOWN,
+    D3D10_RESOURCE_DIMENSION_BUFFER,
+    D3D10_RESOURCE_DIMENSION_TEXTURE1D,
+    D3D10_RESOURCE_DIMENSION_TEXTURE2D,
+    D3D10_RESOURCE_DIMENSION_TEXTURE3D,
+} D3D10_RESOURCE_DIMENSION;
+
+typedef enum D3D10_USAGE {
+    D3D10_USAGE_DEFAULT,
+    D3D10_USAGE_IMMUTABLE,
+    D3D10_USAGE_DYNAMIC,
+    D3D10_USAGE_STAGING,
+} D3D10_USAGE;
+
+typedef enum D3D10_BIND_FLAG {
+    D3D10_BIND_VERTEX_BUFFER   = 0x1,
+    D3D10_BIND_INDEX_BUFFER    = 0x2,
+    D3D10_BIND_CONSTANT_BUFFER = 0x4,
+    D3D10_BIND_SHADER_RESOURCE = 0x8,
+    D3D10_BIND_STREAM_OUTPUT   = 0x10,
+    D3D10_BIND_RENDER_TARGET   = 0x20,
+    D3D10_BIND_DEPTH_STENCIL   = 0x40
+} D3D10_BIND_FLAG;
+
+typedef struct D3D10_BUFFER_DESC {
+    UINT ByteWidth;
+    D3D10_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D10_BUFFER_DESC;
+
+cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D10_BUFFER_DESC : public D3D10_BUFFER_DESC {")
+cpp_quote("    CD3D10_BUFFER_DESC() {}" )
+cpp_quote("    explicit CD3D10_BUFFER_DESC(const D3D10_BUFFER_DESC &o) : D3D10_BUFFER_DESC(o) {}")
+cpp_quote("    explicit CD3D10_BUFFER_DESC(UINT byteWidth, UINT bindFlags, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) {")
+cpp_quote("        ByteWidth = byteWidth;")
+cpp_quote("        Usage = usage;")
+cpp_quote("        BindFlags = bindFlags;")
+cpp_quote("        CPUAccessFlags = cpuaccessFlags;")
+cpp_quote("        MiscFlags = miscFlags;")
+cpp_quote("    }")
+cpp_quote("    ~CD3D10_BUFFER_DESC() {}")
+cpp_quote("    operator const D3D10_BUFFER_DESC&() const {")
+cpp_quote("        return *this;")
+cpp_quote("    }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef enum D3D10_MAP {
+    D3D10_MAP_READ = 1,
+    D3D10_MAP_WRITE,
+    D3D10_MAP_READ_WRITE,
+    D3D10_MAP_WRITE_DISCARD,
+    D3D10_MAP_WRITE_NO_OVERWRITE,
+} D3D10_MAP;
+
+typedef struct D3D10_TEXTURE1D_DESC {
+    UINT Width;
+    UINT MipLevels;
+    UINT ArraySize;
+    DXGI_FORMAT Format;
+    D3D10_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D10_TEXTURE1D_DESC;
+
+cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D10_TEXTURE1D_DESC : public D3D10_TEXTURE1D_DESC {")
+cpp_quote("    CD3D10_TEXTURE1D_DESC() {}")
+cpp_quote("    explicit CD3D10_TEXTURE1D_DESC(const D3D10_TEXTURE1D_DESC &o) : D3D10_TEXTURE1D_DESC(o) {}")
+cpp_quote("    explicit CD3D10_TEXTURE1D_DESC(DXGI_FORMAT format, UINT width, UINT arraySize = 1, UINT mipLevels = 0,")
+cpp_quote("        UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0,")
+cpp_quote("        UINT miscFlags = 0) {")
+cpp_quote("        Width = width;")
+cpp_quote("        MipLevels = mipLevels;")
+cpp_quote("        ArraySize = arraySize;")
+cpp_quote("        Format = format;")
+cpp_quote("        Usage = usage;")
+cpp_quote("        BindFlags = bindFlags;")
+cpp_quote("        CPUAccessFlags = cpuaccessFlags;")
+cpp_quote("        MiscFlags = miscFlags;")
+cpp_quote("    }")
+cpp_quote("    ~CD3D10_TEXTURE1D_DESC() {}")
+cpp_quote("    operator const D3D10_TEXTURE1D_DESC&() const {")
+cpp_quote("        return *this;")
+cpp_quote("    }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D10_TEXTURE2D_DESC {
+    UINT Width;
+    UINT Height;
+    UINT MipLevels;
+    UINT ArraySize;
+    DXGI_FORMAT Format;
+    DXGI_SAMPLE_DESC SampleDesc;
+    D3D10_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D10_TEXTURE2D_DESC;
+
+cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D10_TEXTURE2D_DESC : public D3D10_TEXTURE2D_DESC {")
+cpp_quote("    CD3D10_TEXTURE2D_DESC() {}" )
+cpp_quote("    explicit CD3D10_TEXTURE2D_DESC(const D3D10_TEXTURE2D_DESC &o) : D3D10_TEXTURE2D_DESC(o) {}")
+cpp_quote("    explicit CD3D10_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height,")
+cpp_quote("            UINT arraySize = 1,")
+cpp_quote("            UINT mipLevels = 0,")
+cpp_quote("            UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,")
+cpp_quote("            D3D10_USAGE usage = D3D10_USAGE_DEFAULT,")
+cpp_quote("            UINT cpuaccessFlags = 0,")
+cpp_quote("            UINT sampleCount = 1,")
+cpp_quote("            UINT sampleQuality = 0,")
+cpp_quote("            UINT miscFlags = 0) {")
+cpp_quote("        Width = width;" )
+cpp_quote("        Height = height;" )
+cpp_quote("        MipLevels = mipLevels;" )
+cpp_quote("        ArraySize = arraySize;" )
+cpp_quote("        Format = format;" )
+cpp_quote("        SampleDesc.Count = sampleCount;" )
+cpp_quote("        SampleDesc.Quality = sampleQuality;" )
+cpp_quote("        Usage = usage;" )
+cpp_quote("        BindFlags = bindFlags;" )
+cpp_quote("        CPUAccessFlags = cpuaccessFlags;" )
+cpp_quote("        MiscFlags = miscFlags;" )
+cpp_quote("    }")
+cpp_quote("    ~CD3D10_TEXTURE2D_DESC() {}")
+cpp_quote("    operator const D3D10_TEXTURE2D_DESC&() const {")
+cpp_quote("        return *this;")
+cpp_quote("    }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D10_TEXTURE3D_DESC {
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+    UINT MipLevels;
+    DXGI_FORMAT Format;
+    D3D10_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D10_TEXTURE3D_DESC;
+
+typedef enum D3D10_DSV_DIMENSION
+{
+    D3D10_DSV_DIMENSION_UNKNOWN,
+    D3D10_DSV_DIMENSION_TEXTURE1D,
+    D3D10_DSV_DIMENSION_TEXTURE1DARRAY,
+    D3D10_DSV_DIMENSION_TEXTURE2D,
+    D3D10_DSV_DIMENSION_TEXTURE2DARRAY,
+    D3D10_DSV_DIMENSION_TEXTURE2DMS,
+    D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY,
+} D3D10_DSV_DIMENSION;
+
+typedef struct D3D10_TEX1D_DSV {
+    UINT MipSlice;
+} D3D10_TEX1D_DSV;
+
+typedef struct D3D10_TEX1D_ARRAY_DSV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX1D_ARRAY_DSV;
+
+typedef struct D3D10_TEX2D_DSV {
+    UINT MipSlice;
+} D3D10_TEX2D_DSV;
+
+typedef struct D3D10_TEX2D_ARRAY_DSV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX2D_ARRAY_DSV;
+
+typedef struct D3D10_TEX2DMS_DSV {
+    UINT UnusedField_NothingToDefine;
+} D3D10_TEX2DMS_DSV;
+
+typedef struct D3D10_TEX2DMS_ARRAY_DSV {
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX2DMS_ARRAY_DSV;
+
+typedef struct D3D10_DEPTH_STENCIL_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D10_DSV_DIMENSION ViewDimension;
+    union {
+        D3D10_TEX1D_DSV Texture1D;
+        D3D10_TEX1D_ARRAY_DSV Texture1DArray;
+        D3D10_TEX2D_DSV Texture2D;
+        D3D10_TEX2D_ARRAY_DSV Texture2DArray;
+        D3D10_TEX2DMS_DSV Texture2DMS;
+        D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray;
+    };
+} D3D10_DEPTH_STENCIL_VIEW_DESC;
+
+typedef enum D3D10_RTV_DIMENSION {
+    D3D10_RTV_DIMENSION_UNKNOWN,
+    D3D10_RTV_DIMENSION_BUFFER,
+    D3D10_RTV_DIMENSION_TEXTURE1D,
+    D3D10_RTV_DIMENSION_TEXTURE1DARRAY,
+    D3D10_RTV_DIMENSION_TEXTURE2D,
+    D3D10_RTV_DIMENSION_TEXTURE2DARRAY,
+    D3D10_RTV_DIMENSION_TEXTURE2DMS,
+    D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY,
+    D3D10_RTV_DIMENSION_TEXTURE3D,
+} D3D10_RTV_DIMENSION;
+
+typedef struct D3D10_BUFFER_RTV {
+    UINT ElementOffset;
+    UINT ElementWidth;
+} D3D10_BUFFER_RTV;
+
+typedef struct D3D10_TEX1D_RTV {
+    UINT MipSlice;
+} D3D10_TEX1D_RTV;
+
+typedef struct D3D10_TEX1D_ARRAY_RTV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX1D_ARRAY_RTV;
+
+typedef struct D3D10_TEX2D_RTV {
+    UINT MipSlice;
+} D3D10_TEX2D_RTV;
+
+typedef struct D3D10_TEX2D_ARRAY_RTV {
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX2D_ARRAY_RTV;
+
+typedef struct D3D10_TEX2DMS_RTV {
+    UINT UnusedField_NothingToDefine;
+} D3D10_TEX2DMS_RTV;
+
+typedef struct D3D10_TEX2DMS_ARRAY_RTV {
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX2DMS_ARRAY_RTV;
+
+typedef struct D3D10_TEX3D_RTV {
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D10_TEX3D_RTV;
+
+typedef struct D3D10_RENDER_TARGET_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D10_RTV_DIMENSION ViewDimension;
+    union {
+        D3D10_BUFFER_RTV Buffer;
+        D3D10_TEX1D_RTV Texture1D;
+        D3D10_TEX1D_ARRAY_RTV Texture1DArray;
+        D3D10_TEX2D_RTV Texture2D;
+        D3D10_TEX2D_ARRAY_RTV Texture2DArray;
+        D3D10_TEX2DMS_RTV Texture2DMS;
+        D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray;
+        D3D10_TEX3D_RTV Texture3D;
+    };
+} D3D10_RENDER_TARGET_VIEW_DESC;
+
+typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION;
+
+typedef struct D3D10_BUFFER_SRV {
+    UINT ElementOffset;
+    UINT ElementWidth;
+} D3D10_BUFFER_SRV;
+
+typedef struct D3D10_TEX1D_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D10_TEX1D_SRV;
+
+typedef struct D3D10_TEX1D_ARRAY_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX1D_ARRAY_SRV;
+
+typedef struct D3D10_TEX2D_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D10_TEX2D_SRV;
+
+typedef struct D3D10_TEX2D_ARRAY_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX2D_ARRAY_SRV;
+
+typedef struct D3D10_TEX2DMS_SRV {
+    UINT UnusedField_NothingToDefine;
+} D3D10_TEX2DMS_SRV;
+
+typedef struct D3D10_TEX2DMS_ARRAY_SRV {
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D10_TEX2DMS_ARRAY_SRV;
+
+typedef struct D3D10_TEX3D_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D10_TEX3D_SRV;
+
+typedef struct D3D10_TEXCUBE_SRV {
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D10_TEXCUBE_SRV;
+
+typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC {
+    DXGI_FORMAT Format;
+    D3D10_SRV_DIMENSION ViewDimension;
+    union {
+        D3D10_BUFFER_SRV Buffer;
+        D3D10_TEX1D_SRV Texture1D;
+        D3D10_TEX1D_ARRAY_SRV Texture1DArray;
+        D3D10_TEX2D_SRV Texture2D;
+        D3D10_TEX2D_ARRAY_SRV Texture2DArray;
+        D3D10_TEX2DMS_SRV Texture2DMS;
+        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+        D3D10_TEX3D_SRV Texture3D;
+        D3D10_TEXCUBE_SRV TextureCube;
+    };
+} D3D10_SHADER_RESOURCE_VIEW_DESC;
+
+typedef struct D3D10_BOX {
+    UINT left;
+    UINT top;
+    UINT front;
+    UINT right;
+    UINT bottom;
+    UINT back;
+} D3D10_BOX;
+
+typedef struct D3D10_SUBRESOURCE_DATA {
+    const void *pSysMem;
+    UINT SysMemPitch;
+    UINT SysMemSlicePitch;
+} D3D10_SUBRESOURCE_DATA;
+
+typedef struct D3D10_SO_DECLARATION_ENTRY
+{
+    const char *SemanticName;
+    UINT SemanticIndex;
+    BYTE StartComponent;
+    BYTE ComponentCount;
+    BYTE OutputSlot;
+} D3D10_SO_DECLARATION_ENTRY;
+
+typedef enum D3D10_INPUT_CLASSIFICATION {
+    D3D10_INPUT_PER_VERTEX_DATA,
+    D3D10_INPUT_PER_INSTANCE_DATA,
+} D3D10_INPUT_CLASSIFICATION;
+
+typedef struct D3D10_INPUT_ELEMENT_DESC
+{
+    const char *SemanticName;
+    UINT SemanticIndex;
+    DXGI_FORMAT Format;
+    UINT InputSlot;
+    UINT AlignedByteOffset;
+    D3D10_INPUT_CLASSIFICATION InputSlotClass;
+    UINT InstanceDataStepRate;
+} D3D10_INPUT_ELEMENT_DESC;
+
+typedef enum D3D10_QUERY {
+    D3D10_QUERY_EVENT,
+    D3D10_QUERY_OCCLUSION,
+    D3D10_QUERY_TIMESTAMP,
+    D3D10_QUERY_TIMESTAMP_DISJOINT,
+    D3D10_QUERY_PIPELINE_STATISTICS,
+    D3D10_QUERY_OCCLUSION_PREDICATE,
+    D3D10_QUERY_SO_STATISTICS,
+    D3D10_QUERY_SO_OVERFLOW_PREDICATE,
+} D3D10_QUERY;
+
+typedef struct D3D10_QUERY_DESC {
+    D3D10_QUERY Query;
+    UINT MiscFlags;
+} D3D10_QUERY_DESC;
+
+typedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY;
+
+typedef D3D_PRIMITIVE D3D10_PRIMITIVE;
+
+typedef RECT D3D10_RECT;
+
+typedef struct D3D10_VIEWPORT {
+    INT TopLeftX;
+    INT TopLeftY;
+    UINT Width;
+    UINT Height;
+    FLOAT MinDepth;
+    FLOAT MaxDepth;
+} D3D10_VIEWPORT;
+
+typedef struct D3D10_MAPPED_TEXTURE2D {
+    void *pData;
+    UINT RowPitch;
+} D3D10_MAPPED_TEXTURE2D;
+
+typedef struct D3D10_MAPPED_TEXTURE3D {
+    void *pData;
+    UINT RowPitch;
+    UINT DepthPitch;
+} D3D10_MAPPED_TEXTURE3D;
+
+typedef enum D3D10_CPU_ACCESS_FLAG {
+    D3D10_CPU_ACCESS_WRITE = 0x10000,
+    D3D10_CPU_ACCESS_READ  = 0x20000
+} D3D10_CPU_ACCESS_FLAG;
+
+typedef enum D3D10_RESOURCE_MISC_FLAG {
+    D3D10_RESOURCE_MISC_GENERATE_MIPS      = 0x0001,
+    D3D10_RESOURCE_MISC_SHARED             = 0x0002,
+    D3D10_RESOURCE_MISC_TEXTURECUBE        = 0x0004,
+    D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX  = 0x0010,
+    D3D10_RESOURCE_MISC_GDI_COMPATIBLE     = 0x0020
+} D3D10_RESOURCE_MISC_FLAG;
+
+typedef enum D3D10_MAP_FLAG {
+    D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000,
+} D3D10_MAP_FLAG;
+
+typedef enum D3D10_CLEAR_FLAG {
+    D3D10_CLEAR_DEPTH   = 0x1,
+    D3D10_CLEAR_STENCIL = 0x2
+} D3D10_CLEAR_FLAG;
+
+typedef enum D3D10_COLOR_WRITE_ENABLE {
+    D3D10_COLOR_WRITE_ENABLE_RED   = 0x1,
+    D3D10_COLOR_WRITE_ENABLE_GREEN = 0x2,
+    D3D10_COLOR_WRITE_ENABLE_BLUE  = 0x4,
+    D3D10_COLOR_WRITE_ENABLE_ALPHA = 0x8,
+    D3D10_COLOR_WRITE_ENABLE_ALL   = (D3D10_COLOR_WRITE_ENABLE_RED  | D3D10_COLOR_WRITE_ENABLE_GREEN |
+                                      D3D10_COLOR_WRITE_ENABLE_BLUE | D3D10_COLOR_WRITE_ENABLE_ALPHA)
+} D3D10_COLOR_WRITE_ENABLE;
+
+typedef enum D3D10_TEXTURECUBE_FACE {
+    D3D10_TEXTURECUBE_FACE_POSITIVE_X,
+    D3D10_TEXTURECUBE_FACE_NEGATIVE_X,
+    D3D10_TEXTURECUBE_FACE_POSITIVE_Y,
+    D3D10_TEXTURECUBE_FACE_NEGATIVE_Y,
+    D3D10_TEXTURECUBE_FACE_POSITIVE_Z,
+    D3D10_TEXTURECUBE_FACE_NEGATIVE_Z,
+} D3D10_TEXTURECUBE_FACE;
+
+typedef enum D3D10_ASYNC_GETDATA_FLAG {
+    D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1,
+} D3D10_ASYNC_GETDATA_FLAG;
+
+typedef enum D3D10_FILTER_TYPE {
+    D3D10_FILTER_TYPE_POINT,
+    D3D10_FILTER_TYPE_LINEAR
+} D3D10_FILTER_TYPE;
+
+typedef enum D3D10_QUERY_MISC_FLAG {
+    D3D10_QUERY_MISC_PREDICATEHINT = 0x1
+} D3D10_QUERY_MISC_FLAG;
+
+typedef struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT {
+    UINT64 Frequency;
+    BOOL Disjoint;
+} D3D10_QUERY_DATA_TIMESTAMP_DISJOINT;
+
+typedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS {
+    UINT64 IAVertices;
+    UINT64 IAPrimitives;
+    UINT64 VSInvocations;
+    UINT64 GSInvocations;
+    UINT64 GSPrimitives;
+    UINT64 CInvocations;
+    UINT64 CPrimitives;
+    UINT64 PSInvocations;
+} D3D10_QUERY_DATA_PIPELINE_STATISTICS;
+
+typedef struct D3D10_QUERY_DATA_SO_STATISTICS {
+    UINT64 NumPrimitivesWritten;
+    UINT64 PrimitivesStorageNeeded;
+} D3D10_QUERY_DATA_SO_STATISTICS;
+
+typedef enum D3D10_CREATE_DEVICE_FLAG {
+    D3D10_CREATE_DEVICE_SINGLETHREADED                           = 0x1,
+    D3D10_CREATE_DEVICE_DEBUG                                    = 0x2,
+    D3D10_CREATE_DEVICE_SWITCH_TO_REF                            = 0x4,
+    D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8,
+    D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP                      = 0x10,
+    D3D10_CREATE_DEVICE_BGRA_SUPPORT                             = 0x20,
+    D3D10_CREATE_DEVICE_STRICT_VALIDATION                        = 0x0200
+} D3D10_CREATE_DEVICE_FLAG;
+
+/* Core */
+
+interface ID3D10Device;
+
+[
+    object,
+    local,
+    uuid(9b7e4c00-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10DeviceChild : IUnknown
+{
+        void GetDevice(
+            [out] ID3D10Device **ppDevice);
+        HRESULT GetPrivateData(
+            [in] REFGUID guid,
+            [in, out] UINT *pDataSize,
+            [out] void *pData);
+        HRESULT SetPrivateData(
+            [in] REFGUID guid,
+            [in] UINT DataSize,
+            [in] const void *pData);
+        HRESULT SetPrivateDataInterface(
+            [in] REFGUID guid,
+            [in] const IUnknown *pData);
+}
+
+/* Resource */
+
+[
+    object,
+    local,
+    uuid(9b7e4c01-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Resource : ID3D10DeviceChild
+{
+        void GetType(
+            [out] D3D10_RESOURCE_DIMENSION *rType);
+        void SetEvictionPriority(
+            [in] UINT EvictionPriority);
+        UINT GetEvictionPriority();
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c02-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Buffer : ID3D10Resource
+{
+        HRESULT Map(
+            [in] D3D10_MAP MapType,
+            [in] UINT MapFlags,
+            [out] void **ppData);
+        void Unmap();
+        void GetDesc(
+            [out] D3D10_BUFFER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c03-342c-4106-a19f-4f2704f689F0)
+]
+interface ID3D10Texture1D : ID3D10Resource
+{
+        HRESULT Map(
+            [in] UINT Subresource,
+            [in] D3D10_MAP MapType,
+            [in] UINT MapFlags,
+            [out] void **ppData);
+        void Unmap(
+            [in] UINT Subresource);
+        void GetDesc(
+            [out] D3D10_TEXTURE1D_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c04-342c-4106-a19f-4f2704f689F0)
+]
+interface ID3D10Texture2D : ID3D10Resource
+{
+        HRESULT Map(
+            [in] UINT Subresource,
+            [in] D3D10_MAP MapType,
+            [in] UINT MapFlags,
+            [out] D3D10_MAPPED_TEXTURE2D *pMappedTex2D);
+        void Unmap(
+            [in] UINT Subresource);
+        void GetDesc(
+            [out] D3D10_TEXTURE2D_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c05-342c-4106-a19f-4f2704f689F0)
+]
+interface ID3D10Texture3D : ID3D10Resource
+{
+        HRESULT Map(
+            [in] UINT Subresource,
+            [in] D3D10_MAP MapType,
+            [in] UINT MapFlags,
+            [out] D3D10_MAPPED_TEXTURE3D *pMappedTex3D);
+        void Unmap(
+            [in] UINT Subresource);
+        void GetDesc(
+            [out] D3D10_TEXTURE3D_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(c902b03f-60a7-49ba-9936-2a3ab37a7e33)
+]
+interface ID3D10View : ID3D10DeviceChild
+{
+        void GetResource(
+            [out] ID3D10Resource **ppResource);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c09-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10DepthStencilView : ID3D10View
+{
+        void GetDesc(
+            [out] D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc);
+}
+
+
+[
+    object,
+    local,
+    uuid(9b7e4c08-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10RenderTargetView : ID3D10View
+{
+        void GetDesc(
+            [out] D3D10_RENDER_TARGET_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c07-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10ShaderResourceView  : ID3D10View
+{
+        void GetDesc(
+            [out] D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc);
+}
+
+/* Resource End */
+
+[
+    object,
+    local,
+    uuid(edad8d19-8a35-4d6d-8566-2ea276cde161)
+]
+interface ID3D10BlendState : ID3D10DeviceChild
+{
+    void GetDesc(
+            [out] D3D10_BLEND_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(2b4b1cc8-a4ad-41f8-8322-ca86fc3ec675)
+]
+interface ID3D10DepthStencilState : ID3D10DeviceChild
+{
+    void GetDesc(
+            [out] D3D10_DEPTH_STENCIL_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(6316be88-54cd-4040-ab44-20461bc81f68)
+]
+interface ID3D10GeometryShader  : ID3D10DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c0b-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10InputLayout  : ID3D10DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(4968b601-9d00-4cde-8346-8e7f675819b6)
+]
+interface ID3D10PixelShader  : ID3D10DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(a2a07292-89af-4345-be2e-c53d9fbb6e9f)
+]
+interface ID3D10RasterizerState  : ID3D10DeviceChild
+{
+    void GetDesc(
+            [out] D3D10_RASTERIZER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c0c-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10SamplerState  : ID3D10DeviceChild
+{
+    void GetDesc(
+            [out] D3D10_SAMPLER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c0a-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10VertexShader  : ID3D10DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c0d-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Asynchronous  : ID3D10DeviceChild
+{
+    void Begin();
+    void End();
+    HRESULT GetData(
+            [out] void *pData,
+            [in] UINT DataSize,
+            [in] UINT GetDataFlags);
+    UINT GetDataSize();
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c11-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Counter  : ID3D10Asynchronous
+{
+    void GetDesc(
+            [out] D3D10_COUNTER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4C0e-342C-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Query : ID3D10Asynchronous
+{
+    void GetDesc(
+            [out] D3D10_QUERY_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c10-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Predicate : ID3D10Query
+{
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4c0f-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Device : IUnknown
+{
+        void VSSetConstantBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [in] ID3D10Buffer *const *ppConstantBuffers);
+        void PSSetShaderResources(
+            [in] UINT StartSlot,
+            [in] UINT NumViews,
+            [in] ID3D10ShaderResourceView *const *ppShaderResourceViews);
+        void PSSetShader(
+            [in] ID3D10PixelShader *pPixelShader);
+        void PSSetSamplers(
+            [in] UINT StartSlot,
+            [in] UINT NumSamplers,
+            [in]ID3D10SamplerState *const *ppSamplers);
+        void VSSetShader(
+            [in] ID3D10VertexShader *pVertexShader);
+        void DrawIndexed(
+            [in] UINT IndexCount,
+            [in] UINT StartIndexLocation,
+            [in] INT BaseVertexLocation);
+        void Draw(
+            [in] UINT VertexCount,
+            [in] UINT StartVertexLocation);
+        void PSSetConstantBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [in] ID3D10Buffer *const *ppConstantBuffers);
+        void IASetInputLayout(
+            [in] ID3D10InputLayout *pInputLayout);
+        void IASetVertexBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [in] ID3D10Buffer *const *ppVertexBuffers,
+            [in] const UINT *pStrides,
+            [in] const UINT *pOffsets);
+        void IASetIndexBuffer(
+            [in] ID3D10Buffer *pIndexBuffer,
+            [in] DXGI_FORMAT Format,
+            [in] UINT Offset);
+        void DrawIndexedInstanced(
+            [in] UINT IndexCountPerInstance,
+            [in] UINT InstanceCount,
+            [in] UINT StartIndexLocation,
+            [in] INT BaseVertexLocation,
+            [in] UINT StartInstanceLocation);
+        void DrawInstanced(
+            [in] UINT VertexCountPerInstance,
+            [in] UINT InstanceCount,
+            [in] UINT StartVertexLocation,
+            [in] UINT StartInstanceLocation);
+        void GSSetConstantBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [in] ID3D10Buffer *const *ppConstantBuffers);
+        void GSSetShader(
+            [in] ID3D10GeometryShader *pShader);
+        void IASetPrimitiveTopology(
+            [in] D3D10_PRIMITIVE_TOPOLOGY Topology);
+        void VSSetShaderResources(
+            [in] UINT StartSlot,
+            [in] UINT NumViews,
+            [in] ID3D10ShaderResourceView *const *ppShaderResourceViews);
+        void VSSetSamplers(
+            [in] UINT StartSlot,
+            [in] UINT NumSamplers,
+            [in] ID3D10SamplerState *const *ppSamplers);
+        void SetPredication(
+            [in] ID3D10Predicate *pPredicate,
+            [in] BOOL PredicateValue);
+        void GSSetShaderResources(
+            [in] UINT StartSlot,
+            [in] UINT NumViews,
+            [in] ID3D10ShaderResourceView * const *ppShaderResourceViews);
+        void GSSetSamplers(
+            [in] UINT StartSlot,
+            [in] UINT NumSamplers,
+            [in] ID3D10SamplerState *const *ppSamplers);
+        void OMSetRenderTargets(
+            [in] UINT NumViews,
+            [in] ID3D10RenderTargetView *const *ppRenderTargetViews,
+            [in] ID3D10DepthStencilView *pDepthStencilView);
+        void OMSetBlendState(
+            [in] ID3D10BlendState *pBlendState,
+            [in] const FLOAT BlendFactor[4],
+            [in] UINT SampleMask);
+        void OMSetDepthStencilState(
+            [in] ID3D10DepthStencilState *pDepthStencilState,
+            [in] UINT StencilRef);
+        void SOSetTargets(
+            [in] UINT NumBuffers,
+            [in] ID3D10Buffer *const *ppSOTargets,
+            [in] const UINT *pOffsets);
+        void DrawAuto();
+        void RSSetState(
+            [in] ID3D10RasterizerState *pRasterizerState);
+        void RSSetViewports(
+            [in] UINT NumViewports,
+            [in] const D3D10_VIEWPORT *pViewports);
+        void RSSetScissorRects(
+            [in] UINT NumRects,
+            [in] const D3D10_RECT *pRects);
+        void CopySubresourceRegion(
+            [in] ID3D10Resource *pDstResource,
+            [in] UINT DstSubresource,
+            [in] UINT DstX,
+            [in] UINT DstY,
+            [in] UINT DstZ,
+            [in] ID3D10Resource *pSrcResource,
+            [in] UINT SrcSubresource,
+            [in] const D3D10_BOX *pSrcBox);
+        void CopyResource(
+            [in] ID3D10Resource *pDstResource,
+            [in] ID3D10Resource *pSrcResource);
+        void UpdateSubresource(
+            [in] ID3D10Resource *pDstResource,
+            [in] UINT DstSubresource,
+            [in] const D3D10_BOX *pDstBox,
+            [in] const void *pSrcData,
+            [in] UINT SrcRowPitch,
+            [in] UINT SrcDepthPitch);
+        void ClearRenderTargetView(
+            [in] ID3D10RenderTargetView *pRenderTargetView,
+            [in] const FLOAT ColorRGBA[4]);
+        void ClearDepthStencilView(
+            [in] ID3D10DepthStencilView *pDepthStencilView,
+            [in] UINT ClearFlags,
+            [in] FLOAT Depth,
+            [in] UINT8 Stencil);
+        void GenerateMips(
+            [in] ID3D10ShaderResourceView *pShaderResourceView);
+        void ResolveSubresource(
+            [in] ID3D10Resource *pDstResource,
+            [in] UINT DstSubresource,
+            [in] ID3D10Resource *pSrcResource,
+            [in] UINT SrcSubresource,
+            [in] DXGI_FORMAT Format);
+        void VSGetConstantBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [out] ID3D10Buffer **ppConstantBuffers);
+        void PSGetShaderResources(
+            [in] UINT StartSlot,
+            [in] UINT NumViews,
+            [out] ID3D10ShaderResourceView **ppShaderResourceViews);
+        void PSGetShader(
+            [out] ID3D10PixelShader **ppPixelShader);
+        void PSGetSamplers(
+            [in] UINT StartSlot,
+            [in] UINT NumSamplers,
+            [out] ID3D10SamplerState **ppSamplers);
+        void VSGetShader(
+            [out] ID3D10VertexShader **ppVertexShader);
+        void PSGetConstantBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [out] ID3D10Buffer **ppConstantBuffers);
+        void IAGetInputLayout(
+            [out] ID3D10InputLayout **ppInputLayout);
+        void IAGetVertexBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [out] ID3D10Buffer **ppVertexBuffers,
+            [out] UINT *pStrides,
+            [out] UINT *pOffsets);
+        void IAGetIndexBuffer(
+            [out] ID3D10Buffer **pIndexBuffer,
+            [out] DXGI_FORMAT *Format,
+            [out] UINT *Offset);
+        void GSGetConstantBuffers(
+            [in] UINT StartSlot,
+            [in] UINT NumBuffers,
+            [out] ID3D10Buffer **ppConstantBuffers);
+        void GSGetShader(
+            [out] ID3D10GeometryShader **ppGeometryShader);
+        void IAGetPrimitiveTopology(
+            [out] D3D10_PRIMITIVE_TOPOLOGY *pTopology);
+        void VSGetShaderResources(
+            [in] UINT StartSlot,
+            [in] UINT NumViews,
+            [out] ID3D10ShaderResourceView **ppShaderResourceViews);
+        void VSGetSamplers(
+            [in] UINT StartSlot,
+            [in] UINT NumSamplers,
+            [out] ID3D10SamplerState **ppSamplers);
+        void GetPredication(
+            [out] ID3D10Predicate **ppPredicate,
+            [out] BOOL *pPredicateValue);
+        void GSGetShaderResources(
+            [in] UINT StartSlot,
+            [in] UINT NumViews,
+            [out] ID3D10ShaderResourceView **ppShaderResourceViews);
+        void GSGetSamplers(
+            [in] UINT StartSlot,
+            [in] UINT NumSamplers,
+            [out] ID3D10SamplerState **ppSamplers);
+        void OMGetRenderTargets(
+            [in] UINT NumViews,
+            [out] ID3D10RenderTargetView **ppRenderTargetViews,
+            [out] ID3D10DepthStencilView **ppDepthStencilView);
+        void OMGetBlendState(
+            [out] ID3D10BlendState **ppBlendState,
+            [out] FLOAT BlendFactor[4],
+            [out] UINT *pSampleMask);
+        void OMGetDepthStencilState(
+            [out] ID3D10DepthStencilState **ppDepthStencilState,
+            [out] UINT *pStencilRef);
+        void SOGetTargets(
+            [in] UINT NumBuffers,
+            [out] ID3D10Buffer **ppSOTargets,
+            [out] UINT *pOffsets);
+        void RSGetState(
+            [out] ID3D10RasterizerState **ppRasterizerState);
+        void RSGetViewports(
+            [in, out] UINT *NumViewports,
+            [out] D3D10_VIEWPORT *pViewports);
+        void RSGetScissorRects(
+            [in, out] UINT *NumRects,
+            [out] D3D10_RECT *pRects);
+        HRESULT GetDeviceRemovedReason();
+        HRESULT SetExceptionMode(
+            [in] UINT RaiseFlags);
+        UINT GetExceptionMode();
+        HRESULT GetPrivateData(
+            [in] REFGUID guid,
+            [in, out] UINT *pDataSize,
+            [out] void *pData);
+        HRESULT SetPrivateData(
+            [in] REFGUID guid,
+            [in] UINT DataSize,
+            [in] const void *pData);
+        HRESULT SetPrivateDataInterface(
+            [in] REFGUID guid,
+            [in] const IUnknown *pData);
+        void ClearState();
+        void Flush();
+        HRESULT CreateBuffer(
+            [in] const D3D10_BUFFER_DESC *pDesc,
+            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+            [out] ID3D10Buffer **ppBuffer);
+        HRESULT CreateTexture1D(
+            [in] const D3D10_TEXTURE1D_DESC *pDesc,
+            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+            [out] ID3D10Texture1D **ppTexture1D);
+        HRESULT CreateTexture2D(
+            [in] const D3D10_TEXTURE2D_DESC *pDesc,
+            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+            [out] ID3D10Texture2D **ppTexture2D);
+        HRESULT CreateTexture3D(
+            [in] const D3D10_TEXTURE3D_DESC *pDesc,
+            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+            [out] ID3D10Texture3D **ppTexture3D);
+        HRESULT CreateShaderResourceView(
+            [in] ID3D10Resource *pResource,
+            [in] const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,
+            [out] ID3D10ShaderResourceView **ppSRView);
+        HRESULT CreateRenderTargetView(
+            [in] ID3D10Resource *pResource,
+            [in] const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,
+            [out] ID3D10RenderTargetView **ppRTView);
+        HRESULT CreateDepthStencilView(
+            [in] ID3D10Resource *pResource,
+            [in] const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,
+            [out] ID3D10DepthStencilView **ppDepthStencilView);
+        HRESULT CreateInputLayout(
+            [in] const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,
+            [in] UINT NumElements,
+            [in] const void *pShaderBytecodeWithInputSignature,
+            [in] SIZE_T BytecodeLength,
+            [out] ID3D10InputLayout **ppInputLayout);
+        HRESULT CreateVertexShader(
+            [in] const void *pShaderBytecode,
+            [in] SIZE_T BytecodeLength,
+            [out] ID3D10VertexShader **ppVertexShader);
+        HRESULT CreateGeometryShader(
+            [in] const void *pShaderBytecode,
+            [in] SIZE_T BytecodeLength,
+            [out] ID3D10GeometryShader **ppGeometryShader);
+        HRESULT CreateGeometryShaderWithStreamOutput(
+            [in] const void *pShaderBytecode,
+            [in] SIZE_T BytecodeLength,
+            [in] const D3D10_SO_DECLARATION_ENTRY *pSODeclaration,
+            [in] UINT NumEntries,
+            [in] UINT OutputStreamStride,
+            [out] ID3D10GeometryShader **ppGeometryShader);
+        HRESULT CreatePixelShader(
+            [in] const void *pShaderBytecode,
+            [in] SIZE_T BytecodeLength,
+            [out] ID3D10PixelShader **ppPixelShader);
+        HRESULT CreateBlendState(
+            [in] const D3D10_BLEND_DESC *pBlendStateDesc,
+            [out] ID3D10BlendState **ppBlendState);
+        HRESULT CreateDepthStencilState(
+            [in] const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc,
+            [out] ID3D10DepthStencilState **ppDepthStencilState);
+        HRESULT CreateRasterizerState(
+            [in] const D3D10_RASTERIZER_DESC *pRasterizerDesc,
+            [out] ID3D10RasterizerState **ppRasterizerState);
+        HRESULT CreateSamplerState(
+            [in] const D3D10_SAMPLER_DESC *pSamplerDesc,
+            [out] ID3D10SamplerState **ppSamplerState);
+        HRESULT CreateQuery(
+            [in] const D3D10_QUERY_DESC *pQueryDesc,
+            [out] ID3D10Query **ppQuery);
+        HRESULT CreatePredicate(
+            [in] const D3D10_QUERY_DESC *pPredicateDesc,
+            [out] ID3D10Predicate **ppPredicate);
+        HRESULT CreateCounter(
+            [in] const D3D10_COUNTER_DESC *pCounterDesc,
+            [out] ID3D10Counter **ppCounter);
+        HRESULT CheckFormatSupport(
+            [in] DXGI_FORMAT Format,
+            [out] UINT *pFormatSupport);
+        HRESULT CheckMultisampleQualityLevels(
+            [in] DXGI_FORMAT Format,
+            [in] UINT SampleCount,
+            [out] UINT *pNumQualityLevels);
+        void CheckCounterInfo(
+            [out] D3D10_COUNTER_INFO *pCounterInfo);
+        HRESULT CheckCounter(
+            [in] const D3D10_COUNTER_DESC *pDesc,
+            [out] D3D10_COUNTER_TYPE *pType,
+            [out] UINT *pActiveCounters,
+            [out] char *name,
+            [in, out] UINT *pNameLength,
+            [out] char *units,
+            [in, out] UINT *pUnitsLength,
+            [out] char *description,
+            [in, out] UINT *pDescriptionLength);
+        UINT GetCreationFlags();
+        HRESULT OpenSharedResource(
+            [in] HANDLE hResource,
+            [in] REFIID ReturnedInterface,
+            [out] void **ppResource);
+        void SetTextFilterSize(
+            [in] UINT Width,
+            [in] UINT Height);
+        void GetTextFilterSize(
+            [out] UINT *pWidth,
+            [out] UINT *pHeight);
+}
+
+[
+    object,
+    local,
+    uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Multithread : IUnknown
+{
+        void Enter();
+        void Leave();
+        BOOL SetMultithreadProtected(
+            [in] BOOL bMTProtect);
+        BOOL GetMultithreadProtected();
+}
+
+cpp_quote("#ifndef D3D10_IGNORE_SDK_LAYERS")
+cpp_quote("/* FIXME: # include <d3d10sdklayers.h> */")
+cpp_quote("#endif")
+cpp_quote("#include \"d3d10misc.h\"")
+cpp_quote("#include \"d3d10shader.h\"")
+cpp_quote("#include \"d3d10effect.h\"")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl
new file mode 100644
index 0000000..fe18b05
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2010 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+import "d3d10.idl";
+cpp_quote("#include <d3d10_1shader.h>")
+
+const UINT D3D10_1_SHADER_MAJOR_VERSION = 4;
+const UINT D3D10_1_SHADER_MINOR_VERSION = 1;
+
+typedef enum D3D10_FEATURE_LEVEL1
+{
+    D3D10_FEATURE_LEVEL_10_0  = 0xa000,
+    D3D10_FEATURE_LEVEL_10_1  = 0xa100,
+    D3D10_FEATURE_LEVEL_9_1   = 0x9100,
+    D3D10_FEATURE_LEVEL_9_2   = 0x9200,
+    D3D10_FEATURE_LEVEL_9_3   = 0x9300
+} D3D10_FEATURE_LEVEL1;
+
+typedef struct D3D10_RENDER_TARGET_BLEND_DESC1
+{
+    BOOL BlendEnable;
+    D3D10_BLEND SrcBlend;
+    D3D10_BLEND DestBlend;
+    D3D10_BLEND_OP BlendOp;
+    D3D10_BLEND SrcBlendAlpha;
+    D3D10_BLEND DestBlendAlpha;
+    D3D10_BLEND_OP BlendOpAlpha;
+    UINT8 RenderTargetWriteMask;
+} D3D10_RENDER_TARGET_BLEND_DESC1;
+
+typedef struct D3D10_BLEND_DESC1
+{
+    BOOL AlphaToCoverageEnable;
+    BOOL IndependentBlendEnable;
+    D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
+} D3D10_BLEND_DESC1;
+
+[
+    uuid(edad8d99-8a35-4d6d-8566-2ea276cde161),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D10BlendState1 : ID3D10BlendState
+{
+    void GetDesc1([out] D3D10_BLEND_DESC1 *pDesc);
+}
+
+typedef struct D3D10_TEXCUBE_ARRAY_SRV1
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT First2DArrayFace;
+    UINT NumCubes;
+} D3D10_TEXCUBE_ARRAY_SRV1;
+
+typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1;
+
+typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1
+{
+    DXGI_FORMAT Format;
+    D3D10_SRV_DIMENSION1  ViewDimension;
+    union {
+        D3D10_BUFFER_SRV Buffer;
+        D3D10_TEX1D_SRV Texture1D;
+        D3D10_TEX1D_ARRAY_SRV Texture1DArray;
+        D3D10_TEX2D_SRV Texture2D;
+        D3D10_TEX2D_ARRAY_SRV Texture2DArray;
+        D3D10_TEX2DMS_SRV Texture2DMS;
+        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+        D3D10_TEX3D_SRV Texture3D;
+        D3D10_TEXCUBE_SRV TextureCube;
+        D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray;
+    };
+} D3D10_SHADER_RESOURCE_VIEW_DESC1;
+
+[
+    uuid(9b7e4c87-342c-4106-a19f-4f2704f689f0),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D10ShaderResourceView1 : ID3D10ShaderResourceView
+{
+    void GetDesc1([out] D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc);
+}
+
+[
+    uuid(9b7e4c8f-342c-4106-a19f-4f2704f689f0),
+    object,
+    local,
+    pointer_default(unique)
+]
+interface ID3D10Device1 : ID3D10Device
+{
+    HRESULT CreateShaderResourceView1(
+            [in] ID3D10Resource *pResource,
+            [in, out] const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc,
+            [out] ID3D10ShaderResourceView1 **ppSRView);
+
+    HRESULT CreateBlendState1(
+            [in] const D3D10_BLEND_DESC1 *pBlendStateDesc,
+            [out] ID3D10BlendState1 **ppBlendState);
+
+    D3D10_FEATURE_LEVEL1 GetFeatureLevel();
+}
+
+const UINT D3D10_1_SDK_VERSION = 0x20;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h
new file mode 100644
index 0000000..f011425
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2010 Rico Schüller
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3D10_1SHADER_H__
+#define __D3D10_1SHADER_H__
+
+#include "d3d10shader.h"
+
+DEFINE_GUID(IID_ID3D10ShaderReflection1, 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47);
+
+#define INTERFACE ID3D10ShaderReflection1
+DECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown)
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /* ID3D10ShaderReflection1 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;
+    STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;
+    STDMETHOD(GetMovInstructionCount)(THIS_ UINT *count) PURE;
+    STDMETHOD(GetMovcInstructionCount)(THIS_ UINT *count) PURE;
+    STDMETHOD(GetConversionInstructionCount)(THIS_ UINT *count) PURE;
+    STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT *count) PURE;
+    STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE *prim) PURE;
+    STDMETHOD(IsLevel9Shader)(THIS_ BOOL *level9shader) PURE;
+    STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL *samplefrequency) PURE;
+};
+#undef INTERFACE
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h
new file mode 100644
index 0000000..5176168
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h
@@ -0,0 +1,866 @@
+/*
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D10EFFECT_H
+#define __WINE_D3D10EFFECT_H
+
+#include "d3d10.h"
+
+#define D3D10_EFFECT_VARIABLE_POOLED                0x1
+#define D3D10_EFFECT_VARIABLE_ANNOTATION            0x2
+#define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT   0x4
+
+#ifndef D3D10_BYTES_FROM_BITS
+#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)
+#endif
+
+typedef enum _D3D10_DEVICE_STATE_TYPES
+{
+    D3D10_DST_SO_BUFFERS = 1,
+    D3D10_DST_OM_RENDER_TARGETS,
+    D3D10_DST_DEPTH_STENCIL_STATE,
+    D3D10_DST_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
+{
+    struct ID3D10EffectShaderVariable *pShaderVariable;
+    UINT ShaderIndex;
+} D3D10_PASS_SHADER_DESC;
+
+#define D3D10_EFFECT_COMPILE_CHILD_EFFECT    0x0001
+#define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS  0x0002
+#define D3D10_EFFECT_SINGLE_THREADED         0x0008
+
+DEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x00, 0x18, 0x0b, 0x9b, 0x88, 0xfd);
+
+#define INTERFACE ID3D10EffectType
+DECLARE_INTERFACE(ID3D10EffectType)
+{
+    STDMETHOD_(BOOL, 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;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b);
+
+#define INTERFACE ID3D10EffectVariable
+DECLARE_INTERFACE(ID3D10EffectVariable)
+{
+    STDMETHOD_(BOOL, 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;
+};
+#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_(BOOL, 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_(BOOL, 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_ BOOL value) PURE;
+    STDMETHOD(GetBool)(THIS_ BOOL *value) PURE;
+    STDMETHOD(SetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;
+    STDMETHOD(GetBoolArray)(THIS_ BOOL *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_(BOOL, 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_ BOOL *value) PURE;
+    STDMETHOD(SetIntVector)(THIS_ int *value) PURE;
+    STDMETHOD(SetFloatVector)(THIS_ float *value) PURE;
+    STDMETHOD(GetBoolVector)(THIS_ BOOL *value) PURE;
+    STDMETHOD(GetIntVector)(THIS_ int *value) PURE;
+    STDMETHOD(GetFloatVector)(THIS_ float *value) PURE;
+    STDMETHOD(SetBoolVectorArray)(THIS_ BOOL *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_ BOOL *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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, 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_(BOOL, IsValid)(THIS) PURE;
+    STDMETHOD_(BOOL, 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_(BOOL, 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_(BOOL, 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" {
+#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 D3D10CreateStateBlock(ID3D10Device *device,
+        D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock);
+
+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);
+BOOL 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);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3D10EFFECT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h
new file mode 100644
index 0000000..a9c6441
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2008 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3D10MISC_H__
+#define __D3D10MISC_H__
+
+#include "d3d10.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum D3D10_DRIVER_TYPE {
+    D3D10_DRIVER_TYPE_HARDWARE  = 0,
+    D3D10_DRIVER_TYPE_REFERENCE = 1,
+    D3D10_DRIVER_TYPE_NULL      = 2,
+    D3D10_DRIVER_TYPE_SOFTWARE  = 3,
+} D3D10_DRIVER_TYPE;
+
+HRESULT WINAPI D3D10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
+        HMODULE swrast, UINT flags, UINT sdk_version, ID3D10Device **device);
+
+HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
+        HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc,
+        IDXGISwapChain **swapchain, ID3D10Device **device);
+
+HRESULT WINAPI D3D10CreateBlob(SIZE_T data_size, ID3D10Blob **blob);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3D10MISC_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h
new file mode 100644
index 0000000..5b3435e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h
@@ -0,0 +1,242 @@
+/*
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D10SHADER_H
+#define __WINE_D3D10SHADER_H
+
+#include "d3d10.h"
+
+#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
+
+#define D3D10_SHADER_OPTIMIZATION_LEVEL0            0x4000
+#define D3D10_SHADER_OPTIMIZATION_LEVEL1            0x0000
+#define D3D10_SHADER_OPTIMIZATION_LEVEL2            0xC000
+#define D3D10_SHADER_OPTIMIZATION_LEVEL3            0x8000
+
+/* These are defined as version-neutral in d3dcommon.h */
+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
+{
+    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;
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd);
+
+#define INTERFACE ID3D10ShaderReflectionType
+DECLARE_INTERFACE(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;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1);
+
+#define INTERFACE ID3D10ShaderReflectionVariable
+DECLARE_INTERFACE(ID3D10ShaderReflectionVariable)
+{
+    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *desc) PURE;
+    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetType)(THIS) PURE;
+};
+#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" {
+#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,
+        BOOL 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);
+
+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);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3D10SHADER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl
new file mode 100644
index 0000000..41c9248
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl
@@ -0,0 +1,2010 @@
+/*
+ * Copyright 2010 Rico Schüller
+ * Copyright 2013 Austin English
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgi.idl";
+import "d3dcommon.idl";
+
+typedef D3D_PRIMITIVE D3D11_PRIMITIVE;
+typedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY;
+typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;
+typedef RECT D3D11_RECT;
+
+const UINT D3D11_DEFAULT_DEPTH_BIAS          = 0;
+cpp_quote("#define D3D11_DEFAULT_DEPTH_BIAS_CLAMP 0.0f")
+const UINT D3D11_DEFAULT_MAX_ANISOTROPY      = 16;
+cpp_quote("#define D3D11_DEFAULT_MIP_LOD_BIAS 0.0f")
+const UINT D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;
+const UINT D3D11_DEFAULT_SAMPLE_MASK         = 0xffffffff;
+const UINT D3D11_DEFAULT_SCISSOR_ENDX        = 0;
+const UINT D3D11_DEFAULT_SCISSOR_ENDY        = 0;
+const UINT D3D11_DEFAULT_SCISSOR_STARTX      = 0;
+const UINT D3D11_DEFAULT_SCISSOR_STARTY      = 0;
+cpp_quote("#define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS 0.0f")
+const UINT D3D11_DEFAULT_STENCIL_READ_MASK   = 0xff;
+const UINT D3D11_DEFAULT_STENCIL_REFERENCE   = 0;
+const UINT D3D11_DEFAULT_STENCIL_WRITE_MASK  = 0xff;
+const UINT D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;
+const UINT D3D11_DEFAULT_VIEWPORT_HEIGHT     = 0;
+cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH 0.0f")
+cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH 0.0f")
+const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTX   = 0;
+const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTY   = 0;
+const UINT D3D11_DEFAULT_VIEWPORT_WIDTH      = 0;
+
+cpp_quote("#define D3D11_FLOAT32_MAX         (3.402823466e+38f)")
+
+const unsigned int D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
+
+const UINT D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384;
+const UINT D3D11_MAX_MAXANISOTROPY           = 16;
+const UINT D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
+const UINT D3D11_VIEWPORT_BOUNDS_MAX         = 32767;
+const INT D3D11_VIEWPORT_BOUNDS_MIN          = -32768;
+const UINT D3D11_SHADER_MAJOR_VERSION        = 5;
+const UINT D3D11_SHADER_MAX_INSTANCES        = 65535;
+const UINT D3D11_SHADER_MAX_INTERFACES       = 253;
+const UINT D3D11_SHADER_MAX_INTERFACE_CALL_SITES = 4096;
+const UINT D3D11_SHADER_MAX_TYPES            = 65535;
+const UINT D3D11_SHADER_MINOR_VERSION        = 0;
+const UINT D3D11_VS_OUTPUT_REGISTER_COUNT    = 32;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_DEFAULT {};")
+cpp_quote("extern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT;")
+cpp_quote("#endif")
+
+typedef enum D3D11_BLEND
+{
+    D3D11_BLEND_ZERO = 1,
+    D3D11_BLEND_ONE = 2,
+    D3D11_BLEND_SRC_COLOR = 3,
+    D3D11_BLEND_INV_SRC_COLOR = 4,
+    D3D11_BLEND_SRC_ALPHA = 5,
+    D3D11_BLEND_INV_SRC_ALPHA = 6,
+    D3D11_BLEND_DEST_ALPHA = 7,
+    D3D11_BLEND_INV_DEST_ALPHA = 8,
+    D3D11_BLEND_DEST_COLOR = 9,
+    D3D11_BLEND_INV_DEST_COLOR = 10,
+    D3D11_BLEND_SRC_ALPHA_SAT = 11,
+    D3D11_BLEND_BLEND_FACTOR = 14,
+    D3D11_BLEND_INV_BLEND_FACTOR = 15,
+    D3D11_BLEND_SRC1_COLOR = 16,
+    D3D11_BLEND_INV_SRC1_COLOR = 17,
+    D3D11_BLEND_SRC1_ALPHA = 18,
+    D3D11_BLEND_INV_SRC1_ALPHA = 19,
+} D3D11_BLEND;
+
+typedef enum D3D11_BLEND_OP
+{
+    D3D11_BLEND_OP_ADD = 1,
+    D3D11_BLEND_OP_SUBTRACT,
+    D3D11_BLEND_OP_REV_SUBTRACT,
+    D3D11_BLEND_OP_MIN,
+    D3D11_BLEND_OP_MAX
+} D3D11_BLEND_OP;
+
+typedef struct D3D11_BOX
+{
+    UINT left;
+    UINT top;
+    UINT front;
+    UINT right;
+    UINT bottom;
+    UINT back;
+} D3D11_BOX;
+
+typedef struct D3D11_BUFFER_RTV
+{
+    union
+    {
+        UINT FirstElement;
+        UINT ElementOffset;
+    };
+    union
+    {
+        UINT NumElements;
+        UINT ElementWidth;
+    };
+} D3D11_BUFFER_RTV;
+
+typedef struct D3D11_BUFFER_SRV
+{
+    union
+    {
+        UINT FirstElement;
+        UINT ElementOffset;
+    };
+    union
+    {
+        UINT NumElements;
+        UINT ElementWidth;
+    };
+} D3D11_BUFFER_SRV;
+
+typedef struct D3D11_BUFFER_UAV
+{
+    UINT FirstElement;
+    UINT NumElements;
+    UINT Flags;
+} D3D11_BUFFER_UAV;
+
+typedef struct D3D11_BUFFEREX_SRV
+{
+    UINT FirstElement;
+    UINT NumElements;
+    UINT Flags;
+} D3D11_BUFFEREX_SRV;
+
+typedef struct D3D11_CLASS_INSTANCE_DESC
+{
+    UINT InstanceId;
+    UINT InstanceIndex;
+    UINT TypeId;
+    UINT ConstantBuffer;
+    UINT BaseConstantBufferOffset;
+    UINT BaseTexture;
+    UINT BaseSampler;
+    BOOL Created;
+} D3D11_CLASS_INSTANCE_DESC;
+
+typedef enum D3D11_COMPARISON_FUNC
+{
+    D3D11_COMPARISON_NEVER = 1,
+    D3D11_COMPARISON_LESS,
+    D3D11_COMPARISON_EQUAL,
+    D3D11_COMPARISON_LESS_EQUAL,
+    D3D11_COMPARISON_GREATER,
+    D3D11_COMPARISON_NOT_EQUAL,
+    D3D11_COMPARISON_GREATER_EQUAL,
+    D3D11_COMPARISON_ALWAYS
+} D3D11_COMPARISON_FUNC;
+
+typedef enum D3D11_COUNTER
+{
+    D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000,
+} D3D11_COUNTER;
+
+typedef struct D3D11_COUNTER_DESC
+{
+    D3D11_COUNTER Counter;
+    UINT MiscFlags;
+} D3D11_COUNTER_DESC;
+
+typedef struct D3D11_COUNTER_INFO
+{
+    D3D11_COUNTER LastDeviceDependentCounter;
+    UINT NumSimultaneousCounters;
+    UINT8 NumDetectableParallelUnits;
+} D3D11_COUNTER_INFO;
+
+typedef enum D3D11_COUNTER_TYPE
+{
+    D3D11_COUNTER_TYPE_FLOAT32,
+    D3D11_COUNTER_TYPE_UINT16,
+    D3D11_COUNTER_TYPE_UINT32,
+    D3D11_COUNTER_TYPE_UINT64,
+} D3D11_COUNTER_TYPE;
+
+typedef enum D3D11_CULL_MODE
+{
+    D3D11_CULL_NONE = 1,
+    D3D11_CULL_FRONT,
+    D3D11_CULL_BACK
+} D3D11_CULL_MODE;
+
+typedef enum D3D11_DEPTH_WRITE_MASK
+{
+    D3D11_DEPTH_WRITE_MASK_ZERO,
+    D3D11_DEPTH_WRITE_MASK_ALL,
+} D3D11_DEPTH_WRITE_MASK;
+
+typedef enum D3D11_DEVICE_CONTEXT_TYPE
+{
+    D3D11_DEVICE_CONTEXT_IMMEDIATE,
+    D3D11_DEVICE_CONTEXT_DEFERRED,
+} D3D11_DEVICE_CONTEXT_TYPE;
+
+typedef enum D3D11_DSV_DIMENSION
+{
+    D3D11_DSV_DIMENSION_UNKNOWN,
+    D3D11_DSV_DIMENSION_TEXTURE1D,
+    D3D11_DSV_DIMENSION_TEXTURE1DARRAY,
+    D3D11_DSV_DIMENSION_TEXTURE2D,
+    D3D11_DSV_DIMENSION_TEXTURE2DARRAY,
+    D3D11_DSV_DIMENSION_TEXTURE2DMS,
+    D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY,
+} D3D11_DSV_DIMENSION;
+
+typedef enum D3D11_FEATURE
+{
+    D3D11_FEATURE_THREADING,
+    D3D11_FEATURE_DOUBLES,
+    D3D11_FEATURE_FORMAT_SUPPORT,
+    D3D11_FEATURE_FORMAT_SUPPORT2,
+    D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS,
+} D3D11_FEATURE;
+
+typedef enum D3D11_FILL_MODE
+{
+    D3D11_FILL_WIREFRAME = 2,
+    D3D11_FILL_SOLID
+} D3D11_FILL_MODE;
+
+typedef enum D3D11_FILTER_TYPE
+{
+    D3D11_FILTER_TYPE_POINT  = 0,
+    D3D11_FILTER_TYPE_LINEAR = 1
+} D3D11_FILTER_TYPE;
+
+const UINT D3D11_MIN_FILTER_SHIFT = 4;
+const UINT D3D11_MAG_FILTER_SHIFT = 2;
+const UINT D3D11_MIP_FILTER_SHIFT = 0;
+const UINT D3D11_FILTER_TYPE_MASK          = 0x00000003;
+const UINT D3D11_COMPARISON_FILTERING_BIT  = 0x00000080;
+const UINT D3D11_ANISOTROPIC_FILTERING_BIT = 0x00000040;
+
+cpp_quote("#define D3D11_ENCODE_BASIC_FILTER(min, mag, mip, bComparison) \\")
+cpp_quote("    ((D3D11_FILTER)(((bComparison) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) | \\")
+cpp_quote("                    (((min)&D3D11_FILTER_TYPE_MASK) << D3D11_MIN_FILTER_SHIFT) | \\")
+cpp_quote("                    (((mag)&D3D11_FILTER_TYPE_MASK) << D3D11_MAG_FILTER_SHIFT) | \\")
+cpp_quote("                    (((mip)&D3D11_FILTER_TYPE_MASK) << D3D11_MIP_FILTER_SHIFT)))")
+
+cpp_quote("#define D3D11_ENCODE_ANISOTROPIC_FILTER(bComparison) \\")
+cpp_quote("    ((D3D11_FILTER)(D3D11_ANISOTROPIC_FILTERING_BIT | \\" )
+cpp_quote("                    D3D11_ENCODE_BASIC_FILTER(D3D11_FILTER_TYPE_LINEAR,D3D11_FILTER_TYPE_LINEAR, \\" )
+cpp_quote("                                              D3D11_FILTER_TYPE_LINEAR,bComparison)))" )
+
+cpp_quote("#define D3D11_DECODE_MIN_FILTER(d3d11Filter) \\")
+cpp_quote("    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIN_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D11_DECODE_MAG_FILTER(d3d11Filter) \\")
+cpp_quote("    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MAG_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D11_DECODE_MIP_FILTER(d3d11Filter) \\")
+cpp_quote("    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIP_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D11_DECODE_IS_COMPARISON_FILTER(d3d11Filter) ((d3d11Filter) & D3D11_COMPARISON_FILTERING_BIT)")
+
+cpp_quote("#define D3D11_DECODE_IS_ANISOTROPIC_FILTER(d3d11Filter) \\")
+cpp_quote("    (((d3d11Filter) & D3D11_ANISOTROPIC_FILTERING_BIT ) \\" )
+cpp_quote("     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER(d3d11Filter)) \\" )
+cpp_quote("     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER(d3d11Filter)) \\" )
+cpp_quote("     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER(d3d11Filter)))")
+
+typedef enum D3D11_FILTER
+{
+    D3D11_FILTER_MIN_MAG_MIP_POINT = 0x00,
+    D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,
+    D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,
+    D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,
+    D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+    D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+    D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+    D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+    D3D11_FILTER_ANISOTROPIC = 0x55,
+    D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+    D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+    D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+    D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+    D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+    D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+    D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+    D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+    D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5
+} D3D11_FILTER;
+
+typedef enum D3D11_DSV_FLAG
+{
+    D3D11_DSV_READ_ONLY_DEPTH = 0x1,
+    D3D11_DSV_READ_ONLY_STENCIL = 0x2,
+} D3D11_DSV_FLAG;
+
+typedef enum D3D11_INPUT_CLASSIFICATION
+{
+    D3D11_INPUT_PER_VERTEX_DATA,
+    D3D11_INPUT_PER_INSTANCE_DATA,
+} D3D11_INPUT_CLASSIFICATION;
+
+typedef struct D3D11_INPUT_ELEMENT_DESC
+{
+    LPCSTR SemanticName;
+    UINT SemanticIndex;
+    DXGI_FORMAT Format;
+    UINT InputSlot;
+    UINT AlignedByteOffset;
+    D3D11_INPUT_CLASSIFICATION InputSlotClass;
+    UINT InstanceDataStepRate;
+} D3D11_INPUT_ELEMENT_DESC;
+
+typedef enum D3D11_MAP
+{
+    D3D11_MAP_READ = 1,
+    D3D11_MAP_WRITE,
+    D3D11_MAP_READ_WRITE,
+    D3D11_MAP_WRITE_DISCARD,
+    D3D11_MAP_WRITE_NO_OVERWRITE
+} D3D11_MAP;
+
+typedef struct D3D11_MAPPED_SUBRESOURCE
+{
+    void *pData;
+    UINT RowPitch;
+    UINT DepthPitch;
+} D3D11_MAPPED_SUBRESOURCE;
+
+typedef enum D3D11_QUERY
+{
+    D3D11_QUERY_EVENT,
+    D3D11_QUERY_OCCLUSION,
+    D3D11_QUERY_TIMESTAMP,
+    D3D11_QUERY_TIMESTAMP_DISJOINT,
+    D3D11_QUERY_PIPELINE_STATISTICS,
+    D3D11_QUERY_OCCLUSION_PREDICATE,
+    D3D11_QUERY_SO_STATISTICS,
+    D3D11_QUERY_SO_OVERFLOW_PREDICATE,
+    D3D11_QUERY_SO_STATISTICS_STREAM0,
+    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0,
+    D3D11_QUERY_SO_STATISTICS_STREAM1,
+    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1,
+    D3D11_QUERY_SO_STATISTICS_STREAM2,
+    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2,
+    D3D11_QUERY_SO_STATISTICS_STREAM3,
+    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3,
+} D3D11_QUERY;
+
+typedef enum D3D11_ASYNC_GETDATA_FLAG
+{
+    D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x0001,
+} D3D11_ASYNC_GETDATA_FLAG;
+
+typedef enum D3D11_RESOURCE_MISC_FLAG
+{
+    D3D11_RESOURCE_MISC_GENERATE_MIPS                    = 0x00000001L,
+    D3D11_RESOURCE_MISC_SHARED                           = 0x00000002L,
+    D3D11_RESOURCE_MISC_TEXTURECUBE                      = 0x00000004L,
+    D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS                = 0x00000010L,
+    D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS           = 0x00000020L,
+    D3D11_RESOURCE_MISC_BUFFER_STRUCTURED                = 0x00000040L,
+    D3D11_RESOURCE_MISC_RESOURCE_CLAMP                   = 0x00000080L,
+    D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX                = 0x00000100L,
+    D3D11_RESOURCE_MISC_GDI_COMPATIBLE                   = 0x00000200L,
+    D3D11_RESOURCE_MISC_SHARED_NTHANDLE                  = 0x00000800L,
+    D3D11_RESOURCE_MISC_RESTRICTED_CONTENT               = 0x00001000L,
+    D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE         = 0x00002000L,
+    D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER  = 0x00004000L,
+    D3D11_RESOURCE_MISC_GUARDED                          = 0x00008000L
+} D3D11_RESOURCE_MISC_FLAG;
+
+typedef struct D3D11_QUERY_DESC
+{
+    D3D11_QUERY Query;
+    UINT MiscFlags;
+} D3D11_QUERY_DESC;
+
+typedef struct D3D11_RASTERIZER_DESC
+{
+    D3D11_FILL_MODE FillMode;
+    D3D11_CULL_MODE CullMode;
+    BOOL FrontCounterClockwise;
+    INT DepthBias;
+    FLOAT DepthBiasClamp;
+    FLOAT SlopeScaledDepthBias;
+    BOOL DepthClipEnable;
+    BOOL ScissorEnable;
+    BOOL MultisampleEnable;
+    BOOL AntialiasedLineEnable;
+} D3D11_RASTERIZER_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC {")
+cpp_quote("    CD3D11_RASTERIZER_DESC() {}")
+cpp_quote("    explicit CD3D11_RASTERIZER_DESC(const D3D11_RASTERIZER_DESC &o) : D3D11_RASTERIZER_DESC(o) {}")
+cpp_quote("    explicit CD3D11_RASTERIZER_DESC(CD3D11_DEFAULT) {")
+cpp_quote("        FillMode = D3D11_FILL_SOLID;")
+cpp_quote("        CullMode = D3D11_CULL_BACK;")
+cpp_quote("        FrontCounterClockwise = FALSE;")
+cpp_quote("        DepthBias = D3D11_DEFAULT_DEPTH_BIAS;")
+cpp_quote("        DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP;")
+cpp_quote("        SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;")
+cpp_quote("        DepthClipEnable = TRUE;")
+cpp_quote("        ScissorEnable = FALSE;")
+cpp_quote("        MultisampleEnable = FALSE;")
+cpp_quote("        AntialiasedLineEnable = FALSE;")
+cpp_quote("    }")
+cpp_quote("    explicit CD3D11_RASTERIZER_DESC(D3D11_FILL_MODE fillMode, D3D11_CULL_MODE cullMode," )
+cpp_quote("            BOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias,")
+cpp_quote("            BOOL depthClipEnable, BOOL scissorEnable, BOOL multisampleEnable, BOOL antialiasedLineEnable) {")
+cpp_quote("        FillMode = fillMode;")
+cpp_quote("        CullMode = cullMode;")
+cpp_quote("        FrontCounterClockwise = frontCounterClockwise;")
+cpp_quote("        DepthBias = depthBias;")
+cpp_quote("        DepthBiasClamp = depthBiasClamp;")
+cpp_quote("        SlopeScaledDepthBias = slopeScaledDepthBias;")
+cpp_quote("        DepthClipEnable = depthClipEnable;")
+cpp_quote("        ScissorEnable = scissorEnable;")
+cpp_quote("        MultisampleEnable = multisampleEnable;")
+cpp_quote("        AntialiasedLineEnable = antialiasedLineEnable;")
+cpp_quote("    }")
+cpp_quote("    ~CD3D11_RASTERIZER_DESC() {}")
+cpp_quote("    operator const D3D11_RASTERIZER_DESC&() const { return *this; }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef enum D3D11_RESOURCE_DIMENSION
+{
+    D3D11_RESOURCE_DIMENSION_UNKNOWN,
+    D3D11_RESOURCE_DIMENSION_BUFFER,
+    D3D11_RESOURCE_DIMENSION_TEXTURE1D,
+    D3D11_RESOURCE_DIMENSION_TEXTURE2D,
+    D3D11_RESOURCE_DIMENSION_TEXTURE3D,
+} D3D11_RESOURCE_DIMENSION;
+
+typedef enum D3D11_RTV_DIMENSION
+{
+    D3D11_RTV_DIMENSION_UNKNOWN,
+    D3D11_RTV_DIMENSION_BUFFER,
+    D3D11_RTV_DIMENSION_TEXTURE1D,
+    D3D11_RTV_DIMENSION_TEXTURE1DARRAY,
+    D3D11_RTV_DIMENSION_TEXTURE2D,
+    D3D11_RTV_DIMENSION_TEXTURE2DARRAY,
+    D3D11_RTV_DIMENSION_TEXTURE2DMS,
+    D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY,
+    D3D11_RTV_DIMENSION_TEXTURE3D,
+} D3D11_RTV_DIMENSION;
+
+typedef struct D3D11_SO_DECLARATION_ENTRY
+{
+    UINT Stream;
+    LPCSTR SemanticName;
+    UINT SemanticIndex;
+    BYTE StartComponent;
+    BYTE ComponentCount;
+    BYTE OutputSlot;
+} D3D11_SO_DECLARATION_ENTRY;
+
+typedef enum D3D11_STENCIL_OP
+{
+    D3D11_STENCIL_OP_KEEP = 1,
+    D3D11_STENCIL_OP_ZERO,
+    D3D11_STENCIL_OP_REPLACE,
+    D3D11_STENCIL_OP_INCR_SAT,
+    D3D11_STENCIL_OP_DECR_SAT,
+    D3D11_STENCIL_OP_INVERT,
+    D3D11_STENCIL_OP_INCR,
+    D3D11_STENCIL_OP_DECR
+} D3D11_STENCIL_OP;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("}")
+cpp_quote("inline UINT D3D11CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels) {")
+cpp_quote("    return MipSlice + ArraySlice * MipLevels;")
+cpp_quote("}")
+cpp_quote("extern \"C\"{")
+cpp_quote("#endif")
+
+typedef struct D3D11_SUBRESOURCE_DATA
+{
+    const void *pSysMem;
+    UINT SysMemPitch;
+    UINT SysMemSlicePitch;
+} D3D11_SUBRESOURCE_DATA;
+
+typedef struct D3D11_TEX1D_ARRAY_DSV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX1D_ARRAY_DSV;
+
+typedef struct D3D11_TEX1D_ARRAY_RTV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX1D_ARRAY_RTV;
+
+typedef struct D3D11_TEX1D_ARRAY_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX1D_ARRAY_SRV;
+
+typedef struct D3D11_TEX1D_ARRAY_UAV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX1D_ARRAY_UAV;
+
+typedef struct D3D11_TEX1D_DSV
+{
+    UINT MipSlice;
+} D3D11_TEX1D_DSV;
+
+typedef struct D3D11_TEX1D_RTV
+{
+    UINT MipSlice;
+} D3D11_TEX1D_RTV;
+
+typedef struct D3D11_TEX1D_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+ } D3D11_TEX1D_SRV;
+
+typedef struct D3D11_TEX1D_UAV
+{
+    UINT MipSlice;
+} D3D11_TEX1D_UAV;
+
+typedef struct D3D11_TEX2D_ARRAY_DSV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2D_ARRAY_DSV;
+
+typedef struct D3D11_TEX2D_ARRAY_RTV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2D_ARRAY_RTV;
+
+typedef struct D3D11_TEX2D_ARRAY_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2D_ARRAY_SRV;
+
+typedef struct D3D11_TEX2D_ARRAY_UAV
+{
+    UINT MipSlice;
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2D_ARRAY_UAV;
+
+typedef struct D3D11_TEX2D_DSV
+{
+    UINT MipSlice;
+} D3D11_TEX2D_DSV;
+
+typedef struct D3D11_TEX2D_RTV
+{
+    UINT MipSlice;
+} D3D11_TEX2D_RTV;
+
+typedef struct D3D11_TEX2D_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D11_TEX2D_SRV;
+
+typedef struct D3D11_TEX2D_UAV
+{
+    UINT MipSlice;
+} D3D11_TEX2D_UAV;
+
+typedef struct D3D11_TEX2DMS_ARRAY_DSV
+{
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2DMS_ARRAY_DSV;
+
+typedef struct D3D11_TEX2DMS_ARRAY_RTV
+{
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2DMS_ARRAY_RTV;
+
+typedef struct D3D11_TEX2DMS_ARRAY_SRV
+{
+    UINT FirstArraySlice;
+    UINT ArraySize;
+} D3D11_TEX2DMS_ARRAY_SRV;
+
+typedef struct D3D11_TEX2DMS_DSV
+{
+    UINT UnusedField_NothingToDefine;
+} D3D11_TEX2DMS_DSV;
+
+typedef struct D3D11_TEX2DMS_RTV
+{
+    UINT UnusedField_NothingToDefine;
+} D3D11_TEX2DMS_RTV;
+
+typedef struct D3D11_TEX2DMS_SRV
+{
+    UINT UnusedField_NothingToDefine;
+} D3D11_TEX2DMS_SRV;
+
+typedef struct D3D11_TEX3D_RTV
+{
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D11_TEX3D_RTV;
+
+typedef struct D3D11_TEX3D_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D11_TEX3D_SRV;
+
+typedef struct D3D11_TEX3D_UAV
+{
+    UINT MipSlice;
+    UINT FirstWSlice;
+    UINT WSize;
+} D3D11_TEX3D_UAV;
+
+typedef struct D3D11_TEXCUBE_ARRAY_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+    UINT First2DArrayFace;
+    UINT NumCubes;
+} D3D11_TEXCUBE_ARRAY_SRV;
+
+typedef struct D3D11_TEXCUBE_SRV
+{
+    UINT MostDetailedMip;
+    UINT MipLevels;
+} D3D11_TEXCUBE_SRV;
+
+typedef enum D3D11_TEXTURE_ADDRESS_MODE
+{
+    D3D11_TEXTURE_ADDRESS_WRAP = 1,
+    D3D11_TEXTURE_ADDRESS_MIRROR,
+    D3D11_TEXTURE_ADDRESS_CLAMP,
+    D3D11_TEXTURE_ADDRESS_BORDER,
+    D3D11_TEXTURE_ADDRESS_MIRROR_ONCE
+} D3D11_TEXTURE_ADDRESS_MODE;
+
+typedef enum D3D11_UAV_DIMENSION
+{
+    D3D11_UAV_DIMENSION_UNKNOWN,
+    D3D11_UAV_DIMENSION_BUFFER,
+    D3D11_UAV_DIMENSION_TEXTURE1D,
+    D3D11_UAV_DIMENSION_TEXTURE1DARRAY,
+    D3D11_UAV_DIMENSION_TEXTURE2D,
+    D3D11_UAV_DIMENSION_TEXTURE2DARRAY,
+    D3D11_UAV_DIMENSION_TEXTURE3D = 8,
+} D3D11_UAV_DIMENSION;
+
+typedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D11_UAV_DIMENSION ViewDimension;
+
+    union
+    {
+        D3D11_BUFFER_UAV Buffer;
+        D3D11_TEX1D_UAV Texture1D;
+        D3D11_TEX1D_ARRAY_UAV Texture1DArray;
+        D3D11_TEX2D_UAV Texture2D;
+        D3D11_TEX2D_ARRAY_UAV Texture2DArray;
+        D3D11_TEX3D_UAV Texture3D;
+    };
+} D3D11_UNORDERED_ACCESS_VIEW_DESC;
+
+typedef enum D3D11_USAGE
+{
+    D3D11_USAGE_DEFAULT,
+    D3D11_USAGE_IMMUTABLE,
+    D3D11_USAGE_DYNAMIC,
+    D3D11_USAGE_STAGING,
+} D3D11_USAGE;
+
+typedef enum D3D11_BIND_FLAG
+{
+    D3D11_BIND_VERTEX_BUFFER    = 0x0001,
+    D3D11_BIND_INDEX_BUFFER     = 0x0002,
+    D3D11_BIND_CONSTANT_BUFFER  = 0x0004,
+    D3D11_BIND_SHADER_RESOURCE  = 0x0008,
+    D3D11_BIND_STREAM_OUTPUT    = 0x0010,
+    D3D11_BIND_RENDER_TARGET    = 0x0020,
+    D3D11_BIND_DEPTH_STENCIL    = 0x0040,
+    D3D11_BIND_UNORDERED_ACCESS = 0x0080,
+    D3D11_BIND_DECODER          = 0x0200,
+    D3D11_BIND_VIDEO_ENCODER    = 0x0400
+} D3D11_BIND_FLAG;
+
+typedef enum D3D11_CPU_ACCESS_FLAG
+{
+    D3D11_CPU_ACCESS_WRITE = 0x00010000,
+    D3D11_CPU_ACCESS_READ  = 0x00020000
+} D3D11_CPU_ACCESS_FLAG;
+
+typedef struct D3D11_VIEWPORT
+{
+    FLOAT TopLeftX;
+    FLOAT TopLeftY;
+    FLOAT Width;
+    FLOAT Height;
+    FLOAT MinDepth;
+    FLOAT MaxDepth;
+} D3D11_VIEWPORT;
+
+typedef enum D3D11_COLOR_WRITE_ENABLE
+{
+    D3D11_COLOR_WRITE_ENABLE_RED   = 1,
+    D3D11_COLOR_WRITE_ENABLE_GREEN = 2,
+    D3D11_COLOR_WRITE_ENABLE_BLUE  = 4,
+    D3D11_COLOR_WRITE_ENABLE_ALPHA = 8,
+    D3D11_COLOR_WRITE_ENABLE_ALL   =
+        (D3D11_COLOR_WRITE_ENABLE_RED|D3D11_COLOR_WRITE_ENABLE_GREEN|D3D11_COLOR_WRITE_ENABLE_BLUE|D3D11_COLOR_WRITE_ENABLE_ALPHA)
+} D3D11_COLOR_WRITE_ENABLE;
+
+typedef enum D3D11_FORMAT_SUPPORT
+{
+    D3D11_FORMAT_SUPPORT_BUFFER                       = 0x00000001,
+    D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER             = 0x00000002,
+    D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER              = 0x00000004,
+    D3D11_FORMAT_SUPPORT_SO_BUFFER                    = 0x00000008,
+    D3D11_FORMAT_SUPPORT_TEXTURE1D                    = 0x00000010,
+    D3D11_FORMAT_SUPPORT_TEXTURE2D                    = 0x00000020,
+    D3D11_FORMAT_SUPPORT_TEXTURE3D                    = 0x00000040,
+    D3D11_FORMAT_SUPPORT_TEXTURECUBE                  = 0x00000080,
+    D3D11_FORMAT_SUPPORT_SHADER_LOAD                  = 0x00000100,
+    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE                = 0x00000200,
+    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON     = 0x00000400,
+    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT      = 0x00000800,
+    D3D11_FORMAT_SUPPORT_MIP                          = 0x00001000,
+    D3D11_FORMAT_SUPPORT_MIP_AUTOGEN                  = 0x00002000,
+    D3D11_FORMAT_SUPPORT_RENDER_TARGET                = 0x00004000,
+    D3D11_FORMAT_SUPPORT_BLENDABLE                    = 0x00008000,
+    D3D11_FORMAT_SUPPORT_DEPTH_STENCIL                = 0x00010000,
+    D3D11_FORMAT_SUPPORT_CPU_LOCKABLE                 = 0x00020000,
+    D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE          = 0x00040000,
+    D3D11_FORMAT_SUPPORT_DISPLAY                      = 0x00080000,
+    D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT       = 0x00100000,
+    D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET     = 0x00200000,
+    D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD             = 0x00400000,
+    D3D11_FORMAT_SUPPORT_SHADER_GATHER                = 0x00800000,
+    D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST             = 0x01000000,
+    D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW  = 0x02000000,
+    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON     = 0x04000000
+} D3D11_FORMAT_SUPPORT;
+
+typedef enum D3D11_CLEAR_FLAG
+{
+    D3D11_CLEAR_DEPTH    = 0x0001L,
+    D3D11_CLEAR_STENCIL  = 0x0002L
+} D3D11_CLEAR_FLAG;
+
+typedef struct D3D11_RENDER_TARGET_BLEND_DESC
+{
+    BOOL BlendEnable;
+    D3D11_BLEND SrcBlend;
+    D3D11_BLEND DestBlend;
+    D3D11_BLEND_OP BlendOp;
+    D3D11_BLEND SrcBlendAlpha;
+    D3D11_BLEND DestBlendAlpha;
+    D3D11_BLEND_OP BlendOpAlpha;
+    UINT8 RenderTargetWriteMask;
+} D3D11_RENDER_TARGET_BLEND_DESC;
+
+typedef struct D3D11_BLEND_DESC
+{
+    BOOL AlphaToCoverageEnable;
+    BOOL IndependentBlendEnable;
+    D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];
+} D3D11_BLEND_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC {")
+cpp_quote("    CD3D11_BLEND_DESC() {}")
+cpp_quote("    explicit CD3D11_BLEND_DESC(const D3D11_BLEND_DESC &o) : D3D11_BLEND_DESC(o) {}")
+cpp_quote("    explicit CD3D11_BLEND_DESC(CD3D11_DEFAULT) {")
+cpp_quote("        AlphaToCoverageEnable = FALSE;")
+cpp_quote("        IndependentBlendEnable = FALSE;")
+cpp_quote("        for(D3D11_RENDER_TARGET_BLEND_DESC *target; target < RenderTarget+D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; target++) {")
+cpp_quote("            target->BlendEnable = FALSE;")
+cpp_quote("            target->SrcBlend = target->SrcBlendAlpha = D3D11_BLEND_ONE;")
+cpp_quote("            target->DestBlend = target->DestBlendAlpha = D3D11_BLEND_ZERO;")
+cpp_quote("            target->BlendOp = target->BlendOpAlpha = D3D11_BLEND_OP_ADD;")
+cpp_quote("            target->RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;")
+cpp_quote("        }")
+cpp_quote("    }")
+cpp_quote("    ~CD3D11_BLEND_DESC() {}")
+cpp_quote("    operator const D3D11_BLEND_DESC&() const { return *this; }")
+cpp_quote("};" )
+cpp_quote("#endif" )
+
+typedef struct D3D11_BUFFER_DESC
+{
+    UINT ByteWidth;
+    D3D11_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+    UINT StructureByteStride;
+} D3D11_BUFFER_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC {")
+cpp_quote("    CD3D11_BUFFER_DESC() {}" )
+cpp_quote("    explicit CD3D11_BUFFER_DESC(const D3D11_BUFFER_DESC &o) : D3D11_BUFFER_DESC(o) {}")
+cpp_quote("    explicit CD3D11_BUFFER_DESC(UINT byteWidth,UINT bindFlags,")
+cpp_quote("            D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0,")
+cpp_quote("            UINT miscFlags = 0, UINT structureByteStride = 0 ) {")
+cpp_quote("        ByteWidth = byteWidth;")
+cpp_quote("        Usage = usage;")
+cpp_quote("        BindFlags = bindFlags;")
+cpp_quote("        CPUAccessFlags = cpuaccessFlags;")
+cpp_quote("        MiscFlags = miscFlags;" )
+cpp_quote("        StructureByteStride = structureByteStride;")
+cpp_quote("    }")
+cpp_quote("    ~CD3D11_BUFFER_DESC() {}")
+cpp_quote("    operator const D3D11_BUFFER_DESC&() const { return *this; }")
+cpp_quote("};" )
+cpp_quote("#endif" )
+
+typedef struct D3D11_DEPTH_STENCIL_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D11_DSV_DIMENSION ViewDimension;
+    UINT Flags;
+
+    union
+    {
+        D3D11_TEX1D_DSV Texture1D;
+        D3D11_TEX1D_ARRAY_DSV Texture1DArray;
+        D3D11_TEX2D_DSV Texture2D;
+        D3D11_TEX2D_ARRAY_DSV Texture2DArray;
+        D3D11_TEX2DMS_DSV Texture2DMS;
+        D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray;
+    };
+} D3D11_DEPTH_STENCIL_VIEW_DESC;
+
+typedef struct D3D11_DEPTH_STENCILOP_DESC
+{
+    D3D11_STENCIL_OP StencilFailOp;
+    D3D11_STENCIL_OP StencilDepthFailOp;
+    D3D11_STENCIL_OP StencilPassOp;
+    D3D11_COMPARISON_FUNC StencilFunc;
+} D3D11_DEPTH_STENCILOP_DESC;
+
+typedef struct D3D11_DEPTH_STENCIL_DESC
+{
+    BOOL DepthEnable;
+    D3D11_DEPTH_WRITE_MASK DepthWriteMask;
+    D3D11_COMPARISON_FUNC DepthFunc;
+    BOOL StencilEnable;
+    UINT8 StencilReadMask;
+    UINT8 StencilWriteMask;
+    D3D11_DEPTH_STENCILOP_DESC FrontFace;
+    D3D11_DEPTH_STENCILOP_DESC BackFace;
+} D3D11_DEPTH_STENCIL_DESC;
+
+typedef struct D3D11_RENDER_TARGET_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D11_RTV_DIMENSION ViewDimension;
+
+    union
+    {
+        D3D11_BUFFER_RTV Buffer;
+        D3D11_TEX1D_RTV Texture1D;
+        D3D11_TEX1D_ARRAY_RTV Texture1DArray;
+        D3D11_TEX2D_RTV Texture2D;
+        D3D11_TEX2D_ARRAY_RTV Texture2DArray;
+        D3D11_TEX2DMS_RTV Texture2DMS;
+        D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray;
+        D3D11_TEX3D_RTV Texture3D;
+    };
+} D3D11_RENDER_TARGET_VIEW_DESC;
+
+typedef struct D3D11_SAMPLER_DESC
+{
+    D3D11_FILTER Filter;
+    D3D11_TEXTURE_ADDRESS_MODE AddressU;
+    D3D11_TEXTURE_ADDRESS_MODE AddressV;
+    D3D11_TEXTURE_ADDRESS_MODE AddressW;
+    FLOAT MipLODBias;
+    UINT MaxAnisotropy;
+    D3D11_COMPARISON_FUNC ComparisonFunc;
+    FLOAT BorderColor[4];
+    FLOAT MinLOD;
+    FLOAT MaxLOD;
+} D3D11_SAMPLER_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC {")
+cpp_quote("    CD3D11_SAMPLER_DESC() {}")
+cpp_quote("    explicit CD3D11_SAMPLER_DESC(const D3D11_SAMPLER_DESC &o) : D3D11_SAMPLER_DESC(o) {}")
+cpp_quote("    explicit CD3D11_SAMPLER_DESC(CD3D11_DEFAULT) {" )
+cpp_quote("        Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;")
+cpp_quote("        AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;")
+cpp_quote("        AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;")
+cpp_quote("        AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;")
+cpp_quote("        MipLODBias = 0;")
+cpp_quote("        MaxAnisotropy = 1;")
+cpp_quote("        ComparisonFunc = D3D11_COMPARISON_NEVER;")
+cpp_quote("        BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;")
+cpp_quote("        MinLOD = -3.402823466e+38f;")
+cpp_quote("        MaxLOD = 3.402823466e+38f;")
+cpp_quote("    }")
+cpp_quote("    explicit CD3D11_SAMPLER_DESC(D3D11_FILTER filter, D3D11_TEXTURE_ADDRESS_MODE addressU,")
+cpp_quote("            D3D11_TEXTURE_ADDRESS_MODE addressV, D3D11_TEXTURE_ADDRESS_MODE addressW,")
+cpp_quote("            FLOAT mipLODBias, UINT maxAnisotropy, D3D11_COMPARISON_FUNC comparisonFunc,")
+cpp_quote("            const FLOAT *borderColor, FLOAT minLOD, FLOAT maxLOD) {" )
+cpp_quote("        Filter = filter;")
+cpp_quote("        AddressU = addressU;")
+cpp_quote("        AddressV = addressV;")
+cpp_quote("        AddressW = addressW;")
+cpp_quote("        MipLODBias = mipLODBias;")
+cpp_quote("        MaxAnisotropy = maxAnisotropy;")
+cpp_quote("        ComparisonFunc = comparisonFunc;")
+cpp_quote("        if(borderColor) {")
+cpp_quote("            BorderColor[0] = borderColor[0];")
+cpp_quote("            BorderColor[1] = borderColor[1];")
+cpp_quote("            BorderColor[2] = borderColor[2];")
+cpp_quote("            BorderColor[3] = borderColor[3];")
+cpp_quote("        }else {")
+cpp_quote("            BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;")
+cpp_quote("        }")
+cpp_quote("        MinLOD = minLOD;")
+cpp_quote("        MaxLOD = maxLOD;")
+cpp_quote("    }")
+cpp_quote("    ~CD3D11_SAMPLER_DESC() {}")
+cpp_quote("    operator const D3D11_SAMPLER_DESC&() const { return *this; }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D11_SHADER_RESOURCE_VIEW_DESC
+{
+    DXGI_FORMAT Format;
+    D3D11_SRV_DIMENSION ViewDimension;
+
+    union
+    {
+        D3D11_BUFFER_SRV Buffer;
+        D3D11_TEX1D_SRV Texture1D;
+        D3D11_TEX1D_ARRAY_SRV Texture1DArray;
+        D3D11_TEX2D_SRV Texture2D;
+        D3D11_TEX2D_ARRAY_SRV Texture2DArray;
+        D3D11_TEX2DMS_SRV Texture2DMS;
+        D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+        D3D11_TEX3D_SRV Texture3D;
+        D3D11_TEXCUBE_SRV TextureCube;
+        D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray;
+        D3D11_BUFFEREX_SRV BufferEx;
+    };
+} D3D11_SHADER_RESOURCE_VIEW_DESC;
+
+typedef struct D3D11_TEXTURE1D_DESC
+{
+    UINT Width;
+    UINT MipLevels;
+    UINT ArraySize;
+    DXGI_FORMAT Format;
+    D3D11_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D11_TEXTURE1D_DESC;
+
+typedef struct D3D11_TEXTURE2D_DESC
+{
+    UINT Width;
+    UINT Height;
+    UINT MipLevels;
+    UINT ArraySize;
+    DXGI_FORMAT Format;
+    DXGI_SAMPLE_DESC SampleDesc;
+    D3D11_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D11_TEXTURE2D_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC {")
+cpp_quote("    CD3D11_TEXTURE2D_DESC() {}")
+cpp_quote("    explicit CD3D11_TEXTURE2D_DESC(const D3D11_TEXTURE2D_DESC &o) : D3D11_TEXTURE2D_DESC(o) {}")
+cpp_quote("    explicit CD3D11_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1,")
+cpp_quote("            UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,")
+cpp_quote("            D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1," )
+cpp_quote("            UINT sampleQuality = 0, UINT miscFlags = 0) {")
+cpp_quote("        Width = width;")
+cpp_quote("        Height = height;")
+cpp_quote("        MipLevels = mipLevels;")
+cpp_quote("        ArraySize = arraySize;")
+cpp_quote("        Format = format;")
+cpp_quote("        SampleDesc.Count = sampleCount;")
+cpp_quote("        SampleDesc.Quality = sampleQuality;")
+cpp_quote("        Usage = usage;")
+cpp_quote("        BindFlags = bindFlags;")
+cpp_quote("        CPUAccessFlags = cpuaccessFlags;")
+cpp_quote("        MiscFlags = miscFlags;")
+cpp_quote("    }" )
+cpp_quote("    ~CD3D11_TEXTURE2D_DESC() {}")
+cpp_quote("    operator const D3D11_TEXTURE2D_DESC&() const { return *this; }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D11_TEXTURE3D_DESC
+{
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+    UINT MipLevels;
+    DXGI_FORMAT Format;
+    D3D11_USAGE Usage;
+    UINT BindFlags;
+    UINT CPUAccessFlags;
+    UINT MiscFlags;
+} D3D11_TEXTURE3D_DESC;
+
+/* A couple forward declarations are needed */
+interface ID3D11Device;
+interface ID3D11ClassLinkage;
+
+[
+    object,
+    local,
+    uuid(1841e5c8-16b0-489b-bcc8-44cfb0d5deae)
+]
+interface ID3D11DeviceChild : IUnknown
+{
+    void GetDevice(
+        [out] ID3D11Device **ppDevice);
+    HRESULT GetPrivateData(
+        [in] REFGUID guid,
+        [in, out] UINT *pDataSize,
+        [out] void *pData);
+    HRESULT SetPrivateData(
+        [in] REFGUID guid,
+        [in] UINT DataSize,
+        [in] const void *pData);
+    HRESULT SetPrivateDataInterface(
+        [in] REFGUID guid,
+        [in] const IUnknown *pData);
+}
+
+[
+    object,
+    local,
+    uuid(4b35d0cd-1e15-4258-9c98-1b1333f6dd3b)
+]
+interface ID3D11Asynchronous : ID3D11DeviceChild
+{
+    UINT GetDataSize();
+}
+
+[
+    object,
+    local,
+    uuid(d6c00747-87b7-425e-b84d-44d108560afd)
+]
+interface ID3D11Query : ID3D11Asynchronous
+{
+    void GetDesc(
+        [out] D3D11_QUERY_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(dc8e63f3-d12b-4952-b47b-5e45026a862d)
+]
+interface ID3D11Resource : ID3D11DeviceChild
+{
+    void GetType(
+        [out] D3D11_RESOURCE_DIMENSION *pResourceDimension);
+    void SetEvictionPriority(
+        [in] UINT EvictionPriority);
+    UINT GetEvictionPriority();
+}
+
+[
+    object,
+    local,
+    uuid(839d1216-bb2e-412b-b7f4-a9dbebe08ed1)
+]
+interface ID3D11View : ID3D11DeviceChild
+{
+    void GetResource(
+        [out] ID3D11Resource **ppResource);
+}
+
+[
+    object,
+    local,
+    uuid(75b68faa-347d-4159-8f45-a0640f01cd9a)
+]
+interface ID3D11BlendState : ID3D11DeviceChild
+{
+    void GetDesc(
+        [out] D3D11_BLEND_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(48570b85-d1ee-4fcd-a250-eb350722b037)
+]
+interface ID3D11Buffer : ID3D11Resource
+{
+    void GetDesc(
+        [out] D3D11_BUFFER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(a6cd7faa-b0b7-4a2f-9436-8662a65797cb)
+]
+interface ID3D11ClassInstance : ID3D11DeviceChild
+{
+    void GetClassLinkage(
+        [out] ID3D11ClassLinkage **ppLinkage);
+    void GetDesc(
+        [out] D3D11_CLASS_INSTANCE_DESC *pDesc);
+    void GetInstanceName(
+        [out] LPSTR pInstanceName,
+        [in, out] SIZE_T *pBufferLength);
+    void GetTypeName(
+        [out] LPSTR pTypeName,
+        [in, out] SIZE_T *pBufferLength);
+}
+
+[
+    object,
+    local,
+    uuid(ddf57cba-9543-46e4-a12b-f207a0fe7fed)
+]
+interface ID3D11ClassLinkage : ID3D11DeviceChild
+{
+    HRESULT GetClassInstance(
+        [in] LPCSTR pClassInstanceName,
+        [in] UINT InstanceIndex,
+        [out] ID3D11ClassInstance **ppInstance);
+    HRESULT CreateClassInstance(
+        [in] LPCSTR pClassTypeName,
+        [in] UINT ConstantBufferOffset,
+        [in] UINT ConstantVectorOffset,
+        [in] UINT TextureOffset,
+        [in] UINT SamplerOffset,
+        [out] ID3D11ClassInstance **ppInstance);
+}
+
+[
+    object,
+    local,
+    uuid(a24bc4d1-769e-43f7-8013-98ff566c18e2)
+]
+interface ID3D11CommandList : ID3D11DeviceChild
+{
+    UINT GetContextFlags();
+}
+
+[
+    object,
+    local,
+    uuid(4f5b196e-c2bd-495e-bd01-1fded38e4969)
+]
+interface ID3D11ComputeShader : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(6e8c49fb-a371-4770-b440-29086022b741)
+]
+interface ID3D11Counter : ID3D11Asynchronous
+{
+    void GetDesc(
+        [out] D3D11_COUNTER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1)
+]
+interface ID3D11DepthStencilState : ID3D11DeviceChild
+{
+    void GetDesc(
+        [out] D3D11_DEPTH_STENCIL_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(9fdac92a-1876-48c3-afad-25b94f84a9b6)
+]
+interface ID3D11DepthStencilView : ID3D11View
+{
+    void GetDesc(
+        [out] D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(f582c508-0f36-490c-9977-31eece268cfa)
+]
+interface ID3D11DomainShader : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(38325b96-effb-4022-ba02-2e795b70275c)
+]
+interface ID3D11GeometryShader : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(8e5c6061-628a-4c8e-8264-bbe45cb3d5dd)
+]
+interface ID3D11HullShader : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(e4819ddc-4cf0-4025-bd26-5de82a3e07b7)
+]
+interface ID3D11InputLayout : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(ea82e40d-51dc-4f33-93d4-db7c9125ae8c)
+]
+interface ID3D11PixelShader : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(9eb576dd-9f77-4d86-81aa-8bab5fe490e2)
+]
+interface ID3D11Predicate : ID3D11Query
+{
+}
+
+[
+    object,
+    local,
+    uuid(9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7)
+]
+interface ID3D11RasterizerState : ID3D11DeviceChild
+{
+    void GetDesc(
+        [out] D3D11_RASTERIZER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(dfdba067-0b8d-4865-875b-d7b4516cc164)
+]
+interface ID3D11RenderTargetView : ID3D11View
+{
+    void GetDesc(
+        [out] D3D11_RENDER_TARGET_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(da6fea51-564c-4487-9810-f0d0f9b4e3a5)
+]
+interface ID3D11SamplerState : ID3D11DeviceChild
+{
+    void GetDesc(
+        [out] D3D11_SAMPLER_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(b0e06fe0-8192-4e1a-b1ca-36d7414710b2)
+]
+interface ID3D11ShaderResourceView : ID3D11View
+{
+    void GetDesc(
+        [out] D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(f8fb5c27-c6b3-4f75-a4c8-439af2ef564c),
+]
+interface ID3D11Texture1D : ID3D11Resource
+{
+    void GetDesc(
+        [out] D3D11_TEXTURE1D_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(6f15aaf2-d208-4e89-9ab4-489535d34f9c)
+]
+interface ID3D11Texture2D : ID3D11Resource
+{
+    void GetDesc(
+        [out] D3D11_TEXTURE2D_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(037e866e-f56d-4357-a8af-9dabbe6e250e)
+]
+interface ID3D11Texture3D : ID3D11Resource
+{
+    void GetDesc(
+        [out] D3D11_TEXTURE3D_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(28acf509-7f5c-48f6-8611-f316010a6380)
+]
+interface ID3D11UnorderedAccessView : ID3D11View
+{
+    void GetDesc(
+        [out] D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc);
+}
+
+[
+    object,
+    local,
+    uuid(3b301d64-d678-4289-8897-22f8928b72f3)
+]
+interface ID3D11VertexShader : ID3D11DeviceChild
+{
+}
+
+[
+    object,
+    local,
+    uuid(c0bfa96c-e089-44fb-8eaf-26f8796190da)
+]
+interface ID3D11DeviceContext : ID3D11DeviceChild
+{
+    void VSSetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppConstantBuffers);
+    void PSSetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+    void PSSetShader(
+        [in] ID3D11PixelShader *pPixelShader,
+        [in] ID3D11ClassInstance *const *ppClassInstances,
+        UINT NumClassInstances);
+    void PSSetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [in] ID3D11SamplerState *const *ppSamplers);
+    void VSSetShader(
+        [in] ID3D11VertexShader *pVertexShader,
+        [in] ID3D11ClassInstance *const *ppClassInstances,
+        UINT NumClassInstances);
+    void DrawIndexed(
+        [in] UINT IndexCount,
+        [in] UINT StartIndexLocation,
+        [in] INT BaseVertexLocation);
+    void Draw(
+        [in] UINT VertexCount,
+        [in] UINT StartVertexLocation);
+    HRESULT Map(
+        [in] ID3D11Resource *pResource,
+        [in] UINT Subresource,
+        [in] D3D11_MAP MapType,
+        [in] UINT MapFlags,
+        [out] D3D11_MAPPED_SUBRESOURCE *pMappedResource);
+    void Unmap(
+        [in] ID3D11Resource *pResource,
+        [in] UINT Subresource);
+    void PSSetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppConstantBuffers);
+    void IASetInputLayout(
+        [in] ID3D11InputLayout *pInputLayout);
+    void IASetVertexBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppVertexBuffers,
+        [in] const UINT *pStrides,
+        [in] const UINT *pOffsets);
+    void IASetIndexBuffer(
+        [in] ID3D11Buffer *pIndexBuffer,
+        [in] DXGI_FORMAT  Format,
+        [in] UINT Offset);
+    void DrawIndexedInstanced(
+        [in] UINT IndexCountPerInstance,
+        [in] UINT InstanceCount,
+        [in] UINT StartIndexLocation,
+        [in] INT BaseVertexLocation,
+        [in] UINT StartInstanceLocation);
+    void DrawInstanced(
+        [in] UINT VertexCountPerInstance,
+        [in] UINT InstanceCount,
+        [in] UINT StartVertexLocation,
+        [in] UINT StartInstanceLocation);
+    void GSSetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppConstantBuffers);
+    void GSSetShader(
+        [in] ID3D11GeometryShader *pShader,
+        [in] ID3D11ClassInstance *const *ppClassInstances,
+        UINT NumClassInstances);
+    void IASetPrimitiveTopology(
+        [in] D3D11_PRIMITIVE_TOPOLOGY Topology);
+    void VSSetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+    void VSSetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [in] ID3D11SamplerState *const *ppSamplers);
+    void Begin(
+        [in] ID3D11Asynchronous *pAsync);
+    void End(
+        [in] ID3D11Asynchronous *pAsync);
+    HRESULT GetData(
+        [in] ID3D11Asynchronous *pAsync,
+        [in] void *pData,
+        [in] UINT DataSize,
+        [in] UINT GetDataFlags);
+    void SetPredication(
+        [in] ID3D11Predicate *pPredicate,
+        [in] BOOL PredicateValue);
+    void GSSetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+    void GSSetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [in] ID3D11SamplerState *const *ppSamplers);
+    void OMSetRenderTargets(
+        [in] UINT NumViews,
+        [in] ID3D11RenderTargetView *const *ppRenderTargetViews,
+        [in] ID3D11DepthStencilView *pDepthStencilView);
+    void OMSetRenderTargetsAndUnorderedAccessViews(
+        [in] UINT NumRTVs,
+        [in] ID3D11RenderTargetView *const *ppRenderTargetViews,
+        [in] ID3D11DepthStencilView *pDepthStencilView,
+        [in] UINT UAVStartSlot,
+        [in] UINT NumUAVs,
+        [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,
+        [in] const UINT *pUAVInitialCounts);
+    void OMSetBlendState(
+        [in] ID3D11BlendState *pBlendState,
+        [in] const FLOAT BlendFactor[4],
+        [in] UINT SampleMask);
+    void OMSetDepthStencilState(
+        [in] ID3D11DepthStencilState *pDepthStencilState,
+        [in] UINT StencilRef);
+    void SOSetTargets(
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppSOTargets,
+        [in] const UINT *pOffsets);
+    void DrawAuto();
+    void DrawIndexedInstancedIndirect(
+        [in] ID3D11Buffer *pBufferForArgs,
+        [in] UINT AlignedByteOffsetForArgs);
+    void DrawInstancedIndirect(
+        [in] ID3D11Buffer *pBufferForArgs,
+        [in] UINT AlignedByteOffsetForArgs);
+    void Dispatch(
+        [in] UINT ThreadGroupCountX,
+        [in] UINT ThreadGroupCountY,
+        [in] UINT ThreadGroupCountZ);
+    void DispatchIndirect(
+        [in] ID3D11Buffer *pBufferForArgs,
+        [in] UINT AlignedByteOffsetForArgs);
+    void RSSetState(
+        [in] ID3D11RasterizerState *pRasterizerState);
+    void RSSetViewports(
+        [in] UINT NumViewports,
+        [in] const D3D11_VIEWPORT *pViewports);
+    void RSSetScissorRects(
+        [in] UINT NumRects,
+        [in] const D3D11_RECT *pRects);
+    void CopySubresourceRegion(
+        [in] ID3D11Resource *pDstResource,
+        [in] UINT DstSubresource,
+        [in] UINT DstX,
+        [in] UINT DstY,
+        [in] UINT DstZ,
+        [in] ID3D11Resource *pSrcResource,
+        [in] UINT SrcSubresource,
+        [in] const D3D11_BOX *pSrcBox);
+    void CopyResource(
+        [in] ID3D11Resource *pDstResource,
+        [in] ID3D11Resource *pSrcResource);
+    void UpdateSubresource(
+        [in] ID3D11Resource *pDstResource,
+        [in] UINT DstSubresource,
+        [in] const D3D11_BOX *pDstBox,
+        [in] const void *pSrcData,
+        [in] UINT SrcRowPitch,
+        [in] UINT SrcDepthPitch);
+    void CopyStructureCount(
+        [in] ID3D11Buffer *pDstBuffer,
+        [in] UINT DstAlignedByteOffset,
+        [in] ID3D11UnorderedAccessView *pSrcView);
+    void ClearRenderTargetView(
+        [in] ID3D11RenderTargetView *pRenderTargetView,
+        [in] const FLOAT ColorRGBA[4]);
+    void ClearUnorderedAccessViewUint(
+        [in] ID3D11UnorderedAccessView *pUnorderedAccessView,
+        [in] const UINT Values[4]);
+    void ClearUnorderedAccessViewFloat(
+        [in] ID3D11UnorderedAccessView *pUnorderedAccessView,
+        [in] const FLOAT Values[4]);
+    void ClearDepthStencilView(
+        [in] ID3D11DepthStencilView *pDepthStencilView,
+        [in] UINT ClearFlags,
+        [in] FLOAT Depth,
+        [in] UINT8 Stencil);
+    void GenerateMips(
+        [in] ID3D11ShaderResourceView *pShaderResourceView);
+    void SetResourceMinLOD(
+        [in] ID3D11Resource *pResource, FLOAT MinLOD);
+    FLOAT GetResourceMinLOD(
+        [in] ID3D11Resource *pResource);
+    void ResolveSubresource(
+        [in] ID3D11Resource *pDstResource,
+        [in] UINT DstSubresource,
+        [in] ID3D11Resource *pSrcResource,
+        [in] UINT SrcSubresource,
+        [in] DXGI_FORMAT Format);
+    void ExecuteCommandList(
+        [in] ID3D11CommandList *pCommandList,
+        BOOL RestoreContextState);
+    void HSSetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+    void HSSetShader(
+        [in] ID3D11HullShader *pHullShader,
+        [in] ID3D11ClassInstance *const *ppClassInstances,
+        UINT NumClassInstances);
+    void HSSetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [in] ID3D11SamplerState *const *ppSamplers);
+    void HSSetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppConstantBuffers);
+    void DSSetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+    void DSSetShader(
+        [in] ID3D11DomainShader *pDomainShader,
+        [in] ID3D11ClassInstance *const *ppClassInstances,
+        UINT NumClassInstances);
+    void DSSetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [in] ID3D11SamplerState *const *ppSamplers);
+    void DSSetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppConstantBuffers);
+    void CSSetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+    void CSSetUnorderedAccessViews(
+        [in] UINT StartSlot,
+        [in] UINT NumUAVs,
+        [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,
+        [in] const UINT *pUAVInitialCounts);
+    void CSSetShader(
+        [in] ID3D11ComputeShader *pComputeShader,
+        [in] ID3D11ClassInstance *const *ppClassInstances,
+        UINT NumClassInstances);
+    void CSSetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [in] ID3D11SamplerState *const *ppSamplers);
+    void CSSetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [in] ID3D11Buffer *const *ppConstantBuffers);
+    void VSGetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppConstantBuffers);
+    void PSGetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+    void PSGetShader(
+        [out] ID3D11PixelShader **ppPixelShader,
+        [out] ID3D11ClassInstance **ppClassInstances,
+        [in, out] UINT *pNumClassInstances);
+    void PSGetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [out] ID3D11SamplerState **ppSamplers);
+    void VSGetShader(
+        [out] ID3D11VertexShader **ppVertexShader,
+        [out] ID3D11ClassInstance **ppClassInstances,
+        [in, out] UINT *pNumClassInstances);
+    void PSGetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppConstantBuffers);
+    void IAGetInputLayout(
+        [out] ID3D11InputLayout **ppInputLayout);
+    void IAGetVertexBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppVertexBuffers,
+        [out] UINT *pStrides,
+        [out] UINT *pOffsets);
+    void IAGetIndexBuffer(
+        [out] ID3D11Buffer **pIndexBuffer,
+        [out] DXGI_FORMAT* Format,
+        [out] UINT* Offset);
+    void GSGetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppConstantBuffers);
+    void GSGetShader(
+        [out] ID3D11GeometryShader **ppGeometryShader,
+        [out] ID3D11ClassInstance **ppClassInstances,
+        [in, out] UINT *pNumClassInstances);
+    void IAGetPrimitiveTopology(
+        [out] D3D11_PRIMITIVE_TOPOLOGY *pTopology);
+    void VSGetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+    void VSGetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [out] ID3D11SamplerState **ppSamplers);
+    void GetPredication(
+        [out] ID3D11Predicate **ppPredicate,
+        [out] BOOL *pPredicateValue);
+    void GSGetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+    void GSGetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [out] ID3D11SamplerState **ppSamplers);
+    void OMGetRenderTargets(
+        [in] UINT NumViews,
+        [out] ID3D11RenderTargetView **ppRenderTargetViews,
+        [out] ID3D11DepthStencilView **ppDepthStencilView);
+    void OMGetRenderTargetsAndUnorderedAccessViews(
+        [in] UINT NumRTVs,
+        [out] ID3D11RenderTargetView **ppRenderTargetViews,
+        [out] ID3D11DepthStencilView **ppDepthStencilView,
+        [in] UINT UAVStartSlot,
+        [out] UINT NumUAVs,
+        [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);
+    void OMGetBlendState(
+        [out] ID3D11BlendState **ppBlendState,
+        [out] FLOAT BlendFactor[4],
+        [out] UINT *pSampleMask);
+    void OMGetDepthStencilState(
+        [out] ID3D11DepthStencilState **ppDepthStencilState,
+        [out] UINT *pStencilRef);
+    void SOGetTargets(
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppSOTargets);
+    void RSGetState(
+        [out] ID3D11RasterizerState **ppRasterizerState);
+    void RSGetViewports(
+        [in, out] UINT *pNumViewports,
+        [out] D3D11_VIEWPORT *pViewports);
+    void RSGetScissorRects(
+        [in, out] UINT *pNumRects,
+        [out] D3D11_RECT *pRects);
+    void HSGetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+    void HSGetShader(
+        [out] ID3D11HullShader **ppHullShader,
+        [out] ID3D11ClassInstance **ppClassInstances,
+        [in, out] UINT *pNumClassInstances);
+    void HSGetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [out] ID3D11SamplerState **ppSamplers);
+    void HSGetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppConstantBuffers);
+    void DSGetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+    void DSGetShader(
+        [out] ID3D11DomainShader **ppDomainShader,
+        [out] ID3D11ClassInstance **ppClassInstances,
+        [in, out] UINT *pNumClassInstances);
+    void DSGetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [out] ID3D11SamplerState **ppSamplers);
+    void DSGetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppConstantBuffers);
+    void CSGetShaderResources(
+        [in] UINT StartSlot,
+        [in] UINT NumViews,
+        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+    void CSGetUnorderedAccessViews(
+        [in] UINT StartSlot,
+        [in] UINT NumUAVs,
+        [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);
+    void CSGetShader(
+        [out] ID3D11ComputeShader **ppComputeShader,
+        [out] ID3D11ClassInstance **ppClassInstances,
+        [in, out] UINT *pNumClassInstances);
+    void CSGetSamplers(
+        [in] UINT StartSlot,
+        [in] UINT NumSamplers,
+        [out] ID3D11SamplerState **ppSamplers);
+    void CSGetConstantBuffers(
+        [in] UINT StartSlot,
+        [in] UINT NumBuffers,
+        [out] ID3D11Buffer **ppConstantBuffers);
+    void ClearState();
+    void Flush();
+    D3D11_DEVICE_CONTEXT_TYPE GetType();
+    UINT GetContextFlags();
+    HRESULT FinishCommandList(
+        BOOL RestoreDeferredContextState,
+        [out] ID3D11CommandList **ppCommandList);
+}
+
+[
+    object,
+    local,
+    uuid(db6f6ddb-ac77-4e88-8253-819df9bbf140)
+]
+interface ID3D11Device : IUnknown
+{
+    HRESULT CreateBuffer(
+        [in] const D3D11_BUFFER_DESC *pDesc,
+        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+        [out] ID3D11Buffer **ppBuffer);
+    HRESULT CreateTexture1D(
+        [in] const D3D11_TEXTURE1D_DESC *pDesc,
+        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+        [out] ID3D11Texture1D **ppTexture1D);
+    HRESULT CreateTexture2D(
+        [in] const D3D11_TEXTURE2D_DESC *pDesc,
+        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+        [out] ID3D11Texture2D **ppTexture2D);
+    HRESULT CreateTexture3D(
+        [in] const D3D11_TEXTURE3D_DESC *pDesc,
+        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+        [out] ID3D11Texture3D **ppTexture3D);
+    HRESULT CreateShaderResourceView(
+        [in] ID3D11Resource *pResource,
+        [in] const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,
+        [out] ID3D11ShaderResourceView **ppSRView);
+    HRESULT CreateUnorderedAccessView(
+        [in] ID3D11Resource *pResource,
+        [in] const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,
+        [out] ID3D11UnorderedAccessView **ppUAView);
+    HRESULT CreateRenderTargetView(
+        [in] ID3D11Resource *pResource,
+        [in] const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,
+        [out] ID3D11RenderTargetView **ppRTView);
+    HRESULT CreateDepthStencilView(
+        [in] ID3D11Resource *pResource,
+        [in] const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,
+        [out] ID3D11DepthStencilView **ppDepthStencilView);
+    HRESULT CreateInputLayout(
+        [in] const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,
+        [in] UINT NumElements,
+        [in] const void *pShaderBytecodeWithInputSignature,
+        [in] SIZE_T BytecodeLength,
+        [out] ID3D11InputLayout **ppInputLayout);
+    HRESULT CreateVertexShader(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11VertexShader **ppVertexShader);
+    HRESULT CreateGeometryShader(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11GeometryShader **ppGeometryShader);
+    HRESULT CreateGeometryShaderWithStreamOutput(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,
+        [in] UINT NumEntries,
+        [in] const UINT *pBufferStrides,
+        [in] UINT NumStrides,
+        [in] UINT RasterizedStream,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11GeometryShader **ppGeometryShader);
+    HRESULT CreatePixelShader(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11PixelShader **ppPixelShader);
+    HRESULT CreateHullShader(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11HullShader **ppHullShader);
+    HRESULT CreateDomainShader(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11DomainShader **ppDomainShader);
+    HRESULT CreateComputeShader(
+        [in] const void *pShaderBytecode,
+        [in] SIZE_T BytecodeLength,
+        [in] ID3D11ClassLinkage *pClassLinkage,
+        [out] ID3D11ComputeShader **ppComputeShader);
+    HRESULT CreateClassLinkage(
+        [out] ID3D11ClassLinkage **ppLinkage);
+    HRESULT CreateBlendState(
+        [in] const D3D11_BLEND_DESC *pBlendStateDesc,
+        [out] ID3D11BlendState **ppBlendState);
+    HRESULT CreateDepthStencilState(
+        [in] const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,
+        [out] ID3D11DepthStencilState **ppDepthStencilState);
+    HRESULT CreateRasterizerState(
+        [in] const D3D11_RASTERIZER_DESC *pRasterizerDesc,
+        [out] ID3D11RasterizerState **ppRasterizerState);
+    HRESULT CreateSamplerState(
+        [in] const D3D11_SAMPLER_DESC *pSamplerDesc,
+        [out] ID3D11SamplerState **ppSamplerState);
+    HRESULT CreateQuery(
+        [in] const D3D11_QUERY_DESC *pQueryDesc,
+        [out] ID3D11Query **ppQuery);
+    HRESULT CreatePredicate(
+        [in] const D3D11_QUERY_DESC *pPredicateDesc,
+        [out] ID3D11Predicate **ppPredicate);
+    HRESULT CreateCounter(
+        [in] const D3D11_COUNTER_DESC *pCounterDesc,
+        [out] ID3D11Counter **ppCounter);
+    HRESULT CreateDeferredContext(
+        UINT ContextFlags,
+        [out] ID3D11DeviceContext **ppDeferredContext);
+    HRESULT OpenSharedResource(
+        [in] HANDLE hResource,
+        [in] REFIID ReturnedInterface,
+        [out] void  **ppResource);
+    HRESULT CheckFormatSupport(
+        [in] DXGI_FORMAT Format,
+        [out] UINT *pFormatSupport);
+    HRESULT CheckMultisampleQualityLevels(
+        [in] DXGI_FORMAT Format,
+        [in] UINT        SampleCount,
+        [out] UINT *pNumQualityLevels);
+    void CheckCounterInfo(
+        [out] D3D11_COUNTER_INFO *pCounterInfo);
+    HRESULT CheckCounter(
+        [in] const D3D11_COUNTER_DESC *pDesc,
+        [out] D3D11_COUNTER_TYPE *pType,
+        [out] UINT *pActiveCounters,
+        [out] LPSTR szName,
+        [in, out] UINT *pNameLength,
+        [out] LPSTR szUnits,
+        [in, out] UINT *pUnitsLength,
+        [out] LPSTR szDescription,
+        [in, out] UINT *pDescriptionLength);
+    HRESULT CheckFeatureSupport(
+        D3D11_FEATURE Feature,
+        [out] void *pFeatureSupportData,
+        UINT FeatureSupportDataSize);
+    HRESULT GetPrivateData(
+        [in] REFGUID guid,
+        [in, out] UINT *pDataSize,
+        [out] void *pData);
+    HRESULT SetPrivateData(
+        [in] REFGUID guid,
+        [in] UINT DataSize,
+        [in] const void *pData);
+    HRESULT SetPrivateDataInterface(
+        [in] REFGUID guid,
+        [in] const IUnknown *pData);
+    D3D_FEATURE_LEVEL GetFeatureLevel();
+    UINT GetCreationFlags();
+    HRESULT GetDeviceRemovedReason();
+    void GetImmediateContext(
+        [out] ID3D11DeviceContext **ppImmediateContext);
+    HRESULT SetExceptionMode(UINT RaiseFlags);
+    UINT GetExceptionMode();
+}
+
+typedef enum D3D11_CREATE_DEVICE_FLAG {
+    D3D11_CREATE_DEVICE_SINGLETHREADED  = 0x0001,
+    D3D11_CREATE_DEVICE_DEBUG           = 0x0002,
+    D3D11_CREATE_DEVICE_SWITCH_TO_REF   = 0x0004,
+    D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x0008,
+    D3D11_CREATE_DEVICE_BGRA_SUPPORT    = 0x0020,
+    D3D11_CREATE_DEVICE_DEBUGGABLE      = 0x0040,
+    D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x0080,
+    D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x0100,
+    D3D11_CREATE_DEVICE_VIDEO_SUPPORT   = 0x0800
+} D3D11_CREATE_DEVICE_FLAG;
+
+const UINT D3D11_SDK_VERSION = 7;
+
+cpp_quote("#include <d3d10_1.h>")
+cpp_quote("#ifndef D3D11_IGNORE_SDK_LAYERS")
+cpp_quote("# include <d3d11sdklayers.h>")
+cpp_quote("#endif")
+cpp_quote("#include <d3d10misc.h>")
+cpp_quote("#include <d3d10shader.h>")
+cpp_quote("#include <d3d10effect.h>")
+cpp_quote("#include <d3d10_1shader.h>")
+
+cpp_quote("typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
+cpp_quote("    const D3D_FEATURE_LEVEL*,UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
+
+cpp_quote("HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,const D3D_FEATURE_LEVEL*," )
+cpp_quote("    UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
+
+cpp_quote("typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
+cpp_quote("    const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,")
+cpp_quote("    D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl
new file mode 100644
index 0000000..aecd877
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl
@@ -0,0 +1,1268 @@
+/*
+ * Copyright 2013 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "d3d11.idl";
+
+typedef enum D3D11_MESSAGE_CATEGORY {
+    D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED,
+    D3D11_MESSAGE_CATEGORY_MISCELLANEOUS,
+    D3D11_MESSAGE_CATEGORY_INITIALIZATION,
+    D3D11_MESSAGE_CATEGORY_CLEANUP,
+    D3D11_MESSAGE_CATEGORY_COMPILATION,
+    D3D11_MESSAGE_CATEGORY_STATE_CREATION,
+    D3D11_MESSAGE_CATEGORY_STATE_SETTING,
+    D3D11_MESSAGE_CATEGORY_STATE_GETTING,
+    D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION,
+    D3D11_MESSAGE_CATEGORY_EXECUTION,
+    D3D11_MESSAGE_CATEGORY_SHADER
+} D3D11_MESSAGE_CATEGORY;
+
+typedef enum D3D11_MESSAGE_SEVERITY {
+    D3D11_MESSAGE_SEVERITY_CORRUPTION,
+    D3D11_MESSAGE_SEVERITY_ERROR,
+    D3D11_MESSAGE_SEVERITY_WARNING,
+    D3D11_MESSAGE_SEVERITY_INFO,
+    D3D11_MESSAGE_SEVERITY_MESSAGE
+} D3D11_MESSAGE_SEVERITY;
+
+typedef enum D3D11_MESSAGE_ID {
+    D3D11_MESSAGE_ID_UNKNOWN = 0,
+    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD,
+    D3D11_MESSAGE_ID_STRING_FROM_APPLICATION,
+    D3D11_MESSAGE_ID_CORRUPTED_THIS,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14,
+    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15,
+    D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING,
+    D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA,
+    D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA,
+    D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN,
+    D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS,
+    D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES,
+    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE,
+    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS,
+    D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC,
+    D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC,
+    D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC,
+    D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC,
+    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE,
+    D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC,
+    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY,
+    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS,
+    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG,
+    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC,
+    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED,
+    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED,
+    D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE,
+    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE,
+    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT,
+    D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR,
+    D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH,
+    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH,
+    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE,
+    D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE,
+    D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE,
+    D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE,
+    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE,
+    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX,
+    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE,
+    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID,
+    D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE,
+    D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED,
+    D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN,
+    D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED,
+    D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE,
+    D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED,
+    D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN,
+    D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED,
+    D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE,
+    D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED,
+    D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN,
+    D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED,
+    D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE,
+    D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED,
+    D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN,
+    D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED,
+    D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED,
+    D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED,
+    D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS,
+    D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN,
+    D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE,
+    D3D11_MESSAGE_ID_REF_THREADING_MODE,
+    D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION,
+    D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION,
+    D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION,
+    D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE,
+    D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER,
+    D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY,
+    D3D11_MESSAGE_ID_REF_INFO,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0,
+    D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT,
+    D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT,
+    D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT,
+    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC,
+    D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH,
+    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW,
+    D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH,
+    D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY,
+    D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY,
+    D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER,
+    D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED,
+    D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,
+    D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN,
+    D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC,
+    D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER,
+    D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,
+    D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE,
+    D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED,
+    D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION,
+    D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE,
+    D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS,
+    D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION,
+    D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS,
+    D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN,
+    D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE,
+    D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS,
+    D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN,
+    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE,
+    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH,
+    D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY,
+    D3D11_MESSAGE_ID_LIVE_BUFFER,
+    D3D11_MESSAGE_ID_LIVE_TEXTURE1D,
+    D3D11_MESSAGE_ID_LIVE_TEXTURE2D,
+    D3D11_MESSAGE_ID_LIVE_TEXTURE3D,
+    D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW,
+    D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW,
+    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW,
+    D3D11_MESSAGE_ID_LIVE_VERTEXSHADER,
+    D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER,
+    D3D11_MESSAGE_ID_LIVE_PIXELSHADER,
+    D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT,
+    D3D11_MESSAGE_ID_LIVE_SAMPLER,
+    D3D11_MESSAGE_ID_LIVE_BLENDSTATE,
+    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE,
+    D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE,
+    D3D11_MESSAGE_ID_LIVE_QUERY,
+    D3D11_MESSAGE_ID_LIVE_PREDICATE,
+    D3D11_MESSAGE_ID_LIVE_COUNTER,
+    D3D11_MESSAGE_ID_LIVE_DEVICE,
+    D3D11_MESSAGE_ID_LIVE_SWAPCHAIN,
+    D3D11_MESSAGE_ID_D3D10_MESSAGES_END,
+
+    D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x00100000,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE,
+    D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS,
+    D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D,
+    D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE,
+    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS,
+    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS,
+    D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX,
+    D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS,
+    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS,
+    D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY,
+    D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK,
+    D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK,
+    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE,
+    D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER,
+    D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE,
+    D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT,
+    D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES,
+    D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED,
+    D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE,
+    D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3,
+    D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED,
+    D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO,
+    D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION,
+    D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR,
+    D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA,
+    D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP,
+    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT,
+    D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES,
+    D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END,
+
+    D3D11_MESSAGE_ID_D3D11_MESSAGES_START = 0x00200000,
+    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS,
+    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED,
+    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN,
+    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT,
+    D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES,
+    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES,
+    D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL,
+    D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL,
+    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH,
+    D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD,
+    D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE,
+    D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS,
+    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH,
+    D3D11_MESSAGE_ID_CREATE_CONTEXT,
+    D3D11_MESSAGE_ID_LIVE_CONTEXT,
+    D3D11_MESSAGE_ID_DESTROY_CONTEXT,
+    D3D11_MESSAGE_ID_CREATE_BUFFER,
+    D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_BUFFER,
+    D3D11_MESSAGE_ID_CREATE_TEXTURE1D,
+    D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_TEXTURE1D,
+    D3D11_MESSAGE_ID_CREATE_TEXTURE2D,
+    D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_TEXTURE2D,
+    D3D11_MESSAGE_ID_CREATE_TEXTURE3D,
+    D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_TEXTURE3D,
+    D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW,
+    D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW,
+    D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW,
+    D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW,
+    D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW,
+    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW,
+    D3D11_MESSAGE_ID_CREATE_VERTEXSHADER,
+    D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER,
+    D3D11_MESSAGE_ID_CREATE_HULLSHADER,
+    D3D11_MESSAGE_ID_LIVE_HULLSHADER,
+    D3D11_MESSAGE_ID_DESTROY_HULLSHADER,
+    D3D11_MESSAGE_ID_CREATE_DOMAINSHADER,
+    D3D11_MESSAGE_ID_LIVE_DOMAINSHADER,
+    D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER,
+    D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER,
+    D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER,
+    D3D11_MESSAGE_ID_CREATE_PIXELSHADER,
+    D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_PIXELSHADER,
+    D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT,
+    D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT,
+    D3D11_MESSAGE_ID_CREATE_SAMPLER,
+    D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_SAMPLER,
+    D3D11_MESSAGE_ID_CREATE_BLENDSTATE,
+    D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_BLENDSTATE,
+    D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE,
+    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE,
+    D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE,
+    D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE,
+    D3D11_MESSAGE_ID_CREATE_QUERY,
+    D3D11_MESSAGE_ID_LIVE_QUERY_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_QUERY,
+    D3D11_MESSAGE_ID_CREATE_PREDICATE,
+    D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7,
+    D3D11_MESSAGE_ID_DESTROY_PREDICATE,
+    D3D11_MESSAGE_ID_CREATE_COUNTER,
+    D3D11_MESSAGE_ID_DESTROY_COUNTER,
+    D3D11_MESSAGE_ID_CREATE_COMMANDLIST,
+    D3D11_MESSAGE_ID_LIVE_COMMANDLIST,
+    D3D11_MESSAGE_ID_DESTROY_COMMANDLIST,
+    D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE,
+    D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE,
+    D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE,
+    D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE,
+    D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE,
+    D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE,
+    D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7,
+    D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7,
+    D3D11_MESSAGE_ID_CREATE_COMPUTESHADER,
+    D3D11_MESSAGE_ID_LIVE_COMPUTESHADER,
+    D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER,
+    D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW,
+    D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW,
+    D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA,
+    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS,
+    D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL,
+    D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE,
+    D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE,
+    D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD,
+    D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL,
+    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE,
+    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE,
+    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE,
+    D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP,
+    D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD,
+    D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH,
+    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT,
+    D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD,
+    D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT,
+    D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY,
+    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY,
+    D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO,
+    D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH,
+    D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED,
+    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET,
+    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET,
+    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE,
+    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE,
+    D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW,
+    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET,
+    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS,
+    D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED,
+    D3D11_MESSAGE_ID_REF_WARNING,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV,
+    D3D11_MESSAGE_ID_SHADER_ABORT,
+    D3D11_MESSAGE_ID_SHADER_MESSAGE,
+    D3D11_MESSAGE_ID_SHADER_ERROR,
+    D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT,
+    D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN,
+    D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE,
+    D3D11_MESSAGE_ID_D3D11_MESSAGES_END,
+
+    D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START = 0x00300000,
+    D3D11_MESSAGE_ID_CREATE_VIDEODECODER,
+    D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM,
+    D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR,
+    D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW,
+    D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW,
+    D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW,
+    D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE,
+    D3D11_MESSAGE_ID_LIVE_VIDEODECODER,
+    D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM,
+    D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR,
+    D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW,
+    D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW,
+    D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW,
+    D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE,
+    D3D11_MESSAGE_ID_DESTROY_VIDEODECODER,
+    D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM,
+    D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR,
+    D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW,
+    D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW,
+    D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW,
+    D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE,
+    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS,
+    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL,
+    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID,
+    D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS,
+    D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS,
+    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE,
+    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX,
+    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM,
+    D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX,
+    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM,
+    D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM,
+    D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER,
+    D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE,
+    D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED,
+    D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM,
+    D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE,
+    D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED,
+    D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM,
+    D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD,
+    D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM,
+    D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM,
+    D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE,
+    D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM,
+    D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM,
+    D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY,
+    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT,
+    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS,
+    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER,
+    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER,
+    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER,
+    D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE,
+    D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT,
+    D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE,
+    D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD,
+    D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD,
+    D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD,
+    D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE,
+    D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE,
+    D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED,
+    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED,
+    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED,
+    D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM,
+    D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE,
+    D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM,
+    D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM,
+    D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE,
+    D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM,
+    D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM,
+    D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX,
+    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM,
+    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED,
+    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE,
+    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN,
+    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL,
+    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL,
+    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM,
+    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE,
+    D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL,
+    D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM,
+    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM,
+    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL,
+    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY,
+    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE,
+    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX,
+    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM,
+    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL,
+    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE,
+    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE,
+    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE,
+    D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+    D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+    D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+    D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+    D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+    D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+    D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE,
+    D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE,
+    D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY,
+    D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY,
+    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM,
+    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE,
+    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND,
+    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM,
+    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW,
+    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED,
+    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET,
+    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS,
+    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED,
+    D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED,
+    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1,
+    D3D11_MESSAGE_ID_GETDC_INACCESSIBLE,
+    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9,
+    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED,
+    D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA,
+    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA,
+    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT,
+    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT,
+    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX,
+    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET,
+    D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT,
+    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT,
+    D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END
+} D3D11_MESSAGE_ID;
+
+typedef struct D3D11_MESSAGE {
+    D3D11_MESSAGE_CATEGORY Category;
+    D3D11_MESSAGE_SEVERITY Severity;
+    D3D11_MESSAGE_ID ID;
+    const char *pDescription;
+    SIZE_T DescriptionByteLength;
+} D3D11_MESSAGE;
+
+typedef struct D3D11_INFO_QUEUE_FILTER_DESC {
+    UINT NumCategories;
+    D3D11_MESSAGE_CATEGORY *pCategoryList;
+    UINT NumSeverities;
+    D3D11_MESSAGE_SEVERITY *pSeverityList;
+    UINT NumIDs;
+    D3D11_MESSAGE_ID *pIDList;
+} D3D11_INFO_QUEUE_FILTER_DESC;
+
+typedef struct D3D11_INFO_QUEUE_FILTER {
+    D3D11_INFO_QUEUE_FILTER_DESC AllowList;
+    D3D11_INFO_QUEUE_FILTER_DESC DenyList;
+} D3D11_INFO_QUEUE_FILTER;
+
+cpp_quote("#define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024")
+
+[
+    object,
+    uuid(6543dbb6-1b48-42f5-ab82-e97ec74326f6),
+    local,
+    pointer_default(unique)
+]
+interface ID3D11InfoQueue : IUnknown {
+    HRESULT SetMessageCountLimit(UINT64 MessageCountLimit);
+    void ClearStoredMessages();
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetMessage")
+cpp_quote("#endif")
+    HRESULT GetMessage(UINT64 MessageIndex, D3D11_MESSAGE* pMessage, SIZE_T *pMessageByteLength);
+
+    UINT64 GetNumMessagesAllowedByStorageFilter();
+    UINT64 GetNumMessagesDeniedByStorageFilter();
+    UINT64 GetNumStoredMessages();
+    UINT64 GetNumStoredMessagesAllowedByRetrievalFilter();
+    UINT64 GetNumMessagesDiscardedByMessageCountLimit();
+    UINT64 GetMessageCountLimit();
+    HRESULT AddStorageFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter);
+    HRESULT GetStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength);
+    void ClearStorageFilter();
+    HRESULT PushEmptyStorageFilter();
+    HRESULT PushCopyOfStorageFilter();
+    HRESULT PushStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter);
+    void PopStorageFilter();
+    UINT GetStorageFilterStackSize();
+    HRESULT AddRetrievalFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter);
+    HRESULT GetRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength);
+    void ClearRetrievalFilter();
+    HRESULT PushEmptyRetrievalFilter();
+    HRESULT PushCopyOfRetrievalFilter();
+    HRESULT PushRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter);
+    void PopRetrievalFilter();
+    UINT GetRetrievalFilterStackSize();
+    HRESULT AddMessage(D3D11_MESSAGE_CATEGORY Category, D3D11_MESSAGE_SEVERITY Severity,
+            D3D11_MESSAGE_ID ID, LPCSTR pDescription);
+    HRESULT AddApplicationMessage(D3D11_MESSAGE_SEVERITY Severity, LPCSTR pDescription);
+    HRESULT SetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category, BOOL bEnable);
+    HRESULT SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity, BOOL bEnable);
+    HRESULT SetBreakOnID(D3D11_MESSAGE_ID ID, BOOL bEnable);
+    BOOL GetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category);
+    BOOL GetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity);
+    BOOL GetBreakOnID(D3D11_MESSAGE_ID ID);
+    void SetMuteDebugOutput(BOOL bMute);
+    BOOL GetMuteDebugOutput();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h
new file mode 100644
index 0000000..3786d64
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2010 Matteo Bruni 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3D11SHADER_H__
+#define __D3D11SHADER_H__
+
+#include "d3dcommon.h"
+
+/* These are defined as version-neutral in d3dcommon.h */
+typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;
+
+typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;
+
+typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;
+
+typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;
+
+typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;
+
+typedef struct _D3D11_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;
+    D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
+    UINT GSMaxOutputVertexCount;
+    D3D_PRIMITIVE InputPrimitive;
+    UINT PatchConstantParameters;
+    UINT cGSInstanceCount;
+    UINT cControlPoints;
+    D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;
+    D3D_TESSELLATOR_PARTITIONING HSPartitioning;
+    D3D_TESSELLATOR_DOMAIN TessellatorDomain;
+    UINT cBarrierInstructions;
+    UINT cInterlockedInstructions;
+    UINT cTextureStoreInstructions;
+} D3D11_SHADER_DESC;
+
+typedef struct _D3D11_SHADER_VARIABLE_DESC
+{
+    const char *Name;
+    UINT StartOffset;
+    UINT Size;
+    UINT uFlags;
+    void *DefaultValue;
+    UINT StartTexture;
+    UINT TextureSize;
+    UINT StartSampler;
+    UINT SamplerSize;
+} D3D11_SHADER_VARIABLE_DESC;
+
+typedef struct _D3D11_SHADER_TYPE_DESC
+{
+    D3D_SHADER_VARIABLE_CLASS Class;
+    D3D_SHADER_VARIABLE_TYPE Type;
+    UINT Rows;
+    UINT Columns;
+    UINT Elements;
+    UINT Members;
+    UINT Offset;
+    const char *Name;
+} D3D11_SHADER_TYPE_DESC;
+
+typedef struct _D3D11_SHADER_BUFFER_DESC
+{
+    const char *Name;
+    D3D_CBUFFER_TYPE Type;
+    UINT Variables;
+    UINT Size;
+    UINT uFlags;
+} D3D11_SHADER_BUFFER_DESC;
+
+typedef struct _D3D11_SHADER_INPUT_BIND_DESC
+{
+    const char *Name;
+    D3D_SHADER_INPUT_TYPE Type;
+    UINT BindPoint;
+    UINT BindCount;
+    UINT uFlags;
+    D3D_RESOURCE_RETURN_TYPE ReturnType;
+    D3D_SRV_DIMENSION Dimension;
+    UINT NumSamples;
+} D3D11_SHADER_INPUT_BIND_DESC;
+
+typedef struct _D3D11_SIGNATURE_PARAMETER_DESC
+{
+    const char *SemanticName;
+    UINT SemanticIndex;
+    UINT Register;
+    D3D_NAME SystemValueType;
+    D3D_REGISTER_COMPONENT_TYPE ComponentType;
+    BYTE Mask;
+    BYTE ReadWriteMask;
+    UINT Stream;
+} D3D11_SIGNATURE_PARAMETER_DESC;
+
+DEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);
+
+#define INTERFACE ID3D11ShaderReflectionType
+DECLARE_INTERFACE(ID3D11ShaderReflectionType)
+{
+    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_TYPE_DESC *desc) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE;
+    STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE;
+    STDMETHOD(IsEqual)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetSubType)(THIS) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetBaseClass)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetInterfaceByIndex)(THIS_ UINT index) PURE;
+    STDMETHOD(IsOfType)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;
+    STDMETHOD(ImplementsInterface)(THIS_ ID3D11ShaderReflectionType *base) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);
+
+#define INTERFACE ID3D11ShaderReflectionVariable
+DECLARE_INTERFACE(ID3D11ShaderReflectionVariable)
+{
+    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_VARIABLE_DESC *desc) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetType)(THIS) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetBuffer)(THIS) PURE;
+    STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ UINT index) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);
+
+#define INTERFACE ID3D11ShaderReflectionConstantBuffer
+DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer)
+{
+    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *desc) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);
+
+#define INTERFACE ID3D11ShaderReflection
+DECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown)
+{
+    /* IUnknown methods */
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /* ID3D11ShaderReflection methods */
+    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_DESC *desc) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;
+    STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
+    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
+    STDMETHOD(GetPatchConstantParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
+    STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;
+    STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;
+    STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;
+    STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;
+    STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;
+    STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;
+    STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;
+    STDMETHOD(GetMinFeatureLevel)(THIS_ enum D3D_FEATURE_LEVEL *level) PURE;
+    STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ UINT *sizex, UINT *sizey, UINT *sizez) PURE;
+};
+#undef INTERFACE
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h
new file mode 100644
index 0000000..cba8aab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h
@@ -0,0 +1,1162 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8_H
+#define __WINE_D3D8_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION  0x0800
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <windows.h>
+#include <d3d8types.h>
+#include <d3d8caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE                  __MSABI_LONG(0x00000002)
+#define D3DCREATE_MULTITHREADED                 __MSABI_LONG(0x00000004)
+#define D3DCREATE_PUREDEVICE                    __MSABI_LONG(0x00000010)
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000020)
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000040)
+#define D3DCREATE_MIXED_VERTEXPROCESSING        __MSABI_LONG(0x00000080)
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN                         __MSABI_LONG(0x00000001)
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION              220
+#define D3DADAPTER_DEFAULT           0
+#define D3DENUM_NO_WHQL_LEVEL        2
+
+#define _FACD3D  0x876
+#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
+
+/*
+ * Direct3D Errors
+ */
+#define D3D_OK                                  S_OK
+#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
+
+#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D8,              0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);
+typedef struct IDirect3D8 *LPDIRECT3D8;
+
+DEFINE_GUID(IID_IDirect3DDevice8,        0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF);
+typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8;
+
+DEFINE_GUID(IID_IDirect3DResource8,      0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F);
+typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer8,  0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95);
+typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DVolume8,        0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0);
+typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;
+
+DEFINE_GUID(IID_IDirect3DSwapChain8,     0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD);
+typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;
+
+DEFINE_GUID(IID_IDirect3DSurface8,       0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD);
+typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer8,   0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86);
+typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture8,   0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E);
+typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DTexture8,       0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58);
+typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture8,   0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50);
+typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD);
+typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;
+
+/*****************************************************************************
+ * IDirect3D8 interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirect3D8
+DECLARE_INTERFACE_(IDirect3D8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D8 methods ***/
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;
+    STDMETHOD_(UINT,GetAdapterCount             )(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT  Adapter, DWORD  Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE;
+    STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT  Adapter) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT  Adapter, UINT  Mode, D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT  Adapter, D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT  Adapter, D3DDEVTYPE  CheckType, D3DFORMAT  DisplayFormat, D3DFORMAT  BackBufferFormat, BOOL  Windowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, DWORD  Usage, D3DRESOURCETYPE  RType, D3DFORMAT  CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  SurfaceFormat, BOOL  Windowed, D3DMULTISAMPLE_TYPE  MultiSampleType) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, D3DFORMAT  RenderTargetFormat, D3DFORMAT  DepthStencilFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DCAPS8 * pCaps) PURE;
+    STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT  Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType,HWND  hFocusWindow, DWORD  BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b)                    (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D8_AddRef(p)                                (p)->lpVtbl->AddRef(p)
+#define IDirect3D8_Release(p)                               (p)->lpVtbl->Release(p)
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D8_GetAdapterCount(p)                       (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->lpVtbl->GetAdapterModeCount(p,a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b)                    (p)->QueryInterface(a,b)
+#define IDirect3D8_AddRef(p)                                (p)->AddRef()
+#define IDirect3D8_Release(p)                               (p)->Release()
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->RegisterSoftwareDevice(a)
+#define IDirect3D8_GetAdapterCount(p)                       (p)->GetAdapterCount()
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->GetAdapterModeCount(a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->EnumAdapterModes(a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->GetAdapterMonitor(a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume8 interface
+ */
+#define INTERFACE IDirect3DVolume8
+DECLARE_INTERFACE_(IDirect3DVolume8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVolume8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID   refguid,void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE;
+    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+    STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume8_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolume8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolume8_Release(p)                   (p)->Release()
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DVolume8_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)
+#define IDirect3DVolume8_UnlockBox(p)                 (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain8 interface
+ */
+#define INTERFACE IDirect3DSwapChain8
+DECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain8 methods ***/
+    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+            const RGNDATA *dirty_region) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer, D3DBACKBUFFER_TYPE  Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c)             (p)->lpVtbl->Present(p,a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSwapChain8_Release(p)                   (p)->Release()
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c)             (p)->Present(a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface8 interface
+ */
+#define INTERFACE IDirect3DSurface8
+DECLARE_INTERFACE_(IDirect3DSurface8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSurface8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+    STDMETHOD(UnlockRect)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface8_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSurface8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSurface8_Release(p)                   (p)->Release()
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DSurface8_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)
+#define IDirect3DSurface8_UnlockRect(p)                (p)->UnlockRect()
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource8 interface
+ */
+#define INTERFACE IDirect3DResource8
+DECLARE_INTERFACE_(IDirect3DResource8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource8_GetType(p)                   (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DResource8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DResource8_Release(p)                   (p)->Release()
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DResource8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DResource8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DResource8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DResource8_GetType(p)                   (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer8 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer8
+DECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DVertexBuffer8 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC  * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVertexBuffer8_Release(p)                   (p)->Release()
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVertexBuffer8_GetType(p)                   (p)->GetType()
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->Unlock()
+#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer8 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer8
+DECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DIndexBuffer8 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DIndexBuffer8_Release(p)                   (p)->Release()
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DIndexBuffer8_GetType(p)                   (p)->GetType()
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->Unlock()
+#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture8 interface
+ */
+#define INTERFACE IDirect3DBaseTexture8
+DECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DBaseTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DBaseTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DBaseTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture8 interface
+ */
+#define INTERFACE IDirect3DCubeTexture8
+DECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DCubeTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect,
+            const RECT *rect, DWORD flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DCubeTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DCubeTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DCubeTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture8 interface
+ */
+#define INTERFACE IDirect3DTexture8
+DECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(GetSurfaceLevel)(THIS_ UINT  Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE;
+    STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ UINT  Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a)              (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a)              (p)->UnlockRect(a)
+#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture8 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture8
+DECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DVolumeTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DVOLUME_DESC * pDesc) PURE;
+    STDMETHOD(GetVolumeLevel)(THIS_ UINT  Level,IDirect3DVolume8 ** ppVolumeLevel) PURE;
+    STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+    STDMETHOD(UnlockBox)(THIS_ UINT  Level) PURE;
+    STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolumeTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVolumeTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice8 interface
+ */
+#define INTERFACE IDirect3DDevice8
+DECLARE_INTERFACE_(IDirect3DDevice8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice8 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD  Bytes) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS  * pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT  XHotSpot, UINT  YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE;
+    STDMETHOD_(void,SetCursorPosition)(THIS_ UINT  XScreenSpace, UINT  YScreenSpace,DWORD  Flags) PURE;
+    STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL  bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+            const RGNDATA *dirty_region) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer,D3DBACKBUFFER_TYPE  Type,IDirect3DSurface8 ** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD flags, const D3DGAMMARAMP *ramp) PURE;
+    STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT  Width,UINT  Height,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DTexture8 ** ppTexture) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT  Width,UINT  Height,UINT  Depth,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT  EdgeLength,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT  Length,DWORD  Usage,DWORD  FVF,D3DPOOL  Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT  Length,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,BOOL  Lockable,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CreateImageSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 *src_surface, const RECT *src_rects,
+            UINT rect_count, IDirect3DSurface8 *dst_surface, const POINT *dst_points) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE;
+    STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags, D3DCOLOR color,
+            float z, DWORD stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE  State,D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT8 *viewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL8 *material) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT8 *light) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD  Index,D3DLIGHT8 * pLight) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD  Index,BOOL  Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD  Index,BOOL * pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD  Index,float * pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD  Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD * pValue) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE;
+    STDMETHOD(ApplyStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(CaptureStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(DeleteStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE  Type,DWORD * pToken) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS8 *clip_status) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 ** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 * pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD * pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD  Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE;
+    STDMETHOD(GetInfo)(THIS_ DWORD  DevInfoID,void * pDevInfoStruct,DWORD  DevInfoStructSize) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT  PaletteNumber,PALETTEENTRY * pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT  PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT  * PaletteNumber) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  StartVertex,UINT  PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  minIndex,UINT  NumVertices,UINT  startIndex,UINT  primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT primitive_count,
+            const void *data, UINT stride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx,
+            UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format,
+            const void *data, UINT stride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT  SrcStartIndex,UINT  DestIndex,UINT  VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD  Flags) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ const DWORD *declaration, const DWORD *byte_code,
+            DWORD *shader, DWORD usage) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE;
+    STDMETHOD(DeleteVertexShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE;
+    STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT  Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT  BaseVertexIndex) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, DWORD *shader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE;
+    STDMETHOD(DeletePixelShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE;
+    STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count,
+            const D3DRECTPATCH_INFO *patch_info) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count,
+            const D3DTRIPATCH_INFO *patch_info) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT  Handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice8_AddRef(p)                                 (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice8_Release(p)                                (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)
+#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice8_Reset(p,a)                                (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->lpVtbl->SetGammaRamp(p,a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->lpVtbl->GetGammaRamp(p,a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->lpVtbl->CopyRects(p,a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->lpVtbl->GetFrontBuffer(p,a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice8_BeginScene(p)                             (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice8_EndScene(p)                               (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice8_SetViewport(p,a)                          (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice8_GetViewport(p,a)                          (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->lpVtbl->GetInfo(p,a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->lpVtbl->processVertices(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->lpVtbl->DeleteVertexShader(p,a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->lpVtbl->SetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->lpVtbl->GetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->lpVtbl->SetIndices(p,a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->lpVtbl->GetIndices(p,a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->lpVtbl->DeletePixelShader(p,a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->lpVtbl->DeletePatch(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->QueryInterface(a,b)
+#define IDirect3DDevice8_AddRef(p)                                 (p)->AddRef()
+#define IDirect3DDevice8_Release(p)                                (p)->Release()
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->TestCooperativeLevel()
+#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->GetAvailableTextureMem()
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->ResourceManagerDiscardBytes(a)
+#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->GetDirect3D(a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->GetDeviceCaps(a)
+#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->GetDisplayMode(a)
+#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->GetCreationParameters(a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->ShowCursor(a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice8_Reset(p,a)                                (p)->Reset(a)
+#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->Present(a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->GetBackBuffer(a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->GetRasterStatus(a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->SetGammaRamp(a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->GetGammaRamp(a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->CreateTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->CreateCubeTexture(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->CreateVertexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->CreateIndexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->CreateRenderTarget(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->CreateDepthStencilSurface(a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->CreateImageSurface(a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->CopyRects(a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->UpdateTexture(a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->GetFrontBuffer(a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->GetRenderTarget(a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice8_BeginScene(p)                             (p)->BeginScene()
+#define IDirect3DDevice8_EndScene(p)                               (p)->EndScene()
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->SetTransform(a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->GetTransform(a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice8_SetViewport(p,a)                          (p)->SetViewport(a)
+#define IDirect3DDevice8_GetViewport(p,a)                          (p)->GetViewport(a)
+#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->SetMaterial(a)
+#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->GetMaterial(a)
+#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->SetLight(a,b)
+#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->GetLight(a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->LightEnable(a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->GetLightEnable(a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->SetClipPlane(a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->GetClipPlane(a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->SetRenderState(a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->GetRenderState(a,b)
+#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->BeginStateBlock()
+#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->EndStateBlock(a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->ApplyStateBlock(a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->CaptureStateBlock(a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->DeleteStateBlock(a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->SetClipStatus(a)
+#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->GetClipStatus(a)
+#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->GetTexture(a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->SetTexture(a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->ValidateDevice(a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->GetInfo(a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->DrawIndexedPrimitive(a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->processVertices(a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->CreateVertexShader(a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->SetVertexShader(a)
+#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->GetVertexShader(a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->DeleteVertexShader(a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->SetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->GetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->GetVertexShaderDeclaration(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->GetVertexShaderFunction(a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->SetStreamSource(a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->GetStreamSource(a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->SetIndices(a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->GetIndices(a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->SetPixelShader(a)
+#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->GetPixelShader(a)
+#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->DeletePixelShader(a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->SetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->GetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->GetPixelShaderFunction(a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->DeletePatch(a)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* defined(__cplusplus) */
+
+/* Define the main entrypoint as well */
+IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_D3D8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h
new file mode 100644
index 0000000..e49c393
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8CAPS_H
+#define __WINE_D3D8CAPS_H
+
+/*
+ * Definitions
+ */
+
+#define D3DCAPS_READ_SCANLINE 0x20000
+
+#define D3DCURSORCAPS_COLOR   1
+#define D3DCURSORCAPS_LOWRES  2
+
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY     0x0000010
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY      0x0000020
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY    0x0000040
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY     0x0000080
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY     0x0000100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY      0x0000200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX        0x0000400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP      0x0000800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM   0x0001000
+#define D3DDEVCAPS_DRAWPRIMITIVES2         0x0002000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x0008000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x0010000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x0020000
+#define D3DDEVCAPS_HWRASTERIZATION         0x0080000
+#define D3DDEVCAPS_PUREDEVICE              0x0100000
+#define D3DDEVCAPS_QUINTICRTPATCHES        0x0200000
+#define D3DDEVCAPS_RTPATCHES               0x0400000
+#define D3DDEVCAPS_RTPATCHHANDLEZERO       0x0800000
+#define D3DDEVCAPS_NPATCHES                0x1000000
+
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK  0x00FFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000
+#define D3DFVFCAPS_PSIZE              0x100000
+
+#define D3DLINECAPS_TEXTURE           0x01
+#define D3DLINECAPS_ZTEST             0x02
+#define D3DLINECAPS_BLEND             0x04
+#define D3DLINECAPS_ALPHACMP          0x08
+#define D3DLINECAPS_FOG               0x10
+
+#define D3DPBLENDCAPS_ZERO            0x0001
+#define D3DPBLENDCAPS_ONE             0x0002
+#define D3DPBLENDCAPS_SRCCOLOR        0x0004
+#define D3DPBLENDCAPS_INVSRCCOLOR     0x0008
+#define D3DPBLENDCAPS_SRCALPHA        0x0010
+#define D3DPBLENDCAPS_INVSRCALPHA     0x0020
+#define D3DPBLENDCAPS_DESTALPHA       0x0040
+#define D3DPBLENDCAPS_INVDESTALPHA    0x0080
+#define D3DPBLENDCAPS_DESTCOLOR       0x0100
+#define D3DPBLENDCAPS_INVDESTCOLOR    0x0200
+#define D3DPBLENDCAPS_SRCALPHASAT     0x0400
+#define D3DPBLENDCAPS_BOTHSRCALPHA    0x0800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x1000
+
+#define D3DPCMPCAPS_NEVER        0x01
+#define D3DPCMPCAPS_LESS         0x02
+#define D3DPCMPCAPS_EQUAL        0x04
+#define D3DPCMPCAPS_LESSEQUAL    0x08
+#define D3DPCMPCAPS_GREATER      0x10
+#define D3DPCMPCAPS_NOTEQUAL     0x20
+#define D3DPCMPCAPS_GREATEREQUAL 0x40
+#define D3DPCMPCAPS_ALWAYS       0x80
+
+#define D3DPMISCCAPS_MASKZ                 0x0002
+#define D3DPMISCCAPS_LINEPATTERNREP        0x0004
+#define D3DPMISCCAPS_CULLNONE              0x0010
+#define D3DPMISCCAPS_CULLCW                0x0020
+#define D3DPMISCCAPS_CULLCCW               0x0040
+#define D3DPMISCCAPS_COLORWRITEENABLE      0x0080
+#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x0100
+#define D3DPMISCCAPS_CLIPTLVERTS           0x0200
+#define D3DPMISCCAPS_TSSARGTEMP            0x0400
+#define D3DPMISCCAPS_BLENDOP               0x0800
+
+#define D3DPRASTERCAPS_DITHER                     0x00000001
+#define D3DPRASTERCAPS_PAT                        0x00000008
+#define D3DPRASTERCAPS_ZTEST                      0x00000010
+#define D3DPRASTERCAPS_FOGVERTEX                  0x00000080
+#define D3DPRASTERCAPS_FOGTABLE                   0x00000100
+#define D3DPRASTERCAPS_ANTIALIASEDGES             0x00001000
+#define D3DPRASTERCAPS_MIPMAPLODBIAS              0x00002000
+#define D3DPRASTERCAPS_ZBIAS                      0x00004000
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR             0x00008000
+#define D3DPRASTERCAPS_FOGRANGE                   0x00010000
+#define D3DPRASTERCAPS_ANISOTROPY                 0x00020000
+#define D3DPRASTERCAPS_WBUFFER                    0x00040000
+#define D3DPRASTERCAPS_WFOG                       0x00100000
+#define D3DPRASTERCAPS_ZFOG                       0x00200000
+#define D3DPRASTERCAPS_COLORPERSPECTIVE           0x00400000
+#define D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE      0x00800000
+
+#define D3DPRESENT_INTERVAL_DEFAULT               0x00000000
+#define D3DPRESENT_INTERVAL_ONE                   0x00000001
+#define D3DPRESENT_INTERVAL_TWO                   0x00000002
+#define D3DPRESENT_INTERVAL_THREE                 0x00000004
+#define D3DPRESENT_INTERVAL_FOUR                  0x00000008
+#define D3DPRESENT_INTERVAL_IMMEDIATE             0x80000000
+
+#define D3DPSHADECAPS_COLORGOURAUDRGB             0x00008
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB          0x00200
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND           0x04000
+#define D3DPSHADECAPS_FOGGOURAUD                  0x80000
+
+#define D3DPTADDRESSCAPS_WRAP                     0x01
+#define D3DPTADDRESSCAPS_MIRROR                   0x02
+#define D3DPTADDRESSCAPS_CLAMP                    0x04
+#define D3DPTADDRESSCAPS_BORDER                   0x08
+#define D3DPTADDRESSCAPS_INDEPENDENTUV            0x10
+#define D3DPTADDRESSCAPS_MIRRORONCE               0x20
+
+#define D3DPTEXTURECAPS_PERSPECTIVE              0x00001
+#define D3DPTEXTURECAPS_POW2                     0x00002
+#define D3DPTEXTURECAPS_ALPHA                    0x00004
+#define D3DPTEXTURECAPS_SQUAREONLY               0x00020
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00040
+#define D3DPTEXTURECAPS_ALPHAPALETTE             0x00080
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL       0x00100
+#define D3DPTEXTURECAPS_PROJECTED                0x00400
+#define D3DPTEXTURECAPS_CUBEMAP                  0x00800
+#define D3DPTEXTURECAPS_VOLUMEMAP                0x02000
+#define D3DPTEXTURECAPS_MIPMAP                   0x04000
+#define D3DPTEXTURECAPS_MIPVOLUMEMAP             0x08000
+#define D3DPTEXTURECAPS_MIPCUBEMAP               0x10000
+#define D3DPTEXTURECAPS_CUBEMAP_POW2             0x20000
+#define D3DPTEXTURECAPS_VOLUMEMAP_POW2           0x40000
+
+#define D3DPTFILTERCAPS_MINFPOINT                0x00000100
+#define D3DPTFILTERCAPS_MINFLINEAR               0x00000200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC          0x00000400
+#define D3DPTFILTERCAPS_MIPFPOINT                0x00010000
+#define D3DPTFILTERCAPS_MIPFLINEAR               0x00020000
+#define D3DPTFILTERCAPS_MAGFPOINT                0x01000000
+#define D3DPTFILTERCAPS_MAGFLINEAR               0x02000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC          0x04000000
+#define D3DPTFILTERCAPS_MAGFAFLATCUBIC           0x08000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC        0x10000000
+
+#define D3DSTENCILCAPS_KEEP                      0x01
+#define D3DSTENCILCAPS_ZERO                      0x02
+#define D3DSTENCILCAPS_REPLACE                   0x04
+#define D3DSTENCILCAPS_INCRSAT                   0x08
+#define D3DSTENCILCAPS_DECRSAT                   0x10
+#define D3DSTENCILCAPS_INVERT                    0x20
+#define D3DSTENCILCAPS_INCR                      0x40
+#define D3DSTENCILCAPS_DECR                      0x80
+
+#define D3DTEXOPCAPS_DISABLE                     0x0000001
+#define D3DTEXOPCAPS_SELECTARG1                  0x0000002
+#define D3DTEXOPCAPS_SELECTARG2                  0x0000004
+#define D3DTEXOPCAPS_MODULATE                    0x0000008
+#define D3DTEXOPCAPS_MODULATE2X                  0x0000010
+#define D3DTEXOPCAPS_MODULATE4X                  0x0000020
+#define D3DTEXOPCAPS_ADD                         0x0000040
+#define D3DTEXOPCAPS_ADDSIGNED                   0x0000080
+#define D3DTEXOPCAPS_ADDSIGNED2X                 0x0000100
+#define D3DTEXOPCAPS_SUBTRACT                    0x0000200
+#define D3DTEXOPCAPS_ADDSMOOTH                   0x0000400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA           0x0000800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA           0x0001000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA            0x0002000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM         0x0004000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA           0x0008000
+#define D3DTEXOPCAPS_PREMODULATE                 0x0010000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR      0x0020000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA      0x0040000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR   0x0080000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA   0x0100000
+#define D3DTEXOPCAPS_BUMPENVMAP                  0x0200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE         0x0400000
+#define D3DTEXOPCAPS_DOTPRODUCT3                 0x0800000
+#define D3DTEXOPCAPS_MULTIPLYADD                 0x1000000
+#define D3DTEXOPCAPS_LERP                        0x2000000
+
+#define D3DVTXPCAPS_TEXGEN                       0x01
+#define D3DVTXPCAPS_MATERIALSOURCE7              0x02
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS            0x08
+#define D3DVTXPCAPS_POSITIONALLIGHTS             0x10
+#define D3DVTXPCAPS_LOCALVIEWER                  0x20
+#define D3DVTXPCAPS_TWEENING                     0x40
+
+#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD  0x00000020
+#define D3DCAPS3_RESERVED                          0x8000001f
+
+#define D3DCAPS2_CANCALIBRATEGAMMA                 0x0100000
+#define D3DCAPS2_CANRENDERWINDOWED                 0x0080000
+#define D3DCAPS2_CANMANAGERESOURCE                 0x10000000
+#define D3DCAPS2_DYNAMICTEXTURES                   0x20000000
+#define D3DCAPS2_FULLSCREENGAMMA                   0x0020000
+#define D3DCAPS2_NO2DDURING3DSCENE                 0x0000002
+#define D3DCAPS2_RESERVED                          0x2000000
+
+/*
+ * The d3dcaps8 structure
+ */
+typedef struct _D3DCAPS8 {
+    D3DDEVTYPE          DeviceType;
+    UINT                AdapterOrdinal;
+
+    DWORD               Caps;
+    DWORD               Caps2;
+    DWORD               Caps3;
+    DWORD               PresentationIntervals;
+
+    DWORD               CursorCaps;
+
+    DWORD               DevCaps;
+
+    DWORD               PrimitiveMiscCaps;
+    DWORD               RasterCaps;
+    DWORD               ZCmpCaps;
+    DWORD               SrcBlendCaps;
+    DWORD               DestBlendCaps;
+    DWORD               AlphaCmpCaps;
+    DWORD               ShadeCaps;
+    DWORD               TextureCaps;
+    DWORD               TextureFilterCaps;
+    DWORD               CubeTextureFilterCaps;
+    DWORD               VolumeTextureFilterCaps;
+    DWORD               TextureAddressCaps;
+    DWORD               VolumeTextureAddressCaps;
+
+    DWORD               LineCaps;
+
+    DWORD               MaxTextureWidth, MaxTextureHeight;
+    DWORD               MaxVolumeExtent;
+
+    DWORD               MaxTextureRepeat;
+    DWORD               MaxTextureAspectRatio;
+    DWORD               MaxAnisotropy;
+    float               MaxVertexW;
+
+    float               GuardBandLeft;
+    float               GuardBandTop;
+    float               GuardBandRight;
+    float               GuardBandBottom;
+
+    float               ExtentsAdjust;
+    DWORD               StencilCaps;
+
+    DWORD               FVFCaps;
+    DWORD               TextureOpCaps;
+    DWORD               MaxTextureBlendStages;
+    DWORD               MaxSimultaneousTextures;
+
+    DWORD               VertexProcessingCaps;
+    DWORD               MaxActiveLights;
+    DWORD               MaxUserClipPlanes;
+    DWORD               MaxVertexBlendMatrices;
+    DWORD               MaxVertexBlendMatrixIndex;
+
+    float               MaxPointSize;
+
+    DWORD               MaxPrimitiveCount;
+    DWORD               MaxVertexIndex;
+    DWORD               MaxStreams;
+    DWORD               MaxStreamStride;
+
+    DWORD               VertexShaderVersion;
+    DWORD               MaxVertexShaderConst;
+
+    DWORD               PixelShaderVersion;
+    float               MaxPixelShaderValue;
+} D3DCAPS8;
+
+#endif  /* __WINE_D3D8CAPS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h
new file mode 100644
index 0000000..bacf35f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h
@@ -0,0 +1,1222 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8TYPES_H
+#define __WINE_D3D8TYPES_H
+
+
+/*****************************************************************************
+ * Direct 3D v8 #defines
+ */
+
+#define D3DCLEAR_TARGET   1
+#define D3DCLEAR_ZBUFFER  2
+#define D3DCLEAR_STENCIL  4
+
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+#define D3DCOLOR_ARGB(a,r,g,b)        ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
+#define D3DCOLOR_COLORVALUE(r,g,b,a)  D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
+#define D3DCOLOR_RGBA(r,g,b,a)        D3DCOLOR_ARGB(a,r,g,b)
+#define D3DCOLOR_XRGB(r,g,b)          D3DCOLOR_ARGB(0xff,r,g,b)
+
+#define D3DCS_LEFT                 0x001
+#define D3DCS_RIGHT                0x002
+#define D3DCS_TOP                  0x004
+#define D3DCS_BOTTOM               0x008
+#define D3DCS_FRONT                0x010
+#define D3DCS_BACK                 0x020
+#define D3DCS_PLANE0               0x040
+#define D3DCS_PLANE1               0x080
+#define D3DCS_PLANE2               0x100
+#define D3DCS_PLANE3               0x200
+#define D3DCS_PLANE4               0x400
+#define D3DCS_PLANE5               0x800
+#define D3DCS_ALL                  0xFFF
+
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+
+#define D3DLOCK_READONLY           0x0010
+#define D3DLOCK_NOSYSLOCK          0x0800
+#define D3DLOCK_NOOVERWRITE        0x1000
+#define D3DLOCK_DISCARD            0x2000
+#define D3DLOCK_NO_DIRTY_UPDATE    0x8000
+
+#define D3DMAXUSERCLIPPLANES       32
+
+#define D3DRENDERSTATE_WRAPBIAS    0x80
+
+#define D3DTSS_TCI_PASSTHRU                       0x00000
+#define D3DTSS_TCI_CAMERASPACENORMAL              0x10000
+#define D3DTSS_TCI_CAMERASPACEPOSITION            0x20000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR    0x30000
+
+
+#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
+#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
+#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
+#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
+#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
+
+#define D3DUSAGE_RENDERTARGET       0x01
+#define D3DUSAGE_DEPTHSTENCIL       0x02
+#define D3DUSAGE_WRITEONLY          0x08
+#define D3DUSAGE_SOFTWAREPROCESSING 0x10
+#define D3DUSAGE_DONOTCLIP          0x20
+#define D3DUSAGE_POINTS             0x40
+#define D3DUSAGE_RTPATCHES          0x80
+#define D3DUSAGE_NPATCHES           0x100
+#define D3DUSAGE_DYNAMIC            0x200
+
+#define D3DWRAP_U        1
+#define D3DWRAP_V        2
+#define D3DWRAP_W        4
+#define D3DWRAPCOORD_0   1
+#define D3DWRAPCOORD_1   2
+#define D3DWRAPCOORD_2   4
+#define D3DWRAPCOORD_3   8
+
+#define MAX_DEVICE_IDENTIFIER_STRING        512
+
+#define D3DFVF_RESERVED0           0x0001
+#define D3DFVF_POSITION_MASK       0x000E
+#define D3DFVF_XYZ                 0x0002
+#define D3DFVF_XYZRHW              0x0004
+#define D3DFVF_XYZB1               0x0006
+#define D3DFVF_XYZB2               0x0008
+#define D3DFVF_XYZB3               0x000a
+#define D3DFVF_XYZB4               0x000c
+#define D3DFVF_XYZB5               0x000e
+#define D3DFVF_NORMAL              0x0010
+#define D3DFVF_PSIZE               0x0020
+#define D3DFVF_DIFFUSE             0x0040
+#define D3DFVF_SPECULAR            0x0080
+#define D3DFVF_TEXCOUNT_MASK       0x0f00
+#define D3DFVF_TEXCOUNT_SHIFT           8
+#define D3DFVF_TEX0                0x0000
+#define D3DFVF_TEX1                0x0100
+#define D3DFVF_TEX2                0x0200
+#define D3DFVF_TEX3                0x0300
+#define D3DFVF_TEX4                0x0400
+#define D3DFVF_TEX5                0x0500
+#define D3DFVF_TEX6                0x0600
+#define D3DFVF_TEX7                0x0700
+#define D3DFVF_TEX8                0x0800
+#define D3DFVF_LASTBETA_UBYTE4     0x1000
+#define D3DFVF_RESERVED2           0xE000
+
+#define D3DTA_SELECTMASK        0x0000000f
+#define D3DTA_DIFFUSE           0x00000000
+#define D3DTA_CURRENT           0x00000001
+#define D3DTA_TEXTURE           0x00000002
+#define D3DTA_TFACTOR           0x00000003
+#define D3DTA_SPECULAR          0x00000004
+#define D3DTA_COMPLEMENT        0x00000010
+#define D3DTA_ALPHAREPLICATE    0x00000020
+#define D3DTA_TEMP              0x00000005
+
+#define D3DCOLORWRITEENABLE_RED   (__MSABI_LONG(1)<<0)
+#define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1)
+#define D3DCOLORWRITEENABLE_BLUE  (__MSABI_LONG(1)<<2)
+#define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3)
+
+
+#ifndef MAKEFOURCC
+#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \
+    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \
+    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
+
+/**************************** 
+ * Vertex Shaders Declaration
+ */
+
+typedef enum _D3DVSD_TOKENTYPE {
+  D3DVSD_TOKEN_NOP         = 0,
+  D3DVSD_TOKEN_STREAM      = 1,
+  D3DVSD_TOKEN_STREAMDATA  = 2,
+  D3DVSD_TOKEN_TESSELLATOR = 3,
+  D3DVSD_TOKEN_CONSTMEM    = 4,
+  D3DVSD_TOKEN_EXT         = 5,
+  /* RESERVED              = 6 */
+  D3DVSD_TOKEN_END         = 7,
+  D3DVSD_FORCE_DWORD       = 0x7FFFFFFF
+} D3DVSD_TOKENTYPE;
+
+/** input registers for vertex shaders functions */
+/*
+#define D3DVSDE_POSITION      0
+#define D3DVSDE_BLENDWEIGHT   1
+#define D3DVSDE_BLENDINDICES  2
+#define D3DVSDE_NORMAL        3
+#define D3DVSDE_PSIZE         4
+#define D3DVSDE_DIFFUSE       5
+#define D3DVSDE_SPECULAR      6
+#define D3DVSDE_TEXCOORD0     7
+#define D3DVSDE_TEXCOORD1     8
+#define D3DVSDE_TEXCOORD2     9
+#define D3DVSDE_TEXCOORD3    10
+#define D3DVSDE_TEXCOORD4    11
+#define D3DVSDE_TEXCOORD5    12
+#define D3DVSDE_TEXCOORD6    13
+#define D3DVSDE_TEXCOORD7    14
+#define D3DVSDE_POSITION2    15
+#define D3DVSDE_NORMAL2      16
+*/
+/** Address of the vertex register. 0 - 16 */
+typedef enum _D3DVSDE_REGISTER {
+  D3DVSDE_POSITION     =  0,
+  D3DVSDE_BLENDWEIGHT  =  1,
+  D3DVSDE_BLENDINDICES =  2,
+  D3DVSDE_NORMAL       =  3,
+  D3DVSDE_PSIZE        =  4,
+  D3DVSDE_DIFFUSE      =  5,
+  D3DVSDE_SPECULAR     =  6,
+  D3DVSDE_TEXCOORD0    =  7,
+  D3DVSDE_TEXCOORD1    =  8,
+  D3DVSDE_TEXCOORD2    =  9,
+  D3DVSDE_TEXCOORD3    = 10,
+  D3DVSDE_TEXCOORD4    = 11,
+  D3DVSDE_TEXCOORD5    = 12,
+  D3DVSDE_TEXCOORD6    = 13,
+  D3DVSDE_TEXCOORD7    = 14,
+  D3DVSDE_POSITION2    = 15,
+  D3DVSDE_NORMAL2      = 16
+} D3DVSDE_REGISTER;
+
+/** bit-field declaration for VertexRegister Type */
+/*
+#define D3DVSDT_FLOAT1      0x00
+#define D3DVSDT_FLOAT2      0x01
+#define D3DVSDT_FLOAT3      0x02
+#define D3DVSDT_FLOAT4      0x03
+#define D3DVSDT_D3DCOLOR    0x04
+#define D3DVSDT_UBYTE4      0x05
+#define D3DVSDT_SHORT2      0x06
+#define D3DVSDT_SHORT4      0x07
+*/
+typedef enum _D3DVSDT_TYPE {
+  D3DVSDT_FLOAT1   = 0x00,
+  D3DVSDT_FLOAT2   = 0x01,
+  D3DVSDT_FLOAT3   = 0x02,
+  D3DVSDT_FLOAT4   = 0x03,
+  D3DVSDT_D3DCOLOR = 0x04,
+  D3DVSDT_UBYTE4   = 0x05,
+  D3DVSDT_SHORT2   = 0x06,
+  D3DVSDT_SHORT4   = 0x07
+} D3DVSDT_TYPE;
+
+
+#define D3DVSD_CONSTADDRESSSHIFT  0
+#define D3DVSD_EXTINFOSHIFT       0
+#define D3DVSD_STREAMNUMBERSHIFT  0
+#define D3DVSD_VERTEXREGSHIFT     0
+#define D3DVSD_CONSTRSSHIFT      16
+#define D3DVSD_DATATYPESHIFT     16
+#define D3DVSD_SKIPCOUNTSHIFT    16
+#define D3DVSD_VERTEXREGINSHIFT  20
+#define D3DVSD_EXTCOUNTSHIFT     24
+#define D3DVSD_CONSTCOUNTSHIFT   25
+#define D3DVSD_DATALOADTYPESHIFT 28
+#define D3DVSD_STREAMTESSSHIFT   28
+#define D3DVSD_TOKENTYPESHIFT    29
+
+#define D3DVSD_CONSTADDRESSMASK  (0x7F     << D3DVSD_CONSTADDRESSSHIFT)
+#define D3DVSD_EXTINFOMASK       (0xFFFFFF << D3DVSD_EXTINFOSHIFT)
+#define D3DVSD_STREAMNUMBERMASK  (0xF      << D3DVSD_STREAMNUMBERSHIFT)
+#define D3DVSD_VERTEXREGMASK     (0x1F     << D3DVSD_VERTEXREGSHIFT)
+#define D3DVSD_CONSTRSMASK       (0x1FFF   << D3DVSD_CONSTRSSHIFT)
+#define D3DVSD_DATATYPEMASK      (0xF      << D3DVSD_DATATYPESHIFT)
+#define D3DVSD_SKIPCOUNTMASK     (0xF      << D3DVSD_SKIPCOUNTSHIFT)
+#define D3DVSD_EXTCOUNTMASK      (0x1F     << D3DVSD_EXTCOUNTSHIFT)
+#define D3DVSD_VERTEXREGINMASK   (0xF      << D3DVSD_VERTEXREGINSHIFT)
+#define D3DVSD_CONSTCOUNTMASK    (0xF      << D3DVSD_CONSTCOUNTSHIFT)
+#define D3DVSD_DATALOADTYPEMASK  (0x1      << D3DVSD_DATALOADTYPESHIFT)
+#define D3DVSD_STREAMTESSMASK    (0x1      << D3DVSD_STREAMTESSSHIFT)
+#define D3DVSD_TOKENTYPEMASK     (0x7      << D3DVSD_TOKENTYPESHIFT)
+
+
+#define D3DVSD_MAKETOKENTYPE(TokenType) \
+  ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
+
+#define D3DVSD_CONST(ConstantAddress, Count) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))
+
+#define D3DVSD_END() 0xFFFFFFFF
+
+#define D3DVSD_NOP() 0x00000000
+
+#define D3DVSD_REG(VertexRegister, Type) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))
+
+#define D3DVSD_SKIP(Count) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))
+
+#define D3DVSD_STREAM(StreamNumber) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))
+
+#define D3DVSD_STREAM_TESS() \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
+
+#define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut))
+
+#define D3DVSD_TESSUV(Register) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register))
+
+
+/********************************
+ * Pixel/Vertex Shaders Functions
+ */
+
+/** Maximum number of supported texture coordinates sets operation */
+#define D3DDP_MAXTEXCOORD   8
+
+/** opcode token mask */
+#define D3DSI_OPCODE_MASK 0x0000FFFF
+
+/** opcodes types for PS and VS */
+typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {
+  D3DSIO_NOP          =  0,
+  D3DSIO_MOV          =  1,
+  D3DSIO_ADD          =  2,
+  D3DSIO_SUB          =  3,
+  D3DSIO_MAD          =  4,
+  D3DSIO_MUL          =  5,
+  D3DSIO_RCP          =  6,
+  D3DSIO_RSQ          =  7,
+  D3DSIO_DP3          =  8,
+  D3DSIO_DP4          =  9,
+  D3DSIO_MIN          = 10,
+  D3DSIO_MAX          = 11,
+  D3DSIO_SLT          = 12,
+  D3DSIO_SGE          = 13,
+  D3DSIO_EXP          = 14,
+  D3DSIO_LOG          = 15,
+  D3DSIO_LIT          = 16,
+  D3DSIO_DST          = 17,
+  D3DSIO_LRP          = 18,
+  D3DSIO_FRC          = 19,
+  D3DSIO_M4x4         = 20,
+  D3DSIO_M4x3         = 21,
+  D3DSIO_M3x4         = 22,
+  D3DSIO_M3x3         = 23,
+  D3DSIO_M3x2         = 24,
+
+  D3DSIO_TEXCOORD     = 64,
+  D3DSIO_TEXKILL      = 65,
+  D3DSIO_TEX          = 66,
+  D3DSIO_TEXBEM       = 67,
+  D3DSIO_TEXBEML      = 68,
+  D3DSIO_TEXREG2AR    = 69,
+  D3DSIO_TEXREG2GB    = 70,
+  D3DSIO_TEXM3x2PAD   = 71,
+  D3DSIO_TEXM3x2TEX   = 72,
+  D3DSIO_TEXM3x3PAD   = 73,
+  D3DSIO_TEXM3x3TEX   = 74,
+  D3DSIO_TEXM3x3DIFF  = 75,
+  D3DSIO_TEXM3x3SPEC  = 76,
+  D3DSIO_TEXM3x3VSPEC = 77,
+  D3DSIO_EXPP         = 78,
+  D3DSIO_LOGP         = 79,
+  D3DSIO_CND          = 80,
+  D3DSIO_DEF          = 81,
+  D3DSIO_TEXREG2RGB   = 82,
+  D3DSIO_TEXDP3TEX    = 83,
+  D3DSIO_TEXM3x2DEPTH = 84,
+  D3DSIO_TEXDP3       = 85,
+  D3DSIO_TEXM3x3      = 86,
+  D3DSIO_TEXDEPTH     = 87,
+  D3DSIO_CMP          = 88,
+  D3DSIO_BEM          = 89,
+
+  D3DSIO_PHASE        = 0xFFFD,
+  D3DSIO_COMMENT      = 0xFFFE,
+  D3DSIO_END          = 0XFFFF,
+
+  D3DSIO_FORCE_DWORD  = 0X7FFFFFFF /** for 32-bit alignment */
+} D3DSHADER_INSTRUCTION_OPCODE_TYPE;
+
+/** for parallelism */
+#define D3DSI_COISSUE 0x40000000
+
+/** destination parameter modifiers (.xyzw) */
+#define D3DSP_WRITEMASK_0       0x00010000 /* .x r */
+#define D3DSP_WRITEMASK_1       0x00020000 /* .y g */
+#define D3DSP_WRITEMASK_2       0x00040000 /* .z b */
+#define D3DSP_WRITEMASK_3       0x00080000 /* .w a */
+#define D3DSP_WRITEMASK_ALL     0x000F0000 /* all */
+
+#define D3DSP_DSTMOD_SHIFT      20
+#define D3DSP_DSTMOD_MASK       (0xF << D3DSP_DSTMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {
+  D3DSPDM_NONE         = 0 << D3DSP_DSTMOD_SHIFT,
+  D3DSPDM_SATURATE     = 1 << D3DSP_DSTMOD_SHIFT,
+  D3DSPDM_FORCE_DWORD  = 0X7FFFFFFF
+} D3DSHADER_PARAM_DSTMOD_TYPE;
+
+/** destination param */
+#define D3DSP_DSTSHIFT_SHIFT     24
+#define D3DSP_DSTSHIFT_MASK      (0xF << D3DSP_DSTSHIFT_SHIFT)
+
+/** destination/source reg type */
+#define D3DSP_REGTYPE_SHIFT      28
+#define D3DSP_REGTYPE_MASK       (0x7 << D3DSP_REGTYPE_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_REGISTER_TYPE {
+  D3DSPR_TEMP         = 0 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_INPUT        = 1 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_CONST        = 2 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_ADDR         = 3 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_TEXTURE      = 3 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_RASTOUT      = 4 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_ATTROUT      = 5 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_TEXCRDOUT    = 6 << D3DSP_REGTYPE_SHIFT,
+  D3DSPR_FORCE_DWORD  = 0x7FFFFFFF
+} D3DSHADER_PARAM_REGISTER_TYPE;
+
+typedef enum _D3DVS_RASTOUT_OFFSETS {
+  D3DSRO_POSITION     = 0,
+  D3DSRO_FOG          = 1,
+  D3DSRO_POINT_SIZE   = 2,
+  D3DSRO_FORCE_DWORD  = 0x7FFFFFFF
+} D3DVS_RASTOUT_OFFSETS;
+
+#define D3DVS_ADDRESSMODE_SHIFT  13
+#define D3DVS_ADDRESSMODE_MASK   (0x1 << D3DVS_ADDRESSMODE_SHIFT)
+
+typedef enum _D3DVS_ADDRESSMODE_TYPE {
+  D3DVS_ADDRMODE_ABSOLUTE     = 0 << D3DVS_ADDRESSMODE_SHIFT,
+  D3DVS_ADDRMODE_RELATIVE     = 1 << D3DVS_ADDRESSMODE_SHIFT,
+  D3DVS_ADDRMODE_FORCE_DWORD  = 0x7FFFFFFF
+} D3DVS_ADDRESSMODE_TYPE;
+
+#define D3DVS_SWIZZLE_SHIFT      16
+#define D3DVS_SWIZZLE_MASK       (0xFF << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DSP_SWIZZLE_SHIFT      16
+#define D3DSP_SWIZZLE_MASK       (0xFF << D3DSP_SWIZZLE_SHIFT)
+
+#define D3DVS_X_X       (0 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Y       (1 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Z       (2 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_W       (3 << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DVS_Y_X       (0 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_W       (3 << (D3DVS_SWIZZLE_SHIFT + 2))
+
+#define D3DVS_Z_X       (0 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_W       (3 << (D3DVS_SWIZZLE_SHIFT + 4))
+
+#define D3DVS_W_X       (0 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_W       (3 << (D3DVS_SWIZZLE_SHIFT + 6))
+
+#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)
+
+#define D3DSP_NOSWIZZLE \
+    ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
+
+#define D3DSP_SRCMOD_SHIFT      24
+#define D3DSP_SRCMOD_MASK       (0xF << D3DSP_SRCMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {
+  D3DSPSM_NONE         =  0 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_NEG          =  1 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_BIAS         =  2 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_BIASNEG      =  3 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_SIGN         =  4 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_SIGNNEG      =  5 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_COMP         =  6 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_X2           =  7 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_X2NEG        =  8 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_DZ           =  9 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_DW           = 10 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_FORCE_DWORD  = 0x7FFFFFFF
+} D3DSHADER_PARAM_SRCMOD_TYPE;
+
+#define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))
+#define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))
+#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)
+#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)
+
+#define D3DSI_COMMENTSIZE_SHIFT 16
+#define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)
+
+#define D3DSHADER_COMMENT(commentSize) \
+  ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)
+
+#define D3DPS_END() 0x0000FFFF
+#define D3DVS_END() 0x0000FFFF
+
+
+/*****************************************************************************
+ * Direct 3D v8 enumerated types
+ */
+typedef enum _D3DBACKBUFFER_TYPE {
+    D3DBACKBUFFER_TYPE_MONO         = 0,
+    D3DBACKBUFFER_TYPE_LEFT         = 1,
+    D3DBACKBUFFER_TYPE_RIGHT        = 2,
+
+    D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff
+} D3DBACKBUFFER_TYPE;
+
+typedef enum _D3DBASISTYPE{
+   D3DBASIS_BEZIER        = 0,
+   D3DBASIS_BSPLINE       = 1,
+   D3DBASIS_INTERPOLATE   = 2,
+
+   D3DBASIS_FORCE_DWORD   = 0x7fffffff
+} D3DBASISTYPE;
+
+typedef enum _D3DBLEND {
+    D3DBLEND_ZERO               =  1,
+    D3DBLEND_ONE                =  2,
+    D3DBLEND_SRCCOLOR           =  3,
+    D3DBLEND_INVSRCCOLOR        =  4,
+    D3DBLEND_SRCALPHA           =  5,
+    D3DBLEND_INVSRCALPHA        =  6,
+    D3DBLEND_DESTALPHA          =  7,
+    D3DBLEND_INVDESTALPHA       =  8,
+    D3DBLEND_DESTCOLOR          =  9,
+    D3DBLEND_INVDESTCOLOR       = 10,
+    D3DBLEND_SRCALPHASAT        = 11,
+    D3DBLEND_BOTHSRCALPHA       = 12,
+    D3DBLEND_BOTHINVSRCALPHA    = 13,
+
+    D3DBLEND_FORCE_DWORD        = 0x7fffffff
+} D3DBLEND;
+
+typedef enum _D3DBLENDOP {
+    D3DBLENDOP_ADD              = 1,
+    D3DBLENDOP_SUBTRACT         = 2,
+    D3DBLENDOP_REVSUBTRACT      = 3,
+    D3DBLENDOP_MIN              = 4,
+    D3DBLENDOP_MAX              = 5,
+
+    D3DBLENDOP_FORCE_DWORD      = 0x7fffffff
+} D3DBLENDOP;
+
+typedef enum _D3DCMPFUNC {
+    D3DCMP_NEVER                = 1,
+    D3DCMP_LESS                 = 2,
+    D3DCMP_EQUAL                = 3,
+    D3DCMP_LESSEQUAL            = 4,
+    D3DCMP_GREATER              = 5,
+    D3DCMP_NOTEQUAL             = 6,
+    D3DCMP_GREATEREQUAL         = 7,
+    D3DCMP_ALWAYS               = 8,
+
+    D3DCMP_FORCE_DWORD          = 0x7fffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DCUBEMAP_FACES {
+    D3DCUBEMAP_FACE_POSITIVE_X     = 0,
+    D3DCUBEMAP_FACE_NEGATIVE_X     = 1,
+    D3DCUBEMAP_FACE_POSITIVE_Y     = 2,
+    D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,
+    D3DCUBEMAP_FACE_POSITIVE_Z     = 4,
+    D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,
+
+    D3DCUBEMAP_FACE_FORCE_DWORD    = 0xffffffff
+} D3DCUBEMAP_FACES;
+
+typedef enum _D3DCULL {
+    D3DCULL_NONE                = 1,
+    D3DCULL_CW                  = 2,
+    D3DCULL_CCW                 = 3,
+
+    D3DCULL_FORCE_DWORD         = 0x7fffffff
+} D3DCULL;
+
+typedef enum _D3DDEBUGMONITORTOKENS {
+    D3DDMT_ENABLE          = 0,
+    D3DDMT_DISABLE         = 1,
+
+    D3DDMT_FORCE_DWORD     = 0x7fffffff
+} D3DDEBUGMONITORTOKENS;
+
+typedef enum _D3DDEVTYPE {
+    D3DDEVTYPE_HAL         = 1,
+    D3DDEVTYPE_REF         = 2,
+    D3DDEVTYPE_SW          = 3,
+
+    D3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} D3DDEVTYPE;
+
+typedef enum _D3DFILLMODE {
+    D3DFILL_POINT               = 1,
+    D3DFILL_WIREFRAME           = 2,
+    D3DFILL_SOLID               = 3,
+
+    D3DFILL_FORCE_DWORD         = 0x7fffffff
+} D3DFILLMODE;
+
+typedef enum _D3DFOGMODE {
+    D3DFOG_NONE                 = 0,
+    D3DFOG_EXP                  = 1,
+    D3DFOG_EXP2                 = 2,
+    D3DFOG_LINEAR               = 3,
+
+    D3DFOG_FORCE_DWORD          = 0x7fffffff
+} D3DFOGMODE;
+
+typedef enum _D3DFORMAT {
+    D3DFMT_UNKNOWN              =   0,
+
+    D3DFMT_R8G8B8               =  20,
+    D3DFMT_A8R8G8B8             =  21,
+    D3DFMT_X8R8G8B8             =  22,
+    D3DFMT_R5G6B5               =  23,
+    D3DFMT_X1R5G5B5             =  24,
+    D3DFMT_A1R5G5B5             =  25,
+    D3DFMT_A4R4G4B4             =  26,
+    D3DFMT_R3G3B2               =  27,
+    D3DFMT_A8                   =  28,
+    D3DFMT_A8R3G3B2             =  29,
+    D3DFMT_X4R4G4B4             =  30,
+    D3DFMT_A2B10G10R10          =  31,
+    D3DFMT_G16R16               =  34,
+
+    D3DFMT_A8P8                 =  40,
+    D3DFMT_P8                   =  41,
+
+    D3DFMT_L8                   =  50,
+    D3DFMT_A8L8                 =  51,
+    D3DFMT_A4L4                 =  52,
+
+    D3DFMT_V8U8                 =  60,
+    D3DFMT_L6V5U5               =  61,
+    D3DFMT_X8L8V8U8             =  62,
+    D3DFMT_Q8W8V8U8             =  63,
+    D3DFMT_V16U16               =  64,
+    D3DFMT_W11V11U10            =  65,
+    D3DFMT_A2W10V10U10          =  67,
+
+    D3DFMT_UYVY                 =  MAKEFOURCC('U', 'Y', 'V', 'Y'),
+    D3DFMT_YUY2                 =  MAKEFOURCC('Y', 'U', 'Y', '2'),
+    D3DFMT_DXT1                 =  MAKEFOURCC('D', 'X', 'T', '1'),
+    D3DFMT_DXT2                 =  MAKEFOURCC('D', 'X', 'T', '2'),
+    D3DFMT_DXT3                 =  MAKEFOURCC('D', 'X', 'T', '3'),
+    D3DFMT_DXT4                 =  MAKEFOURCC('D', 'X', 'T', '4'),
+    D3DFMT_DXT5                 =  MAKEFOURCC('D', 'X', 'T', '5'),
+
+    D3DFMT_D16_LOCKABLE         =  70,
+    D3DFMT_D32                  =  71,
+    D3DFMT_D15S1                =  73,
+    D3DFMT_D24S8                =  75,
+    D3DFMT_D16                  =  80,
+    D3DFMT_D24X8                =  77,
+    D3DFMT_D24X4S4              =  79,
+
+    D3DFMT_VERTEXDATA           = 100,
+    D3DFMT_INDEX16              = 101,
+    D3DFMT_INDEX32              = 102,
+
+    D3DFMT_FORCE_DWORD          = 0xFFFFFFFF
+} D3DFORMAT;
+
+typedef enum _D3DLIGHTTYPE {
+    D3DLIGHT_POINT          = 1,
+    D3DLIGHT_SPOT           = 2,
+    D3DLIGHT_DIRECTIONAL    = 3,
+
+    D3DLIGHT_FORCE_DWORD    = 0x7fffffff
+} D3DLIGHTTYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE {
+    D3DMCS_MATERIAL         = 0,
+    D3DMCS_COLOR1           = 1,
+    D3DMCS_COLOR2           = 2,
+
+    D3DMCS_FORCE_DWORD      = 0x7fffffff
+} D3DMATERIALCOLORSOURCE;
+
+typedef enum _D3DMULTISAMPLE_TYPE {
+    D3DMULTISAMPLE_NONE            =  0,
+    D3DMULTISAMPLE_2_SAMPLES       =  2,
+    D3DMULTISAMPLE_3_SAMPLES       =  3,
+    D3DMULTISAMPLE_4_SAMPLES       =  4,
+    D3DMULTISAMPLE_5_SAMPLES       =  5,
+    D3DMULTISAMPLE_6_SAMPLES       =  6,
+    D3DMULTISAMPLE_7_SAMPLES       =  7,
+    D3DMULTISAMPLE_8_SAMPLES       =  8,
+    D3DMULTISAMPLE_9_SAMPLES       =  9,
+    D3DMULTISAMPLE_10_SAMPLES      = 10,
+    D3DMULTISAMPLE_11_SAMPLES      = 11,
+    D3DMULTISAMPLE_12_SAMPLES      = 12,
+    D3DMULTISAMPLE_13_SAMPLES      = 13,
+    D3DMULTISAMPLE_14_SAMPLES      = 14,
+    D3DMULTISAMPLE_15_SAMPLES      = 15,
+    D3DMULTISAMPLE_16_SAMPLES      = 16,
+
+    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff
+} D3DMULTISAMPLE_TYPE;
+
+typedef enum _D3DORDERTYPE {
+   D3DORDER_LINEAR      = 1,
+   D3DORDER_QUADRATIC   = 2,
+   D3DORDER_CUBIC       = 3,
+   D3DORDER_QUINTIC     = 5,
+
+   D3DORDER_FORCE_DWORD = 0x7fffffff
+} D3DORDERTYPE;
+
+typedef enum _D3DPATCHEDGESTYLE {
+   D3DPATCHEDGE_DISCRETE    = 0,
+   D3DPATCHEDGE_CONTINUOUS  = 1,
+
+   D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
+} D3DPATCHEDGESTYLE;
+
+typedef enum _D3DPOOL {
+    D3DPOOL_DEFAULT                 = 0,
+    D3DPOOL_MANAGED                 = 1,
+    D3DPOOL_SYSTEMMEM               = 2,
+    D3DPOOL_SCRATCH                 = 3,
+
+    D3DPOOL_FORCE_DWORD             = 0x7fffffff
+} D3DPOOL;
+
+typedef enum _D3DPRIMITIVETYPE {
+    D3DPT_POINTLIST             = 1,
+    D3DPT_LINELIST              = 2,
+    D3DPT_LINESTRIP             = 3,
+    D3DPT_TRIANGLELIST          = 4,
+    D3DPT_TRIANGLESTRIP         = 5,
+    D3DPT_TRIANGLEFAN           = 6,
+
+    D3DPT_FORCE_DWORD           = 0x7fffffff
+} D3DPRIMITIVETYPE;
+
+typedef enum _D3DRENDERSTATETYPE {
+    D3DRS_ZENABLE                   =   7,
+    D3DRS_FILLMODE                  =   8,
+    D3DRS_SHADEMODE                 =   9,
+    D3DRS_LINEPATTERN               =  10,
+    D3DRS_ZWRITEENABLE              =  14,
+    D3DRS_ALPHATESTENABLE           =  15,
+    D3DRS_LASTPIXEL                 =  16,
+    D3DRS_SRCBLEND                  =  19,
+    D3DRS_DESTBLEND                 =  20,
+    D3DRS_CULLMODE                  =  22,
+    D3DRS_ZFUNC                     =  23,
+    D3DRS_ALPHAREF                  =  24,
+    D3DRS_ALPHAFUNC                 =  25,
+    D3DRS_DITHERENABLE              =  26,
+    D3DRS_ALPHABLENDENABLE          =  27,
+    D3DRS_FOGENABLE                 =  28,
+    D3DRS_SPECULARENABLE            =  29,
+    D3DRS_ZVISIBLE                  =  30,
+    D3DRS_FOGCOLOR                  =  34,
+    D3DRS_FOGTABLEMODE              =  35,
+    D3DRS_FOGSTART                  =  36,
+    D3DRS_FOGEND                    =  37,
+    D3DRS_FOGDENSITY                =  38,
+    D3DRS_EDGEANTIALIAS             =  40,
+    D3DRS_ZBIAS                     =  47,
+    D3DRS_RANGEFOGENABLE            =  48,
+    D3DRS_STENCILENABLE             =  52,
+    D3DRS_STENCILFAIL               =  53,
+    D3DRS_STENCILZFAIL              =  54,
+    D3DRS_STENCILPASS               =  55,
+    D3DRS_STENCILFUNC               =  56,
+    D3DRS_STENCILREF                =  57,
+    D3DRS_STENCILMASK               =  58,
+    D3DRS_STENCILWRITEMASK          =  59,
+    D3DRS_TEXTUREFACTOR             =  60,
+    D3DRS_WRAP0                     = 128,
+    D3DRS_WRAP1                     = 129,
+    D3DRS_WRAP2                     = 130,
+    D3DRS_WRAP3                     = 131,
+    D3DRS_WRAP4                     = 132,
+    D3DRS_WRAP5                     = 133,
+    D3DRS_WRAP6                     = 134,
+    D3DRS_WRAP7                     = 135,
+    D3DRS_CLIPPING                  = 136,
+    D3DRS_LIGHTING                  = 137,
+    D3DRS_AMBIENT                   = 139,
+    D3DRS_FOGVERTEXMODE             = 140,
+    D3DRS_COLORVERTEX               = 141,
+    D3DRS_LOCALVIEWER               = 142,
+    D3DRS_NORMALIZENORMALS          = 143,
+    D3DRS_DIFFUSEMATERIALSOURCE     = 145,
+    D3DRS_SPECULARMATERIALSOURCE    = 146,
+    D3DRS_AMBIENTMATERIALSOURCE     = 147,
+    D3DRS_EMISSIVEMATERIALSOURCE    = 148,
+    D3DRS_VERTEXBLEND               = 151,
+    D3DRS_CLIPPLANEENABLE           = 152,
+    D3DRS_SOFTWAREVERTEXPROCESSING  = 153,
+    D3DRS_POINTSIZE                 = 154,
+    D3DRS_POINTSIZE_MIN             = 155,
+    D3DRS_POINTSPRITEENABLE         = 156,
+    D3DRS_POINTSCALEENABLE          = 157,
+    D3DRS_POINTSCALE_A              = 158,
+    D3DRS_POINTSCALE_B              = 159,
+    D3DRS_POINTSCALE_C              = 160,
+    D3DRS_MULTISAMPLEANTIALIAS      = 161,
+    D3DRS_MULTISAMPLEMASK           = 162,
+    D3DRS_PATCHEDGESTYLE            = 163,
+    D3DRS_PATCHSEGMENTS             = 164,
+    D3DRS_DEBUGMONITORTOKEN         = 165,
+    D3DRS_POINTSIZE_MAX             = 166,
+    D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
+    D3DRS_COLORWRITEENABLE          = 168,
+    D3DRS_TWEENFACTOR               = 170,
+    D3DRS_BLENDOP                   = 171,
+    D3DRS_POSITIONORDER             = 172,
+    D3DRS_NORMALORDER               = 173,
+
+    D3DRS_FORCE_DWORD               = 0x7fffffff
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DRESOURCETYPE {
+    D3DRTYPE_SURFACE                =  1,
+    D3DRTYPE_VOLUME                 =  2,
+    D3DRTYPE_TEXTURE                =  3,
+    D3DRTYPE_VOLUMETEXTURE          =  4,
+    D3DRTYPE_CUBETEXTURE            =  5,
+    D3DRTYPE_VERTEXBUFFER           =  6,
+    D3DRTYPE_INDEXBUFFER            =  7,
+
+    D3DRTYPE_FORCE_DWORD            = 0x7fffffff
+} D3DRESOURCETYPE;
+
+typedef enum _D3DSHADEMODE {
+    D3DSHADE_FLAT               = 1,
+    D3DSHADE_GOURAUD            = 2,
+    D3DSHADE_PHONG              = 3,
+
+    D3DSHADE_FORCE_DWORD        = 0x7fffffff
+} D3DSHADEMODE;
+
+typedef enum _D3DSTATEBLOCKTYPE {
+    D3DSBT_ALL           = 1,
+    D3DSBT_PIXELSTATE    = 2,
+    D3DSBT_VERTEXSTATE   = 3,
+
+    D3DSBT_FORCE_DWORD   = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DSTENCILOP {
+    D3DSTENCILOP_KEEP           = 1,
+    D3DSTENCILOP_ZERO           = 2,
+    D3DSTENCILOP_REPLACE        = 3,
+    D3DSTENCILOP_INCRSAT        = 4,
+    D3DSTENCILOP_DECRSAT        = 5,
+    D3DSTENCILOP_INVERT         = 6,
+    D3DSTENCILOP_INCR           = 7,
+    D3DSTENCILOP_DECR           = 8,
+
+    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DSWAPEFFECT {
+    D3DSWAPEFFECT_DISCARD         = 1,
+    D3DSWAPEFFECT_FLIP            = 2,
+    D3DSWAPEFFECT_COPY            = 3,
+    D3DSWAPEFFECT_COPY_VSYNC      = 4,
+
+    D3DSWAPEFFECT_FORCE_DWORD     = 0xFFFFFFFF
+} D3DSWAPEFFECT;
+
+typedef enum _D3DTEXTUREADDRESS {
+    D3DTADDRESS_WRAP            = 1,
+    D3DTADDRESS_MIRROR          = 2,
+    D3DTADDRESS_CLAMP           = 3,
+    D3DTADDRESS_BORDER          = 4,
+    D3DTADDRESS_MIRRORONCE      = 5,
+
+    D3DTADDRESS_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum _D3DTEXTUREFILTERTYPE {
+    D3DTEXF_NONE            = 0,
+    D3DTEXF_POINT           = 1,
+    D3DTEXF_LINEAR          = 2,
+    D3DTEXF_ANISOTROPIC     = 3,
+    D3DTEXF_FLATCUBIC       = 4,
+    D3DTEXF_GAUSSIANCUBIC   = 5,
+
+    D3DTEXF_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTUREFILTERTYPE;
+
+typedef enum _D3DTEXTUREOP {
+    D3DTOP_DISABLE                   =  1,
+    D3DTOP_SELECTARG1                =  2,
+    D3DTOP_SELECTARG2                =  3,
+    D3DTOP_MODULATE                  =  4,
+    D3DTOP_MODULATE2X                =  5,
+    D3DTOP_MODULATE4X                =  6,
+    D3DTOP_ADD                       =  7,
+    D3DTOP_ADDSIGNED                 =  8,
+    D3DTOP_ADDSIGNED2X               =  9,
+    D3DTOP_SUBTRACT                  = 10,
+    D3DTOP_ADDSMOOTH                 = 11,
+    D3DTOP_BLENDDIFFUSEALPHA         = 12,
+    D3DTOP_BLENDTEXTUREALPHA         = 13,
+    D3DTOP_BLENDFACTORALPHA          = 14,
+    D3DTOP_BLENDTEXTUREALPHAPM       = 15,
+    D3DTOP_BLENDCURRENTALPHA         = 16,
+    D3DTOP_PREMODULATE               = 17,
+    D3DTOP_MODULATEALPHA_ADDCOLOR    = 18,
+    D3DTOP_MODULATECOLOR_ADDALPHA    = 19,
+    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+    D3DTOP_BUMPENVMAP                = 22,
+    D3DTOP_BUMPENVMAPLUMINANCE       = 23,
+    D3DTOP_DOTPRODUCT3               = 24,
+    D3DTOP_MULTIPLYADD               = 25,
+    D3DTOP_LERP                      = 26,
+
+    D3DTOP_FORCE_DWORD               = 0x7fffffff,
+} D3DTEXTUREOP;
+
+typedef enum _D3DTEXTURESTAGESTATETYPE {
+    D3DTSS_COLOROP               =  1,
+    D3DTSS_COLORARG1             =  2,
+    D3DTSS_COLORARG2             =  3,
+    D3DTSS_ALPHAOP               =  4,
+    D3DTSS_ALPHAARG1             =  5,
+    D3DTSS_ALPHAARG2             =  6,
+    D3DTSS_BUMPENVMAT00          =  7,
+    D3DTSS_BUMPENVMAT01          =  8,
+    D3DTSS_BUMPENVMAT10          =  9,
+    D3DTSS_BUMPENVMAT11          = 10,
+    D3DTSS_TEXCOORDINDEX         = 11,
+    D3DTSS_ADDRESSU              = 13,
+    D3DTSS_ADDRESSV              = 14,
+    D3DTSS_BORDERCOLOR           = 15,
+    D3DTSS_MAGFILTER             = 16,
+    D3DTSS_MINFILTER             = 17,
+    D3DTSS_MIPFILTER             = 18,
+    D3DTSS_MIPMAPLODBIAS         = 19,
+    D3DTSS_MAXMIPLEVEL           = 20,
+    D3DTSS_MAXANISOTROPY         = 21,
+    D3DTSS_BUMPENVLSCALE         = 22,
+    D3DTSS_BUMPENVLOFFSET        = 23,
+    D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+    D3DTSS_ADDRESSW              = 25,
+    D3DTSS_COLORARG0             = 26,
+    D3DTSS_ALPHAARG0             = 27,
+    D3DTSS_RESULTARG             = 28,
+
+    D3DTSS_FORCE_DWORD           = 0x7fffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+    D3DTTFF_DISABLE         =   0,
+    D3DTTFF_COUNT1          =   1,
+    D3DTTFF_COUNT2          =   2,
+    D3DTTFF_COUNT3          =   3,
+    D3DTTFF_COUNT4          =   4,
+    D3DTTFF_PROJECTED       = 256,
+
+    D3DTTFF_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTURETRANSFORMFLAGS;
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+    D3DTS_VIEW            =  2,
+    D3DTS_PROJECTION      =  3,
+    D3DTS_TEXTURE0        = 16,
+    D3DTS_TEXTURE1        = 17,
+    D3DTS_TEXTURE2        = 18,
+    D3DTS_TEXTURE3        = 19,
+    D3DTS_TEXTURE4        = 20,
+    D3DTS_TEXTURE5        = 21,
+    D3DTS_TEXTURE6        = 22,
+    D3DTS_TEXTURE7        = 23,
+
+    D3DTS_FORCE_DWORD     = 0x7fffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS {
+    D3DVBF_DISABLE  =   0,
+    D3DVBF_1WEIGHTS =   1,
+    D3DVBF_2WEIGHTS =   2,
+    D3DVBF_3WEIGHTS =   3,
+    D3DVBF_TWEENING = 255,
+    D3DVBF_0WEIGHTS = 256
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DZBUFFERTYPE {
+    D3DZB_FALSE                 = 0,
+    D3DZB_TRUE                  = 1,
+    D3DZB_USEW                  = 2,
+
+    D3DZB_FORCE_DWORD           = 0x7fffffff
+} D3DZBUFFERTYPE;
+
+
+/*****************************************************************************
+ * Direct 3D v8 typedefs
+ */
+typedef DWORD D3DCOLOR;
+
+/*****************************************************************************
+ * Direct 3D v8 structures
+ */
+typedef struct _D3DADAPTER_IDENTIFIER8 {
+    char            Driver[MAX_DEVICE_IDENTIFIER_STRING];
+    char            Description[MAX_DEVICE_IDENTIFIER_STRING];
+
+    LARGE_INTEGER   DriverVersion;
+    DWORD           VendorId;
+    DWORD           DeviceId;
+    DWORD           SubSysId;
+    DWORD           Revision;
+
+    GUID            DeviceIdentifier;
+
+    DWORD           WHQLLevel;
+} D3DADAPTER_IDENTIFIER8;
+
+typedef struct _D3DBOX {
+    UINT                Left;
+    UINT                Top;
+    UINT                Right;
+    UINT                Bottom;
+    UINT                Front;
+    UINT                Back;
+} D3DBOX;
+
+typedef struct _D3DCLIPSTATUS8 {
+   DWORD ClipUnion;
+   DWORD ClipIntersection;
+} D3DCLIPSTATUS8;
+
+typedef struct _D3DCOLORVALUE {
+    float r;
+    float g;
+    float b;
+    float a;
+} D3DCOLORVALUE;
+
+typedef struct _D3DDEVICE_CREATION_PARAMETERS {
+    UINT          AdapterOrdinal;
+    D3DDEVTYPE    DeviceType;
+    HWND          hFocusWindow;
+    DWORD         BehaviorFlags;
+} D3DDEVICE_CREATION_PARAMETERS;
+
+typedef struct _D3DDISPLAYMODE {
+    UINT            Width;
+    UINT            Height;
+    UINT            RefreshRate;
+    D3DFORMAT       Format;
+} D3DDISPLAYMODE;
+
+typedef struct _D3DGAMMARAMP {
+    WORD                red  [256];
+    WORD                green[256];
+    WORD                blue [256];
+} D3DGAMMARAMP;
+
+typedef struct _D3DINDEXBUFFER_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    UINT                Size;
+} D3DINDEXBUFFER_DESC;
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+    float x;
+    float y;
+    float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+typedef struct _D3DLIGHT8 {
+    D3DLIGHTTYPE    Type;
+    D3DCOLORVALUE   Diffuse;
+    D3DCOLORVALUE   Specular;
+    D3DCOLORVALUE   Ambient;
+    D3DVECTOR       Position;
+    D3DVECTOR       Direction;
+    float           Range;
+    float           Falloff;
+    float           Attenuation0;
+    float           Attenuation1;
+    float           Attenuation2;
+    float           Theta;
+    float           Phi;
+} D3DLIGHT8;
+
+typedef struct _D3DLINEPATTERN {
+    WORD    wRepeatFactor;
+    WORD    wLinePattern;
+} D3DLINEPATTERN;
+
+typedef struct _D3DLOCKED_BOX {
+    INT                 RowPitch;
+    INT                 SlicePitch;
+    void*               pBits;
+} D3DLOCKED_BOX;
+
+typedef struct _D3DLOCKED_RECT {
+    INT                 Pitch;
+    void*               pBits;
+} D3DLOCKED_RECT;
+
+typedef struct _D3DMATERIAL8 {
+    D3DCOLORVALUE   Diffuse;
+    D3DCOLORVALUE   Ambient;
+    D3DCOLORVALUE   Specular;
+    D3DCOLORVALUE   Emissive;
+    float           Power;
+} D3DMATERIAL8;
+
+typedef struct _D3DMATRIX {
+    union {
+        struct {
+            float        _11, _12, _13, _14;
+            float        _21, _22, _23, _24;
+            float        _31, _32, _33, _34;
+            float        _41, _42, _43, _44;
+        } DUMMYSTRUCTNAME;
+        float m[4][4];
+    } DUMMYUNIONNAME;
+} D3DMATRIX;
+
+typedef struct _D3DPRESENT_PARAMETERS_ {
+    UINT                    BackBufferWidth;
+    UINT                    BackBufferHeight;
+    D3DFORMAT               BackBufferFormat;
+    UINT                    BackBufferCount;
+
+    D3DMULTISAMPLE_TYPE     MultiSampleType;
+
+    D3DSWAPEFFECT           SwapEffect;
+    HWND                    hDeviceWindow;
+    BOOL                    Windowed;
+    BOOL                    EnableAutoDepthStencil;
+    D3DFORMAT               AutoDepthStencilFormat;
+    DWORD                   Flags;
+
+    UINT                    FullScreen_RefreshRateInHz;
+    UINT                    FullScreen_PresentationInterval;
+
+} D3DPRESENT_PARAMETERS;
+
+#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER  0x00000001
+
+typedef struct _D3DRANGE {
+    UINT                Offset;
+    UINT                Size;
+} D3DRANGE;
+
+typedef struct _D3DRASTER_STATUS {
+    BOOL            InVBlank;
+    UINT            ScanLine;
+} D3DRASTER_STATUS;
+
+typedef struct _D3DRECT {
+    LONG x1;
+    LONG y1;
+    LONG x2;
+    LONG y2;
+} D3DRECT;
+
+typedef struct _D3DRECTPATCH_INFO {
+    UINT                StartVertexOffsetWidth;
+    UINT                StartVertexOffsetHeight;
+    UINT                Width;
+    UINT                Height;
+    UINT                Stride;
+    D3DBASISTYPE        Basis;
+    D3DORDERTYPE        Order;
+} D3DRECTPATCH_INFO;
+
+typedef struct _D3DSURFACE_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    UINT                Size;
+    D3DMULTISAMPLE_TYPE MultiSampleType;
+    UINT                Width;
+    UINT                Height;
+} D3DSURFACE_DESC;
+
+typedef struct _D3DTRIPATCH_INFO {
+    UINT                StartVertexOffset;
+    UINT                NumVertices;
+    D3DBASISTYPE        Basis;
+    D3DORDERTYPE        Order;
+} D3DTRIPATCH_INFO;
+
+typedef struct _D3DVERTEXBUFFER_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    UINT                Size;
+    DWORD               FVF;
+} D3DVERTEXBUFFER_DESC;
+
+typedef struct _D3DVIEWPORT8 {
+    DWORD       X;
+    DWORD       Y;
+    DWORD       Width;
+    DWORD       Height;
+    float       MinZ;
+    float       MaxZ;
+} D3DVIEWPORT8;
+
+typedef struct _D3DVOLUME_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    UINT                Size;
+    UINT                Width;
+    UINT                Height;
+    UINT                Depth;
+} D3DVOLUME_DESC;
+
+#endif  /* __WINE_D3D8TYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h
new file mode 100644
index 0000000..4893a0f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h
@@ -0,0 +1,2134 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ *                         Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _D3D9_H_
+#define _D3D9_H_
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION  0x0900
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <windows.h>
+#include <d3d9types.h>
+#include <d3d9caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE                  __MSABI_LONG(0x00000002)
+#define D3DCREATE_MULTITHREADED                 __MSABI_LONG(0x00000004)
+#define D3DCREATE_PUREDEVICE                    __MSABI_LONG(0x00000010)
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000020)
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000040)
+#define D3DCREATE_MIXED_VERTEXPROCESSING        __MSABI_LONG(0x00000080)
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     __MSABI_LONG(0x00000100)
+#define D3DCREATE_ADAPTERGROUP_DEVICE           __MSABI_LONG(0x00000200)
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX  __MSABI_LONG(0x00000400)
+#define D3DCREATE_NOWINDOWCHANGES               __MSABI_LONG(0x00000800)
+#define D3DCREATE_DISABLE_PSGP_THREADING        __MSABI_LONG(0x00002000)
+#define D3DCREATE_ENABLE_PRESENTSTATS           __MSABI_LONG(0x00004000)
+#define D3DCREATE_DISABLE_PRINTSCREEN           __MSABI_LONG(0x00008000)
+#define D3DCREATE_SCREENSAVER                   __MSABI_LONG(0x10000000)
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN                         __MSABI_LONG(0x00000001)
+
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION                         32
+#define D3DADAPTER_DEFAULT                      0
+#define D3DENUM_NO_WHQL_LEVEL                   __MSABI_LONG(0x00000002)
+#define D3DPRESENT_BACK_BUFFERS_MAX             __MSABI_LONG(3)
+#define D3DSGR_NO_CALIBRATION                   __MSABI_LONG(0x00000000)
+#define D3DSGR_CALIBRATE                        __MSABI_LONG(0x00000001)
+
+#define _FACD3D  0x876
+#define MAKE_D3DHRESULT( code )                 MAKE_HRESULT( 1, _FACD3D, code )
+#define MAKE_D3DSTATUS( code )                  MAKE_HRESULT( 0, _FACD3D, code )
+
+/*****************************************************************************
+ * Direct3D Errors
+ */
+#define D3D_OK                                  S_OK
+#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
+#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
+#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)
+#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)
+
+#define D3DERR_DEVICEREMOVED                    MAKE_D3DHRESULT(2160)
+#define D3DERR_DEVICEHUNG                       MAKE_D3DHRESULT(2164)
+#define S_NOT_RESIDENT                          MAKE_D3DSTATUS(2165)
+#define S_RESIDENT_IN_SHARED_MEMORY             MAKE_D3DSTATUS(2166)
+#define S_PRESENT_MODE_CHANGED                  MAKE_D3DSTATUS(2167)
+#define S_PRESENT_OCCLUDED                      MAKE_D3DSTATUS(2168)
+#define D3DERR_UNSUPPORTEDOVERLAY               MAKE_D3DHRESULT(2171)
+#define D3DERR_UNSUPPORTEDOVERLAYFORMAT         MAKE_D3DHRESULT(2172)
+#define D3DERR_CANNOTPROTECTCONTENT             MAKE_D3DHRESULT(2173)
+#define D3DERR_UNSUPPORTEDCRYPTO                MAKE_D3DHRESULT(2174)
+#define D3DERR_PRESENT_STATISTICS_DISJOINT      MAKE_D3DHRESULT(2180)
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D9,                   0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);
+typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;
+
+DEFINE_GUID(IID_IDirect3D9Ex,                 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);
+typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;
+
+DEFINE_GUID(IID_IDirect3DDevice9,             0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);
+typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;
+
+DEFINE_GUID(IID_IDirect3DDevice9Ex,           0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);
+typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;
+
+DEFINE_GUID(IID_IDirect3DResource9,           0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);
+typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer9,       0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);
+typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DVolume9,             0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);
+typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9,          0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);
+typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9Ex,        0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);
+typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;
+
+DEFINE_GUID(IID_IDirect3DSurface9,            0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);
+typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer9,        0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);
+typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture9,        0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);
+typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DTexture9,            0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);
+typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture9,        0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);
+typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture9,      0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);
+typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVertexDeclaration9,  0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);
+typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;
+
+DEFINE_GUID(IID_IDirect3DVertexShader9,       0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);
+typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;
+
+DEFINE_GUID(IID_IDirect3DPixelShader9,        0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);
+typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;
+
+DEFINE_GUID(IID_IDirect3DStateBlock9,         0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);
+typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;
+
+DEFINE_GUID(IID_IDirect3DQuery9,              0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);
+typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
+
+/*****************************************************************************
+ * IDirect3D9 interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirect3D9
+DECLARE_INTERFACE_(IDirect3D9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D9 methods ***/
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D9_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9_AddRef(p)             (p)->AddRef()
+#define IDirect3D9_Release(p)            (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9_GetAdapterCount(p)                         (p)->GetAdapterCount()
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3D9Ex interface
+ */
+#define INTERFACE IDirect3D9Ex
+DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D9 methods ***/
+
+    /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that
+     * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's
+     * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9.
+     * This is probably because even in MS header IDirect3D9Ex inherits from IDirect3D9, which makes the
+     * C++ interface compatible, and nobody uses the C interface in Windows world.
+     */
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+
+    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+    /*** IDirect3D9Ex methods ***/
+    STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter) PURE;
+    STDMETHOD(EnumAdapterModesEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter,
+            UINT mode_idx, D3DDISPLAYMODEEX *mode) PURE;
+    STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
+    STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;
+    STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D9Ex_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+/*** IDirect3D9Ex methods ***/
+#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b)               (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d)              (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c)           (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)
+#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)
+#define IDirect3D9Ex_GetAdapterLUID(p,a,b)                      (p)->lpVtbl->GetAdapterLUID(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9Ex_AddRef(p)             (p)->AddRef()
+#define IDirect3D9Ex_Release(p)            (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->GetAdapterCount()
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume9 interface
+ */
+#define INTERFACE IDirect3DVolume9
+DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVolume9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;
+    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+    STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume9_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolume9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolume9_Release(p)                   (p)->Release()
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DVolume9_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)
+#define IDirect3DVolume9_UnlockBox(p)                 (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9 interface
+ */
+#define INTERFACE IDirect3DSwapChain9
+DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain9 methods ***/
+    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+            const RGNDATA *dirty_region, DWORD flags) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *pDestSurface) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9 **ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *pRasterStatus) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *pMode) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **ppDevice) PURE;
+    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->lpVtbl->GetPresentParameters(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSwapChain9_Release(p)                   (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->GetPresentParameters(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9Ex interface
+ */
+#define INTERFACE IDirect3DSwapChain9Ex
+DECLARE_INTERFACE_(IDirect3DSwapChain9Ex,IDirect3DSwapChain9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain9 methods ***/
+    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+            const RGNDATA *dirty_region, DWORD flags) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *pDestSurface) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9 **ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *pRasterStatus) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *pMode) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **ppDevice) PURE;
+    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters) PURE;
+    /*** IDirect3DSwapChain9Ex methods ***/
+    STDMETHOD(GetLastPresentCount)(THIS_ UINT *pLastPresentCount) PURE;
+    STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS *pPresentationStatistics) PURE;
+    STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9Ex_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9Ex_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e)       (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a)    (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9EX_GetBackBuffer(p,a,b,c)     (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9EX_GetRasterStatus(p,a)       (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a)        (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9Ex_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a)  (p)->lpVtbl->GetPresentParameters(p,a)
+/*** IDirect3DSwapChain9Ex methods ***/
+#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a)   (p)->lpVtbl->GetLastPresentCount(p,a)
+#define IDirect3DSwapChain9Ex_GetPresentStats(p,a)       (p)->lpVtbl->GetPresentStats(p,a)
+#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b)    (p)->lpVtbl->GetDisplayModeEx(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9Ex_AddRef(p)                  (p)->AddRef()
+#define IDirect3DSwapChain9Ex_Release(p)                 (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e)       (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a)    (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c)     (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a)       (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a)        (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9Ex_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a)  (p)->GetPresentParameters(a)
+/*** IDirect3DSwapChain9Ex methods ***/
+#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a)   (p)->GetLastPresentCount(a)
+#define IDirect3DSwapChain9Ex_GetPresentStats(p,a)       (p)->GetPresentStats(a)
+#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b)    (p)->GetDisplayModeEx(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource9 interface
+ */
+#define INTERFACE IDirect3DResource9
+DECLARE_INTERFACE_(IDirect3DResource9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource9_GetType(p)                   (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DResource9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DResource9_Release(p)                   (p)->Release()
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DResource9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DResource9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DResource9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DResource9_GetType(p)                   (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface9 interface
+ */
+#define INTERFACE IDirect3DSurface9
+DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DSurface9 methods ***/
+    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+    STDMETHOD(UnlockRect)(THIS) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DSurface9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DSurface9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DSurface9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface9_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
+#define IDirect3DSurface9_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSurface9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSurface9_Release(p)                   (p)->Release()
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DSurface9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DSurface9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DSurface9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DSurface9_GetType(p)                   (p)->GetType()
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DSurface9_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)
+#define IDirect3DSurface9_UnlockRect(p)                (p)->UnlockRect()
+#define IDirect3DSurface9_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer9 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer9
+DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DVertexBuffer9 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVertexBuffer9_Release(p)                   (p)->Release()
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVertexBuffer9_GetType(p)                   (p)->GetType()
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->Unlock()
+#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer9 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer9
+DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DIndexBuffer9 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DIndexBuffer9_Release(p)                   (p)->Release()
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DIndexBuffer9_GetType(p)                   (p)->GetType()
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->Unlock()
+#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture9 interface
+ */
+#define INTERFACE IDirect3DBaseTexture9
+DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture9_AddRef(p)              (p)->AddRef()
+#define IDirect3DBaseTexture9_Release(p)             (p)->Release()
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->SetPriority(a)
+#define IDirect3DBaseTexture9_GetPriority(p)             (p)->GetPriority()
+#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->PreLoad()
+#define IDirect3DBaseTexture9_GetType(p)                 (p)->GetType()
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->SetLOD(a)
+#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->GetLOD()
+#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->GetLevelCount()
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture9 interface
+ */
+#define INTERFACE IDirect3DCubeTexture9
+DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DCubeTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level,
+            D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture9_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture9_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture9_GetPriority(p)              (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture9_GetType(p)                  (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture9_AddRef(p)                   (p)->AddRef()
+#define IDirect3DCubeTexture9_Release(p)                  (p)->Release()
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->GetDevice(a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->SetPriority(a)
+#define IDirect3DCubeTexture9_GetPriority(p)              (p)->GetPriority()
+#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->PreLoad()
+#define IDirect3DCubeTexture9_GetType(p)                  (p)->GetType()
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->SetLOD(a)
+#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->GetLOD()
+#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->GetLevelCount()
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->SetAutoGenFilterType(a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->GetAutoGenFilterType()
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->GenerateMipSubLevels()
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture9 interface
+ */
+#define INTERFACE IDirect3DTexture9
+DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;
+    STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture9_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture9_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a)            (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
+#define IDirect3DTexture9_AddRef(p)                  (p)->AddRef()
+#define IDirect3DTexture9_Release(p)                 (p)->Release()
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)
+#define IDirect3DTexture9_SetPriority(p,a)           (p)->SetPriority(a)
+#define IDirect3DTexture9_GetPriority(p)             (p)->GetPriority()
+#define IDirect3DTexture9_PreLoad(p)                 (p)->PreLoad()
+#define IDirect3DTexture9_GetType(p)                 (p)->GetType()
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a)                (p)->SetLOD(a)
+#define IDirect3DTexture9_GetLOD(p)                  (p)->GetLOD()
+#define IDirect3DTexture9_GetLevelCount(p)           (p)->GetLevelCount()
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()
+#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a)            (p)->UnlockRect(a)
+#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture9 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture9
+DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DVolumeTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;
+    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;
+    STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+    STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture9_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexDeclaration9 interface
+ */
+#define INTERFACE IDirect3DVertexDeclaration9
+DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexDeclaration9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexDeclaration9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->lpVtbl->GetDeclaration(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->AddRef()
+#define IDirect3DVertexDeclaration9_Release(p)             (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->GetDeclaration(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexShader9 interface
+ */
+#define INTERFACE IDirect3DVertexShader9
+DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexShader9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexShader9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DVertexShader9_AddRef(p)              (p)->AddRef()
+#define IDirect3DVertexShader9_Release(p)             (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DPixelShader9 interface
+ */
+#define INTERFACE IDirect3DPixelShader9
+DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DPixelShader9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DPixelShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DPixelShader9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DPixelShader9_AddRef(p)              (p)->AddRef()
+#define IDirect3DPixelShader9_Release(p)             (p)->Release()
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DStateBlock9 interface
+ */
+#define INTERFACE IDirect3DStateBlock9
+DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DStateBlock9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(Capture)(THIS) PURE;
+    STDMETHOD(Apply)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DStateBlock9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DStateBlock9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DStateBlock9_Capture(p)             (p)->lpVtbl->Capture(p)
+#define IDirect3DStateBlock9_Apply(p)               (p)->lpVtbl->Apply(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DStateBlock9_AddRef(p)              (p)->AddRef()
+#define IDirect3DStateBlock9_Release(p)             (p)->Release()
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DStateBlock9_Capture(p)             (p)->Capture()
+#define IDirect3DStateBlock9_Apply(p)               (p)->Apply()
+#endif
+
+/*****************************************************************************
+ * IDirect3DQuery9 interface
+ */
+#define INTERFACE IDirect3DQuery9
+DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DQuery9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;
+    STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;
+    STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;
+    STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)
+#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->AddRef()
+#define IDirect3DQuery9_Release(p) (p)->Release()
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DQuery9_GetType(p) (p)->GetType()
+#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()
+#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice9 interface
+ */
+#define INTERFACE IDirect3DDevice9
+DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice9 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(EvictManagedResources)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect,
+            HWND dst_window_override, const RGNDATA *dirty_region) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE;
+    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+            IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+            IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE;
+    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR color) PURE;
+    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags,
+            D3DCOLOR color, float z, DWORD stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+    STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE;
+    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type,
+            UINT primitive_count, const void *data, UINT stride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count,
+            UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+    STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements,
+            IDirect3DVertexDeclaration9 **declaration) PURE;
+    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_code, IDirect3DVertexShader9 **shader) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9_EndScene(p)                                   (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice9_Release(p)            (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()
+#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->EvictManagedResources()
+#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->GetDirect3D(a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->ShowCursor(a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9_Reset(p,a)                                    (p)->Reset(a)
+#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9_BeginScene(p)                                 (p)->BeginScene()
+#define IDirect3DDevice9_EndScene(p)                                   (p)->EndScene()
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->SetTransform(a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->GetTransform(a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9_SetViewport(p,a)                              (p)->SetViewport(a)
+#define IDirect3DDevice9_GetViewport(p,a)                              (p)->GetViewport(a)
+#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->SetMaterial(a)
+#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->GetMaterial(a)
+#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->SetLight(a,b)
+#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->GetLight(a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->LightEnable(a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->BeginStateBlock()
+#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->EndStateBlock(a)
+#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->SetClipStatus(a)
+#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->GetClipStatus(a)
+#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->GetTexture(a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->SetTexture(a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->ValidateDevice(a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->SetScissorRect(a)
+#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->GetScissorRect(a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)
+#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->GetNPatchMode()
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->SetFVF(a)
+#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->GetFVF(a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->SetVertexShader(a)
+#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->GetVertexShader(a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_SetIndices(p,a)                               (p)->SetIndices(a)
+#define IDirect3DDevice9_GetIndices(p,a)                               (p)->GetIndices(a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->SetPixelShader(a)
+#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->GetPixelShader(a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->DeletePatch(a)
+#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice9Ex interface
+ */
+#define INTERFACE IDirect3DDevice9Ex
+DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice9 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(EvictManagedResources)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect,
+            HWND dst_window_override, const RGNDATA *dirty_region) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE;
+    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+            IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+            IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE;
+    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR color) PURE;
+    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags,
+            D3DCOLOR color, float z, DWORD stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+    STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE;
+    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type,
+            UINT primitive_count, const void *data, UINT stride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count,
+            UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+    STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements,
+            IDirect3DVertexDeclaration9 **declaration) PURE;
+    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_core, IDirect3DVertexShader9 **shader) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+    /* IDirect3DDevice9Ex methods */
+    STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;
+    STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,
+            IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,
+            D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;
+    STDMETHOD(PresentEx)(THIS_ const RECT *src_rect, const RECT *dst_rect,
+            HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) PURE;
+    STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE;
+    STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;
+    STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;
+    STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;
+    STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;
+    STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE;
+    STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;
+    STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+    STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+    STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,
+            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,
+            IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;
+    STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;
+    STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9Ex_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9Ex_EndScene(p)                                   (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->lpVtbl->PresentEx(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->lpVtbl->GetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->lpVtbl->SetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->lpVtbl->WaitForVBlank(p,a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->lpVtbl->CheckResourceResidency(p,a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->lpVtbl->SetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->lpVtbl->GetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->lpVtbl->CheckDeviceState(p,a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                 (p)->lpVtbl->ResetEx(p,a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9Ex_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice9Ex_Release(p)            (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->EvictManagedResources()
+#define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->GetDirect3D(a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->ShowCursor(a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->Reset(a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->BeginScene()
+#define IDirect3DDevice9Ex_EndScene(p)                                   (p)->EndScene()
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->SetTransform(a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->GetTransform(a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->SetViewport(a)
+#define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->GetViewport(a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->SetMaterial(a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->GetMaterial(a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->SetLight(a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->GetLight(a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->LightEnable(a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->BeginStateBlock()
+#define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->EndStateBlock(a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->SetClipStatus(a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->GetClipStatus(a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->GetTexture(a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->SetTexture(a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->ValidateDevice(a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->SetScissorRect(a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->GetScissorRect(a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->GetNPatchMode()
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->SetFVF(a)
+#define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->GetFVF(a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->SetVertexShader(a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->GetVertexShader(a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->SetIndices(a)
+#define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->GetIndices(a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->SetPixelShader(a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->GetPixelShader(a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->DeletePatch(a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->SetConvolutionMonoKernel(a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->ComposeRects(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->PresentEx(a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->GetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->SetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->WaitForVBlank(a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->CheckResourceResidency(a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->SetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->GetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->CheckDeviceState(a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                (p)->ResetEx(a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->GetDisplayModeEx(a,b,c)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* defined(__cplusplus) */
+
+int WINAPI D3DPERF_BeginEvent(D3DCOLOR color, const WCHAR *name);
+int WINAPI D3DPERF_EndEvent(void);
+DWORD WINAPI D3DPERF_GetStatus(void);
+BOOL WINAPI D3DPERF_QueryRepeatFrame(void);
+void WINAPI D3DPERF_SetMarker(D3DCOLOR color, const WCHAR *name);
+void WINAPI D3DPERF_SetOptions(DWORD options);
+void WINAPI D3DPERF_SetRegion(D3DCOLOR color, const WCHAR *name);
+
+/* Define the main entrypoint as well */
+IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+
+#endif /* _D3D9_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h
new file mode 100644
index 0000000..84b2fa9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h
@@ -0,0 +1,404 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ *                         Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9CAPS_H
+#define __WINE_D3D9CAPS_H
+
+/*
+ * Definitions
+ */
+#define D3DCAPS_READ_SCANLINE 0x20000
+
+#define D3DCURSORCAPS_COLOR   1
+#define D3DCURSORCAPS_LOWRES  2
+
+
+#define D3DDEVCAPS2_STREAMOFFSET                        __MSABI_LONG(0x00000001)
+#define D3DDEVCAPS2_DMAPNPATCH                          __MSABI_LONG(0x00000002)
+#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH                 __MSABI_LONG(0x00000004)
+#define D3DDEVCAPS2_ADAPTIVETESSNPATCH                  __MSABI_LONG(0x00000008)
+#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES       __MSABI_LONG(0x00000010)
+#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH                __MSABI_LONG(0x00000020)
+#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET  __MSABI_LONG(0x00000040)
+
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY     0x0000010
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY      0x0000020
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY    0x0000040
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY     0x0000080
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY     0x0000100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY      0x0000200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX        0x0000400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP      0x0000800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM   0x0001000
+#define D3DDEVCAPS_DRAWPRIMITIVES2         0x0002000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x0008000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x0010000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x0020000
+#define D3DDEVCAPS_HWRASTERIZATION         0x0080000
+#define D3DDEVCAPS_PUREDEVICE              0x0100000
+#define D3DDEVCAPS_QUINTICRTPATCHES        0x0200000
+#define D3DDEVCAPS_RTPATCHES               0x0400000
+#define D3DDEVCAPS_RTPATCHHANDLEZERO       0x0800000
+#define D3DDEVCAPS_NPATCHES                0x1000000
+
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK  0x00FFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000
+#define D3DFVFCAPS_PSIZE              0x100000
+
+#define D3DLINECAPS_TEXTURE           0x01
+#define D3DLINECAPS_ZTEST             0x02
+#define D3DLINECAPS_BLEND             0x04
+#define D3DLINECAPS_ALPHACMP          0x08
+#define D3DLINECAPS_FOG               0x10
+#define D3DLINECAPS_ANTIALIAS         0x20
+
+#define D3DPBLENDCAPS_ZERO            0x00000001
+#define D3DPBLENDCAPS_ONE             0x00000002
+#define D3DPBLENDCAPS_SRCCOLOR        0x00000004
+#define D3DPBLENDCAPS_INVSRCCOLOR     0x00000008
+#define D3DPBLENDCAPS_SRCALPHA        0x00000010
+#define D3DPBLENDCAPS_INVSRCALPHA     0x00000020
+#define D3DPBLENDCAPS_DESTALPHA       0x00000040
+#define D3DPBLENDCAPS_INVDESTALPHA    0x00000080
+#define D3DPBLENDCAPS_DESTCOLOR       0x00000100
+#define D3DPBLENDCAPS_INVDESTCOLOR    0x00000200
+#define D3DPBLENDCAPS_SRCALPHASAT     0x00000400
+#define D3DPBLENDCAPS_BOTHSRCALPHA    0x00000800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000
+#define D3DPBLENDCAPS_BLENDFACTOR     0x00002000
+
+#define D3DPCMPCAPS_NEVER        0x01
+#define D3DPCMPCAPS_LESS         0x02
+#define D3DPCMPCAPS_EQUAL        0x04
+#define D3DPCMPCAPS_LESSEQUAL    0x08
+#define D3DPCMPCAPS_GREATER      0x10
+#define D3DPCMPCAPS_NOTEQUAL     0x20
+#define D3DPCMPCAPS_GREATEREQUAL 0x40
+#define D3DPCMPCAPS_ALWAYS       0x80
+
+#define D3DPMISCCAPS_MASKZ                      __MSABI_LONG(0x00000002)
+#define D3DPMISCCAPS_LINEPATTERNREP             __MSABI_LONG(0x00000004)
+#define D3DPMISCCAPS_CULLNONE                   __MSABI_LONG(0x00000010)
+#define D3DPMISCCAPS_CULLCW                     __MSABI_LONG(0x00000020)
+#define D3DPMISCCAPS_CULLCCW                    __MSABI_LONG(0x00000040)
+#define D3DPMISCCAPS_COLORWRITEENABLE           __MSABI_LONG(0x00000080)
+#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS      __MSABI_LONG(0x00000100)
+#define D3DPMISCCAPS_CLIPTLVERTS                __MSABI_LONG(0x00000200)
+#define D3DPMISCCAPS_TSSARGTEMP                 __MSABI_LONG(0x00000400)
+#define D3DPMISCCAPS_BLENDOP                    __MSABI_LONG(0x00000800)
+#define D3DPMISCCAPS_NULLREFERENCE              __MSABI_LONG(0x00001000)
+#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS      __MSABI_LONG(0x00004000)
+#define D3DPMISCCAPS_PERSTAGECONSTANT           __MSABI_LONG(0x00008000)
+#define D3DPMISCCAPS_FOGANDSPECULARALPHA        __MSABI_LONG(0x00010000)
+#define D3DPMISCCAPS_SEPARATEALPHABLEND         __MSABI_LONG(0x00020000)
+#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS    __MSABI_LONG(0x00040000)
+#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING __MSABI_LONG(0x00080000)
+#define D3DPMISCCAPS_FOGVERTEXCLAMPED           __MSABI_LONG(0x00100000)
+
+
+#define D3DPRASTERCAPS_DITHER                     __MSABI_LONG(0x00000001)
+#define D3DPRASTERCAPS_PAT                        __MSABI_LONG(0x00000008)
+#define D3DPRASTERCAPS_ZTEST                      __MSABI_LONG(0x00000010)
+#define D3DPRASTERCAPS_FOGVERTEX                  __MSABI_LONG(0x00000080)
+#define D3DPRASTERCAPS_FOGTABLE                   __MSABI_LONG(0x00000100)
+#define D3DPRASTERCAPS_ANTIALIASEDGES             __MSABI_LONG(0x00001000)
+#define D3DPRASTERCAPS_MIPMAPLODBIAS              __MSABI_LONG(0x00002000)
+#define D3DPRASTERCAPS_ZBIAS                      __MSABI_LONG(0x00004000)
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR             __MSABI_LONG(0x00008000)
+#define D3DPRASTERCAPS_FOGRANGE                   __MSABI_LONG(0x00010000)
+#define D3DPRASTERCAPS_ANISOTROPY                 __MSABI_LONG(0x00020000)
+#define D3DPRASTERCAPS_WBUFFER                    __MSABI_LONG(0x00040000)
+#define D3DPRASTERCAPS_WFOG                       __MSABI_LONG(0x00100000)
+#define D3DPRASTERCAPS_ZFOG                       __MSABI_LONG(0x00200000)
+#define D3DPRASTERCAPS_COLORPERSPECTIVE           __MSABI_LONG(0x00400000)
+#define D3DPRASTERCAPS_SCISSORTEST                __MSABI_LONG(0x01000000)
+#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS        __MSABI_LONG(0x02000000)
+#define D3DPRASTERCAPS_DEPTHBIAS                  __MSABI_LONG(0x04000000)
+#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE         __MSABI_LONG(0x08000000)
+
+#define D3DPRESENT_INTERVAL_DEFAULT               0x00000000
+#define D3DPRESENT_INTERVAL_ONE                   0x00000001
+#define D3DPRESENT_INTERVAL_TWO                   0x00000002
+#define D3DPRESENT_INTERVAL_THREE                 0x00000004
+#define D3DPRESENT_INTERVAL_FOUR                  0x00000008
+#define D3DPRESENT_INTERVAL_IMMEDIATE             0x80000000
+
+#define D3DPSHADECAPS_COLORGOURAUDRGB             0x00008
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB          0x00200
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND           0x04000
+#define D3DPSHADECAPS_FOGGOURAUD                  0x80000
+
+#define D3DPTADDRESSCAPS_WRAP                     0x01
+#define D3DPTADDRESSCAPS_MIRROR                   0x02
+#define D3DPTADDRESSCAPS_CLAMP                    0x04
+#define D3DPTADDRESSCAPS_BORDER                   0x08
+#define D3DPTADDRESSCAPS_INDEPENDENTUV            0x10
+#define D3DPTADDRESSCAPS_MIRRORONCE               0x20
+
+#define D3DPTEXTURECAPS_PERSPECTIVE              __MSABI_LONG(0x00000001)
+#define D3DPTEXTURECAPS_POW2                     __MSABI_LONG(0x00000002)
+#define D3DPTEXTURECAPS_ALPHA                    __MSABI_LONG(0x00000004)
+#define D3DPTEXTURECAPS_SQUAREONLY               __MSABI_LONG(0x00000020)
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE __MSABI_LONG(0x00000040)
+#define D3DPTEXTURECAPS_ALPHAPALETTE             __MSABI_LONG(0x00000080)
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL       __MSABI_LONG(0x00000100)
+#define D3DPTEXTURECAPS_PROJECTED                __MSABI_LONG(0x00000400)
+#define D3DPTEXTURECAPS_CUBEMAP                  __MSABI_LONG(0x00000800)
+#define D3DPTEXTURECAPS_VOLUMEMAP                __MSABI_LONG(0x00002000)
+#define D3DPTEXTURECAPS_MIPMAP                   __MSABI_LONG(0x00004000)
+#define D3DPTEXTURECAPS_MIPVOLUMEMAP             __MSABI_LONG(0x00008000)
+#define D3DPTEXTURECAPS_MIPCUBEMAP               __MSABI_LONG(0x00010000)
+#define D3DPTEXTURECAPS_CUBEMAP_POW2             __MSABI_LONG(0x00020000)
+#define D3DPTEXTURECAPS_VOLUMEMAP_POW2           __MSABI_LONG(0x00040000)
+#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV       __MSABI_LONG(0x00200000)
+
+#define D3DPTFILTERCAPS_MINFPOINT                0x00000100
+#define D3DPTFILTERCAPS_MINFLINEAR               0x00000200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC          0x00000400
+#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD        0x00000800
+#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD         0x00001000
+#define D3DPTFILTERCAPS_MIPFPOINT                0x00010000
+#define D3DPTFILTERCAPS_MIPFLINEAR               0x00020000
+#define D3DPTFILTERCAPS_MAGFPOINT                0x01000000
+#define D3DPTFILTERCAPS_MAGFLINEAR               0x02000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC          0x04000000
+#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD        0x08000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD         0x10000000
+
+#define D3DSTENCILCAPS_KEEP                      0x01
+#define D3DSTENCILCAPS_ZERO                      0x02
+#define D3DSTENCILCAPS_REPLACE                   0x04
+#define D3DSTENCILCAPS_INCRSAT                   0x08
+#define D3DSTENCILCAPS_DECRSAT                   0x10
+#define D3DSTENCILCAPS_INVERT                    0x20
+#define D3DSTENCILCAPS_INCR                      0x40
+#define D3DSTENCILCAPS_DECR                      0x80
+#define D3DSTENCILCAPS_TWOSIDED                  0x100
+
+#define D3DTEXOPCAPS_DISABLE                     0x0000001
+#define D3DTEXOPCAPS_SELECTARG1                  0x0000002
+#define D3DTEXOPCAPS_SELECTARG2                  0x0000004
+#define D3DTEXOPCAPS_MODULATE                    0x0000008
+#define D3DTEXOPCAPS_MODULATE2X                  0x0000010
+#define D3DTEXOPCAPS_MODULATE4X                  0x0000020
+#define D3DTEXOPCAPS_ADD                         0x0000040
+#define D3DTEXOPCAPS_ADDSIGNED                   0x0000080
+#define D3DTEXOPCAPS_ADDSIGNED2X                 0x0000100
+#define D3DTEXOPCAPS_SUBTRACT                    0x0000200
+#define D3DTEXOPCAPS_ADDSMOOTH                   0x0000400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA           0x0000800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA           0x0001000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA            0x0002000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM         0x0004000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA           0x0008000
+#define D3DTEXOPCAPS_PREMODULATE                 0x0010000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR      0x0020000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA      0x0040000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR   0x0080000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA   0x0100000
+#define D3DTEXOPCAPS_BUMPENVMAP                  0x0200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE         0x0400000
+#define D3DTEXOPCAPS_DOTPRODUCT3                 0x0800000
+#define D3DTEXOPCAPS_MULTIPLYADD                 0x1000000
+#define D3DTEXOPCAPS_LERP                        0x2000000
+
+#define D3DVTXPCAPS_TEXGEN                         __MSABI_LONG(0x00000001)
+#define D3DVTXPCAPS_MATERIALSOURCE7                __MSABI_LONG(0x00000002)
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS              __MSABI_LONG(0x00000008)
+#define D3DVTXPCAPS_POSITIONALLIGHTS               __MSABI_LONG(0x00000010)
+#define D3DVTXPCAPS_LOCALVIEWER                    __MSABI_LONG(0x00000020)
+#define D3DVTXPCAPS_TWEENING                       __MSABI_LONG(0x00000040)
+#define D3DVTXPCAPS_TEXGEN_SPHEREMAP               __MSABI_LONG(0x00000100)
+#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER       __MSABI_LONG(0x00000200)
+
+#define D3DDTCAPS_UBYTE4                           __MSABI_LONG(0x00000001)
+#define D3DDTCAPS_UBYTE4N                          __MSABI_LONG(0x00000002)
+#define D3DDTCAPS_SHORT2N                          __MSABI_LONG(0x00000004)
+#define D3DDTCAPS_SHORT4N                          __MSABI_LONG(0x00000008)
+#define D3DDTCAPS_USHORT2N                         __MSABI_LONG(0x00000010)
+#define D3DDTCAPS_USHORT4N                         __MSABI_LONG(0x00000020)
+#define D3DDTCAPS_UDEC3                            __MSABI_LONG(0x00000040)
+#define D3DDTCAPS_DEC3N                            __MSABI_LONG(0x00000080)
+#define D3DDTCAPS_FLOAT16_2                        __MSABI_LONG(0x00000100)
+#define D3DDTCAPS_FLOAT16_4                        __MSABI_LONG(0x00000200)
+
+#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD  __MSABI_LONG(0x00000020)
+#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION       __MSABI_LONG(0x00000080)
+#define D3DCAPS3_COPY_TO_VIDMEM                    __MSABI_LONG(0x00000100)
+#define D3DCAPS3_COPY_TO_SYSTEMMEM                 __MSABI_LONG(0x00000200)
+#define D3DCAPS3_RESERVED                          __MSABI_LONG(0x8000001F)
+
+#define D3DCAPS2_NO2DDURING3DSCENE                 __MSABI_LONG(0x00000002)
+#define D3DCAPS2_FULLSCREENGAMMA                   __MSABI_LONG(0x00020000)
+#define D3DCAPS2_CANRENDERWINDOWED                 __MSABI_LONG(0x00080000)
+#define D3DCAPS2_CANCALIBRATEGAMMA                 __MSABI_LONG(0x00100000)
+#define D3DCAPS2_RESERVED                          __MSABI_LONG(0x02000000)
+#define D3DCAPS2_CANMANAGERESOURCE                 __MSABI_LONG(0x10000000)
+#define D3DCAPS2_DYNAMICTEXTURES                   __MSABI_LONG(0x20000000)
+#define D3DCAPS2_CANAUTOGENMIPMAP                  __MSABI_LONG(0x40000000)
+
+
+#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH  24
+#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH  0
+#define D3DVS20_MAX_NUMTEMPS                 32
+#define D3DVS20_MIN_NUMTEMPS                 12
+#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH   4
+#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH   1
+
+#define D3DVS20CAPS_PREDICATION              (1 << 0)
+
+#define D3DPS20CAPS_ARBITRARYSWIZZLE         (1 << 0)
+#define D3DPS20CAPS_GRADIENTINSTRUCTIONS     (1 << 1)
+#define D3DPS20CAPS_PREDICATION              (1 << 2)
+#define D3DPS20CAPS_NODEPENDENTREADLIMIT     (1 << 3)
+#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT    (1 << 4)
+
+#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH  24
+#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH  0
+#define D3DPS20_MAX_NUMTEMPS                 32
+#define D3DPS20_MIN_NUMTEMPS                 12
+#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH   4
+#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH   0
+#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS      512
+#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS      96
+
+#define D3DMIN30SHADERINSTRUCTIONS          512
+#define D3DMAX30SHADERINSTRUCTIONS          32768
+
+
+typedef struct _D3DVSHADERCAPS2_0 {
+  DWORD  Caps;
+  INT    DynamicFlowControlDepth;
+  INT    NumTemps;
+  INT    StaticFlowControlDepth;
+} D3DVSHADERCAPS2_0;
+
+typedef struct _D3DPSHADERCAPS2_0 {
+  DWORD  Caps;
+  INT    DynamicFlowControlDepth;
+  INT    NumTemps;
+  INT    StaticFlowControlDepth;
+  INT    NumInstructionSlots;
+} D3DPSHADERCAPS2_0;
+
+/*
+ * The d3dcaps9 structure
+ */
+typedef struct _D3DCAPS9 {
+  D3DDEVTYPE          DeviceType;
+  UINT                AdapterOrdinal;
+  
+  DWORD               Caps;
+  DWORD               Caps2;
+  DWORD               Caps3;
+  DWORD               PresentationIntervals;
+  
+  DWORD               CursorCaps;
+  
+  DWORD               DevCaps;
+  
+  DWORD               PrimitiveMiscCaps;
+  DWORD               RasterCaps;
+  DWORD               ZCmpCaps;
+  DWORD               SrcBlendCaps;
+  DWORD               DestBlendCaps;
+  DWORD               AlphaCmpCaps;
+  DWORD               ShadeCaps;
+  DWORD               TextureCaps;
+  DWORD               TextureFilterCaps;
+  DWORD               CubeTextureFilterCaps;
+  DWORD               VolumeTextureFilterCaps;
+  DWORD               TextureAddressCaps;
+  DWORD               VolumeTextureAddressCaps;
+  
+  DWORD               LineCaps;
+  
+  DWORD               MaxTextureWidth, MaxTextureHeight;
+  DWORD               MaxVolumeExtent;
+  
+  DWORD               MaxTextureRepeat;
+  DWORD               MaxTextureAspectRatio;
+  DWORD               MaxAnisotropy;
+  float               MaxVertexW;
+  
+  float               GuardBandLeft;
+  float               GuardBandTop;
+  float               GuardBandRight;
+  float               GuardBandBottom;
+  
+  float               ExtentsAdjust;
+  DWORD               StencilCaps;
+  
+  DWORD               FVFCaps;
+  DWORD               TextureOpCaps;
+  DWORD               MaxTextureBlendStages;
+  DWORD               MaxSimultaneousTextures;
+  
+  DWORD               VertexProcessingCaps;
+  DWORD               MaxActiveLights;
+  DWORD               MaxUserClipPlanes;
+  DWORD               MaxVertexBlendMatrices;
+  DWORD               MaxVertexBlendMatrixIndex;
+  
+  float               MaxPointSize;
+  
+  DWORD               MaxPrimitiveCount;
+  DWORD               MaxVertexIndex;
+  DWORD               MaxStreams;
+  DWORD               MaxStreamStride;
+  
+  DWORD               VertexShaderVersion;
+  DWORD               MaxVertexShaderConst;
+  
+  DWORD               PixelShaderVersion;
+  float               PixelShader1xMaxValue;
+
+  /* DX 9 */
+  DWORD               DevCaps2;
+
+  float               MaxNpatchTessellationLevel;
+  DWORD               Reserved5;
+
+  UINT                MasterAdapterOrdinal;   
+  UINT                AdapterOrdinalInGroup;  
+  UINT                NumberOfAdaptersInGroup;
+  DWORD               DeclTypes;              
+  DWORD               NumSimultaneousRTs;     
+  DWORD               StretchRectFilterCaps;  
+  D3DVSHADERCAPS2_0   VS20Caps;
+  D3DPSHADERCAPS2_0   PS20Caps;
+  DWORD               VertexTextureFilterCaps;
+  DWORD               MaxVShaderInstructionsExecuted;
+  DWORD               MaxPShaderInstructionsExecuted;
+  DWORD               MaxVertexShader30InstructionSlots; 
+  DWORD               MaxPixelShader30InstructionSlots;
+
+} D3DCAPS9;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h
new file mode 100644
index 0000000..db7f42d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h
@@ -0,0 +1,1595 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades 
+ * Copyright (C) 2002-2003 Raphael Junqueira
+ * Copyright (C) 2005 Oliver Stieber
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9TYPES_H
+#define __WINE_D3D9TYPES_H
+
+/*****************************************************************************
+ * Direct 3D v9 #defines
+ */
+#define D3DCLEAR_TARGET   __MSABI_LONG(0x00000001)
+#define D3DCLEAR_ZBUFFER  __MSABI_LONG(0x00000002)
+#define D3DCLEAR_STENCIL  __MSABI_LONG(0x00000004)
+
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+#define D3DCOLOR_ARGB(a,r,g,b)       ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
+#define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
+#define D3DCOLOR_RGBA(r,g,b,a)       D3DCOLOR_ARGB(a,r,g,b)
+#define D3DCOLOR_XRGB(r,g,b)         D3DCOLOR_ARGB(0xff,r,g,b)
+#define D3DCOLOR_XYUV(y,u,v)         D3DCOLOR_ARGB(0xFF,y,u,v)
+#define D3DCOLOR_AYUV(a,y,u,v)       D3DCOLOR_ARGB(a,y,u,v)
+
+#define D3DCS_LEFT                   __MSABI_LONG(0x001)
+#define D3DCS_RIGHT                  __MSABI_LONG(0x002)
+#define D3DCS_TOP                    __MSABI_LONG(0x004)
+#define D3DCS_BOTTOM                 __MSABI_LONG(0x008)
+#define D3DCS_FRONT                  __MSABI_LONG(0x010)
+#define D3DCS_BACK                   __MSABI_LONG(0x020)
+#define D3DCS_PLANE0                 __MSABI_LONG(0x040)
+#define D3DCS_PLANE1                 __MSABI_LONG(0x080)
+#define D3DCS_PLANE2                 __MSABI_LONG(0x100)
+#define D3DCS_PLANE3                 __MSABI_LONG(0x200)
+#define D3DCS_PLANE4                 __MSABI_LONG(0x400)
+#define D3DCS_PLANE5                 __MSABI_LONG(0x800)
+#define D3DCS_ALL                    __MSABI_LONG(0xFFF)
+
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+
+#define D3DLOCK_READONLY           0x0010
+#define D3DLOCK_NOSYSLOCK          0x0800
+#define D3DLOCK_NOOVERWRITE        0x1000
+#define D3DLOCK_DISCARD            0x2000
+#define D3DLOCK_DONOTWAIT          0x4000
+#define D3DLOCK_NO_DIRTY_UPDATE    0x8000
+
+#define D3DMAXUSERCLIPPLANES       32
+#define D3DCLIPPLANE0              (1 << 0)
+#define D3DCLIPPLANE1              (1 << 1)
+#define D3DCLIPPLANE2              (1 << 2)
+#define D3DCLIPPLANE3              (1 << 3)
+#define D3DCLIPPLANE4              (1 << 4)
+#define D3DCLIPPLANE5              (1 << 5)
+
+
+#define D3DRENDERSTATE_WRAPBIAS    __MSABI_LONG(128U)
+
+/* MSDN has this in d3d9caps.h, but it should be here */
+#define D3DTSS_TCI_PASSTHRU                       0x00000
+#define D3DTSS_TCI_CAMERASPACENORMAL              0x10000
+#define D3DTSS_TCI_CAMERASPACEPOSITION            0x20000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR    0x30000
+#define D3DTSS_TCI_SPHEREMAP                      0x40000
+
+
+#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
+#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
+#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
+#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
+#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
+
+#define D3DUSAGE_RENDERTARGET       __MSABI_LONG(0x00000001)
+#define D3DUSAGE_DEPTHSTENCIL       __MSABI_LONG(0x00000002)
+#define D3DUSAGE_WRITEONLY          __MSABI_LONG(0x00000008)
+#define D3DUSAGE_SOFTWAREPROCESSING __MSABI_LONG(0x00000010)
+#define D3DUSAGE_DONOTCLIP          __MSABI_LONG(0x00000020)
+#define D3DUSAGE_POINTS             __MSABI_LONG(0x00000040)
+#define D3DUSAGE_RTPATCHES          __MSABI_LONG(0x00000080)
+#define D3DUSAGE_NPATCHES           __MSABI_LONG(0x00000100)
+#define D3DUSAGE_DYNAMIC            __MSABI_LONG(0x00000200)
+#define D3DUSAGE_AUTOGENMIPMAP      __MSABI_LONG(0x00000400)
+#define D3DUSAGE_DMAP               __MSABI_LONG(0x00004000)
+
+#define D3DUSAGE_QUERY_FILTER                   __MSABI_LONG(0x00020000)
+#define D3DUSAGE_QUERY_LEGACYBUMPMAP            __MSABI_LONG(0x00008000)
+#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000)
+#define D3DUSAGE_QUERY_SRGBREAD                 __MSABI_LONG(0x00010000)
+#define D3DUSAGE_QUERY_SRGBWRITE                __MSABI_LONG(0x00040000)
+#define D3DUSAGE_QUERY_VERTEXTEXTURE            __MSABI_LONG(0x00100000)
+#define D3DUSAGE_QUERY_WRAPANDMIP               __MSABI_LONG(0x00200000)
+
+#define D3DWRAP_U        1
+#define D3DWRAP_V        2
+#define D3DWRAP_W        4
+#define D3DWRAPCOORD_0   1
+#define D3DWRAPCOORD_1   2
+#define D3DWRAPCOORD_2   4
+#define D3DWRAPCOORD_3   8
+
+#define MAX_DEVICE_IDENTIFIER_STRING        512
+
+#define D3DFVF_RESERVED0           0x0001
+#define D3DFVF_POSITION_MASK       0x400E
+#define D3DFVF_XYZ                 0x0002
+#define D3DFVF_XYZRHW              0x0004
+#define D3DFVF_XYZB1               0x0006
+#define D3DFVF_XYZB2               0x0008
+#define D3DFVF_XYZB3               0x000a
+#define D3DFVF_XYZB4               0x000c
+#define D3DFVF_XYZB5               0x000e
+#define D3DFVF_XYZW                0x4002
+#define D3DFVF_NORMAL              0x0010
+#define D3DFVF_PSIZE               0x0020
+#define D3DFVF_DIFFUSE             0x0040
+#define D3DFVF_SPECULAR            0x0080
+#define D3DFVF_TEXCOUNT_MASK       0x0f00
+#define D3DFVF_TEXCOUNT_SHIFT           8
+#define D3DFVF_TEX0                0x0000
+#define D3DFVF_TEX1                0x0100
+#define D3DFVF_TEX2                0x0200
+#define D3DFVF_TEX3                0x0300
+#define D3DFVF_TEX4                0x0400
+#define D3DFVF_TEX5                0x0500
+#define D3DFVF_TEX6                0x0600
+#define D3DFVF_TEX7                0x0700
+#define D3DFVF_TEX8                0x0800
+#define D3DFVF_LASTBETA_UBYTE4     0x1000
+#define D3DFVF_LASTBETA_D3DCOLOR   0x8000
+#define D3DFVF_RESERVED2           0x6000
+
+#define D3DTA_SELECTMASK        0x0000000f
+#define D3DTA_DIFFUSE           0x00000000
+#define D3DTA_CURRENT           0x00000001
+#define D3DTA_TEXTURE           0x00000002
+#define D3DTA_TFACTOR           0x00000003
+#define D3DTA_SPECULAR          0x00000004
+#define D3DTA_TEMP              0x00000005
+#define D3DTA_CONSTANT          0x00000006
+#define D3DTA_COMPLEMENT        0x00000010
+#define D3DTA_ALPHAREPLICATE    0x00000020
+
+#define D3DCOLORWRITEENABLE_RED   (__MSABI_LONG(1)<<0)
+#define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1)
+#define D3DCOLORWRITEENABLE_BLUE  (__MSABI_LONG(1)<<2)
+#define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3)
+
+#define D3DPV_DONOTCOPYDATA         (1 << 0)
+
+#define D3DSTREAMSOURCE_INDEXEDDATA  (1 << 30)
+#define D3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4
+
+#define MAXD3DDECLLENGTH         64 /* +end marker */
+#define MAXD3DDECLMETHOD         D3DDECLMETHOD_LOOKUPPRESAMPLED
+#define MAXD3DDECLTYPE           D3DDECLTYPE_UNUSED
+#define MAXD3DDECLUSAGE          D3DDECLUSAGE_SAMPLE
+#define MAXD3DDECLUSAGEINDEX     15
+
+#define D3DDMAPSAMPLER 256
+#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
+#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
+#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
+#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
+
+#ifndef MAKEFOURCC
+#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \
+    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \
+    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
+
+/* Constants used by D3DPRESENT_PARAMETERS. when creating a device or swapchain */
+
+#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER  0x00000001 /* Create a lockable backbuffer */
+#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL 0x00000002 /* Discard Z buffer */
+#define D3DPRESENTFLAG_DEVICECLIP           0x00000004 /* Clip the window blited into the client area 2k + xp only */
+#define D3DPRESENTFLAG_VIDEO                0x00000010 /* backbuffer 'may' contain video data */
+#define D3DPRESENTFLAG_NOAUTOROTATE         0x00000020 /* d3d9ex, ignore display rotation */
+#define D3DPRESENTFLAG_UNPRUNEDMODE         0x00000040 /* d3d9ex, specify invalid display modes */
+
+#define D3DPRESENT_BACK_BUFFERS_MAX         __MSABI_LONG(3)
+#define D3DPRESENT_RATE_DEFAULT             0x00000000
+
+/**************************** 
+ * Vertex Shaders Declaration
+ */
+
+typedef enum _D3DDECLUSAGE {
+  D3DDECLUSAGE_POSITION     = 0,
+  D3DDECLUSAGE_BLENDWEIGHT  = 1,
+  D3DDECLUSAGE_BLENDINDICES = 2,
+  D3DDECLUSAGE_NORMAL       = 3,      
+  D3DDECLUSAGE_PSIZE        = 4,       
+  D3DDECLUSAGE_TEXCOORD     = 5,    
+  D3DDECLUSAGE_TANGENT      = 6,     
+  D3DDECLUSAGE_BINORMAL     = 7,    
+  D3DDECLUSAGE_TESSFACTOR   = 8,  
+  D3DDECLUSAGE_POSITIONT    = 9,   
+  D3DDECLUSAGE_COLOR        = 10,       
+  D3DDECLUSAGE_FOG          = 11,        
+  D3DDECLUSAGE_DEPTH        = 12,      
+  D3DDECLUSAGE_SAMPLE       = 13     
+} D3DDECLUSAGE;
+
+#define D3DMAXDECLUSAGE         D3DDECLUSAGE_SAMPLE
+#define D3DMAXDECLUSAGEINDEX    15
+#define D3DMAXDECLLENGTH        18
+#define D3DMAXDECLUSAGE_DX8     D3DDECLUSAGE_TEXCOORD
+
+typedef enum _D3DDECLMETHOD {
+  D3DDECLMETHOD_DEFAULT          = 0,
+  D3DDECLMETHOD_PARTIALU         = 1,
+  D3DDECLMETHOD_PARTIALV         = 2,
+  D3DDECLMETHOD_CROSSUV          = 3,
+  D3DDECLMETHOD_UV               = 4,
+  D3DDECLMETHOD_LOOKUP           = 5,
+  D3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} D3DDECLMETHOD;
+
+
+#define D3DMAXDECLMETHOD        D3DDECLMETHOD_LOOKUPPRESAMPLED
+
+typedef enum _D3DDECLTYPE {
+  D3DDECLTYPE_FLOAT1    =  0,
+  D3DDECLTYPE_FLOAT2    =  1,
+  D3DDECLTYPE_FLOAT3    =  2,
+  D3DDECLTYPE_FLOAT4    =  3,
+  D3DDECLTYPE_D3DCOLOR  =  4,
+  D3DDECLTYPE_UBYTE4    =  5,
+  D3DDECLTYPE_SHORT2    =  6,
+  D3DDECLTYPE_SHORT4    =  7,
+  /* VS 2.0 */
+  D3DDECLTYPE_UBYTE4N   =  8,
+  D3DDECLTYPE_SHORT2N   =  9,
+  D3DDECLTYPE_SHORT4N   = 10,
+  D3DDECLTYPE_USHORT2N  = 11,
+  D3DDECLTYPE_USHORT4N  = 12,
+  D3DDECLTYPE_UDEC3     = 13,
+  D3DDECLTYPE_DEC3N     = 14,
+  D3DDECLTYPE_FLOAT16_2 = 15,
+  D3DDECLTYPE_FLOAT16_4 = 16,
+  D3DDECLTYPE_UNUSED    = 17,
+} D3DDECLTYPE;
+
+#define D3DMAXDECLTYPE          D3DDECLTYPE_UNUSED
+
+typedef struct _D3DVERTEXELEMENT9 {
+  WORD    Stream;
+  WORD    Offset;
+  BYTE    Type;
+  BYTE    Method;
+  BYTE    Usage;
+  BYTE    UsageIndex;
+} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;
+
+
+typedef enum _D3DQUERYTYPE {
+    D3DQUERYTYPE_VCACHE = 4,
+    D3DQUERYTYPE_RESOURCEMANAGER = 5,
+    D3DQUERYTYPE_VERTEXSTATS = 6,
+    D3DQUERYTYPE_EVENT = 8,
+    D3DQUERYTYPE_OCCLUSION = 9,
+    D3DQUERYTYPE_TIMESTAMP = 10,
+    D3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+    D3DQUERYTYPE_TIMESTAMPFREQ = 12,
+    D3DQUERYTYPE_PIPELINETIMINGS = 13,
+    D3DQUERYTYPE_INTERFACETIMINGS = 14,
+    D3DQUERYTYPE_VERTEXTIMINGS = 15,
+    D3DQUERYTYPE_PIXELTIMINGS = 16,
+    D3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+    D3DQUERYTYPE_CACHEUTILIZATION = 18
+} D3DQUERYTYPE;
+
+#define D3DISSUE_BEGIN   (1 << 1)
+#define D3DISSUE_END     (1 << 0)
+#define D3DGETDATA_FLUSH (1 << 0)
+
+
+#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}
+#define D3DDP_MAXTEXCOORD   8
+
+
+#define D3DVSD_MAKETOKENTYPE(TokenType) \
+  ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
+
+#define D3DVSD_CONST(ConstantAddress, Count) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))
+
+#define D3DVSD_END() 0xFFFFFFFF
+
+#define D3DVSD_NOP() 0x00000000
+
+#define D3DVSD_REG(VertexRegister, Type) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))
+
+#define D3DVSD_SKIP(Count) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))
+
+#define D3DVSD_STREAM(StreamNumber) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))
+
+#define D3DVSD_STREAM_TESS() \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
+
+#define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut))
+
+#define D3DVSD_TESSUV(Register) \
+  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register))
+
+
+/********************************
+ * Pixel/Vertex Shaders Functions
+ */
+
+/** Maximum number of supported texture coordinates sets operation */
+#define D3DDP_MAXTEXCOORD   8
+
+/** opcode token mask */
+#define D3DSI_OPCODE_MASK       0x0000FFFF
+#define D3DSI_INSTLENGTH_MASK   0x0F000000
+#define D3DSI_INSTLENGTH_SHIFT  24
+
+/** opcodes types for PS and VS */
+typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {
+  D3DSIO_NOP          =  0,
+  D3DSIO_MOV          =  1,
+  D3DSIO_ADD          =  2,
+  D3DSIO_SUB          =  3,
+  D3DSIO_MAD          =  4,
+  D3DSIO_MUL          =  5,
+  D3DSIO_RCP          =  6,
+  D3DSIO_RSQ          =  7,
+  D3DSIO_DP3          =  8,
+  D3DSIO_DP4          =  9,
+  D3DSIO_MIN          = 10,
+  D3DSIO_MAX          = 11,
+  D3DSIO_SLT          = 12,
+  D3DSIO_SGE          = 13,
+  D3DSIO_EXP          = 14,
+  D3DSIO_LOG          = 15,
+  D3DSIO_LIT          = 16,
+  D3DSIO_DST          = 17,
+  D3DSIO_LRP          = 18,
+  D3DSIO_FRC          = 19,
+  D3DSIO_M4x4         = 20,
+  D3DSIO_M4x3         = 21,
+  D3DSIO_M3x4         = 22,
+  D3DSIO_M3x3         = 23,
+  D3DSIO_M3x2         = 24,
+  D3DSIO_CALL         = 25,
+  D3DSIO_CALLNZ       = 26,
+  D3DSIO_LOOP         = 27,
+  D3DSIO_RET          = 28,
+  D3DSIO_ENDLOOP      = 29,
+  D3DSIO_LABEL        = 30,
+  D3DSIO_DCL          = 31,
+  D3DSIO_POW          = 32,
+  D3DSIO_CRS          = 33,
+  D3DSIO_SGN          = 34,
+  D3DSIO_ABS          = 35,
+  D3DSIO_NRM          = 36,
+  D3DSIO_SINCOS       = 37,
+  D3DSIO_REP          = 38,
+  D3DSIO_ENDREP       = 39,
+  D3DSIO_IF           = 40,
+  D3DSIO_IFC          = 41,
+  D3DSIO_ELSE         = 42,
+  D3DSIO_ENDIF        = 43,
+  D3DSIO_BREAK        = 44,
+  D3DSIO_BREAKC       = 45,
+  D3DSIO_MOVA         = 46,
+  D3DSIO_DEFB         = 47,
+  D3DSIO_DEFI         = 48,
+
+  D3DSIO_TEXCOORD     = 64,
+  D3DSIO_TEXKILL      = 65,
+  D3DSIO_TEX          = 66,
+  D3DSIO_TEXBEM       = 67,
+  D3DSIO_TEXBEML      = 68,
+  D3DSIO_TEXREG2AR    = 69,
+  D3DSIO_TEXREG2GB    = 70,
+  D3DSIO_TEXM3x2PAD   = 71,
+  D3DSIO_TEXM3x2TEX   = 72,
+  D3DSIO_TEXM3x3PAD   = 73,
+  D3DSIO_TEXM3x3TEX   = 74,
+  D3DSIO_TEXM3x3DIFF  = 75,
+  D3DSIO_TEXM3x3SPEC  = 76,
+  D3DSIO_TEXM3x3VSPEC = 77,
+  D3DSIO_EXPP         = 78,
+  D3DSIO_LOGP         = 79,
+  D3DSIO_CND          = 80,
+  D3DSIO_DEF          = 81,
+  D3DSIO_TEXREG2RGB   = 82,
+  D3DSIO_TEXDP3TEX    = 83,
+  D3DSIO_TEXM3x2DEPTH = 84,
+  D3DSIO_TEXDP3       = 85,
+  D3DSIO_TEXM3x3      = 86,
+  D3DSIO_TEXDEPTH     = 87,
+  D3DSIO_CMP          = 88,
+  D3DSIO_BEM          = 89,
+  D3DSIO_DP2ADD       = 90,
+  D3DSIO_DSX          = 91,
+  D3DSIO_DSY          = 92,
+  D3DSIO_TEXLDD       = 93,
+  D3DSIO_SETP         = 94,
+  D3DSIO_TEXLDL       = 95,
+  D3DSIO_BREAKP       = 96,
+  
+  D3DSIO_PHASE        = 0xFFFD,
+  D3DSIO_COMMENT      = 0xFFFE,
+  D3DSIO_END          = 0XFFFF,
+
+  D3DSIO_FORCE_DWORD  = 0X7FFFFFFF /** for 32-bit alignment */
+} D3DSHADER_INSTRUCTION_OPCODE_TYPE;
+
+#define D3DSINCOSCONST1   -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f
+#define D3DSINCOSCONST2   -0.020833334f,    -0.12500000f,      1.0f,          0.50000000f
+
+#define D3DSHADER_INSTRUCTION_PREDICATED    (1 << 28)
+
+#define D3DSI_TEXLD_PROJECT 0x00010000
+#define D3DSI_TEXLD_BIAS    0x00020000
+
+/** for parallelism */
+#define D3DSI_COISSUE 0x40000000
+
+#define D3DSP_DCL_USAGE_SHIFT 0
+#define D3DSP_DCL_USAGE_MASK  0x0000000f
+
+#define D3DSP_DCL_USAGEINDEX_SHIFT 16
+#define D3DSP_DCL_USAGEINDEX_MASK  0x000f0000
+
+#define D3DSP_TEXTURETYPE_SHIFT 27
+#define D3DSP_TEXTURETYPE_MASK  0x78000000
+
+typedef enum _D3DSAMPLER_TEXTURE_TYPE {
+  D3DSTT_UNKNOWN      = 0 << D3DSP_TEXTURETYPE_SHIFT,
+  D3DSTT_1D           = 1 << D3DSP_TEXTURETYPE_SHIFT,
+  D3DSTT_2D           = 2 << D3DSP_TEXTURETYPE_SHIFT,
+  D3DSTT_CUBE         = 3 << D3DSP_TEXTURETYPE_SHIFT,
+  D3DSTT_VOLUME       = 4 << D3DSP_TEXTURETYPE_SHIFT,
+
+  D3DSTT_FORCE_DWORD  = 0x7FFFFFFF
+} D3DSAMPLER_TEXTURE_TYPE;
+
+#define D3DSP_REGNUM_MASK       0x000007FF
+
+/** destination parameter modifiers (.xyzw) */
+#define D3DSP_WRITEMASK_0       0x00010000 /* .x r */
+#define D3DSP_WRITEMASK_1       0x00020000 /* .y g */
+#define D3DSP_WRITEMASK_2       0x00040000 /* .z b */
+#define D3DSP_WRITEMASK_3       0x00080000 /* .w a */
+#define D3DSP_WRITEMASK_ALL     0x000F0000 /* all */
+
+#define D3DSP_DSTMOD_SHIFT      20
+#define D3DSP_DSTMOD_MASK       (0xF << D3DSP_DSTMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {
+  D3DSPDM_NONE             = 0 << D3DSP_DSTMOD_SHIFT,
+  D3DSPDM_SATURATE         = 1 << D3DSP_DSTMOD_SHIFT,
+  D3DSPDM_PARTIALPRECISION = 2 << D3DSP_DSTMOD_SHIFT,
+  D3DSPDM_MSAMPCENTROID    = 4 << D3DSP_DSTMOD_SHIFT,
+
+  D3DSPDM_FORCE_DWORD  = 0x7FFFFFFF
+} D3DSHADER_PARAM_DSTMOD_TYPE;
+
+/** destination param */
+#define D3DSP_DSTSHIFT_SHIFT     24
+#define D3DSP_DSTSHIFT_MASK      (0xF << D3DSP_DSTSHIFT_SHIFT)
+
+/** destination/source reg type */
+#define D3DSP_REGTYPE_SHIFT      28
+#define D3DSP_REGTYPE_SHIFT2     8
+#define D3DSP_REGTYPE_MASK       (0x7 << D3DSP_REGTYPE_SHIFT)
+#define D3DSP_REGTYPE_MASK2      0x00001800
+
+typedef enum _D3DSHADER_PARAM_REGISTER_TYPE {
+  D3DSPR_TEMP         =  0, 
+  D3DSPR_INPUT        =  1,
+  D3DSPR_CONST        =  2,
+  D3DSPR_ADDR         =  3,
+  D3DSPR_TEXTURE      =  3,
+  D3DSPR_RASTOUT      =  4,
+  D3DSPR_ATTROUT      =  5,
+  D3DSPR_TEXCRDOUT    =  6,
+  D3DSPR_OUTPUT       =  6,
+  D3DSPR_CONSTINT     =  7,
+  D3DSPR_COLOROUT     =  8,
+  D3DSPR_DEPTHOUT     =  9,
+  D3DSPR_SAMPLER      = 10,
+  D3DSPR_CONST2       = 11,
+  D3DSPR_CONST3       = 12,
+  D3DSPR_CONST4       = 13,
+  D3DSPR_CONSTBOOL    = 14,
+  D3DSPR_LOOP         = 15,
+  D3DSPR_TEMPFLOAT16  = 16,
+  D3DSPR_MISCTYPE     = 17,
+  D3DSPR_LABEL        = 18,
+  D3DSPR_PREDICATE    = 19,
+
+  D3DSPR_FORCE_DWORD  = 0x7FFFFFFF
+} D3DSHADER_PARAM_REGISTER_TYPE;
+
+typedef enum _D3DSHADER_MISCTYPE_OFFSETS {
+    D3DSMO_POSITION  = 0,
+    D3DSMO_FACE      = 1
+} D3DSHADER_MISCTYPE_OFFSETS;
+
+typedef enum _D3DVS_RASTOUT_OFFSETS {
+  D3DSRO_POSITION     = 0,
+  D3DSRO_FOG          = 1,
+  D3DSRO_POINT_SIZE   = 2,
+
+  D3DSRO_FORCE_DWORD  = 0x7FFFFFFF
+} D3DVS_RASTOUT_OFFSETS;
+
+#define D3DVS_ADDRESSMODE_SHIFT  13
+#define D3DVS_ADDRESSMODE_MASK   (0x1 << D3DVS_ADDRESSMODE_SHIFT)
+
+typedef enum _D3DVS_ADDRESSMODE_TYPE {
+  D3DVS_ADDRMODE_ABSOLUTE     = 0 << D3DVS_ADDRESSMODE_SHIFT,
+  D3DVS_ADDRMODE_RELATIVE     = 1 << D3DVS_ADDRESSMODE_SHIFT,
+
+  D3DVS_ADDRMODE_FORCE_DWORD  = 0x7FFFFFFF
+} D3DVS_ADDRESSMODE_TYPE;
+
+#define D3DSHADER_ADDRESSMODE_SHIFT 13
+#define D3DSHADER_ADDRESSMODE_MASK  (1 << D3DSHADER_ADDRESSMODE_SHIFT)
+
+typedef enum _D3DSHADER_ADDRESSMODE_TYPE {
+  D3DSHADER_ADDRMODE_ABSOLUTE    = 0 << D3DSHADER_ADDRESSMODE_SHIFT,
+  D3DSHADER_ADDRMODE_RELATIVE    = 1 << D3DSHADER_ADDRESSMODE_SHIFT,
+
+  D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_ADDRESSMODE_TYPE;
+
+
+#define D3DVS_SWIZZLE_SHIFT      16
+#define D3DVS_SWIZZLE_MASK       (0xFF << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DSP_SWIZZLE_SHIFT      16
+#define D3DSP_SWIZZLE_MASK       (0xFF << D3DSP_SWIZZLE_SHIFT)
+
+#define D3DVS_X_X       (0 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Y       (1 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Z       (2 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_W       (3 << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DVS_Y_X       (0 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_W       (3 << (D3DVS_SWIZZLE_SHIFT + 2))
+
+#define D3DVS_Z_X       (0 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_W       (3 << (D3DVS_SWIZZLE_SHIFT + 4))
+
+#define D3DVS_W_X       (0 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_W       (3 << (D3DVS_SWIZZLE_SHIFT + 6))
+
+#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)
+
+#define D3DSP_NOSWIZZLE \
+    ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
+
+#define D3DSP_SRCMOD_SHIFT      24
+#define D3DSP_SRCMOD_MASK       (0xF << D3DSP_SRCMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {
+  D3DSPSM_NONE         =  0 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_NEG          =  1 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_BIAS         =  2 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_BIASNEG      =  3 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_SIGN         =  4 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_SIGNNEG      =  5 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_COMP         =  6 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_X2           =  7 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_X2NEG        =  8 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_DZ           =  9 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_DW           = 10 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_ABS          = 11 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_ABSNEG       = 12 << D3DSP_SRCMOD_SHIFT,
+  D3DSPSM_NOT          = 13 << D3DSP_SRCMOD_SHIFT,
+
+  D3DSPSM_FORCE_DWORD  = 0x7FFFFFFF
+} D3DSHADER_PARAM_SRCMOD_TYPE;
+
+#define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))
+#define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))
+#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)
+#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)
+
+#define D3DSI_COMMENTSIZE_SHIFT 16
+#define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)
+
+#define D3DSHADER_COMMENT(commentSize) \
+  ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)
+
+#define D3DPS_END() 0x0000FFFF
+#define D3DVS_END() 0x0000FFFF
+
+
+/*****************************************************************************
+ * Direct 3D v8 enumerated types
+ */
+typedef enum _D3DBACKBUFFER_TYPE {
+    D3DBACKBUFFER_TYPE_MONO         = 0,
+    D3DBACKBUFFER_TYPE_LEFT         = 1,
+    D3DBACKBUFFER_TYPE_RIGHT        = 2,
+
+    D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff
+} D3DBACKBUFFER_TYPE;
+
+#define D3DPRESENT_BACK_BUFFER_MAX __MSABI_LONG(3)
+
+typedef enum _D3DBASISTYPE {
+   D3DBASIS_BEZIER        = 0,
+   D3DBASIS_BSPLINE       = 1,
+   D3DBASIS_INTERPOLATE   = 2,
+
+   D3DBASIS_FORCE_DWORD   = 0x7fffffff
+} D3DBASISTYPE;
+
+typedef enum _D3DBLEND {
+    D3DBLEND_ZERO               =  1,
+    D3DBLEND_ONE                =  2,
+    D3DBLEND_SRCCOLOR           =  3,
+    D3DBLEND_INVSRCCOLOR        =  4,
+    D3DBLEND_SRCALPHA           =  5,
+    D3DBLEND_INVSRCALPHA        =  6,
+    D3DBLEND_DESTALPHA          =  7,
+    D3DBLEND_INVDESTALPHA       =  8,
+    D3DBLEND_DESTCOLOR          =  9,
+    D3DBLEND_INVDESTCOLOR       = 10,
+    D3DBLEND_SRCALPHASAT        = 11,
+    D3DBLEND_BOTHSRCALPHA       = 12,
+    D3DBLEND_BOTHINVSRCALPHA    = 13,
+    D3DBLEND_BLENDFACTOR        = 14,
+    D3DBLEND_INVBLENDFACTOR     = 15,
+    D3DBLEND_FORCE_DWORD        = 0x7fffffff
+} D3DBLEND;
+
+typedef enum _D3DBLENDOP {
+    D3DBLENDOP_ADD              = 1,
+    D3DBLENDOP_SUBTRACT         = 2,
+    D3DBLENDOP_REVSUBTRACT      = 3,
+    D3DBLENDOP_MIN              = 4,
+    D3DBLENDOP_MAX              = 5,
+
+    D3DBLENDOP_FORCE_DWORD      = 0x7fffffff
+} D3DBLENDOP;
+
+typedef enum _D3DCMPFUNC {
+    D3DCMP_NEVER                = 1,
+    D3DCMP_LESS                 = 2,
+    D3DCMP_EQUAL                = 3,
+    D3DCMP_LESSEQUAL            = 4,
+    D3DCMP_GREATER              = 5,
+    D3DCMP_NOTEQUAL             = 6,
+    D3DCMP_GREATEREQUAL         = 7,
+    D3DCMP_ALWAYS               = 8,
+
+    D3DCMP_FORCE_DWORD          = 0x7fffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DCUBEMAP_FACES {
+    D3DCUBEMAP_FACE_POSITIVE_X     = 0,
+    D3DCUBEMAP_FACE_NEGATIVE_X     = 1,
+    D3DCUBEMAP_FACE_POSITIVE_Y     = 2,
+    D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,
+    D3DCUBEMAP_FACE_POSITIVE_Z     = 4,
+    D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,
+
+    D3DCUBEMAP_FACE_FORCE_DWORD    = 0xffffffff
+} D3DCUBEMAP_FACES;
+
+typedef enum _D3DCULL {
+    D3DCULL_NONE                = 1,
+    D3DCULL_CW                  = 2,
+    D3DCULL_CCW                 = 3,
+
+    D3DCULL_FORCE_DWORD         = 0x7fffffff
+} D3DCULL;
+
+typedef enum _D3DDEBUGMONITORTOKENS {
+    D3DDMT_ENABLE          = 0,
+    D3DDMT_DISABLE         = 1,
+
+    D3DDMT_FORCE_DWORD     = 0x7fffffff
+} D3DDEBUGMONITORTOKENS;
+
+typedef enum _D3DDEGREETYPE {
+    D3DDEGREE_LINEAR      = 1,
+    D3DDEGREE_QUADRATIC   = 2,
+    D3DDEGREE_CUBIC       = 3,
+    D3DDEGREE_QUINTIC     = 5,
+    
+    D3DDEGREE_FORCE_DWORD   = 0x7fffffff
+} D3DDEGREETYPE;
+
+typedef enum _D3DDEVTYPE {
+    D3DDEVTYPE_HAL         = 1,
+    D3DDEVTYPE_REF         = 2,
+    D3DDEVTYPE_SW          = 3,
+    D3DDEVTYPE_NULLREF     = 4,
+
+    D3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} D3DDEVTYPE;
+
+typedef enum _D3DFILLMODE {
+    D3DFILL_POINT               = 1,
+    D3DFILL_WIREFRAME           = 2,
+    D3DFILL_SOLID               = 3,
+
+    D3DFILL_FORCE_DWORD         = 0x7fffffff
+} D3DFILLMODE;
+
+typedef enum _D3DFOGMODE {
+    D3DFOG_NONE                 = 0,
+    D3DFOG_EXP                  = 1,
+    D3DFOG_EXP2                 = 2,
+    D3DFOG_LINEAR               = 3,
+
+    D3DFOG_FORCE_DWORD          = 0x7fffffff
+} D3DFOGMODE;
+
+typedef enum _D3DFORMAT {
+    D3DFMT_UNKNOWN              =   0,
+
+    D3DFMT_R8G8B8               =  20,
+    D3DFMT_A8R8G8B8             =  21,
+    D3DFMT_X8R8G8B8             =  22,
+    D3DFMT_R5G6B5               =  23,
+    D3DFMT_X1R5G5B5             =  24,
+    D3DFMT_A1R5G5B5             =  25,
+    D3DFMT_A4R4G4B4             =  26,
+    D3DFMT_R3G3B2               =  27,
+    D3DFMT_A8                   =  28,
+    D3DFMT_A8R3G3B2             =  29,
+    D3DFMT_X4R4G4B4             =  30,
+    D3DFMT_A2B10G10R10          =  31,
+    D3DFMT_A8B8G8R8             =  32,
+    D3DFMT_X8B8G8R8             =  33,
+    D3DFMT_G16R16               =  34,
+    D3DFMT_A2R10G10B10          =  35,
+    D3DFMT_A16B16G16R16         =  36,
+  
+
+    D3DFMT_A8P8                 =  40,
+    D3DFMT_P8                   =  41,
+
+    D3DFMT_L8                   =  50,
+    D3DFMT_A8L8                 =  51,
+    D3DFMT_A4L4                 =  52,
+
+    D3DFMT_V8U8                 =  60,
+    D3DFMT_L6V5U5               =  61,
+    D3DFMT_X8L8V8U8             =  62,
+    D3DFMT_Q8W8V8U8             =  63,
+    D3DFMT_V16U16               =  64,
+    D3DFMT_A2W10V10U10          =  67,
+
+    D3DFMT_UYVY                 =  MAKEFOURCC('U', 'Y', 'V', 'Y'),
+    D3DFMT_YUY2                 =  MAKEFOURCC('Y', 'U', 'Y', '2'),
+    D3DFMT_DXT1                 =  MAKEFOURCC('D', 'X', 'T', '1'),
+    D3DFMT_DXT2                 =  MAKEFOURCC('D', 'X', 'T', '2'),
+    D3DFMT_DXT3                 =  MAKEFOURCC('D', 'X', 'T', '3'),
+    D3DFMT_DXT4                 =  MAKEFOURCC('D', 'X', 'T', '4'),
+    D3DFMT_DXT5                 =  MAKEFOURCC('D', 'X', 'T', '5'),
+    D3DFMT_MULTI2_ARGB8         =  MAKEFOURCC('M', 'E', 'T', '1'),
+    D3DFMT_G8R8_G8B8            =  MAKEFOURCC('G', 'R', 'G', 'B'),
+    D3DFMT_R8G8_B8G8            =  MAKEFOURCC('R', 'G', 'B', 'G'),
+
+    D3DFMT_D16_LOCKABLE         =  70,
+    D3DFMT_D32                  =  71,
+    D3DFMT_D15S1                =  73,
+    D3DFMT_D24S8                =  75,
+    D3DFMT_D24X8                =  77,
+    D3DFMT_D24X4S4              =  79,
+    D3DFMT_D16                  =  80,
+    D3DFMT_L16                  =  81,
+    D3DFMT_D32F_LOCKABLE        =  82,
+    D3DFMT_D24FS8               =  83,
+
+    D3DFMT_VERTEXDATA           = 100,
+    D3DFMT_INDEX16              = 101,
+    D3DFMT_INDEX32              = 102,
+    D3DFMT_Q16W16V16U16         = 110,
+    /* Floating point formats */
+    D3DFMT_R16F                 = 111,
+    D3DFMT_G16R16F              = 112,
+    D3DFMT_A16B16G16R16F        = 113,
+    
+    /* IEEE formats */
+    D3DFMT_R32F                 = 114,
+    D3DFMT_G32R32F              = 115,
+    D3DFMT_A32B32G32R32F        = 116,
+    
+    D3DFMT_CxV8U8               = 117,
+
+
+    D3DFMT_FORCE_DWORD          = 0xFFFFFFFF
+} D3DFORMAT;
+
+typedef enum _D3DLIGHTTYPE {
+    D3DLIGHT_POINT          = 1,
+    D3DLIGHT_SPOT           = 2,
+    D3DLIGHT_DIRECTIONAL    = 3,
+
+    D3DLIGHT_FORCE_DWORD    = 0x7fffffff
+} D3DLIGHTTYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE {
+    D3DMCS_MATERIAL         = 0,
+    D3DMCS_COLOR1           = 1,
+    D3DMCS_COLOR2           = 2,
+
+    D3DMCS_FORCE_DWORD      = 0x7fffffff
+} D3DMATERIALCOLORSOURCE;
+
+typedef enum _D3DMULTISAMPLE_TYPE {
+    D3DMULTISAMPLE_NONE            =  0,
+    D3DMULTISAMPLE_NONMASKABLE     =  1,
+    D3DMULTISAMPLE_2_SAMPLES       =  2,
+    D3DMULTISAMPLE_3_SAMPLES       =  3,
+    D3DMULTISAMPLE_4_SAMPLES       =  4,
+    D3DMULTISAMPLE_5_SAMPLES       =  5,
+    D3DMULTISAMPLE_6_SAMPLES       =  6,
+    D3DMULTISAMPLE_7_SAMPLES       =  7,
+    D3DMULTISAMPLE_8_SAMPLES       =  8,
+    D3DMULTISAMPLE_9_SAMPLES       =  9,
+    D3DMULTISAMPLE_10_SAMPLES      = 10,
+    D3DMULTISAMPLE_11_SAMPLES      = 11,
+    D3DMULTISAMPLE_12_SAMPLES      = 12,
+    D3DMULTISAMPLE_13_SAMPLES      = 13,
+    D3DMULTISAMPLE_14_SAMPLES      = 14,
+    D3DMULTISAMPLE_15_SAMPLES      = 15,
+    D3DMULTISAMPLE_16_SAMPLES      = 16,
+
+    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff
+} D3DMULTISAMPLE_TYPE;
+
+#if 0
+typedef enum _D3DORDERTYPE {
+   D3DORDER_LINEAR      = 1,
+   D3DORDER_QUADRATIC   = 2,
+   D3DORDER_CUBIC       = 3,
+   D3DORDER_QUINTIC     = 5,
+
+   D3DORDER_FORCE_DWORD = 0x7fffffff
+} D3DORDERTYPE;
+#endif
+typedef enum _D3DPATCHEDGESTYLE {
+   D3DPATCHEDGE_DISCRETE    = 0,
+   D3DPATCHEDGE_CONTINUOUS  = 1,
+
+   D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
+} D3DPATCHEDGESTYLE;
+
+typedef enum _D3DPOOL {
+    D3DPOOL_DEFAULT                 = 0,
+    D3DPOOL_MANAGED                 = 1,
+    D3DPOOL_SYSTEMMEM               = 2,
+    D3DPOOL_SCRATCH                 = 3,
+
+    D3DPOOL_FORCE_DWORD             = 0x7fffffff
+} D3DPOOL;
+
+typedef enum _D3DPRIMITIVETYPE {
+    D3DPT_POINTLIST             = 1,
+    D3DPT_LINELIST              = 2,
+    D3DPT_LINESTRIP             = 3,
+    D3DPT_TRIANGLELIST          = 4,
+    D3DPT_TRIANGLESTRIP         = 5,
+    D3DPT_TRIANGLEFAN           = 6,
+
+    D3DPT_FORCE_DWORD           = 0x7fffffff
+} D3DPRIMITIVETYPE;
+
+typedef enum _D3DRENDERSTATETYPE {
+    D3DRS_ZENABLE                   =   7,
+    D3DRS_FILLMODE                  =   8,
+    D3DRS_SHADEMODE                 =   9,
+    D3DRS_ZWRITEENABLE              =  14,
+    D3DRS_ALPHATESTENABLE           =  15,
+    D3DRS_LASTPIXEL                 =  16,
+    D3DRS_SRCBLEND                  =  19,
+    D3DRS_DESTBLEND                 =  20,
+    D3DRS_CULLMODE                  =  22,
+    D3DRS_ZFUNC                     =  23,
+    D3DRS_ALPHAREF                  =  24,
+    D3DRS_ALPHAFUNC                 =  25,
+    D3DRS_DITHERENABLE              =  26,
+    D3DRS_ALPHABLENDENABLE          =  27,
+    D3DRS_FOGENABLE                 =  28,
+    D3DRS_SPECULARENABLE            =  29,
+    D3DRS_FOGCOLOR                  =  34,
+    D3DRS_FOGTABLEMODE              =  35,
+    D3DRS_FOGSTART                  =  36,
+    D3DRS_FOGEND                    =  37,
+    D3DRS_FOGDENSITY                =  38,
+    D3DRS_RANGEFOGENABLE            =  48,
+    D3DRS_STENCILENABLE             =  52,
+    D3DRS_STENCILFAIL               =  53,
+    D3DRS_STENCILZFAIL              =  54,
+    D3DRS_STENCILPASS               =  55,
+    D3DRS_STENCILFUNC               =  56,
+    D3DRS_STENCILREF                =  57,
+    D3DRS_STENCILMASK               =  58,
+    D3DRS_STENCILWRITEMASK          =  59,
+    D3DRS_TEXTUREFACTOR             =  60,
+    D3DRS_WRAP0                     = 128,
+    D3DRS_WRAP1                     = 129,
+    D3DRS_WRAP2                     = 130,
+    D3DRS_WRAP3                     = 131,
+    D3DRS_WRAP4                     = 132,
+    D3DRS_WRAP5                     = 133,
+    D3DRS_WRAP6                     = 134,
+    D3DRS_WRAP7                     = 135,
+    D3DRS_CLIPPING                  = 136,
+    D3DRS_LIGHTING                  = 137,
+    D3DRS_AMBIENT                   = 139,
+    D3DRS_FOGVERTEXMODE             = 140,
+    D3DRS_COLORVERTEX               = 141,
+    D3DRS_LOCALVIEWER               = 142,
+    D3DRS_NORMALIZENORMALS          = 143,
+    D3DRS_DIFFUSEMATERIALSOURCE     = 145,
+    D3DRS_SPECULARMATERIALSOURCE    = 146,
+    D3DRS_AMBIENTMATERIALSOURCE     = 147,
+    D3DRS_EMISSIVEMATERIALSOURCE    = 148,
+    D3DRS_VERTEXBLEND               = 151,
+    D3DRS_CLIPPLANEENABLE           = 152,
+    D3DRS_POINTSIZE                 = 154,
+    D3DRS_POINTSIZE_MIN             = 155,
+    D3DRS_POINTSPRITEENABLE         = 156,
+    D3DRS_POINTSCALEENABLE          = 157,
+    D3DRS_POINTSCALE_A              = 158,
+    D3DRS_POINTSCALE_B              = 159,
+    D3DRS_POINTSCALE_C              = 160,
+    D3DRS_MULTISAMPLEANTIALIAS      = 161,
+    D3DRS_MULTISAMPLEMASK           = 162,
+    D3DRS_PATCHEDGESTYLE            = 163,
+    D3DRS_DEBUGMONITORTOKEN         = 165,
+    D3DRS_POINTSIZE_MAX             = 166,
+    D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
+    D3DRS_COLORWRITEENABLE          = 168,
+    D3DRS_TWEENFACTOR               = 170,
+    D3DRS_BLENDOP                   = 171,
+    D3DRS_POSITIONDEGREE            = 172,
+    D3DRS_NORMALDEGREE              = 173,
+    D3DRS_SCISSORTESTENABLE         = 174,
+    D3DRS_SLOPESCALEDEPTHBIAS       = 175,
+    D3DRS_ANTIALIASEDLINEENABLE     = 176,
+    D3DRS_MINTESSELLATIONLEVEL      = 178,
+    D3DRS_MAXTESSELLATIONLEVEL      = 179,
+    D3DRS_ADAPTIVETESS_X            = 180,
+    D3DRS_ADAPTIVETESS_Y            = 181,
+    D3DRS_ADAPTIVETESS_Z            = 182,
+    D3DRS_ADAPTIVETESS_W            = 183,
+    D3DRS_ENABLEADAPTIVETESSELLATION= 184,
+    D3DRS_TWOSIDEDSTENCILMODE       = 185,
+    D3DRS_CCW_STENCILFAIL           = 186,
+    D3DRS_CCW_STENCILZFAIL          = 187,
+    D3DRS_CCW_STENCILPASS           = 188,
+    D3DRS_CCW_STENCILFUNC           = 189,
+    D3DRS_COLORWRITEENABLE1         = 190,
+    D3DRS_COLORWRITEENABLE2         = 191,
+    D3DRS_COLORWRITEENABLE3         = 192,
+    D3DRS_BLENDFACTOR               = 193,
+    D3DRS_SRGBWRITEENABLE           = 194,
+    D3DRS_DEPTHBIAS                 = 195,
+    D3DRS_WRAP8                     = 198,
+    D3DRS_WRAP9                     = 199,
+    D3DRS_WRAP10                    = 200,
+    D3DRS_WRAP11                    = 201,
+    D3DRS_WRAP12                    = 202,
+    D3DRS_WRAP13                    = 203,
+    D3DRS_WRAP14                    = 204,
+    D3DRS_WRAP15                    = 205,
+    D3DRS_SEPARATEALPHABLENDENABLE  = 206,
+    D3DRS_SRCBLENDALPHA             = 207,
+    D3DRS_DESTBLENDALPHA            = 208,
+    D3DRS_BLENDOPALPHA              = 209,
+
+    D3DRS_FORCE_DWORD               = 0x7fffffff
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DRESOURCETYPE {
+    D3DRTYPE_SURFACE                =  1,
+    D3DRTYPE_VOLUME                 =  2,
+    D3DRTYPE_TEXTURE                =  3,
+    D3DRTYPE_VOLUMETEXTURE          =  4,
+    D3DRTYPE_CUBETEXTURE            =  5,
+    D3DRTYPE_VERTEXBUFFER           =  6,
+    D3DRTYPE_INDEXBUFFER            =  7,
+
+    D3DRTYPE_FORCE_DWORD            = 0x7fffffff
+} D3DRESOURCETYPE;
+
+#define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)
+
+typedef enum _D3DSHADEMODE {
+    D3DSHADE_FLAT               = 1,
+    D3DSHADE_GOURAUD            = 2,
+    D3DSHADE_PHONG              = 3,
+
+    D3DSHADE_FORCE_DWORD        = 0x7fffffff
+} D3DSHADEMODE;
+
+typedef enum _D3DSTATEBLOCKTYPE {
+    D3DSBT_ALL           = 1,
+    D3DSBT_PIXELSTATE    = 2,
+    D3DSBT_VERTEXSTATE   = 3,
+
+    D3DSBT_FORCE_DWORD   = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DSTENCILOP {
+    D3DSTENCILOP_KEEP           = 1,
+    D3DSTENCILOP_ZERO           = 2,
+    D3DSTENCILOP_REPLACE        = 3,
+    D3DSTENCILOP_INCRSAT        = 4,
+    D3DSTENCILOP_DECRSAT        = 5,
+    D3DSTENCILOP_INVERT         = 6,
+    D3DSTENCILOP_INCR           = 7,
+    D3DSTENCILOP_DECR           = 8,
+
+    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DSWAPEFFECT {
+    D3DSWAPEFFECT_DISCARD         = 1,
+    D3DSWAPEFFECT_FLIP            = 2,
+    D3DSWAPEFFECT_COPY            = 3,
+    D3DSWAPEFFECT_OVERLAY         = 4,
+    D3DSWAPEFFECT_FLIPEX          = 5,
+    D3DSWAPEFFECT_FORCE_DWORD     = 0xFFFFFFFF
+} D3DSWAPEFFECT;
+
+typedef enum _D3DTEXTUREADDRESS {
+    D3DTADDRESS_WRAP            = 1,
+    D3DTADDRESS_MIRROR          = 2,
+    D3DTADDRESS_CLAMP           = 3,
+    D3DTADDRESS_BORDER          = 4,
+    D3DTADDRESS_MIRRORONCE      = 5,
+
+    D3DTADDRESS_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum _D3DTEXTUREFILTERTYPE {
+    D3DTEXF_NONE            = 0,
+    D3DTEXF_POINT           = 1,
+    D3DTEXF_LINEAR          = 2,
+    D3DTEXF_ANISOTROPIC     = 3,
+    D3DTEXF_FLATCUBIC       = 4,
+    D3DTEXF_GAUSSIANCUBIC   = 5,
+    D3DTEXF_PYRAMIDALQUAD   = 6,
+    D3DTEXF_GAUSSIANQUAD    = 7,
+    D3DTEXF_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTUREFILTERTYPE;
+
+typedef enum _D3DTEXTUREOP {
+    D3DTOP_DISABLE                   =  1,
+    D3DTOP_SELECTARG1                =  2,
+    D3DTOP_SELECTARG2                =  3,
+    D3DTOP_MODULATE                  =  4,
+    D3DTOP_MODULATE2X                =  5,
+    D3DTOP_MODULATE4X                =  6,
+    D3DTOP_ADD                       =  7,
+    D3DTOP_ADDSIGNED                 =  8,
+    D3DTOP_ADDSIGNED2X               =  9,
+    D3DTOP_SUBTRACT                  = 10,
+    D3DTOP_ADDSMOOTH                 = 11,
+    D3DTOP_BLENDDIFFUSEALPHA         = 12,
+    D3DTOP_BLENDTEXTUREALPHA         = 13,
+    D3DTOP_BLENDFACTORALPHA          = 14,
+    D3DTOP_BLENDTEXTUREALPHAPM       = 15,
+    D3DTOP_BLENDCURRENTALPHA         = 16,
+    D3DTOP_PREMODULATE               = 17,
+    D3DTOP_MODULATEALPHA_ADDCOLOR    = 18,
+    D3DTOP_MODULATECOLOR_ADDALPHA    = 19,
+    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+    D3DTOP_BUMPENVMAP                = 22,
+    D3DTOP_BUMPENVMAPLUMINANCE       = 23,
+    D3DTOP_DOTPRODUCT3               = 24,
+    D3DTOP_MULTIPLYADD               = 25,
+    D3DTOP_LERP                      = 26,
+
+    D3DTOP_FORCE_DWORD               = 0x7fffffff,
+} D3DTEXTUREOP;
+
+typedef enum _D3DTEXTURESTAGESTATETYPE {
+    D3DTSS_COLOROP               =  1,
+    D3DTSS_COLORARG1             =  2,
+    D3DTSS_COLORARG2             =  3,
+    D3DTSS_ALPHAOP               =  4,
+    D3DTSS_ALPHAARG1             =  5,
+    D3DTSS_ALPHAARG2             =  6,
+    D3DTSS_BUMPENVMAT00          =  7,
+    D3DTSS_BUMPENVMAT01          =  8,
+    D3DTSS_BUMPENVMAT10          =  9,
+    D3DTSS_BUMPENVMAT11          = 10,
+    D3DTSS_TEXCOORDINDEX         = 11,
+    D3DTSS_BUMPENVLSCALE         = 22,
+    D3DTSS_BUMPENVLOFFSET        = 23,
+    D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+    D3DTSS_COLORARG0             = 26,
+    D3DTSS_ALPHAARG0             = 27,
+    D3DTSS_RESULTARG             = 28,
+    D3DTSS_CONSTANT              = 32,
+
+    D3DTSS_FORCE_DWORD           = 0x7fffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+    D3DTTFF_DISABLE         =   0,
+    D3DTTFF_COUNT1          =   1,
+    D3DTTFF_COUNT2          =   2,
+    D3DTTFF_COUNT3          =   3,
+    D3DTTFF_COUNT4          =   4,
+    D3DTTFF_PROJECTED       = 256,
+
+    D3DTTFF_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTURETRANSFORMFLAGS;
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+    D3DTS_VIEW            =  2,
+    D3DTS_PROJECTION      =  3,
+    D3DTS_TEXTURE0        = 16,
+    D3DTS_TEXTURE1        = 17,
+    D3DTS_TEXTURE2        = 18,
+    D3DTS_TEXTURE3        = 19,
+    D3DTS_TEXTURE4        = 20,
+    D3DTS_TEXTURE5        = 21,
+    D3DTS_TEXTURE6        = 22,
+    D3DTS_TEXTURE7        = 23,
+
+    D3DTS_FORCE_DWORD     = 0x7fffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS {
+    D3DVBF_DISABLE  =   0,
+    D3DVBF_1WEIGHTS =   1,
+    D3DVBF_2WEIGHTS =   2,
+    D3DVBF_3WEIGHTS =   3,
+    D3DVBF_TWEENING = 255,
+    D3DVBF_0WEIGHTS = 256
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DZBUFFERTYPE {
+    D3DZB_FALSE                 = 0,
+    D3DZB_TRUE                  = 1,
+    D3DZB_USEW                  = 2,
+
+    D3DZB_FORCE_DWORD           = 0x7fffffff
+} D3DZBUFFERTYPE;
+
+typedef enum _D3DSAMPLERSTATETYPE {
+    D3DSAMP_ADDRESSU       = 1,
+    D3DSAMP_ADDRESSV       = 2,
+    D3DSAMP_ADDRESSW       = 3,
+    D3DSAMP_BORDERCOLOR    = 4,
+    D3DSAMP_MAGFILTER      = 5,
+    D3DSAMP_MINFILTER      = 6,
+    D3DSAMP_MIPFILTER      = 7,
+    D3DSAMP_MIPMAPLODBIAS  = 8,
+    D3DSAMP_MAXMIPLEVEL    = 9,
+    D3DSAMP_MAXANISOTROPY  = 10,
+    D3DSAMP_SRGBTEXTURE    = 11,
+    D3DSAMP_ELEMENTINDEX   = 12,
+    D3DSAMP_DMAPOFFSET     = 13,
+                                
+    D3DSAMP_FORCE_DWORD   = 0x7fffffff,
+} D3DSAMPLERSTATETYPE;
+
+
+/*****************************************************************************
+ * Direct 3D v9 typedefs
+ */
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+/*****************************************************************************
+ * Direct 3D v9 structures
+ */
+typedef struct _D3DADAPTER_IDENTIFIER9 {
+    char            Driver[MAX_DEVICE_IDENTIFIER_STRING];
+    char            Description[MAX_DEVICE_IDENTIFIER_STRING];
+    char            DeviceName[32];
+    LARGE_INTEGER   DriverVersion; 
+
+    DWORD           VendorId;
+    DWORD           DeviceId;
+    DWORD           SubSysId;
+    DWORD           Revision;
+
+    GUID            DeviceIdentifier;
+
+    DWORD           WHQLLevel;
+} D3DADAPTER_IDENTIFIER9;
+
+typedef struct _D3DBOX {
+    UINT                Left;
+    UINT                Top;
+    UINT                Right;
+    UINT                Bottom;
+    UINT                Front;
+    UINT                Back;
+} D3DBOX;
+
+typedef struct _D3DCLIPSTATUS9 {
+   DWORD ClipUnion;
+   DWORD ClipIntersection;
+} D3DCLIPSTATUS9;
+
+#ifndef D3DCOLORVALUE_DEFINED
+typedef struct _D3DCOLORVALUE {
+    float r;
+    float g;
+    float b;
+    float a;
+} D3DCOLORVALUE;
+#define D3DCOLORVALUE_DEFINED
+#endif
+
+typedef struct _D3DDEVICE_CREATION_PARAMETERS {
+    UINT          AdapterOrdinal;
+    D3DDEVTYPE    DeviceType;
+    HWND          hFocusWindow;
+    DWORD         BehaviorFlags;
+} D3DDEVICE_CREATION_PARAMETERS;
+
+typedef struct _D3DDEVINFO_D3D9BANDWIDTHTIMINGS {
+    float         MaxBandwidthUtilized;
+    float         FrontEndUploadMemoryUtilizedPercent;
+    float         VertexRateUtilizedPercent;
+    float         TriangleSetupRateUtilizedPercent;
+    float         FillRateUtilizedPercent;
+} D3DDEVINFO_D3D9BANDWIDTHTIMINGS;
+
+typedef struct _D3DDEVINFO_D3D9CACHEUTILIZATION {
+    float         TextureCacheHitRate;
+    float         PostTransformVertexCacheHitRate;
+} D3DDEVINFO_D3D9CACHEUTILIZATION;
+
+typedef struct _D3DDEVINFO_D3D9INTERFACETIMINGS {
+    float         WaitingForGPUToUseApplicationResourceTimePercent;
+    float         WaitingForGPUToAcceptMoreCommandsTimePercent;
+    float         WaitingForGPUToStayWithinLatencyTimePercent;
+    float         WaitingForGPUExclusiveResourceTimePercent;
+    float         WaitingForGPUOtherTimePercent;
+} D3DDEVINFO_D3D9INTERFACETIMINGS;
+
+typedef struct _D3DDEVINFO_D3D9PIPELINETIMINGS {
+    float         VertexProcessingTimePercent;
+    float         PixelProcessingTimePercent;
+    float         OtherGPUProcessingTimePercent;
+    float         GPUIdleTimePercent;
+} D3DDEVINFO_D3D9PIPELINETIMINGS;
+
+typedef struct _D3DDEVINFO_D3D9STAGETIMINGS {
+    float         MemoryProcessingPercent;
+    float         ComputationProcessingPercent;
+} D3DDEVINFO_D3D9STAGETIMINGS;
+
+
+/* Vertex cache optimization hints. */
+typedef struct D3DDEVINFO_VCACHE {
+    /* Must be a 4 char code FOURCC (e.g. CACH) */
+    DWORD         Pattern; 
+    /* 0 to get the longest  strips, 1 vertex cache */
+    DWORD         OptMethod; 
+     /* Cache size to use (only valid if OptMethod==1) */
+    DWORD         CacheSize;
+    /* internal for deciding when to restart strips, non user modifiable (only valid if OptMethod==1) */
+    DWORD         MagicNumber; 
+} D3DDEVINFO_VCACHE;
+
+typedef struct D3DRESOURCESTATS {
+    BOOL                bThrashing;
+    DWORD               ApproxBytesDownloaded;
+    DWORD               NumEvicts;
+    DWORD               NumVidCreates;
+    DWORD               LastPri;
+    DWORD               NumUsed;
+    DWORD               NumUsedInVidMem;
+    DWORD               WorkingSet;
+    DWORD               WorkingSetBytes;
+    DWORD               TotalManaged;
+    DWORD               TotalBytes;
+} D3DRESOURCESTATS;
+
+typedef struct _D3DDEVINFO_D3DRESOURCEMANAGER {
+    D3DRESOURCESTATS stats[D3DRTYPECOUNT];
+} D3DDEVINFO_D3DRESOURCEMANAGER;
+
+typedef struct _D3DDEVINFO_D3DVERTEXSTATS {
+    DWORD NumRenderedTriangles;
+    DWORD NumExtraClippingTriangles;
+} D3DDEVINFO_D3DVERTEXSTATS;
+
+typedef struct _D3DDISPLAYMODE {
+    UINT            Width;
+    UINT            Height;
+    UINT            RefreshRate;
+    D3DFORMAT       Format;
+} D3DDISPLAYMODE;
+
+typedef struct _D3DGAMMARAMP {
+    WORD                red  [256];
+    WORD                green[256];
+    WORD                blue [256];
+} D3DGAMMARAMP;
+
+typedef struct _D3DINDEXBUFFER_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    UINT                Size;
+} D3DINDEXBUFFER_DESC;
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+    float x;
+    float y;
+    float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+typedef struct _D3DLIGHT9 {
+    D3DLIGHTTYPE    Type;
+    D3DCOLORVALUE   Diffuse;
+    D3DCOLORVALUE   Specular;
+    D3DCOLORVALUE   Ambient;
+    D3DVECTOR       Position;
+    D3DVECTOR       Direction;
+    float           Range;
+    float           Falloff;
+    float           Attenuation0;
+    float           Attenuation1;
+    float           Attenuation2;
+    float           Theta;
+    float           Phi;
+} D3DLIGHT9;
+
+typedef struct _D3DLINEPATTERN {
+    WORD    wRepeatFactor;
+    WORD    wLinePattern;
+} D3DLINEPATTERN;
+
+typedef struct _D3DLOCKED_BOX {
+    INT                 RowPitch;
+    INT                 SlicePitch;
+    void*               pBits;
+} D3DLOCKED_BOX;
+
+typedef struct _D3DLOCKED_RECT {
+    INT                 Pitch;
+    void*               pBits;
+} D3DLOCKED_RECT;
+
+typedef struct _D3DMATERIAL9 {
+    D3DCOLORVALUE   Diffuse;
+    D3DCOLORVALUE   Ambient;
+    D3DCOLORVALUE   Specular;
+    D3DCOLORVALUE   Emissive;
+    float           Power;
+} D3DMATERIAL9;
+
+#ifndef D3DMATRIX_DEFINED
+typedef struct _D3DMATRIX {
+    union {
+        struct {
+            float        _11, _12, _13, _14;
+            float        _21, _22, _23, _24;
+            float        _31, _32, _33, _34;
+            float        _41, _42, _43, _44;
+        } DUMMYSTRUCTNAME;
+        float m[4][4];
+    } DUMMYUNIONNAME;
+} D3DMATRIX;
+#define D3DMATRIX_DEFINED
+#endif
+
+typedef struct _D3DPRESENT_PARAMETERS_ {
+    UINT                    BackBufferWidth;
+    UINT                    BackBufferHeight;
+    D3DFORMAT               BackBufferFormat;
+    UINT                    BackBufferCount;
+
+    D3DMULTISAMPLE_TYPE     MultiSampleType;
+    DWORD                   MultiSampleQuality;
+
+    D3DSWAPEFFECT           SwapEffect;
+    HWND                    hDeviceWindow;
+    BOOL                    Windowed;
+    BOOL                    EnableAutoDepthStencil;
+    D3DFORMAT               AutoDepthStencilFormat;
+    DWORD                   Flags;
+
+    UINT                    FullScreen_RefreshRateInHz;
+    UINT                    PresentationInterval;
+
+} D3DPRESENT_PARAMETERS;
+
+typedef struct _D3DRANGE {
+    UINT                Offset;
+    UINT                Size;
+} D3DRANGE;
+
+typedef struct _D3DRASTER_STATUS {
+    BOOL            InVBlank;
+    UINT            ScanLine;
+} D3DRASTER_STATUS;
+
+#ifndef D3DRECT_DEFINED
+typedef struct _D3DRECT {
+    LONG x1;
+    LONG y1;
+    LONG x2;
+    LONG y2;
+} D3DRECT;
+#define D3DRECT_DEFINED
+#endif
+
+typedef struct _D3DRECTPATCH_INFO {
+    UINT                StartVertexOffsetWidth;
+    UINT                StartVertexOffsetHeight;
+    UINT                Width;
+    UINT                Height;
+    UINT                Stride;
+    D3DBASISTYPE        Basis;
+    D3DDEGREETYPE       Degree;
+} D3DRECTPATCH_INFO;
+
+typedef struct _D3DSURFACE_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    D3DMULTISAMPLE_TYPE MultiSampleType;
+    DWORD               MultiSampleQuality;
+    UINT                Width;
+    UINT                Height;
+} D3DSURFACE_DESC;
+
+typedef struct _D3DTRIPATCH_INFO {
+    UINT                StartVertexOffset;
+    UINT                NumVertices;
+    D3DBASISTYPE        Basis;
+    D3DDEGREETYPE       Degree;
+} D3DTRIPATCH_INFO;
+
+typedef struct _D3DVERTEXBUFFER_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+    UINT                Size;
+    DWORD               FVF;
+} D3DVERTEXBUFFER_DESC;
+
+typedef struct _D3DVIEWPORT9 {
+    DWORD       X;
+    DWORD       Y;
+    DWORD       Width;
+    DWORD       Height;
+    float       MinZ;
+    float       MaxZ;
+} D3DVIEWPORT9;
+
+typedef struct _D3DVOLUME_DESC {
+    D3DFORMAT           Format;
+    D3DRESOURCETYPE     Type;
+    DWORD               Usage;
+    D3DPOOL             Pool;
+
+    UINT                Width;
+    UINT                Height;
+    UINT                Depth;
+} D3DVOLUME_DESC;
+
+/* Parts added with d3d9ex */
+#if !defined(D3D_DISABLE_9EX)
+typedef enum D3DSCANLINEORDERING
+{
+    D3DSCANLINEORDERING_UNKNOWN,
+    D3DSCANLINEORDERING_PROGRESSIVE,
+    D3DSCANLINEORDERING_INTERLACED,
+} D3DSCANLINEORDERING;
+
+
+typedef struct D3DDISPLAYMODEFILTER
+{
+    UINT                Size;
+    D3DFORMAT           Format;
+    D3DSCANLINEORDERING ScanLineOrdering;
+} D3DDISPLAYMODEFILTER;
+
+typedef struct D3DDISPLAYMODEEX
+{
+    UINT                Size;
+    UINT                Width;
+    UINT                Height;
+    UINT                RefreshRate;
+    D3DFORMAT           Format;
+    D3DSCANLINEORDERING ScanLineOrdering;
+} D3DDISPLAYMODEEX;
+
+typedef enum D3DDISPLAYROTATION
+{
+    D3DDISPLAYROTATION_IDENTITY = 1,
+    D3DDISPLAYROTATION_90,
+    D3DDISPLAYROTATION_180,
+    D3DDISPLAYROTATION_270
+} D3DDISPLAYROTATION;
+
+typedef enum _D3DCOMPOSERECTSOP{
+    D3DCOMPOSERECTS_COPY        = 1,
+    D3DCOMPOSERECTS_OR,
+    D3DCOMPOSERECTS_AND,
+    D3DCOMPOSERECTS_NEG,
+    D3DCOMPOSERECTS_FORCE_DWORD = 0x7fffffff
+} D3DCOMPOSERECTSOP;
+
+typedef struct _D3DPRESENTSTATS
+{
+    UINT          PresentCount;
+    UINT          PresentRefreshCount;
+    UINT          SyncRefreshCount;
+    LARGE_INTEGER SyncQPCTime;
+    LARGE_INTEGER SyncGPUTime;
+} D3DPRESENTSTATS;
+
+#endif /* D3D_DISABLE_9EX */
+
+typedef enum _D3DSHADER_COMPARISON
+{
+    D3DSPC_RESERVED0 = 0,
+    D3DSPC_GT,
+    D3DSPC_EQ,
+    D3DSPC_GE,
+    D3DSPC_LT,
+    D3DSPC_NE,
+    D3DSPC_LE,
+    D3DSPC_RESERVED1,
+} D3DSHADER_COMPARISON;
+
+#endif /* __WINE_D3D9TYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h
new file mode 100644
index 0000000..e8076a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h
@@ -0,0 +1,442 @@
+/*
+ * Copyright (C) 2000 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DCAPS_H
+#define __WINE_D3DCAPS_H
+
+#include <ddraw.h>
+
+typedef struct _D3DTRANSFORMCAPS {
+	DWORD dwSize;
+	DWORD dwCaps;
+} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;
+
+#define D3DTRANSFORMCAPS_CLIP           __MSABI_LONG(0x00000001)
+
+typedef struct _D3DLIGHTINGCAPS {
+	DWORD dwSize;
+	DWORD dwCaps;
+	DWORD dwLightingModel;
+	DWORD dwNumLights;
+} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;
+
+#define D3DLIGHTINGMODEL_RGB            0x00000001
+#define D3DLIGHTINGMODEL_MONO           0x00000002
+
+#define D3DLIGHTCAPS_POINT              0x00000001
+#define D3DLIGHTCAPS_SPOT               0x00000002
+#define D3DLIGHTCAPS_DIRECTIONAL        0x00000004
+#define D3DLIGHTCAPS_PARALLELPOINT      0x00000008
+#define D3DLIGHTCAPS_GLSPOT             0x00000010
+
+typedef struct _D3dPrimCaps {
+    DWORD dwSize;
+    DWORD dwMiscCaps;
+    DWORD dwRasterCaps;
+    DWORD dwZCmpCaps;
+    DWORD dwSrcBlendCaps;
+    DWORD dwDestBlendCaps;
+    DWORD dwAlphaCmpCaps;
+    DWORD dwShadeCaps;
+    DWORD dwTextureCaps;
+    DWORD dwTextureFilterCaps;
+    DWORD dwTextureBlendCaps;
+    DWORD dwTextureAddressCaps;
+    DWORD dwStippleWidth;
+    DWORD dwStippleHeight;
+} D3DPRIMCAPS, *LPD3DPRIMCAPS;
+
+#define D3DPMISCCAPS_MASKPLANES         0x00000001
+#define D3DPMISCCAPS_MASKZ              0x00000002
+#define D3DPMISCCAPS_LINEPATTERNREP     0x00000004
+#define D3DPMISCCAPS_CONFORMANT         0x00000008
+#define D3DPMISCCAPS_CULLNONE           0x00000010
+#define D3DPMISCCAPS_CULLCW             0x00000020
+#define D3DPMISCCAPS_CULLCCW            0x00000040
+
+#define D3DPRASTERCAPS_DITHER                     0x00000001
+#define D3DPRASTERCAPS_ROP2                       0x00000002
+#define D3DPRASTERCAPS_XOR                        0x00000004
+#define D3DPRASTERCAPS_PAT                        0x00000008
+#define D3DPRASTERCAPS_ZTEST                      0x00000010
+#define D3DPRASTERCAPS_SUBPIXEL                   0x00000020
+#define D3DPRASTERCAPS_SUBPIXELX                  0x00000040
+#define D3DPRASTERCAPS_FOGVERTEX                  0x00000080
+#define D3DPRASTERCAPS_FOGTABLE                   0x00000100
+#define D3DPRASTERCAPS_STIPPLE                    0x00000200
+#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT     0x00000400
+#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT   0x00000800
+#define D3DPRASTERCAPS_ANTIALIASEDGES             0x00001000
+#define D3DPRASTERCAPS_MIPMAPLODBIAS              0x00002000
+#define D3DPRASTERCAPS_ZBIAS                      0x00004000
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR             0x00008000
+#define D3DPRASTERCAPS_FOGRANGE                   0x00010000
+#define D3DPRASTERCAPS_ANISOTROPY                 0x00020000
+#define D3DPRASTERCAPS_WBUFFER                    0x00040000
+#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000
+#define D3DPRASTERCAPS_WFOG                       0x00100000
+#define D3DPRASTERCAPS_ZFOG                       0x00200000
+
+#define D3DPCMPCAPS_NEVER               0x00000001
+#define D3DPCMPCAPS_LESS                0x00000002
+#define D3DPCMPCAPS_EQUAL               0x00000004
+#define D3DPCMPCAPS_LESSEQUAL           0x00000008
+#define D3DPCMPCAPS_GREATER             0x00000010
+#define D3DPCMPCAPS_NOTEQUAL            0x00000020
+#define D3DPCMPCAPS_GREATEREQUAL        0x00000040
+#define D3DPCMPCAPS_ALWAYS              0x00000080
+
+#define D3DPBLENDCAPS_ZERO              0x00000001
+#define D3DPBLENDCAPS_ONE               0x00000002
+#define D3DPBLENDCAPS_SRCCOLOR          0x00000004
+#define D3DPBLENDCAPS_INVSRCCOLOR       0x00000008
+#define D3DPBLENDCAPS_SRCALPHA          0x00000010
+#define D3DPBLENDCAPS_INVSRCALPHA       0x00000020
+#define D3DPBLENDCAPS_DESTALPHA         0x00000040
+#define D3DPBLENDCAPS_INVDESTALPHA      0x00000080
+#define D3DPBLENDCAPS_DESTCOLOR         0x00000100
+#define D3DPBLENDCAPS_INVDESTCOLOR      0x00000200
+#define D3DPBLENDCAPS_SRCALPHASAT       0x00000400
+#define D3DPBLENDCAPS_BOTHSRCALPHA      0x00000800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA   0x00001000
+
+#define D3DPSHADECAPS_COLORFLATMONO     0x00000001
+#define D3DPSHADECAPS_COLORFLATRGB      0x00000002
+#define D3DPSHADECAPS_COLORGOURAUDMONO  0x00000004
+#define D3DPSHADECAPS_COLORGOURAUDRGB   0x00000008
+#define D3DPSHADECAPS_COLORPHONGMONO    0x00000010
+#define D3DPSHADECAPS_COLORPHONGRGB     0x00000020
+
+#define D3DPSHADECAPS_SPECULARFLATMONO    0x00000040
+#define D3DPSHADECAPS_SPECULARFLATRGB     0x00000080
+#define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB  0x00000200
+#define D3DPSHADECAPS_SPECULARPHONGMONO   0x00000400
+#define D3DPSHADECAPS_SPECULARPHONGRGB    0x00000800
+
+#define D3DPSHADECAPS_ALPHAFLATBLEND       0x00001000
+#define D3DPSHADECAPS_ALPHAFLATSTIPPLED    0x00002000
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND    0x00004000
+#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000
+#define D3DPSHADECAPS_ALPHAPHONGBLEND      0x00010000
+#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED   0x00020000
+
+#define D3DPSHADECAPS_FOGFLAT           0x00040000
+#define D3DPSHADECAPS_FOGGOURAUD        0x00080000
+#define D3DPSHADECAPS_FOGPHONG          0x00100000
+
+#define D3DPTEXTURECAPS_PERSPECTIVE              0x00000001
+#define D3DPTEXTURECAPS_POW2                     0x00000002
+#define D3DPTEXTURECAPS_ALPHA                    0x00000004
+#define D3DPTEXTURECAPS_TRANSPARENCY             0x00000008
+#define D3DPTEXTURECAPS_BORDER                   0x00000010
+#define D3DPTEXTURECAPS_SQUAREONLY               0x00000020
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040
+#define D3DPTEXTURECAPS_ALPHAPALETTE             0x00000080
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL       __MSABI_LONG(0x00000100)
+/* yes actually 0x00000200 is unused - or at least unreleased */
+#define D3DPTEXTURECAPS_PROJECTED                0x00000400
+#define D3DPTEXTURECAPS_CUBEMAP                  0x00000800
+#define D3DPTEXTURECAPS_COLORKEYBLEND            0x00001000
+
+#define D3DPTFILTERCAPS_NEAREST           0x00000001
+#define D3DPTFILTERCAPS_LINEAR            0x00000002
+#define D3DPTFILTERCAPS_MIPNEAREST        0x00000004
+#define D3DPTFILTERCAPS_MIPLINEAR         0x00000008
+#define D3DPTFILTERCAPS_LINEARMIPNEAREST  0x00000010
+#define D3DPTFILTERCAPS_LINEARMIPLINEAR   0x00000020
+/* yes - missing numbers */
+#define D3DPTFILTERCAPS_MINFPOINT         0x00000100
+#define D3DPTFILTERCAPS_MINFLINEAR        0x00000200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC   0x00000400
+/* yes - missing numbers */
+#define D3DPTFILTERCAPS_MIPFPOINT         0x00010000
+#define D3DPTFILTERCAPS_MIPFLINEAR        0x00020000
+/* yes - missing numbers */
+#define D3DPTFILTERCAPS_MAGFPOINT         0x01000000
+#define D3DPTFILTERCAPS_MAGFLINEAR        0x02000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC   0x04000000
+#define D3DPTFILTERCAPS_MAGFAFLATCUBIC    0x08000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000
+
+#define D3DPTBLENDCAPS_DECAL            0x00000001
+#define D3DPTBLENDCAPS_MODULATE         0x00000002
+#define D3DPTBLENDCAPS_DECALALPHA       0x00000004
+#define D3DPTBLENDCAPS_MODULATEALPHA    0x00000008
+#define D3DPTBLENDCAPS_DECALMASK        0x00000010
+#define D3DPTBLENDCAPS_MODULATEMASK     0x00000020
+#define D3DPTBLENDCAPS_COPY             0x00000040
+#define D3DPTBLENDCAPS_ADD              0x00000080
+
+#define D3DPTADDRESSCAPS_WRAP           0x00000001
+#define D3DPTADDRESSCAPS_MIRROR         0x00000002
+#define D3DPTADDRESSCAPS_CLAMP          0x00000004
+#define D3DPTADDRESSCAPS_BORDER         0x00000008
+#define D3DPTADDRESSCAPS_INDEPENDENTUV  0x00000010
+
+
+typedef struct _D3DDeviceDesc {
+        DWORD           dwSize;
+        DWORD           dwFlags;
+        D3DCOLORMODEL   dcmColorModel;
+        DWORD           dwDevCaps;
+        D3DTRANSFORMCAPS dtcTransformCaps;
+        BOOL            bClipping;
+        D3DLIGHTINGCAPS dlcLightingCaps;
+        D3DPRIMCAPS     dpcLineCaps;
+        D3DPRIMCAPS     dpcTriCaps;
+        DWORD           dwDeviceRenderBitDepth;
+        DWORD           dwDeviceZBufferBitDepth;
+        DWORD           dwMaxBufferSize;
+        DWORD           dwMaxVertexCount;
+
+        DWORD           dwMinTextureWidth,dwMinTextureHeight;
+        DWORD           dwMaxTextureWidth,dwMaxTextureHeight;
+        DWORD           dwMinStippleWidth,dwMaxStippleWidth;
+        DWORD           dwMinStippleHeight,dwMaxStippleHeight;
+
+        DWORD       dwMaxTextureRepeat;
+        DWORD       dwMaxTextureAspectRatio;
+        DWORD       dwMaxAnisotropy;
+
+        D3DVALUE    dvGuardBandLeft;
+        D3DVALUE    dvGuardBandTop;
+        D3DVALUE    dvGuardBandRight;
+        D3DVALUE    dvGuardBandBottom;
+
+        D3DVALUE    dvExtentsAdjust;
+        DWORD       dwStencilCaps;
+
+        DWORD       dwFVFCaps;
+        DWORD       dwTextureOpCaps;
+        WORD        wMaxTextureBlendStages;
+        WORD        wMaxSimultaneousTextures;
+} D3DDEVICEDESC,*LPD3DDEVICEDESC;
+#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))
+
+typedef struct _D3DDeviceDesc7 {
+        DWORD            dwDevCaps;
+        D3DPRIMCAPS      dpcLineCaps;
+        D3DPRIMCAPS      dpcTriCaps;
+        DWORD            dwDeviceRenderBitDepth;
+        DWORD            dwDeviceZBufferBitDepth;
+
+        DWORD       dwMinTextureWidth, dwMinTextureHeight;
+        DWORD       dwMaxTextureWidth, dwMaxTextureHeight;
+
+        DWORD       dwMaxTextureRepeat;
+        DWORD       dwMaxTextureAspectRatio;
+        DWORD       dwMaxAnisotropy;
+
+        D3DVALUE    dvGuardBandLeft;
+        D3DVALUE    dvGuardBandTop;
+        D3DVALUE    dvGuardBandRight;
+        D3DVALUE    dvGuardBandBottom;
+
+        D3DVALUE    dvExtentsAdjust;
+        DWORD       dwStencilCaps;
+        DWORD       dwFVFCaps;
+        DWORD       dwTextureOpCaps;
+        WORD        wMaxTextureBlendStages;
+        WORD        wMaxSimultaneousTextures;
+
+        DWORD       dwMaxActiveLights;
+        D3DVALUE    dvMaxVertexW;
+        GUID        deviceGUID;
+
+        WORD        wMaxUserClipPlanes;
+        WORD        wMaxVertexBlendMatrices;
+
+        DWORD       dwVertexProcessingCaps;
+
+        DWORD       dwReserved1;
+        DWORD       dwReserved2;
+        DWORD       dwReserved3;
+        DWORD       dwReserved4;
+} D3DDEVICEDESC7, *LPD3DDEVICEDESC7;
+#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7))
+
+#define D3DDD_COLORMODEL                0x00000001
+#define D3DDD_DEVCAPS                   0x00000002
+#define D3DDD_TRANSFORMCAPS             0x00000004
+#define D3DDD_LIGHTINGCAPS              0x00000008
+#define D3DDD_BCLIPPING                 0x00000010
+#define D3DDD_LINECAPS                  0x00000020
+#define D3DDD_TRICAPS                   0x00000040
+#define D3DDD_DEVICERENDERBITDEPTH      0x00000080
+#define D3DDD_DEVICEZBUFFERBITDEPTH     0x00000100
+#define D3DDD_MAXBUFFERSIZE             0x00000200
+#define D3DDD_MAXVERTEXCOUNT            0x00000400
+
+#define D3DDEVCAPS_FLOATTLVERTEX           0x00000001
+#define D3DDEVCAPS_SORTINCREASINGZ         0x00000002
+#define D3DDEVCAPS_SORTDECREASINGZ         0X00000004
+#define D3DDEVCAPS_SORTEXACT               0x00000008
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY     0x00000010
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY      0x00000020
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY    0x00000040
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY     0x00000080
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY     0x00000100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY      0x00000200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX        0x00000400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP      0x00000800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM   0x00001000
+#define D3DDEVCAPS_DRAWPRIMITIVES2         0x00002000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x00008000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x00010000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x00020000
+#define D3DDEVCAPS_HWRASTERIZATION         0x00080000
+
+#define D3DSTENCILCAPS_KEEP     0x00000001
+#define D3DSTENCILCAPS_ZERO     0x00000002
+#define D3DSTENCILCAPS_REPLACE  0x00000004
+#define D3DSTENCILCAPS_INCRSAT  0x00000008
+#define D3DSTENCILCAPS_DECRSAT  0x00000010
+#define D3DSTENCILCAPS_INVERT   0x00000020
+#define D3DSTENCILCAPS_INCR     0x00000040
+#define D3DSTENCILCAPS_DECR     0x00000080
+
+#define D3DTEXOPCAPS_DISABLE                    0x00000001
+#define D3DTEXOPCAPS_SELECTARG1                 0x00000002
+#define D3DTEXOPCAPS_SELECTARG2                 0x00000004
+#define D3DTEXOPCAPS_MODULATE                   0x00000008
+#define D3DTEXOPCAPS_MODULATE2X                 0x00000010
+#define D3DTEXOPCAPS_MODULATE4X                 0x00000020
+#define D3DTEXOPCAPS_ADD                        0x00000040
+#define D3DTEXOPCAPS_ADDSIGNED                  0x00000080
+#define D3DTEXOPCAPS_ADDSIGNED2X                0x00000100
+#define D3DTEXOPCAPS_SUBTRACT                   0x00000200
+#define D3DTEXOPCAPS_ADDSMOOTH                  0x00000400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA          0x00000800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA          0x00001000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA           0x00002000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        0x00004000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA          0x00008000
+#define D3DTEXOPCAPS_PREMODULATE                0x00010000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     0x00020000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     0x00040000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  0x00080000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  0x00100000
+#define D3DTEXOPCAPS_BUMPENVMAP                 0x00200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        0x00400000
+#define D3DTEXOPCAPS_DOTPRODUCT3                0x00800000
+
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK    0x0000FFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS   0x00080000
+
+#define D3DVTXPCAPS_TEXGEN              0x00000001
+#define D3DVTXPCAPS_MATERIALSOURCE7     0x00000002
+#define D3DVTXPCAPS_VERTEXFOG           0x00000004
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS   0x00000008
+#define D3DVTXPCAPS_POSITIONALLIGHTS    0x00000010
+#define D3DVTXPCAPS_LOCALVIEWER         0x00000020
+
+typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK)(GUID *guid, char *description, char *name,
+        D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK7)(char *description, char *name, D3DDEVICEDESC7 *desc, void *ctx);
+
+#define D3DFDS_COLORMODEL          0x00000001
+#define D3DFDS_GUID                0x00000002
+#define D3DFDS_HARDWARE            0x00000004
+#define D3DFDS_TRIANGLES           0x00000008
+#define D3DFDS_LINES               0x00000010
+#define D3DFDS_MISCCAPS            0x00000020
+#define D3DFDS_RASTERCAPS          0x00000040
+#define D3DFDS_ZCMPCAPS            0x00000080
+#define D3DFDS_ALPHACMPCAPS        0x00000100
+#define D3DFDS_SRCBLENDCAPS        0x00000200
+#define D3DFDS_DSTBLENDCAPS        0x00000400
+#define D3DFDS_SHADECAPS           0x00000800
+#define D3DFDS_TEXTURECAPS         0x00001000
+#define D3DFDS_TEXTUREFILTERCAPS   0x00002000
+#define D3DFDS_TEXTUREBLENDCAPS    0x00004000
+#define D3DFDS_TEXTUREADDRESSCAPS  0x00008000
+
+typedef struct _D3DFINDDEVICESEARCH {
+    DWORD               dwSize;
+    DWORD               dwFlags;
+    BOOL                bHardware;
+    D3DCOLORMODEL       dcmColorModel;
+    GUID                guid;
+    DWORD               dwCaps;
+    D3DPRIMCAPS         dpcPrimCaps;
+} D3DFINDDEVICESEARCH,*LPD3DFINDDEVICESEARCH;
+
+typedef struct _D3DFINDDEVICERESULT {
+    DWORD               dwSize;
+    GUID                guid;
+    D3DDEVICEDESC       ddHwDesc;
+    D3DDEVICEDESC       ddSwDesc;
+} D3DFINDDEVICERESULT,*LPD3DFINDDEVICERESULT;
+
+typedef struct _D3DExecuteBufferDesc {
+  DWORD  dwSize;
+  DWORD  dwFlags;
+  DWORD  dwCaps;
+  DWORD  dwBufferSize;
+  void *lpData;
+} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;
+
+#define D3DDEB_BUFSIZE          0x00000001
+#define D3DDEB_CAPS             0x00000002
+#define D3DDEB_LPDATA           0x00000004
+
+#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001
+#define D3DDEBCAPS_VIDEOMEMORY  0x00000002
+#define D3DDEBCAPS_MEM          (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) /* = 0x3 */
+
+typedef struct _D3DDEVINFO_TEXTUREMANAGER {
+	BOOL    bThrashing;
+	DWORD   dwApproxBytesDownloaded;
+	DWORD   dwNumEvicts;
+	DWORD   dwNumVidCreates;
+	DWORD   dwNumTexturesUsed;
+	DWORD   dwNumUsedTexInVid;
+	DWORD   dwWorkingSet;
+	DWORD   dwWorkingSetBytes;
+	DWORD   dwTotalManaged;
+	DWORD   dwTotalBytes;
+	DWORD   dwLastPri;
+} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER;
+
+typedef struct _D3DDEVINFO_TEXTURING {
+	DWORD   dwNumLoads;
+	DWORD   dwApproxBytesLoaded;
+	DWORD   dwNumPreLoads;
+	DWORD   dwNumSet;
+	DWORD   dwNumCreates;
+	DWORD   dwNumDestroys;
+	DWORD   dwNumSetPriorities;
+	DWORD   dwNumSetLODs;
+	DWORD   dwNumLocks;
+	DWORD   dwNumGetDCs;
+} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING;
+
+
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl
new file mode 100644
index 0000000..13681fe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl
@@ -0,0 +1,648 @@
+/*
+ * Copyright 2010 Matteo Bruni 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+typedef struct _D3D_SHADER_MACRO
+{
+    const char *Name;
+    const char *Definition;
+} D3D_SHADER_MACRO;
+
+typedef struct _D3D_SHADER_MACRO* LPD3D_SHADER_MACRO;
+
+[
+    object,
+    local,
+    uuid(8ba5fb08-5195-40e2-ac58-0d989c3a0102)
+]
+interface ID3D10Blob : IUnknown
+{
+    void *GetBufferPointer();
+    SIZE_T GetBufferSize();
+}
+
+typedef ID3D10Blob* LPD3D10BLOB;
+typedef ID3D10Blob ID3DBlob;
+typedef ID3DBlob* LPD3DBLOB;
+cpp_quote("#define IID_ID3DBlob IID_ID3D10Blob")
+
+typedef enum _D3D_INCLUDE_TYPE
+{
+    D3D_INCLUDE_LOCAL = 0,
+    D3D_INCLUDE_SYSTEM,
+    D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL,
+    D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM,
+    D3D_INCLUDE_FORCE_DWORD = 0x7fffffff
+} D3D_INCLUDE_TYPE;
+
+[
+    object,
+    local,
+]
+interface ID3DInclude
+{
+    HRESULT Open(D3D_INCLUDE_TYPE include_type,
+                 const char *filename,
+                 const void *parent_data,
+                 const void **data,
+                 UINT *bytes);
+    HRESULT Close(const void *data);
+}
+
+typedef ID3DInclude* LPD3DINCLUDE;
+
+typedef enum D3D_DRIVER_TYPE
+{
+    D3D_DRIVER_TYPE_UNKNOWN,
+    D3D_DRIVER_TYPE_HARDWARE,
+    D3D_DRIVER_TYPE_REFERENCE,
+    D3D_DRIVER_TYPE_NULL,
+    D3D_DRIVER_TYPE_SOFTWARE,
+    D3D_DRIVER_TYPE_WARP,
+} D3D_DRIVER_TYPE;
+
+typedef enum D3D_FEATURE_LEVEL
+{
+    D3D_FEATURE_LEVEL_9_1 = 0x9100,
+    D3D_FEATURE_LEVEL_9_2 = 0x9200,
+    D3D_FEATURE_LEVEL_9_3 = 0x9300,
+    D3D_FEATURE_LEVEL_10_0 = 0xa000,
+    D3D_FEATURE_LEVEL_10_1 = 0xa100,
+    D3D_FEATURE_LEVEL_11_0 = 0xb000,
+    D3D_FEATURE_LEVEL_11_1 = 0xb100
+} D3D_FEATURE_LEVEL;
+
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION          2048")
+cpp_quote("#define D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION          4096")
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION     2048")
+cpp_quote("#define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION     4096")
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION          512")
+cpp_quote("#define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION          4096")
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION   256")
+cpp_quote("#define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY             2")
+cpp_quote("#define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT             65535")
+cpp_quote("#define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT             1048575")
+cpp_quote("#define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT   1")
+cpp_quote("#define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT   4")
+cpp_quote("#define D3D_FL9_1_MAX_TEXTURE_REPEAT                 128")
+cpp_quote("#define D3D_FL9_2_MAX_TEXTURE_REPEAT                 2048")
+cpp_quote("#define D3D_FL9_3_MAX_TEXTURE_REPEAT                 8192")
+
+typedef enum _D3D_SHADER_VARIABLE_CLASS
+{
+    D3D_SVC_SCALAR,
+    D3D_SVC_VECTOR,
+    D3D_SVC_MATRIX_ROWS,
+    D3D_SVC_MATRIX_COLUMNS,
+    D3D_SVC_OBJECT,
+    D3D_SVC_STRUCT,
+    D3D_SVC_INTERFACE_CLASS,
+    D3D_SVC_INTERFACE_POINTER,
+    D3D10_SVC_SCALAR = 0,
+    D3D10_SVC_VECTOR,
+    D3D10_SVC_MATRIX_ROWS,
+    D3D10_SVC_MATRIX_COLUMNS,
+    D3D10_SVC_OBJECT,
+    D3D10_SVC_STRUCT,
+    D3D11_SVC_INTERFACE_CLASS,
+    D3D11_SVC_INTERFACE_POINTER,
+    D3D_SVC_FORCE_DWORD = 0x7fffffff,
+} D3D_SHADER_VARIABLE_CLASS;
+
+typedef enum _D3D_SHADER_VARIABLE_TYPE
+{
+    D3D_SVT_VOID,
+    D3D_SVT_BOOL,
+    D3D_SVT_INT,
+    D3D_SVT_FLOAT,
+    D3D_SVT_STRING,
+    D3D_SVT_TEXTURE,
+    D3D_SVT_TEXTURE1D,
+    D3D_SVT_TEXTURE2D,
+    D3D_SVT_TEXTURE3D,
+    D3D_SVT_TEXTURECUBE,
+    D3D_SVT_SAMPLER,
+    D3D_SVT_SAMPLER1D,
+    D3D_SVT_SAMPLER2D,
+    D3D_SVT_SAMPLER3D,
+    D3D_SVT_SAMPLERCUBE,
+    D3D_SVT_PIXELSHADER,
+    D3D_SVT_VERTEXSHADER,
+    D3D_SVT_PIXELFRAGMENT,
+    D3D_SVT_VERTEXFRAGMENT,
+    D3D_SVT_UINT,
+    D3D_SVT_UINT8,
+    D3D_SVT_GEOMETRYSHADER,
+    D3D_SVT_RASTERIZER,
+    D3D_SVT_DEPTHSTENCIL,
+    D3D_SVT_BLEND,
+    D3D_SVT_BUFFER,
+    D3D_SVT_CBUFFER,
+    D3D_SVT_TBUFFER,
+    D3D_SVT_TEXTURE1DARRAY,
+    D3D_SVT_TEXTURE2DARRAY,
+    D3D_SVT_RENDERTARGETVIEW,
+    D3D_SVT_DEPTHSTENCILVIEW,
+    D3D_SVT_TEXTURE2DMS,
+    D3D_SVT_TEXTURE2DMSARRAY,
+    D3D_SVT_TEXTURECUBEARRAY,
+    D3D_SVT_HULLSHADER,
+    D3D_SVT_DOMAINSHADER,
+    D3D_SVT_INTERFACE_POINTER,
+    D3D_SVT_COMPUTESHADER,
+    D3D_SVT_DOUBLE,
+    D3D_SVT_RWTEXTURE1D,
+    D3D_SVT_RWTEXTURE1DARRAY,
+    D3D_SVT_RWTEXTURE2D,
+    D3D_SVT_RWTEXTURE2DARRAY,
+    D3D_SVT_RWTEXTURE3D,
+    D3D_SVT_RWBUFFER,
+    D3D_SVT_BYTEADDRESS_BUFFER,
+    D3D_SVT_RWBYTEADDRESS_BUFFER,
+    D3D_SVT_STRUCTURED_BUFFER,
+    D3D_SVT_RWSTRUCTURED_BUFFER,
+    D3D_SVT_APPEND_STRUCTURED_BUFFER,
+    D3D_SVT_CONSUME_STRUCTURED_BUFFER,
+    D3D10_SVT_VOID = 0,
+    D3D10_SVT_BOOL,
+    D3D10_SVT_INT,
+    D3D10_SVT_FLOAT,
+    D3D10_SVT_STRING,
+    D3D10_SVT_TEXTURE,
+    D3D10_SVT_TEXTURE1D,
+    D3D10_SVT_TEXTURE2D,
+    D3D10_SVT_TEXTURE3D,
+    D3D10_SVT_TEXTURECUBE,
+    D3D10_SVT_SAMPLER,
+    D3D10_SVT_SAMPLER1D,
+    D3D10_SVT_SAMPLER2D,
+    D3D10_SVT_SAMPLER3D,
+    D3D10_SVT_SAMPLERCUBE,
+    D3D10_SVT_PIXELSHADER,
+    D3D10_SVT_VERTEXSHADER,
+    D3D10_SVT_PIXELFRAGMENT,
+    D3D10_SVT_VERTEXFRAGMENT,
+    D3D10_SVT_UINT,
+    D3D10_SVT_UINT8,
+    D3D10_SVT_GEOMETRYSHADER,
+    D3D10_SVT_RASTERIZER,
+    D3D10_SVT_DEPTHSTENCIL,
+    D3D10_SVT_BLEND,
+    D3D10_SVT_BUFFER,
+    D3D10_SVT_CBUFFER,
+    D3D10_SVT_TBUFFER,
+    D3D10_SVT_TEXTURE1DARRAY,
+    D3D10_SVT_TEXTURE2DARRAY,
+    D3D10_SVT_RENDERTARGETVIEW,
+    D3D10_SVT_DEPTHSTENCILVIEW,
+    D3D10_SVT_TEXTURE2DMS,
+    D3D10_SVT_TEXTURE2DMSARRAY,
+    D3D10_SVT_TEXTURECUBEARRAY,
+    D3D11_SVT_HULLSHADER,
+    D3D11_SVT_DOMAINSHADER,
+    D3D11_SVT_INTERFACE_POINTER,
+    D3D11_SVT_COMPUTESHADER,
+    D3D11_SVT_DOUBLE,
+    D3D11_SVT_RWTEXTURE1D,
+    D3D11_SVT_RWTEXTURE1DARRAY,
+    D3D11_SVT_RWTEXTURE2D,
+    D3D11_SVT_RWTEXTURE2DARRAY,
+    D3D11_SVT_RWTEXTURE3D,
+    D3D11_SVT_RWBUFFER,
+    D3D11_SVT_BYTEADDRESS_BUFFER,
+    D3D11_SVT_RWBYTEADDRESS_BUFFER,
+    D3D11_SVT_STRUCTURED_BUFFER,
+    D3D11_SVT_RWSTRUCTURED_BUFFER,
+    D3D11_SVT_APPEND_STRUCTURED_BUFFER,
+    D3D11_SVT_CONSUME_STRUCTURED_BUFFER,
+    D3D_SVT_FORCE_DWORD = 0x7fffffff,
+} D3D_SHADER_VARIABLE_TYPE;
+
+typedef enum D3D_PRIMITIVE
+{
+    D3D_PRIMITIVE_UNDEFINED,
+    D3D_PRIMITIVE_POINT,
+    D3D_PRIMITIVE_LINE,
+    D3D_PRIMITIVE_TRIANGLE,
+    D3D_PRIMITIVE_LINE_ADJ = 6,
+    D3D_PRIMITIVE_TRIANGLE_ADJ,
+    D3D_PRIMITIVE_1_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_2_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_3_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_4_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_5_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_6_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_7_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_8_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_9_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_10_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_11_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_12_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_13_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_14_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_15_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_16_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_17_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_18_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_19_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,
+    D3D_PRIMITIVE_21_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_22_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_23_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_24_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_25_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_26_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_27_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_28_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_29_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_30_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_31_CONTROL_POINT_PATCH,
+    D3D_PRIMITIVE_32_CONTROL_POINT_PATCH,
+    D3D10_PRIMITIVE_UNDEFINED = 0,
+    D3D10_PRIMITIVE_POINT,
+    D3D10_PRIMITIVE_LINE,
+    D3D10_PRIMITIVE_TRIANGLE,
+    D3D10_PRIMITIVE_LINE_ADJ = 6,
+    D3D10_PRIMITIVE_TRIANGLE_ADJ,
+    D3D11_PRIMITIVE_UNDEFINED = 0,
+    D3D11_PRIMITIVE_POINT,
+    D3D11_PRIMITIVE_LINE,
+    D3D11_PRIMITIVE_TRIANGLE,
+    D3D11_PRIMITIVE_LINE_ADJ = 6,
+    D3D11_PRIMITIVE_TRIANGLE_ADJ,
+    D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,
+    D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH,
+    D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH,
+} D3D_PRIMITIVE;
+
+typedef enum D3D_PRIMITIVE_TOPOLOGY
+{
+    D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,
+    D3D_PRIMITIVE_TOPOLOGY_POINTLIST,
+    D3D_PRIMITIVE_TOPOLOGY_LINELIST,
+    D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,
+    D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+    D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+    D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+    D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+    D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+    D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+    D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,
+    D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,
+    D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,
+    D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+    D3D10_PRIMITIVE_TOPOLOGY_POINTLIST,
+    D3D10_PRIMITIVE_TOPOLOGY_LINELIST,
+    D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP,
+    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+    D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+    D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+    D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+    D3D11_PRIMITIVE_TOPOLOGY_POINTLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_LINELIST,
+    D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP,
+    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+    D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+    D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+    D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,
+    D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,
+    D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,
+} D3D_PRIMITIVE_TOPOLOGY;
+
+typedef enum D3D_TESSELLATOR_DOMAIN
+{
+    D3D_TESSELLATOR_DOMAIN_UNDEFINED,
+    D3D_TESSELLATOR_DOMAIN_ISOLINE,
+    D3D_TESSELLATOR_DOMAIN_TRI,
+    D3D_TESSELLATOR_DOMAIN_QUAD,
+    D3D11_TESSELLATOR_DOMAIN_UNDEFINED = 0,
+    D3D11_TESSELLATOR_DOMAIN_ISOLINE,
+    D3D11_TESSELLATOR_DOMAIN_TRI,
+    D3D11_TESSELLATOR_DOMAIN_QUAD,
+} D3D_TESSELLATOR_DOMAIN;
+
+typedef enum D3D_TESSELLATOR_PARTITIONING
+{
+    D3D_TESSELLATOR_PARTITIONING_UNDEFINED,
+    D3D_TESSELLATOR_PARTITIONING_INTEGER,
+    D3D_TESSELLATOR_PARTITIONING_POW2,
+    D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
+    D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
+    D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = 0,
+    D3D11_TESSELLATOR_PARTITIONING_INTEGER,
+    D3D11_TESSELLATOR_PARTITIONING_POW2,
+    D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
+    D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
+} D3D_TESSELLATOR_PARTITIONING;
+
+typedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE
+{
+    D3D_TESSELLATOR_OUTPUT_UNDEFINED,
+    D3D_TESSELLATOR_OUTPUT_POINT,
+    D3D_TESSELLATOR_OUTPUT_LINE,
+    D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW,
+    D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
+    D3D11_TESSELLATOR_OUTPUT_UNDEFINED = 0,
+    D3D11_TESSELLATOR_OUTPUT_POINT,
+    D3D11_TESSELLATOR_OUTPUT_LINE,
+    D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW,
+    D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
+} D3D_TESSELLATOR_OUTPUT_PRIMITIVE;
+
+typedef enum D3D_CBUFFER_TYPE
+{
+    D3D_CT_CBUFFER,
+    D3D_CT_TBUFFER,
+    D3D_CT_INTERFACE_POINTERS,
+    D3D_CT_RESOURCE_BIND_INFO,
+    D3D10_CT_CBUFFER = 0,
+    D3D10_CT_TBUFFER,
+    D3D11_CT_CBUFFER = 0,
+    D3D11_CT_TBUFFER,
+    D3D11_CT_INTERFACE_POINTERS,
+    D3D11_CT_RESOURCE_BIND_INFO,
+} D3D_CBUFFER_TYPE;
+
+typedef enum D3D_SRV_DIMENSION
+{
+    D3D_SRV_DIMENSION_UNKNOWN,
+    D3D_SRV_DIMENSION_BUFFER,
+    D3D_SRV_DIMENSION_TEXTURE1D,
+    D3D_SRV_DIMENSION_TEXTURE1DARRAY,
+    D3D_SRV_DIMENSION_TEXTURE2D,
+    D3D_SRV_DIMENSION_TEXTURE2DARRAY,
+    D3D_SRV_DIMENSION_TEXTURE2DMS,
+    D3D_SRV_DIMENSION_TEXTURE2DMSARRAY,
+    D3D_SRV_DIMENSION_TEXTURE3D,
+    D3D_SRV_DIMENSION_TEXTURECUBE,
+    D3D_SRV_DIMENSION_TEXTURECUBEARRAY,
+    D3D_SRV_DIMENSION_BUFFEREX,
+    D3D10_SRV_DIMENSION_UNKNOWN = 0,
+    D3D10_SRV_DIMENSION_BUFFER,
+    D3D10_SRV_DIMENSION_TEXTURE1D,
+    D3D10_SRV_DIMENSION_TEXTURE1DARRAY,
+    D3D10_SRV_DIMENSION_TEXTURE2D,
+    D3D10_SRV_DIMENSION_TEXTURE2DARRAY,
+    D3D10_SRV_DIMENSION_TEXTURE2DMS,
+    D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY,
+    D3D10_SRV_DIMENSION_TEXTURE3D,
+    D3D10_SRV_DIMENSION_TEXTURECUBE,
+    D3D10_1_SRV_DIMENSION_UNKNOWN = 0,
+    D3D10_1_SRV_DIMENSION_BUFFER,
+    D3D10_1_SRV_DIMENSION_TEXTURE1D,
+    D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY,
+    D3D10_1_SRV_DIMENSION_TEXTURE2D,
+    D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY,
+    D3D10_1_SRV_DIMENSION_TEXTURE2DMS,
+    D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY,
+    D3D10_1_SRV_DIMENSION_TEXTURE3D,
+    D3D10_1_SRV_DIMENSION_TEXTURECUBE,
+    D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY,
+    D3D11_SRV_DIMENSION_UNKNOWN = 0,
+    D3D11_SRV_DIMENSION_BUFFER,
+    D3D11_SRV_DIMENSION_TEXTURE1D,
+    D3D11_SRV_DIMENSION_TEXTURE1DARRAY,
+    D3D11_SRV_DIMENSION_TEXTURE2D,
+    D3D11_SRV_DIMENSION_TEXTURE2DARRAY,
+    D3D11_SRV_DIMENSION_TEXTURE2DMS,
+    D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY,
+    D3D11_SRV_DIMENSION_TEXTURE3D,
+    D3D11_SRV_DIMENSION_TEXTURECUBE,
+    D3D11_SRV_DIMENSION_TEXTURECUBEARRAY,
+    D3D11_SRV_DIMENSION_BUFFEREX,
+} D3D_SRV_DIMENSION;
+
+typedef enum D3D_REGISTER_COMPONENT_TYPE
+{
+    D3D_REGISTER_COMPONENT_UNKNOWN,
+    D3D_REGISTER_COMPONENT_UINT32,
+    D3D_REGISTER_COMPONENT_SINT32,
+    D3D_REGISTER_COMPONENT_FLOAT32,
+    D3D10_REGISTER_COMPONENT_UNKNOWN = 0,
+    D3D10_REGISTER_COMPONENT_UINT32,
+    D3D10_REGISTER_COMPONENT_SINT32,
+    D3D10_REGISTER_COMPONENT_FLOAT32,
+} D3D_REGISTER_COMPONENT_TYPE;
+
+typedef enum D3D_RESOURCE_RETURN_TYPE
+{
+    D3D_RETURN_TYPE_UNORM = 1,
+    D3D_RETURN_TYPE_SNORM,
+    D3D_RETURN_TYPE_SINT,
+    D3D_RETURN_TYPE_UINT,
+    D3D_RETURN_TYPE_FLOAT,
+    D3D_RETURN_TYPE_MIXED,
+    D3D_RETURN_TYPE_DOUBLE,
+    D3D_RETURN_TYPE_CONTINUED,
+    D3D10_RETURN_TYPE_UNORM = 1,
+    D3D10_RETURN_TYPE_SNORM,
+    D3D10_RETURN_TYPE_SINT,
+    D3D10_RETURN_TYPE_UINT,
+    D3D10_RETURN_TYPE_FLOAT,
+    D3D10_RETURN_TYPE_MIXED,
+    D3D11_RETURN_TYPE_UNORM = 1,
+    D3D11_RETURN_TYPE_SNORM,
+    D3D11_RETURN_TYPE_SINT,
+    D3D11_RETURN_TYPE_UINT,
+    D3D11_RETURN_TYPE_FLOAT,
+    D3D11_RETURN_TYPE_MIXED,
+    D3D11_RETURN_TYPE_DOUBLE,
+    D3D11_RETURN_TYPE_CONTINUED,
+} D3D_RESOURCE_RETURN_TYPE;
+
+typedef enum D3D_NAME
+{
+    D3D_NAME_UNDEFINED,
+    D3D_NAME_POSITION,
+    D3D_NAME_CLIP_DISTANCE,
+    D3D_NAME_CULL_DISTANCE,
+    D3D_NAME_RENDER_TARGET_ARRAY_INDEX,
+    D3D_NAME_VIEWPORT_ARRAY_INDEX,
+    D3D_NAME_VERTEX_ID,
+    D3D_NAME_PRIMITIVE_ID,
+    D3D_NAME_INSTANCE_ID,
+    D3D_NAME_IS_FRONT_FACE,
+    D3D_NAME_SAMPLE_INDEX,
+    D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR,
+    D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,
+    D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR,
+    D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR,
+    D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR,
+    D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR,
+    D3D_NAME_TARGET = 64,
+    D3D_NAME_DEPTH,
+    D3D_NAME_COVERAGE,
+    D3D_NAME_DEPTH_GREATER_EQUAL,
+    D3D_NAME_DEPTH_LESS_EQUAL,
+    D3D10_NAME_UNDEFINED = 0,
+    D3D10_NAME_POSITION,
+    D3D10_NAME_CLIP_DISTANCE,
+    D3D10_NAME_CULL_DISTANCE,
+    D3D10_NAME_RENDER_TARGET_ARRAY_INDEX,
+    D3D10_NAME_VIEWPORT_ARRAY_INDEX,
+    D3D10_NAME_VERTEX_ID,
+    D3D10_NAME_PRIMITIVE_ID,
+    D3D10_NAME_INSTANCE_ID,
+    D3D10_NAME_IS_FRONT_FACE,
+    D3D10_NAME_SAMPLE_INDEX,
+    D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR,
+    D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,
+    D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR,
+    D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR,
+    D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR,
+    D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR,
+    D3D10_NAME_TARGET = 64,
+    D3D10_NAME_DEPTH,
+    D3D10_NAME_COVERAGE,
+    D3D11_NAME_DEPTH_GREATER_EQUAL,
+    D3D11_NAME_DEPTH_LESS_EQUAL,
+} D3D_NAME;
+
+typedef enum _D3D_SHADER_INPUT_TYPE
+{
+    D3D_SIT_CBUFFER,
+    D3D_SIT_TBUFFER,
+    D3D_SIT_TEXTURE,
+    D3D_SIT_SAMPLER,
+    D3D_SIT_UAV_RWTYPED,
+    D3D_SIT_STRUCTURED,
+    D3D_SIT_UAV_RWSTRUCTURED,
+    D3D_SIT_BYTEADDRESS,
+    D3D_SIT_UAV_RWBYTEADDRESS,
+    D3D_SIT_UAV_APPEND_STRUCTURED,
+    D3D_SIT_UAV_CONSUME_STRUCTURED,
+    D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
+    D3D10_SIT_CBUFFER = 0,
+    D3D10_SIT_TBUFFER,
+    D3D10_SIT_TEXTURE,
+    D3D10_SIT_SAMPLER,
+    D3D11_SIT_UAV_RWTYPED,
+    D3D11_SIT_STRUCTURED,
+    D3D11_SIT_UAV_RWSTRUCTURED,
+    D3D11_SIT_BYTEADDRESS,
+    D3D11_SIT_UAV_RWBYTEADDRESS,
+    D3D11_SIT_UAV_APPEND_STRUCTURED,
+    D3D11_SIT_UAV_CONSUME_STRUCTURED,
+    D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
+} D3D_SHADER_INPUT_TYPE;
+
+cpp_quote("DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h
new file mode 100644
index 0000000..2337abf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2010 Matteo Bruni 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DCOMPILER_H__
+#define __D3DCOMPILER_H__
+
+#include "d3d11shader.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__GNUC__)
+#define D3DCOMPILER_DLL_W (const WCHAR[]){'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0}
+#elif defined(_MSC_VER)
+#define D3DCOMPILER_DLL_W L"d3dcompiler_43.dll"
+#else
+static const WCHAR D3DCOMPILER_DLL_W[] = {'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0};
+#endif
+
+#define D3DCOMPILER_DLL_A  "d3dcompiler_43.dll"
+#define D3DCOMPILER_DLL    WINELIB_NAME_AW(D3DCOMPILER_DLL_)
+
+#define D3DCOMPILE_DEBUG                            0x00000001
+#define D3DCOMPILE_SKIP_VALIDATION                  0x00000002
+#define D3DCOMPILE_SKIP_OPTIMIZATION                0x00000004
+#define D3DCOMPILE_PACK_MATRIX_ROW_MAJOR            0x00000008
+#define D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR         0x00000010
+#define D3DCOMPILE_PARTIAL_PRECISION                0x00000020
+#define D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT         0x00000040
+#define D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT         0x00000080
+#define D3DCOMPILE_NO_PRESHADER                     0x00000100
+#define D3DCOMPILE_AVOID_FLOW_CONTROL               0x00000200
+#define D3DCOMPILE_PREFER_FLOW_CONTROL              0x00000400
+#define D3DCOMPILE_ENABLE_STRICTNESS                0x00000800
+#define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY   0x00001000
+#define D3DCOMPILE_IEEE_STRICTNESS                  0x00002000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL0              0x00004000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL1              0x00000000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL2              0x0000c000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL3              0x00008000
+#define D3DCOMPILE_WARNINGS_ARE_ERRORS              0x00040000
+
+#define D3D_DISASM_ENABLE_COLOR_CODE                0x00000001
+#define D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS      0x00000002
+#define D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING     0x00000004
+#define D3D_DISASM_ENABLE_INSTRUCTION_CYCLE         0x00000008
+#define D3D_DISASM_DISABLE_DEBUG_INFO               0x00000010
+
+HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename,
+        const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,
+        const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);
+typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const char *filename,
+        const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,
+        const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);
+
+typedef enum D3DCOMPILER_STRIP_FLAGS
+{
+    D3DCOMPILER_STRIP_REFLECTION_DATA = 1,
+    D3DCOMPILER_STRIP_DEBUG_INFO = 2,
+    D3DCOMPILER_STRIP_TEST_BLOBS = 4,
+    D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff
+} D3DCOMPILER_STRIP_FLAGS;
+
+HRESULT WINAPI D3DStripShader(const void *data, SIZE_T data_size, UINT flags, ID3DBlob **blob);
+
+typedef enum D3D_BLOB_PART
+{
+    D3D_BLOB_INPUT_SIGNATURE_BLOB,
+    D3D_BLOB_OUTPUT_SIGNATURE_BLOB,
+    D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB,
+    D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB,
+    D3D_BLOB_ALL_SIGNATURE_BLOB,
+    D3D_BLOB_DEBUG_INFO,
+    D3D_BLOB_LEGACY_SHADER,
+    D3D_BLOB_XNA_PREPASS_SHADER,
+    D3D_BLOB_XNA_SHADER,
+    D3D_BLOB_TEST_ALTERNATE_SHADER = 0x8000,
+    D3D_BLOB_TEST_COMPILE_DETAILS,
+    D3D_BLOB_TEST_COMPILE_PERF
+} D3D_BLOB_PART;
+
+HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T data_size,
+        UINT flags, const char *comments, ID3DBlob **disassembly);
+typedef HRESULT (WINAPI *pD3DDisassemble)(const void *data, SIZE_T data_size,
+        UINT flags, const char *comments, ID3DBlob **disassembly);
+HRESULT WINAPI D3DGetBlobPart(const void *data, SIZE_T data_size, D3D_BLOB_PART part, UINT flags, ID3DBlob **blob);
+HRESULT WINAPI D3DGetInputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
+HRESULT WINAPI D3DGetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
+HRESULT WINAPI D3DGetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
+HRESULT WINAPI D3DGetDebugInfo(const void *data, SIZE_T data_size, ID3DBlob **blob);
+
+HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void **reflector);
+
+HRESULT WINAPI D3DCreateBlob(SIZE_T data_size, ID3DBlob **blob);
+
+HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename,
+        const D3D_SHADER_MACRO *defines, ID3DInclude *include,
+        ID3DBlob **shader, ID3DBlob **error_messages);
+typedef HRESULT (WINAPI *pD3DPreprocess)(const void *data, SIZE_T size, const char *filename,
+        const D3D_SHADER_MACRO *defines, ID3DInclude *include,
+        ID3DBlob **shader, ID3DBlob **error_messages);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h
new file mode 100644
index 0000000..90a2b7f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h
@@ -0,0 +1,529 @@
+/*
+ * Direct3D driver interface
+ * (DirectX 7 version)
+ *
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DHAL_H
+#define __WINE_D3DHAL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <d3d.h>
+
+/*****************************************************************************
+ * device info structures
+ */
+typedef struct _D3DDeviceDesc_V1 {
+  DWORD			dwSize;
+  DWORD			dwFlags;
+  D3DCOLORMODEL		dcmColorModel;
+  DWORD			dwDevCaps;
+  D3DTRANSFORMCAPS	dtcTransformCaps;
+  BOOL			bClipping;
+  D3DLIGHTINGCAPS	dlcLightingCaps;
+  D3DPRIMCAPS		dpcLineCaps;
+  D3DPRIMCAPS		dpcTriCaps;
+  DWORD			dwDeviceRenderBitDepth;
+  DWORD			dwDeviceZBufferBitDepth;
+  DWORD			dwMaxBufferSize;
+  DWORD			dwMaxVertexCount;
+} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;
+
+typedef struct _D3DHAL_GLOBALDRIVERDATA {
+  DWORD			dwSize;
+  D3DDEVICEDESC_V1	hwCaps;
+  DWORD			dwNumVertices;
+  DWORD			dwNumClipVertices;
+  DWORD			dwNumTextureFormats;
+  LPDDSURFACEDESC	lpTextureFormats;
+} D3DHAL_GLOBALDRIVERDATA,*LPD3DHAL_GLOBALDRIVERDATA;
+
+typedef struct _D3DHAL_D3DEXTENDEDCAPS {
+  DWORD			dwSize;
+  /* DirectX 5 */
+  DWORD			dwMinTextureWidth, dwMaxTextureWidth;
+  DWORD			dwMinTextureHeight, dwMaxTextureHeight;
+  DWORD			dwMinStippleWidth, dwMaxStippleWidth;
+  DWORD			dwMinStippleHeight, dwMaxStippleHeight;
+  /* DirectX 6 */
+  DWORD			dwMaxTextureRepeat;
+  DWORD			dwMaxTextureAspectRatio;
+  DWORD			dwMaxAnisotropy;
+  D3DVALUE		dvGuardBandLeft;
+  D3DVALUE		dvGuardBandTop;
+  D3DVALUE		dvGuardBandRight;
+  D3DVALUE		dvGuardBandBottom;
+  D3DVALUE		dvExtentsAdjust;
+  DWORD			dwStencilCaps;
+  DWORD			dwFVFCaps;
+  DWORD			dwTextureOpCaps;
+  WORD			wMaxTextureBlendStages;
+  WORD			wMaxSimultaneousTextures;
+  /* DirectX 7 */
+  DWORD			dwMaxActiveLights;
+  D3DVALUE		dvMaxVertexW;
+  WORD			wMaxUserClipPlanes;
+  WORD			wMaxVertexBlendMatrices;
+  DWORD			dwVertexProcessingCaps;
+  DWORD			dwReserved1;
+  DWORD			dwReserved2;
+  DWORD			dwReserved3;
+  DWORD			dwReserved4;
+} D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS;
+
+/*****************************************************************************
+ * d3d->driver callbacks
+ */
+typedef struct _D3DHAL_CONTEXTCREATEDATA	*LPD3DHAL_CONTEXTCREATEDATA;
+typedef struct _D3DHAL_CONTEXTDESTROYDATA	*LPD3DHAL_CONTEXTDESTROYDATA;
+typedef struct _D3DHAL_CONTEXTDESTROYALLDATA	*LPD3DHAL_CONTEXTDESTROYALLDATA;
+typedef struct _D3DHAL_SCENECAPTUREDATA		*LPD3DHAL_SCENECAPTUREDATA;
+typedef struct _D3DHAL_RENDERSTATEDATA		*LPD3DHAL_RENDERSTATEDATA;
+typedef struct _D3DHAL_RENDERPRIMITIVEDATA	*LPD3DHAL_RENDERPRIMITIVEDATA;
+typedef struct _D3DHAL_TEXTURECREATEDATA	*LPD3DHAL_TEXTURECREATEDATA;
+typedef struct _D3DHAL_TEXTUREDESTROYDATA	*LPD3DHAL_TEXTUREDESTROYDATA;
+typedef struct _D3DHAL_TEXTURESWAPDATA		*LPD3DHAL_TEXTURESWAPDATA;
+typedef struct _D3DHAL_TEXTUREGETSURFDATA	*LPD3DHAL_TEXTUREGETSURFDATA;
+typedef struct _D3DHAL_GETSTATEDATA		*LPD3DHAL_GETSTATEDATA;
+
+typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB)    (LPD3DHAL_CONTEXTCREATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB)   (LPD3DHAL_CONTEXTDESTROYDATA);
+typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA);
+typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB)	    (LPD3DHAL_SCENECAPTUREDATA);
+typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB)	    (LPD3DHAL_RENDERSTATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB)  (LPD3DHAL_RENDERPRIMITIVEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB)    (LPD3DHAL_TEXTURECREATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB)   (LPD3DHAL_TEXTUREDESTROYDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB)	    (LPD3DHAL_TEXTURESWAPDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB)   (LPD3DHAL_TEXTUREGETSURFDATA);
+typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB)	    (LPD3DHAL_GETSTATEDATA);
+
+typedef struct _D3DHAL_CALLBACKS {
+  DWORD				dwSize;
+  LPD3DHAL_CONTEXTCREATECB	ContextCreate;
+  LPD3DHAL_CONTEXTDESTROYCB	ContextDestroy;
+  LPD3DHAL_CONTEXTDESTROYALLCB	ContextDestroyAll;
+  LPD3DHAL_SCENECAPTURECB	SceneCapture;
+  LPVOID			lpReserved10;
+  LPVOID			lpReserved11;
+  LPD3DHAL_RENDERSTATECB	RenderState;
+  LPD3DHAL_RENDERPRIMITIVECB	RenderPrimitive;
+  DWORD				dwReserved;
+  LPD3DHAL_TEXTURECREATECB	TextureCreate;
+  LPD3DHAL_TEXTUREDESTROYCB	TextureDestroy;
+  LPD3DHAL_TEXTURESWAPCB	TextureSwap;
+  LPD3DHAL_TEXTUREGETSURFCB	TextureGetSurf;
+  /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if
+   * all these reserved fields were available? we may never know */
+  LPVOID			lpReserved12;
+  LPVOID			lpReserved13;
+  LPVOID			lpReserved14;
+  LPVOID			lpReserved15;
+  LPVOID			lpReserved16;
+  LPVOID			lpReserved17;
+  LPVOID			lpReserved18;
+  LPVOID			lpReserved19;
+  LPVOID			lpReserved20;
+  LPVOID			lpReserved21;
+  LPD3DHAL_GETSTATECB		GetState;
+  DWORD				dwReserved0;
+  DWORD				dwReserved1;
+  DWORD				dwReserved2;
+  DWORD				dwReserved3;
+  DWORD				dwReserved4;
+  DWORD				dwReserved5;
+  DWORD				dwReserved6;
+  DWORD				dwReserved7;
+  DWORD				dwReserved8;
+  DWORD				dwReserved9;
+} D3DHAL_CALLBACKS,*LPD3DHAL_CALLBACKS;
+
+typedef struct _D3DHAL_SETRENDERTARGETDATA		*LPD3DHAL_SETRENDERTARGETDATA;
+typedef struct _D3DHAL_CLEARDATA			*LPD3DHAL_CLEARDATA;
+typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA		*LPD3DHAL_DRAWONEPRIMITIVEDATA;
+typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA	*LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;
+typedef struct _D3DHAL_DRAWPRIMITIVESDATA		*LPD3DHAL_DRAWPRIMITIVESDATA;
+
+typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB)	  (LPD3DHAL_SETRENDERTARGETDATA);
+typedef DWORD (PASCAL *LPD3DHAL_CLEARCB)		  (LPD3DHAL_CLEARDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB)	  (LPD3DHAL_DRAWONEPRIMITIVEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB)	  (LPD3DHAL_DRAWPRIMITIVESDATA);
+
+typedef struct _D3DHAL_CALLBACKS2 {
+  DWORD					dwSize;
+  DWORD					dwFlags;
+  LPD3DHAL_SETRENDERTARGETCB		SetRenderTarget;
+  LPD3DHAL_CLEARCB			Clear;
+  LPD3DHAL_DRAWONEPRIMITIVECB		DrawOnePrimitive;
+  LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB	DrawOneIndexedPrimitive;
+  LPD3DHAL_DRAWPRIMITIVESCB		DrawPrimitives;
+} D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2;
+
+typedef struct _D3DHAL_CLEAR2DATA			*LPD3DHAL_CLEAR2DATA;
+typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA	*LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;
+typedef struct _D3DHAL_DRAWPRIMITIVES2DATA		*LPD3DHAL_DRAWPRIMITIVES2DATA;
+
+typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB)		  (LPD3DHAL_CLEAR2DATA);
+typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB)	  (LPD3DHAL_DRAWPRIMITIVES2DATA);
+
+typedef struct _D3DHAL_CALLBACKS3 {
+  DWORD					dwSize;
+  DWORD					dwFlags;
+  LPD3DHAL_CLEAR2CB			Clear2;
+  LPVOID				lpvReserved;
+  LPD3DHAL_VALIDATETEXTURESTAGESTATECB	ValidateTextureStageState;
+  LPD3DHAL_DRAWPRIMITIVES2CB		DrawPrimitives2;
+} D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3;
+
+/*****************************************************************************
+ * parameter structures
+ */
+typedef struct _D3DHAL_CONTEXTCREATEDATA {
+  union {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDDGbl; /* pre-DirectX 7 */
+    LPDDRAWI_DIRECTDRAW_LCL	lpDDLcl; /* DirectX 7 */
+  } DUMMYUNIONNAME1;
+  union {
+    LPDIRECTDRAWSURFACE		lpDDS;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSLcl; /* DirectX 7 */
+  } DUMMYUNIONNAME2;
+  union {
+    LPDIRECTDRAWSURFACE		lpDDSZ;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSZLcl; /* DirectX 7 */
+  } DUMMYUNIONNAME3;
+  union {
+    DWORD			dwPID;
+    ULONG_PTR			dwrstates;
+  } DUMMYUNIONNAME4;
+  ULONG_PTR			dwhContext;
+  HRESULT			ddrval;
+} D3DHAL_CONTEXTCREATEDATA;
+
+typedef struct _D3DHAL_CONTEXTDESTROYDATA {
+  ULONG_PTR			dwhContext;
+  HRESULT			ddrval;
+} D3DHAL_CONTEXTDESTROYDATA;
+
+typedef struct _D3DHAL_CONTEXTDESTROYALLDATA {
+  DWORD				dwPID;
+  HRESULT			ddrval;
+} D3DHAL_CONTEXTDESTROYALLDATA;
+
+typedef struct _D3DHAL_SCENECAPTUREDATA {
+  ULONG_PTR			dwhContext;
+  DWORD				dwFlag;
+  HRESULT			ddrval;
+} D3DHAL_SCENECAPTUREDATA;
+
+#define D3DHAL_SCENE_CAPTURE_START	0x00000000
+#define D3DHAL_SCENE_CAPTURE_END	0x00000001
+
+typedef struct _D3DHAL_SETRENDERTARGETDATA {
+  ULONG_PTR			dwhContext;
+  union {
+    LPDIRECTDRAWSURFACE		lpDDS;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSLcl;
+  } DUMMYUNIONNAME1;
+  union {
+    LPDIRECTDRAWSURFACE		lpDDSZ;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSZLcl;
+  } DUMMYUNIONNAME2;
+  HRESULT			ddrval;
+} D3DHAL_SETRENDERTARGETDATA;
+
+typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
+  ULONG_PTR			dwhContext;
+  DWORD				dwFlags;
+  DWORD				dwVertexType;
+  LPDDRAWI_DDRAWSURFACE_LCL	lpDDCommands;
+  DWORD				dwCommandOffset;
+  DWORD				dwCommandLength;
+  union {
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDVertex;
+    LPVOID			lpVertices;
+  } DUMMYUNIONNAME1;
+  DWORD				dwVertexOffset;
+  DWORD				dwVertexLength;
+  DWORD				dwReqVertexBufSize;
+  DWORD				dwReqCommandBufSize;
+  LPDWORD			lpdwRStates;
+  union {
+    DWORD			dwVertexSize;
+    HRESULT			ddrval;
+  } DUMMYUNIONNAME2;
+  DWORD				dwErrorOffset;
+} D3DHAL_DRAWPRIMITIVES2DATA;
+
+#define D3DHALDP2_USERMEMVERTICES	0x00000001
+#define D3DHALDP2_EXECUTEBUFFER		0x00000002
+#define D3DHALDP2_SWAPVERTEXBUFFER	0x00000004
+#define D3DHALDP2_SWAPCOMMANDBUFFER	0x00000008
+#define D3DHALDP2_REQVERTEXBUFSIZE	0x00000010
+#define D3DHALDP2_REQCOMMANDBUFSIZE	0x00000020
+#define D3DHALDP2_VIDMEMVERTEXBUF	0x00000040
+#define D3DHALDP2_VIDMEMCOMMANDBUF	0x00000080
+
+/*****************************************************************************
+ * DrawPrimitives2 command structures
+ */
+typedef struct _D3DHAL_DP2COMMAND {
+  BYTE bCommand;
+  BYTE bReserved;
+  union {
+    WORD wPrimitiveCount;
+    WORD wStateCount;
+  } DUMMYUNIONNAME;
+} D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND;
+
+typedef enum _D3DHAL_DP2OPERATION {
+  D3DDP2OP_POINTS		= 1,
+  D3DDP2OP_INDEXEDLINELIST	= 2,
+  D3DDP2OP_INDEXEDTRIANGLELIST	= 3,
+  D3DDP2OP_RENDERSTATE		= 8,
+  D3DDP2OP_LINELIST		= 15,
+  D3DDP2OP_LINESTRIP		= 16,
+  D3DDP2OP_INDEXEDLINESTRIP	= 17,
+  D3DDP2OP_TRIANGLELIST		= 18,
+  D3DDP2OP_TRIANGLESTRIP	= 19,
+  D3DDP2OP_INDEXEDTRIANGLESTRIP	= 20,
+  D3DDP2OP_TRIANGLEFAN		= 21,
+  D3DDP2OP_INDEXEDTRIANGLEFAN	= 22,
+  D3DDP2OP_TRIANGLEFAN_IMM	= 23,
+  D3DDP2OP_LINELIST_IMM		= 24,
+  D3DDP2OP_TEXTURESTAGESTATE	= 25,
+  D3DDP2OP_INDEXEDTRIANGLELIST2	= 26,
+  D3DDP2OP_INDEXEDLINELIST2	= 27,
+  D3DDP2OP_VIEWPORTINFO		= 28,
+  D3DDP2OP_WINFO		= 29,
+  /* pre-DirectX 7 interfaces */
+  D3DDP2OP_SETPALETTE		= 30,
+  D3DDP2OP_UPDATEPALETTE	= 31,
+  /* DirectX 7 interfaces */
+  D3DDP2OP_ZRANGE		= 32,
+  D3DDP2OP_SETMATERIAL		= 33,
+  D3DDP2OP_SETLIGHT		= 34,
+  D3DDP2OP_CREATELIGHT		= 35,
+  D3DDP2OP_SETTRANSFORM		= 36,
+  D3DDP2OP_TEXBLT		= 38,
+  D3DDP2OP_STATESET		= 39,
+  D3DDP2OP_SETPRIORITY		= 40,
+  /* all interfaces */
+  D3DDP2OP_SETRENDERTARGET	= 41,
+  D3DDP2OP_CLEAR		= 42,
+  /* DirectX 7 interfaces */
+  D3DDP2OP_SETTEXLOD		= 43,
+  D3DPP2OP_SETCLIPPLANE		= 44
+} D3DHAL_DP2OPERATION;
+
+/* point primitives */
+
+typedef struct _D3DHAL_POINTS {
+  WORD wCount;
+  WORD wVStart;
+} D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS;
+
+/* line primitives */
+
+typedef struct _D3DHAL_DP2STARTVERTEX {
+  WORD wVStart;
+} D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX;
+
+typedef struct _D3DHAL_DP2LINELIST {
+  WORD wVStart;
+} D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST;
+
+typedef struct _D3DHAL_DP2INDEXEDLINELIST {
+  WORD wV1;
+  WORD wV2;
+} D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST;
+
+typedef struct _D3DHAL_DP2LINESTRIP {
+  WORD wVStart;
+} D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP;
+
+typedef struct _D3DHAL_DP2INDEXEDLINESTRIP {
+  WORD wV[2];
+} D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP;
+
+/* triangle primitives */
+
+typedef struct _D3DHAL_DP2TRIANGLELIST {
+  WORD wVStart;
+} D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST {
+  WORD wV1;
+  WORD wV2;
+  WORD wV3;
+  WORD wFlags;
+} D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 {
+  WORD wV1;
+  WORD wV2;
+  WORD wV3;
+} D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2;
+
+typedef struct _D3DHAL_DP2TRIANGLESTRIP {
+  WORD wVStart;
+} D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP {
+  WORD wV[3];
+} D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;
+
+typedef struct _D3DHAL_DP2TRIANGLEFAN {
+  WORD wVStart;
+} D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN {
+  WORD wV[3];
+} D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN;
+
+typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM {
+  DWORD dwEdgeFlags;
+} D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM;
+
+/* render states */
+typedef struct _D3DHAL_DP2RENDERSTATE {
+  D3DRENDERSTATETYPE	RenderState;
+  union {
+    D3DVALUE dvState;
+    DWORD dwState;
+  } DUMMYUNIONNAME;
+} D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE;
+
+typedef struct _D3DHAL_DP2TEXTURESTAGESTATE {
+  WORD	wStage;
+  WORD	TSState;
+  DWORD dwValue;
+} D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE;
+
+#define D3DTSS_TEXTUREMAP 0
+
+typedef struct _D3DHAL_DP2VIEWPORTINFO {
+  DWORD dwX;
+  DWORD dwY;
+  DWORD dwWidth;
+  DWORD dwHeight;
+} D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO;
+
+typedef struct _D3DHAL_DP2WINFO {
+  D3DVALUE dwWNear;
+  D3DVALUE dwWFar;
+} D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO;
+
+typedef struct _D3DHAL_DP2SETPALETTE {
+  DWORD dwPaletteHandle;
+  DWORD dwPaletteFlags;
+  DWORD dwSurfaceHandle;
+} D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE;
+
+typedef struct _D3DHAL_DP2UPDATEPALETTE {
+  DWORD dwPaletteHandle;
+  WORD	wStartIndex;
+  WORD	wNumEntries;
+} D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE;
+
+typedef struct _D3DHAL_DP2ZRANGE {
+  D3DVALUE dvMinZ;
+  D3DVALUE dvMaxZ;
+} D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE;
+
+typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL;
+
+typedef struct _D3DHAL_DP2SETLIGHT {
+  DWORD dwIndex;
+  DWORD dwDataType;
+} D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT;
+
+#define D3DHAL_SETLIGHT_ENABLE	0
+#define D3DHAL_SETLIGHT_DISABLE	1
+#define D3DHAL_SETLIGHT_DATA	2
+
+typedef struct _D3DHAL_DP2CREATELIGHT {
+  DWORD dwIndex;
+} D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT;
+
+typedef struct _D3DHAL_DP2SETTRANSFORM {
+  D3DTRANSFORMSTATETYPE	xfrmType;
+  D3DMATRIX		matrix;
+} D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM;
+
+typedef struct _D3DHAL_DP2TEXBLT {
+  DWORD dwDDDestSurface;
+  DWORD dwDDSrcSurface;
+  POINT pDest;
+  RECTL rSrc;
+  DWORD dwFlags;
+} D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT;
+
+typedef struct _D3DHAL_DP2STATESET {
+  DWORD               dwOperation;
+  DWORD               dwParam;
+  D3DSTATEBLOCKTYPE   sbType;
+} D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET;
+
+#define D3DHAL_STATESETBEGIN	0
+#define D3DHAL_STATESETEND	1
+#define D3DHAL_STATESETDELETE	2
+#define D3DHAL_STATESETEXECUTE	3
+#define D3DHAL_STATESETCAPTURE	4
+
+typedef struct _D3DHAL_DP2SETPRIORITY {
+  DWORD dwDDSurface;
+  DWORD dwPriority;
+} D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY;
+
+typedef struct _D3DHAL_DP2SETRENDERTARGET {
+  DWORD hRenderTarget;
+  DWORD hZBuffer;
+} D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET;
+
+typedef struct _D3DHAL_DP2CLEAR {
+  DWORD		dwFlags;
+  DWORD		dwFillColor;
+  D3DVALUE	dvFillDepth;
+  DWORD		dwFillStencil;
+  RECT		Rects[1];
+} D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR;
+
+typedef struct _D3DHAL_DP2SETTEXLOD {
+  DWORD dwDDSurface;
+  DWORD dwLOD;
+} D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_D3DHAL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h
new file mode 100644
index 0000000..0045fa9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h
@@ -0,0 +1,533 @@
+/*
+ * Copyright (C) 2005 Peter Berg Larsen
+ * Copyright (C) 2010 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRM_H__
+#define __D3DRM_H__
+
+#include <ddraw.h>
+
+typedef struct IDirect3DRM *LPDIRECT3DRM, **LPLPDIRECT3DRM;
+
+#include <d3drmobj.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Direct3DRM Object CLSID */
+DEFINE_GUID(CLSID_CDirect3DRM,              0x4516ec41, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+
+/* Direct3DRM Interface GUIDs */
+DEFINE_GUID(IID_IDirect3DRM,                0x2bc49361, 0x8327, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRM2,               0x4516ecc8, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRM3,               0x4516ec83, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+
+typedef struct IDirect3DRM2 *LPDIRECT3DRM2, **LPLPDIRECT3DRM2;
+typedef struct IDirect3DRM3 *LPDIRECT3DRM3, **LPLPDIRECT3DRM3;
+
+HRESULT WINAPI Direct3DRMCreate(struct IDirect3DRM **d3drm);
+
+/*****************************************************************************
+ * IDirect3DRMObject interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRM
+DECLARE_INTERFACE_(IDirect3DRM,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRM methods ***/
+    STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame **frame) PURE;
+    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+    STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder **mesh_builder) PURE;
+    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+    STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE;
+    STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE;
+    STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;
+    STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,
+            IDirect3DRMLight **light) PURE;
+    STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE;
+    STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice **device) PURE;
+    STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
+            IDirectDrawSurface *surface, IDirect3DRMDevice **device) PURE;
+    STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device,
+            IDirect3DRMDevice **device) PURE;
+    STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
+            int width, int height, IDirect3DRMDevice **device) PURE;
+    STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,
+            IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light,
+            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
+            IDirect3DRMVisual **shadow) PURE;
+    STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera,
+            DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE;
+    STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
+        D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov,
+        D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE;
+    STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;
+    STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(LoadTextureFromResource)(THIS_ HRSRC resource, IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;
+    STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;
+    STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;
+    STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;
+    STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;
+    STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;
+    STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,
+            D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,
+            IDirect3DRMFrame *parent_frame) PURE;
+    STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRM_QueryInterface(p,a,b)                         (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRM_AddRef(p)                                     (p)->lpVtbl->AddRef(p)
+#define IDirect3DRM_Release(p)                                    (p)->lpVtbl->Release(p)
+/*** IDirect3DRM methods ***/
+#define IDirect3DRM_CreateObject(p,a,b,c,d)                       (p)->lpVtbl->CreateObject(p,a,b,d)
+#define IDirect3DRM_CreateFrame(p,a,b)                            (p)->lpVtbl->CreateFrame(p,a,b)
+#define IDirect3DRM_CreateMesh(p,a)                               (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRM_CreateMeshBuilder(p,a)                        (p)->lpVtbl->CreateMeshBuilder(p,a)
+#define IDirect3DRM_CreateFace(p,a)                               (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRM_CreateAnimation(p,a)                          (p)->lpVtbl->CreateAnimation(p,a)
+#define IDirect3DRM_CreateAnimationSet(p,a)                       (p)->lpVtbl->CreateAnimationSet(p,a)
+#define IDirect3DRM_CreateTexture(p,a,b)                          (p)->lpVtbl->CreateTexture(p,a,b)
+#define IDirect3DRM_CreateLight(p,a,b,c)                          (p)->lpVtbl->CreateLight(p,a,b,c)
+#define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
+#define IDirect3DRM_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3DRM_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d)            (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
+#define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
+#define IDirect3DRM_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
+#define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)
+#define IDirect3DRM_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM_CreateUserVisual(p,a,b,c)                     (p)->lpVtbl->CreateUserVisual(p,a,b,c)
+#define IDirect3DRM_LoadTexture(p,a,b)                            (p)->lpVtbl->LoadTexture(p,a,b)
+#define IDirect3DRM_LoadTextureFromResource(p,a,b)                (p)->lpVtbl->LoadTextureFromResource(p,a,b)
+#define IDirect3DRM_SetSearchPath(p,a)                            (p)->lpVtbl->SetSearchPath(p,a)
+#define IDirect3DRM_AddSearchPath(p,a)                            (p)->lpVtbl->AddSearchPath(p,a)
+#define IDirect3DRM_GetSearchPath(p,a,b)                          (p)->lpVtbl->GetSearchPath(p,a,b)
+#define IDirect3DRM_SetDefaultTextureColors(p,a)                  (p)->lpVtbl->SetDefaultTextureColors(p,a)
+#define IDirect3DRM_SetDefaultTextureShades(p,a)                  (p)->lpVtbl->SetDefaultTextureShades(p,a)
+#define IDirect3DRM_GetDevices(p,a)                               (p)->lpVtbl->GetDevices(p,a)
+#define IDirect3DRM_GetNamedObject(p,a,b)                         (p)->lpVtbl->GetNamedObject(p,a,b)
+#define IDirect3DRM_EnumerateObjects(p,a,b)                       (p)->lpVtbl->EnumerateObjects(p,a,b)
+#define IDirect3DRM_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM_Tick(p,a)                                     (p)->lpVtbl->Tick(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRM_QueryInterface(p,a,b)                         (p)->QueryInterface(a,b)
+#define IDirect3DRM_AddRef(p)                                     (p)->AddRef()
+#define IDirect3DRM_Release(p)                                    (p)->Release()
+/*** IDirect3DRM methods ***/
+#define IDirect3DRM_CreateObject(p,a,b,c,d)                       (p)->CreateObject(a,b,d)
+#define IDirect3DRM_CreateFrame(p,a,b)                            (p)->CreateFrame(a,b)
+#define IDirect3DRM_CreateMesh(p,a)                               (p)->CreateMesh(a)
+#define IDirect3DRM_CreateMeshBuilder(p,a)                        (p)->CreateMeshBuilder(a)
+#define IDirect3DRM_CreateFace(p,a)                               (p)->CreateFace(a)
+#define IDirect3DRM_CreateAnimation(p,a)                          (p)->CreateAnimation(a)
+#define IDirect3DRM_CreateAnimationSet(p,a)                       (p)->CreateAnimationSet(a)
+#define IDirect3DRM_CreateTexture(p,a,b)                          (p)->CreateTexture(a,b)
+#define IDirect3DRM_CreateLight(p,a,b,c)                          (p)->CreateLight(a,b,c)
+#define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)
+#define IDirect3DRM_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)
+#define IDirect3DRM_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)
+#define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d)            (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)
+#define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)
+#define IDirect3DRM_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)
+#define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->CreateShadow(a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g)               (p)->CreateViewport(a,b,c,d,e,f,g)
+#define IDirect3DRM_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM_CreateUserVisual(p,a,b,c)                     (p)->CreateUserVisual(a,b,c)
+#define IDirect3DRM_LoadTexture(p,a,b)                            (p)->LoadTexture(a,b)
+#define IDirect3DRM_LoadTextureFromResource(p,a,b)                (p)->LoadTextureFromResource(a,b)
+#define IDirect3DRM_SetSearchPath(p,a)                            (p)->SetSearchPath(a)
+#define IDirect3DRM_AddSearchPath(p,a)                            (p)->AddSearchPath(a)
+#define IDirect3DRM_GetSearchPath(p,a,b)                          (p)->GetSearchPath(a,b)
+#define IDirect3DRM_SetDefaultTextureColors(p,a)                  (p)->SetDefaultTextureColors(a)
+#define IDirect3DRM_SetDefaultTextureShades(p,a)                  (p)->SetDefaultTextureShades(a)
+#define IDirect3DRM_GetDevices(p,a)                               (p)->GetDevices(a)
+#define IDirect3DRM_GetNamedObject(p,a,b)                         (p)->GetNamedObject(a,b)
+#define IDirect3DRM_EnumerateObjects(p,a,b)                       (p)->EnumerateObjects(a,b)
+#define IDirect3DRM_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->Load(a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM_Tick(p,a)                                     (p)->Tick(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRM2 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRM2
+DECLARE_INTERFACE_(IDirect3DRM2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRM2 methods ***/
+    STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame2 **frame) PURE;
+    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+    STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder2 **mesh_builder) PURE;
+    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+    STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE;
+    STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE;
+    STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture2 **texture) PURE;
+    STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;
+    STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,
+            IDirect3DRMLight **light) PURE;
+    STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE;
+    STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice2 **device) PURE;
+    STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
+            IDirectDrawSurface *surface, IDirect3DRMDevice2 **device) PURE;
+    STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,
+            IDirect3DRMDevice2 **device) PURE;
+    STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
+            int width, int height, IDirect3DRMDevice2 **device) PURE;
+    STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,
+            IDirect3DRMTexture2 **texture) PURE;
+    STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light,
+            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
+            IDirect3DRMVisual **shadow) PURE;
+    STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera,
+            DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE;
+    STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
+        D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov,
+        D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE;
+    STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;
+    STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture2 **texture) PURE;
+    STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name,
+            const char *resource_type, IDirect3DRMTexture2 **texture) PURE;
+    STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;
+    STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;
+    STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;
+    STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;
+    STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;
+    STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;
+    STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,
+            D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,
+            IDirect3DRMFrame *parent_frame) PURE;
+    STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRM2_QueryInterface(p,a,b)                         (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRM2_AddRef(p)                                     (p)->lpVtbl->AddRef(p)
+#define IDirect3DRM2_Release(p)                                    (p)->lpVtbl->Release(p)
+/*** IDirect3DRM2 methods ***/
+#define IDirect3DRM2_CreateObject(p,a,b,c,d)                       (p)->lpVtbl->CreateObject(p,a,b,d)
+#define IDirect3DRM2_CreateFrame(p,a,b)                            (p)->lpVtbl->CreateFrame(p,a,b)
+#define IDirect3DRM2_CreateMesh(p,a)                               (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRM2_CreateMeshBuilder(p,a)                        (p)->lpVtbl->CreateMeshBuilder(p,a)
+#define IDirect3DRM2_CreateFace(p,a)                               (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRM2_CreateAnimation(p,a)                          (p)->lpVtbl->CreateAnimation(p,a)
+#define IDirect3DRM2_CreateAnimationSet(p,a)                       (p)->lpVtbl->CreateAnimationSet(p,a)
+#define IDirect3DRM2_CreateTexture(p,a,b)                          (p)->lpVtbl->CreateTexture(p,a,b)
+#define IDirect3DRM2_CreateLight(p,a,b,c)                          (p)->lpVtbl->CreateLight(p,a,b,c)
+#define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
+#define IDirect3DRM2_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3DRM2_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d)            (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
+#define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
+#define IDirect3DRM2_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
+#define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)
+#define IDirect3DRM2_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM2_CreateUserVisual(p,a,b,c)                     (p)->lpVtbl->CreateUserVisual(p,a,b,c)
+#define IDirect3DRM2_LoadTexture(p,a,b)                            (p)->lpVtbl->LoadTexture(p,a,b)
+#define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d)            (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d)
+#define IDirect3DRM2_SetSearchPath(p,a)                            (p)->lpVtbl->SetSearchPath(p,a)
+#define IDirect3DRM2_AddSearchPath(p,a)                            (p)->lpVtbl->AddSearchPath(p,a)
+#define IDirect3DRM2_GetSearchPath(p,a,b)                          (p)->lpVtbl->GetSearchPath(p,a,b)
+#define IDirect3DRM2_SetDefaultTextureColors(p,a)                  (p)->lpVtbl->SetDefaultTextureColors(p,a)
+#define IDirect3DRM2_SetDefaultTextureShades(p,a)                  (p)->lpVtbl->SetDefaultTextureShades(p,a)
+#define IDirect3DRM2_GetDevices(p,a)                               (p)->lpVtbl->GetDevices(p,a)
+#define IDirect3DRM2_GetNamedObject(p,a,b)                         (p)->lpVtbl->GetNamedObject(p,a,b)
+#define IDirect3DRM2_EnumerateObjects(p,a,b)                       (p)->lpVtbl->EnumerateObjects(p,a,b)
+#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM2_Tick(p,a)                                     (p)->lpVtbl->Tick(p,a)
+#define IDirect3DRM2_CreateProgressiveMesh(p,a)                    (p)->lpVtbl->CreateProgressiveMesh(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRM2_QueryInterface(p,a,b)                         (p)->QueryInterface(a,b)
+#define IDirect3DRM2_AddRef(p)                                     (p)->AddRef()
+#define IDirect3DRM2_Release(p)                                    (p)->Release()
+/*** IDirect3DRM2 methods ***/
+#define IDirect3DRM2_CreateObject(p,a,b,c,d)                       (p)->CreateObject(a,b,d)
+#define IDirect3DRM2_CreateFrame(p,a,b)                            (p)->CreateFrame(a,b)
+#define IDirect3DRM2_CreateMesh(p,a)                               (p)->CreateMesh(a)
+#define IDirect3DRM2_CreateMeshBuilder(p,a)                        (p)->CreateMeshBuilder(a)
+#define IDirect3DRM2_CreateFace(p,a)                               (p)->CreateFace(a)
+#define IDirect3DRM2_CreateAnimation(p,a)                          (p)->CreateAnimation(a)
+#define IDirect3DRM2_CreateAnimationSet(p,a)                       (p)->CreateAnimationSet(a)
+#define IDirect3DRM2_CreateTexture(p,a,b)                          (p)->CreateTexture(a,b)
+#define IDirect3DRM2_CreateLight(p,a,b,c)                          (p)->CreateLight(a,b,c)
+#define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)
+#define IDirect3DRM2_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)
+#define IDirect3DRM2_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)
+#define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d)            (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)
+#define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)
+#define IDirect3DRM2_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)
+#define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->CreateShadow(a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g)               (p)->CreateViewport(a,b,c,d,e,f,g)
+#define IDirect3DRM2_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM2_CreateUserVisual(p,a,b,c)                     (p)->CreateUserVisual(a,b,c)
+#define IDirect3DRM2_LoadTexture(p,a,b)                            (p)->LoadTexture(a,b)
+#define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d)            (p)->LoadTextureFromResource(a,b,c,d)
+#define IDirect3DRM2_SetSearchPath(p,a)                            (p)->SetSearchPath(a)
+#define IDirect3DRM2_AddSearchPath(p,a)                            (p)->AddSearchPath(a)
+#define IDirect3DRM2_GetSearchPath(p,a,b)                          (p)->GetSearchPath(a,b)
+#define IDirect3DRM2_SetDefaultTextureColors(p,a)                  (p)->SetDefaultTextureColors(a)
+#define IDirect3DRM2_SetDefaultTextureShades(p,a)                  (p)->SetDefaultTextureShades(a)
+#define IDirect3DRM2_GetDevices(p,a)                               (p)->GetDevices(a)
+#define IDirect3DRM2_GetNamedObject(p,a,b)                         (p)->GetNamedObject(a,b)
+#define IDirect3DRM2_EnumerateObjects(p,a,b)                       (p)->EnumerateObjects(a,b)
+#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->Load(a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM2_Tick(p,a)                                     (p)->Tick(a)
+#define IDirect3DRM2_CreateProgressiveMesh(p,a)                    (p)->CreateProgressiveMesh(p,a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRM3 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRM3
+DECLARE_INTERFACE_(IDirect3DRM3,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRM2 methods ***/
+    STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame) PURE;
+    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+    STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 **mesh_builder) PURE;
+    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE;
+    STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation2 **animation) PURE;
+    STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet2 **set) PURE;
+    STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture3 **texture) PURE;
+    STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;
+    STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,
+            IDirect3DRMLight **light) PURE;
+    STDMETHOD(CreateMaterial)(THIS_ D3DVALUE, IDirect3DRMMaterial2 **material) PURE;
+    STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice3 **device) PURE;
+    STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
+            IDirectDrawSurface *surface, IDirect3DRMDevice3 **device) PURE;
+    STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,
+            IDirect3DRMDevice3 **device) PURE;
+    STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
+            int width, int height, IDirect3DRMDevice3 **device) PURE;
+    STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,
+            IDirect3DRMTexture3 **texture) PURE;
+    STDMETHOD(CreateShadow)(THIS_ IUnknown *object, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz,
+            D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow) PURE;
+    STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera,
+            DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport) PURE;
+    STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame3 *reference,
+            D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
+            IDirect3DRMWrap **wrap) PURE;
+    STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;
+    STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture3 **texture) PURE;
+    STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name,
+            const char *resource_type, IDirect3DRMTexture3 **texture) PURE;
+    STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;
+    STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;
+    STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;
+    STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;
+    STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;
+    STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;
+    STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,
+            D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,
+            IDirect3DRMFrame3 *parent_frame) PURE;
+    STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;
+    STDMETHOD(RegisterClient)(THIS_ REFGUID guid, DWORD *id) PURE;
+    STDMETHOD(UnregisterClient)(THIS_ REFGUID rguid) PURE;
+    STDMETHOD(CreateClippedVisual)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual) PURE;
+    STDMETHOD(SetOptions)(THIS_ DWORD) PURE;
+    STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRM3_QueryInterface(p,a,b)                         (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRM3_AddRef(p)                                     (p)->lpVtbl->AddRef(p)
+#define IDirect3DRM3_Release(p)                                    (p)->lpVtbl->Release(p)
+/*** IDirect3DRM3 methods ***/
+#define IDirect3DRM3_CreateObject(p,a,b,c,d)                       (p)->lpVtbl->CreateObject(p,a,b,d)
+#define IDirect3DRM3_CreateFrame(p,a,b)                            (p)->lpVtbl->CreateFrame(p,a,b)
+#define IDirect3DRM3_CreateMesh(p,a)                               (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRM3_CreateMeshBuilder(p,a)                        (p)->lpVtbl->CreateMeshBuilder(p,a)
+#define IDirect3DRM3_CreateFace(p,a)                               (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRM3_CreateAnimation(p,a)                          (p)->lpVtbl->CreateAnimation(p,a)
+#define IDirect3DRM3_CreateAnimationSet(p,a)                       (p)->lpVtbl->CreateAnimationSet(p,a)
+#define IDirect3DRM3_CreateTexture(p,a,b)                          (p)->lpVtbl->CreateTexture(p,a,b)
+#define IDirect3DRM3_CreateLight(p,a,b,c)                          (p)->lpVtbl->CreateLight(p,a,b,c)
+#define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
+#define IDirect3DRM3_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3DRM3_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d)            (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
+#define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
+#define IDirect3DRM3_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
+#define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)
+#define IDirect3DRM3_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM3_CreateUserVisual(p,a,b,c)                     (p)->lpVtbl->CreateUserVisual(p,a,b,c)
+#define IDirect3DRM3_LoadTexture(p,a,b)                            (p)->lpVtbl->LoadTexture(p,a,b)
+#define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d)            (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d)
+#define IDirect3DRM3_SetSearchPath(p,a)                            (p)->lpVtbl->SetSearchPath(p,a)
+#define IDirect3DRM3_AddSearchPath(p,a)                            (p)->lpVtbl->AddSearchPath(p,a)
+#define IDirect3DRM3_GetSearchPath(p,a,b)                          (p)->lpVtbl->GetSearchPath(p,a,b)
+#define IDirect3DRM3_SetDefaultTextureColors(p,a)                  (p)->lpVtbl->SetDefaultTextureColors(p,a)
+#define IDirect3DRM3_SetDefaultTextureShades(p,a)                  (p)->lpVtbl->SetDefaultTextureShades(p,a)
+#define IDirect3DRM3_GetDevices(p,a)                               (p)->lpVtbl->GetDevices(p,a)
+#define IDirect3DRM3_GetNamedObject(p,a,b)                         (p)->lpVtbl->GetNamedObject(p,a,b)
+#define IDirect3DRM3_EnumerateObjects(p,a,b)                       (p)->lpVtbl->EnumerateObjects(p,a,b)
+#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM3_Tick(p,a)                                     (p)->lpVtbl->Tick(p,a)
+#define IDirect3DRM3_CreateProgressiveMesh(p,a)                    (p)->lpVtbl->CreateProgressiveMesh(p,a)
+#define IDirect3DRM3_RegisterClient(p,a,b)                         (p)->lpVtbl->RegisterClient(p,a,b)
+#define IDirect3DRM3_UnregisterClient(p,a)                         (p)->lpVtbl->UnregisterClient(p,a)
+#define IDirect3DRM3_CreateClippedVisual(p,ab)                     (p)->lpVtbl->CreateClippedVisual(p,a,b)
+#define IDirect3DRM3_SetOptions(p,a)                               (p)->lpVtbl->SetOptions(p,a)
+#define IDirect3DRM3_GetOptions(p,a)                               (p)->lpVtbl->GetOptions(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRM3_QueryInterface(p,a,b)                         (p)->QueryInterface(a,b)
+#define IDirect3DRM3_AddRef(p)                                     (p)->AddRef()
+#define IDirect3DRM3_Release(p)                                    (p)->Release()
+/*** IDirect3DRM3 methods ***/
+#define IDirect3DRM3_CreateObject(p,a,b,c,d)                       (p)->CreateObject(a,b,d)
+#define IDirect3DRM3_CreateFrame(p,a,b)                            (p)->CreateFrame(a,b)
+#define IDirect3DRM3_CreateMesh(p,a)                               (p)->CreateMesh(a)
+#define IDirect3DRM3_CreateMeshBuilder(p,a)                        (p)->CreateMeshBuilder(a)
+#define IDirect3DRM3_CreateFace(p,a)                               (p)->CreateFace(a)
+#define IDirect3DRM3_CreateAnimation(p,a)                          (p)->CreateAnimation(a)
+#define IDirect3DRM3_CreateAnimationSet(p,a)                       (p)->CreateAnimationSet(a)
+#define IDirect3DRM3_CreateTexture(p,a,b)                          (p)->CreateTexture(a,b)
+#define IDirect3DRM3_CreateLight(p,a,b,c)                          (p)->CreateLight(a,b,c)
+#define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)
+#define IDirect3DRM3_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)
+#define IDirect3DRM3_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)
+#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d)            (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)
+#define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)
+#define IDirect3DRM3_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)
+#define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->CreateShadow(a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g)               (p)->CreateViewport(a,b,c,d,e,f,g)
+#define IDirect3DRM3_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM3_CreateUserVisual(p,a,b,c)                     (p)->CreateUserVisual(a,b,c)
+#define IDirect3DRM3_LoadTexture(p,a,b)                            (p)->LoadTexture(a,b)
+#define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d)            (p)->LoadTextureFromResource(a,b,c,d)
+#define IDirect3DRM3_SetSearchPath(p,a)                            (p)->SetSearchPath(a)
+#define IDirect3DRM3_AddSearchPath(p,a)                            (p)->AddSearchPath(a)
+#define IDirect3DRM3_GetSearchPath(p,a,b)                          (p)->GetSearchPath(a,b)
+#define IDirect3DRM3_SetDefaultTextureColors(p,a)                  (p)->SetDefaultTextureColors(a)
+#define IDirect3DRM3_SetDefaultTextureShades(p,a)                  (p)->SetDefaultTextureShades(a)
+#define IDirect3DRM3_GetDevices(p,a)                               (p)->GetDevices(a)
+#define IDirect3DRM3_GetNamedObject(p,a,b)                         (p)->GetNamedObject(a,b)
+#define IDirect3DRM3_EnumerateObjects(p,a,b)                       (p)->EnumerateObjects(a,b)
+#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->Load(a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM3_Tick(p,a)                                     (p)->Tick(a)
+#define IDirect3DRM3_CreateProgressiveMesh(p,a)                    (p)->CreateProgressiveMesh(p,a)
+#define IDirect3DRM3_RegisterClient(p,a,b)                         (p)->RegisterClient(p,a,b)
+#define IDirect3DRM3_UnregisterClient(p,a)                         (p)->UnregisterClient(p,a)
+#define IDirect3DRM3_CreateClippedVisual(p,ab)                     (p)->CreateClippedVisual(p,a,b)
+#define IDirect3DRM3_SetOptions(p,a)                               (p)->SetOptions(p,a)
+#define IDirect3DRM3_GetOptions(p,a)                               (p)->GetOptions(p,a)
+#endif
+
+#define D3DRM_OK                        DD_OK
+#define D3DRMERR_BADOBJECT              MAKE_DDHRESULT(781)
+#define D3DRMERR_BADTYPE                MAKE_DDHRESULT(782)
+#define D3DRMERR_BADALLOC               MAKE_DDHRESULT(783)
+#define D3DRMERR_FACEUSED               MAKE_DDHRESULT(784)
+#define D3DRMERR_NOTFOUND               MAKE_DDHRESULT(785)
+#define D3DRMERR_NOTDONEYET             MAKE_DDHRESULT(786)
+#define D3DRMERR_FILENOTFOUND           MAKE_DDHRESULT(787)
+#define D3DRMERR_BADFILE                MAKE_DDHRESULT(788)
+#define D3DRMERR_BADDEVICE              MAKE_DDHRESULT(789)
+#define D3DRMERR_BADVALUE               MAKE_DDHRESULT(790)
+#define D3DRMERR_BADMAJORVERSION        MAKE_DDHRESULT(791)
+#define D3DRMERR_BADMINORVERSION        MAKE_DDHRESULT(792)
+#define D3DRMERR_UNABLETOEXECUTE        MAKE_DDHRESULT(793)
+#define D3DRMERR_LIBRARYNOTFOUND        MAKE_DDHRESULT(794)
+#define D3DRMERR_INVALIDLIBRARY         MAKE_DDHRESULT(795)
+#define D3DRMERR_PENDING                MAKE_DDHRESULT(796)
+#define D3DRMERR_NOTENOUGHDATA          MAKE_DDHRESULT(797)
+#define D3DRMERR_REQUESTTOOLARGE        MAKE_DDHRESULT(798)
+#define D3DRMERR_REQUESTTOOSMALL        MAKE_DDHRESULT(799)
+#define D3DRMERR_CONNECTIONLOST         MAKE_DDHRESULT(800)
+#define D3DRMERR_LOADABORTED            MAKE_DDHRESULT(801)
+#define D3DRMERR_NOINTERNET             MAKE_DDHRESULT(802)
+#define D3DRMERR_BADCACHEFILE           MAKE_DDHRESULT(803)
+#define D3DRMERR_BOXNOTSET              MAKE_DDHRESULT(804)
+#define D3DRMERR_BADPMDATA              MAKE_DDHRESULT(805)
+#define D3DRMERR_CLIENTNOTREGISTERED    MAKE_DDHRESULT(806)
+#define D3DRMERR_NOTCREATEDFROMDDS      MAKE_DDHRESULT(807)
+#define D3DRMERR_NOSUCHKEY              MAKE_DDHRESULT(808)
+#define D3DRMERR_INCOMPATABLEKEY        MAKE_DDHRESULT(809)
+#define D3DRMERR_ELEMENTINUSE           MAKE_DDHRESULT(810)
+#define D3DRMERR_TEXTUREFORMATNOTFOUND  MAKE_DDHRESULT(811)
+#define D3DRMERR_NOTAGGREGATED          MAKE_DDHRESULT(812)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DRM_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h
new file mode 100644
index 0000000..ec94081
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h
@@ -0,0 +1,475 @@
+/*
+ * Copyright 2007,2010 Vijay Kiran Kamuju
+ * Copyright 2007 David ADAM
+ * Copyright 2010 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRMDEFS_H__
+#define __D3DRMDEFS_H__
+
+#include <stddef.h>
+#include <d3dtypes.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+typedef struct _D3DRMVECTOR4D
+{
+    D3DVALUE x;
+    D3DVALUE y;
+    D3DVALUE z;
+    D3DVALUE w;
+} D3DRMVECTOR4D, *LPD3DRMVECTOR4D;
+
+typedef D3DVALUE D3DRMMATRIX4D[4][4];
+
+typedef struct _D3DRMQUATERNION {
+    D3DVALUE s;
+    D3DVECTOR v;
+} D3DRMQUATERNION, *LPD3DRMQUATERNION;
+
+typedef struct _D3DRMRAY {
+    D3DVECTOR dvDir;
+    D3DVECTOR dvPos;
+} D3DRMRAY, *LPD3DRMRAY;
+
+typedef struct _D3DRMBOX {
+    D3DVECTOR min;
+    D3DVECTOR max;
+} D3DRMBOX, *LPD3DRMBOX;
+
+typedef void (*D3DRMWRAPCALLBACK)(D3DVECTOR *vec, int *u, int *v, D3DVECTOR *a, D3DVECTOR *b, void *ctx);
+
+typedef enum _D3DRMLIGHTTYPE {
+    D3DRMLIGHT_AMBIENT,
+    D3DRMLIGHT_POINT,
+    D3DRMLIGHT_SPOT,
+    D3DRMLIGHT_DIRECTIONAL,
+    D3DRMLIGHT_PARALLELPOINT
+} D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE;
+
+typedef enum _D3DRMSHADEMODE {
+    D3DRMSHADE_FLAT     = 0,
+    D3DRMSHADE_GOURAUD  = 1,
+    D3DRMSHADE_PHONG    = 2,
+    D3DRMSHADE_MASK     = 7,
+    D3DRMSHADE_MAX      = 8
+} D3DRMSHADEMODE, *LPD3DRMSHADEMODE;
+
+typedef enum _D3DRMLIGHTMODE {
+    D3DRMLIGHT_OFF      = 0 * D3DRMSHADE_MAX,
+    D3DRMLIGHT_ON       = 1 * D3DRMSHADE_MAX,
+    D3DRMLIGHT_MASK     = 7 * D3DRMSHADE_MAX,
+    D3DRMLIGHT_MAX      = 8 * D3DRMSHADE_MAX
+} D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE;
+
+typedef enum _D3DRMFILLMODE {
+    D3DRMFILL_POINTS    = 0 * D3DRMLIGHT_MAX,
+    D3DRMFILL_WIREFRAME	= 1 * D3DRMLIGHT_MAX,
+    D3DRMFILL_SOLID     = 2 * D3DRMLIGHT_MAX,
+    D3DRMFILL_MASK      = 7 * D3DRMLIGHT_MAX,
+    D3DRMFILL_MAX       = 8 * D3DRMLIGHT_MAX
+} D3DRMFILLMODE, *LPD3DRMFILLMODE;
+
+typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY;
+
+#define D3DRMRENDER_WIREFRAME   (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME)
+#define D3DRMRENDER_UNLITFLAT   (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID)
+#define D3DRMRENDER_FLAT        (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
+#define D3DRMRENDER_GOURAUD     (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
+#define D3DRMRENDER_PHONG       (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID
+
+#define D3DRMRENDERMODE_BLENDEDTRANSPARENCY       1
+#define D3DRMRENDERMODE_SORTEDTRANSPARENCY        2
+#define D3DRMRENDERMODE_LIGHTINMODELSPACE         8
+#define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR    16
+#define D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE 32
+
+typedef enum _D3DRMTEXTUREQUALITY {
+    D3DRMTEXTURE_NEAREST,
+    D3DRMTEXTURE_LINEAR,
+    D3DRMTEXTURE_MIPNEAREST,
+    D3DRMTEXTURE_MIPLINEAR,
+    D3DRMTEXTURE_LINEARMIPNEAREST,
+    D3DRMTEXTURE_LINEARMIPLINEAR
+} D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY;
+
+#define D3DRMTEXTURE_FORCERESIDENT          0x00000001
+#define D3DRMTEXTURE_STATIC                 0x00000002
+#define D3DRMTEXTURE_DOWNSAMPLEPOINT        0x00000004
+#define D3DRMTEXTURE_DOWNSAMPLEBILINEAR	    0x00000008
+#define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH  0x00000010
+#define D3DRMTEXTURE_DOWNSAMPLENONE         0x00000020
+#define D3DRMTEXTURE_CHANGEDPIXELS          0x00000040
+#define D3DRMTEXTURE_CHANGEDPALETTE         0x00000080
+#define D3DRMTEXTURE_INVALIDATEONLY         0x00000100
+
+#define D3DRMSHADOW_TRUEALPHA               0x00000001
+
+typedef enum _D3DRMCOMBINETYPE {
+    D3DRMCOMBINE_REPLACE,
+    D3DRMCOMBINE_BEFORE,
+    D3DRMCOMBINE_AFTER
+} D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE;
+
+typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL;
+
+typedef enum _D3DRMPALETTEFLAGS
+{
+    D3DRMPALETTE_FREE,
+    D3DRMPALETTE_READONLY,
+    D3DRMPALETTE_RESERVED
+} D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS;
+
+typedef struct _D3DRMPALETTEENTRY {
+    unsigned char red;
+    unsigned char green;
+    unsigned char blue;
+    unsigned char flags;
+} D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY;
+
+typedef struct _D3DRMIMAGE {
+    int width;
+    int height;
+    int aspectx;
+    int aspecty;
+    int depth;
+    int rgb;
+    int bytes_per_line;
+    void* buffer1;
+    void* buffer2;
+    ULONG red_mask;
+    ULONG green_mask;
+    ULONG blue_mask;
+    ULONG alpha_mask;
+    int palette_size;
+    D3DRMPALETTEENTRY* palette;
+} D3DRMIMAGE, *LPD3DRMIMAGE;
+
+typedef enum _D3DRMWRAPTYPE {
+    D3DRMWRAP_FLAT,
+    D3DRMWRAP_CYLINDER,
+    D3DRMWRAP_SPHERE,
+    D3DRMWRAP_CHROME,
+    D3DRMWRAP_SHEET,
+    D3DRMWRAP_BOX
+} D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE;
+
+#define D3DRMWIREFRAME_CULL             1
+#define D3DRMWIREFRAME_HIDDENLINE       2
+
+typedef enum _D3DRMPROJECTIONTYPE
+{
+    D3DRMPROJECT_PERSPECTIVE,
+    D3DRMPROJECT_ORTHOGRAPHIC,
+    D3DRMPROJECT_RIGHTHANDPERSPECTIVE,
+    D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC
+} D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE;
+
+#define D3DRMOPTIONS_LEFTHANDED  0x00000001
+#define D3DRMOPTIONS_RIGHTHANDED 0x00000002
+
+typedef enum _D3DRMXOFFORMAT {
+    D3DRMXOF_BINARY,
+    D3DRMXOF_COMPRESSED,
+    D3DRMXOF_TEXT
+} D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT;
+
+typedef DWORD D3DRMSAVEOPTIONS;
+#define D3DRMXOFSAVE_NORMALS             1
+#define D3DRMXOFSAVE_TEXTURECOORDINATES  2
+#define D3DRMXOFSAVE_MATERIALS           4
+#define D3DRMXOFSAVE_TEXTURENAMES        8
+#define D3DRMXOFSAVE_ALL                15
+#define D3DRMXOFSAVE_TEMPLATES          16
+#define D3DRMXOFSAVE_TEXTURETOPOLOGY    32
+
+typedef enum _D3DRMCOLORSOURCE {
+    D3DRMCOLOR_FROMFACE,
+    D3DRMCOLOR_FROMVERTEX
+} D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE;
+
+typedef enum _D3DRMFRAMECONSTRAINT {
+    D3DRMCONSTRAIN_Z,
+    D3DRMCONSTRAIN_Y,
+    D3DRMCONSTRAIN_X
+} D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT;
+
+typedef enum _D3DRMMATERIALMODE {
+    D3DRMMATERIAL_FROMMESH,
+    D3DRMMATERIAL_FROMPARENT,
+    D3DRMMATERIAL_FROMFRAME
+} D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE;
+
+typedef enum _D3DRMFOGMODE {
+    D3DRMFOG_LINEAR,
+    D3DRMFOG_EXPONENTIAL,
+    D3DRMFOG_EXPONENTIALSQUARED
+} D3DRMFOGMODE, *LPD3DRMFOGMODE;
+
+typedef enum _D3DRMZBUFFERMODE {
+    D3DRMZBUFFER_FROMPARENT,
+    D3DRMZBUFFER_ENABLE,
+    D3DRMZBUFFER_DISABLE
+} D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE;
+
+typedef enum _D3DRMSORTMODE {
+    D3DRMSORT_FROMPARENT,
+    D3DRMSORT_NONE,
+    D3DRMSORT_FRONTTOBACK,
+    D3DRMSORT_BACKTOFRONT
+} D3DRMSORTMODE, *LPD3DRMSORTMODE;
+
+typedef struct _D3DRMMATERIALOVERRIDE {
+    DWORD         dwSize;
+    DWORD         dwFlags;
+    D3DCOLORVALUE dcDiffuse;
+    D3DCOLORVALUE dcAmbient;
+    D3DCOLORVALUE dcEmissive;
+    D3DCOLORVALUE dcSpecular;
+    D3DVALUE      dvPower;
+    IUnknown *lpD3DRMTex;
+} D3DRMMATERIALOVERRIDE, *LPD3DRMMATERIALOVERRIDE;
+
+#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY     0x00000001
+#define D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY       0x00000002
+#define D3DRMMATERIALOVERRIDE_DIFFUSE               0x00000003
+#define D3DRMMATERIALOVERRIDE_AMBIENT               0x00000004
+#define D3DRMMATERIALOVERRIDE_EMISSIVE              0x00000008
+#define D3DRMMATERIALOVERRIDE_SPECULAR              0x00000010
+#define D3DRMMATERIALOVERRIDE_POWER                 0x00000020
+#define D3DRMMATERIALOVERRIDE_TEXTURE               0x00000040
+#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAMULTIPLY 0x00000080
+#define D3DRMMATERIALOVERRIDE_ALL                   0x000000FF
+
+#define D3DRMFPTF_ALPHA                             0x00000001
+#define D3DRMFPTF_NOALPHA                           0x00000002
+#define D3DRMFPTF_PALETTIZED                        0x00000004
+#define D3DRMFPTF_NOTPALETTIZED                     0x00000008
+
+#define D3DRMSTATECHANGE_UPDATEONLY                0x000000001
+#define D3DRMSTATECHANGE_VOLATILE                  0x000000002
+#define D3DRMSTATECHANGE_NONVOLATILE               0x000000004
+#define D3DRMSTATECHANGE_RENDER                    0x000000020
+#define D3DRMSTATECHANGE_LIGHT                     0x000000040
+
+#define D3DRMDEVICE_NOZBUFFER           0x00000001
+
+#define D3DRMCALLBACK_PREORDER		0
+#define D3DRMCALLBACK_POSTORDER		1
+
+#define D3DRMRAYPICK_ONLYBOUNDINGBOXES          0x01
+#define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES    0x02
+#define D3DRMRAYPICK_INTERPOLATEUV              0x04
+#define D3DRMRAYPICK_INTERPOLATECOLOR           0x08
+#define D3DRMRAYPICK_INTERPOLATENORMAL          0x10
+
+#define D3DRMADDFACES_VERTICESONLY              1
+
+#define D3DRMGENERATENORMALS_PRECOMPACT         1
+#define D3DRMGENERATENORMALS_USECREASEANGLE     2
+
+#define D3DRMMESHBUILDER_DIRECTPARENT           1
+#define D3DRMMESHBUILDER_ROOTMESH               2
+
+#define D3DRMMESHBUILDER_RENDERENABLE   0x00000001
+#define D3DRMMESHBUILDER_PICKENABLE     0x00000002
+
+#define D3DRMADDMESHBUILDER_DONTCOPYAPPDATA     1
+#define D3DRMADDMESHBUILDER_FLATTENSUBMESHES    2
+#define D3DRMADDMESHBUILDER_NOSUBMESHES         4
+
+#define D3DRMMESHBUILDERAGE_GEOMETRY    0x00000001
+#define D3DRMMESHBUILDERAGE_MATERIALS   0x00000002
+#define D3DRMMESHBUILDERAGE_TEXTURES    0x00000004
+
+#define D3DRMFVF_TYPE                   0x00000001
+#define D3DRMFVF_NORMAL                 0x00000002
+#define D3DRMFVF_COLOR                  0x00000004
+#define D3DRMFVF_TEXTURECOORDS          0x00000008
+
+#define D3DRMVERTEX_STRIP               0x00000001
+#define D3DRMVERTEX_FAN                 0x00000002
+#define D3DRMVERTEX_LIST                0x00000004
+
+#define D3DRMCLEAR_TARGET               0x00000001
+#define D3DRMCLEAR_ZBUFFER              0x00000002
+#define D3DRMCLEAR_DIRTYRECTS           0x00000004
+#define D3DRMCLEAR_ALL                  (D3DRMCLEAR_TARGET | D3DRMCLEAR_ZBUFFER | D3DRMCLEAR_DIRTYRECTS)
+
+#define D3DRMFOGMETHOD_VERTEX           0x00000001
+#define D3DRMFOGMETHOD_TABLE            0x00000002
+#define D3DRMFOGMETHOD_ANY              0x00000004
+
+#define D3DRMFRAME_RENDERENABLE         0x00000001
+#define D3DRMFRAME_PICKENABLE           0x00000002
+
+typedef DWORD D3DRMANIMATIONOPTIONS;
+#define D3DRMANIMATION_OPEN             0x00000001
+#define D3DRMANIMATION_CLOSED           0x00000002
+#define D3DRMANIMATION_LINEARPOSITION   0x00000004
+#define D3DRMANIMATION_SPLINEPOSITION   0x00000008
+#define D3DRMANIMATION_SCALEANDROTATION 0x00000010
+#define D3DRMANIMATION_POSITION         0x00000020
+
+typedef DWORD D3DRMINTERPOLATIONOPTIONS;
+#define D3DRMINTERPOLATION_OPEN         0x0001
+#define D3DRMINTERPOLATION_CLOSED       0x0002
+#define D3DRMINTERPOLATION_NEAREST      0x0100
+#define D3DRMINTERPOLATION_LINEAR       0x0004
+#define D3DRMINTERPOLATION_SPLINE       0x0008
+#define D3DRMINTERPOLATION_VERTEXCOLOR  0x0040
+#define D3DRMINTERPOLATION_SLERPNORMALS 0x0080
+
+typedef DWORD D3DRMLOADOPTIONS;
+
+#define D3DRMLOAD_FROMFILE             __MSABI_LONG(0x000)
+#define D3DRMLOAD_FROMRESOURCE         __MSABI_LONG(0x001)
+#define D3DRMLOAD_FROMMEMORY           __MSABI_LONG(0x002)
+#define D3DRMLOAD_FROMSTREAM           __MSABI_LONG(0x004)
+#define D3DRMLOAD_FROMURL              __MSABI_LONG(0x008)
+
+#define D3DRMLOAD_BYNAME               __MSABI_LONG(0x010)
+#define D3DRMLOAD_BYPOSITION           __MSABI_LONG(0x020)
+#define D3DRMLOAD_BYGUID               __MSABI_LONG(0x040)
+#define D3DRMLOAD_FIRST                __MSABI_LONG(0x080)
+
+#define D3DRMLOAD_INSTANCEBYREFERENCE  __MSABI_LONG(0x100)
+#define D3DRMLOAD_INSTANCEBYCOPYING    __MSABI_LONG(0x200)
+
+#define D3DRMLOAD_ASYNCHRONOUS         __MSABI_LONG(0x400)
+
+typedef struct _D3DRMLOADRESOURCE
+{
+    HMODULE hModule;
+    const char *lpName;
+    const char *lpType;
+} D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE;
+
+typedef struct _D3DRMLOADMEMORY
+{
+    void *lpMemory;
+    DWORD dSize;
+} D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY;
+
+#define D3DRMPMESHSTATUS_VALID            0x01
+#define D3DRMPMESHSTATUS_INTERRUPTED      0x02
+#define D3DRMPMESHSTATUS_BASEMESHCOMPLETE 0x04
+#define D3DRMPMESHSTATUS_COMPLETE         0x08
+#define D3DRMPMESHSTATUS_RENDERABLE       0x10
+
+#define D3DRMPMESHEVENT_BASEMESH          0x01
+#define D3DRMPMESHEVENT_COMPLETE          0x02
+
+typedef struct _D3DRMPMESHLOADSTATUS {
+    DWORD dwSize;
+    DWORD dwPMeshSize;
+    DWORD dwBaseMeshSize;
+    DWORD dwBytesLoaded;
+    DWORD dwVerticesLoaded;
+    DWORD dwFacesLoaded;
+    HRESULT dwLoadResult;
+    DWORD dwFlags;
+} D3DRMPMESHLOADSTATUS, *LPD3DRMPMESHLOADSTATUS;
+
+typedef enum _D3DRMUSERVISUALREASON {
+    D3DRMUSERVISUAL_CANSEE,
+    D3DRMUSERVISUAL_RENDER
+} D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON;
+
+typedef struct _D3DRMANIMATIONKEY
+{
+    DWORD dwSize;
+    DWORD dwKeyType;
+    D3DVALUE dvTime;
+    DWORD dwID;
+#if !defined(__cplusplus) || !defined(D3D_OVERLOADS)
+    union
+    {
+	D3DRMQUATERNION dqRotateKey;
+	D3DVECTOR dvScaleKey;
+	D3DVECTOR dvPositionKey;
+    } DUMMYUNIONNAME;
+#else
+    D3DVALUE dvK[4];
+#endif
+} D3DRMANIMATIONKEY;
+typedef D3DRMANIMATIONKEY *LPD3DRMANIMATIONKEY;
+
+#define D3DRMANIMATION_ROTATEKEY   0x01
+#define D3DRMANIMATION_SCALEKEY    0x02
+#define D3DRMANIMATION_POSITIONKEY 0x03
+
+typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING;
+static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU        = 1;
+static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV        = 2;
+static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4;
+
+typedef struct _D3DRMVERTEX {
+    D3DVECTOR position;
+    D3DVECTOR normal;
+    D3DVALUE  tu;
+    D3DVALUE  tv;
+    D3DCOLOR  color;
+} D3DRMVERTEX, *LPD3DRMVERTEX;
+
+typedef LONG D3DRMGROUPINDEX;
+static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1;
+
+void WINAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D m, D3DRMQUATERNION *q);
+
+D3DRMQUATERNION * WINAPI D3DRMQuaternionFromRotation(D3DRMQUATERNION *x, D3DVECTOR *axis, D3DVALUE theta);
+D3DRMQUATERNION * WINAPI D3DRMQuaternionMultiply(D3DRMQUATERNION *ret, D3DRMQUATERNION *x, D3DRMQUATERNION *y);
+D3DRMQUATERNION * WINAPI D3DRMQuaternionSlerp(D3DRMQUATERNION *ret,
+        D3DRMQUATERNION *x, D3DRMQUATERNION *y, D3DVALUE alpha);
+
+D3DVECTOR * WINAPI D3DRMVectorAdd(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);
+D3DVECTOR * WINAPI D3DRMVectorCrossProduct(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);
+D3DVALUE WINAPI D3DRMVectorDotProduct(D3DVECTOR *x, D3DVECTOR *y);
+D3DVECTOR * WINAPI D3DRMVectorNormalize(D3DVECTOR *x);
+
+#define D3DRMVectorNormalise D3DRMVectorNormalize
+
+D3DVALUE WINAPI D3DRMVectorModulus(D3DVECTOR *x);
+D3DVECTOR * WINAPI D3DRMVectorRandom(D3DVECTOR *ret);
+D3DVECTOR * WINAPI D3DRMVectorRotate(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *axis, D3DVALUE theta);
+D3DVECTOR * WINAPI D3DRMVectorReflect(D3DVECTOR *ret, D3DVECTOR *ray, D3DVECTOR *normal);
+D3DVECTOR * WINAPI D3DRMVectorScale(D3DVECTOR *ret, D3DVECTOR *x, D3DVALUE scale);
+D3DVECTOR * WINAPI D3DRMVectorSubtract(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);
+
+D3DCOLOR WINAPI D3DRMCreateColorRGB(D3DVALUE, D3DVALUE, D3DVALUE);
+D3DCOLOR WINAPI D3DRMCreateColorRGBA(D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE);
+D3DVALUE WINAPI D3DRMColorGetAlpha(D3DCOLOR);
+D3DVALUE WINAPI D3DRMColorGetBlue(D3DCOLOR);
+D3DVALUE WINAPI D3DRMColorGetGreen(D3DCOLOR);
+D3DVALUE WINAPI D3DRMColorGetRed(D3DCOLOR);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h
new file mode 100644
index 0000000..4154151
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h
@@ -0,0 +1,4711 @@
+/*
+ * Copyright (C) 2008 Vijay Kiran Kamuju
+ * Copyright (C) 2010 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRMOBJ_H__
+#define __D3DRMOBJ_H__
+
+#include <objbase.h>
+#define VIRTUAL
+#include <d3drmdef.h>
+#include <d3d.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Direct3DRM object CLSIDs */
+
+DEFINE_GUID(CLSID_CDirect3DRMDevice,                    0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMViewport,                  0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMFrame,                     0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMMesh,                      0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,               0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMFace,                      0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMLight,                     0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMTexture,                   0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMWrap,                      0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMMaterial,                  0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMAnimation,                 0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMAnimationSet,              0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMUserVisual,                0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMShadow,                    0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator,      0xde9eaa1, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator,         0xde9eaa2, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator,          0xde9eaa3, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMLightInterpolator,         0xde9eaa6, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator,      0xde9eaa7, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator,       0xde9eaa8, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh,           0x4516ec40, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMClippedVisual,             0x5434e72d, 0x6d66, 0x11d1, 0xbb, 0xb, 0x0, 0x0, 0xf8, 0x75, 0x86, 0x5a);
+
+/* Direct3DRM object interface GUIDs */
+
+DEFINE_GUID(IID_IDirect3DRMObject,          0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMObject2,         0x4516ec7c, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMDevice,          0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMDevice2,         0x4516ec78, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMDevice3,         0x549f498b, 0xbfeb, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82);
+DEFINE_GUID(IID_IDirect3DRMViewport,        0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMViewport2,       0x4a1b1be6, 0xbfed, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82);
+DEFINE_GUID(IID_IDirect3DRMFrame,           0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFrame2,          0xc3dfbd60, 0x3988, 0x11d0, 0x9e, 0xc2, 0x00, 0x00, 0xc0, 0x29, 0x1a, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMFrame3,          0xff6b7f70, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMVisual,          0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMesh,            0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMeshBuilder,     0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMeshBuilder2,    0x4516ec77, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMMeshBuilder3,    0x4516ec82, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMFace,            0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFace2,           0x4516ec81, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMLight,           0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMTexture,         0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMTexture2,        0x120f30c0, 0x1629, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+DEFINE_GUID(IID_IDirect3DRMTexture3,        0xff6b7f73, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMWrap,            0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMaterial,        0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMaterial2,       0xff6b7f75, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMAnimation,       0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMAnimation2,      0xff6b7f77, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMAnimationSet,    0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMAnimationSet2,   0xff6b7f79, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMObjectArray,     0x242f6bc2, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMDeviceArray,     0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMViewportArray,   0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFrameArray,      0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMVisualArray,     0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMLightArray,      0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMPickedArray,     0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFaceArray,       0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMAnimationArray,  0xd5f1cae0, 0x4bd7, 0x11d1, 0xb9, 0x74, 0x00, 0x60, 0x08, 0x3e, 0x45, 0xf3);
+DEFINE_GUID(IID_IDirect3DRMUserVisual,      0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMShadow,          0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMShadow2,         0x86b44e25, 0x9c82, 0x11d1, 0xbb, 0x0b, 0x00, 0xa0, 0xc9, 0x81, 0xa0, 0xa6);
+DEFINE_GUID(IID_IDirect3DRMInterpolator,    0x242f6bc1, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMProgressiveMesh, 0x4516ec79, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMPicked2Array,    0x4516ec7b, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMClippedVisual,   0x5434e733, 0x6d66, 0x11d1, 0xbb, 0x0b, 0x00, 0x00, 0xf8, 0x75, 0x86, 0x5a);
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+
+typedef struct IDirect3DRMObject          *LPDIRECT3DRMOBJECT, **LPLPDIRECT3DRMOBJECT;
+typedef struct IDirect3DRMObject2         *LPDIRECT3DRMOBJECT2, **LPLPDIRECT3DRMOBJECT2;
+typedef struct IDirect3DRMDevice          *LPDIRECT3DRMDEVICE, **LPLPDIRECT3DRMDEVICE;
+typedef struct IDirect3DRMDevice2         *LPDIRECT3DRMDEVICE2, **LPLPDIRECT3DRMDEVICE2;
+typedef struct IDirect3DRMDevice3         *LPDIRECT3DRMDEVICE3, **LPLPDIRECT3DRMDEVICE3;
+typedef struct IDirect3DRMViewport        *LPDIRECT3DRMVIEWPORT, **LPLPDIRECT3DRMVIEWPORT;
+typedef struct IDirect3DRMViewport2       *LPDIRECT3DRMVIEWPORT2, **LPLPDIRECT3DRMVIEWPORT2;
+typedef struct IDirect3DRMFrame           *LPDIRECT3DRMFRAME, **LPLPDIRECT3DRMFRAME;
+typedef struct IDirect3DRMFrame2          *LPDIRECT3DRMFRAME2, **LPLPDIRECT3DRMFRAME2;
+typedef struct IDirect3DRMFrame3          *LPDIRECT3DRMFRAME3, **LPLPDIRECT3DRMFRAME3;
+typedef struct IDirect3DRMVisual          *LPDIRECT3DRMVISUAL, **LPLPDIRECT3DRMVISUAL;
+typedef struct IDirect3DRMMesh            *LPDIRECT3DRMMESH, **LPLPDIRECT3DRMMESH;
+typedef struct IDirect3DRMMeshBuilder     *LPDIRECT3DRMMESHBUILDER, **LPLPDIRECT3DRMMESHBUILDER;
+typedef struct IDirect3DRMMeshBuilder2    *LPDIRECT3DRMMESHBUILDER2, **LPLPDIRECT3DRMMESHBUILDER2;
+typedef struct IDirect3DRMMeshBuilder3    *LPDIRECT3DRMMESHBUILDER3, **LPLPDIRECT3DRMMESHBUILDER3;
+typedef struct IDirect3DRMFace            *LPDIRECT3DRMFACE, **LPLPDIRECT3DRMFACE;
+typedef struct IDirect3DRMFace2           *LPDIRECT3DRMFACE2, **LPLPDIRECT3DRMFACE2;
+typedef struct IDirect3DRMLight           *LPDIRECT3DRMLIGHT, **LPLPDIRECT3DRMLIGHT;
+typedef struct IDirect3DRMTexture         *LPDIRECT3DRMTEXTURE, **LPLPDIRECT3DRMTEXTURE;
+typedef struct IDirect3DRMTexture2        *LPDIRECT3DRMTEXTURE2, **LPLPDIRECT3DRMTEXTURE2;
+typedef struct IDirect3DRMTexture3        *LPDIRECT3DRMTEXTURE3, **LPLPDIRECT3DRMTEXTURE3;
+typedef struct IDirect3DRMWrap            *LPDIRECT3DRMWRAP, **LPLPDIRECT3DRMWRAP;
+typedef struct IDirect3DRMMaterial        *LPDIRECT3DRMMATERIAL, **LPLPDIRECT3DRMMATERIAL;
+typedef struct IDirect3DRMMaterial2       *LPDIRECT3DRMMATERIAL2, **LPLPDIRECT3DRMMATERIAL2;
+typedef struct IDirect3DRMAnimation       *LPDIRECT3DRMANIMATION, **LPLPDIRECT3DRMANIMATION;
+typedef struct IDirect3DRMAnimation2      *LPDIRECT3DRMANIMATION2, **LPLPDIRECT3DRMANIMATION2;
+typedef struct IDirect3DRMAnimationSet    *LPDIRECT3DRMANIMATIONSET, **LPLPDIRECT3DRMANIMATIONSET;
+typedef struct IDirect3DRMAnimationSet2   *LPDIRECT3DRMANIMATIONSET2, **LPLPDIRECT3DRMANIMATIONSET2;
+typedef struct IDirect3DRMUserVisual      *LPDIRECT3DRMUSERVISUAL, **LPLPDIRECT3DRMUSERVISUAL;
+typedef struct IDirect3DRMShadow          *LPDIRECT3DRMSHADOW, **LPLPDIRECT3DRMSHADOW;
+typedef struct IDirect3DRMShadow2         *LPDIRECT3DRMSHADOW2, **LPLPDIRECT3DRMSHADOW2;
+typedef struct IDirect3DRMArray           *LPDIRECT3DRMARRAY, **LPLPDIRECT3DRMARRAY;
+typedef struct IDirect3DRMObjectArray     *LPDIRECT3DRMOBJECTARRAY, **LPLPDIRECT3DRMOBJECTARRAY;
+typedef struct IDirect3DRMDeviceArray     *LPDIRECT3DRMDEVICEARRAY, **LPLPDIRECT3DRMDEVICEARRAY;
+typedef struct IDirect3DRMFaceArray       *LPDIRECT3DRMFACEARRAY, **LPLPDIRECT3DRMFACEARRAY;
+typedef struct IDirect3DRMViewportArray   *LPDIRECT3DRMVIEWPORTARRAY, **LPLPDIRECT3DRMVIEWPORTARRAY;
+typedef struct IDirect3DRMFrameArray      *LPDIRECT3DRMFRAMEARRAY, **LPLPDIRECT3DRMFRAMEARRAY;
+typedef struct IDirect3DRMAnimationArray  *LPDIRECT3DRMANIMATIONARRAY, **LPLPDIRECT3DRMANIMATIONARRAY;
+typedef struct IDirect3DRMVisualArray     *LPDIRECT3DRMVISUALARRAY, **LPLPDIRECT3DRMVISUALARRAY;
+typedef struct IDirect3DRMPickedArray     *LPDIRECT3DRMPICKEDARRAY, **LPLPDIRECT3DRMPICKEDARRAY;
+typedef struct IDirect3DRMPicked2Array    *LPDIRECT3DRMPICKED2ARRAY, **LPLPDIRECT3DRMPICKED2ARRAY;
+typedef struct IDirect3DRMLightArray      *LPDIRECT3DRMLIGHTARRAY, **LPLPDIRECT3DRMLIGHTARRAY;
+typedef struct IDirect3DRMProgressiveMesh *LPDIRECT3DRMPROGRESSIVEMESH, **LPLPDIRECT3DRMPROGRESSIVEMESH;
+typedef struct IDirect3DRMClippedVisual   *LPDIRECT3DRMCLIPPEDVISUAL, **LPLPDIRECT3DRMCLIPPEDVISUAL;
+
+/* ********************************************************************
+   Types and structures
+   ******************************************************************** */
+
+typedef void (__cdecl *D3DRMOBJECTCALLBACK)(struct IDirect3DRMObject *obj, void *arg);
+typedef void (__cdecl *D3DRMFRAMEMOVECALLBACK)(struct IDirect3DRMFrame *frame, void *ctx, D3DVALUE delta);
+typedef void (__cdecl *D3DRMFRAME3MOVECALLBACK)(struct IDirect3DRMFrame3 *frame, void *ctx, D3DVALUE delta);
+typedef void (__cdecl *D3DRMUPDATECALLBACK)(struct IDirect3DRMDevice *device, void *ctx, int count, D3DRECT *rects);
+typedef void (__cdecl *D3DRMDEVICE3UPDATECALLBACK)(struct IDirect3DRMDevice3 *device, void *ctx,
+        int count, D3DRECT *rects);
+typedef int (__cdecl *D3DRMUSERVISUALCALLBACK)(struct IDirect3DRMUserVisual *visual, void *ctx,
+        D3DRMUSERVISUALREASON reason, struct IDirect3DRMDevice *device, struct IDirect3DRMViewport *viewport);
+typedef HRESULT (__cdecl *D3DRMLOADTEXTURECALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture **texture);
+typedef HRESULT (__cdecl *D3DRMLOADTEXTURE3CALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture3 **texture);
+typedef void (__cdecl *D3DRMLOADCALLBACK)(struct IDirect3DRMObject *object, REFIID objectguid, void *arg);
+typedef HRESULT (__cdecl *D3DRMDOWNSAMPLECALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx,
+        IDirectDrawSurface *src_surface, IDirectDrawSurface *dst_surface);
+typedef HRESULT (__cdecl *D3DRMVALIDATIONCALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx,
+        DWORD flags, DWORD rect_count, RECT *rects);
+
+typedef struct _D3DRMPICKDESC
+{
+    ULONG     ulFaceIdx;
+    LONG      lGroupIdx;
+    D3DVECTOR vPosition;
+} D3DRMPICKDESC, *LPD3DRMPICKDESC;
+
+typedef struct _D3DRMPICKDESC2
+{
+    ULONG     ulFaceIdx;
+    LONG      lGroupIdx;
+    D3DVECTOR vPosition;
+    D3DVALUE  tu;
+    D3DVALUE  tv;
+    D3DVECTOR dvNormal;
+    D3DCOLOR  dcColor;
+} D3DRMPICKDESC2, *LPD3DRMPICKDESC2;
+
+/*****************************************************************************
+ * IDirect3DRMObject interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMObject
+DECLARE_INTERFACE_(IDirect3DRMObject,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMObject_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMObject_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMObject_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMObject_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMObject_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMObject_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMObject_GetAppData(p)                (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMObject_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMObject_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMObject_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMObject_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMObject_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMObject_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMObject_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMObject_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMObject_SetAppData(p,a)              (p)->SetAppData(a)
+#define IDirect3DRMObject_GetAppData(p)                (p)->GetAppData()
+#define IDirect3DRMObject_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMObject_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMObject_GetClassName(p,a,b)          (p)->GetClassName(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMObject2 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMObject2
+DECLARE_INTERFACE_(IDirect3DRMObject2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject2 methods ***/
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(GetClientData)(THIS_ DWORD id, void **data) PURE;
+    STDMETHOD(GetDirect3DRM)(THIS_ struct IDirect3DRM **d3drm) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(SetClientData)(THIS_ DWORD id, void *data, DWORD flags) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetAge)(THIS_ DWORD flags, DWORD *age) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMObject2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMObject2_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMObject2_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject2 methods ***/
+#define IDirect3DRMObject2_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMObject2_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMObject2_GetClientData(p,a,b)         (p)->lpVtbl->SetClientData(p,a,b)
+#define IDirect3DRMObject2_GetDirect3DRM(p,a)           (p)->lpVtbl->GetDirect3DRM(p,a)
+#define IDirect3DRMObject2_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMObject2_SetClientData(p,a,b,c)       (p)->lpVtbl->SetClientData(p,a,b,c)
+#define IDirect3DRMObject2_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMObject2_GetAge(p,a,b)                (p)->lpVtbl->GetAge(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMObject2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMObject2_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMObject2_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject2 methods ***/
+#define IDirect3DRMObject2_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMObject2_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMObject2_GetClientData(p,a,b)         (p)->SetClientData(a,b)
+#define IDirect3DRMObject2_GetDirect3DRM(p,a)           (p)->GetDirect3DRM(a)
+#define IDirect3DRMObject2_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMObject2_SetClientData(p,a,b,c)       (p)->SetClientData(a,b,c)
+#define IDirect3DRMObject2_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMObject2_GetAge(p,a,b)                (p)->GetAge(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMVisual interface
+ */
+#define INTERFACE IDirect3DRMVisual
+DECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMVisual_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMVisual_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMVisual_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMVisual_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMVisual_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMVisual_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMVisual_GetAppData(p)                (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMVisual_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMVisual_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMVisual_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMVisual_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMVisual_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMVisual_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMVisual_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMVisual_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMVisual_SetAppData(p,a)              (p)->SetAppData(a)
+#define IDirect3DRMVisual_GetAppData(p)                (p)->GetAppData()
+#define IDirect3DRMVisual_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMVisual_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMVisual_GetClassName(p,a,b)          (p)->GetClassName(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDevice interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMDevice
+DECLARE_INTERFACE_(IDirect3DRMDevice,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMDevice methods ***/
+    STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
+    STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;
+    STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;
+    STDMETHOD(Update)(THIS) PURE;
+    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
+    STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
+    STDMETHOD(SetDither)(THIS_ BOOL) PURE;
+    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
+    STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;
+    STDMETHOD_(BOOL, GetDither)(THIS) PURE;
+    STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+    STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+    STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
+    STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
+    STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDevice_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDevice_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMDevice_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMDevice_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMDevice_GetAppData(p)                (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMDevice_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMDevice_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMDevice_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice_Init(p,a,b)                  (p)->lpVtbl->Init(p,a,b)
+#define IDirect3DRMDevice_InitFromD3D(p,a,b)           (p)->lpVtbl->InitFromD3D(p,a,b)
+#define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d)   (p)->lpVtbl->InitFromClipper(p,a,b,c,d)
+#define IDirect3DRMDevice_Update(p)                    (p)->lpVtbl->Update(p)
+#define IDirect3DRMDevice_AddUpdateCallback(p,a,b)     (p)->lpVtbl->AddUpdateCallback(p,a,b)
+#define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b)  (p)->lpVtbl->DeleteUpdateCallback(p,a,b)
+#define IDirect3DRMDevice_SetBufferCount(p,a)          (p)->lpVtbl->SetBufferCount(p,a)
+#define IDirect3DRMDevice_GetBufferCount(p)            (p)->lpVtbl->GetBufferCount(p)
+#define IDirect3DRMDevice_SetDither(p,a)               (p)->lpVtbl->SetDither(p,a)
+#define IDirect3DRMDevice_SetShades(p,a)               (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMDevice_SetQuality(p,a)              (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMDevice_SetTextureQuality(p,a)       (p)->lpVtbl->SetTextureQuality(p,a)
+#define IDirect3DRMDevice_GetViewports(p,a)            (p)->lpVtbl->GetViewports(p,a)
+#define IDirect3DRMDevice_GetDither(p)                 (p)->lpVtbl->GetDither(p)
+#define IDirect3DRMDevice_GetShades(p)                 (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMDevice_GetHeight(p)                 (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMDevice_GetWidth(p)                  (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMDevice_GetTrianglesDrawn(p)         (p)->lpVtbl->GetTrianglesDrawn(p)
+#define IDirect3DRMDevice_GetWireframeOptions(p)       (p)->lpVtbl->GetWireframeOptions(p)
+#define IDirect3DRMDevice_GetQuality(p)                (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMDevice_GetColorModel(p)             (p)->lpVtbl->GetColorModel(p)
+#define IDirect3DRMDevice_GetTextureQuality(p)         (p)->lpVtbl->GetTextureQuality(p)
+#define IDirect3DRMDevice_GetDirect3DDevice(p,a)       (p)->lpVtbl->GetDirect3DDevice(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMDevice_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMDevice_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMDevice_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMDevice_SetAppData(p,a)              (p)->SetAppData(a)
+#define IDirect3DRMDevice_GetAppData(p)                (p)->GetAppData()
+#define IDirect3DRMDevice_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMDevice_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMDevice_GetClassName(p,a,b)          (p)->GetClassName(a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice_Init(p,a,b)                  (p)->Init(a,b)
+#define IDirect3DRMDevice_InitFromD3D(p,a,b)           (p)->InitFromD3D(a,b)
+#define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d)   (p)->InitFromClipper(a,b,c,d)
+#define IDirect3DRMDevice_Update(p)                    (p)->Update()
+#define IDirect3DRMDevice_AddUpdateCallback(p,a,b)     (p)->AddUpdateCallback(a,b)
+#define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b)  (p)->DeleteUpdateCallback(a,b)
+#define IDirect3DRMDevice_SetBufferCount(p,a)          (p)->SetBufferCount(a)
+#define IDirect3DRMDevice_GetBufferCount(p)            (p)->GetBufferCount()
+#define IDirect3DRMDevice_SetDither(p,a)               (p)->SetDither(a)
+#define IDirect3DRMDevice_SetShades(p,a)               (p)->SetShades(a)
+#define IDirect3DRMDevice_SetQuality(p,a)              (p)->SetQuality(a)
+#define IDirect3DRMDevice_SetTextureQuality(p,a)       (p)->SetTextureQuality(a)
+#define IDirect3DRMDevice_GetViewports(p,a)            (p)->GetViewports(a)
+#define IDirect3DRMDevice_GetDither(p)                 (p)->GetDither()
+#define IDirect3DRMDevice_GetShades(p)                 (p)->GetShades()
+#define IDirect3DRMDevice_GetHeight(p)                 (p)->GetHeight()
+#define IDirect3DRMDevice_GetWidth(p)                  (p)->GetWidth()
+#define IDirect3DRMDevice_GetTrianglesDrawn(p)         (p)->GetTrianglesDrawn()
+#define IDirect3DRMDevice_GetWireframeOptions(p)       (p)->GetWireframeOptions()
+#define IDirect3DRMDevice_GetQuality(p)                (p)->GetQuality()
+#define IDirect3DRMDevice_GetColorModel(p)             (p)->GetColorModel()
+#define IDirect3DRMDevice_GetTextureQuality(p)         (p)->GetTextureQuality()
+#define IDirect3DRMDevice_GetDirect3DDevice(p,a)       (p)->GetDirect3DDevice(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDevice2 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMDevice2
+DECLARE_INTERFACE_(IDirect3DRMDevice2,IDirect3DRMDevice)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMDevice methods ***/
+    STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
+    STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;
+    STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;
+    STDMETHOD(Update)(THIS) PURE;
+    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
+    STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
+    STDMETHOD(SetDither)(THIS_ BOOL) PURE;
+    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
+    STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;
+    STDMETHOD_(BOOL, GetDither)(THIS) PURE;
+    STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+    STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+    STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
+    STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
+    STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;
+    /*** IDirect3DRMDevice2 methods ***/
+    STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE;
+    STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE;
+    STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE;
+    STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;
+    STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDevice2_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDevice2_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice2_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMDevice2_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMDevice2_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMDevice2_GetAppData(p)                (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMDevice2_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMDevice2_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMDevice2_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice2_Init(p,a,b)                  (p)->lpVtbl->Init(p,a,b)
+#define IDirect3DRMDevice2_InitFromD3D(p,a,b)           (p)->lpVtbl->InitFromD3D(p,a,b)
+#define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d)   (p)->lpVtbl->InitFromClipper(p,a,b,c,d)
+#define IDirect3DRMDevice2_Update(p)                    (p)->lpVtbl->Update(p)
+#define IDirect3DRMDevice2_AddUpdateCallback(p,a,b)     (p)->lpVtbl->AddUpdateCallback(p,a,b)
+#define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b)  (p)->lpVtbl->DeleteUpdateCallback(p,a,b)
+#define IDirect3DRMDevice2_SetBufferCount(p,a)          (p)->lpVtbl->SetBufferCount(p,a)
+#define IDirect3DRMDevice2_GetBufferCount(p)            (p)->lpVtbl->GetBufferCount(p)
+#define IDirect3DRMDevice2_SetDither(p,a)               (p)->lpVtbl->SetDither(p,a)
+#define IDirect3DRMDevice2_SetShades(p,a)               (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMDevice2_SetQuality(p,a)              (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMDevice2_SetTextureQuality(p,a)       (p)->lpVtbl->SetTextureQuality(p,a)
+#define IDirect3DRMDevice2_GetViewports(p,a)            (p)->lpVtbl->GetViewports(p,a)
+#define IDirect3DRMDevice2_GetDither(p)                 (p)->lpVtbl->GetDither(p)
+#define IDirect3DRMDevice2_GetShades(p)                 (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMDevice2_GetHeight(p)                 (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMDevice2_GetWidth(p)                  (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMDevice2_GetTrianglesDrawn(p)         (p)->lpVtbl->GetTrianglesDrawn(p)
+#define IDirect3DRMDevice2_GetWireframeOptions(p)       (p)->lpVtbl->GetWireframeOptions(p)
+#define IDirect3DRMDevice2_GetQuality(p)                (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMDevice2_GetColorModel(p)             (p)->lpVtbl->GetColorModel(p)
+#define IDirect3DRMDevice2_GetTextureQuality(p)         (p)->lpVtbl->GetTextureQuality(p)
+#define IDirect3DRMDevice2_GetDirect3DDevice(p,a)       (p)->lpVtbl->GetDirect3DDevice(p,a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice2_InitFromD3D2(p,a,b)          (p)->lpVtbl->InitFromD3D2(p,a,b)
+#define IDirect3DRMDevice2_InitFromSurface(p,a,b,c)     (p)->lpVtbl->InitFromSurface(p,a,b,c)
+#define IDirect3DRMDevice2_SetRenderMode(p,a)           (p)->lpVtbl->SetRenderMode(p,a)
+#define IDirect3DRMDevice2_GetRenderMode(p)             (p)->lpVtbl->GetRenderMode(p)
+#define IDirect3DRMDevice2_GetDirect3DDevice2(p,a)      (p)->lpVtbl->GetDirect3DDevice2(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMDevice2_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMDevice2_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice2_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMDevice2_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMDevice2_SetAppData(p,a)              (p)->SetAppData(a)
+#define IDirect3DRMDevice2_GetAppData(p)                (p)->GetAppData()
+#define IDirect3DRMDevice2_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMDevice2_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMDevice2_GetClassName(p,a,b)          (p)->GetClassName(a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice2_Init(p,a,b)                  (p)->Init(a,b)
+#define IDirect3DRMDevice2_InitFromD3D(p,a,b)           (p)->InitFromD3D(a,b)
+#define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d)   (p)->InitFromClipper(a,b,c,d)
+#define IDirect3DRMDevice2_Update(p)                    (p)->Update()
+#define IDirect3DRMDevice2_AddUpdateCallback(p,a,b)     (p)->AddUpdateCallback(a,b)
+#define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b)  (p)->DeleteUpdateCallback(a,b)
+#define IDirect3DRMDevice2_SetBufferCount(p,a)          (p)->SetBufferCount(a)
+#define IDirect3DRMDevice2_GetBufferCount(p)            (p)->GetBufferCount()
+#define IDirect3DRMDevice2_SetDither(p,a)               (p)->SetDither(a)
+#define IDirect3DRMDevice2_SetShades(p,a)               (p)->SetShades(a)
+#define IDirect3DRMDevice2_SetQuality(p,a)              (p)->SetQuality(a)
+#define IDirect3DRMDevice2_SetTextureQuality(p,a)       (p)->SetTextureQuality(a)
+#define IDirect3DRMDevice2_GetViewports(p,a)            (p)->GetViewports(a)
+#define IDirect3DRMDevice2_GetDither(p)                 (p)->GetDither()
+#define IDirect3DRMDevice2_GetShades(p)                 (p)->GetShades()
+#define IDirect3DRMDevice2_GetHeight(p)                 (p)->GetHeight()
+#define IDirect3DRMDevice2_GetWidth(p)                  (p)->GetWidth()
+#define IDirect3DRMDevice2_GetTrianglesDrawn(p)         (p)->GetTrianglesDrawn()
+#define IDirect3DRMDevice2_GetWireframeOptions(p)       (p)->GetWireframeOptions()
+#define IDirect3DRMDevice2_GetQuality(p)                (p)->GetQuality()
+#define IDirect3DRMDevice2_GetColorModel(p)             (p)->GetColorModel()
+#define IDirect3DRMDevice2_GetTextureQuality(p)         (p)->GetTextureQuality()
+#define IDirect3DRMDevice2_GetDirect3DDevice(p,a)       (p)->GetDirect3DDevice(a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice2_InitFromD3D2(p,a,b)          (p)->InitFromD3D2(a,b)
+#define IDirect3DRMDevice2_InitFromSurface(p,a,b,c)     (p)->InitFromSurface(a,b,c)
+#define IDirect3DRMDevice2_SetRenderMode(p,a)           (p)->SetRenderMode(a)
+#define IDirect3DRMDevice2_GetRenderMode(p)             (p)->GetRenderMode()
+#define IDirect3DRMDevice2_GetDirect3DDevice2(p,a)      (p)->GetDirect3DDevice2(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDevice3 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMDevice3
+DECLARE_INTERFACE_(IDirect3DRMDevice3,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMDevice methods ***/
+    STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
+    STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;
+    STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;
+    STDMETHOD(Update)(THIS) PURE;
+    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
+    STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
+    STDMETHOD(SetDither)(THIS_ BOOL) PURE;
+    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
+    STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;
+    STDMETHOD_(BOOL, GetDither)(THIS) PURE;
+    STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+    STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+    STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
+    STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
+    STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;
+    /*** IDirect3DRMDevice2 methods ***/
+    STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE;
+    STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE;
+    STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE;
+    STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;
+    STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE;
+    /*** IDirect3DRMDevice3 methods ***/
+    STDMETHOD(FindPreferredTextureFormat)(THIS_ DWORD BitDepths, DWORD flags, DDPIXELFORMAT *format) PURE;
+    STDMETHOD(RenderStateChange)(THIS_ D3DRENDERSTATETYPE drsType, DWORD val, DWORD flags) PURE;
+    STDMETHOD(LightStateChange)(THIS_ D3DLIGHTSTATETYPE drsType, DWORD val, DWORD flags) PURE;
+    STDMETHOD(GetStateChangeOptions)(THIS_ DWORD state_class, DWORD state_idx, DWORD *flags) PURE;
+    STDMETHOD(SetStateChangeOptions)(THIS_ DWORD StateClass, DWORD StateNum, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice3_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDevice3_AddRef(p)                           (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDevice3_Release(p)                          (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice3_Clone(p,a,b,c)                      (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMDevice3_AddDestroyCallback(p,a,b)           (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b)        (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMDevice3_SetAppData(p,a)                     (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMDevice3_GetAppData(p)                       (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMDevice3_SetName(p,a)                        (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMDevice3_GetName(p,a,b)                      (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMDevice3_GetClassName(p,a,b)                 (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice3_Init(p,a,b)                         (p)->lpVtbl->Init(p,a,b)
+#define IDirect3DRMDevice3_InitFromD3D(p,a,b)                  (p)->lpVtbl->InitFromD3D(p,a,b)
+#define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d)          (p)->lpVtbl->InitFromClipper(p,a,b,c,d)
+#define IDirect3DRMDevice3_Update(p)                           (p)->lpVtbl->Update(p)
+#define IDirect3DRMDevice3_AddUpdateCallback(p,a,b)            (p)->lpVtbl->AddUpdateCallback(p,a,b)
+#define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b)         (p)->lpVtbl->DeleteUpdateCallback(p,a,b)
+#define IDirect3DRMDevice3_SetBufferCount(p,a)                 (p)->lpVtbl->SetBufferCount(p,a)
+#define IDirect3DRMDevice3_GetBufferCount(p)                   (p)->lpVtbl->GetBufferCount(p)
+#define IDirect3DRMDevice3_SetDither(p,a)                      (p)->lpVtbl->SetDither(p,a)
+#define IDirect3DRMDevice3_SetShades(p,a)                      (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMDevice3_SetQuality(p,a)                     (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMDevice3_SetTextureQuality(p,a)              (p)->lpVtbl->SetTextureQuality(p,a)
+#define IDirect3DRMDevice3_GetViewports(p,a)                   (p)->lpVtbl->GetViewports(p,a)
+#define IDirect3DRMDevice3_GetDither(p)                        (p)->lpVtbl->GetDither(p)
+#define IDirect3DRMDevice3_GetShades(p)                        (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMDevice3_GetHeight(p)                        (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMDevice3_GetWidth(p)                         (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMDevice3_GetTrianglesDrawn(p)                (p)->lpVtbl->GetTrianglesDrawn(p)
+#define IDirect3DRMDevice3_GetWireframeOptions(p)              (p)->lpVtbl->GetWireframeOptions(p)
+#define IDirect3DRMDevice3_GetQuality(p)                       (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMDevice3_GetColorModel(p)                    (p)->lpVtbl->GetColorModel(p)
+#define IDirect3DRMDevice3_GetTextureQuality(p)                (p)->lpVtbl->GetTextureQuality(p)
+#define IDirect3DRMDevice3_GetDirect3DDevice(p,a)              (p)->lpVtbl->GetDirect3DDevice(p,a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice3_InitFromD3D2(p,a,b)                 (p)->lpVtbl->InitFromD3D2(p,a,b)
+#define IDirect3DRMDevice3_InitFromSurface(p,a,b,c)            (p)->lpVtbl->InitFromSurface(p,a,b,c)
+#define IDirect3DRMDevice3_SetRenderMode(p,a)                  (p)->lpVtbl->SetRenderMode(p,a)
+#define IDirect3DRMDevice3_GetRenderMode(p)                    (p)->lpVtbl->GetRenderMode(p)
+#define IDirect3DRMDevice3_GetDirect3DDevice2(p,a)             (p)->lpVtbl->GetDirect3DDevice2(p,a)
+/*** IDirect3DRMDevice3 methods ***/
+#define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->lpVtbl->FindPreferredTextureFormat(p,a,b,c)
+#define IDirect3DRMDevice3_RenderStateChange(p,a,b,c)          (p)->lpVtbl->RenderStateChange(p,a,b,c)
+#define IDirect3DRMDevice3_LightStateChange(p,a,b,c)           (p)->lpVtbl->LightStateChange(p,a,b,c)
+#define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c)      (p)->lpVtbl->GetStateChangeOptions(p,a,b,c)
+#define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c)      (p)->lpVtbl->SetStateChangeOptions(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice3_QueryInterface(p,a,b)               (p)->QueryInterface(a,b)
+#define IDirect3DRMDevice3_AddRef(p)                           (p)->AddRef()
+#define IDirect3DRMDevice3_Release(p)                          (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice3_Clone(p,a,b,c)                      (p)->Clone(a,b,c)
+#define IDirect3DRMDevice3_AddDestroyCallback(p,a,b)           (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b)        (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMDevice3_SetAppData(p,a)                     (p)->SetAppData(a)
+#define IDirect3DRMDevice3_GetAppData(p)                       (p)->GetAppData()
+#define IDirect3DRMDevice3_SetName(p,a)                        (p)->SetName(a)
+#define IDirect3DRMDevice3_GetName(p,a,b)                      (p)->GetName(a,b)
+#define IDirect3DRMDevice3_GetClassName(p,a,b)                 (p)->GetClassName(a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice3_Init(p,a,b)                         (p)->Init(a,b)
+#define IDirect3DRMDevice3_InitFromD3D(p,a,b)                  (p)->InitFromD3D(a,b)
+#define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d)          (p)->InitFromClipper(a,b,c,d)
+#define IDirect3DRMDevice3_Update(p)                           (p)->Update()
+#define IDirect3DRMDevice3_AddUpdateCallback(p,a,b)            (p)->AddUpdateCallback(a,b)
+#define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b)         (p)->DeleteUpdateCallback(a,b)
+#define IDirect3DRMDevice3_SetBufferCount(p,a)                 (p)->SetBufferCount(a)
+#define IDirect3DRMDevice3_GetBufferCount(p)                   (p)->GetBufferCount()
+#define IDirect3DRMDevice3_SetDither(p,a)                      (p)->SetDither(a)
+#define IDirect3DRMDevice3_SetShades(p,a)                      (p)->SetShades(a)
+#define IDirect3DRMDevice3_SetQuality(p,a)                     (p)->SetQuality(a)
+#define IDirect3DRMDevice3_SetTextureQuality(p,a)              (p)->SetTextureQuality(a)
+#define IDirect3DRMDevice3_GetViewports(p,a)                   (p)->GetViewports(a)
+#define IDirect3DRMDevice3_GetDither(p)                        (p)->GetDither()
+#define IDirect3DRMDevice3_GetShades(p)                        (p)->GetShades()
+#define IDirect3DRMDevice3_GetHeight(p)                        (p)->GetHeight()
+#define IDirect3DRMDevice3_GetWidth(p)                         (p)->GetWidth()
+#define IDirect3DRMDevice3_GetTrianglesDrawn(p)                (p)->GetTrianglesDrawn()
+#define IDirect3DRMDevice3_GetWireframeOptions(p)              (p)->GetWireframeOptions()
+#define IDirect3DRMDevice3_GetQuality(p)                       (p)->GetQuality()
+#define IDirect3DRMDevice3_GetColorModel(p)                    (p)->GetColorModel()
+#define IDirect3DRMDevice3_GetTextureQuality(p)                (p)->GetTextureQuality()
+#define IDirect3DRMDevice3_GetDirect3DDevice(p,a)              (p)->GetDirect3DDevice(a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice3_InitFromD3D2(p,a,b)                 (p)->InitFromD3D2(a,b)
+#define IDirect3DRMDevice3_InitFromSurface(p,a,b,c)            (p)->InitFromSurface(a,b,c)
+#define IDirect3DRMDevice3_SetRenderMode(p,a)                  (p)->SetRenderMode(a)
+#define IDirect3DRMDevice3_GetRenderMode(p)                    (p)->GetRenderMode()
+#define IDirect3DRMDevice3_GetDirect3DDevice2(p,a)             (p)->GetDirect3DDevice2(a)
+/*** IDirect3DRMDevice3 methods ***/
+#define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->FindPreferredTextureFormat(a,b,c)
+#define IDirect3DRMDevice3_RenderStateChange(p,a,b,c)          (p)->RenderStateChange(a,b,c)
+#define IDirect3DRMDevice3_LightStateChange(p,a,b,c)           (p)->LightStateChange(a,b,c)
+#define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c)      (p)->GetStateChangeOptions(a,b,c)
+#define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c)      (p)->SetStateChangeOptions(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMViewport interface
+ */
+#define INTERFACE IDirect3DRMViewport
+DECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMViewport methods ***/
+    STDMETHOD(Init) (THIS_ IDirect3DRMDevice *device, struct IDirect3DRMFrame *camera,
+            DWORD x, DWORD y, DWORD width, DWORD height) PURE;
+    STDMETHOD(Clear)(THIS) PURE;
+    STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame *frame) PURE;
+    STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
+    STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame *camera) PURE;
+    STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
+    STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
+    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
+    STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
+    STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
+    STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
+    STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame **camera) PURE;
+    STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice **device) PURE;
+    STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
+    STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE;
+    STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
+    STDMETHOD_(LONG, GetX)(THIS) PURE;
+    STDMETHOD_(LONG, GetY)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
+    STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
+    STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMViewport_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMViewport_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMViewport_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMViewport_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMViewport_GetAppData(p)                (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMViewport_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMViewport_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMViewport_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMViewport methods ***/
+#define IDirect3DRMViewport_Init(p,a,b,c,d)              (p)->lpVtbl->Init(p,a,b,c,d)
+#define IDirect3DRMViewport_Clear(p)                     (p)->lpVtbl->Clear(p)
+#define IDirect3DRMViewport_Render(p,a)                  (p)->lpVtbl->Render(p,a)
+#define IDirect3DRMViewport_SetFront(p,a)                (p)->lpVtbl->SetFront(p,a)
+#define IDirect3DRMViewport_SetBack(p,a)                 (p)->lpVtbl->SetBack(p,a)
+#define IDirect3DRMViewport_SetField(p,a)                (p)->lpVtbl->SetField(p,a)
+#define IDirect3DRMViewport_SetUniformScaling(p,a)       (p)->lpVtbl->SetUniformScaling(p,a)
+#define IDirect3DRMViewport_SetCamera(p,a)               (p)->lpVtbl->SetCamera(p,a)
+#define IDirect3DRMViewport_SetProjection(p,a)           (p)->lpVtbl->SetProjection(p,a)
+#define IDirect3DRMViewport_Transform(p,a,b)             (p)->lpVtbl->Transform(p,a,b)
+#define IDirect3DRMViewport_InverseTransform(p,a,b)      (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMViewport_Configure(p,a,b,c,d)         (p)->lpVtbl->Configure(p,a,b,c,d)
+#define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d)       (p)->lpVtbl->ForceUpdate(p,a,b,c,d)
+#define IDirect3DRMViewport_SetPlane(p,a,b,c,d)          (p)->lpVtbl->SetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport_GetCamera(p,a)               (p)->lpVtbl->GetCamera(p,a)
+#define IDirect3DRMViewport_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DRMViewport_GetPlane(p,a,b,c,d)          (p)->lpVtbl->GetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport_Pick(p,a,b,c)                (p)->lpVtbl->Pick(p,a,b,c)
+#define IDirect3DRMViewport_GetUniformScaling(p)         (p)->lpVtbl->GetUniformScaling(p)
+#define IDirect3DRMViewport_GetX(p)                      (p)->lpVtbl->GetX(p)
+#define IDirect3DRMViewport_GetY(p)                      (p)->lpVtbl->GetY(p)
+#define IDirect3DRMViewport_GetWidth(p)                  (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMViewport_GetHeight(p)                 (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMViewport_GetField(p)                  (p)->lpVtbl->GetField(p)
+#define IDirect3DRMViewport_GetBack(p)                   (p)->lpVtbl->GetBack(p)
+#define IDirect3DRMViewport_GetFront(p)                  (p)->lpVtbl->GetFront(p)
+#define IDirect3DRMViewport_GetProjection(p)             (p)->lpVtbl->GetProjection(p)
+#define IDirect3DRMViewport_GetDirect3DViewport(p,a)     (p)->lpVtbl->GetDirect3DViewport(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMViewport_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMViewport_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMViewport_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMViewport_SetAppData(p,a)              (p)->SetAppData(a)
+#define IDirect3DRMViewport_GetAppData(p)                (p)->GetAppData()
+#define IDirect3DRMViewport_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMViewport_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMViewport_GetClassName(p,a,b)          (p)->GetClassName(a,b)
+/*** IDirect3DRMViewport methods ***/
+#define IDirect3DRMViewport_Init(p,a,b,c,d)              (p)->Init(a,b,c,d)
+#define IDirect3DRMViewport_Clear(p)                     (p)->Clear()
+#define IDirect3DRMViewport_Render(p,a)                  (p)->Render(a)
+#define IDirect3DRMViewport_SetFront(p,a)                (p)->SetFront(a)
+#define IDirect3DRMViewport_SetBack(p,a)                 (p)->SetBack(a)
+#define IDirect3DRMViewport_SetField(p,a)                (p)->SetField(a)
+#define IDirect3DRMViewport_SetUniformScaling(p,a)       (p)->SetUniformScaling(a)
+#define IDirect3DRMViewport_SetCamera(p,a)               (p)->SetCamera(a)
+#define IDirect3DRMViewport_SetProjection(p,a)           (p)->SetProjection(a)
+#define IDirect3DRMViewport_Transform(p,a,b)             (p)->Transform(a,b)
+#define IDirect3DRMViewport_InverseTransform(p,a,b)      (p)->InverseTransform(a,b)
+#define IDirect3DRMViewport_Configure(p,a,b,c,d)         (p)->Configure(a,b,c,d)
+#define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d)       (p)->ForceUpdate(a,b,c,d)
+#define IDirect3DRMViewport_SetPlane(p,a,b,c,d)          (p)->SetPlane(a,b,c,d)
+#define IDirect3DRMViewport_GetCamera(p,a)               (p)->GetCamera(a)
+#define IDirect3DRMViewport_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DRMViewport_GetPlane(p,a,b,c,d)          (p)->GetPlane(a,b,c,d)
+#define IDirect3DRMViewport_Pick(p,a,b,c)                (p)->Pick(a,b,c)
+#define IDirect3DRMViewport_GetUniformScaling(p)         (p)->GetUniformScaling()
+#define IDirect3DRMViewport_GetX(p)                      (p)->GetX()
+#define IDirect3DRMViewport_GetY(p)                      (p)->GetY()
+#define IDirect3DRMViewport_GetWidth(p)                  (p)->GetWidth()
+#define IDirect3DRMViewport_GetHeight(p)                 (p)->GetHeight()
+#define IDirect3DRMViewport_GetField(p)                  (p)->GetField()
+#define IDirect3DRMViewport_GetBack(p)                   (p)->GetBack()
+#define IDirect3DRMViewport_GetFront(p)                  (p)->GetFront()
+#define IDirect3DRMViewport_GetProjection(p)             (p)->GetProjection()
+#define IDirect3DRMViewport_GetDirect3DViewport(p,a)     (p)->GetDirect3DViewport(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMViewport2 interface
+ */
+#define INTERFACE IDirect3DRMViewport2
+DECLARE_INTERFACE_(IDirect3DRMViewport2,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMViewport2 methods ***/
+    STDMETHOD(Init) (THIS_ IDirect3DRMDevice3 *device, struct IDirect3DRMFrame3 *camera,
+            DWORD x, DWORD y, DWORD width, DWORD height) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD flags) PURE;
+    STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame3 *frame) PURE;
+    STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
+    STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame3 *camera) PURE;
+    STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
+    STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
+    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
+    STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
+    STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
+    STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
+    STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame3 **camera) PURE;
+    STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice3 **device) PURE;
+    STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
+    STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE;
+    STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
+    STDMETHOD_(LONG, GetX)(THIS) PURE;
+    STDMETHOD_(LONG, GetY)(THIS) PURE;
+    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
+    STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
+    STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE;
+    STDMETHOD(TransformVectors)(THIS_ DWORD vector_count, D3DRMVECTOR4D *dst_vectors,
+            D3DVECTOR *src_vectors) PURE;
+    STDMETHOD(InverseTransformVectors)(THIS_ DWORD vector_count, D3DVECTOR *dst_vectors,
+            D3DRMVECTOR4D *src_vectors) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMViewport2_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMViewport2_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport_2Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMViewport2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMViewport2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMViewport2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMViewport2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMViewport2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMViewport2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMViewport2 methods ***/
+#define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f)              (p)->lpVtbl->Init(p,a,b,c,d,e,f)
+#define IDirect3DRMViewport2_Clear(p,a)                       (p)->lpVtbl->Clear(p,a)
+#define IDirect3DRMViewport2_Render(p,a)                      (p)->lpVtbl->Render(p,a)
+#define IDirect3DRMViewport2_SetFront(p,a)                    (p)->lpVtbl->SetFront(p,a)
+#define IDirect3DRMViewport2_SetBack(p,a)                     (p)->lpVtbl->SetBack(p,a)
+#define IDirect3DRMViewport2_SetField(p,a)                    (p)->lpVtbl->SetField(p,a)
+#define IDirect3DRMViewport2_SetUniformScaling(p,a)           (p)->lpVtbl->SetUniformScaling(p,a)
+#define IDirect3DRMViewport2_SetCamera(p,a)                   (p)->lpVtbl->SetCamera(p,a)
+#define IDirect3DRMViewport2_SetProjection(p,a)               (p)->lpVtbl->SetProjection(p,a)
+#define IDirect3DRMViewport2_Transform(p,a,b)                 (p)->lpVtbl->Transform(p,a,b)
+#define IDirect3DRMViewport2_InverseTransform(p,a,b)          (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMViewport2_Configure(p,a,b,c,d)             (p)->lpVtbl->Configure(p,a,b,c,d)
+#define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d)           (p)->lpVtbl->ForceUpdate(p,a,b,c,d)
+#define IDirect3DRMViewport2_SetPlane(p,a,b,c,d)              (p)->lpVtbl->SetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport2_GetCamera(p,a)                   (p)->lpVtbl->GetCamera(p,a)
+#define IDirect3DRMViewport2_GetDevice(p,a)                   (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DRMViewport2_GetPlane(p,a,b,c,d)              (p)->lpVtbl->GetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport2_Pick(p,a,b,c)                    (p)->lpVtbl->Pick(p,a,b,c)
+#define IDirect3DRMViewport2_GetUniformScaling(p)             (p)->lpVtbl->GetUniformScaling(p)
+#define IDirect3DRMViewport2_GetX(p)                          (p)->lpVtbl->GetX(p)
+#define IDirect3DRMViewport2_GetY(p)                          (p)->lpVtbl->GetY(p)
+#define IDirect3DRMViewport2_GetWidth(p)                      (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMViewport2_GetHeight(p)                     (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMViewport2_GetField(p)                      (p)->lpVtbl->GetField(p)
+#define IDirect3DRMViewport2_GetBack(p)                       (p)->lpVtbl->GetBack(p)
+#define IDirect3DRMViewport2_GetFront(p)                      (p)->lpVtbl->GetFront(p)
+#define IDirect3DRMViewport2_GetProjection(p)                 (p)->lpVtbl->GetProjection(p)
+#define IDirect3DRMViewport2_GetDirect3DViewport(p,a)         (p)->lpVtbl->GetDirect3DViewport(p,a)
+#define IDirect3DRMViewport2_TransformVectors(p,a,b,c)        (p)->lpVtbl->TransformVectors(p,a,b,c)
+#define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->lpVtbl->InverseTransformVectors(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMViewport2_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMViewport2_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMViewport2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMViewport2_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMViewport2_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMViewport2_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMViewport2_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMViewport2_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMViewport2 methods ***/
+#define IDirect3DRMViewport2_Init(p,a,b,c,d)                  (p)->Init(a,b,c,d)
+#define IDirect3DRMViewport2_Clear(p)                         (p)->Clear()
+#define IDirect3DRMViewport2_Render(p,a)                      (p)->Render(a)
+#define IDirect3DRMViewport2_SetFront(p,a)                    (p)->SetFront(a)
+#define IDirect3DRMViewport2_SetBack(p,a)                     (p)->SetBack(a)
+#define IDirect3DRMViewport2_SetField(p,a)                    (p)->SetField(a)
+#define IDirect3DRMViewport2_SetUniformScaling(p,a)           (p)->SetUniformScaling(a)
+#define IDirect3DRMViewport2_SetCamera(p,a)                   (p)->SetCamera(a)
+#define IDirect3DRMViewport2_SetProjection(p,a)               (p)->SetProjection(a)
+#define IDirect3DRMViewport2_Transform(p,a,b)                 (p)->Transform(a,b)
+#define IDirect3DRMViewport2_InverseTransform(p,a,b)          (p)->InverseTransform(a,b)
+#define IDirect3DRMViewport2_Configure(p,a,b,c,d)             (p)->Configure(a,b,c,d)
+#define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d)           (p)->ForceUpdate(a,b,c,d)
+#define IDirect3DRMViewport2_SetPlane(p,a,b,c,d)              (p)->SetPlane(a,b,c,d)
+#define IDirect3DRMViewport2_GetCamera(p,a)                   (p)->GetCamera(a)
+#define IDirect3DRMViewport2_GetDevice(p,a)                   (p)->GetDevice(a)
+#define IDirect3DRMViewport2_GetPlane(p,a,b,c,d)              (p)->GetPlane(a,b,c,d)
+#define IDirect3DRMViewport2_Pick(p,a,b,c)                    (p)->Pick(a,b,c)
+#define IDirect3DRMViewport2_GetUniformScaling(p)             (p)->GetUniformScaling()
+#define IDirect3DRMViewport2_GetX(p)                          (p)->GetX()
+#define IDirect3DRMViewport2_GetY(p)                          (p)->GetY()
+#define IDirect3DRMViewport2_GetWidth(p)                      (p)->GetWidth()
+#define IDirect3DRMViewport2_GetHeight(p)                     (p)->GetHeight()
+#define IDirect3DRMViewport2_GetField(p)                      (p)->GetField()
+#define IDirect3DRMViewport2_GetBack(p)                       (p)->GetBack()
+#define IDirect3DRMViewport2_GetFront(p)                      (p)->GetFront()
+#define IDirect3DRMViewport2_GetProjection(p)                 (p)->GetProjection()
+#define IDirect3DRMViewport2_GetDirect3DViewport(p,a)         (p)->GetDirect3DViewport(a)
+#define IDirect3DRMViewport2_TransformVectors(p,a,b,c)        (p)->TransformVectors(a,b,c)
+#define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->InverseTransformVectors(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrame interface
+ */
+#define INTERFACE IDirect3DRMFrame
+DECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMFrame methods ***/
+    STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE;
+    STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
+    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+    STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+    STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;
+    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+    STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;
+    STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
+    STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE;
+    STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE;
+    STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;
+    STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE;
+    STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
+    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
+    STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;
+    STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;
+    STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE;
+    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE;
+    STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference,
+            D3DRMFRAMECONSTRAINT constraint) PURE;
+    STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
+    STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE;
+    STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+    STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
+    STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;
+    STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
+    STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
+    STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
+    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
+    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
+    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
+    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
+    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
+    STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;
+    STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference,
+            D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
+    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
+    STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrame_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrame_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFrame_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFrame_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFrame_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFrame_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFrame_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFrame_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame_AddChild(p,a)                    (p)->lpVtbl->AddChild(p,a)
+#define IDirect3DRMFrame_AddLight(p,a)                    (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DRMFrame_AddMoveCallback(p,a,b)           (p)->lpVtbl->AddMoveCallback(p,a,b)
+#define IDirect3DRMFrame_AddTransform(p,a,b)              (p)->lpVtbl->AddTransform(p,a,b)
+#define IDirect3DRMFrame_AddTranslation(p,a,b,c,d)        (p)->lpVtbl->AddTranslation(p,a,b,c,d)
+#define IDirect3DRMFrame_AddScale(p,a,b,c,d)              (p)->lpVtbl->AddScale(p,a,b,c,d)
+#define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e)         (p)->lpVtbl->AddRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame_AddVisual(p,a)                   (p)->lpVtbl->AddVisual(p,a)
+#define IDirect3DRMFrame_GetChildren(p,a)                 (p)->lpVtbl->GetChildren(p,a)
+#define IDirect3DRMFrame_GetColor(p)                      (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMFrame_GetLights(p,a)                   (p)->lpVtbl->GetLights(p,a)
+#define IDirect3DRMFrame_GetMaterialMode(p)               (p)->lpVtbl->GetMaterialMode(p)
+#define IDirect3DRMFrame_GetParent(p,a)                   (p)->lpVtbl->GetParent(p,a)
+#define IDirect3DRMFrame_GetPosition(p,a,b)               (p)->lpVtbl->GetPosition(p,a,b)
+#define IDirect3DRMFrame_GetRotation(p,a,b,c)             (p)->lpVtbl->GetRotation(p,a,b,c)
+#define IDirect3DRMFrame_GetScene(p,a)                    (p)->lpVtbl->GetScene(p,a)
+#define IDirect3DRMFrame_GetSortMode(p)                   (p)->lpVtbl->GetSortMode(p)
+#define IDirect3DRMFrame_GetTexture(p,a)                  (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFrame_GetTransform(p,a)                (p)->lpVtbl->GetTransform(p,a)
+#define IDirect3DRMFrame_GetVelocity(p,a,b,c)             (p)->lpVtbl->GetVelocity(p,a,b,c)
+#define IDirect3DRMFrame_GetOrientation(p,a,b,c)          (p)->lpVtbl->GetOrientation(p,a,b,c)
+#define IDirect3DRMFrame_GetVisuals(p,a)                  (p)->lpVtbl->GetVisuals(p,a)
+#define IDirect3DRMFrame_GetTextureTopology(p,a,b)        (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFrame_InverseTransform(p,a,b)          (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMFrame_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMFrame_LookAt(p,a,b,c)                  (p)->lpVtbl->LookAt(p,a,b,c)
+#define IDirect3DRMFrame_Move(p,a)                        (p)->lpVtbl->Move(p,a)
+#define IDirect3DRMFrame_DeleteChild(p,a)                 (p)->lpVtbl->DeleteChild(p,a)
+#define IDirect3DRMFrame_DeleteLight(p,a)                 (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DRMFrame_DeleteMoveCallback(p,a,b)        (p)->lpVtbl->DeleteMoveCallback(p,a,b)
+#define IDirect3DRMFrame_DeleteVisual(p,a)                (p)->lpVtbl->DeleteVisual(p,a)
+#define IDirect3DRMFrame_GetSceneBackground(p)            (p)->lpVtbl->GetSceneBackground(p)
+#define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a)     (p)->lpVtbl->GetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame_GetSceneFogColor(p)              (p)->lpVtbl->GetSceneFogColor(p)
+#define IDirect3DRMFrame_GetSceneFogEnable(p)             (p)->lpVtbl->GetSceneFogEnable(p)
+#define IDirect3DRMFrame_GetSceneFogMode(p)               (p)->lpVtbl->GetSceneFogMode(p)
+#define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c)       (p)->lpVtbl->GetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame_SetSceneBackground(p,a)          (p)->lpVtbl->SetSceneBackground(p,a)
+#define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c)   (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)
+#define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a)     (p)->lpVtbl->SetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame_SetSceneBackgroundImage(p,a)     (p)->lpVtbl->SetSceneBackgroundImage(p,a)
+#define IDirect3DRMFrame_SetSceneFogEnable(p,a)           (p)->lpVtbl->SetSceneFogEnable(p,a)
+#define IDirect3DRMFrame_SetSceneFogColor(p,a)            (p)->lpVtbl->SetSceneFogColor(p,a)
+#define IDirect3DRMFrame_SetSceneFogMode(p,a)             (p)->lpVtbl->SetSceneFogMode(p,a)
+#define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c)       (p)->lpVtbl->SetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFrame_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFrame_GetZbufferMode(p)                (p)->lpVtbl->GetZbufferMode(p)
+#define IDirect3DRMFrame_SetMaterialMode(p,a)             (p)->lpVtbl->SetMaterialMode(p,a)
+#define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g)  (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirect3DRMFrame_SetPosition(p,a,b,c,d)           (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e)         (p)->lpVtbl->SetRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame_SetSortMode(p,a)                 (p)->lpVtbl->SetSortMode(p,a)
+#define IDirect3DRMFrame_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFrame_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e)         (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)
+#define IDirect3DRMFrame_SetZbufferMode(p,a)              (p)->lpVtbl->SetZbufferMode(p,a)
+#define IDirect3DRMFrame_Transform(p,a,b)                 (p)->lpVtbl->Transform(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMFrame_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMFrame_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMFrame_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFrame_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMFrame_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMFrame_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMFrame_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMFrame_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame_AddChild(p,a)                    (p)->AddChild(a)
+#define IDirect3DRMFrame_AddLight(p,a)                    (p)->AddLight(a)
+#define IDirect3DRMFrame_AddMoveCallback(p,a,b)           (p)->AddMoveCallback(a,b)
+#define IDirect3DRMFrame_AddTransform(p,a,b)              (p)->AddTransform(a,b)
+#define IDirect3DRMFrame_AddTranslation(p,a,b,c,d)        (p)->AddTranslation(a,b,c,d)
+#define IDirect3DRMFrame_AddScale(p,a,b,c,d)              (p)->AddScale(a,b,c,d)
+#define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e)         (p)->AddRotation(a,b,c,d,e)
+#define IDirect3DRMFrame_AddVisual(p,a)                   (p)->AddVisual(a)
+#define IDirect3DRMFrame_GetChildren(p,a)                 (p)->GetChildren(a)
+#define IDirect3DRMFrame_GetColor(p)                      (p)->GetColor()
+#define IDirect3DRMFrame_GetLights(p,a)                   (p)->GetLights(a)
+#define IDirect3DRMFrame_GetMaterialMode(p)               (p)->GetMaterialMode()
+#define IDirect3DRMFrame_GetParent(p,a)                   (p)->GetParent(a)
+#define IDirect3DRMFrame_GetPosition(p,a,b)               (p)->GetPosition(a,b)
+#define IDirect3DRMFrame_GetRotation(p,a,b,c)             (p)->GetRotation(a,b,c)
+#define IDirect3DRMFrame_GetScene(p,a)                    (p)->GetScene(a)
+#define IDirect3DRMFrame_GetSortMode(p)                   (p)->GetSortMode()
+#define IDirect3DRMFrame_GetTexture(p,a)                  (p)->GetTexture(a)
+#define IDirect3DRMFrame_GetTransform(p,a)                (p)->GetTransform(a)
+#define IDirect3DRMFrame_GetVelocity(p,a,b,c)             (p)->GetVelocity(a,b,c)
+#define IDirect3DRMFrame_GetOrientation(p,a,b,c)          (p)->GetOrientation(a,b,c)
+#define IDirect3DRMFrame_GetVisuals(p,a)                  (p)->GetVisuals(a)
+#define IDirect3DRMFrame_GetTextureTopology(p,a,b)        (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFrame_InverseTransform(p,a,b)          (p)->InverseTransform(a,b)
+#define IDirect3DRMFrame_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)
+#define IDirect3DRMFrame_LookAt(p,a,b,c)                  (p)->LookAt(a,b,c)
+#define IDirect3DRMFrame_Move(p,a)                        (p)->Move(a)
+#define IDirect3DRMFrame_DeleteChild(p,a)                 (p)->DeleteChild(a)
+#define IDirect3DRMFrame_DeleteLight(p,a)                 (p)->DeleteLight(a)
+#define IDirect3DRMFrame_DeleteMoveCallback(p,a,b)        (p)->DeleteMoveCallback(a,b)
+#define IDirect3DRMFrame_DeleteVisual(p,a)                (p)->DeleteVisual(a)
+#define IDirect3DRMFrame_GetSceneBackground(p)            (p)->GetSceneBackground()
+#define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a)     (p)->GetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame_GetSceneFogColor(p)              (p)->GetSceneFogColor()
+#define IDirect3DRMFrame_GetSceneFogEnable(p)             (p)->GetSceneFogEnable()
+#define IDirect3DRMFrame_GetSceneFogMode(p)               (p)->GetSceneFogMode()
+#define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c)       (p)->GetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame_SetSceneBackground(p,a)          (p)->SetSceneBackground(a)
+#define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c)   (p)->SetSceneBackgroundRGB(a,b,c)
+#define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a)     (p)->SetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame_SetSceneBackgroundImage(p,a)     (p)->SetSceneBackgroundImage(a)
+#define IDirect3DRMFrame_SetSceneFogEnable(p,a)           (p)->SetSceneFogEnable(a)
+#define IDirect3DRMFrame_SetSceneFogColor(p,a)            (p)->SetSceneFogColor(a)
+#define IDirect3DRMFrame_SetSceneFogMode(p,a)             (p)->SetSceneFogMode(a)
+#define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c)       (p)->SetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame_SetColor(p,a)                    (p)->SetColor(a)
+#define IDirect3DRMFrame_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFrame_GetZbufferMode(p)                (p)->GetZbufferMode()
+#define IDirect3DRMFrame_SetMaterialMode(p,a)             (p)->SetMaterialMode(a)
+#define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g)  (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirect3DRMFrame_SetPosition(p,a,b,c,d)           (p)->SetPosition(a,b,c,d)
+#define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e)         (p)->SetRotation(a,b,c,d,e)
+#define IDirect3DRMFrame_SetSortMode(p,a)                 (p)->SetSortMode(a)
+#define IDirect3DRMFrame_SetTexture(p,a)                  (p)->SetTexture(a)
+#define IDirect3DRMFrame_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e)         (p)->SetVelocity(a,b,c,d,e)
+#define IDirect3DRMFrame_SetZbufferMode(p,a)              (p)->SetZbufferMode(a)
+#define IDirect3DRMFrame_Transform(p,a,b)                 (p)->Transform(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrame2 interface
+ */
+#define INTERFACE IDirect3DRMFrame2
+DECLARE_INTERFACE_(IDirect3DRMFrame2,IDirect3DRMFrame)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMFrame methods ***/
+    STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE;
+    STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
+    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+    STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+    STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;
+    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+    STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;
+    STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
+    STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE;
+    STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE;
+    STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;
+    STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE;
+    STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
+    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
+    STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;
+    STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;
+    STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE;
+    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE;
+    STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference,
+            D3DRMFRAMECONSTRAINT constraint) PURE;
+    STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
+    STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE;
+    STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+    STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
+    STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;
+    STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
+    STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
+    STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
+    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
+    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
+    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
+    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
+    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
+    STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;
+    STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference,
+            D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
+    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
+    STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+    /*** IDirect3DRMFrame2 methods ***/
+    STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx, DWORD flags) PURE;
+    STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;
+    STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up);
+    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE;
+    STDMETHOD_(BOOL, GetInheritAxes)(THIS);
+    STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
+    STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);
+    STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+    STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame *reference, D3DRMQUATERNION *q) PURE;
+    STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame *reference, D3DRMRAY *ray, DWORD flags,
+            struct IDirect3DRMPicked2Array **return_visuals) PURE;
+    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags);
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrame2_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrame2_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame2_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFrame2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFrame2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFrame2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFrame2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFrame2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFrame2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame2_AddChild(p,a)                    (p)->lpVtbl->AddChild(p,a)
+#define IDirect3DRMFrame2_AddLight(p,a)                    (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DRMFrame2_AddMoveCallback(p,a,b)           (p)->lpVtbl->AddMoveCallback(p,a,b)
+#define IDirect3DRMFrame2_AddTransform(p,a,b)              (p)->lpVtbl->AddTransform(p,a,b)
+#define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d)        (p)->lpVtbl->AddTranslation(p,a,b,c,d)
+#define IDirect3DRMFrame2_AddScale(p,a,b,c,d)              (p)->lpVtbl->AddScale(p,a,b,c,d)
+#define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e)         (p)->lpVtbl->AddRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_AddVisual(p,a)                   (p)->lpVtbl->AddVisual(p,a)
+#define IDirect3DRMFrame2_GetChildren(p,a)                 (p)->lpVtbl->GetChildren(p,a)
+#define IDirect3DRMFrame2_GetColor(p)                      (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMFrame2_GetLights(p,a)                   (p)->lpVtbl->GetLights(p,a)
+#define IDirect3DRMFrame2_GetMaterialMode(p)               (p)->lpVtbl->GetMaterialMode(p)
+#define IDirect3DRMFrame2_GetParent(p,a)                   (p)->lpVtbl->GetParent(p,a)
+#define IDirect3DRMFrame2_GetPosition(p,a,b)               (p)->lpVtbl->GetPosition(p,a,b)
+#define IDirect3DRMFrame2_GetRotation(p,a,b,c)             (p)->lpVtbl->GetRotation(p,a,b,c)
+#define IDirect3DRMFrame2_GetScene(p,a)                    (p)->lpVtbl->GetScene(p,a)
+#define IDirect3DRMFrame2_GetSortMode(p)                   (p)->lpVtbl->GetSortMode(p)
+#define IDirect3DRMFrame2_GetTexture(p,a)                  (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFrame2_GetTransform(p,a)                (p)->lpVtbl->GetTransform(p,a)
+#define IDirect3DRMFrame2_GetVelocity(p,a,b,c)             (p)->lpVtbl->GetVelocity(p,a,b,c)
+#define IDirect3DRMFrame2_GetOrientation(p,a,b,c)          (p)->lpVtbl->GetOrientation(p,a,b,c)
+#define IDirect3DRMFrame2_GetVisuals(p,a)                  (p)->lpVtbl->GetVisuals(p,a)
+#define IDirect3DRMFrame2_GetTextureTopology(p,a,b)        (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFrame2_InverseTransform(p,a,b)          (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMFrame2_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_LookAt(p,a,b,c)                  (p)->lpVtbl->LookAt(p,a,b,c)
+#define IDirect3DRMFrame2_Move(p,a)                        (p)->lpVtbl->Move(p,a)
+#define IDirect3DRMFrame2_DeleteChild(p,a)                 (p)->lpVtbl->DeleteChild(p,a)
+#define IDirect3DRMFrame2_DeleteLight(p,a)                 (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b)        (p)->lpVtbl->DeleteMoveCallback(p,a,b)
+#define IDirect3DRMFrame2_DeleteVisual(p,a)                (p)->lpVtbl->DeleteVisual(p,a)
+#define IDirect3DRMFrame2_GetSceneBackground(p)            (p)->lpVtbl->GetSceneBackground(p)
+#define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a)     (p)->lpVtbl->GetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame2_GetSceneFogColor(p)              (p)->lpVtbl->GetSceneFogColor(p)
+#define IDirect3DRMFrame2_GetSceneFogEnable(p)             (p)->lpVtbl->GetSceneFogEnable(p)
+#define IDirect3DRMFrame2_GetSceneFogMode(p)               (p)->lpVtbl->GetSceneFogMode(p)
+#define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c)       (p)->lpVtbl->GetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackground(p,a)          (p)->lpVtbl->SetSceneBackground(p,a)
+#define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c)   (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a)     (p)->lpVtbl->SetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a)     (p)->lpVtbl->SetSceneBackgroundImage(p,a)
+#define IDirect3DRMFrame2_SetSceneFogEnable(p,a)           (p)->lpVtbl->SetSceneFogEnable(p,a)
+#define IDirect3DRMFrame2_SetSceneFogColor(p,a)            (p)->lpVtbl->SetSceneFogColor(p,a)
+#define IDirect3DRMFrame2_SetSceneFogMode(p,a)             (p)->lpVtbl->SetSceneFogMode(p,a)
+#define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c)       (p)->lpVtbl->SetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame2_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFrame2_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFrame2_GetZbufferMode(p)                (p)->lpVtbl->GetZbufferMode(p)
+#define IDirect3DRMFrame2_SetMaterialMode(p,a)             (p)->lpVtbl->SetMaterialMode(p,a)
+#define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g)  (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirect3DRMFrame2_SetPosition(p,a,b,c,d)           (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e)         (p)->lpVtbl->SetRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_SetSortMode(p,a)                 (p)->lpVtbl->SetSortMode(p,a)
+#define IDirect3DRMFrame2_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFrame2_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e)         (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_SetZbufferMode(p,a)              (p)->lpVtbl->SetZbufferMode(p,a)
+#define IDirect3DRMFrame2_Transform(p,a,b)                 (p)->lpVtbl->Transform(p,a,b)
+/*** IDirect3DRMFrame2 methods ***/
+#define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c)        (p)->lpVtbl->AddMoveCallback2(p,a,b,c)
+#define IDirect3DRMFrame2_GetBox(p,a)                      (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMFrame2_GetBoxEnable(p)                  (p)->lpVtbl->GetBoxEnable(p)
+#define IDirect3DRMFrame2_GetAxes(p,a,b)                   (p)->lpVtbl->GetAxes(p,a,b)
+#define IDirect3DRMFrame2_GetMaterial(p,a)                 (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DRMFrame2_GetInheritAxes(p,a,b)            (p)->lpVtbl->GetInheritAxes(p,a,b)
+#define IDirect3DRMFrame2_GetHierarchyBox(p,a)             (p)->lpVtbl->GetHierarchyBox(p,a)
+#define IDirect3DRMFrame2_SetBox(p,a)                      (p)->lpVtbl->SetBox(p,a)
+#define IDirect3DRMFrame2_SetBoxEnable(p,a)                (p)->lpVtbl->SetBoxEnable(p,a)
+#define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f)           (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f)
+#define IDirect3DRMFrame2_SetInheritAxes(p,a)              (p)->lpVtbl->SetInheritAxes(p,a)
+#define IDirect3DRMFrame2_SetMaterial(p,a)                 (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFrame2_SetQuaternion(p,a,b)             (p)->lpVtbl->SetQuaternion(p,a,b)
+#define IDirect3DRMFrame2_RayPick(p,a,b,c,d)               (p)->lpVtbl->RayPick(p,a,b,c,d)
+#define IDirect3DRMFrame2_Save(p,a,b,c)                    (p)->lpVtbl->Save(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMFrame2_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMFrame2_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMFrame2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFrame2_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMFrame2_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMFrame2_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMFrame2_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMFrame2_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame2_AddChild(p,a)                    (p)->AddChild(a)
+#define IDirect3DRMFrame2_AddLight(p,a)                    (p)->AddLight(a)
+#define IDirect3DRMFrame2_AddMoveCallback(p,a,b)           (p)->AddMoveCallback(a,b)
+#define IDirect3DRMFrame2_AddTransform(p,a,b)              (p)->AddTransform(a,b)
+#define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d)        (p)->AddTranslation(a,b,c,d)
+#define IDirect3DRMFrame2_AddScale(p,a,b,c,d)              (p)->AddScale(a,b,c,d)
+#define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e)         (p)->AddRotation(a,b,c,d,e)
+#define IDirect3DRMFrame2_AddVisual(p,a)                   (p)->AddVisual(a)
+#define IDirect3DRMFrame2_GetChildren(p,a)                 (p)->GetChildren(a)
+#define IDirect3DRMFrame2_GetColor(p)                      (p)->GetColor()
+#define IDirect3DRMFrame2_GetLights(p,a)                   (p)->GetLights(a)
+#define IDirect3DRMFrame2_GetMaterialMode(p)               (p)->GetMaterialMode()
+#define IDirect3DRMFrame2_GetParent(p,a)                   (p)->GetParent(a)
+#define IDirect3DRMFrame2_GetPosition(p,a,b)               (p)->GetPosition(a,b)
+#define IDirect3DRMFrame2_GetRotation(p,a,b,c)             (p)->GetRotation(a,b,c)
+#define IDirect3DRMFrame2_GetScene(p,a)                    (p)->GetScene(a)
+#define IDirect3DRMFrame2_GetSortMode(p)                   (p)->GetSortMode()
+#define IDirect3DRMFrame2_GetTexture(p,a)                  (p)->GetTexture(a)
+#define IDirect3DRMFrame2_GetTransform(p,a)                (p)->GetTransform(a)
+#define IDirect3DRMFrame2_GetVelocity(p,a,b,c)             (p)->GetVelocity(a,b,c)
+#define IDirect3DRMFrame2_GetOrientation(p,a,b,c)          (p)->GetOrientation(a,b,c)
+#define IDirect3DRMFrame2_GetVisuals(p,a)                  (p)->GetVisuals(a)
+#define IDirect3DRMFrame2_GetTextureTopology(p,a,b)        (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFrame2_InverseTransform(p,a,b)          (p)->InverseTransform(a,b)
+#define IDirect3DRMFrame2_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)
+#define IDirect3DRMFrame2_LookAt(p,a,b,c)                  (p)->LookAt(a,b,c)
+#define IDirect3DRMFrame2_Move(p,a)                        (p)->Move(a)
+#define IDirect3DRMFrame2_DeleteChild(p,a)                 (p)->DeleteChild(a)
+#define IDirect3DRMFrame2_DeleteLight(p,a)                 (p)->DeleteLight(a)
+#define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b)        (p)->DeleteMoveCallback(a,b)
+#define IDirect3DRMFrame2_DeleteVisual(p,a)                (p)->DeleteVisual(a)
+#define IDirect3DRMFrame2_GetSceneBackground(p)            (p)->GetSceneBackground()
+#define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a)     (p)->GetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame2_GetSceneFogColor(p)              (p)->GetSceneFogColor()
+#define IDirect3DRMFrame2_GetSceneFogEnable(p)             (p)->GetSceneFogEnable()
+#define IDirect3DRMFrame2_GetSceneFogMode(p)               (p)->GetSceneFogMode()
+#define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c)       (p)->GetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackground(p,a)          (p)->SetSceneBackground(a)
+#define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c)   (p)->SetSceneBackgroundRGB(a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a)     (p)->SetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a)     (p)->SetSceneBackgroundImage(a)
+#define IDirect3DRMFrame2_SetSceneFogEnable(p,a)           (p)->SetSceneFogEnable(a)
+#define IDirect3DRMFrame2_SetSceneFogColor(p,a)            (p)->SetSceneFogColor(a)
+#define IDirect3DRMFrame2_SetSceneFogMode(p,a)             (p)->SetSceneFogMode(a)
+#define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c)       (p)->SetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame2_SetColor(p,a)                    (p)->SetColor(a)
+#define IDirect3DRMFrame2_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFrame2_GetZbufferMode(p)                (p)->GetZbufferMode()
+#define IDirect3DRMFrame2_SetMaterialMode(p,a)             (p)->SetMaterialMode(a)
+#define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g)  (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirect3DRMFrame2_SetPosition(p,a,b,c,d)           (p)->SetPosition(a,b,c,d)
+#define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e)         (p)->SetRotation(a,b,c,d,e)
+#define IDirect3DRMFrame2_SetSortMode(p,a)                 (p)->SetSortMode(a)
+#define IDirect3DRMFrame2_SetTexture(p,a)                  (p)->SetTexture(a)
+#define IDirect3DRMFrame2_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e)         (p)->SetVelocity(a,b,c,d,e)
+#define IDirect3DRMFrame2_SetZbufferMode(p,a)              (p)->SetZbufferMode(a)
+#define IDirect3DRMFrame2_Transform(p,a,b)                 (p)->Transform(a,b)
+/*** IDirect3DRMFrame2 methods ***/
+#define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c)        (p)->AddMoveCallback2(a,b,c)
+#define IDirect3DRMFrame2_GetBox(p,a)                      (p)->GetBox(a)
+#define IDirect3DRMFrame2_GetBoxEnable(p)                  (p)->GetBoxEnable()
+#define IDirect3DRMFrame2_GetAxes(p,a,b)                   (p)->GetAxes(a,b)
+#define IDirect3DRMFrame2_GetMaterial(p,a)                 (p)->GetMaterial(a)
+#define IDirect3DRMFrame2_GetInheritAxes(p,a,b)            (p)->GetInheritAxes(a,b)
+#define IDirect3DRMFrame2_GetHierarchyBox(p,a)             (p)->GetHierarchyBox(a)
+#define IDirect3DRMFrame2_SetBox(p,a)                      (p)->SetBox(a)
+#define IDirect3DRMFrame2_SetBoxEnable(p,a)                (p)->SetBoxEnable(a)
+#define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f)           (p)->SetAxes(a,b,c,d,e,f)
+#define IDirect3DRMFrame2_SetInheritAxes(p,a)              (p)->SetInheritAxes(a)
+#define IDirect3DRMFrame2_SetMaterial(p,a)                 (p)->SetMaterial(a)
+#define IDirect3DRMFrame2_SetQuaternion(p,a,b)             (p)->SetQuaternion(a,b)
+#define IDirect3DRMFrame2_RayPick(p,a,b,c,d)               (p)->RayPick(a,b,c,d)
+#define IDirect3DRMFrame2_Save(p,a,b,c)                    (p)->Save(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrame3 interface
+ */
+#define INTERFACE IDirect3DRMFrame3
+DECLARE_INTERFACE_(IDirect3DRMFrame3,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMFrame3 methods ***/
+    STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame3 *child) PURE;
+    STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx, DWORD flags) PURE;
+    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
+    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+    STDMETHOD(AddVisual)(THIS_ IUnknown *visual) PURE;
+    STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;
+    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+    STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;
+    STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
+    STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame3 **parent) PURE;
+    STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_position) PURE;
+    STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;
+    STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame3 **scene) PURE;
+    STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
+    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE;
+    STDMETHOD(GetTransform)(THIS_ IDirect3DRMFrame3 *reference, D3DRMMATRIX4D matrix) PURE;
+    STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;
+    STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;
+    STDMETHOD(GetVisuals)(THIS_ DWORD *count, IUnknown **visuals) PURE;
+    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE;
+    STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame3 *target, IDirect3DRMFrame3 *reference,
+            D3DRMFRAMECONSTRAINT constraint) PURE;
+    STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
+    STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame3 *child) PURE;
+    STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteVisual)(THIS_ IUnknown *visual) PURE;
+    STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
+    STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;
+    STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
+    STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
+    STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
+    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end,
+        D3DVALUE *return_density) PURE;
+    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
+    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
+    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
+    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
+    STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;
+    STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame3 *reference,
+            D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+    STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame3 *reference,
+            D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
+    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
+    STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+    STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;
+    STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up);
+    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE;
+    STDMETHOD_(BOOL, GetInheritAxes)(THIS);
+    STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
+    STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);
+    STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;
+    STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame3 *reference, D3DRMQUATERNION *q) PURE;
+    STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame3 *reference, D3DRMRAY *ray, DWORD flags,
+            struct IDirect3DRMPicked2Array **return_visuals) PURE;
+    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags);
+    STDMETHOD(TransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count,
+            D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE;
+    STDMETHOD(InverseTransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count,
+            D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE;
+    STDMETHOD(SetTraversalOptions)(THIS_ DWORD flags) PURE;
+    STDMETHOD(GetTraversalOptions)(THIS_ DWORD *flags) PURE;
+    STDMETHOD(SetSceneFogMethod)(THIS_ DWORD flags) PURE;
+    STDMETHOD(GetSceneFogMethod)(THIS_ DWORD *fog_mode) PURE;
+    STDMETHOD(SetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE;
+    STDMETHOD(GetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame3_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrame3_AddRef(p)                          (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrame3_Release(p)                         (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame3_Clone(p,a,b,c)                     (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFrame3_AddDestroyCallback(p,a,b)          (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b)       (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFrame3_SetAppData(p,a)                    (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFrame3_GetAppData(p)                      (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFrame3_SetName(p,a)                       (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFrame3_GetName(p,a,b)                     (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFrame3_GetClassName(p,a,b)                (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFrame3 methods ***/
+#define IDirect3DRMFrame3_AddChild(p,a)                      (p)->lpVtbl->AddChild(p,a)
+#define IDirect3DRMFrame3_AddLight(p,a)                      (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c)           (p)->lpVtbl->AddMoveCallback(p,a,b,c)
+#define IDirect3DRMFrame3_AddTransform(p,a,b)                (p)->lpVtbl->AddTransform(p,a,b)
+#define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d)          (p)->lpVtbl->AddTranslation(p,a,b,c,d)
+#define IDirect3DRMFrame3_AddScale(p,a,b,c,d)                (p)->lpVtbl->AddScale(p,a,b,c,d)
+#define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e)           (p)->lpVtbl->AddRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_AddVisual(p,a)                     (p)->lpVtbl->AddVisual(p,a)
+#define IDirect3DRMFrame3_GetChildren(p,a)                   (p)->lpVtbl->GetChildren(p,a)
+#define IDirect3DRMFrame3_GetColor(p)                        (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMFrame3_GetLights(p,a)                     (p)->lpVtbl->GetLights(p,a)
+#define IDirect3DRMFrame3_GetMaterialMode(p)                 (p)->lpVtbl->GetMaterialMode(p)
+#define IDirect3DRMFrame3_GetParent(p,a)                     (p)->lpVtbl->GetParent(p,a)
+#define IDirect3DRMFrame3_GetPosition(p,a,b)                 (p)->lpVtbl->GetPosition(p,a,b)
+#define IDirect3DRMFrame3_GetRotation(p,a,b,c)               (p)->lpVtbl->GetRotation(p,a,b,c)
+#define IDirect3DRMFrame3_GetScene(p,a)                      (p)->lpVtbl->GetScene(p,a)
+#define IDirect3DRMFrame3_GetSortMode(p)                     (p)->lpVtbl->GetSortMode(p)
+#define IDirect3DRMFrame3_GetTexture(p,a)                    (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFrame3_GetTransform(p,a,b)                (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DRMFrame3_GetVelocity(p,a,b,c)               (p)->lpVtbl->GetVelocity(p,a,b,c)
+#define IDirect3DRMFrame3_GetOrientation(p,a,b,c)            (p)->lpVtbl->GetOrientation(p,a,b,c)
+#define IDirect3DRMFrame3_GetVisuals(p,a,b)                  (p)->lpVtbl->GetVisuals(p,a,b)
+#define IDirect3DRMFrame3_InverseTransform(p,a,b)            (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMFrame3_Load(p,a,b,c,d,e)                  (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_LookAt(p,a,b,c)                    (p)->lpVtbl->LookAt(p,a,b,c)
+#define IDirect3DRMFrame3_Move(p,a)                          (p)->lpVtbl->Move(p,a)
+#define IDirect3DRMFrame3_DeleteChild(p,a)                   (p)->lpVtbl->DeleteChild(p,a)
+#define IDirect3DRMFrame3_DeleteLight(p,a)                   (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b)          (p)->lpVtbl->DeleteMoveCallback(p,a,b)
+#define IDirect3DRMFrame3_DeleteVisual(p,a)                  (p)->lpVtbl->DeleteVisual(p,a)
+#define IDirect3DRMFrame3_GetSceneBackground(p)              (p)->lpVtbl->GetSceneBackground(p)
+#define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a)       (p)->lpVtbl->GetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame3_GetSceneFogColor(p)                (p)->lpVtbl->GetSceneFogColor(p)
+#define IDirect3DRMFrame3_GetSceneFogEnable(p)               (p)->lpVtbl->GetSceneFogEnable(p)
+#define IDirect3DRMFrame3_GetSceneFogMode(p)                 (p)->lpVtbl->GetSceneFogMode(p)
+#define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c)         (p)->lpVtbl->GetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackground(p,a)            (p)->lpVtbl->SetSceneBackground(p,a)
+#define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c)     (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a)       (p)->lpVtbl->SetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a)       (p)->lpVtbl->SetSceneBackgroundImage(p,a)
+#define IDirect3DRMFrame3_SetSceneFogEnable(p,a)             (p)->lpVtbl->SetSceneFogEnable(p,a)
+#define IDirect3DRMFrame3_SetSceneFogColor(p,a)              (p)->lpVtbl->SetSceneFogColor(p,a)
+#define IDirect3DRMFrame3_SetSceneFogMode(p,a)               (p)->lpVtbl->SetSceneFogMode(p,a)
+#define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c)         (p)->lpVtbl->SetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame3_SetColor(p,a)                      (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFrame3_SetColorRGB(p,a,b,c)               (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFrame3_GetZbufferMode(p)                  (p)->lpVtbl->GetZbufferMode(p)
+#define IDirect3DRMFrame3_SetMaterialMode(p,a)               (p)->lpVtbl->SetMaterialMode(p,a)
+#define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g)    (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirect3DRMFrame3_SetPosition(p,a,b,c,d)             (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e)           (p)->lpVtbl->SetRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_SetSortMode(p,a)                   (p)->lpVtbl->SetSortMode(p,a)
+#define IDirect3DRMFrame3_SetTexture(p,a)                    (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e)           (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_SetZbufferMode(p,a)                (p)->lpVtbl->SetZbufferMode(p,a)
+#define IDirect3DRMFrame3_Transform(p,a,b)                   (p)->lpVtbl->Transform(p,a,b)
+#define IDirect3DRMFrame3_GetBox(p,a)                        (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMFrame3_GetBoxEnable(p)                    (p)->lpVtbl->GetBoxEnable(p)
+#define IDirect3DRMFrame3_GetAxes(p,a,b)                     (p)->lpVtbl->GetAxes(p,a,b)
+#define IDirect3DRMFrame3_GetMaterial(p,a)                   (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DRMFrame3_GetInheritAxes(p)                  (p)->lpVtbl->GetInheritAxes(p)
+#define IDirect3DRMFrame3_GetHierarchyBox(p,a)               (p)->lpVtbl->GetHierarchyBox(p,a)
+#define IDirect3DRMFrame3_SetBox(p,a)                        (p)->lpVtbl->SetBox(p,a)
+#define IDirect3DRMFrame3_SetBoxEnable(p,a)                  (p)->lpVtbl->SetBoxEnable(p,a)
+#define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f)             (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f)
+#define IDirect3DRMFrame3_SetInheritAxes(p,a)                (p)->lpVtbl->SetInheritAxes(p,a)
+#define IDirect3DRMFrame3_SetMaterial(p,a)                   (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFrame3_SetQuaternion(p,a,b)               (p)->lpVtbl->SetQuaternion(p,a,b)
+#define IDirect3DRMFrame3_RayPick(p,a,b,c,d)                 (p)->lpVtbl->RayPick(p,a,b,c,d)
+#define IDirect3DRMFrame3_Save(p,a,b,c)                      (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d)        (p)->lpVtbl->TransformVectors(p,a,b,c,d)
+#define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->lpVtbl->InverseTransformVectors(p,a,b,c,d)
+#define IDirect3DRMFrame3_SetTraversalOptions(p,a)           (p)->lpVtbl->SetTraversalOptions(p,a)
+#define IDirect3DRMFrame3_GetTraversalOptions(p,a)           (p)->lpVtbl->GetTraversalOptions(p,a)
+#define IDirect3DRMFrame3_SetSceneFogMethod(p,a)             (p)->lpVtbl->SetSceneFogMethod(p,a)
+#define IDirect3DRMFrame3_GetSceneFogMethod(p,a)             (p)->lpVtbl->GetSceneFogMethod(p,a)
+#define IDirect3DRMFrame3_SetMaterialOverride(p,a)           (p)->lpVtbl->SetMaterialOverride(p,a)
+#define IDirect3DRMFrame3_GetMaterialOverride(p,a)           (p)->lpVtbl->GetMaterialOverride(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame3_QueryInterface(p,a,b)              (p)->QueryInterface(a,b)
+#define IDirect3DRMFrame3_AddRef(p)                          (p)->AddRef()
+#define IDirect3DRMFrame3_Release(p)                         (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame3_Clone(p,a,b,c)                     (p)->Clone(a,b,c)
+#define IDirect3DRMFrame3_AddDestroyCallback(p,a,b)          (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b)       (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFrame3_SetAppData(p,a)                    (p)->SetAppData(a)
+#define IDirect3DRMFrame3_GetAppData(p)                      (p)->GetAppData()
+#define IDirect3DRMFrame3_SetName(p,a)                       (p)->SetName(a)
+#define IDirect3DRMFrame3_GetName(p,a,b)                     (p)->GetName(a,b)
+#define IDirect3DRMFrame3_GetClassName(p,a,b)                (p)->GetClassName(a,b)
+/*** IDirect3DRMFrame3 methods ***/
+#define IDirect3DRMFrame3_AddChild(p,a)                      (p)->AddChild(a)
+#define IDirect3DRMFrame3_AddLight(p,a)                      (p)->AddLight(a)
+#define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c)           (p)->AddMoveCallback(a,b,c)
+#define IDirect3DRMFrame3_AddTransform(p,a,b)                (p)->AddTransform(a,b)
+#define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d)          (p)->AddTranslation(a,b,c,d)
+#define IDirect3DRMFrame3_AddScale(p,a,b,c,d)                (p)->AddScale(a,b,c,d)
+#define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e)           (p)->AddRotation(a,b,c,d,e)
+#define IDirect3DRMFrame3_AddVisual(p,a)                     (p)->AddVisual(a)
+#define IDirect3DRMFrame3_GetChildren(p,a)                   (p)->GetChildren(a)
+#define IDirect3DRMFrame3_GetColor(p)                        (p)->GetColor()
+#define IDirect3DRMFrame3_GetLights(p,a)                     (p)->GetLights(a)
+#define IDirect3DRMFrame3_GetMaterialMode(p)                 (p)->GetMaterialMode()
+#define IDirect3DRMFrame3_GetParent(p,a)                     (p)->GetParent(a)
+#define IDirect3DRMFrame3_GetPosition(p,a,b)                 (p)->GetPosition(a,b)
+#define IDirect3DRMFrame3_GetRotation(p,a,b,c)               (p)->GetRotation(a,b,c)
+#define IDirect3DRMFrame3_GetScene(p,a)                      (p)->GetScene(a)
+#define IDirect3DRMFrame3_GetSortMode(p)                     (p)->GetSortMode()
+#define IDirect3DRMFrame3_GetTexture(p,a)                    (p)->GetTexture(a)
+#define IDirect3DRMFrame3_GetTransform(p,a,b)                (p)->GetTransform(a,b)
+#define IDirect3DRMFrame3_GetVelocity(p,a,b,c)               (p)->GetVelocity(a,b,c)
+#define IDirect3DRMFrame3_GetOrientation(p,a,b,c)            (p)->GetOrientation(a,b,c)
+#define IDirect3DRMFrame3_GetVisuals(p,a,b)                  (p)->GetVisuals(a,b)
+#define IDirect3DRMFrame3_InverseTransform(p,a,b)            (p)->InverseTransform(a,b)
+#define IDirect3DRMFrame3_Load(p,a,b,c,d,e)                  (p)->Load(a,b,c,d,e)
+#define IDirect3DRMFrame3_LookAt(p,a,b,c)                    (p)->LookAt(a,b,c)
+#define IDirect3DRMFrame3_Move(p,a)                          (p)->Move(a)
+#define IDirect3DRMFrame3_DeleteChild(p,a)                   (p)->DeleteChild(a)
+#define IDirect3DRMFrame3_DeleteLight(p,a)                   (p)->DeleteLight(a)
+#define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b)          (p)->DeleteMoveCallback(a,b)
+#define IDirect3DRMFrame3_DeleteVisual(p,a)                  (p)->DeleteVisual(a)
+#define IDirect3DRMFrame3_GetSceneBackground(p)              (p)->GetSceneBackground()
+#define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a)       (p)->GetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame3_GetSceneFogColor(p)                (p)->GetSceneFogColor()
+#define IDirect3DRMFrame3_GetSceneFogEnable(p)               (p)->GetSceneFogEnable()
+#define IDirect3DRMFrame3_GetSceneFogMode(p)                 (p)->GetSceneFogMode()
+#define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c)         (p)->GetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackground(p,a)            (p)->SetSceneBackground(a)
+#define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c)     (p)->SetSceneBackgroundRGB(a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a)       (p)->SetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a)       (p)->SetSceneBackgroundImage(a)
+#define IDirect3DRMFrame3_SetSceneFogEnable(p,a)             (p)->SetSceneFogEnable(a)
+#define IDirect3DRMFrame3_SetSceneFogColor(p,a)              (p)->SetSceneFogColor(a)
+#define IDirect3DRMFrame3_SetSceneFogMode(p,a)               (p)->SetSceneFogMode(a)
+#define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c)         (p)->SetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame3_SetColor(p,a)                      (p)->SetColor(a)
+#define IDirect3DRMFrame3_SetColorRGB(p,a,b,c)               (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFrame3_GetZbufferMode(p)                  (p)->GetZbufferMode()
+#define IDirect3DRMFrame3_SetMaterialMode(p,a)               (p)->SetMaterialMode(a)
+#define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g)    (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirect3DRMFrame3_SetPosition(p,a,b,c,d)             (p)->SetPosition(a,b,c,d)
+#define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e)           (p)->SetRotation(a,b,c,d,e)
+#define IDirect3DRMFrame3_SetSortMode(p,a)                   (p)->SetSortMode(a)
+#define IDirect3DRMFrame3_SetTexture(p,a)                    (p)->SetTexture(a)
+#define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e)           (p)->SetVelocity(a,b,c,d,e)
+#define IDirect3DRMFrame3_SetZbufferMode(p,a)                (p)->SetZbufferMode(a)
+#define IDirect3DRMFrame3_Transform(p,a,b)                   (p)->Transform(a,b)
+#define IDirect3DRMFrame3_GetBox(p,a)                        (p)->GetBox(a)
+#define IDirect3DRMFrame3_GetBoxEnable(p)                    (p)->GetBoxEnable()
+#define IDirect3DRMFrame3_GetAxes(p,a,b)                     (p)->GetAxes(a,b)
+#define IDirect3DRMFrame3_GetMaterial(p,a)                   (p)->GetMaterial(a)
+#define IDirect3DRMFrame3_GetInheritAxes(p)                  (p)->GetInheritAxes()
+#define IDirect3DRMFrame3_GetHierarchyBox(p,a)               (p)->GetHierarchyBox(a)
+#define IDirect3DRMFrame3_SetBox(p,a)                        (p)->SetBox(a)
+#define IDirect3DRMFrame3_SetBoxEnable(p,a)                  (p)->SetBoxEnable(a)
+#define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f)             (p)->SetAxes(a,b,c,d,e,f)
+#define IDirect3DRMFrame3_SetInheritAxes(p,a)                (p)->SetInheritAxes(a)
+#define IDirect3DRMFrame3_SetMaterial(p,a)                   (p)->SetMaterial(a)
+#define IDirect3DRMFrame3_SetQuaternion(p,a,b)               (p)->SetQuaternion(a,b)
+#define IDirect3DRMFrame3_RayPick(p,a,b,c,d)                 (p)->RayPick(a,b,c,d)
+#define IDirect3DRMFrame3_Save(p,a,b,c)                      (p)->Save(a,b,c)
+#define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d)        (p)->TransformVectors(a,b,c,d)
+#define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->InverseTransformVectors(a,b,c,d)
+#define IDirect3DRMFrame3_SetTraversalOptions(p,a)           (p)->SetTraversalOptions(a)
+#define IDirect3DRMFrame3_GetTraversalOptions(p,a)           (p)->GetTraversalOptions(a)
+#define IDirect3DRMFrame3_SetSceneFogMethod(p,a)             (p)->SetSceneFogMethod(a)
+#define IDirect3DRMFrame3_GetSceneFogMethod(p,a)             (p)->GetSceneFogMethod(a)
+#define IDirect3DRMFrame3_SetMaterialOverride(p,a)           (p)->SetMaterialOverride(a)
+#define IDirect3DRMFrame3_GetMaterialOverride(p,a)           (p)->GetMaterialOverride(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMesh interface
+ */
+#define INTERFACE IDirect3DRMMesh
+DECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMMesh methods ***/
+    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+    STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData,
+        D3DRMGROUPINDEX *returnId) PURE;
+    STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count,
+        D3DRMVERTEX *values) PURE;
+    STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE;
+    STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE;
+    STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE;
+    STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial *material) PURE;
+    STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE;
+    STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace,
+        DWORD *fDataSize, unsigned *fData) PURE;
+    STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE;
+    STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE;
+    STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE;
+    STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial **material) PURE;
+    STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture **texture) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMesh_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMesh_AddRef(p)                          (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMesh_Release(p)                         (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMesh_Clone(p,a,b,c)                     (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMesh_AddDestroyCallback(p,a,b)          (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b)       (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMesh_SetAppData(p,a)                    (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMesh_GetAppData(p)                      (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMesh_SetName(p,a)                       (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMesh_GetName(p,a,b)                     (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMesh_GetClassName(p,a,b)                (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMesh methods ***/
+#define IDirect3DRMMesh_Scale(p,a,b,c)                     (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMesh_Translate(p,a,b,c)                 (p)->lpVtbl->Translate(p,a,b,c)
+#define IDirect3DRMMesh_GetBox(p,a)                        (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e)              (p)->lpVtbl->AddGroup(p,a,b,c,d,e)
+#define IDirect3DRMMesh_SetVertices(p,a,b,c,d)             (p)->lpVtbl->SetVertices(p,a,b,c,d)
+#define IDirect3DRMMesh_SetGroupColor(p,a,b)               (p)->lpVtbl->SetGroupColor(p,a,b)
+#define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d)        (p)->lpVtbl->SetGroupColorRGB(p,a,b,c,d)
+#define IDirect3DRMMesh_SetGroupMapping(p,a,b)             (p)->lpVtbl->SetGroupMapping(p,a,b)
+#define IDirect3DRMMesh_SetGroupQuality(p,a,b)             (p)->lpVtbl->SetGroupQuality(p,a,b)
+#define IDirect3DRMMesh_SetGroupMaterial(p,a,b)            (p)->lpVtbl->SetGroupMaterial(p,a,b)
+#define IDirect3DRMMesh_SetGroupTexture(p,a,b)             (p)->lpVtbl->SetGroupTexture(p,a,b)
+#define IDirect3DRMMesh_GetGroupCount(p)                   (p)->lpVtbl->GetGroupCount(p)
+#define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f)            (p)->lpVtbl->GetGroup(p,a,b,c,d,e,f)
+#define IDirect3DRMMesh_GetVertices(p,a,b,c,d)             (p)->lpVtbl->GetVertices(p,a,b,c,d)
+#define IDirect3DRMMesh_GetGroupColor(p,a)                 (p)->lpVtbl->GetGroupColor(p,a)
+#define IDirect3DRMMesh_GetGroupMapping(p,a)               (p)->lpVtbl->GetGroupMapping(p,a)
+#define IDirect3DRMMesh_GetGroupQuality(p,a)               (p)->lpVtbl->GetGroupQuality(p,a)
+#define IDirect3DRMMesh_GetGroupMaterial(p,a,b)            (p)->lpVtbl->GetGroupMaterial(p,a,b)
+#define IDirect3DRMMesh_GetGroupTexture(p,a,b)             (p)->lpVtbl->GetGroupTexture(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMesh_QueryInterface(p,a,b)              (p)->QueryInterface(a,b)
+#define IDirect3DRMMesh_AddRef(p)                          (p)->AddRef()
+#define IDirect3DRMMesh_Release(p)                         (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMesh_Clone(p,a,b,c)                     (p)->Clone(a,b,c)
+#define IDirect3DRMMesh_AddDestroyCallback(p,a,b)          (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b)       (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMesh_SetAppData(p,a)                    (p)->SetAppData(a)
+#define IDirect3DRMMesh_GetAppData(p)                      (p)->GetAppData()
+#define IDirect3DRMMesh_SetName(p,a)                       (p)->SetName(a)
+#define IDirect3DRMMesh_GetName(p,a,b)                     (p)->GetName(a,b)
+#define IDirect3DRMMesh_GetClassName(p,a,b)                (p)->GetClassName(a,b)
+/*** IDirect3DRMMesh methods ***/
+#define IDirect3DRMMesh_Scale(p,a,b,c)                     (p)->Scale(a,b,c)
+#define IDirect3DRMMesh_Translate(p,a,b,c)                 (p)->Translate(a,b,c)
+#define IDirect3DRMMesh_GetBox(p,a)                        (p)->GetBox(a)
+#define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e)              (p)->AddGroup(a,b,c,d,e)
+#define IDirect3DRMMesh_SetVertices(p,a,b,c,d)             (p)->SetVertices(a,b,c,d)
+#define IDirect3DRMMesh_SetGroupColor(p,a,b)               (p)->SetGroupColor(a,b)
+#define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d)        (p)->SetGroupColorRGB(a,b,c,d)
+#define IDirect3DRMMesh_SetGroupMapping(p,a,b)             (p)->SetGroupMapping(a,b)
+#define IDirect3DRMMesh_SetGroupQuality(p,a,b)             (p)->SetGroupQuality(a,b)
+#define IDirect3DRMMesh_SetGroupMaterial(p,a,b)            (p)->SetGroupMaterial(a,b)
+#define IDirect3DRMMesh_SetGroupTexture(p,a,b)             (p)->SetGroupTexture(a,b)
+#define IDirect3DRMMesh_GetGroupCount(p)                   (p)->GetGroupCount()
+#define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f)            (p)->GetGroup(a,b,c,d,e,f)
+#define IDirect3DRMMesh_GetVertices(p,a,b,c,d)             (p)->GetVertices(a,b,c,d)
+#define IDirect3DRMMesh_GetGroupColor(p,a)                 (p)->GetGroupColor(a)
+#define IDirect3DRMMesh_GetGroupMapping(p,a)               (p)->GetGroupMapping(a)
+#define IDirect3DRMMesh_GetGroupQuality(p,a)               (p)->GetGroupQuality(a)
+#define IDirect3DRMMesh_GetGroupMaterial(p,a,b)            (p)->GetGroupMaterial(a,b)
+#define IDirect3DRMMesh_GetGroupTexture(p,a,b)             (p)->GetGroupTexture(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMProgressiveMesh interface
+ */
+#define INTERFACE IDirect3DRMProgressiveMesh
+DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMProgressiveMesh methods ***/
+    STDMETHOD(Load) (THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(GetLoadStatus) (THIS_ D3DRMPMESHLOADSTATUS *status) PURE;
+    STDMETHOD(SetMinRenderDetail) (THIS_ D3DVALUE d3dVal) PURE;
+    STDMETHOD(Abort) (THIS_ DWORD flags) PURE;
+    STDMETHOD(GetFaceDetail) (THIS_ DWORD *count) PURE;
+    STDMETHOD(GetVertexDetail) (THIS_ DWORD *count) PURE;
+    STDMETHOD(SetFaceDetail) (THIS_ DWORD count) PURE;
+    STDMETHOD(SetVertexDetail) (THIS_ DWORD count) PURE;
+    STDMETHOD(GetFaceDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE;
+    STDMETHOD(GetVertexDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE;
+    STDMETHOD(GetDetail) (THIS_ D3DVALUE *pdvVal) PURE;
+    STDMETHOD(SetDetail) (THIS_ D3DVALUE d3dVal) PURE;
+    STDMETHOD(RegisterEvents) (THIS_ HANDLE event, DWORD flags, DWORD reserved) PURE;
+    STDMETHOD(CreateMesh) (THIS_ IDirect3DRMMesh **mesh) PURE;
+    STDMETHOD(Duplicate) (THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;
+    STDMETHOD(GetBox) (THIS_ D3DRMBOX *box) PURE;
+    STDMETHOD(SetQuality) (THIS_ D3DRMRENDERQUALITY quality) PURE;
+    STDMETHOD(GetQuality) (THIS_ D3DRMRENDERQUALITY *quality) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMProgressiveMesh_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMProgressiveMesh_Release(p)                     (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMProgressiveMesh_Clone(p,a,b,c)                 (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b)      (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b)   (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMProgressiveMesh_SetAppData(p,a)                (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMProgressiveMesh_GetAppData(p)                  (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMProgressiveMesh_SetName(p,a)                   (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMProgressiveMesh_GetName(p,a,b)                 (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMProgressiveMesh_GetClassName(p,a,b)            (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMProgressiveMesh methods ***/
+#define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e)              (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a)             (p)->lpVtbl->GetLoadStatus(p,a)
+#define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a)        (p)->lpVtbl->SetMinRenderDetail(p,a)
+#define IDirect3DRMProgressiveMesh_Abort(p,a)                     (p)->lpVtbl->Abort(p,a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a)             (p)->lpVtbl->GetFaceDetail(p,a)
+#define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a)           (p)->lpVtbl->GetVertexDetail(p,a)
+#define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a)             (p)->lpVtbl->SetFaceDetail(p,a)
+#define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a)           (p)->lpVtbl->SetVertexDetail(p,a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b)      (p)->lpVtbl->GetFaceDetailRange(p,a,b)
+#define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b)    (p)->lpVtbl->GetVertexDetailRange(p,a,b)
+#define IDirect3DRMProgressiveMesh_GetDetail(p,a)                 (p)->lpVtbl->GetDetail(p,a)
+#define IDirect3DRMProgressiveMesh_SetDetail(p,a)                 (p)->lpVtbl->SetDetail(p,a)
+#define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c)        (p)->lpVtbl->RegisterEvents(p,a,b,c)
+#define IDirect3DRMProgressiveMesh_CreateMesh(p,a)                (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRMProgressiveMesh_Duplicate(p,a)                 (p)->lpVtbl->Duplicate(p,a)
+#define IDirect3DRMProgressiveMesh_GetBox(p,a)                    (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMProgressiveMesh_SetQuality(p,a)                (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMProgressiveMesh_GetQuality(p,a)                (p)->lpVtbl->GetQuality(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
+#define IDirect3DRMProgressiveMesh_AddRef(p)                      (p)->AddRef()
+#define IDirect3DRMProgressiveMesh_Release(p)                     (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMProgressiveMesh_Clone(p,a,b,c)                 (p)->Clone(a,b,c)
+#define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b)      (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b)   (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMProgressiveMesh_SetAppData(p,a)                (p)->SetAppData(a)
+#define IDirect3DRMProgressiveMesh_GetAppData(p)                  (p)->GetAppData()
+#define IDirect3DRMProgressiveMesh_SetName(p,a)                   (p)->SetName(a)
+#define IDirect3DRMProgressiveMesh_GetName(p,a,b)                 (p)->GetName(a,b)
+#define IDirect3DRMProgressiveMesh_GetClassName(p,a,b)            (p)->GetClassName(a,b)
+/*** IDirect3DRMProgressiveMesh methods ***/
+#define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e)              (p)->Load(a,b,c,d,e)
+#define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a)             (p)->GetLoadStatus(a)
+#define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a)        (p)->SetMinRenderDetail(a)
+#define IDirect3DRMProgressiveMesh_Abort(p,a)                     (p)->Abort(a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a)             (p)->GetFaceDetail(a)
+#define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a)           (p)->GetVertexDetail(a)
+#define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a)             (p)->SetFaceDetail(a)
+#define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a)           (p)->SetVertexDetail(a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b)      (p)->GetFaceDetailRange(a,b)
+#define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b)    (p)->GetVertexDetailRange(a,b)
+#define IDirect3DRMProgressiveMesh_GetDetail(p,a)                 (p)->GetDetail(a)
+#define IDirect3DRMProgressiveMesh_SetDetail(p,a)                 (p)->SetDetail(a)
+#define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c)        (p)->RegisterEvents(a,b,c)
+#define IDirect3DRMProgressiveMesh_CreateMesh(p,a)                (p)->CreateMesh(a)
+#define IDirect3DRMProgressiveMesh_Duplicate(p,a)                 (p)->Duplicate(a)
+#define IDirect3DRMProgressiveMesh_GetBox(p,a)                    (p)->GetBox(a)
+#define IDirect3DRMProgressiveMesh_SetQuality(p,a)                (p)->SetQuality(a)
+#define IDirect3DRMProgressiveMesh_GetQuality(p,a)                (p)->GetQuality(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMShadow interface
+ */
+#define INTERFACE IDirect3DRMShadow
+DECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMShadow methods ***/
+    STDMETHOD(Init)(THIS_ IDirect3DRMVisual *visual, struct IDirect3DRMLight *light,
+            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMShadow_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMShadow_Release(p)                     (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow_Clone(p,a,b,c)                 (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMShadow_AddDestroyCallback(p,a,b)      (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b)   (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMShadow_SetAppData(p,a)                (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMShadow_GetAppData(p)                  (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMShadow_SetName(p,a)                   (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMShadow_GetName(p,a,b)                 (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMShadow_GetClassName(p,a,b)            (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g)          (p)->lpVtbl->Load(p,a,b,c,d,e,f,g)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
+#define IDirect3DRMShadow_AddRef(p)                      (p)->AddRef()
+#define IDirect3DRMShadow_Release(p)                     (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow_Clone(p,a,b,c)                 (p)->Clone(a,b,c)
+#define IDirect3DRMShadow_AddDestroyCallback(p,a,b)      (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b)   (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMShadow_SetAppData(p,a)                (p)->SetAppData(a)
+#define IDirect3DRMShadow_GetAppData(p)                  (p)->GetAppData()
+#define IDirect3DRMShadow_SetName(p,a)                   (p)->SetName(a)
+#define IDirect3DRMShadow_GetName(p,a,b)                 (p)->GetName(a,b)
+#define IDirect3DRMShadow_GetClassName(p,a,b)            (p)->GetClassName(a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g)          (p)->Load(a,b,c,d,e,f,g)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMShadow2 interface
+ */
+#define INTERFACE IDirect3DRMShadow2
+DECLARE_INTERFACE_(IDirect3DRMShadow2,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMShadow methods ***/
+    STDMETHOD(Init)(THIS_ IUnknown *object, struct IDirect3DRMLight *light,
+            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE;
+    /*** IDirect3DRMShadow2 methods ***/
+    STDMETHOD(GetVisual)(THIS_ IDirect3DRMVisual **visual) PURE;
+    STDMETHOD(SetVisual)(THIS_ IUnknown *visual, DWORD flags) PURE;
+    STDMETHOD(GetLight)(THIS_ struct IDirect3DRMLight **light) PURE;
+    STDMETHOD(SetLight)(THIS_ struct IDirect3DRMLight *light, DWORD flags) PURE;
+    STDMETHOD(GetPlane)(THIS_ D3DVALUE *px, D3DVALUE *py, D3DVALUE *pz,
+            D3DVALUE *nx, D3DVALUE *ny, D3DVALUE *nz) PURE;
+    STDMETHOD(SetPlane)(THIS_ D3DVALUE px, D3DVALUE py, D3DVALUE pz,
+        D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, DWORD) PURE;
+    STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE;
+    STDMETHOD(SetOptions)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow2_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMShadow2_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMShadow2_Release(p)                     (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow2_Clone(p,a,b,c)                 (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMShadow2_AddDestroyCallback(p,a,b)      (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b)   (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMShadow2_SetAppData(p,a)                (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMShadow2_GetAppData(p)                  (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMShadow2_SetName(p,a)                   (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMShadow2_GetName(p,a,b)                 (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMShadow2_GetClassName(p,a,b)            (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g)          (p)->lpVtbl->Init(p,a,b,c,d,e,f,g)
+/*** IDirect3DRMShadow2 methods ***/
+#define IDirect3DRMShadow2_GetVisual(p,a)                 (p)->lpVtbl->GetVisual(p,a)
+#define IDirect3DRMShadow2_SetVisual(p,a,b)               (p)->lpVtbl->SetVisual(p,a,b)
+#define IDirect3DRMShadow2_GetLight(p,a)                  (p)->lpVtbl->GetLight(p,a)
+#define IDirect3DRMShadow2_SetLight(p,a,b)                (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f)        (p)->lpVtbl->GetPlane(p,a,b,c,d,e,f)
+#define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f)        (p)->lpVtbl->SetPlane(p,a,b,c,d,e,f)
+#define IDirect3DRMShadow2_GetOptions(p,a)                (p)->lpVtbl->GetOptions(p,a)
+#define IDirect3DRMShadow2_SetOptions(p,a)                (p)->lpVtbl->SetOptions(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow2_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
+#define IDirect3DRMShadow2_AddRef(p)                      (p)->AddRef()
+#define IDirect3DRMShadow2_Release(p)                     (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow2_Clone(p,a,b,c)                 (p)->Clone(a,b,c)
+#define IDirect3DRMShadow2_AddDestroyCallback(p,a,b)      (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b)   (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMShadow2_SetAppData(p,a)                (p)->SetAppData(a)
+#define IDirect3DRMShadow2_GetAppData(p)                  (p)->GetAppData()
+#define IDirect3DRMShadow2_SetName(p,a)                   (p)->SetName(a)
+#define IDirect3DRMShadow2_GetName(p,a,b)                 (p)->GetName(a,b)
+#define IDirect3DRMShadow2_GetClassName(p,a,b)            (p)->GetClassName(a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g)          (p)->Init(a,b,c,d,e,f,g)
+/*** IDirect3DRMShadow2 methods ***/
+#define IDirect3DRMShadow2_GetVisual(p,a)                 (p)->GetVisual(a)
+#define IDirect3DRMShadow2_SetVisual(p,a,b)               (p)->SetVisual(a,b)
+#define IDirect3DRMShadow2_GetLight(p,a)                  (p)->GetLight(a)
+#define IDirect3DRMShadow2_SetLight(p,a,b)                (p)->SetLight(a,b)
+#define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f)        (p)->GetPlane(a,b,c,d,e,f)
+#define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f)        (p)->SetPlane(a,b,c,d,e,f)
+#define IDirect3DRMShadow2_GetOptions(p,a)                (p)->GetOptions(a)
+#define IDirect3DRMShadow2_SetOptions(p,a)                (p)->SetOptions(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFace interface
+ */
+#define INTERFACE IDirect3DRMFace
+DECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMFace methods ***/
+    STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
+    STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
+    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
+    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+    STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
+    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;
+    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE;
+    STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+    STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
+    STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
+    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFace_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFace_AddRef(p)                         (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFace_Release(p)                        (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace_Clone(p,a,b,c)                    (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFace_AddDestroyCallback(p,a,b)         (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFace_DeleteDestroyCallback(p,a,b)      (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFace_SetAppData(p,a)                   (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFace_GetAppData(p)                     (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFace_SetName(p,a)                      (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFace_GetName(p,a,b)                    (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFace_GetClassName(p,a,b)               (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace_AddVertex(p,a,b,c)                (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b)  (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b)
+#define IDirect3DRMFace_SetColorRGB(p,a,b,c)              (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFace_SetColor(p,a)                     (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFace_SetTexture(p,a)                   (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace_SetMaterial(p,a)                  (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFace_SetTextureTopology(p,a,b)         (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFace_GetVertex(p,a,b,c)                (p)->lpVtbl->GetVertex(p,a,b,c)
+#define IDirect3DRMFace_GetVertices(p,a,b,c)              (p)->lpVtbl->GetVertices(p,a,b,c)
+#define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace_GetTextureTopology(p,a,b)         (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFace_GetNormal(p,a)                    (p)->lpVtbl->GetNormal(p,a)
+#define IDirect3DRMFace_GetTexture(p,a)                   (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFace_GetVertexCount(p)                 (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMFace_GetVertexIndex(p,a)               (p)->lpVtbl->GetVertexIndex(p,a)
+#define IDirect3DRMFace_GetTextureCoordinateIndex(p,a)    (p)->lpVtbl->GetTextureCoordinateIndex(p,a)
+#define IDirect3DRMFace_GetColor(p,a)                     (p)->lpVtbl->GetColor(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFace_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)
+#define IDirect3DRMFace_AddRef(p)                         (p)->AddRef()
+#define IDirect3DRMFace_Release(p)                        (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace_Clone(p,a,b,c)                    (p)->Clone(a,b,c)
+#define IDirect3DRMFace_AddDestroyCallback(p,a,b)         (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFace_DeleteDestroyCallback(p,a,b)      (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFace_SetAppData(p,a)                   (p)->SetAppData(a)
+#define IDirect3DRMFace_GetAppData(p)                     (p)->GetAppData()
+#define IDirect3DRMFace_SetName(p,a)                      (p)->SetName(a)
+#define IDirect3DRMFace_GetName(p,a,b)                    (p)->GetName(a,b)
+#define IDirect3DRMFace_GetClassName(p,a,b)               (p)->GetClassName(a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace_AddVertex(p,a,b,c)                (p)->AddVertex(a,b,c)
+#define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b)  (p)->AddVertexAndNormalIndexed(a,b)
+#define IDirect3DRMFace_SetColorRGB(p,a,b,c)              (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFace_SetColor(p,a)                     (p)->SetColor(a)
+#define IDirect3DRMFace_SetTexture(p,a)                   (p)->SetTexture(a)
+#define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c)    (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace_SetMaterial(p,a)                  (p)->SetMaterial(a)
+#define IDirect3DRMFace_SetTextureTopology(p,a,b)         (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFace_GetVertex(p,a,b,c)                (p)->GetVertex(a,b,c)
+#define IDirect3DRMFace_GetVertices(p,a,b,c)              (p)->GetVertices(a,b,c)
+#define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c)    (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace_GetTextureTopology(p,a,b)         (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFace_GetNormal(p,a)                    (p)->GetNormal(a)
+#define IDirect3DRMFace_GetTexture(p,a)                   (p)->GetTexture(a)
+#define IDirect3DRMFace_GetVertexCount(p)                 (p)->GetVertexCount()
+#define IDirect3DRMFace_GetVertexIndex(p,a)               (p)->GetVertexIndex(a)
+#define IDirect3DRMFace_GetTextureCoordinateIndex(p,a)    (p)->GetTextureCoordinateIndex(a)
+#define IDirect3DRMFace_GetColor(p,a)                     (p)->GetColor(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFace2 interface
+ */
+#define INTERFACE IDirect3DRMFace2
+DECLARE_INTERFACE_(IDirect3DRMFace2,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMFace methods ***/
+    STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
+    STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
+    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
+    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+    STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
+    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE;
+    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE;
+    STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+    STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
+    STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
+    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFace2_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFace2_AddRef(p)                         (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFace2_Release(p)                        (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace2_Clone(p,a,b,c)                    (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFace2_AddDestroyCallback(p,a,b)         (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b)      (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFace2_SetAppData(p,a)                   (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFace2_GetAppData(p)                     (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFace2_SetName(p,a)                      (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFace2_GetName(p,a,b)                    (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFace2_GetClassName(p,a,b)               (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace2_AddVertex(p,a,b,c)                (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b)  (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b)
+#define IDirect3DRMFace2_SetColorRGB(p,a,b,c)              (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFace2_SetColor(p,a)                     (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFace2_SetTexture(p,a)                   (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace2_SetMaterial(p,a)                  (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFace2_SetTextureTopology(p,a,b)         (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFace2_GetVertex(p,a,b,c)                (p)->lpVtbl->GetVertex(p,a,b,c)
+#define IDirect3DRMFace2_GetVertices(p,a,b,c)              (p)->lpVtbl->GetVertices(p,a,b,c)
+#define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace2_GetTextureTopology(p,a,b)         (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFace2_GetNormal(p,a)                    (p)->lpVtbl->GetNormal(p,a)
+#define IDirect3DRMFace2_GetTexture(p,a)                   (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFace2_GetVertexCount(p)                 (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMFace2_GetVertexIndex(p,a)               (p)->lpVtbl->GetVertexIndex(p,a)
+#define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a)    (p)->lpVtbl->GetTextureCoordinateIndex(p,a)
+#define IDirect3DRMFace2_GetColor(p,a)                     (p)->lpVtbl->GetColor(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFace2_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)
+#define IDirect3DRMFace2_AddRef(p)                         (p)->AddRef()
+#define IDirect3DRMFace2_Release(p)                        (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace2_Clone(p,a,b,c)                    (p)->Clone(a,b,c)
+#define IDirect3DRMFace2_AddDestroyCallback(p,a,b)         (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b)      (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFace2_SetAppData(p,a)                   (p)->SetAppData(a)
+#define IDirect3DRMFace2_GetAppData(p)                     (p)->GetAppData()
+#define IDirect3DRMFace2_SetName(p,a)                      (p)->SetName(a)
+#define IDirect3DRMFace2_GetName(p,a,b)                    (p)->GetName(a,b)
+#define IDirect3DRMFace2_GetClassName(p,a,b)               (p)->GetClassName(a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace2_AddVertex(p,a,b,c)                (p)->AddVertex(a,b,c)
+#define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b)  (p)->AddVertexAndNormalIndexed(a,b)
+#define IDirect3DRMFace2_SetColorRGB(p,a,b,c)              (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFace2_SetColor(p,a)                     (p)->SetColor(a)
+#define IDirect3DRMFace2_SetTexture(p,a)                   (p)->SetTexture(a)
+#define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c)    (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace2_SetMaterial(p,a)                  (p)->SetMaterial(a)
+#define IDirect3DRMFace2_SetTextureTopology(p,a,b)         (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFace2_GetVertex(p,a,b,c)                (p)->GetVertex(a,b,c)
+#define IDirect3DRMFace2_GetVertices(p,a,b,c)              (p)->GetVertices(a,b,c)
+#define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c)    (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace2_GetTextureTopology(p,a,b)         (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFace2_GetNormal(p,a)                    (p)->GetNormal(a)
+#define IDirect3DRMFace2_GetTexture(p,a)                   (p)->GetTexture(a)
+#define IDirect3DRMFace2_GetVertexCount(p)                 (p)->GetVertexCount()
+#define IDirect3DRMFace2_GetVertexIndex(p,a)               (p)->GetVertexIndex(a)
+#define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a)    (p)->GetTextureCoordinateIndex(a)
+#define IDirect3DRMFace2_GetColor(p,a)                     (p)->GetColor(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMeshBuilder interface
+ */
+#define INTERFACE IDirect3DRMMeshBuilder
+DECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMMeshBuilder methods ***/
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
+    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
+    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+    STDMETHOD(GenerateNormals)(THIS) PURE;
+    STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
+    STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;
+    STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE;
+    STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+    STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE;
+    STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,
+            D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;
+    STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
+    STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
+    STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
+    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;
+    STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,
+        DWORD *face_data_size, DWORD *face_data) PURE;
+    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
+    STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+    STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
+    STDMETHOD_(int, GetFaceCount)(THIS) PURE;
+    STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
+    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMeshBuilder_AddRef(p)                         (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMeshBuilder_Release(p)                        (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder_Clone(p,a,b,c)                    (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b)         (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b)      (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder_SetAppData(p,a)                   (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMeshBuilder_GetAppData(p)                     (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMeshBuilder_SetName(p,a)                      (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMeshBuilder_GetName(p,a,b)                    (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMeshBuilder_GetClassName(p,a,b)               (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e)                 (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMMeshBuilder_Save(p,a,b,c)                     (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMMeshBuilder_Scale(p,a,b,c)                    (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMeshBuilder_Translate(p,a,b,c)                (p)->lpVtbl->Translate(p,a)
+#define IDirect3DRMMeshBuilder_SetColorSource(p,a)               (p)->lpVtbl->SetColorSource(p,a,b,c)
+#define IDirect3DRMMeshBuilder_GetBox(p,a)                       (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMeshBuilder_GenerateNormals(p)                (p)->lpVtbl->GenerateNormals(p)
+#define IDirect3DRMMeshBuilder_GetColorSource(p)                 (p)->lpVtbl->GetColorSource(p)
+#define IDirect3DRMMeshBuilder_AddMesh(p,a)                      (p)->lpVtbl->AddMesh(p,a)
+#define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a)               (p)->lpVtbl->AddMeshBuilder(p,a)
+#define IDirect3DRMMeshBuilder_AddFrame(p,a)                     (p)->lpVtbl->AddFrame(p,a)
+#define IDirect3DRMMeshBuilder_AddFace(p,a)                      (p)->lpVtbl->AddFace(p,a)
+#define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f)           (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c)             (p)->lpVtbl->ReserveSpace(p,a,b,c)
+#define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c)              (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMMeshBuilder_SetColor(p,a)                     (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMMeshBuilder_SetTexture(p,a)                   (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMMeshBuilder_SetMaterial(p,a)                  (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b)         (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMMeshBuilder_SetQuality(p,a)                   (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMMeshBuilder_SetPerspective(p,a)               (p)->lpVtbl->SetPerspective(p,a)
+#define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d)              (p)->lpVtbl->SetVertex(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d)              (p)->lpVtbl->SetNormal(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b)             (p)->lpVtbl->SetVertexColor(p,a,b)
+#define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d)      (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder_GetFaces(p,a)                     (p)->lpVtbl->GetFaces(p,a)
+#define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f)        (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c)                (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c)                (p)->lpVtbl->AddNormal(p,a,b,c)
+#define IDirect3DRMMeshBuilder_CreateFace(p,a)                   (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRMMeshBuilder_GetQuality(p)                     (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMMeshBuilder_GetPerspective(p)                 (p)->lpVtbl->GetPerspective(p)
+#define IDirect3DRMMeshBuilder_GetFaceCount(p)                   (p)->lpVtbl->GetFaceCount(p)
+#define IDirect3DRMMeshBuilder_GetVertexCount(p)                 (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMMeshBuilder_GetVertexColor(p,a)               (p)->lpVtbl->GetVertexColor(p,a)
+#define IDirect3DRMMeshBuilder_CreateMesh(p,a)                   (p)->lpVtbl->CreateMesh(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)
+#define IDirect3DRMMeshBuilder_AddRef(p)                         (p)->AddRef()
+#define IDirect3DRMMeshBuilder_Release(p)                        (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder_Clone(p,a,b,c)                    (p)->Clone(a,b,c)
+#define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b)         (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b)      (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder_SetAppData(p,a)                   (p)->SetAppData(a)
+#define IDirect3DRMMeshBuilder_GetAppData(p)                     (p)->GetAppData()
+#define IDirect3DRMMeshBuilder_SetName(p,a)                      (p)->SetName(a)
+#define IDirect3DRMMeshBuilder_GetName(p,a,b)                    (p)->GetName(a,b)
+#define IDirect3DRMMeshBuilder_GetClassName(p,a,b)               (p)->GetClassName(a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e)                 (p)->Load(a,b,c,d,e)
+#define IDirect3DRMMeshBuilder_Save(p,a,b,c)                     (p)->Save(a,b,c)
+#define IDirect3DRMMeshBuilder_Scale(p,a,b,c)                    (p)->Scale(a,b,c)
+#define IDirect3DRMMeshBuilder_Translate(p,a,b,c)                (p)->Translate(a)
+#define IDirect3DRMMeshBuilder_SetColorSource(p,a)               (p)->SetColorSource(a,b,c)
+#define IDirect3DRMMeshBuilder_GetBox(p,a)                       (p)->GetBox(a)
+#define IDirect3DRMMeshBuilder_GenerateNormals(p)                (p)->GenerateNormals()
+#define IDirect3DRMMeshBuilder_GetColorSource(p)                 (p)->GetColorSource()
+#define IDirect3DRMMeshBuilder_AddMesh(p,a)                      (p)-->AddMesh(a)
+#define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a)               (p)->AddMeshBuilder(a)
+#define IDirect3DRMMeshBuilder_AddFrame(p,a)                     (p)->AddFrame(a)
+#define IDirect3DRMMeshBuilder_AddFace(p,a)                      (p)->AddFace(a)
+#define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f)           (p)->AddFaces(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c)             (p)->ReserveSpace(a,b,c)
+#define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c)              (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMMeshBuilder_SetColor(p,a)                     (p)->SetColor(a)
+#define IDirect3DRMMeshBuilder_SetTexture(p,a)                   (p)->SetTexture(a)
+#define IDirect3DRMMeshBuilder_SetMaterial(p,a)                  (p)->SetMaterial(a)
+#define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b)         (p)->SetTextureTopology(a,b)
+#define IDirect3DRMMeshBuilder_SetQuality(p,a)                   (p)->SetQuality(a)
+#define IDirect3DRMMeshBuilder_SetPerspective(p,a)               (p)->SetPerspective(a)
+#define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d)              (p)->SetVertex(a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d)              (p)->SetNormal(a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c)    (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b)             (p)->SetVertexColor(a,b)
+#define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d)      (p)->SetVertexColorRGB(a,b,c,d)
+#define IDirect3DRMMeshBuilder_GetFaces(p,a)                     (p)->GetFaces(a)
+#define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f)        (p)->GetVertices(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c)    (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c)                (p)->AddVertex(a,b,c)
+#define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c)                (p)->AddNormal(a,b,c)
+#define IDirect3DRMMeshBuilder_CreateFace(p,a)                   (p)->CreateFace(a)
+#define IDirect3DRMMeshBuilder_GetQuality(p)                     (p)->GetQuality()
+#define IDirect3DRMMeshBuilder_GetPerspective(p)                 (p)->GetPerspective()
+#define IDirect3DRMMeshBuilder_GetFaceCount(p)                   (p)->GetFaceCount()
+#define IDirect3DRMMeshBuilder_GetVertexCount(p)                 (p)->GetVertexCount()
+#define IDirect3DRMMeshBuilder_GetVertexColor(p,a)               (p)->GetVertexColor(a)
+#define IDirect3DRMMeshBuilder_CreateMesh(p,a)                   (p)->CreateMesh(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMeshBuilder2 interface
+ */
+#define INTERFACE IDirect3DRMMeshBuilder2
+DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2,IDirect3DRMMeshBuilder)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMMeshBuilder methods ***/
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
+    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
+    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+    STDMETHOD(GenerateNormals)(THIS) PURE;
+    STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
+    STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;
+    STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE;
+    STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+    STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE;
+    STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,
+            D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;
+    STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
+    STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
+    STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
+    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;
+    STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,
+        DWORD *face_data_size, DWORD *face_data) PURE;
+    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
+    STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+    STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
+    STDMETHOD_(int, GetFaceCount)(THIS) PURE;
+    STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
+    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+    /*** IDirect3DRMMeshBuilder2 methods ***/
+    STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE crease, DWORD flags) PURE;
+    STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace **face) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMeshBuilder2_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMeshBuilder2_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder2_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMeshBuilder2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMeshBuilder2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMeshBuilder2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMeshBuilder2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMMeshBuilder2_Save(p,a,b,c)                    (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a)
+#define IDirect3DRMMeshBuilder2_SetColorSource(p,a)              (p)->lpVtbl->SetColorSource(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_GetBox(p,a)                      (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMeshBuilder2_GenerateNormals(p)               (p)->lpVtbl->GenerateNormals(p)
+#define IDirect3DRMMeshBuilder2_GetColorSource(p)                (p)->lpVtbl->GetColorSource(p)
+#define IDirect3DRMMeshBuilder2_AddMesh(p,a)                     (p)->lpVtbl->AddMesh(p,a)
+#define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a)              (p)->lpVtbl->AddMeshBuilder(p,a)
+#define IDirect3DRMMeshBuilder2_AddFrame(p,a)                    (p)->lpVtbl->AddFrame(p,a)
+#define IDirect3DRMMeshBuilder2_AddFace(p,a)                     (p)->lpVtbl->AddFace(p,a)
+#define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f)          (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c)            (p)->lpVtbl->ReserveSpace(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMMeshBuilder2_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMMeshBuilder2_SetMaterial(p,a)                 (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMMeshBuilder2_SetQuality(p,a)                  (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMMeshBuilder2_SetPerspective(p,a)              (p)->lpVtbl->SetPerspective(p,a)
+#define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d)             (p)->lpVtbl->SetVertex(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d)             (p)->lpVtbl->SetNormal(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b)            (p)->lpVtbl->SetVertexColor(p,a,b)
+#define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d)     (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder2_GetFaces(p,a)                    (p)->lpVtbl->GetFaces(p,a)
+#define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f)       (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c)               (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c)               (p)->lpVtbl->AddNormal(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_CreateFace(p,a)                  (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRMMeshBuilder2_GetQuality(p)                    (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMMeshBuilder2_GetPerspective(p)                (p)->lpVtbl->GetPerspective(p)
+#define IDirect3DRMMeshBuilder2_GetFaceCount(p)                  (p)->lpVtbl->GetFaceCount(p)
+#define IDirect3DRMMeshBuilder2_GetVertexCount(p)                (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMMeshBuilder2_GetVertexColor(p,a)              (p)->lpVtbl->GetVertexColor(p,a)
+#define IDirect3DRMMeshBuilder2_CreateMesh(p,a)                  (p)->lpVtbl->CreateMesh(p,a)
+/*** IDirect3DRMMeshBuilder2 methods ***/
+#define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b)          (p)->lpVtbl->GenerateNormals2(p,a,b)
+#define IDirect3DRMMeshBuilder2_GetFace(p,a,b)                   (p)->lpVtbl->GetFace(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMMeshBuilder2_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMMeshBuilder2_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder2_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMMeshBuilder2_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMMeshBuilder2_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMMeshBuilder2_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMMeshBuilder2_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)
+#define IDirect3DRMMeshBuilder2_Save(p,a,b,c)                    (p)->Save(a,b,c)
+#define IDirect3DRMMeshBuilder2_Scale(p,a,b,c)                   (p)->Scale(a,b,c)
+#define IDirect3DRMMeshBuilder2_Translate(p,a,b,c)               (p)->Translate(a)
+#define IDirect3DRMMeshBuilder2_SetColorSource(p,a)              (p)->SetColorSource(a,b,c)
+#define IDirect3DRMMeshBuilder2_GetBox(p,a)                      (p)->GetBox(a)
+#define IDirect3DRMMeshBuilder2_GenerateNormals(p)               (p)->GenerateNormals()
+#define IDirect3DRMMeshBuilder2_GetColorSource(p)                (p)->GetColorSource()
+#define IDirect3DRMMeshBuilder2_AddMesh(p,a)                     (p)-->AddMesh(a)
+#define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a)              (p)->AddMeshBuilder(a)
+#define IDirect3DRMMeshBuilder2_AddFrame(p,a)                    (p)->AddFrame(a)
+#define IDirect3DRMMeshBuilder2_AddFace(p,a)                     (p)->AddFace(a)
+#define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f)          (p)->AddFaces(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c)            (p)->ReserveSpace(a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColor(p,a)                    (p)->SetColor(a)
+#define IDirect3DRMMeshBuilder2_SetTexture(p,a)                  (p)->SetTexture(a)
+#define IDirect3DRMMeshBuilder2_SetMaterial(p,a)                 (p)->SetMaterial(a)
+#define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)
+#define IDirect3DRMMeshBuilder2_SetQuality(p,a)                  (p)->SetQuality(a)
+#define IDirect3DRMMeshBuilder2_SetPerspective(p,a)              (p)->SetPerspective(a)
+#define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d)             (p)->SetVertex(a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d)             (p)->SetNormal(a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c)   (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b)            (p)->SetVertexColor(a,b)
+#define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d)     (p)->SetVertexColorRGB(a,b,c,d)
+#define IDirect3DRMMeshBuilder2_GetFaces(p,a)                    (p)->GetFaces(a)
+#define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f)       (p)->GetVertices(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c)   (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c)               (p)->AddVertex(a,b,c)
+#define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c)               (p)->AddNormal(a,b,c)
+#define IDirect3DRMMeshBuilder2_CreateFace(p,a)                  (p)->CreateFace(a)
+#define IDirect3DRMMeshBuilder2_GetQuality(p)                    (p)->GetQuality()
+#define IDirect3DRMMeshBuilder2_GetPerspective(p)                (p)->GetPerspective()
+#define IDirect3DRMMeshBuilder2_GetFaceCount(p)                  (p)->GetFaceCount()
+#define IDirect3DRMMeshBuilder2_GetVertexCount(p)                (p)->GetVertexCount()
+#define IDirect3DRMMeshBuilder2_GetVertexColor(p,a)              (p)->GetVertexColor(a)
+#define IDirect3DRMMeshBuilder2_CreateMesh(p,a)                  (p)->CreateMesh(a)
+/*** IDirect3DRMMeshBuilder2 methods ***/
+#define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b)          (p)->GenerateNormals2(a,b)
+#define IDirect3DRMMeshBuilder2_GetFace(p,a,b)                   (p)->GetFace(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMeshBuilder3 interface
+ */
+#define INTERFACE IDirect3DRMMeshBuilder3
+DECLARE_INTERFACE_(IDirect3DRMMeshBuilder3,IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMMeshBuilder3 methods ***/
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE;
+    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
+    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
+    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+    STDMETHOD(GenerateNormals)(THIS_ D3DVALUE crease, DWORD flags) PURE;
+    STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
+    STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;
+    STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 *mesh_builder, DWORD flags) PURE;
+    STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE;
+    STDMETHOD(AddFace)(THIS_ IDirect3DRMFace2 *face) PURE;
+    STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,
+            D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;
+    STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;
+    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
+    STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
+    STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
+    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;
+    STDMETHOD(GetGeometry)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,
+        DWORD *face_data_size, DWORD *face_data) PURE;
+    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
+    STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE;
+    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+    STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
+    STDMETHOD_(int, GetFaceCount)(THIS) PURE;
+    STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
+    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+    STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace2 **face) PURE;
+    STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vector) PURE;
+    STDMETHOD(GetNormal)(THIS_ DWORD index, D3DVECTOR *vector) PURE;
+    STDMETHOD(DeleteVertices)(THIS_ DWORD IndexFirst, DWORD count) PURE;
+    STDMETHOD(DeleteNormals)(THIS_ DWORD IndexFirst, DWORD count) PURE;
+    STDMETHOD(DeleteFace)(THIS_ IDirect3DRMFace2 *face) PURE;
+    STDMETHOD(Empty)(THIS_ DWORD flags) PURE;
+    STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;
+    STDMETHOD(AddFacesIndexed)(THIS_ DWORD flags, DWORD *pvIndices, DWORD *pIndexFirst, DWORD *pCount) PURE;
+    STDMETHOD(CreateSubMesh)(THIS_ IUnknown **mesh) PURE;
+    STDMETHOD(GetParentMesh)(THIS_ DWORD flags, IUnknown **parent) PURE;
+    STDMETHOD(GetSubMeshes)(THIS_ DWORD *count, IUnknown **meshes) PURE;
+    STDMETHOD(DeleteSubMesh)(THIS_ IUnknown *mesh) PURE;
+    STDMETHOD(Enable)(THIS_ DWORD) PURE;
+    STDMETHOD(GetEnable)(THIS_ DWORD *) PURE;
+    STDMETHOD(AddTriangles)(THIS_ DWORD flags, DWORD format, DWORD vertex_count, void *data) PURE;
+    STDMETHOD(SetVertices)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE;
+    STDMETHOD(GetVertices)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE;
+    STDMETHOD(SetNormals)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE;
+    STDMETHOD(GetNormals)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE;
+    STDMETHOD_(int, GetNormalCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMeshBuilder3_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMeshBuilder3_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder3_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder3_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMeshBuilder3_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMeshBuilder3_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMeshBuilder3_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+
+/*** IDirect3DRMMeshBuilder3 methods ***/
+#define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMMeshBuilder3_Save(p,a,b,c)                    (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a)
+#define IDirect3DRMMeshBuilder3_SetColorSource(p,a)              (p)->lpVtbl->SetColorSource(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetBox(p,a)                      (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b)           (p)->lpVtbl->GenerateNormals(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetColorSource(p)                (p)->lpVtbl->GetColorSource(p)
+#define IDirect3DRMMeshBuilder3_AddMesh(p,a)                     (p)->lpVtbl->AddMesh(p,a)
+#define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a)              (p)->lpVtbl->AddMeshBuilder(p,a)
+#define IDirect3DRMMeshBuilder3_AddFrame(p,a)                    (p)->lpVtbl->AddFrame(p,a)
+#define IDirect3DRMMeshBuilder3_AddFace(p,a)                     (p)->lpVtbl->AddFace(p,a)
+#define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f)          (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c)            (p)->lpVtbl->ReserveSpace(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMMeshBuilder3_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMMeshBuilder3_SetMaterial(p,a)                 (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMMeshBuilder3_SetQuality(p,a)                  (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMMeshBuilder3_SetPerspective(p,a)              (p)->lpVtbl->SetPerspective(p,a)
+#define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d)             (p)->lpVtbl->SetVertex(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d)             (p)->lpVtbl->SetNormal(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b)            (p)->lpVtbl->SetVertexColor(p,a,b)
+#define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d)     (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_GetFaces(p,a)                    (p)->lpVtbl->GetFaces(p,a)
+#define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f)       (p)->lpVtbl->GetGeometry(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c)               (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c)               (p)->lpVtbl->AddNormal(p,a,b,c)
+
+#define IDirect3DRMMeshBuilder3_CreateFace(p,a)                  (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRMMeshBuilder3_GetQuality(p)                    (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMMeshBuilder3_GetPerspective(p)                (p)->lpVtbl->GetPerspective(p)
+
+#define IDirect3DRMMeshBuilder3_GetFaceCount(p)                  (p)->lpVtbl->GetFaceCount(p)
+#define IDirect3DRMMeshBuilder3_GetVertexCount(p)                (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMMeshBuilder3_GetVertexColor(p,a)              (p)->lpVtbl->GetVertexColor(p,a)
+#define IDirect3DRMMeshBuilder3_CreateMesh(p,a)                  (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRMMeshBuilder3_GetFace(p,a,b)                   (p)->lpVtbl->GetFace(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetVertex(p,a,b)                 (p)->lpVtbl->GetVertex(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetNormal(p,a,b)                 (p)->lpVtbl->GetNormal(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b)            (p)->lpVtbl->DeleteVertices(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b)             (p)->lpVtbl->DeleteNormals(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteFace(p,a)                  (p)->lpVtbl->DeleteFace(p,a)
+#define IDirect3DRMMeshBuilder3_Empty(p,a)                       (p)->lpVtbl->Empty(p,a)
+#define IDirect3DRMMeshBuilder3_Optimize(p,a)                    (p)->lpVtbl->Optimize(p,a)
+#define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d)       (p)->lpVtbl->AddFacesIndexed(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a)               (p)->lpVtbl->CreateSubMesh(p,a)
+#define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b)             (p)->lpVtbl->GetParentMesh(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b)              (p)->lpVtbl->GetSubMeshes(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a)               (p)->lpVtbl->DeleteSubMesh(p,a)
+#define IDirect3DRMMeshBuilder3_Enable(p,a)                      (p)->lpVtbl->Enable(p,a)
+#define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d)          (p)->lpVtbl->AddTriangles(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c)             (p)->lpVtbl->SetVertices(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c)             (p)->lpVtbl->GetVertices(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c)              (p)->lpVtbl->SetNormals(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c)              (p)->lpVtbl->GetNormals(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormalCount(p)                (p)->lpVtbl->GetNormalCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMMeshBuilder3_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMMeshBuilder3_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder3_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder3_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMMeshBuilder3_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMMeshBuilder3_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMMeshBuilder3_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMMeshBuilder3_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMMeshBuilder3 methods ***/
+#define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)
+#define IDirect3DRMMeshBuilder3_Save(p,a,b,c)                    (p)->Save(a,b,c)
+#define IDirect3DRMMeshBuilder3_Scale(p,a,b,c)                   (p)->Scale(a,b,c)
+#define IDirect3DRMMeshBuilder3_Translate(p,a,b,c)               (p)->Translate(a)
+#define IDirect3DRMMeshBuilder3_SetColorSource(p,a)              (p)->SetColorSource(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetBox(p,a)                      (p)->GetBox(a)
+#define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b)           (p)->GenerateNormals(a,b)
+#define IDirect3DRMMeshBuilder3_GetColorSource(p)                (p)->GetColorSource()
+#define IDirect3DRMMeshBuilder3_AddMesh(p,a)                     (p)-->AddMesh(a)
+#define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a)              (p)->AddMeshBuilder(a)
+#define IDirect3DRMMeshBuilder3_AddFrame(p,a)                    (p)->AddFrame(a)
+#define IDirect3DRMMeshBuilder3_AddFace(p,a)                     (p)->AddFace(a)
+#define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f)          (p)->AddFaces(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c)            (p)->ReserveSpace(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColor(p,a)                    (p)->SetColor(a)
+#define IDirect3DRMMeshBuilder3_SetTexture(p,a)                  (p)->SetTexture(a)
+#define IDirect3DRMMeshBuilder3_SetMaterial(p,a)                 (p)->SetMaterial(a)
+#define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)
+#define IDirect3DRMMeshBuilder3_SetQuality(p,a)                  (p)->SetQuality(a)
+#define IDirect3DRMMeshBuilder3_SetPerspective(p,a)              (p)->SetPerspective(a)
+#define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d)             (p)->SetVertex(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d)             (p)->SetNormal(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c)   (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b)            (p)->SetVertexColor(a,b)
+#define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d)     (p)->SetVertexColorRGB(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_GetFaces(p,a)                    (p)->GetFaces(a)
+#define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f)       (p)->GetGeometry(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c)   (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c)               (p)->AddVertex(a,b,c)
+#define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c)               (p)->AddNormal(a,b,c)
+#define IDirect3DRMMeshBuilder3_CreateFace(p,a)                  (p)->CreateFace(a)
+
+#define IDirect3DRMMeshBuilder3_GetQuality(p)                    (p)->GetQuality()
+#define IDirect3DRMMeshBuilder3_GetPerspective(p)                (p)->GetPerspective()
+#define IDirect3DRMMeshBuilder3_GetFaceCount(p)                  (p)->GetFaceCount()
+#define IDirect3DRMMeshBuilder3_GetVertexCount(p)                (p)->GetVertexCount()
+#define IDirect3DRMMeshBuilder3_GetVertexColor(p,a)              (p)->GetVertexColor(a)
+#define IDirect3DRMMeshBuilder3_CreateMesh(p,a)                  (p)->CreateMesh(a)
+#define IDirect3DRMMeshBuilder3_GetFace(p,a,b)                   (p)->GetFace(a,b)
+#define IDirect3DRMMeshBuilder3_GetVertex(p,a,b)                 (p)->GetVertex(a,b)
+#define IDirect3DRMMeshBuilder3_GetNormal(p,a,b)                 (p)->GetNormal(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b)            (p)->DeleteVertices(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b)             (p)->DeleteNormals(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteFace(p,a)                  (p)->DeleteFace(a)
+#define IDirect3DRMMeshBuilder3_Empty(p,a)                       (p)->Empty(a)
+#define IDirect3DRMMeshBuilder3_Optimize(p,a)                    (p)->Optimize(a)
+#define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d)       (p)->AddFacesIndexed(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a)               (p)->CreateSubMesh(a)
+#define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b)             (p)->GetParentMesh(a,b)
+#define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b)              (p)->GetSubMeshes(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a)               (p)->DeleteSubMesh(a)
+#define IDirect3DRMMeshBuilder3_Enable(p,a)                      (p)->Enable(a)
+#define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d)          (p)->AddTriangles(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c)             (p)->SetVertices(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c)             (p)->GetVertices(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c)              (p)->SetNormals(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c)              (p)->GetNormals(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormalCount(p)                (p)->GetNormalCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMLight interface
+ */
+#define INTERFACE IDirect3DRMLight
+DECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMLight methods ***/
+    STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;
+    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+    STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;
+    STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;
+    STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE;
+    STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+    STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE;
+    STDMETHOD(SetEnableFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+    STDMETHOD(GetEnableFrame)(THIS_ IDirect3DRMFrame **frame) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMLight_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMLight_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMLight_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMLight_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMLight_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMLight_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMLight_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMLight_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMLight_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMLight_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMLight_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMLight methods ***/
+#define IDirect3DRMLight_SetType(p,a)                     (p)->lpVtbl->SetType(p,a)
+#define IDirect3DRMLight_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMLight_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMLight_SetRange(p,a)                    (p)->lpVtbl->SetRange(p,a)
+#define IDirect3DRMLight_SetUmbra(p,a)                    (p)->lpVtbl->SetUmbra(p,a)
+#define IDirect3DRMLight_SetPenumbra(p,a)                 (p)->lpVtbl->SetPenumbra(p,a)
+#define IDirect3DRMLight_SetConstantAttenuation(p,a)      (p)->lpVtbl->SetConstantAttenuation(p,a)
+#define IDirect3DRMLight_SetLinearAttenuation(p,a)        (p)->lpVtbl->SetLinearAttenuation(p,a)
+#define IDirect3DRMLight_SetQuadraticAttenuation(p,a)     (p)->lpVtbl->SetQuadraticAttenuation(p,a)
+#define IDirect3DRMLight_GetRange(p)                      (p)->lpVtbl->GetRange(p)
+#define IDirect3DRMLight_GetUmbra(p)                      (p)->lpVtbl->GetUmbra(p)
+#define IDirect3DRMLight_GetPenumbra(p)                   (p)->lpVtbl->GetPenumbra(p)
+#define IDirect3DRMLight_GetConstantAttenuation(p)        (p)->lpVtbl->GetConstantAttenuation(p)
+#define IDirect3DRMLight_GetLinearAttenuation(p)          (p)->lpVtbl->GetLinearAttenuation(p)
+#define IDirect3DRMLight_GetQuadraticAttenuation(p)       (p)->lpVtbl->GetQuadraticAttenuation(p)
+#define IDirect3DRMLight_GetColor(p)                      (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMLight_GetType(p)                       (p)->lpVtbl->GetType(p)
+#define IDirect3DRMLight_SetEnableFrame(p,a)              (p)->lpVtbl->SetEnableFrame(p,a)
+#define IDirect3DRMLight_GetEnableFrame(p,a)              (p)->lpVtbl->GetEnableFrame(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMLight_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMLight_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMLight_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMLight_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMLight_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMLight_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMLight_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMLight_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMLight_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMLight_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMLight_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMLight methods ***/
+#define IDirect3DRMLight_SetType(p,a)                     (p)->SetType(a)
+#define IDirect3DRMLight_SetColor(p,a)                    (p)->SetColor(a)
+#define IDirect3DRMLight_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMLight_SetRange(p,a)                    (p)->SetRange(a)
+#define IDirect3DRMLight_SetUmbra(p,a)                    (p)->SetUmbra(a)
+#define IDirect3DRMLight_SetPenumbra(p,a)                 (p)->SetPenumbra(a)
+#define IDirect3DRMLight_SetConstantAttenuation(p,a)      (p)->SetConstantAttenuation(a)
+#define IDirect3DRMLight_SetLinearAttenuation(p,a)        (p)->SetLinearAttenuation(a)
+#define IDirect3DRMLight_SetQuadraticAttenuation(p,a)     (p)->SetQuadraticAttenuation(a)
+#define IDirect3DRMLight_GetRange(p)                      (p)->GetRange()
+#define IDirect3DRMLight_GetUmbra(p)                      (p)->GetUmbra()
+#define IDirect3DRMLight_GetPenumbra(p)                   (p)->GetPenumbra()
+#define IDirect3DRMLight_GetConstantAttenuation(p)        (p)->GetConstantAttenuation()
+#define IDirect3DRMLight_GetLinearAttenuation(p)          (p)->GetLinearAttenuation()
+#define IDirect3DRMLight_GetQuadraticAttenuation(p)       (p)->GetQuadraticAttenuation()
+#define IDirect3DRMLight_GetColor(p)                      (p)->GetColor()
+#define IDirect3DRMLight_GetType(p)                       (p)->GetType()
+#define IDirect3DRMLight_SetEnableFrame(p,a)              (p)->SetEnableFrame(a)
+#define IDirect3DRMLight_GetEnableFrame(p,a)              (p)->GetEnableFrame(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMTexture interface
+ */
+#define INTERFACE IDirect3DRMTexture
+DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMTexture methods ***/
+    STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
+    STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
+    STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
+    STDMETHOD(SetColors)(THIS_ DWORD) PURE;
+    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
+    STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
+    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
+    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
+    STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
+    STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
+    STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+    STDMETHOD_(DWORD, GetColors)(THIS) PURE;
+    STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
+    STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMTexture_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMTexture_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMTexture_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMTexture_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMTexture_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMTexture_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMTexture_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMTexture_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture_InitFromFile(p,a)                (p)->lpVtbl->InitFromFile(p,a)
+#define IDirect3DRMTexture_InitFromSurface(p,a)             (p)->lpVtbl->InitFromSurface(p,a)
+#define IDirect3DRMTexture_InitFromResource(p,a)            (p)->lpVtbl->InitFromResource(p,a)
+#define IDirect3DRMTexture_Changed(p,a,b)                   (p)->lpVtbl->Changed(p,a,b)
+#define IDirect3DRMTexture_SetColors(p,a)                   (p)->lpVtbl->SetColors(p,a)
+#define IDirect3DRMTexture_SetShades(p,a)                   (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMTexture_SetDecalSize(p,a,b)              (p)->lpVtbl->SetDecalSize(p,a,b)
+#define IDirect3DRMTexture_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)
+#define IDirect3DRMTexture_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)
+#define IDirect3DRMTexture_SetDecalTransparencyColor(p,a)   (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)
+#define IDirect3DRMTexture_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture_GetImage(p)                      (p)->lpVtbl->GetImage(p)
+#define IDirect3DRMTexture_GetShades(p)                     (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMTexture_GetColors(p)                     (p)->lpVtbl->GetColors(p)
+#define IDirect3DRMTexture_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)
+#define IDirect3DRMTexture_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)
+#define IDirect3DRMTexture_GetDecalTransparencyColor(p)     (p)->lpVtbl->GetDecalTransparencyColor(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMTexture_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMTexture_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMTexture_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMTexture_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMTexture_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMTexture_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMTexture_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMTexture_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture_InitFromFile(p,a)                (p)->InitFromFile(a)
+#define IDirect3DRMTexture_InitFromSurface(p,a)             (p)->InitFromSurface(a)
+#define IDirect3DRMTexture_InitFromResource(p,a)            (p)->InitFromResource(a)
+#define IDirect3DRMTexture_Changed(p,a,b)                   (p)->Changed(a,b)
+#define IDirect3DRMTexture_SetColors(p,a)                   (p)->SetColors(a)
+#define IDirect3DRMTexture_SetShades(p,a)                   (p)->SetShades(a)
+#define IDirect3DRMTexture_SetDecalSize(p,a,b)              (p)->SetDecalSize(a,b)
+#define IDirect3DRMTexture_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)
+#define IDirect3DRMTexture_SetDecalScale(p,a)               (p)->SetDecalScale(a)
+#define IDirect3DRMTexture_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)
+#define IDirect3DRMTexture_SetDecalTransparencyColor(p,a)   (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)
+#define IDirect3DRMTexture_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)
+#define IDirect3DRMTexture_GetImage(p)                      (p)->GetImage()
+#define IDirect3DRMTexture_GetShades(p)                     (p)->GetShades()
+#define IDirect3DRMTexture_GetColors(p)                     (p)->GetColors()
+#define IDirect3DRMTexture_GetDecalScale(p)                 (p)->GetDecalScale()
+#define IDirect3DRMTexture_GetDecalTransparency(p)          (p)->GetDecalTransparency()
+#define IDirect3DRMTexture_GetDecalTransparencyColor(p)     (p)->GetDecalTransparencyColor()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMTexture2 interface
+ */
+#define INTERFACE IDirect3DRMTexture2
+DECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMTexture methods ***/
+    STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
+    STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
+    STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
+    STDMETHOD(SetColors)(THIS_ DWORD) PURE;
+    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
+    STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
+    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
+    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
+    STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
+    STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
+    STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+    STDMETHOD_(DWORD, GetColors)(THIS) PURE;
+    STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
+    STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
+    /*** IDirect3DRMTexture2 methods ***/
+    STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE;
+    STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE;
+    STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMTexture2_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMTexture2_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture2_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMTexture2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMTexture2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMTexture2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMTexture2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMTexture2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMTexture2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture2_InitFromFile(p,a)                (p)->lpVtbl->InitFromFile(p,a)
+#define IDirect3DRMTexture2_InitFromSurface(p,a)             (p)->lpVtbl->InitFromSurface(p,a)
+#define IDirect3DRMTexture2_InitFromResource(p,a)            (p)->lpVtbl->InitFromResource(p,a)
+#define IDirect3DRMTexture2_Changed(p,a,b)                   (p)->lpVtbl->Changed(p,a,b)
+#define IDirect3DRMTexture2_SetColors(p,a)                   (p)->lpVtbl->SetColors(p,a)
+#define IDirect3DRMTexture2_SetShades(p,a)                   (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMTexture2_SetDecalSize(p,a,b)              (p)->lpVtbl->SetDecalSize(p,a,b)
+#define IDirect3DRMTexture2_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture2_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)
+#define IDirect3DRMTexture2_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)
+#define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a)   (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture2_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)
+#define IDirect3DRMTexture2_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture2_GetImage(p)                      (p)->lpVtbl->GetImage(p)
+#define IDirect3DRMTexture2_GetShades(p)                     (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMTexture2_GetColors(p)                     (p)->lpVtbl->GetColors(p)
+#define IDirect3DRMTexture2_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)
+#define IDirect3DRMTexture2_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)
+#define IDirect3DRMTexture2_GetDecalTransparencyColor(p)     (p)->lpVtbl->GetDecalTransparencyColor(p)
+/*** IDirect3DRMTexture2 methods ***/
+#define IDirect3DRMTexture2_InitFromImage(p,a)               (p)->lpVtbl->InitFromImage(p,a)
+#define IDirect3DRMTexture2_InitFromResource2(p,a,b,c)       (p)->lpVtbl->InitFromResource2(p,a,b,c)
+#define IDirect3DRMTexture2_GenerateMIPMap(p,a)              (p)->lpVtbl->GenerateMIPMap(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMTexture2_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMTexture2_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMTexture2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMTexture2_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMTexture2_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMTexture2_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMTexture2_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMTexture2_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture2_InitFromFile(p,a)                (p)->InitFromFile(a)
+#define IDirect3DRMTexture2_InitFromSurface(p,a)             (p)->InitFromSurface(a)
+#define IDirect3DRMTexture2_InitFromResource(p,a)            (p)->InitFromResource(a)
+#define IDirect3DRMTexture2_Changed(p,a,b)                   (p)->Changed(a,b)
+#define IDirect3DRMTexture2_SetColors(p,a)                   (p)->SetColors(a)
+#define IDirect3DRMTexture2_SetShades(p,a)                   (p)->SetShades(a)
+#define IDirect3DRMTexture2_SetDecalSize(p,a,b)              (p)->SetDecalSize(a,b)
+#define IDirect3DRMTexture2_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)
+#define IDirect3DRMTexture2_SetDecalScale(p,a)               (p)->SetDecalScale(a)
+#define IDirect3DRMTexture2_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)
+#define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a)   (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture2_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)
+#define IDirect3DRMTexture2_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)
+#define IDirect3DRMTexture2_GetImage(p)                      (p)->GetImage()
+#define IDirect3DRMTexture2_GetShades(p)                     (p)->GetShades()
+#define IDirect3DRMTexture2_GetColors(p)                     (p)->GetColors()
+#define IDirect3DRMTexture2_GetDecalScale(p)                 (p)->GetDecalScale()
+#define IDirect3DRMTexture2_GetDecalTransparency(p)          (p)->GetDecalTransparency()
+#define IDirect3DRMTexture2_GetDecalTransparencyColor(p)     (p)->GetDecalTransparencyColor()
+/*** IDirect3DRMTexture2 methods ***/
+#define IDirect3DRMTexture2_InitFromImage(p,a)               (p)->InitFromImage(a)
+#define IDirect3DRMTexture2_InitFromResource2(p,a,b,c)       (p)->InitFromResource2(a,b,c)
+#define IDirect3DRMTexture2_GenerateMIPMap(p,a)              (p)->GenerateMIPMap(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMTexture3 interface
+ */
+#define INTERFACE IDirect3DRMTexture3
+DECLARE_INTERFACE_(IDirect3DRMTexture3, IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMTexture3 methods ***/
+    STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
+    STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;
+    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
+    STDMETHOD(Changed)(THIS_ DWORD flags, DWORD rect_count, RECT *rects) PURE;
+    STDMETHOD(SetColors)(THIS_ DWORD) PURE;
+    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
+    STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
+    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
+    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
+    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
+    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
+    STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
+    STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
+    STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+    STDMETHOD_(DWORD, GetColors)(THIS) PURE;
+    STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
+    STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
+    STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
+    STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE;
+    STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE;
+    STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
+    STDMETHOD(GetSurface)(THIS_ DWORD flags, IDirectDrawSurface **surface) PURE;
+    STDMETHOD(SetCacheOptions)(THIS_ LONG lImportance, DWORD dwFlags) PURE;
+    STDMETHOD(GetCacheOptions)(THIS_ LONG *importance, DWORD *flags) PURE;
+    STDMETHOD(SetDownsampleCallback)(THIS_ D3DRMDOWNSAMPLECALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetValidationCallback)(THIS_ D3DRMVALIDATIONCALLBACK cb, void *ctx) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture3_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMTexture3_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMTexture3_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture3_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMTexture3_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMTexture3_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMTexture3_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMTexture3_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMTexture3_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMTexture3_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMTexture3 methods ***/
+#define IDirect3DRMTexture3_InitFromFile(p,a)                (p)->lpVtbl->InitFromFile(p,a)
+#define IDirect3DRMTexture3_InitFromSurface(p,a)             (p)->lpVtbl->InitFromSurface(p,a)
+#define IDirect3DRMTexture3_InitFromResource(p,a)            (p)->lpVtbl->InitFromResource(p,a)
+#define IDirect3DRMTexture3_Changed(p,a,b,c)                 (p)->lpVtbl->Changed(p,a,b,c)
+#define IDirect3DRMTexture3_SetColors(p,a)                   (p)->lpVtbl->SetColors(p,a)
+#define IDirect3DRMTexture3_SetShades(p,a)                   (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMTexture3_SetDecalSize(p,a,b)              (p)->lpVtbl->SetDecalSize(p,a,b)
+#define IDirect3DRMTexture3_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture3_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)
+#define IDirect3DRMTexture3_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)
+#define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a)   (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture3_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)
+#define IDirect3DRMTexture3_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture3_GetImage(p)                      (p)->lpVtbl->GetImage(p)
+#define IDirect3DRMTexture3_GetShades(p)                     (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMTexture3_GetColors(p)                     (p)->lpVtbl->GetColors(p)
+#define IDirect3DRMTexture3_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)
+#define IDirect3DRMTexture3_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)
+#define IDirect3DRMTexture3_GetDecalTransparencyColor(p)     (p)->lpVtbl->GetDecalTransparencyColor(p)
+#define IDirect3DRMTexture3_InitFromImage(p,a)               (p)->lpVtbl->InitFromImage(p,a)
+#define IDirect3DRMTexture3_InitFromResource2(p,a,b,c)       (p)->lpVtbl->InitFromResource2(p,a,b,c)
+#define IDirect3DRMTexture3_GenerateMIPMap(p,a)              (p)->lpVtbl->GenerateMIPMap(p,a)
+#define IDirect3DRMTexture3_GetSurface(p,a,b)                (p)->lpVtbl->GetSurface(p,a,b)
+#define IDirect3DRMTexture3_SetCacheOptions(p,a,b)           (p)->lpVtbl->SetCacheOptions(p,a,b)
+#define IDirect3DRMTexture3_GetCacheOptions(p,a,b)           (p)->lpVtbl->GetCacheOptions(p,a,b)
+#define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b)     (p)->lpVtbl->SetDownsampleCallback(p,a,b)
+#define IDirect3DRMTexture3_SetValidationCallback(p,a,b)     (p)->lpVtbl->SetValidationCallback(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture3_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)
+#define IDirect3DRMTexture3_AddRef(p)                        (p)->AddRef()
+#define IDirect3DRMTexture3_Release(p)                       (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture3_Clone(p,a,b,c)                   (p)->Clone(a,b,c)
+#define IDirect3DRMTexture3_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMTexture3_SetAppData(p,a)                  (p)->SetAppData(a)
+#define IDirect3DRMTexture3_GetAppData(p)                    (p)->GetAppData()
+#define IDirect3DRMTexture3_SetName(p,a)                     (p)->SetName(a)
+#define IDirect3DRMTexture3_GetName(p,a,b)                   (p)->GetName(a,b)
+#define IDirect3DRMTexture3_GetClassName(p,a,b)              (p)->GetClassName(a,b)
+/*** IDirect3DRMTexture3 methods ***/
+#define IDirect3DRMTexture3_InitFromFile(p,a)                (p)->InitFromFile(a)
+#define IDirect3DRMTexture3_InitFromSurface(p,a)             (p)->InitFromSurface(a)
+#define IDirect3DRMTexture3_InitFromResource(p,a)            (p)->InitFromResource(a)
+#define IDirect3DRMTexture3_Changed(p,a,b,c)                 (p)->Changed(a,b,c)
+#define IDirect3DRMTexture3_SetColors(p,a)                   (p)->SetColors(a)
+#define IDirect3DRMTexture3_SetShades(p,a)                   (p)->SetShades(a)
+#define IDirect3DRMTexture3_SetDecalSize(p,a,b)              (p)->SetDecalSize(a,b)
+#define IDirect3DRMTexture3_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)
+#define IDirect3DRMTexture3_SetDecalScale(p,a)               (p)->SetDecalScale(a)
+#define IDirect3DRMTexture3_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)
+#define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a)   (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture3_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)
+#define IDirect3DRMTexture3_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)
+#define IDirect3DRMTexture3_GetImage(p)                      (p)->GetImage()
+#define IDirect3DRMTexture3_GetShades(p)                     (p)->GetShades()
+#define IDirect3DRMTexture3_GetColors(p)                     (p)->GetColors()
+#define IDirect3DRMTexture3_GetDecalScale(p)                 (p)->GetDecalScale()
+#define IDirect3DRMTexture3_GetDecalTransparency(p)          (p)->GetDecalTransparency()
+#define IDirect3DRMTexture3_GetDecalTransparencyColor(p)     (p)->GetDecalTransparencyColor()
+#define IDirect3DRMTexture3_InitFromImage(p,a)               (p)->InitFromImage(a)
+#define IDirect3DRMTexture3_InitFromResource2(p,a,b,c)       (p)->InitFromResource2(a,b,c)
+#define IDirect3DRMTexture3_GenerateMIPMap(p,a)              (p)->GenerateMIPMap(a)
+#define IDirect3DRMTexture3_GetSurface(p,a,b)                (p)->GetSurface(a,b)
+#define IDirect3DRMTexture3_SetCacheOptions(p,a,b)           (p)->SetCacheOptions(a,b)
+#define IDirect3DRMTexture3_GetCacheOptions(p,a,b)           (p)->GetCacheOptions(a,b)
+#define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b)     (p)->SetDownsampleCallback(a,b)
+#define IDirect3DRMTexture3_SetValidationCallback(p,a,b)     (p)->SetValidationCallback(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMWrap interface
+ */
+#define INTERFACE IDirect3DRMWrap
+DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMWrap methods ***/
+    STDMETHOD(Init)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
+            D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
+            D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv) PURE;
+    STDMETHOD(Apply)(THIS_ IDirect3DRMObject *object) PURE;
+    STDMETHOD(ApplyRelative)(THIS_ IDirect3DRMFrame *frame, IDirect3DRMObject *object) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMWrap_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMWrap_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMWrap_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWrap_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMWrap_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMWrap_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMWrap_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMWrap_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMWrap_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMWrap_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMWrap methods ***/
+#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)   (p)->lpVtbl->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
+#define IDirect3DRMWrap_Apply(p,a)                              (p)->lpVtbl->Apply(p,a)
+#define IDirect3DRMWrap_ApplyRelative(p,a,b)                    (p)->lpVtbl->ApplyRelative(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMWrap_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMWrap_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMWrap_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWrap_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMWrap_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMWrap_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMWrap_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMWrap_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMWrap_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMWrap_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMWrap methods ***/
+#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)   (p)->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
+#define IDirect3DRMWrap_Apply(p,a)                              (p)->Apply(p,a)
+#define IDirect3DRMWrap_ApplyRelative(p,a,b)                    (p)->ApplyRelative(p,a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMaterial interface
+ */
+#define INTERFACE IDirect3DRMMaterial
+DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMMaterial methods ***/
+    STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
+    STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+    STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+    STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
+    STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+    STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMaterial_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMaterial_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMaterial_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMaterial_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMaterial_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMaterial_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMaterial_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMaterial methods ***/
+#define IDirect3DRMMaterial_SetPower(p,a)                           (p)->lpVtbl->SetPower(p,a)
+#define IDirect3DRMMaterial_SetSpecular(p,a,b,c)                    (p)->lpVtbl->SetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial_SetEmissive(p,a,b,c)                    (p)->lpVtbl->SetEmissive(p,a,b,c)
+#define IDirect3DRMMaterial_GetPower(p)                             (p)->lpVtbl->GetPower(p)
+#define IDirect3DRMMaterial_GetSpecular(p,a,b,c)                    (p)->lpVtbl->GetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial_GetEmissive(p,a,b,c)                    (p)->lpVtbl->GetEmissive(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMMaterial_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMMaterial_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMMaterial_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMaterial_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMMaterial_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMMaterial_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMMaterial_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMMaterial_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMMaterial methods ***/
+#define IDirect3DRMMaterial_SetPower(p,a)                           (p)->SetPower(a)
+#define IDirect3DRMMaterial_SetSpecular(p,a,b,c)                    (p)->SetSpecular(a,b,c)
+#define IDirect3DRMMaterial_SetEmissive(p,a,b,c)                    (p)->SetEmissive(a,b,c)
+#define IDirect3DRMMaterial_GetPower(p)                             (p)->GetPower()
+#define IDirect3DRMMaterial_GetSpecular(p,a,b,c)                    (p)->GetSpecular(a,b,c)
+#define IDirect3DRMMaterial_GetEmissive(p,a,b,c)                    (p)->GetEmissive(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMaterial2 interface
+ */
+#define INTERFACE IDirect3DRMMaterial2
+DECLARE_INTERFACE_(IDirect3DRMMaterial2, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMMaterial2 methods ***/
+    STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
+    STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+    STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+    STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
+    STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+    STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+    STDMETHOD(GetAmbient)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+    STDMETHOD(SetAmbient)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial2_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMaterial2_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMaterial2_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial2_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial2_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMaterial2_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMaterial2_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMaterial2_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMaterial2_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMaterial2 methods ***/
+#define IDirect3DRMMaterial2_SetPower(p,a)                           (p)->lpVtbl->SetPower(p,a)
+#define IDirect3DRMMaterial2_SetSpecular(p,a,b,c)                    (p)->lpVtbl->SetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial2_SetEmissive(p,a,b,c)                    (p)->lpVtbl->SetEmissive(p,a,b,c)
+#define IDirect3DRMMaterial2_GetPower(p)                             (p)->lpVtbl->GetPower(p)
+#define IDirect3DRMMaterial2_GetSpecular(p,a,b,c)                    (p)->lpVtbl->GetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial2_GetEmissive(p,a,b,c)                    (p)->lpVtbl->GetEmissive(p,a,b,c)
+#define IDirect3DRMMaterial2_SetAmbient(p,a,b,c)                     (p)->lpVtbl->SetAmbient(p,a,b,c)
+#define IDirect3DRMMaterial2_GetAmbient(p,a,b,c)                     (p)->lpVtbl->GetAmbient(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial2_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMMaterial2_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMMaterial2_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial2_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMaterial2_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMMaterial2_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMMaterial2_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMMaterial2_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMMaterial2_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMMaterial2 methods ***/
+#define IDirect3DRMMaterial2_SetPower(p,a)                           (p)->SetPower(a)
+#define IDirect3DRMMaterial2_SetSpecular(p,a,b,c)                    (p)->SetSpecular(a,b,c)
+#define IDirect3DRMMaterial2_SetEmissive(p,a,b,c)                    (p)->SetEmissive(a,b,c)
+#define IDirect3DRMMaterial2_GetPower(p)                             (p)->GetPower()
+#define IDirect3DRMMaterial2_GetSpecular(p,a,b,c)                    (p)->GetSpecular(a,b,c)
+#define IDirect3DRMMaterial2_GetEmissive(p,a,b,c)                    (p)->GetEmissive(a,b,c)
+#define IDirect3DRMMaterial2_SetAmbient(p,a,b,c)                     (p)->SetAmbient(a,b,c)
+#define IDirect3DRMMaterial2_GetAmbient(p,a,b,c)                     (p)->GetAmbient(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimation interface
+ */
+#define INTERFACE IDirect3DRMAnimation
+DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMAnimation methods ***/
+    STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
+    STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
+    STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
+    STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+    STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimation_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimation_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimation_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimation_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimation_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimation_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimation_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimation methods ***/
+#define IDirect3DRMAnimation_SetOptions(p,a)                         (p)->lpVtbl->SetOptions(p,a)
+#define IDirect3DRMAnimation_AddRotateKey(p,a,b)                     (p)->lpVtbl->AddRotateKey(p,a,b)
+#define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d)               (p)->lpVtbl->AddPositionKey(p,a,b,c,d)
+#define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d)                  (p)->lpVtbl->AddScaleKey(p,a,b,c,d)
+#define IDirect3DRMAnimation_DeleteKey(p,a)                          (p)->lpVtbl->DeleteKey(p,a)
+#define IDirect3DRMAnimation_SetFrame(p,a)                           (p)->lpVtbl->SetFrame(p,a)
+#define IDirect3DRMAnimation_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)
+#define IDirect3DRMAnimation_GetOptions(p)                           (p)->lpVtbl->GetOptions(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimation_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMAnimation_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMAnimation_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimation_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMAnimation_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMAnimation_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMAnimation_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMAnimation_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimation methods ***/
+#define IDirect3DRMAnimation_SetOptions(p,a)                         (p)->SetOptions(a)
+#define IDirect3DRMAnimation_AddRotateKey(p,a,b)                     (p)->AddRotateKey(a,b)
+#define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d)               (p)->AddPositionKey(a,b,c,d)
+#define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d)                  (p)->AddScaleKey(a,b,c,d)
+#define IDirect3DRMAnimation_DeleteKey(p,a)                          (p)->DeleteKey(a)
+#define IDirect3DRMAnimation_SetFrame(p,a)                           (p)->SetFrame(a)
+#define IDirect3DRMAnimation_SetTime(p,a)                            (p)->SetTime(a)
+#define IDirect3DRMAnimation_GetOptions(p)                           (p)->GetOptions()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimation2 interface
+ */
+#define INTERFACE IDirect3DRMAnimation2
+DECLARE_INTERFACE_(IDirect3DRMAnimation2, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMAnimation2 methods ***/
+    STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
+    STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
+    STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+    STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
+    STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE;
+    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+    STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
+    STDMETHOD(GetFrame)(THIS_ IDirect3DRMFrame3 **frame) PURE;
+    STDMETHOD(DeleteKeyByID)(THIS_ DWORD dwID) PURE;
+    STDMETHOD(AddKey)(THIS_ D3DRMANIMATIONKEY *key) PURE;
+    STDMETHOD(ModifyKey)(THIS_ D3DRMANIMATIONKEY *key) PURE;
+    STDMETHOD(GetKeys)(THIS_ D3DVALUE time_min, D3DVALUE time_max, DWORD *key_count, D3DRMANIMATIONKEY *keys);
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation2_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimation2_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimation2_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation2_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation2_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimation2_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimation2_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimation2_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimation2_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimation2 methods ***/
+#define IDirect3DRMAnimation2_SetOptions(p,a)                         (p)->lpVtbl->SetOptions(p,a)
+#define IDirect3DRMAnimation2_AddRotateKey(p,a,b)                     (p)->lpVtbl->AddRotateKey(p,a,b)
+#define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d)               (p)->lpVtbl->AddPositionKey(p,a,b,c,d)
+#define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d)                  (p)->lpVtbl->AddScaleKey(p,a,b,c,d)
+#define IDirect3DRMAnimation2_DeleteKey(p,a)                          (p)->lpVtbl->DeleteKey(p,a)
+#define IDirect3DRMAnimation2_SetFrame(p,a)                           (p)->lpVtbl->SetFrame(p,a)
+#define IDirect3DRMAnimation2_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)
+#define IDirect3DRMAnimation2_GetOptions(p)                           (p)->lpVtbl->GetOptions(p)
+#define IDirect3DRMAnimation2_GetFrame(p,a)                           (p)->lpVtbl->GetFrame(p,a)
+#define IDirect3DRMAnimation2_DeleteKeyByID(p,a)                      (p)->lpVtbl->DeleteKeyByID(p,a)
+#define IDirect3DRMAnimation2_AddKey(p,a)                             (p)->lpVtbl->AddKey(p,a)
+#define IDirect3DRMAnimation2_ModifyKey(p,a)                          (p)->lpVtbl->ModifyKey(p,a)
+#define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d)                      (p)->lpVtbl->GetKeys(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation2_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimation2_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMAnimation2_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation2_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimation2_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMAnimation2_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMAnimation2_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMAnimation2_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMAnimation2_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimation2 methods ***/
+#define IDirect3DRMAnimation2_SetOptions(p,a)                         (p)->SetOptions(a)
+#define IDirect3DRMAnimation2_AddRotateKey(p,a,b)                     (p)->AddRotateKey(a,b)
+#define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d)               (p)->AddPositionKey(a,b,c,d)
+#define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d)                  (p)->AddScaleKey(a,b,c,d)
+#define IDirect3DRMAnimation2_DeleteKey(p,a)                          (p)->DeleteKey(a)
+#define IDirect3DRMAnimation2_SetFrame(p,a)                           (p)->SetFrame(a)
+#define IDirect3DRMAnimation2_SetTime(p,a)                            (p)->SetTime(a)
+#define IDirect3DRMAnimation2_GetOptions(p)                           (p)->GetOptions()
+#define IDirect3DRMAnimation2_GetFrame(p,a)                           (p)->GetFrame(a)
+#define IDirect3DRMAnimation2_DeleteKeyByID(p,a)                      (p)->DeleteKeyByID(a)
+#define IDirect3DRMAnimation2_AddKey(p,a)                             (p)->AddKey(a)
+#define IDirect3DRMAnimation2_ModifyKey(p,a)                          (p)->ModifyKey(a)
+#define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d)                      (p)->GetKeys(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimationSet interface
+ */
+#define INTERFACE IDirect3DRMAnimationSet
+DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMAnimationSet methods ***/
+    STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE;
+    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURECALLBACK cb, void *ctx, IDirect3DRMFrame *parent)PURE;
+    STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE;
+    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimationSet_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimationSet_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimationSet_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimationSet_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimationSet_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimationSet_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimationSet methods ***/
+#define IDirect3DRMAnimationSet_AddAnimation(p,a)                       (p)->lpVtbl->AddAnimation(p,a)
+#define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f)                     (p)->lpVtbl->Load(p,a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet_DeleteAnimation(p,a)                    (p)->lpVtbl->DeleteAnimation(p,a)
+#define IDirect3DRMAnimationSet_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimationSet_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMAnimationSet_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMAnimationSet_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMAnimationSet_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMAnimationSet_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMAnimationSet_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimationSet methods ***/
+#define IDirect3DRMAnimationSet_AddAnimation(p,a)                       (p)->AddAnimation(a)
+#define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f)                     (p)->Load(a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet_DeleteAnimation(p,a)                    (p)->DeleteAnimation(a)
+#define IDirect3DRMAnimationSet_SetTime(p,a)                            (p)->SetTime(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimationSet2 interface
+ */
+#define INTERFACE IDirect3DRMAnimationSet2
+DECLARE_INTERFACE_(IDirect3DRMAnimationSet2, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMAnimationSet2 methods ***/
+    STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE;
+    STDMETHOD(Load)(THIS_ void *source, void *object_id, D3DRMLOADOPTIONS flags,
+            D3DRMLOADTEXTURE3CALLBACK cb, void *ctx, IDirect3DRMFrame3 *parent_frame)PURE;
+    STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE;
+    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+    STDMETHOD(GetAnimations)(THIS_ struct IDirect3DRMAnimationArray **array) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet2_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimationSet2_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimationSet2_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet2_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet2_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimationSet2_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimationSet2_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimationSet2_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimationSet2_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimationSet2 methods ***/
+#define IDirect3DRMAnimationSet2_AddAnimation(p,a)                       (p)->lpVtbl->AddAnimation(p,a)
+#define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f)                     (p)->lpVtbl->Load(p,a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet2_DeleteAnimation(p,a)                    (p)->lpVtbl->DeleteAnimation(p,a)
+#define IDirect3DRMAnimationSet2_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)
+#define IDirect3DRMAnimationSet2_GetAnimations(p,a)                      (p)->lpVtbl->GetAnimations(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet2_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimationSet2_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMAnimationSet2_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet2_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet2_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMAnimationSet2_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMAnimationSet2_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMAnimationSet2_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMAnimationSet2_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimationSet2 methods ***/
+#define IDirect3DRMAnimationSet2_AddAnimation(p,a)                       (p)->AddAnimation(a)
+#define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f)                     (p)->Load(a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet2_DeleteAnimation(p,a)                    (p)->DeleteAnimation(a)
+#define IDirect3DRMAnimationSet2_SetTime(p,a)                            (p)->SetTime(a)
+#define IDirect3DRMAnimationSet2_GetAnimations(p,a)                      (p)->GetAnimations(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMUserVisual interface
+ */
+#define INTERFACE IDirect3DRMUserVisual
+DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMUserVisual methods ***/
+    STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMUserVisual_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMUserVisual_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMUserVisual_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMUserVisual_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMUserVisual_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMUserVisual_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMUserVisual_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMUserVisual_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMUserVisual_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMUserVisual methods ***/
+#define IDirect3DRMUserVisual_Init(p,a,b)                             (p)->lpVtbl->Init(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMUserVisual_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMUserVisual_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMUserVisual_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMUserVisual_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMUserVisual_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMUserVisual_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMUserVisual_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMUserVisual_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMUserVisual_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMUserVisual methods ***/
+#define IDirect3DRMUserVisual_Init(p,a,b)                             (p)->Init(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMArray interface
+ */
+#define INTERFACE IDirect3DRMArray
+DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMArray_GetSize(p)                              (p)->GetSize()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMObjectArray interface
+ */
+#define INTERFACE IDirect3DRMObjectArray
+DECLARE_INTERFACE_(IDirect3DRMObjectArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMObjectArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMObject **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMObjectArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMObjectArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMObjectArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMObjectArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMObjectArray methods ***/
+#define IDirect3DRMObjectArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMObjectArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMObjectArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMObjectArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMObjectArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMObjectArray methods ***/
+#define IDirect3DRMObjectArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDeviceArray interface
+ */
+#define INTERFACE IDirect3DRMDeviceArray
+DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMDeviceArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMDevice **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDeviceArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDeviceArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDeviceArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMDeviceArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMDeviceArray methods ***/
+#define IDirect3DRMDeviceArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDeviceArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMDeviceArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMDeviceArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMDeviceArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMDeviceArray methods ***/
+#define IDirect3DRMDeviceArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrameArray interface
+ */
+#define INTERFACE IDirect3DRMFrameArray
+DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMFrameArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFrame **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrameArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrameArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrameArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFrameArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMFrameArray methods ***/
+#define IDirect3DRMFrameArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrameArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMFrameArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMFrameArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFrameArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMFrameArray methods ***/
+#define IDirect3DRMFrameArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMViewportArray interface
+ */
+#define INTERFACE IDirect3DRMViewportArray
+DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMViewportArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMViewport **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMViewportArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMViewportArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMViewportArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMViewportArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMViewportArray methods ***/
+#define IDirect3DRMViewportArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMViewportArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMViewportArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMViewportArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMViewportArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMViewportArray methods ***/
+#define IDirect3DRMviewportArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMVisualArray interface
+ */
+#define INTERFACE IDirect3DRMVisualArray
+DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMVisualArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMVisual **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMVisualArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMVisualArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMVisualArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMVisualArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMVisualArray methods ***/
+#define IDirect3DRMVisualArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMVisualArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMVisualArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMVisualArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMVisualArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMVisualArray methods ***/
+#define IDirect3DRMVisualArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimationArray interface
+ */
+#define INTERFACE IDirect3DRMAnimationArray
+DECLARE_INTERFACE_(IDirect3DRMAnimationArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMAnimationArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMAnimation2 **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimationArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimationArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMAnimationArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMAnimationArray methods ***/
+#define IDirect3DRMAnimationArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimationArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMAnimationArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMAnimationArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMAnimationArray methods ***/
+#define IDirect3DRMAnimationArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMPickedArray interface
+ */
+#define INTERFACE IDirect3DRMPickedArray
+DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMPickedArray methods ***/
+    STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual,
+            IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC *pick_desc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMPickedArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMPickedArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMPickedArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPickedArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMPickedArray methods ***/
+#define IDirect3DRMPickedArray_GetPick(p,a,b,c,d)                      (p)->lpVtbl->GetPick(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMPickedArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMPickedArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMPickedArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPickedArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMPickedArray methods ***/
+#define IDirect3DRMPickedArray_GetPick(p,a,b,c,d)                      (p)->GetPick(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMLightArray interface
+ */
+#define INTERFACE IDirect3DRMLightArray
+DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMLightArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMLight **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMLightArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMLightArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMLightArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMLightArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMLightArray methods ***/
+#define IDirect3DRMLightArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMLightArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMLightArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMLightArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMLightArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMLightArray methods ***/
+#define IDirect3DRMLightArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFaceArray interface
+ */
+#define INTERFACE IDirect3DRMFaceArray
+DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMFaceArray methods ***/
+    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFace **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFaceArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFaceArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFaceArray_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFaceArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMFaceArray methods ***/
+#define IDirect3DRMFaceArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFaceArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMFaceArray_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMFaceArray_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFaceArray_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMFaceArray methods ***/
+#define IDirect3DRMFaceArray_GetElement(p,a,b)                       (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMPicked2Array interface
+ */
+#define INTERFACE IDirect3DRMPicked2Array
+DECLARE_INTERFACE_(IDirect3DRMPicked2Array, IDirect3DRMArray)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMArray methods ***/
+    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+    /*** IDirect3DRMPicked2Array methods ***/
+    STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual,
+            IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC2 *pick_desc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMPicked2Array_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMPicked2Array_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMPicked2Array_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPicked2Array_GetSize(p)                              (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMPicked2Array methods ***/
+#define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d)                      (p)->lpVtbl->GetPick(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMPicked2Array_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMPicked2Array_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMPicked2Array_Release(p)                              (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPicked2Array_GetSize(p)                              (p)->GetSize()
+/*** IDirect3DRMPicked2Array methods ***/
+#define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d)                      (p)->GetPick(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMInterpolator interface
+ */
+#define INTERFACE IDirect3DRMInterpolator
+DECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMInterpolator methods ***/
+    STDMETHOD(AttachObject)(THIS_ IDirect3DRMObject *object) PURE;
+    STDMETHOD(GetAttachedObjects)(THIS_ IDirect3DRMObjectArray **array) PURE;
+    STDMETHOD(DetachObject)(THIS_ IDirect3DRMObject *object) PURE;
+    STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE;
+    STDMETHOD_(D3DVALUE, GetIndex)(THIS) PURE;
+    STDMETHOD(Interpolate)(THIS_ D3DVALUE index, IDirect3DRMObject *object, D3DRMINTERPOLATIONOPTIONS flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMInterpolator_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMInterpolator_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMInterpolator_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMInterpolator_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMInterpolator_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMInterpolator_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMInterpolator_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMInterpolator_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMInterpolator_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMInterpolator methods ***/
+#define IDirect3DRMInterpolator_AttachObject(p,a)                       (p)->lpVtbl->AttachObject(p,a)
+#define IDirect3DRMInterpolator_GetAttachedObjects(p,a)                 (p)->lpVtbl->GetAttachedObjects(p,a)
+#define IDirect3DRMInterpolator_DetachObject(p,a)                       (p)->lpVtbl->DetachObject(p,a)
+#define IDirect3DRMInterpolator_SetIndex(p,a)                           (p)->lpVtbl->SetIndex(p,a)
+#define IDirect3DRMInterpolator_GetIndex(p)                             (p)->lpVtbl->GetIndex(p)
+#define IDirect3DRMInterpolator_Interpolate(p,a,b,c)                    (p)->lpVtbl->Interpolate(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMInterpolator_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMInterpolator_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMInterpolator_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMInterpolator_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMInterpolator_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMInterpolator_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMInterpolator_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMInterpolator_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMInterpolator_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMInterpolator methods ***/
+#define IDirect3DRMInterpolator_AttachObject(p,a)                       (p)->AttachObject(a)
+#define IDirect3DRMInterpolator_GetAttachedObjects(p,a)                 (p)->GetAttachedObjects(a)
+#define IDirect3DRMInterpolator_DetachObject(p,a)                       (p)->DetachObject(a)
+#define IDirect3DRMInterpolator_SetIndex(p,a)                           (p)->SetIndex(a)
+#define IDirect3DRMInterpolator_GetIndex(p)                             (p)->GetIndex()
+#define IDirect3DRMInterpolator_Interpolate(p,a,b,c)                    (p)->Interpolate(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMClippedVisual interface
+ */
+#define INTERFACE IDirect3DRMClippedVisual
+DECLARE_INTERFACE_(IDirect3DRMClippedVisual, IDirect3DRMVisual)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMClippedVisual methods ***/
+    STDMETHOD(Init) (THIS_ IDirect3DRMVisual *visual) PURE;
+    STDMETHOD(AddPlane) (THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *point,
+            D3DVECTOR *normal, DWORD flags, DWORD *id) PURE;
+    STDMETHOD(DeletePlane)(THIS_ DWORD, DWORD) PURE;
+    STDMETHOD(GetPlaneIDs)(THIS_ DWORD *count, DWORD *id, DWORD flags) PURE;
+    STDMETHOD(GetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point,
+            D3DVECTOR *normal, DWORD flags) PURE;
+    STDMETHOD(SetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point,
+            D3DVECTOR *normal, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMClippedVisual_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMClippedVisual_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMClippedVisual_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMClippedVisual_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMClippedVisual_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMClippedVisual_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMClippedVisual_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMClippedVisual_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMClippedVisual_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMClippedVisual methods ***/
+#define IDirect3DRMClippedVisual_Init(p,a)                               (p)->lpVtbl->Init(p,a)
+#define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e)                   (p)->lpVtbl->AddPlane(p,a,b,c,d,e)
+#define IDirect3DRMClippedVisual_DeletePlane(p,a,b)                      (p)->lpVtbl->DeletePlane(p,a,b)
+#define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c)                    (p)->lpVtbl->GetPlaneIDs(p,a,b,c)
+#define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e)                   (p)->lpVtbl->GetPlane(p,a,b,c,d,e)
+#define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e)                   (p)->lpVtbl->SetPlane(p,a,b,c,d,e)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMClippedVisual_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)
+#define IDirect3DRMClippedVisual_AddRef(p)                               (p)->AddRef()
+#define IDirect3DRMClippedVisual_Release(p)                              (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMClippedVisual_Clone(p,a,b,c)                          (p)->Clone(a,b,c)
+#define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMClippedVisual_SetAppData(p,a)                         (p)->SetAppData(a)
+#define IDirect3DRMClippedVisual_GetAppData(p)                           (p)->GetAppData()
+#define IDirect3DRMClippedVisual_SetName(p,a)                            (p)->SetName(a)
+#define IDirect3DRMClippedVisual_GetName(p,a,b)                          (p)->GetName(a,b)
+#define IDirect3DRMClippedVisual_GetClassName(p,a,b)                     (p)->GetClassName(a,b)
+/*** IDirect3DRMClippedVisual methods ***/
+#define IDirect3DRMClippedVisual_Init(p,a)                               (p)->Init(a)
+#define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e)                   (p)->AddPlane(a,b,c,d,e)
+#define IDirect3DRMClippedVisual_DeletePlane(p,a,b)                      (p)->DeletePlane(a,b)
+#define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c)                    (p)->GetPlaneIDs(a,b,c)
+#define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e)                   (p)->GetPlane(a,b,c,d,e)
+#define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e)                   (p)->SetPlane(a,b,c,d,e)
+#endif
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* __D3DRMOBJ_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h
new file mode 100644
index 0000000..a69964e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2010 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRMWIN_H__
+#define __D3DRMWIN_H__
+
+#include <d3drm.h>
+#include <ddraw.h>
+#include <d3d.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * Direct3DRMWinDevice interface GUID
+ */
+
+DEFINE_GUID(IID_IDirect3DRMWinDevice,       0xc5016cc0, 0xd273, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+
+typedef struct IDirect3DRMWinDevice       *LPDIRECT3DRMWINDEVICE, **LPLPDIRECT3DRMWINDEVICE;
+
+/*****************************************************************************
+ * IDirect3DRMWinDevice interface
+ */
+#define INTERFACE IDirect3DRMWinDevice
+DECLARE_INTERFACE_(IDirect3DRMWinDevice,IDirect3DRMObject)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DRMObject methods ***/
+    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+    STDMETHOD(SetName)(THIS_ const char *name) PURE;
+    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+    /*** IDirect3DRMWinDevice methods ***/
+    STDMETHOD(HandlePaint)(THIS_ HDC) PURE;
+    STDMETHOD(HandleActivate)(THIS_ WORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMWinDevice_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMWinDevice_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMWinDevice_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWinDevice_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMWinDevice_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMWinDevice_GetAppData(p)                (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMWinDevice_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMWinDevice_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMWinDevice_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMWinDevice methods ***/
+#define IDirect3DRMWinDevice_HandlePaint(p,a)             (p)->lpVtbl->HandlePaint(p,a)
+#define IDirect3DRMWinDevice_HandleActivate(p,a)          (p)->lpVtbl->HandleActivate(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMWinDevice_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DRMWinDevice_AddRef(p)                    (p)->AddRef()
+#define IDirect3DRMwinDevice_Release(p)                   (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWinDevice_Clone(p,a,b,c)               (p)->Clone(a,b,c)
+#define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMWinDevice_SetAppData(p,a)              (p)->SetAppData(a)
+#define IDirect3DRMWinDevice_GetAppData(p)                (p)->GetAppData()
+#define IDirect3DRMWinDevice_SetName(p,a)                 (p)->SetName(a)
+#define IDirect3DRMWinDevice_GetName(p,a,b)               (p)->GetName(a,b)
+#define IDirect3DRMWinDevice_GetClassName(p,a,b)          (p)->GetClassName(a,b)
+/*** IDirect3DRMWinDevice methods ***/
+#define IDirect3DRMWinDevice_HandlePaint(p,a)             (p)->HandlePaint(a)
+#define IDirect3DRMWinDevice_HandleActivate(p,a)          (p)->HandleActivate(a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DRMWIN_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h
new file mode 100644
index 0000000..978d0a4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h
@@ -0,0 +1,1368 @@
+/*
+ * Copyright (C) 2000 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem
+          if WINE continues to only use C code  - I suppose that we could always inline in
+          the header file to get around that little problem... */
+/* FIXME: We need to implement versioning on everything directx 5 and up if these headers
+          are going to be generically useful for directx stuff */
+
+#ifndef __WINE_D3DTYPES_H
+#define __WINE_D3DTYPES_H
+
+#include <windows.h>
+#include <float.h>
+#include <ddraw.h>
+
+#define D3DVALP(val, prec)      ((float)(val))
+#define D3DVAL(val)             ((float)(val))
+#define D3DDivide(a, b)         (float)((double) (a) / (double) (b))
+#define D3DMultiply(a, b)       ((a) * (b))
+
+typedef LONG D3DFIXED;
+
+
+#ifndef RGB_MAKE
+#define CI_GETALPHA(ci)    ((ci) >> 24)
+#define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
+#define CI_GETFRACTION(ci) ((ci) & 0xff)
+#define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
+#define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
+#define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
+
+#define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
+#define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
+#define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
+#define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
+#define RGBA_MAKE(r, g, b, a)   ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
+
+#define D3DRGB(r, g, b) \
+    (0xff000000 | ( ((LONG)((r) * 255)) << 16) | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255))
+#define D3DRGBA(r, g, b, a) \
+    (   (((LONG)((a) * 255)) << 24) | (((LONG)((r) * 255)) << 16) \
+    |   (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255) \
+    )
+
+#define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
+#define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
+#define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
+#define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
+#define RGB_MAKE(r, g, b)       ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))
+#define RGBA_TORGB(rgba)       ((D3DCOLOR) ((rgba) & 0xffffff))
+#define RGB_TORGBA(rgb)        ((D3DCOLOR) ((rgb) | 0xff000000))
+
+#endif
+
+#define D3DENUMRET_CANCEL                        DDENUMRET_CANCEL
+#define D3DENUMRET_OK                            DDENUMRET_OK
+
+typedef HRESULT (CALLBACK *LPD3DVALIDATECALLBACK)(void *ctx, DWORD offset);
+typedef HRESULT (CALLBACK *LPD3DENUMTEXTUREFORMATSCALLBACK)(DDSURFACEDESC *surface_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPD3DENUMPIXELFORMATSCALLBACK)(DDPIXELFORMAT *format, void *ctx);
+
+#ifndef DX_SHARED_DEFINES
+
+typedef float D3DVALUE,*LPD3DVALUE;
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR, *LPD3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+  union {
+        D3DVALUE        x;
+    D3DVALUE dvX;
+  } DUMMYUNIONNAME1;
+  union {
+        D3DVALUE        y;
+    D3DVALUE dvY;
+  } DUMMYUNIONNAME2;
+  union {
+        D3DVALUE        z;
+    D3DVALUE dvZ;
+  } DUMMYUNIONNAME3;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+  /* the definitions for these methods are in d3dvec.inl */
+public:
+  /*** constructors ***/
+  _D3DVECTOR() {}
+  _D3DVECTOR(D3DVALUE f);
+  _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);
+  _D3DVECTOR(const D3DVALUE f[3]);
+
+  /*** assignment operators ***/
+  _D3DVECTOR& operator += (const _D3DVECTOR& v);
+  _D3DVECTOR& operator -= (const _D3DVECTOR& v);
+  _D3DVECTOR& operator *= (const _D3DVECTOR& v);
+  _D3DVECTOR& operator /= (const _D3DVECTOR& v);
+  _D3DVECTOR& operator *= (D3DVALUE s);
+  _D3DVECTOR& operator /= (D3DVALUE s);
+
+  /*** unary operators ***/
+  friend _D3DVECTOR operator + (const _D3DVECTOR& v);
+  friend _D3DVECTOR operator - (const _D3DVECTOR& v);
+
+  /*** binary operators ***/
+  friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+  friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+
+  friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);
+  friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);
+  friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);
+
+  friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v);
+  friend D3DVALUE Magnitude(const _D3DVECTOR& v);
+
+  friend _D3DVECTOR Normalize(const _D3DVECTOR& v);
+
+  friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+  friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+#endif
+} D3DVECTOR,*LPD3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+#define DX_SHARED_DEFINES
+#endif /* DX_SHARED_DEFINES */
+
+typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;
+typedef DWORD D3DTEXTUREHANDLE,  *LPD3DTEXTUREHANDLE;
+typedef DWORD D3DMATRIXHANDLE,   *LPD3DMATRIXHANDLE;
+
+typedef struct _D3DCOLORVALUE {
+        union {
+                D3DVALUE r;
+                D3DVALUE dvR;
+        } DUMMYUNIONNAME1;
+        union {
+                D3DVALUE g;
+                D3DVALUE dvG;
+        } DUMMYUNIONNAME2;
+        union {
+                D3DVALUE b;
+                D3DVALUE dvB;
+        } DUMMYUNIONNAME3;
+        union {
+                D3DVALUE a;
+                D3DVALUE dvA;
+        } DUMMYUNIONNAME4;
+} D3DCOLORVALUE,*LPD3DCOLORVALUE;
+
+typedef struct _D3DRECT {
+  union {
+    LONG x1;
+    LONG lX1;
+  } DUMMYUNIONNAME1;
+  union {
+    LONG y1;
+    LONG lY1;
+  } DUMMYUNIONNAME2;
+  union {
+    LONG x2;
+    LONG lX2;
+  } DUMMYUNIONNAME3;
+  union {
+    LONG y2;
+    LONG lY2;
+  } DUMMYUNIONNAME4;
+} D3DRECT, *LPD3DRECT;
+
+typedef struct _D3DHVERTEX {
+    DWORD         dwFlags;
+ union {
+    D3DVALUE    hx;
+    D3DVALUE    dvHX;
+  } DUMMYUNIONNAME1;
+  union {
+    D3DVALUE    hy;
+    D3DVALUE    dvHY;
+  } DUMMYUNIONNAME2;
+  union {
+    D3DVALUE    hz;
+    D3DVALUE    dvHZ;
+  } DUMMYUNIONNAME3;
+} D3DHVERTEX, *LPD3DHVERTEX;
+
+/*
+ * Transformed/lit vertices
+ */
+typedef struct _D3DTLVERTEX {
+  union {
+    D3DVALUE    sx;
+    D3DVALUE    dvSX;
+  } DUMMYUNIONNAME1;
+  union {
+    D3DVALUE    sy;
+    D3DVALUE    dvSY;
+  } DUMMYUNIONNAME2;
+  union {
+    D3DVALUE    sz;
+    D3DVALUE    dvSZ;
+  } DUMMYUNIONNAME3;
+  union {
+    D3DVALUE    rhw;
+    D3DVALUE    dvRHW;
+  } DUMMYUNIONNAME4;
+  union {
+    D3DCOLOR    color;
+    D3DCOLOR    dcColor;
+  } DUMMYUNIONNAME5;
+  union {
+    D3DCOLOR    specular;
+    D3DCOLOR    dcSpecular;
+  } DUMMYUNIONNAME6;
+  union {
+    D3DVALUE    tu;
+    D3DVALUE    dvTU;
+  } DUMMYUNIONNAME7;
+  union {
+    D3DVALUE    tv;
+    D3DVALUE    dvTV;
+  } DUMMYUNIONNAME8;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+public:
+  _D3DTLVERTEX() {}
+  _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) {
+    sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;
+    color = _color; specular = _specular;
+    tu = _tu; tv = _tv;
+  }
+#endif
+} D3DTLVERTEX, *LPD3DTLVERTEX;
+
+typedef struct _D3DLVERTEX {
+  union {
+    D3DVALUE x;
+    D3DVALUE dvX;
+  } DUMMYUNIONNAME1;
+  union {
+    D3DVALUE y;
+    D3DVALUE dvY;
+  } DUMMYUNIONNAME2;
+  union {
+    D3DVALUE z;
+    D3DVALUE dvZ;
+  } DUMMYUNIONNAME3;
+  DWORD            dwReserved;
+  union {
+    D3DCOLOR     color;
+    D3DCOLOR     dcColor;
+  } DUMMYUNIONNAME4;
+  union {
+    D3DCOLOR     specular;
+    D3DCOLOR     dcSpecular;
+  } DUMMYUNIONNAME5;
+  union {
+    D3DVALUE     tu;
+    D3DVALUE     dvTU;
+  } DUMMYUNIONNAME6;
+  union {
+    D3DVALUE     tv;
+    D3DVALUE     dvTV;
+  } DUMMYUNIONNAME7;
+} D3DLVERTEX, *LPD3DLVERTEX;
+
+typedef struct _D3DVERTEX {
+  union {
+    D3DVALUE     x;
+    D3DVALUE     dvX;
+  } DUMMYUNIONNAME1;
+  union {
+    D3DVALUE     y;
+    D3DVALUE     dvY;
+  } DUMMYUNIONNAME2;
+  union {
+    D3DVALUE     z;
+    D3DVALUE     dvZ;
+  } DUMMYUNIONNAME3;
+  union {
+    D3DVALUE     nx;
+    D3DVALUE     dvNX;
+  } DUMMYUNIONNAME4;
+  union {
+    D3DVALUE     ny;
+    D3DVALUE     dvNY;
+  } DUMMYUNIONNAME5;
+  union {
+    D3DVALUE     nz;
+    D3DVALUE     dvNZ;
+  } DUMMYUNIONNAME6;
+  union {
+    D3DVALUE     tu;
+    D3DVALUE     dvTU;
+  } DUMMYUNIONNAME7;
+  union {
+    D3DVALUE     tv;
+    D3DVALUE     dvTV;
+  } DUMMYUNIONNAME8;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+public:
+  _D3DVERTEX() {}
+  _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) {
+    x  = v.x; y  = v.y; z  = v.z;
+    nx = n.x; ny = n.y; nz = n.z;
+    tu = _tu; tv = _tv;
+  }
+#endif
+} D3DVERTEX, *LPD3DVERTEX;
+
+typedef struct _D3DMATRIX {
+  D3DVALUE        _11, _12, _13, _14;
+  D3DVALUE        _21, _22, _23, _24;
+  D3DVALUE        _31, _32, _33, _34;
+  D3DVALUE        _41, _42, _43, _44;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+  _D3DMATRIX() { }
+
+    /* This is different from MS, but avoids anonymous structs. */
+    D3DVALUE &operator () (int r, int c)
+	{ return (&_11)[r*4 + c]; }
+    const D3DVALUE &operator() (int r, int c) const
+	{ return (&_11)[r*4 + c]; }
+#endif
+} D3DMATRIX, *LPD3DMATRIX;
+
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+#include <d3dvec.inl>
+#endif
+
+typedef struct _D3DVIEWPORT {
+  DWORD       dwSize;
+  DWORD       dwX;
+  DWORD       dwY;
+  DWORD       dwWidth;
+  DWORD       dwHeight;
+  D3DVALUE    dvScaleX;
+  D3DVALUE    dvScaleY;
+  D3DVALUE    dvMaxX;
+  D3DVALUE    dvMaxY;
+  D3DVALUE    dvMinZ;
+  D3DVALUE    dvMaxZ;
+} D3DVIEWPORT, *LPD3DVIEWPORT;
+
+typedef struct _D3DVIEWPORT2 {
+  DWORD       dwSize;
+  DWORD       dwX;
+  DWORD       dwY;
+  DWORD       dwWidth;
+  DWORD       dwHeight;
+  D3DVALUE    dvClipX;
+  D3DVALUE    dvClipY;
+  D3DVALUE    dvClipWidth;
+  D3DVALUE    dvClipHeight;
+  D3DVALUE    dvMinZ;
+  D3DVALUE    dvMaxZ;
+} D3DVIEWPORT2, *LPD3DVIEWPORT2;
+
+typedef struct _D3DVIEWPORT7 {
+  DWORD       dwX;
+  DWORD       dwY;
+  DWORD       dwWidth;
+  DWORD       dwHeight;
+  D3DVALUE    dvMinZ;
+  D3DVALUE    dvMaxZ;
+} D3DVIEWPORT7, *LPD3DVIEWPORT7;
+
+#define D3DMAXUSERCLIPPLANES 32
+
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+#define D3DCLIP_LEFT     0x00000001
+#define D3DCLIP_RIGHT    0x00000002
+#define D3DCLIP_TOP      0x00000004
+#define D3DCLIP_BOTTOM   0x00000008
+#define D3DCLIP_FRONT    0x00000010
+#define D3DCLIP_BACK     0x00000020
+#define D3DCLIP_GEN0     0x00000040
+#define D3DCLIP_GEN1     0x00000080
+#define D3DCLIP_GEN2     0x00000100
+#define D3DCLIP_GEN3     0x00000200
+#define D3DCLIP_GEN4     0x00000400
+#define D3DCLIP_GEN5     0x00000800
+
+#define D3DSTATUS_CLIPUNIONLEFT                 D3DCLIP_LEFT
+#define D3DSTATUS_CLIPUNIONRIGHT                D3DCLIP_RIGHT
+#define D3DSTATUS_CLIPUNIONTOP                  D3DCLIP_TOP
+#define D3DSTATUS_CLIPUNIONBOTTOM               D3DCLIP_BOTTOM
+#define D3DSTATUS_CLIPUNIONFRONT                D3DCLIP_FRONT
+#define D3DSTATUS_CLIPUNIONBACK                 D3DCLIP_BACK
+#define D3DSTATUS_CLIPUNIONGEN0                 D3DCLIP_GEN0
+#define D3DSTATUS_CLIPUNIONGEN1                 D3DCLIP_GEN1
+#define D3DSTATUS_CLIPUNIONGEN2                 D3DCLIP_GEN2
+#define D3DSTATUS_CLIPUNIONGEN3                 D3DCLIP_GEN3
+#define D3DSTATUS_CLIPUNIONGEN4                 D3DCLIP_GEN4
+#define D3DSTATUS_CLIPUNIONGEN5                 D3DCLIP_GEN5
+
+#define D3DSTATUS_CLIPINTERSECTIONLEFT          0x00001000
+#define D3DSTATUS_CLIPINTERSECTIONRIGHT         0x00002000
+#define D3DSTATUS_CLIPINTERSECTIONTOP           0x00004000
+#define D3DSTATUS_CLIPINTERSECTIONBOTTOM        0x00008000
+#define D3DSTATUS_CLIPINTERSECTIONFRONT         0x00010000
+#define D3DSTATUS_CLIPINTERSECTIONBACK          0x00020000
+#define D3DSTATUS_CLIPINTERSECTIONGEN0          0x00040000
+#define D3DSTATUS_CLIPINTERSECTIONGEN1          0x00080000
+#define D3DSTATUS_CLIPINTERSECTIONGEN2          0x00100000
+#define D3DSTATUS_CLIPINTERSECTIONGEN3          0x00200000
+#define D3DSTATUS_CLIPINTERSECTIONGEN4          0x00400000
+#define D3DSTATUS_CLIPINTERSECTIONGEN5          0x00800000
+#define D3DSTATUS_ZNOTVISIBLE                   0x01000000
+
+#define D3DSTATUS_CLIPUNIONALL  (               \
+            D3DSTATUS_CLIPUNIONLEFT     |       \
+            D3DSTATUS_CLIPUNIONRIGHT    |       \
+            D3DSTATUS_CLIPUNIONTOP      |       \
+            D3DSTATUS_CLIPUNIONBOTTOM   |       \
+            D3DSTATUS_CLIPUNIONFRONT    |       \
+            D3DSTATUS_CLIPUNIONBACK     |       \
+            D3DSTATUS_CLIPUNIONGEN0     |       \
+            D3DSTATUS_CLIPUNIONGEN1     |       \
+            D3DSTATUS_CLIPUNIONGEN2     |       \
+            D3DSTATUS_CLIPUNIONGEN3     |       \
+            D3DSTATUS_CLIPUNIONGEN4     |       \
+            D3DSTATUS_CLIPUNIONGEN5             \
+            )
+
+#define D3DSTATUS_CLIPINTERSECTIONALL   (               \
+            D3DSTATUS_CLIPINTERSECTIONLEFT      |       \
+            D3DSTATUS_CLIPINTERSECTIONRIGHT     |       \
+            D3DSTATUS_CLIPINTERSECTIONTOP       |       \
+            D3DSTATUS_CLIPINTERSECTIONBOTTOM    |       \
+            D3DSTATUS_CLIPINTERSECTIONFRONT     |       \
+            D3DSTATUS_CLIPINTERSECTIONBACK      |       \
+            D3DSTATUS_CLIPINTERSECTIONGEN0      |       \
+            D3DSTATUS_CLIPINTERSECTIONGEN1      |       \
+            D3DSTATUS_CLIPINTERSECTIONGEN2      |       \
+            D3DSTATUS_CLIPINTERSECTIONGEN3      |       \
+            D3DSTATUS_CLIPINTERSECTIONGEN4      |       \
+            D3DSTATUS_CLIPINTERSECTIONGEN5              \
+            )
+
+#define D3DSTATUS_DEFAULT       (                       \
+            D3DSTATUS_CLIPINTERSECTIONALL       |       \
+            D3DSTATUS_ZNOTVISIBLE)
+
+#define D3DTRANSFORM_CLIPPED       0x00000001
+#define D3DTRANSFORM_UNCLIPPED     0x00000002
+
+typedef struct _D3DTRANSFORMDATA {
+  DWORD           dwSize;
+  void            *lpIn;
+  DWORD           dwInSize;
+  void            *lpOut;
+  DWORD           dwOutSize;
+  D3DHVERTEX      *lpHOut;
+  DWORD           dwClip;
+  DWORD           dwClipIntersection;
+  DWORD           dwClipUnion;
+  D3DRECT         drExtent;
+} D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;
+
+typedef struct _D3DLIGHTINGELEMENT {
+  D3DVECTOR dvPosition;
+  D3DVECTOR dvNormal;
+} D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;
+
+typedef struct _D3DMATERIAL {
+  DWORD               dwSize;
+  union {
+    D3DCOLORVALUE   diffuse;
+    D3DCOLORVALUE   dcvDiffuse;
+  } DUMMYUNIONNAME;
+  union {
+    D3DCOLORVALUE   ambient;
+    D3DCOLORVALUE   dcvAmbient;
+  } DUMMYUNIONNAME1;
+  union {
+    D3DCOLORVALUE   specular;
+    D3DCOLORVALUE   dcvSpecular;
+  } DUMMYUNIONNAME2;
+  union {
+    D3DCOLORVALUE   emissive;
+    D3DCOLORVALUE   dcvEmissive;
+  } DUMMYUNIONNAME3;
+  union {
+    D3DVALUE        power;
+    D3DVALUE        dvPower;
+  } DUMMYUNIONNAME4;
+  D3DTEXTUREHANDLE    hTexture;
+  DWORD               dwRampSize;
+} D3DMATERIAL, *LPD3DMATERIAL;
+
+typedef struct _D3DMATERIAL7 {
+  union {
+    D3DCOLORVALUE   diffuse;
+    D3DCOLORVALUE   dcvDiffuse;
+  } DUMMYUNIONNAME;
+  union {
+    D3DCOLORVALUE   ambient;
+    D3DCOLORVALUE   dcvAmbient;
+  } DUMMYUNIONNAME1;
+  union {
+    D3DCOLORVALUE   specular;
+    D3DCOLORVALUE   dcvSpecular;
+  } DUMMYUNIONNAME2;
+  union {
+    D3DCOLORVALUE   emissive;
+    D3DCOLORVALUE   dcvEmissive;
+  } DUMMYUNIONNAME3;
+  union {
+    D3DVALUE        power;
+    D3DVALUE        dvPower;
+  } DUMMYUNIONNAME4;
+} D3DMATERIAL7, *LPD3DMATERIAL7;
+
+typedef enum {
+  D3DLIGHT_POINT          = 1,
+  D3DLIGHT_SPOT           = 2,
+  D3DLIGHT_DIRECTIONAL    = 3,
+  D3DLIGHT_PARALLELPOINT  = 4,
+  D3DLIGHT_GLSPOT         = 5,
+  D3DLIGHT_FORCE_DWORD    = 0x7fffffff
+} D3DLIGHTTYPE;
+
+typedef struct _D3DLIGHT {
+    DWORD           dwSize;
+    D3DLIGHTTYPE    dltType;
+    D3DCOLORVALUE   dcvColor;
+    D3DVECTOR       dvPosition;
+    D3DVECTOR       dvDirection;
+    D3DVALUE        dvRange;
+    D3DVALUE        dvFalloff;
+    D3DVALUE        dvAttenuation0;
+    D3DVALUE        dvAttenuation1;
+    D3DVALUE        dvAttenuation2;
+    D3DVALUE        dvTheta;
+    D3DVALUE        dvPhi;
+} D3DLIGHT,*LPD3DLIGHT;
+
+typedef struct _D3DLIGHT7 {
+    D3DLIGHTTYPE    dltType;
+    D3DCOLORVALUE   dcvDiffuse;
+    D3DCOLORVALUE   dcvSpecular;
+    D3DCOLORVALUE   dcvAmbient;
+    D3DVECTOR       dvPosition;
+    D3DVECTOR       dvDirection;
+    D3DVALUE        dvRange;
+    D3DVALUE        dvFalloff;
+    D3DVALUE        dvAttenuation0;
+    D3DVALUE        dvAttenuation1;
+    D3DVALUE        dvAttenuation2;
+    D3DVALUE        dvTheta;
+    D3DVALUE        dvPhi;
+} D3DLIGHT7, *LPD3DLIGHT7;
+
+#define D3DLIGHT_ACTIVE         0x00000001
+#define D3DLIGHT_NO_SPECULAR    0x00000002
+#define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */
+
+#define D3DLIGHT_RANGE_MAX              ((float)sqrt(FLT_MAX))
+
+typedef struct _D3DLIGHT2 {
+  DWORD           dwSize;
+  D3DLIGHTTYPE    dltType;
+  D3DCOLORVALUE   dcvColor;
+  D3DVECTOR       dvPosition;
+  D3DVECTOR       dvDirection;
+  D3DVALUE        dvRange;
+  D3DVALUE        dvFalloff;
+  D3DVALUE        dvAttenuation0;
+  D3DVALUE        dvAttenuation1;
+  D3DVALUE        dvAttenuation2;
+  D3DVALUE        dvTheta;
+  D3DVALUE        dvPhi;
+  DWORD           dwFlags;
+} D3DLIGHT2, *LPD3DLIGHT2;
+
+typedef struct _D3DLIGHTDATA {
+  DWORD                dwSize;
+  D3DLIGHTINGELEMENT   *lpIn;
+  DWORD                dwInSize;
+  D3DTLVERTEX          *lpOut;
+  DWORD                dwOutSize;
+} D3DLIGHTDATA, *LPD3DLIGHTDATA;
+
+#define D3DCOLOR_MONO   1
+#define D3DCOLOR_RGB    2
+
+typedef DWORD D3DCOLORMODEL;
+
+
+#define D3DCLEAR_TARGET   0x00000001
+#define D3DCLEAR_ZBUFFER  0x00000002
+#define D3DCLEAR_STENCIL  0x00000004
+
+typedef enum _D3DOPCODE {
+  D3DOP_POINT           = 1,
+  D3DOP_LINE            = 2,
+  D3DOP_TRIANGLE        = 3,
+  D3DOP_MATRIXLOAD      = 4,
+  D3DOP_MATRIXMULTIPLY  = 5,
+  D3DOP_STATETRANSFORM  = 6,
+  D3DOP_STATELIGHT      = 7,
+  D3DOP_STATERENDER     = 8,
+  D3DOP_PROCESSVERTICES = 9,
+  D3DOP_TEXTURELOAD     = 10,
+  D3DOP_EXIT            = 11,
+  D3DOP_BRANCHFORWARD   = 12,
+  D3DOP_SPAN            = 13,
+  D3DOP_SETSTATUS       = 14,
+
+  D3DOP_FORCE_DWORD     = 0x7fffffff
+} D3DOPCODE;
+
+typedef struct _D3DINSTRUCTION {
+  BYTE bOpcode;
+  BYTE bSize;
+  WORD wCount;
+} D3DINSTRUCTION, *LPD3DINSTRUCTION;
+
+typedef struct _D3DTEXTURELOAD {
+  D3DTEXTUREHANDLE hDestTexture;
+  D3DTEXTUREHANDLE hSrcTexture;
+} D3DTEXTURELOAD, *LPD3DTEXTURELOAD;
+
+typedef struct _D3DPICKRECORD {
+  BYTE     bOpcode;
+  BYTE     bPad;
+  DWORD    dwOffset;
+  D3DVALUE dvZ;
+} D3DPICKRECORD, *LPD3DPICKRECORD;
+
+typedef enum {
+  D3DSHADE_FLAT         = 1,
+  D3DSHADE_GOURAUD      = 2,
+  D3DSHADE_PHONG        = 3,
+  D3DSHADE_FORCE_DWORD  = 0x7fffffff
+} D3DSHADEMODE;
+
+typedef enum {
+  D3DFILL_POINT         = 1,
+  D3DFILL_WIREFRAME     = 2,
+  D3DFILL_SOLID         = 3,
+  D3DFILL_FORCE_DWORD   = 0x7fffffff
+} D3DFILLMODE;
+
+typedef struct _D3DLINEPATTERN {
+  WORD    wRepeatFactor;
+  WORD    wLinePattern;
+} D3DLINEPATTERN;
+
+typedef enum {
+  D3DFILTER_NEAREST          = 1,
+  D3DFILTER_LINEAR           = 2,
+  D3DFILTER_MIPNEAREST       = 3,
+  D3DFILTER_MIPLINEAR        = 4,
+  D3DFILTER_LINEARMIPNEAREST = 5,
+  D3DFILTER_LINEARMIPLINEAR  = 6,
+  D3DFILTER_FORCE_DWORD      = 0x7fffffff
+} D3DTEXTUREFILTER;
+
+typedef enum {
+  D3DBLEND_ZERO            = 1,
+  D3DBLEND_ONE             = 2,
+  D3DBLEND_SRCCOLOR        = 3,
+  D3DBLEND_INVSRCCOLOR     = 4,
+  D3DBLEND_SRCALPHA        = 5,
+  D3DBLEND_INVSRCALPHA     = 6,
+  D3DBLEND_DESTALPHA       = 7,
+  D3DBLEND_INVDESTALPHA    = 8,
+  D3DBLEND_DESTCOLOR       = 9,
+  D3DBLEND_INVDESTCOLOR    = 10,
+  D3DBLEND_SRCALPHASAT     = 11,
+  D3DBLEND_BOTHSRCALPHA    = 12,
+  D3DBLEND_BOTHINVSRCALPHA = 13,
+  D3DBLEND_FORCE_DWORD     = 0x7fffffff
+} D3DBLEND;
+
+typedef enum {
+  D3DTBLEND_DECAL         = 1,
+  D3DTBLEND_MODULATE      = 2,
+  D3DTBLEND_DECALALPHA    = 3,
+  D3DTBLEND_MODULATEALPHA = 4,
+  D3DTBLEND_DECALMASK     = 5,
+  D3DTBLEND_MODULATEMASK  = 6,
+  D3DTBLEND_COPY          = 7,
+  D3DTBLEND_ADD           = 8,
+  D3DTBLEND_FORCE_DWORD   = 0x7fffffff
+} D3DTEXTUREBLEND;
+
+typedef enum _D3DTEXTUREADDRESS {
+    D3DTADDRESS_WRAP           = 1,
+    D3DTADDRESS_MIRROR         = 2,
+    D3DTADDRESS_CLAMP          = 3,
+    D3DTADDRESS_BORDER         = 4,
+    D3DTADDRESS_FORCE_DWORD    = 0x7fffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum {
+  D3DCULL_NONE        = 1,
+  D3DCULL_CW          = 2,
+  D3DCULL_CCW         = 3,
+  D3DCULL_FORCE_DWORD = 0x7fffffff
+} D3DCULL;
+
+typedef enum {
+  D3DCMP_NEVER        = 1,
+  D3DCMP_LESS         = 2,
+  D3DCMP_EQUAL        = 3,
+  D3DCMP_LESSEQUAL    = 4,
+  D3DCMP_GREATER      = 5,
+  D3DCMP_NOTEQUAL     = 6,
+  D3DCMP_GREATEREQUAL = 7,
+  D3DCMP_ALWAYS       = 8,
+  D3DCMP_FORCE_DWORD  = 0x7fffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DSTENCILOP {
+  D3DSTENCILOP_KEEP        = 1,
+  D3DSTENCILOP_ZERO        = 2,
+  D3DSTENCILOP_REPLACE     = 3,
+  D3DSTENCILOP_INCRSAT     = 4,
+  D3DSTENCILOP_DECRSAT     = 5,
+  D3DSTENCILOP_INVERT      = 6,
+  D3DSTENCILOP_INCR        = 7,
+  D3DSTENCILOP_DECR        = 8,
+  D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DFOGMODE {
+  D3DFOG_NONE         = 0,
+  D3DFOG_EXP          = 1,
+  D3DFOG_EXP2         = 2,
+  D3DFOG_LINEAR       = 3,
+  D3DFOG_FORCE_DWORD  = 0x7fffffff
+} D3DFOGMODE;
+
+typedef enum _D3DZBUFFERTYPE {
+  D3DZB_FALSE        = 0,
+  D3DZB_TRUE         = 1,
+  D3DZB_USEW         = 2,
+  D3DZB_FORCE_DWORD  = 0x7fffffff
+} D3DZBUFFERTYPE;
+
+typedef enum _D3DANTIALIASMODE {
+  D3DANTIALIAS_NONE            = 0,
+  D3DANTIALIAS_SORTDEPENDENT   = 1,
+  D3DANTIALIAS_SORTINDEPENDENT = 2,
+  D3DANTIALIAS_FORCE_DWORD     = 0x7fffffff
+} D3DANTIALIASMODE;
+
+typedef enum {
+  D3DVT_VERTEX        = 1,
+  D3DVT_LVERTEX       = 2,
+  D3DVT_TLVERTEX      = 3,
+  D3DVT_FORCE_DWORD   = 0x7fffffff
+} D3DVERTEXTYPE;
+
+typedef enum {
+  D3DPT_POINTLIST     = 1,
+  D3DPT_LINELIST      = 2,
+  D3DPT_LINESTRIP     = 3,
+  D3DPT_TRIANGLELIST  = 4,
+  D3DPT_TRIANGLESTRIP = 5,
+  D3DPT_TRIANGLEFAN   = 6,
+  D3DPT_FORCE_DWORD   = 0x7fffffff
+} D3DPRIMITIVETYPE;
+
+#define D3DSTATE_OVERRIDE_BIAS      256
+
+#define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+    D3DTRANSFORMSTATE_WORLD         = 1,
+    D3DTRANSFORMSTATE_VIEW          = 2,
+    D3DTRANSFORMSTATE_PROJECTION    = 3,
+    D3DTRANSFORMSTATE_WORLD1        = 4,
+    D3DTRANSFORMSTATE_WORLD2        = 5,
+    D3DTRANSFORMSTATE_WORLD3        = 6,
+    D3DTRANSFORMSTATE_TEXTURE0      = 16,
+    D3DTRANSFORMSTATE_TEXTURE1      = 17,
+    D3DTRANSFORMSTATE_TEXTURE2      = 18,
+    D3DTRANSFORMSTATE_TEXTURE3      = 19,
+    D3DTRANSFORMSTATE_TEXTURE4      = 20,
+    D3DTRANSFORMSTATE_TEXTURE5      = 21,
+    D3DTRANSFORMSTATE_TEXTURE6      = 22,
+    D3DTRANSFORMSTATE_TEXTURE7      = 23,
+    D3DTRANSFORMSTATE_FORCE_DWORD   = 0x7fffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum {
+  D3DLIGHTSTATE_MATERIAL      = 1,
+  D3DLIGHTSTATE_AMBIENT       = 2,
+  D3DLIGHTSTATE_COLORMODEL    = 3,
+  D3DLIGHTSTATE_FOGMODE       = 4,
+  D3DLIGHTSTATE_FOGSTART      = 5,
+  D3DLIGHTSTATE_FOGEND        = 6,
+  D3DLIGHTSTATE_FOGDENSITY    = 7,
+  D3DLIGHTSTATE_COLORVERTEX   = 8,
+  D3DLIGHTSTATE_FORCE_DWORD   = 0x7fffffff
+} D3DLIGHTSTATETYPE;
+
+typedef enum {
+  D3DRENDERSTATE_TEXTUREHANDLE      = 1,
+  D3DRENDERSTATE_ANTIALIAS          = 2,
+  D3DRENDERSTATE_TEXTUREADDRESS     = 3,
+  D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,
+  D3DRENDERSTATE_WRAPU              = 5,
+  D3DRENDERSTATE_WRAPV              = 6,
+  D3DRENDERSTATE_ZENABLE            = 7,
+  D3DRENDERSTATE_FILLMODE           = 8,
+  D3DRENDERSTATE_SHADEMODE          = 9,
+  D3DRENDERSTATE_LINEPATTERN        = 10,
+  D3DRENDERSTATE_MONOENABLE         = 11,
+  D3DRENDERSTATE_ROP2               = 12,
+  D3DRENDERSTATE_PLANEMASK          = 13,
+  D3DRENDERSTATE_ZWRITEENABLE       = 14,
+  D3DRENDERSTATE_ALPHATESTENABLE    = 15,
+  D3DRENDERSTATE_LASTPIXEL          = 16,
+  D3DRENDERSTATE_TEXTUREMAG         = 17,
+  D3DRENDERSTATE_TEXTUREMIN         = 18,
+  D3DRENDERSTATE_SRCBLEND           = 19,
+  D3DRENDERSTATE_DESTBLEND          = 20,
+  D3DRENDERSTATE_TEXTUREMAPBLEND    = 21,
+  D3DRENDERSTATE_CULLMODE           = 22,
+  D3DRENDERSTATE_ZFUNC              = 23,
+  D3DRENDERSTATE_ALPHAREF           = 24,
+  D3DRENDERSTATE_ALPHAFUNC          = 25,
+  D3DRENDERSTATE_DITHERENABLE       = 26,
+  D3DRENDERSTATE_ALPHABLENDENABLE   = 27,
+  D3DRENDERSTATE_FOGENABLE          = 28,
+  D3DRENDERSTATE_SPECULARENABLE     = 29,
+  D3DRENDERSTATE_ZVISIBLE           = 30,
+  D3DRENDERSTATE_SUBPIXEL           = 31,
+  D3DRENDERSTATE_SUBPIXELX          = 32,
+  D3DRENDERSTATE_STIPPLEDALPHA      = 33,
+  D3DRENDERSTATE_FOGCOLOR           = 34,
+  D3DRENDERSTATE_FOGTABLEMODE       = 35,
+  D3DRENDERSTATE_FOGTABLESTART      = 36,
+  D3DRENDERSTATE_FOGTABLEEND        = 37,
+  D3DRENDERSTATE_FOGTABLEDENSITY    = 38,
+  D3DRENDERSTATE_FOGSTART           = 36,
+  D3DRENDERSTATE_FOGEND             = 37,
+  D3DRENDERSTATE_FOGDENSITY         = 38,
+  D3DRENDERSTATE_STIPPLEENABLE      = 39,
+  D3DRENDERSTATE_EDGEANTIALIAS      = 40,
+  D3DRENDERSTATE_COLORKEYENABLE     = 41,
+  D3DRENDERSTATE_BORDERCOLOR        = 43,
+  D3DRENDERSTATE_TEXTUREADDRESSU    = 44,
+  D3DRENDERSTATE_TEXTUREADDRESSV    = 45,
+  D3DRENDERSTATE_MIPMAPLODBIAS      = 46,
+  D3DRENDERSTATE_ZBIAS              = 47,
+  D3DRENDERSTATE_RANGEFOGENABLE     = 48,
+  D3DRENDERSTATE_ANISOTROPY         = 49,
+  D3DRENDERSTATE_FLUSHBATCH         = 50,
+  D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51,
+
+  D3DRENDERSTATE_STENCILENABLE      = 52,
+  D3DRENDERSTATE_STENCILFAIL        = 53,
+  D3DRENDERSTATE_STENCILZFAIL       = 54,
+  D3DRENDERSTATE_STENCILPASS        = 55,
+  D3DRENDERSTATE_STENCILFUNC        = 56,
+  D3DRENDERSTATE_STENCILREF         = 57,
+  D3DRENDERSTATE_STENCILMASK        = 58,
+  D3DRENDERSTATE_STENCILWRITEMASK   = 59,
+  D3DRENDERSTATE_TEXTUREFACTOR      = 60,
+
+  D3DRENDERSTATE_STIPPLEPATTERN00   = 64,
+  D3DRENDERSTATE_STIPPLEPATTERN01   = 65,
+  D3DRENDERSTATE_STIPPLEPATTERN02   = 66,
+  D3DRENDERSTATE_STIPPLEPATTERN03   = 67,
+  D3DRENDERSTATE_STIPPLEPATTERN04   = 68,
+  D3DRENDERSTATE_STIPPLEPATTERN05   = 69,
+  D3DRENDERSTATE_STIPPLEPATTERN06   = 70,
+  D3DRENDERSTATE_STIPPLEPATTERN07   = 71,
+  D3DRENDERSTATE_STIPPLEPATTERN08   = 72,
+  D3DRENDERSTATE_STIPPLEPATTERN09   = 73,
+  D3DRENDERSTATE_STIPPLEPATTERN10   = 74,
+  D3DRENDERSTATE_STIPPLEPATTERN11   = 75,
+  D3DRENDERSTATE_STIPPLEPATTERN12   = 76,
+  D3DRENDERSTATE_STIPPLEPATTERN13   = 77,
+  D3DRENDERSTATE_STIPPLEPATTERN14   = 78,
+  D3DRENDERSTATE_STIPPLEPATTERN15   = 79,
+  D3DRENDERSTATE_STIPPLEPATTERN16   = 80,
+  D3DRENDERSTATE_STIPPLEPATTERN17   = 81,
+  D3DRENDERSTATE_STIPPLEPATTERN18   = 82,
+  D3DRENDERSTATE_STIPPLEPATTERN19   = 83,
+  D3DRENDERSTATE_STIPPLEPATTERN20   = 84,
+  D3DRENDERSTATE_STIPPLEPATTERN21   = 85,
+  D3DRENDERSTATE_STIPPLEPATTERN22   = 86,
+  D3DRENDERSTATE_STIPPLEPATTERN23   = 87,
+  D3DRENDERSTATE_STIPPLEPATTERN24   = 88,
+  D3DRENDERSTATE_STIPPLEPATTERN25   = 89,
+  D3DRENDERSTATE_STIPPLEPATTERN26   = 90,
+  D3DRENDERSTATE_STIPPLEPATTERN27   = 91,
+  D3DRENDERSTATE_STIPPLEPATTERN28   = 92,
+  D3DRENDERSTATE_STIPPLEPATTERN29   = 93,
+  D3DRENDERSTATE_STIPPLEPATTERN30   = 94,
+  D3DRENDERSTATE_STIPPLEPATTERN31   = 95,
+
+  D3DRENDERSTATE_WRAP0              = 128,
+  D3DRENDERSTATE_WRAP1              = 129,
+  D3DRENDERSTATE_WRAP2              = 130,
+  D3DRENDERSTATE_WRAP3              = 131,
+  D3DRENDERSTATE_WRAP4              = 132,
+  D3DRENDERSTATE_WRAP5              = 133,
+  D3DRENDERSTATE_WRAP6              = 134,
+  D3DRENDERSTATE_WRAP7              = 135,
+  D3DRENDERSTATE_CLIPPING            = 136,
+  D3DRENDERSTATE_LIGHTING            = 137,
+  D3DRENDERSTATE_EXTENTS             = 138,
+  D3DRENDERSTATE_AMBIENT             = 139,
+  D3DRENDERSTATE_FOGVERTEXMODE       = 140,
+  D3DRENDERSTATE_COLORVERTEX         = 141,
+  D3DRENDERSTATE_LOCALVIEWER         = 142,
+  D3DRENDERSTATE_NORMALIZENORMALS    = 143,
+  D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,
+  D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145,
+  D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146,
+  D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147,
+  D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148,
+  D3DRENDERSTATE_VERTEXBLEND              = 151,
+  D3DRENDERSTATE_CLIPPLANEENABLE          = 152,
+
+  D3DRENDERSTATE_FORCE_DWORD        = 0x7fffffff
+
+  /* FIXME: We have some retired values that are being reused for DirectX 7 */
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE
+{
+    D3DMCS_MATERIAL = 0,
+    D3DMCS_COLOR1   = 1,
+    D3DMCS_COLOR2   = 2,
+    D3DMCS_FORCE_DWORD = 0x7fffffff
+} D3DMATERIALCOLORSOURCE;
+
+#define D3DRENDERSTATE_BLENDENABLE      D3DRENDERSTATE_ALPHABLENDENABLE
+#define D3DRENDERSTATE_WRAPBIAS         __MSABI_LONG(128U)
+#define D3DWRAP_U   __MSABI_LONG(0x00000001)
+#define D3DWRAP_V   __MSABI_LONG(0x00000002)
+
+#define D3DWRAPCOORD_0   __MSABI_LONG(0x00000001)
+#define D3DWRAPCOORD_1   __MSABI_LONG(0x00000002)
+#define D3DWRAPCOORD_2   __MSABI_LONG(0x00000004)
+#define D3DWRAPCOORD_3   __MSABI_LONG(0x00000008)
+
+#define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
+
+typedef struct _D3DSTATE {
+  union {
+    D3DTRANSFORMSTATETYPE dtstTransformStateType;
+    D3DLIGHTSTATETYPE     dlstLightStateType;
+    D3DRENDERSTATETYPE    drstRenderStateType;
+  } DUMMYUNIONNAME1;
+  union {
+    DWORD                 dwArg[1];
+    D3DVALUE              dvArg[1];
+  } DUMMYUNIONNAME2;
+} D3DSTATE, *LPD3DSTATE;
+
+typedef struct _D3DMATRIXLOAD {
+  D3DMATRIXHANDLE hDestMatrix;
+  D3DMATRIXHANDLE hSrcMatrix;
+} D3DMATRIXLOAD, *LPD3DMATRIXLOAD;
+
+typedef struct _D3DMATRIXMULTIPLY {
+  D3DMATRIXHANDLE hDestMatrix;
+  D3DMATRIXHANDLE hSrcMatrix1;
+  D3DMATRIXHANDLE hSrcMatrix2;
+} D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;
+
+typedef struct _D3DPROCESSVERTICES {
+  DWORD dwFlags;
+  WORD  wStart;
+  WORD  wDest;
+  DWORD dwCount;
+  DWORD dwReserved;
+} D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;
+
+#define D3DPROCESSVERTICES_TRANSFORMLIGHT       __MSABI_LONG(0x00000000)
+#define D3DPROCESSVERTICES_TRANSFORM            __MSABI_LONG(0x00000001)
+#define D3DPROCESSVERTICES_COPY                 __MSABI_LONG(0x00000002)
+#define D3DPROCESSVERTICES_OPMASK               __MSABI_LONG(0x00000007)
+
+#define D3DPROCESSVERTICES_UPDATEEXTENTS        __MSABI_LONG(0x00000008)
+#define D3DPROCESSVERTICES_NOCOLOR              __MSABI_LONG(0x00000010)
+
+typedef enum _D3DTEXTURESTAGESTATETYPE
+{
+    D3DTSS_COLOROP        =  1,
+    D3DTSS_COLORARG1      =  2,
+    D3DTSS_COLORARG2      =  3,
+    D3DTSS_ALPHAOP        =  4,
+    D3DTSS_ALPHAARG1      =  5,
+    D3DTSS_ALPHAARG2      =  6,
+    D3DTSS_BUMPENVMAT00   =  7,
+    D3DTSS_BUMPENVMAT01   =  8,
+    D3DTSS_BUMPENVMAT10   =  9,
+    D3DTSS_BUMPENVMAT11   = 10,
+    D3DTSS_TEXCOORDINDEX  = 11,
+    D3DTSS_ADDRESS        = 12,
+    D3DTSS_ADDRESSU       = 13,
+    D3DTSS_ADDRESSV       = 14,
+    D3DTSS_BORDERCOLOR    = 15,
+    D3DTSS_MAGFILTER      = 16,
+    D3DTSS_MINFILTER      = 17,
+    D3DTSS_MIPFILTER      = 18,
+    D3DTSS_MIPMAPLODBIAS  = 19,
+    D3DTSS_MAXMIPLEVEL    = 20,
+    D3DTSS_MAXANISOTROPY  = 21,
+    D3DTSS_BUMPENVLSCALE  = 22,
+    D3DTSS_BUMPENVLOFFSET = 23,
+    D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+    D3DTSS_FORCE_DWORD   = 0x7fffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+#define D3DTSS_TCI_PASSTHRU                             0x00000000
+#define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000
+#define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000
+
+typedef enum _D3DTEXTUREOP
+{
+    D3DTOP_DISABLE    = 1,
+    D3DTOP_SELECTARG1 = 2,
+    D3DTOP_SELECTARG2 = 3,
+
+    D3DTOP_MODULATE   = 4,
+    D3DTOP_MODULATE2X = 5,
+    D3DTOP_MODULATE4X = 6,
+
+    D3DTOP_ADD          =  7,
+    D3DTOP_ADDSIGNED    =  8,
+    D3DTOP_ADDSIGNED2X  =  9,
+    D3DTOP_SUBTRACT     = 10,
+    D3DTOP_ADDSMOOTH    = 11,
+
+    D3DTOP_BLENDDIFFUSEALPHA    = 12,
+    D3DTOP_BLENDTEXTUREALPHA    = 13,
+    D3DTOP_BLENDFACTORALPHA     = 14,
+    D3DTOP_BLENDTEXTUREALPHAPM  = 15,
+    D3DTOP_BLENDCURRENTALPHA    = 16,
+
+    D3DTOP_PREMODULATE            = 17,
+    D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+    D3DTOP_MODULATECOLOR_ADDALPHA = 19,
+    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+
+    D3DTOP_BUMPENVMAP           = 22,
+    D3DTOP_BUMPENVMAPLUMINANCE  = 23,
+    D3DTOP_DOTPRODUCT3          = 24,
+
+    D3DTOP_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREOP;
+
+#define D3DTA_SELECTMASK        0x0000000f
+#define D3DTA_DIFFUSE           0x00000000
+#define D3DTA_CURRENT           0x00000001
+#define D3DTA_TEXTURE           0x00000002
+#define D3DTA_TFACTOR           0x00000003
+#define D3DTA_SPECULAR          0x00000004
+#define D3DTA_COMPLEMENT        0x00000010
+#define D3DTA_ALPHAREPLICATE    0x00000020
+
+typedef enum _D3DTEXTUREMAGFILTER
+{
+    D3DTFG_POINT        = 1,
+    D3DTFG_LINEAR       = 2,
+    D3DTFG_FLATCUBIC    = 3,
+    D3DTFG_GAUSSIANCUBIC = 4,
+    D3DTFG_ANISOTROPIC  = 5,
+    D3DTFG_FORCE_DWORD  = 0x7fffffff
+} D3DTEXTUREMAGFILTER;
+
+typedef enum _D3DTEXTUREMINFILTER
+{
+    D3DTFN_POINT        = 1,
+    D3DTFN_LINEAR       = 2,
+    D3DTFN_ANISOTROPIC  = 3,
+    D3DTFN_FORCE_DWORD  = 0x7fffffff
+} D3DTEXTUREMINFILTER;
+
+typedef enum _D3DTEXTUREMIPFILTER
+{
+    D3DTFP_NONE         = 1,
+    D3DTFP_POINT        = 2,
+    D3DTFP_LINEAR       = 3,
+    D3DTFP_FORCE_DWORD  = 0x7fffffff
+} D3DTEXTUREMIPFILTER;
+
+#define D3DTRIFLAG_START                        __MSABI_LONG(0x00000000)
+#define D3DTRIFLAG_STARTFLAT(len) (len)
+#define D3DTRIFLAG_ODD                          __MSABI_LONG(0x0000001e)
+#define D3DTRIFLAG_EVEN                         __MSABI_LONG(0x0000001f)
+
+#define D3DTRIFLAG_EDGEENABLE1                  __MSABI_LONG(0x00000100)
+#define D3DTRIFLAG_EDGEENABLE2                  __MSABI_LONG(0x00000200)
+#define D3DTRIFLAG_EDGEENABLE3                  __MSABI_LONG(0x00000400)
+#define D3DTRIFLAG_EDGEENABLETRIANGLE \
+        (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)
+
+typedef struct _D3DTRIANGLE {
+  union {
+    WORD v1;
+    WORD wV1;
+  } DUMMYUNIONNAME1;
+  union {
+    WORD v2;
+    WORD wV2;
+  } DUMMYUNIONNAME2;
+  union {
+    WORD v3;
+    WORD wV3;
+  } DUMMYUNIONNAME3;
+  WORD     wFlags;
+} D3DTRIANGLE, *LPD3DTRIANGLE;
+
+typedef struct _D3DLINE {
+  union {
+    WORD v1;
+    WORD wV1;
+  } DUMMYUNIONNAME1;
+  union {
+    WORD v2;
+    WORD wV2;
+  } DUMMYUNIONNAME2;
+} D3DLINE, *LPD3DLINE;
+
+typedef struct _D3DSPAN {
+  WORD wCount;
+  WORD wFirst;
+} D3DSPAN, *LPD3DSPAN;
+
+typedef struct _D3DPOINT {
+  WORD wCount;
+  WORD wFirst;
+} D3DPOINT, *LPD3DPOINT;
+
+typedef struct _D3DBRANCH {
+  DWORD dwMask;
+  DWORD dwValue;
+  BOOL  bNegate;
+  DWORD dwOffset;
+} D3DBRANCH, *LPD3DBRANCH;
+
+typedef struct _D3DSTATUS {
+  DWORD   dwFlags;
+  DWORD   dwStatus;
+  D3DRECT drExtent;
+} D3DSTATUS, *LPD3DSTATUS;
+
+#define D3DSETSTATUS_STATUS   __MSABI_LONG(0x00000001)
+#define D3DSETSTATUS_EXTENTS  __MSABI_LONG(0x00000002)
+#define D3DSETSTATUS_ALL      (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)
+
+typedef struct _D3DCLIPSTATUS {
+  DWORD dwFlags;
+  DWORD dwStatus;
+  float minx, maxx;
+  float miny, maxy;
+  float minz, maxz;
+} D3DCLIPSTATUS, *LPD3DCLIPSTATUS;
+
+#define D3DCLIPSTATUS_STATUS        __MSABI_LONG(0x00000001)
+#define D3DCLIPSTATUS_EXTENTS2      __MSABI_LONG(0x00000002)
+#define D3DCLIPSTATUS_EXTENTS3      __MSABI_LONG(0x00000004)
+
+typedef struct {
+  DWORD        dwSize;
+  DWORD        dwTrianglesDrawn;
+  DWORD        dwLinesDrawn;
+  DWORD        dwPointsDrawn;
+  DWORD        dwSpansDrawn;
+  DWORD        dwVerticesProcessed;
+} D3DSTATS, *LPD3DSTATS;
+
+#define D3DEXECUTE_CLIPPED       __MSABI_LONG(0x00000001)
+#define D3DEXECUTE_UNCLIPPED     __MSABI_LONG(0x00000002)
+
+typedef struct _D3DEXECUTEDATA {
+  DWORD     dwSize;
+  DWORD     dwVertexOffset;
+  DWORD     dwVertexCount;
+  DWORD     dwInstructionOffset;
+  DWORD     dwInstructionLength;
+  DWORD     dwHVertexOffset;
+  D3DSTATUS dsStatus;
+} D3DEXECUTEDATA, *LPD3DEXECUTEDATA;
+
+#define D3DPAL_FREE 0x00
+#define D3DPAL_READONLY 0x40
+#define D3DPAL_RESERVED 0x80
+
+typedef struct _D3DVERTEXBUFFERDESC {
+  DWORD dwSize;
+  DWORD dwCaps;
+  DWORD dwFVF;
+  DWORD dwNumVertices;
+} D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;
+
+#define D3DVBCAPS_SYSTEMMEMORY      __MSABI_LONG(0x00000800)
+#define D3DVBCAPS_WRITEONLY         __MSABI_LONG(0x00010000)
+#define D3DVBCAPS_OPTIMIZED         __MSABI_LONG(0x80000000)
+#define D3DVBCAPS_DONOTCLIP         __MSABI_LONG(0x00000001)
+
+#define D3DVOP_LIGHT       (1 << 10)
+#define D3DVOP_TRANSFORM   (1 << 0)
+#define D3DVOP_CLIP        (1 << 2)
+#define D3DVOP_EXTENTS     (1 << 3)
+
+#define D3DMAXNUMVERTICES    ((1<<16) - 1)
+
+#define D3DMAXNUMPRIMITIVES  ((1<<16) - 1)
+
+#define D3DPV_DONOTCOPYDATA (1 << 0)
+
+#define D3DFVF_RESERVED0        0x001
+#define D3DFVF_POSITION_MASK    0x00E
+#define D3DFVF_XYZ              0x002
+#define D3DFVF_XYZRHW           0x004
+#define D3DFVF_XYZB1            0x006
+#define D3DFVF_XYZB2            0x008
+#define D3DFVF_XYZB3            0x00a
+#define D3DFVF_XYZB4            0x00c
+#define D3DFVF_XYZB5            0x00e
+
+#define D3DFVF_NORMAL           0x010
+#define D3DFVF_RESERVED1        0x020
+#define D3DFVF_DIFFUSE          0x040
+#define D3DFVF_SPECULAR         0x080
+#define D3DFVF_TEXCOUNT_MASK    0xf00
+#define D3DFVF_TEXCOUNT_SHIFT   8
+#define D3DFVF_TEX0             0x000
+#define D3DFVF_TEX1             0x100
+#define D3DFVF_TEX2             0x200
+#define D3DFVF_TEX3             0x300
+#define D3DFVF_TEX4             0x400
+#define D3DFVF_TEX5             0x500
+#define D3DFVF_TEX6             0x600
+#define D3DFVF_TEX7             0x700
+#define D3DFVF_TEX8             0x800
+
+#define D3DFVF_RESERVED2        0xf000
+
+#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )
+#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \
+                         D3DFVF_SPECULAR | D3DFVF_TEX1 )
+#define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \
+                          D3DFVF_TEX1 )
+
+typedef struct _D3DDP_PTRSTRIDE
+{
+  void *lpvData;
+  DWORD dwStride;
+} D3DDP_PTRSTRIDE;
+
+#define D3DDP_MAXTEXCOORD 8
+
+typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA  {
+  D3DDP_PTRSTRIDE position;
+  D3DDP_PTRSTRIDE normal;
+  D3DDP_PTRSTRIDE diffuse;
+  D3DDP_PTRSTRIDE specular;
+  D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];
+} D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA;
+
+#define D3DVIS_INSIDE_FRUSTUM       0
+#define D3DVIS_INTERSECT_FRUSTUM    1
+#define D3DVIS_OUTSIDE_FRUSTUM      2
+#define D3DVIS_INSIDE_LEFT          0
+#define D3DVIS_INTERSECT_LEFT       (1 << 2)
+#define D3DVIS_OUTSIDE_LEFT         (2 << 2)
+#define D3DVIS_INSIDE_RIGHT         0
+#define D3DVIS_INTERSECT_RIGHT      (1 << 4)
+#define D3DVIS_OUTSIDE_RIGHT        (2 << 4)
+#define D3DVIS_INSIDE_TOP           0
+#define D3DVIS_INTERSECT_TOP        (1 << 6)
+#define D3DVIS_OUTSIDE_TOP          (2 << 6)
+#define D3DVIS_INSIDE_BOTTOM        0
+#define D3DVIS_INTERSECT_BOTTOM     (1 << 8)
+#define D3DVIS_OUTSIDE_BOTTOM       (2 << 8)
+#define D3DVIS_INSIDE_NEAR          0
+#define D3DVIS_INTERSECT_NEAR       (1 << 10)
+#define D3DVIS_OUTSIDE_NEAR         (2 << 10)
+#define D3DVIS_INSIDE_FAR           0
+#define D3DVIS_INTERSECT_FAR        (1 << 12)
+#define D3DVIS_OUTSIDE_FAR          (2 << 12)
+
+#define D3DVIS_MASK_FRUSTUM         (3 << 0)
+#define D3DVIS_MASK_LEFT            (3 << 2)
+#define D3DVIS_MASK_RIGHT           (3 << 4)
+#define D3DVIS_MASK_TOP             (3 << 6)
+#define D3DVIS_MASK_BOTTOM          (3 << 8)
+#define D3DVIS_MASK_NEAR            (3 << 10)
+#define D3DVIS_MASK_FAR             (3 << 12)
+
+#define D3DDEVINFOID_TEXTUREMANAGER    1
+#define D3DDEVINFOID_D3DTEXTUREMANAGER 2
+#define D3DDEVINFOID_TEXTURING         3
+
+typedef enum _D3DSTATEBLOCKTYPE
+{
+    D3DSBT_ALL           = 1,
+    D3DSBT_PIXELSTATE    = 2,
+    D3DSBT_VERTEXSTATE   = 3,
+    D3DSBT_FORCE_DWORD   = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS
+{
+    D3DVBLEND_DISABLE  = 0,
+    D3DVBLEND_1WEIGHT  = 1,
+    D3DVBLEND_2WEIGHTS = 2,
+    D3DVBLEND_3WEIGHTS = 3,
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+    D3DTTFF_DISABLE         = 0,
+    D3DTTFF_COUNT1          = 1,
+    D3DTTFF_COUNT2          = 2,
+    D3DTTFF_COUNT3          = 3,
+    D3DTTFF_COUNT4          = 4,
+    D3DTTFF_PROJECTED       = 256,
+    D3DTTFF_FORCE_DWORD     = 0x7fffffff
+} D3DTEXTURETRANSFORMFLAGS;
+
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+
+#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
new file mode 100644
index 0000000..96f669b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2000 Ove Kaaven
+ *
+ * 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
+ */
+
+#ifndef __WINE_D3DVEC_INL
+#define __WINE_D3DVEC_INL
+
+#include <math.h>
+
+/*** constructors ***/
+
+inline _D3DVECTOR::_D3DVECTOR(D3DVALUE f)
+{
+  x = y = z = f;
+}
+
+inline _D3DVECTOR::_D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z)
+{
+  x = _x; y = _y; z = _z;
+}
+
+/*** assignment operators ***/
+
+inline _D3DVECTOR& _D3DVECTOR::operator += (const _D3DVECTOR& v)
+{
+  x += v.x; y += v.y; z += v.z;
+  return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator -= (const _D3DVECTOR& v)
+{
+  x -= v.x; y -= v.y; z -= v.z;
+  return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator *= (const _D3DVECTOR& v)
+{
+  x *= v.x; y *= v.y; z *= v.z;
+  return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator /= (const _D3DVECTOR& v)
+{
+  x /= v.x; y /= v.y; z /= v.z;
+  return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator *= (D3DVALUE s)
+{
+  x *= s; y *= s; z *= s;
+  return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator /= (D3DVALUE s)
+{
+  x /= s; y /= s; z /= s;
+  return *this;
+}
+
+/*** unary operators ***/
+
+inline _D3DVECTOR operator + (const _D3DVECTOR& v)
+{
+  return v;
+}
+
+inline _D3DVECTOR operator - (const _D3DVECTOR& v)
+{
+  return _D3DVECTOR(-v.x, -v.y, -v.z);
+}
+
+/*** binary operators ***/
+
+inline _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+  return _D3DVECTOR(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z);
+}
+
+inline _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+  return _D3DVECTOR(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z);
+}
+
+inline _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s)
+{
+  return _D3DVECTOR(v.x*s, v.y*s, v.z*s);
+}
+
+inline _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v)
+{
+  return _D3DVECTOR(v.x*s, v.y*s, v.z*s);
+}
+
+inline _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s)
+{
+  return _D3DVECTOR(v.x/s, v.y/s, v.z/s);
+}
+
+inline D3DVALUE SquareMagnitude(const _D3DVECTOR& v)
+{
+  return v.x*v.x + v.y*v.y + v.z*v.z; /* DotProduct(v, v) */
+}
+
+inline D3DVALUE Magnitude(const _D3DVECTOR& v)
+{
+  return sqrt(SquareMagnitude(v));
+}
+
+inline _D3DVECTOR Normalize(const _D3DVECTOR& v)
+{
+  return v / Magnitude(v);
+}
+
+inline D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+  return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
+}
+
+inline _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+  _D3DVECTOR res;
+  /* this is a left-handed cross product, right? */
+  res.x = v1.y * v2.z - v1.z * v2.y;
+  res.y = v1.z * v2.x - v1.x * v2.z;
+  res.z = v1.x * v2.y - v1.y * v2.x;
+  return res;
+}
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h
new file mode 100644
index 0000000..ca15cf4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 David Adam
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DX9_H__
+#define __D3DX9_H__
+
+#include <limits.h>
+
+#define D3DX_DEFAULT         ((UINT)-1)
+#define D3DX_DEFAULT_NONPOW2 ((UINT)-2)
+#define D3DX_DEFAULT_FLOAT   FLT_MAX
+#define D3DX_FROM_FILE       ((UINT)-3)
+#define D3DFMT_FROM_FILE     ((D3DFORMAT)-3)
+
+#include "d3d9.h"
+#include "d3dx9math.h"
+#include "d3dx9core.h"
+#include "d3dx9xof.h"
+#include "d3dx9mesh.h"
+#include "d3dx9shader.h"
+#include "d3dx9effect.h"
+#include "d3dx9shape.h"
+#include "d3dx9anim.h"
+#include "d3dx9tex.h"
+
+#define _FACDD 0x876
+#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code)
+
+enum _D3DXERR {
+    D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900),
+    D3DXERR_INVALIDMESH             = MAKE_DDHRESULT(2901),
+    D3DXERR_CANNOTATTRSORT          = MAKE_DDHRESULT(2902),
+    D3DXERR_SKINNINGNOTSUPPORTED    = MAKE_DDHRESULT(2903),
+    D3DXERR_TOOMANYINFLUENCES       = MAKE_DDHRESULT(2904),
+    D3DXERR_INVALIDDATA             = MAKE_DDHRESULT(2905),
+    D3DXERR_LOADEDMESHASNODATA      = MAKE_DDHRESULT(2906),
+    D3DXERR_DUPLICATENAMEDFRAGMENT  = MAKE_DDHRESULT(2907),
+    D3DXERR_CANNOTREMOVELASTITEM    = MAKE_DDHRESULT(2908),
+};
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h
new file mode 100644
index 0000000..5ef58c8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h
@@ -0,0 +1,417 @@
+/*
+ * Copyright 2011 Dylan Smith
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DX9ANIM_H
+#define __WINE_D3DX9ANIM_H
+
+DEFINE_GUID(IID_ID3DXAnimationSet,           0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9);
+DEFINE_GUID(IID_ID3DXKeyframedAnimationSet,  0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf);
+DEFINE_GUID(IID_ID3DXCompressedAnimationSet, 0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c);
+DEFINE_GUID(IID_ID3DXAnimationController,    0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e);
+
+typedef enum _D3DXMESHDATATYPE
+{
+    D3DXMESHTYPE_MESH        = 1,
+    D3DXMESHTYPE_PMESH       = 2,
+    D3DXMESHTYPE_PATCHMESH   = 3,
+    D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff,
+} D3DXMESHDATATYPE;
+
+typedef enum _D3DXCALLBACK_SEARCH_FLAGS
+{
+    D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x00000001,
+    D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION    = 0x00000002,
+    D3DXCALLBACK_SEARCH_FORCE_DWORD                = 0x7fffffff,
+} D3DXCALLBACK_SEARCH_FLAGS;
+
+typedef enum _D3DXPLAYBACK_TYPE
+{
+    D3DXPLAY_LOOP        = 0,
+    D3DXPLAY_ONCE        = 1,
+    D3DXPLAY_PINGPONG    = 2,
+    D3DXPLAY_FORCE_DWORD = 0x7fffffff,
+} D3DXPLAYBACK_TYPE;
+
+typedef enum _D3DXCOMPRESSION_FLAGS
+{
+    D3DXCOMPRESSION_DEFAULT     = 0x00000000,
+    D3DXCOMPRESSION_FORCE_DWORD = 0x7fffffff,
+} D3DXCOMPRESSION_FLAGS;
+
+typedef enum _D3DXPRIORITY_TYPE
+{
+    D3DXPRIORITY_LOW         = 0,
+    D3DXPRIORITY_HIGH        = 1,
+    D3DXPRIORITY_FORCE_DWORD = 0x7fffffff,
+} D3DXPRIORITY_TYPE;
+
+typedef enum _D3DXEVENT_TYPE
+{
+    D3DXEVENT_TRACKSPEED    = 0,
+    D3DXEVENT_TRACKWEIGHT   = 1,
+    D3DXEVENT_TRACKPOSITION = 2,
+    D3DXEVENT_TRACKENABLE   = 3,
+    D3DXEVENT_PRIORITYBLEND = 4,
+    D3DXEVENT_FORCE_DWORD   = 0x7fffffff,
+} D3DXEVENT_TYPE;
+
+typedef enum _D3DXTRANSITION_TYPE
+{
+    D3DXTRANSITION_LINEAR        = 0,
+    D3DXTRANSITION_EASEINEASEOUT = 1,
+    D3DXTRANSITION_FORCE_DWORD   = 0x7fffffff,
+} D3DXTRANSITION_TYPE;
+
+
+typedef struct _D3DXMESHDATA
+{
+    D3DXMESHDATATYPE Type;
+
+    union
+    {
+        ID3DXMesh *pMesh;
+        ID3DXPMesh *pPMesh;
+        ID3DXPatchMesh *pPatchMesh;
+    } DUMMYUNIONNAME;
+} D3DXMESHDATA, *LPD3DXMESHDATA;
+
+typedef struct _D3DXMESHCONTAINER
+{
+    char *Name;
+    D3DXMESHDATA MeshData;
+    LPD3DXMATERIAL pMaterials;
+    LPD3DXEFFECTINSTANCE pEffects;
+    DWORD NumMaterials;
+    DWORD *pAdjacency;
+    ID3DXSkinInfo *pSkinInfo;
+    struct _D3DXMESHCONTAINER *pNextMeshContainer;
+} D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER;
+
+typedef struct _D3DXFRAME
+{
+    char *Name;
+    D3DXMATRIX TransformationMatrix;
+    LPD3DXMESHCONTAINER pMeshContainer;
+    struct _D3DXFRAME *pFrameSibling;
+    struct _D3DXFRAME *pFrameFirstChild;
+} D3DXFRAME, *LPD3DXFRAME;
+
+typedef struct _D3DXKEY_VECTOR3
+{
+    FLOAT Time;
+    D3DXVECTOR3 Value;
+} D3DXKEY_VECTOR3, *LPD3DXKEY_VECTOR3;
+
+typedef struct _D3DXKEY_QUATERNION
+{
+    FLOAT Time;
+    D3DXQUATERNION Value;
+} D3DXKEY_QUATERNION, *LPD3DXKEY_QUATERNION;
+
+typedef struct _D3DXKEY_CALLBACK
+{
+    float Time;
+    void *pCallbackData;
+} D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK;
+
+typedef struct _D3DXTRACK_DESC
+{
+    D3DXPRIORITY_TYPE Priority;
+    FLOAT Weight;
+    FLOAT Speed;
+    DOUBLE Position;
+    BOOL Enable;
+} D3DXTRACK_DESC, *LPD3DXTRACK_DESC;
+
+typedef struct _D3DXEVENT_DESC
+{
+    D3DXEVENT_TYPE Type;
+    UINT Track;
+    DOUBLE StartTime;
+    DOUBLE Duration;
+    D3DXTRANSITION_TYPE Transition;
+    union
+    {
+        FLOAT Weight;
+        FLOAT Speed;
+        DOUBLE Position;
+        BOOL Enable;
+    } DUMMYUNIONNAME;
+} D3DXEVENT_DESC, *LPD3DXEVENT_DESC;
+
+typedef DWORD D3DXEVENTHANDLE, *LPD3DXEVENTHANDLE;
+
+typedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY;
+typedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA;
+typedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA;
+typedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET;
+typedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET;
+typedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET;
+typedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER;
+typedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER;
+
+#undef INTERFACE
+
+#define INTERFACE ID3DXAllocateHierarchy
+DECLARE_INTERFACE(ID3DXAllocateHierarchy)
+{
+    STDMETHOD(CreateFrame)(THIS_ const char *name, D3DXFRAME **new_frame) PURE;
+    STDMETHOD(CreateMeshContainer)(THIS_ const char *name, const D3DXMESHDATA *mesh_data,
+            const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances,
+            DWORD num_materials, const DWORD *adjacency, ID3DXSkinInfo *skin_info,
+            D3DXMESHCONTAINER **new_mesh_container) PURE;
+    STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME frame) PURE;
+    STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER mesh_container) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXLoadUserData
+DECLARE_INTERFACE(ID3DXLoadUserData)
+{
+    STDMETHOD(LoadTopLevelData)(ID3DXFileData *child_data) PURE;
+    STDMETHOD(LoadFrameChildData)(D3DXFRAME *frame, ID3DXFileData *child_data) PURE;
+    STDMETHOD(LoadMeshChildData)(D3DXMESHCONTAINER *mesh_container, ID3DXFileData *child_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXSaveUserData
+DECLARE_INTERFACE(ID3DXSaveUserData)
+{
+    STDMETHOD(AddFrameChildData)(const D3DXFRAME *frame,
+            ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *frame_data) PURE;
+    STDMETHOD(AddMeshChildData)(const D3DXMESHCONTAINER *mesh_container,
+            ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *mesh_data) PURE;
+    STDMETHOD(AddTopLevelDataObjectsPre)(ID3DXFileSaveObject *save_obj) PURE;
+    STDMETHOD(AddTopLevelDataObjectsPost)(ID3DXFileSaveObject *save_obj) PURE;
+    STDMETHOD(RegisterTemplates)(ID3DXFile *file) PURE;
+    STDMETHOD(SaveTemplates)(ID3DXFileSaveObject *save_obj) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXAnimationSet
+DECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXAnimationSet methods ***/
+    STDMETHOD_(const char *, GetName)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;
+    STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
+    STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;
+    STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;
+    STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
+            D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+    STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,
+            void **callback_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXKeyframedAnimationSet
+DECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXAnimationSet methods ***/
+    STDMETHOD_(const char *, GetName)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;
+    STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
+    STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;
+    STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;
+    STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
+            D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+    STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,
+            void **callback_data) PURE;
+    /*** ID3DXKeyframedAnimationSet methods ***/
+    STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT animation) PURE;
+    STDMETHOD(GetScaleKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 scale_keys) PURE;
+    STDMETHOD(GetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE;
+    STDMETHOD(SetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE;
+    STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT animation) PURE;
+    STDMETHOD(GetRotationKeys)(THIS_ UINT animation, LPD3DXKEY_QUATERNION rotation_keys) PURE;
+    STDMETHOD(GetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE;
+    STDMETHOD(SetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE;
+    STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT animation) PURE;
+    STDMETHOD(GetTranslationKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 translation_keys) PURE;
+    STDMETHOD(GetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE;
+    STDMETHOD(SetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE;
+    STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;
+    STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE;
+    STDMETHOD(GetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE;
+    STDMETHOD(SetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE;
+    STDMETHOD(UnregisterScaleKey)(THIS_ UINT animation, UINT key) PURE;
+    STDMETHOD(UnregisterRotationKey)(THIS_ UINT animation, UINT key) PURE;
+    STDMETHOD(UnregisterTranslationKey)(THIS_ UINT animation, UINT key) PURE;
+    STDMETHOD(RegisterAnimationSRTKeys)(THIS_ const char *name, UINT num_scale_keys,
+            UINT num_rotation_keys, UINT num_translation_keys, const D3DXKEY_VECTOR3 *scale_keys,
+            const D3DXKEY_QUATERNION *rotation_keys, const D3DXKEY_VECTOR3 *translation_keys,
+            DWORD *animation_index) PURE;
+    STDMETHOD(Compress)(THIS_ DWORD flags, float lossiness, D3DXFRAME *hierarchy,
+            ID3DXBuffer **compressed_data) PURE;
+    STDMETHOD(UnregisterAnimation)(THIS_ UINT index) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXCompressedAnimationSet
+DECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXAnimationSet methods ***/
+    STDMETHOD_(const char *, GetName)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;
+    STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
+    STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;
+    STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;
+    STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
+            D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+    STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,
+            void **callback_data) PURE;
+    /*** ID3DXCompressedAnimationSet methods ***/
+    STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;
+    STDMETHOD(GetCompressedData)(THIS_ ID3DXBuffer **compressed_data) PURE;
+    STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;
+    STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXAnimationCallbackHandler
+DECLARE_INTERFACE(ID3DXAnimationCallbackHandler)
+{
+    STDMETHOD(HandleCallback)(THIS_ UINT track, void *callback_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXAnimationController
+DECLARE_INTERFACE_(ID3DXAnimationController, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXAnimationController methods ***/
+    STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE;
+    STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE;
+    STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE;
+    STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE;
+    STDMETHOD(RegisterAnimationOutput)(THIS_ const char *name, D3DXMATRIX *matrix,
+            D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+    STDMETHOD(RegisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE;
+    STDMETHOD(UnregisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE;
+    STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE;
+    STDMETHOD(GetAnimationSet)(THIS_ UINT index, ID3DXAnimationSet **anim_set) PURE;
+    STDMETHOD(GetAnimationSetByName)(THIS_ const char *name, ID3DXAnimationSet **anim_set) PURE;
+    STDMETHOD(AdvanceTime)(THIS_ double time_delta, ID3DXAnimationCallbackHandler **callback_handler) PURE;
+    STDMETHOD(ResetTime)(THIS) PURE;
+    STDMETHOD_(DOUBLE, GetTime)(THIS) PURE;
+    STDMETHOD(SetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet *anim_set) PURE;
+    STDMETHOD(GetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet **anim_set) PURE;
+    STDMETHOD(GetTrackPriority)(THIS_ UINT track, D3DXPRIORITY_TYPE *priority) PURE;
+    STDMETHOD(SetTrackSpeed)(THIS_ UINT track, FLOAT speed) PURE;
+    STDMETHOD(SetTrackWeight)(THIS_ UINT track, FLOAT weight) PURE;
+    STDMETHOD(SetTrackPosition)(THIS_ UINT track, DOUBLE position) PURE;
+    STDMETHOD(SetTrackEnable)(THIS_ UINT track, BOOL enable) PURE;
+    STDMETHOD(SetTrackDesc)(THIS_ UINT track, LPD3DXTRACK_DESC desc) PURE;
+    STDMETHOD(GetTrackDesc)(THIS_ UINT track, LPD3DXTRACK_DESC desc) PURE;
+    STDMETHOD(SetPriorityBlend)(THIS_ FLOAT blend_weight) PURE;
+    STDMETHOD_(FLOAT, GetPriorityBlend)(THIS) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT track, FLOAT new_speed,
+            DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT track, FLOAT new_weight,
+            DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT track, DOUBLE new_position, DOUBLE start_time) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT track, BOOL new_enable, DOUBLE start_time) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ FLOAT new_blend_weight,
+            DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+    STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE event) PURE;
+    STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT track) PURE;
+    STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT track, D3DXEVENT_TYPE event_type) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT track, D3DXEVENTHANDLE event) PURE;
+    STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE handle) PURE;
+    STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE event) PURE;
+    STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE event, LPD3DXEVENT_DESC desc) PURE;
+    STDMETHOD(CloneAnimationController)(THIS_ UINT max_num_anim_outputs, UINT max_num_anim_sets,
+            UINT max_num_tracks, UINT max_num_events, ID3DXAnimationController **anim_controller) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader,
+        D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller);
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader,
+        D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller);
+#define D3DXLoadMeshHierarchyFromX WINELIB_NAME_AW(D3DXLoadMeshHierarchyFromX)
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXInMemory(const void *data, DWORD data_size, DWORD flags,
+        struct IDirect3DDevice9 *device, struct ID3DXAllocateHierarchy *alloc,
+        struct ID3DXLoadUserData *user_data_loader, D3DXFRAME **frame_hierarchy,
+        struct ID3DXAnimationController **animation_controller);
+HRESULT WINAPI D3DXSaveMeshHierarchyToFileA(const char *filename, DWORD format,
+        const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller,
+        ID3DXSaveUserData *user_data_saver);
+HRESULT WINAPI D3DXSaveMeshHierarchyToFileW(const WCHAR *filename, DWORD format,
+        const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller,
+        ID3DXSaveUserData *user_data_saver);
+#define D3DXSaveMeshHierarchyToFile WINELIB_NAME_AW(D3DXSaveMeshHierarchyToFile)
+HRESULT WINAPI D3DXFrameDestroy(D3DXFRAME *frame_root, ID3DXAllocateHierarchy *alloc);
+HRESULT WINAPI D3DXFrameAppendChild(D3DXFRAME *parent, const D3DXFRAME *child);
+D3DXFRAME * WINAPI D3DXFrameFind(const D3DXFRAME *root, const char *name);
+HRESULT WINAPI D3DXFrameRegisterNamedMatrices(D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller);
+UINT WINAPI D3DXFrameNumNamedMatrices(const D3DXFRAME *frame_root);
+HRESULT WINAPI D3DXFrameCalculateBoundingSphere(const D3DXFRAME *frame_root, D3DXVECTOR3 *center,
+        FLOAT *radius);
+HRESULT WINAPI D3DXCreateKeyframedAnimationSet(const char *name, double ticks_per_second,
+        D3DXPLAYBACK_TYPE playback_type, UINT animation_count, UINT callback_key_count,
+        const D3DXKEY_CALLBACK *callback_keys, ID3DXKeyframedAnimationSet **animation_set);
+HRESULT WINAPI D3DXCreateCompressedAnimationSet(const char *name, double ticks_per_second,
+        D3DXPLAYBACK_TYPE playback_type, ID3DXBuffer *compressed_data, UINT callback_key_count,
+        const D3DXKEY_CALLBACK *callback_keys, ID3DXCompressedAnimationSet **animation_set);
+HRESULT WINAPI D3DXCreateAnimationController(UINT max_animation_output_count, UINT max_animation_set_count,
+        UINT max_track_count, UINT max_event_count, ID3DXAnimationController **animation_controller);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9ANIM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h
new file mode 100644
index 0000000..fd1967e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h
@@ -0,0 +1,514 @@
+/*
+ * Copyright (C) 2007, 2008 Tony Wasserka
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __WINE_D3DX9CORE_H
+#define __WINE_D3DX9CORE_H
+
+/**********************************************
+ ***************** Definitions ****************
+ **********************************************/
+/* D3DX_VERSION will be completely ignored since we are
+    implementing all dlls from d3dx9_24 to d3dx9_36 */
+#define D3DX_VERSION 0x0902
+#define D3DX_SDK_VERSION 36
+#define D3DXSPRITE_DONOTSAVESTATE          0x00000001
+#define D3DXSPRITE_DONOTMODIFY_RENDERSTATE 0x00000002
+#define D3DXSPRITE_OBJECTSPACE             0x00000004
+#define D3DXSPRITE_BILLBOARD               0x00000008
+#define D3DXSPRITE_ALPHABLEND              0x00000010
+#define D3DXSPRITE_SORT_TEXTURE            0x00000020
+#define D3DXSPRITE_SORT_DEPTH_FRONTTOBACK  0x00000040
+#define D3DXSPRITE_SORT_DEPTH_BACKTOFRONT  0x00000080
+#define D3DXSPRITE_DO_NOT_ADDREF_TEXTURE   0x00000100
+
+/**********************************************
+ ******************** GUIDs *******************
+ **********************************************/
+DEFINE_GUID(IID_ID3DXBuffer, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);
+DEFINE_GUID(IID_ID3DXFont, 0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc);
+DEFINE_GUID(IID_ID3DXLine, 0xd379ba7f, 0x9042, 0x4ac4, 0x9f, 0x5e, 0x58, 0x19, 0x2a, 0x4c, 0x6b, 0xd8);
+DEFINE_GUID(IID_ID3DXRenderToEnvMap, 0x313f1b4b, 0xc7b0, 0x4fa2, 0x9d, 0x9d, 0x8d, 0x38, 0xb, 0x64, 0x38, 0x5e);
+DEFINE_GUID(IID_ID3DXRenderToSurface, 0x6985f346, 0x2c3d, 0x43b3, 0xbe, 0x8b, 0xda, 0xae, 0x8a, 0x3, 0xd8, 0x94);
+DEFINE_GUID(IID_ID3DXSprite, 0xba0b762d, 0x7d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14);
+
+/**********************************************
+ ****************** typedefs ******************
+ **********************************************/
+typedef struct ID3DXBuffer *LPD3DXBUFFER;
+typedef struct ID3DXFont *LPD3DXFONT;
+typedef struct ID3DXLine *LPD3DXLINE;
+typedef struct ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap;
+typedef struct ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE;
+typedef struct ID3DXSprite *LPD3DXSPRITE;
+
+/**********************************************
+ *********** interface declarations ***********
+ **********************************************/
+#define INTERFACE ID3DXBuffer
+DECLARE_INTERFACE_(ID3DXBuffer, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBuffer methods ***/
+    STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;
+    STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define ID3DXBuffer_Release(p)            (p)->lpVtbl->Release(p)
+/*** ID3DXBuffer methods ***/
+#define ID3DXBuffer_GetBufferPointer(p)   (p)->lpVtbl->GetBufferPointer(p)
+#define ID3DXBuffer_GetBufferSize(p)      (p)->lpVtbl->GetBufferSize(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXBuffer_AddRef(p)             (p)->AddRef()
+#define ID3DXBuffer_Release(p)            (p)->Release()
+/*** ID3DXBuffer methods ***/
+#define ID3DXBuffer_GetBufferPointer(p)   (p)->GetBufferPointer()
+#define ID3DXBuffer_GetBufferSize(p)      (p)->GetBufferSize()
+#endif
+
+typedef struct _D3DXFONT_DESCA
+{
+    INT Height;
+    UINT Width;
+    UINT Weight;
+    UINT MipLevels;
+    BOOL Italic;
+    BYTE CharSet;
+    BYTE OutputPrecision;
+    BYTE Quality;
+    BYTE PitchAndFamily;
+    CHAR FaceName[LF_FACESIZE];
+} D3DXFONT_DESCA, *LPD3DXFONT_DESCA;
+
+typedef struct _D3DXFONT_DESCW
+{
+    INT Height;
+    UINT Width;
+    UINT Weight;
+    UINT MipLevels;
+    BOOL Italic;
+    BYTE CharSet;
+    BYTE OutputPrecision;
+    BYTE Quality;
+    BYTE PitchAndFamily;
+    WCHAR FaceName[LF_FACESIZE];
+} D3DXFONT_DESCW, *LPD3DXFONT_DESCW;
+
+DECL_WINELIB_TYPE_AW(D3DXFONT_DESC)
+DECL_WINELIB_TYPE_AW(LPD3DXFONT_DESC)
+
+#define INTERFACE ID3DXFont
+DECLARE_INTERFACE_(ID3DXFont, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXFont methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *desc) PURE;
+    STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *desc) PURE;
+    STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *metrics) PURE;
+    STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *metrics) PURE;
+
+    STDMETHOD_(HDC, GetDC)(THIS) PURE;
+    STDMETHOD(GetGlyphData)(THIS_ UINT glyph, struct IDirect3DTexture9 **texture,
+            RECT *blackbox, POINT *cellinc) PURE;
+
+    STDMETHOD(PreloadCharacters)(THIS_ UINT first, UINT last) PURE;
+    STDMETHOD(PreloadGlyphs)(THIS_ UINT first, UINT last) PURE;
+    STDMETHOD(PreloadTextA)(THIS_ const char *string, INT count) PURE;
+    STDMETHOD(PreloadTextW)(THIS_ const WCHAR *string, INT count) PURE;
+
+    STDMETHOD_(INT, DrawTextA)(THIS_ struct ID3DXSprite *sprite, const char *string,
+            INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE;
+    STDMETHOD_(INT, DrawTextW)(THIS_ struct ID3DXSprite *sprite, const WCHAR *string,
+            INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE;
+
+    STDMETHOD(OnLostDevice)(THIS) PURE;
+    STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+
+/*** IUnknown methods ***/
+#define ID3DXFont_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXFont_AddRef(p)                (p)->lpVtbl->AddRef(p)
+#define ID3DXFont_Release(p)               (p)->lpVtbl->Release(p)
+/*** ID3DXFont methods ***/
+#define ID3DXFont_GetDevice(p,a)           (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXFont_GetDescA(p,a)            (p)->lpVtbl->GetDescA(p,a)
+#define ID3DXFont_GetDescW(p,a)            (p)->lpVtbl->GetDescW(p,a)
+#define ID3DXFont_GetTextMetricsA(p,a)     (p)->lpVtbl->GetTextMetricsA(p,a)
+#define ID3DXFont_GetTextMetricsW(p,a)     (p)->lpVtbl->GetTextMetricsW(p,a)
+#define ID3DXFont_GetDC(p)                 (p)->lpVtbl->GetDC(p)
+#define ID3DXFont_GetGlyphData(p,a,b,c,d)  (p)->lpVtbl->GetGlyphData(p,a,b,c,d)
+#define ID3DXFont_PreloadCharacters(p,a,b) (p)->lpVtbl->PreloadCharacters(p,a,b)
+#define ID3DXFont_PreloadGlyphs(p,a,b)     (p)->lpVtbl->PreloadGlyphs(p,a,b)
+#define ID3DXFont_PreloadTextA(p,a,b)      (p)->lpVtbl->PreloadTextA(p,a,b)
+#define ID3DXFont_PreloadTextW(p,a,b)      (p)->lpVtbl->PreloadTextW(p,a,b)
+#define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextA(p,a,b,c,d,e,f)
+#define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextW(p,a,b,c,d,e,f)
+#define ID3DXFont_OnLostDevice(p)          (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXFont_OnResetDevice(p)         (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXFont_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)
+#define ID3DXFont_AddRef(p)                (p)->AddRef()
+#define ID3DXFont_Release(p)               (p)->Release()
+/*** ID3DXFont methods ***/
+#define ID3DXFont_GetDevice(p,a)           (p)->GetDevice(a)
+#define ID3DXFont_GetDescA(p,a)            (p)->GetDescA(a)
+#define ID3DXFont_GetDescW(p,a)            (p)->GetDescW(a)
+#define ID3DXFont_GetTextMetricsA(p,a)     (p)->GetTextMetricsA(a)
+#define ID3DXFont_GetTextMetricsW(p,a)     (p)->GetTextMetricsW(a)
+#define ID3DXFont_GetDC(p)                 (p)->GetDC()
+#define ID3DXFont_GetGlyphData(p,a,b,c,d)  (p)->GetGlyphData(a,b,c,d)
+#define ID3DXFont_PreloadCharacters(p,a,b) (p)->PreloadCharacters(a,b)
+#define ID3DXFont_PreloadGlyphs(p,a,b)     (p)->PreloadGlyphs(a,b)
+#define ID3DXFont_PreloadTextA(p,a,b)      (p)->PreloadTextA(a,b)
+#define ID3DXFont_PreloadTextW(p,a,b)      (p)->PreloadTextW(a,b)
+#define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->DrawTextA(a,b,c,d,e,f)
+#define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->DrawTextW(a,b,c,d,e,f)
+#define ID3DXFont_OnLostDevice(p)          (p)->OnLostDevice()
+#define ID3DXFont_OnResetDevice(p)         (p)->OnResetDevice()
+#endif
+#define ID3DXFont_DrawText       WINELIB_NAME_AW(ID3DXFont_DrawText)
+#define ID3DXFont_GetDesc        WINELIB_NAME_AW(ID3DXFont_GetDesc)
+#define ID3DXFont_GetTextMetrics WINELIB_NAME_AW(ID3DXFont_GetTextMetrics)
+#define ID3DXFont_PreloadText    WINELIB_NAME_AW(ID3DXFont_PreloadText)
+
+#define INTERFACE ID3DXLine
+DECLARE_INTERFACE_(ID3DXLine, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /*** ID3DXLine methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+
+    STDMETHOD(Begin)(THIS) PURE;
+    STDMETHOD(Draw)(THIS_ const D3DXVECTOR2 *vertexlist, DWORD vertexlistcount, D3DCOLOR color) PURE;
+    STDMETHOD(DrawTransform)(THIS_ const D3DXVECTOR3 *vertexlist, DWORD vertexlistcount,
+            const D3DXMATRIX *transform, D3DCOLOR color) PURE;
+    STDMETHOD(SetPattern)(THIS_ DWORD pattern) PURE;
+    STDMETHOD_(DWORD, GetPattern)(THIS) PURE;
+    STDMETHOD(SetPatternScale)(THIS_ FLOAT scale) PURE;
+    STDMETHOD_(FLOAT, GetPatternScale)(THIS) PURE;
+    STDMETHOD(SetWidth)(THIS_ FLOAT width) PURE;
+    STDMETHOD_(FLOAT, GetWidth)(THIS) PURE;
+    STDMETHOD(SetAntialias)(THIS_ BOOL antialias) PURE;
+    STDMETHOD_(BOOL, GetAntialias)(THIS) PURE;
+    STDMETHOD(SetGLLines)(THIS_ BOOL gl_lines) PURE;
+    STDMETHOD_(BOOL, GetGLLines)(THIS) PURE;
+    STDMETHOD(End)(THIS) PURE;
+
+    STDMETHOD(OnLostDevice)(THIS) PURE;
+    STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXLine_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXLine_AddRef(p)                (p)->lpVtbl->AddRef(p)
+#define ID3DXLine_Release(p)               (p)->lpVtbl->Release(p)
+/*** ID3DXLine methods ***/
+#define ID3DXLine_GetDevice(p,a)           (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXLine_Begin(p)                 (p)->lpVtbl->Begin(p)
+#define ID3DXLine_Draw(p,a,b,c)            (p)->lpVtbl->Draw(p,a,b,c)
+#define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->lpVtbl->DrawTransform(p,a,b,c,d)
+#define ID3DXLine_SetPattern(p,a)          (p)->lpVtbl->SetPattern(p,a)
+#define ID3DXLine_GetPattern(p)            (p)->lpVtbl->GetPattern(p)
+#define ID3DXLine_SetPatternScale(p,a)     (p)->lpVtbl->SetPatternScale(p,a)
+#define ID3DXLine_GetPatternScale(p)       (p)->lpVtbl->GetPatternScale(p)
+#define ID3DXLine_SetWidth(p,a)            (p)->lpVtbl->SetWidth(p,a)
+#define ID3DXLine_GetWidth(p)              (p)->lpVtbl->GetWidth(p)
+#define ID3DXLine_SetAntialias(p,a)        (p)->lpVtbl->SetAntialias(p,a)
+#define ID3DXLine_GetAntialias(p)          (p)->lpVtbl->GetAntialias(p)
+#define ID3DXLine_SetGLLines(p,a)          (p)->lpVtbl->SetGLLines(p,a)
+#define ID3DXLine_GetGLLines(p)            (p)->lpVtbl->GetGLLines(p)
+#define ID3DXLine_End(p)                   (p)->lpVtbl->End(p)
+#define ID3DXLine_OnLostDevice(p)          (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXLine_OnResetDevice(p)         (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXLine_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)
+#define ID3DXLine_AddRef(p)                (p)->AddRef()
+#define ID3DXLine_Release(p)               (p)->Release()
+/*** ID3DXLine methods ***/
+#define ID3DXLine_GetDevice(p,a)           (p)->GetDevice(a)
+#define ID3DXLine_Begin(p)                 (p)->Begin()
+#define ID3DXLine_Draw(p,a,b,c)            (p)->Draw(a,b,c)
+#define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->DrawTransform(a,b,c,d)
+#define ID3DXLine_SetPattern(p,a)          (p)->SetPattern(a)
+#define ID3DXLine_GetPattern(p)            (p)->GetPattern()
+#define ID3DXLine_SetPatternScale(p,a)     (p)->SetPatternScale(a)
+#define ID3DXLine_GetPatternScale(p)       (p)->GetPatternScale()
+#define ID3DXLine_SetWidth(p,a)            (p)->SetWidth(a)
+#define ID3DXLine_GetWidth(p)              (p)->GetWidth()
+#define ID3DXLine_SetAntialias(p,a)        (p)->SetAntialias(a)
+#define ID3DXLine_GetAntialias(p)          (p)->GetAntialias()
+#define ID3DXLine_SetGLLines(p,a)          (p)->SetGLLines(a)
+#define ID3DXLine_GetGLLines(p)            (p)->GetGLLines()
+#define ID3DXLine_End(p)                   (p)->End()
+#define ID3DXLine_OnLostDevice(p)          (p)->OnLostDevice()
+#define ID3DXLine_OnResetDevice(p)         (p)->OnResetDevice()
+#endif
+
+typedef struct _D3DXRTE_DESC
+{
+    UINT Size;
+    UINT MipLevels;
+    D3DFORMAT Format;
+    BOOL DepthStencil;
+    D3DFORMAT DepthStencilFormat;
+} D3DXRTE_DESC;
+
+#define INTERFACE ID3DXRenderToEnvMap
+DECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+    /*** ID3DXRenderToEnvMap methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC *desc) PURE;
+
+    STDMETHOD(BeginCube)(THIS_ struct IDirect3DCubeTexture9 *cubetex) PURE;
+    STDMETHOD(BeginSphere)(THIS_ struct IDirect3DTexture9 *tex) PURE;
+    STDMETHOD(BeginHemisphere)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE;
+    STDMETHOD(BeginParabolic)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE;
+
+    STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES face, DWORD mipfilter) PURE;
+    STDMETHOD(End)(THIS_ DWORD mipfilter) PURE;
+
+    STDMETHOD(OnLostDevice)(THIS) PURE;
+    STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXRenderToEnvMap_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXRenderToEnvMap_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define ID3DXRenderToEnvMap_Release(p)             (p)->lpVtbl->Release(p)
+/*** ID3DXRenderToEnvMap methods ***/
+#define ID3DXRenderToEnvMap_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXRenderToEnvMap_GetDesc(p,a)           (p)->lpVtbl->GetDesc(p,a)
+#define ID3DXRenderToEnvMap_BeginCube(p,a)         (p)->lpVtbl->BeginCube(p,a)
+#define ID3DXRenderToEnvMap_BeginSphere(p,a)       (p)->lpVtbl->BeginSphere(p,a)
+#define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->lpVtbl->BeginHemisphere(p,a,b)
+#define ID3DXRenderToEnvMap_BeginParabolic(p,a,b)  (p)->lpVtbl->BeginParabolic(p,a,b)
+#define ID3DXRenderToEnvMap_Face(p,a,b)            (p)->lpVtbl->Face(p,a,b)
+#define ID3DXRenderToEnvMap_End(p,a)               (p)->lpVtbl->End(p,a)
+#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->lpVtbl->OnLostDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXRenderToEnvMap_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define ID3DXRenderToEnvMap_AddRef(p)              (p)->AddRef()
+#define ID3DXRenderToEnvMap_Release(p)             (p)->Release()
+/*** ID3DXRenderToEnvMap methods ***/
+#define ID3DXRenderToEnvMap_GetDevice(p,a)         (p)->GetDevice(a)
+#define ID3DXRenderToEnvMap_GetDesc(p,a)           (p)->GetDesc(a)
+#define ID3DXRenderToEnvMap_BeginCube(p,a)         (p)->BeginCube(a)
+#define ID3DXRenderToEnvMap_BeginSphere(p,a)       (p)->BeginSphere(a)
+#define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->BeginHemisphere(a,b)
+#define ID3DXRenderToEnvMap_BeginParabolic(p,a,b)  (p)->BeginParabolic(a,b)
+#define ID3DXRenderToEnvMap_Face(p,a,b)            (p)->Face(a,b)
+#define ID3DXRenderToEnvMap_End(p,a)               (p)->End(a)
+#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->OnLostDevice()
+#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->OnLostDevice()
+#endif
+
+typedef struct _D3DXRTS_DESC
+{
+    UINT Width;
+    UINT Height;
+    D3DFORMAT Format;
+    BOOL DepthStencil;
+    D3DFORMAT DepthStencilFormat;
+} D3DXRTS_DESC;
+
+#define INTERFACE ID3DXRenderToSurface
+DECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXRenderToSurface methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC *desc) PURE;
+
+    STDMETHOD(BeginScene)(THIS_ struct IDirect3DSurface9 *surface, const D3DVIEWPORT9 *viewport) PURE;
+    STDMETHOD(EndScene)(THIS_ DWORD mipfilter) PURE;
+
+    STDMETHOD(OnLostDevice)(THIS) PURE;
+    STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXRenderToSurface_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define ID3DXRenderToSurface_Release(p)            (p)->lpVtbl->Release(p)
+/*** ID3DXRenderToSurface methods ***/
+#define ID3DXRenderToSurface_GetDevice(p,a)        (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXRenderToSurface_GetDesc(p,a)          (p)->lpVtbl->GetDesc(p,a)
+#define ID3DXRenderToSurface_BeginScene(p,a,b)     (p)->lpVtbl->BeginScene(p,a,b)
+#define ID3DXRenderToSurface_EndScene(p,a)         (p)->lpVtbl->EndScene(p,a)
+#define ID3DXRenderToSurface_OnLostDevice(p)       (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXRenderToSurface_OnResetDevice(p)      (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXRenderToSurface_AddRef(p)             (p)->AddRef()
+#define ID3DXRenderToSurface_Release(p)            (p)->Release()
+/*** ID3DXRenderToSurface methods ***/
+#define ID3DXRenderToSurface_GetDevice(p,a)        (p)->GetDevice(a)
+#define ID3DXRenderToSurface_GetDesc(p,a)          (p)->GetDesc(a)
+#define ID3DXRenderToSurface_BeginScene(p,a,b)     (p)->BeginScene(a,b)
+#define ID3DXRenderToSurface_EndScene(p,a)         (p)->EndScene(a)
+#define ID3DXRenderToSurface_OnLostDevice(p)       (p)->OnLostDevice()
+#define ID3DXRenderToSurface_OnResetDevice(p)      (p)->OnResetDevice()
+#endif
+
+#define INTERFACE ID3DXSprite
+DECLARE_INTERFACE_(ID3DXSprite, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **object) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXSprite methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+
+    STDMETHOD(GetTransform)(THIS_ D3DXMATRIX *transform) PURE;
+    STDMETHOD(SetTransform)(THIS_ const D3DXMATRIX *transform) PURE;
+    STDMETHOD(SetWorldViewRH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE;
+    STDMETHOD(SetWorldViewLH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE;
+
+    STDMETHOD(Begin)(THIS_ DWORD flags) PURE;
+    STDMETHOD(Draw)(THIS_ struct IDirect3DTexture9 *texture, const RECT *rect,
+            const D3DXVECTOR3 *center, const D3DXVECTOR3 *position, D3DCOLOR color) PURE;
+    STDMETHOD(Flush)(THIS) PURE;
+    STDMETHOD(End)(THIS) PURE;
+
+    STDMETHOD(OnLostDevice)(THIS) PURE;
+    STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXSprite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXSprite_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define ID3DXSprite_Release(p)            (p)->lpVtbl->Release(p)
+/*** ID3DXSprite methods ***/
+#define ID3DXSprite_GetDevice(p,a)        (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXSprite_GetTransform(p,a)     (p)->lpVtbl->GetTransform(p,a)
+#define ID3DXSprite_SetTransform(p,a)     (p)->lpVtbl->SetTransform(p,a)
+#define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->lpVtbl->SetWorldViewRH(p,a,b)
+#define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->lpVtbl->SetWorldViewLH(p,a,b)
+#define ID3DXSprite_Begin(p,a)            (p)->lpVtbl->Begin(p,a)
+#define ID3DXSprite_Draw(p,a,b,c,d,e)     (p)->lpVtbl->Draw(p,a,b,c,d,e)
+#define ID3DXSprite_Flush(p)              (p)->lpVtbl->Flush(p)
+#define ID3DXSprite_End(p)                (p)->lpVtbl->End(p)
+#define ID3DXSprite_OnLostDevice(p)       (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXSprite_OnResetDevice(p)      (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXSprite_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)
+#define ID3DXSprite_AddRef(p)                (p)->AddRef()
+#define ID3DXSprite_Release(p)               (p)->Release()
+/*** ID3DXSprite methods ***/
+#define ID3DXSprite_GetDevice(p,a)        (p)->GetDevice(a)
+#define ID3DXSprite_GetTransform(p,a)     (p)->GetTransform(a)
+#define ID3DXSprite_SetTransform(p,a)     (p)->SetTransform(a)
+#define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->SetWorldViewRH(a,b)
+#define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->SetWorldViewLH(a,b)
+#define ID3DXSprite_Begin(p,a)            (p)->Begin(a)
+#define ID3DXSprite_Draw(p,a,b,c,d,e)     (p)->Draw(a,b,c,d,e)
+#define ID3DXSprite_Flush(p)              (p)->Flush()
+#define ID3DXSprite_End(p)                (p)->End()
+#define ID3DXSprite_OnLostDevice(p)       (p)->OnLostDevice()
+#define ID3DXSprite_OnResetDevice(p)      (p)->OnResetDevice()
+#endif
+
+/**********************************************
+ ****************** functions *****************
+ **********************************************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI D3DXCheckVersion(UINT d3dsdkvers, UINT d3dxsdkvers);
+HRESULT WINAPI D3DXCreateFontA(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight,
+        UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily,
+        const char *facename, struct ID3DXFont **font);
+HRESULT WINAPI D3DXCreateFontW(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight,
+        UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily,
+        const WCHAR *facename, struct ID3DXFont **font);
+#define D3DXCreateFont WINELIB_NAME_AW(D3DXCreateFont)
+HRESULT WINAPI D3DXCreateFontIndirectA(struct IDirect3DDevice9 *device,
+        const D3DXFONT_DESCA *desc, struct ID3DXFont **font);
+HRESULT WINAPI D3DXCreateFontIndirectW(struct IDirect3DDevice9 *device,
+        const D3DXFONT_DESCW *desc, struct ID3DXFont **font);
+#define D3DXCreateFontIndirect WINELIB_NAME_AW(D3DXCreateFontIndirect)
+HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line);
+HRESULT WINAPI D3DXCreateRenderToEnvMap(struct IDirect3DDevice9 *device, UINT size, UINT miplevels,
+        D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToEnvMap **rtem);
+HRESULT WINAPI D3DXCreateRenderToSurface(struct IDirect3DDevice9 *device, UINT width, UINT height,
+        D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToSurface **rts);
+HRESULT WINAPI D3DXCreateSprite(struct IDirect3DDevice9 *device, struct ID3DXSprite **sprite);
+BOOL WINAPI D3DXDebugMute(BOOL mute);
+UINT WINAPI D3DXGetDriverLevel(struct IDirect3DDevice9 *device);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9CORE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h
new file mode 100644
index 0000000..a0415e0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h
@@ -0,0 +1,441 @@
+/*
+ * Copyright 2010 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __D3DX9EFFECT_H__
+#define __D3DX9EFFECT_H__
+
+#define D3DXFX_DONOTSAVESTATE (1 << 0)
+#define D3DXFX_DONOTSAVESHADERSTATE (1 << 1)
+#define D3DXFX_DONOTSAVESAMPLERSTATE (1 << 2)
+#define D3DXFX_NOT_CLONEABLE (1 << 11)
+#define D3DXFX_LARGEADDRESSAWARE (1 << 17)
+
+#define D3DX_PARAMETER_SHARED       1
+#define D3DX_PARAMETER_LITERAL      2
+#define D3DX_PARAMETER_ANNOTATION   4
+
+typedef struct _D3DXEFFECT_DESC
+{
+    const char *Creator;
+    UINT Parameters;
+    UINT Techniques;
+    UINT Functions;
+} D3DXEFFECT_DESC;
+
+typedef struct _D3DXPARAMETER_DESC
+{
+    const char *Name;
+    const char *Semantic;
+    D3DXPARAMETER_CLASS Class;
+    D3DXPARAMETER_TYPE Type;
+    UINT Rows;
+    UINT Columns;
+    UINT Elements;
+    UINT Annotations;
+    UINT StructMembers;
+    DWORD Flags;
+    UINT Bytes;
+} D3DXPARAMETER_DESC;
+
+typedef struct _D3DXTECHNIQUE_DESC
+{
+    const char *Name;
+    UINT Passes;
+    UINT Annotations;
+} D3DXTECHNIQUE_DESC;
+
+typedef struct _D3DXPASS_DESC
+{
+    const char *Name;
+    UINT Annotations;
+    const DWORD *pVertexShaderFunction;
+    const DWORD *pPixelShaderFunction;
+} D3DXPASS_DESC;
+
+typedef struct _D3DXFUNCTION_DESC
+{
+    const char *Name;
+    UINT Annotations;
+} D3DXFUNCTION_DESC;
+
+typedef struct ID3DXEffectPool *LPD3DXEFFECTPOOL;
+
+DEFINE_GUID(IID_ID3DXEffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);
+
+#undef INTERFACE
+#define INTERFACE ID3DXEffectPool
+
+DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXBaseEffect *LPD3DXBASEEFFECT;
+
+DEFINE_GUID(IID_ID3DXBaseEffect, 0x17c18ac, 0x103f, 0x4417, 0x8c, 0x51, 0x6b, 0xf6, 0xef, 0x1e, 0x56, 0xbe);
+
+#define INTERFACE ID3DXBaseEffect
+
+DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBaseEffect methods ***/
+    STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;
+    STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;
+    STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;
+    STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;
+    STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);
+    STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);
+    STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;
+    STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;
+    STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;
+    STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;
+    STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;
+    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;
+    STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;
+    STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;
+    STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;
+    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;
+    STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;
+    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;
+    STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;
+    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;
+    STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;
+    STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;
+    STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;
+    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;
+    STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;
+    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+    STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;
+    STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;
+    STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;
+    STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;
+    STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER;
+
+DEFINE_GUID(IID_ID3DXEffectStateManager, 0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce);
+
+#define INTERFACE ID3DXEffectStateManager
+
+DECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXEffectStateManager methods ***/
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD index, BOOL enable) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD value) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD stage, struct IDirect3DBaseTexture9 *texture) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE type, DWORD value) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD sampler, D3DSAMPLERSTATETYPE type, DWORD value) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ FLOAT num_segments) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD format) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ struct IDirect3DVertexShader9 *shader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ struct IDirect3DPixelShader9 *shader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXEffect *LPD3DXEFFECT;
+
+DEFINE_GUID(IID_ID3DXEffect, 0xf6ceb4b3, 0x4e4c, 0x40dd, 0xb8, 0x83, 0x8d, 0x8d, 0xe5, 0xea, 0xc, 0xd5);
+
+#define INTERFACE ID3DXEffect
+
+DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBaseEffect methods ***/
+    STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;
+    STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;
+    STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;
+    STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;
+    STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);
+    STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);
+    STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;
+    STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;
+    STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;
+    STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;
+    STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;
+    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;
+    STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;
+    STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;
+    STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;
+    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;
+    STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;
+    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;
+    STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;
+    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;
+    STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;
+    STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;
+    STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;
+    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;
+    STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;
+    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+    STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;
+    STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;
+    STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;
+    STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;
+    STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;
+    /*** ID3DXEffect methods ***/
+    STDMETHOD(GetPool)(THIS_ ID3DXEffectPool **pool) PURE;
+    STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE technique) PURE;
+    STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE;
+    STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE technique) PURE;
+    STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE technique, D3DXHANDLE* next_technique) PURE;
+    STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE parameter, D3DXHANDLE technique) PURE;
+    STDMETHOD(Begin)(THIS_ UINT *passes, DWORD flags) PURE;
+    STDMETHOD(BeginPass)(THIS_ UINT pass) PURE;
+    STDMETHOD(CommitChanges)(THIS) PURE;
+    STDMETHOD(EndPass)(THIS) PURE;
+    STDMETHOD(End)(THIS) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(OnLostDevice)(THIS) PURE;
+    STDMETHOD(OnResetDevice)(THIS) PURE;
+    STDMETHOD(SetStateManager)(THIS_ ID3DXEffectStateManager *manager) PURE;
+    STDMETHOD(GetStateManager)(THIS_ ID3DXEffectStateManager **manager) PURE;
+    STDMETHOD(BeginParameterBlock)(THIS) PURE;
+    STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE;
+    STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE;
+    STDMETHOD(DeleteParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE;
+    STDMETHOD(CloneEffect)(THIS_ struct IDirect3DDevice9 *device, struct ID3DXEffect **effect) PURE;
+    STDMETHOD(SetRawValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT byte_offset, UINT bytes) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER;
+
+DEFINE_GUID(IID_ID3DXEffectCompiler, 0x51b8a949, 0x1a31, 0x47e6, 0xbe, 0xa0, 0x4b, 0x30, 0xdb, 0x53, 0xf1, 0xe0);
+
+#define INTERFACE ID3DXEffectCompiler
+
+DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBaseEffect methods ***/
+    STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;
+    STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;
+    STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;
+    STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;
+    STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;
+    STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);
+    STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);
+    STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;
+    STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;
+    STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;
+    STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;
+    STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;
+    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;
+    STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;
+    STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;
+    STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;
+    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;
+    STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;
+    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;
+    STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;
+    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;
+    STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;
+    STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;
+    STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;
+    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;
+    STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;
+    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+    STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+    STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+    STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;
+    STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;
+    STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;
+    STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;
+    STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;
+    /*** ID3DXEffectCompiler methods ***/
+    STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE parameter, BOOL literal) PURE;
+    STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE parameter, BOOL* literal) PURE;
+    STDMETHOD(CompileEffect)(THIS_ DWORD flags, ID3DXBuffer **effect, ID3DXBuffer **error_msgs) PURE;
+    STDMETHOD(CompileShader)(THIS_ D3DXHANDLE function, const char *target, DWORD flags,
+            ID3DXBuffer **shader, ID3DXBuffer **error_msgs, ID3DXConstantTable **constant_table) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateEffectPool(ID3DXEffectPool **pool);
+HRESULT WINAPI D3DXCreateEffect(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen,
+        const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen,
+        const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectCompiler(const char *srcdata, UINT srcdatalen, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **compiler, ID3DXBuffer **parse_errors);
+HRESULT WINAPI D3DXCreateEffectFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+        const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+        const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromFileEx WINELIB_NAME_AW(D3DXCreateEffectFromFileEx)
+
+HRESULT WINAPI D3DXCreateEffectFromFileA(struct IDirect3DDevice9 *device, const char *srcfile,
+        const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+        const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromFile WINELIB_NAME_AW(D3DXCreateEffectFromFile)
+
+HRESULT WINAPI D3DXCreateEffectFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include,
+        const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool,
+        struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include,
+        const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool,
+        struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromResourceEx WINELIB_NAME_AW(D3DXCreateEffectFromResourceEx)
+
+HRESULT WINAPI D3DXCreateEffectFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromResource WINELIB_NAME_AW(D3DXCreateEffectFromResource)
+
+HRESULT WINAPI D3DXCreateEffectCompilerFromFileA(const char *srcfile, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+HRESULT WINAPI D3DXCreateEffectCompilerFromFileW(const WCHAR *srcfile, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+#define D3DXCreateEffectCompilerFromFile WINELIB_NAME_AW(D3DXCreateEffectCompilerFromFile)
+
+HRESULT WINAPI D3DXCreateEffectCompilerFromResourceA(HMODULE srcmodule, const char *srcresource,
+        const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags,
+        ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+HRESULT WINAPI D3DXCreateEffectCompilerFromResourceW(HMODULE srcmodule, const WCHAR *srcresource,
+        const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags,
+        ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+#define D3DXCreateEffectCompilerFromResource WINELIB_NAME_AW(D3DXCreateEffectCompilerFromResource)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DX9EFFECT_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h
new file mode 100644
index 0000000..6f83be8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h
@@ -0,0 +1,483 @@
+/*
+ * Copyright (C) 2007 David Adam
+ * Copyright (C) 2007 Tony Wasserka
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __D3DX9MATH_H__
+#define __D3DX9MATH_H__
+
+#include <math.h>
+
+#define D3DX_PI    ((FLOAT)3.141592654)
+#define D3DX_1BYPI ((FLOAT)0.318309886)
+
+#define D3DXSH_MINORDER 2
+#define D3DXSH_MAXORDER 6
+
+#define D3DXToRadian(degree) ((degree) * (D3DX_PI / 180.0f))
+#define D3DXToDegree(radian) ((radian) * (180.0f / D3DX_PI))
+
+typedef struct D3DXVECTOR2
+{
+#ifdef __cplusplus
+    D3DXVECTOR2();
+    D3DXVECTOR2(const FLOAT *pf);
+    D3DXVECTOR2(FLOAT fx, FLOAT fy);
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    D3DXVECTOR2& operator += (const D3DXVECTOR2&);
+    D3DXVECTOR2& operator -= (const D3DXVECTOR2&);
+    D3DXVECTOR2& operator *= (FLOAT);
+    D3DXVECTOR2& operator /= (FLOAT);
+
+    D3DXVECTOR2 operator + () const;
+    D3DXVECTOR2 operator - () const;
+
+    D3DXVECTOR2 operator + (const D3DXVECTOR2&) const;
+    D3DXVECTOR2 operator - (const D3DXVECTOR2&) const;
+    D3DXVECTOR2 operator * (FLOAT) const;
+    D3DXVECTOR2 operator / (FLOAT) const;
+
+    friend D3DXVECTOR2 operator * (FLOAT, const D3DXVECTOR2&);
+
+    BOOL operator == (const D3DXVECTOR2&) const;
+    BOOL operator != (const D3DXVECTOR2&) const;
+#endif /* __cplusplus */
+    FLOAT x, y;
+} D3DXVECTOR2, *LPD3DXVECTOR2;
+
+#ifdef __cplusplus
+typedef struct D3DXVECTOR3 : public D3DVECTOR
+{
+    D3DXVECTOR3();
+    D3DXVECTOR3(const FLOAT *pf);
+    D3DXVECTOR3(const D3DVECTOR& v);
+    D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz);
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    D3DXVECTOR3& operator += (const D3DXVECTOR3&);
+    D3DXVECTOR3& operator -= (const D3DXVECTOR3&);
+    D3DXVECTOR3& operator *= (FLOAT);
+    D3DXVECTOR3& operator /= (FLOAT);
+
+    D3DXVECTOR3 operator + () const;
+    D3DXVECTOR3 operator - () const;
+
+    D3DXVECTOR3 operator + (const D3DXVECTOR3&) const;
+    D3DXVECTOR3 operator - (const D3DXVECTOR3&) const;
+    D3DXVECTOR3 operator * (FLOAT) const;
+    D3DXVECTOR3 operator / (FLOAT) const;
+
+    friend D3DXVECTOR3 operator * (FLOAT, const struct D3DXVECTOR3&);
+
+    BOOL operator == (const D3DXVECTOR3&) const;
+    BOOL operator != (const D3DXVECTOR3&) const;
+} D3DXVECTOR3, *LPD3DXVECTOR3;
+#else /* !__cplusplus */
+typedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3;
+#endif /* !__cplusplus */
+
+typedef struct D3DXVECTOR4
+{
+#ifdef __cplusplus
+    D3DXVECTOR4();
+    D3DXVECTOR4(const FLOAT *pf);
+    D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    D3DXVECTOR4& operator += (const D3DXVECTOR4&);
+    D3DXVECTOR4& operator -= (const D3DXVECTOR4&);
+    D3DXVECTOR4& operator *= (FLOAT);
+    D3DXVECTOR4& operator /= (FLOAT);
+
+    D3DXVECTOR4 operator + () const;
+    D3DXVECTOR4 operator - () const;
+
+    D3DXVECTOR4 operator + (const D3DXVECTOR4&) const;
+    D3DXVECTOR4 operator - (const D3DXVECTOR4&) const;
+    D3DXVECTOR4 operator * (FLOAT) const;
+    D3DXVECTOR4 operator / (FLOAT) const;
+
+    friend D3DXVECTOR4 operator * (FLOAT, const D3DXVECTOR4&);
+
+    BOOL operator == (const D3DXVECTOR4&) const;
+    BOOL operator != (const D3DXVECTOR4&) const;
+#endif /* __cplusplus */
+    FLOAT x, y, z, w;
+} D3DXVECTOR4, *LPD3DXVECTOR4;
+
+#ifdef __cplusplus
+typedef struct D3DXMATRIX : public D3DMATRIX
+{
+    D3DXMATRIX();
+    D3DXMATRIX(const FLOAT *pf);
+    D3DXMATRIX(const D3DMATRIX& mat);
+    D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
+               FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
+               FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
+               FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44);
+
+    FLOAT& operator () (UINT row, UINT col);
+    FLOAT operator () (UINT row, UINT col) const;
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    D3DXMATRIX& operator *= (const D3DXMATRIX&);
+    D3DXMATRIX& operator += (const D3DXMATRIX&);
+    D3DXMATRIX& operator -= (const D3DXMATRIX&);
+    D3DXMATRIX& operator *= (FLOAT);
+    D3DXMATRIX& operator /= (FLOAT);
+
+    D3DXMATRIX operator + () const;
+    D3DXMATRIX operator - () const;
+
+    D3DXMATRIX operator * (const D3DXMATRIX&) const;
+    D3DXMATRIX operator + (const D3DXMATRIX&) const;
+    D3DXMATRIX operator - (const D3DXMATRIX&) const;
+    D3DXMATRIX operator * (FLOAT) const;
+    D3DXMATRIX operator / (FLOAT) const;
+
+    friend D3DXMATRIX operator * (FLOAT, const D3DXMATRIX&);
+
+    BOOL operator == (const D3DXMATRIX&) const;
+    BOOL operator != (const D3DXMATRIX&) const;
+} D3DXMATRIX, *LPD3DXMATRIX;
+#else /* !__cplusplus */
+typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;
+#endif /* !__cplusplus */
+
+typedef struct D3DXQUATERNION
+{
+#ifdef __cplusplus
+    D3DXQUATERNION();
+    D3DXQUATERNION(const FLOAT *pf);
+    D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    D3DXQUATERNION& operator += (const D3DXQUATERNION&);
+    D3DXQUATERNION& operator -= (const D3DXQUATERNION&);
+    D3DXQUATERNION& operator *= (const D3DXQUATERNION&);
+    D3DXQUATERNION& operator *= (FLOAT);
+    D3DXQUATERNION& operator /= (FLOAT);
+
+    D3DXQUATERNION  operator + () const;
+    D3DXQUATERNION  operator - () const;
+
+    D3DXQUATERNION operator + (const D3DXQUATERNION&) const;
+    D3DXQUATERNION operator - (const D3DXQUATERNION&) const;
+    D3DXQUATERNION operator * (const D3DXQUATERNION&) const;
+    D3DXQUATERNION operator * (FLOAT) const;
+    D3DXQUATERNION operator / (FLOAT) const;
+
+    friend D3DXQUATERNION operator * (FLOAT, const D3DXQUATERNION&);
+
+    BOOL operator == (const D3DXQUATERNION&) const;
+    BOOL operator != (const D3DXQUATERNION&) const;
+#endif /* __cplusplus */
+    FLOAT x, y, z, w;
+} D3DXQUATERNION, *LPD3DXQUATERNION;
+
+typedef struct D3DXPLANE
+{
+#ifdef __cplusplus
+    D3DXPLANE();
+    D3DXPLANE(const FLOAT *pf);
+    D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd);
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    D3DXPLANE operator + () const;
+    D3DXPLANE operator - () const;
+
+    BOOL operator == (const D3DXPLANE&) const;
+    BOOL operator != (const D3DXPLANE&) const;
+#endif /* __cplusplus */
+    FLOAT a, b, c, d;
+} D3DXPLANE, *LPD3DXPLANE;
+
+typedef struct D3DXCOLOR
+{
+#ifdef __cplusplus
+    D3DXCOLOR();
+    D3DXCOLOR(DWORD col);
+    D3DXCOLOR(const FLOAT *pf);
+    D3DXCOLOR(const D3DCOLORVALUE& col);
+    D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa);
+
+    operator DWORD () const;
+
+    operator FLOAT* ();
+    operator const FLOAT* () const;
+
+    operator D3DCOLORVALUE* ();
+    operator const D3DCOLORVALUE* () const;
+
+    operator D3DCOLORVALUE& ();
+    operator const D3DCOLORVALUE& () const;
+
+    D3DXCOLOR& operator += (const D3DXCOLOR&);
+    D3DXCOLOR& operator -= (const D3DXCOLOR&);
+    D3DXCOLOR& operator *= (FLOAT);
+    D3DXCOLOR& operator /= (FLOAT);
+
+    D3DXCOLOR operator + () const;
+    D3DXCOLOR operator - () const;
+
+    D3DXCOLOR operator + (const D3DXCOLOR&) const;
+    D3DXCOLOR operator - (const D3DXCOLOR&) const;
+    D3DXCOLOR operator * (FLOAT) const;
+    D3DXCOLOR operator / (FLOAT) const;
+
+    friend D3DXCOLOR operator * (FLOAT, const D3DXCOLOR&);
+
+    BOOL operator == (const D3DXCOLOR&) const;
+    BOOL operator != (const D3DXCOLOR&) const;
+#endif /* __cplusplus */
+    FLOAT r, g, b, a;
+} D3DXCOLOR, *LPD3DXCOLOR;
+
+typedef struct D3DXFLOAT16
+{
+#ifdef __cplusplus
+    D3DXFLOAT16();
+    D3DXFLOAT16(FLOAT f);
+    D3DXFLOAT16(const D3DXFLOAT16 &f);
+
+    operator FLOAT ();
+
+    BOOL operator == (const D3DXFLOAT16 &) const;
+    BOOL operator != (const D3DXFLOAT16 &) const;
+#endif /* __cplusplus */
+    WORD value;
+} D3DXFLOAT16, *LPD3DXFLOAT16;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+D3DXCOLOR* WINAPI D3DXColorAdjustContrast(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s);
+D3DXCOLOR* WINAPI D3DXColorAdjustSaturation(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s);
+
+FLOAT WINAPI D3DXFresnelTerm(FLOAT costheta, FLOAT refractionindex);
+
+D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR3 *rotationcenter, const D3DXQUATERNION *rotation,
+    const D3DXVECTOR3 *translation);
+D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR2 *protationcenter, FLOAT rotation,
+    const D3DXVECTOR2 *ptranslation);
+HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutrotation, D3DXVECTOR3 *pouttranslation, const D3DXMATRIX *pm);
+FLOAT WINAPI D3DXMatrixDeterminant(const D3DXMATRIX *pm);
+D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm);
+D3DXMATRIX* WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup);
+D3DXMATRIX* WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup);
+D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2);
+D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, const D3DXPLANE *pplane);
+D3DXMATRIX* WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *pout, const D3DXVECTOR3 *pv, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, const D3DXQUATERNION *pq);
+D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
+D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT sz);
+D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, const D3DXVECTOR4 *plight, const D3DXPLANE *pPlane);
+D3DXMATRIX* WINAPI D3DXMatrixTransformation(D3DXMATRIX *pout, const D3DXVECTOR3 *pscalingcenter, const D3DXQUATERNION *pscalingrotation, const D3DXVECTOR3 *pscaling, const D3DXVECTOR3 *protationcenter,
+    const D3DXQUATERNION *protation, const D3DXVECTOR3 *ptranslation);
+D3DXMATRIX* WINAPI D3DXMatrixTransformation2D(D3DXMATRIX *pout, const D3DXVECTOR2 *pscalingcenter, FLOAT scalingrotation, const D3DXVECTOR2 *pscaling,
+    const D3DXVECTOR2 *protationcenter, FLOAT rotation, const D3DXVECTOR2 *ptranslation);
+D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLOAT z);
+D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm);
+
+D3DXPLANE* WINAPI D3DXPlaneFromPointNormal(D3DXPLANE *pout, const D3DXVECTOR3 *pvpoint, const D3DXVECTOR3 *pvnormal);
+D3DXPLANE* WINAPI D3DXPlaneFromPoints(D3DXPLANE *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3);
+D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine(D3DXVECTOR3 *pout, const D3DXPLANE *pp, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2);
+D3DXPLANE* WINAPI D3DXPlaneNormalize(D3DXPLANE *pout, const D3DXPLANE *pp);
+D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, const D3DXPLANE *pplane, const D3DXMATRIX *pm);
+D3DXPLANE* WINAPI D3DXPlaneTransformArray(D3DXPLANE *pout, UINT outstride, const D3DXPLANE *pplane, UINT pstride, const D3DXMATRIX *pm, UINT n);
+
+D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3, FLOAT f, FLOAT g);
+D3DXQUATERNION* WINAPI D3DXQuaternionExp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionInverse(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionLn(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionMultiply(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2);
+D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pout, const D3DXVECTOR3 *pv, FLOAT angle);
+D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, const D3DXMATRIX *pm);
+D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
+D3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, FLOAT t);
+D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3,
+    const D3DXQUATERNION *pq4, FLOAT t);
+void WINAPI D3DXQuaternionSquadSetup(D3DXQUATERNION *paout, D3DXQUATERNION *pbout, D3DXQUATERNION *pcout, const D3DXQUATERNION *pq0,
+    const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3);
+void WINAPI D3DXQuaternionToAxisAngle(const D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle);
+
+D3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT f, FLOAT g);
+D3DXVECTOR2* WINAPI D3DXVec2CatmullRom(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv0, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT s);
+D3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pt1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pt2, FLOAT s);
+D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv);
+D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+
+D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT f, FLOAT g);
+D3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv0, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT s);
+D3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pt1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pt2, FLOAT s);
+D3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv);
+D3DXVECTOR3* WINAPI D3DXVec3Project(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection,
+    const D3DXMATRIX *pview, const D3DXMATRIX *pworld);
+D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport,
+    const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n);
+D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR4* WINAPI D3DXVec3TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection,
+    const D3DXMATRIX *pview, const D3DXMATRIX *pworld);
+D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport,
+    const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n);
+D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT f, FLOAT g);
+D3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv0, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT s);
+D3DXVECTOR4* WINAPI D3DXVec4Cross(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3);
+D3DXVECTOR4* WINAPI D3DXVec4Hermite(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pt1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pt2, FLOAT s);
+D3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv);
+D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR4* WINAPI D3DXVec4TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR4 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+
+D3DXFLOAT16 *WINAPI D3DXFloat32To16Array(D3DXFLOAT16 *pout, const FLOAT *pin, UINT n);
+FLOAT *WINAPI D3DXFloat16To32Array(FLOAT *pout, const D3DXFLOAT16 *pin, UINT n);
+
+FLOAT* WINAPI D3DXSHAdd(FLOAT *out, UINT order, const FLOAT *a, const FLOAT *b);
+FLOAT WINAPI D3DXSHDot(UINT order, const FLOAT *a, const FLOAT *b);
+HRESULT WINAPI D3DXSHEvalConeLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+FLOAT* WINAPI D3DXSHEvalDirection(FLOAT *out, UINT order, const D3DXVECTOR3 *dir);
+HRESULT WINAPI D3DXSHEvalDirectionalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+HRESULT WINAPI D3DXSHEvalHemisphereLight(UINT order, const D3DXVECTOR3 *dir, D3DXCOLOR top, D3DXCOLOR bottom, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+HRESULT WINAPI D3DXSHEvalSphericalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+FLOAT* WINAPI D3DXSHMultiply2(FLOAT *out, const FLOAT *a, const FLOAT *b);
+FLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, const FLOAT *a, const FLOAT *b);
+FLOAT* WINAPI D3DXSHMultiply4(FLOAT *out, const FLOAT *a, const FLOAT *b);
+FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, const FLOAT *in);
+FLOAT* WINAPI D3DXSHRotateZ(FLOAT *out, UINT order, FLOAT angle, const FLOAT *in);
+FLOAT* WINAPI D3DXSHScale(FLOAT *out, UINT order, const FLOAT *a, const FLOAT scale);
+
+#ifdef __cplusplus
+}
+#endif
+
+typedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK;
+
+DEFINE_GUID(IID_ID3DXMatrixStack,
+0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85);
+
+#undef INTERFACE
+#define INTERFACE ID3DXMatrixStack
+
+DECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown)
+{
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    STDMETHOD(Pop)(THIS) PURE;
+    STDMETHOD(Push)(THIS) PURE;
+    STDMETHOD(LoadIdentity)(THIS) PURE;
+    STDMETHOD(LoadMatrix)(THIS_ const D3DXMATRIX* pM ) PURE;
+    STDMETHOD(MultMatrix)(THIS_ const D3DXMATRIX* pM ) PURE;
+    STDMETHOD(MultMatrixLocal)(THIS_ const D3DXMATRIX* pM ) PURE;
+    STDMETHOD(RotateAxis)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE;
+    STDMETHOD(RotateAxisLocal)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE;
+    STDMETHOD(RotateYawPitchRoll)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
+    STDMETHOD(RotateYawPitchRollLocal)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
+    STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
+    STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
+    STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE;
+    STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
+    STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE;
+};
+
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+
+#define ID3DXMatrixStack_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXMatrixStack_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define ID3DXMatrixStack_Release(p)                       (p)->lpVtbl->Release(p)
+#define ID3DXMatrixStack_Pop(p)                           (p)->lpVtbl->Pop(p)
+#define ID3DXMatrixStack_Push(p)                          (p)->lpVtbl->Push(p)
+#define ID3DXMatrixStack_LoadIdentity(p)                  (p)->lpVtbl->LoadIdentity(p)
+#define ID3DXMatrixStack_LoadMatrix(p,a)                  (p)->lpVtbl->LoadMatrix(p,a)
+#define ID3DXMatrixStack_MultMatrix(p,a)                  (p)->lpVtbl->MultMatrix(p,a)
+#define ID3DXMatrixStack_MultMatrixLocal(p,a)             (p)->lpVtbl->MultMatrixLocal(p,a)
+#define ID3DXMatrixStack_RotateAxis(p,a,b)                (p)->lpVtbl->RotateAxis(p,a,b)
+#define ID3DXMatrixStack_RotateAxisLocal(p,a,b)           (p)->lpVtbl->RotateAxisLocal(p,a,b)
+#define ID3DXMatrixStack_RotateYawPitchRoll(p,a,b,c)      (p)->lpVtbl->RotateYawPitchRoll(p,a,b,c)
+#define ID3DXMatrixStack_RotateYawPitchRollLocal(p,a,b,c) (p)->lpVtbl->RotateYawPitchRollLocal(p,a,b,c)
+#define ID3DXMatrixStack_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)
+#define ID3DXMatrixStack_ScaleLocal(p,a,b,c)              (p)->lpVtbl->ScaleLocal(p,a,b,c)
+#define ID3DXMatrixStack_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a,b,c)
+#define ID3DXMatrixStack_TranslateLocal(p,a,b,c)          (p)->lpVtbl->TranslateLocal(p,a,b,c)
+#define ID3DXMatrixStack_GetTop(p)                        (p)->lpVtbl->GetTop(p)
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateMatrixStack(DWORD flags, ID3DXMatrixStack **stack);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <d3dx9math.inl>
+
+#endif /* __D3DX9MATH_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
new file mode 100644
index 0000000..ee2f82b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
@@ -0,0 +1,1298 @@
+/*
+ * Copyright (C) 2007 David Adam
+ * Copyright (C) 2007 Tony Wasserka
+ *
+ * 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
+ */
+
+#ifndef __D3DX9MATH_INL__
+#define __D3DX9MATH_INL__
+
+/* constructors & operators */
+#ifdef __cplusplus
+
+inline D3DXVECTOR2::D3DXVECTOR2()
+{
+}
+
+inline D3DXVECTOR2::D3DXVECTOR2(const FLOAT *pf)
+{
+    if(!pf) return;
+    x = pf[0];
+    y = pf[1];
+}
+
+inline D3DXVECTOR2::D3DXVECTOR2(FLOAT fx, FLOAT fy)
+{
+    x = fx;
+    y = fy;
+}
+
+inline D3DXVECTOR2::operator FLOAT* ()
+{
+    return (FLOAT*)&x;
+}
+
+inline D3DXVECTOR2::operator const FLOAT* () const
+{
+    return (const FLOAT*)&x;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator += (const D3DXVECTOR2& v)
+{
+    x += v.x;
+    y += v.y;
+    return *this;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator -= (const D3DXVECTOR2& v)
+{
+    x -= v.x;
+    y -= v.y;
+    return *this;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator *= (FLOAT f)
+{
+    x *= f;
+    y *= f;
+    return *this;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator /= (FLOAT f)
+{
+    x /= f;
+    y /= f;
+    return *this;
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator + () const
+{
+    return *this;
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator - () const
+{
+    return D3DXVECTOR2(-x, -y);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator + (const D3DXVECTOR2& v) const
+{
+    return D3DXVECTOR2(x + v.x, y + v.y);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator - (const D3DXVECTOR2& v) const
+{
+    return D3DXVECTOR2(x - v.x, y - v.y);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator * (FLOAT f) const
+{
+    return D3DXVECTOR2(x * f, y * f);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator / (FLOAT f) const
+{
+    return D3DXVECTOR2(x / f, y / f);
+}
+
+inline D3DXVECTOR2 operator * (FLOAT f, const D3DXVECTOR2& v)
+{
+    return D3DXVECTOR2(f * v.x, f * v.y);
+}
+
+inline BOOL D3DXVECTOR2::operator == (const D3DXVECTOR2& v) const
+{
+    return x == v.x && y == v.y;
+}
+
+inline BOOL D3DXVECTOR2::operator != (const D3DXVECTOR2& v) const
+{
+    return x != v.x || y != v.y;
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3()
+{
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3(const FLOAT *pf)
+{
+    if(!pf) return;
+    x = pf[0];
+    y = pf[1];
+    z = pf[2];
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3(const D3DVECTOR& v)
+{
+    x = v.x;
+    y = v.y;
+    z = v.z;
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz)
+{
+    x = fx;
+    y = fy;
+    z = fz;
+}
+
+inline D3DXVECTOR3::operator FLOAT* ()
+{
+    return (FLOAT*)&x;
+}
+
+inline D3DXVECTOR3::operator const FLOAT* () const
+{
+    return (const FLOAT*)&x;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator += (const D3DXVECTOR3& v)
+{
+    x += v.x;
+    y += v.y;
+    z += v.z;
+    return *this;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator -= (const D3DXVECTOR3& v)
+{
+    x -= v.x;
+    y -= v.y;
+    z -= v.z;
+    return *this;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator *= (FLOAT f)
+{
+    x *= f;
+    y *= f;
+    z *= f;
+    return *this;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator /= (FLOAT f)
+{
+    x /= f;
+    y /= f;
+    z /= f;
+    return *this;
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator + () const
+{
+    return *this;
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator - () const
+{
+    return D3DXVECTOR3(-x, -y, -z);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator + (const D3DXVECTOR3& v) const
+{
+    return D3DXVECTOR3(x + v.x, y + v.y, z + v.z);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator - (const D3DXVECTOR3& v) const
+{
+    return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator * (FLOAT f) const
+{
+    return D3DXVECTOR3(x * f, y * f, z * f);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator / (FLOAT f) const
+{
+    return D3DXVECTOR3(x / f, y / f, z / f);
+}
+
+inline D3DXVECTOR3 operator * (FLOAT f, const D3DXVECTOR3& v)
+{
+    return D3DXVECTOR3(f * v.x, f * v.y, f * v.z);
+}
+
+inline BOOL D3DXVECTOR3::operator == (const D3DXVECTOR3& v) const
+{
+    return x == v.x && y == v.y && z == v.z;
+}
+
+inline BOOL D3DXVECTOR3::operator != (const D3DXVECTOR3& v) const
+{
+    return x != v.x || y != v.y || z != v.z;
+}
+
+inline D3DXVECTOR4::D3DXVECTOR4()
+{
+}
+
+inline D3DXVECTOR4::D3DXVECTOR4(const FLOAT *pf)
+{
+    if(!pf) return;
+    x = pf[0];
+    y = pf[1];
+    z = pf[2];
+    w = pf[3];
+}
+
+inline D3DXVECTOR4::D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)
+{
+    x = fx;
+    y = fy;
+    z = fz;
+    w = fw;
+}
+
+inline D3DXVECTOR4::operator FLOAT* ()
+{
+    return (FLOAT*)&x;
+}
+
+inline D3DXVECTOR4::operator const FLOAT* () const
+{
+    return (const FLOAT*)&x;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator += (const D3DXVECTOR4& v)
+{
+    x += v.x;
+    y += v.y;
+    z += v.z;
+    w += v.w;
+    return *this;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator -= (const D3DXVECTOR4& v)
+{
+    x -= v.x;
+    y -= v.y;
+    z -= v.z;
+    w -= v.w;
+    return *this;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator *= (FLOAT f)
+{
+    x *= f;
+    y *= f;
+    z *= f;
+    w *= f;
+    return *this;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator /= (FLOAT f)
+{
+    x /= f;
+    y /= f;
+    z /= f;
+    w /= f;
+    return *this;
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator + () const
+{
+    return *this;
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator - () const
+{
+    return D3DXVECTOR4(-x, -y, -z, -w);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator + (const D3DXVECTOR4& v) const
+{
+    return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator - (const D3DXVECTOR4& v) const
+{
+    return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator * (FLOAT f) const
+{
+    return D3DXVECTOR4(x * f, y * f, z * f, w * f);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator / (FLOAT f) const
+{
+    return D3DXVECTOR4(x / f, y / f, z / f, w / f);
+}
+
+inline D3DXVECTOR4 operator * (FLOAT f, const D3DXVECTOR4& v)
+{
+    return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w);
+}
+
+inline BOOL D3DXVECTOR4::operator == (const D3DXVECTOR4& v) const
+{
+    return x == v.x && y == v.y && z == v.z && w == v.w;
+}
+
+inline BOOL D3DXVECTOR4::operator != (const D3DXVECTOR4& v) const
+{
+    return x != v.x || y != v.y || z != v.z || w != v.w;
+}
+
+inline D3DXMATRIX::D3DXMATRIX()
+{
+}
+
+inline D3DXMATRIX::D3DXMATRIX(const FLOAT *pf)
+{
+    if(!pf) return;
+    memcpy(&_11, pf, sizeof(D3DXMATRIX));
+}
+
+inline D3DXMATRIX::D3DXMATRIX(const D3DMATRIX& mat)
+{
+    memcpy(&_11, &mat, sizeof(D3DXMATRIX));
+}
+
+inline D3DXMATRIX::D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
+                              FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
+                              FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
+                              FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44)
+{
+    _11 = f11; _12 = f12; _13 = f13; _14 = f14;
+    _21 = f21; _22 = f22; _23 = f23; _24 = f24;
+    _31 = f31; _32 = f32; _33 = f33; _34 = f34;
+    _41 = f41; _42 = f42; _43 = f43; _44 = f44;
+}
+
+inline FLOAT& D3DXMATRIX::operator () (UINT row, UINT col)
+{
+    return m[row][col];
+}
+
+inline FLOAT D3DXMATRIX::operator () (UINT row, UINT col) const
+{
+    return m[row][col];
+}
+
+inline D3DXMATRIX::operator FLOAT* ()
+{
+    return (FLOAT*)&_11;
+}
+
+inline D3DXMATRIX::operator const FLOAT* () const
+{
+    return (const FLOAT*)&_11;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator *= (const D3DXMATRIX& mat)
+{
+    D3DXMatrixMultiply(this, this, &mat);
+    return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator += (const D3DXMATRIX& mat)
+{
+    _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;
+    _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;
+    _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;
+    _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;
+    return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator -= (const D3DXMATRIX& mat)
+{
+    _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;
+    _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;
+    _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;
+    _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;
+    return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator *= (FLOAT f)
+{
+    _11 *= f; _12 *= f; _13 *= f; _14 *= f;
+    _21 *= f; _22 *= f; _23 *= f; _24 *= f;
+    _31 *= f; _32 *= f; _33 *= f; _34 *= f;
+    _41 *= f; _42 *= f; _43 *= f; _44 *= f;
+    return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator /= (FLOAT f)
+{
+    FLOAT inv = 1.0f / f;
+    _11 *= inv; _12 *= inv; _13 *= inv; _14 *= inv;
+    _21 *= inv; _22 *= inv; _23 *= inv; _24 *= inv;
+    _31 *= inv; _32 *= inv; _33 *= inv; _34 *= inv;
+    _41 *= inv; _42 *= inv; _43 *= inv; _44 *= inv;
+    return *this;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator + () const
+{
+    return *this;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator - () const
+{
+    return D3DXMATRIX(-_11, -_12, -_13, -_14,
+                      -_21, -_22, -_23, -_24,
+                      -_31, -_32, -_33, -_34,
+                      -_41, -_42, -_43, -_44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator * (const D3DXMATRIX& mat) const
+{
+    D3DXMATRIX buf;
+    D3DXMatrixMultiply(&buf, this, &mat);
+    return buf;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator + (const D3DXMATRIX& mat) const
+{
+    return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14,
+                      _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24,
+                      _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34,
+                      _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator - (const D3DXMATRIX& mat) const
+{
+    return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14,
+                      _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24,
+                      _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34,
+                      _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator * (FLOAT f) const
+{
+    return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f,
+                      _21 * f, _22 * f, _23 * f, _24 * f,
+                      _31 * f, _32 * f, _33 * f, _34 * f,
+                      _41 * f, _42 * f, _43 * f, _44 * f);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator / (FLOAT f) const
+{
+    FLOAT inv = 1.0f / f;
+    return D3DXMATRIX(_11 * inv, _12 * inv, _13 * inv, _14 * inv,
+                      _21 * inv, _22 * inv, _23 * inv, _24 * inv,
+                      _31 * inv, _32 * inv, _33 * inv, _34 * inv,
+                      _41 * inv, _42 * inv, _43 * inv, _44 * inv);
+}
+
+inline D3DXMATRIX operator * (FLOAT f, const D3DXMATRIX& mat)
+{
+    return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,
+                      f * mat._21, f * mat._22, f * mat._23, f * mat._24,
+                      f * mat._31, f * mat._32, f * mat._33, f * mat._34,
+                      f * mat._41, f * mat._42, f * mat._43, f * mat._44);
+}
+
+inline BOOL D3DXMATRIX::operator == (const D3DXMATRIX& mat) const
+{
+    return (memcmp(this, &mat, sizeof(D3DXMATRIX)) == 0);
+}
+
+inline BOOL D3DXMATRIX::operator != (const D3DXMATRIX& mat) const
+{
+    return (memcmp(this, &mat, sizeof(D3DXMATRIX)) != 0);
+}
+
+inline D3DXQUATERNION::D3DXQUATERNION()
+{
+}
+
+inline D3DXQUATERNION::D3DXQUATERNION(const FLOAT *pf)
+{
+    if(!pf) return;
+    x = pf[0];
+    y = pf[1];
+    z = pf[2];
+    w = pf[3];
+}
+
+inline D3DXQUATERNION::D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)
+{
+    x = fx;
+    y = fy;
+    z = fz;
+    w = fw;
+}
+
+inline D3DXQUATERNION::operator FLOAT* ()
+{
+    return (FLOAT*)&x;
+}
+
+inline D3DXQUATERNION::operator const FLOAT* () const
+{
+    return (const FLOAT*)&x;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator += (const D3DXQUATERNION& quat)
+{
+    x += quat.x;
+    y += quat.y;
+    z += quat.z;
+    w += quat.w;
+    return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator -= (const D3DXQUATERNION& quat)
+{
+    x -= quat.x;
+    y -= quat.y;
+    z -= quat.z;
+    w -= quat.w;
+    return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator *= (const D3DXQUATERNION& quat)
+{
+    D3DXQuaternionMultiply(this, this, &quat);
+    return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)
+{
+    x *= f;
+    y *= f;
+    z *= f;
+    w *= f;
+    return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator /= (FLOAT f)
+{
+    FLOAT inv = 1.0f / f;
+    x *= inv;
+    y *= inv;
+    z *= inv;
+    w *= inv;
+    return *this;
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator + () const
+{
+    return *this;
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator - () const
+{
+    return D3DXQUATERNION(-x, -y, -z, -w);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator + (const D3DXQUATERNION& quat) const
+{
+    return D3DXQUATERNION(x + quat.x, y + quat.y, z + quat.z, w + quat.w);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator - (const D3DXQUATERNION& quat) const
+{
+    return D3DXQUATERNION(x - quat.x, y - quat.y, z - quat.z, w - quat.w);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator * (const D3DXQUATERNION& quat) const
+{
+    D3DXQUATERNION buf;
+    D3DXQuaternionMultiply(&buf, this, &quat);
+    return buf;
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator * (FLOAT f) const
+{
+    return D3DXQUATERNION(x * f, y * f, z * f, w * f);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator / (FLOAT f) const
+{
+    FLOAT inv = 1.0f / f;
+    return D3DXQUATERNION(x * inv, y * inv, z * inv, w * inv);
+}
+
+inline D3DXQUATERNION operator * (FLOAT f, const D3DXQUATERNION& quat)
+{
+    return D3DXQUATERNION(f * quat.x, f * quat.y, f * quat.z, f * quat.w);
+}
+
+inline BOOL D3DXQUATERNION::operator == (const D3DXQUATERNION& quat) const
+{
+    return x == quat.x && y == quat.y && z == quat.z && w == quat.w;
+}
+
+inline BOOL D3DXQUATERNION::operator != (const D3DXQUATERNION& quat) const
+{
+    return x != quat.x || y != quat.y || z != quat.z || w != quat.w;
+}
+
+inline D3DXPLANE::D3DXPLANE()
+{
+}
+
+inline D3DXPLANE::D3DXPLANE(const FLOAT *pf)
+{
+    if(!pf) return;
+    a = pf[0];
+    b = pf[1];
+    c = pf[2];
+    d = pf[3];
+}
+
+inline D3DXPLANE::D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd)
+{
+    a = fa;
+    b = fb;
+    c = fc;
+    d = fd;
+}
+
+inline D3DXPLANE::operator FLOAT* ()
+{
+    return (FLOAT*)&a;
+}
+
+inline D3DXPLANE::operator const FLOAT* () const
+{
+    return (const FLOAT*)&a;
+}
+
+inline D3DXPLANE D3DXPLANE::operator + () const
+{
+    return *this;
+}
+
+inline D3DXPLANE D3DXPLANE::operator - () const
+{
+    return D3DXPLANE(-a, -b, -c, -d);
+}
+
+inline BOOL D3DXPLANE::operator == (const D3DXPLANE& pl) const
+{
+    return a == pl.a && b == pl.b && c == pl.c && d == pl.d;
+}
+
+inline BOOL D3DXPLANE::operator != (const D3DXPLANE& pl) const
+{
+    return a != pl.a || b != pl.b || c != pl.c || d != pl.d;
+}
+
+inline D3DXCOLOR::D3DXCOLOR()
+{
+}
+
+inline D3DXCOLOR::D3DXCOLOR(DWORD col)
+{
+    const FLOAT f = 1.0f / 255.0f;
+    r = f * (FLOAT)(unsigned char)(col >> 16);
+    g = f * (FLOAT)(unsigned char)(col >>  8);
+    b = f * (FLOAT)(unsigned char)col;
+    a = f * (FLOAT)(unsigned char)(col >> 24);
+}
+
+inline D3DXCOLOR::D3DXCOLOR(const FLOAT *pf)
+{
+    if(!pf) return;
+    r = pf[0];
+    g = pf[1];
+    b = pf[2];
+    a = pf[3];
+}
+
+inline D3DXCOLOR::D3DXCOLOR(const D3DCOLORVALUE& col)
+{
+    r = col.r;
+    g = col.g;
+    b = col.b;
+    a = col.a;
+}
+
+inline D3DXCOLOR::D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa)
+{
+    r = fr;
+    g = fg;
+    b = fb;
+    a = fa;
+}
+
+inline D3DXCOLOR::operator DWORD () const
+{
+    DWORD _r = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD)(r * 255.0f + 0.5f);
+    DWORD _g = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD)(g * 255.0f + 0.5f);
+    DWORD _b = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD)(b * 255.0f + 0.5f);
+    DWORD _a = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD)(a * 255.0f + 0.5f);
+
+    return (_a << 24) | (_r << 16) | (_g << 8) | _b;
+}
+
+inline D3DXCOLOR::operator FLOAT * ()
+{
+    return (FLOAT*)&r;
+}
+
+inline D3DXCOLOR::operator const FLOAT * () const
+{
+    return (const FLOAT*)&r;
+}
+
+inline D3DXCOLOR::operator D3DCOLORVALUE * ()
+{
+    return (D3DCOLORVALUE*)&r;
+}
+
+inline D3DXCOLOR::operator const D3DCOLORVALUE * () const
+{
+    return (const D3DCOLORVALUE*)&r;
+}
+
+inline D3DXCOLOR::operator D3DCOLORVALUE& ()
+{
+    return *((D3DCOLORVALUE*)&r);
+}
+
+inline D3DXCOLOR::operator const D3DCOLORVALUE& () const
+{
+    return *((const D3DCOLORVALUE*)&r);
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator += (const D3DXCOLOR& col)
+{
+    r += col.r;
+    g += col.g;
+    b += col.b;
+    a += col.a;
+    return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator -= (const D3DXCOLOR& col)
+{
+    r -= col.r;
+    g -= col.g;
+    b -= col.b;
+    a -= col.a;
+    return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator *= (FLOAT f)
+{
+    r *= f;
+    g *= f;
+    b *= f;
+    a *= f;
+    return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator /= (FLOAT f)
+{
+    FLOAT inv = 1.0f / f;
+    r *= inv;
+    g *= inv;
+    b *= inv;
+    a *= inv;
+    return *this;
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator + () const
+{
+    return *this;
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator - () const
+{
+    return D3DXCOLOR(-r, -g, -b, -a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator + (const D3DXCOLOR& col) const
+{
+    return D3DXCOLOR(r + col.r, g + col.g, b + col.b, a + col.a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator - (const D3DXCOLOR& col) const
+{
+    return D3DXCOLOR(r - col.r, g - col.g, b - col.b, a - col.a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator * (FLOAT f) const
+{
+    return D3DXCOLOR(r * f, g * f, b * f, a * f);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator / (FLOAT f) const
+{
+    FLOAT inv = 1.0f / f;
+    return D3DXCOLOR(r * inv, g * inv, b * inv, a * inv);
+}
+
+inline D3DXCOLOR operator * (FLOAT f, const D3DXCOLOR& col)
+{
+    return D3DXCOLOR(f * col.r, f * col.g, f * col.b, f * col.a);
+}
+
+inline BOOL D3DXCOLOR::operator == (const D3DXCOLOR& col) const
+{
+    return r == col.r && g == col.g && b == col.b && a == col.a;
+}
+
+inline BOOL D3DXCOLOR::operator != (const D3DXCOLOR& col) const
+{
+    return r != col.r || g != col.g || b != col.b || a != col.a;
+}
+
+inline D3DXFLOAT16::D3DXFLOAT16()
+{
+}
+
+inline D3DXFLOAT16::D3DXFLOAT16(FLOAT f)
+{
+    D3DXFloat32To16Array(this, &f, 1);
+}
+
+inline D3DXFLOAT16::D3DXFLOAT16(const D3DXFLOAT16 &f)
+{
+    value = f.value;
+}
+
+inline D3DXFLOAT16::operator FLOAT ()
+{
+    FLOAT f;
+    D3DXFloat16To32Array(&f, this, 1);
+    return f;
+}
+
+inline BOOL D3DXFLOAT16::operator == (const D3DXFLOAT16 &f) const
+{
+    return value == f.value;
+}
+
+inline BOOL D3DXFLOAT16::operator != (const D3DXFLOAT16 &f) const
+{
+    return value != f.value;
+}
+
+#endif /* __cplusplus */
+
+/*_______________D3DXCOLOR_____________________*/
+
+static inline D3DXCOLOR* D3DXColorAdd(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
+{
+    if ( !pout || !pc1 || !pc2 ) return NULL;
+    pout->r = (pc1->r) + (pc2->r);
+    pout->g = (pc1->g) + (pc2->g);
+    pout->b = (pc1->b) + (pc2->b);
+    pout->a = (pc1->a) + (pc2->a);
+    return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorLerp(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2, FLOAT s)
+{
+    if ( !pout || !pc1 || !pc2 ) return NULL;
+    pout->r = (1-s) * (pc1->r) + s *(pc2->r);
+    pout->g = (1-s) * (pc1->g) + s *(pc2->g);
+    pout->b = (1-s) * (pc1->b) + s *(pc2->b);
+    pout->a = (1-s) * (pc1->a) + s *(pc2->a);
+    return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorModulate(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
+{
+    if ( !pout || !pc1 || !pc2 ) return NULL;
+    pout->r = (pc1->r) * (pc2->r);
+    pout->g = (pc1->g) * (pc2->g);
+    pout->b = (pc1->b) * (pc2->b);
+    pout->a = (pc1->a) * (pc2->a);
+    return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorNegative(D3DXCOLOR *pout, const D3DXCOLOR *pc)
+{
+    if ( !pout || !pc ) return NULL;
+    pout->r = 1.0f - pc->r;
+    pout->g = 1.0f - pc->g;
+    pout->b = 1.0f - pc->b;
+    pout->a = pc->a;
+    return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorScale(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s)
+{
+    if ( !pout || !pc ) return NULL;
+    pout->r = s* (pc->r);
+    pout->g = s* (pc->g);
+    pout->b = s* (pc->b);
+    pout->a = s* (pc->a);
+    return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorSubtract(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
+{
+    if ( !pout || !pc1 || !pc2 ) return NULL;
+    pout->r = (pc1->r) - (pc2->r);
+    pout->g = (pc1->g) - (pc2->g);
+    pout->b = (pc1->b) - (pc2->b);
+    pout->a = (pc1->a) - (pc2->a);
+    return pout;
+}
+
+/*_______________D3DXVECTOR2________________________*/
+
+static inline D3DXVECTOR2* D3DXVec2Add(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x + pv2->x;
+    pout->y = pv1->y + pv2->y;
+    return pout;
+}
+
+static inline FLOAT D3DXVec2CCW(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+    if ( !pv1 || !pv2) return 0.0f;
+    return ( (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x) );
+}
+
+static inline FLOAT D3DXVec2Dot(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+    if ( !pv1 || !pv2) return 0.0f;
+    return ( (pv1->x * pv2->x + pv1->y * pv2->y) );
+}
+
+static inline FLOAT D3DXVec2Length(const D3DXVECTOR2 *pv)
+{
+    if (!pv) return 0.0f;
+    return sqrtf( pv->x * pv->x + pv->y * pv->y );
+}
+
+static inline FLOAT D3DXVec2LengthSq(const D3DXVECTOR2 *pv)
+{
+    if (!pv) return 0.0f;
+    return( (pv->x) * (pv->x) + (pv->y) * (pv->y) );
+}
+
+static inline D3DXVECTOR2* D3DXVec2Lerp(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, FLOAT s)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = (1-s) * (pv1->x) + s * (pv2->x);
+    pout->y = (1-s) * (pv1->y) + s * (pv2->y);
+    return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Maximize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
+    pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
+    return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Minimize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
+    pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
+    return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Scale(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, FLOAT s)
+{
+    if ( !pout || !pv) return NULL;
+    pout->x = s * (pv->x);
+    pout->y = s * (pv->y);
+    return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Subtract(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x - pv2->x;
+    pout->y = pv1->y - pv2->y;
+    return pout;
+}
+
+/*__________________D3DXVECTOR3_______________________*/
+
+static inline D3DXVECTOR3* D3DXVec3Add(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x + pv2->x;
+    pout->y = pv1->y + pv2->y;
+    pout->z = pv1->z + pv2->z;
+    return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Cross(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+    D3DXVECTOR3 temp;
+
+    if ( !pout || !pv1 || !pv2) return NULL;
+    temp.x = (pv1->y) * (pv2->z) - (pv1->z) * (pv2->y);
+    temp.y = (pv1->z) * (pv2->x) - (pv1->x) * (pv2->z);
+    temp.z = (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x);
+    *pout = temp;
+    return pout;
+}
+
+static inline FLOAT D3DXVec3Dot(const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+    if ( !pv1 || !pv2 ) return 0.0f;
+    return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z);
+}
+
+static inline FLOAT D3DXVec3Length(const D3DXVECTOR3 *pv)
+{
+    if (!pv) return 0.0f;
+    return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z );
+}
+
+static inline FLOAT D3DXVec3LengthSq(const D3DXVECTOR3 *pv)
+{
+    if (!pv) return 0.0f;
+    return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z);
+}
+
+static inline D3DXVECTOR3* D3DXVec3Lerp(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, FLOAT s)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = (1-s) * (pv1->x) + s * (pv2->x);
+    pout->y = (1-s) * (pv1->y) + s * (pv2->y);
+    pout->z = (1-s) * (pv1->z) + s * (pv2->z);
+    return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Maximize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
+    pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
+    pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;
+    return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Minimize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
+    pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
+    pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;
+    return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Scale(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, FLOAT s)
+{
+    if ( !pout || !pv) return NULL;
+    pout->x = s * (pv->x);
+    pout->y = s * (pv->y);
+    pout->z = s * (pv->z);
+    return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Subtract(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x - pv2->x;
+    pout->y = pv1->y - pv2->y;
+    pout->z = pv1->z - pv2->z;
+    return pout;
+}
+/*__________________D3DXVECTOR4_______________________*/
+
+static inline D3DXVECTOR4* D3DXVec4Add(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x + pv2->x;
+    pout->y = pv1->y + pv2->y;
+    pout->z = pv1->z + pv2->z;
+    pout->w = pv1->w + pv2->w;
+    return pout;
+}
+
+static inline FLOAT D3DXVec4Dot(const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+    if (!pv1 || !pv2 ) return 0.0f;
+    return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z) + (pv1->w) * (pv2->w);
+}
+
+static inline FLOAT D3DXVec4Length(const D3DXVECTOR4 *pv)
+{
+    if (!pv) return 0.0f;
+    return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z + pv->w * pv->w );
+}
+
+static inline FLOAT D3DXVec4LengthSq(const D3DXVECTOR4 *pv)
+{
+    if (!pv) return 0.0f;
+    return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z) + (pv->w) * (pv->w);
+}
+
+static inline D3DXVECTOR4* D3DXVec4Lerp(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, FLOAT s)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = (1-s) * (pv1->x) + s * (pv2->x);
+    pout->y = (1-s) * (pv1->y) + s * (pv2->y);
+    pout->z = (1-s) * (pv1->z) + s * (pv2->z);
+    pout->w = (1-s) * (pv1->w) + s * (pv2->w);
+    return pout;
+}
+
+
+static inline D3DXVECTOR4* D3DXVec4Maximize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
+    pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
+    pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;
+    pout->w = pv1->w > pv2->w ? pv1->w : pv2->w;
+    return pout;
+}
+
+static inline D3DXVECTOR4* D3DXVec4Minimize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
+    pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
+    pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;
+    pout->w = pv1->w < pv2->w ? pv1->w : pv2->w;
+    return pout;
+}
+
+static inline D3DXVECTOR4* D3DXVec4Scale(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, FLOAT s)
+{
+    if ( !pout || !pv) return NULL;
+    pout->x = s * (pv->x);
+    pout->y = s * (pv->y);
+    pout->z = s * (pv->z);
+    pout->w = s * (pv->w);
+    return pout;
+}
+
+static inline D3DXVECTOR4* D3DXVec4Subtract(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+    if ( !pout || !pv1 || !pv2) return NULL;
+    pout->x = pv1->x - pv2->x;
+    pout->y = pv1->y - pv2->y;
+    pout->z = pv1->z - pv2->z;
+    pout->w = pv1->w - pv2->w;
+    return pout;
+}
+
+/*__________________D3DXMatrix____________________*/
+#ifdef NONAMELESSUNION
+# define D3DX_U(x)  (x).u
+#else
+# define D3DX_U(x)  (x)
+#endif
+
+static inline D3DXMATRIX* D3DXMatrixIdentity(D3DXMATRIX *pout)
+{
+    if ( !pout ) return NULL;
+    D3DX_U(*pout).m[0][1] = 0.0f;
+    D3DX_U(*pout).m[0][2] = 0.0f;
+    D3DX_U(*pout).m[0][3] = 0.0f;
+    D3DX_U(*pout).m[1][0] = 0.0f;
+    D3DX_U(*pout).m[1][2] = 0.0f;
+    D3DX_U(*pout).m[1][3] = 0.0f;
+    D3DX_U(*pout).m[2][0] = 0.0f;
+    D3DX_U(*pout).m[2][1] = 0.0f;
+    D3DX_U(*pout).m[2][3] = 0.0f;
+    D3DX_U(*pout).m[3][0] = 0.0f;
+    D3DX_U(*pout).m[3][1] = 0.0f;
+    D3DX_U(*pout).m[3][2] = 0.0f;
+    D3DX_U(*pout).m[0][0] = 1.0f;
+    D3DX_U(*pout).m[1][1] = 1.0f;
+    D3DX_U(*pout).m[2][2] = 1.0f;
+    D3DX_U(*pout).m[3][3] = 1.0f;
+    return pout;
+}
+
+static inline BOOL D3DXMatrixIsIdentity(D3DXMATRIX *pm)
+{
+    int i,j;
+    D3DXMATRIX testmatrix;
+
+    if ( !pm ) return FALSE;
+    D3DXMatrixIdentity(&testmatrix);
+    for (i=0; i<4; i++)
+    {
+     for (j=0; j<4; j++)
+     {
+      if ( D3DX_U(*pm).m[i][j] != D3DX_U(testmatrix).m[i][j] ) return FALSE;
+     }
+    }
+    return TRUE;
+}
+#undef D3DX_U
+
+/*__________________D3DXPLANE____________________*/
+
+static inline FLOAT D3DXPlaneDot(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
+{
+    if ( !pp || !pv ) return 0.0f;
+    return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) * (pv->w) );
+}
+
+static inline FLOAT D3DXPlaneDotCoord(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
+{
+    if ( !pp || !pv ) return 0.0f;
+    return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) );
+}
+
+static inline FLOAT D3DXPlaneDotNormal(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
+{
+    if ( !pp || !pv ) return 0.0f;
+    return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) );
+}
+
+/*__________________D3DXQUATERNION____________________*/
+
+static inline D3DXQUATERNION* D3DXQuaternionConjugate(D3DXQUATERNION *pout, const D3DXQUATERNION *pq)
+{
+    if ( !pout || !pq) return NULL;
+    pout->x = -pq->x;
+    pout->y = -pq->y;
+    pout->z = -pq->z;
+    pout->w = pq->w;
+    return pout;
+}
+
+static inline FLOAT D3DXQuaternionDot(const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2)
+{
+    if ( !pq1 || !pq2 ) return 0.0f;
+    return (pq1->x) * (pq2->x) + (pq1->y) * (pq2->y) + (pq1->z) * (pq2->z) + (pq1->w) * (pq2->w);
+}
+
+static inline D3DXQUATERNION* D3DXQuaternionIdentity(D3DXQUATERNION *pout)
+{
+    if ( !pout) return NULL;
+    pout->x = 0.0f;
+    pout->y = 0.0f;
+    pout->z = 0.0f;
+    pout->w = 1.0f;
+    return pout;
+}
+
+static inline BOOL D3DXQuaternionIsIdentity(D3DXQUATERNION *pq)
+{
+    if ( !pq) return FALSE;
+    return ( (pq->x == 0.0f) && (pq->y == 0.0f) && (pq->z == 0.0f) && (pq->w == 1.0f) );
+}
+
+static inline FLOAT D3DXQuaternionLength(const D3DXQUATERNION *pq)
+{
+    if (!pq) return 0.0f;
+    return sqrtf( pq->x * pq->x + pq->y * pq->y + pq->z * pq->z + pq->w * pq->w );
+}
+
+static inline FLOAT D3DXQuaternionLengthSq(const D3DXQUATERNION *pq)
+{
+    if (!pq) return 0.0f;
+    return (pq->x) * (pq->x) + (pq->y) * (pq->y) + (pq->z) * (pq->z) + (pq->w) * (pq->w);
+}
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h
new file mode 100644
index 0000000..79c0dcc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h
@@ -0,0 +1,1066 @@
+/*
+ * Copyright (C) 2009 David Adam
+ * Copyright (C) 2010 Tony Wasserka
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __WINE_D3DX9MESH_H
+#define __WINE_D3DX9MESH_H
+
+DEFINE_GUID(IID_ID3DXBaseMesh, 0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30);
+DEFINE_GUID(IID_ID3DXMesh,     0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95);
+DEFINE_GUID(IID_ID3DXPMesh,    0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96);
+DEFINE_GUID(IID_ID3DXSPMesh,   0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x02, 0x90, 0xb8, 0x3c, 0xc5);
+DEFINE_GUID(IID_ID3DXSkinInfo, 0x11eaa540, 0xf9a6, 0x4d49, 0xae, 0x6a, 0xe1, 0x92, 0x21, 0xf7, 0x0c, 0xc4);
+DEFINE_GUID(IID_ID3DXPatchMesh,0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39);
+DEFINE_GUID(IID_ID3DXPRTBuffer,           0xf1827e47, 0x00a8, 0x49cd, 0x90, 0x8c, 0x9d, 0x11, 0x95, 0x5f, 0x87, 0x28);
+DEFINE_GUID(IID_ID3DXPRTCompBuffer,       0xa758d465, 0xfe8d, 0x45ad, 0x9c, 0xf0, 0xd0, 0x1e, 0x56, 0x26, 0x6a, 0x07);
+DEFINE_GUID(IID_ID3DXTextureGutterHelper, 0x838f01ec, 0x9729, 0x4527, 0xaa, 0xdb, 0xdf, 0x70, 0xad, 0xe7, 0xfe, 0xa9);
+DEFINE_GUID(IID_ID3DXPRTEngine,           0x683a4278, 0xcd5f, 0x4d24, 0x90, 0xad, 0xc4, 0xe1, 0xb6, 0x85, 0x5d, 0x53);
+
+#define UNUSED16 (0xffff)
+#define UNUSED32 (0xffffffff)
+
+enum _MAX_FVF_DECL_SIZE
+{
+    MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1
+};
+
+enum _D3DXMESH
+{
+    D3DXMESH_32BIT                 = 0x001,
+    D3DXMESH_DONOTCLIP             = 0x002,
+    D3DXMESH_POINTS                = 0x004,
+    D3DXMESH_RTPATCHES             = 0x008,
+    D3DXMESH_NPATCHES              = 0x4000,
+    D3DXMESH_VB_SYSTEMMEM          = 0x010,
+    D3DXMESH_VB_MANAGED            = 0x020,
+    D3DXMESH_VB_WRITEONLY          = 0x040,
+    D3DXMESH_VB_DYNAMIC            = 0x080,
+    D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000,
+    D3DXMESH_IB_SYSTEMMEM          = 0x100,
+    D3DXMESH_IB_MANAGED            = 0x200,
+    D3DXMESH_IB_WRITEONLY          = 0x400,
+    D3DXMESH_IB_DYNAMIC            = 0x800,
+    D3DXMESH_IB_SOFTWAREPROCESSING = 0x10000,
+    D3DXMESH_VB_SHARE              = 0x1000,
+    D3DXMESH_USEHWONLY             = 0x2000,
+    D3DXMESH_SYSTEMMEM             = 0x110,
+    D3DXMESH_MANAGED               = 0x220,
+    D3DXMESH_WRITEONLY             = 0x440,
+    D3DXMESH_DYNAMIC               = 0x880,
+    D3DXMESH_SOFTWAREPROCESSING    = 0x18000
+};
+
+enum _D3DXMESHOPT
+{
+    D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000,
+    D3DXMESHOPT_COMPACT           = 0x01000000,
+    D3DXMESHOPT_ATTRSORT          = 0x02000000,
+    D3DXMESHOPT_VERTEXCACHE       = 0x04000000,
+    D3DXMESHOPT_STRIPREORDER      = 0x08000000,
+    D3DXMESHOPT_IGNOREVERTS       = 0x10000000,
+    D3DXMESHOPT_DONOTSPLIT        = 0x20000000,
+};
+
+typedef enum _D3DXPATCHMESHTYPE
+{
+    D3DXPATCHMESH_RECT        = 1,
+    D3DXPATCHMESH_TRI         = 2,
+    D3DXPATCHMESH_NPATCH      = 3,
+    D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff,
+} D3DXPATCHMESHTYPE;
+
+enum _D3DXPATCHMESH
+{
+    D3DXPATCHMESH_DEFAULT = 0,
+};
+
+enum _D3DXMESHSIMP
+{
+    D3DXMESHSIMP_VERTEX = 0x1,
+    D3DXMESHSIMP_FACE   = 0x2,
+};
+
+typedef enum D3DXCLEANTYPE {
+    D3DXCLEAN_BACKFACING     = 0x00000001,
+    D3DXCLEAN_BOWTIES        = 0x00000002,
+
+    D3DXCLEAN_SKINNING       = D3DXCLEAN_BACKFACING,
+    D3DXCLEAN_OPTIMIZATION   = D3DXCLEAN_BACKFACING,
+    D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES,
+} D3DXCLEANTYPE;
+
+typedef enum _D3DXTANGENT
+{
+    D3DXTANGENT_WRAP_U =                  0x0001,
+    D3DXTANGENT_WRAP_V =                  0x0002,
+    D3DXTANGENT_WRAP_UV =                 0x0003,
+    D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x0004,
+    D3DXTANGENT_DONT_ORTHOGONALIZE =      0x0008,
+    D3DXTANGENT_ORTHOGONALIZE_FROM_V =    0x0010,
+    D3DXTANGENT_ORTHOGONALIZE_FROM_U =    0x0020,
+    D3DXTANGENT_WEIGHT_BY_AREA =          0x0040,
+    D3DXTANGENT_WEIGHT_EQUAL =            0x0080,
+    D3DXTANGENT_WIND_CW =                 0x0100,
+    D3DXTANGENT_CALCULATE_NORMALS =       0x0200,
+    D3DXTANGENT_GENERATE_IN_PLACE =       0x0400,
+} D3DXTANGENT;
+
+typedef enum _D3DXIMT
+{
+    D3DXIMT_WRAP_U   = 0x01,
+    D3DXIMT_WRAP_V   = 0x02,
+    D3DXIMT_WRAP_UV  = 0x03,
+} D3DXIMT;
+
+typedef enum _D3DXUVATLAS
+{
+    D3DXUVATLAS_DEFAULT          = 0x00,
+    D3DXUVATLAS_GEODESIC_FAST    = 0x01,
+    D3DXUVATLAS_GEODESIC_QUALITY = 0x02,
+} D3DXUVATLAS;
+
+typedef enum _D3DXEFFECTDEFAULTTYPE
+{
+    D3DXEDT_STRING     = 1,
+    D3DXEDT_FLOATS     = 2,
+    D3DXEDT_DWORD      = 3,
+    D3DXEDT_FORCEDWORD = 0x7fffffff,
+} D3DXEFFECTDEFAULTTYPE;
+
+enum _D3DXWELDEPSILONSFLAGS
+{
+    D3DXWELDEPSILONS_WELDALL             = 0x1,
+    D3DXWELDEPSILONS_WELDPARTIALMATCHES  = 0x2,
+    D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4,
+    D3DXWELDEPSILONS_DONOTSPLIT          = 0x8,
+};
+
+typedef enum _D3DXSHCOMPRESSQUALITYTYPE
+{
+    D3DXSHCQUAL_FASTLOWQUALITY  = 1,
+    D3DXSHCQUAL_SLOWHIGHQUALITY = 2,
+    D3DXSHCQUAL_FORCE_DWORD     = 0x7fffffff,
+} D3DXSHCOMPRESSQUALITYTYPE;
+
+typedef enum _D3DXSHGPUSIMOPT
+{
+    D3DXSHGPUSIMOPT_SHADOWRES256   = 1,
+    D3DXSHGPUSIMOPT_SHADOWRES512   = 0,
+    D3DXSHGPUSIMOPT_SHADOWRES1024  = 2,
+    D3DXSHGPUSIMOPT_SHADOWRES2048  = 3,
+    D3DXSHGPUSIMOPT_HIGHQUALITY    = 4,
+    D3DXSHGPUSIMOPT_FORCE_DWORD    = 0x7fffffff,
+} D3DXSHGPUSIMOPT;
+
+typedef struct ID3DXBaseMesh* LPD3DXBASEMESH;
+typedef struct ID3DXMesh* LPD3DXMESH;
+typedef struct ID3DXPMesh *LPD3DXPMESH;
+typedef struct ID3DXSPMesh *LPD3DXSPMESH;
+typedef struct ID3DXSkinInfo *LPD3DXSKININFO;
+typedef struct ID3DXPatchMesh *LPD3DXPATCHMESH;
+typedef struct ID3DXPRTBuffer *LPD3DXPRTBUFFER;
+typedef struct ID3DXPRTCompBuffer *LPD3DXPRTCOMPBUFFER;
+typedef struct ID3DXPRTEngine *LPD3DXPRTENGINE;
+typedef struct ID3DXTextureGutterHelper *LPD3DXTEXTUREGUTTERHELPER;
+
+typedef struct _D3DXATTRIBUTERANGE {
+    DWORD AttribId;
+    DWORD FaceStart;
+    DWORD FaceCount;
+    DWORD VertexStart;
+    DWORD VertexCount;
+} D3DXATTRIBUTERANGE;
+
+typedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE;
+
+typedef struct _D3DXMATERIAL
+{
+    D3DMATERIAL9 MatD3D;
+    char *pTextureFilename;
+} D3DXMATERIAL, *LPD3DXMATERIAL;
+
+typedef struct _D3DXEFFECTDEFAULT
+{
+    char *pParamName;
+    D3DXEFFECTDEFAULTTYPE Type;
+    DWORD NumBytes;
+    void *pValue;
+} D3DXEFFECTDEFAULT, *LPD3DXEFFECTDEFAULT;
+
+typedef struct _D3DXEFFECTINSTANCE
+{
+    char *pEffectFilename;
+    DWORD NumDefaults;
+    LPD3DXEFFECTDEFAULT pDefaults;
+} D3DXEFFECTINSTANCE, *LPD3DXEFFECTINSTANCE;
+
+typedef struct _D3DXATTRIBUTEWEIGHTS
+{
+    FLOAT Position;
+    FLOAT Boundary;
+    FLOAT Normal;
+    FLOAT Diffuse;
+    FLOAT Specular;
+    FLOAT Texcoords[8];
+    FLOAT Tangent;
+    FLOAT Binormal;
+} D3DXATTRIBUTEWEIGHTS, *LPD3DXATTRIBUTEWEIGHTS;
+
+typedef struct _D3DXWELDEPSILONS
+{
+    FLOAT Position;
+    FLOAT BlendWeights;
+    FLOAT Normals;
+    FLOAT PSize;
+    FLOAT Specular;
+    FLOAT Diffuse;
+    FLOAT Texcoords[8];
+    FLOAT Tangent;
+    FLOAT Binormal;
+    FLOAT TessFactor;
+} D3DXWELDEPSILONS, *LPD3DXWELDEPSILONS;
+
+typedef struct _D3DXBONECOMBINATION
+{
+    DWORD AttribId;
+    DWORD FaceStart;
+    DWORD FaceCount;
+    DWORD VertexStart;
+    DWORD VertexCout;
+    DWORD *BoneId;
+} D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION;
+
+typedef struct _D3DXPATCHINFO
+{
+    D3DXPATCHMESHTYPE PatchType;
+    D3DDEGREETYPE Degree;
+    D3DBASISTYPE Basis;
+} D3DXPATCHINFO, *LPD3DXPATCHINFO;
+
+typedef struct _D3DXINTERSECTINFO
+{
+    DWORD FaceIndex;
+    FLOAT U;
+    FLOAT V;
+    FLOAT Dist;
+} D3DXINTERSECTINFO, *LPD3DXINTERSECTINFO;
+
+typedef struct _D3DXSHMATERIAL
+{
+    D3DCOLORVALUE Diffuse;
+    BOOL bMirror;
+    BOOL bSubSurf;
+    FLOAT RelativeIndexOfRefraction;
+    D3DCOLORVALUE Absorption;
+    D3DCOLORVALUE ReducedScattering;
+} D3DXSHMATERIAL;
+
+typedef struct _D3DXSHPRTSPLITMESHVERTDATA
+{
+    UINT uVertRemap;
+    UINT uSubCluster;
+    UCHAR ucVertStatus;
+} D3DXSHPRTSPLITMESHVERTDATA;
+
+typedef struct _D3DXSHPRTSPLITMESHCLUSTERDATA
+{
+    UINT uVertStart;
+    UINT uVertLength;
+    UINT uFaceStart;
+    UINT uFaceLength;
+    UINT uClusterStart;
+    UINT uClusterLength;
+} D3DXSHPRTSPLITMESHCLUSTERDATA;
+
+typedef struct _XFILECOMPRESSEDANIMATIONSET
+{
+    DWORD CompressedBlockSize;
+    FLOAT TicksPerSec;
+    DWORD PlaybackType;
+    DWORD BufferLength;
+} XFILECOMPRESSEDANIMATIONSET;
+
+typedef HRESULT (WINAPI *LPD3DXUVATLASCB)(float complete, void *ctx);
+typedef HRESULT (WINAPI *LPD3DXIMTSIGNALCALLBACK)(const D3DXVECTOR2 *, UINT, UINT, void *, FLOAT *);
+typedef HRESULT (WINAPI *LPD3DXSHPRTSIMCB)(float complete, void *ctx);
+
+#undef INTERFACE
+#define INTERFACE ID3DXBaseMesh
+
+DECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBaseMesh ***/
+    STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
+    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
+    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+    STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
+    STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
+    STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
+    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
+    STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXMesh
+DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBaseMesh ***/
+    STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
+    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
+    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+    STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
+    STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
+    STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
+    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
+    STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    /*** ID3DXMesh ***/
+    STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;
+    STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
+    STDMETHOD(Optimize)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,
+            DWORD *face_remap, ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;
+    STDMETHOD(OptimizeInplace)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,
+                     DWORD *face_remap, ID3DXBuffer **vertex_remap) PURE;
+    STDMETHOD(SetAttributeTable)(THIS_ const D3DXATTRIBUTERANGE *attrib_table,
+            DWORD attrib_table_size) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPMesh
+DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBaseMesh ***/
+    STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
+    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
+    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+    STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
+    STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
+    STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
+    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
+    STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    /*** ID3DXPMesh ***/
+    STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,
+            struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;
+    STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+            struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;
+    STDMETHOD(SetNumFaces)(THIS_ DWORD faces) PURE;
+    STDMETHOD(SetNumVertices)(THIS_ DWORD vertices) PURE;
+    STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
+    STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;
+    STDMETHOD(Save)(THIS_ IStream *stream, const D3DXMATERIAL *material,
+            const D3DXEFFECTINSTANCE *effect_instance, DWORD num_materials) PURE;
+    STDMETHOD(Optimize)(THIS_ DWORD flags, DWORD *adjacency_out, DWORD *face_remap,
+            ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;
+    STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD flags, DWORD* face_remap) PURE;
+    STDMETHOD(TrimByFaces)(THIS_ DWORD new_faces_min, DWORD new_faces_max, DWORD* face_remap, DWORD* vertex_remap) PURE;
+    STDMETHOD(TrimByVertices)(THIS_ DWORD new_vertices_min, DWORD new_vertices_max, DWORD* face_remap, DWORD* vertex_remap) PURE;
+    STDMETHOD(GetAdjacency)(THIS_ DWORD* adjacency) PURE;
+    STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* vertex_history) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXSPMesh
+DECLARE_INTERFACE_(ID3DXSPMesh, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXSPMesh ***/
+    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+    STDMETHOD_(DWORD, GetNumFVF)(THIS) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+            struct IDirect3DDevice9 *device, DWORD *adjacency_out,
+            DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+            struct IDirect3DDevice9 *device, DWORD *adjacency_out,
+            DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;
+    STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,
+            struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,
+            float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;
+    STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+            struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,
+            float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;
+    STDMETHOD(ReduceFaces)(THIS_ DWORD faces) PURE;
+    STDMETHOD(ReduceVertices)(THIS_ DWORD vertices) PURE;
+    STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
+    STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
+    STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS vertex_attribute_weights) PURE;
+    STDMETHOD(GetVertexWeights)(THIS_ FLOAT* vertex_weights) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPatchMesh
+DECLARE_INTERFACE_(ID3DXPatchMesh, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXPatchMesh ***/
+    STDMETHOD_(DWORD, GetNumPatches)(THIS) PURE;
+    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    STDMETHOD_(DWORD, GetControlVerticesPerPatch)(THIS) PURE;
+    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+    STDMETHOD(GetPatchInfo)(THIS_ LPD3DXPATCHINFO patch_info) PURE;
+    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+    STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;
+    STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
+    STDMETHOD(GetTessSize)(THIS_ FLOAT tess_level, DWORD adaptive, DWORD* num_triangles, DWORD* num_vertices) PURE;
+    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT tolerance) PURE;
+    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, ID3DXPatchMesh **clone_mesh) PURE;
+    STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;
+    STDMETHOD(SetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 *texture, D3DTEXTUREFILTERTYPE min_filter,
+            D3DTEXTUREFILTERTYPE mag_filter, D3DTEXTUREFILTERTYPE mip_filter, D3DTEXTUREADDRESS wrap,
+            DWORD lod_bias) PURE;
+    STDMETHOD(GetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 **texture, D3DTEXTUREFILTERTYPE *min_filter,
+            D3DTEXTUREFILTERTYPE *mag_filter, D3DTEXTUREFILTERTYPE *mip_filter, D3DTEXTUREADDRESS *wrap,
+            DWORD *lod_bias) PURE;
+    STDMETHOD(Tessellate)(THIS_ float tess_level, ID3DXMesh *mesh) PURE;
+    STDMETHOD(TessellateAdaptive)(THIS_ const D3DXVECTOR4 *trans, DWORD max_tess_level,
+            DWORD min_tess_level, ID3DXMesh *mesh) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXSkinInfo
+DECLARE_INTERFACE_(ID3DXSkinInfo, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXSkinInfo ***/
+    STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD num_influences, const DWORD *vertices,
+            const FLOAT *weights) PURE;
+    STDMETHOD(SetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float weight) PURE;
+    STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE;
+    STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE;
+    STDMETHOD(GetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float *weight, DWORD* vertex_num) PURE;
+    STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* max_vertex_influences) PURE;
+    STDMETHOD_(DWORD, GetNumBones)(THIS) PURE;
+    STDMETHOD(FindBoneVertexInfluenceIndex)(THIS_ DWORD bone_num, DWORD vertex_num, DWORD* influence_index) PURE;
+    STDMETHOD(GetMaxFaceInfluences)(THIS_ struct IDirect3DIndexBuffer9 *index_buffer,
+            DWORD num_faces, DWORD *max_face_influences) PURE;
+    STDMETHOD(SetMinBoneInfluence)(THIS_ FLOAT min_influence) PURE;
+    STDMETHOD_(FLOAT, GetMinBoneInfluence)(THIS) PURE;
+    STDMETHOD(SetBoneName)(THIS_ DWORD bone_idx, const char *name) PURE;
+    STDMETHOD_(const char *, GetBoneName)(THIS_ DWORD bone_idx) PURE;
+    STDMETHOD(SetBoneOffsetMatrix)(THIS_ DWORD bone, const D3DXMATRIX *bone_transform) PURE;
+    STDMETHOD_(D3DXMATRIX *, GetBoneOffsetMatrix)(THIS_ DWORD bone) PURE;
+    STDMETHOD(Clone)(THIS_ ID3DXSkinInfo **skin_info) PURE;
+    STDMETHOD(Remap)(THIS_ DWORD num_vertices, DWORD* vertex_remap) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(SetDeclaration)(THIS_ const D3DVERTEXELEMENT9 *declaration) PURE;
+    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+    STDMETHOD(UpdateSkinnedMesh)(THIS_ const D3DXMATRIX *bone_transforms,
+            const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices) PURE;
+    STDMETHOD(ConvertToBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in,
+            DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl,
+            DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE;
+    STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in,
+            DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl,
+            DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPRTBuffer
+DECLARE_INTERFACE_(ID3DXPRTBuffer, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXPRTBuffer methods ***/
+    STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;
+    STDMETHOD_(BOOL, IsTexture)(THIS) PURE;
+    STDMETHOD_(BOOL, GetWidth)(THIS) PURE;
+    STDMETHOD_(BOOL, GetHeight)(THIS) PURE;
+    STDMETHOD(Resize)(THIS_ UINT new_size) PURE;
+    STDMETHOD(LockBuffer)(THIS_ UINT start, UINT num_samples, FLOAT **data) PURE;
+    STDMETHOD(UnlockBuffer)(THIS) PURE;
+    STDMETHOD(ScaleBuffer)(THIS_ FLOAT scale) PURE;
+    STDMETHOD(AddBuffer)(THIS_ ID3DXPRTBuffer *buffer) PURE;
+    STDMETHOD(AttachGH)(THIS_ struct ID3DXTextureGutterHelper *gh) PURE;
+    STDMETHOD(ReleaseGH)(THIS) PURE;
+    STDMETHOD(EvalGH)(THIS) PURE;
+    STDMETHOD(ExtractTexture)(THIS_ UINT channel, UINT start_coefficient,
+        UINT num_coefficients, struct IDirect3DTexture9 *texture) PURE;
+    STDMETHOD(ExtractToMesh)(THIS_ UINT num_coefficients, D3DDECLUSAGE usage,
+            UINT usage_index_start, ID3DXMesh *scene) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPRTCompBuffer
+DECLARE_INTERFACE_(ID3DXPRTCompBuffer, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXPRTCompBuffer methods ***/
+    STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;
+    STDMETHOD_(BOOL, IsTexture)(THIS) PURE;
+    STDMETHOD_(UINT, GetWidth)(THIS) PURE;
+    STDMETHOD_(UINT, GetHeight)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumClusters)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumPCA)(THIS) PURE;
+    STDMETHOD(NormalizeData)(THIS) PURE;
+    STDMETHOD(ExtractBasis)(THIS_ UINT cluster, FLOAT *cluster_basis) PURE;
+    STDMETHOD(ExtractClusterIDs)(THIS_ UINT *cluster_ids) PURE;
+    STDMETHOD(ExtractPCA)(THIS_ UINT start_pca, UINT num_extract, FLOAT *pca_coefficients) PURE;
+    STDMETHOD(ExtractTexture)(THIS_ UINT start_pca, UINT num_pca, struct IDirect3DTexture9 *texture) PURE;
+    STDMETHOD(ExtractToMesh)(THIS_ UINT num_pca, D3DDECLUSAGE usage, UINT usage_index_start, ID3DXMesh *scene) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXTextureGutterHelper
+DECLARE_INTERFACE_(ID3DXTextureGutterHelper, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXTextureGutterHelper methods ***/
+    STDMETHOD_(UINT, GetWidth)(THIS) PURE;
+    STDMETHOD_(UINT, GetHeight)(THIS) PURE;
+
+    STDMETHOD(ApplyGuttersFloat)(THIS_ FLOAT *data_in, UINT num_coeffs, UINT width, UINT height) PURE;
+    STDMETHOD(ApplyGuttersTex)(THIS_ struct IDirect3DTexture9 *texture) PURE;
+    STDMETHOD(ApplyGuttersPRT)(THIS_ ID3DXPRTBuffer *buffer) PURE;
+    STDMETHOD(ResampleTex)(THIS_ struct IDirect3DTexture9 *texture_in, struct ID3DXMesh *mesh_in,
+        D3DDECLUSAGE usage, UINT usage_index, struct IDirect3DTexture9 *texture_out) PURE;
+    STDMETHOD(GetFaceMap)(THIS_ UINT *face_data) PURE;
+    STDMETHOD(GetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;
+    STDMETHOD(GetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;
+    STDMETHOD(GetGutterMap)(THIS_ BYTE *gutter_data) PURE;
+    STDMETHOD(SetFaceMap)(THIS_ UINT *face_data) PURE;
+    STDMETHOD(SetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;
+    STDMETHOD(SetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;
+    STDMETHOD(SetGutterMap)(THIS_ BYTE *gutter_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPRTEngine
+DECLARE_INTERFACE_(ID3DXPRTEngine, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXPRTEngine methods ***/
+    STDMETHOD(SetMeshMaterials)(THIS_ const D3DXSHMATERIAL **materials, UINT num_meshes,
+        UINT num_channels, BOOL set_albedo, FLOAT length_scale) PURE;
+    STDMETHOD(SetPerVertexAlbedo)(THIS_ const void *data_in, UINT num_channels, UINT stride) PURE;
+    STDMETHOD(SetPerTexelAlbedo)(THIS_ struct IDirect3DTexture9 *albedo_texture,
+            UINT num_channels, struct ID3DXTextureGutterHelper *gh) PURE;
+    STDMETHOD(GetVertexAlbedo)(THIS_ D3DXCOLOR *vert_colors, UINT num_verts) PURE;
+    STDMETHOD(SetPerTexelNormals)(THIS_ struct IDirect3DTexture9 *normal_texture) PURE;
+    STDMETHOD(ExtractPerVertexAlbedo)(THIS_ ID3DXMesh *mesh, D3DDECLUSAGE usage, UINT num_channels) PURE;
+    STDMETHOD(ResampleBuffer)(THIS_ ID3DXPRTBuffer *buffer_in, ID3DXPRTBuffer *buffer_out) PURE;
+    STDMETHOD(GetAdaptedMesh)(THIS_ struct IDirect3DDevice9 *device, UINT *face_remap,
+            UINT *vert_remap, float *vert_weights, struct ID3DXMesh **mesh) PURE;
+    STDMETHOD_(UINT, GetNumVerts)(THIS) PURE;
+    STDMETHOD_(UINT, GetNumFaces)(THIS) PURE;
+    STDMETHOD(SetMinMaxIntersection)(THIS_ FLOAT min, FLOAT max) PURE;
+    STDMETHOD(RobustMeshRefine)(THIS_ FLOAT min_edge_length, UINT max_subdiv) PURE;
+    STDMETHOD(SetSamplingInfo)(THIS_ UINT num_rays, BOOL use_sphere,
+        BOOL use_cosine, BOOL adaptive, FLOAT adpative_thresh) PURE;
+    STDMETHOD(ComputeDirectLightingSH)(THIS_ UINT sh_order, ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ComputeDirectLightingSHAdaptive)(THIS_ UINT sh_order, float adaptive_thresh,
+            float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ComputeDirectLightingSHGPU)(THIS_ struct IDirect3DDevice9 *device, UINT flags,
+            UINT sh_order, float zbias, float zangle_bias, struct ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ComputeSS)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,
+            ID3DXPRTBuffer *data_total) PURE;
+    STDMETHOD(ComputeSSAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,
+            float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;
+    STDMETHOD(ComputeBounce)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,
+            ID3DXPRTBuffer *data_total) PURE;
+    STDMETHOD(ComputeBounceAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,
+            float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;
+    STDMETHOD(ComputeVolumeSamplesDirectSH)(THIS_ UINT sh_order_in, UINT sh_order_out,
+            UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ComputeVolumeSamples)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT sh_order,
+            UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ComputeSurfSamplesDirectSH)(THIS_ UINT sh_order, UINT num_samples,
+            const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ComputeSurfSamplesBounce)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT num_samples,
+            const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out,
+            ID3DXPRTBuffer *data_total) PURE;
+    STDMETHOD(FreeSSData)(THIS) PURE;
+    STDMETHOD(FreeBounceData)(THIS) PURE;
+    STDMETHOD(ComputeLDPRTCoeffs)(THIS_ ID3DXPRTBuffer *data_in, UINT sh_order, D3DXVECTOR3 *norm_out,
+            ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(ScaleMeshChunk)(THIS_ UINT mesh_chunk, float scale, ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(MultiplyAlbedo)(THIS_ ID3DXPRTBuffer *data_out) PURE;
+    STDMETHOD(SetCallback)(THIS_ LPD3DXSHPRTSIMCB cb, float frequency, void *user_context) PURE;
+    STDMETHOD_(BOOL, ShadowRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,
+            const D3DXVECTOR3 *ray_dir) PURE;
+    STDMETHOD_(BOOL, ClosestRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,
+            const D3DXVECTOR3 *ray_dir, DWORD *face_index, FLOAT *u, FLOAT *v, FLOAT *dist) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateMesh(DWORD face_count, DWORD vertex_count, DWORD flags,
+        const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXCreateMeshFVF(DWORD face_count, DWORD vertex_count, DWORD flags,
+        DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXCreateBuffer(DWORD size, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXCreateSPMesh(ID3DXMesh *mesh, const DWORD *adjacency,
+        const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, ID3DXSPMesh **spmesh);
+HRESULT WINAPI D3DXCreatePMeshFromStream(struct IStream *stream, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXPMesh **mesh);
+HRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration,
+        DWORD bone_count, ID3DXSkinInfo **skin_info);
+HRESULT WINAPI D3DXCreateSkinInfoFVF(DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info);
+HRESULT WINAPI D3DXCreateSkinInfoFromBlendedMesh(ID3DXBaseMesh *mesh, DWORD bone_count,
+        const D3DXBONECOMBINATION *bone_combination_table, ID3DXSkinInfo **skin_info);
+HRESULT WINAPI D3DXCreatePatchMesh(const D3DXPATCHINFO *patch_info, DWORD patch_count,
+        DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration,
+        struct IDirect3DDevice9 *device, struct ID3DXPatchMesh **mesh);
+HRESULT WINAPI D3DXCreatePRTBuffer(UINT sample_count, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer);
+HRESULT WINAPI D3DXCreatePRTBufferTex(UINT width, UINT height, UINT coeff_count,
+        UINT channel_count, ID3DXPRTBuffer **buffer);
+HRESULT WINAPI D3DXCreatePRTCompBuffer(D3DXSHCOMPRESSQUALITYTYPE quality, UINT cluster_count, UINT pca_count,
+        LPD3DXSHPRTSIMCB cb, void *ctx, ID3DXPRTBuffer *input, ID3DXPRTCompBuffer **buffer);
+HRESULT WINAPI D3DXCreateTextureGutterHelper(UINT width, UINT height, ID3DXMesh *mesh,
+        float gutter_size, ID3DXTextureGutterHelper **gh);
+HRESULT WINAPI D3DXCreatePRTEngine(ID3DXMesh *mesh, DWORD *adjacency, BOOL extract_uv,
+        ID3DXMesh *blocker_mesh, ID3DXPRTEngine **engine);
+HRESULT WINAPI D3DXLoadMeshFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadMeshFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXMesh **mesh);
+#define D3DXLoadMeshFromX WINELIB_NAME_AW(D3DXLoadMeshFromX)
+HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *data, DWORD data_size, DWORD flags,
+        struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials,
+        struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadMeshFromXResource(HMODULE module, const char *resource, const char *resource_type,
+        DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency,
+        struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadPatchMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXPatchMesh **mesh);
+HRESULT WINAPI D3DXLoadSkinMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,
+        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+        DWORD *material_count, struct ID3DXSkinInfo **skin_info, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadPRTBufferFromFileA(const char *filename, ID3DXPRTBuffer **buffer);
+HRESULT WINAPI D3DXLoadPRTBufferFromFileW(const WCHAR *filename, ID3DXPRTBuffer **buffer);
+#define D3DXLoadPRTBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTBufferFromFile)
+HRESULT WINAPI D3DXLoadPRTCompBufferFromFileA(const char *filename, ID3DXPRTCompBuffer **buffer);
+HRESULT WINAPI D3DXLoadPRTCompBufferFromFileW(const WCHAR *filename, ID3DXPRTCompBuffer **buffer);
+#define D3DXLoadPRTCompBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTCompBufferFromFile)
+HRESULT WINAPI D3DXSaveMeshToXA(const char *filename, ID3DXMesh *mesh, const DWORD *adjacency,
+        const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format);
+HRESULT WINAPI D3DXSaveMeshToXW(const WCHAR *filename, ID3DXMesh *mesh, const DWORD *adjacency,
+        const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format);
+#define D3DXSaveMeshToX WINELIB_NAME_AW(D3DXSaveMeshToX)
+HRESULT WINAPI D3DXSavePRTBufferToFileA(const char *filename, ID3DXPRTBuffer *buffer);
+HRESULT WINAPI D3DXSavePRTBufferToFileW(const WCHAR *filename, ID3DXPRTBuffer *buffer);
+#define D3DXSavePRTBufferToFile WINELIB_NAME_AW(D3DXSavePRTBufferToFile)
+HRESULT WINAPI D3DXSavePRTCompBufferToFileA(const char *filename, ID3DXPRTCompBuffer *buffer);
+HRESULT WINAPI D3DXSavePRTCompBufferToFileW(const WCHAR *filename, ID3DXPRTCompBuffer *buffer);
+#define D3DXSavePRTCompBufferToFile WINELIB_NAME_AW(D3DXSavePRTCompBufferToFile)
+UINT    WINAPI D3DXGetDeclLength(const D3DVERTEXELEMENT9 *decl);
+UINT    WINAPI D3DXGetDeclVertexSize(const D3DVERTEXELEMENT9 *decl, DWORD stream_idx);
+UINT    WINAPI D3DXGetFVFVertexSize(DWORD);
+BOOL WINAPI D3DXBoxBoundProbe(const D3DXVECTOR3 *vmin, const D3DXVECTOR3 *vmax,
+        const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir);
+BOOL WINAPI D3DXSphereBoundProbe(const D3DXVECTOR3 *center, FLOAT radius,
+        const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir);
+HRESULT WINAPI D3DXCleanMesh(D3DXCLEANTYPE clean_type, ID3DXMesh *mesh_in, const DWORD *adjacency_in,
+        ID3DXMesh **mesh_out, DWORD *adjacency_out, ID3DXBuffer **errors);
+HRESULT WINAPI D3DXConcatenateMeshes(struct ID3DXMesh **meshes, UINT mesh_count, DWORD flags,
+        const D3DXMATRIX *geometry_matrices, const D3DXMATRIX *texture_matrices,
+        const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXComputeBoundingBox(const D3DXVECTOR3 *first_pos, DWORD num_vertices,
+        DWORD stride, D3DXVECTOR3 *vmin, D3DXVECTOR3 *vmax);
+HRESULT WINAPI D3DXComputeBoundingSphere(const D3DXVECTOR3 *first_pos, DWORD num_vertices,
+        DWORD stride, D3DXVECTOR3 *center, FLOAT *radius);
+HRESULT WINAPI D3DXComputeIMTFromPerTexelSignal(ID3DXMesh *mesh, DWORD texture_idx, float *texel_signal,
+        UINT width, UINT height, UINT signal_dimension, UINT component_count, DWORD flags,
+        LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeIMTFromPerVertexSignal(ID3DXMesh *mesh, const float *vertex_signal,
+        UINT signal_dimension, UINT signal_stride, DWORD flags,
+        LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeIMTFromSignal(ID3DXMesh *mesh, DWORD texture_idx, UINT signal_dimension,
+        float max_uv_distance, DWORD flags, LPD3DXIMTSIGNALCALLBACK signal_cb, void *signal_ctx,
+        LPD3DXUVATLASCB status_cb, void *status_ctx, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeIMTFromTexture(struct ID3DXMesh *mesh, struct IDirect3DTexture9 *texture,
+        DWORD texture_idx, DWORD options, LPD3DXUVATLASCB cb, void *ctx, struct ID3DXBuffer **out);
+HRESULT WINAPI D3DXComputeNormals(ID3DXBaseMesh *mesh, const DWORD *adjacency);
+HRESULT WINAPI D3DXComputeTangentFrameEx(ID3DXMesh *mesh_in, DWORD texture_in_semantic, DWORD texture_in_idx,
+        DWORD u_partial_out_semantic, DWORD u_partial_out_idx, DWORD v_partial_out_semantic,
+        DWORD v_partial_out_idx, DWORD normal_out_semantic, DWORD normal_out_idx, DWORD flags,
+        const DWORD *adjacency, float partial_edge_threshold, float singular_point_threshold,
+        float normal_edge_threshold, ID3DXMesh **mesh_out, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeTangent(ID3DXMesh *mesh, DWORD stage, DWORD tangent_idx,
+        DWORD binorm_idx, DWORD wrap, const DWORD *adjacency);
+HRESULT WINAPI D3DXConvertMeshSubsetToSingleStrip(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id,
+        DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count);
+HRESULT WINAPI D3DXConvertMeshSubsetToStrips(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id,
+        DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count,
+        struct ID3DXBuffer **strip_lengths, DWORD *strip_count);
+HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD, D3DVERTEXELEMENT9[MAX_FVF_DECL_SIZE]);
+HRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *decl, DWORD *fvf);
+HRESULT WINAPI D3DXGenerateOutputDecl(D3DVERTEXELEMENT9 *decl_out, const D3DVERTEXELEMENT9 *decl_in);
+HRESULT WINAPI D3DXGeneratePMesh(ID3DXMesh *mesh, const DWORD *adjacency,
+        const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights,
+        DWORD min_value, DWORD flags, ID3DXPMesh **pmesh);
+HRESULT WINAPI D3DXIntersect(ID3DXBaseMesh *mesh, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction,
+        BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count);
+HRESULT WINAPI D3DXIntersectSubset(ID3DXBaseMesh *mesh, DWORD attribute_id, const D3DXVECTOR3 *ray_position,
+        const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance,
+        ID3DXBuffer **hits, DWORD *hit_count);
+BOOL WINAPI D3DXIntersectTri(const D3DXVECTOR3 *vtx0, const D3DXVECTOR3 *vtx1,
+        const D3DXVECTOR3 *vtx2, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir, FLOAT *u,
+        FLOAT *v, FLOAT *dist);
+HRESULT WINAPI D3DXOptimizeFaces(const void *indices, UINT face_count,
+        UINT vertex_count, BOOL idx_32bit, DWORD *face_remap);
+HRESULT WINAPI D3DXOptimizeVertices(const void *indices, UINT face_count,
+        UINT vertex_count, BOOL idx_32bit, DWORD *vertex_remap);
+HRESULT WINAPI D3DXRectPatchSize(const FLOAT *segment_count, DWORD *num_triangles,
+        DWORD *num_vertices);
+HRESULT WINAPI D3DXSHPRTCompSuperCluster(UINT *cluster_ids, ID3DXMesh *scene, UINT max_cluster_count,
+        UINT cluster_count, UINT *scluster_ids, UINT *scluster_count);
+HRESULT WINAPI D3DXSHPRTCompSplitMeshSC(UINT *cluster_idx, UINT vertex_count, UINT cluster_count, UINT *scluster_ids,
+        UINT scluster_count, void *index_buffer_in, BOOL ib_in_32bit, UINT face_count, ID3DXBuffer **index_buffer_out,
+        UINT *index_buffer_size, BOOL ib_out_32bit, ID3DXBuffer **face_remap, ID3DXBuffer **vertex_data,
+        UINT *vertex_data_length, UINT *sc_cluster_list, D3DXSHPRTSPLITMESHCLUSTERDATA *sc_data);
+HRESULT WINAPI D3DXSimplifyMesh(ID3DXMesh *mesh_in, const DWORD *adjacency,
+        const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value,
+        DWORD flags, ID3DXMesh **mesh_out);
+HRESULT WINAPI D3DXSplitMesh(ID3DXMesh *mesh_in, const DWORD *adjacency_in, const DWORD max_size,
+        const DWORD flags, DWORD *mesh_out_count, ID3DXBuffer **mesh_out, ID3DXBuffer **adjacency_out,
+        ID3DXBuffer **face_remap_out, ID3DXBuffer **vertex_remap_out);
+HRESULT WINAPI D3DXTesselateNPatches(ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count,
+        BOOL quad_interp, ID3DXMesh **mesh_out, ID3DXBuffer **adjacency_out);
+HRESULT WINAPI D3DXTesselateRectPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
+        const D3DVERTEXELEMENT9 *declaration, const D3DRECTPATCH_INFO *patch_info, struct ID3DXMesh *mesh);
+HRESULT WINAPI D3DXTesselateTriPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
+        const D3DVERTEXELEMENT9 *declaration, const D3DTRIPATCH_INFO *patch_info, struct ID3DXMesh *mesh);
+HRESULT WINAPI D3DXTriPatchSize(const FLOAT *segment_count, DWORD *num_triangles,
+        DWORD *num_vertices);
+HRESULT WINAPI D3DXUVAtlasCreate(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in,
+        UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges,
+        const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out,
+        ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, float *max_stretch_out, UINT *chart_count);
+HRESULT WINAPI D3DXUVAtlasPack(ID3DXMesh *mesh, UINT width, UINT height, float gutter, DWORD texture_idx,
+        const DWORD *partition_result_adjacency, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags,
+        ID3DXBuffer *face_partitioning);
+HRESULT WINAPI D3DXUVAtlasPartition(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in,
+        DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array,
+        LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out,
+        ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, ID3DXBuffer **adjacency_out,
+        float *max_stretch_out, UINT *chart_count);
+HRESULT WINAPI D3DXValidMesh(ID3DXMesh *mesh, const DWORD *adjacency, ID3DXBuffer **errors);
+HRESULT WINAPI D3DXValidPatchMesh(ID3DXPatchMesh *mesh, DWORD *degenerate_vertex_count,
+        DWORD *degenerate_patch_count, ID3DXBuffer **errors);
+HRESULT WINAPI D3DXWeldVertices(ID3DXMesh *mesh, DWORD flags, const D3DXWELDEPSILONS *epsilons,
+        const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap_out, ID3DXBuffer **vertex_remap_out);
+
+#ifdef __cplusplus
+}
+#endif
+
+DEFINE_GUID(DXFILEOBJ_XSkinMeshHeader,          0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2);
+DEFINE_GUID(DXFILEOBJ_VertexDuplicationIndices, 0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3);
+DEFINE_GUID(DXFILEOBJ_FaceAdjacency,            0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0x0c, 0xde, 0x04, 0x39, 0x8c);
+DEFINE_GUID(DXFILEOBJ_SkinWeights,              0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb);
+DEFINE_GUID(DXFILEOBJ_Patch,                    0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6);
+DEFINE_GUID(DXFILEOBJ_PatchMesh,                0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4d, 0xbf);
+DEFINE_GUID(DXFILEOBJ_PatchMesh9,               0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x02, 0xc0, 0xea);
+DEFINE_GUID(DXFILEOBJ_PMInfo,                   0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47);
+DEFINE_GUID(DXFILEOBJ_PMAttributeRange,         0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44);
+DEFINE_GUID(DXFILEOBJ_PMVSplitRecord,           0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c);
+DEFINE_GUID(DXFILEOBJ_FVFData,                  0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97);
+DEFINE_GUID(DXFILEOBJ_VertexElement,            0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0x0f, 0x33, 0x6f);
+DEFINE_GUID(DXFILEOBJ_DeclData,                 0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93);
+DEFINE_GUID(DXFILEOBJ_EffectFloats,             0xf1cfe2b3, 0x0de3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0x0a, 0x28, 0x2d);
+DEFINE_GUID(DXFILEOBJ_EffectString,             0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0x0e, 0x42);
+DEFINE_GUID(DXFILEOBJ_EffectDWord,              0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16);
+DEFINE_GUID(DXFILEOBJ_EffectParamFloats,        0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b);
+DEFINE_GUID(DXFILEOBJ_EffectParamString,        0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81);
+DEFINE_GUID(DXFILEOBJ_EffectParamDWord,         0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0x0f, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5);
+DEFINE_GUID(DXFILEOBJ_EffectInstance,           0xe331f7e4, 0x0559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f);
+DEFINE_GUID(DXFILEOBJ_AnimTicksPerSecond,       0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76);
+DEFINE_GUID(DXFILEOBJ_CompressedAnimationSet,   0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d);
+
+#define XSKINEXP_TEMPLATES \
+        "xof 0303txt 0032\
+        template XSkinMeshHeader \
+        { \
+            <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \
+            WORD nMaxSkinWeightsPerVertex; \
+            WORD nMaxSkinWeightsPerFace; \
+            WORD nBones; \
+        } \
+        template VertexDuplicationIndices \
+        { \
+            <B8D65549-D7C9-4995-89CF-53A9A8B031E3> \
+            DWORD nIndices; \
+            DWORD nOriginalVertices; \
+            array DWORD indices[nIndices]; \
+        } \
+        template FaceAdjacency \
+        { \
+            <A64C844A-E282-4756-8B80-250CDE04398C> \
+            DWORD nIndices; \
+            array DWORD indices[nIndices]; \
+        } \
+        template SkinWeights \
+        { \
+            <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \
+            STRING transformNodeName; \
+            DWORD nWeights; \
+            array DWORD vertexIndices[nWeights]; \
+            array float weights[nWeights]; \
+            Matrix4x4 matrixOffset; \
+        } \
+        template Patch \
+        { \
+            <A3EB5D44-FC22-429D-9AFB-3221CB9719A6> \
+            DWORD nControlIndices; \
+            array DWORD controlIndices[nControlIndices]; \
+        } \
+        template PatchMesh \
+        { \
+            <D02C95CC-EDBA-4305-9B5D-1820D7704BBF> \
+            DWORD nVertices; \
+            array Vector vertices[nVertices]; \
+            DWORD nPatches; \
+            array Patch patches[nPatches]; \
+            [ ... ] \
+        } \
+        template PatchMesh9 \
+        { \
+            <B9EC94E1-B9A6-4251-BA18-94893F02C0EA> \
+            DWORD Type; \
+            DWORD Degree; \
+            DWORD Basis; \
+            DWORD nVertices; \
+            array Vector vertices[nVertices]; \
+            DWORD nPatches; \
+            array Patch patches[nPatches]; \
+            [ ... ] \
+        } template EffectFloats \
+        { \
+            <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D> \
+            DWORD nFloats; \
+            array float Floats[nFloats]; \
+        } \
+        template EffectString \
+        { \
+            <D55B097E-BDB6-4c52-B03D-6051C89D0E42> \
+            STRING Value; \
+        } \
+        template EffectDWord \
+        { \
+            <622C0ED0-956E-4da9-908A-2AF94F3CE716> \
+            DWORD Value; \
+        } template EffectParamFloats \
+        { \
+            <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \
+            STRING ParamName; \
+            DWORD nFloats; \
+            array float Floats[nFloats]; \
+        } template EffectParamString \
+        { \
+            <1DBC4C88-94C1-46ee-9076-2C28818C9481> \
+            STRING ParamName; \
+            STRING Value; \
+        } \
+        template EffectParamDWord \
+        { \
+            <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5> \
+            STRING ParamName; \
+            DWORD Value; \
+        } \
+        template EffectInstance \
+        { \
+            <E331F7E4-0559-4cc2-8E99-1CEC1657928F> \
+            STRING EffectFilename; \
+            [ ... ] \
+        } template AnimTicksPerSecond \
+        { \
+            <9E415A43-7BA6-4a73-8743-B73D47E88476> \
+            DWORD AnimTicksPerSecond; \
+        } \
+        template CompressedAnimationSet \
+        { \
+            <7F9B00B3-F125-4890-876E-1C42BF697C4D> \
+            DWORD CompressedBlockSize; \
+            FLOAT TicksPerSec; \
+            DWORD PlaybackType; \
+            DWORD BufferLength; \
+            array DWORD CompressedData[BufferLength]; \
+        } "
+
+#define XEXTENSIONS_TEMPLATES \
+        "xof 0303txt 0032\
+        template FVFData \
+        { \
+            <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897> \
+            DWORD dwFVF; \
+            DWORD nDWords; \
+            array DWORD data[nDWords]; \
+        } \
+        template VertexElement \
+        { \
+            <F752461C-1E23-48f6-B9F8-8350850F336F> \
+            DWORD Type; \
+            DWORD Method; \
+            DWORD Usage; \
+            DWORD UsageIndex; \
+        } \
+        template DeclData \
+        { \
+            <BF22E553-292C-4781-9FEA-62BD554BDD93> \
+            DWORD nElements; \
+            array VertexElement Elements[nElements]; \
+            DWORD nDWords; \
+            array DWORD data[nDWords]; \
+        } \
+        template PMAttributeRange \
+        { \
+            <917E0427-C61E-4a14-9C64-AFE65F9E9844> \
+            DWORD iFaceOffset; \
+            DWORD nFacesMin; \
+            DWORD nFacesMax; \
+            DWORD iVertexOffset; \
+            DWORD nVerticesMin; \
+            DWORD nVerticesMax; \
+        } \
+        template PMVSplitRecord \
+        { \
+            <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \
+            DWORD iFaceCLW; \
+            DWORD iVlrOffset; \
+            DWORD iCode; \
+        } \
+        template PMInfo \
+        { \
+            <B6C3E656-EC8B-4b92-9B62-681659522947> \
+            DWORD nAttributes; \
+            array PMAttributeRange attributeRanges[nAttributes]; \
+            DWORD nMaxValence; \
+            DWORD nMinLogicalVertices; \
+            DWORD nMaxLogicalVertices; \
+            DWORD nVSplits; \
+            array PMVSplitRecord splitRecords[nVSplits]; \
+            DWORD nAttributeMispredicts; \
+            array DWORD attributeMispredicts[nAttributeMispredicts]; \
+        } "
+
+#endif /* __WINE_D3DX9MESH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h
new file mode 100644
index 0000000..e1cdd59
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h
@@ -0,0 +1,381 @@
+/*
+ * Copyright 2008 Luis Busquets
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "d3dx9.h"
+
+#ifndef __D3DX9SHADER_H__
+#define __D3DX9SHADER_H__
+
+#define D3DXSHADER_DEBUG                          0x1
+#define D3DXSHADER_SKIPVALIDATION                 0x2
+#define D3DXSHADER_SKIPOPTIMIZATION               0x4
+#define D3DXSHADER_PACKMATRIX_ROWMAJOR            0x8
+#define D3DXSHADER_PACKMATRIX_COLUMNMAJOR         0x10
+#define D3DXSHADER_PARTIALPRECISION               0x20
+#define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT        0x40
+#define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT        0x80
+#define D3DXSHADER_NO_PRESHADER                   0x100
+#define D3DXSHADER_AVOID_FLOW_CONTROL             0x200
+#define D3DXSHADER_PREFER_FLOW_CONTROL            0x400
+#define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000
+#define D3DXSHADER_IEEE_STRICTNESS                0x2000
+
+#define D3DXSHADER_OPTIMIZATION_LEVEL0            0x4000
+#define D3DXSHADER_OPTIMIZATION_LEVEL1            0x0
+#define D3DXSHADER_OPTIMIZATION_LEVEL2            0xC000
+#define D3DXSHADER_OPTIMIZATION_LEVEL3            0x8000
+
+#define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL        0x10000
+
+typedef const char *D3DXHANDLE;
+
+typedef enum _D3DXREGISTER_SET
+{
+    D3DXRS_BOOL,
+    D3DXRS_INT4,
+    D3DXRS_FLOAT4,
+    D3DXRS_SAMPLER,
+    D3DXRS_FORCE_DWORD = 0x7fffffff
+} D3DXREGISTER_SET, *LPD3DXREGISTER_SET;
+
+typedef enum D3DXPARAMETER_CLASS
+{
+    D3DXPC_SCALAR,
+    D3DXPC_VECTOR,
+    D3DXPC_MATRIX_ROWS,
+    D3DXPC_MATRIX_COLUMNS,
+    D3DXPC_OBJECT,
+    D3DXPC_STRUCT,
+    D3DXPC_FORCE_DWORD = 0x7fffffff,
+} D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;
+
+typedef enum D3DXPARAMETER_TYPE
+{
+    D3DXPT_VOID,
+    D3DXPT_BOOL,
+    D3DXPT_INT,
+    D3DXPT_FLOAT,
+    D3DXPT_STRING,
+    D3DXPT_TEXTURE,
+    D3DXPT_TEXTURE1D,
+    D3DXPT_TEXTURE2D,
+    D3DXPT_TEXTURE3D,
+    D3DXPT_TEXTURECUBE,
+    D3DXPT_SAMPLER,
+    D3DXPT_SAMPLER1D,
+    D3DXPT_SAMPLER2D,
+    D3DXPT_SAMPLER3D,
+    D3DXPT_SAMPLERCUBE,
+    D3DXPT_PIXELSHADER,
+    D3DXPT_VERTEXSHADER,
+    D3DXPT_PIXELFRAGMENT,
+    D3DXPT_VERTEXFRAGMENT,
+    D3DXPT_UNSUPPORTED,
+    D3DXPT_FORCE_DWORD = 0x7fffffff,
+} D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;
+
+typedef struct _D3DXCONSTANTTABLE_DESC
+{
+    const char *Creator;
+    DWORD Version;
+    UINT Constants;
+} D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;
+
+typedef struct _D3DXCONSTANT_DESC
+{
+    const char *Name;
+    D3DXREGISTER_SET RegisterSet;
+    UINT RegisterIndex;
+    UINT RegisterCount;
+    D3DXPARAMETER_CLASS Class;
+    D3DXPARAMETER_TYPE Type;
+    UINT Rows;
+    UINT Columns;
+    UINT Elements;
+    UINT StructMembers;
+    UINT Bytes;
+    const void *DefaultValue;
+} D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;
+
+DEFINE_GUID(IID_ID3DXConstantTable, 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b);
+
+#undef INTERFACE
+#define INTERFACE ID3DXConstantTable
+
+DECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG, Release)(THIS) PURE;
+    /*** ID3DXBuffer methods ***/
+    STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;
+    STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
+    /*** ID3DXConstantTable methods ***/
+    STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
+    STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
+    STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE;
+    STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
+    STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE constant, const char *name) PURE;
+    STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
+    STDMETHOD(SetDefaults)(THIS_ struct IDirect3DDevice9 *device) PURE;
+    STDMETHOD(SetValue)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const void *data, UINT data_size) PURE;
+    STDMETHOD(SetBool)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, BOOL value) PURE;
+    STDMETHOD(SetBoolArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const BOOL *values, UINT value_count) PURE;
+    STDMETHOD(SetInt)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT value) PURE;
+    STDMETHOD(SetIntArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const INT *values, UINT value_count) PURE;
+    STDMETHOD(SetFloat)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, float value) PURE;
+    STDMETHOD(SetFloatArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const float *values, UINT value_count) PURE;
+    STDMETHOD(SetVector)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *value) PURE;
+    STDMETHOD(SetVectorArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const D3DXVECTOR4 *values, UINT value_count) PURE;
+    STDMETHOD(SetMatrix)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE;
+    STDMETHOD(SetMatrixArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const D3DXMATRIX *values, UINT value_count) PURE;
+    STDMETHOD(SetMatrixPointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const D3DXMATRIX **values, UINT value_count) PURE;
+    STDMETHOD(SetMatrixTranspose)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const D3DXMATRIX *value) PURE;
+    STDMETHOD(SetMatrixTransposeArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const D3DXMATRIX *values, UINT value_count) PURE;
+    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+            const D3DXMATRIX **values, UINT value_count) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXConstantTable_QueryInterface(p,a,b)                      (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXConstantTable_AddRef(p)                                  (p)->lpVtbl->AddRef(p)
+#define ID3DXConstantTable_Release(p)                                 (p)->lpVtbl->Release(p)
+/*** ID3DXBuffer methods ***/
+#define ID3DXConstantTable_GetBufferPointer(p)                        (p)->lpVtbl->GetBufferPointer(p)
+#define ID3DXConstantTable_GetBufferSize(p)                           (p)->lpVtbl->GetBufferSize(p)
+/*** ID3DXConstantTable methods ***/
+#define ID3DXConstantTable_GetDesc(p,a)                               (p)->lpVtbl->GetDesc(p,a)
+#define ID3DXConstantTable_GetConstantDesc(p,a,b,c)                   (p)->lpVtbl->GetConstantDesc(p,a,b,c)
+#define ID3DXConstantTable_GetSamplerIndex(p,a)                       (p)->lpVtbl->GetSamplerIndex(p,a)
+#define ID3DXConstantTable_GetConstant(p,a,b)                         (p)->lpVtbl->GetConstant(p,a,b)
+#define ID3DXConstantTable_GetConstantByName(p,a,b)                   (p)->lpVtbl->GetConstantByName(p,a,b)
+#define ID3DXConstantTable_GetConstantElement(p,a,b)                  (p)->lpVtbl->GetConstantElement(p,a,b)
+#define ID3DXConstantTable_SetDefaults(p,a)                           (p)->lpVtbl->SetDefaults(p,a)
+#define ID3DXConstantTable_SetValue(p,a,b,c,d)                        (p)->lpVtbl->SetValue(p,a,b,c,d)
+#define ID3DXConstantTable_SetBool(p,a,b,c)                           (p)->lpVtbl->SetBool(p,a,b,c)
+#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d)                    (p)->lpVtbl->SetBoolArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetInt(p,a,b,c)                            (p)->lpVtbl->SetInt(p,a,b,c)
+#define ID3DXConstantTable_SetIntArray(p,a,b,c,d)                     (p)->lpVtbl->SetIntArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetFloat(p,a,b,c)                          (p)->lpVtbl->SetFloat(p,a,b,c)
+#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d)                   (p)->lpVtbl->SetFloatArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetVector(p,a,b,c)                         (p)->lpVtbl->SetVector(p,a,b,c)
+#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d)                  (p)->lpVtbl->SetVectorArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrix(p,a,b,c)                         (p)->lpVtbl->SetMatrix(p,a,b,c)
+#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d)                  (p)->lpVtbl->SetMatrixArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d)           (p)->lpVtbl->SetMatrixPointerArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c)                (p)->lpVtbl->SetMatrixTranspose(p,a,b,c)
+#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d)         (p)->lpVtbl->SetMatrixTransposeArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d)  (p)->lpVtbl->SetMatrixTransposePointerArray(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define ID3DXConstantTable_QueryInterface(p,a,b)                      (p)->QueryInterface(a,b)
+#define ID3DXConstantTable_AddRef(p)                                  (p)->AddRef()
+#define ID3DXConstantTable_Release(p)                                 (p)->Release()
+/*** ID3DXBuffer methods ***/
+#define ID3DXConstantTable_GetBufferPointer(p)                        (p)->GetBufferPointer()
+#define ID3DXConstantTable_GetBufferSize(p)                           (p)->GetBufferSize()
+/*** ID3DXConstantTable methods ***/
+#define ID3DXConstantTable_GetDesc(p,a)                               (p)->GetDesc(a)
+#define ID3DXConstantTable_GetConstantDesc(p,a,b,c)                   (p)->GetConstantDesc(a,b,c)
+#define ID3DXConstantTable_GetSamplerIndex(p,a)                       (p)->GetConstantDesc(a)
+#define ID3DXConstantTable_GetConstant(p,a,b)                         (p)->GetConstant(a,b)
+#define ID3DXConstantTable_GetConstantByName(p,a,b)                   (p)->GetConstantByName(a,b)
+#define ID3DXConstantTable_GetConstantElement(p,a,b)                  (p)->GetConstantElement(a,b)
+#define ID3DXConstantTable_SetDefaults(p,a)                           (p)->SetDefaults(a)
+#define ID3DXConstantTable_SetValue(p,a,b,c,d)                        (p)->SetValue(a,b,c,d)
+#define ID3DXConstantTable_SetBool(p,a,b,c)                           (p)->SetBool(a,b,c)
+#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d)                    (p)->SetBoolArray(a,b,c,d)
+#define ID3DXConstantTable_SetInt(p,a,b,c)                            (p)->SetInt(a,b,c)
+#define ID3DXConstantTable_SetIntArray(p,a,b,c,d)                     (p)->SetIntArray(a,b,c,d)
+#define ID3DXConstantTable_SetFloat(p,a,b,c)                          (p)->SetFloat(a,b,c)
+#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d)                   (p)->SetFloatArray(a,b,c,d)
+#define ID3DXConstantTable_SetVector(p,a,b,c)                         (p)->SetVector(a,b,c)
+#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d)                  (p)->SetVectorArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrix(p,a,b,c)                         (p)->SetMatrix(a,b,c)
+#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d)                  (p)->SetMatrixArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d)           (p)->SetMatrixPointerArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c)                (p)->SetMatrixTranspose(a,b,c)
+#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d)         (p)->SetMatrixTransposeArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d)  (p)->SetMatrixTransposePointerArray(a,b,c,d)
+#endif
+
+typedef struct ID3DXConstantTable *LPD3DXCONSTANTTABLE;
+
+typedef struct _D3DXMACRO
+{
+    const char *Name;
+    const char *Definition;
+} D3DXMACRO, *LPD3DXMACRO;
+
+typedef struct _D3DXSEMANTIC {
+    UINT Usage;
+    UINT UsageIndex;
+} D3DXSEMANTIC, *LPD3DXSEMANTIC;
+
+typedef enum _D3DXINCLUDE_TYPE
+{
+    D3DXINC_LOCAL,
+    D3DXINC_SYSTEM,
+    D3DXINC_FORCE_DWORD = 0x7fffffff,
+} D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;
+
+#define INTERFACE ID3DXInclude
+
+DECLARE_INTERFACE(ID3DXInclude)
+{
+    STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE include_type, const char *filename,
+            const void *parent_data, const void **data, UINT *bytes) PURE;
+    STDMETHOD(Close)(THIS_ const void *data) PURE;
+};
+#undef INTERFACE
+
+#define ID3DXInclude_Open(p,a,b,c,d,e)  (p)->lpVtbl->Open(p,a,b,c,d,e)
+#define ID3DXInclude_Close(p,a)         (p)->lpVtbl->Close(p,a)
+
+typedef struct ID3DXInclude *LPD3DXINCLUDE;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char * WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device);
+UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code);
+DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code);
+const char * WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device);
+HRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size);
+HRESULT WINAPI D3DXGetShaderSamplers(const DWORD *byte_code, const char **samplers, UINT *count);
+
+HRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXAssembleShaderFromFile WINELIB_NAME_AW(D3DXAssembleShaderFromFile)
+
+HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXAssembleShaderFromResource WINELIB_NAME_AW(D3DXAssembleShaderFromResource)
+
+HRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines,
+        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+
+HRESULT WINAPI D3DXCompileShader(const char *src_data, UINT data_len, const D3DXMACRO *defines,
+        ID3DXInclude *include, const char *function_name, const char *profile, DWORD flags,
+        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+
+HRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines,
+        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+HRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
+        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+#define D3DXCompileShaderFromFile WINELIB_NAME_AW(D3DXCompileShaderFromFile)
+
+HRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
+        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+HRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
+        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+#define D3DXCompileShaderFromResource WINELIB_NAME_AW(D3DXCompileShaderFromResource)
+
+HRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines,
+        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+
+HRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines,
+        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
+        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXPreprocessShaderFromFile WINELIB_NAME_AW(D3DXPreprocessShaderFromFile)
+
+HRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
+        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
+        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXPreprocessShaderFromResource WINELIB_NAME_AW(D3DXPreprocessShaderFromResource)
+
+HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table);
+
+HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table);
+
+#ifdef __cplusplus
+}
+#endif
+
+typedef struct _D3DXSHADER_CONSTANTTABLE
+{
+    DWORD Size;
+    DWORD Creator;
+    DWORD Version;
+    DWORD Constants;
+    DWORD ConstantInfo;
+    DWORD Flags;
+    DWORD Target;
+} D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;
+
+typedef struct _D3DXSHADER_CONSTANTINFO
+{
+    DWORD Name;
+    WORD  RegisterSet;
+    WORD  RegisterIndex;
+    WORD  RegisterCount;
+    WORD  Reserved;
+    DWORD TypeInfo;
+    DWORD DefaultValue;
+} D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;
+
+typedef struct _D3DXSHADER_TYPEINFO
+{
+    WORD  Class;
+    WORD  Type;
+    WORD  Rows;
+    WORD  Columns;
+    WORD  Elements;
+    WORD  StructMembers;
+    DWORD StructMemberInfo;
+} D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;
+
+typedef struct _D3DXSHADER_STRUCTMEMBERINFO
+{
+    DWORD Name;
+    DWORD TypeInfo;
+} D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;
+
+#endif /* __D3DX9SHADER_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h
new file mode 100644
index 0000000..498e991
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2010 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "d3dx9.h"
+
+#ifndef __D3DX9SHAPE_H__
+#define __D3DX9SHAPE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateBox(struct IDirect3DDevice9 *device, float width, float height,
+        float depth, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1, float radius2,
+        float length, UINT slices, UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateSphere(struct IDirect3DDevice9 *device, float radius, UINT slices,
+        UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateTeapot(struct IDirect3DDevice9 *device,
+        struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateTextA(struct IDirect3DDevice9 *device, HDC hdc, const char *text, float deviation,
+        float extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics);
+HRESULT WINAPI D3DXCreateTextW(struct IDirect3DDevice9 *device, HDC hdc, const WCHAR *text, float deviation,
+        FLOAT extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics);
+#define D3DXCreateText WINELIB_NAME_AW(D3DXCreateText)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DX9SHAPE_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h
new file mode 100644
index 0000000..7c93b39
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h
@@ -0,0 +1,358 @@
+/*
+ * Copyright (C) 2008 Tony Wasserka
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __WINE_D3DX9TEX_H
+#define __WINE_D3DX9TEX_H
+
+/**********************************************
+ ***************** Definitions ****************
+ **********************************************/
+#define D3DX_FILTER_NONE                 0x00000001
+#define D3DX_FILTER_POINT                0x00000002
+#define D3DX_FILTER_LINEAR               0x00000003
+#define D3DX_FILTER_TRIANGLE             0x00000004
+#define D3DX_FILTER_BOX                  0x00000005
+#define D3DX_FILTER_MIRROR_U             0x00010000
+#define D3DX_FILTER_MIRROR_V             0x00020000
+#define D3DX_FILTER_MIRROR_W             0x00040000
+#define D3DX_FILTER_MIRROR               0x00070000
+#define D3DX_FILTER_DITHER               0x00080000
+#define D3DX_FILTER_DITHER_DIFFUSION     0x00100000
+#define D3DX_FILTER_SRGB_IN              0x00200000
+#define D3DX_FILTER_SRGB_OUT             0x00400000
+#define D3DX_FILTER_SRGB                 0x00600000
+
+#define D3DX_NORMALMAP_MIRROR_U          0x00010000
+#define D3DX_NORMALMAP_MIRROR_V          0x00020000
+#define D3DX_NORMALMAP_MIRROR            0x00030000
+#define D3DX_NORMALMAP_INVERTSIGN        0x00080000
+#define D3DX_NORMALMAP_COMPUTE_OCCLUSION 0x00100000
+
+#define D3DX_CHANNEL_RED                 0x00000001
+#define D3DX_CHANNEL_BLUE                0x00000002
+#define D3DX_CHANNEL_GREEN               0x00000004
+#define D3DX_CHANNEL_ALPHA               0x00000008
+#define D3DX_CHANNEL_LUMINANCE           0x00000010
+
+/**********************************************
+ ****************** Typedefs ******************
+ **********************************************/
+typedef enum _D3DXIMAGE_FILEFORMAT
+{
+    D3DXIFF_BMP,
+    D3DXIFF_JPG,
+    D3DXIFF_TGA,
+    D3DXIFF_PNG,
+    D3DXIFF_DDS,
+    D3DXIFF_PPM,
+    D3DXIFF_DIB,
+    D3DXIFF_HDR,
+    D3DXIFF_PFM,
+    D3DXIFF_FORCE_DWORD = 0x7fffffff
+} D3DXIMAGE_FILEFORMAT;
+
+typedef struct _D3DXIMAGE_INFO
+{
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+    UINT MipLevels;
+    D3DFORMAT Format;
+    D3DRESOURCETYPE ResourceType;
+    D3DXIMAGE_FILEFORMAT ImageFileFormat;
+} D3DXIMAGE_INFO;
+
+/**********************************************
+ ****************** Functions *****************
+ **********************************************/
+/* Typedefs for callback functions */
+typedef void (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *out, const D3DXVECTOR2 *texcoord,
+        const D3DXVECTOR2 *texelsize, void *data);
+typedef void (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *out, const D3DXVECTOR3 *texcoord,
+        const D3DXVECTOR3 *texelsize, void *data);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Image Information */
+HRESULT WINAPI D3DXGetImageInfoFromFileA(const char *file, D3DXIMAGE_INFO *info);
+HRESULT WINAPI D3DXGetImageInfoFromFileW(const WCHAR *file, D3DXIMAGE_INFO *info);
+#define        D3DXGetImageInfoFromFile WINELIB_NAME_AW(D3DXGetImageInfoFromFile)
+
+HRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, const char *resource, D3DXIMAGE_INFO *info);
+HRESULT WINAPI D3DXGetImageInfoFromResourceW(HMODULE module, const WCHAR *resource, D3DXIMAGE_INFO *info);
+#define        D3DXGetImageInfoFromResource WINELIB_NAME_AW(D3DXGetImageInfoFromResource)
+
+HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT data_size, D3DXIMAGE_INFO *info);
+
+
+/* Surface Loading/Saving */
+HRESULT WINAPI D3DXLoadSurfaceFromFileA(struct IDirect3DSurface9 *destsurface,
+        const PALETTEENTRY *destpalette, const RECT *destrect, const char *srcfile,
+        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadSurfaceFromFileW(struct IDirect3DSurface9 *destsurface,
+        const PALETTEENTRY *destpalette, const RECT *destrect, const WCHAR *srcfile,
+        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadSurfaceFromFile WINELIB_NAME_AW(D3DXLoadSurfaceFromFile)
+
+HRESULT WINAPI D3DXLoadSurfaceFromResourceA(struct IDirect3DSurface9 *destsurface,
+        const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const char *resource,
+        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadSurfaceFromResourceW(struct IDirect3DSurface9 *destsurface,
+        const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const WCHAR *resource,
+        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadSurfaceFromResource WINELIB_NAME_AW(D3DXLoadSurfaceFromResource)
+
+HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(struct IDirect3DSurface9 *destsurface,
+        const PALETTEENTRY *destpalette, const RECT *destrect, const void *srcdata, UINT srcdatasize,
+        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+
+HRESULT WINAPI D3DXLoadSurfaceFromSurface(struct IDirect3DSurface9 *destsurface,
+        const PALETTEENTRY *destpalette, const RECT *destrect, struct IDirect3DSurface9 *srcsurface,
+        const PALETTEENTRY *srcpalette, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey);
+
+HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
+        const PALETTEENTRY *dst_palette, const RECT *dst_rect, const void *src_memory,
+        D3DFORMAT src_format, UINT src_pitch, const PALETTEENTRY *src_palette, const RECT *src_rect,
+        DWORD filter, D3DCOLOR color_key);
+
+HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(struct ID3DXBuffer **destbuffer,
+        D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DSurface9 *srcsurface,
+        const PALETTEENTRY *srcpalette, const RECT *srcrect);
+
+HRESULT WINAPI D3DXSaveSurfaceToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect);
+HRESULT WINAPI D3DXSaveSurfaceToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect);
+#define D3DXSaveSurfaceToFile WINELIB_NAME_AW(D3DXSaveSurfaceToFile)
+
+
+/* Volume Loading/Saving */
+HRESULT WINAPI D3DXLoadVolumeFromFileA(struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const char *srcfile,
+        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadVolumeFromFileW( struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const WCHAR *srcfile,
+        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadVolumeFromFile WINELIB_NAME_AW(D3DXLoadVolumeFromFile)
+
+HRESULT WINAPI D3DXLoadVolumeFromResourceA(struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const char *resource,
+        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadVolumeFromResourceW(struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const WCHAR *resource,
+        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadVolumeFromResource WINELIB_NAME_AW(D3DXLoadVolumeFromResource)
+
+HRESULT WINAPI D3DXLoadVolumeFromFileInMemory(struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcdata, UINT srcdatasize,
+        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+
+HRESULT WINAPI D3DXLoadVolumeFromVolume(struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, struct IDirect3DVolume9 *srcvolume,
+        const PALETTEENTRY *srcpalette, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey);
+
+HRESULT WINAPI D3DXLoadVolumeFromMemory(struct IDirect3DVolume9 *destvolume,
+        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcmemory,
+        D3DFORMAT srcformat, UINT srcrowpitch, UINT srcslicepitch, const PALETTEENTRY *srcpalette,
+        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey);
+
+HRESULT WINAPI D3DXSaveVolumeToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox);
+HRESULT WINAPI D3DXSaveVolumeToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox);
+#define D3DXSaveVolumeToFile WINELIB_NAME_AW(D3DXSaveVolumeToFile)
+
+
+/* Texture, cube texture and volume texture creation */
+HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height,
+        UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);
+HRESULT WINAPI D3DXCheckCubeTextureRequirements(struct IDirect3DDevice9 *device, UINT *size,
+        UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);
+HRESULT WINAPI D3DXCheckVolumeTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height,
+        UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);
+
+HRESULT WINAPI D3DXCreateTexture(struct IDirect3DDevice9 *device, UINT width, UINT height,
+        UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateCubeTexture(struct IDirect3DDevice9 *device, UINT size,
+        UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateVolumeTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT depth,
+        UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DVolumeTexture9 **volume);
+
+HRESULT WINAPI D3DXCreateTextureFromFileA(struct IDirect3DDevice9 *device,
+        const char *srcfile, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromFileW(struct IDirect3DDevice9 *device,
+        const WCHAR *srcfile, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromFile WINELIB_NAME_AW(D3DXCreateTextureFromFile)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromFileA(struct IDirect3DDevice9 *device,
+        const char *srcfile, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileW(struct IDirect3DDevice9 *device,
+        const WCHAR *srcfile, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromFile WINELIB_NAME_AW(D3DXCreateCubeTextureFromFile)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileA(struct IDirect3DDevice9 *device,
+        const char *srcfile, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileW(struct IDirect3DDevice9 *device,
+        const WCHAR *srcfile, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromFile WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFile)
+
+HRESULT WINAPI D3DXCreateTextureFromResourceA(struct IDirect3DDevice9 *device,
+        HMODULE srcmodule, const char *resource, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromResourceW(struct IDirect3DDevice9 *device,
+        HMODULE srcmodule, const WCHAR *resource, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromResource WINELIB_NAME_AW(D3DXCreateTextureFromResource)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceA(struct IDirect3DDevice9 *device,
+        HMODULE srcmodule, const char *resource, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceW(struct IDirect3DDevice9 *device,
+        HMODULE srcmodule, const WCHAR *resource, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromResource WINELIB_NAME_AW(D3DXCreateCubeTextureFromResource)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceA(struct IDirect3DDevice9 *device,
+        HMODULE srcmodule, const char *resource, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceW(struct IDirect3DDevice9 *device,
+        HMODULE srcmodule, const WCHAR *resource, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromResource WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResource)
+
+HRESULT WINAPI D3DXCreateTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+        UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+        UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromFileEx WINELIB_NAME_AW(D3DXCreateTextureFromFileEx)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+        UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+        UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromFileEx)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+        UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+        UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFileEx)
+
+HRESULT WINAPI D3DXCreateTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const char *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const WCHAR *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateTextureFromResourceEx)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const char *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const WCHAR *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromResourceEx)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const char *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+        const WCHAR *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResourceEx)
+
+HRESULT WINAPI D3DXCreateTextureFromFileInMemory(struct IDirect3DDevice9 *device,
+        const void *srcdata, UINT srcdatasize, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory(struct IDirect3DDevice9 *device,
+        const void *srcdata, UINT srcdatasize, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory(struct IDirect3DDevice9 *device,
+        const void *srcdata, UINT srcdatasize, struct IDirect3DVolumeTexture9 **volume);
+
+HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,
+        UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,
+        UINT srcdatasize, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,
+        UINT srcdatasize, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+
+HRESULT WINAPI D3DXSaveTextureToFileInMemory(struct ID3DXBuffer **destbuffer, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);
+HRESULT WINAPI D3DXSaveTextureToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);
+HRESULT WINAPI D3DXSaveTextureToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,
+        struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);
+#define D3DXSaveTextureToFile WINELIB_NAME_AW(D3DXSaveTextureToFile)
+
+/* Other functions */
+HRESULT WINAPI D3DXFilterTexture(struct IDirect3DBaseTexture9 *texture,
+        const PALETTEENTRY *palette, UINT srclevel, DWORD filter);
+#define D3DXFilterCubeTexture D3DXFilterTexture
+#define D3DXFilterVolumeTexture D3DXFilterTexture
+
+HRESULT WINAPI D3DXFillTexture(struct IDirect3DTexture9 *texture, LPD3DXFILL2D function, void *data);
+HRESULT WINAPI D3DXFillCubeTexture(struct IDirect3DCubeTexture9 *cube, LPD3DXFILL3D function, void *data);
+HRESULT WINAPI D3DXFillVolumeTexture(struct IDirect3DVolumeTexture9 *volume, LPD3DXFILL3D function, void *data);
+
+HRESULT WINAPI D3DXFillTextureTX(struct IDirect3DTexture9 *texture, const DWORD *function,
+        const D3DXVECTOR4 *constants, UINT numconstants);
+HRESULT WINAPI D3DXFillCubeTextureTX(struct IDirect3DCubeTexture9 *cube, const DWORD *function,
+        const D3DXVECTOR4 *constants, UINT numconstants);
+HRESULT WINAPI D3DXFillVolumeTextureTX(struct IDirect3DVolumeTexture9 *volume, const DWORD *function,
+        const D3DXVECTOR4 *constants, UINT numconstants);
+
+HRESULT WINAPI D3DXComputeNormalMap(IDirect3DTexture9 *texture, IDirect3DTexture9 *srctexture,
+        const PALETTEENTRY *srcpalette, DWORD flags, DWORD channel, float amplitude);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9TEX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h
new file mode 100644
index 0000000..97cf908
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2011 Dylan Smith
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DX9XOF_H
+#define __WINE_D3DX9XOF_H
+
+#include "d3dx9.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef DWORD D3DXF_FILEFORMAT;
+#define D3DXF_FILEFORMAT_BINARY     0
+#define D3DXF_FILEFORMAT_TEXT       1
+#define D3DXF_FILEFORMAT_COMPRESSED 2
+
+typedef DWORD D3DXF_FILESAVEOPTIONS;
+#define D3DXF_FILESAVE_TOFILE   0x00
+#define D3DXF_FILESAVE_TOWFILE  0x01
+
+typedef DWORD D3DXF_FILELOADOPTIONS;
+#define D3DXF_FILELOAD_FROMFILE     0x00
+#define D3DXF_FILELOAD_FROMWFILE    0x01
+#define D3DXF_FILELOAD_FROMRESOURCE 0x02
+#define D3DXF_FILELOAD_FROMMEMORY   0x03
+
+typedef struct _D3DXF_FILELOADRESOURCE
+{
+    HMODULE hModule;
+    const char *lpName;
+    const char *lpType;
+} D3DXF_FILELOADRESOURCE;
+
+typedef struct _D3DXF_FILELOADMEMORY
+{
+    void *lpMemory;
+    SIZE_T dSize;
+} D3DXF_FILELOADMEMORY;
+
+
+#ifndef _NO_COM
+DEFINE_GUID(IID_ID3DXFile,           0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileSaveObject, 0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileSaveData,   0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileEnumObject, 0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileData,       0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+#endif /* _NO_COM */
+
+typedef interface ID3DXFile *LPD3DXFILE, **LPLPD3DXFILE;
+typedef interface ID3DXFileSaveObject *LPD3DXFILESAVEOBJECT, **LPLPD3DXFILESAVEOBJECT;
+typedef interface ID3DXFileSaveData *LPD3DXFILESAVEDATA, **LPLPD3DXFILESAVEDATA;
+typedef interface ID3DXFileEnumObject *LPD3DXFILEENUMOBJECT, **LPLPD3DXFILEENUMOBJECT;
+typedef interface ID3DXFileData *LPD3DXFILEDATA, **LPLPD3DXFILEDATA;
+
+STDAPI D3DXFileCreate(struct ID3DXFile **file);
+
+#define INTERFACE ID3DXFile
+DECLARE_INTERFACE_IID_(ID3DXFile,IUnknown,"cef08cf9-7b4f-4429-9624-2a690a933201")
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** ID3DXFile methods ***/
+    STDMETHOD(CreateEnumObject)(THIS_ const void *src, D3DXF_FILELOADOPTIONS type,
+            struct ID3DXFileEnumObject **enum_obj) PURE;
+    STDMETHOD(CreateSaveObject)(THIS_ const void *data, D3DXF_FILESAVEOPTIONS flags,
+            D3DXF_FILEFORMAT format, struct ID3DXFileSaveObject **save_obj) PURE;
+    STDMETHOD(RegisterTemplates)(THIS_ const void *data, SIZE_T data_size) PURE;
+    STDMETHOD(RegisterEnumTemplates)(THIS_ struct ID3DXFileEnumObject *enum_obj) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXFileSaveObject
+DECLARE_INTERFACE_IID_(ID3DXFileSaveObject,IUnknown,"cef08cfa-7b4f-4429-9624-2a690a933201")
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** ID3DXFileSaveObject methods ***/
+    STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE;
+    STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid,
+            SIZE_T data_size, const void *data, struct ID3DXFileSaveData **obj) PURE;
+    STDMETHOD(Save)(THIS) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXFileSaveData
+DECLARE_INTERFACE_IID_(ID3DXFileSaveData,IUnknown,"cef08cfb-7b4f-4429-9624-2a690a933201")
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** ID3DXFileSaveObject methods ***/
+    STDMETHOD(GetSave)(THIS_ ID3DXFileSaveObject **save_obj) PURE;
+    STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE;
+    STDMETHOD(GetId)(THIS_ LPGUID) PURE;
+    STDMETHOD(GetType)(THIS_ GUID*) PURE;
+    STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid,
+            SIZE_T data_size, const void *data, ID3DXFileSaveData **obj) PURE;
+    STDMETHOD(AddDataReference)(THIS_ const char *name, const GUID *id) PURE;
+};
+#undef INTERFACE
+
+
+#define INTERFACE ID3DXFileEnumObject
+DECLARE_INTERFACE_IID_(ID3DXFileEnumObject,IUnknown,"cef08cfc-7b4f-4429-9624-2a690a933201")
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** ID3DXFileEnumObject methods ***/
+    STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE;
+    STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE;
+    STDMETHOD(GetChild)(THIS_ SIZE_T id, struct ID3DXFileData **child) PURE;
+    STDMETHOD(GetDataObjectById)(THIS_ REFGUID guid, struct ID3DXFileData **obj) PURE;
+    STDMETHOD(GetDataObjectByName)(THIS_ const char *name, struct ID3DXFileData **obj) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXFileData
+DECLARE_INTERFACE_IID_(ID3DXFileData,IUnknown,"cef08cfd-7b4f-4429-9624-2a690a933201")
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** ID3DXFileData methods ***/
+    STDMETHOD(GetEnum)(THIS_ ID3DXFileEnumObject **enum_obj) PURE;
+    STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE;
+    STDMETHOD(GetId)(THIS_ LPGUID) PURE;
+    STDMETHOD(Lock)(THIS_ SIZE_T *data_size, const void **data) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetType)(THIS_ GUID*) PURE;
+    STDMETHOD_(BOOL,IsReference)(THIS) PURE;
+    STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE;
+    STDMETHOD(GetChild)(THIS_ SIZE_T id, ID3DXFileData **child) PURE;
+};
+#undef INTERFACE
+
+/* D3DX File errors */
+#define _FACD3DXF 0x876
+
+#define D3DXFERR_BADOBJECT          MAKE_HRESULT(1,_FACD3DXF,900)
+#define D3DXFERR_BADVALUE           MAKE_HRESULT(1,_FACD3DXF,901)
+#define D3DXFERR_BADTYPE            MAKE_HRESULT(1,_FACD3DXF,902)
+#define D3DXFERR_NOTFOUND           MAKE_HRESULT(1,_FACD3DXF,903)
+#define D3DXFERR_NOTDONEYET         MAKE_HRESULT(1,_FACD3DXF,904)
+#define D3DXFERR_FILENOTFOUND       MAKE_HRESULT(1,_FACD3DXF,905)
+#define D3DXFERR_RESOURCENOTFOUND   MAKE_HRESULT(1,_FACD3DXF,906)
+#define D3DXFERR_BADRESOURCE        MAKE_HRESULT(1,_FACD3DXF,907)
+#define D3DXFERR_BADFILETYPE        MAKE_HRESULT(1,_FACD3DXF,908)
+#define D3DXFERR_BADFILEVERSION     MAKE_HRESULT(1,_FACD3DXF,909)
+#define D3DXFERR_BADFILEFLOATSIZE   MAKE_HRESULT(1,_FACD3DXF,910)
+#define D3DXFERR_BADFILE            MAKE_HRESULT(1,_FACD3DXF,911)
+#define D3DXFERR_PARSEERROR         MAKE_HRESULT(1,_FACD3DXF,912)
+#define D3DXFERR_BADARRAYSIZE       MAKE_HRESULT(1,_FACD3DXF,913)
+#define D3DXFERR_BADDATAREFERENCE   MAKE_HRESULT(1,_FACD3DXF,914)
+#define D3DXFERR_NOMOREOBJECTS      MAKE_HRESULT(1,_FACD3DXF,915)
+#define D3DXFERR_NOMOREDATA         MAKE_HRESULT(1,_FACD3DXF,916)
+#define D3DXFERR_BADCACHEFILE       MAKE_HRESULT(1,_FACD3DXF,917)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9XOF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl
new file mode 100644
index 0000000..a5e19ac
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a1d-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBCreateCommand : IUnknown
+{
+    [local]
+    HRESULT CreateCommand([in] IUnknown *pUnkOuter,
+                          [in] REFIID riid,
+                          [out, iid_is(riid)] IUnknown **ppCommand);
+
+    [call_as(CreateCommand)]
+    HRESULT RemoteCreateCommand([in] IUnknown *pUnkOuter,
+                                [in] REFIID riid,
+                                [out, iid_is(riid)] IUnknown **ppCommand,
+                                [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl
new file mode 100644
index 0000000..4528815
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a5d-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBCreateSession : IUnknown
+{
+    [local]
+    HRESULT CreateSession([in] IUnknown *pUnkOuter,
+                          [in] REFIID riid,
+                          [out, iid_is(riid)] IUnknown **ppDBSession);
+
+    [call_as(CreateSession)]
+    HRESULT RemoteCreateSession([in] IUnknown *pUnkOuter,
+                                [in] REFIID riid,
+                                [out, iid_is(riid)] IUnknown **ppDBSession,
+                                [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl
new file mode 100644
index 0000000..4f1b262
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a7a-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBDataSourceAdmin : IUnknown
+{
+    [local]
+    HRESULT CreateDataSource([in] ULONG cPropertySets,
+                             [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[],
+                             [in] IUnknown *pUnkOuter,
+                             [in] REFIID riid,
+                             [out, iid_is(riid)] IUnknown **ppDBSession);
+
+    [call_as(CreateDataSource)]
+    HRESULT RemoteCreateDataSource([in] ULONG cPropertySets,
+                                   [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+                                   [in] IUnknown *pUnkOuter,
+                                   [in] REFIID riid,
+                                   [in, out, unique, iid_is(riid)] IUnknown **ppDBSession,
+                                   [in] ULONG cTotalProps,
+                                   [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+                                   [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT DestroyDataSource();
+
+    [call_as(DestroyDataSource)]
+    HRESULT RemoteDestroyDataSource([out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetCreationProperties([in] ULONG cPropertyIDSets,
+                                  [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+                                  [in, out] ULONG *pcPropertyInfoSets,
+                                  [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+                                  [out, annotation("__deref_out_z_opt")] OLECHAR **ppDescBuffer);
+
+    [call_as(GetCreationProperties)]
+    HRESULT RemoteGetCreationProperties([in] ULONG cPropertyIDSets,
+                                        [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+                                        [in, out] ULONG *pcPropertyInfoSets,
+                                        [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+                                        [in, out] DBCOUNTITEM *pcOffsets,
+                                        [out, size_is(,(ULONG)*pcOffsets)] DBBYTEOFFSET **prgDescOffsets,
+                                        [in, out] ULONG *pcbDescBuffer,
+                                        [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer,
+                                        [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT ModifyDataSource([in] ULONG cPropertySets,
+                             [in, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);
+
+    [call_as(ModifyDataSource)]
+    HRESULT RemoteModifyDataSource([in] ULONG cPropertySets,
+                                   [in, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+                                   [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h
new file mode 100644
index 0000000..bd5acf3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h
@@ -0,0 +1,1543 @@
+/*
+ * Declarations for DBGHELP
+ *
+ * Copyright (C) 2003 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DBGHELP_H
+#define __WINE_DBGHELP_H
+
+/* A set of documentation macros (see also imagehlp.h) */
+#ifndef __deref_out
+# define __deref_out
+#endif
+#ifndef __deref_out_opt
+# define __deref_out_opt
+#endif
+#ifndef __deref_opt_out
+# define __deref_opt_out
+#endif
+#ifndef __in
+# define __in
+#endif
+#ifndef __in_opt
+# define __in_opt
+#endif
+#ifndef __in_bcount
+# define __in_bcount(x)
+#endif
+#ifndef __in_bcount_opt
+# define __in_bcount_opt(x)
+#endif
+#ifndef __in_ecount
+# define __in_ecount(x)
+#endif
+#ifndef __inout
+# define __inout
+#endif
+#ifndef __inout_opt
+# define __inout_opt
+#endif
+#ifndef __inout_bcount
+# define __inout_bcount(x)
+#endif
+#ifndef __inout_ecount
+# define __inout_ecount(x)
+#endif
+#ifndef __out
+# define __out
+#endif
+#ifndef __out_opt
+# define __out_opt
+#endif
+#ifndef __out_bcount
+# define __out_bcount(x)
+#endif
+#ifndef __out_bcount_opt
+# define __out_bcount_opt(x)
+#endif
+#ifndef __out_ecount
+# define __out_ecount(x)
+#endif
+#ifndef __out_ecount_opt
+# define __out_ecount_opt(x)
+#endif
+#ifndef __out_xcount
+# define __out_xcount(x)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef _WIN64
+#ifndef _IMAGEHLP64
+#define _IMAGEHLP64
+#endif
+#endif
+
+#define IMAGEAPI WINAPI
+#define DBHLPAPI IMAGEAPI
+
+typedef struct _LOADED_IMAGE
+{
+    PSTR                        ModuleName;
+    HANDLE                      hFile;
+    PUCHAR                      MappedAddress;
+    PIMAGE_NT_HEADERS           FileHeader;
+    PIMAGE_SECTION_HEADER       LastRvaSection;
+    ULONG                       NumberOfSections;
+    PIMAGE_SECTION_HEADER       Sections;
+    ULONG                       Characteristics;
+    BOOLEAN                     fSystemImage;
+    BOOLEAN                     fDOSImage;
+    BOOLEAN                     fReadOnly;
+    UCHAR                       Version;
+    LIST_ENTRY                  Links;
+    ULONG                       SizeOfImage;
+} LOADED_IMAGE, *PLOADED_IMAGE;
+
+/*************************
+ *    IMAGEHLP equiv     *
+ *************************/
+
+typedef enum
+{
+    AddrMode1616,
+    AddrMode1632,
+    AddrModeReal,
+    AddrModeFlat
+} ADDRESS_MODE;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define ADDRESS ADDRESS64
+#define LPADDRESS LPADDRESS64
+#else
+typedef struct _tagADDRESS
+{
+    DWORD                       Offset;
+    WORD                        Segment;
+    ADDRESS_MODE                Mode;
+} ADDRESS, *LPADDRESS;
+#endif
+
+typedef struct _tagADDRESS64
+{
+    DWORD64                     Offset;
+    WORD                        Segment;
+    ADDRESS_MODE                Mode;
+} ADDRESS64, *LPADDRESS64;
+
+#define SYMF_OMAP_GENERATED   0x00000001
+#define SYMF_OMAP_MODIFIED    0x00000002
+#define SYMF_USER_GENERATED   0x00000004
+#define SYMF_REGISTER         0x00000008
+#define SYMF_REGREL           0x00000010
+#define SYMF_FRAMEREL         0x00000020
+#define SYMF_PARAMETER        0x00000040
+#define SYMF_LOCAL            0x00000080
+#define SYMF_CONSTANT         0x00000100
+#define SYMF_EXPORT           0x00000200
+#define SYMF_FORWARDER        0x00000400
+#define SYMF_FUNCTION         0x00000800
+#define SYMF_VIRTUAL          0x00001000
+#define SYMF_THUNK            0x00002000
+#define SYMF_TLSREL           0x00004000
+
+typedef enum 
+{
+    SymNone = 0,
+    SymCoff,
+    SymCv,
+    SymPdb,
+    SymExport,
+    SymDeferred,
+    SymSym,
+    SymDia,
+    SymVirtual,
+    NumSymTypes
+} SYM_TYPE;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
+#define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64
+#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
+#define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64
+#else
+typedef struct _IMAGEHLP_SYMBOL
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       Address;
+    DWORD                       Size;
+    DWORD                       Flags;
+    DWORD                       MaxNameLength;
+    CHAR                        Name[1];
+} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
+
+typedef struct _IMAGEHLP_SYMBOLW
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       Address;
+    DWORD                       Size;
+    DWORD                       Flags;
+    DWORD                       MaxNameLength;
+    WCHAR                       Name[1];
+} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
+#endif
+
+typedef struct _IMAGEHLP_SYMBOL64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     Address;
+    DWORD                       Size;
+    DWORD                       Flags;
+    DWORD                       MaxNameLength;
+    CHAR                        Name[1];
+} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
+
+typedef struct _IMAGEHLP_SYMBOLW64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     Address;
+    DWORD                       Size;
+    DWORD                       Flags;
+    DWORD                       MaxNameLength;
+    WCHAR                       Name[1];
+} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
+#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
+#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
+#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
+#else
+typedef struct _IMAGEHLP_MODULE
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       BaseOfImage;
+    DWORD                       ImageSize;
+    DWORD                       TimeDateStamp;
+    DWORD                       CheckSum;
+    DWORD                       NumSyms;
+    SYM_TYPE                    SymType;
+    CHAR                        ModuleName[32];
+    CHAR                        ImageName[256];
+    CHAR                        LoadedImageName[256];
+} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
+
+typedef struct _IMAGEHLP_MODULEW
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       BaseOfImage;
+    DWORD                       ImageSize;
+    DWORD                       TimeDateStamp;
+    DWORD                       CheckSum;
+    DWORD                       NumSyms;
+    SYM_TYPE                    SymType;
+    WCHAR                       ModuleName[32];
+    WCHAR                       ImageName[256];
+    WCHAR                       LoadedImageName[256];
+} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
+#endif
+
+typedef struct _IMAGEHLP_MODULE64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     BaseOfImage;
+    DWORD                       ImageSize;
+    DWORD                       TimeDateStamp;
+    DWORD                       CheckSum;
+    DWORD                       NumSyms;
+    SYM_TYPE                    SymType;
+    CHAR                        ModuleName[32];
+    CHAR                        ImageName[256];
+    CHAR                        LoadedImageName[256];
+    CHAR                        LoadedPdbName[256];
+    DWORD                       CVSig;
+    CHAR                        CVData[MAX_PATH*3];
+    DWORD                       PdbSig;
+    GUID                        PdbSig70;
+    DWORD                       PdbAge;
+    BOOL                        PdbUnmatched;
+    BOOL                        DbgUnmatched;
+    BOOL                        LineNumbers;
+    BOOL                        GlobalSymbols;
+    BOOL                        TypeInfo;
+    BOOL                        SourceIndexed;
+    BOOL                        Publics;
+} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
+
+typedef struct _IMAGEHLP_MODULEW64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     BaseOfImage;
+    DWORD                       ImageSize;
+    DWORD                       TimeDateStamp;
+    DWORD                       CheckSum;
+    DWORD                       NumSyms;
+    SYM_TYPE                    SymType;
+    WCHAR                       ModuleName[32];
+    WCHAR                       ImageName[256];
+    WCHAR                       LoadedImageName[256];
+    WCHAR                       LoadedPdbName[256];
+    DWORD                       CVSig;
+    WCHAR                       CVData[MAX_PATH*3];
+    DWORD                       PdbSig;
+    GUID                        PdbSig70;
+    DWORD                       PdbAge;
+    BOOL                        PdbUnmatched;
+    BOOL                        DbgUnmatched;
+    BOOL                        LineNumbers;
+    BOOL                        GlobalSymbols;
+    BOOL                        TypeInfo;
+    BOOL                        SourceIndexed;
+    BOOL                        Publics;
+} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_LINE IMAGEHLP_LINE64
+#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
+#define IMAGEHLP_LINEW IMAGEHLP_LINEW64
+#define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
+#else
+typedef struct _IMAGEHLP_LINE
+{
+    DWORD                       SizeOfStruct;
+    PVOID                       Key;
+    DWORD                       LineNumber;
+    PCHAR                       FileName;
+    DWORD                       Address;
+} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
+
+typedef struct _IMAGEHLP_LINEW
+{
+    DWORD                       SizeOfStruct;
+    PVOID                       Key;
+    DWORD                       LineNumber;
+    PWSTR                       FileName;
+    DWORD                       Address;
+} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
+#endif
+
+typedef struct _IMAGEHLP_LINE64
+{
+    DWORD                       SizeOfStruct;
+    PVOID                       Key;
+    DWORD                       LineNumber;
+    PCHAR                       FileName;
+    DWORD64                     Address;
+} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
+
+typedef struct _IMAGEHLP_LINEW64
+{
+    DWORD                       SizeOfStruct;
+    PVOID                       Key;
+    DWORD                       LineNumber;
+    PWSTR                       FileName;
+    DWORD64                     Address;
+} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
+
+typedef struct _SOURCEFILE
+{
+    DWORD64                     ModBase;
+    PCHAR                       FileName;
+} SOURCEFILE, *PSOURCEFILE;
+
+typedef struct _SOURCEFILEW
+{
+    DWORD64                     ModBase;
+    PWSTR                       FileName;
+} SOURCEFILEW, *PSOURCEFILEW;
+
+#define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
+#define CBA_SYMBOLS_UNLOADED                    0x00000004
+#define CBA_DUPLICATE_SYMBOL                    0x00000005
+#define CBA_READ_MEMORY                         0x00000006
+#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007
+#define CBA_SET_OPTIONS                         0x00000008
+#define CBA_EVENT                               0x00000010
+#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL        0x00000020
+#define CBA_DEBUG_INFO                          0x10000000
+
+typedef struct _IMAGEHLP_CBA_READ_MEMORY
+{
+    DWORD64   addr;
+    PVOID     buf;
+    DWORD     bytes;
+    DWORD    *bytesread;
+} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
+
+enum
+{
+    sevInfo = 0,
+    sevProblem,
+    sevAttn,
+    sevFatal,
+    sevMax
+};
+
+#define EVENT_SRCSPEW_START 100
+#define EVENT_SRCSPEW       100
+#define EVENT_SRCSPEW_END   199
+
+typedef struct _IMAGEHLP_CBA_EVENT
+{
+    DWORD       severity;
+    DWORD       code;
+    PCHAR       desc;
+    PVOID       object;
+} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
+
+typedef struct _IMAGEHLP_CBA_EVENTW
+{
+    DWORD       severity;
+    DWORD       code;
+    PCWSTR      desc;
+    PVOID       object;
+} IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
+#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
+#else
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       BaseOfImage;
+    DWORD                       CheckSum;
+    DWORD                       TimeDateStamp;
+    CHAR                        FileName[MAX_PATH];
+    BOOLEAN                     Reparse;
+    HANDLE                      hFile;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+#endif
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     BaseOfImage;
+    DWORD                       CheckSum;
+    DWORD                       TimeDateStamp;
+    CHAR                        FileName[MAX_PATH];
+    BOOLEAN                     Reparse;
+    HANDLE                      hFile;
+    DWORD                       Flags;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     BaseOfImage;
+    DWORD                       CheckSum;
+    DWORD                       TimeDateStamp;
+    WCHAR                       FileName[MAX_PATH + 1];
+    BOOLEAN                     Reparse;
+    HANDLE                      hFile;
+    DWORD                       Flags;
+} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
+#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
+#else
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       NumberOfDups;
+    PIMAGEHLP_SYMBOL            Symbol;
+    DWORD                       SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
+#endif
+
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64
+{
+    DWORD                       SizeOfStruct;
+    DWORD                       NumberOfDups;
+    PIMAGEHLP_SYMBOL64          Symbol;
+    DWORD                       SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;
+
+#define SYMOPT_CASE_INSENSITIVE         0x00000001
+#define SYMOPT_UNDNAME                  0x00000002
+#define SYMOPT_DEFERRED_LOADS           0x00000004
+#define SYMOPT_NO_CPP                   0x00000008
+#define SYMOPT_LOAD_LINES               0x00000010
+#define SYMOPT_OMAP_FIND_NEAREST        0x00000020
+#define SYMOPT_LOAD_ANYTHING            0x00000040
+#define SYMOPT_IGNORE_CVREC             0x00000080
+#define SYMOPT_NO_UNQUALIFIED_LOADS     0x00000100
+#define SYMOPT_FAIL_CRITICAL_ERRORS     0x00000200
+#define SYMOPT_EXACT_SYMBOLS            0x00000400
+#define SYMOPT_WILD_UNDERSCORE          0x00000800
+#define SYMOPT_USE_DEFAULTS             0x00001000
+/* latest SDK defines:
+#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS   0x00000800
+#define SYMOPT_IGNORE_NT_SYMPATH        0x00001000
+*/
+#define SYMOPT_INCLUDE_32BIT_MODULES    0x00002000
+#define SYMOPT_PUBLICS_ONLY             0x00004000
+#define SYMOPT_NO_PUBLICS               0x00008000
+#define SYMOPT_AUTO_PUBLICS             0x00010000
+#define SYMOPT_NO_IMAGE_SEARCH          0x00020000
+#define SYMOPT_SECURE                   0x00040000
+#define SYMOPT_NO_PROMPTS               0x00080000
+#define SYMOPT_OVERWRITE                0x00100000
+#define SYMOPT_IGNORE_IMAGEDIR          0x00200000
+
+#define SYMOPT_DEBUG                    0x80000000
+
+typedef struct _IMAGEHLP_STACK_FRAME
+{
+    ULONG64     InstructionOffset;
+    ULONG64     ReturnOffset;
+    ULONG64     FrameOffset;
+    ULONG64     StackOffset;
+    ULONG64     BackingStoreOffset;
+    ULONG64     FuncTableEntry;
+    ULONG64     Params[4];
+    ULONG64     Reserved[5];
+    BOOL        Virtual;
+    ULONG       Reserved2;
+} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
+
+typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
+
+#define DBHHEADER_DEBUGDIRS     0x1
+typedef struct _DBGHELP_MODLOAD_DATA
+{
+    DWORD               ssize;
+    DWORD               ssig;
+    PVOID               data;
+    DWORD               size;
+    DWORD               flags;
+} MODLOAD_DATA, *PMODLOAD_DATA;
+
+/*************************
+ *       MiniDUMP        *
+ *************************/
+
+#include <pshpack4.h>
+/* DebugHelp */
+
+#define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */
+#define MINIDUMP_VERSION   (42899)
+
+typedef DWORD   RVA;
+typedef ULONG64 RVA64;
+
+typedef enum _MINIDUMP_TYPE 
+{
+    MiniDumpNormal                              = 0x0000,
+    MiniDumpWithDataSegs                        = 0x0001,
+    MiniDumpWithFullMemory                      = 0x0002,
+    MiniDumpWithHandleData                      = 0x0004,
+    MiniDumpFilterMemory                        = 0x0008,
+    MiniDumpScanMemory                          = 0x0010,
+    MiniDumpWithUnloadedModules                 = 0x0020,
+    MiniDumpWithIndirectlyReferencedMemory      = 0x0040,
+    MiniDumpFilterModulePaths                   = 0x0080,
+    MiniDumpWithProcessThreadData               = 0x0100,
+    MiniDumpWithPrivateReadWriteMemory          = 0x0200,
+    MiniDumpWithoutOptionalData                 = 0x0400,
+    MiniDumpWithFullMemoryInfo                  = 0x0800,
+    MiniDumpWithThreadInfo                      = 0x1000,
+    MiniDumpWithCodeSegs                        = 0x2000
+} MINIDUMP_TYPE;
+
+typedef enum _MINIDUMP_CALLBACK_TYPE
+{
+    ModuleCallback,
+    ThreadCallback,
+    ThreadExCallback,
+    IncludeThreadCallback,
+    IncludeModuleCallback,
+    MemoryCallback,
+} MINIDUMP_CALLBACK_TYPE;
+
+typedef struct _MINIDUMP_THREAD_CALLBACK
+{
+    ULONG                       ThreadId;
+    HANDLE                      ThreadHandle;
+    CONTEXT                     Context;
+    ULONG                       SizeOfContext;
+    ULONG64                     StackBase;
+    ULONG64                     StackEnd;
+} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
+
+typedef struct _MINIDUMP_THREAD_EX_CALLBACK 
+{
+    ULONG                       ThreadId;
+    HANDLE                      ThreadHandle;
+    CONTEXT                     Context;
+    ULONG                       SizeOfContext;
+    ULONG64                     StackBase;
+    ULONG64                     StackEnd;
+    ULONG64                     BackingStoreBase;
+    ULONG64                     BackingStoreEnd;
+} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
+
+typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
+{
+    ULONG ThreadId;
+} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
+
+typedef enum _THREAD_WRITE_FLAGS 
+{
+    ThreadWriteThread            = 0x0001,
+    ThreadWriteStack             = 0x0002,
+    ThreadWriteContext           = 0x0004,
+    ThreadWriteBackingStore      = 0x0008,
+    ThreadWriteInstructionWindow = 0x0010,
+    ThreadWriteThreadData        = 0x0020,
+    ThreadWriteThreadInfo        = 0x0040
+} THREAD_WRITE_FLAGS;
+
+typedef struct _MINIDUMP_MODULE_CALLBACK 
+{
+    PWCHAR                      FullPath;
+    ULONG64                     BaseOfImage;
+    ULONG                       SizeOfImage;
+    ULONG                       CheckSum;
+    ULONG                       TimeDateStamp;
+    VS_FIXEDFILEINFO            VersionInfo;
+    PVOID                       CvRecord;
+    ULONG                       SizeOfCvRecord;
+    PVOID                       MiscRecord;
+    ULONG                       SizeOfMiscRecord;
+} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
+
+typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK 
+{
+    ULONG64 BaseOfImage;
+} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
+
+typedef enum _MODULE_WRITE_FLAGS 
+{
+    ModuleWriteModule        = 0x0001,
+    ModuleWriteDataSeg       = 0x0002,
+    ModuleWriteMiscRecord    = 0x0004,
+    ModuleWriteCvRecord      = 0x0008,
+    ModuleReferencedByMemory = 0x0010,
+    ModuleWriteTlsData       = 0x0020,
+    ModuleWriteCodeSegs      = 0x0040,
+} MODULE_WRITE_FLAGS;
+
+typedef struct _MINIDUMP_CALLBACK_INPUT 
+{
+    ULONG                       ProcessId;
+    HANDLE                      ProcessHandle;
+    ULONG                       CallbackType;
+    union 
+    {
+        MINIDUMP_THREAD_CALLBACK        Thread;
+        MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;
+        MINIDUMP_MODULE_CALLBACK        Module;
+        MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
+        MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
+    } DUMMYUNIONNAME;
+} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
+
+typedef struct _MINIDUMP_CALLBACK_OUTPUT
+{
+    union 
+    {
+        ULONG                           ModuleWriteFlags;
+        ULONG                           ThreadWriteFlags;
+        struct
+        {
+            ULONG64                     MemoryBase;
+            ULONG                       MemorySize;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
+
+typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
+
+typedef struct _MINIDUMP_CALLBACK_INFORMATION 
+{
+    MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;
+    void*                       CallbackParam;
+} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
+
+typedef struct _MINIDUMP_LOCATION_DESCRIPTOR 
+{
+    ULONG                       DataSize;
+    RVA                         Rva;
+} MINIDUMP_LOCATION_DESCRIPTOR;
+
+typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 
+{
+    ULONG64                     DataSize;
+    RVA64                       Rva;
+} MINIDUMP_LOCATION_DESCRIPTOR64;
+
+typedef struct _MINIDUMP_DIRECTORY 
+{
+    ULONG                       StreamType;
+    MINIDUMP_LOCATION_DESCRIPTOR Location;
+} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
+
+typedef struct _MINIDUMP_EXCEPTION
+{
+    ULONG                       ExceptionCode;
+    ULONG                       ExceptionFlags;
+    ULONG64                     ExceptionRecord;
+    ULONG64                     ExceptionAddress;
+    ULONG                       NumberParameters;
+    ULONG                        __unusedAlignment;
+    ULONG64                     ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
+
+typedef struct _MINIDUMP_EXCEPTION_INFORMATION
+{
+    DWORD                       ThreadId;
+    PEXCEPTION_POINTERS         ExceptionPointers;
+    BOOL                        ClientPointers;
+} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
+
+typedef struct MINIDUMP_EXCEPTION_STREAM 
+{
+    ULONG                       ThreadId;
+    ULONG                       __alignment;
+    MINIDUMP_EXCEPTION          ExceptionRecord;
+    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
+
+typedef struct _MINIDUMP_HEADER 
+{
+    DWORD                       Signature;
+    DWORD                       Version;
+    DWORD                       NumberOfStreams;
+    RVA                         StreamDirectoryRva;
+    DWORD                       CheckSum;
+    union 
+    {
+        DWORD                           Reserved;
+        DWORD                           TimeDateStamp;
+    } DUMMYUNIONNAME;
+    ULONG64                     Flags;
+} MINIDUMP_HEADER, *PMINIDUMP_HEADER;
+
+typedef struct _MINIDUMP_MEMORY_DESCRIPTOR 
+{
+    ULONG64                     StartOfMemoryRange;
+    MINIDUMP_LOCATION_DESCRIPTOR Memory;
+} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
+
+typedef struct _MINIDUMP_MEMORY_LIST
+{
+    ULONG                       NumberOfMemoryRanges;
+    MINIDUMP_MEMORY_DESCRIPTOR  MemoryRanges[1]; /* FIXME: 0-sized array not supported */
+} MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
+
+#define MINIDUMP_MISC1_PROCESS_ID       0x00000001
+#define MINIDUMP_MISC1_PROCESS_TIMES    0x00000002
+
+typedef struct _MINIDUMP_MISC_INFO
+{
+    ULONG                       SizeOfInfo;
+    ULONG                       Flags1;
+    ULONG                       ProcessId;
+    ULONG                       ProcessCreateTime;
+    ULONG                       ProcessUserTime;
+    ULONG                       ProcessKernelTime;
+} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
+
+typedef struct _MINIDUMP_MODULE
+{
+    ULONG64                     BaseOfImage;
+    ULONG                       SizeOfImage;
+    ULONG                       CheckSum;
+    ULONG                       TimeDateStamp;
+    RVA                         ModuleNameRva;
+    VS_FIXEDFILEINFO            VersionInfo;
+    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
+    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
+    ULONG64                     Reserved0;
+    ULONG64                     Reserved1;
+} MINIDUMP_MODULE, *PMINIDUMP_MODULE;
+
+typedef struct _MINIDUMP_MODULE_LIST 
+{
+    ULONG                       NumberOfModules;
+    MINIDUMP_MODULE             Modules[1]; /* FIXME: 0-sized array not supported */
+} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
+
+typedef struct _MINIDUMP_STRING
+{
+    ULONG                       Length;
+    WCHAR                       Buffer[1]; /* FIXME: O-sized array not supported */
+} MINIDUMP_STRING, *PMINIDUMP_STRING;
+
+typedef struct _MINIDUMP_SYSTEM_INFO
+{
+    USHORT                      ProcessorArchitecture;
+    USHORT                      ProcessorLevel;
+    USHORT                      ProcessorRevision;
+    union
+    {
+        USHORT                          Reserved0;
+        struct
+        {
+            UCHAR                       NumberOfProcessors;
+            UCHAR                       ProductType;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+
+    ULONG                       MajorVersion;
+    ULONG                       MinorVersion;
+    ULONG                       BuildNumber;
+    ULONG                       PlatformId;
+
+    RVA                         CSDVersionRva;
+    union
+    {
+        ULONG                           Reserved1;
+        struct
+        {
+            USHORT                      SuiteMask;
+            USHORT                      Reserved2;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME1;
+    union _CPU_INFORMATION 
+    {
+        struct 
+        {
+            ULONG                       VendorId[3];
+            ULONG                       VersionInformation;
+            ULONG                       FeatureInformation;
+            ULONG                       AMDExtendedCpuFeatures;
+        } X86CpuInfo;
+        struct 
+        {
+            ULONG64                     ProcessorFeatures[2];
+        } OtherCpuInfo;
+    } Cpu;
+
+} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
+
+typedef struct _MINIDUMP_THREAD
+{
+    ULONG                       ThreadId;
+    ULONG                       SuspendCount;
+    ULONG                       PriorityClass;
+    ULONG                       Priority;
+    ULONG64                     Teb;
+    MINIDUMP_MEMORY_DESCRIPTOR  Stack;
+    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+} MINIDUMP_THREAD, *PMINIDUMP_THREAD;
+
+typedef struct _MINIDUMP_THREAD_LIST
+{
+    ULONG                       NumberOfThreads;
+    MINIDUMP_THREAD             Threads[1]; /* FIXME: no support of 0 sized array */
+} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
+
+typedef struct _MINIDUMP_USER_STREAM
+{
+    ULONG                       Type;
+    ULONG                       BufferSize;
+    void*                       Buffer;
+} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
+
+typedef struct _MINIDUMP_USER_STREAM_INFORMATION
+{
+    ULONG                       UserStreamCount;
+    PMINIDUMP_USER_STREAM       UserStreamArray;
+} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
+
+typedef enum _MINIDUMP_STREAM_TYPE
+{
+    UnusedStream                = 0,
+    ReservedStream0             = 1,
+    ReservedStream1             = 2,
+    ThreadListStream            = 3,
+    ModuleListStream            = 4,
+    MemoryListStream            = 5,
+    ExceptionStream             = 6,
+    SystemInfoStream            = 7,
+    ThreadExListStream          = 8,
+    Memory64ListStream          = 9,
+    CommentStreamA              = 10,
+    CommentStreamW              = 11,
+    HandleDataStream            = 12,
+    FunctionTableStream         = 13,
+    UnloadedModuleListStream    = 14,
+    MiscInfoStream              = 15,
+    MemoryInfoListStream        = 16,
+    ThreadInfoListStream        = 17,
+
+    LastReservedStream          = 0xffff
+} MINIDUMP_STREAM_TYPE;
+
+BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
+                              const PMINIDUMP_EXCEPTION_INFORMATION,
+                              const PMINIDUMP_USER_STREAM_INFORMATION,
+                              const PMINIDUMP_CALLBACK_INFORMATION);
+BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
+                                   ULONG*);
+
+#include <poppack.h>
+
+/*************************
+ *    MODULE handling    *
+ *************************/
+
+/* flags for SymLoadModuleEx */
+#define SLMFLAG_VIRTUAL         0x1
+#define SLMFLAG_NO_SYMBOLS      0x4
+
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
+BOOL   WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
+BOOL   WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
+BOOL    WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
+BOOL    WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);
+BOOL    WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
+BOOL    WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);
+DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
+DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD);
+DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
+                               PMODLOAD_DATA, DWORD);
+DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
+                                PMODLOAD_DATA, DWORD);
+BOOL    WINAPI SymUnloadModule64(HANDLE, DWORD64);
+
+/*************************
+ *    Symbol Handling    *
+ *************************/
+
+#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1
+#define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER        /*  0x08 */
+#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL          /*  0x10 */
+#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL        /*  0x20 */
+#define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER       /*  0x40 */
+#define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL           /*  0x80 */
+#define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT        /* 0x100 */
+#define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION        /* 0x800 */
+
+#define SYMFLAG_VALUEPRESENT     0x00000001
+#define SYMFLAG_REGISTER         0x00000008
+#define SYMFLAG_REGREL           0x00000010
+#define SYMFLAG_FRAMEREL         0x00000020
+#define SYMFLAG_PARAMETER        0x00000040
+#define SYMFLAG_LOCAL            0x00000080
+#define SYMFLAG_CONSTANT         0x00000100
+#define SYMFLAG_EXPORT           0x00000200
+#define SYMFLAG_FORWARDER        0x00000400
+#define SYMFLAG_FUNCTION         0x00000800
+#define SYMFLAG_VIRTUAL          0x00001000
+#define SYMFLAG_THUNK            0x00002000
+#define SYMFLAG_TLSREL           0x00004000
+#define SYMFLAG_SLOT             0x00008000
+
+#define MAX_SYM_NAME    2000
+
+typedef struct _SYMBOL_INFO
+{
+    ULONG       SizeOfStruct;
+    ULONG       TypeIndex;
+    ULONG64     Reserved[2];
+    ULONG       info;   /* sdk states info, while MSDN says it's Index... */
+    ULONG       Size;
+    ULONG64     ModBase;
+    ULONG       Flags;
+    ULONG64     Value;
+    ULONG64     Address;
+    ULONG       Register;
+    ULONG       Scope;
+    ULONG       Tag;
+    ULONG       NameLen;
+    ULONG       MaxNameLen;
+    CHAR        Name[1];
+} SYMBOL_INFO, *PSYMBOL_INFO;
+
+typedef struct _SYMBOL_INFOW
+{
+    ULONG       SizeOfStruct;
+    ULONG       TypeIndex;
+    ULONG64     Reserved[2];
+    ULONG       Index;
+    ULONG       Size;
+    ULONG64     ModBase;
+    ULONG       Flags;
+    ULONG64     Value;
+    ULONG64     Address;
+    ULONG       Register;
+    ULONG       Scope;
+    ULONG       Tag;
+    ULONG       NameLen;
+    ULONG       MaxNameLen;
+    WCHAR       Name[1];
+} SYMBOL_INFOW, *PSYMBOL_INFOW;
+
+typedef struct _SYMBOL_INFO_PACKAGE
+{
+    SYMBOL_INFO si;
+    CHAR        name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
+
+typedef struct _SYMBOL_INFO_PACKAGEW
+{
+    SYMBOL_INFOW si;
+    WCHAR        name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
+
+typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO 
+{
+    TI_GET_SYMTAG,
+    TI_GET_SYMNAME,
+    TI_GET_LENGTH,
+    TI_GET_TYPE,
+    TI_GET_TYPEID,
+    TI_GET_BASETYPE,
+    TI_GET_ARRAYINDEXTYPEID,
+    TI_FINDCHILDREN,
+    TI_GET_DATAKIND,
+    TI_GET_ADDRESSOFFSET,
+    TI_GET_OFFSET,
+    TI_GET_VALUE,
+    TI_GET_COUNT,
+    TI_GET_CHILDRENCOUNT,
+    TI_GET_BITPOSITION,
+    TI_GET_VIRTUALBASECLASS,
+    TI_GET_VIRTUALTABLESHAPEID,
+    TI_GET_VIRTUALBASEPOINTEROFFSET,
+    TI_GET_CLASSPARENTID,
+    TI_GET_NESTED,
+    TI_GET_SYMINDEX,
+    TI_GET_LEXICALPARENT,
+    TI_GET_ADDRESS,
+    TI_GET_THISADJUST,
+    TI_GET_UDTKIND,
+    TI_IS_EQUIV_TO,
+    TI_GET_CALLING_CONVENTION,
+} IMAGEHLP_SYMBOL_TYPE_INFO;
+
+#define IMAGEHLP_GET_TYPE_INFO_UNCACHED            0x00000001
+#define IMAGEHLP_GET_TYPE_INFO_CHILDREN            0x00000002
+typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
+{
+    ULONG       SizeOfStruct;
+    ULONG       Flags;
+    ULONG       NumIds;
+    PULONG      TypeIds;
+    ULONG64     TagFilter;
+    ULONG       NumReqs;
+    IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
+    PULONG_PTR  ReqOffsets;
+    PULONG      ReqSizes;
+    ULONG_PTR   ReqStride;
+    ULONG_PTR   BufferSize;
+    PVOID       Buffer;
+    ULONG       EntriesMatched;
+    ULONG       EntriesFilled;
+    ULONG64     TagsFound;
+    ULONG64     AllReqsValid;
+    ULONG       NumReqsValid;
+    PULONG64    ReqsValid;
+} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
+
+typedef struct _TI_FINDCHILDREN_PARAMS 
+{
+    ULONG Count;
+    ULONG Start;
+    ULONG ChildId[1];
+} TI_FINDCHILDREN_PARAMS;
+
+#define UNDNAME_COMPLETE                 (0x0000)
+#define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)
+#define UNDNAME_NO_MS_KEYWORDS           (0x0002)
+#define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)
+#define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)
+#define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)
+#define UNDNAME_NO_MS_THISTYPE           (0x0020)
+#define UNDNAME_NO_CV_THISTYPE           (0x0040)
+#define UNDNAME_NO_THISTYPE              (0x0060)
+#define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)
+#define UNDNAME_NO_THROW_SIGNATURES      (0x0100)
+#define UNDNAME_NO_MEMBER_TYPE           (0x0200)
+#define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)
+#define UNDNAME_32_BIT_DECODE            (0x0800)
+#define UNDNAME_NAME_ONLY                (0x1000)
+#define UNDNAME_NO_ARGUMENTS             (0x2000)
+#define UNDNAME_NO_SPECIAL_SYMS          (0x4000)
+
+#define SYMSEARCH_MASKOBJS              0x01
+#define SYMSEARCH_RECURSE               0x02
+#define SYMSEARCH_GLOBALSONLY           0x04
+
+BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
+BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
+BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
+BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
+BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
+BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);
+BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO);
+BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW);
+BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO);
+BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW);
+BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO);
+BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW);
+BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64);
+BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64);
+BOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID);
+BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
+                           PVOID);
+BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,
+                            PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
+BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID);
+BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID);
+BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
+BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
+BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
+BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
+BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD);
+BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL);
+BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL);
+BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL);
+BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
+BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD);
+DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
+DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD);
+BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
+BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
+BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
+BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
+BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD);
+BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD);
+BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD);
+BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD);
+
+/*************************
+ *      Source Files     *
+ *************************/
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
+
+BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK,
+                               PVOID);
+BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID);
+BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64);
+ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG);
+BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD);
+BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD);
+BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*);
+BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*);
+BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD);
+BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD);
+BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD);
+BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD);
+
+typedef struct _SRCCODEINFO
+{
+    DWORD       SizeOfStruct;
+    PVOID       Key;
+    DWORD64     ModBase;
+    CHAR        Obj[MAX_PATH+1];
+    CHAR        FileName[MAX_PATH+1];
+    DWORD       LineNumber;
+    DWORD64     Address;
+} SRCCODEINFO, *PSRCCODEINFO;
+
+typedef struct _SRCCODEINFOW
+{
+    DWORD       SizeOfStruct;
+    PVOID       Key;
+    DWORD64     ModBase;
+    WCHAR       Obj[MAX_PATH+1];
+    WCHAR       FileName[MAX_PATH+1];
+    DWORD       LineNumber;
+    DWORD64     Address;
+} SRCCODEINFOW, *PSRCCODEINFOW;
+
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
+BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);
+BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID);
+BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID);
+BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID);
+
+/*************************
+ * File & image handling *
+ *************************/
+BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL);
+BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL);
+BOOL WINAPI SymCleanup(HANDLE);
+
+HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR);
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
+HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
+HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
+HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
+HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID);
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID);
+BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+                           PSTR, PFINDFILEINPATHCALLBACK, PVOID);
+BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+                              PSTR, PFINDFILEINPATHCALLBACK, PVOID);
+BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
+                              PWSTR, PFINDFILEINPATHCALLBACKW, PVOID);
+HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR);
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
+HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
+HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
+HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
+HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
+PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
+PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
+                                         PIMAGE_SECTION_HEADER *);
+PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
+PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
+PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
+BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
+BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD);
+BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR);
+BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR);
+DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
+BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
+BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR);
+BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR);
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID);
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
+BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID);
+BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID);
+BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*);
+BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*);
+PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);
+PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR);
+PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);
+PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);
+#define hdBase  0
+#define hdSym   1
+#define hdSrc   2
+#define hdMax   3
+
+/*************************
+ *   Context management  *
+ *************************/
+BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
+
+
+/*************************
+ *    Stack management   *
+ *************************/
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define KDHELP KDHELP64
+#define PKDHELP PKDHELP64
+#else
+typedef struct _KDHELP
+{
+    DWORD       Thread;
+    DWORD       ThCallbackStack;
+    DWORD       NextCallback;
+    DWORD       FramePointer;
+    DWORD       KiCallUserMode;
+    DWORD       KeUserCallbackDispatcher;
+    DWORD       SystemRangeStart;
+} KDHELP, *PKDHELP;
+#endif
+
+typedef struct _KDHELP64
+{
+    DWORD64     Thread;
+    DWORD       ThCallbackStack;
+    DWORD       ThCallbackBStore;
+    DWORD       NextCallback;
+    DWORD       FramePointer;
+    DWORD64     KiCallUserMode;
+    DWORD64     KeUserCallbackDispatcher;
+    DWORD64     SystemRangeStart;
+    DWORD64     Reserved[8];
+} KDHELP64, *PKDHELP64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define STACKFRAME STACKFRAME64
+#define LPSTACKFRAME LPSTACKFRAME64
+#else
+typedef struct _STACKFRAME
+{
+    ADDRESS     AddrPC;
+    ADDRESS     AddrReturn;
+    ADDRESS     AddrFrame;
+    ADDRESS     AddrStack;
+    PVOID       FuncTableEntry;
+    DWORD       Params[4];
+    BOOL        Far;
+    BOOL        Virtual;
+    DWORD       Reserved[3];
+    KDHELP      KdHelp;
+    ADDRESS     AddrBStore;
+} STACKFRAME, *LPSTACKFRAME;
+#endif
+
+typedef struct _STACKFRAME64
+{
+    ADDRESS64   AddrPC;
+    ADDRESS64   AddrReturn;
+    ADDRESS64   AddrFrame;
+    ADDRESS64   AddrStack;
+    ADDRESS64   AddrBStore;
+    PVOID       FuncTableEntry;
+    DWORD64     Params[4];
+    BOOL        Far;
+    BOOL        Virtual;
+    DWORD64     Reserved[3];
+    KDHELP64    KdHelp;
+} STACKFRAME64, *LPSTACKFRAME64;
+
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)
+    (HANDLE, DWORD64, PVOID, DWORD, PDWORD);
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
+typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
+typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
+BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,
+                        PREAD_PROCESS_MEMORY_ROUTINE64,
+                        PFUNCTION_TABLE_ACCESS_ROUTINE64,
+                        PGET_MODULE_BASE_ROUTINE64,
+                        PTRANSLATE_ADDRESS_ROUTINE64);
+
+PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
+
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);
+
+BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);
+
+/*************************
+ * Version, global stuff *
+ *************************/
+
+#define API_VERSION_NUMBER 9
+
+typedef struct API_VERSION
+{
+    USHORT  MajorVersion;
+    USHORT  MinorVersion;
+    USHORT  Revision;
+    USHORT  Reserved;
+} API_VERSION, *LPAPI_VERSION;
+
+LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
+LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
+
+typedef struct _IMAGE_DEBUG_INFORMATION
+{
+    LIST_ENTRY                  List;
+    DWORD                       ReservedSize;
+    PVOID                       ReservedMappedBase;
+    USHORT                      ReservedMachine;
+    USHORT                      ReservedCharacteristics;
+    DWORD                       ReservedCheckSum;
+    DWORD                       ImageBase;
+    DWORD                       SizeOfImage;
+    DWORD                       ReservedNumberOfSections;
+    PIMAGE_SECTION_HEADER       ReservedSections;
+    DWORD                       ReservedExportedNamesSize;
+    PSTR                        ReservedExportedNames;
+    DWORD                       ReservedNumberOfFunctionTableEntries;
+    PIMAGE_FUNCTION_ENTRY       ReservedFunctionTableEntries;
+    DWORD                       ReservedLowestFunctionStartingAddress;
+    DWORD                       ReservedHighestFunctionEndingAddress;
+    DWORD                       ReservedNumberOfFpoTableEntries;
+    PFPO_DATA                   ReservedFpoTableEntries;
+    DWORD                       SizeOfCoffSymbols;
+    PIMAGE_COFF_SYMBOLS_HEADER  CoffSymbols;
+    DWORD                       ReservedSizeOfCodeViewSymbols;
+    PVOID                       ReservedCodeViewSymbols;
+    PSTR                        ImageFilePath;
+    PSTR                        ImageFileName;
+    PSTR                        ReservedDebugFilePath;
+    DWORD                       ReservedTimeDateStamp;
+    BOOL                        ReservedRomImage;
+    PIMAGE_DEBUG_DIRECTORY      ReservedDebugDirectory;
+    DWORD                       ReservedNumberOfDebugDirectories;
+    DWORD                       ReservedOriginalFunctionTableBaseAddress;
+    DWORD                       Reserved[ 2 ];
+} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
+
+
+PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);
+
+BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
+
+DWORD   WINAPI  SymGetOptions(void);
+DWORD   WINAPI  SymSetOptions(DWORD);
+
+BOOL WINAPI SymSetParentWindow(HWND);
+
+/*************************
+ * Version, global stuff *
+ *************************/
+
+typedef BOOL     (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
+typedef BOOL     (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
+typedef BOOL     (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR);
+typedef BOOL     (WINAPI* PSYMBOLSERVEROPENPROC)(void);
+typedef BOOL     (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);
+typedef BOOL     (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
+typedef BOOL     (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);
+typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);
+typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR);
+typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR);
+typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);
+
+#define SSRVOPT_CALLBACK            0x0001
+#define SSRVOPT_DWORD               0x0002
+#define SSRVOPT_DWORDPTR            0x0004
+#define SSRVOPT_GUIDPTR             0x0008
+#define SSRVOPT_OLDGUIDPTR          0x0010
+#define SSRVOPT_UNATTENDED          0x0020
+#define SSRVOPT_NOCOPY              0x0040
+#define SSRVOPT_PARENTWIN           0x0080
+#define SSRVOPT_PARAMTYPE           0x0100
+#define SSRVOPT_SECURE              0x0200
+#define SSRVOPT_TRACE               0x0400
+#define SSRVOPT_SETCONTEXT          0x0800
+#define SSRVOPT_PROXY               0x1000
+#define SSRVOPT_DOWNSTREAM_STORE    0x2000
+#define SSRVOPT_RESET               ((ULONG_PTR)-1)
+
+#define SSRVACTION_TRACE        1
+#define SSRVACTION_QUERYCANCEL  2
+#define SSRVACTION_EVENT        3
+
+/* 32-bit functions */
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+
+#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
+#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
+#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
+#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
+#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
+#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
+#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
+#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
+#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACKW64
+#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
+
+#define EnumerateLoadedModules EnumerateLoadedModules64
+#define StackWalk StackWalk64
+#define SymEnumerateModules SymEnumerateModules64
+#define SymEnumerateSymbols SymEnumerateSymbols64
+#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
+#define SymFunctionTableAccess SymFunctionTableAccess64
+#define SymGetLineFromAddr SymGetLineFromAddr64
+#define SymGetLineFromAddrW SymGetLineFromAddrW64
+#define SymGetLineFromName SymGetLineFromName64
+#define SymGetLineNext SymGetLineNext64
+#define SymGetLineNextW SymGetLineNextW64
+#define SymGetLinePrev SymGetLinePrev64
+#define SymGetLinePrevW SymGetLinePrevW64
+#define SymGetModuleBase SymGetModuleBase64
+#define SymGetModuleInfo SymGetModuleInfo64
+#define SymGetModuleInfoW SymGetModuleInfoW64
+#define SymGetSymFromAddr SymGetSymFromAddr64
+#define SymGetSymFromName SymGetSymFromName64
+#define SymGetSymNext SymGetSymNext64
+#define SymGetSymNextW SymGetSymNextW64
+#define SymGetSymPrev SymGetSymPrev64
+#define SymGetSymPrevW SymGetSymPrevW64
+#define SymLoadModule SymLoadModule64
+#define SymRegisterCallback SymRegisterCallback64
+#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
+#define SymUnDName SymUnDName64
+#define SymUnloadModule SymUnloadModule64
+
+#else
+
+typedef BOOL  (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
+typedef BOOL  (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);
+typedef BOOL  (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
+typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
+typedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
+typedef BOOL  (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
+
+BOOL    WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
+BOOL    WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
+BOOL    WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
+BOOL    WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
+BOOL    WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID);
+PVOID   WINAPI SymFunctionTableAccess(HANDLE, DWORD);
+BOOL    WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
+BOOL    WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW);
+BOOL    WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE);
+BOOL    WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
+BOOL    WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW);
+BOOL    WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
+BOOL    WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW);
+DWORD   WINAPI SymGetModuleBase(HANDLE, DWORD);
+BOOL    WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
+BOOL    WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
+BOOL    WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
+BOOL    WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL);
+BOOL    WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
+BOOL    WINAPI SymGetSymNextW(HANDLE, PIMAGEHLP_SYMBOLW);
+BOOL    WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
+BOOL    WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW);
+DWORD   WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);
+BOOL    WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
+BOOL    WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);
+BOOL    WINAPI SymRefreshModuleList(HANDLE);
+BOOL    WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
+BOOL    WINAPI SymUnloadModule(HANDLE, DWORD);
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_DBGHELP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl
new file mode 100644
index 0000000..4e2284e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a8b-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBInitialize : IUnknown {
+    [local] HRESULT Initialize();
+    [call_as(Initialize)] HRESULT RemoteInitialize( [out] IErrorInfo **ppErrorInfoRem );
+    [local] HRESULT Uninitialize();
+    [call_as(Uninitialize)] HRESULT RemoteUninitialize( [out] IErrorInfo **ppErrorInfoRem );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl
new file mode 100644
index 0000000..496cea7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a8a-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IDBProperties : IUnknown {
+    [local] HRESULT GetProperties(
+             [in] ULONG cPropertyIDSets,
+             [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+             [in, out] ULONG *pcPropertySets,
+             [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets);
+
+    [call_as(GetProperties)] HRESULT RemoteGetProperties(
+             [in] ULONG cPropertyIDSets,
+             [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+             [in, out] ULONG *pcPropertySets,
+             [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,
+             [out] IErrorInfo **ppErrorInfoRem);
+
+    [local] HRESULT GetPropertyInfo(
+             [in] ULONG cPropertyIDSets,
+             [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+             [in, out] ULONG *pcPropertyInfoSets,
+             [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+             [out, annotation("__deref_out_z_opt")] OLECHAR **ppDescBuffer);
+
+    [call_as(GetPropertyInfo)] HRESULT RemoteGetPropertyInfo(
+             [in] ULONG cPropertyIDSets,
+             [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+             [in, out] ULONG *pcPropertyInfoSets,
+             [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+             [in, out] ULONG *pcOffsets,
+             [out, size_is(,*pcOffsets)] DBBYTEOFFSET **prgDescOffsets,
+             [in, out] ULONG *pcbDescBuffer,
+             [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer,
+             [out] IErrorInfo **ppErrorInfoRem);
+
+    [local] HRESULT SetProperties(
+             [in] ULONG cPropertySets,
+             [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);
+
+    [call_as(SetProperties)] HRESULT RemoteSetProperties(
+             [in] ULONG cPropertySets,
+             [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+             [in] ULONG cTotalProps,
+             [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+             [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl
new file mode 100644
index 0000000..68f6111
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl
@@ -0,0 +1,740 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+typedef DWORD DBKIND;
+
+enum DBKINDENUM {
+    DBKIND_GUID_NAME,
+    DBKIND_GUID_PROPID,
+    DBKIND_NAME,
+    DBKIND_PGUID_NAME,
+    DBKIND_PGUID_PROPID,
+    DBKIND_PROPID,
+    DBKIND_GUID,
+};
+
+typedef struct tagDBID {
+    [switch_type(DBKIND), switch_is(eKind)] union
+    {
+    [case(DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_NAME, DBKIND_PROPID)]
+        GUID guid;
+    [case(DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID)]
+        GUID *pguid;
+    [default]
+        ;
+    } uGuid;
+    DBKIND eKind;
+    [switch_type(DBKIND), switch_is(eKind)] union
+    {
+    [case(DBKIND_GUID_NAME, DBKIND_NAME, DBKIND_PGUID_NAME)]
+        LPOLESTR pwszName;
+    [case(DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_PGUID_PROPID, DBKIND_PROPID)]
+        ULONG ulPropid;
+    [default]
+        ;
+    } uName;
+} DBID;
+
+typedef struct tagDB_NUMERIC {
+    BYTE precision;
+    BYTE scale;
+    BYTE sign;
+    BYTE val[16];
+} DB_NUMERIC;
+
+typedef DWORD DBPROPID;
+
+typedef struct tagDBPROPIDSET {
+    [size_is(cPropertyIDs)] DBPROPID *rgPropertyIDs;
+    ULONG cPropertyIDs;
+    GUID guidPropertySet;
+} DBPROPIDSET;
+
+typedef DWORD DBPROPOPTIONS;
+
+enum DBPROPOPTIONENUM {
+    DBPROPOPTIONS_REQUIRED = 0,
+    DBPROPOPTIONS_SETIFCHEAP = 1,
+    DBPROPOPTIONS_OPTIONAL = 1,
+};
+
+typedef DWORD DBPROPSTATUS;
+
+typedef struct tagDBPROP {
+    DBPROPID dwPropertyID;
+    DBPROPOPTIONS dwOptions;
+    DBPROPSTATUS dwStatus;
+    DBID colid;
+    VARIANT vValue;
+} DBPROP;
+
+typedef struct tagDBPROPSET {
+    [size_is(cProperties)] DBPROP *rgProperties;
+    ULONG cProperties;
+    GUID guidPropertySet;
+} DBPROPSET;
+
+typedef DWORD DBPROPFLAGS;
+
+typedef struct tagDBPROPINFO {
+    LPOLESTR pwszDescription;
+    DBPROPID dwPropertyID;
+    DBPROPFLAGS dwFlags;
+    VARTYPE vtType;
+    VARIANT vValues;
+} DBPROPINFO;
+
+typedef DBPROPINFO *PDBPROPINFO;
+
+typedef struct tagDBPROPINFOSET {
+    [size_is(cPropertyInfos)] PDBPROPINFO rgPropertyInfos;
+    ULONG cPropertyInfos;
+    GUID guidPropertySet;
+} DBPROPINFOSET;
+
+typedef DWORD DBBINDURLFLAG;
+typedef DWORD DBBINDURLSTATUS;
+
+typedef struct tagDBIMPLICITSESSION
+{
+    IUnknown *pUnkOuter;
+    IID *piid;
+    IUnknown *pSession;
+} DBIMPLICITSESSION;
+
+typedef WORD DBTYPE;
+
+enum DBTYPEENUM
+{
+    DBTYPE_EMPTY         = 0,
+    DBTYPE_NULL          = 1,
+    DBTYPE_I2            = 2,
+    DBTYPE_I4            = 3,
+    DBTYPE_R4            = 4,
+    DBTYPE_R8            = 5,
+    DBTYPE_CY            = 6,
+    DBTYPE_DATE          = 7,
+    DBTYPE_BSTR          = 8,
+    DBTYPE_IDISPATCH     = 9,
+    DBTYPE_ERROR         = 10,
+    DBTYPE_BOOL          = 11,
+    DBTYPE_VARIANT       = 12,
+    DBTYPE_IUNKNOWN      = 13,
+    DBTYPE_DECIMAL       = 14,
+    DBTYPE_I1            = 16,
+    DBTYPE_UI1           = 17,
+    DBTYPE_UI2           = 18,
+    DBTYPE_UI4           = 19,
+    DBTYPE_I8            = 20,
+    DBTYPE_UI8           = 21,
+    DBTYPE_GUID          = 72,
+    DBTYPE_BYTES         = 128,
+    DBTYPE_STR           = 129,
+    DBTYPE_WSTR          = 130,
+    DBTYPE_NUMERIC       = 131,
+    DBTYPE_UDT           = 132,
+    DBTYPE_DBDATE        = 133,
+    DBTYPE_DBTIME        = 134,
+    DBTYPE_DBTIMESTAMP   = 135,
+
+    DBTYPE_VECTOR        = 0x1000,
+    DBTYPE_ARRAY         = 0x2000,
+    DBTYPE_BYREF         = 0x4000,
+    DBTYPE_RESERVED      = 0x8000
+};
+
+enum DBTYPEENUM15
+{
+    DBTYPE_HCHAPTER      = 136
+};
+
+enum DBTYPEENUM20
+{
+    DBTYPE_FILETIME      = 64,
+    DBTYPE_PROPVARIANT   = 138,
+    DBTYPE_VARNUMERIC    = 139
+};
+
+typedef DWORD DBSTATUS;
+
+enum DBSTATUSENUM
+{
+    DBSTATUS_S_OK = 0,
+    DBSTATUS_E_BADACCESSOR = 1,
+    DBSTATUS_E_CANTCONVERTVALUE = 2,
+    DBSTATUS_S_ISNULL = 3,
+    DBSTATUS_S_TRUNCATED = 4,
+    DBSTATUS_E_SIGNMISMATCH = 5,
+    DBSTATUS_E_DATAOVERFLOW = 6,
+    DBSTATUS_E_CANTCREATE = 7,
+    DBSTATUS_E_UNAVAILABLE = 8,
+    DBSTATUS_E_PERMISSIONDENIED = 9,
+    DBSTATUS_E_INTEGRITYVIOLATION = 10,
+    DBSTATUS_E_SCHEMAVIOLATION = 11,
+    DBSTATUS_E_BADSTATUS = 12,
+    DBSTATUS_S_DEFAULT = 13
+};
+
+enum DBPROPENUM
+{
+    DBPROP_ABORTPRESERVE                   = 0x00000002,
+    DBPROP_ACTIVESESSIONS                  = 0x00000003,
+    DBPROP_ASYNCTXNCOMMIT                  = 0x00000004,
+    DBPROP_AUTH_CACHE_AUTHINFO             = 0x00000005,
+    DBPROP_AUTH_ENCRYPT_PASSWORD           = 0x00000006,
+    DBPROP_AUTH_INTEGRATED                 = 0x00000007,
+    DBPROP_AUTH_MASK_PASSWORD              = 0x00000008,
+    DBPROP_AUTH_PASSWORD                   = 0x00000009,
+    DBPROP_AUTH_PERSIST_ENCRYPTED          = 0x0000000a,
+    DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO = 0x0000000b,
+    DBPROP_AUTH_USERID                     = 0x0000000c,
+    DBPROP_BLOCKINGSTORAGEOBJECTS          = 0x0000000d,
+    DBPROP_BOOKMARKS                       = 0x0000000e,
+    DBPROP_BOOKMARKSKIPPED                 = 0x0000000f,
+    DBPROP_BOOKMARKTYPE                    = 0x00000010,
+    DBPROP_CACHEDEFERRED                   = 0x00000011,
+    DBPROP_CANFETCHBACKWARDS               = 0x00000012,
+    DBPROP_CANHOLDROWS                     = 0x00000013,
+    DBPROP_CANSCROLLBACKWARDS              = 0x00000015,
+    DBPROP_CATALOGLOCATION                 = 0x00000016,
+    DBPROP_CATALOGTERM                     = 0x00000017,
+    DBPROP_CATALOGUSAGE                    = 0x00000018,
+    DBPROP_COL_AUTOINCREMENT               = 0x0000001a,
+    DBPROP_COL_DEFAULT                     = 0x0000001b,
+    DBPROP_COL_DESCRIPTION                 = 0x0000001c,
+    DBPROP_COL_NULLABLE                    = 0x0000001d,
+    DBPROP_COL_PRIMARYKEY                  = 0x0000001e,
+    DBPROP_COL_UNIQUE                      = 0x0000001f,
+    DBPROP_COLUMNDEFINITION                = 0x00000020,
+    DBPROP_COLUMNRESTRICT                  = 0x00000021,
+    DBPROP_COMMANDTIMEOUT                  = 0x00000022,
+    DBPROP_COMMITPRESERVE                  = 0x00000023,
+    DBPROP_CONCATNULLBEHAVIOR              = 0x00000024,
+    DBPROP_CURRENTCATALOG                  = 0x00000025,
+    DBPROP_DATASOURCENAME                  = 0x00000026,
+    DBPROP_DATASOURCEREADONLY              = 0x00000027,
+    DBPROP_DBMSNAME                        = 0x00000028,
+    DBPROP_DBMSVER                         = 0x00000029,
+    DBPROP_DEFERRED                        = 0x0000002a,
+    DBPROP_DELAYSTORAGEOBJECTS             = 0x0000002b,
+    DBPROP_GROUPBY                         = 0x0000002c,
+    DBPROP_HETEROGENEOUSTABLES             = 0x0000002d,
+    DBPROP_IDENTIFIERCASE                  = 0x0000002e,
+    DBPROP_IMMOBILEROWS                    = 0x0000002f,
+    DBPROP_INDEX_AUTOUPDATE                = 0x00000030,
+    DBPROP_INDEX_CLUSTERED                 = 0x00000031,
+    DBPROP_INDEX_FILLFACTOR                = 0x00000032,
+    DBPROP_INDEX_INITIALSIZE               = 0x00000033,
+    DBPROP_INDEX_NULLCOLLATION             = 0x00000034,
+    DBPROP_INDEX_NULLS                     = 0x00000035,
+    DBPROP_INDEX_PRIMARYKEY                = 0x00000036,
+    DBPROP_INDEX_SORTBOOKMARKS             = 0x00000037,
+    DBPROP_INDEX_TYPE                      = 0x00000038,
+    DBPROP_INDEX_UNIQUE                    = 0x00000039,
+    DBPROP_INIT_DATASOURCE                 = 0x0000003b,
+    DBPROP_INIT_HWND                       = 0x0000003c,
+    DBPROP_INIT_IMPERSONATION_LEVEL        = 0x0000003d,
+    DBPROP_INIT_LOCATION                   = 0x0000003e,
+    DBPROP_INIT_MODE                       = 0x0000003f,
+    DBPROP_INIT_PROMPT                     = 0x00000040,
+    DBPROP_INIT_PROTECTION_LEVEL           = 0x00000041,
+    DBPROP_INIT_TIMEOUT                    = 0x00000042,
+    DBPROP_LITERALBOOKMARKS                = 0x00000043,
+    DBPROP_LITERALIDENTITY                 = 0x00000044,
+    DBPROP_MAXINDEXSIZE                    = 0x00000046,
+    DBPROP_MAXOPENROWS                     = 0x00000047,
+    DBPROP_MAXPENDINGROWS                  = 0x00000048,
+    DBPROP_MAXROWS                         = 0x00000049,
+    DBPROP_MAXROWSIZE                      = 0x0000004a,
+    DBPROP_MAXROWSIZEINCLUDESBLOB          = 0x0000004b,
+    DBPROP_MAXTABLESINSELECT               = 0x0000004c,
+    DBPROP_MAYWRITECOLUMN                  = 0x0000004d,
+    DBPROP_MEMORYUSAGE                     = 0x0000004e,
+    DBPROP_MULTIPLESTORAGEOBJECTS          = 0x00000050,
+    DBPROP_MULTITABLEUPDATE                = 0x00000051,
+    DBPROP_NOTIFICATIONPHASES              = 0x00000052,
+    DBPROP_NULLCOLLATION                   = 0x00000053,
+    DBPROP_OLEOBJECTS                      = 0x00000054,
+    DBPROP_ORDERBYCOLUMNSINSELECT          = 0x00000055,
+    DBPROP_ORDEREDBOOKMARKS                = 0x00000056,
+    DBPROP_OTHERINSERT                     = 0x00000057,
+    DBPROP_OTHERUPDATEDELETE               = 0x00000058,
+    DBPROP_OWNINSERT                       = 0x00000059,
+    DBPROP_OWNUPDATEDELETE                 = 0x0000005a,
+    DBPROP_PREPAREABORTBEHAVIOR            = 0x0000005b,
+    DBPROP_PREPARECOMMITBEHAVIOR           = 0x0000005c,
+    DBPROP_PROCEDURETERM                   = 0x0000005d,
+    DBPROP_PROVIDERNAME                    = 0x00000060,
+    DBPROP_PROVIDEROLEDBVER                = 0x00000061,
+    DBPROP_PROVIDERVER                     = 0x00000062,
+    DBPROP_QUICKRESTART                    = 0x00000063,
+    DBPROP_QUOTEDIDENTIFIERCASE            = 0x00000064,
+    DBPROP_REENTRANTEVENTS                 = 0x00000065,
+    DBPROP_REMOVEDELETED                   = 0x00000066,
+    DBPROP_REPORTMULTIPLECHANGES           = 0x00000067,
+    DBPROP_ROWRESTRICT                     = 0x00000068,
+    DBPROP_ROWTHREADMODEL                  = 0x00000069,
+    DBPROP_SCHEMATERM                      = 0x0000006a,
+    DBPROP_SCHEMAUSAGE                     = 0x0000006b,
+    DBPROP_SERVERCURSOR                    = 0x0000006c,
+    DBPROP_SQLSUPPORT                      = 0x0000006d,
+    DBPROP_STRUCTUREDSTORAGE               = 0x0000006f,
+    DBPROP_SUBQUERIES                      = 0x00000070,
+    DBPROP_SUPPORTEDTXNISOLEVELS           = 0x00000071,
+    DBPROP_SUPPORTEDTXNISORETAIN           = 0x00000072,
+    DBPROP_TABLETERM                       = 0x00000073,
+    DBPROP_TRANSACTEDOBJECT                = 0x00000074,
+    DBPROP_UPDATABILITY                    = 0x00000075,
+    DBPROP_USERNAME                        = 0x00000076,
+    DBPROP_STRONGIDENTITY                  = 0x00000077,
+    DBPROP_BYREFACCESSORS                  = 0x00000078,
+    DBPROP_IAccessor                       = 0x00000079,
+    DBPROP_IColumnsInfo                    = 0x0000007a,
+    DBPROP_IColumnsRowset                  = 0x0000007b,
+    DBPROP_IConnectionPointContainer       = 0x0000007c,
+    DBPROP_IRowset                         = 0x0000007e,
+    DBPROP_IRowsetChange                   = 0x0000007f,
+    DBPROP_IRowsetIdentity                 = 0x00000080,
+    DBPROP_IRowsetInfo                     = 0x00000081,
+    DBPROP_IRowsetLocate                   = 0x00000082,
+    DBPROP_IRowsetResynch                  = 0x00000084,
+    DBPROP_IRowsetScroll                   = 0x00000085,
+    DBPROP_IRowsetUpdate                   = 0x00000086,
+    DBPROP_ISupportErrorInfo               = 0x00000087,
+    DBPROP_ILockBytes                      = 0x00000088,
+    DBPROP_ISequentialStream               = 0x00000089,
+    DBPROP_IStorage                        = 0x0000008a,
+    DBPROP_IStream                         = 0x0000008b,
+    DBPROP_TBL_TEMPTABLE                   = 0x0000008c,
+    DBPROP_IRowsetIndex                    = 0x0000009f,
+    DBPROP_INIT_PROVIDERSTRING             = 0x000000a0,
+    DBPROP_SUPPORTEDTXNDDL                 = 0x000000a1,
+    DBPROP_INDEX_TEMPINDEX                 = 0x000000a3,
+    DBPROP_COL_FIXEDLENGTH                 = 0x000000a7,
+    DBPROP_ASYNCTXNABORT                   = 0x000000a8,
+    DBPROP_DSOTHREADMODEL                  = 0x000000a9,
+    DBPROP_NOTIFYCOLUMNSET                 = 0x000000ab,
+    DBPROP_NOTIFYROWDELETE                 = 0x000000ad,
+    DBPROP_NOTIFYROWFIRSTCHANGE            = 0x000000ae,
+    DBPROP_NOTIFYROWINSERT                 = 0x000000af,
+    DBPROP_NOTIFYROWRESYNCH                = 0x000000b1,
+    DBPROP_NOTIFYROWSETRELEASE             = 0x000000b2,
+    DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE = 0x000000b3,
+    DBPROP_NOTIFYROWUNDOCHANGE             = 0x000000b4,
+    DBPROP_NOTIFYROWUNDODELETE             = 0x000000b5,
+    DBPROP_NOTIFYROWUNDOINSERT             = 0x000000b6,
+    DBPROP_NOTIFYROWUPDATE                 = 0x000000b7,
+    DBPROP_OUTPUTPARAMETERAVAILABILITY     = 0x000000b8,
+    DBPROP_PERSISTENTIDTYPE                = 0x000000b9,
+    DBPROP_INIT_LCID                       = 0x000000ba,
+    DBPROP_APPENDONLY                      = 0x000000bb,
+    DBPROP_CHANGEINSERTEDROWS              = 0x000000bc,
+    DBPROP_RETURNPENDINGINSERTS            = 0x000000bd,
+    DBPROP_SESS_AUTOCOMMITISOLEVELS        = 0x000000be,
+    DBPROP_MULTIPLEPARAMSETS               = 0x000000bf,
+    DBPROP_ROWSETCONVERSIONSONCOMMAND      = 0x000000c0,
+    DBPROP_IConvertType                    = 0x000000c2,
+    DBPROP_MULTIPLERESULTS                 = 0x000000c4,
+    DBPROP_NOTIFICATIONGRANULARITY         = 0x000000c6,
+    DBPROP_NOTIFYROWSETCHANGED             = 0x000000d3,
+};
+
+enum DBPROPENUM15 {
+    DBPROP_FILTERCOMPAREOPS                = 0x000000d1,
+    DBPROP_FINDCOMPAREOPS                  = 0x000000d2,
+    DBPROP_IChapteredRowset                = 0x000000ca,
+    DBPROP_IDBAsynchStatus                 = 0x000000cb,
+    DBPROP_IRowsetFind                     = 0x000000cc,
+    DBPROP_IRowsetView                     = 0x000000d4,
+    DBPROP_IViewChapter                    = 0x000000d5,
+    DBPROP_IViewFilter                     = 0x000000d6,
+    DBPROP_IViewRowset                     = 0x000000d7,
+    DBPROP_IViewSort                       = 0x000000d8,
+    DBPROP_INIT_ASYNCH                     = 0x000000c8,
+    DBPROP_MAXOPENCHAPTERS                 = 0x000000c7,
+    DBPROP_MAXORSINFILTER                  = 0x000000cd,
+    DBPROP_MAXSORTCOLUMNS                  = 0x000000ce,
+    DBPROP_ROWSET_ASYNCH                   = 0x000000c9,
+    DBPROP_SORTONINDEX                     = 0x000000cf
+};
+
+enum DBPROPENUM20 {
+    DBPROP_IMultipleResults                = 0x000000d9,
+    DBPROP_DATASOURCE_TYPE                 = 0x000000fb,
+    MDPROP_AXES                            = 0x000000fc,
+    MDPROP_FLATTENING_SUPPORT              = 0x000000fd,
+    MDPROP_MDX_JOINCUBES                   = 0x000000fe,
+    MDPROP_NAMED_LEVELS                    = 0x000000ff,
+    MDPROP_RANGEROWSET                     = 0x00000100,
+    MDPROP_MDX_SLICER                      = 0x000000da,
+    MDPROP_MDX_CUBEQUALIFICATION           = 0x000000db,
+    MDPROP_MDX_OUTERREFERENCE              = 0x000000dc,
+    MDPROP_MDX_QUERYBYPROPERTY             = 0x000000dd,
+    MDPROP_MDX_CASESUPPORT                 = 0x000000de,
+    MDPROP_MDX_STRING_COMPOP               = 0x000000e0,
+    MDPROP_MDX_DESCFLAGS                   = 0x000000e1,
+    MDPROP_MDX_SET_FUNCTIONS               = 0x000000e2,
+    MDPROP_MDX_MEMBER_FUNCTIONS            = 0x000000e3,
+    MDPROP_MDX_NUMERIC_FUNCTIONS           = 0x000000e4,
+    MDPROP_MDX_FORMULAS                    = 0x000000e5,
+    MDPROP_AGGREGATECELL_UPDATE            = 0x000000e6,
+    MDPROP_MDX_AGGREGATECELL_UPDATE        = MDPROP_AGGREGATECELL_UPDATE,
+    MDPROP_MDX_OBJQUALIFICATION            = 0x00000105,
+    MDPROP_MDX_NONMEASURE_EXPRESSIONS      = 0x00000106,
+    DBPROP_ACCESSORDER                     = 0x000000e7,
+    DBPROP_BOOKMARKINFO                    = 0x000000e8,
+    DBPROP_INIT_CATALOG                    = 0x000000e9,
+    DBPROP_ROW_BULKOPS                     = 0x000000ea,
+    DBPROP_PROVIDERFRIENDLYNAME            = 0x000000eb,
+    DBPROP_LOCKMODE                        = 0x000000ec,
+    DBPROP_MULTIPLECONNECTIONS             = 0x000000ed,
+    DBPROP_UNIQUEROWS                      = 0x000000ee,
+    DBPROP_SERVERDATAONINSERT              = 0x000000ef,
+    DBPROP_STORAGEFLAGS                    = 0x000000f0,
+    DBPROP_CONNECTIONSTATUS                = 0x000000f4,
+    DBPROP_ALTERCOLUMN                     = 0x000000f5,
+    DBPROP_COLUMNLCID                      = 0x000000f6,
+    DBPROP_RESETDATASOURCE                 = 0x000000f7,
+    DBPROP_INIT_OLEDBSERVICES              = 0x000000f8,
+    DBPROP_IRowsetRefresh                  = 0x000000f9,
+    DBPROP_SERVERNAME                      = 0x000000fa,
+    DBPROP_IParentRowset                   = 0x00000101,
+    DBPROP_HIDDENCOLUMNS                   = 0x00000102,
+    DBPROP_PROVIDERMEMORY                  = 0x00000103,
+    DBPROP_CLIENTCURSOR                    = 0x00000104
+};
+
+
+enum DBPROPENUM21 {
+    DBPROP_TRUSTEE_USERNAME                = 0x000000f1,
+    DBPROP_TRUSTEE_AUTHENTICATION          = 0x000000f2,
+    DBPROP_TRUSTEE_NEWAUTHENTICATION       = 0x000000f3,
+    DBPROP_IRow                            = 0x00000107,
+    DBPROP_IRowChange                      = 0x00000108,
+    DBPROP_IRowSchemaChange                = 0x00000109,
+    DBPROP_IGetRow                         = 0x0000010a,
+    DBPROP_IScopedOperations               = 0x0000010b,
+    DBPROP_IBindResource                   = 0x0000010c,
+    DBPROP_ICreateRow                      = 0x0000010d,
+    DBPROP_INIT_BINDFLAGS                  = 0x0000010e,
+    DBPROP_INIT_LOCKOWNER                  = 0x0000010f,
+    DBPROP_GENERATEURL                     = 0x00000111,
+    DBPROP_IDBBinderProperties             = 0x00000112,
+    DBPROP_IColumnsInfo2                   = 0x00000113,
+    DBPROP_IRegisterProvider               = 0x00000114,
+    DBPROP_IGetSession                     = 0x00000115,
+    DBPROP_IGetSourceRow                   = 0x00000116,
+    DBPROP_IRowsetCurrentIndex             = 0x00000117,
+    DBPROP_OPENROWSETSUPPORT               = 0x00000118,
+    DBPROP_COL_ISLONG                      = 0x00000119
+};
+
+enum DBPROPENUM25 {
+    DBPROP_COL_SEED                        = 0x0000011a,
+    DBPROP_COL_INCREMENT                   = 0x0000011b,
+    DBPROP_INIT_GENERALTIMEOUT             = 0x0000011c,
+    DBPROP_COMSERVICES                     = 0x0000011d
+};
+
+enum DBPROPENUM26 {
+    DBPROP_OUTPUTSTREAM                    = 0x0000011e,
+    DBPROP_OUTPUTENCODING                  = 0x0000011f,
+    DBPROP_TABLESTATISTICS                 = 0x00000120,
+    DBPROP_SKIPROWCOUNTRESULTS             = 0x00000123,
+    DBPROP_IRowsetBookmark                 = 0x00000124,
+    MDPROP_VISUALMODE                      = 0x00000125,
+};
+
+cpp_quote("#ifdef DBINITCONSTANTS")
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
+cpp_quote("        EXTERN_C const GUID name DECLSPEC_HIDDEN;     \\")
+cpp_quote("        EXTERN_C const GUID name =                    \\")
+cpp_quote("	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }")
+cpp_quote("#else")
+cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
+cpp_quote("        const GUID name DECLSPEC_HIDDEN;      \\")
+cpp_quote("        const GUID name =                             \\")
+cpp_quote("	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }")
+cpp_quote("#endif")
+cpp_quote("#else")
+cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
+cpp_quote("    EXTERN_C const GUID name DECLSPEC_HIDDEN")
+cpp_quote("#endif")
+
+cpp_quote("DEFINE_DBGUID(DB_NULLGUID,       0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);")
+cpp_quote("DEFINE_DBGUID(DBPROPSET_DBINIT,  0xc8b522bc, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_SESSION,    0xc8b522f5, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_ROWSET,     0xc8b522f6, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_ROW,        0xc8b522f7, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_STREAM,     0xc8b522f9, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+
+cpp_quote("#define DBPROMPT_PROMPT              0x01")
+cpp_quote("#define DBPROMPT_COMPLETE            0x02")
+cpp_quote("#define DBPROMPT_COMPLETEREQUIRED    0x03")
+cpp_quote("#define DBPROMPT_NOPROMPT            0x04")
+
+cpp_quote("#define DBPROPVAL_STGM_READ                 OF_READ")
+cpp_quote("#define DBPROPVAL_STGM_WRITE                OF_WRITE")
+cpp_quote("#define DBPROPVAL_STGM_READWRITE            OF_READWRITE")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_NONE      OF_SHARE_DENY_NONE")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_READ      OF_SHARE_DENY_READ")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_WRITE     OF_SHARE_DENY_WRITE)")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_EXCLUSIVE      OF_SHARE_EXCLUSIVE")
+cpp_quote("#define DBPROPVAL_STGM_DIRECT               0x00010000")
+cpp_quote("#define DBPROPVAL_STGM_TRANSACTED           0x00020000")
+cpp_quote("#define DBPROPVAL_STGM_CREATE               OF_CREATE")
+cpp_quote("#define DBPROPVAL_STGM_CONVERT              0x00040000")
+cpp_quote("#define DBPROPVAL_STGM_FAILIFTHERE          0x00080000")
+cpp_quote("#define DBPROPVAL_STGM_PRIORITY             0x00100000")
+cpp_quote("#define DBPROPVAL_STGM_DELETEONRELEASE      0x00200000")
+cpp_quote("#define DBPROPVAL_GB_COLLATE                __MSABI_LONG(0x00000010)")
+cpp_quote("#define DBPROPVAL_CS_UNINITIALIZED          __MSABI_LONG(0x00000000)")
+cpp_quote("#define DBPROPVAL_CS_INITIALIZED            __MSABI_LONG(0x00000001)")
+cpp_quote("#define DBPROPVAL_CS_COMMUNICATIONFAILURE   __MSABI_LONG(0x00000002)")
+
+cpp_quote("#define DBPROPVAL_RD_RESETALL               __MSABI_LONG(0xffffffff)")
+cpp_quote("#define DBPROPVAL_OS_RESOURCEPOOLING        __MSABI_LONG(0x00000001)")
+cpp_quote("#define DBPROPVAL_OS_TXNENLISTMENT          __MSABI_LONG(0x00000002)")
+cpp_quote("#define DBPROPVAL_OS_CLIENTCURSOR           __MSABI_LONG(0x00000004)")
+cpp_quote("#define DBPROPVAL_OS_ENABLEALL              __MSABI_LONG(0xffffffff)")
+cpp_quote("#define DBPROPVAL_BI_CROSSROWSET            __MSABI_LONG(0x00000001)")
+
+
+typedef struct tagDBCOLUMNACCESS
+{
+    void *pData;
+    DBID columnid;
+    DBLENGTH cbDataLen;
+    DBSTATUS dwStatus;
+    DBLENGTH cbMaxLen;
+    DB_DWRESERVE dwReserved;
+    DBTYPE wType;
+    BYTE bPrecision;
+    BYTE bScale;
+} DBCOLUMNACCESS;
+
+typedef DWORD DBROWSTATUS;
+
+enum DBROWSTATUSENUM
+{
+    DBROWSTATUS_S_OK,
+    DBROWSTATUS_S_LOCKUPGRADED,
+    DBROWSTATUS_S_MULTIPLECHANGES,
+    DBROWSTATUS_S_PENDINGCHANGES,
+    DBROWSTATUS_E_CANCELED,
+    DBROWSTATUS_E_CANTLOCKROW,
+    DBROWSTATUS_E_CANTRELEASE,
+    DBROWSTATUS_E_CONCURRENCYVIOLATION,
+    DBROWSTATUS_E_DELETED,
+    DBROWSTATUS_E_PENDINGINSERT,
+    DBROWSTATUS_E_NEWLYINSERTED,
+    DBROWSTATUS_E_INTEGRITYVIOLATION,
+    DBROWSTATUS_E_INVALID,
+    DBROWSTATUS_E_MAXPENDCHANGESEXCEEDED,
+    DBROWSTATUS_E_OBJECTOPEN,
+    DBROWSTATUS_E_OUTOFMEMORY,
+    DBROWSTATUS_E_PERMISSIONDENIED,
+    DBROWSTATUS_E_LIMITREACHED,
+    DBROWSTATUS_E_SCHEMAVIOLATION,
+    DBROWSTATUS_E_FAIL,
+
+};
+
+typedef DWORD DBPART;
+
+enum DBPARTENUM
+{
+    DBPART_INVALID  = 0,
+    DBPART_VALUE    = 1,
+    DBPART_LENGTH   = 2,
+    DBPART_STATUS   = 4,
+};
+
+typedef DWORD DBPARAMIO;
+
+enum DBPARAMIOENUM
+{
+    DBPARAMIO_NOTPARAM = 0,
+    DBPARAMIO_INPUT    = 1,
+    DBPARAMIO_OUTPUT   = 2,
+};
+
+typedef DWORD DBMEMOWNER;
+
+enum DBMEMOWNERENUM
+{
+    DBMEMOWNER_CLIENTOWNED    = 0,
+    DBMEMOWNER_PROVIDEROWNED  = 1,
+};
+
+typedef struct tagDBOBJECT
+{
+    DWORD dwFlags;
+    IID iid;
+} DBOBJECT;
+
+typedef struct tagDBBINDEXT
+{
+    [size_is((ULONG)ulExtension)] BYTE *pExtension;
+    DBCOUNTITEM ulExtension;
+} DBBINDEXT;
+
+typedef struct tagDBBINDING
+{
+    DBORDINAL iOrdinal;
+    DBBYTEOFFSET obValue;
+    DBBYTEOFFSET obLength;
+    DBBYTEOFFSET obStatus;
+    ITypeInfo *pTypeInfo;
+    DBOBJECT *pObject;
+    DBBINDEXT *pBindExt;
+    DBPART dwPart;
+    DBMEMOWNER dwMemOwner;
+    DBPARAMIO eParamIO;
+    DBLENGTH cbMaxLen;
+    DWORD dwFlags;
+    DBTYPE wType;
+    BYTE bPrecision;
+    BYTE bScale;
+} DBBINDING;
+
+typedef ULONG_PTR HACCESSOR;
+
+cpp_quote("#define DB_INVALID_HACCESSOR 0x00")
+
+typedef ULONG_PTR HROW;
+
+cpp_quote("#define DB_NULL_HROW 0x00")
+
+typedef ULONG_PTR HWATCHREGION;
+
+cpp_quote("#define DBWATCHREGION_NULL NULL")
+
+typedef ULONG_PTR HCHAPTER;
+
+cpp_quote("#define DB_NULL_HCHAPTER 0x00")
+
+typedef struct tagDBPARAMS
+{
+    void *pData;
+    DB_UPARAMS cParamSets;
+    HACCESSOR hAccessor;
+} DBPARAMS;
+
+typedef DWORD DBASYNCHOP;
+
+enum DBASYNCHOPENUM
+{
+    DBSYNCHOP_OPEN,
+};
+
+typedef DWORD DBASYNCHPHASE;
+
+enum DBASYNCHPHASEENUM
+{
+    DBASYNCHPHASE_INITIALIZATION,
+    DBASYNCHPHASE_POPULATION,
+    DBASYNCHPHASE_COMPLETE,
+    DBASYNCHPHASE_CANCELED,
+};
+
+typedef struct tagRMTPACK
+{
+    ISequentialStream *pISeqStream;
+    ULONG cbData;
+    ULONG cBSTR;
+    [size_is(cBSTR)] BSTR *rgBSTR;
+    ULONG cVARIANT;
+    [size_is(cVARIANT)] VARIANT *rgVARIANT;
+    ULONG cIDISPATCH;
+    [size_is(cIDISPATCH)] IDispatch **rgIDISPATCH;
+    ULONG cIUNKNOWN;
+    [size_is(cIUNKNOWN)] IUnknown **rgIUNKNOWN;
+    ULONG cPROPVARIANT;
+    [size_is(cPROPVARIANT)] PROPVARIANT *rgPROPVARIANT;
+    ULONG cArray;
+    [size_is(cArray)] VARIANT *rgArray;
+} RMTPACK;
+
+typedef struct tagDBDATE {
+	SHORT year;
+	USHORT month;
+	USHORT day;
+} DBDATE;
+
+typedef struct tagDBTIME {
+	USHORT hour;
+	USHORT minute;
+	USHORT second;
+} DBTIME;
+
+typedef struct tagDBTIMESTAMP {
+	SHORT year;
+	USHORT month;
+	USHORT day;
+	USHORT hour;
+	USHORT minute;
+	USHORT second;
+	ULONG fraction;
+} DBTIMESTAMP;
+
+typedef DWORD DBREASON;
+typedef DWORD DBEVENTPHASE;
+
+enum DBEVENTPHASEENUM {
+    DBEVENTPHASE_OKTODO,
+    DBEVENTPHASE_ABOUTTODO,
+    DBEVENTPHASE_SYNCHAFTER,
+    DBEVENTPHASE_FAILEDTODO,
+    DBEVENTPHASE_DIDEVENT
+};
+
+enum DBREASONENUM {
+    DBREASON_ROWSET_FETCHPOSITIONCHANGE,
+    DBREASON_ROWSET_RELEASE,
+    DBREASON_COLUMN_SET,
+    DBREASON_COLUMN_RECALCULATED,
+    DBREASON_ROW_ACTIVATE,
+    DBREASON_ROW_RELEASE,
+    DBREASON_ROW_DELETE,
+    DBREASON_ROW_FIRSTCHANCE,
+    DBREASON_ROW_INSERT,
+    DBREASON_ROW_RESYNCH,
+    DBREASON_ROW_UNDOCHANGE,
+    DBREASON_ROW_UNDOINSERT,
+    DBREASON_ROW_UNDODELETE,
+    DBREASON_ROW_UPDATE,
+    DBREASON_ROWSET_CHANGED
+};
+
+enum DBREASONENUM15 {
+    DBREASON_ROWPOSITION_CHANGED = DBREASON_ROWSET_CHANGED + 1,
+    DBREASON_ROWPOSITION_CHAPTERCHANGED,
+    DBREASON_ROWPOSITION_CLEARED,
+    DBREASON_ROW_ASYNCHINSERT
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h
new file mode 100644
index 0000000..0f359d0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2004 Ulrich Czekalla
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DBT_H
+#define __WINE_DBT_H
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+/* dbt.h doesn't use the normal convention, it adds an underscore before A/W */
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_DBT_TYPE_AW(type)  /* nothing */
+#else
+# define DECL_WINELIB_DBT_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;
+#endif
+
+#define DBT_NO_DISK_SPACE               0x0047
+#define DBT_LOW_DISK_SPACE              0x0048
+#define DBT_CONFIGMGPRIVATE             0x7FFF
+#define DBT_DEVICEARRIVAL               0x8000
+#define DBT_DEVICEQUERYREMOVE           0x8001
+#define DBT_DEVICEQUERYREMOVEFAILED     0x8002
+#define DBT_DEVICEREMOVEPENDING         0x8003
+#define DBT_DEVICEREMOVECOMPLETE        0x8004
+#define DBT_DEVICETYPESPECIFIC          0x8005
+#define DBT_CUSTOMEVENT                 0x8006
+
+typedef struct _DEV_BROADCAST_HDR
+{
+    DWORD dbch_size;
+    DWORD dbch_devicetype;
+    DWORD dbch_reserved;
+} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;
+
+#define DBT_DEVTYP_OEM                  0x00000000
+#define DBT_DEVTYP_DEVNODE              0x00000001
+#define DBT_DEVTYP_VOLUME               0x00000002
+#define DBT_DEVTYP_PORT                 0x00000003
+#define DBT_DEVTYP_NET                  0x00000004
+#define DBT_DEVTYP_DEVICEINTERFACE      0x00000005
+#define DBT_DEVTYP_HANDLE               0x00000006
+
+typedef struct _DEV_BROADCAST_OEM
+{
+    DWORD       dbco_size;
+    DWORD       dbco_devicetype;
+    DWORD       dbco_reserved;
+    DWORD       dbco_identifier;
+    DWORD       dbco_suppfunc;
+} DEV_BROADCAST_OEM, *PDEV_BROADCAST_OEM;
+
+typedef struct _DEV_BROADCAST_DEVNODE
+{
+    DWORD       dbcd_size;
+    DWORD       dbcd_devicetype;
+    DWORD       dbcd_reserved;
+    DWORD       dbcd_devnode;
+} DEV_BROADCAST_DEVNODE, *PDEV_BROADCAST_DEVNODE;
+
+typedef struct _DEV_BROADCAST_VOLUME
+{
+    DWORD       dbcv_size;
+    DWORD       dbcv_devicetype;
+    DWORD       dbcv_reserved;
+    DWORD       dbcv_unitmask;
+    WORD        dbcv_flags;
+} DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME;
+
+#define DBTF_MEDIA 0x0001
+#define DBTF_NET   0x0002
+
+typedef struct _DEV_BROADCAST_PORT_A
+{
+    DWORD       dbcp_size;
+    DWORD       dbcp_devicetype;
+    DWORD       dbcp_reserved;
+    char        dbcp_name[1];
+} DEV_BROADCAST_PORT_A, *PDEV_BROADCAST_PORT_A;
+
+typedef struct _DEV_BROADCAST_PORT_W
+{
+    DWORD       dbcp_size;
+    DWORD       dbcp_devicetype;
+    DWORD       dbcp_reserved;
+    WCHAR       dbcp_name[1];
+} DEV_BROADCAST_PORT_W, *PDEV_BROADCAST_PORT_W;
+
+DECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_PORT)
+DECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_PORT)
+
+typedef struct _DEV_BROADCAST_NET
+{
+    DWORD       dbcn_size;
+    DWORD       dbcn_devicetype;
+    DWORD       dbcn_reserved;
+    DWORD       dbcn_resource;
+    DWORD       dbcn_flags;
+} DEV_BROADCAST_NET, *PDEV_BROADCAST_NET;
+
+typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A
+{
+    DWORD       dbcc_size;
+    DWORD       dbcc_devicetype;
+    DWORD       dbcc_reserved;
+    GUID        dbcc_classguid;
+    CHAR        dbcc_name[1];
+} DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A;
+
+typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W
+{
+    DWORD       dbcc_size;
+    DWORD       dbcc_devicetype;
+    DWORD       dbcc_reserved;
+    GUID        dbcc_classguid;
+    WCHAR       dbcc_name[1];
+} DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W;
+
+DECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_DEVICEINTERFACE)
+DECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_DEVICEINTERFACE)
+
+typedef struct _DEV_BROADCAST_HANDLE
+{
+    DWORD       dbch_size;
+    DWORD       dbch_devicetype;
+    DWORD       dbch_reserved;
+    HANDLE      dbch_handle;
+    HDEVNOTIFY  dbch_hdevnotify;
+    GUID        dbch_eventguid;
+    LONG        dbch_nameoffset;
+    BYTE        dbch_data[1];
+} DEV_BROADCAST_HANDLE, *PDEV_BROADCAST_HANDLE;
+
+#undef DECL_WINELIB_DBT_TYPE_AW
+
+#endif /* __WINE_DBT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h
new file mode 100644
index 0000000..1e82a95
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h
@@ -0,0 +1,92 @@
+/*
+ * DCI driver interface
+ *
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DCIDDI_H
+#define __WINE_DCIDDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DCI Command Escape */
+#define DCICOMMAND	3075
+#define DCI_VERSION	0x0100
+
+#define DCICREATEPRIMARYSURFACE		1
+#define DCICREATEOFFSCREENSURFACE	2
+#define DCICREATEOVERLAYSURFACE		3
+#define DCIENUMSURFACE			4
+#define DCIESCAPE			5
+
+/* DCI Errors */
+#define DCI_OK		                0
+#define DCI_FAIL_GENERIC               -1
+#define DCI_FAIL_UNSUPPORTEDVERSION    -2
+#define DCI_FAIL_INVALIDSURFACE        -3
+#define DCI_FAIL_UNSUPPORTED           -4
+
+
+typedef int DCIRVAL; /* DCI callback return type */
+
+/*****************************************************************************
+ * Escape command structures
+ */
+typedef struct _DCICMD {
+    DWORD dwCommand;
+    DWORD dwParam1;
+    DWORD dwParam2;
+    DWORD dwVersion;
+    DWORD dwReserved;
+} DCICMD,*LPDCICMD;
+
+typedef struct _DCISURFACEINFO {
+    DWORD dwSize;
+    DWORD dwDCICaps;
+    DWORD dwCompression;
+    DWORD dwMask[3];
+    DWORD dwWidth;
+    DWORD dwHeight;
+    LONG  lStride;
+    DWORD dwBitCount;
+    ULONG_PTR dwOffSurface;
+    WORD  wSelSurface;
+    WORD  wReserved;
+    DWORD dwReserved1;
+    DWORD dwReserved2;
+    DWORD dwReserved3;
+    DCIRVAL (CALLBACK *BeginAccess)(LPVOID, LPRECT);
+    void (CALLBACK *EndAccess)(LPVOID);
+    void (CALLBACK *DestroySurface)(LPVOID);
+} DCISURFACEINFO, *LPDCISURFACEINFO;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_DCIDDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h
new file mode 100644
index 0000000..12275cd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h
@@ -0,0 +1,47 @@
+/*
+ * DCI driver interface
+ *
+ * Copyright (C) 2005 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_DCIMAN
+#define _INC_DCIMAN
+
+#include <dciddi.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HDC         WINAPI DCIOpenProvider(void);
+void        WINAPI DCICloseProvider(HDC);
+int         WINAPI DCICreatePrimary(HDC,LPDCISURFACEINFO*);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _INC_DCIMAN */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h
new file mode 100644
index 0000000..bd6412f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DCOMMON_H
+#define __WINE_DCOMMON_H
+
+typedef enum DWRITE_MEASURING_MODE
+{
+    DWRITE_MEASURING_MODE_NATURAL,
+    DWRITE_MEASURING_MODE_GDI_CLASSIC,
+    DWRITE_MEASURING_MODE_GDI_NATURAL
+} DWRITE_MEASURING_MODE;
+
+#endif /* __WINE_DCOMMON_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h
new file mode 100644
index 0000000..a10ff8d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author:    Michael Veksler.
+ * Purpose:   dde declarations
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DDE_H
+#define __WINE_DDE_H
+
+#include <windef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _USER32_
+#define WINUSERAPI
+#else
+#define WINUSERAPI DECLSPEC_IMPORT
+#endif
+
+#include <dde.rh>
+
+/* DDEACK: wStatus in WM_DDE_ACK message */
+typedef struct
+{
+    unsigned short bAppReturnCode:8, reserved:6, fBusy:1, fAck:1;
+} DDEACK;
+
+/* DDEDATA: hData in WM_DDE_DATA message */
+typedef struct
+{
+    unsigned short unused:12, fResponse:1, fRelease:1, reserved:1, fAckReq:1;
+    short cfFormat;
+    BYTE Value[1];		/* undetermined array */
+} DDEDATA;
+
+/* DDEADVISE: hOptions in WM_DDE_ADVISE message */
+typedef struct
+{
+    unsigned short reserved:14, fDeferUpd:1, fAckReq:1;
+    short cfFormat;
+} DDEADVISE;
+
+/* DDEPOKE: hData in WM_DDE_POKE message. */
+typedef struct
+{
+    unsigned short unused:13, fRelease:1, fReserved:2;
+    short cfFormat;
+    BYTE Value[1];   	/* undetermined array */
+} DDEPOKE;
+
+WINUSERAPI BOOL        WINAPI DdeSetQualityOfService(HWND,const SECURITY_QUALITY_OF_SERVICE *,PSECURITY_QUALITY_OF_SERVICE);
+WINUSERAPI BOOL        WINAPI FreeDDElParam(UINT,LPARAM);
+WINUSERAPI BOOL        WINAPI ImpersonateDdeClientWindow(HWND,HWND);
+WINUSERAPI LPARAM      WINAPI PackDDElParam(UINT,UINT_PTR,UINT_PTR);
+WINUSERAPI LPARAM      WINAPI ReuseDDElParam(LPARAM,UINT,UINT,UINT_PTR,UINT_PTR);
+WINUSERAPI BOOL        WINAPI UnpackDDElParam(UINT,LPARAM,PUINT_PTR,PUINT_PTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DDE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
new file mode 100644
index 0000000..23076a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
@@ -0,0 +1,32 @@
+/*
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author:    Michael Veksler.
+ * Purpose:   dde declarations
+ *
+ * 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
+ */
+
+#define WM_DDE_INITIATE   0x3E0
+#define WM_DDE_TERMINATE  0x3E1
+#define WM_DDE_ADVISE	  0x3E2
+#define WM_DDE_UNADVISE   0x3E3
+#define WM_DDE_ACK	  0x3E4
+#define WM_DDE_DATA	  0x3E5
+#define WM_DDE_REQUEST	  0x3E6
+#define WM_DDE_POKE	  0x3E7
+#define WM_DDE_EXECUTE	  0x3E8
+#define WM_DDE_LAST	  WM_DDE_EXECUTE
+#define WM_DDE_FIRST	  WM_DDE_INITIATE
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h
new file mode 100644
index 0000000..00487e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h
@@ -0,0 +1,392 @@
+/*
+ * DDEML library definitions
+ *
+ * Copyright 1997 Alexandre Julliard
+ * Copyright 1997 Len White
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DDEML_H
+#define __WINE_DDEML_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef _USER32_
+#define WINUSERAPI
+#else
+#define WINUSERAPI DECLSPEC_IMPORT
+#endif
+
+/* Codepage Constants
+ */
+
+#define CP_WINANSI      1004
+#define CP_WINUNICODE   1200
+
+/* DDE synchronisation constants
+ */
+
+#define MSGF_DDEMGR 0x8001
+
+#define QID_SYNC	0xFFFFFFFF
+
+/*   Type variation for MS  deliberate departures from ANSI standards
+ */
+
+#define EXPENTRY CALLBACK
+
+#define SZDDESYS_TOPIC		TEXT("System")
+#define SZDDESYS_ITEM_TOPICS	TEXT("Topics")
+#define SZDDESYS_ITEM_SYSITEMS	TEXT("SysItems")
+#define SZDDESYS_ITEM_RTNMSG	TEXT("ReturnMessage")
+#define SZDDESYS_ITEM_STATUS	TEXT("Status")
+#define SZDDESYS_ITEM_FORMATS	TEXT("Formats")
+#define SZDDESYS_ITEM_HELP	TEXT("Help")
+#define SZDDE_ITEM_ITEMLIST	TEXT("TopicItemList")
+
+/***************************************************
+
+      FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation
+
+***************************************************/
+
+#define     XST_NULL              0
+#define     XST_INCOMPLETE        1
+#define     XST_CONNECTED         2
+#define     XST_INIT1             3
+#define     XST_INIT2             4
+#define     XST_REQSENT           5
+#define     XST_DATARCVD          6
+#define     XST_POKESENT          7
+#define     XST_POKEACKRCVD       8
+#define     XST_EXECSENT          9
+#define     XST_EXECACKRCVD      10
+#define     XST_ADVSENT          11
+#define     XST_UNADVSENT        12
+#define     XST_ADVACKRCVD       13
+#define     XST_UNADVACKRCVD     14
+#define     XST_ADVDATASENT      15
+#define     XST_ADVDATAACKRCVD   16
+
+#define     ST_CONNECTED            0x0001
+#define     ST_ADVISE               0x0002
+#define     ST_ISLOCAL              0x0004
+#define     ST_BLOCKED              0x0008
+#define     ST_CLIENT               0x0010
+#define     ST_TERMINATED           0x0020
+#define     ST_INLIST               0x0040
+#define     ST_BLOCKNEXT            0x0080
+#define     ST_ISSELF               0x0100
+
+/*
+ * DdeEnableCallback function codes
+ */
+
+#define     EC_ENABLEALL                 0
+#define     EC_ENABLEONE                 ST_BLOCKNEXT
+#define     EC_DISABLE                   ST_BLOCKED
+#define     EC_QUERYWAITING              2
+
+/*
+ * Callback filter flags for use with standard apps.
+ */
+
+#define     CBF_FAIL_SELFCONNECTIONS     0x00001000
+#define     CBF_FAIL_CONNECTIONS         0x00002000
+#define     CBF_FAIL_ADVISES             0x00004000
+#define     CBF_FAIL_EXECUTES            0x00008000
+#define     CBF_FAIL_POKES               0x00010000
+#define     CBF_FAIL_REQUESTS            0x00020000
+#define     CBF_FAIL_ALLSVRXACTIONS      0x0003f000
+
+#define     CBF_SKIP_CONNECT_CONFIRMS    0x00040000
+#define     CBF_SKIP_REGISTRATIONS       0x00080000
+#define     CBF_SKIP_UNREGISTRATIONS     0x00100000
+#define     CBF_SKIP_DISCONNECTS         0x00200000
+#define     CBF_SKIP_ALLNOTIFICATIONS    0x003c0000
+
+#define     CBR_BLOCK                    ((HDDEDATA)-1)
+
+/*
+ * Application command flags
+ */
+#define     APPCMD_CLIENTONLY            __MSABI_LONG(0x00000010)
+#define     APPCMD_FILTERINITS           __MSABI_LONG(0x00000020)
+#define     APPCMD_MASK                  __MSABI_LONG(0x00000FF0)
+
+/*
+ * Application classification flags
+ */
+
+#define     APPCLASS_STANDARD            __MSABI_LONG(0x00000000)
+#define     APPCLASS_MONITOR             __MSABI_LONG(0x00000001)
+#define     APPCLASS_MASK                __MSABI_LONG(0x0000000F)
+
+/*
+ * Callback filter flags for use with MONITOR apps - 0 implies no monitor
+ * callbacks.
+ */
+#define     MF_HSZ_INFO                  0x01000000
+#define     MF_SENDMSGS                  0x02000000
+#define     MF_POSTMSGS                  0x04000000
+#define     MF_CALLBACKS                 0x08000000
+#define     MF_ERRORS                    0x10000000
+#define     MF_LINKS                     0x20000000
+#define     MF_CONV                      0x40000000
+
+#define     MF_MASK                      0xFF000000
+
+/*
+ *	DdeNameService service name flags
+ */
+
+#define     DNS_REGISTER		 0x0001
+#define     DNS_UNREGISTER		 0x0002
+#define     DNS_FILTERON		 0x0004
+#define     DNS_FILTEROFF         	 0x0008
+
+
+/****************************************************
+
+      End of Flags section
+
+****************************************************/
+
+/****************************************************
+
+	Message Types Section
+
+****************************************************/
+
+#define XTYPF_NOBLOCK		0x0002		/* CBR_NOBLOCK will not work */
+#define XTYPF_NODATA		0x0004		/* DDE_FDEFERUPD  */
+#define XTYPF_ACKREQ		0x0008		/* DDE_FACKREQ */
+
+#define XCLASS_MASK		0xFC00
+#define XCLASS_BOOL		0x1000
+#define XCLASS_DATA		0x2000
+#define XCLASS_FLAGS		0x4000
+#define	XCLASS_NOTIFICATION	0x8000
+
+#define XTYP_ERROR		(0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
+#define XTYP_ADVDATA		(0x0010 | XCLASS_FLAGS)
+#define XTYP_ADVREQ		(0x0020 | XCLASS_DATA | XTYPF_NOBLOCK)
+#define XTYP_ADVSTART		(0x0030 | XCLASS_BOOL)
+#define XTYP_ADVSTOP		(0x0040 | XCLASS_NOTIFICATION)
+#define XTYP_EXECUTE		(0x0050 | XCLASS_FLAGS)
+#define XTYP_CONNECT		(0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK)
+#define XTYP_CONNECT_CONFIRM	(0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
+#define XTYP_XACT_COMPLETE	(0x0080 | XCLASS_NOTIFICATION )
+#define XTYP_POKE		(0x0090 | XCLASS_FLAGS)
+#define XTYP_REGISTER		(0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_REQUEST		(0x00B0 | XCLASS_DATA )
+#define XTYP_DISCONNECT		(0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_UNREGISTER		(0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_WILDCONNECT	(0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK)
+#define XTYP_MONITOR		(0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
+
+#define XTYP_MASK		0x00F0
+#define XTYP_SHIFT		4
+
+#define TIMEOUT_ASYNC           0xFFFFFFFF
+
+#define CADV_LATEACK		0xFFFF
+
+/**************************************************
+
+	End of Message Types Section
+
+****************************************************/
+
+/*****************************************************
+
+	DDE Codes for wStatus field
+
+*****************************************************/
+
+#define DDE_FACK		0x8000
+#define DDE_FBUSY		0x4000
+#define DDE_FDEFERUPD		0x4000
+#define DDE_FACKREQ		0x8000
+#define DDE_FRELEASE		0x2000
+#define DDE_FREQUESTED		0x1000
+#define DDE_FAPPSTATUS		0x00FF
+#define DDE_FNOTPROCESSED	0x0000
+
+#define DDE_FACKRESERVED        (~(DDE_FACK | DDE_FBUSY | DDE_FAPPSTATUS))
+#define DDE_FADVRESERVED        (~(DDE_FACKREQ | DDE_FDEFERUPD))
+#define DDE_FDATRESERVED        (~(DDE_FACKREQ | DDE_FRELEASE | DDE_FREQUESTED))
+#define DDE_FPOKRESERVED        (~(DDE_FRELEASE))
+
+/*****************************************************
+
+	End of wStatus codes
+
+*****************************************************/
+
+/****************************************************
+
+      Return Codes section again copied from SDK as must be same
+
+*****************************************************/
+
+#define     DMLERR_NO_ERROR                    0       /* must be 0 */
+
+#define     DMLERR_FIRST                       0x4000
+
+#define     DMLERR_ADVACKTIMEOUT               0x4000
+#define     DMLERR_BUSY                        0x4001
+#define     DMLERR_DATAACKTIMEOUT              0x4002
+#define     DMLERR_DLL_NOT_INITIALIZED         0x4003
+#define     DMLERR_DLL_USAGE                   0x4004
+#define     DMLERR_EXECACKTIMEOUT              0x4005
+#define     DMLERR_INVALIDPARAMETER            0x4006
+#define     DMLERR_LOW_MEMORY                  0x4007
+#define     DMLERR_MEMORY_ERROR                0x4008
+#define     DMLERR_NOTPROCESSED                0x4009
+#define     DMLERR_NO_CONV_ESTABLISHED         0x400a
+#define     DMLERR_POKEACKTIMEOUT              0x400b
+#define     DMLERR_POSTMSG_FAILED              0x400c
+#define     DMLERR_REENTRANCY                  0x400d
+#define     DMLERR_SERVER_DIED                 0x400e
+#define     DMLERR_SYS_ERROR                   0x400f
+#define     DMLERR_UNADVACKTIMEOUT             0x4010
+#define     DMLERR_UNFOUND_QUEUE_ID            0x4011
+
+#define     DMLERR_LAST                        0x4011
+
+#define     HDATA_APPOWNED          	       0x0001
+
+/*****************************************************
+
+      End of Return Codes and Microsoft section
+
+******************************************************/
+
+
+
+DECLARE_HANDLE(HCONVLIST);
+DECLARE_HANDLE(HCONV);
+DECLARE_HANDLE(HSZ);
+DECLARE_HANDLE(HDDEDATA);
+
+
+
+/*******************************************************
+
+	API Entry Points
+
+*******************************************************/
+
+typedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT, UINT, HCONV, HSZ, HSZ,
+					 HDDEDATA, ULONG_PTR, ULONG_PTR);
+
+/***************************************************
+
+	Externally visible data structures
+
+***************************************************/
+
+typedef struct tagHSZPAIR
+{
+    HSZ hszSvc;
+    HSZ hszTopic;
+} HSZPAIR, *PHSZPAIR;
+
+typedef struct tagCONVCONTEXT
+{
+    UINT  cb;
+    UINT  wFlags;
+    UINT  wCountryID;
+    INT   iCodePage;
+    DWORD dwLangID;
+    DWORD dwSecurity;
+    SECURITY_QUALITY_OF_SERVICE qos;
+} CONVCONTEXT, *PCONVCONTEXT;
+
+typedef struct tagCONVINFO
+{
+    DWORD		cb;
+    DWORD_PTR 		hUser;
+    HCONV		hConvPartner;
+    HSZ			hszSvcPartner;
+    HSZ			hszServiceReq;
+    HSZ			hszTopic;
+    HSZ			hszItem;
+    UINT		wFmt;
+    UINT		wType;
+    UINT		wStatus;
+    UINT		wConvst;
+    UINT		wLastError;
+    HCONVLIST		hConvList;
+    CONVCONTEXT		ConvCtxt;
+    HWND		hwnd;
+    HWND		hwndPartner;
+} CONVINFO, *PCONVINFO;
+
+/*            Interface Definitions		*/
+
+WINUSERAPI BOOL      WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction);
+WINUSERAPI LPBYTE    WINAPI DdeAccessData(HDDEDATA,LPDWORD);
+WINUSERAPI HDDEDATA  WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD);
+WINUSERAPI HDDEDATA  WINAPI DdeClientTransaction(LPBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,LPDWORD);
+WINUSERAPI INT       WINAPI DdeCmpStringHandles(HSZ,HSZ);
+WINUSERAPI HCONV     WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT);
+WINUSERAPI HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT);
+WINUSERAPI HDDEDATA  WINAPI DdeCreateDataHandle(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT,UINT);
+WINUSERAPI HSZ       WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,INT);
+WINUSERAPI HSZ       WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,INT);
+#define                     DdeCreateStringHandle WINELIB_NAME_AW(DdeCreateStringHandle)
+WINUSERAPI BOOL      WINAPI DdeDisconnect(HCONV);
+WINUSERAPI BOOL      WINAPI DdeDisconnectList(HCONVLIST);
+WINUSERAPI BOOL      WINAPI DdeEnableCallback(DWORD,HCONV,UINT);
+WINUSERAPI BOOL      WINAPI DdeFreeDataHandle(HDDEDATA);
+WINUSERAPI BOOL      WINAPI DdeFreeStringHandle(DWORD,HSZ);
+WINUSERAPI DWORD     WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD);
+WINUSERAPI UINT      WINAPI DdeGetLastError(DWORD);
+WINUSERAPI BOOL      WINAPI DdeImpersonateClient(HCONV);
+WINUSERAPI UINT      WINAPI DdeInitializeA(LPDWORD,PFNCALLBACK,DWORD,DWORD);
+WINUSERAPI UINT      WINAPI DdeInitializeW(LPDWORD,PFNCALLBACK,DWORD,DWORD);
+#define                     DdeInitialize WINELIB_NAME_AW(DdeInitialize)
+WINUSERAPI BOOL      WINAPI DdeKeepStringHandle(DWORD,HSZ);
+WINUSERAPI HDDEDATA  WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);
+WINUSERAPI BOOL      WINAPI DdePostAdvise(DWORD,HSZ,HSZ);
+WINUSERAPI UINT      WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO);
+WINUSERAPI HCONV     WINAPI DdeQueryNextServer(HCONVLIST, HCONV);
+WINUSERAPI DWORD     WINAPI DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, INT);
+WINUSERAPI DWORD     WINAPI DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, INT);
+#define                     DdeQueryString WINELIB_NAME_AW(DdeQueryString)
+WINUSERAPI HCONV     WINAPI DdeReconnect(HCONV);
+WINUSERAPI BOOL      WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
+WINUSERAPI BOOL      WINAPI DdeUnaccessData(HDDEDATA);
+WINUSERAPI BOOL      WINAPI DdeUninitialize(DWORD);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_DDEML_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h
new file mode 100644
index 0000000..387b842
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h
@@ -0,0 +1,80 @@
+/*
+ * Definitions for Common Property Sheet User Interface
+ *
+ * Copyright 2006 Detlef Riekenberg
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _COMPSTUI_
+#define _COMPSTUI_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DEFINES */
+
+#define PROPSHEETUI_INFO_VERSION    0x0100
+
+#define PSUIINFO_UNICODE    1
+
+/* return-values for CommonPropertySheetUI on success */
+#define CPSUI_CANCEL            0
+#define CPSUI_OK                1
+#define CPSUI_RESTARTWINDOWS    2
+#define CPSUI_REBOOTSYSTEM      3
+
+
+/* TYPES */
+typedef DWORD (CALLBACK *PFNCOMPROPSHEET)(HANDLE, UINT, LPARAM, LPARAM);
+
+typedef struct _PROPSHEETUI_INFO {
+    WORD            cbSize;
+    WORD            Version;
+    WORD            Flags;              /* set PSUIINFO_UNICODE for UNICODE */
+    WORD            Reason;
+    HANDLE          hComPropSheet;
+    PFNCOMPROPSHEET pfnComPropSheet;
+    LPARAM          lParamInit;
+    DWORD           UserData;
+    DWORD           Result;
+ } PROPSHEETUI_INFO, *PPROPSHEETUI_INFO;
+
+typedef LONG  (CALLBACK *PFNPROPSHEETUI)(PROPSHEETUI_INFO, LPARAM);
+
+/* FUNCTIONS */
+LONG WINAPI CommonPropertySheetUIA(HWND, PFNPROPSHEETUI, LPARAM, LPDWORD);
+LONG WINAPI CommonPropertySheetUIW(HWND, PFNPROPSHEETUI, LPARAM, LPDWORD);
+#define CommonPropertySheetUI WINELIB_NAME_AW(CommonPropertySheetUI)
+
+ULONG_PTR WINAPI GetPSTUIUserData(HWND);
+BOOL      WINAPI SetPSTUIUserData(HWND, ULONG_PTR);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif  /* _COMPSTUI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h
new file mode 100644
index 0000000..57d0c27
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HIDSDI_H
+#define __WINE_HIDSDI_H
+
+/* FIXME: #include "hidusage.h" */
+/* FIXME: #include "hidpi.h" */
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+
+BOOLEAN WINAPI HidD_GetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength);
+void WINAPI HidD_GetHidGuid(LPGUID guid);
+BOOLEAN WINAPI HidD_GetManufacturerString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength);
+BOOLEAN WINAPI HidD_SetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength);
+
+#endif  /* __WINE_HIDSDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h
new file mode 100644
index 0000000..138fc3c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2007 CodeWeavers, Aric Stewart
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _DDKIMM_H_
+#define _DDKIMM_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _tagINPUTCONTEXT {
+    HWND                hWnd;
+    BOOL                fOpen;
+    POINT               ptStatusWndPos;
+    POINT               ptSoftKbdPos;
+    DWORD               fdwConversion;
+    DWORD               fdwSentence;
+    union   {
+        LOGFONTA        A;
+        LOGFONTW        W;
+    } lfFont;
+    COMPOSITIONFORM     cfCompForm;
+    CANDIDATEFORM       cfCandForm[4];
+    HIMCC               hCompStr;
+    HIMCC               hCandInfo;
+    HIMCC               hGuideLine;
+    HIMCC               hPrivate;
+    DWORD               dwNumMsgBuf;
+    HIMCC               hMsgBuf;
+    DWORD               fdwInit;
+    DWORD               dwReserve[3];
+} INPUTCONTEXT, *LPINPUTCONTEXT;
+
+typedef struct _tagIMEINFO {
+    DWORD       dwPrivateDataSize;
+    DWORD       fdwProperty;
+    DWORD       fdwConversionCaps;
+    DWORD       fdwSentenceCaps;
+    DWORD       fdwUICaps;
+    DWORD       fdwSCSCaps;
+    DWORD       fdwSelectCaps;
+} IMEINFO, *LPIMEINFO;
+
+typedef struct tagCOMPOSITIONSTRING {
+    DWORD dwSize;
+    DWORD dwCompReadAttrLen;
+    DWORD dwCompReadAttrOffset;
+    DWORD dwCompReadClauseLen;
+    DWORD dwCompReadClauseOffset;
+    DWORD dwCompReadStrLen;
+    DWORD dwCompReadStrOffset;
+    DWORD dwCompAttrLen;
+    DWORD dwCompAttrOffset;
+    DWORD dwCompClauseLen;
+    DWORD dwCompClauseOffset;
+    DWORD dwCompStrLen;
+    DWORD dwCompStrOffset;
+    DWORD dwCursorPos;
+    DWORD dwDeltaStart;
+    DWORD dwResultReadClauseLen;
+    DWORD dwResultReadClauseOffset;
+    DWORD dwResultReadStrLen;
+    DWORD dwResultReadStrOffset;
+    DWORD dwResultClauseLen;
+    DWORD dwResultClauseOffset;
+    DWORD dwResultStrLen;
+    DWORD dwResultStrOffset;
+    DWORD dwPrivateSize;
+    DWORD dwPrivateOffset;
+} COMPOSITIONSTRING, *LPCOMPOSITIONSTRING;
+
+typedef struct tagGUIDELINE {
+    DWORD dwSize;
+    DWORD dwLevel;
+    DWORD dwIndex;
+    DWORD dwStrLen;
+    DWORD dwStrOffset;
+    DWORD dwPrivateSize;
+    DWORD dwPrivateOffset;
+} GUIDELINE, *LPGUIDELINE;
+
+typedef struct tagCANDIDATEINFO {
+    DWORD               dwSize;
+    DWORD               dwCount;
+    DWORD               dwOffset[32];
+    DWORD               dwPrivateSize;
+    DWORD               dwPrivateOffset;
+} CANDIDATEINFO, *LPCANDIDATEINFO;
+
+LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC);
+BOOL  WINAPI ImmUnlockIMC(HIMC);
+DWORD WINAPI ImmGetIMCLockCount(HIMC);
+HIMCC  WINAPI ImmCreateIMCC(DWORD);
+HIMCC  WINAPI ImmDestroyIMCC(HIMCC);
+LPVOID WINAPI ImmLockIMCC(HIMCC);
+BOOL   WINAPI ImmUnlockIMCC(HIMCC);
+DWORD  WINAPI ImmGetIMCCLockCount(HIMCC);
+HIMCC  WINAPI ImmReSizeIMCC(HIMCC, DWORD);
+DWORD  WINAPI ImmGetIMCCSize(HIMCC);
+
+#define IMMGWL_IMC                      0
+#define IMMGWL_PRIVATE                  (sizeof(LONG_PTR))
+
+/* IME Property bits */
+#define IME_PROP_END_UNLOAD             0x0001
+#define IME_PROP_KBD_CHAR_FIRST         0x0002
+#define IME_PROP_IGNORE_UPKEYS          0x0004
+#define IME_PROP_NEED_ALTKEY            0x0008
+#define IME_PROP_NO_KEYS_ON_CLOSE       0x0010
+
+/* for NI_CONTEXTUPDATED */
+#define IMC_SETCONVERSIONMODE           0x0002
+#define IMC_SETSENTENCEMODE             0x0004
+#define IMC_SETOPENSTATUS               0x0006
+
+/* dwAction for ImmNotifyIME */
+#define NI_CONTEXTUPDATED               0x0003
+#define NI_OPENCANDIDATE                0x0010
+#define NI_CLOSECANDIDATE               0x0011
+#define NI_SELECTCANDIDATESTR           0x0012
+#define NI_CHANGECANDIDATELIST          0x0013
+#define NI_FINALIZECONVERSIONRESULT     0x0014
+#define NI_COMPOSITIONSTR               0x0015
+#define NI_SETCANDIDATE_PAGESTART       0x0016
+#define NI_SETCANDIDATE_PAGESIZE        0x0017
+#define NI_IMEMENUSELECTED              0x0018
+
+BOOL WINAPI ImmGenerateMessage(HIMC);
+LRESULT WINAPI ImmRequestMessageA(HIMC, WPARAM, LPARAM);
+LRESULT WINAPI ImmRequestMessageW(HIMC, WPARAM, LPARAM);
+#define ImmRequestMessage WINELIB_NAME_AW(ImmRequestMessage);
+BOOL WINAPI ImmTranslateMessage(HWND, UINT, WPARAM, LPARAM);
+HWND WINAPI ImmCreateSoftKeyboard(UINT, UINT, int, int);
+BOOL WINAPI ImmDestroySoftKeyboard(HWND);
+BOOL WINAPI ImmShowSoftKeyboard(HWND, int);
+
+BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions);
+BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID);
+DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT);
+BOOL WINAPI ImeDestroy(UINT);
+LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID);
+BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, const LPBYTE);
+BOOL WINAPI ImeSelect(HIMC, BOOL);
+BOOL WINAPI ImeSetActiveContext(HIMC, BOOL);
+UINT WINAPI ImeToAsciiEx(UINT, UINT, const LPBYTE, LPDWORD, UINT, HIMC);
+BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD);
+BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR);
+BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR);
+UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW);
+UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
+BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
+DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif  /* _DDKIMM_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h
new file mode 100644
index 0000000..b0efbb3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h
@@ -0,0 +1,151 @@
+/*
+ * Mount point manager definitions
+ *
+ * Copyright 2007 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _MOUNTMGR_
+#define _MOUNTMGR_
+
+#define MOUNTMGRCONTROLTYPE  ((ULONG)'m')
+#define MOUNTDEVCONTROLTYPE  ((ULONG)'M')
+
+#if defined(__GNUC__)
+#define MOUNTMGR_DEVICE_NAME (const WCHAR []){'\\','D','e','v','i','c','e','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0}
+#define MOUNTMGR_DOS_DEVICE_NAME (const WCHAR []){'\\','\\','.','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0}
+#elif defined(_MSC_VER)
+#define MOUNTMGR_DEVICE_NAME     L"\\Device\\MountPointManager"
+#define MOUNTMGR_DOS_DEVICE_NAME L"\\\\.\\MountPointManager"
+#else
+static const WCHAR MOUNTMGR_DEVICE_NAME[] = {'\\','D','e','v','i','c','e','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0};
+static const WCHAR MOUNTMGR_DOS_DEVICE_NAME[] = {'\\','\\','.','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0};
+#endif
+
+
+#define IOCTL_MOUNTMGR_CREATE_POINT                CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_DELETE_POINTS               CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_QUERY_POINTS                CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY        CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER           CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS         CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED  CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED  CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_CHANGE_NOTIFY               CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE     CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES   CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+/* Wine extensions */
+#ifdef WINE_MOUNTMGR_EXTENSIONS
+
+#define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 32, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE  CTL_CODE(MOUNTMGRCONTROLTYPE, 33, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+struct mountmgr_unix_drive
+{
+    ULONG  size;
+    ULONG  type;
+    WCHAR  letter;
+    USHORT mount_point_offset;
+    USHORT device_offset;
+};
+
+#endif
+
+typedef struct _MOUNTMGR_CREATE_POINT_INPUT
+{
+    USHORT SymbolicLinkNameOffset;
+    USHORT SymbolicLinkNameLength;
+    USHORT DeviceNameOffset;
+    USHORT DeviceNameLength;
+} MOUNTMGR_CREATE_POINT_INPUT, *PMOUNTMGR_CREATE_POINT_INPUT;
+
+typedef struct _MOUNTMGR_MOUNT_POINT
+{
+    ULONG  SymbolicLinkNameOffset;
+    USHORT SymbolicLinkNameLength;
+    ULONG  UniqueIdOffset;
+    USHORT UniqueIdLength;
+    ULONG  DeviceNameOffset;
+    USHORT DeviceNameLength;
+} MOUNTMGR_MOUNT_POINT, *PMOUNTMGR_MOUNT_POINT;
+
+typedef struct _MOUNTMGR_MOUNT_POINTS
+{
+    ULONG                Size;
+    ULONG                NumberOfMountPoints;
+    MOUNTMGR_MOUNT_POINT MountPoints[1];
+} MOUNTMGR_MOUNT_POINTS, *PMOUNTMGR_MOUNT_POINTS;
+
+typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET
+{
+    USHORT DeviceNameLength;
+    WCHAR  DeviceName[1];
+} MOUNTMGR_DRIVE_LETTER_TARGET, *PMOUNTMGR_DRIVE_LETTER_TARGET;
+
+typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION
+{
+    BOOLEAN DriveLetterWasAssigned;
+    UCHAR   CurrentDriveLetter;
+} MOUNTMGR_DRIVE_LETTER_INFORMATION, *PMOUNTMGR_DRIVE_LETTER_INFORMATION;
+
+typedef struct _MOUNTMGR_VOLUME_MOUNT_POINT
+{
+    USHORT SourceVolumeNameOffset;
+    USHORT SourceVolumeNameLength;
+    USHORT TargetVolumeNameOffset;
+    USHORT TargetVolumeNameLength;
+} MOUNTMGR_VOLUME_MOUNT_POINT, *PMOUNTMGR_VOLUME_MOUNT_POINT;
+
+typedef struct _MOUNTMGR_CHANGE_NOTIFY_INFO
+{
+    ULONG EpicNumber;
+} MOUNTMGR_CHANGE_NOTIFY_INFO, *PMOUNTMGR_CHANGE_NOTIFY_INFO;
+
+typedef struct _MOUNTMGR_TARGET_NAME
+{
+    USHORT DeviceNameLength;
+    WCHAR  DeviceName[1];
+} MOUNTMGR_TARGET_NAME, *PMOUNTMGR_TARGET_NAME;
+
+#define MOUNTMGR_IS_DRIVE_LETTER(s) \
+    ((s)->Length == 28 && \
+     (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D'  && (s)->Buffer[2] == 'o'   && \
+     (s)->Buffer[3] == 's'  && (s)->Buffer[4] == 'D'  && (s)->Buffer[5] == 'e'   && \
+     (s)->Buffer[6] == 'v'  && (s)->Buffer[7] == 'i'  && (s)->Buffer[8] == 'c'   && \
+     (s)->Buffer[9] == 'e'  && (s)->Buffer[10] == 's' && (s)->Buffer[11] == '\\' && \
+     (s)->Buffer[12] >= 'A' && (s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':')
+
+#define MOUNTMGR_IS_VOLUME_NAME(s) \
+    (((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \
+     (s)->Buffer[0] == '\\' && ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \
+     (s)->Buffer[2] == '?'  && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V'   && \
+     (s)->Buffer[5] == 'o'  && (s)->Buffer[6] == 'l'  && (s)->Buffer[7] == 'u'   && \
+     (s)->Buffer[8] == 'm'  && (s)->Buffer[9] == 'e'  && (s)->Buffer[10] == '{'  && \
+     (s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-'  && \
+     (s)->Buffer[34] == '-' && (s)->Buffer[47] == '}')
+
+#endif /* _MOUNTMGR_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h
new file mode 100644
index 0000000..2ff9e82
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h
@@ -0,0 +1,207 @@
+/*
+ * DDK information for DVD
+ *
+ * Copyright (C) 2004 Uwe Bonnes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __NTDDCDVD_H
+#define __NTDDCDVD_H
+
+/* definitions taken from libdvdcss, modified to reflect Windows names and data types in places */
+
+#define IOCTL_DVD_BASE                 FILE_DEVICE_DVD
+
+#define IOCTL_DVD_START_SESSION     CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_READ_KEY          CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_SEND_KEY          CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_END_SESSION       CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_SET_READ_AHEAD    CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_GET_REGION        CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_SEND_KEY2         CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DVD_READ_STRUCTURE    CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+typedef enum {
+    DvdChallengeKey = 0x01,
+    DvdBusKey1,
+    DvdBusKey2,
+    DvdTitleKey,
+    DvdAsf,
+    DvdSetRpcKey = 0x6,
+    DvdGetRpcKey = 0x8,
+    DvdDiskKey = 0x80,
+    DvdInvalidateAGID = 0x3f
+} DVD_KEY_TYPE;
+
+typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
+
+#include <pshpack1.h>
+
+typedef struct _DVD_COPY_PROTECT_KEY {
+    ULONG KeyLength;
+    DVD_SESSION_ID SessionId;
+    DVD_KEY_TYPE KeyType;
+    ULONG KeyFlags;
+    union {
+        struct {
+            ULONG FileHandle;
+            ULONG Reserved;   /* used for NT alignment */
+        } s;
+        LARGE_INTEGER TitleOffset;
+    } Parameters;
+    UCHAR KeyData[1];
+} DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
+
+typedef struct _DVD_RPC_KEY {
+    UCHAR UserResetsAvailable:3;
+    UCHAR ManufacturerResetsAvailable:3;
+    UCHAR TypeCode:2;
+    UCHAR RegionMask;
+    UCHAR RpcScheme;
+    UCHAR Reserved2[1];
+} DVD_RPC_KEY, * PDVD_RPC_KEY;
+
+typedef struct _DVD_ASF {
+    UCHAR Reserved0[3];
+    UCHAR SuccessFlag:1;
+    UCHAR Reserved1:7;
+} DVD_ASF, * PDVD_ASF;
+
+typedef struct _DVD_REGION
+{
+        UCHAR CopySystem;
+        UCHAR RegionData;              /* current media region (not playable when set) */
+        UCHAR SystemRegion;            /* current drive region (playable when set) */
+        UCHAR ResetCount;              /* number of resets available */
+} DVD_REGION, * PDVD_REGION;
+
+typedef enum _DVD_STRUCTURE_FORMAT
+{
+	DvdPhysicalDescriptor,
+	DvdCopyrightDescriptor,
+	DvdDiskKeyDescriptor,
+	DvdBCADescriptor,
+	DvdManufacturerDescriptor,
+	DvdMaxDescriptor
+} DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
+
+typedef struct DVD_READ_STRUCTURE {
+        /* Contains an offset to the logical block address of the descriptor to be retrieved. */
+        LARGE_INTEGER BlockByteOffset;
+
+        /* 0:Physical descriptor, 1:Copyright descriptor, 2:Disk key descriptor
+           3:BCA descriptor, 4:Manufacturer descriptor, 5:Max descriptor
+         */
+        DVD_STRUCTURE_FORMAT Format;
+
+        /* Session ID, that is obtained by IOCTL_DVD_START_SESSION */
+        DVD_SESSION_ID SessionId;
+
+        /* From 0 to 4 */
+        UCHAR LayerNumber;
+} DVD_READ_STRUCTURE, *PDVD_READ_STRUCTURE;
+
+typedef struct _DVD_DESCRIPTOR_HEADER {
+    USHORT Length;
+    UCHAR Reserved[2];
+} DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER;
+C_ASSERT(sizeof(DVD_DESCRIPTOR_HEADER) == 4);
+
+typedef struct _DVD_LAYER_DESCRIPTOR
+{
+    UCHAR BookVersion : 4;
+
+    /* 0:DVD-ROM, 1:DVD-RAM, 2:DVD-R, 3:DVD-RW, 9:DVD-RW */
+    UCHAR BookType : 4;
+
+    UCHAR MinimumRate : 4;
+
+    /* The physical size of the media. 0:120 mm, 1:80 mm. */
+    UCHAR DiskSize : 4;
+
+    /* 1:Read-only layer, 2:Recordable layer, 4:Rewritable layer */
+    UCHAR LayerType : 4;
+
+    /* 0:parallel track path, 1:opposite track path */
+    UCHAR TrackPath : 1;
+
+    /* 0:one layers, 1:two layers, and so on */
+    UCHAR NumberOfLayers : 2;
+
+    UCHAR Reserved1 : 1;
+
+    /* 0:0.74 µm/track, 1:0.80 µm/track, 2:0.615 µm/track */
+    UCHAR TrackDensity : 4;
+
+    /* 0:0.267 µm/bit, 1:0.293 µm/bit, 2:0.409 to 0.435 µm/bit, 4:0.280 to 0.291 µm/bit, 8:0.353 µm/bit */
+    UCHAR LinearDensity : 4;
+
+    /* Must be either 0x30000:DVD-ROM or DVD-R/-RW or 0x31000:DVD-RAM or DVD+RW */
+    ULONG StartingDataSector;
+
+    ULONG EndDataSector;
+    ULONG EndLayerZeroSector;
+    UCHAR Reserved5 : 7;
+
+    /* 0 indicates no BCA data */
+    UCHAR BCAFlag : 1;
+}DVD_LAYER_DESCRIPTOR, * PDVD_LAYER_DESCRIPTOR;
+C_ASSERT(sizeof(DVD_LAYER_DESCRIPTOR) == 17);
+
+typedef struct _DVD_COPYRIGHT_DESCRIPTOR
+{
+    UCHAR CopyrightProtectionType;
+    UCHAR RegionManagementInformation;
+    USHORT Reserved;
+}DVD_COPYRIGHT_DESCRIPTOR, * PDVD_COPYRIGHT_DESCRIPTOR;
+
+typedef struct _DVD_DISK_KEY_DESCRIPTOR
+{
+    UCHAR DiskKeyData[2048];
+}DVD_DISK_KEY_DESCRIPTOR, * PDVD_DISK_KEY_DESCRIPTOR;
+
+typedef struct _DVD_BCA_DESCRIPTOR
+{
+    UCHAR BCAInformation[1];
+}DVD_BCA_DESCRIPTOR, * PDVD_BCA_DESCRIPTOR;
+
+typedef struct _DVD_MANUFACTURER_DESCRIPTOR
+{
+        UCHAR ManufacturingInformation[2048];
+}DVD_MANUFACTURER_DESCRIPTOR, * PDVD_MANUFACTURER_DESCRIPTOR;
+
+#define DVD_CHALLENGE_KEY_LENGTH    (12 + sizeof(DVD_COPY_PROTECT_KEY) - sizeof(UCHAR))
+
+#define DVD_DISK_KEY_LENGTH         (2048 + sizeof(DVD_COPY_PROTECT_KEY) - sizeof(UCHAR))
+
+#define DVD_KEY_SIZE 5
+#define DVD_CHALLENGE_SIZE 10
+#define DVD_DISCKEY_SIZE 2048
+#define DVD_SECTOR_PROTECTED            0x00000020
+
+#include <poppack.h>
+
+#endif /* __NTDDCDVD_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h
new file mode 100644
index 0000000..62b570a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2008 Francois Gouget 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDK_
+#define _NTDDK_
+
+/* Note: We will probably have to duplicate everything ultimately :-( */
+#include <ddk/wdm.h>
+
+#include <excpt.h>
+/* FIXME: #include <ntdef.h> */
+#include <ntstatus.h>
+/* FIXME: #include <bugcodes.h> */
+/* FIXME: #include <ntiologc.h> */
+
+
+typedef enum _BUS_DATA_TYPE
+{
+    ConfigurationSpaceUndefined = -1,
+    Cmos,
+    EisaConfiguration,
+    Pos,
+    CbusConfiguration,
+    PCIConfiguration,
+    VMEConfiguration,
+    NuBusConfiguration,
+    PCMCIAConfiguration,
+    MPIConfiguration,
+    MPSAConfiguration,
+    PNPISAConfiguration,
+    MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+
+typedef struct _CONFIGURATION_INFORMATION
+{
+    ULONG DiskCount;
+    ULONG FloppyCount;
+    ULONG CdRomCount;
+    ULONG TapeCount;
+    ULONG ScsiPortCount;
+    ULONG SerialCount;
+    ULONG ParallelCount;
+    BOOLEAN AtDiskPrimaryAddressClaimed;
+    BOOLEAN AtDiskSecondaryAddressClaimed;
+    ULONG Version;
+    ULONG MediumChangerCount;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
+
+typedef enum _CONFIGURATION_TYPE
+{
+    ArcSystem = 0,
+    CentralProcessor,
+    FloatingPointProcessor,
+    PrimaryIcache,
+    PrimaryDcache,
+    SecondaryIcache,
+    SecondaryDcache,
+    SecondaryCache,
+    EisaAdapter,
+    TcAdapter,
+    ScsiAdapter,
+    DtiAdapter,
+    MultiFunctionAdapter,
+    DiskController,
+    TapeController,
+    CdromController,
+    WormController,
+    SerialController,
+    NetworkController,
+    DisplayController,
+    ParallelController,
+    PointerController,
+    KeyboardController,
+    AudioController,
+    OtherController,
+    DiskPeripheral,
+    FloppyDiskPeripheral,
+    TapePeripheral,
+    ModemPeripheral,
+    MonitorPeripheral,
+    PrinterPeripheral,
+    PointerPeripheral,
+    KeyboardPeripheral,
+    TerminalPeripheral,
+    OtherPeripheral,
+    LinePeripheral,
+    NetworkPeripheral,
+    SystemMemory,
+    DockingInformation,
+    RealModeIrqRoutingTable,
+    RealModePCIEnumeration,
+    MaximunType
+} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
+
+typedef struct _IMAGE_INFO
+{
+    union
+    {
+        ULONG Properties;
+        struct
+        {
+            ULONG ImageAddressingMode  : 8;
+            ULONG SystemModeImage      : 1;
+            ULONG ImageMappedToAllPids : 1;
+            ULONG ExtendedInfoPresent  : 1;
+            ULONG Reserved             : 21;
+        };
+    };
+    PVOID  ImageBase;
+    ULONG  ImageSelector;
+    SIZE_T ImageSize;
+    ULONG  ImageSectionNumber;
+} IMAGE_INFO, *PIMAGE_INFO;
+
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
+{
+  LARGE_INTEGER ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
+
+typedef VOID (WINAPI *PDRIVER_REINITIALIZE)(PDRIVER_OBJECT,PVOID,ULONG);
+typedef VOID (WINAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(PUNICODE_STRING,HANDLE,PIMAGE_INFO);
+typedef NTSTATUS (WINAPI *PIO_QUERY_DEVICE_ROUTINE)(PVOID,PUNICODE_STRING,INTERFACE_TYPE,ULONG,
+            PKEY_VALUE_FULL_INFORMATION*,CONFIGURATION_TYPE,ULONG,PKEY_VALUE_FULL_INFORMATION*);
+
+NTSTATUS  WINAPI IoQueryDeviceDescription(PINTERFACE_TYPE,PULONG,PCONFIGURATION_TYPE,PULONG,
+                                  PCONFIGURATION_TYPE,PULONG,PIO_QUERY_DEVICE_ROUTINE,PVOID);
+void      WINAPI IoRegisterDriverReinitialization(PDRIVER_OBJECT,PDRIVER_REINITIALIZE,PVOID);
+NTSTATUS  WINAPI IoRegisterShutdownNotification(PDEVICE_OBJECT);
+NTSTATUS  WINAPI PsSetLoadImageNotifyRoutine(PLOAD_IMAGE_NOTIFY_ROUTINE);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h
new file mode 100644
index 0000000..8204b1e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h
@@ -0,0 +1,407 @@
+/*
+ * DDK definitions for serial port
+ *
+ * Copyright (C) 2006 Eric Pouech
+ * From w32api package
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDSER_H_
+#define _NTDDSER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_SERIAL_CLEAR_STATS                                        \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 36, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CLR_DTR                                            \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CLR_RTS                                            \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CONFIG_SIZE                                        \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_BAUD_RATE                                      \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_CHARS                                          \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_COMMSTATUS                                     \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 27, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_DTRRTS                                         \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_HANDFLOW                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_LINE_CONTROL                                   \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_MODEM_CONTROL                                  \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_MODEMSTATUS                                    \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_PROPERTIES                                     \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_STATS                                          \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 35, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_TIMEOUTS                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_WAIT_MASK                                      \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_IMMEDIATE_CHAR                                     \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#ifndef IOCTL_SERIAL_LSRMST_INSERT
+/* it's already defined in winioctl.h */
+#define IOCTL_SERIAL_LSRMST_INSERT                             \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#endif
+#define IOCTL_SERIAL_PURGE                                              \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_RESET_DEVICE                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BAUD_RATE                                      \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BREAK_ON                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BREAK_OFF                                      \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_CHARS                                          \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_DTR                                            \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_FIFO_CONTROL                                   \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_HANDFLOW                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_LINE_CONTROL                                   \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_MODEM_CONTROL                                  \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_QUEUE_SIZE                                     \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_RTS                                            \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_TIMEOUTS                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_WAIT_MASK                                      \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_XOFF                                           \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_XON                                            \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_WAIT_ON_MASK                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_XOFF_COUNTER                                       \
+    CTL_CODE (FILE_DEVICE_SERIAL_PORT, 28, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef struct _SERIAL_BAUD_RATE
+{
+    ULONG       BaudRate;
+} SERIAL_BAUD_RATE, *PSERIAL_BAUD_RATE;
+
+/* SERIAL_BAUD_RATE.BaudRate constants */
+#define SERIAL_BAUD_075                   0x00000001
+#define SERIAL_BAUD_110                   0x00000002
+#define SERIAL_BAUD_134_5                 0x00000004
+#define SERIAL_BAUD_150                   0x00000008
+#define SERIAL_BAUD_300                   0x00000010
+#define SERIAL_BAUD_600                   0x00000020
+#define SERIAL_BAUD_1200                  0x00000040
+#define SERIAL_BAUD_1800                  0x00000080
+#define SERIAL_BAUD_2400                  0x00000100
+#define SERIAL_BAUD_4800                  0x00000200
+#define SERIAL_BAUD_7200                  0x00000400
+#define SERIAL_BAUD_9600                  0x00000800
+#define SERIAL_BAUD_14400                 0x00001000
+#define SERIAL_BAUD_19200                 0x00002000
+#define SERIAL_BAUD_38400                 0x00004000
+#define SERIAL_BAUD_56K                   0x00008000
+#define SERIAL_BAUD_128K                  0x00010000
+#define SERIAL_BAUD_115200                0x00020000
+#define SERIAL_BAUD_57600                 0x00040000
+#define SERIAL_BAUD_USER                  0x10000000
+
+typedef struct _SERIAL_CHARS
+{
+    UCHAR       EofChar;
+    UCHAR       ErrorChar;
+    UCHAR       BreakChar;
+    UCHAR       EventChar;
+    UCHAR       XonChar;
+    UCHAR       XoffChar;
+} SERIAL_CHARS, *PSERIAL_CHARS;
+
+typedef struct _SERIAL_STATUS
+{
+    ULONG       Errors;
+    ULONG       HoldReasons;
+    ULONG       AmountInInQueue;
+    ULONG       AmountInOutQueue;
+    BOOLEAN     EofReceived;
+    BOOLEAN     WaitForImmediate;
+} SERIAL_STATUS, *PSERIAL_STATUS;
+
+typedef struct _SERIAL_HANDFLOW
+{
+    ULONG       ControlHandShake;
+    ULONG       FlowReplace;
+    LONG        XonLimit;
+    LONG        XoffLimit;
+} SERIAL_HANDFLOW, *PSERIAL_HANDFLOW;
+
+#define SERIAL_DTR_MASK                   0x00000003
+#define SERIAL_DTR_CONTROL                0x00000001
+#define SERIAL_DTR_HANDSHAKE              0x00000002
+#define SERIAL_CTS_HANDSHAKE              0x00000008
+#define SERIAL_DSR_HANDSHAKE              0x00000010
+#define SERIAL_DCD_HANDSHAKE              0x00000020
+#define SERIAL_OUT_HANDSHAKEMASK          0x00000038
+#define SERIAL_DSR_SENSITIVITY            0x00000040
+#define SERIAL_ERROR_ABORT                0x80000000
+#define SERIAL_CONTROL_INVALID            0x7fffff84
+#define SERIAL_AUTO_TRANSMIT              0x00000001
+#define SERIAL_AUTO_RECEIVE               0x00000002
+#define SERIAL_ERROR_CHAR                 0x00000004
+#define SERIAL_NULL_STRIPPING             0x00000008
+#define SERIAL_BREAK_CHAR                 0x00000010
+#define SERIAL_RTS_MASK                   0x000000c0
+#define SERIAL_RTS_CONTROL                0x00000040
+#define SERIAL_RTS_HANDSHAKE              0x00000080
+#define SERIAL_TRANSMIT_TOGGLE            0x000000c0
+#define SERIAL_XOFF_CONTINUE              0x80000000
+#define SERIAL_FLOW_INVALID               0x7fffff20
+
+typedef struct _SERIAL_LINE_CONTROL
+{
+    UCHAR       StopBits;
+    UCHAR       Parity;
+    UCHAR       WordLength;
+} SERIAL_LINE_CONTROL, *PSERIAL_LINE_CONTROL;
+
+/* SERIAL_LINE_CONTROL.StopBits constants */
+#define STOP_BIT_1                        0x00
+#define STOP_BITS_1_5                     0x01
+#define STOP_BITS_2                       0x02
+
+/* SERIAL_LINE_CONTROL.Parity constants */
+#define NO_PARITY                         0x00
+#define ODD_PARITY                        0x01
+#define EVEN_PARITY                       0x02
+#define MARK_PARITY                       0x03
+#define SPACE_PARITY                      0x04
+
+/* IOCTL_SERIAL_(GET_MODEM_CONTROL, SET_MODEM_CONTROL) flags */
+#define SERIAL_IOC_MCR_DTR                0x00000001
+#define SERIAL_IOC_MCR_RTS                0x00000002
+#define SERIAL_IOC_MCR_OUT1               0x00000004
+#define SERIAL_IOC_MCR_OUT2               0x00000008
+#define SERIAL_IOC_MCR_LOOP               0x00000010
+
+typedef struct _SERIAL_COMMPROP
+{
+    USHORT      PacketLength;
+    USHORT      PacketVersion;
+    ULONG       ServiceMask;
+    ULONG       Reserved1;
+    ULONG       MaxTxQueue;
+    ULONG       MaxRxQueue;
+    ULONG       MaxBaud;
+    ULONG       ProvSubType;
+    ULONG       ProvCapabilities;
+    ULONG       SettableParams;
+    ULONG       SettableBaud;
+    USHORT      SettableData;
+    USHORT      SettableStopParity;
+    ULONG       CurrentTxQueue;
+    ULONG       CurrentRxQueue;
+    ULONG       ProvSpec1;
+    ULONG       ProvSpec2;
+    WCHAR       ProvChar[1];
+} SERIAL_COMMPROP, *PSERIAL_COMMPROP;
+
+/* SERIAL_COMMPROP.SettableParams flags */
+#define SERIAL_SP_PARITY                  0x0001
+#define SERIAL_SP_BAUD                    0x0002
+#define SERIAL_SP_DATABITS                0x0004
+#define SERIAL_SP_STOPBITS                0x0008
+#define SERIAL_SP_HANDSHAKING             0x0010
+#define SERIAL_SP_PARITY_CHECK            0x0020
+#define SERIAL_SP_CARRIER_DETECT          0x0040
+
+/* SERIAL_COMMPROP.ProvCapabilities flags */
+#define SERIAL_PCF_DTRDSR                 0x00000001
+#define SERIAL_PCF_RTSCTS                 0x00000002
+#define SERIAL_PCF_CD                     0x00000004
+#define SERIAL_PCF_PARITY_CHECK           0x00000008
+#define SERIAL_PCF_XONXOFF                0x00000010
+#define SERIAL_PCF_SETXCHAR               0x00000020
+#define SERIAL_PCF_TOTALTIMEOUTS          0x00000040
+#define SERIAL_PCF_INTTIMEOUTS            0x00000080
+#define SERIAL_PCF_SPECIALCHARS           0x00000100
+#define SERIAL_PCF_16BITMODE              0x00000200
+
+/* SERIAL_COMMPROP.SettableData flags */
+#define SERIAL_DATABITS_5                 0x0001
+#define SERIAL_DATABITS_6                 0x0002
+#define SERIAL_DATABITS_7                 0x0004
+#define SERIAL_DATABITS_8                 0x0008
+#define SERIAL_DATABITS_16                0x0010
+#define SERIAL_DATABITS_16X               0x0020
+
+/* SERIAL_COMMPROP.SettableStopParity flags */
+#define SERIAL_STOPBITS_10                0x0001
+#define SERIAL_STOPBITS_15                0x0002
+#define SERIAL_STOPBITS_20                0x0004
+#define SERIAL_PARITY_NONE                0x0100
+#define SERIAL_PARITY_ODD                 0x0200
+#define SERIAL_PARITY_EVEN                0x0400
+#define SERIAL_PARITY_MARK                0x0800
+#define SERIAL_PARITY_SPACE               0x1000
+
+typedef struct _SERIALPERF_STATS
+{
+    ULONG       ReceivedCount;
+    ULONG       TransmittedCount;
+    ULONG       FrameErrorCount;
+    ULONG       SerialOverrunErrorCount;
+    ULONG       BufferOverrunErrorCount;
+    ULONG       ParityErrorCount;
+} SERIALPERF_STATS, *PSERIALPERF_STATS;
+
+typedef struct _SERIAL_TIMEOUTS
+{
+    ULONG       ReadIntervalTimeout;
+    ULONG       ReadTotalTimeoutMultiplier;
+    ULONG       ReadTotalTimeoutConstant;
+    ULONG       WriteTotalTimeoutMultiplier;
+    ULONG       WriteTotalTimeoutConstant;
+} SERIAL_TIMEOUTS, *PSERIAL_TIMEOUTS;
+
+/* IOCTL_SERIAL_(GET_WAIT_MASK, SET_WAIT_MASK, WAIT_ON_MASK) flags */
+#define SERIAL_EV_RXCHAR                  0x0001
+#define SERIAL_EV_RXFLAG                  0x0002
+#define SERIAL_EV_TXEMPTY                 0x0004
+#define SERIAL_EV_CTS                     0x0008
+#define SERIAL_EV_DSR                     0x0010
+#define SERIAL_EV_RLSD                    0x0020
+#define SERIAL_EV_BREAK                   0x0040
+#define SERIAL_EV_ERR                     0x0080
+#define SERIAL_EV_RING                    0x0100
+#define SERIAL_EV_PERR                    0x0200
+#define SERIAL_EV_RX80FULL                0x0400
+#define SERIAL_EV_EVENT1                  0x0800
+#define SERIAL_EV_EVENT2                  0x1000
+
+/* IOCTL_SERIAL_LSRMST_INSERT constants */
+#define SERIAL_LSRMST_LSR_DATA            0x01
+#define SERIAL_LSRMST_LSR_NODATA          0x02
+#define SERIAL_LSRMST_MST                 0x03
+#define SERIAL_LSRMST_ESCAPE              0x00
+
+/* IOCTL_SERIAL_PURGE constants */
+#define SERIAL_PURGE_TXABORT              0x00000001
+#define SERIAL_PURGE_RXABORT              0x00000002
+#define SERIAL_PURGE_TXCLEAR              0x00000004
+#define SERIAL_PURGE_RXCLEAR              0x00000008
+
+/* IOCTL_SERIAL_SET_FIFO_CONTROL constants */
+#define SERIAL_IOC_FCR_FIFO_ENABLE        0x00000001
+#define SERIAL_IOC_FCR_RCVR_RESET         0x00000002
+#define SERIAL_IOC_FCR_XMIT_RESET         0x00000004
+#define SERIAL_IOC_FCR_DMA_MODE           0x00000008
+#define SERIAL_IOC_FCR_RES1               0x00000010
+#define SERIAL_IOC_FCR_RES2               0x00000020
+#define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB   0x00000040
+#define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB   0x00000080
+
+typedef struct _SERIAL_QUEUE_SIZE
+{
+    ULONG       InSize;
+    ULONG       OutSize;
+} SERIAL_QUEUE_SIZE, *PSERIAL_QUEUE_SIZE;
+
+typedef struct _SERIAL_XOFF_COUNTER
+{
+    ULONG       Timeout;
+    LONG        Counter;
+    UCHAR       XoffChar;
+} SERIAL_XOFF_COUNTER, *PSERIAL_XOFF_COUNTER;
+
+typedef struct _SERIAL_BASIC_SETTINGS
+{
+    SERIAL_TIMEOUTS     Timeouts;
+    SERIAL_HANDFLOW     HandFlow;
+    ULONG       RxFifo;
+    ULONG       TxFifo;
+} SERIAL_BASIC_SETTINGS, *PSERIAL_BASIC_SETTINGS;
+
+#define SERIAL_ERROR_BREAK                0x00000001
+#define SERIAL_ERROR_FRAMING              0x00000002
+#define SERIAL_ERROR_OVERRUN              0x00000004
+#define SERIAL_ERROR_QUEUEOVERRUN         0x00000008
+#define SERIAL_ERROR_PARITY               0x00000010
+
+#define SERIAL_SP_UNSPECIFIED             0x00000000
+#define SERIAL_SP_RS232                   0x00000001
+#define SERIAL_SP_PARALLEL                0x00000002
+#define SERIAL_SP_RS422                   0x00000003
+#define SERIAL_SP_RS423                   0x00000004
+#define SERIAL_SP_RS449                   0x00000005
+#define SERIAL_SP_MODEM                   0X00000006
+#define SERIAL_SP_FAX                     0x00000021
+#define SERIAL_SP_SCANNER                 0x00000022
+#define SERIAL_SP_BRIDGE                  0x00000100
+#define SERIAL_SP_LAT                     0x00000101
+#define SERIAL_SP_TELNET                  0x00000102
+#define SERIAL_SP_X25                     0x00000103
+#define SERIAL_SP_SERIALCOMM              0x00000001
+
+#define SERIAL_TX_WAITING_FOR_CTS         0x00000001
+#define SERIAL_TX_WAITING_FOR_DSR         0x00000002
+#define SERIAL_TX_WAITING_FOR_DCD         0x00000004
+#define SERIAL_TX_WAITING_FOR_XON         0x00000008
+#define SERIAL_TX_WAITING_XOFF_SENT       0x00000010
+#define SERIAL_TX_WAITING_ON_BREAK        0x00000020
+#define SERIAL_RX_WAITING_FOR_DSR         0x00000040
+
+#define SERIAL_DTR_STATE                  0x00000001
+#define SERIAL_RTS_STATE                  0x00000002
+#define SERIAL_CTS_STATE                  0x00000010
+#define SERIAL_DSR_STATE                  0x00000020
+#define SERIAL_RI_STATE                   0x00000040
+#define SERIAL_DCD_STATE                  0x00000080
+
+typedef struct _SERIALCONFIG
+{
+    ULONG       Size;
+    USHORT      Version;
+    ULONG       SubType;
+    ULONG       ProvOffset;
+    ULONG       ProviderSize;
+    WCHAR       ProviderData[1];
+} SERIALCONFIG,*PSERIALCONFIG;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDSER_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h
new file mode 100644
index 0000000..c7fa2f4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h
@@ -0,0 +1,59 @@
+/*
+ * DDK definitions for tape access
+ *
+ * Copyright (C) 2006 Hans Leidekker
+ * Based on the w32api version by Casper S. Hornstrup.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDTAPE_H_
+#define _NTDDTAPE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_TAPE_BASE                 FILE_DEVICE_TAPE
+
+#define IOCTL_TAPE_CHECK_VERIFY         CTL_CODE(IOCTL_TAPE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_CREATE_PARTITION     CTL_CODE(IOCTL_TAPE_BASE, 0x000a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_ERASE                CTL_CODE(IOCTL_TAPE_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_FIND_NEW_DEVICES     CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_DRIVE_PARAMS     CTL_CODE(IOCTL_TAPE_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_MEDIA_PARAMS     CTL_CODE(IOCTL_TAPE_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_POSITION         CTL_CODE(IOCTL_TAPE_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_STATUS           CTL_CODE(IOCTL_TAPE_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS )
+
+#define IOCTL_TAPE_PREPARE              CTL_CODE(IOCTL_TAPE_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_DRIVE_PARAMS     CTL_CODE(IOCTL_TAPE_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_SET_MEDIA_PARAMS     CTL_CODE(IOCTL_TAPE_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_POSITION         CTL_CODE(IOCTL_TAPE_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_WRITE_MARKS          CTL_CODE(IOCTL_TAPE_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDTAPE_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h
new file mode 100644
index 0000000..a89ea5d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USB_H__
+#define __DDK_USB_H__
+
+#include <ddk/usb200.h>
+
+#define URB_FUNCTION_SELECT_CONFIGURATION            0x0000
+#define URB_FUNCTION_SELECT_INTERFACE                0x0001
+#define URB_FUNCTION_ABORT_PIPE                      0x0002
+#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL       0x0003
+#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL    0x0004
+#define URB_FUNCTION_GET_FRAME_LENGTH                0x0005
+#define URB_FUNCTION_SET_FRAME_LENGTH                0x0006
+#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER        0x0007
+#define URB_FUNCTION_CONTROL_TRANSFER                0x0008
+#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER      0x0009
+#define URB_FUNCTION_ISOCH_TRANSFER                  0x000A
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE      0x000B
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE        0x000C
+#define URB_FUNCTION_SET_FEATURE_TO_DEVICE           0x000D
+#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE        0x000E
+#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT         0x000F
+#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE         0x0010
+#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE      0x0011
+#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT       0x0012
+#define URB_FUNCTION_GET_STATUS_FROM_DEVICE          0x0013
+#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE       0x0014
+#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT        0x0015
+#define URB_FUNCTION_RESERVED_0X0016                 0x0016
+#define URB_FUNCTION_VENDOR_DEVICE                   0x0017
+#define URB_FUNCTION_VENDOR_INTERFACE                0x0018
+#define URB_FUNCTION_VENDOR_ENDPOINT                 0x0019
+#define URB_FUNCTION_CLASS_DEVICE                    0x001A
+#define URB_FUNCTION_CLASS_INTERFACE                 0x001B
+#define URB_FUNCTION_CLASS_ENDPOINT                  0x001C
+#define URB_FUNCTION_RESERVE_0X001D                  0x001D
+#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
+#define URB_FUNCTION_CLASS_OTHER                     0x001F
+#define URB_FUNCTION_VENDOR_OTHER                    0x0020
+#define URB_FUNCTION_GET_STATUS_FROM_OTHER           0x0021
+#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER          0x0022
+#define URB_FUNCTION_SET_FEATURE_TO_OTHER            0x0023
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT    0x0024
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT      0x0025
+#define URB_FUNCTION_GET_CONFIGURATION               0x0026
+#define URB_FUNCTION_GET_INTERFACE                   0x0027
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE   0x0028
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE     0x0029
+#define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR       0x002A
+#define URB_FUNCTION_RESERVE_0X002B                  0x002B
+#define URB_FUNCTION_RESERVE_0X002C                  0x002C
+#define URB_FUNCTION_RESERVE_0X002D                  0x002D
+#define URB_FUNCTION_RESERVE_0X002E                  0x002E
+#define URB_FUNCTION_RESERVE_0X002F                  0x002F
+#define URB_FUNCTION_SYNC_RESET_PIPE                 0x0030
+#define URB_FUNCTION_SYNC_CLEAR_STALL                0x0031
+
+#define USBD_SHORT_TRANSFER_OK                       0x00000002
+#define USBD_TRANSFER_DIRECTION_OUT                  0
+#define USBD_TRANSFER_DIRECTION_IN                   1
+
+typedef LONG USBD_STATUS;
+
+typedef PVOID USBD_PIPE_HANDLE;
+typedef PVOID USBD_CONFIGURATION_HANDLE;
+typedef PVOID USBD_INTERFACE_HANDLE;
+
+#define USBD_STATUS_SUCCESS                          ((USBD_STATUS)0x00000000)
+#define USBD_STATUS_PENDING                          ((USBD_STATUS)0x40000000)
+#define USBD_STATUS_ERROR                            ((USBD_STATUS)0x80000000)
+#define USBD_STATUS_HALTED                           ((USBD_STATUS)0xC0000000)
+
+#define USBD_STATUS_CANCELED                         ((USBD_STATUS)0x00010000)
+#define USBD_STATUS_CANCELING                        ((USBD_STATUS)0x00020000)
+#define USBD_STATUS_CRC                              ((USBD_STATUS)0xC0000001)
+#define USBD_STATUS_BTSTUFF                          ((USBD_STATUS)0xC0000002)
+#define USBD_STATUS_DATA_TOGGLE_MISMATCH             ((USBD_STATUS)0xC0000003)
+#define USBD_STATUS_STALL_PID                        ((USBD_STATUS)0xC0000004)
+#define USBD_STATUS_DEV_NOT_RESPONDING               ((USBD_STATUS)0xC0000005)
+#define USBD_STATUS_PID_CHECK_FAILURE                ((USBD_STATUS)0xC0000006)
+#define USBD_STATUS_UNEXPECTED_PID                   ((USBD_STATUS)0xC0000007)
+#define USBD_STATUS_DATA_OVERRUN                     ((USBD_STATUS)0xC0000008)
+#define USBD_STATUS_DATA_UNDERRUN                    ((USBD_STATUS)0xC0000009)
+#define USBD_STATUS_RESERVED1                        ((USBD_STATUS)0xC000000A)
+#define USBD_STATUS_RESERVED2                        ((USBD_STATUS)0xC000000B)
+#define USBD_STATUS_BUFFER_OVERRUN                   ((USBD_STATUS)0xC000000C)
+#define USBD_STATUS_BUFFER_UNDERRUN                  ((USBD_STATUS)0xC000000D)
+#define USBD_STATUS_NOT_ACCESSED                     ((USBD_STATUS)0xC000000F)
+#define USBD_STATUS_FIFO                             ((USBD_STATUS)0xC0000010)
+#define USBD_STATUS_XACT_ERROR                       ((USBD_STATUS)0xC0000011)
+#define USBD_STATUS_BABBLE_DETECTED                  ((USBD_STATUS)0xC0000012)
+#define USBD_STATUS_DATA_BUFFER_ERROR                ((USBD_STATUS)0xC0000013)
+#define USBD_STATUS_ENDPOINT_HALTED                  ((USBD_STATUS)0xC0000030)
+#define USBD_STATUS_NO_MEMORY                        ((USBD_STATUS)0x80000100)
+#define USBD_STATUS_INVALID_URB_FUNCTION             ((USBD_STATUS)0x80000200)
+#define USBD_STATUS_INVALID_PARAMETER                ((USBD_STATUS)0x80000300)
+#define USBD_STATUS_ERROR_BUSY                       ((USBD_STATUS)0x80000400)
+#define USBD_STATUS_REQUEST_FAILED                   ((USBD_STATUS)0x80000500)
+#define USBD_STATUS_INVALID_PIPE_HANDLE              ((USBD_STATUS)0x80000600)
+#define USBD_STATUS_NO_BANDWIDTH                     ((USBD_STATUS)0x80000700)
+#define USBD_STATUS_INTERNAL_HC_ERROR                ((USBD_STATUS)0x80000800)
+#define USBD_STATUS_ERROR_SHORT_TRANSFER             ((USBD_STATUS)0x80000900)
+#define USBD_STATUS_BAD_START_FRAME                  ((USBD_STATUS)0xC0000A00)
+#define USBD_STATUS_ISOCH_REQUEST_FAILED             ((USBD_STATUS)0xC0000B00)
+#define USBD_STATUS_FRAME_CONTROL_OWNED              ((USBD_STATUS)0xC0000C00)
+#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED          ((USBD_STATUS)0xC0000D00)
+#define USBD_STATUS_NOT_SUPPORTED                    ((USBD_STATUS)0xC0000E00)
+#define USBD_STATUS_INVALID_CONFIGURATION_DESCRIPTOR ((USBD_STATUS)0xC0000F00)
+#define USBD_STATUS_INSUFFICIENT_RESOURCES           ((USBD_STATUS)0xC0001000)
+#define USBD_STATUS_SET_CONFIG_FAILED                ((USBD_STATUS)0xC0002000)
+#define USBD_STATUS_BUFFER_TOO_SMALL                 ((USBD_STATUS)0xC0003000)
+#define USBD_STATUS_INTERFACE_NOT_FOUND              ((USBD_STATUS)0xC0004000)
+#define USBD_STATUS_INVALID_PIPE_FLAGS               ((USBD_STATUS)0xC0005000)
+#define USBD_STATUS_TIMEOUT                          ((USBD_STATUS)0xC0006000)
+#define USBD_STATUS_DEVICE_GONE                      ((USBD_STATUS)0xC0007000)
+#define USBD_STATUS_STATUS_NOT_MAPPED                ((USBD_STATUS)0xC0008000)
+#define USBD_STATUS_ISO_NOT_ACCESSED_BY_HW           ((USBD_STATUS)0xC0020000)
+#define USBD_STATUS_ISO_TD_ERROR                     ((USBD_STATUS)0xC0030000)
+#define USBD_STATUS_ISO_NA_LATE_USBPORT              ((USBD_STATUS)0xC0040000)
+#define USBD_STATUS_ISO_NOT_ACCESSED_LATE            ((USBD_STATUS)0xC0050000)
+
+#define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
+#define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1)
+#define USBD_ERROR(Status)   ((USBD_STATUS)(Status) < 0)
+
+typedef struct _USBD_VERSION_INFORMATION {
+    ULONG  USBDI_Version;
+    ULONG  Supported_USB_Version;
+} USBD_VERSION_INFORMATION;
+typedef struct _USBD_VERSION_INFORMATION *PUSBD_VERSION_INFORMATION;
+
+typedef enum _USBD_PIPE_TYPE {
+    UsbdPipeTypeControl,
+    UsbdPipeTypeIsochronous,
+    UsbdPipeTypeBulk,
+    UsbdPipeTypeInterrupt
+} USBD_PIPE_TYPE;
+
+typedef struct _USBD_PIPE_INFORMATION {
+    USHORT MaximumPacketSize;
+    UCHAR EndpointAddress;
+    UCHAR Interval;
+    USBD_PIPE_TYPE PipeType;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG MaximumTransferSize;
+    ULONG PipeFlags;
+} USBD_PIPE_INFORMATION;
+typedef struct _USBD_PIPE_INFORMATION *PUSBD_PIPE_INFORMATION;
+
+typedef struct _USBD_INTERFACE_INFORMATION {
+    USHORT Length;
+    UCHAR InterfaceNumber;
+    UCHAR AlternateSetting;
+    UCHAR Class;
+    UCHAR SubClass;
+    UCHAR Protocol;
+    UCHAR Reserved;
+    USBD_INTERFACE_HANDLE InterfaceHandle;
+    ULONG NumberOfPipes;
+    USBD_PIPE_INFORMATION Pipes[1];
+} USBD_INTERFACE_INFORMATION;
+typedef struct _USBD_INTERFACE_INFORMATION *PUSBD_INTERFACE_INFORMATION;
+
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
+    ULONG Offset;
+    ULONG Length;
+    USBD_STATUS Status;
+} USBD_ISO_PACKET_DESCRIPTOR;
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR *PUSBD_ISO_PACKET_DESCRIPTOR;
+
+struct _URB_HCD_AREA {
+    PVOID Reserved8[8];
+};
+
+struct _URB_HEADER {
+    USHORT Length;
+    USHORT Function;
+    USBD_STATUS Status;
+    PVOID UsbdDeviceHandle;
+    ULONG UsbdFlags;
+};
+
+struct _URB_SELECT_INTERFACE {
+    struct _URB_HEADER Hdr;
+    USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+    USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_SELECT_CONFIGURATION {
+    struct _URB_HEADER Hdr;
+    PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+    USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+    USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_PIPE_REQUEST {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG Reserved;
+};
+
+struct _URB_FRAME_LENGTH_CONTROL {
+    struct _URB_HEADER Hdr;
+};
+
+struct _URB_GET_FRAME_LENGTH {
+    struct _URB_HEADER Hdr;
+    ULONG FrameLength;
+    ULONG FrameNumber;
+};
+
+struct _URB_SET_FRAME_LENGTH {
+    struct _URB_HEADER Hdr;
+    LONG FrameLengthDelta;
+};
+
+struct _URB_GET_CURRENT_FRAME_NUMBER {
+    struct _URB_HEADER Hdr;
+    ULONG FrameNumber;
+};
+
+struct _URB_CONTROL_TRANSFER {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR SetupPacket[8];
+};
+
+struct _URB_BULK_OR_INTERRUPT_TRANSFER {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+};
+
+struct _URB_ISOCH_TRANSFER {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    ULONG StartFrame;
+    ULONG NumberOfPackets;
+    ULONG ErrorCount;
+    USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
+};
+
+struct _URB_CONTROL_DESCRIPTOR_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    USHORT Reserved1;
+    UCHAR Index;
+    UCHAR DescriptorType;
+    USHORT LanguageId;
+    USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_STATUS_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR Reserved1[4];
+    USHORT Index;
+    USHORT Reserved2;
+};
+
+struct _URB_CONTROL_FEATURE_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved2;
+    ULONG Reserved3;
+    PVOID Reserved4;
+    PMDL Reserved5;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    USHORT Reserved0;
+    USHORT FeatureSelector;
+    USHORT Index;
+    USHORT Reserved1;
+};
+
+struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR RequestTypeReservedBits;
+    UCHAR Request;
+    USHORT Value;
+    USHORT Index;
+    USHORT Reserved1;
+};
+
+struct _URB_CONTROL_GET_INTERFACE_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR Reserved1[4];
+    USHORT Interface;
+    USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR Reserved1[8];
+};
+
+struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR   Recipient:5;
+    UCHAR   Reserved1:3;
+    UCHAR   Reserved2;
+    UCHAR   InterfaceNumber;
+    UCHAR   MS_PageIndex;
+    USHORT  MS_FeatureDescriptorIndex;
+    USHORT  Reserved3;
+};
+
+typedef struct _URB {
+    union {
+        struct _URB_HEADER UrbHeader;
+        struct _URB_SELECT_INTERFACE UrbSelectInterface;
+        struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration;
+        struct _URB_PIPE_REQUEST UrbPipeRequest;
+        struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl;
+        struct _URB_GET_FRAME_LENGTH UrbGetFrameLength;
+        struct _URB_SET_FRAME_LENGTH UrbSetFrameLength;
+        struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber;
+        struct _URB_CONTROL_TRANSFER UrbControlTransfer;
+        struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;
+        struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer;
+        struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest;
+        struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest;
+        struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest;
+        struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest;
+        struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest;
+        struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest;
+        struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST UrbOSFeatureDescriptorRequest;
+    } DUMMYUNIONNAME;
+} URB;
+typedef struct _URB *PURB;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h
new file mode 100644
index 0000000..b5c22fe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USB100_H__
+#define __DDK_USB100_H__
+
+#define USB_DEVICE_DESCRIPTOR_TYPE                0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE         0x02
+#define USB_STRING_DESCRIPTOR_TYPE                0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE             0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE              0x05
+#define USB_RESERVED_DESCRIPTOR_TYPE              0x06
+#define USB_CONFIG_POWER_DESCRIPTOR_TYPE          0x07
+#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE       0x08
+
+#include <pshpack1.h>
+
+typedef struct _USB_DEVICE_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    USHORT bcdUSB;
+    UCHAR bDeviceClass;
+    UCHAR bDeviceSubClass;
+    UCHAR bDeviceProtocol;
+    UCHAR bMaxPacketSize0;
+    USHORT idVendor;
+    USHORT idProduct;
+    USHORT bcdDevice;
+    UCHAR iManufacturer;
+    UCHAR iProduct;
+    UCHAR iSerialNumber;
+    UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR;
+typedef struct _USB_DEVICE_DESCRIPTOR *PUSB_DEVICE_DESCRIPTOR;
+
+#define USB_ENDPOINT_TYPE_MASK            0x03
+#define USB_ENDPOINT_TYPE_CONTROL         0x00
+#define USB_ENDPOINT_TYPE_ISOCHRONOUS     0x01
+#define USB_ENDPOINT_TYPE_BULK            0x02
+#define USB_ENDPOINT_TYPE_INTERRUPT       0x03
+
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    UCHAR bEndpointAddress;
+    UCHAR bmAttributes;
+    USHORT wMaxPacketSize;
+    UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR;
+typedef struct _USB_ENDPOINT_DESCRIPTOR *PUSB_ENDPOINT_DESCRIPTOR;
+
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    USHORT wTotalLength;
+    UCHAR bNumInterfaces;
+    UCHAR bConfigurationValue;
+    UCHAR iConfiguration;
+    UCHAR bmAttributes;
+    UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR;
+typedef struct _USB_CONFIGURATION_DESCRIPTOR *PUSB_CONFIGURATION_DESCRIPTOR;
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    UCHAR bInterfaceNumber;
+    UCHAR bAlternateSetting;
+    UCHAR bNumEndpoints;
+    UCHAR bInterfaceClass;
+    UCHAR bInterfaceSubClass;
+    UCHAR bInterfaceProtocol;
+    UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR;
+typedef struct _USB_INTERFACE_DESCRIPTOR *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    WCHAR bString[1];
+} USB_STRING_DESCRIPTOR;
+typedef struct _USB_STRING_DESCRIPTOR *PUSB_STRING_DESCRIPTOR;
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR;
+typedef struct _USB_COMMON_DESCRIPTOR *PUSB_COMMON_DESCRIPTOR;
+
+typedef struct _USB_HUB_DESCRIPTOR {
+    UCHAR bDescriptorLength;
+    UCHAR bDescriptorType;
+    UCHAR bNumberOfPorts;
+    USHORT wHubCharacteristics;
+    UCHAR bPowerOnToPowerGood;
+    UCHAR bHubControlCurrent;
+    UCHAR bRemoveAndPowerMask[64];
+} USB_HUB_DESCRIPTOR;
+typedef struct _USB_HUB_DESCRIPTOR *PUSB_HUB_DESCRIPTOR;
+
+#include <poppack.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h
new file mode 100644
index 0000000..d511970
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USB200_H__
+#define __DDK_USB200_H__
+
+#include <ddk/usb100.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h
new file mode 100644
index 0000000..843f7f2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USBDLIB_H__
+#define __DDK_USBDLIB_H__
+
+typedef struct _USBD_INTERFACE_LIST_ENTRY {
+    PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
+    PUSBD_INTERFACE_INFORMATION Interface;
+} USBD_INTERFACE_LIST_ENTRY;
+typedef struct _USBD_INTERFACE_LIST_ENTRY *PUSBD_INTERFACE_LIST_ENTRY;
+
+PURB WINAPI USBD_CreateConfigurationRequest(PUSB_CONFIGURATION_DESCRIPTOR,PUSHORT);
+PURB WINAPI USBD_CreateConfigurationRequestEx(PUSB_CONFIGURATION_DESCRIPTOR,PUSBD_INTERFACE_LIST_ENTRY);
+ULONG WINAPI USBD_GetInterfaceLength(PUSB_INTERFACE_DESCRIPTOR,PUCHAR);
+VOID WINAPI USBD_GetUSBDIVersion(PUSBD_VERSION_INFORMATION);
+PUSB_COMMON_DESCRIPTOR WINAPI USBD_ParseDescriptors(PVOID,ULONG,PVOID,LONG);
+PUSB_INTERFACE_DESCRIPTOR WINAPI USBD_ParseConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR,UCHAR,UCHAR);
+PUSB_INTERFACE_DESCRIPTOR WINAPI USBD_ParseConfigurationDescriptorEx(PUSB_CONFIGURATION_DESCRIPTOR,PVOID,LONG,LONG,LONG,LONG,LONG);
+USBD_STATUS WINAPI USBD_ValidateConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR,ULONG,USHORT,PUCHAR*,ULONG);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h
new file mode 100644
index 0000000..cf1f44a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2013 Damjan Jovanovic
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USBIOCTL_H__
+#define __DDK_USBIOCTL_H__
+
+#define IOCTL_INTERNAL_USB_SUBMIT_URB  \
+  CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#endif /* __DDK_USBIOCTL_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h
new file mode 100644
index 0000000..9255dbc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2013 Damjan Jovanovic
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USBIODEF_H__
+#define __DDK_USBIODEF_H__
+
+#define USB_SUBMIT_URB 0
+
+#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN
+
+#endif /* __DDK_USBIODEF_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h
new file mode 100644
index 0000000..8b96ca6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h
@@ -0,0 +1,1361 @@
+/*
+ * Copyright 2004-2005 Ivan Leo Puoti
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WDMDDK_
+#define _WDMDDK_
+#define _NTDDK_
+
+#include <ntstatus.h>
+
+#ifdef _WIN64
+#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
+#else
+#define POINTER_ALIGNMENT
+#endif
+
+typedef LONG KPRIORITY;
+
+typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
+
+struct _KDPC;
+struct _KAPC;
+struct _IRP;
+struct _DEVICE_OBJECT;
+struct _DRIVER_OBJECT;
+
+typedef VOID (WINAPI *PKDEFERRED_ROUTINE)(struct _KDPC *, PVOID, PVOID, PVOID);
+typedef VOID (WINAPI *PKSTART_ROUTINE)(PVOID);
+
+typedef NTSTATUS (WINAPI *PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT *, PUNICODE_STRING);
+typedef NTSTATUS (WINAPI *PDRIVER_DISPATCH)(struct _DEVICE_OBJECT *, struct _IRP *);
+typedef void (WINAPI *PDRIVER_STARTIO)(struct _DEVICE_OBJECT *, struct _IRP *);
+typedef void (WINAPI *PDRIVER_UNLOAD)(struct _DRIVER_OBJECT *);
+
+typedef struct _DISPATCHER_HEADER {
+  UCHAR  Type;
+  UCHAR  Absolute;
+  UCHAR  Size;
+  UCHAR  Inserted;
+  LONG  SignalState;
+  LIST_ENTRY  WaitListHead;
+} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
+
+typedef struct _KEVENT {
+  DISPATCHER_HEADER  Header;
+} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
+
+typedef struct _KSEMAPHORE {
+  DISPATCHER_HEADER  Header;
+  LONG Limit;
+} KSEMAPHORE, *PKSEMAPHORE, *PRKSEMAPHORE;
+
+typedef struct _KDPC {
+  CSHORT  Type;
+  UCHAR  Number;
+  UCHAR  Importance;
+  LIST_ENTRY  DpcListEntry;
+  PKDEFERRED_ROUTINE  DeferredRoutine;
+  PVOID  DeferredContext;
+  PVOID  SystemArgument1;
+  PVOID  SystemArgument2;
+  PULONG_PTR  Lock;
+} KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
+
+typedef struct _KDEVICE_QUEUE_ENTRY {
+  LIST_ENTRY  DeviceListEntry;
+  ULONG  SortKey;
+  BOOLEAN  Inserted;
+} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
+*RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
+
+typedef struct _KDEVICE_QUEUE {
+  CSHORT  Type;
+  CSHORT  Size;
+  LIST_ENTRY  DeviceListHead;
+  KSPIN_LOCK  Lock;
+  BOOLEAN  Busy;
+} KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
+
+typedef struct _KMUTANT {
+    DISPATCHER_HEADER Header;
+    LIST_ENTRY MutantListEntry;
+    struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
+    BOOLEAN Abandoned;
+    UCHAR ApcDisable;
+} KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
+
+typedef enum _KWAIT_REASON
+{
+    Executive,
+    FreePage,
+    PageIn,
+    PoolAllocation,
+    DelayExecution,
+    Suspended,
+    UserRequest,
+    WrExecutive,
+    WrFreePage,
+    WrPageIn,
+    WrDelayExecution,
+    WrSuspended,
+    WrUserRequest,
+    WrQueue,
+    WrLpcReceive,
+    WrLpcReply,
+    WrVirtualMemory,
+    WrPageOut,
+    WrRendezvous,
+    Spare2,
+    Spare3,
+    Spare4,
+    Spare5,
+    Spare6,
+    WrKernel,
+    MaximumWaitReason,
+} KWAIT_REASON;
+
+typedef struct _ALLOCATE_FUNCTION *PALLOCATE_FUNCTION;
+typedef struct _IO_TIMER *PIO_TIMER;
+typedef struct _IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
+typedef struct _ETHREAD *PETHREAD;
+typedef struct _FREE_FUNCTION *PFREE_FUNCTION;
+typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
+typedef struct _EPROCESS *PEPROCESS;
+typedef struct _ERESOURCE *PERESOURCE;
+typedef struct _IO_WORKITEM *PIO_WORKITEM;
+typedef struct _NPAGED_LOOKASIDE_LIST *PNPAGED_LOOKASIDE_LIST;
+typedef struct _PAGED_LOOKASIDE_LIST *PPAGED_LOOKASIDE_LIST;
+typedef struct _OBJECT_TYPE *POBJECT_TYPE;
+typedef struct _OBJECT_HANDLE_INFORMATION *POBJECT_HANDLE_INFORMATION;
+typedef struct _ZONE_HEADER *PZONE_HEADER;
+
+typedef struct _FAST_MUTEX
+{
+    LONG Count;
+    PKTHREAD Owner;
+    ULONG Contention;
+    KEVENT Gate;
+    ULONG OldIrql;
+} FAST_MUTEX, *PFAST_MUTEX;
+
+#define MAXIMUM_VOLUME_LABEL_LENGTH       (32 * sizeof(WCHAR))
+
+typedef struct _VPB {
+  CSHORT  Type;
+  CSHORT  Size;
+  USHORT  Flags;
+  USHORT  VolumeLabelLength;
+  struct _DEVICE_OBJECT  *DeviceObject;
+  struct _DEVICE_OBJECT  *RealDevice;
+  ULONG  SerialNumber;
+  ULONG  ReferenceCount;
+  WCHAR  VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+} VPB, *PVPB;
+
+typedef enum _POOL_TYPE {
+  NonPagedPool,
+  PagedPool,
+  NonPagedPoolMustSucceed,
+  DontUseThisType,
+  NonPagedPoolCacheAligned,
+  PagedPoolCacheAligned,
+  NonPagedPoolCacheAlignedMustS,
+  MaxPoolType
+} POOL_TYPE;
+
+typedef struct _WAIT_CONTEXT_BLOCK {
+  KDEVICE_QUEUE_ENTRY  WaitQueueEntry;
+  struct _DRIVER_CONTROL  *DeviceRoutine;
+  PVOID  DeviceContext;
+  ULONG  NumberOfMapRegisters;
+  PVOID  DeviceObject;
+  PVOID  CurrentIrp;
+  PKDPC  BufferChainingDpc;
+} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
+
+#define DO_BUFFERED_IO                  0x00000004
+#define DO_EXCLUSIVE                    0x00000008
+#define DO_DIRECT_IO                    0x00000010
+#define DO_MAP_IO_BUFFER                0x00000020
+#define DO_DEVICE_INITIALIZING          0x00000080
+#define DO_SHUTDOWN_REGISTERED          0x00000800
+#define DO_BUS_ENUMERATED_DEVICE        0x00001000
+#define DO_POWER_PAGABLE                0x00002000
+#define DO_POWER_INRUSH                 0x00004000
+
+#define IO_NO_INCREMENT                     0
+#define IO_CD_ROM_INCREMENT                 1
+#define IO_DISK_INCREMENT                   1
+#define IO_KEYBOARD_INCREMENT               6
+#define IO_MAILSLOT_INCREMENT               2
+#define IO_MOUSE_INCREMENT                  6
+#define IO_NAMED_PIPE_INCREMENT             2
+#define IO_NETWORK_INCREMENT                2
+#define IO_PARALLEL_INCREMENT               1
+#define IO_SERIAL_INCREMENT                 2
+#define IO_SOUND_INCREMENT                  8
+#define IO_VIDEO_INCREMENT                  1
+
+#ifndef DEVICE_TYPE
+#define DEVICE_TYPE ULONG
+#endif
+#define IRP_MJ_MAXIMUM_FUNCTION           0x1b
+#define IRP_MJ_CREATE                     0x00
+#define IRP_MJ_CREATE_NAMED_PIPE          0x01
+#define IRP_MJ_CLOSE                      0x02
+#define IRP_MJ_READ                       0x03
+#define IRP_MJ_WRITE                      0x04
+#define IRP_MJ_QUERY_INFORMATION          0x05
+#define IRP_MJ_SET_INFORMATION            0x06
+#define IRP_MJ_QUERY_EA                   0x07
+#define IRP_MJ_SET_EA                     0x08
+#define IRP_MJ_FLUSH_BUFFERS              0x09
+#define IRP_MJ_QUERY_VOLUME_INFORMATION   0x0a
+#define IRP_MJ_SET_VOLUME_INFORMATION     0x0b
+#define IRP_MJ_DIRECTORY_CONTROL          0x0c
+#define IRP_MJ_FILE_SYSTEM_CONTROL        0x0d
+#define IRP_MJ_DEVICE_CONTROL             0x0e
+#define IRP_MJ_INTERNAL_DEVICE_CONTROL    0x0f
+#define IRP_MJ_SHUTDOWN                   0x10
+#define IRP_MJ_LOCK_CONTROL               0x11
+#define IRP_MJ_CLEANUP                    0x12
+#define IRP_MJ_CREATE_MAILSLOT            0x13
+#define IRP_MJ_QUERY_SECURITY             0x14
+#define IRP_MJ_SET_SECURITY               0x15
+#define IRP_MJ_POWER                      0x16
+#define IRP_MJ_SYSTEM_CONTROL             0x17
+#define IRP_MJ_DEVICE_CHANGE              0x18
+#define IRP_MJ_QUERY_QUOTA                0x19
+#define IRP_MJ_SET_QUOTA                  0x1a
+#define IRP_MJ_PNP                        0x1b
+
+#define IRP_MN_START_DEVICE                 0x00
+#define IRP_MN_QUERY_REMOVE_DEVICE          0x01
+#define IRP_MN_REMOVE_DEVICE                0x02
+#define IRP_MN_CANCEL_REMOVE_DEVICE         0x03
+#define IRP_MN_STOP_DEVICE                  0x04
+#define IRP_MN_QUERY_STOP_DEVICE            0x05
+#define IRP_MN_CANCEL_STOP_DEVICE           0x06
+#define IRP_MN_QUERY_DEVICE_RELATIONS       0x07
+#define IRP_MN_QUERY_INTERFACE              0x08
+#define IRP_MN_QUERY_CAPABILITIES           0x09
+#define IRP_MN_QUERY_RESOURCES              0x0A
+#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS  0x0B
+#define IRP_MN_QUERY_DEVICE_TEXT            0x0C
+#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+#define IRP_MN_READ_CONFIG                  0x0F
+#define IRP_MN_WRITE_CONFIG                 0x10
+#define IRP_MN_EJECT                        0x11
+#define IRP_MN_SET_LOCK                     0x12
+#define IRP_MN_QUERY_ID                     0x13
+#define IRP_MN_QUERY_PNP_DEVICE_STATE       0x14
+#define IRP_MN_QUERY_BUS_INFORMATION        0x15
+#define IRP_MN_DEVICE_USAGE_NOTIFICATION    0x16
+#define IRP_MN_SURPRISE_REMOVAL             0x17
+#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
+
+#define IRP_QUOTA_CHARGED               0x01
+#define IRP_ALLOCATED_MUST_SUCCEED      0x02
+#define IRP_ALLOCATED_FIXED_SIZE        0x04
+#define IRP_LOOKASIDE_ALLOCATION        0x08
+
+#define IO_TYPE_ADAPTER                 0x01
+#define IO_TYPE_CONTROLLER              0x02
+#define IO_TYPE_DEVICE                  0x03
+#define IO_TYPE_DRIVER                  0x04
+#define IO_TYPE_FILE                    0x05
+#define IO_TYPE_IRP                     0x06
+#define IO_TYPE_MASTER_ADAPTER          0x07
+#define IO_TYPE_OPEN_PACKET             0x08
+#define IO_TYPE_TIMER                   0x09
+#define IO_TYPE_VPB                     0x0a
+#define IO_TYPE_ERROR_LOG               0x0b
+#define IO_TYPE_ERROR_MESSAGE           0x0c
+#define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0d
+
+typedef struct _DEVICE_OBJECT {
+  CSHORT  Type;
+  USHORT  Size;
+  LONG  ReferenceCount;
+  struct _DRIVER_OBJECT  *DriverObject;
+  struct _DEVICE_OBJECT  *NextDevice;
+  struct _DEVICE_OBJECT  *AttachedDevice;
+  struct _IRP  *CurrentIrp;
+  PIO_TIMER  Timer;
+  ULONG  Flags;
+  ULONG  Characteristics;
+  PVPB  Vpb;
+  PVOID  DeviceExtension;
+  DEVICE_TYPE  DeviceType;
+  CCHAR  StackSize;
+  union {
+    LIST_ENTRY  ListEntry;
+    WAIT_CONTEXT_BLOCK  Wcb;
+  } Queue;
+  ULONG  AlignmentRequirement;
+  KDEVICE_QUEUE  DeviceQueue;
+  KDPC  Dpc;
+  ULONG  ActiveThreadCount;
+  PSECURITY_DESCRIPTOR  SecurityDescriptor;
+  KEVENT  DeviceLock;
+  USHORT  SectorSize;
+  USHORT  Spare1;
+  struct _DEVOBJ_EXTENSION  *DeviceObjectExtension;
+  PVOID  Reserved;
+} DEVICE_OBJECT;
+typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
+
+typedef struct _DEVICE_RELATIONS {
+  ULONG Count;
+  PDEVICE_OBJECT Objects[1];
+} DEVICE_RELATIONS;
+typedef struct _DEVICE_RELATIONS *PDEVICE_RELATIONS;
+
+typedef struct _DRIVER_EXTENSION {
+  struct _DRIVER_OBJECT  *DriverObject;
+  PVOID  AddDevice;
+  ULONG  Count;
+  UNICODE_STRING  ServiceKeyName;
+} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
+
+typedef struct _DRIVER_OBJECT {
+  CSHORT  Type;
+  CSHORT  Size;
+  PDEVICE_OBJECT  DeviceObject;
+  ULONG  Flags;
+  PVOID  DriverStart;
+  ULONG  DriverSize;
+  PVOID  DriverSection;
+  PDRIVER_EXTENSION  DriverExtension;
+  UNICODE_STRING  DriverName;
+  PUNICODE_STRING  HardwareDatabase;
+  PVOID  FastIoDispatch;
+  PDRIVER_INITIALIZE DriverInit;
+  PDRIVER_STARTIO    DriverStartIo;
+  PDRIVER_UNLOAD     DriverUnload;
+  PDRIVER_DISPATCH   MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+} DRIVER_OBJECT;
+typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
+
+/* Irp definitions */
+typedef UCHAR KIRQL, *PKIRQL;
+typedef CCHAR KPROCESSOR_MODE;
+
+typedef VOID (WINAPI *PDRIVER_CANCEL)(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN struct _IRP  *Irp);
+
+typedef VOID (WINAPI *PKNORMAL_ROUTINE)(
+  IN PVOID  NormalContext,
+  IN PVOID  SystemArgument1,
+  IN PVOID  SystemArgument2);
+
+typedef VOID (WINAPI *PKKERNEL_ROUTINE)(
+  IN struct _KAPC  *Apc,
+  IN OUT PKNORMAL_ROUTINE  *NormalRoutine,
+  IN OUT PVOID  *NormalContext,
+  IN OUT PVOID  *SystemArgument1,
+  IN OUT PVOID  *SystemArgument2);
+
+typedef VOID (WINAPI *PKRUNDOWN_ROUTINE)(
+  IN struct _KAPC  *Apc);
+
+typedef struct _KAPC {
+  CSHORT  Type;
+  CSHORT  Size;
+  ULONG  Spare0;
+  struct _KTHREAD  *Thread;
+  LIST_ENTRY  ApcListEntry;
+  PKKERNEL_ROUTINE  KernelRoutine;
+  PKRUNDOWN_ROUTINE  RundownRoutine;
+  PKNORMAL_ROUTINE  NormalRoutine;
+  PVOID  NormalContext;
+  PVOID  SystemArgument1;
+  PVOID  SystemArgument2;
+  CCHAR  ApcStateIndex;
+  KPROCESSOR_MODE  ApcMode;
+  BOOLEAN  Inserted;
+} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
+
+#include <pshpack1.h>
+typedef struct _IRP {
+  CSHORT  Type;
+  USHORT  Size;
+  struct _MDL  *MdlAddress;
+  ULONG  Flags;
+  union {
+    struct _IRP  *MasterIrp;
+    LONG  IrpCount;
+    PVOID  SystemBuffer;
+  } AssociatedIrp;
+  LIST_ENTRY  ThreadListEntry;
+  IO_STATUS_BLOCK  IoStatus;
+  KPROCESSOR_MODE  RequestorMode;
+  BOOLEAN  PendingReturned;
+  CHAR  StackCount;
+  CHAR  CurrentLocation;
+  BOOLEAN  Cancel;
+  KIRQL  CancelIrql;
+  CCHAR  ApcEnvironment;
+  UCHAR  AllocationFlags;
+  PIO_STATUS_BLOCK  UserIosb;
+  PKEVENT  UserEvent;
+  union {
+    struct {
+      PIO_APC_ROUTINE  UserApcRoutine;
+      PVOID  UserApcContext;
+    } AsynchronousParameters;
+    LARGE_INTEGER  AllocationSize;
+  } Overlay;
+  PDRIVER_CANCEL  CancelRoutine;
+  PVOID  UserBuffer;
+  union {
+    struct {
+       union {
+        KDEVICE_QUEUE_ENTRY  DeviceQueueEntry;
+        struct {
+          PVOID  DriverContext[4];
+        } DUMMYSTRUCTNAME;
+      } DUMMYUNIONNAME1;
+      PETHREAD  Thread;
+      PCHAR  AuxiliaryBuffer;
+      struct {
+        LIST_ENTRY  ListEntry;
+        union {
+          struct _IO_STACK_LOCATION  *CurrentStackLocation;
+          ULONG  PacketType;
+        } DUMMYUNIONNAME2;
+      } DUMMYSTRUCTNAME;
+      struct _FILE_OBJECT  *OriginalFileObject;
+    } Overlay;
+    KAPC  Apc;
+    PVOID  CompletionKey;
+  } Tail;
+} IRP;
+typedef struct _IRP *PIRP;
+#include <poppack.h>
+
+typedef VOID (WINAPI *PINTERFACE_REFERENCE)(
+  PVOID  Context);
+
+typedef VOID (WINAPI *PINTERFACE_DEREFERENCE)(
+  PVOID Context);
+
+typedef struct _INTERFACE {
+  USHORT  Size;
+  USHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+} INTERFACE, *PINTERFACE;
+
+typedef struct _SECTION_OBJECT_POINTERS {
+  PVOID  DataSectionObject;
+  PVOID  SharedCacheMap;
+  PVOID  ImageSectionObject;
+} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
+
+typedef struct _IO_COMPLETION_CONTEXT {
+  PVOID  Port;
+  PVOID  Key;
+} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
+
+typedef enum _DEVICE_RELATION_TYPE {
+  BusRelations,
+  EjectionRelations,
+  PowerRelations,
+  RemovalRelations,
+  TargetDeviceRelation,
+  SingleBusRelations
+} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
+
+typedef struct _FILE_OBJECT {
+  CSHORT  Type;
+  CSHORT  Size;
+  PDEVICE_OBJECT  DeviceObject;
+  PVPB  Vpb;
+  PVOID  FsContext;
+  PVOID  FsContext2;
+  PSECTION_OBJECT_POINTERS  SectionObjectPointer;
+  PVOID  PrivateCacheMap;
+  NTSTATUS  FinalStatus;
+  struct _FILE_OBJECT  *RelatedFileObject;
+  BOOLEAN  LockOperation;
+  BOOLEAN  DeletePending;
+  BOOLEAN  ReadAccess;
+  BOOLEAN  WriteAccess;
+  BOOLEAN  DeleteAccess;
+  BOOLEAN  SharedRead;
+  BOOLEAN  SharedWrite;
+  BOOLEAN  SharedDelete;
+  ULONG  Flags;
+  UNICODE_STRING  FileName;
+  LARGE_INTEGER  CurrentByteOffset;
+  ULONG  Waiters;
+  ULONG  Busy;
+  PVOID  LastLock;
+  KEVENT  Lock;
+  KEVENT  Event;
+  PIO_COMPLETION_CONTEXT  CompletionContext;
+} FILE_OBJECT;
+typedef struct _FILE_OBJECT *PFILE_OBJECT;
+
+#define INITIAL_PRIVILEGE_COUNT           3
+
+typedef struct _INITIAL_PRIVILEGE_SET {
+  ULONG  PrivilegeCount;
+  ULONG  Control;
+  LUID_AND_ATTRIBUTES  Privilege[INITIAL_PRIVILEGE_COUNT];
+} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+
+typedef struct _SECURITY_SUBJECT_CONTEXT {
+  PACCESS_TOKEN  ClientToken;
+  SECURITY_IMPERSONATION_LEVEL  ImpersonationLevel;
+  PACCESS_TOKEN  PrimaryToken;
+  PVOID  ProcessAuditId;
+} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
+
+typedef struct _ACCESS_STATE {
+  LUID  OperationID;
+  BOOLEAN  SecurityEvaluated;
+  BOOLEAN  GenerateAudit;
+  BOOLEAN  GenerateOnClose;
+  BOOLEAN  PrivilegesAllocated;
+  ULONG  Flags;
+  ACCESS_MASK  RemainingDesiredAccess;
+  ACCESS_MASK  PreviouslyGrantedAccess;
+  ACCESS_MASK  OriginalDesiredAccess;
+  SECURITY_SUBJECT_CONTEXT  SubjectSecurityContext;
+  PSECURITY_DESCRIPTOR  SecurityDescriptor;
+  PVOID  AuxData;
+  union {
+    INITIAL_PRIVILEGE_SET  InitialPrivilegeSet;
+    PRIVILEGE_SET  PrivilegeSet;
+  } Privileges;
+
+  BOOLEAN  AuditPrivileges;
+  UNICODE_STRING  ObjectName;
+  UNICODE_STRING  ObjectTypeName;
+} ACCESS_STATE, *PACCESS_STATE;
+
+typedef struct _IO_SECURITY_CONTEXT {
+  PSECURITY_QUALITY_OF_SERVICE  SecurityQos;
+  PACCESS_STATE  AccessState;
+  ACCESS_MASK  DesiredAccess;
+  ULONG  FullCreateOptions;
+} IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
+
+typedef struct _DEVICE_CAPABILITIES {
+  USHORT  Size;
+  USHORT  Version;
+  ULONG  DeviceD1 : 1;
+  ULONG  DeviceD2 : 1;
+  ULONG  LockSupported : 1;
+  ULONG  EjectSupported : 1;
+  ULONG  Removable : 1;
+  ULONG  DockDevice : 1;
+  ULONG  UniqueID : 1;
+  ULONG  SilentInstall : 1;
+  ULONG  RawDeviceOK : 1;
+  ULONG  SurpriseRemovalOK : 1;
+  ULONG  WakeFromD0 : 1;
+  ULONG  WakeFromD1 : 1;
+  ULONG  WakeFromD2 : 1;
+  ULONG  WakeFromD3 : 1;
+  ULONG  HardwareDisabled : 1;
+  ULONG  NonDynamic : 1;
+  ULONG  WarmEjectSupported : 1;
+  ULONG  NoDisplayInUI : 1;
+  ULONG  Reserved : 14;
+  ULONG  Address;
+  ULONG  UINumber;
+  DEVICE_POWER_STATE  DeviceState[PowerSystemMaximum];
+  SYSTEM_POWER_STATE  SystemWake;
+  DEVICE_POWER_STATE  DeviceWake;
+  ULONG  D1Latency;
+  ULONG  D2Latency;
+  ULONG  D3Latency;
+} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
+
+typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
+  USHORT Version;
+  USHORT Size;
+  GUID Event;
+  GUID InterfaceClassGuid;
+  PUNICODE_STRING SymbolicLinkName;
+} DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
+
+typedef enum _INTERFACE_TYPE {
+  InterfaceTypeUndefined = -1,
+  Internal,
+  Isa,
+  Eisa,
+  MicroChannel,
+  TurboChannel,
+  PCIBus,
+  VMEBus,
+  NuBus,
+  PCMCIABus,
+  CBus,
+  MPIBus,
+  MPSABus,
+  ProcessorInternal,
+  InternalPowerBus,
+  PNPISABus,
+  PNPBus,
+  MaximumInterfaceType
+} INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
+
+#define IO_RESOURCE_PREFERRED             0x01
+#define IO_RESOURCE_DEFAULT               0x02
+#define IO_RESOURCE_ALTERNATIVE           0x08
+
+typedef struct _IO_RESOURCE_DESCRIPTOR {
+  UCHAR  Option;
+  UCHAR  Type;
+  UCHAR  ShareDisposition;
+  UCHAR  Spare1;
+  USHORT  Flags;
+  USHORT  Spare2;
+  union {
+    struct {
+      ULONG  Length;
+      ULONG  Alignment;
+      PHYSICAL_ADDRESS  MinimumAddress;
+      PHYSICAL_ADDRESS  MaximumAddress;
+    } Port;
+    struct {
+      ULONG  Length;
+      ULONG  Alignment;
+      PHYSICAL_ADDRESS  MinimumAddress;
+      PHYSICAL_ADDRESS  MaximumAddress;
+    } Memory;
+    struct {
+      ULONG  MinimumVector;
+      ULONG  MaximumVector;
+    } Interrupt;
+    struct {
+      ULONG  MinimumChannel;
+      ULONG  MaximumChannel;
+    } Dma;
+    struct {
+      ULONG  Length;
+      ULONG  Alignment;
+      PHYSICAL_ADDRESS  MinimumAddress;
+      PHYSICAL_ADDRESS  MaximumAddress;
+    } Generic;
+    struct {
+      ULONG  Data[3];
+    } DevicePrivate;
+    struct {
+      ULONG  Length;
+      ULONG  MinBusNumber;
+      ULONG  MaxBusNumber;
+      ULONG  Reserved;
+    } BusNumber;
+    struct {
+      ULONG  Priority;
+      ULONG  Reserved1;
+      ULONG  Reserved2;
+    } ConfigData;
+  } u;
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
+
+typedef struct _IO_RESOURCE_LIST {
+  USHORT  Version;
+  USHORT  Revision;
+  ULONG  Count;
+  IO_RESOURCE_DESCRIPTOR  Descriptors[1];
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
+
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
+  ULONG  ListSize;
+  INTERFACE_TYPE  InterfaceType;
+  ULONG  BusNumber;
+  ULONG  SlotNumber;
+  ULONG  Reserved[3];
+  ULONG  AlternativeLists;
+  IO_RESOURCE_LIST  List[1];
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
+
+typedef enum _BUS_QUERY_ID_TYPE {
+  BusQueryDeviceID,
+  BusQueryHardwareIDs,
+  BusQueryCompatibleIDs,
+  BusQueryInstanceID,
+  BusQueryDeviceSerialNumber
+} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
+
+typedef enum {
+  DevicePropertyDeviceDescription,
+  DevicePropertyHardwareID,
+  DevicePropertyCompatibleIDs,
+  DevicePropertyBootConfiguration,
+  DevicePropertyBootConfigurationTranslated,
+  DevicePropertyClassName,
+  DevicePropertyClassGuid,
+  DevicePropertyDriverKeyName,
+  DevicePropertyManufacturer,
+  DevicePropertyFriendlyName,
+  DevicePropertyLocationInformation,
+  DevicePropertyPhysicalDeviceObjectName,
+  DevicePropertyBusTypeGuid,
+  DevicePropertyLegacyBusType,
+  DevicePropertyBusNumber,
+  DevicePropertyEnumeratorName,
+  DevicePropertyAddress,
+  DevicePropertyUINumber,
+  DevicePropertyInstallState,
+  DevicePropertyRemovalPolicy
+} DEVICE_REGISTRY_PROPERTY;
+
+typedef enum _DEVICE_TEXT_TYPE {
+  DeviceTextDescription,
+  DeviceTextLocationInformation
+} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
+
+typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
+  DeviceUsageTypeUndefined,
+  DeviceUsageTypePaging,
+  DeviceUsageTypeHibernation,
+  DeviceUsageTypeDumpFile
+} DEVICE_USAGE_NOTIFICATION_TYPE;
+
+typedef struct _POWER_SEQUENCE {
+  ULONG  SequenceD1;
+  ULONG  SequenceD2;
+  ULONG  SequenceD3;
+} POWER_SEQUENCE, *PPOWER_SEQUENCE;
+
+typedef enum _POWER_STATE_TYPE {
+  SystemPowerState,
+  DevicePowerState
+} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+
+typedef union _POWER_STATE {
+  SYSTEM_POWER_STATE  SystemState;
+  DEVICE_POWER_STATE  DeviceState;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+  UCHAR Type;
+  UCHAR ShareDisposition;
+  USHORT Flags;
+  union {
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Generic;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Port;
+    struct {
+      ULONG Level;
+      ULONG Vector;
+      ULONG Affinity;
+    } Interrupt;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Memory;
+    struct {
+      ULONG Channel;
+      ULONG Port;
+      ULONG Reserved1;
+    } Dma;
+    struct {
+      ULONG Data[3];
+    } DevicePrivate;
+    struct {
+      ULONG Start;
+      ULONG Length;
+      ULONG Reserved;
+    } BusNumber;
+    struct {
+      ULONG DataSize;
+      ULONG Reserved1;
+      ULONG Reserved2;
+    } DeviceSpecificData;
+  } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_PARTIAL_RESOURCE_LIST {
+  USHORT  Version;
+  USHORT  Revision;
+  ULONG  Count;
+  CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
+
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
+  INTERFACE_TYPE  InterfaceType;
+  ULONG  BusNumber;
+  CM_PARTIAL_RESOURCE_LIST  PartialResourceList;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST {
+  ULONG  Count;
+  CM_FULL_RESOURCE_DESCRIPTOR  List[1];
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+
+typedef NTSTATUS (WINAPI *PIO_COMPLETION_ROUTINE)(
+  IN struct _DEVICE_OBJECT  *DeviceObject,
+  IN struct _IRP  *Irp,
+  IN PVOID  Context);
+
+#define SL_PENDING_RETURNED             0x01
+#define SL_INVOKE_ON_CANCEL             0x20
+#define SL_INVOKE_ON_SUCCESS            0x40
+#define SL_INVOKE_ON_ERROR              0x80
+
+#include <pshpack1.h>
+typedef struct _IO_STACK_LOCATION {
+  UCHAR  MajorFunction;
+  UCHAR  MinorFunction;
+  UCHAR  Flags;
+  UCHAR  Control;
+  union {
+    struct {
+      PIO_SECURITY_CONTEXT  SecurityContext;
+      ULONG  Options;
+      USHORT POINTER_ALIGNMENT  FileAttributes;
+      USHORT  ShareAccess;
+      ULONG POINTER_ALIGNMENT  EaLength;
+    } Create;
+    struct {
+      ULONG  Length;
+      ULONG POINTER_ALIGNMENT  Key;
+      LARGE_INTEGER  ByteOffset;
+    } Read;
+    struct {
+      ULONG  Length;
+      ULONG POINTER_ALIGNMENT  Key;
+      LARGE_INTEGER  ByteOffset;
+    } Write;
+    struct {
+      ULONG  Length;
+      FILE_INFORMATION_CLASS POINTER_ALIGNMENT  FileInformationClass;
+    } QueryFile;
+    struct {
+      ULONG  Length;
+      FILE_INFORMATION_CLASS POINTER_ALIGNMENT  FileInformationClass;
+      PFILE_OBJECT  FileObject;
+      union {
+        struct {
+          BOOLEAN  ReplaceIfExists;
+          BOOLEAN  AdvanceOnly;
+        } DUMMYSTRUCTNAME;
+        ULONG  ClusterCount;
+        HANDLE  DeleteHandle;
+      } DUMMYUNIONNAME;
+    } SetFile;
+    struct {
+      ULONG  Length;
+      FS_INFORMATION_CLASS POINTER_ALIGNMENT  FsInformationClass;
+    } QueryVolume;
+    struct {
+      ULONG  OutputBufferLength;
+      ULONG POINTER_ALIGNMENT  InputBufferLength;
+      ULONG POINTER_ALIGNMENT  IoControlCode;
+      PVOID  Type3InputBuffer;
+    } DeviceIoControl;
+    struct {
+      SECURITY_INFORMATION  SecurityInformation;
+      ULONG POINTER_ALIGNMENT  Length;
+    } QuerySecurity;
+    struct {
+      SECURITY_INFORMATION  SecurityInformation;
+      PSECURITY_DESCRIPTOR  SecurityDescriptor;
+    } SetSecurity;
+    struct {
+      PVPB  Vpb;
+      PDEVICE_OBJECT  DeviceObject;
+    } MountVolume;
+    struct {
+      PVPB  Vpb;
+      PDEVICE_OBJECT  DeviceObject;
+    } VerifyVolume;
+    struct {
+      struct _SCSI_REQUEST_BLOCK  *Srb;
+    } Scsi;
+    struct {
+      DEVICE_RELATION_TYPE  Type;
+    } QueryDeviceRelations;
+    struct {
+      const GUID  *InterfaceType;
+      USHORT  Size;
+      USHORT  Version;
+      PINTERFACE  Interface;
+      PVOID  InterfaceSpecificData;
+    } QueryInterface;
+    struct {
+      PDEVICE_CAPABILITIES  Capabilities;
+    } DeviceCapabilities;
+    struct {
+      PIO_RESOURCE_REQUIREMENTS_LIST  IoResourceRequirementList;
+    } FilterResourceRequirements;
+    struct {
+      ULONG  WhichSpace;
+      PVOID  Buffer;
+      ULONG  Offset;
+      ULONG POINTER_ALIGNMENT  Length;
+    } ReadWriteConfig;
+    struct {
+      BOOLEAN  Lock;
+    } SetLock;
+    struct {
+      BUS_QUERY_ID_TYPE  IdType;
+    } QueryId;
+    struct {
+      DEVICE_TEXT_TYPE  DeviceTextType;
+      LCID POINTER_ALIGNMENT  LocaleId;
+    } QueryDeviceText;
+    struct {
+      BOOLEAN  InPath;
+      BOOLEAN  Reserved[3];
+      DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT  Type;
+    } UsageNotification;
+    struct {
+      SYSTEM_POWER_STATE  PowerState;
+    } WaitWake;
+    struct {
+      PPOWER_SEQUENCE  PowerSequence;
+    } PowerSequence;
+    struct {
+      ULONG  SystemContext;
+      POWER_STATE_TYPE POINTER_ALIGNMENT  Type;
+      POWER_STATE POINTER_ALIGNMENT  State;
+      POWER_ACTION POINTER_ALIGNMENT  ShutdownType;
+    } Power;
+    struct {
+      PCM_RESOURCE_LIST  AllocatedResources;
+      PCM_RESOURCE_LIST  AllocatedResourcesTranslated;
+    } StartDevice;
+    struct {
+      ULONG_PTR  ProviderId;
+      PVOID  DataPath;
+      ULONG  BufferSize;
+      PVOID  Buffer;
+    } WMI;
+    struct {
+      PVOID  Argument1;
+      PVOID  Argument2;
+      PVOID  Argument3;
+      PVOID  Argument4;
+    } Others;
+  } Parameters;
+  PDEVICE_OBJECT  DeviceObject;
+  PFILE_OBJECT  FileObject;
+  PIO_COMPLETION_ROUTINE  CompletionRoutine;
+  PVOID  Context;
+} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+#include <poppack.h>
+
+/* MDL definitions */
+
+#define MDL_MAPPED_TO_SYSTEM_VA     0x0001
+#define MDL_PAGES_LOCKED            0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+#define MDL_ALLOCATED_FIXED_SIZE    0x0008
+#define MDL_PARTIAL                 0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+#define MDL_IO_PAGE_READ            0x0040
+#define MDL_WRITE_OPERATION         0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+#define MDL_FREE_EXTRA_PTES         0x0200
+#define MDL_DESCRIBES_AWE           0x0400
+#define MDL_IO_SPACE                0x0800
+#define MDL_NETWORK_HEADER          0x1000
+#define MDL_MAPPING_CAN_FAIL        0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED  0x4000
+#define MDL_INTERNAL                0x8000
+
+#define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA     | \
+                           MDL_PAGES_LOCKED            | \
+                           MDL_SOURCE_IS_NONPAGED_POOL | \
+                           MDL_PARTIAL_HAS_BEEN_MAPPED | \
+                           MDL_PARENT_MAPPED_SYSTEM_VA | \
+                           MDL_SYSTEM_VA               | \
+                           MDL_IO_SPACE )
+
+typedef struct _MDL {
+  struct _MDL  *Next;
+  CSHORT  Size;
+  CSHORT  MdlFlags;
+  struct _EPROCESS  *Process;
+  PVOID  MappedSystemVa;
+  PVOID  StartVa;
+  ULONG  ByteCount;
+  ULONG  ByteOffset;
+} MDL, *PMDL;
+
+typedef MDL *PMDLX;
+
+typedef struct _KTIMER {
+    DISPATCHER_HEADER Header;
+    ULARGE_INTEGER DueTime;
+    LIST_ENTRY TimerListEntry;
+    struct _KDPC *Dpc;
+    LONG Period;
+} KTIMER, *PKTIMER;
+
+typedef struct _KSYSTEM_TIME {
+    ULONG LowPart;
+    LONG High1Time;
+    LONG High2Time;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef enum _NT_PRODUCT_TYPE {
+    NtProductWinNt = 1,
+    NtProductLanManNt,
+    NtProductServer
+} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
+
+#define PROCESSOR_FEATURE_MAX 64
+
+typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
+{
+   StandardDesign,
+   NEC98x86,
+   EndAlternatives
+} ALTERNATIVE_ARCHITECTURE_TYPE;
+
+#define NX_SUPPORT_POLICY_ALWAYSOFF     0
+#define NX_SUPPORT_POLICY_ALWAYSON      1
+#define NX_SUPPORT_POLICY_OPTIN         2
+#define NX_SUPPORT_POLICY_OPTOUT        3
+
+#define MAX_WOW64_SHARED_ENTRIES 16
+
+typedef struct _KUSER_SHARED_DATA {
+    ULONG TickCountLowDeprecated;
+    ULONG TickCountMultiplier;
+    volatile KSYSTEM_TIME InterruptTime;
+    volatile KSYSTEM_TIME SystemTime;
+    volatile KSYSTEM_TIME TimeZoneBias;
+    USHORT ImageNumberLow;
+    USHORT ImageNumberHigh;
+    WCHAR NtSystemRoot[260];
+    ULONG MaxStackTraceDepth;
+    ULONG CryptoExponent;
+    ULONG TimeZoneId;
+    ULONG LargePageMinimum;
+    ULONG Reserved2[7];
+    NT_PRODUCT_TYPE NtProductType;
+    BOOLEAN ProductTypeIsValid;
+    ULONG NtMajorVersion;
+    ULONG NtMinorVersion;
+    BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
+    ULONG Reserved1;
+    ULONG Reserved3;
+    volatile ULONG TimeSlip;
+    ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
+    LARGE_INTEGER SystemExpirationDate;
+    ULONG SuiteMask;
+    BOOLEAN KdDebuggerEnabled;
+    UCHAR NXSupportPolicy;
+    volatile ULONG ActiveConsoleId;
+    volatile ULONG DismountCount;
+    ULONG ComPlusPackage;
+    ULONG LastSystemRITEventTickCount;
+    ULONG NumberOfPhysicalPages;
+    BOOLEAN SafeBootMode;
+    ULONG TraceLogging;
+    ULONGLONG TestRetInstruction;
+    ULONG SystemCall;
+    ULONG SystemCallReturn;
+    ULONGLONG SystemCallPad[3];
+    union {
+        volatile KSYSTEM_TIME TickCount;
+        volatile ULONG64 TickCountQuad;
+    } DUMMYUNIONNAME;
+    ULONG Cookie;
+    ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
+} KSHARED_USER_DATA, *PKSHARED_USER_DATA;
+
+typedef enum _MEMORY_CACHING_TYPE {
+    MmNonCached = 0,
+    MmCached = 1,
+    MmWriteCombined = 2,
+    MmHardwareCoherentCached = 3,
+    MmNonCachedUnordered = 4,
+    MmUSWCCached = 5,
+    MmMaximumCacheType = 6
+} MEMORY_CACHING_TYPE;
+
+typedef enum _MM_PAGE_PRIORITY {
+    LowPagePriority,
+    NormalPagePriority = 16,
+    HighPagePriority = 32
+} MM_PAGE_PRIORITY;
+
+typedef enum _MM_SYSTEM_SIZE
+{
+    MmSmallSystem,
+    MmMediumSystem,
+    MmLargeSystem
+} MM_SYSTEMSIZE;
+
+typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
+    BOOLEAN Removed;
+    BOOLEAN Reserved[3];
+    LONG IoCount;
+    KEVENT RemoveEvent;
+} IO_REMOVE_LOCK_COMMON_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK *PIO_REMOVE_LOCK_TRACKING_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
+    LONG Signature;
+    LONG HighWatermark;
+    LONGLONG MaxLockedTicks;
+    LONG AllocateTag;
+    LIST_ENTRY LockList;
+    KSPIN_LOCK Spin;
+    LONG LowMemoryCount;
+    ULONG Reserved1[4];
+    PVOID Reserved2;
+    PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
+} IO_REMOVE_LOCK_DBG_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK {
+    IO_REMOVE_LOCK_COMMON_BLOCK Common;
+    IO_REMOVE_LOCK_DBG_BLOCK Dbg;
+} IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
+
+typedef enum  {
+    IoReadAccess,
+    IoWriteAccess,
+    IoModifyAccess
+} LOCK_OPERATION;
+
+typedef struct _CALLBACK_OBJECT
+{
+    ULONG Signature;
+    KSPIN_LOCK Lock;
+    LIST_ENTRY RegisteredCallbacks;
+    BOOLEAN AllowMultipleCallbacks;
+    UCHAR reserved[3];
+} CALLBACK_OBJECT, *PCALLBACK_OBJECT;
+
+NTSTATUS WINAPI ObCloseHandle(IN HANDLE handle);
+
+#ifdef NONAMELESSUNION
+# ifdef NONAMELESSSTRUCT
+#  define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation)
+#  define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation - 1)
+# else
+#  define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.u2.CurrentStackLocation)
+#  define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.u2.CurrentStackLocation - 1)
+# endif
+#else
+# ifdef NONAMELESSSTRUCT
+#  define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.CurrentStackLocation)
+#  define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.CurrentStackLocation - 1)
+# else
+#  define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.CurrentStackLocation)
+#  define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
+# endif
+#endif
+
+#define KernelMode 0
+#define UserMode   1
+
+/* directory object access rights */
+#define DIRECTORY_QUERY                 0x0001
+#define DIRECTORY_TRAVERSE              0x0002
+#define DIRECTORY_CREATE_OBJECT         0x0004
+#define DIRECTORY_CREATE_SUBDIRECTORY   0x0008
+#define DIRECTORY_ALL_ACCESS            (STANDARD_RIGHTS_REQUIRED | 0xF)
+
+/* symbolic link access rights */
+#define SYMBOLIC_LINK_QUERY             0x0001
+#define SYMBOLIC_LINK_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+PVOID     WINAPI ExAllocatePool(POOL_TYPE,SIZE_T);
+PVOID     WINAPI ExAllocatePoolWithQuota(POOL_TYPE,SIZE_T);
+PVOID     WINAPI ExAllocatePoolWithTag(POOL_TYPE,SIZE_T,ULONG);
+PVOID     WINAPI ExAllocatePoolWithQuotaTag(POOL_TYPE,SIZE_T,ULONG);
+void      WINAPI ExFreePool(PVOID);
+void      WINAPI ExFreePoolWithTag(PVOID,ULONG);
+
+NTSTATUS  WINAPI IoAllocateDriverObjectExtension(PDRIVER_OBJECT,PVOID,ULONG,PVOID*);
+PVOID     WINAPI IoAllocateErrorLogEntry(PVOID,UCHAR);
+PIRP      WINAPI IoAllocateIrp(CCHAR,BOOLEAN);
+NTSTATUS  WINAPI IoCallDriver(DEVICE_OBJECT*,IRP*);
+VOID      WINAPI IoCompleteRequest(IRP*,UCHAR);
+NTSTATUS  WINAPI IoCreateDevice(DRIVER_OBJECT*,ULONG,UNICODE_STRING*,DEVICE_TYPE,ULONG,BOOLEAN,DEVICE_OBJECT**);
+NTSTATUS  WINAPI IoCreateDriver(UNICODE_STRING*,PDRIVER_INITIALIZE);
+NTSTATUS  WINAPI IoCreateSymbolicLink(UNICODE_STRING*,UNICODE_STRING*);
+void      WINAPI IoDeleteDevice(DEVICE_OBJECT*);
+void      WINAPI IoDeleteDriver(DRIVER_OBJECT*);
+NTSTATUS  WINAPI IoDeleteSymbolicLink(UNICODE_STRING*);
+void      WINAPI IoFreeIrp(IRP*);
+PEPROCESS WINAPI IoGetCurrentProcess(void);
+NTSTATUS  WINAPI IoGetDeviceInterfaces(const GUID*,PDEVICE_OBJECT,ULONG,PWSTR*);
+NTSTATUS  WINAPI IoGetDeviceObjectPointer(UNICODE_STRING*,ACCESS_MASK,PFILE_OBJECT*,PDEVICE_OBJECT*);
+NTSTATUS  WINAPI IoGetDeviceProperty(PDEVICE_OBJECT,DEVICE_REGISTRY_PROPERTY,ULONG,PVOID,PULONG);
+PVOID     WINAPI IoGetDriverObjectExtension(PDRIVER_OBJECT,PVOID);
+PDEVICE_OBJECT WINAPI IoGetRelatedDeviceObject(PFILE_OBJECT);
+void      WINAPI IoInitializeIrp(IRP*,USHORT,CCHAR);
+VOID      WINAPI IoInitializeRemoveLockEx(PIO_REMOVE_LOCK,ULONG,ULONG,ULONG,ULONG);
+NTSTATUS  WINAPI IoWMIRegistrationControl(PDEVICE_OBJECT,ULONG);
+
+PKTHREAD  WINAPI KeGetCurrentThread(void);
+void      WINAPI KeQuerySystemTime(LARGE_INTEGER*);
+void      WINAPI KeQueryTickCount(LARGE_INTEGER*);
+ULONG     WINAPI KeQueryTimeIncrement(void);
+LONG      WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN);
+LONG      WINAPI KeResetEvent(PRKEVENT);
+LONG      WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN);
+KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);
+
+PVOID     WINAPI MmAllocateContiguousMemory(SIZE_T,PHYSICAL_ADDRESS);
+PVOID     WINAPI MmAllocateNonCachedMemory(SIZE_T);
+PMDL      WINAPI MmAllocatePagesForMdl(PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,SIZE_T);
+void      WINAPI MmFreeNonCachedMemory(PVOID,SIZE_T);
+MM_SYSTEMSIZE WINAPI MmQuerySystemSize(void);
+
+NTSTATUS  WINAPI ObReferenceObjectByHandle(HANDLE,ACCESS_MASK,POBJECT_TYPE,KPROCESSOR_MODE,PVOID*,POBJECT_HANDLE_INFORMATION);
+
+POWER_STATE WINAPI PoSetPowerState(PDEVICE_OBJECT,POWER_STATE_TYPE,POWER_STATE);
+NTSTATUS  WINAPI PsCreateSystemThread(PHANDLE,ULONG,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PKSTART_ROUTINE,PVOID);
+#define          PsGetCurrentProcess() IoGetCurrentProcess()
+#define          PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
+HANDLE    WINAPI PsGetCurrentProcessId(void);
+HANDLE    WINAPI PsGetCurrentThreadId(void);
+BOOLEAN   WINAPI PsGetVersion(ULONG*,ULONG*,ULONG*,UNICODE_STRING*);
+NTSTATUS  WINAPI PsTerminateSystemThread(NTSTATUS);
+
+NTSTATUS  WINAPI ZwAddBootEntry(PUNICODE_STRING,PUNICODE_STRING);
+NTSTATUS  WINAPI ZwAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);
+NTSTATUS  WINAPI ZwAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+NTSTATUS  WINAPI ZwAlertThread(HANDLE ThreadHandle);
+NTSTATUS  WINAPI ZwAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
+NTSTATUS  WINAPI ZwCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
+NTSTATUS  WINAPI ZwCancelTimer(HANDLE, BOOLEAN*);
+NTSTATUS  WINAPI ZwClearEvent(HANDLE);
+NTSTATUS  WINAPI ZwClose(HANDLE);
+NTSTATUS  WINAPI ZwCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
+NTSTATUS  WINAPI ZwConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSTATUS  WINAPI ZwCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI ZwCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
+NTSTATUS  WINAPI ZwCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
+NTSTATUS  WINAPI ZwCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSTATUS  WINAPI ZwCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
+NTSTATUS  WINAPI ZwCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
+NTSTATUS  WINAPI ZwCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
+NTSTATUS  WINAPI ZwDeleteAtom(RTL_ATOM);
+NTSTATUS  WINAPI ZwDeleteFile(POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI ZwDeleteKey(HANDLE);
+NTSTATUS  WINAPI ZwDeleteValueKey(HANDLE,const UNICODE_STRING *);
+NTSTATUS  WINAPI ZwDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS  WINAPI ZwDisplayString(PUNICODE_STRING);
+NTSTATUS  WINAPI ZwDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
+NTSTATUS  WINAPI ZwDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+NTSTATUS  WINAPI ZwEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI ZwEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI ZwFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+NTSTATUS  WINAPI ZwFlushKey(HANDLE);
+NTSTATUS  WINAPI ZwFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);
+NTSTATUS  WINAPI ZwFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSTATUS  WINAPI ZwFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS  WINAPI ZwInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
+NTSTATUS  WINAPI ZwLoadDriver(const UNICODE_STRING *);
+NTSTATUS  WINAPI ZwLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
+NTSTATUS  WINAPI ZwLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSTATUS  WINAPI ZwMakeTemporaryObject(HANDLE);
+NTSTATUS  WINAPI ZwMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
+NTSTATUS  WINAPI ZwNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
+NTSTATUS  WINAPI ZwOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI ZwOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSTATUS  WINAPI ZwOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
+NTSTATUS  WINAPI ZwOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSTATUS  WINAPI ZwOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSTATUS  WINAPI ZwOpenProcessToken(HANDLE,DWORD,HANDLE *);
+NTSTATUS  WINAPI ZwOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSTATUS  WINAPI ZwOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI ZwOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSTATUS  WINAPI ZwOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
+NTSTATUS  WINAPI ZwOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
+NTSTATUS  WINAPI ZwPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS  WINAPI ZwPulseEvent(HANDLE,PULONG);
+NTSTATUS  WINAPI ZwQueryDefaultLocale(BOOLEAN,LCID*);
+NTSTATUS  WINAPI ZwQueryDefaultUILanguage(LANGID*);
+NTSTATUS  WINAPI ZwQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
+NTSTATUS  WINAPI ZwQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
+NTSTATUS  WINAPI ZwQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
+NTSTATUS  WINAPI ZwQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
+NTSTATUS  WINAPI ZwQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
+NTSTATUS  WINAPI ZwQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI ZwQueryInformationToken(HANDLE,DWORD,PVOID,DWORD,LPDWORD);
+NTSTATUS  WINAPI ZwQueryInstallUILanguage(LANGID*);
+NTSTATUS  WINAPI ZwQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI ZwQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
+NTSTATUS  WINAPI ZwQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
+NTSTATUS  WINAPI ZwQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI ZwQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
+NTSTATUS  WINAPI ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI ZwQueryTimerResolution(PULONG,PULONG,PULONG);
+NTSTATUS  WINAPI ZwQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI ZwQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSTATUS  WINAPI ZwReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
+NTSTATUS  WINAPI ZwReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI ZwRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSTATUS  WINAPI ZwResetEvent(HANDLE,PULONG);
+NTSTATUS  WINAPI ZwRestoreKey(HANDLE,HANDLE,ULONG);
+NTSTATUS  WINAPI ZwSaveKey(HANDLE,HANDLE);
+NTSTATUS  WINAPI ZwSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSTATUS  WINAPI ZwSetDefaultLocale(BOOLEAN,LCID);
+NTSTATUS  WINAPI ZwSetDefaultUILanguage(LANGID);
+NTSTATUS  WINAPI ZwSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
+NTSTATUS  WINAPI ZwSetEvent(HANDLE,PULONG);
+NTSTATUS  WINAPI ZwSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
+NTSTATUS  WINAPI ZwSetInformationKey(HANDLE,const int,PVOID,ULONG);
+NTSTATUS  WINAPI ZwSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
+NTSTATUS  WINAPI ZwSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
+NTSTATUS  WINAPI ZwSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
+NTSTATUS  WINAPI ZwSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
+NTSTATUS  WINAPI ZwSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+NTSTATUS  WINAPI ZwSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
+NTSTATUS  WINAPI ZwSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
+NTSTATUS  WINAPI ZwSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
+NTSTATUS  WINAPI ZwSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
+NTSTATUS  WINAPI ZwSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSTATUS  WINAPI ZwSuspendThread(HANDLE,PULONG);
+NTSTATUS  WINAPI ZwTerminateProcess(HANDLE,LONG);
+NTSTATUS  WINAPI ZwUnloadDriver(const UNICODE_STRING *);
+NTSTATUS  WINAPI ZwUnloadKey(HANDLE);
+NTSTATUS  WINAPI ZwUnmapViewOfSection(HANDLE,PVOID);
+NTSTATUS  WINAPI ZwWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
+NTSTATUS  WINAPI ZwWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
+NTSTATUS  WINAPI ZwWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
+NTSTATUS  WINAPI ZwYieldExecution(void);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h
new file mode 100644
index 0000000..71d4797
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h
@@ -0,0 +1,59 @@
+/*
+ *  Header for the Device Driver Interface - User Interface library
+ *
+ *  Copyright 2007 Marcel Partap
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDDIUI_H
+#define __WINE_WINDDIUI_H
+
+#include <ddk/compstui.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DRIVER_EVENT_INITIALIZE 1
+#define DRIVER_EVENT_DELETE 2
+
+#define PRINTER_EVENT_ADD_CONNECTION 1
+#define PRINTER_EVENT_DELETE_CONNECTION 2
+#define PRINTER_EVENT_INITIALIZE 3
+#define PRINTER_EVENT_DELETE 4
+#define PRINTER_EVENT_CACHE_REFRESH 5
+#define PRINTER_EVENT_CACHE_DELETE 6
+#define PRINTER_EVENT_ATTRIBUTES_CHANGED 7
+
+#define PRINTER_EVENT_FLAG_NO_UI 1
+
+BOOL WINAPI DrvDriverEvent(DWORD, DWORD, LPBYTE, LPARAM);
+BOOL WINAPI DrvPrinterEvent(LPWSTR, INT, DWORD, LPARAM);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_WINDDIUI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h
new file mode 100644
index 0000000..4af7d1d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h
@@ -0,0 +1,436 @@
+/*
+ * Definitions for print provider, monitor, processor and spooler
+ *
+ * Copyright 2005 Detlef Riekenberg
+ *
+ * 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
+ *
+ *
+ * "providor" is not a spelling error in this file. It's the real name.
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINSPLP_
+#define _WINSPLP_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DEFINES */
+
+#define PRINTER_NOTIFY_STATUS_ENDPOINT  1
+#define PRINTER_NOTIFY_STATUS_POLL      2
+#define PRINTER_NOTIFY_STATUS_INFO      4
+
+
+#define ROUTER_UNKNOWN      0
+#define ROUTER_SUCCESS      1
+#define ROUTER_STOP_ROUTING 2
+
+/*
+ * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
+ */
+
+
+/* TYPES */
+
+typedef struct _MONITOR {
+ BOOL  (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+                DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL  (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
+ BOOL  (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
+                PHANDLE pHandle, struct _MONITOR *pMonitor);
+ BOOL  (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
+                DWORD JobId, DWORD Level, LPBYTE pDocInfo);
+ BOOL  (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
+                LPDWORD pcbWritten);
+ BOOL  (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
+                LPDWORD pcbRead);
+ BOOL  (WINAPI *pfnEndDocPort)(HANDLE hPort);
+ BOOL  (WINAPI *pfnClosePort)(HANDLE hPort);
+ BOOL  (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+ BOOL  (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
+                LPWSTR lpMonitorName);
+ BOOL  (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL  (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL  (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
+                LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
+                LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
+ BOOL  (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
+                DWORD reserved);
+ BOOL  (WINAPI *pfnXcvOpenPort)(LPCWSTR pszObject, ACCESS_MASK GrantedAccess, PHANDLE phXcv);
+ DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
+                PBYTE pInputData, DWORD cbInputData,
+                PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
+ BOOL  (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
+} MONITOR, *LPMONITOR;
+
+typedef struct _MONITOR2 {
+ DWORD cbSize;
+ BOOL  (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+                DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL  (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
+ BOOL  (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
+                PHANDLE pHandle, struct _MONITOR2 *pMonitor2);
+ BOOL  (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
+                DWORD JobId, DWORD Level, LPBYTE pDocInfo);
+ BOOL  (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
+                LPDWORD pcbWritten);
+ BOOL  (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
+                LPDWORD pcbRead);
+ BOOL  (WINAPI *pfnEndDocPort)(HANDLE hPort);
+ BOOL  (WINAPI *pfnClosePort)(HANDLE hPort);
+ BOOL  (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+ BOOL  (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
+                LPWSTR lpMonitorName);
+ BOOL  (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL  (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL  (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
+                LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
+                LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
+ BOOL  (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
+                DWORD reserved);
+ BOOL  (WINAPI *pfnXcvOpenPort)(HANDLE hMonitor, LPCWSTR pszObject,
+                ACCESS_MASK GrantedAccess, PHANDLE phXcv);
+ DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
+                PBYTE pInputData, DWORD cbInputData,
+                PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
+ BOOL  (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
+ /* Additions from MONITOR to MONITOR2 */
+ VOID  (WINAPI *pfnShutdown)(HANDLE hMonitor);
+ DWORD (WINAPI *pfnSendRecvBidiDataFromPort)(HANDLE hPort, DWORD dwAccessBit,
+                LPCWSTR pAction, PBIDI_REQUEST_CONTAINER pReqData,
+                PBIDI_RESPONSE_CONTAINER *ppResData);
+} MONITOR2, *LPMONITOR2, *PMONITOR2;
+
+typedef struct _MONITOREX {
+ DWORD      dwMonitorSize;
+ MONITOR    Monitor;
+} MONITOREX, *LPMONITOREX;
+
+typedef struct _MONITORREG {
+ DWORD cbSize;
+ LONG  (WINAPI *fpCreateKey)(HANDLE hcKey, LPCWSTR pszSubKey, DWORD dwOptions,
+                REGSAM samDesired, PSECURITY_ATTRIBUTES pSecurityAttributes,
+                PHANDLE phckResult, PDWORD pdwDisposition, HANDLE hSpooler);
+ LONG  (WINAPI *fpOpenKey)(HANDLE hcKey, LPCWSTR pszSubKey, REGSAM samDesired,
+                PHANDLE phkResult, HANDLE hSpooler);
+ LONG  (WINAPI *fpCloseKey)(HANDLE hcKey, HANDLE hSpooler);
+ LONG  (WINAPI *fpDeleteKey)(HANDLE hcKey, LPCWSTR pszSubKey, HANDLE hSpooler);
+ LONG  (WINAPI *fpEnumKey)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszName,
+                PDWORD pcchName, PFILETIME pftLastWriteTime, HANDLE hSpooler);
+ LONG  (WINAPI *fpQueryInfoKey)(HANDLE hcKey, PDWORD pcSubKeys, PDWORD pcbKey,
+                PDWORD pcValues, PDWORD pcbValue, PDWORD pcbData,
+                PDWORD pcbSecurityDescriptor, PFILETIME pftLastWriteTime,
+                HANDLE hSpooler);
+ LONG  (WINAPI *fpSetValue)(HANDLE hcKey, LPCWSTR pszValue, DWORD dwType,
+                const BYTE* pData, DWORD cbData, HANDLE hSpooler);
+ LONG  (WINAPI *fpDeleteValue)(HANDLE hcKey, LPCWSTR pszValue, HANDLE hSpooler);
+ LONG  (WINAPI *fpEnumValue)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszValue,
+                PDWORD pcbValue, PDWORD pType, PBYTE pData, PDWORD pcbData,
+                HANDLE hSpooler);
+ LONG  (WINAPI *fpQueryValue)(HANDLE hcKey, LPCWSTR pszValue, PDWORD pType,
+                PBYTE pData, PDWORD pcbData, HANDLE hSpooler);
+} MONITORREG, *PMONITORREG;
+
+typedef struct _MONITORINIT {
+ DWORD       cbSize;
+ HANDLE      hSpooler;
+ HANDLE      hckRegistryRoot;
+ PMONITORREG pMonitorReg;
+ BOOL        bLocal;
+} MONITORINIT, *PMONITORINIT;
+
+typedef struct _MONITORUI {
+ DWORD dwMonitorUISize;
+ BOOL  (WINAPI *pfnAddPortUI)(PCWSTR pszServer, HWND hWnd,
+                PCWSTR pszPortNameIn, PWSTR *ppszPortNameOut);
+ BOOL  (WINAPI *pfnConfigurePortUI)(PCWSTR pName, HWND hWnd, PCWSTR pPortName);
+ BOOL  (WINAPI *pfnDeletePortUI)(PCWSTR pszServer, HWND hWnd, PCWSTR pszPortName);
+}MONITORUI, *PMONITORUI;
+
+typedef struct _PRINTER_NOTIFY_INIT {
+ DWORD  Size;
+ DWORD  Reserved;
+ DWORD  PollTime;
+} PRINTER_NOTIFY_INIT, *LPPRINTER_NOTIFY_INIT, *PPRINTER_NOTIFY_INIT;
+
+typedef struct _PRINTPROCESSOROPENDATA {
+ PDEVMODEW pDevMode;
+ LPWSTR    pDatatype;
+ LPWSTR    pParameters;
+ LPWSTR    pDocumentName;
+ DWORD     JobId;
+ LPWSTR    pOutputFile;
+ LPWSTR    pPrinterName;
+} PRINTPROCESSOROPENDATA, *LPPRINTPROCESSOROPENDATA, *PPRINTPROCESSOROPENDATA;
+
+
+/*
+ * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
+ */
+
+typedef struct _PRINTPROVIDOR {
+ BOOL   (WINAPI *fpOpenPrinter)(LPWSTR lpPrinterName, HANDLE *phPrinter,
+                 LPPRINTER_DEFAULTSW pDefault);
+ BOOL   (WINAPI *fpSetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
+                 LPBYTE pJob, DWORD Command);
+ BOOL   (WINAPI *fpGetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
+                 LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpEnumJobs)(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
+                 DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
+                 LPDWORD pcReturned);
+ HANDLE (WINAPI *fpAddPrinter)(LPWSTR pName, DWORD Level, LPBYTE pPrinter);
+ BOOL   (WINAPI *fpDeletePrinter)(HANDLE hPrinter);
+ BOOL   (WINAPI *fpSetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+                 DWORD Command);
+ BOOL   (WINAPI *fpGetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+                 DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpEnumPrinters)(DWORD dwType, LPWSTR lpszName, DWORD dwLevel,
+                 LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded,
+                 LPDWORD lpdwReturned);
+ BOOL   (WINAPI *fpAddPrinterDriver)(LPWSTR pName, DWORD Level,
+                 LPBYTE pDriverInfo);
+ BOOL   (WINAPI *fpEnumPrinterDrivers)(LPWSTR pName, LPWSTR pEnvironment,
+                 DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
+                 LPDWORD pcbNeeded, LPDWORD pcbReturned);
+ BOOL   (WINAPI *fpGetPrinterDriver)(HANDLE hPrinter, LPWSTR pEnvironment,
+                 DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
+                 LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpGetPrinterDriverDirectory)(LPWSTR pName, LPWSTR pEnvironment,
+                 DWORD Level, LPBYTE pDriverDirectory, DWORD cbBuf,
+                 LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpDeletePrinterDriver)(LPWSTR pName, LPWSTR pEnvironment,
+                 LPWSTR pDriverName);
+ BOOL   (WINAPI *fpAddPrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
+                 LPWSTR pPathName, LPWSTR pPrintProcessorName);
+ BOOL   (WINAPI *fpEnumPrintProcessors)(LPWSTR pName, LPWSTR pEnvironment,
+                 DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
+                 LPDWORD pcbNeeded, LPDWORD pcbReturned);
+ BOOL   (WINAPI *fpGetPrintProcessorDirectory)(LPWSTR pName, LPWSTR pEnvironment,
+                 DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
+                 LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpDeletePrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
+                 LPWSTR pPrintProcessorName);
+ BOOL   (WINAPI *fpEnumPrintProcessorDatatypes)(LPWSTR pName,
+                 LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes,
+                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned);
+ DWORD  (WINAPI *fpStartDocPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
+ BOOL   (WINAPI *fpStartPagePrinter)(HANDLE hPrinter);
+ BOOL   (WINAPI *fpWritePrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+                 LPDWORD pcWritten);
+ BOOL   (WINAPI *fpEndPagePrinter)(HANDLE hPrinter);
+ BOOL   (WINAPI *fpAbortPrinter)(HANDLE hPrinter);
+ BOOL   (WINAPI *fpReadPrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+                 LPDWORD pNoBytesRead);
+ BOOL   (WINAPI *fpEndDocPrinter)(HANDLE hPrinter);
+ BOOL   (WINAPI *fpAddJob)(HANDLE hPrinter, DWORD Level, LPBYTE pData,
+                 DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpScheduleJob)(HANDLE hPrinter, DWORD JobID);
+ DWORD  (WINAPI *fpGetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
+                 LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+ DWORD  (WINAPI *fpSetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
+                 DWORD Type, LPBYTE pData, DWORD cbData);
+ DWORD  (WINAPI *fpWaitForPrinterChange)(HANDLE hPrinter, DWORD Flags);
+ BOOL   (WINAPI *fpClosePrinter)(HANDLE phPrinter);
+ BOOL   (WINAPI *fpAddForm)(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
+ BOOL   (WINAPI *fpDeleteForm)(HANDLE hPrinter, LPWSTR pFormName);
+ BOOL   (WINAPI *fpGetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+                 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL   (WINAPI *fpSetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+                 LPBYTE pForm);
+ BOOL   (WINAPI *fpEnumForms)(HANDLE hPrinter, DWORD Level, LPBYTE pForm,
+                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL   (WINAPI *fpEnumMonitors)(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
+                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL   (WINAPI *fpEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL   (WINAPI *fpAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+ BOOL   (WINAPI *fpConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL   (WINAPI *fpDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ HANDLE (WINAPI *fpCreatePrinterIC)(HANDLE  hPrinter, LPDEVMODEW  pDevMode);
+ BOOL   (WINAPI *fpPlayGdiScriptOnPrinterIC)(HANDLE  hPrinterIC, LPBYTE pIn,
+                 DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD  ul);
+ BOOL   (WINAPI *fpDeletePrinterIC)(HANDLE hPrinterIC);
+ BOOL   (WINAPI *fpAddPrinterConnection)(LPWSTR pName);
+ BOOL   (WINAPI *fpDeletePrinterConnection)(LPWSTR pName);
+ DWORD  (WINAPI *fpPrinterMessageBox)(HANDLE hPrinter, DWORD Error, HWND hWnd,
+                 LPWSTR pText, LPWSTR pCaption, DWORD dwType);
+ BOOL   (WINAPI *fpAddMonitor)(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
+ BOOL   (WINAPI *fpDeleteMonitor)(LPWSTR pName, LPWSTR pEnvironment,
+                 LPWSTR pMonitorName);
+ BOOL   (WINAPI *fpResetPrinter)(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
+ BOOL   (WINAPI *fpGetPrinterDriverEx)(HANDLE hPrinter, LPWSTR pEnvironment,
+                 DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded,
+                 DWORD dwClientMajorVersion, DWORD dwClientMinorVersion,
+                 PDWORD pdwServerMajorVersion, PDWORD pdwServerMinorVersion);
+ HANDLE (WINAPI *fpFindFirstPrinterChangeNotification)(HANDLE hPrinter,
+                 DWORD fdwFlags, DWORD fdwOptions, LPVOID pPrinterNotifyOptions);
+ BOOL   (WINAPI *fpFindClosePrinterChangeNotification)(HANDLE hChange);
+ BOOL   (WINAPI *fpAddPortEx)(LPWSTR, DWORD, LPBYTE, LPWSTR);
+ BOOL   (WINAPI *fpShutDown)(LPVOID pvReserved);
+ BOOL   (WINAPI *fpRefreshPrinterChangeNotification)(HANDLE hPrinter,
+                 DWORD Reserved, PVOID pvReserved, PVOID pPrinterNotifyInfo);
+ BOOL   (WINAPI *fpOpenPrinterEx)(LPWSTR pPrinterName, LPHANDLE phPrinter,
+                 LPPRINTER_DEFAULTSW pDefault, LPBYTE pClientInfo, DWORD Level);
+ HANDLE (WINAPI *fpAddPrinterEx)(LPWSTR pName, DWORD Level, LPBYTE pPrinter,
+                 LPBYTE pClientInfo, DWORD ClientInfoLevel);
+ BOOL   (WINAPI *fpSetPort)(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,
+                 LPBYTE pPortInfo);
+ DWORD  (WINAPI *fpEnumPrinterData)( HANDLE hPrinter, DWORD dwIndex,
+                 LPWSTR pValueName, DWORD cbValueName, LPDWORD pcbValueName,
+                 LPDWORD pType, LPBYTE pData, DWORD cbData, LPDWORD pcbData);
+ DWORD  (WINAPI *fpDeletePrinterData)(HANDLE hPrinter, LPWSTR  pValueName);
+ DWORD  (WINAPI *fpClusterSplOpen)(LPCWSTR pszServer, LPCWSTR pszResource,
+                 PHANDLE phSpooler, LPCWSTR pszName, LPCWSTR pszAddress);
+ DWORD  (WINAPI *fpClusterSplClose)(HANDLE hSpooler);
+ DWORD  (WINAPI *fpClusterSplIsAlive)(HANDLE  hSpooler);
+ DWORD  (WINAPI *fpSetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+                 LPCWSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData);
+ DWORD  (WINAPI *fpGetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+                 LPCWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize,
+                 LPDWORD pcbNeeded);
+ DWORD  (WINAPI *fpEnumPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+                 LPBYTE pEnumValues, DWORD cbEnumValues, LPDWORD pcbEnumValues,
+                 LPDWORD pnEnumValues);
+ DWORD  (WINAPI *fpEnumPrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName,
+                 LPWSTR pSubkey, DWORD cbSubkey, LPDWORD  pcbSubkey);
+ DWORD  (WINAPI *fpDeletePrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+                 LPCWSTR pValueName);
+ DWORD  (WINAPI *fpDeletePrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName);
+ BOOL   (WINAPI *fpSeekPrinter)(HANDLE hPrinter, LARGE_INTEGER liDistanceToMove,
+                 PLARGE_INTEGER pliNewPointer, DWORD dwMoveMethod, BOOL bWrite);
+ BOOL   (WINAPI *fpDeletePrinterDriverEx)(LPWSTR pName, LPWSTR pEnvironment,
+                 LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum);
+ BOOL   (WINAPI *fpAddPerMachineConnection)(LPCWSTR pServer,
+                 LPCWSTR pPrinterName, LPCWSTR pPrintServer, LPCWSTR pProvider);
+ BOOL   (WINAPI *fpDeletePerMachineConnection)(LPCWSTR pServer,
+                 LPCWSTR pPrinterName);
+ BOOL   (WINAPI *fpEnumPerMachineConnections)(LPCWSTR pServer,
+                 LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded,
+                 LPDWORD pcReturned);
+ BOOL   (WINAPI *fpXcvData)(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
+                 DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
+                 PDWORD pcbOutputNeeded, PDWORD pdwStatus);
+ BOOL   (WINAPI *fpAddPrinterDriverEx)(LPWSTR pName, DWORD Level,
+                 LPBYTE pDriverInfo, DWORD  dwFileCopyFlags);
+ BOOL   (WINAPI *fpSplReadPrinter)(HANDLE hPrinter, LPBYTE *pBuf, DWORD cbBuf);
+ BOOL   (WINAPI *fpDriverUnloadComplete)(LPWSTR pDriverFile);
+ BOOL   (WINAPI *fpGetSpoolFileInfo)(HANDLE hPrinter, LPWSTR *pSpoolDir,
+                 LPHANDLE phFile, HANDLE hSpoolerProcess, HANDLE hAppProcess);
+ BOOL   (WINAPI *fpCommitSpoolData)(HANDLE hPrinter, DWORD cbCommit);
+ BOOL   (WINAPI *fpCloseSpoolFileHandle)(HANDLE hPrinter);
+ BOOL   (WINAPI *fpFlushPrinter)(HANDLE hPrinter, LPBYTE pBuf, DWORD cbBuf,
+                 LPDWORD pcWritten, DWORD cSleep);
+ DWORD  (WINAPI *fpSendRecvBidiData)(HANDLE hPort, LPCWSTR pAction,
+                 LPBIDI_REQUEST_CONTAINER pReqData,
+                 LPBIDI_RESPONSE_CONTAINER *ppResData);
+ BOOL   (WINAPI *fpAddDriverCatalog)(HANDLE hPrinter, DWORD dwLevel,
+                 VOID *pvDriverInfCatInfo, DWORD dwCatalogCopyFlags);
+} PRINTPROVIDOR, *LPPRINTPROVIDOR;
+
+typedef struct _SPLCLIENT_INFO_1 {
+ DWORD  dwSize;
+ LPWSTR pMachineName;
+ LPWSTR pUserName;
+ DWORD  dwBuildNum;
+ DWORD  dwMajorVersion;
+ DWORD  dwMinorVersion;
+ WORD   wProcessorArchitecture;
+} SPLCLIENT_INFO_1, *LPSPLCLIENT_INFO_1, *PSPLCLIENT_INFO_1;
+
+/* DECLARATIONS */
+
+HANDLE WINAPI CreatePrinterIC(HANDLE hPrinter, LPDEVMODEW pDevMode);
+BOOL   WINAPI PlayGdiScriptOnPrinterIC(HANDLE hPrinterIC, LPBYTE pIn,
+              DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD ul);
+BOOL   WINAPI DeletePrinterIC(HANDLE hPrinterIC);
+BOOL   WINAPI DevQueryPrint(HANDLE hPrinter, LPDEVMODEW pDevMode, DWORD *pResID);
+
+/* Security and Access */
+HANDLE WINAPI RevertToPrinterSelf(VOID);
+BOOL   WINAPI ImpersonatePrinterClient(HANDLE  hToken);
+BOOL   WINAPI OpenPrinterToken(PHANDLE phToken);
+BOOL   WINAPI SetPrinterToken(HANDLE hToken);
+BOOL   WINAPI ClosePrinterToken(HANDLE hToken);
+
+/* Notification */
+BOOL   WINAPI ReplyPrinterChangeNotification(HANDLE hNotify, DWORD fdwFlags,
+              PDWORD pdwResult, PVOID pPrinterNotifyInfo);
+BOOL   WINAPI PartialReplyPrinterChangeNotification(HANDLE hNotify,
+              PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc);
+PPRINTER_NOTIFY_INFO RouterAllocPrinterNotifyInfo(DWORD cPrinterNotifyInfoData);
+BOOL   WINAPI RouterFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
+BOOL   WINAPI AppendPrinterNotifyInfoData(PPRINTER_NOTIFY_INFO pInfoDest,
+              PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc, DWORD fdwFlags);
+DWORD  WINAPI CallRouterFindFirstPrinterChangeNotification(HANDLE hPrinter,
+              DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify, PVOID pvReserved);
+
+/* Port monitor / Language monitor / Print monitor */
+LPMONITOR2  WINAPI InitializePrintMonitor2(PMONITORINIT pMonitorInit,
+                   PHANDLE phMonitor);
+PMONITORUI  WINAPI InitializePrintMonitorUI(VOID);
+LPMONITOREX WINAPI InitializePrintMonitor(LPWSTR pRegistryRoot);
+BOOL        WINAPI InitializeMonitorEx(LPWSTR pRegistryRoot, LPMONITOR pMonitor);
+BOOL        WINAPI InitializeMonitor(LPWSTR pRegistryRoot);
+
+BOOL  WINAPI OpenPort(LPWSTR pName, PHANDLE pHandle);
+BOOL  WINAPI WritePort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
+             LPDWORD pcbWritten);
+BOOL  WINAPI ReadPort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
+             LPDWORD pcbRead);
+BOOL  WINAPI ClosePort(HANDLE hPort);
+
+/* Print processor */
+HANDLE WINAPI OpenPrintProcessor(LPWSTR pPrinterName,
+              PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
+BOOL   WINAPI PrintDocumentOnPrintProcessor(HANDLE hPrintProcessor,
+              LPWSTR pDocumentName);
+BOOL   WINAPI ClosePrintProcessor(HANDLE hPrintProcessor);
+BOOL   WINAPI ControlPrintProcessor(HANDLE hPrintProcessor, DWORD Command);
+BOOL   WINAPI InstallPrintProcessor(HWND hWnd);
+
+/* Print provider */
+BOOL   WINAPI InitializePrintProvidor(LPPRINTPROVIDOR pPrintProvidor,
+              DWORD cbPrintProvidor, LPWSTR pFullRegistryPath);
+BOOL   WINAPI ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter,
+              DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify,
+              PVOID pvReserved0, PVOID pvReserved1);
+BOOL   WINAPI ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter);
+
+/* Spooler */
+BOOL   WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
+              DWORD fdwFlags, DWORD fdwOptions, PHANDLE phEvent,
+              PVOID pPrinterNotifyOptions, PVOID pvReserved);
+BOOL   WINAPI SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter,
+              LPDWORD pfdwChange, PVOID pvReserved0, PVOID ppPrinterNotifyInfo);
+VOID   WINAPI SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
+BOOL   WINAPI SpoolerFindClosePrinterChangeNotification(HANDLE hPrinter);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif  /* _WINSPLP_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h
new file mode 100644
index 0000000..10e5745
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h
@@ -0,0 +1,2740 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDRAW_INCLUDED__
+#define __DDRAW_INCLUDED__
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef	DIRECTDRAW_VERSION
+#define	DIRECTDRAW_VERSION	0x0700
+#endif /* DIRECTDRAW_VERSION */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+#ifndef __DDRAW_GUID_DEFINED__
+DEFINE_GUID( CLSID_DirectDraw,		0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
+DEFINE_GUID( CLSID_DirectDraw7,         0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
+DEFINE_GUID( CLSID_DirectDrawClipper,	0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );
+DEFINE_GUID( IID_IDirectDraw,		0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDraw2,		0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
+DEFINE_GUID( IID_IDirectDraw3,		0x618f8ad4,0x8b7a,0x11d0,0x8f,0xcc,0x0,0xc0,0x4f,0xd9,0x18,0x9d );
+DEFINE_GUID( IID_IDirectDraw4,          0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );
+DEFINE_GUID( IID_IDirectDraw7,          0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
+DEFINE_GUID( IID_IDirectDrawSurface,	0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDrawSurface2,	0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );
+DEFINE_GUID( IID_IDirectDrawSurface3,	0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );
+DEFINE_GUID( IID_IDirectDrawSurface4,   0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );
+DEFINE_GUID( IID_IDirectDrawSurface7,   0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
+DEFINE_GUID( IID_IDirectDrawPalette,	0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDrawClipper,	0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );
+DEFINE_GUID( IID_IDirectDrawGammaControl,0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );
+#endif
+
+typedef struct IDirectDraw *LPDIRECTDRAW;
+typedef struct IDirectDraw2 *LPDIRECTDRAW2;
+typedef struct IDirectDraw3 *LPDIRECTDRAW3;
+typedef struct IDirectDraw4 *LPDIRECTDRAW4;
+typedef struct IDirectDraw7 *LPDIRECTDRAW7;
+typedef struct IDirectDrawClipper *LPDIRECTDRAWCLIPPER;
+typedef struct IDirectDrawPalette *LPDIRECTDRAWPALETTE;
+typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE;
+typedef struct IDirectDrawSurface2 *LPDIRECTDRAWSURFACE2;
+typedef struct IDirectDrawSurface3 *LPDIRECTDRAWSURFACE3;
+typedef struct IDirectDrawSurface4 *LPDIRECTDRAWSURFACE4;
+typedef struct IDirectDrawSurface7 *LPDIRECTDRAWSURFACE7;
+typedef struct IDirectDrawColorControl *LPDIRECTDRAWCOLORCONTROL;
+typedef struct IDirectDrawGammaControl *LPDIRECTDRAWGAMMACONTROL;
+
+
+#define DDENUMRET_CANCEL	0
+#define DDENUMRET_OK		1
+
+#define DD_OK			S_OK
+#define DD_FALSE		S_FALSE
+
+
+#define _FACDD		0x876
+#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )
+
+#define DDERR_ALREADYINITIALIZED		MAKE_DDHRESULT( 5 )
+#define DDERR_CANNOTATTACHSURFACE		MAKE_DDHRESULT( 10 )
+#define DDERR_CANNOTDETACHSURFACE		MAKE_DDHRESULT( 20 )
+#define DDERR_CURRENTLYNOTAVAIL			MAKE_DDHRESULT( 40 )
+#define DDERR_EXCEPTION				MAKE_DDHRESULT( 55 )
+#define DDERR_GENERIC				E_FAIL
+#define DDERR_HEIGHTALIGN			MAKE_DDHRESULT( 90 )
+#define DDERR_INCOMPATIBLEPRIMARY		MAKE_DDHRESULT( 95 )
+#define DDERR_INVALIDCAPS			MAKE_DDHRESULT( 100 )
+#define DDERR_INVALIDCLIPLIST			MAKE_DDHRESULT( 110 )
+#define DDERR_INVALIDMODE			MAKE_DDHRESULT( 120 )
+#define DDERR_INVALIDOBJECT			MAKE_DDHRESULT( 130 )
+#define DDERR_INVALIDPARAMS			E_INVALIDARG
+#define DDERR_INVALIDPIXELFORMAT		MAKE_DDHRESULT( 145 )
+#define DDERR_INVALIDRECT			MAKE_DDHRESULT( 150 )
+#define DDERR_LOCKEDSURFACES			MAKE_DDHRESULT( 160 )
+#define DDERR_NO3D				MAKE_DDHRESULT( 170 )
+#define DDERR_NOALPHAHW				MAKE_DDHRESULT( 180 )
+#define DDERR_NOSTEREOHARDWARE          	MAKE_DDHRESULT( 181 )
+#define DDERR_NOSURFACELEFT                     MAKE_DDHRESULT( 182 )
+#define DDERR_NOCLIPLIST			MAKE_DDHRESULT( 205 )
+#define DDERR_NOCOLORCONVHW			MAKE_DDHRESULT( 210 )
+#define DDERR_NOCOOPERATIVELEVELSET		MAKE_DDHRESULT( 212 )
+#define DDERR_NOCOLORKEY			MAKE_DDHRESULT( 215 )
+#define DDERR_NOCOLORKEYHW			MAKE_DDHRESULT( 220 )
+#define DDERR_NODIRECTDRAWSUPPORT		MAKE_DDHRESULT( 222 )
+#define DDERR_NOEXCLUSIVEMODE			MAKE_DDHRESULT( 225 )
+#define DDERR_NOFLIPHW				MAKE_DDHRESULT( 230 )
+#define DDERR_NOGDI				MAKE_DDHRESULT( 240 )
+#define DDERR_NOMIRRORHW			MAKE_DDHRESULT( 250 )
+#define DDERR_NOTFOUND				MAKE_DDHRESULT( 255 )
+#define DDERR_NOOVERLAYHW			MAKE_DDHRESULT( 260 )
+#define DDERR_OVERLAPPINGRECTS                  MAKE_DDHRESULT( 270 )
+#define DDERR_NORASTEROPHW			MAKE_DDHRESULT( 280 )
+#define DDERR_NOROTATIONHW			MAKE_DDHRESULT( 290 )
+#define DDERR_NOSTRETCHHW			MAKE_DDHRESULT( 310 )
+#define DDERR_NOT4BITCOLOR			MAKE_DDHRESULT( 316 )
+#define DDERR_NOT4BITCOLORINDEX			MAKE_DDHRESULT( 317 )
+#define DDERR_NOT8BITCOLOR			MAKE_DDHRESULT( 320 )
+#define DDERR_NOTEXTUREHW			MAKE_DDHRESULT( 330 )
+#define DDERR_NOVSYNCHW				MAKE_DDHRESULT( 335 )
+#define DDERR_NOZBUFFERHW			MAKE_DDHRESULT( 340 )
+#define DDERR_NOZOVERLAYHW			MAKE_DDHRESULT( 350 )
+#define DDERR_OUTOFCAPS				MAKE_DDHRESULT( 360 )
+#define DDERR_OUTOFMEMORY			E_OUTOFMEMORY
+#define DDERR_OUTOFVIDEOMEMORY			MAKE_DDHRESULT( 380 )
+#define DDERR_OVERLAYCANTCLIP			MAKE_DDHRESULT( 382 )
+#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE	MAKE_DDHRESULT( 384 )
+#define DDERR_PALETTEBUSY			MAKE_DDHRESULT( 387 )
+#define DDERR_COLORKEYNOTSET			MAKE_DDHRESULT( 400 )
+#define DDERR_SURFACEALREADYATTACHED		MAKE_DDHRESULT( 410 )
+#define DDERR_SURFACEALREADYDEPENDENT		MAKE_DDHRESULT( 420 )
+#define DDERR_SURFACEBUSY			MAKE_DDHRESULT( 430 )
+#define DDERR_CANTLOCKSURFACE			MAKE_DDHRESULT( 435 )
+#define DDERR_SURFACEISOBSCURED			MAKE_DDHRESULT( 440 )
+#define DDERR_SURFACELOST			MAKE_DDHRESULT( 450 )
+#define DDERR_SURFACENOTATTACHED		MAKE_DDHRESULT( 460 )
+#define DDERR_TOOBIGHEIGHT			MAKE_DDHRESULT( 470 )
+#define DDERR_TOOBIGSIZE			MAKE_DDHRESULT( 480 )
+#define DDERR_TOOBIGWIDTH			MAKE_DDHRESULT( 490 )
+#define DDERR_UNSUPPORTED			E_NOTIMPL
+#define DDERR_UNSUPPORTEDFORMAT			MAKE_DDHRESULT( 510 )
+#define DDERR_UNSUPPORTEDMASK			MAKE_DDHRESULT( 520 )
+#define DDERR_INVALIDSTREAM                     MAKE_DDHRESULT( 521 )
+#define DDERR_VERTICALBLANKINPROGRESS		MAKE_DDHRESULT( 537 )
+#define DDERR_WASSTILLDRAWING			MAKE_DDHRESULT( 540 )
+#define DDERR_DDSCAPSCOMPLEXREQUIRED            MAKE_DDHRESULT( 542 )
+#define DDERR_XALIGN				MAKE_DDHRESULT( 560 )
+#define DDERR_INVALIDDIRECTDRAWGUID		MAKE_DDHRESULT( 561 )
+#define DDERR_DIRECTDRAWALREADYCREATED		MAKE_DDHRESULT( 562 )
+#define DDERR_NODIRECTDRAWHW			MAKE_DDHRESULT( 563 )
+#define DDERR_PRIMARYSURFACEALREADYEXISTS	MAKE_DDHRESULT( 564 )
+#define DDERR_NOEMULATION			MAKE_DDHRESULT( 565 )
+#define DDERR_REGIONTOOSMALL			MAKE_DDHRESULT( 566 )
+#define DDERR_CLIPPERISUSINGHWND		MAKE_DDHRESULT( 567 )
+#define DDERR_NOCLIPPERATTACHED			MAKE_DDHRESULT( 568 )
+#define DDERR_NOHWND				MAKE_DDHRESULT( 569 )
+#define DDERR_HWNDSUBCLASSED			MAKE_DDHRESULT( 570 )
+#define DDERR_HWNDALREADYSET			MAKE_DDHRESULT( 571 )
+#define DDERR_NOPALETTEATTACHED			MAKE_DDHRESULT( 572 )
+#define DDERR_NOPALETTEHW			MAKE_DDHRESULT( 573 )
+#define DDERR_BLTFASTCANTCLIP			MAKE_DDHRESULT( 574 )
+#define DDERR_NOBLTHW				MAKE_DDHRESULT( 575 )
+#define DDERR_NODDROPSHW			MAKE_DDHRESULT( 576 )
+#define DDERR_OVERLAYNOTVISIBLE			MAKE_DDHRESULT( 577 )
+#define DDERR_NOOVERLAYDEST			MAKE_DDHRESULT( 578 )
+#define DDERR_INVALIDPOSITION			MAKE_DDHRESULT( 579 )
+#define DDERR_NOTAOVERLAYSURFACE		MAKE_DDHRESULT( 580 )
+#define DDERR_EXCLUSIVEMODEALREADYSET		MAKE_DDHRESULT( 581 )
+#define DDERR_NOTFLIPPABLE			MAKE_DDHRESULT( 582 )
+#define DDERR_CANTDUPLICATE			MAKE_DDHRESULT( 583 )
+#define DDERR_NOTLOCKED				MAKE_DDHRESULT( 584 )
+#define DDERR_CANTCREATEDC			MAKE_DDHRESULT( 585 )
+#define DDERR_NODC				MAKE_DDHRESULT( 586 )
+#define DDERR_WRONGMODE				MAKE_DDHRESULT( 587 )
+#define DDERR_IMPLICITLYCREATED			MAKE_DDHRESULT( 588 )
+#define DDERR_NOTPALETTIZED			MAKE_DDHRESULT( 589 )
+#define DDERR_UNSUPPORTEDMODE			MAKE_DDHRESULT( 590 )
+#define DDERR_NOMIPMAPHW			MAKE_DDHRESULT( 591 )
+#define DDERR_INVALIDSURFACETYPE		MAKE_DDHRESULT( 592 )
+#define DDERR_NOOPTIMIZEHW			MAKE_DDHRESULT( 600 )
+#define DDERR_NOTLOADED				MAKE_DDHRESULT( 601 )
+#define DDERR_NOFOCUSWINDOW			MAKE_DDHRESULT( 602 )
+#define DDERR_NOTONMIPMAPSUBLEVEL               MAKE_DDHRESULT( 603 )
+#define DDERR_DCALREADYCREATED			MAKE_DDHRESULT( 620 )
+#define DDERR_NONONLOCALVIDMEM			MAKE_DDHRESULT( 630 )
+#define DDERR_CANTPAGELOCK			MAKE_DDHRESULT( 640 )
+#define DDERR_CANTPAGEUNLOCK			MAKE_DDHRESULT( 660 )
+#define DDERR_NOTPAGELOCKED			MAKE_DDHRESULT( 680 )
+#define DDERR_MOREDATA				MAKE_DDHRESULT( 690 )
+#define DDERR_EXPIRED                           MAKE_DDHRESULT( 691 )
+#define DDERR_TESTFINISHED                      MAKE_DDHRESULT( 692 )
+#define DDERR_NEWMODE                           MAKE_DDHRESULT( 693 )
+#define DDERR_D3DNOTINITIALIZED                 MAKE_DDHRESULT( 694 )
+#define DDERR_VIDEONOTACTIVE			MAKE_DDHRESULT( 695 )
+#define DDERR_NOMONITORINFORMATION              MAKE_DDHRESULT( 696 )
+#define DDERR_NODRIVERSUPPORT                   MAKE_DDHRESULT( 697 )
+#define DDERR_DEVICEDOESNTOWNSURFACE		MAKE_DDHRESULT( 699 )
+#define DDERR_NOTINITIALIZED			CO_E_NOTINITIALIZED
+
+/* dwFlags for Blt* */
+#define DDBLT_ALPHADEST				0x00000001
+#define DDBLT_ALPHADESTCONSTOVERRIDE		0x00000002
+#define DDBLT_ALPHADESTNEG			0x00000004
+#define DDBLT_ALPHADESTSURFACEOVERRIDE		0x00000008
+#define DDBLT_ALPHAEDGEBLEND			0x00000010
+#define DDBLT_ALPHASRC				0x00000020
+#define DDBLT_ALPHASRCCONSTOVERRIDE		0x00000040
+#define DDBLT_ALPHASRCNEG			0x00000080
+#define DDBLT_ALPHASRCSURFACEOVERRIDE		0x00000100
+#define DDBLT_ASYNC				0x00000200
+#define DDBLT_COLORFILL				0x00000400
+#define DDBLT_DDFX				0x00000800
+#define DDBLT_DDROPS				0x00001000
+#define DDBLT_KEYDEST				0x00002000
+#define DDBLT_KEYDESTOVERRIDE			0x00004000
+#define DDBLT_KEYSRC				0x00008000
+#define DDBLT_KEYSRCOVERRIDE			0x00010000
+#define DDBLT_ROP				0x00020000
+#define DDBLT_ROTATIONANGLE			0x00040000
+#define DDBLT_ZBUFFER				0x00080000
+#define DDBLT_ZBUFFERDESTCONSTOVERRIDE		0x00100000
+#define DDBLT_ZBUFFERDESTOVERRIDE		0x00200000
+#define DDBLT_ZBUFFERSRCCONSTOVERRIDE		0x00400000
+#define DDBLT_ZBUFFERSRCOVERRIDE		0x00800000
+#define DDBLT_WAIT				0x01000000
+#define DDBLT_DEPTHFILL				0x02000000
+#define DDBLT_DONOTWAIT                         0x08000000
+
+/* dwTrans for BltFast */
+#define DDBLTFAST_NOCOLORKEY			0x00000000
+#define DDBLTFAST_SRCCOLORKEY			0x00000001
+#define DDBLTFAST_DESTCOLORKEY			0x00000002
+#define DDBLTFAST_WAIT				0x00000010
+#define DDBLTFAST_DONOTWAIT                     0x00000020
+
+/* dwFlags for Flip */
+#define DDFLIP_WAIT		0x00000001
+#define DDFLIP_EVEN		0x00000002 /* only valid for overlay */
+#define DDFLIP_ODD		0x00000004 /* only valid for overlay */
+#define DDFLIP_NOVSYNC		0x00000008
+#define DDFLIP_STEREO		0x00000010
+#define DDFLIP_DONOTWAIT	0x00000020
+#define DDFLIP_INTERVAL2	0x02000000
+#define DDFLIP_INTERVAL3	0x03000000
+#define DDFLIP_INTERVAL4	0x04000000
+
+
+/* dwFlags for GetBltStatus */
+#define DDGBS_CANBLT				0x00000001
+#define DDGBS_ISBLTDONE				0x00000002
+
+/* dwFlags for IDirectDrawSurface7::GetFlipStatus */
+#define DDGFS_CANFLIP           __MSABI_LONG(1)
+#define DDGFS_ISFLIPDONE        __MSABI_LONG(2)
+
+/* dwFlags for IDirectDrawSurface7::SetPrivateData */
+#define DDSPD_IUNKNOWNPOINTER   __MSABI_LONG(1)
+#define DDSPD_VOLATILE          __MSABI_LONG(2)
+
+/* DDSCAPS.dwCaps */
+/* reserved1, was 3d capable */
+#define DDSCAPS_RESERVED1		0x00000001
+/* surface contains alpha information */
+#define DDSCAPS_ALPHA			0x00000002
+/* this surface is a backbuffer */
+#define DDSCAPS_BACKBUFFER		0x00000004
+/* complex surface structure */
+#define DDSCAPS_COMPLEX			0x00000008
+/* part of surface flipping structure */
+#define DDSCAPS_FLIP			0x00000010
+/* this surface is the frontbuffer surface */
+#define DDSCAPS_FRONTBUFFER		0x00000020
+/* this is a plain offscreen surface */
+#define DDSCAPS_OFFSCREENPLAIN		0x00000040
+/* overlay */
+#define DDSCAPS_OVERLAY			0x00000080
+/* palette objects can be created and attached to us */
+#define DDSCAPS_PALETTE			0x00000100
+/* primary surface (the one the user looks at currently)(right eye)*/
+#define DDSCAPS_PRIMARYSURFACE		0x00000200
+/* primary surface for left eye */
+#define DDSCAPS_PRIMARYSURFACELEFT	0x00000400
+/* surface exists in systemmemory */
+#define DDSCAPS_SYSTEMMEMORY		0x00000800
+/* surface can be used as a texture */
+#define DDSCAPS_TEXTURE		        0x00001000
+/* surface may be destination for 3d rendering */
+#define DDSCAPS_3DDEVICE		0x00002000
+/* surface exists in videomemory */
+#define DDSCAPS_VIDEOMEMORY		0x00004000
+/* surface changes immediately visible */
+#define DDSCAPS_VISIBLE			0x00008000
+/* write only surface */
+#define DDSCAPS_WRITEONLY		0x00010000
+/* zbuffer surface */
+#define DDSCAPS_ZBUFFER			0x00020000
+/* has its own DC */
+#define DDSCAPS_OWNDC			0x00040000
+/* surface should be able to receive live video */
+#define DDSCAPS_LIVEVIDEO		0x00080000
+/* should be able to have a hw codec decompress stuff into it */
+#define DDSCAPS_HWCODEC			0x00100000
+/* mode X (320x200 or 320x240) surface */
+#define DDSCAPS_MODEX			0x00200000
+/* one mipmap surface (1 level) */
+#define DDSCAPS_MIPMAP			0x00400000
+#define DDSCAPS_RESERVED2		0x00800000
+/* memory allocation delayed until Load() */
+#define DDSCAPS_ALLOCONLOAD		0x04000000
+/* Indicates that the surface will receive data from a video port */
+#define DDSCAPS_VIDEOPORT		0x08000000
+/* surface is in local videomemory */
+#define DDSCAPS_LOCALVIDMEM		0x10000000
+/* surface is in nonlocal videomemory */
+#define DDSCAPS_NONLOCALVIDMEM		0x20000000
+/* surface is a standard VGA mode surface (NOT ModeX) */
+#define DDSCAPS_STANDARDVGAMODE		0x40000000
+/* optimized? surface */
+#define DDSCAPS_OPTIMIZED		0x80000000
+
+typedef struct _DDSCAPS {
+	DWORD	dwCaps;	/* capabilities of surface wanted */
+} DDSCAPS,*LPDDSCAPS;
+
+/* DDSCAPS2.dwCaps2 */
+/* indicates the surface will receive data from a video port using
+   deinterlacing hardware. */
+#define DDSCAPS2_HARDWAREDEINTERLACE	0x00000002
+/* indicates the surface will be locked very frequently. */
+#define DDSCAPS2_HINTDYNAMIC		0x00000004
+/* indicates surface can be re-ordered or retiled on load() */
+#define DDSCAPS2_HINTSTATIC             0x00000008
+/* indicates surface to be managed by directdraw/direct3D */
+#define DDSCAPS2_TEXTUREMANAGE          0x00000010
+/* reserved bits */
+#define DDSCAPS2_RESERVED1              0x00000020
+#define DDSCAPS2_RESERVED2              0x00000040
+/* indicates surface will never be locked again */
+#define DDSCAPS2_OPAQUE                 0x00000080
+/* set at CreateSurface() time to indicate antialiasing will be used */
+#define DDSCAPS2_HINTANTIALIASING       0x00000100
+/* set at CreateSurface() time to indicate cubic environment map */
+#define DDSCAPS2_CUBEMAP                0x00000200
+/* face flags for cube maps */
+#define DDSCAPS2_CUBEMAP_POSITIVEX      0x00000400
+#define DDSCAPS2_CUBEMAP_NEGATIVEX      0x00000800
+#define DDSCAPS2_CUBEMAP_POSITIVEY      0x00001000
+#define DDSCAPS2_CUBEMAP_NEGATIVEY      0x00002000
+#define DDSCAPS2_CUBEMAP_POSITIVEZ      0x00004000
+#define DDSCAPS2_CUBEMAP_NEGATIVEZ      0x00008000
+/* specifies all faces of a cube for CreateSurface() */
+#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\
+                                    DDSCAPS2_CUBEMAP_NEGATIVEX |\
+                                    DDSCAPS2_CUBEMAP_POSITIVEY |\
+                                    DDSCAPS2_CUBEMAP_NEGATIVEY |\
+                                    DDSCAPS2_CUBEMAP_POSITIVEZ |\
+                                    DDSCAPS2_CUBEMAP_NEGATIVEZ )
+/* set for mipmap sublevels on DirectX7 and later.  ignored by CreateSurface() */
+#define DDSCAPS2_MIPMAPSUBLEVEL         0x00010000
+/* indicates texture surface to be managed by Direct3D *only* */
+#define DDSCAPS2_D3DTEXTUREMANAGE       0x00020000
+/* indicates managed surface that can safely be lost */
+#define DDSCAPS2_DONOTPERSIST           0x00040000
+/* indicates surface is part of a stereo flipping chain */
+#define DDSCAPS2_STEREOSURFACELEFT      0x00080000
+#define DDSCAPS2_VOLUME                 0x00200000
+
+typedef struct _DDSCAPS2 {
+	DWORD	dwCaps;	/* capabilities of surface wanted */
+	DWORD   dwCaps2; /* additional capabilities */
+	DWORD   dwCaps3; /* reserved capabilities */
+	DWORD   dwCaps4; /* more reserved capabilities */
+} DDSCAPS2,*LPDDSCAPS2;
+
+#define	DD_ROP_SPACE	(256/32)	/* space required to store ROP array */
+
+typedef struct _DDCAPS_DX7		/* DirectX 7 version of caps struct */
+{
+    DWORD	dwSize;                 /* size of the DDDRIVERCAPS structure */
+    DWORD	dwCaps;                 /* driver specific capabilities */
+    DWORD	dwCaps2;                /* more driver specific capabilities */
+    DWORD	dwCKeyCaps;             /* color key capabilities of the surface */
+    DWORD	dwFXCaps;               /* driver specific stretching and effects capabilities */
+    DWORD	dwFXAlphaCaps;          /* alpha driver specific capabilities */
+    DWORD	dwPalCaps;              /* palette capabilities */
+    DWORD	dwSVCaps;               /* stereo vision capabilities */
+    DWORD	dwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */
+    DWORD	dwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */
+    DWORD	dwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+    DWORD	dwZBufferBitDepths;             /* DDBD_8,16,24,32 */
+    DWORD	dwVidMemTotal;          /* total amount of video memory */
+    DWORD	dwVidMemFree;           /* amount of free video memory */
+    DWORD	dwMaxVisibleOverlays;   /* maximum number of visible overlays */
+    DWORD	dwCurrVisibleOverlays;  /* current number of visible overlays */
+    DWORD	dwNumFourCCCodes;       /* number of four cc codes */
+    DWORD	dwAlignBoundarySrc;     /* source rectangle alignment */
+    DWORD	dwAlignSizeSrc;         /* source rectangle byte size */
+    DWORD	dwAlignBoundaryDest;    /* dest rectangle alignment */
+    DWORD	dwAlignSizeDest;        /* dest rectangle byte size */
+    DWORD	dwAlignStrideAlign;     /* stride alignment */
+    DWORD	dwRops[DD_ROP_SPACE];   /* ROPs supported */
+    DDSCAPS	ddsOldCaps;             /* old DDSCAPS - superseded for DirectX6+ */
+    DWORD	dwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+    DWORD	dwReserved3;
+    DWORD	dwSVBCaps;              /* driver specific capabilities for System->Vmem blts */
+    DWORD	dwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */
+    DWORD	dwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */
+    DWORD	dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+    DWORD	dwVSBCaps;              /* driver specific capabilities for Vmem->System blts */
+    DWORD	dwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */
+    DWORD	dwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */
+    DWORD	dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+    DWORD	dwSSBCaps;              /* driver specific capabilities for System->System blts */
+    DWORD	dwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */
+    DWORD	dwSSBFXCaps;            /* driver FX capabilities for System->System blts */
+    DWORD	dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+    DWORD       dwMaxVideoPorts;        /* maximum number of usable video ports */
+    DWORD   	dwCurrVideoPorts;       /* current number of video ports used */
+    DWORD   	dwSVBCaps2;             /* more driver specific capabilities for System->Vmem blts */
+    DWORD   	dwNLVBCaps;             /* driver specific capabilities for non-local->local vidmem blts */
+    DWORD   	dwNLVBCaps2;            /* more driver specific capabilities non-local->local vidmem blts */
+    DWORD   	dwNLVBCKeyCaps;         /* driver color key capabilities for non-local->local vidmem blts */
+    DWORD   	dwNLVBFXCaps;           /* driver FX capabilities for non-local->local blts */
+    DWORD   	dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */
+    DDSCAPS2    ddsCaps;		/* surface capabilities */
+} DDCAPS_DX7,*LPDDCAPS_DX7;
+
+typedef struct _DDCAPS_DX6		/* DirectX 6 version of caps struct */
+{
+    DWORD	dwSize;                 /* size of the DDDRIVERCAPS structure */
+    DWORD	dwCaps;                 /* driver specific capabilities */
+    DWORD	dwCaps2;                /* more driver specific capabilities */
+    DWORD	dwCKeyCaps;             /* color key capabilities of the surface */
+    DWORD	dwFXCaps;               /* driver specific stretching and effects capabilities */
+    DWORD	dwFXAlphaCaps;          /* alpha driver specific capabilities */
+    DWORD	dwPalCaps;              /* palette capabilities */
+    DWORD	dwSVCaps;               /* stereo vision capabilities */
+    DWORD	dwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */
+    DWORD	dwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */
+    DWORD	dwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+    DWORD	dwZBufferBitDepths;             /* DDBD_8,16,24,32 */
+    DWORD	dwVidMemTotal;          /* total amount of video memory */
+    DWORD	dwVidMemFree;           /* amount of free video memory */
+    DWORD	dwMaxVisibleOverlays;   /* maximum number of visible overlays */
+    DWORD	dwCurrVisibleOverlays;  /* current number of visible overlays */
+    DWORD	dwNumFourCCCodes;       /* number of four cc codes */
+    DWORD	dwAlignBoundarySrc;     /* source rectangle alignment */
+    DWORD	dwAlignSizeSrc;         /* source rectangle byte size */
+    DWORD	dwAlignBoundaryDest;    /* dest rectangle alignment */
+    DWORD	dwAlignSizeDest;        /* dest rectangle byte size */
+    DWORD	dwAlignStrideAlign;     /* stride alignment */
+    DWORD	dwRops[DD_ROP_SPACE];   /* ROPs supported */
+    DDSCAPS	ddsOldCaps;             /* old DDSCAPS - superseded for DirectX6+ */
+    DWORD	dwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+    DWORD	dwReserved3;
+    DWORD	dwSVBCaps;              /* driver specific capabilities for System->Vmem blts */
+    DWORD	dwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */
+    DWORD	dwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */
+    DWORD	dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+    DWORD	dwVSBCaps;              /* driver specific capabilities for Vmem->System blts */
+    DWORD	dwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */
+    DWORD	dwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */
+    DWORD	dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+    DWORD	dwSSBCaps;              /* driver specific capabilities for System->System blts */
+    DWORD	dwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */
+    DWORD	dwSSBFXCaps;            /* driver FX capabilities for System->System blts */
+    DWORD	dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+    DWORD       dwMaxVideoPorts;        /* maximum number of usable video ports */
+    DWORD   	dwCurrVideoPorts;       /* current number of video ports used */
+    DWORD   	dwSVBCaps2;             /* more driver specific capabilities for System->Vmem blts */
+    DWORD   	dwNLVBCaps;             /* driver specific capabilities for non-local->local vidmem blts */
+    DWORD   	dwNLVBCaps2;            /* more driver specific capabilities non-local->local vidmem blts */
+    DWORD   	dwNLVBCKeyCaps;         /* driver color key capabilities for non-local->local vidmem blts */
+    DWORD   	dwNLVBFXCaps;           /* driver FX capabilities for non-local->local blts */
+    DWORD   	dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */
+    /* and one new member for DirectX 6 */
+    DDSCAPS2    ddsCaps;		/* surface capabilities */
+} DDCAPS_DX6,*LPDDCAPS_DX6;
+
+typedef struct _DDCAPS_DX5		/* DirectX5 version of caps struct */
+{
+    DWORD	dwSize;                 /* size of the DDDRIVERCAPS structure */
+    DWORD	dwCaps;                 /* driver specific capabilities */
+    DWORD	dwCaps2;                /* more driver specific capabilities */
+    DWORD	dwCKeyCaps;             /* color key capabilities of the surface */
+    DWORD	dwFXCaps;               /* driver specific stretching and effects capabilities */
+    DWORD	dwFXAlphaCaps;          /* alpha driver specific capabilities */
+    DWORD	dwPalCaps;              /* palette capabilities */
+    DWORD	dwSVCaps;               /* stereo vision capabilities */
+    DWORD	dwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */
+    DWORD	dwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */
+    DWORD	dwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+    DWORD	dwZBufferBitDepths;             /* DDBD_8,16,24,32 */
+    DWORD	dwVidMemTotal;          /* total amount of video memory */
+    DWORD	dwVidMemFree;           /* amount of free video memory */
+    DWORD	dwMaxVisibleOverlays;   /* maximum number of visible overlays */
+    DWORD	dwCurrVisibleOverlays;  /* current number of visible overlays */
+    DWORD	dwNumFourCCCodes;       /* number of four cc codes */
+    DWORD	dwAlignBoundarySrc;     /* source rectangle alignment */
+    DWORD	dwAlignSizeSrc;         /* source rectangle byte size */
+    DWORD	dwAlignBoundaryDest;    /* dest rectangle alignment */
+    DWORD	dwAlignSizeDest;        /* dest rectangle byte size */
+    DWORD	dwAlignStrideAlign;     /* stride alignment */
+    DWORD	dwRops[DD_ROP_SPACE];   /* ROPs supported */
+    DDSCAPS	ddsCaps;                /* DDSCAPS structure has all the general capabilities */
+    DWORD	dwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+    DWORD	dwReserved3;
+    DWORD	dwSVBCaps;              /* driver specific capabilities for System->Vmem blts */
+    DWORD	dwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */
+    DWORD	dwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */
+    DWORD	dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+    DWORD	dwVSBCaps;              /* driver specific capabilities for Vmem->System blts */
+    DWORD	dwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */
+    DWORD	dwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */
+    DWORD	dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+    DWORD	dwSSBCaps;              /* driver specific capabilities for System->System blts */
+    DWORD	dwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */
+    DWORD	dwSSBFXCaps;            /* driver FX capabilities for System->System blts */
+    DWORD	dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+    /* the following are the new DirectX 5 members */
+    DWORD       dwMaxVideoPorts;        /* maximum number of usable video ports */
+    DWORD   	dwCurrVideoPorts;       /* current number of video ports used */
+    DWORD   	dwSVBCaps2;             /* more driver specific capabilities for System->Vmem blts */
+    DWORD   	dwNLVBCaps;             /* driver specific capabilities for non-local->local vidmem blts */
+    DWORD   	dwNLVBCaps2;            /* more driver specific capabilities non-local->local vidmem blts */
+    DWORD   	dwNLVBCKeyCaps;         /* driver color key capabilities for non-local->local vidmem blts */
+    DWORD   	dwNLVBFXCaps;           /* driver FX capabilities for non-local->local blts */
+    DWORD   	dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */
+} DDCAPS_DX5,*LPDDCAPS_DX5;
+
+typedef struct _DDCAPS_DX3		/* DirectX3 version of caps struct */
+{
+    DWORD	dwSize;                 /* size of the DDDRIVERCAPS structure */
+    DWORD	dwCaps;                 /* driver specific capabilities */
+    DWORD	dwCaps2;                /* more driver specific capabilities */
+    DWORD	dwCKeyCaps;             /* color key capabilities of the surface */
+    DWORD	dwFXCaps;               /* driver specific stretching and effects capabilities */
+    DWORD	dwFXAlphaCaps;          /* alpha driver specific capabilities */
+    DWORD	dwPalCaps;              /* palette capabilities */
+    DWORD	dwSVCaps;               /* stereo vision capabilities */
+    DWORD	dwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */
+    DWORD	dwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */
+    DWORD	dwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */
+    DWORD	dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+    DWORD	dwZBufferBitDepths;             /* DDBD_8,16,24,32 */
+    DWORD	dwVidMemTotal;          /* total amount of video memory */
+    DWORD	dwVidMemFree;           /* amount of free video memory */
+    DWORD	dwMaxVisibleOverlays;   /* maximum number of visible overlays */
+    DWORD	dwCurrVisibleOverlays;  /* current number of visible overlays */
+    DWORD	dwNumFourCCCodes;       /* number of four cc codes */
+    DWORD	dwAlignBoundarySrc;     /* source rectangle alignment */
+    DWORD	dwAlignSizeSrc;         /* source rectangle byte size */
+    DWORD	dwAlignBoundaryDest;    /* dest rectangle alignment */
+    DWORD	dwAlignSizeDest;        /* dest rectangle byte size */
+    DWORD	dwAlignStrideAlign;     /* stride alignment */
+    DWORD	dwRops[DD_ROP_SPACE];   /* ROPs supported */
+    DDSCAPS	ddsCaps;                /* DDSCAPS structure has all the general capabilities */
+    DWORD	dwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+    DWORD	dwReserved3;
+    DWORD	dwSVBCaps;              /* driver specific capabilities for System->Vmem blts */
+    DWORD	dwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */
+    DWORD	dwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */
+    DWORD	dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+    DWORD	dwVSBCaps;              /* driver specific capabilities for Vmem->System blts */
+    DWORD	dwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */
+    DWORD	dwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */
+    DWORD	dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+    DWORD	dwSSBCaps;              /* driver specific capabilities for System->System blts */
+    DWORD	dwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */
+    DWORD	dwSSBFXCaps;            /* driver FX capabilities for System->System blts */
+    DWORD	dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+    DWORD	dwReserved4;
+    DWORD	dwReserved5;
+    DWORD	dwReserved6;
+} DDCAPS_DX3,*LPDDCAPS_DX3;
+
+/* set caps struct according to DIRECTDRAW_VERSION */
+
+#if DIRECTDRAW_VERSION <= 0x300
+typedef DDCAPS_DX3 DDCAPS;
+#elif DIRECTDRAW_VERSION <= 0x500
+typedef DDCAPS_DX5 DDCAPS;
+#elif DIRECTDRAW_VERSION <= 0x600
+typedef DDCAPS_DX6 DDCAPS;
+#else
+typedef DDCAPS_DX7 DDCAPS;
+#endif
+
+typedef DDCAPS *LPDDCAPS;
+
+/* DDCAPS.dwCaps */
+#define DDCAPS_3D			0x00000001
+#define DDCAPS_ALIGNBOUNDARYDEST	0x00000002
+#define DDCAPS_ALIGNSIZEDEST		0x00000004
+#define DDCAPS_ALIGNBOUNDARYSRC		0x00000008
+#define DDCAPS_ALIGNSIZESRC		0x00000010
+#define DDCAPS_ALIGNSTRIDE		0x00000020
+#define DDCAPS_BLT			0x00000040
+#define DDCAPS_BLTQUEUE			0x00000080
+#define DDCAPS_BLTFOURCC		0x00000100
+#define DDCAPS_BLTSTRETCH		0x00000200
+#define DDCAPS_GDI			0x00000400
+#define DDCAPS_OVERLAY			0x00000800
+#define DDCAPS_OVERLAYCANTCLIP		0x00001000
+#define DDCAPS_OVERLAYFOURCC		0x00002000
+#define DDCAPS_OVERLAYSTRETCH		0x00004000
+#define DDCAPS_PALETTE			0x00008000
+#define DDCAPS_PALETTEVSYNC		0x00010000
+#define DDCAPS_READSCANLINE		0x00020000
+#define DDCAPS_STEREOVIEW		0x00040000
+#define DDCAPS_VBI			0x00080000
+#define DDCAPS_ZBLTS			0x00100000
+#define DDCAPS_ZOVERLAYS		0x00200000
+#define DDCAPS_COLORKEY			0x00400000
+#define DDCAPS_ALPHA			0x00800000
+#define DDCAPS_COLORKEYHWASSIST		0x01000000
+#define DDCAPS_NOHARDWARE		0x02000000
+#define DDCAPS_BLTCOLORFILL		0x04000000
+#define DDCAPS_BANKSWITCHED		0x08000000
+#define DDCAPS_BLTDEPTHFILL		0x10000000
+#define DDCAPS_CANCLIP			0x20000000
+#define DDCAPS_CANCLIPSTRETCHED		0x40000000
+#define DDCAPS_CANBLTSYSMEM		0x80000000
+
+/* DDCAPS.dwCaps2 */
+#define DDCAPS2_CERTIFIED		0x00000001
+#define DDCAPS2_NO2DDURING3DSCENE       0x00000002
+#define DDCAPS2_VIDEOPORT		0x00000004
+#define DDCAPS2_AUTOFLIPOVERLAY		0x00000008
+#define DDCAPS2_CANBOBINTERLEAVED	0x00000010
+#define DDCAPS2_CANBOBNONINTERLEAVED	0x00000020
+#define DDCAPS2_COLORCONTROLOVERLAY	0x00000040
+#define DDCAPS2_COLORCONTROLPRIMARY	0x00000080
+#define DDCAPS2_CANDROPZ16BIT		0x00000100
+#define DDCAPS2_NONLOCALVIDMEM		0x00000200
+#define DDCAPS2_NONLOCALVIDMEMCAPS	0x00000400
+#define DDCAPS2_NOPAGELOCKREQUIRED	0x00000800
+#define DDCAPS2_WIDESURFACES		0x00001000
+#define DDCAPS2_CANFLIPODDEVEN		0x00002000
+#define DDCAPS2_CANBOBHARDWARE		0x00004000
+#define DDCAPS2_COPYFOURCC              0x00008000
+#define DDCAPS2_PRIMARYGAMMA            0x00020000
+#define DDCAPS2_CANRENDERWINDOWED       0x00080000
+#define DDCAPS2_CANCALIBRATEGAMMA       0x00100000
+#define DDCAPS2_FLIPINTERVAL            0x00200000
+#define DDCAPS2_FLIPNOVSYNC             0x00400000
+#define DDCAPS2_CANMANAGETEXTURE        0x00800000
+#define DDCAPS2_TEXMANINNONLOCALVIDMEM  0x01000000
+#define DDCAPS2_STEREO                  0x02000000
+#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL   0x04000000
+
+
+/* Set/Get Colour Key Flags */
+#define DDCKEY_COLORSPACE  0x00000001  /* Struct is single colour space */
+#define DDCKEY_DESTBLT     0x00000002  /* To be used as dest for blt */
+#define DDCKEY_DESTOVERLAY 0x00000004  /* To be used as dest for CK overlays */
+#define DDCKEY_SRCBLT      0x00000008  /* To be used as src for blt */
+#define DDCKEY_SRCOVERLAY  0x00000010  /* To be used as src for CK overlays */
+
+typedef struct _DDCOLORKEY
+{
+	DWORD	dwColorSpaceLowValue;/* low boundary of color space that is to
+                                      * be treated as Color Key, inclusive
+				      */
+	DWORD	dwColorSpaceHighValue;/* high boundary of color space that is
+                                       * to be treated as Color Key, inclusive
+				       */
+} DDCOLORKEY,*LPDDCOLORKEY;
+
+/* ddCKEYCAPS bits */
+#define DDCKEYCAPS_DESTBLT			0x00000001
+#define DDCKEYCAPS_DESTBLTCLRSPACE		0x00000002
+#define DDCKEYCAPS_DESTBLTCLRSPACEYUV		0x00000004
+#define DDCKEYCAPS_DESTBLTYUV			0x00000008
+#define DDCKEYCAPS_DESTOVERLAY			0x00000010
+#define DDCKEYCAPS_DESTOVERLAYCLRSPACE		0x00000020
+#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV	0x00000040
+#define DDCKEYCAPS_DESTOVERLAYONEACTIVE		0x00000080
+#define DDCKEYCAPS_DESTOVERLAYYUV		0x00000100
+#define DDCKEYCAPS_SRCBLT			0x00000200
+#define DDCKEYCAPS_SRCBLTCLRSPACE		0x00000400
+#define DDCKEYCAPS_SRCBLTCLRSPACEYUV		0x00000800
+#define DDCKEYCAPS_SRCBLTYUV			0x00001000
+#define DDCKEYCAPS_SRCOVERLAY			0x00002000
+#define DDCKEYCAPS_SRCOVERLAYCLRSPACE		0x00004000
+#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV	0x00008000
+#define DDCKEYCAPS_SRCOVERLAYONEACTIVE		0x00010000
+#define DDCKEYCAPS_SRCOVERLAYYUV		0x00020000
+#define DDCKEYCAPS_NOCOSTOVERLAY		0x00040000
+
+typedef struct _DDPIXELFORMAT {
+    DWORD	dwSize;                 /* 0: size of structure */
+    DWORD	dwFlags;                /* 4: pixel format flags */
+    DWORD	dwFourCC;               /* 8: (FOURCC code) */
+    union {
+	DWORD	dwRGBBitCount;          /* C: how many bits per pixel */
+	DWORD	dwYUVBitCount;          /* C: how many bits per pixel */
+	DWORD	dwZBufferBitDepth;      /* C: how many bits for z buffers */
+	DWORD	dwAlphaBitDepth;        /* C: how many bits for alpha channels*/
+	DWORD	dwLuminanceBitCount;
+	DWORD	dwBumpBitCount;
+    } DUMMYUNIONNAME1;
+    union {
+	DWORD	dwRBitMask;             /* 10: mask for red bit*/
+	DWORD	dwYBitMask;             /* 10: mask for Y bits*/
+	DWORD	dwStencilBitDepth;
+	DWORD	dwLuminanceBitMask;
+	DWORD	dwBumpDuBitMask;
+    } DUMMYUNIONNAME2;
+    union {
+	DWORD	dwGBitMask;             /* 14: mask for green bits*/
+	DWORD	dwUBitMask;             /* 14: mask for U bits*/
+	DWORD	dwZBitMask;
+	DWORD	dwBumpDvBitMask;
+    } DUMMYUNIONNAME3;
+    union {
+	DWORD   dwBBitMask;             /* 18: mask for blue bits*/
+	DWORD   dwVBitMask;             /* 18: mask for V bits*/
+	DWORD	dwStencilBitMask;
+	DWORD	dwBumpLuminanceBitMask;
+    } DUMMYUNIONNAME4;
+    union {
+    	DWORD	dwRGBAlphaBitMask;	/* 1C: mask for alpha channel */
+    	DWORD	dwYUVAlphaBitMask;	/* 1C: mask for alpha channel */
+	DWORD	dwLuminanceAlphaBitMask;
+	DWORD	dwRGBZBitMask;		/* 1C: mask for Z channel */
+	DWORD	dwYUVZBitMask;		/* 1C: mask for Z channel */
+    } DUMMYUNIONNAME5;
+    					/* 20: next structure */
+} DDPIXELFORMAT,*LPDDPIXELFORMAT;
+
+#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \
+    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \
+    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+
+/* DDCAPS.dwFXCaps */
+#define DDFXCAPS_BLTALPHA               0x00000001
+#define DDFXCAPS_OVERLAYALPHA           0x00000004
+#define DDFXCAPS_BLTARITHSTRETCHYN	0x00000010
+#define DDFXCAPS_BLTARITHSTRETCHY	0x00000020
+#define DDFXCAPS_BLTMIRRORLEFTRIGHT	0x00000040
+#define DDFXCAPS_BLTMIRRORUPDOWN	0x00000080
+#define DDFXCAPS_BLTROTATION		0x00000100
+#define DDFXCAPS_BLTROTATION90		0x00000200
+#define DDFXCAPS_BLTSHRINKX		0x00000400
+#define DDFXCAPS_BLTSHRINKXN		0x00000800
+#define DDFXCAPS_BLTSHRINKY		0x00001000
+#define DDFXCAPS_BLTSHRINKYN		0x00002000
+#define DDFXCAPS_BLTSTRETCHX		0x00004000
+#define DDFXCAPS_BLTSTRETCHXN		0x00008000
+#define DDFXCAPS_BLTSTRETCHY		0x00010000
+#define DDFXCAPS_BLTSTRETCHYN		0x00020000
+#define DDFXCAPS_OVERLAYARITHSTRETCHY	0x00040000
+#define DDFXCAPS_OVERLAYARITHSTRETCHYN	0x00000008
+#define DDFXCAPS_OVERLAYSHRINKX		0x00080000
+#define DDFXCAPS_OVERLAYSHRINKXN	0x00100000
+#define DDFXCAPS_OVERLAYSHRINKY		0x00200000
+#define DDFXCAPS_OVERLAYSHRINKYN	0x00400000
+#define DDFXCAPS_OVERLAYSTRETCHX	0x00800000
+#define DDFXCAPS_OVERLAYSTRETCHXN	0x01000000
+#define DDFXCAPS_OVERLAYSTRETCHY	0x02000000
+#define DDFXCAPS_OVERLAYSTRETCHYN	0x04000000
+#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT	0x08000000
+#define DDFXCAPS_OVERLAYMIRRORUPDOWN	0x10000000
+
+#define DDFXCAPS_OVERLAYFILTER          DDFXCAPS_OVERLAYARITHSTRETCHY
+
+/* DDCAPS.dwFXAlphaCaps */
+#define DDFXALPHACAPS_BLTALPHAEDGEBLEND		0x00000001
+#define DDFXALPHACAPS_BLTALPHAPIXELS		0x00000002
+#define DDFXALPHACAPS_BLTALPHAPIXELSNEG		0x00000004
+#define DDFXALPHACAPS_BLTALPHASURFACES		0x00000008
+#define DDFXALPHACAPS_BLTALPHASURFACESNEG	0x00000010
+#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND	0x00000020
+#define DDFXALPHACAPS_OVERLAYALPHAPIXELS	0x00000040
+#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG	0x00000080
+#define DDFXALPHACAPS_OVERLAYALPHASURFACES	0x00000100
+#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG	0x00000200
+
+/* DDCAPS.dwPalCaps */
+#define DDPCAPS_4BIT			0x00000001
+#define DDPCAPS_8BITENTRIES		0x00000002
+#define DDPCAPS_8BIT			0x00000004
+#define DDPCAPS_INITIALIZE		0x00000008
+#define DDPCAPS_PRIMARYSURFACE		0x00000010
+#define DDPCAPS_PRIMARYSURFACELEFT	0x00000020
+#define DDPCAPS_ALLOW256		0x00000040
+#define DDPCAPS_VSYNC			0x00000080
+#define DDPCAPS_1BIT			0x00000100
+#define DDPCAPS_2BIT			0x00000200
+#define DDPCAPS_ALPHA                   0x00000400
+
+/* DDCAPS.dwSVCaps */
+/* the first 4 of these are now obsolete */
+#if DIRECTDRAW_VERSION >= 0x700	/* FIXME: I'm not sure when this switch occurred */
+#define DDSVCAPS_RESERVED1		0x00000001
+#define DDSVCAPS_RESERVED2		0x00000002
+#define DDSVCAPS_RESERVED3		0x00000004
+#define DDSVCAPS_RESERVED4		0x00000008
+#else
+#define DDSVCAPS_ENIGMA			0x00000001
+#define DDSVCAPS_FLICKER		0x00000002
+#define DDSVCAPS_REDBLUE		0x00000004
+#define DDSVCAPS_SPLIT			0x00000008
+#endif
+#define DDSVCAPS_STEREOSEQUENTIAL       0x00000010
+
+/* BitDepths */
+#define DDBD_1				0x00004000
+#define DDBD_2				0x00002000
+#define DDBD_4				0x00001000
+#define DDBD_8				0x00000800
+#define DDBD_16				0x00000400
+#define DDBD_24				0x00000200
+#define DDBD_32				0x00000100
+
+/* DDOVERLAYFX.dwDDFX */
+#define DDOVERFX_ARITHSTRETCHY		0x00000001
+#define DDOVERFX_MIRRORLEFTRIGHT	0x00000002
+#define DDOVERFX_MIRRORUPDOWN		0x00000004
+
+/* UpdateOverlay flags */
+#define DDOVER_ALPHADEST                        0x00000001
+#define DDOVER_ALPHADESTCONSTOVERRIDE           0x00000002
+#define DDOVER_ALPHADESTNEG                     0x00000004
+#define DDOVER_ALPHADESTSURFACEOVERRIDE         0x00000008
+#define DDOVER_ALPHAEDGEBLEND                   0x00000010
+#define DDOVER_ALPHASRC                         0x00000020
+#define DDOVER_ALPHASRCCONSTOVERRIDE            0x00000040
+#define DDOVER_ALPHASRCNEG                      0x00000080
+#define DDOVER_ALPHASRCSURFACEOVERRIDE          0x00000100
+#define DDOVER_HIDE                             0x00000200
+#define DDOVER_KEYDEST                          0x00000400
+#define DDOVER_KEYDESTOVERRIDE                  0x00000800
+#define DDOVER_KEYSRC                           0x00001000
+#define DDOVER_KEYSRCOVERRIDE                   0x00002000
+#define DDOVER_SHOW                             0x00004000
+#define DDOVER_ADDDIRTYRECT                     0x00008000
+#define DDOVER_REFRESHDIRTYRECTS                0x00010000
+#define DDOVER_REFRESHALL                       0x00020000
+#define DDOVER_DDFX                             0x00080000
+#define DDOVER_AUTOFLIP                         0x00100000
+#define DDOVER_BOB                              0x00200000
+#define DDOVER_OVERRIDEBOBWEAVE                 0x00400000
+#define DDOVER_INTERLEAVED                      0x00800000
+
+/* DDPIXELFORMAT.dwFlags */
+#define DDPF_ALPHAPIXELS		0x00000001
+#define DDPF_ALPHA			0x00000002
+#define DDPF_FOURCC			0x00000004
+#define DDPF_PALETTEINDEXED4		0x00000008
+#define DDPF_PALETTEINDEXEDTO8		0x00000010
+#define DDPF_PALETTEINDEXED8		0x00000020
+#define DDPF_RGB			0x00000040
+#define DDPF_COMPRESSED			0x00000080
+#define DDPF_RGBTOYUV			0x00000100
+#define DDPF_YUV			0x00000200
+#define DDPF_ZBUFFER			0x00000400
+#define DDPF_PALETTEINDEXED1		0x00000800
+#define DDPF_PALETTEINDEXED2		0x00001000
+#define DDPF_ZPIXELS			0x00002000
+#define DDPF_STENCILBUFFER              0x00004000
+#define DDPF_ALPHAPREMULT               0x00008000
+#define DDPF_LUMINANCE                  0x00020000
+#define DDPF_BUMPLUMINANCE              0x00040000
+#define DDPF_BUMPDUDV                   0x00080000
+
+/* SetCooperativeLevel dwFlags */
+#define DDSCL_FULLSCREEN		0x00000001
+#define DDSCL_ALLOWREBOOT		0x00000002
+#define DDSCL_NOWINDOWCHANGES		0x00000004
+#define DDSCL_NORMAL			0x00000008
+#define DDSCL_EXCLUSIVE			0x00000010
+#define DDSCL_ALLOWMODEX		0x00000040
+#define DDSCL_SETFOCUSWINDOW		0x00000080
+#define DDSCL_SETDEVICEWINDOW		0x00000100
+#define DDSCL_CREATEDEVICEWINDOW	0x00000200
+#define DDSCL_MULTITHREADED             0x00000400
+#define DDSCL_FPUSETUP                  0x00000800
+#define DDSCL_FPUPRESERVE               0x00001000
+
+
+/* DDSURFACEDESC.dwFlags */
+#define	DDSD_CAPS		0x00000001
+#define	DDSD_HEIGHT		0x00000002
+#define	DDSD_WIDTH		0x00000004
+#define	DDSD_PITCH		0x00000008
+#define	DDSD_BACKBUFFERCOUNT	0x00000020
+#define	DDSD_ZBUFFERBITDEPTH	0x00000040
+#define	DDSD_ALPHABITDEPTH	0x00000080
+#define	DDSD_LPSURFACE		0x00000800
+#define	DDSD_PIXELFORMAT	0x00001000
+#define	DDSD_CKDESTOVERLAY	0x00002000
+#define	DDSD_CKDESTBLT		0x00004000
+#define	DDSD_CKSRCOVERLAY	0x00008000
+#define	DDSD_CKSRCBLT		0x00010000
+#define	DDSD_MIPMAPCOUNT	0x00020000
+#define	DDSD_REFRESHRATE	0x00040000
+#define	DDSD_LINEARSIZE		0x00080000
+#define DDSD_TEXTURESTAGE       0x00100000
+#define DDSD_FVF                0x00200000
+#define DDSD_SRCVBHANDLE        0x00400000
+#define DDSD_DEPTH              0x00800000
+#define DDSD_ALL                0x00fff9ee
+
+/* EnumSurfaces flags */
+#define DDENUMSURFACES_ALL          0x00000001
+#define DDENUMSURFACES_MATCH        0x00000002
+#define DDENUMSURFACES_NOMATCH      0x00000004
+#define DDENUMSURFACES_CANBECREATED 0x00000008
+#define DDENUMSURFACES_DOESEXIST    0x00000010
+
+/* SetDisplayMode flags */
+#define DDSDM_STANDARDVGAMODE	0x00000001
+
+/* EnumDisplayModes flags */
+#define DDEDM_REFRESHRATES	0x00000001
+#define DDEDM_STANDARDVGAMODES	0x00000002
+
+/* WaitForVerticalDisplay flags */
+
+#define DDWAITVB_BLOCKBEGIN		0x00000001
+#define DDWAITVB_BLOCKBEGINEVENT	0x00000002
+#define DDWAITVB_BLOCKEND		0x00000004
+
+typedef struct _DDSURFACEDESC
+{
+	DWORD	dwSize;		/* 0: size of the DDSURFACEDESC structure*/
+	DWORD	dwFlags;	/* 4: determines what fields are valid*/
+	DWORD	dwHeight;	/* 8: height of surface to be created*/
+	DWORD	dwWidth;	/* C: width of input surface*/
+	union {
+		LONG	lPitch;	/* 10: distance to start of next line (return value only)*/
+		DWORD	dwLinearSize;
+	} DUMMYUNIONNAME1;
+	DWORD	dwBackBufferCount;/* 14: number of back buffers requested*/
+	union {
+		DWORD	dwMipMapCount;/* 18:number of mip-map levels requested*/
+		DWORD	dwZBufferBitDepth;/*18: depth of Z buffer requested*/
+		DWORD	dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/
+	} DUMMYUNIONNAME2;
+	DWORD	dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/
+	DWORD	dwReserved;	/* 20:reserved*/
+	void *lpSurface;	/* 24:pointer to the associated surface memory*/
+	DDCOLORKEY	ddckCKDestOverlay;/* 28: CK for dest overlay use*/
+	DDCOLORKEY	ddckCKDestBlt;	/* 30: CK for destination blt use*/
+	DDCOLORKEY	ddckCKSrcOverlay;/* 38: CK for source overlay use*/
+	DDCOLORKEY	ddckCKSrcBlt;	/* 40: CK for source blt use*/
+	DDPIXELFORMAT	ddpfPixelFormat;/* 48: pixel format description of the surface*/
+	DDSCAPS		ddsCaps;	/* 68: direct draw surface caps */
+} DDSURFACEDESC,*LPDDSURFACEDESC;
+
+typedef struct _DDSURFACEDESC2
+{
+	DWORD	dwSize;		/* 0: size of the DDSURFACEDESC2 structure*/
+	DWORD	dwFlags;	/* 4: determines what fields are valid*/
+	DWORD	dwHeight;	/* 8: height of surface to be created*/
+	DWORD	dwWidth;	/* C: width of input surface*/
+	union {
+		LONG	lPitch;	      /*10: distance to start of next line (return value only)*/
+		DWORD   dwLinearSize; /*10: formless late-allocated optimized surface size */
+	} DUMMYUNIONNAME1;
+	DWORD	dwBackBufferCount;/* 14: number of back buffers requested*/
+	union {
+		DWORD	dwMipMapCount;/* 18:number of mip-map levels requested*/
+		DWORD	dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/
+		DWORD   dwSrcVBHandle;/* 18:source used in VB::Optimize */
+	} DUMMYUNIONNAME2;
+	DWORD	dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/
+	DWORD	dwReserved;	/* 20:reserved*/
+	void *lpSurface;	/* 24:pointer to the associated surface memory*/
+	union {
+		DDCOLORKEY	ddckCKDestOverlay; /* 28: CK for dest overlay use*/
+		DWORD 		dwEmptyFaceColor;  /* 28: color for empty cubemap faces */
+	} DUMMYUNIONNAME3;
+	DDCOLORKEY	ddckCKDestBlt;	/* 30: CK for destination blt use*/
+	DDCOLORKEY	ddckCKSrcOverlay;/* 38: CK for source overlay use*/
+	DDCOLORKEY	ddckCKSrcBlt;	/* 40: CK for source blt use*/
+
+	union {
+		DDPIXELFORMAT	ddpfPixelFormat;/* 48: pixel format description of the surface*/
+		DWORD 		dwFVF;	/* 48: vertex format description of vertex buffers */
+	} DUMMYUNIONNAME4;
+	DDSCAPS2	ddsCaps;  /* 68: DDraw surface caps */
+	DWORD		dwTextureStage; /* 78: stage in multitexture cascade */
+} DDSURFACEDESC2,*LPDDSURFACEDESC2;
+
+/* DDCOLORCONTROL.dwFlags */
+#define DDCOLOR_BRIGHTNESS	0x00000001
+#define DDCOLOR_CONTRAST	0x00000002
+#define DDCOLOR_HUE		0x00000004
+#define DDCOLOR_SATURATION	0x00000008
+#define DDCOLOR_SHARPNESS	0x00000010
+#define DDCOLOR_GAMMA		0x00000020
+#define DDCOLOR_COLORENABLE	0x00000040
+
+typedef struct {
+	DWORD	dwSize;
+	DWORD	dwFlags;
+	LONG	lBrightness;
+	LONG	lContrast;
+	LONG	lHue;
+	LONG	lSaturation;
+	LONG	lSharpness;
+	LONG	lGamma;
+	LONG	lColorEnable;
+	DWORD	dwReserved1;
+} DDCOLORCONTROL,*LPDDCOLORCONTROL;
+
+typedef struct {
+	WORD	red[256];
+	WORD	green[256];
+	WORD	blue[256];
+} DDGAMMARAMP,*LPDDGAMMARAMP;
+
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKA)(GUID *guid, char *driver_description, char *driver_name, void *ctx);
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKW)(GUID *guid, WCHAR *driver_description, WCHAR *driver_name, void *ctx);
+DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACK)
+
+typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK)(DDSURFACEDESC *desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK2)(DDSURFACEDESC2 *desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK)(struct IDirectDrawSurface *surface,
+        DDSURFACEDESC *surface_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK2)(struct IDirectDrawSurface4 *surface,
+        DDSURFACEDESC2 *surface_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK7)(struct IDirectDrawSurface7 *surface,
+        DDSURFACEDESC2 *surface_desc, void *ctx);
+
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXA)(GUID *guid, char *driver_description,
+        char *driver_name, void *ctx, HMONITOR monitor);
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXW)(GUID *guid, WCHAR *driver_description,
+        WCHAR *driver_name, void *ctx, HMONITOR monitor);
+DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACKEX)
+
+HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA cb, void *ctx);
+HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW cb, void *ctx);
+#define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate)
+
+HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags);
+HRESULT WINAPI DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags);
+#define DirectDrawEnumerateEx WINELIB_NAME_AW(DirectDrawEnumerateEx)
+
+typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags);
+typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags);
+DECL_WINELIB_TYPE_AW(LPDIRECTDRAWENUMERATEEX)
+
+/* flags for DirectDrawEnumerateEx */
+#define DDENUM_ATTACHEDSECONDARYDEVICES	0x00000001
+#define DDENUM_DETACHEDSECONDARYDEVICES	0x00000002
+#define DDENUM_NONDISPLAYDEVICES	0x00000004
+
+/* flags for DirectDrawCreate or IDirectDraw::Initialize */
+#define DDCREATE_HARDWAREONLY   __MSABI_LONG(1)
+#define DDCREATE_EMULATIONONLY  __MSABI_LONG(2)
+
+typedef struct _DDBLTFX
+{
+    DWORD       dwSize;                         /* size of structure */
+    DWORD       dwDDFX;                         /* FX operations */
+    DWORD       dwROP;                          /* Win32 raster operations */
+    DWORD       dwDDROP;                        /* Raster operations new for DirectDraw */
+    DWORD       dwRotationAngle;                /* Rotation angle for blt */
+    DWORD       dwZBufferOpCode;                /* ZBuffer compares */
+    DWORD       dwZBufferLow;                   /* Low limit of Z buffer */
+    DWORD       dwZBufferHigh;                  /* High limit of Z buffer */
+    DWORD       dwZBufferBaseDest;              /* Destination base value */
+    DWORD       dwZDestConstBitDepth;           /* Bit depth used to specify Z constant for destination */
+    union
+    {
+        DWORD   dwZDestConst;                   /* Constant to use as Z buffer for dest */
+        struct IDirectDrawSurface *lpDDSZBufferDest; /* Surface to use as Z buffer for dest */
+    } DUMMYUNIONNAME1;
+    DWORD       dwZSrcConstBitDepth;            /* Bit depth used to specify Z constant for source */
+    union
+    {
+        DWORD   dwZSrcConst;                    /* Constant to use as Z buffer for src */
+        struct IDirectDrawSurface *lpDDSZBufferSrc; /* Surface to use as Z buffer for src */
+    } DUMMYUNIONNAME2;
+    DWORD       dwAlphaEdgeBlendBitDepth;       /* Bit depth used to specify constant for alpha edge blend */
+    DWORD       dwAlphaEdgeBlend;               /* Alpha for edge blending */
+    DWORD       dwReserved;
+    DWORD       dwAlphaDestConstBitDepth;       /* Bit depth used to specify alpha constant for destination */
+    union
+    {
+        DWORD   dwAlphaDestConst;               /* Constant to use as Alpha Channel */
+        struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as Alpha Channel */
+    } DUMMYUNIONNAME3;
+    DWORD       dwAlphaSrcConstBitDepth;        /* Bit depth used to specify alpha constant for source */
+    union
+    {
+        DWORD   dwAlphaSrcConst;                /* Constant to use as Alpha Channel */
+        struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as Alpha Channel */
+    } DUMMYUNIONNAME4;
+    union
+    {
+        DWORD   dwFillColor;                    /* color in RGB or Palettized */
+        DWORD   dwFillDepth;                    /* depth value for z-buffer */
+        DWORD   dwFillPixel;                    /* pixel val for RGBA or RGBZ */
+        struct IDirectDrawSurface *lpDDSPattern; /* Surface to use as pattern */
+    } DUMMYUNIONNAME5;
+    DDCOLORKEY  ddckDestColorkey;               /* DestColorkey override */
+    DDCOLORKEY  ddckSrcColorkey;                /* SrcColorkey override */
+} DDBLTFX,*LPDDBLTFX;
+
+/* dwDDFX */
+/* arithmetic stretching along y axis */
+#define DDBLTFX_ARITHSTRETCHY			0x00000001
+/* mirror on y axis */
+#define DDBLTFX_MIRRORLEFTRIGHT			0x00000002
+/* mirror on x axis */
+#define DDBLTFX_MIRRORUPDOWN			0x00000004
+/* do not tear */
+#define DDBLTFX_NOTEARING			0x00000008
+/* 180 degrees clockwise rotation */
+#define DDBLTFX_ROTATE180			0x00000010
+/* 270 degrees clockwise rotation */
+#define DDBLTFX_ROTATE270			0x00000020
+/* 90 degrees clockwise rotation */
+#define DDBLTFX_ROTATE90			0x00000040
+/* dwZBufferLow and dwZBufferHigh specify limits to the copied Z values */
+#define DDBLTFX_ZBUFFERRANGE			0x00000080
+/* add dwZBufferBaseDest to every source z value before compare */
+#define DDBLTFX_ZBUFFERBASEDEST			0x00000100
+
+typedef struct _DDOVERLAYFX
+{
+    DWORD       dwSize;                         /* size of structure */
+    DWORD       dwAlphaEdgeBlendBitDepth;       /* Bit depth used to specify constant for alpha edge blend */
+    DWORD       dwAlphaEdgeBlend;               /* Constant to use as alpha for edge blend */
+    DWORD       dwReserved;
+    DWORD       dwAlphaDestConstBitDepth;       /* Bit depth used to specify alpha constant for destination */
+    union
+    {
+        DWORD   dwAlphaDestConst;               /* Constant to use as alpha channel for dest */
+        struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as alpha channel for dest */
+    } DUMMYUNIONNAME1;
+    DWORD       dwAlphaSrcConstBitDepth;        /* Bit depth used to specify alpha constant for source */
+    union
+    {
+        DWORD   dwAlphaSrcConst;                /* Constant to use as alpha channel for src */
+        struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as alpha channel for src */
+    } DUMMYUNIONNAME2;
+    DDCOLORKEY  dckDestColorkey;                /* DestColorkey override */
+    DDCOLORKEY  dckSrcColorkey;                 /* DestColorkey override */
+    DWORD       dwDDFX;                         /* Overlay FX */
+    DWORD       dwFlags;                        /* flags */
+} DDOVERLAYFX,*LPDDOVERLAYFX;
+
+typedef struct _DDBLTBATCH
+{
+    RECT *lprDest;
+    struct IDirectDrawSurface *lpDDSSrc;
+    RECT *lprSrc;
+    DWORD dwFlags;
+    DDBLTFX *lpDDBltFx;
+} DDBLTBATCH,*LPDDBLTBATCH;
+
+#define MAX_DDDEVICEID_STRING          512
+
+#define DDGDI_GETHOSTIDENTIFIER 1
+
+typedef struct tagDDDEVICEIDENTIFIER {
+  char    szDriver[MAX_DDDEVICEID_STRING];
+  char    szDescription[MAX_DDDEVICEID_STRING];
+  LARGE_INTEGER  liDriverVersion;
+  DWORD   dwVendorId;
+  DWORD   dwDeviceId;
+  DWORD   dwSubSysId;
+  DWORD   dwRevision;
+  GUID    guidDeviceIdentifier;
+} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER;
+
+typedef struct tagDDDEVICEIDENTIFIER2 {
+  char    szDriver[MAX_DDDEVICEID_STRING];	/* user readable driver name */
+  char    szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */
+  LARGE_INTEGER  liDriverVersion;		/* driver version */
+  DWORD   dwVendorId;				/* vendor ID, zero if unknown */
+  DWORD   dwDeviceId;				/* chipset ID, zero if unknown */
+  DWORD   dwSubSysId;				/* board ID, zero if unknown */
+  DWORD   dwRevision;				/* chipset version, zero if unknown */
+  GUID    guidDeviceIdentifier;			/* unique ID for this driver/chipset combination */
+  DWORD   dwWHQLLevel;				/* Windows Hardware Quality Lab certification level */
+} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2;
+
+/*****************************************************************************
+ * IDirectDrawPalette interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirectDrawPalette
+DECLARE_INTERFACE_(IDirectDrawPalette,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawPalette methods ***/
+    STDMETHOD(GetCaps)(THIS_ LPDWORD lpdwCaps) PURE;
+    STDMETHOD(GetEntries)(THIS_ DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) PURE;
+    STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags, PALETTEENTRY *color_table) PURE;
+    STDMETHOD(SetEntries)(THIS_ DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawPalette_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawPalette_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawPalette methods ***/
+#define IDirectDrawPalette_GetCaps(p,a)          (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->lpVtbl->GetEntries(p,a,b,c,d)
+#define IDirectDrawPalette_Initialize(p,a,b,c)   (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->lpVtbl->SetEntries(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawPalette_AddRef(p)             (p)->AddRef()
+#define IDirectDrawPalette_Release(p)            (p)->Release()
+/*** IDirectDrawPalette methods ***/
+#define IDirectDrawPalette_GetCaps(p,a)          (p)->GetCaps(a)
+#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->GetEntries(a,b,c,d)
+#define IDirectDrawPalette_Initialize(p,a,b,c)   (p)->Initialize(a,b,c)
+#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->SetEntries(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawClipper interface
+ */
+#define INTERFACE IDirectDrawClipper
+DECLARE_INTERFACE_(IDirectDrawClipper,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawClipper methods ***/
+    STDMETHOD(GetClipList)(THIS_ LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) PURE;
+    STDMETHOD(GetHWnd)(THIS_ HWND *lphWnd) PURE;
+    STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags) PURE;
+    STDMETHOD(IsClipListChanged)(THIS_ BOOL *lpbChanged) PURE;
+    STDMETHOD(SetClipList)(THIS_ LPRGNDATA lpClipList, DWORD dwFlags) PURE;
+    STDMETHOD(SetHWnd)(THIS_ DWORD dwFlags, HWND hWnd) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawClipper_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawClipper_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawClipper methods ***/
+#define IDirectDrawClipper_GetClipList(p,a,b,c)   (p)->lpVtbl->GetClipList(p,a,b,c)
+#define IDirectDrawClipper_GetHWnd(p,a)           (p)->lpVtbl->GetHWnd(p,a)
+#define IDirectDrawClipper_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->lpVtbl->IsClipListChanged(p,a)
+#define IDirectDrawClipper_SetClipList(p,a,b)     (p)->lpVtbl->SetClipList(p,a,b)
+#define IDirectDrawClipper_SetHWnd(p,a,b)         (p)->lpVtbl->SetHWnd(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawClipper_AddRef(p)             (p)->AddRef()
+#define IDirectDrawClipper_Release(p)            (p)->Release()
+/*** IDirectDrawClipper methods ***/
+#define IDirectDrawClipper_GetClipList(p,a,b,c)   (p)->GetClipList(a,b,c)
+#define IDirectDrawClipper_GetHWnd(p,a)           (p)->GetHWnd(a)
+#define IDirectDrawClipper_Initialize(p,a,b)      (p)->Initialize(a,b)
+#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->IsClipListChanged(a)
+#define IDirectDrawClipper_SetClipList(p,a,b)     (p)->SetClipList(a,b)
+#define IDirectDrawClipper_SetHWnd(p,a,b)         (p)->SetHWnd(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw interface
+ */
+#define INTERFACE IDirectDraw
+DECLARE_INTERFACE_(IDirectDraw,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDraw methods ***/
+    STDMETHOD(Compact)(THIS) PURE;
+    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+            IDirectDrawPalette **palette, IUnknown *outer) PURE;
+    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,
+            struct IDirectDrawSurface **surface, IUnknown *outer) PURE;
+    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,
+            struct IDirectDrawSurface **dst_surface) PURE;
+    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+            void *ctx, LPDDENUMMODESCALLBACK cb) PURE;
+    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+            void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+    STDMETHOD(FlipToGDISurface)(THIS) PURE;
+    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;
+    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+    STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) PURE;
+    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDraw_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectDraw_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw_SetDisplayMode(p,a,b,c)     (p)->lpVtbl->SetDisplayMode(p,a,b,c)
+#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw_AddRef(p)             (p)->AddRef()
+#define IDirectDraw_Release(p)            (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw_Compact(p)                  (p)->Compact()
+#define IDirectDraw_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)
+#define IDirectDraw_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)
+#define IDirectDraw_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)
+#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw_FlipToGDISurface(p)         (p)->FlipToGDISurface()
+#define IDirectDraw_GetCaps(p,a,b)              (p)->GetCaps(a,b)
+#define IDirectDraw_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)
+#define IDirectDraw_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)
+#define IDirectDraw_GetGDISurface(p,a)          (p)->GetGDISurface(a)
+#define IDirectDraw_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)
+#define IDirectDraw_GetScanLine(p,a)            (p)->GetScanLine(a)
+#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw_Initialize(p,a)             (p)->Initialize(a)
+#define IDirectDraw_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()
+#define IDirectDraw_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw_SetDisplayMode(p,a,b,c)     (p)->SetDisplayMode(a,b,c)
+#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+#endif
+
+
+/* flags for Lock() */
+#define DDLOCK_SURFACEMEMORYPTR         __MSABI_LONG(0x00000000)
+#define DDLOCK_WAIT                     __MSABI_LONG(0x00000001)
+#define DDLOCK_EVENT                    __MSABI_LONG(0x00000002)
+#define DDLOCK_READONLY                 __MSABI_LONG(0x00000010)
+#define DDLOCK_WRITEONLY                __MSABI_LONG(0x00000020)
+#define DDLOCK_NOSYSLOCK                __MSABI_LONG(0x00000800)
+#define DDLOCK_NOOVERWRITE              __MSABI_LONG(0x00001000)
+#define DDLOCK_DISCARDCONTENTS          __MSABI_LONG(0x00002000)
+#define DDLOCK_OKTOSWAP                 __MSABI_LONG(0x00002000)
+#define DDLOCK_DONOTWAIT                __MSABI_LONG(0x00004000)
+#define DDLOCK_HASVOLUMETEXTUREBOXRECT  __MSABI_LONG(0x00008000)
+#define DDLOCK_NODIRTYUPDATE            __MSABI_LONG(0x00010000)
+
+
+/*****************************************************************************
+ * IDirectDraw2 interface
+ */
+/* Note: IDirectDraw2 cannot derive from IDirectDraw because the number of
+ * arguments of SetDisplayMode has changed !
+ */
+#define INTERFACE IDirectDraw2
+DECLARE_INTERFACE_(IDirectDraw2,IUnknown)
+{
+          /*** IUnknown methods ***/
+/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;
+          /*** IDirectDraw2 methods ***/
+/*0c*/    STDMETHOD(Compact)(THIS) PURE;
+/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+                IDirectDrawPalette **palette, IUnknown *outer) PURE;
+/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,
+                struct IDirectDrawSurface **surface, IUnknown *outer) PURE;
+/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,
+                struct IDirectDrawSurface **dst_surface) PURE;
+/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+                void *ctx, LPDDENUMMODESCALLBACK cb) PURE;
+/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+                void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;
+/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+          /* added in v2 */
+/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDraw2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw2_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectDraw2_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw2_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw2_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw2_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw2_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw2_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw2_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw2_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw2_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw2_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw2_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw2_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw2_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw2_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw2_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw2_AddRef(p)             (p)->AddRef()
+#define IDirectDraw2_Release(p)            (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw2_Compact(p)                  (p)->Compact()
+#define IDirectDraw2_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)
+#define IDirectDraw2_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw2_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)
+#define IDirectDraw2_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)
+#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw2_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw2_FlipToGDISurface(p)         (p)->FlipToGDISurface()
+#define IDirectDraw2_GetCaps(p,a,b)              (p)->GetCaps(a,b)
+#define IDirectDraw2_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)
+#define IDirectDraw2_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)
+#define IDirectDraw2_GetGDISurface(p,a)          (p)->GetGDISurface(a)
+#define IDirectDraw2_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)
+#define IDirectDraw2_GetScanLine(p,a)            (p)->GetScanLine(a)
+#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw2_Initialize(p,a)             (p)->Initialize(a)
+#define IDirectDraw2_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()
+#define IDirectDraw2_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw3 interface
+ */
+#define INTERFACE IDirectDraw3
+DECLARE_INTERFACE_(IDirectDraw3,IUnknown)
+{
+          /*** IUnknown methods ***/
+/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;
+          /*** IDirectDraw2 methods ***/
+/*0c*/    STDMETHOD(Compact)(THIS) PURE;
+/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+                IDirectDrawPalette **lplpDDPalette, IUnknown *outer) PURE;
+/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,
+                struct IDirectDrawSurface **surface, IUnknown *outer) PURE;
+/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,
+                struct IDirectDrawSurface **dst_surface) PURE;
+/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+                void *ctx, LPDDENUMMODESCALLBACK cb) PURE;
+/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+                void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;
+/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+          /* added in v2 */
+/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE;
+          /* added in v3 */
+/*60*/    STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface **surface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDraw3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw3_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectDraw3_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw3_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw3_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw3_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw3_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw3_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw3_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw3_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw3_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw3_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw3_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw3_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw3_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw3_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw3_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+/*** IDirectDraw3 methods ***/
+#define IDirectDraw3_GetSurfaceFromDC(p,a,b)    (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw3_AddRef(p)             (p)->AddRef()
+#define IDirectDraw3_Release(p)            (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw3_Compact(p)                  (p)->Compact()
+#define IDirectDraw3_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)
+#define IDirectDraw3_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw3_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)
+#define IDirectDraw3_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)
+#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw3_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw3_FlipToGDISurface(p)         (p)->FlipToGDISurface()
+#define IDirectDraw3_GetCaps(p,a,b)              (p)->GetCaps(a,b)
+#define IDirectDraw3_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)
+#define IDirectDraw3_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)
+#define IDirectDraw3_GetGDISurface(p,a)          (p)->GetGDISurface(a)
+#define IDirectDraw3_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)
+#define IDirectDraw3_GetScanLine(p,a)            (p)->GetScanLine(a)
+#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw3_Initialize(p,a)             (p)->Initialize(a)
+#define IDirectDraw3_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()
+#define IDirectDraw3_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+/*** IDirectDraw3 methods ***/
+#define IDirectDraw3_GetSurfaceFromDC(p,a,b)    (p)->GetSurfaceFromDC(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw4 interface
+ */
+#define INTERFACE IDirectDraw4
+DECLARE_INTERFACE_(IDirectDraw4,IUnknown)
+{
+          /*** IUnknown methods ***/
+/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;
+          /*** IDirectDraw4 methods ***/
+/*0c*/    STDMETHOD(Compact)(THIS) PURE;
+/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+                IDirectDrawPalette **palette, IUnknown *outer) PURE;
+/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc,
+                struct IDirectDrawSurface4 **surface, IUnknown *outer) PURE;
+/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface4 *src_surface,
+                struct IDirectDrawSurface4 **dst_surface) PURE;
+/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+                void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE;
+/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+                void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;
+/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface4 **surface) PURE;
+/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+          /* added in v2 */
+/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE;
+          /* added in v4 */
+/*60*/    STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface4 **surface) PURE;
+/*64*/    STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
+/*68*/    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+/*6c*/    STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER *identifier, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw4_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDraw4_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw4_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectDraw4_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw4_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw4_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw4_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw4_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw4_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw4_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw4_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw4_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw4_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw4_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw4_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw4_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw4_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw4_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+/*** IDirectDraw4 methods ***/
+#define IDirectDraw4_GetSurfaceFromDC(p,a,b)    (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
+#define IDirectDraw4_RestoreAllSurfaces(p)      (p)->lpVtbl->RestoreAllSurfaces(p)
+#define IDirectDraw4_TestCooperativeLevel(p)    (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw4_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw4_AddRef(p)             (p)->AddRef()
+#define IDirectDraw4_Release(p)            (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw4_Compact(p)                  (p)->Compact()
+#define IDirectDraw4_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)
+#define IDirectDraw4_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw4_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)
+#define IDirectDraw4_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)
+#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw4_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw4_FlipToGDISurface(p)         (p)->FlipToGDISurface()
+#define IDirectDraw4_GetCaps(p,a,b)              (p)->GetCaps(a,b)
+#define IDirectDraw4_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)
+#define IDirectDraw4_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)
+#define IDirectDraw4_GetGDISurface(p,a)          (p)->GetGDISurface(a)
+#define IDirectDraw4_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)
+#define IDirectDraw4_GetScanLine(p,a)            (p)->GetScanLine(a)
+#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw4_Initialize(p,a)             (p)->Initialize(a)
+#define IDirectDraw4_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()
+#define IDirectDraw4_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+/*** IDirectDraw4 methods ***/
+#define IDirectDraw4_GetSurfaceFromDC(p,a,b)    (p)->GetSurfaceFromDC(a,b)
+#define IDirectDraw4_RestoreAllSurfaces(pc)     (p)->RestoreAllSurfaces()
+#define IDirectDraw4_TestCooperativeLevel(p)    (p)->TestCooperativeLevel()
+#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw7 interface
+ */
+/* Note: IDirectDraw7 cannot derive from IDirectDraw4; it is even documented
+ * as not interchangeable with earlier DirectDraw interfaces.
+ */
+#define INTERFACE IDirectDraw7
+DECLARE_INTERFACE_(IDirectDraw7,IUnknown)
+{
+          /*** IUnknown methods ***/
+/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;
+          /*** IDirectDraw7 methods ***/
+/*0c*/    STDMETHOD(Compact)(THIS) PURE;
+/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+                IDirectDrawPalette **palette, IUnknown *outer) PURE;
+/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc,
+                struct IDirectDrawSurface7 **surface, IUnknown *outer) PURE;
+/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface7 *src_surface,
+                struct IDirectDrawSurface7 **dst_surface) PURE;
+/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+                void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE;
+/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+                void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;
+/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface7 **surface) PURE;
+/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+          /* added in v2 */
+/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE;
+          /* added in v4 */
+/*60*/    STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface7 **surface) PURE;
+/*64*/    STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
+/*68*/    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+/*6c*/    STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER2 *identifier, DWORD flags) PURE;
+          /* added in v7 */
+/*70*/    STDMETHOD(StartModeTest)(THIS_ LPSIZE pModes, DWORD dwNumModes, DWORD dwFlags) PURE;
+/*74*/    STDMETHOD(EvaluateMode)(THIS_ DWORD dwFlags, DWORD  *pTimeout) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw7_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDraw7_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw7_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectDraw7_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw7_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw7_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw7_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw7_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw7_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw7_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw7_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw7_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw7_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw7_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw7_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw7_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw7_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw7_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** added in IDirectDraw2 ***/
+#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+/*** added in IDirectDraw4 ***/
+#define IDirectDraw7_GetSurfaceFromDC(p,a,b)    (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
+#define IDirectDraw7_RestoreAllSurfaces(p)     (p)->lpVtbl->RestoreAllSurfaces(p)
+#define IDirectDraw7_TestCooperativeLevel(p)    (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
+/*** added in IDirectDraw 7 ***/
+#define IDirectDraw7_StartModeTest(p,a,b,c)     (p)->lpVtbl->StartModeTest(p,a,b,c)
+#define IDirectDraw7_EvaluateMode(p,a,b)        (p)->lpVtbl->EvaluateMode(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw7_AddRef(p)             (p)->AddRef()
+#define IDirectDraw7_Release(p)            (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw7_Compact(p)                  (p)->Compact()
+#define IDirectDraw7_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)
+#define IDirectDraw7_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw7_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)
+#define IDirectDraw7_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)
+#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw7_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw7_FlipToGDISurface(p)         (p)->FlipToGDISurface()
+#define IDirectDraw7_GetCaps(p,a,b)              (p)->GetCaps(a,b)
+#define IDirectDraw7_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)
+#define IDirectDraw7_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)
+#define IDirectDraw7_GetGDISurface(p,a)          (p)->GetGDISurface(a)
+#define IDirectDraw7_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)
+#define IDirectDraw7_GetScanLine(p,a)            (p)->GetScanLine(a)
+#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw7_Initialize(p,a)             (p)->Initialize(a)
+#define IDirectDraw7_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()
+#define IDirectDraw7_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** added in IDirectDraw2 ***/
+#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+/*** added in IDirectDraw4 ***/
+#define IDirectDraw7_GetSurfaceFromDC(p,a,b)    (p)->GetSurfaceFromDC(a,b)
+#define IDirectDraw7_RestoreAllSurfaces(p)     (p)->RestoreAllSurfaces()
+#define IDirectDraw7_TestCooperativeLevel(p)    (p)->TestCooperativeLevel()
+#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b)
+/*** added in IDirectDraw 7 ***/
+#define IDirectDraw7_StartModeTest(p,a,b,c)     (p)->StartModeTest(a,b,c)
+#define IDirectDraw7_EvaluateMode(p,a,b)        (p)->EvaluateMode(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface interface
+ */
+#define INTERFACE IDirectDrawSurface
+DECLARE_INTERFACE_(IDirectDrawSurface,IUnknown)
+{
+          /*** IUnknown methods ***/
+/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;
+          /*** IDirectDrawSurface methods ***/
+/*0c*/    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface *attachment) PURE;
+/*10*/    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+/*14*/    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface *src_surface, RECT *src_rect,
+                DWORD flags, DDBLTFX *fx) PURE;
+/*18*/    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+/*1c*/    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface *src_surface,
+                RECT *src_rect, DWORD flags) PURE;
+/*20*/    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface *attachment) PURE;
+/*24*/    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*28*/    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*2c*/    STDMETHOD(Flip)(THIS_ IDirectDrawSurface *dst_surface, DWORD flags) PURE;
+/*30*/    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface **attachment) PURE;
+/*34*/    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+/*38*/    STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;
+/*3c*/    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+/*40*/    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+/*44*/    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+/*48*/    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+/*4c*/    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+/*50*/    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+/*54*/    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+/*58*/    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+/*5c*/    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;
+/*60*/    STDMETHOD(IsLost)(THIS) PURE;
+/*64*/    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;
+/*68*/    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+/*6c*/    STDMETHOD(Restore)(THIS) PURE;
+/*70*/    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+/*74*/    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+/*78*/    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+/*7c*/    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+/*80*/    STDMETHOD(Unlock)(THIS_ void *data) PURE;
+/*84*/    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface *dst_surface,
+                RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE;
+/*88*/    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+/*8c*/    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface *reference_surface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface methods ***/
+#define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface_Restore(p)                   (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface_AddRef(p)             (p)->AddRef()
+#define IDirectDrawSurface_Release(p)            (p)->Release()
+/*** IDirectDrawSurface methods ***/
+#define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface_Flip(p,a,b)                  (p)->Flip(a,b)
+#define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface_GetBltStatus(p,a)            (p)->GetBltStatus(a)
+#define IDirectDrawSurface_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectDrawSurface_GetClipper(p,a)              (p)->GetClipper(a)
+#define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
+#define IDirectDrawSurface_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
+#define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface_GetPalette(p,a)              (p)->GetPalette(a)
+#define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
+#define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface_Initialize(p,a,b)            (p)->Initialize(a,b)
+#define IDirectDrawSurface_IsLost(p)                    (p)->IsLost()
+#define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#define IDirectDrawSurface_Restore(p)                   (p)->Restore()
+#define IDirectDrawSurface_SetClipper(p,a)              (p)->SetClipper(a)
+#define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
+#define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface_SetPalette(p,a)              (p)->SetPalette(a)
+#define IDirectDrawSurface_Unlock(p,a)                  (p)->Unlock(a)
+#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface2 interface
+ */
+/* Cannot inherit from IDirectDrawSurface because the LPDIRECTDRAWSURFACE parameters
+ * have been converted to LPDIRECTDRAWSURFACE2.
+ */
+#define INTERFACE IDirectDrawSurface2
+DECLARE_INTERFACE_(IDirectDrawSurface2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawSurface2 methods ***/
+    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface2 *attachment) PURE;
+    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface2 *src_surface, RECT *src_rect,
+            DWORD flags, DDBLTFX *fx) PURE;
+    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface2 *src_surface,
+            RECT *src_rect, DWORD flags) PURE;
+    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface2 *attachment) PURE;
+    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+    STDMETHOD(Flip)(THIS_ IDirectDrawSurface2 *dst_surface, DWORD flags) PURE;
+    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface2 **attachment) PURE;
+    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;
+    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;
+    STDMETHOD(IsLost)(THIS) PURE;
+    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+    STDMETHOD(Restore)(THIS) PURE;
+    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+    STDMETHOD(Unlock)(THIS_ void *data) PURE;
+    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface2 *dst_surface, RECT *dst_rect,
+            DWORD flags, DDOVERLAYFX *fx) PURE;
+    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface2 *reference_surface) PURE;
+    /* added in v2 */
+    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface2_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface2_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface2_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface2_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface2_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface2_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface2_IsLost(p)                    (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface2_Restore(p)                   (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface2_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface2_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface2_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface2_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface2_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface2_AddRef(p)             (p)->AddRef()
+#define IDirectDrawSurface2_Release(p)            (p)->Release()
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface2_Flip(p,a,b)                  (p)->Flip(a,b)
+#define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->GetBltStatus(a)
+#define IDirectDrawSurface2_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectDrawSurface2_GetClipper(p,a)              (p)->GetClipper(a)
+#define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
+#define IDirectDrawSurface2_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
+#define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface2_GetPalette(p,a)              (p)->GetPalette(a)
+#define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
+#define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface2_Initialize(p,a,b)            (p)->Initialize(a,b)
+#define IDirectDrawSurface2_IsLost(p)                    (p)->IsLost()
+#define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#define IDirectDrawSurface2_Restore(p)                   (p)->Restore()
+#define IDirectDrawSurface2_SetClipper(p,a)              (p)->SetClipper(a)
+#define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
+#define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface2_SetPalette(p,a)              (p)->SetPalette(a)
+#define IDirectDrawSurface2_Unlock(p,a)                  (p)->Unlock(a)
+#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface2_PageLock(p,a)       (p)->PageLock(a)
+#define IDirectDrawSurface2_PageUnlock(p,a)     (p)->PageUnlock(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface3 interface
+ */
+/* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters
+ * have been converted to LPDIRECTDRAWSURFACE3.
+ */
+#define INTERFACE IDirectDrawSurface3
+DECLARE_INTERFACE_(IDirectDrawSurface3,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawSurface3 methods ***/
+    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface3 *attachment) PURE;
+    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+    STDMETHOD(Blt)(THIS_ RECT *dst_rest, IDirectDrawSurface3 *src_surface, RECT *src_rect,
+            DWORD flags, DDBLTFX *fx) PURE;
+    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface3 *src_surface,
+            RECT *src_rect, DWORD flags) PURE;
+    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface3 *attachment) PURE;
+    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+    STDMETHOD(Flip)(THIS_ IDirectDrawSurface3 *dst_surface, DWORD flags) PURE;
+    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface3 **attachment) PURE;
+    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;
+    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;
+    STDMETHOD(IsLost)(THIS) PURE;
+    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+    STDMETHOD(Restore)(THIS) PURE;
+    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+    STDMETHOD(Unlock)(THIS_ void *data) PURE;
+    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface3 *dst_surface, RECT *dst_rect,
+            DWORD flags, DDOVERLAYFX *fx) PURE;
+    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface3 *reference_surface) PURE;
+    /* added in v2 */
+    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+    /* added in v3 */
+    STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface3_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface3_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface3_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface3_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface3_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface3_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface3_IsLost(p)                    (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface3_Restore(p)                   (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface3_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface3_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface3_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface3_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface3_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface3_AddRef(p)             (p)->AddRef()
+#define IDirectDrawSurface3_Release(p)            (p)->Release()
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface3_Flip(p,a,b)                  (p)->Flip(a,b)
+#define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->GetBltStatus(a)
+#define IDirectDrawSurface3_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectDrawSurface3_GetClipper(p,a)              (p)->GetClipper(a)
+#define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
+#define IDirectDrawSurface3_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
+#define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface3_GetPalette(p,a)              (p)->GetPalette(a)
+#define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
+#define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface3_Initialize(p,a,b)            (p)->Initialize(a,b)
+#define IDirectDrawSurface3_IsLost(p)                    (p)->IsLost()
+#define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#define IDirectDrawSurface3_Restore(p)                   (p)->Restore()
+#define IDirectDrawSurface3_SetClipper(p,a)              (p)->SetClipper(a)
+#define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
+#define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface3_SetPalette(p,a)              (p)->SetPalette(a)
+#define IDirectDrawSurface3_Unlock(p,a)                  (p)->Unlock(a)
+#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface3_PageLock(p,a)       (p)->PageLock(a)
+#define IDirectDrawSurface3_PageUnlock(p,a)     (p)->PageUnlock(a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface4 interface
+ */
+/* Cannot inherit from IDirectDrawSurface2 because DDSCAPS changed to DDSCAPS2.
+ */
+#define INTERFACE IDirectDrawSurface4
+DECLARE_INTERFACE_(IDirectDrawSurface4,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawSurface4 methods ***/
+    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface4 *attachment) PURE;
+    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface4 *src_surface, RECT *src_rect,
+            DWORD flags, DDBLTFX *fx) PURE;
+    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface4 *src_surface,
+            RECT *src_rect, DWORD flags) PURE;
+    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface4 *attachment) PURE;
+    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;
+    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;
+    STDMETHOD(Flip)(THIS_ IDirectDrawSurface4 *dst_surface, DWORD flags) PURE;
+    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface4 **attachment) PURE;
+    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE;
+    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE;
+    STDMETHOD(IsLost)(THIS) PURE;
+    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+    STDMETHOD(Restore)(THIS) PURE;
+    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+    STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE;
+    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface4 *dst_surface, RECT *dst_rect,
+            DWORD flags, DDOVERLAYFX *fx) PURE;
+    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface4 *reference_surface) PURE;
+    /* added in v2 */
+    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+    /* added in v3 */
+    STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE;
+    /* added in v4 */
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE;
+    STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE;
+    STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface4_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface4_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface4_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface4_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface4_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface4_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface4_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface4_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface4_IsLost(p)                    (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface4_Restore(p)                   (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface4_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface4_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface4_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface4_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface4_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirectDrawSurface4_GetPrivateData(p,a,b,c)   (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirectDrawSurface4_FreePrivateData(p,a)      (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirectDrawSurface4_GetUniquenessValue(p,a)   (p)->lpVtbl->GetUniquenessValue(p,a)
+#define IDirectDrawSurface4_ChangeUniquenessValue(p)  (p)->lpVtbl->ChangeUniquenessValue(p)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface4_AddRef(p)             (p)->AddRef()
+#define IDirectDrawSurface4_Release(p)            (p)->Release()
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface4_Flip(p,a,b)                  (p)->Flip(a,b)
+#define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->GetBltStatus(a)
+#define IDirectDrawSurface4_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectDrawSurface4_GetClipper(p,a)              (p)->GetClipper(a)
+#define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
+#define IDirectDrawSurface4_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
+#define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface4_GetPalette(p,a)              (p)->GetPalette(a)
+#define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
+#define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface4_Initialize(p,a,b)            (p)->Initialize(a,b)
+#define IDirectDrawSurface4_IsLost(p)                    (p)->IsLost()
+#define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#define IDirectDrawSurface4_Restore(p)                   (p)->Restore()
+#define IDirectDrawSurface4_SetClipper(p,a)              (p)->SetClipper(a)
+#define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
+#define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface4_SetPalette(p,a)              (p)->SetPalette(a)
+#define IDirectDrawSurface4_Unlock(p,a)                  (p)->Unlock(a)
+#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface4_PageLock(p,a)       (p)->PageLock(a)
+#define IDirectDrawSurface4_PageUnlock(p,a)     (p)->PageUnlock(a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirectDrawSurface4_GetPrivateData(p,a,b,c)   (p)->GetPrivateData(a,b,c)
+#define IDirectDrawSurface4_FreePrivateData(p,a)      (p)->FreePrivateData(a)
+#define IDirectDrawSurface4_GetUniquenessValue(p,a)   (p)->GetUniquenessValue(a)
+#define IDirectDrawSurface4_ChangeUniquenessValue(p)  (p)->ChangeUniquenessValue()
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface7 interface
+ */
+#define INTERFACE IDirectDrawSurface7
+DECLARE_INTERFACE_(IDirectDrawSurface7,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawSurface7 methods ***/
+    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface7 *attachment) PURE;
+    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface7 *src_surface, RECT *src_rect,
+            DWORD flags, DDBLTFX *fx) PURE;
+    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface7 *src_surface,
+            RECT *src_rect, DWORD flags) PURE;
+    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface7 *attachment) PURE;
+    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;
+    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;
+    STDMETHOD(Flip)(THIS_ IDirectDrawSurface7 *dst_surface, DWORD flags) PURE;
+    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface7 **attachment) PURE;
+    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE;
+    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE;
+    STDMETHOD(IsLost)(THIS) PURE;
+    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+    STDMETHOD(Restore)(THIS) PURE;
+    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+    STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE;
+    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface7 *dst_surface, RECT *dst_rect,
+            DWORD flags, DDOVERLAYFX *fx) PURE;
+    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface7 *reference_surface) PURE;
+    /* added in v2 */
+    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+    /* added in v3 */
+    STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE;
+    /* added in v4 */
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE;
+    STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE;
+    STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
+    /* added in v7 */
+    STDMETHOD(SetPriority)(THIS_ DWORD prio) PURE;
+    STDMETHOD(GetPriority)(THIS_ LPDWORD prio) PURE;
+    STDMETHOD(SetLOD)(THIS_ DWORD lod) PURE;
+    STDMETHOD(GetLOD)(THIS_ LPDWORD lod) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface7_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface7_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface7_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface7_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface7_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface7_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface7_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface7_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface7_IsLost(p)                    (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface7_Restore(p)                   (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface7_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface7_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface7_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface7_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface7_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirectDrawSurface7_GetPrivateData(p,a,b,c)   (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirectDrawSurface7_FreePrivateData(p,a)      (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirectDrawSurface7_GetUniquenessValue(p,a)   (p)->lpVtbl->GetUniquenessValue(p,a)
+#define IDirectDrawSurface7_ChangeUniquenessValue(p)  (p)->lpVtbl->ChangeUniquenessValue(p)
+/*** IDirectDrawSurface7 methods ***/
+#define IDirectDrawSurface7_SetPriority(p,a)          (p)->lpVtbl->SetPriority(p,a)
+#define IDirectDrawSurface7_GetPriority(p,a)          (p)->lpVtbl->GetPriority(p,a)
+#define IDirectDrawSurface7_SetLOD(p,a)               (p)->lpVtbl->SetLOD(p,a)
+#define IDirectDrawSurface7_GetLOD(p,a)               (p)->lpVtbl->GetLOD(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface7_AddRef(p)             (p)->AddRef()
+#define IDirectDrawSurface7_Release(p)            (p)->Release()
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface7_Flip(p,a,b)                  (p)->Flip(a,b)
+#define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->GetBltStatus(a)
+#define IDirectDrawSurface7_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectDrawSurface7_GetClipper(p,a)              (p)->GetClipper(a)
+#define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
+#define IDirectDrawSurface7_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
+#define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface7_GetPalette(p,a)              (p)->GetPalette(a)
+#define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
+#define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface7_Initialize(p,a,b)            (p)->Initialize(a,b)
+#define IDirectDrawSurface7_IsLost(p)                    (p)->IsLost()
+#define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#define IDirectDrawSurface7_Restore(p)                   (p)->Restore()
+#define IDirectDrawSurface7_SetClipper(p,a)              (p)->SetClipper(a)
+#define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
+#define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface7_SetPalette(p,a)              (p)->SetPalette(a)
+#define IDirectDrawSurface7_Unlock(p,a)                  (p)->Unlock(a)
+#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface7_PageLock(p,a)       (p)->PageLock(a)
+#define IDirectDrawSurface7_PageUnlock(p,a)     (p)->PageUnlock(a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirectDrawSurface7_GetPrivateData(p,a,b,c)   (p)->GetPrivateData(a,b,c)
+#define IDirectDrawSurface7_FreePrivateData(p,a)      (p)->FreePrivateData(a)
+#define IDirectDrawSurface7_GetUniquenessValue(p,a)   (p)->GetUniquenessValue(a)
+#define IDirectDrawSurface7_ChangeUniquenessValue(p)  (p)->ChangeUniquenessValue()
+/*** IDirectDrawSurface7 methods ***/
+#define IDirectDrawSurface7_SetPriority(p,a)          (p)->SetPriority(a)
+#define IDirectDrawSurface7_GetPriority(p,a)          (p)->GetPriority(a)
+#define IDirectDrawSurface7_SetLOD(p,a)               (p)->SetLOD(a)
+#define IDirectDrawSurface7_GetLOD(p,a)               (p)->GetLOD(a)
+#endif
+
+/*****************************************************************************
+ * IDirectDrawColorControl interface
+ */
+#define INTERFACE IDirectDrawColorControl
+DECLARE_INTERFACE_(IDirectDrawColorControl,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawColorControl methods ***/
+    STDMETHOD(GetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE;
+    STDMETHOD(SetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawColorControl_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawColorControl_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawColorControl methods ***/
+#define IDirectDrawColorControl_GetColorControls(p,a) (p)->lpVtbl->GetColorControls(p,a)
+#define IDirectDrawColorControl_SetColorControls(p,a) (p)->lpVtbl->SetColorControls(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawColorControl_AddRef(p)             (p)->AddRef()
+#define IDirectDrawColorControl_Release(p)            (p)->Release()
+/*** IDirectDrawColorControl methods ***/
+#define IDirectDrawColorControl_GetColorControls(p,a) (p)->GetColorControls(a)
+#define IDirectDrawColorControl_SetColorControls(p,a) (p)->SetColorControls(a)
+#endif
+
+/*****************************************************************************
+ * IDirectDrawGammaControl interface
+ */
+#define INTERFACE IDirectDrawGammaControl
+DECLARE_INTERFACE_(IDirectDrawGammaControl,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectDrawGammaControl methods ***/
+    STDMETHOD(GetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE;
+    STDMETHOD(SetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawGammaControl_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectDrawGammaControl_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectDrawGammaControl methods ***/
+#define IDirectDrawGammaControl_GetGammaRamp(p,a,b)   (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirectDrawGammaControl_SetGammaRamp(p,a,b)   (p)->lpVtbl->SetGammaRamp(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawGammaControl_AddRef(p)             (p)->AddRef()
+#define IDirectDrawGammaControl_Release(p)            (p)->Release()
+/*** IDirectDrawGammaControl methods ***/
+#define IDirectDrawGammaControl_GetGammaRamp(p,a,b)   (p)->GetGammaRamp(a,b)
+#define IDirectDrawGammaControl_SetGammaRamp(p,a,b)   (p)->SetGammaRamp(a,b)
+#endif
+
+
+HRESULT WINAPI DirectDrawCreate(GUID *driver_guid, IDirectDraw **ddraw, IUnknown *outer);
+HRESULT WINAPI DirectDrawCreateEx(GUID *driver_guid, void **ddraw, REFIID interface_iid, IUnknown *outer);
+HRESULT WINAPI DirectDrawCreateClipper(DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __DDRAW_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h
new file mode 100644
index 0000000..5853387
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h
@@ -0,0 +1,45 @@
+/*
+ * Ddrawgdi definitions
+ *
+ * Copyright (C) 2009 Louis Lenders
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DDRAWGDI_H
+#define __WINE_DDRAWGDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DdQueryDisplaySettingsUniqueness    GdiEntry13
+
+ULONG APIENTRY DdQueryDisplaySettingsUniqueness(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DDRAWGDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h
new file mode 100644
index 0000000..5770435
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h
@@ -0,0 +1,1079 @@
+/*
+ * DirectDraw driver interface
+ * (DirectX 7 version)
+ *
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDRAWI_INCLUDED__
+#define __DDRAWI_INCLUDED__
+
+#include <ddraw.h>
+#include <dciddi.h> /* the DD HAL is layered onto DCI escapes */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */
+typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */
+typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */
+
+#define DDAPI WINAPI
+
+/* the DirectDraw versions */
+#define DD_VERSION		0x0200 /* compatibility version */
+#define DD_RUNTIME_VERSION	0x0700 /* actual version */
+
+/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
+#define DD_HAL_VERSION	0x0100
+
+/* more DCICOMMAND escapes */
+#define DDCREATEDRIVEROBJECT	10
+#define DDGET32BITDRIVERNAME	11
+#define DDNEWCALLBACKFNS	12
+#define DDVERSIONINFO		13
+
+#define MAX_DRIVER_NAME		CCHDEVICENAME
+
+/*****************************************************************************
+ * Initialization stuff
+ */
+typedef struct {
+    char szName[260];
+    char szEntryPoint[64];
+    DWORD dwContext;
+} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
+
+typedef struct {
+    DWORD dwHALVersion;
+    ULONG_PTR dwReserved1;
+    ULONG_PTR dwReserved2;
+} DDVERSIONDATA,*LPDDVERSIONDATA;
+
+typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext);
+
+/* pointer to video memory */
+typedef ULONG_PTR FLATPTR;
+
+/* predeclare some structures */
+typedef struct _DDHALINFO *LPDDHALINFO;
+typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
+typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
+typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
+typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;
+typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;
+typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;
+typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;
+typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
+typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;
+typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;
+typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;
+typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;
+typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;
+typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;
+typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;
+typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;
+typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;
+typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;
+
+/* structure GUIDs for GetDriverInfo */
+DEFINE_GUID( GUID_MiscellaneousCallbacks,	0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
+/* ...videport stuff here... */
+DEFINE_GUID( GUID_D3DCallbacks2,		0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
+DEFINE_GUID( GUID_D3DCallbacks3,		0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E );
+DEFINE_GUID( GUID_NonLocalVidMemCaps,		0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 );
+/* ...kernel stuff here... */
+DEFINE_GUID( GUID_D3DExtendedCaps,		0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 );
+DEFINE_GUID( GUID_ZPixelFormats,		0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE );
+DEFINE_GUID( GUID_DDMoreSurfaceCaps,		0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
+DEFINE_GUID( GUID_DDStereoMode,			0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 );
+/* ...more stuff here... */
+DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 );
+/* ...motioncomp stuff here... */
+DEFINE_GUID( GUID_Miscellaneous2Callbacks,	0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A );
+
+/*****************************************************************************
+ * driver->ddraw callbacks
+ */
+typedef BOOL    (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);
+typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);
+typedef void    (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);
+
+typedef struct {
+    DWORD		dwSize;
+    LPDDHAL_SETINFO	lpSetInfo;
+    LPDDHAL_VIDMEMALLOC	lpVidMemAlloc;
+    LPDDHAL_VIDMEMFREE	lpVidMemFree;
+} DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
+
+/*****************************************************************************
+ * mode info structure
+ */
+typedef struct _DDHALMODEINFO {
+    DWORD	dwWidth;
+    DWORD	dwHeight;
+    LONG	lPitch;
+    DWORD	dwBPP;
+    WORD	wFlags;
+    WORD	wRefreshRate;
+    DWORD	dwRBitMask;
+    DWORD	dwGBitMask;
+    DWORD	dwBBitMask;
+    DWORD	dwAlphaBitMask;
+} DDHALMODEINFO,*LPDDHALMODEINFO;
+
+#define DDMODEINFO_PALETTIZED	0x0001
+#define DDMODEINFO_MODEX	0x0002
+#define DDMODEINFO_UNSUPPORTED	0x0004
+#define DDMODEINFO_STANDARDVGA	0x0008
+#define DDMODEINFO_MAXREFRESH	0x0010
+#define DDMODEINFO_STEREO	0x0020
+
+/*****************************************************************************
+ * video memory info structure
+ */
+typedef struct _VIDMEM {
+    DWORD	dwFlags;
+    FLATPTR	fpStart;
+    union {
+	FLATPTR		fpEnd;
+	DWORD		dwWidth;
+    } DUMMYUNIONNAME1;
+    DDSCAPS	ddsCaps;
+    DDSCAPS	ddsCapsAlt;
+    union {
+	LPVMEMHEAP	lpHeap;
+	DWORD		dwHeight;
+    } DUMMYUNIONNAME2;
+} VIDMEM,*LPVIDMEM;
+
+#define VIDMEM_ISLINEAR		0x00000001
+#define VIDMEM_ISRECTANGULAR	0x00000002
+#define VIDMEM_ISHEAP		0x00000004
+#define VIDMEM_ISNONLOCAL	0x00000008
+#define VIDMEM_ISWC		0x00000010
+#define VIDMEM_ISDISABLED	0x00000020
+
+typedef struct _VIDMEMINFO {
+    FLATPTR		fpPrimary;
+    DWORD		dwFlags;
+    DWORD		dwDisplayWidth;
+    DWORD		dwDisplayHeight;
+    LONG		lDisplayPitch;
+    DDPIXELFORMAT	ddpfDisplay;
+    DWORD		dwOffscreenAlign;
+    DWORD		dwOverlayAlign;
+    DWORD		dwTextureAlign;
+    DWORD		dwZBufferAlign;
+    DWORD		dwAlphaAlign;
+    DWORD		dwNumHeaps;
+    LPVIDMEM		pvmList;
+} VIDMEMINFO,*LPVIDMEMINFO;
+
+typedef struct _HEAPALIAS {
+    FLATPTR	fpVidMem;
+    LPVOID	lpAlias;
+    DWORD	dwAliasSize;
+} HEAPALIAS,*LPHEAPALIAS;
+
+typedef struct _HEAPALIASINFO {
+    DWORD	dwRefCnt;
+    DWORD	dwFlags;
+    DWORD	dwNumHeaps;
+    LPHEAPALIAS	lpAliases;
+} HEAPALIASINFO,*LPHEAPALIASINFO;
+
+#define HEAPALIASINFO_MAPPEDREAL	0x00000001
+#define HEAPALIASINFO_MAPPEDDUMMY	0x00000002
+
+/*****************************************************************************
+ * capabilities structures
+ */
+typedef struct _DDCORECAPS {
+    DWORD	dwSize;
+    DWORD	dwCaps;
+    DWORD	dwCaps2;
+    DWORD	dwCKeyCaps;
+    DWORD	dwFXCaps;
+    DWORD	dwFXAlphaCaps;
+    DWORD	dwPalCaps;
+    DWORD	dwSVCaps;
+    DWORD	dwAlphaBltConstBitDepths;
+    DWORD	dwAlphaBltPixelBitDepths;
+    DWORD	dwAlphaBltSurfaceBitDepths;
+    DWORD	dwAlphaOverlayConstBitDepths;
+    DWORD	dwAlphaOverlayPixelBitDepths;
+    DWORD	dwAlphaOverlaySurfaceBitDepths;
+    DWORD	dwZBufferBitDepths;
+    DWORD	dwVidMemTotal;
+    DWORD	dwVidMemFree;
+    DWORD	dwMaxVisibleOverlays;
+    DWORD	dwCurrVisibleOverlays;
+    DWORD	dwNumFourCCCodes;
+    DWORD	dwAlignBoundarySrc;
+    DWORD	dwAlignSizeSrc;
+    DWORD	dwAlignBoundaryDest;
+    DWORD	dwAlignSizeDest;
+    DWORD	dwAlignStrideAlign;
+    DWORD	dwRops[DD_ROP_SPACE];
+    DDSCAPS	ddsCaps;
+    DWORD	dwMinOverlayStretch;
+    DWORD	dwMaxOverlayStretch;
+    DWORD	dwMinLiveVideoStretch;
+    DWORD	dwMaxLiveVideoStretch;
+    DWORD	dwMinHwCodecStretch;
+    DWORD	dwMaxHwCodecStretch;
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+    DWORD	dwReserved3;
+    DWORD	dwSVBCaps;
+    DWORD	dwSVBCKeyCaps;
+    DWORD	dwSVBFXCaps;
+    DWORD	dwSVBRops[DD_ROP_SPACE];
+    DWORD	dwVSBCaps;
+    DWORD	dwVSBCKeyCaps;
+    DWORD	dwVSBFXCaps;
+    DWORD	dwVSBRops[DD_ROP_SPACE];
+    DWORD	dwSSBCaps;
+    DWORD	dwSSBCKeyCaps;
+    DWORD	dwSSBFXCaps;
+    DWORD	dwSSBRops[DD_ROP_SPACE];
+    DWORD	dwMaxVideoPorts;
+    DWORD	dwCurrVideoPorts;
+    DWORD	dwSVBCaps2;
+} DDCORECAPS,*LPDDCORECAPS;
+
+typedef struct _DDNONLOCALVIDMEMCAPS {
+    DWORD	dwSize;
+    DWORD	dwNLVBCaps;
+    DWORD	dwNLVBCaps2;
+    DWORD	dwNLVBCKeyCaps;
+    DWORD	dwNLVBFXCaps;
+    DWORD	dwNLVBRops[DD_ROP_SPACE];
+} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;
+
+typedef struct _DDSCAPSEX {
+    DWORD	dwCaps2;
+    DWORD	dwCaps3;
+    DWORD	dwCaps4;
+} DDSCAPSEX,*LPDDSCAPSEX;
+
+#define DDSCAPS_EXECUTEBUFFER	DDSCAPS_RESERVED2
+#define DDSCAPS2_VERTEXBUFFER	DDSCAPS2_RESERVED1
+#define DDSCAPS2_COMMANDBUFFER	DDSCAPS2_RESERVED2
+
+/*****************************************************************************
+ * ddraw->driver callbacks
+ */
+#define DDHAL_DRIVER_NOTHANDLED	0
+#define DDHAL_DRIVER_HANDLED	1
+#define DDHAL_DRIVER_NOCKEYHW	2
+
+typedef struct _DDHAL_DESTROYDRIVERDATA		*LPDDHAL_DESTROYDRIVERDATA;
+typedef struct _DDHAL_CREATESURFACEDATA		*LPDDHAL_CREATESURFACEDATA;
+typedef struct _DDHAL_DRVSETCOLORKEYDATA	*LPDDHAL_DRVSETCOLORKEYDATA;
+typedef struct _DDHAL_SETMODEDATA		*LPDDHAL_SETMODEDATA;
+typedef struct _DDHAL_WAITFORVERTICALBLANKDATA	*LPDDHAL_WAITFORVERTICALBLANKDATA;
+typedef struct _DDHAL_CANCREATESURFACEDATA	*LPDDHAL_CANCREATESURFACEDATA;
+typedef struct _DDHAL_CREATEPALETTEDATA		*LPDDHAL_CREATEPALETTEDATA;
+typedef struct _DDHAL_GETSCANLINEDATA		*LPDDHAL_GETSCANLINEDATA;
+typedef struct _DDHAL_SETEXCLUSIVEMODEDATA	*LPDDHAL_SETEXCLUSIVEMODEDATA;
+typedef struct _DDHAL_FLIPTOGDISURFACEDATA	*LPDDHAL_FLIPTOGDISURFACEDATA;
+
+typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER)	    (LPDDHAL_DESTROYDRIVERDATA);
+typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE)	    (LPDDHAL_CREATESURFACEDATA);
+typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY)	    (LPDDHAL_DRVSETCOLORKEYDATA);
+typedef DWORD (PASCAL *LPDDHAL_SETMODE)		    (LPDDHAL_SETMODEDATA);
+typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);
+typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE)    (LPDDHAL_CANCREATESURFACEDATA );
+typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE)	    (LPDDHAL_CREATEPALETTEDATA);
+typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE)	    (LPDDHAL_GETSCANLINEDATA);
+typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE)    (LPDDHAL_SETEXCLUSIVEMODEDATA);
+typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE)    (LPDDHAL_FLIPTOGDISURFACEDATA);
+
+typedef struct _DDHAL_DDCALLBACKS {
+    DWORD				dwSize;
+    DWORD				dwFlags;
+    LPDDHAL_DESTROYDRIVER		DestroyDriver;
+    LPDDHAL_CREATESURFACE		CreateSurface;
+    LPDDHAL_SETCOLORKEY			SetColorKey;
+    LPDDHAL_SETMODE			SetMode;
+    LPDDHAL_WAITFORVERTICALBLANK	WaitForVerticalBlank;
+    LPDDHAL_CANCREATESURFACE		CanCreateSurface;
+    LPDDHAL_CREATEPALETTE		CreatePalette;
+    LPDDHAL_GETSCANLINE			GetScanLine;
+    /* DirectX 2 */
+    LPDDHAL_SETEXCLUSIVEMODE		SetExclusiveMode;
+    LPDDHAL_FLIPTOGDISURFACE		FlipToGDISurface;
+} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;
+
+typedef struct _DDHAL_DESTROYSURFACEDATA	*LPDDHAL_DESTROYSURFACEDATA;
+typedef struct _DDHAL_FLIPDATA			*LPDDHAL_FLIPDATA;
+typedef struct _DDHAL_SETCLIPLISTDATA		*LPDDHAL_SETCLIPLISTDATA;
+typedef struct _DDHAL_LOCKDATA			*LPDDHAL_LOCKDATA;
+typedef struct _DDHAL_UNLOCKDATA		*LPDDHAL_UNLOCKDATA;
+typedef struct _DDHAL_BLTDATA			*LPDDHAL_BLTDATA;
+typedef struct _DDHAL_SETCOLORKEYDATA		*LPDDHAL_SETCOLORKEYDATA;
+typedef struct _DDHAL_ADDATTACHEDSURFACEDATA	*LPDDHAL_ADDATTACHEDSURFACEDATA;
+typedef struct _DDHAL_GETBLTSTATUSDATA		*LPDDHAL_GETBLTSTATUSDATA;
+typedef struct _DDHAL_GETFLIPSTATUSDATA		*LPDDHAL_GETFLIPSTATUSDATA;
+typedef struct _DDHAL_UPDATEOVERLAYDATA		*LPDDHAL_UPDATEOVERLAYDATA;
+typedef struct _DDHAL_SETOVERLAYPOSITIONDATA	*LPDDHAL_SETOVERLAYPOSITIONDATA;
+typedef struct _DDHAL_SETPALETTEDATA		*LPDDHAL_SETPALETTEDATA;
+
+typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE)	(LPDDHAL_DESTROYSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP)		(LPDDHAL_FLIPDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST)	(LPDDHAL_SETCLIPLISTDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK)		(LPDDHAL_LOCKDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK)		(LPDDHAL_UNLOCKDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_BLT)		(LPDDHAL_BLTDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY)	(LPDDHAL_SETCOLORKEYDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS)	(LPDDHAL_GETBLTSTATUSDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS)	(LPDDHAL_GETFLIPSTATUSDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY)	(LPDDHAL_UPDATEOVERLAYDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE)	(LPDDHAL_SETPALETTEDATA);
+
+typedef struct _DDHAL_DDSURFACECALLBACKS {
+    DWORD				dwSize;
+    DWORD				dwFlags;
+    LPDDHALSURFCB_DESTROYSURFACE	DestroySurface;
+    LPDDHALSURFCB_FLIP			Flip;
+    LPDDHALSURFCB_SETCLIPLIST		SetClipList;
+    LPDDHALSURFCB_LOCK			Lock;
+    LPDDHALSURFCB_UNLOCK		Unlock;
+    LPDDHALSURFCB_BLT			Blt;
+    LPDDHALSURFCB_SETCOLORKEY		SetColorKey;
+    LPDDHALSURFCB_ADDATTACHEDSURFACE	AddAttachedSurface;
+    LPDDHALSURFCB_GETBLTSTATUS		GetBltStatus;
+    LPDDHALSURFCB_GETFLIPSTATUS		GetFlipStatus;
+    LPDDHALSURFCB_UPDATEOVERLAY		UpdateOverlay;
+    LPDDHALSURFCB_SETOVERLAYPOSITION	SetOverlayPosition;
+    LPVOID				reserved4;
+    LPDDHALSURFCB_SETPALETTE		SetPalette;
+} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;
+
+typedef struct _DDHAL_DESTROYPALETTEDATA	*LPDDHAL_DESTROYPALETTEDATA;
+typedef struct _DDHAL_SETENTRIESDATA		*LPDDHAL_SETENTRIESDATA;
+
+typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);
+typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES)    (LPDDHAL_SETENTRIESDATA);
+
+typedef struct _DDHAL_DDPALETTECALLBACKS {
+    DWORD				dwSize;
+    DWORD				dwFlags;
+    LPDDHALPALCB_DESTROYPALETTE		DestroyPalette;
+    LPDDHALPALCB_SETENTRIES		SetEntries;
+} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;
+
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF)   (LPDDHAL_CREATESURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF)  (LPDDHAL_DESTROYSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF)     (LPDDHAL_LOCKDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF)   (LPDDHAL_UNLOCKDATA);
+
+typedef struct _DDHAL_DDEXEBUFCALLBACKS {
+    DWORD				dwSize;
+    DWORD				dwFlags;
+    LPDDHALEXEBUFCB_CANCREATEEXEBUF	CanCreateExecuteBuffer;
+    LPDDHALEXEBUFCB_CREATEEXEBUF	CreateExecuteBuffer;
+    LPDDHALEXEBUFCB_DESTROYEXEBUF	DestroyExecuteBuffer;
+    LPDDHALEXEBUFCB_LOCKEXEBUF		LockExecuteBuffer;
+    LPDDHALEXEBUFCB_UNLOCKEXEBUF	UnlockExecuteBuffer;
+} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;
+
+typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA	*LPDDHAL_GETAVAILDRIVERMEMORYDATA;
+typedef struct _DDHAL_UPDATENONLOCALHEAPDATA	*LPDDHAL_UPDATENONLOCALHEAPDATA;
+typedef struct _DDHAL_GETHEAPALIGNMENTDATA	*LPDDHAL_GETHEAPALIGNMENTDATA;
+
+typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA);
+typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP)  (LPDDHAL_UPDATENONLOCALHEAPDATA);
+typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT)    (LPDDHAL_GETHEAPALIGNMENTDATA);
+
+typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {
+    DWORD				dwSize;
+    DWORD				dwFlags;
+    LPDDHAL_GETAVAILDRIVERMEMORY	GetAvailDriverMemory;
+    LPDDHAL_UPDATENONLOCALHEAP		UpdateNonLocalHeap;
+    LPDDHAL_GETHEAPALIGNMENT		GetHeapAlignment;
+    LPDDHALSURFCB_GETBLTSTATUS		GetSysmemBltStatus;
+} DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS;
+
+typedef struct _DDHAL_CREATESURFACEEXDATA	*LPDDHAL_CREATESURFACEEXDATA;
+typedef struct _DDHAL_GETDRIVERSTATEDATA	*LPDDHAL_GETDRIVERSTATEDATA;
+typedef struct _DDHAL_DESTROYDDLOCALDATA	*LPDDHAL_DESTROYDDLOCALDATA;
+
+typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA);
+typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA);
+typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA);
+
+typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {
+    DWORD				dwSize;
+    DWORD				dwFlags;
+    LPVOID				Reserved;
+    LPDDHAL_CREATESURFACEEX		CreateSurfaceEx;
+    LPDDHAL_GETDRIVERSTATE		GetDriverState;
+    LPDDHAL_DESTROYDDLOCAL		DestroyDDLocal;
+} DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS;
+
+typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(DDGAMMARAMP *, BYTE *);
+
+/*****************************************************************************
+ * driver info structure
+ *
+ * The HAL is queried for additional callbacks via the GetDriverInfo callback.
+ */
+typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
+typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
+
+typedef struct _DDHALINFO {
+    DWORD			dwSize;
+    LPDDHAL_DDCALLBACKS		lpDDCallbacks;
+    LPDDHAL_DDSURFACECALLBACKS	lpDDSurfaceCallbacks;
+    LPDDHAL_DDPALETTECALLBACKS	lpDDPaletteCallbacks;
+    VIDMEMINFO			vmiData;
+    DDCORECAPS			ddCaps;
+    DWORD			dwMonitorFrequency;
+    LPDDHAL_GETDRIVERINFO	GetDriverInfo;
+    DWORD			dwModeIndex;
+    LPDWORD			lpdwFourCC;
+    DWORD			dwNumModes;
+    LPDDHALMODEINFO		lpModeInfo;
+    DWORD			dwFlags;
+    LPVOID			lpPDevice;
+    DWORD			hInstance;
+    /* DirectX 2 */
+    ULONG_PTR			lpD3DGlobalDriverData;
+    ULONG_PTR			lpD3DHALCallbacks;
+    LPDDHAL_DDEXEBUFCALLBACKS	lpDDExeBufCallbacks;
+} DDHALINFO;
+
+#define DDHALINFO_ISPRIMARYDISPLAY	0x00000001
+#define DDHALINFO_MODEXILLEGAL		0x00000002
+#define DDHALINFO_GETDRIVERINFOSET	0x00000004
+
+/* where the high-level ddraw implementation stores the callbacks */
+typedef struct _DDHAL_CALLBACKS {
+    DDHAL_DDCALLBACKS		cbDDCallbacks;
+    DDHAL_DDSURFACECALLBACKS	cbDDSurfaceCallbacks;
+    DDHAL_DDPALETTECALLBACKS	cbDDPaletteCallbacks;
+    DDHAL_DDCALLBACKS		HALDD;
+    DDHAL_DDSURFACECALLBACKS	HALDDSurface;
+    DDHAL_DDPALETTECALLBACKS	HALDDPalette;
+    DDHAL_DDCALLBACKS		HELDD;
+    DDHAL_DDSURFACECALLBACKS	HELDDSurface;
+    DDHAL_DDPALETTECALLBACKS	HELDDPalette;
+    DDHAL_DDEXEBUFCALLBACKS	cbDDExeBufCallbacks;
+    DDHAL_DDEXEBUFCALLBACKS	HALDDExeBuf;
+    DDHAL_DDEXEBUFCALLBACKS	HELDDExeBuf;
+    /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
+} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;
+
+/*****************************************************************************
+ * parameter structures
+ */
+typedef struct _DDHAL_DESTROYDRIVERDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    HRESULT			ddRVal;
+    LPDDHAL_DESTROYDRIVER	DestroyDriver;
+} DDHAL_DESTROYDRIVERDATA;
+
+typedef struct _DDHAL_SETMODEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    DWORD			dwModeIndex;
+    HRESULT			ddRVal;
+    LPDDHAL_SETMODE		SetMode;
+    BOOL			inexcl;
+    BOOL			useRefreshRate;
+} DDHAL_SETMODEDATA;
+
+typedef struct _DDHAL_CREATESURFACEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    DDSURFACEDESC              *lpDDSurfaceDesc;
+    LPDDRAWI_DDRAWSURFACE_LCL *	lplpSList;
+    DWORD			dwSCnt;
+    HRESULT			ddRVal;
+    LPDDHAL_CREATESURFACE	CreateSurface;
+} DDHAL_CREATESURFACEDATA;
+
+typedef struct _DDHAL_CANCREATESURFACEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    DDSURFACEDESC              *lpDDSurfaceDesc;
+    DWORD			bIsDifferentPixelFormat;
+    HRESULT			ddRVal;
+    LPDDHAL_CANCREATESURFACE	CanCreateSurface;
+} DDHAL_CANCREATESURFACEDATA;
+
+typedef struct _DDHAL_CREATEPALETTEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWPALETTE_GBL	lpDDPalette;
+    LPPALETTEENTRY		lpColorTable;
+    HRESULT			ddRVal;
+    LPDDHAL_CREATEPALETTE	CreatePalette;
+    BOOL			is_excl;
+} DDHAL_CREATEPALETTEDATA;
+
+typedef struct _DDHAL_SETEXCLUSIVEMODEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    DWORD			dwEnterExcl;
+    DWORD			dwReserved;
+    HRESULT			ddRVal;
+    LPDDHAL_SETEXCLUSIVEMODE	SetExclusiveMode;
+} DDHAL_SETEXCLUSIVEMODEDATA;
+
+/* surfaces */
+typedef struct _DDHAL_DESTROYSURFACEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSurface;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
+} DDHAL_DESTROYSURFACEDATA;
+
+typedef struct _DDHAL_FLIPDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpSurfCurr;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpSurfTarg;
+    DWORD			dwFlags;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_FLIP		Flip;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpSurfCurrLeft;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpSurfTargLeft;
+} DDHAL_FLIPDATA;
+
+typedef struct _DDHAL_LOCKDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSurface;
+    DWORD			bHasRect;
+    RECTL			rArea;
+    LPVOID			lpSurfData;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_LOCK		Lock;
+    DWORD			dwFlags;
+} DDHAL_LOCKDATA;
+
+typedef struct _DDHAL_UNLOCKDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSurface;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_UNLOCK	Unlock;
+} DDHAL_UNLOCKDATA;
+
+typedef struct _DDHAL_BLTDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDDestSurface;
+    RECTL			rDest;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSrcSurface;
+    RECTL			rSrc;
+    DWORD			dwFlags;
+    DWORD			dwROPFlags;
+    DDBLTFX			bltFX;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_BLT		Blt;
+    BOOL			IsClipped;
+    RECTL			rOrigDest;
+    RECTL			rOrigSrc;
+    DWORD			dwRectCnt;
+    LPRECT			prDestRects;
+} DDHAL_BLTDATA;
+
+typedef struct _DDHAL_UPDATEOVERLAYDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;
+ RECTL rDest;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;
+ RECTL rSrc;
+ DWORD dwFlags;
+ DDOVERLAYFX overlayFX;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
+} DDHAL_UPDATEOVERLAYDATA;
+
+typedef struct _DDHAL_SETPALETTEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpDDSurface;
+    LPDDRAWI_DDRAWPALETTE_GBL	lpDDPalette;
+    HRESULT			ddRVal;
+    LPDDHALSURFCB_SETPALETTE	SetPalette;
+    BOOL			Attach;
+} DDHAL_SETPALETTEDATA;
+
+/* palettes */
+typedef struct _DDHAL_DESTROYPALETTEDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWPALETTE_GBL	lpDDPalette;
+    HRESULT			ddRVal;
+    LPDDHALPALCB_DESTROYPALETTE	DestroyPalette;
+} DDHAL_DESTROYPALETTEDATA;
+
+typedef struct _DDHAL_SETENTRIESDATA {
+    LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+    LPDDRAWI_DDRAWPALETTE_GBL	lpDDPalette;
+    DWORD			dwBase;
+    DWORD			dwNumEntries;
+    LPPALETTEENTRY		lpEntries;
+    HRESULT			ddRVal;
+    LPDDHALPALCB_SETENTRIES	SetEntries;
+} DDHAL_SETENTRIESDATA;
+
+typedef struct _DDHAL_GETDRIVERINFODATA {
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    GUID	guidInfo;
+    DWORD	dwExpectedSize;
+    LPVOID	lpvData;
+    DWORD	dwActualSize;
+    HRESULT	ddRVal;
+    ULONG_PTR	dwContext;
+} DDHAL_GETDRIVERINFODATA;
+
+/*****************************************************************************
+ * high-level ddraw implementation structures
+ */
+typedef struct _IUNKNOWN_LIST {
+    struct _IUNKNOWN_LIST *	lpLink;
+    LPGUID			lpGuid;
+    IUnknown *			lpIUnknown;
+} IUNKNOWN_LIST,*LPIUNKNOWN_LIST;
+
+typedef struct _PROCESS_LIST {
+    struct _PROCESS_LIST *	lpLink;
+    DWORD			dwProcessId;
+    DWORD			dwRefCnt;
+    DWORD			dwAlphaDepth;
+    DWORD			dwZDepth;
+} PROCESS_LIST,*LPPROCESS_LIST;
+
+typedef struct _ATTACHLIST {
+    DWORD			dwFlags;
+    struct _ATTACHLIST *	lpLink;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpAttached;
+    LPDDRAWI_DDRAWSURFACE_INT	lpIAttached;
+} ATTACHLIST,*LPATTACHLIST;
+
+#define DDAL_IMPLICIT	0x00000001
+
+typedef struct _ACCESSRECTLIST {
+    struct _ACCESSRECTLIST *	lpLink;
+    RECT			rDest;
+    LPDDRAWI_DIRECTDRAW_LCL	lpOwner;
+    LPVOID			lpSurfaceData;
+    DWORD			dwFlags;
+    LPHEAPALIASINFO		lpHeapAliasInfo;
+} ACCESSRECTLIST,*LPACCESSRECTLIST;
+
+#define ACCESSRECT_VRAMSTYLE		0x00000001
+#define ACCESSRECT_NOTHOLDINGWIN16LOCK	0x00000002
+#define ACCESSRECT_BROKEN		0x00000004
+
+typedef struct _DBLNODE {
+    struct _DBLNODE *		next;
+    struct _DBLNODE *		prev;
+    LPDDRAWI_DDRAWSURFACE_LCL	object;
+    LPDDRAWI_DDRAWSURFACE_INT	object_int;
+} DBLNODE,*LPDBLNODE;
+
+typedef struct _DDRAWI_DIRECTDRAW_INT {
+    LPVOID			lpVtbl;
+    LPDDRAWI_DIRECTDRAW_LCL	lpLcl;
+    LPDDRAWI_DIRECTDRAW_INT	lpLink;
+    DWORD			dwIntRefCnt;
+} DDRAWI_DIRECTDRAW_INT;
+
+typedef struct _DDRAWI_DIRECTDRAW_LCL {
+    DWORD			lpDDMore;
+    LPDDRAWI_DIRECTDRAW_GBL	lpGbl;
+    DWORD			dwUnused0;
+    DWORD			dwLocalFlags;
+    DWORD			dwLocalRefCnt;
+    DWORD			dwProcessId;
+    IUnknown *			pUnkOuter;
+    DWORD			dwObsolete1;
+    ULONG_PTR			hWnd;
+    ULONG_PTR			hDC;
+    DWORD			dwErrorMode;
+    LPDDRAWI_DDRAWSURFACE_INT	lpPrimary;
+    LPDDRAWI_DDRAWSURFACE_INT	lpCB;
+    DWORD			dwPreferredMode;
+    /* DirectX 2 */
+    HINSTANCE			hD3DInstance;
+    IUnknown *			pD3DIUnknown;
+    LPDDHAL_CALLBACKS		lpDDCB;
+    ULONG_PTR			hDDVxd;
+    /* DirectX 5.0 */
+    DWORD			dwAppHackFlags;
+    /* DirectX 5.0A */
+    ULONG_PTR			hFocusWnd;
+    DWORD			dwHotTracking;
+    DWORD			dwIMEState;
+    /* DirectX 6.0 */
+    ULONG_PTR			hWndPopup;
+    ULONG_PTR			hDD;
+    ULONG_PTR			hGammaCalibrator;
+    LPDDGAMMACALIBRATORPROC	lpGammaCalibrator;
+} DDRAWI_DIRECTDRAW_LCL;
+
+#define DDRAWILCL_HASEXCLUSIVEMODE	0x00000001
+#define DDRAWILCL_ISFULLSCREEN		0x00000002
+#define DDRAWILCL_SETCOOPCALLED		0x00000004
+#define DDRAWILCL_ACTIVEYES		0x00000008
+#define DDRAWILCL_ACTIVENO		0x00000010
+#define DDRAWILCL_HOOKEDHWND		0x00000020
+#define DDRAWILCL_ALLOWMODEX		0x00000040
+#define DDRAWILCL_V1SCLBEHAVIOUR	0x00000080
+#define DDRAWILCL_MODEHASBEENCHANGED	0x00000100
+#define DDRAWILCL_CREATEDWINDOW		0x00000200
+#define DDRAWILCL_DIRTYDC		0x00000400
+#define DDRAWILCL_DISABLEINACTIVATE	0x00000800
+#define DDRAWILCL_CURSORCLIPPED		0x00001000
+#define DDRAWILCL_EXPLICITMONITOR	0x00002000
+#define DDRAWILCL_MULTITHREADED		0x00004000
+#define DDRAWILCL_FPUSETUP		0x00008000
+#define DDRAWILCL_POWEREDDOWN		0x00010000
+#define DDRAWILCL_DIRECTDRAW7		0x00020000
+#define DDRAWILCL_ATTEMPTEDD3DCONTEXT	0x00040000
+#define DDRAWILCL_FPUPRESERVE		0x00080000
+
+typedef struct _DDRAWI_DIRECTDRAW_GBL {
+    DWORD			dwRefCnt;
+    DWORD			dwFlags;
+    FLATPTR			fpPrimaryOrig;
+    DDCORECAPS			ddCaps;
+    DWORD			dwInternal1;
+    DWORD			dwUnused1[9];
+    LPDDHAL_CALLBACKS		lpDDCBtmp;
+    LPDDRAWI_DDRAWSURFACE_INT	dsList;
+    LPDDRAWI_DDRAWPALETTE_INT	palList;
+    LPDDRAWI_DDRAWCLIPPER_INT	clipperList;
+    LPDDRAWI_DIRECTDRAW_GBL	lp16DD;
+    DWORD			dwMaxOverlays;
+    DWORD			dwCurrOverlays;
+    DWORD			dwMonitorFrequency;
+    DDCORECAPS			ddHELCaps;
+    DWORD			dwUnused2[50];
+    DDCOLORKEY			ddckCKDestOverlay;
+    DDCOLORKEY			ddckCKSrcOverlay;
+    VIDMEMINFO			vmiData;
+    LPVOID			lpDriverHandle;
+    LPDDRAWI_DIRECTDRAW_LCL	lpExclusiveOwner;
+    DWORD			dwModeIndex;
+    DWORD			dwModeIndexOrig;
+    DWORD			dwNumFourCC;
+    LPDWORD			lpdwFourCC;
+    DWORD			dwNumModes;
+    LPDDHALMODEINFO		lpModeInfo;
+    PROCESS_LIST		plProcessList;
+    DWORD			dwSurfaceLockCount;
+    DWORD			dwAliasedLockCnt;
+    ULONG_PTR			dwReserved3;
+    ULONG_PTR			hDD;
+    char			cObsolete[12];
+    DWORD			dwReserved1;
+    DWORD			dwReserved2;
+    DBLNODE			dbnOverlayRoot;
+    volatile LPWORD		lpwPDeviceFlags;
+    DWORD			dwPDevice;
+    DWORD			dwWin16LockCnt;
+    DWORD			dwUnused3;
+    DWORD			hInstance;
+    DWORD			dwEvent16;
+    DWORD			dwSaveNumModes;
+    /* DirectX 2 */
+    ULONG_PTR			lpD3DGlobalDriverData;
+    ULONG_PTR			lpD3DHALCallbacks;
+    DDCORECAPS			ddBothCaps;
+    /* DirectX 5.0 */
+    LPDDVIDEOPORTCAPS		lpDDVideoPortCaps;
+    LPDDRAWI_DDVIDEOPORT_INT	dvpList;
+    ULONG_PTR			lpD3DHALCallbacks2;
+    RECT			rectDevice;
+    DWORD			cMonitors;
+    LPVOID			gpbmiSrc;
+    LPVOID			gpbmiDest;
+    LPHEAPALIASINFO		phaiHeapAliases;
+    ULONG_PTR			hKernelHandle;
+    ULONG_PTR			pfnNotifyProc;
+    LPDDKERNELCAPS		lpDDKernelCaps;
+    LPDDNONLOCALVIDMEMCAPS	lpddNLVCaps;
+    LPDDNONLOCALVIDMEMCAPS	lpddNLVHELCaps;
+    LPDDNONLOCALVIDMEMCAPS	lpddNLVBothCaps;
+    ULONG_PTR			lpD3DExtendedCaps;
+    /* DirectX 5.0A */
+    DWORD			dwDOSBoxEvent;
+    RECT			rectDesktop;
+    char			cDriverName[MAX_DRIVER_NAME];
+    /* DirectX 6.0 */
+    ULONG_PTR			lpD3DHALCallbacks3;
+    DWORD			dwNumZPixelFormats;
+    DDPIXELFORMAT              *lpZPixelFormats;
+    LPDDRAWI_DDMOTIONCOMP_INT	mcList;
+    DWORD			hDDVxd;
+    DDSCAPSEX			ddsCapsMore;
+} DDRAWI_DIRECTDRAW_GBL;
+
+#define DDRAWI_VIRTUALDESKTOP	0x00000008
+#define DDRAWI_MODEX		0x00000010
+#define DDRAWI_DISPLAYDRV	0x00000020
+#define DDRAWI_FULLSCREEN	0x00000040
+#define DDRAWI_MODECHANGED	0x00000080
+#define DDRAWI_NOHARDWARE	0x00000100
+#define DDRAWI_PALETTEINIT	0x00000200
+#define DDRAWI_NOEMULATION	0x00000400
+/* more... */
+
+/* surfaces */
+typedef struct _DDRAWI_DDRAWSURFACE_INT {
+    LPVOID			lpVtbl;
+    LPDDRAWI_DDRAWSURFACE_LCL	lpLcl;
+    LPDDRAWI_DDRAWSURFACE_INT	lpLink;
+    DWORD			dwIntRefCnt;
+} DDRAWI_DDRAWSURFACE_INT;
+
+typedef struct _DDRAWI_DDRAWSURFACE_GBL {
+    DWORD			dwRefCnt;
+    DWORD			dwGlobalFlags;
+    union {
+	LPACCESSRECTLIST	lpRectList;
+	DWORD			dwBlockSizeY;
+    } DUMMYUNIONNAME1;
+    union {
+	LPVMEMHEAP		lpVidMemHeap;
+	DWORD			dwBlockSizeX;
+    } DUMMYUNIONNAME2;
+    union {
+	LPDDRAWI_DIRECTDRAW_GBL	lpDD;
+	LPVOID			lpDDHandle;
+    } DUMMYUNIONNAME3;
+    FLATPTR			fpVidMem;
+    union {
+	LONG			lPitch;
+	DWORD			dwLinearSize;
+    } DUMMYUNIONNAME4;
+    WORD			wHeight;
+    WORD			wWidth;
+    DWORD			dwUsageCount;
+    ULONG_PTR			dwReserved1; /* for display driver use */
+    /* optional (defaults to primary surface pixelformat) */
+    DDPIXELFORMAT		ddpfSurface;
+} DDRAWI_DDRAWSURFACE_GBL;
+
+#define DDRAWISURFGBL_MEMFREE			0x00000001
+#define DDRAWISURFGBL_SYSMEMREQUESTED		0x00000002
+#define DDRAWISURFGBL_ISGDISURFACE		0x00000004
+#define DDRAWISURFGBL_SOFTWAREAUTOFLIP		0x00000008
+#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK	0x00000010
+#define DDRAWISURFGBL_LOCKVRAMSTYLE		0x00000020
+#define DDRAWISURFGBL_LOCKBROKEN		0x00000040
+#define DDRAWISURFGBL_IMPLICITHANDLE		0x00000080
+#define DDRAWISURFGBL_ISCLIENTMEM		0x00000100
+#define DDRAWISURFGBL_HARDWAREOPSOURCE		0x00000200
+#define DDRAWISURFGBL_HARDWAREOPDEST		0x00000400
+#define DDRAWISURFGBL_HARDWAREOPSTARTED		0x00000600
+#define DDRAWISURFGBL_VPORTINTERLEAVED		0x00000800
+#define DDRAWISURFGBL_VPORTDATA			0x00001000
+#define DDRAWISURFGBL_LATEALLOCATELINEAR	0x00002000
+#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER	0x00004000
+#define DDRAWISURFGBL_FASTLOCKHELD		0x00008000
+#define DDRAWISURFGBL_READONLYLOCKHELD		0x00010000
+
+typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
+    DWORD			dwSize;
+    union {
+	DWORD			dwPhysicalPageTable;
+	FLATPTR			fpPhysicalVidMem;
+    } DUMMYUNIONNAME1;
+    LPDWORD			pPageTable;
+    DWORD			cPages;
+    ULONG_PTR			dwSavedDCContext;
+    FLATPTR			fpAliasedVidMem;
+    ULONG_PTR			dwDriverReserved;
+    ULONG_PTR			dwHELReserved;
+    DWORD			cPageUnlocks;
+    ULONG_PTR			hKernelSurface;
+    DWORD			dwKernelRefCnt;
+    DDCOLORCONTROL             *lpColorInfo;
+    FLATPTR			fpNTAlias;
+    DWORD			dwContentsStamp;
+    LPVOID			lpvUnswappedDriverReserved;
+    LPVOID			lpDDRAWReserved2;
+    DWORD			dwDDRAWReserved1;
+    DWORD			dwDDRAWReserved2;
+    FLATPTR			fpAliasOfVidMem;
+} DDRAWI_DDRAWSURFACE_GBL_MORE;
+
+/* the MS version of this macro was somewhat obfuscated and unreadable
+ * (possibly because of mediocre MS coders)... so I simplified it...
+ * (and so I commit no copyright violations either, hah) */
+#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
+    (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))
+
+typedef struct _DDRAWI_DDRAWSURFACE_MORE {
+    DWORD			dwSize;
+    IUNKNOWN_LIST *		lpIUnknowns;
+    LPDDRAWI_DIRECTDRAW_LCL	lpDD_lcl;
+    DWORD			dwPageLockCount;
+    DWORD			dwBytesAllocated;
+    LPDDRAWI_DIRECTDRAW_INT	lpDD_int;
+    DWORD			dwMipMapCount;
+    LPDDRAWI_DDRAWCLIPPER_INT	lpDDIClipper;
+    /* DirectX 5.0 */
+    LPHEAPALIASINFO		lpHeapAliasInfo;
+    DWORD			dwOverlayFlags;
+    VOID			*rgjunc;
+    LPDDRAWI_DDVIDEOPORT_LCL	lpVideoPort;
+    DDOVERLAYFX                *lpddOverlayFX;
+    DDSCAPSEX			ddsCapsEx;
+    DWORD			dwTextureStage;
+    LPVOID			lpDDRAWReserved;
+    LPVOID			lpDDRAWReserved2;
+    LPVOID			lpDDrawReserved3;
+    DWORD			dwDDrawReserved4;
+    LPVOID			lpDDrawReserved5;
+    LPDWORD			lpGammaRamp;
+    LPDWORD			lpOriginalGammaRamp;
+    LPVOID			lpDDrawReserved6;
+    DWORD			dwSurfaceHandle;
+    DWORD			qwDDrawReserved8[2];
+    LPVOID			lpDDrawReserved9;
+    DWORD			cSurfaces;
+    DDSURFACEDESC2             *pCreatedDDSurfaceDesc2;
+    LPDDRAWI_DDRAWSURFACE_LCL	*slist;
+    DWORD			dwFVF;
+    LPVOID			lpVB;
+} DDRAWI_DDRAWSURFACE_MORE;
+
+typedef struct _DDRAWI_DDRAWSURFACE_LCL {
+    LPDDRAWI_DDRAWSURFACE_MORE	lpSurfMore;
+    LPDDRAWI_DDRAWSURFACE_GBL	lpGbl;
+    ULONG_PTR			hDDSurface;
+    LPATTACHLIST		lpAttachList;
+    LPATTACHLIST		lpAttachListFrom;
+    DWORD			dwLocalRefCnt;
+    DWORD			dwProcessId;
+    DWORD			dwFlags;
+    DDSCAPS			ddsCaps;
+    LPDDRAWI_DDRAWPALETTE_INT	lpDDPalette;
+    LPDDRAWI_DDRAWCLIPPER_LCL	lpDDClipper;
+    DWORD			dwModeCreatedIn;
+    DWORD			dwBackBufferCount;
+    DDCOLORKEY			ddckCKDestBlt;
+    DDCOLORKEY			ddckCKSrcBlt;
+    ULONG_PTR			hDC;
+    ULONG_PTR			dwReserved1; /* for display driver use */
+    /* overlays only */
+    DDCOLORKEY			ddckCKSrcOverlay;
+    DDCOLORKEY			ddckCKDestOverlay;
+    LPDDRAWI_DDRAWSURFACE_INT	lpSurfaceOverlaying;
+    DBLNODE			dbnOverlayNode;
+    RECT			rcOverlaySrc;
+    RECT			rcOverlayDest;
+    DWORD			dwClrXparent;
+    DWORD			dwAlpha;
+    LONG			lOverlayX;
+    LONG			lOverlayY;
+} DDRAWI_DDRAWSURFACE_LCL;
+
+#define DDRAWISURF_ATTACHED		0x00000001
+#define DDRAWISURF_IMPLICITCREATE	0x00000002
+#define DDRAWISURF_ISFREE		0x00000004
+#define DDRAWISURF_ATTACHED_FROM	0x00000008
+#define DDRAWISURF_IMPLICITROOT		0x00000010
+#define DDRAWISURF_PARTOFPRIMARYCHAIN	0x00000020
+#define DDRAWISURF_DATAISALIASED	0x00000040
+#define DDRAWISURF_HASDC		0x00000080
+#define DDRAWISURF_HASCKEYDESTOVERLAY	0x00000100
+#define DDRAWISURF_HASCKEYDESTBLT	0x00000200
+#define DDRAWISURF_HASCKEYSRCOVERLAY	0x00000400
+#define DDRAWISURF_HASCKEYSRCBLT	0x00000800
+#define DDRAWISURF_LOCKEXCLUDEDCURSOR	0x00001000
+#define DDRAWISURF_HASPIXELFORMAT	0x00002000
+#define DDRAWISURF_HASOVERLAYDATA	0x00004000
+#define DDRAWISURF_SETGAMMA		0x00008000
+/* more... */
+#define DDRAWISURF_INVALID		0x10000000
+
+/* palettes */
+typedef struct _DDRAWI_DDRAWPALETTE_INT {
+    LPVOID			lpVtbl;
+    LPDDRAWI_DDRAWPALETTE_LCL	lpLcl;
+    LPDDRAWI_DDRAWPALETTE_INT	lpLink;
+    DWORD			dwIntRefCnt;
+} DDRAWI_DDRAWPALETTE_INT;
+
+typedef struct _DDRAWI_DDRAWPALETTE_GBL {
+    DWORD			dwRefCnt;
+    DWORD			dwFlags;
+    LPDDRAWI_DIRECTDRAW_LCL	lpDD_lcl;
+    DWORD			dwProcessId;
+    LPPALETTEENTRY		lpColorTable;
+    union {
+	ULONG_PTR		dwReserved1; /* for display driver use */
+	HPALETTE		hHELGDIPalette;
+    } DUMMYUNIONNAME1;
+    /* DirectX 5.0 */
+    DWORD			dwDriverReserved;
+    DWORD			dwContentsStamp;
+    /* DirectX 6.0 */
+    DWORD			dwSaveStamp;
+    /* DirectX 7.0 */
+    DWORD			dwHandle;
+} DDRAWI_DDRAWPALETTE_GBL;
+
+#define DDRAWIPAL_256		0x00000001
+#define DDRAWIPAL_16		0x00000002
+#define DDRAWIPAL_GDI		0x00000004
+#define DDRAWIPAL_STORED_8	0x00000008
+#define DDRAWIPAL_STORED_16	0x00000010
+#define DDRAWIPAL_STORED_24	0x00000020
+#define DDRAWIPAL_EXCLUSIVE	0x00000040
+#define DDRAWIPAL_INHEL		0x00000080
+#define DDRAWIPAL_DIRTY		0x00000100
+#define DDRAWIPAL_ALLOW256	0x00000200
+#define DDRAWIPAL_4		0x00000400
+#define DDRAWIPAL_2		0x00000800
+#define DDRAWIPAL_STORED_8INDEX	0x00001000
+#define DDRAWIPAL_ALPHA		0x00002000
+
+typedef struct _DDRAWI_DDRAWPALETTE_LCL {
+    DWORD			lpPalMore;
+    LPDDRAWI_DDRAWPALETTE_GBL	lpGbl;
+    ULONG_PTR			dwUnused0;
+    DWORD			dwLocalRefCnt;
+    IUnknown *			pUnkOuter;
+    LPDDRAWI_DIRECTDRAW_LCL	lpDD_lcl;
+    ULONG_PTR			dwReserved1;
+    /* DirectX 6.0 */
+    ULONG_PTR			dwDDRAWReserved1;
+    ULONG_PTR			dwDDRAWReserved2;
+    ULONG_PTR			dwDDRAWReserved3;
+} DDRAWI_DDRAWPALETTE_LCL;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __DDRAWI_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl
new file mode 100644
index 0000000..98b686b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+
+cpp_quote("#ifndef __DDRAW_INCLUDED__")
+typedef void * LPDDSURFACEDESC;
+typedef struct tDDSURFACEDESC DDSURFACEDESC;
+interface IDirectDraw;
+interface IDirectDrawSurface;
+interface IDirectDrawPalette;
+cpp_quote("#endif")
+cpp_quote("#include <ddraw.h>")
+
+enum {
+	DDSFF_PROGRESSIVERENDER = 0x00000001
+};
+
+interface IDirectDrawMediaStream;
+interface IDirectDrawStreamSample;
+
+[
+object,
+local,
+uuid(F4104FCE-9A70-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaStream : IMediaStream
+{
+	HRESULT GetFormat(
+		[out] DDSURFACEDESC *pDDSDCurrent,
+		[out] IDirectDrawPalette **ppDirectDrawPalette,
+		[out] DDSURFACEDESC *pDDSDDesired,
+		[out] DWORD *pdwFlags);
+
+	HRESULT SetFormat(
+		[in] const DDSURFACEDESC *pDDSurfaceDesc,
+		[in] IDirectDrawPalette *pDirectDrawPalette);
+
+	HRESULT GetDirectDraw(
+		[out] IDirectDraw **ppDirectDraw);
+
+	HRESULT SetDirectDraw(
+		[in] IDirectDraw *pDirectDraw);
+
+	HRESULT CreateSample(
+		[in] IDirectDrawSurface *pSurface,
+		[in] const RECT *pRect,
+		[in] DWORD dwFlags,
+		[out] IDirectDrawStreamSample **ppSample);
+
+	HRESULT GetTimePerFrame(
+		[out] STREAM_TIME *pFrameTime);
+}
+
+
+[
+object,
+local,
+uuid(F4104FCF-9A70-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawStreamSample : IStreamSample
+{
+	HRESULT GetSurface(
+		[out] IDirectDrawSurface ** ppDirectDrawSurface,
+		[out] RECT * pRect);
+
+	HRESULT SetRect(
+		[in] const RECT * pRect);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h
new file mode 100644
index 0000000..a491e54
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2013 André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DELAYLOADHANDLER_H
+#define __WINE_DELAYLOADHANDLER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DELAYLOAD_GPA_FAILURE 4
+
+typedef struct _DELAYLOAD_PROC_DESCRIPTOR
+{
+    ULONG ImportDescribedByName;
+    union {
+        LPCSTR Name;
+        ULONG Ordinal;
+    } Description;
+} DELAYLOAD_PROC_DESCRIPTOR, *PDELAYLOAD_PROC_DESCRIPTOR;
+
+typedef struct _DELAYLOAD_INFO
+{
+    ULONG Size;
+    PCIMAGE_DELAYLOAD_DESCRIPTOR DelayloadDescriptor;
+    PIMAGE_THUNK_DATA ThunkAddress;
+    LPCSTR TargetDllName;
+    DELAYLOAD_PROC_DESCRIPTOR TargetApiDescriptor;
+    PVOID TargetModuleBase;
+    PVOID Unused;
+    ULONG LastError;
+} DELAYLOAD_INFO, *PDELAYLOAD_INFO;
+
+typedef PVOID (WINAPI *PDELAYLOAD_FAILURE_DLL_CALLBACK)(ULONG, PDELAYLOAD_INFO);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_DELAYLOADHANDLER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl
new file mode 100644
index 0000000..ccaaa60
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+cpp_quote("#define CDEF_CLASS_DEFAULT 0x0001")
+cpp_quote("#define CDEF_BYPASS_CLASS_MANAGER 0x0002")
+cpp_quote("#define CDEF_CLASS_LEGACY  0x0004")
+cpp_quote("#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008")
+
+[
+    object,
+    uuid(29840822-5B84-11D0-BD3B-00A0C911CE86),
+    pointer_default(unique)
+]
+interface ICreateDevEnum : IUnknown
+{
+    HRESULT CreateClassEnumerator(
+        [in]  REFCLSID clsidDeviceClass,
+        [out] IEnumMoniker ** ppEnumMoniker,
+        [in]  DWORD dwFlags);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h
new file mode 100644
index 0000000..9e86334
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h
@@ -0,0 +1,115 @@
+/*
+ * Defines GUIDs for device classes
+ *
+ * Copyright (C) 2004 CodeWeavers (Aric Stewart)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+DEFINE_GUID( GUID_DEVCLASS_1394,
+  0x6BDD1FC1, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_ADAPTER,
+  0x4D36E964, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_APMSUPPORT,
+  0xD45B1C18, 0xC8FA, 0x11D1, 0x9F, 0x77, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
+DEFINE_GUID( GUID_DEVCLASS_BATTERY,
+  0x72631E54, 0x78A4, 0x11D0, 0xBC, 0xF7, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A );
+DEFINE_GUID( GUID_DEVCLASS_CDROM,
+  0x4D36E965, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_COMPUTER,
+  0x4D36E966, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_DECODER,
+  0x6BDD1FC2, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_DISKDRIVE,
+  0x4D36E967, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_DISPLAY,
+  0x4D36E968, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_FDC,
+  0x4D36E969, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_FLOPPYDISK,
+  0x4D36E980, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_GPS,
+  0x6BDD1FC3, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_HDC,
+  0x4D36E96A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_HIDCLASS,
+  0x745A17A0, 0x74D3, 0x11D0, 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA );
+DEFINE_GUID( GUID_DEVCLASS_IMAGE,
+  0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_INFRARED,
+  0x6BDD1FC5, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_KEYBOARD,
+  0x4D36E96B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_LEGACYDRIVER,
+  0x8ECC055D, 0x047F, 0x11D1, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1 );
+DEFINE_GUID( GUID_DEVCLASS_MEDIA,
+  0x4D36E96C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MEDIUM_CHANGER,
+  0xCE5939AE, 0xEBDE, 0x11D0, 0xB1, 0x81, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xC4 );
+DEFINE_GUID( GUID_DEVCLASS_MODEM,
+  0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MONITOR,
+  0x4D36E96E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MOUSE,
+  0x4D36E96F, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MTD,
+  0x4D36E970, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MULTIFUNCTION,
+  0x4D36E971, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MULTIPORTSERIAL,
+  0x50906CB8, 0xBA12, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
+DEFINE_GUID( GUID_DEVCLASS_NET,
+  0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NETCLIENT,
+  0x4D36E973, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NETSERVICE,
+  0x4D36E974, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NETTRANS,
+  0x4D36E975, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NODRIVER,
+  0x4D36E976, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PCMCIA,
+  0x4D36E977, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PORTS,
+  0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PRINTER,
+  0x4D36E979, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PRINTERUPGRADE,
+  0x4D36E97A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_SCSIADAPTER,
+  0x4D36E97B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_SMARTCARDREADER,
+  0x50DD5230, 0xBA8A, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
+DEFINE_GUID( GUID_DEVCLASS_SOUND,
+  0x4D36E97C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_SYSTEM,
+  0x4D36E97D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_TAPEDRIVE,
+  0x6D807884, 0x7D21, 0x11CF, 0x80, 0x1C, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_UNKNOWN,
+  0x4D36E97E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_USB,
+  0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );
+DEFINE_GUID( GUID_DEVCLASS_VOLUME,
+  0x71A27CDD, 0x812A, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl
new file mode 100644
index 0000000..413f636
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl
@@ -0,0 +1,745 @@
+/*
+ * Core Audio device topology definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+interface IPart;
+interface IControlInterface;
+interface IDeviceTopology;
+interface IControlChangeNotify;
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "propidl.idl";
+
+cpp_quote("#ifndef E_NOTFOUND")
+cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
+cpp_quote("#endif")
+
+cpp_quote("#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 0x64726148 /* 'draH' */")
+cpp_quote("DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);")
+
+cpp_quote("#define _IKsControl_")
+cpp_quote("#include <ks.h>")
+cpp_quote("#include <ksmedia.h>")
+cpp_quote("#ifndef _KS_")
+
+typedef struct {
+    ULONG FormatSize;
+    ULONG Flags;
+    ULONG SampleSize;
+    ULONG Reserved;
+    GUID MajorFormat;
+    GUID SubFormat;
+    GUID Specifier;
+} KSDATAFORMAT;
+
+typedef KSDATAFORMAT *PKSDATAFORMAT;
+
+typedef struct
+{
+    union
+    {
+        struct {
+            GUID Set;
+            ULONG Id;
+            ULONG Flags;
+        };
+        LONGLONG Alignment;
+    };
+} KSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
+typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;
+typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
+
+typedef enum
+{
+    eConnTypeUnknown = 0,
+    eConnType3Point5mm,
+    eConnTypeQuarter,
+    eConnTypeAtapiInternal,
+    eConnTypeRCA,
+    eConnTypeOptical,
+    eConnTypeOtherDigital,
+    eConnTypeOtherAnalog,
+    eConnTypeMultichannelAnalogDIN,
+    eConnTypeXlrProfessional,
+    eConnTypeRj11Modem,
+    eConnTypeCombination
+} EPcxConnectionType;
+
+typedef enum
+{
+    eGeoLocRear = 1,
+    eGeoLocFront,
+    eGeoLocLeft,
+    eGeoLocRight,
+    eGeoLocTop,
+    eGeoLocBottom,
+    eGeoLocRearPanel,
+    eGeoLocRiser,
+    eGeoLocInsideMobileLid,
+    eGeoLocDrivebay,
+    eGeoLocHDMI,
+    eGeoLocOutsideMobileLid,
+    eGeoLocATAPI,
+    eGeoLocReserved5,
+    eGeoLocReserved6
+} EPcxGeoLocation;
+
+typedef enum
+{
+    eGenLocPrimaryBox = 0,
+    eGenLocInternal,
+    eGenLocSeparate,
+    eGenLocOther
+} EPcxGenLocation;
+
+typedef enum
+{
+    ePortConnJack = 0,
+    ePortConnIntegratedDevice,
+    ePortConnBothIntegratedAndJack,
+    ePortConnUnknown
+} EPxcPortConnection;
+
+typedef struct
+{
+    DWORD ChannelMapping;
+    COLORREF Color;
+    EPcxConnectionType ConnectionType;
+    EPcxGeoLocation GeoLocation;
+    EPcxGenLocation GenLocation;
+    EPxcPortConnection PortConnection;
+    BOOL IsConnected;
+} KSJACK_DESCRIPTION;
+
+typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;
+
+typedef struct _LUID
+{
+    DWORD LowPart;
+    LONG HighPart;
+} LUID;
+
+typedef struct _LUID *PLUID;
+
+typedef enum
+{
+    KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,
+    KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT
+} KSJACK_SINK_CONNECTIONTYPE;
+
+typedef struct _tagKSJACK_SINK_INFORMATION
+{
+    KSJACK_SINK_CONNECTIONTYPE ConnType;
+    WORD ManufacturerId;
+    WORD ProductId;
+    WORD AudioLatency;
+    BOOL HDCPCapable;
+    BOOL AICapable;
+    UCHAR SinkDescriptionLength;
+    WCHAR SinkDescription[32];
+    LUID PortId;
+} KSJACK_SINK_INFORMATION;
+
+typedef struct _tagKSJACK_DESCRIPTION2
+{
+    DWORD DeviceStateInfo;
+    DWORD JackCapabilities;
+} KSJACK_DESCRIPTION2;
+
+typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
+
+cpp_quote("#endif")
+
+typedef enum
+{
+    In = 0,
+    Out
+} DataFlow;
+
+typedef enum
+{
+    Connector = 0,
+    Subunit
+} PartType;
+
+typedef enum
+{
+    Unknown_Connector = 0,
+    Physical_Internal,
+    Physical_External,
+    Software_IO,
+    Software_Fixed,
+    Network
+} ConnectorType;
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(28f54685-06fd-11d2-b27a-00a0c9223196),
+    local,
+    object
+]
+interface IKsControl : IUnknown
+{
+    HRESULT KsProperty(
+        [in] PKSPROPERTY Property,
+        [in] ULONG PropertyLength,
+        [in,out] void *PropertyData,
+        [in] ULONG DataLength,
+        [out] ULONG *BytesReturned
+    );
+    HRESULT KsMethod(
+        [in] PKSMETHOD Method,
+        [in] ULONG MethodLength,
+        [in,out] void *MethodData,
+        [in] ULONG DataLength,
+        [out] ULONG *BytesReturned
+    );
+    HRESULT KsEvent(
+        [in] PKSEVENT Event,
+        [in] ULONG EventLength,
+        [in,out] void *EventData,
+        [in] ULONG DataLength,
+        [out] ULONG *BytesReturned
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb),
+    local,
+    object
+]
+interface IPerChannelDbLevel : IUnknown
+{
+    HRESULT GetChannelCount(
+        [out] UINT *pcChannels
+    );
+    HRESULT GetLevelRange(
+        [in] UINT nChannel,
+        [out] float *pfMinLevelDB,
+        [out] float *pfMaxLevelDB,
+        [out] float *pfStepping
+    );
+    HRESULT GetLevel(
+        [in] UINT nChannel,
+        [out] float *pfLevelDB
+    );
+    HRESULT SetLevel(
+        [in] UINT nChannel,
+        [in] float fLevelDB,
+        [in,unique] LPCGUID pguidEventContext
+    );
+    HRESULT SetLevelUniform(
+        [in] float fLevelDB,
+        [in,unique] LPCGUID pguidEventContext
+    );
+    HRESULT SetLevelAllChannels(
+        [size_is(cChannels),in] float *aLevelsDB,
+        [in] ULONG cChannels,
+        [in] LPCGUID pguidEventContext
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc),
+    local,
+    object
+]
+interface IAudioVolumeLevel : IPerChannelDbLevel
+{
+    /* Empty */
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(bb11c46f-ec28-493c-b88a-5db88062ce98),
+    local,
+    object
+]
+interface IAudioChannelConfig : IUnknown
+{
+    HRESULT SetChannelConfig(
+        [in] DWORD dwConfig,
+        [in] LPCGUID pguidEventContext
+    );
+    HRESULT GetChannelConfig(
+        [in] DWORD dwConfig,
+        [retval,out] DWORD *pdwConfig
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938),
+    local,
+    object
+]
+interface IAudioLoudness : IUnknown
+{
+    HRESULT GetEnabled(
+        [out] BOOL *pbEnabled
+    );
+    HRESULT SetEnabled(
+        [in] BOOL bEnabled,
+        [in] LPCGUID pguidEventContext
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(4f03dc02-5e6e-4653-8f72-a030c123d598),
+    local,
+    object
+]
+interface IAudioInputSelector : IUnknown
+{
+    HRESULT GetSelection(
+        [out] UINT *pnIdSelected
+    );
+    HRESULT SetSelection(
+        [in] UINT nIdSelect,
+        [unique,in] LPCGUID pguidEventContext
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
+    local,
+    object
+]
+interface IAudioOutputSelector : IUnknown
+{
+    HRESULT GetSelection(
+        [out] UINT *pnIdSelected
+    );
+    HRESULT SetSelection(
+        [in] UINT nIdSelect,
+        [unique,in] LPCGUID pguidEventContext
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
+    local,
+    object
+]
+interface IAudioMute : IUnknown
+{
+    HRESULT SetMute(
+        [in] BOOL bMute,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT GetMute(
+        [out] BOOL *pbMute
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5),
+    local,
+    object
+]
+interface IAudioBass : IPerChannelDbLevel
+{
+    /* Empty */
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf),
+    local,
+    object
+]
+interface IAudioMidRange : IPerChannelDbLevel
+{
+    /* Empty */
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(0a717812-694e-4907-b74b-bafa5cfdca7b),
+    local,
+    object
+]
+interface IAudioTreble : IPerChannelDbLevel
+{
+    /* Empty */
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
+    local,
+    object
+]
+interface IAudioAutoGainControl : IUnknown
+{
+    HRESULT GetEnabled(
+        [in] BOOL bEnabled,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT GetMute(
+        [out] BOOL *pbEnabled
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796),
+    local,
+    object
+]
+interface IAudioPeakMeter : IUnknown
+{
+    HRESULT GetChannelCount(
+        [out] UINT *pcChannels
+    );
+    HRESULT GetLevel(
+        [in] UINT nChannel,
+        [out] float *pfLevel
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(3b22bcbf-2586-4af0-8583-205d391b807c),
+    local,
+    object
+]
+interface IDeviceSpecificProperty : IUnknown
+{
+    HRESULT GetType(
+        [out] VARTYPE *pVType
+    );
+    HRESULT GetValue(
+        [out] VARTYPE *pvType,
+        [out,in] DWORD *pcbValue
+    );
+    HRESULT SetValue(
+        [in] void *pvValue,
+        [in] DWORD cbValue,
+        [in] LPCGUID pguidEventContext
+    );
+    HRESULT Get4BRange(
+        [out] LONG *plMin,
+        [out] LONG *plMax,
+        [out] LONG *plStepping
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5),
+    local,
+    object
+]
+interface IKsFormatSupport : IUnknown
+{
+    HRESULT IsFormatSupported(
+        [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat,
+        [in] DWORD cbFormat,
+        [out] BOOL *pbSupported
+    );
+    HRESULT GetDevicePreferredFormat(
+        [out] PKSDATAFORMAT *ppKsFormat
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(4509f757-2d46-4637-8e62-ce7db944f57b),
+    local,
+    object
+]
+interface IKsJackDescription : IUnknown
+{
+    HRESULT GetJackCount(
+        [out] UINT *pcJacks
+    );
+    HRESULT GetJackDescription(
+        [in] UINT nJack,
+        [out] KSJACK_DESCRIPTION *pDescription
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a),
+    local,
+    object
+]
+interface IKsJackDescription2 : IUnknown
+{
+    HRESULT GetJackCount(
+        [out] UINT *pcJacks
+    );
+    HRESULT GetJackDescription2(
+        [in] UINT nJack,
+        [out] KSJACK_DESCRIPTION2 *pDescription2
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532),
+    local,
+    object
+]
+interface IKsJackSinkInformation : IUnknown
+{
+    HRESULT GetJackSinkInformation(
+        [out] KSJACK_SINK_INFORMATION *pJackSinkInformation
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb),
+    local,
+    object
+]
+interface IPartsList : IUnknown
+{
+    HRESULT GetCount(
+        [out] UINT *pCount
+    );
+    HRESULT GetPart(
+        [in] UINT nIndex,
+        [out] IPart **ppPart
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9),
+    local,
+    object
+]
+interface IPart : IUnknown
+{
+    HRESULT GetName(
+        [out] LPWSTR *ppwstrName
+    );
+    HRESULT GetLocalId(
+        [out] UINT *pnId
+    );
+    HRESULT GetGlobalId(
+        [out] LPWSTR *ppwstrGlobalId
+    );
+    HRESULT GetPartType(
+        [out] PartType *pPartType
+    );
+    HRESULT GetSubType(
+        [out] GUID *pSubType
+    );
+    HRESULT GetControlInterfaceCount(
+        [out] UINT *pCount
+    );
+    HRESULT GetControlInterface(
+        [in] UINT nIndex,
+        [out] IControlInterface **ppInterfaceDesc
+    );
+    HRESULT EnumPartsIncoming(
+        [out] IPartsList **ppParts
+    );
+    HRESULT EnumPartsOutgoing(
+        [out] IPartsList **ppParts
+    );
+    HRESULT GetTopologyObjects(
+        [out] IDeviceTopology **ppTopology
+    );
+    HRESULT Activate(
+        [in] DWORD dwClsContext,
+        [in] REFIID refiid,
+        [iid_is(refiid),out] void **ppvObject
+    );
+    HRESULT RegisterControlChangeCallback(
+        [in] REFGUID riid,
+        [in] IControlChangeNotify *pNotify
+    );
+    HRESULT UnregisterControlChangeCallback(
+        [in] IControlChangeNotify *pNotify
+    );
+};
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(9c2c4058-23f5-41de-877a-df3af236a09e),
+    local,
+    object
+]
+interface IConnector : IUnknown
+{
+    HRESULT GetType(
+        [out] ConnectorType *pType
+    );
+    HRESULT GetDataFlow(
+        [out] DataFlow *pFlow
+    );
+    HRESULT ConnectTo(
+        [in] IConnector *pConnectTo
+    );
+    HRESULT Disconnect(void);
+    HRESULT IsConnected(
+        [out] BOOL *pbConnected
+    );
+    HRESULT GetConnectedTo(
+        [out] IConnector **ppConTo
+    );
+    HRESULT GetConnectorIdConnectedTo(
+        [out] LPWSTR *ppwstrConnectorId
+    );
+    HRESULT GetDeviceIdConnectedTo(
+        [out] LPWSTR *ppwstrDeviceId
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71),
+    local,
+    object
+]
+interface ISubUnit: IUnknown
+{
+    /* Empty IUnknown interface.. */
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(45d37c3f-5140-444a-ae24-400789f3cbf3),
+    local,
+    object
+]
+interface IControlInterface : IUnknown
+{
+    HRESULT GetName(
+        [out] LPWSTR *ppwstrName
+    );
+    HRESULT GetIID(
+        [out] GUID *pIID
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947),
+    local,
+    object
+]
+interface IControlChangeNotify : IUnknown
+{
+    HRESULT OnNotify(
+        [in] DWORD dwSenderProcessId,
+        [in] LPCGUID ppguidEventContext
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(2a07407e-6497-4a18-9787-32f79bd0d98f),
+    local,
+    object
+]
+interface IDeviceTopology : IUnknown
+{
+    HRESULT GetConnectorCount(
+        [out] UINT *pCount
+    );
+    HRESULT GetConnector(
+        [in] UINT nIndex,
+        [out] IConnector **ppConnector
+    );
+    HRESULT GetSubunitCount(
+        [out] UINT *pCount
+    );
+    HRESULT GetSubunit(
+        [in] UINT nIndex,
+        [out] ISubUnit **ppConnector
+    );
+    HRESULT GetPartById(
+        [in] UINT nId,
+        [out] IPart **ppPart
+    );
+    HRESULT GetDeviceId(
+        [out] LPWSTR *ppwstrDeviceId
+    );
+    HRESULT GetSignalPath(
+        [in] IPart *pIPartFrom,
+        [in] IPart *pIPartTo,
+        [in] BOOL bRejectMixedPaths,
+        [out] IPartsList **ppParts
+    );
+}
+
+[
+    version(1.0)
+]
+library DevTopologyLib
+{
+    [
+        uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59),
+    ]
+    coclass DeviceTopology
+    {
+        interface IDeviceTopology;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h
new file mode 100644
index 0000000..8382e61
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <devpropdef.h>
+
+/* TODO: Not all DEVPROPKEYS have been defined here */
+
+DEFINE_DEVPROPKEY(DEVPKEY_NAME, 0xb725f130,0x47ef,0x101a,0xa5,0xf1,0x02,0x60,0x8c,0x9e,0xeb,0xac, 10);
+
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DeviceDesc, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_HardwareIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_CompatibleIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Service, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Class, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ClassGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Driver, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ConfigFlags, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Manufacturer, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 13);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 14);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationInfo, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 15);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PDOName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 16);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Capabilities, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 17);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 18);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UpperFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 19);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LowerFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 20);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusTypeGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 21);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LegacyBusType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 22);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusNumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 23);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_EnumeratorName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 24);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Security, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 25);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SecuritySDS, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 26);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DevType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 27);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Exclusive, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 28);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Characteristics, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 29);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Address, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 30);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumberDescFormat, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 31);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PowerData, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 32);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicy, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 33);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyDefault, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 34);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyOverride, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 35);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 36);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ClassGuid, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 4);
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h
new file mode 100644
index 0000000..795c259
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _DEVPROPDEF_H_
+#define _DEVPROPDEF_H_
+
+typedef ULONG DEVPROPTYPE, *PDEVPROPTYPE;
+
+#define DEVPROP_TYPEMOD_ARRAY 0x1000
+#define DEVPROP_TYPEMOD_LIST 0x2000
+#define MAX_DEVPROP_TYPEMOD DEVPROP_TYPEMOD_LIST
+
+#define DEVPROP_TYPE_EMPTY 0x00
+#define DEVPROP_TYPE_NULL 0x01
+#define DEVPROP_TYPE_SBYTE 0x02
+#define DEVPROP_TYPE_BYTE 0x03
+#define DEVPROP_TYPE_INT16 0x04
+#define DEVPROP_TYPE_UINT16 0x05
+#define DEVPROP_TYPE_INT32 0x06
+#define DEVPROP_TYPE_UINT32 0x07
+#define DEVPROP_TYPE_INT64 0x08
+#define DEVPROP_TYPE_UINT64 0x09
+#define DEVPROP_TYPE_FLOAT 0x0a
+#define DEVPROP_TYPE_DOUBLE 0x0b
+#define DEVPROP_TYPE_DECIMAL 0x0c
+#define DEVPROP_TYPE_GUID 0x0d
+#define DEVPROP_TYPE_CURRENCY 0x0e
+#define DEVPROP_TYPE_DATE 0x0f
+#define DEVPROP_TYPE_FILETIME 0x10
+#define DEVPROP_TYPE_BOOLEAN 0x11
+#define DEVPROP_TYPE_STRING 0x12
+#define DEVPROP_TYPE_STRING_LIST (DEVPROP_TYPE_STRING|DEVPROP_TYPEMOD_LIST)
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR 0x13
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING 0x14
+#define DEVPROP_TYPE_DEVPROPKEY 0x15
+#define DEVPROP_TYPE_DEVPROPTYPE 0x16
+#define DEVPROP_TYPE_BINARY (DEVPROP_TYPE_BYTE|DEVPROP_TYPEMOD_ARRAY)
+#define DEVPROP_TYPE_ERROR 0x17
+#define DEVPROP_TYPE_NTSTATUS 0x18
+#define DEVPROP_TYPE_STRING_INDIRECT 0x19
+#define MAX_DEVPROP_TYPE DEVPROP_TYPE_STRING_INDIRECT
+
+#define DEVPROP_MASK_TYPE 0x0fff
+#define DEVPROP_MASK_TYPEMOD 0xf000
+
+typedef CHAR DEVPROP_BOOLEAN, *PDEVPROP_BOOLEAN;
+#define DEVPROP_TRUE ((DEVPROP_BOOLEAN)-1)
+#define DEVPROP_FALSE ((DEVPROP_BOOLEAN)0)
+
+#ifndef DEVPROPKEY_DEFINED
+#define DEVPROPKEY_DEFINED
+typedef GUID DEVPROPGUID, *PDEVPROPGUID;
+typedef ULONG DEVPROPID, *PDEVPROPID;
+
+typedef struct _DEVPROPKEY {
+    DEVPROPGUID fmtid;
+    DEVPROPID pid;
+} DEVPROPKEY, *PDEVPROPKEY;
+
+#define DEVPROPID_FIRST_USABLE 2
+
+#endif /*DEVPROPKEY_DEFINED*/
+
+#endif /*_DEVPROPDEF_H_*/
+
+#undef DEFINE_DEVPROPKEY
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+        EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \
+        EXTERN_C const DEVPROPKEY name = \
+        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#else
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+        const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \
+        const DEVPROPKEY name = \
+        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#endif
+#else
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+    EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY
+#endif
+
+#ifndef IsEqualDevPropKey
+#ifdef __cplusplus
+#define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid))
+#else
+#define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid))
+#endif
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h
new file mode 100644
index 0000000..16017b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2013 André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DIFXAPI_H
+#define __WINE_DIFXAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _INSTALLERINFO_A
+{
+    PSTR pApplicationId;
+    PSTR pDisplayName;
+    PSTR pProductName;
+    PSTR pMfgName;
+} INSTALLERINFO_A, *PINSTALLERINFO_A;
+typedef const PINSTALLERINFO_A PCINSTALLERINFO_A;
+
+typedef struct _INSTALLERINFO_W
+{
+    PWSTR pApplicationId;
+    PWSTR pDisplayName;
+    PWSTR pProductName;
+    PWSTR pMfgName;
+} INSTALLERINFO_W, *PINSTALLERINFO_W;
+typedef const PINSTALLERINFO_W PCINSTALLERINFO_W;
+
+typedef enum _DIFXAPI_LOG
+{
+    DIFXAPI_SUCCESS,
+    DIFXAPI_INFO,
+    DIFXAPI_WARNING,
+    DIFXAPI_ERROR,
+} DIFXAPI_LOG;
+
+typedef VOID (CALLBACK *DIFXAPILOGCALLBACK_A)(DIFXAPI_LOG,DWORD,PCSTR,PVOID);
+typedef VOID (CALLBACK *DIFXAPILOGCALLBACK_W)(DIFXAPI_LOG,DWORD,PCWSTR,PVOID);
+
+VOID  WINAPI DIFXAPISetLogCallbackA(DIFXAPILOGCALLBACK_A,VOID*);
+VOID  WINAPI DIFXAPISetLogCallbackW(DIFXAPILOGCALLBACK_W,VOID*);
+DWORD WINAPI DriverPackageGetPathA(PCSTR,PSTR,DWORD*);
+DWORD WINAPI DriverPackageGetPathW(PCWSTR,PWSTR,DWORD*);
+DWORD WINAPI DriverPackageInstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*);
+DWORD WINAPI DriverPackageInstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*);
+DWORD WINAPI DriverPackagePreinstallA(PCSTR,DWORD);
+DWORD WINAPI DriverPackagePreinstallW(PCWSTR,DWORD);
+DWORD WINAPI DriverPackageUninstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*);
+DWORD WINAPI DriverPackageUninstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_DIFXAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h
new file mode 100644
index 0000000..e4cefee
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h
@@ -0,0 +1,875 @@
+/*
+ * Copyright (C) 1999 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DIGITALV_H
+#define __WINE_DIGITALV_H
+
+/*
+ * Wine Digital Video extensions
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MCI_TEST                            __MSABI_LONG(0x00000020)
+
+/* Message values */
+
+#define MCI_CAPTURE                         0x0870
+#define MCI_MONITOR                         0x0871
+#define MCI_RESERVE                         0x0872
+#define MCI_SETAUDIO                        0x0873
+#define MCI_SIGNAL                          0x0875
+#define MCI_SETVIDEO                        0x0876
+#define MCI_QUALITY                         0x0877
+#define MCI_LIST                            0x0878
+#define MCI_UNDO                            0x0879
+#define MCI_CONFIGURE                       0x087A
+#define MCI_RESTORE                         0x087B
+
+/* Return and string constant values */
+
+#define MCI_ON   1
+#define MCI_OFF  0
+
+#define MCI_DGV_FILE_MODE_SAVING            0x0001
+#define MCI_DGV_FILE_MODE_LOADING           0x0002
+#define MCI_DGV_FILE_MODE_EDITING           0x0003
+#define MCI_DGV_FILE_MODE_IDLE              0x0004
+
+/* These identifiers are used only by device drivers */
+
+#define MCI_ON_S                            __MSABI_LONG(0x00008000)
+#define MCI_OFF_S                           __MSABI_LONG(0x00008001)
+#define MCI_DGV_FILE_S                      __MSABI_LONG(0x00008002)
+#define MCI_DGV_INPUT_S                     __MSABI_LONG(0x00008003)
+
+#define MCI_DGV_FILE_MODE_SAVING_S          __MSABI_LONG(0x00008004)
+#define MCI_DGV_FILE_MODE_LOADING_S         __MSABI_LONG(0x00008005)
+#define MCI_DGV_FILE_MODE_EDITING_S         __MSABI_LONG(0x00008006)
+#define MCI_DGV_FILE_MODE_IDLE_S            __MSABI_LONG(0x00008007)
+
+#define MCI_DGV_SETVIDEO_SRC_NTSC_S         __MSABI_LONG(0x00008010)
+#define MCI_DGV_SETVIDEO_SRC_RGB_S          __MSABI_LONG(0x00008011)
+#define MCI_DGV_SETVIDEO_SRC_SVIDEO_S       __MSABI_LONG(0x00008012)
+#define MCI_DGV_SETVIDEO_SRC_PAL_S          __MSABI_LONG(0x00008013)
+#define MCI_DGV_SETVIDEO_SRC_SECAM_S        __MSABI_LONG(0x00008014)
+#define MCI_DGV_SETVIDEO_SRC_GENERIC_S      __MSABI_LONG(0x00008015)
+
+#define MCI_DGV_SETAUDIO_SRC_LEFT_S         __MSABI_LONG(0x00008020)
+#define MCI_DGV_SETAUDIO_SRC_RIGHT_S        __MSABI_LONG(0x00008021)
+#define MCI_DGV_SETAUDIO_SRC_AVERAGE_S      __MSABI_LONG(0x00008022)
+#define MCI_DGV_SETAUDIO_SRC_STEREO_S       __MSABI_LONG(0x00008023)
+
+/* Window message for signal notification */
+
+#ifndef MM_MCISIGNAL
+#define MM_MCISIGNAL                        0x3CB
+#endif
+
+/* error values */
+
+#define MCIERR_DGV_DEVICE_LIMIT             (MCIERR_CUSTOM_DRIVER_BASE+0)
+#define MCIERR_DGV_IOERR                    (MCIERR_CUSTOM_DRIVER_BASE+1)
+#define MCIERR_DGV_WORKSPACE_EMPTY          (MCIERR_CUSTOM_DRIVER_BASE+2)
+#define MCIERR_DGV_DISK_FULL                (MCIERR_CUSTOM_DRIVER_BASE+3)
+#define MCIERR_DGV_DEVICE_MEMORY_FULL       (MCIERR_CUSTOM_DRIVER_BASE+4)
+#define MCIERR_DGV_BAD_CLIPBOARD_RANGE      (MCIERR_CUSTOM_DRIVER_BASE+5)
+
+/* defines for monitor methods */
+
+#define MCI_DGV_METHOD_PRE                  __MSABI_LONG(0x0000a000)
+#define MCI_DGV_METHOD_POST                 __MSABI_LONG(0x0000a001)
+#define MCI_DGV_METHOD_DIRECT               __MSABI_LONG(0x0000a002)
+
+/* defines for known file formats */
+
+#define MCI_DGV_FF_AVSS                     __MSABI_LONG(0x00004000)
+#define MCI_DGV_FF_AVI                      __MSABI_LONG(0x00004001)
+#define MCI_DGV_FF_DIB                      __MSABI_LONG(0x00004002)
+#define MCI_DGV_FF_RDIB                     __MSABI_LONG(0x00004003)
+#define MCI_DGV_FF_JPEG                     __MSABI_LONG(0x00004004)
+#define MCI_DGV_FF_RJPEG                    __MSABI_LONG(0x00004005)
+#define MCI_DGV_FF_JFIF                     __MSABI_LONG(0x00004006)
+#define MCI_DGV_FF_MPEG                     __MSABI_LONG(0x00004007)
+
+/* values for dwItem field of MCI_CAPABILITY_PARMS structure */
+
+#define MCI_DGV_GETDEVCAPS_CAN_LOCK         __MSABI_LONG(0x00004000)
+#define MCI_DGV_GETDEVCAPS_CAN_STRETCH      __MSABI_LONG(0x00004001)
+#define MCI_DGV_GETDEVCAPS_CAN_FREEZE       __MSABI_LONG(0x00004002)
+#define MCI_DGV_GETDEVCAPS_MAX_WINDOWS      __MSABI_LONG(0x00004003)
+#define MCI_DGV_GETDEVCAPS_CAN_REVERSE      __MSABI_LONG(0x00004004)
+#define MCI_DGV_GETDEVCAPS_HAS_STILL        __MSABI_LONG(0x00004005)
+#define MCI_DGV_GETDEVCAPS_PALETTES         __MSABI_LONG(0x00004006)
+#define MCI_DGV_GETDEVCAPS_CAN_STR_IN       __MSABI_LONG(0x00004008)
+#define MCI_DGV_GETDEVCAPS_CAN_TEST         __MSABI_LONG(0x00004009)
+#define MCI_DGV_GETDEVCAPS_MAXIMUM_RATE     __MSABI_LONG(0x0000400a)
+#define MCI_DGV_GETDEVCAPS_MINIMUM_RATE     __MSABI_LONG(0x0000400b)
+
+/* flags for dwFlags parameter of MCI_CAPTURE command message */
+
+#define MCI_DGV_CAPTURE_AS                  __MSABI_LONG(0x00010000)
+#define MCI_DGV_CAPTURE_AT                  __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_COPY command message */
+
+#define MCI_DGV_COPY_AT                     __MSABI_LONG(0x00010000)
+#define MCI_DGV_COPY_AUDIO_STREAM           __MSABI_LONG(0x00020000)
+#define MCI_DGV_COPY_VIDEO_STREAM           __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_CUE command message */
+
+#define MCI_DGV_CUE_INPUT                   __MSABI_LONG(0x00010000)
+#define MCI_DGV_CUE_OUTPUT                  __MSABI_LONG(0x00020000)
+#define MCI_DGV_CUE_NOSHOW                  __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_CUT command message */
+
+#define MCI_DGV_CUT_AT                      __MSABI_LONG(0x00010000)
+#define MCI_DGV_CUT_AUDIO_STREAM            __MSABI_LONG(0x00020000)
+#define MCI_DGV_CUT_VIDEO_STREAM            __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_DELETE command message */
+
+#define MCI_DGV_DELETE_AT                   __MSABI_LONG(0x00010000)
+#define MCI_DGV_DELETE_AUDIO_STREAM         __MSABI_LONG(0x00020000)
+#define MCI_DGV_DELETE_VIDEO_STREAM         __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_FREEZE command message */
+
+#define MCI_DGV_FREEZE_AT                   __MSABI_LONG(0x00010000)
+#define MCI_DGV_FREEZE_OUTSIDE              __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_INFO command message */
+
+#define MCI_DGV_INFO_TEXT                   __MSABI_LONG(0x00010000)
+#define MCI_DGV_INFO_ITEM                   __MSABI_LONG(0x00020000)
+
+/* values for dwItem field of MCI_DGV_INFO_PARMS structure */
+
+#define MCI_INFO_VERSION                    __MSABI_LONG(0x00000400)
+
+#define MCI_DGV_INFO_USAGE                  __MSABI_LONG(0x00004000)
+#define MCI_DGV_INFO_AUDIO_QUALITY          __MSABI_LONG(0x00004001)
+#define MCI_DGV_INFO_STILL_QUALITY          __MSABI_LONG(0x00004002)
+#define MCI_DGV_INFO_VIDEO_QUALITY          __MSABI_LONG(0x00004003)
+#define MCI_DGV_INFO_AUDIO_ALG              __MSABI_LONG(0x00004004)
+#define MCI_DGV_INFO_STILL_ALG              __MSABI_LONG(0x00004005)
+#define MCI_DGV_INFO_VIDEO_ALG              __MSABI_LONG(0x00004006)
+
+/* flags for dwFlags parameter of MCI_LIST command message */
+
+#define MCI_DGV_LIST_ITEM                   __MSABI_LONG(0x00010000)
+#define MCI_DGV_LIST_COUNT                  __MSABI_LONG(0x00020000)
+#define MCI_DGV_LIST_NUMBER                 __MSABI_LONG(0x00040000)
+#define MCI_DGV_LIST_ALG                    __MSABI_LONG(0x00080000)
+
+/* values for dwItem field of MCI_DGV_LIST_PARMS structure */
+
+#define MCI_DGV_LIST_AUDIO_ALG              __MSABI_LONG(0x00004000)
+#define MCI_DGV_LIST_AUDIO_QUALITY          __MSABI_LONG(0x00004001)
+#define MCI_DGV_LIST_AUDIO_STREAM           __MSABI_LONG(0x00004002)
+#define MCI_DGV_LIST_STILL_ALG              __MSABI_LONG(0x00004003)
+#define MCI_DGV_LIST_STILL_QUALITY          __MSABI_LONG(0x00004004)
+#define MCI_DGV_LIST_VIDEO_ALG              __MSABI_LONG(0x00004005)
+#define MCI_DGV_LIST_VIDEO_QUALITY          __MSABI_LONG(0x00004006)
+#define MCI_DGV_LIST_VIDEO_STREAM           __MSABI_LONG(0x00004007)
+#define MCI_DGV_LIST_VIDEO_SOURCE           __MSABI_LONG(0x00004008)
+
+
+/* flags for dwFlags parameter of MCI_MONITOR command message */
+
+#define MCI_DGV_MONITOR_METHOD              __MSABI_LONG(0x00010000)
+#define MCI_DGV_MONITOR_SOURCE              __MSABI_LONG(0x00020000)
+
+/* values for dwSource parameter of the MCI_DGV_MONITOR_PARMS structure */
+
+#define MCI_DGV_MONITOR_INPUT               __MSABI_LONG(0x00004000)
+#define MCI_DGV_MONITOR_FILE                __MSABI_LONG(0x00004001)
+
+/* flags for dwFlags parameter of MCI_OPEN command message */
+
+#define MCI_DGV_OPEN_WS                     __MSABI_LONG(0x00010000)
+#define MCI_DGV_OPEN_PARENT                 __MSABI_LONG(0x00020000)
+#define MCI_DGV_OPEN_NOSTATIC               __MSABI_LONG(0x00040000)
+#define MCI_DGV_OPEN_16BIT                  __MSABI_LONG(0x00080000)
+#define MCI_DGV_OPEN_32BIT                  __MSABI_LONG(0x00100000)
+
+/* flags for dwFlags parameter of MCI_PASTE command message */
+
+#define MCI_DGV_PASTE_AT                    __MSABI_LONG(0x00010000)
+#define MCI_DGV_PASTE_AUDIO_STREAM          __MSABI_LONG(0x00020000)
+#define MCI_DGV_PASTE_VIDEO_STREAM          __MSABI_LONG(0x00040000)
+#define MCI_DGV_PASTE_INSERT                __MSABI_LONG(0x00080000)
+#define MCI_DGV_PASTE_OVERWRITE             __MSABI_LONG(0x00100000)
+
+/* flags for dwFlags parameter of MCI_PLAY command message */
+
+#define MCI_DGV_PLAY_REPEAT                 __MSABI_LONG(0x00010000)
+#define MCI_DGV_PLAY_REVERSE                __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_PUT command message */
+
+#define MCI_DGV_RECT                        __MSABI_LONG(0x00010000)
+#define MCI_DGV_PUT_SOURCE                  __MSABI_LONG(0x00020000)
+#define MCI_DGV_PUT_DESTINATION             __MSABI_LONG(0x00040000)
+#define MCI_DGV_PUT_FRAME                   __MSABI_LONG(0x00080000)
+#define MCI_DGV_PUT_VIDEO                   __MSABI_LONG(0x00100000)
+#define MCI_DGV_PUT_WINDOW                  __MSABI_LONG(0x00200000)
+#define MCI_DGV_PUT_CLIENT                  __MSABI_LONG(0x00400000)
+
+/* flags for dwFlags parameter of MCI_QUALITY command message */
+
+#define MCI_QUALITY_ITEM                    __MSABI_LONG(0x00010000)
+#define MCI_QUALITY_NAME                    __MSABI_LONG(0x00020000)
+#define MCI_QUALITY_ALG                     __MSABI_LONG(0x00040000)
+#define MCI_QUALITY_DIALOG                  __MSABI_LONG(0x00080000)
+#define MCI_QUALITY_HANDLE                  __MSABI_LONG(0x00100000)
+
+/* values for dwItem field of MCI_QUALITY_PARMS structure */
+
+#define MCI_QUALITY_ITEM_AUDIO              __MSABI_LONG(0x00004000)
+#define MCI_QUALITY_ITEM_STILL              __MSABI_LONG(0x00004001)
+#define MCI_QUALITY_ITEM_VIDEO              __MSABI_LONG(0x00004002)
+
+/* flags for dwFlags parameter of MCI_REALIZE command message */
+
+#define MCI_DGV_REALIZE_NORM                __MSABI_LONG(0x00010000)
+#define MCI_DGV_REALIZE_BKGD                __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_RECORD command message */
+
+#define MCI_DGV_RECORD_HOLD                 __MSABI_LONG(0x00020000)
+#define MCI_DGV_RECORD_AUDIO_STREAM         __MSABI_LONG(0x00040000)
+#define MCI_DGV_RECORD_VIDEO_STREAM         __MSABI_LONG(0x00080000)
+
+/* flags for dwFlags parameters of MCI_RESERVE command message */
+
+#define MCI_DGV_RESERVE_IN                  __MSABI_LONG(0x00010000)
+#define MCI_DGV_RESERVE_SIZE                __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_RESTORE command message */
+
+#define MCI_DGV_RESTORE_FROM                __MSABI_LONG(0x00010000)
+#define MCI_DGV_RESTORE_AT                  __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameters of MCI_SAVE command message */
+
+#define MCI_DGV_SAVE_ABORT                  __MSABI_LONG(0x00020000)
+#define MCI_DGV_SAVE_KEEPRESERVE            __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameters of MCI_SET command message */
+
+#define MCI_DGV_SET_SEEK_EXACTLY            __MSABI_LONG(0x00010000)
+#define MCI_DGV_SET_SPEED                   __MSABI_LONG(0x00020000)
+#define MCI_DGV_SET_STILL                   __MSABI_LONG(0x00040000)
+#define MCI_DGV_SET_FILEFORMAT              __MSABI_LONG(0x00080000)
+
+/* flags for the dwFlags parameter of MCI_SETAUDIO command message */
+
+#define MCI_DGV_SETAUDIO_OVER               __MSABI_LONG(0x00010000)
+#define MCI_DGV_SETAUDIO_CLOCKTIME          __MSABI_LONG(0x00020000)
+#define MCI_DGV_SETAUDIO_ALG                __MSABI_LONG(0x00040000)
+#define MCI_DGV_SETAUDIO_QUALITY            __MSABI_LONG(0x00080000)
+#define MCI_DGV_SETAUDIO_RECORD             __MSABI_LONG(0x00100000)
+#define MCI_DGV_SETAUDIO_LEFT               __MSABI_LONG(0x00200000)
+#define MCI_DGV_SETAUDIO_RIGHT              __MSABI_LONG(0x00400000)
+#define MCI_DGV_SETAUDIO_ITEM               __MSABI_LONG(0x00800000)
+#define MCI_DGV_SETAUDIO_VALUE              __MSABI_LONG(0x01000000)
+#define MCI_DGV_SETAUDIO_INPUT              __MSABI_LONG(0x02000000)
+#define MCI_DGV_SETAUDIO_OUTPUT             __MSABI_LONG(0x04000000)
+
+/* values for the dwItem parameter of MCI_DGV_SETAUDIO_PARMS */
+
+#define MCI_DGV_SETAUDIO_TREBLE             __MSABI_LONG(0x00004000)
+#define MCI_DGV_SETAUDIO_BASS               __MSABI_LONG(0x00004001)
+#define MCI_DGV_SETAUDIO_VOLUME             __MSABI_LONG(0x00004002)
+#define MCI_DGV_SETAUDIO_STREAM             __MSABI_LONG(0x00004003)
+#define MCI_DGV_SETAUDIO_SOURCE             __MSABI_LONG(0x00004004)
+#define MCI_DGV_SETAUDIO_SAMPLESPERSEC      __MSABI_LONG(0x00004005)
+#define MCI_DGV_SETAUDIO_AVGBYTESPERSEC     __MSABI_LONG(0x00004006)
+#define MCI_DGV_SETAUDIO_BLOCKALIGN         __MSABI_LONG(0x00004007)
+#define MCI_DGV_SETAUDIO_BITSPERSAMPLE      __MSABI_LONG(0x00004008)
+
+/* values for the dwValue parameter of MCI_DGV_SETAUDIO_PARMS
+   used with MCI_DGV_SETAUDIO_SOURCE */
+
+#define MCI_DGV_SETAUDIO_SOURCE_STEREO      __MSABI_LONG(0x00000000)
+#define MCI_DGV_SETAUDIO_SOURCE_LEFT        __MSABI_LONG(0x00000001)
+#define MCI_DGV_SETAUDIO_SOURCE_RIGHT       __MSABI_LONG(0x00000002)
+#define MCI_DGV_SETAUDIO_SOURCE_AVERAGE     __MSABI_LONG(0x00004000)
+
+/* flags for the dwFlags parameter of MCI_SETVIDEO command */
+
+#define MCI_DGV_SETVIDEO_QUALITY            __MSABI_LONG(0x00010000)
+#define MCI_DGV_SETVIDEO_ALG                __MSABI_LONG(0x00020000)
+#define MCI_DGV_SETVIDEO_CLOCKTIME          __MSABI_LONG(0x00040000)
+#define MCI_DGV_SETVIDEO_SRC_NUMBER         __MSABI_LONG(0x00080000)
+#define MCI_DGV_SETVIDEO_ITEM               __MSABI_LONG(0x00100000)
+#define MCI_DGV_SETVIDEO_OVER               __MSABI_LONG(0x00200000)
+#define MCI_DGV_SETVIDEO_RECORD             __MSABI_LONG(0x00400000)
+#define MCI_DGV_SETVIDEO_STILL              __MSABI_LONG(0x00800000)
+#define MCI_DGV_SETVIDEO_VALUE              __MSABI_LONG(0x01000000)
+#define MCI_DGV_SETVIDEO_INPUT              __MSABI_LONG(0x02000000)
+#define MCI_DGV_SETVIDEO_OUTPUT             __MSABI_LONG(0x04000000)
+
+/* values for the dwTo field of MCI_SETVIDEO_PARMS
+   used with MCI_DGV_SETVIDEO_SOURCE */
+
+#define MCI_DGV_SETVIDEO_SRC_NTSC           __MSABI_LONG(0x00004000)
+#define MCI_DGV_SETVIDEO_SRC_RGB            __MSABI_LONG(0x00004001)
+#define MCI_DGV_SETVIDEO_SRC_SVIDEO         __MSABI_LONG(0x00004002)
+#define MCI_DGV_SETVIDEO_SRC_PAL            __MSABI_LONG(0x00004003)
+#define MCI_DGV_SETVIDEO_SRC_SECAM          __MSABI_LONG(0x00004004)
+#define MCI_DGV_SETVIDEO_SRC_GENERIC        __MSABI_LONG(0x00004005)
+
+/* values for the dwItem field of MCI_SETVIDEO_PARMS */
+
+#define MCI_DGV_SETVIDEO_BRIGHTNESS         __MSABI_LONG(0x00004000)
+#define MCI_DGV_SETVIDEO_COLOR              __MSABI_LONG(0x00004001)
+#define MCI_DGV_SETVIDEO_CONTRAST           __MSABI_LONG(0x00004002)
+#define MCI_DGV_SETVIDEO_TINT               __MSABI_LONG(0x00004003)
+#define MCI_DGV_SETVIDEO_SHARPNESS          __MSABI_LONG(0x00004004)
+#define MCI_DGV_SETVIDEO_GAMMA              __MSABI_LONG(0x00004005)
+#define MCI_DGV_SETVIDEO_STREAM             __MSABI_LONG(0x00004006)
+#define MCI_DGV_SETVIDEO_PALHANDLE          __MSABI_LONG(0x00004007)
+#define MCI_DGV_SETVIDEO_FRAME_RATE         __MSABI_LONG(0x00004008)
+#define MCI_DGV_SETVIDEO_SOURCE             __MSABI_LONG(0x00004009)
+#define MCI_DGV_SETVIDEO_KEY_INDEX          __MSABI_LONG(0x0000400a)
+#define MCI_DGV_SETVIDEO_KEY_COLOR          __MSABI_LONG(0x0000400b)
+#define MCI_DGV_SETVIDEO_BITSPERPEL         __MSABI_LONG(0x0000400c)
+
+/* flags for the dwFlags parameter of MCI_SIGNAL */
+
+#define MCI_DGV_SIGNAL_AT                   __MSABI_LONG(0x00010000)
+#define MCI_DGV_SIGNAL_EVERY                __MSABI_LONG(0x00020000)
+#define MCI_DGV_SIGNAL_USERVAL              __MSABI_LONG(0x00040000)
+#define MCI_DGV_SIGNAL_CANCEL               __MSABI_LONG(0x00080000)
+#define MCI_DGV_SIGNAL_POSITION             __MSABI_LONG(0x00100000)
+
+/* flags for the dwFlags parameter of MCI_STATUS command */
+
+#define MCI_DGV_STATUS_NOMINAL              __MSABI_LONG(0x00020000)
+#define MCI_DGV_STATUS_REFERENCE            __MSABI_LONG(0x00040000)
+#define MCI_DGV_STATUS_LEFT                 __MSABI_LONG(0x00080000)
+#define MCI_DGV_STATUS_RIGHT                __MSABI_LONG(0x00100000)
+#define MCI_DGV_STATUS_DISKSPACE            __MSABI_LONG(0x00200000)
+#define MCI_DGV_STATUS_INPUT                __MSABI_LONG(0x00400000)
+#define MCI_DGV_STATUS_OUTPUT               __MSABI_LONG(0x00800000)
+#define MCI_DGV_STATUS_RECORD               __MSABI_LONG(0x01000000)
+
+/* values for dwItem field of MCI_STATUS_PARMS structure */
+
+#define MCI_DGV_STATUS_AUDIO_INPUT          __MSABI_LONG(0x00004000)
+#define MCI_DGV_STATUS_HWND                 __MSABI_LONG(0x00004001)
+#define MCI_DGV_STATUS_SPEED                __MSABI_LONG(0x00004003)
+#define MCI_DGV_STATUS_HPAL                 __MSABI_LONG(0x00004004)
+#define MCI_DGV_STATUS_BRIGHTNESS           __MSABI_LONG(0x00004005)
+#define MCI_DGV_STATUS_COLOR                __MSABI_LONG(0x00004006)
+#define MCI_DGV_STATUS_CONTRAST             __MSABI_LONG(0x00004007)
+#define MCI_DGV_STATUS_FILEFORMAT           __MSABI_LONG(0x00004008)
+#define MCI_DGV_STATUS_AUDIO_SOURCE         __MSABI_LONG(0x00004009)
+#define MCI_DGV_STATUS_GAMMA                __MSABI_LONG(0x0000400a)
+#define MCI_DGV_STATUS_MONITOR              __MSABI_LONG(0x0000400b)
+#define MCI_DGV_STATUS_MONITOR_METHOD       __MSABI_LONG(0x0000400c)
+#define MCI_DGV_STATUS_FRAME_RATE           __MSABI_LONG(0x0000400e)
+#define MCI_DGV_STATUS_BASS                 __MSABI_LONG(0x0000400f)
+#define MCI_DGV_STATUS_SIZE                 __MSABI_LONG(0x00004010)
+#define MCI_DGV_STATUS_SEEK_EXACTLY         __MSABI_LONG(0x00004011)
+#define MCI_DGV_STATUS_SHARPNESS            __MSABI_LONG(0x00004012)
+#define MCI_DGV_STATUS_SMPTE                __MSABI_LONG(0x00004013)
+#define MCI_DGV_STATUS_AUDIO                __MSABI_LONG(0x00004014)
+#define MCI_DGV_STATUS_TINT                 __MSABI_LONG(0x00004015)
+#define MCI_DGV_STATUS_TREBLE               __MSABI_LONG(0x00004016)
+#define MCI_DGV_STATUS_UNSAVED              __MSABI_LONG(0x00004017)
+#define MCI_DGV_STATUS_VIDEO                __MSABI_LONG(0x00004018)
+#define MCI_DGV_STATUS_VOLUME               __MSABI_LONG(0x00004019)
+#define MCI_DGV_STATUS_AUDIO_RECORD         __MSABI_LONG(0x0000401a)
+#define MCI_DGV_STATUS_VIDEO_SOURCE         __MSABI_LONG(0x0000401b)
+#define MCI_DGV_STATUS_VIDEO_RECORD         __MSABI_LONG(0x0000401c)
+#define MCI_DGV_STATUS_STILL_FILEFORMAT     __MSABI_LONG(0x0000401d)
+#define MCI_DGV_STATUS_VIDEO_SRC_NUM        __MSABI_LONG(0x0000401e)
+#define MCI_DGV_STATUS_FILE_MODE            __MSABI_LONG(0x0000401f)
+#define MCI_DGV_STATUS_FILE_COMPLETION      __MSABI_LONG(0x00004020)
+#define MCI_DGV_STATUS_WINDOW_VISIBLE       __MSABI_LONG(0x00004021)
+#define MCI_DGV_STATUS_WINDOW_MINIMIZED     __MSABI_LONG(0x00004022)
+#define MCI_DGV_STATUS_WINDOW_MAXIMIZED     __MSABI_LONG(0x00004023)
+#define MCI_DGV_STATUS_KEY_INDEX            __MSABI_LONG(0x00004024)
+#define MCI_DGV_STATUS_KEY_COLOR            __MSABI_LONG(0x00004025)
+#define MCI_DGV_STATUS_PAUSE_MODE           __MSABI_LONG(0x00004026)
+#define MCI_DGV_STATUS_SAMPLESPERSEC        __MSABI_LONG(0x00004027)
+#define MCI_DGV_STATUS_AVGBYTESPERSEC       __MSABI_LONG(0x00004028)
+#define MCI_DGV_STATUS_BLOCKALIGN           __MSABI_LONG(0x00004029)
+#define MCI_DGV_STATUS_BITSPERSAMPLE        __MSABI_LONG(0x0000402a)
+#define MCI_DGV_STATUS_BITSPERPEL           __MSABI_LONG(0x0000402b)
+#define MCI_DGV_STATUS_FORWARD              __MSABI_LONG(0x0000402c)
+#define MCI_DGV_STATUS_AUDIO_STREAM         __MSABI_LONG(0x0000402d)
+#define MCI_DGV_STATUS_VIDEO_STREAM         __MSABI_LONG(0x0000402e)
+
+/* flags for dwFlags parameter of MCI_STEP command message */
+
+#define MCI_DGV_STEP_REVERSE                __MSABI_LONG(0x00010000)
+#define MCI_DGV_STEP_FRAMES                 __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_STOP command message */
+
+#define MCI_DGV_STOP_HOLD                   __MSABI_LONG(0x00010000)
+
+/* flags for dwFlags parameter of MCI_UPDATE command message */
+
+#define MCI_DGV_UPDATE_HDC                  __MSABI_LONG(0x00020000)
+#define MCI_DGV_UPDATE_PAINT                __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_WHERE command message */
+
+#define MCI_DGV_WHERE_SOURCE                __MSABI_LONG(0x00020000)
+#define MCI_DGV_WHERE_DESTINATION           __MSABI_LONG(0x00040000)
+#define MCI_DGV_WHERE_FRAME                 __MSABI_LONG(0x00080000)
+#define MCI_DGV_WHERE_VIDEO                 __MSABI_LONG(0x00100000)
+#define MCI_DGV_WHERE_WINDOW                __MSABI_LONG(0x00200000)
+#define MCI_DGV_WHERE_MAX                   __MSABI_LONG(0x00400000)
+
+/* flags for dwFlags parameter of MCI_WINDOW command message */
+
+#define MCI_DGV_WINDOW_HWND                 __MSABI_LONG(0x00010000)
+#define MCI_DGV_WINDOW_STATE                __MSABI_LONG(0x00040000)
+#define MCI_DGV_WINDOW_TEXT                 __MSABI_LONG(0x00080000)
+
+/* flags for hWnd parameter of MCI_DGV_WINDOW_PARMS parameter block */
+
+#define MCI_DGV_WINDOW_DEFAULT              __MSABI_LONG(0x00000000)
+
+/* parameter block for MCI_WHERE, MCI_PUT, MCI_FREEZE, MCI_UNFREEZE cmds */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    RECT    rc;
+} MCI_DGV_RECT_PARMS, *LPMCI_DGV_RECT_PARMS;
+
+/* parameter block for MCI_CAPTURE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPSTR   lpstrFileName;
+    RECT    rc;
+} MCI_DGV_CAPTURE_PARMSA, *LPMCI_DGV_CAPTURE_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPWSTR  lpstrFileName;
+    RECT    rc;
+} MCI_DGV_CAPTURE_PARMSW, *LPMCI_DGV_CAPTURE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_CAPTURE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_CAPTURE_PARMS)
+
+/* parameter block for MCI_CLOSE command message */
+
+typedef MCI_GENERIC_PARMS MCI_CLOSE_PARMS, *LPMCI_CLOSE_PARMS;
+
+/* parameter block for MCI_COPY command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT    rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_COPY_PARMS, *LPMCI_DGV_COPY_PARMS;
+
+/* parameter block for MCI_CUE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwTo;
+} MCI_DGV_CUE_PARMS, *LPMCI_DGV_CUE_PARMS;
+
+/* parameter block for MCI_CUT command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT    rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_CUT_PARMS, * LPMCI_DGV_CUT_PARMS;
+
+/* parameter block for MCI_DELETE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT    rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_DELETE_PARMS, * LPMCI_DGV_DELETE_PARMS;
+
+/* parameter block for MCI_FREEZE command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_FREEZE_PARMS, * LPMCI_DGV_FREEZE_PARMS;
+
+/* parameter block for MCI_INFO command message */
+
+typedef struct  {
+    DWORD_PTR dwCallback;
+    LPSTR   lpstrReturn;
+    DWORD   dwRetSize;
+    DWORD   dwItem;
+} MCI_DGV_INFO_PARMSA, * LPMCI_DGV_INFO_PARMSA;
+
+typedef struct  {
+    DWORD_PTR dwCallback;
+    LPWSTR  lpstrReturn;
+    DWORD   dwRetSize;
+    DWORD   dwItem;
+} MCI_DGV_INFO_PARMSW, *LPMCI_DGV_INFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_INFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_INFO_PARMS)
+
+/* parameter block for MCI_LIST command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPSTR   lpstrReturn;
+    DWORD   dwLength;
+    DWORD   dwNumber;
+    DWORD   dwItem;
+    LPSTR   lpstrAlgorithm;
+} MCI_DGV_LIST_PARMSA, *LPMCI_DGV_LIST_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPWSTR  lpstrReturn;
+    DWORD   dwLength;
+    DWORD   dwNumber;
+    DWORD   dwItem;
+    LPWSTR  lpstrAlgorithm;
+} MCI_DGV_LIST_PARMSW, *LPMCI_DGV_LIST_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_LIST_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_LIST_PARMS)
+
+/* parameter block for MCI_LOAD command message */
+
+typedef MCI_LOAD_PARMSA MCI_DGV_LOAD_PARMSA, * LPMCI_DGV_LOAD_PARMSA;
+typedef MCI_LOAD_PARMSW MCI_DGV_LOAD_PARMSW, * LPMCI_DGV_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_LOAD_PARMS)
+
+/* parameter block for MCI_MONITOR command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwSource;
+    DWORD   dwMethod;
+} MCI_DGV_MONITOR_PARMS, * LPMCI_DGV_MONITOR_PARMS;
+
+/* parameter block for MCI_OPEN command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    UINT    wDeviceID;
+    LPSTR   lpstrDeviceType;
+    LPSTR   lpstrElementName;
+    LPSTR   lpstrAlias;
+    DWORD   dwStyle;
+    HWND  hWndParent;
+} MCI_DGV_OPEN_PARMSA, *LPMCI_DGV_OPEN_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    UINT    wDeviceID;
+    LPWSTR  lpstrDeviceType;
+    LPWSTR  lpstrElementName;
+    LPWSTR  lpstrAlias;
+    DWORD   dwStyle;
+    HWND  hWndParent;
+} MCI_DGV_OPEN_PARMSW, *LPMCI_DGV_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_OPEN_PARMS)
+
+/* parameter block for MCI_PAUSE command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_PAUSE_PARMS, * LPMCI_DGV_PAUSE_PARMS;
+
+/* parameter block for MCI_PASTE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwTo;
+    RECT    rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_PASTE_PARMS, * LPMCI_DGV_PASTE_PARMS;
+
+/* parameter block for MCI_PLAY command message */
+
+typedef MCI_PLAY_PARMS MCI_DGV_PLAY_PARMS, * LPMCI_DGV_PLAY_PARMS;
+
+/* parameter block for MCI_PUT command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_PUT_PARMS, * LPMCI_DGV_PUT_PARMS;
+
+/* parameter block for MCI_QUALITY command message */
+
+typedef struct {
+    DWORD_PTR   dwCallback;
+    DWORD       dwItem;
+    LPSTR       lpstrName;
+    DWORD       lpstrAlgorithm;
+    DWORD       dwHandle;
+} MCI_DGV_QUALITY_PARMSA, *LPMCI_DGV_QUALITY_PARMSA;
+
+typedef struct {
+    DWORD_PTR   dwCallback;
+    DWORD       dwItem;
+    LPWSTR      lpstrName;
+    DWORD       lpstrAlgorithm;
+    DWORD       dwHandle;
+} MCI_DGV_QUALITY_PARMSW, *LPMCI_DGV_QUALITY_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_QUALITY_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_QUALITY_PARMS)
+
+/* parameter block for MCI_REALIZE command message */
+
+typedef MCI_GENERIC_PARMS MCI_REALIZE_PARMS, * LPMCI_REALIZE_PARMS;
+
+/* parameter block for MCI_RECORD command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT    rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_RECORD_PARMS, * LPMCI_DGV_RECORD_PARMS;
+
+/* parameter block for MCI_RESERVE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPSTR   lpstrPath;
+    DWORD   dwSize;
+} MCI_DGV_RESERVE_PARMSA, *LPMCI_DGV_RESERVE_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPWSTR  lpstrPath;
+    DWORD   dwSize;
+} MCI_DGV_RESERVE_PARMSW, *LPMCI_DGV_RESERVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_RESERVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESERVE_PARMS)
+
+/* parameter block for MCI_RESTORE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPSTR   lpstrFileName;
+    RECT    rc;
+} MCI_DGV_RESTORE_PARMSA, *LPMCI_DGV_RESTORE_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPWSTR  lpstrFileName;
+    RECT    rc;
+} MCI_DGV_RESTORE_PARMSW, *LPMCI_DGV_RESTORE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_RESTORE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESTORE_PARMS)
+
+/* parameter block for MCI_RESUME command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_RESUME_PARMS, * LPMCI_DGV_RESUME_PARMS;
+
+/* parameter block for MCI_SAVE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPSTR   lpstrFileName;
+    RECT    rc;
+} MCI_DGV_SAVE_PARMSA, *LPMCI_DGV_SAVE_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    LPWSTR  lpstrFileName;
+    RECT    rc;
+} MCI_DGV_SAVE_PARMSW, *LPMCI_DGV_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SAVE_PARMS)
+
+/* parameter block for MCI_SET command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwTimeFormat;
+    DWORD   dwAudio;
+    DWORD   dwFileFormat;
+    DWORD   dwSpeed;
+} MCI_DGV_SET_PARMS, *LPMCI_DGV_SET_PARMS;
+
+/* parameter block for MCI_SETAUDIO command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwItem;
+    DWORD   dwValue;
+    DWORD   dwOver;
+    LPSTR   lpstrAlgorithm;
+    LPSTR   lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMSA, *LPMCI_DGV_SETAUDIO_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwItem;
+    DWORD   dwValue;
+    DWORD   dwOver;
+    LPWSTR  lpstrAlgorithm;
+    LPWSTR  lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMSW, *LPMCI_DGV_SETAUDIO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SETAUDIO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETAUDIO_PARMS)
+
+/* parameter block for MCI_SIGNAL command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwPosition;
+    DWORD   dwPeriod;
+    DWORD   dwUserParm;
+} MCI_DGV_SIGNAL_PARMS, * LPMCI_DGV_SIGNAL_PARMS;
+
+/* parameter block for MCI_SETVIDEO command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwItem;
+    DWORD   dwValue;
+    DWORD   dwOver;
+    LPSTR   lpstrAlgorithm;
+    LPSTR   lpstrQuality;
+    DWORD   dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMSA, *LPMCI_DGV_SETVIDEO_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwItem;
+    DWORD   dwValue;
+    DWORD   dwOver;
+    LPWSTR  lpstrAlgorithm;
+    LPWSTR  lpstrQuality;
+    DWORD   dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMSW, *LPMCI_DGV_SETVIDEO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SETVIDEO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETVIDEO_PARMS)
+
+/* parameter block for MCI_STATUS command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD_PTR dwReturn;
+    DWORD   dwItem;
+    DWORD   dwTrack;
+    LPSTR   lpstrDrive;
+    DWORD   dwReference;
+} MCI_DGV_STATUS_PARMSA, *LPMCI_DGV_STATUS_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD_PTR dwReturn;
+    DWORD   dwItem;
+    DWORD   dwTrack;
+    LPWSTR  lpstrDrive;
+    DWORD   dwReference;
+} MCI_DGV_STATUS_PARMSW, *LPMCI_DGV_STATUS_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_STATUS_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_STATUS_PARMS)
+
+/* parameter block for MCI_STEP command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    DWORD   dwFrames;
+} MCI_DGV_STEP_PARMS, *LPMCI_DGV_STEP_PARMS;
+
+/* parameter block for MCI_STOP command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_STOP_PARMS, * LPMCI_DGV_STOP_PARMS;
+
+/* parameter block for MCI_UNFREEZE command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_UNFREEZE_PARMS, * LPMCI_DGV_UNFREEZE_PARMS;
+
+/* parameter block for MCI_UPDATE command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    RECT    rc;
+    HDC     hDC;
+} MCI_DGV_UPDATE_PARMS, * LPMCI_DGV_UPDATE_PARMS;
+
+/* parameter block for MCI_WHERE command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_WHERE_PARMS, * LPMCI_DGV_WHERE_PARMS;
+
+/* parameter block for MCI_WINDOW command message */
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    HWND    hWnd;
+    UINT    nCmdShow;
+    LPSTR   lpstrText;
+} MCI_DGV_WINDOW_PARMSA, *LPMCI_DGV_WINDOW_PARMSA;
+
+typedef struct {
+    DWORD_PTR dwCallback;
+    HWND    hWnd;
+    UINT    nCmdShow;
+    LPWSTR  lpstrText;
+} MCI_DGV_WINDOW_PARMSW, *LPMCI_DGV_WINDOW_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_WINDOW_PARMS)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DIGITALV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl
new file mode 100644
index 0000000..012a9b8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl
@@ -0,0 +1,599 @@
+/*
+ * Copyright 2007 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+cpp_quote("#include <imm.h>")
+
+cpp_quote("#if 0")
+
+typedef struct {
+    LPSTR lpReading;
+    LPSTR lpWord;
+} REGISTERWORDA;
+
+typedef struct {
+    LPWSTR lpReading;
+    LPWSTR lpWord;
+} REGISTERWORDW;
+
+#define LF_FACESIZE         32
+
+typedef struct {
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    BYTE lfItalic;
+    BYTE lfUnderline;
+    BYTE lfStrikeOut;
+    BYTE lfCharSet;
+    BYTE lfOutPrecision;
+    BYTE lfClipPrecision;
+    BYTE lfQuality;
+    BYTE lfPitchAndFamily;
+    CHAR lfFaceName[LF_FACESIZE];
+} LOGFONTA;
+
+typedef struct {
+    LONG  lfHeight;
+    LONG  lfWidth;
+    LONG  lfEscapement;
+    LONG  lfOrientation;
+    LONG  lfWeight;
+    BYTE  lfItalic;
+    BYTE  lfUnderline;
+    BYTE  lfStrikeOut;
+    BYTE  lfCharSet;
+    BYTE  lfOutPrecision;
+    BYTE  lfClipPrecision;
+    BYTE  lfQuality;
+    BYTE  lfPitchAndFamily;
+    WCHAR lfFaceName[LF_FACESIZE];
+} LOGFONTW;
+
+typedef DWORD HIMC;
+typedef DWORD HIMCC;
+
+typedef struct {
+    DWORD dwIndex;
+    DWORD dwStyle;
+    POINT ptCurrentPos;
+    RECT  rcArea;
+} CANDIDATEFORM;
+
+typedef struct {
+    DWORD dwStyle;
+    POINT ptCurrentPos;
+    RECT  rcArea;
+} COMPOSITIONFORM;
+
+typedef struct {
+    DWORD dwSize;
+    DWORD dwStyle;
+    DWORD dwCount;
+    DWORD dwSelection;
+    DWORD dwPageStart;
+    DWORD dwPageSize;
+    DWORD dwOffset[1];
+} CANDIDATELIST;
+
+#define STYLE_DESCRIPTION_SIZE  32
+
+typedef struct {
+    DWORD dwStyle;
+    CHAR  szDescription[STYLE_DESCRIPTION_SIZE];
+} STYLEBUFA;
+
+typedef struct {
+    DWORD dwStyle;
+    WCHAR szDescription[STYLE_DESCRIPTION_SIZE];
+} STYLEBUFW;
+
+typedef WORD ATOM;
+
+#define IMEMENUITEM_STRING_SIZE 80
+
+typedef struct {
+    UINT    cbSize;
+    UINT    fType;
+    UINT    fState;
+    UINT    wID;
+    HBITMAP hbmpChecked;
+    HBITMAP hbmpUnchecked;
+    DWORD   dwItemData;
+    CHAR    szString[IMEMENUITEM_STRING_SIZE];
+    HBITMAP hbmpItem;
+} IMEMENUITEMINFOA;
+
+typedef struct {
+    UINT    cbSize;
+    UINT    fType;
+    UINT    fState;
+    UINT    wID;
+    HBITMAP hbmpChecked;
+    HBITMAP hbmpUnchecked;
+    DWORD   dwItemData;
+    WCHAR   szString[IMEMENUITEM_STRING_SIZE];
+    HBITMAP hbmpItem;
+} IMEMENUITEMINFOW;
+
+cpp_quote("#endif")
+
+[
+    object,
+    uuid(08c03412-f96b-11d0-a475-00aa006bcc59),
+    pointer_default(unique)
+]
+interface IEnumRegisterWordA : IUnknown
+{
+    HRESULT Clone(
+            [out] IEnumRegisterWordA **ppEnum);
+
+    HRESULT Next(
+            [in]  ULONG ulCount,
+            [out] REGISTERWORDA *rgRegisterword,
+            [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+            [in]  ULONG ulCount);
+}
+
+[
+    object,
+    uuid(4955dd31-b159-11d0-8fcf-00aa006bcc59),
+    pointer_default(unique)
+]
+interface IEnumRegisterWordW : IUnknown
+{
+    HRESULT Clone(
+            [out] IEnumRegisterWordW **ppEnum);
+
+    HRESULT Next(
+            [in]  ULONG ulCount,
+            [out] REGISTERWORDW *rgRegisterword,
+            [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+            [in]  ULONG ulCount);
+}
+
+[
+    object,
+    uuid(09b5eab0-f997-11d1-93d4-0060b067b86e),
+    pointer_default(unique),
+    local
+]
+interface IEnumInputContext : IUnknown
+{
+    HRESULT Clone(
+            [out] IEnumInputContext **ppEnum);
+
+    HRESULT Next(
+            [in]  ULONG ulCount,
+            [out] HIMC *rgInputContext,
+            [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+            [in]  ULONG ulCount);
+}
+
+[
+    object,
+    uuid(08c0e040-62d1-11d1-9326-0060b067b86e),
+    pointer_default(unique),
+    local
+]
+interface IActiveIMMApp : IUnknown
+{
+    HRESULT AssociateContext(
+            [in]  HWND hWnd,
+            [in]  HIMC hIME,
+            [out] HIMC *phPrev);
+
+    HRESULT ConfigureIMEA(
+            [in]  HKL hKL,
+            [in]  HWND hwnd,
+            [in]  DWORD dwMode,
+            [in]  REGISTERWORDA *pData);
+
+    HRESULT ConfigureIMEW(
+            [in]  HKL hKL,
+            [in]  HWND hWnd,
+            [in]  DWORD dwMode,
+            [in]  REGISTERWORDW *pData);
+
+    HRESULT CreateContext(
+            [out] HIMC *phIMC);
+
+    HRESULT DestroyContext(
+            [in]  HIMC hIME);
+
+    HRESULT EnumRegisterWordA(
+            [in]  HKL hKL,
+            [in]  LPSTR szReading,
+            [in]  DWORD dwStyle,
+            [in]  LPSTR szRegister,
+            [in]  LPVOID pData,
+            [out] IEnumRegisterWordA **pEnum);
+
+    HRESULT EnumRegisterWordW(
+            [in]  HKL hKL,
+            [in]  LPWSTR szReading,
+            [in]  DWORD dwStyle,
+            [in]  LPWSTR szRegister,
+            [in]  LPVOID pData,
+            [out] IEnumRegisterWordW **pEnum);
+
+    HRESULT EscapeA(
+            [in]  HKL hKL,
+            [in]  HIMC hIMC,
+            [in]  UINT uEscape,
+            [in, out] LPVOID pData,
+            [out] LRESULT *plResult);
+
+    HRESULT EscapeW(
+            [in]  HKL hKL,
+            [in]  HIMC hIMC,
+            [in]  UINT uEscape,
+            [in, out] LPVOID pData,
+            [out] LRESULT *plResult);
+
+    HRESULT GetCandidateListA(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  UINT uBufLen,
+            [out] CANDIDATELIST *pCandList,
+            [out] UINT *puCopied);
+
+    HRESULT GetCandidateListW(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  UINT uBufLen,
+            [out] CANDIDATELIST *pCandList,
+            [out] UINT *puCopied);
+
+    HRESULT GetCandidateListCountA(
+            [in]  HIMC hIMC,
+            [out] DWORD *pdwListSize,
+            [out] DWORD *pdwBufLen);
+
+    HRESULT GetCandidateListCountW(
+            [in]  HIMC hIMC,
+            [out] DWORD *pdwListSize,
+            [out] DWORD *pdwBufLen);
+
+    HRESULT GetCandidateWindow(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [out] CANDIDATEFORM *pCandidate);
+
+    HRESULT GetCompositionFontA(
+            [in]  HIMC hIMC,
+            [out] LOGFONTA *plf);
+
+    HRESULT GetCompositionFontW(
+            [in]  HIMC hIMC,
+            [out] LOGFONTW *plf);
+
+    HRESULT GetCompositionStringA(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  DWORD dwBufLen,
+            [out] LONG *plCopied,
+            [out] LPVOID pBuf);
+
+    HRESULT GetCompositionStringW(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  DWORD dwBufLen,
+            [out] LONG *plCopied,
+            [out] LPVOID pBuf);
+
+    HRESULT GetCompositionWindow(
+            [in]  HIMC hIMC,
+            [out] COMPOSITIONFORM *pCompForm);
+
+    HRESULT GetContext(
+            [in]  HWND hwnd,
+            [out] HIMC *phIMC);
+
+    HRESULT GetConversionListA(
+            [in]  HKL hKL,
+            [in]  HIMC hIMC,
+            [in]  LPSTR pSrc,
+            [in]  UINT uBufLen,
+            [in]  UINT uFlag,
+            [out] CANDIDATELIST *pDst,
+            [out] UINT *puCopied);
+
+    HRESULT GetConversionListW(
+            [in]  HKL hKL,
+            [in]  HIMC hIMC,
+            [in]  LPWSTR pSrc,
+            [in]  UINT uBufLen,
+            [in]  UINT uFlag,
+            [out] CANDIDATELIST *pDst,
+            [out] UINT *puCopied);
+
+    HRESULT GetConversionStatus(
+            [in] HIMC hIMC,
+            [out] DWORD *pfdwConversion,
+            [out] DWORD *pfdwSentence);
+
+    HRESULT GetDefaultIMEWnd(
+            [in] HWND hWnd,
+            [out] HWND *phDefWnd);
+
+    HRESULT GetDescriptionA(
+            [in]  HKL hKL,
+            [in]  UINT uBufLen,
+            [out] LPSTR szDescription,
+            [out] UINT *puCopied);
+
+    HRESULT GetDescriptionW(
+            [in]  HKL hKL,
+            [in]  UINT uBufLen,
+            [out] LPWSTR szDescription,
+            [out] UINT *puCopied);
+
+    HRESULT GetGuideLineA(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  DWORD dwBufLen,
+            [out] LPSTR pBuf,
+            [out] DWORD *pdwResult);
+
+    HRESULT GetGuideLineW(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  DWORD dwBufLen,
+            [out] LPWSTR pBuf,
+            [out] DWORD *pdwResult);
+
+    HRESULT GetIMEFileNameA(
+            [in]  HKL hKL,
+            [in]  UINT uBufLen,
+            [out] LPSTR szFileName,
+            [out] UINT *puCopied);
+
+    HRESULT GetIMEFileNameW(
+            [in]  HKL hKL,
+            [in]  UINT uBufLen,
+            [out] LPWSTR szFileName,
+            [out] UINT *puCopied);
+
+    HRESULT GetOpenStatus(
+            [in]  HIMC hIMC);
+
+    HRESULT GetProperty(
+            [in]  HKL hKL,
+            [in]  DWORD fdwIndex,
+            [out] DWORD *pdwProperty);
+
+    HRESULT GetRegisterWordStyleA(
+            [in]  HKL hKL,
+            [in]  UINT nItem,
+            [out] STYLEBUFA *pStyleBuf,
+            [out] UINT *puCopied);
+
+    HRESULT GetRegisterWordStyleW(
+            [in]  HKL hKL,
+            [in]  UINT nItem,
+            [out] STYLEBUFW *pStyleBuf,
+            [out] UINT *puCopied);
+
+    HRESULT GetStatusWindowPos(
+            [in]  HIMC hIMC,
+            [out] POINT *pptPos);
+
+    HRESULT GetVirtualKey(
+            [in]  HWND hWnd,
+            [out] UINT *puVirtualKey);
+
+    HRESULT InstallIMEA(
+            [in]  LPSTR szIMEFileName,
+            [in]  LPSTR szLayoutText,
+            [out] HKL *phKL);
+
+    HRESULT InstallIMEW(
+            [in]  LPWSTR szIMEFileName,
+            [in]  LPWSTR szLayoutText,
+            [out] HKL *phKL);
+
+    HRESULT IsIME(
+            [in]  HKL hKL);
+
+    HRESULT IsUIMessageA(
+            [in]  HWND hWndIME,
+            [in]  UINT msg,
+            [in]  WPARAM wParam,
+            [in]  LPARAM lParam);
+
+    HRESULT IsUIMessageW(
+            [in]  HWND hWndIME,
+            [in]  UINT msg,
+            [in]  WPARAM wParam,
+            [in]  LPARAM lParam);
+
+    HRESULT NotifyIME(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwAction,
+            [in]  DWORD dwIndex,
+            [in]  DWORD dwValue);
+
+    HRESULT RegisterWordA(
+            [in]  HKL hKL,
+            [in]  LPSTR szReading,
+            [in]  DWORD dwStyle,
+            [in]  LPSTR szRegister);
+
+    HRESULT RegisterWordW(
+            [in]  HKL hKL,
+            [in]  LPWSTR szReading,
+            [in]  DWORD dwStyle,
+            [in]  LPWSTR szRegister);
+
+    HRESULT ReleaseContext(
+            [in]  HWND hWnd,
+            [in]  HIMC hIMC);
+
+    HRESULT SetCandidateWindow(
+            [in]  HIMC hIMC,
+            [in]  CANDIDATEFORM *pCandidate);
+
+    HRESULT SetCompositionFontA(
+            [in]  HIMC hIMC,
+            [in]  LOGFONTA *plf);
+
+    HRESULT SetCompositionFontW(
+            [in]  HIMC hIMC,
+            [in]  LOGFONTW *plf);
+
+    HRESULT SetCompositionStringA(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  LPVOID pComp,
+            [in]  DWORD dwCompLen,
+            [in]  LPVOID pRead,
+            [in]  DWORD dwReadLen);
+
+    HRESULT SetCompositionStringW(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwIndex,
+            [in]  LPVOID pComp,
+            [in]  DWORD dwCompLen,
+            [in]  LPVOID pRead,
+            [in]  DWORD dwReadLen);
+
+    HRESULT SetCompositionWindow(
+            [in]  HIMC hIMC,
+            [in]  COMPOSITIONFORM *pCompForm);
+
+    HRESULT SetConversionStatus(
+            [in]  HIMC hIMC,
+            [in]  DWORD fdwConversion,
+            [in]  DWORD fdwSentence);
+
+    HRESULT SetOpenStatus(
+            [in]  HIMC hIMC,
+            [in]  BOOL fOpen);
+
+    HRESULT SetStatusWindowPos(
+            [in]  HIMC hIMC,
+            [in]  POINT *pptPos);
+
+    HRESULT SimulateHotKey(
+            [in]  HWND hwnd,
+            [in]  DWORD dwHotKeyID);
+
+    HRESULT UnregisterWordA(
+            [in]  HKL hKL,
+            [in]  LPSTR szReading,
+            [in]  DWORD dwStyle,
+            [in]  LPSTR szUnregister);
+
+    HRESULT UnregisterWordW(
+            [in]  HKL hKL,
+            [in]  LPWSTR szReading,
+            [in]  DWORD dwStyle,
+            [in]  LPWSTR szUnregister);
+
+    HRESULT Activate(
+            [in]  BOOL fRestoreLayout);
+
+    HRESULT Deactivate();
+
+    HRESULT OnDefWindowProc(
+            [in]  HWND hWnd,
+            [in]  UINT Msg,
+            [in]  WPARAM wParam,
+            [in]  LPARAM lParam,
+            [out] LRESULT *plResult);
+
+    HRESULT FilterClientWindows(
+            [in]  ATOM *aaClassList,
+            [in]  UINT uSize);
+
+    HRESULT GetCodePageA(
+            [in]  HKL hKL,
+            [out] UINT *uCodePage);
+
+    HRESULT GetLangId(
+            [in]  HKL hKL,
+            [out] LANGID *plid);
+
+    HRESULT AssociateContextEx(
+            [in]  HWND hWnd,
+            [in]  HIMC hIMC,
+            [in]  DWORD dwFlags);
+
+    HRESULT DisableIME(
+            [in]  DWORD idThread);
+
+    HRESULT GetImeMenuItemsA(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwFlags,
+            [in]  DWORD dwType,
+            [in]  IMEMENUITEMINFOA *pImeParentMenu,
+            [out] IMEMENUITEMINFOA *pImeMenu,
+            [in]  DWORD dwSize,
+            [out] DWORD *pdwResult);
+
+    HRESULT GetImeMenuItemsW(
+            [in]  HIMC hIMC,
+            [in]  DWORD dwFlags,
+            [in]  DWORD dwType,
+            [in]  IMEMENUITEMINFOW *pImeParentMenu,
+            [out] IMEMENUITEMINFOW *pImeMenu,
+            [in]  DWORD dwSize,
+            [out] DWORD *pdwResult);
+
+    HRESULT EnumInputContext(
+            [in]  DWORD idThread,
+            [out] IEnumInputContext **ppEnum);
+}
+
+[
+    uuid(4955dd33-b159-11d0-8fcf-00aa006bcc59)
+]
+coclass CActiveIMM
+{
+    [default] interface IActiveIMMApp;
+    /* interface IActiveIMMIME; */
+    /* interface IActiveIMMRegistrar; */
+    /* interface IActiveIMMMessagePumpOwner; */
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h
new file mode 100644
index 0000000..ed40997
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h
@@ -0,0 +1,2511 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DINPUT_INCLUDED__
+#define __DINPUT_INCLUDED__
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef DIRECTINPUT_VERSION
+#define DIRECTINPUT_VERSION	0x0800
+#endif
+
+/* Classes */
+DEFINE_GUID(CLSID_DirectInput,		0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(CLSID_DirectInputDevice,	0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+DEFINE_GUID(CLSID_DirectInput8,		0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(CLSID_DirectInputDevice8,	0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+/* Interfaces */
+DEFINE_GUID(IID_IDirectInputA,		0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputW,		0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInput2A,		0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInput2W,		0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInput7A,		0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInput7W,		0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInput8A,		0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
+DEFINE_GUID(IID_IDirectInput8W,		0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
+DEFINE_GUID(IID_IDirectInputDeviceA,	0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDeviceW,	0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDevice2A,	0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDevice2W,	0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDevice7A,	0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInputDevice7W,	0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInputDevice8A,	0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);
+DEFINE_GUID(IID_IDirectInputDevice8W,	0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);
+DEFINE_GUID(IID_IDirectInputEffect,	0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+
+/* Predefined object types */
+DEFINE_GUID(GUID_XAxis,	0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_YAxis,	0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_ZAxis,	0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_RxAxis,0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_RyAxis,0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_RzAxis,0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Slider,0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Button,0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Key,	0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_POV,	0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Unknown,0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+/* Predefined product GUIDs */
+DEFINE_GUID(GUID_SysMouse,	0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysKeyboard,	0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Joystick,	0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysMouseEm,	0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysMouseEm2,	0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysKeyboardEm,	0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+/* predefined forcefeedback effects */
+DEFINE_GUID(GUID_ConstantForce,	0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_RampForce,	0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Square,	0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Sine,		0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Triangle,	0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_SawtoothUp,	0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_SawtoothDown,	0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Spring,	0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Damper,	0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Inertia,	0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Friction,	0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_CustomForce,	0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+
+typedef struct IDirectInputA *LPDIRECTINPUTA;
+typedef struct IDirectInputW *LPDIRECTINPUTW;
+typedef struct IDirectInput2A *LPDIRECTINPUT2A;
+typedef struct IDirectInput2W *LPDIRECTINPUT2W;
+typedef struct IDirectInput7A *LPDIRECTINPUT7A;
+typedef struct IDirectInput7W *LPDIRECTINPUT7W;
+typedef struct IDirectInput8A *LPDIRECTINPUT8A;
+typedef struct IDirectInput8W *LPDIRECTINPUT8W;
+typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;
+typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;
+typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;
+typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;
+typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;
+typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;
+typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A;
+typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W;
+typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;
+typedef struct SysKeyboardA *LPSYSKEYBOARDA;
+typedef struct SysMouseA *LPSYSMOUSEA;
+
+#define IID_IDirectInput WINELIB_NAME_AW(IID_IDirectInput)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT)
+#define IID_IDirectInput2 WINELIB_NAME_AW(IID_IDirectInput2)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT2)
+#define IID_IDirectInput7 WINELIB_NAME_AW(IID_IDirectInput7)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT7)
+#define IID_IDirectInput8 WINELIB_NAME_AW(IID_IDirectInput8)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT8)
+#define IID_IDirectInputDevice WINELIB_NAME_AW(IID_IDirectInputDevice)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE)
+#define IID_IDirectInputDevice2 WINELIB_NAME_AW(IID_IDirectInputDevice2)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE2)
+#define IID_IDirectInputDevice7 WINELIB_NAME_AW(IID_IDirectInputDevice7)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE7)
+#define IID_IDirectInputDevice8 WINELIB_NAME_AW(IID_IDirectInputDevice8)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE8)
+
+#define DI_OK                           S_OK
+#define DI_NOTATTACHED                  S_FALSE
+#define DI_BUFFEROVERFLOW               S_FALSE
+#define DI_PROPNOEFFECT                 S_FALSE
+#define DI_NOEFFECT                     S_FALSE
+#define DI_POLLEDDEVICE                 ((HRESULT)0x00000002)
+#define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003)
+#define DI_EFFECTRESTARTED              ((HRESULT)0x00000004)
+#define DI_TRUNCATED                    ((HRESULT)0x00000008)
+#define DI_SETTINGSNOTSAVED             ((HRESULT)0x0000000B)
+#define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000C)
+#define DI_WRITEPROTECT                 ((HRESULT)0x00000013)
+
+#define DIERR_OLDDIRECTINPUTVERSION     \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
+#define DIERR_BETADIRECTINPUTVERSION    \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)
+#define DIERR_BADDRIVERVER              \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)
+#define DIERR_DEVICENOTREG              REGDB_E_CLASSNOTREG
+#define DIERR_NOTFOUND                  \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
+#define DIERR_OBJECTNOTFOUND            \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
+#define DIERR_INVALIDPARAM              E_INVALIDARG
+#define DIERR_NOINTERFACE               E_NOINTERFACE
+#define DIERR_GENERIC                   E_FAIL
+#define DIERR_OUTOFMEMORY               E_OUTOFMEMORY
+#define DIERR_UNSUPPORTED               E_NOTIMPL
+#define DIERR_NOTINITIALIZED            \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)
+#define DIERR_ALREADYINITIALIZED        \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)
+#define DIERR_NOAGGREGATION             CLASS_E_NOAGGREGATION
+#define DIERR_OTHERAPPHASPRIO           E_ACCESSDENIED
+#define DIERR_INPUTLOST                 \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)
+#define DIERR_ACQUIRED                  \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)
+#define DIERR_NOTACQUIRED               \
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)
+#define DIERR_READONLY                  E_ACCESSDENIED
+#define DIERR_HANDLEEXISTS              E_ACCESSDENIED
+#ifndef E_PENDING
+#define E_PENDING                       __MSABI_LONG(0x8000000A)
+#endif
+#define DIERR_INSUFFICIENTPRIVS         __MSABI_LONG(0x80040200)
+#define DIERR_DEVICEFULL                __MSABI_LONG(0x80040201)
+#define DIERR_MOREDATA                  __MSABI_LONG(0x80040202)
+#define DIERR_NOTDOWNLOADED             __MSABI_LONG(0x80040203)
+#define DIERR_HASEFFECTS                __MSABI_LONG(0x80040204)
+#define DIERR_NOTEXCLUSIVEACQUIRED      __MSABI_LONG(0x80040205)
+#define DIERR_INCOMPLETEEFFECT          __MSABI_LONG(0x80040206)
+#define DIERR_NOTBUFFERED               __MSABI_LONG(0x80040207)
+#define DIERR_EFFECTPLAYING             __MSABI_LONG(0x80040208)
+#define DIERR_UNPLUGGED                 __MSABI_LONG(0x80040209)
+#define DIERR_REPORTFULL                __MSABI_LONG(0x8004020A)
+#define DIERR_MAPFILEFAIL               __MSABI_LONG(0x8004020B)
+
+#define DIENUM_STOP                     0
+#define DIENUM_CONTINUE                 1
+
+#define DIEDFL_ALLDEVICES               0x00000000
+#define DIEDFL_ATTACHEDONLY             0x00000001
+#define DIEDFL_FORCEFEEDBACK            0x00000100
+#define DIEDFL_INCLUDEALIASES           0x00010000
+#define DIEDFL_INCLUDEPHANTOMS          0x00020000
+#define DIEDFL_INCLUDEHIDDEN		0x00040000
+
+#define DIDEVTYPE_DEVICE                1
+#define DIDEVTYPE_MOUSE                 2
+#define DIDEVTYPE_KEYBOARD              3
+#define DIDEVTYPE_JOYSTICK              4
+#define DIDEVTYPE_HID                   0x00010000
+
+#define DI8DEVCLASS_ALL             0
+#define DI8DEVCLASS_DEVICE          1
+#define DI8DEVCLASS_POINTER         2
+#define DI8DEVCLASS_KEYBOARD        3
+#define DI8DEVCLASS_GAMECTRL        4
+
+#define DI8DEVTYPE_DEVICE           0x11
+#define DI8DEVTYPE_MOUSE            0x12
+#define DI8DEVTYPE_KEYBOARD         0x13
+#define DI8DEVTYPE_JOYSTICK         0x14
+#define DI8DEVTYPE_GAMEPAD          0x15
+#define DI8DEVTYPE_DRIVING          0x16
+#define DI8DEVTYPE_FLIGHT           0x17
+#define DI8DEVTYPE_1STPERSON        0x18
+#define DI8DEVTYPE_DEVICECTRL       0x19
+#define DI8DEVTYPE_SCREENPOINTER    0x1A
+#define DI8DEVTYPE_REMOTE           0x1B
+#define DI8DEVTYPE_SUPPLEMENTAL     0x1C
+	
+#define DIDEVTYPEMOUSE_UNKNOWN          1
+#define DIDEVTYPEMOUSE_TRADITIONAL      2
+#define DIDEVTYPEMOUSE_FINGERSTICK      3
+#define DIDEVTYPEMOUSE_TOUCHPAD         4
+#define DIDEVTYPEMOUSE_TRACKBALL        5
+
+#define DIDEVTYPEKEYBOARD_UNKNOWN       0
+#define DIDEVTYPEKEYBOARD_PCXT          1
+#define DIDEVTYPEKEYBOARD_OLIVETTI      2
+#define DIDEVTYPEKEYBOARD_PCAT          3
+#define DIDEVTYPEKEYBOARD_PCENH         4
+#define DIDEVTYPEKEYBOARD_NOKIA1050     5
+#define DIDEVTYPEKEYBOARD_NOKIA9140     6
+#define DIDEVTYPEKEYBOARD_NEC98         7
+#define DIDEVTYPEKEYBOARD_NEC98LAPTOP   8
+#define DIDEVTYPEKEYBOARD_NEC98106      9
+#define DIDEVTYPEKEYBOARD_JAPAN106     10
+#define DIDEVTYPEKEYBOARD_JAPANAX      11
+#define DIDEVTYPEKEYBOARD_J3100        12
+
+#define DIDEVTYPEJOYSTICK_UNKNOWN       1
+#define DIDEVTYPEJOYSTICK_TRADITIONAL   2
+#define DIDEVTYPEJOYSTICK_FLIGHTSTICK   3
+#define DIDEVTYPEJOYSTICK_GAMEPAD       4
+#define DIDEVTYPEJOYSTICK_RUDDER        5
+#define DIDEVTYPEJOYSTICK_WHEEL         6
+#define DIDEVTYPEJOYSTICK_HEADTRACKER   7
+
+#define DI8DEVTYPEMOUSE_UNKNOWN                     1
+#define DI8DEVTYPEMOUSE_TRADITIONAL                 2
+#define DI8DEVTYPEMOUSE_FINGERSTICK                 3
+#define DI8DEVTYPEMOUSE_TOUCHPAD                    4
+#define DI8DEVTYPEMOUSE_TRACKBALL                   5
+#define DI8DEVTYPEMOUSE_ABSOLUTE                    6
+
+#define DI8DEVTYPEKEYBOARD_UNKNOWN                  0
+#define DI8DEVTYPEKEYBOARD_PCXT                     1
+#define DI8DEVTYPEKEYBOARD_OLIVETTI                 2
+#define DI8DEVTYPEKEYBOARD_PCAT                     3
+#define DI8DEVTYPEKEYBOARD_PCENH                    4
+#define DI8DEVTYPEKEYBOARD_NOKIA1050                5
+#define DI8DEVTYPEKEYBOARD_NOKIA9140                6
+#define DI8DEVTYPEKEYBOARD_NEC98                    7
+#define DI8DEVTYPEKEYBOARD_NEC98LAPTOP              8
+#define DI8DEVTYPEKEYBOARD_NEC98106                 9
+#define DI8DEVTYPEKEYBOARD_JAPAN106                10
+#define DI8DEVTYPEKEYBOARD_JAPANAX                 11
+#define DI8DEVTYPEKEYBOARD_J3100                   12
+
+#define DI8DEVTYPE_LIMITEDGAMESUBTYPE               1
+
+#define DI8DEVTYPEJOYSTICK_LIMITED                  DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEJOYSTICK_STANDARD                 2
+
+#define DI8DEVTYPEGAMEPAD_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEGAMEPAD_STANDARD                  2
+#define DI8DEVTYPEGAMEPAD_TILT                      3
+
+#define DI8DEVTYPEDRIVING_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEDRIVING_COMBINEDPEDALS            2
+#define DI8DEVTYPEDRIVING_DUALPEDALS                3
+#define DI8DEVTYPEDRIVING_THREEPEDALS               4
+#define DI8DEVTYPEDRIVING_HANDHELD                  5
+
+#define DI8DEVTYPEFLIGHT_LIMITED                    DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEFLIGHT_STICK                      2
+#define DI8DEVTYPEFLIGHT_YOKE                       3
+#define DI8DEVTYPEFLIGHT_RC                         4
+
+#define DI8DEVTYPE1STPERSON_LIMITED                 DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPE1STPERSON_UNKNOWN                 2
+#define DI8DEVTYPE1STPERSON_SIXDOF                  3
+#define DI8DEVTYPE1STPERSON_SHOOTER                 4
+
+#define DI8DEVTYPESCREENPTR_UNKNOWN                 2
+#define DI8DEVTYPESCREENPTR_LIGHTGUN                3
+#define DI8DEVTYPESCREENPTR_LIGHTPEN                4
+#define DI8DEVTYPESCREENPTR_TOUCH                   5
+
+#define DI8DEVTYPEREMOTE_UNKNOWN                    2
+
+#define DI8DEVTYPEDEVICECTRL_UNKNOWN                2
+#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION         3
+#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4
+
+#define DI8DEVTYPESUPPLEMENTAL_UNKNOWN              2
+#define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER    3
+#define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER          4
+#define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER          5
+#define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE       6
+#define DI8DEVTYPESUPPLEMENTAL_SHIFTER              7
+#define DI8DEVTYPESUPPLEMENTAL_THROTTLE             8
+#define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE        9
+#define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS      10
+#define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS          11
+#define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS         12
+#define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS        13
+	
+#define GET_DIDEVICE_TYPE(dwDevType)     LOBYTE(dwDevType)
+#define GET_DIDEVICE_SUBTYPE(dwDevType)  HIBYTE(dwDevType)
+
+typedef struct DIDEVICEOBJECTINSTANCE_DX3A {
+    DWORD   dwSize;
+    GUID    guidType;
+    DWORD   dwOfs;
+    DWORD   dwType;
+    DWORD   dwFlags;
+    CHAR    tszName[MAX_PATH];
+} DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;
+typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;
+typedef struct DIDEVICEOBJECTINSTANCE_DX3W {
+    DWORD   dwSize;
+    GUID    guidType;
+    DWORD   dwOfs;
+    DWORD   dwType;
+    DWORD   dwFlags;
+    WCHAR   tszName[MAX_PATH];
+} DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;
+typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE_DX3)
+
+typedef struct DIDEVICEOBJECTINSTANCEA {
+    DWORD	dwSize;
+    GUID	guidType;
+    DWORD	dwOfs;
+    DWORD	dwType;
+    DWORD	dwFlags;
+    CHAR	tszName[MAX_PATH];
+    DWORD	dwFFMaxForce;
+    DWORD	dwFFForceResolution;
+    WORD	wCollectionNumber;
+    WORD	wDesignatorIndex;
+    WORD	wUsagePage;
+    WORD	wUsage;
+    DWORD	dwDimension;
+    WORD	wExponent;
+    WORD	wReserved;
+} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;
+typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;
+
+typedef struct DIDEVICEOBJECTINSTANCEW {
+    DWORD	dwSize;
+    GUID	guidType;
+    DWORD	dwOfs;
+    DWORD	dwType;
+    DWORD	dwFlags;
+    WCHAR	tszName[MAX_PATH];
+    DWORD	dwFFMaxForce;
+    DWORD	dwFFForceResolution;
+    WORD	wCollectionNumber;
+    WORD	wDesignatorIndex;
+    WORD	wUsagePage;
+    WORD	wUsage;
+    DWORD	dwDimension;
+    WORD	wExponent;
+    WORD	wReserved;
+} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;
+typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE)
+
+typedef struct DIDEVICEINSTANCE_DX3A {
+    DWORD   dwSize;
+    GUID    guidInstance;
+    GUID    guidProduct;
+    DWORD   dwDevType;
+    CHAR    tszInstanceName[MAX_PATH];
+    CHAR    tszProductName[MAX_PATH];
+} DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;
+typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;
+typedef struct DIDEVICEINSTANCE_DX3W {
+    DWORD   dwSize;
+    GUID    guidInstance;
+    GUID    guidProduct;
+    DWORD   dwDevType;
+    WCHAR   tszInstanceName[MAX_PATH];
+    WCHAR   tszProductName[MAX_PATH];
+} DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;
+typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE_DX3)
+
+typedef struct DIDEVICEINSTANCEA {
+    DWORD	dwSize;
+    GUID	guidInstance;
+    GUID	guidProduct;
+    DWORD	dwDevType;
+    CHAR	tszInstanceName[MAX_PATH];
+    CHAR	tszProductName[MAX_PATH];
+    GUID	guidFFDriver;
+    WORD	wUsagePage;
+    WORD	wUsage;
+} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;
+typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
+
+typedef struct DIDEVICEINSTANCEW {
+    DWORD	dwSize;
+    GUID	guidInstance;
+    GUID	guidProduct;
+    DWORD	dwDevType;
+    WCHAR	tszInstanceName[MAX_PATH];
+    WCHAR	tszProductName[MAX_PATH];
+    GUID	guidFFDriver;
+    WORD	wUsagePage;
+    WORD	wUsage;
+} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
+typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE)
+
+typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK)
+
+#define DIEDBS_MAPPEDPRI1		0x00000001
+#define DIEDBS_MAPPEDPRI2		0x00000002
+#define DIEDBS_RECENTDEVICE		0x00000010
+#define DIEDBS_NEWDEVICE		0x00000020
+
+#define DIEDBSFL_ATTACHEDONLY		0x00000000
+#define DIEDBSFL_THISUSER		0x00000010
+#define DIEDBSFL_FORCEFEEDBACK		DIEDFL_FORCEFEEDBACK
+#define DIEDBSFL_AVAILABLEDEVICES	0x00001000
+#define DIEDBSFL_MULTIMICEKEYBOARDS	0x00002000
+#define DIEDBSFL_NONGAMINGDEVICES	0x00004000
+#define DIEDBSFL_VALID			0x00007110
+
+typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA,LPDIRECTINPUTDEVICE8A,DWORD,DWORD,LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW,LPDIRECTINPUTDEVICE8W,DWORD,DWORD,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESBYSEMANTICSCB)
+
+typedef BOOL (CALLBACK *LPDICONFIGUREDEVICESCALLBACK)(LPUNKNOWN,LPVOID);
+
+typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA,LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
+
+typedef BOOL (CALLBACK *LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
+
+#define DIK_ESCAPE          0x01
+#define DIK_1               0x02
+#define DIK_2               0x03
+#define DIK_3               0x04
+#define DIK_4               0x05
+#define DIK_5               0x06
+#define DIK_6               0x07
+#define DIK_7               0x08
+#define DIK_8               0x09
+#define DIK_9               0x0A
+#define DIK_0               0x0B
+#define DIK_MINUS           0x0C    /* - on main keyboard */
+#define DIK_EQUALS          0x0D
+#define DIK_BACK            0x0E    /* backspace */
+#define DIK_TAB             0x0F
+#define DIK_Q               0x10
+#define DIK_W               0x11
+#define DIK_E               0x12
+#define DIK_R               0x13
+#define DIK_T               0x14
+#define DIK_Y               0x15
+#define DIK_U               0x16
+#define DIK_I               0x17
+#define DIK_O               0x18
+#define DIK_P               0x19
+#define DIK_LBRACKET        0x1A
+#define DIK_RBRACKET        0x1B
+#define DIK_RETURN          0x1C    /* Enter on main keyboard */
+#define DIK_LCONTROL        0x1D
+#define DIK_A               0x1E
+#define DIK_S               0x1F
+#define DIK_D               0x20
+#define DIK_F               0x21
+#define DIK_G               0x22
+#define DIK_H               0x23
+#define DIK_J               0x24
+#define DIK_K               0x25
+#define DIK_L               0x26
+#define DIK_SEMICOLON       0x27
+#define DIK_APOSTROPHE      0x28
+#define DIK_GRAVE           0x29    /* accent grave */
+#define DIK_LSHIFT          0x2A
+#define DIK_BACKSLASH       0x2B
+#define DIK_Z               0x2C
+#define DIK_X               0x2D
+#define DIK_C               0x2E
+#define DIK_V               0x2F
+#define DIK_B               0x30
+#define DIK_N               0x31
+#define DIK_M               0x32
+#define DIK_COMMA           0x33
+#define DIK_PERIOD          0x34    /* . on main keyboard */
+#define DIK_SLASH           0x35    /* / on main keyboard */
+#define DIK_RSHIFT          0x36
+#define DIK_MULTIPLY        0x37    /* * on numeric keypad */
+#define DIK_LMENU           0x38    /* left Alt */
+#define DIK_SPACE           0x39
+#define DIK_CAPITAL         0x3A
+#define DIK_F1              0x3B
+#define DIK_F2              0x3C
+#define DIK_F3              0x3D
+#define DIK_F4              0x3E
+#define DIK_F5              0x3F
+#define DIK_F6              0x40
+#define DIK_F7              0x41
+#define DIK_F8              0x42
+#define DIK_F9              0x43
+#define DIK_F10             0x44
+#define DIK_NUMLOCK         0x45
+#define DIK_SCROLL          0x46    /* Scroll Lock */
+#define DIK_NUMPAD7         0x47
+#define DIK_NUMPAD8         0x48
+#define DIK_NUMPAD9         0x49
+#define DIK_SUBTRACT        0x4A    /* - on numeric keypad */
+#define DIK_NUMPAD4         0x4B
+#define DIK_NUMPAD5         0x4C
+#define DIK_NUMPAD6         0x4D
+#define DIK_ADD             0x4E    /* + on numeric keypad */
+#define DIK_NUMPAD1         0x4F
+#define DIK_NUMPAD2         0x50
+#define DIK_NUMPAD3         0x51
+#define DIK_NUMPAD0         0x52
+#define DIK_DECIMAL         0x53    /* . on numeric keypad */
+#define DIK_F11             0x57
+#define DIK_F12             0x58
+#define DIK_F13             0x64    /*                     (NEC PC98) */
+#define DIK_F14             0x65    /*                     (NEC PC98) */
+#define DIK_F15             0x66    /*                     (NEC PC98) */
+#define DIK_KANA            0x70    /* (Japanese keyboard)            */
+#define DIK_CONVERT         0x79    /* (Japanese keyboard)            */
+#define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */
+#define DIK_YEN             0x7D    /* (Japanese keyboard)            */
+#define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */
+#define DIK_CIRCUMFLEX      0x90    /* (Japanese keyboard)            */
+#define DIK_AT              0x91    /*                     (NEC PC98) */
+#define DIK_COLON           0x92    /*                     (NEC PC98) */
+#define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */
+#define DIK_KANJI           0x94    /* (Japanese keyboard)            */
+#define DIK_STOP            0x95    /*                     (NEC PC98) */
+#define DIK_AX              0x96    /*                     (Japan AX) */
+#define DIK_UNLABELED       0x97    /*                        (J3100) */
+#define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */
+#define DIK_RCONTROL        0x9D
+#define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */
+#define DIK_DIVIDE          0xB5    /* / on numeric keypad */
+#define DIK_SYSRQ           0xB7
+#define DIK_RMENU           0xB8    /* right Alt */
+#define DIK_PAUSE           0xC5    /* Pause */
+#define DIK_HOME            0xC7    /* Home on arrow keypad */
+#define DIK_UP              0xC8    /* UpArrow on arrow keypad */
+#define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */
+#define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */
+#define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */
+#define DIK_END             0xCF    /* End on arrow keypad */
+#define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */
+#define DIK_NEXT            0xD1    /* PgDn on arrow keypad */
+#define DIK_INSERT          0xD2    /* Insert on arrow keypad */
+#define DIK_DELETE          0xD3    /* Delete on arrow keypad */
+#define DIK_LWIN            0xDB    /* Left Windows key */
+#define DIK_RWIN            0xDC    /* Right Windows key */
+#define DIK_APPS            0xDD    /* AppMenu key */
+#define DIK_POWER           0xDE
+#define DIK_SLEEP           0xDF
+#define DIK_BACKSPACE       DIK_BACK            /* backspace */
+#define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */
+#define DIK_LALT            DIK_LMENU           /* left Alt */
+#define DIK_CAPSLOCK        DIK_CAPITAL         /* CapsLock */
+#define DIK_NUMPADMINUS     DIK_SUBTRACT        /* - on numeric keypad */
+#define DIK_NUMPADPLUS      DIK_ADD             /* + on numeric keypad */
+#define DIK_NUMPADPERIOD    DIK_DECIMAL         /* . on numeric keypad */
+#define DIK_NUMPADSLASH     DIK_DIVIDE          /* / on numeric keypad */
+#define DIK_RALT            DIK_RMENU           /* right Alt */
+#define DIK_UPARROW         DIK_UP              /* UpArrow on arrow keypad */
+#define DIK_PGUP            DIK_PRIOR           /* PgUp on arrow keypad */
+#define DIK_LEFTARROW       DIK_LEFT            /* LeftArrow on arrow keypad */
+#define DIK_RIGHTARROW      DIK_RIGHT           /* RightArrow on arrow keypad */
+#define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */
+#define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */
+
+/* New DirectInput8 style keyboard constants */
+
+#define DIKEYBOARD_ESCAPE               (DIK_ESCAPE | 0x81000400)
+#define DIKEYBOARD_1                    (DIK_1 | 0x81000400)
+#define DIKEYBOARD_2                    (DIK_2 | 0x81000400)
+#define DIKEYBOARD_3                    (DIK_3 | 0x81000400)
+#define DIKEYBOARD_4                    (DIK_4 | 0x81000400)
+#define DIKEYBOARD_5                    (DIK_5 | 0x81000400)
+#define DIKEYBOARD_6                    (DIK_6 | 0x81000400)
+#define DIKEYBOARD_7                    (DIK_7 | 0x81000400)
+#define DIKEYBOARD_8                    (DIK_8 | 0x81000400)
+#define DIKEYBOARD_9                    (DIK_9 | 0x81000400)
+#define DIKEYBOARD_0                    (DIK_0 | 0x81000400)
+#define DIKEYBOARD_MINUS                (DIK_MINUS | 0x81000400)
+#define DIKEYBOARD_EQUALS               (DIK_EQUALS | 0x81000400)
+#define DIKEYBOARD_BACK                 (DIK_BACK | 0x81000400)
+#define DIKEYBOARD_TAB                  (DIK_TAB | 0x81000400)
+#define DIKEYBOARD_Q                    (DIK_Q | 0x81000400)
+#define DIKEYBOARD_W                    (DIK_W | 0x81000400)
+#define DIKEYBOARD_E                    (DIK_E | 0x81000400)
+#define DIKEYBOARD_R                    (DIK_R | 0x81000400)
+#define DIKEYBOARD_T                    (DIK_T | 0x81000400)
+#define DIKEYBOARD_Y                    (DIK_Y | 0x81000400)
+#define DIKEYBOARD_U                    (DIK_U | 0x81000400)
+#define DIKEYBOARD_I                    (DIK_I | 0x81000400)
+#define DIKEYBOARD_O                    (DIK_O | 0x81000400)
+#define DIKEYBOARD_P                    (DIK_P | 0x81000400)
+#define DIKEYBOARD_LBRACKET             (DIK_LBRACKET | 0x81000400)
+#define DIKEYBOARD_RBRACKET             (DIK_RBRACKET | 0x81000400)
+#define DIKEYBOARD_RETURN               (DIK_RETURN | 0x81000400)
+#define DIKEYBOARD_LCONTROL             (DIK_LCONTROL | 0x81000400)
+#define DIKEYBOARD_A                    (DIK_A | 0x81000400)
+#define DIKEYBOARD_S                    (DIK_S | 0x81000400)
+#define DIKEYBOARD_D                    (DIK_D | 0x81000400)
+#define DIKEYBOARD_F                    (DIK_F | 0x81000400)
+#define DIKEYBOARD_G                    (DIK_G | 0x81000400)
+#define DIKEYBOARD_H                    (DIK_H | 0x81000400)
+#define DIKEYBOARD_J                    (DIK_J | 0x81000400)
+#define DIKEYBOARD_K                    (DIK_K | 0x81000400)
+#define DIKEYBOARD_L                    (DIK_L | 0x81000400)
+#define DIKEYBOARD_SEMICOLON            (DIK_SEMICOLON | 0x81000400)
+#define DIKEYBOARD_APOSTROPHE           (DIK_APOSTROPHE | 0x81000400)
+#define DIKEYBOARD_GRAVE                (DIK_GRAVE | 0x81000400)
+#define DIKEYBOARD_LSHIFT               (DIK_LSHIFT | 0x81000400)
+#define DIKEYBOARD_BACKSLASH            (DIK_BACKSLASH | 0x81000400)
+#define DIKEYBOARD_Z                    (DIK_Z | 0x81000400)
+#define DIKEYBOARD_X                    (DIK_X | 0x81000400)
+#define DIKEYBOARD_C                    (DIK_C | 0x81000400)
+#define DIKEYBOARD_V                    (DIK_V | 0x81000400)
+#define DIKEYBOARD_B                    (DIK_B | 0x81000400)
+#define DIKEYBOARD_N                    (DIK_N | 0x81000400)
+#define DIKEYBOARD_M                    (DIK_M | 0x81000400)
+#define DIKEYBOARD_COMMA                (DIK_COMMA | 0x81000400)
+#define DIKEYBOARD_PERIOD               (DIK_PERIOD | 0x81000400)
+#define DIKEYBOARD_SLASH                (DIK_SLASH | 0x81000400)
+#define DIKEYBOARD_RSHIFT               (DIK_RSHIFT | 0x81000400)
+#define DIKEYBOARD_MULTIPLY             (DIK_MULTIPLY | 0x81000400)
+#define DIKEYBOARD_LMENU                (DIK_LMENU | 0x81000400)
+#define DIKEYBOARD_SPACE                (DIK_SPACE | 0x81000400)
+#define DIKEYBOARD_CAPITAL              (DIK_CAPITAL | 0x81000400)
+#define DIKEYBOARD_F1                   (DIK_F1 | 0x81000400)
+#define DIKEYBOARD_F2                   (DIK_F2 | 0x81000400)
+#define DIKEYBOARD_F3                   (DIK_F3 | 0x81000400)
+#define DIKEYBOARD_F4                   (DIK_F4 | 0x81000400)
+#define DIKEYBOARD_F5                   (DIK_F5 | 0x81000400)
+#define DIKEYBOARD_F6                   (DIK_F6 | 0x81000400)
+#define DIKEYBOARD_F7                   (DIK_F7 | 0x81000400)
+#define DIKEYBOARD_F8                   (DIK_F8 | 0x81000400)
+#define DIKEYBOARD_F9                   (DIK_F9 | 0x81000400)
+#define DIKEYBOARD_F10                  (DIK_F10 | 0x81000400)
+#define DIKEYBOARD_NUMLOCK              (DIK_NUMLOCK | 0x81000400)
+#define DIKEYBOARD_SCROLL               (DIK_SCROLL | 0x81000400)
+#define DIKEYBOARD_NUMPAD7              (DIK_NUMPAD7 | 0x81000400)
+#define DIKEYBOARD_NUMPAD8              (DIK_NUMPAD8 | 0x81000400)
+#define DIKEYBOARD_NUMPAD9              (DIK_NUMPAD9 | 0x81000400)
+#define DIKEYBOARD_SUBTRACT             (DIK_SUBTRACT | 0x81000400)
+#define DIKEYBOARD_NUMPAD4              (DIK_NUMPAD4 | 0x81000400)
+#define DIKEYBOARD_NUMPAD5              (DIK_NUMPAD5 | 0x81000400)
+#define DIKEYBOARD_NUMPAD6              (DIK_NUMPAD6 | 0x81000400)
+#define DIKEYBOARD_ADD                  (DIK_ADD | 0x81000400)
+#define DIKEYBOARD_NUMPAD1              (DIK_NUMPAD1 | 0x81000400)
+#define DIKEYBOARD_NUMPAD2              (DIK_NUMPAD2 | 0x81000400)
+#define DIKEYBOARD_NUMPAD3              (DIK_NUMPAD3 | 0x81000400)
+#define DIKEYBOARD_NUMPAD0              (DIK_NUMPAD0 | 0x81000400)
+#define DIKEYBOARD_DECIMAL              (DIK_DECIMAL | 0x81000400)
+#define DIKEYBOARD_F11                  (DIK_F11 | 0x81000400)
+#define DIKEYBOARD_F12                  (DIK_F12 | 0x81000400)
+#define DIKEYBOARD_F13                  (DIK_F13 | 0x81000400)
+#define DIKEYBOARD_F14                  (DIK_F14 | 0x81000400)
+#define DIKEYBOARD_F15                  (DIK_F15 | 0x81000400)
+#define DIKEYBOARD_KANA                 (DIK_KANA | 0x81000400)
+#define DIKEYBOARD_CONVERT              (DIK_CONVERT | 0x81000400)
+#define DIKEYBOARD_NOCONVERT            (DIK_NOCONVERT | 0x81000400)
+#define DIKEYBOARD_YEN                  (DIK_YEN | 0x81000400)
+#define DIKEYBOARD_NUMPADEQUALS         (DIK_NUMPADEQUALS | 0x81000400)
+#define DIKEYBOARD_CIRCUMFLEX           (DIK_CIRCUMFLEX | 0x81000400)
+#define DIKEYBOARD_AT                   (DIK_AT | 0x81000400)
+#define DIKEYBOARD_COLON                (DIK_COLON | 0x81000400)
+#define DIKEYBOARD_UNDERLINE            (DIK_UNDERLINE | 0x81000400)
+#define DIKEYBOARD_KANJI                (DIK_KANJI | 0x81000400)
+#define DIKEYBOARD_STOP                 (DIK_STOP | 0x81000400)
+#define DIKEYBOARD_AX                   (DIK_AX | 0x81000400)
+#define DIKEYBOARD_UNLABELED            (DIK_UNLABELED | 0x81000400)
+#define DIKEYBOARD_NUMPADENTER          (DIK_NUMPADENTER | 0x81000400)
+#define DIKEYBOARD_RCONTROL             (DIK_RCONTROL | 0x81000400)
+#define DIKEYBOARD_NUMPADCOMMA          (DIK_NUMPADCOMMA | 0x81000400)
+#define DIKEYBOARD_DIVIDE               (DIK_DIVIDE | 0x81000400)
+#define DIKEYBOARD_SYSRQ                (DIK_SYSRQ | 0x81000400)
+#define DIKEYBOARD_RMENU                (DIK_RMENU | 0x81000400)
+#define DIKEYBOARD_PAUSE                (DIK_PAUSE | 0x81000400)
+#define DIKEYBOARD_HOME                 (DIK_HOME | 0x81000400)
+#define DIKEYBOARD_UP                   (DIK_UP | 0x81000400)
+#define DIKEYBOARD_PRIOR                (DIK_PRIOR | 0x81000400)
+#define DIKEYBOARD_LEFT                 (DIK_LEFT | 0x81000400)
+#define DIKEYBOARD_RIGHT                (DIK_RIGHT | 0x81000400)
+#define DIKEYBOARD_END                  (DIK_END | 0x81000400)
+#define DIKEYBOARD_DOWN                 (DIK_DOWN | 0x81000400)
+#define DIKEYBOARD_NEXT                 (DIK_NEXT | 0x81000400)
+#define DIKEYBOARD_INSERT               (DIK_INSERT | 0x81000400)
+#define DIKEYBOARD_DELETE               (DIK_DELETE | 0x81000400)
+#define DIKEYBOARD_LWIN                 (DIK_LWIN | 0x81000400)
+#define DIKEYBOARD_RWIN                 (DIK_RWIN | 0x81000400)
+#define DIKEYBOARD_APPS                 (DIK_APPS | 0x81000400)
+#define DIKEYBOARD_POWER                (DIK_POWER | 0x81000400)
+#define DIKEYBOARD_SLEEP                (DIK_SLEEP | 0x81000400)
+#define DIKEYBOARD_BACKSPACE            (DIK_BACKSPACE | 0x81000400)
+#define DIKEYBOARD_NUMPADSTAR           (DIK_NUMPADSTAR | 0x81000400)
+#define DIKEYBOARD_LALT                 (DIK_LALT | 0x81000400)
+#define DIKEYBOARD_CAPSLOCK             (DIK_CAPSLOCK | 0x81000400)
+#define DIKEYBOARD_NUMPADMINUS          (DIK_NUMPADMINUS | 0x81000400)
+#define DIKEYBOARD_NUMPADPLUS           (DIK_NUMPADPLUS | 0x81000400)
+#define DIKEYBOARD_NUMPADPERIOD         (DIK_NUMPADPERIOD | 0x81000400)
+#define DIKEYBOARD_NUMPADSLASH          (DIK_NUMPADSLASH | 0x81000400)
+#define DIKEYBOARD_RALT                 (DIK_RALT | 0x81000400)
+#define DIKEYBOARD_UPARROW              (DIK_UPARROW | 0x81000400)
+#define DIKEYBOARD_PGUP                 (DIK_PGUP | 0x81000400)
+#define DIKEYBOARD_LEFTARROW            (DIK_LEFTARROW | 0x81000400)
+#define DIKEYBOARD_RIGHTARROW           (DIK_RIGHTARROW | 0x81000400)
+#define DIKEYBOARD_DOWNARROW            (DIK_DOWNARROW | 0x81000400)
+#define DIKEYBOARD_PGDN                 (DIK_PGDN | 0x81000400)
+
+#define DIDFT_ALL		0x00000000
+#define DIDFT_RELAXIS		0x00000001
+#define DIDFT_ABSAXIS		0x00000002
+#define DIDFT_AXIS		0x00000003
+#define DIDFT_PSHBUTTON		0x00000004
+#define DIDFT_TGLBUTTON		0x00000008
+#define DIDFT_BUTTON		0x0000000C
+#define DIDFT_POV		0x00000010
+#define DIDFT_COLLECTION	0x00000040
+#define DIDFT_NODATA		0x00000080
+#define DIDFT_ANYINSTANCE	0x00FFFF00
+#define DIDFT_INSTANCEMASK	DIDFT_ANYINSTANCE
+#define DIDFT_MAKEINSTANCE(n)	((WORD)(n) << 8)
+#define DIDFT_GETTYPE(n)	LOBYTE(n)
+#define DIDFT_GETINSTANCE(n)	LOWORD((n) >> 8)
+#define DIDFT_FFACTUATOR	0x01000000
+#define DIDFT_FFEFFECTTRIGGER	0x02000000
+#define DIDFT_OUTPUT		0x10000000
+#define DIDFT_VENDORDEFINED	0x04000000
+#define DIDFT_ALIAS		0x08000000
+#ifndef DIDFT_OPTIONAL
+#define DIDFT_OPTIONAL		0x80000000
+#endif
+#define DIDFT_ENUMCOLLECTION(n)	((WORD)(n) << 8)
+#define DIDFT_NOCOLLECTION	0x00FFFF00
+#define DIDF_ABSAXIS		0x00000001
+#define DIDF_RELAXIS		0x00000002
+
+#define DIGDD_PEEK		0x00000001
+
+#define DISEQUENCE_COMPARE(dwSq1,cmp,dwSq2) ((int)((dwSq1) - (dwSq2)) cmp 0)
+
+typedef struct DIDEVICEOBJECTDATA_DX3 {
+    DWORD	dwOfs;
+    DWORD	dwData;
+    DWORD	dwTimeStamp;
+    DWORD	dwSequence;
+} DIDEVICEOBJECTDATA_DX3,*LPDIDEVICEOBJECTDATA_DX3;
+typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX3;
+
+typedef struct DIDEVICEOBJECTDATA {
+    DWORD	dwOfs;
+    DWORD	dwData;
+    DWORD	dwTimeStamp;
+    DWORD	dwSequence;
+    UINT_PTR	uAppData;
+} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
+typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;
+
+typedef struct _DIOBJECTDATAFORMAT {
+    const GUID *pguid;
+    DWORD	dwOfs;
+    DWORD	dwType;
+    DWORD	dwFlags;
+} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;
+typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;
+
+typedef struct _DIDATAFORMAT {
+    DWORD			dwSize;
+    DWORD			dwObjSize;
+    DWORD			dwFlags;
+    DWORD			dwDataSize;
+    DWORD			dwNumObjs;
+    LPDIOBJECTDATAFORMAT	rgodf;
+} DIDATAFORMAT, *LPDIDATAFORMAT;
+typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
+
+#define DIDOI_FFACTUATOR	0x00000001
+#define DIDOI_FFEFFECTTRIGGER	0x00000002
+#define DIDOI_POLLED		0x00008000
+#define DIDOI_ASPECTPOSITION	0x00000100
+#define DIDOI_ASPECTVELOCITY	0x00000200
+#define DIDOI_ASPECTACCEL	0x00000300
+#define DIDOI_ASPECTFORCE	0x00000400
+#define DIDOI_ASPECTMASK	0x00000F00
+#define DIDOI_GUIDISUSAGE	0x00010000
+
+typedef struct DIPROPHEADER {
+    DWORD	dwSize;
+    DWORD	dwHeaderSize;
+    DWORD	dwObj;
+    DWORD	dwHow;
+} DIPROPHEADER,*LPDIPROPHEADER;
+typedef const DIPROPHEADER *LPCDIPROPHEADER;
+
+#define DIPH_DEVICE	0
+#define DIPH_BYOFFSET	1
+#define DIPH_BYID	2
+#define DIPH_BYUSAGE	3
+
+#define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage)
+
+typedef struct DIPROPDWORD {
+	DIPROPHEADER	diph;
+	DWORD		dwData;
+} DIPROPDWORD, *LPDIPROPDWORD;
+typedef const DIPROPDWORD *LPCDIPROPDWORD;
+
+typedef struct DIPROPRANGE {
+	DIPROPHEADER	diph;
+	LONG		lMin;
+	LONG		lMax;
+} DIPROPRANGE, *LPDIPROPRANGE;
+typedef const DIPROPRANGE *LPCDIPROPRANGE;
+
+#define DIPROPRANGE_NOMIN	((LONG)0x80000000)
+#define DIPROPRANGE_NOMAX	((LONG)0x7FFFFFFF)
+
+typedef struct DIPROPCAL {
+	DIPROPHEADER diph;
+	LONG	lMin;
+	LONG	lCenter;
+	LONG	lMax;
+} DIPROPCAL, *LPDIPROPCAL;
+typedef const DIPROPCAL *LPCDIPROPCAL;
+
+typedef struct DIPROPGUIDANDPATH {
+	DIPROPHEADER diph;
+	GUID    guidClass;
+	WCHAR   wszPath[MAX_PATH];
+} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;
+typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
+
+typedef struct DIPROPSTRING {
+        DIPROPHEADER diph;
+        WCHAR        wsz[MAX_PATH];
+} DIPROPSTRING, *LPDIPROPSTRING;
+typedef const DIPROPSTRING *LPCDIPROPSTRING;
+
+/* special property GUIDs */
+#ifdef __cplusplus
+#define MAKEDIPROP(prop)	(*(const GUID *)(prop))
+#else
+#define MAKEDIPROP(prop)	((REFGUID)(prop))
+#endif
+#define DIPROP_BUFFERSIZE	MAKEDIPROP(1)
+#define DIPROP_AXISMODE		MAKEDIPROP(2)
+
+#define DIPROPAXISMODE_ABS	0
+#define DIPROPAXISMODE_REL	1
+
+#define DIPROP_GRANULARITY	MAKEDIPROP(3)
+#define DIPROP_RANGE		MAKEDIPROP(4)
+#define DIPROP_DEADZONE		MAKEDIPROP(5)
+#define DIPROP_SATURATION	MAKEDIPROP(6)
+#define DIPROP_FFGAIN		MAKEDIPROP(7)
+#define DIPROP_FFLOAD		MAKEDIPROP(8)
+#define DIPROP_AUTOCENTER	MAKEDIPROP(9)
+
+#define DIPROPAUTOCENTER_OFF	0
+#define DIPROPAUTOCENTER_ON	1
+
+#define DIPROP_CALIBRATIONMODE	MAKEDIPROP(10)
+
+#define DIPROPCALIBRATIONMODE_COOKED	0
+#define DIPROPCALIBRATIONMODE_RAW	1
+
+#define DIPROP_CALIBRATION	MAKEDIPROP(11)
+#define DIPROP_GUIDANDPATH	MAKEDIPROP(12)
+
+#define DIPROP_INSTANCENAME     MAKEDIPROP(13)
+#define DIPROP_JOYSTICKID       MAKEDIPROP(15)
+#define DIPROP_KEYNAME          MAKEDIPROP(20)
+#define DIPROP_VIDPID           MAKEDIPROP(24)
+
+#define DIPROP_KEYNAME     MAKEDIPROP(20)
+#define DIPROP_CPOINTS     MAKEDIPROP(21)
+#define DIPROP_APPDATA     MAKEDIPROP(22)
+#define DIPROP_SCANCODE    MAKEDIPROP(23)
+#define DIPROP_VIDPID      MAKEDIPROP(24)
+#define DIPROP_USERNAME    MAKEDIPROP(25)
+#define DIPROP_TYPENAME    MAKEDIPROP(26)
+
+typedef struct DIDEVCAPS_DX3 {
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    DWORD	dwDevType;
+    DWORD	dwAxes;
+    DWORD	dwButtons;
+    DWORD	dwPOVs;
+} DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;
+
+typedef struct DIDEVCAPS {
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    DWORD	dwDevType;
+    DWORD	dwAxes;
+    DWORD	dwButtons;
+    DWORD	dwPOVs;
+    DWORD	dwFFSamplePeriod;
+    DWORD	dwFFMinTimeResolution;
+    DWORD	dwFirmwareRevision;
+    DWORD	dwHardwareRevision;
+    DWORD	dwFFDriverVersion;
+} DIDEVCAPS,*LPDIDEVCAPS;
+
+#define DIDC_ATTACHED		0x00000001
+#define DIDC_POLLEDDEVICE	0x00000002
+#define DIDC_EMULATED		0x00000004
+#define DIDC_POLLEDDATAFORMAT	0x00000008
+#define DIDC_FORCEFEEDBACK	0x00000100
+#define DIDC_FFATTACK		0x00000200
+#define DIDC_FFFADE		0x00000400
+#define DIDC_SATURATION		0x00000800
+#define DIDC_POSNEGCOEFFICIENTS	0x00001000
+#define DIDC_POSNEGSATURATION	0x00002000
+#define DIDC_DEADBAND		0x00004000
+#define DIDC_STARTDELAY		0x00008000
+#define DIDC_ALIAS		0x00010000
+#define DIDC_PHANTOM		0x00020000
+#define DIDC_HIDDEN		0x00040000
+
+
+/* SetCooperativeLevel dwFlags */
+#define DISCL_EXCLUSIVE		0x00000001
+#define DISCL_NONEXCLUSIVE	0x00000002
+#define DISCL_FOREGROUND	0x00000004
+#define DISCL_BACKGROUND	0x00000008
+#define DISCL_NOWINKEY          0x00000010
+
+/* Device FF flags */
+#define DISFFC_RESET            0x00000001
+#define DISFFC_STOPALL          0x00000002
+#define DISFFC_PAUSE            0x00000004
+#define DISFFC_CONTINUE         0x00000008
+#define DISFFC_SETACTUATORSON   0x00000010
+#define DISFFC_SETACTUATORSOFF  0x00000020
+  
+#define DIGFFS_EMPTY            0x00000001
+#define DIGFFS_STOPPED          0x00000002
+#define DIGFFS_PAUSED           0x00000004
+#define DIGFFS_ACTUATORSON      0x00000010
+#define DIGFFS_ACTUATORSOFF     0x00000020
+#define DIGFFS_POWERON          0x00000040
+#define DIGFFS_POWEROFF         0x00000080
+#define DIGFFS_SAFETYSWITCHON   0x00000100
+#define DIGFFS_SAFETYSWITCHOFF  0x00000200
+#define DIGFFS_USERFFSWITCHON   0x00000400
+#define DIGFFS_USERFFSWITCHOFF  0x00000800
+#define DIGFFS_DEVICELOST       0x80000000
+
+/* Effect flags */
+#define DIEFT_ALL		0x00000000
+                                                                                
+#define DIEFT_CONSTANTFORCE	0x00000001
+#define DIEFT_RAMPFORCE		0x00000002
+#define DIEFT_PERIODIC		0x00000003
+#define DIEFT_CONDITION		0x00000004
+#define DIEFT_CUSTOMFORCE	0x00000005
+#define DIEFT_HARDWARE		0x000000FF
+#define DIEFT_FFATTACK		0x00000200
+#define DIEFT_FFFADE		0x00000400
+#define DIEFT_SATURATION	0x00000800
+#define DIEFT_POSNEGCOEFFICIENTS 0x00001000
+#define DIEFT_POSNEGSATURATION	0x00002000
+#define DIEFT_DEADBAND		0x00004000
+#define DIEFT_STARTDELAY	0x00008000
+#define DIEFT_GETTYPE(n)	LOBYTE(n)
+                                                                                
+#define DIEFF_OBJECTIDS         0x00000001
+#define DIEFF_OBJECTOFFSETS     0x00000002
+#define DIEFF_CARTESIAN         0x00000010
+#define DIEFF_POLAR             0x00000020
+#define DIEFF_SPHERICAL         0x00000040
+
+#define DIEP_DURATION           0x00000001
+#define DIEP_SAMPLEPERIOD       0x00000002
+#define DIEP_GAIN               0x00000004
+#define DIEP_TRIGGERBUTTON      0x00000008
+#define DIEP_TRIGGERREPEATINTERVAL 0x00000010
+#define DIEP_AXES               0x00000020
+#define DIEP_DIRECTION          0x00000040
+#define DIEP_ENVELOPE           0x00000080
+#define DIEP_TYPESPECIFICPARAMS 0x00000100
+#define DIEP_STARTDELAY         0x00000200
+#define DIEP_ALLPARAMS_DX5      0x000001FF
+#define DIEP_ALLPARAMS          0x000003FF
+#define DIEP_START              0x20000000
+#define DIEP_NORESTART          0x40000000
+#define DIEP_NODOWNLOAD         0x80000000
+#define DIEB_NOTRIGGER          0xFFFFFFFF
+
+#define DIES_SOLO               0x00000001
+#define DIES_NODOWNLOAD         0x80000000
+
+#define DIEGES_PLAYING          0x00000001
+#define DIEGES_EMULATED         0x00000002
+
+#define DI_DEGREES		100
+#define DI_FFNOMINALMAX		10000
+#define DI_SECONDS		1000000
+
+typedef struct DICONSTANTFORCE {
+	LONG			lMagnitude;
+} DICONSTANTFORCE, *LPDICONSTANTFORCE;
+typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;
+
+typedef struct DIRAMPFORCE {
+	LONG			lStart;
+	LONG			lEnd;
+} DIRAMPFORCE, *LPDIRAMPFORCE;
+typedef const DIRAMPFORCE *LPCDIRAMPFORCE;
+
+typedef struct DIPERIODIC {
+	DWORD			dwMagnitude;
+	LONG			lOffset;
+	DWORD			dwPhase;
+	DWORD			dwPeriod;
+} DIPERIODIC, *LPDIPERIODIC;
+typedef const DIPERIODIC *LPCDIPERIODIC;
+
+typedef struct DICONDITION {
+	LONG			lOffset;
+	LONG			lPositiveCoefficient;
+	LONG			lNegativeCoefficient;
+	DWORD			dwPositiveSaturation;
+	DWORD			dwNegativeSaturation;
+	LONG			lDeadBand;
+} DICONDITION, *LPDICONDITION;
+typedef const DICONDITION *LPCDICONDITION;
+
+typedef struct DICUSTOMFORCE {
+	DWORD			cChannels;
+	DWORD			dwSamplePeriod;
+	DWORD			cSamples;
+	LPLONG			rglForceData;
+} DICUSTOMFORCE, *LPDICUSTOMFORCE;
+typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;
+
+typedef struct DIENVELOPE {
+	DWORD			dwSize;
+	DWORD			dwAttackLevel;
+	DWORD			dwAttackTime;
+	DWORD			dwFadeLevel;
+	DWORD			dwFadeTime;
+} DIENVELOPE, *LPDIENVELOPE;
+typedef const DIENVELOPE *LPCDIENVELOPE;
+
+typedef struct DIEFFECT_DX5 {
+	DWORD			dwSize;
+	DWORD			dwFlags;
+	DWORD			dwDuration;
+	DWORD			dwSamplePeriod;
+	DWORD			dwGain;
+	DWORD			dwTriggerButton;
+	DWORD			dwTriggerRepeatInterval;
+	DWORD			cAxes;
+	LPDWORD			rgdwAxes;
+	LPLONG			rglDirection;
+	LPDIENVELOPE		lpEnvelope;
+	DWORD			cbTypeSpecificParams;
+	LPVOID			lpvTypeSpecificParams;
+} DIEFFECT_DX5, *LPDIEFFECT_DX5;
+typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;
+
+typedef struct DIEFFECT {
+	DWORD			dwSize;
+	DWORD			dwFlags;
+	DWORD			dwDuration;
+	DWORD			dwSamplePeriod;
+	DWORD			dwGain;
+	DWORD			dwTriggerButton;
+	DWORD			dwTriggerRepeatInterval;
+	DWORD			cAxes;
+	LPDWORD			rgdwAxes;
+	LPLONG			rglDirection;
+	LPDIENVELOPE		lpEnvelope;
+	DWORD			cbTypeSpecificParams;
+	LPVOID			lpvTypeSpecificParams;
+	DWORD			dwStartDelay;
+} DIEFFECT, *LPDIEFFECT;
+typedef const DIEFFECT *LPCDIEFFECT;
+typedef DIEFFECT DIEFFECT_DX6;
+typedef LPDIEFFECT LPDIEFFECT_DX6;
+
+typedef struct DIEFFECTINFOA {
+	DWORD			dwSize;
+	GUID			guid;
+	DWORD			dwEffType;
+	DWORD			dwStaticParams;
+	DWORD			dwDynamicParams;
+	CHAR			tszName[MAX_PATH];
+} DIEFFECTINFOA, *LPDIEFFECTINFOA;
+typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;
+
+typedef struct DIEFFECTINFOW {
+	DWORD			dwSize;
+	GUID			guid;
+	DWORD			dwEffType;
+	DWORD			dwStaticParams;
+	DWORD			dwDynamicParams;
+	WCHAR			tszName[MAX_PATH];
+} DIEFFECTINFOW, *LPDIEFFECTINFOW;
+typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
+
+DECL_WINELIB_TYPE_AW(DIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(LPDIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(LPCDIEFFECTINFO)
+
+typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
+
+typedef struct DIEFFESCAPE {
+	DWORD	dwSize;
+	DWORD	dwCommand;
+	LPVOID	lpvInBuffer;
+	DWORD	cbInBuffer;
+	LPVOID	lpvOutBuffer;
+	DWORD	cbOutBuffer;
+} DIEFFESCAPE, *LPDIEFFESCAPE;
+
+typedef struct DIJOYSTATE {
+	LONG	lX;
+	LONG	lY;
+	LONG	lZ;
+	LONG	lRx;
+	LONG	lRy;
+	LONG	lRz;
+	LONG	rglSlider[2];
+	DWORD	rgdwPOV[4];
+	BYTE	rgbButtons[32];
+} DIJOYSTATE, *LPDIJOYSTATE;
+
+typedef struct DIJOYSTATE2 {
+	LONG	lX;
+	LONG	lY;
+	LONG	lZ;
+	LONG	lRx;
+	LONG	lRy;
+	LONG	lRz;
+	LONG	rglSlider[2];
+	DWORD	rgdwPOV[4];
+	BYTE	rgbButtons[128];
+	LONG	lVX;		/* 'v' as in velocity */
+	LONG	lVY;
+	LONG	lVZ;
+	LONG	lVRx;
+	LONG	lVRy;
+	LONG	lVRz;
+	LONG	rglVSlider[2];
+	LONG	lAX;		/* 'a' as in acceleration */
+	LONG	lAY;
+	LONG	lAZ;
+	LONG	lARx;
+	LONG	lARy;
+	LONG	lARz;
+	LONG	rglASlider[2];
+	LONG	lFX;		/* 'f' as in force */
+	LONG	lFY;
+	LONG	lFZ;
+	LONG	lFRx;		/* 'fr' as in rotational force aka torque */
+	LONG	lFRy;
+	LONG	lFRz;
+	LONG	rglFSlider[2];
+} DIJOYSTATE2, *LPDIJOYSTATE2;
+
+#define DIJOFS_X		FIELD_OFFSET(DIJOYSTATE, lX)
+#define DIJOFS_Y		FIELD_OFFSET(DIJOYSTATE, lY)
+#define DIJOFS_Z		FIELD_OFFSET(DIJOYSTATE, lZ)
+#define DIJOFS_RX		FIELD_OFFSET(DIJOYSTATE, lRx)
+#define DIJOFS_RY		FIELD_OFFSET(DIJOYSTATE, lRy)
+#define DIJOFS_RZ		FIELD_OFFSET(DIJOYSTATE, lRz)
+#define DIJOFS_SLIDER(n)	(FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
+                                                        (n) * sizeof(LONG))
+#define DIJOFS_POV(n)		(FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
+                                                        (n) * sizeof(DWORD))
+#define DIJOFS_BUTTON(n)	(FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
+#define DIJOFS_BUTTON0		DIJOFS_BUTTON(0)
+#define DIJOFS_BUTTON1		DIJOFS_BUTTON(1)
+#define DIJOFS_BUTTON2		DIJOFS_BUTTON(2)
+#define DIJOFS_BUTTON3		DIJOFS_BUTTON(3)
+#define DIJOFS_BUTTON4		DIJOFS_BUTTON(4)
+#define DIJOFS_BUTTON5		DIJOFS_BUTTON(5)
+#define DIJOFS_BUTTON6		DIJOFS_BUTTON(6)
+#define DIJOFS_BUTTON7		DIJOFS_BUTTON(7)
+#define DIJOFS_BUTTON8		DIJOFS_BUTTON(8)
+#define DIJOFS_BUTTON9		DIJOFS_BUTTON(9)
+#define DIJOFS_BUTTON10		DIJOFS_BUTTON(10)
+#define DIJOFS_BUTTON11		DIJOFS_BUTTON(11)
+#define DIJOFS_BUTTON12		DIJOFS_BUTTON(12)
+#define DIJOFS_BUTTON13		DIJOFS_BUTTON(13)
+#define DIJOFS_BUTTON14		DIJOFS_BUTTON(14)
+#define DIJOFS_BUTTON15		DIJOFS_BUTTON(15)
+#define DIJOFS_BUTTON16		DIJOFS_BUTTON(16)
+#define DIJOFS_BUTTON17		DIJOFS_BUTTON(17)
+#define DIJOFS_BUTTON18		DIJOFS_BUTTON(18)
+#define DIJOFS_BUTTON19		DIJOFS_BUTTON(19)
+#define DIJOFS_BUTTON20		DIJOFS_BUTTON(20)
+#define DIJOFS_BUTTON21		DIJOFS_BUTTON(21)
+#define DIJOFS_BUTTON22		DIJOFS_BUTTON(22)
+#define DIJOFS_BUTTON23		DIJOFS_BUTTON(23)
+#define DIJOFS_BUTTON24		DIJOFS_BUTTON(24)
+#define DIJOFS_BUTTON25		DIJOFS_BUTTON(25)
+#define DIJOFS_BUTTON26		DIJOFS_BUTTON(26)
+#define DIJOFS_BUTTON27		DIJOFS_BUTTON(27)
+#define DIJOFS_BUTTON28		DIJOFS_BUTTON(28)
+#define DIJOFS_BUTTON29		DIJOFS_BUTTON(29)
+#define DIJOFS_BUTTON30		DIJOFS_BUTTON(30)
+#define DIJOFS_BUTTON31		DIJOFS_BUTTON(31)
+
+/* DInput 7 structures, types */
+typedef struct DIFILEEFFECT {
+  DWORD       dwSize;
+  GUID        GuidEffect;
+  LPCDIEFFECT lpDiEffect;
+  CHAR        szFriendlyName[MAX_PATH];
+} DIFILEEFFECT, *LPDIFILEEFFECT;
+
+typedef const DIFILEEFFECT *LPCDIFILEEFFECT;
+typedef BOOL (CALLBACK *LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID);
+
+/* DInput 8 structures and types */
+typedef struct _DIACTIONA {
+	UINT_PTR	uAppData;
+	DWORD		dwSemantic;
+	DWORD		dwFlags;
+	union {
+		LPCSTR	lptszActionName;
+		UINT	uResIdString;
+	} DUMMYUNIONNAME;
+	GUID		guidInstance;
+	DWORD		dwObjID;
+	DWORD		dwHow;
+} DIACTIONA, *LPDIACTIONA;
+typedef const DIACTIONA *LPCDIACTIONA;
+
+typedef struct _DIACTIONW {
+	UINT_PTR	uAppData;
+	DWORD		dwSemantic;
+	DWORD		dwFlags;
+	union {
+		LPCWSTR	lptszActionName;
+		UINT	uResIdString;
+	} DUMMYUNIONNAME;
+	GUID		guidInstance;
+	DWORD		dwObjID;
+	DWORD		dwHow;
+} DIACTIONW, *LPDIACTIONW;
+typedef const DIACTIONW *LPCDIACTIONW;
+
+DECL_WINELIB_TYPE_AW(DIACTION)
+DECL_WINELIB_TYPE_AW(LPDIACTION)
+DECL_WINELIB_TYPE_AW(LPCDIACTION)
+
+#define DIA_FORCEFEEDBACK	0x00000001
+#define DIA_APPMAPPED		0x00000002
+#define DIA_APPNOMAP		0x00000004
+#define DIA_NORANGE		0x00000008
+#define DIA_APPFIXED		0x00000010
+
+#define DIAH_UNMAPPED		0x00000000
+#define DIAH_USERCONFIG		0x00000001
+#define DIAH_APPREQUESTED	0x00000002
+#define DIAH_HWAPP		0x00000004
+#define DIAH_HWDEFAULT		0x00000008
+#define DIAH_DEFAULT		0x00000020
+#define DIAH_ERROR		0x80000000
+
+typedef struct _DIACTIONFORMATA {
+	DWORD		dwSize;
+	DWORD		dwActionSize;
+	DWORD		dwDataSize;
+	DWORD		dwNumActions;
+	LPDIACTIONA	rgoAction;
+	GUID		guidActionMap;
+	DWORD		dwGenre;
+	DWORD		dwBufferSize;
+	LONG		lAxisMin;
+	LONG		lAxisMax;
+	HINSTANCE	hInstString;
+	FILETIME	ftTimeStamp;
+	DWORD		dwCRC;
+	CHAR		tszActionMap[MAX_PATH];
+} DIACTIONFORMATA, *LPDIACTIONFORMATA;
+typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA;
+
+typedef struct _DIACTIONFORMATW {
+	DWORD		dwSize;
+	DWORD		dwActionSize;
+	DWORD		dwDataSize;
+	DWORD		dwNumActions;
+	LPDIACTIONW	rgoAction;
+	GUID		guidActionMap;
+	DWORD		dwGenre;
+	DWORD		dwBufferSize;
+	LONG		lAxisMin;
+	LONG		lAxisMax;
+	HINSTANCE	hInstString;
+	FILETIME	ftTimeStamp;
+	DWORD		dwCRC;
+	WCHAR		tszActionMap[MAX_PATH];
+} DIACTIONFORMATW, *LPDIACTIONFORMATW;
+typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW;
+
+DECL_WINELIB_TYPE_AW(DIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(LPDIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(LPCDIACTIONFORMAT)
+
+#define DIAFTS_NEWDEVICELOW	0xFFFFFFFF
+#define DIAFTS_NEWDEVICEHIGH	0xFFFFFFFF
+#define DIAFTS_UNUSEDDEVICELOW	0x00000000
+#define DIAFTS_UNUSEDDEVICEHIGH	0x00000000
+
+#define DIDBAM_DEFAULT		0x00000000
+#define DIDBAM_PRESERVE		0x00000001
+#define DIDBAM_INITIALIZE	0x00000002
+#define DIDBAM_HWDEFAULTS	0x00000004
+
+#define DIDSAM_DEFAULT		0x00000000
+#define DIDSAM_NOUSER		0x00000001
+#define DIDSAM_FORCESAVE	0x00000002
+
+#define DICD_DEFAULT		0x00000000
+#define DICD_EDIT		0x00000001
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+typedef struct _DICOLORSET {
+	DWORD		dwSize;
+	D3DCOLOR	cTextFore;
+	D3DCOLOR	cTextHighlight;
+	D3DCOLOR	cCalloutLine;
+	D3DCOLOR	cCalloutHighlight;
+	D3DCOLOR	cBorder;
+	D3DCOLOR	cControlFill;
+	D3DCOLOR	cHighlightFill;
+	D3DCOLOR	cAreaFill;
+} DICOLORSET, *LPDICOLORSET;
+typedef const DICOLORSET *LPCDICOLORSET;
+
+typedef struct _DICONFIGUREDEVICESPARAMSA {
+	DWORD			dwSize;
+	DWORD			dwcUsers;
+	LPSTR			lptszUserNames;
+	DWORD			dwcFormats;
+	LPDIACTIONFORMATA	lprgFormats;
+	HWND			hwnd;
+	DICOLORSET		dics;
+	LPUNKNOWN		lpUnkDDSTarget;
+} DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA;
+typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA;
+
+typedef struct _DICONFIGUREDEVICESPARAMSW {
+	DWORD			dwSize;
+	DWORD			dwcUsers;
+	LPWSTR			lptszUserNames;
+	DWORD			dwcFormats;
+	LPDIACTIONFORMATW	lprgFormats;
+	HWND			hwnd;
+	DICOLORSET		dics;
+	LPUNKNOWN		lpUnkDDSTarget;
+} DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW;
+typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW;
+
+DECL_WINELIB_TYPE_AW(DICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(LPDICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(LPCDICONFIGUREDEVICESPARAMS)
+
+#define DIDIFT_CONFIGURATION	0x00000001
+#define DIDIFT_OVERLAY		0x00000002
+
+#define DIDAL_CENTERED		0x00000000
+#define DIDAL_LEFTALIGNED	0x00000001
+#define DIDAL_RIGHTALIGNED	0x00000002
+#define DIDAL_MIDDLE		0x00000000
+#define DIDAL_TOPALIGNED	0x00000004
+#define DIDAL_BOTTOMALIGNED	0x00000008
+
+typedef struct _DIDEVICEIMAGEINFOA {
+	CHAR	tszImagePath[MAX_PATH];
+	DWORD	dwFlags;
+	DWORD	dwViewID;
+	RECT	rcOverlay;
+	DWORD	dwObjID;
+	DWORD	dwcValidPts;
+	POINT	rgptCalloutLine[5];
+	RECT	rcCalloutRect;
+	DWORD	dwTextAlign;
+} DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA;
+typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA;
+
+typedef struct _DIDEVICEIMAGEINFOW {
+	WCHAR	tszImagePath[MAX_PATH];
+	DWORD	dwFlags;
+	DWORD	dwViewID;
+	RECT	rcOverlay;
+	DWORD	dwObjID;
+	DWORD	dwcValidPts;
+	POINT	rgptCalloutLine[5];
+	RECT	rcCalloutRect;
+	DWORD	dwTextAlign;
+} DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW;
+typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFO)
+
+typedef struct _DIDEVICEIMAGEINFOHEADERA {
+	DWORD	dwSize;
+	DWORD	dwSizeImageInfo;
+	DWORD	dwcViews;
+	DWORD	dwcButtons;
+	DWORD	dwcAxes;
+	DWORD	dwcPOVs;
+	DWORD	dwBufferSize;
+	DWORD	dwBufferUsed;
+	LPDIDEVICEIMAGEINFOA	lprgImageInfoArray;
+} DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA;
+typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA;
+
+typedef struct _DIDEVICEIMAGEINFOHEADERW {
+	DWORD	dwSize;
+	DWORD	dwSizeImageInfo;
+	DWORD	dwcViews;
+	DWORD	dwcButtons;
+	DWORD	dwcAxes;
+	DWORD	dwcPOVs;
+	DWORD	dwBufferSize;
+	DWORD	dwBufferUsed;
+	LPDIDEVICEIMAGEINFOW	lprgImageInfoArray;
+} DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW;
+typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFOHEADER)
+
+
+/*****************************************************************************
+ * IDirectInputEffect interface
+ */
+#define INTERFACE IDirectInputEffect
+DECLARE_INTERFACE_(IDirectInputEffect,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputEffect methods ***/
+    STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID) PURE;
+    STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;
+    STDMETHOD(GetParameters)(THIS_ LPDIEFFECT, DWORD) PURE;
+    STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT, DWORD) PURE;
+    STDMETHOD(Start)(THIS_ DWORD, DWORD) PURE;
+    STDMETHOD(Stop)(THIS) PURE;
+    STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;
+    STDMETHOD(Download)(THIS) PURE;
+    STDMETHOD(Unload)(THIS) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputEffect_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInputEffect_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInputEffect methods ***/
+#define IDirectInputEffect_Initialize(p,a,b,c)    (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectInputEffect_GetEffectGuid(p,a)     (p)->lpVtbl->GetEffectGuid(p,a)
+#define IDirectInputEffect_GetParameters(p,a,b)   (p)->lpVtbl->GetParameters(p,a,b)
+#define IDirectInputEffect_SetParameters(p,a,b)   (p)->lpVtbl->SetParameters(p,a,b)
+#define IDirectInputEffect_Start(p,a,b)           (p)->lpVtbl->Start(p,a,b)
+#define IDirectInputEffect_Stop(p)                (p)->lpVtbl->Stop(p)
+#define IDirectInputEffect_GetEffectStatus(p,a)   (p)->lpVtbl->GetEffectStatus(p,a)
+#define IDirectInputEffect_Download(p)            (p)->lpVtbl->Download(p)
+#define IDirectInputEffect_Unload(p)              (p)->lpVtbl->Unload(p)
+#define IDirectInputEffect_Escape(p,a)            (p)->lpVtbl->Escape(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputEffect_AddRef(p)             (p)->AddRef()
+#define IDirectInputEffect_Release(p)            (p)->Release()
+/*** IDirectInputEffect methods ***/
+#define IDirectInputEffect_Initialize(p,a,b,c)    (p)->Initialize(a,b,c)
+#define IDirectInputEffect_GetEffectGuid(p,a)     (p)->GetEffectGuid(a)
+#define IDirectInputEffect_GetParameters(p,a,b)   (p)->GetParameters(a,b)
+#define IDirectInputEffect_SetParameters(p,a,b)   (p)->SetParameters(a,b)
+#define IDirectInputEffect_Start(p,a,b)           (p)->Start(a,b)
+#define IDirectInputEffect_Stop(p)                (p)->Stop()
+#define IDirectInputEffect_GetEffectStatus(p,a)   (p)->GetEffectStatus(a)
+#define IDirectInputEffect_Download(p)            (p)->Download()
+#define IDirectInputEffect_Unload(p)              (p)->Unload()
+#define IDirectInputEffect_Escape(p,a)            (p)->Escape(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInputDeviceA interface
+ */
+#define INTERFACE IDirectInputDeviceA
+DECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceA methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDeviceW interface
+ */
+#define INTERFACE IDirectInputDeviceW
+DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceW methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice_Acquire(p)                 (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice_AddRef(p)             (p)->AddRef()
+#define IDirectInputDevice_Release(p)            (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice_GetCapabilities(p,a)       (p)->GetCapabilities(a)
+#define IDirectInputDevice_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice_GetProperty(p,a,b)         (p)->GetProperty(a,b)
+#define IDirectInputDevice_SetProperty(p,a,b)         (p)->SetProperty(a,b)
+#define IDirectInputDevice_Acquire(p)                 (p)->Acquire()
+#define IDirectInputDevice_Unacquire(p)               (p)->Unacquire()
+#define IDirectInputDevice_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
+#define IDirectInputDevice_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice_SetDataFormat(p,a)         (p)->SetDataFormat(a)
+#define IDirectInputDevice_SetEventNotification(p,a)  (p)->SetEventNotification(a)
+#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
+#define IDirectInputDevice_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
+#define IDirectInputDevice_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInputDevice2A interface
+ */
+#define INTERFACE IDirectInputDevice2A
+DECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceA methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+    /*** IDirectInputDevice2A methods ***/
+    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
+    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+    STDMETHOD(Poll)(THIS) PURE;
+    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDevice2W interface
+ */
+#define INTERFACE IDirectInputDevice2W
+DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceW methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+    /*** IDirectInputDevice2W methods ***/
+    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
+    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+    STDMETHOD(Poll)(THIS) PURE;
+    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice2_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice2_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice2_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice2_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice2_Acquire(p)                 (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice2_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice2_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice2_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice2_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice2_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice2_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice2_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice2_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice2_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)
+#define IDirectInputDevice2_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)
+#define IDirectInputDevice2_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)
+#define IDirectInputDevice2_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)
+#define IDirectInputDevice2_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)
+#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
+#define IDirectInputDevice2_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)
+#define IDirectInputDevice2_Poll(p)                           (p)->lpVtbl->Poll(p)
+#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice2_AddRef(p)             (p)->AddRef()
+#define IDirectInputDevice2_Release(p)            (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice2_GetCapabilities(p,a)       (p)->GetCapabilities(a)
+#define IDirectInputDevice2_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice2_GetProperty(p,a,b)         (p)->GetProperty(a,b)
+#define IDirectInputDevice2_SetProperty(p,a,b)         (p)->SetProperty(a,b)
+#define IDirectInputDevice2_Acquire(p)                 (p)->Acquire()
+#define IDirectInputDevice2_Unacquire(p)               (p)->Unacquire()
+#define IDirectInputDevice2_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
+#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice2_SetDataFormat(p,a)         (p)->SetDataFormat(a)
+#define IDirectInputDevice2_SetEventNotification(p,a)  (p)->SetEventNotification(a)
+#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice2_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice2_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
+#define IDirectInputDevice2_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
+#define IDirectInputDevice2_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice2_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)
+#define IDirectInputDevice2_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)
+#define IDirectInputDevice2_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)
+#define IDirectInputDevice2_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)
+#define IDirectInputDevice2_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)
+#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
+#define IDirectInputDevice2_Escape(p,a)                       (p)->Escape(a)
+#define IDirectInputDevice2_Poll(p)                           (p)->Poll()
+#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirectInputDevice7A interface
+ */
+#define INTERFACE IDirectInputDevice7A
+DECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceA methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+    /*** IDirectInputDevice2A methods ***/
+    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
+    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+    STDMETHOD(Poll)(THIS) PURE;
+    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+    /*** IDirectInputDevice7A methods ***/
+    STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+    STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDevice7W interface
+ */
+#define INTERFACE IDirectInputDevice7W
+DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceW methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+    /*** IDirectInputDevice2W methods ***/
+    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
+    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+    STDMETHOD(Poll)(THIS) PURE;
+    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+    /*** IDirectInputDevice7W methods ***/
+    STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+    STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice7_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice7_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice7_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice7_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice7_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice7_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice7_Acquire(p)                 (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice7_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice7_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice7_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice7_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice7_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice7_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice7_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice7_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice7_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)
+#define IDirectInputDevice7_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)
+#define IDirectInputDevice7_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)
+#define IDirectInputDevice7_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)
+#define IDirectInputDevice7_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)
+#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
+#define IDirectInputDevice7_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)
+#define IDirectInputDevice7_Poll(p)                           (p)->lpVtbl->Poll(p)
+#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
+#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice7_AddRef(p)             (p)->AddRef()
+#define IDirectInputDevice7_Release(p)            (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice7_GetCapabilities(p,a)       (p)->GetCapabilities(a)
+#define IDirectInputDevice7_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice7_GetProperty(p,a,b)         (p)->GetProperty(a,b)
+#define IDirectInputDevice7_SetProperty(p,a,b)         (p)->SetProperty(a,b)
+#define IDirectInputDevice7_Acquire(p)                 (p)->Acquire()
+#define IDirectInputDevice7_Unacquire(p)               (p)->Unacquire()
+#define IDirectInputDevice7_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
+#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice7_SetDataFormat(p,a)         (p)->SetDataFormat(a)
+#define IDirectInputDevice7_SetEventNotification(p,a)  (p)->SetEventNotification(a)
+#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice7_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice7_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
+#define IDirectInputDevice7_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
+#define IDirectInputDevice7_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice7_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)
+#define IDirectInputDevice7_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)
+#define IDirectInputDevice7_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)
+#define IDirectInputDevice7_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)
+#define IDirectInputDevice7_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)
+#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
+#define IDirectInputDevice7_Escape(p,a)                       (p)->Escape(a)
+#define IDirectInputDevice7_Poll(p)                           (p)->Poll()
+#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
+#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInputDevice8A interface
+ */
+#define INTERFACE IDirectInputDevice8A
+DECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceA methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+    /*** IDirectInputDevice2A methods ***/
+    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
+    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+    STDMETHOD(Poll)(THIS) PURE;
+    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+    /*** IDirectInputDevice7A methods ***/
+    STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+    STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+    /*** IDirectInputDevice8A methods ***/
+    STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;
+    STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;
+    STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDevice8W interface
+ */
+#define INTERFACE IDirectInputDevice8W
+DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputDeviceW methods ***/
+    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+    /*** IDirectInputDevice2W methods ***/
+    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
+    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+    STDMETHOD(Poll)(THIS) PURE;
+    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+    /*** IDirectInputDevice7W methods ***/
+    STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+    STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+    /*** IDirectInputDevice8W methods ***/
+    STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;
+    STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;
+    STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice8_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice8_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice8_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice8_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice8_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice8_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice8_Acquire(p)                 (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice8_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice8_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice8_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice8_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice8_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice8_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice8_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice8_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice8_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)
+#define IDirectInputDevice8_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)
+#define IDirectInputDevice8_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)
+#define IDirectInputDevice8_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)
+#define IDirectInputDevice8_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)
+#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
+#define IDirectInputDevice8_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)
+#define IDirectInputDevice8_Poll(p)                           (p)->lpVtbl->Poll(p)
+#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
+#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
+/*** IDirectInputDevice8 methods ***/
+#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c)
+#define IDirectInputDevice8_SetActionMap(p,a,b,c)   (p)->lpVtbl->SetActionMap(p,a,b,c)
+#define IDirectInputDevice8_GetImageInfo(p,a)       (p)->lpVtbl->GetImageInfo(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice8_AddRef(p)             (p)->AddRef()
+#define IDirectInputDevice8_Release(p)            (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice8_GetCapabilities(p,a)       (p)->GetCapabilities(a)
+#define IDirectInputDevice8_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice8_GetProperty(p,a,b)         (p)->GetProperty(a,b)
+#define IDirectInputDevice8_SetProperty(p,a,b)         (p)->SetProperty(a,b)
+#define IDirectInputDevice8_Acquire(p)                 (p)->Acquire()
+#define IDirectInputDevice8_Unacquire(p)               (p)->Unacquire()
+#define IDirectInputDevice8_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)
+#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice8_SetDataFormat(p,a)         (p)->SetDataFormat(a)
+#define IDirectInputDevice8_SetEventNotification(p,a)  (p)->SetEventNotification(a)
+#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice8_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice8_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)
+#define IDirectInputDevice8_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)
+#define IDirectInputDevice8_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice8_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)
+#define IDirectInputDevice8_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)
+#define IDirectInputDevice8_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)
+#define IDirectInputDevice8_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)
+#define IDirectInputDevice8_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)
+#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
+#define IDirectInputDevice8_Escape(p,a)                       (p)->Escape(a)
+#define IDirectInputDevice8_Poll(p)                           (p)->Poll()
+#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
+#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
+/*** IDirectInputDevice8 methods ***/
+#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c)
+#define IDirectInputDevice8_SetActionMap(p,a,b,c)   (p)->SetActionMap(a,b,c)
+#define IDirectInputDevice8_GetImageInfo(p,a)       (p)->GetImageInfo(a)
+#endif
+
+/* "Standard" Mouse report... */
+typedef struct DIMOUSESTATE {
+  LONG lX;
+  LONG lY;
+  LONG lZ;
+  BYTE rgbButtons[4];
+} DIMOUSESTATE;
+
+/* "Standard" Mouse report for DInput 7... */
+typedef struct DIMOUSESTATE2 {
+  LONG lX;
+  LONG lY;
+  LONG lZ;
+  BYTE rgbButtons[8];
+} DIMOUSESTATE2;
+
+#define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)
+#define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)
+#define DIMOFS_Z        FIELD_OFFSET(DIMOUSESTATE, lZ)
+#define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)
+#define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
+#define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
+#define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
+#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
+#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
+#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
+#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
+
+/* New DirectInput8 mouse definitions */
+
+#define DIMOUSE_XAXISAB            (0x82000200 | DIMOFS_X)
+#define DIMOUSE_YAXISAB            (0x82000200 | DIMOFS_Y)
+#define DIMOUSE_XAXIS              (0x82000300 | DIMOFS_X)
+#define DIMOUSE_YAXIS              (0x82000300 | DIMOFS_Y)
+#define DIMOUSE_WHEEL              (0x82000300 | DIMOFS_Z)
+#define DIMOUSE_BUTTON0            (0x82000400 | DIMOFS_BUTTON0)
+#define DIMOUSE_BUTTON1            (0x82000400 | DIMOFS_BUTTON1)
+#define DIMOUSE_BUTTON2            (0x82000400 | DIMOFS_BUTTON2)
+#define DIMOUSE_BUTTON3            (0x82000400 | DIMOFS_BUTTON3)
+#define DIMOUSE_BUTTON4            (0x82000400 | DIMOFS_BUTTON4)
+#define DIMOUSE_BUTTON5            (0x82000400 | DIMOFS_BUTTON5)
+#define DIMOUSE_BUTTON6            (0x82000400 | DIMOFS_BUTTON6)
+#define DIMOUSE_BUTTON7            (0x82000400 | DIMOFS_BUTTON7)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const DIDATAFORMAT c_dfDIMouse;
+extern const DIDATAFORMAT c_dfDIMouse2; /* DX 7 */
+extern const DIDATAFORMAT c_dfDIKeyboard;
+extern const DIDATAFORMAT c_dfDIJoystick;
+extern const DIDATAFORMAT c_dfDIJoystick2;
+#ifdef __cplusplus
+};
+#endif
+
+#define DIAXIS_ANY_X_1             0xFF00C201
+#define DIAXIS_ANY_X_2             0xFF00C202
+#define DIAXIS_ANY_Y_1             0xFF014201
+#define DIAXIS_ANY_Y_2             0xFF014202
+#define DIAXIS_ANY_Z_1             0xFF01C201
+#define DIAXIS_ANY_Z_2             0xFF01C202
+#define DIAXIS_ANY_R_1             0xFF024201
+#define DIAXIS_ANY_R_2             0xFF024202
+#define DIAXIS_ANY_U_1             0xFF02C201
+#define DIAXIS_ANY_U_2             0xFF02C202
+#define DIAXIS_ANY_V_1             0xFF034201
+#define DIAXIS_ANY_V_2             0xFF034202
+#define DIAXIS_ANY_A_1             0xFF03C201
+#define DIAXIS_ANY_A_2             0xFF03C202
+#define DIAXIS_ANY_B_1             0xFF044201
+#define DIAXIS_ANY_B_2             0xFF044202
+#define DIAXIS_ANY_C_1             0xFF04C201
+#define DIAXIS_ANY_C_2             0xFF04C202
+#define DIAXIS_ANY_S_1             0xFF054201
+#define DIAXIS_ANY_S_2             0xFF054202
+#define DIAXIS_ANY_1               0xFF004201
+#define DIAXIS_ANY_2               0xFF004202
+#define DIAXIS_ANY_3               0xFF004203
+#define DIAXIS_ANY_4               0xFF004204
+#define DIPOV_ANY_1                0xFF004601
+#define DIPOV_ANY_2                0xFF004602
+#define DIPOV_ANY_3                0xFF004603
+#define DIPOV_ANY_4                0xFF004604
+#define DIBUTTON_ANY(instance)     (0xFF004400 | (instance))
+
+
+/*****************************************************************************
+ * IDirectInputA interface
+ */
+#define INTERFACE IDirectInputA
+DECLARE_INTERFACE_(IDirectInputA,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputA methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputW interface
+ */
+#define INTERFACE IDirectInputW
+DECLARE_INTERFACE_(IDirectInputW,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputW methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInput_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInput methods ***/
+#define IDirectInput_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput_AddRef(p)             (p)->AddRef()
+#define IDirectInput_Release(p)            (p)->Release()
+/*** IDirectInput methods ***/
+#define IDirectInput_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)
+#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)
+#define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput_Initialize(p,a,b)      (p)->Initialize(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectInput2A interface
+ */
+#define INTERFACE IDirectInput2A
+DECLARE_INTERFACE_(IDirectInput2A,IDirectInputA)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputA methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    /*** IDirectInput2A methods ***/
+    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInput2W interface
+ */
+#define INTERFACE IDirectInput2W
+DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputW methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    /*** IDirectInput2W methods ***/
+    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInput2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInput methods ***/
+#define IDirectInput2_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput2_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput2_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput2_FindDevice(p,a,b,c)    (p)->lpVtbl->FindDevice(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput2_AddRef(p)             (p)->AddRef()
+#define IDirectInput2_Release(p)            (p)->Release()
+/*** IDirectInput methods ***/
+#define IDirectInput2_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)
+#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput2_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)
+#define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput2_Initialize(p,a,b)      (p)->Initialize(a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput2_FindDevice(p,a,b,c)    (p)->FindDevice(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectInput7A interface
+ */
+#define INTERFACE IDirectInput7A
+DECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputA methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    /*** IDirectInput2A methods ***/
+    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
+    /*** IDirectInput7A methods ***/
+    STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInput7W interface
+ */
+#define INTERFACE IDirectInput7W
+DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputW methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    /*** IDirectInput2W methods ***/
+    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
+    /*** IDirectInput7W methods ***/
+    STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput7_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInput7_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInput methods ***/
+#define IDirectInput7_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput7_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput7_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput7_FindDevice(p,a,b,c)    (p)->lpVtbl->FindDevice(p,a,b,c)
+/*** IDirectInput7 methods ***/
+#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput7_AddRef(p)             (p)->AddRef()
+#define IDirectInput7_Release(p)            (p)->Release()
+/*** IDirectInput methods ***/
+#define IDirectInput7_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)
+#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput7_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)
+#define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput7_Initialize(p,a,b)      (p)->Initialize(a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput7_FindDevice(p,a,b,c)    (p)->FindDevice(a,b,c)
+/*** IDirectInput7 methods ***/
+#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInput8A interface
+ */
+#define INTERFACE IDirectInput8A
+DECLARE_INTERFACE_(IDirectInput8A,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInput8A methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8A *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
+    STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInput8W interface
+ */
+#define INTERFACE IDirectInput8W
+DECLARE_INTERFACE_(IDirectInput8W,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInput8W methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8W *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
+    STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR ptszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput8_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectInput8_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectInput8 methods ***/
+#define IDirectInput8_CreateDevice(p,a,b,c)       (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput8_EnumDevices(p,a,b,c,d)      (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput8_GetDeviceStatus(p,a)        (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput8_RunControlPanel(p,a,b)      (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput8_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectInput8_FindDevice(p,a,b,c)         (p)->lpVtbl->FindDevice(p,a,b,c)
+#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e)
+#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput8_AddRef(p)             (p)->AddRef()
+#define IDirectInput8_Release(p)            (p)->Release()
+/*** IDirectInput8 methods ***/
+#define IDirectInput8_CreateDevice(p,a,b,c)       (p)->CreateDevice(a,b,c)
+#define IDirectInput8_EnumDevices(p,a,b,c,d)      (p)->EnumDevices(a,b,c,d)
+#define IDirectInput8_GetDeviceStatus(p,a)        (p)->GetDeviceStatus(a)
+#define IDirectInput8_RunControlPanel(p,a,b)      (p)->RunControlPanel(a,b)
+#define IDirectInput8_Initialize(p,a,b)           (p)->Initialize(a,b)
+#define IDirectInput8_FindDevice(p,a,b,c)         (p)->FindDevice(a,b,c)
+#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e)
+#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d)
+#endif
+
+
+/* Export functions */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI DirectInput8Create(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
+
+HRESULT WINAPI DirectInputCreateA(HINSTANCE,DWORD,LPDIRECTINPUTA *,LPUNKNOWN);
+HRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN);
+#define DirectInputCreate WINELIB_NAME_AW(DirectInputCreate)
+
+HRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* __DINPUT_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h
new file mode 100644
index 0000000..99090de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DINPUTD_INCLUDED__
+#define __DINPUTD_INCLUDED__
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef DIRECTINPUT_VERSION
+#define DIRECTINPUT_VERSION 0x0800
+#endif
+
+DEFINE_GUID(IID_IDirectInputJoyConfig8, 0xEB0D7DFA,0x1990,0x4F27,0xB4,0xD6,0xED,0xF2,0xEE,0xC4,0xA4,0x4C);
+
+typedef struct IDirectInputJoyConfig8 *LPDIRECTINPUTJOYCONFIG8;
+
+
+typedef BOOL (CALLBACK *LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID);
+
+#define MAX_JOYSTRING 256
+#ifndef MAX_JOYSTICKOEMVXDNAME
+#define MAX_JOYSTICKOEMVXDNAME 260
+#endif
+
+#define JOY_POV_NUMDIRS         4
+#define JOY_POVVAL_FORWARD      0
+#define JOY_POVVAL_BACKWARD     1
+#define JOY_POVVAL_LEFT         2
+#define JOY_POVVAL_RIGHT        3
+
+#define DIERR_NOMOREITEMS       MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS)
+
+typedef struct joypos_tag
+{
+    DWORD dwX;
+    DWORD dwY;
+    DWORD dwZ;
+    DWORD dwR;
+    DWORD dwU;
+    DWORD dwV;
+} JOYPOS, *LPJOYPOS;
+
+typedef struct joyrange_tag
+{
+    JOYPOS jpMin;
+    JOYPOS jpMax;
+    JOYPOS jpCenter;
+} JOYRANGE, *LPJOYRANGE;
+
+typedef struct joyreguservalues_tag
+{
+    DWORD dwTimeOut;
+    JOYRANGE jrvRanges;
+    JOYPOS jpDeadZone;
+} JOYREGUSERVALUES, *LPJOYREGUSERVALUES;
+
+typedef struct joyreghwsettings_tag
+{
+    DWORD dwFlags;
+    DWORD dwNumButtons;
+} JOYREGHWSETTINGS, *LPJOYHWSETTINGS;
+
+typedef struct joyreghwvalues_tag
+{
+    JOYRANGE jrvHardware;
+    DWORD dwPOVValues[JOY_POV_NUMDIRS];
+    DWORD dwCalFlags;
+} JOYREGHWVALUES, *LPJOYREGHWVALUES;
+
+typedef struct joyreghwconfig_tag
+{
+    JOYREGHWSETTINGS hws;
+    DWORD dwUsageSettings;
+    JOYREGHWVALUES hwv;
+    DWORD dwType;
+    DWORD dwReserved;
+} JOYREGHWCONFIG, *LPJOYREGHWCONFIG;
+
+typedef struct DIJOYTYPEINFO_DX5
+{
+    DWORD dwSize;
+    JOYREGHWSETTINGS hws;
+    CLSID clsidConfig;
+    WCHAR wszDisplayName[MAX_JOYSTRING];
+    WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
+} DIJOYTYPEINFO_DX5, *LPDIJOYTYPEINFO_DX5;
+typedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5;
+
+typedef struct DIJOYTYPEINFO_DX6
+{
+    DWORD dwSize;
+    JOYREGHWSETTINGS hws;
+    CLSID clsidConfig;
+    WCHAR wszDisplayName[MAX_JOYSTRING];
+    WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
+    WCHAR wszHardwareId[MAX_JOYSTRING];
+    DWORD dwFlags1;
+} DIJOYTYPEINFO_DX6, *LPDIJOYTYPEINFO_DX6;
+typedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6;
+
+typedef struct DIJOYTYPEINFO
+{
+    DWORD dwSize;
+    JOYREGHWSETTINGS hws;
+    CLSID clsidConfig;
+    WCHAR wszDisplayName[MAX_JOYSTRING];
+    WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
+    WCHAR wszHardwareId[MAX_JOYSTRING];
+    DWORD dwFlags1;
+    DWORD dwFlags2;
+    WCHAR wszMapFile[MAX_JOYSTRING];
+} DIJOYTYPEINFO, *LPDIJOYTYPEINFO;
+typedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO;
+#define DIJC_GUIDINSTANCE       0x00000001
+#define DIJC_REGHWCONFIGTYPE    0x00000002
+#define DIJC_GAIN               0x00000004
+#define DIJC_CALLOUT            0x00000008
+#define DIJC_WDMGAMEPORT        0x00000010
+
+typedef struct DIJOYCONFIG_DX5
+{
+    DWORD dwSize;
+    GUID guidInstance;
+    JOYREGHWCONFIG hwc;
+    DWORD dwGain;
+    WCHAR wszType[MAX_JOYSTRING];
+    WCHAR wszCallout[MAX_JOYSTRING];
+} DIJOYCONFIG_DX5, *LPDIJOYCONFIG_DX5;
+typedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5;
+
+typedef struct DIJOYCONFIG
+{
+    DWORD dwSize;
+    GUID guidInstance;
+    JOYREGHWCONFIG hwc;
+    DWORD dwGain;
+    WCHAR wszType[MAX_JOYSTRING];
+    WCHAR wszCallout[MAX_JOYSTRING];
+    GUID guidGameport;
+} DIJOYCONFIG, *LPDIJOYCONFIG;
+typedef const DIJOYCONFIG *LPCDIJOYCONFIG;
+
+typedef struct DIJOYUSERVALUES
+{
+    DWORD dwSize;
+    JOYREGUSERVALUES ruv;
+    WCHAR wszGlobalDriver[MAX_JOYSTRING];
+    WCHAR wszGameportEmulator[MAX_JOYSTRING];
+} DIJOYUSERVALUES, *LPDIJOYUSERVALUES;
+typedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES;
+
+
+/*****************************************************************************
+ * IDirectInputJoyConfig8 interface
+ */
+#define INTERFACE IDirectInputJoyConfig8
+DECLARE_INTERFACE_(IDirectInputJoyConfig8, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputJoyConfig8 methods ***/
+    STDMETHOD(Acquire)(THIS) PURE;
+    STDMETHOD(Unacquire)(THIS) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
+    STDMETHOD(SendNotify)(THIS) PURE;
+    STDMETHOD(EnumTypes)(THIS_ LPDIJOYTYPECALLBACK, LPVOID) PURE;
+    STDMETHOD(GetTypeInfo)(THIS_ LPCWSTR, LPDIJOYTYPEINFO, DWORD) PURE;
+    STDMETHOD(SetTypeInfo)(THIS_ LPCWSTR, LPCDIJOYTYPEINFO, DWORD, LPWSTR) PURE;
+    STDMETHOD(DeleteType)(THIS_ LPCWSTR) PURE;
+    STDMETHOD(GetConfig)(THIS_ UINT, LPDIJOYCONFIG, DWORD) PURE;
+    STDMETHOD(SetConfig)(THIS_ UINT, LPCDIJOYCONFIG, DWORD) PURE;
+    STDMETHOD(DeleteConfig)(THIS_ UINT) PURE;
+    STDMETHOD(GetUserValues)(THIS_ LPDIJOYUSERVALUES, DWORD) PURE;
+    STDMETHOD(SetUserValues)(THIS_ LPCDIJOYUSERVALUES, DWORD) PURE;
+    STDMETHOD(AddNewHardware)(THIS_ HWND, REFGUID) PURE;
+    STDMETHOD(OpenTypeKey)(THIS_ LPCWSTR, DWORD, PHKEY) PURE;
+    STDMETHOD(OpenAppStatusKey)(THIS_ PHKEY) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputJoyConfig8_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputJoyConfig8_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirectInputJoyConfig8_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirectInputJoyConfig8 methods ***/
+#define IDirectInputJoyConfig8_Acquire(p)                 (p)->lpVtbl->Acquire(p)
+#define IDirectInputJoyConfig8_Unacquire(p)               (p)->lpVtbl->Unacquire(p)
+#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputJoyConfig8_SendNotify(p)              (p)->lpVtbl->SendNotify(p)
+#define IDirectInputJoyConfig8_EnumTypes(p,a,b)           (p)->lpVtbl->EnumTypes(p,a,b)
+#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c)       (p)->lpVtbl->GetTypeInfo(p,a,b,c)
+#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d)     (p)->lpVtbl->SetTypeInfo(p,a,b,c,d)
+#define IDirectInputJoyConfig8_DeleteType(p,a)            (p)->lpVtbl->DeleteType(p,a)
+#define IDirectInputJoyConfig8_GetConfig(p,a,b,c)         (p)->lpVtbl->GetConfig(p,a,b,c)
+#define IDirectInputJoyConfig8_SetConfig(p,a,b,c)         (p)->lpVtbl->SetConfig(p,a,b,c)
+#define IDirectInputJoyConfig8_DeleteConfig(p,a)          (p)->lpVtbl->DeleteConfig(p,a)
+#define IDirectInputJoyConfig8_GetUserValues(p,a,b)       (p)->lpVtbl->GetUserValues(p,a,b)
+#define IDirectInputJoyConfig8_SetUserValues(p,a,b)       (p)->lpVtbl->SetUserValues(p,a,b)
+#define IDirectInputJoyConfig8_AddNewHardware(p,a,b)      (p)->lpVtbl->AddNewHardware(p,a,b)
+#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c)       (p)->lpVtbl->OpenTypeKey(p,a,b,c)
+#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a)      (p)->lpVtbl->OpenAppStatusKey(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputJoyConfig8_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
+#define IDirectInputJoyConfig8_AddRef(p)                  (p)->AddRef()
+#define IDirectInputJoyConfig8_Release(p)                 (p)->Release()
+/*** IDirectInputJoyConfig8 methods ***/
+#define IDirectInputJoyConfig8_Acquire(p)                 (p)->Acquire()
+#define IDirectInputJoyConfig8_Unacquire(p)               (p)->Unacquire()
+#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputJoyConfig8_SendNotify(p)              (p)->SendNotify()
+#define IDirectInputJoyConfig8_EnumTypes(p,a,b)           (p)->EnumTypes(a,b)
+#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c)       (p)->GetTypeInfo(a,b,c)
+#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d)     (p)->SetTypeInfo(a,b,c,d)
+#define IDirectInputJoyConfig8_DeleteType(p,a)            (p)->DeleteType(a)
+#define IDirectInputJoyConfig8_GetConfig(p,a,b,c)         (p)->GetConfig(a,b,c)
+#define IDirectInputJoyConfig8_SetConfig(p,a,b,c)         (p)->SetConfig(a,b,c)
+#define IDirectInputJoyConfig8_DeleteConfig(p,a)          (p)->DeleteConfig(a)
+#define IDirectInputJoyConfig8_GetUserValues(p,a,b)       (p)->GetUserValues(a,b)
+#define IDirectInputJoyConfig8_SetUserValues(p,a,b)       (p)->SetUserValues(a,b)
+#define IDirectInputJoyConfig8_AddNewHardware(p,a,b)      (p)->AddNewHardware(a,b)
+#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c)       (p)->OpenTypeKey(a,b,c)
+#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a)      (p)->OpenAppStatusKey(a)
+#endif
+
+#endif /* __DINPUTD_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h
new file mode 100644
index 0000000..372807f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h
@@ -0,0 +1,53 @@
+/*
+ * DISPDIB.dll
+ *
+ * Copyright 1998 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DISPDIB_H
+#define __WINE_DISPDIB_H
+
+/* error codes */
+#define DISPLAYDIB_NOERROR        0x0000
+#define DISPLAYDIB_NOTSUPPORTED   0x0001
+#define DISPLAYDIB_INVALIDDIB     0x0002
+#define DISPLAYDIB_INVALIDFORMAT  0x0003
+#define DISPLAYDIB_INVALIDTASK    0x0004
+
+/* flags */
+#define DISPLAYDIB_NOPALETTE      0x0010
+#define DISPLAYDIB_NOCENTER       0x0020
+#define DISPLAYDIB_NOWAIT         0x0040
+#define DISPLAYDIB_BEGIN          0x8000
+#define DISPLAYDIB_END            0x4000
+#define DISPLAYDIB_MODE           0x000F /* mask */
+#define DISPLAYDIB_MODE_DEFAULT   0x0000
+#define DISPLAYDIB_MODE_320x200x8 0x0001
+#define DISPLAYDIB_MODE_320x240x8 0x0005
+
+WORD WINAPI DisplayDib( LPBITMAPINFO lpbi, LPSTR lpBits, WORD wFlags );
+
+#endif /* __WINE_DISPDIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl
new file mode 100644
index 0000000..925e3a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2004 Kevin Koltzau
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "servprov.idl";
+#endif
+
+cpp_quote("DEFINE_GUID(SID_VariantConversion, 0x1f101481,0xbccd,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);")
+cpp_quote("DEFINE_GUID(SID_GetCaller, 0x4717cc40,0xbcb9,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);")
+
+cpp_quote("#define fdexNameCaseSensitive       0x00000001L")
+cpp_quote("#define fdexNameEnsure              0x00000002L")
+cpp_quote("#define fdexNameImplicit            0x00000004L")
+cpp_quote("#define fdexNameCaseInsensitive     0x00000008L")
+cpp_quote("#define fdexNameInternal            0x00000010L")
+cpp_quote("#define fdexNameNoDynamicProperties 0x00000020L")
+
+cpp_quote("#define fdexPropCanGet              0x00000001L")
+cpp_quote("#define fdexPropCannotGet           0x00000002L")
+cpp_quote("#define fdexPropCanPut              0x00000004L")
+cpp_quote("#define fdexPropCannotPut           0x00000008L")
+cpp_quote("#define fdexPropCanPutRef           0x00000010L")
+cpp_quote("#define fdexPropCannotPutRef        0x00000020L")
+cpp_quote("#define fdexPropNoSideEffects       0x00000040L")
+cpp_quote("#define fdexPropDynamicType         0x00000080L")
+cpp_quote("#define fdexPropCanCall             0x00000100L")
+cpp_quote("#define fdexPropCannotCall          0x00000200L")
+cpp_quote("#define fdexPropCanConstruct        0x00000400L")
+cpp_quote("#define fdexPropCannotConstruct     0x00000800L")
+cpp_quote("#define fdexPropCanSourceEvents     0x00001000L")
+cpp_quote("#define fdexPropCannotSourceEvents  0x00002000L")
+
+cpp_quote("#define fdexEnumDefault             0x00000001L")
+cpp_quote("#define fdexEnumAll                 0x00000002L")
+
+cpp_quote("#define grfdexPropCanAll \\")
+cpp_quote("       (fdexPropCanGet | fdexPropCanPut | fdexPropCanPutRef | \\")
+cpp_quote("        fdexPropCanCall | fdexPropCanConstruct | fdexPropCanSourceEvents)")
+cpp_quote("#define grfdexPropCannotAll \\")
+cpp_quote("       (fdexPropCannotGet | fdexPropCannotPut | fdexPropCannotPutRef | \\")
+cpp_quote("        fdexPropCannotCall | fdexPropCannotConstruct | fdexPropCannotSourceEvents)")
+cpp_quote("#define grfdexPropExtraAll \\")
+cpp_quote("       (fdexPropNoSideEffects | fdexPropDynamicType)")
+cpp_quote("#define grfdexPropAll \\")
+cpp_quote("       (grfdexPropCanAll | grfdexPropCannotAll | grfdexPropExtraAll)")
+
+cpp_quote("#define DISPATCH_CONSTRUCT 0x4000")
+
+cpp_quote("#define DISPID_THIS (-613)")
+cpp_quote("#define DISPID_STARTENUM DISPID_UNKNOWN")
+
+[
+object,
+uuid(A6EF9860-C720-11d0-9337-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IDispatchEx : IDispatch
+{
+    HRESULT GetDispID(
+            [in] BSTR bstrName,
+            [in] DWORD grfdex,
+            [out] DISPID *pid);
+
+    [local]
+    HRESULT InvokeEx(
+            [in, annotation("__in")] DISPID id,
+            [in, annotation("__in")] LCID lcid,
+            [in, annotation("__in")] WORD wFlags,
+            [in, annotation("__in")] DISPPARAMS *pdp,
+            [out, annotation("__out_opt")] VARIANT *pvarRes,
+            [out, annotation("__out_opt")] EXCEPINFO *pei,
+            [in, unique, annotation("__in_opt")] IServiceProvider *pspCaller);
+
+    [call_as(InvokeEx)]
+    HRESULT RemoteInvokeEx(
+            [in] DISPID id,
+            [in] LCID lcid,
+            [in] DWORD dwFlags,
+            [in] DISPPARAMS *pdp,
+            [out] VARIANT *pvarRes,
+            [out] EXCEPINFO *pei,
+            [in, unique] IServiceProvider *pspCaller,
+            [in] UINT cvarRefArg,
+            [in, size_is(cvarRefArg)] UINT *rgiRefArg,
+            [in, out, size_is(cvarRefArg)] VARIANT *rgvarRefArg);
+
+    HRESULT DeleteMemberByName(
+            [in] BSTR bstrName,
+            [in] DWORD grfdex);
+
+    HRESULT DeleteMemberByDispID(
+            [in] DISPID id);
+
+    HRESULT GetMemberProperties(
+            [in] DISPID id,
+            [in] DWORD grfdexFetch,
+            [out] DWORD *pgrfdex);
+
+    HRESULT GetMemberName(
+            [in] DISPID id,
+            [out] BSTR *pbstrName);
+
+    HRESULT GetNextDispID(
+            [in] DWORD grfdex,
+            [in] DISPID id,
+            [out] DISPID *pid);
+
+    HRESULT GetNameSpaceParent([out] IUnknown **ppunk);
+}
+
+[
+object,
+uuid(A6EF9861-C720-11d0-9337-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IDispError : IUnknown
+{
+    HRESULT QueryErrorInfo(
+            [in] GUID guidErrorType,
+            [out] IDispError **ppde);
+
+    HRESULT GetNext(
+            [out] IDispError **ppde);
+
+    HRESULT GetHresult(
+            [out] HRESULT *phr);
+
+    HRESULT GetSource(
+            [out] BSTR *pbstrSource);
+
+    HRESULT GetHelpInfo(
+            [out] BSTR *pbstrFileName,
+            [out] DWORD *pdwContext);
+
+    HRESULT GetDescription(
+            [out] BSTR *pbstrDescription);
+}
+
+[
+object,
+uuid(A6EF9862-C720-11d0-9337-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IVariantChangeType : IUnknown
+{
+    HRESULT ChangeType(
+            [in, out, unique] VARIANT *pvarDst,
+            [in, unique] VARIANT *pvarSrc,
+            [in] LCID lcid,
+            [in] VARTYPE vtNew);
+}
+
+
+[
+object,
+uuid(CA04B7E6-0D21-11d1-8CC5-00C04FC2B085),
+pointer_default(unique)
+]
+interface IObjectIdentity : IUnknown
+{
+    HRESULT IsEqualObject( 
+            [in] IUnknown *punk);
+}
+
+[
+    object,
+    uuid(c5598e60-b307-11d1-b27d-006008c3fbfb),
+    pointer_default(unique)
+]
+interface ICanHandleException : IUnknown
+{
+    HRESULT CanHandleException(
+            [in] EXCEPINFO *pExcepInfo,
+            [in] VARIANT *pvar);
+}
+
+[
+    object,
+    uuid(10e2414a-ec59-49d2-bc51-5add2c36febc),
+    pointer_default(unique)
+]
+interface IProvideRuntimeContext : IUnknown
+{
+    HRESULT GetCurrentSourceContext(
+            [out] DWORD_PTR *pdwContext,
+            [out] VARIANT_BOOL *pfExecutingGlobalCode);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h
new file mode 100644
index 0000000..b2e363c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h
@@ -0,0 +1,233 @@
+/*
+ * Common dialog's dialog control ID numbers
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DLGS_H
+#define __WINE_DLGS_H
+
+#define ctlFirst    0x0400
+#define ctlLast     0x04ff
+    /* Push buttons */
+#define psh1        0x0400
+#define psh2        0x0401
+#define psh3        0x0402
+#define psh4        0x0403
+#define psh5        0x0404
+#define psh6        0x0405
+#define psh7        0x0406
+#define psh8        0x0407
+#define psh9        0x0408
+#define psh10       0x0409
+#define psh11       0x040a
+#define psh12       0x040b
+#define psh13       0x040c
+#define psh14       0x040d
+#define psh15       0x040e
+#define pshHelp     psh15
+#define psh16       0x040f
+    /* Checkboxes */
+#define chx1        0x0410
+#define chx2        0x0411
+#define chx3        0x0412
+#define chx4        0x0413
+#define chx5        0x0414
+#define chx6        0x0415
+#define chx7        0x0416
+#define chx8        0x0417
+#define chx9        0x0418
+#define chx10       0x0419
+#define chx11       0x041a
+#define chx12       0x041b
+#define chx13       0x041c
+#define chx14       0x041d
+#define chx15       0x041e
+#define chx16       0x041f
+    /* Radio buttons */
+#define rad1        0x0420
+#define rad2        0x0421
+#define rad3        0x0422
+#define rad4        0x0423
+#define rad5        0x0424
+#define rad6        0x0425
+#define rad7        0x0426
+#define rad8        0x0427
+#define rad9        0x0428
+#define rad10       0x0429
+#define rad11       0x042a
+#define rad12       0x042b
+#define rad13       0x042c
+#define rad14       0x042d
+#define rad15       0x042e
+#define rad16       0x042f
+    /* Groups, frames, rectangles, and icons */
+#define grp1        0x0430
+#define grp2        0x0431
+#define grp3        0x0432
+#define grp4        0x0433
+#define frm1        0x0434
+#define frm2        0x0435
+#define frm3        0x0436
+#define frm4        0x0437
+#define rct1        0x0438
+#define rct2        0x0439
+#define rct3        0x043a
+#define rct4        0x043b
+#define ico1        0x043c
+#define ico2        0x043d
+#define ico3        0x043e
+#define ico4        0x043f
+    /* Static text */
+#define stc1        0x0440
+#define stc2        0x0441
+#define stc3        0x0442
+#define stc4        0x0443
+#define stc5        0x0444
+#define stc6        0x0445
+#define stc7        0x0446
+#define stc8        0x0447
+#define stc9        0x0448
+#define stc10       0x0449
+#define stc11       0x044a
+#define stc12       0x044b
+#define stc13       0x044c
+#define stc14       0x044d
+#define stc15       0x044e
+#define stc16       0x044f
+#define stc17       0x0450
+#define stc18       0x0451
+#define stc19       0x0452
+#define stc20       0x0453
+#define stc21       0x0454
+#define stc22       0x0455
+#define stc23       0x0456
+#define stc24       0x0457
+#define stc25       0x0458
+#define stc26       0x0459
+#define stc27       0x045a
+#define stc28       0x045b
+#define stc29       0x045c
+#define stc30       0x045d
+#define stc31       0x045e
+#define stc32       0x045f
+    /* Listboxes */
+#define lst1        0x0460
+#define lst2        0x0461
+#define lst3        0x0462
+#define lst4        0x0463
+#define lst5        0x0464
+#define lst6        0x0465
+#define lst7        0x0466
+#define lst8        0x0467
+#define lst9        0x0468
+#define lst10       0x0469
+#define lst11       0x046a
+#define lst12       0x046b
+#define lst13       0x046c
+#define lst14       0x046d
+#define lst15       0x046e
+#define lst16       0x046f
+    /* Combo boxes */
+#define cmb1        0x0470
+#define cmb2        0x0471
+#define cmb3        0x0472
+#define cmb4        0x0473
+#define cmb5        0x0474
+#define cmb6        0x0475
+#define cmb7        0x0476
+#define cmb8        0x0477
+#define cmb9        0x0478
+#define cmb10       0x0479
+#define cmb11       0x047a
+#define cmb12       0x047b
+#define cmb13       0x047c
+#define cmb14       0x047d
+#define cmb15       0x047e
+#define cmb16       0x047f
+    /* Edit controls */
+#define edt1        0x0480
+#define edt2        0x0481
+#define edt3        0x0482
+#define edt4        0x0483
+#define edt5        0x0484
+#define edt6        0x0485
+#define edt7        0x0486
+#define edt8        0x0487
+#define edt9        0x0488
+#define edt10       0x0489
+#define edt11       0x048a
+#define edt12       0x048b
+#define edt13       0x048c
+#define edt14       0x048d
+#define edt15       0x048e
+#define edt16       0x048f
+    /* Scroll bars */
+#define scr1        0x0490
+#define scr2        0x0491
+#define scr3        0x0492
+#define scr4        0x0493
+#define scr5        0x0494
+#define scr6        0x0495
+#define scr7        0x0496
+#define scr8        0x0497
+
+/*
+ *  Controls
+ */
+#define ctl1	    0x04A0
+
+/* These dialog resource ordinals really start at 0x0600, but the
+ * RC Compiler can't handle hex for resource IDs, hence the decimal.
+ */
+#define FILEOPENORD		1536
+#define MULTIFILEOPENORD	1537
+#define PRINTDLGORD		1538
+#define PRNSETUPDLGORD		1539
+#define FINDDLGORD		1540
+#define REPLACEDLGORD		1541
+#define FONTDLGORD		1542
+#define FORMATDLGORD31		1543
+#define FORMATDLGORD30		1544
+#define PAGESETUPDLGORD		1546
+#define NEWFILEOPENORD		1547
+#define PRINTDLGEXORD		1549
+#define PAGESETUPDLGORDMOTIF	1550
+#define COLORMGMTDLGORD		1551
+#define NEWFILEOPENV2ORD	1552
+#define NEWFILEOPENV3ORD	1553
+#define NEWFORMATDLGWITHLINK	1591
+#define IDC_MANAGE_LINK		1592
+
+typedef struct tagCRGB
+{
+    BYTE bRed;
+    BYTE bGreen;
+    BYTE bBlue;
+    BYTE bExtra;
+} CRGB;
+
+#endif  /* #ifdef __WINE_DLGS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h
new file mode 100644
index 0000000..cdad589
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h
@@ -0,0 +1,212 @@
+/* Defines and Structures for Instrument Collection Form RIFF DLS1
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program 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 program 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+ 
+#ifndef __WINE_INCLUDE_DLS1_H
+#define __WINE_INCLUDE_DLS1_H
+
+/*****************************************************************************
+ * FOURCCs
+ */
+#define FOURCC_DLS   mmioFOURCC('D','L','S',' ')
+#define FOURCC_DLID  mmioFOURCC('d','l','i','d')
+#define FOURCC_COLH  mmioFOURCC('c','o','l','h')
+#define FOURCC_WVPL  mmioFOURCC('w','v','p','l')
+#define FOURCC_PTBL  mmioFOURCC('p','t','b','l')
+#define FOURCC_PATH  mmioFOURCC('p','a','t','h')
+#define FOURCC_wave  mmioFOURCC('w','a','v','e')
+#define FOURCC_LINS  mmioFOURCC('l','i','n','s')
+#define FOURCC_INS   mmioFOURCC('i','n','s',' ')
+#define FOURCC_INSH  mmioFOURCC('i','n','s','h')
+#define FOURCC_LRGN  mmioFOURCC('l','r','g','n')
+#define FOURCC_RGN   mmioFOURCC('r','g','n',' ')
+#define FOURCC_RGNH  mmioFOURCC('r','g','n','h')
+#define FOURCC_LART  mmioFOURCC('l','a','r','t')
+#define FOURCC_ART1  mmioFOURCC('a','r','t','1')
+#define FOURCC_WLNK  mmioFOURCC('w','l','n','k')
+#define FOURCC_WSMP  mmioFOURCC('w','s','m','p')
+#define FOURCC_VERS  mmioFOURCC('v','e','r','s')
+
+/*****************************************************************************
+ * Flags
+ */
+
+#define CONN_DST_NONE             0x000
+#define CONN_DST_ATTENUATION      0x001
+#define CONN_DST_PITCH            0x003
+#define CONN_DST_PAN              0x004
+
+#define CONN_DST_LFO_FREQUENCY    0x104
+#define CONN_DST_LFO_STARTDELAY   0x105
+
+#define CONN_DST_EG1_ATTACKTIME   0x206
+#define CONN_DST_EG1_DECAYTIME    0x207
+#define CONN_DST_EG1_RELEASETIME  0x209
+#define CONN_DST_EG1_SUSTAINLEVEL 0x20A
+
+#define CONN_DST_EG2_ATTACKTIME   0x30A
+#define CONN_DST_EG2_DECAYTIME    0x30B
+#define CONN_DST_EG2_RELEASETIME  0x30D
+#define CONN_DST_EG2_SUSTAINLEVEL 0x30E
+
+#define CONN_SRC_NONE             0x000
+#define CONN_SRC_LFO              0x001
+#define CONN_SRC_KEYONVELOCITY    0x002
+#define CONN_SRC_KEYNUMBER        0x003
+#define CONN_SRC_EG1              0x004
+#define CONN_SRC_EG2              0x005
+#define CONN_SRC_PITCHWHEEL       0x006
+
+#define CONN_SRC_CC1              0x081
+#define CONN_SRC_CC7              0x087
+#define CONN_SRC_CC10             0x08A
+#define CONN_SRC_CC11             0x08B
+
+#define CONN_TRN_NONE             0x000
+#define CONN_TRN_CONCAVE          0x001
+
+#define F_INSTRUMENT_DRUMS 0x80000000
+
+#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x1
+
+#define F_WAVELINK_PHASE_MASTER 0x1
+
+#define F_WSMP_NO_TRUNCATION  0x1
+#define F_WSMP_NO_COMPRESSION 0x2
+
+#define POOL_CUE_NULL 0xFFFFFFFF
+
+#define WAVELINK_CHANNEL_LEFT  0x1
+#define WAVELINK_CHANNEL_RIGHT 0x2
+
+#define WLOOP_TYPE_FORWARD 0x0
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DLSID          DLSID,          *LPDLSID;
+typedef struct _DLSVERSION     DLSVERSION,     *LPDLSVERSION;
+typedef struct _CONNECTION     CONNECTION,     *LPCONNECTION;
+typedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST;
+typedef struct _RGNRANGE       RGNRANGE,       *LPRGNRANGE;
+typedef struct _MIDILOCALE     MIDILOCALE,     *LPMIDILOCALE;
+typedef struct _RGNHEADER      RGNHEADER,      *LPRGNHEADER;
+typedef struct _INSTHEADER     INSTHEADER,     *LPINSTHEADER;
+typedef struct _DLSHEADER      DLSHEADER,      *LPDLSHEADER;
+typedef struct _WAVELINK       WAVELINK,       *LPWAVELINK;
+typedef struct _POOLCUE        POOLCUE,        *LPPOOLCUE;
+typedef struct _POOLTABLE      POOLTABLE,      *LPPOOLTABLE;
+typedef struct _rwsmp          WSMPL,          *LPWSMPL;
+typedef struct _rloop          WLOOP,          *LPWLOOP;
+
+/* actual structures */
+struct _DLSID {
+	ULONG  ulData1;
+	USHORT usData2;
+	USHORT usData3;
+	BYTE   abData4[8];
+};
+
+struct _DLSVERSION {
+	DWORD dwVersionMS;
+	DWORD dwVersionLS;
+};
+
+struct _CONNECTION {
+	USHORT usSource;
+	USHORT usControl;
+	USHORT usDestination;
+	USHORT usTransform;
+	LONG   lScale;
+};
+
+struct _CONNECTIONLIST {
+	ULONG cbSize;
+	ULONG cConnections;
+};
+
+struct _RGNRANGE {
+	USHORT usLow;
+	USHORT usHigh;
+};
+
+struct _MIDILOCALE {
+	ULONG ulBank;
+	ULONG ulInstrument;
+};
+
+struct _RGNHEADER {
+	RGNRANGE RangeKey;
+	RGNRANGE RangeVelocity;
+	USHORT   fusOptions;
+	USHORT   usKeyGroup;
+};
+
+struct _INSTHEADER {
+	ULONG      cRegions;
+	MIDILOCALE Locale;
+};
+
+struct _DLSHEADER {
+	ULONG cInstruments;
+};
+
+struct _WAVELINK {
+	USHORT fusOptions;
+	USHORT usPhaseGroup;
+	ULONG  ulChannel;
+	ULONG  ulTableIndex;
+};
+
+struct _POOLCUE { 
+	ULONG ulOffset;
+};
+
+struct _POOLTABLE {
+	ULONG cbSize;
+	ULONG cCues;
+};
+
+struct _rwsmp {
+	ULONG  cbSize;
+	USHORT usUnityNote;
+	SHORT  sFineTune;
+	LONG   lAttenuation;
+	ULONG  fulOptions;
+	ULONG  cSampleLoops;
+};
+
+struct _rloop {
+	ULONG cbSize;
+	ULONG ulType;
+	ULONG ulStart;
+	ULONG ulLength;
+};
+
+#endif /* __WINE_INCLUDE_DLS1_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h
new file mode 100644
index 0000000..225771a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h
@@ -0,0 +1,116 @@
+/* Defines and Structures for Instrument Collection Form RIFF DLS2
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program 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 program 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_INCLUDE_DLS2_H
+#define __WINE_INCLUDE_DLS2_H
+
+/*****************************************************************************
+ * DLSIDs - property set
+ */ 
+DEFINE_GUID(DLSID_GMInHardware,       0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_GSInHardware,       0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_ManufacturersID,    0xb03e1181,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_ProductID,          0xb03e1182,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_SampleMemorySize,   0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_SupportsDLS1,       0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_SupportsDLS2,       0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(DLSID_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_XGInHardware,       0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+/*****************************************************************************
+ * FOURCCs
+ */ 
+#define FOURCC_RGN2  mmioFOURCC('r','g','n','2')
+#define FOURCC_LAR2  mmioFOURCC('l','a','r','2')
+#define FOURCC_ART2  mmioFOURCC('a','r','t','2')
+#define FOURCC_CDL   mmioFOURCC('c','d','l',' ')
+#define FOURCC_DLID  mmioFOURCC('d','l','i','d')
+
+/*****************************************************************************
+ * Flags
+ */
+#define CONN_DST_GAIN             0x001
+#define CONN_DST_KEYNUMBER        0x005
+
+#define CONN_DST_LEFT             0x010
+#define CONN_DST_RIGHT            0x011
+#define CONN_DST_CENTER           0x012
+#define CONN_DST_LEFTREAR         0x013
+#define CONN_DST_RIGHTREAR        0x014
+#define CONN_DST_LFE_CHANNEL      0x015
+#define CONN_DST_CHORUS           0x080
+#define CONN_DST_REVERB           0x081
+
+#define CONN_DST_VIB_FREQUENCY    0x114
+#define CONN_DST_VIB_STARTDELAY   0x115	
+
+#define CONN_DST_EG1_DELAYTIME    0x20B
+#define CONN_DST_EG1_HOLDTIME     0x20C
+#define CONN_DST_EG1_SHUTDOWNTIME 0x20D
+
+#define CONN_DST_EG2_DELAYTIME    0x30F
+#define CONN_DST_EG2_HOLDTIME     0x310
+
+#define CONN_DST_FILTER_CUTOFF    0x500
+#define CONN_DST_FILTER_Q         0x501
+
+#define CONN_SRC_POLYPRESSURE     0x007
+#define CONN_SRC_CHANNELPRESSURE  0x008
+#define CONN_SRC_VIBRATO          0x009
+#define CONN_SRC_MONOPRESSURE     0x00A
+
+#define CONN_SRC_CC91             0x0DB
+#define CONN_SRC_CC93             0x0DD
+
+#define CONN_TRN_CONVEX           0x002
+#define CONN_TRN_SWITCH           0x003
+
+#define DLS_CDL_AND            0x01
+#define DLS_CDL_OR             0x02
+#define DLS_CDL_XOR            0x03
+#define DLS_CDL_ADD            0x04
+#define DLS_CDL_SUBTRACT       0x05
+#define DLS_CDL_MULTIPLY       0x06
+#define DLS_CDL_DIVIDE         0x07
+#define DLS_CDL_LOGICAL_AND    0x08
+#define DLS_CDL_LOGICAL_OR     0x09
+#define DLS_CDL_LT             0x0A
+#define DLS_CDL_LE             0x0B
+#define DLS_CDL_GT             0x0C
+#define DLS_CDL_GE             0x0D
+#define DLS_CDL_EQ             0x0E
+#define DLS_CDL_NOT            0x0F
+#define DLS_CDL_CONST          0x10
+#define DLS_CDL_QUERY          0x11
+#define DLS_CDL_QUERYSUPPORTED 0x12
+
+#define F_WAVELINK_MULTICHANNEL 0x2
+
+#define WLOOP_TYPE_RELEASE 0x1
+
+#endif	/* __WINE_INCLUDE_DLS2_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h
new file mode 100644
index 0000000..5e69fd0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h
@@ -0,0 +1,219 @@
+/* DirectMusic DLS Download Definitions
+ *
+ *  Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program 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 program 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+ 
+#ifndef __WINE_DMUSIC_DLS_H
+#define __WINE_DMUSIC_DLS_H
+
+#include <dls1.h>
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef LONG GCENT;
+typedef LONG PCENT;
+typedef LONG PERCENT;
+typedef LONG TCENT;
+
+typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;
+
+/*****************************************************************************
+ * FOURCC definition
+ */
+#ifndef mmioFOURCC
+typedef DWORD FOURCC;
+#define mmioFOURCC(ch0,ch1,ch2,ch3) \
+	((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+	((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_DEFAULT_SIZE_OFFSETTABLE 0x1
+
+#define DMUS_DOWNLOADINFO_INSTRUMENT       0x1
+#define DMUS_DOWNLOADINFO_WAVE             0x2
+#define DMUS_DOWNLOADINFO_INSTRUMENT2      0x3
+#define DMUS_DOWNLOADINFO_WAVEARTICULATION 0x4
+#define DMUS_DOWNLOADINFO_STREAMINGWAVE    0x5
+#define DMUS_DOWNLOADINFO_ONESHOTWAVE      0x6
+
+#define DMUS_INSTRUMENT_GM_INSTRUMENT 0x1
+
+#define DMUS_MIN_DATA_SIZE 0x4       
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_DOWNLOADINFO   DMUS_DOWNLOADINFO,   *LPDMUS_DOWNLOADINFO;
+typedef struct _DMUS_OFFSETTABLE    DMUS_OFFSETTABLE,    *LPDMUS_OFFSETTABLE;
+typedef struct _DMUS_INSTRUMENT     DMUS_INSTRUMENT,     *LPDMUS_INSTRUMENT;
+typedef struct _DMUS_REGION         DMUS_REGION,         *LPDMUS_REGION;
+typedef struct _DMUS_LFOPARAMS      DMUS_LFOPARAMS,      *LPDMUS_LFOPARAMS;
+typedef struct _DMUS_VEGPARAMS      DMUS_VEGPARAMS,      *LPDMUS_VEGPARAMS;
+typedef struct _DMUS_PEGPARAMS      DMUS_PEGPARAMS,      *LPDMUS_PEGPARAMS;
+typedef struct _DMUS_MSCPARAMS      DMUS_MSCPARAMS,      *LPDMUS_MSCPARAMS;
+typedef struct _DMUS_ARTICPARAMS    DMUS_ARTICPARAMS,    *LPDMUS_ARTICPARAMS;
+typedef struct _DMUS_ARTICULATION   DMUS_ARTICULATION,   *LPDMUS_ARTICULATION;
+typedef struct _DMUS_ARTICULATION2  DMUS_ARTICULATION2,  *LPDMUS_ARTICULATION2;
+typedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK;
+typedef struct _DMUS_COPYRIGHT      DMUS_COPYRIGHT,      *LPDMUS_COPYRIGHT;
+typedef struct _DMUS_WAVEDATA       DMUS_WAVEDATA,       *LPDMUS_WAVEDATA;
+typedef struct _DMUS_WAVE           DMUS_WAVE,           *LPDMUS_WAVE;
+typedef struct _DMUS_NOTERANGE      DMUS_NOTERANGE,      *LPDMUS_NOTERANGE;
+typedef struct _DMUS_WAVEARTDL      DMUS_WAVEARTDL,      *LPDMUS_WAVEARTDL;
+typedef struct _DMUS_WAVEDL         DMUS_WAVEDL,         *LPDMUS_WAVEDL;
+
+/* actual structures */
+struct _DMUS_DOWNLOADINFO {
+	DWORD dwDLType;
+	DWORD dwDLId;
+	DWORD dwNumOffsetTableEntries;
+	DWORD cbSize;
+};
+
+struct _DMUS_OFFSETTABLE {
+	ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
+};
+
+struct _DMUS_INSTRUMENT {
+	ULONG ulPatch;
+	ULONG ulFirstRegionIdx;             
+	ULONG ulGlobalArtIdx;
+	ULONG ulFirstExtCkIdx;
+	ULONG ulCopyrightIdx;
+	ULONG ulFlags;                        
+};
+
+struct _DMUS_REGION {
+	RGNRANGE RangeKey;
+	RGNRANGE RangeVelocity;
+	USHORT   fusOptions;
+	USHORT   usKeyGroup;
+	ULONG    ulRegionArtIdx;
+	ULONG    ulNextRegionIdx;
+	ULONG    ulFirstExtCkIdx;
+	WAVELINK WaveLink;
+	WSMPL    WSMP;
+	WLOOP    WLOOP[1];
+};
+
+struct _DMUS_LFOPARAMS {
+	PCENT pcFrequency;
+	TCENT tcDelay;
+	GCENT gcVolumeScale;
+	PCENT pcPitchScale;
+	GCENT gcMWToVolume;
+	PCENT pcMWToPitch;
+};
+
+struct _DMUS_VEGPARAMS {
+	TCENT   tcAttack;
+	TCENT   tcDecay;
+	PERCENT ptSustain;
+	TCENT   tcRelease;
+	TCENT   tcVel2Attack;
+	TCENT   tcKey2Decay;
+};
+
+struct _DMUS_PEGPARAMS {
+	TCENT   tcAttack;
+	TCENT   tcDecay;
+	PERCENT ptSustain;
+	TCENT   tcRelease;
+	TCENT   tcVel2Attack;
+	TCENT   tcKey2Decay;
+	PCENT   pcRange;
+};
+
+struct _DMUS_MSCPARAMS {
+	PERCENT ptDefaultPan;
+};
+
+struct _DMUS_ARTICPARAMS {
+	DMUS_LFOPARAMS LFO;
+	DMUS_VEGPARAMS VolEG;
+	DMUS_PEGPARAMS PitchEG;
+	DMUS_MSCPARAMS Misc;
+};
+
+struct _DMUS_ARTICULATION {
+	ULONG ulArt1Idx;
+	ULONG ulFirstExtCkIdx;
+};
+
+struct _DMUS_ARTICULATION2 {
+	ULONG ulArtIdx;
+	ULONG ulFirstExtCkIdx;
+	ULONG ulNextArtIdx;
+};
+
+struct _DMUS_EXTENSIONCHUNK {
+	ULONG  cbSize;
+	ULONG  ulNextExtCkIdx;
+	FOURCC ExtCkID;                                      
+	BYTE   byExtCk[DMUS_MIN_DATA_SIZE];
+};
+
+struct _DMUS_COPYRIGHT {
+	ULONG cbSize;
+	BYTE  byCopyright[DMUS_MIN_DATA_SIZE];
+};
+
+struct _DMUS_WAVEDATA {
+	ULONG cbSize;
+	BYTE  byData[DMUS_MIN_DATA_SIZE]; 
+};
+
+struct _DMUS_WAVE {
+	ULONG        ulFirstExtCkIdx;
+	ULONG        ulCopyrightIdx;
+	ULONG        ulWaveDataIdx;
+	WAVEFORMATEX WaveformatEx;
+};
+
+struct _DMUS_NOTERANGE {
+	DWORD dwLowNote;
+	DWORD dwHighNote;
+};
+
+struct _DMUS_WAVEARTDL {
+	ULONG  ulDownloadIdIdx;
+	ULONG  ulBus;
+	ULONG  ulBuffers;
+	ULONG  ulMasterDLId;
+	USHORT usOptions;
+};
+
+struct _DMUS_WAVEDL {
+	ULONG cbWaveData;
+};
+
+#endif /* __WINE_DMUSIC_DLS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h
new file mode 100644
index 0000000..1f5f19f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h
@@ -0,0 +1,173 @@
+/* DirectMusic Error Codes
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program 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 program 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_ERROR_H
+#define __WINE_DMUSIC_ERROR_H
+
+/*****************************************************************************
+ * Error code handling
+ */
+#define FACILITY_DIRECTMUSIC 0x878
+#define DMUS_ERRBASE 0x1000
+
+#ifndef MAKE_HRESULT
+#define MAKE_HRESULT(sev,fac,code) \
+    ((HRESULT) (((ULONG)(sev)<<31) | ((ULONG)(fac)<<16) | ((ULONG)(code))) )
+#endif
+
+#define MAKE_DMHRESULTSUCCESS(code)  MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
+#define MAKE_DMHRESULTERROR(code)    MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
+
+/*****************************************************************************
+ * Error codes
+ */
+
+#define DMUS_S_PARTIALLOAD                    MAKE_DMHRESULTSUCCESS(0x091)
+#define DMUS_S_PARTIALDOWNLOAD                MAKE_DMHRESULTSUCCESS(0x092)
+#define DMUS_S_REQUEUE                        MAKE_DMHRESULTSUCCESS(0x200)
+#define DMUS_S_FREE                           MAKE_DMHRESULTSUCCESS(0x201)
+#define DMUS_S_END                            MAKE_DMHRESULTSUCCESS(0x202)
+#define DMUS_S_STRING_TRUNCATED               MAKE_DMHRESULTSUCCESS(0x210)
+#define DMUS_S_LAST_TOOL                      MAKE_DMHRESULTSUCCESS(0x211)
+#define DMUS_S_OVER_CHORD                     MAKE_DMHRESULTSUCCESS(0x212)
+#define DMUS_S_UP_OCTAVE                      MAKE_DMHRESULTSUCCESS(0x213)
+#define DMUS_S_DOWN_OCTAVE                    MAKE_DMHRESULTSUCCESS(0x214)
+#define DMUS_S_NOBUFFERCONTROL                MAKE_DMHRESULTSUCCESS(0x215)
+#define DMUS_S_GARBAGE_COLLECTED              MAKE_DMHRESULTSUCCESS(0x216)
+
+#define DMUS_E_DRIVER_FAILED                  MAKE_DMHRESULTERROR(0x0101)
+#define DMUS_E_PORTS_OPEN                     MAKE_DMHRESULTERROR(0x0102)
+#define DMUS_E_DEVICE_IN_USE                  MAKE_DMHRESULTERROR(0x0103)
+#define DMUS_E_INSUFFICIENTBUFFER             MAKE_DMHRESULTERROR(0x0104)
+#define DMUS_E_BUFFERNOTSET                   MAKE_DMHRESULTERROR(0x0105)
+#define DMUS_E_BUFFERNOTAVAILABLE             MAKE_DMHRESULTERROR(0x0106)
+#define DMUS_E_NOTADLSCOL                     MAKE_DMHRESULTERROR(0x0108)
+#define DMUS_E_INVALIDOFFSET                  MAKE_DMHRESULTERROR(0x0109)
+#define DMUS_E_ALREADY_LOADED                 MAKE_DMHRESULTERROR(0x0111)
+#define DMUS_E_INVALIDPOS                     MAKE_DMHRESULTERROR(0x0113)
+#define DMUS_E_INVALIDPATCH                   MAKE_DMHRESULTERROR(0x0114)
+#define DMUS_E_CANNOTSEEK                     MAKE_DMHRESULTERROR(0x0115)
+#define DMUS_E_CANNOTWRITE                    MAKE_DMHRESULTERROR(0x0116)
+#define DMUS_E_CHUNKNOTFOUND                  MAKE_DMHRESULTERROR(0x0117)
+#define DMUS_E_INVALID_DOWNLOADID             MAKE_DMHRESULTERROR(0x0119)
+#define DMUS_E_NOT_DOWNLOADED_TO_PORT         MAKE_DMHRESULTERROR(0x0120)
+#define DMUS_E_ALREADY_DOWNLOADED             MAKE_DMHRESULTERROR(0x0121)
+#define DMUS_E_UNKNOWN_PROPERTY               MAKE_DMHRESULTERROR(0x0122)
+#define DMUS_E_SET_UNSUPPORTED                MAKE_DMHRESULTERROR(0x0123)
+#define DMUS_E_GET_UNSUPPORTED                MAKE_DMHRESULTERROR(0x0124)
+#define DMUS_E_NOTMONO                        MAKE_DMHRESULTERROR(0x0125)
+#define DMUS_E_BADARTICULATION                MAKE_DMHRESULTERROR(0x0126)
+#define DMUS_E_BADINSTRUMENT                  MAKE_DMHRESULTERROR(0x0127)
+#define DMUS_E_BADWAVELINK                    MAKE_DMHRESULTERROR(0x0128)
+#define DMUS_E_NOARTICULATION                 MAKE_DMHRESULTERROR(0x0129)
+#define DMUS_E_NOTPCM                         MAKE_DMHRESULTERROR(0x012A)
+#define DMUS_E_BADWAVE                        MAKE_DMHRESULTERROR(0x012B)
+#define DMUS_E_BADOFFSETTABLE                 MAKE_DMHRESULTERROR(0x012C)
+#define DMUS_E_UNKNOWNDOWNLOAD                MAKE_DMHRESULTERROR(0x012D)
+#define DMUS_E_NOSYNTHSINK                    MAKE_DMHRESULTERROR(0x012E)
+#define DMUS_E_ALREADYOPEN                    MAKE_DMHRESULTERROR(0x012F)
+#define DMUS_E_ALREADYCLOSED                  MAKE_DMHRESULTERROR(0x0130)
+#define DMUS_E_SYNTHNOTCONFIGURED             MAKE_DMHRESULTERROR(0x0131)
+#define DMUS_E_SYNTHACTIVE                    MAKE_DMHRESULTERROR(0x0132)
+#define DMUS_E_CANNOTREAD                     MAKE_DMHRESULTERROR(0x0133)
+#define DMUS_E_DMUSIC_RELEASED                MAKE_DMHRESULTERROR(0x0134)
+#define DMUS_E_BUFFER_EMPTY                   MAKE_DMHRESULTERROR(0x0135)
+#define DMUS_E_BUFFER_FULL                    MAKE_DMHRESULTERROR(0x0136)
+#define DMUS_E_PORT_NOT_CAPTURE               MAKE_DMHRESULTERROR(0x0137)
+#define DMUS_E_PORT_NOT_RENDER                MAKE_DMHRESULTERROR(0x0138)
+#define DMUS_E_DSOUND_NOT_SET                 MAKE_DMHRESULTERROR(0x0139)
+#define DMUS_E_ALREADY_ACTIVATED              MAKE_DMHRESULTERROR(0x013A)
+#define DMUS_E_INVALIDBUFFER                  MAKE_DMHRESULTERROR(0x013B)
+#define DMUS_E_WAVEFORMATNOTSUPPORTED         MAKE_DMHRESULTERROR(0x013C)
+#define DMUS_E_SYNTHINACTIVE                  MAKE_DMHRESULTERROR(0x013D)
+#define DMUS_E_DSOUND_ALREADY_SET             MAKE_DMHRESULTERROR(0x013E)
+#define DMUS_E_INVALID_EVENT                  MAKE_DMHRESULTERROR(0x013F)
+#define DMUS_E_UNSUPPORTED_STREAM             MAKE_DMHRESULTERROR(0x0150)
+#define DMUS_E_ALREADY_INITED                 MAKE_DMHRESULTERROR(0x0151)
+#define DMUS_E_INVALID_BAND                   MAKE_DMHRESULTERROR(0x0152)
+#define DMUS_E_TRACK_HDR_NOT_FIRST_CK         MAKE_DMHRESULTERROR(0x0155)
+#define DMUS_E_TOOL_HDR_NOT_FIRST_CK          MAKE_DMHRESULTERROR(0x0156)
+#define DMUS_E_INVALID_TRACK_HDR              MAKE_DMHRESULTERROR(0x0157)
+#define DMUS_E_INVALID_TOOL_HDR               MAKE_DMHRESULTERROR(0x0158)
+#define DMUS_E_ALL_TOOLS_FAILED               MAKE_DMHRESULTERROR(0x0159)
+#define DMUS_E_ALL_TRACKS_FAILED              MAKE_DMHRESULTERROR(0x0160)
+#define DMUS_E_NOT_FOUND                      MAKE_DMHRESULTERROR(0x0161)
+#define DMUS_E_NOT_INIT                       MAKE_DMHRESULTERROR(0x0162)
+#define DMUS_E_TYPE_DISABLED                  MAKE_DMHRESULTERROR(0x0163)
+#define DMUS_E_TYPE_UNSUPPORTED               MAKE_DMHRESULTERROR(0x0164)
+#define DMUS_E_TIME_PAST                      MAKE_DMHRESULTERROR(0x0165)
+#define DMUS_E_TRACK_NOT_FOUND                MAKE_DMHRESULTERROR(0x0166)
+#define DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT     MAKE_DMHRESULTERROR(0x0167)
+#define DMUS_E_NO_MASTER_CLOCK                MAKE_DMHRESULTERROR(0x0170)
+#define DMUS_E_LOADER_NOCLASSID               MAKE_DMHRESULTERROR(0x0180)
+#define DMUS_E_LOADER_BADPATH                 MAKE_DMHRESULTERROR(0x0181)
+#define DMUS_E_LOADER_FAILEDOPEN              MAKE_DMHRESULTERROR(0x0182)
+#define DMUS_E_LOADER_FORMATNOTSUPPORTED      MAKE_DMHRESULTERROR(0x0183)
+#define DMUS_E_LOADER_FAILEDCREATE            MAKE_DMHRESULTERROR(0x0184)
+#define DMUS_E_LOADER_OBJECTNOTFOUND          MAKE_DMHRESULTERROR(0x0185)
+#define DMUS_E_LOADER_NOFILENAME              MAKE_DMHRESULTERROR(0x0186)
+#define DMUS_E_INVALIDFILE                    MAKE_DMHRESULTERROR(0x0200)
+#define DMUS_E_ALREADY_EXISTS                 MAKE_DMHRESULTERROR(0x0201)
+#define DMUS_E_OUT_OF_RANGE                   MAKE_DMHRESULTERROR(0x0202)
+#define DMUS_E_SEGMENT_INIT_FAILED            MAKE_DMHRESULTERROR(0x0203)
+#define DMUS_E_ALREADY_SENT                   MAKE_DMHRESULTERROR(0x0204)
+#define DMUS_E_CANNOT_FREE                    MAKE_DMHRESULTERROR(0x0205)
+#define DMUS_E_CANNOT_OPEN_PORT               MAKE_DMHRESULTERROR(0x0206)
+#define DMUS_E_CANNOT_CONVERT                 MAKE_DMHRESULTERROR(0x0207)
+#define DMUS_E_DESCEND_CHUNK_FAIL             MAKE_DMHRESULTERROR(0x0210)
+#define DMUS_E_NOT_LOADED                     MAKE_DMHRESULTERROR(0x0211)
+#define DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE   MAKE_DMHRESULTERROR(0x0213)
+#define DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE     MAKE_DMHRESULTERROR(0x0214)
+#define DMUS_E_SCRIPT_ERROR_IN_SCRIPT         MAKE_DMHRESULTERROR(0x0215)
+#define DMUS_E_SCRIPT_CANTLOAD_OLEAUT32       MAKE_DMHRESULTERROR(0x0216)
+#define DMUS_E_SCRIPT_LOADSCRIPT_ERROR        MAKE_DMHRESULTERROR(0x0217)
+#define DMUS_E_SCRIPT_INVALID_FILE            MAKE_DMHRESULTERROR(0x0218)
+#define DMUS_E_INVALID_SCRIPTTRACK            MAKE_DMHRESULTERROR(0x0219)
+#define DMUS_E_SCRIPT_VARIABLE_NOT_FOUND      MAKE_DMHRESULTERROR(0x021A)
+#define DMUS_E_SCRIPT_ROUTINE_NOT_FOUND       MAKE_DMHRESULTERROR(0x021B)
+#define DMUS_E_SCRIPT_CONTENT_READONLY        MAKE_DMHRESULTERROR(0x021C)
+#define DMUS_E_SCRIPT_NOT_A_REFERENCE         MAKE_DMHRESULTERROR(0x021D)
+#define DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED     MAKE_DMHRESULTERROR(0x021E)
+#define DMUS_E_INVALID_SEGMENTTRIGGERTRACK    MAKE_DMHRESULTERROR(0x0220)
+#define DMUS_E_INVALID_LYRICSTRACK            MAKE_DMHRESULTERROR(0x0221)
+#define DMUS_E_INVALID_PARAMCONTROLTRACK      MAKE_DMHRESULTERROR(0x0222)
+#define DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR      MAKE_DMHRESULTERROR(0x0223)
+#define DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR     MAKE_DMHRESULTERROR(0x0224)
+#define DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE MAKE_DMHRESULTERROR(0x0225)
+#define DMUS_E_AUDIOPATHS_NOT_VALID           MAKE_DMHRESULTERROR(0x0226)
+#define DMUS_E_AUDIOPATHS_IN_USE              MAKE_DMHRESULTERROR(0x0227)
+#define DMUS_E_NO_AUDIOPATH_CONFIG            MAKE_DMHRESULTERROR(0x0228)
+#define DMUS_E_AUDIOPATH_INACTIVE             MAKE_DMHRESULTERROR(0x0229)
+#define DMUS_E_AUDIOPATH_NOBUFFER             MAKE_DMHRESULTERROR(0x022A)
+#define DMUS_E_AUDIOPATH_NOPORT               MAKE_DMHRESULTERROR(0x022B)
+#define DMUS_E_NO_AUDIOPATH                   MAKE_DMHRESULTERROR(0x022C)
+#define DMUS_E_INVALIDCHUNK                   MAKE_DMHRESULTERROR(0x022D)
+#define DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER     MAKE_DMHRESULTERROR(0x022E)
+#define DMUS_E_INVALID_CONTAINER_OBJECT       MAKE_DMHRESULTERROR(0x022F)
+
+#endif /* __WINE_DMUSIC_ERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h
new file mode 100644
index 0000000..70b8aa5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h
@@ -0,0 +1,119 @@
+/*
+ * Definition of IKsControl
+ *
+ * Copyright (C) 2012 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _DMKSCTRL_
+#define _DMKSCTRL_
+
+#include <pshpack8.h>
+
+#include <objbase.h>
+
+#ifndef _KS_
+#define _KS_
+
+typedef struct {
+    union {
+        struct {
+            GUID    Set;
+            ULONG   Id;
+            ULONG   Flags;
+        } DUMMYSTRUCTNAME;
+        LONGLONG    Alignment;
+    } DUMMYUNIONNAME;
+} KSIDENTIFIER, *PKSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT;
+
+#define KSMETHOD_TYPE_NONE                  0x00000000
+#define KSMETHOD_TYPE_READ                  0x00000001
+#define KSMETHOD_TYPE_WRITE                 0x00000002
+#define KSMETHOD_TYPE_MODIFY                0x00000003
+#define KSMETHOD_TYPE_SOURCE                0x00000004
+
+#define KSMETHOD_TYPE_SEND                  0x00000001
+#define KSMETHOD_TYPE_SETSUPPORT            0x00000100
+#define KSMETHOD_TYPE_BASICSUPPORT          0x00000200
+
+#define KSPROPERTY_TYPE_GET                 0x00000001
+#define KSPROPERTY_TYPE_SET                 0x00000002
+#define KSPROPERTY_TYPE_SETSUPPORT          0x00000100
+#define KSPROPERTY_TYPE_BASICSUPPORT        0x00000200
+#define KSPROPERTY_TYPE_RELATIONS           0x00000400
+#define KSPROPERTY_TYPE_SERIALIZESET        0x00000800
+#define KSPROPERTY_TYPE_UNSERIALIZESET      0x00001000
+#define KSPROPERTY_TYPE_SERIALIZERAW        0x00002000
+#define KSPROPERTY_TYPE_UNSERIALIZERAW      0x00004000
+#define KSPROPERTY_TYPE_SERIALIZESIZE       0x00008000
+#define KSPROPERTY_TYPE_DEFAULTVALUES       0x00010000
+
+#define KSPROPERTY_TYPE_TOPOLOGY            0x10000000
+
+#define INTERFACE IKsControl
+DECLARE_INTERFACE_(IKsControl,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IKsControl methods ***/
+    STDMETHOD(KsProperty)(THIS_ PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,
+                          ULONG DataLength, ULONG* BytesReturned) PURE;
+    STDMETHOD(KsMethod)(THIS_ PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,
+                        ULONG DataLength, ULONG* BytesReturned) PURE;
+    STDMETHOD(KsEvent)(THIS_ PKSEVENT Event, ULONG EventLength, LPVOID EventData,
+                       ULONG DataLength, ULONG* BytesReturned) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IKsControl_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IKsControl_AddRef(p)               (p)->lpVtbl->AddRef(p)
+#define IKsControl_Release(p)              (p)->lpVtbl->Release(p)
+/*** IKsControl methods ***/
+#define IKsControl_KsProperty(p,a,b,c,d,e) (p)->lpVtbl->KsProperty(p,a,b,c,d,e)
+#define IKsControl_KsMethod(p,a,b,c,d,e)   (p)->lpVtbl->KsMethod(p,a,b,c,d,e)
+#define IKsControl_KsEvent(p,a,b,c,d,e)    (p)->lpVtbl->KsEvent(p,a,b,c,d,e)
+#endif
+
+#endif /* _KS_ */
+
+#include <poppack.h>
+
+
+DEFINE_GUID(IID_IKsControl, 0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96);
+
+#ifndef _KSMEDIA_
+
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_MIDI, 0x1d262760, 0xe957, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_DIRECTMUSIC, 0x1a82f8bc, 0x3f8b, 0x11d2, 0xb7, 0x74, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
+
+#endif
+
+#endif /* _DMKSCTRL_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h
new file mode 100644
index 0000000..5ab0c4e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DMO_H__
+#define __DMO_H__
+
+#include <mediaerr.h>
+
+#ifdef FIX_LOCK_NAME
+#define Lock DMOLock
+#endif
+#include <mediaobj.h>
+#ifdef FIX_LOCK_NAME
+#undef Lock
+#endif
+#include <dmoreg.h>
+#include <dmort.h>
+
+#endif  /* __DMO_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h
new file mode 100644
index 0000000..cf9f840
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DMOREG_H__
+#define __DMOREG_H__
+
+#include "mediaobj.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _DMO_PARTIAL_MEDIATYPE
+{
+   GUID type;
+   GUID subtype;
+} DMO_PARTIAL_MEDIATYPE, *PDMO_PARTIAL_MEDIATYPE;
+
+enum DMO_REGISTER_FLAGS
+{
+   DMO_REGISTERF_IS_KEYED = 1
+};
+
+enum DMO_ENUM_FLAGS
+{
+   DMO_ENUMF_INCLUDE_KEYED = 1
+};
+
+HRESULT WINAPI DMORegister(LPCWSTR,REFCLSID,REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,
+                           DWORD,const DMO_PARTIAL_MEDIATYPE*);
+HRESULT WINAPI DMOUnregister(REFCLSID,REFGUID);
+HRESULT WINAPI DMOEnum(REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,DWORD,
+                       const DMO_PARTIAL_MEDIATYPE*,IEnumDMO**);
+HRESULT WINAPI DMOGetTypes(REFCLSID,ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*,
+                           ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*);
+HRESULT WINAPI DMOGetName(REFCLSID,WCHAR[80]);
+
+DEFINE_GUID(DMOCATEGORY_AUDIO_DECODER,
+            0x57f2db8b,0xe6bb,0x4513,0x9d,0x43,0xdc,0xd2,0xa6,0x59,0x31,0x25);
+DEFINE_GUID(DMOCATEGORY_AUDIO_ENCODER,
+            0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86);
+DEFINE_GUID(DMOCATEGORY_VIDEO_DECODER,
+            0x4a69b442,0x28be,0x4991,0x96,0x9c,0xb5,0x00,0xad,0xf5,0xd8,0xa8);
+DEFINE_GUID(DMOCATEGORY_VIDEO_ENCODER,
+            0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86);
+DEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT,
+            0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb);
+DEFINE_GUID(DMOCATEGORY_VIDEO_EFFECT,
+            0xd990ee14,0x776c,0x4723,0xbe,0x46,0x3d,0xa2,0xf5,0x6f,0x10,0xb9);
+DEFINE_GUID(DMOCATEGORY_AUDIO_CAPTURE_EFFECT,
+            0xf665aaba,0x3e09,0x4920,0xaa,0x5f,0x21,0x98,0x11,0x14,0x8f,0x09);
+DEFINE_GUID(DMOCATEGORY_ACOUSTIC_ECHO_CANCEL,
+            0xbf963d80,0xc559,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1);
+DEFINE_GUID(DMOCATEGORY_AUDIO_NOISE_SUPPRESS,
+            0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5);
+DEFINE_GUID(DMOCATEGORY_AGC,
+            0xe88c9ba0,0xc557,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DMOREG_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h
new file mode 100644
index 0000000..1df3dd1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DMORT_H__
+#define __DMORT_H__
+
+HRESULT WINAPI MoCopyMediaType(DMO_MEDIA_TYPE*,const DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoCreateMediaType(DMO_MEDIA_TYPE**,DWORD);
+HRESULT WINAPI MoDeleteMediaType(DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoDuplicateMediaType(DMO_MEDIA_TYPE**,const DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoFreeMediaType(DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoInitMediaType(DMO_MEDIA_TYPE*,DWORD);
+
+#endif /* __DMORT_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h
new file mode 100644
index 0000000..51e89a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h
@@ -0,0 +1,308 @@
+/*
+ *  DirectMusic Performance Layer Plugins API
+ *
+ *  Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ *  This program 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 program 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 program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_PLUGIN_H
+#define __WINE_DMUSIC_PLUGIN_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+#include <dmusici.h>
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * Registry path
+ */
+#define DMUS_REGSTR_PATH_TOOLS "Software\\Microsoft\\DirectMusic\\Tools"
+
+	
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */	
+DEFINE_GUID(CLSID_DirectMusicBandTrack,              0xd2ac2894,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordTrack,             0xd2ac288b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordMapTrack,          0xd2ac2896,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicCommandTrack,           0xd2ac288c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicLyricsTrack,            0x995c1cf5,0x54ff,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicMarkerTrack,            0x55a8fd00,0x4288,0x11d3,0x9b,0xd1,0x8a,0x0d,0x61,0xc8,0x88,0x35);
+DEFINE_GUID(CLSID_DirectMusicMotifTrack,             0xd2ac288e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicMuteTrack,              0xd2ac2898,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicParamControlTrack,      0x4be0537b,0x5c19,0x11d3,0x8b,0xdc,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptTrack,            0x4108fa85,0x3586,0x11d3,0x8b,0xd7,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack,    0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSeqTrack,               0xd2ac2886,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSignPostTrack,          0xf17e8672,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyleTrack,             0xd2ac288d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSysExTrack,             0xd2ac2887,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicTempoTrack,             0xd2ac2885,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicTimeSigTrack,           0xd2ac2888,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicWaveTrack,              0xeed36461,0x9ea5,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */
+DEFINE_GUID(CLSID_DirectMusicMelodyFormulationTrack, 0xb0684266,0xb57f,0x11d2,0x97,0xf9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicTool,                    0xd2ac28ba,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicTool8,                   0x0e674303,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
+DEFINE_GUID(IID_IDirectMusicTrack,                   0xf96029a1,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicTrack8,                  0x0e674304,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
+
+/* typedef definitions */
+typedef struct IDirectMusicTrack *LPDIRECTMUSICTRACK;
+typedef struct IDirectMusicTrack8 *LPDIRECTMUSICTRACK8;
+typedef struct IDirectMusicTool *LPDIRECTMUSICTOOL;
+typedef struct IDirectMusicTool8 *LPDIRECTMUSICTOOL8;
+/* these are from dmusici.h and are needed here */
+typedef struct IDirectMusicPerformance *LPDIRECTMUSICPERFORMANCE;
+typedef struct IDirectMusicPerformance8 *LPDIRECTMUSICPERFORMANCE8;
+typedef struct IDirectMusicSegment *LPDIRECTMUSICSEGMENT;
+typedef struct IDirectMusicSegment8 *LPDIRECTMUSICSEGMENT8;
+typedef struct IDirectMusicSegmentState *LPDIRECTMUSICSEGMENTSTATE;
+typedef struct IDirectMusicSegmentState8 *LPDIRECTMUSICSEGMENTSTATE8;
+typedef struct IDirectMusicGraph *LPDIRECTMUSICGRAPH;
+typedef struct IDirectMusicGraph         IDirectMusicGraph8,        *LPDIRECTMUSICGRAPH8;
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef struct _DMUS_PMSG DMUS_PMSG;
+typedef LONG MUSIC_TIME;
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_TRACK_PARAMF_CLOCK 0x1
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_TRACKF_FLAGS DMUS_TRACKF_FLAGS;
+
+/* actual enumerations */
+enum enumDMUS_TRACKF_FLAGS {
+	DMUS_TRACKF_SEEK       = 0x001,
+	DMUS_TRACKF_LOOP       = 0x002,
+	DMUS_TRACKF_START      = 0x004,
+	DMUS_TRACKF_FLUSH      = 0x008,
+	DMUS_TRACKF_DIRTY      = 0x010,
+	DMUS_TRACKF_NOTIFY_OFF = 0x020,
+	DMUS_TRACKF_PLAY_OFF   = 0x040,
+	DMUS_TRACKF_LOOPEND    = 0x080,
+	DMUS_TRACKF_STOP       = 0x100,
+	DMUS_TRACKF_RECOMPOSE  = 0x200,
+	DMUS_TRACKF_CLOCK      = 0x400,
+};
+
+/*****************************************************************************
+ * IDirectMusicTool interface
+ */
+#define INTERFACE IDirectMusicTool
+DECLARE_INTERFACE_(IDirectMusicTool,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicTool methods ***/
+    STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+    STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE;
+    STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE;
+    STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE;
+    STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTool_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTool_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTool_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirectMusicTool methods ***/
+#define IDirectMusicTool_Init(p,a)                  (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTool_GetMsgDeliveryType(p,a)    (p)->lpVtbl->GetMsgDeliveryType(p,a)
+#define IDirectMusicTool_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
+#define IDirectMusicTool_GetMediaTypes(p,a,b)       (p)->lpVtbl->GetMediaTypes(p,a,b)
+#define IDirectMusicTool_ProcessPMsg(p,a,b)         (p)->lpVtbl->ProcessPMsg(p,a,b)
+#define IDirectMusicTool_Flush(p,a,b,c)             (p)->lpVtbl->Flush(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicTool8 interface
+ */
+#define INTERFACE IDirectMusicTool8
+DECLARE_INTERFACE_(IDirectMusicTool8,IDirectMusicTool)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicTool methods ***/
+    STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+    STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE;
+    STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE;
+    STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE;
+    STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE;
+    /*** IDirectMusicTool8 methods ***/
+    STDMETHOD(Clone)(THIS_ IDirectMusicTool **ppTool) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTool8_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTool8_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTool8_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirectMusicTool methods ***/
+#define IDirectMusicTool8_Init(p,a)                  (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTool8_GetMsgDeliveryType(p,a)    (p)->lpVtbl->GetMsgDeliveryType(p,a)
+#define IDirectMusicTool8_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
+#define IDirectMusicTool8_GetMediaTypes(p,a,b)       (p)->lpVtbl->GetMediaTypes(p,a,b)
+#define IDirectMusicTool8_ProcessPMsg(p,a,b)         (p)->lpVtbl->ProcessPMsg(p,a,b)
+#define IDirectMusicTool8_Flush(p,a,b)               (p)->lpVtbl->Flush(p,a,b)
+/*** IDirectMusicTool8 methods ***/
+#define IDirectMusicTool8_Clone(p,a)                 (p)->lpVtbl->Clone(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicTrack interface
+ */
+#define INTERFACE IDirectMusicTrack
+DECLARE_INTERFACE_(IDirectMusicTrack,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicTrack methods ***/
+    STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE;
+    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE;
+    STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE;
+    STDMETHOD(Play)(THIS_ void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE;
+    STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE;
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTrack_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTrack_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTrack_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusicTrack methods ***/
+#define IDirectMusicTrack_Init(p,a)                   (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTrack_InitPlay(p,a,b,c,d,e)       (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
+#define IDirectMusicTrack_EndPlay(p,a)                (p)->lpVtbl->EndPlay(p,a)
+#define IDirectMusicTrack_Play(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack_GetParam(p,a,b,c,d)         (p)->lpVtbl->GetParam(p,a,b,c,d)
+#define IDirectMusicTrack_SetParam(p,a,b,c)           (p)->lpVtbl->SetParam(p,a,b,c)
+#define IDirectMusicTrack_IsParamSupported(p,a)       (p)->lpVtbl->IsParamSupported(p,a)
+#define IDirectMusicTrack_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicTrack_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicTrack_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicTrack8 interface
+ */
+#define INTERFACE IDirectMusicTrack8
+DECLARE_INTERFACE_(IDirectMusicTrack8,IDirectMusicTrack)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicTrack methods ***/
+    STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE;
+    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE;
+    STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE;
+    STDMETHOD(Play)(THIS_ void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE;
+    STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE;
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE;
+    /*** IDirectMusicTrack8 methods ***/
+    STDMETHOD(PlayEx)(THIS_ void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;
+    STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags) PURE;
+    STDMETHOD(SetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) PURE;
+    STDMETHOD(Compose)(THIS_ IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE;
+    STDMETHOD(Join)(THIS_ IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTrack8_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTrack8_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTrack8_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusicTrack methods ***/
+#define IDirectMusicTrack8_Init(p,a)                   (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTrack8_InitPlay(p,a,b,c,d,e)       (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
+#define IDirectMusicTrack8_EndPlay(p,a)                (p)->lpVtbl->EndPlay(p,a)
+#define IDirectMusicTrack8_Play(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack8_GetParam(p,a,b,c,d)         (p)->lpVtbl->GetParam(p,a,b,c,d)
+#define IDirectMusicTrack8_SetParam(p,a,b,c)           (p)->lpVtbl->SetParam(p,a,b,c)
+#define IDirectMusicTrack8_IsParamSupported(p,a)       (p)->lpVtbl->IsParamSupported(p,a)
+#define IDirectMusicTrack8_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicTrack8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicTrack8_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)
+/*** IDirectMusicTrack8 methods ***/
+#define IDirectMusicTrack8_PlayEx(p,a,b,c,d,e,f,g,h)   (p)->lpVtbl->PlayEx(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack8_GetParamEx(p,a,b,c,d,e,f)   (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f)
+#define IDirectMusicTrack8_SetParamEx(p,a,b,c,d,e)     (p)->lpVtbl->SetParamEx(p,a,b,c,d,e)
+#define IDirectMusicTrack8_Compose(p,a,b,c)            (p)->lpVtbl->Compose(p,a,b,c)
+#define IDirectMusicTrack8_Join(p,a,b,c,d,e)           (p)->lpVtbl->Join(p,a,b,c,d,e)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_PLUGIN_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h
new file mode 100644
index 0000000..b44bff5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h
@@ -0,0 +1,61 @@
+/* DirectMusic Buffer Format
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program 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 program 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_BUFFER_H
+#define __WINE_DMUSIC_BUFFER_H
+
+#include <dmdls.h>
+
+/*****************************************************************************
+ * Misc. definitions
+ */
+#define QWORD_ALIGN(x) (((x) + 7) & ~7)
+#define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_EVENT_STRUCTURED   0x1
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_EVENTHEADER DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER;
+
+/* actual structure*/ 
+#include <pshpack4.h>
+struct _DMUS_EVENTHEADER {
+    DWORD           cbEvent;
+    DWORD           dwChannelGroup;
+    REFERENCE_TIME  rtDelta;
+    DWORD           dwFlags;
+};
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_BUFFER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h
new file mode 100644
index 0000000..ff9991b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h
@@ -0,0 +1,775 @@
+/* DirectMusic Core API Stuff
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program 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 program 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 program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_CORE_H
+#define __WINE_DMUSIC_CORE_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+
+#include <dls1.h>
+#include <dmerror.h>
+#include <dmdls.h>
+#include <dsound.h>
+#include <dmusbuff.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusic,                    0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21);
+DEFINE_GUID(CLSID_DirectMusicCollection,          0x480ff4b0,0x28b2,0x11d1,0xbe,0xf7,0x00,0xc0,0x4f,0xbf,0x8f,0xef);
+DEFINE_GUID(CLSID_DirectMusicSynth,               0x58c2b4d0,0x46e7,0x11d1,0x89,0xac,0x00,0xa0,0xc9,0x05,0x41,0x29);
+	
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusic,                     0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusic2,                    0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusic8,                    0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);
+DEFINE_GUID(IID_IDirectMusicBuffer,               0xd2ac2878,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicCollection,           0xd2ac287c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicDownload,             0xd2ac287b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicInstrument,           0xd2ac287d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPort,                 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusicPortDownload,         0xd2ac287a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicThru,                 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+#define IID_IDirectMusicCollection8 IID_IDirectMusicCollection
+#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload
+#define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument
+#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument
+#define IID_IDirectMusicPort8 IID_IDirectMusicPort
+#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload
+#define IID_IDirectMusicThru8 IID_IDirectMusicThru
+
+/* GUIDs - property set */
+DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware,           0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Capable,            0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware,           0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS1,                  0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS2,                  0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_Effects,               0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2,           0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps,            0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_MemorySize,            0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize,      0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate,    0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND,      0x0aa97844,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE,        0x0aa97845,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_Volume,                0xfedfae25,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_WavesReverb,           0x04cb5622,0x32e5,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_WriteLatency,          0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_WritePeriod,           0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Capable,            0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware,           0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);	
+
+/* typedef definitions */
+typedef struct IDirectMusic *LPDIRECTMUSIC;
+typedef struct IDirectMusic8 *LPDIRECTMUSIC8;
+typedef struct IDirectMusicBuffer *LPDIRECTMUSICBUFFER;
+typedef struct IDirectMusicBuffer IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8;
+typedef struct IDirectMusicInstrument *LPDIRECTMUSICINSTRUMENT;
+typedef struct IDirectMusicInstrument IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8;
+typedef struct IDirectMusicDownloadedInstrument *LPDIRECTMUSICDOWNLOADEDINSTRUMENT;
+typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;
+typedef struct IDirectMusicCollection *LPDIRECTMUSICCOLLECTION;
+typedef struct IDirectMusicCollection IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8;
+typedef struct IDirectMusicDownload *LPDIRECTMUSICDOWNLOAD;
+typedef struct IDirectMusicDownload IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8;
+typedef struct IDirectMusicPortDownload *LPDIRECTMUSICPORTDOWNLOAD;
+typedef struct IDirectMusicPortDownload IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8;
+typedef struct IDirectMusicPort *LPDIRECTMUSICPORT;
+typedef struct IDirectMusicPort IDirectMusicPort8, *LPDIRECTMUSICPORT8;
+typedef struct IDirectMusicThru *LPDIRECTMUSICTHRU;
+typedef struct IDirectMusicThru IDirectMusicThru8, *LPDIRECTMUSICTHRU8;
+typedef struct IReferenceClock *LPREFERENCECLOCK;
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef ULONGLONG    SAMPLE_TIME, *LPSAMPLE_TIME;
+typedef ULONGLONG    SAMPLE_POSITION, *LPSAMPLE_POSITION;	
+
+
+/*****************************************************************************
+ * Flags
+ */
+#ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_
+#define _DIRECTAUDIO_PRIORITIES_DEFINED_
+
+#define DAUD_CRITICAL_VOICE_PRIORITY 0xF0000000
+#define DAUD_HIGH_VOICE_PRIORITY     0xC0000000
+#define DAUD_STANDARD_VOICE_PRIORITY 0x80000000
+#define DAUD_LOW_VOICE_PRIORITY      0x40000000
+#define DAUD_PERSIST_VOICE_PRIORITY  0x10000000
+
+#define DAUD_CHAN1_VOICE_PRIORITY_OFFSET  0x0000000E
+#define DAUD_CHAN2_VOICE_PRIORITY_OFFSET  0x0000000D
+#define DAUD_CHAN3_VOICE_PRIORITY_OFFSET  0x0000000C
+#define DAUD_CHAN4_VOICE_PRIORITY_OFFSET  0x0000000B
+#define DAUD_CHAN5_VOICE_PRIORITY_OFFSET  0x0000000A
+#define DAUD_CHAN6_VOICE_PRIORITY_OFFSET  0x00000009
+#define DAUD_CHAN7_VOICE_PRIORITY_OFFSET  0x00000008
+#define DAUD_CHAN8_VOICE_PRIORITY_OFFSET  0x00000007
+#define DAUD_CHAN9_VOICE_PRIORITY_OFFSET  0x00000006
+#define DAUD_CHAN10_VOICE_PRIORITY_OFFSET 0x0000000F
+#define DAUD_CHAN11_VOICE_PRIORITY_OFFSET 0x00000005
+#define DAUD_CHAN12_VOICE_PRIORITY_OFFSET 0x00000004
+#define DAUD_CHAN13_VOICE_PRIORITY_OFFSET 0x00000003
+#define DAUD_CHAN14_VOICE_PRIORITY_OFFSET 0x00000002
+#define DAUD_CHAN15_VOICE_PRIORITY_OFFSET 0x00000001
+#define DAUD_CHAN16_VOICE_PRIORITY_OFFSET 0x00000000
+
+#define DAUD_CHAN1_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN2_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN3_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN4_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN5_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN6_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN7_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN8_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN9_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)
+#endif  /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */
+
+#define DMUS_CLOCKF_GLOBAL 0x1
+
+#define DMUS_EFFECT_NONE   0x0
+#define DMUS_EFFECT_REVERB 0x1
+#define DMUS_EFFECT_CHORUS 0x2
+#define DMUS_EFFECT_DELAY  0x4
+	
+#define DMUS_MAX_DESCRIPTION 0x80
+#define DMUS_MAX_DRIVER 0x80
+
+#define DMUS_PC_INPUTCLASS  0x0
+#define DMUS_PC_OUTPUTCLASS 0x1
+
+#define DMUS_PC_DLS             0x00000001
+#define DMUS_PC_EXTERNAL        0x00000002
+#define DMUS_PC_SOFTWARESYNTH   0x00000004
+#define DMUS_PC_MEMORYSIZEFIXED 0x00000008
+#define DMUS_PC_GMINHARDWARE    0x00000010
+#define DMUS_PC_GSINHARDWARE    0x00000020
+#define DMUS_PC_XGINHARDWARE    0x00000040
+#define DMUS_PC_DIRECTSOUND     0x00000080
+#define DMUS_PC_SHAREABLE       0x00000100
+#define DMUS_PC_DLS2            0x00000200
+#define DMUS_PC_AUDIOPATH       0x00000400
+#define DMUS_PC_WAVE            0x00000800
+#define DMUS_PC_SYSTEMMEMORY    0x7FFFFFFF
+
+#define DMUS_PORT_WINMM_DRIVER    0x0
+#define DMUS_PORT_USER_MODE_SYNTH 0x1
+#define DMUS_PORT_KERNEL_MODE     0x2
+
+#define DMUS_PORT_FEATURE_AUDIOPATH     0x1
+#define DMUS_PORT_FEATURE_STREAMING     0x2
+
+#define DMUS_PORTPARAMS_VOICES           0x01
+#define DMUS_PORTPARAMS_CHANNELGROUPS    0x02
+#define DMUS_PORTPARAMS_AUDIOCHANNELS    0x04
+#define DMUS_PORTPARAMS_SAMPLERATE       0x08
+#define DMUS_PORTPARAMS_EFFECTS          0x20
+#define DMUS_PORTPARAMS_SHARE            0x40
+#define DMUS_PORTPARAMS_FEATURES         0x80
+
+#define DMUS_VOLUME_MAX     2000
+#define DMUS_VOLUME_MIN   -20000
+
+#define DMUS_SYNTHSTATS_VOICES        0x01
+#define DMUS_SYNTHSTATS_TOTAL_CPU     0x02
+#define DMUS_SYNTHSTATS_CPU_PER_VOICE 0x04
+#define DMUS_SYNTHSTATS_LOST_NOTES    0x08
+#define DMUS_SYNTHSTATS_PEAK_VOLUME   0x10
+#define DMUS_SYNTHSTATS_FREE_MEMORY   0x20
+#define DMUS_SYNTHSTATS_SYSTEMMEMORY  DMUS_PC_SYSTEMMEMORY
+
+#define DSBUSID_FIRST_SPKR_LOC        0x00000000
+#define DSBUSID_FRONT_LEFT            0x00000000
+#define DSBUSID_LEFT                  0x00000000
+#define DSBUSID_FRONT_RIGHT           0x00000001
+#define DSBUSID_RIGHT                 0x00000001
+#define DSBUSID_FRONT_CENTER          0x00000002
+#define DSBUSID_LOW_FREQUENCY         0x00000003
+#define DSBUSID_BACK_LEFT             0x00000004
+#define DSBUSID_BACK_RIGHT            0x00000005
+#define DSBUSID_FRONT_LEFT_OF_CENTER  0x00000006 
+#define DSBUSID_FRONT_RIGHT_OF_CENTER 0x00000007
+#define DSBUSID_BACK_CENTER           0x00000008
+#define DSBUSID_SIDE_LEFT             0x00000009
+#define DSBUSID_SIDE_RIGHT            0x0000000A
+#define DSBUSID_TOP_CENTER            0x0000000B
+#define DSBUSID_TOP_FRONT_LEFT        0x0000000C
+#define DSBUSID_TOP_FRONT_CENTER      0x0000000D
+#define DSBUSID_TOP_FRONT_RIGHT       0x0000000E
+#define DSBUSID_TOP_BACK_LEFT         0x0000000F
+#define DSBUSID_TOP_BACK_CENTER       0x00000010
+#define DSBUSID_TOP_BACK_RIGHT        0x011
+#define DSBUSID_LAST_SPKR_LOC         0x00000011
+#define DSBUSID_IS_SPKR_LOC(id)       (((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC))
+
+#define DSBUSID_REVERB_SEND           0x00000040
+#define DSBUSID_CHORUS_SEND           0x00000041
+
+#define DSBUSID_DYNAMIC_0             0x00000200 
+
+#define DSBUSID_NULL			      0xFFFFFFFF
+
+/*****************************************************************************
+ * Enumerations
+ */
+typedef enum {
+	DMUS_CLOCK_SYSTEM = 0x0,
+	DMUS_CLOCK_WAVE   = 0x1
+} DMUS_CLOCKTYPE;
+
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_BUFFERDESC          DMUS_BUFFERDESC,          *LPDMUS_BUFFERDESC;
+typedef struct _DMUS_PORTCAPS            DMUS_PORTCAPS,            *LPDMUS_PORTCAPS;
+typedef struct _DMUS_PORTPARAMS          DMUS_PORTPARAMS7,         *LPDMUS_PORTPARAMS7;
+typedef struct _DMUS_PORTPARAMS8         DMUS_PORTPARAMS8,         *LPDMUS_PORTPARAMS8;
+typedef         DMUS_PORTPARAMS8         DMUS_PORTPARAMS,          *LPDMUS_PORTPARAMS;
+typedef struct _DMUS_SYNTHSTATS          DMUS_SYNTHSTATS,          *LPDMUS_SYNTHSTATS;
+typedef struct _DMUS_SYNTHSTATS8         DMUS_SYNTHSTATS8,         *LPDMUS_SYNTHSTATS8;
+typedef struct _DMUS_WAVES_REVERB_PARAMS DMUS_WAVES_REVERB_PARAMS, *LPDMUS_WAVES_REVERB_PARAMS;
+typedef struct _DMUS_CLOCKINFO7          DMUS_CLOCKINFO7,          *LPDMUS_CLOCKINFO7;
+typedef struct _DMUS_CLOCKINFO8          DMUS_CLOCKINFO8,          *LPDMUS_CLOCKINFO8;
+typedef         DMUS_CLOCKINFO8          DMUS_CLOCKINFO,           *LPDMUS_CLOCKINFO;
+
+
+/* actual structures */
+struct _DMUS_BUFFERDESC {
+	DWORD dwSize;
+	DWORD dwFlags;
+	GUID guidBufferFormat;
+	DWORD cbBuffer;
+} ;
+
+struct _DMUS_PORTCAPS {
+	DWORD dwSize;
+	DWORD dwFlags;
+	GUID  guidPort;
+	DWORD dwClass;
+	DWORD dwType;
+	DWORD dwMemorySize;
+	DWORD dwMaxChannelGroups;
+	DWORD dwMaxVoices;    
+	DWORD dwMaxAudioChannels;
+	DWORD dwEffectFlags;
+	WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+};
+
+struct _DMUS_PORTPARAMS {
+	DWORD dwSize;
+	DWORD dwValidParams;
+	DWORD dwVoices;
+	DWORD dwChannelGroups;
+	DWORD dwAudioChannels;
+	DWORD dwSampleRate;
+	DWORD dwEffectFlags;
+	BOOL  fShare;
+};
+
+struct _DMUS_PORTPARAMS8 {
+	DWORD dwSize;
+	DWORD dwValidParams;
+	DWORD dwVoices;
+	DWORD dwChannelGroups;
+	DWORD dwAudioChannels;
+	DWORD dwSampleRate;
+	DWORD dwEffectFlags;
+	BOOL  fShare;
+	DWORD dwFeatures;
+};
+
+struct _DMUS_SYNTHSTATS {
+	DWORD dwSize;
+	DWORD dwValidStats;
+	DWORD dwVoices;
+	DWORD dwTotalCPU;
+	DWORD dwCPUPerVoice;
+	DWORD dwLostNotes;
+	DWORD dwFreeMemory;
+	LONG  lPeakVolume;
+};
+
+struct _DMUS_SYNTHSTATS8 {
+	DWORD dwSize;
+	DWORD dwValidStats;
+	DWORD dwVoices;
+	DWORD dwTotalCPU;
+	DWORD dwCPUPerVoice;
+	DWORD dwLostNotes;
+	DWORD dwFreeMemory;
+	LONG  lPeakVolume;
+	DWORD dwSynthMemUse;
+};
+
+struct _DMUS_WAVES_REVERB_PARAMS {
+	float fInGain;
+	float fReverbMix;
+	float fReverbTime;
+	float fHighFreqRTRatio;
+};
+
+struct _DMUS_CLOCKINFO7 {
+	DWORD          dwSize;
+	DMUS_CLOCKTYPE ctType;
+	GUID           guidClock;
+	WCHAR          wszDescription[DMUS_MAX_DESCRIPTION];
+};
+
+struct _DMUS_CLOCKINFO8 {
+    DWORD          dwSize;
+    DMUS_CLOCKTYPE ctType;
+    GUID           guidClock;
+    WCHAR          wszDescription[DMUS_MAX_DESCRIPTION];
+    DWORD          dwFlags;           
+};
+
+
+/*****************************************************************************
+ * IDirectMusic interface
+ */
+#define INTERFACE IDirectMusic
+DECLARE_INTERFACE_(IDirectMusic,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusic methods ***/
+    STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE;
+    STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE;
+    STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE;
+    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusic_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusic_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirectMusic_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirectMusic methods ***/
+#define IDirectMusic_EnumPort(p,a,b)            (p)->lpVtbl->EnumPort(p,a,b)
+#define IDirectMusic_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
+#define IDirectMusic_CreatePort(p,a,b,c,d)      (p)->lpVtbl->CreatePort(p,a,b,c,d)
+#define IDirectMusic_EnumMasterClock(p,a,b)     (p)->lpVtbl->EnumMasterClock(p,a,b)
+#define IDirectMusic_GetMasterClock(p,a,b)      (p)->lpVtbl->GetMasterClock(p,a,b)
+#define IDirectMusic_SetMasterClock(p,a)        (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusic_Activate(p,a)              (p)->lpVtbl->Activate(p,a)
+#define IDirectMusic_GetDefaultPort(p,a)        (p)->lpVtbl->GetDefaultPort(p,a)
+#define IDirectMusic_SetDirectSound(p,a,b)      (p)->lpVtbl->SetDirectSound(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusic8 interface
+ */
+#define INTERFACE IDirectMusic8
+DECLARE_INTERFACE_(IDirectMusic8,IDirectMusic)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusic methods ***/
+    STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE;
+    STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE;
+    STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE;
+    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+    /*** IDirectMusic8 methods ***/
+    STDMETHOD(SetExternalMasterClock)(THIS_ struct IReferenceClock *pClock) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusic8_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusic8_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusic8_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusic methods ***/
+#define IDirectMusic8_EnumPort(p,a,b)             (p)->lpVtbl->EnumPort(p,a,b)
+#define IDirectMusic8_CreateMusicBuffer(p,a,b,c)  (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
+#define IDirectMusic8_CreatePort(p,a,b,c,d)       (p)->lpVtbl->CreatePort(p,a,b,c,d)
+#define IDirectMusic8_EnumMasterClock(p,a,b)      (p)->lpVtbl->EnumMasterClock(p,a,b)
+#define IDirectMusic8_GetMasterClock(p,a,b)       (p)->lpVtbl->GetMasterClock(p,a,b)
+#define IDirectMusic8_SetMasterClock(p,a)         (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusic8_Activate(p,a)               (p)->lpVtbl->Activate(p,a)
+#define IDirectMusic8_GetDefaultPort(p,a)         (p)->lpVtbl->GetDefaultPort(p,a)
+#define IDirectMusic8_SetDirectSound(p,a,b)       (p)->lpVtbl->SetDirectSound(p,a,b)
+/*** IDirectMusic8 methods ***/
+#define IDirectMusic8_SetExternalMasterClock(p,a) (p)->lpVtbl->SetExternalMasterClock(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicBuffer interface
+ */
+#define INTERFACE IDirectMusicBuffer
+DECLARE_INTERFACE_(IDirectMusicBuffer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicBuffer methods ***/
+    STDMETHOD(Flush)(THIS) PURE;
+    STDMETHOD(TotalTime)(THIS_ LPREFERENCE_TIME prtTime) PURE;
+    STDMETHOD(PackStructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) PURE;
+    STDMETHOD(PackUnstructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) PURE;
+    STDMETHOD(ResetReadPtr)(THIS) PURE;
+    STDMETHOD(GetNextEvent)(THIS_ LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE *ppData) PURE;
+    STDMETHOD(GetRawBufferPtr)(THIS_ LPBYTE *ppData) PURE;
+    STDMETHOD(GetStartTime)(THIS_ LPREFERENCE_TIME prt) PURE;
+    STDMETHOD(GetUsedBytes)(THIS_ LPDWORD pcb) PURE;
+    STDMETHOD(GetMaxBytes)(THIS_ LPDWORD pcb) PURE;
+    STDMETHOD(GetBufferFormat)(THIS_ LPGUID pGuidFormat) PURE;
+    STDMETHOD(SetStartTime)(THIS_ REFERENCE_TIME rt) PURE;
+    STDMETHOD(SetUsedBytes)(THIS_ DWORD cb) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicBuffer_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicBuffer_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirectMusicBuffer_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirectMusicBuffer methods ***/
+#define IDirectMusicBuffer_Flush(p)                         (p)->lpVtbl->Flush(p)
+#define IDirectMusicBuffer_TotalTime(p,a)                   (p)->lpVtbl->TotalTime(p,a)
+#define IDirectMusicBuffer_PackStructured(p,a,b,c)          (p)->lpVtbl->PackStructured(p,a,b,c)
+#define IDirectMusicBuffer_PackUnstructured(p,a,b,c,d)      (p)->lpVtbl->PackUnstructured(p,a,b,c,d)
+#define IDirectMusicBuffer_ResetReadPtr(p)                  (p)->lpVtbl->ResetReadPtr(p)
+#define IDirectMusicBuffer_GetNextEvent(p,a,b,c,d)          (p)->lpVtbl->GetNextEvent(p,a,b,c,d)
+#define IDirectMusicBuffer_GetRawBufferPtr(p,a)             (p)->lpVtbl->GetRawBufferPtr(p,a)
+#define IDirectMusicBuffer_GetStartTime(p,a)                (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicBuffer_GetUsedBytes(p,a)                (p)->lpVtbl->GetUsedBytes(p,a)
+#define IDirectMusicBuffer_GetMaxBytes(p,a)                 (p)->lpVtbl->GetMaxBytes(p,a)
+#define IDirectMusicBuffer_GetBufferFormat(p,a)             (p)->lpVtbl->GetBufferFormat(p,a)
+#define IDirectMusicBuffer_SetStartTime(p,a)                (p)->lpVtbl->SetStartTime(p,a)
+#define IDirectMusicBuffer_SetUsedBytes(p,a)                (p)->lpVtbl->SetUsedBytes(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicInstrument interface
+ */
+#define INTERFACE IDirectMusicInstrument
+DECLARE_INTERFACE_(IDirectMusicInstrument,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicInstrument methods ***/
+    STDMETHOD(GetPatch)(THIS_ DWORD *pdwPatch) PURE;
+    STDMETHOD(SetPatch)(THIS_ DWORD dwPatch) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicInstrument_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicInstrument_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicInstrument methods ***/
+#define IDirectMusicInstrument_GetPatch(p,a)         (p)->lpVtbl->GetPatch(p,a)
+#define IDirectMusicInstrument_SetPatch(p,a)         (p)->lpVtbl->SetPatch(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicDownloadedInstrument interface
+ */
+#define INTERFACE IDirectMusicDownloadedInstrument
+DECLARE_INTERFACE_(IDirectMusicDownloadedInstrument,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /* no IDirectMusicDownloadedInstrument methods at this time */
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicDownloadedInstrument_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicDownloadedInstrument_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicDownloadedInstrument methods ***/
+/* none at this time */
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicCollection interface
+ */
+#define INTERFACE IDirectMusicCollection
+DECLARE_INTERFACE_(IDirectMusicCollection,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicCollection methods ***/
+    STDMETHOD(GetInstrument)(THIS_ DWORD dwPatch, IDirectMusicInstrument **ppInstrument) PURE;
+    STDMETHOD(EnumInstrument)(THIS_ DWORD dwIndex, DWORD *pdwPatch, LPWSTR pwszName, DWORD dwNameLen) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicCollection_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicCollection_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirectMusicCollection_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirectMusicCollection methods ***/
+#define IDirectMusicCollection_GetInstrument(p,a,b)             (p)->lpVtbl->GetInstrument(p,a,b)
+#define IDirectMusicCollection_EnumInstrument(p,a,b,c,d)        (p)->lpVtbl->EnumInstrument(p,a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicDownload interface
+ */
+#define INTERFACE IDirectMusicDownload
+DECLARE_INTERFACE_(IDirectMusicDownload,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicDownload methods ***/
+    STDMETHOD(GetBuffer)(THIS_ void **ppvBuffer, DWORD *pdwSize) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicDownload_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicDownload_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IDirectMusicDownload_Release(p)                     (p)->lpVtbl->Release(p)
+/*** IDirectMusicDownload methods ***/
+#define IDirectMusicDownload_GetBuffer(p,a,b)               (p)->lpVtbl->GetBuffer(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPortDownload interface
+ */
+#define INTERFACE IDirectMusicPortDownload
+DECLARE_INTERFACE_(IDirectMusicPortDownload,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicPortDownload methods ***/
+    STDMETHOD(GetBuffer)(THIS_ DWORD dwDLId, IDirectMusicDownload **ppIDMDownload) PURE;
+    STDMETHOD(AllocateBuffer)(THIS_ DWORD dwSize, IDirectMusicDownload **ppIDMDownload) PURE;
+    STDMETHOD(GetDLId)(THIS_ DWORD *pdwStartDLId, DWORD dwCount) PURE;
+    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+    STDMETHOD(Download)(THIS_ IDirectMusicDownload *pIDMDownload) PURE;
+    STDMETHOD(Unload)(THIS_ IDirectMusicDownload *pIDMDownload) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPortDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPortDownload_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPortDownload_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicPortDownload methods ***/
+#define IDirectMusicPortDownload_GetBuffer(p,a,b)      (p)->lpVtbl->GetBuffer(p,a,b)
+#define IDirectMusicPortDownload_AllocateBuffer(p,a,b) (p)->lpVtbl->AllocateBuffer(p,a,b)
+#define IDirectMusicPortDownload_GetDLId(p,a,b)        (p)->lpVtbl->GetDLId(p,a,b)
+#define IDirectMusicPortDownload_GetAppend(p,a)        (p)->lpVtbl->GetAppend(p,a)
+#define IDirectMusicPortDownload_Download(p,a)         (p)->lpVtbl->Download(p,a)
+#define IDirectMusicPortDownload_Unload(p,a)           (p)->lpVtbl->GetBuffer(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPort interface
+ */
+#define INTERFACE IDirectMusicPort
+DECLARE_INTERFACE_(IDirectMusicPort,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicPort methods ***/
+    STDMETHOD(PlayBuffer)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
+    STDMETHOD(SetReadNotificationHandle)(THIS_ HANDLE hEvent) PURE;
+    STDMETHOD(Read)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
+    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInstrument, IDirectMusicDownloadedInstrument **ppDownloadedInstrument, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges) PURE;
+    STDMETHOD(UnloadInstrument)(THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ struct IReferenceClock **ppClock) PURE;
+    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+    STDMETHOD(Compact)(THIS) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDMUS_PORTCAPS pPortCaps) PURE;
+    STDMETHOD(DeviceIoControl)(THIS_ DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) PURE;
+    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwChannelGroups) PURE;
+    STDMETHOD(GetNumChannelGroups)(THIS_ LPDWORD pdwChannelGroups) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fActive) PURE;
+    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPort_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPort_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPort_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirectMusicPort methods ***/
+#define IDirectMusicPort_PlayBuffer(p,a)                  (p)->lpVtbl->PlayBuffer(p,a)
+#define IDirectMusicPort_SetReadNotificationHandle(p,a)   (p)->lpVtbl->SetReadNotificationHandle(p,a)
+#define IDirectMusicPort_Read(p,a)                        (p)->lpVtbl->Read(p,a)
+#define IDirectMusicPort_DownloadInstrument(p,a,b,c,d)    (p)->lpVtbl->DownloadInstrument(p,a,b,c,d)
+#define IDirectMusicPort_UnloadInstrument(p,a)            (p)->lpVtbl->UnloadInstrument(p,a)
+#define IDirectMusicPort_GetLatencyClock(p,a)             (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicPort_GetRunningStats(p,a)             (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicPort_Compact(p)                       (p)->lpVtbl->Compact(p)
+#define IDirectMusicPort_GetCaps(p,a)                     (p)->lpVtbl->GetCaps(p,a)
+#define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) (p)->lpVtbl->DeviceIoControl(p,a,b,c,d,e,f,g)
+#define IDirectMusicPort_SetNumChannelGroups(p,a)         (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicPort_GetNumChannelGroups(p,a)         (p)->lpVtbl->GetNumChannelGroups(p,a)
+#define IDirectMusicPort_Activate(p,a)                    (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicPort_SetChannelPriority(p,a,b,c)      (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicPort_GetChannelPriority(p,a,b,c)      (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicPort_SetDirectSound(p,a,b)            (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusicPort_GetFormat(p,a,b,c)               (p)->lpVtbl->GetFormat(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicThru interface
+ */
+#define INTERFACE IDirectMusicThru
+DECLARE_INTERFACE_(IDirectMusicThru,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicThru methods ***/
+    STDMETHOD(ThruChannel)(THIS_ DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicThru_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicThru_AddRef(p)                              (p)->lpVtbl->AddRef(p)
+#define IDirectMusicThru_Release(p)                             (p)->lpVtbl->Release(p)
+/*** IDirectMusicThru methods ***/
+#define IDirectMusicThru_ThruChannel(p,a,b,c,d,e)               (p)->lpVtbl->ThruChannel(p,a,b,c,d,e)
+#endif
+
+
+#ifndef __IReferenceClock_INTERFACE_DEFINED__
+#define __IReferenceClock_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
+
+/*****************************************************************************
+ * IReferenceClock interface
+ */
+#define INTERFACE IReferenceClock
+DECLARE_INTERFACE_(IReferenceClock,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IReferenceClock methods ***/
+    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *pTime) PURE;
+    STDMETHOD(AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD *pdwAdviseCookie) PURE;
+    STDMETHOD(AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD *pdwAdviseCookie) PURE;
+    STDMETHOD(Unadvise)(THIS_ DWORD dwAdviseCookie) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IReferenceClock_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IReferenceClock_AddRef(p)                               (p)->lpVtbl->AddRef(p)
+#define IReferenceClock_Release(p)                              (p)->lpVtbl->Release(p)
+/*** IReferenceClock methods ***/
+#define IReferenceClock_GetTime(p,a)                            (p)->lpVtbl->GetTime(p,a)
+#define IReferenceClock_AdviseTime(p,a,b,c,d)                   (p)->lpVtbl->AdviseTime(p,a,b,c,d)
+#define IReferenceClock_AdvisePeriodic(p,a,b,c,d)               (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)
+#define IReferenceClock_Unadvise(p,a)                           (p)->lpVtbl->Unadvise(p,a)
+#endif
+
+#endif /* __IReferenceClock_INTERFACE_DEFINED__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_CORE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h
new file mode 100644
index 0000000..a64e580
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h
@@ -0,0 +1,918 @@
+/*
+ *  DirectMusic File Formats
+ *
+ *  Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ *  This program 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 program 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 program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_FILEFORMATS_H
+#define __WINE_DMUSIC_FILEFORMATS_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*****************************************************************************
+ * FOURCC Definitions
+ */
+/* Common chunks */
+#define DMUS_FOURCC_GUID_CHUNK                     mmioFOURCC('g','u','i','d')
+#define DMUS_FOURCC_INFO_LIST                      mmioFOURCC('I','N','F','O')
+#define DMUS_FOURCC_UNFO_LIST                      mmioFOURCC('U','N','F','O')
+#define DMUS_FOURCC_UNAM_CHUNK                     mmioFOURCC('U','N','A','M')
+#define DMUS_FOURCC_UART_CHUNK                     mmioFOURCC('U','A','R','T')
+#define DMUS_FOURCC_UCOP_CHUNK                     mmioFOURCC('U','C','O','P')
+#define DMUS_FOURCC_USBJ_CHUNK                     mmioFOURCC('U','S','B','J')
+#define DMUS_FOURCC_UCMT_CHUNK                     mmioFOURCC('U','C','M','T')
+#define DMUS_FOURCC_CATEGORY_CHUNK                 mmioFOURCC('c','a','t','g')
+#define DMUS_FOURCC_VERSION_CHUNK                  mmioFOURCC('v','e','r','s')
+/* AudioPath */
+#define DMUS_FOURCC_AUDIOPATH_FORM                 mmioFOURCC('D','M','A','P')
+#define DMUS_FOURCC_PORTCONFIGS_LIST               mmioFOURCC('p','c','s','l')
+#define DMUS_FOURCC_PORTCONFIG_LIST                mmioFOURCC('p','c','f','l')
+#define DMUS_FOURCC_PORTCONFIG_ITEM                mmioFOURCC('p','c','f','h')
+#define DMUS_FOURCC_PORTPARAMS_ITEM                mmioFOURCC('p','p','r','h')
+#define DMUS_FOURCC_DSBUFFER_LIST                  mmioFOURCC('d','b','f','l')
+#define DMUS_FOURCC_DSBUFFATTR_ITEM                mmioFOURCC('d','d','a','h')
+#define DMUS_FOURCC_PCHANNELS_LIST                 mmioFOURCC('p','c','h','l')
+#define DMUS_FOURCC_PCHANNELS_ITEM                 mmioFOURCC('p','c','h','h')
+/* Band */
+#define DMUS_FOURCC_BAND_FORM                      mmioFOURCC('D','M','B','D')
+#define DMUS_FOURCC_INSTRUMENTS_LIST               mmioFOURCC('l','b','i','l')
+#define DMUS_FOURCC_INSTRUMENT_LIST                mmioFOURCC('l','b','i','n')
+#define DMUS_FOURCC_INSTRUMENT_CHUNK               mmioFOURCC('b','i','n','s')
+/* Chordmap */
+#define DMUS_FOURCC_CHORDMAP_FORM                  mmioFOURCC('D','M','P','R')
+#define DMUS_FOURCC_IOCHORDMAP_CHUNK               mmioFOURCC('p','e','r','h')
+#define DMUS_FOURCC_SUBCHORD_CHUNK                 mmioFOURCC('c','h','d','t')
+#define DMUS_FOURCC_CHORDENTRY_CHUNK               mmioFOURCC('c','h','e','h')
+#define DMUS_FOURCC_SUBCHORDID_CHUNK               mmioFOURCC('s','b','c','n')
+#define DMUS_FOURCC_IONEXTCHORD_CHUNK              mmioFOURCC('n','c','r','d')
+#define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK             mmioFOURCC('n','c','s','q')
+#define DMUS_FOURCC_IOSIGNPOST_CHUNK               mmioFOURCC('s','p','s','h')
+#define DMUS_FOURCC_CHORDNAME_CHUNK                mmioFOURCC('I','N','A','M')
+#define DMUS_FOURCC_CHORDENTRY_LIST                mmioFOURCC('c','h','o','e')
+#define DMUS_FOURCC_CHORDMAP_LIST                  mmioFOURCC('c','m','a','p')
+#define DMUS_FOURCC_CHORD_LIST                     mmioFOURCC('c','h','r','d')
+#define DMUS_FOURCC_CHORDPALETTE_LIST              mmioFOURCC('c','h','p','l')
+#define DMUS_FOURCC_CADENCE_LIST                   mmioFOURCC('c','a','d','e')
+#define DMUS_FOURCC_SIGNPOSTITEM_LIST              mmioFOURCC('s','p','s','t')
+#define DMUS_FOURCC_SIGNPOST_LIST                  mmioFOURCC('s','p','s','q')
+/* Container */
+#define DMUS_FOURCC_CONTAINER_FORM                 mmioFOURCC('D','M','C','N')
+#define DMUS_FOURCC_CONTAINER_CHUNK                mmioFOURCC('c','o','n','h')
+#define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK          mmioFOURCC('c','o','b','a')
+#define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK         mmioFOURCC('c','o','b','h')
+#define DMUS_FOURCC_CONTAINED_OBJECTS_LIST         mmioFOURCC('c','o','s','l')
+#define DMUS_FOURCC_CONTAINED_OBJECT_LIST          mmioFOURCC('c','o','b','l')
+/* DirectSound Buffer Configuration */
+#define DMUS_FOURCC_DSBC_FORM                      mmioFOURCC('D','S','B','C')
+#define DMUS_FOURCC_DSBD_CHUNK                     mmioFOURCC('d','s','b','d')
+#define DMUS_FOURCC_BSID_CHUNK                     mmioFOURCC('b','s','i','d')
+#define DMUS_FOURCC_DS3D_CHUNK                     mmioFOURCC('d','s','3','d')
+#define DMUS_FOURCC_DSBC_LIST                      mmioFOURCC('f','x','l','s')
+/* Effects */
+#define DMUS_FOURCC_DSFX_FORM                      mmioFOURCC('D','S','F','X')
+#define DMUS_FOURCC_DSFX_CHUNK                     mmioFOURCC('f','x','h','r')
+#define DMUS_FOURCC_DSFX_DATA                      mmioFOURCC('d','a','t','a')
+/* Reference */
+#define DMUS_FOURCC_REF_LIST                       mmioFOURCC('D','M','R','F')
+#define DMUS_FOURCC_REF_CHUNK                      mmioFOURCC('r','e','f','h')
+#define DMUS_FOURCC_DATE_CHUNK                     mmioFOURCC('d','a','t','e')
+#define DMUS_FOURCC_NAME_CHUNK                     mmioFOURCC('n','a','m','e')
+#define DMUS_FOURCC_FILE_CHUNK                     mmioFOURCC('f','i','l','e')
+/* Script */
+#define DMUS_FOURCC_SCRIPT_FORM                    mmioFOURCC('D','M','S','C')
+#define DMUS_FOURCC_SCRIPT_CHUNK                   mmioFOURCC('s','c','h','d')
+#define DMUS_FOURCC_SCRIPTVERSION_CHUNK            mmioFOURCC('s','c','v','e')
+#define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK           mmioFOURCC('s','c','l','a')
+#define DMUS_FOURCC_SCRIPTSOURCE_CHUNK             mmioFOURCC('s','c','s','r')
+/* Segment */
+#define DMUS_FOURCC_SEGMENT_FORM                   mmioFOURCC('D','M','S','G')
+#define DMUS_FOURCC_SEGMENT_CHUNK                  mmioFOURCC('s','e','g','h')
+#define DMUS_FOURCC_TRACK_LIST                     mmioFOURCC('t','r','k','l')
+/* Style chunks */
+#define DMUS_FOURCC_STYLE_FORM                     mmioFOURCC('D','M','S','T')
+#define DMUS_FOURCC_STYLE_CHUNK                    mmioFOURCC('s','t','y','h')
+#define DMUS_FOURCC_PART_LIST                      mmioFOURCC('p','a','r','t')
+#define DMUS_FOURCC_PART_CHUNK                     mmioFOURCC('p','r','t','h')
+#define DMUS_FOURCC_NOTE_CHUNK                     mmioFOURCC('n','o','t','e')
+#define DMUS_FOURCC_CURVE_CHUNK                    mmioFOURCC('c','r','v','e')
+#define DMUS_FOURCC_MARKER_CHUNK                   mmioFOURCC('m','r','k','r')
+#define DMUS_FOURCC_RESOLUTION_CHUNK               mmioFOURCC('r','s','l','n')
+#define DMUS_FOURCC_ANTICIPATION_CHUNK             mmioFOURCC('a','n','p','n')
+#define DMUS_FOURCC_PATTERN_LIST                   mmioFOURCC('p','t','t','n')
+#define DMUS_FOURCC_PATTERN_CHUNK                  mmioFOURCC('p','t','n','h')
+#define DMUS_FOURCC_RHYTHM_CHUNK                   mmioFOURCC('r','h','t','m')
+#define DMUS_FOURCC_PARTREF_LIST                   mmioFOURCC('p','r','e','f')
+#define DMUS_FOURCC_PARTREF_CHUNK                  mmioFOURCC('p','r','f','c')
+#define DMUS_FOURCC_STYLE_PERS_REF_LIST            mmioFOURCC('p','r','r','f')
+#define DMUS_FOURCC_MOTIFSETTINGS_CHUNK            mmioFOURCC('m','t','f','s')
+/* Tool */
+#define DMUS_FOURCC_TOOL_FORM                      mmioFOURCC('D','M','T','L')
+#define DMUS_FOURCC_TOOL_CHUNK                     mmioFOURCC('t','o','l','h')
+/* ToolGraph */
+#define DMUS_FOURCC_TOOLGRAPH_FORM                 mmioFOURCC('D','M','T','G')
+#define DMUS_FOURCC_TOOL_LIST                      mmioFOURCC('t','o','l','l')
+/* Track */
+#define DMUS_FOURCC_TRACK_FORM                     mmioFOURCC('D','M','T','K')
+#define DMUS_FOURCC_TRACK_CHUNK                    mmioFOURCC('t','r','k','h')
+#define DMUS_FOURCC_TRACK_EXTRAS_CHUNK             mmioFOURCC('t','r','k','x')
+/* Band Track */
+#define DMUS_FOURCC_BANDTRACK_FORM                 mmioFOURCC('D','M','B','T')
+#define DMUS_FOURCC_BANDTRACK_CHUNK                mmioFOURCC('b','d','t','h')
+#define DMUS_FOURCC_BANDS_LIST                     mmioFOURCC('l','b','d','l')
+#define DMUS_FOURCC_BAND_LIST                      mmioFOURCC('l','b','n','d')
+#define DMUS_FOURCC_BANDITEM_CHUNK                 mmioFOURCC('b','d','i','h')
+#define DMUS_FOURCC_BANDITEM_CHUNK2                mmioFOURCC('b','d','2','h')
+/* Chord Track */
+#define DMUS_FOURCC_CHORDTRACK_LIST                mmioFOURCC('c','o','r','d')
+#define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK         mmioFOURCC('c','r','d','h')
+#define DMUS_FOURCC_CHORDTRACKBODY_CHUNK           mmioFOURCC('c','r','d','b')
+/* Chordmap Track */
+#define DMUS_FOURCC_PERS_TRACK_LIST                mmioFOURCC('p','f','t','r')
+#define DMUS_FOURCC_PERS_REF_LIST                  mmioFOURCC('p','f','r','f')
+#define DMUS_FOURCC_TIME_STAMP_CHUNK               mmioFOURCC('s','t','m','p')
+/* Command Track */
+#define DMUS_FOURCC_COMMANDTRACK_CHUNK             mmioFOURCC('c','m','n','d')
+/* Lyrics Track */
+#define DMUS_FOURCC_LYRICSTRACK_LIST               mmioFOURCC('l','y','r','t')
+#define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST         mmioFOURCC('l','y','r','l')
+#define DMUS_FOURCC_LYRICSTRACKEVENT_LIST          mmioFOURCC('l','y','r','e')
+#define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK   mmioFOURCC('l','y','r','h')
+#define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK     mmioFOURCC('l','y','r','n')
+/* Marker Track */
+#define DMUS_FOURCC_MARKERTRACK_LIST               mmioFOURCC('M','A','R','K')
+#define DMUS_FOURCC_VALIDSTART_CHUNK               mmioFOURCC('v','a','l','s')
+#define DMUS_FOURCC_PLAYMARKER_CHUNK               mmioFOURCC('p','l','a','y')
+/* Mute Track */
+#define DMUS_FOURCC_MUTE_CHUNK                     mmioFOURCC('m','u','t','e')
+/* Parameter Control Track */
+#define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST   mmioFOURCC('p','r','m','t')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST  mmioFOURCC('p','r','o','l')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST   mmioFOURCC('p','r','p','l')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK  mmioFOURCC('p','r','p','h')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c')
+/* Pattern Track */
+#define DMUS_FOURCC_PATTERN_FORM                   mmioFOURCC('D','M','P','T')
+/* Script Track */
+#define DMUS_FOURCC_SCRIPTTRACK_LIST               mmioFOURCC('s','c','r','t')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST         mmioFOURCC('s','c','r','l')
+#define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST          mmioFOURCC('s','c','r','e')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK   mmioFOURCC('s','c','r','h')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK     mmioFOURCC('s','c','r','n')
+/* Segment Trgigger Track */
+#define DMUS_FOURCC_SEGTRACK_LIST                  mmioFOURCC('s','e','g','t')
+#define DMUS_FOURCC_SEGTRACK_CHUNK                 mmioFOURCC('s','g','t','h')
+#define DMUS_FOURCC_SEGMENTS_LIST                  mmioFOURCC('l','s','g','l')
+#define DMUS_FOURCC_SEGMENT_LIST                   mmioFOURCC('l','s','e','g')
+#define DMUS_FOURCC_SEGMENTITEM_CHUNK              mmioFOURCC('s','g','i','h')
+#define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK          mmioFOURCC('s','n','a','m')
+/* Sequence Track */
+#define DMUS_FOURCC_SEQ_TRACK                      mmioFOURCC('s','e','q','t')
+#define DMUS_FOURCC_SEQ_LIST                       mmioFOURCC('e','v','t','l')
+#define DMUS_FOURCC_CURVE_LIST                     mmioFOURCC('c','u','r','l')
+/* Signpost Track */
+#define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK           mmioFOURCC('s','g','n','p')
+/* Style Track */
+#define DMUS_FOURCC_STYLE_TRACK_LIST               mmioFOURCC('s','t','t','r')
+#define DMUS_FOURCC_STYLE_REF_LIST                 mmioFOURCC('s','t','r','f')
+/* SysEx Track */
+#define DMUS_FOURCC_SYSEX_TRACK                    mmioFOURCC('s','y','e','x')
+/* Tempo Track */
+#define DMUS_FOURCC_TEMPO_TRACK                    mmioFOURCC('t','e','t','r')
+/* Time Signature Track */
+#define DMUS_FOURCC_TIMESIGNATURE_TRACK            mmioFOURCC('t','i','m','s')
+#define DMUS_FOURCC_TIMESIGTRACK_LIST              mmioFOURCC('T','I','M','S')
+#define DMUS_FOURCC_TIMESIG_CHUNK                  DMUS_FOURCC_TIMESIGNATURE_TRACK
+/* Wave Track */
+#define DMUS_FOURCC_WAVETRACK_LIST                 mmioFOURCC('w','a','v','t')
+#define DMUS_FOURCC_WAVETRACK_CHUNK                mmioFOURCC('w','a','t','h')
+#define DMUS_FOURCC_WAVEPART_LIST                  mmioFOURCC('w','a','v','p')
+#define DMUS_FOURCC_WAVEPART_CHUNK                 mmioFOURCC('w','a','p','h')
+#define DMUS_FOURCC_WAVEITEM_LIST                  mmioFOURCC('w','a','v','i')
+#define DMUS_FOURCC_WAVE_LIST                      mmioFOURCC('w','a','v','e')
+#define DMUS_FOURCC_WAVEITEM_CHUNK                 mmioFOURCC('w','a','i','h')
+/* Wave Header */
+#define DMUS_FOURCC_WAVEHEADER_CHUNK               mmioFOURCC('w','a','v','h')
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_BUFFERF_SHARED  0x1
+#define DMUS_BUFFERF_DEFINED 0x2
+#define DMUS_BUFFERF_MIXIN   0x8
+
+#define DMUS_CHORDMAPF_VERSION8 0x1
+
+#define DMUS_CONTAINED_OBJF_KEEP 0x1
+
+#define DMUS_CONTAINER_NOLOADS 0x2
+
+#define DMUS_IO_INST_PATCH              0x0001
+#define DMUS_IO_INST_BANKSELECT         0x0002
+#define DMUS_IO_INST_ASSIGN_PATCH       0x0008
+#define DMUS_IO_INST_NOTERANGES         0x0010
+#define DMUS_IO_INST_PAN                0x0020
+#define DMUS_IO_INST_VOLUME             0x0040
+#define DMUS_IO_INST_TRANSPOSE          0x0080
+#define DMUS_IO_INST_GM                 0x0100
+#define DMUS_IO_INST_GS                 0x0200
+#define DMUS_IO_INST_XG                 0x0400
+#define DMUS_IO_INST_CHANNEL_PRIORITY   0x0800
+#define DMUS_IO_INST_USE_DEFAULT_GM_SET 0x1000
+#define DMUS_IO_INST_PITCHBENDRANGE     0x2000
+
+#define DMUS_IO_SCRIPTTRACKF_PREPARE 0x1
+#define DMUS_IO_SCRIPTTRACKF_QUEUE   0x2
+#define DMUS_IO_SCRIPTTRACKF_ATTIME  0x4
+
+#define DMUS_MARKERF_START       0x1
+#define DMUS_MARKERF_STOP        0x2
+#define DMUS_MARKERF_CHORD_ALIGN 0x4
+
+#define DMUS_PATTERNF_PERSIST_CONTROL 0x1
+
+#define DMUS_PARTF_USE_MARKERS  0x1
+#define DMUS_PARTF_ALIGN_CHORDS 0x2
+
+#define DMUS_PORTCONFIGF_DRUMSON10  0x1
+#define DMUS_PORTCONFIGF_USEDEFAULT 0x2
+
+#define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT       0x1
+#define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS  0x2
+
+#define DMUS_SEGIOF_REFLENGTH 0x1
+#define DMUS_SEGIOF_CLOCKTIME 0x2
+
+#define DMUS_SEGMENTTRACKF_MOTIF 0x1
+
+/* Song flags; MS doesn't support this in DX 9.0 anymore */
+#define DMUS_SONG_MAXSEGID  0x7FFFFFFF
+#define DMUS_SONG_ANYSEG    0x80000000
+#define DMUS_SONG_NOSEG     0xFFFFFFFF
+#define DMUS_SONG_NOFROMSEG 0x80000001
+
+#define DMUS_SIGNPOSTF_A        0x0001      
+#define DMUS_SIGNPOSTF_B        0x0002
+#define DMUS_SIGNPOSTF_C        0x0004
+#define DMUS_SIGNPOSTF_D        0x0008
+#define DMUS_SIGNPOSTF_E        0x0010
+#define DMUS_SIGNPOSTF_F        0x0020
+#define DMUS_SIGNPOSTF_1        0x0100
+#define DMUS_SIGNPOSTF_2        0x0200
+#define DMUS_SIGNPOSTF_3        0x0400
+#define DMUS_SIGNPOSTF_4        0x0800
+#define DMUS_SIGNPOSTF_5        0x1000
+#define DMUS_SIGNPOSTF_6        0x2000
+#define DMUS_SIGNPOSTF_7        0x4000
+#define DMUS_SIGNPOSTF_CADENCE  0x8000
+#define DMUS_SIGNPOSTF_LETTER   (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
+#define DMUS_SIGNPOSTF_ROOT     (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)
+
+#define DMUS_SPOSTCADENCEF_1 0x2
+#define DMUS_SPOSTCADENCEF_2 0x4
+
+#define DMUS_VARIATIONF_MAJOR        0x0000007F
+#define DMUS_VARIATIONF_MINOR        0x00003F80
+#define DMUS_VARIATIONF_OTHER        0x001FC000
+#define DMUS_VARIATIONF_ROOT_SCALE   0x00200000
+#define DMUS_VARIATIONF_ROOT_FLAT    0x00400000
+#define DMUS_VARIATIONF_ROOT_SHARP   0x00800000
+#define DMUS_VARIATIONF_TYPE_TRIAD   0x01000000
+#define DMUS_VARIATIONF_TYPE_6AND7   0x02000000
+#define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000
+#define DMUS_VARIATIONF_DEST_TO1     0x08000000
+#define DMUS_VARIATIONF_DEST_TO5     0x10000000
+#define DMUS_VARIATIONF_DEST_OTHER   0x40000000
+#define DMUS_VARIATIONF_MODES        0xE0000000
+#define DMUS_VARIATIONF_MODES_EX     (0x20000000 | 0x80000000)
+#define DMUS_VARIATIONF_IMA25_MODE   0x00000000
+#define DMUS_VARIATIONF_DMUS_MODE    0x20000000
+
+#define DMUS_WAVETRACKF_SYNC_VAR        0x1
+#define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2
+
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_VARIATIONT_TYPES DMUS_VARIATIONT_TYPES;
+typedef enum enumDMUS_EMBELLISHT_TYPES DMUS_EMBELLISHT_TYPES;
+typedef enum enumDMUS_PATTERNT_TYPES   DMUS_PATTERNT_TYPES;
+
+/* actual enumerations */
+enum enumDMUS_VARIATIONT_TYPES {
+	DMUS_VARIATIONT_SEQUENTIAL   = 0x0,
+	DMUS_VARIATIONT_RANDOM       = 0x1,
+	DMUS_VARIATIONT_RANDOM_START = 0x2,
+	DMUS_VARIATIONT_NO_REPEAT    = 0x3,
+	DMUS_VARIATIONT_RANDOM_ROW   = 0x4
+};
+
+enum enumDMUS_EMBELLISHT_TYPES {
+	DMUS_EMBELLISHT_NORMAL = 0x0000,
+	DMUS_EMBELLISHT_FILL   = 0x0001,
+	DMUS_EMBELLISHT_BREAK  = 0x0002,
+	DMUS_EMBELLISHT_INTRO  = 0x0004,
+	DMUS_EMBELLISHT_END    = 0x0008,
+	DMUS_EMBELLISHT_MOTIF  = 0x0010,
+	DMUS_EMBELLISHT_ALL    = 0xFFFF
+};
+
+enum enumDMUS_PATTERNT_TYPES {
+	DMUS_PATTERNT_RANDOM       = 0x0,
+	DMUS_PATTERNT_REPEAT       = 0x1,
+	DMUS_PATTERNT_SEQUENTIAL   = 0x2,
+	DMUS_PATTERNT_RANDOM_START = 0x3,
+	DMUS_PATTERNT_NO_REPEAT    = 0x4,
+	DMUS_PATTERNT_RANDOM_ROW   = 0x5
+};
+
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_IO_SEQ_ITEM                       DMUS_IO_SEQ_ITEM,                       *LPDMUS_IO_SEQ_ITEM;
+typedef struct _DMUS_IO_CURVE_ITEM                     DMUS_IO_CURVE_ITEM,                     *LPDMUS_IO_CURVE_ITEM;
+typedef struct _DMUS_IO_TEMPO_ITEM                     DMUS_IO_TEMPO_ITEM,                     *LPDMUS_IO_TEMPO_ITEM;
+typedef struct _DMUS_IO_SYSEX_ITEM                     DMUS_IO_SYSEX_ITEM,                     *LPDMUS_IO_SYSEX_ITEM;
+typedef struct  DMUS_CHORD_KEY                         DMUS_CHORD_PARAM,                       *LPDMUS_CHORD_PARAM; /* in dmusici.h */
+typedef struct _DMUS_RHYTHM_PARAM                      DMUS_RHYTHM_PARAM,                      *LPDMUS_RHYTHM_PARAM;
+typedef struct _DMUS_TEMPO_PARAM                       DMUS_TEMPO_PARAM,                       *LPDMUS_TEMPO_PARAM;
+typedef struct _DMUS_MUTE_PARAM                        DMUS_MUTE_PARAM,                        *LPDMUS_MUTE_PARAM;
+typedef struct _DMUS_IO_TIMESIG                        DMUS_IO_TIMESIG,                        *LPDMUS_IO_TIMESIG;
+typedef struct _DMUS_IO_STYLE                          DMUS_IO_STYLE,                          *LPDMUS_IO_STYLE;
+typedef struct _DMUS_IO_VERSION                        DMUS_IO_VERSION,                        *LPDMUS_IO_VERSION;
+typedef struct _DMUS_IO_PATTERN                        DMUS_IO_PATTERN,                        *LPDMUS_IO_PATTERN;
+typedef struct _DMUS_IO_STYLEPART                      DMUS_IO_STYLEPART,                      *LPDMUS_IO_STYLEPART;
+typedef struct _DMUS_IO_PARTREF                        DMUS_IO_PARTREF,                        *LPDMUS_IO_PARTREF;
+typedef struct _DMUS_IO_STYLENOTE                      DMUS_IO_STYLENOTE,                      *LPDMUS_IO_STYLENOTE;
+typedef struct _DMUS_IO_STYLECURVE                     DMUS_IO_STYLECURVE,                     *LPDMUS_IO_STYLECURVE;
+typedef struct _DMUS_IO_STYLEMARKER                    DMUS_IO_STYLEMARKER,                    *LPDMUS_IO_STYLEMARKER;
+typedef struct _DMUS_IO_STYLERESOLUTION                DMUS_IO_STYLERESOLUTION,                *LPDMUS_IO_STYLERESOLUTION;
+typedef struct _DMUS_IO_STYLE_ANTICIPATION             DMUS_IO_STYLE_ANTICIPATION,             *LPDMUS_IO_STYLE_ANTICIPATION;
+typedef struct _DMUS_IO_MOTIFSETTINGS                  DMUS_IO_MOTIFSETTINGS,                  *LPDMUS_IO_MOTIFSETTINGS;
+typedef struct _DMUS_IO_CHORD                          DMUS_IO_CHORD,                          *LPDMUS_IO_CHORD;
+typedef struct _DMUS_IO_SUBCHORD                       DMUS_IO_SUBCHORD,                       *LPDMUS_IO_SUBCHORD;
+typedef struct _DMUS_IO_COMMAND                        DMUS_IO_COMMAND,                        *LPDMUS_IO_COMMAND;
+typedef struct _DMUS_IO_TOOL_HEADER                    DMUS_IO_TOOL_HEADER,                    *LPDMUS_IO_TOOL_HEADER;
+typedef struct _DMUS_IO_PORTCONFIG_HEADER              DMUS_IO_PORTCONFIG_HEADER,              *LPDMUS_IO_PORTCONFIG_HEADER;
+typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER        DMUS_IO_PCHANNELTOBUFFER_HEADER,        *LPDMUS_IO_PCHANNELTOBUFFER_HEADER;
+typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER       DMUS_IO_BUFFER_ATTRIBUTES_HEADER,       *LPDMUS_IO_BUFFER_ATTRIBUTES_HEADER;
+typedef struct _DMUS_IO_BAND_TRACK_HEADER              DMUS_IO_BAND_TRACK_HEADER,              *LPDMUS_IO_BAND_TRACK_HEADER;
+typedef struct _DMUS_IO_BAND_ITEM_HEADER               DMUS_IO_BAND_ITEM_HEADER,               *LPDMUS_IO_BAND_ITEM_HEADER;
+typedef struct _DMUS_IO_BAND_ITEM_HEADER2              DMUS_IO_BAND_ITEM_HEADER2,              *LPDMUS_IO_BAND_ITEM_HEADER2;
+typedef struct _DMUS_IO_INSTRUMENT                     DMUS_IO_INSTRUMENT,                     *LPDMUS_IO_INSTRUMENT;
+typedef struct _DMUS_IO_WAVE_HEADER                    DMUS_IO_WAVE_HEADER,                    *LPDMUS_IO_WAVE_HEADER;
+typedef struct _DMUS_IO_WAVE_TRACK_HEADER              DMUS_IO_WAVE_TRACK_HEADER,              *LPDMUS_IO_WAVE_TRACK_HEADER;
+typedef struct _DMUS_IO_WAVE_PART_HEADER               DMUS_IO_WAVE_PART_HEADER,               *LPDMUS_IO_WAVE_PART_HEADER;
+typedef struct _DMUS_IO_WAVE_ITEM_HEADER               DMUS_IO_WAVE_ITEM_HEADER,               *LPDMUS_IO_WAVE_ITEM_HEADER;
+typedef struct _DMUS_IO_CONTAINER_HEADER               DMUS_IO_CONTAINER_HEADER,               *LPDMUS_IO_CONTAINER_HEADER;
+typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER        DMUS_IO_CONTAINED_OBJECT_HEADER,        *LPDMUS_IO_CONTAINED_OBJECT_HEADER;
+typedef struct _DMUS_IO_SEGMENT_HEADER                 DMUS_IO_SEGMENT_HEADER,                 *LPDMUS_IO_SEGMENT_HEADER;	
+typedef struct _DMUS_IO_TRACK_HEADER                   DMUS_IO_TRACK_HEADER,                   *LPDMUS_IO_TRACK_HEADER;
+typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER            DMUS_IO_TRACK_EXTRAS_HEADER,            *LPDMUS_IO_TRACK_EXTRAS_HEADER;
+typedef struct _DMUS_IO_REFERENCE                      DMUS_IO_REFERENCE,                      *LPDMUS_IO_REFERENCE;
+typedef struct _DMUS_IO_CHORDMAP                       DMUS_IO_CHORDMAP,                       *LPDMUS_IO_CHORDMAP;
+typedef struct _DMUS_IO_CHORDMAP_SUBCHORD              DMUS_IO_CHORDMAP_SUBCHORD,              *LPDMUS_IO_CHORDMAP_SUBCHORD;
+typedef struct _DMUS_IO_CHORDMAP_SUBCHORD              DMUS_IO_PERS_SUBCHORD,                  *LPDMUS_IO_PERS_SUBCHORD;
+typedef struct _DMUS_IO_CHORDENTRY                     DMUS_IO_CHORDENTRY,                     *LPDMUS_IO_CHORDENTRY;
+typedef struct _DMUS_IO_NEXTCHORD                      DMUS_IO_NEXTCHORD,                      *LPDMUS_IO_NEXTCHORD;
+typedef struct _DMUS_IO_CHORDMAP_SIGNPOST              DMUS_IO_CHORDMAP_SIGNPOST,              *LPDMUS_IO_CHORDMAP_SIGNPOST;
+typedef struct _DMUS_IO_CHORDMAP_SIGNPOST              DMUS_IO_PERS_SIGNPOST,                  *LPDMUS_IO_PERS_SIGNPOST;
+typedef struct _DMUS_IO_SCRIPT_HEADER                  DMUS_IO_SCRIPT_HEADER,                  *LPDMUS_IO_SCRIPT_HEADER;
+typedef struct _DMUS_IO_SIGNPOST                       DMUS_IO_SIGNPOST,                       *LPDMUS_IO_SIGNPOST;
+typedef struct _DMUS_IO_MUTE                           DMUS_IO_MUTE,                           *LPDMUS_IO_MUTE;
+typedef struct _DMUS_IO_TIMESIGNATURE_ITEM             DMUS_IO_TIMESIGNATURE_ITEM,             *LPDMUS_IO_TIMESIGNATURE_ITEM;
+typedef struct _DMUS_IO_VALID_START                    DMUS_IO_VALID_START,                    *LPDMUS_IO_VALID_START;
+typedef struct _DMUS_IO_PLAY_MARKER                    DMUS_IO_PLAY_MARKER,                    *LPDMUS_IO_PLAY_MARKER;
+typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER           DMUS_IO_SEGMENT_TRACK_HEADER,           *LPDMUS_IO_SEGMENT_TRACK_HEADER;
+typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER            DMUS_IO_SEGMENT_ITEM_HEADER,            *LPDMUS_IO_SEGMENT_ITEM_HEADER;
+typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER        DMUS_IO_SCRIPTTRACK_EVENTHEADER,        *LPDMUS_IO_SCRIPTTRACK_EVENTHEADER;
+typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER        DMUS_IO_LYRICSTRACK_EVENTHEADER,        *LPDMUS_IO_LYRICSTRACK_EVENTHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER  DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER,  *LPDMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO    DMUS_IO_PARAMCONTROLTRACK_CURVEINFO,    *LPDMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
+typedef struct _DSOUND_IO_DSBUFFERDESC                 DSOUND_IO_DSBUFFERDESC,                 *LPDSOUND_IO_DSBUFFERDESC;
+typedef struct _DSOUND_IO_DSBUSID                      DSOUND_IO_DSBUSID,                      *LPDSOUND_IO_DSBUSID;
+typedef struct _DSOUND_IO_3D                           DSOUND_IO_3D,                           *LPDSOUND_IO_3D;
+typedef struct _DSOUND_IO_DXDMO_HEADER                 DSOUND_IO_DXDMO_HEADER,                 *LPDSOUND_IO_DXDMO_HEADER;
+typedef struct _DSOUND_IO_DXDMO_DATA                   DSOUND_IO_DXDMO_DATA,                   *LPDSOUND_IO_DXDMO_DATA;
+
+/* actual structures */
+struct _DMUS_IO_SEQ_ITEM {
+	MUSIC_TIME mtTime;
+	MUSIC_TIME mtDuration;
+	DWORD      dwPChannel;
+	short      nOffset; 
+	BYTE       bStatus;
+	BYTE       bByte1;
+	BYTE       bByte2;
+};
+
+struct _DMUS_IO_CURVE_ITEM {
+	MUSIC_TIME mtStart;
+	MUSIC_TIME mtDuration;
+	MUSIC_TIME mtResetDuration;
+	DWORD      dwPChannel;
+	short      nOffset;
+	short      nStartValue;
+	short      nEndValue;
+	short      nResetValue;
+	BYTE       bType;
+	BYTE       bCurveShape;
+	BYTE       bCCData;
+	BYTE       bFlags;
+	/* DX8 */
+	WORD       wParamType;
+	WORD       wMergeIndex;
+};
+
+struct _DMUS_IO_TEMPO_ITEM {
+	MUSIC_TIME lTime;
+	double     dblTempo;
+};
+
+struct _DMUS_IO_SYSEX_ITEM {
+	MUSIC_TIME mtTime;
+	DWORD      dwPChannel;
+	DWORD      dwSysExLength;
+};
+
+struct _DMUS_RHYTHM_PARAM {
+	DMUS_TIMESIGNATURE TimeSig;
+	DWORD              dwRhythmPattern;
+};
+
+struct _DMUS_TEMPO_PARAM {
+	MUSIC_TIME mtTime;
+	double     dblTempo;
+};
+
+struct _DMUS_MUTE_PARAM {
+	DWORD dwPChannel;
+	DWORD dwPChannelMap;
+	BOOL  fMute;
+};
+
+#pragma pack(2)
+struct _DMUS_IO_TIMESIG {
+	BYTE bBeatsPerMeasure;
+	BYTE bBeat;
+	WORD wGridsPerBeat;
+};
+
+struct _DMUS_IO_STYLE {
+	DMUS_IO_TIMESIG timeSig;
+	double          dblTempo;   
+};
+
+struct _DMUS_IO_VERSION {
+	DWORD dwVersionMS;
+	DWORD dwVersionLS;
+};
+
+struct _DMUS_IO_PATTERN {
+	DMUS_IO_TIMESIG timeSig;
+	BYTE            bGrooveBottom;
+	BYTE            bGrooveTop;
+	WORD            wEmbellishment;
+	WORD            wNbrMeasures;
+	BYTE            bDestGrooveBottom;
+	BYTE            bDestGrooveTop;
+	DWORD           dwFlags;
+};
+
+struct _DMUS_IO_STYLEPART {
+	DMUS_IO_TIMESIG timeSig;
+	DWORD           dwVariationChoices[32];
+	GUID            guidPartID;
+	WORD            wNbrMeasures;
+	BYTE            bPlayModeFlags;
+	BYTE            bInvertUpper;
+	BYTE            bInvertLower;
+	BYTE            bPad[3];
+	DWORD           dwFlags;
+};
+
+struct _DMUS_IO_PARTREF {
+	GUID  guidPartID;
+	WORD  wLogicalPartID;
+	BYTE  bVariationLockID;
+	BYTE  bSubChordLevel;
+	BYTE  bPriority;
+	BYTE  bRandomVariation;
+	WORD  wPad;
+	DWORD dwPChannel;
+};
+
+
+struct _DMUS_IO_STYLENOTE {
+	MUSIC_TIME mtGridStart;
+	DWORD      dwVariation;
+	MUSIC_TIME mtDuration;
+	short      nTimeOffset;
+	WORD       wMusicValue;
+	BYTE       bVelocity;
+	BYTE       bTimeRange;
+	BYTE       bDurRange;
+	BYTE       bVelRange;
+	BYTE       bInversionID;
+	BYTE       bPlayModeFlags;
+	 /* DX8 */
+	BYTE       bNoteFlags;
+};
+
+struct _DMUS_IO_STYLECURVE {
+	MUSIC_TIME mtGridStart;
+	DWORD      dwVariation;
+	MUSIC_TIME mtDuration;
+	MUSIC_TIME mtResetDuration;
+	short      nTimeOffset;
+	short      nStartValue;
+	short      nEndValue;
+	short      nResetValue;
+	BYTE       bEventType;
+	BYTE       bCurveShape;
+	BYTE       bCCData;
+	BYTE       bFlags;
+	/* DX8 */
+	WORD       wParamType;
+	WORD       wMergeIndex;
+};
+
+struct _DMUS_IO_STYLEMARKER {
+	MUSIC_TIME mtGridStart;
+	DWORD      dwVariation;
+	WORD       wMarkerFlags;
+};
+
+struct _DMUS_IO_STYLERESOLUTION {
+	DWORD dwVariation;
+	WORD  wMusicValue;
+	BYTE  bInversionID;
+	BYTE  bPlayModeFlags;
+};
+
+struct _DMUS_IO_STYLE_ANTICIPATION {
+	MUSIC_TIME mtGridStart;
+	DWORD      dwVariation;
+	short      nTimeOffset;
+	BYTE       bTimeRange;
+};
+
+struct _DMUS_IO_MOTIFSETTINGS {
+	DWORD      dwRepeats;
+	MUSIC_TIME mtPlayStart;
+	MUSIC_TIME mtLoopStart;
+	MUSIC_TIME mtLoopEnd;
+	DWORD      dwResolution;
+};
+#pragma pack()
+
+struct _DMUS_IO_CHORD {
+	WCHAR      wszName[16];
+	MUSIC_TIME mtTime;
+	WORD       wMeasure;
+	BYTE       bBeat;
+	BYTE       bFlags;
+};
+
+struct _DMUS_IO_SUBCHORD {
+	DWORD dwChordPattern;
+	DWORD dwScalePattern;
+	DWORD dwInversionPoints;
+	DWORD dwLevels;
+	BYTE  bChordRoot;
+	BYTE  bScaleRoot;
+};
+
+struct _DMUS_IO_COMMAND {
+	MUSIC_TIME mtTime;
+	WORD       wMeasure;
+	BYTE       bBeat;
+	BYTE       bCommand;
+	BYTE       bGrooveLevel;
+	BYTE       bGrooveRange;
+	BYTE       bRepeatMode;
+};
+
+struct _DMUS_IO_TOOL_HEADER {
+	GUID   guidClassID;
+	LONG   lIndex;
+	DWORD  cPChannels;
+	FOURCC ckid;
+	FOURCC fccType;
+	DWORD  dwPChannels[1];
+};
+
+struct _DMUS_IO_PORTCONFIG_HEADER {
+	GUID  guidPort;
+	DWORD dwPChannelBase;
+	DWORD dwPChannelCount;
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_PCHANNELTOBUFFER_HEADER {
+	DWORD dwPChannelBase;
+	DWORD dwPChannelCount;
+	DWORD dwBufferCount;
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER {
+	GUID  guidBufferID;
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_BAND_TRACK_HEADER {
+	BOOL bAutoDownload;
+};
+
+struct _DMUS_IO_BAND_ITEM_HEADER {
+	MUSIC_TIME lBandTime;
+};
+
+struct _DMUS_IO_BAND_ITEM_HEADER2 {
+	MUSIC_TIME lBandTimeLogical;
+	MUSIC_TIME lBandTimePhysical;
+};
+
+struct _DMUS_IO_INSTRUMENT {
+	DWORD dwPatch;
+	DWORD dwAssignPatch;
+	DWORD dwNoteRanges[4];
+	DWORD dwPChannel;
+	DWORD dwFlags;
+	BYTE  bPan;
+	BYTE  bVolume;
+	short nTranspose;
+	DWORD dwChannelPriority;
+	short nPitchBendRange;
+};
+
+struct _DMUS_IO_WAVE_HEADER {
+	REFERENCE_TIME rtReadAhead;
+	DWORD          dwFlags;
+};
+
+struct _DMUS_IO_WAVE_TRACK_HEADER {
+	LONG  lVolume;
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_WAVE_PART_HEADER {
+    LONG  lVolume;
+    DWORD dwVariations;
+    DWORD dwPChannel;
+    DWORD dwLockToPart;
+    DWORD dwFlags;
+    DWORD dwIndex;
+};
+
+struct _DMUS_IO_WAVE_ITEM_HEADER  {
+	LONG           lVolume;
+	LONG           lPitch;
+	DWORD          dwVariations;
+	REFERENCE_TIME rtTime;
+	REFERENCE_TIME rtStartOffset;
+	REFERENCE_TIME rtReserved;
+	REFERENCE_TIME rtDuration;
+	MUSIC_TIME     mtLogicalTime;
+	DWORD          dwLoopStart;
+	DWORD          dwLoopEnd;
+	DWORD          dwFlags;
+	WORD           wVolumeRange;
+	WORD           wPitchRange;
+};
+
+struct _DMUS_IO_CONTAINER_HEADER {
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_CONTAINED_OBJECT_HEADER {
+	GUID   guidClassID;
+	DWORD  dwFlags;
+	FOURCC ckid;
+	FOURCC fccType;
+};
+
+struct _DMUS_IO_SEGMENT_HEADER {
+	DWORD          dwRepeats;
+	MUSIC_TIME     mtLength;
+	MUSIC_TIME     mtPlayStart;
+	MUSIC_TIME     mtLoopStart;
+	MUSIC_TIME     mtLoopEnd;
+	DWORD          dwResolution;
+	/* DX8 */
+	REFERENCE_TIME rtLength;
+	DWORD          dwFlags;
+	DWORD          dwReserved;
+	/* DX9 */
+	REFERENCE_TIME rtLoopStart;
+	REFERENCE_TIME rtLoopEnd;
+	REFERENCE_TIME rtPlayStart;
+};
+
+struct _DMUS_IO_TRACK_HEADER {
+	GUID   guidClassID;
+	DWORD  dwPosition;
+	DWORD  dwGroup;
+	FOURCC ckid;
+	FOURCC fccType;
+};
+
+struct _DMUS_IO_TRACK_EXTRAS_HEADER {
+	DWORD dwFlags;
+	DWORD dwPriority;
+};
+
+struct _DMUS_IO_REFERENCE {
+	GUID  guidClassID;
+	DWORD dwValidData;
+};
+
+struct _DMUS_IO_CHORDMAP {
+	WCHAR wszLoadName[20];
+	DWORD dwScalePattern;
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_CHORDMAP_SUBCHORD {
+	DWORD dwChordPattern;
+	DWORD dwScalePattern;
+	DWORD dwInvertPattern;
+	BYTE  bChordRoot;
+	BYTE  bScaleRoot;
+	WORD  wCFlags;
+	DWORD dwLevels;
+};
+
+struct _DMUS_IO_CHORDENTRY {
+	DWORD dwFlags;
+	WORD  wConnectionID;
+};
+
+struct _DMUS_IO_NEXTCHORD {
+	DWORD dwFlags;
+	WORD  nWeight;
+	WORD  wMinBeats;
+	WORD  wMaxBeats;
+	WORD  wConnectionID;
+};
+
+struct _DMUS_IO_CHORDMAP_SIGNPOST {
+	DWORD dwChords;
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_SCRIPT_HEADER {
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_SIGNPOST {
+	MUSIC_TIME mtTime;
+	DWORD      dwChords;
+	WORD       wMeasure;
+};
+
+struct _DMUS_IO_MUTE {
+	MUSIC_TIME mtTime;
+	DWORD      dwPChannel;
+	DWORD      dwPChannelMap;
+};
+
+struct _DMUS_IO_TIMESIGNATURE_ITEM {
+	MUSIC_TIME lTime;
+	BYTE       bBeatsPerMeasure;
+	BYTE       bBeat;
+	WORD       wGridsPerBeat;
+};
+
+struct _DMUS_IO_VALID_START {
+	MUSIC_TIME mtTime;
+};
+
+struct _DMUS_IO_PLAY_MARKER {
+	MUSIC_TIME mtTime;
+};
+
+struct _DMUS_IO_SEGMENT_TRACK_HEADER {
+	DWORD dwFlags;
+};
+
+struct _DMUS_IO_SEGMENT_ITEM_HEADER {
+	MUSIC_TIME lTimeLogical;
+	MUSIC_TIME lTimePhysical;
+	DWORD      dwPlayFlags;
+	DWORD      dwFlags;
+};
+
+struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER {
+	DWORD      dwFlags;
+	MUSIC_TIME lTimeLogical;
+	MUSIC_TIME lTimePhysical;
+};
+
+struct _DMUS_IO_LYRICSTRACK_EVENTHEADER {
+	DWORD dwFlags;
+	DWORD dwTimingFlags;
+	MUSIC_TIME lTimeLogical;
+	MUSIC_TIME lTimePhysical;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER {
+	DWORD dwFlags;
+	GUID guidTimeFormat;
+	DWORD dwPChannel;
+	DWORD dwStage;
+	DWORD dwBuffer;
+	GUID guidObject;
+	DWORD dwIndex;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER {
+	DWORD dwFlags;
+	DWORD dwIndex;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO {
+	MUSIC_TIME mtStartTime;
+	MUSIC_TIME mtEndTime;
+	float      fltStartValue;
+	float      fltEndValue;
+	DWORD      dwCurveType;
+	DWORD      dwFlags;
+};
+
+struct _DSOUND_IO_DSBUFFERDESC {
+	DWORD dwFlags;
+	WORD  nChannels;
+	LONG  lVolume;
+	LONG  lPan;
+	DWORD dwReserved;
+};
+
+struct _DSOUND_IO_DSBUSID {
+	DWORD busid[1];
+};
+
+struct _DSOUND_IO_3D {
+	GUID guid3DAlgorithm;
+	DS3DBUFFER ds3d;
+};
+
+struct _DSOUND_IO_DXDMO_HEADER {
+	DWORD dwEffectFlags;
+	GUID  guidDSFXClass;
+	GUID  guidReserved;
+	GUID  guidSendBuffer;
+	DWORD dwReserved;
+};
+
+struct _DSOUND_IO_DXDMO_DATA {
+	DWORD data[1];
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_FILEFORMATS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h
new file mode 100644
index 0000000..1d23d0c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h
@@ -0,0 +1,1743 @@
+/*
+ *  DirectMusic Performance API
+ *
+ *  Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ *  This program 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 program 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 program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_PERFORMANCE_H
+#define __WINE_DMUSIC_PERFORMANCE_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+#include <dmusicc.h>
+#include <dmplugin.h>
+#include <pshpack8.h>
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef AddPort
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusicAudioPathConfig,              0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(CLSID_DirectMusicBand,                         0x79ba9e00,0xb6ee,0x11d1,0x86,0xbe,0x00,0xc0,0x4f,0xbf,0x8f,0xef);
+DEFINE_GUID(CLSID_DirectMusicChordMap,                     0xd2ac288f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicComposer,                     0xd2ac2890,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicContainer,                    0x9301e380,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
+DEFINE_GUID(CLSID_DirectMusicGraph,                        0xd2ac2884,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicLoader,                       0xd2ac2892,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicPatternTrack,                 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicPerformance,                  0xd2ac2881,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicScript,                       0x810b5013,0xe88d,0x11d2,0x8b,0xc1,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSegment,                      0xd2ac2882,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegmentState,                 0xd2ac2883,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyle,                        0xd2ac288a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectSoundWave,                         0x8a667154,0xf9cb,0x11d2,0xad,0x8a,0x00,0x60,0xb0,0x57,0x5a,0xbc);
+/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */
+DEFINE_GUID(CLSID_DirectMusicSong,                         0xaed5f0a5,0xd972,0x483d,0xa3,0x84,0x64,0x9d,0xfe,0xb9,0xc1,0x81);
+/* these CLSIDs aren't officially declared in any dmusic header, but are used by wine's regsvr implementations*/
+DEFINE_GUID(CLSID_DirectMusicSynthSink,                    0xaec17ce3,0xa514,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSection,                      0x3f037241,0x414e,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
+DEFINE_GUID(CLSID_DirectMusicAuditionTrack,                0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegTriggerTrack,              0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicAudioPath,                    0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(CLSID_DirectMusicTemplate,                     0xd30bcc65,0x60e8,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegment,         0x4062c116,0x0270,0x11d3,0x8b,0xcb,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_AudioVBScript,                           0x4ee17959,0x931e,0x49e4,0xa2,0xc6,0x97,0x7e,0xcf,0x36,0x28,0xf3);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpPerformance,     0xa861c6e2,0xfcfc,0x11d2,0x8b,0xc9,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptSourceCodeLoader,       0xc70eb77f,0xefd4,0x4678,0xa2,0x7b,0xbf,0x16,0x48,0xf3,0x0d,0x04);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegmentState,    0xebf2320a,0x2502,0x11d3,0x8b,0xd1,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPathConfig, 0x1cebde3e,0x6b91,0x484a,0xaf,0x48,0x5e,0x4f,0x4e,0xd6,0xb1,0xe1);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPath,       0x2c5f9b72,0x7148,0x4d97,0xbf,0xc9,0x68,0xa0,0xe0,0x76,0xbe,0xbd);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSong,            0xa16f1761,0xb6d8,0x42eb,0x8d,0x57,0x4a,0x44,0xfe,0xdd,0x3b,0xd2);
+
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicAudioPath,                     0xc87631f5,0x23be,0x4986,0x88,0x36,0x05,0x83,0x2f,0xcc,0x48,0xf9);
+DEFINE_GUID(IID_IDirectMusicBand,                          0xd2ac28c0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicChordMap,                      0xd2ac28be,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicComposer,                      0xd2ac28bf,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicContainer,                     0x9301e386,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
+DEFINE_GUID(IID_IDirectMusicGetLoader,                     0x68a04844,0xd13d,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicGraph,                         0x2befc277,0x5497,0x11d2,0xbc,0xcb,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(IID_IDirectMusicLoader,                        0x2ffaaca2,0x5dca,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicLoader8,                       0x19e7c08c,0x0a44,0x4e6a,0xa1,0x16,0x59,0x5a,0x7c,0xd5,0xde,0x8c);
+DEFINE_GUID(IID_IDirectMusicObject,                        0xd2ac28b5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPatternTrack,                  0x51c22e10,0xb49f,0x46fc,0xbe,0xc2,0xe6,0x28,0x8f,0xb9,0xed,0xe6);
+DEFINE_GUID(IID_IDirectMusicPerformance,                   0x07d43d03,0x6523,0x11d2,0x87,0x1d,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPerformance2,                  0x6fc2cae0,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicPerformance8,                  0x679c4137,0xc62e,0x4147,0xb2,0xb4,0x9d,0x56,0x9a,0xcb,0x25,0x4c);
+DEFINE_GUID(IID_IDirectMusicScript,                        0x2252373a,0x5814,0x489b,0x82,0x09,0x31,0xfe,0xde,0xba,0xf1,0x37);
+DEFINE_GUID(IID_IDirectMusicSegment,                       0xf96029a2,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment2,                      0xd38894d1,0xc052,0x11d2,0x87,0x2f,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment8,                      0xc6784488,0x41a3,0x418f,0xaa,0x15,0xb3,0x50,0x93,0xba,0x42,0xd4);
+DEFINE_GUID(IID_IDirectMusicSegmentState,                  0xa3afdcc7,0xd3ee,0x11d1,0xbc,0x8d,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(IID_IDirectMusicSegmentState8,                 0xa50e4730,0x0ae4,0x48a7,0x98,0x39,0xbc,0x04,0xbf,0xe0,0x77,0x72);
+DEFINE_GUID(IID_IDirectMusicStyle,                         0xd2ac28bd,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicStyle8,                        0xfd24ad8a,0xa260,0x453d,0xbf,0x50,0x6f,0x93,0x84,0xf7,0x09,0x85);
+
+/* IIDs of unchanged interfaces */
+#define IID_IDirectMusicAudioPath8    IID_IDirectMusicAudioPath
+#define IID_IDirectMusicBand8         IID_IDirectMusicBand
+#define IID_IDirectMusicChordMap8     IID_IDirectMusicChordMap
+#define IID_IDirectMusicComposer8     IID_IDirectMusicComposer
+#define IID_IDirectMusicContainer8    IID_IDirectMusicContainer
+#define IID_IDirectMusicGetLoader8    IID_IDirectMusicGetLoader
+#define IID_IDirectMusicGraph8        IID_IDirectMusicGraph
+#define IID_IDirectMusicObject8       IID_IDirectMusicObject
+#define IID_IDirectMusicPatternTrack8 IID_IDirectMusicPatternTrack
+#define IID_IDirectMusicScript8       IID_IDirectMusicScript
+
+/* typedef definitions */
+typedef struct IDirectMusicBand *LPDIRECTMUSICBAND;
+typedef struct IDirectMusicBand         IDirectMusicBand8,         *LPDIRECTMUSICBAND8;
+typedef struct IDirectMusicObject *LPDIRECTMUSICOBJECT;
+typedef struct IDirectMusicObject       IDirectMusicObject8,       *LPDIRECTMUSICOBJECT8;
+typedef struct IDirectMusicLoader *LPDIRECTMUSICLOADER;
+typedef struct IDirectMusicLoader8 *LPDIRECTMUSICLOADER8;
+typedef struct IDirectMusicGetLoader *LPDIRECTMUSICGETLOADER;
+typedef struct IDirectMusicGetLoader    IDirectMusicGetLoader8,    *LPDIRECTMUSICGETLOADER8;
+typedef struct IDirectMusicAudioPath *LPDIRECTMUSICAUDIOPATH;
+typedef struct IDirectMusicAudioPath    IDirectMusicAudioPath8,    *LPDIRECTMUSICAUDIOPATH8;
+typedef struct IDirectMusicStyle *LPDIRECTMUSICSTYLE;
+typedef struct IDirectMusicStyle8 *LPDIRECTMUSICSTYLE8;
+typedef struct IDirectMusicChordMap *LPDIRECTMUSICCHORDMAP;
+typedef struct IDirectMusicChordMap     IDirectMusicChordMap8,     *LPDIRECTMUSICCHORDMAP8;
+typedef struct IDirectMusicComposer *LPDIRECTMUSICCOMPOSER;
+typedef struct IDirectMusicComposer     IDirectMusicComposer8,     *LPDIRECTMUSICCOMPOSER8;
+typedef struct IDirectMusicPatternTrack *LPDIRECTMUSICPATTERNTRACK;
+typedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack8, *LPDIRECTMUSICPATTERNTRACK8;
+typedef struct IDirectMusicScript *LPDIRECTMUSICSCRIPT;
+typedef struct IDirectMusicScript       IDirectMusicScript8,       *LPDIRECTMUSICSCRIPT8;
+typedef struct IDirectMusicContainer *LPDIRECTMUSICCONTAINER;
+typedef struct IDirectMusicContainer    IDirectMusicContainer8,    *LPDIRECTMUSICCONTAINER8;
+
+/* RPC declarations */
+typedef struct IDirectMusicBand   *LPDMUS_BAND;
+typedef struct IDirectMusicLoader *LPDMUS_LOADER;
+typedef struct IDirectMusicObject *LPDMUS_OBJECT;
+
+/* GUIDs - all types loader */
+DEFINE_GUID(GUID_DirectMusicAllTypes,         0xd2ac2893,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUIDs - notification */
+DEFINE_GUID(GUID_NOTIFICATION_CHORD,          0xd2ac289b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_COMMAND,        0xd2ac289c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT, 0xd2ac289a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE,    0x81f75bc5,0x4e5d,0x11d2,0xbc,0xc7,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE,      0xd348372b,0x945b,0x45ae,0xa5,0x22,0x45,0x0f,0x12,0x5b,0x84,0xa5);
+DEFINE_GUID(GUID_NOTIFICATION_SEGMENT,        0xd2ac2899,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUIDs - param types */
+DEFINE_GUID(GUID_BandParam,                   0x02bb1938,0xcb8b,0x11d2,0x8b,0xb9,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(GUID_ChordParam,                  0xd2ac289e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_CommandParam,                0xd2ac289d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_CommandParam2,               0x28f97ef7,0x9538,0x11d2,0x97,0xa9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_CommandParamNext,            0x472afe7a,0x281b,0x11d3,0x81,0x7d,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_IDirectMusicBand,            0xd2ac28ac,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_IDirectMusicChordMap,        0xd2ac28ad,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_IDirectMusicStyle,           0xd2ac28a1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_MuteParam,                   0xd2ac28af,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_Play_Marker,                 0xd8761a41,0x801a,0x11d3,0x9b,0xd1,0xda,0xf7,0xe1,0xc3,0xd8,0x34);
+DEFINE_GUID(GUID_RhythmParam,                 0xd2ac289f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_TempoParam,                  0xd2ac28a5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_TimeSignature,               0xd2ac28a4,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_Valid_Start_Time,            0x7f6b1760,0x1fdb,0x11d3,0x82,0x26,0x44,0x45,0x53,0x54,0x00,0x00);
+/* GUIDs - param setting */
+DEFINE_GUID(GUID_Clear_All_Bands,             0xd2ac28ab,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_ConnectToDLSCollection,      0x1db1ae6b,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);
+DEFINE_GUID(GUID_Disable_Auto_Download,       0xd2ac28aa,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DisableTempo,                0x45fc707d,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_DisableTimeSig,              0x45fc707b,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_Download,                    0xd2ac28a7,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DownloadToAudioPath,         0x9f2c0341,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Enable_Auto_Download,        0xd2ac28a9,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_EnableTempo,                 0x45fc707e,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_EnableTimeSig,               0x45fc707c,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+#define GUID_IgnoreBankSelectForGM            GUID_StandardMIDIFile
+DEFINE_GUID(GUID_SeedVariations,              0x65b76fa5,0xff37,0x11d2,0x81,0x4e,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_StandardMIDIFile,            0x06621075,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);
+DEFINE_GUID(GUID_Unload,                      0xd2ac28a8,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_UnloadFromAudioPath,         0x9f2c0342,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Variations,                  0x11f72cce,0x26e6,0x4ecd,0xaf,0x2e,0xd6,0x68,0xe6,0x67,0x07,0xd8);
+/* GUIDs - global data */
+DEFINE_GUID(GUID_PerfMasterTempo,             0xd2ac28b0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfMasterVolume,            0xd2ac28b1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfMasterGrooveLevel,       0xd2ac28b2,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfAutoDownload,            0xfb09565b,0x3631,0x11d2,0xbc,0xb8,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+/* GUID - default DLS collection */
+DEFINE_GUID(GUID_DefaultGMCollection,         0xf17e8673,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUID - default synthesizer */
+DEFINE_GUID(GUID_Synth_Default,               0x26bb9432,0x45fe,0x48d3,0xa3,0x75,0x24,0x72,0xc5,0xe3,0xe7,0x86);
+/* GUIDs - define default buffer configuration */
+DEFINE_GUID(GUID_Buffer_Reverb,               0x186cc541,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_EnvReverb,            0x186cc542,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_Stereo,               0x186cc545,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_3D_Dry,               0x186cc546,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_Mono,                 0x186cc547,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef WORD    TRANSITION_TYPE, *LPTRANSITION_TYPE;
+/*
+ * typedef __int64 REFERENCE_TIME,  *LPREFERENCE_TIME;
+ * typedef LONG    MUSIC_TIME,      *LPMUSIC_TIME;
+ */
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_APATH_SHARED_STEREOPLUSREVERB 0x1
+#define DMUS_APATH_DYNAMIC_3D              0x6
+#define DMUS_APATH_DYNAMIC_MONO            0x7
+#define DMUS_APATH_DYNAMIC_STEREO          0x8
+
+#define DMUS_AUDIOF_3D          0x01
+#define DMUS_AUDIOF_ENVIRON     0x02
+#define DMUS_AUDIOF_EAX         0x04
+#define DMUS_AUDIOF_DMOS        0x08
+#define DMUS_AUDIOF_STREAMING   0x10
+#define DMUS_AUDIOF_BUFFERS     0x20
+#define DMUS_AUDIOF_ALL         0x3F
+
+#define DMUS_AUDIOPARAMS_FEATURES     0x1
+#define DMUS_AUDIOPARAMS_VOICES       0x2
+#define DMUS_AUDIOPARAMS_SAMPLERATE   0x4
+#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x8
+
+#define DMUS_CURVET_PBCURVE   0x03
+#define DMUS_CURVET_CCCURVE   0x04
+#define DMUS_CURVET_MATCURVE  0x05
+#define DMUS_CURVET_PATCURVE  0x06
+#define DMUS_CURVET_RPNCURVE  0x07
+#define DMUS_CURVET_NRPNCURVE 0x08
+
+#define DMUS_MASTERTEMPO_MAX 100.0f
+#define DMUS_MASTERTEMPO_MIN 0.01f
+
+#define DMUS_MAX_NAME     0x40
+#define DMUS_MAX_CATEGORY 0x40
+#define DMUS_MAX_FILENAME MAX_PATH
+
+#define DMUS_MAXSUBCHORD 0x8
+
+#define DMUS_NOTIFICATION_SEGSTART       0x0
+#define DMUS_NOTIFICATION_SEGEND         0x1
+#define DMUS_NOTIFICATION_SEGALMOSTEND   0x2
+#define DMUS_NOTIFICATION_SEGLOOP        0x3
+#define DMUS_NOTIFICATION_SEGABORT       0x4
+#define DMUS_NOTIFICATION_MUSICSTARTED   0x0
+#define DMUS_NOTIFICATION_MUSICSTOPPED   0x1
+#define DMUS_NOTIFICATION_MUSICALMOSTEND 0x2
+#define DMUS_NOTIFICATION_MEASUREBEAT    0x0
+#define DMUS_NOTIFICATION_CHORD          0x0
+#define DMUS_NOTIFICATION_GROOVE         0x0
+#define DMUS_NOTIFICATION_EMBELLISHMENT  0x1
+#define DMUS_NOTIFICATION_RECOMPOSE      0x0
+
+#define DMUS_OBJ_OBJECT   0x001
+#define DMUS_OBJ_CLASS    0x002
+#define DMUS_OBJ_NAME     0x004
+#define DMUS_OBJ_CATEGORY 0x008
+#define DMUS_OBJ_FILENAME 0x010
+#define DMUS_OBJ_FULLPATH 0x020
+#define DMUS_OBJ_URL      0x040
+#define DMUS_OBJ_VERSION  0x080
+#define DMUS_OBJ_DATE     0x100
+#define DMUS_OBJ_LOADED   0x200
+#define DMUS_OBJ_MEMORY   0x400
+#define DMUS_OBJ_STREAM   0x800
+
+#define DMUS_PATH_SEGMENT           0x1000
+#define DMUS_PATH_SEGMENT_TRACK     0x1100
+#define DMUS_PATH_SEGMENT_GRAPH     0x1200
+#define DMUS_PATH_SEGMENT_TOOL      0x1300
+#define DMUS_PATH_AUDIOPATH         0x2000
+#define DMUS_PATH_AUDIOPATH_GRAPH   0x2200
+#define DMUS_PATH_AUDIOPATH_TOOL    0x2300
+#define DMUS_PATH_PERFORMANCE       0x3000
+#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200
+#define DMUS_PATH_PERFORMANCE_TOOL  0x3300
+#define DMUS_PATH_PORT              0x4000
+#define DMUS_PATH_BUFFER            0x6000
+#define DMUS_PATH_BUFFER_DMO        0x6100
+#define DMUS_PATH_MIXIN_BUFFER      0x7000
+#define DMUS_PATH_MIXIN_BUFFER_DMO  0x7100
+#define DMUS_PATH_PRIMARY_BUFFER    0x8000
+
+#define DMUS_PCHANNEL_BROADCAST_PERFORMANCE	0xFFFFFFFF
+#define DMUS_PCHANNEL_BROADCAST_AUDIOPATH   0xFFFFFFFE
+#define DMUS_PCHANNEL_BROADCAST_SEGMENT	    0xFFFFFFFD
+#define DMUS_PCHANNEL_BROADCAST_GROUPS  	0xFFFFFFFC
+#define DMUS_PCHANNEL_ALL                   0xFFFFFFFB 
+
+#define DMUS_PLAYMODE_FIXED             0x0  
+#define DMUS_PLAYMODE_FIXEDTOKEY        DMUS_PLAYMODE_KEY_ROOT
+#define DMUS_PLAYMODE_FIXEDTOCHORD      DMUS_PLAYMODE_CHORD_ROOT
+#define DMUS_PLAYMODE_PEDALPOINT        (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
+#define DMUS_PLAYMODE_MELODIC           (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
+#define DMUS_PLAYMODE_NORMALCHORD       (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)
+#define DMUS_PLAYMODE_ALWAYSPLAY        (DMUS_PLAYMODE_MELODIC | DMUS_PLAYMODE_NORMALCHORD)
+#define DMUS_PLAYMODE_PEDALPOINTCHORD   (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)
+#define DMUS_PLAYMODE_PEDALPOINTALWAYS  (DMUS_PLAYMODE_PEDALPOINT | DMUS_PLAYMODE_PEDALPOINTCHORD)
+#define DMUS_PLAYMODE_PURPLEIZED        DMUS_PLAYMODE_ALWAYSPLAY
+#define DMUS_PLAYMODE_SCALE_ROOT        DMUS_PLAYMODE_KEY_ROOT
+#define DMUS_PLAYMODE_FIXEDTOSCALE      DMUS_PLAYMODE_FIXEDTOKEY
+
+#define DMUS_PPQ 768
+
+#define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF
+#define DMUS_SEG_ALLTRACKS       0x80000000
+#define DMUS_SEG_ANYTRACK        0x80000000
+
+#define DMUS_TEMPO_MAX 1000
+#define DMUS_TEMPO_MIN 1
+
+#define DMUS_TRACKCONFIG_OVERRIDE_ALL          0x00001
+#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY      0x00002
+#define DMUS_TRACKCONFIG_FALLBACK              0x00004
+#define DMUS_TRACKCONFIG_CONTROL_ENABLED       0x00008
+#define DMUS_TRACKCONFIG_PLAY_ENABLED          0x00010
+#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED  0x00020
+#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME        0x00040
+#define DMUS_TRACKCONFIG_PLAY_COMPOSE 	       0x00080
+#define DMUS_TRACKCONFIG_LOOP_COMPOSE          0x00100
+#define DMUS_TRACKCONFIG_COMPOSING             0x00200
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART   0x00400
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x00800
+#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART     0x01000
+#define DMUS_TRACKCONFIG_CONTROL_PLAY          0x10000
+#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION  0x20000
+#define DMUS_TRACKCONFIG_DEFAULT               (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)
+
+#define DMUS_WAVEF_OFF          0x01
+#define DMUS_WAVEF_STREAMING    0x02
+#define DMUS_WAVEF_NOINVALIDATE 0x04
+#define DMUS_WAVEF_NOPREROLL    0x08
+#define DMUS_WAVEF_IGNORELOOPS  0x20
+
+#define DMUSB_LOADED  0x1
+#define DMUSB_DEFAULT 0x2
+
+#define MT_MIN 0x80000000
+#define MT_MAX 0x7FFFFFFF
+
+
+/*****************************************************************************
+ * Definitions
+ */
+#define DMUS_PMSG_PART \
+	DWORD              dwSize; \
+	REFERENCE_TIME     rtTime; \
+	MUSIC_TIME         mtTime; \
+	DWORD              dwFlags; \
+	DWORD              dwPChannel; \
+	DWORD              dwVirtualTrackID; \
+	IDirectMusicTool*  pTool; \
+	struct IDirectMusicGraph* pGraph; \
+	DWORD              dwType; \
+	DWORD              dwVoiceID; \
+	DWORD              dwGroupID; \
+	IUnknown*          punkUser;
+
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_STYLET_TYPES       DMUS_STYLET_TYPES;
+typedef enum enumDMUS_COMMANDT_TYPES     DMUS_COMMANDT_TYPES;
+typedef enum enumDMUS_SHAPET_TYPES       DMUS_SHAPET_TYPES;
+typedef enum enumDMUS_COMPOSEF_FLAGS     DMUS_COMPOSEF_FLAGS;
+typedef enum enumDMUS_PMSGF_FLAGS        DMUS_PMSGF_FLAGS;
+typedef enum enumDMUS_PMSGT_TYPES        DMUS_PMSGT_TYPES;
+typedef enum enumDMUS_SEGF_FLAGS         DMUS_SEGF_FLAGS;
+typedef enum enumDMUS_TIME_RESOLVE_FLAGS DMUS_TIME_RESOLVE_FLAGS;
+typedef enum enumDMUS_CHORDKEYF_FLAGS    DMUS_CHORDKEYF_FLAGS;
+typedef enum enumDMUS_NOTEF_FLAGS        DMUS_NOTEF_FLAGS;
+typedef enum enumDMUS_PLAYMODE_FLAGS     DMUS_PLAYMODE_FLAGS;
+typedef enum enumDMUS_CURVE_FLAGS        DMUS_CURVE_FLAGS;
+
+
+
+/* actual enumerations */
+enum enumDMUS_STYLET_TYPES {
+	DMUS_STYLET_PATTERN = 0x0,
+	DMUS_STYLET_MOTIF   = 0x1,
+};
+
+enum enumDMUS_COMMANDT_TYPES {
+	DMUS_COMMANDT_GROOVE      = 0x0,
+	DMUS_COMMANDT_FILL        = 0x1,
+	DMUS_COMMANDT_INTRO       = 0x2,
+	DMUS_COMMANDT_BREAK       = 0x3,
+	DMUS_COMMANDT_END         = 0x4,
+	DMUS_COMMANDT_ENDANDINTRO = 0x5
+};
+
+enum enumDMUS_SHAPET_TYPES {
+	DMUS_SHAPET_FALLING  = 0x0,
+	DMUS_SHAPET_LEVEL    = 0x1,
+	DMUS_SHAPET_LOOPABLE = 0x2,
+	DMUS_SHAPET_LOUD     = 0x3,
+	DMUS_SHAPET_QUIET    = 0x4,
+	DMUS_SHAPET_PEAKING  = 0x5,
+	DMUS_SHAPET_RANDOM   = 0x6,
+	DMUS_SHAPET_RISING   = 0x7,
+	DMUS_SHAPET_SONG     = 0x8
+};
+
+enum enumDMUS_COMPOSEF_FLAGS {       
+	DMUS_COMPOSEF_NONE                = 0x000000,
+	DMUS_COMPOSEF_ALIGN               = 0x000001,
+	DMUS_COMPOSEF_OVERLAP             = 0x000002,
+	DMUS_COMPOSEF_IMMEDIATE           = 0x000004,
+	DMUS_COMPOSEF_GRID                = 0x000008,
+	DMUS_COMPOSEF_BEAT                = 0x000010,
+	DMUS_COMPOSEF_MEASURE             = 0x000020,
+	DMUS_COMPOSEF_AFTERPREPARETIME    = 0x000040,
+	DMUS_COMPOSEF_VALID_START_BEAT    = 0x000080,
+	DMUS_COMPOSEF_VALID_START_GRID    = 0x000100,
+	DMUS_COMPOSEF_VALID_START_TICK    = 0x000200,
+	DMUS_COMPOSEF_SEGMENTEND          = 0x000400,
+	DMUS_COMPOSEF_MARKER              = 0x000800,
+	DMUS_COMPOSEF_MODULATE            = 0x001000,
+	DMUS_COMPOSEF_LONG                = 0x002000,
+	DMUS_COMPOSEF_ENTIRE_TRANSITION   = 0x004000,
+	DMUS_COMPOSEF_1BAR_TRANSITION     = 0x008000,
+	DMUS_COMPOSEF_ENTIRE_ADDITION     = 0x010000,
+	DMUS_COMPOSEF_1BAR_ADDITION       = 0x020000,
+	DMUS_COMPOSEF_VALID_START_MEASURE = 0x040000,
+	DMUS_COMPOSEF_DEFAULT             = 0x080000,
+	DMUS_COMPOSEF_NOINVALIDATE        = 0x100000,
+	DMUS_COMPOSEF_USE_AUDIOPATH       = 0x200000,
+	DMUS_COMPOSEF_INVALIDATE_PRI      = 0x400000
+};
+
+enum enumDMUS_PMSGF_FLAGS {
+	DMUS_PMSGF_REFTIME        = 1,
+	DMUS_PMSGF_MUSICTIME      = 2,
+	DMUS_PMSGF_TOOL_IMMEDIATE = 4,
+	DMUS_PMSGF_TOOL_QUEUE     = 8,
+	DMUS_PMSGF_TOOL_ATTIME    = 0x10,
+	DMUS_PMSGF_TOOL_FLUSH     = 0x20,
+	DMUS_PMSGF_LOCKTOREFTIME  = 0x40,
+	DMUS_PMSGF_DX8            = 0x80
+};
+
+enum enumDMUS_PMSGT_TYPES {
+	DMUS_PMSGT_MIDI             = 0x00,
+	DMUS_PMSGT_NOTE             = 0x01,
+	DMUS_PMSGT_SYSEX            = 0x02,
+	DMUS_PMSGT_NOTIFICATION     = 0x03,
+	DMUS_PMSGT_TEMPO            = 0x04,
+	DMUS_PMSGT_CURVE            = 0x05,
+	DMUS_PMSGT_TIMESIG          = 0x06,
+	DMUS_PMSGT_PATCH            = 0x07,
+	DMUS_PMSGT_TRANSPOSE        = 0x08,
+	DMUS_PMSGT_CHANNEL_PRIORITY = 0x09,
+	DMUS_PMSGT_STOP             = 0x0A,
+	DMUS_PMSGT_DIRTY            = 0x0B,
+	DMUS_PMSGT_WAVE             = 0x0C,
+	DMUS_PMSGT_LYRIC            = 0x0D,
+	DMUS_PMSGT_SCRIPTLYRIC      = 0x0E,
+	DMUS_PMSGT_USER             = 0xFF
+};
+
+enum enumDMUS_SEGF_FLAGS {
+	DMUS_SEGF_REFTIME             = 0x000040,   
+	DMUS_SEGF_SECONDARY           = 0x000080,
+	DMUS_SEGF_QUEUE               = 0x000100,
+	DMUS_SEGF_CONTROL             = 0x000200,
+	DMUS_SEGF_AFTERPREPARETIME    = 0x000400,
+	DMUS_SEGF_GRID                = 0x000800,
+	DMUS_SEGF_BEAT                = 0x001000,
+	DMUS_SEGF_MEASURE             = 0x002000,
+	DMUS_SEGF_DEFAULT             = 0x004000,
+	DMUS_SEGF_NOINVALIDATE        = 0x008000,
+	DMUS_SEGF_ALIGN               = 0x0010000,
+	DMUS_SEGF_VALID_START_BEAT    = 0x0020000,
+	DMUS_SEGF_VALID_START_GRID    = 0x0040000,
+	DMUS_SEGF_VALID_START_TICK    = 0x0080000,
+	DMUS_SEGF_AUTOTRANSITION      = 0x0100000,
+	DMUS_SEGF_AFTERQUEUETIME      = 0x0200000,
+	DMUS_SEGF_AFTERLATENCYTIME    = 0x0400000,
+	DMUS_SEGF_SEGMENTEND          = 0x0800000,
+	DMUS_SEGF_MARKER              = 0x01000000,
+	DMUS_SEGF_TIMESIG_ALWAYS      = 0x02000000,
+	DMUS_SEGF_USE_AUDIOPATH       = 0x04000000,
+	DMUS_SEGF_VALID_START_MEASURE = 0x08000000,
+	DMUS_SEGF_INVALIDATE_PRI      = 0x10000000
+};
+
+enum enumDMUS_TIME_RESOLVE_FLAGS {
+	DMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME,
+	DMUS_TIME_RESOLVE_AFTERQUEUETIME   = DMUS_SEGF_AFTERQUEUETIME,
+	DMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME,
+	DMUS_TIME_RESOLVE_GRID             = DMUS_SEGF_GRID,
+	DMUS_TIME_RESOLVE_BEAT             = DMUS_SEGF_BEAT,
+	DMUS_TIME_RESOLVE_MEASURE          = DMUS_SEGF_MEASURE,
+	DMUS_TIME_RESOLVE_MARKER           = DMUS_SEGF_MARKER,
+	DMUS_TIME_RESOLVE_SEGMENTEND       = DMUS_SEGF_SEGMENTEND,
+};
+
+enum enumDMUS_CHORDKEYF_FLAGS {
+	DMUS_CHORDKEYF_SILENT = 0x1,
+};
+
+enum enumDMUS_NOTEF_FLAGS {
+	DMUS_NOTEF_NOTEON               = 0x01,
+	/* DX8 */
+	DMUS_NOTEF_NOINVALIDATE         = 0x02,
+	DMUS_NOTEF_NOINVALIDATE_INSCALE = 0x04,
+	DMUS_NOTEF_NOINVALIDATE_INCHORD = 0x08,
+	DMUS_NOTEF_REGENERATE           = 0x10,
+};
+
+enum enumDMUS_PLAYMODE_FLAGS {
+	DMUS_PLAYMODE_KEY_ROOT        = 0x01,
+	DMUS_PLAYMODE_CHORD_ROOT      = 0x02,
+	DMUS_PLAYMODE_SCALE_INTERVALS = 0x04,
+	DMUS_PLAYMODE_CHORD_INTERVALS = 0x08,
+	DMUS_PLAYMODE_NONE            = 0x10,
+};
+
+enum enumDMUS_CURVE_FLAGS {
+	DMUS_CURVE_RESET              = 0x1,
+	DMUS_CURVE_START_FROM_CURRENT = 0x2
+};
+
+enum { 
+	DMUS_CURVES_LINEAR  = 0x0,
+	DMUS_CURVES_INSTANT = 0x1,
+	DMUS_CURVES_EXP     = 0x2,
+	DMUS_CURVES_LOG     = 0x3,
+	DMUS_CURVES_SINE    = 0x4
+};
+
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+/*typedef struct _DMUS_PMSG                  DMUS_PMSG,                  *LPDMUS_PMSG; */
+typedef struct _DMUS_AUDIOPARAMS           DMUS_AUDIOPARAMS,           *LPDMUS_AUDIOPARAMS;
+typedef struct _DMUS_SUBCHORD              DMUS_SUBCHORD,              *LPDMUS_SUBCHORD;
+typedef struct _DMUS_CHORD_KEY             DMUS_CHORD_KEY,             *LPDMUS_CHORD_KEY;
+typedef struct _DMUS_NOTE_PMSG             DMUS_NOTE_PMSG,             *LPDMUS_NOTE_PMSG;
+typedef struct _DMUS_MIDI_PMSG             DMUS_MIDI_PMSG,             *LPDMUS_MIDI_PMSG;
+typedef struct _DMUS_PATCH_PMSG            DMUS_PATCH_PMSG,            *LPDMUS_PATCH_PMSG;
+typedef struct _DMUS_TRANSPOSE_PMSG        DMUS_TRANSPOSE_PMSG,        *LPDMUS_TRANSPOSE_PMSG;
+typedef struct _DMUS_CHANNEL_PRIORITY_PMSG DMUS_CHANNEL_PRIORITY_PMSG, *LPDMUS_CHANNEL_PRIORITY_PMSG;
+typedef struct _DMUS_TEMPO_PMSG            DMUS_TEMPO_PMSG,            *LPDMUS_TEMPO_PMSG;
+typedef struct _DMUS_SYSEX_PMSG            DMUS_SYSEX_PMSG,            *LPDMUS_SYSEX_PMSG;
+typedef struct _DMUS_CURVE_PMSG            DMUS_CURVE_PMSG,            *LPDMUS_CURVE_PMSG;
+typedef struct _DMUS_TIMESIG_PMSG          DMUS_TIMESIG_PMSG,          *LPDMUS_TIMESIG_PMSG;
+typedef struct _DMUS_NOTIFICATION_PMSG     DMUS_NOTIFICATION_PMSG,     *LPDMUS_NOTIFICATION_PMSG;
+typedef struct _DMUS_WAVE_PMSG             DMUS_WAVE_PMSG,             *LPDMUS_WAVE_PMSG;
+typedef struct _DMUS_LYRIC_PMSG            DMUS_LYRIC_PMSG,            *LPDMUS_LYRIC_PMSG;
+typedef struct _DMUS_VERSION               DMUS_VERSION,               *LPDMUS_VERSION;
+typedef struct _DMUS_TIMESIGNATURE         DMUS_TIMESIGNATURE,         *LPDMUS_TIMESIGNATURE;
+typedef struct _DMUS_VALID_START_PARAM     DMUS_VALID_START_PARAM,     *LPDMUS_VALID_START_PARAM;
+typedef struct _DMUS_PLAY_MARKER_PARAM     DMUS_PLAY_MARKER_PARAM,     *LPDMUS_PLAY_MARKER_PARAM;
+typedef struct _DMUS_OBJECTDESC            DMUS_OBJECTDESC,            *LPDMUS_OBJECTDESC;
+typedef struct _DMUS_SCRIPT_ERRORINFO      DMUS_SCRIPT_ERRORINFO,      *LPDMUS_SCRIPT_ERRORINFO;
+typedef struct _DMUS_COMMAND_PARAM         DMUS_COMMAND_PARAM,         *LPDMUS_COMMAND_PARAM;
+typedef struct _DMUS_COMMAND_PARAM_2       DMUS_COMMAND_PARAM_2,       *LPDMUS_COMMAND_PARAM_2;
+typedef struct _DMUS_BAND_PARAM            DMUS_BAND_PARAM,            *LPDMUS_BAND_PARAM;
+typedef struct _DMUS_VARIATIONS_PARAM      DMUS_VARIATIONS_PARAM,      *LPDMUS_VARIATIONS_PARAM;
+
+/* actual structures */
+struct _DMUS_PMSG {
+    DMUS_PMSG_PART
+};
+
+struct _DMUS_AUDIOPARAMS {
+	DWORD dwSize;
+	BOOL  fInitNow;
+	DWORD dwValidData;
+	DWORD dwFeatures;
+	DWORD dwVoices;
+	DWORD dwSampleRate;
+	CLSID clsidDefaultSynth;
+};
+
+struct _DMUS_SUBCHORD {
+	DWORD dwChordPattern;
+	DWORD dwScalePattern;
+	DWORD dwInversionPoints;
+	DWORD dwLevels;
+	BYTE  bChordRoot;
+	BYTE  bScaleRoot;
+};
+
+struct _DMUS_CHORD_KEY {
+	WCHAR         wszName[16];
+	WORD          wMeasure;
+	BYTE          bBeat;
+	BYTE          bSubChordCount;
+	DMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD];
+	DWORD         dwScale;
+	BYTE          bKey;
+	BYTE          bFlags;
+};
+
+struct _DMUS_NOTE_PMSG {
+	DMUS_PMSG_PART
+	MUSIC_TIME mtDuration;
+	WORD       wMusicValue;
+	WORD       wMeasure;
+	short      nOffset;
+	BYTE       bBeat;
+	BYTE       bGrid;
+	BYTE       bVelocity;
+	BYTE       bFlags;
+	BYTE       bTimeRange;
+	BYTE       bDurRange;
+	BYTE       bVelRange;
+	BYTE       bPlayModeFlags;
+	BYTE       bSubChordLevel;
+	BYTE       bMidiValue;
+	char       cTranspose;
+};
+
+struct _DMUS_MIDI_PMSG {
+	DMUS_PMSG_PART
+	BYTE bStatus;
+	BYTE bByte1;
+	BYTE bByte2;
+	BYTE bPad[1];
+};
+
+struct _DMUS_PATCH_PMSG {
+	DMUS_PMSG_PART
+	BYTE byInstrument;
+	BYTE byMSB;
+	BYTE byLSB;
+	BYTE byPad[1];
+};
+
+struct _DMUS_TRANSPOSE_PMSG {
+	DMUS_PMSG_PART
+	short nTranspose;
+	/* DX8 */
+	WORD  wMergeIndex;
+};
+
+struct _DMUS_CHANNEL_PRIORITY_PMSG {
+	DMUS_PMSG_PART
+	DWORD dwChannelPriority;
+};
+
+struct _DMUS_TEMPO_PMSG {
+	DMUS_PMSG_PART
+	double  dblTempo;
+};
+
+struct _DMUS_SYSEX_PMSG {
+	DMUS_PMSG_PART
+	DWORD dwLen;
+	BYTE  abData[1];
+};
+
+struct _DMUS_CURVE_PMSG {
+	DMUS_PMSG_PART
+	MUSIC_TIME mtDuration;
+	MUSIC_TIME mtOriginalStart;
+	MUSIC_TIME mtResetDuration;
+	short      nStartValue;
+	short      nEndValue;
+	short      nResetValue;
+	WORD       wMeasure;
+	short      nOffset;
+	BYTE       bBeat;
+	BYTE       bGrid;
+	BYTE       bType;
+	BYTE       bCurveShape;
+	BYTE       bCCData;
+	BYTE       bFlags;
+	/* DX8 */
+	WORD       wParamType;
+	WORD       wMergeIndex;
+};
+
+struct _DMUS_TIMESIG_PMSG {
+	DMUS_PMSG_PART
+	BYTE bBeatsPerMeasure;
+	BYTE bBeat;
+	WORD wGridsPerBeat;
+};
+
+struct _DMUS_NOTIFICATION_PMSG {
+	DMUS_PMSG_PART
+	GUID  guidNotificationType;
+	DWORD dwNotificationOption;
+	DWORD dwField1;
+	DWORD dwField2;
+};
+
+struct _DMUS_WAVE_PMSG {
+	DMUS_PMSG_PART    
+	REFERENCE_TIME rtStartOffset;
+	REFERENCE_TIME rtDuration;
+	LONG           lOffset;
+	LONG           lVolume;
+	LONG           lPitch;
+	BYTE           bFlags;
+};
+
+struct _DMUS_LYRIC_PMSG {
+	DMUS_PMSG_PART    
+	WCHAR wszString[1];
+};
+
+struct _DMUS_VERSION {
+	DWORD dwVersionMS;
+	DWORD dwVersionLS;
+};
+
+struct _DMUS_TIMESIGNATURE {
+	MUSIC_TIME mtTime;
+	BYTE       bBeatsPerMeasure;
+	BYTE       bBeat;
+	WORD       wGridsPerBeat;
+};
+
+struct _DMUS_VALID_START_PARAM {
+	MUSIC_TIME mtTime;
+};
+
+struct _DMUS_PLAY_MARKER_PARAM {
+	MUSIC_TIME mtTime;
+};
+
+struct _DMUS_OBJECTDESC {
+	DWORD        dwSize;
+	DWORD        dwValidData;
+	GUID         guidObject;
+	GUID         guidClass;
+	FILETIME     ftDate;
+	DMUS_VERSION vVersion;
+	WCHAR        wszName[DMUS_MAX_NAME];
+	WCHAR        wszCategory[DMUS_MAX_CATEGORY];
+	WCHAR        wszFileName[DMUS_MAX_FILENAME];
+	LONGLONG     llMemLength;
+	LPBYTE       pbMemData;
+	IStream*     pStream;
+};
+
+struct _DMUS_SCRIPT_ERRORINFO {
+	DWORD   dwSize;
+	HRESULT hr;
+	ULONG   ulLineNumber;
+	LONG    ichCharPosition;
+	WCHAR   wszSourceFile[DMUS_MAX_FILENAME];
+	WCHAR   wszSourceComponent[DMUS_MAX_FILENAME];
+	WCHAR   wszDescription[DMUS_MAX_FILENAME];
+	WCHAR   wszSourceLineText[DMUS_MAX_FILENAME];
+};
+
+struct _DMUS_COMMAND_PARAM {
+	BYTE bCommand;
+	BYTE bGrooveLevel;
+	BYTE bGrooveRange;
+	BYTE bRepeatMode;
+};
+
+struct _DMUS_COMMAND_PARAM_2 {
+	MUSIC_TIME mtTime;
+	BYTE       bCommand;
+	BYTE       bGrooveLevel;
+	BYTE       bGrooveRange;
+	BYTE       bRepeatMode;
+};
+
+struct _DMUS_BAND_PARAM {
+	MUSIC_TIME       mtTimePhysical;
+	struct IDirectMusicBand *pBand;
+};
+
+struct _DMUS_VARIATIONS_PARAM {
+	DWORD  dwPChannelsUsed;
+	DWORD* padwPChannels;
+	DWORD* padwVariations;
+};
+
+
+/*****************************************************************************
+ * IDirectMusicBand interface
+ */
+#define INTERFACE IDirectMusicBand
+DECLARE_INTERFACE_(IDirectMusicBand,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicBand methods ***/
+    STDMETHOD(CreateSegment)(THIS_ struct IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(Download)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE;
+    STDMETHOD(Unload)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicBand_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicBand_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicBand methods ***/
+#define IDirectMusicBand_CreateSegment(p,a)    (p)->lpVtbl->CreateSegment(p,a)
+#define IDirectMusicBand_Download(p,a)         (p)->lpVtbl->Download(p,a)
+#define IDirectMusicBand_Unload(p,a)           (p)->lpVtbl->Unload(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicObject interface
+ */
+#define INTERFACE IDirectMusicObject
+DECLARE_INTERFACE_(IDirectMusicObject,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicObject methods ***/
+    STDMETHOD(GetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+    STDMETHOD(SetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+    STDMETHOD(ParseDescriptor)(THIS_ LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicObject_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicObject_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirectMusicObject_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirectMusicObject methods ***/
+#define IDirectMusicObject_GetDescriptor(p,a)     (p)->lpVtbl->GetDescriptor(p,a)
+#define IDirectMusicObject_SetDescriptor(p,a)     (p)->lpVtbl->SetDescriptor(p,a)
+#define IDirectMusicObject_ParseDescriptor(p,a,b) (p)->lpVtbl->ParseDescriptor(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicLoader interface
+ */
+#define INTERFACE IDirectMusicLoader
+DECLARE_INTERFACE_(IDirectMusicLoader,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicLoader methods ***/
+    STDMETHOD(_GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE;
+    STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+    STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;
+    STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;
+    STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE;
+    STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE;
+    STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE;
+    STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE;
+    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicLoader_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicLoader_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusicLoader_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusicLoader methods ***/
+#define IDirectMusicLoader_GetObject(p,a,b,c)          (p)->lpVtbl->_GetObject(p,a,b,c)
+#define IDirectMusicLoader_SetObject(p,a)              (p)->lpVtbl->SetObject(p,a)
+#define IDirectMusicLoader_SetSearchDirectory(p,a,b,c) (p)->lpVtbl->SetSearchDirectory(p,a,b,c)
+#define IDirectMusicLoader_ScanDirectory(p,a,b,c)      (p)->lpVtbl->ScanDirectory(p,a,b,c)
+#define IDirectMusicLoader_CacheObject(p,a)            (p)->lpVtbl->CacheObject(p,a)
+#define IDirectMusicLoader_ReleaseObject(p,a)          (p)->lpVtbl->ReleaseObject(p,a)
+#define IDirectMusicLoader_ClearCache(p,a)             (p)->lpVtbl->ClearCache(p,a)
+#define IDirectMusicLoader_EnableCache(p,a,b)          (p)->lpVtbl->EnableCache(p,a,b)
+#define IDirectMusicLoader_EnumObject(p,a,b,c)         (p)->lpVtbl->EnumObject(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicLoader8 interface
+ */
+#define INTERFACE IDirectMusicLoader8
+DECLARE_INTERFACE_(IDirectMusicLoader8,IDirectMusicLoader)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicLoader methods ***/
+    STDMETHOD(_GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE;
+    STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+    STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;
+    STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;
+    STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE;
+    STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE;
+    STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE;
+    STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE;
+    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;
+    /*** IDirectMusicLoader8 methods ***/
+    STDMETHOD_(void,CollectGarbage)(THIS) PURE;
+    STDMETHOD(ReleaseObjectByUnknown)(THIS_ IUnknown *pObject) PURE;
+    STDMETHOD(LoadObjectFromFile)(THIS_ REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR *pwzFilePath, void **ppObject) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicLoader8_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicLoader8_AddRef(p)                     (p)->lpVtbl->AddRef(p)
+#define IDirectMusicLoader8_Release(p)                    (p)->lpVtbl->Release(p)
+/*** IDirectMusicLoader methods ***/
+#define IDirectMusicLoader8_GetObject(p,a,b,c)            (p)->lpVtbl->_GetObject(p,a,b,c)
+#define IDirectMusicLoader8_SetObject(p,a)                (p)->lpVtbl->SetObject(p,a)
+#define IDirectMusicLoader8_SetSearchDirectory(p,a,b,c)   (p)->lpVtbl->SetSearchDirectory(p,a,b,c)
+#define IDirectMusicLoader8_ScanDirectory(p,a,b,c)        (p)->lpVtbl->ScanDirectory(p,a,b,c)
+#define IDirectMusicLoader8_CacheObject(p,a)              (p)->lpVtbl->CacheObject(p,a)
+#define IDirectMusicLoader8_ReleaseObject(p,a)            (p)->lpVtbl->ReleaseObject(p,a)
+#define IDirectMusicLoader8_ClearCache(p,a)               (p)->lpVtbl->ClearCache(p,a)
+#define IDirectMusicLoader8_EnableCache(p,a,b)            (p)->lpVtbl->EnableCache(p,a,b)
+#define IDirectMusicLoader8_EnumObject(p,a,b,c)           (p)->lpVtbl->EnumObject(p,a,b,c)
+/*** IDirectMusicLoader8 methods ***/
+#define IDirectMusicLoader8_CollectGarbage(p)             (p)->lpVtbl->CollectGarbage(p)
+#define IDirectMusicLoader8_ReleaseObjectByUnknown(p,a)   (p)->lpVtbl->ReleaseObjectByUnknown(p,a)
+#define IDirectMusicLoader8_LoadObjectFromFile(p,a,b,c,d) (p)->lpVtbl->LoadObjectFromFile(p,a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicGetLoader interface
+ */
+#define INTERFACE IDirectMusicGetLoader
+DECLARE_INTERFACE_(IDirectMusicGetLoader,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicGetLoader methods ***/
+    STDMETHOD(GetLoader)(THIS_ IDirectMusicLoader **ppLoader) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicGetLoader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicGetLoader_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicGetLoader_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicGetLoader methods ***/
+#define IDirectMusicGetLoader_GetLoader(p,a)        (p)->lpVtbl->GetLoader(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegment interface
+ */
+#define INTERFACE IDirectMusicSegment
+DECLARE_INTERFACE_(IDirectMusicSegment,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSegment methods ***/
+    STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE;
+    STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE;
+    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+    STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE;
+    STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE;
+    STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE;
+    STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE;
+    STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE;
+    STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE;
+    STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE;
+    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD  dwFlags) PURE;
+    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE;
+    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+    STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;
+    STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE;
+    STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegment_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegment_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegment_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegment methods ***/
+#define IDirectMusicSegment_GetLength(p,a)              (p)->lpVtbl->GetLength(p,a)
+#define IDirectMusicSegment_SetLength(p,a)              (p)->lpVtbl->SetLength(p,a)
+#define IDirectMusicSegment_GetRepeats(p,a)             (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegment_SetRepeats(p,a)             (p)->lpVtbl->SetRepeats(p,a)
+#define IDirectMusicSegment_GetDefaultResolution(p,a)   (p)->lpVtbl->GetDefaultResolution(p,a)
+#define IDirectMusicSegment_SetDefaultResolution(p,a)   (p)->lpVtbl->SetDefaultResolution(p,a)
+#define IDirectMusicSegment_GetTrack(p,a,b,c,d)         (p)->lpVtbl->GetTrack(p,a,b,c,d)
+#define IDirectMusicSegment_GetTrackGroup(p,a,b)        (p)->lpVtbl->GetTrackGroup(p,a,b)
+#define IDirectMusicSegment_InsertTrack(p,a,b)          (p)->lpVtbl->InsertTrack(p,a,b)
+#define IDirectMusicSegment_RemoveTrack(p,a)            (p)->lpVtbl->RemoveTrack(p,a)
+#define IDirectMusicSegment_InitPlay(p,a,b,c)           (p)->lpVtbl->InitPlay(p,a,b,c)
+#define IDirectMusicSegment_GetGraph(p,a)               (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicSegment_SetGraph(p,a)               (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicSegment_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicSegment_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicSegment_GetParam(p,a,b,c,d,e,f)     (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicSegment_SetParam(p,a,b,c,d,e)       (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicSegment_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirectMusicSegment_SetStartPoint(p,a)          (p)->lpVtbl->SetStartPoint(p,a)
+#define IDirectMusicSegment_GetStartPoint(p,a)          (p)->lpVtbl->GetStartPoint(p,a)
+#define IDirectMusicSegment_SetLoopPoints(p,a,b)        (p)->lpVtbl->SetLoopPoints(p,a,b)
+#define IDirectMusicSegment_GetLoopPoints(p,a,b)        (p)->lpVtbl->GetLoopPoints(p,a,b)
+#define IDirectMusicSegment_SetPChannelsUsed(p,a,b)     (p)->lpVtbl->SetPChannelsUsed(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegment8 interface
+ */
+#define INTERFACE IDirectMusicSegment8
+DECLARE_INTERFACE_(IDirectMusicSegment8,IDirectMusicSegment)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSegment methods ***/
+    STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE;
+    STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE;
+    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+    STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE;
+    STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE;
+    STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE;
+    STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE;
+    STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE;
+    STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE;
+    STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE;
+    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD  dwFlags) PURE;
+    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE;
+    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+    STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;
+    STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE;
+    STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;
+    /*** IDirectMusicSegment8 methods ***/
+    STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE;
+    STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE;
+    STDMETHOD(Compose)(THIS_ MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) PURE;
+    STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE;
+    STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegment8_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegment8_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegment8_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegment methods ***/
+#define IDirectMusicSegment8_GetLength(p,a)              (p)->lpVtbl->GetLength(p,a)
+#define IDirectMusicSegment8_SetLength(p,a)              (p)->lpVtbl->SetLength(p,a)
+#define IDirectMusicSegment8_GetRepeats(p,a)             (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegment8_SetRepeats(p,a)             (p)->lpVtbl->SetRepeats(p,a)
+#define IDirectMusicSegment8_GetDefaultResolution(p,a)   (p)->lpVtbl->GetDefaultResolution(p,a)
+#define IDirectMusicSegment8_SetDefaultResolution(p,a)   (p)->lpVtbl->SetDefaultResolution(p,a)
+#define IDirectMusicSegment8_GetTrack(p,a,b,c,d)         (p)->lpVtbl->GetTrack(p,a,b,c,d)
+#define IDirectMusicSegment8_GetTrackGroup(p,a,b)        (p)->lpVtbl->GetTrackGroup(p,a,b)
+#define IDirectMusicSegment8_InsertTrack(p,a,b)          (p)->lpVtbl->InsertTrack(p,a,b)
+#define IDirectMusicSegment8_RemoveTrack(p,a)            (p)->lpVtbl->RemoveTrack(p,a)
+#define IDirectMusicSegment8_InitPlay(p,a,b,c)           (p)->lpVtbl->InitPlay(p,a,b,c)
+#define IDirectMusicSegment8_GetGraph(p,a)               (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicSegment8_SetGraph(p,a)               (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicSegment8_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicSegment8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicSegment8_GetParam(p,a,b,c,d,e,f)     (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicSegment8_SetParam(p,a,b,c,d,e)       (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicSegment8_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirectMusicSegment8_SetStartPoint(p,a)          (p)->lpVtbl->SetStartPoint(p,a)
+#define IDirectMusicSegment8_GetStartPoint(p,a)          (p)->lpVtbl->GetStartPoint(p,a)
+#define IDirectMusicSegment8_SetLoopPoints(p,a,b)        (p)->lpVtbl->SetLoopPoints(p,a,b)
+#define IDirectMusicSegment8_GetLoopPoints(p,a,b)        (p)->lpVtbl->GetLoopPoints(p,a,b)
+#define IDirectMusicSegment8_SetPChannelsUsed(p,a,b)     (p)->lpVtbl->SetPChannelsUsed(p,a,b)
+/*** IDirectMusicSegment8 methods ***/
+#define IDirectMusicSegment8_SetTrackConfig(p,a,b,c,d,e) (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e)
+#define IDirectMusicSegment8_GetAudioPathConfig(p,a)     (p)->lpVtbl->GetAudioPathConfig(p,a)
+#define IDirectMusicSegment8_Compose(p,a,b,c,d)          (p)->lpVtbl->Compose(p,a,b,c,d)
+#define IDirectMusicSegment8_Download(p,a)               (p)->lpVtbl->Download(p,a)
+#define IDirectMusicSegment8_Unload(p,a)                 (p)->lpVtbl->Unload(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegmentState interface
+ */
+#define INTERFACE IDirectMusicSegmentState
+DECLARE_INTERFACE_(IDirectMusicSegmentState,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSegmentState methods ***/
+    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+    STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE;
+    STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE;
+    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegmentState_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegmentState_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegmentState_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegmentState methods ***/
+#define IDirectMusicSegmentState_GetRepeats(p,a)       (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegmentState_GetSegment(p,a)       (p)->lpVtbl->GetSegment(p,a)
+#define IDirectMusicSegmentState_GetStartTime(p,a)     (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicSegmentState_GetSeek(p,a)          (p)->lpVtbl->GetSeek(p,a)
+#define IDirectMusicSegmentState_GetStartPoint(p,a)    (p)->lpVtbl->GetStartPoint(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegmentState8 interface
+ */
+#define INTERFACE IDirectMusicSegmentState8
+DECLARE_INTERFACE_(IDirectMusicSegmentState8,IDirectMusicSegmentState)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSegmentState methods ***/
+    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+    STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE;
+    STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE;
+    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+    /*** IDirectMusicSegmentState8 methods ***/
+    STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE;
+    STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegmentState8_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegmentState8_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegmentState8_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegmentState methods ***/
+#define IDirectMusicSegmentState8_GetRepeats(p,a)                  (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegmentState8_GetSegment(p,a)                  (p)->lpVtbl->GetSegment(p,a)
+#define IDirectMusicSegmentState8_GetStartTime(p,a)                (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicSegmentState8_GetSeek(p,a)                     (p)->lpVtbl->GetSeek(p,a)
+#define IDirectMusicSegmentState8_GetStartPoint(p,a)               (p)->lpVtbl->GetStartPoint(p,a)
+/*** IDirectMusicSegmentState8 methods ***/
+#define IDirectMusicSegmentState8_SetTrackConfig(p,a,b,c,d,e)      (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e)
+#define IDirectMusicSegmentState8_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicAudioPath interface
+ */
+#define INTERFACE IDirectMusicAudioPath
+DECLARE_INTERFACE_(IDirectMusicAudioPath,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicAudioPath methods ***/
+    STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fActivate) PURE;
+    STDMETHOD(SetVolume)(THIS_ LONG lVolume, DWORD dwDuration) PURE;
+    STDMETHOD(ConvertPChannel)(THIS_ DWORD dwPChannelIn, DWORD *pdwPChannelOut) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicAudioPath_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicAudioPath_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirectMusicAudioPath_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirectMusicAudioPath methods ***/
+#define IDirectMusicAudioPath_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)
+#define IDirectMusicAudioPath_Activate(p,a)                    (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicAudioPath_SetVolume(p,a,b)                 (p)->lpVtbl->SetVolume(p,a,b)
+#define IDirectMusicAudioPath_ConvertPChannel(p,a,b)           (p)->lpVtbl->ConvertPChannel(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPerformance interface
+ */
+#define INTERFACE IDirectMusicPerformance
+DECLARE_INTERFACE_(IDirectMusicPerformance,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicPerformance methods ***/
+    STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+    STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE;
+    STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+    STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE;
+    STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE;
+    STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE;
+    STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE;
+    STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE;
+    STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE;
+    STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE;
+    STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE;
+    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE;
+    STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE;
+    STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+    STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;
+    STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE;
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE;
+    STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE;
+    STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE;
+    STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE;
+    STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+    STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+    STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+    STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+    STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+    STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+    STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE;
+    STDMETHOD(CloseDown)(THIS) PURE;
+    STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE;
+    STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE;
+    STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE;
+    STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE;
+    STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPerformance_QueryInterface(p,a,b)                 (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPerformance_AddRef(p)                             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPerformance_Release(p)                            (p)->lpVtbl->Release(p)
+/*** IDirectMusicPerformance methods ***/
+#define IDirectMusicPerformance_Init(p,a,b,c)                         (p)->lpVtbl->Init(p,a,b,c)
+#define IDirectMusicPerformance_PlaySegment(p,a,b,c,d)                (p)->lpVtbl->PlaySegment(p,a,b,c,d)
+#define IDirectMusicPerformance_Stop(p,a,b,c,d)                       (p)->lpVtbl->Stop(p,a,b,c,d)
+#define IDirectMusicPerformance_GetSegmentState(p,a,b)                (p)->lpVtbl->GetSegmentState(p,a,b)
+#define IDirectMusicPerformance_SetPrepareTime(p,a)                   (p)->lpVtbl->SetPrepareTime(p,a)
+#define IDirectMusicPerformance_GetPrepareTime(p,a)                   (p)->lpVtbl->GetPrepareTime(p,a)
+#define IDirectMusicPerformance_SetBumperLength(p,a)                  (p)->lpVtbl->SetBumperLength(p,a)
+#define IDirectMusicPerformance_GetBumperLength(p,a)                  (p)->lpVtbl->GetBumperLength(p,a)
+#define IDirectMusicPerformance_SendPMsg(p,a)                         (p)->lpVtbl->SendPMsg(p,a)
+#define IDirectMusicPerformance_MusicToReferenceTime(p,a,b)           (p)->lpVtbl->MusicToReferenceTime(p,a,b)
+#define IDirectMusicPerformance_ReferenceToMusicTime(p,a,b)           (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
+#define IDirectMusicPerformance_IsPlaying(p,a,b)                      (p)->lpVtbl->IsPlaying(p,a,b)
+#define IDirectMusicPerformance_GetTime(p,a,b)                        (p)->lpVtbl->GetTime(p,a,b)
+#define IDirectMusicPerformance_AllocPMsg(p,a,b)                      (p)->lpVtbl->AllocPMsg(p,a,b)
+#define IDirectMusicPerformance_FreePMsg(p,a)                         (p)->lpVtbl->FreePMsg(p,a)
+#define IDirectMusicPerformance_GetGraph(p,a)                         (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicPerformance_SetGraph(p,a)                         (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicPerformance_SetNotificationHandle(p,a,b)          (p)->lpVtbl->SetNotificationHandle(p,a,b)
+#define IDirectMusicPerformance_GetNotificationPMsg(p,a)              (p)->lpVtbl->GetNotificationPMsg(p,a)
+#define IDirectMusicPerformance_AddNotificationType(p,a)              (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicPerformance_RemoveNotificationType(p,a)           (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicPerformance_AddPort(p,a)                          (p)->lpVtbl->AddPort(p,a)
+#define IDirectMusicPerformance_RemovePort(p,a)                       (p)->lpVtbl->RemovePort(p,a)
+#define IDirectMusicPerformance_AssignPChannelBlock(p,a,b,c)          (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
+#define IDirectMusicPerformance_AssignPChannel(p,a,b,c,d)             (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
+#define IDirectMusicPerformance_PChannelInfo(p,a,b,c,d)               (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
+#define IDirectMusicPerformance_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance_Invalidate(p,a,b)                     (p)->lpVtbl->Invalidate(p,a,b)
+#define IDirectMusicPerformance_GetParam(p,a,b,c,d,e,f)               (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_SetParam(p,a,b,c,d,e)                 (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicPerformance_GetGlobalParam(p,a,b,c)               (p)->lpVtbl->GetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance_SetGlobalParam(p,a,b,c)               (p)->lpVtbl->SetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance_GetLatencyTime(p,a)                   (p)->lpVtbl->GetLatencyTime(p,a)
+#define IDirectMusicPerformance_GetQueueTime(p,a)                     (p)->lpVtbl->GetQueueTime(p,a)
+#define IDirectMusicPerformance_AdjustTime(p,a)                       (p)->lpVtbl->AdjustTime(p,a)
+#define IDirectMusicPerformance_CloseDown(p)                          (p)->lpVtbl->CloseDown(p)
+#define IDirectMusicPerformance_GetResolvedTime(p,a,b,c)              (p)->lpVtbl->GetResolvedTime(p,a,b,c)
+#define IDirectMusicPerformance_MIDIToMusic(p,a,b,c,d,e)              (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
+#define IDirectMusicPerformance_MusicToMIDI(p,a,b,c,d,e)              (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
+#define IDirectMusicPerformance_TimeToRhythm(p,a,b,c,d,e,f)           (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_RhythmToTime(p,a,b,c,d,e,f)           (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPerformance8 interface
+ */
+#define INTERFACE IDirectMusicPerformance8
+DECLARE_INTERFACE_(IDirectMusicPerformance8,IDirectMusicPerformance)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicPerformance methods ***/
+    STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+    STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE;
+    STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+    STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE;
+    STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE;
+    STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE;
+    STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE;
+    STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE;
+    STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE;
+    STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE;
+    STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE;
+    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE;
+    STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE;
+    STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+    STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;
+    STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE;
+    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+    STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE;
+    STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE;
+    STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE;
+    STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE;
+    STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+    STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+    STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+    STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+    STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+    STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+    STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE;
+    STDMETHOD(CloseDown)(THIS) PURE;
+    STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE;
+    STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE;
+    STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE;
+    STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE;
+    STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;
+    /*** IDirectMusicPerformance8 methods ***/
+    STDMETHOD(InitAudio)(THIS_ IDirectMusic **ppDirectMusic, IDirectSound **ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS *pParams) PURE;
+    STDMETHOD(PlaySegmentEx)(THIS_ IUnknown *pSource, WCHAR *pwzSegmentName, IUnknown *pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState, IUnknown *pFrom, IUnknown *pAudioPath) PURE;
+    STDMETHOD(StopEx)(THIS_ IUnknown *pObjectToStop, __int64 i64StopTime, DWORD dwFlags) PURE;
+    STDMETHOD(ClonePMsg)(THIS_ DMUS_PMSG *pSourcePMSG, DMUS_PMSG **ppCopyPMSG) PURE;
+    STDMETHOD(CreateAudioPath)(THIS_ IUnknown *pSourceConfig, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE;
+    STDMETHOD(CreateStandardAudioPath)(THIS_ DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE;
+    STDMETHOD(SetDefaultAudioPath)(THIS_ IDirectMusicAudioPath *pAudioPath) PURE;
+    STDMETHOD(GetDefaultAudioPath)(THIS_ IDirectMusicAudioPath **ppAudioPath) PURE;
+    STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPerformance8_QueryInterface(p,a,b)                 (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPerformance8_AddRef(p)                             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPerformance8_Release(p)                            (p)->lpVtbl->Release(p)
+/*** IDirectMusicPerformance methods ***/
+#define IDirectMusicPerformance8_Init(p,a,b,c)                         (p)->lpVtbl->Init(p,a,b,c)
+#define IDirectMusicPerformance8_PlaySegment(p,a,b,c,d)                (p)->lpVtbl->PlaySegment(p,a,b,c,d)
+#define IDirectMusicPerformance8_Stop(p,a,b,c,d)                       (p)->lpVtbl->Stop(p,a,b,c,d)
+#define IDirectMusicPerformance8_GetSegmentState(p,a,b)                (p)->lpVtbl->GetSegmentState(p,a,b)
+#define IDirectMusicPerformance8_SetPrepareTime(p,a)                   (p)->lpVtbl->SetPrepareTime(p,a)
+#define IDirectMusicPerformance8_GetPrepareTime(p,a)                   (p)->lpVtbl->GetPrepareTime(p,a)
+#define IDirectMusicPerformance8_SetBumperLength(p,a)                  (p)->lpVtbl->SetBumperLength(p,a)
+#define IDirectMusicPerformance8_GetBumperLength(p,a)                  (p)->lpVtbl->GetBumperLength(p,a)
+#define IDirectMusicPerformance8_SendPMsg(p,a)                         (p)->lpVtbl->SendPMsg(p,a)
+#define IDirectMusicPerformance8_MusicToReferenceTime(p,a,b)           (p)->lpVtbl->MusicToReferenceTime(p,a,b)
+#define IDirectMusicPerformance8_ReferenceToMusicTime(p,a,b)           (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
+#define IDirectMusicPerformance8_IsPlaying(p,a,b)                      (p)->lpVtbl->IsPlaying(p,a,b)
+#define IDirectMusicPerformance8_GetTime(p,a,b)                        (p)->lpVtbl->GetTime(p,a,b)
+#define IDirectMusicPerformance8_AllocPMsg(p,a,b)                      (p)->lpVtbl->AllocPMsg(p,a,b)
+#define IDirectMusicPerformance8_FreePMsg(p,a)                         (p)->lpVtbl->FreePMsg(p,a)
+#define IDirectMusicPerformance8_GetGraph(p,a)                         (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicPerformance8_SetGraph(p,a)                         (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicPerformance8_SetNotificationHandle(p,a,b)          (p)->lpVtbl->SetNotificationHandle(p,a,b)
+#define IDirectMusicPerformance8_GetNotificationPMsg(p,a)              (p)->lpVtbl->GetNotificationPMsg(p,a)
+#define IDirectMusicPerformance8_AddNotificationType(p,a)              (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicPerformance8_RemoveNotificationType(p,a)           (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicPerformance8_AddPort(p,a)                          (p)->lpVtbl->AddPort(p,a)
+#define IDirectMusicPerformance8_RemovePort(p,a)                       (p)->lpVtbl->RemovePort(p,a)
+#define IDirectMusicPerformance8_AssignPChannelBlock(p,a,b,c)          (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
+#define IDirectMusicPerformance8_AssignPChannel(p,a,b,c,d)             (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
+#define IDirectMusicPerformance8_PChannelInfo(p,a,b,c,d)               (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
+#define IDirectMusicPerformance8_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance8_Invalidate(p,a,b)                     (p)->lpVtbl->Invalidate(p,a,b)
+#define IDirectMusicPerformance8_GetParam(p,a,b,c,d,e,f)               (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_SetParam(p,a,b,c,d,e)                 (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_GetGlobalParam(p,a,b,c)               (p)->lpVtbl->GetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance8_SetGlobalParam(p,a,b,c)               (p)->lpVtbl->SetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance8_GetLatencyTime(p,a)                   (p)->lpVtbl->GetLatencyTime(p,a)
+#define IDirectMusicPerformance8_GetQueueTime(p,a)                     (p)->lpVtbl->GetQueueTime(p,a)
+#define IDirectMusicPerformance8_AdjustTime(p,a)                       (p)->lpVtbl->AdjustTime(p,a)
+#define IDirectMusicPerformance8_CloseDown(p)                          (p)->lpVtbl->CloseDown(p)
+#define IDirectMusicPerformance8_GetResolvedTime(p,a,b,c)              (p)->lpVtbl->GetResolvedTime(p,a,b,c)
+#define IDirectMusicPerformance8_MIDIToMusic(p,a,b,c,d,e)              (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_MusicToMIDI(p,a,b,c,d,e)              (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_TimeToRhythm(p,a,b,c,d,e,f)           (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_RhythmToTime(p,a,b,c,d,e,f)           (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
+    /*  IDirectMusicPerformance8 methods*/
+#define IDirectMusicPerformance8_InitAudio(p,a,b,c,d,e,f,g)            (p)->lpVtbl->InitAudio(p,a,b,c,d,e,f,g)
+#define IDirectMusicPerformance8_PlaySegmentEx(p,a,b,c,d,e,f,g,h)      (p)->lpVtbl->PlaySegmentEx(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance8_StopEx(p,a,b,c)                       (p)->lpVtbl->StopEx(p,a,b,c)
+#define IDirectMusicPerformance8_ClonePMsg(p,a,b)                      (p)->lpVtbl->ClonePMsg(p,a,b)
+#define IDirectMusicPerformance8_CreateAudioPath(p,a,b,c)              (p)->lpVtbl->CreateAudioPath(p,a,b,c)
+#define IDirectMusicPerformance8_CreateStandardAudioPath(p,a,b,c,d)    (p)->lpVtbl->CreateStandardAudioPath(p,a,b,c,d)
+#define IDirectMusicPerformance8_SetDefaultAudioPath(p,a)              (p)->lpVtbl->SetDefaultAudioPath(p,a)
+#define IDirectMusicPerformance8_GetDefaultAudioPath(p,a)              (p)->lpVtbl->GetDefaultAudioPath(p,a)
+#define IDirectMusicPerformance8_GetParamEx(p,a,b,c,d,e,f,g)           (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f,g)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicGraph interface
+ */
+#define INTERFACE IDirectMusicGraph
+DECLARE_INTERFACE_(IDirectMusicGraph,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicGraph methods ***/
+    STDMETHOD(StampPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+    STDMETHOD(InsertTool)(THIS_ IDirectMusicTool *pTool, DWORD *pdwPChannels, DWORD cPChannels, LONG lIndex) PURE;
+    STDMETHOD(GetTool)(THIS_ DWORD dwIndex, IDirectMusicTool **ppTool) PURE;
+    STDMETHOD(RemoveTool)(THIS_ IDirectMusicTool *pTool) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicGraph_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicGraph_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicGraph_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicGraph methods ***/
+#define IDirectMusicGraph_StampPMsg(p,a)        (p)->lpVtbl->StampPMsg(p,a)
+#define IDirectMusicGraph_InsertTool(p,a,b,c,d) (p)->lpVtbl->InsertTool(p,a,b,c,d)
+#define IDirectMusicGraph_GetTool(p,a,b)        (p)->lpVtbl->GetTool(p,a,b)
+#define IDirectMusicGraph_RemoveTool(p,a)       (p)->lpVtbl->RemoveTool(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicStyle interface
+ */
+#define INTERFACE IDirectMusicStyle
+DECLARE_INTERFACE_(IDirectMusicStyle,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicStyle methods ***/
+    STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE;
+    STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE;
+    STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE;
+    STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE;
+    STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE;
+    STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE;
+    STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicStyle_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicStyle_AddRef(p)                         (p)->lpVtbl->AddRef(p)
+#define IDirectMusicStyle_Release(p)                        (p)->lpVtbl->Release(p)
+/*** IDirectMusicStyle methods ***/
+#define IDirectMusicStyle_GetBand(p,a,b)                    (p)->lpVtbl->GetBand(p,a,b)
+#define IDirectMusicStyle_EnumBand(p,a,b)                   (p)->lpVtbl->EnumBand(p,a,b)
+#define IDirectMusicStyle_GetDefaultBand(p,a)               (p)->lpVtbl->GetDefaultBand(p,a)
+#define IDirectMusicStyle_EnumMotif(p,a,b)                  (p)->lpVtbl->EnumMotif(p,a,b)
+#define IDirectMusicStyle_GetMotif(p,a,b)                   (p)->lpVtbl->GetMotif(p,a,b)
+#define IDirectMusicStyle_GetDefaultChordMap(p,a)           (p)->lpVtbl->GetDefaultChordMap(p,a)
+#define IDirectMusicStyle_EnumChordMap(p,a,b)               (p)->lpVtbl->EnumChordMap(p,a,b)
+#define IDirectMusicStyle_GetChordMap(p,a,b)                (p)->lpVtbl->GetChordMap(p,a,b)
+#define IDirectMusicStyle_GetTimeSignature(p,a)             (p)->lpVtbl->GetTimeSignature(p,a)
+#define IDirectMusicStyle_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
+#define IDirectMusicStyle_GetTempo(p,a)                     (p)->lpVtbl->GetTempo(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicStyle8 interface
+ */
+#define INTERFACE IDirectMusicStyle8
+DECLARE_INTERFACE_(IDirectMusicStyle8,IDirectMusicStyle)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicStyle methods ***/
+    STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE;
+    STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE;
+    STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE;
+    STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE;
+    STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE;
+    STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE;
+    STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;
+    /*** IDirectMusicStyle8 methods ***/
+    STDMETHOD(EnumPattern)(THIS_ DWORD dwIndex, DWORD dwPatternType, WCHAR *pwszName) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicStyle8_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicStyle8_AddRef(p)                         (p)->lpVtbl->AddRef(p)
+#define IDirectMusicStyle8_Release(p)                        (p)->lpVtbl->Release(p)
+/*** IDirectMusicStyle methods ***/
+#define IDirectMusicStyle8_GetBand(p,a,b)                    (p)->lpVtbl->GetBand(p,a,b)
+#define IDirectMusicStyle8_EnumBand(p,a,b)                   (p)->lpVtbl->EnumBand(p,a,b)
+#define IDirectMusicStyle8_GetDefaultBand(p,a)               (p)->lpVtbl->GetDefaultBand(p,a)
+#define IDirectMusicStyle8_EnumMotif(p,a,b)                  (p)->lpVtbl->EnumMotif(p,a,b)
+#define IDirectMusicStyle8_GetMotif(p,a,b)                   (p)->lpVtbl->GetMotif(p,a,b)
+#define IDirectMusicStyle8_GetDefaultChordMap(p,a)           (p)->lpVtbl->GetDefaultChordMap(p,a)
+#define IDirectMusicStyle8_EnumChordMap(p,a,b)               (p)->lpVtbl->EnumChordMap(p,a,b)
+#define IDirectMusicStyle8_GetChordMap(p,a,b)                (p)->lpVtbl->GetChordMap(p,a,b)
+#define IDirectMusicStyle8_GetTimeSignature(p,a)             (p)->lpVtbl->GetTimeSignature(p,a)
+#define IDirectMusicStyle8_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
+#define IDirectMusicStyle8_GetTempo(p,a)                     (p)->lpVtbl->GetTempo(p,a)
+/*** IDirectMusicStyle8 methods ***/
+#define IDirectMusicStyle8_EnumPattern(p,a,b,c)              (p)->lpVtbl->EnumPattern(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicChordMap interface
+ */
+#define INTERFACE IDirectMusicChordMap
+DECLARE_INTERFACE_(IDirectMusicChordMap,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicChordMap methods ***/
+    STDMETHOD(GetScale)(THIS_ DWORD *pdwScale) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicChordMap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicChordMap_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicChordMap_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicChordMap methods ***/
+#define IDirectMusicChordMap_GetScale(p,a)         (p)->lpVtbl->GetScale(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicComposer interface
+ */
+#define INTERFACE IDirectMusicComposer
+DECLARE_INTERFACE_(IDirectMusicComposer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicComposer methods ***/
+    STDMETHOD(ComposeSegmentFromTemplate)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment *pTemplate, WORD wActivity, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(ComposeSegmentFromShape)(THIS_ IDirectMusicStyle *pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(ComposeTransition)(THIS_ IDirectMusicSegment *pFromSeg, IDirectMusicSegment *pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg) PURE;
+    STDMETHOD(AutoTransition)(THIS_ IDirectMusicPerformance *pPerformance, IDirectMusicSegment *pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg, IDirectMusicSegmentState **ppToSegState, IDirectMusicSegmentState **ppTransSegState) PURE;
+    STDMETHOD(ComposeTemplateFromShape)(THIS_ WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment **ppTemplate) PURE;
+    STDMETHOD(ChangeChordMap)(THIS_ IDirectMusicSegment *pSegment, BOOL fTrackScale, IDirectMusicChordMap *pChordMap) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicComposer_QueryInterface(p,a,b)                      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicComposer_AddRef(p)                                  (p)->lpVtbl->AddRef(p)
+#define IDirectMusicComposer_Release(p)                                 (p)->lpVtbl->Release(p)
+/*** IDirectMusicComposer methods ***/
+#define IDirectMusicComposer_ComposeSegmentFromTemplate(p,a,b,c,d,e)    (p)->lpVtbl->ComposeSegmentFromTemplate(p,a,b,c,d,e)
+#define IDirectMusicComposer_ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicComposer_ComposeTransition(p,a,b,c,d,e,f,g)         (p)->lpVtbl->ComposeTransition(p,a,b,c,d,e,f,g)
+#define IDirectMusicComposer_AutoTransition(p,a,b,c,d,e,f,g,h)          (p)->lpVtbl->AutoTransition(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicComposer_ComposeTemplateFromShape(p,a,b,c,d,e,f)    (p)->lpVtbl->ComposeTemplateFromShape(p,a,b,c,d,e,f)
+#define IDirectMusicComposer_ChangeChordMap(p,a,b,c)                    (p)->lpVtbl->ChangeChordMap(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPatternTrack interface
+ */
+#define INTERFACE IDirectMusicPatternTrack
+DECLARE_INTERFACE_(IDirectMusicPatternTrack,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicPatternTrack methods ***/
+    STDMETHOD(CreateSegment)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment **ppSegment) PURE;
+    STDMETHOD(SetVariation)(THIS_ IDirectMusicSegmentState *pSegState, DWORD dwVariationFlags, DWORD dwPart) PURE;
+    STDMETHOD(SetPatternByName)(THIS_ IDirectMusicSegmentState *pSegState, WCHAR *wszName, IDirectMusicStyle *pStyle, DWORD dwPatternType, DWORD *pdwLength) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPatternTrack_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPatternTrack_AddRef(p)                     (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPatternTrack_Release(p)                    (p)->lpVtbl->Release(p)
+/*** IDirectMusicPatternTrack methods ***/
+#define IDirectMusicPatternTrack_CreateSegment(p,a,b)          (p)->lpVtbl->CreateSegment(p,a,b)
+#define IDirectMusicPatternTrack_SetVariation(p,a,b,c)         (p)->lpVtbl->SetVariation(p,a,b,c)
+#define IDirectMusicPatternTrack_SetPatternByName(p,a,b,c,d,e) (p)->lpVtbl->SetPatternByName(p,a,b,c,d,e)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicScript interface
+ */
+#define INTERFACE IDirectMusicScript
+DECLARE_INTERFACE_(IDirectMusicScript,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicScript methods ***/
+    STDMETHOD(Init)(THIS_ IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(CallRoutine)(THIS_ WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(SetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(GetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(SetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(GetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(SetVariableObject)(THIS_ WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(GetVariableObject)(THIS_ WCHAR *pwszVariableName, REFIID riid, LPVOID *ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+    STDMETHOD(EnumRoutine)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+    STDMETHOD(EnumVariable)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicScript_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicScript_AddRef(p)                           (p)->lpVtbl->AddRef(p)
+#define IDirectMusicScript_Release(p)                          (p)->lpVtbl->Release(p)
+/*** IDirectMusicScript methods ***/
+#define IDirectMusicPatternTrack_Init(p,a,b)                   (p)->lpVtbl->Init(p,a,b)
+#define IDirectMusicPatternTrack_CallRoutine(p,a,b)            (p)->lpVtbl->CallRoutine(p,a,b)
+#define IDirectMusicPatternTrack_SetVariableVariant(p,a,b,c,d) (p)->lpVtbl->SetVariableVariant(p,a,b,c,d)
+#define IDirectMusicPatternTrack_GetVariableVariant(p,a,b,c)   (p)->lpVtbl->GetVariableVariant(p,a,b,c)
+#define IDirectMusicPatternTrack_SetVariableNumber(p,a,b,c)    (p)->lpVtbl->SetVariableNumber(p,a,b,c)
+#define IDirectMusicPatternTrack_GetVariableNumber(p,a,b,c)    (p)->lpVtbl->GetVariableNumber(p,a,b,c)
+#define IDirectMusicPatternTrack_SetVariableObject(p,a,b,c)    (p)->lpVtbl->SetVariableObject(p,a,b,c)
+#define IDirectMusicPatternTrack_GetVariableObject(p,a,b,c,d)  (p)->lpVtbl->GetVariableObject(p,a,b,c,d)
+#define IDirectMusicPatternTrack_EnumRoutine(p,a,b)            (p)->lpVtbl->EnumRoutine(p,a,b)
+#define IDirectMusicPatternTrack_EnumVariable(p,a,b)           (p)->lpVtbl->EnumVariable(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicContainer interface
+ */
+#define INTERFACE IDirectMusicContainer
+DECLARE_INTERFACE_(IDirectMusicContainer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicContainer methods ***/
+    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR *pwszAlias) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicContainer_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectMusicContainer_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectMusicContainer methods ***/
+#define IDirectMusicContainer_EnumObject(p,a,b,c,d) (p)->lpVtbl->EnumObject(p,a,b,c,d)
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_PERFORMANCE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h
new file mode 100644
index 0000000..127bc6b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h
@@ -0,0 +1,246 @@
+/*
+ *  DirectMusic Software Synth Definitions
+ *
+ *  Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ *  This program 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 program 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 program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_SOFTWARESYNTH_H
+#define __WINE_DMUSIC_SOFTWARESYNTH_H
+
+#include <dmusicc.h>
+
+/*****************************************************************************
+ * Registry path
+ */
+#define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicSynth,     0x09823661,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicSynth8,    0x53cab625,0x2711,0x4c9f,0x9d,0xe7,0x1b,0x7f,0x92,0x5f,0x6f,0xc8);
+DEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+
+/* typedef definitions */
+typedef struct IDirectMusicSynth *LPDIRECTMUSICSYNTH;
+typedef struct IDirectMusicSynth8 *LPDIRECTMUSICSYNTH8;
+typedef struct IDirectMusicSynthSink *LPDIRECTMUSICSYNTHSINK;
+
+/* GUIDs - property set */
+DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink,   0x0a3a5ba5,0x37b6,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857,0x8952,0x11d2,0xba,0x1c,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define REFRESH_F_LASTBUFFER        0x1
+
+
+/*****************************************************************************
+ * Structures
+ */
+#ifndef _DMUS_VOICE_STATE_DEFINED
+#define _DMUS_VOICE_STATE_DEFINED
+
+/* typedef definition */
+typedef struct _DMUS_VOICE_STATE DMUS_VOICE_STATE, *LPDMUS_VOICE_STATE;
+
+/* actual structure */
+struct _DMUS_VOICE_STATE {
+	BOOL            bExists;
+	SAMPLE_POSITION spPosition;
+}; 
+#endif /* _DMUS_VOICE_STATE_DEFINED */
+
+
+/*****************************************************************************
+ * IDirectMusicSynth interface
+ */
+#define INTERFACE IDirectMusicSynth
+DECLARE_INTERFACE_(IDirectMusicSynth,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSynth methods ***/
+    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;
+    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;
+    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;
+    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
+    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;
+    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
+    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;
+    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSynth_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSynth_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSynth_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirectMusicSynth methods ***/
+#define IDirectMusicSynth_Open(p,a)                   (p)->lpVtbl->Open(p,a)
+#define IDirectMusicSynth_Close(p)                    (p)->lpVtbl->Close(p)
+#define IDirectMusicSynth_SetNumChannelGroups(p,a)    (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicSynth_Download(p,a,b,c)           (p)->lpVtbl->Download(p,a,b,c)
+#define IDirectMusicSynth_Unload(p,a,b,c)             (p)->lpVtbl->Unload(p,a,b,c)
+#define IDirectMusicSynth_PlayBuffer(p,a,b,c)         (p)->lpVtbl->PlayBuffer(p,a,b,c)
+#define IDirectMusicSynth_GetRunningStats(p,a)        (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicSynth_GetPortCaps(p,a)            (p)->lpVtbl->GetPortCaps(p,a)
+#define IDirectMusicSynth_SetMasterClock(p,a)         (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusicSynth_GetLatencyClock(p,a)        (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicSynth_Activate(p,a)               (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicSynth_SetSynthSink(p,a)           (p)->lpVtbl->SetSynthSink(p,a)
+#define IDirectMusicSynth_Render(p,a,b,c)             (p)->lpVtbl->Render(p,a,b,c)
+#define IDirectMusicSynth_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth_GetFormat(p,a,b)            (p)->lpVtbl->GetFormat(p,a,b)
+#define IDirectMusicSynth_GetAppend(p,a)              (p)->lpVtbl->GetAppend(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSynth8 interface
+ */
+#define INTERFACE IDirectMusicSynth8
+DECLARE_INTERFACE_(IDirectMusicSynth8,IDirectMusicSynth)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSynth methods ***/
+    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;
+    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;
+    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;
+    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
+    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;
+    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
+    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;
+    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+    /*** IDirectMusicSynth8 methods ***/
+    STDMETHOD(PlayVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, LONG prPitch, LONG vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) PURE;
+    STDMETHOD(StopVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId) PURE;
+    STDMETHOD(GetVoiceState)(THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) PURE;
+    STDMETHOD(Refresh)(THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE;
+    STDMETHOD(AssignChannelToBuses)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSynth8_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSynth8_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSynth8_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IDirectMusicSynth methods ***/
+#define IDirectMusicSynth8_Open(p,a)                        (p)->lpVtbl->Open(p,a)
+#define IDirectMusicSynth8_Close(p)                         (p)->lpVtbl->Close(p)
+#define IDirectMusicSynth8_SetNumChannelGroups(p,a)         (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicSynth8_Download(p,a,b,c)                (p)->lpVtbl->Download(p,a,b,c)
+#define IDirectMusicSynth8_Unload(p,a,b,c)                  (p)->lpVtbl->Unload(p,a,b,c)
+#define IDirectMusicSynth8_PlayBuffer(p,a,b,c)              (p)->lpVtbl->PlayBuffer(p,a,b,c)
+#define IDirectMusicSynth8_GetRunningStats(p,a)             (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicSynth8_GetPortCaps(p,a)                 (p)->lpVtbl->GetPortCaps(p,a)
+#define IDirectMusicSynth8_SetMasterClock(p,a)              (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusicSynth8_GetLatencyClock(p,a)             (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicSynth8_Activate(p,a)                    (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicSynth8_SetSynthSink(p,a)                (p)->lpVtbl->SetSynthSink(p,a)
+#define IDirectMusicSynth8_Render(p,a,b,c)                  (p)->lpVtbl->Render(p,a,b,c)
+#define IDirectMusicSynth8_SetChannelPriority(p,a,b,c)      (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth8_GetChannelPriority(p,a,b,c)      (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth8_GetFormat(p,a,b)                 (p)->lpVtbl->GetFormat(p,a,b)
+#define IDirectMusicSynth8_GetAppend(p,a)                   (p)->lpVtbl->GetAppend(p,a)
+/*** IDirectMusicSynth8 methods ***/
+#define IDirectMusicSynth8_PlayVoice(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->PlayVoice(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirectMusicSynth8_StopVoice(p,a,b)                 (p)->lpVtbl->StopVoice(p,a,b)
+#define IDirectMusicSynth8_GetVoiceState(p,a,b,c)           (p)->lpVtbl->GetVoiceState(p,a,b,c)
+#define IDirectMusicSynth8_Refresh(p,a,b)                   (p)->lpVtbl->Refresh(p,a,b)
+#define IDirectMusicSynth8_AssignChannelToBuses(p,a,b,c,d)  (p)->lpVtbl->AssignChannelToBuses(p,a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSynthSink interface
+ */
+#define INTERFACE IDirectMusicSynthSink
+DECLARE_INTERFACE_(IDirectMusicSynthSink,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectMusicSynthSink methods ***/
+    STDMETHOD(Init)(THIS_ IDirectMusicSynth *pSynth) PURE;
+    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+    STDMETHOD(SampleToRefTime)(THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE;
+    STDMETHOD(RefTimeToSample)(THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE;
+    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
+    STDMETHOD(GetDesiredBufferSize)(THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSynthSink_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSynthSink_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSynthSink_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirectMusicSynth methods ***/
+#define IDirectMusicSynthSink_Init(p,a)                  (p)->lpVtbl->Init(p,a)
+#define IDirectMusicSynthSink_SetMasterClock(p,a)        (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusicSynthSink_GetLatencyClock(p,a)       (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicSynthSink_Activate(p,a)              (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicSynthSink_SampleToRefTime(p,a,b)     (p)->lpVtbl->SampleToRefTime(p,a,b)
+#define IDirectMusicSynthSink_RefTimeToSample(p,a,b)     (p)->lpVtbl->RefTimeToSample(p,a,b)
+#define IDirectMusicSynthSink_SetDirectSound(p,a,b)      (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusicSynthSink_GetDesiredBufferSize(p,a)  (p)->lpVtbl->GetDesiredBufferSize(p,a)
+#endif
+
+#endif /* __WINE_DMUSIC_SOFTWARESYNTH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl
new file mode 100644
index 0000000..a69bc39
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl
@@ -0,0 +1,420 @@
+/*
+ * Copyright (C) 1999 Paul Quinn
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "servprov.idl";
+
+
+interface IOleDocumentView;
+interface IEnumOleDocumentViews;
+
+
+/*****************************************************************************
+ * IOleDocument interface
+ */
+[
+    object,
+    uuid(b722bcc5-4e68-101b-a2bc-00aa00404770),
+    pointer_default(unique)
+]
+interface IOleDocument : IUnknown
+{
+    typedef [unique] IOleDocument *LPOLEDOCUMENT;
+
+    typedef enum
+    {
+        DOCMISC_CANCREATEMULTIPLEVIEWS = 1,
+        DOCMISC_SUPPORTCOMPLEXRECTANGLES = 2,
+        DOCMISC_CANTOPENEDIT = 4,
+        DOCMISC_NOFILESUPPORT = 8
+    } DOCMISC;
+
+    HRESULT CreateView(
+        [in, unique] IOleInPlaceSite *pIPSite,
+        [in, unique] IStream *pstm,
+        [in] DWORD dwReserved,
+        [out] IOleDocumentView **ppView);
+
+    HRESULT GetDocMiscStatus(
+        [out] DWORD *pdwStatus);
+
+    HRESULT EnumViews(
+        [out] IEnumOleDocumentViews **ppEnum,
+        [out] IOleDocumentView **ppView);
+}
+
+
+/*****************************************************************************
+ * IOleDocumentSite interface
+ */
+[
+    object,
+    uuid(b722bcc7-4e68-101b-a2bc-00aa00404770),
+    pointer_default(unique)
+]
+interface IOleDocumentSite : IUnknown
+{
+    typedef [unique] IOleDocumentSite *LPOLEDOCUMENTSITE;
+
+    HRESULT ActivateMe( [in] IOleDocumentView *pViewToActivate );
+}
+
+
+/*****************************************************************************
+ * IOleDocumentView interface
+ */
+[
+    object,
+    uuid(b722bcc6-4e68-101b-a2bc-00aa00404770),
+    pointer_default(unique)
+]
+interface IOleDocumentView : IUnknown
+{
+    typedef [unique] IOleDocumentView *LPOLEDOCUMENTVIEW;
+
+    HRESULT SetInPlaceSite( [in, unique] IOleInPlaceSite *pIPSite );
+
+    HRESULT GetInPlaceSite( [out] IOleInPlaceSite **ppIPSite );
+
+    HRESULT GetDocument( [out] IUnknown **ppunk );
+
+    HRESULT SetRect( [in] LPRECT prcView );
+
+    HRESULT GetRect( [out] LPRECT prcView );
+
+    HRESULT SetRectComplex(
+        [in, unique] LPRECT prcView,
+        [in, unique] LPRECT prcHScroll,
+        [in, unique] LPRECT prcVScroll,
+        [in, unique] LPRECT prcSizeBox);
+
+    HRESULT Show( [in] BOOL fShow );
+
+    HRESULT UIActivate( [in] BOOL fUIActivate );
+
+    HRESULT Open();
+
+    HRESULT CloseView( [in] DWORD dwReserved );
+
+    HRESULT SaveViewState( [in] LPSTREAM pstm );
+
+    HRESULT ApplyViewState( [in] LPSTREAM pstm );
+
+    HRESULT Clone(
+        [in] IOleInPlaceSite *pIPSiteNew,
+        [out] IOleDocumentView **ppViewNew);
+}
+
+
+/*****************************************************************************
+ * IEnumOleDocumentViews interface
+ */
+[
+    object,
+    uuid(b722bcc8-4e68-101b-a2bc-00aa00404770),
+    pointer_default(unique)
+]
+interface IEnumOleDocumentViews : IUnknown
+{
+    typedef [unique] IEnumOleDocumentViews *LPENUMOLEDOCUMENTVIEWS;
+
+    [local]
+    HRESULT Next(
+        [in] ULONG cViews,
+        [out] IOleDocumentView **rgpView,
+        [out] ULONG *pcFetched);
+
+    [call_as(Next)]
+    HRESULT RemoteNext(
+        [in] ULONG cViews,
+        [out, size_is(cViews), length_is(*pcFetched)] IOleDocumentView **rgpView,
+        [out] ULONG *pcFetched);
+
+    HRESULT Skip( [in] ULONG cViews );
+
+    HRESULT Reset();
+
+    HRESULT Clone( [out] IEnumOleDocumentViews **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IOleCommandTarget interface
+ */
+[
+    object,
+    uuid(b722bccb-4e68-101b-a2bc-00aa00404770),
+    pointer_default(unique)
+]
+interface IOleCommandTarget : IUnknown
+{
+    typedef [unique] IOleCommandTarget *LPOLECOMMANDTARGET;
+
+    typedef enum OLECMDF
+    {
+        OLECMDF_SUPPORTED = 0x1,
+        OLECMDF_ENABLED = 0x2,
+        OLECMDF_LATCHED = 0x4,
+        OLECMDF_NINCHED = 0x8,
+        OLECMDF_INVISIBLE = 0x10,
+        OLECMDF_DEFHIDEONCTXTMENU = 0x20
+    } OLECMDF;
+
+    typedef struct _tagOLECMD
+    {
+        ULONG cmdID;
+        DWORD cmdf;
+    } OLECMD;
+
+    typedef struct _tagOLECMDTEXT
+    {
+        DWORD cmdtextf;
+        ULONG cwActual;
+        ULONG cwBuf;
+        [size_is(cwBuf)] WCHAR rgwz[];
+    } OLECMDTEXT;
+
+    typedef enum OLECMDTEXTF
+    {
+        OLECMDTEXTF_NONE = 0,
+        OLECMDTEXTF_NAME = 1,
+        OLECMDTEXTF_STATUS = 2
+    } OLECMDTEXTF;
+
+    typedef enum OLECMDEXECOPT
+    {
+        OLECMDEXECOPT_DODEFAULT = 0,
+        OLECMDEXECOPT_PROMPTUSER = 1,
+        OLECMDEXECOPT_DONTPROMPTUSER = 2,
+        OLECMDEXECOPT_SHOWHELP = 3
+    } OLECMDEXECOPT;
+
+    typedef enum OLECMDID
+    {
+        OLECMDID_OPEN = 1,
+        OLECMDID_NEW = 2,
+        OLECMDID_SAVE = 3,
+        OLECMDID_SAVEAS = 4,
+        OLECMDID_SAVECOPYAS = 5,
+        OLECMDID_PRINT = 6,
+        OLECMDID_PRINTPREVIEW = 7,
+        OLECMDID_PAGESETUP = 8,
+        OLECMDID_SPELL = 9,
+        OLECMDID_PROPERTIES = 10,
+        OLECMDID_CUT = 11,
+        OLECMDID_COPY = 12,
+        OLECMDID_PASTE = 13,
+        OLECMDID_PASTESPECIAL = 14,
+        OLECMDID_UNDO = 15,
+        OLECMDID_REDO = 16,
+        OLECMDID_SELECTALL = 17,
+        OLECMDID_CLEARSELECTION = 18,
+        OLECMDID_ZOOM = 19,
+        OLECMDID_GETZOOMRANGE = 20,
+        OLECMDID_UPDATECOMMANDS = 21,
+        OLECMDID_REFRESH = 22,
+        OLECMDID_STOP = 23,
+        OLECMDID_HIDETOOLBARS = 24,
+        OLECMDID_SETPROGRESSMAX = 25,
+        OLECMDID_SETPROGRESSPOS = 26,
+        OLECMDID_SETPROGRESSTEXT = 27,
+        OLECMDID_SETTITLE = 28,
+        OLECMDID_SETDOWNLOADSTATE = 29,
+        OLECMDID_STOPDOWNLOAD = 30,
+        OLECMDID_ONTOOLBARACTIVATED = 31,
+        OLECMDID_FIND = 32,
+        OLECMDID_DELETE = 33,
+        OLECMDID_HTTPEQUIV = 34,
+        OLECMDID_HTTPEQUIV_DONE = 35,
+        OLECMDID_ENABLE_INTERACTION = 36,
+        OLECMDID_ONUNLOAD = 37,
+        OLECMDID_PROPERTYBAG2 = 38,
+        OLECMDID_PREREFRESH = 39,
+        /* iexplorer uses ... 44 */
+        OLECMDID_SHOWSCRIPTERROR = 40,
+        OLECMDID_SHOWMESSAGE = 41,
+        OLECMDID_SHOWFIND = 42,
+        OLECMDID_SHOWPAGESETUP = 43,
+        OLECMDID_SHOWPRINT = 44,
+        OLECMDID_CLOSE = 45,
+        OLECMDID_ALLOWUILESSSAVEAS = 46,
+        OLECMDID_DONTDOWNLOADCSS = 47,
+        OLECMDID_UPDATEPAGESTATUS = 48,
+        OLECMDID_PRINT2 = 49,
+        OLECMDID_PRINTPREVIEW2 = 50,
+        OLECMDID_SETPRINTTEMPLATE = 51,
+        OLECMDID_GETPRINTTEMPLATE = 52,
+        OLECMDID_PAGEACTIONBLOCKED = 55,
+        OLECMDID_PAGEACTIONUIQUERY = 56,
+        OLECMDID_FOCUSVIEWCONTROLS = 57,
+        OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
+        OLECMDID_SHOWPAGEACTIONMENU = 59,
+        OLECMDID_ADDTRAVELENTRY = 60,
+        OLECMDID_UPDATETRAVELENTRY = 61,
+        OLECMDID_UPDATEBACKFORWARDSTATE = 62,
+        OLECMDID_OPTICAL_ZOOM = 63,
+        OLECMDID_OPTICAL_GETZOOMRANGE = 64,
+        OLECMDID_WINDOWSTATECHANGED = 65,
+        OLECMDID_ACTIVEXINSTALLSCOPE = 66,
+        OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67
+    } OLECMDID;
+
+    HRESULT QueryStatus(
+        [in, unique] const GUID *pguidCmdGroup,
+        [in] ULONG cCmds,
+        [in, out, size_is(cCmds)] OLECMD prgCmds[],
+        [in, out, unique] OLECMDTEXT *pCmdText);
+
+    HRESULT Exec(
+        [in, unique] const GUID *pguidCmdGroup,
+        [in] DWORD nCmdID,
+        [in] DWORD nCmdexecopt,
+        [in, unique] VARIANT *pvaIn,
+        [in, out, unique] VARIANT *pvaOut);
+}
+
+
+/*****************************************************************************
+ * IContinueCallback interface
+ */
+[
+   object,
+   uuid(b722bcca-4e68-101b-a2bc-00aa00404770),
+   pointer_default(unique)
+]
+interface IContinueCallback : IUnknown
+{
+    typedef [unique] IContinueCallback *LPCONTINUECALLBACK;
+
+    HRESULT FContinue();
+
+    HRESULT FContinuePrinting(
+        [in] LONG nCntPrinted,
+        [in] LONG nCurPage,
+        [in, unique] WCHAR *pwszPrintStatus);
+}
+
+
+/*****************************************************************************
+ * IPrint interface
+ */
+[
+   object,
+   uuid(b722bcc9-4e68-101b-a2bc-00aa00404770),
+   pointer_default(unique)
+]
+interface IPrint : IUnknown
+{
+    typedef [unique] IPrint *LPPRINT;
+
+    typedef enum
+    {
+        PRINTFLAG_MAYBOTHERUSER = 1,
+        PRINTFLAG_PROMPTUSER  = 2,
+        PRINTFLAG_USERMAYCHANGEPRINTER  = 4,
+        PRINTFLAG_RECOMPOSETODEVICE = 8,
+        PRINTFLAG_DONTACTUALLYPRINT = 16,
+        PRINTFLAG_FORCEPROPERTIES = 32,
+        PRINTFLAG_PRINTTOFILE = 64
+    } PRINTFLAG;
+
+    typedef struct tagPAGERANGE
+    {
+        LONG nFromPage;
+        LONG nToPage;
+    } PAGERANGE;
+
+    typedef struct tagPAGESET
+    {
+        ULONG cbStruct;
+        BOOL fOddPages;
+        BOOL fEvenPages;
+        ULONG cPageRange;
+        [size_is(cPageRange)] PAGERANGE rgPages[];
+    } PAGESET;
+
+    HRESULT SetInitialPageNum(
+        [in] LONG nFirstPage);
+
+    HRESULT GetPageInfo(
+        [out] LONG *pnFirstPage,
+        [out] LONG *pcPages);
+
+    [local]
+    HRESULT Print(
+        [in] DWORD grfFlags,
+        [in, out] DVTARGETDEVICE **pptd,
+        [in, out] PAGESET **ppPageSet,
+        [in, out, unique] STGMEDIUM *pstgmOptions,
+        [in] IContinueCallback *pcallback,
+        [in]  LONG nFirstPage,
+        [out] LONG *pcPagesPrinted,
+        [out] LONG *pnLastPage);
+
+    [call_as(Print)]
+    HRESULT RemotePrint(
+        [in] DWORD grfFlags,
+        [in, out] DVTARGETDEVICE **pptd,
+        [in, out] PAGESET **pppageset,
+        [in, out, unique] RemSTGMEDIUM *pstgmOptions,
+        [in] IContinueCallback *pcallback,
+        [in]  LONG nFirstPage,
+        [out] LONG *pcPagesPrinted,
+        [out] LONG *pnLastPage);
+}
+
+
+cpp_quote("#define OLECMDERR_E_FIRST            (OLE_E_LAST+1)")
+cpp_quote("#define OLECMDERR_E_NOTSUPPORTED     (OLECMDERR_E_FIRST)")
+cpp_quote("#define OLECMDERR_E_DISABLED         (OLECMDERR_E_FIRST+1)")
+cpp_quote("#define OLECMDERR_E_NOHELP           (OLECMDERR_E_FIRST+2)")
+cpp_quote("#define OLECMDERR_E_CANCELED         (OLECMDERR_E_FIRST+3)")
+cpp_quote("#define OLECMDERR_E_UNKNOWNGROUP     (OLECMDERR_E_FIRST+4)")
+
+cpp_quote("#define MSOCMDERR_E_FIRST OLECMDERR_E_FIRST")
+cpp_quote("#define MSOCMDERR_E_NOTSUPPORTED OLECMDERR_E_NOTSUPPORTED")
+cpp_quote("#define MSOCMDERR_E_DISABLED OLECMDERR_E_DISABLED")
+cpp_quote("#define MSOCMDERR_E_NOHELP OLECMDERR_E_NOHELP")
+cpp_quote("#define MSOCMDERR_E_CANCELED OLECMDERR_E_CANCELED")
+cpp_quote("#define MSOCMDERR_E_UNKNOWNGROUP OLECMDERR_E_UNKNOWNGROUP")
+
+cpp_quote("#define LPMSODOCUMENT                  LPOLEDOCUMENT")
+cpp_quote("#define LPMSODOCUMENTSITE              LPOLEDOCUMENTSITE")
+cpp_quote("#define LPMSOVIEW                      LPOLEDOCUMENTVIEW")
+cpp_quote("#define LPENUMMSOVIEW                  LPENUMOLEDOCUMENTVIEWS")
+cpp_quote("#define LPMSOCOMMANDTARGET             LPOLECOMMANDTARGET")
+cpp_quote("#define IID_IMsoDocument               IID_IOleDocument")
+cpp_quote("#define IID_IMsoDocumentSite           IID_IOleDocumentSite")
+cpp_quote("#define IID_IMsoView                   IID_IOleDocumentView")
+cpp_quote("#define IID_IEnumMsoView               IID_IEnumOleDocumentViews")
+cpp_quote("#define IID_IMsoCommandTarget          IID_IOleCommandTarget")
+
+cpp_quote("EXTERN_C const GUID SID_SContainerDispatch;")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl
new file mode 100644
index 0000000..c6893ab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2011 Piotr Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "mshtml.idl";
+
+[
+    local,
+    object,
+    uuid(3050f801-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IDocObjectService : IUnknown
+{
+    HRESULT FireBeforeNavigate2(
+            [in] IDispatch *pDispatch,
+            [in] LPCWSTR lpszUrl,
+            [in] DWORD dwFlags,
+            [in] LPCWSTR lpszFrameName,
+            [in] BYTE *pPostData,
+            [in] DWORD cbPostData,
+            [in] LPCWSTR lpszHeaders,
+            [in] BOOL fPlayNavSound,
+            [out] BOOL *pfCancel);
+
+    HRESULT FireNavigateComplete2(
+            [in] IHTMLWindow2 *pHTMLWindow2,
+            [in] DWORD dwFlags);
+
+    HRESULT FireDownloadBegin(void);
+
+    HRESULT FireDownloadComplete(void);
+
+    HRESULT FireDocumentComplete(
+            [in] IHTMLWindow2 *pHTMLWindow,
+            [in] DWORD dwFlags);
+
+    HRESULT UpdateDesktopComponent(
+            [in] IHTMLWindow2 *pHTMLWindow);
+
+    HRESULT GetPendingUrl(
+            [out] BSTR *pbstrPendingUrl);
+
+    HRESULT ActiveElementChanged(
+            [in] IHTMLElement *pHTMLElement);
+
+    HRESULT GetUrlSearchComponent(
+            [out] BSTR *pbstrSearch);
+
+    HRESULT IsErrorUrl(
+            [in] LPCWSTR lpszUrl,
+            [out] BOOL *pfIsError);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl
new file mode 100644
index 0000000..6bfa37a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+[
+    object,
+    uuid(988934A4-064B-11D3-BB80-00104B35E7F9),
+    pointer_default(unique),
+    local
+]
+interface IDownloadManager : IUnknown
+{
+    HRESULT Download(
+        [in] IMoniker *pmk,
+        [in] IBindCtx *pbc,
+        [in] DWORD dwBindVerb,
+        [in] LONG grfBINDF,
+        [in] BINDINFO *pBindInfo,
+        [in] LPCOLESTR pszHeaders,
+        [in] LPCOLESTR pszRedir,
+        [in] UINT uiCP);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h
new file mode 100644
index 0000000..93cea7a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h
@@ -0,0 +1,367 @@
+/*
+ * Copyright (C) 2003-2005 Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLAY8_DPADDR_H
+#define __WINE_DPLAY8_DPADDR_H
+
+#include <ole2.h>
+#include <dplay8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef REFIID	        DPNAREFIID;
+typedef struct sockaddr SOCKADDR;
+
+/*****************************************************************************
+ * DirectPlay8Addr defines
+ */
+#define DPNA_DATATYPE_STRING                0x00000001
+#define DPNA_DATATYPE_DWORD                 0x00000002
+#define DPNA_DATATYPE_GUID                  0x00000003
+#define DPNA_DATATYPE_BINARY                0x00000004
+#define DPNA_DATATYPE_STRING_ANSI           0x00000005
+#define DPNA_DPNSVR_PORT                          6073
+#define DPNA_INDEX_INVALID                  0xFFFFFFFF
+
+#define DPNA_SEPARATOR_KEYVALUE             L'='
+#define DPNA_SEPARATOR_KEYVALUE_A           '='
+#define DPNA_SEPARATOR_USERDATA             L'#'
+#define DPNA_SEPARATOR_USERDATA_A           '#'
+#define DPNA_SEPARATOR_COMPONENT            L';'
+#define DPNA_SEPARATOR_COMPONENT_A          ';'
+#define DPNA_ESCAPECHAR                     L'%'
+#define DPNA_ESCAPECHAR_A                   '%'
+
+#define DPNA_HEADER_A                       "x-directplay:/"
+#define DPNA_KEY_APPLICATION_INSTANCE_A     "applicationinstance"
+#define DPNA_KEY_BAUD_A                     "baud"
+#define DPNA_KEY_DEVICE_A                   "device"
+#define DPNA_KEY_FLOWCONTROL_A              "flowcontrol"
+#define DPNA_KEY_HOSTNAME_A                 "hostname"
+#define DPNA_KEY_NAMEINFO_A                 "nameinfo"
+#define DPNA_KEY_PARITY_A                   "parity"
+#define DPNA_KEY_PHONENUMBER_A              "phonenumber"
+#define DPNA_KEY_PORT_A                     "port"
+#define DPNA_KEY_PROCESSOR_A                "processor"
+#define DPNA_KEY_PROGRAM_A                  "program"
+#define DPNA_KEY_PROVIDER_A                 "provider"
+#define DPNA_KEY_SCOPE_A                     "scope"
+#define DPNA_KEY_STOPBITS_A                 "stopbits"
+#define DPNA_KEY_TRAVERSALMODE_A             "traversalmode"
+
+#define DPNA_STOP_BITS_ONE_A                "1"
+#define DPNA_STOP_BITS_ONE_FIVE_A           "1.5"
+#define DPNA_STOP_BITS_TWO_A                "2"
+#define DPNA_PARITY_NONE_A                  "NONE"
+#define DPNA_PARITY_EVEN_A                  "EVEN"
+#define DPNA_PARITY_ODD_A                   "ODD"
+#define DPNA_PARITY_MARK_A                  "MARK"
+#define DPNA_PARITY_SPACE_A                 "SPACE"
+#define DPNA_FLOW_CONTROL_NONE_A            "NONE"
+#define DPNA_FLOW_CONTROL_XONXOFF_A         "XONXOFF"
+#define DPNA_FLOW_CONTROL_RTS_A             "RTS"
+#define DPNA_FLOW_CONTROL_DTR_A             "DTR"
+#define DPNA_FLOW_CONTROL_RTSDTR_A          "RTSDTR"
+#define DPNA_VALUE_TCPIPPROVIDER_A          "IP"
+#define DPNA_VALUE_IPXPROVIDER_A            "IPX"
+#define DPNA_VALUE_MODEMPROVIDER_A          "MODEM"
+#define DPNA_VALUE_SERIALPROVIDER_A         "SERIAL"
+
+/* And now the same thing but as Unicode strings */
+#if defined(__GNUC__)
+
+# define DPNA_HEADER                   (const WCHAR []){ 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 }
+# define DPNA_KEY_APPLICATION_INSTANCE (const WCHAR []){ 'a','p','p','l','i','c','a','t','i','o','n','i','n','s','t','a','n','c','e',0 }
+# define DPNA_KEY_BAUD                 (const WCHAR []){ 'b','a','u','d',0 }
+# define DPNA_KEY_DEVICE               (const WCHAR []){ 'd','e','v','i','c','e',0 }
+# define DPNA_KEY_FLOWCONTROL          (const WCHAR []){ 'f','l','o','w','c','o','n','t','r','o','l',0 }
+# define DPNA_KEY_HOSTNAME             (const WCHAR []){ 'h','o','s','t','n','a','m','e',0 }
+# define DPNA_KEY_NAMEINFO             (const WCHAR []){ 'n','a','m','e','i','n','f','o',0 }
+# define DPNA_KEY_PARITY               (const WCHAR []){ 'p','a','r','i','t','y',0 }
+# define DPNA_KEY_PHONENUMBER          (const WCHAR []){ 'p','h','o','n','e','n','u','m','b','e','r',0 }
+# define DPNA_KEY_PORT                 (const WCHAR []){ 'p','o','r','t',0 }
+# define DPNA_KEY_PROCESSOR            (const WCHAR []){ 'p','r','o','c','e','s','s','o','r',0 }
+# define DPNA_KEY_PROGRAM              (const WCHAR []){ 'p','r','o','g','r','a','m',0 }
+# define DPNA_KEY_PROVIDER             (const WCHAR []){ 'p','r','o','v','i','d','e','r',0 }
+# define DPNA_KEY_SCOPE                (const WCHAR []){ 's','c','o','p','e',0 }
+# define DPNA_KEY_STOPBITS             (const WCHAR []){ 's','t','o','p','b','i','t','s',0 }
+# define DPNA_KEY_TRAVERSALMODE        (const WCHAR []){ 't','r','a','v','e','r','s','a','l','m','o','d','e',0 }
+# define DPNA_STOP_BITS_ONE            (const WCHAR []){ '1',0 }
+# define DPNA_STOP_BITS_ONE_FIVE       (const WCHAR []){ '1','.','5',0 }
+# define DPNA_STOP_BITS_TWO            (const WCHAR []){ '2',0 }
+# define DPNA_PARITY_NONE              (const WCHAR []){ 'N','O','N','E',0 }
+# define DPNA_PARITY_EVEN              (const WCHAR []){ 'E','V','E','N',0 }
+# define DPNA_PARITY_ODD               (const WCHAR []){ 'O','D','D',0 }
+# define DPNA_PARITY_MARK              (const WCHAR []){ 'M','A','R','K',0 }
+# define DPNA_PARITY_SPACE             (const WCHAR []){ 'S','P','A','C','E',0 }
+# define DPNA_FLOW_CONTROL_NONE        (const WCHAR []){ 'N','O','N','E',0 }
+# define DPNA_FLOW_CONTROL_XONXOFF     (const WCHAR []){ 'X','O','N','X','O','F','F',0 }
+# define DPNA_FLOW_CONTROL_RTS         (const WCHAR []){ 'R','T','S',0 }
+# define DPNA_FLOW_CONTROL_DTR         (const WCHAR []){ 'D','T','R',0 }
+# define DPNA_FLOW_CONTROL_RTSDTR      (const WCHAR []){ 'R','T','S','D','T','R',0 }
+# define DPNA_VALUE_TCPIPPROVIDER      (const WCHAR []){ 'I','P',0 }
+# define DPNA_VALUE_IPXPROVIDER        (const WCHAR []){ 'I','P','X',0 }
+# define DPNA_VALUE_MODEMPROVIDER      (const WCHAR []){ 'M','O','D','E','M',0 }
+# define DPNA_VALUE_SERIALPROVIDER     (const WCHAR []){ 'S','E','R','I','A','L',0 }
+
+#elif defined(_MSC_VER)
+
+# define DPNA_HEADER                   L"x-directplay:/"
+# define DPNA_KEY_APPLICATION_INSTANCE L"applicationinstance"
+# define DPNA_KEY_BAUD                 L"baud"
+# define DPNA_KEY_DEVICE               L"device"
+# define DPNA_KEY_FLOWCONTROL          L"flowcontrol"
+# define DPNA_KEY_HOSTNAME             L"hostname"
+# define DPNA_KEY_NAMEINFO             L"nameinfo"
+# define DPNA_KEY_PARITY               L"parity"
+# define DPNA_KEY_PHONENUMBER          L"phonenumber"
+# define DPNA_KEY_PORT                 L"port"
+# define DPNA_KEY_PROCESSOR            L"processor"
+# define DPNA_KEY_PROGRAM              L"program"
+# define DPNA_KEY_PROVIDER             L"provider"
+# define DPNA_KEY_SCOPE                L"scope"
+# define DPNA_KEY_STOPBITS             L"stopbits"
+# define DPNA_KEY_TRAVERSALMODE        L"traversalmode"
+# define DPNA_STOP_BITS_ONE            L"1"
+# define DPNA_STOP_BITS_ONE_FIVE       L"1.5"
+# define DPNA_STOP_BITS_TWO            L"2"
+# define DPNA_PARITY_NONE              L"NONE"
+# define DPNA_PARITY_EVEN              L"EVEN"
+# define DPNA_PARITY_ODD               L"ODD"
+# define DPNA_PARITY_MARK              L"MARK"
+# define DPNA_PARITY_SPACE             L"SPACE"
+# define DPNA_FLOW_CONTROL_NONE        L"NONE"
+# define DPNA_FLOW_CONTROL_XONXOFF     L"XONXOFF"
+# define DPNA_FLOW_CONTROL_RTS         L"RTS"
+# define DPNA_FLOW_CONTROL_DTR         L"DTR"
+# define DPNA_FLOW_CONTROL_RTSDTR      L"RTSDTR"
+# define DPNA_VALUE_TCPIPPROVIDER      L"IP"
+# define DPNA_VALUE_IPXPROVIDER        L"IPX"
+# define DPNA_VALUE_MODEMPROVIDER      L"MODEM"
+# define DPNA_VALUE_SERIALPROVIDER     L"SERIAL"
+
+#else
+
+static const WCHAR DPNA_HEADER[] = { 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 };
+static const WCHAR DPNA_KEY_APPLICATION_INSTANCE[] = { 'a','p','p','l','i','c','a','t','i','o','n','i','n','s','t','a','n','c','e',0 };
+static const WCHAR DPNA_KEY_BAUD[] = { 'b','a','u','d',0 };
+static const WCHAR DPNA_KEY_DEVICE[] = { 'd','e','v','i','c','e',0 };
+static const WCHAR DPNA_KEY_FLOWCONTROL[] = { 'f','l','o','w','c','o','n','t','r','o','l',0 };
+static const WCHAR DPNA_KEY_HOSTNAME[] = { 'h','o','s','t','n','a','m','e',0 };
+static const WCHAR DPNA_KEY_NAMEINFO[] = { 'n','a','m','e','i','n','f','o',0 };
+static const WCHAR DPNA_KEY_PARITY[] = { 'p','a','r','i','t','y',0 };
+static const WCHAR DPNA_KEY_PHONENUMBER[] = { 'p','h','o','n','e','n','u','m','b','e','r',0 };
+static const WCHAR DPNA_KEY_PORT[] =   { 'p','o','r','t',0 };
+static const WCHAR DPNA_KEY_PROCESSOR[] = { 'p','r','o','c','e','s','s','o','r',0 };
+static const WCHAR DPNA_KEY_PROGRAM[] = { 'p','r','o','g','r','a','m',0 };
+static const WCHAR DPNA_KEY_PROVIDER[] = { 'p','r','o','v','i','d','e','r',0 };
+static const WCHAR DPNA_KEY_SCOPE[] = { 's','c','o','p','e',0 };
+static const WCHAR DPNA_KEY_STOPBITS[] = { 's','t','o','p','b','i','t','s',0 };
+static const WCHAR DPNA_KEY_TRAVERSALMODE[] = { 't','r','a','v','e','r','s','a','l','m','o','d','e',0 };
+static const WCHAR DPNA_STOP_BITS_ONE[] = { '1',0 };
+static const WCHAR DPNA_STOP_BITS_ONE_FIVE[] = { '1','.','5',0 };
+static const WCHAR DPNA_STOP_BITS_TWO[] = { '2',0 };
+static const WCHAR DPNA_PARITY_NONE[] = { 'N','O','N','E',0 };
+static const WCHAR DPNA_PARITY_EVEN[] = { 'E','V','E','N',0 };
+static const WCHAR DPNA_PARITY_ODD[] = { 'O','D','D',0 };
+static const WCHAR DPNA_PARITY_MARK[] = { 'M','A','R','K',0 };
+static const WCHAR DPNA_PARITY_SPACE[] = { 'S','P','A','C','E',0 };
+static const WCHAR DPNA_FLOW_CONTROL_NONE[] = { 'N','O','N','E',0 };
+static const WCHAR DPNA_FLOW_CONTROL_XONXOFF[] = { 'X','O','N','X','O','F','F',0 };
+static const WCHAR DPNA_FLOW_CONTROL_RTS[] = { 'R','T','S',0 };
+static const WCHAR DPNA_FLOW_CONTROL_DTR[] = { 'D','T','R',0 };
+static const WCHAR DPNA_FLOW_CONTROL_RTSDTR[] = { 'R','T','S','D','T','R',0 };
+static const WCHAR DPNA_VALUE_TCPIPPROVIDER[] = { 'I','P',0 };
+static const WCHAR DPNA_VALUE_IPXPROVIDER[] = { 'I','P','X',0 };
+static const WCHAR DPNA_VALUE_MODEMPROVIDER[] = { 'M','O','D','E','M',0 };
+static const WCHAR DPNA_VALUE_SERIALPROVIDER[] = { 'S','E','R','I','A','L',0 };
+
+
+#endif
+
+#define DPNA_BAUD_RATE_9600                   9600
+#define DPNA_BAUD_RATE_14400                 14400
+#define DPNA_BAUD_RATE_19200                 19200
+#define DPNA_BAUD_RATE_38400                 38400
+#define DPNA_BAUD_RATE_56000                 56000
+#define DPNA_BAUD_RATE_57600                 57600
+#define DPNA_BAUD_RATE_115200               115200
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay8Address,      0x934a9523, 0xa3ca, 0x4bc5, 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21);
+
+DEFINE_GUID(IID_IDirectPlay8Address,       0x83783300, 0x4063, 0x4c8a, 0x9d, 0xb3, 0x82, 0x83, 0xa, 0x7f, 0xeb, 0x31);
+typedef struct IDirectPlay8Address *PDIRECTPLAY8ADDRESS, *LPDIRECTPLAY8ADDRESS;
+DEFINE_GUID(IID_IDirectPlay8AddressIP,     0xe5a0e990, 0x2bad, 0x430b, 0x87, 0xda, 0xa1, 0x42, 0xcf, 0x75, 0xde, 0x58);
+typedef struct IDirectPlay8AddressIP *PDIRECTPLAY8ADDRESSIP, *LPDIRECTPLAY8ADDRESSIP;
+
+
+/*****************************************************************************
+ * IDirectPlay8Address interface
+ */
+#define INTERFACE IDirectPlay8Address
+DECLARE_INTERFACE_(IDirectPlay8Address,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8Address methods ***/
+    STDMETHOD(BuildFromURLW)(THIS_ WCHAR* pwszSourceURL) PURE;
+    STDMETHOD(BuildFromURLA)(THIS_ CHAR* pszSourceURL) PURE;
+    STDMETHOD(Duplicate)(THIS_ PDIRECTPLAY8ADDRESS* ppdpaNewAddress) PURE;
+    STDMETHOD(SetEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress) PURE;
+    STDMETHOD(IsEqual)(THIS_  PDIRECTPLAY8ADDRESS pdpaAddress) PURE;
+    STDMETHOD(Clear)(THIS) PURE;
+    STDMETHOD(GetURLW)(THIS_ WCHAR* pwszURL, PDWORD pdwNumChars) PURE;
+    STDMETHOD(GetURLA)(THIS_ CHAR* pszURL, PDWORD pdwNumChars) PURE;
+    STDMETHOD(GetSP)(THIS_ GUID* pguidSP) PURE;
+    STDMETHOD(GetUserData)(THIS_ LPVOID pvUserData, PDWORD pdwBufferSize) PURE;
+    STDMETHOD(SetSP)(THIS_ const GUID* pguidSP) PURE;
+    STDMETHOD(SetUserData)(THIS_ const void* pvUserData, DWORD dwDataSize) PURE;
+    STDMETHOD(GetNumComponents)(THIS_ PDWORD pdwNumComponents) PURE;
+    STDMETHOD(GetComponentByName)(THIS_ const WCHAR* pwszName, LPVOID pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE;
+    STDMETHOD(GetComponentByIndex)(THIS_ DWORD dwComponentID, WCHAR* pwszName, PDWORD pdwNameLen, void* pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE;
+    STDMETHOD(AddComponent)(THIS_ const WCHAR* pwszName, const void* lpvData, DWORD dwDataSize, DWORD dwDataType) PURE;
+    STDMETHOD(GetDevice)(THIS_ GUID* pDevGuid) PURE;
+    STDMETHOD(SetDevice)(THIS_ const GUID* devGuid) PURE;
+    STDMETHOD(BuildFromDirectPlay4Address)(THIS_ LPVOID pvAddress, DWORD dwDataSize) PURE;
+};
+#undef INTERFACE
+
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8Address_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8Address_AddRef(p)                           (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8Address_Release(p)                          (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Address methods ***/
+#define IDirectPlay8Address_BuildFromURLW(p,a)                  (p)->lpVtbl->BuildFromURLW(p,a)
+#define IDirectPlay8Address_BuildFromURLA(p,a)                  (p)->lpVtbl->BuildFromURLA(p,a)
+#define IDirectPlay8Address_Duplicate(p,a)                      (p)->lpVtbl->Duplicate(p,a)
+#define IDirectPlay8Address_SetEqual(p,a)                       (p)->lpVtbl->SetEqual(p,a)
+#define IDirectPlay8Address_IsEqual(p,a)                        (p)->lpVtbl->IsEqual(p,a)
+#define IDirectPlay8Address_Clear(p)                            (p)->lpVtbl->Clear(p)
+#define IDirectPlay8Address_GetURLW(p,a,b)                      (p)->lpVtbl->GetURLW(p,a,b)
+#define IDirectPlay8Address_GetURLA(p,a,b)                      (p)->lpVtbl->GetURLA(p,a,b)
+#define IDirectPlay8Address_GetSP(p,a)                          (p)->lpVtbl->GetSP(p,a)
+#define IDirectPlay8Address_GetUserData(p,a,b)                  (p)->lpVtbl->GetUserData(p,a,b)
+#define IDirectPlay8Address_SetSP(p,a)                          (p)->lpVtbl->SetSP(p,a)
+#define IDirectPlay8Address_SetUserData(p,a,b)                  (p)->lpVtbl->SetUserData(p,a,b)
+#define IDirectPlay8Address_GetNumComponents(p,a)               (p)->lpVtbl->GetNumComponents(p,a)
+#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d)       (p)->lpVtbl->GetComponentByName(p,a,b,c,d)
+#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f)  (p)->lpVtbl->GetComponentByIndex(p,a,b,c,d,e,f)
+#define IDirectPlay8Address_AddComponent(p,a,b,c,d)             (p)->lpVtbl->AddComponent(p,a,b,c,d)
+#define IDirectPlay8Address_SetDevice(p,a)                      (p)->lpVtbl->SetDevice(p,a)
+#define IDirectPlay8Address_GetDevice(p,a)                      (p)->lpVtbl->GetDevice(p,a)
+#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b)  (p)->lpVtbl->BuildFromDirectPlay4Address(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8Address_QueryInterface(p,a,b)               (p)->QueryInterface(a,b)
+#define IDirectPlay8Address_AddRef(p)                           (p)->AddRef()
+#define IDirectPlay8Address_Release(p)                          (p)->Release()
+/*** IDirectPlay8Address methods ***/
+#define IDirectPlay8Address_BuildFromURLW(p,a)                  (p)->BuildFromURLW(a)
+#define IDirectPlay8Address_BuildFromURLA(p,a)                  (p)->BuildFromURLA(a)
+#define IDirectPlay8Address_Duplicate(p,a)                      (p)->Duplicate(a)
+#define IDirectPlay8Address_SetEqual(p,a)                       (p)->SetEqual(a)
+#define IDirectPlay8Address_IsEqual(p,a)                        (p)->IsEqual(a)
+#define IDirectPlay8Address_Clear(p)                            (p)->Clear()
+#define IDirectPlay8Address_GetURLW(p,a,b)                      (p)->GetURLW(a,b)
+#define IDirectPlay8Address_GetURLA(p,a,b)                      (p)->GetURLA(a,b)
+#define IDirectPlay8Address_GetSP(p,a)                          (p)->GetSP(a)
+#define IDirectPlay8Address_GetUserData(p,a,b)                  (p)->GetUserData(a,b)
+#define IDirectPlay8Address_SetSP(p,a)                          (p)->SetSP(a)
+#define IDirectPlay8Address_SetUserData(p,a,b)                  (p)->SetUserData(a,b)
+#define IDirectPlay8Address_GetNumComponents(p,a)               (p)->GetNumComponents(a)
+#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d)       (p)->GetComponentByName(a,b,c,d)
+#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f)  (p)->GetComponentByIndex(a,b,c,d,e,f)
+#define IDirectPlay8Address_AddComponent(p,a,b,c,d)             (p)->AddComponent(a,b,c,d)
+#define IDirectPlay8Address_SetDevice(p,a)                      (p)->SetDevice(a)
+#define IDirectPlay8Address_GetDevice(p,a)                      (p)->GetDevice(a)
+#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b)  (p)->BuildFromDirectPlay4Address(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8AddressIP interface
+ */
+#define INTERFACE IDirectPlay8AddressIP
+DECLARE_INTERFACE_(IDirectPlay8AddressIP,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8AddressIP methods ***/
+    STDMETHOD(BuildFromSockAddr)(THIS_ const SOCKADDR* pSockAddr) PURE;
+    STDMETHOD(BuildAddress)(THIS_ const WCHAR* wszAddress, USHORT usPort) PURE;
+    STDMETHOD(BuildLocalAddress)(THIS_ const GUID* pguidAdapter, USHORT usPort) PURE;
+    STDMETHOD(GetSockAddress)(THIS_ SOCKADDR* pSockAddr, PDWORD) PURE;
+    STDMETHOD(GetLocalAddress)(THIS_ GUID* pguidAdapter, USHORT* pusPort) PURE;
+    STDMETHOD(GetAddress)(THIS_ WCHAR* wszAddress, PDWORD pdwAddressLength, USHORT* psPort) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8AddressIP_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(a,b)
+#define IDirectPlay8AddressIP_AddRef(p)                     (p)->lpVtbl->AddRef()
+#define IDirectPlay8AddressIP_Release(p)                    (p)->lpVtbl->Release()
+/*** IDirectPlay8AddressIP methods ***/
+#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a)        (p)->lpVtbl->BuildFromSockAddr(a)
+#define IDirectPlay8AddressIP_BuildAddress(p,a,b)           (p)->lpVtbl->BuildAddress(a,b)
+#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b)      (p)->lpVtbl->BuildLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetSockAddress(p,a,b)         (p)->lpVtbl->GetSockAddress(a,b)
+#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b)        (p)->lpVtbl->GetLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetAddress(p,a,b,c)           (p)->lpVtbl->GetAddress(a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8AddressIP_QueryInterface(p,a,b)         (p)->QueryInterface(a,b)
+#define IDirectPlay8AddressIP_AddRef(p)                     (p)->AddRef()
+#define IDirectPlay8AddressIP_Release(p)                    (p)->Release()
+/*** IDirectPlay8AddressIP methods ***/
+#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a)        (p)->BuildFromSockAddr(a)
+#define IDirectPlay8AddressIP_BuildAddress(p,a,b)           (p)->BuildAddress(a,b)
+#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b)      (p)->BuildLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetSockAddress(p,a,b)         (p)->GetSockAddress(a,b)
+#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b)        (p)->GetLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetAddress(p,a,b,c)           (p)->GetAddress(a,b,c)
+#endif
+
+/* Export functions */
+
+HRESULT WINAPI DirectPlay8AddressCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h
new file mode 100644
index 0000000..dc2d02c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h
@@ -0,0 +1,1282 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLAY_H
+#define __WINE_DPLAY_H
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef LPVOID (*LPRGLPVOID)[];
+typedef LPRGLPVOID PRGPVOID, LPRGPVOID, PRGLPVOID, PAPVOID, LPAPVOID, PALPVOID, LPALPVOID;
+
+#define VOL volatile
+typedef VOID * volatile LPVOIDV;
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+
+DEFINE_GUID(IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72);
+typedef struct IDirectPlay *LPDIRECTPLAY;
+
+DEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
+typedef struct IDirectPlay2 *LPDIRECTPLAY2;
+
+DEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
+typedef struct IDirectPlay2 IDirectPlay2A,*LPDIRECTPLAY2A;
+
+DEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+typedef struct IDirectPlay3 *LPDIRECTPLAY3;
+
+DEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+typedef struct IDirectPlay3 IDirectPlay3A,*LPDIRECTPLAY3A;
+
+DEFINE_GUID(IID_IDirectPlay4, 0xab1c530, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlay4 *LPDIRECTPLAY4;
+
+DEFINE_GUID(IID_IDirectPlay4A,0xab1c531, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlay4 IDirectPlay4A,*LPDIRECTPLAY4A;
+
+
+/*
+ * GUIDS used by Service Providers shipped with DirectPlay
+ * Use these to identify Service Provider returned by EnumConnections
+ */
+
+/* GUID for IPX service provider {685BC400-9D2C-11cf-A9CD-00AA006886E3} */
+DEFINE_GUID(DPSPGUID_IPX, 0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
+
+/* GUID for TCP/IP service provider {36E95EE0-8577-11cf-960C-0080C7534E82} */
+DEFINE_GUID(DPSPGUID_TCPIP, 0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
+
+/* GUID for Serial service provider {0F1D6860-88D9-11cf-9C4E-00A0C905425E} */
+DEFINE_GUID(DPSPGUID_SERIAL, 0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* GUID for Modem service provider {44EAA760-CB68-11cf-9C4E-00A0C905425E} */
+DEFINE_GUID(DPSPGUID_MODEM, 0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+
+/*****************************************************************************
+ * Miscellaneous
+ */
+
+/* Return Values for Direct Play */
+#define _FACDP  0x877
+#define MAKE_DPHRESULT( code )    MAKE_HRESULT( 1, _FACDP, code )
+
+#define DP_OK                           S_OK
+#define DPERR_ALREADYINITIALIZED        MAKE_DPHRESULT(   5 )
+#define DPERR_ACCESSDENIED              MAKE_DPHRESULT(  10 )
+#define DPERR_ACTIVEPLAYERS             MAKE_DPHRESULT(  20 )
+#define DPERR_BUFFERTOOSMALL            MAKE_DPHRESULT(  30 )
+#define DPERR_CANTADDPLAYER             MAKE_DPHRESULT(  40 )
+#define DPERR_CANTCREATEGROUP           MAKE_DPHRESULT(  50 )
+#define DPERR_CANTCREATEPLAYER          MAKE_DPHRESULT(  60 )
+#define DPERR_CANTCREATESESSION         MAKE_DPHRESULT(  70 )
+#define DPERR_CAPSNOTAVAILABLEYET       MAKE_DPHRESULT(  80 )
+#define DPERR_EXCEPTION                 MAKE_DPHRESULT(  90 )
+#define DPERR_GENERIC                   E_FAIL
+#define DPERR_INVALIDFLAGS              MAKE_DPHRESULT( 120 )
+#define DPERR_INVALIDOBJECT             MAKE_DPHRESULT( 130 )
+#define DPERR_INVALIDPARAM              E_INVALIDARG
+#define DPERR_INVALIDPARAMS             DPERR_INVALIDPARAM
+#define DPERR_INVALIDPLAYER             MAKE_DPHRESULT( 150 )
+#define DPERR_INVALIDGROUP              MAKE_DPHRESULT( 155 )
+#define DPERR_NOCAPS                    MAKE_DPHRESULT( 160 )
+#define DPERR_NOCONNECTION              MAKE_DPHRESULT( 170 )
+#define DPERR_NOMEMORY                  E_OUTOFMEMORY
+#define DPERR_OUTOFMEMORY               DPERR_NOMEMORY
+#define DPERR_NOMESSAGES                MAKE_DPHRESULT( 190 )
+#define DPERR_NONAMESERVERFOUND         MAKE_DPHRESULT( 200 )
+#define DPERR_NOPLAYERS                 MAKE_DPHRESULT( 210 )
+#define DPERR_NOSESSIONS                MAKE_DPHRESULT( 220 )
+#define DPERR_PENDING                   E_PENDING
+#define DPERR_SENDTOOBIG                MAKE_DPHRESULT( 230 )
+#define DPERR_TIMEOUT                   MAKE_DPHRESULT( 240 )
+#define DPERR_UNAVAILABLE               MAKE_DPHRESULT( 250 )
+#define DPERR_UNSUPPORTED               E_NOTIMPL
+#define DPERR_BUSY                      MAKE_DPHRESULT( 270 )
+#define DPERR_USERCANCEL                MAKE_DPHRESULT( 280 )
+#define DPERR_NOINTERFACE               E_NOINTERFACE
+#define DPERR_CANNOTCREATESERVER        MAKE_DPHRESULT( 290 )
+#define DPERR_PLAYERLOST                MAKE_DPHRESULT( 300 )
+#define DPERR_SESSIONLOST               MAKE_DPHRESULT( 310 )
+#define DPERR_UNINITIALIZED             MAKE_DPHRESULT( 320 )
+#define DPERR_NONEWPLAYERS              MAKE_DPHRESULT( 330 )
+#define DPERR_INVALIDPASSWORD           MAKE_DPHRESULT( 340 )
+#define DPERR_CONNECTING                MAKE_DPHRESULT( 350 )
+#define DPERR_CONNECTIONLOST            MAKE_DPHRESULT( 360 )
+#define DPERR_UNKNOWNMESSAGE            MAKE_DPHRESULT( 370 )
+#define DPERR_CANCELFAILED              MAKE_DPHRESULT( 380 )
+#define DPERR_INVALIDPRIORITY           MAKE_DPHRESULT( 390 )
+#define DPERR_NOTHANDLED                MAKE_DPHRESULT( 400 )
+#define DPERR_CANCELLED                 MAKE_DPHRESULT( 410 )
+#define DPERR_ABORTED                   MAKE_DPHRESULT( 420 )
+#define DPERR_BUFFERTOOLARGE            MAKE_DPHRESULT( 1000 )
+#define DPERR_CANTCREATEPROCESS         MAKE_DPHRESULT( 1010 )
+#define DPERR_APPNOTSTARTED             MAKE_DPHRESULT( 1020 )
+#define DPERR_INVALIDINTERFACE          MAKE_DPHRESULT( 1030 )
+#define DPERR_NOSERVICEPROVIDER         MAKE_DPHRESULT( 1040 )
+#define DPERR_UNKNOWNAPPLICATION        MAKE_DPHRESULT( 1050 )
+#define DPERR_NOTLOBBIED                MAKE_DPHRESULT( 1070 )
+#define DPERR_SERVICEPROVIDERLOADED     MAKE_DPHRESULT( 1080 )
+#define DPERR_ALREADYREGISTERED         MAKE_DPHRESULT( 1090 )
+#define DPERR_NOTREGISTERED             MAKE_DPHRESULT( 1100 )
+#define DPERR_AUTHENTICATIONFAILED      MAKE_DPHRESULT( 2000 )
+#define DPERR_CANTLOADSSPI              MAKE_DPHRESULT( 2010 )
+#define DPERR_ENCRYPTIONFAILED          MAKE_DPHRESULT( 2020 )
+#define DPERR_SIGNFAILED                MAKE_DPHRESULT( 2030 )
+#define DPERR_CANTLOADSECURITYPACKAGE   MAKE_DPHRESULT( 2040 )
+#define DPERR_ENCRYPTIONNOTSUPPORTED    MAKE_DPHRESULT( 2050 )
+#define DPERR_CANTLOADCAPI              MAKE_DPHRESULT( 2060 )
+#define DPERR_NOTLOGGEDIN               MAKE_DPHRESULT( 2070 )
+#define DPERR_LOGONDENIED               MAKE_DPHRESULT( 2080 )
+
+
+/* DPID - DirectPlay player and group ID */
+typedef DWORD DPID, *LPDPID;
+
+/* DPID from whence originate messages - just an ID */
+#define DPID_SYSMSG             0           /* DPID of system */
+#define DPID_ALLPLAYERS         0           /* DPID of all players */
+#define DPID_SERVERPLAYER       1           /* DPID of the server player */
+#define DPID_UNKNOWN            0xFFFFFFFF  /* Player ID is unknown */
+
+/*  DPCAPS -  Used to obtain the capabilities of a DirectPlay object */
+typedef struct tagDPCAPS
+{
+    DWORD dwSize;               /* Size of structure in bytes */
+    DWORD dwFlags;
+    DWORD dwMaxBufferSize;
+    DWORD dwMaxQueueSize;       /* Obsolete. */
+    DWORD dwMaxPlayers;         /* Maximum players/groups (local + remote) */
+    DWORD dwHundredBaud;        /* Bandwidth in 100 bits per second units;
+                                 * i.e. 24 is 2400, 96 is 9600, etc.
+                                 */
+    DWORD dwLatency;            /* Estimated latency; 0 = unknown */
+    DWORD dwMaxLocalPlayers;    /* Maximum # of locally created players */
+    DWORD dwHeaderLength;       /* Maximum header length in bytes */
+    DWORD dwTimeout;            /* Service provider's suggested timeout value
+                                 * This is how long DirectPlay will wait for
+                                 * responses to system messages
+                                 */
+} DPCAPS, *LPDPCAPS;
+
+typedef struct tagDPNAME
+{
+    DWORD   dwSize;
+    DWORD   dwFlags;            /* Not used must be 0 */
+
+    union /*playerShortName */      /* Player's Handle? */
+    {
+        LPWSTR  lpszShortName;
+        LPSTR   lpszShortNameA;
+    } DUMMYUNIONNAME1;
+
+    union /*playerLongName */       /* Player's formal/real name */
+    {
+        LPWSTR  lpszLongName;
+        LPSTR   lpszLongNameA;
+    } DUMMYUNIONNAME2;
+
+} DPNAME, *LPDPNAME;
+
+#define DPLONGNAMELEN     52
+#define DPSHORTNAMELEN    20
+#define DPSESSIONNAMELEN  32
+#define DPPASSWORDLEN     16
+#define DPUSERRESERVED    16
+
+typedef struct tagDPSESSIONDESC
+{
+    DWORD   dwSize;
+    GUID    guidSession;
+    DWORD   dwSession;
+    DWORD   dwMaxPlayers;
+    DWORD   dwCurrentPlayers;
+    DWORD   dwFlags;
+    char    szSessionName[ DPSESSIONNAMELEN ];
+    char    szUserField[ DPUSERRESERVED ];
+    DWORD   dwReserved1;
+    char    szPassword[ DPPASSWORDLEN ];
+    DWORD   dwReserved2;
+    DWORD   dwUser1;
+    DWORD   dwUser2;
+    DWORD   dwUser3;
+    DWORD   dwUser4;
+} DPSESSIONDESC, *LPDPSESSIONDESC;
+
+typedef struct tagDPSESSIONDESC2
+{
+    DWORD   dwSize;
+    DWORD   dwFlags;
+    GUID    guidInstance;
+    GUID    guidApplication;   /* GUID of the DP application, GUID_NULL if
+                                * all applications! */
+
+    DWORD   dwMaxPlayers;
+    DWORD   dwCurrentPlayers;   /* (read only value) */
+
+    union  /* Session name */
+    {
+        LPWSTR  lpszSessionName;
+        LPSTR   lpszSessionNameA;
+    } DUMMYUNIONNAME1;
+
+    union  /* Optional password */
+    {
+        LPWSTR  lpszPassword;
+        LPSTR   lpszPasswordA;
+    } DUMMYUNIONNAME2;
+
+    DWORD   dwReserved1;
+    DWORD   dwReserved2;
+
+    DWORD   dwUser1;        /* For use by the application */
+    DWORD   dwUser2;
+    DWORD   dwUser3;
+    DWORD   dwUser4;
+} DPSESSIONDESC2, *LPDPSESSIONDESC2;
+typedef const DPSESSIONDESC2* LPCDPSESSIONDESC2;
+
+#define DPOPEN_JOIN                     0x00000001
+#define DPOPEN_CREATE                   0x00000002
+#define DPOPEN_RETURNSTATUS             DPENUMSESSIONS_RETURNSTATUS
+
+#define DPSESSION_NEWPLAYERSDISABLED    0x00000001
+#define DPSESSION_MIGRATEHOST           0x00000004
+#define DPSESSION_NOMESSAGEID           0x00000008
+#define DPSESSION_JOINDISABLED          0x00000020
+#define DPSESSION_KEEPALIVE             0x00000040
+#define DPSESSION_NODATAMESSAGES        0x00000080
+#define DPSESSION_SECURESERVER          0x00000100
+#define DPSESSION_PRIVATE               0x00000200
+#define DPSESSION_PASSWORDREQUIRED      0x00000400
+#define DPSESSION_MULTICASTSERVER       0x00000800
+#define DPSESSION_CLIENTSERVER          0x00001000
+#define DPSESSION_DIRECTPLAYPROTOCOL    0x00002000
+#define DPSESSION_NOPRESERVEORDER       0x00004000
+#define DPSESSION_OPTIMIZELATENCY       0x00008000
+
+typedef struct tagDPLCONNECTION
+{
+    DWORD               dwSize;
+    DWORD               dwFlags;
+    LPDPSESSIONDESC2    lpSessionDesc;  /* Ptr to session desc to use for connect */
+    LPDPNAME            lpPlayerName;   /* Ptr to player name structure */
+    GUID                guidSP;         /* GUID of Service Provider to use */
+    LPVOID              lpAddress;      /* Ptr to Address of Service Provider to use */
+    DWORD               dwAddressSize;  /* Size of address data */
+} DPLCONNECTION, *LPDPLCONNECTION;
+
+/* DPLCONNECTION flags (for dwFlags) */
+#define DPLCONNECTION_CREATESESSION DPOPEN_CREATE
+#define DPLCONNECTION_JOINSESSION   DPOPEN_JOIN
+
+typedef struct tagDPCHAT
+{
+    DWORD               dwSize;
+    DWORD               dwFlags;
+    union
+    {                          /* Message string */
+        LPWSTR  lpszMessage;   /* Unicode */
+        LPSTR   lpszMessageA;  /* ANSI */
+    } DUMMYUNIONNAME;
+} DPCHAT, *LPDPCHAT;
+
+typedef struct
+{
+  UINT   len;
+  PUCHAR pData;
+} SGBUFFER, *PSGBUFFER, *LPSGBUFFER;
+
+
+typedef struct tagDPSECURITYDESC
+{
+    DWORD dwSize;                   /* Size of structure */
+    DWORD dwFlags;                  /* Not used. Must be zero. */
+    union
+    {                               /* SSPI provider name */
+        LPWSTR  lpszSSPIProvider;   /* Unicode */
+        LPSTR   lpszSSPIProviderA;  /* ANSI */
+    } DUMMYUNIONNAME1;
+    union
+    {                               /* CAPI provider name */
+        LPWSTR lpszCAPIProvider;    /* Unicode */
+        LPSTR  lpszCAPIProviderA;   /* ANSI */
+    } DUMMYUNIONNAME2;
+    DWORD dwCAPIProviderType;       /* Crypto Service Provider type */
+    DWORD dwEncryptionAlgorithm;    /* Encryption Algorithm type */
+} DPSECURITYDESC, *LPDPSECURITYDESC;
+
+typedef const DPSECURITYDESC *LPCDPSECURITYDESC;
+
+typedef struct tagDPCREDENTIALS
+{
+    DWORD dwSize;               /* Size of structure */
+    DWORD dwFlags;              /* Not used. Must be zero. */
+    union
+    {                           /* User name of the account */
+        LPWSTR  lpszUsername;   /* Unicode */
+        LPSTR   lpszUsernameA;  /* ANSI */
+    } DUMMYUNIONNAME1;
+    union
+    {                           /* Password of the account */
+        LPWSTR  lpszPassword;   /* Unicode */
+        LPSTR   lpszPasswordA;  /* ANSI */
+    } DUMMYUNIONNAME2;
+    union
+    {                           /* Domain name of the account */
+        LPWSTR  lpszDomain;     /* Unicode */
+        LPSTR   lpszDomainA;    /* ANSI */
+    } DUMMYUNIONNAME3;
+} DPCREDENTIALS, *LPDPCREDENTIALS;
+
+typedef const DPCREDENTIALS *LPCDPCREDENTIALS;
+
+
+
+typedef BOOL (CALLBACK *LPDPENUMDPCALLBACKW)(
+    LPGUID      lpguidSP,
+    LPWSTR      lpSPName,
+    DWORD       dwMajorVersion,
+    DWORD       dwMinorVersion,
+    LPVOID      lpContext);
+
+typedef BOOL (CALLBACK *LPDPENUMDPCALLBACKA)(
+    LPGUID      lpguidSP,
+    LPSTR       lpSPName,       /* ptr to str w/ driver description */
+    DWORD       dwMajorVersion, /* Major # of driver spec in lpguidSP */
+    DWORD       dwMinorVersion, /* Minor # of driver spec in lpguidSP */
+    LPVOID      lpContext);     /* User given */
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+typedef const DPNAME *LPCDPNAME;
+
+typedef BOOL (CALLBACK *LPDPENUMCONNECTIONSCALLBACK)(
+    LPCGUID     lpguidSP,
+    LPVOID      lpConnection,
+    DWORD       dwConnectionSize,
+    LPCDPNAME   lpName,
+    DWORD       dwFlags,
+    LPVOID      lpContext);
+
+typedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK)(
+    LPDPSESSIONDESC lpDPSessionDesc,
+    LPVOID      lpContext,
+    LPDWORD     lpdwTimeOut,
+    DWORD       dwFlags);
+
+
+extern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID );
+extern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACKW, LPVOID );
+extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnk );
+
+typedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK)(
+    DPID   dpId,
+    LPSTR  lpFriendlyName,
+    LPSTR  lpFormalName,
+    DWORD  dwFlags,
+    LPVOID          lpContext );
+
+typedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK2)(
+    DPID            dpId,
+    DWORD           dwPlayerType,
+    LPCDPNAME       lpName,
+    DWORD           dwFlags,
+    LPVOID          lpContext );
+
+typedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK2)(
+    LPCDPSESSIONDESC2   lpThisSD,
+    LPDWORD             lpdwTimeOut,
+    DWORD               dwFlags,
+    LPVOID              lpContext );
+
+#define DPESC_TIMEDOUT          0x00000001
+
+/*****************************************************************************
+ * IDirectPlay interface
+ */
+#define INTERFACE IDirectPlay
+DECLARE_INTERFACE_(IDirectPlay,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay methods ***/
+    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPSTR lpPlayerName, LPSTR, LPHANDLE) PURE;
+    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPSTR lpGroupName, LPSTR) PURE;
+    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+    STDMETHOD(EnableNewPlayers)(THIS_ BOOL) PURE;
+    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroups)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumPlayers)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK lpEnumSessionsCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps) PURE;
+    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps) PURE;
+    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPSTR, LPDWORD, LPSTR, LPDWORD) PURE;
+    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC lpsd) PURE;
+    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(SaveSession)(THIS_ LPSTR) PURE;
+    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPSTR lpPlayerName, LPSTR) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectPlay_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectPlay methods ***/
+#define IDirectPlay_AddPlayerToGroup(p,a,b)      (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlay_Close(p)                     (p)->lpVtbl->Close(p)
+#define IDirectPlay_CreatePlayer(p,a,b,c,d)      (p)->lpVtbl->CreatePlayer(p,a,b,c,d)
+#define IDirectPlay_CreateGroup(p,a,b,c)         (p)->lpVtbl->CreateGroup(p,a,b,c)
+#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlay_DestroyPlayer(p,a)           (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlay_DestroyGroup(p,a)            (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlay_EnableNewPlayers(p,a)        (p)->lpVtbl->EnableNewPlayers(p,a)
+#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)  (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d)
+#define IDirectPlay_EnumGroups(p,a,b,c,d)        (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlay_EnumPlayers(p,a,b,c,d)       (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlay_EnumSessions(p,a,b,c,d,e)    (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlay_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectPlay_GetMessageCount(p,a,b)       (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlay_GetPlayerCaps(p,a,b)         (p)->lpVtbl->GetPlayerCaps(p,a,b)
+#define IDirectPlay_GetPlayerName(p,a,b,c,d,e)   (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e)
+#define IDirectPlay_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlay_Open(p,a)                    (p)->lpVtbl->Open(p,a)
+#define IDirectPlay_Receive(p,a,b,c,d,e)         (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlay_SaveSession(p,a)             (p)->lpVtbl->SaveSession(p,a)
+#define IDirectPlay_Send(p,a,b,c,d,e)            (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlay_SetPlayerName(p,a,b,c)       (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay_AddRef(p)             (p)->AddRef()
+#define IDirectPlay_Release(p)            (p)->Release()
+/*** IDirectPlay methods ***/
+#define IDirectPlay_AddPlayerToGroup(p,a,b)      (p)->AddPlayerToGroup(a,b)
+#define IDirectPlay_Close(p)                     (p)->Close()
+#define IDirectPlay_CreatePlayer(p,a,b,c,d)      (p)->CreatePlayer(a,b,c,d)
+#define IDirectPlay_CreateGroup(p,a,b,c)         (p)->CreateGroup(a,b,c)
+#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlay_DestroyPlayer(p,a)           (p)->DestroyPlayer(a)
+#define IDirectPlay_DestroyGroup(p,a)            (p)->DestroyGroup(a)
+#define IDirectPlay_EnableNewPlayers(p,a)        (p)->EnableNewPlayers(a)
+#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)  (p)->EnumGroupPlayers(a,b,c,d)
+#define IDirectPlay_EnumGroups(p,a,b,c,d)        (p)->EnumGroups(a,b,c,d)
+#define IDirectPlay_EnumPlayers(p,a,b,c,d)       (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlay_EnumSessions(p,a,b,c,d,e)    (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlay_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectPlay_GetMessageCount(p,a,b)       (p)->GetMessageCount(a,b)
+#define IDirectPlay_GetPlayerCaps(p,a,b)         (p)->GetPlayerCaps(a,b)
+#define IDirectPlay_GetPlayerName(p,a,b,c,d,e)   (p)->GetPlayerName(a,b,c,d,e)
+#define IDirectPlay_Initialize(p,a)              (p)->Initialize(a)
+#define IDirectPlay_Open(p,a)                    (p)->Open(a)
+#define IDirectPlay_Receive(p,a,b,c,d,e)         (p)->Receive(a,b,c,d,e)
+#define IDirectPlay_SaveSession(p,a)             (p)->SaveSession(a)
+#define IDirectPlay_Send(p,a,b,c,d,e)            (p)->Send(a,b,c,d,e)
+#define IDirectPlay_SetPlayerName(p,a,b,c)       (p)->SetPlayerName(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectPlay2 and IDirectPlay2A interface
+ */
+#define INTERFACE IDirectPlay2
+DECLARE_INTERFACE_(IDirectPlay2,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay2 methods ***/
+    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+    STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;
+    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+    STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;
+    STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;
+    STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay2_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectPlay2_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay2_AddPlayerToGroup(p,a,b)       (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlay2_Close(p)                      (p)->lpVtbl->Close(p)
+#define IDirectPlay2_CreateGroup(p,a,b,c,d,e)      (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)   (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlay2_DeletePlayerFromGroup(p,a,b)  (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlay2_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlay2_DestroyPlayer(p,a)            (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlay2_EnumGroups(p,a,b,c,d)         (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlay2_EnumPlayers(p,a,b,c,d)        (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlay2_EnumSessions(p,a,b,c,d,e)     (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlay2_GetCaps(p,a,b)                (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay2_GetGroupData(p,a,b,c,d)       (p)->lpVtbl->GetGroupData(p,a,b,c,d)
+#define IDirectPlay2_GetGroupName(p,a,b,c)         (p)->lpVtbl->GetGroupName(p,a,b,c)
+#define IDirectPlay2_GetMessageCount(p,a,b)        (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlay2_GetPlayerAddress(p,a,b,c)     (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
+#define IDirectPlay2_GetPlayerCaps(p,a,b,c)        (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
+#define IDirectPlay2_GetPlayerData(p,a,b,c,d)      (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
+#define IDirectPlay2_GetPlayerName(p,a,b,c)        (p)->lpVtbl->GetPlayerName(p,a,b,c)
+#define IDirectPlay2_GetSessionDesc(p,a,b)         (p)->lpVtbl->GetSessionDesc(p,a,b)
+#define IDirectPlay2_Initialize(p,a)               (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlay2_Open(p,a,b)                   (p)->lpVtbl->Open(p,a,b)
+#define IDirectPlay2_Receive(p,a,b,c,d,e)          (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlay2_Send(p,a,b,c,d,e)             (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlay2_SetGroupData(p,a,b,c,d)       (p)->lpVtbl->SetGroupData(p,a,b,c,d)
+#define IDirectPlay2_SetGroupName(p,a,b,c)         (p)->lpVtbl->SetGroupName(p,a,b,c)
+#define IDirectPlay2_SetPlayerData(p,a,b,c,d)      (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
+#define IDirectPlay2_SetPlayerName(p,a,b,c)        (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlay2_SetSessionDesc(p,a,b)         (p)->lpVtbl->SetSessionDesc(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay2_AddRef(p)             (p)->AddRef()
+#define IDirectPlay2_Release(p)            (p)->Release()
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay2_AddPlayerToGroup(p,a,b)       (p)->AddPlayerToGroup(a,b)
+#define IDirectPlay2_Close(p)                      (p)->Close()
+#define IDirectPlay2_CreateGroup(p,a,b,c,d,e)      (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)   (p)->CreatePlayer(a,b,c,d,e,f)
+#define IDirectPlay2_DeletePlayerFromGroup(p,a,b)  (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlay2_DestroyGroup(p,a)             (p)->DestroyGroup(a)
+#define IDirectPlay2_DestroyPlayer(p,a)            (p)->DestroyPlayer(a)
+#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)
+#define IDirectPlay2_EnumGroups(p,a,b,c,d)         (p)->EnumGroups(a,b,c,d)
+#define IDirectPlay2_EnumPlayers(p,a,b,c,d)        (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlay2_EnumSessions(p,a,b,c,d,e)     (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlay2_GetCaps(p,a,b)                (p)->GetCaps(a,b)
+#define IDirectPlay2_GetGroupData(p,a,b,c,d)       (p)->GetGroupData(a,b,c,d)
+#define IDirectPlay2_GetGroupName(p,a,b,c)         (p)->GetGroupName(a,b,c)
+#define IDirectPlay2_GetMessageCount(p,a,b)        (p)->GetMessageCount(a,b)
+#define IDirectPlay2_GetPlayerAddress(p,a,b,c)     (p)->GetPlayerAddress(a,b,c)
+#define IDirectPlay2_GetPlayerCaps(p,a,b,c)        (p)->GetPlayerCaps(a,b,c)
+#define IDirectPlay2_GetPlayerData(p,a,b,c,d)      (p)->GetPlayerData(a,b,c,d)
+#define IDirectPlay2_GetPlayerName(p,a,b,c)        (p)->GetPlayerName(a,b,c)
+#define IDirectPlay2_GetSessionDesc(p,a,b)         (p)->GetSessionDesc(a,b)
+#define IDirectPlay2_Initialize(p,a)               (p)->Initialize(a)
+#define IDirectPlay2_Open(p,a,b)                   (p)->Open(a,b)
+#define IDirectPlay2_Receive(p,a,b,c,d,e)          (p)->Receive(a,b,c,d,e)
+#define IDirectPlay2_Send(p,a,b,c,d,e)             (p)->Send(a,b,c,d,e)
+#define IDirectPlay2_SetGroupData(p,a,b,c,d)       (p)->SetGroupData(a,b,c,d)
+#define IDirectPlay2_SetGroupName(p,a,b,c)         (p)->SetGroupName(a,b,c)
+#define IDirectPlay2_SetPlayerData(p,a,b,c,d)      (p)->SetPlayerData(a,b,c,d)
+#define IDirectPlay2_SetPlayerName(p,a,b,c)        (p)->SetPlayerName(a,b,c)
+#define IDirectPlay2_SetSessionDesc(p,a,b)         (p)->SetSessionDesc(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectPlay3 and IDirectPlay3A interface
+ */
+#define INTERFACE IDirectPlay3
+DECLARE_INTERFACE_(IDirectPlay3,IDirectPlay2)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay2 methods ***/
+    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+    STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;
+    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+    STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;
+    STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;
+    STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;
+    /*** IDirectPlay3 methods ***/
+    STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+    STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+    STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE;
+    STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE;
+    STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE;
+    STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE;
+    STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE;
+    STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE;
+    STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE;
+    STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay3_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectPlay3_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay3_AddPlayerToGroup(p,a,b)       (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlay3_Close(p)                      (p)->lpVtbl->Close(p)
+#define IDirectPlay3_CreateGroup(p,a,b,c,d,e)      (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)   (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlay3_DeletePlayerFromGroup(p,a,b)  (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlay3_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlay3_DestroyPlayer(p,a)            (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlay3_EnumGroups(p,a,b,c,d)         (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlay3_EnumPlayers(p,a,b,c,d)        (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlay3_EnumSessions(p,a,b,c,d,e)     (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlay3_GetCaps(p,a,b)                (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay3_GetGroupData(p,a,b,c,d)       (p)->lpVtbl->GetGroupData(p,a,b,c,d)
+#define IDirectPlay3_GetGroupName(p,a,b,c)         (p)->lpVtbl->GetGroupName(p,a,b,c)
+#define IDirectPlay3_GetMessageCount(p,a,b)        (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlay3_GetPlayerAddress(p,a,b,c)     (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
+#define IDirectPlay3_GetPlayerCaps(p,a,b,c)        (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
+#define IDirectPlay3_GetPlayerData(p,a,b,c,d)      (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
+#define IDirectPlay3_GetPlayerName(p,a,b,c)        (p)->lpVtbl->GetPlayerName(p,a,b,c)
+#define IDirectPlay3_GetSessionDesc(p,a,b)         (p)->lpVtbl->GetSessionDesc(p,a,b)
+#define IDirectPlay3_Initialize(p,a)               (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlay3_Open(p,a,b)                   (p)->lpVtbl->Open(p,a,b)
+#define IDirectPlay3_Receive(p,a,b,c,d,e)          (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlay3_Send(p,a,b,c,d,e)             (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlay3_SetGroupData(p,a,b,c,d)       (p)->lpVtbl->SetGroupData(p,a,b,c,d)
+#define IDirectPlay3_SetGroupName(p,a,b,c)         (p)->lpVtbl->SetGroupName(p,a,b,c)
+#define IDirectPlay3_SetPlayerData(p,a,b,c,d)      (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
+#define IDirectPlay3_SetPlayerName(p,a,b,c)        (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlay3_SetSessionDesc(p,a,b)         (p)->lpVtbl->SetSessionDesc(p,a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlay3_AddGroupToGroup(p,a,b)                (p)->lpVtbl->AddGroupToGroup(p,a,b)
+#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
+#define IDirectPlay3_DeleteGroupFromGroup(p,a,b)           (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
+#define IDirectPlay3_EnumConnections(p,a,b,c,d)            (p)->lpVtbl->EnumConnections(p,a,b,c,d)
+#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
+#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
+#define IDirectPlay3_InitializeConnection(p,a,b)           (p)->lpVtbl->InitializeConnection(p,a,b)
+#define IDirectPlay3_SecureOpen(p,a,b,c,d)                 (p)->lpVtbl->SecureOpen(p,a,b,c,d)
+#define IDirectPlay3_SendChatMessage(p,a,b,c,d)            (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
+#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c)   (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
+#define IDirectPlay3_StartSession(p,a,b)                   (p)->lpVtbl->StartSession(p,a,b)
+#define IDirectPlay3_GetGroupFlags(p,a,b)                  (p)->lpVtbl->GetGroupFlags(p,a,b)
+#define IDirectPlay3_GetGroupParent(p,a,b)                 (p)->lpVtbl->GetGroupParent(p,a,b)
+#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)           (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
+#define IDirectPlay3_GetPlayerFlags(p,a,b)                 (p)->lpVtbl->GetPlayerFlags(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay3_AddRef(p)             (p)->AddRef()
+#define IDirectPlay3_Release(p)            (p)->Release()
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay3_AddPlayerToGroup(p,a,b)       (p)->AddPlayerToGroup(a,b)
+#define IDirectPlay3_Close(p)                      (p)->Close()
+#define IDirectPlay3_CreateGroup(p,a,b,c,d,e)      (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)   (p)->CreatePlayer(a,b,c,d,e,f)
+#define IDirectPlay3_DeletePlayerFromGroup(p,a,b)  (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlay3_DestroyGroup(p,a)             (p)->DestroyGroup(a)
+#define IDirectPlay3_DestroyPlayer(p,a)            (p)->DestroyPlayer(a)
+#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)
+#define IDirectPlay3_EnumGroups(p,a,b,c,d)         (p)->EnumGroups(a,b,c,d)
+#define IDirectPlay3_EnumPlayers(p,a,b,c,d)        (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlay3_EnumSessions(p,a,b,c,d,e)     (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlay3_GetCaps(p,a,b)                (p)->GetCaps(a,b)
+#define IDirectPlay3_GetGroupData(p,a,b,c,d)       (p)->GetGroupData(a,b,c,d)
+#define IDirectPlay3_GetGroupName(p,a,b,c)         (p)->GetGroupName(a,b,c)
+#define IDirectPlay3_GetMessageCount(p,a,b)        (p)->GetMessageCount(a,b)
+#define IDirectPlay3_GetPlayerAddress(p,a,b,c)     (p)->GetPlayerAddress(a,b,c)
+#define IDirectPlay3_GetPlayerCaps(p,a,b,c)        (p)->GetPlayerCaps(a,b,c)
+#define IDirectPlay3_GetPlayerData(p,a,b,c,d)      (p)->GetPlayerData(a,b,c,d)
+#define IDirectPlay3_GetPlayerName(p,a,b,c)        (p)->GetPlayerName(a,b,c)
+#define IDirectPlay3_GetSessionDesc(p,a,b)         (p)->GetSessionDesc(a,b)
+#define IDirectPlay3_Initialize(p,a)               (p)->Initialize(a)
+#define IDirectPlay3_Open(p,a,b)                   (p)->Open(a,b)
+#define IDirectPlay3_Receive(p,a,b,c,d,e)          (p)->Receive(a,b,c,d,e)
+#define IDirectPlay3_Send(p,a,b,c,d,e)             (p)->Send(a,b,c,d,e)
+#define IDirectPlay3_SetGroupData(p,a,b,c,d)       (p)->SetGroupData(a,b,c,d)
+#define IDirectPlay3_SetGroupName(p,a,b,c)         (p)->SetGroupName(a,b,c)
+#define IDirectPlay3_SetPlayerData(p,a,b,c,d)      (p)->SetPlayerData(a,b,c,d)
+#define IDirectPlay3_SetPlayerName(p,a,b,c)        (p)->SetPlayerName(a,b,c)
+#define IDirectPlay3_SetSessionDesc(p,a,b)         (p)->SetSessionDesc(a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlay3_AddGroupToGroup(p,a,b)                (p)->AddGroupToGroup(a,b)
+#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->CreateGroupInGroup(a,b,c,d,e,f)
+#define IDirectPlay3_DeleteGroupFromGroup(p,a,b)           (p)->DeleteGroupFromGroup(a,b)
+#define IDirectPlay3_EnumConnections(p,a,b,c,d)            (p)->EnumConnections(a,b,c,d)
+#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->EnumGroupsInGroup(a,b,c,d,e)
+#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)
+#define IDirectPlay3_InitializeConnection(p,a,b)           (p)->InitializeConnection(a,b)
+#define IDirectPlay3_SecureOpen(p,a,b,c,d)                 (p)->SecureOpen(a,b,c,d)
+#define IDirectPlay3_SendChatMessage(p,a,b,c,d)            (p)->SendChatMessage(a,b,c,d)
+#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c)   (p)->SetGroupConnectionSettings(a,b,c)
+#define IDirectPlay3_StartSession(p,a,b)                   (p)->StartSession(a,b)
+#define IDirectPlay3_GetGroupFlags(p,a,b)                  (p)->GetGroupFlags(a,b)
+#define IDirectPlay3_GetGroupParent(p,a,b)                 (p)->GetGroupParent(a,b)
+#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)           (p)->GetPlayerAccount(a,b,c,d)
+#define IDirectPlay3_GetPlayerFlags(p,a,b)                 (p)->GetPlayerFlags(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay4 and IDirectPlay4A interface
+ */
+#define INTERFACE IDirectPlay4
+DECLARE_INTERFACE_(IDirectPlay4,IDirectPlay3)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay2 methods ***/
+    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(Close)(THIS) PURE;
+    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+    STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;
+    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+    STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;
+    STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;
+    STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;
+    /*** IDirectPlay3 methods ***/
+    STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+    STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+    STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE;
+    STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE;
+    STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE;
+    STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE;
+    STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE;
+    STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE;
+    STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE;
+    STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+    STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE;
+    /*** IDirectPlay4 methods ***/
+    STDMETHOD(GetGroupOwner)(THIS_ DPID , LPDPID  ) PURE;
+    STDMETHOD(SetGroupOwner)(THIS_ DPID , DPID  ) PURE;
+    STDMETHOD(SendEx)(THIS_ DPID , DPID , DWORD , LPVOID , DWORD , DWORD , DWORD , LPVOID , LPDWORD  ) PURE;
+    STDMETHOD(GetMessageQueue)(THIS_ DPID , DPID , DWORD , LPDWORD , LPDWORD  ) PURE;
+    STDMETHOD(CancelMessage)(THIS_ DWORD , DWORD  ) PURE;
+    STDMETHOD(CancelPriority)(THIS_ DWORD , DWORD , DWORD  ) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlayX_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlayX_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectPlayX_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectPlay2 methods ***/
+#define IDirectPlayX_AddPlayerToGroup(p,a,b)       (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlayX_Close(p)                      (p)->lpVtbl->Close(p)
+#define IDirectPlayX_CreateGroup(p,a,b,c,d,e)      (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f)   (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlayX_DeletePlayerFromGroup(p,a,b)  (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlayX_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlayX_DestroyPlayer(p,a)            (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlayX_EnumGroups(p,a,b,c,d)         (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlayX_EnumPlayers(p,a,b,c,d)        (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlayX_EnumSessions(p,a,b,c,d,e)     (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlayX_GetCaps(p,a,b)                (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlayX_GetGroupData(p,a,b,c,d)       (p)->lpVtbl->GetGroupData(p,a,b,c,d)
+#define IDirectPlayX_GetGroupName(p,a,b,c)         (p)->lpVtbl->GetGroupName(p,a,b,c)
+#define IDirectPlayX_GetMessageCount(p,a,b)        (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlayX_GetPlayerAddress(p,a,b,c)     (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
+#define IDirectPlayX_GetPlayerCaps(p,a,b,c)        (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
+#define IDirectPlayX_GetPlayerData(p,a,b,c,d)      (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
+#define IDirectPlayX_GetPlayerName(p,a,b,c)        (p)->lpVtbl->GetPlayerName(p,a,b,c)
+#define IDirectPlayX_GetSessionDesc(p,a,b)         (p)->lpVtbl->GetSessionDesc(p,a,b)
+#define IDirectPlayX_Initialize(p,a)               (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlayX_Open(p,a,b)                   (p)->lpVtbl->Open(p,a,b)
+#define IDirectPlayX_Receive(p,a,b,c,d,e)          (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlayX_Send(p,a,b,c,d,e)             (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlayX_SetGroupData(p,a,b,c,d)       (p)->lpVtbl->SetGroupData(p,a,b,c,d)
+#define IDirectPlayX_SetGroupName(p,a,b,c)         (p)->lpVtbl->SetGroupName(p,a,b,c)
+#define IDirectPlayX_SetPlayerData(p,a,b,c,d)      (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
+#define IDirectPlayX_SetPlayerName(p,a,b,c)        (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlayX_SetSessionDesc(p,a,b)         (p)->lpVtbl->SetSessionDesc(p,a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlayX_AddGroupToGroup(p,a,b)                (p)->lpVtbl->AddGroupToGroup(p,a,b)
+#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
+#define IDirectPlayX_DeleteGroupFromGroup(p,a,b)           (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
+#define IDirectPlayX_EnumConnections(p,a,b,c,d)            (p)->lpVtbl->EnumConnections(p,a,b,c,d)
+#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
+#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
+#define IDirectPlayX_InitializeConnection(p,a,b)           (p)->lpVtbl->InitializeConnection(p,a,b)
+#define IDirectPlayX_SecureOpen(p,a,b,c,d)                 (p)->lpVtbl->SecureOpen(p,a,b,c,d)
+#define IDirectPlayX_SendChatMessage(p,a,b,c,d)            (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
+#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c)   (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
+#define IDirectPlayX_StartSession(p,a,b)                   (p)->lpVtbl->StartSession(p,a,b)
+#define IDirectPlayX_GetGroupFlags(p,a,b)                  (p)->lpVtbl->GetGroupFlags(p,a,b)
+#define IDirectPlayX_GetGroupParent(p,a,b)                 (p)->lpVtbl->GetGroupParent(p,a,b)
+#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d)           (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
+#define IDirectPlayX_GetPlayerFlags(p,a,b)                 (p)->lpVtbl->GetPlayerFlags(p,a,b)
+/*** IDirectPlay4 methods ***/
+#define IDirectPlayX_GetGroupOwner(p,a,b)                  (p)->lpVtbl->GetGroupOwner(p,a,b)
+#define IDirectPlayX_SetGroupOwner(p,a,b)                  (p)->lpVtbl->SetGroupOwner(p,a,b)
+#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i)           (p)->lpVtbl->SendEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e)          (p)->lpVtbl->GetMessageQueue(p,a,b,c,d,e)
+#define IDirectPlayX_CancelMessage(p,a,b)                  (p)->lpVtbl->CancelMessage(p,a,b)
+#define IDirectPlayX_CancelPriority(p,a,b,c)               (p)->lpVtbl->CancelPriority(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlayX_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlayX_AddRef(p)             (p)->AddRef()
+#define IDirectPlayX_Release(p)            (p)->Release()
+/*** IDirectPlay2 methods ***/
+#define IDirectPlayX_AddPlayerToGroup(p,a,b)       (p)->AddPlayerToGroup(a,b)
+#define IDirectPlayX_Close(p)                      (p)->Close()
+#define IDirectPlayX_CreateGroup(p,a,b,c,d,e)      (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f)   (p)->CreatePlayer(a,b,c,d,e,f)
+#define IDirectPlayX_DeletePlayerFromGroup(p,a,b)  (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlayX_DestroyGroup(p,a)             (p)->DestroyGroup(a)
+#define IDirectPlayX_DestroyPlayer(p,a)            (p)->DestroyPlayer(a)
+#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)
+#define IDirectPlayX_EnumGroups(p,a,b,c,d)         (p)->EnumGroups(a,b,c,d)
+#define IDirectPlayX_EnumPlayers(p,a,b,c,d)        (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlayX_EnumSessions(p,a,b,c,d,e)     (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlayX_GetCaps(p,a,b)                (p)->GetCaps(a,b)
+#define IDirectPlayX_GetGroupData(p,a,b,c,d)       (p)->GetGroupData(a,b,c,d)
+#define IDirectPlayX_GetGroupName(p,a,b,c)         (p)->GetGroupName(a,b,c)
+#define IDirectPlayX_GetMessageCount(p,a,b)        (p)->GetMessageCount(a,b)
+#define IDirectPlayX_GetPlayerAddress(p,a,b,c)     (p)->GetPlayerAddress(a,b,c)
+#define IDirectPlayX_GetPlayerCaps(p,a,b,c)        (p)->GetPlayerCaps(a,b,c)
+#define IDirectPlayX_GetPlayerData(p,a,b,c,d)      (p)->GetPlayerData(a,b,c,d)
+#define IDirectPlayX_GetPlayerName(p,a,b,c)        (p)->GetPlayerName(a,b,c)
+#define IDirectPlayX_GetSessionDesc(p,a,b)         (p)->GetSessionDesc(a,b)
+#define IDirectPlayX_Initialize(p,a)               (p)->Initialize(a)
+#define IDirectPlayX_Open(p,a,b)                   (p)->Open(a,b)
+#define IDirectPlayX_Receive(p,a,b,c,d,e)          (p)->Receive(a,b,c,d,e)
+#define IDirectPlayX_Send(p,a,b,c,d,e)             (p)->Send(a,b,c,d,e)
+#define IDirectPlayX_SetGroupData(p,a,b,c,d)       (p)->SetGroupData(a,b,c,d)
+#define IDirectPlayX_SetGroupName(p,a,b,c)         (p)->SetGroupName(a,b,c)
+#define IDirectPlayX_SetPlayerData(p,a,b,c,d)      (p)->SetPlayerData(a,b,c,d)
+#define IDirectPlayX_SetPlayerName(p,a,b,c)        (p)->SetPlayerName(a,b,c)
+#define IDirectPlayX_SetSessionDesc(p,a,b)         (p)->SetSessionDesc(a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlayX_AddGroupToGroup(p,a,b)                (p)->AddGroupToGroup(a,b)
+#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->CreateGroupInGroup(a,b,c,d,e,f)
+#define IDirectPlayX_DeleteGroupFromGroup(p,a,b)           (p)->DeleteGroupFromGroup(a,b)
+#define IDirectPlayX_EnumConnections(p,a,b,c,d)            (p)->EnumConnections(a,b,c,d)
+#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->EnumGroupsInGroup(a,b,c,d,e)
+#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)
+#define IDirectPlayX_InitializeConnection(p,a,b)           (p)->InitializeConnection(a,b)
+#define IDirectPlayX_SecureOpen(p,a,b,c,d)                 (p)->SecureOpen(a,b,c,d)
+#define IDirectPlayX_SendChatMessage(p,a,b,c,d)            (p)->SendChatMessage(a,b,c,d)
+#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c)   (p)->SetGroupConnectionSettings(a,b,c)
+#define IDirectPlayX_StartSession(p,a,b)                   (p)->StartSession(a,b)
+#define IDirectPlayX_GetGroupFlags(p,a,b)                  (p)->GetGroupFlags(a,b)
+#define IDirectPlayX_GetGroupParent(p,a,b)                 (p)->GetGroupParent(a,b)
+#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d)           (p)->GetPlayerAccount(a,b,c,d)
+#define IDirectPlayX_GetPlayerFlags(p,a,b)                 (p)->GetPlayerFlags(a,b)
+/*** IDirectPlay4 methods ***/
+#define IDirectPlayX_GetGroupOwner(p,a,b)                  (p)->GetGroupOwner(a,b)
+#define IDirectPlayX_SetGroupOwner(p,a,b)                  (p)->SetGroupOwner(a,b)
+#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i)           (p)->SendEx(a,b,c,d,e,f,g,h,i)
+#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e)          (p)->GetMessageQueue(a,b,c,d,e)
+#define IDirectPlayX_CancelMessage(p,a,b)                  (p)->CancelMessage(a,b)
+#define IDirectPlayX_CancelPriority(p,a,b,c)               (p)->CancelPriority(a,b,c)
+#endif
+
+
+/* For DirectPlay::EnumConnections */
+#define DPCONNECTION_DIRECTPLAY      0x00000001
+#define DPCONNECTION_DIRECTPLAYLOBBY 0x00000002
+
+/* For DirectPlay::EnumPlayers and DirectPlay::EnumGroups */
+#define DPENUMPLAYERS_ALL           0x00000000
+#define DPENUMPLAYERS_LOCAL         0x00000008
+#define DPENUMPLAYERS_REMOTE        0x00000010
+#define DPENUMPLAYERS_GROUP         0x00000020
+#define DPENUMPLAYERS_SESSION       0x00000080
+#define DPENUMPLAYERS_SERVERPLAYER  0x00000100
+#define DPENUMPLAYERS_SPECTATOR     0x00000200
+#define DPENUMPLAYERS_OWNER         0x00002000
+
+#define DPENUMGROUPS_ALL            DPENUMPLAYERS_ALL
+#define DPENUMGROUPS_LOCAL          DPENUMPLAYERS_LOCAL
+#define DPENUMGROUPS_REMOTE         DPENUMPLAYERS_REMOTE
+#define DPENUMGROUPS_SESSION        DPENUMPLAYERS_SESSION
+#define DPENUMGROUPS_SHORTCUT       0x00000400
+#define DPENUMGROUPS_STAGINGAREA    0x00000800
+#define DPENUMGROUPS_HIDDEN         0x00001000
+
+
+/* For DirectPlay::CreatePlayer */
+#define DPPLAYER_SERVERPLAYER  DPENUMPLAYERS_SERVERPLAYER
+#define DPPLAYER_SPECTATOR     DPENUMPLAYERS_SPECTATOR
+#define DPPLAYER_LOCAL         DPENUMPLAYERS_LOCAL
+#define DPPLAYER_OWNER         DPENUMPLAYERS_OWNER
+
+/* For DirectPlay::CreateGroup */
+#define DPGROUP_STAGINGAREA  DPENUMGROUPS_STAGINGAREA
+#define DPGROUP_LOCAL        DPENUMGROUPS_LOCAL
+#define DPGROUP_HIDDEN       DPENUMGROUPS_HIDDEN
+
+/* For DirectPlay::EnumSessions */
+#define DPENUMSESSIONS_AVAILABLE         0x00000001
+#define DPENUMSESSIONS_ALL               0x00000002
+#define DPENUMSESSIONS_ASYNC             0x00000010
+#define DPENUMSESSIONS_STOPASYNC         0x00000020
+#define DPENUMSESSIONS_PASSWORDREQUIRED  0x00000040
+#define DPENUMSESSIONS_RETURNSTATUS      0x00000080
+
+/* For DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */
+#define DPGETCAPS_GUARANTEED  0x00000001
+
+/* For DirectPlay::GetGroupData and DirectPlay::GetPlayerData */
+#define DPGET_REMOTE  0x00000000
+#define DPGET_LOCAL   0x00000001
+
+/* For DirectPlay::Receive */
+#define DPRECEIVE_ALL         0x00000001
+#define DPRECEIVE_TOPLAYER    0x00000002
+#define DPRECEIVE_FROMPLAYER  0x00000004
+#define DPRECEIVE_PEEK        0x00000008
+
+/* For DirectPlay::Send */
+#define DPSEND_NONGUARANTEED       0x00000000
+#define DPSEND_GUARANTEED          0x00000001
+#define DPSEND_HIGHPRIORITY        0x00000002
+#define DPSEND_OPENSTREAM          0x00000008
+#define DPSEND_CLOSESTREAM         0x00000010
+#define DPSEND_SIGNED              0x00000020
+#define DPSEND_ENCRYPTED           0x00000040
+#define DPSEND_LOBBYSYSTEMMESSAGE  0x00000080
+#define DPSEND_ASYNC               0x00000200
+#define DPSEND_NOSENDCOMPLETEMSG   0x00000400
+
+#define DPSEND_MAX_PRI       0x0000FFFF
+#define DPSEND_MAX_PRIORITY  DPSEND_MAX_PRI
+
+
+/* For  DirectPlay::SetGroupData, DirectPlay::SetGroupName,
+ * DirectPlay::SetPlayerData, DirectPlay::SetPlayerName and
+ * DirectPlay::SetSessionDesc.
+ */
+#define DPSET_REMOTE      0x00000000
+#define DPSET_LOCAL       0x00000001
+#define DPSET_GUARANTEED  0x00000002
+
+/* For DirectPlay::GetMessageQueue */
+#define DPMESSAGEQUEUE_SEND    0x00000001
+#define DPMESSAGEQUEUE_RECEIVE 0x00000002
+
+/* DirectPlay::Connect */
+#define DPCONNECT_RETURNSTATUS  (DPENUMSESSIONS_RETURNSTATUS)
+
+/* DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */
+#define DPCAPS_ISHOST                  0x00000002
+#define DPCAPS_GROUPOPTIMIZED          0x00000008
+#define DPCAPS_KEEPALIVEOPTIMIZED      0x00000010
+#define DPCAPS_GUARANTEEDOPTIMIZED     0x00000020
+#define DPCAPS_GUARANTEEDSUPPORTED     0x00000040
+#define DPCAPS_SIGNINGSUPPORTED        0x00000080
+#define DPCAPS_ENCRYPTIONSUPPORTED     0x00000100
+#define DPPLAYERCAPS_LOCAL             0x00000800
+#define DPCAPS_ASYNCCANCELSUPPORTED    0x00001000
+#define DPCAPS_ASYNCCANCELALLSUPPORTED 0x00002000
+#define DPCAPS_SENDTIMEOUTSUPPORTED    0x00004000
+#define DPCAPS_SENDPRIORITYSUPPORTED   0x00008000
+#define DPCAPS_ASYNCSUPPORTED          0x00010000
+
+/** DirectPlay system messages **/
+
+/* A new player or group has been created in the session */
+#define DPSYS_CREATEPLAYERORGROUP   0x0003
+
+/* A player or group has been deleted from the session */
+#define DPSYS_DESTROYPLAYERORGROUP  0x0005
+
+/* A player has been added to a group */
+#define DPSYS_ADDPLAYERTOGROUP      0x0007
+
+/* A player has been deleted from a group */
+#define DPSYS_DELETEPLAYERFROMGROUP 0x0021
+
+/* Session lost for this object - ie lost contact with all players */
+#define DPSYS_SESSIONLOST           0x0031
+
+/* The current host has left the session */
+#define DPSYS_HOST                  0x0101
+
+/* Player or group data has changed */
+#define DPSYS_SETPLAYERORGROUPDATA  0x0102
+
+/* The name of a player or group has changed */
+#define DPSYS_SETPLAYERORGROUPNAME  0x0103
+
+/* The session description has changed */
+#define DPSYS_SETSESSIONDESC        0x0104
+
+/* A group has been added to a group */
+#define DPSYS_ADDGROUPTOGROUP           0x0105
+
+/* A group has been deleted from a group */
+#define DPSYS_DELETEGROUPFROMGROUP      0x0106
+
+/* A secure player to player message has arrived */
+#define DPSYS_SECUREMESSAGE         0x0107
+
+/* Start a new session */
+#define DPSYS_STARTSESSION          0x0108
+
+/* A chat message has arrived */
+#define DPSYS_CHAT                  0x0109
+
+/* The owner of a group has changed */
+#define DPSYS_SETGROUPOWNER         0x010A
+
+/* An async send is done (finished normally, failed or cancelled) */
+#define DPSYS_SENDCOMPLETE          0x010d
+
+/** DirectPlay System Messages **/
+
+#define DPPLAYERTYPE_GROUP   0x00000000
+#define DPPLAYERTYPE_PLAYER  0x00000001
+
+
+/* NOTE: DPMSG_HOST and DPMSG_GENERIC share the same format */
+typedef struct tagDPMSG_GENERIC
+{
+   DWORD       dwType; /* Use message type as described above */
+} DPMSG_GENERIC,     *LPDPMSG_GENERIC,
+  DPMSG_HOST,        *LPDPMSG_HOST,
+  DPMSG_SESSIONLOST, *LPDPMSG_SESSIONLOST;
+
+typedef struct tagDPMSG_CREATEPLAYERORGROUP
+{
+   DWORD   dwType;           /* Use message type as described above */
+   DWORD   dwPlayerType;     /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+   DPID    dpId;             /* ID of the player/group */
+   DWORD   dwCurrentPlayers; /* Current number of players/groups in session */
+   LPVOID  lpData;           /* Pointer to data */
+   DWORD   dwDataSize;       /* Size of data */
+   DPNAME  dpnName;          /* Name info */
+
+   /* dpIdParent and dwFlags are only valid in DirectPlay3 and later. What
+    * does that mean about the message size before? -PH */
+   DPID   dpIdParent;  /* id of parent group */
+   DWORD  dwFlags;     /* Flags for the player/group */
+} DPMSG_CREATEPLAYERORGROUP, *LPDPMSG_CREATEPLAYERORGROUP;
+
+typedef struct tagDPMSG_DESTROYPLAYERORGROUP
+{
+   DWORD   dwType;           /* Use message type as described above */
+   DWORD   dwPlayerType;     /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+   DPID    dpId;             /* ID of player/group to be deleted */
+   LPVOID  lpLocalData;      /* Pointer to local data */
+   DWORD   dwLocalDataSize;  /* Sizeof local data */
+   LPVOID  lpRemoteData;     /* Pointer to remote data */
+   DWORD   dwRemoteDataSize; /* Sizeof remote data */
+
+   /* dpnName, dpIdParent and dwFlags are only valid in DirectPlay3 and later. What
+    * does that mean about the message size before? -PH */
+   DPNAME  dpnName;     /* Name info */
+   DPID    dpIdParent;  /* id of parent group */
+   DWORD   dwFlags;     /* Flags for the player/group */
+} DPMSG_DESTROYPLAYERORGROUP, *LPDPMSG_DESTROYPLAYERORGROUP;
+
+/* NOTE: DPMSG_ADDPLAYERTOGROUP and DPMSG_DELETEPLAYERFROMGROUP are the same */
+typedef struct tagDPMSG_ADDPLAYERTOGROUP
+{
+   DWORD  dwType;      /* Use message type as described above */
+   DPID   dpIdGroup;   /* Group ID to add player into */
+   DPID   dpIdPlayer;  /* ID of player to add */
+} DPMSG_ADDPLAYERTOGROUP,      *LPDPMSG_ADDPLAYERTOGROUP,
+  DPMSG_DELETEPLAYERFROMGROUP, *LPDPMSG_DELETEPLAYERFROMGROUP;
+
+/* NOTE: DPMSG_ADDGROUPTOGROUP and DPMSG_DELETEGROUPFROMGROUP are the same */
+typedef struct tagDPMSG_ADDGROUPTOGROUP
+{
+   DWORD  dwType;          /* Use message type as described above */
+   DPID   dpIdParentGroup; /* Group ID to add group into */
+   DPID   dpIdGroup;       /* ID of group to add */
+} DPMSG_ADDGROUPTOGROUP,      *LPDPMSG_ADDGROUPTOGROUP,
+  DPMSG_DELETEGROUPFROMGROUP, *LPDPMSG_DELETEGROUPFROMGROUP;
+
+typedef struct tagDPMSG_SETPLAYERORGROUPDATA
+{
+   DWORD   dwType;       /* Use message type as described above */
+   DWORD   dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+   DPID    dpId;         /* ID of player/group */
+   LPVOID  lpData;       /* Pointer to data */
+   DWORD   dwDataSize;   /* Size of data */
+} DPMSG_SETPLAYERORGROUPDATA, *LPDPMSG_SETPLAYERORGROUPDATA;
+
+typedef struct tagDPMSG_SETPLAYERORGROUPNAME
+{
+   DWORD  dwType;       /* Use message type as described above */
+   DWORD  dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+   DPID   dpId;         /* ID of player/group */
+   DPNAME dpnName;      /* New name */
+} DPMSG_SETPLAYERORGROUPNAME, *LPDPMSG_SETPLAYERORGROUPNAME;
+
+typedef struct tagDPMSG_SETSESSIONDESC
+{
+   DWORD           dwType; /* Use message type as described above */
+   DPSESSIONDESC2  dpDesc; /* New session desc */
+} DPMSG_SETSESSIONDESC, *LPDPMSG_SETSESSIONDESC;
+
+typedef struct tagDPMSG_SECUREMESSAGE
+{
+   DWORD   dwType;     /* Use message type as described above */
+   DWORD   dwFlags;    /* Signed/Encrypted */
+   DPID    dpIdFrom;   /* ID of from player */
+   LPVOID  lpData;     /* Message sent */
+   DWORD   dwDataSize; /* Size of message */
+} DPMSG_SECUREMESSAGE, *LPDPMSG_SECUREMESSAGE;
+
+typedef struct tagDPMSG_STARTSESSION
+{
+   DWORD            dwType; /* Use message type as described above */
+   LPDPLCONNECTION  lpConn; /* DPLCONNECTION structure */
+} DPMSG_STARTSESSION, *LPDPMSG_STARTSESSION;
+
+typedef struct tagDPMSG_CHAT
+{
+   DWORD     dwType;       /* Use message type as described above */
+   DWORD     dwFlags;      /* Message flags */
+   DPID      idFromPlayer; /* ID of sender */
+   DPID      idToPlayer;   /* ID of who msg is for */
+   DPID      idToGroup;    /* ID of what group msg is for */
+   LPDPCHAT  lpChat;       /* Chat message */
+} DPMSG_CHAT, *LPDPMSG_CHAT;
+
+typedef struct tagDPMSG_SETGROUPOWNER
+{
+   DWORD  dwType;     /* Use message type as described above */
+   DPID   idGroup;    /* Group ID */
+   DPID   idNewOwner; /* ID of player who now owns group */
+   DPID   idOldOwner; /* ID of player who used to own group */
+} DPMSG_SETGROUPOWNER, *LPDPMSG_SETGROUPOWNER;
+
+typedef struct
+{
+   DWORD    dwType;      /* Use message type as described above */
+   DPID     idFrom;      /* ID from */
+   DPID     idTo;        /* ID to */
+   DWORD    dwFlags;
+   DWORD    dwPriority;
+   DWORD    dwTimeout;
+   LPVOID   lpvContext;
+   DWORD    dwMsgID;
+   HRESULT  hr;
+   DWORD    dwSendTime;  /* When sent ? */
+} DPMSG_SENDCOMPLETE, *LPDPMSG_SENDCOMPLETE;
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DPLAY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h
new file mode 100644
index 0000000..337044d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h
@@ -0,0 +1,1010 @@
+/*
+ * Copyright (C) 2003-2005 Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLAY8_H
+#define __WINE_DPLAY8_H
+
+#include <ole2.h>
+#include <dpaddr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+
+typedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID, DWORD, PVOID);
+typedef DWORD	DPNID, *PDPNID;
+typedef	DWORD	DPNHANDLE, *PDPNHANDLE;
+
+/*****************************************************************************
+ * DirectPlay8 Message Id
+ */
+#define	DPN_MSGID_OFFSET                        0xFFFF0000
+#define DPN_MSGID_ADD_PLAYER_TO_GROUP           (DPN_MSGID_OFFSET | 0x0001)
+#define DPN_MSGID_APPLICATION_DESC              (DPN_MSGID_OFFSET | 0x0002)
+#define DPN_MSGID_ASYNC_OP_COMPLETE             (DPN_MSGID_OFFSET | 0x0003)
+#define DPN_MSGID_CLIENT_INFO                   (DPN_MSGID_OFFSET | 0x0004)
+#define DPN_MSGID_CONNECT_COMPLETE              (DPN_MSGID_OFFSET | 0x0005)
+#define DPN_MSGID_CREATE_GROUP                  (DPN_MSGID_OFFSET | 0x0006)
+#define DPN_MSGID_CREATE_PLAYER                 (DPN_MSGID_OFFSET | 0x0007)
+#define DPN_MSGID_DESTROY_GROUP                 (DPN_MSGID_OFFSET | 0x0008)
+#define DPN_MSGID_DESTROY_PLAYER                (DPN_MSGID_OFFSET | 0x0009)
+#define DPN_MSGID_ENUM_HOSTS_QUERY              (DPN_MSGID_OFFSET | 0x000A)
+#define DPN_MSGID_ENUM_HOSTS_RESPONSE           (DPN_MSGID_OFFSET | 0x000B)
+#define DPN_MSGID_GROUP_INFO                    (DPN_MSGID_OFFSET | 0x000C)
+#define DPN_MSGID_HOST_MIGRATE                  (DPN_MSGID_OFFSET | 0x000D)
+#define DPN_MSGID_INDICATE_CONNECT              (DPN_MSGID_OFFSET | 0x000E)
+#define DPN_MSGID_INDICATED_CONNECT_ABORTED     (DPN_MSGID_OFFSET | 0x000F)
+#define DPN_MSGID_PEER_INFO                     (DPN_MSGID_OFFSET | 0x0010)
+#define DPN_MSGID_RECEIVE                       (DPN_MSGID_OFFSET | 0x0011)
+#define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP      (DPN_MSGID_OFFSET | 0x0012)
+#define	DPN_MSGID_RETURN_BUFFER                 (DPN_MSGID_OFFSET | 0x0013)
+#define DPN_MSGID_SEND_COMPLETE                 (DPN_MSGID_OFFSET | 0x0014)
+#define DPN_MSGID_SERVER_INFO                   (DPN_MSGID_OFFSET | 0x0015)
+#define	DPN_MSGID_TERMINATE_SESSION             (DPN_MSGID_OFFSET | 0x0016)
+#define DPN_MSGID_CREATE_THREAD                 (DPN_MSGID_OFFSET | 0x0017)
+#define DPN_MSGID_DESTROY_THREAD                (DPN_MSGID_OFFSET | 0x0018)
+#define DPN_MSGID_NAT_RESOLVER_QUERY            (DPN_MSGID_OFFSET | 0x0101)
+
+/*****************************************************************************
+ * DirectPlay8 Errors
+ */
+#define _DPN_FACILITY_CODE              0x015
+#define _DPNHRESULT_BASE                0x8000
+#define MAKE_DPNHRESULT(code)           MAKE_HRESULT(1, _DPN_FACILITY_CODE, (code + _DPNHRESULT_BASE))
+
+#define DPNSUCCESS_EQUAL                MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x05 + _DPNHRESULT_BASE))
+#define DPNSUCCESS_NOTEQUAL             MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE))
+#define DPNSUCCESS_PENDING              MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0E + _DPNHRESULT_BASE))
+
+#define DPN_OK                          S_OK
+#define DPNERR_GENERIC                  E_FAIL
+#define DPNERR_INVALIDPARAM             E_INVALIDARG
+#define DPNERR_UNSUPPORTED              E_NOTIMPL
+#define DPNERR_NOINTERFACE              E_NOINTERFACE
+#define DPNERR_OUTOFMEMORY              E_OUTOFMEMORY
+#define DPNERR_INVALIDPOINTER           E_POINTER
+#define DPNERR_PENDING                  DPNSUCCESS_PENDING
+#define DPNERR_ABORTED                  MAKE_DPNHRESULT(0x030)
+#define DPNERR_ADDRESSING               MAKE_DPNHRESULT(0x040)
+#define DPNERR_ALREADYCLOSING           MAKE_DPNHRESULT(0x050)
+#define DPNERR_ALREADYCONNECTED         MAKE_DPNHRESULT(0x060)
+#define DPNERR_ALREADYDISCONNECTING     MAKE_DPNHRESULT(0x070)
+#define DPNERR_ALREADYINITIALIZED       MAKE_DPNHRESULT(0x080)
+#define DPNERR_ALREADYREGISTERED        MAKE_DPNHRESULT(0x090)
+#define DPNERR_BUFFERTOOSMALL           MAKE_DPNHRESULT(0x100)
+#define DPNERR_CANNOTCANCEL             MAKE_DPNHRESULT(0x110)
+#define DPNERR_CANTCREATEGROUP          MAKE_DPNHRESULT(0x120)
+#define DPNERR_CANTCREATEPLAYER         MAKE_DPNHRESULT(0x130)
+#define DPNERR_CANTLAUNCHAPPLICATION    MAKE_DPNHRESULT(0x140)
+#define DPNERR_CONNECTING               MAKE_DPNHRESULT(0x150)
+#define DPNERR_CONNECTIONLOST           MAKE_DPNHRESULT(0x160)
+#define DPNERR_CONVERSION               MAKE_DPNHRESULT(0x170)
+#define DPNERR_DATATOOLARGE             MAKE_DPNHRESULT(0x175)
+#define DPNERR_DOESNOTEXIST             MAKE_DPNHRESULT(0x180)
+#define DPNERR_DPNSVRNOTAVAILABLE       MAKE_DPNHRESULT(0x185)
+#define DPNERR_DUPLICATECOMMAND         MAKE_DPNHRESULT(0x190)
+#define DPNERR_ENDPOINTNOTRECEIVING     MAKE_DPNHRESULT(0x200)
+#define DPNERR_ENUMQUERYTOOLARGE        MAKE_DPNHRESULT(0x210)
+#define DPNERR_ENUMRESPONSETOOLARGE     MAKE_DPNHRESULT(0x220)
+#define DPNERR_EXCEPTION                MAKE_DPNHRESULT(0x230)
+#define DPNERR_GROUPNOTEMPTY            MAKE_DPNHRESULT(0x240)
+#define DPNERR_HOSTING                  MAKE_DPNHRESULT(0x250)
+#define DPNERR_HOSTREJECTEDCONNECTION   MAKE_DPNHRESULT(0x260)
+#define DPNERR_HOSTTERMINATEDSESSION    MAKE_DPNHRESULT(0x270)
+#define DPNERR_INCOMPLETEADDRESS        MAKE_DPNHRESULT(0x280)
+#define DPNERR_INVALIDADDRESSFORMAT     MAKE_DPNHRESULT(0x290)
+#define DPNERR_INVALIDAPPLICATION       MAKE_DPNHRESULT(0x300)
+#define DPNERR_INVALIDCOMMAND           MAKE_DPNHRESULT(0x310)
+#define DPNERR_INVALIDDEVICEADDRESS     MAKE_DPNHRESULT(0x320)
+#define DPNERR_INVALIDENDPOINT          MAKE_DPNHRESULT(0x330)
+#define DPNERR_INVALIDFLAGS             MAKE_DPNHRESULT(0x340)
+#define DPNERR_INVALIDGROUP             MAKE_DPNHRESULT(0x350)
+#define DPNERR_INVALIDHANDLE            MAKE_DPNHRESULT(0x360)
+#define DPNERR_INVALIDHOSTADDRESS       MAKE_DPNHRESULT(0x370)
+#define DPNERR_INVALIDINSTANCE          MAKE_DPNHRESULT(0x380)
+#define DPNERR_INVALIDINTERFACE         MAKE_DPNHRESULT(0x390)
+#define DPNERR_INVALIDOBJECT            MAKE_DPNHRESULT(0x400)
+#define DPNERR_INVALIDPASSWORD          MAKE_DPNHRESULT(0x410)
+#define DPNERR_INVALIDPLAYER            MAKE_DPNHRESULT(0x420)
+#define DPNERR_INVALIDPRIORITY          MAKE_DPNHRESULT(0x430)
+#define DPNERR_INVALIDSTRING            MAKE_DPNHRESULT(0x440)
+#define DPNERR_INVALIDURL               MAKE_DPNHRESULT(0x450)
+#define DPNERR_INVALIDVERSION           MAKE_DPNHRESULT(0x460)
+#define DPNERR_NOCAPS                   MAKE_DPNHRESULT(0x470)
+#define DPNERR_NOCONNECTION             MAKE_DPNHRESULT(0x480)
+#define DPNERR_NOHOSTPLAYER             MAKE_DPNHRESULT(0x490)
+#define DPNERR_NOMOREADDRESSCOMPONENTS  MAKE_DPNHRESULT(0x500)
+#define DPNERR_NORESPONSE               MAKE_DPNHRESULT(0x510)
+#define DPNERR_NOTALLOWED               MAKE_DPNHRESULT(0x520)
+#define DPNERR_NOTHOST                  MAKE_DPNHRESULT(0x530)
+#define DPNERR_NOTREADY                 MAKE_DPNHRESULT(0x540)
+#define DPNERR_NOTREGISTERED            MAKE_DPNHRESULT(0x550)
+#define DPNERR_PLAYERALREADYINGROUP     MAKE_DPNHRESULT(0x560)
+#define DPNERR_PLAYERLOST               MAKE_DPNHRESULT(0x570)
+#define DPNERR_PLAYERNOTINGROUP         MAKE_DPNHRESULT(0x580)
+#define DPNERR_PLAYERNOTREACHABLE       MAKE_DPNHRESULT(0x590)
+#define DPNERR_SENDTOOLARGE             MAKE_DPNHRESULT(0x600)
+#define DPNERR_SESSIONFULL              MAKE_DPNHRESULT(0x610)
+#define DPNERR_TABLEFULL                MAKE_DPNHRESULT(0x620)
+#define DPNERR_TIMEDOUT                 MAKE_DPNHRESULT(0x630)
+#define DPNERR_UNINITIALIZED            MAKE_DPNHRESULT(0x640)
+#define DPNERR_USERCANCEL               MAKE_DPNHRESULT(0x650)
+
+/*****************************************************************************
+ * DirectPlay8 defines
+ */
+#define DPNID_ALL_PLAYERS_GROUP                              0
+#define DPNDESTROYGROUPREASON_NORMAL                    0x0001
+#define DPNDESTROYGROUPREASON_AUTODESTRUCTED            0x0002
+#define DPNDESTROYGROUPREASON_SESSIONTERMINATED         0x0003
+#define DPNDESTROYPLAYERREASON_NORMAL                   0x0001
+#define DPNDESTROYPLAYERREASON_CONNECTIONLOST           0x0002
+#define DPNDESTROYPLAYERREASON_SESSIONTERMINATED        0x0003
+#define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER      0x0004
+#define DPN_MAX_APPDESC_RESERVEDDATA_SIZE                   64
+
+#define DPNOP_SYNC                                  0x80000000
+#define DPNADDPLAYERTOGROUP_SYNC                    DPNOP_SYNC
+#define DPNCANCEL_CONNECT                               0x0001
+#define DPNCANCEL_ENUM                                  0x0002
+#define DPNCANCEL_SEND                                  0x0004
+#define DPNCANCEL_ALL_OPERATIONS                        0x8000
+#define DPNCANCEL_PLAYER_SENDS                      0x80000000
+#define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH        (DPNCANCEL_PLAYER_SENDS | 0x00010000)
+#define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL      (DPNCANCEL_PLAYER_SENDS | 0x00020000)
+#define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW         (DPNCANCEL_PLAYER_SENDS | 0x00040000)
+#define DPNCLOSE_IMMEDIATE                          0x00000001
+#define DPNCONNECT_SYNC                             DPNOP_SYNC
+#define DPNCONNECT_OKTOQUERYFORADDRESSING               0x0001
+#define DPNCREATEGROUP_SYNC                         DPNOP_SYNC
+#define DPNDESTROYGROUP_SYNC                        DPNOP_SYNC
+#define DPNENUM_PLAYERS                                 0x0001
+#define DPNENUM_GROUPS                                  0x0010
+#define DPNENUMHOSTS_SYNC                           DPNOP_SYNC
+#define DPNENUMHOSTS_OKTOQUERYFORADDRESSING             0x0001
+#define DPNENUMHOSTS_NOBROADCASTFALLBACK                0x0002
+#define DPNENUMSERVICEPROVIDERS_ALL                     0x0001
+#define DPNGETLOCALHOSTADDRESSES_COMBINED               0x0001
+#define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL             0x0001
+#define DPNGETSENDQUEUEINFO_PRIORITY_HIGH               0x0002
+#define DPNGETSENDQUEUEINFO_PRIORITY_LOW                0x0004
+#define DPNGROUP_AUTODESTRUCT                           0x0001
+#define DPNHOST_OKTOQUERYFORADDRESSING                  0x0001
+#define DPNINFO_NAME                                    0x0001
+#define DPNINFO_DATA                                    0x0002
+#define DPNINITIALIZE_DISABLEPARAMVAL                   0x0001
+#define DPNINITIALIZE_HINT_LANSESSION                   0x0002
+#define DPNINITIALIZE_DISABLELINKTUNING                 0x0004
+#define DPNLOBBY_REGISTER                               0x0001
+#define DPNLOBBY_UNREGISTER                             0x0002
+#define DPNPLAYER_LOCAL                                 0x0002
+#define DPNPLAYER_HOST                                  0x0004
+#define DPNRECEIVE_GUARANTEED                           0x0001
+#define DPNRECEIVE_COALESCED                            0x0002
+#define DPNREMOVEPLAYERFROMGROUP_SYNC               DPNOP_SYNC
+#define DPNSEND_SYNC                                DPNOP_SYNC
+#define DPNSEND_NOCOPY                                  0x0001
+#define DPNSEND_NOCOMPLETE                              0x0002
+#define DPNSEND_COMPLETEONPROCESS                       0x0004
+#define DPNSEND_GUARANTEED                              0x0008
+#define DPNSEND_NONSEQUENTIAL                           0x0010
+#define DPNSEND_NOLOOPBACK                              0x0020
+#define DPNSEND_PRIORITY_LOW                            0x0040
+#define DPNSEND_PRIORITY_HIGH                           0x0080
+#define DPNSEND_COALESCE                                0x0100
+#define DPNSENDCOMPLETE_GUARANTEED                      0x0001
+#define DPNSENDCOMPLETE_COALESCED                       0x0002
+#define DPNSESSION_CLIENT_SERVER                        0x0001
+#define DPNSESSION_MIGRATE_HOST                         0x0004
+#define DPNSESSION_NODPNSVR                             0x0040
+#define DPNSESSION_REQUIREPASSWORD                      0x0080
+#define DPNSESSION_NOENUMS                              0x0100
+#define DPNSESSION_FAST_SIGNED                          0x0200
+#define DPNSESSION_FULL_SIGNED                          0x0400
+#define DPNSETCLIENTINFO_SYNC                       DPNOP_SYNC
+#define DPNSETGROUPINFO_SYNC                        DPNOP_SYNC
+#define DPNSETPEERINFO_SYNC                         DPNOP_SYNC
+#define DPNSETSERVERINFO_SYNC                       DPNOP_SYNC
+#define DPNSPCAPS_SUPPORTSDPNSRV                        0x0001
+#define DPNSPCAPS_SUPPORTSBROADCAST                     0x0002
+#define DPNSPCAPS_SUPPORTSALLADAPTERS                   0x0004
+#define DPNSPCAPS_SUPPORTSTHREADPOOL			0x0008
+#define DPNSPCAPS_NETWORKSIMULATOR                      0x0010
+#define DPNSPINFO_NETWORKSIMULATORDEVICE                0x0001
+
+
+/*****************************************************************************
+ * DirectPlay8 structures Typedefs
+ */
+typedef struct _DPN_APPLICATION_DESC {
+  DWORD   dwSize;
+  DWORD   dwFlags;
+  GUID    guidInstance;
+  GUID	  guidApplication;
+  DWORD   dwMaxPlayers;
+  DWORD   dwCurrentPlayers;
+  WCHAR*  pwszSessionName;
+  WCHAR*  pwszPassword;
+  PVOID   pvReservedData;
+  DWORD   dwReservedDataSize;
+  PVOID   pvApplicationReservedData;
+  DWORD   dwApplicationReservedDataSize;
+} DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC;
+
+typedef struct _BUFFERDESC {
+  DWORD	  dwBufferSize;		
+  BYTE*   pBufferData;		
+} BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC, *PBUFFERDESC;
+
+typedef struct _DPN_CAPS {
+  DWORD   dwSize;
+  DWORD   dwFlags;
+  DWORD   dwConnectTimeout;
+  DWORD   dwConnectRetries;
+  DWORD   dwTimeoutUntilKeepAlive;
+} DPN_CAPS, *PDPN_CAPS;
+
+typedef struct	_DPN_CAPS_EX {
+  DWORD   dwSize;
+  DWORD   dwFlags;
+  DWORD   dwConnectTimeout;
+  DWORD   dwConnectRetries;
+  DWORD   dwTimeoutUntilKeepAlive;
+  DWORD   dwMaxRecvMsgSize;
+  DWORD   dwNumSendRetries;
+  DWORD   dwMaxSendRetryInterval;
+  DWORD   dwDropThresholdRate;
+  DWORD   dwThrottleRate;
+  DWORD   dwNumHardDisconnectSends;
+  DWORD   dwMaxHardDisconnectPeriod;
+} DPN_CAPS_EX, *PDPN_CAPS_EX;
+
+typedef struct _DPN_CONNECTION_INFO {
+  DWORD   dwSize;
+  DWORD   dwRoundTripLatencyMS;
+  DWORD   dwThroughputBPS;
+  DWORD   dwPeakThroughputBPS;
+  DWORD   dwBytesSentGuaranteed;
+  DWORD   dwPacketsSentGuaranteed;
+  DWORD   dwBytesSentNonGuaranteed;
+  DWORD   dwPacketsSentNonGuaranteed;
+  DWORD   dwBytesRetried;
+  DWORD   dwPacketsRetried;
+  DWORD   dwBytesDropped;
+  DWORD   dwPacketsDropped;
+  DWORD   dwMessagesTransmittedHighPriority;
+  DWORD   dwMessagesTimedOutHighPriority;
+  DWORD   dwMessagesTransmittedNormalPriority;
+  DWORD   dwMessagesTimedOutNormalPriority;
+  DWORD   dwMessagesTransmittedLowPriority;
+  DWORD   dwMessagesTimedOutLowPriority;
+  DWORD   dwBytesReceivedGuaranteed;
+  DWORD   dwPacketsReceivedGuaranteed;
+  DWORD   dwBytesReceivedNonGuaranteed;
+  DWORD   dwPacketsReceivedNonGuaranteed;
+  DWORD   dwMessagesReceived;
+} DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO;
+
+typedef struct _DPN_GROUP_INFO {
+  DWORD	  dwSize;
+  DWORD	  dwInfoFlags;
+  PWSTR	  pwszName;
+  PVOID	  pvData;
+  DWORD	  dwDataSize;
+  DWORD	  dwGroupFlags;
+} DPN_GROUP_INFO, *PDPN_GROUP_INFO;
+
+typedef struct _DPN_PLAYER_INFO {
+  DWORD	  dwSize;
+  DWORD	  dwInfoFlags;
+  PWSTR	  pwszName;
+  PVOID	  pvData;
+  DWORD	  dwDataSize;
+  DWORD	  dwPlayerFlags;
+} DPN_PLAYER_INFO, *PDPN_PLAYER_INFO;
+
+typedef struct _DPN_SERVICE_PROVIDER_INFO {
+  DWORD   dwFlags;
+  GUID    guid;
+  WCHAR*  pwszName;
+  PVOID   pvReserved;	
+  DWORD   dwReserved;
+} DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO;
+
+typedef struct _DPN_SP_CAPS {
+  DWORD   dwSize;
+  DWORD   dwFlags;
+  DWORD   dwNumThreads;
+  DWORD	  dwDefaultEnumCount;
+  DWORD	  dwDefaultEnumRetryInterval;
+  DWORD	  dwDefaultEnumTimeout;
+  DWORD	  dwMaxEnumPayloadSize;
+  DWORD	  dwBuffersPerThread;
+  DWORD	  dwSystemBufferSize;
+} DPN_SP_CAPS, *PDPN_SP_CAPS;
+
+typedef struct _DPN_SECURITY_CREDENTIALS  DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS;
+typedef struct _DPN_SECURITY_DESC         DPN_SECURITY_DESC, *PDPN_SECURITY_DESC;
+
+typedef struct _DPNMSG_ADD_PLAYER_TO_GROUP {
+  DWORD	  dwSize;
+  DPNID	  dpnidGroup;
+  PVOID	  pvGroupContext;
+  DPNID	  dpnidPlayer;
+  PVOID	  pvPlayerContext;
+} DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP;
+
+typedef struct _DPNMSG_ASYNC_OP_COMPLETE {
+  DWORD      dwSize;
+  DPNHANDLE  hAsyncOp;
+  PVOID      pvUserContext;
+  HRESULT    hResultCode;
+} DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE;
+
+typedef struct _DPNMSG_CLIENT_INFO {
+  DWORD	  dwSize;
+  DPNID	  dpnidClient;
+  PVOID	  pvPlayerContext;
+} DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO;
+
+typedef struct _DPNMSG_CONNECT_COMPLETE {
+  DWORD      dwSize;
+  DPNHANDLE  hAsyncOp;
+  PVOID      pvUserContext;
+  HRESULT    hResultCode;
+  PVOID      pvApplicationReplyData;
+  DWORD      dwApplicationReplyDataSize;
+  /** DirectX 9 */
+  DPNID      dpnidLocal;
+} DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE;
+
+typedef struct _DPNMSG_CREATE_GROUP {
+  DWORD   dwSize;
+  DPNID   dpnidGroup;
+  DPNID   dpnidOwner;
+  PVOID   pvGroupContext;
+  /** DirectX 9 */
+  PVOID   pvOwnerContext;	
+} DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP;
+
+typedef struct _DPNMSG_CREATE_PLAYER {
+  DWORD   dwSize;
+  DPNID   dpnidPlayer;
+  PVOID   pvPlayerContext;
+} DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER;
+
+typedef struct _DPNMSG_DESTROY_GROUP {
+  DWORD   dwSize;
+  DPNID   dpnidGroup;
+  PVOID   pvGroupContext;
+  DWORD   dwReason;
+} DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP;
+
+typedef struct _DPNMSG_DESTROY_PLAYER {
+  DWORD  dwSize;
+  DPNID  dpnidPlayer;
+  PVOID  pvPlayerContext;
+  DWORD  dwReason;
+} DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER;
+
+typedef	struct _DPNMSG_ENUM_HOSTS_QUERY {
+  DWORD                 dwSize;
+  IDirectPlay8Address*  pAddressSender;
+  IDirectPlay8Address*  pAddressDevice;
+  PVOID                 pvReceivedData;
+  DWORD                 dwReceivedDataSize;
+  DWORD                 dwMaxResponseDataSize;
+  PVOID                 pvResponseData;
+  DWORD                 dwResponseDataSize;
+  PVOID                 pvResponseContext;
+} DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY;
+
+typedef	struct _DPNMSG_ENUM_HOSTS_RESPONSE {
+  DWORD                        dwSize;
+  IDirectPlay8Address*         pAddressSender;
+  IDirectPlay8Address*         pAddressDevice;
+  const DPN_APPLICATION_DESC*  pApplicationDescription;
+  PVOID                        pvResponseData;
+  DWORD                        dwResponseDataSize;
+  PVOID                        pvUserContext;
+  DWORD                        dwRoundTripLatencyMS;
+} DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE;
+
+typedef struct _DPNMSG_GROUP_INFO {
+  DWORD   dwSize;
+  DPNID   dpnidGroup;
+  PVOID   pvGroupContext;
+} DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO;
+
+typedef struct _DPNMSG_HOST_MIGRATE {
+  DWORD   dwSize;
+  DPNID   dpnidNewHost;
+  PVOID   pvPlayerContext;
+} DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE;
+
+typedef struct _DPNMSG_INDICATE_CONNECT {
+  DWORD                 dwSize;
+  PVOID                 pvUserConnectData;
+  DWORD                 dwUserConnectDataSize;
+  PVOID                 pvReplyData;
+  DWORD                 dwReplyDataSize;
+  PVOID                 pvReplyContext;
+  PVOID                 pvPlayerContext;
+  IDirectPlay8Address*  pAddressPlayer;
+  IDirectPlay8Address*  pAddressDevice;
+} DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT;
+
+typedef struct _DPNMSG_INDICATED_CONNECT_ABORTED {
+  DWORD   dwSize;
+  PVOID   pvPlayerContext;
+} DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED;
+
+typedef struct _DPNMSG_PEER_INFO {
+  DWORD   dwSize;
+  DPNID   dpnidPeer;
+  PVOID   pvPlayerContext;
+} DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO;
+
+typedef struct _DPNMSG_RECEIVE {
+  DWORD      dwSize;
+  DPNID      dpnidSender;
+  PVOID      pvPlayerContext;
+  PBYTE      pReceiveData;
+  DWORD      dwReceiveDataSize;
+  DPNHANDLE  hBufferHandle;
+  /** DirectX 9 */
+  DWORD      dwReceiveFlags;	
+} DPNMSG_RECEIVE, *PDPNMSG_RECEIVE;
+
+typedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP {
+  DWORD   dwSize;
+  DPNID   dpnidGroup;
+  PVOID   pvGroupContext;
+  DPNID   dpnidPlayer;
+  PVOID   pvPlayerContext;
+} DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP;
+
+typedef struct _DPNMSG_RETURN_BUFFER {
+  DWORD     dwSize;
+  HRESULT   hResultCode;
+  PVOID     pvBuffer;
+  PVOID     pvUserContext;
+} DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER;
+
+typedef struct _DPNMSG_SEND_COMPLETE {
+  DWORD       dwSize;
+  DPNHANDLE   hAsyncOp;
+  PVOID       pvUserContext;
+  HRESULT     hResultCode;
+  DWORD       dwSendTime;
+  /** DirectX 9 */
+  DWORD            dwFirstFrameRTT;
+  DWORD            dwFirstFrameRetryCount;
+  DWORD            dwSendCompleteFlags;
+  DPN_BUFFER_DESC* pBuffers;
+  DWORD            dwNumBuffers;
+} DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE;
+
+typedef struct _DPNMSG_SERVER_INFO {
+  DWORD   dwSize;
+  DPNID   dpnidServer;
+  PVOID   pvPlayerContext;
+} DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO;
+
+typedef struct _DPNMSG_TERMINATE_SESSION {
+  DWORD    dwSize;
+  HRESULT  hResultCode;
+  PVOID    pvTerminateData;
+  DWORD    dwTerminateDataSize;
+} DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION;
+
+typedef struct _DPNMSG_CREATE_THREAD {
+  DWORD    dwSize;
+  DWORD    dwFlags;
+  DWORD    dwProcessorNum;
+  PVOID    pvUserContext;
+} DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD;
+
+typedef struct _DPNMSG_DESTROY_THREAD {
+  DWORD    dwSize;
+  DWORD    dwProcessorNum;
+  PVOID    pvUserContext;
+} DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD;
+
+typedef	struct _DPNMSG_NAT_RESOLVER_QUERY {
+  DWORD    dwSize;
+  IDirectPlay8Address* pAddressSender;
+  IDirectPlay8Address* pAddressDevice;
+  WCHAR*   pwszUserString;
+} DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY;
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay8Peer,        0x286f484d,0x375e,0x4458,0xa2,0x72,0xb1,0x38,0xe2,0xf8,0x0a,0x6a);
+DEFINE_GUID(CLSID_DirectPlay8Client,      0x743f1dc6,0x5aba,0x429f,0x8b,0xdf,0xc5,0x4d,0x03,0x25,0x3d,0xc2);
+DEFINE_GUID(CLSID_DirectPlay8Server,      0xda825e1b,0x6830,0x43d7,0x83,0x5d,0x0b,0x5a,0xd8,0x29,0x56,0xa2);
+/** DirectX 9 */
+DEFINE_GUID(CLSID_DirectPlay8ThreadPool,  0xfc47060e,0x6153,0x4b34,0xb9,0x75,0x8e,0x41,0x21,0xeb,0x7f,0x3c);
+DEFINE_GUID(CLSID_DirectPlay8NATResolver, 0xe4c1d9a2,0xcbf7,0x48bd,0x9a,0x69,0x34,0xa5,0x5e,0x0d,0x89,0x41);
+
+DEFINE_GUID(IID_IDirectPlay8Peer,         0x5102dacf,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER;
+DEFINE_GUID(IID_IDirectPlay8Client,       0x5102dacd,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT;
+DEFINE_GUID(IID_IDirectPlay8Server,       0x5102dace,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER;
+/** DirectX 9 */
+DEFINE_GUID(IID_IDirectPlay8ThreadPool,   0x0d22ee73,0x4a46,0x4a0d,0x89,0xb2,0x04,0x5b,0x4d,0x66,0x64,0x25);
+typedef	struct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL;
+DEFINE_GUID(IID_IDirectPlay8NATResolver,  0xa9e213f2,0x9a60,0x486f,0xbf,0x3b,0x53,0x40,0x8b,0x6d,0x1c,0xbb);
+typedef	struct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER;
+
+DEFINE_GUID(CLSID_DP8SP_IPX,               0x53934290,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+DEFINE_GUID(CLSID_DP8SP_TCPIP,             0xebfe7ba0,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+DEFINE_GUID(CLSID_DP8SP_SERIAL,            0x743b5d60,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+DEFINE_GUID(CLSID_DP8SP_MODEM,             0x6d4a3650,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+/** DirectX 9 */
+DEFINE_GUID(CLSID_DP8SP_BLUETOOTH,         0x995513af,0x3027,0x4b9a,0x95,0x6e,0xc7,0x72,0xb3,0xf7,0x80,0x06);
+
+typedef struct IDirectPlay8LobbiedApplication	*PIDirectPlay8LobbiedApplication, DNLOBBIEDAPPLICATION;
+
+
+/*****************************************************************************
+ * IDirectPlay8Client interface
+ */
+#define INTERFACE IDirectPlay8Client
+DECLARE_INTERFACE_(IDirectPlay8Client,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8Client methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+    STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE;
+    STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC pApplicationDesc,IDirectPlay8Address *pAddrHost,IDirectPlay8Address *pDeviceInfo, PVOID pUserEnumData, DWORD dwUserEnumDataSize, DWORD dwEnumCount, DWORD dwRetryInterval, DWORD dwTimeOut, PVOID pvUserContext, DPNHANDLE *pAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(Connect)(THIS_ const DPN_APPLICATION_DESC *pdnAppDesc,IDirectPlay8Address *pHostAddr,IDirectPlay8Address *pDeviceInfo, const DPN_SECURITY_DESC *pdnSecurity, const DPN_SECURITY_CREDENTIALS *pdnCredentials, const void *pvUserConnectData, DWORD dwUserConnectDataSize,void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(Send)(THIS_ const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetSendQueueInfo)(THIS_ DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE;
+    STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetClientInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetServerInfo)(THIS_ DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetServerAddress)(THIS_ IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+    STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+    STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE;
+    STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetConnectionInfo)(THIS_ DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE;
+    STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDirectPlay8Client_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDirectPlay8Client_AddRef(p)                            (p)->lpVtbl->AddRef(p)
+#define	IDirectPlay8Client_Release(p)                           (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Client methods ***/
+#define	IDirectPlay8Client_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)
+#define	IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
+#define	IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)   (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Client_CancelAsyncOperation(p,a,b)          (p)->lpVtbl->CancelAsyncOperation(p,a,b)
+#define	IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j)       (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j)
+#define	IDirectPlay8Client_Send(p,a,b,c,d,e,f)                  (p)->lpVtbl->Send(p,a,b,c,d,e,f)
+#define	IDirectPlay8Client_GetSendQueueInfo(p,a,b,c)            (p)->lpVtbl->GetSendQueueInfo(p,a,b,c)
+#define	IDirectPlay8Client_GetApplicationDesc(p,a,b,c)          (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
+#define	IDirectPlay8Client_SetClientInfo(p,a,b,c,d)             (p)->lpVtbl->SetClientInfo(p,a,b,c,d)
+#define	IDirectPlay8Client_GetServerInfo(p,a,b,c)               (p)->lpVtbl->GetServerInfo(p,a,b,c)
+#define	IDirectPlay8Client_GetServerAddress(p,a,b)              (p)->lpVtbl->GetServerAddress(p,a,b)
+#define	IDirectPlay8Client_Close(p,a)                           (p)->lpVtbl->Close(p,a)
+#define	IDirectPlay8Client_ReturnBuffer(p,a,b)                  (p)->lpVtbl->ReturnBuffer(p,a,b)
+#define	IDirectPlay8Client_GetCaps(p,a,b)                       (p)->lpVtbl->GetCaps(p,a,b)
+#define	IDirectPlay8Client_SetCaps(p,a,b)                       (p)->lpVtbl->SetCaps(p,a,b)
+#define	IDirectPlay8Client_SetSPCaps(p,a,b,c)                   (p)->lpVtbl->SetSPCaps(p,a,b,c)
+#define	IDirectPlay8Client_GetSPCaps(p,a,b,c)                   (p)->lpVtbl->GetSPCaps(p,a,b,c)
+#define	IDirectPlay8Client_GetConnectionInfo(p,a,b)             (p)->lpVtbl->GetConnectionInfo(p,a,b)
+#define	IDirectPlay8Client_RegisterLobby(p,a,b,c)               (p)->lpVtbl->RegisterLobby(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define	IDirectPlay8Client_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
+#define	IDirectPlay8Client_AddRef(p)                            (p)->AddRef()
+#define	IDirectPlay8Client_Release(p)                           (p)->Release()
+/*** IDirectPlay8Client methods ***/
+#define	IDirectPlay8Client_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)
+#define	IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->EnumServiceProviders(a,b,c,d,e,f)
+#define	IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)   (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Client_CancelAsyncOperation(p,a,b)          (p)->CancelAsyncOperation(a,b)
+#define	IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j)       (p)->Connect(a,b,c,d,e,f,g,h,i,j)
+#define	IDirectPlay8Client_Send(p,a,b,c,d,e,f)                  (p)->Send(a,b,c,d,e,f)
+#define	IDirectPlay8Client_GetSendQueueInfo(p,a,b,c)            (p)->GetSendQueueInfo(a,b,c)
+#define	IDirectPlay8Client_GetApplicationDesc(p,a,b,c)          (p)->GetApplicationDesc(a,b,c)
+#define	IDirectPlay8Client_SetClientInfo(p,a,b,c,d)             (p)->SetClientInfo(a,b,c,d)
+#define	IDirectPlay8Client_GetServerInfo(p,a,b,c)               (p)->GetServerInfo(a,b,c)
+#define	IDirectPlay8Client_GetServerAddress(p,a,b)              (p)->GetServerAddress(a,b)
+#define	IDirectPlay8Client_Close(p,a)                           (p)->Close(a)
+#define	IDirectPlay8Client_ReturnBuffer(p,a,b)                  (p)->ReturnBuffer(a,b)
+#define	IDirectPlay8Client_GetCaps(p,a,b)                       (p)->GetCaps(a,b)
+#define	IDirectPlay8Client_SetCaps(p,a,b)                       (p)->SetCaps(a,b)
+#define	IDirectPlay8Client_SetSPCaps(p,a,b,c)                   (p)->SetSPCaps(a,b,c)
+#define	IDirectPlay8Client_GetSPCaps(p,a,b,c)                   (p)->GetSPCaps(a,b,c)
+#define	IDirectPlay8Client_GetConnectionInfo(p,a,b)             (p)->GetConnectionInfo(a,b)
+#define	IDirectPlay8Client_RegisterLobby(p,a,b,c)               (p)->RegisterLobby(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8Server interface
+ */
+#define INTERFACE IDirectPlay8Server
+DECLARE_INTERFACE_(IDirectPlay8Server,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8Server methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+    STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE;
+    STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE;
+    STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetServerInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetClientInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetClientAddress)(THIS_ DPNID dpnid, IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE;
+    STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address ** prgpAddress, DWORD *pcAddress, DWORD dwFlags) PURE;
+    STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC *pad, DWORD dwFlags) PURE;
+    STDMETHOD(Host)(THIS_ const DPN_APPLICATION_DESC *pdnAppDesc, IDirectPlay8Address ** prgpDeviceInfo, DWORD cDeviceInfo, const DPN_SECURITY_DESC *pdnSecurity, const DPN_SECURITY_CREDENTIALS *pdnCredentials, void *pvPlayerContext, DWORD dwFlags) PURE;
+    STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO *pdpnGroupInfo, void *pvGroupContext, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, DWORD *pdwSize, DWORD dwFlags) PURE;
+    STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(DestroyClient)(THIS_ DPNID dpnidClient, const void *pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid, PVOID *ppvPlayerContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid, PVOID *ppvGroupContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+    STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+    STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE;
+    STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE;
+    STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDirectPlay8Server_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDirectPlay8Server_AddRef(p)                            (p)->lpVtbl->AddRef(p)
+#define	IDirectPlay8Server_Release(p)                           (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Server methods ***/
+#define	IDirectPlay8Server_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)
+#define	IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
+#define	IDirectPlay8Server_CancelAsyncOperation(p,a,b)          (p)->lpVtbl->CancelAsyncOperation(p,a,b)
+#define	IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d)          (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)
+#define	IDirectPlay8Server_GetApplicationDesc(p,a,b,c)          (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
+#define	IDirectPlay8Server_SetServerInfo(p,a,b,c,d)             (p)->lpVtbl->SetServerInfo(p,a,b,c,d)
+#define	IDirectPlay8Server_GetClientInfo(p,a,b,c,d)             (p)->lpVtbl->GetClientInfo(p,a,b,c,d)
+#define	IDirectPlay8Server_GetClientAddress(p,a,b,c)            (p)->lpVtbl->GetClientAddress(p,a,b,c)
+#define	IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c)       (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)
+#define	IDirectPlay8Server_SetApplicationDesc(p,a,b)            (p)->lpVtbl->SetApplicationDesc(p,a,b)
+#define	IDirectPlay8Server_Host(p,a,b,c,d,e,f,g)                (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)
+#define	IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g)              (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)
+#define	IDirectPlay8Server_CreateGroup(p,a,b,c,d,e)             (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define	IDirectPlay8Server_DestroyGroup(p,a,b,c,d)              (p)->lpVtbl->DestroyGroup(p,a,b,c,d)
+#define	IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e)        (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)
+#define	IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e)   (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)
+#define	IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e)            (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)
+#define	IDirectPlay8Server_GetGroupInfo(p,a,b,c,d)              (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)
+#define	IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c)        (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)
+#define	IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d)          (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)
+#define	IDirectPlay8Server_Close(p,a)                           (p)->lpVtbl->Close(p,a)
+#define	IDirectPlay8Server_DestroyClient(p,a,b,c,d)             (p)->lpVtbl->DestroyClient(p,a,b,c,d)
+#define	IDirectPlay8Server_ReturnBuffer(p,a,b)                  (p)->lpVtbl->ReturnBuffer(p,a,b)
+#define	IDirectPlay8Server_GetPlayerContext(p,a,b,c)            (p)->lpVtbl->GetPlayerContext(p,a,b,c)
+#define	IDirectPlay8Server_GetGroupContext(p,a,b,c)             (p)->lpVtbl->GetGroupContext(p,a,b,c)
+#define	IDirectPlay8Server_GetCaps(p,a,b)                       (p)->lpVtbl->GetCaps(p,a,b)
+#define	IDirectPlay8Server_SetCaps(p,a,b)                       (p)->lpVtbl->SetCaps(p,a,b)
+#define	IDirectPlay8Server_SetSPCaps(p,a,b,c)                   (p)->lpVtbl->SetSPCaps(p,a,b,c)
+#define	IDirectPlay8Server_GetSPCaps(p,a,b,c)                   (p)->lpVtbl->GetSPCaps(p,a,b,c)
+#define	IDirectPlay8Server_GetConnectionInfo(p,a,b,c)           (p)->lpVtbl->GetConnectionInfo(p,a,b,c)
+#define	IDirectPlay8Server_RegisterLobby(p,a,b,c)               (p)->lpVtbl->RegisterLobby(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define	IDirectPlay8Server_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
+#define	IDirectPlay8Server_AddRef(p)                            (p)->AddRef()
+#define	IDirectPlay8Server_Release(p)                           (p)->Release()
+/*** IDirectPlay8Server methods ***/
+#define	IDirectPlay8Server_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)
+#define	IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->EnumServiceProviders(a,b,c,d,e,f)
+#define	IDirectPlay8Server_CancelAsyncOperation(p,a,b)          (p)->CancelAsyncOperation(a,b)
+#define	IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d)          (p)->GetSendQueueInfo(a,b,c,d)
+#define	IDirectPlay8Server_GetApplicationDesc(p,a,b,c)          (p)->GetApplicationDesc(a,b,c)
+#define	IDirectPlay8Server_SetServerInfo(p,a,b,c,d)             (p)->SetServerInfo(a,b,c,d)
+#define	IDirectPlay8Server_GetClientInfo(p,a,b,c,d)             (p)->GetClientInfo(a,b,c,d)
+#define	IDirectPlay8Server_GetClientAddress(p,a,b,c)            (p)->GetClientAddress(a,b,c)
+#define	IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c)       (p)->GetLocalHostAddresses(a,b,c)
+#define	IDirectPlay8Server_SetApplicationDesc(p,a,b)            (p)->SetApplicationDesc(a,b)
+#define	IDirectPlay8Server_Host(p,a,b,c,d,e,f,g)                (p)->Host(a,b,c,d,e,f,g)
+#define	IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g)              (p)->SendTo(a,b,c,d,e,f,g)
+#define	IDirectPlay8Server_CreateGroup(p,a,b,c,d,e)             (p)->CreateGroup(a,b,c,d,e)
+#define	IDirectPlay8Server_DestroyGroup(p,a,b,c,d)              (p)->DestroyGroup(a,b,c,d)
+#define	IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e)        (p)->AddPlayerToGroup(a,b,c,d,e)
+#define	IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e)   (p)->RemovePlayerFromGroup(a,b,c,d,e)
+#define	IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e)            (p)->SetGroupInfo(a,b,c,d,e)
+#define	IDirectPlay8Server_GetGroupInfo(p,a,b,c,d)              (p)->GetGroupInfo(a,b,c,d)
+#define	IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c)        (p)->EnumPlayersAndGroups(a,b,c)
+#define	IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d)          (p)->EnumGroupMembers(a,b,c,d)
+#define	IDirectPlay8Server_Close(p,a)                           (p)->Close(a)
+#define	IDirectPlay8Server_DestroyClient(p,a,b,c,d)             (p)->DestroyClient(a,b,c,d)
+#define	IDirectPlay8Server_ReturnBuffer(p,a,b)                  (p)->ReturnBuffer(a,b)
+#define	IDirectPlay8Server_GetPlayerContext(p,a,b,c)            (p)->GetPlayerContext(a,b,c)
+#define	IDirectPlay8Server_GetGroupContext(p,a,b,c)             (p)->GetGroupContext(a,b,c)
+#define	IDirectPlay8Server_GetCaps(p,a,b)                       (p)->GetCaps(a,b)
+#define	IDirectPlay8Server_SetCaps(p,a,b)                       (p)->SetCaps(a,b)
+#define	IDirectPlay8Server_SetSPCaps(p,a,b,c)                   (p)->SetSPCaps(a,b,c)
+#define	IDirectPlay8Server_GetSPCaps(p,a,b,c)                   (p)->GetSPCaps(a,b,c)
+#define	IDirectPlay8Server_GetConnectionInfo(p,a,b,c)           (p)->GetConnectionInfo(a,b,c)
+#define	IDirectPlay8Server_RegisterLobby(p,a,b,c)               (p)->RegisterLobby(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8Peer interface
+ */
+#define INTERFACE IDirectPlay8Peer
+DECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8Peer methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+    STDMETHOD(EnumServiceProviders)(THIS_ const GUID* pguidServiceProvider, const GUID* pguidApplication, DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, DWORD* pcbEnumData, DWORD* pcReturned, DWORD dwFlags) PURE;
+    STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(Connect)(THIS_ const DPN_APPLICATION_DESC* pdnAppDesc, IDirectPlay8Address* pHostAddr, IDirectPlay8Address* pDeviceInfo, const DPN_SECURITY_DESC* pdnSecurity, const DPN_SECURITY_CREDENTIALS* pdnCredentials, const void* pvUserConnectData, DWORD dwUserConnectDataSize, void* pvPlayerContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC* prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD* pdwNumMsgs, DWORD* pdwNumBytes, DWORD dwFlags) PURE;
+    STDMETHOD(Host)(THIS_ const DPN_APPLICATION_DESC* pdnAppDesc, IDirectPlay8Address **prgpDeviceInfo, DWORD cDeviceInfo, const DPN_SECURITY_DESC* pdnSecurity, const DPN_SECURITY_CREDENTIALS* pdnCredentials, void* pvPlayerContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC* pAppDescBuffer, DWORD* pcbDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC* pad, DWORD dwFlags) PURE;
+    STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO* pdpnGroupInfo, void* pvGroupContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo, DWORD* pdwSize, DWORD dwFlags) PURE;
+    STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE;
+    STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE;
+    STDMETHOD(SetPeerInfo)(THIS_ const DPN_PLAYER_INFO* pdpnPlayerInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetPeerInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO* pdpnPlayerInfo, DWORD* pdwSize, DWORD dwFlags) PURE;
+    STDMETHOD(GetPeerAddress)(THIS_ DPNID dpnid, IDirectPlay8Address** pAddress, DWORD dwFlags) PURE;
+    STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address** prgpAddress, DWORD* pcAddress, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC pApplicationDesc, IDirectPlay8Address* pAddrHost, IDirectPlay8Address* pDeviceInfo,PVOID pUserEnumData, DWORD dwUserEnumDataSize, DWORD dwEnumCount, DWORD dwRetryInterval, DWORD dwTimeOut,PVOID pvUserContext, DPNHANDLE* pAsyncHandle, DWORD dwFlags) PURE;
+    STDMETHOD(DestroyPeer)(THIS_ DPNID dpnidClient, const void* pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE;
+    STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;
+    STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid,PVOID* ppvPlayerContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid,PVOID* ppvGroupContext, DWORD dwFlags) PURE;
+    STDMETHOD(GetCaps)(THIS_ DPN_CAPS* pdpCaps, DWORD dwFlags) PURE;
+    STDMETHOD(SetCaps)(THIS_ const DPN_CAPS* pdpCaps, DWORD dwFlags) PURE;
+    STDMETHOD(SetSPCaps)(THIS_ const GUID* pguidSP, const DPN_SP_CAPS* pdpspCaps, DWORD dwFlags ) PURE;
+    STDMETHOD(GetSPCaps)(THIS_ const GUID* pguidSP, DPN_SP_CAPS* pdpspCaps, DWORD dwFlags) PURE;
+    STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO* pdpConnectionInfo, DWORD dwFlags) PURE;
+    STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication* pIDP8LobbiedApplication, DWORD dwFlags) PURE;
+    STDMETHOD(TerminateSession)(THIS_ void* pvTerminateData, DWORD dwTerminateDataSize, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDirectPlay8Peer_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDirectPlay8Peer_AddRef(p)                              (p)->lpVtbl->AddRef(p)
+#define	IDirectPlay8Peer_Release(p)                             (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Peer methods ***/
+#define	IDirectPlay8Peer_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)
+#define	IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f)    (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
+#define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Peer_CancelAsyncOperation(p,a,b)            (p)->lpVtbl->CancelAsyncOperation(p,a,b)
+#define	IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k)       (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g)                (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)
+#define	IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d)            (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)
+#define	IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g)                  (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)
+#define	IDirectPlay8Peer_GetApplicationDesc(p,a,b,c)            (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
+#define	IDirectPlay8Peer_SetApplicationDesc(p,a,b)              (p)->lpVtbl->SetApplicationDesc(p,a,b)
+#define	IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e)               (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define	IDirectPlay8Peer_DestroyGroup(p,a,b,c,d)                (p)->lpVtbl->DestroyGroup(p,a,b,c,d)
+#define	IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e)          (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)
+#define	IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e)     (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)
+#define	IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e)              (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)
+#define	IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d)                (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)
+#define	IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c)          (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)
+#define	IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d)            (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)
+#define	IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d)                 (p)->lpVtbl->SetPeerInfo(p,a,b,c,d)
+#define	IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d)                 (p)->lpVtbl->GetPeerInfo(p,a,b,c,d)
+#define	IDirectPlay8Peer_GetPeerAddress(p,a,b,c)                (p)->lpVtbl->GetPeerAddress(p,a,b,c)
+#define	IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c)         (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)
+#define	IDirectPlay8Peer_Close(p,a)                             (p)->lpVtbl->Close(p,a)
+#define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Peer_DestroyPeer(p,a,b,c,d)                 (p)->lpVtbl->DestroyPeer(p,a,b,c,d)
+#define	IDirectPlay8Peer_ReturnBuffer(p,a,b)                    (p)->lpVtbl->ReturnBuffer(p,a,b)
+#define	IDirectPlay8Peer_GetPlayerContext(p,a,b,c)              (p)->lpVtbl->GetPlayerContext(p,a,b,c)
+#define	IDirectPlay8Peer_GetGroupContext(p,a,b,c)               (p)->lpVtbl->GetGroupContext(p,a,b,c)
+#define	IDirectPlay8Peer_GetCaps(p,a,b)                         (p)->lpVtbl->GetCaps(p,a,b)
+#define	IDirectPlay8Peer_SetCaps(p,a,b)                         (p)->lpVtbl->SetCaps(p,a,b)
+#define	IDirectPlay8Peer_SetSPCaps(p,a,b,c)                     (p)->lpVtbl->SetSPCaps(p,a,b,c)
+#define	IDirectPlay8Peer_GetSPCaps(p,a,b,c)                     (p)->lpVtbl->GetSPCaps(p,a,b,c)
+#define	IDirectPlay8Peer_GetConnectionInfo(p,a,b,c)             (p)->lpVtbl->GetConnectionInfo(p,a,b,c)
+#define	IDirectPlay8Peer_RegisterLobby(p,a,b,c)                 (p)->lpVtbl->RegisterLobby(p,a,b,c)
+#define	IDirectPlay8Peer_TerminateSession(p,a,b,c)              (p)->lpVtbl->TerminateSession(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define	IDirectPlay8Peer_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)
+#define	IDirectPlay8Peer_AddRef(p)                              (p)->AddRef()
+#define	IDirectPlay8Peer_Release(p)                             (p)->Release()
+/*** IDirectPlay8Peer methods ***/
+#define	IDirectPlay8Peer_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)
+#define	IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f)    (p)->EnumServiceProviders(a,b,c,d,e,f)
+#define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Peer_CancelAsyncOperation(p,a,b)            (p)->CancelAsyncOperation(a,b)
+#define	IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k)       (p)->Connect(a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g)                (p)->SendTo(a,b,c,d,e,f,g)
+#define	IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d)            (p)->GetSendQueueInfo(a,b,c,d)
+#define	IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g)                  (p)->Host(a,b,c,d,e,f,g)
+#define	IDirectPlay8Peer_GetApplicationDesc(p,a,b,c)            (p)->GetApplicationDesc(a,b,c)
+#define	IDirectPlay8Peer_SetApplicationDesc(p,a,b)              (p)->SetApplicationDesc(a,b)
+#define	IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e)               (p)->CreateGroup(a,b,c,d,e)
+#define	IDirectPlay8Peer_DestroyGroup(p,a,b,c,d)                (p)->DestroyGroup(a,b,c,d)
+#define	IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e)          (p)->AddPlayerToGroup(a,b,c,d,e)
+#define	IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e)     (p)->RemovePlayerFromGroup(a,b,c,d,e)
+#define	IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e)              (p)->SetGroupInfo(a,b,c,d,e)
+#define	IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d)                (p)->GetGroupInfo(a,b,c,d)
+#define	IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c)          (p)->EnumPlayersAndGroups(a,b,c)
+#define	IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d)            (p)->EnumGroupMembers(a,b,c,d)
+#define	IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d)                 (p)->SetPeerInfo(a,b,c,d)
+#define	IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d)                 (p)->GetPeerInfo(a,b,c,d)
+#define	IDirectPlay8Peer_GetPeerAddress(p,a,b,c)                (p)->GetPeerAddress(a,b,c)
+#define	IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c)         (p)->GetLocalHostAddresses(a,b,c)
+#define	IDirectPlay8Peer_Close(p,a)                             (p)->Close(a)
+#define	IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
+#define	IDirectPlay8Peer_DestroyPeer(p,a,b,c,d)                 (p)->DestroyPeer(a,b,c,d)
+#define	IDirectPlay8Peer_ReturnBuffer(p,a,b)                    (p)->ReturnBuffer(a,b)
+#define	IDirectPlay8Peer_GetPlayerContext(p,a,b,c)              (p)->GetPlayerContext(a,b,c)
+#define	IDirectPlay8Peer_GetGroupContext(p,a,b,c)               (p)->GetGroupContext(a,b,c)
+#define	IDirectPlay8Peer_GetCaps(p,a,b)                         (p)->GetCaps(a,b)
+#define	IDirectPlay8Peer_SetCaps(p,a,b)                         (p)->SetCaps(a,b)
+#define	IDirectPlay8Peer_SetSPCaps(p,a,b,c)                     (p)->SetSPCaps(a,b,c)
+#define	IDirectPlay8Peer_GetSPCaps(p,a,b,c)                     (p)->GetSPCaps(a,b,c)
+#define	IDirectPlay8Peer_GetConnectionInfo(p,a,b,c)             (p)->GetConnectionInfo(a,b,c)
+#define	IDirectPlay8Peer_RegisterLobby(p,a,b,c)                 (p)->RegisterLobby(a,b,c)
+#define	IDirectPlay8Peer_TerminateSession(p,a,b,c)              (p)->TerminateSession(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8ThreadPool interface
+ */
+#define INTERFACE IDirectPlay8ThreadPool
+DECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8ThreadPool methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD* pdwNumThreads, DWORD dwFlags) PURE;
+    STDMETHOD(SetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD dwNumThreads, DWORD dwFlags) PURE;
+    STDMETHOD(DoWork)(THIS_ DWORD dwAllowedTimeSlice, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDirectPlay8ThreadPool_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDirectPlay8ThreadPool_AddRef(p)                              (p)->lpVtbl->AddRef(p)
+#define	IDirectPlay8ThreadPool_Release(p)                             (p)->lpVtbl->Release(p)
+/*** IDirectPlay8ThreadPool methods ***/
+#define IDirectPlay8ThreadPool_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8ThreadPool_Close(p,a)                             (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c)                (p)->lpVtbl->GetThreadCount(p,a,b,c)
+#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c)                (p)->lpVtbl->SetThreadCount(p,a,b,c)
+#define IDirectPlay8ThreadPool_DoWork(p,a,b)                          (p)->lpVtbl->DoWork(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define	IDirectPlay8ThreadPool_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)
+#define	IDirectPlay8ThreadPool_AddRef(p)                              (p)->AddRef()
+#define	IDirectPlay8ThreadPool_Release(p)                             (p)->Release()
+/*** IDirectPlay8ThreadPool methods ***/
+#define IDirectPlay8ThreadPool_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)
+#define IDirectPlay8ThreadPool_Close(p,a)                             (p)->Close(a)
+#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c)                (p)->GetThreadCount(a,b,c)
+#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c)                (p)->SetThreadCount(a,b,c)
+#define IDirectPlay8ThreadPool_DoWork(p,a,b)                          (p)->DoWork(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8NATResolver interface
+ */
+#define INTERFACE IDirectPlay8NATResolver
+DECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8NATResolver methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+    STDMETHOD(Start)(THIS_ IDirectPlay8Address** ppDevices, DWORD dwNumDevices, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, PDWORD pdwBufferSize, PDWORD pdwNumDevices, DWORD dwFlags) PURE;
+    STDMETHOD(GetAddresses)(THIS_ IDirectPlay8Address** ppAddresses, DWORD* pdwNumAddresses, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDirectPlay8NATResolver_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDirectPlay8NATResolver_AddRef(p)                              (p)->lpVtbl->AddRef(p)
+#define	IDirectPlay8NATResolver_Release(p)                             (p)->lpVtbl->Release(p)
+/*** IDirectPlay8NATResolver methods ***/
+#define IDirectPlay8NATResolver_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8NATResolver_Start(p,a,b,c)                         (p)->lpVtbl->Start(p,a,b,c)
+#define IDirectPlay8NATResolver_Close(p,a)                             (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d)                 (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c)                  (p)->lpVtbl->GetAddresses(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define	IDirectPlay8NATResolver_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)
+#define	IDirectPlay8NATResolver_AddRef(p)                              (p)->AddRef()
+#define	IDirectPlay8NATResolver_Release(p)                             (p)->Release()
+/*** IDirectPlay8NATResolver methods ***/
+#define IDirectPlay8NATResolver_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)
+#define IDirectPlay8NATResolver_Start(p,a,b,c)                         (p)->Start(a,b,c)
+#define IDirectPlay8NATResolver_Close(p,a)                             (p)->Close(a)
+#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d)                 (p)->EnumDevices(a,b,c,d)
+#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c)                  (p)->GetAddresses(a,b,c)
+#endif
+
+/* Export functions */
+
+HRESULT WINAPI DirectPlay8Create(const CLSID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h
new file mode 100644
index 0000000..d2af313
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h
@@ -0,0 +1,518 @@
+/*
+ * Copyright (C) 1999 Francois Gouget
+ * Copyright (C) 1999 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLOBBY_H
+#define __WINE_DPLOBBY_H
+
+#include <dplay.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlayLobby, 0x2fe8f810, 0xb2a5, 0x11d0, 0xa7, 0x87, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+
+DEFINE_GUID(IID_IDirectPlayLobby, 0xaf465c71, 0x9588, 0x11cf, 0xa0, 0x20, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);
+typedef struct IDirectPlayLobby *LPDIRECTPLAYLOBBY;
+
+DEFINE_GUID(IID_IDirectPlayLobbyA, 0x26c66a70, 0xb367, 0x11cf, 0xa0, 0x24, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);
+typedef struct IDirectPlayLobby IDirectPlayLobbyA,*LPDIRECTPLAYLOBBYA;
+
+DEFINE_GUID(IID_IDirectPlayLobby2, 0x194c220, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+typedef struct IDirectPlayLobby2 *LPDIRECTPLAYLOBBY2;
+
+DEFINE_GUID(IID_IDirectPlayLobby2A, 0x1bb4af80, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+typedef struct IDirectPlayLobby2 IDirectPlayLobby2A, *LPDIRECTPLAYLOBBY2A;
+
+DEFINE_GUID(IID_IDirectPlayLobby3, 0x2db72490, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlayLobby3 *LPDIRECTPLAYLOBBY3;
+
+DEFINE_GUID(IID_IDirectPlayLobby3A, 0x2db72491, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlayLobby3 IDirectPlayLobby3A, *LPDIRECTPLAYLOBBY3A;
+
+
+/*****************************************************************************
+ * DirectPlayLobby Property GUIDs used in lobby messages
+ */
+
+/* DPLPROPERTY_MessagesSupported {762CCDA1-D916-11d0-BA39-00C04FD7ED67}.
+ * Purpose: Request if the lobby supports standard (?).
+ * Response: Answer is a BOOL. TRUE if supports the standard (?) and FALSE otherwise. Of course, it might not respond at all.
+ */
+DEFINE_GUID(DPLPROPERTY_MessagesSupported, 0x762ccda1, 0xd916, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+/* DPLPROPERTY_LobbyGuid {F56920A0-D218-11d0-BA39-00C04FD7ED67}.
+ * Purpose: Request the GUID that identifies the lobby version that the application is communicating with.
+ * Response: The GUID which identifies the lobby version
+ */
+DEFINE_GUID(DPLPROPERTY_LobbyGuid, 0xf56920a0, 0xd218, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+/* DPLPROPERTY_PlayerGuid {B4319322-D20D-11d0-BA39-00C04FD7ED67}
+ * Purpose: Request the GUID that identifies the player for this particular machine.
+ * Response: DPLDATA_PLAYERDATA structure.
+ */
+DEFINE_GUID(DPLPROPERTY_PlayerGuid, 0xb4319322, 0xd20d, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+/* DPLPROPERTY_PlayerScore {48784000-D219-11d0-BA39-00C04FD7ED67}
+ * Purpose: Used to send a score of a player to the lobby. The format is an array of long integers.
+ * Response: I don't think there is one.
+ */
+DEFINE_GUID(DPLPROPERTY_PlayerScore, 0x48784000, 0xd219, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+
+
+/*****************************************************************************
+ * LOBBY structures associated with GUID messages
+ */
+
+typedef struct tagDPLDATA_PLAYERGUID
+{
+        GUID    guidPlayer;
+        DWORD   dwPlayerFlags;
+} DPLDATA_PLAYERGUID, *LPDPLDATA_PLAYERGUID;
+
+typedef struct tagDPLDATA_PLAYERSCORE
+{
+        DWORD   dwScoreCount;
+        LONG    Score[1];
+} DPLDATA_PLAYERSCORE, *LPDPLDATA_PLAYERSCORE;
+
+
+/*****************************************************************************
+ * LOBBY messages and message data structures.
+ *
+ * System messages can be identified by dwMessageFlags having a value of DPLMSG_SYSTEM
+ * after a call to ReceiveLobbyMessage.
+ *
+ * Standard messages can be identified by dwMessageFlags having a value of DPLMSG_STANDARD
+ * after a call to ReceiveLobbyMessage.
+ */
+
+/* DPLobby1 definition required for backwards compatibility */
+#define DPLMSG_SYSTEM                                   0x00000001
+#define DPLMSG_STANDARD                                 0x00000002
+#define DPLAD_SYSTEM          DPLMSG_SYSTEM
+
+
+/* System messages  - dwType field for messages */
+#define DPLSYS_CONNECTIONSETTINGSREAD   0x00000001
+#define DPLSYS_DPLAYCONNECTFAILED       0x00000002
+#define DPLSYS_DPLAYCONNECTSUCCEEDED    0x00000003
+#define DPLSYS_APPTERMINATED            0x00000004
+#define DPLSYS_SETPROPERTY              0x00000005
+#define DPLSYS_SETPROPERTYRESPONSE      0x00000006
+#define DPLSYS_GETPROPERTY              0x00000007
+#define DPLSYS_GETPROPERTYRESPONSE      0x00000008
+#define DPLSYS_NEWSESSIONHOST           0x00000009
+#define DPLSYS_NEWCONNECTIONSETTINGS    0x0000000A
+
+
+
+/* Used to identify the message type */
+typedef struct tagDPLMSG_GENERIC
+{
+    DWORD       dwType;         /* Message type */
+} DPLMSG_GENERIC, *LPDPLMSG_GENERIC;
+
+/* Generic format for system messages - see above */
+typedef struct tagDPLMSG_SYSTEMMESSAGE
+{
+    DWORD       dwType;         /* Message type */
+    GUID        guidInstance;   /* Instance GUID of the dplay session the message corresponds to */
+} DPLMSG_SYSTEMMESSAGE, *LPDPLMSG_SYSTEMMESSAGE;
+
+/* Generic message to set a property - see property GUIDs above */
+typedef struct tagDPLMSG_SETPROPERTY
+{
+        DWORD   dwType;              /* Message type */
+        DWORD   dwRequestID;         /* Request ID (DPL_NOCONFIRMATION if no confirmation desired) */
+        GUID    guidPlayer;          /* Player GUID */
+        GUID    guidPropertyTag;     /* Property GUID */
+        DWORD   dwDataSize;          /* Size of data */
+        DWORD   dwPropertyData[1];   /* Buffer containing data */
+} DPLMSG_SETPROPERTY, *LPDPLMSG_SETPROPERTY;
+
+#define DPL_NOCONFIRMATION      0
+
+/* Reply to DPLMSG_SETPROPERTY */
+typedef struct tagDPLMSG_SETPROPERTYRESPONSE
+{
+        DWORD   dwType;              /* Message type */
+        DWORD   dwRequestID;         /* Request ID */
+        GUID    guidPlayer;          /* Player GUID */
+        GUID    guidPropertyTag;     /* Property GUID */
+        HRESULT hr;                  /* Return Code */
+} DPLMSG_SETPROPERTYRESPONSE, *LPDPLMSG_SETPROPERTYRESPONSE;
+
+/* Request to get the present value of a property */
+typedef struct tagDPLMSG_GETPROPERTY
+{
+        DWORD   dwType;           /* Message type */
+        DWORD   dwRequestID;      /* Request ID */
+        GUID    guidPlayer;       /* Player GUID */
+        GUID    guidPropertyTag;  /* Property GUID */
+} DPLMSG_GETPROPERTY, *LPDPLMSG_GETPROPERTY;
+
+/* Response to a request to get the present value of a property */
+typedef struct tagDPLMSG_GETPROPERTYRESPONSE
+{
+        DWORD   dwType;              /* Message type */
+        DWORD   dwRequestID;         /* Request ID */
+        GUID    guidPlayer;          /* Player GUID */
+        GUID    guidPropertyTag;     /* Property GUID */
+        HRESULT hr;                  /* Return Code */
+        DWORD   dwDataSize;          /* Size of data */
+        DWORD   dwPropertyData[1];   /* Buffer containing data */
+} DPLMSG_GETPROPERTYRESPONSE, *LPDPLMSG_GETPROPERTYRESPONSE;
+
+/* Standard message in response to a session host migration to a new client */
+typedef struct tagDPLMSG_NEWSESSIONHOST
+{
+    DWORD   dwType;        /* Message type */
+    GUID    guidInstance;  /* GUID Instance of the session */
+} DPLMSG_NEWSESSIONHOST, *LPDPLMSG_NEWSESSIONHOST;
+
+/*****************************************************************************
+ * DirectPlay Address ID's
+ * A DirectPlay address is composed of multiple data chunks, each associated with
+ * a GUID to give significance to the type of data. All chunks have an associated
+ * size so that unknown chunks can be ignored for backwards compatibility!
+ * EnumAddresses function is used to parse the address data chunks.
+ */
+
+/* DPAID_TotalSize {1318F560-912C-11d0-9DAA-00A0C90A43CB}
+ * Chunk purpose: Chunk is a DWORD containing the size of the entire DPADDRESS struct
+ */
+DEFINE_GUID(DPAID_TotalSize, 0x1318f560, 0x912c, 0x11d0, 0x9d, 0xaa, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+
+/* DPAID_ServiceProvider {07D916C0-E0AF-11cf-9C4E-00A0C905425E}
+ * Chunk purpose: Chunk is a GUID indicated what service provider created the chunk.
+ */
+DEFINE_GUID(DPAID_ServiceProvider, 0x7d916c0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_LobbyProvider {59B95640-9667-11d0-A77D-0000F803ABFC}
+ * Chunk purpose: Chunk is a GUID indicating what lobby provider created the chunk.
+ */
+DEFINE_GUID(DPAID_LobbyProvider, 0x59b95640, 0x9667, 0x11d0, 0xa7, 0x7d, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+
+/* DPAID_Phone  {78EC89A0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI
+ * DPAID_PhoneW {BA5A7A70-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE
+ * Chunk purpose: Chunk is a phone number in ANSI or UNICODE format
+ */
+DEFINE_GUID(DPAID_Phone, 0x78ec89a0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+DEFINE_GUID(DPAID_PhoneW, 0xba5a7a70, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_Modem  {F6DCC200-A2FE-11d0-9C4F-00A0C905425E} -- ANSI
+ * DPAID_ModemW {01FD92E0-A2FF-11d0-9C4F-00A0C905425E} -- UNICODE
+ * Chunk purpose: Chunk is a modem name registered with TAPI
+ */
+DEFINE_GUID(DPAID_Modem, 0xf6dcc200, 0xa2fe, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+DEFINE_GUID(DPAID_ModemW, 0x1fd92e0, 0xa2ff, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_INet  {C4A54DA0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI
+ * DPAID_INetW {E63232A0-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE
+ * Chunk purpose: Chunk is a string containing a TCP/IP host name or IP address
+ */
+DEFINE_GUID(DPAID_INet, 0xc4a54da0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+DEFINE_GUID(DPAID_INetW, 0xe63232a0, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_INetPort {E4524541-8EA5-11d1-8A96-006097B01411}
+ * Chunk purpose: Chunk is a port number used for creating TCP and UDP sockets. (WORD)
+ */
+DEFINE_GUID(DPAID_INetPort, 0xe4524541, 0x8ea5, 0x11d1, 0x8a, 0x96, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
+
+/* DPAID_ComPort {F2F0CE00-E0AF-11cf-9C4E-00A0C905425E}
+ * Chunk purpose: Chunk contains the description of a serial port.
+ */
+DEFINE_GUID(DPAID_ComPort, 0xf2f0ce00, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+
+/* Header block for address data elements */
+typedef struct tagDPADDRESS
+{
+    GUID                guidDataType;
+    DWORD               dwDataSize;
+} DPADDRESS, *LPDPADDRESS;
+
+
+/* Used for specification of a communication port. Baud rate, stop bits and
+ * parity bits can be found in winbase.h. These are flow control constants only.
+ */
+#define DPCPA_NOFLOW        0           /* no flow control */
+#define DPCPA_XONXOFFFLOW   1           /* software flow control */
+#define DPCPA_RTSFLOW       2           /* hardware flow control with RTS */
+#define DPCPA_DTRFLOW       3           /* hardware flow control with DTR */
+#define DPCPA_RTSDTRFLOW    4           /* hardware flow control with RTS and DTR */
+
+typedef struct tagDPCOMPORTADDRESS
+{
+    DWORD   dwComPort;                  /* COM port to use (1-4) */
+    DWORD   dwBaudRate;                 /* baud rate (100-256k) */
+    DWORD   dwStopBits;                 /* no. stop bits (1-2) */
+    DWORD   dwParity;                   /* parity (none, odd, even, mark) */
+    DWORD   dwFlowControl;              /* flow control (none, xon/xoff, rts, dtr) */
+} DPCOMPORTADDRESS, *LPDPCOMPORTADDRESS;
+
+
+
+/****************************************************************************
+ * Miscellaneous
+ */
+
+typedef struct tagDPLAPPINFO
+{
+    DWORD       dwSize;
+    GUID        guidApplication;
+
+    union
+    {
+        LPSTR   lpszAppNameA;
+        LPWSTR  lpszAppName;
+    } DUMMYUNIONNAME;
+
+} DPLAPPINFO, *LPDPLAPPINFO;
+typedef const DPLAPPINFO *LPCDPLAPPINFO;
+
+typedef struct DPCOMPOUNDADDRESSELEMENT
+{
+    GUID    guidDataType;
+    DWORD   dwDataSize;
+    LPVOID  lpData;
+} DPCOMPOUNDADDRESSELEMENT, *LPDPCOMPOUNDADDRESSELEMENT;
+typedef const DPCOMPOUNDADDRESSELEMENT *LPCDPCOMPOUNDADDRESSELEMENT;
+
+typedef struct tagDPAPPLICATIONDESC
+{
+    DWORD       dwSize;
+    DWORD       dwFlags;
+
+    union
+    {
+        LPSTR       lpszApplicationNameA;
+        LPWSTR      lpszApplicationName;
+    } DUMMYUNIONNAME1;
+
+    GUID        guidApplication;
+
+    union
+    {
+        LPSTR       lpszFilenameA;
+        LPWSTR      lpszFilename;
+    } DUMMYUNIONNAME2;
+
+    union
+    {
+        LPSTR       lpszCommandLineA;
+        LPWSTR      lpszCommandLine;
+    } DUMMYUNIONNAME3;
+
+    union
+    {
+        LPSTR       lpszPathA;
+        LPWSTR      lpszPath;
+    } DUMMYUNIONNAME4;
+
+    union
+    {
+        LPSTR       lpszCurrentDirectoryA;
+        LPWSTR      lpszCurrentDirectory;
+    } DUMMYUNIONNAME5;
+
+    LPSTR       lpszDescriptionA;
+    LPWSTR      lpszDescriptionW;
+
+} DPAPPLICATIONDESC, *LPDPAPPLICATIONDESC;
+
+
+
+extern HRESULT WINAPI DirectPlayLobbyCreateW(LPGUID, LPDIRECTPLAYLOBBY*,  IUnknown*, LPVOID, DWORD );
+extern HRESULT WINAPI DirectPlayLobbyCreateA(LPGUID, LPDIRECTPLAYLOBBYA*, IUnknown*, LPVOID, DWORD );
+#define DirectPlayLobbyCreate WINELIB_NAME_AW(DirectPlayLobbyCreate)
+
+
+typedef BOOL (CALLBACK *LPDPENUMADDRESSCALLBACK)(
+    REFGUID         guidDataType,
+    DWORD           dwDataSize,
+    LPCVOID         lpData,
+    LPVOID          lpContext );
+
+typedef BOOL (CALLBACK *LPDPLENUMADDRESSTYPESCALLBACK)(
+    REFGUID         guidDataType,
+    LPVOID          lpContext,
+    DWORD           dwFlags );
+
+typedef BOOL (CALLBACK *LPDPLENUMLOCALAPPLICATIONSCALLBACK)(
+    LPCDPLAPPINFO   lpAppInfo,
+    LPVOID          lpContext,
+    DWORD           dwFlags );
+
+/*****************************************************************************
+ * IDirectPlayLobby and IDirectPlayLobbyA interface
+ */
+#define INTERFACE IDirectPlayLobby
+DECLARE_INTERFACE_(IDirectPlayLobby,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlayLobby methods ***/
+    STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;
+    STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
+    STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
+    STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;
+    STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;
+    STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;
+    STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;
+    STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectPlayLobby2 and IDirectPlayLobby2A interface
+ */
+#define INTERFACE IDirectPlayLobby2
+DECLARE_INTERFACE_(IDirectPlayLobby2,IDirectPlayLobby)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlayLobby methods ***/
+    STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;
+    STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
+    STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
+    STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;
+    STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;
+    STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;
+    STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;
+    STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;
+    /*** IDirectPlayLobby2 methods ***/
+    STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectPlayLobby3 and IDirectPlayLobby3A interface
+ */
+#define INTERFACE IDirectPlayLobby3
+DECLARE_INTERFACE_(IDirectPlayLobby3,IDirectPlayLobby2)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlayLobby methods ***/
+    STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;
+    STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
+    STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
+    STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;
+    STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;
+    STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;
+    STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;
+    STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;
+    STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;
+    /*** IDirectPlayLobby2 methods ***/
+    STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;
+    /*** IDirectPlayLobby3 methods ***/
+    STDMETHOD(ConnectEx)(THIS_ DWORD, REFIID, LPVOID *, IUnknown *) PURE;
+    STDMETHOD(RegisterApplication)(THIS_ DWORD, LPDPAPPLICATIONDESC) PURE;
+    STDMETHOD(UnregisterApplication)(THIS_ DWORD, REFGUID) PURE;
+    STDMETHOD(WaitForConnectionSettings)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlayLobby_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlayLobby_AddRef(p)                          (p)->lpVtbl->AddRef(p)
+#define IDirectPlayLobby_Release(p)                         (p)->lpVtbl->Release(p)
+/*** IDirectPlayLobby methods ***/
+#define IDirectPlayLobby_Connect(p,a,b,c)                   (p)->lpVtbl->Connect(p,a,b,c)
+#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f)       (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)
+#define IDirectPlayLobby_EnumAddress(p,a,b,c,d)             (p)->lpVtbl->EnumAddress(p,a,b,c,d)
+#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d)        (p)->lpVtbl->EnumAddressTypes(p,a,b,c,d)
+#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c)     (p)->lpVtbl->EnumLocalApplications(p,a,b,c)
+#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c)     (p)->lpVtbl->GetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e)   (p)->lpVtbl->ReceiveLobbyMessage(p,a,b,c,d,e)
+#define IDirectPlayLobby_RunApplication(p,a,b,c,d)          (p)->lpVtbl->RunApplication(p,a,b,c,d)
+#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d)        (p)->lpVtbl->SendLobbyMessage(p,a,b,c,d)
+#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c)     (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c)      (p)->lpVtbl->SetLobbyMessageEvent(p,a,b,c)
+/*** IDirectPlayLobby2 methods ***/
+#define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d)   (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)
+/*** IDirectPlayLobby3 methods ***/
+#define IDirectPlayLobby_ConnectEx(p,a,b,c,d)               (p)->lpVtbl->ConnectEx(p,a,b,c,d)
+#define IDirectPlayLobby_RegisterApplication(p,a,b)         (p)->lpVtbl->RegisterApplication(p,a,b)
+#define IDirectPlayLobby_UnregisterApplication(p,a,b)       (p)->lpVtbl->UnregisterApplication(p,a,b)
+#define IDirectPlayLobby_WaitForConnectionSettings(p,a)     (p)->lpVtbl->WaitForConnectionSettings(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlayLobby_QueryInterface(p,a,b)              (p)->QueryInterface(a,b)
+#define IDirectPlayLobby_AddRef(p)                          (p)->AddRef()
+#define IDirectPlayLobby_Release(p)                         (p)->Release()
+/*** IDirectPlayLobby methods ***/
+#define IDirectPlayLobby_Connect(p,a,b,c)                   (p)->Connect(a,b,c)
+#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f)       (p)->CreateAddress(a,b,c,d,e,f)
+#define IDirectPlayLobby_EnumAddress(p,a,b,c,d)             (p)->EnumAddress(a,b,c,d)
+#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d)        (p)->EnumAddressTypes(a,b,c,d)
+#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c)     (p)->EnumLocalApplications(a,b,c)
+#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c)     (p)->GetConnectionSettings(a,b,c)
+#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e)   (p)->ReceiveLobbyMessage(a,b,c,d,e)
+#define IDirectPlayLobby_RunApplication(p,a,b,c,d)          (p)->RunApplication(a,b,c,d)
+#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d)        (p)->SendLobbyMessage(a,b,c,d)
+#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c)     (p)->SetConnectionSettings(a,b,c)
+#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c)      (p)->SetLobbyMessageEvent(a,b,c)
+/*** IDirectPlayLobby2 methods ***/
+#define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d)   (p)->CreateCompoundAddress(a,b,c,d)
+/*** IDirectPlayLobby3 methods ***/
+#define IDirectPlayLobby_ConnectEx(p,a,b,c,d)               (p)->ConnectEx(a,b,c,d)
+#define IDirectPlayLobby_RegisterApplication(p,a,b)         (p)->RegisterApplication(a,b)
+#define IDirectPlayLobby_UnregisterApplication(p,a,b)       (p)->UnregisterApplication(a,b)
+#define IDirectPlayLobby_WaitForConnectionSettings(p,a)     (p)->WaitForConnectionSettings(a)
+#endif
+
+/* Used for WaitForConnectionSettings */
+#define DPLWAIT_CANCEL                  0x00000001
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DPLOBBY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h
new file mode 100644
index 0000000..f675f08
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2003-2005 Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLOBBY8_H
+#define __WINE_DPLOBBY8_H
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * DirectPlay8Lobby defines
+ */
+#define DPL_MSGID_LOBBY                   0x8000
+#define DPL_MSGID_RECEIVE                 (0x0001 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_CONNECT                 (0x0002 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_DISCONNECT              (0x0003 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_SESSION_STATUS          (0x0004 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_CONNECTION_SETTINGS     (0x0005 | DPL_MSGID_LOBBY)
+#define DPLHANDLE_ALLCONNECTIONS          0xFFFFFFFF
+#define DPLSESSION_CONNECTED              0x0001
+#define DPLSESSION_COULDNOTCONNECT        0x0002
+#define DPLSESSION_DISCONNECTED           0x0003
+#define DPLSESSION_TERMINATED             0x0004
+#define DPLSESSION_HOSTMIGRATED           0x0005
+#define DPLSESSION_HOSTMIGRATEDHERE       0x0006
+#define DPLAVAILABLE_ALLOWMULTIPLECONNECT 0x0001
+#define DPLCONNECT_LAUNCHNEW              0x0001
+#define DPLCONNECT_LAUNCHNOTFOUND         0x0002
+#define DPLCONNECTSETTINGS_HOST           0x0001
+#define DPLINITIALIZE_DISABLEPARAMVAL     0x0001
+
+/*****************************************************************************
+ * DirectPlay8Lobby structures Typedefs
+ */
+typedef struct _DPL_APPLICATION_INFO {
+  GUID    guidApplication;
+  PWSTR   pwszApplicationName;
+  DWORD   dwNumRunning;
+  DWORD   dwNumWaiting;
+  DWORD   dwFlags;
+} DPL_APPLICATION_INFO, *PDPL_APPLICATION_INFO;
+
+typedef struct _DPL_CONNECTION_SETTINGS {
+  DWORD                 dwSize;
+  DWORD                 dwFlags;
+  DPN_APPLICATION_DESC  dpnAppDesc;
+  IDirectPlay8Address*  pdp8HostAddress;
+  IDirectPlay8Address** ppdp8DeviceAddresses;
+  DWORD                 cNumDeviceAddresses;
+  PWSTR                 pwszPlayerName;
+} DPL_CONNECTION_SETTINGS, *PDPL_CONNECTION_SETTINGS;
+
+typedef struct _DPL_CONNECT_INFO {
+  DWORD	                   dwSize;
+  DWORD	                   dwFlags;
+  GUID                     guidApplication;
+  PDPL_CONNECTION_SETTINGS pdplConnectionSettings;
+  PVOID                    pvLobbyConnectData;
+  DWORD                    dwLobbyConnectDataSize;
+} DPL_CONNECT_INFO, *PDPL_CONNECT_INFO;
+
+typedef struct  _DPL_PROGRAM_DESC {
+  DWORD   dwSize;
+  DWORD   dwFlags;
+  GUID    guidApplication;
+  PWSTR   pwszApplicationName;
+  PWSTR   pwszCommandLine;
+  PWSTR   pwszCurrentDirectory;
+  PWSTR   pwszDescription;
+  PWSTR   pwszExecutableFilename;
+  PWSTR   pwszExecutablePath;
+  PWSTR   pwszLauncherFilename;
+  PWSTR   pwszLauncherPath;
+} DPL_PROGRAM_DESC, *PDPL_PROGRAM_DESC;
+
+typedef struct _DPL_MESSAGE_CONNECT {
+  DWORD                    dwSize;
+  DPNHANDLE                hConnectId;
+  PDPL_CONNECTION_SETTINGS pdplConnectionSettings;
+  PVOID	                   pvLobbyConnectData;
+  DWORD	                   dwLobbyConnectDataSize;
+  PVOID	                   pvConnectionContext;
+} DPL_MESSAGE_CONNECT, *PDPL_MESSAGE_CONNECT;
+
+typedef struct _DPL_MESSAGE_CONNECTION_SETTINGS {
+  DWORD                     dwSize;
+  DPNHANDLE                 hSender;
+  PDPL_CONNECTION_SETTINGS  pdplConnectionSettings;
+  PVOID	                    pvConnectionContext;
+} DPL_MESSAGE_CONNECTION_SETTINGS, *PDPL_MESSAGE_CONNECTION_SETTINGS;
+
+typedef struct _DPL_MESSAGE_DISCONNECT {
+  DWORD	    dwSize;
+  DPNHANDLE hDisconnectId;
+  HRESULT   hrReason;
+  PVOID	    pvConnectionContext;
+} DPL_MESSAGE_DISCONNECT, *PDPL_MESSAGE_DISCONNECT;
+
+typedef struct _DPL_MESSAGE_RECEIVE {
+  DWORD	    dwSize;
+  DPNHANDLE hSender;
+  BYTE*     pBuffer;
+  DWORD	    dwBufferSize;
+  PVOID	    pvConnectionContext;
+} DPL_MESSAGE_RECEIVE, *PDPL_MESSAGE_RECEIVE;
+
+typedef struct _DPL_MESSAGE_SESSION_STATUS {
+  DWORD     dwSize;
+  DPNHANDLE hSender;
+  DWORD     dwStatus;
+  PVOID	    pvConnectionContext;
+} DPL_MESSAGE_SESSION_STATUS, *PDPL_MESSAGE_SESSION_STATUS;
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay8LobbiedApplication,  0x667955ad,0x6b3b,0x43ca,0xb9,0x49,0xbc,0x69,0xb5,0xba,0xff,0x7f);
+DEFINE_GUID(CLSID_DirectPlay8LobbyClient,         0x3b2b6775,0x70b6,0x45af,0x8d,0xea,0xa2,0x09,0xc6,0x95,0x59,0xf3);
+
+DEFINE_GUID(IID_IDirectPlay8LobbiedApplication,   0x819074a3,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8LobbiedApplication *PDIRECTPLAY8LOBBIEDAPPLICATION;
+DEFINE_GUID(IID_IDirectPlay8LobbyClient,          0x819074a2,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8LobbyClient *PDIRECTPLAY8LOBBYCLIENT;
+
+/*****************************************************************************
+ * IDirectPlay8LobbiedApplication interface
+ */
+#define INTERFACE IDirectPlay8LobbiedApplication
+DECLARE_INTERFACE_(IDirectPlay8LobbiedApplication,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8LobbiedApplication methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DPNHANDLE* pdpnhConnection, DWORD dwFlags) PURE;
+    STDMETHOD(RegisterProgram)(THIS_ PDPL_PROGRAM_DESC pdplProgramDesc, DWORD dwFlags) PURE;
+    STDMETHOD(UnRegisterProgram)(THIS_ GUID* pguidApplication, DWORD dwFlags) PURE;
+    STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetAppAvailable)(THIS_ BOOL fAvailable, DWORD dwFlags) PURE;
+    STDMETHOD(UpdateStatus)(THIS_ DPNHANDLE hConnection, DWORD dwStatus, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8LobbiedApplication_AddRef(p)                            (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8LobbiedApplication_Release(p)                           (p)->lpVtbl->Release(p)
+/*** IDirectPlay8LobbiedApplication methods ***/
+#define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d)                (p)->lpVtbl->Initialize(p,a,b,c,d)
+#define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b)               (p)->lpVtbl->RegisterProgram(p,a,b)
+#define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b)             (p)->lpVtbl->UnRegisterProgram(p,a,b)
+#define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d)                      (p)->lpVtbl->Send(p,a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b)               (p)->lpVtbl->SetAppAvailable(p,a,b)
+#define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c)                (p)->lpVtbl->UpdateStatus(p,a,b,c)
+#define IDirectPlay8LobbiedApplication_Close(p,a)                           (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d)     (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c)       (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
+#define IDirectPlay8LobbiedApplication_AddRef(p)                            (p)->AddRef()
+#define IDirectPlay8LobbiedApplication_Release(p)                           (p)->Release()
+/*** IDirectPlay8LobbiedApplication methods ***/
+#define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d)                (p)->Initialize(a,b,c,d)
+#define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b)               (p)->RegisterProgram(a,b)
+#define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b)             (p)->UnRegisterProgram(a,b)
+#define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d)                      (p)->Send(a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b)               (p)->SetAppAvailable(a,b)
+#define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c)                (p)->UpdateStatus(a,b,c)
+#define IDirectPlay8LobbiedApplication_Close(p,a)                           (p)->Close(a)
+#define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d)     (p)->GetConnectionSettings(a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c)       (p)->SetConnectionSettings(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8LobbyClient interface
+ */
+#define INTERFACE IDirectPlay8LobbyClient
+DECLARE_INTERFACE_(IDirectPlay8LobbyClient,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlay8LobbyClient methods ***/
+    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+    STDMETHOD(EnumLocalPrograms)(THIS_ GUID* pGuidApplication, BYTE* pEnumData, DWORD* pdwEnumData, DWORD* pdwItems, DWORD dwFlags) PURE;
+    STDMETHOD(ConnectApplication)(THIS_ DPL_CONNECT_INFO* pdplConnectionInfo, PVOID pvConnectionContext, DPNHANDLE* hApplication, DWORD dwTimeOut, DWORD dwFlags) PURE;
+    STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE;
+    STDMETHOD(ReleaseApplication)(THIS_ DPNHANDLE hConnection, DWORD dwFlags) PURE;
+    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE;
+    STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbyClient_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8LobbyClient_AddRef(p)                            (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8LobbyClient_Release(p)                           (p)->lpVtbl->Release(p)
+/*** IDirectPlay8LobbyClient methods ***/
+#define IDirectPlay8LobbyClient_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e)       (p)->lpVtbl->EnumLocalPrograms(p,a,b,c,d,e)
+#define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e)      (p)->lpVtbl->ConnectApplication(p,a,b,c,d,e)
+#define IDirectPlay8LobbyClient_Send(p,a,b,c,d)                      (p)->lpVtbl->Send(p,a,b,c,d)
+#define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b)            (p)->lpVtbl->ReleaseApplication(p,a,b)
+#define IDirectPlay8LobbyClient_Close(p,a)                           (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d)     (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d)
+#define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c)       (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbyClient_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
+#define IDirectPlay8LobbyClient_AddRef(p)                            (p)->AddRef()
+#define IDirectPlay8LobbyClient_Release(p)                           (p)->Release()
+/*** IDirectPlay8LobbyClient methods ***/
+#define IDirectPlay8LobbyClient_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)
+#define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e)       (p)->EnumLocalPrograms(a,b,c,d,e)
+#define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e)      (p)->ConnectApplication(a,b,c,d,e)
+#define IDirectPlay8LobbyClient_Send(p,a,b,c,d)                      (p)->Send(a,b,c,d)
+#define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b)            (p)->ReleaseApplication(a,b)
+#define IDirectPlay8LobbyClient_Close(p,a)                           (p)->Close(a)
+#define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d)     (p)->GetConnectionSettings(a,b,c,d)
+#define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c)       (p)->SetConnectionSettings(a,b,c)
+#endif
+
+
+/* Export functions */
+
+HRESULT WINAPI DirectPlay8LobbyCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif 
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h
new file mode 100644
index 0000000..48075b9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2006 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DPNATHLP_H__
+#define __DPNATHLP_H__
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT DirectPlayNATHelpCreate(LPCGUID pIID, LPVOID *ppvInterface);
+
+DEFINE_GUID(CLSID_DirectPlayNATHelpUPnP, 0xb9c2e9c4,0x68c1,0x4d42,0xa7,0xa1,0xe7,0x6a,0x26,0x98,0x2a,0xd6);
+DEFINE_GUID(CLSID_DirectPlayNATHelpPAST, 0x963ab779,0x16a1,0x477c,0xa3,0x6d,0xcb,0x5e,0x71,0x19,0x38,0xf7);
+DEFINE_GUID(IID_IDirectPlayNATHelp,      0x154940b6,0x2278,0x4a2f,0x91,0x01,0x9b,0xa9,0xf4,0x31,0xf6,0x03);
+
+#define DPNHGETCAPS_UPDATESERVERSTATUS  0x01
+
+#define DPNHREGISTERPORTS_TCP           0x01
+#define DPNHREGISTERPORTS_FIXEDPORTS    0x02
+#define DPNHREGISTERPORTS_SHAREDPORTS   0x04
+
+#define DPNHADDRESSTYPE_TCP             0x01
+#define DPNHADDRESSTYPE_FIXEDPORTS      0x02
+#define DPNHADDRESSTYPE_SHAREDPORTS     0x04
+#define DPNHADDRESSTYPE_LOCALFIREWALL   0x08
+#define DPNHADDRESSTYPE_GATEWAY         0x10
+#define DPNHADDRESSTYPE_GATEWAYISLOCAL  0x20
+
+#define DPNHCAPSFLAG_LOCALFIREWALLPRESENT       0x01
+#define DPNHCAPSFLAG_GATEWAYPRESENT             0x02
+#define DPNHCAPSFLAG_GATEWAYISLOCAL             0x04
+#define DPNHCAPSFLAG_PUBLICADDRESSAVAILABLE     0x08
+#define DPNHCAPSFLAG_NOTALLSUPPORTACTIVENOTIFY  0x10
+
+#define DPNHINITIALIZE_DISABLEGATEWAYSUPPORT        0x01
+#define DPNHINITIALIZE_DISABLELOCALFIREWALLSUPPORT  0x02
+
+#define DPNHQUERYADDRESS_TCP                        0x01
+#define DPNHQUERYADDRESS_CACHEFOUND                 0x02
+#define DPNHQUERYADDRESS_CACHENOTFOUND              0x04
+#define DPNHQUERYADDRESS_CHECKFORPRIVATEBUTUNMAPPED 0x08
+
+#define DPNHGETREGISTEREDADDRESSES_LOCALFIREWALLREMAPONLY 0x01
+
+#define _DPNH_FACILITY_CODE   0x015
+#define _DPNH_HRESULT_BASE    0xF000
+
+#define MAKE_DPNHSUCCESS(code) \
+               MAKE_HRESULT(0, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE))
+#define MAKE_DPNHFAILURE(code) \
+               MAKE_HRESULT(1, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE))
+
+#define DPNH_OK                         S_OK
+#define DPNHSUCCESS_ADDRESSESCHANGED    MAKE_DPNHSUCCESS(0x10)
+
+#define DPNHERR_ALREADYINITIALIZED      MAKE_DPNHFAILURE(0x10)
+#define DPNHERR_BUFFERTOOSMALL          MAKE_DPNHFAILURE(0x20)
+#define DPNHERR_GENERIC                 E_FAIL
+#define DPNHERR_INVALIDFLAGS            MAKE_DPNHFAILURE(0x30)
+#define DPNHERR_INVALIDOBJECT           MAKE_DPNHFAILURE(0x40)
+#define DPNHERR_INVALIDPARAM            E_INVALIDARG
+#define DPNHERR_INVALIDPOINTER          E_POINTER
+#define DPNHERR_NOMAPPING               MAKE_DPNHFAILURE(0x50)
+#define DPNHERR_NOMAPPINGBUTPRIVATE     MAKE_DPNHFAILURE(0x60)
+#define DPNHERR_NOTINITIALIZED          MAKE_DPNHFAILURE(0x70)
+#define DPNHERR_OUTOFMEMORY             E_OUTOFMEMORY
+#define DPNHERR_PORTALREADYREGISTERED   MAKE_DPNHFAILURE(0x80)
+#define DPNHERR_PORTUNAVAILABLE         MAKE_DPNHFAILURE(0x90)
+#define DPNHERR_REENTRANT               MAKE_DPNHFAILURE(0x95)
+#define DPNHERR_SERVERNOTAVAILABLE      MAKE_DPNHFAILURE(0xA0)
+#define DPNHERR_UPDATESERVERSTATUS      MAKE_DPNHFAILURE(0xC0)
+	
+typedef DWORD_PTR DPNHHANDLE;
+typedef DWORD_PTR *PDPNHHANDLE;
+
+typedef struct _DPNHCAPS
+{
+   DWORD dwSize;
+   DWORD dwFlags;
+   DWORD dwNumRegisteredPorts;
+   DWORD dwMinLeaseTimeRemaining;
+   DWORD dwRecommendedGetCapsInterval;
+} DPNHCAPS, *PDPNHCAPS;
+
+
+#define INTERFACE IDirectPlayNATHelp
+DECLARE_INTERFACE_(IDirectPlayNATHelp,IUnknown)
+{
+   /*** IUnknown methods ***/
+   STDMETHOD(QueryInterface) (THIS_
+                              REFIID riid,
+                              void** ppvObject) PURE;
+
+   STDMETHOD_(ULONG,AddRef)  (THIS) PURE;
+
+   STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+   /*** IDirectPlayNATHelp functions ***/
+   STDMETHOD(Initialize)     (THIS_
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(Close)          (THIS_
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(GetCaps)        (THIS_
+                              PDPNHCAPS pCaps,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(RegisterPorts)  (THIS_
+                              PSOCKADDR aLocalAddresses,
+                              DWORD dwAddressSize,
+                              DWORD dwAddresses,
+                              DWORD dwTime,
+                              PDPNHHANDLE phRegisteredPorts,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(GetRegisteredAddresses) (THIS_
+                              PDPNHHANDLE hRegisteredPorts,
+                              PSOCKADDR paPublicAddresses,
+                              const DWORD *dwAddressSize,
+                              const DWORD *dwAddressFlags,
+                              const DWORD *dwRemaining,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(DeregisterPorts)(THIS_
+                              DPNHHANDLE hRegPorts,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(QueryAddress)   (THIS_
+                              PSOCKADDR pSource,
+                              PSOCKADDR pQuery,
+                              PSOCKADDR pResponse,
+                              INT iAddresses,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(SetAlertEvent)  (THIS_
+                              HANDLE hEvent,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(SetAlertIOCompletionPort)(THIS_
+                              HANDLE hIOCompletionPort,
+                              DWORD dwCompletion,
+                              DWORD dwMaxThreads,
+                              DWORD dwFlags) PURE;
+
+   STDMETHOD(ExtendRegisteredPortsLease)(THIS_
+                              DPNHHANDLE hRegisteredPorts,
+                              DWORD dwLeaseTime,
+                              DWORD dwFlags) PURE;
+};
+
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IDirectPlayNATHelp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlayNATHelp_AddRef(p)  (p)->lpVtbl->AddRef(p)
+#define IDirectPlayNATHelp_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlayNATHelp_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlayNATHelp_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlayNATHelp_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlayNATHelp_RegisterPorts(p,a,b,c,d,e,f) (p)->lpVtbl->RegisterPorts(p,a,b,c,d,e,f)
+#define IDirectPlayNATHelp_GetRegisteredAddresses(p,a,b,c,d,e,f) (p)->lpVtbl->GetRegisteredAddresses(p,a,b,c,d,e,f)
+#define IDirectPlayNATHelp_DeregisterPorts(p,a,b) (p)->lpVtbl->DeregisterPorts(p,a,b)
+#define IDirectPlayNATHelp_QueryAddress(p,a,b,c,d,e) (p)->lpVtbl->QueryAddress(p,a,b,c,d,e)
+#define IDirectPlayNATHelp_SetAlertEvent(p,a,b) (p)->lpVtbl->SetAlertEvent(p,a,b)
+#define IDirectPlayNATHelp_SetAlertIOCompletionPort(p,a,b,c,d) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c,d)
+#define IDirectPlayNATHelp_ExtendRegisteredPortsLease(p,a,b,c) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DPNATHLP_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h
new file mode 100644
index 0000000..0d8d9c0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2003 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DSCONF_H
+#define __WINE_DSCONF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectSoundPrivate,           0x11ab3ec0,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca);
+
+DEFINE_GUID(DSPROPSETID_DirectSoundDevice,      0x84624f82,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca);
+
+typedef enum
+{
+        DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A = 1,
+        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1       = 2,
+        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1         = 3,
+        DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W = 4,
+        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A       = 5,
+        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W       = 6,
+        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A         = 7,
+        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W         = 8,
+} DSPROPERTY_DIRECTSOUNDDEVICE;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING  DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE          DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING  DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE          DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A
+#endif
+
+typedef enum
+{
+        DIRECTSOUNDDEVICE_TYPE_EMULATED,
+        DIRECTSOUNDDEVICE_TYPE_VXD,
+        DIRECTSOUNDDEVICE_TYPE_WDM
+} DIRECTSOUNDDEVICE_TYPE;
+
+typedef enum
+{
+        DIRECTSOUNDDEVICE_DATAFLOW_RENDER,
+        DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE
+} DIRECTSOUNDDEVICE_DATAFLOW;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA
+{
+        LPSTR                           DeviceName;
+        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;
+        GUID                            DeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA
+{
+        LPWSTR                          DeviceName;
+        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;
+        GUID                            DeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA
+#endif
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA
+{
+        GUID                            DeviceId;
+        CHAR                            DescriptionA[0x100];
+        WCHAR                           DescriptionW[0x100];
+        CHAR                            ModuleA[MAX_PATH];
+        WCHAR                           ModuleW[MAX_PATH];
+        DIRECTSOUNDDEVICE_TYPE          Type;
+        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;
+        ULONG                           WaveDeviceId;
+        ULONG                           Devnode;
+} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA
+{
+        DIRECTSOUNDDEVICE_TYPE          Type;
+        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;
+        GUID                            DeviceId;
+        LPSTR                           Description;
+        LPSTR                           Module;
+        LPSTR                           Interface;
+        ULONG                           WaveDeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA
+{
+        DIRECTSOUNDDEVICE_TYPE          Type;
+        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;
+        GUID                            DeviceId;
+        LPWSTR                          Description;
+        LPWSTR                          Module;
+        LPWSTR                          Interface;
+        ULONG                           WaveDeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA  PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA  PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA
+#endif
+
+typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, LPVOID);
+typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, LPVOID);
+typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, LPVOID);
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA
+{
+        LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1 Callback;
+        LPVOID                                  Context;
+} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA
+{
+        LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA Callback;
+        LPVOID                                  Context;
+} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA
+{
+        LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW Callback;
+        LPVOID                                  Context;
+} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DSCONF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h
new file mode 100644
index 0000000..5e730e9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2006 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DSGETDC_H
+#define __WINE_DSGETDC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DS_FORCE_REDISCOVERY            0x00000001
+#define DS_DIRECTORY_SERVICE_REQUIRED   0x00000010
+#define DS_DIRECTORY_SERVICE_PREFERRED  0x00000020
+#define DS_GC_SERVER_REQUIRED           0x00000040
+#define DS_PDC_REQUIRED                 0x00000080
+#define DS_BACKGROUND_ONLY              0x00000100
+#define DS_IP_REQUIRED                  0x00000200
+#define DS_KDC_REQUIRED                 0x00000400
+#define DS_TIMESERV_REQUIRED            0x00000800
+#define DS_WRITABLE_REQUIRED            0x00001000
+#define DS_GOOD_TIMESERV_PREFERRED      0x00002000
+#define DS_AVOID_SELF                   0x00004000
+#define DS_ONLY_LDAP_NEEDED             0x00008000
+
+#define DS_IS_FLAT_NAME                 0x00010000
+#define DS_IS_DNS_NAME                  0x00020000
+
+#define DS_RETURN_DNS_NAME              0x40000000
+#define DS_RETURN_FLAT_NAME             0x80000000
+
+#define DSGETDC_VALID_FLAGS ( \
+    DS_FORCE_REDISCOVERY | \
+    DS_DIRECTORY_SERVICE_REQUIRED | \
+    DS_DIRECTORY_SERVICE_PREFERRED | \
+    DS_GC_SERVER_REQUIRED | \
+    DS_PDC_REQUIRED | \
+    DS_BACKGROUND_ONLY | \
+    DS_IP_REQUIRED | \
+    DS_KDC_REQUIRED | \
+    DS_TIMESERV_REQUIRED | \
+    DS_WRITABLE_REQUIRED | \
+    DS_GOOD_TIMESERV_PREFERRED | \
+    DS_AVOID_SELF | \
+    DS_ONLY_LDAP_NEEDED | \
+    DS_IS_FLAT_NAME | \
+    DS_IS_DNS_NAME | \
+    DS_RETURN_FLAT_NAME  | \
+    DS_RETURN_DNS_NAME )
+
+typedef struct _DOMAIN_CONTROLLER_INFOA {
+    LPSTR DomainControllerName;
+    LPSTR DomainControllerAddress;
+    ULONG DomainControllerAddressType;
+    GUID DomainGuid;
+    LPSTR DomainName;
+    LPSTR DnsForestName;
+    ULONG Flags;
+    LPSTR DcSiteName;
+    LPSTR ClientSiteName;
+} DOMAIN_CONTROLLER_INFOA, *PDOMAIN_CONTROLLER_INFOA;
+
+typedef struct _DOMAIN_CONTROLLER_INFOW {
+    LPWSTR DomainControllerName;
+    LPWSTR DomainControllerAddress;
+    ULONG DomainControllerAddressType;
+    GUID DomainGuid;
+    LPWSTR DomainName;
+    LPWSTR DnsForestName;
+    ULONG Flags;
+    LPWSTR DcSiteName;
+    LPWSTR ClientSiteName;
+} DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW;
+
+DECL_WINELIB_TYPE_AW(DOMAIN_CONTROLLER_INFO)
+
+DWORD WINAPI DsGetDcNameA(LPCSTR,LPCSTR,GUID*,LPCSTR,ULONG,PDOMAIN_CONTROLLER_INFOA*);
+DWORD WINAPI DsGetDcNameW(LPCWSTR,LPCWSTR,GUID*,LPCWSTR,ULONG,PDOMAIN_CONTROLLER_INFOW*);
+#define     DsGetDcName WINELIB_NAME_AW(DsGetDcName)
+
+DWORD WINAPI DsGetSiteNameA(LPCSTR ComputerName, LPSTR *SiteName);
+DWORD WINAPI DsGetSiteNameW(LPCWSTR ComputerName, LPWSTR *SiteName);
+#define     DsGetSiteName WINELIB_NAME_AW(DsGetSiteName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DSGETDC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h
new file mode 100644
index 0000000..008e932
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DSHOW_INCLUDED__
+#define __DSHOW_INCLUDED__
+
+#define AM_NOVTABLE
+
+#include <windows.h>
+#ifndef __WINESRC__
+# include <windowsx.h>
+#endif
+#include <olectl.h>
+#include <ddraw.h>
+#include <mmsystem.h>
+#ifndef NO_DSHOW_STRSAFE
+#define NO_SHLWAPI_STRFCNS
+#include <strsafe.h>
+#endif
+
+#ifndef NUMELMS
+#define NUMELMS(array) (sizeof(array)/sizeof((array)[0]))
+#endif
+
+#include <strmif.h>
+#include <amvideo.h>
+#ifdef DSHOW_USE_AMAUDIO
+#include <amaudio.h>
+#endif
+#include <control.h>
+#include <evcode.h>
+#include <uuids.h>
+#include <errors.h>
+/* FIXME: #include <edevdefs.h> */
+#include <audevcod.h>
+/* FIXME: #include <dvdevcod.h> */
+
+#ifndef OATRUE
+#define OATRUE (-1)
+#endif
+#ifndef OAFALSE
+#define OAFALSE (0)
+#endif
+
+#endif /* __DSHOW_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h
new file mode 100644
index 0000000..27f33ef
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h
@@ -0,0 +1,1211 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DSOUND_INCLUDED__
+#define __DSOUND_INCLUDED__
+
+#ifndef DIRECTSOUND_VERSION
+#define DIRECTSOUND_VERSION 0x0900
+#endif
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <float.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef DX_SHARED_DEFINES
+
+typedef float D3DVALUE, *LPD3DVALUE;
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR, *LPD3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+    float x;
+    float y;
+    float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+#ifndef LPD3DVECTOR_DEFINED
+typedef D3DVECTOR *LPD3DVECTOR;
+#define LPD3DVECTOR_DEFINED
+#endif
+
+#define DX_SHARED_DEFINES
+#endif /* DX_SHARED_DEFINES */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectSound,		0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
+DEFINE_GUID(CLSID_DirectSound8,		0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b);
+DEFINE_GUID(CLSID_DirectSoundCapture,	0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16);
+DEFINE_GUID(CLSID_DirectSoundCapture8,	0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1);
+DEFINE_GUID(CLSID_DirectSoundFullDuplex,0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d);
+
+DEFINE_GUID(IID_IDirectSound,		0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSound *LPDIRECTSOUND,**LPLPDIRECTSOUND;
+
+DEFINE_GUID(IID_IDirectSound8,		0xC50A7E93,0xF395,0x4834,0x9E,0xF6,0x7F,0xA9,0x9D,0xE5,0x09,0x66);
+typedef struct IDirectSound8 *LPDIRECTSOUND8,**LPLPDIRECTSOUND8;
+
+DEFINE_GUID(IID_IDirectSoundBuffer,	0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER;
+
+DEFINE_GUID(IID_IDirectSoundBuffer8,	0x6825A449,0x7524,0x4D82,0x92,0x0F,0x50,0xE3,0x6A,0xB3,0xAB,0x1E);
+typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8,**LPLPDIRECTSOUNDBUFFER8;
+
+DEFINE_GUID(IID_IDirectSoundNotify,	0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
+typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY,**LPLPDIRECTSOUNDNOTIFY;
+#define	IID_IDirectSoundNotify8		IID_IDirectSoundNotify
+
+DEFINE_GUID(IID_IDirectSound3DListener,	0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER,**LPLPDIRECTSOUND3DLISTENER;
+
+DEFINE_GUID(IID_IDirectSound3DBuffer,	0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER,**LPLPDIRECTSOUND3DBUFFER;
+
+DEFINE_GUID(IID_IDirectSoundCapture,	0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
+typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE,**LPLPDIRECTSOUNDCAPTURE;
+#define	IID_IDirectSoundCapture8	IID_IDirectSoundCapture
+typedef struct IDirectSoundCapture IDirectSoundCapture8,*LPDIRECTSOUNDCAPTURE8,**LPLPDIRECTSOUNDCAPTURE8;
+
+DEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
+typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER,**LPLPDIRECTSOUNDCAPTUREBUFFER;
+
+DEFINE_GUID(IID_IDirectSoundCaptureBuffer8,0x00990DF4,0x0DBB,0x4872,0x83,0x3E,0x6D,0x30,0x3E,0x80,0xAE,0xB6);
+typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8,**LPLPDIRECTSOUNDCAPTUREBUFFER8;
+
+DEFINE_GUID(IID_IDirectSoundFullDuplex,	0xEDCB4C7A,0xDAAB,0x4216,0xA4,0x2E,0x6C,0x50,0x59,0x6D,0xDC,0x1D);
+typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX,**LPLPDIRECTSOUNDFULLDUPLEX;
+#define	IID_IDirectSoundFullDuplex8	IID_IDirectSoundFullDuplex
+
+DEFINE_GUID(DSDEVID_DefaultPlayback,     0xDEF00000,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+DEFINE_GUID(DSDEVID_DefaultCapture,      0xDEF00001,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+DEFINE_GUID(DSDEVID_DefaultVoicePlayback,0xDEF00002,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xDEF00003,0x9C6D,0x47ED,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+
+DEFINE_GUID(DSDEVID_WinePlayback,        0x40316A1D,0x605B,0xD611,0x87,0xC6,0x00,0x80,0xAD,0x00,0x02,0xFE);
+
+#define	_FACDS		0x878
+#define	MAKE_DSHRESULT(code)		MAKE_HRESULT(1,_FACDS,code)
+
+#define DS_OK				0
+#define DS_NO_VIRTUALIZATION            MAKE_HRESULT(0, _FACDS, 10)
+#define DS_INCOMPLETE                   MAKE_HRESULT(0, _FACDS, 20)
+#define DSERR_ALLOCATED			MAKE_DSHRESULT(10)
+#define DSERR_CONTROLUNAVAIL		MAKE_DSHRESULT(30)
+#define DSERR_INVALIDPARAM		E_INVALIDARG
+#define DSERR_INVALIDCALL		MAKE_DSHRESULT(50)
+#define DSERR_GENERIC			E_FAIL
+#define DSERR_PRIOLEVELNEEDED		MAKE_DSHRESULT(70)
+#define DSERR_OUTOFMEMORY		E_OUTOFMEMORY
+#define DSERR_BADFORMAT			MAKE_DSHRESULT(100)
+#define DSERR_UNSUPPORTED		E_NOTIMPL
+#define DSERR_NODRIVER			MAKE_DSHRESULT(120)
+#define DSERR_ALREADYINITIALIZED	MAKE_DSHRESULT(130)
+#define DSERR_NOAGGREGATION		CLASS_E_NOAGGREGATION
+#define DSERR_BUFFERLOST		MAKE_DSHRESULT(150)
+#define DSERR_OTHERAPPHASPRIO		MAKE_DSHRESULT(160)
+#define DSERR_UNINITIALIZED		MAKE_DSHRESULT(170)
+#define DSERR_NOINTERFACE               E_NOINTERFACE
+#define DSERR_ACCESSDENIED              E_ACCESSDENIED
+#define DSERR_BUFFERTOOSMALL            MAKE_DSHRESULT(180)
+#define DSERR_DS8_REQUIRED              MAKE_DSHRESULT(190)
+#define DSERR_SENDLOOP                  MAKE_DSHRESULT(200)
+#define DSERR_BADSENDBUFFERGUID         MAKE_DSHRESULT(210)
+#define DSERR_FXUNAVAILABLE             MAKE_DSHRESULT(220)
+#define DSERR_OBJECTNOTFOUND            MAKE_DSHRESULT(4449)
+
+#define DSCAPS_PRIMARYMONO          0x00000001
+#define DSCAPS_PRIMARYSTEREO        0x00000002
+#define DSCAPS_PRIMARY8BIT          0x00000004
+#define DSCAPS_PRIMARY16BIT         0x00000008
+#define DSCAPS_CONTINUOUSRATE       0x00000010
+#define DSCAPS_EMULDRIVER           0x00000020
+#define DSCAPS_CERTIFIED            0x00000040
+#define DSCAPS_SECONDARYMONO        0x00000100
+#define DSCAPS_SECONDARYSTEREO      0x00000200
+#define DSCAPS_SECONDARY8BIT        0x00000400
+#define DSCAPS_SECONDARY16BIT       0x00000800
+
+#define	DSSCL_NORMAL		1
+#define	DSSCL_PRIORITY		2
+#define	DSSCL_EXCLUSIVE		3
+#define	DSSCL_WRITEPRIMARY	4
+
+typedef struct _DSCAPS
+{
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    DWORD	dwMinSecondarySampleRate;
+    DWORD	dwMaxSecondarySampleRate;
+    DWORD	dwPrimaryBuffers;
+    DWORD	dwMaxHwMixingAllBuffers;
+    DWORD	dwMaxHwMixingStaticBuffers;
+    DWORD	dwMaxHwMixingStreamingBuffers;
+    DWORD	dwFreeHwMixingAllBuffers;
+    DWORD	dwFreeHwMixingStaticBuffers;
+    DWORD	dwFreeHwMixingStreamingBuffers;
+    DWORD	dwMaxHw3DAllBuffers;
+    DWORD	dwMaxHw3DStaticBuffers;
+    DWORD	dwMaxHw3DStreamingBuffers;
+    DWORD	dwFreeHw3DAllBuffers;
+    DWORD	dwFreeHw3DStaticBuffers;
+    DWORD	dwFreeHw3DStreamingBuffers;
+    DWORD	dwTotalHwMemBytes;
+    DWORD	dwFreeHwMemBytes;
+    DWORD	dwMaxContigFreeHwMemBytes;
+    DWORD	dwUnlockTransferRateHwBuffers;
+    DWORD	dwPlayCpuOverheadSwBuffers;
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+} DSCAPS,*LPDSCAPS;
+typedef const DSCAPS *LPCDSCAPS;
+
+#define DSBPLAY_LOOPING             0x00000001
+#define DSBPLAY_LOCHARDWARE         0x00000002
+#define DSBPLAY_LOCSOFTWARE         0x00000004
+#define DSBPLAY_TERMINATEBY_TIME    0x00000008
+#define DSBPLAY_TERMINATEBY_DISTANCE    0x000000010
+#define DSBPLAY_TERMINATEBY_PRIORITY    0x000000020
+
+#define DSBSTATUS_PLAYING           0x00000001
+#define DSBSTATUS_BUFFERLOST        0x00000002
+#define DSBSTATUS_LOOPING           0x00000004
+#define DSBSTATUS_LOCHARDWARE       0x00000008
+#define DSBSTATUS_LOCSOFTWARE       0x00000010
+#define DSBSTATUS_TERMINATED        0x00000020
+
+#define DSBLOCK_FROMWRITECURSOR     0x00000001
+#define DSBLOCK_ENTIREBUFFER        0x00000002
+
+#define DSBCAPS_PRIMARYBUFFER       0x00000001
+#define DSBCAPS_STATIC              0x00000002
+#define DSBCAPS_LOCHARDWARE         0x00000004
+#define DSBCAPS_LOCSOFTWARE         0x00000008
+#define DSBCAPS_CTRL3D              0x00000010
+#define DSBCAPS_CTRLFREQUENCY       0x00000020
+#define DSBCAPS_CTRLPAN             0x00000040
+#define DSBCAPS_CTRLVOLUME          0x00000080
+#define DSBCAPS_CTRLDEFAULT         0x000000E0  /* Pan + volume + frequency. */
+#define DSBCAPS_CTRLPOSITIONNOTIFY  0x00000100
+#define DSBCAPS_CTRLFX              0x00000200
+#define DSBCAPS_CTRLALL             0x000001F0  /* All control capabilities */
+#define DSBCAPS_STICKYFOCUS         0x00004000
+#define DSBCAPS_GLOBALFOCUS         0x00008000
+#define DSBCAPS_GETCURRENTPOSITION2 0x00010000  /* More accurate play cursor under emulation*/
+#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000
+#define DSBCAPS_LOCDEFER            0x00040000
+
+#define DSBSIZE_MIN                 4
+#define DSBSIZE_MAX                 0xFFFFFFF
+#define DSBPAN_LEFT                 -10000
+#define DSBPAN_CENTER               0
+#define DSBPAN_RIGHT                 10000
+#define DSBVOLUME_MAX                    0
+#define DSBVOLUME_MIN               -10000
+#define DSBFREQUENCY_MIN            100
+#define DSBFREQUENCY_MAX            200000
+#define DSBFREQUENCY_ORIGINAL       0
+
+#define DSBNOTIFICATIONS_MAX        100000U
+
+typedef struct _DSBCAPS
+{
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    DWORD	dwBufferBytes;
+    DWORD	dwUnlockTransferRate;
+    DWORD	dwPlayCpuOverhead;
+} DSBCAPS,*LPDSBCAPS;
+typedef const DSBCAPS *LPCDSBCAPS;
+
+#define DSSCL_NORMAL                1
+#define DSSCL_PRIORITY              2
+#define DSSCL_EXCLUSIVE             3
+#define DSSCL_WRITEPRIMARY          4
+
+typedef struct _DSEFFECTDESC
+{
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    GUID	guidDSFXClass;
+    DWORD_PTR	dwReserved1;
+    DWORD_PTR	dwReserved2;
+} DSEFFECTDESC,*LPDSEFFECTDESC;
+typedef const DSEFFECTDESC *LPCDSEFFECTDESC;
+
+#define DSFX_LOCHARDWARE    0x00000001
+#define DSFX_LOCSOFTWARE    0x00000002
+
+enum
+{
+    DSFXR_PRESENT,
+    DSFXR_LOCHARDWARE,
+    DSFXR_LOCSOFTWARE,
+    DSFXR_UNALLOCATED,
+    DSFXR_FAILED,
+    DSFXR_UNKNOWN,
+    DSFXR_SENDLOOP
+};
+
+typedef struct _DSBUFFERDESC1
+{
+    DWORD		dwSize;
+    DWORD		dwFlags;
+    DWORD		dwBufferBytes;
+    DWORD		dwReserved;
+    LPWAVEFORMATEX	lpwfxFormat;
+} DSBUFFERDESC1,*LPDSBUFFERDESC1;
+typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1;
+
+typedef struct _DSBUFFERDESC
+{
+    DWORD		dwSize;
+    DWORD		dwFlags;
+    DWORD		dwBufferBytes;
+    DWORD		dwReserved;
+    LPWAVEFORMATEX	lpwfxFormat;
+    GUID		guid3DAlgorithm;
+} DSBUFFERDESC,*LPDSBUFFERDESC;
+typedef const DSBUFFERDESC *LPCDSBUFFERDESC;
+
+typedef struct _DSBPOSITIONNOTIFY
+{
+    DWORD	dwOffset;
+    HANDLE	hEventNotify;
+} DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY;
+typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;
+
+#define DSSPEAKER_DIRECTOUT     0
+#define DSSPEAKER_HEADPHONE     1
+#define DSSPEAKER_MONO          2
+#define DSSPEAKER_QUAD          3
+#define DSSPEAKER_STEREO        4
+#define DSSPEAKER_SURROUND      5
+#define DSSPEAKER_5POINT1       6
+#define DSSPEAKER_5POINT1_BACK  6
+#define DSSPEAKER_7POINT1       7
+#define DSSPEAKER_7POINT1_WIDE  7
+#define DSSPEAKER_7POINT1_SURROUND  8
+#define DSSPEAKER_5POINT1_SURROUND  9
+
+#define DSSPEAKER_GEOMETRY_MIN      0x00000005  /* 5 degrees */
+#define DSSPEAKER_GEOMETRY_NARROW   0x0000000A  /* 10 degrees */
+#define DSSPEAKER_GEOMETRY_WIDE     0x00000014  /* 20 degrees */
+#define DSSPEAKER_GEOMETRY_MAX      0x000000B4  /* 180 degrees */
+
+#define DSSPEAKER_COMBINED(c, g)    ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
+#define DSSPEAKER_CONFIG(a)         ((BYTE)(a))
+#define DSSPEAKER_GEOMETRY(a)       ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
+
+#define DS_CERTIFIED                0x00000000
+#define DS_UNCERTIFIED              0x00000001
+
+typedef struct _DSCEFFECTDESC
+{
+    DWORD       dwSize;
+    DWORD       dwFlags;
+    GUID        guidDSCFXClass;
+    GUID        guidDSCFXInstance;
+    DWORD       dwReserved1;
+    DWORD       dwReserved2;
+} DSCEFFECTDESC, *LPDSCEFFECTDESC;
+typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC;
+
+#define DSCFX_LOCHARDWARE   0x00000001
+#define DSCFX_LOCSOFTWARE   0x00000002
+
+#define DSCFXR_LOCHARDWARE  0x00000010
+#define DSCFXR_LOCSOFTWARE  0x00000020
+
+typedef struct _DSCBUFFERDESC1
+{
+  DWORD           dwSize;
+  DWORD           dwFlags;
+  DWORD           dwBufferBytes;
+  DWORD           dwReserved;
+  LPWAVEFORMATEX  lpwfxFormat;
+} DSCBUFFERDESC1, *LPDSCBUFFERDESC1;
+
+typedef struct _DSCBUFFERDESC
+{
+  DWORD           dwSize;
+  DWORD           dwFlags;
+  DWORD           dwBufferBytes;
+  DWORD           dwReserved;
+  LPWAVEFORMATEX  lpwfxFormat;
+  DWORD           dwFXCount;
+  LPDSCEFFECTDESC lpDSCFXDesc;
+} DSCBUFFERDESC, *LPDSCBUFFERDESC;
+typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC;
+
+typedef struct _DSCCAPS
+{
+  DWORD dwSize;
+  DWORD dwFlags;
+  DWORD dwFormats;
+  DWORD dwChannels;
+} DSCCAPS, *LPDSCCAPS;
+typedef const DSCCAPS *LPCDSCCAPS;
+
+typedef struct _DSCBCAPS
+{
+  DWORD dwSize;
+  DWORD dwFlags;
+  DWORD dwBufferBytes;
+  DWORD dwReserved;
+} DSCBCAPS, *LPDSCBCAPS;
+typedef const DSCBCAPS *LPCDSCBCAPS;
+
+#define DSCCAPS_EMULDRIVER          DSCAPS_EMULDRIVER
+#define DSCCAPS_CERTIFIED           DSCAPS_CERTIFIED
+#define DSCCAPS_MULTIPLECAPTURE     0x00000001
+
+#define DSCBCAPS_WAVEMAPPED         0x80000000
+#define DSCBCAPS_CTRLFX             0x00000200
+
+#define DSCBLOCK_ENTIREBUFFER       0x00000001
+#define DSCBSTART_LOOPING           0x00000001
+#define DSCBPN_OFFSET_STOP          0xffffffff
+
+#define DSCBSTATUS_CAPTURING        0x00000001
+#define DSCBSTATUS_LOOPING          0x00000002
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPCWSTR,LPCWSTR,LPVOID);
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPCSTR,LPCSTR,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDSENUMCALLBACK)
+
+extern HRESULT WINAPI DirectSoundCreate(LPCGUID lpGUID,LPDIRECTSOUND *ppDS,LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID);
+extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID);
+#define DirectSoundEnumerate WINELIB_NAME_AW(DirectSoundEnumerate)
+extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID);
+extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID);
+#define DirectSoundCaptureEnumerate WINELIB_NAME_AW(DirectSoundCaptureEnumerate)
+
+extern HRESULT WINAPI DirectSoundCreate8(LPCGUID lpGUID,LPDIRECTSOUND8 *ppDS8,LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice,
+    LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, DWORD dwLevel,
+    LPDIRECTSOUNDFULLDUPLEX *ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter);
+#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate
+extern HRESULT WINAPI GetDeviceID(LPCGUID lpGuidSrc, LPGUID lpGuidDest);
+
+
+/*****************************************************************************
+ * IDirectSound interface
+ */
+#define INTERFACE IDirectSound
+DECLARE_INTERFACE_(IDirectSound,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSound methods ***/
+    STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE;
+    STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE;
+    STDMETHOD(Compact)(THIS) PURE;
+    STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE;
+    STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE;
+    STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSound_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSound methods ***/
+#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
+#define IDirectSound_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
+#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectSound_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectSound_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)
+#define IDirectSound_SetSpeakerConfig(p,a)       (p)->lpVtbl->SetSpeakerConfig(p,a)
+#define IDirectSound_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound_AddRef(p)             (p)->AddRef()
+#define IDirectSound_Release(p)            (p)->Release()
+/*** IDirectSound methods ***/
+#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->CreateSoundBuffer(a,b,c)
+#define IDirectSound_GetCaps(p,a)                (p)->GetCaps(a)
+#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)
+#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectSound_Compact(p)                  (p)->Compact()
+#define IDirectSound_GetSpeakerConfig(p,a)       (p)->GetSpeakerConfig(a)
+#define IDirectSound_SetSpeakerConfig(p,a)       (p)->SetSpeakerConfig(a)
+#define IDirectSound_Initialize(p,a)             (p)->Initialize(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSound8 interface
+ */
+#define INTERFACE IDirectSound8
+DECLARE_INTERFACE_(IDirectSound8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSound8 methods ***/
+    STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE;
+    STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE;
+    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE;
+    STDMETHOD(Compact)(THIS) PURE;
+    STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE;
+    STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE;
+    STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE;
+    STDMETHOD(VerifyCertification)(THIS_ LPDWORD pdwCertified) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound8_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSound8_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSound methods ***/
+#define IDirectSound8_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
+#define IDirectSound8_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
+#define IDirectSound8_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectSound8_Compact(p)                  (p)->lpVtbl->Compact(p)
+#define IDirectSound8_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)
+#define IDirectSound8_SetSpeakerConfig(p,a)       (p)->lpVtbl->SetSpeakerConfig(p,a)
+#define IDirectSound8_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
+/*** IDirectSound8 methods ***/
+#define IDirectSound8_VerifyCertification(p,a)    (p)->lpVtbl->VerifyCertification(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound8_AddRef(p)             (p)->AddRef()
+#define IDirectSound8_Release(p)            (p)->Release()
+/*** IDirectSound methods ***/
+#define IDirectSound8_CreateSoundBuffer(p,a,b,c)  (p)->CreateSoundBuffer(a,b,c)
+#define IDirectSound8_GetCaps(p,a)                (p)->GetCaps(a)
+#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)
+#define IDirectSound8_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)
+#define IDirectSound8_Compact(p)                  (p)->Compact()
+#define IDirectSound8_GetSpeakerConfig(p,a)       (p)->GetSpeakerConfig(a)
+#define IDirectSound8_SetSpeakerConfig(p,a)       (p)->SetSpeakerConfig(a)
+#define IDirectSound8_Initialize(p,a)             (p)->Initialize(a)
+/*** IDirectSound8 methods ***/
+#define IDirectSound8_VerifyCertification(p,a)    (p)->VerifyCertification(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSoundBuffer interface
+ */
+#define INTERFACE IDirectSoundBuffer
+DECLARE_INTERFACE_(IDirectSoundBuffer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundBuffer methods ***/
+    STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE;
+    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+    STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE;
+    STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE;
+    STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE;
+    STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+    STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE;
+    STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE;
+    STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;
+    STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE;
+    STDMETHOD(SetPan)(THIS_ LONG lPan) PURE;
+    STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;
+    STDMETHOD(Stop)(THIS) PURE;
+    STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE;
+    STDMETHOD(Restore)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSoundBuffer_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)   (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundBuffer_GetFormat(p,a,b,c)          (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundBuffer_GetVolume(p,a)              (p)->lpVtbl->GetVolume(p,a)
+#define IDirectSoundBuffer_GetPan(p,a)                 (p)->lpVtbl->GetPan(p,a)
+#define IDirectSoundBuffer_GetFrequency(p,a)           (p)->lpVtbl->GetFrequency(p,a)
+#define IDirectSoundBuffer_GetStatus(p,a)              (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundBuffer_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)       (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundBuffer_Play(p,a,b,c)               (p)->lpVtbl->Play(p,a,b,c)
+#define IDirectSoundBuffer_SetCurrentPosition(p,a)     (p)->lpVtbl->SetCurrentPosition(p,a)
+#define IDirectSoundBuffer_SetFormat(p,a)              (p)->lpVtbl->SetFormat(p,a)
+#define IDirectSoundBuffer_SetVolume(p,a)              (p)->lpVtbl->SetVolume(p,a)
+#define IDirectSoundBuffer_SetPan(p,a)                 (p)->lpVtbl->SetPan(p,a)
+#define IDirectSoundBuffer_SetFrequency(p,a)           (p)->lpVtbl->SetFrequency(p,a)
+#define IDirectSoundBuffer_Stop(p)                     (p)->lpVtbl->Stop(p)
+#define IDirectSoundBuffer_Unlock(p,a,b,c,d)           (p)->lpVtbl->Unlock(p,a,b,c,d)
+#define IDirectSoundBuffer_Restore(p)                  (p)->lpVtbl->Restore(p)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundBuffer_AddRef(p)             (p)->AddRef()
+#define IDirectSoundBuffer_Release(p)            (p)->Release()
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer_GetCaps(p,a)                (p)->GetCaps(a)
+#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)   (p)->GetCurrentPosition(a,b)
+#define IDirectSoundBuffer_GetFormat(p,a,b,c)          (p)->GetFormat(a,b,c)
+#define IDirectSoundBuffer_GetVolume(p,a)              (p)->GetVolume(a)
+#define IDirectSoundBuffer_GetPan(p,a)                 (p)->GetPan(a)
+#define IDirectSoundBuffer_GetFrequency(p,a)           (p)->GetFrequency(a)
+#define IDirectSoundBuffer_GetStatus(p,a)              (p)->GetStatus(a)
+#define IDirectSoundBuffer_Initialize(p,a,b)           (p)->Initialize(a,b)
+#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)       (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundBuffer_Play(p,a,b,c)               (p)->Play(a,b,c)
+#define IDirectSoundBuffer_SetCurrentPosition(p,a)     (p)->SetCurrentPosition(a)
+#define IDirectSoundBuffer_SetFormat(p,a)              (p)->SetFormat(a)
+#define IDirectSoundBuffer_SetVolume(p,a)              (p)->SetVolume(a)
+#define IDirectSoundBuffer_SetPan(p,a)                 (p)->SetPan(a)
+#define IDirectSoundBuffer_SetFrequency(p,a)           (p)->SetFrequency(a)
+#define IDirectSoundBuffer_Stop(p)                     (p)->Stop()
+#define IDirectSoundBuffer_Unlock(p,a,b,c,d)           (p)->Unlock(a,b,c,d)
+#define IDirectSoundBuffer_Restore(p)                  (p)->Restore()
+#endif
+
+
+/*****************************************************************************
+ * IDirectSoundBuffer8 interface
+ */
+#define INTERFACE IDirectSoundBuffer8
+DECLARE_INTERFACE_(IDirectSoundBuffer8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundBuffer8 methods ***/
+    STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE;
+    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+    STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE;
+    STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE;
+    STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE;
+    STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+    STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE;
+    STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE;
+    STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;
+    STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE;
+    STDMETHOD(SetPan)(THIS_ LONG lPan) PURE;
+    STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;
+    STDMETHOD(Stop)(THIS) PURE;
+    STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE;
+    STDMETHOD(Restore)(THIS) PURE;
+    STDMETHOD(SetFX)(THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE;
+    STDMETHOD(AcquireResources)(THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE;
+    STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundBuffer8_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSoundBuffer8_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer8_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b)   (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundBuffer8_GetFormat(p,a,b,c)          (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundBuffer8_GetVolume(p,a)              (p)->lpVtbl->GetVolume(p,a)
+#define IDirectSoundBuffer8_GetPan(p,a)                 (p)->lpVtbl->GetPan(p,a)
+#define IDirectSoundBuffer8_GetFrequency(p,a)           (p)->lpVtbl->GetFrequency(p,a)
+#define IDirectSoundBuffer8_GetStatus(p,a)              (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundBuffer8_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g)       (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundBuffer8_Play(p,a,b,c)               (p)->lpVtbl->Play(p,a,b,c)
+#define IDirectSoundBuffer8_SetCurrentPosition(p,a)     (p)->lpVtbl->SetCurrentPosition(p,a)
+#define IDirectSoundBuffer8_SetFormat(p,a)              (p)->lpVtbl->SetFormat(p,a)
+#define IDirectSoundBuffer8_SetVolume(p,a)              (p)->lpVtbl->SetVolume(p,a)
+#define IDirectSoundBuffer8_SetPan(p,a)                 (p)->lpVtbl->SetPan(p,a)
+#define IDirectSoundBuffer8_SetFrequency(p,a)           (p)->lpVtbl->SetFrequency(p,a)
+#define IDirectSoundBuffer8_Stop(p)                     (p)->lpVtbl->Stop(p)
+#define IDirectSoundBuffer8_Unlock(p,a,b,c,d)           (p)->lpVtbl->Unlock(p,a,b,c,d)
+#define IDirectSoundBuffer8_Restore(p)                  (p)->lpVtbl->Restore(p)
+/*** IDirectSoundBuffer8 methods ***/
+#define IDirectSoundBuffer8_SetFX(p,a,b,c)              (p)->lpVtbl->SetFX(p,a,b,c)
+#define IDirectSoundBuffer8_AcquireResources(p,a,b,c)   (p)->lpVtbl->AcquireResources(p,a,b,c)
+#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d)  (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundBuffer8_AddRef(p)             (p)->AddRef()
+#define IDirectSoundBuffer8_Release(p)            (p)->Release()
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer8_GetCaps(p,a)                (p)->GetCaps(a)
+#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b)   (p)->GetCurrentPosition(a,b)
+#define IDirectSoundBuffer8_GetFormat(p,a,b,c)          (p)->GetFormat(a,b,c)
+#define IDirectSoundBuffer8_GetVolume(p,a)              (p)->GetVolume(a)
+#define IDirectSoundBuffer8_GetPan(p,a)                 (p)->GetPan(a)
+#define IDirectSoundBuffer8_GetFrequency(p,a)           (p)->GetFrequency(a)
+#define IDirectSoundBuffer8_GetStatus(p,a)              (p)->GetStatus(a)
+#define IDirectSoundBuffer8_Initialize(p,a,b)           (p)->Initialize(a,b)
+#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g)       (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundBuffer8_Play(p,a,b,c)               (p)->Play(a,b,c)
+#define IDirectSoundBuffer8_SetCurrentPosition(p,a)     (p)->SetCurrentPosition(a)
+#define IDirectSoundBuffer8_SetFormat(p,a)              (p)->SetFormat(a)
+#define IDirectSoundBuffer8_SetVolume(p,a)              (p)->SetVolume(a)
+#define IDirectSoundBuffer8_SetPan(p,a)                 (p)->SetPan(a)
+#define IDirectSoundBuffer8_SetFrequency(p,a)           (p)->SetFrequency(a)
+#define IDirectSoundBuffer8_Stop(p)                     (p)->Stop()
+#define IDirectSoundBuffer8_Unlock(p,a,b,c,d)           (p)->Unlock(a,b,c,d)
+#define IDirectSoundBuffer8_Restore(p)                  (p)->Restore()
+/*** IDirectSoundBuffer8 methods ***/
+#define IDirectSoundBuffer8_SetFX(p,a,b,c)              (p)->SetFX(a,b,c)
+#define IDirectSoundBuffer8_AcquireResources(p,a,b,c)   (p)->AcquireResources(a,b,c)
+#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d)  (p)->GetObjectInPath(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSoundCapture interface
+ */
+#define INTERFACE IDirectSoundCapture
+DECLARE_INTERFACE_(IDirectSoundCapture,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundCapture methods ***/
+    STDMETHOD(CreateCaptureBuffer)(THIS_ LPCDSCBUFFERDESC lpcDSCBufferDesc,LPDIRECTSOUNDCAPTUREBUFFER *lplpDSCaptureBuffer, LPUNKNOWN pUnk) PURE;
+    STDMETHOD(GetCaps)(THIS_ LPDSCCAPS lpDSCCaps) PURE;
+    STDMETHOD(Initialize)(THIS_ LPCGUID lpcGUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundCapture_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundCapture_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirectSoundCapture_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirectSoundCapture methods ***/
+#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c)
+#define IDirectSoundCapture_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCapture_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundCapture_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirectSoundCapture_AddRef(p)                    (p)->AddRef()
+#define IDirectSoundCapture_Release(p)                   (p)->Release()
+/*** IDirectSoundCapture methods ***/
+#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c)
+#define IDirectSoundCapture_GetCaps(p,a)                 (p)->GetCaps(a)
+#define IDirectSoundCapture_Initialize(p,a)              (p)->Initialize(a)
+#endif
+
+/*****************************************************************************
+ * IDirectSoundCaptureBuffer interface
+ */
+#define INTERFACE IDirectSoundCaptureBuffer
+DECLARE_INTERFACE_(IDirectSoundCaptureBuffer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundCaptureBuffer methods ***/
+    STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE;
+    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE;
+    STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE;
+    STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(Stop)(THIS) PURE;
+    STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)     (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundCaptureBuffer_AddRef(p)                 (p)->lpVtbl->AddRef(p)
+#define IDirectSoundCaptureBuffer_Release(p)                (p)->lpVtbl->Release(p)
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer_GetCaps(p,a)              (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)        (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundCaptureBuffer_GetStatus(p,a)            (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundCaptureBuffer_Initialize(p,a,b)         (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)     (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer_Start(p,a)                (p)->lpVtbl->Start(p,a)
+#define IDirectSoundCaptureBuffer_Stop(p)                   (p)->lpVtbl->Stop(p)
+#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)         (p)->lpVtbl->Unlock(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)     (p)->QueryInterface(a,b)
+#define IDirectSoundCaptureBuffer_AddRef(p)                 (p)->AddRef()
+#define IDirectSoundCaptureBuffer_Release(p)                (p)->Release()
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer_GetCaps(p,a)              (p)->GetCaps(a)
+#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)        (p)->GetFormat(a,b,c)
+#define IDirectSoundCaptureBuffer_GetStatus(p,a)            (p)->GetStatus(a)
+#define IDirectSoundCaptureBuffer_Initialize(p,a,b)         (p)->Initialize(a,b)
+#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)     (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer_Start(p,a)                (p)->Start(a)
+#define IDirectSoundCaptureBuffer_Stop(p)                   (p)->Stop()
+#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)         (p)->Unlock(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirectSoundCaptureBuffer8 interface
+ */
+#define INTERFACE IDirectSoundCaptureBuffer8
+DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8,IDirectSoundCaptureBuffer)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundCaptureBuffer methods ***/
+    STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE;
+    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE;
+    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE;
+    STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE;
+    STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;
+    STDMETHOD(Stop)(THIS) PURE;
+    STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE;
+    /*** IDirectSoundCaptureBuffer8 methods ***/
+    STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;
+    STDMETHOD(GetFXStatus)(THIS_ DWORD dwFXCount, LPDWORD pdwFXStatus) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundCaptureBuffer8_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirectSoundCaptureBuffer8_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer8_GetCaps(p,a)               (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b)  (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c)         (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundCaptureBuffer8_GetStatus(p,a)             (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundCaptureBuffer8_Initialize(p,a,b)          (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g)      (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer8_Start(p,a)                 (p)->lpVtbl->Start(p,a)
+#define IDirectSoundCaptureBuffer8_Stop(p)                    (p)->lpVtbl->Stop(p)
+#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d)          (p)->lpVtbl->Unlock(p,a,b,c,d)
+/*** IDirectSoundCaptureBuffer8 methods ***/
+#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)
+#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b)         (p)->lpVtbl->GetFXStatus(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
+#define IDirectSoundCaptureBuffer8_AddRef(p)                  (p)->AddRef()
+#define IDirectSoundCaptureBuffer8_Release(p)                 (p)->Release()
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer8_GetCaps(p,a)               (p)->GetCaps(a)
+#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b)  (p)->GetCurrentPosition(a,b)
+#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c)         (p)->GetFormat(a,b,c)
+#define IDirectSoundCaptureBuffer8_GetStatus(p,a)             (p)->GetStatus(a)
+#define IDirectSoundCaptureBuffer8_Initialize(p,a,b)          (p)->Initialize(a,b)
+#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g)      (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer8_Start(p,a)                 (p)->Start(a)
+#define IDirectSoundCaptureBuffer8_Stop(p)                    (p)->Stop()
+#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d)          (p)->Unlock(a,b,c,d)
+/*** IDirectSoundCaptureBuffer8 methods ***/
+#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d)
+#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b)         (p)->GetFXStatus(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectSoundNotify interface
+ */
+#define WINE_NOBUFFER                   0x80000000
+
+#define DSBPN_OFFSETSTOP		-1
+
+#define INTERFACE IDirectSoundNotify
+DECLARE_INTERFACE_(IDirectSoundNotify,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundNotify methods ***/
+    STDMETHOD(SetNotificationPositions)(THIS_ DWORD cPositionNotifies, LPCDSBPOSITIONNOTIFY lpcPositionNotifies) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundNotify_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSoundNotify_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSoundNotify methods ***/
+#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundNotify_AddRef(p)             (p)->AddRef()
+#define IDirectSoundNotify_Release(p)            (p)->Release()
+/*** IDirectSoundNotify methods ***/
+#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSound3DListener interface
+ */
+#define DS3DMODE_NORMAL             0x00000000
+#define DS3DMODE_HEADRELATIVE       0x00000001
+#define DS3DMODE_DISABLE            0x00000002
+
+#define DS3D_IMMEDIATE              0x00000000
+#define DS3D_DEFERRED               0x00000001
+
+#define DS3D_MINDISTANCEFACTOR      FLT_MIN
+#define DS3D_MAXDISTANCEFACTOR      FLT_MAX
+#define DS3D_DEFAULTDISTANCEFACTOR  1.0f
+
+#define DS3D_MINROLLOFFFACTOR       0.0f
+#define DS3D_MAXROLLOFFFACTOR       10.0f
+#define DS3D_DEFAULTROLLOFFFACTOR   1.0f
+
+#define DS3D_MINDOPPLERFACTOR       0.0f
+#define DS3D_MAXDOPPLERFACTOR       10.0f
+#define DS3D_DEFAULTDOPPLERFACTOR   1.0f
+
+#define DS3D_DEFAULTMINDISTANCE     1.0f
+#define DS3D_DEFAULTMAXDISTANCE     1000000000.0f
+
+#define DS3D_MINCONEANGLE           0
+#define DS3D_MAXCONEANGLE           360
+#define DS3D_DEFAULTCONEANGLE       360
+
+#define DS3D_DEFAULTCONEOUTSIDEVOLUME   DSBVOLUME_MAX
+
+typedef struct _DS3DLISTENER {
+	DWORD				dwSize;
+	D3DVECTOR			vPosition;
+	D3DVECTOR			vVelocity;
+	D3DVECTOR			vOrientFront;
+	D3DVECTOR			vOrientTop;
+	D3DVALUE			flDistanceFactor;
+	D3DVALUE			flRolloffFactor;
+	D3DVALUE			flDopplerFactor;
+} DS3DLISTENER, *LPDS3DLISTENER;
+
+typedef const DS3DLISTENER *LPCDS3DLISTENER;
+
+#define INTERFACE IDirectSound3DListener
+DECLARE_INTERFACE_(IDirectSound3DListener,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSound3DListener methods ***/
+    STDMETHOD(GetAllParameters)(THIS_ LPDS3DLISTENER lpListener) PURE;
+    STDMETHOD(GetDistanceFactor)(THIS_ LPD3DVALUE lpflDistanceFactor) PURE;
+    STDMETHOD(GetDopplerFactor)(THIS_ LPD3DVALUE lpflDopplerFactor) PURE;
+    STDMETHOD(GetOrientation)(THIS_ LPD3DVECTOR lpvOrientFront, LPD3DVECTOR lpvOrientTop) PURE;
+    STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE;
+    STDMETHOD(GetRolloffFactor)(THIS_ LPD3DVALUE lpflRolloffFactor) PURE;
+    STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE;
+    STDMETHOD(SetAllParameters)(THIS_ LPCDS3DLISTENER lpcListener, DWORD dwApply) PURE;
+    STDMETHOD(SetDistanceFactor)(THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE;
+    STDMETHOD(SetDopplerFactor)(THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE;
+    STDMETHOD(SetOrientation)(THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE;
+    STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+    STDMETHOD(SetRolloffFactor)(THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE;
+    STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+    STDMETHOD(CommitDeferredSettings)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound3DListener_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSound3DListener_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSound3DListener methods ***/
+#define IDirectSound3DListener_GetAllParameters(p,a)           (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSound3DListener_GetDistanceFactor(p,a)          (p)->lpVtbl->GetDistanceFactor(p,a)
+#define IDirectSound3DListener_GetDopplerFactor(p,a)           (p)->lpVtbl->GetDopplerFactor(p,a)
+#define IDirectSound3DListener_GetOrientation(p,a,b)           (p)->lpVtbl->GetOrientation(p,a,b)
+#define IDirectSound3DListener_GetPosition(p,a)                (p)->lpVtbl->GetPosition(p,a)
+#define IDirectSound3DListener_GetRolloffFactor(p,a)           (p)->lpVtbl->GetRolloffFactor(p,a)
+#define IDirectSound3DListener_GetVelocity(p,a)                (p)->lpVtbl->GetVelocity(p,a)
+#define IDirectSound3DListener_SetAllParameters(p,a,b)         (p)->lpVtbl->SetAllParameters(p,a,b)
+#define IDirectSound3DListener_SetDistanceFactor(p,a,b)        (p)->lpVtbl->SetDistanceFactor(p,a,b)
+#define IDirectSound3DListener_SetDopplerFactor(p,a,b)         (p)->lpVtbl->SetDopplerFactor(p,a,b)
+#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirectSound3DListener_SetPosition(p,a,b,c,d)          (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirectSound3DListener_SetRolloffFactor(p,a,b)         (p)->lpVtbl->SetRolloffFactor(p,a,b)
+#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)          (p)->lpVtbl->SetVelocity(p,a,b,c,d)
+#define IDirectSound3DListener_CommitDeferredSettings(p)       (p)->lpVtbl->CommitDeferredSettings(p)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound3DListener_AddRef(p)             (p)->AddRef()
+#define IDirectSound3DListener_Release(p)            (p)->Release()
+/*** IDirectSound3DListener methods ***/
+#define IDirectSound3DListener_GetAllParameters(p,a)           (p)->GetAllParameters(a)
+#define IDirectSound3DListener_GetDistanceFactor(p,a)          (p)->GetDistanceFactor(a)
+#define IDirectSound3DListener_GetDopplerFactor(p,a)           (p)->GetDopplerFactor(a)
+#define IDirectSound3DListener_GetOrientation(p,a,b)           (p)->GetOrientation(a,b)
+#define IDirectSound3DListener_GetPosition(p,a)                (p)->GetPosition(a)
+#define IDirectSound3DListener_GetRolloffFactor(p,a)           (p)->GetRolloffFactor(a)
+#define IDirectSound3DListener_GetVelocity(p,a)                (p)->GetVelocity(a)
+#define IDirectSound3DListener_SetAllParameters(p,a,b)         (p)->SetAllParameters(a,b)
+#define IDirectSound3DListener_SetDistanceFactor(p,a,b)        (p)->SetDistanceFactor(a,b)
+#define IDirectSound3DListener_SetDopplerFactor(p,a,b)         (p)->SetDopplerFactor(a,b)
+#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirectSound3DListener_SetPosition(p,a,b,c,d)          (p)->SetPosition(a,b,c,d)
+#define IDirectSound3DListener_SetRolloffFactor(p,a,b)         (p)->SetRolloffFactor(a,b)
+#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)          (p)->SetVelocity(a,b,c,d)
+#define IDirectSound3DListener_CommitDeferredSettings(p)       (p)->CommitDeferredSettings()
+#endif
+
+
+/*****************************************************************************
+ * IDirectSound3DBuffer interface
+ */
+typedef struct  _DS3DBUFFER {
+	DWORD				dwSize;
+	D3DVECTOR			vPosition;
+	D3DVECTOR			vVelocity;
+	DWORD				dwInsideConeAngle;
+	DWORD				dwOutsideConeAngle;
+	D3DVECTOR			vConeOrientation;
+	LONG				lConeOutsideVolume;
+	D3DVALUE			flMinDistance;
+	D3DVALUE			flMaxDistance;
+	DWORD				dwMode;
+} DS3DBUFFER, *LPDS3DBUFFER;
+
+typedef const DS3DBUFFER *LPCDS3DBUFFER;
+
+#define INTERFACE IDirectSound3DBuffer
+DECLARE_INTERFACE_(IDirectSound3DBuffer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSound3DBuffer methods ***/
+    STDMETHOD(GetAllParameters)(THIS_ LPDS3DBUFFER lpDs3dBuffer) PURE;
+    STDMETHOD(GetConeAngles)(THIS_ LPDWORD lpdwInsideConeAngle, LPDWORD lpdwOutsideConeAngle) PURE;
+    STDMETHOD(GetConeOrientation)(THIS_ LPD3DVECTOR lpvOrientation) PURE;
+    STDMETHOD(GetConeOutsideVolume)(THIS_ LPLONG lplConeOutsideVolume) PURE;
+    STDMETHOD(GetMaxDistance)(THIS_ LPD3DVALUE lpflMaxDistance) PURE;
+    STDMETHOD(GetMinDistance)(THIS_ LPD3DVALUE lpflMinDistance) PURE;
+    STDMETHOD(GetMode)(THIS_ LPDWORD lpwdMode) PURE;
+    STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE;
+    STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE;
+    STDMETHOD(SetAllParameters)(THIS_ LPCDS3DBUFFER lpcDs3dBuffer, DWORD dwApply) PURE;
+    STDMETHOD(SetConeAngles)(THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE;
+    STDMETHOD(SetConeOrientation)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+    STDMETHOD(SetConeOutsideVolume)(THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE;
+    STDMETHOD(SetMaxDistance)(THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE;
+    STDMETHOD(SetMinDistance)(THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE;
+    STDMETHOD(SetMode)(THIS_ DWORD dwMode, DWORD dwApply) PURE;
+    STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+    STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound3DBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectSound3DBuffer_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirectSound3DBuffer methods ***/
+#define IDirectSound3DBuffer_GetAllParameters(p,a)         (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSound3DBuffer_GetConeAngles(p,a,b)          (p)->lpVtbl->GetConeAngles(p,a,b)
+#define IDirectSound3DBuffer_GetConeOrientation(p,a)       (p)->lpVtbl->GetConeOrientation(p,a)
+#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)     (p)->lpVtbl->GetConeOutsideVolume(p,a)
+#define IDirectSound3DBuffer_GetMaxDistance(p,a)           (p)->lpVtbl->GetMaxDistance(p,a)
+#define IDirectSound3DBuffer_GetMinDistance(p,a)           (p)->lpVtbl->GetMinDistance(p,a)
+#define IDirectSound3DBuffer_GetMode(p,a)                  (p)->lpVtbl->GetMode(p,a)
+#define IDirectSound3DBuffer_GetPosition(p,a)              (p)->lpVtbl->GetPosition(p,a)
+#define IDirectSound3DBuffer_GetVelocity(p,a)              (p)->lpVtbl->GetVelocity(p,a)
+#define IDirectSound3DBuffer_SetAllParameters(p,a,b)       (p)->lpVtbl->SetAllParameters(p,a,b)
+#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)        (p)->lpVtbl->SetConeAngles(p,a,b,c)
+#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d)
+#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)   (p)->lpVtbl->SetConeOutsideVolume(p,a,b)
+#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)         (p)->lpVtbl->SetMaxDistance(p,a,b)
+#define IDirectSound3DBuffer_SetMinDistance(p,a,b)         (p)->lpVtbl->SetMinDistance(p,a,b)
+#define IDirectSound3DBuffer_SetMode(p,a,b)                (p)->lpVtbl->SetMode(p,a,b)
+#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)        (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)        (p)->lpVtbl->SetVelocity(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound3DBuffer_AddRef(p)             (p)->AddRef()
+#define IDirectSound3DBuffer_Release(p)            (p)->Release()
+/*** IDirectSound3DBuffer methods ***/
+#define IDirectSound3DBuffer_GetAllParameters(p,a)         (p)->GetAllParameters(a)
+#define IDirectSound3DBuffer_GetConeAngles(p,a,b)          (p)->GetConeAngles(a,b)
+#define IDirectSound3DBuffer_GetConeOrientation(p,a)       (p)->GetConeOrientation(a)
+#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)     (p)->GetConeOutsideVolume(a)
+#define IDirectSound3DBuffer_GetMaxDistance(p,a)           (p)->GetMaxDistance(a)
+#define IDirectSound3DBuffer_GetMinDistance(p,a)           (p)->GetMinDistance(a)
+#define IDirectSound3DBuffer_GetMode(p,a)                  (p)->GetMode(a)
+#define IDirectSound3DBuffer_GetPosition(p,a)              (p)->GetPosition(a)
+#define IDirectSound3DBuffer_GetVelocity(p,a)              (p)->GetVelocity(a)
+#define IDirectSound3DBuffer_SetAllParameters(p,a,b)       (p)->SetAllParameters(a,b)
+#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)        (p)->SetConeAngles(a,b,c)
+#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d)
+#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)   (p)->SetConeOutsideVolume(a,b)
+#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)         (p)->SetMaxDistance(a,b)
+#define IDirectSound3DBuffer_SetMinDistance(p,a,b)         (p)->SetMinDistance(a,b)
+#define IDirectSound3DBuffer_SetMode(p,a,b)                (p)->SetMode(a,b)
+#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)        (p)->SetPosition(a,b,c,d)
+#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)        (p)->SetVelocity(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IKsPropertySet interface
+ */
+#ifndef _IKsPropertySet_
+#define _IKsPropertySet_
+
+typedef struct IKsPropertySet *LPKSPROPERTYSET;
+
+DEFINE_GUID(IID_IKsPropertySet,0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93);
+
+#define KSPROPERTY_SUPPORT_GET	1
+#define KSPROPERTY_SUPPORT_SET	2
+
+#define INTERFACE IKsPropertySet
+DECLARE_INTERFACE_(IKsPropertySet,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IKsPropertySet methods ***/
+    STDMETHOD(Get)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3,ULONG *px4) PURE;
+    STDMETHOD(Set)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3) PURE;
+    STDMETHOD(QuerySupport)(THIS_ REFGUID rgid,ULONG x1,ULONG *px2) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IKsPropertySet_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
+#define IKsPropertySet_AddRef(p)                (p)->lpVtbl->AddRef(p)
+#define IKsPropertySet_Release(p)               (p)->lpVtbl->Release(p)
+/*** IKsPropertySet methods ***/
+#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)     (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)
+#define IKsPropertySet_Set(p,a,b,c,d,e,f)       (p)->lpVtbl->Set(p,a,b,c,d,e,f)
+#define IKsPropertySet_QuerySupport(p,a,b,c)    (p)->lpVtbl->QuerySupport(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IKsPropertySet_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)
+#define IKsPropertySet_AddRef(p)                (p)->AddRef()
+#define IKsPropertySet_Release(p)               (p)->Release()
+/*** IKsPropertySet methods ***/
+#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)     (p)->Get(a,b,c,d,e,f,g)
+#define IKsPropertySet_Set(p,a,b,c,d,e,f)       (p)->Set(a,b,c,d,e,f)
+#define IKsPropertySet_QuerySupport(p,a,b,c)    (p)->QuerySupport(a,b,c)
+#endif
+
+#endif /* _IKsPropertySet_ */
+
+/*****************************************************************************
+ * IDirectSoundFullDuplex interface
+ */
+#define INTERFACE IDirectSoundFullDuplex
+DECLARE_INTERFACE_(IDirectSoundFullDuplex,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectSoundFullDuplex methods ***/
+    STDMETHOD(Initialize)(THIS_ LPCGUID pCaptureGuid,LPCGUID pRendererGuid,LPCDSCBUFFERDESC lpDscBufferDesc,LPCDSBUFFERDESC lpDsBufferDesc,HWND hWnd,DWORD dwLevel,LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundFullDuplex_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundFullDuplex_AddRef(p)                (p)->lpVtbl->AddRef(p)
+#define IDirectSoundFullDuplex_Release(p)               (p)->lpVtbl->Release(p)
+/*** IDirectSoundFullDuplex methods ***/
+#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h)    (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundFullDuplex_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)
+#define IDirectSoundFullDuplex_AddRef(p)                (p)->AddRef()
+#define IDirectSoundFullDuplex_Release(p)               (p)->Release()
+/*** IDirectSoundFullDuplex methods ***/
+#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h)    (p)->Initialize(a,b,c,d,e,f,g,h)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __DSOUND_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h
new file mode 100644
index 0000000..a37e21e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h
@@ -0,0 +1,101 @@
+/*
+ * Directory Services definitions
+ *
+ * Copyright 2005 Paul Vriens
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DSROLE_H
+#define __WINE_DSROLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DSROLE_PRIMARY_DS_RUNNING           0x00000001
+#define DSROLE_PRIMARY_DS_MIXED_MODE        0x00000002
+#define DSROLE_UPGRADE_IN_PROGRESS          0x00000004
+#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT  0x01000000
+
+typedef enum _DSROLE_PRIMARY_DOMAIN_INFO_LEVEL
+{
+    DsRolePrimaryDomainInfoBasic = 1,
+    DsRoleUpgradeStatus,
+    DsRoleOperationState
+} DSROLE_PRIMARY_DOMAIN_INFO_LEVEL;
+
+typedef enum _DSROLE_MACHINE_ROLE
+{
+  DsRole_RoleStandaloneWorkstation = 0,
+  DsRole_RoleMemberWorkstation,
+  DsRole_RoleStandaloneServer,
+  DsRole_RoleMemberServer,
+  DsRole_RoleBackupDomainController,
+  DsRole_RolePrimaryDomainController
+} DSROLE_MACHINE_ROLE;
+
+typedef enum _DSROLE_SERVER_STATE
+{
+  DsRoleServerUnknown = 0,
+  DsRoleServerPrimary,
+  DsRoleServerBackup
+} DSROLE_SERVER_STATE;
+
+typedef enum _DSROLE_OPERATION_STATE
+{
+  DsRoleOperationIdle = 0,
+  DsRoleOperationActive,
+  DsRoleOperationNeedReboot
+} DSROLE_OPERATION_STATE;
+
+typedef struct _DSROLE_PRIMARY_DOMAIN_INFO_BASIC
+{
+    DSROLE_MACHINE_ROLE MachineRole;
+    ULONG Flags;
+    LPWSTR DomainNameFlat;
+    LPWSTR DomainNameDns;
+    LPWSTR DomainForestName;
+    GUID DomainGuid;
+} DSROLE_PRIMARY_DOMAIN_INFO_BASIC, *PDSROLE_PRIMARY_DOMAIN_INFO_BASIC;
+
+typedef struct _DSROLE_UPGRADE_STATUS_INFO
+{
+    ULONG OperationState;
+    DSROLE_SERVER_STATE PreviousServerState;
+} DSROLE_UPGRADE_STATUS_INFO, *PDSROLE_UPGRADE_STATUS_INFO;
+
+typedef struct _DSROLE_OPERATION_STATE_INFO
+{
+    DSROLE_OPERATION_STATE OperationState;
+} DSROLE_OPERATION_STATE_INFO, *PDSROLE_OPERATION_STATE_INFO;
+
+VOID WINAPI DsRoleFreeMemory(IN PVOID Buffer);
+DWORD WINAPI DsRoleGetPrimaryDomainInformation(IN LPCWSTR lpServer OPTIONAL, IN DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, OUT PBYTE *Buffer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DSROLE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h
new file mode 100644
index 0000000..7ff7527
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2008 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DVDMEDIA_H__
+#define __DVDMEDIA_H__
+
+#define AMCONTROL_USED 0x00000001
+#define AMCONTROL_PAD_TO_4x3 0x00000002
+#define AMCONTROL_PAD_TO_16x9 0x00000004
+
+typedef struct tagVIDEOINFOHEADER2 {
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+    DWORD dwInterlaceFlags;
+    DWORD dwCopyProtectFlags;
+    DWORD dwPictAspectRatioX;
+    DWORD dwPictAspectRatioY;
+    union {
+        DWORD dwControlFlags;
+        DWORD dwReserved1;
+    } DUMMYUNIONNAME;
+    DWORD dwReserved2;
+    BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER2;
+
+typedef struct tagMPEG2VIDEOINFO {
+    VIDEOINFOHEADER2 hdr;
+    DWORD dwStartTimeCode;
+    DWORD cbSequenceHeader;
+    DWORD dwProfile;
+    DWORD dwLevel;
+    DWORD dwFlags;
+    DWORD dwSequenceHeader[1];
+} MPEG2VIDEOINFO;
+
+#endif /* __DVDMEDIA_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h
new file mode 100644
index 0000000..48a5e60
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h
@@ -0,0 +1,137 @@
+/*
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DWMAPI_H
+#define __WINE_DWMAPI_H
+
+#include "wtypes.h"
+#include "uxtheme.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef DWMAPI
+# define DWMAPI        STDAPI
+# define DWMAPI_(type) STDAPI_(type)
+#endif
+
+DECLARE_HANDLE(HTHUMBNAIL);
+typedef HTHUMBNAIL *PHTHUMBNAIL;
+
+#include <pshpack1.h>
+
+typedef ULONGLONG DWM_FRAME_COUNT;
+typedef ULONGLONG QPC_TIME;
+
+typedef struct _UNSIGNED_RATIO {
+    UINT32 uiNumerator;
+    UINT32 uiDenominator;
+} UNSIGNED_RATIO;
+
+typedef struct _DWM_TIMING_INFO {
+    UINT32 cbSize;
+    UNSIGNED_RATIO rateRefresh;
+    QPC_TIME qpcRefreshPeriod;
+    UNSIGNED_RATIO rateCompose;
+    QPC_TIME qpcVBlank;
+    DWM_FRAME_COUNT cRefresh;
+    UINT cDXRefresh;
+    QPC_TIME qpcCompose;
+    DWM_FRAME_COUNT cFrame;
+    UINT cDXPresent;
+    DWM_FRAME_COUNT cRefreshFrame;
+    DWM_FRAME_COUNT cFrameSubmitted;
+    UINT cDXPresentSubmitted;
+    DWM_FRAME_COUNT cFrameConfirmed;
+    UINT cDXPresentConfirmed;
+    DWM_FRAME_COUNT cRefreshConfirmed;
+    UINT cDXRefreshConfirmed;
+    DWM_FRAME_COUNT cFramesLate;
+    UINT cFramesOutstanding;
+    DWM_FRAME_COUNT cFrameDisplayed;
+    QPC_TIME qpcFrameDisplayed;
+    DWM_FRAME_COUNT cRefreshFrameDisplayed;
+    DWM_FRAME_COUNT cFrameComplete;
+    QPC_TIME qpcFrameComplete;
+    DWM_FRAME_COUNT cFramePending;
+    QPC_TIME qpcFramePending;
+    DWM_FRAME_COUNT cFramesDisplayed;
+    DWM_FRAME_COUNT cFramesComplete;
+    DWM_FRAME_COUNT cFramesPending;
+    DWM_FRAME_COUNT cFramesAvailable;
+    DWM_FRAME_COUNT cFramesDropped;
+    DWM_FRAME_COUNT cFramesMissed;
+    DWM_FRAME_COUNT cRefreshNextDisplayed;
+    DWM_FRAME_COUNT cRefreshNextPresented;
+    DWM_FRAME_COUNT cRefreshesDisplayed;
+    DWM_FRAME_COUNT cRefreshesPresented;
+    DWM_FRAME_COUNT cRefreshStarted;
+    ULONGLONG cPixelsReceived;
+    ULONGLONG cPixelsDrawn;
+    DWM_FRAME_COUNT cBuffersEmpty;
+} DWM_TIMING_INFO;
+
+typedef struct _MilMatrix3x2D
+{
+    DOUBLE S_11;
+    DOUBLE S_12;
+    DOUBLE S_21;
+    DOUBLE S_22;
+    DOUBLE DX;
+    DOUBLE DY;
+} MilMatrix3x2D;
+
+#include <poppack.h>
+
+#define DWM_BB_ENABLE                 0x00000001
+#define DWM_BB_BLURREGION             0x00000002
+#define DWM_BB_TRANSITIONONMAXIMIZED  0x00000004
+
+typedef struct _DWM_BLURBEHIND
+{
+    DWORD dwFlags;
+    BOOL fEnable;
+    HRGN hRgnBlur;
+    BOOL fTransitionOnMaximized;
+} DWM_BLURBEHIND, *PDWM_BLURBEHIND;
+
+DWMAPI DwmDefWindowProc(HWND, UINT, WPARAM, LPARAM, LRESULT*);
+DWMAPI DwmEnableBlurBehindWindow(HWND, const DWM_BLURBEHIND *);
+DWMAPI DwmEnableComposition(UINT);
+DWMAPI DwmEnableMMCSS(BOOL);
+DWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*);
+DWMAPI DwmGetColorizationColor(DWORD*,BOOL);
+DWMAPI DwmGetCompositionTimingInfo(HWND,DWM_TIMING_INFO*);
+DWMAPI DwmIsCompositionEnabled(BOOL*);
+DWMAPI DwmRegisterThumbnail(HWND, HWND, PHTHUMBNAIL);
+DWMAPI DwmSetWindowAttribute(HWND, DWORD, LPCVOID, DWORD);
+DWMAPI DwmUnregisterThumbnail(HTHUMBNAIL);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_DWMAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl
new file mode 100644
index 0000000..6e684ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl
@@ -0,0 +1,1420 @@
+/*
+ * Copyright 2012 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "dcommon.h";
+
+interface IDWriteFactory;
+interface IDWriteFontCollection;
+interface IDWriteFontFamily;
+interface IDWriteFontFace;
+interface IDWriteInlineObject;
+
+interface ID2D1SimplifiedGeometrySink;
+typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink;
+
+cpp_quote("#ifndef _WINDEF_")
+/* already defined in windef.h but needed for WIDL */
+typedef void *HMONITOR;
+cpp_quote("#endif /* _WINDEF_ */")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetGlyphIndices")
+cpp_quote("#endif")
+
+typedef enum DWRITE_FACTORY_TYPE
+{
+    DWRITE_FACTORY_TYPE_SHARED,
+    DWRITE_FACTORY_TYPE_ISOLATED
+} DWRITE_FACTORY_TYPE;
+
+typedef enum DWRITE_FONT_FILE_TYPE
+{
+    DWRITE_FONT_FILE_TYPE_UNKNOWN,
+    DWRITE_FONT_FILE_TYPE_CFF,
+    DWRITE_FONT_FILE_TYPE_TRUETYPE,
+    DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION,
+    DWRITE_FONT_FILE_TYPE_TYPE1_PFM,
+    DWRITE_FONT_FILE_TYPE_TYPE1_PFB,
+    DWRITE_FONT_FILE_TYPE_VECTOR,
+    DWRITE_FONT_FILE_TYPE_BITMAP
+} DWRITE_FONT_FILE_TYPE;
+
+typedef enum DWRITE_FONT_FACE_TYPE
+{
+    DWRITE_FONT_FACE_TYPE_CFF,
+    DWRITE_FONT_FACE_TYPE_TRUETYPE,
+    DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION,
+    DWRITE_FONT_FACE_TYPE_TYPE1,
+    DWRITE_FONT_FACE_TYPE_VECTOR,
+    DWRITE_FONT_FACE_TYPE_BITMAP,
+    DWRITE_FONT_FACE_TYPE_UNKNOWN
+} DWRITE_FONT_FACE_TYPE;
+
+typedef enum DWRITE_FONT_WEIGHT
+{
+    DWRITE_FONT_WEIGHT_THIN = 100,
+    DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,
+    DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,
+    DWRITE_FONT_WEIGHT_LIGHT = 300,
+    DWRITE_FONT_WEIGHT_NORMAL = 400,
+    DWRITE_FONT_WEIGHT_REGULAR = 400,
+    DWRITE_FONT_WEIGHT_MEDIUM = 500,
+    DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,
+    DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,
+    DWRITE_FONT_WEIGHT_BOLD = 700,
+    DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,
+    DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,
+    DWRITE_FONT_WEIGHT_BLACK = 900,
+    DWRITE_FONT_WEIGHT_HEAVY = 900,
+    DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,
+    DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950
+} DWRITE_FONT_WEIGHT;
+
+typedef enum DWRITE_FONT_STRETCH
+{
+    DWRITE_FONT_STRETCH_UNDEFINED = 0,
+    DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,
+    DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,
+    DWRITE_FONT_STRETCH_CONDENSED = 3,
+    DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,
+    DWRITE_FONT_STRETCH_NORMAL = 5,
+    DWRITE_FONT_STRETCH_MEDIUM = 5,
+    DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,
+    DWRITE_FONT_STRETCH_EXPANDED = 7,
+    DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,
+    DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9
+} DWRITE_FONT_STRETCH;
+
+typedef enum DWRITE_FONT_STYLE
+{
+    DWRITE_FONT_STYLE_NORMAL,
+    DWRITE_FONT_STYLE_OBLIQUE,
+    DWRITE_FONT_STYLE_ITALIC
+} DWRITE_FONT_STYLE;
+
+typedef enum DWRITE_INFORMATIONAL_STRING_ID
+{
+    DWRITE_INFORMATIONAL_STRING_NONE,
+    DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,
+    DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,
+    DWRITE_INFORMATIONAL_STRING_TRADEMARK,
+    DWRITE_INFORMATIONAL_STRING_MANUFACTURER,
+    DWRITE_INFORMATIONAL_STRING_DESIGNER,
+    DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,
+    DWRITE_INFORMATIONAL_STRING_DESCRIPTION,
+    DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,
+    DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,
+    DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,
+    DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,
+    DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT
+} DWRITE_INFORMATIONAL_STRING_ID;
+
+typedef enum DWRITE_FONT_SIMULATIONS
+{
+    DWRITE_FONT_SIMULATIONS_NONE    = 0x0000,
+    DWRITE_FONT_SIMULATIONS_BOLD    = 0x0001,
+    DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002
+} DWRITE_FONT_SIMULATIONS;
+
+typedef enum DWRITE_PIXEL_GEOMETRY
+{
+    DWRITE_PIXEL_GEOMETRY_FLAT,
+    DWRITE_PIXEL_GEOMETRY_RGB,
+    DWRITE_PIXEL_GEOMETRY_BGR
+} DWRITE_PIXEL_GEOMETRY;
+
+typedef enum DWRITE_RENDERING_MODE
+{
+    DWRITE_RENDERING_MODE_DEFAULT,
+    DWRITE_RENDERING_MODE_ALIASED,
+    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC,
+    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL,
+    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL,
+    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC,
+    DWRITE_RENDERING_MODE_OUTLINE
+} DWRITE_RENDERING_MODE;
+
+typedef enum DWRITE_TEXT_ALIGNMENT
+{
+    DWRITE_TEXT_ALIGNMENT_LEADING,
+    DWRITE_TEXT_ALIGNMENT_TRAILING,
+    DWRITE_TEXT_ALIGNMENT_CENTER,
+    DWRITE_TEXT_ALIGNMENT_JUSTIFIED
+} DWRITE_TEXT_ALIGNMENT;
+
+typedef enum DWRITE_PARAGRAPH_ALIGNMENT
+{
+    DWRITE_PARAGRAPH_ALIGNMENT_NEAR,
+    DWRITE_PARAGRAPH_ALIGNMENT_FAR,
+    DWRITE_PARAGRAPH_ALIGNMENT_CENTER
+} DWRITE_PARAGRAPH_ALIGNMENT;
+
+typedef enum DWRITE_WORD_WRAPPING
+{
+    DWRITE_WORD_WRAPPING_WRAP,
+    DWRITE_WORD_WRAPPING_NO_WRAP
+} DWRITE_WORD_WRAPPING;
+
+typedef enum DWRITE_READING_DIRECTION
+{
+    DWRITE_READING_DIRECTION_LEFT_TO_RIGHT,
+    DWRITE_READING_DIRECTION_RIGHT_TO_LEFT
+} DWRITE_READING_DIRECTION;
+
+typedef enum DWRITE_FLOW_DIRECTION
+{
+    DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM
+} DWRITE_FLOW_DIRECTION;
+
+typedef enum DWRITE_TRIMMING_GRANULARITY
+{
+    DWRITE_TRIMMING_GRANULARITY_NONE,
+    DWRITE_TRIMMING_GRANULARITY_CHARACTER,
+    DWRITE_TRIMMING_GRANULARITY_WORD
+} DWRITE_TRIMMING_GRANULARITY;
+
+typedef enum DWRITE_BREAK_CONDITION
+{
+    DWRITE_BREAK_CONDITION_NEUTRAL,
+    DWRITE_BREAK_CONDITION_CAN_BREAK,
+    DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,
+    DWRITE_BREAK_CONDITION_MUST_BREAK
+} DWRITE_BREAK_CONDITION;
+
+typedef enum DWRITE_LINE_SPACING_METHOD
+{
+    DWRITE_LINE_SPACING_METHOD_DEFAULT,
+    DWRITE_LINE_SPACING_METHOD_UNIFORM
+} DWRITE_LINE_SPACING_METHOD;
+
+typedef enum DWRITE_FONT_FEATURE_TAG
+{
+    DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS           = 0x63726661, /* 'afrc' */
+    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS   = 0x63703263, /* 'c2pc' */
+    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS    = 0x63733263, /* 'c2sc' */
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES           = 0x746c6163, /* 'calt' */
+    DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS            = 0x65736163, /* 'case' */
+    DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, /* 'ccmp' */
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES            = 0x67696c63, /* 'clig' */
+    DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING                 = 0x70737063, /* 'cpsp' */
+    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH                = 0x68777363, /* 'cswh' */
+    DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING             = 0x73727563, /* 'curs' */
+    DWRITE_FONT_FEATURE_TAG_DEFAULT                         = 0x746c6664, /* 'dflt' */
+    DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES         = 0x67696c64, /* 'dlig' */
+    DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS                    = 0x74707865, /* 'expt' */
+    DWRITE_FONT_FEATURE_TAG_FRACTIONS                       = 0x63617266, /* 'frac' */
+    DWRITE_FONT_FEATURE_TAG_FULL_WIDTH                      = 0x64697766, /* 'fwid' */
+    DWRITE_FONT_FEATURE_TAG_HALF_FORMS                      = 0x666c6168, /* 'half' */
+    DWRITE_FONT_FEATURE_TAG_HALANT_FORMS                    = 0x6e6c6168, /* 'haln' */
+    DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH            = 0x746c6168, /* 'halt' */
+    DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS                = 0x74736968, /* 'hist' */
+    DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES      = 0x616e6b68, /* 'hkna' */
+    DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES            = 0x67696c68, /* 'hlig' */
+    DWRITE_FONT_FEATURE_TAG_HALF_WIDTH                      = 0x64697768, /* 'hwid' */
+    DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS                = 0x6f6a6f68, /* 'hojo' */
+    DWRITE_FONT_FEATURE_TAG_JIS04_FORMS                     = 0x3430706a, /* 'jp04' */
+    DWRITE_FONT_FEATURE_TAG_JIS78_FORMS                     = 0x3837706a, /* 'jp78' */
+    DWRITE_FONT_FEATURE_TAG_JIS83_FORMS                     = 0x3338706a, /* 'jp83' */
+    DWRITE_FONT_FEATURE_TAG_JIS90_FORMS                     = 0x3039706a, /* 'jp90' */
+    DWRITE_FONT_FEATURE_TAG_KERNING                         = 0x6e72656b, /* 'kern' */
+    DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES              = 0x6167696c, /* 'liga' */
+    DWRITE_FONT_FEATURE_TAG_LINING_FIGURES                  = 0x6d756e6c, /* 'lnum' */
+    DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS                 = 0x6c636f6c, /* 'locl' */
+    DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING                = 0x6b72616d, /* 'mark' */
+    DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK              = 0x6b72676d, /* 'mgrk' */
+    DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING        = 0x6b6d6b6d, /* 'mkmk' */
+    DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS      = 0x746c616e, /* 'nalt' */
+    DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS                 = 0x6b636c6e, /* 'nlck' */
+    DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES               = 0x6d756e6f, /* 'onum' */
+    DWRITE_FONT_FEATURE_TAG_ORDINALS                        = 0x6e64726f, /* 'ordn' */
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH    = 0x746c6170, /* 'palt' */
+    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS                 = 0x70616370, /* 'pcap' */
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES            = 0x6d756e70, /* 'pnum' */
+    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS             = 0x64697770, /* 'pwid' */
+    DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS                  = 0x64697771, /* 'qwid' */
+    DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES              = 0x67696c72, /* 'rlig' */
+    DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS             = 0x79627572, /* 'ruby' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES            = 0x746c6173, /* 'salt' */
+    DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS            = 0x666e6973, /* 'sinf' */
+    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS                  = 0x70636d73, /* 'smcp' */
+    DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS                = 0x6c706d73, /* 'smpl' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1                 = 0x31307373, /* 'ss01' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2                 = 0x32307373, /* 'ss02' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3                 = 0x33307373, /* 'ss03' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4                 = 0x34307373, /* 'ss04' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5                 = 0x35307373, /* 'ss05' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6                 = 0x36307373, /* 'ss06' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7                 = 0x37307373, /* 'ss07' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8                 = 0x38307373, /* 'ss08' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9                 = 0x39307373, /* 'ss09' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10                = 0x30317373, /* 'ss10' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11                = 0x31317373, /* 'ss11' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12                = 0x32317373, /* 'ss12' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13                = 0x33317373, /* 'ss13' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14                = 0x34317373, /* 'ss14' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15                = 0x35317373, /* 'ss15' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16                = 0x36317373, /* 'ss16' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17                = 0x37317373, /* 'ss17' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18                = 0x38317373, /* 'ss18' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19                = 0x39317373, /* 'ss19' */
+    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20                = 0x30327373, /* 'ss20' */
+    DWRITE_FONT_FEATURE_TAG_SUBSCRIPT                       = 0x73627573, /* 'subs' */
+    DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT                     = 0x73707573, /* 'sups' */
+    DWRITE_FONT_FEATURE_TAG_SWASH                           = 0x68737773, /* 'swsh' */
+    DWRITE_FONT_FEATURE_TAG_TITLING                         = 0x6c746974, /* 'titl' */
+    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS          = 0x6d616e74, /* 'tnam' */
+    DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES                 = 0x6d756e74, /* 'tnum' */
+    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS               = 0x64617274, /* 'trad' */
+    DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS                    = 0x64697774, /* 'twid' */
+    DWRITE_FONT_FEATURE_TAG_UNICASE                         = 0x63696e75, /* 'unic' */
+    DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO                    = 0x6f72657a, /* 'zero' */
+} DWRITE_FONT_FEATURE_TAG;
+
+typedef enum DWRITE_SCRIPT_SHAPES
+{
+    DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
+    DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
+} DWRITE_SCRIPT_SHAPES;
+
+typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD
+{
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,
+    DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL
+} DWRITE_NUMBER_SUBSTITUTION_METHOD;
+
+typedef enum DWRITE_TEXTURE_TYPE
+{
+    DWRITE_TEXTURE_ALIASED_1x1,
+    DWRITE_TEXTURE_CLEARTYPE_3x1
+} DWRITE_TEXTURE_TYPE;
+
+typedef struct DWRITE_FONT_METRICS
+{
+    UINT16 designUnitsPerEm;
+    UINT16 ascent;
+    UINT16 descent;
+    INT16 lineGap;
+    UINT16 capHeight;
+    UINT16 xHeight;
+    INT16 underlinePosition;
+    UINT16 underlineThickness;
+    INT16 strikethroughPosition;
+    UINT16 strikethroughThickness;
+} DWRITE_FONT_METRICS;
+
+typedef struct DWRITE_GLYPH_METRICS
+{
+    INT32 leftSideBearing;
+    UINT32 advanceWidth;
+    INT32 rightSideBearing;
+    INT32 topSideBearing;
+    UINT32 advanceHeight;
+    INT32 bottomSideBearing;
+    INT32 verticalOriginY;
+} DWRITE_GLYPH_METRICS;
+
+typedef struct DWRITE_GLYPH_OFFSET
+{
+    FLOAT advanceOffset;
+    FLOAT ascenderOffset;
+} DWRITE_GLYPH_OFFSET;
+
+typedef struct DWRITE_MATRIX
+{
+    FLOAT m11;
+    FLOAT m12;
+    FLOAT m21;
+    FLOAT m22;
+    FLOAT dx;
+    FLOAT dy;
+} DWRITE_MATRIX;
+
+typedef struct DWRITE_TRIMMING
+{
+    DWRITE_TRIMMING_GRANULARITY granularity;
+    UINT32 delimiter;
+    UINT32 delimiterCount;
+} DWRITE_TRIMMING;
+
+typedef struct DWRITE_GLYPH_RUN
+{
+    IDWriteFontFace* fontFace;
+    FLOAT fontEmSize;
+    UINT32 glyphCount;
+    UINT16 const* glyphIndices;
+    FLOAT const* glyphAdvances;
+    DWRITE_GLYPH_OFFSET const* glyphOffsets;
+    BOOL isSideways;
+    UINT32 bidiLevel;
+} DWRITE_GLYPH_RUN;
+
+typedef struct DWRITE_GLYPH_RUN_DESCRIPTION
+{
+    WCHAR const* localeName;
+    WCHAR const* string;
+    UINT32 stringLength;
+    UINT16 const* clusterMap;
+    UINT32 textPosition;
+} DWRITE_GLYPH_RUN_DESCRIPTION;
+
+typedef struct DWRITE_UNDERLINE
+{
+    FLOAT width;
+    FLOAT thickness;
+    FLOAT offset;
+    FLOAT runHeight;
+    DWRITE_READING_DIRECTION readingDirection;
+    DWRITE_FLOW_DIRECTION flowDirection;
+    WCHAR const* localeName;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_UNDERLINE;
+
+typedef struct DWRITE_STRIKETHROUGH
+{
+    FLOAT width;
+    FLOAT thickness;
+    FLOAT offset;
+    DWRITE_READING_DIRECTION readingDirection;
+    DWRITE_FLOW_DIRECTION flowDirection;
+    WCHAR const* localeName;
+    DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_STRIKETHROUGH;
+
+typedef struct DWRITE_INLINE_OBJECT_METRICS
+{
+    FLOAT width;
+    FLOAT height;
+    FLOAT baseline;
+    BOOL  supportsSideways;
+} DWRITE_INLINE_OBJECT_METRICS;
+
+typedef struct DWRITE_OVERHANG_METRICS
+{
+    FLOAT left;
+    FLOAT top;
+    FLOAT right;
+    FLOAT bottom;
+} DWRITE_OVERHANG_METRICS;
+
+typedef struct DWRITE_FONT_FEATURE
+{
+    DWRITE_FONT_FEATURE_TAG nameTag;
+    UINT32 parameter;
+} DWRITE_FONT_FEATURE;
+
+typedef struct DWRITE_TEXT_RANGE
+{
+    UINT32 startPosition;
+    UINT32 length;
+} DWRITE_TEXT_RANGE;
+
+typedef struct DWRITE_LINE_METRICS
+{
+    UINT32 length;
+    UINT32 trailingWhitespaceLength;
+    UINT32 newlineLength;
+    FLOAT height;
+    FLOAT baseline;
+    BOOL isTrimmed;
+} DWRITE_LINE_METRICS;
+
+typedef struct DWRITE_TEXT_METRICS
+{
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT widthIncludingTrailingWhitespace;
+    FLOAT height;
+    FLOAT layoutWidth;
+    FLOAT layoutHeight;
+    UINT32 maxBidiReorderingDepth;
+    UINT32 lineCount;
+} DWRITE_TEXT_METRICS;
+
+typedef struct DWRITE_CLUSTER_METRICS
+{
+    FLOAT width;
+    UINT16 length;
+    UINT16 canWrapLineAfter : 1;
+    UINT16 isWhitespace : 1;
+    UINT16 isNewline : 1;
+    UINT16 isSoftHyphen : 1;
+    UINT16 isRightToLeft : 1;
+    UINT16 padding : 11;
+} DWRITE_CLUSTER_METRICS;
+
+typedef struct DWRITE_HIT_TEST_METRICS
+{
+    UINT32 textPosition;
+    UINT32 length;
+    FLOAT left;
+    FLOAT top;
+    FLOAT width;
+    FLOAT height;
+    UINT32 bidiLevel;
+    BOOL isText;
+    BOOL isTrimmed;
+} DWRITE_HIT_TEST_METRICS;
+
+typedef struct DWRITE_SCRIPT_ANALYSIS
+{
+    UINT16 script;
+    DWRITE_SCRIPT_SHAPES shapes;
+} DWRITE_SCRIPT_ANALYSIS;
+
+typedef struct DWRITE_LINE_BREAKPOINT
+{
+    UINT8 breakConditionBefore : 2;
+    UINT8 breakConditionAfter : 2;
+    UINT8 isWhitespace : 1;
+    UINT8 isSoftHyphen : 1;
+    UINT8 padding : 2;
+} DWRITE_LINE_BREAKPOINT;
+
+typedef struct DWRITE_TYPOGRAPHIC_FEATURES
+{
+    DWRITE_FONT_FEATURE* features;
+    UINT32 featureCount;
+} DWRITE_TYPOGRAPHIC_FEATURES;
+
+typedef struct DWRITE_SHAPING_TEXT_PROPERTIES
+{
+    UINT16 isShapedAlone : 1;
+    UINT16 reserved : 15;
+} DWRITE_SHAPING_TEXT_PROPERTIES;
+
+typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES
+{
+    UINT16 justification : 4;
+    UINT16 isClusterStart : 1;
+    UINT16 isDiacritic : 1;
+    UINT16 isZeroWidthSpace : 1;
+    UINT16 reserved : 9;
+} DWRITE_SHAPING_GLYPH_PROPERTIES;
+
+[
+local,
+object,
+uuid(6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0)
+]
+interface IDWriteFontFileStream : IUnknown
+{
+    HRESULT ReadFileFragment(
+        void const **fragment_start,
+        UINT64 offset,
+        UINT64 fragment_size,
+        void **fragment_context);
+
+    void ReleaseFileFragment(void *fragment_context);
+    HRESULT GetFileSize(UINT64 *size);
+    HRESULT GetLastWriteTime(UINT64 *last_writetime);
+}
+
+[
+local,
+object,
+uuid(727cad4e-d6af-4c9e-8a08-d695b11caa49)
+]
+interface IDWriteFontFileLoader : IUnknown
+{
+    HRESULT CreateStreamFromKey(
+        void const *key,
+        UINT32 key_size,
+        IDWriteFontFileStream **stream);
+}
+
+[
+local,
+object,
+uuid(739d886a-cef5-47dc-8769-1a8b41bebbb0)
+]
+interface IDWriteFontFile : IUnknown
+{
+    HRESULT GetReferenceKey(
+        void const **key,
+        UINT32 *key_size);
+
+    HRESULT GetLoader(IDWriteFontFileLoader **loader);
+
+    HRESULT Analyze(
+        BOOL *is_supported_fonttype,
+        DWRITE_FONT_FILE_TYPE *file_type,
+        DWRITE_FONT_FACE_TYPE *face_type,
+        UINT32 *faces_num);
+}
+
+[
+local,
+object,
+uuid(72755049-5ff7-435d-8348-4be97cfa6c7c)
+]
+interface IDWriteFontFileEnumerator : IUnknown
+{
+    HRESULT MoveNext(BOOL *has_current_file);
+    HRESULT GetCurrentFontFile(IDWriteFontFile **font_file);
+};
+
+[
+local,
+object,
+uuid(cca920e4-52f0-492b-bfa8-29c72ee0a468)
+]
+interface IDWriteFontCollectionLoader : IUnknown
+{
+    HRESULT CreateEnumeratorFromKey(
+        IDWriteFactory* factory,
+        void const* key,
+        UINT32 key_size,
+        IDWriteFontFileEnumerator **enumerator);
+}
+
+[
+local,
+object,
+uuid(08256209-099a-4b34-b86d-c22b110e7771)
+]
+interface IDWriteLocalizedStrings : IUnknown
+{
+    UINT32 GetCount();
+
+    HRESULT FindLocaleName(
+        WCHAR const *locale_name,
+        UINT32 *index,
+        BOOL *exists);
+
+    HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length);
+    HRESULT GetLocaleName(UINT32 index, WCHAR *locale_name, UINT32 size);
+    HRESULT GetStringLength(UINT32 index, UINT32 *length);
+    HRESULT GetString(UINT32 index, WCHAR *buffer, UINT32 size);
+}
+
+[
+local,
+object,
+uuid(2f0da53a-2add-47cd-82ee-d9ec34688e75)
+]
+interface IDWriteRenderingParams : IUnknown
+{
+    FLOAT GetGamma();
+    FLOAT GetEnhancedContrast();
+    FLOAT GetClearTypeLevel();
+    DWRITE_PIXEL_GEOMETRY GetPixelGeometry();
+    DWRITE_RENDERING_MODE GetRenderingMode();
+}
+
+[
+local,
+object,
+uuid(5f49804d-7024-4d43-bfa9-d25984f53849)
+]
+interface IDWriteFontFace : IUnknown
+{
+    DWRITE_FONT_FACE_TYPE GetType();
+    HRESULT GetFiles(UINT32 *number_of_files, IDWriteFontFile **fontfiles);
+    UINT32 GetIndex();
+    DWRITE_FONT_SIMULATIONS GetSimulations();
+    BOOL IsSymbolFont();
+    void GetMetrics(DWRITE_FONT_METRICS *metrics);
+    UINT16 GetGlyphCount();
+
+    HRESULT GetDesignGlyphMetrics(
+        UINT16 const *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        [defaultvalue(FALSE)] BOOL is_sideways);
+
+    HRESULT GetGlyphIndices(
+        UINT32 const *codepoints,
+        UINT32 count,
+        UINT16 *glyph_indices);
+
+    HRESULT TryGetFontTable(
+        UINT32 table_tag,
+        const void **table_data,
+        UINT32 *table_size,
+        void **context,
+        BOOL *exists);
+
+    void ReleaseFontTable(void *table_context);
+
+    HRESULT GetGlyphRunOutline(
+        FLOAT emSize,
+        UINT16 const *glyph_indices,
+        FLOAT const* glyph_advances,
+        DWRITE_GLYPH_OFFSET const *glyph_offsets,
+        UINT32 glyph_count,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        IDWriteGeometrySink *geometrysink);
+
+    HRESULT GetRecommendedRenderingMode(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MEASURING_MODE mode,
+        IDWriteRenderingParams* params,
+        DWRITE_RENDERING_MODE* rendering_mode);
+
+    HRESULT GetGdiCompatibleMetrics(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const *transform,
+        DWRITE_FONT_METRICS *metrics);
+
+    HRESULT GetGdiCompatibleGlyphMetrics(
+        FLOAT emSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const *transform,
+        BOOL use_gdi_natural,
+        UINT16 const *glyph_indices,
+        UINT32 glyph_count,
+        DWRITE_GLYPH_METRICS *metrics,
+        [defaultvalue(FALSE)] BOOL is_sideways);
+}
+
+[
+local,
+object,
+uuid(acd16696-8c14-4f5d-877e-fe3fc1d32737)
+]
+interface IDWriteFont : IUnknown
+{
+    HRESULT GetFontFamily(IDWriteFontFamily **family);
+    DWRITE_FONT_WEIGHT GetWeight();
+    DWRITE_FONT_STRETCH GetStretch();
+    DWRITE_FONT_STYLE GetStyle();
+    BOOL IsSymbolFont();
+
+    HRESULT GetFaceNames(IDWriteLocalizedStrings **names);
+    HRESULT GetInformationalStrings(
+        DWRITE_INFORMATIONAL_STRING_ID stringid,
+        IDWriteLocalizedStrings **strings,
+        BOOL *exists);
+
+    DWRITE_FONT_SIMULATIONS GetSimulations();
+    void GetMetrics(DWRITE_FONT_METRICS *metrics);
+    HRESULT HasCharacter(UINT32 value, BOOL *exists);
+    HRESULT CreateFontFace(IDWriteFontFace **face);
+}
+
+[
+local,
+object,
+uuid(1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb)
+]
+interface IDWriteFontList : IUnknown
+{
+    HRESULT GetFontCollection(IDWriteFontCollection **collection);
+    UINT32 GetFontCount();
+    HRESULT GetFont(UINT32 index, IDWriteFont **font);
+}
+
+[
+local,
+object,
+uuid(da20d8ef-812a-4c43-9802-62ec4abd7add)
+]
+interface IDWriteFontFamily : IDWriteFontList
+{
+    HRESULT GetFamilyNames(IDWriteLocalizedStrings **names);
+
+    HRESULT GetFirstMatchingFont(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFont **font);
+
+    HRESULT GetMatchingFonts(
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STRETCH stretch,
+        DWRITE_FONT_STYLE style,
+        IDWriteFontList **fonts);
+}
+
+[
+local,
+object,
+uuid(a84cee02-3eea-4eee-a827-87c1a02a0fcc)
+]
+interface IDWriteFontCollection : IUnknown
+{
+    UINT32 GetFontFamilyCount();
+    HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily **family);
+    HRESULT FindFamilyName(WCHAR const *name, UINT32 *index, BOOL *exists);
+    HRESULT GetFontFromFontFace(IDWriteFontFace *face, IDWriteFont **font);
+}
+
+[
+local,
+object,
+uuid(eaf3a2da-ecf4-4d24-b644-b34f6842024b)
+]
+interface IDWritePixelSnapping : IUnknown
+{
+    HRESULT IsPixelSnappingDisabled(
+        void *client_drawingcontext,
+        BOOL *disabled);
+
+    HRESULT GetCurrentTransform(
+        void *client_drawingcontext,
+        DWRITE_MATRIX *transform);
+
+    HRESULT GetPixelsPerDip(
+        void *client_drawingcontext,
+        FLOAT *pixels_per_dip);
+}
+
+[
+local,
+object,
+uuid(ef8a8135-5cc6-45fe-8825-c5a0724eb819)
+]
+interface IDWriteTextRenderer : IDWritePixelSnapping
+{
+    HRESULT DrawGlyphRun(
+        void* client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE mode,
+        DWRITE_GLYPH_RUN const *glyph_run,
+        DWRITE_GLYPH_RUN_DESCRIPTION const *run_descr,
+        IUnknown *drawing_effect);
+
+    HRESULT DrawUnderline(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_UNDERLINE const* underline,
+        IUnknown *drawing_effect);
+
+    HRESULT DrawStrikethrough(
+        void *client_drawingcontext,
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_STRIKETHROUGH const* strikethrough,
+        IUnknown *drawing_effect);
+
+    HRESULT DrawInlineObject(
+        void *client_drawingcontext,
+        FLOAT originX,
+        FLOAT originY,
+        IDWriteInlineObject *object,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        IUnknown *drawing_effect);
+}
+
+[
+local,
+object,
+uuid(8339fde3-106f-47ab-8373-1c6295eb10b3)
+]
+interface IDWriteInlineObject : IUnknown
+{
+    HRESULT Draw(
+        void* client_drawingontext,
+        IDWriteTextRenderer* renderer,
+        FLOAT originX,
+        FLOAT originY,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        IUnknown *drawing_effect);
+
+    HRESULT GetMetrics(DWRITE_INLINE_OBJECT_METRICS *metrics);
+    HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);
+    HRESULT GetBreakConditions(
+        DWRITE_BREAK_CONDITION* condition_before,
+        DWRITE_BREAK_CONDITION* condition_after);
+}
+
+[
+local,
+object,
+uuid(9c906818-31d7-4fd3-a151-7c5e225db55a)
+]
+interface IDWriteTextFormat : IUnknown
+{
+    HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT alignment);
+    HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT alignment);
+    HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wrapping);
+    HRESULT SetReadingDirection(DWRITE_READING_DIRECTION direction);
+    HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION direction);
+    HRESULT SetIncrementalTabStop(FLOAT tabstop);
+    HRESULT SetTrimming(DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign);
+    HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline);
+    DWRITE_TEXT_ALIGNMENT GetTextAlignment();
+    DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment();
+    DWRITE_WORD_WRAPPING GetWordWrapping();
+    DWRITE_READING_DIRECTION GetReadingDirection();
+    DWRITE_FLOW_DIRECTION GetFlowDirection();
+    FLOAT GetIncrementalTabStop();
+    HRESULT GetTrimming(DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign);
+
+    HRESULT GetLineSpacing(
+        DWRITE_LINE_SPACING_METHOD *method,
+        FLOAT *spacing,
+        FLOAT *baseline);
+
+    HRESULT GetFontCollection(IDWriteFontCollection **collection);
+    UINT32 GetFontFamilyNameLength();
+    HRESULT GetFontFamilyName(WCHAR *name, UINT32 size);
+    DWRITE_FONT_WEIGHT GetFontWeight();
+    DWRITE_FONT_STYLE GetFontStyle();
+    DWRITE_FONT_STRETCH GetFontStretch();
+    FLOAT GetFontSize();
+    UINT32 GetLocaleNameLength();
+    HRESULT GetLocaleName(WCHAR *name, UINT32 size);
+}
+
+[
+local,
+object,
+uuid(55f1112b-1dc2-4b3c-9541-f46894ed85b6)
+]
+interface IDWriteTypography : IUnknown
+{
+    HRESULT AddFontFeature(DWRITE_FONT_FEATURE feature);
+    UINT32 GetFontFeatureCount();
+    HRESULT GetFontFeature(UINT32 index, DWRITE_FONT_FEATURE *feature);
+}
+
+[
+local,
+object,
+uuid(5e5a32a3-8dff-4773-9ff6-0696eab77267)
+]
+interface IDWriteBitmapRenderTarget : IUnknown
+{
+    HRESULT DrawGlyphRun(
+        FLOAT baselineOriginX,
+        FLOAT baselineOriginY,
+        DWRITE_MEASURING_MODE measuring_mode,
+        DWRITE_GLYPH_RUN const* glyph_run,
+        IDWriteRenderingParams* params,
+        COLORREF textColor,
+        [defaultvalue(NULL)] RECT *blackbox_rect);
+
+    HDC GetMemoryDC();
+    FLOAT GetPixelsPerDip();
+    HRESULT SetPixelsPerDip(FLOAT pixels_per_dip);
+    HRESULT GetCurrentTransform(DWRITE_MATRIX *transform);
+    HRESULT SetCurrentTransform(DWRITE_MATRIX const *transform);
+    HRESULT GetSize(SIZE *size);
+    HRESULT Resize(UINT32 width, UINT32 height);
+}
+
+cpp_quote("#ifndef _WINGDI_")
+/* already defined in wingdi.h but needed for WIDL */
+#define LF_FACESIZE     32
+
+    typedef struct tagLOGFONTW
+    {
+        LONG   lfHeight;
+        LONG   lfWidth;
+        LONG   lfEscapement;
+        LONG   lfOrientation;
+        LONG   lfWeight;
+        BYTE   lfItalic;
+        BYTE   lfUnderline;
+        BYTE   lfStrikeOut;
+        BYTE   lfCharSet;
+        BYTE   lfOutPrecision;
+        BYTE   lfClipPrecision;
+        BYTE   lfQuality;
+        BYTE   lfPitchAndFamily;
+        WCHAR  lfFaceName[LF_FACESIZE];
+    } LOGFONTW, *PLOGFONTW, *LPLOGFONTW;
+cpp_quote("#endif /* _WINGDI_ */")
+
+[
+local,
+object,
+uuid(1edd9491-9853-4299-898f-6432983b6f3a)
+]
+interface IDWriteGdiInterop : IUnknown
+{
+    HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFont **font);
+    HRESULT ConvertFontToLOGFONT(
+        IDWriteFont* font,
+        LOGFONTW* logfont,
+        BOOL *is_systemfont);
+
+    HRESULT ConvertFontFaceToLOGFONT(IDWriteFontFace* font, LOGFONTW* logfont);
+    HRESULT CreateFontFaceFromHdc(HDC hdc, IDWriteFontFace **fontface);
+    HRESULT CreateBitmapRenderTarget(HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target);
+}
+
+[
+local,
+object,
+uuid(53737037-6d14-410b-9bfe-0b182bb70961)
+]
+interface IDWriteTextLayout : IDWriteTextFormat
+{
+    HRESULT SetMaxWidth(FLOAT maxWidth);
+    HRESULT SetMaxHeight(FLOAT maxHeight);
+    HRESULT SetFontCollection(IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontFamilyName(WCHAR const *name, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontWeight(DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontStyle(DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontStretch(DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range);
+    HRESULT SetFontSize(FLOAT size, DWRITE_TEXT_RANGE range);
+    HRESULT SetUnderline(BOOL underline, DWRITE_TEXT_RANGE range);
+    HRESULT SetStrikethrough(BOOL strikethrough, DWRITE_TEXT_RANGE range);
+    HRESULT SetDrawingEffect(IUnknown* effect, DWRITE_TEXT_RANGE range);
+    HRESULT SetInlineObject(IDWriteInlineObject *object, DWRITE_TEXT_RANGE range);
+    HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE range);
+    HRESULT SetLocaleName(WCHAR const* locale, DWRITE_TEXT_RANGE range);
+
+    FLOAT GetMaxWidth();
+    FLOAT GetMaxHeight();
+    HRESULT GetFontCollection(
+        UINT32 pos,
+        IDWriteFontCollection** collection,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontFamilyNameLength(
+        UINT32 pos,
+        UINT32* len,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontFamilyName(
+        UINT32 position,
+        WCHAR* name,
+        UINT32 name_size,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontWeight(
+        UINT32 position,
+        DWRITE_FONT_WEIGHT *weight,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontStyle(
+        UINT32 currentPosition,
+        DWRITE_FONT_STYLE *style,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontStretch(
+        UINT32 position,
+        DWRITE_FONT_STRETCH *stretch,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetFontSize(
+        UINT32 position,
+        FLOAT *size,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetUnderline(
+        UINT32 position,
+        BOOL *has_underline,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetStrikethrough(
+        UINT32 position,
+        BOOL *has_strikethrough,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetDrawingEffect(
+        UINT32 position,
+        IUnknown **effect,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetInlineObject(
+        UINT32 position,
+        IDWriteInlineObject **object,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetTypography(
+        UINT32 position,
+        IDWriteTypography** typography,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetLocaleNameLength(
+        UINT32 position,
+        UINT32* length,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT GetLocaleName(
+        UINT32 position,
+        WCHAR* name,
+        UINT32 name_size,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+    HRESULT Draw(
+        void *context,
+        IDWriteTextRenderer* renderer,
+        FLOAT originX,
+        FLOAT originY);
+
+    HRESULT GetLineMetrics(
+        DWRITE_LINE_METRICS *metrics,
+        UINT32 max_count,
+        UINT32 *actual_count);
+
+    HRESULT GetMetrics(DWRITE_TEXT_METRICS *metrics);
+    HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);
+    HRESULT GetClusterMetrics(
+        DWRITE_CLUSTER_METRICS *metrics,
+        UINT32 max_count,
+        UINT32* act_count);
+
+    HRESULT DetermineMinWidth(FLOAT* min_width);
+    HRESULT HitTestPoint(
+        FLOAT pointX,
+        FLOAT pointY,
+        BOOL* is_trailinghit,
+        BOOL* is_inside,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT HitTestTextPosition(
+        UINT32 textPosition,
+        BOOL is_trailinghit,
+        FLOAT* pointX,
+        FLOAT* pointY,
+        DWRITE_HIT_TEST_METRICS *metrics);
+
+    HRESULT HitTestTextRange(
+        UINT32 textPosition,
+        UINT32 textLength,
+        FLOAT originX,
+        FLOAT originY,
+        DWRITE_HIT_TEST_METRICS *metrics,
+        UINT32 max_metricscount,
+        UINT32* actual_metricscount);
+}
+
+[
+local,
+object,
+uuid(14885cc9-bab0-4f90-b6ed-5c366a2cd03d)
+]
+interface IDWriteNumberSubstitution : IUnknown
+{
+}
+
+[
+local,
+object,
+uuid(688e1a58-5094-47c8-adc8-fbcea60ae92b)
+]
+interface IDWriteTextAnalysisSource : IUnknown
+{
+    HRESULT GetTextAtPosition(
+        UINT32 position,
+        WCHAR const** text,
+        UINT32* text_len);
+
+    HRESULT GetTextBeforePosition(
+        UINT32 position,
+        WCHAR const** text,
+        UINT32* text_len);
+
+    DWRITE_READING_DIRECTION GetParagraphReadingDirection();
+    HRESULT GetLocaleName(
+        UINT32 position,
+        UINT32* text_len,
+        WCHAR const** locale);
+
+    HRESULT GetNumberSubstitution(
+        UINT32 position,
+        UINT32* text_len,
+        IDWriteNumberSubstitution **substitution);
+}
+
+[
+local,
+object,
+uuid(5810cd44-0ca0-4701-b3fa-bec5182ae4f6)
+]
+interface IDWriteTextAnalysisSink : IUnknown
+{
+    HRESULT SetScriptAnalysis(
+        UINT32 position,
+        UINT32 length,
+        DWRITE_SCRIPT_ANALYSIS const* scriptanalysis);
+
+    HRESULT SetLineBreakpoints(
+        UINT32 position,
+        UINT32 length,
+        DWRITE_LINE_BREAKPOINT const* breakpoints);
+
+    HRESULT SetBidiLevel(
+        UINT32 position,
+        UINT32 length,
+        UINT8 explicitLevel,
+        UINT8 resolvedLevel);
+
+    HRESULT SetNumberSubstitution(
+        UINT32 position,
+        UINT32 length,
+        IDWriteNumberSubstitution* substitution);
+}
+
+[
+local,
+object,
+uuid(b7e6163e-7f46-43b4-84b3-e4e6249c365d)
+]
+interface IDWriteTextAnalyzer : IUnknown
+{
+    HRESULT AnalyzeScript(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT AnalyzeBidi(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT AnalyzeNumberSubstitution(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT AnalyzeLineBreakpoints(
+        IDWriteTextAnalysisSource* source,
+        UINT32 position,
+        UINT32 length,
+        IDWriteTextAnalysisSink* sink);
+
+    HRESULT GetGlyphs(
+        WCHAR const* text,
+        UINT32 length,
+        IDWriteFontFace* font_face,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        DWRITE_SCRIPT_ANALYSIS const* analysis,
+        WCHAR const* locale,
+        IDWriteNumberSubstitution* substitution,
+        DWRITE_TYPOGRAPHIC_FEATURES const** features,
+        UINT32 const* feature_range_len,
+        UINT32 feature_ranges,
+        UINT32 max_glyph_count,
+        UINT16* clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES* text_props,
+        UINT16* glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES* glyph_props,
+        UINT32* actual_glyph_count);
+
+    HRESULT GetGlyphPlacements(
+        WCHAR const* text,
+        UINT16 const* clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES* props,
+        UINT32 text_len,
+        UINT16 const* glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace * font_face,
+        FLOAT fontEmSize,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        DWRITE_SCRIPT_ANALYSIS const* analysis,
+        WCHAR const* locale,
+        DWRITE_TYPOGRAPHIC_FEATURES const** features,
+        UINT32 const* feature_range_len,
+        UINT32 feature_ranges,
+        FLOAT* glyph_advances,
+        DWRITE_GLYPH_OFFSET* glyph_offsets);
+
+    HRESULT GetGdiCompatibleGlyphPlacements(
+        WCHAR const* text,
+        UINT16 const* clustermap,
+        DWRITE_SHAPING_TEXT_PROPERTIES* props,
+        UINT32 text_len,
+        UINT16 const* glyph_indices,
+        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,
+        UINT32 glyph_count,
+        IDWriteFontFace * font_face,
+        FLOAT fontEmSize,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const* transform,
+        BOOL use_gdi_natural,
+        BOOL is_sideways,
+        BOOL is_rtl,
+        DWRITE_SCRIPT_ANALYSIS const* analysis,
+        WCHAR const* locale,
+        DWRITE_TYPOGRAPHIC_FEATURES const** features,
+        UINT32 const* feature_range_lengths,
+        UINT32 feature_ranges,
+        FLOAT* glyph_advances,
+        DWRITE_GLYPH_OFFSET* glyph_offsets);
+}
+
+[
+local,
+object,
+uuid(7d97dbf7-e085-42d4-81e3-6a883bded118)
+]
+interface IDWriteGlyphRunAnalysis : IUnknown
+{
+    HRESULT GetAlphaTextureBounds(DWRITE_TEXTURE_TYPE type, RECT* bounds);
+    HRESULT CreateAlphaTexture(DWRITE_TEXTURE_TYPE type, RECT const* bounds, BYTE* alphaValues, UINT32 bufferSize);
+    HRESULT GetAlphaBlendParams(
+        IDWriteRenderingParams* renderingParams,
+        FLOAT* blendGamma,
+        FLOAT* blendEnhancedContrast,
+        FLOAT* blendClearTypeLevel);
+}
+
+[
+local,
+object,
+uuid(b859ee5a-d838-4b5b-a2e8-1adc7d93db48)
+]
+interface IDWriteFactory : IUnknown
+{
+    HRESULT GetSystemFontCollection(IDWriteFontCollection **collection,
+                                    [defaultvalue(FALSE)] BOOL check_for_updates);
+
+    HRESULT CreateCustomFontCollection(
+        IDWriteFontCollectionLoader *loader,
+        void const *key,
+        UINT32 key_size,
+        IDWriteFontCollection **collection);
+
+    HRESULT RegisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);
+
+    HRESULT UnregisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);
+
+    HRESULT CreateFontFileReference(
+        WCHAR const *path,
+        FILETIME const *writetime,
+        IDWriteFontFile **font_file);
+
+    HRESULT CreateCustomFontFileReference(
+        void const *reference_key,
+        UINT32 key_size,
+        IDWriteFontFileLoader *loader,
+        IDWriteFontFile **font_file);
+
+    HRESULT CreateFontFace(
+        DWRITE_FONT_FACE_TYPE facetype,
+        UINT32 files_number,
+        IDWriteFontFile* const* font_files,
+        UINT32 index,
+        DWRITE_FONT_SIMULATIONS sim_flags,
+        IDWriteFontFace **font_face);
+
+    HRESULT CreateRenderingParams(IDWriteRenderingParams **params);
+
+    HRESULT CreateMonitorRenderingParams(
+        HMONITOR monitor,
+        IDWriteRenderingParams **params);
+
+    HRESULT CreateCustomRenderingParams(
+        FLOAT gamma,
+        FLOAT enhancedContrast,
+        FLOAT cleartype_level,
+        DWRITE_PIXEL_GEOMETRY geometry,
+        DWRITE_RENDERING_MODE mode,
+        IDWriteRenderingParams **params);
+
+    HRESULT RegisterFontFileLoader(IDWriteFontFileLoader *loader);
+
+    HRESULT UnregisterFontFileLoader(IDWriteFontFileLoader *loader);
+
+    HRESULT CreateTextFormat(
+        WCHAR const* family_name,
+        IDWriteFontCollection *collection,
+        DWRITE_FONT_WEIGHT weight,
+        DWRITE_FONT_STYLE style,
+        DWRITE_FONT_STRETCH stretch,
+        FLOAT size,
+        WCHAR const *locale,
+        IDWriteTextFormat **format);
+
+    HRESULT CreateTypography(IDWriteTypography **typography);
+
+    HRESULT GetGdiInterop(IDWriteGdiInterop **gdi_interop);
+
+    HRESULT CreateTextLayout(
+        WCHAR const* string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT max_width,
+        FLOAT max_height,
+        IDWriteTextLayout **layout);
+
+    HRESULT CreateGdiCompatibleTextLayout(
+        WCHAR const* string,
+        UINT32 len,
+        IDWriteTextFormat *format,
+        FLOAT layout_width,
+        FLOAT layout_height,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const* transform,
+        BOOL use_gdi_natural,
+        IDWriteTextLayout **layout);
+
+    HRESULT CreateEllipsisTrimmingSign(
+        IDWriteTextFormat *format,
+        IDWriteInlineObject **trimming_sign);
+
+    HRESULT CreateTextAnalyzer(IDWriteTextAnalyzer **analyzer);
+
+    HRESULT CreateNumberSubstitution(
+        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+        WCHAR const* locale,
+        BOOL ignore_user_override,
+        IDWriteNumberSubstitution **substitution);
+
+    HRESULT CreateGlyphRunAnalysis(
+        DWRITE_GLYPH_RUN const *glyph_run,
+        FLOAT pixels_per_dip,
+        DWRITE_MATRIX const* transform,
+        DWRITE_RENDERING_MODE rendering_mode,
+        DWRITE_MEASURING_MODE measuring_mode,
+        FLOAT baseline_x,
+        FLOAT baseline_y,
+        IDWriteGlyphRunAnalysis **analysis);
+}
+
+cpp_quote("HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE,REFIID,IUnknown**);")
+
+/* error codes */
+cpp_quote("#define FACILITY_DWRITE 0x898")
+cpp_quote("#define DWRITE_ERR_BASE 0x5000")
+cpp_quote("#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))")
+cpp_quote("#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)")
+
+cpp_quote("#define DWRITE_E_FILEFORMAT              MAKE_DWRITE_HR_ERR(0x0)")
+cpp_quote("#define DWRITE_E_UNEXPECTED              MAKE_DWRITE_HR_ERR(0x1)")
+cpp_quote("#define DWRITE_E_NOFONT                  MAKE_DWRITE_HR_ERR(0x2)")
+cpp_quote("#define DWRITE_E_FILENOTFOUND            MAKE_DWRITE_HR_ERR(0x3)")
+cpp_quote("#define DWRITE_E_FILEACCESS              MAKE_DWRITE_HR_ERR(0x4)")
+cpp_quote("#define DWRITE_E_FONTCOLLECTIONOBSOLETE  MAKE_DWRITE_HR_ERR(0x5)")
+cpp_quote("#define DWRITE_E_ALREADYREGISTERED       MAKE_DWRITE_HR_ERR(0x6)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl
new file mode 100644
index 0000000..3810840
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl
@@ -0,0 +1,833 @@
+/*
+ * Copyright 2013 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "dwrite.idl";
+
+typedef enum DWRITE_PANOSE_FAMILY
+{
+    DWRITE_PANOSE_FAMILY_ANY,
+    DWRITE_PANOSE_FAMILY_NO_FIT,
+    DWRITE_PANOSE_FAMILY_TEXT_DISPLAY,
+    DWRITE_PANOSE_FAMILY_SCRIPT,
+    DWRITE_PANOSE_FAMILY_DECORATIVE,
+    DWRITE_PANOSE_FAMILY_SYMBOL,
+    DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY_SYMBOL
+} DWRITE_PANOSE_FAMILY;
+
+typedef enum DWRITE_PANOSE_SERIF_STYLE
+{
+    DWRITE_PANOSE_SERIF_STYLE_ANY,
+    DWRITE_PANOSE_SERIF_STYLE_NO_FIT,
+    DWRITE_PANOSE_SERIF_STYLE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE,
+    DWRITE_PANOSE_SERIF_STYLE_SQUARE,
+    DWRITE_PANOSE_SERIF_STYLE_THIN,
+    DWRITE_PANOSE_SERIF_STYLE_OVAL,
+    DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED,
+    DWRITE_PANOSE_SERIF_STYLE_TRIANGLE,
+    DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_FLARED,
+    DWRITE_PANOSE_SERIF_STYLE_ROUNDED,
+    DWRITE_PANOSE_SERIF_STYLE_SCRIPT,
+    DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+    DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE_OVAL
+} DWRITE_PANOSE_SERIF_STYLE;
+
+typedef enum DWRITE_PANOSE_WEIGHT
+{
+    DWRITE_PANOSE_WEIGHT_ANY,
+    DWRITE_PANOSE_WEIGHT_NO_FIT,
+    DWRITE_PANOSE_WEIGHT_VERY_LIGHT,
+    DWRITE_PANOSE_WEIGHT_LIGHT,
+    DWRITE_PANOSE_WEIGHT_THIN,
+    DWRITE_PANOSE_WEIGHT_BOOK,
+    DWRITE_PANOSE_WEIGHT_MEDIUM,
+    DWRITE_PANOSE_WEIGHT_DEMI,
+    DWRITE_PANOSE_WEIGHT_BOLD,
+    DWRITE_PANOSE_WEIGHT_HEAVY,
+    DWRITE_PANOSE_WEIGHT_BLACK,
+    DWRITE_PANOSE_WEIGHT_EXTRA_BLACK,
+    DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT_EXTRA_BLACK
+} DWRITE_PANOSE_WEIGHT;
+
+typedef enum DWRITE_PANOSE_PROPORTION
+{
+    DWRITE_PANOSE_PROPORTION_ANY,
+    DWRITE_PANOSE_PROPORTION_NO_FIT,
+    DWRITE_PANOSE_PROPORTION_OLD_STYLE,
+    DWRITE_PANOSE_PROPORTION_MODERN,
+    DWRITE_PANOSE_PROPORTION_EVEN_WIDTH,
+    DWRITE_PANOSE_PROPORTION_EXPANDED,
+    DWRITE_PANOSE_PROPORTION_CONDENSED,
+    DWRITE_PANOSE_PROPORTION_VERY_EXPANDED,
+    DWRITE_PANOSE_PROPORTION_VERY_CONDENSED,
+    DWRITE_PANOSE_PROPORTION_MONOSPACED
+} DWRITE_PANOSE_PROPORTION;
+
+typedef enum DWRITE_PANOSE_CONTRAST
+{
+    DWRITE_PANOSE_CONTRAST_ANY,
+    DWRITE_PANOSE_CONTRAST_NO_FIT,
+    DWRITE_PANOSE_CONTRAST_NONE,
+    DWRITE_PANOSE_CONTRAST_VERY_LOW,
+    DWRITE_PANOSE_CONTRAST_LOW,
+    DWRITE_PANOSE_CONTRAST_MEDIUM_LOW,
+    DWRITE_PANOSE_CONTRAST_MEDIUM,
+    DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH,
+    DWRITE_PANOSE_CONTRAST_HIGH,
+    DWRITE_PANOSE_CONTRAST_VERY_HIGH,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM,
+    DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH,
+    DWRITE_PANOSE_CONTRAST_BROKEN
+} DWRITE_PANOSE_CONTRAST;
+
+typedef enum DWRITE_PANOSE_STROKE_VARIATION
+{
+    DWRITE_PANOSE_STROKE_VARIATION_ANY,
+    DWRITE_PANOSE_STROKE_VARIATION_NO_FIT,
+    DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL,
+    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL,
+    DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL,
+    DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL,
+    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL,
+    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL
+} DWRITE_PANOSE_STROKE_VARIANTION;
+
+typedef enum DWRITE_PANOSE_ARM_STYLE
+{
+    DWRITE_PANOSE_ARM_STYLE_ANY,
+    DWRITE_PANOSE_ARM_STYLE_NO_FIT,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF
+} DWRITE_PANOSE_ARM_STYLE;
+
+typedef enum DWRITE_PANOSE_LETTERFORM
+{
+    DWRITE_PANOSE_LETTERFORM_ANY,
+    DWRITE_PANOSE_LETTERFORM_NO_FIT,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER,
+    DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER,
+    DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE
+} DWRITE_PANOSE_LETTERFORM;
+
+typedef enum DWRITE_PANOSE_MIDLINE
+{
+    DWRITE_PANOSE_MIDLINE_ANY,
+    DWRITE_PANOSE_MIDLINE_NO_FIT,
+    DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_STANDARD_POINTED,
+    DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED,
+    DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_HIGH_POINTED,
+    DWRITE_PANOSE_MIDLINE_HIGH_SERIFED,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED,
+    DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED,
+    DWRITE_PANOSE_MIDLINE_LOW_TRIMMED,
+    DWRITE_PANOSE_MIDLINE_LOW_POINTED,
+    DWRITE_PANOSE_MIDLINE_LOW_SERIFED
+} DWRITE_PANOSE_MIDLINE;
+
+typedef enum DWRITE_PANOSE_XHEIGHT
+{
+    DWRITE_PANOSE_XHEIGHT_ANY,
+    DWRITE_PANOSE_XHEIGHT_NO_FIT,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE,
+    DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+    DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD
+} DWRITE_PANOSE_XHEIGHT;
+
+typedef enum DWRITE_PANOSE_TOOL_KIND
+{
+    DWRITE_PANOSE_TOOL_KIND_ANY,
+    DWRITE_PANOSE_TOOL_KIND_NO_FIT,
+    DWRITE_PANOSE_TOOL_KIND_FLAT_NIB,
+    DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT,
+    DWRITE_PANOSE_TOOL_KIND_ENGRAVED,
+    DWRITE_PANOSE_TOOL_KIND_BALL,
+    DWRITE_PANOSE_TOOL_KIND_BRUSH,
+    DWRITE_PANOSE_TOOL_KIND_ROUGH,
+    DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP,
+    DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH
+} DWRITE_PANOSE_TOOL_KIND;
+
+typedef enum DWRITE_PANOSE_SPACING
+{
+    DWRITE_PANOSE_SPACING_ANY,
+    DWRITE_PANOSE_SPACING_NO_FIT,
+    DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED,
+    DWRITE_PANOSE_SPACING_MONOSPACED
+} DWRITE_PANOSE_SPACING;
+
+typedef enum DWRITE_PANOSE_ASPECT_RATIO
+{
+    DWRITE_PANOSE_ASPECT_RATIO_ANY,
+    DWRITE_PANOSE_ASPECT_RATIO_NO_FIT,
+    DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED,
+    DWRITE_PANOSE_ASPECT_RATIO_CONDENSED,
+    DWRITE_PANOSE_ASPECT_RATIO_NORMAL,
+    DWRITE_PANOSE_ASPECT_RATIO_EXPANDED,
+    DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED
+} DWRITE_PANOSE_ASPECT_RATIO;
+
+typedef enum DWRITE_PANOSE_SCRIPT_TOPOLOGY
+{
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING,
+    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED
+} DWRITE_PANOSE_SCRIPT_TOPOLOGY;
+
+typedef enum DWRITE_PANOSE_SCRIPT_FORM
+{
+    DWRITE_PANOSE_SCRIPT_FORM_ANY,
+    DWRITE_PANOSE_SCRIPT_FORM_NO_FIT,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING,
+    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING
+} DWRITE_PANOSE_SCRIPT_FORM;
+
+typedef enum DWRITE_PANOSE_FINIALS
+{
+    DWRITE_PANOSE_FINIALS_ANY,
+    DWRITE_PANOSE_FINIALS_NO_FIT,
+    DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS,
+    DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS,
+    DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS,
+    DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS,
+    DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS,
+    DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS
+} DWRITE_PANOSE_FINIALS;
+
+typedef enum DWRITE_PANOSE_XASCENT
+{
+    DWRITE_PANOSE_XASCENT_ANY,
+    DWRITE_PANOSE_XASCENT_NO_FIT,
+    DWRITE_PANOSE_XASCENT_VERY_LOW,
+    DWRITE_PANOSE_XASCENT_LOW,
+    DWRITE_PANOSE_XASCENT_MEDIUM,
+    DWRITE_PANOSE_XASCENT_HIGH,
+    DWRITE_PANOSE_XASCENT_VERY_HIGH
+} DWRITE_PANOSE_XASCENT;
+
+typedef enum DWRITE_PANOSE_DECORATIVE_CLASS
+{
+    DWRITE_PANOSE_DECORATIVE_CLASS_ANY,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT,
+    DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS,
+    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT,
+    DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS,
+    DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON,
+    DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS,
+    DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED,
+    DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND,
+    DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE,
+    DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE
+} DWRITE_PANOSE_DECORATIVE_CLASS;
+
+typedef enum DWRITE_PANOSE_ASPECT
+{
+    DWRITE_PANOSE_ASPECT_ANY,
+    DWRITE_PANOSE_ASPECT_NO_FIT,
+    DWRITE_PANOSE_ASPECT_SUPER_CONDENSED,
+    DWRITE_PANOSE_ASPECT_VERY_CONDENSED,
+    DWRITE_PANOSE_ASPECT_CONDENSED,
+    DWRITE_PANOSE_ASPECT_NORMAL,
+    DWRITE_PANOSE_ASPECT_EXTENDED,
+    DWRITE_PANOSE_ASPECT_VERY_EXTENDED,
+    DWRITE_PANOSE_ASPECT_SUPER_EXTENDED,
+    DWRITE_PANOSE_ASPECT_MONOSPACED
+} DWRITE_PANOSE_ASPECT;
+
+typedef enum DWRITE_PANOSE_FILL
+{
+    DWRITE_PANOSE_FILL_ANY,
+    DWRITE_PANOSE_FILL_NO_FIT,
+    DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL,
+    DWRITE_PANOSE_FILL_NO_FILL,
+    DWRITE_PANOSE_FILL_PATTERNED_FILL,
+    DWRITE_PANOSE_FILL_COMPLEX_FILL,
+    DWRITE_PANOSE_FILL_SHAPED_FILL,
+    DWRITE_PANOSE_FILL_DRAWN_DISTRESSED
+} DWRITE_PANOSE_FILL;
+
+typedef enum DWRITE_PANOSE_LINING
+{
+    DWRITE_PANOSE_LINING_ANY,
+    DWRITE_PANOSE_LINING_NO_FIT,
+    DWRITE_PANOSE_LINING_NONE,
+    DWRITE_PANOSE_LINING_INLINE,
+    DWRITE_PANOSE_LINING_OUTLINE,
+    DWRITE_PANOSE_LINING_ENGRAVED,
+    DWRITE_PANOSE_LINING_SHADOW,
+    DWRITE_PANOSE_LINING_RELIEF,
+    DWRITE_PANOSE_LINING_BACKDROP
+} DWRITE_PANOSE_LINING;
+
+typedef enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY
+{
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER,
+    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE
+} DWRITE_PANOSE_DECORATIVE_TOPOLOGY;
+
+typedef enum DWRITE_PANOSE_CHARACTER_RANGES
+{
+    DWRITE_PANOSE_CHARACTER_RANGES_ANY,
+    DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT,
+    DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION,
+    DWRITE_PANOSE_CHARACTER_RANGES_LITERALS,
+    DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE,
+    DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS
+} DWRITE_PANOSE_CHARACTER_RANGES;
+
+typedef enum DWRITE_PANOSE_SYMBOL_KIND
+{
+    DWRITE_PANOSE_SYMBOL_KIND_ANY,
+    DWRITE_PANOSE_SYMBOL_KIND_NO_FIT,
+    DWRITE_PANOSE_SYMBOL_KIND_MONTAGES,
+    DWRITE_PANOSE_SYMBOL_KIND_PICTURES,
+    DWRITE_PANOSE_SYMBOL_KIND_SHAPES,
+    DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC,
+    DWRITE_PANOSE_SYMBOL_KIND_MUSIC,
+    DWRITE_PANOSE_SYMBOL_KIND_EXPERT,
+    DWRITE_PANOSE_SYMBOL_KIND_PATTERNS,
+    DWRITE_PANOSE_SYMBOL_KIND_BOARDERS,
+    DWRITE_PANOSE_SYMBOL_KIND_ICONS,
+    DWRITE_PANOSE_SYMBOL_KIND_LOGOS,
+    DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC
+} DWRITE_PANOSE_SYMBOL_KIND;
+
+typedef enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO
+{
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW,
+    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW
+} DWRITE_PANOSE_SYMBOL_ASPECT_RATIO;
+
+typedef enum DWRITE_OUTLINE_THRESHOLD
+{
+    DWRITE_OUTLINE_THRESHOLD_ANTIALIASED,
+    DWRITE_OUTLINE_THRESHOLD_ALIASED
+} DWRITE_OUTLINE_THRESHOLD;
+
+typedef enum DWRITE_BASELINE
+{
+    DWRITE_BASELINE_DEFAULT,
+    DWRITE_BASELINE_ROMAN,
+    DWRITE_BASELINE_CENTRAL,
+    DWRITE_BASELINE_MATH,
+    DWRITE_BASELINE_HANGING,
+    DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM,
+    DWRITE_BASELINE_IDEOGRAPHIC_TOP,
+    DWRITE_BASELINE_MINIMUM,
+    DWRITE_BASELINE_MAXIMUM
+} DWRITE_BASELINE;
+
+typedef enum DWRITE_VERTICAL_GLYPH_ORIENTATION
+{
+    DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT,
+    DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED
+} DWRITE_VERTICAL_GLYPH_ORIENTATION;
+
+typedef enum DWRITE_GLYPH_ORIENTATION_ANGLE
+{
+    DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES,
+    DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES
+} DWRITE_GLYPH_ORIENTATION_ANGLE;
+
+typedef struct DWRITE_FONT_METRICS1
+{
+    UINT16 designUnitsPerEm;
+    UINT16 ascent;
+    UINT16 descent;
+    INT16 lineGap;
+    UINT16 capHeight;
+    UINT16 xHeight;
+    INT16 underlinePosition;
+    UINT16 underlineThickness;
+    INT16 strikethroughPosition;
+    UINT16 strikethroughThickness;
+    INT16 glyphBoxLeft;
+    INT16 glyphBoxTop;
+    INT16 glyphBoxRight;
+    INT16 glyphBoxBottom;
+    INT16 subscriptPositionX;
+    INT16 subscriptPositionY;
+    INT16 subscriptSizeX;
+    INT16 subscriptSizeY;
+    INT16 superscriptPositionX;
+    INT16 superscriptPositionY;
+    INT16 superscriptSizeX;
+    INT16 superscriptSizeY;
+    BOOL hasTypographicMetrics;
+} DWRITE_FONT_METRICS1;
+
+typedef struct DWRITE_CARET_METRICS
+{
+    INT16 slopeRise;
+    INT16 slopeRun;
+    INT16 offset;
+} DWRITE_CARET_METRICS;
+
+typedef union DWRITE_PANOSE
+{
+    UINT8 values[10];
+    UINT8 familyKind;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 serifStyle;
+        UINT8 weight;
+        UINT8 proportion;
+        UINT8 contrast;
+        UINT8 strokeVariation;
+        UINT8 armStyle;
+        UINT8 letterform;
+        UINT8 midline;
+        UINT8 xHeight;
+    } text;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 toolKind;
+        UINT8 weight;
+        UINT8 spacing;
+        UINT8 aspectRatio;
+        UINT8 contrast;
+        UINT8 scriptTopology;
+        UINT8 scriptForm;
+        UINT8 finials;
+        UINT8 xAscent;
+    } script;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 decorativeClass;
+        UINT8 weight;
+        UINT8 aspect;
+        UINT8 contrast;
+        UINT8 serifVariant;
+        UINT8 fill;
+        UINT8 lining;
+        UINT8 decorativeTopology;
+        UINT8 characterRange;
+    } decorative;
+    struct
+    {
+        UINT8 familyKind;
+        UINT8 symbolKind;
+        UINT8 weight;
+        UINT8 spacing;
+        UINT8 aspectRatioAndContrast;
+        UINT8 aspectRatio94;
+        UINT8 aspectRatio119;
+        UINT8 aspectRatio157;
+        UINT8 aspectRatio163;
+        UINT8 aspectRatio211;
+    } symbol;
+} DWRITE_PANOSE;
+
+typedef struct DWRITE_UNICODE_RANGE
+{
+    UINT32 first;
+    UINT32 last;
+} DWRITE_UNICODE_RANGE;
+
+typedef struct DWRITE_SCRIPT_PROPERTIES
+{
+    UINT32 isoScriptCode;
+    UINT32 isoScriptNumber;
+    UINT32 clusterLookahead;
+    UINT32 justificationCharacter;
+    UINT32 restrictCaretToClusters : 1;
+    UINT32 usesWordDividers : 1;
+    UINT32 isDiscreteWriting : 1;
+    UINT32 isBlockWriting : 1;
+    UINT32 isDistributedWithinCluster : 1;
+    UINT32 isConnectedWriting : 1;
+    UINT32 isCursiveWriting : 1;
+    UINT32 reserved : 25;
+} DWRITE_SCRIPT_PROPERTIES;
+
+typedef struct DWRITE_JUSTIFICATION_OPPORTUNITY
+{
+    FLOAT expansionMinimum;
+    FLOAT expansionMaximum;
+    FLOAT compressionMaximum;
+    UINT32 expansionPriority : 8;
+    UINT32 compressionPriority : 8;
+    UINT32 allowResidualExpansion : 1;
+    UINT32 allowResidualCompression : 1;
+    UINT32 applyToLeadingEdge : 1;
+    UINT32 applyToTrailingEdge : 1;
+    UINT32 reserved : 12;
+} DWRITE_JUSTIFICATION_OPPORTUNITY;
+
+interface IDWriteTextAnalysisSource1;
+interface IDWriteTextAnalysisSink1;
+interface IDWriteRenderingParams1;
+
+[
+local,
+object,
+uuid(30572f99-dac6-41db-a16e-0486307e606a)
+]
+interface IDWriteFactory1 : IDWriteFactory
+{
+    HRESULT GetEudcFontCollection(IDWriteFontCollection **collection,
+                                  [defaultvalue(FALSE)] BOOL check_for_updates);
+    HRESULT CreateCustomRenderingParams(FLOAT gamma,
+                                        FLOAT enhcontrast,
+                                        FLOAT enhcontrast_grayscale,
+                                        FLOAT cleartype_level,
+                                        DWRITE_PIXEL_GEOMETRY geometry,
+                                        DWRITE_RENDERING_MODE mode,
+                                        IDWriteRenderingParams1** params);
+};
+
+[
+local,
+object,
+uuid(a71efdb4-9fdb-4838-ad90-cfc3be8c3daf)
+]
+interface IDWriteFontFace1 : IDWriteFontFace
+{
+    HRESULT GetMetrics(DWRITE_FONT_METRICS1 *metrics);
+    HRESULT GetGdiCompatibleMetrics(FLOAT em_size,
+                                    FLOAT pixels_per_dip,
+                                    const DWRITE_MATRIX *transform,
+                                    DWRITE_FONT_METRICS1 *metrics);
+    void GetCaretMetrics(DWRITE_CARET_METRICS *metrics);
+    HRESULT GetUnicodeRanges(UINT32 max_count,
+                             DWRITE_UNICODE_RANGE *ranges,
+                             UINT32 *count);
+    BOOL IsMonospacedFont();
+    HRESULT GetDesignGlyphAdvances(UINT32 glyph_count,
+                                   UINT16 const *indices,
+                                   INT32 *advances,
+                                   [defaultvalue(FALSE)] BOOL is_sideways);
+    HRESULT GetGdiCompatibleGlyphAdvances(FLOAT em_size,
+                                          FLOAT pixels_per_dip,
+                                          const DWRITE_MATRIX *transform,
+                                          BOOL use_gdi_natural,
+                                          BOOL is_sideways,
+                                          UINT32 glyph_count,
+                                          const UINT16 *indices,
+                                          INT32 *advances);
+
+    HRESULT GetKerningPairAdjustments(UINT32 glyph_count,
+                                      const UINT16 *indices,
+                                      INT32 *adjustments);
+    BOOL HasKerningPairs();
+    HRESULT GetRecommendedRenderingMode(FLOAT font_emsize,
+                                        FLOAT dpiX,
+                                        FLOAT dpiY,
+                                        const DWRITE_MATRIX *transform,
+                                        BOOL is_sideways,
+                                        DWRITE_OUTLINE_THRESHOLD threshold,
+                                        DWRITE_MEASURING_MODE measuring_mode,
+                                        DWRITE_RENDERING_MODE *rendering_mode);
+
+    HRESULT GetVerticalGlyphVariants(UINT32 glyph_count,
+                                     const UINT16 *nominal_indices,
+                                     UINT16 *vertical_indices);
+    BOOL HasVerticalGlyphVariants();
+};
+
+[
+local,
+object,
+uuid(acd16696-8c14-4f5d-877e-fe3fc1d32738)
+]
+interface IDWriteFont1 : IDWriteFont
+{
+    void GetMetrics(DWRITE_FONT_METRICS1 *metrics);
+    void GetPanose(DWRITE_PANOSE *panose);
+    HRESULT GetUnicodeRanges(UINT32 max_count,
+                             DWRITE_UNICODE_RANGE *ranges,
+                             UINT32 *count);
+    BOOL IsMonospacedFont();
+};
+
+[
+local,
+object,
+uuid(94413cf4-a6fc-4248-8b50-6674348fcad3)
+]
+interface IDWriteRenderingParams1 : IDWriteRenderingParams
+{
+    FLOAT GetGrayscaleEnhancedContrast();
+};
+
+[
+local,
+object,
+uuid(80dad800-e21f-4e83-96ce-bfcce500db7c)
+]
+interface IDWriteTextAnalyzer1 : IDWriteTextAnalyzer
+{
+    HRESULT ApplyCharacterSpacing(FLOAT leading_spacing,
+                                  FLOAT trailing_spacing,
+                                  FLOAT min_advance_width,
+                                  UINT32 len,
+                                  UINT32 glyph_count,
+                                  UINT16 const *clustermap,
+                                  FLOAT const *advances,
+                                  DWRITE_GLYPH_OFFSET const *offsets,
+                                  DWRITE_SHAPING_GLYPH_PROPERTIES const *props,
+                                  FLOAT *modified_advances,
+                                  DWRITE_GLYPH_OFFSET *modified_offsets);
+    HRESULT GetBaseline(IDWriteFontFace *face,
+                        DWRITE_BASELINE baseline,
+                        BOOL vertical,
+                        BOOL is_simulation_allowed,
+                        DWRITE_SCRIPT_ANALYSIS sa,
+                        const WCHAR *localeName,
+                        INT32 *baseline_coord,
+                        BOOL *exists);
+
+    HRESULT AnalyzeVerticalGlyphOrientation(
+        IDWriteTextAnalysisSource1* source,
+        UINT32 text_pos,
+        UINT32 len,
+        IDWriteTextAnalysisSink1 *sink);
+
+    HRESULT GetGlyphOrientationTransform(
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        BOOL is_sideways,
+        DWRITE_MATRIX *transform);
+
+    HRESULT GetScriptProperties(DWRITE_SCRIPT_ANALYSIS sa, DWRITE_SCRIPT_PROPERTIES *props);
+
+    HRESULT GetTextComplexity(const WCHAR *text,
+                              UINT32 len,
+                              IDWriteFontFace *face,
+                              BOOL *is_simple,
+                              UINT32 *len_read,
+                              UINT16 *indices);
+    HRESULT GetJustificationOpportunities(
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        const WCHAR *text,
+        const UINT16 *clustermap,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        DWRITE_JUSTIFICATION_OPPORTUNITY *jo);
+
+    HRESULT JustifyGlyphAdvances(
+        FLOAT width,
+        UINT32 glyph_count,
+        const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,
+        const FLOAT *advances,
+        const DWRITE_GLYPH_OFFSET *offsets,
+        FLOAT *justifiedadvances,
+        DWRITE_GLYPH_OFFSET *justifiedoffsets);
+
+    HRESULT GetJustifiedGlyphs(
+        IDWriteFontFace *face,
+        FLOAT font_em_size,
+        DWRITE_SCRIPT_ANALYSIS sa,
+        UINT32 length,
+        UINT32 glyph_count,
+        UINT32 max_glyphcount,
+        const UINT16 *clustermap,
+        const UINT16 *indices,
+        const FLOAT *advances,
+        const FLOAT *justifiedadvances,
+        const DWRITE_GLYPH_OFFSET *justifiedoffsets,
+        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+        UINT32 *actual_count,
+        UINT16 *modified_clustermap,
+        UINT16 *modified_indices,
+        FLOAT *modified_advances,
+        DWRITE_GLYPH_OFFSET *modified_offsets);
+};
+
+[
+local,
+object,
+uuid(639cfad8-0fb4-4b21-a58a-067920120009)
+]
+interface IDWriteTextAnalysisSource1 : IDWriteTextAnalysisSource
+{
+    HRESULT GetVerticalGlyphOrientation(
+        UINT32 pos,
+        UINT32 *length,
+        DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
+        UINT8 *bidi_level);
+};
+
+[
+local,
+object,
+uuid(b0d941a0-85e7-4d8b-9fd3-5ced9934482a)
+]
+interface IDWriteTextAnalysisSink1 : IDWriteTextAnalysisSink
+{
+    HRESULT SetGlyphOrientation(
+        UINT32 pos,
+        UINT32 length,
+        DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+        UINT8 adjusted_bidilevel,
+        BOOL is_sideways,
+        BOOL is_rtl);
+};
+
+[
+local,
+object,
+uuid(9064d822-80a7-465c-a986-df65f78b8feb)
+]
+interface IDWriteTextLayout1 : IDWriteTextLayout
+{
+    HRESULT SetPairKerning(
+        BOOL is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT GetPairKerning(
+        UINT32 position,
+        BOOL *is_pairkerning_enabled,
+        DWRITE_TEXT_RANGE *range);
+
+    HRESULT SetCharacterSpacing(
+        FLOAT leading_spacing,
+        FLOAT trailing_spacing,
+        FLOAT minimum_advance_width,
+        DWRITE_TEXT_RANGE range);
+
+    HRESULT GetCharacterSpacing(
+        UINT32 position,
+        FLOAT* leading_spacing,
+        FLOAT* trailing_spacing,
+        FLOAT* minimum_advance_width,
+        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+};
+
+typedef enum DWRITE_TEXT_ANTIALIAS_MODE
+{
+    DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
+    DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE
+} DWRITE_TEXT_ANTIALIAS_MODE;
+
+[
+local,
+object,
+uuid(791e8298-3ef3-4230-9880-c9bdecc42064)
+]
+interface IDWriteBitmapRenderTarget1 : IDWriteBitmapRenderTarget
+{
+    DWRITE_TEXT_ANTIALIAS_MODE GetTextAntialiasMode();
+    HRESULT SetTextAntialiasMode(DWRITE_TEXT_ANTIALIAS_MODE mode);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h
new file mode 100644
index 0000000..8887705
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2004 Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXDIAG_H
+#define __WINE_DXDIAG_H
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define DXDIAG_DX9_SDK_VERSION 111
+
+#define _FACDXDIAG  0x007
+#define MAKE_DXDIAGHRESULT( code )  MAKE_HRESULT( 1, _FACDXDIAG, code )
+
+/*
+ * DXDiag Errors
+ */
+#define DXDIAG_E_INSUFFICIENT_BUFFER       MAKE_DXDIAGHRESULT(0x007A)
+
+
+/*****************************************************************************
+ * DXDiag structures Typedefs
+ */
+typedef struct _DXDIAG_INIT_PARAMS {
+  DWORD  dwSize;
+  DWORD  dwDxDiagHeaderVersion;
+  BOOL   bAllowWHQLChecks;
+  VOID*  pReserved;
+} DXDIAG_INIT_PARAMS;
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DxDiagProvider,   0xA65B8071, 0x3BFE, 0x4213, 0x9A, 0x5B, 0x49, 0x1D, 0xA4, 0x46, 0x1C, 0xA7);
+
+/* IIDs */
+DEFINE_GUID(IID_IDxDiagProvider,    0x9C6B4CB0, 0x23F8, 0x49CC, 0xA3, 0xED, 0x45, 0xA5, 0x50, 0x00, 0xA6, 0xD2);
+DEFINE_GUID(IID_IDxDiagContainer,   0x7D0F462F, 0x4064, 0x4862, 0xBC, 0x7F, 0x93, 0x3E, 0x50, 0x58, 0xC1, 0x0F);
+
+/* typedef definitions */
+typedef struct IDxDiagProvider *LPDXDIAGPROVIDER,   *PDXDIAGPROVIDER;
+typedef struct IDxDiagContainer *LPDXDIAGCONTAINER,  *PDXDIAGCONTAINER;
+
+/*****************************************************************************
+ * IDxDiagContainer interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetProp
+#endif
+
+#define INTERFACE IDxDiagContainer
+DECLARE_INTERFACE_(IDxDiagContainer,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDxDiagContainer methods ***/
+    STDMETHOD(GetNumberOfChildContainers)(THIS_  DWORD* pdwCount) PURE;
+    STDMETHOD(EnumChildContainerNames)(THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE;
+    STDMETHOD(GetChildContainer)(THIS_ LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) PURE;
+    STDMETHOD(GetNumberOfProps)(THIS_ DWORD* pdwCount) PURE;
+    STDMETHOD(EnumPropNames)(THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE;
+    STDMETHOD(GetProp)(THIS_ LPCWSTR pwszPropName, VARIANT* pvarProp) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDxDiagContainer_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDxDiagContainer_AddRef(p)                           (p)->lpVtbl->AddRef(p)
+#define	IDxDiagContainer_Release(p)                          (p)->lpVtbl->Release(p)
+/*** IDxDiagContainer methods ***/
+#define IDxDiagContainer_GetNumberOfChildContainers(p,a)     (p)->lpVtbl->GetNumberOfChildContainers(p,a)
+#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c)    (p)->lpVtbl->EnumChildContainerNames(p,a,b,c)
+#define IDxDiagContainer_GetChildContainer(p,a,b)            (p)->lpVtbl->GetChildContainer(p,a,b)
+#define IDxDiagContainer_GetNumberOfProps(p,a)               (p)->lpVtbl->GetNumberOfProps(p,a)
+#define IDxDiagContainer_EnumPropNames(p,a,b,c)              (p)->lpVtbl->EnumPropNames(p,a,b,c)
+#define IDxDiagContainer_GetProp(p,a,b)                      (p)->lpVtbl->GetProp(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define	IDxDiagContainer_QueryInterface(p,a,b)               (p)->QueryInterface(a,b)
+#define	IDxDiagContainer_AddRef(p)                           (p)->AddRef()
+#define	IDxDiagContainer_Release(p)                          (p)->Release()
+/*** IDxDiagContainer methods ***/
+#define IDxDiagContainer_GetNumberOfChildContainers(p,a)     (p)->GetNumberOfChildContainers(a)
+#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c)    (p)->EnumChildContainerNames(a,b,c)
+#define IDxDiagContainer_GetChildContainer(p,a,b)            (p)->GetChildContainer(a,b)
+#define IDxDiagContainer_GetNumberOfProps(p,a)               (p)->GetNumberOfProps(a)
+#define IDxDiagContainer_EnumPropNames(p,a,b,c)              (p)->EnumPropNames(a,b,c)
+#define IDxDiagContainer_GetProp(p,a,b)                      (p)->GetProp(a,b)
+#endif
+
+/*****************************************************************************
+ * IDxDiagProvider interface
+ */
+#define INTERFACE IDxDiagProvider
+DECLARE_INTERFACE_(IDxDiagProvider,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDxDiagProvider methods ***/
+    STDMETHOD(Initialize)(THIS_ DXDIAG_INIT_PARAMS* pParams) PURE;
+    STDMETHOD(GetRootContainer)(THIS_ IDxDiagContainer** ppInstance) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define	IDxDiagProvider_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)
+#define	IDxDiagProvider_AddRef(p)                            (p)->lpVtbl->AddRef(p)
+#define	IDxDiagProvider_Release(p)                           (p)->lpVtbl->Release(p)
+/*** IDxDiagProvider methods ***/
+#define IDxDiagProvider_Initialize(p,a)                      (p)->lpVtbl->Initialize(p,a)
+#define IDxDiagProvider_GetRootContainer(p,a)                (p)->lpVtbl->GetRootContainer(p,a)
+#else
+/*** IUnknown methods ***/
+#define	IDxDiagProvider_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)
+#define	IDxDiagProvider_AddRef(p)                            (p)->AddRef()
+#define	IDxDiagProvider_Release(p)                           (p)->Release()
+/*** IDxDiagProvider methods ***/
+#define IDxDiagProvider_Initialize(p,a)                      (p)->Initialize(a)
+#define IDxDiagProvider_GetRootContainer(p,a)                (p)->GetRootContainer(a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h
new file mode 100644
index 0000000..9f52a7a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXERR8_H
+#define __WINE_DXERR8_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+const char*     WINAPI DXGetErrorString8A(HRESULT hr);
+const WCHAR*    WINAPI DXGetErrorString8W(HRESULT hr);
+#define DXGetErrorString8 WINELIB_NAME_AW(DXGetErrorString8)
+
+const char*    WINAPI DXGetErrorDescription8A(HRESULT hr);
+const WCHAR*   WINAPI DXGetErrorDescription8W(HRESULT hr);
+#define DXGetErrorDescription8 WINELIB_NAME_AW(DXGetErrorDescription8)
+
+HRESULT WINAPI  DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char*  strMsg, BOOL bPopMsgBox);
+HRESULT WINAPI  DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);
+#define DXTrace WINELIB_NAME_AW(DXTrace)
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXTRACE_MSG(str)                DXTrace(__FILE__, (DWORD)__LINE__, 0,  str, FALSE)
+#define DXTRACE_ERR(str,hr)             DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE)
+#define DXTRACE_ERR_NOMSGBOX(str,hr)    DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE)
+#else
+#define DXTRACE_MSG(str)                __MSABI_LONG(0)
+#define DXTRACE_ERR(str,hr)             (hr)
+#define DXTRACE_ERR_NOMSGBOX(str,hr)    (hr)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DXERR8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h
new file mode 100644
index 0000000..0d16d64
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXERR9_H
+#define __WINE_DXERR9_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+const char*     WINAPI DXGetErrorString9A(HRESULT hr);
+const WCHAR*    WINAPI DXGetErrorString9W(HRESULT hr);
+#define DXGetErrorString9 WINELIB_NAME_AW(DXGetErrorString9)
+
+const char*     WINAPI DXGetErrorDescription9A(HRESULT hr);
+const WCHAR*    WINAPI DXGetErrorDescription9W(HRESULT hr);
+#define DXGetErrorDescription9 WINELIB_NAME_AW(DXGetErrorDescription9)
+
+HRESULT WINAPI DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char*  strMsg, BOOL bPopMsgBox);
+HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);
+#define DXTrace WINELIB_NAME_AW(DXTrace)
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXTRACE_MSG(str)                DXTrace(__FILE__, (DWORD)__LINE__, 0,  str, FALSE)
+#define DXTRACE_ERR(str,hr)             DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE)
+#define DXTRACE_ERR_NOMSGBOX(str,hr)    DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE)
+#else
+#define DXTRACE_MSG(str)                __MSABI_LONG(0)
+#define DXTRACE_ERR(str,hr)             (hr)
+#define DXTRACE_ERR_NOMSGBOX(str,hr)    (hr)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DXERR9_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h
new file mode 100644
index 0000000..f7e1fdc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXFILE_H
+#define __WINE_DXFILE_H
+
+#include <objbase.h>
+#include <winnt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef DWORD DXFILEFORMAT;
+
+#define DXFILEFORMAT_BINARY     0
+#define DXFILEFORMAT_TEXT       1
+#define DXFILEFORMAT_COMPRESSED 2
+
+typedef DWORD DXFILELOADOPTIONS;
+
+#define DXFILELOAD_FROMFILE     __MSABI_LONG(0x00)
+#define DXFILELOAD_FROMRESOURCE __MSABI_LONG(0x01)
+#define DXFILELOAD_FROMMEMORY   __MSABI_LONG(0x02)
+#define DXFILELOAD_FROMSTREAM   __MSABI_LONG(0x04)
+#define DXFILELOAD_FROMURL      __MSABI_LONG(0x08)
+
+typedef struct _DXFILELOADRESOURCE {
+    HMODULE hModule;
+    LPCSTR /*LPCTSTR*/ lpName;
+    LPCSTR /*LPCTSTR*/ lpType;
+} DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE;
+
+typedef struct _DXFILELOADMEMORY {
+    LPVOID lpMemory;
+    DWORD dSize;
+} DXFILELOADMEMORY, *LPDXFILELOADMEMORY;
+
+typedef struct IDirectXFile *LPDIRECTXFILE;
+typedef struct IDirectXFileEnumObject *LPDIRECTXFILEENUMOBJECT;
+typedef struct IDirectXFileSaveObject *LPDIRECTXFILESAVEOBJECT;
+typedef struct IDirectXFileObject *LPDIRECTXFILEOBJECT;
+typedef struct IDirectXFileData *LPDIRECTXFILEDATA;
+typedef struct IDirectXFileDataReference *LPDIRECTXFILEDATAREFERENCE;
+typedef struct IDirectXFileBinary *LPDIRECTXFILEBINARY;
+
+STDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile);
+
+#define INTERFACE IDirectXFile
+DECLARE_INTERFACE_(IDirectXFile,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectXFile methods ***/
+    STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS, LPDIRECTXFILEENUMOBJECT *) PURE;
+    STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT, LPDIRECTXFILESAVEOBJECT *) PURE;
+    STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFile_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFile_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFile methods ***/
+#define IDirectXFile_CreateEnumObject(p,a,b,c) (p)->lpVtbl->CreateEnumObject(p,a,b,c)
+#define IDirectXFile_CreateSaveObject(p,a,b,c) (p)->lpVtbl->CreateSaveObject(p,a,b,c)
+#define IDirectXFile_RegisterTemplates(p,a,b)  (p)->lpVtbl->RegisterTemplates(p,a,b)
+#endif
+
+#define INTERFACE IDirectXFileEnumObject
+DECLARE_INTERFACE_(IDirectXFileEnumObject,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectXFileEnumObject methods ***/
+    STDMETHOD(GetNextDataObject)    (THIS_ LPDIRECTXFILEDATA *) PURE;
+    STDMETHOD(GetDataObjectById)    (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE;
+    STDMETHOD(GetDataObjectByName)  (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFileEnumObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileEnumObject_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFileEnumObject_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFileEnumObject methods ***/
+#define IDirectXFileEnumObject_GetNextDataObject(p,a)     (p)->lpVtbl->GetNextDataObject(p,a)
+#define IDirectXFileEnumObject_GetDataObjectById(p,a,b)   (p)->lpVtbl->GetDataObjectById(p,a,b)
+#define IDirectXFileEnumObject_GetDataObjectByName(p,a,b) (p)->lpVtbl->GetDataObjectByName(p,a,b)
+#endif
+
+#define INTERFACE IDirectXFileSaveObject
+DECLARE_INTERFACE_(IDirectXFileSaveObject,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectXFileSaveObject methods ***/
+    STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE;
+    STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *, DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE;
+    STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFileSaveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileSaveObject_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFileSaveObject_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFileSaveObject methods ***/
+#define IDirectXFileSaveObject_SaveTemplates(p,a,b)            (p)->lpVtbl->SaveTemplates(p,a,b)
+#define IDirectXFileSaveObject_CreateDataObject(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDataObject(p,a,b,c,d,e,f)
+#define IDirectXFileSaveObject_SaveData(p,a)                   (p)->lpVtbl->SaveData(p,a)
+#endif
+
+#define IUNKNOWN_METHODS(kind) \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) kind; \
+    STDMETHOD_(ULONG,AddRef)(THIS) kind; \
+    STDMETHOD_(ULONG,Release)(THIS) kind
+
+#define IDIRECTXFILEOBJECT_METHODS(kind) \
+    STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) kind; \
+    STDMETHOD(GetId) (THIS_ LPGUID) kind
+
+#define INTERFACE IDirectXFileObject
+DECLARE_INTERFACE_(IDirectXFileObject,IUnknown)
+{
+    IUNKNOWN_METHODS(PURE);
+    IDIRECTXFILEOBJECT_METHODS(PURE);
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFileObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileObject_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFileObject_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFileObject methods ***/
+#define IDirectXFileObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileObject_GetId(p,a)     (p)->lpVtbl->GetId(p,a)
+#endif
+
+#define INTERFACE IDirectXFileData
+DECLARE_INTERFACE_(IDirectXFileData,IDirectXFileObject)
+{
+    IUNKNOWN_METHODS(PURE);
+    IDIRECTXFILEOBJECT_METHODS(PURE);
+    /*** IDirectXFileData methods ***/
+    STDMETHOD(GetData) (THIS_ LPCSTR, DWORD *, void **) PURE;
+    STDMETHOD(GetType) (THIS_ const GUID **) PURE;
+    STDMETHOD(GetNextObject) (THIS_ LPDIRECTXFILEOBJECT *) PURE;
+    STDMETHOD(AddDataObject) (THIS_ LPDIRECTXFILEDATA) PURE;
+    STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE;
+    STDMETHOD(AddBinaryObject) (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileData_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFileData_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFileObject methods ***/
+#define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileData_GetId(p,a)     (p)->lpVtbl->GetId(p,a)
+    /*** IDirectXFileData methods ***/
+#define IDirectXFileData_GetData(p,a,b,c)             (p)->lpVtbl->GetData(p,a,b,c)
+#define IDirectXFileData_GetType(p,a)                 (p)->lpVtbl->GetType(p,a)
+#define IDirectXFileData_GetNextObject(p,a)           (p)->lpVtbl->GetNextObject(p,a)
+#define IDirectXFileData_AddDataObject(p,a)           (p)->lpVtbl->AddDataObject(p,a)
+#define IDirectXFileData_AddDataReference(p,a,b)      (p)->lpVtbl->AddDataReference(p,a,b)
+#define IDirectXFileData_AddBinaryObject(p,a,b,c,d,e) (p)->lpVtbl->AddBinaryObject(p,a,b,c,d,e)
+#endif
+
+#define INTERFACE IDirectXFileDataReference
+DECLARE_INTERFACE_(IDirectXFileDataReference,IDirectXFileObject)
+{
+    IUNKNOWN_METHODS(PURE);
+    IDIRECTXFILEOBJECT_METHODS(PURE);
+    /*** IDirectXFileDataReference methods ***/
+    STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFileDataReference_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileDataReference_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFileDataReference_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFileObject methods ***/
+#define IDirectXFileDataReference_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileDataReference_GetId(p,a)     (p)->lpVtbl->GetId(p,a)
+    /*** IDirectXFileDataReference methods ***/
+#define IDirectXFileDataReference_Resolve(p,a) (p)->lpVtbl->Resolve(p,a)
+#endif
+
+#define INTERFACE IDirectXFileBinary
+DECLARE_INTERFACE_(IDirectXFileBinary,IDirectXFileObject)
+{
+    IUNKNOWN_METHODS(PURE);
+    IDIRECTXFILEOBJECT_METHODS(PURE);
+    /*** IDirectXFileBinary methods ***/
+    STDMETHOD(GetSize)      (THIS_ DWORD *) PURE;
+    STDMETHOD(GetMimeType)  (THIS_ LPCSTR *) PURE;
+    STDMETHOD(Read)         (THIS_ LPVOID, DWORD, LPDWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+    /*** IUnknown methods ***/
+#define IDirectXFileBinary_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileBinary_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirectXFileBinary_Release(p)            (p)->lpVtbl->Release(p)
+    /*** IDirectXFileObject methods ***/
+#define IDirectXFileBinary_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileBinary_GetId(p,a)     (p)->lpVtbl->GetId(p,a)
+    /*** IDirectXFileBinary methods ***/
+#define IDirectXFileBinary_GetSize(p,a)     (p)->lpVtbl->GetSize(p,a)
+#define IDirectXFileBinary_GetMimeType(p,a) (p)->lpVtbl->GetMimeType(p,a)
+#define IDirectXFileBinary_Read(p,a,b,c)    (p)->lpVtbl->Read(p,a,b,c)
+#endif
+
+/* DirectXFile Object CLSID */
+DEFINE_GUID(CLSID_CDirectXFile,             0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+
+/* DirectX File Interface GUIDs */
+DEFINE_GUID(IID_IDirectXFile,               0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileEnumObject,     0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileSaveObject,     0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileObject,         0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileData,           0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileDataReference,  0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileBinary,         0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+/* DirectX File Header template's GUID */
+DEFINE_GUID(TID_DXFILEHeader,               0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+/* DirectX File errors */
+#define _FACDD  0x876
+#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )
+
+#define DXFILE_OK   0
+
+#define DXFILEERR_BADOBJECT                 MAKE_DDHRESULT(850)
+#define DXFILEERR_BADVALUE                  MAKE_DDHRESULT(851)
+#define DXFILEERR_BADTYPE                   MAKE_DDHRESULT(852)
+#define DXFILEERR_BADSTREAMHANDLE           MAKE_DDHRESULT(853)
+#define DXFILEERR_BADALLOC                  MAKE_DDHRESULT(854)
+#define DXFILEERR_NOTFOUND                  MAKE_DDHRESULT(855)
+#define DXFILEERR_NOTDONEYET                MAKE_DDHRESULT(856)
+#define DXFILEERR_FILENOTFOUND              MAKE_DDHRESULT(857)
+#define DXFILEERR_RESOURCENOTFOUND          MAKE_DDHRESULT(858)
+#define DXFILEERR_URLNOTFOUND               MAKE_DDHRESULT(859)
+#define DXFILEERR_BADRESOURCE               MAKE_DDHRESULT(860)
+#define DXFILEERR_BADFILETYPE               MAKE_DDHRESULT(861)
+#define DXFILEERR_BADFILEVERSION            MAKE_DDHRESULT(862)
+#define DXFILEERR_BADFILEFLOATSIZE          MAKE_DDHRESULT(863)
+#define DXFILEERR_BADFILECOMPRESSIONTYPE    MAKE_DDHRESULT(864)
+#define DXFILEERR_BADFILE                   MAKE_DDHRESULT(865)
+#define DXFILEERR_PARSEERROR                MAKE_DDHRESULT(866)
+#define DXFILEERR_NOTEMPLATE                MAKE_DDHRESULT(867)
+#define DXFILEERR_BADARRAYSIZE              MAKE_DDHRESULT(868)
+#define DXFILEERR_BADDATAREFERENCE          MAKE_DDHRESULT(869)
+#define DXFILEERR_INTERNALERROR             MAKE_DDHRESULT(870)
+#define DXFILEERR_NOMOREOBJECTS             MAKE_DDHRESULT(871)
+#define DXFILEERR_BADINTRINSICS             MAKE_DDHRESULT(872)
+#define DXFILEERR_NOMORESTREAMHANDLES       MAKE_DDHRESULT(873)
+#define DXFILEERR_NOMOREDATA                MAKE_DDHRESULT(874)
+#define DXFILEERR_BADCACHEFILE              MAKE_DDHRESULT(875)
+#define DXFILEERR_NOINTERNET                MAKE_DDHRESULT(876)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DXFILE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl
new file mode 100644
index 0000000..32ba3f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl
@@ -0,0 +1,465 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgitype.h";
+
+const UINT _FACDXGI = 0x87a;
+
+cpp_quote("#define MAKE_DXGI_STATUS(x)                         MAKE_HRESULT(0, _FACDXGI, x)")
+cpp_quote("#define DXGI_STATUS_OCCLUDED                        MAKE_DXGI_STATUS(1)")
+cpp_quote("#define DXGI_STATUS_CLIPPED                         MAKE_DXGI_STATUS(2)")
+cpp_quote("#define DXGI_STATUS_NO_REDIRECTION                  MAKE_DXGI_STATUS(4)")
+cpp_quote("#define DXGI_STATUS_NO_DESKTOP_ACCESS               MAKE_DXGI_STATUS(5)")
+cpp_quote("#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE    MAKE_DXGI_STATUS(6)")
+cpp_quote("#define DXGI_STATUS_MODE_CHANGED                    MAKE_DXGI_STATUS(7)")
+cpp_quote("#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS         MAKE_DXGI_STATUS(8)")
+
+cpp_quote("#define MAKE_DXGI_HRESULT(x)                        MAKE_HRESULT(1, _FACDXGI, x)")
+cpp_quote("#define DXGI_ERROR_INVALID_CALL                     MAKE_DXGI_HRESULT(1)")
+cpp_quote("#define DXGI_ERROR_NOT_FOUND                        MAKE_DXGI_HRESULT(2)")
+cpp_quote("#define DXGI_ERROR_MORE_DATA                        MAKE_DXGI_HRESULT(3)")
+cpp_quote("#define DXGI_ERROR_UNSUPPORTED                      MAKE_DXGI_HRESULT(4)")
+cpp_quote("#define DXGI_ERROR_DEVICE_REMOVED                   MAKE_DXGI_HRESULT(5)")
+cpp_quote("#define DXGI_ERROR_DEVICE_HUNG                      MAKE_DXGI_HRESULT(6)")
+cpp_quote("#define DXGI_ERROR_DEVICE_RESET                     MAKE_DXGI_HRESULT(7)")
+cpp_quote("#define DXGI_ERROR_WAS_STILL_DRAWING                MAKE_DXGI_HRESULT(10)")
+cpp_quote("#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT        MAKE_DXGI_HRESULT(11)")
+cpp_quote("#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE     MAKE_DXGI_HRESULT(12)")
+cpp_quote("#define DXGI_ERROR_DRIVER_INTERNAL_ERROR            MAKE_DXGI_HRESULT(32)")
+cpp_quote("#define DXGI_ERROR_NONEXCLUSIVE                     MAKE_DXGI_HRESULT(33)")
+cpp_quote("#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE          MAKE_DXGI_HRESULT(34)")
+
+cpp_quote("#if 0")
+typedef HANDLE HMONITOR;
+typedef struct _LUID {
+    DWORD LowPart;
+    LONG HighPart;
+} LUID, *PLUID;
+cpp_quote("#endif")
+
+typedef UINT DXGI_USAGE;
+const DXGI_USAGE DXGI_USAGE_SHADER_INPUT            = 0x10L;
+const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT    = 0x20L;
+const DXGI_USAGE DXGI_USAGE_BACK_BUFFER             = 0x40L;
+const DXGI_USAGE DXGI_USAGE_SHARED                  = 0x80L;
+const DXGI_USAGE DXGI_USAGE_READ_ONLY               = 0x100L;
+
+const UINT DXGI_ENUM_MODES_INTERLACED               = 1;
+const UINT DXGI_ENUM_MODES_SCALING                  = 2;
+
+typedef enum DXGI_SWAP_EFFECT {
+    DXGI_SWAP_EFFECT_DISCARD    = 0,
+    DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
+} DXGI_SWAP_EFFECT;
+
+typedef enum DXGI_RESIDENCY {
+    DXGI_RESIDENCY_FULLY_RESIDENT               = 1,
+    DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY    = 2,
+    DXGI_RESIDENCY_EVICTED_TO_DISK              = 3,
+} DXGI_RESIDENCY;
+
+typedef struct DXGI_SURFACE_DESC {
+    UINT Width;
+    UINT Height;
+    DXGI_FORMAT Format;
+    DXGI_SAMPLE_DESC SampleDesc;
+} DXGI_SURFACE_DESC;
+
+typedef struct DXGI_MAPPED_RECT {
+    INT Pitch;
+    BYTE *pBits;
+} DXGI_MAPPED_RECT;
+
+typedef struct DXGI_OUTPUT_DESC {
+    WCHAR DeviceName[32];
+    RECT DesktopCoordinates;
+    BOOL AttachedToDesktop;
+    DXGI_MODE_ROTATION Rotation;
+    HMONITOR Monitor;
+} DXGI_OUTPUT_DESC;
+
+typedef struct DXGI_FRAME_STATISTICS {
+    UINT PresentCount;
+    UINT PresentRefreshCount;
+    UINT SyncRefreshCount;
+    LARGE_INTEGER SyncQPCTime;
+    LARGE_INTEGER SyncGPUTime;
+} DXGI_FRAME_STATISTICS;
+
+typedef struct DXGI_ADAPTER_DESC {
+    WCHAR Description[128];
+    UINT VendorId;
+    UINT DeviceId;
+    UINT SubSysId;
+    UINT Revision;
+    SIZE_T DedicatedVideoMemory;
+    SIZE_T DedicatedSystemMemory;
+    SIZE_T SharedSystemMemory;
+    LUID AdapterLuid;
+} DXGI_ADAPTER_DESC;
+
+typedef enum DXGI_SWAP_CHAIN_FLAG {
+    DXGI_SWAP_CHAIN_FLAG_NONPREROTATED      = 1,
+    DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH  = 2,
+    DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE     = 4
+} DXGI_SWAP_CHAIN_FLAG;
+
+typedef struct DXGI_SWAP_CHAIN_DESC {
+    DXGI_MODE_DESC BufferDesc;
+    DXGI_SAMPLE_DESC SampleDesc;
+    DXGI_USAGE BufferUsage;
+    UINT BufferCount;
+    HWND OutputWindow;
+    BOOL Windowed;
+    DXGI_SWAP_EFFECT SwapEffect;
+    UINT Flags;
+} DXGI_SWAP_CHAIN_DESC;
+
+typedef struct DXGI_SHARED_RESOURCE {
+    HANDLE Handle;
+} DXGI_SHARED_RESOURCE;
+
+[
+    object,
+    local,
+    uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)
+]
+interface IDXGIObject : IUnknown
+{
+    HRESULT SetPrivateData(
+        [in] REFGUID guid,
+        [in] UINT data_size,
+        [in] const void *data
+    );
+    HRESULT SetPrivateDataInterface(
+        [in] REFGUID guid,
+        [in] const IUnknown *object
+    );
+    HRESULT GetPrivateData(
+        [in] REFGUID guid,
+        [in, out] UINT *data_size,
+        [out] void *data
+    );
+    HRESULT GetParent(
+        [in] REFIID riid,
+        [out] void **parent
+    );
+}
+
+[
+    object,
+    local,
+    uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)
+]
+interface IDXGIDeviceSubObject : IDXGIObject
+{
+    HRESULT GetDevice(
+        [in] REFIID riid,
+        [out] void **device
+    );
+}
+
+[
+    object,
+    uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIResource : IDXGIDeviceSubObject
+{
+    HRESULT GetSharedHandle([out] HANDLE *pSharedHandle);
+    HRESULT GetUsage([out] DXGI_USAGE *pUsage);
+    HRESULT SetEvictionPriority([in] UINT EvictionPriority);
+    HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority);
+}
+
+[
+    object,
+    uuid(9d8e1289-d7b3-465f-8126-250e349af85d),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIKeyedMutex : IDXGIDeviceSubObject
+{
+    HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds);
+    HRESULT ReleaseSync([in] UINT64 Key);
+}
+
+[
+    object,
+    local,
+    uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)
+]
+interface IDXGISurface : IDXGIDeviceSubObject
+{
+    HRESULT GetDesc(
+        [out] DXGI_SURFACE_DESC *desc
+    );
+    HRESULT Map(
+        [out] DXGI_MAPPED_RECT *mapped_rect,
+        [in] UINT flags
+    );
+    HRESULT Unmap(
+    );
+}
+
+[
+    object,
+    local,
+    uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)
+]
+interface IDXGIOutput : IDXGIObject
+{
+    HRESULT GetDesc(
+        [out] DXGI_OUTPUT_DESC *desc
+    );
+    HRESULT GetDisplayModeList(
+        [in] DXGI_FORMAT format,
+        [in] UINT flags,
+        [in, out] UINT *mode_count,
+        [out] DXGI_MODE_DESC *desc
+    );
+    HRESULT FindClosestMatchingMode(
+        [in] const DXGI_MODE_DESC *mode,
+        [out] DXGI_MODE_DESC *closest_match,
+        [in] IUnknown *device
+    );
+    HRESULT WaitForVBlank(
+    );
+    HRESULT TakeOwnership(
+        [in] IUnknown *device,
+        [in] BOOL exclusive
+    );
+    void ReleaseOwnership(
+    );
+    HRESULT GetGammaControlCapabilities(
+        [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps
+    );
+    HRESULT SetGammaControl(
+        [in] const DXGI_GAMMA_CONTROL *gamma_control
+    );
+    HRESULT GetGammaControl(
+        [out] DXGI_GAMMA_CONTROL *gamma_control
+    );
+    HRESULT SetDisplaySurface(
+        [in] IDXGISurface *surface
+    );
+    HRESULT GetDisplaySurfaceData(
+        [in] IDXGISurface *surface
+    );
+    HRESULT GetFrameStatistics(
+        [out] DXGI_FRAME_STATISTICS *stats
+    );
+}
+
+[
+    object,
+    local,
+    uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)
+]
+interface IDXGIAdapter : IDXGIObject
+{
+    HRESULT EnumOutputs(
+        [in] UINT output_idx,
+        [in, out] IDXGIOutput **output
+    );
+    HRESULT GetDesc(
+        [out] DXGI_ADAPTER_DESC *desc
+    );
+    HRESULT CheckInterfaceSupport(
+        [in] REFGUID guid,
+        [out] LARGE_INTEGER *umd_version
+    );
+}
+
+cpp_quote("#define DXGI_MAX_SWAP_CHAIN_BUFFERS  (16)")
+
+cpp_quote("#define DXGI_PRESENT_TEST                   __MSABI_LONG(0x00000001U)")
+cpp_quote("#define DXGI_PRESENT_DO_NOT_SEQUENCE        __MSABI_LONG(0x00000002U)")
+cpp_quote("#define DXGI_PRESENT_RESTART                __MSABI_LONG(0x00000004U)")
+cpp_quote("#define DXGI_PRESENT_DO_NOT_WAIT            __MSABI_LONG(0x00000008U)")
+cpp_quote("#define DXGI_PRESENT_STEREO_PREFER_RIGHT    __MSABI_LONG(0x00000010U)")
+cpp_quote("#define DXGI_PRESENT_STEREO_TEMPORARY_MONO  __MSABI_LONG(0x00000020U)")
+cpp_quote("#define DXGI_PRESENT_RESTRICT_TO_OUTPUT     __MSABI_LONG(0x00000040U)")
+
+[
+    object,
+    local,
+    uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)
+]
+interface IDXGISwapChain : IDXGIDeviceSubObject
+{
+    HRESULT Present(
+        [in] UINT sync_interval,
+        [in] UINT flags
+    );
+    HRESULT GetBuffer(
+        [in] UINT buffer_idx,
+        [in] REFIID riid,
+        [in, out] void **surface
+    );
+    HRESULT SetFullscreenState(
+        [in] BOOL fullscreen,
+        [in] IDXGIOutput *target
+    );
+    HRESULT GetFullscreenState(
+        [out] BOOL *fullscreen,
+        [out] IDXGIOutput **target
+    );
+    HRESULT GetDesc(
+        [out] DXGI_SWAP_CHAIN_DESC *desc
+    );
+    HRESULT ResizeBuffers(
+        [in] UINT buffer_count,
+        [in] UINT width,
+        [in] UINT height,
+        [in] DXGI_FORMAT format,
+        [in] UINT flags
+    );
+    HRESULT ResizeTarget(
+        [in] const DXGI_MODE_DESC *target_mode_desc
+    );
+    HRESULT GetContainingOutput(
+        [out] IDXGIOutput **output
+    );
+    HRESULT GetFrameStatistics(
+        [out] DXGI_FRAME_STATISTICS *stats
+    );
+    HRESULT GetLastPresentCount(
+        [out] UINT *last_present_count
+    );
+}
+
+cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES  0x1")
+cpp_quote("#define DXGI_MWA_NO_ALT_ENTER       0x2")
+cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN    0x4")
+cpp_quote("#define DXGI_MWA_VALID              0x7")
+
+[
+    object,
+    local,
+    uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)
+]
+interface IDXGIFactory : IDXGIObject
+{
+    HRESULT EnumAdapters(
+        [in] UINT adapter_idx,
+        [out] IDXGIAdapter **adapter
+    );
+    HRESULT MakeWindowAssociation(
+        [in] HWND window,
+        [in] UINT flags
+    );
+    HRESULT GetWindowAssociation(
+        [in] HWND *window
+    );
+    HRESULT CreateSwapChain(
+        [in] IUnknown *device,
+        [in] DXGI_SWAP_CHAIN_DESC *desc,
+        [out] IDXGISwapChain **swapchain
+    );
+    HRESULT CreateSoftwareAdapter(
+        [in] HMODULE swrast,
+        [out] IDXGIAdapter **adapter
+    );
+}
+
+[local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory);
+
+[
+    object,
+    local,
+    uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)
+]
+interface IDXGIDevice : IDXGIObject
+{
+    HRESULT GetAdapter(
+        [out] IDXGIAdapter **adapter
+    );
+    HRESULT CreateSurface(
+        [in] const DXGI_SURFACE_DESC *desc,
+        [in] UINT surface_count,
+        [in] DXGI_USAGE usage,
+        [in] const DXGI_SHARED_RESOURCE *shared_resource,
+        [out] IDXGISurface **surface
+    );
+    HRESULT QueryResourceResidency(
+        [in] IUnknown *const *resources,
+        [out] DXGI_RESIDENCY *residency,
+        [in] UINT resource_count
+    );
+    HRESULT SetGPUThreadPriority(
+        [in] INT priority
+    );
+    HRESULT GetGPUThreadPriority(
+        [out] INT *priority
+    );
+}
+
+typedef enum DXGI_ADAPTER_FLAG {
+    DXGI_ADAPTER_FLAG_NONE         = 0,
+    DXGI_ADAPTER_FLAG_REMOTE       = 1,
+    DXGI_ADAPTER_FLAG_FORCE_DWORD  = 0xFFFFFFFF
+} DXGI_ADAPTER_FLAG;
+
+typedef struct DXGI_ADAPTER_DESC1 {
+    WCHAR  Description[128];
+    UINT   VendorId;
+    UINT   DeviceId;
+    UINT   SubSysId;
+    UINT   Revision;
+    SIZE_T DedicatedVideoMemory;
+    SIZE_T DedicatedSystemMemory;
+    SIZE_T SharedSystemMemory;
+    LUID   AdapterLuid;
+    UINT   Flags;
+} DXGI_ADAPTER_DESC1;
+
+[
+    object,
+    uuid(29038f61-3839-4626-91fd-086879011a05),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIAdapter1 : IDXGIAdapter
+{
+    HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc);
+}
+
+[
+    object,
+    uuid(770aae78-f26f-4dba-a829-253c83d1b387),
+    local,
+    pointer_default(unique)
+ ]
+interface IDXGIFactory1 : IDXGIFactory
+{
+    HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter);
+    BOOL IsCurrent();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h
new file mode 100644
index 0000000..0c731b5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __dxgiformat_h__
+#define __dxgiformat_h__
+
+#define DXGI_FORMAT_DEFINED 1
+
+typedef enum DXGI_FORMAT {
+    DXGI_FORMAT_UNKNOWN                 = 0,
+    DXGI_FORMAT_R32G32B32A32_TYPELESS   = 1,
+    DXGI_FORMAT_R32G32B32A32_FLOAT      = 2,
+    DXGI_FORMAT_R32G32B32A32_UINT       = 3,
+    DXGI_FORMAT_R32G32B32A32_SINT       = 4,
+    DXGI_FORMAT_R32G32B32_TYPELESS      = 5,
+    DXGI_FORMAT_R32G32B32_FLOAT         = 6,
+    DXGI_FORMAT_R32G32B32_UINT          = 7,
+    DXGI_FORMAT_R32G32B32_SINT          = 8,
+    DXGI_FORMAT_R16G16B16A16_TYPELESS   = 9,
+    DXGI_FORMAT_R16G16B16A16_FLOAT      = 10,
+    DXGI_FORMAT_R16G16B16A16_UNORM      = 11,
+    DXGI_FORMAT_R16G16B16A16_UINT       = 12,
+    DXGI_FORMAT_R16G16B16A16_SNORM      = 13,
+    DXGI_FORMAT_R16G16B16A16_SINT       = 14,
+    DXGI_FORMAT_R32G32_TYPELESS         = 15,
+    DXGI_FORMAT_R32G32_FLOAT            = 16,
+    DXGI_FORMAT_R32G32_UINT             = 17,
+    DXGI_FORMAT_R32G32_SINT             = 18,
+    DXGI_FORMAT_R32G8X24_TYPELESS       = 19,
+    DXGI_FORMAT_D32_FLOAT_S8X24_UINT    = 20,
+    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS= 21,
+    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
+    DXGI_FORMAT_R10G10B10A2_TYPELESS    = 23,
+    DXGI_FORMAT_R10G10B10A2_UNORM       = 24,
+    DXGI_FORMAT_R10G10B10A2_UINT        = 25,
+    DXGI_FORMAT_R11G11B10_FLOAT         = 26,
+    DXGI_FORMAT_R8G8B8A8_TYPELESS       = 27,
+    DXGI_FORMAT_R8G8B8A8_UNORM          = 28,
+    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB     = 29,
+    DXGI_FORMAT_R8G8B8A8_UINT           = 30,
+    DXGI_FORMAT_R8G8B8A8_SNORM          = 31,
+    DXGI_FORMAT_R8G8B8A8_SINT           = 32,
+    DXGI_FORMAT_R16G16_TYPELESS         = 33,
+    DXGI_FORMAT_R16G16_FLOAT            = 34,
+    DXGI_FORMAT_R16G16_UNORM            = 35,
+    DXGI_FORMAT_R16G16_UINT             = 36,
+    DXGI_FORMAT_R16G16_SNORM            = 37,
+    DXGI_FORMAT_R16G16_SINT             = 38,
+    DXGI_FORMAT_R32_TYPELESS            = 39,
+    DXGI_FORMAT_D32_FLOAT               = 40,
+    DXGI_FORMAT_R32_FLOAT               = 41,
+    DXGI_FORMAT_R32_UINT                = 42,
+    DXGI_FORMAT_R32_SINT                = 43,
+    DXGI_FORMAT_R24G8_TYPELESS          = 44,
+    DXGI_FORMAT_D24_UNORM_S8_UINT       = 45,
+    DXGI_FORMAT_R24_UNORM_X8_TYPELESS   = 46,
+    DXGI_FORMAT_X24_TYPELESS_G8_UINT    = 47,
+    DXGI_FORMAT_R8G8_TYPELESS           = 48,
+    DXGI_FORMAT_R8G8_UNORM              = 49,
+    DXGI_FORMAT_R8G8_UINT               = 50,
+    DXGI_FORMAT_R8G8_SNORM              = 51,
+    DXGI_FORMAT_R8G8_SINT               = 52,
+    DXGI_FORMAT_R16_TYPELESS            = 53,
+    DXGI_FORMAT_R16_FLOAT               = 54,
+    DXGI_FORMAT_D16_UNORM               = 55,
+    DXGI_FORMAT_R16_UNORM               = 56,
+    DXGI_FORMAT_R16_UINT                = 57,
+    DXGI_FORMAT_R16_SNORM               = 58,
+    DXGI_FORMAT_R16_SINT                = 59,
+    DXGI_FORMAT_R8_TYPELESS             = 60,
+    DXGI_FORMAT_R8_UNORM                = 61,
+    DXGI_FORMAT_R8_UINT                 = 62,
+    DXGI_FORMAT_R8_SNORM                = 63,
+    DXGI_FORMAT_R8_SINT                 = 64,
+    DXGI_FORMAT_A8_UNORM                = 65,
+    DXGI_FORMAT_R1_UNORM                = 66,
+    DXGI_FORMAT_R9G9B9E5_SHAREDEXP      = 67,
+    DXGI_FORMAT_R8G8_B8G8_UNORM         = 68,
+    DXGI_FORMAT_G8R8_G8B8_UNORM         = 69,
+    DXGI_FORMAT_BC1_TYPELESS            = 70,
+    DXGI_FORMAT_BC1_UNORM               = 71,
+    DXGI_FORMAT_BC1_UNORM_SRGB          = 72,
+    DXGI_FORMAT_BC2_TYPELESS            = 73,
+    DXGI_FORMAT_BC2_UNORM               = 74,
+    DXGI_FORMAT_BC2_UNORM_SRGB          = 75,
+    DXGI_FORMAT_BC3_TYPELESS            = 76,
+    DXGI_FORMAT_BC3_UNORM               = 77,
+    DXGI_FORMAT_BC3_UNORM_SRGB          = 78,
+    DXGI_FORMAT_BC4_TYPELESS            = 79,
+    DXGI_FORMAT_BC4_UNORM               = 80,
+    DXGI_FORMAT_BC4_SNORM               = 81,
+    DXGI_FORMAT_BC5_TYPELESS            = 82,
+    DXGI_FORMAT_BC5_UNORM               = 83,
+    DXGI_FORMAT_BC5_SNORM               = 84,
+    DXGI_FORMAT_B5G6R5_UNORM            = 85,
+    DXGI_FORMAT_B5G5R5A1_UNORM          = 86,
+    DXGI_FORMAT_B8G8R8A8_UNORM          = 87,
+    DXGI_FORMAT_B8G8R8X8_UNORM          = 88,
+    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
+    DXGI_FORMAT_B8G8R8A8_TYPELESS       = 90,
+    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB     = 91,
+    DXGI_FORMAT_B8G8R8X8_TYPELESS       = 92,
+    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB     = 93,
+    DXGI_FORMAT_BC6H_TYPELESS           = 94,
+    DXGI_FORMAT_BC6H_UF16               = 95,
+    DXGI_FORMAT_BC6H_SF16               = 96,
+    DXGI_FORMAT_BC7_TYPELESS            = 97,
+    DXGI_FORMAT_BC7_UNORM               = 98,
+    DXGI_FORMAT_BC7_UNORM_SRGB          = 99,
+    DXGI_FORMAT_AYUV                    = 100,
+    DXGI_FORMAT_Y410                    = 101,
+    DXGI_FORMAT_Y416                    = 102,
+    DXGI_FORMAT_NV12                    = 103,
+    DXGI_FORMAT_P010                    = 104,
+    DXGI_FORMAT_P016                    = 105,
+    DXGI_FORMAT_420_OPAQUE              = 106,
+    DXGI_FORMAT_YUY2                    = 107,
+    DXGI_FORMAT_Y210                    = 108,
+    DXGI_FORMAT_Y216                    = 109,
+    DXGI_FORMAT_NV11                    = 110,
+    DXGI_FORMAT_AI44                    = 111,
+    DXGI_FORMAT_IA44                    = 112,
+    DXGI_FORMAT_P8                      = 113,
+    DXGI_FORMAT_A8P8                    = 114,
+    DXGI_FORMAT_B4G4R4A4_UNORM          = 115,
+    DXGI_FORMAT_FORCE_UINT              = 0xffffffff
+} DXGI_FORMAT;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h
new file mode 100644
index 0000000..9e1562a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __dxgitype_h__
+#define __dxgitype_h__
+
+#include "dxgiformat.h"
+
+typedef struct DXGI_SAMPLE_DESC {
+    UINT Count;
+    UINT Quality;
+} DXGI_SAMPLE_DESC;
+
+typedef enum DXGI_MODE_ROTATION {
+    DXGI_MODE_ROTATION_UNSPECIFIED  = 0,
+    DXGI_MODE_ROTATION_IDENTITY     = 1,
+    DXGI_MODE_ROTATION_ROTATE90     = 2,
+    DXGI_MODE_ROTATION_ROTATE180    = 3,
+    DXGI_MODE_ROTATION_ROTATE270    = 4,
+} DXGI_MODE_ROTATION;
+
+typedef enum DXGI_MODE_SCANLINE_ORDER {
+    DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED        = 0,
+    DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE        = 1,
+    DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST  = 2,
+    DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST  = 3,
+} DXGI_MODE_SCANLINE_ORDER;
+
+typedef enum DXGI_MODE_SCALING {
+    DXGI_MODE_SCALING_UNSPECIFIED   = 0,
+    DXGI_MODE_SCALING_CENTERED      = 1,
+    DXGI_MODE_SCALING_STRETCHED     = 2,
+} DXGI_MODE_SCALING;
+
+typedef struct DXGI_RATIONAL {
+    UINT Numerator;
+    UINT Denominator;
+} DXGI_RATIONAL;
+
+typedef struct DXGI_MODE_DESC {
+    UINT Width;
+    UINT Height;
+    DXGI_RATIONAL RefreshRate;
+    DXGI_FORMAT Format;
+    DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
+    DXGI_MODE_SCALING Scaling;
+} DXGI_MODE_DESC;
+
+typedef struct DXGI_GAMMA_CONTROL_CAPABILITIES {
+    BOOL ScaleAndOffsetSupported;
+    float MaxConvertedValue;
+    float MinConvertedValue;
+    UINT NumGammaControlPoints;
+    float ControlPointPositions[1025];
+} DXGI_GAMMA_CONTROL_CAPABILITIES;
+
+typedef struct DXGI_RGB {
+    float Red;
+    float Green;
+    float Blue;
+} DXGI_RGB;
+
+typedef struct DXGI_GAMMA_CONTROL {
+    DXGI_RGB Scale;
+    DXGI_RGB Offset;
+    DXGI_RGB GammaCurve[1025];
+} DXGI_GAMMA_CONTROL;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl
new file mode 100644
index 0000000..3b725f1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+interface IPinConnection;
+interface IPinFlowControl;
+interface IGraphConfig;
+interface IGraphConfigCallback;
+
+[
+    local,
+    object,
+    uuid(4a9a62d3-27d4-403d-91e9-89f540e55534),
+    pointer_default(unique)
+]
+interface IPinConnection : IUnknown
+{
+    HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt);
+
+    HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent);
+
+    HRESULT IsEndPin();
+
+    HRESULT DynamicDisconnect();
+}
+
+[
+    local,
+    object,
+    uuid(c56e9858-dbf3-4f6b-8119-384af2060deb),
+    pointer_default(unique)
+]
+interface IPinFlowControl : IUnknown
+{
+    HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent);
+}
+
+enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS
+{
+    AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001,
+};
+
+typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS
+{
+    AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,
+    AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,
+    AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004
+} AM_GRAPH_CONFIG_RECONNECT_FLAGS;
+
+enum _REM_FILTER_FLAGS
+{
+    REMFILTERF_LEAVECONNECTED = 0x00000001
+};
+
+typedef enum _AM_FILTER_FLAGS
+{
+     AM_FILTER_FLAGS_REMOVABLE = 0x00000001
+} AM_FILTER_FLAGS;
+
+[
+    local,
+    object,
+    uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88),
+    pointer_default(unique)
+]
+interface IGraphConfig : IUnknown
+{
+    HRESULT Reconnect(
+        [in] IPin *pOutputPin,
+        [in] IPin *pInputPin,
+        [in] const AM_MEDIA_TYPE *pmtFirstConnection,
+        [in] IBaseFilter *pUsingFilter,
+        [in] HANDLE hAbortEvent,
+        [in] DWORD dwFlags);
+
+    HRESULT Reconfigure(
+        [in] IGraphConfigCallback *pCallback,
+        [in] PVOID pvContext,
+        [in] DWORD dwFlags,
+        [in] HANDLE hAbortEvent);
+
+    HRESULT AddFilterToCache([in] IBaseFilter *pFilter);
+
+    HRESULT EnumCacheFilter([out] IEnumFilters **pEnum);
+
+    HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter);
+
+    HRESULT GetStartTime([out] REFERENCE_TIME *prtStart);
+
+    HRESULT PushThroughData(
+        [in] IPin *pOutputPin,
+        [in] IPinConnection *pConnection,
+        [in] HANDLE hEventAbort);
+
+    HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags);
+
+    HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags);
+
+    HRESULT RemoveFilterEx([in] IBaseFilter *pFilter, DWORD Flags);
+}
+
+[
+    local,
+    object,
+    uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375),
+    pointer_default(unique)
+]
+interface IGraphConfigCallback : IUnknown
+{
+    HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags);
+}
+
+[
+    local,
+    object,
+    uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29),
+    pointer_default(unique)
+]
+interface IFilterChain : IUnknown
+{
+    HRESULT StartChain(
+        [in] IBaseFilter *pStartFilter,
+        [in] IBaseFilter *pEndFilter);
+
+    HRESULT PauseChain(
+        [in] IBaseFilter *pStartFilter,
+        [in] IBaseFilter *pEndFilter);
+
+    HRESULT StopChain(
+        [in] IBaseFilter *pStartFilter,
+        [in] IBaseFilter *pEndFilter);
+
+    HRESULT RemoveChain(
+        [in] IBaseFilter *pStartFilter,
+        [in] IBaseFilter *pEndFilter);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl
new file mode 100644
index 0000000..76a1465
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "devicetopology.idl";
+
+typedef struct AUDIO_VOLUME_NOTIFICATION_DATA
+{
+    GUID guidEventContext;
+    BOOL bMuted;
+    FLOAT fMasterVolume;
+    UINT nChannels;
+    FLOAT afChannelVolumes[1];
+} AUDIO_VOLUME_NOTIFICATION_DATA;
+
+cpp_quote("typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA;")
+
+cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_VOLUME 0x1")
+cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_MUTE 0x2")
+cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_METER 0x4")
+
+interface IAudioEndpointVolumeCallback;
+interface IAudioEndpointVolume;
+interface IAudioEndpointVolumeEx;
+interface IAudioMeterInformation;
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(657804fa-d6ad-4496-8a60-352752af4f89),
+    local,
+    object
+]
+interface IAudioEndpointVolumeCallback : IUnknown
+{
+    HRESULT OnNotify(
+        AUDIO_VOLUME_NOTIFICATION_DATA *pNotify
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(5cdf2c82-841e-4546-9722-0cf74078229a),
+    local,
+    object
+]
+interface IAudioEndpointVolume : IUnknown
+{
+    HRESULT RegisterControlChangeNotify(
+        [in] IAudioEndpointVolumeCallback *pNotify
+    );
+    HRESULT UnregisterControlChangeNotify(
+        [in] IAudioEndpointVolumeCallback *pNotify
+    );
+    HRESULT GetChannelCount(
+        [out] UINT *pnChannelCount
+    );
+    HRESULT SetMasterVolumeLevel(
+        [in] FLOAT fLevelDB,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT SetMasterVolumeLevelScalar(
+        [in] FLOAT fLevel,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT GetMasterVolumeLevel(
+        [out] FLOAT *fLevelDB
+    );
+    HRESULT GetMasterVolumeLevelScalar(
+        [out] FLOAT *fLevel
+    );
+    HRESULT SetChannelVolumeLevel(
+        [in] UINT nChannel,
+        [in] FLOAT fLevelDB,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT SetChannelVolumeLevelScalar(
+        [in] UINT nChannel,
+        [in] FLOAT fLevel,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT GetChannelVolumeLevel(
+        [in] UINT nChannel,
+        [out] FLOAT *fLevelDB
+    );
+    HRESULT GetChannelVolumeLevelScalar(
+        [in] UINT nChannel,
+        [out] FLOAT *fLevel
+    );
+    HRESULT SetMute(
+        [in] BOOL bMute,
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT GetMute(
+        [out] BOOL *bMute
+    );
+    HRESULT GetVolumeStepInfo(
+        [out] UINT *pnStep,
+        [out] UINT *pnStepCount
+    );
+    HRESULT VolumeStepUp(
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT VolumeStepDown(
+        [unique,in] LPCGUID pguidEventContext
+    );
+    HRESULT QueryHardwareSupport(
+        [out] DWORD *pdwHardwareSupportMask
+    );
+    HRESULT GetVolumeRange(
+        [out] FLOAT *pflVolumeMindB,
+        [out] FLOAT *pflVolumeMaxdB,
+        [out] FLOAT *pflVolumeIncrementdB
+    );
+}
+
+[
+    pointer_default(unique),
+    nonextensible,
+    uuid(66e11784-f695-4f28-a505-a7080081a78f),
+    local,
+    object
+]
+interface IAudioEndpointVolumeEx : IAudioEndpointVolume
+{
+    HRESULT GetVolumeRangeChannel(
+        [in] UINT iChannel,
+        [out] FLOAT *pflVolumeMindB,
+        [out] FLOAT *pflVolumeMaxdB,
+        [out] FLOAT *pflVolumeIncrementdB
+    );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h
new file mode 100644
index 0000000..5f31b87
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h
@@ -0,0 +1,52 @@
+/*
+ * errorrep.h - error reporting APIs (implemented in faultrep.dll)
+ *
+ * Copyright 2007 Google (Mikolaj Zalewski)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ERRORREP_H
+#define __WINE_ERRORREP_H
+
+typedef enum tagEFaultRepRetVal
+{
+    frrvOk,
+    frrvOkManifest,
+    frrvOkQueued,
+    frrvOkErr,
+    frrvErrNoDW,
+    frrvErrTimeout,
+    frrvLaunchDebugger,
+    frrvOkHeadless,
+    frrvErrAnotherInstance
+} EFaultRepRetVal;
+
+EFaultRepRetVal WINAPI ReportFault(LPEXCEPTION_POINTERS, DWORD);
+
+BOOL WINAPI AddERExcludedApplicationA(LPCSTR);
+BOOL WINAPI AddERExcludedApplicationW(LPCWSTR);
+#define     AddERExcludedApplication WINELIB_NAME_AW(AddERExcludedApplication)
+
+#endif  /* __WINE_ERORREP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h
new file mode 100644
index 0000000..270df3c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2006 Hans Leidekker
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __ERRORS__
+#define __ERRORS__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define AMOVIEAPI
+
+#define VFW_FIRST_CODE      0x200
+#define MAX_ERROR_TEXT_LEN  160
+
+#include <vfwmsgs.h>
+
+typedef BOOL (WINAPI* AMGETERRORTEXTPROCA)(HRESULT,char*,DWORD);
+typedef BOOL (WINAPI* AMGETERRORTEXTPROCW)(HRESULT,WCHAR*,DWORD);
+DECL_WINELIB_TYPE_AW(AMGETERRORTEXTPROC)
+
+DWORD WINAPI AMGetErrorTextA(HRESULT,LPSTR,DWORD);
+DWORD WINAPI AMGetErrorTextW(HRESULT,LPWSTR,DWORD);
+#define AMGetErrorText WINELIB_NAME_AW(AMGetErrorText)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ERRORS__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl
new file mode 100644
index 0000000..f314922
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2013 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a67-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IErrorRecords : IUnknown
+{
+
+cpp_quote("#define IDENTIFIER_SDK_MASK   0xF0000000")
+cpp_quote("#define IDENTIFIER_SDK_ERROR  0x10000000")
+
+typedef struct tagERRORINFO
+{
+    HRESULT hrError;
+    DWORD dwMinor;
+    CLSID clsid;
+    IID iid;
+    DISPID dispid;
+} ERRORINFO;
+
+    [local]
+    HRESULT AddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,
+        [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID);
+
+    [call_as(AddErrorRecord)]
+    HRESULT RemoteAddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,
+        [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID, [out] IErrorInfo ** ppErrorInfoRem);
+
+    [local]
+    HRESULT GetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo);
+
+    [call_as(GetBasicErrorInfo)]
+    HRESULT RemoteGetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo, [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject);
+
+    [call_as(GetCustomErrorObject)]
+    HRESULT RemoteGetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject,
+        [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo);
+
+    [call_as(GetErrorInfo)]
+    HRESULT RemoteGetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo,
+        [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams);
+
+    [call_as(GetErrorParameters)]
+    HRESULT RemoteGetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams, [out] IErrorInfo ** ppErrorInfoRem);
+
+    [local]
+    HRESULT GetRecordCount([out] ULONG *records);
+
+    [call_as(GetRecordCount)]
+    HRESULT RemoteGetRecordCount([out] ULONG * pcRecords, [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h
new file mode 100644
index 0000000..eb5b737
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2004 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_EVCODE_H
+#define __WINE_EVCODE_H
+
+#define EC_SYSTEMBASE                       0x00
+#define EC_USER                             0x8000
+
+#define EC_COMPLETE                         0x01
+#define EC_USERABORT                        0x02
+#define EC_ERRORABORT                       0x03
+#define EC_TIME                             0x04
+#define EC_REPAINT                          0x05
+#define EC_STREAM_ERROR_STOPPED             0x06
+#define EC_STREAM_ERROR_STILLPLAYING        0x07
+#define EC_ERROR_STILLPLAYING               0x08
+#define EC_PALETTE_CHANGED                  0x09
+#define EC_VIDEO_SIZE_CHANGED               0x0A
+#define EC_QUALITY_CHANGE                   0x0B
+#define EC_SHUTTING_DOWN                    0x0C
+#define EC_CLOCK_CHANGED                    0x0D
+#define EC_PAUSED                           0x0E
+#define EC_OPENING_FILE                     0x10
+#define EC_BUFFERING_DATA                   0x11
+#define EC_FULLSCREEN_LOST                  0x12
+#define EC_ACTIVATE                         0x13
+#define EC_NEED_RESTART                     0x14
+#define EC_WINDOW_DESTROYED                 0x15
+#define EC_DISPLAY_CHANGED                  0x16
+#define EC_STARVATION                       0x17
+#define EC_OLE_EVENT                        0x18
+#define EC_NOTIFY_WINDOW                    0x19
+#define EC_STREAM_CONTROL_STOPPED           0x1A
+#define EC_STREAM_CONTROL_STARTED           0x1B
+#define EC_END_OF_SEGMENT                   0x1C
+#define EC_SEGMENT_STARTED                  0x1D
+#define EC_LENGTH_CHANGED                   0x1E
+#define EC_DEVICE_LOST                      0x1F
+#define EC_SAMPLE_NEEDED                    0x20
+#define EC_PROCESSING_LATENCY               0x21
+#define EC_SAMPLE_LATENCY                   0x22
+#define EC_SCRUB_TIME                       0x23
+#define EC_STEP_COMPLETE                    0x24
+
+#define EC_NEW_PIN                          0x20
+#define EC_RENDER_FINISHED                  0x21
+
+#define EC_TIMECODE_AVAILABLE               0x30
+#define EC_EXTDEVICE_MODE_CHANGE            0x31
+#define EC_STATE_CHANGE                     0x32
+
+#define EC_PLEASE_REOPEN                    0x40
+#define EC_STATUS                           0x41
+#define EC_MARKER_HIT                       0x42
+#define EC_LOADSTATUS                       0x43
+#define EC_FILE_CLOSED                      0x44
+#define EC_ERRORABORTEX                     0x45
+#define EC_EOS_SOON                         0x46
+#define EC_CONTENTPROPERTY_CHANGED          0x47
+#define EC_BANDWIDTHCHANGE                  0x48
+#define EC_VIDEOFRAMEREADY                  0x49
+#define EC_GRAPH_CHANGED                    0x50
+#define EC_CLOCK_UNSET                      0x51
+
+#define EC_VMR_RENDERDEVICE_SET             0x53
+#define EC_VMR_SURFACE_FLIPPED              0x54
+#define EC_VMR_RECONNECTION_FAILED          0x55
+#define EC_PREPROCESS_COMPLETE              0x56
+#define EC_CODECAPI_EVENT                   0x57
+
+#define EC_BUILT                           0x300
+#define EC_UNBUILT                         0x301
+
+#define EC_WMT_EVENT_BASE                  0x0251
+#define EC_WMT_INDEX_EVENT                 EC_WMT_EVENT_BASE
+#define EC_WMT_EVENT                       EC_WMT_EVENT_BASE+1
+
+#endif /* __WINE_EVCODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h
new file mode 100644
index 0000000..df444c9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2010 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _EVNTPROV_H_
+#define _EVNTPROV_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EVENT_LEVEL_MIN 0x00
+#define EVENT_LEVEL_MAX 0xff
+
+typedef ULONGLONG REGHANDLE, *PREGHANDLE;
+
+typedef struct _EVENT_DATA_DESCRIPTOR
+{
+    ULONGLONG   Ptr;
+    ULONG       Size;
+    ULONG       Reserved;
+} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
+
+typedef struct _EVENT_DESCRIPTOR
+{
+    USHORT    Id;
+    UCHAR     Version;
+    UCHAR     Channel;
+    UCHAR     Level;
+    UCHAR     Opcode;
+    USHORT    Task;
+    ULONGLONG Keyword;
+} EVENT_DESCRIPTOR;
+
+typedef       EVENT_DESCRIPTOR *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+typedef struct _EVENT_FILTER_DESCRIPTOR
+{
+    ULONGLONG   Ptr;
+    ULONG       Size;
+    ULONG       Type;
+
+} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
+
+typedef VOID (NTAPI *PENABLECALLBACK)(LPCGUID,ULONG,UCHAR,ULONGLONG,ULONGLONG,PEVENT_FILTER_DESCRIPTOR,PVOID);
+
+BOOLEAN WINAPI EventEnabled(REGHANDLE, PCEVENT_DESCRIPTOR);
+ULONG WINAPI EventRegister(LPCGUID,PENABLECALLBACK,PVOID,PREGHANDLE);
+ULONG WINAPI EventUnregister(REGHANDLE);
+ULONG WINAPI EventWrite(REGHANDLE,PCEVENT_DESCRIPTOR,ULONG,PEVENT_DATA_DESCRIPTOR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EVNTPROV_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h
new file mode 100644
index 0000000..db3e571
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _EVNTRACE_
+#define _EVNTRACE_
+
+#include <guiddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EVENT_TRACE_CONTROL_QUERY     0
+#define EVENT_TRACE_CONTROL_STOP      1
+#define EVENT_TRACE_CONTROL_UPDATE    2
+#define EVENT_TRACE_CONTROL_FLUSH     3
+
+typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+
+struct _EVENT_TRACE_LOGFILEA;
+struct _EVENT_TRACE_LOGFILEW;
+
+typedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA, *PEVENT_TRACE_LOGFILEA;
+typedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW, *PEVENT_TRACE_LOGFILEW;
+
+typedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKA)( PEVENT_TRACE_LOGFILEA );
+typedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKW)( PEVENT_TRACE_LOGFILEW );
+
+typedef ULONG (WINAPI * WMIDPREQUEST)( WMIDPREQUESTCODE, PVOID, ULONG*, PVOID );
+
+typedef struct _TRACE_GUID_REGISTRATION
+{
+    LPCGUID Guid;
+    HANDLE RegHandle;
+} TRACE_GUID_REGISTRATION, *PTRACE_GUID_REGISTRATION;
+
+typedef struct _TRACE_GUID_PROPERTIES {
+    GUID    Guid;
+    ULONG   GuidType;
+    ULONG   LoggerId;
+    ULONG   EnableLevel;
+    ULONG   EnableFlags;
+    BOOLEAN IsEnable;
+} TRACE_GUID_PROPERTIES, *PTRACE_GUID_PROPERTIES;
+
+typedef struct _EVENT_TRACE_HEADER
+{
+    USHORT Size;
+    union
+    {
+        USHORT FieldTypeFlags;
+        struct
+        {
+            UCHAR HeaderType;
+            UCHAR MarkerFlags;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    union
+    {
+        ULONG Version;
+        struct
+        {
+            UCHAR Type;
+            UCHAR Level;
+            USHORT Version;
+        } Class;
+    } DUMMYUNIONNAME1;
+    ULONG ThreadId;
+    ULONG ProcessId;
+    LARGE_INTEGER TimeStamp;
+    union
+    {
+        GUID Guid;
+        ULONGLONG GuidPtr;
+    } DUMMYUNIONNAME2;
+    union
+    {
+        struct
+        {
+            ULONG ClientContext;
+            ULONG Flags;
+        } DUMMYSTRUCTNAME1;
+        struct
+        {
+            ULONG KernelTime;
+            ULONG UserTime;
+        } DUMMYSTRUCTNAME2;
+    } DUMMYUNIONNAME3;
+} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;
+
+typedef struct _EVENT_TRACE
+{
+    EVENT_TRACE_HEADER Header;
+    ULONG InstanceId;
+    ULONG ParentInstanceId;
+    GUID ParentGuid;
+    PVOID MofData;
+    ULONG MofLength;
+    ULONG ClientContext;
+} EVENT_TRACE, *PEVENT_TRACE;
+
+typedef VOID (WINAPI * PEVENT_CALLBACK)( PEVENT_TRACE );
+
+typedef struct _TRACE_LOGFILE_HEADER
+{
+    ULONG BufferSize;
+    union
+    {
+        ULONG Version;
+        struct 
+        {
+            UCHAR MajorVersion;
+            UCHAR MinorVersion;
+            UCHAR SubVersion;
+            UCHAR SubMinorVersion;
+        } VersionDetail;
+    } DUMMYUNIONNAME;
+    ULONG ProviderVersion;
+    ULONG NumberOfProcessors;
+    LARGE_INTEGER EndTime;
+    ULONG TimerResolution;
+    ULONG MaximumFileSize;
+    ULONG LogFileMode;
+    ULONG BuffersWritten;
+    union
+    {
+        GUID LogInstanceGuid;
+        struct
+        {
+            ULONG StartBuffers;
+            ULONG PointerSize;
+            ULONG EventsLost;
+            ULONG CpuSpeedInMHZ;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME1;
+    LPWSTR LoggerName;
+    LPWSTR LogFileName;
+    TIME_ZONE_INFORMATION TimeZone;
+    LARGE_INTEGER BootTime;
+    LARGE_INTEGER PerfFreq;
+    LARGE_INTEGER StartTime;
+    ULONG ReservedTime;
+    ULONG BuffersLost;
+} TRACE_LOGFILE_HEADER, *PTRACE_LOGFILE_HEADER;
+
+struct _EVENT_TRACE_LOGFILEW
+{
+    LPWSTR LogFileName;
+    LPWSTR LoggerName;
+    LONGLONG CurrentTime;
+    ULONG LogFileMode;
+    EVENT_TRACE CurrentEvent;
+    TRACE_LOGFILE_HEADER LogfileHeader;
+    PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback;
+    ULONG BufferSize;
+    ULONG Filled;
+    ULONG EventsLost;
+    PEVENT_CALLBACK EventCallback;
+    PVOID Context;
+};
+
+struct _EVENT_TRACE_LOGFILEA
+{
+    LPSTR LogFileName;
+    LPSTR LoggerName;
+    LONGLONG CurrentTime;
+    ULONG LogFileMode;
+    EVENT_TRACE CurrentEvent;
+    TRACE_LOGFILE_HEADER LogfileHeader;
+    PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback;
+    ULONG BufferSize;
+    ULONG Filled;
+    ULONG EventsLost;
+    PEVENT_CALLBACK EventCallback;
+    PVOID Context;
+};
+
+typedef struct _EVENT_TRACE_PROPERTIES
+{
+    WNODE_HEADER Wnode;
+    ULONG BufferSize;
+    ULONG MinimumBuffers;
+    ULONG MaximumBuffers;
+    ULONG MaximumFileSize;
+    ULONG LogFileMode;
+    ULONG FlushTimer;
+    LONG AgeLimit;
+    ULONG NumberOfBuffers;
+    ULONG FreeBuffers;
+    ULONG EventsLost;
+    ULONG BuffersWritten;
+    ULONG LogBuffersLost;
+    ULONG RealTimeBuffersLost;
+    HANDLE LoggerThreadId;
+    ULONG LoggerFileNameOffset;
+    ULONG LoggerNameOffset;
+} EVENT_TRACE_PROPERTIES, *PEVENT_TRACE_PROPERTIES;
+
+#define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)~(ULONG_PTR)0)
+
+ULONG WINAPI CloseTrace(TRACEHANDLE);
+ULONG WINAPI ControlTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES,ULONG);
+ULONG WINAPI ControlTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES,ULONG);
+#define      ControlTrace WINELIB_NAME_AW(ControlTrace)
+ULONG WINAPI EnableTrace(ULONG,ULONG,ULONG,LPCGUID,TRACEHANDLE);
+ULONG WINAPI FlushTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES);
+ULONG WINAPI FlushTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES);
+#define      FlushTrace WINELIB_NAME_AW(FlushTrace)
+ULONG WINAPI QueryAllTracesA(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG);
+ULONG WINAPI QueryAllTracesW(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG);
+#define      QueryAllTraces WINELIB_NAME_AW(QueryAllTraces)
+ULONG WINAPI RegisterTraceGuidsA(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCSTR,LPCSTR,PTRACEHANDLE);
+ULONG WINAPI RegisterTraceGuidsW(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCWSTR,LPCWSTR,PTRACEHANDLE);
+#define      RegisterTraceGuids WINELIB_NAME_AW(RegisterTraceGuids)
+ULONG WINAPI StartTraceA(PTRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES);
+ULONG WINAPI StartTraceW(PTRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES);
+#define      StartTrace WINELIB_NAME_AW(StartTrace)
+ULONG WINAPI TraceEvent(TRACEHANDLE,PEVENT_TRACE_HEADER);
+ULONG WINAPIV TraceMessage(TRACEHANDLE,ULONG,LPGUID,USHORT,...);
+ULONG WINAPI TraceMessageVa(TRACEHANDLE,ULONG,LPGUID,USHORT,__ms_va_list);
+ULONG WINAPI UnregisterTraceGuids(TRACEHANDLE);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EVNTRACE_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h
new file mode 100644
index 0000000..c1031e9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2002 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_EXCPT_H
+#define __WINE_EXCPT_H
+
+/*
+ * Return values from the actual exception handlers
+ */
+typedef enum _EXCEPTION_DISPOSITION
+{
+  ExceptionContinueExecution,
+  ExceptionContinueSearch,
+  ExceptionNestedException,
+  ExceptionCollidedUnwind
+} EXCEPTION_DISPOSITION;
+
+/*
+ * Return values from filters in except() and from UnhandledExceptionFilter
+ */
+#define EXCEPTION_EXECUTE_HANDLER        1
+#define EXCEPTION_CONTINUE_SEARCH        0
+#define EXCEPTION_CONTINUE_EXECUTION    -1
+
+
+#if defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS)
+#define GetExceptionCode    _exception_code
+#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
+#define AbnormalTermination _abnormal_termination
+
+unsigned long __cdecl _exception_code(void);
+void * __cdecl _exception_info(void);
+int __cdecl _abnormal_termination(void);
+#endif /* defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) */
+
+#endif /* __WINE_EXCPT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl
new file mode 100644
index 0000000..0bf09ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl
@@ -0,0 +1,1055 @@
+/*
+ * Defines the COM interfaces and APIs related to the IE Web browser
+ *
+ * Copyright (C) 2001 John R. Sheets (for CodeWeavers)
+ * Copyright (C) 2003 Alexandre Julliard
+ * Copyright (C) 2004 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "docobj.idl";
+
+#include <olectl.h>
+#include <exdispid.h>
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef FindText")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * SHDocVw library
+ */
+[
+    uuid(EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B),
+    version(1.1),
+    helpstring("Microsoft Internet Controls")
+]
+library SHDocVw
+{
+
+importlib("stdole2.tlb");
+
+
+/*****************************************************************************
+ * IWebBrowser interface
+ */
+[
+    object,
+    oleautomation,
+    uuid(eab22ac1-30c1-11cf-a7eb-0000c05bae0b),
+    hidden,
+    dual
+]
+interface IWebBrowser : IDispatch
+{
+    typedef enum BrowserNavConstants
+    {
+        navOpenInNewWindow   = 0x1,
+        navNoHistory         = 0x2,
+        navNoReadFromCache   = 0x4,
+        navNoWriteToCache    = 0x8,
+        navAllowAutosearch   = 0x10,
+        navBrowserBar        = 0x20,
+        navHyperlink         = 0x40,
+        navEnforceRestricted = 0x80
+    } BrowserNavConstants;
+
+    typedef enum RefreshConstants
+    {
+        REFRESH_NORMAL     = 0,
+        REFRESH_IFEXPIRED  = 1,
+        REFRESH_COMPLETELY = 3
+    } RefreshConstants;
+
+    [id(100)] HRESULT GoBack();
+    [id(101)] HRESULT GoForward();
+    [id(102)] HRESULT GoHome();
+    [id(103)] HRESULT GoSearch();
+
+    [id(104)]
+    HRESULT Navigate(
+        [in] BSTR URL,
+        [in, optional] VARIANT *Flags,
+        [in, optional] VARIANT *TargetFrameName,
+        [in, optional] VARIANT *PostData,
+        [in, optional] VARIANT *Headers);
+
+    [id(DISPID_REFRESH)] HRESULT Refresh();
+    [id(105)] HRESULT Refresh2([in, optional] VARIANT *Level);
+    [id(106)] HRESULT Stop();
+    [id(200), propget] HRESULT Application([out, retval] IDispatch** ppDisp);
+    [id(201), propget] HRESULT Parent([out, retval] IDispatch** ppDisp);
+    [id(202), propget] HRESULT Container([out, retval] IDispatch** ppDisp);
+    [id(203), propget] HRESULT Document([out, retval] IDispatch** ppDisp);
+    [id(204), propget] HRESULT TopLevelContainer([out, retval] VARIANT_BOOL* pBool);
+    [id(205), propget] HRESULT Type([out, retval] BSTR* Type);
+    [id(206), propget] HRESULT Left([out, retval] long *pl);
+    [id(206), propput] HRESULT Left([in] long Left);
+    [id(207), propget] HRESULT Top([out, retval] long *pl);
+    [id(207), propput] HRESULT Top([in] long Top);
+    [id(208), propget] HRESULT Width([out, retval] long *pl);
+    [id(208), propput] HRESULT Width([in] long Width);
+    [id(209), propget] HRESULT Height([out, retval] long *pl);
+    [id(209), propput] HRESULT Height([in] long Height);
+    [id(210), propget] HRESULT LocationName([out, retval] BSTR *LocationName);
+    [id(211), propget] HRESULT LocationURL([out, retval] BSTR *LocationURL);
+    [id(212), propget] HRESULT Busy([out, retval] VARIANT_BOOL *pBool);
+}
+
+/*****************************************************************************
+ * DWebBrowserEvents dispinterface
+ */
+[
+    uuid(eab22ac2-30c1-11CF-a7eb-0000C05bae0b),
+    hidden
+]
+dispinterface DWebBrowserEvents
+{
+    properties:
+    methods:
+    [id(DISPID_BEFORENAVIGATE)]
+    void BeforeNavigate(
+        [in] BSTR URL,
+        long Flags,
+        BSTR TargetFrameName,
+        VARIANT *PostData,
+        BSTR Headers,
+        [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_NAVIGATECOMPLETE)]
+    void NavigateComplete([in] BSTR URL);
+
+    [id(DISPID_STATUSTEXTCHANGE)]
+    void StatusTextChange([in] BSTR Text);
+
+    [id(DISPID_PROGRESSCHANGE)]
+    void ProgressChange([in] long Progress, [in] long ProgressMax);
+
+    [id(DISPID_DOWNLOADCOMPLETE)]
+    void DownloadComplete();
+
+    [id(DISPID_COMMANDSTATECHANGE)]
+    void CommandStateChange([in] long Command, [in]VARIANT_BOOL Enable);
+
+    [id(DISPID_DOWNLOADBEGIN)]
+    void DownloadBegin();
+
+    [id(DISPID_NEWWINDOW)]
+    void NewWindow(
+        [in] BSTR URL,
+        [in] long Flags,
+        [in] BSTR TargetFrameName,
+        [in] VARIANT *PostData,
+        [in] BSTR Headers,
+        [in,out] VARIANT_BOOL *Processed);
+
+    [id(DISPID_TITLECHANGE)]
+    void TitleChange([in] BSTR Text);
+
+    [id(DISPID_FRAMEBEFORENAVIGATE)]
+    void FrameBeforeNavigate(
+        [in] BSTR URL,
+        long Flags,
+        BSTR TargetFrameName,
+        VARIANT *PostData,
+        BSTR Headers,
+        [in, out]VARIANT_BOOL *Cancel);
+
+    [id(DISPID_FRAMENAVIGATECOMPLETE)]
+    void FrameNavigateComplete([in] BSTR URL);
+
+    [id(DISPID_FRAMENEWWINDOW)]
+    void FrameNewWindow(
+        [in] BSTR URL,
+        [in] long Flags,
+        [in] BSTR TargetFrameName,
+        [in] VARIANT *PostData,
+        [in] BSTR Headers,
+        [in,out] VARIANT_BOOL *Processed);
+
+    [id(DISPID_QUIT)]
+    void Quit([in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_WINDOWMOVE)]
+    void WindowMove();
+
+    [id(DISPID_WINDOWRESIZE)]
+    void WindowResize();
+
+    [id(DISPID_WINDOWACTIVATE)]
+    void WindowActivate();
+
+    [id(DISPID_PROPERTYCHANGE)]
+    void PropertyChange([in] BSTR Property);
+}
+
+typedef
+[
+    uuid(34a226e0-df30-11cf-89a9-00a0c9054129)
+]
+enum CommandStateChangeConstants {
+    CSC_UPDATECOMMANDS  = -1,
+    CSC_NAVIGATEFORWARD = 1,
+    CSC_NAVIGATEBACK    = 2
+} CommandStateChangeConstants;
+
+/*****************************************************************************
+ * IWebBrowserApp interface
+ */
+[
+    object,
+    oleautomation,
+    uuid(0002df05-0000-0000-c000-000000000046),
+    hidden,
+    dual
+]
+interface IWebBrowserApp : IWebBrowser
+{
+    [id(300)] HRESULT Quit();
+    [id(301)] HRESULT ClientToWindow([in,out] int* pcx, [in,out] int* pcy);
+    [id(302)] HRESULT PutProperty([in] BSTR Property, [in] VARIANT vtValue);
+    [id(303)] HRESULT GetProperty([in] BSTR Property, [out, retval] VARIANT *pvtValue);
+    [id(0), propget] HRESULT Name([out, retval] BSTR* Name);
+    [id(DISPID_HWND), propget] HRESULT HWND([out, retval] SHANDLE_PTR *pHWND);
+    [id(400), propget] HRESULT FullName([out, retval] BSTR* FullName);
+    [id(401), propget] HRESULT Path([out, retval] BSTR* Path);
+    [id(402), propget] HRESULT Visible([out, retval] VARIANT_BOOL* pBool);
+    [id(402), propput] HRESULT Visible([in] VARIANT_BOOL Value);
+    [id(403), propget] HRESULT StatusBar([out, retval] VARIANT_BOOL* pBool);
+    [id(403), propput] HRESULT StatusBar([in] VARIANT_BOOL Value);
+    [id(404), propget] HRESULT StatusText([out, retval] BSTR *StatusText);
+    [id(404), propput] HRESULT StatusText([in] BSTR StatusText);
+    [id(405), propget] HRESULT ToolBar([out, retval] int * Value);
+    [id(405), propput] HRESULT ToolBar([in] int Value);
+    [id(406), propget] HRESULT MenuBar([out, retval] VARIANT_BOOL *Value);
+    [id(406), propput] HRESULT MenuBar([in] VARIANT_BOOL Value);
+    [id(407), propget] HRESULT FullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
+    [id(407), propput] HRESULT FullScreen([in] VARIANT_BOOL bFullScreen);
+}
+
+/*****************************************************************************
+ * IWebBrowser2 interface
+ */
+[
+    object,
+    oleautomation,
+    uuid(d30c1661-cdaf-11d0-8a3e-00c04fc9e26e),
+    hidden,
+    dual
+]
+interface IWebBrowser2 : IWebBrowserApp
+{
+    [id(500)] HRESULT Navigate2(
+        [in] VARIANT *URL,
+        [in, optional] VARIANT *Flags,
+        [in, optional] VARIANT *TargetFrameName,
+        [in, optional] VARIANT *PostData,
+        [in, optional] VARIANT *Headers);
+
+    [id(501)] HRESULT QueryStatusWB(
+        [in] OLECMDID cmdID,
+        [out, retval] OLECMDF *pcmdf);
+
+    [id(502)] HRESULT ExecWB(
+        [in] OLECMDID cmdID,
+        [in] OLECMDEXECOPT cmdexecopt,
+        [in, optional] VARIANT *pvaIn,
+        [out, in, optional] VARIANT *pvaOut);
+
+    [id(503)] HRESULT ShowBrowserBar(
+        [in] VARIANT *pvaClsid,
+        [in, optional] VARIANT *pvarShow,
+        [in, optional] VARIANT *pvarSize);
+
+    [id(DISPID_READYSTATE), propget, bindable]
+    HRESULT ReadyState([out, retval] READYSTATE *plReadyState);
+
+    [id(550), propget] HRESULT Offline([out, retval] VARIANT_BOOL *pbOffline);
+    [id(550), propput] HRESULT Offline([in] VARIANT_BOOL bOffline);
+    [id(551), propget] HRESULT Silent([out, retval] VARIANT_BOOL *pbSilent);
+    [id(551), propput] HRESULT Silent([in] VARIANT_BOOL bSilent);
+    [id(552), propget] HRESULT RegisterAsBrowser([out, retval] VARIANT_BOOL *pbRegister);
+    [id(552), propput] HRESULT RegisterAsBrowser([in] VARIANT_BOOL bRegister);
+    [id(553), propget] HRESULT RegisterAsDropTarget([out, retval] VARIANT_BOOL *pbRegister);
+    [id(553), propput] HRESULT RegisterAsDropTarget([in] VARIANT_BOOL bRegister);
+    [id(554), propget] HRESULT TheaterMode([out, retval] VARIANT_BOOL *pbRegister);
+    [id(554), propput] HRESULT TheaterMode([in] VARIANT_BOOL bRegister);
+    [id(555), propget] HRESULT AddressBar([out, retval] VARIANT_BOOL *Value);
+    [id(555), propput] HRESULT AddressBar([in] VARIANT_BOOL Value);
+    [id(556), propget] HRESULT Resizable([out, retval] VARIANT_BOOL *Value);
+    [id(556), propput] HRESULT Resizable([in] VARIANT_BOOL Value);
+}
+
+typedef
+[
+    uuid(65507be0-91a8-11d3-a845-009027220e6d)
+]
+enum SecureLockIconConstants {
+    secureLockIconUnsecure          = 0,
+    secureLockIconMixed             = 1,
+    secureLockIconSecureUnknownBits = 2,
+    secureLockIconSecure40Bit       = 3,
+    secureLockIconSecure56Bit       = 4,
+    secureLockIconSecureFortezza    = 5,
+    secureLockIconSecure128Bit      = 6
+} SecureLockIconConstants;
+
+/*****************************************************************************
+ * DWebBrowserEvents2 dispinterface
+ */
+[
+    uuid(34a715a0-6587-11d0-924a-0020afc7ac4d),
+    hidden
+]
+dispinterface DWebBrowserEvents2
+{
+    properties:
+    methods:
+    [id(DISPID_STATUSTEXTCHANGE)]
+    void StatusTextChange([in] BSTR Text);
+
+    [id(DISPID_PROGRESSCHANGE)]
+    void ProgressChange([in] long Progress, [in] long ProgressMax);
+
+    [id(DISPID_COMMANDSTATECHANGE)]
+    void CommandStateChange([in] long Command, [in] VARIANT_BOOL Enable);
+
+    [id(DISPID_DOWNLOADBEGIN)]
+    void DownloadBegin();
+
+    [id(DISPID_DOWNLOADCOMPLETE)]
+    void DownloadComplete();
+
+    [id(DISPID_TITLECHANGE)]
+    void TitleChange([in] BSTR Text);
+
+    [id(DISPID_PROPERTYCHANGE)]
+    void PropertyChange([in] BSTR szProperty);
+
+    [id(DISPID_BEFORENAVIGATE2)]
+    void BeforeNavigate2(
+        [in] IDispatch *pDisp,
+        [in] VARIANT *URL,
+        [in] VARIANT *Flags,
+        [in] VARIANT *TargetFrameName,
+        [in] VARIANT *PostData,
+        [in] VARIANT *Headers,
+        [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_NEWWINDOW2)]
+    void NewWindow2([in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_NAVIGATECOMPLETE2)]
+    void NavigateComplete2([in] IDispatch *pDisp, [in] VARIANT *URL);
+
+    [id(DISPID_DOCUMENTCOMPLETE)]
+    void DocumentComplete([in] IDispatch *pDisp, [in] VARIANT *URL);
+
+    [id(DISPID_ONQUIT)]
+    void OnQuit();
+
+    [id(DISPID_ONVISIBLE)]
+    void OnVisible([in] VARIANT_BOOL Visible);
+
+    [id(DISPID_ONTOOLBAR)]
+    void OnToolBar([in] VARIANT_BOOL ToolBar);
+
+    [id(DISPID_ONMENUBAR)]
+    void OnMenuBar([in] VARIANT_BOOL MenuBar);
+
+    [id(DISPID_ONSTATUSBAR)]
+    void OnStatusBar([in] VARIANT_BOOL StatusBar);
+
+    [id(DISPID_ONFULLSCREEN)]
+    void OnFullScreen([in] VARIANT_BOOL FullScreen);
+
+    [id(DISPID_ONTHEATERMODE)]
+    void OnTheaterMode([in] VARIANT_BOOL TheaterMode);
+
+    [id(DISPID_WINDOWSETRESIZABLE)]
+    void WindowSetResizable([in] VARIANT_BOOL Resizable);
+
+    [id(DISPID_WINDOWSETLEFT)]
+    void WindowSetLeft([in] long Left);
+
+    [id(DISPID_WINDOWSETTOP)]
+    void WindowSetTop([in] long Top);
+
+    [id(DISPID_WINDOWSETWIDTH)]
+    void WindowSetWidth([in] long Width);
+
+    [id(DISPID_WINDOWSETHEIGHT)]
+    void WindowSetHeight([in] long Height);
+
+    [id(DISPID_WINDOWCLOSING)]
+    void WindowClosing(
+            [in] VARIANT_BOOL IsChildWindow,
+            [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_CLIENTTOHOSTWINDOW)]
+    void ClientToHostWindow(
+            [in, out] long *CX,
+            [in, out] long *CY);
+
+    [id(DISPID_SETSECURELOCKICON)]
+    void SetSecureLockIcon([in] long SecureLockIcon);
+
+    [id(DISPID_FILEDOWNLOAD)]
+    void FileDownload(
+            [in] VARIANT_BOOL ActiveDocument,
+            [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_NAVIGATEERROR)]
+    void NavigateError(
+            [in] IDispatch *pDisp,
+            [in] VARIANT *URL,
+            [in] VARIANT *Frame,
+            [in] VARIANT *StatusCode,
+            [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_PRINTTEMPLATEINSTANTIATION)]
+    void PrintTemplateInstantiation([in] IDispatch *pDisp);
+
+    [id(DISPID_PRINTTEMPLATETEARDOWN)]
+    void PrintTemplateTeardown([in] IDispatch *pDisp);
+
+    [id(DISPID_UPDATEPAGESTATUS)]
+    void UpdatePageStatus(
+            [in] IDispatch *pDisp,
+            [in] VARIANT *nPage,
+            [in] VARIANT *fDone);
+
+    [id(DISPID_PRIVACYIMPACTEDSTATECHANGE)]
+    void PrivacyImpactedStateChange([in] VARIANT_BOOL bImpacted);
+
+    [id(DISPID_NEWWINDOW3)]
+    void NewWindow3(
+            [in, out] IDispatch **ppDisp,
+            [in, out] VARIANT_BOOL *Cancel,
+            [in] DWORD dwFlags,
+            [in] BSTR bstrUrlContext,
+            [in] BSTR bstrUrl);
+
+    [id(DISPID_SETPHISHINGFILTERSTATUS)]
+    void SetPhishingFilterStatus([in] long PhishingFilterStatus);
+
+    [id(DISPID_WINDOWSTATECHANGED)]
+    void WindowStateChanged(
+            [in] DWORD dwWindowStateFlags,
+            [in] DWORD dwValidFlagsMask);
+
+    [id(DISPID_NEWPROCESS)]
+    void NewProcess(
+            [in] long lCauseFlag,
+            [in] IDispatch *pWB2,
+            [in, out] VARIANT_BOOL *Cancel);
+
+    [id(DISPID_THIRDPARTYURLBLOCKED)]
+    void ThirdPartyUrlBlocked(
+            [in] VARIANT *URL,
+            [in] DWORD dwCount);
+
+    [id(DISPID_REDIRECTXDOMAINBLOCKED)]
+    void RedirectXDomainBlocked(
+            [in] IDispatch *pDisp,
+            [in] VARIANT *StartURL,
+            [in] VARIANT *RedirectURL,
+            [in] VARIANT *Frame,
+            [in] VARIANT *StatusCode);
+}
+
+[
+    helpstring("Microsoft Web Browser Version 1"),
+    threading(apartment),
+    progid("Shell.Explorer.1"),
+    vi_progid("Shell.Explorer"),
+    uuid(eab22ac3-30c1-11cf-a7eb-0000c05bae0b),
+    control
+]
+coclass WebBrowser_V1
+{
+    interface IWebBrowser2;
+    [default] interface IWebBrowser;
+    [source] dispinterface DWebBrowserEvents2;
+    [default, source] dispinterface DWebBrowserEvents;
+}
+
+[
+    helpstring("Microsoft Web Browser"),
+    threading(apartment),
+    progid("Shell.Explorer.2"),
+    vi_progid("Shell.Explorer"),
+    uuid(8856f961-340a-11d0-a96b-00c04fd705a2),
+    control
+]
+coclass WebBrowser
+{
+    [default] interface IWebBrowser2;
+    interface IWebBrowser;
+    [default, source] dispinterface DWebBrowserEvents2;
+    [source] dispinterface DWebBrowserEvents;
+}
+
+[
+    helpstring("Internet Explorer(Ver 1.0)"),
+    progid("InternetExplorer.Application.1"),
+    vi_progid("InternetExplorer.Application"),
+    uuid(0002df01-0000-0000-c000-000000000046)
+]
+coclass InternetExplorer
+{
+    [default] interface IWebBrowser2;
+              interface IWebBrowserApp;
+    [default, source] dispinterface DWebBrowserEvents2;
+    [source]          dispinterface DWebBrowserEvents;
+}
+
+[
+    uuid(C08AFD90-F2A1-11D1-8455-00A0C91F3880),
+    hidden
+]
+coclass ShellBrowserWindow
+{
+    [default] interface IWebBrowser2;
+    interface IWebBrowserApp;
+    [default, source] dispinterface DWebBrowserEvents2;
+    [source] dispinterface DWebBrowserEvents;
+}
+
+typedef
+[
+    uuid(f41e6981-28e5-11d0-82b4-00a0c90c29c5)
+]
+enum ShellWindowTypeConstants {
+    SWC_EXPLORER = 0,
+    SWC_BROWSER  = 1,
+    SWC_3RDPARTY = 2,
+    SWC_CALLBACK = 4,
+    SWC_DESKTOP  = 8
+} ShellWindowTypeConstants;
+
+typedef
+[
+    uuid(7716a370-38Ca-11d0-a48B-00a0c90a8f39)
+]
+enum ShellWindowFindWindowOptions {
+    SWFO_NEEDDISPATCH   = 1,
+    SWFO_INCLUDEPENDING = 2,
+    SWFO_COOKIEPASSED   = 4
+} ShellWindowFindWindowOptions;
+
+[
+    uuid(FE4106E0-399A-11D0-A48C-00A0C90A8F39)
+]
+dispinterface DShellWindowsEvents {
+    properties:
+    methods:
+    [id(DISPID_WINDOWREGISTERED)]
+    void WindowRegistered([in] long lCookie);
+
+    [id(DISPID_WINDOWREVOKED)]
+    void WindowRevoked([in] long lCookie);
+}
+
+[
+    object,
+    oleautomation,
+    uuid(85cb6900-4d95-11cf-960c-0080c7f4ee85),
+    dual
+]
+interface IShellWindows : IDispatch
+{
+    [propget] HRESULT Count([out, retval] long *Count);
+
+    [id(0)] HRESULT Item(
+            [in, optional] VARIANT index,
+            [out, retval] IDispatch **Folder);
+
+    [id(-4)] HRESULT _NewEnum([out, retval] IUnknown **ppunk);
+
+    [hidden] HRESULT Register(
+            [in] IDispatch *pid,
+            [in] long hWnd,
+            [in] int swClass,
+            [out] long *plCookie);
+
+    [hidden] HRESULT RegisterPending(
+            [in] long lThreadId,
+            [in] VARIANT *pvarloc,
+            [in] VARIANT *pvarlocRoot,
+            [in] int swClass,
+            [out] long *plCookie);
+
+    [hidden] HRESULT Revoke([in] long lCookie);
+    [hidden] HRESULT OnNavigate([in] long lCookie, [in] VARIANT *pvarLoc);
+    [hidden] HRESULT OnActivated([in] long lCookie, [in] VARIANT_BOOL fActive);
+    [hidden] HRESULT FindWindowSW(
+            [in] VARIANT *pvarLoc,
+            [in] VARIANT *pvarLocRoot,
+            [in] int swClass,
+            [out] long *phwnd,
+            [in] int swfwOptions,
+            [out, retval] IDispatch **ppdispOut);
+
+    [hidden] HRESULT OnCreated([in] long lCookie, [in] IUnknown *punk);
+    [hidden] HRESULT ProcessAttachDetach([in] VARIANT_BOOL fAttach);
+}
+
+[
+    threading(apartment),
+    uuid(9ba05972-f6a8-11cf-a442-00a0c90a8f39)
+]
+coclass ShellWindows
+{
+    [default] interface IShellWindows;
+    [default, source] dispinterface DShellWindowsEvents;
+}
+
+[
+    odl,
+    uuid(729fe2f8-1ea8-11d1-8f85-00C04fc2fbe1),
+    dual,
+    oleautomation
+]
+interface IShellUIHelper : IDispatch {
+    [id(1), hidden] HRESULT ResetFirstBootMode();
+    [id(2), hidden] HRESULT ResetSafeMode();
+    [id(3), hidden] HRESULT RefreshOfflineDesktop();
+
+    [id(4)] HRESULT AddFavorite(
+            [in] BSTR URL,
+            [in, optional] VARIANT* Title);
+
+    [id(5)] HRESULT AddChannel([in] BSTR URL);
+
+    [id(6)] HRESULT AddDesktopComponent(
+            [in] BSTR URL,
+            [in] BSTR Type,
+            [in, optional] VARIANT *Left,
+            [in, optional] VARIANT *Top,
+            [in, optional] VARIANT *Width,
+            [in, optional] VARIANT *Height);
+
+    [id(7)] HRESULT IsSubscribed(
+            [in] BSTR URL,
+            [out, retval] VARIANT_BOOL *pBool);
+
+    [id(8)] HRESULT NavigateAndFind(
+            [in] BSTR URL,
+            [in] BSTR strQuery,
+            [in] VARIANT *varTargetFrame);
+
+    [id(9)] HRESULT ImportExportFavorites(
+            [in] VARIANT_BOOL fImport,
+            [in] BSTR strImpExpPath);
+
+    [id(10)] HRESULT AutoCompleteSaveForm([in, optional] VARIANT *Form);
+
+    [id(11)] HRESULT AutoScan(
+            [in] BSTR strSearch,
+            [in] BSTR strFailureUrl,
+            [in, optional] VARIANT *pvarTargetFrame);
+
+    [id(12), hidden] HRESULT AutoCompleteAttach([in, optional] VARIANT *Reserved);
+
+    [id(13)] HRESULT ShowBrowserUI(
+            [in] BSTR bstrName,
+            [in] VARIANT *pvarIn,
+            [out, retval] VARIANT *pvarOut);
+}
+
+[
+    uuid(a7fe6eda-1932-4281-b881-87b31b8bc52c),
+    oleautomation,
+    dual
+]
+interface IShellUIHelper2 : IShellUIHelper {
+    [id(DISPID_ADDSEARCHPROVIDER)]
+    HRESULT AddSearchProvider([in] BSTR URL);
+
+    [id(DISPID_RUNONCESHOWN)]
+    HRESULT RunOnceShown();
+
+    [id(DISPID_SKIPRUNONCE)]
+    HRESULT SkipRunOnce();
+
+    [id(DISPID_CUSTOMIZESETTINGS)] HRESULT CustomizeSettings(
+        [in] VARIANT_BOOL fSQM,
+        [in] VARIANT_BOOL fPhishing,
+        [in] BSTR bstrLocale);
+
+    [id(DISPID_SQMENABLED)]
+    HRESULT SqmEnabled([out, retval] VARIANT_BOOL *pfEnabled);
+
+    [id(DISPID_PHISHINGENABLED)]
+    HRESULT PhishingEnabled([out, retval] VARIANT_BOOL *pfEnabled);
+
+    [id(DISPID_BRANDIMAGEURI)]
+    HRESULT BrandImageUri([out, retval] BSTR *pbstrUri);
+
+    [id(DISPID_SKIPTABSWELCOME)]
+    HRESULT SkipTabsWelcome();
+
+    [id(DISPID_DIAGNOSECONNECTION)]
+    HRESULT DiagnoseConnection();
+
+    [id(DISPID_CUSTOMIZECLEARTYPE)]
+    HRESULT CustomizeClearType([in] VARIANT_BOOL fSet);
+
+    [id(DISPID_ISSEARCHPROVIDERINSTALLED)]
+    HRESULT IsSearchProviderInstalled(
+        [in] BSTR URL,
+        [out, retval] DWORD *pdwResult);
+
+    [id(DISPID_ISSEARCHMIGRATED)]
+    HRESULT IsSearchMigrated([out, retval] VARIANT_BOOL *pfMigrated);
+
+    [id(DISPID_DEFAULTSEARCHPROVIDER)]
+    HRESULT DefaultSearchProvider([out, retval] BSTR *pbstrName);
+
+    [id(DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE)]
+    HRESULT RunOnceRequiredSettingsComplete([in] VARIANT_BOOL fComplete);
+
+    [id(DISPID_RUNONCEHASSHOWN)]
+    HRESULT RunOnceHasShown([out, retval] VARIANT_BOOL *pfShown);
+
+    [id(DISPID_SEARCHGUIDEURL)]
+    HRESULT SearchGuideUrl([out, retval] BSTR *pbstrUrl);
+}
+
+[
+    helpstring("Microsoft Shell UI Helper"),
+    threading(apartment),
+    progid("Shell.UIHelper.1"),
+    vi_progid("Shell.UIHelper"),
+    uuid(64ab4bb7-111e-11d1-8f79-00c04fc2fbe1)
+]
+coclass ShellUIHelper {
+    [default] interface IShellUIHelper2;
+}
+
+[
+    uuid(55136806-b2de-11d1-b9f2-00a0c98bc547)
+]
+dispinterface DShellNameSpaceEvents {
+    properties:
+    methods:
+    [id(1)] void FavoritesSelectionChange(
+            [in] long cItems,
+            [in] long hItem,
+            [in] BSTR strName,
+            [in] BSTR strUrl,
+            [in] long cVisits,
+            [in] BSTR strDate,
+            [in] long fAvailableOffline);
+
+    [id(2)] void SelectionChange();
+    [id(3)] void DoubleClick();
+    [id(4)] void Initialized();
+}
+
+[
+    odl,
+    uuid(55136804-b2de-11d1-b9f2-00a0c98bc547),
+    hidden,
+    dual,
+    oleautomation
+]
+interface IShellFavoritesNameSpace : IDispatch {
+    [id(1)] HRESULT MoveSelectionUp();
+    [id(2)] HRESULT MoveSelectionDown();
+    [id(3)] HRESULT ResetSort();
+    [id(4)] HRESULT NewFolder();
+    [id(5)] HRESULT Synchronize();
+    [id(6)] HRESULT Import();
+    [id(7)] HRESULT Export();
+    [id(8)] HRESULT InvokeContextMenuCommand([in] BSTR strCommand);
+    [id(9)] HRESULT MoveSelectionTo();
+    [id(10), propget] HRESULT SubscriptionsEnabled([out, retval] VARIANT_BOOL *pBool);
+    [id(11)] HRESULT CreateSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);
+    [id(12)] HRESULT DeleteSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);
+    [id(13)] HRESULT SetRoot([in] BSTR bstrFullPath);
+}
+
+[
+    odl,
+    uuid(e572d3c9-37be-4ae2-825d-d521763e3108),
+    hidden,
+    dual,
+    oleautomation
+]
+interface IShellNameSpace : IShellFavoritesNameSpace {
+    [id(14), propget] HRESULT EnumOptions([out, retval] long* pgrfEnumFlags);
+    [id(14), propput] HRESULT EnumOptions([in] long pgrfEnumFlags);
+
+    [id(15), propget] HRESULT SelectedItem([out, retval] IDispatch **pItem);
+    [id(15), propput] HRESULT SelectedItem([in] IDispatch *pItem);
+
+    [id(16), propget] HRESULT Root([out, retval] VARIANT *pvar);
+    [id(16), propput] HRESULT Root([in] VARIANT pvar);
+
+    [id(17), propget] HRESULT Depth([out, retval] int *piDepth);
+    [id(17), propput] HRESULT Depth([in] int piDepth);
+
+    [id(18), propget] HRESULT Mode([out, retval] unsigned int *puMode);
+    [id(18), propput] HRESULT Mode([in] unsigned int puMode);
+
+    [id(19), propget] HRESULT Flags([out, retval] unsigned long *pdwFlags);
+    [id(19), propput] HRESULT Flags([in] unsigned long pdwFlags);
+
+    [id(20), propput] HRESULT TVFlags([in] unsigned long dwFlags);
+    [id(20), propget] HRESULT TVFlags([out, retval] unsigned long *dwFlags);
+
+    [id(21), propget] HRESULT Columns([out, retval] BSTR *bstrColumns);
+    [id(21), propput] HRESULT Columns([in] BSTR bstrColumns);
+
+    [id(22), propget] HRESULT CountViewTypes([out, retval] int *piTypes);
+
+    [id(23)] HRESULT SetViewType([in] int iType);
+    [id(24)] HRESULT SelectedItems([out, retval] IDispatch **ppid);
+    [id(25)] HRESULT Expand([in] VARIANT var,  int iDepth);
+    [id(26)] HRESULT UnselectAll();
+}
+
+[
+    helpstring("Shell Name Space"),
+    threading(apartment),
+    progid("ShellNameSpace.ShellNameSpace.1"),
+    vi_progid("ShellNameSpace.ShellNameSpace"),
+    uuid(2f2f1f96-2bc1-4b1c-be28-ea3774f4676a)
+]
+coclass ShellShellNameSpace {
+    [default] interface IShellNameSpace;
+    [default, source] dispinterface DShellNameSpaceEvents;
+}
+
+[
+    helpstring("Shell Name Space"),
+    threading(apartment),
+    progid("ShellNameSpace.ShellNameSpace.1"),
+    vi_progid("ShellNameSpace.ShellNameSpace"),
+    uuid(55136805-b2de-11d1-b9f2-00a0c98bc547)
+]
+coclass ShellNameSpace {
+    [default] interface IShellNameSpace;
+    [default, source] dispinterface DShellNameSpaceEvents;
+}
+
+[
+    odl,
+    uuid(f3470f24-15fd-11d2-bb2e-00805ff7efca),
+    hidden,
+    dual,
+    oleautomation
+]
+interface IScriptErrorList : IDispatch {
+    [id(10)] HRESULT advanceError();
+    [id(11)] HRESULT retreatError();
+    [id(12)] HRESULT canAdvanceError([out, retval] long *pfCanAdvance);
+    [id(13)] HRESULT canRetreatError([out, retval] long *pfCanRetreat);
+    [id(14)] HRESULT getErrorLine([out, retval] long *plLine);
+    [id(15)] HRESULT getErrorChar([out, retval] long *plChar);
+    [id(16)] HRESULT getErrorCode([out, retval] long *plCode);
+    [id(17)] HRESULT getErrorMsg([out, retval] BSTR *pstr);
+    [id(18)] HRESULT getErrorUrl([out, retval] BSTR *pstr);
+    [id(23)] HRESULT getAlwaysShowLockState([out, retval] long *pfAlwaysShowLocked);
+    [id(19)] HRESULT getDetailsPaneOpen([out, retval] long *pfDetailsPaneOpen);
+    [id(20)] HRESULT setDetailsPaneOpen(long fDetailsPaneOpen);
+    [id(21)] HRESULT getPerErrorDisplay([out, retval] long *pfPerErrorDisplay);
+    [id(22)] HRESULT setPerErrorDisplay(long fPerErrorDisplay);
+}
+
+[
+    uuid(efd01300-160f-11d2-bb2e-00805ff7efca),
+    hidden,
+    noncreatable
+]
+coclass CScriptErrorList {
+    [default] interface IScriptErrorList;
+}
+
+[
+    odl,
+    uuid(ba9239a4-3dd5-11d2-bf8b-00c04fb93661),
+    hidden,
+    dual,
+    oleautomation
+]
+interface ISearch : IDispatch {
+    [propget] HRESULT Title([out, retval] BSTR *pbstrTitle);
+    [propget] HRESULT Id([out, retval] BSTR *pbstrId);
+    [propget] HRESULT URL([out, retval] BSTR *pbstrUrl);
+}
+
+[
+    odl,
+    uuid(47c922a2-3dd5-11d2-bf8b-00c04fb93661),
+    hidden,
+    dual,
+    oleautomation
+]
+interface ISearches : IDispatch {
+    [propget] HRESULT Count([out, retval] long *plCount);
+    [propget] HRESULT Default([out, retval] BSTR *pbstrDefault);
+
+    HRESULT Item(
+            [in, optional] VARIANT index,
+            [out, retval] ISearch **ppid);
+
+    [id(-4)] HRESULT _NewEnum([out, retval] IUnknown **ppunk);
+}
+
+[
+    odl,
+    uuid(72423e8f-8011-11d2-be79-00a0c9a83da1),
+    hidden,
+    dual,
+    oleautomation
+]
+interface ISearchAssistantOC : IDispatch {
+    [id(1)] HRESULT AddNextMenuItem([in] BSTR bstrText, [in] long idItem);
+    [id(2)] HRESULT SetDefaultSearchUrl([in] BSTR bstrUrl);
+    [id(3)] HRESULT NavigateToDefaultSearch();
+
+    [id(4)] HRESULT IsRestricted(
+            [in] BSTR bstrGuid,
+            [out, retval] VARIANT_BOOL *pVal);
+
+    [id(5), propget] HRESULT ShellFeaturesEnabled([out, retval] VARIANT_BOOL *pVal);
+    [id(6), propget] HRESULT SearchAssistantDefault([out, retval] VARIANT_BOOL *pVal);
+    [id(7), propget] HRESULT Searches([out, retval] ISearches **ppid);
+    [id(8), propget] HRESULT InWebFolder([out, retval] VARIANT_BOOL *pVal);
+
+    [id(9)] HRESULT PutProperty(
+            [in] VARIANT_BOOL bPerLocale,
+            [in] BSTR bstrName,
+            [in] BSTR bstrValue);
+
+    [id(10)] HRESULT GetProperty(
+            [in] VARIANT_BOOL bPerLocale,
+            [in] BSTR bstrName,
+            [out, retval] BSTR *pbstrValue);
+
+    [id(11), propput] HRESULT EventHandled([in] VARIANT_BOOL rhs);
+    [id(12)] HRESULT ResetNextMenu();
+    [id(13)] HRESULT FindOnWeb();
+    [id(14)] HRESULT FindFilesOrFolders();
+    [id(15)] HRESULT FindComputer();
+    [id(16)] HRESULT FindPrinter();
+    [id(17)] HRESULT FindPeople();
+
+    [id(18)] HRESULT GetSearchAssistantURL(
+            [in] VARIANT_BOOL bSubstitute,
+            [in] VARIANT_BOOL bCustomize,
+            [out, retval] BSTR *pbstrValue);
+
+    [id(19)] HRESULT NotifySearchSettingsChanged();
+
+    [id(20), propput] HRESULT ASProvider([in] BSTR pProvider);
+    [id(20), propget] HRESULT ASProvider([out, retval] BSTR *pProvider);
+
+    [id(21), propput] HRESULT ASSetting([in] int pSetting);
+    [id(21), propget] HRESULT ASSetting([out, retval] int *pSetting);
+
+    [id(22)] HRESULT NETDetectNextNavigate();
+    [id(23)] HRESULT PutFindText([in] BSTR FindText);
+    [id(24), propget] HRESULT Version([out, retval] int *pVersion);
+
+    [id(25)] HRESULT EncodeString(
+            [in] BSTR bstrValue,
+            [in] BSTR bstrCharSet,
+            [in] VARIANT_BOOL bUseUTF8,
+            [out, retval] BSTR* pbstrResult);
+}
+
+[
+    odl,
+    uuid(72423e8f-8011-11d2-be79-00a0c9a83da2),
+    hidden,
+    dual,
+    oleautomation
+]
+interface ISearchAssistantOC2 : ISearchAssistantOC {
+    [id(26), propget] HRESULT ShowFindPrinter([out, retval] VARIANT_BOOL *pbShowFindPrinter);
+}
+
+[
+    odl,
+    uuid(72423e8f-8011-11d2-be79-00a0c9a83da3),
+    hidden,
+    dual,
+    oleautomation
+]
+interface ISearchAssistantOC3 : ISearchAssistantOC2 {
+    [id(27), propget] HRESULT SearchCompanionAvailable([out, retval] VARIANT_BOOL *pbAvailable);
+
+    [id(28), propput] HRESULT UseSearchCompanion([in] VARIANT_BOOL pbUseSC);
+    [id(28), propget] HRESULT UseSearchCompanion([out, retval] VARIANT_BOOL *pbUseSC);
+}
+
+[
+    uuid(1611fdda-445b-11d2-85de-00C04fa35c89),
+    hidden
+]
+dispinterface _SearchAssistantEvents {
+    properties:
+    methods:
+    [id(1)] void OnNextMenuSelect([in] long idItem);
+    [id(2)] void OnNewSearch();
+}
+
+[
+    helpstring("SearchAssistantOC"),
+    threading(apartment),
+    progid("SearchAssistantOC.SearchAssistantOC.1"),
+    vi_progid("SearchAssistantOC.SearchAssistantOC"),
+    uuid(2e71fd0f-aab1-42c0-9146-6d2c4edcf07d),
+    hidden
+]
+coclass ShellSearchAssistantOC {
+    [default] interface ISearchAssistantOC3;
+    [default, source] dispinterface _SearchAssistantEvents;
+}
+
+[
+    threading(apartment),
+    progid("SearchAssistantOC.SearchAssistantOC.1"),
+    vi_progid("SearchAssistantOC.SearchAssistantOC"),
+    uuid(b45ff030-4447-11d2-85de-00C04fa35c89),
+    hidden
+]
+coclass SearchAssistantOC {
+    [default] interface ISearchAssistantOC3;
+    [default, source] dispinterface _SearchAssistantEvents;
+}
+
+} /* library */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h
new file mode 100644
index 0000000..3b23a73
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2004 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef EXDISPID_H_
+#define EXDISPID_H_
+
+#define DISPID_BEFORENAVIGATE        100
+#define DISPID_NAVIGATECOMPLETE      101
+#define DISPID_STATUSTEXTCHANGE      102
+#define DISPID_QUIT                  103
+#define DISPID_DOWNLOADCOMPLETE      104
+#define DISPID_COMMANDSTATECHANGE    105
+#define DISPID_DOWNLOADBEGIN         106
+#define DISPID_NEWWINDOW             107
+#define DISPID_PROGRESSCHANGE        108
+#define DISPID_WINDOWMOVE            109
+#define DISPID_WINDOWRESIZE          110
+#define DISPID_WINDOWACTIVATE        111
+#define DISPID_PROPERTYCHANGE        112
+#define DISPID_TITLECHANGE           113
+#define DISPID_TITLEICONCHANGE       114
+
+#define DISPID_FRAMEBEFORENAVIGATE   200
+#define DISPID_FRAMENAVIGATECOMPLETE 201
+
+#define DISPID_FRAMENEWWINDOW        204
+
+#define DISPID_BEFORENAVIGATE2       250
+#define DISPID_NEWWINDOW2            251
+#define DISPID_NAVIGATECOMPLETE2     252
+#define DISPID_ONQUIT                253
+#define DISPID_ONVISIBLE             254
+#define DISPID_ONTOOLBAR             255
+#define DISPID_ONMENUBAR             256
+#define DISPID_ONSTATUSBAR           257
+#define DISPID_ONFULLSCREEN          258
+#define DISPID_DOCUMENTCOMPLETE      259
+#define DISPID_ONTHEATERMODE         260
+#define DISPID_ONADDRESSBAR          261
+#define DISPID_WINDOWSETRESIZABLE    262
+#define DISPID_WINDOWCLOSING         263
+#define DISPID_WINDOWSETLEFT         264
+#define DISPID_WINDOWSETTOP          265
+#define DISPID_WINDOWSETWIDTH        266
+#define DISPID_WINDOWSETHEIGHT       267
+#define DISPID_CLIENTTOHOSTWINDOW    268
+#define DISPID_SETSECURELOCKICON     269
+#define DISPID_FILEDOWNLOAD          270
+#define DISPID_NAVIGATEERROR         271
+#define DISPID_PRIVACYIMPACTEDSTATECHANGE 272
+#define DISPID_NEWWINDOW3                 273
+#define DISPID_VIEWUPDATE                 281
+#define DISPID_SETPHISHINGFILTERSTATUS    282
+#define DISPID_WINDOWSTATECHANGED         283
+#define DISPID_NEWPROCESS                 284
+#define DISPID_THIRDPARTYURLBLOCKED       285
+#define DISPID_REDIRECTXDOMAINBLOCKED     286
+
+#define DISPID_PRINTTEMPLATEINSTANTIATION 225
+#define DISPID_PRINTTEMPLATETEARDOWN      226
+#define DISPID_UPDATEPAGESTATUS           227
+
+#define DISPID_WINDOWREGISTERED 200
+#define DISPID_WINDOWREVOKED    201
+
+#define DISPID_RESETFIRSTBOOTMODE    1
+#define DISPID_RESETSAFEMODE         2
+#define DISPID_REFRESHOFFLINEDESKTOP 3
+#define DISPID_ADDFAVORITE           4
+#define DISPID_ADDCHANNEL            5
+#define DISPID_ADDDESKTOPCOMPONENT   6
+#define DISPID_ISSUBSCRIBED          7
+#define DISPID_NAVIGATEANDFIND       8
+#define DISPID_IMPORTEXPORTFAVORITES 9
+#define DISPID_AUTOCOMPLETESAVEFORM  10
+#define DISPID_AUTOSCAN              11
+#define DISPID_AUTOCOMPLETEATTACH    12
+#define DISPID_SHOWBROWSERUI         13
+#define DISPID_ADDSEARCHPROVIDER     14
+#define DISPID_RUNONCESHOWN          15
+#define DISPID_SKIPRUNONCE           16
+#define DISPID_CUSTOMIZESETTINGS     17
+#define DISPID_SQMENABLED            18
+#define DISPID_PHISHINGENABLED       19
+#define DISPID_BRANDIMAGEURI         20
+#define DISPID_SKIPTABSWELCOME       21
+#define DISPID_DIAGNOSECONNECTION    22
+#define DISPID_CUSTOMIZECLEARTYPE    23
+#define DISPID_ISSEARCHPROVIDERINSTALLED  24
+#define DISPID_ISSEARCHMIGRATED      25
+#define DISPID_DEFAULTSEARCHPROVIDER 26
+#define DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE  27
+#define DISPID_RUNONCEHASSHOWN       28
+#define DISPID_SEARCHGUIDEURL        29
+#define DISPID_ADDSERVICE            30
+#define DISPID_ISSERVICEINSTALLED    31
+#define DISPID_ADDTOFAVORITESBAR     32
+#define DISPID_BUILDNEWTABPAGE       33
+#define DISPID_SETRECENTLYCLOSEDVISIBLE   34
+#define DISPID_SETACTIVITIESVISIBLE       35
+#define DISPID_CONTENTDISCOVERYRESET      36
+#define DISPID_INPRIVATEFILTERINGENABLED  37
+#define DISPID_SUGGESTEDSITESENABLED      38
+#define DISPID_ENABLESUGGESTEDSITES       39
+#define DISPID_NAVIGATETOSUGGESTEDSITES   40
+#define DISPID_SHOWTABSHELP               41
+#define DISPID_SHOWINPRIVATEHELP          42
+#define DISPID_SHELLUIHELPERLAST          43
+
+#define DISPID_ADVANCEERROR            10
+#define DISPID_RETREATERROR            11
+#define DISPID_CANADVANCEERROR         12
+#define DISPID_CANRETREATERROR         13
+#define DISPID_GETERRORLINE            14
+#define DISPID_GETERRORCHAR            15
+#define DISPID_GETERRORCODE            16
+#define DISPID_GETERRORMSG             17
+#define DISPID_GETERRORURL             18
+#define DISPID_GETDETAILSSTATE         19
+#define DISPID_SETDETAILSSTATE         20
+#define DISPID_GETPERERRSTATE          21
+#define DISPID_SETPERERRSTATE          22
+#define DISPID_GETALWAYSSHOWLOCKSTATE  23
+
+#define DISPID_FAVSELECTIONCHANGE  1
+#define DISPID_SELECTIONCHANGE     2
+#define DISPID_DOUBLECLICK         3
+#define DISPID_INITIALIZED         4
+
+#define DISPID_MOVESELECTIONUP       1
+#define DISPID_MOVESELECTIONDOWN     2
+#define DISPID_RESETSORT             3
+#define DISPID_NEWFOLDER             4
+#define DISPID_SYNCHRONIZE           5
+#define DISPID_IMPORT                6
+#define DISPID_EXPORT                7
+#define DISPID_INVOKECONTEXTMENU     8
+#define DISPID_MOVESELECTIONTO       9
+#define DISPID_SUBSCRIPTIONSENABLED  10
+#define DISPID_CREATESUBSCRIPTION    11
+#define DISPID_DELETESUBSCRIPTION    12
+#define DISPID_SETROOT               13
+#define DISPID_ENUMOPTIONS           14
+#define DISPID_SELECTEDITEM          15
+#define DISPID_ROOT                  16
+#define DISPID_DEPTH                 17
+#define DISPID_MODE                  18
+#define DISPID_FLAGS                 19
+#define DISPID_TVFLAGS               20
+#define DISPID_NSCOLUMNS             21
+#define DISPID_COUNTVIEWTYPES        22
+#define DISPID_SETVIEWTYPE           23
+#define DISPID_SELECTEDITEMS         24
+#define DISPID_EXPAND                25
+#define DISPID_UNSELECTALL           26
+
+#endif /* EXDISPID_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h
new file mode 100644
index 0000000..6dcb3ed
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_FCI_H
+#define __WINE_FCI_H
+
+#include <basetsd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <pshpack4.h>
+#endif
+
+#ifndef INCLUDED_TYPES_FCI_FDI
+#define INCLUDED_TYPES_FCI_FDI 1
+
+/***********************************************************************
+ * Common FCI/TDI declarations
+ */
+
+typedef ULONG CHECKSUM;
+
+typedef ULONG UOFF;
+typedef ULONG COFF;
+
+/**********************************************************************/
+
+typedef struct {
+    int   erfOper;  /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */
+    int   erfType;  /* Optional error value filled in by FCI/FDI. */
+    BOOL  fError;   /* TRUE => error present */
+} ERF, *PERF;
+
+/**********************************************************************/
+
+#define CB_MAX_CHUNK         32768U
+#define CB_MAX_DISK          __MSABI_LONG(0x7fffffff)
+#define CB_MAX_FILENAME      256
+#define CB_MAX_CABINET_NAME  256
+#define CB_MAX_CAB_PATH      256
+#define CB_MAX_DISK_NAME     256
+
+/**********************************************************************/
+
+typedef unsigned short TCOMP;
+
+#define tcompMASK_TYPE          0x000F  /* Mask for compression type */
+#define tcompTYPE_NONE          0x0000  /* No compression */
+#define tcompTYPE_MSZIP         0x0001  /* MSZIP */
+#define tcompTYPE_QUANTUM       0x0002  /* Quantum */
+#define tcompTYPE_LZX           0x0003  /* LZX */
+#define tcompBAD                0x000F  /* Unspecified compression type */
+
+#define tcompMASK_LZX_WINDOW    0x1F00  /* Mask for LZX Compression Memory */
+#define tcompLZX_WINDOW_LO      0x0F00  /* Lowest LZX Memory (15) */
+#define tcompLZX_WINDOW_HI      0x1500  /* Highest LZX Memory (21) */
+#define tcompSHIFT_LZX_WINDOW        8  /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_LEVEL 0x00F0  /* Mask for Quantum Compression Level */
+#define tcompQUANTUM_LEVEL_LO   0x0010  /* Lowest Quantum Level (1) */
+#define tcompQUANTUM_LEVEL_HI   0x0070  /* Highest Quantum Level (7) */
+#define tcompSHIFT_QUANTUM_LEVEL     4  /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_MEM   0x1F00  /* Mask for Quantum Compression Memory */
+#define tcompQUANTUM_MEM_LO     0x0A00  /* Lowest Quantum Memory (10) */
+#define tcompQUANTUM_MEM_HI     0x1500  /* Highest Quantum Memory (21) */
+#define tcompSHIFT_QUANTUM_MEM       8  /* Amount to shift over to get int */
+
+#define tcompMASK_RESERVED      0xE000  /* Reserved bits (high 3 bits) */
+
+/**********************************************************************/
+
+#define CompressionTypeFromTCOMP(tc) \
+    ((tc) & tcompMASK_TYPE)
+
+#define CompressionLevelFromTCOMP(tc) \
+    (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)
+
+#define CompressionMemoryFromTCOMP(tc) \
+    (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)
+
+#define TCOMPfromTypeLevelMemory(t, l, m) \
+    (((m) << tcompSHIFT_QUANTUM_MEM  ) | \
+     ((l) << tcompSHIFT_QUANTUM_LEVEL) | \
+     ( t                             ))
+
+#define LZXCompressionWindowFromTCOMP(tc) \
+    (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)
+
+#define TCOMPfromLZXWindow(w) \
+    (((w) << tcompSHIFT_LZX_WINDOW) | \
+     ( tcompTYPE_LZX              ))
+
+#endif /* !defined(INCLUDED_TYPES_FCI_FDI) */
+
+/***********************************************************************
+ * FCI declarations
+ */
+
+typedef enum {
+    FCIERR_NONE,
+    FCIERR_OPEN_SRC,
+    FCIERR_READ_SRC,
+    FCIERR_ALLOC_FAIL,
+    FCIERR_TEMP_FILE,
+    FCIERR_BAD_COMPR_TYPE,
+    FCIERR_CAB_FILE,
+    FCIERR_USER_ABORT,
+    FCIERR_MCI_FAIL,
+} FCIERROR;
+
+/**********************************************************************/
+
+#ifndef _A_NAME_IS_UTF
+#define _A_NAME_IS_UTF  0x80
+#endif
+
+#ifndef _A_EXEC
+#define _A_EXEC         0x40
+#endif
+
+/**********************************************************************/
+
+typedef void *HFCI;
+
+/**********************************************************************/
+
+typedef struct {
+    ULONG cb;              /* Size available for cabinet on this media */
+    ULONG cbFolderThresh;  /* Threshold for forcing a new Folder */
+
+    UINT  cbReserveCFHeader;     /* Space to reserve in CFHEADER */
+    UINT  cbReserveCFFolder;     /* Space to reserve in CFFOLDER */
+    UINT  cbReserveCFData;       /* Space to reserve in CFDATA */
+    int   iCab;                  /* Sequential numbers for cabinets */
+    int   iDisk;                 /* Disk number */
+#ifndef REMOVE_CHICAGO_M6_HACK
+    int   fFailOnIncompressible; /* TRUE => Fail if a block is incompressible */
+#endif
+
+    USHORT setID; /* Cabinet set ID */
+
+    char szDisk[CB_MAX_DISK_NAME];   /* Current disk name */
+    char szCab[CB_MAX_CABINET_NAME]; /* Current cabinet name */
+    char szCabPath[CB_MAX_CAB_PATH]; /* Path for creating cabinet */
+} CCAB, *PCCAB;
+
+/**********************************************************************/
+
+typedef void * (__cdecl __WINE_ALLOC_SIZE(1) *PFNFCIALLOC)(ULONG cb);
+#define FNFCIALLOC(fn) void * __cdecl fn(ULONG cb)
+
+typedef void (__cdecl *PFNFCIFREE)(void *memory);
+#define FNFCIFREE(fn) void __cdecl fn(void *memory)
+
+typedef INT_PTR (__cdecl *PFNFCIOPEN) (char *pszFile, int oflag, int pmode, int *err, void *pv);
+#define FNFCIOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode, int *err, void *pv)
+
+typedef UINT (__cdecl *PFNFCIREAD) (INT_PTR hf, void *memory, UINT cb, int *err, void *pv);
+#define FNFCIREAD(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
+
+typedef UINT (__cdecl *PFNFCIWRITE)(INT_PTR hf, void *memory, UINT cb, int *err, void *pv);
+#define FNFCIWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
+
+typedef int  (__cdecl *PFNFCICLOSE)(INT_PTR hf, int *err, void *pv);
+#define FNFCICLOSE(fn) int __cdecl fn(INT_PTR hf, int *err, void *pv)
+
+typedef LONG (__cdecl *PFNFCISEEK) (INT_PTR hf, LONG dist, int seektype, int *err, void *pv);
+#define FNFCISEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype, int *err, void *pv)
+
+typedef int  (__cdecl *PFNFCIDELETE) (char *pszFile, int *err, void *pv);
+#define FNFCIDELETE(fn) int __cdecl fn(char *pszFile, int *err, void *pv)
+
+typedef BOOL (__cdecl *PFNFCIGETNEXTCABINET)(PCCAB pccab, ULONG  cbPrevCab, void *pv);
+#define FNFCIGETNEXTCABINET(fn) BOOL __cdecl fn(PCCAB pccab, \
+						ULONG  cbPrevCab, \
+						void *pv)
+
+typedef int (__cdecl *PFNFCIFILEPLACED)(PCCAB pccab,
+					char *pszFile,
+					LONG  cbFile,
+					BOOL  fContinuation,
+					void *pv);
+#define FNFCIFILEPLACED(fn) int __cdecl fn(PCCAB pccab, \
+					   char *pszFile, \
+                                           LONG  cbFile, \
+					   BOOL  fContinuation, \
+					   void *pv)
+
+typedef INT_PTR (__cdecl *PFNFCIGETOPENINFO)(char *pszName,
+					     USHORT *pdate,
+					     USHORT *ptime,
+					     USHORT *pattribs,
+					     int *err,
+					     void *pv);
+#define FNFCIGETOPENINFO(fn) INT_PTR __cdecl fn(char *pszName, \
+						USHORT *pdate, \
+						USHORT *ptime, \
+						USHORT *pattribs, \
+						int *err, \
+						void *pv)
+
+#define statusFile     0  /* Add File to Folder callback */
+#define statusFolder   1  /* Add Folder to Cabinet callback */
+#define statusCabinet  2  /* Write out a completed cabinet callback */
+
+typedef LONG (__cdecl *PFNFCISTATUS)(UINT typeStatus,
+				     ULONG cb1,
+				     ULONG cb2,
+				     void *pv);
+#define FNFCISTATUS(fn) LONG __cdecl fn(UINT typeStatus, \
+					ULONG  cb1, \
+					ULONG  cb2, \
+					void *pv)
+
+typedef BOOL (__cdecl *PFNFCIGETTEMPFILE)(char *pszTempName,
+					  int   cbTempName,
+					  void *pv);
+#define FNFCIGETTEMPFILE(fn) BOOL __cdecl fn(char *pszTempName, \
+                                             int   cbTempName, \
+                                             void *pv)
+
+/**********************************************************************/
+
+HFCI __cdecl FCICreate(PERF, PFNFCIFILEPLACED, PFNFCIALLOC, PFNFCIFREE,
+		       PFNFCIOPEN, PFNFCIREAD, PFNFCIWRITE, PFNFCICLOSE,
+		       PFNFCISEEK, PFNFCIDELETE, PFNFCIGETTEMPFILE, PCCAB,
+		       void *);
+BOOL __cdecl FCIAddFile(HFCI, char *, char *, BOOL, PFNFCIGETNEXTCABINET,
+			PFNFCISTATUS, PFNFCIGETOPENINFO, TCOMP);
+BOOL __cdecl FCIFlushCabinet(HFCI, BOOL, PFNFCIGETNEXTCABINET, PFNFCISTATUS);
+BOOL __cdecl FCIFlushFolder(HFCI, PFNFCIGETNEXTCABINET, PFNFCISTATUS);
+BOOL __cdecl FCIDestroy(HFCI hfci);
+
+/**********************************************************************/
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_FCI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h
new file mode 100644
index 0000000..e484768
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h
@@ -0,0 +1,310 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_FDI_H
+#define __WINE_FDI_H
+
+#include <basetsd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <pshpack4.h>
+#endif
+
+#ifndef INCLUDED_TYPES_FCI_FDI
+#define INCLUDED_TYPES_FCI_FDI 1
+
+/***********************************************************************
+ * Common FCI/TDI declarations
+ */
+
+typedef ULONG CHECKSUM;
+
+typedef ULONG UOFF;
+typedef ULONG COFF;
+
+/**********************************************************************/
+
+typedef struct {
+    int   erfOper;  /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */
+    int   erfType;  /* Optional error value filled in by FCI/FDI. */
+    BOOL  fError;   /* TRUE => error present */
+} ERF, *PERF;
+
+/**********************************************************************/
+
+#define CB_MAX_CHUNK         32768U
+#define CB_MAX_DISK          __MSABI_LONG(0x7fffffff)
+#define CB_MAX_FILENAME      256
+#define CB_MAX_CABINET_NAME  256
+#define CB_MAX_CAB_PATH      256
+#define CB_MAX_DISK_NAME     256
+
+/**********************************************************************/
+
+typedef unsigned short TCOMP;
+
+#define tcompMASK_TYPE          0x000F  /* Mask for compression type */
+#define tcompTYPE_NONE          0x0000  /* No compression */
+#define tcompTYPE_MSZIP         0x0001  /* MSZIP */
+#define tcompTYPE_QUANTUM       0x0002  /* Quantum */
+#define tcompTYPE_LZX           0x0003  /* LZX */
+#define tcompBAD                0x000F  /* Unspecified compression type */
+
+#define tcompMASK_LZX_WINDOW    0x1F00  /* Mask for LZX Compression Memory */
+#define tcompLZX_WINDOW_LO      0x0F00  /* Lowest LZX Memory (15) */
+#define tcompLZX_WINDOW_HI      0x1500  /* Highest LZX Memory (21) */
+#define tcompSHIFT_LZX_WINDOW        8  /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_LEVEL 0x00F0  /* Mask for Quantum Compression Level */
+#define tcompQUANTUM_LEVEL_LO   0x0010  /* Lowest Quantum Level (1) */
+#define tcompQUANTUM_LEVEL_HI   0x0070  /* Highest Quantum Level (7) */
+#define tcompSHIFT_QUANTUM_LEVEL     4  /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_MEM   0x1F00  /* Mask for Quantum Compression Memory */
+#define tcompQUANTUM_MEM_LO     0x0A00  /* Lowest Quantum Memory (10) */
+#define tcompQUANTUM_MEM_HI     0x1500  /* Highest Quantum Memory (21) */
+#define tcompSHIFT_QUANTUM_MEM       8  /* Amount to shift over to get int */
+
+#define tcompMASK_RESERVED      0xE000  /* Reserved bits (high 3 bits) */
+
+/**********************************************************************/
+
+#define CompressionTypeFromTCOMP(tc) \
+    ((tc) & tcompMASK_TYPE)
+
+#define CompressionLevelFromTCOMP(tc) \
+    (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)
+
+#define CompressionMemoryFromTCOMP(tc) \
+    (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)
+
+#define TCOMPfromTypeLevelMemory(t, l, m) \
+    (((m) << tcompSHIFT_QUANTUM_MEM  ) | \
+     ((l) << tcompSHIFT_QUANTUM_LEVEL) | \
+     ( t                             ))
+
+#define LZXCompressionWindowFromTCOMP(tc) \
+    (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)
+
+#define TCOMPfromLZXWindow(w) \
+    (((w) << tcompSHIFT_LZX_WINDOW) | \
+     ( tcompTYPE_LZX              ))
+
+#endif /* !defined(INCLUDED_TYPES_FCI_FDI) */
+
+/***********************************************************************
+ * FDI declarations
+ */
+
+typedef enum {
+    FDIERROR_NONE,
+    FDIERROR_CABINET_NOT_FOUND,
+    FDIERROR_NOT_A_CABINET,
+    FDIERROR_UNKNOWN_CABINET_VERSION,
+    FDIERROR_CORRUPT_CABINET,
+    FDIERROR_ALLOC_FAIL,
+    FDIERROR_BAD_COMPR_TYPE,
+    FDIERROR_MDI_FAIL,
+    FDIERROR_TARGET_FILE,
+    FDIERROR_RESERVE_MISMATCH,
+    FDIERROR_WRONG_CABINET,
+    FDIERROR_USER_ABORT,
+} FDIERROR;
+
+/**********************************************************************/
+
+#ifndef _A_NAME_IS_UTF
+#define _A_NAME_IS_UTF  0x80
+#endif
+
+#ifndef _A_EXEC
+#define _A_EXEC         0x40
+#endif
+
+/**********************************************************************/
+
+typedef void *HFDI;
+
+/**********************************************************************/
+
+typedef struct {
+    LONG    cbCabinet;  /* Total length of cabinet file */
+    USHORT  cFolders;   /* Count of folders in cabinet */
+    USHORT  cFiles;     /* Count of files in cabinet */
+    USHORT  setID;      /* Cabinet set ID */
+    USHORT  iCabinet;   /* Cabinet number in set (0 based) */
+    BOOL    fReserve;   /* TRUE => RESERVE present in cabinet */
+    BOOL    hasprev;    /* TRUE => Cabinet is chained prev */
+    BOOL    hasnext;    /* TRUE => Cabinet is chained next */
+} FDICABINETINFO, *PFDICABINETINFO; /* pfdici */
+
+/**********************************************************************/
+
+typedef enum {
+    fdidtNEW_CABINET,  /* New cabinet */
+    fdidtNEW_FOLDER,   /* New folder */
+    fdidtDECRYPT,      /* Decrypt a data block */
+} FDIDECRYPTTYPE;
+
+/**********************************************************************/
+
+typedef struct {
+    FDIDECRYPTTYPE fdidt; /* Command type (selects union below) */
+
+    void *pvUser; /* Decryption context */
+
+    union {
+        struct {                      /* fdidtNEW_CABINET */
+	    void   *pHeaderReserve;   /* RESERVE section from CFHEADER */
+	    USHORT  cbHeaderReserve;  /* Size of pHeaderReserve */
+	    USHORT  setID;            /* Cabinet set ID */
+	    int     iCabinet;         /* Cabinet number in set (0 based) */
+        } cabinet;
+
+        struct {                      /* fdidtNEW_FOLDER */
+	    void   *pFolderReserve;   /* RESERVE section from CFFOLDER */
+	    USHORT  cbFolderReserve;  /* Size of pFolderReserve */
+	    USHORT  iFolder;          /* Folder number in cabinet (0 based) */
+        } folder;
+
+        struct {                      /* fdidtDECRYPT */
+	    void   *pDataReserve;     /* RESERVE section from CFDATA */
+	    USHORT  cbDataReserve;    /* Size of pDataReserve */
+	    void   *pbData;           /* Data buffer */
+	    USHORT  cbData;           /* Size of data buffer */
+	    BOOL    fSplit;           /* TRUE if this is a split data block */
+	    USHORT  cbPartial;        /* 0 if this is not a split block, or
+				       * the first piece of a split block;
+                                       * Greater than 0 if this is the
+                                       * second piece of a split block.
+                                       */
+        } decrypt;
+    } DUMMYUNIONNAME;
+} FDIDECRYPT, *PFDIDECRYPT;
+
+/**********************************************************************/
+
+typedef void * (__cdecl *PFNALLOC)(ULONG cb);
+#define FNALLOC(fn) void * __cdecl fn(ULONG cb)
+
+typedef void (__cdecl *PFNFREE)(void *pv);
+#define FNFREE(fn) void __cdecl fn(void *pv)
+
+typedef INT_PTR (__cdecl *PFNOPEN) (char *pszFile, int oflag, int pmode);
+#define FNOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode)
+
+typedef UINT (__cdecl *PFNREAD) (INT_PTR hf, void *pv, UINT cb);
+#define FNREAD(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb)
+
+typedef UINT (__cdecl *PFNWRITE)(INT_PTR hf, void *pv, UINT cb);
+#define FNWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb)
+
+typedef int  (__cdecl *PFNCLOSE)(INT_PTR hf);
+#define FNCLOSE(fn) int __cdecl fn(INT_PTR hf)
+
+typedef LONG (__cdecl *PFNSEEK) (INT_PTR hf, LONG dist, int seektype);
+#define FNSEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype)
+
+typedef int (__cdecl *PFNFDIDECRYPT)(PFDIDECRYPT pfdid);
+#define FNFDIDECRYPT(fn) int __cdecl fn(PFDIDECRYPT pfdid)
+
+typedef struct {
+    LONG  cb;
+    char *psz1;
+    char *psz2;
+    char *psz3;  /* Points to a 256 character buffer */
+    void *pv;    /* Value for client */
+
+    INT_PTR hf;
+
+    USHORT date;
+    USHORT time;
+    USHORT attribs;
+
+    USHORT setID;     /* Cabinet set ID */
+    USHORT iCabinet;  /* Cabinet number (0-based) */
+    USHORT iFolder;   /* Folder number (0-based) */
+
+    FDIERROR fdie;
+} FDINOTIFICATION, *PFDINOTIFICATION;
+
+typedef enum {
+    fdintCABINET_INFO,     /* General information about cabinet */
+    fdintPARTIAL_FILE,     /* First file in cabinet is continuation */
+    fdintCOPY_FILE,        /* File to be copied */
+    fdintCLOSE_FILE_INFO,  /* Close the file, set relevant info */
+    fdintNEXT_CABINET,     /* File continued to next cabinet */
+    fdintENUMERATE,        /* Enumeration status */
+} FDINOTIFICATIONTYPE;
+
+typedef INT_PTR (__cdecl *PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint,
+					PFDINOTIFICATION  pfdin);
+#define FNFDINOTIFY(fn) INT_PTR __cdecl fn(FDINOTIFICATIONTYPE fdint, \
+					   PFDINOTIFICATION pfdin)
+
+#ifndef _WIN64
+#include <pshpack1.h>
+#endif
+
+typedef struct {
+    char ach[2];  /* Set to { '*', '\0' } */
+    LONG cbFile;  /* Required spill file size */
+} FDISPILLFILE, *PFDISPILLFILE;
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#define cpuUNKNOWN (-1)  /* FDI does detection */
+#define cpu80286   (0)   /* '286 opcodes only */
+#define cpu80386   (1)   /* '386 opcodes used */
+
+/**********************************************************************/
+
+HFDI __cdecl FDICreate(PFNALLOC, PFNFREE, PFNOPEN, PFNREAD, PFNWRITE,
+		       PFNCLOSE, PFNSEEK, int, PERF);
+BOOL __cdecl FDIIsCabinet(HFDI, INT_PTR, PFDICABINETINFO);
+BOOL __cdecl FDICopy(HFDI, char *, char *, int, PFNFDINOTIFY,
+		     PFNFDIDECRYPT, void *pvUser);
+BOOL __cdecl FDIDestroy(HFDI);
+BOOL __cdecl FDITruncateCabinet(HFDI, char *, USHORT);
+
+/**********************************************************************/
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_FDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h
new file mode 100644
index 0000000..c23dcbd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2013 André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_FILEAPI_H
+#define __WINE_FILEAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _CREATEFILE2_EXTENDED_PARAMETERS {
+    DWORD dwSize;
+    DWORD dwFileAttributes;
+    DWORD dwFileFlags;
+    DWORD dwSecurityQosFlags;
+    LPSECURITY_ATTRIBUTES lpSecurityAttributes;
+    HANDLE hTemplateFile;
+} CREATEFILE2_EXTENDED_PARAMETERS, *PCREATEFILE2_EXTENDED_PARAMETERS, *LPCREATEFILE2_EXTENDED_PARAMETERS;
+
+WINBASEAPI HANDLE WINAPI CreateFile2(LPCWSTR,DWORD,DWORD,DWORD,LPCREATEFILE2_EXTENDED_PARAMETERS);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_FILEAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h
new file mode 100644
index 0000000..393dd58
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h
@@ -0,0 +1,142 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _FLTDEFS_H
+#define _FLTDEFS_H
+
+typedef PVOID FILTER_HANDLE,*PFILTER_HANDLE;
+typedef PVOID INTERFACE_HANDLE,*PINTERFACE_HANDLE;
+
+#ifdef __cplusplus
+#define EXTERNCDECL EXTERN_C
+#else
+#define EXTERNCDECL
+#endif
+
+#define PFAPIENTRY EXTERNCDECL DWORD WINAPI
+
+typedef enum _GlobalFilter {
+  GF_FRAGMENTS = 2,GF_STRONGHOST = 8,GF_FRAGCACHE = 9
+} GLOBAL_FILTER,*PGLOBAL_FILTER;
+
+typedef enum _PfForwardAction {
+  PF_ACTION_FORWARD = 0,PF_ACTION_DROP
+} PFFORWARD_ACTION,*PPFFORWARD_ACTION;
+
+typedef enum _PfAddresType {
+  PF_IPV4,PF_IPV6
+} PFADDRESSTYPE,*PPFADDRESSTYPE;
+
+#define FILTER_PROTO(ProtoId) MAKELONG(MAKEWORD((ProtoId),0x00),0x00000)
+
+#define FILTER_PROTO_ANY FILTER_PROTO(0x00)
+#define FILTER_PROTO_ICMP FILTER_PROTO(0x01)
+#define FILTER_PROTO_TCP FILTER_PROTO(0x06)
+#define FILTER_PROTO_UDP FILTER_PROTO(0x11)
+
+#define FILTER_TCPUDP_PORT_ANY (WORD)0x0000
+
+#define FILTER_ICMP_TYPE_ANY (BYTE)0xff
+#define FILTER_ICMP_CODE_ANY (BYTE)0xff
+
+typedef struct _PF_FILTER_DESCRIPTOR {
+  DWORD dwFilterFlags;
+  DWORD dwRule;
+  PFADDRESSTYPE pfatType;
+  PBYTE SrcAddr;
+  PBYTE SrcMask;
+  PBYTE DstAddr;
+  PBYTE DstMask;
+  DWORD dwProtocol;
+  DWORD fLateBound;
+  WORD wSrcPort;
+  WORD wDstPort;
+  WORD wSrcPortHighRange;
+  WORD wDstPortHighRange;
+} PF_FILTER_DESCRIPTOR,*PPF_FILTER_DESCRIPTOR;
+
+typedef struct _PF_FILTER_STATS {
+  DWORD dwNumPacketsFiltered;
+  PF_FILTER_DESCRIPTOR info;
+} PF_FILTER_STATS,*PPF_FILTER_STATS;
+
+typedef struct _PF_INTERFACE_STATS {
+  PVOID pvDriverContext;
+  DWORD dwFlags;
+  DWORD dwInDrops;
+  DWORD dwOutDrops;
+  PFFORWARD_ACTION eaInAction;
+  PFFORWARD_ACTION eaOutAction;
+  DWORD dwNumInFilters;
+  DWORD dwNumOutFilters;
+  DWORD dwFrag;
+  DWORD dwSpoof;
+  DWORD dwReserved1;
+  DWORD dwReserved2;
+  LARGE_INTEGER liSYN;
+  LARGE_INTEGER liTotalLogged;
+  DWORD dwLostLogEntries;
+  PF_FILTER_STATS FilterInfo[1];
+} PF_INTERFACE_STATS,*PPF_INTERFACE_STATS;
+
+#define FILTERSIZE (sizeof(PF_FILTER_DESCRIPTOR) - (DWORD)(&((PPF_FILTER_DESCRIPTOR)0)->SrcAddr))
+
+#define FD_FLAGS_NOSYN 0x1
+
+#define FD_FLAGS_ALLFLAGS FD_FLAGS_NOSYN
+
+#define LB_SRC_ADDR_USE_SRCADDR_FLAG 0x00000001
+#define LB_SRC_ADDR_USE_DSTADDR_FLAG 0x00000002
+#define LB_DST_ADDR_USE_SRCADDR_FLAG 0x00000004
+#define LB_DST_ADDR_USE_DSTADDR_FLAG 0x00000008
+#define LB_SRC_MASK_LATE_FLAG 0x00000010
+#define LB_DST_MASK_LATE_FLAG 0x00000020
+
+typedef struct _PF_LATEBIND_INFO {
+  PBYTE SrcAddr;
+  PBYTE DstAddr;
+  PBYTE Mask;
+} PF_LATEBIND_INFO,*PPF_LATEBIND_INFO;
+
+typedef enum _PfFrameType {
+  PFFT_FILTER = 1,PFFT_FRAG = 2,PFFT_SPOOF = 3
+} PFFRAMETYPE,*PPFFRAMETYPE;
+
+typedef struct _pfLogFrame {
+  LARGE_INTEGER Timestamp;
+  PFFRAMETYPE pfeTypeOfFrame;
+  DWORD dwTotalSizeUsed;
+  DWORD dwFilterRule;
+  WORD wSizeOfAdditionalData;
+  WORD wSizeOfIpHeader;
+  DWORD dwInterfaceName;
+  DWORD dwIPIndex;
+  BYTE bPacketData[1];
+} PFLOGFRAME,*PPFLOGFRAME;
+
+#define ERROR_BASE 23000
+
+#define PFERROR_NO_PF_INTERFACE (ERROR_BASE + 0)
+#define PFERROR_NO_FILTERS_GIVEN (ERROR_BASE + 1)
+#define PFERROR_BUFFER_TOO_SMALL (ERROR_BASE + 2)
+#define ERROR_IPV6_NOT_IMPLEMENTED (ERROR_BASE + 3)
+
+PFAPIENTRY PfCreateInterface(DWORD dwName,PFFORWARD_ACTION inAction,PFFORWARD_ACTION outAction,BOOL bUseLog,BOOL bMustBeUnique,INTERFACE_HANDLE *ppInterface);
+PFAPIENTRY PfDeleteInterface(INTERFACE_HANDLE pInterface);
+PFAPIENTRY PfAddFiltersToInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut,PFILTER_HANDLE pfHandle);
+PFAPIENTRY PfRemoveFiltersFromInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut);
+PFAPIENTRY PfRemoveFilterHandles(INTERFACE_HANDLE pInterface,DWORD cFilters,PFILTER_HANDLE pvHandles);
+PFAPIENTRY PfUnBindInterface(INTERFACE_HANDLE pInterface);
+PFAPIENTRY PfBindInterfaceToIndex(INTERFACE_HANDLE pInterface,DWORD dwIndex,PFADDRESSTYPE pfatLinkType,PBYTE LinkIPAddress);
+PFAPIENTRY PfBindInterfaceToIPAddress(INTERFACE_HANDLE pInterface,PFADDRESSTYPE pfatType,PBYTE IPAddress);
+PFAPIENTRY PfRebindFilters(INTERFACE_HANDLE pInterface,PPF_LATEBIND_INFO pLateBindInfo);
+PFAPIENTRY PfAddGlobalFilterToInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);
+PFAPIENTRY PfRemoveGlobalFilterFromInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);
+PFAPIENTRY PfMakeLog(HANDLE hEvent);
+PFAPIENTRY PfSetLogBuffer(PBYTE pbBuffer,DWORD dwSize,DWORD dwThreshold,DWORD dwEntries,PDWORD pdwLoggedEntries,PDWORD pdwLostEntries,PDWORD pdwSizeUsed);
+PFAPIENTRY PfDeleteLog(VOID);
+PFAPIENTRY PfGetInterfaceStatistics(INTERFACE_HANDLE pInterface,PPF_INTERFACE_STATS ppfStats,PDWORD pdwBufferSize,BOOL fResetCounters);
+PFAPIENTRY PfTestPacket(INTERFACE_HANDLE pInInterface,INTERFACE_HANDLE pOutInterface,DWORD cBytes,PBYTE pbPacket,PPFFORWARD_ACTION ppAction);
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl
new file mode 100644
index 0000000..5ca8af0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl
@@ -0,0 +1,365 @@
+/*
+ * Copyright 2008 James Hawkins
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+interface IAssemblyCache;
+interface IAssemblyCacheItem;
+interface IAssemblyEnum;
+interface IAssemblyName;
+
+typedef enum
+{
+    ASM_CACHE_ZAP       = 0x1,
+    ASM_CACHE_GAC       = 0x2,
+    ASM_CACHE_DOWNLOAD  = 0x4,
+    ASM_CACHE_ROOT      = 0x8,
+    ASM_CACHE_ROOT_EX   = 0x80
+} ASM_CACHE_FLAGS;
+
+typedef enum
+{
+    peNone      = 0x00000000,
+    peMSIL      = 0x00000001,
+    peI386      = 0x00000002,
+    peIA64      = 0x00000003,
+    peAMD64     = 0x00000004,
+    peARM       = 0x00000005,
+    peInvalid   = 0xffffffff
+} PEKIND;
+
+typedef enum _tagAssemblyComparisonResult
+{
+    ACR_Unknown,
+    ACR_EquivalentFullMatch,
+    ACR_EquivalentWeakNamed,
+    ACR_EquivalentFXUnified,
+    ACR_EquivalentUnified,
+    ACR_NonEquivalentVersion,
+    ACR_NonEquivalent,
+    ACR_EquivalentPartialMatch,
+    ACR_EquivalentPartialWeakNamed,
+    ACR_EquivalentPartialUnified,
+    ACR_EquivalentPartialFXUnified,
+    ACR_NonEquivalentPartialVersion
+} AssemblyComparisonResult;
+
+[
+    local,
+    object,
+    uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
+    pointer_default(unique)
+]
+interface IAssemblyCache : IUnknown
+{
+    typedef struct _FUSION_INSTALL_REFERENCE_
+    {
+        DWORD cbSize;
+        DWORD dwFlags;
+        GUID guidScheme;
+        LPCWSTR szIdentifier;
+        LPCWSTR szNonCannonicalData;
+    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
+
+    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;
+
+    typedef struct _ASSEMBLY_INFO
+    {
+        ULONG cbAssemblyInfo;
+        DWORD dwAssemblyFlags;
+        ULARGE_INTEGER uliAssemblySizeInKB;
+        LPWSTR pszCurrentAssemblyPathBuf;
+        ULONG cchBuf;
+    } ASSEMBLY_INFO;
+
+    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH       0x00000001")
+    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH 0x00000002")
+
+    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED 1")
+    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 2")
+    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 3")
+    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING 4")
+    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 5")
+    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND 6")
+
+    cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE   0x00000001")
+    cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE    0x00000002")
+
+    cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED       0x00000001")
+    cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT 0x00000002")
+
+    HRESULT UninstallAssembly(
+        [in] DWORD dwFlags,
+        [in] LPCWSTR pszAssemblyName,
+        [in] LPCFUSION_INSTALL_REFERENCE pRefData,
+        [out, optional] ULONG *pulDisposition);
+
+    HRESULT QueryAssemblyInfo(
+        [in] DWORD dwFlags,
+        [in] LPCWSTR pszAssemblyName,
+        [in, out] ASSEMBLY_INFO *pAsmInfo);
+
+    HRESULT CreateAssemblyCacheItem(
+        [in] DWORD dwFlags,
+        [in] PVOID pvReserved,
+        [out] IAssemblyCacheItem **ppAsmItem,
+        [in, optional] LPCWSTR pszAssemblyName);
+
+    HRESULT CreateAssemblyScavenger([out] IUnknown **ppUnkReserved);
+
+    HRESULT InstallAssembly(
+        [in] DWORD dwFlags,
+        [in] LPCWSTR pszManifestFilePath,
+        [in] LPCFUSION_INSTALL_REFERENCE pRefData);
+}
+
+[
+    local,
+    object,
+    uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
+    pointer_default(unique)
+]
+interface IAssemblyCacheItem : IUnknown
+{
+    cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE    0")
+    cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST  1")
+    cpp_quote("#define STREAM_FORMAT_WIN32_MODULE      2")
+    cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST    4")
+
+    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH       0x00000001")
+    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH 0x00000002")
+
+    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED 1")
+    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED 2")
+    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED 3")
+
+    HRESULT CreateStream(
+        [in] DWORD dwFlags,
+        [in] LPCWSTR pszStreamName,
+        [in] DWORD dwFormat,
+        [in] DWORD dwFormatFlags,
+        [out] IStream **ppIStream,
+        [in, optional] ULARGE_INTEGER *puliMaxSize);
+
+    HRESULT Commit(
+        [in] DWORD dwFlags,
+        [out, optional] ULONG *pulDisposition);
+
+    HRESULT AbortItem();
+}
+
+[
+    local,
+    object,
+    uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
+    pointer_default(unique)
+]
+interface IAssemblyName: IUnknown
+{
+    typedef [unique] IAssemblyName *LPASSEMBLYNAME;
+
+    typedef enum
+    {
+        CANOF_PARSE_DISPLAY_NAME = 0x1,
+        CANOF_SET_DEFAULT_VALUES = 0x2,
+        CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4,
+        CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME |
+                                          CANOF_VERIFY_FRIEND_ASSEMBLYNAME
+    } CREATE_ASM_NAME_OBJ_FLAGS;
+
+    typedef enum
+    {
+        ASM_NAME_PUBLIC_KEY = 0,
+        ASM_NAME_PUBLIC_KEY_TOKEN,
+        ASM_NAME_HASH_VALUE,
+        ASM_NAME_NAME,
+        ASM_NAME_MAJOR_VERSION,
+        ASM_NAME_MINOR_VERSION,
+        ASM_NAME_BUILD_NUMBER,
+        ASM_NAME_REVISION_NUMBER,
+        ASM_NAME_CULTURE,
+        ASM_NAME_PROCESSOR_ID_ARRAY,
+        ASM_NAME_OSINFO_ARRAY,
+        ASM_NAME_HASH_ALGID,
+        ASM_NAME_ALIAS,
+        ASM_NAME_CODEBASE_URL,
+        ASM_NAME_CODEBASE_LASTMOD,
+        ASM_NAME_NULL_PUBLIC_KEY,
+        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
+        ASM_NAME_CUSTOM,
+        ASM_NAME_NULL_CUSTOM,
+        ASM_NAME_MVID,
+        ASM_NAME_FILE_MAJOR_VERSION,
+        ASM_NAME_FILE_MINOR_VERSION,
+        ASM_NAME_FILE_BUILD_NUMBER,
+        ASM_NAME_FILE_REVISION_NUMBER,
+        ASM_NAME_RETARGET,
+        ASM_NAME_SIGNATURE_BLOB,
+        ASM_NAME_CONFIG_MASK,
+        ASM_NAME_ARCHITECTURE,
+        ASM_NAME_MAX_PARAMS
+    } ASM_NAME;
+
+    typedef enum
+    {
+        ASM_DISPLAYF_VERSION = 0x1,
+        ASM_DISPLAYF_CULTURE = 0x2,
+        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
+        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
+        ASM_DISPLAYF_CUSTOM = 0x10,
+        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
+        ASM_DISPLAYF_LANGUAGEID = 0x40,
+        ASM_DISPLAYF_RETARGET = 0x80,
+        ASM_DISPLAYF_CONFIG_MASK = 0x100,
+        ASM_DISPLAYF_MVID = 0x200,
+
+        ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION |
+                            ASM_DISPLAYF_CULTURE |
+                            ASM_DISPLAYF_PUBLIC_KEY_TOKEN |
+                            ASM_DISPLAYF_RETARGET |
+                            ASM_DISPLAYF_PROCESSORARCHITECTURE,
+    } ASM_DISPLAY_FLAGS;
+
+    typedef enum
+    {
+        ASM_CMPF_NAME               = 0x1,
+        ASM_CMPF_MAJOR_VERSION      = 0x2,
+        ASM_CMPF_MINOR_VERSION      = 0x4,
+        ASM_CMPF_BUILD_NUMBER       = 0x8,
+        ASM_CMPF_REVISION_NUMBER    = 0x10,
+        ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION |
+                           ASM_CMPF_MINOR_VERSION |
+                           ASM_CMPF_BUILD_NUMBER |
+                           ASM_CMPF_REVISION_NUMBER,
+        ASM_CMPF_PUBLIC_KEY_TOKEN   = 0x20,
+        ASM_CMPF_CULTURE            = 0x40,
+        ASM_CMPF_CUSTOM             = 0x80,
+        ASM_CMPF_DEFAULT            = 0x100,
+        ASM_CMPF_RETARGET           = 0x200,
+        ASM_CMPF_ARCHITECTURE       = 0x400,
+        ASM_CMPF_CONFIG_MASK        = 0x800,
+        ASM_CMPF_MVID               = 0x1000,
+        ASM_CMPF_SIGNATURE          = 0x2000,
+        ASM_CMPF_IL_ALL = ASM_CMPF_NAME |
+                          ASM_CMPF_VERSION |
+                          ASM_CMPF_PUBLIC_KEY_TOKEN |
+                          ASM_CMPF_CULTURE,
+        ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME |
+                                 ASM_CMPF_PUBLIC_KEY_TOKEN |
+                                 ASM_CMPF_CULTURE
+    } ASM_CMP_FLAGS;
+
+    HRESULT SetProperty(
+        [in] DWORD PropertyId,
+        [in] LPVOID pvProperty,
+        [in] DWORD cbProperty);
+
+    HRESULT GetProperty(
+        [in] DWORD PropertyId,
+        [out] LPVOID pvProperty,
+        [in, out] LPDWORD pcbProperty);
+
+    HRESULT Finalize();
+
+    HRESULT GetDisplayName(
+        [out] LPOLESTR szDisplayName,
+        [in, out] LPDWORD pccDisplayName,
+        [in] DWORD dwDisplayFlags);
+
+    HRESULT Reserved(
+        [in] REFIID refIID,
+        [in] IUnknown *pUnkReserved1,
+        [in] IUnknown *pUnkReserved2,
+        [in] LPCOLESTR szReserved,
+        [in] LONGLONG llReserved,
+        [in] LPVOID pvReserved,
+        [in] DWORD cbReserved,
+        [out] LPVOID *ppReserved);
+
+    HRESULT GetName(
+        [in, out] LPDWORD lpcwBuffer,
+        [out] WCHAR *pwzName);
+
+    HRESULT GetVersion(
+        [out] LPDWORD pdwVersionHi,
+        [out] LPDWORD pdwVersionLow);
+
+    HRESULT IsEqual(
+        [in] IAssemblyName *pName,
+        [in] DWORD dwCmpFlags);
+
+    HRESULT Clone([out] IAssemblyName **pName);
+}
+
+[
+    local,
+    object,
+    uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
+    pointer_default(unique)
+]
+interface IAssemblyEnum : IUnknown
+{
+    HRESULT GetNextAssembly(
+        [in] LPVOID pvReserved,
+        [out] IAssemblyName **ppName,
+        [in] DWORD dwFlags);
+
+    HRESULT Reset(void);
+
+    HRESULT Clone([out] IAssemblyEnum **ppEnum);
+}
+
+[
+    local,
+    object,
+    uuid(582dac66-e678-449f-aba6-6faaec8a9394),
+    pointer_default(unique)
+]
+interface IInstallReferenceItem : IUnknown
+{
+
+}
+
+[
+    local,
+    object,
+    uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
+    pointer_default(unique)
+]
+interface IInstallReferenceEnum : IUnknown
+{
+
+}
+
+cpp_quote("HRESULT WINAPI ClearDownloadCache(void);")
+cpp_quote("HRESULT WINAPI CompareAssemblyIdentity(LPCWSTR,BOOL,LPCWSTR,BOOL,BOOL*,AssemblyComparisonResult*);")
+cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum**,IUnknown*,IAssemblyName*,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME*,LPCWSTR,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI CreateInstallReferenceEnum(IInstallReferenceEnum**,IAssemblyName*,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI GetAssemblyIdentityFromFile(LPCWSTR,REFIID,IUnknown**);")
+cpp_quote("HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS,LPWSTR,PDWORD);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl
new file mode 100644
index 0000000..bc4d312
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl
@@ -0,0 +1,210 @@
+ /*
+ *	Defines the COM interfaces of Game Explorer
+ *
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Mariusz Pluciński
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "shobjidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+  uuid(4F48A59C-942D-4F3C-83C9-4EFFE84E4959),
+  version(1.0),
+  helpstring("gameux public 1.0 Type Library")
+]
+library gameuxLib
+{
+    importlib("stdole2.tlb");
+
+    cpp_quote("#define ID_GDF_XML __GDF_XML")
+    cpp_quote("#define ID_GDF_THUMBNAIL __GDF_THUMBNAIL")
+    cpp_quote("#define ID_ICON_ICO __ICON_ICO")
+
+    cpp_quote("#if defined(__GNUC__)")
+    cpp_quote("#define ID_GDF_XML_STR (const WCHAR[]){'_','_','G','D','F','_','X','M','L',0}")
+    cpp_quote("#define ID_GDF_THUMBNAIL_STR (const WCHAR[]){'_','_','G','D','F','_','T','H','U','M','B','N','A','I','L',0}")
+    cpp_quote("#elif defined(_MSC_VER)")
+    cpp_quote("#define ID_GDF_XML_STR L\"__GDF_XML\"")
+    cpp_quote("#define ID_GDF_THUMBNAIL_STR L\"__GDF_THUMBNAIL\"")
+    cpp_quote("#endif")
+
+    typedef enum
+    {
+        GIS_NOT_INSTALLED  = 1,
+        GIS_CURRENT_USER   = 2,
+        GIS_ALL_USERS      = 3
+    } GAME_INSTALL_SCOPE;
+
+    typedef enum
+    {
+        GAMESTATS_OPEN_OPENORCREATE = 0,
+        GAMESTATS_OPEN_OPENONLY = 1
+    } GAMESTATS_OPEN_TYPE;
+
+    typedef enum
+    {
+        GAMESTATS_OPEN_CREATED = 0,
+        GAMESTATS_OPEN_OPENED = 1
+    } GAMESTATS_OPEN_RESULT;
+
+    [
+      object,
+      uuid(E7B2FB72-D728-49B3-A5F2-18EBF5F1349E)
+    ]
+    interface IGameExplorer : IUnknown
+    {
+        HRESULT AddGame([in] BSTR sGDFBinaryPath,
+                    [in] BSTR sInstallDirectory,
+                    [in] GAME_INSTALL_SCOPE installScope,
+                    [in, out] GUID* pguidInstanceID);
+
+        HRESULT RemoveGame([in] GUID instanceID);
+
+        HRESULT UpdateGame([in] GUID instanceID);
+
+        HRESULT VerifyAccess([in] BSTR sGDFBinaryPath,
+                    [out] BOOL* pHasAccess);
+    };
+
+    [
+      object,
+      uuid(3887C9CA-04A0-42ae-BC4C-5FA6C7721145)
+    ]
+    interface IGameStatistics : IUnknown
+    {
+        HRESULT GetMaxCategoryLength(
+                    [retval, out] UINT* cch);
+
+        HRESULT GetMaxNameLength(
+                    [retval, out] UINT* cch);
+
+        HRESULT GetMaxValueLength(
+                    [retval, out] UINT* cch);
+
+        HRESULT GetMaxCategories(
+                    [retval, out] WORD* pMax);
+
+        HRESULT GetMaxStatsPerCategory(
+                    [retval, out] WORD* pMax);
+
+        HRESULT SetCategoryTitle(
+                    [in] WORD categoryIndex,
+                    [string, in] LPCWSTR title);
+
+        HRESULT GetCategoryTitle(
+                    [in] WORD categoryIndex,
+                    [retval, string, out] LPWSTR* pTitle);
+
+        HRESULT GetStatistic(
+                    [in] WORD categoryIndex,
+                    [in] WORD statIndex,
+                    [string, unique, out, in] LPWSTR* pName,
+                    [string, unique, out, in] LPWSTR* pValue);
+
+        HRESULT SetStatistic(
+                    [in] WORD categoryIndex,
+                    [in] WORD statIndex,
+                    [string, in] LPCWSTR name,
+                    [string, in] LPCWSTR value);
+
+        HRESULT Save(
+                    [in] BOOL trackChanges);
+
+        HRESULT SetLastPlayedCategory(
+                    [in] UINT categoryIndex);
+
+        HRESULT GetLastPlayedCategory(
+                    [retval, out] UINT* pCategoryIndex);
+    };
+
+    [
+      object,
+      uuid(AFF3EA11-E70E-407d-95DD-35E612C41CE2)
+    ]
+    interface IGameStatisticsMgr : IUnknown
+    {
+        HRESULT GetGameStatistics(
+                    [string, in] LPCWSTR GDFBinaryPath,
+                    [in] GAMESTATS_OPEN_TYPE openType,
+                    [out] GAMESTATS_OPEN_RESULT* pOpenResult,
+                    [retval, out] IGameStatistics** ppiStats);
+
+        HRESULT RemoveGameStatistics(
+                    [string, in] LPCWSTR GDFBinaryPath);
+    };
+
+    [
+      object,
+      uuid(86874AA7-A1ED-450d-A7EB-B89E20B2FFF3)
+    ]
+    interface IGameExplorer2 : IUnknown
+    {
+       HRESULT InstallGame(
+                    [string, in] LPCWSTR binaryGDFPath,
+                    [unique, in] LPCWSTR installDirectory,
+                    [in] GAME_INSTALL_SCOPE installScope);
+
+        HRESULT UninstallGame(
+                    [string, in] LPCWSTR binaryGDFPath);
+
+        HRESULT CheckAccess(
+                    [string, in] LPCWSTR binaryGDFPath,
+                    [retval, out] BOOL* pHasAccess);
+
+    }
+
+    [
+      helpstring("GameExplorer Class"),
+      threading(both),
+      progid("gameux.GameExplorer.1"),
+      vi_progid("gameux.GameExplorer"),
+      uuid(9A5EA990-3034-4D6F-9128-01F3C61022BC)
+    ]
+    coclass GameExplorer
+    {
+        [default] interface IGameExplorer;
+    };
+
+    [
+      helpstring("GameStatistics Class"),
+      threading(apartment),
+      progid("gameux.GameStatistics.1"),
+      vi_progid("gameux.GameStatistics"),
+      uuid(DBC85A2C-C0DC-4961-B6E2-D28B62C11AD4)
+    ]
+    coclass GameStatistics
+    {
+        [default] interface IGameStatistics;
+    };
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h
new file mode 100644
index 0000000..dfc54a9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUS_H
+#define _GDIPLUS_H
+
+#ifdef __cplusplus
+
+namespace Gdiplus
+{
+    namespace DllExports
+    {
+#include "gdiplusmem.h"
+    };
+
+#include "gdiplusenums.h"
+#include "gdiplustypes.h"
+#include "gdiplusinit.h"
+#include "gdipluspixelformats.h"
+#include "gdiplusmetaheader.h"
+#include "gdiplusimaging.h"
+#include "gdipluscolor.h"
+#include "gdipluscolormatrix.h"
+#include "gdiplusgpstubs.h"
+
+    namespace DllExports
+    {
+#include "gdiplusflat.h"
+    };
+};
+
+#else /* end c++ includes */
+
+#include "gdiplusmem.h"
+
+#include "gdiplusenums.h"
+#include "gdiplustypes.h"
+#include "gdiplusinit.h"
+#include "gdipluspixelformats.h"
+#include "gdiplusmetaheader.h"
+#include "gdiplusimaging.h"
+#include "gdipluscolor.h"
+#include "gdipluscolormatrix.h"
+#include "gdiplusgpstubs.h"
+
+#include "gdiplusflat.h"
+
+#endif /* end c includes */
+
+#endif /* _GDIPLUS_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h
new file mode 100644
index 0000000..9116098
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2808 Google (Lei Zhang)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSCOLOR_H
+#define _GDIPLUSCOLOR_H
+
+enum ColorChannelFlags
+{
+    ColorChannelFlagsC,
+    ColorChannelFlagsM,
+    ColorChannelFlagsY,
+    ColorChannelFlagsK,
+    ColorChannelFlagsLast
+};
+
+#ifdef __cplusplus
+
+/* FIXME: missing the methods. */
+class Color
+{
+protected:
+    ARGB Argb;
+};
+
+#else /* end of c++ typedefs */
+
+typedef struct Color
+{
+    ARGB Argb;
+} Color;
+
+typedef enum ColorChannelFlags ColorChannelFlags;
+
+#endif  /* end of c typedefs */
+
+#endif  /* _GDIPLUSCOLOR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h
new file mode 100644
index 0000000..5c99487
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSCOLORMATRIX_H
+#define _GDIPLUSCOLORMATRIX_H
+
+struct ColorMatrix
+{
+    REAL m[5][5];
+};
+
+enum ColorMatrixFlags
+{
+    ColorMatrixFlagsDefault    = 0,
+    ColorMatrixFlagsSkipGrays  = 1,
+    ColorMatrixFlagsAltGray    = 2
+};
+
+enum ColorAdjustType
+{
+    ColorAdjustTypeDefault,
+    ColorAdjustTypeBitmap,
+    ColorAdjustTypeBrush,
+    ColorAdjustTypePen,
+    ColorAdjustTypeText,
+    ColorAdjustTypeCount,
+    ColorAdjustTypeAny
+};
+
+struct ColorMap
+{
+    Color oldColor;
+    Color newColor;
+};
+
+#ifndef __cplusplus
+
+typedef enum ColorAdjustType ColorAdjustType;
+typedef enum ColorMatrixFlags ColorMatrixFlags;
+typedef struct ColorMatrix ColorMatrix;
+typedef struct ColorMap ColorMap;
+
+#endif  /* end of c typedefs */
+
+#endif  /* _GDIPLUSCOLORMATRIX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h
new file mode 100644
index 0000000..155284c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h
@@ -0,0 +1,767 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSENUMS_H
+#define _GDIPLUSENUMS_H
+
+typedef UINT GraphicsState;
+typedef UINT GraphicsContainer;
+
+enum Unit
+{
+    UnitWorld       = 0,
+    UnitDisplay     = 1,
+    UnitPixel       = 2,
+    UnitPoint       = 3,
+    UnitInch        = 4,
+    UnitDocument    = 5,
+    UnitMillimeter  = 6
+};
+
+enum BrushType
+{
+   BrushTypeSolidColor       = 0,
+   BrushTypeHatchFill        = 1,
+   BrushTypeTextureFill      = 2,
+   BrushTypePathGradient     = 3,
+   BrushTypeLinearGradient   = 4
+};
+
+enum DriverStringOptions
+{
+   DriverStringOptionsCmapLookup      = 1,
+   DriverStringOptionsVertical        = 2,
+   DriverStringOptionsRealizedAdvance = 4,
+   DriverStringOptionsLimitSubpixel   = 4
+};
+
+enum FillMode
+{
+    FillModeAlternate   = 0,
+    FillModeWinding     = 1
+};
+
+enum LineCap
+{
+    LineCapFlat             = 0x00,
+    LineCapSquare           = 0x01,
+    LineCapRound            = 0x02,
+    LineCapTriangle         = 0x03,
+
+    LineCapNoAnchor         = 0x10,
+    LineCapSquareAnchor     = 0x11,
+    LineCapRoundAnchor      = 0x12,
+    LineCapDiamondAnchor    = 0x13,
+    LineCapArrowAnchor      = 0x14,
+
+    LineCapCustom           = 0xff,
+    LineCapAnchorMask       = 0xf0
+};
+
+enum PathPointType{
+    PathPointTypeStart          = 0,    /* start of a figure */
+    PathPointTypeLine           = 1,
+    PathPointTypeBezier         = 3,
+    PathPointTypePathTypeMask   = 7,
+    PathPointTypePathDashMode   = 16,   /* not used */
+    PathPointTypePathMarker     = 32,
+    PathPointTypeCloseSubpath   = 128,  /* end of a closed figure */
+    PathPointTypeBezier3        = 3
+};
+
+enum PenType
+{
+   PenTypeSolidColor       = BrushTypeSolidColor,
+   PenTypeHatchFill        = BrushTypeHatchFill,
+   PenTypeTextureFill      = BrushTypeTextureFill,
+   PenTypePathGradient     = BrushTypePathGradient,
+   PenTypeLinearGradient   = BrushTypeLinearGradient,
+   PenTypeUnknown          = -1
+};
+
+enum LineJoin
+{
+    LineJoinMiter           = 0,
+    LineJoinBevel           = 1,
+    LineJoinRound           = 2,
+    LineJoinMiterClipped    = 3
+};
+
+enum QualityMode
+{
+    QualityModeInvalid  = -1,
+    QualityModeDefault  = 0,
+    QualityModeLow      = 1,
+    QualityModeHigh     = 2
+};
+
+enum SmoothingMode
+{
+    SmoothingModeInvalid     = QualityModeInvalid,
+    SmoothingModeDefault     = QualityModeDefault,
+    SmoothingModeHighSpeed   = QualityModeLow,
+    SmoothingModeHighQuality = QualityModeHigh,
+    SmoothingModeNone,
+    SmoothingModeAntiAlias
+};
+
+enum CompositingQuality
+{
+    CompositingQualityInvalid          = QualityModeInvalid,
+    CompositingQualityDefault          = QualityModeDefault,
+    CompositingQualityHighSpeed        = QualityModeLow,
+    CompositingQualityHighQuality      = QualityModeHigh,
+    CompositingQualityGammaCorrected,
+    CompositingQualityAssumeLinear
+};
+
+enum InterpolationMode
+{
+    InterpolationModeInvalid        = QualityModeInvalid,
+    InterpolationModeDefault        = QualityModeDefault,
+    InterpolationModeLowQuality     = QualityModeLow,
+    InterpolationModeHighQuality    = QualityModeHigh,
+    InterpolationModeBilinear,
+    InterpolationModeBicubic,
+    InterpolationModeNearestNeighbor,
+    InterpolationModeHighQualityBilinear,
+    InterpolationModeHighQualityBicubic
+};
+
+enum PenAlignment
+{
+    PenAlignmentCenter   = 0,
+    PenAlignmentInset    = 1
+};
+
+enum PixelOffsetMode
+{
+    PixelOffsetModeInvalid     = QualityModeInvalid,
+    PixelOffsetModeDefault     = QualityModeDefault,
+    PixelOffsetModeHighSpeed   = QualityModeLow,
+    PixelOffsetModeHighQuality = QualityModeHigh,
+    PixelOffsetModeNone,
+    PixelOffsetModeHalf
+};
+
+enum DashCap
+{
+    DashCapFlat     = 0,
+    DashCapRound    = 2,
+    DashCapTriangle = 3
+};
+
+enum DashStyle
+{
+    DashStyleSolid,
+    DashStyleDash,
+    DashStyleDot,
+    DashStyleDashDot,
+    DashStyleDashDotDot,
+    DashStyleCustom
+};
+
+enum MatrixOrder
+{
+    MatrixOrderPrepend = 0,
+    MatrixOrderAppend  = 1
+};
+
+enum ImageType
+{
+    ImageTypeUnknown,
+    ImageTypeBitmap,
+    ImageTypeMetafile
+};
+
+enum WarpMode {
+    WarpModePerspective,
+    WarpModeBilinear
+};
+
+enum WrapMode
+{
+    WrapModeTile,
+    WrapModeTileFlipX,
+    WrapModeTileFlipY,
+    WrapModeTileFlipXY,
+    WrapModeClamp
+};
+
+enum MetafileType
+{
+    MetafileTypeInvalid,
+    MetafileTypeWmf,
+    MetafileTypeWmfPlaceable,
+    MetafileTypeEmf,
+    MetafileTypeEmfPlusOnly,
+    MetafileTypeEmfPlusDual
+};
+
+enum LinearGradientMode
+{
+    LinearGradientModeHorizontal,
+    LinearGradientModeVertical,
+    LinearGradientModeForwardDiagonal,
+    LinearGradientModeBackwardDiagonal
+};
+
+enum EmfType
+{
+    EmfTypeEmfOnly     = MetafileTypeEmf,
+    EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly,
+    EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual
+};
+
+enum CompositingMode
+{
+    CompositingModeSourceOver,
+    CompositingModeSourceCopy
+};
+
+enum TextRenderingHint
+{
+    TextRenderingHintSystemDefault = 0,
+    TextRenderingHintSingleBitPerPixelGridFit,
+    TextRenderingHintSingleBitPerPixel,
+    TextRenderingHintAntiAliasGridFit,
+    TextRenderingHintAntiAlias,
+    TextRenderingHintClearTypeGridFit
+};
+
+enum StringAlignment
+{
+    StringAlignmentNear    = 0,
+    StringAlignmentCenter  = 1,
+    StringAlignmentFar     = 2
+};
+
+enum  StringDigitSubstitute
+{
+    StringDigitSubstituteUser        = 0,
+    StringDigitSubstituteNone        = 1,
+    StringDigitSubstituteNational    = 2,
+    StringDigitSubstituteTraditional = 3
+};
+
+enum StringFormatFlags
+{
+    StringFormatFlagsDirectionRightToLeft  = 0x00000001,
+    StringFormatFlagsDirectionVertical     = 0x00000002,
+    StringFormatFlagsNoFitBlackBox         = 0x00000004,
+    StringFormatFlagsDisplayFormatControl  = 0x00000020,
+    StringFormatFlagsNoFontFallback        = 0x00000400,
+    StringFormatFlagsMeasureTrailingSpaces = 0x00000800,
+    StringFormatFlagsNoWrap                = 0x00001000,
+    StringFormatFlagsLineLimit             = 0x00002000,
+    StringFormatFlagsNoClip                = 0x00004000
+};
+
+enum StringTrimming
+{
+    StringTrimmingNone                 = 0,
+    StringTrimmingCharacter            = 1,
+    StringTrimmingWord                 = 2,
+    StringTrimmingEllipsisCharacter    = 3,
+    StringTrimmingEllipsisWord         = 4,
+    StringTrimmingEllipsisPath         = 5
+};
+
+enum FontStyle
+{
+    FontStyleRegular    = 0,
+    FontStyleBold       = 1,
+    FontStyleItalic     = 2,
+    FontStyleBoldItalic = 3,
+    FontStyleUnderline  = 4,
+    FontStyleStrikeout  = 8
+};
+
+enum HotkeyPrefix
+{
+    HotkeyPrefixNone   = 0,
+    HotkeyPrefixShow   = 1,
+    HotkeyPrefixHide   = 2
+};
+
+enum ImageCodecFlags
+{
+    ImageCodecFlagsEncoder          = 1,
+    ImageCodecFlagsDecoder          = 2,
+    ImageCodecFlagsSupportBitmap    = 4,
+    ImageCodecFlagsSupportVector    = 8,
+    ImageCodecFlagsSeekableEncode   = 16,
+    ImageCodecFlagsBlockingDecode   = 32,
+    ImageCodecFlagsBuiltin          = 65536,
+    ImageCodecFlagsSystem           = 131072,
+    ImageCodecFlagsUser             = 262144
+};
+
+enum ImageFlags
+{
+    ImageFlagsNone              = 0,
+    ImageFlagsScalable          = 0x0001,
+    ImageFlagsHasAlpha          = 0x0002,
+    ImageFlagsHasTranslucent    = 0x0004,
+    ImageFlagsPartiallyScalable = 0x0008,
+    ImageFlagsColorSpaceRGB     = 0x0010,
+    ImageFlagsColorSpaceCMYK    = 0x0020,
+    ImageFlagsColorSpaceGRAY    = 0x0040,
+    ImageFlagsColorSpaceYCBCR   = 0x0080,
+    ImageFlagsColorSpaceYCCK    = 0x0100,
+    ImageFlagsHasRealDPI        = 0x1000,
+    ImageFlagsHasRealPixelSize  = 0x2000,
+    ImageFlagsReadOnly          = 0x00010000,
+    ImageFlagsCaching           = 0x00020000
+};
+
+enum CombineMode
+{
+    CombineModeReplace,
+    CombineModeIntersect,
+    CombineModeUnion,
+    CombineModeXor,
+    CombineModeExclude,
+    CombineModeComplement
+};
+
+enum FlushIntention
+{
+    FlushIntentionFlush = 0,
+    FlushIntentionSync  = 1
+};
+
+enum CoordinateSpace
+{
+    CoordinateSpaceWorld,
+    CoordinateSpacePage,
+    CoordinateSpaceDevice
+};
+
+enum GpTestControlEnum
+{
+    TestControlForceBilinear  = 0,
+    TestControlNoICM          = 1,
+    TestControlGetBuildNumber = 2
+};
+
+enum MetafileFrameUnit
+{
+    MetafileFrameUnitPixel      = UnitPixel,
+    MetafileFrameUnitPoint      = UnitPoint,
+    MetafileFrameUnitInch       = UnitInch,
+    MetafileFrameUnitDocument   = UnitDocument,
+    MetafileFrameUnitMillimeter = UnitMillimeter,
+    MetafileFrameUnitGdi
+};
+
+enum HatchStyle
+{
+	HatchStyleHorizontal = 0,
+	HatchStyleVertical = 1,
+	HatchStyleForwardDiagonal = 2,
+	HatchStyleBackwardDiagonal = 3,
+	HatchStyleCross = 4,
+	HatchStyleDiagonalCross = 5,
+	HatchStyle05Percent = 6,
+	HatchStyle10Percent = 7,
+	HatchStyle20Percent = 8,
+	HatchStyle25Percent = 9,
+	HatchStyle30Percent = 10,
+	HatchStyle40Percent = 11,
+	HatchStyle50Percent = 12,
+	HatchStyle60Percent = 13,
+	HatchStyle70Percent = 14,
+	HatchStyle75Percent = 15,
+	HatchStyle80Percent = 16,
+	HatchStyle90Percent = 17,
+	HatchStyleLightDownwardDiagonal = 18,
+	HatchStyleLightUpwardDiagonal = 19,
+	HatchStyleDarkDownwardDiagonal = 20,
+	HatchStyleDarkUpwardDiagonal = 21,
+	HatchStyleWideDownwardDiagonal = 22,
+	HatchStyleWideUpwardDiagonal = 23,
+	HatchStyleLightVertical = 24,
+	HatchStyleLightHorizontal = 25,
+	HatchStyleNarrowVertical = 26,
+	HatchStyleNarrowHorizontal = 27,
+	HatchStyleDarkVertical = 28,
+	HatchStyleDarkHorizontal = 29,
+	HatchStyleDashedDownwardDiagonal = 30,
+	HatchStyleDashedUpwardDiagonal = 31,
+	HatchStyleDashedHorizontal = 32,
+	HatchStyleDashedVertical = 33,
+	HatchStyleSmallConfetti = 34,
+	HatchStyleLargeConfetti = 35,
+	HatchStyleZigZag = 36,
+	HatchStyleWave = 37,
+	HatchStyleDiagonalBrick = 38,
+	HatchStyleHorizontalBrick = 39,
+	HatchStyleWeave = 40,
+	HatchStylePlaid = 41,
+	HatchStyleDivot = 42,
+	HatchStyleDottedGrid = 43,
+	HatchStyleDottedDiamond = 44,
+	HatchStyleShingle = 45,
+	HatchStyleTrellis = 46,
+	HatchStyleSphere = 47,
+	HatchStyleSmallGrid = 48,
+	HatchStyleSmallCheckerBoard = 49,
+	HatchStyleLargeCheckerBoard = 50,
+	HatchStyleOutlinedDiamond = 51,
+	HatchStyleSolidDiamond = 52,
+	HatchStyleTotal = 53,
+	HatchStyleLargeGrid = HatchStyleCross,
+	HatchStyleMin = HatchStyleHorizontal,
+	HatchStyleMax = HatchStyleTotal - 1
+};
+
+#define GDIP_EMFPLUS_RECORD_BASE 0x00004000
+#define GDIP_WMF_RECORD_BASE 0x00010000
+#define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((x)|GDIP_WMF_RECORD_BASE)
+
+enum EmfPlusRecordType {
+    WmfRecordTypeSetBkColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
+    WmfRecordTypeSetBkMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
+    WmfRecordTypeSetMapMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
+    WmfRecordTypeSetROP2 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
+    WmfRecordTypeSetRelAbs = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
+    WmfRecordTypeSetPolyFillMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
+    WmfRecordTypeSetStretchBltMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
+    WmfRecordTypeSetTextCharExtra = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
+    WmfRecordTypeSetTextColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
+    WmfRecordTypeSetTextJustification = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
+    WmfRecordTypeSetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
+    WmfRecordTypeSetWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
+    WmfRecordTypeSetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
+    WmfRecordTypeSetViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
+    WmfRecordTypeOffsetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
+    WmfRecordTypeScaleWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
+    WmfRecordTypeOffsetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
+    WmfRecordTypeScaleViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
+    WmfRecordTypeLineTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
+    WmfRecordTypeMoveTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
+    WmfRecordTypeExcludeClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
+    WmfRecordTypeIntersectClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
+    WmfRecordTypeArc = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
+    WmfRecordTypeEllipse = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
+    WmfRecordTypeFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
+    WmfRecordTypePie = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
+    WmfRecordTypeRectangle = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
+    WmfRecordTypeRoundRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
+    WmfRecordTypePatBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
+    WmfRecordTypeSaveDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
+    WmfRecordTypeSetPixel = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
+    WmfRecordTypeOffsetClipRgn = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
+    WmfRecordTypeTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
+    WmfRecordTypeBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
+    WmfRecordTypeStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
+    WmfRecordTypePolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
+    WmfRecordTypePolyline = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
+    WmfRecordTypeEscape = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
+    WmfRecordTypeRestoreDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
+    WmfRecordTypeFillRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
+    WmfRecordTypeFrameRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
+    WmfRecordTypeInvertRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
+    WmfRecordTypePaintRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
+    WmfRecordTypeSelectClipRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
+    WmfRecordTypeSelectObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
+    WmfRecordTypeSetTextAlign = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
+    WmfRecordTypeDrawText = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),
+    WmfRecordTypeChord = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
+    WmfRecordTypeSetMapperFlags = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
+    WmfRecordTypeExtTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
+    WmfRecordTypeSetDIBToDev = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
+    WmfRecordTypeSelectPalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
+    WmfRecordTypeRealizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
+    WmfRecordTypeAnimatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
+    WmfRecordTypeSetPalEntries = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
+    WmfRecordTypePolyPolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
+    WmfRecordTypeResizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
+    WmfRecordTypeDIBBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
+    WmfRecordTypeDIBStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
+    WmfRecordTypeDIBCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
+    WmfRecordTypeStretchDIB = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
+    WmfRecordTypeExtFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
+    WmfRecordTypeSetLayout = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),
+    WmfRecordTypeResetDC = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),
+    WmfRecordTypeStartDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),
+    WmfRecordTypeStartPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),
+    WmfRecordTypeEndPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),
+    WmfRecordTypeAbortDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),
+    WmfRecordTypeEndDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),
+    WmfRecordTypeDeleteObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
+    WmfRecordTypeCreatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
+    WmfRecordTypeCreateBrush = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),
+    WmfRecordTypeCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
+    WmfRecordTypeCreatePenIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
+    WmfRecordTypeCreateFontIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
+    WmfRecordTypeCreateBrushIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
+    WmfRecordTypeCreateBitmapIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),
+    WmfRecordTypeCreateBitmap = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),
+    WmfRecordTypeCreateRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
+    EmfRecordTypeHeader = EMR_HEADER,
+    EmfRecordTypePolyBezier = EMR_POLYBEZIER,
+    EmfRecordTypePolygon = EMR_POLYGON,
+    EmfRecordTypePolyline = EMR_POLYLINE,
+    EmfRecordTypePolyBezierTo = EMR_POLYBEZIERTO,
+    EmfRecordTypePolyLineTo = EMR_POLYLINETO,
+    EmfRecordTypePolyPolyline = EMR_POLYPOLYLINE,
+    EmfRecordTypePolyPolygon = EMR_POLYPOLYGON,
+    EmfRecordTypeSetWindowExtEx = EMR_SETWINDOWEXTEX,
+    EmfRecordTypeSetWindowOrgEx = EMR_SETWINDOWORGEX,
+    EmfRecordTypeSetViewportExtEx = EMR_SETVIEWPORTEXTEX,
+    EmfRecordTypeSetViewportOrgEx = EMR_SETVIEWPORTORGEX,
+    EmfRecordTypeSetBrushOrgEx = EMR_SETBRUSHORGEX,
+    EmfRecordTypeEOF = EMR_EOF,
+    EmfRecordTypeSetPixelV = EMR_SETPIXELV,
+    EmfRecordTypeSetMapperFlags = EMR_SETMAPPERFLAGS,
+    EmfRecordTypeSetMapMode = EMR_SETMAPMODE,
+    EmfRecordTypeSetBkMode = EMR_SETBKMODE,
+    EmfRecordTypeSetPolyFillMode = EMR_SETPOLYFILLMODE,
+    EmfRecordTypeSetROP2 = EMR_SETROP2,
+    EmfRecordTypeSetStretchBltMode = EMR_SETSTRETCHBLTMODE,
+    EmfRecordTypeSetTextAlign = EMR_SETTEXTALIGN,
+    EmfRecordTypeSetColorAdjustment = EMR_SETCOLORADJUSTMENT,
+    EmfRecordTypeSetTextColor = EMR_SETTEXTCOLOR,
+    EmfRecordTypeSetBkColor = EMR_SETBKCOLOR,
+    EmfRecordTypeOffsetClipRgn = EMR_OFFSETCLIPRGN,
+    EmfRecordTypeMoveToEx = EMR_MOVETOEX,
+    EmfRecordTypeSetMetaRgn = EMR_SETMETARGN,
+    EmfRecordTypeExcludeClipRect = EMR_EXCLUDECLIPRECT,
+    EmfRecordTypeIntersectClipRect = EMR_INTERSECTCLIPRECT,
+    EmfRecordTypeScaleViewportExtEx = EMR_SCALEVIEWPORTEXTEX,
+    EmfRecordTypeScaleWindowExtEx = EMR_SCALEWINDOWEXTEX,
+    EmfRecordTypeSaveDC = EMR_SAVEDC,
+    EmfRecordTypeRestoreDC = EMR_RESTOREDC,
+    EmfRecordTypeSetWorldTransform = EMR_SETWORLDTRANSFORM,
+    EmfRecordTypeModifyWorldTransform = EMR_MODIFYWORLDTRANSFORM,
+    EmfRecordTypeSelectObject = EMR_SELECTOBJECT,
+    EmfRecordTypeCreatePen = EMR_CREATEPEN,
+    EmfRecordTypeCreateBrushIndirect = EMR_CREATEBRUSHINDIRECT,
+    EmfRecordTypeDeleteObject = EMR_DELETEOBJECT,
+    EmfRecordTypeAngleArc = EMR_ANGLEARC,
+    EmfRecordTypeEllipse = EMR_ELLIPSE,
+    EmfRecordTypeRectangle = EMR_RECTANGLE,
+    EmfRecordTypeRoundRect = EMR_ROUNDRECT,
+    EmfRecordTypeArc = EMR_ARC,
+    EmfRecordTypeChord = EMR_CHORD,
+    EmfRecordTypePie = EMR_PIE,
+    EmfRecordTypeSelectPalette = EMR_SELECTPALETTE,
+    EmfRecordTypeCreatePalette = EMR_CREATEPALETTE,
+    EmfRecordTypeSetPaletteEntries = EMR_SETPALETTEENTRIES,
+    EmfRecordTypeResizePalette = EMR_RESIZEPALETTE,
+    EmfRecordTypeRealizePalette = EMR_REALIZEPALETTE,
+    EmfRecordTypeExtFloodFill = EMR_EXTFLOODFILL,
+    EmfRecordTypeLineTo = EMR_LINETO,
+    EmfRecordTypeArcTo = EMR_ARCTO,
+    EmfRecordTypePolyDraw = EMR_POLYDRAW,
+    EmfRecordTypeSetArcDirection = EMR_SETARCDIRECTION,
+    EmfRecordTypeSetMiterLimit = EMR_SETMITERLIMIT,
+    EmfRecordTypeBeginPath = EMR_BEGINPATH,
+    EmfRecordTypeEndPath = EMR_ENDPATH,
+    EmfRecordTypeCloseFigure = EMR_CLOSEFIGURE,
+    EmfRecordTypeFillPath = EMR_FILLPATH,
+    EmfRecordTypeStrokeAndFillPath = EMR_STROKEANDFILLPATH,
+    EmfRecordTypeStrokePath = EMR_STROKEPATH,
+    EmfRecordTypeFlattenPath = EMR_FLATTENPATH,
+    EmfRecordTypeWidenPath = EMR_WIDENPATH,
+    EmfRecordTypeSelectClipPath = EMR_SELECTCLIPPATH,
+    EmfRecordTypeAbortPath = EMR_ABORTPATH,
+    EmfRecordTypeReserved_069 = 69,
+    EmfRecordTypeGdiComment = EMR_GDICOMMENT,
+    EmfRecordTypeFillRgn = EMR_FILLRGN,
+    EmfRecordTypeFrameRgn = EMR_FRAMERGN,
+    EmfRecordTypeInvertRgn = EMR_INVERTRGN,
+    EmfRecordTypePaintRgn = EMR_PAINTRGN,
+    EmfRecordTypeExtSelectClipRgn = EMR_EXTSELECTCLIPRGN,
+    EmfRecordTypeBitBlt = EMR_BITBLT,
+    EmfRecordTypeStretchBlt = EMR_STRETCHBLT,
+    EmfRecordTypeMaskBlt = EMR_MASKBLT,
+    EmfRecordTypePlgBlt = EMR_PLGBLT,
+    EmfRecordTypeSetDIBitsToDevice = 80,
+    EmfRecordTypeStretchDIBits = EMR_STRETCHDIBITS,
+    EmfRecordTypeExtCreateFontIndirect = EMR_EXTCREATEFONTINDIRECTW,
+    EmfRecordTypeExtTextOutA = EMR_EXTTEXTOUTA,
+    EmfRecordTypeExtTextOutW = EMR_EXTTEXTOUTW,
+    EmfRecordTypePolyBezier16 = EMR_POLYBEZIER16,
+    EmfRecordTypePolygon16 = EMR_POLYGON16,
+    EmfRecordTypePolyline16 = EMR_POLYLINE16,
+    EmfRecordTypePolyBezierTo16 = EMR_POLYBEZIERTO16,
+    EmfRecordTypePolylineTo16 = EMR_POLYLINETO16,
+    EmfRecordTypePolyPolyline16 = EMR_POLYPOLYLINE16,
+    EmfRecordTypePolyPolygon16 = EMR_POLYPOLYGON16,
+    EmfRecordTypePolyDraw16 = EMR_POLYDRAW16,
+    EmfRecordTypeCreateMonoBrush = EMR_CREATEMONOBRUSH,
+    EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT,
+    EmfRecordTypeExtCreatePen = EMR_EXTCREATEPEN,
+    EmfRecordTypePolyTextOutA = EMR_POLYTEXTOUTA,
+    EmfRecordTypePolyTextOutW = EMR_POLYTEXTOUTW,
+    EmfRecordTypeSetICMMode = 98,
+    EmfRecordTypeCreateColorSpace = 99,
+    EmfRecordTypeSetColorSpace = 100,
+    EmfRecordTypeDeleteColorSpace = 101,
+    EmfRecordTypeGLSRecord = 102,
+    EmfRecordTypeGLSBoundedRecord = 103,
+    EmfRecordTypePixelFormat = 104,
+    EmfRecordTypeDrawEscape = 105,
+    EmfRecordTypeExtEscape = 106,
+    EmfRecordTypeStartDoc = 107,
+    EmfRecordTypeSmallTextOut = 108,
+    EmfRecordTypeForceUFIMapping = 109,
+    EmfRecordTypeNamedEscape = 110,
+    EmfRecordTypeColorCorrectPalette = 111,
+    EmfRecordTypeSetICMProfileA = 112,
+    EmfRecordTypeSetICMProfileW = 113,
+    EmfRecordTypeAlphaBlend = 114,
+    EmfRecordTypeSetLayout = 115,
+    EmfRecordTypeTransparentBlt = 116,
+    EmfRecordTypeReserved_117 = 117,
+    EmfRecordTypeGradientFill = 118,
+    EmfRecordTypeSetLinkedUFIs = 119,
+    EmfRecordTypeSetTextJustification = 120,
+    EmfRecordTypeColorMatchToTargetW = 121,
+    EmfRecordTypeCreateColorSpaceW = 122,
+    EmfRecordTypeMax = 122,
+    EmfRecordTypeMin = 1,
+    EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE,
+    EmfPlusRecordTypeHeader,
+    EmfPlusRecordTypeEndOfFile,
+    EmfPlusRecordTypeComment,
+    EmfPlusRecordTypeGetDC,
+    EmfPlusRecordTypeMultiFormatStart,
+    EmfPlusRecordTypeMultiFormatSection,
+    EmfPlusRecordTypeMultiFormatEnd,
+    EmfPlusRecordTypeObject,
+    EmfPlusRecordTypeClear,
+    EmfPlusRecordTypeFillRects,
+    EmfPlusRecordTypeDrawRects,
+    EmfPlusRecordTypeFillPolygon,
+    EmfPlusRecordTypeDrawLines,
+    EmfPlusRecordTypeFillEllipse,
+    EmfPlusRecordTypeDrawEllipse,
+    EmfPlusRecordTypeFillPie,
+    EmfPlusRecordTypeDrawPie,
+    EmfPlusRecordTypeDrawArc,
+    EmfPlusRecordTypeFillRegion,
+    EmfPlusRecordTypeFillPath,
+    EmfPlusRecordTypeDrawPath,
+    EmfPlusRecordTypeFillClosedCurve,
+    EmfPlusRecordTypeDrawClosedCurve,
+    EmfPlusRecordTypeDrawCurve,
+    EmfPlusRecordTypeDrawBeziers,
+    EmfPlusRecordTypeDrawImage,
+    EmfPlusRecordTypeDrawImagePoints,
+    EmfPlusRecordTypeDrawString,
+    EmfPlusRecordTypeSetRenderingOrigin,
+    EmfPlusRecordTypeSetAntiAliasMode,
+    EmfPlusRecordTypeSetTextRenderingHint,
+    EmfPlusRecordTypeSetTextContrast,
+    EmfPlusRecordTypeSetGammaValue,
+    EmfPlusRecordTypeSetInterpolationMode,
+    EmfPlusRecordTypeSetPixelOffsetMode,
+    EmfPlusRecordTypeSetCompositingMode,
+    EmfPlusRecordTypeSetCompositingQuality,
+    EmfPlusRecordTypeSave,
+    EmfPlusRecordTypeRestore,
+    EmfPlusRecordTypeBeginContainer,
+    EmfPlusRecordTypeBeginContainerNoParams,
+    EmfPlusRecordTypeEndContainer,
+    EmfPlusRecordTypeSetWorldTransform,
+    EmfPlusRecordTypeResetWorldTransform,
+    EmfPlusRecordTypeMultiplyWorldTransform,
+    EmfPlusRecordTypeTranslateWorldTransform,
+    EmfPlusRecordTypeScaleWorldTransform,
+    EmfPlusRecordTypeRotateWorldTransform,
+    EmfPlusRecordTypeSetPageTransform,
+    EmfPlusRecordTypeResetClip,
+    EmfPlusRecordTypeSetClipRect,
+    EmfPlusRecordTypeSetClipPath,
+    EmfPlusRecordTypeSetClipRegion,
+    EmfPlusRecordTypeOffsetClip,
+    EmfPlusRecordTypeDrawDriverString,
+    EmfPlusRecordTypeStrokeFillPath,
+    EmfPlusRecordTypeSerializableObject,
+    EmfPlusRecordTypeSetTSGraphics,
+    EmfPlusRecordTypeSetTSClip,
+    EmfPlusRecordTotal,
+    EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
+    EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader
+};
+
+#define FlatnessDefault 0.25f
+
+#ifndef __cplusplus
+
+typedef enum Unit Unit;
+typedef enum BrushType BrushType;
+typedef enum DriverStringOptions DriverStringOptions;
+typedef enum FillMode FillMode;
+typedef enum LineCap LineCap;
+typedef enum PathPointType PathPointType;
+typedef enum LineJoin LineJoin;
+typedef enum QualityMode QualityMode;
+typedef enum SmoothingMode SmoothingMode;
+typedef enum CompositingQuality CompositingQuality;
+typedef enum InterpolationMode InterpolationMode;
+typedef enum PixelOffsetMode PixelOffsetMode;
+typedef enum DashCap DashCap;
+typedef enum DashStyle DashStyle;
+typedef enum MatrixOrder MatrixOrder;
+typedef enum ImageType ImageType;
+typedef enum ImageFlags ImageFlags;
+typedef enum WarpMode WarpMode;
+typedef enum WrapMode WrapMode;
+typedef enum MetafileType MetafileType;
+typedef enum LinearGradientMode LinearGradientMode;
+typedef enum EmfType EmfType;
+typedef enum CompositingMode CompositingMode;
+typedef enum TextRenderingHint TextRenderingHint;
+typedef enum StringAlignment StringAlignment;
+typedef enum StringDigitSubstitute StringDigitSubstitute;
+typedef enum StringTrimming StringTrimming;
+typedef enum FontStyle FontStyle;
+typedef enum StringFormatFlags StringFormatFlags;
+typedef enum HotkeyPrefix HotkeyPrefix;
+typedef enum PenAlignment PenAlignment;
+typedef enum PaletteFlags PaletteFlags;
+typedef enum ImageCodecFlags ImageCodecFlags;
+typedef enum CombineMode CombineMode;
+typedef enum FlushIntention FlushIntention;
+typedef enum CoordinateSpace CoordinateSpace;
+typedef enum GpTestControlEnum GpTestControlEnum;
+typedef enum MetafileFrameUnit MetafileFrameUnit;
+typedef enum PenType PenType;
+typedef enum HatchStyle HatchStyle;
+typedef enum EmfPlusRecordType EmfPlusRecordType;
+
+#endif /* end of c typedefs */
+
+#undef GDIP_WMF_RECORD_TO_EMFPLUS
+#define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((EmfPlusRecordType)((x)|GDIP_WMF_RECORD_BASE))
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h
new file mode 100644
index 0000000..959ec78
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h
@@ -0,0 +1,753 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _FLATAPI_H
+#define _FLATAPI_H
+
+#define WINGDIPAPI __stdcall
+
+#define GDIPCONST const
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* AdjustableArrowCap */
+GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL);
+
+/* Bitmap */
+GpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap*,CGpEffect*,RECT*,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap**,INT,CGpEffect*,RECT*,RECT*,GpBitmap**,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*);
+GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT,
+    PixelFormat,BitmapData*);
+GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB);
+GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL);
+GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*);
+GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON, GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,
+    GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);
+GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);
+GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*);
+GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,const VOID*,const UINT);
+
+/* Brush */
+GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
+GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
+GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
+
+/* CachedBitmap */
+GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*,
+    GpCachedBitmap**);
+GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*);
+GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT);
+
+/* CustomLineCap */
+GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL,
+    GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,
+    GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);
+GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
+
+/* Font */
+GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*, REAL, INT, Unit,
+    GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**);
+GpStatus WINGDIPAPI GdipDeleteFont(GpFont*);
+GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*);
+GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*);
+GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*);
+GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*);
+GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*, INT*);
+GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*, GDIPCONST GpGraphics*,
+        REAL*);
+GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*);
+
+/* FontCollection */
+GpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*,
+        GDIPCONST void*,INT);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT,
+        GpFontFamily*[], INT*);
+
+/* FontFamily */
+GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**);
+GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*,
+    GpFontCollection*, GpFontFamily**);
+GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*);
+GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID);
+GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*);
+
+/* Graphics */
+GpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention);
+GpStatus WINGDIPAPI GdipBeginContainer(GpGraphics*,GDIPCONST GpRectF*,GDIPCONST GpRectF*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics*,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainerI(GpGraphics*,GDIPCONST GpRect*,GDIPCONST GpRect*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipEndContainer(GpGraphics*,GraphicsContainer);
+GpStatus WINGDIPAPI GdipComment(GpGraphics*,UINT,GDIPCONST BYTE*);
+GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**);
+HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void);
+GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *);
+GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT,
+    GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImagePointRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImagePoints(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointsI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*,
+    GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit,
+    GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*,
+    GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit,
+    GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL,
+    REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,
+    VOID*);
+GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT,
+    INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,
+    VOID*);
+GpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*);
+GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*, INT);
+GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*, INT);
+GpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT,
+    GDIPCONST GpFont*,GDIPCONST RectF*, GDIPCONST GpStringFormat*,
+    GDIPCONST GpBrush*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*,
+    GDIPCONST GpPointF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*,
+    GDIPCONST GpPoint*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*,
+    GDIPCONST GpRectF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*,
+    GDIPCONST GpRect*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*,
+    GDIPCONST GpMetafile*,GDIPCONST GpPointF*,INT,GDIPCONST GpRectF*,Unit,
+    EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,
+    REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,
+    REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillClosedCurve(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillClosedCurveI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillEllipse(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*);
+GpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPieI(GpGraphics*,GpBrush*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,
+    INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,
+    INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*);
+GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
+GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);
+GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*);
+GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);
+GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);
+GpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*);
+GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);
+GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);
+GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*);
+GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*);
+GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB);
+GpStatus WINGDIPAPI GdipGetVisibleClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetVisibleClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*, BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRect(GpGraphics*,REAL,REAL,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*,
+    INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT,
+    GpRegion**);
+GpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT,
+    GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*);
+GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT,
+    GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*);
+GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType,
+    GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType,
+    GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*,
+    MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC);
+GpStatus WINGDIPAPI GdipResetClip(GpGraphics*);
+GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*);
+GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState);
+GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
+GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode);
+GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode);
+GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);
+GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);
+GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
+GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
+GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
+GpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
+GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT);
+GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint);
+GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace,
+                                        GpPointF *, INT);
+GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace,
+                                         GpPoint *, INT);
+GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+
+/* GraphicsPath */
+GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3(GpPath*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);
+GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipAddPathString(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST RectF*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipAddPathStringI(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST Rect*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*);
+GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);
+GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
+GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT,
+    GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipDeletePath(GpPath*);
+GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*,
+    GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*,
+    GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*);
+GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);
+GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*);
+GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*);
+GpStatus WINGDIPAPI GdipResetPath(GpPath*);
+GpStatus WINGDIPAPI GdipReversePath(GpPath*);
+GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode);
+GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*);
+GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*);
+GpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL,
+    REAL,REAL,REAL,WarpMode,REAL);
+GpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL);
+
+/* HatchBrush */
+GpStatus WINGDIPAPI GdipCreateHatchBrush(HatchStyle,ARGB,ARGB,GpHatch**);
+GpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*);
+GpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*);
+GpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,HatchStyle*);
+
+/* Image */
+GpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**);
+GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**);
+GpStatus WINGDIPAPI GdipDisposeImage(GpImage*);
+GpStatus WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE,UINT,LPBYTE,INT,INT);
+GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT);
+GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*);
+GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);
+GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*);
+GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*);
+GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);
+GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*);
+GpStatus WINGDIPAPI GdipImageForceValidation(GpImage*);
+GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT);
+GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType);
+GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage*,GDIPCONST GUID*,UINT);
+GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage*,PROPID);
+GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*,
+    GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*);
+GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*);
+
+/* ImageAttributes */
+GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);
+GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);
+GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*,
+    BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*,
+    ColorAdjustType,BOOL,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*,
+    ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*,
+    ColorMatrixFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*,
+    ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*,
+    ColorAdjustType,BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*,
+    ColorAdjustType,BOOL,ColorChannelFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(
+    GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*,
+    ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*);
+GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*,
+    ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*,
+    ColorAdjustType);
+GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode,
+    ARGB,BOOL);
+GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*,
+    ColorAdjustType);
+
+/* LinearGradientBrush */
+GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*,
+    ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*,
+    ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB,
+    LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB,
+    LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*,
+    ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*,
+    ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*,
+    GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*,
+    GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetLineTransform(GpLineGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*);
+GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL,
+    GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL);
+GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL,
+    GpMatrixOrder);
+
+/* Matrix */
+GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**);
+GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*);
+GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*);
+GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+
+/* Metafile */
+GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics*,GpMetafile*,INT*,
+    EmfType,const WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT*,const WCHAR*,EmfType,const WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL,
+    GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*,
+    GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream*,GpMetafile**);
+GpStatus WINGDIPAPI GdipGetHemfFromMetafile(GpMetafile*,HENHMETAFILE*);
+GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile*,EmfPlusRecordType,UINT,UINT,GDIPCONST BYTE*);
+GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT);
+GpStatus WINGDIPAPI GdipRecordMetafile(HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+
+/* MetafileHeader */
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*);
+
+/* Notification */
+GpStatus WINAPI GdiplusNotificationHook(ULONG_PTR*);
+void WINAPI GdiplusNotificationUnhook(ULONG_PTR);
+
+/* PathGradientBrush */
+GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*,
+    GpPathGradient**);
+GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
+GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,
+    GDIPCONST ARGB*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*,
+    ARGB*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GpPointF*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
+GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL);
+GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*,
+    GDIPCONST ARGB*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient*,INT*);
+
+/* PathIterator */
+GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*);
+GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*);
+GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*,
+    INT,INT);
+GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*);
+GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*);
+
+/* Pen */
+GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**);
+GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipDeletePen(GpPen*);
+GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**);
+GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);
+GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);
+GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
+GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);
+GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);
+GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
+GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
+GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap);
+GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);
+GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*);
+GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap);
+GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin);
+GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment);
+GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*);
+GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*);
+
+/* Region */
+GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *, GpRegion **);
+GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *, GpPath *, CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *, GDIPCONST GpRectF *, CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *, GDIPCONST GpRect *, CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *, GpRegion *, CombineMode);
+GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *, INT, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN, GpRegion **);
+GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *);
+GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *, GpGraphics *, GpRectF *);
+GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *, GpGraphics *, GpRect *);
+GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *, BYTE *, UINT, UINT *);
+GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *, UINT *);
+GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *, GpGraphics *, HRGN *);
+GpStatus WINGDIPAPI GdipGetRegionScans(GpRegion *, GpRectF *, INT *, GpMatrix *);
+GpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion *, GpRect *, INT *, GpMatrix *);
+GpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion *, UINT *, GpMatrix *);
+GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *, GpRegion *, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion *, REAL, REAL, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion *, INT, INT, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion *, REAL, REAL, REAL, REAL, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion *, INT, INT, INT, INT, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *);
+GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *);
+GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *, GpMatrix *);
+GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *, REAL, REAL);
+GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *, INT, INT);
+
+/* SolidBrush */
+GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);
+GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*);
+GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB);
+
+/* StringFormat */
+GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**);
+GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**);
+GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*);
+GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*,
+        StringDigitSubstitute*);
+GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount(
+        GDIPCONST GpStringFormat*, INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*);
+GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute);
+GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT);
+GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(
+        GpStringFormat*, INT, GDIPCONST CharacterRange*);
+GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*);
+GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming);
+GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*, INT);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **);
+
+/* Texture */
+GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*,
+    REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,
+    INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*);
+GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*,
+    GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*);
+GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode);
+GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL,
+    GpMatrixOrder);
+
+/* Without wrapper methods */
+GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**);
+GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size);
+GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders);
+GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h
new file mode 100644
index 0000000..9cc5c02
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSGPSTUBS_H
+#define _GDIPLUSGPSTUBS_H
+
+#ifdef __cplusplus
+
+class GpGraphics {};
+class GpPen {};
+class GpBrush {};
+class GpHatch : public GpBrush {};
+class GpSolidFill : public GpBrush {};
+class GpPath {};
+class GpMatrix {};
+class GpPathIterator {};
+class GpCustomLineCap {};
+class GpAdjustableArrowCap : public GpCustomLineCap {};
+class GpImage {};
+class GpMetafile : public GpImage {};
+class GpImageAttributes {};
+class GpCachedBitmap {};
+class GpBitmap : public GpImage {};
+class GpPathGradient : public GpBrush {};
+class GpLineGradient : public GpBrush {};
+class GpTexture : public GpBrush {};
+class GpFont {};
+class GpFontCollection {};
+class GpFontFamily {};
+class GpStringFormat {};
+class GpRegion {};
+class CGpEffect {};
+
+#else /* end of c++ declarations */
+
+typedef struct GpGraphics GpGraphics;
+typedef struct GpPen GpPen;
+typedef struct GpBrush GpBrush;
+typedef struct GpHatch GpHatch;
+typedef struct GpSolidFill GpSolidFill;
+typedef struct GpPath GpPath;
+typedef struct GpMatrix GpMatrix;
+typedef struct GpPathIterator GpPathIterator;
+typedef struct GpCustomLineCap GpCustomLineCap;
+typedef struct GpAdjustableArrowCap GpAdjustableArrowCap;
+typedef struct GpImage GpImage;
+typedef struct GpMetafile GpMetafile;
+typedef struct GpImageAttributes GpImageAttributes;
+typedef struct GpCachedBitmap GpCachedBitmap;
+typedef struct GpBitmap GpBitmap;
+typedef struct GpPathGradient GpPathGradient;
+typedef struct GpLineGradient GpLineGradient;
+typedef struct GpTexture GpTexture;
+typedef struct GpFont GpFont;
+typedef struct GpFontCollection GpFontCollection;
+typedef struct GpFontFamily GpFontFamily;
+typedef struct GpStringFormat GpStringFormat;
+typedef struct GpRegion GpRegion;
+typedef struct CGpEffect CGpEffect;
+
+#endif /* end of c declarations */
+
+typedef Status GpStatus;
+typedef Unit GpUnit;
+typedef BrushType GpBrushType;
+typedef PointF GpPointF;
+typedef FillMode GpFillMode;
+typedef PathData GpPathData;
+typedef LineCap GpLineCap;
+typedef RectF GpRectF;
+typedef Rect GpRect;
+typedef LineJoin GpLineJoin;
+typedef DashCap GpDashCap;
+typedef DashStyle GpDashStyle;
+typedef MatrixOrder GpMatrixOrder;
+typedef Point GpPoint;
+typedef WrapMode GpWrapMode;
+typedef Color GpColor;
+typedef FlushIntention GpFlushIntention;
+typedef CoordinateSpace GpCoordinateSpace;
+typedef PenAlignment GpPenAlignment;
+typedef PenType GpPenType;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h
new file mode 100644
index 0000000..10a5c14
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h
@@ -0,0 +1,462 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSIMAGING_H
+#define _GDIPLUSIMAGING_H
+
+DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatBMP,       0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatEMF,       0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatWMF,       0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatJPEG,      0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatPNG,       0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatGIF,       0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatTIFF,      0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatEXIF,      0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatIcon,      0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+
+DEFINE_GUID(FrameDimensionTime,       0x6aedbd6d, 0x3fb5, 0x418a, 0x83, 0xa6, 0x7f, 0x45, 0x22, 0x9d, 0xc8, 0x72);
+DEFINE_GUID(FrameDimensionPage,       0x7462dc86, 0x6180, 0x4c7e, 0x8e, 0x3f, 0xee, 0x73, 0x33, 0xa7, 0xa4, 0x83);
+DEFINE_GUID(FrameDimensionResolution, 0x84236f7b, 0x3bd3, 0x428f, 0x8d, 0xab, 0x4e, 0xa1, 0x43, 0x9c, 0xa3, 0x15);
+
+enum ImageLockMode
+{
+    ImageLockModeRead           = 1,
+    ImageLockModeWrite          = 2,
+    ImageLockModeUserInputBuf   = 4
+};
+
+enum RotateFlipType
+{
+    RotateNoneFlipNone = 0,
+    Rotate180FlipXY    = RotateNoneFlipNone,
+
+    Rotate90FlipNone   = 1,
+    Rotate270FlipXY    = Rotate90FlipNone,
+
+    Rotate180FlipNone  = 2,
+    RotateNoneFlipXY   = Rotate180FlipNone,
+
+    Rotate270FlipNone  = 3,
+    Rotate90FlipXY     = Rotate270FlipNone,
+
+    RotateNoneFlipX    = 4,
+    Rotate180FlipY     = RotateNoneFlipX,
+
+    Rotate90FlipX      = 5,
+    Rotate270FlipY     = Rotate90FlipX,
+
+    Rotate180FlipX     = 6,
+    RotateNoneFlipY    = Rotate180FlipX,
+
+    Rotate270FlipX     = 7,
+    Rotate90FlipY      = Rotate270FlipX
+};
+
+#ifdef __cplusplus
+class EncoderParameter
+{
+public:
+    GUID    Guid;
+    ULONG   NumberOfValues;
+    ULONG   Type;
+    VOID*   Value;
+};
+
+class EncoderParameters
+{
+public:
+    UINT Count;
+    EncoderParameter Parameter[1];
+};
+
+class ImageCodecInfo
+{
+public:
+    CLSID Clsid;
+    GUID  FormatID;
+    const WCHAR* CodecName;
+    const WCHAR* DllName;
+    const WCHAR* FormatDescription;
+    const WCHAR* FilenameExtension;
+    const WCHAR* MimeType;
+    DWORD Flags;
+    DWORD Version;
+    DWORD SigCount;
+    DWORD SigSize;
+    const BYTE* SigPattern;
+    const BYTE* SigMask;
+};
+
+class BitmapData
+{
+public:
+    UINT Width;
+    UINT Height;
+    INT Stride;
+    Gdiplus::PixelFormat PixelFormat;
+    VOID* Scan0;
+    UINT_PTR Reserved;
+};
+
+class ImageItemData
+{
+public:
+    UINT  Size;
+    UINT  Position;
+    VOID* Desc;
+    UINT  DescSize;
+    VOID* Data;
+    UINT  DataSize;
+    UINT  Cookie;
+};
+
+class PropertyItem
+{
+public:
+    PROPID id;
+    ULONG  length;
+    WORD   type;
+    VOID*  value;
+};
+
+#else /* end of c++ typedefs */
+
+typedef enum ImageLockMode ImageLockMode;
+typedef enum RotateFlipType RotateFlipType;
+
+typedef struct EncoderParameter
+{
+    GUID Guid;
+    ULONG NumberOfValues;
+    ULONG Type;
+    VOID* Value;
+} EncoderParameter;
+
+typedef struct EncoderParameters
+{
+    UINT Count;
+    EncoderParameter Parameter[1];
+} EncoderParameters;
+
+typedef struct ImageCodecInfo
+{
+    CLSID Clsid;
+    GUID  FormatID;
+    const WCHAR* CodecName;
+    const WCHAR* DllName;
+    const WCHAR* FormatDescription;
+    const WCHAR* FilenameExtension;
+    const WCHAR* MimeType;
+    DWORD Flags;
+    DWORD Version;
+    DWORD SigCount;
+    DWORD SigSize;
+    const BYTE* SigPattern;
+    const BYTE* SigMask;
+} ImageCodecInfo;
+
+typedef struct BitmapData
+{
+    UINT Width;
+    UINT Height;
+    INT Stride;
+    PixelFormat PixelFormat;
+    VOID* Scan0;
+    UINT_PTR Reserved; /* undocumented: stores the lock mode */
+} BitmapData;
+
+typedef struct ImageItemData
+{
+    UINT  Size;
+    UINT  Position;
+    VOID* Desc;
+    UINT  DescSize;
+    VOID* Data;
+    UINT  DataSize;
+    UINT  Cookie;
+} ImageItemData;
+
+typedef struct PropertyItem
+{
+    PROPID id;
+    ULONG  length;
+    WORD   type;
+    VOID*  value;
+} PropertyItem;
+
+#endif /* end of c typedefs */
+
+/* property types */
+#define PropertyTagTypeByte       1
+#define PropertyTagTypeASCII      2
+#define PropertyTagTypeShort      3
+#define PropertyTagTypeLong       4
+#define PropertyTagTypeRational   5
+#define PropertyTagTypeUndefined  7
+#define PropertyTagTypeSLONG      9
+#define PropertyTagTypeSRational 10
+
+/* property IDs */
+#define PropertyTagExifIFD                0x8769
+#define PropertyTagGpsIFD                 0x8825
+
+#define PropertyTagNewSubfileType         0x00FE
+#define PropertyTagSubfileType            0x00FF
+#define PropertyTagImageWidth             0x0100
+#define PropertyTagImageHeight            0x0101
+#define PropertyTagBitsPerSample          0x0102
+#define PropertyTagCompression            0x0103
+#define PropertyTagPhotometricInterp      0x0106
+#define PropertyTagThreshHolding          0x0107
+#define PropertyTagCellWidth              0x0108
+#define PropertyTagCellHeight             0x0109
+#define PropertyTagFillOrder              0x010A
+#define PropertyTagDocumentName           0x010D
+#define PropertyTagImageDescription       0x010E
+#define PropertyTagEquipMake              0x010F
+#define PropertyTagEquipModel             0x0110
+#define PropertyTagStripOffsets           0x0111
+#define PropertyTagOrientation            0x0112
+#define PropertyTagSamplesPerPixel        0x0115
+#define PropertyTagRowsPerStrip           0x0116
+#define PropertyTagStripBytesCount        0x0117
+#define PropertyTagMinSampleValue         0x0118
+#define PropertyTagMaxSampleValue         0x0119
+#define PropertyTagXResolution            0x011A
+#define PropertyTagYResolution            0x011B
+#define PropertyTagPlanarConfig           0x011C
+#define PropertyTagPageName               0x011D
+#define PropertyTagXPosition              0x011E
+#define PropertyTagYPosition              0x011F
+#define PropertyTagFreeOffset             0x0120
+#define PropertyTagFreeByteCounts         0x0121
+#define PropertyTagGrayResponseUnit       0x0122
+#define PropertyTagGrayResponseCurve      0x0123
+#define PropertyTagT4Option               0x0124
+#define PropertyTagT6Option               0x0125
+#define PropertyTagResolutionUnit         0x0128
+#define PropertyTagPageNumber             0x0129
+#define PropertyTagTransferFuncition      0x012D
+#define PropertyTagSoftwareUsed           0x0131
+#define PropertyTagDateTime               0x0132
+#define PropertyTagArtist                 0x013B
+#define PropertyTagHostComputer           0x013C
+#define PropertyTagPredictor              0x013D
+#define PropertyTagWhitePoint             0x013E
+#define PropertyTagPrimaryChromaticities  0x013F
+#define PropertyTagColorMap               0x0140
+#define PropertyTagHalftoneHints          0x0141
+#define PropertyTagTileWidth              0x0142
+#define PropertyTagTileLength             0x0143
+#define PropertyTagTileOffset             0x0144
+#define PropertyTagTileByteCounts         0x0145
+#define PropertyTagInkSet                 0x014C
+#define PropertyTagInkNames               0x014D
+#define PropertyTagNumberOfInks           0x014E
+#define PropertyTagDotRange               0x0150
+#define PropertyTagTargetPrinter          0x0151
+#define PropertyTagExtraSamples           0x0152
+#define PropertyTagSampleFormat           0x0153
+#define PropertyTagSMinSampleValue        0x0154
+#define PropertyTagSMaxSampleValue        0x0155
+#define PropertyTagTransferRange          0x0156
+
+#define PropertyTagJPEGProc               0x0200
+#define PropertyTagJPEGInterFormat        0x0201
+#define PropertyTagJPEGInterLength        0x0202
+#define PropertyTagJPEGRestartInterval    0x0203
+#define PropertyTagJPEGLosslessPredictors 0x0205
+#define PropertyTagJPEGPointTransforms    0x0206
+#define PropertyTagJPEGQTables            0x0207
+#define PropertyTagJPEGDCTables           0x0208
+#define PropertyTagJPEGACTables           0x0209
+
+#define PropertyTagYCbCrCoefficients      0x0211
+#define PropertyTagYCbCrSubsampling       0x0212
+#define PropertyTagYCbCrPositioning       0x0213
+#define PropertyTagREFBlackWhite          0x0214
+
+#define PropertyTagICCProfile          0x8773
+
+#define PropertyTagGamma                0x0301
+#define PropertyTagICCProfileDescriptor 0x0302
+#define PropertyTagSRGBRenderingIntent  0x0303
+
+#define PropertyTagImageTitle          0x0320
+#define PropertyTagCopyright           0x8298
+
+#define PropertyTagResolutionXUnit            0x5001
+#define PropertyTagResolutionYUnit            0x5002
+#define PropertyTagResolutionXLengthUnit      0x5003
+#define PropertyTagResolutionYLengthUnit      0x5004
+#define PropertyTagPrintFlags                 0x5005
+#define PropertyTagPrintFlagsVersion          0x5006
+#define PropertyTagPrintFlagsCrop             0x5007
+#define PropertyTagPrintFlagsBleedWidth       0x5008
+#define PropertyTagPrintFlagsBleedWidthScale  0x5009
+#define PropertyTagHalftoneLPI                0x500A
+#define PropertyTagHalftoneLPIUnit            0x500B
+#define PropertyTagHalftoneDegree             0x500C
+#define PropertyTagHalftoneShape              0x500D
+#define PropertyTagHalftoneMisc               0x500E
+#define PropertyTagHalftoneScreen             0x500F
+#define PropertyTagJPEGQuality                0x5010
+#define PropertyTagGridSize                   0x5011
+#define PropertyTagThumbnailFormat            0x5012
+#define PropertyTagThumbnailWidth             0x5013
+#define PropertyTagThumbnailHeight            0x5014
+#define PropertyTagThumbnailColorDepth        0x5015
+#define PropertyTagThumbnailPlanes            0x5016
+#define PropertyTagThumbnailRawBytes          0x5017
+#define PropertyTagThumbnailSize              0x5018
+#define PropertyTagThumbnailCompressedSize    0x5019
+#define PropertyTagColorTransferFunction      0x501A
+#define PropertyTagThumbnailData              0x501B
+
+#define PropertyTagThumbnailImageWidth        0x5020
+#define PropertyTagThumbnailImageHeight       0x5021
+#define PropertyTagThumbnailBitsPerSample     0x5022
+#define PropertyTagThumbnailCompression       0x5023
+#define PropertyTagThumbnailPhotometricInterp 0x5024
+#define PropertyTagThumbnailImageDescription  0x5025
+#define PropertyTagThumbnailEquipMake         0x5026
+#define PropertyTagThumbnailEquipModel        0x5027
+#define PropertyTagThumbnailStripOffsets      0x5028
+#define PropertyTagThumbnailOrientation       0x5029
+#define PropertyTagThumbnailSamplesPerPixel   0x502A
+#define PropertyTagThumbnailRowsPerStrip      0x502B
+#define PropertyTagThumbnailStripBytesCount   0x502C
+#define PropertyTagThumbnailResolutionX       0x502D
+#define PropertyTagThumbnailResolutionY       0x502E
+#define PropertyTagThumbnailPlanarConfig      0x502F
+#define PropertyTagThumbnailResolutionUnit    0x5030
+#define PropertyTagThumbnailTransferFunction  0x5031
+#define PropertyTagThumbnailSoftwareUsed      0x5032
+#define PropertyTagThumbnailDateTime          0x5033
+#define PropertyTagThumbnailArtist            0x5034
+#define PropertyTagThumbnailWhitePoint        0x5035
+#define PropertyTagThumbnailPrimaryChromaticities 0x5036
+#define PropertyTagThumbnailYCbCrCoefficients 0x5037
+#define PropertyTagThumbnailYCbCrSubsampling  0x5038
+#define PropertyTagThumbnailYCbCrPositioning  0x5039
+#define PropertyTagThumbnailRefBlackWhite     0x503A
+#define PropertyTagThumbnailCopyRight         0x503B
+
+#define PropertyTagLuminanceTable    0x5090
+#define PropertyTagChrominanceTable  0x5091
+
+#define PropertyTagFrameDelay        0x5100
+#define PropertyTagLoopCount         0x5101
+#define PropertyTagGlobalPalette     0x5102
+#define PropertyTagIndexBackground   0x5103
+#define PropertyTagIndexTransparent  0x5104
+
+#define PropertyTagPixelUnit         0x5110
+#define PropertyTagPixelPerUnitX     0x5111
+#define PropertyTagPixelPerUnitY     0x5112
+#define PropertyTagPaletteHistogram  0x5113
+
+#define PropertyTagExifExposureTime  0x829A
+#define PropertyTagExifFNumber       0x829D
+
+#define PropertyTagExifExposureProg  0x8822
+#define PropertyTagExifSpectralSense 0x8824
+#define PropertyTagExifISOSpeed      0x8827
+#define PropertyTagExifOECF          0x8828
+
+#define PropertyTagExifVer           0x9000
+#define PropertyTagExifDTOrig        0x9003
+#define PropertyTagExifDTDigitized   0x9004
+
+#define PropertyTagExifCompConfig    0x9101
+#define PropertyTagExifCompBPP       0x9102
+
+#define PropertyTagExifShutterSpeed  0x9201
+#define PropertyTagExifAperture      0x9202
+#define PropertyTagExifBrightness    0x9203
+#define PropertyTagExifExposureBias  0x9204
+#define PropertyTagExifMaxAperture   0x9205
+#define PropertyTagExifSubjectDist   0x9206
+#define PropertyTagExifMeteringMode  0x9207
+#define PropertyTagExifLightSource   0x9208
+#define PropertyTagExifFlash         0x9209
+#define PropertyTagExifFocalLength   0x920A
+#define PropertyTagExifMakerNote     0x927C
+#define PropertyTagExifUserComment   0x9286
+#define PropertyTagExifDTSubsec      0x9290
+#define PropertyTagExifDTOrigSS      0x9291
+#define PropertyTagExifDTDigSS       0x9292
+
+#define PropertyTagExifFPXVer        0xA000
+#define PropertyTagExifColorSpace    0xA001
+#define PropertyTagExifPixXDim       0xA002
+#define PropertyTagExifPixYDim       0xA003
+#define PropertyTagExifRelatedWav    0xA004
+#define PropertyTagExifInterop       0xA005
+#define PropertyTagExifFlashEnergy   0xA20B
+#define PropertyTagExifSpatialFR     0xA20C
+#define PropertyTagExifFocalXRes     0xA20E
+#define PropertyTagExifFocalYRes     0xA20F
+#define PropertyTagExifFocalResUnit  0xA210
+#define PropertyTagExifSubjectLoc    0xA214
+#define PropertyTagExifExposureIndex 0xA215
+#define PropertyTagExifSensingMethod 0xA217
+#define PropertyTagExifFileSource    0xA300
+#define PropertyTagExifSceneType     0xA301
+#define PropertyTagExifCfaPattern    0xA302
+
+#define PropertyTagGpsVer            0x0000
+#define PropertyTagGpsLatitudeRef    0x0001
+#define PropertyTagGpsLatitude       0x0002
+#define PropertyTagGpsLongitudeRef   0x0003
+#define PropertyTagGpsLongitude      0x0004
+#define PropertyTagGpsAltitudeRef    0x0005
+#define PropertyTagGpsAltitude       0x0006
+#define PropertyTagGpsGpsTime        0x0007
+#define PropertyTagGpsGpsSatellites  0x0008
+#define PropertyTagGpsGpsStatus      0x0009
+#define PropertyTagGpsGpsMeasureMode 0x000A
+#define PropertyTagGpsGpsDop         0x000B
+#define PropertyTagGpsSpeedRef       0x000C
+#define PropertyTagGpsSpeed          0x000D
+#define PropertyTagGpsTrackRef       0x000E
+#define PropertyTagGpsTrack          0x000F
+#define PropertyTagGpsImgDirRef      0x0010
+#define PropertyTagGpsImgDir         0x0011
+#define PropertyTagGpsMapDatum       0x0012
+#define PropertyTagGpsDestLatRef     0x0013
+#define PropertyTagGpsDestLat        0x0014
+#define PropertyTagGpsDestLongRef    0x0015
+#define PropertyTagGpsDestLong       0x0016
+#define PropertyTagGpsDestBearRef    0x0017
+#define PropertyTagGpsDestBear       0x0018
+#define PropertyTagGpsDestDistRef    0x0019
+#define PropertyTagGpsDestDist       0x001A
+
+#endif /* _GDIPLUSIMAGING_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h
new file mode 100644
index 0000000..d122708
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSINIT_H
+#define _GDIPLUSINIT_H
+
+enum DebugEventLevel
+{
+    DebugEventLevelFatal,
+    DebugEventLevelWarning
+};
+
+typedef VOID (WINAPI *DebugEventProc)(enum DebugEventLevel, CHAR *);
+typedef Status (WINAPI *NotificationHookProc)(ULONG_PTR *);
+typedef void (WINAPI *NotificationUnhookProc)(ULONG_PTR);
+
+struct GdiplusStartupInput
+{
+    UINT32 GdiplusVersion;
+    DebugEventProc DebugEventCallback;
+    BOOL SuppressBackgroundThread;
+    BOOL SuppressExternalCodecs;
+
+#ifdef __cplusplus
+    GdiplusStartupInput(DebugEventProc debugEventCallback = NULL,
+        BOOL suppressBackgroundThread = FALSE,
+        BOOL suppressExternalCodecs = FALSE)
+    {
+        GdiplusVersion = 1;
+        DebugEventCallback = debugEventCallback;
+        SuppressBackgroundThread = suppressBackgroundThread;
+        SuppressExternalCodecs = suppressExternalCodecs;
+    }
+#endif
+};
+
+struct GdiplusStartupOutput
+{
+    NotificationHookProc NotificationHook;
+    NotificationUnhookProc NotificationUnhook;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+Status WINAPI GdiplusStartup(ULONG_PTR *, const struct GdiplusStartupInput *, struct GdiplusStartupOutput *);
+void WINAPI GdiplusShutdown(ULONG_PTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h
new file mode 100644
index 0000000..1c012de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSMEM_H
+#define _GDIPLUSMEM_H
+
+#define WINGDIPAPI __stdcall
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* WINGDIPAPI GdipAlloc(SIZE_T) __WINE_ALLOC_SIZE(1);
+void WINGDIPAPI GdipFree(void*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h
new file mode 100644
index 0000000..805ae83
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSMETAHEADER_H
+#define _GDIPLUSMETAHEADER_H
+
+typedef struct
+{
+    DWORD   iType;
+    DWORD   nSize;
+    RECTL   rclBounds;
+    RECTL   rclFrame;
+    DWORD   dSignature;
+    DWORD   nVersion;
+    DWORD   nBytes;
+    DWORD   nRecords;
+    WORD    nHandles;
+    WORD    sReserved;
+    DWORD   nDescription;
+    DWORD   offDescription;
+    DWORD   nPalEntries;
+    SIZEL   szlDevice;
+    SIZEL   szlMillimeters;
+} ENHMETAHEADER3;
+
+#include <pshpack2.h>
+
+typedef struct
+{
+    INT16  Left;
+    INT16  Top;
+    INT16  Right;
+    INT16  Bottom;
+} PWMFRect16;
+
+typedef struct
+{
+    UINT32     Key;
+    INT16      Hmf;
+    PWMFRect16 BoundingBox;
+    INT16      Inch;
+    UINT32     Reserved;
+    INT16      Checksum;
+} WmfPlaceableFileHeader;
+
+#include <poppack.h>
+
+#define GDIP_EMFPLUSFLAGS_DISPLAY       0x00000001
+
+#ifdef __cplusplus
+class MetafileHeader
+{
+public:
+    MetafileType        Type;
+    UINT                Size;
+    UINT                Version;
+    UINT                EmfPlusFlags;
+    REAL                DpiX;
+    REAL                DpiY;
+    INT                 X;
+    INT                 Y;
+    INT                 Width;
+    INT                 Height;
+    union
+    {
+        METAHEADER      WmfHeader;
+        ENHMETAHEADER3  EmfHeader;
+    };
+    INT                 EmfPlusHeaderSize;
+    INT                 LogicalDpiX;
+    INT                 LogicalDpiY;
+
+public:
+    MetafileType GetType() const { return Type; }
+
+    UINT GetMetafileSize() const { return Size; }
+
+    UINT GetVersion() const { return Version; }
+
+    UINT GetEmfPlusFlags() const { return EmfPlusFlags; }
+
+    REAL GetDpiX() const { return DpiX; }
+
+    REAL GetDpiY() const { return DpiY; }
+
+    VOID GetBounds (OUT Rect *r) const
+    {
+        r->X = X;
+        r->Y = Y;
+        r->Width = Width;
+        r->Height = Height;
+    }
+
+    BOOL IsWmf() const
+    {
+       return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfPlaceable));
+    }
+
+    BOOL IsWmfPlaceable() const { return (Type == MetafileTypeWmfPlaceable); }
+
+    BOOL IsEmf() const { return (Type == MetafileTypeEmf); }
+
+    BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); }
+
+    BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); }
+
+    BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); }
+
+    BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); }
+
+    BOOL IsDisplay() const
+    {
+        return IsEmfPlus() && ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0);
+    }
+
+    const METAHEADER * GetWmfHeader() const
+    {
+        return IsWmf() ? &WmfHeader : NULL;
+    }
+
+    const ENHMETAHEADER3 * GetEmfHeader() const
+    {
+        return IsEmfOrEmfPlus() ? &EmfHeader : NULL;
+    }
+};
+#else /* end of c++ typedefs */
+
+typedef struct MetafileHeader
+{
+    MetafileType        Type;
+    UINT                Size;
+    UINT                Version;
+    UINT                EmfPlusFlags;
+    REAL                DpiX;
+    REAL                DpiY;
+    INT                 X;
+    INT                 Y;
+    INT                 Width;
+    INT                 Height;
+    union
+    {
+        METAHEADER      WmfHeader;
+        ENHMETAHEADER3  EmfHeader;
+    } DUMMYUNIONNAME;
+    INT                 EmfPlusHeaderSize;
+    INT                 LogicalDpiX;
+    INT                 LogicalDpiY;
+} MetafileHeader;
+
+#endif /* end of c typedefs */
+
+#endif /* _GDIPLUSMETAHEADER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h
new file mode 100644
index 0000000..de01c9f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSPIXELFORMATS_H
+#define _GDIPLUSPIXELFORMATS_H
+
+typedef DWORD ARGB;
+typedef INT PixelFormat;
+
+#define    PixelFormatIndexed   0x00010000
+#define    PixelFormatGDI       0x00020000
+#define    PixelFormatAlpha     0x00040000
+#define    PixelFormatPAlpha    0x00080000
+#define    PixelFormatExtended  0x00100000
+#define    PixelFormatCanonical 0x00200000
+
+#define    PixelFormatUndefined 0
+#define    PixelFormatDontCare  0
+
+#define    PixelFormat1bppIndexed       (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)
+#define    PixelFormat4bppIndexed       (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI)
+#define    PixelFormat8bppIndexed       (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI)
+#define    PixelFormat16bppGrayScale    (4 | (16 << 8) | PixelFormatExtended)
+#define    PixelFormat16bppRGB555       (5 | (16 << 8) | PixelFormatGDI)
+#define    PixelFormat16bppRGB565       (6 | (16 << 8) | PixelFormatGDI)
+#define    PixelFormat16bppARGB1555     (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI)
+#define    PixelFormat24bppRGB          (8 | (24 << 8) | PixelFormatGDI)
+#define    PixelFormat32bppRGB          (9 | (32 << 8) | PixelFormatGDI)
+#define    PixelFormat32bppARGB         (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)
+#define    PixelFormat32bppPARGB        (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI)
+#define    PixelFormat48bppRGB          (12 | (48 << 8) | PixelFormatExtended)
+#define    PixelFormat64bppARGB         (13 | (64 << 8) | PixelFormatAlpha  | PixelFormatCanonical | PixelFormatExtended)
+#define    PixelFormat64bppPARGB        (14 | (64 << 8) | PixelFormatAlpha  | PixelFormatPAlpha | PixelFormatExtended)
+#define    PixelFormat32bppCMYK         (15 | (32 << 8))
+#define    PixelFormatMax               16
+
+static inline BOOL IsIndexedPixelFormat(PixelFormat format)
+{
+    return (format & PixelFormatIndexed) != 0;
+}
+
+static inline BOOL IsAlphaPixelFormat(PixelFormat format)
+{
+    return (format & PixelFormatAlpha) != 0;
+}
+
+static inline BOOL IsCanonicalPixelFormat(PixelFormat format)
+{
+    return (format & PixelFormatCanonical) != 0;
+}
+
+static inline BOOL IsExtendedPixelFormat(PixelFormat format)
+{
+    return (format & PixelFormatExtended) != 0;
+}
+
+static inline UINT GetPixelFormatSize(PixelFormat format)
+{
+    return (format >> 8) & 0xff;
+}
+
+enum PaletteFlags
+{
+    PaletteFlagsHasAlpha        = 1,
+    PaletteFlagsGrayScale       = 2,
+    PaletteFlagsHalftone        = 4
+};
+
+#ifdef __cplusplus
+
+struct ColorPalette
+{
+public:
+    UINT Flags;
+    UINT Count;
+    ARGB Entries[1];
+};
+
+#else /* end of c++ typedefs */
+
+typedef struct ColorPalette
+{
+    UINT Flags;
+    UINT Count;
+    ARGB Entries[1];
+} ColorPalette;
+
+#endif  /* end of c typedefs */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h
new file mode 100644
index 0000000..71dfffa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSTYPES_H
+#define _GDIPLUSTYPES_H
+
+typedef float REAL;
+
+enum Status{
+    Ok                          = 0,
+    GenericError                = 1,
+    InvalidParameter            = 2,
+    OutOfMemory                 = 3,
+    ObjectBusy                  = 4,
+    InsufficientBuffer          = 5,
+    NotImplemented              = 6,
+    Win32Error                  = 7,
+    WrongState                  = 8,
+    Aborted                     = 9,
+    FileNotFound                = 10,
+    ValueOverflow               = 11,
+    AccessDenied                = 12,
+    UnknownImageFormat          = 13,
+    FontFamilyNotFound          = 14,
+    FontStyleNotFound           = 15,
+    NotTrueTypeFont             = 16,
+    UnsupportedGdiplusVersion   = 17,
+    GdiplusNotInitialized       = 18,
+    PropertyNotFound            = 19,
+    PropertyNotSupported        = 20,
+    ProfileNotFound             = 21
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef BOOL (CALLBACK * ImageAbort)(VOID *);
+typedef ImageAbort DrawImageAbort;
+typedef ImageAbort GetThumbnailImageAbort;
+
+typedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#ifdef __cplusplus
+
+class Point
+{
+public:
+   Point()
+   {
+       X = Y = 0;
+   }
+
+   Point(IN const Point &pt)
+   {
+       X = pt.X;
+       Y = pt.Y;
+   }
+
+   /* FIXME: missing constructor that takes a Size */
+
+   Point(IN INT x, IN INT y)
+   {
+       X = x;
+       Y = y;
+   }
+
+   Point operator+(IN const Point& pt) const
+   {
+       return Point(X + pt.X, Y + pt.Y);
+   }
+
+   Point operator-(IN const Point& pt) const
+   {
+       return Point(X - pt.X, Y - pt.Y);
+   }
+
+   BOOL Equals(IN const Point& pt)
+   {
+       return (X == pt.X) && (Y == pt.Y);
+   }
+
+public:
+    INT X;
+    INT Y;
+};
+
+class PointF
+{
+public:
+   PointF()
+   {
+       X = Y = 0.0f;
+   }
+
+   PointF(IN const PointF &pt)
+   {
+       X = pt.X;
+       Y = pt.Y;
+   }
+
+   /* FIXME: missing constructor that takes a SizeF */
+
+   PointF(IN REAL x, IN REAL y)
+   {
+       X = x;
+       Y = y;
+   }
+
+   PointF operator+(IN const PointF& pt) const
+   {
+       return PointF(X + pt.X, Y + pt.Y);
+   }
+
+   PointF operator-(IN const PointF& pt) const
+   {
+       return PointF(X - pt.X, Y - pt.Y);
+   }
+
+   BOOL Equals(IN const PointF& pt)
+   {
+       return (X == pt.X) && (Y == pt.Y);
+   }
+
+public:
+    REAL X;
+    REAL Y;
+};
+
+class PathData
+{
+public:
+    PathData()
+    {
+        Count = 0;
+        Points = NULL;
+        Types = NULL;
+    }
+
+    ~PathData()
+    {
+        if (Points != NULL)
+        {
+            delete Points;
+        }
+
+        if (Types != NULL)
+        {
+            delete Types;
+        }
+    }
+
+private:
+    PathData(const PathData &);
+    PathData& operator=(const PathData &);
+
+public:
+    INT Count;
+    PointF* Points;
+    BYTE* Types;
+};
+
+/* FIXME: missing the methods. */
+class RectF
+{
+public:
+    REAL X;
+    REAL Y;
+    REAL Width;
+    REAL Height;
+};
+
+/* FIXME: missing the methods. */
+class Rect
+{
+public:
+    INT X;
+    INT Y;
+    INT Width;
+    INT Height;
+};
+
+class CharacterRange
+{
+public:
+    CharacterRange()
+    {
+        First = Length = 0;
+    }
+
+    CharacterRange(INT first, INT length)
+    {
+        First = first;
+        Length = length;
+    }
+
+    CharacterRange& operator=(const CharacterRange& rhs)
+    {
+        First = rhs.First;
+        Length = rhs.Length;
+        return *this;
+    }
+public:
+    INT First;
+    INT Length;
+};
+
+#else /* end of c++ typedefs */
+
+typedef struct Point
+{
+    INT X;
+    INT Y;
+} Point;
+
+typedef struct PointF
+{
+    REAL X;
+    REAL Y;
+} PointF;
+
+typedef struct PathData
+{
+    INT Count;
+    PointF* Points;
+    BYTE* Types;
+} PathData;
+
+typedef struct RectF
+{
+    REAL X;
+    REAL Y;
+    REAL Width;
+    REAL Height;
+} RectF;
+
+typedef struct Rect
+{
+    INT X;
+    INT Y;
+    INT Width;
+    INT Height;
+} Rect;
+
+typedef struct CharacterRange
+{
+    INT First;
+    INT Length;
+} CharacterRange;
+
+typedef enum Status Status;
+
+#endif /* end of c typedefs */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h
new file mode 100644
index 0000000..0f8280b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+
+#ifdef __WIDL__
+typedef struct
+{
+    unsigned long  Data1;
+    unsigned short Data2;
+    unsigned short Data3;
+    byte           Data4[ 8 ];
+} GUID;
+#else
+typedef struct _GUID
+{
+#ifdef _MSC_VER
+    unsigned long  Data1;
+#else
+    unsigned int   Data1;
+#endif
+    unsigned short Data2;
+    unsigned short Data3;
+    unsigned char  Data4[ 8 ];
+} GUID;
+#endif
+
+/* Macros for __uuidof emulation */
+#if defined(__cplusplus) && !defined(_MSC_VER)
+
+extern "C++" {
+    template<typename T> const GUID &__wine_uuidof();
+}
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
+    extern "C++" {                                                      \
+    template<> inline const GUID &__wine_uuidof<type>() {               \
+        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
+        return __uuid_inst;                                             \
+    }                                                                   \
+    template<> inline const GUID &__wine_uuidof<type*>() {              \
+        return __wine_uuidof<type>();                                   \
+    }                                                                   \
+    }
+
+#define __uuidof(type) __wine_uuidof<typeof(type)>()
+
+#else
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#endif
+
+#endif
+
+#undef DEFINE_GUID
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        EXTERN_C const GUID name DECLSPEC_HIDDEN; \
+        EXTERN_C const GUID name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        const GUID name DECLSPEC_HIDDEN; \
+        const GUID name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#endif
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+    EXTERN_C const GUID name DECLSPEC_HIDDEN
+#endif
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+	DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+#ifndef _GUIDDEF_H_
+#define _GUIDDEF_H_
+
+#ifndef __LPGUID_DEFINED__
+#define __LPGUID_DEFINED__
+typedef GUID *LPGUID;
+#endif
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef GUID IID,*LPIID;
+typedef GUID CLSID,*LPCLSID;
+typedef GUID FMTID,*LPFMTID;
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
+#define IID_NULL   GUID_NULL
+#define CLSID_NULL GUID_NULL
+#define FMTID_NULL GUID_NULL
+
+#ifdef __midl_proxy
+#define __MIDL_CONST
+#else
+#define __MIDL_CONST const
+#endif
+
+#endif /* ndef __IID_DEFINED__ */
+
+#ifdef __cplusplus
+#define REFGUID             const GUID &
+#define REFCLSID            const CLSID &
+#define REFIID              const IID &
+#define REFFMTID            const FMTID &
+#else /* !defined(__cplusplus) && !defined(CINTERFACE) */
+#define REFGUID             const GUID* __MIDL_CONST
+#define REFCLSID            const CLSID* __MIDL_CONST
+#define REFIID              const IID* __MIDL_CONST
+#define REFFMTID            const FMTID* __MIDL_CONST
+#endif /* !defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
+#else /* defined(__cplusplus) && !defined(CINTERFACE) */
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#endif /* defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#include <string.h>
+inline bool operator==(const GUID& guidOne, const GUID& guidOther)
+{
+    return !memcmp(&guidOne,&guidOther,sizeof(GUID));
+}
+inline bool operator!=(const GUID& guidOne, const GUID& guidOther)
+{
+    return !(guidOne == guidOther);
+}
+#endif
+
+extern const IID GUID_NULL;
+
+#endif /* _GUIDDEF_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h
new file mode 100644
index 0000000..042bfd9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h
@@ -0,0 +1,40 @@
+/*
+ * Implementation of hyperlinking (hlink.dll)
+ *
+ * Copyright 2005 Aric Stewart 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HLGUIDS_H__
+#define __WINE_HLGUIDS_H__
+
+DEFINE_GUID(CLSID_StdHlink,
+    0x79eac9d0, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);
+DEFINE_GUID(CLSID_StdHlinkBrowseContext,
+    0x79eac9d1, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);
+DEFINE_GUID(CLSID_IID_IExtensionServices,
+    0x79eac9cb, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl
new file mode 100644
index 0000000..c6fb8e7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl
@@ -0,0 +1,450 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "urlmon.idl";
+
+interface IHlink;
+interface IHlinkSite;
+interface IHlinkFrame;
+interface IHlinkBrowseContext;
+
+cpp_quote("HRESULT WINAPI HlinkCreateFromMoniker(IMoniker*, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkCreateFromString(LPCWSTR, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkCreateFromData(IDataObject*, IHlinkSite*, DWORD dwSiteData, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkCreateExtensionServices(LPCWSTR, HWND, LPCWSTR, LPCWSTR, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkQueryCreateFromData(IDataObject*);")
+cpp_quote("HRESULT WINAPI HlinkClone(IHlink*, REFIID, IHlinkSite*, DWORD, void **);")
+cpp_quote("HRESULT WINAPI HlinkCreateBrowseContext(IUnknown*, REFIID, void **);")
+cpp_quote("HRESULT WINAPI HlinkNavigateToStringReference(LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);")
+cpp_quote("HRESULT WINAPI HlinkNavigate(IHlink*, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);")
+cpp_quote("HRESULT WINAPI HlinkOnNavigate(IHlinkFrame*, IHlinkBrowseContext*, DWORD, IMoniker*, LPCWSTR, LPCWSTR, ULONG*);")
+cpp_quote("HRESULT WINAPI HlinkIsShortcut(LPCWSTR);")
+cpp_quote("HRESULT WINAPI HlinkTranslateURL(LPCWSTR,DWORD,LPWSTR*);")
+cpp_quote("HRESULT WINAPI HlinkParseDisplayName(LPBC,LPCWSTR,BOOL,ULONG*,IMoniker**);")
+cpp_quote("HRESULT WINAPI HlinkResolveMonikerForData(LPMONIKER,DWORD,LPBC,ULONG,FORMATETC*,IBindStatusCallback*,LPMONIKER);")
+cpp_quote("HRESULT WINAPI HlinkUpdateStackItem(IHlinkFrame*, IHlinkBrowseContext*, ULONG, IMoniker*, LPCWSTR, LPCWSTR);")
+
+typedef enum _HLSR_NOREDEF10 {
+    HLSR_HOME,
+    HLSR_SEARCHPAGE,
+    HLSR_HISTORYFOLDER
+} HLSR;
+
+cpp_quote("HRESULT WINAPI HlinkSetSpecialReference(ULONG uReference, LPCWSTR pwzReference);")
+cpp_quote("HRESULT WINAPI HlinkGetSpecialReference(ULONG uReference, LPWSTR *ppwzReference);")
+
+cpp_quote("#define SID_SHlinkFrame IID_IHlinkFrame")
+
+/*****************************************************************************
+ *    IHlink interface
+ */
+[
+    object,
+    uuid(79EAC9C3-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IHlink: IUnknown
+{
+    typedef [unique] IHlink *LPHLINK;
+
+    typedef enum {
+        HLNF_INTERNALJUMP          = 0x00000001,
+        HLNF_OPENINNEWWINDOW       = 0x00000002,
+        HLNF_NAVIGATINGBACK        = 0x00000004,
+        HLNF_NAVIGATINGFORWARD     = 0x00000008,
+        HLNF_NAVIGATINGTOSTACKITEM = 0x00000010,
+        HLNF_CREATENOHISTORY       = 0x00000020
+    } HLNF;
+
+    typedef enum {
+        HLINKGETREF_DEFAULT  = 0,
+        HLINKGETREF_ABSOLUTE = 1,
+        HLINKGETREF_RELATIVE = 2,
+    } HLINKGETREF;
+
+    typedef enum {
+        HLFNAMEF_DEFAULT          = 0x00000000,
+        HLFNAMEF_TRYCACHE         = 0x00000001,
+        HLFNAMEF_TRYPRETTYTARGET  = 0x00000002,
+        HLFNAMEF_TRYFULLTARGET    = 0x00000004,
+        HLFNAMEF_TRYWIN95SHORTCUT = 0x00000008
+    } HLFNAMEF;
+
+    typedef enum {
+        HLINKMISC_RELATIVE = 0x00000001,
+    } HLINKMISC;
+
+    typedef enum {
+        HLINKSETF_TARGET   = 0x00000001,
+        HLINKSETF_LOCATION = 0x00000002
+    } HLINKSETF;
+
+    HRESULT SetHlinkSite(
+        [in, unique] IHlinkSite *pihlSite,
+        [in] DWORD dwSiteData);
+
+    HRESULT GetHlinkSite(
+        [out] IHlinkSite **ppihlSite,
+        [out] DWORD *pdwSiteData);
+
+    HRESULT SetMonikerReference(
+        [in] DWORD grfHLSETF,
+        [in, unique] IMoniker *pimkTarget,
+        [in, unique] LPCWSTR pwzLocation);
+
+    HRESULT GetMonikerReference(
+        [in]  DWORD dwWhichRef,
+        [out] IMoniker **ppimkTarget,
+        [out] LPWSTR *ppwzLocation);
+
+    HRESULT SetStringReference(
+        [in] DWORD grfHLSETF,
+        [in, unique] LPCWSTR pwzTarget,
+        [in, unique] LPCWSTR pwzLocation);
+
+    HRESULT GetStringReference(
+        [in]  DWORD dwWhichRef,
+        [out] LPWSTR *ppwzTarget,
+        [out] LPWSTR *ppwzLocation);
+
+    HRESULT SetFriendlyName(
+        [in, unique] LPCWSTR pwzFriendlyName);
+
+    HRESULT GetFriendlyName(
+        [in]  DWORD grfHLFNAMEF,
+        [out] LPWSTR *ppwzFriendlyName);
+
+    HRESULT SetTargetFrameName(
+        [in, unique] LPCWSTR pwzTargetFrameName);
+
+    HRESULT GetTargetFrameName(
+        [out] LPWSTR *ppwzTargetFrameName);
+
+    HRESULT GetMiscStatus(
+        [out] DWORD *pdwStatus);
+
+    HRESULT Navigate(
+        [in] DWORD grfHLNF,
+        [in, unique] LPBC pibc,
+        [in, unique] IBindStatusCallback *pibsc,
+        [in, unique] IHlinkBrowseContext *pihlbc);
+
+    HRESULT SetAdditionalParams(
+        [in, unique] LPCWSTR pwzAdditionalParams);
+
+    HRESULT GetAdditionalParams(
+        [out] LPWSTR *ppwzAdditionalParams);
+}
+
+/*****************************************************************************
+ *    IHlinkSite interface
+ */
+[
+    object,
+    uuid(79EAC9C2-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IHlinkSite: IUnknown
+{
+    typedef [unique] IHlinkSite *LPHLINKSITE;
+
+    typedef enum {
+        HLINKWHICHMK_CONTAINER = 1,
+        HLINKWHICHMK_BASE      = 2,
+    } HLINKWHICHMK;
+
+    HRESULT QueryService(
+        [in] DWORD dwSiteData,
+        [in] REFGUID guidService,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown **ppiunk);
+
+    HRESULT GetMoniker(
+        [in] DWORD dwSiteData,
+        [in] DWORD dwAssign,
+        [in] DWORD dwWhich,
+        [out] IMoniker **ppimk);
+
+    HRESULT ReadyToNavigate(
+        [in] DWORD dwSiteData,
+        [in] DWORD dwReserved);
+
+    HRESULT OnNavigationComplete(
+        [in] DWORD dwSiteData,
+        [in] DWORD dwreserved,
+        [in] HRESULT hrError,
+        [in, unique] LPCWSTR pwzError);
+}
+
+/*****************************************************************************
+ *    IEnumHLITEM interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9C6-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IEnumHLITEM : IUnknown
+{
+    typedef [unique] IEnumHLITEM *LPENUMHLITEM;
+
+    typedef struct tagHLITEM {
+        ULONG  uHLID;
+        LPWSTR pwzFriendlyName;
+    } HLITEM;
+    typedef [unique] HLITEM *LPHLITEM;
+
+    HRESULT Next(
+        [in]  ULONG celt,
+        [out] HLITEM *rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumHLITEM **ppienumhlitem);
+}
+
+/*****************************************************************************
+ *    IHlinkBrowseContext interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9C7-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IHlinkBrowseContext : IUnknown
+{
+    typedef [unique] IHlinkBrowseContext *LPHLINKBROWSECONTEXT;
+
+    enum {
+        HLTB_DOCKEDLEFT    = 0,
+        HLTB_DOCKEDTOP     = 1,
+        HLTB_DOCKEDRIGHT   = 2,
+        HLTB_DOCKEDBOTTOM  = 3,
+        HLTB_FLOATING      = 4
+    };
+
+    typedef struct _tagHLTBINFO {
+        ULONG uDockType;
+        RECT  rcTbPos;
+    } HLTBINFO;
+
+    enum {
+        HLBWIF_HASFRAMEWNDINFO   = 0x00000001,
+        HLBWIF_HASDOCWNDINFO     = 0x00000002,
+        HLBWIF_FRAMEWNDMAXIMIZED = 0x00000004,
+        HLBWIF_DOCWNDMAXIMIZED   = 0x00000008,
+        HLBWIF_HASWEBTOOLBARINFO = 0x00000010,
+        HLBWIF_WEBTOOLBARHIDDEN  = 0x00000020
+    };
+
+    typedef struct _tagHLBWINFO {
+        ULONG    cbSize;
+        DWORD    grfHLBWIF;
+        RECT     rcFramePos;
+        RECT     rcDocPos;
+        HLTBINFO hltbinfo;
+    } HLBWINFO;
+
+    typedef [unique] HLBWINFO *LPHLBWINFO;
+
+    enum {
+        HLID_INVALID     = 0x00000000,
+        HLID_PREVIOUS    = 0xFFFFFFFF,
+        HLID_NEXT        = 0xFFFFFFFE,
+        HLID_CURRENT     = 0xFFFFFFFD,
+        HLID_STACKBOTTOM = 0xFFFFFFFC,
+        HLID_STACKTOP    = 0xFFFFFFFB
+    };
+
+    enum {
+        HLQF_ISVALID   = 0x00000001,
+        HLQF_ISCURRENT = 0x00000002
+    };
+
+    HRESULT Register(
+        [in] DWORD reserved,
+        [in, unique] IUnknown *piunk,
+        [in, unique] IMoniker *pimk,
+        [out] DWORD *pdwRegister);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetObject")
+cpp_quote("#endif")
+
+    HRESULT GetObject(
+        [in, unique] IMoniker *pimk,
+        [in] BOOL fBindIfRootRegistered,
+        [out] IUnknown **ppiunk);
+
+    HRESULT Revoke(
+        [in] DWORD dwRegister);
+
+    HRESULT SetBrowseWindowInfo(
+        [in, unique] HLBWINFO *phlbwi);
+
+    HRESULT GetBrowseWindowInfo(
+        [out] HLBWINFO *phlbwi);
+
+    HRESULT SetInitialHlink(
+        [in, unique] IMoniker * pimkTarget,
+        [in, unique] LPCWSTR pwzLocation,
+        [in, unique] LPCWSTR pwzFriendlyName);
+
+    HRESULT OnNavigateHlink(
+        [in] DWORD grfHLNF,
+        [in, unique] IMoniker *pimkTarget,
+        [in, unique] LPCWSTR pwzLocation,
+        [in, unique] LPCWSTR pwzFriendlyName,
+        [out] ULONG *puHLID);
+
+    HRESULT UpdateHlink(
+        [in] ULONG uHLID,
+        [in, unique] IMoniker *pimkTarget,
+        [in, unique] LPCWSTR pwzLocation,
+        [in, unique] LPCWSTR pwzFriendlyName);
+
+    HRESULT EnumNavigationStack(
+        [in] DWORD dwReserved,
+        [in] DWORD grfHLFNAMEF,
+        [out] IEnumHLITEM **ppienumhlitem);
+
+    HRESULT QueryHlink(
+        [in] DWORD grfHLQF,
+        [in] ULONG uHLID);
+
+    HRESULT GetHlink(
+        [in] ULONG uHLID,
+        [out] IHlink **ppihl);
+
+    HRESULT SetCurrentHlink(
+        [in] ULONG uHLID);
+
+    HRESULT Clone(
+        [in, unique] IUnknown *piunkOuter,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown **ppiunkObj);
+
+    HRESULT Close(
+        [in] DWORD reserved);
+}
+
+
+/*****************************************************************************
+ *    IHlinkTarget interface
+ */
+[
+    object,
+    uuid(79EAC9C4-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IHlinkTarget : IUnknown
+{
+    typedef [unique] IHlinkTarget *LPHLINKTARGET;
+
+    HRESULT SetBrowseContext(
+        [in, unique] IHlinkBrowseContext *pihlbc);
+
+    HRESULT GetBrowseContext(
+        [out] IHlinkBrowseContext **ppihlbc);
+
+    HRESULT Navigate(
+        [in] DWORD grfHLNF,
+        [in, unique] LPCWSTR pwzJumpLocation);
+
+    HRESULT GetMoniker(
+        [in,unique]  LPCWSTR pwzLocation,
+        [in] DWORD dwAssign,
+        [out] IMoniker **ppimkLocation);
+
+    HRESULT GetFriendlyName(
+        [in,unique]  LPCWSTR pwzLocation,
+        [out] LPWSTR *ppwzFriendlyName);
+}
+
+/*****************************************************************************
+ *    IHlinkFrame interface
+ */
+[
+    object,
+    uuid(79eac9c5-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+
+interface IHlinkFrame : IUnknown
+{
+    typedef IHlinkFrame *LPHLINKFRAME;
+
+    HRESULT SetBrowseContext( 
+        [in, unique] IHlinkBrowseContext * pihlbc);
+    HRESULT GetBrowseContext( 
+        [out] IHlinkBrowseContext ** ppihlbc);
+    HRESULT Navigate( 
+        [in] DWORD grfHLNF, 
+        [in, unique] LPBC pbc, 
+        [in, unique] IBindStatusCallback *pibsc, 
+        [in, unique] IHlink *pihlNavigate);
+    HRESULT OnNavigate( 
+        [in] DWORD grfHLNF, 
+        [in, unique] IMoniker *pimkTarget, 
+        [in, unique] LPCWSTR pwzLocation, 
+        [in, unique] LPCWSTR pwzFriendlyName, 
+        [in] DWORD dwreserved);
+    HRESULT UpdateHlink( 
+        [in] ULONG uHLID, 
+        [in, unique] IMoniker *pimkTarget, 
+        [in, unique] LPCWSTR pwzLocation, 
+        [in, unique] LPCWSTR pwzFriendlyName);
+}
+
+/*****************************************************************************
+ *    IExtensionServices interface
+ */
+[
+    object,
+    uuid(79eac9cb-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+
+interface IExtensionServices: IUnknown
+{
+    typedef IExtensionServices *LPEXTENSIONSERVICES;
+
+    HRESULT SetAdditionalHeaders(
+        [in] LPCWSTR pwzAdditionalHeaders);
+
+    HRESULT SetAuthenticateData(
+        [in] HWND phwnd,
+        [in] LPCWSTR pwzUsername,
+        [in] LPCWSTR pwzPassword);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl
new file mode 100644
index 0000000..e51c920
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2006,2011 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "urlmon.idl";
+
+cpp_quote("#include <htiframe.h>")
+
+
+/*****************************************************************************
+ *    ITargetFrame interface
+ */
+[
+    object,
+    uuid(d5f78c80-5252-11cf-90fa-00aa0042106e),
+    pointer_default(unique)
+]
+interface ITargetFrame: IUnknown
+{
+    typedef [unique] ITargetFrame *LPTARGETFRAME;
+
+    typedef enum {
+        NAVIGATEFRAME_FL_RECORD                    = 0x01,
+        NAVIGATEFRAME_FL_POST                      = 0x02,
+        NAVIGATEFRAME_FL_NO_DOC_CACHE              = 0x04,
+        NAVIGATEFRAME_FL_NO_IMAGE_CACHE            = 0x08,
+        NAVIGATEFRAME_FL_AUTH_FAIL_CACHE_OK        = 0x10,
+        NAVIGATEFRAME_FL_SENDING_FROM_FORM         = 0x20,
+        NAVIGATEFRAME_FL_REALLY_SENDING_FROM_FORM  = 0x40
+    } NAVIGATEFRAME_FLAGS;
+
+    typedef struct tagNavigateData {
+        ULONG ulTarget;
+        ULONG ulURL;
+        ULONG ulRefURL;
+        ULONG ulPostData;
+        DWORD dwFlags;
+    } NAVIGATEDATA;
+
+    HRESULT SetFrameName([in] LPCWSTR pszFrameName);
+    HRESULT GetFrameName([out] LPWSTR *ppszFrameName);
+    HRESULT GetParentFrame([out] IUnknown **ppunkParent);
+
+    HRESULT FindFrame(
+            [in] LPCWSTR pszTargetName,
+            [in] IUnknown *ppunkContextFrame,
+            [in] DWORD dwFlags,
+            [out] IUnknown **ppunkTargetFrame);
+
+    HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc);
+    HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc);
+}
+
+/*****************************************************************************
+ *    ITargetFramePriv interface
+ */
+[
+    object,
+    uuid(9216e421-2bf5-11d0-82b4-00a0c90c29c5),
+    pointer_default(unique)
+]
+interface ITargetFramePriv : IUnknown
+{
+    typedef [unique] ITargetFramePriv *LPTARGETFRAMEPRIV;
+
+    HRESULT FindFrameDownwards(
+            [in] LPCWSTR pszTargetName,
+            [in] DWORD dwFlags,
+            [out] IUnknown **ppunkTargetFrame);
+
+    HRESULT FindFrameInContext(
+            [in] LPCWSTR pszTargetName,
+            [in] IUnknown *punkContextFrame,
+            [in] DWORD dwFlags,
+            [out] IUnknown **ppunkTargetFrame);
+
+    HRESULT OnChildFrameActivate([in] IUnknown *pUnkChildFrame);
+    HRESULT OnChildFrameDeactivate([in] IUnknown *pUnkChildFrame);
+
+    HRESULT NavigateHack(
+            [in] DWORD grfHLNF,
+            [in, unique] LPBC pbc,
+            [in, unique] IBindStatusCallback *pibsc,
+            [in, unique] LPCWSTR pszTargetName,
+            [in] LPCWSTR pszUrl,
+            [in, unique] LPCWSTR pszLocation);
+
+    HRESULT FindBrowserByIndex(
+            [in] DWORD dwID,
+            [out] IUnknown **ppunkBrowser);
+}
+
+/*****************************************************************************
+ *    ITargetFramePriv2 interface
+ */
+[
+    object,
+    uuid(b2c867e6-69d6-46f2-a611-ded9a4bd7fef),
+    pointer_default(unique)
+]
+interface ITargetFramePriv2 : ITargetFramePriv
+{
+    typedef [unique] ITargetFramePriv2 *LPTARGETFRAMEPRIV2;
+
+    HRESULT AggregatedNavigation2(
+            [in] DWORD grfHLNF,
+            [in, unique] LPBC pbc,
+            [in, unique] IBindStatusCallback *pibsc,
+            [in, unique] LPCWSTR pszTargetName,
+            [in] IUri *pUri,
+            [in, unique] LPCWSTR pszLocation);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl
new file mode 100644
index 0000000..5e73bbc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2006,2011 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+/*****************************************************************************
+ *    ITargetNotify interface
+ */
+[
+    object,
+    uuid(863a99a0-21bc-11d0-82b4-00a0c90c29c5),
+    pointer_default(unique)
+]
+interface ITargetNotify : IUnknown
+{
+    typedef [unique] ITargetNotify *LPTARGETNOTIFY;
+
+    HRESULT OnCreate(
+            [in] IUnknown *pUnkDestination,
+            [in] ULONG cbCookie);
+
+    HRESULT OnReuse([in] IUnknown *pUnkDestination);
+}
+
+/*****************************************************************************
+ *    ITargetNotify2 interface
+ */
+[
+    object,
+    uuid(3050f6b1-98b5-11cf-bb82-00aa00bdce0b),
+    pointer_default(unique)
+]
+interface ITargetNotify2 : ITargetNotify
+{
+    typedef [unique] ITargetNotify2 *LPTARGETNOTIFY2;
+
+    HRESULT GetOptionString([in,out] BSTR *pbstrOptions);
+}
+
+/*****************************************************************************
+ *    ITargetFrame2 interface
+ */
+[
+    object,
+    uuid(86d52e11-94a8-11d0-82af-00c04fd5ae38),
+    pointer_default(unique)
+]
+interface ITargetFrame2 : IUnknown
+{
+    typedef [unique] ITargetFrame2 *LPTARGETFRAME2;
+
+    typedef enum {
+        FINDFRAME_NONE               = 0,
+        FINDFRAME_JUSTTESTEXISTENCE  = 1,
+        FINDFRAME_INTERNAL           = 0x80000000
+    } FINDFRAME_FLAGS;
+
+    typedef enum {
+        FRAMEOPTIONS_SCROLL_YES   = 0x00000001,
+        FRAMEOPTIONS_SCROLL_NO    = 0x00000002,
+        FRAMEOPTIONS_SCROLL_AUTO  = 0x00000004,
+        FRAMEOPTIONS_NORESIZE     = 0x00000008,
+        FRAMEOPTIONS_NO3DBORDER   = 0x00000010,
+        FRAMEOPTIONS_DESKTOP      = 0x00000020,
+        FRAMEOPTIONS_BROWSERBAND  = 0x00000040
+    } FRAMEOPTIONS_FLAGS;
+
+    HRESULT SetFrameName([in] LPCWSTR pszFrameName);
+
+    HRESULT GetFrameName([out] LPWSTR *ppszFrameName);
+
+    HRESULT GetParentFrame([out] IUnknown **ppunkParent);
+
+    HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc);
+
+    HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc);
+
+    HRESULT GetFramesContainer([out] IOleContainer **ppContainer);
+
+    HRESULT SetFrameOptions([in] DWORD dwFlags);
+
+    HRESULT GetFrameOptions([out] DWORD *pdwFlags);
+
+    HRESULT SetFrameMargins(
+            [in] DWORD dwWidth,
+            [in] DWORD dwHeight);
+
+    HRESULT GetFrameMargins(
+            [out] DWORD *pdwWidth,
+            [out] DWORD *pdwHeight);
+
+    HRESULT FindFrame(
+            [in,unique] LPCWSTR pszTargetName,
+            [in] DWORD dwFlags,
+            [out] IUnknown **ppunkTargetFrame);
+
+    HRESULT GetTargetAlias(
+            [in,unique] LPCWSTR pszTargetName,
+             [out] LPWSTR *ppszTargetAlias);
+}
+
+/*****************************************************************************
+ *    ITargetContainer interface
+ */
+[
+    object,
+    uuid(7847ec01-2bec-11d0-82b4-00a0c90C29c5),
+    pointer_default(unique)
+]
+interface ITargetContainer : IUnknown
+{
+    typedef [unique] ITargetContainer *LPTARGETCONTAINER;
+
+    HRESULT GetFrameUrl([out] LPWSTR *ppszFrameSrc);
+
+    HRESULT GetFramesContainer([out] IOleContainer **ppContainer);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h
new file mode 100644
index 0000000..19128c7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h
@@ -0,0 +1,461 @@
+/*
+ * Copyright 2004 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __HTMLHELP_H__
+#define __HTMLHELP_H__
+
+#define HH_DISPLAY_TOPIC        0x00
+#define HH_HELP_FINDER          0x00
+#define HH_DISPLAY_TOC          0x01
+#define HH_DISPLAY_INDEX        0x02
+#define HH_DISPLAY_SEARCH       0x03
+#define HH_SET_WIN_TYPE         0x04
+#define HH_GET_WIN_TYPE         0x05
+#define HH_GET_WIN_HANDLE       0x06
+#define HH_ENUM_INFO_TYPE       0x07
+#define HH_SET_INFO_TYPE        0x08
+#define HH_SYNC                 0x09
+#define HH_RESERVED1            0x0A
+#define HH_RESERVED2            0x0B
+#define HH_RESERVED3            0x0C
+#define HH_KEYWORD_LOOKUP       0x0D
+#define HH_DISPLAY_TEXT_POPUP   0x0E
+#define HH_HELP_CONTEXT         0x0F
+#define HH_TP_HELP_CONTEXTMENU  0x10
+#define HH_TP_HELP_WM_HELP      0x11
+#define HH_CLOSE_ALL            0x12
+#define HH_ALINK_LOOKUP         0x13
+#define HH_GET_LAST_ERROR       0x14
+#define HH_ENUM_CATEGORY        0x15
+#define HH_ENUM_CATEGORY_IT     0x16
+#define HH_RESET_IT_FILTER      0x17
+#define HH_SET_INCLUSIVE_FILTER 0x18
+#define HH_SET_EXCLUSIVE_FILTER 0x19
+#define HH_INITIALIZE           0x1C
+#define HH_UNINITIALIZE         0x1D
+#define HH_SAFE_DISPLAY_TOPIC   0x20
+#define HH_PRETRANSLATEMESSAGE  0xFD
+#define HH_SET_GLOBAL_PROPERTY  0xFC
+
+#define HHWIN_PROP_TAB_AUTOHIDESHOW  0x00000001
+#define HHWIN_PROP_ONTOP             0x00000002
+#define HHWIN_PROP_NOTITLEBAR        0x00000004
+#define HHWIN_PROP_NODEF_STYLES      0x00000008
+#define HHWIN_PROP_NODEF_EXSTYLES    0x00000010
+#define HHWIN_PROP_TRI_PANE          0x00000020
+#define HHWIN_PROP_NOTB_TEXT         0x00000040
+#define HHWIN_PROP_POST_QUIT         0x00000080
+#define HHWIN_PROP_AUTO_SYNC         0x00000100
+#define HHWIN_PROP_TRACKING          0x00000200
+#define HHWIN_PROP_TAB_SEARCH        0x00000400
+#define HHWIN_PROP_TAB_HISTORY       0x00000800
+#define HHWIN_PROP_TAB_FAVORITES     0x00001000
+#define HHWIN_PROP_CHANGE_TITLE      0x00002000
+#define HHWIN_PROP_NAV_ONLY_WIN      0x00004000
+#define HHWIN_PROP_NO_TOOLBAR        0x00008000
+#define HHWIN_PROP_MENU              0x00010000
+#define HHWIN_PROP_TAB_ADVSEARCH     0x00020000
+#define HHWIN_PROP_USER_POS          0x00040000
+#define HHWIN_PROP_TAB_CUSTOM1       0x00080000
+#define HHWIN_PROP_TAB_CUSTOM2       0x00100000
+#define HHWIN_PROP_TAB_CUSTOM3       0x00200000
+#define HHWIN_PROP_TAB_CUSTOM4       0x00400000
+#define HHWIN_PROP_TAB_CUSTOM5       0x00800000
+#define HHWIN_PROP_TAB_CUSTOM6       0x01000000
+#define HHWIN_PROP_TAB_CUSTOM7       0x02000000
+#define HHWIN_PROP_TAB_CUSTOM8       0x04000000
+#define HHWIN_PROP_TAB_CUSTOM9       0x08000000
+#define HHWIN_TB_MARGIN              0x10000000
+
+#define HHWIN_PARAM_PROPERTIES     0x00000002
+#define HHWIN_PARAM_STYLES         0x00000004
+#define HHWIN_PARAM_EXSTYLES       0x00000008
+#define HHWIN_PARAM_RECT           0x00000010
+#define HHWIN_PARAM_NAV_WIDTH      0x00000020
+#define HHWIN_PARAM_SHOWSTATE      0x00000040
+#define HHWIN_PARAM_INFOTYPES      0x00000080
+#define HHWIN_PARAM_TB_FLAGS       0x00000100
+#define HHWIN_PARAM_EXPANSION      0x00000200
+#define HHWIN_PARAM_TABPOS         0x00000400
+#define HHWIN_PARAM_TABORDER       0x00000800
+#define HHWIN_PARAM_HISTORY_COUNT  0x00001000
+#define HHWIN_PARAM_CUR_TAB        0x00002000
+
+#define HHWIN_BUTTON_EXPAND      0x00000002
+#define HHWIN_BUTTON_BACK        0x00000004
+#define HHWIN_BUTTON_FORWARD     0x00000008
+#define HHWIN_BUTTON_STOP        0x00000010
+#define HHWIN_BUTTON_REFRESH     0x00000020
+#define HHWIN_BUTTON_HOME        0x00000040
+#define HHWIN_BUTTON_BROWSE_FWD  0x00000080
+#define HHWIN_BUTTON_BROWSE_BCK  0x00000100
+#define HHWIN_BUTTON_NOTES       0x00000200
+#define HHWIN_BUTTON_CONTENTS    0x00000400
+#define HHWIN_BUTTON_SYNC        0x00000800
+#define HHWIN_BUTTON_OPTIONS     0x00001000
+#define HHWIN_BUTTON_PRINT       0x00002000
+#define HHWIN_BUTTON_INDEX       0x00004000
+#define HHWIN_BUTTON_SEARCH      0x00008000
+#define HHWIN_BUTTON_HISTORY     0x00010000
+#define HHWIN_BUTTON_FAVORITES   0x00020000
+#define HHWIN_BUTTON_JUMP1       0x00040000
+#define HHWIN_BUTTON_JUMP2       0x00080000
+#define HHWIN_BUTTON_ZOOM        0x00100000
+#define HHWIN_BUTTON_TOC_NEXT    0x00200000
+#define HHWIN_BUTTON_TOC_PREV    0x00400000
+
+#define HHWIN_DEF_BUTTONS  \
+    (HHWIN_BUTTON_EXPAND | HHWIN_BUTTON_BACK | HHWIN_BUTTON_OPTIONS | HHWIN_BUTTON_PRINT)
+
+#define IDTB_EXPAND       200
+#define IDTB_CONTRACT     201
+#define IDTB_STOP         202
+#define IDTB_REFRESH      203
+#define IDTB_BACK         204
+#define IDTB_HOME         205
+#define IDTB_SYNC         206
+#define IDTB_PRINT        207
+#define IDTB_OPTIONS      208
+#define IDTB_FORWARD      209
+#define IDTB_NOTES        210
+#define IDTB_BROWSE_FWD   211
+#define IDTB_BROWSE_BACK  212
+#define IDTB_CONTENTS     213
+#define IDTB_INDEX        214
+#define IDTB_SEARCH       215
+#define IDTB_HISTORY      216
+#define IDTB_FAVORITES    217
+#define IDTB_JUMP1        218
+#define IDTB_JUMP2        219
+#define IDTB_CUSTOMIZE    221
+#define IDTB_ZOOM         222
+#define IDTB_TOC_NEXT     223
+#define IDTB_TOC_PREV     224
+
+#define HHN_FIRST          (0U-860U)
+#define HHN_LAST           (0U-879U)
+#define HHN_NAVCOMPLETE    HHN_FIRST
+#define HHN_TRACK          (HHN_FIRST-1)
+#define HHN_WINDOW_CREATE  (HHN_FIRST-2)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagHH_NOTIFY {
+    NMHDR hdr;
+    PCSTR pszurl;
+} HH_NOTIFY;
+
+typedef struct tagHH_POPUPA {
+    int       cbStruct;
+    HINSTANCE hinst;
+    UINT      idString;
+    LPCSTR    pszText;
+    POINT     pt;
+    COLORREF  clrForeground;
+    COLORREF  clrBackground;
+    RECT      rcMargins;
+    LPCSTR    pszFont;
+} HH_POPUPA;
+
+typedef struct tagHH_POPUPW {
+    int       cbStruct;
+    HINSTANCE hinst;
+    UINT      idString;
+    LPCWSTR   pszText;
+    POINT     pt;
+    COLORREF  clrForeground;
+    COLORREF  clrBackground;
+    RECT      rcMargins;
+    LPCWSTR   pszFont;
+} HH_POPUPW;
+
+DECL_WINELIB_TYPE_AW(HH_POPUP)
+
+typedef struct tagHH_ALINKA {
+    int    cbStruct;
+    BOOL   fReserved;
+    LPCSTR pszKeywords;
+    LPCSTR pszUrl;
+    LPCSTR pszMsgText;
+    LPCSTR pszMsgTitle;
+    LPCSTR pszWindow;
+    BOOL   fIndexOnFail;
+} HH_ALINKA;
+
+typedef struct tagHH_ALINKW {
+    int     cbStruct;
+    BOOL    fReserved;
+    LPCWSTR pszKeywords;
+    LPCWSTR pszUrl;
+    LPCWSTR pszMsgText;
+    LPCWSTR pszMsgTitle;
+    LPCWSTR pszWindow;
+    BOOL    fIndexOnFail;
+} HH_ALINKW;
+
+DECL_WINELIB_TYPE_AW(HH_ALINK)
+
+enum {
+    HHWIN_NAVTYPE_TOC,
+    HHWIN_NAVTYPE_INDEX,
+    HHWIN_NAVTYPE_SEARCH,
+    HHWIN_NAVTYPE_FAVORITES,
+    HHWIN_NAVTYPE_HISTORY,
+    HHWIN_NAVTYPE_AUTHOR,
+    HHWIN_NAVTYPE_CUSTOM_FIRST = 11
+};
+
+enum {
+    IT_INCLUSIVE,
+    IT_EXCLUSIVE,
+    IT_HIDDEN
+};
+
+typedef struct tagHH_ENUM_IT {
+    int    cbStruct;
+    int    iType;
+    LPCSTR pszCatName;
+    LPCSTR pszITName;
+    LPCSTR pszITDescription;
+} HH_ENUM_IT, *PHH_ENUM_IT;
+
+typedef struct tagHH_ENUM_CAT {
+    int    cbStruct;
+    LPCSTR pszCatName;
+    LPCSTR pszCatDescription;
+} HH_ENUM_CAT, *PHH_ENUM_CAT;
+
+typedef struct tagHH_SET_INFOTYPE {
+    int    cbStruct;
+    LPCSTR pszCatName;
+    LPCSTR pszInfoTypeName;
+} HH_SET_INFOTYPE;
+
+typedef DWORD HH_INFOTYPE, *PHH_INFOTYPE;
+
+enum {
+    HHWIN_NAVTAB_TOP,
+    HHWIN_NAVTAB_LEFT,
+    HHWIN_NAVTAB_BOTTOM
+};
+
+#define HH_MAX_TABS 19
+
+enum {
+    HH_TAB_CONTENTS,
+    HH_TAB_INDEX,
+    HH_TAB_SEARCH,
+    HH_TAB_FAVORITES,
+    HH_TAB_HISTORY,
+    HH_TAB_AUTHOR,
+    HH_TAB_CUSTOM_FIRST = 11,
+    HH_TAB_CUSTOM_LAST = HH_MAX_TABS
+};
+
+#define HH_MAX_TABS_CUSTOM        (HH_TAB_CUSTOM_LAST-HH_TAB_CUSTOM_FIRST+1)
+#define HH_FTS_DEFAULT_PROXIMITY  -1
+
+typedef struct tagHH_FTS_QUERYA {
+    int    cbStruct;
+    BOOL   fUniCodeStrings;
+    LPCSTR pszSearchQuery;
+    LONG   iProximity;
+    BOOL   fStemmedSearch;
+    BOOL   fTitleOnly;
+    BOOL   fExecute;
+    LPCSTR pszWindow;
+} HH_FTS_QUERYA;
+
+typedef struct tagHH_FTS_QUERYW {
+    int     cbStruct;
+    BOOL    fUniCodeStrings;
+    LPCWSTR pszSearchQuery;
+    LONG    iProximity;
+    BOOL    fStemmedSearch;
+    BOOL    fTitleOnly;
+    BOOL    fExecute;
+    LPCWSTR pszWindow;
+} HH_FTS_QUERYW;
+
+DECL_WINELIB_TYPE_AW(HH_FTS_QUERY)
+
+typedef struct tagHH_WINTYPEA {
+    int          cbStruct;
+    BOOL         fUniCodeStrings;
+    LPCSTR       pszType;
+    DWORD        fsValidMembers;
+    DWORD        fsWinProperties;
+    LPCSTR       pszCaption;
+    DWORD        dwStyles;
+    DWORD        dwExStyles;
+    RECT         rcWindowPos;
+    int          nShowState;
+    HWND         hwndHelp;
+    HWND         hwndCaller;
+    PHH_INFOTYPE paInfoTypes;
+    HWND         hwndToolBar;
+    HWND         hwndNavigation;
+    HWND         hwndHTML;
+    int          iNavWidth;
+    RECT         rcHTML;
+    LPCSTR       pszToc;
+    LPCSTR       pszIndex;
+    LPCSTR       pszFile;
+    LPCSTR       pszHome;
+    DWORD        fsToolBarFlags;
+    BOOL         fNotExpanded;
+    int          curNavType;
+    int          tabpos;
+    int          idNotify;
+    BYTE         tabOrder[HH_MAX_TABS+1];
+    int          cHistory;
+    LPCSTR       pszJump1;
+    LPCSTR       pszJump2;
+    LPCSTR       pszUrlJump1;
+    LPCSTR       pszUrlJump2;
+    RECT         rcMinSize;
+    int          cbInfoTypes;
+    LPCSTR       pszCustomTabs;
+} HH_WINTYPEA, *PHH_WINTYPEA;
+
+typedef struct tagHH_WINTYPEW {
+    int          cbStruct;
+    BOOL         fUniCodeStrings;
+    LPCWSTR      pszType;
+    DWORD        fsValidMembers;
+    DWORD        fsWinProperties;
+    LPCWSTR      pszCaption;
+    DWORD        dwStyles;
+    DWORD        dwExStyles;
+    RECT         rcWindowPos;
+    int          nShowState;
+    HWND         hwndHelp;
+    HWND         hwndCaller;
+    PHH_INFOTYPE paInfoTypes;
+    HWND         hwndToolBar;
+    HWND         hwndNavigation;
+    HWND         hwndHTML;
+    int          iNavWidth;
+    RECT         rcHTML;
+    LPCWSTR      pszToc;
+    LPCWSTR      pszIndex;
+    LPCWSTR      pszFile;
+    LPCWSTR      pszHome;
+    DWORD        fsToolBarFlags;
+    BOOL         fNotExpanded;
+    int          curNavType;
+    int          tabpos;
+    int          idNotify;
+    BYTE         tabOrder[HH_MAX_TABS+1];
+    int          cHistory;
+    LPCWSTR      pszJump1;
+    LPCWSTR      pszJump2;
+    LPCWSTR      pszUrlJump1;
+    LPCWSTR      pszUrlJump2;
+    RECT         rcMinSize;
+    int          cbInfoTypes;
+    LPCWSTR      pszCustomTabs;
+} HH_WINTYPEW, *PHH_WINTYPEW;
+
+DECL_WINELIB_TYPE_AW(HH_WINTYPE)
+
+enum {
+    HHACT_TAB_CONTENTS,
+    HHACT_TAB_INDEX,
+    HHACT_TAB_SEARCH,
+    HHACT_TAB_HISTORY,
+    HHACT_TAB_FAVORITES,
+    HHACT_EXPAND,
+    HHACT_CONTRACT,
+    HHACT_BACK,
+    HHACT_FORWARD,
+    HHACT_STOP,
+    HHACT_REFRESH,
+    HHACT_HOME,
+    HHACT_SYNC,
+    HHACT_OPTIONS,
+    HHACT_PRINT,
+    HHACT_HIGHLIGHT,
+    HHACT_CUSTOMIZE,
+    HHACT_JUMP1,
+    HHACT_JUMP2,
+    HHACT_ZOOM,
+    HHACT_TOC_NEXT,
+    HHACT_TOC_PREV,
+    HHACT_NOTES,
+    HHACT_LAST_ENUM
+};
+
+typedef struct tagHH_NTRACKA {
+    NMHDR        hdr;
+    PCSTR        pszCurUrl;
+    int          idAction;
+    PHH_WINTYPEA phhWinType;
+} HH_NTRACKA;
+
+typedef struct tagHH_NTRACKW {
+    NMHDR        hdr;
+    PCSTR        pszCurUrl;
+    int          idAction;
+    PHH_WINTYPEW phhWinType;
+} HH_NTRACKW;
+
+DECL_WINELIB_TYPE_AW(HH_NTRACK)
+
+HWND WINAPI HtmlHelpA(HWND,LPCSTR,UINT,DWORD_PTR);
+HWND WINAPI HtmlHelpW(HWND,LPCWSTR,UINT,DWORD_PTR);
+#define HtmlHelp WINELIB_NAME_AW(HtmlHelp)
+
+#define ATOM_HTMLHELP_API_ANSI    (LPTSTR)14
+#define ATOM_HTMLHELP_API_UNICODE (LPTSTR)15
+
+typedef enum tagHH_GPROPID {
+    HH_GPROPID_SINGLETHREAD     = 1,
+    HH_GPROPID_TOOLBAR_MARGIN   = 2,
+    HH_GPROPID_UI_LANGUAGE      = 3,
+    HH_GPROPID_CURRENT_SUBSET   = 4,
+    HH_GPROPID_CONTENT_LANGUAGE = 5
+} HH_GPROPID;
+
+#ifdef __oaidl_h__
+
+typedef struct tagHH_GLOBAL_PROPERTY
+{
+    HH_GPROPID  id;
+    VARIANT     var;
+} HH_GLOBAL_PROPERTY ;
+
+#endif /* __oaidl_h__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HTMLHELP_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/http.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/http.h
new file mode 100644
index 0000000..4124e5e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/http.h
@@ -0,0 +1,75 @@
+/*
+ * HTTP Server API definitions
+ *
+ * Copyright (C) 2009 Andrey Turkin
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HTTP_H
+#define __WINE_HTTP_H
+
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _HTTPAPI_VERSION
+{
+    USHORT HttpApiMajorVersion;
+    USHORT HttpApiMinorVersion;
+} HTTPAPI_VERSION, *PHTTPAPI_VERSION;
+
+#define HTTPAPI_VERSION_1 {1,0}
+#define HTTPAPI_VERSION_2 {2,0}
+
+/* HttpInitialize and HttpTerminate flags */
+#define HTTP_INITIALIZE_SERVER 0x00000001
+#define HTTP_INITIALIZE_CONFIG 0x00000002
+
+typedef enum _HTTP_SERVICE_CONFIG_ID
+{
+    HttpServiceConfigIPListenList,
+    HttpServiceConfigSSLCertInfo,
+    HttpServiceConfigUrlAclInfo,
+    HttpServiceConfigTimeout,
+    HttpServiceConfigMax
+} HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID;
+
+ULONG WINAPI HttpInitialize(HTTPAPI_VERSION,ULONG,PVOID);
+ULONG WINAPI HttpTerminate(ULONG,PVOID);
+
+ULONG WINAPI HttpAddUrl(HANDLE,PCWSTR,PVOID);
+ULONG WINAPI HttpCreateHttpHandle(PHANDLE,ULONG);
+ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);
+ULONG WINAPI HttpQueryServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,PVOID,ULONG,PULONG,LPOVERLAPPED);
+ULONG WINAPI HttpSetServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_HTTP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl
new file mode 100644
index 0000000..d4d1ddd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2011 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "httprequestid.h"
+
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    uuid(662901fc-6951-4854-9eb2-d9a2570f2b2e),
+    helpstring("Microsoft WinHTTP Services, version 5.1"),
+    lcid(0x0000),
+    version(5.1)
+]
+library WinHttp {
+
+importlib ("stdole2.tlb");
+
+typedef [public] LONG   HTTPREQUEST_PROXY_SETTING;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DEFAULT    = 0x00000000;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PRECONFIG  = 0x00000000;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DIRECT     = 0x00000001;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PROXY      = 0x00000002;
+
+typedef [public] LONG   HTTPREQUEST_SETCREDENTIALS_FLAGS;
+const HTTPREQUEST_SETCREDENTIALS_FLAGS  HTTPREQUEST_SETCREDENTIALS_FOR_SERVER   = 0x00000000;
+const HTTPREQUEST_SETCREDENTIALS_FLAGS  HTTPREQUEST_SETCREDENTIALS_FOR_PROXY    = 0x00000001;
+
+typedef
+[uuid(12782009-fe90-4877-9730-e5e183669b19)]
+enum WinHttpRequestOption
+{
+    WinHttpRequestOption_UserAgentString,
+    WinHttpRequestOption_URL,
+    WinHttpRequestOption_URLCodePage,
+    WinHttpRequestOption_EscapePercentInURL,
+    WinHttpRequestOption_SslErrorIgnoreFlags,
+    WinHttpRequestOption_SelectCertificate,
+    WinHttpRequestOption_EnableRedirects,
+    WinHttpRequestOption_UrlEscapeDisable,
+    WinHttpRequestOption_UrlEscapeDisableQuery,
+    WinHttpRequestOption_SecureProtocols,
+    WinHttpRequestOption_EnableTracing,
+    WinHttpRequestOption_RevertImpersonationOverSsl,
+    WinHttpRequestOption_EnableHttpsToHttpRedirects,
+    WinHttpRequestOption_EnablePassportAuthentication,
+    WinHttpRequestOption_MaxAutomaticRedirects,
+    WinHttpRequestOption_MaxResponseHeaderSize,
+    WinHttpRequestOption_MaxResponseDrainSize,
+    WinHttpRequestOption_EnableHttp1_1,
+    WinHttpRequestOption_EnableCertificateRevocationCheck,
+    WinHttpRequestOption_RejectUserpwd
+} WinHttpRequestOption;
+
+typedef
+[uuid(9d8a6df8-13de-4b1f-a330-67c719d62514)]
+enum WinHttpRequestAutoLogonPolicy
+{
+    AutoLogonPolicy_Always,
+    AutoLogonPolicy_OnlyIfBypassProxy,
+    AutoLogonPolicy_Never
+} WinHttpRequestAutoLogonPolicy;
+
+[
+    object,
+    uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b),
+    odl,
+    dual,
+    oleautomation,
+    nonextensible,
+    pointer_default(unique)
+]
+interface IWinHttpRequest : IDispatch
+{
+    [id(DISPID_HTTPREQUEST_SETPROXY)]
+    HRESULT SetProxy(
+        [in] HTTPREQUEST_PROXY_SETTING proxy_setting,
+        [in, optional] VARIANT proxy_server,
+        [in, optional] VARIANT bypass_list);
+
+    [id(DISPID_HTTPREQUEST_SETCREDENTIALS)]
+    HRESULT SetCredentials(
+        [in] BSTR username,
+        [in] BSTR password,
+        [in] HTTPREQUEST_SETCREDENTIALS_FLAGS flags);
+
+    [id(DISPID_HTTPREQUEST_OPEN)]
+    HRESULT Open(
+        [in] BSTR method,
+        [in] BSTR url,
+        [in, optional] VARIANT async);
+
+    [id(DISPID_HTTPREQUEST_SETREQUESTHEADER)]
+    HRESULT SetRequestHeader(
+        [in] BSTR header,
+        [in] BSTR value);
+
+    [id(DISPID_HTTPREQUEST_GETRESPONSEHEADER)]
+    HRESULT GetResponseHeader(
+        [in] BSTR header,
+        [out, retval] BSTR *value);
+
+    [id(DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS)]
+    HRESULT GetAllResponseHeaders(
+        [out, retval] BSTR *headers);
+
+    [id(DISPID_HTTPREQUEST_SEND)]
+    HRESULT Send(
+        [in, optional] VARIANT body);
+
+    [propget, id(DISPID_HTTPREQUEST_STATUS)]
+    HRESULT Status(
+        [out, retval] LONG *status);
+
+    [propget, id(DISPID_HTTPREQUEST_STATUSTEXT)]
+    HRESULT StatusText(
+        [out, retval] BSTR *status);
+
+    [propget, id(DISPID_HTTPREQUEST_RESPONSETEXT)]
+    HRESULT ResponseText(
+        [out, retval] BSTR *body);
+
+    [propget, id(DISPID_HTTPREQUEST_RESPONSEBODY)]
+    HRESULT ResponseBody(
+        [out, retval] VARIANT *body);
+
+    [propget, id(DISPID_HTTPREQUEST_RESPONSESTREAM)]
+    HRESULT ResponseStream(
+        [out, retval] VARIANT *body);
+
+    [propget, id(DISPID_HTTPREQUEST_OPTION)]
+    HRESULT Option(
+        [in] WinHttpRequestOption option,
+        [out, retval] VARIANT *value);
+
+    [propput, id(DISPID_HTTPREQUEST_OPTION)]
+    HRESULT Option(
+        [in] WinHttpRequestOption option,
+        [in] VARIANT value);
+
+    [id(DISPID_HTTPREQUEST_WAITFORRESPONSE)]
+    HRESULT WaitForResponse(
+        [in, optional] VARIANT timeout,
+        [out, retval] VARIANT_BOOL *succeeded);
+
+    [id(DISPID_HTTPREQUEST_ABORT)]
+    HRESULT Abort();
+
+    [id(DISPID_HTTPREQUEST_SETTIMEOUTS)]
+    HRESULT SetTimeouts(
+        [in] LONG resolve_timeout,
+        [in] LONG connect_timeout,
+        [in] LONG send_timeout,
+        [in] LONG receive_timeout);
+
+    [id(DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE)]
+    HRESULT SetClientCertificate(
+        [in] BSTR certificate);
+
+    [id(DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY)]
+    HRESULT SetAutoLogonPolicy(
+        [in] WinHttpRequestAutoLogonPolicy policy);
+}
+[
+    helpstring("WinHttpRequest Component version 5.1"),
+    threading(apartment),
+    progid("WinHttp.WinHttpRequest.5.1"),
+    uuid(2087c2f4-2cef-4953-a8ab-66779b670495)
+]
+coclass WinHttpRequest { interface IWinHttpRequest; }
+
+} /* WinHttp */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h
new file mode 100644
index 0000000..95f20fc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2011 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HTTPREQUESTID_H
+#define __WINE_HTTPREQUESTID_H
+
+#define DISPID_HTTPREQUEST_BASE                     1
+#define DISPID_HTTPREQUEST_OPEN                     (DISPID_HTTPREQUEST_BASE)
+#define DISPID_HTTPREQUEST_SETREQUESTHEADER         (DISPID_HTTPREQUEST_BASE + 1)
+#define DISPID_HTTPREQUEST_GETRESPONSEHEADER        (DISPID_HTTPREQUEST_BASE + 2)
+#define DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS    (DISPID_HTTPREQUEST_BASE + 3)
+#define DISPID_HTTPREQUEST_SEND                     (DISPID_HTTPREQUEST_BASE + 4)
+#define DISPID_HTTPREQUEST_OPTION                   (DISPID_HTTPREQUEST_BASE + 5)
+#define DISPID_HTTPREQUEST_STATUS                   (DISPID_HTTPREQUEST_BASE + 6)
+#define DISPID_HTTPREQUEST_STATUSTEXT               (DISPID_HTTPREQUEST_BASE + 7)
+#define DISPID_HTTPREQUEST_RESPONSETEXT             (DISPID_HTTPREQUEST_BASE + 8)
+#define DISPID_HTTPREQUEST_RESPONSEBODY             (DISPID_HTTPREQUEST_BASE + 9)
+#define DISPID_HTTPREQUEST_RESPONSESTREAM           (DISPID_HTTPREQUEST_BASE + 10)
+#define DISPID_HTTPREQUEST_ABORT                    (DISPID_HTTPREQUEST_BASE + 11)
+#define DISPID_HTTPREQUEST_SETPROXY                 (DISPID_HTTPREQUEST_BASE + 12)
+#define DISPID_HTTPREQUEST_SETCREDENTIALS           (DISPID_HTTPREQUEST_BASE + 13)
+#define DISPID_HTTPREQUEST_WAITFORRESPONSE          (DISPID_HTTPREQUEST_BASE + 14)
+#define DISPID_HTTPREQUEST_SETTIMEOUTS              (DISPID_HTTPREQUEST_BASE + 15)
+#define DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE     (DISPID_HTTPREQUEST_BASE + 16)
+#define DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY       (DISPID_HTTPREQUEST_BASE + 17)
+
+#endif /* __WINE_HTTPREQUESTID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h
new file mode 100644
index 0000000..7370d02
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_I_CRYPTASN1TLS_H
+#define __WINE_I_CRYPTASN1TLS_H
+
+typedef void *ASN1decoding_t;
+typedef void *ASN1encoding_t;
+typedef void *ASN1module_t;
+typedef DWORD HCRYPTASN1MODULE;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ASN1decoding_t WINAPI I_CryptGetAsn1Decoder(HCRYPTASN1MODULE);
+ASN1encoding_t WINAPI I_CryptGetAsn1Encoder(HCRYPTASN1MODULE);
+BOOL        WINAPI I_CryptInstallAsn1Module(ASN1module_t, DWORD, void*);
+BOOL        WINAPI I_CryptUninstallAsn1Module(HCRYPTASN1MODULE);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_I_CRYPTASN1TLS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl
new file mode 100644
index 0000000..7f47825
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl
@@ -0,0 +1,788 @@
+/*
+ * Copyright 2005 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+typedef enum
+{
+    ADS_RIGHT_DS_CREATE_CHILD         = 0x00000001,
+    ADS_RIGHT_DS_DELETE_CHILD         = 0x00000002,
+    ADS_RIGHT_ACTRL_DS_LIST           = 0x00000004,
+    ADS_RIGHT_DS_SELF                 = 0x00000008,
+    ADS_RIGHT_DS_READ_PROP            = 0x00000010,
+    ADS_RIGHT_DS_WRITE_PROP           = 0x00000020,
+    ADS_RIGHT_DS_DELETE_TREE          = 0x00000040,
+    ADS_RIGHT_DS_LIST_OBJECT          = 0x00000080,
+    ADS_RIGHT_DS_CONTROL_ACCESS       = 0x00000100,
+
+    ADS_RIGHT_DELETE                  = 0x00010000,
+    ADS_RIGHT_READ_CONTROL            = 0x00020000,
+    ADS_RIGHT_WRITE_DAC               = 0x00040000,
+    ADS_RIGHT_WRITE_OWNER             = 0x00080000,
+    ADS_RIGHT_SYNCHRONIZE             = 0x00100000,
+    ADS_RIGHT_ACCESS_SYSTEM_SECURITY  = 0x00200000,
+
+    ADS_RIGHT_GENERIC_ALL             = 0x10000000,
+    ADS_RIGHT_GENERIC_EXECUTE         = 0x20000000,
+    ADS_RIGHT_GENERIC_WRITE           = 0x40000000,
+    ADS_RIGHT_GENERIC_READ            = 0x80000000
+} ADS_RIGHTS_ENUM;
+
+typedef enum
+{
+    ADS_SECURE_AUTHENTICATION     = 0x1,
+    ADS_USE_ENCRYPTION            = 0x2,
+    ADS_USE_SSL                   = 0x2,
+    ADS_READONLY_SERVER           = 0x4,
+    ADS_PROMPT_CREDENTIALS        = 0x8,
+    ADS_NO_AUTHENTICATION         = 0x10,
+    ADS_FAST_BIND                 = 0x20,
+    ADS_USE_SIGNING               = 0x40,
+    ADS_USE_SEALING               = 0x80,
+    ADS_USE_DELEGATION            = 0x100,
+    ADS_SERVER_BIND               = 0x200,
+    ADS_NO_REFERRAL_CHASING       = 0x400,
+    ADS_AUTH_RESERVED             = 0x80000000
+} ADS_AUTHENTICATION_ENUM;
+
+typedef enum
+{
+    ADS_SEARCHPREF_ASYNCHRONOUS,
+    ADS_SEARCHPREF_DEREF_ALIASES,
+    ADS_SEARCHPREF_SIZE_LIMIT,
+    ADS_SEARCHPREF_TIME_LIMIT,
+    ADS_SEARCHPREF_ATTRIBTYPES_ONLY,
+    ADS_SEARCHPREF_SEARCH_SCOPE,
+    ADS_SEARCHPREF_TIMEOUT,
+    ADS_SEARCHPREF_PAGESIZE,
+    ADS_SEARCHPREF_PAGED_TIME_LIMIT,
+    ADS_SEARCHPREF_CHASE_REFERRALS,
+    ADS_SEARCHPREF_SORT_ON,
+    ADS_SEARCHPREF_CACHE_RESULTS,
+    ADS_SEARCHPREF_DIRSYNC,
+    ADS_SEARCHPREF_TOMBSTONE,
+    ADS_SEARCHPREF_VLV,
+    ADS_SEARCHPREF_ATTRIBUTE_QUERY,
+    ADS_SEARCHPREF_SECURITY_MASK,
+    ADS_SEARCHPREF_DIRSYNC_FLAG,
+    ADS_SEARCHPREF_EXTENDED_DN
+} ADS_SEARCHPREF_ENUM;
+
+typedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO;
+
+typedef enum
+{
+    ADS_STATUS_S_OK,
+    ADS_STATUS_INVALID_SEARCHPREF,
+    ADS_STATUS_INVALID_SEARCHPREFVALUE
+} ADS_STATUSENUM;
+
+typedef enum
+{
+    ADSTYPE_INVALID,
+    ADSTYPE_DN_STRING,
+    ADSTYPE_CASE_EXACT_STRING,
+    ADSTYPE_CASE_IGNORE_STRING,
+    ADSTYPE_PRINTABLE_STRING,
+    ADSTYPE_NUMERIC_STRING,
+    ADSTYPE_BOOLEAN,
+    ADSTYPE_INTEGER,
+    ADSTYPE_OCTET_STRING,
+    ADSTYPE_UTC_TIME,
+    ADSTYPE_LARGE_INTEGER,
+    ADSTYPE_PROV_SPECIFIC,
+    ADSTYPE_OBJECT_CLASS,
+    ADSTYPE_CASEIGNORE_LIST,
+    ADSTYPE_OCTET_LIST,
+    ADSTYPE_PATH,
+    ADSTYPE_POSTALADDRESS,
+    ADSTYPE_TIMESTAMP,
+    ADSTYPE_BACKLINK,
+    ADSTYPE_TYPEDNAME,
+    ADSTYPE_HOLD,
+    ADSTYPE_NETADDRESS,
+    ADSTYPE_REPLICAPOINTER,
+    ADSTYPE_FAXNUMBER,
+    ADSTYPE_EMAIL,
+    ADSTYPE_NT_SECURITY_DESCRIPTOR,
+    ADSTYPE_UNKNOWN,
+    ADSTYPE_DN_WITH_BINARY,
+    ADSTYPE_DN_WITH_STRING
+} ADSTYPEENUM;
+
+typedef enum
+{
+    ADS_PASSWORD_ENCODE_REQUIRE_SSL,
+    ADS_PASSWORD_ENCODE_CLEAR
+} ADS_PASSWORD_ENCODING_ENUM;
+
+typedef struct _ADS_CASEIGNORE_LIST
+{
+    struct _ADS_CASEIGNORE_LIST *Next;
+    LPWSTR String;
+} ADS_CASEIGNORE_LIST;
+
+typedef struct _ADS_OCTET_LIST
+{
+    struct _ADS_OCTET_LIST *Next;
+    DWORD Length;
+    BYTE *Data;
+} ADS_OCTET_LIST;
+
+typedef struct
+{
+    DWORD Type;
+    LPWSTR VolumeName;
+    LPWSTR Path;
+} ADS_PATH, *PADS_PATH;
+
+typedef struct
+{
+    DWORD WholeSeconds;
+    DWORD EventID;
+} ADS_TIMESTAMP;
+
+
+typedef ADSTYPEENUM ADSTYPE;
+typedef LPWSTR ADS_DN_STRING;
+typedef LPWSTR *PADS_DN_STRING;
+typedef LPWSTR ADS_CASE_EXACT_STRING;
+typedef LPWSTR *PADS_CASE_EXACT_STRING;
+typedef LPWSTR ADS_CASE_IGNORE_STRING;
+typedef LPWSTR *PADS_CASE_IGNORE_STRING;
+typedef LPWSTR ADS_PRINTABLE_STRING;
+typedef LPWSTR *PADS_PRINTABLE_STRING;
+typedef LPWSTR ADS_NUMERIC_STRING;
+typedef LPWSTR *PADS_NUMERIC_STRING;
+typedef DWORD ADS_BOOLEAN;
+typedef DWORD *LPNDS_BOOLEAN;
+typedef DWORD ADS_INTEGER;
+typedef DWORD *PADS_INTEGER;
+typedef SYSTEMTIME ADS_UTC_TIME;
+typedef SYSTEMTIME *PADS_UTC_TIME;
+typedef LARGE_INTEGER ADS_LARGE_INTEGER;
+typedef LARGE_INTEGER *PADS_LARGE_INTEGER;
+typedef LPWSTR ADS_OBJECT_CLASS;
+typedef LPWSTR *PADS_OBJECT_CLASS;
+typedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST;
+typedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST;
+typedef ADS_STATUSENUM ADS_STATUS;
+typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF;
+typedef HANDLE ADS_SEARCH_HANDLE;
+typedef HANDLE *PADS_SEARCH_HANDLE;
+
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpValue;
+} ADS_OCTET_STRING;
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpValue;
+} ADS_PROV_SPECIFIC;
+
+typedef struct
+{
+    LPWSTR PostalAddress[ 6 ];
+} ADS_POSTALADDRESS, *PADS_POSTALADDRESS;
+
+typedef struct
+{
+    LPWSTR ObjectName;
+    DWORD Level;
+    DWORD Interval;
+} ADS_TYPEDNAME, *PADS_TYPEDNAME;
+
+typedef struct
+{
+    DWORD RemoteID;
+    LPWSTR ObjectName;
+} ADS_BACKLINK;
+
+typedef struct
+{
+    LPWSTR ObjectName;
+    DWORD Amount;
+} ADS_HOLD;
+
+typedef struct
+{
+    DWORD AddressType;
+    DWORD AddressLength;
+    BYTE *Address;
+} ADS_NETADDRESS, *PADS_NETADDRESS;
+
+typedef struct
+{
+    LPWSTR ServerName;
+    DWORD ReplicaType;
+    DWORD ReplicaNumber;
+    DWORD Count;
+    PADS_NETADDRESS ReplicaAddressHints;
+} ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER;
+
+typedef struct
+{
+    LPWSTR TelephoneNumber;
+    DWORD NumberOfBits;
+    BYTE *Parameters;
+} ADS_FAXNUMBER, *PADS_FAXNUMBER;
+
+
+typedef struct
+{
+    LPWSTR Address;
+    DWORD Type;
+} ADS_EMAIL, *PADS_EMAIL;
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpValue;
+} ADS_NT_SECURITY_DESCRIPTOR;
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpBinaryValue;
+    LPWSTR pszDNString;
+} ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY;
+
+typedef struct
+{
+    LPWSTR pszStringValue;
+    LPWSTR pszDNString;
+} ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING;
+
+typedef struct _adsvalue
+{
+    ADSTYPE dwType;
+    union
+    {
+        ADS_DN_STRING DNString;
+        ADS_CASE_EXACT_STRING CaseExactString;
+        ADS_CASE_IGNORE_STRING CaseIgnoreString;
+        ADS_PRINTABLE_STRING PrintableString;
+        ADS_NUMERIC_STRING NumericString;
+        ADS_BOOLEAN Boolean;
+        ADS_INTEGER Integer;
+        ADS_OCTET_STRING OctetString;
+        ADS_UTC_TIME UTCTime;
+        ADS_LARGE_INTEGER LargeInteger;
+        ADS_OBJECT_CLASS ClassName;
+        ADS_PROV_SPECIFIC ProviderSpecific;
+        PADS_CASEIGNORE_LIST pCaseIgnoreList;
+        PADS_OCTET_LIST pOctetList;
+        PADS_PATH pPath;
+        PADS_POSTALADDRESS pPostalAddress;
+        ADS_TIMESTAMP Timestamp;
+        ADS_BACKLINK BackLink;
+        PADS_TYPEDNAME pTypedName;
+        ADS_HOLD Hold;
+        PADS_NETADDRESS pNetAddress;
+        PADS_REPLICAPOINTER pReplicaPointer;
+        PADS_FAXNUMBER pFaxNumber;
+        ADS_EMAIL Email;
+        ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor;
+        PADS_DN_WITH_BINARY pDNWithBinary;
+        PADS_DN_WITH_STRING pDNWithString;
+    };
+} ADSVALUE, *PADSVALUE;
+
+typedef struct ads_searchpref_info
+{
+    ADS_SEARCHPREF dwSearchPref;
+    ADSVALUE vValue;
+    ADS_STATUS dwStatus;
+} ADS_SEARCHPREF_INFO;
+
+typedef struct ads_search_column
+{
+    LPWSTR pszAttrName;
+    ADSTYPE dwADsType;
+    PADSVALUE pADsValues;
+    DWORD dwNumValues;
+    HANDLE hReserved;
+} ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN;
+
+/*****************************************************************************
+ *    IADsContainer interface
+ */
+[
+    object,
+    uuid(001677d0-fd16-11ce-abc4-02608c9e7553)
+]
+interface IADsContainer: IDispatch
+{
+    [propget] HRESULT Count(
+        [out, retval] long *retval);
+    [propget, restricted] HRESULT _NewEnum(
+        [out, retval] IUnknown **retval);
+    [propget] HRESULT Filter(
+        [out, retval] VARIANT *pvFilter);
+    [propput] HRESULT Filter(
+        [in] VARIANT vFilter);
+    [propget] HRESULT Hints(
+        [out, retval] VARIANT *pvHints);
+    [propput] HRESULT Hints(
+        [in] VARIANT vHints);
+    HRESULT GetObject(
+        [in] BSTR bstrClassName,
+        [in] BSTR bstrRelativeName,
+        [out, retval] IDispatch **ppObject);
+    HRESULT Create(
+        [in] BSTR bstrClassName,
+        [in] BSTR bstrRelativeName,
+        [out, retval] IDispatch **ppObject);
+    HRESULT Delete(
+        [in] BSTR bstrClassName,
+        [in] BSTR bstrRelativeName);
+    HRESULT CopyHere(
+        [in] BSTR bstrSourceName,
+        [in] BSTR bstrNewName,
+        [out, retval] IDispatch **ppObject);
+    HRESULT MoveHere(
+        [in] BSTR bstrSourceName,
+        [in] BSTR bstrNewName,
+        [out, retval] IDispatch **ppObject);
+}
+
+/*****************************************************************************
+ *    IADs interface
+ */
+[
+    odl,
+    uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553),
+    dual,
+    oleautomation
+]
+interface IADs : IDispatch
+{
+    [id(0x00000002), propget]
+    HRESULT Name([out, retval] BSTR* retval);
+
+    [id(0x00000003), propget]
+    HRESULT Class([out, retval] BSTR* retval);
+
+    [id(0x00000004), propget]
+    HRESULT GUID([out, retval] BSTR* retval);
+
+    [id(0x00000005), propget]
+    HRESULT ADsPath([out, retval] BSTR* retval);
+
+    [id(0x00000006), propget]
+    HRESULT Parent([out, retval] BSTR* retval);
+
+    [id(0x00000007), propget]
+    HRESULT Schema([out, retval] BSTR* retval);
+
+    [id(0x00000008)]
+    HRESULT GetInfo();
+
+    [id(0x00000009)]
+    HRESULT SetInfo();
+
+    [id(0x0000000a)]
+    HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
+
+    [id(0x0000000b)]
+    HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp);
+
+    [id(0x0000000c)]
+    HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
+
+    [id(0x0000000d)]
+    HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp);
+
+    [id(0x0000000e)]
+    HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved);
+};
+
+/*****************************************************************************
+ *    IADsMembers interface
+ */
+[
+    odl,
+    uuid(451A0030-72EC-11CF-B03B-00AA006E0975),
+    dual,
+    oleautomation
+]
+interface IADsMembers : IDispatch
+{
+    [id(0x00000002), propget]
+    HRESULT Count([out, retval] long* plCount);
+
+    [id(0xfffffffc), propget]
+    HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator);
+
+    [id(0x00000003), propget]
+    HRESULT Filter([out, retval] VARIANT* pvFilter);
+
+    [id(0x00000003), propput]
+    HRESULT Filter([in] VARIANT pvFilter);
+};
+
+/*****************************************************************************
+ *    IADsGroup interface
+ */
+[
+    odl,
+    uuid(27636B00-410F-11CF-B1FF-02608C9E7553),
+    dual,
+    oleautomation
+]
+interface IADsGroup : IADs {
+    [id(0x0000000f), propget]
+    HRESULT Description([out, retval] BSTR* retval);
+
+    [id(0x0000000f), propput]
+    HRESULT Description([in] BSTR retval);
+
+    [id(0x00000010)]
+    HRESULT Members([out, retval] IADsMembers** ppMembers);
+
+    [id(0x00000011)]
+    HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember);
+
+    [id(0x00000012)]
+    HRESULT Add([in] BSTR bstrNewItem);
+
+    [id(0x00000013)]
+    HRESULT Remove([in] BSTR bstrItemToBeRemoved);
+};
+
+/*****************************************************************************
+ *    IADsUser interface
+ */
+[
+    odl,
+    uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553),
+    dual,
+    oleautomation
+]
+interface IADsUser : IADs
+{
+    [id(0x00000035), propget]
+    HRESULT BadLoginAddress([out, retval] BSTR* retval);
+
+    [id(0x00000036), propget]
+    HRESULT BadLoginCount([out, retval] long* retval);
+
+    [id(0x00000038), propget]
+    HRESULT LastLogin([out, retval] DATE* retval);
+
+    [id(0x00000039), propget]
+    HRESULT LastLogoff([out, retval] DATE* retval);
+
+    [id(0x0000003a), propget]
+    HRESULT LastFailedLogin([out, retval] DATE* retval);
+
+    [id(0x0000003b), propget]
+    HRESULT PasswordLastChanged([out, retval] DATE* retval);
+
+    [id(0x0000000f), propget]
+    HRESULT Description([out, retval] BSTR* retval);
+
+    [id(0x0000000f), propput]
+    HRESULT Description([in] BSTR retval);
+
+    [id(0x00000013), propget]
+    HRESULT Division([out, retval] BSTR* retval);
+
+    [id(0x00000013), propput]
+    HRESULT Division([in] BSTR retval);
+
+    [id(0x0000007a), propget]
+    HRESULT Department([out, retval] BSTR* retval);
+
+    [id(0x0000007a), propput]
+    HRESULT Department([in] BSTR retval);
+
+    [id(0x00000014), propget]
+    HRESULT EmployeeID([out, retval] BSTR* retval);
+
+    [id(0x00000014), propput]
+    HRESULT EmployeeID([in] BSTR retval);
+
+    [id(0x00000017), propget]
+    HRESULT FullName([out, retval] BSTR* retval);
+
+    [id(0x00000017), propput]
+    HRESULT FullName([in] BSTR retval);
+
+    [id(0x00000016), propget]
+    HRESULT FirstName([out, retval] BSTR* retval);
+
+    [id(0x00000016), propput]
+    HRESULT FirstName([in] BSTR retval);
+
+    [id(0x00000019), propget]
+    HRESULT LastName([out, retval] BSTR* retval);
+
+    [id(0x00000019), propput]
+    HRESULT LastName([in] BSTR retval);
+
+    [id(0x0000001b), propget]
+    HRESULT OtherName([out, retval] BSTR* retval);
+
+    [id(0x0000001b), propput]
+    HRESULT OtherName([in] BSTR retval);
+
+    [id(0x00000072), propget]
+    HRESULT NamePrefix([out, retval] BSTR* retval);
+
+    [id(0x00000072), propput]
+    HRESULT NamePrefix([in] BSTR retval);
+
+    [id(0x00000073), propget]
+    HRESULT NameSuffix([out, retval] BSTR* retval);
+
+    [id(0x00000073), propput]
+    HRESULT NameSuffix([in] BSTR retval);
+
+    [id(0x00000024), propget]
+    HRESULT Title([out, retval] BSTR* retval);
+
+    [id(0x00000024), propput]
+    HRESULT Title([in] BSTR retval);
+
+    [id(0x0000001a), propget]
+    HRESULT Manager([out, retval] BSTR* retval);
+
+    [id(0x0000001a), propput]
+    HRESULT Manager([in] BSTR retval);
+
+    [id(0x00000020), propget]
+    HRESULT TelephoneHome([out, retval] VARIANT* retval);
+
+    [id(0x00000020), propput]
+    HRESULT TelephoneHome([in] VARIANT retval);
+
+    [id(0x00000021), propget]
+    HRESULT TelephoneMobile([out, retval] VARIANT* retval);
+
+    [id(0x00000021), propput]
+    HRESULT TelephoneMobile([in] VARIANT retval);
+
+    [id(0x00000022), propget]
+    HRESULT TelephoneNumber([out, retval] VARIANT* retval);
+
+    [id(0x00000022), propput]
+    HRESULT TelephoneNumber([in] VARIANT retval);
+
+    [id(0x00000011), propget]
+    HRESULT TelephonePager([out, retval] VARIANT* retval);
+
+    [id(0x00000011), propput]
+    HRESULT TelephonePager([in] VARIANT retval);
+
+    [id(0x00000010), propget]
+    HRESULT FaxNumber([out, retval] VARIANT* retval);
+
+    [id(0x00000010), propput]
+    HRESULT FaxNumber([in] VARIANT retval);
+
+    [id(0x0000001c), propget]
+    HRESULT OfficeLocations([out, retval] VARIANT* retval);
+
+    [id(0x0000001c), propput]
+    HRESULT OfficeLocations([in] VARIANT retval);
+
+    [id(0x0000001e), propget]
+    HRESULT PostalAddresses([out, retval] VARIANT* retval);
+
+    [id(0x0000001e), propput]
+    HRESULT PostalAddresses([in] VARIANT retval);
+
+    [id(0x0000001f), propget]
+    HRESULT PostalCodes([out, retval] VARIANT* retval);
+
+    [id(0x0000001f), propput]
+    HRESULT PostalCodes([in] VARIANT retval);
+
+    [id(0x00000075), propget]
+    HRESULT SeeAlso([out, retval] VARIANT* retval);
+
+    [id(0x00000075), propput]
+    HRESULT SeeAlso([in] VARIANT retval);
+
+    [id(0x00000025), propget]
+    HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x00000025), propput]
+    HRESULT AccountDisabled([in] VARIANT_BOOL retval);
+
+    [id(0x00000026), propget]
+    HRESULT AccountExpirationDate([out, retval] DATE* retval);
+
+    [id(0x00000026), propput]
+    HRESULT AccountExpirationDate([in] DATE retval);
+
+    [id(0x00000029), propget]
+    HRESULT GraceLoginsAllowed([out, retval] long* retval);
+
+    [id(0x00000029), propput]
+    HRESULT GraceLoginsAllowed([in] long retval);
+
+    [id(0x0000002a), propget]
+    HRESULT GraceLoginsRemaining([out, retval] long* retval);
+
+    [id(0x0000002a), propput]
+    HRESULT GraceLoginsRemaining([in] long retval);
+
+    [id(0x0000002b), propget]
+    HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x0000002b), propput]
+    HRESULT IsAccountLocked([in] VARIANT_BOOL retval);
+
+    [id(0x0000002d), propget]
+    HRESULT LoginHours([out, retval] VARIANT* retval);
+
+    [id(0x0000002d), propput]
+    HRESULT LoginHours([in] VARIANT retval);
+
+    [id(0x0000002e), propget]
+    HRESULT LoginWorkstations([out, retval] VARIANT* retval);
+
+    [id(0x0000002e), propput]
+    HRESULT LoginWorkstations([in] VARIANT retval);
+
+    [id(0x0000002f), propget]
+    HRESULT MaxLogins([out, retval] long* retval);
+
+    [id(0x0000002f), propput]
+    HRESULT MaxLogins([in] long retval);
+
+    [id(0x00000030), propget]
+    HRESULT MaxStorage([out, retval] long* retval);
+
+    [id(0x00000030), propput]
+    HRESULT MaxStorage([in] long retval);
+
+    [id(0x00000031), propget]
+    HRESULT PasswordExpirationDate([out, retval] DATE* retval);
+
+    [id(0x00000031), propput]
+    HRESULT PasswordExpirationDate([in] DATE retval);
+
+    [id(0x00000032), propget]
+    HRESULT PasswordMinimumLength([out, retval] long* retval);
+
+    [id(0x00000032), propput]
+    HRESULT PasswordMinimumLength([in] long retval);
+
+    [id(0x00000033), propget]
+    HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x00000033), propput]
+    HRESULT PasswordRequired([in] VARIANT_BOOL retval);
+
+    [id(0x00000034), propget]
+    HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x00000034), propput]
+    HRESULT RequireUniquePassword([in] VARIANT_BOOL retval);
+
+    [id(0x0000003c), propget]
+    HRESULT EmailAddress([out, retval] BSTR* retval);
+
+    [id(0x0000003c), propput]
+    HRESULT EmailAddress([in] BSTR retval);
+
+    [id(0x0000003d), propget]
+    HRESULT HomeDirectory([out, retval] BSTR* retval);
+
+    [id(0x0000003d), propput]
+    HRESULT HomeDirectory([in] BSTR retval);
+
+    [id(0x0000003e), propget]
+    HRESULT Languages([out, retval] VARIANT* retval);
+
+    [id(0x0000003e), propput]
+    HRESULT Languages([in] VARIANT retval);
+
+    [id(0x0000003f), propget]
+    HRESULT Profile([out, retval] BSTR* retval);
+
+    [id(0x0000003f), propput]
+    HRESULT Profile([in] BSTR retval);
+
+    [id(0x00000040), propget]
+    HRESULT LoginScript([out, retval] BSTR* retval);
+
+    [id(0x00000040), propput]
+    HRESULT LoginScript([in] BSTR retval);
+
+    [id(0x00000041), propget]
+    HRESULT Picture([out, retval] VARIANT* retval);
+
+    [id(0x00000041), propput]
+    HRESULT Picture([in] VARIANT retval);
+
+    [id(0x00000078), propget]
+    HRESULT HomePage([out, retval] BSTR* retval);
+
+    [id(0x00000078), propput]
+    HRESULT HomePage([in] BSTR retval);
+
+    [id(0x00000042)]
+    HRESULT Groups([out, retval] IADsMembers** ppGroups);
+
+    [id(0x00000043)]
+    HRESULT SetPassword([in] BSTR NewPassword);
+
+    [id(0x00000044)]
+    HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword);
+};
+
+/*****************************************************************************
+ *    IDirectorySearch interface
+ */
+[
+    odl,
+    local,
+    uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8)
+]
+interface IDirectorySearch : IUnknown
+{
+    HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs);
+    HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames,
+                    [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult);
+    HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult);
+    HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult);
+    HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult);
+    HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult);
+    HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName);
+    HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName,
+                    [out] PADS_SEARCH_COLUMN pSearchColumn);
+    HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn);
+    HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl
new file mode 100644
index 0000000..8a6c855
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl
@@ -0,0 +1,78 @@
+/*
+ * Types for the ICF api
+ *
+ * Copyright 2007 Jeff Latimer
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+typedef enum NET_FW_PROFILE_TYPE_
+{
+    NET_FW_PROFILE_DOMAIN,
+    NET_FW_PROFILE_STANDARD,
+    NET_FW_PROFILE_CURRENT,
+    NET_FW_PROFILE_TYPE_MAX
+}   NET_FW_PROFILE_TYPE;
+
+typedef enum NET_FW_IP_VERSION_
+{
+    NET_FW_IP_VERSION_V4,
+    NET_FW_IP_VERSION_V6,
+    NET_FW_IP_VERSION_ANY,
+    NET_FW_IP_VERSION_MAX
+}   NET_FW_IP_VERSION;
+
+typedef enum NET_FW_POLICY_TYPE_
+{
+    NET_FW_POLICY_GROUP,
+    NET_FW_POLICY_LOCAL,
+    NET_FW_POLICY_EFFECTIVE,
+    NET_FW_POLICY_TYPE_MAX
+}   NET_FW_POLICY_TYPE;
+
+typedef enum NET_FW_SCOPE_
+{
+    NET_FW_SCOPE_ALL,
+    NET_FW_SCOPE_LOCAL_SUBNET,
+    NET_FW_SCOPE_CUSTOM,
+    NET_FW_SCOPE_MAX
+}   NET_FW_SCOPE;
+
+typedef enum NET_FW_SERVICE_TYPE_
+{
+    NET_FW_SERVICE_FILE_AND_PRINT,
+    NET_FW_SERVICE_UPNP,
+    NET_FW_SERVICE_REMOTE_DESKTOP,
+    NET_FW_SERVICE_NONE,
+    NET_FW_SERVICE_TYPE_MAX
+}   NET_FW_SERVICE_TYPE;
+
+typedef enum NET_FW_IP_PROTOCOL_
+{
+    NET_FW_IP_PROTOCOL_TCP =  6,
+    NET_FW_IP_PROTOCOL_UDP = 17
+}   NET_FW_IP_PROTOCOL;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h
new file mode 100644
index 0000000..d50c615
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h
@@ -0,0 +1,445 @@
+/*
+ * Copyright 2004 (C) Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ICM_H
+#define __WINE_ICM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef HANDLE HPROFILE;
+typedef HPROFILE *PHPROFILE;
+typedef HANDLE HTRANSFORM;
+
+typedef DWORD TAGTYPE, *PTAGTYPE, *LPTAGTYPE;
+
+typedef char COLOR_NAME[32];
+typedef COLOR_NAME *PCOLOR_NAME, *LPCOLOR_NAME;
+
+typedef struct tagNAMED_PROFILE_INFO
+{
+    DWORD       dwFlags;
+    DWORD       dwCount;
+    DWORD       dwCountDevCoordinates;
+    COLOR_NAME  szPrefix;
+    COLOR_NAME  szSuffix;
+} NAMED_PROFILE_INFO, *PNAMED_PROFILE_INFO, *LPNAMED_PROFILE_INFO;
+
+#define MAX_COLOR_CHANNELS  8
+
+struct GRAYCOLOR
+{
+    WORD    gray;
+};
+
+struct RGBCOLOR
+{
+    WORD    red;
+    WORD    green;
+    WORD    blue;
+};
+
+struct CMYKCOLOR
+{
+    WORD    cyan;
+    WORD    magenta;
+    WORD    yellow;
+    WORD    black;
+};
+
+struct XYZCOLOR
+{
+    WORD    X;
+    WORD    Y;
+    WORD    Z;
+};
+
+struct YxyCOLOR
+{
+    WORD    Y;
+    WORD    x;
+    WORD    y;
+};
+
+struct LabCOLOR
+{
+    WORD    L;
+    WORD    a;
+    WORD    b;
+};
+
+struct GENERIC3CHANNEL
+{
+    WORD    ch1;
+    WORD    ch2;
+    WORD    ch3;
+};
+
+struct NAMEDCOLOR
+{
+    DWORD   dwIndex;
+};
+
+struct HiFiCOLOR
+{
+    BYTE    channel[MAX_COLOR_CHANNELS];
+};
+
+typedef union tagCOLOR
+{
+    struct GRAYCOLOR        gray;
+    struct RGBCOLOR         rgb;
+    struct CMYKCOLOR        cmyk;
+    struct XYZCOLOR         XYZ;
+    struct YxyCOLOR         Yxy;
+    struct LabCOLOR         Lab;
+    struct GENERIC3CHANNEL  gen3ch;
+    struct NAMEDCOLOR       named;
+    struct HiFiCOLOR        hifi;
+    struct
+    {
+        DWORD reserved1;
+        VOID *reserved2;
+    } DUMMYSTRUCTNAME;
+} COLOR, *PCOLOR, *LPCOLOR;
+
+typedef enum
+{
+    COLOR_GRAY  = 1,
+    COLOR_RGB,
+    COLOR_XYZ,
+    COLOR_Yxy,
+    COLOR_Lab,
+    COLOR_3_CHANNEL,
+    COLOR_CMYK,
+    COLOR_5_CHANNEL,
+    COLOR_6_CHANNEL,
+    COLOR_7_CHANNEL,
+    COLOR_8_CHANNEL,
+    COLOR_NAMED,
+} COLORTYPE, *PCOLORTYPE, *LPCOLORTYPE;
+
+typedef enum
+{
+    BM_x555RGB     = 0x00,
+    BM_565RGB      = 0x01,
+    BM_RGBTRIPLETS = 0x02,
+    BM_BGRTRIPLETS = 0x04,
+    BM_xRGBQUADS   = 0x08,
+    BM_10b_RGB     = 0x09,
+    BM_16b_RGB     = 0x0a,
+    BM_xBGRQUADS   = 0x10,
+    BM_CMYKQUADS   = 0x20,
+    BM_x555XYZ     = 0x101,
+    BM_x555Yxz,
+    BM_x555Lab,
+    BM_x555G3CH,
+    BM_XYZTRIPLETS = 0x201,
+    BM_YxyTRIPLETS,
+    BM_LabTRIPLETS,
+    BM_G3CHTRIPLETS,
+    BM_5CHANNEL,
+    BM_6CHANNEL,
+    BM_7CHANNEL,
+    BM_8CHANNEL,
+    BM_GRAY,
+    BM_xXYZQUADS   = 0x301,
+    BM_xYxyQUADS,
+    BM_xLabQUADS,
+    BM_xG3CHQUADS,
+    BM_KYMCQUADS,
+    BM_10b_XYZ     = 0x401,
+    BM_10b_Yxy,
+    BM_10b_Lab,
+    BM_10b_G3CH,
+    BM_NAMED_INDEX,
+    BM_16b_XYZ     = 0x501,
+    BM_16b_Yxy,
+    BM_16b_Lab,
+    BM_16b_G3CH,
+    BM_16b_GRAY,
+} BMFORMAT, *PBMFORMAT, *LPBMFORMAT;
+
+typedef BOOL (CALLBACK *PBMCALLBACKFN)(ULONG,ULONG,LPARAM);
+typedef PBMCALLBACKFN LPPBMCALLBACKFN;
+
+#define INTENT_PERCEPTUAL               0
+#define INTENT_RELATIVE_COLORIMETRIC    1
+#define INTENT_SATURATION               2
+#define INTENT_ABSOLUTE_COLORIMETRIC    3
+
+typedef struct tagPROFILEHEADER
+{
+    DWORD phSize;
+    DWORD phCMMType;
+    DWORD phVersion;
+    DWORD phClass;
+    DWORD phDataColorSpace;
+    DWORD phConnectionSpace;
+    DWORD phDateTime[3];
+    DWORD phSignature;
+    DWORD phPlatform;
+    DWORD phProfileFlags;
+    DWORD phManufacturer;
+    DWORD phModel;
+    DWORD phAttributes[2];
+    DWORD phRenderingIntent;
+    CIEXYZ phIlluminant;
+    DWORD phCreator;
+    BYTE phReserved[44];
+} PROFILEHEADER, *PPROFILEHEADER, *LPPROFILEHEADER;
+
+typedef struct tagPROFILE
+{
+    DWORD dwType;
+    PVOID pProfileData;
+    DWORD cbDataSize;
+} PROFILE, *PPROFILE, *LPPROFILE;
+
+#define ENUM_TYPE_VERSION   0x0300
+
+typedef struct tagENUMTYPEA
+{
+    DWORD   dwSize;
+    DWORD   dwVersion;
+    DWORD   dwFields;
+    PCSTR   pDeviceName;
+    DWORD   dwMediaType;
+    DWORD   dwDitheringMode;
+    DWORD   dwResolution[2];
+    DWORD   dwCMMType;
+    DWORD   dwClass;
+    DWORD   dwDataColorSpace;
+    DWORD   dwConnectionSpace;
+    DWORD   dwSignature;
+    DWORD   dwPlatform;
+    DWORD   dwProfileFlags;
+    DWORD   dwManufacturer;
+    DWORD   dwModel;
+    DWORD   dwAttributes[2];
+    DWORD   dwRenderingIntent;
+    DWORD   dwCreator;
+    DWORD   dwDeviceClass;
+} ENUMTYPEA, *PENUMTYPEA, *LPENUMTYPEA;
+
+typedef struct tagENUMTYPEW
+{
+    DWORD   dwSize;
+    DWORD   dwVersion;
+    DWORD   dwFields;
+    PCWSTR  pDeviceName;
+    DWORD   dwMediaType;
+    DWORD   dwDitheringMode;
+    DWORD   dwResolution[2];
+    DWORD   dwCMMType;
+    DWORD   dwClass;
+    DWORD   dwDataColorSpace;
+    DWORD   dwConnectionSpace;
+    DWORD   dwSignature;
+    DWORD   dwPlatform;
+    DWORD   dwProfileFlags;
+    DWORD   dwManufacturer;
+    DWORD   dwModel;
+    DWORD   dwAttributes[2];
+    DWORD   dwRenderingIntent;
+    DWORD   dwCreator;
+    DWORD   dwDeviceClass;
+} ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW;
+
+#define ET_DEVICENAME       0x00000001
+#define ET_MEDIATYPE        0x00000002
+#define ET_DITHERMODE       0x00000004
+#define ET_RESOLUTION       0x00000008
+#define ET_CMMTYPE          0x00000010
+#define ET_CLASS            0x00000020
+#define ET_DATACOLORSPACE   0x00000040
+#define ET_CONNECTIONSPACE  0x00000080
+#define ET_SIGNATURE        0x00000100
+#define ET_PLATFORM         0x00000200
+#define ET_PROFILEFLAGS     0x00000400
+#define ET_MANUFACTURER     0x00000800
+#define ET_MODEL            0x00001000
+#define ET_ATTRIBUTES       0x00002000
+#define ET_RENDERINGINTENT  0x00004000
+#define ET_CREATOR          0x00008000
+#define ET_DEVICECLASS      0x00010000
+
+struct _tagCOLORMATCHSETUPA;
+struct _tagCOLORMATCHSETUPW;
+
+typedef BOOL (WINAPI *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA*,LPARAM);
+typedef BOOL (WINAPI *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW*,LPARAM);
+
+typedef struct _tagCOLORMATCHSETUPA
+{
+    DWORD dwSize;
+    DWORD dwVersion;
+    DWORD dwFlags;
+    HWND  hwndOwner;
+    PCSTR pSourceName;
+    PCSTR pDisplayName;
+    PCSTR pPrinterName;
+    DWORD dwRenderIntent;
+    DWORD dwProofingIntent;
+    PSTR  pMonitorProfile;
+    DWORD ccMonitorProfile;
+    PSTR  pPrinterProfile;
+    DWORD ccPrinterProfile;
+    PSTR  pTargetProfile;
+    DWORD ccTargetProfile;
+    DLGPROC lpfnHook;
+    LPARAM lParam;
+    PCMSCALLBACKA lpfnApplyCallback;
+    LPARAM lParamApplyCallback;
+} COLORMATCHSETUPA, *PCOLORMATCHSETUPA, *LPCOLORMATCHSETUPA;
+
+typedef struct _tagCOLORMATCHSETUPW
+{
+    DWORD dwSize;
+    DWORD dwVersion;
+    DWORD dwFlags;
+    HWND  hwndOwner;
+    PCWSTR pSourceName;
+    PCWSTR pDisplayName;
+    PCWSTR pPrinterName;
+    DWORD dwRenderIntent;
+    DWORD dwProofingIntent;
+    PWSTR  pMonitorProfile;
+    DWORD ccMonitorProfile;
+    PWSTR  pPrinterProfile;
+    DWORD ccPrinterProfile;
+    PWSTR  pTargetProfile;
+    DWORD ccTargetProfile;
+    DLGPROC lpfnHook;
+    LPARAM lParam;
+    PCMSCALLBACKW lpfnApplyCallback;
+    LPARAM lParamApplyCallback;
+} COLORMATCHSETUPW, *PCOLORMATCHSETUPW, *LPCOLORMATCHSETUPW;
+
+BOOL       WINAPI AssociateColorProfileWithDeviceA(PCSTR,PCSTR,PCSTR);
+BOOL       WINAPI AssociateColorProfileWithDeviceW(PCWSTR,PCWSTR,PCWSTR);
+#define    AssociateColorProfileWithDevice WINELIB_NAME_AW(AssociateColorProfileWithDevice)
+BOOL       WINAPI CheckBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PBYTE,PBMCALLBACKFN,LPARAM);
+BOOL       WINAPI CheckColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PBYTE);
+BOOL       WINAPI ConvertColorNameToIndex(HPROFILE,PCOLOR_NAME,PDWORD,DWORD);
+BOOL       WINAPI ConvertIndexToColorName(HPROFILE,PDWORD,PCOLOR_NAME,DWORD);
+BOOL       WINAPI CloseColorProfile(HPROFILE);
+HTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA,HPROFILE,HPROFILE,DWORD);
+HTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW,HPROFILE,HPROFILE,DWORD);
+#define    CreateColorTransform WINELIB_NAME_AW(CreateColorTransform)
+BOOL       WINAPI CreateDeviceLinkProfile(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD);
+HTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,DWORD);
+BOOL       WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA,PBYTE*);
+BOOL       WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW,PBYTE*);
+#define    CreateProfileFromLogColorSpace WINELIB_NAME_AW(CreateProfileFromLogColorSpace)
+BOOL       WINAPI DeleteColorTransform(HTRANSFORM);
+BOOL       WINAPI DisassociateColorProfileFromDeviceA(PCSTR,PCSTR,PCSTR);
+BOOL       WINAPI DisassociateColorProfileFromDeviceW(PCWSTR,PCWSTR,PCWSTR);
+#define    DisassociateColorProfileFromDevice WINELIB_NAME_AW(DisassociateColorProfileFromDevice)
+BOOL       WINAPI EnumColorProfilesA(PCSTR,PENUMTYPEA,PBYTE,PDWORD,PDWORD);
+BOOL       WINAPI EnumColorProfilesW(PCWSTR,PENUMTYPEW,PBYTE,PDWORD,PDWORD);
+#define    EnumColorProfiles  WINELIB_NAME_AW(EnumColorProfiles)
+DWORD      WINAPI GenerateCopyFilePaths(LPCWSTR,LPCWSTR,LPBYTE,DWORD,LPWSTR,LPDWORD,LPWSTR,LPDWORD,DWORD);
+DWORD      WINAPI GetCMMInfo(HTRANSFORM,DWORD);
+BOOL       WINAPI GetColorDirectoryA(PCSTR,PSTR,PDWORD);
+BOOL       WINAPI GetColorDirectoryW(PCWSTR,PWSTR,PDWORD);
+#define    GetColorDirectory WINELIB_NAME_AW(GetColorDirectory)
+BOOL       WINAPI GetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID,PBOOL);
+BOOL       WINAPI GetColorProfileElementTag(HPROFILE,DWORD,PTAGTYPE);
+BOOL       WINAPI GetColorProfileFromHandle(HPROFILE,PBYTE,PDWORD);
+BOOL       WINAPI GetColorProfileHeader(HPROFILE,PPROFILEHEADER);
+BOOL       WINAPI GetCountColorProfileElements(HPROFILE,PDWORD);
+BOOL       WINAPI GetNamedProfileInfo(HPROFILE,PNAMED_PROFILE_INFO);
+BOOL       WINAPI GetPS2ColorRenderingDictionary(HPROFILE,DWORD,PBYTE,PDWORD,PBOOL);
+BOOL       WINAPI GetPS2ColorRenderingIntent(HPROFILE,DWORD,PBYTE,PDWORD);
+BOOL       WINAPI GetPS2ColorSpaceArray(HPROFILE,DWORD,DWORD,PBYTE,PDWORD,PBOOL);
+BOOL       WINAPI GetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR,PDWORD);
+BOOL       WINAPI GetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR,PDWORD);
+#define    GetStandardColorSpaceProfile WINELIB_NAME_AW(GetStandardColorSpaceProfile)
+BOOL       WINAPI InstallColorProfileA(PCSTR,PCSTR);
+BOOL       WINAPI InstallColorProfileW(PCWSTR,PCWSTR);
+#define    InstallColorProfile WINELIB_NAME_AW(InstallColorProfile)
+BOOL       WINAPI IsColorProfileTagPresent(HPROFILE,TAGTYPE,PBOOL);
+BOOL       WINAPI IsColorProfileValid(HPROFILE,PBOOL);
+HPROFILE   WINAPI OpenColorProfileA(PPROFILE,DWORD,DWORD,DWORD);
+HPROFILE   WINAPI OpenColorProfileW(PPROFILE,DWORD,DWORD,DWORD);
+#define    OpenColorProfile WINELIB_NAME_AW(OpenColorProfile)
+BOOL       WINAPI RegisterCMMA(PCSTR,DWORD,PCSTR);
+BOOL       WINAPI RegisterCMMW(PCWSTR,DWORD,PCWSTR);
+#define    RegisterCMM WINELIB_NAME_AW(RegisterCMM)
+BOOL       WINAPI SelectCMM(DWORD id);
+BOOL       WINAPI SetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID);
+BOOL       WINAPI SetColorProfileElementReference(HPROFILE,TAGTYPE,TAGTYPE);
+BOOL       WINAPI SetColorProfileElementSize(HPROFILE,TAGTYPE,DWORD);
+BOOL       WINAPI SetColorProfileHeader(HPROFILE,PPROFILEHEADER);
+BOOL       WINAPI SetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR);
+BOOL       WINAPI SetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR);
+#define    SetStandardColorSpaceProfile WINELIB_NAME_AW(SetStandardColorSpaceProfile)
+BOOL       WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA);
+BOOL       WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW);
+#define    SetupColorMatching WINELIB_NAME_AW(SetupColorMatching)
+BOOL       WINAPI SpoolerCopyFileEvent(LPWSTR,LPWSTR,DWORD);
+BOOL       WINAPI TranslateBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PVOID,BMFORMAT,DWORD,PBMCALLBACKFN,ULONG);
+BOOL       WINAPI TranslateColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PCOLOR,COLORTYPE);
+BOOL       WINAPI UninstallColorProfileA(PCSTR,PCSTR,BOOL);
+BOOL       WINAPI UninstallColorProfileW(PCWSTR,PCWSTR,BOOL);
+#define    UninstallColorProfile WINELIB_NAME_AW(UninstallColorProfile)
+BOOL       WINAPI UnregisterCMMA(PCSTR,DWORD);
+BOOL       WINAPI UnregisterCMMW(PCWSTR,DWORD);
+#define    UnregisterCMM WINELIB_NAME_AW(UnregisterCMM)
+
+#define PROFILE_FILENAME    1
+#define PROFILE_MEMBUFFER   2
+
+#define PROFILE_READ        1
+#define PROFILE_READWRITE   2
+
+#define SPACE_XYZ   0x58595A20   /* 'XYZ ' */
+#define SPACE_Lab   0x4C616220   /* 'Lab ' */
+#define SPACE_Luv   0x4C757620   /* 'Luv ' */
+#define SPACE_YCbCr 0x59436272   /* 'YCbr' */
+#define SPACE_Yxy   0x59787920   /* 'Yxy ' */
+#define SPACE_RGB   0x52474220   /* 'RGB ' */
+#define SPACE_GRAY  0x47524159   /* 'GRAY' */
+#define SPACE_HSV   0x48535620   /* 'HSV ' */
+#define SPACE_HLS   0x484C5320   /* 'HLS ' */
+#define SPACE_CMYK  0x434D594B   /* 'CMYK' */
+#define SPACE_CMY   0x434D5920   /* 'CMY ' */
+#define SPACE_2_CHANNEL 0x32434c52   /* '2CLR' */
+#define SPACE_3_CHANNEL 0x33434c52   /* '3CLR' */
+#define SPACE_4_CHANNEL 0x34434c52   /* '4CLR' */
+#define SPACE_5_CHANNEL 0x35434c52   /* '5CLR' */
+#define SPACE_6_CHANNEL 0x36434c52   /* '6CLR' */
+#define SPACE_7_CHANNEL 0x37434c52   /* '7CLR' */
+#define SPACE_8_CHANNEL 0x38434c52   /* '8CLR' */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ICM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h
new file mode 100644
index 0000000..b910a52
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h
@@ -0,0 +1,62 @@
+/*
+ * Interface to the ICMP functions.
+ *
+ * Copyright (C) 1999 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ICMPAPI_H
+#define __WINE_ICMPAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+HANDLE WINAPI IcmpCreateFile(
+    VOID
+    );
+
+BOOL WINAPI IcmpCloseHandle(
+    HANDLE  IcmpHandle
+    );
+
+DWORD WINAPI IcmpSendEcho(
+    HANDLE                 IcmpHandle,
+    IPAddr                 DestinationAddress,
+    LPVOID                 RequestData,
+    WORD                   RequestSize,
+    PIP_OPTION_INFORMATION RequestOptions,
+    LPVOID                 ReplyBuffer,
+    DWORD                  ReplySize,
+    DWORD                  Timeout
+    );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ICMPAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h
new file mode 100644
index 0000000..11ac406
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IDISPIDS_H__
+#define __WINE_IDISPIDS_H__
+
+#define DISPID_READYSTATE (-525)
+#define DISPID_READYSTATECHANGE (-609)
+#define DISPID_AMBIENT_TRANSFERPRIORITY (-728)
+#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED (-5501)
+#define DISPID_AMBIENT_SILENT (-5502)
+
+#ifndef DISPID_AMBIENT_CODEPAGE
+#define DISPID_AMBIENT_CODEPAGE (-725)
+#define DISPID_AMBIENT_CHARSET (-727)
+#endif /* DISPID_AMBIENT_CODEPAGE */
+
+#endif /* __WINE_IDISPIDS_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl
new file mode 100644
index 0000000..0ed0ec3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2011 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+    object,
+    uuid(7e8bc44d-aeff-11d1-89c2-00c04fb6bfc4),
+    dual,
+    pointer_default(unique)
+ ]
+interface IClientCaps : IDispatch
+{
+    [propget, id(1)]
+    HRESULT javaEnabled([out, retval] VARIANT_BOOL *pVal);
+
+    [propget, id(2)]
+    HRESULT cookieEnabled([out, retval] VARIANT_BOOL *pVal);
+
+    [propget, id(3)]
+    HRESULT cpuClass([out, retval] BSTR *p);
+
+    [propget, id(4)]
+    HRESULT systemLanguage([out, retval] BSTR *p);
+
+    [propget, id(6)]
+    HRESULT userLanguage([out, retval] BSTR *p);
+
+    [propget, id(7)]
+    HRESULT platform([out, retval] BSTR *p);
+
+    [propget, id(9)]
+    HRESULT connectionSpeed([out, retval] long *p);
+
+    [propget, id(10)]
+    HRESULT onLine([out, retval] VARIANT_BOOL *p);
+
+    [propget, id(11)]
+    HRESULT colorDepth([out, retval] long *p);
+
+    [propget, id(12)]
+    HRESULT bufferDepth([out, retval] long *p);
+
+    [propget, id(13)]
+    HRESULT width([out, retval] long *p);
+
+    [propget, id(14)]
+    HRESULT height([out, retval] long *p);
+
+    [propget, id(15)]
+    HRESULT availHeight([out, retval] long *p);
+
+    [propget, id(16)]
+    HRESULT availWidth([out, retval] long *p);
+
+    [propget, id(17)]
+    HRESULT connectionType([out, retval] BSTR *p);
+
+    [id(18)]
+    HRESULT isComponentInstalled(
+            [in] BSTR bstrName,
+            [in] BSTR bstrType,
+            [in, defaultvalue("")] BSTR bStrVer,
+            [out, retval] VARIANT_BOOL *p);
+
+    [id(19)]
+    HRESULT getComponentVersion(
+            [in] BSTR bstrName,
+            [in] BSTR bstrType,
+            [out, retval] BSTR *pbstrVer);
+
+    [id(20)]
+    HRESULT compareVersions(
+            [in] BSTR bstrVer1,
+            [in] BSTR bstrVer2,
+            [out, retval] long *p);
+
+    [id(21)]
+    HRESULT addComponentRequest(
+            [in] BSTR bstrName,
+            [in] BSTR bstrType,
+            [in, defaultvalue("")] BSTR bstrVer);
+
+    [id(22)]
+    HRESULT doComponentRequest([out, retval] VARIANT_BOOL *p);
+
+    [id(23)]
+    HRESULT clearComponentRequest();
+}
+
+[
+    uuid(7e8bc440-aeff-11d1-89c2-00c04fb6bfc4),
+    version(1.0)
+]
+library IEXTagLib
+{
+    [
+        uuid(7e8bc44e-aeff-11d1-89c2-00C04fb6bfc4)
+    ]
+    coclass ClientCaps
+    {
+        [default] interface IClientCaps;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h
new file mode 100644
index 0000000..57cfca1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h
@@ -0,0 +1,239 @@
+/* WINE ifdef.h
+ * Copyright 2010 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IFDEF_H
+#define WINE_IFDEF_H
+
+#include <ipifcons.h>
+
+typedef ULONG32 NET_IF_OBJECT_ID, *PNET_IF_OBJECT_ID;
+typedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID;
+typedef GUID NET_IF_NETWORK_GUID, *PNET_IF_NETWORK_GUID;
+typedef ULONG NET_IFINDEX, *PNET_IFINDEX;
+typedef NET_IFINDEX IF_INDEX, *PIF_INDEX;
+typedef UINT16 NET_IFTYPE, *PNET_IFTYPE;
+
+#define NET_IF_OPER_STATUS_DOWN_NOT_AUTHENTICATED   0x00000001
+#define NET_IF_OPER_STATUS_DOWN_NOT_MEDIA_CONNECTED 0x00000002
+#define NET_IF_OPER_STATUS_DORMANT_PAUSED           0x00000004
+#define NET_IF_OPER_STATUS_DORMANT_LOW_POWER        0x00000008
+
+#define NET_IF_COMPARTMENT_ID_UNSPECIFIED 0
+#define NET_IF_COMPARTMENT_ID_PRIMARY     1
+
+#define NET_IF_OID_IF_ALIAS       0x00000001
+#define NET_IF_OID_COMPARTMENT_ID 0x00000002
+#define NET_IF_OID_NETWORK_GUID   0x00000003
+#define NET_IF_OID_IF_ENTRY       0x00000004
+
+#define NET_SET_UNSPECIFIED_NETWORK_GUID(x)
+#define NET_IS_UNSPECIFIED_NETWORK_GUID(x)
+
+#define NET_SITEID_UNSPECIFIED 0
+#define NET_SITEID_MAXUSER     0x07ffffff
+#define NET_SITEID_MAXSYSTEM   0x0fffffff
+
+#define NET_IFINDEX_UNSPECIFIED 0
+#define IFI_UNSPECIFIED         NET_IFINDEX_UNSPECIFIED
+
+#define NET_IFLUID_UNSPECIFIED 0
+
+#define NIIF_HARDWARE_INTERFACE      0x00000001
+#define NIIF_FILTER_INTERFACE        0x00000002
+#define NIIF_NDIS_WDM_INTERFACE      0x00000020
+#define NIIF_NDIS_ENDPOINT_INTERFACE 0x00000040
+#define NIIF_NDIS_ISCSI_INTERFACE    0x00000080
+#define NIIF_WAN_TUNNEL_TYPE_UNKNOWN 0xffffffff
+
+#define NET_BUS_NUMBER_UNKNOWN      0xffffffff
+#define NET_SLOT_NUMBER_UNKNOWN     0xffffffff
+#define NET_FUNCTION_NUMBER_UNKNOWN 0xffffffff
+
+#define IF_MAX_STRING_SIZE 256
+#define IF_MAX_PHYS_ADDRESS_LENGTH 32
+
+typedef enum _NET_IF_ADMIN_STATUS {
+    NET_IF_ADMIN_STATUS_UP      = 1,
+    NET_IF_ADMIN_STATUS_DOWN    = 2,
+    NET_IF_ADMIN_STATUS_TESTING = 3
+} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
+
+typedef enum _NET_IF_OPER_STATUS {
+    NET_IF_OPER_STATUS_UP               = 1,
+    NET_IF_OPER_STATUS_DOWN             = 2,
+    NET_IF_OPER_STATUS_TESTING          = 3,
+    NET_IF_OPER_STATUS_UNKNOWN          = 4,
+    NET_IF_OPER_STATUS_DORMANT          = 5,
+    NET_IF_OPER_STATUS_NOT_PRESENT      = 6,
+    NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7
+} NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS;
+
+typedef enum _NET_IF_RCV_ADDRESS_TYPE {
+    NET_IF_RCV_ADDRESS_TYPE_OTHER        = 1,
+    NET_IF_RCV_ADDRESS_TYPE_VOLATILE     = 2,
+    NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3
+} NET_IF_RCV_ADDRESS_TYPE, *PNET_IF_RCV_ADDRESS_TYPE;
+
+typedef struct _NET_IF_RCV_ADDRESS_LH {
+    NET_IF_RCV_ADDRESS_TYPE ifRcvAddressType;
+    USHORT                  ifRcvAddressLength;
+    USHORT                  ifRcvAddressOffset;
+} NET_IF_RCV_ADDRESS_LH, *PNET_IF_RCV_ADDRESS_LH;
+typedef NET_IF_RCV_ADDRESS_LH NET_IF_RCV_ADDRESS;
+typedef NET_IF_RCV_ADDRESS_LH  *PNET_IF_RCV_ADDRESS;
+
+typedef union _NET_LUID_LH {
+    ULONG64 Value;
+    struct {
+        ULONG64 Reserved : 24;
+        ULONG64 NetLuidIndex : 24;
+        ULONG64 IfType : 16;
+    } Info;
+} NET_LUID_LH, *PNET_LUID_LH;
+typedef NET_LUID_LH NET_LUID;
+typedef NET_LUID *PNET_LUID;
+typedef NET_LUID IF_LUID;
+typedef NET_LUID *PIF_LUID;
+
+typedef enum _NET_IF_ACCESS_TYPE {
+    NET_IF_ACCESS_LOOPBACK             = 1,
+    NET_IF_ACCESS_BROADCAST            = 2,
+    NET_IF_ACCESS_POINT_TO_POINT       = 2,
+    NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4,
+    NET_IF_ACCESS_MAXIMUM              = 5
+} NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;
+
+typedef enum _NET_IF_DIRECTION_TYPE {
+    NET_IF_DIRECTION_SENDRECEIVE = 0,
+    NET_IF_DIRECTION_SENDONLY    = 1,
+    NET_IF_DIRECTION_RECEIVEONLY = 2,
+    NET_IF_DIRECTION_MAXIMUM     = 3
+} NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;
+
+typedef enum _NET_IF_CONNECTION_TYPE {
+    NET_IF_CONNECTION_DEDICATED = 1,
+    NET_IF_CONNECTION_PASSIVE   = 2,
+    NET_IF_CONNECTION_DEMAND    = 3,
+    NET_IF_CONNECTION_MAXIMUM   = 4,
+} NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;
+
+typedef enum _NET_IF_MEDIA_CONNECT_STATE {
+    MediaConnectStateUnknown      = 0,
+    MediaConnectStateConnected    = 1,
+    MediaConnectStateDisconnected = 2
+} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
+
+typedef enum _NET_IF_MEDIA_DUPLEX_STATE {
+    MediaDuplexStateUnknown = 0,
+    MediaDuplexStateHalf    = 1,
+    MediaDuplexStateFull    = 2
+} NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;
+
+typedef struct _NET_PHYSICAL_LOCATION_LH {
+    ULONG BusNumber;
+    ULONG SlotNumber;
+    ULONG FunctionNumber;
+} NET_PHYSICAL_LOCATION_LH, *PNET_PHYSICAL_LOCATION_LH;
+typedef NET_PHYSICAL_LOCATION_LH NET_PHYSICAL_LOCATION;
+typedef NET_PHYSICAL_LOCATION *PNET_PHYSICAL_LOCATION;
+
+typedef struct _IF_COUNTED_STRING_LH {
+    USHORT Length;
+    WCHAR  String[IF_MAX_STRING_SIZE + 1];
+} IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH;
+typedef IF_COUNTED_STRING_LH IF_COUNTED_STRING;
+typedef IF_COUNTED_STRING *PIF_COUNTED_STRING;
+
+typedef struct _IF_PHYSICAL_ADDRESS_LH {
+    USHORT Length;
+    UCHAR  Address[IF_MAX_PHYS_ADDRESS_LENGTH];
+} IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH;
+typedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS;
+typedef IF_PHYSICAL_ADDRESS *PIF_PHYSICAL_ADDRESS;
+
+typedef enum {
+    TUNNEL_TYPE_NONE    = 0,
+    TUNNEL_TYPE_OTHER   = 1,
+    TUNNEL_TYPE_DIRECT  = 2,
+    TUNNEL_TYPE_6TO4    = 11,
+    TUNNEL_TYPE_ISATAP  = 13,
+    TUNNEL_TYPE_TEREDO  = 14,
+    TUNNEL_TYPE_IPHTTPS = 15,
+} TUNNEL_TYPE;
+
+typedef enum _IF_ADMINISTRATIVE_STATE {
+    IF_ADMINISTRATIVE_STATE_DISABLED   = 0,
+    IF_ADMINISTRATIVE_STATE_ENABLED    = 1,
+    IF_ADMINISTRATIVE_STATE_DEMANDDIAL = 2
+} IF_ADMINISTRATIVE_STATE, *PIF_ADMINISTRATIVE_STATE;
+
+typedef enum {
+    IfOperStatusUp = 1,
+    IfOperStatusDown,
+    IfOperStatusTesting,
+    IfOperStatusUnknown,
+    IfOperStatusDormant,
+    IfOperStatusNotPresent,
+    IfOperStatusLowerLayerDown
+} IF_OPER_STATUS;
+
+typedef struct _NDIS_INTERFACE_INFORMATION {
+    NET_IF_OPER_STATUS         ifOperStatus;
+    ULONG                      ifOperStatusFlags;
+    NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
+    NET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState;
+    ULONG                      ifMtu;
+    BOOLEAN                    ifPromiscuousMode;
+    BOOLEAN                    ifDeviceWakeUpEnable;
+    ULONG64                    XmitLinkSpeed;
+    ULONG64                    RcvLinkSpeed;
+    ULONG64                    ifLastChange;
+    ULONG64                    ifCounterDiscontinuityTime;
+    ULONG64                    ifInUnknownProtos;
+    ULONG64                    ifInDiscards;
+    ULONG64                    ifInErrors;
+    ULONG64                    ifHCInOctets;
+    ULONG64                    ifHCInUcastPkts;
+    ULONG64                    ifHCInMulticastPkts;
+    ULONG64                    ifHCInBroadcastPkts;
+    ULONG64                    ifHCOutOctets;
+    ULONG64                    ifHCOutUcastPkts;
+    ULONG64                    ifHCOutMulticastPkts;
+    ULONG64                    ifHCOutBroadcastPkts;
+    ULONG64                    ifOutErrors;
+    ULONG64                    ifOutDiscards;
+    ULONG64                    ifHCInUcastOctets;
+    ULONG64                    ifHCInMulticastOctets;
+    ULONG64                    ifHCInBroadcastOctets;
+    ULONG64                    ifHCOutUcastOctets;
+    ULONG64                    ifHCOutMulticastOctets;
+    ULONG64                    ifHCOutBroadcastOctets;
+    NET_IF_COMPARTMENT_ID      CompartmentId;
+    ULONG                      SupportedStatistics;
+} NDIS_INTERFACE_INFORMATION, *PNDIS_INTERFACE_INFORMATION;
+
+#endif /* WINE_IFDEF_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h
new file mode 100644
index 0000000..0b9f0e9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IFMIB_H
+#define __WINE_IFMIB_H
+
+#include <ifdef.h>
+
+typedef struct _MIB_IFNUMBER
+{
+    DWORD dwValue;
+} MIB_IFNUMBER, *PMIB_IFNUMBER;
+
+
+/* Interface table */
+
+#define MAX_INTERFACE_NAME_LEN 256
+#define MAXLEN_PHYSADDR 8
+#define MAXLEN_IFDESCR 256
+
+typedef struct _MIB_IFROW
+{
+    WCHAR wszName[MAX_INTERFACE_NAME_LEN];
+    DWORD dwIndex;
+    DWORD dwType;
+    DWORD dwMtu;
+    DWORD dwSpeed;
+    DWORD dwPhysAddrLen;
+    UCHAR bPhysAddr[MAXLEN_PHYSADDR];
+    DWORD dwAdminStatus;
+    INTERNAL_IF_OPER_STATUS dwOperStatus;
+    DWORD dwLastChange;
+    DWORD dwInOctets;
+    DWORD dwInUcastPkts;
+    DWORD dwInNUcastPkts;
+    DWORD dwInDiscards;
+    DWORD dwInErrors;
+    DWORD dwInUnknownProtos;
+    DWORD dwOutOctets;
+    DWORD dwOutUcastPkts;
+    DWORD dwOutNUcastPkts;
+    DWORD dwOutDiscards;
+    DWORD dwOutErrors;
+    DWORD dwOutQLen;
+    DWORD dwDescrLen;
+    BYTE  bDescr[MAXLEN_IFDESCR];
+} MIB_IFROW, *PMIB_IFROW;
+
+typedef struct _MIB_IFTABLE
+{
+    DWORD     dwNumEntries;
+    MIB_IFROW table[1];
+} MIB_IFTABLE, *PMIB_IFTABLE;
+
+
+#endif /* __WINE_IFMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h
new file mode 100644
index 0000000..c96f2a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h
@@ -0,0 +1,1409 @@
+/*
+ * Declarations for IMAGEHLP
+ *
+ * Copyright (C) 1998 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IMAGEHLP_H
+#define __WINE_IMAGEHLP_H
+
+#include <wintrust.h>
+
+/* A set of documentation macros (see also dbghelp.h) */
+#ifndef __deref_out
+# define __deref_out
+#endif
+#ifndef __deref_out_opt
+# define __deref_out_opt
+#endif
+#ifndef __deref_opt_out
+# define __deref_opt_out
+#endif
+#ifndef __in
+# define __in
+#endif
+#ifndef __in_opt
+# define __in_opt
+#endif
+#ifndef __in_bcount
+# define __in_bcount(x)
+#endif
+#ifndef __in_bcount_opt
+# define __in_bcount_opt(x)
+#endif
+#ifndef __in_ecount
+# define __in_ecount(x)
+#endif
+#ifndef __inout
+# define __inout
+#endif
+#ifndef __inout_opt
+# define __inout_opt
+#endif
+#ifndef __inout_bcount
+# define __inout_bcount(x)
+#endif
+#ifndef __inout_ecount
+# define __inout_ecount(x)
+#endif
+#ifndef __out
+# define __out
+#endif
+#ifndef __out_opt
+# define __out_opt
+#endif
+#ifndef __out_bcount
+# define __out_bcount(x)
+#endif
+#ifndef __out_bcount_opt
+# define __out_bcount_opt(x)
+#endif
+#ifndef __out_ecount
+# define __out_ecount(x)
+#endif
+#ifndef __out_ecount_opt
+# define __out_ecount_opt(x)
+#endif
+#ifndef __out_xcount
+# define __out_xcount(x)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define IMAGEAPI WINAPI
+#define DBHLPAPI IMAGEAPI
+
+#define API_VERSION_NUMBER 7 		/* 7 is the default */
+
+/***********************************************************************
+ * Types
+ */
+
+typedef PVOID DIGEST_HANDLE;
+
+/***********************************************************************
+ * Enums/Defines
+ */
+
+typedef enum _IMAGEHLP_STATUS_REASON {
+  BindOutOfMemory,
+  BindRvaToVaFailed,
+  BindNoRoomInImage,
+  BindImportModuleFailed,
+  BindImportProcedureFailed,
+  BindImportModule,
+  BindImportProcedure,
+  BindForwarder,
+  BindForwarderNOT,
+  BindImageModified,
+  BindExpandFileHeaders,
+  BindImageComplete,
+  BindMismatchedSymbols,
+  BindSymbolsNotUpdated
+} IMAGEHLP_STATUS_REASON;
+
+#define BIND_NO_BOUND_IMPORTS  0x00000001
+#define BIND_NO_UPDATE         0x00000002
+#define BIND_ALL_IMAGES        0x00000004
+#define BIND_CACHE_IMPORT_DLLS 0x00000008
+
+#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO      0x01
+#define CERT_PE_IMAGE_DIGEST_RESOURCES       0x02
+#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04
+#define CERT_PE_IMAGE_DIGEST_NON_PE_INFO     0x08
+
+#define CERT_SECTION_TYPE_ANY 0xFF
+
+#define SPLITSYM_REMOVE_PRIVATE    0x00000001
+#define SPLITSYM_EXTRACT_ALL       0x00000002
+#define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004
+
+#define FRAME_FPO    0
+#define FRAME_TRAP   1
+#define FRAME_TSS    2
+#define FRAME_NONFPO 3
+
+#define CHECKSUM_SUCCESS         0
+#define CHECKSUM_OPEN_FAILURE    1
+#define CHECKSUM_MAP_FAILURE     2
+#define CHECKSUM_MAPVIEW_FAILURE 3
+#define CHECKSUM_UNICODE_FAILURE 4
+
+typedef enum _ADDRESS_MODE {
+  AddrMode1616,
+  AddrMode1632,
+  AddrModeReal,
+  AddrModeFlat
+} ADDRESS_MODE;
+
+#define SYMOPT_CASE_INSENSITIVE  0x00000001
+#define SYMOPT_UNDNAME           0x00000002
+#define SYMOPT_DEFERRED_LOADS    0x00000004
+#define SYMOPT_NO_CPP            0x00000008
+#define SYMOPT_LOAD_LINES        0x00000010
+#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
+
+#define SYMF_OMAP_GENERATED   0x00000001
+#define SYMF_OMAP_MODIFIED    0x00000002
+/* 0x00000004 has been obsoleted */
+#define SYMF_REGISTER         0x00000008
+#define SYMF_REGREL           0x00000010
+#define SYMF_FRAMEREL         0x00000020
+#define SYMF_PARAMETER        0x00000040
+#define SYMF_LOCAL            0x00000080
+#define SYMF_CONSTANT         0x00000100
+#define SYMF_EXPORT           0x00000200
+#define SYMF_FORWARDER        0x00000400
+#define SYMF_FUNCTION         0x00000800
+
+typedef enum {
+  SymNone,
+  SymCoff,
+  SymCv,
+  SymPdb,
+  SymExport,
+  SymDeferred,
+  SymSym,
+  SymDia,
+  SymVirtual,
+  NumSymTypes
+} SYM_TYPE;
+
+#define UNDNAME_COMPLETE               0x0000
+#define UNDNAME_NO_LEADING_UNDERSCORES 0x0001
+#define UNDNAME_NO_MS_KEYWORDS         0x0002
+#define UNDNAME_NO_FUNCTION_RETURNS    0x0004
+#define UNDNAME_NO_ALLOCATION_MODEL    0x0008
+#define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010
+#define UNDNAME_NO_MS_THISTYPE         0x0020
+#define UNDNAME_NO_CV_THISTYPE         0x0040
+#define UNDNAME_NO_THISTYPE            0x0060
+#define UNDNAME_NO_ACCESS_SPECIFIERS   0x0080
+#define UNDNAME_NO_THROW_SIGNATURES    0x0100
+#define UNDNAME_NO_MEMBER_TYPE         0x0200
+#define UNDNAME_NO_RETURN_UDT_MODEL    0x0400
+#define UNDNAME_32_BIT_DECODE          0x0800
+#define UNDNAME_NAME_ONLY              0x1000
+#define UNDNAME_NO_ARGUMENTS           0x2000
+#define UNDNAME_NO_SPECIAL_SYMS        0x4000
+
+#define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
+#define CBA_SYMBOLS_UNLOADED                    0x00000004
+#define CBA_DUPLICATE_SYMBOL                    0x00000005
+
+/***********************************************************************
+ * Structures
+ */
+
+typedef struct _LOADED_IMAGE
+{
+    PSTR                        ModuleName;
+    HANDLE                      hFile;
+    PUCHAR                      MappedAddress;
+    PIMAGE_NT_HEADERS           FileHeader;
+    PIMAGE_SECTION_HEADER       LastRvaSection;
+    ULONG                       NumberOfSections;
+    PIMAGE_SECTION_HEADER       Sections;
+    ULONG                       Characteristics;
+    BOOLEAN                     fSystemImage;
+    BOOLEAN                     fDOSImage;
+    BOOLEAN                     fReadOnly;
+    UCHAR                       Version;
+    LIST_ENTRY                  Links;
+    ULONG                       SizeOfImage;
+} LOADED_IMAGE, *PLOADED_IMAGE;
+
+typedef struct _API_VERSION {
+  USHORT  MajorVersion;
+  USHORT  MinorVersion;
+  USHORT  Revision;
+  USHORT  Reserved;
+} API_VERSION, *LPAPI_VERSION;
+
+typedef struct _IMAGE_DEBUG_INFORMATION {
+  LIST_ENTRY List;
+  DWORD        Size;
+  PVOID        MappedBase;
+  USHORT       Machine;
+  USHORT       Characteristics;
+  DWORD        CheckSum;
+  DWORD        ImageBase;
+  DWORD        SizeOfImage;
+
+  DWORD NumberOfSections;
+  PIMAGE_SECTION_HEADER Sections;
+
+  DWORD ExportedNamesSize;
+  PSTR ExportedNames;
+
+  DWORD NumberOfFunctionTableEntries;
+  PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
+  DWORD LowestFunctionStartingAddress;
+  DWORD HighestFunctionEndingAddress;
+
+  DWORD NumberOfFpoTableEntries;
+  PFPO_DATA FpoTableEntries;
+
+  DWORD SizeOfCoffSymbols;
+  PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
+
+  DWORD SizeOfCodeViewSymbols;
+  PVOID CodeViewSymbols;
+
+  PSTR ImageFilePath;
+  PSTR ImageFileName;
+  PSTR DebugFilePath;
+
+  DWORD TimeDateStamp;
+
+  BOOL RomImage;
+  PIMAGE_DEBUG_DIRECTORY DebugDirectory;
+  DWORD  NumberOfDebugDirectories;
+
+  DWORD Reserved[3];
+} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
+
+typedef struct _ADDRESS {
+    DWORD          Offset;
+    WORD           Segment;
+    ADDRESS_MODE Mode;
+} ADDRESS, *LPADDRESS;
+
+typedef struct _ADDRESS64 {
+    DWORD64        Offset;
+    WORD           Segment;
+    ADDRESS_MODE   Mode;
+} ADDRESS64, *LPADDRESS64;
+
+typedef struct _KDHELP {
+  DWORD Thread;
+  DWORD ThCallbackStack;
+  DWORD NextCallback;
+  DWORD FramePointer;
+  DWORD KiCallUserMode;
+  DWORD KeUserCallbackDispatcher;
+  DWORD SystemRangeStart;
+} KDHELP, *PKDHELP;
+
+typedef struct _KDHELP64 {
+    DWORD64 Thread;
+    DWORD   ThCallbackStack;
+    DWORD   ThCallbackBStore;
+    DWORD   NextCallback;
+    DWORD   FramePointer;
+    DWORD64 KiCallUserMode;
+    DWORD64 KeUserCallbackDispatcher;
+    DWORD64 SystemRangeStart;
+    DWORD64 Reserved[8];
+} KDHELP64, *PKDHELP64;
+
+typedef struct _STACKFRAME {
+  ADDRESS AddrPC;
+  ADDRESS AddrReturn;
+  ADDRESS AddrFrame;
+  ADDRESS AddrStack;
+  PVOID     FuncTableEntry;
+  DWORD     Params[4];
+  BOOL    Far;
+  BOOL    Virtual;
+  DWORD     Reserved[3];
+  KDHELP  KdHelp;
+} STACKFRAME, *LPSTACKFRAME;
+
+typedef struct _STACKFRAME64 {
+    ADDRESS64 AddrPC;
+    ADDRESS64 AddrReturn;
+    ADDRESS64 AddrFrame;
+    ADDRESS64 AddrStack;
+    ADDRESS64 AddrBStore;
+    PVOID     FuncTableEntry;
+    DWORD64   Params[4];
+    BOOL      Far;
+    BOOL      Virtual;
+    DWORD64   Reserved[3];
+    KDHELP64  KdHelp;
+} STACKFRAME64, *LPSTACKFRAME64;
+
+typedef struct _SOURCEFILE {
+    DWORD64                     ModBase;
+    PCHAR                       FileName;
+} SOURCEFILE, *PSOURCEFILE;
+
+typedef struct _SOURCEFILEW
+{
+    DWORD64                     ModBase;
+    PWSTR                       FileName;
+} SOURCEFILEW, *PSOURCEFILEW;
+
+typedef struct _IMAGEHLP_STACK_FRAME
+{
+  DWORD InstructionOffset;
+  DWORD ReturnOffset;
+  DWORD FrameOffset;
+  DWORD StackOffset;
+  DWORD BackingStoreOffset;
+  DWORD FuncTableEntry;
+  DWORD Params[4];
+  DWORD Reserved[5];
+  DWORD Virtual;
+  DWORD Reserved2;
+} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
+
+typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
+
+typedef struct _IMAGEHLP_SYMBOL {
+  DWORD SizeOfStruct;
+  DWORD Address;
+  DWORD Size;
+  DWORD Flags;
+  DWORD MaxNameLength;
+  CHAR  Name[ANYSIZE_ARRAY];
+} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
+
+typedef struct _IMAGEHLP_SYMBOLW {
+  DWORD SizeOfStruct;
+  DWORD Address;
+  DWORD Size;
+  DWORD Flags;
+  DWORD MaxNameLength;
+  WCHAR Name[ANYSIZE_ARRAY];
+} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
+
+typedef struct _IMAGEHLP_SYMBOL64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     Address;
+    DWORD                       Size;
+    DWORD                       Flags;
+    DWORD                       MaxNameLength;
+    CHAR                        Name[1];
+} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
+
+typedef struct _IMAGEHLP_SYMBOLW64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     Address;
+    DWORD                       Size;
+    DWORD                       Flags;
+    DWORD                       MaxNameLength;
+    WCHAR                       Name[1];
+} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
+
+typedef struct _IMAGEHLP_MODULE {
+  DWORD      SizeOfStruct;
+  DWORD      BaseOfImage;
+  DWORD      ImageSize;
+  DWORD      TimeDateStamp;
+  DWORD      CheckSum;
+  DWORD      NumSyms;
+  SYM_TYPE   SymType;
+  CHAR       ModuleName[32];
+  CHAR       ImageName[256];
+  CHAR       LoadedImageName[256];
+} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
+
+typedef struct _IMAGEHLP_MODULEW {
+  DWORD      SizeOfStruct;
+  DWORD      BaseOfImage;
+  DWORD      ImageSize;
+  DWORD      TimeDateStamp;
+  DWORD      CheckSum;
+  DWORD      NumSyms;
+  SYM_TYPE   SymType;
+  WCHAR      ModuleName[32];
+  WCHAR      ImageName[256];
+  WCHAR      LoadedImageName[256];
+} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
+
+typedef struct _IMAGEHLP_MODULE64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     BaseOfImage;
+    DWORD                       ImageSize;
+    DWORD                       TimeDateStamp;
+    DWORD                       CheckSum;
+    DWORD                       NumSyms;
+    SYM_TYPE                    SymType;
+    CHAR                        ModuleName[32];
+    CHAR                        ImageName[256];
+    CHAR                        LoadedImageName[256];
+    CHAR                        LoadedPdbName[256];
+    DWORD                       CVSig;
+    CHAR                        CVData[MAX_PATH*3];
+    DWORD                       PdbSig;
+    GUID                        PdbSig70;
+    DWORD                       PdbAge;
+    BOOL                        PdbUnmatched;
+    BOOL                        DbgUnmatched;
+    BOOL                        LineNumbers;
+    BOOL                        GlobalSymbols;
+    BOOL                        TypeInfo;
+    BOOL                        SourceIndexed;
+    BOOL                        Publics;
+} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
+
+typedef struct _IMAGEHLP_MODULEW64
+{
+    DWORD                       SizeOfStruct;
+    DWORD64                     BaseOfImage;
+    DWORD                       ImageSize;
+    DWORD                       TimeDateStamp;
+    DWORD                       CheckSum;
+    DWORD                       NumSyms;
+    SYM_TYPE                    SymType;
+    WCHAR                       ModuleName[32];
+    WCHAR                       ImageName[256];
+    WCHAR                       LoadedImageName[256];
+    WCHAR                       LoadedPdbName[256];
+    DWORD                       CVSig;
+    WCHAR                       CVData[MAX_PATH*3];
+    DWORD                       PdbSig;
+    GUID                        PdbSig70;
+    DWORD                       PdbAge;
+    BOOL                        PdbUnmatched;
+    BOOL                        DbgUnmatched;
+    BOOL                        LineNumbers;
+    BOOL                        GlobalSymbols;
+    BOOL                        TypeInfo;
+    BOOL                        SourceIndexed;
+    BOOL                        Publics;
+} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
+
+typedef struct _IMAGEHLP_LINE {
+  DWORD SizeOfStruct;
+  PVOID Key;
+  DWORD LineNumber;
+  PCHAR FileName;
+  DWORD Address;
+} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
+
+typedef struct _IMAGEHLP_LINEW {
+  DWORD SizeOfStruct;
+  PVOID Key;
+  DWORD LineNumber;
+  PWSTR FileName;
+  DWORD Address;
+} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
+
+typedef struct _IMAGEHLP_LINE64 {
+  DWORD SizeOfStruct;
+  PVOID Key;
+  DWORD LineNumber;
+  PCHAR FileName;
+  DWORD64 Address;
+} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
+
+typedef struct _IMAGEHLP_LINEW64 {
+  DWORD SizeOfStruct;
+  PVOID Key;
+  DWORD LineNumber;
+  PWSTR FileName;
+  DWORD64 Address;
+} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
+  DWORD   SizeOfStruct;
+  DWORD   BaseOfImage;
+  DWORD   CheckSum;
+  DWORD   TimeDateStamp;
+  CHAR    FileName[MAX_PATH];
+  BOOLEAN Reparse;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
+  DWORD              SizeOfStruct;
+  DWORD              NumberOfDups;
+  PIMAGEHLP_SYMBOL Symbol;
+  ULONG              SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
+
+typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
+{
+    TI_GET_SYMTAG,
+    TI_GET_SYMNAME,
+    TI_GET_LENGTH,
+    TI_GET_TYPE,
+    TI_GET_TYPEID,
+    TI_GET_BASETYPE,
+    TI_GET_ARRAYINDEXTYPEID,
+    TI_FINDCHILDREN,
+    TI_GET_DATAKIND,
+    TI_GET_ADDRESSOFFSET,
+    TI_GET_OFFSET,
+    TI_GET_VALUE,
+    TI_GET_COUNT,
+    TI_GET_CHILDRENCOUNT,
+    TI_GET_BITPOSITION,
+    TI_GET_VIRTUALBASECLASS,
+    TI_GET_VIRTUALTABLESHAPEID,
+    TI_GET_VIRTUALBASEPOINTEROFFSET,
+    TI_GET_CLASSPARENTID,
+    TI_GET_NESTED,
+    TI_GET_SYMINDEX,
+    TI_GET_LEXICALPARENT,
+    TI_GET_ADDRESS,
+    TI_GET_THISADJUST,
+    TI_GET_UDTKIND,
+    TI_IS_EQUIV_TO,
+    TI_GET_CALLING_CONVENTION,
+} IMAGEHLP_SYMBOL_TYPE_INFO;
+
+#define IMAGEHLP_GET_TYPE_INFO_UNCACHED            0x00000001
+#define IMAGEHLP_GET_TYPE_INFO_CHILDREN            0x00000002
+typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
+{
+    ULONG       SizeOfStruct;
+    ULONG       Flags;
+    ULONG       NumIds;
+    PULONG      TypeIds;
+    ULONG64     TagFilter;
+    ULONG       NumReqs;
+    IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
+    PULONG_PTR  ReqOffsets;
+    PULONG      ReqSizes;
+    ULONG_PTR   ReqStride;
+    ULONG_PTR   BufferSize;
+    PVOID       Buffer;
+    ULONG       EntriesMatched;
+    ULONG       EntriesFilled;
+    ULONG64     TagsFound;
+    ULONG64     AllReqsValid;
+    ULONG       NumReqsValid;
+    PULONG64    ReqsValid;
+} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
+
+#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1
+#define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER
+#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL
+#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL
+#define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER
+#define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL
+#define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT
+#define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION
+
+#define MAX_SYM_NAME                               2000
+
+typedef struct _SYMBOL_INFO {
+    ULONG       SizeOfStruct;
+    ULONG       TypeIndex;
+    ULONG64     Reserved[2];
+    ULONG       info;
+    ULONG       Size;
+    ULONG64     ModBase;
+    ULONG       Flags;
+    ULONG64     Value;
+    ULONG64     Address;
+    ULONG       Register;
+    ULONG       Scope;
+    ULONG       Tag;
+    ULONG       NameLen;
+    ULONG       MaxNameLen;
+    CHAR        Name[1];
+} SYMBOL_INFO, *PSYMBOL_INFO;
+
+typedef struct _SYMBOL_INFOW
+{
+    ULONG       SizeOfStruct;
+    ULONG       TypeIndex;
+    ULONG64     Reserved[2];
+    ULONG       Index;
+    ULONG       Size;
+    ULONG64     ModBase;
+    ULONG       Flags;
+    ULONG64     Value;
+    ULONG64     Address;
+    ULONG       Register;
+    ULONG       Scope;
+    ULONG       Tag;
+    ULONG       NameLen;
+    ULONG       MaxNameLen;
+    WCHAR       Name[1];
+} SYMBOL_INFOW, *PSYMBOL_INFOW;
+
+typedef struct _SYMBOL_INFO_PACKAGE
+{
+    SYMBOL_INFO si;
+    CHAR        name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
+
+typedef struct _SYMBOL_INFO_PACKAGEW
+{
+    SYMBOL_INFOW si;
+    WCHAR        name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
+
+#define DBHHEADER_DEBUGDIRS     0x1
+typedef struct _MODLOAD_DATA
+{
+    DWORD               ssize;
+    DWORD               ssig;
+    PVOID               data;
+    DWORD               size;
+    DWORD               flags;
+} MODLOAD_DATA, *PMODLOAD_DATA;
+
+typedef struct _SRCCODEINFO
+{
+    DWORD       SizeOfStruct;
+    PVOID       Key;
+    DWORD64     ModBase;
+    CHAR        Obj[MAX_PATH+1];
+    CHAR        FileName[MAX_PATH+1];
+    DWORD       LineNumber;
+    DWORD64     Address;
+} SRCCODEINFO, *PSRCCODEINFO;
+
+typedef struct _SRCCODEINFOW
+{
+    DWORD       SizeOfStruct;
+    PVOID       Key;
+    DWORD64     ModBase;
+    WCHAR       Obj[MAX_PATH+1];
+    WCHAR       FileName[MAX_PATH+1];
+    DWORD       LineNumber;
+    DWORD64     Address;
+} SRCCODEINFOW, *PSRCCODEINFOW;
+
+/***********************************************************************
+ * Callbacks
+ */
+
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(
+  PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(
+  PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
+  PCSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize,
+  PVOID UserContext
+);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(
+  PCSTR, DWORD64, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(
+  PCWSTR, DWORD64, ULONG, PVOID
+);
+
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(
+  HANDLE, PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(
+  HANDLE, PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(
+  HANDLE, PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(
+  HANDLE, PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(
+  PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(
+  PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE)(
+  IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,
+  ULONG_PTR Va, ULONG_PTR Parameter
+);
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE32)(
+  IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,
+  ULONG Va, ULONG_PTR Parameter
+);
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE64)(
+  IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,
+  ULONG64 Va, ULONG_PTR Parameter
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(
+  PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(
+  PSYMBOL_INFOW pSymInfo, ULONG SymbolSize, PVOID UserContext
+);
+
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(
+  PSRCCODEINFO, PVOID
+);
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(
+  PSRCCODEINFOW, PVOID
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(
+  PSOURCEFILE pSourceFile, PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(
+  PSOURCEFILEW pSourceFile, PVOID UserContext
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
+  PCSTR ModuleName, ULONG BaseOfDll, PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(
+  PCSTR, DWORD64, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(
+  PCWSTR, DWORD64, PVOID
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
+  PCSTR, ULONG, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(
+  PCWSTR, ULONG, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(
+  PCSTR, DWORD64, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(
+  PCWSTR, DWORD64, ULONG, PVOID
+);
+
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
+  HANDLE, DWORD, PVOID
+);
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(
+  HANDLE, ULONG64, ULONG64
+);
+
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
+  HANDLE hProcess, ULONG ActionCode, PVOID CallbackData,
+  PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(
+  HANDLE, ULONG, ULONG64, ULONG64
+);
+
+typedef BOOL (CALLBACK *DIGEST_FUNCTION)(
+  DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength
+);
+
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(
+  HANDLE  hProcess, DWORD lpBaseAddress, PVOID lpBuffer,
+  DWORD nSize, PDWORD lpNumberOfBytesRead
+);
+
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(
+  HANDLE  hProcess, DWORD64 lpBaseAddress, PVOID lpBuffer,
+  DWORD nSize, LPDWORD lpNumberOfBytesRead
+);
+
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(
+  HANDLE hProcess, DWORD AddrBase
+);
+
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
+  HANDLE hProcess, DWORD64 AddrBase
+);
+
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(
+  HANDLE hProcess, DWORD ReturnAddress);
+
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(
+  HANDLE hProcess, DWORD64 ReturnAddress);
+
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(
+  HANDLE hProcess, HANDLE hThread, LPADDRESS lpaddr
+);
+
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(
+  HANDLE hProcess, HANDLE hThread, LPADDRESS64 lpaddr
+);
+
+
+/***********************************************************************
+ * Functions
+ */
+
+BOOL WINAPI BindImage(
+  PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath
+);
+BOOL WINAPI BindImageEx(
+  DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath,
+  PIMAGEHLP_STATUS_ROUTINE StatusRoutine
+);
+PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
+  LPVOID BaseAddress, DWORD FileLength,
+  LPDWORD HeaderSum, LPDWORD CheckSum
+);
+BOOL WINAPI EnumDirTree(
+  HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID
+);
+BOOL WINAPI EnumDirTreeW(
+  HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID
+);
+BOOL WINAPI EnumerateLoadedModules(
+  HANDLE hProcess,
+  PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
+  PVOID UserContext
+);
+BOOL WINAPI EnumerateLoadedModules64(
+  HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID
+);
+BOOL WINAPI EnumerateLoadedModulesW64(
+  HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID
+);
+HANDLE WINAPI FindDebugInfoFile(
+  PCSTR FileName, PCSTR SymbolPath, PSTR DebugFilePath
+);
+HANDLE WINAPI FindDebugInfoFileEx(
+  PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID
+);
+HANDLE WINAPI FindDebugInfoFileExW(
+  PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID
+);
+HANDLE WINAPI FindExecutableImage(
+  PCSTR, PCSTR, PSTR
+);
+HANDLE WINAPI FindExecutableImageEx(
+  PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID
+);
+HANDLE WINAPI FindExecutableImageExW(
+  PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID
+);
+BOOL WINAPI FindFileInPath(
+  HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+  PSTR, PFINDFILEINPATHCALLBACK, PVOID
+);
+BOOL WINAPI GetImageConfigInformation(
+  PLOADED_IMAGE LoadedImage,
+  PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
+);
+DWORD WINAPI GetImageUnusedHeaderBytes(
+  PLOADED_IMAGE LoadedImage,
+  LPDWORD SizeUnusedHeaderBytes
+);
+DWORD WINAPI GetTimestampForLoadedLibrary(
+  HMODULE Module
+);
+BOOL WINAPI ImageAddCertificate(
+  HANDLE FileHandle, LPWIN_CERTIFICATE Certificate, PDWORD Index
+);
+PVOID WINAPI ImageDirectoryEntryToData(
+  PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size
+);
+BOOL WINAPI ImageEnumerateCertificates(
+  HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount,
+  PDWORD Indices, DWORD IndexCount
+);
+BOOL WINAPI ImageGetCertificateData(
+  HANDLE FileHandle, DWORD CertificateIndex,
+  LPWIN_CERTIFICATE Certificate, PDWORD RequiredLength
+);
+BOOL WINAPI ImageGetCertificateHeader(
+  HANDLE FileHandle, DWORD CertificateIndex,
+  LPWIN_CERTIFICATE Certificateheader
+);
+BOOL WINAPI ImageGetDigestStream(
+  HANDLE FileHandle, DWORD DigestLevel,
+  DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle
+);
+PLOADED_IMAGE WINAPI ImageLoad(
+  PCSTR DllName, PCSTR DllPath
+);
+PIMAGE_NT_HEADERS WINAPI ImageNtHeader(
+  PVOID Base
+);
+BOOL WINAPI ImageRemoveCertificate(
+  HANDLE FileHandle, DWORD Index
+);
+PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(
+  PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva
+);
+PVOID WINAPI ImageRvaToVa(
+  PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,
+  PIMAGE_SECTION_HEADER *LastRvaSection
+);
+BOOL WINAPI ImageUnload(
+  PLOADED_IMAGE LoadedImage
+);
+LPAPI_VERSION WINAPI ImagehlpApiVersion(
+  void
+);
+LPAPI_VERSION WINAPI ImagehlpApiVersionEx(
+  LPAPI_VERSION AppVersion
+);
+BOOL WINAPI MakeSureDirectoryPathExists(
+  PCSTR DirPath
+);
+BOOL WINAPI MapAndLoad(
+  PCSTR ImageName, PCSTR DllPath, PLOADED_IMAGE LoadedImage,
+  BOOL DotDll, BOOL ReadOnly
+);
+PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(
+  HANDLE FileHandle, PCSTR FileName,
+  PCSTR SymbolPath, ULONG ImageBase
+);
+DWORD WINAPI MapFileAndCheckSumA(
+  PCSTR Filename, PDWORD HeaderSum, PDWORD CheckSum
+);
+DWORD WINAPI MapFileAndCheckSumW(
+  PCWSTR Filename, PDWORD HeaderSum, PDWORD CheckSum
+);
+BOOL WINAPI ReBaseImage(
+  PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase,
+  BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
+  ULONG *OldImageSize, ULONG_PTR *OldImageBase, ULONG *NewImageSize,
+  ULONG_PTR *NewImageBase, ULONG TimeStamp
+);
+BOOL WINAPI ReBaseImage64(
+  PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase,
+  BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
+  ULONG *OldImageSize, ULONG64 *OldImageBase, ULONG *NewImageSize,
+  ULONG64 *NewImageBase, ULONG TimeStamp
+);
+BOOL WINAPI RemovePrivateCvSymbolic(
+  PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize
+);
+BOOL WINAPI SearchTreeForFile(
+  PCSTR RootPath, PCSTR InputPathName, PSTR OutputPathBuffer
+);
+BOOL WINAPI SearchTreeForFileW(
+  PCWSTR RootPath, PCWSTR InputPathName, PWSTR OutputPathBuffer
+);
+BOOL WINAPI SetImageConfigInformation(
+  PLOADED_IMAGE LoadedImage,
+  PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
+);
+BOOL WINAPI SplitSymbols(
+  PSTR ImageName, PCSTR SymbolsPath,
+  PSTR SymbolFilePath, ULONG Flags
+);
+BOOL WINAPI StackWalk(
+  DWORD MachineType, HANDLE hProcess, HANDLE hThread,
+  LPSTACKFRAME StackFrame, PVOID ContextRecord,
+  PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
+  PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
+  PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
+  PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
+);
+BOOL WINAPI StackWalk64(
+  DWORD MachineType, HANDLE hProcess, HANDLE hThread,
+  LPSTACKFRAME64 StackFrame, PVOID ContextRecord,
+  PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
+  PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
+  PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
+  PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress
+);
+BOOL WINAPI SymAddSymbol(
+  HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD
+);
+BOOL WINAPI SymAddSymbolW(
+  HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD
+);
+BOOL WINAPI SymCleanup(
+  HANDLE hProcess
+);
+BOOL WINAPI SymDeleteSymbol(
+  HANDLE, ULONG64, PCSTR, DWORD64, DWORD
+);
+BOOL WINAPI SymDeleteSymbolW(
+  HANDLE, ULONG64, PCWSTR, DWORD64, DWORD
+);
+BOOL WINAPI SymEnumerateModules(
+  HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
+  PVOID UserContext
+);
+BOOL WINAPI SymEnumerateModules64(
+  HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID
+);
+BOOL WINAPI SymEnumerateModulesW64(
+  HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID
+);
+BOOL WINAPI SymEnumerateSymbols(
+  HANDLE hProcess, DWORD BaseOfDll,
+  PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumerateSymbolsW(
+  HANDLE hProcess, DWORD BaseOfDll,
+  PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumerateSymbols64(
+  HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID
+);
+BOOL WINAPI SymEnumerateSymbolsW64(
+  HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID
+);
+BOOL WINAPI SymEnumLines(
+  HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumLinesW(
+  HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID
+);
+BOOL WINAPI SymEnumSourceFiles(
+  HANDLE hProcess, ULONG64 ModBase, PCSTR Mask,
+  PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles, PVOID UserContext
+);
+BOOL WINAPI SymEnumSourceFilesW(
+  HANDLE hProcess, ULONG64 ModBase, PCWSTR Mask,
+  PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles, PVOID UserContext
+);
+BOOL WINAPI SymEnumSourceLines(
+  HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumSourceLinesW(
+  HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID
+);
+BOOL WINAPI SymEnumSymbols(
+  HANDLE hProcess, DWORD BaseOfDll, PCSTR Mask, 
+  PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumSymbolsW(
+  HANDLE hProcess, DWORD BaseOfDll, PCWSTR Mask,
+  PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumSymbolsForAddr(
+  HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumSymbolsForAddrW(
+  HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID
+);
+BOOL WINAPI SymEnumTypes(
+  HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumTypesW(
+  HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID
+);
+HANDLE WINAPI SymFindExecutableImage(
+  HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID
+);
+HANDLE WINAPI SymFindExecutableImageW(
+  HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID
+);
+BOOL WINAPI SymFindFileInPath(
+  HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+  PSTR, PFINDFILEINPATHCALLBACK, PVOID
+);
+BOOL WINAPI SymFindFileInPathW(
+  HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
+  PWSTR, PFINDFILEINPATHCALLBACKW, PVOID
+);
+BOOL WINAPI SymFromAddr(
+  HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*
+);
+BOOL WINAPI SymFromAddrW(
+  HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*
+);
+BOOL WINAPI SymFromIndex(
+  HANDLE, ULONG64, DWORD, PSYMBOL_INFO
+);
+BOOL WINAPI SymFromIndexW(
+  HANDLE, ULONG64, DWORD, PSYMBOL_INFOW
+);
+BOOL WINAPI SymFromName(
+  HANDLE, PCSTR, PSYMBOL_INFO
+);
+BOOL WINAPI SymFromNameW(
+  HANDLE, PCWSTR, PSYMBOL_INFOW
+);
+BOOL WINAPI SymFromToken(
+  HANDLE, DWORD64, DWORD, PSYMBOL_INFO
+);
+BOOL WINAPI SymFromTokenW(
+  HANDLE, DWORD64, DWORD, PSYMBOL_INFOW
+);
+PVOID WINAPI SymFunctionTableAccess(
+  HANDLE hProcess, DWORD AddrBase
+);
+PVOID WINAPI SymFunctionTableAccess64(
+  HANDLE hProcess, DWORD64 AddrBase
+);
+ULONG WINAPI SymGetFileLineOffsets64(
+  HANDLE, PCSTR, PCSTR, PDWORD64, ULONG
+);
+PCHAR WINAPI SymGetHomeDirectory(
+  DWORD, PSTR, size_t
+);
+PWSTR WINAPI SymGetHomeDirectoryW(
+  DWORD, PWSTR, size_t
+);
+BOOL WINAPI SymGetLineFromAddr(
+  HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLineFromAddrW(
+  HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW
+);
+BOOL WINAPI SymGetLineFromAddr64(
+  HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLineFromAddrW64(
+  HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64
+);
+BOOL WINAPI SymGetLineFromName(
+  HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLineFromName64(
+  HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLineFromNameW64(
+  HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64
+);
+BOOL WINAPI SymGetLineNext(
+  HANDLE, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLineNextW(
+  HANDLE, PIMAGEHLP_LINEW
+);
+BOOL WINAPI SymGetLineNext64(
+  HANDLE, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLineNextW64(
+  HANDLE, PIMAGEHLP_LINEW64
+);
+BOOL WINAPI SymGetLinePrev(
+  HANDLE, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLinePrevW(
+  HANDLE, PIMAGEHLP_LINEW
+);
+BOOL WINAPI SymGetLinePrev64(
+  HANDLE, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLinePrevW64(
+  HANDLE, PIMAGEHLP_LINEW64
+);
+DWORD WINAPI SymGetModuleBase(
+  HANDLE hProcess, DWORD dwAddr
+);
+BOOL WINAPI SymGetModuleInfo(
+  HANDLE hProcess, DWORD dwAddr,
+  PIMAGEHLP_MODULE ModuleInfo
+);
+BOOL WINAPI SymGetModuleInfoW(
+  HANDLE, DWORD, PIMAGEHLP_MODULEW
+);
+BOOL WINAPI SymGetModuleInfo64(
+  HANDLE, DWORD64, PIMAGEHLP_MODULE64
+);
+BOOL WINAPI SymGetModuleInfoW64(
+  HANDLE, DWORD64, PIMAGEHLP_MODULEW64
+);
+DWORD WINAPI SymGetOptions(
+  void
+);
+BOOL WINAPI SymGetScope(
+  HANDLE, ULONG64, DWORD, PSYMBOL_INFO
+);
+BOOL WINAPI SymGetScopeW(
+  HANDLE, ULONG64, DWORD, PSYMBOL_INFOW
+);
+BOOL WINAPI SymGetSearchPath(
+  HANDLE hProcess, PSTR szSearchPath, DWORD SearchPathLength
+);
+BOOL WINAPI SymGetSearchPathW(
+  HANDLE hProcess, PWSTR szSearchPath, DWORD SearchPathLength
+);
+BOOL WINAPI SymGetSourceFile(
+  HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileW(
+  HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileFromToken(
+  HANDLE, PVOID, PCSTR, PSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileFromTokenW(
+  HANDLE, PVOID, PCWSTR, PWSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileToken(
+  HANDLE, ULONG64, PCSTR, PVOID*, DWORD*
+);
+BOOL WINAPI SymGetSourceFileTokenW(
+  HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*
+);
+BOOL WINAPI SymGetSourceVarFromToken(
+  HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD
+);
+BOOL WINAPI SymGetSourceVarFromTokenW(
+  HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD
+);
+BOOL WINAPI SymGetSymFromAddr(
+  HANDLE hProcess, DWORD dwAddr,
+  PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymFromAddr64(
+  HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetSymFromName(
+  HANDLE hProcess, PCSTR Name, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymFromName64(
+  HANDLE, PCSTR, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetSymNext(
+  HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymNext64(
+  HANDLE, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetSymPrev(
+  HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymPrev64(
+  HANDLE, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetTypeFromName(
+  HANDLE, ULONG64, PCSTR, PSYMBOL_INFO
+);
+BOOL WINAPI SymGetTypeFromNameW(
+  HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW
+);
+BOOL WINAPI SymGetTypeInfo(
+  HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID
+);
+BOOL WINAPI SymGetTypeInfoEx(
+  HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS
+);
+BOOL WINAPI SymInitialize(
+  HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess
+);
+BOOL WINAPI SymInitializeW(
+  HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess
+);
+DWORD WINAPI SymLoadModule(
+  HANDLE hProcess, HANDLE hFile, PCSTR ImageName, PCSTR ModuleName,
+  DWORD BaseOfDll, DWORD SizeOfDll
+);
+DWORD64 WINAPI SymLoadModule64(
+  HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD
+);
+DWORD64 WINAPI SymLoadModuleEx(
+  HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD
+);
+DWORD64 WINAPI SymLoadModuleExW(
+  HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD
+);
+BOOL WINAPI SymMatchFileName(
+  PCSTR, PCSTR, PSTR*, PSTR*
+);
+BOOL WINAPI SymMatchFileNameW(
+  PCWSTR, PCWSTR, PWSTR*, PWSTR*
+);
+BOOL WINAPI SymMatchString(
+  PCSTR, PCSTR, BOOL
+);
+BOOL WINAPI SymMatchStringA(
+  PCSTR, PCSTR, BOOL
+);
+BOOL WINAPI SymMatchStringW(
+  PCWSTR, PCWSTR, BOOL
+);
+BOOL WINAPI SymRegisterCallback(
+  HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
+  PVOID UserContext
+);
+BOOL WINAPI SymRegisterCallback64(
+  HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64
+);
+BOOL WINAPI SymRegisterCallbackW64(
+  HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64
+);
+BOOL WINAPI SymRegisterFunctionEntryCallback(
+  HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID
+);
+BOOL WINAPI SymRegisterFunctionEntryCallback64(
+  HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64
+);
+BOOL WINAPI SymSearch(
+  HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64,
+  PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD
+);
+BOOL WINAPI SymSearchW(
+  HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64,
+  PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD
+);
+DWORD WINAPI SymSetContext(
+  HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame, 
+  PIMAGEHLP_CONTEXT Context
+);
+PCHAR WINAPI SymSetHomeDirectory(
+  HANDLE, PCSTR
+);
+PWSTR WINAPI SymSetHomeDirectoryW(
+  HANDLE, PCWSTR
+);
+DWORD WINAPI SymSetOptions(
+  DWORD SymOptions
+);
+BOOL WINAPI SymSetParentWindow(
+  HWND
+);
+BOOL WINAPI SymSetSearchPath(
+  HANDLE hProcess, PCSTR szSearchPath
+);
+BOOL WINAPI SymSetSearchPathW(
+  HANDLE hProcess, PCWSTR szSearchPath
+);
+BOOL WINAPI SymUnDName(
+  PIMAGEHLP_SYMBOL sym, PSTR UnDecName, DWORD UnDecNameLength
+);
+BOOL WINAPI SymUnDName64(
+  PIMAGEHLP_SYMBOL64, PSTR, DWORD
+);
+BOOL WINAPI SymUnloadModule(
+  HANDLE hProcess, DWORD BaseOfDll
+);
+BOOL WINAPI TouchFileTimes(
+  HANDLE FileHandle, LPSYSTEMTIME lpSystemTime
+);
+DWORD WINAPI UnDecorateSymbolName(
+  PCSTR DecoratedName, PSTR UnDecoratedName,
+  DWORD UndecoratedLength, DWORD Flags
+);
+DWORD WINAPI UnDecorateSymbolNameW(
+  PCWSTR DecoratedName, PWSTR UnDecoratedName,
+  DWORD UndecoratedLength, DWORD Flags
+);
+BOOL WINAPI UnMapAndLoad(
+  PLOADED_IMAGE LoadedImage
+);
+BOOL WINAPI UnmapDebugInformation(
+  PIMAGE_DEBUG_INFORMATION DebugInfo
+);
+BOOL WINAPI UpdateDebugInfoFile(
+  PCSTR ImageFileName, PCSTR SymbolPath,
+  PSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders
+);
+BOOL WINAPI UpdateDebugInfoFileEx(
+  PCSTR ImageFileName, PCSTR SymbolPath, PSTR DebugFilePath,
+  PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum
+);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_IMAGEHLP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h
new file mode 100644
index 0000000..64e8de8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h
@@ -0,0 +1,587 @@
+/*
+ * Declarations for IMM32
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IMM_H
+#define __WINE_IMM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef HANDLE HIMC;
+typedef HANDLE HIMCC;
+
+typedef struct tagREGISTERWORDA {
+    LPSTR lpReading;
+    LPSTR lpWord;
+} REGISTERWORDA, *PREGISTERWORDA, *NPREGISTERWORDA, *LPREGISTERWORDA;
+
+typedef struct tagREGISTERWORDW {
+    LPWSTR lpReading;
+    LPWSTR lpWord;
+} REGISTERWORDW, *PREGISTERWORDW, *NPREGISTERWORDW, *LPREGISTERWORDW;
+
+typedef int (CALLBACK *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID);
+typedef int (CALLBACK *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID);
+
+typedef struct tagCANDIDATEFORM
+{
+				DWORD   dwIndex;
+				DWORD   dwStyle;
+				POINT ptCurrentPos;
+				RECT  rcArea;
+} CANDIDATEFORM, *LPCANDIDATEFORM;
+
+typedef struct tagCANDIDATELIST
+{
+				DWORD dwSize;
+				DWORD dwStyle;
+				DWORD dwCount;
+				DWORD dwSelection;
+				DWORD dwPageStart;
+				DWORD dwPageSize;
+				DWORD dwOffset[1];
+} CANDIDATELIST, *LPCANDIDATELIST;
+
+typedef struct tagSTYLEBUFA
+{
+				DWORD dwStyle;
+				CHAR  szDescription[32];
+} STYLEBUFA, *LPSTYLEBUFA;
+
+typedef struct tagSTYLEBUFW
+{
+				DWORD dwStyle;
+				WCHAR  szDescription[32];
+} STYLEBUFW, *LPSTYLEBUFW;
+
+DECL_WINELIB_TYPE_AW(STYLEBUF)
+DECL_WINELIB_TYPE_AW(LPSTYLEBUF)
+
+typedef struct tagRECONVERTSTRING
+{
+	DWORD	dwSize;
+	DWORD	dwVersion;
+	DWORD	dwStrLen;
+	DWORD	dwStrOffset;
+	DWORD	dwCompStrLen;
+	DWORD	dwCompStrOffset;
+	DWORD	dwTargetStrLen;
+	DWORD	dwTargetStrOffset;
+} RECONVERTSTRING, *LPRECONVERTSTRING;
+
+
+#define IMEMENUITEM_STRING_SIZE 80
+
+typedef struct tagIMEMENUITEMINFOA
+{
+	UINT		cbSize;
+	UINT		fType;
+	UINT		fState;
+	UINT		wID;
+	HBITMAP		hbmpChecked;
+	HBITMAP		hbmpUnchecked;
+	DWORD		dwItemData;
+	CHAR		szString[IMEMENUITEM_STRING_SIZE];
+	HBITMAP		hbmpItem;
+} IMEMENUITEMINFOA, *LPIMEMENUITEMINFOA;
+
+typedef struct tagIMEMENUITEMINFOW
+{
+	UINT		cbSize;
+	UINT		fType;
+	UINT		fState;
+	UINT		wID;
+	HBITMAP		hbmpChecked;
+	HBITMAP		hbmpUnchecked;
+	DWORD		dwItemData;
+	WCHAR		szString[IMEMENUITEM_STRING_SIZE];
+	HBITMAP		hbmpItem;
+} IMEMENUITEMINFOW, *LPIMEMENUITEMINFOW;
+
+DECL_WINELIB_TYPE_AW(IMEMENUITEMINFO)
+DECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO)
+
+
+typedef struct _tagCOMPOSITIONFORM
+{
+				DWORD   dwStyle;
+				POINT ptCurrentPos;
+				RECT  rcArea;
+} COMPOSITIONFORM, *LPCOMPOSITIONFORM;
+
+typedef BOOL (CALLBACK* IMCENUMPROC)(HIMC, LPARAM);
+
+typedef struct _tagIMECHARPOSITION
+{
+    DWORD dwSize;
+    DWORD dwCharPos;
+    POINT pt;
+    UINT  cLineHeight;
+    RECT  rcDocument;
+} IMECHARPOSITION, *LPIMECHARPOSITION;
+
+/* wParam for WM_IME_CONTROL */
+#define IMC_GETCANDIDATEPOS             0x0007
+#define IMC_SETCANDIDATEPOS             0x0008
+#define IMC_GETCOMPOSITIONFONT          0x0009
+#define IMC_SETCOMPOSITIONFONT          0x000A
+#define IMC_GETCOMPOSITIONWINDOW        0x000B
+#define IMC_SETCOMPOSITIONWINDOW        0x000C
+#define IMC_GETSTATUSWINDOWPOS          0x000F
+#define IMC_SETSTATUSWINDOWPOS          0x0010
+#define IMC_CLOSESTATUSWINDOW           0x0021
+#define IMC_OPENSTATUSWINDOW            0x0022
+
+/*
+ * wParam for WM_IME_CONTROL to the soft keyboard
+ * dwAction for ImmNotifyIME
+ */
+#define NI_OPENCANDIDATE                0x0010
+#define NI_CLOSECANDIDATE               0x0011
+#define NI_SELECTCANDIDATESTR           0x0012
+#define NI_CHANGECANDIDATELIST          0x0013
+#define NI_FINALIZECONVERSIONRESULT     0x0014
+#define NI_COMPOSITIONSTR               0x0015
+#define NI_SETCANDIDATE_PAGESTART       0x0016
+#define NI_SETCANDIDATE_PAGESIZE        0x0017
+#define NI_IMEMENUSELECTED		0x0018
+
+/* lParam for WM_IME_SETCONTEXT */
+#define ISC_SHOWUICANDIDATEWINDOW       0x00000001
+#define ISC_SHOWUICOMPOSITIONWINDOW     0x80000000
+#define ISC_SHOWUIGUIDELINE             0x40000000
+#define ISC_SHOWUIALLCANDIDATEWINDOW    0x0000000F
+#define ISC_SHOWUIALL                   0xC000000F
+
+
+/* dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR */
+#define CPS_COMPLETE                    0x0001
+#define CPS_CONVERT                     0x0002
+#define CPS_REVERT                      0x0003
+#define CPS_CANCEL                      0x0004
+
+
+/* the modifiers of hot key */
+#define MOD_ALT                         0x0001
+#define MOD_CONTROL                     0x0002
+#define MOD_SHIFT                       0x0004
+
+#define MOD_LEFT                        0x8000
+#define MOD_RIGHT                       0x4000
+
+#define MOD_ON_KEYUP                    0x0800
+#define MOD_IGNORE_ALL_MODIFIER         0x0400
+
+
+/* Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F */
+#define IME_CHOTKEY_IME_NONIME_TOGGLE           0x10
+#define IME_CHOTKEY_SHAPE_TOGGLE                0x11
+#define IME_CHOTKEY_SYMBOL_TOGGLE               0x12
+
+/* Windows for Japanese Edition hot key ID from 0x30 - 0x4F */
+#define IME_JHOTKEY_CLOSE_OPEN                  0x30
+
+/* Windows for Korean Edition hot key ID from 0x50 - 0x6F */
+#define IME_KHOTKEY_SHAPE_TOGGLE                0x50
+#define IME_KHOTKEY_HANJACONVERT                0x51
+#define IME_KHOTKEY_ENGLISH                     0x52
+/* Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F */
+#define IME_THOTKEY_IME_NONIME_TOGGLE           0x70
+#define IME_THOTKEY_SHAPE_TOGGLE                0x71
+#define IME_THOTKEY_SYMBOL_TOGGLE               0x72
+
+/* direct switch hot key ID from 0x100 - 0x11F */
+#define IME_HOTKEY_DSWITCH_FIRST                0x100
+#define IME_HOTKEY_DSWITCH_LAST                 0x11F
+
+/* IME private hot key from 0x200 - 0x21F */
+#define IME_HOTKEY_PRIVATE_FIRST                0x200
+#define IME_ITHOTKEY_RESEND_RESULTSTR           0x200
+#define IME_ITHOTKEY_PREVIOUS_COMPOSITION       0x201
+#define IME_ITHOTKEY_UISTYLE_TOGGLE             0x202
+#define IME_ITHOTKEY_RECONVERTSTRING		0x203
+#define IME_HOTKEY_PRIVATE_LAST                 0x21F
+
+
+/*
+ * dwSystemInfoFlags bits
+ * parameter of ImmGetCompositionString
+ */
+#define GCS_COMPREADSTR                 0x0001
+#define GCS_COMPREADATTR                0x0002
+#define GCS_COMPREADCLAUSE              0x0004
+#define GCS_COMPSTR                     0x0008
+#define GCS_COMPATTR                    0x0010
+#define GCS_COMPCLAUSE                  0x0020
+#define GCS_CURSORPOS                   0x0080
+#define GCS_DELTASTART                  0x0100
+#define GCS_RESULTREADSTR               0x0200
+#define GCS_RESULTREADCLAUSE            0x0400
+#define GCS_RESULTSTR                   0x0800
+#define GCS_RESULTCLAUSE                0x1000
+
+/* style bit flags for WM_IME_COMPOSITION */
+#define CS_INSERTCHAR                   0x2000
+#define CS_NOMOVECARET                  0x4000
+
+
+/*
+ * bits of fdwInit of INPUTCONTEXT
+ * IME version constants
+ */
+#define IMEVER_0310                     0x0003000A
+#define IMEVER_0400                     0x00040000
+
+
+/* IME property bits */
+#define IME_PROP_AT_CARET               0x00010000
+#define IME_PROP_SPECIAL_UI             0x00020000
+#define IME_PROP_CANDLIST_START_FROM_1  0x00040000
+#define IME_PROP_UNICODE                0x00080000
+#define IME_PROP_COMPLETE_ON_UNSELECT	0x00100000
+
+
+/* IME UICapability bits */
+#define UI_CAP_2700                     0x00000001
+#define UI_CAP_ROT90                    0x00000002
+#define UI_CAP_ROTANY                   0x00000004
+/* ImmSetCompositionString Capability bits */
+#define SCS_CAP_COMPSTR                 0x00000001
+#define SCS_CAP_MAKEREAD                0x00000002
+#define SCS_CAP_SETRECONVERTSTRING	0x00000004
+
+
+/* IME WM_IME_SELECT inheritance Capability bits */
+#define SELECT_CAP_CONVERSION           0x00000001
+#define SELECT_CAP_SENTENCE             0x00000002
+
+
+/* ID for deIndex of ImmGetGuideLine */
+#define GGL_LEVEL                       0x00000001
+#define GGL_INDEX                       0x00000002
+#define GGL_STRING                      0x00000003
+#define GGL_PRIVATE                     0x00000004
+
+/* ID for dwLevel of GUIDELINE Structure */
+#define GL_LEVEL_NOGUIDELINE            0x00000000
+#define GL_LEVEL_FATAL                  0x00000001
+#define GL_LEVEL_ERROR                  0x00000002
+#define GL_LEVEL_WARNING                0x00000003
+#define GL_LEVEL_INFORMATION            0x00000004
+
+/* ID for dwIndex of GUIDELINE Structure */
+#define GL_ID_UNKNOWN                   0x00000000
+#define GL_ID_NOMODULE                  0x00000001
+#define GL_ID_NODICTIONARY              0x00000010
+#define GL_ID_CANNOTSAVE                0x00000011
+#define GL_ID_NOCONVERT                 0x00000020
+#define GL_ID_TYPINGERROR               0x00000021
+#define GL_ID_TOOMANYSTROKE             0x00000022
+#define GL_ID_READINGCONFLICT           0x00000023
+#define GL_ID_INPUTREADING              0x00000024
+#define GL_ID_INPUTRADICAL              0x00000025
+#define GL_ID_INPUTCODE                 0x00000026
+#define GL_ID_INPUTSYMBOL               0x00000027
+#define GL_ID_CHOOSECANDIDATE           0x00000028
+#define GL_ID_REVERSECONVERSION         0x00000029
+#define GL_ID_PRIVATE_FIRST             0x00008000
+#define GL_ID_PRIVATE_LAST              0x0000FFFF
+
+/* ID for dwIndex of ImmGetProperty */
+#define IGP_GETIMEVERSION               (DWORD)(-4)
+#define IGP_PROPERTY                    0x00000004
+#define IGP_CONVERSION                  0x00000008
+#define IGP_SENTENCE                    0x0000000c
+#define IGP_UI                          0x00000010
+#define IGP_SETCOMPSTR                  0x00000014
+#define IGP_SELECT                      0x00000018
+
+
+/* dwIndex for ImmSetCompositionString API */
+#define SCS_SETSTR          (GCS_COMPREADSTR|GCS_COMPSTR)
+#define SCS_CHANGEATTR      (GCS_COMPREADATTR|GCS_COMPATTR)
+#define SCS_CHANGECLAUSE    (GCS_COMPREADCLAUSE|GCS_COMPCLAUSE)
+#define SCS_SETRECONVERTSTRING		0x00010000
+#define SCS_QUERYRECONVERTSTRING	0x00020000
+
+/* attribute for COMPOSITIONSTRING Structure */
+#define ATTR_INPUT                      0x00
+#define ATTR_TARGET_CONVERTED           0x01
+#define ATTR_CONVERTED                  0x02
+#define ATTR_TARGET_NOTCONVERTED        0x03
+#define ATTR_INPUT_ERROR                0x04
+#define ATTR_FIXEDCONVERTED		0x05
+
+
+/* bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW */
+#define CFS_DEFAULT                     0x0000
+#define CFS_RECT                        0x0001
+#define CFS_POINT                       0x0002
+#define CFS_FORCE_POSITION              0x0020
+#define CFS_CANDIDATEPOS                0x0040
+#define CFS_EXCLUDE                     0x0080
+
+/* conversion direction for ImmGetConversionList */
+#define GCL_CONVERSION                  0x0001
+#define GCL_REVERSECONVERSION           0x0002
+#define GCL_REVERSE_LENGTH              0x0003
+
+
+/* bit field for conversion mode */
+#define IME_CMODE_ALPHANUMERIC          0x0000
+#define IME_CMODE_NATIVE                0x0001
+#define IME_CMODE_CHINESE               IME_CMODE_NATIVE
+/* IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually. */
+#define IME_CMODE_HANGEUL               IME_CMODE_NATIVE
+#define IME_CMODE_HANGUL                IME_CMODE_NATIVE
+#define IME_CMODE_JAPANESE              IME_CMODE_NATIVE
+#define IME_CMODE_KATAKANA              0x0002  /* only effect under IME_CMODE_NATIVE */
+#define IME_CMODE_LANGUAGE              0x0003
+#define IME_CMODE_FULLSHAPE             0x0008
+#define IME_CMODE_ROMAN                 0x0010
+#define IME_CMODE_CHARCODE              0x0020
+#define IME_CMODE_HANJACONVERT          0x0040
+#define IME_CMODE_SOFTKBD               0x0080
+#define IME_CMODE_NOCONVERSION          0x0100
+#define IME_CMODE_EUDC                  0x0200
+#define IME_CMODE_SYMBOL                0x0400
+#define IME_CMODE_FIXED			0x0800
+
+
+#define IME_SMODE_NONE                  0x0000
+#define IME_SMODE_PLAURALCLAUSE         0x0001
+#define IME_SMODE_SINGLECONVERT         0x0002
+#define IME_SMODE_AUTOMATIC             0x0004
+#define IME_SMODE_PHRASEPREDICT         0x0008
+#define IME_SMODE_CONVERSATION		0x0010
+
+/* style of candidate */
+#define IME_CAND_UNKNOWN                0x0000
+#define IME_CAND_READ                   0x0001
+#define IME_CAND_CODE                   0x0002
+#define IME_CAND_MEANING                0x0003
+#define IME_CAND_RADICAL                0x0004
+#define IME_CAND_STROKE                 0x0005
+
+
+/* wParam of report message WM_IME_NOTIFY */
+#define IMN_CLOSESTATUSWINDOW           0x0001
+#define IMN_OPENSTATUSWINDOW            0x0002
+#define IMN_CHANGECANDIDATE             0x0003
+#define IMN_CLOSECANDIDATE              0x0004
+#define IMN_OPENCANDIDATE               0x0005
+#define IMN_SETCONVERSIONMODE           0x0006
+#define IMN_SETSENTENCEMODE             0x0007
+#define IMN_SETOPENSTATUS               0x0008
+#define IMN_SETCANDIDATEPOS             0x0009
+#define IMN_SETCOMPOSITIONFONT          0x000A
+#define IMN_SETCOMPOSITIONWINDOW        0x000B
+#define IMN_SETSTATUSWINDOWPOS          0x000C
+#define IMN_GUIDELINE                   0x000D
+#define IMN_PRIVATE                     0x000E
+
+
+/* wParam of report message WM_IME_REQUEST */
+#define IMR_COMPOSITIONWINDOW		0x0001
+#define IMR_CANDIDATEWINDOW		0x0002
+#define IMR_COMPOSITIONFONT		0x0003
+#define IMR_RECONVERTSTRING		0x0004
+#define IMR_CONFIRMRECONVERTSTRING	0x0005
+#define IMR_QUERYCHARPOSITION		0x0006
+#define IMR_DOCUMENTFEED		0x0007
+
+
+/* error code of ImmGetCompositionString */
+#define IMM_ERROR_NODATA                (-1)
+#define IMM_ERROR_GENERAL               (-2)
+
+
+/* dialog mode of ImmConfigureIME */
+#define IME_CONFIG_GENERAL              1
+#define IME_CONFIG_REGISTERWORD         2
+#define IME_CONFIG_SELECTDICTIONARY     3
+
+/* dialog mode of ImmEscape */
+#define IME_ESC_QUERY_SUPPORT           0x0003
+#define IME_ESC_RESERVED_FIRST          0x0004
+#define IME_ESC_RESERVED_LAST           0x07FF
+#define IME_ESC_PRIVATE_FIRST           0x0800
+#define IME_ESC_PRIVATE_LAST            0x0FFF
+#define IME_ESC_SEQUENCE_TO_INTERNAL    0x1001
+#define IME_ESC_GET_EUDC_DICTIONARY     0x1003
+#define IME_ESC_SET_EUDC_DICTIONARY     0x1004
+#define IME_ESC_MAX_KEY                 0x1005
+#define IME_ESC_IME_NAME                0x1006
+#define IME_ESC_SYNC_HOTKEY             0x1007
+#define IME_ESC_HANJA_MODE              0x1008
+#define IME_ESC_AUTOMATA                0x1009
+#define IME_ESC_PRIVATE_HOTKEY          0x100a
+#define IME_ESC_GETHELPFILENAME		0x100b
+
+
+/* style of word registration */
+#define IME_REGWORD_STYLE_EUDC          0x00000001
+#define IME_REGWORD_STYLE_USER_FIRST    0x80000000
+#define IME_REGWORD_STYLE_USER_LAST     0xFFFFFFFF
+
+
+/* dwFlags for ImmAssociateContextEx */
+#define IACE_CHILDREN			0x0001
+#define IACE_DEFAULT			0x0010
+#define IACE_IGNORENOCONTEXT		0x0020
+
+/* dwFlags for ImmGetImeMenuItems */
+#define IGIMIF_RIGHTMENU		0x0001
+
+/* dwType for ImmGetImeMenuItems */
+#define IGIMII_CMODE			0x0001
+#define IGIMII_SMODE			0x0002
+#define IGIMII_CONFIGURE		0x0004
+#define IGIMII_TOOLS			0x0008
+#define IGIMII_HELP			0x0010
+#define IGIMII_OTHER			0x0020
+#define IGIMII_INPUTTOOLS		0x0040
+
+/* fType of IMEMENUITEMINFO structure */
+#define IMFT_RADIOCHECK			0x00001
+#define IMFT_SEPARATOR			0x00002
+#define IMFT_SUBMENU			0x00004
+
+/* fState of IMEMENUITEMINFO structure */
+#define IMFS_GRAYED			MFS_GRAYED
+#define IMFS_DISABLED			MFS_DISABLED
+#define IMFS_CHECKED			MFS_CHECKED
+#define IMFS_HILITE			MFS_HILITE
+#define IMFS_ENABLED			MFS_ENABLED
+#define IMFS_UNCHECKED			MFS_UNCHECKED
+#define IMFS_UNHILITE			MFS_UNHILITE
+#define IMFS_DEFAULT			MFS_DEFAULT
+
+
+/*
+ * type of soft keyboard
+ * for Windows Traditional Chinese Edition
+ */
+#define SOFTKEYBOARD_TYPE_T1            0x0001
+/* for Windows Simplified Chinese Edition */
+#define SOFTKEYBOARD_TYPE_C1            0x0002
+
+
+HIMC   WINAPI ImmAssociateContext(HWND, HIMC);
+BOOL   WINAPI ImmAssociateContextEx(HWND, HIMC, DWORD);
+BOOL   WINAPI ImmConfigureIMEA(HKL, HWND, DWORD, LPVOID);
+BOOL   WINAPI ImmConfigureIMEW(HKL, HWND, DWORD, LPVOID);
+#define  ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME)
+HIMC   WINAPI ImmCreateContext(void);
+BOOL   WINAPI ImmDestroyContext(HIMC hIMC);
+BOOL   WINAPI ImmDisableIME(DWORD idThread);
+BOOL   WINAPI ImmEnumInputContext(DWORD, IMCENUMPROC, LPARAM);
+UINT   WINAPI ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID);
+UINT   WINAPI ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
+#define  ImmEnumRegisterWord WINELIB_NAME_AW(ImmEnumRegisterWord)
+LRESULT  WINAPI ImmEscapeA(HKL, HIMC, UINT, LPVOID);
+LRESULT  WINAPI ImmEscapeW(HKL, HIMC, UINT, LPVOID);
+#define  ImmEscape WINELIB_NAME_AW(ImmEscape)
+DWORD    WINAPI ImmGetCandidateListA(HIMC, DWORD, LPCANDIDATELIST, DWORD);
+DWORD    WINAPI ImmGetCandidateListW(HIMC, DWORD, LPCANDIDATELIST, DWORD);
+#define  ImmGetCandidateList WINELIB_NAME_AW(ImmGetCandidateList)
+DWORD    WINAPI ImmGetCandidateListCountA(HIMC, LPDWORD);
+DWORD    WINAPI ImmGetCandidateListCountW(HIMC, LPDWORD);
+#define  ImmGetCandidateListCount WINELIB_NAME_AW(ImmGetCandidateListCount)
+BOOL   WINAPI ImmGetCandidateWindow(HIMC, DWORD, LPCANDIDATEFORM);
+#if defined(_WINGDI_) && !defined(NOGDI)
+BOOL   WINAPI ImmGetCompositionFontA(HIMC, LPLOGFONTA);
+BOOL   WINAPI ImmGetCompositionFontW(HIMC, LPLOGFONTW);
+#define  ImmGetCompositionFont WINELIB_NAME_AW(ImmGetCompositionFont)
+BOOL   WINAPI ImmSetCompositionFontA(HIMC, LPLOGFONTA);
+BOOL   WINAPI ImmSetCompositionFontW(HIMC, LPLOGFONTW);
+#define  ImmSetCompositionFont WINELIB_NAME_AW(ImmSetCompositionFont)
+#endif
+LONG     WINAPI ImmGetCompositionStringA(HIMC, DWORD, LPVOID, DWORD);
+LONG     WINAPI ImmGetCompositionStringW(HIMC, DWORD, LPVOID, DWORD);
+#define  ImmGetCompositionString WINELIB_NAME_AW(ImmGetCompositionString)
+BOOL   WINAPI ImmGetCompositionWindow(HIMC, LPCOMPOSITIONFORM);
+HIMC   WINAPI ImmGetContext(HWND);
+DWORD    WINAPI ImmGetConversionListA(HKL, HIMC, LPCSTR, LPCANDIDATELIST, DWORD, UINT);
+DWORD    WINAPI ImmGetConversionListW(HKL, HIMC, LPCWSTR, LPCANDIDATELIST, DWORD, UINT);
+#define  ImmGetConversionList WINELIB_NAME_AW(ImmGetConversionList)
+BOOL   WINAPI ImmGetConversionStatus(HIMC, LPDWORD, LPDWORD);
+HWND   WINAPI ImmGetDefaultIMEWnd(HWND);
+UINT   WINAPI ImmGetDescriptionA(HKL, LPSTR, UINT);
+UINT   WINAPI ImmGetDescriptionW(HKL, LPWSTR, UINT);
+#define  ImmGetDescription WINELIB_NAME_AW(ImmGetDescription)
+DWORD    WINAPI ImmGetGuideLineA(HIMC, DWORD, LPSTR, DWORD);
+DWORD    WINAPI ImmGetGuideLineW(HIMC, DWORD, LPWSTR, DWORD);
+#define  ImmGetGuideLine WINELIB_NAME_AW(ImmGetGuideLine)
+UINT   WINAPI ImmGetIMEFileNameA(HKL, LPSTR, UINT);
+UINT   WINAPI ImmGetIMEFileNameW(HKL, LPWSTR, UINT);
+#define  ImmGetIMEFileName WINELIB_NAME_AW(ImmGetIMEFileName)
+DWORD  WINAPI ImmGetImeMenuItemsA(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD);
+DWORD  WINAPI ImmGetImeMenuItemsW(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
+#define ImmGetImeMenuItems  WINELIB_NAME_AW(ImmGetImeMenuItems)
+BOOL   WINAPI ImmGetOpenStatus(HIMC);
+DWORD    WINAPI ImmGetProperty(HKL, DWORD);
+UINT   WINAPI ImmGetRegisterWordStyleA(HKL, UINT, LPSTYLEBUFA);
+UINT   WINAPI ImmGetRegisterWordStyleW(HKL, UINT, LPSTYLEBUFW);
+#define  ImmGetRegisterWordStyle WINELIB_NAME_AW(ImmGetRegisterWordStyle)
+BOOL   WINAPI ImmGetStatusWindowPos(HIMC, LPPOINT);
+UINT   WINAPI ImmGetVirtualKey(HWND);
+HKL    WINAPI ImmInstallIMEA(LPCSTR, LPCSTR);
+HKL    WINAPI ImmInstallIMEW(LPCWSTR, LPCWSTR);
+#define  ImmInstallIME WINELIB_NAME_AW(ImmInstallIME)
+BOOL   WINAPI ImmIsIME(HKL);
+BOOL   WINAPI ImmIsUIMessageA(HWND, UINT, WPARAM, LPARAM);
+BOOL   WINAPI ImmIsUIMessageW(HWND, UINT, WPARAM, LPARAM);
+#define  ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage)
+BOOL   WINAPI ImmNotifyIME(HIMC, DWORD, DWORD, DWORD);
+BOOL   WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD);
+BOOL   WINAPI ImmRegisterWordA(HKL, LPCSTR, DWORD, LPCSTR);
+BOOL   WINAPI ImmRegisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR);
+#define  ImmRegisterWord WINELIB_NAME_AW(ImmRegisterWord)
+BOOL   WINAPI ImmReleaseContext(HWND, HIMC);
+BOOL   WINAPI ImmSetCandidateWindow(HIMC, LPCANDIDATEFORM);
+BOOL   WINAPI ImmSetCompositionStringA(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
+BOOL   WINAPI ImmSetCompositionStringW(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
+#define  ImmSetCompositionString WINELIB_NAME_AW(ImmSetCompositionString)
+BOOL   WINAPI ImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM);
+BOOL   WINAPI ImmSetConversionStatus(HIMC, DWORD, DWORD);
+BOOL   WINAPI ImmSetOpenStatus(HIMC, BOOL);
+BOOL   WINAPI ImmSetStatusWindowPos(HIMC, LPPOINT);
+BOOL   WINAPI ImmSimulateHotKey(HWND, DWORD);
+BOOL   WINAPI ImmUnregisterWordA(HKL, LPCSTR, DWORD, LPCSTR);
+BOOL   WINAPI ImmUnregisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR);
+#define  ImmUnregisterWord WINELIB_NAME_AW(ImmUnregisterWord)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_IMM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl
new file mode 100644
index 0000000..0a9bbd5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2006 Robert Shearman 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+interface IImnAccount;
+
+cpp_quote("#ifndef HR_E")
+cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+cpp_quote("#ifndef HR_S")
+cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+
+typedef enum tagSMTPAUTHTYPE
+{
+    SMTP_AUTH_NONE,
+    SMTP_AUTH_SICILY,
+    SMTP_AUTH_USE_POP3ORIMAP_SETTINGS,
+    SMTP_AUTH_USE_SMTP_SETTINGS,
+} SMTPAUTHTYPE;
+
+const SHORT CCHMAX_ORG_NAME = 256;
+const SHORT CCHMAX_DISPLAY_NAME = 256;
+const SHORT CCHMAX_ACCOUNT_NAME = 256;
+const SHORT CCHMAX_SERVER_NAME = 256;
+const SHORT CCHMAX_PASSWORD = 256;
+const SHORT CCHMAX_USERNAME = 256;
+const SHORT CCHMAX_EMAIL_ADDRESS = 256;
+const SHORT CCHMAX_CONNECTOID = 256;
+const SHORT CCHMAX_SEARCH_BASE = 256;
+const SHORT CCHMAX_ROOT_FOLDER = 256;
+const SHORT CCHMAX_SIGNATURE = 16;
+const SHORT CCHMAX_SERVICE = 256;
+
+[
+    object,
+    uuid(0A06BD31-166F-11D0-81B9-00C04FD85AB4),
+    pointer_default(unique)
+]
+interface IImnAdviseAccount : IUnknown
+{
+    typedef enum
+    {
+        ACCT_NEWS,
+        ACCT_MAIL,
+        ACCT_DIR_SERV,
+        ACCT_LAST
+    } ACCTTYPE;
+
+    typedef struct tagAccountContext
+    {
+        ACCTTYPE AcctType;
+        LPSTR pszAccountID;
+        LPSTR pszOldName;
+        DWORD dwServerType;
+    } ACTX;
+
+    HRESULT AdviseAccount(
+        [in]    DWORD dwAdviseType,
+        [in]    ACTX *pAcctCtx);
+}
+
+[
+    object,
+    uuid(8D0AED11-1638-11D0-81B9-00C04FD85AB4),
+    pointer_default(unique)
+]
+interface IImnAdviseMigrateServer : IUnknown
+{
+    HRESULT MigrateServer(
+        [in]    DWORD dwSrvType,
+        [in]    IImnAccount *pAccount);
+}
+
+[
+    object,
+    uuid(FD465483-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IImnEnumAccounts : IUnknown
+{
+    HRESULT GetCount(
+        [out]   ULONG *pcItems);
+
+    HRESULT SortByAccountName();
+
+    HRESULT GetNext(
+        [out]   IImnAccount **ppAccount);
+
+    HRESULT Reset();
+}
+
+[
+    object,
+    uuid(FD465481-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IImnAccountManager : IUnknown
+{
+    typedef struct tagACCTLISTINFO
+    {
+        DWORD cbSize;
+        ACCTTYPE AcctTypeInit;
+        DWORD dwAcctFlags;
+        DWORD dwFlags;
+    } ACCTLISTINFO;
+
+    HRESULT Init(
+        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer);
+
+    HRESULT CreateAccountObject(
+        [in]    ACCTTYPE AcctType,
+        [out]   IImnAccount **ppAccount);
+
+    HRESULT Enumerate(
+        [in]    DWORD dwSrvTypes,
+        [out]   IImnEnumAccounts **ppEnumAccounts);
+
+    HRESULT GetAccountCount(
+        [in]    ACCTTYPE AcctType,
+        [out]   ULONG *pcServers);
+
+    HRESULT FindAccount(
+        [in]    DWORD dwPropTag,
+        [in]    LPCSTR pszSearchData,
+        [out]   IImnAccount **ppAccount);
+
+    HRESULT GetDefaultAccountName(
+        [in]    ACCTTYPE AcctType,
+        [in,ref] LPSTR pszAccount,
+        [in]    ULONG cchMax);
+
+    HRESULT ProcessNotification(
+        [in]    UINT uMsg,
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam);
+
+    HRESULT ValidateDefaultSendAccount();
+
+    HRESULT AccountListDialog(
+        [in]    HWND hwnd,
+        [in]    ACCTLISTINFO *pinfo);
+
+    HRESULT Advise(
+        [in]    IImnAdviseAccount *pAdviseAccount,
+        [out]   DWORD *pdwConnection);
+
+    HRESULT Unadvise(
+        [in]    DWORD dwConnection);
+
+    HRESULT GetUniqueAccountName(
+        [in]    LPSTR szName,
+        [in]    UINT cch);
+
+    HRESULT InitEx(
+        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer,
+        [in]    DWORD dwFlags);
+}
+
+[
+    object,
+    uuid(C43DFC6F-62BB-11D2-A727-00C04F79E7C8),
+    pointer_default(unique)
+]
+interface IImnAccountManager2 : IImnAccountManager
+{
+    HRESULT InitUser(
+        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer,
+        [in]    REFGUID rguidID,
+        [in]    DWORD dwFlags);
+
+    HRESULT GetIncompleteAccount(
+        [in]    ACCTTYPE AcctType,
+        [in,ref] LPSTR pszAccountId,
+        [in]    ULONG cchMax);
+
+    HRESULT SetIncompleteAccount(
+        [in]    ACCTTYPE AcctType,
+        [in]    LPCSTR pszAccountId);
+}
+
+[
+    object,
+    uuid(FD465484-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IPropertyContainer : IUnknown
+{
+    typedef enum
+    {
+        TYPE_ERROR = 1000,
+        TYPE_DWORD,
+        TYPE_LONG,
+        TYPE_WORD,
+        TYPE_SHORT,
+        TYPE_BYTE,
+        TYPE_CHAR,
+        TYPE_FILETIME,
+        TYPE_STRING,
+        TYPE_BINARY,
+        TYPE_FLAGS,
+        TYPE_STREAM,
+        TYPE_WSTRING,
+        TYPE_BOOL,
+        TYPE_PASS,
+        TYPE_LAST
+    } PROPTYPE;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetProp")
+cpp_quote("#undef SetProp")
+cpp_quote("#endif")
+
+    HRESULT GetProp(
+        [in]    DWORD dwPropTag,
+        [in,size_is(*pcb),ref] BYTE *pb,
+        [in]    ULONG *pcb);
+
+    HRESULT GetPropDw(
+        [in]    DWORD dwPropTag,
+        [out]   DWORD *pdw);
+
+    HRESULT GetPropSz(
+        [in]    DWORD dwPropTag,
+        [in,ref] LPSTR psz,
+        [in]    ULONG cchMax);
+
+    HRESULT SetProp(
+        [in]    DWORD dwPropTag,
+        [in,size_is(cb)] BYTE *pb,
+        [in]    ULONG cb);
+
+    HRESULT SetPropDw(
+        [in]    DWORD dwPropTag,
+        [in]    DWORD dw);
+
+    HRESULT SetPropSz(
+        [in]    DWORD dwPropTag,
+        [in]    LPSTR psz);
+}
+
+[
+    object,
+    uuid(FD465482-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IImnAccount : IPropertyContainer
+{
+    HRESULT Exist();
+
+    HRESULT SetAsDefault();
+
+    HRESULT Delete();
+
+    HRESULT SaveChanges();
+
+    HRESULT GetAccountType(
+        [out]   ACCTTYPE *pAcctType);
+
+    HRESULT GetServerTypes(
+        [out]   DWORD *pdwSrvTypes);
+
+    HRESULT ShowProperties(
+        [in]    HWND hwnd,
+        [in]    DWORD dwFlags);
+
+    HRESULT ValidateProperty(
+        [in]    DWORD dwPropTag,
+        [in,size_is(cb)] BYTE *pb,
+        [in]    ULONG cb);
+
+    HRESULT DoWizard(
+        [in]    HWND hwnd,
+        [in]    DWORD dwFlags);
+
+    HRESULT DoImportWizard(
+        [in]    HWND hwnd,
+        [in]    CLSID clsid,
+        [in]    DWORD dwFlags);
+}
+
+cpp_quote("HRESULT WINAPI HrCreateAccountManager(IImnAccountManager **ppAccountManager);")
+cpp_quote("HRESULT WINAPI ValidEmailAddress(LPSTR lpAddress);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl
new file mode 100644
index 0000000..b30e17c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl
@@ -0,0 +1,1123 @@
+/*
+ * Copyright 2006 Robert Shearman 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "imnact.idl";
+
+interface IInternetTransport;
+interface ISMTPTransport;
+interface IPOP3Transport;
+interface IIMAPTransport;
+
+/* CLSIDs */
+
+cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+
+/* Error Codes */
+
+cpp_quote("#ifndef HR_E")
+cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+cpp_quote("#ifndef HR_S")
+cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+
+/* General Error Codes */
+cpp_quote("#define IXP_E_LOAD_SICILY_FAILED     HR_E(0xCC00)")
+cpp_quote("#define IXP_E_INVALID_CERT_CN        HR_E(0xCC01)")
+cpp_quote("#define IXP_E_INVALID_CERT_DATE      HR_E(0xCC02)")
+cpp_quote("#define IXP_E_ALREADY_CONNECTED      HR_E(0xCC03)")
+cpp_quote("#define IXP_E_CONN                   HR_E(0xCC04)")
+cpp_quote("#define IXP_E_NOT_CONNECTED          HR_E(0xCC05)")
+cpp_quote("#define IXP_E_CONN_SEND              HR_E(0xCC06)")
+cpp_quote("#define IXP_E_WOULD_BLOCK            HR_E(0xCC07)")
+cpp_quote("#define IXP_E_INVALID_STATE          HR_E(0xCC08)")
+cpp_quote("#define IXP_E_CONN_RECV              HR_E(0xCC09)")
+cpp_quote("#define IXP_E_INCOMPLETE             HR_E(0xCC0A)")
+cpp_quote("#define IXP_E_BUSY                   HR_E(0xCC0B)")
+cpp_quote("#define IXP_E_NOT_INIT               HR_E(0xCC0C)")
+cpp_quote("#define IXP_E_CANT_FIND_HOST         HR_E(0xCC0D)")
+cpp_quote("#define IXP_E_FAILED_TO_CONNECT      HR_E(0xCC0E)")
+cpp_quote("#define IXP_E_CONNECTION_DROPPED     HR_E(0xCC0F)")
+cpp_quote("#define IXP_E_INVALID_ADDRESS        HR_E(0xCC10)")
+cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST   HR_E(0xCC11)")
+cpp_quote("#define IXP_E_SOCKET_READ_ERROR      HR_E(0xCC12)")
+cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR     HR_E(0xCC13)")
+cpp_quote("#define IXP_E_SCOKET_INIT_ERROR      HR_E(0xCC14)")
+cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR   HR_E(0xCC15)")
+cpp_quote("#define IXP_E_INVALID_ACCOUNT        HR_E(0xCC16)")
+cpp_quote("#define IXP_E_USER_CANCEL            HR_E(0xCC17)")
+cpp_quote("#define IXP_E_SICILY_LOGON_FAILED    HR_E(0xCC18)")
+cpp_quote("#define IXP_E_TIMEOUT                HR_E(0xCC19)")
+cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED  HR_E(0xCC1A)")
+
+/* SMTP Failure Statuses */
+cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR            HR_E(0xCC60)")
+cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE     HR_E(0xCC61)")
+cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR          HR_E(0xCC62)")
+cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX          HR_E(0xCC63)")
+cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL       HR_E(0xCC64)")
+cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ           HR_E(0xCC65)")
+cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
+cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE         HR_E(0xCC67)")
+cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY          HR_E(0xCC68)")
+cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND     HR_E(0xCC69)")
+cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING      HR_E(0xCC6A)")
+cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL        HR_E(0xCC6B)")
+cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE     HR_E(0xCC6C)")
+cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW      HR_E(0xCC6D)")
+cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX   HR_E(0xCC6E)")
+cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED       HR_E(0xCC6F)")
+
+/* SMTP Success Statuses */
+cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS         HR_S(0xCC70)")
+cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE          HR_S(0xCC71)")
+cpp_quote("#define IXP_E_SMTP_220_READY                 HR_S(0xCC72)")
+cpp_quote("#define IXP_E_SMTP_221_CLOSING               HR_S(0xCC73)")
+cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY      HR_S(0xCC74)")
+cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL       HR_S(0xCC75)")
+cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT      HR_S(0xCC76)")
+cpp_quote("#define IXP_E_SMTP_CONTINUE                  HR_S(0xCC77)")
+cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE   HR_S(0xCC78)")
+cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS          HR_S(0xCC79)")
+
+/* More SMTP Failure Statuses */
+cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER           HR_E(0xCC78)")
+cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS       HR_E(0xCC79)")
+cpp_quote("#define IXP_E_SMTP_NO_SENDER                 HR_E(0xCC7A)")
+cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS             HR_E(0xCC7B)")
+cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED     HR_E(0xCC7C)")
+cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT       HR_E(0xCC7D)")
+cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT            HR_E(0xCC7E)")
+cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED       HR_E(0xCC7F)")
+
+const SHORT CCHMAX_DOMAIN = 256;
+const SHORT CCHMAX_PHONE_NUMBER = 128;
+
+const DWORD DEFAULT_IMAP_PORT = 143;
+const DWORD DEFAULT_POP3_PORT = 110;
+const DWORD DEFAULT_SMTP_PORT = 25;
+const DWORD DEFAULT_NNTP_PORT = 119;
+
+typedef enum tagINETADDRTYPE
+{
+    ADDR_TO,
+    ADDR_FROM,
+    ADDR_DSN_NEVER = 16,
+    ADDR_DSN_SUCCESS = 32,
+    ADDR_DSN_FAILURE = 64,
+    ADDR_DSN_DELAY = 128
+} INETADDRTYPE;
+
+const DWORD ADDR_TOFROM_MASK = 0x1;
+const DWORD ADDR_DSN_MASK = 0xf0;
+
+typedef enum tagDSNRET
+{
+    DSNRET_DEFAULT,
+    DSNRET_HDRS,
+    DSNRET_FULL,
+} DSNRET;
+
+typedef struct tagINETADDR
+{
+    INETADDRTYPE addrtype;
+    CHAR szEmail[CCHMAX_EMAIL_ADDRESS];
+} INETADDR, *LPINETADDR;
+
+typedef struct tagINETADDRLIST
+{
+    ULONG cAddress;
+    LPINETADDR prgAddress;
+} INETADDRLIST, *LPINETADDRLIST;
+
+typedef enum tagRASCONNTYPE
+{
+    RAS_CONNECT_LAN,
+    RAS_CONNECT_MANUAL,
+    RAS_CONNECT_RAS
+} RASCONNTYPE;
+
+typedef enum tagHTTPMAILPROPTYPE
+{
+    HTTPMAIL_PROP_INVALID,
+    HTTPMAIL_PROP_ADBAR,
+    HTTPMAIL_PROP_CONTACTS,
+    HTTPMAIL_PROP_INBOX,
+    HTTPMAIL_PROP_OUTBOX,
+    HTTPMAIL_PROP_SENDMSG,
+    HTTPMAIL_PROP_SENTITEMS,
+    HTTPMAIL_PROP_DELETEDITEMS,
+    HTTPMAIL_PROP_DRAFTS,
+    HTTPMAIL_PROP_MSGFOLDERROOT,
+    HTTPMAIL_PROP_SIG,
+    HTTPMAIL_PROP_LAST
+} HTTPMAILPROPTYPE;
+
+typedef enum tagHTTPMAILSPECIALFOLDER
+{
+    HTTPMAIL_SF_NONE,
+    HTTPMAIL_SF_UNRECOGNIZED,
+    HTTPMAIL_SF_INBOX,
+    HTTPMAIL_SF_DELETEDITEMS,
+    HTTPMAIL_SF_DRAFTS,
+    HTTPMAIL_SF_OUTBOX,
+    HTTPMAIL_SF_SENTITEMS,
+    HTTPMAIL_SF_CONTACTS,
+    HTTPMAIL_SF_CALENDAR,
+    HTTPMAIL_SF_MSNPROMO,
+    HTTPMAIL_SF_LAST
+} HTTPMAILSPECIALFOLDER;
+
+typedef enum tagHTTPMAILCONTACTTYPE
+{
+    HTTPMAIL_CT_CONTACT,
+    HTTPMAIL_CT_GROUP,
+    HTTPMAIL_CT_LAST
+} HTTPMAILCONTACTTYPE;
+
+const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
+const DWORD DAVNAMESPACE_DAV = 0;
+const DWORD DAVNAMESPACE_HOTMAIL = 1;
+const DWORD DAVNAMESPACE_HTTPMAIL = 2;
+const DWORD DAVNAMESPACE_MAIL = 3;
+const DWORD DAVNAMESPACE_CONTACTS = 4;
+
+cpp_quote("#define ISF_SMTP_USEIPFORHELO        0x01")
+cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD  0x02")
+/* for SMTP - send EHLO and use STARTTLS if available: */
+cpp_quote("#define ISF_SSLONSAMEPORT            0x04")
+cpp_quote("#define ISF_QUERYDSNSUPPORT          0x08")
+/* for SMTP - send EHLO and use AUTH if available: */
+cpp_quote("#define ISF_QUERYAUTHSUPPORT         0x10")
+
+typedef struct INETSERVER
+{
+    CHAR szAccount[CCHMAX_ACCOUNT_NAME];
+    CHAR szUserName[CCHMAX_USERNAME];
+    CHAR szPassword[CCHMAX_PASSWORD];
+    CHAR szServerName[CCHMAX_SERVER_NAME];
+    CHAR szConnectoid[CCHMAX_CONNECTOID];
+    RASCONNTYPE rasconntype;
+    DWORD dwPort;
+    BOOL fSSL;
+    BOOL fTrySicily;
+    DWORD dwTimeout;
+    DWORD dwFlags;
+} INETSERVER, *LPINETSERVER;
+
+typedef enum tagIXPTYPE
+{
+    IXP_NNTP,
+    IXP_SMTP,
+    IXP_POP3,
+    IXP_IMAP,
+    IXP_RAS,
+    IXP_HTTPMail
+} IXPTYPE;
+
+typedef enum tagIXPSTATUS
+{
+    IXP_FINDINGHOST,
+    IXP_CONNECTING,
+    IXP_SECURING,
+    IXP_CONNECTED,
+    IXP_AUTHORIZING,
+    IXP_AUTHRETRY,
+    IXP_AUTHORIZED,
+    IXP_DISCONNECTING,
+    IXP_DISCONNECTED,
+    IXP_LAST
+} IXPSTATUS;
+
+const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
+
+typedef DWORD MEMBERINFOFLAGS;
+
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;
+
+typedef DWORD IMAP_MSGFLAGS;
+
+const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;
+const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;
+const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;
+const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;
+const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;
+const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;
+const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;
+
+[
+    object,
+    uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),
+    local
+]
+interface ITransportCallbackService : IUnknown
+{
+    HRESULT GetParentWindow(
+        [in]    DWORD dwReserved,
+        [out]   HWND *phwndParent);
+
+    HRESULT GetAccount(
+        [out]   LPDWORD pdwServerType,
+        [out]   IImnAccount **ppAccount);
+}
+
+[
+    object,
+    uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface ITransportCallback : IUnknown
+{
+    typedef struct tagIXPRESULT
+    {
+        HRESULT hrResult;
+        LPSTR pszResponse;
+        UINT uiServerError;
+        HRESULT hrServerError;
+        DWORD dwSocketError;
+        LPSTR pszProblem;
+    } IXPRESULT, *LPIXPRESULT;
+
+    typedef enum tagCMDTYPE
+    {
+        CMD_SEND,
+        CMD_RESP
+    } CMDTYPE;
+
+    HRESULT OnTimeout(
+        [in,out]    DWORD *pdwTimeout,
+        [in]        IInternetTransport *pTransport);
+
+    HRESULT OnLogonPrompt(
+        [in,out]    LPINETSERVER pInetServer,
+        [in]        IInternetTransport *pTransport);
+
+    INT OnPrompt(
+        [in]    HRESULT hrError,
+        [in]    LPCSTR pszText,
+        [in]    LPCSTR pszCaption,
+        [in]    UINT uType,
+        [in]    IInternetTransport *pTransport);
+
+    HRESULT OnStatus(
+        [in]    IXPSTATUS ixpstatus,
+        [in]    IInternetTransport *pTransport);
+
+    HRESULT OnError(
+        [in]    IXPSTATUS ixpstatus,
+        [in]    LPIXPRESULT pResult,
+        [in]    IInternetTransport *pTransport);
+
+    HRESULT OnCommand(
+        [in]    CMDTYPE cmdtype,
+        [in]    LPSTR pszLine,
+        [in]    HRESULT hrResponse,
+        [in]    IInternetTransport *pTransport);
+}
+
+[
+    object,
+    uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),
+    local
+]
+interface IInternetTransport : IUnknown
+{
+    const boolean iitAUTHENTICATE = TRUE;
+    const boolean iitDONT_AUTHENTICATe = FALSE;
+    const boolean iitENABLE_ONCOMMAND = TRUE;
+    const boolean iitDISABLE_ONCOMMAND = FALSE;
+
+    typedef enum tagIXPISSTATE
+    {
+        IXP_IS_CONNECTED,
+        IXP_IS_BUSY,
+        IXP_IS_READY,
+        IXP_IS_AUTHENTICATED
+    } IXPISSTATE;
+
+    HRESULT GetServerInfo(
+        [in,out]    LPINETSERVER pInetServer);
+
+    IXPTYPE GetIXPType();
+
+    HRESULT IsState(
+        [in]    IXPISSTATE isstate);
+
+    HRESULT InetServerFromAccount(
+        [in]        IImnAccount *pAccount,
+        [in,out]    LPINETSERVER pInetServer);
+
+    HRESULT Connect(
+        [in]    LPINETSERVER pInetServer,
+        [in]    boolean fAuthenticate,
+        [in]    boolean fCommandLogging);
+
+    HRESULT HandsOffCallback();
+
+    HRESULT Disconnect();
+
+    HRESULT DropConnection();
+
+    HRESULT GetStatus(
+        [out]   IXPSTATUS *pCurrentStatus);
+}
+
+[
+    object,
+    uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),
+    local
+]
+interface ISMTPCallback : ITransportCallback
+{
+    typedef enum tagSMTPCOMMAND
+    {
+        SMTP_NONE,
+        SMTP_BANNER,
+        SMTP_CONNECTED,
+        SMTP_SEND_MESSAGE,
+        SMTP_AUTH,
+        SMTP_EHLO,
+        SMTP_HELO,
+        SMTP_MAIL,
+        SMTP_RCPT,
+        SMTP_RSET,
+        SMTP_QUIT,
+        SMTP_DATA,
+        SMTP_DOT,
+        SMTP_SEND_STREAM,
+        SMTP_CUSTOM
+    } SMTPCOMMAND;
+
+    typedef struct tagSMTPSTREAM
+    {
+        DWORD cbIncrement;
+        DWORD cbCurrent;
+        DWORD cbTotal;
+    } SMTPSTREAM, *LPSMTPSTREAM;
+
+    typedef struct tagSMTPRESPONSE
+    {
+        SMTPCOMMAND command;
+        BOOL fDone;
+        IXPRESULT rIxpResult;
+        ISMTPTransport *pTransport;
+
+        [switch_type(SMTPCOMMAND), switch_is(command)]
+        union
+        {
+        [case(SMTP_SEND_STREAM)]    SMTPSTREAM rStreamInfo;
+        [default];
+        };
+    } SMTPRESPONSE, *LPSMTPRESPONSE;
+
+    HRESULT OnResponse(
+        [in] LPSMTPRESPONSE pResponse);
+}
+
+[
+    object,
+    uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface ISMTPTransport : IInternetTransport
+{
+    typedef struct tagSMTPMESSAGE
+    {
+        ULONG cbSize;
+        LPSTREAM pstmMsg;
+        INETADDRLIST rAddressList;
+    } SMTPMESSAGE, *LPSMTPMESSAGE;
+
+    HRESULT InitNew(
+        [in]    LPSTR pszLogFilePath,
+        [in]    ISMTPCallback *pCallback);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef SendMessage")
+cpp_quote("#endif")
+
+    HRESULT SendMessage(
+        [in]    LPSMTPMESSAGE pMessage);
+
+    HRESULT CommandMAIL(
+        [in]    LPSTR pszEmailFrom);
+
+    HRESULT CommandRCPT(
+        [in]    LPSTR pszEmailTo);
+
+    HRESULT CommandEHLO();
+
+    HRESULT CommandHELO();
+
+    HRESULT CommandAUTH(
+        [in]    LPSTR pszAuthType);
+
+    HRESULT CommandQUIT();
+
+    HRESULT CommandRSET();
+
+    HRESULT CommandDATA();
+
+    HRESULT CommandDOT();
+
+    HRESULT SendDataStream(
+        [in]    IStream *pStream,
+        [in]    ULONG cbSize);
+}
+
+[
+    object,
+    uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface ISMTPTransport2 : ISMTPTransport
+{
+    typedef struct tagSMTPMESSAGE2
+    {
+        SMTPMESSAGE smtpMsg;
+        LPSTR pszDSNENVID;
+        DSNRET dsnRet;
+        DWORD dwReserved;
+        DWORD dwReserved2;
+    } SMTPMESSAGE2, *LPSMTPMESSAGE2;
+
+    HRESULT SetWindow();
+
+    HRESULT ResetWindow();
+
+    HRESULT SendMessage2(
+        [in]    LPSMTPMESSAGE2 pMessage);
+
+    HRESULT CommandRCPT2(
+        [in]    LPSTR pszEmailTo,
+        [in]    INETADDRTYPE atDSN);
+}
+
+/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */
+
+[
+    object,
+    uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface IPOP3Callback : ITransportCallback
+{
+    typedef enum tagPOP3COMMAND
+    {
+        POP3_NONE,
+        POP3_BANNER,
+        POP3_CONNECTED,
+        POP3_USER,
+        POP3_PASS,
+        POP3_AUTH,
+        POP3_UIDL,
+        POP3_STAT,
+        POP3_LIST,
+        POP3_DELE,
+        POP3_RETR,
+        POP3_TOP,
+        POP3_NOOP,
+        POP3_QUIT,
+        POP3_RSET,
+        POP3_CUSTOM
+    } POP3COMMAND;
+
+    typedef struct tagPOP3RETR
+    {
+        BOOL fHeader;
+        BOOL fBody;
+        DWORD dwPopId;
+        DWORD cbSoFar;
+        LPSTR pszLines;
+        ULONG cbLines;
+    } POP3RETR, *LPPOP3RETR;
+
+    typedef struct tagPOP3TOP
+    {
+        BOOL fHeader;
+        BOOL fBody;
+        DWORD dwPopId;
+        DWORD cPreviewLines;
+        DWORD cbSoFar;
+        LPSTR pszLines;
+        ULONG cbLines;
+    } POP3TOP, *LPPOP3TOP;
+
+    typedef struct tagPOP3LIST
+    {
+        DWORD dwPopId;
+        DWORD cbSize;
+    } POP3LIST, *LPPOP3LIST;
+
+    typedef struct tagPOP3UIDL
+    {
+        DWORD dwPopId;
+        LPSTR pszUidl;
+    } POP3UIDL, *LPPOP3UIDL;
+
+    typedef struct tagPOP3STAT
+    {
+        DWORD cMessages;
+        DWORD cbMessages;
+    } POP3STAT, *LPPOP3STAT;
+
+    typedef struct tagPOP3RESPONSE
+    {
+        POP3COMMAND command;
+        BOOL fDone;
+        IXPRESULT rIxpResult;
+        IPOP3Transport *pTransport;
+        BOOL fValidInfo;
+        [switch_type(POP3COMMAND), switch_is(command)]
+        union
+        {
+        [case(POP3_UIDL)] POP3UIDL rUidlInfo;
+        [case(POP3_STAT)] POP3STAT rStatInfo;
+        [case(POP3_LIST)] POP3LIST rListInfo;
+        [case(POP3_DELE)] DWORD dwPopId;
+        [case(POP3_RETR)] POP3RETR rRetrInfo;
+        [case(POP3_TOP)]  POP3TOP rTopInfo;
+        [default];
+        };
+    } POP3RESPONSE, *LPPOP3RESPONSE;
+
+    HRESULT OnResponse(
+        [in]    LPPOP3RESPONSE pResponse);
+}
+
+[
+    object,
+    uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface IPOP3Transport : IInternetTransport
+{
+    typedef enum tagPOP3CMDTYPE
+    {
+        POP3CMD_GET_POPID,
+        POP3CMD_GET_MARKED,
+        POP3CMD_GET_ALL
+    } POP3CMDTYPE;
+
+    typedef enum tagPOP3MARKTYPE
+    {
+        POP3_MARK_FOR_TOP = 0x01,
+        POP3_MARK_FOR_RETR = 0x02,
+        POP3_MARK_FOR_DELE = 0x04,
+        POP3_MARK_FOR_UIDL = 0x08,
+        POP3_MARK_FOR_LIST = 0x10
+    } POP3MARKTYPE;
+
+    HRESULT InitNew(
+        [in]    LPSTR pszLogFilePath,
+        [in]    IPOP3Callback *pCallback);
+
+    HRESULT MarkItem(
+        [in]    POP3MARKTYPE marktype,
+        [in]    DWORD dwPopId,
+        [in]    boolean fMarked);
+
+    HRESULT CommandAUTH(
+        [in]    LPSTR pszAuthType);
+
+    HRESULT CommandUSER(
+        [in]    LPSTR pszUserName);
+
+    HRESULT CommandPASS(
+        [in]    LPSTR pszPassword);
+
+    HRESULT CommandLIST(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+
+    HRESULT CommandTOP(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId,
+        [in]    DWORD cPreviewLines);
+
+    HRESULT CommandQUIT();
+
+    HRESULT CommandSTAT();
+
+    HRESULT CommandNOOP();
+
+    HRESULT CommandRSET();
+
+    HRESULT CommandUIDL(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+
+    HRESULT CommandDELE(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+
+    HRESULT CommandRETR(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+}
+
+/* FIXME: INNTPCallback, INNTPTransport */
+
+[
+    object,
+    uuid(8C438160-4EF6-11d0-874F-00AA00530EE9),
+    local,
+]
+interface IRangeList : IUnknown
+{
+    const ULONG RL_RANGE_ERROR = ((ULONG)-1);
+    const ULONG RL_LAST_MESSAGE = ((ULONG)-1);
+
+    HRESULT Clear();
+
+    HRESULT IsInRange(
+        [in]    const ULONG value);
+
+    HRESULT Min(
+        [out]   ULONG *pulMin);
+
+    HRESULT Max(
+        [out]   ULONG *pulMax);
+
+    HRESULT Save(
+        [out]   byte **ppbDestination,
+        [out]   ULONG *pulSizeOfDestination);
+
+    HRESULT Load(
+        [in, size_is(ulSizeOfSource)]   byte *pbSource,
+        [in]    const ULONG ulSizeOfSource);
+
+    HRESULT AddRange(
+        [in]    const ULONG low,
+        [in]    const ULONG high);
+
+    HRESULT AddSingleValue(
+        [in]    const ULONG value);
+
+    HRESULT AddRangeList(
+        [in]    const IRangeList *prl);
+
+    HRESULT DeleteRange(
+        [in]    const ULONG low,
+        [in]    const ULONG high);
+
+    HRESULT DeleteSingleValue(
+        [in]    const ULONG value);
+
+    HRESULT DeleteRangeList(
+        [in]    const IRangeList *prl);
+
+    HRESULT MinOfRange(
+        [in]    const ULONG value,
+        [out]   ULONG *pulMinOfRange);
+
+    HRESULT MaxOfRange(
+        [in]    const ULONG value,
+        [out]   ULONG *pulMaxOfRange);
+
+    HRESULT RangeToIMAPString(
+        [out]   LPSTR *ppszDestination,
+        [out]   LPDWORD pdwLengthOfDestination);
+
+    HRESULT Next(
+        [in]    const ULONG current,
+        [out]   ULONG *pulNext);
+
+    HRESULT Prev(
+        [in]    const ULONG current,
+        [out]   ULONG *pulPrev);
+
+    HRESULT Cardinality(
+        [out]   ULONG *pulCardinality);
+
+    HRESULT CardinalityFrom(
+        [in]    const ULONG ulStartPoint,
+        [out]   ULONG *pulCardinalityFrom);
+}
+
+[
+    object,
+    uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9),
+    local
+]
+interface IIMAPCallback : ITransportCallback
+{
+    typedef DWORD IMAP_MBOXFLAGS;
+    const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0;
+    const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1;
+    const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2;
+    const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4;
+    const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8;
+    const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf;
+
+    typedef enum tagIMAP_RESPONSE_TYPE
+    {
+        irtERROR_NOTIFICATION,
+        irtCOMMAND_COMPLETION,
+        irtSERVER_ALERT,
+        irtPARSE_ERROR,
+        irtMAILBOX_UPDATE,
+        irtDELETED_MSG,
+        irtFETCH_BODY,
+        irtUPDATE_MSG,
+        irtAPPLICABLE_FLAGS,
+        irtPERMANENT_FLAGS,
+        irtUIDVALIDITY,
+        irtREADWRITE_STATUS,
+        irtTRYCREATE,
+        irtSEARCH,
+        irtMAILBOX_LISTING,
+        irtMAILBOX_STATUS,
+        irtAPPEND_PROGRESS,
+        irtUPDATE_MSG_EX
+    } IMAP_RESPONSE_TYPE;
+
+    typedef struct tagFETCH_BODY_PART
+    {
+        DWORD dwMsgSeqNum;
+        LPSTR pszBodyTag;
+        DWORD dwTotalBytes;
+        DWORD dwSizeOfData;
+        DWORD dwOffset;
+        BOOL fDone;
+        LPSTR pszData;
+        LPARAM lpFetchCookie1;
+        LPARAM lpFetchCookie2;
+    } FETCH_BODY_PART;
+
+    typedef struct tagFETCH_CMD_RESULTS
+    {
+        DWORD dwMsgSeqNum;
+        BOOL bMsgFlags;
+        IMAP_MSGFLAGS mfMsgFlags;
+        BOOL bRFC822Size;
+        DWORD dwRFC822Size;
+        BOOL bUID;
+        DWORD dwUID;
+        BOOL bInternalDate;
+        FILETIME ftInternalDate;
+        LPARAM lpFetchCookie1;
+        LPARAM lpFetchCookie2;
+    } FETCH_CMD_RESULTS;
+
+    typedef struct tagIMAPADDR
+    {
+        LPSTR pszName;
+        LPSTR pszADL;
+        LPSTR pszMailbox;
+        LPSTR pszHost;
+        struct tagIMAPADDR *pNext;
+    } IMAPADDR;
+
+    typedef struct tagFETCH_CMD_RESULTS_EX
+    {
+        DWORD dwMsgSeqNum;
+        BOOL bMsgFlags;
+        IMAP_MSGFLAGS mfMsgFlags;
+        BOOL bRFC822Size;
+        DWORD dwRFC822Size;
+        BOOL bUID;
+        DWORD dwUID;
+        BOOL bInternalDate;
+        FILETIME ftInternalDate;
+        LPARAM lpFetchCookie1;
+        LPARAM lpFetchCookie2;
+        BOOL bEnvelope;
+        FILETIME ftENVDate;
+        LPSTR pszENVSubject;
+        IMAPADDR *piaENVFrom;
+        IMAPADDR *piaENVSender;
+        IMAPADDR *piaENVReplyTo;
+        IMAPADDR *piaENVTo;
+        IMAPADDR *piaENVCc;
+        IMAPADDR *piaENVBcc;
+        LPSTR pszENVInReplyTo;
+        LPSTR pszENVMessageID;
+        DWORD dwReserved1;
+        DWORD dwReserved2;
+        DWORD dwReserved3;
+    } FETCH_CMD_RESULTS_EX;
+
+    typedef struct tagMBOX_MSGCOUNT
+    {
+        BOOL bGotExistsResponse;
+        DWORD dwExists;
+        BOOL bGotRecentResponse;
+        DWORD dwRecent;
+        BOOL bGotUnseenResponse;
+        DWORD dwUnseen;
+    } MBOX_MSGCOUNT;
+
+    typedef struct tagIMAP_LISTLSUB_RESPONSE
+    {
+        LPSTR pszMailboxName;
+        IMAP_MBOXFLAGS imfMboxFlags;
+        char cHierarchyChar;
+    } IMAP_LISTLSUB_RESPONSE;
+
+    typedef struct tagIMAP_STATUS_RESPONSE
+    {
+        LPSTR pszMailboxName;
+        BOOL fMessages;
+        DWORD dwMessages;
+        BOOL fRecent;
+        DWORD dwRecent;
+        BOOL fUIDNext;
+        DWORD dwUIDNext;
+        BOOL fUIDValidity;
+        DWORD dwUIDValidity;
+        BOOL fUnseen;
+        DWORD dwUnseen;
+    } IMAP_STATUS_RESPONSE;
+
+    typedef struct tagAPPEND_PROGRESS
+    {
+        DWORD dwUploaded;
+        DWORD dwTotal;
+    } APPEND_PROGRESS;
+
+    typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA
+    {
+        [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount;
+        [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum;
+        [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart;
+        [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults;
+        [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags;
+        [case (irtUIDVALIDITY)] DWORD dwUIDValidity;
+        [case (irtREADWRITE_STATUS)] BOOL bReadWrite;
+        [case (irtSEARCH)] IRangeList *prlSearchResults;
+        [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing;
+        [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse;
+        [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress;
+        [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx;
+    } IMAP_RESPONSE_DATA;
+
+    typedef struct tagIMAP_RESPONSE
+    {
+        WPARAM wParam;
+        LPARAM lParam;
+        HRESULT hrResult;
+        LPSTR lpszResponseText;
+        IMAP_RESPONSE_TYPE irtResponseType;
+        [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData;
+    } IMAP_RESPONSE;
+
+    HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse);
+}
+
+[
+object,
+uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9),
+local,
+]
+interface IIMAPTransport : IInternetTransport
+{
+    const DWORD IMAP_CAPABILITY_IMAP4 = 0x1;
+    const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2;
+    const DWORD IMAP_CAPABILITY_IDLE = 0x4;
+    const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7;
+
+    HRESULT InitNew(
+        [in]    LPSTR pszLogFilePath,
+        [in]    IIMAPCallback *pCBHandler);
+
+    HRESULT NewIRangeList(
+        [out]   IRangeList **pprlNewRangeList);
+
+    HRESULT Capability(
+        [out]   DWORD *pdwCapabilityFlags);
+
+    HRESULT Select(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT Examine(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT Create(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT Delete(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT Rename(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName,
+        [in]    LPSTR lpszNewMailboxName);
+
+    HRESULT Subscribe(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT Unsubscribe(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT List(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxNameReference,
+        [in]    LPSTR lpszMailboxNamePattern);
+
+    HRESULT Lsub(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxNameReference,
+        [in]    LPSTR lpszMailboxNamePattern);
+
+    HRESULT Append(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszMailboxName,
+        [in]    LPSTR lpszMessageFlags,
+        [in]    FILETIME ftMessageDateTime,
+        [in]    LPSTREAM lpstmMessageToSave);
+
+    HRESULT Close(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler);
+
+    HRESULT Expunge(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler);
+
+    HRESULT Search(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR lpszSearchCriteria,
+        [in]    boolean bReturnUIDs,
+        [in]    IRangeList *pMsgRange,
+        [in]    boolean bUIDRangeList);
+
+    HRESULT Fetch(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    IRangeList *pMsgRange,
+        [in]    boolean bUIDMsgRange,
+        [in]    LPSTR lpszFetchArgs);
+
+    HRESULT Store(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    IRangeList *pMsgRange,
+        [in]    boolean bUIDRangeList,
+        [in]    LPSTR lpszStoreArgs);
+
+    HRESULT Copy(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    IRangeList *pMsgRange,
+        [in]    boolean bUIDRangeList,
+        [in]    LPSTR lpszMailboxName);
+
+    HRESULT Noop(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler);
+
+    HRESULT ResizeMsgSeqNumTable(
+        [in]    DWORD dwSizeOfMbox);
+
+    HRESULT UpdateSeqNumToUID(
+        [in]    DWORD dwMsgSeqNum,
+        [in]    DWORD dwUID);
+
+    HRESULT RemoveSequenceNum(
+        [in]    DWORD dwDeletedMsgSeqNum);
+
+    HRESULT MsgSeqNumToUID(
+        [in]    DWORD dwMsgSeqNum,
+        [out]   DWORD *pdwUID);
+
+    HRESULT GetMsgSeqNumToUIDArray(
+        [out]   DWORD **ppdwMsgSeqNumToUIDArray,
+        [out]   DWORD *pdwNumberOfElements);
+
+    HRESULT GetHighestMsgSeqNum(
+        [out]   DWORD *pdwHighestMSN);
+
+    HRESULT ResetMsgSeqNumToUID();
+
+    HRESULT SetDefaultCBHandler(
+        [in]    IIMAPCallback *pCBHandler);
+
+    HRESULT Status(
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam,
+        [in]    IIMAPCallback *pCBHandler,
+        [in]    LPSTR pszMailboxName,
+        [in]    LPSTR pszStatusCmdArgs);
+}
+
+#if 0
+cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
+#endif
+cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
+cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h
new file mode 100644
index 0000000..69a0a39
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 Jeff Latimer
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __IN6ADDR__
+#define __IN6ADDR__
+
+#ifdef USE_WS_PREFIX
+#define WS(x)    WS_##x
+#else
+#define WS(x)    x
+#endif
+
+typedef struct WS(in6_addr) {
+    union {
+        UCHAR  Byte[16];
+        USHORT Word[8];
+    } u;
+} IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
+
+#define in_addr6    WS(in6_addr)
+
+#ifdef USE_WS_PREFIX
+#define WS__S6_un   u
+#define WS__S6_u8   Byte
+#define WS_s6_addr  WS__S6_un.WS__S6_u8
+#else
+#define _S6_un      u
+#define _S6_u8      Byte
+#define s6_addr     _S6_un._S6_u8
+#endif
+
+#define s6_bytes    u.Byte
+#define s6_words    u.Word
+
+#undef WS
+
+#endif /* __IN6ADDR__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h
new file mode 100644
index 0000000..061b7dd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010 Detlef Riekenberg
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __INADDR_H__
+#define __INADDR_H__
+
+#ifdef USE_WS_PREFIX
+#define WS(x)    WS_##x
+#else
+#define WS(x)    x
+#endif
+
+typedef struct WS(in_addr)
+{
+    union {
+        struct {
+            UCHAR s_b1,s_b2,s_b3,s_b4;
+        } S_un_b;
+        struct {
+            USHORT s_w1,s_w2;
+        } S_un_w;
+        ULONG S_addr;
+    } S_un;
+} IN_ADDR, *PIN_ADDR, *LPIN_ADDR;
+
+#undef WS
+
+#ifndef USE_WS_PREFIX
+#define s_addr  S_un.S_addr
+#define s_net   S_un.S_un_b.s_b1
+#define s_host  S_un.S_un_b.s_b2
+#define s_lh    S_un.S_un_b.s_b3
+#define s_impno S_un.S_un_b.s_b4
+#define s_imp   S_un.S_un_w.s_w2
+#else
+#define WS_s_addr  S_un.S_addr
+#define WS_s_net   S_un.S_un_b.s_b1
+#define WS_s_host  S_un.S_un_b.s_b2
+#define WS_s_lh    S_un.S_un_b.s_b3
+#define WS_s_impno S_un.S_un_b.s_b4
+#define WS_s_imp   S_un.S_un_w.s_w2
+#endif  /* USE_WS_PREFIX */
+
+#endif /* __INADDR_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl
new file mode 100644
index 0000000..61188a0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+/* FIXME: import "filter.idl"; */
+
+/*
+ * widl doesn't like the declaration of PFNFILLTEXTBUFFER, so work around it...
+ * Not sure that function pointers are even legal in idl.
+ */
+cpp_quote("struct tagTEXT_SOURCE;")
+cpp_quote("typedef HRESULT (WINAPI *PFNFILLTEXTBUFFER)(struct tagTEXT_SOURCE *pTextSource);")
+cpp_quote("#if 0")
+typedef void* PFNFILLTEXTBUFFER;
+cpp_quote("#endif")
+
+typedef struct tagTEXT_SOURCE
+{
+    PFNFILLTEXTBUFFER pfnFillTextBuffer;
+    const WCHAR *awcBuffer;
+    ULONG iEnd;
+    ULONG iCur;
+} TEXT_SOURCE;
+
+typedef enum tagWORDREP_BREAK_TYPE
+{
+    WORDREP_BREAK_EOW = 0,
+    WORDREP_BREAK_EOS = 1,
+    WORDREP_BREAK_EOP = 2,
+    WORDREP_BREAK_EOC = 3
+} WORDREP_BREAK_TYPE;
+
+
+/*****************************************************************************
+ *    IWordSink interface
+ */
+[
+    uuid(cc907054-c058-101a-b554-08002b33b0e6),
+    object,
+    local
+]
+interface IWordSink : IUnknown
+{
+    HRESULT PutWord(
+              [in] ULONG cwc,
+              [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf,
+              [in] ULONG cwcSrcLen,
+              [in] ULONG cwcSrcPos);
+    HRESULT PutAltWord(
+              [in] ULONG cwc,
+              [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf,
+              [in] ULONG cwcSrcLen,
+              [in] ULONG cwcSrcPos);
+    HRESULT StartAltPhrase(void);
+    HRESULT EndAltPhrase(void);
+    HRESULT PutBreak(
+              [in] WORDREP_BREAK_TYPE breakType);
+}
+
+/*****************************************************************************
+ *    IPhraseSink interface
+ */
+[
+    uuid(cc906ff0-c058-101a-b554-08002b33b0e6),
+    object,
+    local
+]
+interface IPhraseSink: IUnknown
+{
+    HRESULT PutSmallPhrase(
+              [size_is(cwcNoun)][in] const WCHAR *pwcNoun,
+              [in] ULONG cwcNoun,
+              [size_is(cwcModifier)][in] const WCHAR *pwcModifier,
+              [in] ULONG cwcModifier,
+              [in] ULONG ulAttachmentType);
+    HRESULT PutPhrase(
+              [size_is(cwcPhrase)][in] const WCHAR *pwcPhrase,
+              [in] ULONG cwcPhrase);
+}
+
+/*****************************************************************************
+ *    IWordBreaker interface
+ */
+[
+    uuid(d53552c8-77e3-101a-b552-08002b33b0e6),
+    object,
+    local
+]
+interface IWordBreaker: IUnknown
+{
+    HRESULT Init(
+              [in] BOOL fQuery,
+              [in] ULONG ulMaxTokenSize,
+              [out] BOOL *pfLicense);
+    HRESULT BreakText(
+              [in] TEXT_SOURCE *pTextSource,
+              [in] IWordSink *pWordSink,
+              [in] IPhraseSink *pPhraseSink);
+    HRESULT ComposePhrase(
+              [size_is(cwcNoun)][in] const WCHAR *pwcNoun,
+              [in] ULONG cwcNoun,
+              [size_is(cwcModifier)][in] const WCHAR *pwcModifier,
+              [in] ULONG cwcModifier,
+              [in] ULONG ulAttachmentType,
+              [size_is(*pcwcPhrase)][out] WCHAR *pwcPhrase,
+              [out][in] ULONG *pcwcPhrase);
+    HRESULT GetLicenseToUse(
+              [string][out] const WCHAR **ppwcsLicense);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h
new file mode 100644
index 0000000..33c7e1a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h
@@ -0,0 +1,35 @@
+/*
+ * Defines a minimum set of macros create GUID's to keep the size
+ * small
+ *
+ * This file should be included into "only GUID definition *.h" like
+ * shlguid.h
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define INITGUID
+#include <guiddef.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl
new file mode 100644
index 0000000..059b6f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl
@@ -0,0 +1,93 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+typedef enum {
+    IS_DEFAULT                       = 0,
+    IS_URL                           = 1,
+    IS_FILE_FULLFILEPATH             = 2,
+    IS_FILE_FILENAME                 = 3,
+    IS_EMAIL_USERNAME                = 4,
+    IS_EMAIL_SMTPEMAILADDRESS        = 5,
+    IS_LOGINNAME                     = 6,
+    IS_PERSONALNAME_FULLNAME         = 7,
+    IS_PERSONALNAME_PREFIX           = 8,
+    IS_PERSONALNAME_GIVENNAME        = 9,
+    IS_PERSONALNAME_MIDDLENAME       = 10,
+    IS_PERSONALNAME_SURNAME          = 11,
+    IS_PERSONALNAME_SUFFIX           = 12,
+    IS_ADDRESS_FULLPOSTALADDRESS     = 13,
+    IS_ADDRESS_POSTALCODE            = 14,
+    IS_ADDRESS_STREET                = 15,
+    IS_ADDRESS_STATEORPROVINCE       = 16,
+    IS_ADDRESS_CITY                  = 17,
+    IS_ADDRESS_COUNTRYNAME           = 18,
+    IS_ADDRESS_COUNTRYSHORTNAME      = 19,
+    IS_CURRENCY_AMOUNTANDSYMBOL      = 20,
+    IS_CURRENCY_AMOUNT               = 21,
+    IS_DATE_FULLDATE                 = 22,
+    IS_DATE_MONTH                    = 23,
+    IS_DATE_DAY                      = 24,
+    IS_DATE_YEAR                     = 25,
+    IS_DATE_MONTHNAME                = 26,
+    IS_DATE_DAYNAME                  = 27,
+    IS_DIGITS                        = 28,
+    IS_NUMBER                        = 29,
+    IS_ONECHAR                       = 30,
+    IS_PASSWORD                      = 31,
+    IS_TELEPHONE_FULLTELEPHONENUMBER = 32,
+    IS_TELEPHONE_COUNTRYCODE         = 33,
+    IS_TELEPHONE_AREACODE            = 34,
+    IS_TELEPHONE_LOCALNUMBER         = 35,
+    IS_TIME_FULLTIME                 = 36,
+    IS_TIME_HOUR                     = 37,
+    IS_TIME_MINORSEC                 = 38,
+    IS_NUMBER_FULLWIDTH              = 39,
+    IS_ALPHANUMERIC_HALFWIDTH        = 40,
+    IS_ALPHANUMERIC_FULLWIDTH        = 41,
+    IS_CURRENCY_CHINESE              = 42,
+    IS_BOPOMOFO                      = 43,
+    IS_HIRAGANA                      = 44,
+    IS_KATAKANA_HALFWIDTH            = 45,
+    IS_KATAKANA_FULLWIDTH            = 46,
+    IS_HANJA                         = 47,
+    IS_HANGUL_HALFWIDTH              = 48,
+    IS_HANGUL_FULLWIDTH              = 49,
+    IS_SEARCH                        = 50,
+    IS_FORMULA                       = 51,
+    IS_SEARCH_INCREMENTAL            = 52,
+    IS_CHINESE_HALFWIDTH             = 53,
+    IS_CHINESE_FULLWIDTH             = 54,
+    IS_NATIVE_SCRIPT                 = 55,
+
+    IS_PHRASELIST        = -1,
+    IS_REGULAREXPRESSION = -2,
+    IS_SRGS              = -3,
+    IS_XML               = -4,
+    IS_ENUMSTRING        = -5
+} InputScope;
+
+cpp_quote("HRESULT WINAPI SetInputScope(HWND hwnd,InputScope inputscope);")
+cpp_quote("HRESULT WINAPI SetInputScopes(HWND hwnd,const InputScope *pInputScopes,UINT cInputScopes,WCHAR **ppszPhraseList,UINT cPhrases,WCHAR *pszRegExp,WCHAR *pszSRGS);")
+cpp_quote("HRESULT WINAPI SetInputScopeXML(HWND hwnd,WCHAR *pszXML);")
+
+cpp_quote("DEFINE_GUID(GUID_PROP_INPUTSCOPE,0x1713dd5a,0x68e7,0x4a5b,0x9a,0xf6,0x59,0x2a,0x59,0x5c,0x77,0x8d);")
+
+[
+    object,
+    uuid(fde1eaee-6924-4cdf-91e7-da38cff5559d),
+    pointer_default(unique)
+]
+interface ITfInputScope : IUnknown
+{
+    HRESULT GetInputScopes([out, size_is(,*pcCount)] InputScope **pprgInputScopes, [out] UINT *pcCount);
+    HRESULT GetPhrase([out, size_is(,*pcCount)] BSTR **ppbstrPhrases, [out] UINT *pcCount);
+    HRESULT GetRegularExpression([out] BSTR *pbstrRegExp);
+    HRESULT GetSRGS([out] BSTR *pbstrSRGS);
+    HRESULT GetXML([out] BSTR *pbstrXML);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h
new file mode 100644
index 0000000..426b8ca
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_INTSHCUT_H
+#define __WINE_INTSHCUT_H
+
+#include <isguids.h>
+
+#define INTSHCUTAPI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define E_FLAGS MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1000)
+#define IS_E_EXEC_FAILED MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x2002)
+#define URL_E_INVALID_SYNTAX MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1001)
+#define URL_E_UNREGISTERED_PROTOCOL MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1002)
+
+typedef enum iurl_seturl_flags {
+    IURL_SETURL_FL_GUESS_PROTOCOL=1,
+    IURL_SETURL_FL_USE_DEFAULT_PROTOCOL,
+    ALL_IURL_SETURL_FLAGS=(IURL_SETURL_FL_GUESS_PROTOCOL|IURL_SETURL_FL_USE_DEFAULT_PROTOCOL)
+} IURL_SETURL_FLAGS;
+
+typedef enum iurl_invokecommand_flags {
+    IURL_INVOKECOMMAND_FL_ALLOW_UI=1,
+    IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB,
+    ALL_IURL_INVOKECOMMAND_FLAGS=(IURL_INVOKECOMMAND_FL_ALLOW_UI|IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB)
+} IURL_INVOKECOMMAND_FLAGS;
+
+typedef struct urlinvokecommandinfoA {
+    DWORD dwcbSize;
+    DWORD dwFlags;
+    HWND hwndParent;
+    LPCSTR pcszVerb;
+} URLINVOKECOMMANDINFOA, *PURLINVOKECOMMANDINFOA;
+typedef const URLINVOKECOMMANDINFOA CURLINVOKECOMMANDINFOA;
+typedef const URLINVOKECOMMANDINFOA *PCURLINVOKECOMMANDINFOA;
+
+typedef struct urlinvokecommandinfoW {
+    DWORD dwcbSize;
+    DWORD dwFlags;
+    HWND hwndParent;
+    LPCWSTR pcszVerb;
+} URLINVOKECOMMANDINFOW, *PURLINVOKECOMMANDINFOW;
+typedef const URLINVOKECOMMANDINFOW CURLINVOKECOMMANDINFOW;
+typedef const URLINVOKECOMMANDINFOW *PCURLINVOKECOMMANDINFOW;
+
+#define INTERFACE IUniformResourceLocatorA
+DECLARE_INTERFACE_(IUniformResourceLocatorA,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IUniformResourceLocatorA methods ***/
+    STDMETHOD(SetURL)(THIS_ LPCSTR pcszURL, DWORD dwInFlags) PURE;
+    STDMETHOD(GetURL)(THIS_ LPSTR *ppszURL) PURE;
+    STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOA pURLCommandInfo) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IUniformResourceLocatorW
+DECLARE_INTERFACE_(IUniformResourceLocatorW,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IUniformResourceLocatorW methods ***/
+    STDMETHOD(SetURL)(THIS_ LPCWSTR pcszURL, DWORD dwInFlags) PURE;
+    STDMETHOD(GetURL)(THIS_ LPWSTR *ppszURL) PURE;
+    STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOW pURLCommandInfo) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(URLINVOKECOMMANDINFO)
+DECL_WINELIB_TYPE_AW(PURLINVOKECOMMANDINFO)
+DECL_WINELIB_TYPE_AW(CURLINVOKECOMMANDINFO)
+DECL_WINELIB_TYPE_AW(PCURLINVOKECOMMANDINFO)
+
+
+typedef enum translateurl_in_flags {
+    TRANSLATEURL_FL_GUESS_PROTOCOL=1,
+    TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL
+} TRANSLATEURL_IN_FLAGS;
+
+HRESULT WINAPI TranslateURLA(LPCSTR, DWORD, LPSTR *);
+HRESULT WINAPI TranslateURLW(LPCWSTR, DWORD, LPWSTR *);
+#define TranslateURL WINELIB_NAME_AW(TranslateURL)
+
+BOOL    WINAPI InetIsOffline(DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_INTSHCUT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h
new file mode 100644
index 0000000..9a138ad
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h
@@ -0,0 +1,128 @@
+/*
+ * Defines the types and macros used by the ICMP API, see icmpapi.h.
+ *
+ * Copyright (C) 1999 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IPEXPORT_H
+#define __WINE_IPEXPORT_H
+
+#include <in6addr.h>
+#include <inaddr.h>
+
+typedef ULONG IPAddr;
+typedef ULONG IPMask;
+typedef ULONG IP_STATUS;
+
+struct ip_option_information
+{
+    unsigned char  Ttl;
+    unsigned char  Tos;
+    unsigned char  Flags;
+    unsigned char  OptionsSize;
+    unsigned char* OptionsData;
+};
+
+#define IP_FLAG_DF      0x2
+
+#define IP_OPT_EOL      0
+#define IP_OPT_NOP      1
+#define IP_OPT_SECURITY 0x82
+#define IP_OPT_LSRR     0x83
+#define IP_OPT_SSRR     0x89
+#define IP_OPT_RR       0x7
+#define IP_OPT_TS       0x44
+#define IP_OPT_SID      0x88
+
+#define MAX_OPT_SIZE    40
+
+
+struct icmp_echo_reply
+{
+    IPAddr                       Address;
+    ULONG                        Status;
+    ULONG                        RoundTripTime;
+    unsigned short               DataSize;
+    unsigned short               Reserved;
+    void*                        Data;
+    struct ip_option_information Options;
+};
+
+typedef struct ip_option_information IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION;
+
+typedef struct icmp_echo_reply ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;
+
+
+#define IP_STATUS_BASE              11000
+
+#define IP_SUCCESS                  0
+#define IP_BUF_TOO_SMALL            (IP_STATUS_BASE + 1)
+#define IP_DEST_NET_UNREACHABLE     (IP_STATUS_BASE + 2)
+#define IP_DEST_HOST_UNREACHABLE    (IP_STATUS_BASE + 3)
+#define IP_DEST_PROT_UNREACHABLE    (IP_STATUS_BASE + 4)
+#define IP_DEST_PORT_UNREACHABLE    (IP_STATUS_BASE + 5)
+#define IP_NO_RESOURCES             (IP_STATUS_BASE + 6)
+#define IP_BAD_OPTION               (IP_STATUS_BASE + 7)
+#define IP_HW_ERROR                 (IP_STATUS_BASE + 8)
+#define IP_PACKET_TOO_BIG           (IP_STATUS_BASE + 9)
+#define IP_REQ_TIMED_OUT            (IP_STATUS_BASE + 10)
+#define IP_BAD_REQ                  (IP_STATUS_BASE + 11)
+#define IP_BAD_ROUTE                (IP_STATUS_BASE + 12)
+#define IP_TTL_EXPIRED_TRANSIT      (IP_STATUS_BASE + 13)
+#define IP_TTL_EXPIRED_REASSEM      (IP_STATUS_BASE + 14)
+#define IP_PARAM_PROBLEM            (IP_STATUS_BASE + 15)
+#define IP_SOURCE_QUENCH            (IP_STATUS_BASE + 16)
+#define IP_OPTION_TOO_BIG           (IP_STATUS_BASE + 17)
+#define IP_BAD_DESTINATION          (IP_STATUS_BASE + 18)
+
+#define IP_ADDR_DELETED             (IP_STATUS_BASE + 19)
+#define IP_SPEC_MTU_CHANGE          (IP_STATUS_BASE + 20)
+#define IP_MTU_CHANGE               (IP_STATUS_BASE + 21)
+#define IP_UNLOAD                   (IP_STATUS_BASE + 22)
+
+#define IP_GENERAL_FAILURE          (IP_STATUS_BASE + 50)
+#define MAX_IP_STATUS               IP_GENERAL_FAILURE
+#define IP_PENDING                  (IP_STATUS_BASE + 255)
+
+
+#define MAX_ADAPTER_NAME 128
+
+typedef struct _IP_ADAPTER_INDEX_MAP {
+  ULONG Index;
+  WCHAR Name[MAX_ADAPTER_NAME];
+} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
+
+typedef struct _IP_INTERFACE_INFO {
+  LONG                 NumAdapters;
+  IP_ADAPTER_INDEX_MAP Adapter[1];
+} IP_INTERFACE_INFO,*PIP_INTERFACE_INFO;
+
+typedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS {
+  ULONG  NumAdapters;
+  IPAddr Address[1];
+} IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;
+
+#endif /* __WINE_IPEXPORT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h
new file mode 100644
index 0000000..83ad42f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h
@@ -0,0 +1,171 @@
+/* WINE iphlpapi.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPHLPAPI_H__
+#define WINE_IPHLPAPI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <iprtrmib.h>
+#include <ipexport.h>
+#include <iptypes.h>
+
+DWORD WINAPI GetExtendedTcpTable(PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder,
+ ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved);
+
+DWORD WINAPI GetExtendedUdpTable(PVOID pUdpTable, PDWORD pdwSize, BOOL bOrder,
+ ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved);
+
+DWORD WINAPI GetNumberOfInterfaces(PDWORD pdwNumIf);
+
+DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow);
+
+DWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize,
+ BOOL bOrder);
+
+DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize,
+ BOOL bOrder);
+
+DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable,
+ PULONG pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetIpStatistics(PMIB_IPSTATS pStats);
+
+DWORD WINAPI GetIpStatisticsEx(PMIB_IPSTATS pStats, DWORD dwFamily);
+
+DWORD WINAPI GetIcmpStatistics(PMIB_ICMP pStats);
+
+DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS pStats);
+
+DWORD WINAPI GetTcpStatisticsEx(PMIB_TCPSTATS pStats, DWORD dwFamily);
+
+DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS pStats);
+
+DWORD WINAPI GetUdpStatisticsEx(PMIB_UDPSTATS pStats, DWORD dwFamily);
+
+DWORD WINAPI SetIfEntry(PMIB_IFROW pIfRow);
+
+DWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute);
+
+DWORD WINAPI SetIpForwardEntry(PMIB_IPFORWARDROW pRoute);
+
+DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute);
+
+DWORD WINAPI SetIpStatistics(PMIB_IPSTATS pIpStats);
+
+DWORD WINAPI SetIpTTL(UINT nTTL);
+
+DWORD WINAPI CreateIpNetEntry(PMIB_IPNETROW pArpEntry);
+
+DWORD WINAPI SetIpNetEntry(PMIB_IPNETROW pArpEntry);
+
+DWORD WINAPI DeleteIpNetEntry(PMIB_IPNETROW pArpEntry);
+
+DWORD WINAPI FlushIpNetTable(DWORD dwIfIndex);
+
+DWORD WINAPI CreateProxyArpEntry(DWORD dwAddress, DWORD dwMask,
+ DWORD dwIfIndex);
+
+DWORD WINAPI DeleteProxyArpEntry(DWORD dwAddress, DWORD dwMask,
+ DWORD dwIfIndex);
+
+DWORD WINAPI SetTcpEntry(PMIB_TCPROW pTcpRow);
+
+DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen);
+
+DWORD WINAPI GetUniDirectionalAdapterInfo(
+ PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen);
+
+DWORD WINAPI GetBestInterface(IPAddr dwDestAddr, PDWORD pdwBestIfIndex);
+
+#ifdef __WINE_WINSOCKAPI_STDLIB_H
+DWORD WINAPI GetBestInterfaceEx(
+#ifdef USE_WS_PREFIX
+    struct WS_sockaddr *pDestAddr,
+#else
+    struct sockaddr *pDestAddr,
+#endif
+    PDWORD pdwBestIfIndex);
+#endif
+
+DWORD WINAPI GetBestRoute(DWORD dwDestAddr, DWORD dwSourceAddr,
+ PMIB_IPFORWARDROW   pBestRoute);
+
+DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped);
+
+DWORD WINAPI NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped);
+
+BOOL WINAPI CancelIPChangeNotify(LPOVERLAPPED overlapped);
+
+DWORD WINAPI GetAdapterIndex(IN LPWSTR AdapterName, OUT PULONG IfIndex);
+
+DWORD WINAPI AddIPAddress(IPAddr Address, IPMask IpMask, DWORD IfIndex,
+ PULONG NTEContext, PULONG NTEInstance);
+
+DWORD WINAPI DeleteIPAddress(ULONG NTEContext);
+
+DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen);
+
+DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);
+
+DWORD WINAPI GetPerAdapterInfo(ULONG IfIndex,
+ PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen);
+
+DWORD WINAPI IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo);
+
+DWORD WINAPI IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo);
+
+DWORD WINAPI SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr,
+ PULONG  PhyAddrLen);
+
+BOOL WINAPI GetRTTAndHopCount(IPAddr DestIpAddress, PULONG HopCount,
+ ULONG  MaxHops, PULONG RTT);
+
+DWORD WINAPI GetFriendlyIfIndex(DWORD IfIndex);
+
+DWORD WINAPI EnableRouter(HANDLE* pHandle, OVERLAPPED* pOverlapped);
+
+DWORD WINAPI UnenableRouter(OVERLAPPED* pOverlapped, LPDWORD lpdwEnableCount);
+
+#ifdef _WINSOCK2API_
+ULONG WINAPI GetAdaptersAddresses(ULONG family, ULONG flags, PVOID reserved,
+                                  PIP_ADAPTER_ADDRESSES aa, PULONG buflen);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WINE_IPHLPAPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h
new file mode 100644
index 0000000..e593489
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h
@@ -0,0 +1,254 @@
+/* WINE ipifcons.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPIFCONS_H__
+#define WINE_IPIFCONS_H__
+
+#define IF_TYPE_OTHER                            1
+#define IF_TYPE_REGULAR_1822                     2
+#define IF_TYPE_HDH_1822                         3
+#define IF_TYPE_DDN_X25                          4
+#define IF_TYPE_RFC877_X25                       5
+#define IF_TYPE_ETHERNET_CSMACD                  6
+#define IF_TYPE_IS088023_CSMACD                  7
+#define IF_TYPE_ISO88024_TOKENBUS                8
+#define IF_TYPE_ISO88025_TOKENRING               9
+#define IF_TYPE_ISO88026_MAN                     10
+#define IF_TYPE_STARLAN                          11
+#define IF_TYPE_PROTEON_10MBIT                   12
+#define IF_TYPE_PROTEON_80MBIT                   13
+#define IF_TYPE_HYPERCHANNEL                     14
+#define IF_TYPE_FDDI                             15
+#define IF_TYPE_LAP_B                            16
+#define IF_TYPE_SDLC                             17
+#define IF_TYPE_DS1                              18
+#define IF_TYPE_E1                               19
+#define IF_TYPE_BASIC_ISDN                       20
+#define IF_TYPE_PRIMARY_ISDN                     21
+#define IF_TYPE_PROP_POINT2POINT_SERIAL          22
+#define IF_TYPE_PPP                              23
+#define IF_TYPE_SOFTWARE_LOOPBACK                24
+#define IF_TYPE_EON                              25
+#define IF_TYPE_ETHERNET_3MBIT                   26
+#define IF_TYPE_NSIP                             27
+#define IF_TYPE_SLIP                             28
+#define IF_TYPE_ULTRA                            29
+#define IF_TYPE_DS3                              30
+#define IF_TYPE_SIP                              31
+#define IF_TYPE_FRAMERELAY                       32
+#define IF_TYPE_RS232                            33
+#define IF_TYPE_PARA                             34
+#define IF_TYPE_ARCNET                           35
+#define IF_TYPE_ARCNET_PLUS                      36
+#define IF_TYPE_ATM                              37
+#define IF_TYPE_MIO_X25                          38
+#define IF_TYPE_SONET                            39
+#define IF_TYPE_X25_PLE                          40
+#define IF_TYPE_ISO88022_LLC                     41
+#define IF_TYPE_LOCALTALK                        42
+#define IF_TYPE_SMDS_DXI                         43
+#define IF_TYPE_FRAMERELAY_SERVICE               44
+#define IF_TYPE_V35                              45
+#define IF_TYPE_HSSI                             46
+#define IF_TYPE_HIPPI                            47
+#define IF_TYPE_MODEM                            48
+#define IF_TYPE_AAL5                             49
+#define IF_TYPE_SONET_PATH                       50
+#define IF_TYPE_SONET_VT                         51
+#define IF_TYPE_SMDS_ICIP                        52
+#define IF_TYPE_PROP_VIRTUAL                     53
+#define IF_TYPE_PROP_MULTIPLEXOR                 54
+#define IF_TYPE_IEEE80212                        55
+#define IF_TYPE_FIBRECHANNEL                     56
+#define IF_TYPE_HIPPIINTERFACE                   57
+#define IF_TYPE_FRAMERELAY_INTERCONNECT          58
+#define IF_TYPE_AFLANE_8023                      59
+#define IF_TYPE_AFLANE_8025                      60
+#define IF_TYPE_CCTEMUL                          61
+#define IF_TYPE_FASTETHER                        62
+#define IF_TYPE_ISDN                             63
+#define IF_TYPE_V11                              64
+#define IF_TYPE_V36                              65
+#define IF_TYPE_G703_64K                         66
+#define IF_TYPE_G703_2MB                         67
+#define IF_TYPE_QLLC                             68
+#define IF_TYPE_FASTETHER_FX                     69
+#define IF_TYPE_CHANNEL                          70
+#define IF_TYPE_IEEE80211                        71
+#define IF_TYPE_IBM370PARCHAN                    72
+#define IF_TYPE_ESCON                            73
+#define IF_TYPE_DLSW                             74
+#define IF_TYPE_ISDN_S                           75
+#define IF_TYPE_ISDN_U                           76
+#define IF_TYPE_LAP_D                            77
+#define IF_TYPE_IPSWITCH                         78
+#define IF_TYPE_RSRB                             79
+#define IF_TYPE_ATM_LOGICAL                      80
+#define IF_TYPE_DS0                              81
+#define IF_TYPE_DS0_BUNDLE                       82
+#define IF_TYPE_BSC                              83
+#define IF_TYPE_ASYNC                            84
+#define IF_TYPE_CNR                              85
+#define IF_TYPE_ISO88025R_DTR                    86
+#define IF_TYPE_EPLRS                            87
+#define IF_TYPE_ARAP                             88
+#define IF_TYPE_PROP_CNLS                        89
+#define IF_TYPE_HOSTPAD                          90
+#define IF_TYPE_TERMPAD                          91
+#define IF_TYPE_FRAMERELAY_MPI                   92
+#define IF_TYPE_X213                             93
+#define IF_TYPE_ADSL                             94
+#define IF_TYPE_RADSL                            95
+#define IF_TYPE_SDSL                             96
+#define IF_TYPE_VDSL                             97
+#define IF_TYPE_ISO88025_CRFPRINT                98
+#define IF_TYPE_MYRINET                          99
+#define IF_TYPE_VOICE_EM                         100
+#define IF_TYPE_VOICE_FXO                        101
+#define IF_TYPE_VOICE_FXS                        102
+#define IF_TYPE_VOICE_ENCAP                      103
+#define IF_TYPE_VOICE_OVERIP                     104
+#define IF_TYPE_ATM_DXI                          105
+#define IF_TYPE_ATM_FUNI                         106
+#define IF_TYPE_ATM_IMA                          107
+#define IF_TYPE_PPPMULTILINKBUNDLE               108
+#define IF_TYPE_IPOVER_CDLC                      109
+#define IF_TYPE_IPOVER_CLAW                      110
+#define IF_TYPE_STACKTOSTACK                     111
+#define IF_TYPE_VIRTUALIPADDRESS                 112
+#define IF_TYPE_MPC                              113
+#define IF_TYPE_IPOVER_ATM                       114
+#define IF_TYPE_ISO88025_FIBER                   115
+#define IF_TYPE_TDLC                             116
+#define IF_TYPE_GIGABITETHERNET                  117
+#define IF_TYPE_HDLC                             118
+#define IF_TYPE_LAP_F                            119
+#define IF_TYPE_V37                              120
+#define IF_TYPE_X25_MLP                          121
+#define IF_TYPE_X25_HUNTGROUP                    122
+#define IF_TYPE_TRANSPHDLC                       123
+#define IF_TYPE_INTERLEAVE                       124
+#define IF_TYPE_FAST                             125
+#define IF_TYPE_IP                               126
+#define IF_TYPE_DOCSCABLE_MACLAYER               127
+#define IF_TYPE_DOCSCABLE_DOWNSTREAM             128
+#define IF_TYPE_DOCSCABLE_UPSTREAM               129
+#define IF_TYPE_A12MPPSWITCH                     130
+#define IF_TYPE_TUNNEL                           131
+#define IF_TYPE_COFFEE                           132
+#define IF_TYPE_CES                              133
+#define IF_TYPE_ATM_SUBINTERFACE                 134
+#define IF_TYPE_L2_VLAN                          135
+#define IF_TYPE_L3_IPVLAN                        136
+#define IF_TYPE_L3_IPXVLAN                       137
+#define IF_TYPE_DIGITALPOWERLINE                 138
+#define IF_TYPE_MEDIAMAILOVERIP                  139
+#define IF_TYPE_DTM                              140
+#define IF_TYPE_DCN                              141
+#define IF_TYPE_IPFORWARD                        142
+#define IF_TYPE_MSDSL                            143
+#define IF_TYPE_IEEE1394                         144
+#define IF_TYPE_IF_GSN                           145
+#define IF_TYPE_DVBRCC_MACLAYER                  146
+#define IF_TYPE_DVBRCC_DOWNSTREAM                147
+#define IF_TYPE_DVBRCC_UPSTREAM                  148
+#define IF_TYPE_ATM_VIRTUAL                      149
+#define IF_TYPE_MPLS_TUNNEL                      150
+#define IF_TYPE_SRP                              151
+#define IF_TYPE_VOICEOVERATM                     152
+#define IF_TYPE_VOICEOVERFRAMERELAY              153
+#define IF_TYPE_IDSL                             154
+#define IF_TYPE_COMPOSITELINK                    155
+#define IF_TYPE_SS7_SIGLINK                      156
+#define IF_TYPE_PROP_WIRELESS_P2P                157
+#define IF_TYPE_FR_FORWARD                       158
+#define IF_TYPE_RFC1483                          159
+#define IF_TYPE_USB                              160
+#define IF_TYPE_IEEE8023AD_LAG                   161
+#define IF_TYPE_BGP_POLICY_ACCOUNTING            162
+#define IF_TYPE_FRF16_MFR_BUNDLE                 163
+#define IF_TYPE_H323_GATEKEEPER                  164
+#define IF_TYPE_H323_PROXY                       165
+#define IF_TYPE_MPLS                             166
+#define IF_TYPE_MF_SIGLINK                       167
+#define IF_TYPE_HDSL2                            168
+#define IF_TYPE_SHDSL                            169
+#define IF_TYPE_DS1_FDL                          170
+#define IF_TYPE_POS                              171
+#define IF_TYPE_DVB_ASI_IN                       172
+#define IF_TYPE_DVB_ASI_OUT                      173
+#define IF_TYPE_PLC                              175
+#define IF_TYPE_NFAS                             175
+#define IF_TYPE_TR008                            176
+#define IF_TYPE_GR303_RDT                        177
+#define IF_TYPE_GR303_IDT                        178
+#define IF_TYPE_ISUP                             179
+#define IF_TYPE_PROP_DOCS_WIRELESS_MACLAYER      180
+#define IF_TYPE_PROP_DOCS_WIRELESS_DOWNSTREAM    181
+#define IF_TYPE_PROP_DOCS_WIRELESS_UPSTREAM      182
+#define IF_TYPE_HIPERLAN2                        183
+#define IF_TYPE_PROP_BWA_P2MP                    184
+#define IF_TYPE_SONET_OVERHEAD_CHANNEL           185
+#define IF_TYPE_DIGITAL_WRAPPER_OVERHEAD_CHANNEL 186
+#define IF_TYPE_AAL2                             187
+#define IF_TYPE_RADIO_MAC                        188
+#define IF_TYPE_ATM_RADIO                        189
+#define IF_TYPE_IMT                              190
+#define IF_TYPE_MVL                              191
+#define IF_TYPE_REACH_DSL                        192
+#define IF_TYPE_FR_DLCI_ENDPT                    193
+#define IF_TYPE_ATM_VCI_ENDPT                    194
+#define IF_TYPE_OPTICAL_CHANNEL                  195
+#define IF_TYPE_OPTICAL_TRANSPORT                196
+#define IF_TYPE_IEEE80216_WANN                   237
+#define IF_TYPE_WWANPP                           243
+#define IF_TYPE_WWANPP2                          244
+#define MAX_IF_TYPE                              244
+
+#define MIB_IF_TYPE_OTHER               1
+#define MIB_IF_TYPE_ETHERNET            6
+#define MIB_IF_TYPE_TOKENRING           9
+#define MIB_IF_TYPE_FDDI                15
+#define MIB_IF_TYPE_PPP                 23
+#define MIB_IF_TYPE_LOOPBACK            24
+#define MIB_IF_TYPE_SLIP                28
+
+#define MIB_IF_ADMIN_STATUS_UP          1
+#define MIB_IF_ADMIN_STATUS_DOWN        2
+#define MIB_IF_ADMIN_STATUS_TESTING     3
+
+typedef enum _INTERNAL_IF_OPER_STATUS
+{
+    MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0,
+    MIB_IF_OPER_STATUS_UNREACHABLE = 1,
+    MIB_IF_OPER_STATUS_DISCONNECTED = 2,
+    MIB_IF_OPER_STATUS_CONNECTING = 3,
+    MIB_IF_OPER_STATUS_CONNECTED = 4,
+    MIB_IF_OPER_STATUS_OPERATIONAL = 5,
+} INTERNAL_IF_OPER_STATUS;
+
+#endif /* WINE_IPIFCONS_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h
new file mode 100644
index 0000000..a4d63b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IPMIB_H
+#define __WINE_IPMIB_H
+
+#include <ifmib.h>
+#include <nldef.h>
+
+
+/* IPADDR table */
+
+typedef struct _MIB_IPADDRROW
+{
+    DWORD          dwAddr;
+    IF_INDEX       dwIndex;
+    DWORD          dwMask;
+    DWORD          dwBCastAddr;
+    DWORD          dwReasmSize;
+    unsigned short unused1;
+    unsigned short wType;
+} MIB_IPADDRROW, *PMIB_IPADDRROW;
+
+typedef struct _MIB_IPADDRTABLE
+{
+    DWORD         dwNumEntries;
+    MIB_IPADDRROW table[1];
+} MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;
+
+
+/* IPFORWARD table */
+
+typedef struct _MIB_IPFORWARDNUMBER
+{
+    DWORD dwValue;
+} MIB_IPFORWARDNUMBER, *PMIB_IPFORWARDNUMBER;
+
+typedef enum
+{
+    MIB_IPROUTE_TYPE_OTHER = 1,
+    MIB_IPROUTE_TYPE_INVALID = 2,
+    MIB_IPROUTE_TYPE_DIRECT = 3,
+    MIB_IPROUTE_TYPE_INDIRECT = 4,
+} MIB_IPFORWARD_TYPE;
+
+typedef NL_ROUTE_PROTOCOL MIB_IPFORWARD_PROTO;
+
+typedef struct _MIB_IPFORWARDROW
+{
+    DWORD    dwForwardDest;
+    DWORD    dwForwardMask;
+    DWORD    dwForwardPolicy;
+    DWORD    dwForwardNextHop;
+    IF_INDEX dwForwardIfIndex;
+    union
+    {
+        DWORD              dwForwardType;
+        MIB_IPFORWARD_TYPE ForwardType;
+    } DUMMYUNIONNAME1;
+    union
+    {
+        DWORD               dwForwardProto;
+        MIB_IPFORWARD_PROTO ForwardProto;
+    } DUMMYUNIONNAME2;
+    DWORD    dwForwardAge;
+    DWORD    dwForwardNextHopAS;
+    DWORD    dwForwardMetric1;
+    DWORD    dwForwardMetric2;
+    DWORD    dwForwardMetric3;
+    DWORD    dwForwardMetric4;
+    DWORD    dwForwardMetric5;
+} MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;
+
+typedef struct _MIB_IPFORWARDTABLE
+{
+    DWORD            dwNumEntries;
+    MIB_IPFORWARDROW table[1];
+} MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;
+
+
+/* IPNET table */
+
+typedef enum
+{
+    MIB_IPNET_TYPE_OTHER = 1,
+    MIB_IPNET_TYPE_INVALID = 2,
+    MIB_IPNET_TYPE_DYNAMIC = 3,
+    MIB_IPNET_TYPE_STATIC = 4,
+} MIB_IPNET_TYPE;
+
+typedef struct _MIB_IPNETROW
+{
+    DWORD dwIndex;
+    DWORD dwPhysAddrLen;
+    BYTE  bPhysAddr[MAXLEN_PHYSADDR];
+    DWORD dwAddr;
+    union
+    {
+        DWORD          dwType;
+        MIB_IPNET_TYPE Type;
+    } DUMMYUNIONNAME;
+} MIB_IPNETROW, *PMIB_IPNETROW;
+
+typedef struct _MIB_IPNETTABLE
+{
+    DWORD        dwNumEntries;
+    MIB_IPNETROW table[1];
+} MIB_IPNETTABLE, *PMIB_IPNETTABLE;
+
+
+/* IP statistics */
+
+typedef enum
+{
+    MIB_IP_FORWARDING = 1,
+    MIB_IP_NOT_FORWARDING = 2,
+} MIB_IPSTATS_FORWARDING, *PMIB_IPSTATS_FORWARDING;
+
+typedef struct _MIB_IPSTATS
+{
+    union
+    {
+        DWORD                  dwForwarding;
+        MIB_IPSTATS_FORWARDING Forwarding;
+    } DUMMYUNIONNAME;
+    DWORD dwDefaultTTL;
+    DWORD dwInReceives;
+    DWORD dwInHdrErrors;
+    DWORD dwInAddrErrors;
+    DWORD dwForwDatagrams;
+    DWORD dwInUnknownProtos;
+    DWORD dwInDiscards;
+    DWORD dwInDelivers;
+    DWORD dwOutRequests;
+    DWORD dwRoutingDiscards;
+    DWORD dwOutDiscards;
+    DWORD dwOutNoRoutes;
+    DWORD dwReasmTimeout;
+    DWORD dwReasmReqds;
+    DWORD dwReasmOks;
+    DWORD dwReasmFails;
+    DWORD dwFragOks;
+    DWORD dwFragFails;
+    DWORD dwFragCreates;
+    DWORD dwNumIf;
+    DWORD dwNumAddr;
+    DWORD dwNumRoutes;
+} MIB_IPSTATS, *PMIB_IPSTATS;
+
+
+/* ICMP statistics */
+
+typedef struct _MIBICMPSTATS
+{
+    DWORD dwMsgs;
+    DWORD dwErrors;
+    DWORD dwDestUnreachs;
+    DWORD dwTimeExcds;
+    DWORD dwParmProbs;
+    DWORD dwSrcQuenchs;
+    DWORD dwRedirects;
+    DWORD dwEchos;
+    DWORD dwEchoReps;
+    DWORD dwTimestamps;
+    DWORD dwTimestampReps;
+    DWORD dwAddrMasks;
+    DWORD dwAddrMaskReps;
+} MIBICMPSTATS, *PMIBICMPSTATS;
+
+typedef struct _MIBICMPINFO
+{
+    MIBICMPSTATS icmpInStats;
+    MIBICMPSTATS icmpOutStats;
+} MIBICMPINFO;
+
+typedef struct _MIB_ICMP
+{
+    MIBICMPINFO stats;
+} MIB_ICMP, *PMIB_ICMP;
+
+typedef enum
+{
+    ICMP4_ECHO_REPLY        =  0,
+    ICMP4_DST_UNREACH       =  3,
+    ICMP4_SOURCE_QUENCH     =  4,
+    ICMP4_REDIRECT          =  5,
+    ICMP4_ECHO_REQUEST      =  8,
+    ICMP4_ROUTER_ADVERT     =  9,
+    ICMP4_ROUTER_SOLICIT    = 10,
+    ICMP4_TIME_EXCEEDED     = 11,
+    ICMP4_PARAM_PROB        = 12,
+    ICMP4_TIMESTAMP_REQUEST = 13,
+    ICMP4_TIMESTAMP_REPLY   = 14,
+    ICMP4_MASK_REQUEST      = 17,
+    ICMP4_MASK_REPLY        = 18,
+} ICMP4_TYPE, *PICMP4_TYPE;
+
+typedef enum
+{
+    ICMP6_DST_UNREACH          =   1,
+    ICMP6_PACKET_TOO_BIG       =   2,
+    ICMP6_TIME_EXCEEDED        =   3,
+    ICMP6_PARAM_PROB           =   4,
+    ICMP6_ECHO_REQUEST         = 128,
+    ICMP6_ECHO_REPLY           = 129,
+    ICMP6_MEMBERSHIP_QUERY     = 130,
+    ICMP6_MEMBERSHIP_REPORT    = 131,
+    ICMP6_MEMBERSHIP_REDUCTION = 132,
+    ND_ROUTER_SOLICIT          = 133,
+    ND_ROUTER_ADVERT           = 134,
+    ND_NEIGHBOR_SOLICIT        = 135,
+    ND_NEIGHBOR_ADVERT         = 136,
+    ND_REDIRECT                = 137,
+    ICMP6_V2_MEMBERSHIP_REPORT = 143,
+} ICMP6_TYPE, *PICMP6_TYPE;
+
+typedef struct _MIBICMPSTATS_EX
+{
+    DWORD dwMsgs;
+    DWORD dwErrors;
+    DWORD rgdwTypeCount[256];
+} MIBICMPSTATS_EX, *PMIBICMPSTATS_EX;
+
+typedef struct _MIB_ICMP_EX
+{
+  MIBICMPSTATS_EX icmpInStats;
+  MIBICMPSTATS_EX icmpOutStats;
+} MIB_ICMP_EX, *PMIB_ICMP_EX;
+
+#endif /* __WINE_IPMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h
new file mode 100644
index 0000000..bc6a6e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h
@@ -0,0 +1,58 @@
+/* WINE iprtrmib.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPRTRMIB_H__
+#define WINE_IPRTRMIB_H__
+
+#include <mprapi.h>
+#include <ipifcons.h>
+
+#include <ipmib.h>
+#include <tcpmib.h>
+#include <udpmib.h>
+
+typedef enum _TCP_TABLE_CLASS
+{
+    TCP_TABLE_BASIC_LISTENER,
+    TCP_TABLE_BASIC_CONNECTIONS,
+    TCP_TABLE_BASIC_ALL,
+    TCP_TABLE_OWNER_PID_LISTENER,
+    TCP_TABLE_OWNER_PID_CONNECTIONS,
+    TCP_TABLE_OWNER_PID_ALL,
+    TCP_TABLE_OWNER_MODULE_LISTENER,
+    TCP_TABLE_OWNER_MODULE_CONNECTIONS,
+    TCP_TABLE_OWNER_MODULE_ALL
+} TCP_TABLE_CLASS, *PTCP_TABLE_CLASS;
+
+typedef enum _UDP_TABLE_CLASS
+{
+    UDP_TABLE_BASIC,
+    UDP_TABLE_OWNER_PID,
+    UDP_TABLE_OWNER_MODULE
+} UDP_TABLE_CLASS, *PUDP_TABLE_CLASS;
+
+#endif /* WINE_IPRTRMIB_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h
new file mode 100644
index 0000000..8908d5c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h
@@ -0,0 +1,269 @@
+/* WINE iptypes.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPTYPES_H_
+#define WINE_IPTYPES_H_
+
+#include <time.h>
+#include <ifdef.h>
+#include <nldef.h>
+
+#define MAX_ADAPTER_DESCRIPTION_LENGTH  128
+#define MAX_ADAPTER_NAME_LENGTH         256
+#define MAX_ADAPTER_ADDRESS_LENGTH      8
+#define MAX_HOSTNAME_LEN                128
+#define MAX_DOMAIN_NAME_LEN             128
+#define MAX_SCOPE_ID_LEN                256
+#define MAX_DHCPV6_DUID_LENGTH          130
+#define MAX_DNS_SUFFIX_STRING_LENGTH    256
+
+#define BROADCAST_NODETYPE              1
+#define PEER_TO_PEER_NODETYPE           2
+#define MIXED_NODETYPE                  4
+#define HYBRID_NODETYPE                 8
+
+typedef struct {
+    char String[4 * 4];
+} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
+
+typedef struct _IP_ADDR_STRING {
+    struct _IP_ADDR_STRING* Next;
+    IP_ADDRESS_STRING IpAddress;
+    IP_MASK_STRING IpMask;
+    DWORD Context;
+} IP_ADDR_STRING, *PIP_ADDR_STRING;
+
+typedef struct _IP_ADAPTER_INFO {
+    struct _IP_ADAPTER_INFO* Next;
+    DWORD ComboIndex;
+    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
+    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
+    UINT AddressLength;
+    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
+    DWORD Index;
+    UINT Type;
+    UINT DhcpEnabled;
+    PIP_ADDR_STRING CurrentIpAddress;
+    IP_ADDR_STRING IpAddressList;
+    IP_ADDR_STRING GatewayList;
+    IP_ADDR_STRING DhcpServer;
+    BOOL HaveWins;
+    IP_ADDR_STRING PrimaryWinsServer;
+    IP_ADDR_STRING SecondaryWinsServer;
+    time_t LeaseObtained;
+    time_t LeaseExpires;
+} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
+
+typedef struct _IP_PER_ADAPTER_INFO {
+    UINT AutoconfigEnabled;
+    UINT AutoconfigActive;
+    PIP_ADDR_STRING CurrentDnsServer;
+    IP_ADDR_STRING DnsServerList;
+} IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
+
+typedef struct {
+    char HostName[MAX_HOSTNAME_LEN + 4] ;
+    char DomainName[MAX_DOMAIN_NAME_LEN + 4];
+    PIP_ADDR_STRING CurrentDnsServer;
+    IP_ADDR_STRING DnsServerList;
+    UINT NodeType;
+    char ScopeId[MAX_SCOPE_ID_LEN + 4];
+    UINT EnableRouting;
+    UINT EnableProxy;
+    UINT EnableDns;
+} FIXED_INFO, *PFIXED_INFO;
+
+typedef NL_PREFIX_ORIGIN IP_PREFIX_ORIGIN;
+typedef NL_SUFFIX_ORIGIN IP_SUFFIX_ORIGIN;
+typedef NL_DAD_STATE IP_DAD_STATE;
+
+#ifdef _WINSOCK2API_
+
+typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
+    union {
+        struct {
+            ULONG Length;
+            DWORD Flags;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
+    SOCKET_ADDRESS                      Address;
+    IP_PREFIX_ORIGIN                    PrefixOrigin;
+    IP_SUFFIX_ORIGIN                    SuffixOrigin;
+    IP_DAD_STATE                        DadState;
+    ULONG                               ValidLifetime;
+    ULONG                               PreferredLifetime;
+    ULONG                               LeaseLifetime;
+} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD Flags;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
+    SOCKET_ADDRESS                      Address;
+} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD Flags;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
+    SOCKET_ADDRESS                       Address;
+} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD Reserved;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
+    SOCKET_ADDRESS                         Address;
+} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
+
+typedef struct _IP_ADAPTER_PREFIX {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD Flags;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_PREFIX *Next;
+    SOCKET_ADDRESS             Address;
+    ULONG                      PrefixLength;
+} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
+
+typedef struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD Reserved;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH *Next;
+    SOCKET_ADDRESS Address;
+} IP_ADAPTER_WINS_SERVER_ADDRESS_LH, *PIP_ADAPTER_WINS_SERVER_ADDRESS_LH;
+typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH IP_ADAPTER_WINS_SERVER_ADDRESS;
+typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH *PIP_ADAPTER_WINS_SERVER_ADDRESS;
+
+typedef struct _IP_ADAPTER_GATEWAY_ADDRESS_LH {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD Reserved;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_GATEWAY_ADDRESS_LH *Next;
+    SOCKET_ADDRESS Address;
+} IP_ADAPTER_GATEWAY_ADDRESS_LH, *PIP_ADAPTER_GATEWAY_ADDRESS_LH;
+typedef IP_ADAPTER_GATEWAY_ADDRESS_LH IP_ADAPTER_GATEWAY_ADDRESS;
+typedef IP_ADAPTER_GATEWAY_ADDRESS_LH *PIP_ADAPTER_GATEWAY_ADDRESS;
+
+#define IP_ADAPTER_DDNS_ENABLED               0x1
+#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX    0x2
+#define IP_ADAPTER_DHCP_ENABLED               0x4
+#define IP_ADAPTER_RECEIVE_ONLY               0x8
+#define IP_ADAPTER_NO_MULTICAST               0x10
+#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20
+#define IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED 0x40
+#define IP_ADAPTER_IPV4_ENABLED               0x80
+#define IP_ADAPTER_IPV6_ENABLED               0x100
+#define IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG 0x200
+
+typedef struct _IP_ADAPTER_ADDRESSES {
+    union {
+        ULONGLONG Alignment;
+        struct {
+            ULONG Length;
+            DWORD IfIndex;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    struct _IP_ADAPTER_ADDRESSES   *Next;
+    PCHAR                           AdapterName;
+    PIP_ADAPTER_UNICAST_ADDRESS     FirstUnicastAddress;
+    PIP_ADAPTER_ANYCAST_ADDRESS     FirstAnycastAddress;
+    PIP_ADAPTER_MULTICAST_ADDRESS   FirstMulticastAddress;
+    PIP_ADAPTER_DNS_SERVER_ADDRESS  FirstDnsServerAddress;
+    PWCHAR                          DnsSuffix;
+    PWCHAR                          Description;
+    PWCHAR                          FriendlyName;
+    BYTE                            PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
+    DWORD                           PhysicalAddressLength;
+    DWORD                           Flags;
+    DWORD                           Mtu;
+    DWORD                           IfType;
+    IF_OPER_STATUS                  OperStatus;
+    DWORD                           Ipv6IfIndex;
+    DWORD                           ZoneIndices[16];
+    PIP_ADAPTER_PREFIX              FirstPrefix;
+    ULONG64                         TransmitLinkSpeed;
+    ULONG64                         ReceiveLinkSpeed;
+    PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
+    PIP_ADAPTER_GATEWAY_ADDRESS_LH  FirstGatewayAddress;
+    ULONG                           Ipv4Metric;
+    ULONG                           Ipv6Metric;
+    IF_LUID                         Luid;
+    SOCKET_ADDRESS                  Dhcpv4Server;
+    NET_IF_COMPARTMENT_ID           CompartmentId;
+    NET_IF_NETWORK_GUID             NetworkGuid;
+    NET_IF_CONNECTION_TYPE          ConnectionType;
+    TUNNEL_TYPE                     TunnelType;
+    SOCKET_ADDRESS                  Dhcpv6Server;
+    BYTE                            Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
+    ULONG                           Dhcpv6ClientDuidLength;
+    ULONG                           Dhcpv6Iaid;
+} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
+
+#define GAA_FLAG_SKIP_UNICAST                0x00000001
+#define GAA_FLAG_SKIP_ANYCAST                0x00000002
+#define GAA_FLAG_SKIP_MULTICAST              0x00000004
+#define GAA_FLAG_SKIP_DNS_SERVER             0x00000008
+#define GAA_FLAG_INCLUDE_PREFIX              0x00000010
+#define GAA_FLAG_SKIP_FRIENDLY_NAME          0x00000020
+#define GAA_FLAG_INCLUDE_WINS_INFO           0x00000040
+#define GAA_FLAG_INCLUDE_ALL_GATEWAYS        0x00000080
+#define GAA_FLAG_INCLUDE_ALL_INTERFACES      0x00000100
+#define GAA_FLAG_INCLUDE_ALL_COMPARTMENTS    0x00000200
+#define GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER 0x00000400
+
+#endif /* _WINSOCK2API_ */
+
+#endif /* WINE_IPTYPES_H_*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h
new file mode 100644
index 0000000..43e6a70
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2007 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _ISGUIDS_H_
+#define _ISGUIDS_H_
+
+DEFINE_GUID(CLSID_InternetShortcut, 0xfbf23b40,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8);
+
+DEFINE_GUID(IID_IUniformResourceLocatorA, 0xfbf23b80,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8);
+DEFINE_GUID(IID_IUniformResourceLocatorW, 0xcabb0da0,0xda57,0x11cf,0x99,0x74,0x00,0x20,0xaf,0xd7,0x97,0x62);
+#define IID_IUniformResourceLocator WINELIB_NAME_AW(IID_IUniformResourceLocator)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h
new file mode 100644
index 0000000..2cb19b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2010 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifdef DEFINE_KNOWN_FOLDER
+#undef DEFINE_KNOWN_FOLDER
+#endif
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        EXTERN_C const GUID name DECLSPEC_HIDDEN; \
+        EXTERN_C const GUID name = \
+    { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#else
+#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        const GUID name DECLSPEC_HIDDEN; \
+        const GUID name = \
+    { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#endif
+#else
+#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+    EXTERN_C const GUID name DECLSPEC_HIDDEN
+#endif
+
+DEFINE_KNOWN_FOLDER(FOLDERID_AddNewPrograms,        0xde61d971, 0x5ebc, 0x4f02, 0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04);
+DEFINE_KNOWN_FOLDER(FOLDERID_AdminTools,            0x724ef170, 0xa42d, 0x4fef, 0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f);
+DEFINE_KNOWN_FOLDER(FOLDERID_AppUpdates,            0xa305ce99, 0xf527, 0x492b, 0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4);
+DEFINE_KNOWN_FOLDER(FOLDERID_CDBurning,             0x9e52ab10, 0xf80d, 0x49df, 0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55);
+DEFINE_KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms,  0xdf7266ac, 0x9274, 0x4867, 0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonAdminTools,      0xd0384e7d, 0xbac3, 0x4797, 0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonOEMLinks,        0xc1bae2d0, 0x10df, 0x4334, 0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonPrograms,        0x0139d44e, 0x6afe, 0x49f2, 0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonStartMenu,       0xa4115719, 0xd62e, 0x491d, 0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonStartup,         0x82a5ea35, 0xd9cd, 0x47c5, 0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonTemplates,       0xb94237e7, 0x57ac, 0x4347, 0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7);
+DEFINE_KNOWN_FOLDER(FOLDERID_ComputerFolder,        0x0ac0837c, 0xbbf8, 0x452a, 0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7);
+DEFINE_KNOWN_FOLDER(FOLDERID_ConflictFolder,        0x4bfefb45, 0x347d, 0x4006, 0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92);
+DEFINE_KNOWN_FOLDER(FOLDERID_ConnectionsFolder,     0x6f0cd92b, 0x2e97, 0x45d1, 0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd);
+DEFINE_KNOWN_FOLDER(FOLDERID_Contacts,              0x56784854, 0xc6cb, 0x462b, 0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82);
+DEFINE_KNOWN_FOLDER(FOLDERID_ControlPanelFolder,    0x82a74aeb, 0xaeb4, 0x465c, 0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63);
+DEFINE_KNOWN_FOLDER(FOLDERID_Cookies,               0x2b0f765d, 0xc0e9, 0x4171, 0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6);
+DEFINE_KNOWN_FOLDER(FOLDERID_Desktop,               0xb4bfcc3a, 0xdb2c, 0x424c, 0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41);
+DEFINE_KNOWN_FOLDER(FOLDERID_DeviceMetadataStore,   0x5ce4a5e9, 0xe4eb, 0x479d, 0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55);
+DEFINE_KNOWN_FOLDER(FOLDERID_Documents,             0xfdd39ad0, 0x238f, 0x46af, 0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7);
+DEFINE_KNOWN_FOLDER(FOLDERID_DocumentsLibrary,      0x7b0db17d, 0x9cd2, 0x4a93, 0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c);
+DEFINE_KNOWN_FOLDER(FOLDERID_Downloads,             0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b);
+DEFINE_KNOWN_FOLDER(FOLDERID_Favorites,             0x1777f761, 0x68ad, 0x4d8a, 0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd);
+DEFINE_KNOWN_FOLDER(FOLDERID_Fonts,                 0xfd228cb7, 0xae11, 0x4ae3, 0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe);
+DEFINE_KNOWN_FOLDER(FOLDERID_Games,                 0xcac52c1a, 0xb53d, 0x4edc, 0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34);
+DEFINE_KNOWN_FOLDER(FOLDERID_GameTasks,             0x054fae61, 0x4dd8, 0x4787, 0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00);
+DEFINE_KNOWN_FOLDER(FOLDERID_History,               0xd9dc8a3b, 0xb784, 0x432e, 0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63);
+DEFINE_KNOWN_FOLDER(FOLDERID_HomeGroup,             0x52528a6b, 0xb9e3, 0x4add, 0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d);
+DEFINE_KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts,  0xbcb5256f, 0x79f6, 0x4cee, 0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46);
+DEFINE_KNOWN_FOLDER(FOLDERID_InternetCache,         0x352481e8, 0x33be, 0x4251, 0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d);
+DEFINE_KNOWN_FOLDER(FOLDERID_InternetFolder,        0x4d9f7874, 0x4e0c, 0x4904, 0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b);
+DEFINE_KNOWN_FOLDER(FOLDERID_Libraries,             0x1b3ea5dc, 0xb587, 0x4786, 0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae);
+DEFINE_KNOWN_FOLDER(FOLDERID_Links,                 0xbfb9d5e0, 0xc6a9, 0x404c, 0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68);
+DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppData,          0xf1b32785, 0x6fba, 0x4fcf, 0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91);
+DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppDataLow,       0xa520a1a4, 0x1780, 0x4ff6, 0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16);
+DEFINE_KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir, 0x2a00375e, 0x224c, 0x49de, 0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc);
+DEFINE_KNOWN_FOLDER(FOLDERID_Music,                 0x4bd8d571, 0x6d19, 0x48d3, 0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43);
+DEFINE_KNOWN_FOLDER(FOLDERID_MusicLibrary,          0x2112ab0a, 0xc86a, 0x4ffe, 0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e);
+DEFINE_KNOWN_FOLDER(FOLDERID_NetHood,               0xc5abbf53, 0xe17f, 0x4121, 0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73);
+DEFINE_KNOWN_FOLDER(FOLDERID_NetworkFolder,         0xd20beec4, 0x5ca8, 0x4905, 0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53);
+DEFINE_KNOWN_FOLDER(FOLDERID_OriginalImages,        0x2c36c0aa, 0x5812, 0x4b87, 0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39);
+DEFINE_KNOWN_FOLDER(FOLDERID_PhotoAlbums,           0x69d2cf90, 0xfc33, 0x4fb7, 0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c);
+DEFINE_KNOWN_FOLDER(FOLDERID_Pictures,              0x33e28130, 0x4e1e, 0x4676, 0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb);
+DEFINE_KNOWN_FOLDER(FOLDERID_PicturesLibrary,       0xa990ae9f, 0xa03b, 0x4e80, 0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04);
+DEFINE_KNOWN_FOLDER(FOLDERID_Playlists,             0xde92c1c7, 0x837f, 0x4f69, 0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23);
+DEFINE_KNOWN_FOLDER(FOLDERID_PrintersFolder,        0x76fc4e2d, 0xd6ad, 0x4519, 0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85);
+DEFINE_KNOWN_FOLDER(FOLDERID_PrintHood,             0x9274bd8d, 0xcfd1, 0x41c3, 0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4);
+DEFINE_KNOWN_FOLDER(FOLDERID_Profile,               0x5e6c858f, 0x0e22, 0x4760, 0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramData,           0x62ab5d82, 0xfdc1, 0x4dc3, 0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFiles,          0x905e63b6, 0xc1bf, 0x494e, 0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommon,    0xf7f1ed05, 0x9f6d, 0x47a2, 0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64, 0x6365d5a7, 0x0f0d, 0x45e5, 0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86, 0xde974d24, 0xd9c6, 0x4d3e, 0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX64,       0x6d809377, 0x6af0, 0x444b, 0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX86,       0x7c5a40ef, 0xa0fb, 0x4bfc, 0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e);
+DEFINE_KNOWN_FOLDER(FOLDERID_Programs,              0xa77f5d77, 0x2e2b, 0x44c3, 0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51);
+DEFINE_KNOWN_FOLDER(FOLDERID_Public,                0xdfdf76a2, 0xc82a, 0x4d63, 0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicDesktop,         0xc4aa340d, 0xf20f, 0x4863, 0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicDocuments,       0xed4824af, 0xdce4, 0x45a8, 0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicDownloads,       0x3d644c9b, 0x1fb8, 0x4f30, 0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicGameTasks,       0xdebf2536, 0xe1a8, 0x4c59, 0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicLibraries,       0x48daf80b, 0xe6cf, 0x4f4e, 0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicMusic,           0x3214fab5, 0x9757, 0x4298, 0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicPictures,        0xb6ebfb86, 0x6907, 0x413c, 0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicRingtones,       0xe555ab60, 0x153b, 0x4d17, 0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicVideos,          0x2400183a, 0x6185, 0x49fb, 0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3);
+DEFINE_KNOWN_FOLDER(FOLDERID_QuickLaunch,           0x52a4f021, 0x7b75, 0x48a9, 0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f);
+DEFINE_KNOWN_FOLDER(FOLDERID_Recent,                0xae50c081, 0xebd2, 0x438a, 0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a);
+DEFINE_KNOWN_FOLDER(FOLDERID_RecordedTV,            0xbd85e001, 0x112e, 0x431e, 0x98, 0x3b, 0x7b, 0x15, 0xac, 0x09, 0xff, 0xf1);
+DEFINE_KNOWN_FOLDER(FOLDERID_RecordedTVLibrary,     0x1a6fdba2, 0xf42d, 0x4358, 0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5);
+DEFINE_KNOWN_FOLDER(FOLDERID_RecycleBinFolder,      0xb7534046, 0x3ecb, 0x4c18, 0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac);
+DEFINE_KNOWN_FOLDER(FOLDERID_ResourceDir,           0x8ad10c31, 0x2adb, 0x4296, 0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72);
+DEFINE_KNOWN_FOLDER(FOLDERID_Ringtones,             0xc870044b, 0xf49e, 0x4126, 0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8);
+DEFINE_KNOWN_FOLDER(FOLDERID_RoamingAppData,        0x3eb685db, 0x65f9, 0x4cf6, 0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d);
+DEFINE_KNOWN_FOLDER(FOLDERID_SampleMusic,           0xb250c668, 0xf57d, 0x4ee1, 0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f);
+DEFINE_KNOWN_FOLDER(FOLDERID_SamplePictures,        0xc4900540, 0x2379, 0x4c75, 0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b);
+DEFINE_KNOWN_FOLDER(FOLDERID_SamplePlaylists,       0x15ca69b3, 0x30ee, 0x49c1, 0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5);
+DEFINE_KNOWN_FOLDER(FOLDERID_SampleVideos,          0x859ead94, 0x2e85, 0x48ad, 0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd);
+DEFINE_KNOWN_FOLDER(FOLDERID_SavedGames,            0x4c5c32ff, 0xbb9d, 0x43b0, 0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4);
+DEFINE_KNOWN_FOLDER(FOLDERID_SavedSearches,         0x7d1d3a04, 0xdebb, 0x4115, 0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda);
+DEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_CSC,            0xee32e446, 0x31ca, 0x4aba, 0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e);
+DEFINE_KNOWN_FOLDER(FOLDERID_SearchHome,            0x190337d1, 0xb8ca, 0x4121, 0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a);
+DEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_MAPI,           0x98ec0e18, 0x2098, 0x4d44, 0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81);
+DEFINE_KNOWN_FOLDER(FOLDERID_SendTo,                0x8983036c, 0x27c0, 0x404b, 0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74);
+DEFINE_KNOWN_FOLDER(FOLDERID_SidebarDefaultParts,   0x7b396e54, 0x9ec5, 0x4300, 0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26);
+DEFINE_KNOWN_FOLDER(FOLDERID_SidebarParts,          0xa75d362e, 0x50fc, 0x4fb7, 0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93);
+DEFINE_KNOWN_FOLDER(FOLDERID_StartMenu,             0x625b53c3, 0xab48, 0x4ec1, 0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19);
+DEFINE_KNOWN_FOLDER(FOLDERID_Startup,               0xb97d20bb, 0xf46a, 0x4c97, 0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54);
+DEFINE_KNOWN_FOLDER(FOLDERID_SyncManagerFolder,     0x43668bf8, 0xc14e, 0x49b2, 0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7);
+DEFINE_KNOWN_FOLDER(FOLDERID_SyncResultsFolder,     0x289a9a43, 0xbe44, 0x4057, 0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9);
+DEFINE_KNOWN_FOLDER(FOLDERID_SyncSetupFolder,       0x0f214138, 0xb1d3, 0x4a90, 0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a);
+DEFINE_KNOWN_FOLDER(FOLDERID_System,                0x1ac14e77, 0x02e7, 0x4e5d, 0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7);
+DEFINE_KNOWN_FOLDER(FOLDERID_SystemX86,             0xd65231b0, 0xb2f1, 0x4857, 0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27);
+DEFINE_KNOWN_FOLDER(FOLDERID_Templates,             0xa63293e8, 0x664e, 0x48db, 0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserPinned,            0x9e3995ab, 0x1f9c, 0x4f13, 0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserProfiles,          0x0762d272, 0xc50a, 0x4bb0, 0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFiles,      0x5cd7aee2, 0x2219, 0x4a67, 0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon, 0xbcbd3057, 0xca5c, 0x4622, 0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16);
+DEFINE_KNOWN_FOLDER(FOLDERID_UsersFiles,            0xf3ce0f7c, 0x4901, 0x4acc, 0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f);
+DEFINE_KNOWN_FOLDER(FOLDERID_UsersLibraries,        0xa302545d, 0xdeff, 0x464b, 0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b);
+DEFINE_KNOWN_FOLDER(FOLDERID_Videos,                0x18989b1d, 0x99b5, 0x455b, 0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc);
+DEFINE_KNOWN_FOLDER(FOLDERID_VideosLibrary,         0x491e922f, 0x5643, 0x4af4, 0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74);
+DEFINE_KNOWN_FOLDER(FOLDERID_Windows,               0xf38bf404, 0x1d43, 0x42f2, 0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23);
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h
new file mode 100644
index 0000000..6ff726a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _KS_
+#define _KS_
+
+typedef union tagKSIDENTIFIER
+{
+    struct
+    {
+        GUID Set;
+        ULONG Id;
+        ULONG Flags;
+    } DUMMYSTRUCTNAME;
+    LONGLONG Alignment;
+} KSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT;
+
+typedef enum
+{
+    KSPIN_DATAFLOW_IN = 1,
+    KSPIN_DATAFLOW_OUT
+} KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;
+
+#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
+#define KSDATAFORMAT_BIT_ATTRIBUTES 1
+#define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << 0)
+#define KSDATAFORMAT_ATTRIBUTES 1 (1 << 1)
+
+#define KSDATARANGE_BIT_ATTRIBUTES 1
+#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
+#define KSDATARANGE_ATTRIBUTES (1 << 1)
+#define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << 2)
+
+typedef union unionKSDATAFORMAT
+{
+    struct
+    {
+        ULONG FormatSize;
+        ULONG Flags;
+        ULONG SampleSize;
+        ULONG Reserved;
+        GUID MajorFormat;
+        GUID SubFormat;
+        GUID Specifier;
+    } DUMMYSTRUCTNAME;
+    LONGLONG Alignment;
+} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
+
+#endif  /* _KS_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h
new file mode 100644
index 0000000..13c03e3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define INITGUID
+#include <guiddef.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h
new file mode 100644
index 0000000..5a7f920
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _KS_
+#error must include ks.h before ksmedia.h
+#endif
+
+#ifndef _KSMEDIA_
+#define _KSMEDIA_
+
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_MULAW, 0x00000007, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_ALAW, 0x00000006, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+
+#define KSAUDIO_SPEAKER_DIRECTOUT 0
+#define KSAUDIO_SPEAKER_MONO SPEAKER_FRONT_CENTER
+#define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
+#define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
+#define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
+#define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
+/* 5:1 SIDE or BACK is not distinguished, only 0x3F shall be used (BACK) */
+#define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)
+#define KSAUDIO_SPEAKER_7POINT1 (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
+/* 7:1 home theater 0x63F */
+#define KSAUDIO_SPEAKER_7POINT1_SURROUND (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)
+
+#ifndef REFERENCE_TIME_DEFINED
+#define REFERENCE_TIME_DEFINED
+typedef LONGLONG REFERENCE_TIME;
+#endif
+
+typedef enum
+{
+    eConnTypeUnknown = 0,
+    eConnType3Point5mm,
+    eConnTypeQuarter,
+    eConnTypeAtapiInternal,
+    eConnTypeRCA,
+    eConnTypeOptical,
+    eConnTypeOtherDigital,
+    eConnTypeOtherAnalog,
+    eConnTypeMultichannelAnalogDIN,
+    eConnTypeXlrProfessional,
+    eConnTypeRj11Modem,
+    eConnTypeCombination
+} EPcxConnectionType;
+
+typedef enum
+{
+    eGeoLocRear = 1,
+    eGeoLocFront,
+    eGeoLocLeft,
+    eGeoLocRight,
+    eGeoLocTop,
+    eGeoLocBottom,
+    eGeoLocRearPanel,
+    eGeoLocRiser,
+    eGeoLocInsideMobileLid,
+    eGeoLocDrivebay,
+    eGeoLocHDMI,
+    eGeoLocOutsideMobileLid,
+    eGeoLocATAPI,
+    eGeoLocReserved5,
+    eGeoLocReserved6
+} EPcxGeoLocation;
+
+typedef enum
+{
+    eGenLocPrimaryBox = 0,
+    eGenLocInternal,
+    eGenLocSeparate,
+    eGenLocOther
+} EPcxGenLocation;
+
+typedef enum
+{
+    ePortConnJack = 0,
+    ePortConnIntegratedDevice,
+    ePortConnBothIntegratedAndJack,
+    ePortConnUnknown
+} EPxcPortConnection;
+
+typedef struct
+{
+    DWORD ChannelMapping;
+    COLORREF Color;
+    EPcxConnectionType ConnectionType;
+    EPcxGeoLocation GeoLocation;
+    EPcxGenLocation GenLocation;
+    EPxcPortConnection PortConnection;
+    BOOL IsConnected;
+} KSJACK_DESCRIPTION;
+
+typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;
+
+typedef enum
+{
+    KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,
+    KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT
+} KSJACK_SINK_CONNECTIONTYPE;
+
+#define MAX_SINK_DESCRIPTION_NAME_LENGTH 32
+
+typedef struct _tagKSJACK_SINK_INFORMATION
+{
+    KSJACK_SINK_CONNECTIONTYPE ConnType;
+    WORD ManufacturerId;
+    WORD ProductId;
+    WORD AudioLatency;
+    BOOL HDCPCapable;
+    BOOL AICapable;
+    UCHAR SinkDescriptionLength;
+    WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH];
+    LUID PortId;
+} KSJACK_SINK_INFORMATION;
+
+#define JACKDESC2_PRESENCE_DETECT_CAPABILITY 0x1
+#define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x2
+
+typedef struct _tagKSJACK_DESCRIPTION2
+{
+    DWORD DeviceStateInfo;
+    DWORD JackCapabilities;
+} KSJACK_DESCRIPTION2;
+
+typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
+
+#endif  /* _KSMEDIA_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h
new file mode 100644
index 0000000..63baea5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * General lm header which includes other lm headers.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LM_H
+#define __WINE_LM_H
+
+#include <lmcons.h>
+#include <lmerr.h>
+#include <lmshare.h>
+#include <lmaccess.h>
+#include <lmserver.h>
+#include <lmwksta.h>
+#include <lmapibuf.h>
+#include <lmstats.h>
+#include <lmjoin.h>
+#include <lmmsg.h>
+#include <lmuse.h>
+/* FIXME: #include <lmalert.h> */
+/* FIXME: #include <lmremutl.h> */
+/* FIXME: #include <lmrepl.h> */
+/* FIXME: #include <lmsvc.h> */
+/* FIXME: #include <lmerrlog.h> */
+/* FIXME: #include <lmconfig.h> */
+/* FIXME: #include <lmaudit.h> */
+
+/* The following are obsolete headers */
+#include <lmbrowsr.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h
new file mode 100644
index 0000000..d6cdf80
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h
@@ -0,0 +1,487 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * User information Net API.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMACCESS_H
+#define __WINE_LMACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <lmcons.h>
+
+#define UF_SCRIPT                               0x000001
+#define UF_ACCOUNTDISABLE                       0x000002
+#define UF_HOMEDIR_REQUIRED                     0x000008
+#define UF_LOCKOUT                              0x000010
+#define UF_PASSWD_NOTREQD                       0x000020
+#define UF_PASSWD_CANT_CHANGE                   0x000040
+#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED      0x000080
+#define UF_TEMP_DUPLICATE_ACCOUNT               0x000100
+#define UF_NORMAL_ACCOUNT                       0x000200
+#define UF_INTERDOMAIN_TRUST_ACCOUNT            0x000800
+#define UF_WORKSTATION_TRUST_ACCOUNT            0x001000
+#define UF_SERVER_TRUST_ACCOUNT                 0x002000
+#define UF_DONT_EXPIRE_PASSWD                   0x010000
+#define UF_MNS_LOGON_ACCOUNT                    0x020000
+#define UF_SMARTCARD_REQUIRED                   0x040000
+#define UF_TRUSTED_FOR_DELEGATION               0x080000
+#define UF_NOT_DELEGATED                        0x100000
+#define UF_USE_DES_KEY_ONLY                     0x200000
+#define UF_DONT_REQUIRE_PREAUTH                 0x400000
+#define UF_PASSWORD_EXPIRED                     0x800000
+
+
+#define UF_MACHINE_ACCOUNT_MASK ( \
+    UF_INTERDOMAIN_TRUST_ACCOUNT | \
+    UF_WORKSTATION_TRUST_ACCOUNT | \
+    UF_SERVER_TRUST_ACCOUNT)
+
+#define UF_ACCOUNT_TYPE_MASK ( \
+    UF_TEMP_DUPLICATE_ACCOUNT | \
+    UF_NORMAL_ACCOUNT | \
+    UF_INTERDOMAIN_TRUST_ACCOUNT | \
+    UF_WORKSTATION_TRUST_ACCOUNT | \
+    UF_SERVER_TRUST_ACCOUNT)
+
+#define UF_SETTABLE_BITS ( \
+    UF_SCRIPT | \
+    UF_ACCOUNTDISABLE | \
+    UF_LOCKOUT | \
+    UF_HOMEDIR_REQUIRED  | \
+    UF_PASSWD_NOTREQD | \
+    UF_PASSWD_CANT_CHANGE | \
+    UF_ACCOUNT_TYPE_MASK | \
+    UF_DONT_EXPIRE_PASSWD | \
+    UF_MNS_LOGON_ACCOUNT |\
+    UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |\
+    UF_SMARTCARD_REQUIRED | \
+    UF_TRUSTED_FOR_DELEGATION | \
+    UF_NOT_DELEGATED | \
+    UF_USE_DES_KEY_ONLY  | \
+    UF_DONT_REQUIRE_PREAUTH |\
+    UF_PASSWORD_EXPIRED)
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_USERS (const WCHAR []){ 'U','S','E','R','S',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_USERS         L"USERS"
+#else
+static const WCHAR GROUP_SPECIALGRP_USERS[] = { 'U','S','E','R','S',0 };
+#endif
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_ADMINS (const WCHAR []){ 'A','D','M','I','N','S',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_ADMINS        L"ADMINS"
+#else
+static const WCHAR GROUP_SPECIALGRP_ADMINS[] = { 'A','D','M','I','N','S',0 };
+#endif
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_GUESTS  (const WCHAR []){ 'G','U','E','S','T','S',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_GUESTS        L"GUESTS"
+#else
+static const WCHAR GROUP_SPECIALGRP_GUESTS[] = { 'G','U','E','S','T','S',0 };
+#endif
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_LOCAL (const WCHAR []){ 'L','O','C','A','L',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_LOCAL         L"LOCAL"
+#else
+static const WCHAR GROUP_SPECIALGRP_LOCAL[] = { 'L','O','C','A','L',0 };
+#endif
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+#ifndef WINE_PNTSTATUS_DECLARED
+#define WINE_PNTSTATUS_DECLARED
+typedef NTSTATUS *PNTSTATUS;
+#endif
+
+/* NetGetUserInfo structures */
+typedef struct _USER_INFO_0 {
+    LPWSTR usri0_name;
+} USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;
+
+typedef struct _USER_INFO_1 {
+    LPWSTR usri1_name;
+    LPWSTR usri1_password;
+    DWORD usri1_password_age;
+    DWORD usri1_priv;
+    LPWSTR usri1_home_dir;
+    LPWSTR usri1_comment;
+    DWORD usri1_flags;
+    LPWSTR usri1_script_path;
+} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
+
+typedef struct _USER_INFO_2 {
+    LPWSTR usri2_name;
+    LPWSTR usri2_password;
+    DWORD usri2_password_age;
+    DWORD usri2_priv;
+    LPWSTR usri2_home_dir;
+    LPWSTR usri2_comment;
+    DWORD usri2_flags;
+    LPWSTR usri2_script_path;
+    DWORD usri2_auth_flags;
+    LPWSTR usri2_full_name;
+    LPWSTR usri2_usr_comment;
+    LPWSTR usri2_parms;
+    LPWSTR usri2_workstations;
+    DWORD usri2_last_logon;
+    DWORD usri2_last_logoff;
+    DWORD usri2_acct_expires;
+    DWORD usri2_max_storage;
+    DWORD usri2_units_per_week;
+    PBYTE usri2_logon_hours;
+    DWORD usri2_bad_pw_count;
+    DWORD usri2_num_logons;
+    LPWSTR usri2_logon_server;
+    DWORD usri2_country_code;
+    DWORD usri2_code_page;
+} USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;
+
+typedef struct _USER_INFO_3 {
+    LPWSTR usri3_name;
+    LPWSTR usri3_password;
+    DWORD usri3_password_age;
+    DWORD usri3_priv;
+    LPWSTR usri3_home_dir;
+    LPWSTR usri3_comment;
+    DWORD usri3_flags;
+    LPWSTR usri3_script_path;
+    DWORD usri3_auth_flags;
+    LPWSTR usri3_full_name;
+    LPWSTR usri3_usr_comment;
+    LPWSTR usri3_parms;
+    LPWSTR usri3_workstations;
+    DWORD usri3_last_logon;
+    DWORD usri3_last_logoff;
+    DWORD usri3_acct_expires;
+    DWORD usri3_max_storage;
+    DWORD usri3_units_per_week;
+    PBYTE usri3_logon_hours;
+    DWORD usri3_bad_pw_count;
+    DWORD usri3_num_logons;
+    LPWSTR usri3_logon_server;
+    DWORD usri3_country_code;
+    DWORD usri3_code_page;
+    DWORD usri3_user_id;
+    DWORD usri3_primary_group_id;
+    LPWSTR usri3_profile;
+    LPWSTR usri3_home_dir_drive;
+    DWORD usri3_password_expired;
+} USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;
+
+typedef struct _USER_INFO_4 {
+    LPWSTR usri4_name;
+    LPWSTR usri4_password;
+    DWORD usri4_password_age;
+    DWORD usri4_priv;
+    LPWSTR usri4_home_dir;
+    LPWSTR usri4_comment;
+    DWORD usri4_flags;
+    LPWSTR usri4_script_path;
+    DWORD usri4_auth_flags;
+    LPWSTR usri4_full_name;
+    LPWSTR usri4_usr_comment;
+    LPWSTR usri4_parms;
+    LPWSTR usri4_workstations;
+    DWORD usri4_last_logon;
+    DWORD usri4_last_logoff;
+    DWORD usri4_acct_expires;
+    DWORD usri4_max_storage;
+    DWORD usri4_units_per_week;
+    PBYTE usri4_logon_hours;
+    DWORD usri4_bad_pw_count;
+    DWORD usri4_num_logons;
+    LPWSTR usri4_logon_server;
+    DWORD usri4_country_code;
+    DWORD usri4_code_page;
+    PSID usri4_user_sid;
+    DWORD usri4_primary_group_id;
+    LPWSTR usri4_profile;
+    LPWSTR usri4_home_dir_drive;
+    DWORD usri4_password_expired;
+} USER_INFO_4, *PUSER_INFO_4, *LPUSER_INFO_4;
+
+typedef struct _USER_INFO_10 {
+    LPWSTR usri10_name;
+    LPWSTR usri10_comment;
+    LPWSTR usri10_usr_comment;
+    LPWSTR usri10_full_name;
+} USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10;
+
+typedef struct _USER_INFO_11 {
+    LPWSTR usri11_name;
+    LPWSTR usri11_comment;
+    LPWSTR usri11_usr_comment;
+    LPWSTR usri11_full_name;
+    DWORD usri11_priv;
+    DWORD usri11_auth_flags;
+    DWORD usri11_password_age;
+    LPWSTR usri11_home_dir;
+    LPWSTR usri11_parms;
+    DWORD usri11_last_logon;
+    DWORD usri11_last_logoff;
+    DWORD usri11_bad_pw_count;
+    DWORD usri11_num_logons;
+    LPWSTR usri11_logon_server;
+    DWORD usri11_country_code;
+    LPWSTR usri11_workstations;
+    DWORD usri11_max_storage;
+    DWORD usri11_units_per_week;
+    PBYTE usri11_logon_hours;
+    DWORD usri11_code_page;
+} USER_INFO_11, *PUSER_INFO_11, *LPUSER_INFO_11;
+
+typedef struct _USER_INFO_20 {
+    LPWSTR usri20_name;
+    LPWSTR usri20_full_name;
+    LPWSTR usri20_comment;
+    DWORD usri20_flags;
+    DWORD usri20_user_id;
+} USER_INFO_20, *PUSER_INFO_20, *LPUSER_INFO_20;
+
+typedef struct _USER_INFO_23 {
+    LPWSTR usri23_name;
+    LPWSTR usri23_full_name;
+    LPWSTR usri23_comment;
+    DWORD usri23_flags;
+    PSID usri23_user_sid;
+} USER_INFO_23, *PUSER_INFO_23, *LPUSER_INFO_23;
+
+typedef struct _USER_INFO_1003 {
+    LPWSTR  usri1003_password;
+} USER_INFO_1003, *PUSER_INFO_1003, *LPUSER_INFO_1003;
+
+typedef struct _USER_INFO_1005 {
+    DWORD   usri1005_priv;
+} USER_INFO_1005, *PUSER_INFO_1005, *LPUSER_INFO_1005;
+
+typedef struct _USER_INFO_1006 {
+    LPWSTR  usri1006_home_dir;
+} USER_INFO_1006, *PUSER_INFO_1006, *LPUSER_INFO_1006;
+
+typedef struct _USER_INFO_1007 {
+    LPWSTR  usri1007_comment;
+} USER_INFO_1007, *PUSER_INFO_1007, *LPUSER_INFO_1007;
+
+typedef struct _USER_INFO_1008 {
+    DWORD   usri1008_flags;
+} USER_INFO_1008, *PUSER_INFO_1008, *LPUSER_INFO_1008;
+
+typedef struct _USER_INFO_1009 {
+    LPWSTR  usri1009_script_path;
+} USER_INFO_1009, *PUSER_INFO_1009, *LPUSER_INFO_1009;
+
+typedef struct _USER_INFO_1010 {
+    DWORD   usri1010_auth_flags;
+} USER_INFO_1010, *PUSER_INFO_1010, *LPUSER_INFO_1010;
+
+typedef struct _USER_INFO_1011 {
+    LPWSTR  usri1011_full_name;
+} USER_INFO_1011, *PUSER_INFO_1011, *LPUSER_INFO_1011;
+
+typedef struct _USER_INFO_1012 {
+    LPWSTR  usri1012_usr_comment;
+} USER_INFO_1012, *PUSER_INFO_1012, *LPUSER_INFO_1012;
+
+typedef struct _USER_INFO_1013 {
+    LPWSTR  usri1013_parms;
+} USER_INFO_1013, *PUSER_INFO_1013, *LPUSER_INFO_1013;
+
+typedef struct _USER_INFO_1014 {
+    LPWSTR  usri1014_workstations;
+} USER_INFO_1014, *PUSER_INFO_1014, *LPUSER_INFO_1014;
+
+typedef struct _USER_INFO_1017 {
+    DWORD   usri1017_acct_expires;
+} USER_INFO_1017, *PUSER_INFO_1017, *LPUSER_INFO_1017;
+
+typedef struct _USER_INFO_1018 {
+    DWORD   usri1018_max_storage;
+} USER_INFO_1018, *PUSER_INFO_1018, *LPUSER_INFO_1018;
+
+typedef struct _USER_INFO_1020 {
+    DWORD   usri1020_units_per_week;
+    LPBYTE  usri1020_logon_hours;
+} USER_INFO_1020, *PUSER_INFO_1020, *LPUSER_INFO_1020;
+
+typedef struct _USER_INFO_1023 {
+    LPWSTR  usri1023_logon_server;
+} USER_INFO_1023, *PUSER_INFO_1023, *LPUSER_INFO_1023;
+
+typedef struct _USER_INFO_1024 {
+    DWORD   usri1024_country_code;
+} USER_INFO_1024, *PUSER_INFO_1024, *LPUSER_INFO_1024;
+
+typedef struct _USER_INFO_1025 {
+    DWORD   usri1025_code_page;
+} USER_INFO_1025, *PUSER_INFO_1025, *LPUSER_INFO_1025;
+
+typedef struct _USER_INFO_1051 {
+    DWORD   usri1051_primary_group_id;
+} USER_INFO_1051, *PUSER_INFO_1051, *LPUSER_INFO_1051;
+
+typedef struct _USER_INFO_1052 {
+    LPWSTR  usri1052_profile;
+} USER_INFO_1052, *PUSER_INFO_1052, *LPUSER_INFO_1052;
+
+typedef struct _USER_INFO_1053 {
+    LPWSTR  usri1053_home_dir_drive;
+} USER_INFO_1053, *PUSER_INFO_1053, *LPUSER_INFO_1053;
+
+typedef struct _USER_MODALS_INFO_0 {
+    DWORD usrmod0_min_passwd_len;
+    DWORD usrmod0_max_passwd_age;
+    DWORD usrmod0_min_passwd_age;
+    DWORD usrmod0_force_logoff;
+    DWORD usrmod0_password_hist_len;
+} USER_MODALS_INFO_0, *PUSER_MODALS_INFO_0, *LPUSER_MODALS_INFO_0;
+
+typedef struct _USER_MODALS_INFO_1 {
+    DWORD usrmod1_role;
+    LPWSTR usrmod1_primary;
+} USER_MODALS_INFO_1, *PUSER_MODALS_INFO_1, *LPUSER_MODALS_INFO_1;
+
+typedef struct _USER_MODALS_INFO_2 {
+    LPWSTR usrmod2_domain_name;
+    PSID usrmod2_domain_id;
+} USER_MODALS_INFO_2, *PUSER_MODALS_INFO_2, *LPUSER_MODALS_INFO_2;
+
+typedef struct _USER_MODALS_INFO_3 {
+    DWORD usrmod3_lockout_duration;
+    DWORD usrmod3_lockout_observation_window;
+    DWORD usrmod3_lockout_threshold;
+} USER_MODALS_INFO_3, *PUSER_MODALS_INFO_3, *LPUSER_MODALS_INFO_3;
+
+typedef struct _NET_DISPLAY_USER {
+    LPWSTR usri1_name;
+    LPWSTR usri1_comment;
+    DWORD usri1_flags;
+    LPWSTR usri1_full_name;
+    DWORD usri1_user_id;
+    DWORD usri1_next_index;
+} NET_DISPLAY_USER, *PNET_DISPLAY_USER;
+
+typedef struct _NET_DISPLAY_MACHINE {
+    LPWSTR usri2_name;
+    LPWSTR usri2_comment;
+    DWORD usri2_flags;
+    DWORD usri2_user_id;
+    DWORD usri2_next_index;
+} NET_DISPLAY_MACHINE, *PNET_DISPLAY_MACHINE;
+
+typedef struct _NET_DISPLAY_GROUP {
+    LPWSTR grpi3_name;
+    LPWSTR grpi3_comment;
+    DWORD grpi3_group_id;
+    DWORD grpi3_attributes;
+    DWORD grpi3_next_index;
+} NET_DISPLAY_GROUP, *PNET_DISPLAY_GROUP;
+
+typedef struct _LOCALGROUP_INFO_0 {
+    LPWSTR lgrpi0_name;
+} LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;
+
+typedef struct _LOCALGROUP_INFO_1 {
+    LPWSTR lgrpi1_name;
+    LPWSTR lgrpi1_comment;
+} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;
+
+typedef struct _LOCALGROUP_INFO_1002 {
+    LPWSTR lgrpi1002_comment;
+} LOCALGROUP_INFO_1002, *PLOCALGROUP_INFO_1002, *LPLOCALGROUP_INFO_1002;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
+    PSID lgrmi0_sid;
+} LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_1 {
+    PSID lgrmi1_sid;
+    SID_NAME_USE lgrmi1_sidusage;
+    LPWSTR lgrmi1_name;
+} LOCALGROUP_MEMBERS_INFO_1, *PLOCALGROUP_MEMBERS_INFO_1, *LPLOCALGROUP_MEMBERS_INFO_1;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_2 {
+    PSID lgrmi2_sid;
+    SID_NAME_USE lgrmi2_sidusage;
+    LPWSTR lgrmi2_domainandname;
+} LOCALGROUP_MEMBERS_INFO_2, *PLOCALGROUP_MEMBERS_INFO_2, *LPLOCALGROUP_MEMBERS_INFO_2;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
+    LPWSTR lgrmi3_domainandname;
+} LOCALGROUP_MEMBERS_INFO_3, *PLOCALGROUP_MEMBERS_INFO_3, *LPLOCALGROUP_MEMBERS_INFO_3;
+
+typedef struct _LOCALGROUP_USERS_INFO_0 {
+    LPWSTR lgrui0_name;
+} LOCALGROUP_USERS_INFO_0, *PLOCALGROUP_USERS_INFO_0, *LPLOCALGROUP_USERS_INFO_0;
+
+#define USER_PRIV_GUEST   0
+#define USER_PRIV_USER    1
+#define USER_PRIV_ADMIN   2
+#define USER_PRIV_MASK    3
+
+#define LOCALGROUP_NAME_PARMNUM         1
+#define LOCALGROUP_COMMENT_PARMNUM      2
+
+NET_API_STATUS WINAPI NetGetDCName(LPCWSTR,LPCWSTR,LPBYTE*);
+NET_API_STATUS WINAPI NetGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetLocalGroupAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetLocalGroupAddMember(LPCWSTR,LPCWSTR,PSID);
+NET_API_STATUS WINAPI NetLocalGroupAddMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetLocalGroupDelMember(LPCWSTR,LPCWSTR,PSID);
+NET_API_STATUS WINAPI NetLocalGroupDelMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR);
+NET_API_STATUS WINAPI NetLocalGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetLocalGroupGetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR);
+NET_API_STATUS WINAPI NetLocalGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetLocalGroupSetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
+NET_API_STATUS WINAPI NetQueryDisplayInformation(LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPDWORD,PVOID*);
+NET_API_STATUS WINAPI NetUserAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetUserDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetUserEnum(LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetUserGetGroups(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUserGetLocalGroups(LPCWSTR,LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUserModalsGet(LPCWSTR,DWORD,LPBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h
new file mode 100644
index 0000000..d265f9b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Net API buffer calls
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMAPIBUF_H
+#define __WINE_LMAPIBUF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Buffer functions */
+NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer);
+NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer);
+NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount,
+                                             LPVOID* NewBuffer);
+NET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount);
+NET_API_STATUS WINAPI NetapipBufferAllocate(DWORD ByteCount, LPVOID* Buffer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h
new file mode 100644
index 0000000..3c88711
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h
@@ -0,0 +1,44 @@
+/*
+ * Schedule Service Functions
+ *
+ * Copyright (C) 2011 Louis Lenders
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMAT_H
+#define __WINE_LMAT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+NET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetScheduleJobEnum(LPCWSTR,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_LMAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h
new file mode 100644
index 0000000..55f1d06
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Browser NET API calls
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMBROWSR_H
+#define __WINE_LMBROWSR_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _BROWSER_EMULATED_DOMAIN {
+    LPWSTR DomainName;
+    LPWSTR EmulatedServerName;
+    DWORD Role;
+} BROWSER_EMULATED_DOMAIN, *PBROWSER_EMULATED_DOMAIN;
+
+NET_API_STATUS WINAPI I_BrowserSetNetlogonState(
+    LPWSTR ServerName, LPWSTR DomainName, LPWSTR EmulatedServerName,
+    DWORD Role);
+
+NET_API_STATUS WINAPI I_BrowserQueryEmulatedDomains(
+    LPWSTR ServerName, PBROWSER_EMULATED_DOMAIN *EmulatedDomains,
+    LPDWORD EntriesRead);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h
new file mode 100644
index 0000000..dea8082
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 1999 Rein Klazes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMCONS_H
+#define __WINE_LMCONS_H
+
+/* Types */
+
+#define NET_API_STATUS          DWORD
+#define API_RET_TYPE            NET_API_STATUS
+#define NET_API_FUNCTION        WINAPI
+
+#define MAX_PREFERRED_LENGTH            ((DWORD) -1)
+
+/* Lan manager API defines */
+
+#define UNLEN       256
+#define LM20_UNLEN  20
+#define GNLEN       UNLEN
+#define LM20_GNLEN  LM20_UNLEN
+#define PWLEN       256
+#define LM20_PWLEN  14
+#define SHPWLEN     8
+#define CNLEN       15
+#define LM20_CNLEN  CNLEN
+#define DNLEN       CNLEN
+#define LM20_DNLEN  DNLEN
+#define UNCLEN      (CNLEN+2)
+#define LM20_UNCLEN (LM20_CNLEN+2)
+#define NNLEN       80
+#define LM20_NNLEN  12
+#define RMLEN       (UNCLEN+1+NNLEN)
+#define LM20_RMLEN  (LM20_UNCLEN+1+LM20_NNLEN)
+#define SNLEN       80
+#define LM20_SNLEN  15
+#define STXTLEN     256
+#define LM20_STXTLEN 63
+#define PATHLEN     256
+#define LM20_PATHLEN 256
+#define DEVLEN      80
+#define LM20_DEVLEN 8
+#define EVLEN       16
+#define CLTYPE_LEN  12
+
+/* platform IDs */
+#define PLATFORM_ID_DOS 300
+#define PLATFORM_ID_OS2 400
+#define PLATFORM_ID_NT  500
+#define PLATFORM_ID_OSF 600
+#define PLATFORM_ID_VMS 700
+
+#define LMSTR LPWSTR
+#define LMCSTR LPCWSTR
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h
new file mode 100644
index 0000000..2868579
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * NERR error codes.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMERR_H
+#define __WINE_LMERR_H
+
+#include <winerror.h>
+
+#define NERR_Success    0
+
+#define NERR_BASE                         2100
+
+#define NERR_NetNotStarted                (NERR_BASE + 2)
+#define NERR_UnknownServer                (NERR_BASE + 3)
+#define NERR_ShareMem                     (NERR_BASE + 4)
+#define NERR_NoNetworkResource            (NERR_BASE + 5)
+#define NERR_RemoteOnly                   (NERR_BASE + 6)
+#define NERR_DevNotRedirected             (NERR_BASE + 7)
+#define NERR_ServerNotStarted             (NERR_BASE + 14)
+#define NERR_ItemNotFound                 (NERR_BASE + 15)
+#define NERR_UnknownDevDir                (NERR_BASE + 16)
+#define NERR_RedirectedPath               (NERR_BASE + 17)
+#define NERR_DuplicateShare               (NERR_BASE + 18)
+#define NERR_NoRoom                       (NERR_BASE + 19)
+#define NERR_TooManyItems                 (NERR_BASE + 21)
+#define NERR_InvalidMaxUsers              (NERR_BASE + 22)
+#define NERR_BufTooSmall                  (NERR_BASE + 23)
+#define NERR_RemoteErr                    (NERR_BASE + 27)
+#define NERR_LanmanIniError               (NERR_BASE + 31)
+#define NERR_NetworkError                 (NERR_BASE + 36)
+#define NERR_WkstaInconsistentState       (NERR_BASE + 37)
+#define NERR_WkstaNotStarted              (NERR_BASE + 38)
+#define NERR_BrowserNotStarted            (NERR_BASE + 39)
+#define NERR_InternalError                (NERR_BASE + 40)
+#define NERR_BadTransactConfig            (NERR_BASE + 41)
+#define NERR_InvalidAPI                   (NERR_BASE + 42)
+#define NERR_BadEventName                 (NERR_BASE + 43)
+#define NERR_DupNameReboot                (NERR_BASE + 44)
+#define NERR_CfgCompNotFound              (NERR_BASE + 46)
+#define NERR_CfgParamNotFound             (NERR_BASE + 47)
+#define NERR_LineTooLong                  (NERR_BASE + 49)
+#define NERR_QNotFound                    (NERR_BASE + 50)
+#define NERR_JobNotFound                  (NERR_BASE + 51)
+#define NERR_DestNotFound                 (NERR_BASE + 52)
+#define NERR_DestExists                   (NERR_BASE + 53)
+#define NERR_QExists                      (NERR_BASE + 54)
+#define NERR_QNoRoom                      (NERR_BASE + 55)
+#define NERR_JobNoRoom                    (NERR_BASE + 56)
+#define NERR_DestNoRoom                   (NERR_BASE + 57)
+#define NERR_DestIdle                     (NERR_BASE + 58)
+#define NERR_DestInvalidOp                (NERR_BASE + 59)
+#define NERR_ProcNoRespond                (NERR_BASE + 60)
+#define NERR_SpoolerNotLoaded             (NERR_BASE + 61)
+#define NERR_DestInvalidState             (NERR_BASE + 62)
+#define NERR_QInvalidState                (NERR_BASE + 63)
+#define NERR_JobInvalidState              (NERR_BASE + 64)
+#define NERR_SpoolNoMemory                (NERR_BASE + 65)
+#define NERR_DriverNotFound               (NERR_BASE + 66)
+#define NERR_DataTypeInvalid              (NERR_BASE + 67)
+#define NERR_ProcNotFound                 (NERR_BASE + 68)
+#define NERR_ServiceTableLocked           (NERR_BASE + 80)
+#define NERR_ServiceTableFull             (NERR_BASE + 81)
+#define NERR_ServiceInstalled             (NERR_BASE + 82)
+#define NERR_ServiceEntryLocked           (NERR_BASE + 83)
+#define NERR_ServiceNotInstalled          (NERR_BASE + 84)
+#define NERR_BadServiceName               (NERR_BASE + 85)
+#define NERR_ServiceCtlTimeout            (NERR_BASE + 86)
+#define NERR_ServiceCtlBusy               (NERR_BASE + 87)
+#define NERR_BadServiceProgName           (NERR_BASE + 88)
+#define NERR_ServiceNotCtrl               (NERR_BASE + 89)
+#define NERR_ServiceKillProc              (NERR_BASE + 90)
+#define NERR_ServiceCtlNotValid           (NERR_BASE + 91)
+#define NERR_NotInDispatchTbl             (NERR_BASE + 92)
+#define NERR_BadControlRecv               (NERR_BASE + 93)
+#define NERR_ServiceNotStarting           (NERR_BASE + 94)
+#define NERR_AlreadyLoggedOn              (NERR_BASE + 100)
+#define NERR_NotLoggedOn                  (NERR_BASE + 101)
+#define NERR_BadUsername                  (NERR_BASE + 102)
+#define NERR_BadPassword                  (NERR_BASE + 103)
+#define NERR_UnableToAddName_W            (NERR_BASE + 104)
+#define NERR_UnableToAddName_F            (NERR_BASE + 105)
+#define NERR_UnableToDelName_W            (NERR_BASE + 106)
+#define NERR_UnableToDelName_F            (NERR_BASE + 107)
+#define NERR_LogonsPaused                 (NERR_BASE + 109)
+#define NERR_LogonServerConflict          (NERR_BASE + 110)
+#define NERR_LogonNoUserPath              (NERR_BASE + 111)
+#define NERR_LogonScriptError             (NERR_BASE + 112)
+#define NERR_StandaloneLogon              (NERR_BASE + 114)
+#define NERR_LogonServerNotFound          (NERR_BASE + 115)
+#define NERR_LogonDomainExists            (NERR_BASE + 116)
+#define NERR_NonValidatedLogon            (NERR_BASE + 117)
+#define NERR_ACFNotFound                  (NERR_BASE + 119)
+#define NERR_GroupNotFound                (NERR_BASE + 120)
+#define NERR_UserNotFound                 (NERR_BASE + 121)
+#define NERR_ResourceNotFound             (NERR_BASE + 122)
+#define NERR_GroupExists                  (NERR_BASE + 123)
+#define NERR_UserExists                   (NERR_BASE + 124)
+#define NERR_ResourceExists               (NERR_BASE + 125)
+#define NERR_NotPrimary                   (NERR_BASE + 126)
+#define NERR_ACFNotLoaded                 (NERR_BASE + 127)
+#define NERR_ACFNoRoom                    (NERR_BASE + 128)
+#define NERR_ACFFileIOFail                (NERR_BASE + 129)
+#define NERR_ACFTooManyLists              (NERR_BASE + 130)
+#define NERR_UserLogon                    (NERR_BASE + 131)
+#define NERR_ACFNoParent                  (NERR_BASE + 132)
+#define NERR_CanNotGrowSegment            (NERR_BASE + 133)
+#define NERR_SpeGroupOp                   (NERR_BASE + 134)
+#define NERR_NotInCache                   (NERR_BASE + 135)
+#define NERR_UserInGroup                  (NERR_BASE + 136)
+#define NERR_UserNotInGroup               (NERR_BASE + 137)
+#define NERR_AccountUndefined             (NERR_BASE + 138)
+#define NERR_AccountExpired               (NERR_BASE + 139)
+#define NERR_InvalidWorkstation           (NERR_BASE + 140)
+#define NERR_InvalidLogonHours            (NERR_BASE + 141)
+#define NERR_PasswordExpired              (NERR_BASE + 142)
+#define NERR_PasswordCantChange           (NERR_BASE + 143)
+#define NERR_PasswordHistConflict         (NERR_BASE + 144)
+#define NERR_PasswordTooShort             (NERR_BASE + 145)
+#define NERR_PasswordTooRecent            (NERR_BASE + 146)
+#define NERR_InvalidDatabase              (NERR_BASE + 147)
+#define NERR_DatabaseUpToDate             (NERR_BASE + 148)
+#define NERR_SyncRequired                 (NERR_BASE + 149)
+#define NERR_UseNotFound                  (NERR_BASE + 150)
+#define NERR_BadAsgType                   (NERR_BASE + 151)
+#define NERR_DeviceIsShared               (NERR_BASE + 152)
+#define NERR_NoComputerName               (NERR_BASE + 170)
+#define NERR_MsgAlreadyStarted            (NERR_BASE + 171)
+#define NERR_MsgInitFailed                (NERR_BASE + 172)
+#define NERR_NameNotFound                 (NERR_BASE + 173)
+#define NERR_AlreadyForwarded             (NERR_BASE + 174)
+#define NERR_AddForwarded                 (NERR_BASE + 175)
+#define NERR_AlreadyExists                (NERR_BASE + 176)
+#define NERR_TooManyNames                 (NERR_BASE + 177)
+#define NERR_DelComputerName              (NERR_BASE + 178)
+#define NERR_LocalForward                 (NERR_BASE + 179)
+#define NERR_GrpMsgProcessor              (NERR_BASE + 180)
+#define NERR_PausedRemote                 (NERR_BASE + 181)
+#define NERR_BadReceive                   (NERR_BASE + 182)
+#define NERR_NameInUse                    (NERR_BASE + 183)
+#define NERR_MsgNotStarted                (NERR_BASE + 184)
+#define NERR_NotLocalName                 (NERR_BASE + 185)
+#define NERR_NoForwardName                (NERR_BASE + 186)
+#define NERR_RemoteFull                   (NERR_BASE + 187)
+#define NERR_NameNotForwarded             (NERR_BASE + 188)
+#define NERR_TruncatedBroadcast           (NERR_BASE + 189)
+#define NERR_InvalidDevice                (NERR_BASE + 194)
+#define NERR_WriteFault                   (NERR_BASE + 195)
+#define NERR_DuplicateName                (NERR_BASE + 197)
+#define NERR_DeleteLater                  (NERR_BASE + 198)
+#define NERR_IncompleteDel                (NERR_BASE + 199)
+#define NERR_MultipleNets                 (NERR_BASE + 200)
+#define NERR_NetNameNotFound              (NERR_BASE + 210)
+#define NERR_DeviceNotShared              (NERR_BASE + 211)
+#define NERR_ClientNameNotFound           (NERR_BASE + 212)
+#define NERR_FileIdNotFound               (NERR_BASE + 214)
+#define NERR_ExecFailure                  (NERR_BASE + 215)
+#define NERR_TmpFile                      (NERR_BASE + 216)
+#define NERR_TooMuchData                  (NERR_BASE + 217)
+#define NERR_DeviceShareConflict          (NERR_BASE + 218)
+#define NERR_BrowserTableIncomplete       (NERR_BASE + 219)
+#define NERR_NotLocalDomain               (NERR_BASE + 220)
+#define NERR_IsDfsShare                   (NERR_BASE + 221)
+#define NERR_DevInvalidOpCode             (NERR_BASE + 231)
+#define NERR_DevNotFound                  (NERR_BASE + 232)
+#define NERR_DevNotOpen                   (NERR_BASE + 233)
+#define NERR_BadQueueDevString            (NERR_BASE + 234)
+#define NERR_BadQueuePriority             (NERR_BASE + 235)
+#define NERR_NoCommDevs                   (NERR_BASE + 237)
+#define NERR_QueueNotFound                (NERR_BASE + 238)
+#define NERR_BadDevString                 (NERR_BASE + 240)
+#define NERR_BadDev                       (NERR_BASE + 241)
+#define NERR_InUseBySpooler               (NERR_BASE + 242)
+#define NERR_CommDevInUse                 (NERR_BASE + 243)
+#define NERR_InvalidComputer              (NERR_BASE + 251)
+#define NERR_MaxLenExceeded               (NERR_BASE + 254)
+#define NERR_BadComponent                 (NERR_BASE + 256)
+#define NERR_CantType                     (NERR_BASE + 257)
+#define NERR_TooManyEntries               (NERR_BASE + 262)
+#define NERR_ProfileFileTooBig            (NERR_BASE + 270)
+#define NERR_ProfileOffset                (NERR_BASE + 271)
+#define NERR_ProfileCleanup               (NERR_BASE + 272)
+#define NERR_ProfileUnknownCmd            (NERR_BASE + 273)
+#define NERR_ProfileLoadErr               (NERR_BASE + 274)
+#define NERR_ProfileSaveErr               (NERR_BASE + 275)
+#define NERR_LogOverflow                  (NERR_BASE + 277)
+#define NERR_LogFileChanged               (NERR_BASE + 278)
+#define NERR_LogFileCorrupt               (NERR_BASE + 279)
+#define NERR_SourceIsDir                  (NERR_BASE + 280)
+#define NERR_BadSource                    (NERR_BASE + 281)
+#define NERR_BadDest                      (NERR_BASE + 282)
+#define NERR_DifferentServers             (NERR_BASE + 283)
+#define NERR_RunSrvPaused                 (NERR_BASE + 285)
+#define NERR_ErrCommRunSrv                (NERR_BASE + 289)
+#define NERR_ErrorExecingGhost            (NERR_BASE + 291)
+#define NERR_ShareNotFound                (NERR_BASE + 292)
+#define NERR_InvalidLana                  (NERR_BASE + 300)
+#define NERR_OpenFiles                    (NERR_BASE + 301)
+#define NERR_ActiveConns                  (NERR_BASE + 302)
+#define NERR_BadPasswordCore              (NERR_BASE + 303)
+#define NERR_DevInUse                     (NERR_BASE + 304)
+#define NERR_LocalDrive                   (NERR_BASE + 305)
+#define NERR_AlertExists                  (NERR_BASE + 330)
+#define NERR_TooManyAlerts                (NERR_BASE + 331)
+#define NERR_NoSuchAlert                  (NERR_BASE + 332)
+#define NERR_BadRecipient                 (NERR_BASE + 333)
+#define NERR_AcctLimitExceeded            (NERR_BASE + 334)
+#define NERR_InvalidLogSeek               (NERR_BASE + 340)
+#define NERR_BadUasConfig                 (NERR_BASE + 350)
+#define NERR_InvalidUASOp                 (NERR_BASE + 351)
+#define NERR_LastAdmin                    (NERR_BASE + 352)
+#define NERR_DCNotFound                   (NERR_BASE + 353)
+#define NERR_LogonTrackingError           (NERR_BASE + 354)
+#define NERR_NetlogonNotStarted           (NERR_BASE + 355)
+#define NERR_CanNotGrowUASFile            (NERR_BASE + 356)
+#define NERR_TimeDiffAtDC                 (NERR_BASE + 357)
+#define NERR_PasswordMismatch             (NERR_BASE + 358)
+#define NERR_NoSuchServer                 (NERR_BASE + 360)
+#define NERR_NoSuchSession                (NERR_BASE + 361)
+#define NERR_NoSuchConnection             (NERR_BASE + 362)
+#define NERR_TooManyServers               (NERR_BASE + 363)
+#define NERR_TooManySessions              (NERR_BASE + 364)
+#define NERR_TooManyConnections           (NERR_BASE + 365)
+#define NERR_TooManyFiles                 (NERR_BASE + 366)
+#define NERR_NoAlternateServers           (NERR_BASE + 367)
+#define NERR_TryDownLevel                 (NERR_BASE + 370)
+#define NERR_UPSDriverNotStarted          (NERR_BASE + 380)
+#define NERR_UPSInvalidConfig             (NERR_BASE + 381)
+#define NERR_UPSInvalidCommPort           (NERR_BASE + 382)
+#define NERR_UPSSignalAsserted            (NERR_BASE + 383)
+#define NERR_UPSShutdownFailed            (NERR_BASE + 384)
+#define NERR_BadDosRetCode                (NERR_BASE + 400)
+#define NERR_ProgNeedsExtraMem            (NERR_BASE + 401)
+#define NERR_BadDosFunction               (NERR_BASE + 402)
+#define NERR_RemoteBootFailed             (NERR_BASE + 403)
+#define NERR_BadFileCheckSum              (NERR_BASE + 404)
+#define NERR_NoRplBootSystem              (NERR_BASE + 405)
+#define NERR_RplLoadrNetBiosErr           (NERR_BASE + 406)
+#define NERR_RplLoadrDiskErr              (NERR_BASE + 407)
+#define NERR_ImageParamErr                (NERR_BASE + 408)
+#define NERR_TooManyImageParams           (NERR_BASE + 409)
+#define NERR_NonDosFloppyUsed             (NERR_BASE + 410)
+#define NERR_RplBootRestart               (NERR_BASE + 411)
+#define NERR_RplSrvrCallFailed            (NERR_BASE + 412)
+#define NERR_CantConnectRplSrvr           (NERR_BASE + 413)
+#define NERR_CantOpenImageFile            (NERR_BASE + 414)
+#define NERR_CallingRplSrvr               (NERR_BASE + 415)
+#define NERR_StartingRplBoot              (NERR_BASE + 416)
+#define NERR_RplBootServiceTerm           (NERR_BASE + 417)
+#define NERR_RplBootStartFailed           (NERR_BASE + 418)
+#define NERR_RPL_CONNECTED                (NERR_BASE + 419)
+#define NERR_BrowserConfiguredToNotRun    (NERR_BASE + 450)
+#define NERR_RplNoAdaptersStarted         (NERR_BASE + 510)
+#define NERR_RplBadRegistry               (NERR_BASE + 511)
+#define NERR_RplBadDatabase               (NERR_BASE + 512)
+#define NERR_RplRplfilesShare             (NERR_BASE + 513)
+#define NERR_RplNotRplServer              (NERR_BASE + 514)
+#define NERR_RplCannotEnum                (NERR_BASE + 515)
+#define NERR_RplWkstaInfoCorrupted        (NERR_BASE + 516)
+#define NERR_RplWkstaNotFound             (NERR_BASE + 517)
+#define NERR_RplWkstaNameUnavailable      (NERR_BASE + 518)
+#define NERR_RplProfileInfoCorrupted      (NERR_BASE + 519)
+#define NERR_RplProfileNotFound           (NERR_BASE + 520)
+#define NERR_RplProfileNameUnavailable    (NERR_BASE + 521)
+#define NERR_RplProfileNotEmpty           (NERR_BASE + 522)
+#define NERR_RplConfigInfoCorrupted       (NERR_BASE + 523)
+#define NERR_RplConfigNotFound            (NERR_BASE + 524)
+#define NERR_RplAdapterInfoCorrupted      (NERR_BASE + 525)
+#define NERR_RplInternal                  (NERR_BASE + 526)
+#define NERR_RplVendorInfoCorrupted       (NERR_BASE + 527)
+#define NERR_RplBootInfoCorrupted         (NERR_BASE + 528)
+#define NERR_RplWkstaNeedsUserAcct        (NERR_BASE + 529)
+#define NERR_RplNeedsRPLUSERAcct          (NERR_BASE + 530)
+#define NERR_RplBootNotFound              (NERR_BASE + 531)
+#define NERR_RplIncompatibleProfile       (NERR_BASE + 532)
+#define NERR_RplAdapterNameUnavailable    (NERR_BASE + 533)
+#define NERR_RplConfigNotEmpty            (NERR_BASE + 534)
+#define NERR_RplBootInUse                 (NERR_BASE + 535)
+#define NERR_RplBackupDatabase            (NERR_BASE + 536)
+#define NERR_RplAdapterNotFound           (NERR_BASE + 537)
+#define NERR_RplVendorNotFound            (NERR_BASE + 538)
+#define NERR_RplVendorNameUnavailable     (NERR_BASE + 539)
+#define NERR_RplBootNameUnavailable       (NERR_BASE + 540)
+#define NERR_RplConfigNameUnavailable     (NERR_BASE + 541)
+#define NERR_DfsInternalCorruption        (NERR_BASE + 560)
+#define NERR_DfsVolumeDataCorrupt         (NERR_BASE + 561)
+#define NERR_DfsNoSuchVolume              (NERR_BASE + 562)
+#define NERR_DfsVolumeAlreadyExists       (NERR_BASE + 563)
+#define NERR_DfsAlreadyShared             (NERR_BASE + 564)
+#define NERR_DfsNoSuchShare               (NERR_BASE + 565)
+#define NERR_DfsNotALeafVolume            (NERR_BASE + 566)
+#define NERR_DfsLeafVolume                (NERR_BASE + 567)
+#define NERR_DfsVolumeHasMultipleServers  (NERR_BASE + 568)
+#define NERR_DfsCantCreateJunctionPoint   (NERR_BASE + 569)
+#define NERR_DfsServerNotDfsAware         (NERR_BASE + 570)
+#define NERR_DfsBadRenamePath             (NERR_BASE + 571)
+#define NERR_DfsVolumeIsOffline           (NERR_BASE + 572)
+#define NERR_DfsInternalError             (NERR_BASE + 590)
+
+#define MAX_NERR                          (NERR_BASE + 899)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h
new file mode 100644
index 0000000..0be3210
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2005 Ulrich Czekalla (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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMJOIN_H
+#define __WINE_LMJOIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tagNETSETUP_JOIN_STATUS
+{
+    NetSetupUnknownStatus = 0,
+    NetSetupUnjoined,
+    NetSetupWorkgroupName,
+    NetSetupDomainName
+} NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS;
+
+NET_API_STATUS NET_API_FUNCTION NetGetJoinInformation(
+    LPCWSTR Server,
+    LPWSTR *Name,
+    PNETSETUP_JOIN_STATUS type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h
new file mode 100644
index 0000000..c05a27c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2006 Robert Reif
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMMSG_
+#define _LMMSG_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MSGNAME_NOT_FORWARDED   0x00
+#define MSGNAME_FORWARDED_TO    0x04
+#define MSGNAME_FORWARDED_FROM  0x10
+
+typedef struct _MSG_INFO_0
+{
+    LPWSTR msgi0_name;
+} MSG_INFO_0, *PMSG_INFO_0, *LPMSG_INFO_0;
+
+typedef struct _MSG_INFO_1
+{
+    LPWSTR msgi1_name;
+    DWORD msgi1_forward_flag;
+    LPWSTR msgi1_forward;
+} MSG_INFO_1, *PMSG_INFO_1, *LPMSG_INFO_1;
+
+NET_API_STATUS NET_API_FUNCTION NetMessageBufferSend(LPCWSTR,LPCWSTR,LPCWSTR,LPBYTE,DWORD);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameAdd(LPCWSTR,LPCWSTR);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h
new file mode 100644
index 0000000..4c762dd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMSERVER_
+#define _LMSERVER_
+
+#include <winsvc.h>
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _SERVER_INFO_100 {
+    DWORD sv100_platform_id;
+    LMSTR sv100_name;
+} SERVER_INFO_100, *PSERVER_INFO_100, *LPSERVER_INFO_100;
+
+typedef struct _SERVER_INFO_101 {
+    DWORD sv101_platform_id;
+    LMSTR sv101_name;
+    DWORD sv101_version_major;
+    DWORD sv101_version_minor;
+    DWORD sv101_type;
+    LMSTR sv101_comment;
+} SERVER_INFO_101, *PSERVER_INFO_101, *LPSERVER_INFO_101;
+
+NET_API_STATUS WINAPI NetServerEnum(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LPDWORD);
+NET_API_STATUS WINAPI NetServerEnumEx(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LMCSTR);
+NET_API_STATUS WINAPI NetServerGetInfo(LMSTR,DWORD,LPBYTE*);
+BOOL WINAPI SetServiceBits(SERVICE_STATUS_HANDLE,DWORD,BOOL,BOOL);
+
+#define SV_TYPE_WORKSTATION       0x00000001
+#define SV_TYPE_SERVER            0x00000002
+#define SV_TYPE_SQLSERVER         0x00000004
+#define SV_TYPE_DOMAIN_CTRL       0x00000008
+#define SV_TYPE_DOMAIN_BAKCTRL    0x00000010
+#define SV_TYPE_TIME_SOURCE       0x00000020
+#define SV_TYPE_AFP               0x00000040
+#define SV_TYPE_NOVELL            0x00000080
+#define SV_TYPE_DOMAIN_MEMBER     0x00000100
+#define SV_TYPE_PRINTQ_SERVER     0x00000200
+#define SV_TYPE_DIALIN_SERVER     0x00000400
+#define SV_TYPE_XENIX_SERVER      0x00000800
+#define SV_TYPE_SERVER_UNIX       SV_TYPE_XENIX_SERVER
+#define SV_TYPE_NT                0x00001000
+#define SV_TYPE_WFW               0x00002000
+#define SV_TYPE_SERVER_MFPN       0x00004000
+#define SV_TYPE_SERVER_NT         0x00008000
+#define SV_TYPE_POTENTIAL_BROWSER 0x00010000
+#define SV_TYPE_BACKUP_BROWSER    0x00020000
+#define SV_TYPE_MASTER_BROWSER    0x00040000
+#define SV_TYPE_DOMAIN_MASTER     0x00080000
+#define SV_TYPE_SERVER_OSF        0x00100000
+#define SV_TYPE_SERVER_VMS        0x00200000
+#define SV_TYPE_WINDOWS           0x00400000
+#define SV_TYPE_DFS               0x00800000
+#define SV_TYPE_ALTERNATE_XPORT   0x20000000
+#define SV_TYPE_LOCAL_LIST_ONLY   0x40000000
+#define SV_TYPE_DOMAIN_ENUM       0x80000000
+#define SV_TYPE_ALL               0xFFFFFFFF
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _LMSERVER_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h
new file mode 100644
index 0000000..df7180b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMSHARE_H
+#define _LMSHARE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <lmcons.h>
+
+typedef struct _SHARE_INFO_0 {
+    LMSTR shi0_netname;
+} SHARE_INFO_0, *PSHARE_INFO_0, *LPSHARE_INFO_0;
+
+typedef struct _SHARE_INFO_1 {
+    LMSTR shi1_netname;
+    DWORD shi1_type;
+    LMSTR shi1_remark;
+} SHARE_INFO_1, *PSHARE_INFO_1, *LPSHARE_INFO_1;
+
+NET_API_STATUS WINAPI NetShareAdd(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetShareCheck(LMSTR,LMSTR,LPDWORD);
+NET_API_STATUS WINAPI NetShareDel(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetShareDelEx(LMSTR,DWORD,LPBYTE);
+NET_API_STATUS WINAPI NetShareDelSticky(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetShareEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetShareEnumSticky(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetShareGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetShareSetInfo(LMSTR,LMSTR,DWORD,LPBYTE,LPDWORD);
+
+#define STYPE_DISKTREE 0
+#define STYPE_PRINTQ   1
+#define STYPE_DEVICE   2
+#define STYPE_IPC      3
+#define STYPE_SPECIAL  0x80000000
+
+NET_API_STATUS WINAPI NetSessionDel(LMSTR,LMSTR,LMSTR);
+NET_API_STATUS WINAPI NetSessionEnum(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetSessionGetInfo(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _LMSHARE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h
new file mode 100644
index 0000000..a179cc6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2003 Geoff Thorpe
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMSTATS_H
+#define __WINE_LMSTATS_H
+
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _STAT_WORKSTATION_0 {
+    LARGE_INTEGER StatisticsStartTime;
+    LARGE_INTEGER BytesReceived;
+    LARGE_INTEGER SmbsReceived;
+    LARGE_INTEGER PagingReadBytesRequested;
+    LARGE_INTEGER NonPagingReadBytesRequested;
+    LARGE_INTEGER CacheReadBytesRequested;
+    LARGE_INTEGER NetworkReadBytesRequested;
+    LARGE_INTEGER BytesTransmitted;
+    LARGE_INTEGER SmbsTransmitted;
+    LARGE_INTEGER PagingWriteBytesRequested;
+    LARGE_INTEGER NonPagingWriteBytesRequested;
+    LARGE_INTEGER CacheWriteBytesRequested;
+    LARGE_INTEGER NetworkWriteBytesRequested;
+    DWORD InitiallyFailedOperations;
+    DWORD FailedCompletionOperations;
+    DWORD ReadOperations;
+    DWORD RandomReadOperations;
+    DWORD ReadSmbs;
+    DWORD LargeReadSmbs;
+    DWORD SmallReadSmbs;
+    DWORD WriteOperations;
+    DWORD RandomWriteOperations;
+    DWORD WriteSmbs;
+    DWORD LargeWriteSmbs;
+    DWORD SmallWriteSmbs;
+    DWORD RawReadsDenied;
+    DWORD RawWritesDenied;
+    DWORD NetworkErrors;
+    DWORD Sessions;
+    DWORD FailedSessions;
+    DWORD Reconnects;
+    DWORD CoreConnects;
+    DWORD Lanman20Connects;
+    DWORD Lanman21Connects;
+    DWORD LanmanNtConnects;
+    DWORD ServerDisconnects;
+    DWORD HungSessions;
+    DWORD UseCount;
+    DWORD FailedUseCount;
+    DWORD CurrentCommands;
+} STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0;
+
+typedef struct _STAT_SERVER_0 {
+    DWORD sts0_start;
+    DWORD sts0_fopens;
+    DWORD sts0_devopens;
+    DWORD sts0_jobsqueued;
+    DWORD sts0_sopens;
+    DWORD sts0_stimedout;
+    DWORD sts0_serrorout;
+    DWORD sts0_pwerrors;
+    DWORD sts0_permerrors;
+    DWORD sts0_syserrors;
+    DWORD sts0_bytessent_low;
+    DWORD sts0_bytessent_high;
+    DWORD sts0_bytesrcvd_low;
+    DWORD sts0_bytesrcvd_high;
+    DWORD sts0_avresponse;
+    DWORD sts0_reqbufneed;
+    DWORD sts0_bigbufneed;
+} STAT_SERVER_0, *PSTAT_SERVER_0, *LPSTAT_SERVER_0;
+
+NET_API_STATUS WINAPI NetStatisticsGet(LPWSTR server, LPWSTR service, DWORD level,
+                                       DWORD options, LPBYTE *bufptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h
new file mode 100644
index 0000000..7368747
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 Tim Schwartz
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMUSE_H
+#define _LMUSE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "lmcons.h"
+#include "lmuseflg.h"
+
+
+#define USE_LOCAL_PARMNUM          1
+#define USE_REMOTE_PARMNUM         2
+#define USE_PASSWORD_PARMNUM       3
+#define USE_ASGTYPE_PARMNUM        4
+#define USE_USERNAME_PARMNUM       5
+#define USE_DOMAINNAME_PARMNUM     6
+
+#define USE_OK                     0
+#define USE_PAUSED                 1
+#define USE_SESSLOST               2
+#define USE_DISCONN                USE_SESSLOST
+#define USE_NETERR                 3
+#define USE_CONN                   4
+#define USE_RECONN                 5
+
+#define USE_WILDCARD               ((DWORD)-1)
+#define USE_DISKDEV                0
+#define USE_SPOOLDEV               1
+#define USE_CHARDEV                2
+#define USE_IPC                    3
+
+typedef struct _USE_INFO_1
+{
+    LMSTR ui1_local;
+    LMSTR ui1_remote;
+    LMSTR ui1_password;
+    DWORD ui1_status;
+    DWORD ui1_asg_type;
+    DWORD ui1_refcount;
+    DWORD ui1_usecount;
+} USE_INFO_1, *PUSE_INFO_1, *LPUSE_INFO_1;
+
+typedef struct _USE_INFO_2
+{
+    LMSTR ui2_local;
+    LMSTR ui2_remote;
+    LMSTR ui2_password;
+    DWORD ui2_status;
+    DWORD ui2_asg_type;
+    DWORD ui2_refcount;
+    DWORD ui2_usecount;
+    LMSTR ui2_username;
+    LMSTR ui2_domainname;
+} USE_INFO_2, *PUSE_INFO_2, *LPUSE_INFO_2;
+
+NET_API_STATUS WINAPI NetUseAdd(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetUseDel(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetUseEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUseGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LMUSE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h
new file mode 100644
index 0000000..cbf9134
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMUSEFLG_H
+#define __WINE_LMUSEFLG_H
+
+#define USE_NOFORCE           0
+#define USE_FORCE             1
+#define USE_LOTS_OF_FORCE     2
+
+#endif  /* __WINE_LMUSEFLG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h
new file mode 100644
index 0000000..0cc02fc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMWKSTA_H
+#define __WINE_LMWKSTA_H
+
+#include <lmcons.h>
+#include <lmuseflg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _WKSTA_TRANSPORT_INFO_0 {
+  DWORD wkti0_quality_of_service;
+  DWORD wkti0_number_of_vcs;
+  LMSTR wkti0_transport_name;
+  LMSTR wkti0_transport_address;
+  BOOL wkti0_wan_ish;
+} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
+
+typedef struct _WKSTA_USER_INFO_0 {
+    LMSTR  wkui0_username;
+} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
+
+typedef struct _WKSTA_USER_INFO_1 {
+    LMSTR  wkui1_username;
+    LMSTR  wkui1_logon_domain;
+    LMSTR  wkui1_oth_domains;
+    LMSTR  wkui1_logon_server;
+} WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;
+
+typedef struct _WKSTA_USER_INFO_1101 {
+    LMSTR  wkui1101_oth_domains;
+} WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101;
+
+typedef struct _WKSTA_INFO_100 {
+    DWORD   wki100_platform_id;
+    LMSTR   wki100_computername;
+    LMSTR   wki100_langroup;
+    DWORD   wki100_ver_major;
+    DWORD   wki100_ver_minor;
+} WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100;
+
+typedef struct _WKSTA_INFO_101 {
+    DWORD   wki101_platform_id;
+    LMSTR   wki101_computername;
+    LMSTR   wki101_langroup;
+    DWORD   wki101_ver_major;
+    DWORD   wki101_ver_minor;
+    LMSTR   wki101_lanroot;
+} WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101;
+
+typedef struct _WKSTA_INFO_102 {
+    DWORD   wki102_platform_id;
+    LMSTR   wki102_computername;
+    LMSTR   wki102_langroup;
+    DWORD   wki102_ver_major;
+    DWORD   wki102_ver_minor;
+    LMSTR   wki102_lanroot;
+    DWORD   wki102_logged_on_users;
+} WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102;
+
+/* workstation */
+NET_API_STATUS WINAPI NetWkstaGetInfo(LMSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetWkstaSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaTransportAdd(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaTransportDel(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetWkstaTransportEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetWkstaUserSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaUserEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h
new file mode 100644
index 0000000..773ec32
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 Andrey Turkin
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LOADPERF_H
+#define __WINE_LOADPERF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI InstallPerfDllA(LPCSTR, LPCSTR, ULONG_PTR);
+DWORD WINAPI InstallPerfDllW(LPCWSTR, LPCWSTR, ULONG_PTR);
+#define      InstallPerfDll WINELIB_NAME_AW(InstallPerfDll);
+
+DWORD WINAPI LoadPerfCounterTextStringsA(LPCSTR, BOOL);
+DWORD WINAPI LoadPerfCounterTextStringsW(LPCWSTR, BOOL);
+#define      LoadPerfCounterTextStrings WINELIB_NAME_AW(LoadPerfCounterTextStrings)
+
+DWORD WINAPI UnloadPerfCounterTextStringsA(LPCSTR, BOOL);
+DWORD WINAPI UnloadPerfCounterTextStringsW(LPCWSTR, BOOL);
+#define      UnloadPerfCounterTextStrings WINELIB_NAME_AW(UnloadPerfCounterTextStrings)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_LOADPERF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h
new file mode 100644
index 0000000..65d970c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h
@@ -0,0 +1,64 @@
+/* Includefile for the decompression library, lzexpand
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LZEXPAND_H
+#define __WINE_LZEXPAND_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define LZERROR_BADINHANDLE	-1	/* -1 */
+#define LZERROR_BADOUTHANDLE	-2	/* -2 */
+#define LZERROR_READ		-3	/* -3 */
+#define LZERROR_WRITE		-4	/* -4 */
+#define LZERROR_GLOBALLOC	-5	/* -5 */
+#define LZERROR_GLOBLOCK	-6	/* -6 */
+#define LZERROR_BADVALUE	-7	/* -7 */
+#define LZERROR_UNKNOWNALG	-8	/* -8 */
+
+VOID        WINAPI LZDone(void);
+LONG        WINAPI CopyLZFile(HFILE,HFILE);
+HFILE       WINAPI LZOpenFileA(LPSTR,LPOFSTRUCT,WORD);
+HFILE       WINAPI LZOpenFileW(LPWSTR,LPOFSTRUCT,WORD);
+#define     LZOpenFile WINELIB_NAME_AW(LZOpenFile)
+INT         WINAPI LZRead(INT,LPSTR,INT);
+INT         WINAPI LZStart(void);
+void        WINAPI LZClose(HFILE);
+LONG        WINAPI LZCopy(HFILE,HFILE);
+HFILE       WINAPI LZInit(HFILE);
+LONG        WINAPI LZSeek(HFILE,LONG,INT);
+INT         WINAPI GetExpandedNameA(LPSTR,LPSTR);
+INT         WINAPI GetExpandedNameW(LPWSTR,LPWSTR);
+#define     GetExpandedName WINELIB_NAME_AW(GetExpandedName)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_LZEXPAND_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h
new file mode 100644
index 0000000..7d68215
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPI_H
+#define MAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Some types */
+
+#ifndef __LHANDLE
+#define __LHANDLE
+typedef ULONG_PTR               LHANDLE, *LPLHANDLE;
+#endif
+#define lhSessionNull           ((LHANDLE)0)
+
+#ifndef WINE_FLAGS_DEFINED
+#define WINE_FLAGS_DEFINED
+typedef ULONG                   FLAGS;
+#endif
+typedef ULONG                  *LPULONG;
+
+typedef struct
+{
+    ULONG ulReserved;
+    ULONG flFlags;
+    ULONG nPosition;
+    LPSTR lpszPathName;
+    LPSTR lpszFileName;
+    LPVOID lpFileType;
+} MapiFileDesc, *lpMapiFileDesc;
+
+typedef struct
+{
+    ULONG ulReserved;
+    ULONG flFlags;
+    ULONG nPosition;
+    PWSTR lpszPathName;
+    PWSTR lpszFileName;
+    PVOID lpFileType;
+} MapiFileDescW, *lpMapiFileDescW;
+
+#ifndef MAPI_ORIG
+#define MAPI_ORIG   0
+#define MAPI_TO     1
+#define MAPI_CC     2
+#define MAPI_BCC    3
+#endif
+
+typedef struct
+{
+    ULONG ulReserved;
+    ULONG ulRecipClass;
+    LPSTR lpszName;
+    LPSTR lpszAddress;
+    ULONG ulEIDSize;
+    LPVOID lpEntryID;
+} MapiRecipDesc, *lpMapiRecipDesc;
+
+typedef struct
+{
+    ULONG ulReserved;
+    ULONG ulRecipClass;
+    PWSTR lpszName;
+    PWSTR lpszAddress;
+    ULONG ulEIDSize;
+    PVOID lpEntryID;
+} MapiRecipDescW, *lpMapiRecipDescW;
+
+typedef struct
+{
+    ULONG ulReserved;
+    LPSTR lpszSubject;
+    LPSTR lpszNoteText;
+    LPSTR lpszMessageType;
+    LPSTR lpszDateReceived;
+    LPSTR lpszConversationID;
+    FLAGS flFlags;
+    lpMapiRecipDesc lpOriginator;
+    ULONG nRecipCount;
+    lpMapiRecipDesc lpRecips;
+    ULONG nFileCount;
+    lpMapiFileDesc lpFiles;
+} MapiMessage, *lpMapiMessage;
+
+typedef struct
+{
+    ULONG ulReserved;
+    PWSTR lpszSubject;
+    PWSTR lpszNoteText;
+    PWSTR lpszMessageType;
+    PWSTR lpszDateReceived;
+    PWSTR lpszConversationID;
+    FLAGS flFlags;
+    lpMapiRecipDescW lpOriginator;
+    ULONG nRecipCount;
+    lpMapiRecipDescW lpRecips;
+    ULONG nFileCount;
+    lpMapiFileDescW lpFiles;
+} MapiMessageW, *lpMapiMessageW;
+
+/* Error codes */
+
+#ifndef SUCCESS_SUCCESS
+#define SUCCESS_SUCCESS                 0
+#endif
+
+#define MAPI_USER_ABORT                 1
+#define MAPI_E_USER_ABORT               MAPI_USER_ABORT
+#define MAPI_E_FAILURE                  2
+#define MAPI_E_LOGON_FAILURE            3
+#define MAPI_E_LOGIN_FAILURE            MAPI_E_LOGON_FAILURE
+#define MAPI_E_DISK_FULL                4
+#define MAPI_E_INSUFFICIENT_MEMORY      5
+#define MAPI_E_ACCESS_DENIED            6
+#define MAPI_E_TOO_MANY_SESSIONS        8
+#define MAPI_E_TOO_MANY_FILES           9
+#define MAPI_E_TOO_MANY_RECIPIENTS      10
+#define MAPI_E_ATTACHMENT_NOT_FOUND     11
+#define MAPI_E_ATTACHMENT_OPEN_FAILURE  12
+#define MAPI_E_ATTACHMENT_WRITE_FAILURE 13
+#define MAPI_E_UNKNOWN_RECIPIENT        14
+#define MAPI_E_BAD_RECIPTYPE            15
+#define MAPI_E_NO_MESSAGES              16
+#define MAPI_E_INVALID_MESSAGE          17
+#define MAPI_E_TEXT_TOO_LARGE           18
+#define MAPI_E_INVALID_SESSION          19
+#define MAPI_E_TYPE_NOT_SUPPORTED       20
+#define MAPI_E_AMBIGUOUS_RECIPIENT      21
+#define MAPI_E_AMBIG_RECIP              MAPI_E_AMBIGUOUS_RECIPIENT
+#define MAPI_E_MESSAGE_IN_USE           22
+#define MAPI_E_NETWORK_FAILURE          23
+#define MAPI_E_INVALID_EDITFIELDS       24
+#define MAPI_E_INVALID_RECIPS           25
+#define MAPI_E_NOT_SUPPORTED            26
+#define MAPI_E_UNICODE_NOT_SUPPORTED    27
+
+
+/* MAPILogon */
+
+#ifndef MAPI_LOGON_UI
+#define MAPI_LOGON_UI           0x00000001
+#endif
+#ifndef MAPI_NEW_SESSION
+#define MAPI_NEW_SESSION        0x00000002
+#endif
+#ifndef MAPI_EXTENDED
+#define MAPI_EXTENDED           0x00000020
+#endif
+#ifndef MAPI_FORCE_DOWNLOAD
+#define MAPI_FORCE_DOWNLOAD     0x00001000
+#endif
+#ifndef MAPI_PASSWORD_UI
+#define MAPI_PASSWORD_UI        0x00020000
+#endif
+
+
+/* MAPISendMail */
+
+#define MAPI_DIALOG             0x00000008
+
+/* MAPISendMailW */
+
+#define MAPI_FORCE_UNICODE      0x00040000
+
+
+/* API typedefs and prototypes */
+
+typedef ULONG (WINAPI MAPIADDRESS)(LHANDLE,ULONG_PTR,LPSTR,ULONG,LPSTR,ULONG,lpMapiRecipDesc,FLAGS,ULONG,LPULONG,lpMapiRecipDesc*);
+typedef MAPIADDRESS *LPMAPIADDRESS;
+MAPIADDRESS MAPIAddress;
+
+typedef ULONG (WINAPI MAPIDELETEMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG);
+typedef MAPIDELETEMAIL *LPMAPIDELETEMAIL;
+MAPIDELETEMAIL MAPIDeleteMail;
+
+typedef ULONG (WINAPI MAPIDETAILS)(LHANDLE,ULONG_PTR,lpMapiRecipDesc,FLAGS,ULONG);
+typedef MAPIDETAILS *LPMAPIDETAILS;
+MAPIDETAILS MAPIDetails;
+
+typedef ULONG (WINAPI MAPIFINDNEXT)(LHANDLE,ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPSTR);
+typedef MAPIFINDNEXT *LPMAPIFINDNEXT;
+MAPIFINDNEXT MAPIFindNext;
+
+#ifndef MAPIFREEBUFFER_DEFINED
+#define MAPIFREEBUFFER_DEFINED
+typedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID);
+typedef MAPIFREEBUFFER *LPMAPIFREEBUFFER;
+MAPIFREEBUFFER MAPIFreeBuffer;
+#endif
+
+typedef ULONG (WINAPI MAPILOGOFF)(LHANDLE,ULONG_PTR,FLAGS,ULONG);
+typedef MAPILOGOFF *LPMAPILOGOFF;
+MAPILOGOFF MAPILogoff;
+
+typedef ULONG (WINAPI MAPILOGON)(ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPLHANDLE);
+typedef MAPILOGON *LPMAPILOGON;
+MAPILOGON MAPILogon;
+
+typedef ULONG (WINAPI MAPIREADMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiMessage);
+typedef MAPIREADMAIL *LPMAPIREADMAIL;
+MAPIREADMAIL MAPIReadMail;
+
+typedef ULONG (WINAPI MAPIRESOLVENAME)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiRecipDesc*);
+typedef MAPIRESOLVENAME *LPMAPIRESOLVENAME;
+MAPIRESOLVENAME MAPIResolveName;
+
+typedef ULONG (WINAPI MAPISAVEMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG,LPSTR);
+typedef MAPISAVEMAIL *LPMAPISAVEMAIL;
+MAPISAVEMAIL MAPISaveMail;
+
+typedef ULONG (WINAPI MAPISENDDOCUMENTS)(ULONG_PTR,LPSTR,LPSTR,LPSTR,ULONG);
+typedef MAPISENDDOCUMENTS *LPMAPISENDDOCUMENTS;
+MAPISENDDOCUMENTS MAPISendDocuments;
+
+typedef ULONG (WINAPI MAPISENDMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG);
+typedef MAPISENDMAIL *LPMAPISENDMAIL;
+MAPISENDMAIL MAPISendMail;
+
+typedef ULONG (WINAPI MAPISENDMAILW)(LHANDLE,ULONG_PTR,lpMapiMessageW,FLAGS,ULONG);
+typedef MAPISENDMAILW *LPMAPISENDMAILW;
+MAPISENDMAILW MAPISendMailW;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h
new file mode 100644
index 0000000..f09ec4b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h
@@ -0,0 +1,123 @@
+/*
+ * Status codes returned by MAPI
+ *
+ * Copyright (C) 2002 Aric Stewart
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPICODE_H
+#define MAPICODE_H
+
+#include <winerror.h>
+
+#define MAKE_MAPI_SCODE(sev,fac,code) \
+    ((SCODE)(((ULONG)(sev)<<31)|((ULONG)(fac)<<16)|((ULONG)(code))))
+
+#define MAKE_MAPI_E(e) (MAKE_MAPI_SCODE(1,FACILITY_ITF,(e)))
+#define MAKE_MAPI_S(e) (MAKE_MAPI_SCODE(0,FACILITY_ITF,(e)))
+
+#ifndef SUCCESS_SUCCESS
+#define SUCCESS_SUCCESS     __MSABI_LONG(0)
+#endif
+
+/* Errors */
+#define MAPI_E_ACCOUNT_DISABLED            ((SCODE)0x80040124)
+#define MAPI_E_AMBIGUOUS_RECIP             ((SCODE)0x80040700)
+#define MAPI_E_BAD_CHARWIDTH               ((SCODE)0x80040103)
+#define MAPI_E_BAD_COLUMN                  ((SCODE)0x80040118)
+#define MAPI_E_BAD_VALUE                   ((SCODE)0x80040301)
+#define MAPI_E_BUSY                        ((SCODE)0x8004010B)
+#define MAPI_E_CALL_FAILED                 E_FAIL
+#define MAPI_E_CANCEL                      ((SCODE)0x80040501)
+#define MAPI_E_COLLISION                   ((SCODE)0x80040604)
+#define MAPI_E_COMPUTED                    ((SCODE)0x8004011A)
+#define MAPI_E_CORRUPT_DATA                ((SCODE)0x8004011B)
+#define MAPI_E_CORRUPT_STORE               ((SCODE)0x80040600)
+#define MAPI_E_DECLINE_COPY                ((SCODE)0x80040306)
+#define MAPI_E_DISK_ERROR                  ((SCODE)0x80040116)
+#define MAPI_E_END_OF_SESSION              ((SCODE)0x80040200)
+#define MAPI_E_EXTENDED_ERROR              ((SCODE)0x80040119)
+#define MAPI_E_FAILONEPROVIDER             ((SCODE)0x8004011D)
+#define MAPI_E_FOLDER_CYCLE                ((SCODE)0x8004060B)
+#define MAPI_E_HAS_FOLDERS                 ((SCODE)0x80040609)
+#define MAPI_E_HAS_MESSAGES                ((SCODE)0x8004060A)
+#define MAPI_E_INTERFACE_NOT_SUPPORTED     E_NOINTERFACE
+#define MAPI_E_INVALID_ACCESS_TIME         ((SCODE)0x80040123)
+#define MAPI_E_INVALID_BOOKMARK            ((SCODE)0x80040405)
+#define MAPI_E_INVALID_ENTRYID             ((SCODE)0x80040107)
+#define MAPI_E_INVALID_OBJECT              ((SCODE)0x80040108)
+#define MAPI_E_INVALID_PARAMETER           E_INVALIDARG
+#define MAPI_E_INVALID_TYPE                ((SCODE)0x80040302)
+#define MAPI_E_INVALID_WORKSTATION_ACCOUNT ((SCODE)0x80040122)
+#define MAPI_E_LOGON_FAILED                ((SCODE)0x80040111)
+#define MAPI_E_MISSING_REQUIRED_COLUMN     ((SCODE)0x80040202)
+#define MAPI_E_NETWORK_ERROR               ((SCODE)0x80040115)
+#define MAPI_E_NO_ACCESS                   E_ACCESSDENIED
+#define MAPI_E_NON_STANDARD                ((SCODE)0x80040606)
+#define MAPI_E_NO_RECIPIENTS               ((SCODE)0x80040607)
+#define MAPI_E_NO_SUPPORT                  ((SCODE)0x80040102)
+#define MAPI_E_NO_SUPPRESS                 ((SCODE)0x80040602)
+#define MAPI_E_NOT_ENOUGH_DISK             ((SCODE)0x8004010D)
+#define MAPI_E_NOT_ENOUGH_MEMORY           E_OUTOFMEMORY
+#define MAPI_E_NOT_ENOUGH_RESOURCES        ((SCODE)0x8004010E)
+#define MAPI_E_NOT_FOUND                   ((SCODE)0x8004010F)
+#define MAPI_E_NOT_INITIALIZED             ((SCODE)0x80040605)
+#define MAPI_E_NOT_IN_QUEUE                ((SCODE)0x80040601)
+#define MAPI_E_NOT_ME                      ((SCODE)0x80040502)
+#define MAPI_E_OBJECT_CHANGED              ((SCODE)0x80040109)
+#define MAPI_E_OBJECT_DELETED              ((SCODE)0x8004010A)
+#define MAPI_E_PASSWORD_CHANGE_REQUIRED    ((SCODE)0x80040120)
+#define MAPI_E_PASSWORD_EXPIRED            ((SCODE)0x80040121)
+#define MAPI_E_SESSION_LIMIT               ((SCODE)0x80040112)
+#define MAPI_E_STRING_TOO_LONG             ((SCODE)0x80040105)
+#define MAPI_E_SUBMITTED                   ((SCODE)0x80040608)
+#define MAPI_E_TABLE_EMPTY                 ((SCODE)0x80040402)
+#define MAPI_E_TABLE_TOO_BIG               ((SCODE)0x80040403)
+#define MAPI_E_TIMEOUT                     ((SCODE)0x80040401)
+#define MAPI_E_TOO_BIG                     ((SCODE)0x80040305)
+#define MAPI_E_TOO_COMPLEX                 ((SCODE)0x80040117)
+#define MAPI_E_TYPE_NO_SUPPORT             ((SCODE)0x80040303)
+#define MAPI_E_UNABLE_TO_ABORT             ((SCODE)0x80040114)
+#define MAPI_E_UNABLE_TO_COMPLETE          ((SCODE)0x80040400)
+#define MAPI_E_UNCONFIGURED                ((SCODE)0x8004011C)
+#define MAPI_E_UNEXPECTED_ID               ((SCODE)0x80040307)
+#define MAPI_E_UNEXPECTED_TYPE             ((SCODE)0x80040304)
+#define MAPI_E_UNKNOWN_CPID                ((SCODE)0x8004011E)
+#define MAPI_E_UNKNOWN_ENTRYID             ((SCODE)0x80040201)
+#define MAPI_E_UNKNOWN_FLAGS               ((SCODE)0x80040106)
+#define MAPI_E_UNKNOWN_LCID                ((SCODE)0x8004011F)
+#define MAPI_E_USER_CANCEL                 ((SCODE)0x80040113)
+#define MAPI_E_VERSION                     ((SCODE)0x80040110)
+#define MAPI_E_WAIT                        ((SCODE)0x80040500)
+
+/* Warnings */
+#define MAPI_W_APPROX_COUNT                ((SCODE)0x00040482)
+#define MAPI_W_CANCEL_MESSAGE              ((SCODE)0x00040580)
+#define MAPI_W_ERRORS_RETURNED             ((SCODE)0x00040380)
+#define MAPI_W_NO_SERVICE                  ((SCODE)0x00040203)
+#define MAPI_W_PARTIAL_COMPLETION          ((SCODE)0x00040680)
+#define MAPI_W_POSITION_CHANGED            ((SCODE)0x00040481)
+
+#endif /* MAPICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h
new file mode 100644
index 0000000..fe2c5c3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h
@@ -0,0 +1,1332 @@
+/*
+ * Copyright (C) 1998 Justin Bradford
+ * Copyright (c) 2009 Owen Rudge 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIDEFS_H
+#define MAPIDEFS_H
+
+#include <windows.h>
+#include <winerror.h>
+#include <objbase.h>
+#include <stddef.h>
+
+/* Some types from other headers */
+#ifndef __LHANDLE
+#define __LHANDLE
+typedef ULONG_PTR LHANDLE, *LPLHANDLE;
+#endif
+
+#ifndef _tagCY_DEFINED
+#define _tagCY_DEFINED
+typedef union tagCY
+{
+    struct
+    {
+#ifdef WORDS_BIGENDIAN
+        LONG  Hi;
+        ULONG Lo;
+#else
+        ULONG Lo;
+        LONG  Hi;
+#endif
+    } DUMMYSTRUCTNAME;
+    LONGLONG int64;
+} CY;
+typedef CY CURRENCY;
+#endif /* _tagCY_DEFINED */
+
+
+#ifndef _FILETIME_
+#define _FILETIME_
+typedef struct _FILETIME
+{
+#ifdef WORDS_BIGENDIAN
+    DWORD dwHighDateTime;
+    DWORD dwLowDateTime;
+#else
+    DWORD dwLowDateTime;
+    DWORD dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#endif
+
+/* Memory allocation routines */
+typedef SCODE (WINAPI ALLOCATEBUFFER)(ULONG,LPVOID*);
+typedef SCODE (WINAPI ALLOCATEMORE)(ULONG,LPVOID,LPVOID*);
+typedef ULONG (WINAPI FREEBUFFER)(LPVOID);
+
+typedef ALLOCATEBUFFER *LPALLOCATEBUFFER;
+typedef ALLOCATEMORE *LPALLOCATEMORE;
+typedef FREEBUFFER *LPFREEBUFFER;
+
+/* MAPI exposed interfaces */
+typedef const IID *LPCIID;
+
+typedef struct IAddrBook IAddrBook;
+typedef IAddrBook *LPADRBOOK;
+typedef struct IABContainer IABContainer;
+typedef IABContainer *LPABCONT;
+typedef struct IAttach *LPATTACH;
+typedef struct IDistList IDistList;
+typedef IDistList *LPDISTLIST;
+typedef struct IMailUser IMailUser;
+typedef IMailUser *LPMAILUSER;
+typedef struct IMAPIAdviseSink *LPMAPIADVISESINK;
+typedef struct IMAPIContainer *LPMAPICONTAINER;
+typedef struct IMAPIFolder *LPMAPIFOLDER;
+typedef struct IMAPIProgress IMAPIProgress;
+typedef IMAPIProgress *LPMAPIPROGRESS;
+typedef struct IMAPIStatus IMAPIStatus;
+typedef IMAPIStatus *LPMAPISTATUS;
+typedef struct IMessage *LPMESSAGE;
+typedef struct IProfSect IProfSect;
+typedef IProfSect *LPPROFSECT;
+typedef struct IProviderAdmin IProviderAdmin;
+typedef IProviderAdmin *LPPROVIDERADMIN;
+
+#ifndef MAPI_DIM
+# define MAPI_DIM 1 /* Default to one dimension for variable length arrays */
+#endif
+
+/* Flags for abFlags[0] */
+#define MAPI_NOTRESERVED 0x08
+#define MAPI_NOW         0x10
+#define MAPI_THISSESSION 0x20
+#define MAPI_NOTRECIP    0x40
+#define MAPI_SHORTTERM   0x80
+
+/* Flags for abFlags[1]  */
+#define MAPI_COMPOUND    0x80
+
+typedef struct _ENTRYID
+{
+    BYTE abFlags[4];
+    BYTE ab[MAPI_DIM];
+} ENTRYID, *LPENTRYID;
+
+/* MAPI GUID's */
+typedef struct _MAPIUID
+{
+    BYTE ab[sizeof(GUID)];
+} MAPIUID, *LPMAPIUID;
+
+#define IsEqualMAPIUID(pl,pr) (!memcmp((pl),(pr),sizeof(MAPIUID)))
+
+#define MAPI_ONE_OFF_UID { 0x81,0x2b,0x1f,0xa4,0xbe,0xa3,0x10,0x19,0x9d,0x6e, \
+                           0x00,0xdd,0x01,0x0f,0x54,0x02 }
+#define MAPI_ONE_OFF_UNICODE      0x8000
+#define MAPI_ONE_OFF_NO_RICH_INFO 0x0001
+
+/* Object types */
+#define MAPI_STORE    1U
+#define MAPI_ADDRBOOK 2U
+#define MAPI_FOLDER   3U
+#define MAPI_ABCONT   4U
+#define MAPI_MESSAGE  5U
+#define MAPI_MAILUSER 6U
+#define MAPI_ATTACH   7U
+#define MAPI_DISTLIST 8U
+#define MAPI_PROFSECT 9U
+#define MAPI_STATUS   10U
+#define MAPI_SESSION  11U
+#define MAPI_FORMINFO 12U
+
+/* Flags for various calls */
+#define MAPI_MODIFY                   0x00000001U /* Object can be modified */
+#define MAPI_CREATE                   0x00000002U /* Object can be created */
+#define MAPI_ACCESS_MODIFY            MAPI_MODIFY /* Want write access */
+#define MAPI_ACCESS_READ              0x00000002U /* Want read access */
+#define MAPI_ACCESS_DELETE            0x00000004U /* Want delete access */
+#define MAPI_ACCESS_CREATE_HIERARCHY  0x00000008U
+#define MAPI_ACCESS_CREATE_CONTENTS   0x00000010U
+#define MAPI_ACCESS_CREATE_ASSOCIATED 0x00000020U
+#define MAPI_USE_DEFAULT              0x00000040U
+#define MAPI_UNICODE                  0x80000000U /* Strings in this call are Unicode */
+
+#if defined (UNICODE) || defined (__WINESRC__)
+#define fMapiUnicode MAPI_UNICODE
+#else
+#define fMapiUnicode 0U
+#endif
+
+/* IMAPISession::OpenMessageStore() flags */
+#define MDB_NO_DIALOG           0x00000001
+
+/* Types of message receivers */
+#ifndef MAPI_ORIG
+#define MAPI_ORIG      0          /* The original author */
+#define MAPI_TO        1          /* The primary message receiver */
+#define MAPI_CC        2          /* A carbon copy receiver */
+#define MAPI_BCC       3          /* A blind carbon copy receiver */
+#define MAPI_P1        0x10000000 /* A message resend */
+#define MAPI_SUBMITTED 0x80000000 /* This message has already been sent */
+#endif
+
+#ifndef cchProfileNameMax
+#define cchProfileNameMax 64 /* Maximum length of a profile name */
+#define cchProfilePassMax 64 /* Maximum length of a profile password */
+#endif
+
+/* Properties: The are the contents of cells in MAPI tables, as well as the
+ * values returned when object properties are queried.
+ */
+
+/* Property types */
+#define PT_UNSPECIFIED 0U
+#define PT_NULL        1U
+#define PT_I2          2U
+#define PT_SHORT       PT_I2
+#define PT_LONG        3U
+#define PT_I4          PT_LONG
+#define PT_R4          4U
+#define PT_FLOAT       PT_R4
+#define PT_DOUBLE      5U
+#define PT_R8          PT_DOUBLE
+#define PT_CURRENCY    6U
+#define PT_APPTIME     7U
+#define PT_ERROR       10U
+#define PT_BOOLEAN     11U
+#define PT_OBJECT      13U
+#define PT_I8          20U
+#define PT_LONGLONG    PT_I8
+#define PT_STRING8     30U
+#define PT_UNICODE     31U
+#define PT_SYSTIME     64U
+#define PT_CLSID       72U
+#define PT_BINARY      258U
+
+#define MV_FLAG     0x1000 /* This property type is multi-valued (an array) */
+#define MV_INSTANCE 0x2000
+#define MVI_FLAG    (MV_FLAG|MV_INSTANCE)
+#define MVI_PROP(t) ((t)|MVI_FLAG)
+
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+# define PT_TSTRING      PT_UNICODE
+# define PT_MV_TSTRING   (MV_FLAG|PT_UNICODE)
+# define LPSZ            lpszW
+# define LPPSZ           lppszW
+# define MVSZ            MVszW
+# else
+# define PT_TSTRING      PT_STRING8
+# define PT_MV_TSTRING   (MV_FLAG|PT_STRING8)
+# define LPSZ            lpszA
+# define LPPSZ           lppszA
+# define MVSZ            MVszA
+# endif
+#endif
+
+#define PROP_TYPE_MASK  0xFFFFU
+#define PROP_TYPE(t)    ((t) & PROP_TYPE_MASK)
+#define PROP_ID(t)      ((t) >> 16)
+#define PROP_TAG(t,id)  (((id) << 16) | t)
+#define PROP_ID_NULL    0
+#define PROP_ID_INVALID 0xFFFF
+#define PR_NULL         PROP_TAG(PT_NULL, PROP_ID_NULL)
+
+#define CHANGE_PROP_TYPE(t,typ) ((0xFFFF0000 & t) | typ)
+
+/* Multi-valued property types */
+#define PT_MV_I2       (MV_FLAG|PT_I2)
+#define PT_MV_SHORT    PT_MV_I2
+#define PT_MV_LONG     (MV_FLAG|PT_LONG)
+#define PT_MV_I4       PT_MV_LONG
+#define PT_MV_R4       (MV_FLAG|PT_R4)
+#define PT_MV_FLOAT    PT_MV_R4
+#define PT_MV_DOUBLE   (MV_FLAG|PT_DOUBLE)
+#define PT_MV_R8       PT_MV_DOUBLE
+#define PT_MV_CURRENCY (MV_FLAG|PT_CURRENCY)
+#define PT_MV_APPTIME  (MV_FLAG|PT_APPTIME)
+#define PT_MV_SYSTIME  (MV_FLAG|PT_SYSTIME)
+#define PT_MV_STRING8  (MV_FLAG|PT_STRING8)
+#define PT_MV_BINARY   (MV_FLAG|PT_BINARY)
+#define PT_MV_UNICODE  (MV_FLAG|PT_UNICODE)
+#define PT_MV_CLSID    (MV_FLAG|PT_CLSID)
+#define PT_MV_I8       (MV_FLAG|PT_I8)
+#define PT_MV_LONGLONG PT_MV_I8
+
+
+/* The property tag structure. This describes a list of columns */
+typedef struct _SPropTagArray
+{
+    ULONG cValues;              /* Number of elements in aulPropTag */
+    ULONG aulPropTag[MAPI_DIM]; /* Property tags */
+} SPropTagArray, *LPSPropTagArray;
+
+#define CbNewSPropTagArray(c) (offsetof(SPropTagArray,aulPropTag)+(c)*sizeof(ULONG))
+#define CbSPropTagArray(p)    CbNewSPropTagArray((p)->cValues)
+#define SizedSPropTagArray(n,id) \
+    struct _SPropTagArray_##id { ULONG cValues; ULONG aulPropTag[n]; } id
+
+/* Multi-valued PT_APPTIME property value */
+typedef struct _SAppTimeArray
+{
+    ULONG   cValues; /* Number of doubles in lpat */
+    double *lpat;    /* Pointer to double array of length cValues */
+} SAppTimeArray;
+
+/* PT_BINARY property value */
+typedef struct _SBinary
+{
+    ULONG  cb;  /* Number of bytes in lpb */
+    LPBYTE lpb; /* Pointer to byte array of length cb */
+} SBinary, *LPSBinary;
+
+/* Multi-valued PT_BINARY property value */
+typedef struct _SBinaryArray
+{
+    ULONG    cValues; /* Number of SBinarys in lpbin */
+    SBinary *lpbin;   /* Pointer to SBinary array of length cValues */
+} SBinaryArray;
+
+typedef SBinaryArray ENTRYLIST, *LPENTRYLIST;
+
+/* Multi-valued PT_CY property value */
+typedef struct _SCurrencyArray
+{
+    ULONG  cValues; /* Number of CYs in lpcu */
+    CY    *lpcur;   /* Pointer to CY array of length cValues */
+} SCurrencyArray;
+
+/* Multi-valued PT_SYSTIME property value */
+typedef struct _SDateTimeArray
+{
+    ULONG     cValues; /* Number of FILETIMEs in lpft */
+    FILETIME *lpft;    /* Pointer to FILETIME array of length cValues */
+} SDateTimeArray;
+
+/* Multi-valued PT_DOUBLE property value */
+typedef struct _SDoubleArray
+{
+    ULONG   cValues; /* Number of doubles in lpdbl */
+    double *lpdbl;   /* Pointer to double array of length cValues */
+} SDoubleArray;
+
+/* Multi-valued PT_CLSID property value */
+typedef struct _SGuidArray
+{
+    ULONG cValues; /* Number of GUIDs in lpguid */
+    GUID *lpguid;  /* Pointer to GUID array of length cValues */
+} SGuidArray;
+
+/* Multi-valued PT_LONGLONG property value */
+typedef struct _SLargeIntegerArray
+{
+    ULONG          cValues; /* Number of long64s in lpli */
+    LARGE_INTEGER *lpli;    /* Pointer to long64 array of length cValues */
+} SLargeIntegerArray;
+
+/* Multi-valued PT_LONG property value */
+typedef struct _SLongArray
+{
+    ULONG  cValues; /* Number of longs in lpl */
+    LONG  *lpl;     /* Pointer to long array of length cValues */
+} SLongArray;
+
+/* Multi-valued PT_STRING8 property value */
+typedef struct _SLPSTRArray
+{
+    ULONG  cValues; /* Number of Ascii strings in lppszA */
+    LPSTR *lppszA;  /* Pointer to Ascii string array of length cValues */
+} SLPSTRArray;
+
+/* Multi-valued PT_FLOAT property value */
+typedef struct _SRealArray
+{
+    ULONG cValues; /* Number of floats in lpflt */
+    float *lpflt;  /* Pointer to float array of length cValues */
+} SRealArray;
+
+/* Multi-valued PT_SHORT property value */
+typedef struct _SShortArray
+{
+    ULONG      cValues; /* Number of shorts in lpb */
+    short int *lpi;     /* Pointer to short array of length cValues */
+} SShortArray;
+
+/* Multi-valued PT_UNICODE property value */
+typedef struct _SWStringArray
+{
+    ULONG   cValues; /* Number of Unicode strings in lppszW */
+    LPWSTR *lppszW;  /* Pointer to Unicode string array of length cValues */
+} SWStringArray;
+
+/* A property value */
+typedef union _PV
+{
+    short int          i;
+    LONG               l;
+    ULONG              ul;
+    float              flt;
+    double             dbl;
+    unsigned short     b;
+    CY                 cur;
+    double             at;
+    FILETIME           ft;
+    LPSTR              lpszA;
+    SBinary            bin;
+    LPWSTR             lpszW;
+    LPGUID             lpguid;
+    LARGE_INTEGER      li;
+    SShortArray        MVi;
+    SLongArray         MVl;
+    SRealArray         MVflt;
+    SDoubleArray       MVdbl;
+    SCurrencyArray     MVcur;
+    SAppTimeArray      MVat;
+    SDateTimeArray     MVft;
+    SBinaryArray       MVbin;
+    SLPSTRArray        MVszA;
+    SWStringArray      MVszW;
+    SGuidArray         MVguid;
+    SLargeIntegerArray MVli;
+    SCODE              err;
+    LONG               x;
+} __UPV;
+
+/* Property value structure. This is essentially a mini-Variant */
+typedef struct _SPropValue
+{
+    ULONG     ulPropTag;  /* The property type */
+    ULONG     dwAlignPad; /* Alignment, treat as reserved */
+    union _PV Value;      /* The property value */
+} SPropValue, *LPSPropValue;
+
+/* Structure describing a table row (a collection of property values) */
+typedef struct _SRow
+{
+    ULONG        ulAdrEntryPad; /* Padding, treat as reserved */
+    ULONG        cValues;       /* Count of property values in lpProbs */
+    LPSPropValue lpProps;       /* Pointer to an array of property values of length cValues */
+} SRow, *LPSRow;
+
+/* Structure describing a set of table rows */
+typedef struct _SRowSet
+{
+    ULONG cRows;          /* Count of rows in aRow */
+    SRow  aRow[MAPI_DIM]; /* Array of rows of length cRows */
+} SRowSet, *LPSRowSet;
+
+#define CbNewSRowSet(c) (offsetof(SRowSet,aRow)+(c)*sizeof(SRow))
+#define CbSRowSet(p)    CbNewSRowSet((p)->cRows)
+#define SizedSRowSet(n,id) \
+    struct _SRowSet_##id { ULONG cRows; SRow aRow[n]; } id
+
+/* Structure describing a problem with a property */
+typedef struct _SPropProblem
+{
+    ULONG ulIndex;   /* Index of the property */
+    ULONG ulPropTag; /* Property tag of the property */
+    SCODE scode;     /* Error code of the problem */
+} SPropProblem, *LPSPropProblem;
+
+/* A collection of property problems */
+typedef struct _SPropProblemArray
+{
+    ULONG        cProblem;           /* Number of problems in aProblem */
+    SPropProblem aProblem[MAPI_DIM]; /* Array of problems of length cProblem */
+} SPropProblemArray, *LPSPropProblemArray;
+
+/* FPropContainsProp flags */
+#define FL_FULLSTRING     ((ULONG)0x00000) /* Exact string match */
+#define FL_SUBSTRING      ((ULONG)0x00001) /* Substring match */
+#define FL_PREFIX         ((ULONG)0x00002) /* Prefix match */
+#define FL_IGNORECASE     ((ULONG)0x10000) /* Case insensitive */
+#define FL_IGNORENONSPACE ((ULONG)0x20000) /* Ignore non spacing characters */
+#define FL_LOOSE          ((ULONG)0x40000) /* Try very hard to match */
+
+
+/* Table types returned by IMAPITable_GetStatus() */
+#define TBLTYPE_SNAPSHOT 0U /* Table is fixed at creation time and contents do not change */
+#define TBLTYPE_KEYSET   1U /* Table has a fixed number of rows, but row values may change */
+#define TBLTYPE_DYNAMIC  2U /* Table values and the number of rows may change */
+
+/* Table status returned by IMAPITable_GetStatus() */
+#define TBLSTAT_COMPLETE       0U  /* All operations have completed (normal status) */
+#define TBLSTAT_QCHANGED       7U  /* Table data has changed as expected */
+#define TBLSTAT_SORTING        9U  /* Table is being asynchronously sorted */
+#define TBLSTAT_SORT_ERROR     10U /* An error occurred while sorting the table */
+#define TBLSTAT_SETTING_COLS   11U /* Table columns are being asynchronously changed */
+#define TBLSTAT_SETCOL_ERROR   13U /* An error occurred during column changing */
+#define TBLSTAT_RESTRICTING    14U /* Table rows are being asynchronously restricted */
+#define TBLSTAT_RESTRICT_ERROR 15U /* An error occurred during row restriction */
+
+/* Flags for IMAPITable operations that can be asynchronous */
+#define TBL_NOWAIT 1U         /* Perform the operation asynchronously */
+#define TBL_BATCH  2U         /* Perform the operation when the results are needed */
+#define TBL_ASYNC  TBL_NOWAIT /* Synonym for TBL_NOWAIT */
+
+/* Flags for IMAPITable_FindRow() */
+#define DIR_BACKWARD 1U /* Read rows backwards from the start bookmark */
+
+/* Table bookmarks */
+typedef ULONG BOOKMARK;
+
+#define BOOKMARK_BEGINNING ((BOOKMARK)0) /* The first row */
+#define BOOKMARK_CURRENT   ((BOOKMARK)1) /* The curent table row */
+#define BOOKMARK_END       ((BOOKMARK)2) /* The last row */
+
+/* Row restrictions */
+typedef struct _SRestriction* LPSRestriction;
+
+typedef struct _SAndRestriction
+{
+    ULONG          cRes;
+    LPSRestriction lpRes;
+} SAndRestriction;
+
+typedef struct _SBitMaskRestriction
+{
+    ULONG relBMR;
+    ULONG ulPropTag;
+    ULONG ulMask;
+} SBitMaskRestriction;
+
+typedef struct _SCommentRestriction
+{
+    ULONG          cValues;
+    LPSRestriction lpRes;
+    LPSPropValue   lpProp;
+} SCommentRestriction;
+
+#define RELOP_LT 0U
+#define RELOP_LE 1U
+#define RELOP_GT 2U
+#define RELOP_GE 3U
+#define RELOP_EQ 4U
+#define RELOP_NE 5U
+#define RELOP_RE 6U
+
+typedef struct _SComparePropsRestriction
+{
+    ULONG relop;
+    ULONG ulPropTag1;
+    ULONG ulPropTag2;
+} SComparePropsRestriction;
+
+typedef struct _SContentRestriction
+{
+    ULONG        ulFuzzyLevel;
+    ULONG        ulPropTag;
+    LPSPropValue lpProp;
+} SContentRestriction;
+
+typedef struct _SExistRestriction
+{
+    ULONG ulReserved1;
+    ULONG ulPropTag;
+    ULONG ulReserved2;
+} SExistRestriction;
+
+typedef struct _SNotRestriction
+{
+    ULONG          ulReserved;
+    LPSRestriction lpRes;
+} SNotRestriction;
+
+typedef struct _SOrRestriction
+{
+    ULONG          cRes;
+    LPSRestriction lpRes;
+} SOrRestriction;
+
+typedef struct _SPropertyRestriction
+{
+    ULONG        relop;
+    ULONG        ulPropTag;
+    LPSPropValue lpProp;
+} SPropertyRestriction;
+
+typedef struct _SSizeRestriction
+{
+    ULONG relop;
+    ULONG ulPropTag;
+    ULONG cb;
+} SSizeRestriction;
+
+typedef struct _SSubRestriction
+{
+    ULONG          ulSubObject;
+    LPSRestriction lpRes;
+} SSubRestriction;
+
+/* Restriction types */
+#define RES_AND            0U
+#define RES_OR             1U
+#define RES_NOT            2U
+#define RES_CONTENT        3U
+#define RES_PROPERTY       4U
+#define RES_COMPAREPROPS   5U
+#define RES_BITMASK        6U
+#define RES_SIZE           7U
+#define RES_EXIST          8U
+#define RES_SUBRESTRICTION 9U
+#define RES_COMMENT        10U
+
+typedef struct _SRestriction
+{
+    ULONG rt;
+    union
+    {
+        SAndRestriction          resAnd;
+        SBitMaskRestriction      resBitMask;
+        SCommentRestriction      resComment;
+        SComparePropsRestriction resCompareProps;
+        SContentRestriction      resContent;
+        SExistRestriction        resExist;
+        SNotRestriction          resNot;
+        SOrRestriction           resOr;
+        SPropertyRestriction     resProperty;
+        SSizeRestriction         resSize;
+        SSubRestriction          resSub;
+    } res;
+} SRestriction;
+
+/* Errors */
+typedef struct _MAPIERROR
+{
+    ULONG  ulVersion;       /* Mapi version */
+#if defined (UNICODE) || defined (__WINESRC__)
+    LPWSTR lpszError;       /* Error and component strings. These are Ascii */
+    LPWSTR lpszComponent;   /* unless the MAPI_UNICODE flag is passed in */
+#else
+    LPSTR  lpszError;
+    LPSTR  lpszComponent;
+#endif
+    ULONG  ulLowLevelError;
+    ULONG  ulContext;
+} MAPIERROR, *LPMAPIERROR;
+
+/* Sorting */
+#define TABLE_SORT_ASCEND  0U
+#define TABLE_SORT_DESCEND 1U
+#define TABLE_SORT_COMBINE 2U
+
+typedef struct _SSortOrder
+{
+    ULONG ulPropTag;
+    ULONG ulOrder;
+} SSortOrder, *LPSSortOrder;
+
+typedef struct _SSortOrderSet
+{
+    ULONG      cSorts;
+    ULONG      cCategories;
+    ULONG      cExpanded;
+    SSortOrder aSort[MAPI_DIM];
+} SSortOrderSet, * LPSSortOrderSet;
+
+#define MNID_ID     0
+#define MNID_STRING 1
+
+typedef struct _MAPINAMEID
+{
+    LPGUID lpguid;
+    ULONG ulKind;
+    union
+    {
+        LONG lID;
+        LPWSTR lpwstrName;
+    } Kind;
+} MAPINAMEID, *LPMAPINAMEID;
+
+/* Desired notification types (bitflags) */
+#define fnevCriticalError        ((ULONG)0x00000001)
+#define fnevNewMail              ((ULONG)0x00000002)
+#define fnevObjectCreated        ((ULONG)0x00000004)
+#define fnevObjectDeleted        ((ULONG)0x00000008)
+#define fnevObjectModified       ((ULONG)0x00000010)
+#define fnevObjectMoved          ((ULONG)0x00000020)
+#define fnevObjectCopied         ((ULONG)0x00000040)
+#define fnevSearchComplete       ((ULONG)0x00000080)
+#define fnevTableModified        ((ULONG)0x00000100)
+#define fnevStatusObjectModified ((ULONG)0x00000200)
+#define fnevReservedForMapi      ((ULONG)0x40000000)
+#define fnevExtended             ((ULONG)0x80000000)
+
+/* Type of notification event */
+#define TABLE_CHANGED       1U
+#define TABLE_ERROR         2U
+#define TABLE_ROW_ADDED     3U
+#define TABLE_ROW_DELETED   4U
+#define TABLE_ROW_MODIFIED  5U
+#define TABLE_SORT_DONE     6U
+#define TABLE_RESTRICT_DONE 7U
+#define TABLE_SETCOL_DONE   8U
+#define TABLE_RELOAD        9U
+
+/* fnevCriticalError notification */
+typedef struct _ERROR_NOTIFICATION
+{
+    ULONG       cbEntryID;
+    LPENTRYID   lpEntryID;
+    SCODE       scode;
+    ULONG       ulFlags;
+    LPMAPIERROR lpMAPIError;
+} ERROR_NOTIFICATION;
+
+/* fnevNewMail notification */
+typedef struct _NEWMAIL_NOTIFICATION
+{
+    ULONG     cbEntryID;
+    LPENTRYID lpEntryID;
+    ULONG     cbParentID;
+    LPENTRYID lpParentID;
+    ULONG     ulFlags;
+#if defined (UNICODE) || defined (__WINESRC__)
+    LPWSTR    lpszMessageClass;
+#else
+    LPSTR     lpszMessageClass;
+#endif
+    ULONG     ulMessageFlags;
+} NEWMAIL_NOTIFICATION;
+
+/* fnevObjectCreated/Deleted/Modified/Moved/Copied notification */
+typedef struct _OBJECT_NOTIFICATION
+{
+    ULONG           cbEntryID;
+    LPENTRYID       lpEntryID;
+    ULONG           ulObjType;
+    ULONG           cbParentID;
+    LPENTRYID       lpParentID;
+    ULONG           cbOldID;
+    LPENTRYID       lpOldID;
+    ULONG           cbOldParentID;
+    LPENTRYID       lpOldParentID;
+    LPSPropTagArray lpPropTagArray;
+} OBJECT_NOTIFICATION;
+
+/* fnevTableModified notification */
+typedef struct _TABLE_NOTIFICATION
+{
+    ULONG      ulTableEvent;
+    HRESULT    hResult;
+    SPropValue propIndex;
+    SPropValue propPrior;
+    SRow       row;
+    ULONG      ulPad;
+} TABLE_NOTIFICATION;
+
+/* fnevExtended notification */
+typedef struct _EXTENDED_NOTIFICATION
+{
+    ULONG  ulEvent;
+    ULONG  cb;
+    LPBYTE pbEventParameters;
+} EXTENDED_NOTIFICATION;
+
+/* fnevStatusObjectModified notification */
+typedef struct
+{
+    ULONG        cbEntryID;
+    LPENTRYID    lpEntryID;
+    ULONG        cValues;
+    LPSPropValue lpPropVals;
+} STATUS_OBJECT_NOTIFICATION;
+
+/* The notification structure passed to advise sinks */
+typedef struct _NOTIFICATION
+{
+    ULONG ulEventType;
+    ULONG ulAlignPad;
+    union
+    {
+        ERROR_NOTIFICATION         err;
+        NEWMAIL_NOTIFICATION       newmail;
+        OBJECT_NOTIFICATION        obj;
+        TABLE_NOTIFICATION         tab;
+        EXTENDED_NOTIFICATION      ext;
+        STATUS_OBJECT_NOTIFICATION statobj;
+    } info;
+} NOTIFICATION, *LPNOTIFICATION;
+
+typedef LONG (WINAPI NOTIFCALLBACK)(LPVOID,ULONG,LPNOTIFICATION);
+typedef NOTIFCALLBACK *LPNOTIFCALLBACK;
+
+/* IMAPIContainer::OpenEntry flags */
+#define MAPI_BEST_ACCESS    0x00000010
+
+/*****************************************************************************
+ * IMAPITable interface
+ *
+ * This is the read-only 'view' over an I(MAPI)TableData object.
+ */
+#define INTERFACE IMAPITable
+DECLARE_INTERFACE_(IMAPITable,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPITable methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppError) PURE;
+    STDMETHOD(Advise)(THIS_ ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;
+    STDMETHOD(Unadvise)(THIS_ ULONG ulCxn) PURE;
+    STDMETHOD(GetStatus)(THIS_ ULONG *lpStatus, ULONG *lpType) PURE;
+    STDMETHOD(SetColumns)(THIS_ LPSPropTagArray lpProps, ULONG ulFlags) PURE;
+    STDMETHOD(QueryColumns)(THIS_ ULONG ulFlags, LPSPropTagArray *lpCols) PURE;
+    STDMETHOD(GetRowCount)(THIS_ ULONG ulFlags, ULONG *lpCount) PURE;
+    STDMETHOD(SeekRow)(THIS_ BOOKMARK lpStart, LONG lRows, LONG *lpSeeked) PURE;
+    STDMETHOD(SeekRowApprox)(THIS_ ULONG ulNum, ULONG ulDenom) PURE;
+    STDMETHOD(QueryPosition)(THIS_ ULONG *lpRow, ULONG *lpNum, ULONG *lpDenom) PURE;
+    STDMETHOD(FindRow)(THIS_ LPSRestriction lpRestrict, BOOKMARK lpOrigin, ULONG ulFlags) PURE;
+    STDMETHOD(Restrict)(THIS_ LPSRestriction lpRestrict, ULONG ulFlags) PURE;
+    STDMETHOD(CreateBookmark)(THIS_ BOOKMARK *lppPos) PURE;
+    STDMETHOD(FreeBookmark)(THIS_ BOOKMARK lpPos) PURE;
+    STDMETHOD(SortTable)(THIS_ LPSSortOrderSet lpSortOpts, ULONG ulFlags) PURE;
+    STDMETHOD(QuerySortOrder)(THIS_ LPSSortOrderSet *lppSortOpts) PURE;
+    STDMETHOD(QueryRows)(THIS_ LONG lRows, ULONG ulFlags, LPSRowSet *lppRows) PURE;
+    STDMETHOD(Abort) (THIS) PURE;
+    STDMETHOD(ExpandRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulRows,
+                         ULONG ulFlags, LPSRowSet *lppRows, ULONG *lpMore) PURE;
+    STDMETHOD(CollapseRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulFlags, ULONG *lpRows) PURE;
+    STDMETHOD(WaitForCompletion)(THIS_ ULONG ulFlags, ULONG ulTime, ULONG *lpState) PURE;
+    STDMETHOD(GetCollapseState)(THIS_ ULONG ulFlags, ULONG cbKey, LPBYTE lpKey,
+                                ULONG *lpStateLen, LPBYTE *lpState) PURE;
+    STDMETHOD(SetCollapseState)(THIS_ ULONG ulFlags, ULONG ulLen,
+                                LPBYTE lpStart, BOOKMARK *lppWhere) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMAPITable_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPITable_AddRef(p)                     (p)->lpVtbl->AddRef(p)
+#define IMAPITable_Release(p)                    (p)->lpVtbl->Release(p)
+        /*** IMAPITable methods ***/
+#define IMAPITable_GetLastError(p,a,b,c)         (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPITable_Advise(p,a,b,c)               (p)->lpVtbl->Advise(p,a,b,c)
+#define IMAPITable_Unadvise(p,a)                 (p)->lpVtbl->Unadvise(p,a)
+#define IMAPITable_GetStatus(p,a,b)              (p)->lpVtbl->GetStatus(p,a,b)
+#define IMAPITable_SetColumns(p,a,b)             (p)->lpVtbl->SetColumns(p,a,b)
+#define IMAPITable_QueryColumns(p,a,b)           (p)->lpVtbl->QueryColumns(p,a,b)
+#define IMAPITable_GetRowCount(p,a,b)            (p)->lpVtbl->GetRowCount(p,a,b)
+#define IMAPITable_SeekRow(p,a,b)                (p)->lpVtbl->SeekRow(p,a,b)
+#define IMAPITable_SeekRowApprox(p,a,b)          (p)->lpVtbl->SeekRowApprox(p,a,b)
+#define IMAPITable_QueryPosition(p,a,b)          (p)->lpVtbl->QueryPosition(p,a,b)
+#define IMAPITable_FindRow(p,a,b,c)              (p)->lpVtbl->FindRow(p,a,b,c)
+#define IMAPITable_Restrict(p,a,b)               (p)->lpVtbl->Recstrict(p,a,b)
+#define IMAPITable_CreateBookmark(p,a)           (p)->lpVtbl->CreateBookmark(p,a)
+#define IMAPITable_FreeBookmark(p,a)             (p)->lpVtbl->FreeBookmark(p,a)
+#define IMAPITable_SortTable(p,a,b)              (p)->lpVtbl->SortTable(p,a,b)
+#define IMAPITable_QuerySortOrder(p,a)           (p)->lpVtbl->QuerySortOrder(p,a)
+#define IMAPITable_QueryRows(p,a,b,c)            (p)->lpVtbl->QueryRows(p,a,b,c)
+#define IMAPITable_Abort(p)                      (p)->lpVtbl->Abort(p)
+#define IMAPITable_ExpandRow(p,a,b,c,d,e,f)      (p)->lpVtbl->ExpandRow(p,a,b,c,d,e,f)
+#define IMAPITable_CollapseRow(p,a,b,c,d)        (p)->lpVtbl->CollapseRow(p,a,b,c,d)
+#define IMAPITable_WaitForCompletion(p,a,b,c)    (p)->lpVtbl->WaitForCompletion(p,a,b,c)
+#define IMAPITable_GetCollapseState(p,a,b,c,d,e) (p)->lpVtbl->GetCollapseState(p,a,b,c,d,e)
+#define IMAPITable_SetCollapseState(p,a,b,c,d)   (p)->lpVtbl->SetCollapseState(p,a,b,c,d)
+#endif
+
+typedef IMAPITable *LPMAPITABLE;
+
+/*****************************************************************************
+ * IMAPIAdviseSink interface
+ */
+#define INTERFACE IMAPIAdviseSink
+DECLARE_INTERFACE_(IMAPIAdviseSink,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIAdviseSink methods ***/
+    STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMAPIAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIAdviseSink_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IMAPIAdviseSink_Release(p)            (p)->lpVtbl->Release(p)
+        /*** IMAPIAdviseSink methods ***/
+#define IMAPIAdviseSink_OnNotify(p,a,b)       (p)->lpVtbl->OnNotify(p,a,b)
+#endif
+
+/*****************************************************************************
+ * IMAPIProp interface
+ */
+#define INTERFACE IMAPIProp
+DECLARE_INTERFACE_(IMAPIProp,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMAPIProp_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIProp_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IMAPIProp_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IMAPIProp_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPIProp_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
+#define IMAPIProp_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMAPIProp_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
+#define IMAPIProp_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMAPIProp_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMAPIProp_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMAPIProp_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMAPIProp_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMAPIProp_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMAPIProp_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+#endif
+
+typedef IMAPIProp *LPMAPIPROP;
+
+#define KEEP_OPEN_READONLY      (0x00000001U)
+#define KEEP_OPEN_READWRITE     (0x00000002U)
+#define FORCE_SAVE              (0x00000004U)
+
+/*****************************************************************************
+ * IMsgStore interface
+ */
+#define INTERFACE IMsgStore
+DECLARE_INTERFACE_(IMsgStore,IMAPIProp)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+    /*** IMsgStore methods ***/
+    STDMETHOD(Advise)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulEventMask, LPMAPIADVISESINK lpAdviseSink,
+                      ULONG * lpulConnection) PURE;
+    STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;
+    STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbEntryID1, LPENTRYID lpEntryID1, ULONG cbEntryID2, LPENTRYID lpEntryID2,
+                ULONG ulFlags, ULONG * lpulResult) PURE;
+    STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG *lpulObjType,
+                LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;
+    STDMETHOD(GetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG * lpcbEntryID, LPENTRYID *lppEntryID,
+                LPSTR *lppszExplicitClass) PURE;
+    STDMETHOD(GetReceiveFolderTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+    STDMETHOD(StoreLogoff)(THIS_ ULONG * lpulFlags) PURE;
+    STDMETHOD(AbortSubmit)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags) PURE;
+    STDMETHOD(GetOutgoingQueue)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+    STDMETHOD(SetLockState)(THIS_ LPMESSAGE lpMessage, ULONG ulLockState) PURE;
+    STDMETHOD(FinishedMsg)(THIS_ ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;
+    STDMETHOD(NotifyNewMail)(THIS_ LPNOTIFICATION lpNotification) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMsgStore_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMsgStore_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IMsgStore_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IMsgStore_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMsgStore_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
+#define IMsgStore_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMsgStore_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
+#define IMsgStore_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMsgStore_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMsgStore_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMsgStore_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMsgStore_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMsgStore_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMsgStore_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+        /*** IMsgStore methods ***/
+#define IMsgStore_Advise(p,a,b,c,d,e)            (p)->lpVtbl->Advise(p,a,b,c,d,e)
+#define IMsgStore_Unadvise(p,a)                  (p)->lpVtbl->Unadvise(p,a)
+#define IMsgStore_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)
+#define IMsgStore_OpenEntry(p,a,b,c,d,e,f)       (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMsgStore_SetReceiveFolder(p,a,b,c,d)    (p)->lpVtbl->SetReceiveFolder(p,a,b,c,d)
+#define IMsgStore_GetReceiveFolder(p,a,b,c,d,e)  (p)->lpVtbl->GetReceiveFolder(p,a,b,c,d,e)
+#define IMsgStore_GetReceiveFolderTable(p,a,b)   (p)->lpVtbl->GetReceiveFolderTable(p,a,b)
+#define IMsgStore_StoreLogoff(p,a)               (p)->lpVtbl->StoreLogoff(p,a)
+#define IMsgStore_AbortSubmit(p,a,b,c)           (p)->lpVtbl->AbortSubmit(p,a,b,c)
+#define IMsgStore_GetOutgoingQueue(p,a,b)        (p)->lpVtbl->GetOutgoingQueue(p,a,b)
+#define IMsgStore_SetLockState(p,a,b)            (p)->lpVtbl->SetLockState(p,a,b)
+#define IMsgStore_FinishedMsg(p,a,b,c)           (p)->lpVtbl->FinishedMsg(p,a,b,c)
+#define IMsgStore_NotifyNewMail(p,a)             (p)->lpVtbl->NotifyNewMail(p,a)
+
+#endif
+
+typedef IMsgStore *LPMDB;
+
+/*****************************************************************************
+ * IMAPIContainer interface
+ */
+#define INTERFACE IMAPIContainer
+DECLARE_INTERFACE_(IMAPIContainer,IMAPIProp)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+    /*** IMAPIContainer methods ***/
+    STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+    STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+    STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,
+                         ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;
+    STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;
+    STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,
+                                 ULONG * lpulSearchState) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMAPIContainer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIContainer_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IMAPIContainer_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IMAPIContainer_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPIContainer_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
+#define IMAPIContainer_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMAPIContainer_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
+#define IMAPIContainer_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMAPIContainer_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMAPIContainer_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMAPIContainer_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMAPIContainer_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMAPIContainer_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMAPIContainer_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+        /*** IMAPIContainer methods ***/
+#define IMAPIContainer_GetContentsTable(p,a,b)      (p)->lpVtbl->GetContentsTable(p,a,b)
+#define IMAPIContainer_GetHierarchyTable(p,a,b)     (p)->lpVtbl->GetHierarchyTable(p,a,b)
+#define IMAPIContainer_OpenEntry(p,a,b,c,d,e,f)     (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMAPIContainer_SetSearchCriteria(p,a,b,c)   (p)->lpVtbl->SetSearchCriteria(p,a,b,c)
+#define IMAPIContainer_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)
+
+#endif
+
+/*****************************************************************************
+ * IMAPIFolder interface
+ */
+#define INTERFACE IMAPIFolder
+DECLARE_INTERFACE_(IMAPIFolder,IMAPIContainer)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+    /*** IMAPIContainer methods ***/
+    STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+    STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+    STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,
+                         ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;
+    STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;
+    STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,
+                                 ULONG * lpulSearchState) PURE;
+    /*** IMAPIFolder methods ***/
+    STDMETHOD(CreateMessage)(THIS_ LPCIID lpInterface, ULONG ulFlags, LPMESSAGE *lppMessage) PURE;
+    STDMETHOD(CopyMessages)(THIS_ LPENTRYLIST lpMsgList, LPCIID lpInterface, LPVOID lpDestFolder, ULONG ulUIParam,
+                            LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+    STDMETHOD(DeleteMessages)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+    STDMETHOD(CreateFolder)(THIS_ ULONG ulFolderType, LPSTR lpszFolderName, LPSTR lpszFolderComment, LPCIID lpInterface,
+                            ULONG ulFlags, LPMAPIFOLDER lppFolder) PURE;
+    STDMETHOD(CopyFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, LPVOID lpDestFolder,
+                          LPSTR lpszNewFolderName, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+    STDMETHOD(DeleteFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulUIParam, LPMAPIPROGRESS lpProgress,
+                            ULONG ulFlags) PURE;
+    STDMETHOD(SetReadFlags)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+    STDMETHOD(GetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags, ULONG * lpulMessageStatus) PURE;
+    STDMETHOD(SetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulNewStatus,
+                                ULONG ulNewStatusMask, ULONG * lpulOldStatus) PURE;
+    STDMETHOD(SaveContentsSort)(THIS_ LPSSortOrderSet lpSortCriteria, ULONG ulFlags) PURE;
+    STDMETHOD(EmptyFolder) (THIS_ ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMAPIFolder_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIFolder_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IMAPIFolder_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IMAPIFolder_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPIFolder_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
+#define IMAPIFolder_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMAPIFolder_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
+#define IMAPIFolder_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMAPIFolder_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMAPIFolder_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMAPIFolder_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMAPIFolder_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMAPIFolder_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMAPIFolder_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+        /*** IMAPIContainer methods ***/
+#define IMAPIFolder_GetContentsTable(p,a,b)      (p)->lpVtbl->GetContentsTable(p,a,b)
+#define IMAPIFolder_GetHierarchyTable(p,a,b)     (p)->lpVtbl->GetHierarchyTable(p,a,b)
+#define IMAPIFolder_OpenEntry(p,a,b,c,d,e,f)     (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMAPIFolder_SetSearchCriteria(p,a,b,c)   (p)->lpVtbl->SetSearchCriteria(p,a,b,c)
+#define IMAPIFolder_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)
+        /*** IMAPIFolder methods ***/
+#define IMAPIFolder_CreateMessage(p,a,b,c)        (p)->lpVtbl->CreateMessage(p,a,b,c)
+#define IMAPIFolder_CopyMessages(p,a,b,c,d,e,f)   (p)->lpVtbl->CopyMessages(p,a,b,c,d,e,f)
+#define IMAPIFolder_DeleteMessages(p,a,b,c,d)     (p)->lpVtbl->DeleteMessages(p,a,b,c,d)
+#define IMAPIFolder_CreateFolder(p,a,b,c,d,e,f)   (p)->lpVtbl->CreateFolder(p,a,b,c,d,e,f)
+#define IMAPIFolder_CopyFolder(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CopyFolder(p,a,b,c,d,e,f,g,h)
+#define IMAPIFolder_DeleteFolder(p,a,b,c,d,e)     (p)->lpVtbl->CreateFolder(p,a,b,c,d,e)
+#define IMAPIFolder_SetReadFlags(p,a,b,c,d)       (p)->lpVtbl->SetReadFlags(p,a,b,c,d)
+#define IMAPIFolder_GetMessageStatus(p,a,b,c,d)   (p)->lpVtbl->GetMessageStatus(p,a,b,c,d)
+#define IMAPIFolder_SetMessageStatus(p,a,b,c,d,e) (p)->lpVtbl->SetMessageStatus(p,a,b,c,d,e)
+#define IMAPIFolder_SaveContentsSort(p,a,b)       (p)->lpVtbl->SaveContentsSort(p,a,b)
+#define IMAPIFolder_EmptyFolder(p,a,b,c)          (p)->lpVtbl->EmptyFolder(p,a,b,c)
+
+#endif
+
+typedef struct
+{
+    ULONG cb;
+    BYTE  abEntry[MAPI_DIM];
+} FLATENTRY, *LPFLATENTRY;
+
+typedef struct
+{
+    ULONG cEntries;
+    ULONG cbEntries;
+    BYTE  abEntries[MAPI_DIM];
+} FLATENTRYLIST, *LPFLATENTRYLIST;
+
+typedef struct
+{
+    ULONG cb;
+    BYTE  ab[MAPI_DIM];
+} MTSID, *LPMTSID;
+
+typedef struct
+{
+    ULONG cMTSIDs;
+    ULONG cbMTSIDs;
+    BYTE  abMTSIDs[MAPI_DIM];
+} FLATMTSIDLIST, *LPFLATMTSIDLIST;
+
+typedef struct _ADRENTRY
+{
+    ULONG        ulReserved1;
+    ULONG        cValues;
+    LPSPropValue rgPropVals;
+} ADRENTRY, *LPADRENTRY;
+
+typedef struct _ADRLIST
+{
+    ULONG    cEntries;
+    ADRENTRY aEntries[MAPI_DIM];
+} ADRLIST, *LPADRLIST;
+
+/*****************************************************************************
+ * IMessage interface
+ */
+#define INTERFACE IMessage
+DECLARE_INTERFACE_(IMessage,IMAPIProp)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+    /*** IMessage methods ***/
+    STDMETHOD(GetAttachmentTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+    STDMETHOD(OpenAttach)(THIS_ ULONG ulAttachmentNum, LPCIID lpInterface, ULONG ulFlags, LPATTACH *lppAttach) PURE;
+    STDMETHOD(CreateAttach)(THIS_ LPCIID lpInterface, ULONG ulFlags, ULONG *lpulAttachmentNum, LPATTACH *lppAttach) PURE;
+    STDMETHOD(DeleteAttach)(THIS_ ULONG ulAttachmentNum, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+    STDMETHOD(GetRecipientTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+    STDMETHOD(ModifyRecipients)(THIS_ ULONG ulFlags, LPADRLIST lpMods) PURE;
+    STDMETHOD(SubmitMessage)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(SetReadFlag)(THIS_ ULONG ulFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMessage_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMessage_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IMessage_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IMessage_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMessage_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
+#define IMessage_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMessage_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
+#define IMessage_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMessage_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMessage_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMessage_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMessage_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMessage_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMessage_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+        /*** IMessage methods ***/
+#define IMessage_GetAttachmentTable(p,a,b)    (p)->lpVtbl->GetAttachmentTable(p,a,b)
+#define IMessage_OpenAttach(p,a,b,c,d)        (p)->lpVtbl->OpenAttach(p,a,b,c,d)
+#define IMessage_CreateAttach(p,a,b,c,d)      (p)->lpVtbl->CreateAttach(p,a,b,c,d)
+#define IMessage_DeleteAttach(p,a,b,c,d)      (p)->lpVtbl->DeleteAttach(p,a,b,c,d)
+#define IMessage_GetRecipientTable(p,a,b)     (p)->lpVtbl->GetRecipientTable(p,a,b)
+#define IMessage_ModifyRecipients(p,a,b)      (p)->lpVtbl->ModifyRecipients(p,a,b)
+#define IMessage_SubmitMessage(p,a)           (p)->lpVtbl->SubmitMessage(p,a)
+#define IMessage_SetReadFlag(p,a)             (p)->lpVtbl->SetReadFlag(p,a)
+
+#endif
+
+/* Message flags (PR_MESSAGE_FLAGS) */
+
+#define MSGFLAG_READ         0x00000001U
+#define MSGFLAG_UNMODIFIED   0x00000002U
+#define MSGFLAG_SUBMIT       0x00000004U
+#define MSGFLAG_UNSENT       0x00000008U
+#define MSGFLAG_HASATTACH    0x00000010U
+#define MSGFLAG_FROMME       0x00000020U
+
+/*****************************************************************************
+ * IAttach interface
+ */
+#define INTERFACE IAttach
+DECLARE_INTERFACE_(IAttach,IMAPIProp)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IAttach_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAttach_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IAttach_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IAttach_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IAttach_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)
+#define IAttach_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IAttach_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)
+#define IAttach_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IAttach_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)
+#define IAttach_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)
+#define IAttach_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IAttach_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IAttach_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IAttach_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+#endif
+
+/* Attachment flags */
+
+#define NO_ATTACHMENT        0x00000000U
+#define ATTACH_BY_VALUE      0x00000001U
+
+#endif /*MAPIDEFS_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h
new file mode 100644
index 0000000..058be52
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 1998 Justin Bradford
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIFORM_H
+#define MAPIFORM_H
+
+#include <mapidefs.h>
+#include <mapicode.h>
+#include <mapiguid.h>
+#include <mapitags.h>
+
+
+typedef ULONG HFRMREG;
+#define HFRMREG_DEFAULT            0
+#define HFRMREG_LOCAL              1
+#define HFRMREG_PERSONAL           2
+#define HFRMREG_FOLDER             3
+
+typedef const char **LPPCSTR;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT     WINAPI MAPIOpenLocalFormContainer(LPVOID*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIFORM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h
new file mode 100644
index 0000000..9efb543
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIGUID_H
+#define MAPIGUID_H
+
+#define DEFINE_MAPIGUID(n,l,w1,w2) DEFINE_OLEGUID(n,l,w1,w2)
+
+DEFINE_MAPIGUID(IID_IABContainer,0x2030D,0,0);
+DEFINE_MAPIGUID(IID_IABLogon,0x20314,0,0);
+DEFINE_MAPIGUID(IID_IABProvider,0x20311,0,0);
+DEFINE_MAPIGUID(IID_IAddrBook,0x20309,0,0);
+DEFINE_MAPIGUID(IID_IAttachment,0x20308,0,0);
+DEFINE_MAPIGUID(IID_IDistList,0x2030E,0,0);
+DEFINE_MAPIGUID(IID_IEnumMAPIFormProp,0x20323,0,0);
+DEFINE_MAPIGUID(IID_IMailUser,0x2030A,0,0);
+DEFINE_MAPIGUID(IID_IMAPIAdviseSink,0x20302,0,0);
+DEFINE_MAPIGUID(IID_IMAPIContainer,0x2030B,0,0);
+DEFINE_MAPIGUID(IID_IMAPIControl,0x2031B,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFolder,0x2030C,0,0);
+DEFINE_MAPIGUID(IID_IMAPIForm,0x20327,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormAdviseSink,0x2032F,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormContainer,0x2032E,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormFactory,0x20350,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormInfo,0x20324,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormMgr,0x20322,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormProp,0x2032D,0,0);
+DEFINE_MAPIGUID(IID_IMAPIMessageSite,0x20370,0,0);
+DEFINE_MAPIGUID(IID_IMAPIProgress,0x2031F,0,0);
+DEFINE_MAPIGUID(IID_IMAPIProp,0x20303,0,0);
+DEFINE_MAPIGUID(IID_IMAPIPropData,0x2031A,0,0);
+DEFINE_MAPIGUID(IID_IMAPISession,0x20300,0,0);
+DEFINE_MAPIGUID(IID_IMAPISpoolerInit,0x20317,0,0);
+DEFINE_MAPIGUID(IID_IMAPISpoolerService,0x2031E,0,0);
+DEFINE_MAPIGUID(IID_IMAPISpoolerSession,0x20318,0,0);
+DEFINE_MAPIGUID(IID_IMAPIStatus,0x20305,0,0);
+DEFINE_MAPIGUID(IID_IMAPISup,0x2030F,0,0);
+DEFINE_MAPIGUID(IID_IMAPITable,0x20301,0,0);
+DEFINE_MAPIGUID(IID_IMAPITableData,0x20316,0,0);
+DEFINE_MAPIGUID(IID_IMAPIViewAdviseSink,0x2032B,0,0);
+DEFINE_MAPIGUID(IID_IMAPIViewContext,0x20321,0,0);
+DEFINE_MAPIGUID(IID_IMessage,0x20307,0,0);
+DEFINE_MAPIGUID(IID_IMsgServiceAdmin,0x2031D,0,0);
+DEFINE_MAPIGUID(IID_IMsgStore,0x20306,0,0);
+DEFINE_MAPIGUID(IID_IMSLogon,0x20313,0,0);
+DEFINE_MAPIGUID(IID_IMSProvider,0x20310,0,0);
+DEFINE_MAPIGUID(IID_IPersistMessage,0x2032A,0,0);
+DEFINE_MAPIGUID(IID_IProfAdmin,0x2031C,0,0);
+DEFINE_MAPIGUID(IID_IProfSect,0x20304,0,0);
+DEFINE_MAPIGUID(IID_IProviderAdmin,0x20325,0,0);
+DEFINE_MAPIGUID(IID_ISpoolerHook,0x20320,0,0);
+DEFINE_MAPIGUID(IID_IStreamDocfile,0x2032C,0,0);
+DEFINE_MAPIGUID(IID_IStreamTnef,0x20330,0,0);
+DEFINE_MAPIGUID(IID_ITNEF,0x20319,0,0);
+DEFINE_MAPIGUID(IID_IXPLogon,0x20315,0,0);
+DEFINE_MAPIGUID(IID_IXPProvider,0x20312,0,0);
+DEFINE_MAPIGUID(MUID_PROFILE_INSTANCE,0x20385,0,0);
+DEFINE_MAPIGUID(PS_MAPI,0x20328,0,0);
+DEFINE_MAPIGUID(PS_PUBLIC_STRINGS,0x20329,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_ADDRTYPE,0x20381,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_DISPLAY_NAME,0x20382,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_EMAIL_ADDRESSES,0x20380,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_ENTRYID,0x20383,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_SEARCH_KEY,0x20384,0,0);
+
+#endif/* MAPIGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h
new file mode 100644
index 0000000..1851327
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h
@@ -0,0 +1,824 @@
+/*
+ * MAPI property tag declarations
+ *
+ * Copyright 2004 Jon Griffiths
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPITAGS_H
+#define MAPITAGS_H
+
+#define FIsTransmittable(t) (PROP_ID(t) < 0x0E00 || PROP_ID(t) >= 0x8000 || \
+ (PROP_ID(t) >= 0x1000 && PROP_ID(t) < 0x6000) || \
+ (PROP_ID(t) >= 0x6800 && PROP_ID(t) < 0x7C00))
+
+#define PR_ACKNOWLEDGEMENT_MODE PROP_TAG(PT_I4,0x01)
+#define PR_ALTERNATE_RECIPIENT_ALLOWED PROP_TAG(PT_BOOLEAN,0x02)
+#define PR_AUTHORIZING_USERS PROP_TAG(PT_BINARY,0x03)
+/* Comment on an automatically forwarded message */
+#define PR_AUTO_FORWARD_COMMENT_W PROP_TAG(PT_UNICODE,0x04)
+#define PR_AUTO_FORWARD_COMMENT_A PROP_TAG(PT_STRING8,0x04)
+#define PR_AUTO_FORWARD_COMMENT   WINELIB_NAME_AW(PR_AUTO_FORWARD_COMMENT_)
+/* Whether a message has been automatically forwarded */
+#define PR_AUTO_FORWARDED PROP_TAG(PT_BOOLEAN,0x05)
+#define PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID PROP_TAG(PT_BINARY,0x06)
+#define PR_CONTENT_CORRELATOR PROP_TAG(PT_BINARY,0x07)
+#define PR_CONTENT_IDENTIFIER_W PROP_TAG(PT_UNICODE,0x08)
+#define PR_CONTENT_IDENTIFIER_A PROP_TAG(PT_STRING8,0x08)
+#define PR_CONTENT_IDENTIFIER   WINELIB_NAME_AW(PR_CONTENT_IDENTIFIER_)
+/* MIME content length */
+#define PR_CONTENT_LENGTH PROP_TAG(PT_I4,0x09)
+#define PR_CONTENT_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0A)
+#define PR_CONVERSATION_KEY PROP_TAG(PT_BINARY,0x0B)
+#define PR_CONVERSION_EITS PROP_TAG(PT_BINARY,0x0C)
+#define PR_CONVERSION_WITH_LOSS_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0D)
+#define PR_CONVERTED_EITS PROP_TAG(PT_BINARY,0x0E)
+/* Time to deliver for delayed delivery messages */
+#define PR_DEFERRED_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0F)
+#define PR_DELIVER_TIME PROP_TAG(PT_SYSTIME,0x10)
+/* Reason a message was discarded */
+#define PR_DISCARD_REASON PROP_TAG(PT_I4,0x11)
+#define PR_DISCLOSURE_OF_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x12)
+#define PR_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x13)
+#define PR_DL_EXPANSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x14)
+#define PR_EXPIRY_TIME PROP_TAG(PT_SYSTIME,0x15)
+#define PR_IMPLICIT_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x16)
+/* Message importance */
+#define PR_IMPORTANCE PROP_TAG(PT_I4,0x17)
+#define PR_IPM_ID PROP_TAG(PT_BINARY,0x18)
+#define PR_LATEST_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x19)
+#define PR_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x1A)
+#define PR_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x1A)
+#define PR_MESSAGE_CLASS   WINELIB_NAME_AW(PR_MESSAGE_CLASS_)
+#define PR_MESSAGE_DELIVERY_ID PROP_TAG(PT_BINARY,0x1B)
+#define PR_MESSAGE_SECURITY_LABEL PROP_TAG(PT_BINARY,0x1E)
+#define PR_OBSOLETED_IPMS PROP_TAG(PT_BINARY,0x1F)
+/* Person a message was originally for */
+#define PR_ORIGINALLY_INTENDED_RECIPIENT_NAME PROP_TAG(PT_BINARY,0x20)
+#define PR_ORIGINAL_EITS PROP_TAG(PT_BINARY,0x21)
+#define PR_ORIGINATOR_CERTIFICATE PROP_TAG(PT_BINARY,0x22)
+#define PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x23)
+/* Address of the message sender */
+#define PR_ORIGINATOR_RETURN_ADDRESS PROP_TAG(PT_BINARY,0x24)
+#define PR_PARENT_KEY PROP_TAG(PT_BINARY,0x25)
+#define PR_PRIORITY PROP_TAG(PT_I4,0x26)
+#define PR_ORIGIN_CHECK PROP_TAG(PT_BINARY,0x27)
+#define PR_PROOF_OF_SUBMISSION_REQUESTED PROP_TAG(PT_BOOLEAN,0x28)
+/* Whether a read receipt is desired */
+#define PR_READ_RECEIPT_REQUESTED PROP_TAG(PT_BOOLEAN,0x29)
+/* Time a message was received */
+#define PR_RECEIPT_TIME PROP_TAG(PT_SYSTIME,0x2A)
+#define PR_RECIPIENT_REASSIGNMENT_PROHIBITED PROP_TAG(PT_BOOLEAN,0x2B)
+#define PR_REDIRECTION_HISTORY PROP_TAG(PT_BINARY,0x2C)
+#define PR_RELATED_IPMS PROP_TAG(PT_BINARY,0x2D)
+/* Sensitivity of the original message */
+#define PR_ORIGINAL_SENSITIVITY PROP_TAG(PT_I4,0x2E)
+#define PR_LANGUAGES_W PROP_TAG(PT_UNICODE,0x2F)
+#define PR_LANGUAGES_A PROP_TAG(PT_STRING8,0x2F)
+#define PR_LANGUAGES   WINELIB_NAME_AW(PR_LANGUAGES_)
+#define PR_REPLY_TIME PROP_TAG(PT_SYSTIME,0x30)
+#define PR_REPORT_TAG PROP_TAG(PT_BINARY,0x31)
+#define PR_REPORT_TIME PROP_TAG(PT_SYSTIME,0x32)
+#define PR_RETURNED_IPM PROP_TAG(PT_BOOLEAN,0x33)
+#define PR_SECURITY PROP_TAG(PT_I4,0x34)
+#define PR_INCOMPLETE_COPY PROP_TAG(PT_BOOLEAN,0x35)
+#define PR_SENSITIVITY PROP_TAG(PT_I4,0x36)
+/* The message subject */
+#define PR_SUBJECT_W PROP_TAG(PT_UNICODE,0x37)
+#define PR_SUBJECT_A PROP_TAG(PT_STRING8,0x37)
+#define PR_SUBJECT   WINELIB_NAME_AW(PR_SUBJECT_)
+#define PR_SUBJECT_IPM PROP_TAG(PT_BINARY,0x38)
+#define PR_CLIENT_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x39)
+#define PR_REPORT_NAME_W PROP_TAG(PT_UNICODE,0x3A)
+#define PR_REPORT_NAME_A PROP_TAG(PT_STRING8,0x3A)
+#define PR_REPORT_NAME   WINELIB_NAME_AW(PR_REPORT_NAME_)
+#define PR_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x3B)
+#define PR_X400_CONTENT_TYPE PROP_TAG(PT_BINARY,0x3C)
+#define PR_SUBJECT_PREFIX_W PROP_TAG(PT_UNICODE,0x3D)
+#define PR_SUBJECT_PREFIX_A PROP_TAG(PT_STRING8,0x3D)
+#define PR_SUBJECT_PREFIX   WINELIB_NAME_AW(PR_SUBJECT_PREFIX_)
+#define PR_NON_RECEIPT_REASON PROP_TAG(PT_I4,0x3E)
+#define PR_RECEIVED_BY_ENTRYID PROP_TAG(PT_BINARY,0x3F)
+/* Received by: entry */
+#define PR_RECEIVED_BY_NAME_W PROP_TAG(PT_UNICODE,0x40)
+#define PR_RECEIVED_BY_NAME_A PROP_TAG(PT_STRING8,0x40)
+#define PR_RECEIVED_BY_NAME   WINELIB_NAME_AW(PR_RECEIVED_BY_NAME_)
+#define PR_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x41)
+#define PR_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x42)
+#define PR_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x42)
+#define PR_SENT_REPRESENTING_NAME   WINELIB_NAME_AW(PR_SENT_REPRESENTING_NAME_)
+#define PR_RCVD_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x43)
+#define PR_RCVD_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x44)
+#define PR_RCVD_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x44)
+#define PR_RCVD_REPRESENTING_NAME   WINELIB_NAME_AW(PR_RCVD_REPRESENTING_NAME_)
+#define PR_REPORT_ENTRYID PROP_TAG(PT_BINARY,0x45)
+#define PR_READ_RECEIPT_ENTRYID PROP_TAG(PT_BINARY,0x46)
+#define PR_MESSAGE_SUBMISSION_ID PROP_TAG(PT_BINARY,0x47)
+#define PR_PROVIDER_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x48)
+/* Subject of the original message */
+#define PR_ORIGINAL_SUBJECT_W PROP_TAG(PT_UNICODE,0x49)
+#define PR_ORIGINAL_SUBJECT_A PROP_TAG(PT_STRING8,0x49)
+#define PR_ORIGINAL_SUBJECT   WINELIB_NAME_AW(PR_ORIGINAL_SUBJECT_)
+#define PR_DISC_VAL PROP_TAG(PT_BOOLEAN,0x4A)
+#define PR_ORIG_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x4B)
+#define PR_ORIG_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x4B)
+#define PR_ORIG_MESSAGE_CLASS   WINELIB_NAME_AW(PR_ORIG_MESSAGE_CLASS_)
+#define PR_ORIGINAL_AUTHOR_ENTRYID PROP_TAG(PT_BINARY,0x4C)
+/* Author of the original message */
+#define PR_ORIGINAL_AUTHOR_NAME_W PROP_TAG(PT_UNICODE,0x4D)
+#define PR_ORIGINAL_AUTHOR_NAME_A PROP_TAG(PT_STRING8,0x4D)
+#define PR_ORIGINAL_AUTHOR_NAME   WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_NAME_)
+/* Time the original message was submitted */
+#define PR_ORIGINAL_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x4E)
+#define PR_REPLY_RECIPIENT_ENTRIES PROP_TAG(PT_BINARY,0x4F)
+#define PR_REPLY_RECIPIENT_NAMES_W PROP_TAG(PT_UNICODE,0x50)
+#define PR_REPLY_RECIPIENT_NAMES_A PROP_TAG(PT_STRING8,0x50)
+#define PR_REPLY_RECIPIENT_NAMES   WINELIB_NAME_AW(PR_REPLY_RECIPIENT_NAMES_)
+#define PR_RECEIVED_BY_SEARCH_KEY PROP_TAG(PT_BINARY,0x51)
+#define PR_RCVD_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x52)
+#define PR_READ_RECEIPT_SEARCH_KEY PROP_TAG(PT_BINARY,0x53)
+#define PR_REPORT_SEARCH_KEY PROP_TAG(PT_BINARY,0x54)
+#define PR_ORIGINAL_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x55)
+#define PR_ORIGINAL_AUTHOR_SEARCH_KEY PROP_TAG(PT_BINARY,0x56)
+#define PR_MESSAGE_TO_ME PROP_TAG(PT_BOOLEAN,0x57)
+#define PR_MESSAGE_CC_ME PROP_TAG(PT_BOOLEAN,0x58)
+#define PR_MESSAGE_RECIP_ME PROP_TAG(PT_BOOLEAN,0x59)
+/* Sender of the original message */
+#define PR_ORIGINAL_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x5A)
+#define PR_ORIGINAL_SENDER_NAME_A PROP_TAG(PT_STRING8,0x5A)
+#define PR_ORIGINAL_SENDER_NAME   WINELIB_NAME_AW(PR_ORIGINAL_SENDER_NAME_)
+#define PR_ORIGINAL_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x5B)
+#define PR_ORIGINAL_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x5C)
+#define PR_ORIGINAL_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x5D)
+#define PR_ORIGINAL_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x5D)
+#define PR_ORIGINAL_SENT_REPRESENTING_NAME   WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_NAME_)
+#define PR_ORIGINAL_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x5E)
+#define PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x5F)
+#define PR_START_DATE PROP_TAG(PT_SYSTIME,0x60)
+#define PR_END_DATE PROP_TAG(PT_SYSTIME,0x61)
+#define PR_OWNER_APPT_ID PROP_TAG(PT_I4,0x62)
+/* Whether a response to the message is desired */
+#define PR_RESPONSE_REQUESTED PROP_TAG(PT_BOOLEAN,0x63)
+#define PR_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x64)
+#define PR_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x64)
+#define PR_SENT_REPRESENTING_ADDRTYPE   WINELIB_NAME_AW(PR_SENT_REPRESENTING_ADDRTYPE_)
+#define PR_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x65)
+#define PR_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x65)
+#define PR_SENT_REPRESENTING_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_SENT_REPRESENTING_EMAIL_ADDRESS_)
+#define PR_ORIGINAL_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x66)
+#define PR_ORIGINAL_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x66)
+#define PR_ORIGINAL_SENDER_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINAL_SENDER_ADDRTYPE_)
+/* Email of the original message sender */
+#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x67)
+#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x67)
+#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINAL_SENDER_EMAIL_ADDRESS_)
+#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x68)
+#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x68)
+#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_)
+#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x69)
+#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x69)
+#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_)
+#define PR_CONVERSATION_TOPIC_W PROP_TAG(PT_UNICODE,0x70)
+#define PR_CONVERSATION_TOPIC_A PROP_TAG(PT_STRING8,0x70)
+#define PR_CONVERSATION_TOPIC   WINELIB_NAME_AW(PR_CONVERSATION_TOPIC_)
+#define PR_CONVERSATION_INDEX PROP_TAG(PT_BINARY,0x71)
+#define PR_ORIGINAL_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x72)
+#define PR_ORIGINAL_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x72)
+#define PR_ORIGINAL_DISPLAY_BCC   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_BCC_)
+#define PR_ORIGINAL_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x73)
+#define PR_ORIGINAL_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x73)
+#define PR_ORIGINAL_DISPLAY_CC   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_CC_)
+#define PR_ORIGINAL_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x74)
+#define PR_ORIGINAL_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x74)
+#define PR_ORIGINAL_DISPLAY_TO   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_TO_)
+#define PR_RECEIVED_BY_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x75)
+#define PR_RECEIVED_BY_ADDRTYPE_A PROP_TAG(PT_STRING8,0x75)
+#define PR_RECEIVED_BY_ADDRTYPE   WINELIB_NAME_AW(PR_RECEIVED_BY_ADDRTYPE_)
+#define PR_RECEIVED_BY_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x76)
+#define PR_RECEIVED_BY_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x76)
+#define PR_RECEIVED_BY_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_RECEIVED_BY_EMAIL_ADDRESS_)
+#define PR_RCVD_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x77)
+#define PR_RCVD_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x77)
+#define PR_RCVD_REPRESENTING_ADDRTYPE   WINELIB_NAME_AW(PR_RCVD_REPRESENTING_ADDRTYPE_)
+#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x78)
+#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x78)
+#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_RCVD_REPRESENTING_EMAIL_ADDRESS_)
+#define PR_ORIGINAL_AUTHOR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x79)
+#define PR_ORIGINAL_AUTHOR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x79)
+#define PR_ORIGINAL_AUTHOR_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_ADDRTYPE_)
+#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7A)
+#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7A)
+#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_)
+#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x7B)
+#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_A PROP_TAG(PT_STRING8,0x7B)
+#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_)
+#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7C)
+#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7C)
+#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_)
+#define PR_TRANSPORT_MESSAGE_HEADERS_W PROP_TAG(PT_UNICODE,0x7D)
+#define PR_TRANSPORT_MESSAGE_HEADERS_A PROP_TAG(PT_STRING8,0x7D)
+#define PR_TRANSPORT_MESSAGE_HEADERS   WINELIB_NAME_AW(PR_TRANSPORT_MESSAGE_HEADERS_)
+#define PR_DELEGATION PROP_TAG(PT_BINARY,0x7E)
+#define PR_TNEF_CORRELATION_KEY PROP_TAG(PT_BINARY,0x7F)
+#define PR_BODY_W PROP_TAG(PT_UNICODE,0x1000)
+#define PR_BODY_A PROP_TAG(PT_STRING8,0x1000)
+#define PR_BODY   WINELIB_NAME_AW(PR_BODY_)
+#define PR_REPORT_TEXT_W PROP_TAG(PT_UNICODE,0x1001)
+#define PR_REPORT_TEXT_A PROP_TAG(PT_STRING8,0x1001)
+#define PR_REPORT_TEXT   WINELIB_NAME_AW(PR_REPORT_TEXT_)
+#define PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x1002)
+#define PR_REPORTING_DL_NAME PROP_TAG(PT_BINARY,0x1003)
+#define PR_REPORTING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x1004)
+#define PR_RTF_SYNC_BODY_CRC PROP_TAG(PT_I4,0x1006)
+#define PR_RTF_SYNC_BODY_COUNT PROP_TAG(PT_I4,0x1007)
+#define PR_RTF_SYNC_BODY_TAG_W PROP_TAG(PT_UNICODE,0x1008)
+#define PR_RTF_SYNC_BODY_TAG_A PROP_TAG(PT_STRING8,0x1008)
+#define PR_RTF_SYNC_BODY_TAG   WINELIB_NAME_AW(PR_RTF_SYNC_BODY_TAG_)
+#define PR_RTF_COMPRESSED PROP_TAG(PT_BINARY,0x1009)
+#define PR_RTF_SYNC_PREFIX_COUNT PROP_TAG(PT_I4,0x1010)
+#define PR_RTF_SYNC_TRAILING_COUNT PROP_TAG(PT_I4,0x1011)
+#define PR_ORIGINALLY_INTENDED_RECIP_ENTRYID PROP_TAG(PT_BINARY,0x1012)
+#define PR_CONTENT_INTEGRITY_CHECK PROP_TAG(PT_BINARY,0x0C00)
+#define PR_EXPLICIT_CONVERSION PROP_TAG(PT_I4,0x0C01)
+#define PR_IPM_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C02)
+#define PR_MESSAGE_TOKEN PROP_TAG(PT_BINARY,0x0C03)
+#define PR_NDR_REASON_CODE PROP_TAG(PT_I4,0x0C04)
+#define PR_NDR_DIAG_CODE PROP_TAG(PT_I4,0x0C05)
+#define PR_NON_RECEIPT_NOTIFICATION_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C06)
+#define PR_DELIVERY_POINT PROP_TAG(PT_I4,0x0C07)
+#define PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C08)
+#define PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x0C09)
+#define PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY PROP_TAG(PT_BOOLEAN,0x0C0A)
+#define PR_PHYSICAL_DELIVERY_MODE PROP_TAG(PT_I4,0x0C0B)
+#define PR_PHYSICAL_DELIVERY_REPORT_REQUEST PROP_TAG(PT_I4,0x0C0C)
+#define PR_PHYSICAL_FORWARDING_ADDRESS PROP_TAG(PT_BINARY,0x0C0D)
+#define PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C0E)
+#define PR_PHYSICAL_FORWARDING_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0C0F)
+#define PR_PHYSICAL_RENDITION_ATTRIBUTES PROP_TAG(PT_BINARY,0x0C10)
+#define PR_PROOF_OF_DELIVERY PROP_TAG(PT_BINARY,0x0C11)
+#define PR_PROOF_OF_DELIVERY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C12)
+#define PR_RECIPIENT_CERTIFICATE PROP_TAG(PT_BINARY,0x0C13)
+#define PR_RECIPIENT_NUMBER_FOR_ADVICE_W PROP_TAG(PT_UNICODE,0x0C14)
+#define PR_RECIPIENT_NUMBER_FOR_ADVICE_A PROP_TAG(PT_STRING8,0x0C14)
+#define PR_RECIPIENT_NUMBER_FOR_ADVICE   WINELIB_NAME_AW(PR_RECIPIENT_NUMBER_FOR_ADVICE_)
+#define PR_RECIPIENT_TYPE PROP_TAG(PT_I4,0x0C15)
+#define PR_REGISTERED_MAIL_TYPE PROP_TAG(PT_I4,0x0C16)
+#define PR_REPLY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C17)
+#define PR_REQUESTED_DELIVERY_METHOD PROP_TAG(PT_I4,0x0C18)
+#define PR_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x0C19)
+#define PR_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x0C1A)
+#define PR_SENDER_NAME_A PROP_TAG(PT_STRING8,0x0C1A)
+#define PR_SENDER_NAME   WINELIB_NAME_AW(PR_SENDER_NAME_)
+#define PR_SUPPLEMENTARY_INFO_W PROP_TAG(PT_UNICODE,0x0C1B)
+#define PR_SUPPLEMENTARY_INFO_A PROP_TAG(PT_STRING8,0x0C1B)
+#define PR_SUPPLEMENTARY_INFO   WINELIB_NAME_AW(PR_SUPPLEMENTARY_INFO_)
+#define PR_TYPE_OF_MTS_USER PROP_TAG(PT_I4,0x0C1C)
+#define PR_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x0C1D)
+#define PR_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x0C1E)
+#define PR_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x0C1E)
+#define PR_SENDER_ADDRTYPE   WINELIB_NAME_AW(PR_SENDER_ADDRTYPE_)
+#define PR_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x0C1F)
+#define PR_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x0C1F)
+#define PR_SENDER_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_SENDER_EMAIL_ADDRESS_)
+#define PR_CURRENT_VERSION PROP_TAG(PT_I8,0x0E00)
+#define PR_DELETE_AFTER_SUBMIT PROP_TAG(PT_BOOLEAN,0x0E01)
+#define PR_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x0E02)
+#define PR_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x0E02)
+#define PR_DISPLAY_BCC   WINELIB_NAME_AW(PR_DISPLAY_BCC_)
+#define PR_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x0E03)
+#define PR_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x0E03)
+#define PR_DISPLAY_CC   WINELIB_NAME_AW(PR_DISPLAY_CC_)
+#define PR_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x0E04)
+#define PR_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x0E04)
+#define PR_DISPLAY_TO   WINELIB_NAME_AW(PR_DISPLAY_TO_)
+#define PR_PARENT_DISPLAY_W PROP_TAG(PT_UNICODE,0x0E05)
+#define PR_PARENT_DISPLAY_A PROP_TAG(PT_STRING8,0x0E05)
+#define PR_PARENT_DISPLAY   WINELIB_NAME_AW(PR_PARENT_DISPLAY_)
+#define PR_MESSAGE_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0E06)
+#define PR_MESSAGE_FLAGS PROP_TAG(PT_I4,0x0E07)
+#define PR_MESSAGE_SIZE PROP_TAG(PT_I4,0x0E08)
+#define PR_PARENT_ENTRYID PROP_TAG(PT_BINARY,0x0E09)
+#define PR_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x0E0A)
+#define PR_CORRELATE PROP_TAG(PT_BOOLEAN,0x0E0C)
+#define PR_CORRELATE_MTSID PROP_TAG(PT_BINARY,0x0E0D)
+#define PR_DISCRETE_VALUES PROP_TAG(PT_BOOLEAN,0x0E0E)
+#define PR_RESPONSIBILITY PROP_TAG(PT_BOOLEAN,0x0E0F)
+#define PR_SPOOLER_STATUS PROP_TAG(PT_I4,0x0E10)
+#define PR_TRANSPORT_STATUS PROP_TAG(PT_I4,0x0E11)
+#define PR_MESSAGE_RECIPIENTS PROP_TAG(PT_OBJECT,0x0E12)
+#define PR_MESSAGE_ATTACHMENTS PROP_TAG(PT_OBJECT,0x0E13)
+#define PR_SUBMIT_FLAGS PROP_TAG(PT_I4,0x0E14)
+#define PR_RECIPIENT_STATUS PROP_TAG(PT_I4,0x0E15)
+#define PR_TRANSPORT_KEY PROP_TAG(PT_I4,0x0E16)
+#define PR_MSG_STATUS PROP_TAG(PT_I4,0x0E17)
+#define PR_MESSAGE_DOWNLOAD_TIME PROP_TAG(PT_I4,0x0E18)
+#define PR_CREATION_VERSION PROP_TAG(PT_I8,0x0E19)
+#define PR_MODIFY_VERSION PROP_TAG(PT_I8,0x0E1A)
+#define PR_HASATTACH PROP_TAG(PT_BOOLEAN,0x0E1B)
+#define PR_BODY_CRC PROP_TAG(PT_I4, 0x0E1C)
+#define PR_NORMALIZED_SUBJECT_W PROP_TAG(PT_UNICODE,0x0E1D)
+#define PR_NORMALIZED_SUBJECT_A PROP_TAG(PT_STRING8,0x0E1D)
+#define PR_NORMALIZED_SUBJECT   WINELIB_NAME_AW(PR_NORMALIZED_SUBJECT_)
+#define PR_RTF_IN_SYNC PROP_TAG(PT_BOOLEAN,0x0E1F)
+#define PR_ATTACH_SIZE PROP_TAG(PT_I4,0x0E20)
+#define PR_ATTACH_NUM PROP_TAG(PT_I4,0x0E21)
+#define PR_PREPROCESS PROP_TAG(PT_BOOLEAN,0x0E22)
+#define PR_ORIGINATING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x0E25)
+#define PR_PROOF_OF_SUBMISSION PROP_TAG(PT_BINARY,0x0E26)
+/* A unique identifier for editing the properties of a MAPI object */
+#define PR_ENTRYID PROP_TAG(PT_BINARY,0x0FFF)
+/* The type of an object */
+#define PR_OBJECT_TYPE PROP_TAG(PT_I4,0x0FFE)
+#define PR_ICON PROP_TAG(PT_BINARY,0x0FFD)
+#define PR_MINI_ICON PROP_TAG(PT_BINARY,0x0FFC)
+#define PR_STORE_ENTRYID PROP_TAG(PT_BINARY,0x0FFB)
+#define PR_STORE_RECORD_KEY PROP_TAG(PT_BINARY,0x0FFA)
+/* Binary identifier for an individual object */
+#define PR_RECORD_KEY PROP_TAG(PT_BINARY,0x0FF9)
+#define PR_MAPPING_SIGNATURE PROP_TAG(PT_BINARY,0x0FF8)
+#define PR_ACCESS_LEVEL PROP_TAG(PT_I4,0x0FF7)
+/* The primary key of a column in a table */
+#define PR_INSTANCE_KEY PROP_TAG(PT_BINARY,0x0FF6)
+#define PR_ROW_TYPE PROP_TAG(PT_I4,0x0FF5)
+#define PR_ACCESS PROP_TAG(PT_I4,0x0FF4)
+#define PR_ROWID PROP_TAG(PT_I4,0x3000)
+/* The name to display for a given MAPI object */
+#define PR_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3001)
+#define PR_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3001)
+#define PR_DISPLAY_NAME   WINELIB_NAME_AW(PR_DISPLAY_NAME_)
+#define PR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x3002)
+#define PR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x3002)
+#define PR_ADDRTYPE   WINELIB_NAME_AW(PR_ADDRTYPE_)
+/* An email address */
+#define PR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3003)
+#define PR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x3003)
+#define PR_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_EMAIL_ADDRESS_)
+/* A comment field */
+#define PR_COMMENT_W PROP_TAG(PT_UNICODE,0x3004)
+#define PR_COMMENT_A PROP_TAG(PT_STRING8,0x3004)
+#define PR_COMMENT   WINELIB_NAME_AW(PR_COMMENT_)
+#define PR_DEPTH PROP_TAG(PT_I4,0x3005)
+/* Provider-defined display name for a service provider */
+#define PR_PROVIDER_DISPLAY_W PROP_TAG(PT_UNICODE,0x3006)
+#define PR_PROVIDER_DISPLAY_A PROP_TAG(PT_STRING8,0x3006)
+#define PR_PROVIDER_DISPLAY   WINELIB_NAME_AW(PR_PROVIDER_DISPLAY_)
+/* The time an object was created */
+#define PR_CREATION_TIME PROP_TAG(PT_SYSTIME,0x3007)
+/* The time an object was last modified */
+#define PR_LAST_MODIFICATION_TIME PROP_TAG(PT_SYSTIME,0x3008)
+/* Flags describing a service provider, message service, or status object */
+#define PR_RESOURCE_FLAGS PROP_TAG(PT_I4,0x3009)
+/* The name of a provider dll, minus any "32" suffix and ".dll" */
+#define PR_PROVIDER_DLL_NAME_W PROP_TAG(PT_UNICODE,0x300A)
+#define PR_PROVIDER_DLL_NAME_A PROP_TAG(PT_STRING8,0x300A)
+#define PR_PROVIDER_DLL_NAME   WINELIB_NAME_AW(PR_PROVIDER_DLL_NAME_)
+#define PR_SEARCH_KEY PROP_TAG(PT_BINARY,0x300B)
+#define PR_PROVIDER_UID PROP_TAG(PT_BINARY,0x300C)
+#define PR_PROVIDER_ORDINAL PROP_TAG(PT_I4,0x300D)
+#define PR_FORM_VERSION_W PROP_TAG(PT_UNICODE,0x3301)
+#define PR_FORM_VERSION_A PROP_TAG(PT_STRING8,0x3301)
+#define PR_FORM_VERSION   WINELIB_NAME_AW(PR_FORM_VERSION_)
+#define PR_FORM_CLSID PROP_TAG(PT_CLSID,0x3302)
+#define PR_FORM_CONTACT_NAME_W PROP_TAG(PT_UNICODE,0x3303)
+#define PR_FORM_CONTACT_NAME_A PROP_TAG(PT_STRING8,0x3303)
+#define PR_FORM_CONTACT_NAME   WINELIB_NAME_AW(PR_FORM_CONTACT_NAME_)
+#define PR_FORM_CATEGORY_W PROP_TAG(PT_UNICODE,0x3304)
+#define PR_FORM_CATEGORY_A PROP_TAG(PT_STRING8,0x3304)
+#define PR_FORM_CATEGORY   WINELIB_NAME_AW(PR_FORM_CATEGORY_)
+#define PR_FORM_CATEGORY_SUB_W PROP_TAG(PT_UNICODE,0x3305)
+#define PR_FORM_CATEGORY_SUB_A PROP_TAG(PT_STRING8,0x3305)
+#define PR_FORM_CATEGORY_SUB   WINELIB_NAME_AW(PR_FORM_CATEGORY_SUB_)
+#define PR_FORM_HOST_MAP PROP_TAG(PT_MV_LONG,0x3306)
+#define PR_FORM_HIDDEN PROP_TAG(PT_BOOLEAN,0x3307)
+#define PR_FORM_DESIGNER_NAME_W PROP_TAG(PT_UNICODE,0x3308)
+#define PR_FORM_DESIGNER_NAME_A PROP_TAG(PT_STRING8,0x3308)
+#define PR_FORM_DESIGNER_NAME   WINELIB_NAME_AW(PR_FORM_DESIGNER_NAME_)
+#define PR_FORM_DESIGNER_GUID PROP_TAG(PT_CLSID,0x3309)
+#define PR_FORM_MESSAGE_BEHAVIOR PROP_TAG(PT_I4,0x330A)
+/* Is this row the default message store? */
+#define PR_DEFAULT_STORE PROP_TAG(PT_BOOLEAN,0x3400)
+#define PR_STORE_SUPPORT_MASK PROP_TAG(PT_I4,0x340D)
+#define PR_STORE_STATE PROP_TAG(PT_I4,0x340E)
+#define PR_IPM_SUBTREE_SEARCH_KEY PROP_TAG(PT_BINARY,0x3410)
+#define PR_IPM_OUTBOX_SEARCH_KEY PROP_TAG(PT_BINARY,0x3411)
+#define PR_IPM_WASTEBASKET_SEARCH_KEY PROP_TAG(PT_BINARY,0x3412)
+#define PR_IPM_SENTMAIL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3413)
+/* Provider-defined message store type */
+#define PR_MDB_PROVIDER PROP_TAG(PT_BINARY,0x3414)
+#define PR_RECEIVE_FOLDER_SETTINGS PROP_TAG(PT_OBJECT,0x3415)
+#define PR_VALID_FOLDER_MASK PROP_TAG(PT_I4,0x35DF)
+#define PR_IPM_SUBTREE_ENTRYID PROP_TAG(PT_BINARY,0x35E0)
+#define PR_IPM_OUTBOX_ENTRYID PROP_TAG(PT_BINARY,0x35E2)
+#define PR_IPM_WASTEBASKET_ENTRYID PROP_TAG(PT_BINARY,0x35E3)
+#define PR_IPM_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x35E4)
+#define PR_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E5)
+#define PR_COMMON_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E6)
+#define PR_FINDER_ENTRYID PROP_TAG(PT_BINARY,0x35E7)
+#define PR_CONTAINER_FLAGS PROP_TAG(PT_I4,0x3600)
+#define PR_FOLDER_TYPE PROP_TAG(PT_I4,0x3601)
+#define PR_CONTENT_COUNT PROP_TAG(PT_I4,0x3602)
+#define PR_CONTENT_UNREAD PROP_TAG(PT_I4,0x3603)
+#define PR_CREATE_TEMPLATES PROP_TAG(PT_OBJECT,0x3604)
+#define PR_DETAILS_TABLE PROP_TAG(PT_OBJECT,0x3605)
+#define PR_SEARCH PROP_TAG(PT_OBJECT,0x3607)
+#define PR_SELECTABLE PROP_TAG(PT_BOOLEAN,0x3609)
+#define PR_SUBFOLDERS PROP_TAG(PT_BOOLEAN,0x360A)
+#define PR_STATUS PROP_TAG(PT_I4,0x360B)
+#define PR_ANR_W PROP_TAG(PT_UNICODE,0x360C)
+#define PR_ANR_A PROP_TAG(PT_STRING8,0x360C)
+#define PR_ANR   WINELIB_NAME_AW(PR_ANR_)
+#define PR_CONTENTS_SORT_ORDER PROP_TAG(PT_MV_LONG,0x360D)
+#define PR_CONTAINER_HIERARCHY PROP_TAG(PT_OBJECT,0x360E)
+#define PR_CONTAINER_CONTENTS PROP_TAG(PT_OBJECT,0x360F)
+#define PR_FOLDER_ASSOCIATED_CONTENTS PROP_TAG(PT_OBJECT,0x3610)
+#define PR_DEF_CREATE_DL PROP_TAG(PT_BINARY,0x3611)
+#define PR_DEF_CREATE_MAILUSER PROP_TAG(PT_BINARY,0x3612)
+#define PR_CONTAINER_CLASS_W PROP_TAG(PT_UNICODE,0x3613)
+#define PR_CONTAINER_CLASS_A PROP_TAG(PT_STRING8,0x3613)
+#define PR_CONTAINER_CLASS   WINELIB_NAME_AW(PR_CONTAINER_CLASS_)
+#define PR_CONTAINER_MODIFY_VERSION PROP_TAG(PT_I8,0x3614)
+#define PR_AB_PROVIDER_ID PROP_TAG(PT_BINARY,0x3615)
+#define PR_DEFAULT_VIEW_ENTRYID PROP_TAG(PT_BINARY,0x3616)
+#define PR_ASSOC_CONTENT_COUNT PROP_TAG(PT_I4,0x3617)
+#define PR_IPM_DRAFTS_ENTRYID PROP_TAG(PT_BINARY,0x36D7)
+#define PR_ATTACHMENT_X400_PARAMETERS PROP_TAG(PT_BINARY,0x3700)
+#define PR_ATTACH_DATA_OBJ PROP_TAG(PT_OBJECT,0x3701)
+#define PR_ATTACH_DATA_BIN PROP_TAG(PT_BINARY,0x3701)
+#define PR_ATTACH_ENCODING PROP_TAG(PT_BINARY,0x3702)
+#define PR_ATTACH_EXTENSION_W PROP_TAG(PT_UNICODE,0x3703)
+#define PR_ATTACH_EXTENSION_A PROP_TAG(PT_STRING8,0x3703)
+#define PR_ATTACH_EXTENSION   WINELIB_NAME_AW(PR_ATTACH_EXTENSION_)
+#define PR_ATTACH_FILENAME_W PROP_TAG(PT_UNICODE,0x3704)
+#define PR_ATTACH_FILENAME_A PROP_TAG(PT_STRING8,0x3704)
+#define PR_ATTACH_FILENAME   WINELIB_NAME_AW(PR_ATTACH_FILENAME_)
+#define PR_ATTACH_METHOD PROP_TAG(PT_I4,0x3705)
+#define PR_ATTACH_LONG_FILENAME_W PROP_TAG(PT_UNICODE,0x3707)
+#define PR_ATTACH_LONG_FILENAME_A PROP_TAG(PT_STRING8,0x3707)
+#define PR_ATTACH_LONG_FILENAME   WINELIB_NAME_AW(PR_ATTACH_LONG_FILENAME_)
+#define PR_ATTACH_PATHNAME_W PROP_TAG(PT_UNICODE,0x3708)
+#define PR_ATTACH_PATHNAME_A PROP_TAG(PT_STRING8,0x3708)
+#define PR_ATTACH_PATHNAME   WINELIB_NAME_AW(PR_ATTACH_PATHNAME_)
+#define PR_ATTACH_RENDERING PROP_TAG(PT_BINARY, 0x3709)
+#define PR_ATTACH_TAG PROP_TAG(PT_BINARY,0x370A)
+#define PR_RENDERING_POSITION PROP_TAG(PT_I4,0x370B)
+#define PR_ATTACH_TRANSPORT_NAME_W PROP_TAG(PT_UNICODE,0x370C)
+#define PR_ATTACH_TRANSPORT_NAME_A PROP_TAG(PT_STRING8,0x370C)
+#define PR_ATTACH_TRANSPORT_NAME   WINELIB_NAME_AW(PR_ATTACH_TRANSPORT_NAME_)
+#define PR_ATTACH_LONG_PATHNAME_W PROP_TAG(PT_UNICODE,0x370D)
+#define PR_ATTACH_LONG_PATHNAME_A PROP_TAG(PT_STRING8,0x370D)
+#define PR_ATTACH_LONG_PATHNAME   WINELIB_NAME_AW(PR_ATTACH_LONG_PATHNAME_)
+#define PR_ATTACH_MIME_TAG_W PROP_TAG(PT_UNICODE,0x370E)
+#define PR_ATTACH_MIME_TAG_A PROP_TAG(PT_STRING8,0x370E)
+#define PR_ATTACH_MIME_TAG   WINELIB_NAME_AW(PR_ATTACH_MIME_TAG_)
+#define PR_ATTACH_ADDITIONAL_INFO PROP_TAG(PT_BINARY,0x370F)
+#define PR_DISPLAY_TYPE PROP_TAG(PT_I4,0x3900)
+#define PR_TEMPLATEID PROP_TAG(PT_BINARY,0x3902)
+#define PR_PRIMARY_CAPABILITY PROP_TAG(PT_BINARY,0x3904)
+#define PR_7BIT_DISPLAY_NAME PROP_TAG(PT_STRING8,0x39FF)
+#define PR_ACCOUNT_W PROP_TAG(PT_UNICODE,0x3A00)
+#define PR_ACCOUNT_A PROP_TAG(PT_STRING8,0x3A00)
+#define PR_ACCOUNT   WINELIB_NAME_AW(PR_ACCOUNT_)
+#define PR_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x3A01)
+#define PR_CALLBACK_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A02)
+#define PR_CALLBACK_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A02)
+#define PR_CALLBACK_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_CALLBACK_TELEPHONE_NUMBER_)
+#define PR_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x3A03)
+#define PR_DISCLOSE_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x3A04)
+#define PR_GENERATION_W PROP_TAG(PT_UNICODE,0x3A05)
+#define PR_GENERATION_A PROP_TAG(PT_STRING8,0x3A05)
+#define PR_GENERATION   WINELIB_NAME_AW(PR_GENERATION_)
+#define PR_GIVEN_NAME_W PROP_TAG(PT_UNICODE,0x3A06)
+#define PR_GIVEN_NAME_A PROP_TAG(PT_STRING8,0x3A06)
+#define PR_GIVEN_NAME   WINELIB_NAME_AW(PR_GIVEN_NAME_)
+#define PR_GOVERNMENT_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A07)
+#define PR_GOVERNMENT_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A07)
+#define PR_GOVERNMENT_ID_NUMBER   WINELIB_NAME_AW(PR_GOVERNMENT_ID_NUMBER_)
+#define PR_BUSINESS_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A08)
+#define PR_BUSINESS_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A08)
+#define PR_BUSINESS_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_BUSINESS_TELEPHONE_NUMBER_)
+#define PR_OFFICE_TELEPHONE_NUMBER_W PR_BUSINESS_TELEPHONE_NUMBER_W
+#define PR_OFFICE_TELEPHONE_NUMBER_A PR_BUSINESS_TELEPHONE_NUMBER_A
+#define PR_OFFICE_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_OFFICE_TELEPHONE_NUMBER_)
+#define PR_HOME_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A09)
+#define PR_HOME_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A09)
+#define PR_HOME_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_HOME_TELEPHONE_NUMBER_)
+#define PR_INITIALS_W PROP_TAG(PT_UNICODE,0x3A0A)
+#define PR_INITIALS_A PROP_TAG(PT_STRING8,0x3A0A)
+#define PR_INITIALS   WINELIB_NAME_AW(PR_INITIALS_)
+#define PR_KEYWORD_W PROP_TAG(PT_UNICODE,0x3A0B)
+#define PR_KEYWORD_A PROP_TAG(PT_STRING8,0x3A0B)
+#define PR_KEYWORD   WINELIB_NAME_AW(PR_KEYWORD_)
+#define PR_LANGUAGE_W PROP_TAG(PT_UNICODE,0x3A0C)
+#define PR_LANGUAGE_A PROP_TAG(PT_STRING8,0x3A0C)
+#define PR_LANGUAGE   WINELIB_NAME_AW(PR_LANGUAGE_)
+#define PR_LOCATION_W PROP_TAG(PT_UNICODE,0x3A0D)
+#define PR_LOCATION_A PROP_TAG(PT_STRING8,0x3A0D)
+#define PR_LOCATION   WINELIB_NAME_AW(PR_LOCATION_)
+#define PR_MAIL_PERMISSION PROP_TAG(PT_BOOLEAN,0x3A0E)
+#define PR_MHS_COMMON_NAME_W PROP_TAG(PT_UNICODE,0x3A0F)
+#define PR_MHS_COMMON_NAME_A PROP_TAG(PT_STRING8,0x3A0F)
+#define PR_MHS_COMMON_NAME   WINELIB_NAME_AW(PR_MHS_COMMON_NAME_)
+#define PR_ORGANIZATIONAL_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A10)
+#define PR_ORGANIZATIONAL_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A10)
+#define PR_ORGANIZATIONAL_ID_NUMBER   WINELIB_NAME_AW(PR_ORGANIZATIONAL_ID_NUMBER_)
+#define PR_SURNAME_W PROP_TAG(PT_UNICODE,0x3A11)
+#define PR_SURNAME_A PROP_TAG(PT_STRING8,0x3A11)
+#define PR_SURNAME   WINELIB_NAME_AW(PR_SURNAME_)
+#define PR_ORIGINAL_ENTRYID PROP_TAG(PT_BINARY,0x3A12)
+#define PR_ORIGINAL_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A13)
+#define PR_ORIGINAL_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A13)
+#define PR_ORIGINAL_DISPLAY_NAME   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_NAME_)
+#define PR_ORIGINAL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3A14)
+#define PR_POSTAL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A15)
+#define PR_POSTAL_ADDRESS_A PROP_TAG(PT_STRING8,0x3A15)
+#define PR_POSTAL_ADDRESS   WINELIB_NAME_AW(PR_POSTAL_ADDRESS_)
+#define PR_COMPANY_NAME_W PROP_TAG(PT_UNICODE,0x3A16)
+#define PR_COMPANY_NAME_A PROP_TAG(PT_STRING8,0x3A16)
+#define PR_COMPANY_NAME   WINELIB_NAME_AW(PR_COMPANY_NAME_)
+#define PR_TITLE_W PROP_TAG(PT_UNICODE,0x3A17)
+#define PR_TITLE_A PROP_TAG(PT_STRING8,0x3A17)
+#define PR_TITLE   WINELIB_NAME_AW(PR_TITLE_)
+#define PR_DEPARTMENT_NAME_W PROP_TAG(PT_UNICODE,0x3A18)
+#define PR_DEPARTMENT_NAME_A PROP_TAG(PT_STRING8,0x3A18)
+#define PR_DEPARTMENT_NAME   WINELIB_NAME_AW(PR_DEPARTMENT_NAME_)
+#define PR_OFFICE_LOCATION_W PROP_TAG(PT_UNICODE,0x3A19)
+#define PR_OFFICE_LOCATION_A PROP_TAG(PT_STRING8,0x3A19)
+#define PR_OFFICE_LOCATION   WINELIB_NAME_AW(PR_OFFICE_LOCATION_)
+#define PR_PRIMARY_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1A)
+#define PR_PRIMARY_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1A)
+#define PR_PRIMARY_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_PRIMARY_TELEPHONE_NUMBER_)
+#define PR_BUSINESS2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1B)
+#define PR_BUSINESS2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1B)
+#define PR_BUSINESS2_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_BUSINESS2_TELEPHONE_NUMBER_)
+#define PR_OFFICE2_TELEPHONE_NUMBER_W PR_BUSINESS2_TELEPHONE_NUMBER_W
+#define PR_OFFICE2_TELEPHONE_NUMBER_A PR_BUSINESS2_TELEPHONE_NUMBER_A
+#define PR_OFFICE2_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_OFFICE2_TELEPHONE_NUMBER_)
+#define PR_MOBILE_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1C)
+#define PR_MOBILE_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1C)
+#define PR_MOBILE_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_MOBILE_TELEPHONE_NUMBER_)
+#define PR_CELLULAR_TELEPHONE_NUMBER_W PR_MOBILE_TELEPHONE_NUMBER_W
+#define PR_CELLULAR_TELEPHONE_NUMBER_A PR_MOBILE_TELEPHONE_NUMBER_A
+#define PR_CELLULAR_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_CELLULAR_TELEPHONE_NUMBER_)
+#define PR_RADIO_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1D)
+#define PR_RADIO_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1D)
+#define PR_RADIO_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_RADIO_TELEPHONE_NUMBER_)
+#define PR_CAR_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1E)
+#define PR_CAR_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1E)
+#define PR_CAR_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_CAR_TELEPHONE_NUMBER_)
+#define PR_OTHER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1F)
+#define PR_OTHER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1F)
+#define PR_OTHER_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_OTHER_TELEPHONE_NUMBER_)
+#define PR_TRANSMITABLE_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A20)
+#define PR_TRANSMITABLE_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A20)
+#define PR_TRANSMITABLE_DISPLAY_NAME   WINELIB_NAME_AW(PR_TRANSMITABLE_DISPLAY_NAME_)
+#define PR_PAGER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A21)
+#define PR_PAGER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A21)
+#define PR_PAGER_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_PAGER_TELEPHONE_NUMBER_)
+#define PR_BEEPER_TELEPHONE_NUMBER_W PR_PAGER_TELEPHONE_NUMBER_W
+#define PR_BEEPER_TELEPHONE_NUMBER_A PR_PAGER_TELEPHONE_NUMBER_A
+#define PR_BEEPER_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_BEEPER_TELEPHONE_NUMBER_)
+#define PR_USER_CERTIFICATE PROP_TAG(PT_BINARY,0x3A22)
+#define PR_PRIMARY_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A23)
+#define PR_PRIMARY_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A23)
+#define PR_PRIMARY_FAX_NUMBER   WINELIB_NAME_AW(PR_PRIMARY_FAX_NUMBER_)
+#define PR_BUSINESS_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A24)
+#define PR_BUSINESS_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A24)
+#define PR_BUSINESS_FAX_NUMBER   WINELIB_NAME_AW(PR_BUSINESS_FAX_NUMBER_)
+#define PR_HOME_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A25)
+#define PR_HOME_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A25)
+#define PR_HOME_FAX_NUMBER   WINELIB_NAME_AW(PR_HOME_FAX_NUMBER_)
+#define PR_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A26)
+#define PR_COUNTRY_A PROP_TAG(PT_STRING8,0x3A26)
+#define PR_COUNTRY   WINELIB_NAME_AW(PR_COUNTRY_)
+#define PR_BUSINESS_ADDRESS_COUNTRY_W PR_COUNTRY_W
+#define PR_BUSINESS_ADDRESS_COUNTRY_A PR_COUNTRY_A
+#define PR_BUSINESS_ADDRESS_COUNTRY   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_COUNTRY_)
+#define PR_LOCALITY_W PROP_TAG(PT_UNICODE,0x3A27)
+#define PR_LOCALITY_A PROP_TAG(PT_STRING8,0x3A27)
+#define PR_LOCALITY   WINELIB_NAME_AW(PR_LOCALITY_)
+#define PR_BUSINESS_ADDRESS_CITY_W PR_LOCALITY_W
+#define PR_BUSINESS_ADDRESS_CITY_A PR_LOCALITY_A
+#define PR_BUSINESS_ADDRESS_CITY   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_CITY_)
+#define PR_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A28)
+#define PR_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A28)
+#define PR_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_STATE_OR_PROVINCE_)
+#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_W PR_STATE_OR_PROVINCE_W
+#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_A PR_STATE_OR_PROVINCE_A
+#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_)
+#define PR_STREET_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A29)
+#define PR_STREET_ADDRESS_A PROP_TAG(PT_STRING8,0x3A29)
+#define PR_STREET_ADDRESS   WINELIB_NAME_AW(PR_STREET_ADDRESS_)
+#define PR_BUSINESS_ADDRESS_STREET_W PR_STREET_ADDRESS_W
+#define PR_BUSINESS_ADDRESS_STREET_A PR_STREET_ADDRESS_A
+#define PR_BUSINESS_ADDRESS_STREET   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STREET_)
+#define PR_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A2A)
+#define PR_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A2A)
+#define PR_POSTAL_CODE   WINELIB_NAME_AW(PR_POSTAL_CODE_)
+#define PR_BUSINESS_ADDRESS_POSTAL_CODE_W PR_POSTAL_CODE_W
+#define PR_BUSINESS_ADDRESS_POSTAL_CODE_A PR_POSTAL_CODE_A
+#define PR_BUSINESS_ADDRESS_POSTAL_CODE   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POSTAL_CODE_)
+#define PR_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A2B)
+#define PR_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A2B)
+#define PR_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_POST_OFFICE_BOX_)
+#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W PR_POST_OFFICE_BOX_W
+#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A PR_POST_OFFICE_BOX_A
+#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_)
+#define PR_TELEX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2C)
+#define PR_TELEX_NUMBER_A PROP_TAG(PT_STRING8,0x3A2C)
+#define PR_TELEX_NUMBER   WINELIB_NAME_AW(PR_TELEX_NUMBER_)
+#define PR_ISDN_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2D)
+#define PR_ISDN_NUMBER_A PROP_TAG(PT_STRING8,0x3A2D)
+#define PR_ISDN_NUMBER   WINELIB_NAME_AW(PR_ISDN_NUMBER_)
+#define PR_ASSISTANT_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2E)
+#define PR_ASSISTANT_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2E)
+#define PR_ASSISTANT_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_ASSISTANT_TELEPHONE_NUMBER_)
+#define PR_HOME2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2F)
+#define PR_HOME2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2F)
+#define PR_HOME2_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_HOME2_TELEPHONE_NUMBER_)
+#define PR_ASSISTANT_W PROP_TAG(PT_UNICODE,0x3A30)
+#define PR_ASSISTANT_A PROP_TAG(PT_STRING8,0x3A30)
+#define PR_ASSISTANT   WINELIB_NAME_AW(PR_ASSISTANT_)
+#define PR_SEND_RICH_INFO PROP_TAG(PT_BOOLEAN,0x3A40)
+#define PR_WEDDING_ANNIVERSARY PROP_TAG(PT_SYSTIME,0x3A41)
+#define PR_BIRTHDAY PROP_TAG(PT_SYSTIME,0x3A42)
+#define PR_HOBBIES_W PROP_TAG(PT_UNICODE,0x3A43)
+#define PR_HOBBIES_A PROP_TAG(PT_STRING8,0x3A43)
+#define PR_HOBBIES   WINELIB_NAME_AW(PR_HOBBIES_)
+#define PR_MIDDLE_NAME_W PROP_TAG(PT_UNICODE,0x3A44)
+#define PR_MIDDLE_NAME_A PROP_TAG(PT_STRING8,0x3A44)
+#define PR_MIDDLE_NAME   WINELIB_NAME_AW(PR_MIDDLE_NAME_)
+#define PR_DISPLAY_NAME_PREFIX_W PROP_TAG(PT_UNICODE,0x3A45)
+#define PR_DISPLAY_NAME_PREFIX_A PROP_TAG(PT_STRING8,0x3A45)
+#define PR_DISPLAY_NAME_PREFIX   WINELIB_NAME_AW(PR_DISPLAY_NAME_PREFIX_)
+#define PR_PROFESSION_W PROP_TAG(PT_UNICODE,0x3A46)
+#define PR_PROFESSION_A PROP_TAG(PT_STRING8,0x3A46)
+#define PR_PROFESSION   WINELIB_NAME_AW(PR_PROFESSION_)
+#define PR_PREFERRED_BY_NAME_W PROP_TAG(PT_UNICODE,0x3A47)
+#define PR_PREFERRED_BY_NAME_A PROP_TAG(PT_STRING8,0x3A47)
+#define PR_PREFERRED_BY_NAME   WINELIB_NAME_AW(PR_PREFERRED_BY_NAME_)
+#define PR_SPOUSE_NAME_W PROP_TAG(PT_UNICODE,0x3A48)
+#define PR_SPOUSE_NAME_A PROP_TAG(PT_STRING8,0x3A48)
+#define PR_SPOUSE_NAME   WINELIB_NAME_AW(PR_SPOUSE_NAME_)
+#define PR_COMPUTER_NETWORK_NAME_W PROP_TAG(PT_UNICODE,0x3A49)
+#define PR_COMPUTER_NETWORK_NAME_A PROP_TAG(PT_STRING8,0x3A49)
+#define PR_COMPUTER_NETWORK_NAME   WINELIB_NAME_AW(PR_COMPUTER_NETWORK_NAME_)
+#define PR_CUSTOMER_ID_W PROP_TAG(PT_UNICODE,0x3A4A)
+#define PR_CUSTOMER_ID_A PROP_TAG(PT_STRING8,0x3A4A)
+#define PR_CUSTOMER_ID   WINELIB_NAME_AW(PR_CUSTOMER_ID_)
+#define PR_TTYTDD_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A4B)
+#define PR_TTYTDD_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A4B)
+#define PR_TTYTDD_PHONE_NUMBER   WINELIB_NAME_AW(PR_TTYTDD_PHONE_NUMBER_)
+#define PR_FTP_SITE_W PROP_TAG(PT_UNICODE,0x3A4C)
+#define PR_FTP_SITE_A PROP_TAG(PT_STRING8,0x3A4C)
+#define PR_FTP_SITE   WINELIB_NAME_AW(PR_FTP_SITE_)
+#define PR_GENDER PROP_TAG(PT_I2,0x3A4D)
+#define PR_MANAGER_NAME_W PROP_TAG(PT_UNICODE,0x3A4E)
+#define PR_MANAGER_NAME_A PROP_TAG(PT_STRING8,0x3A4E)
+#define PR_MANAGER_NAME   WINELIB_NAME_AW(PR_MANAGER_NAME_)
+#define PR_NICKNAME_W PROP_TAG(PT_UNICODE,0x3A4F)
+#define PR_NICKNAME_A PROP_TAG(PT_STRING8,0x3A4F)
+#define PR_NICKNAME   WINELIB_NAME_AW(PR_NICKNAME_)
+#define PR_PERSONAL_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A50)
+#define PR_PERSONAL_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A50)
+#define PR_PERSONAL_HOME_PAGE   WINELIB_NAME_AW(PR_PERSONAL_HOME_PAGE_)
+#define PR_BUSINESS_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A51)
+#define PR_BUSINESS_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A51)
+#define PR_BUSINESS_HOME_PAGE   WINELIB_NAME_AW(PR_BUSINESS_HOME_PAGE_)
+#define PR_CONTACT_VERSION PROP_TAG(PT_CLSID,0x3A52)
+#define PR_CONTACT_ENTRYIDS PROP_TAG(PT_MV_BINARY,0x3A53)
+#define PR_CONTACT_ADDRTYPES_W PROP_TAG(PT_MV_UNICODE,0x3A54)
+#define PR_CONTACT_ADDRTYPES_A PROP_TAG(PT_MV_STRING8,0x3A54)
+#define PR_CONTACT_ADDRTYPES   WINELIB_NAME_AW(PR_CONTACT_ADDRTYPES_)
+#define PR_CONTACT_DEFAULT_ADDRESS_INDEX PROP_TAG(PT_I4,0x3A55)
+#define PR_CONTACT_EMAIL_ADDRESSES_W PROP_TAG(PT_MV_UNICODE,0x3A56)
+#define PR_CONTACT_EMAIL_ADDRESSES_A PROP_TAG(PT_MV_STRING8,0x3A56)
+#define PR_CONTACT_EMAIL_ADDRESSES   WINELIB_NAME_AW(PR_CONTACT_EMAIL_ADDRESSES_)
+#define PR_COMPANY_MAIN_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A57)
+#define PR_COMPANY_MAIN_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A57)
+#define PR_COMPANY_MAIN_PHONE_NUMBER   WINELIB_NAME_AW(PR_COMPANY_MAIN_PHONE_NUMBER_)
+#define PR_CHILDRENS_NAMES_W PROP_TAG(PT_MV_UNICODE,0x3A58)
+#define PR_CHILDRENS_NAMES_A PROP_TAG(PT_MV_STRING8,0x3A58)
+#define PR_CHILDRENS_NAMES   WINELIB_NAME_AW(PR_CHILDRENS_NAMES_)
+#define PR_HOME_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A59)
+#define PR_HOME_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A59)
+#define PR_HOME_ADDRESS_CITY   WINELIB_NAME_AW(PR_HOME_ADDRESS_CITY_)
+#define PR_HOME_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A5A)
+#define PR_HOME_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A5A)
+#define PR_HOME_ADDRESS_COUNTRY   WINELIB_NAME_AW(PR_HOME_ADDRESS_COUNTRY_)
+#define PR_HOME_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A5B)
+#define PR_HOME_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A5B)
+#define PR_HOME_ADDRESS_POSTAL_CODE   WINELIB_NAME_AW(PR_HOME_ADDRESS_POSTAL_CODE_)
+#define PR_HOME_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A5C)
+#define PR_HOME_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A5C)
+#define PR_HOME_ADDRESS_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_HOME_ADDRESS_STATE_OR_PROVINCE_)
+#define PR_HOME_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A5D)
+#define PR_HOME_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A5D)
+#define PR_HOME_ADDRESS_STREET   WINELIB_NAME_AW(PR_HOME_ADDRESS_STREET_)
+#define PR_HOME_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A5E)
+#define PR_HOME_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A5E)
+#define PR_HOME_ADDRESS_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_HOME_ADDRESS_POST_OFFICE_BOX_)
+#define PR_OTHER_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A5F)
+#define PR_OTHER_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A5F)
+#define PR_OTHER_ADDRESS_CITY   WINELIB_NAME_AW(PR_OTHER_ADDRESS_CITY_)
+#define PR_OTHER_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A60)
+#define PR_OTHER_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A60)
+#define PR_OTHER_ADDRESS_COUNTRY   WINELIB_NAME_AW(PR_OTHER_ADDRESS_COUNTRY_)
+#define PR_OTHER_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A61)
+#define PR_OTHER_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A61)
+#define PR_OTHER_ADDRESS_POSTAL_CODE   WINELIB_NAME_AW(PR_OTHER_ADDRESS_POSTAL_CODE_)
+#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A62)
+#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A62)
+#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_OTHER_ADDRESS_STATE_OR_PROVINCE_)
+#define PR_OTHER_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A63)
+#define PR_OTHER_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A63)
+#define PR_OTHER_ADDRESS_STREET   WINELIB_NAME_AW(PR_OTHER_ADDRESS_STREET_)
+#define PR_OTHER_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A64)
+#define PR_OTHER_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A64)
+#define PR_OTHER_ADDRESS_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_OTHER_ADDRESS_POST_OFFICE_BOX_)
+#define PR_STORE_PROVIDERS PROP_TAG(PT_BINARY,0x3D00)
+#define PR_AB_PROVIDERS PROP_TAG(PT_BINARY,0x3D01)
+#define PR_TRANSPORT_PROVIDERS PROP_TAG(PT_BINARY,0x3D02)
+#define PR_DEFAULT_PROFILE PROP_TAG(PT_BOOLEAN,0x3D04)
+#define PR_AB_SEARCH_PATH PROP_TAG(PT_MV_BINARY,0x3D05)
+#define PR_AB_DEFAULT_DIR PROP_TAG(PT_BINARY,0x3D06)
+#define PR_AB_DEFAULT_PAB PROP_TAG(PT_BINARY,0x3D07)
+#define PR_FILTERING_HOOKS PROP_TAG(PT_BINARY, 0x3D08)
+#define PR_SERVICE_NAME_W PROP_TAG(PT_UNICODE,0x3D09)
+#define PR_SERVICE_NAME_A PROP_TAG(PT_STRING8,0x3D09)
+#define PR_SERVICE_NAME   WINELIB_NAME_AW(PR_SERVICE_NAME_)
+#define PR_SERVICE_DLL_NAME_W PROP_TAG(PT_UNICODE,0x3D0A)
+#define PR_SERVICE_DLL_NAME_A PROP_TAG(PT_STRING8,0x3D0A)
+#define PR_SERVICE_DLL_NAME   WINELIB_NAME_AW(PR_SERVICE_DLL_NAME_)
+#define PR_SERVICE_ENTRY_NAME PROP_TAG(PT_STRING8,0x3D0B)
+#define PR_SERVICE_UID PROP_TAG(PT_BINARY,0x3D0C)
+#define PR_SERVICE_EXTRA_UIDS PROP_TAG(PT_BINARY,0x3D0D)
+#define PR_SERVICES PROP_TAG(PT_BINARY,0x3D0E)
+#define PR_SERVICE_SUPPORT_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D0F)
+#define PR_SERVICE_SUPPORT_FILES_A PROP_TAG(PT_MV_STRING8,0x3D0F)
+#define PR_SERVICE_SUPPORT_FILES   WINELIB_NAME_AW(PR_SERVICE_SUPPORT_FILES_)
+#define PR_SERVICE_DELETE_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D10)
+#define PR_SERVICE_DELETE_FILES_A PROP_TAG(PT_MV_STRING8,0x3D10)
+#define PR_SERVICE_DELETE_FILES   WINELIB_NAME_AW(PR_SERVICE_DELETE_FILES_)
+#define PR_AB_SEARCH_PATH_UPDATE PROP_TAG(PT_BINARY,0x3D11)
+#define PR_PROFILE_NAME_A PROP_TAG(PT_STRING8,0x3D12)
+#define PR_PROFILE_NAME_W PROP_TAG(PT_UNICODE,0x3D12)
+#define PR_PROFILE_NAME   WINELIB_NAME_AW(PR_PROFILE_NAME_)
+#define PR_IDENTITY_DISPLAY_W PROP_TAG(PT_UNICODE,0x3E00)
+#define PR_IDENTITY_DISPLAY_A PROP_TAG(PT_STRING8,0x3E00)
+#define PR_IDENTITY_DISPLAY   WINELIB_NAME_AW(PR_IDENTITY_DISPLAY_)
+#define PR_IDENTITY_ENTRYID PROP_TAG(PT_BINARY,0x3E01)
+#define PR_RESOURCE_METHODS PROP_TAG(PT_I4,0x3E02)
+/* Service provider type */
+#define PR_RESOURCE_TYPE PROP_TAG(PT_I4,0x3E03)
+#define PR_STATUS_CODE PROP_TAG(PT_I4,0x3E04)
+#define PR_IDENTITY_SEARCH_KEY PROP_TAG(PT_BINARY,0x3E05)
+#define PR_OWN_STORE_ENTRYID PROP_TAG(PT_BINARY,0x3E06)
+#define PR_RESOURCE_PATH_W PROP_TAG(PT_UNICODE,0x3E07)
+#define PR_RESOURCE_PATH_A PROP_TAG(PT_STRING8,0x3E07)
+#define PR_RESOURCE_PATH   WINELIB_NAME_AW(PR_RESOURCE_PATH_)
+#define PR_STATUS_STRING_W PROP_TAG(PT_UNICODE,0x3E08)
+#define PR_STATUS_STRING_A PROP_TAG(PT_STRING8,0x3E08)
+#define PR_STATUS_STRING   WINELIB_NAME_AW(PR_STATUS_STRING_)
+#define PR_X400_DEFERRED_DELIVERY_CANCEL PROP_TAG(PT_BOOLEAN,0x3E09)
+#define PR_HEADER_FOLDER_ENTRYID PROP_TAG(PT_BINARY,0x3E0A)
+#define PR_REMOTE_PROGRESS PROP_TAG(PT_I4,0x3E0B)
+#define PR_REMOTE_PROGRESS_TEXT_W PROP_TAG(PT_UNICODE,0x3E0C)
+#define PR_REMOTE_PROGRESS_TEXT_A PROP_TAG(PT_STRING8,0x3E0C)
+#define PR_REMOTE_PROGRESS_TEXT   WINELIB_NAME_AW(PR_REMOTE_PROGRESS_TEXT_)
+#define PR_REMOTE_VALIDATE_OK PROP_TAG(PT_BOOLEAN,0x3E0D)
+#define PR_CONTROL_FLAGS PROP_TAG(PT_I4,0x3F00)
+#define PR_CONTROL_STRUCTURE PROP_TAG(PT_BINARY,0x3F01)
+#define PR_CONTROL_TYPE PROP_TAG(PT_I4,0x3F02)
+#define PR_DELTAX PROP_TAG(PT_I4,0x3F03)
+#define PR_DELTAY PROP_TAG(PT_I4,0x3F04)
+#define PR_XPOS PROP_TAG(PT_I4,0x3F05)
+#define PR_YPOS PROP_TAG(PT_I4,0x3F06)
+#define PR_CONTROL_ID PROP_TAG(PT_BINARY,0x3F07)
+#define PR_INITIAL_DETAILS_PANE PROP_TAG(PT_I4,0x3F08)
+
+#define PROP_ID_SECURE_MIN 0x67F0
+#define PROP_ID_SECURE_MAX 0x67FF
+
+#endif /* MAPITAGS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h
new file mode 100644
index 0000000..7ca005a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h
@@ -0,0 +1,286 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIUTIL_H_
+#define MAPIUTIL_H_
+
+#include <mapix.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TAD_ALL_ROWS 1 /* Delete all rows */
+
+LPMALLOC WINAPI MAPIGetDefaultMalloc(void);
+
+#define SOF_UNIQUEFILENAME 0x80000000U /* Create a unique (temporary) filename */
+
+#if defined (UNICODE) || defined (__WINESRC__)
+typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER,
+                                              ULONG,LPWSTR,LPWSTR,LPSTREAM*);
+HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER,
+                                ULONG,LPWSTR,LPWSTR,LPSTREAM*);
+#else
+typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER,
+                                              ULONG,LPSTR,LPSTR,LPSTREAM*);
+HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER,
+                                ULONG,LPSTR,LPSTR,LPSTREAM*);
+#endif
+#define OPENSTREAMONFILE "OpenStreamOnFile"
+
+BOOL WINAPI FEqualNames(LPMAPINAMEID,LPMAPINAMEID);
+
+typedef struct IPropData *LPPROPDATA;
+
+#define IPROP_READONLY  0x00001U
+#define IPROP_READWRITE 0x00002U
+#define IPROP_CLEAN     0x10000U
+#define IPROP_DIRTY     0x20000U
+
+SCODE WINAPI CreateIProp(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*,
+                         LPVOID,LPPROPDATA*);
+SCODE WINAPI PropCopyMore(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID);
+ULONG WINAPI UlPropSize(LPSPropValue);
+VOID  WINAPI GetInstance(LPSPropValue,LPSPropValue,ULONG);
+BOOL  WINAPI FPropContainsProp(LPSPropValue,LPSPropValue,ULONG);
+BOOL  WINAPI FPropCompareProp(LPSPropValue,ULONG,LPSPropValue);
+LONG  WINAPI LPropCompareProp(LPSPropValue,LPSPropValue);
+
+HRESULT WINAPI HrAddColumns(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,LPFREEBUFFER);
+HRESULT WINAPI HrAddColumnsEx(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,
+                              LPFREEBUFFER,void (*)(LPSPropTagArray));
+HRESULT WINAPI HrAllocAdviseSink(LPNOTIFCALLBACK,LPVOID,LPMAPIADVISESINK*);
+HRESULT WINAPI HrThisThreadAdviseSink(LPMAPIADVISESINK,LPMAPIADVISESINK*);
+HRESULT WINAPI HrDispatchNotifications (ULONG);
+
+ULONG WINAPI UlAddRef(void*);
+ULONG WINAPI UlRelease(void*);
+
+HRESULT WINAPI HrGetOneProp(LPMAPIPROP,ULONG,LPSPropValue*);
+HRESULT WINAPI HrSetOneProp(LPMAPIPROP,LPSPropValue);
+BOOL    WINAPI FPropExists(LPMAPIPROP,ULONG);
+void    WINAPI FreePadrlist(LPADRLIST);
+void    WINAPI FreeProws(LPSRowSet);
+HRESULT WINAPI HrQueryAllRows(LPMAPITABLE,LPSPropTagArray,LPSRestriction,
+                              LPSSortOrderSet,LONG,LPSRowSet*);
+LPSPropValue WINAPI PpropFindProp(LPSPropValue,ULONG,ULONG);
+
+#if defined (UNICODE) || defined (__WINESRC__)
+BOOL   WINAPI FBinFromHex(LPWSTR,LPBYTE);
+SCODE  WINAPI ScBinFromHexBounded(LPWSTR,LPBYTE,ULONG);
+void   WINAPI HexFromBin(LPBYTE,int,LPWSTR);
+ULONG  WINAPI UlFromSzHex(LPCWSTR);
+LPWSTR WINAPI SzFindCh(LPCWSTR,USHORT);
+LPWSTR WINAPI SzFindLastCh(LPCWSTR,USHORT);
+LPWSTR WINAPI SzFindSz(LPCWSTR,LPCWSTR);
+UINT   WINAPI UFromSz(LPCSTR);
+#else
+BOOL  WINAPI FBinFromHex(LPSTR,LPBYTE);
+SCODE WINAPI ScBinFromHexBounded(LPSTR,LPBYTE,ULONG);
+void  WINAPI HexFromBin(LPBYTE,int,LPSTR);
+ULONG WINAPI UlFromSzHex(LPCSTR);
+LPSTR WINAPI SzFindCh(LPCSTR,USHORT);
+LPSTR WINAPI SzFindLastCh(LPCSTR,USHORT);
+LPSTR WINAPI SzFindSz(LPCSTR,LPCSTR);
+UINT  WINAPI UFromSz(LPCSTR);
+#endif
+
+SCODE WINAPI ScInitMapiUtil(ULONG);
+void  WINAPI DeinitMapiUtil(void);
+
+#define szHrDispatchNotifications "_HrDispatchNotifications at 4"
+#define szScCreateConversationIndex "_ScCreateConversationIndex at 16"
+
+typedef HRESULT (WINAPI DISPATCHNOTIFICATIONS)(ULONG);
+typedef DISPATCHNOTIFICATIONS *LPDISPATCHNOTIFICATIONS;
+typedef SCODE (WINAPI CREATECONVERSATIONINDEX)(ULONG,LPBYTE,ULONG*,LPBYTE*);
+typedef CREATECONVERSATIONINDEX *LPCREATECONVERSATIONINDEX;
+
+typedef struct ITableData *LPTABLEDATA;
+
+typedef void (WINAPI CALLERRELEASE)(ULONG,LPTABLEDATA,LPMAPITABLE);
+
+/*****************************************************************************
+ * ITableData interface
+ *
+ * The underlying table data structure for IMAPITable.
+ */
+#define INTERFACE ITableData
+DECLARE_INTERFACE_(ITableData,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** ITableData methods ***/
+    STDMETHOD(HrGetView)(THIS_ LPSSortOrderSet lpSort, CALLERRELEASE *lpRel,
+                         ULONG ulData, LPMAPITABLE *lppTable) PURE;
+    STDMETHOD(HrModifyRow)(THIS_ LPSRow lpRow) PURE;
+    STDMETHOD(HrDeleteRow)(THIS_ LPSPropValue lpKey) PURE;
+    STDMETHOD(HrQueryRow)(THIS_ LPSPropValue lpKey, LPSRow *lppRow, ULONG *lpRowNum) PURE;
+    STDMETHOD(HrEnumRow)(THIS_ ULONG ulRowNum, LPSRow *lppRow) PURE;
+    STDMETHOD(HrNotify)(THIS_ ULONG ulFlags, ULONG cValues, LPSPropValue lpValues) PURE;
+    STDMETHOD(HrInsertRow)(THIS_ ULONG ulRow, LPSRow lpRow) PURE;
+    STDMETHOD(HrModifyRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows) PURE;
+    STDMETHOD(HrDeleteRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows, ULONG *lpCount) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define ITableData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITableData_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define ITableData_Release(p)            (p)->lpVtbl->Release(p)
+        /*** ITableData methods ***/
+#define ITableData_HrGetView(p,a,b,c,d)  (p)->lpVtbl->HrGetView(p,a,b,c,d)
+#define ITableData_HrModifyRow(p,a)      (p)->lpVtbl->HrModifyRow(p,a)
+#define ITableData_HrDeleteRow(p,a)      (p)->lpVtbl->HrDeleteRow(p,a)
+#define ITableData_HrQueryRow(p,a,b,c)   (p)->lpVtbl->HrQueryRow(p,a,b,c)
+#define ITableData_HrEnumRow(p,a,b)      (p)->lpVtbl->HrEnumRow(p,a,b)
+#define ITableData_HrNotify(p,a,b,c)     (p)->lpVtbl->HrNotify(p,a,b,c)
+#define ITableData_HrInsertRow(p,a,b)    (p)->lpVtbl->HrInsertRow(p,a,b)
+#define ITableData_HrModifyRows(p,a,b)   (p)->lpVtbl->HrModifyRows(p,a,b)
+#define ITableData_HrDeleteRows(p,a,b,c) (p)->lpVtbl->HrDeleteRows(p,a,b,c)
+#endif
+
+SCODE WINAPI CreateTable(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*,
+                         LPVOID,ULONG,ULONG,LPSPropTagArray,LPTABLEDATA*);
+
+SCODE WINAPI ScCountNotifications(int,LPNOTIFICATION,ULONG*);
+SCODE WINAPI ScCountProps(int,LPSPropValue,ULONG*);
+SCODE WINAPI ScCopyNotifications(int,LPNOTIFICATION,LPVOID,ULONG*);
+SCODE WINAPI ScCopyProps(int,LPSPropValue,LPVOID,ULONG*);
+SCODE WINAPI ScDupPropset(int,LPSPropValue,LPALLOCATEBUFFER,LPSPropValue*);
+SCODE WINAPI ScRelocNotifications(int,LPNOTIFICATION,LPVOID,LPVOID,ULONG*);
+SCODE WINAPI ScRelocProps(int,LPSPropValue,LPVOID,LPVOID,ULONG*);
+
+LPSPropValue WINAPI LpValFindProp(ULONG,ULONG,LPSPropValue);
+
+static inline FILETIME FtAddFt(FILETIME ftLeft, FILETIME ftRight)
+{
+    LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight;
+    union { FILETIME ft; LONG64 ll; } ftmap;    
+    ftmap.ll = *pl + *pr;
+    return ftmap.ft;
+}
+
+static inline FILETIME FtSubFt(FILETIME ftLeft, FILETIME ftRight)
+{
+    LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight;
+    union { FILETIME ft; LONG64 ll; } ftmap;    
+    ftmap.ll = *pl - *pr;
+    return ftmap.ft;
+}
+
+static inline FILETIME FtNegFt(FILETIME ftLeft)
+{
+    LONG64 *p = (LONG64*)&ftLeft;
+    union { FILETIME ft; LONG64 ll; } ftmap;    
+    ftmap.ll = -*p;
+    return ftmap.ft;
+}
+
+static inline FILETIME FtMulDw(DWORD dwLeft, FILETIME ftRight)
+{
+    LONG64 l = (LONG64)dwLeft, *pr = (LONG64*)&ftRight;
+    union { FILETIME ft; LONG64 ll; } ftmap;    
+    ftmap.ll = l * (*pr);
+    return ftmap.ft;
+}
+
+static inline FILETIME FtMulDwDw(DWORD dwLeft, DWORD dwRight)
+{
+    LONG64 l = (LONG64)dwLeft, r = (LONG64)dwRight;
+    union { FILETIME ft; LONG64 ll; } ftmap;    
+    ftmap.ll = l * r;
+    return ftmap.ft;
+}
+
+/*****************************************************************************
+ * IPropData interface
+ *
+ */
+#define INTERFACE IPropData
+DECLARE_INTERFACE_(IPropData,IMAPIProp)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPIProp methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+                      LPSPropProblemArray *lppProbs) PURE;
+    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+                               LPMAPINAMEID **lpppNames) PURE;
+    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+    /*** IPropData methods ***/
+    STDMETHOD(HrSetObjAccess)(THIS_ ULONG ulAccess) PURE;
+    STDMETHOD(HrSetPropAccess)(THIS_ LPSPropTagArray lpPropTags, ULONG *lpAccess) PURE;
+    STDMETHOD(HrGetPropAccess)(THIS_ LPSPropTagArray *lppPropTags, ULONG **lppAccess) PURE;
+    STDMETHOD(HrAddObjProps)(THIS_ LPSPropTagArray lppPropTags, LPSPropProblemArray *lppProbs) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IPropData_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IPropData_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IPropData_Release(p)                   (p)->lpVtbl->Release(p)
+        /*** IMAPIProp methods ***/
+#define IPropData_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)        
+#define IPropData_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)             
+#define IPropData_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)          
+#define IPropData_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)           
+#define IPropData_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)    
+#define IPropData_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)            
+#define IPropData_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)           
+#define IPropData_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)  
+#define IPropData_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)   
+#define IPropData_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) 
+#define IPropData_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)   
+#define IPropData_HrSetObjAccess(p,a)          (p)->lpVtbl->HrSetObjAccess(p,a)
+#define IPropData_HrSetPropAccess(p,a,b)       (p)->lpVtbl->HrSetPropAccess(p,a,b)
+#define IPropData_HrGetPropAccess(p,a,b)       (p)->lpVtbl->HrGetPropAccess(p,a,b)
+#define IPropData_HrAddObjProps(p,a,b)         (p)->lpVtbl->HrAddObjProps(p,a,b)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIUTIL_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h
new file mode 100644
index 0000000..eaea324
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIVAL_H
+#define MAPIVAL_H
+
+#include <mapiutil.h>
+#include <stddef.h>
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL  WINAPI FBadRglpszW(LPWSTR*,ULONG);
+BOOL  WINAPI FBadRowSet(LPSRowSet);
+BOOL  WINAPI FBadRglpNameID(LPMAPINAMEID*,ULONG);
+BOOL  WINAPI FBadEntryList(LPENTRYLIST);
+ULONG WINAPI FBadRestriction(LPSRestriction);
+ULONG WINAPI FBadPropTag(ULONG);
+ULONG WINAPI FBadRow(LPSRow);
+ULONG WINAPI FBadProp(LPSPropValue);
+ULONG WINAPI FBadSortOrderSet(LPSSortOrderSet);
+ULONG WINAPI FBadColumnSet(LPSPropTagArray);
+
+#define FBadRgPropVal(p,n) FAILED(ScCountProps((n),(p),NULL))
+#define FBadPropVal(p)     FBadRgPropVal(1,(p))
+#define FBadAdrList(p)     FBadRowSet((LPSRowSet)(p))
+
+#define BAD_STANDARD_OBJ(a,b,c,d)         FALSE
+#define FBadUnknown(a)                    FALSE
+#define FBadQueryInterface(a,b,c)         FALSE
+#define FBadAddRef(a)                     FALSE
+#define FBadRelease(a)                    FALSE
+#define FBadGetLastError(a,b,c,d)         FALSE
+#define FBadSaveChanges(a,b)              FALSE
+#define FBadGetProps(a,b,c,d)             FALSE
+#define FBadGetPropList(a,b)              FALSE
+#define FBadOpenProperty(a,b,c,d,e,f)     FALSE
+#define FBadSetProps(a,b,c,d)             FALSE
+#define FBadDeleteProps(a,b,c)            FALSE
+#define FBadCopyTo(a,b,c,d,e,f,g,h,i,j)   FALSE
+#define FBadCopyProps(a,b,c,d,e,f,g,h)    FALSE
+#define FBadGetNamesFromIDs(a,b,c,d,e,f)  FALSE
+#define FBadGetIDsFromNames(a,b,c,d,e)    FALSE
+
+#define ValidateParms(x)   do { } while(0)
+#define UlValidateParms(x) do { } while(0)
+#define CheckParms(x)      do { } while(0)
+
+#define ValidateParameters1(a,b) do { } while(0)
+#define ValidateParameters2(a,b,c) do { } while(0)
+#define ValidateParameters3(a,b,c,d) do { } while(0)
+#define ValidateParameters4(a,b,c,d,e) do { } while(0)
+#define ValidateParameters5(a,b,c,d,e,f) do { } while(0)
+#define ValidateParameters6(a,b,c,d,e,f,g) do { } while(0)
+#define ValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0)
+#define ValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)
+#define ValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)
+#define ValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)
+#define ValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)
+#define ValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)
+#define ValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)
+#define ValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)
+#define ValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)
+#define ValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)
+
+#define UlValidateParameters1(a,b) do { } while(0)
+#define UlValidateParameters2(a,b,c) do { } while(0)
+#define UlValidateParameters3(a,b,c,d) do { } while(0)
+#define UlValidateParameters4(a,b,c,d,e) do { } while(0)
+#define UlValidateParameters5(a,b,c,d,e,f) do { } while(0)
+#define UlValidateParameters6(a,b,c,d,e,f,g) do { } while(0)
+#define UlValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0)
+#define UlValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)
+#define UlValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)
+#define UlValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)
+#define UlValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)
+#define UlValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)
+#define UlValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)
+#define UlValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)
+#define UlValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)
+#define UlValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)
+
+#define CheckParameters1(a,b) do { } while(0)
+#define CheckParameters2(a,b,c) do { } while(0)
+#define CheckParameters3(a,b,c,d) do { } while(0)
+#define CheckParameters4(a,b,c,d,e) do { } while(0)
+#define CheckParameters5(a,b,c,d,e,f) do { } while(0)
+#define CheckParameters6(a,b,c,d,e,f,g) do { } while(0)
+#define CheckParameters7(a,b,c,d,e,f,g,h) do { } while(0)
+#define CheckParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)
+#define CheckParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)
+#define CheckParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)
+#define CheckParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)
+#define CheckParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)
+#define CheckParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)
+#define CheckParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)
+#define CheckParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)
+#define CheckParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIVAL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h
new file mode 100644
index 0000000..74c970b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIX_H
+#define MAPIX_H
+
+#include <mapidefs.h>
+#include <mapicode.h>
+#include <mapiguid.h>
+#include <mapitags.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct IProfAdmin IProfAdmin;
+typedef IProfAdmin *LPPROFADMIN;
+typedef struct IMsgServiceAdmin IMsgServiceAdmin;
+typedef IMsgServiceAdmin *LPSERVICEADMIN;
+typedef struct IMAPISession *LPMAPISESSION;
+
+#ifndef WINE_FLAGS_DEFINED
+#define WINE_FLAGS_DEFINED
+typedef ULONG                   FLAGS;
+#endif
+
+/* Flags for MAPILogon and MAPILogonEx */
+#ifndef MAPI_LOGON_UI
+#define MAPI_LOGON_UI           0x00000001
+#endif
+#ifndef MAPI_NEW_SESSION
+#define MAPI_NEW_SESSION        0x00000002
+#endif
+#define MAPI_ALLOW_OTHERS       0x00000008
+#define MAPI_EXPLICIT_PROFILE   0x00000010
+#ifndef MAPI_EXTENDED
+#define MAPI_EXTENDED           0x00000020
+#endif
+#ifndef MAPI_FORCE_DOWNLOAD
+#define MAPI_FORCE_DOWNLOAD     0x00001000
+#endif
+#ifndef MAPI_PASSWORD_UI
+#define MAPI_PASSWORD_UI        0x00020000
+#endif
+#define MAPI_SERVICE_UI_ALWAYS  0x00002000
+#define MAPI_NO_MAIL            0x00008000
+#define MAPI_NT_SERVICE         0x00010000
+#define MAPI_TIMEOUT_SHORT      0x00100000
+
+#define MAPI_SIMPLE_DEFAULT  (MAPI_LOGON_UI|MAPI_ALLOW_OTHERS|MAPI_FORCE_DOWNLOAD)
+#define MAPI_SIMPLE_EXPLICIT (MAPI_NEW_SESSION|MAPI_EXPLICIT_PROFILE|MAPI_FORCE_DOWNLOAD)
+
+typedef struct tagMAPIINIT_0
+{
+    ULONG ulVersion;
+    ULONG ulFlags;
+} MAPIINIT_0, *LPMAPIINIT_0;
+
+typedef MAPIINIT_0 MAPIINIT, *LPMAPIINIT;
+
+#define MAPI_INIT_VERSION 0U
+
+typedef HRESULT (WINAPI MAPIINITIALIZE)(void*);
+typedef MAPIINITIALIZE *LPMAPIINITIALIZE;
+MAPIINITIALIZE MAPIInitialize;
+
+typedef void (WINAPI MAPIUNINITIALIZE)(void);
+typedef MAPIUNINITIALIZE *LPMAPIUNINITIALIZE;
+MAPIUNINITIALIZE MAPIUninitialize;
+
+#if defined (UNICODE) || defined (__WINESRC__)
+typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPWSTR,LPWSTR,ULONG,LPMAPISESSION*);
+#else
+typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPSTR,LPSTR,ULONG,LPMAPISESSION *);
+#endif
+typedef MAPILOGONEX *LPMAPILOGONEX;
+MAPILOGONEX MAPILogonEx;
+
+typedef SCODE (WINAPI MAPIALLOCATEBUFFER)(ULONG,LPVOID*);
+typedef MAPIALLOCATEBUFFER *LPMAPIALLOCATEBUFFER;
+MAPIALLOCATEBUFFER MAPIAllocateBuffer;
+
+typedef SCODE (WINAPI MAPIALLOCATEMORE)(ULONG,LPVOID,LPVOID*);
+typedef MAPIALLOCATEMORE *LPMAPIALLOCATEMORE;
+MAPIALLOCATEMORE MAPIAllocateMore;
+
+#ifndef MAPIFREEBUFFER_DEFINED
+#define MAPIFREEBUFFER_DEFINED
+typedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID);
+typedef MAPIFREEBUFFER *LPMAPIFREEBUFFER;
+MAPIFREEBUFFER MAPIFreeBuffer;
+#endif
+
+typedef HRESULT (WINAPI MAPIADMINPROFILES)(ULONG,LPPROFADMIN*);
+typedef MAPIADMINPROFILES *LPMAPIADMINPROFILES;
+MAPIADMINPROFILES MAPIAdminProfiles;
+
+/*****************************************************************************
+ * IMAPISession interface
+ */
+#define INTERFACE IMAPISession
+DECLARE_INTERFACE_(IMAPISession,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IMAPISession methods ***/
+    STDMETHOD(GetLastError)(THIS_ HRESULT hResult, ULONG ulFlags, LPMAPIERROR *lppMAPIError) PURE;
+    STDMETHOD(GetMsgStoresTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+    STDMETHOD(OpenMsgStore)(THIS_ ULONG_PTR ulUIParam, ULONG cbId,
+                            LPENTRYID lpId, LPCIID lpIFace, ULONG ulFlags, LPMDB *lppMDB) PURE;
+    STDMETHOD(OpenAddressBook)(THIS_ ULONG_PTR ulUIParam, LPCIID iid, ULONG ulFlags, LPADRBOOK *lppAdrBook) PURE;
+    STDMETHOD(OpenProfileSection)(THIS_ LPMAPIUID lpUID, LPCIID iid, ULONG ulFlags, LPPROFSECT *lppProf) PURE;
+    STDMETHOD(GetStatusTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+    STDMETHOD(OpenEntry)(THIS_ ULONG cbId, LPENTRYID lpId, LPCIID iid,
+                         ULONG ulFlags, ULONG *lpType, LPUNKNOWN *lppUnk) PURE;
+    STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbLID, LPENTRYID lpLID, ULONG cbRID,
+                               LPENTRYID lpRID, ULONG ulFlags, ULONG *lpRes) PURE;
+    STDMETHOD(Advise)(THIS_ ULONG cbId, LPENTRYID lpId, ULONG ulMask,
+                      LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;
+    STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;
+    STDMETHOD(MessageOptions)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, LPSTR lpszAddr, LPMESSAGE lpMsg) PURE;
+    STDMETHOD(QueryDefaultMessageOpt)(THIS_ LPSTR lpszAddr, ULONG ulFlags,
+                                      ULONG *lpcVals, LPSPropValue *lppOpts) PURE;
+    STDMETHOD(EnumAdrTypes)(THIS_ ULONG ulFlags, ULONG *lpcTypes, LPSTR **lpppszTypes) PURE;
+    STDMETHOD(QueryIdentity)(THIS_ ULONG *lpcbId, LPENTRYID *lppEntryID) PURE;
+    STDMETHOD(Logoff)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, ULONG ulReserved) PURE;
+    STDMETHOD(SetDefaultStore)(THIS_ ULONG ulFlags, ULONG cbId, LPENTRYID lpId) PURE;
+    STDMETHOD(AdminServices)(THIS_ ULONG ulFlags, LPSERVICEADMIN *lppAdmin) PURE;
+    STDMETHOD(ShowForm)(THIS_ ULONG_PTR ulUIParam, LPMDB lpStore,
+                        LPMAPIFOLDER lpParent, LPCIID iid, ULONG ulToken,
+                        LPMESSAGE lpSent, ULONG ulFlags, ULONG ulStatus,
+                        ULONG ulMsgFlags, ULONG ulAccess, LPSTR lpszClass) PURE;
+    STDMETHOD(PrepareForm)(THIS_ LPCIID lpIFace, LPMESSAGE lpMsg, ULONG *lpToken) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+        /*** IUnknown methods ***/
+#define IMAPISession_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPISession_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IMAPISession_Release(p)                     (p)->lpVtbl->Release(p)
+        /*** IMAPISession methods ***/
+#define IMAPISession_GetLastError(p,a,b,c)          (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPISession_GetMsgStoresTable(p,a,b)       (p)->lpVtbl->GetMsgStoresTable(p,a,b)
+#define IMAPISession_OpenMsgStore(p,a,b,c,d,e,f)    (p)->lpVtbl->OpenMsgStore(p,a,b,c,d,e,f)
+#define IMAPISession_OpenAddressBook(p,a,b,c,d)     (p)->lpVtbl->OpenAddressBook(p,a,b,c,d)
+#define IMAPISession_OpenProfileSection(p,a,b,c,d)  (p)->lpVtbl->OpenProfileSection(p,a,b,c,d)
+#define IMAPISession_GetStatusTable(p,a,b)          (p)->lpVtbl->GetStatusTable(p,a,b)
+#define IMAPISession_OpenEntry(p,a,b,c,d,e,f)       (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMAPISession_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)
+#define IMAPISession_Advise(p,a,b,c,d,e)            (p)->lpVtbl->Advise(p,a,b,c,d,e)
+#define IMAPISession_Unadvise(p,a)                  (p)->lpVtbl->Unadvise(p,a)
+#define IMAPISession_MessageOptions(p,a,b,c,d)      (p)->lpVtbl->MessageOptions)(p,a,b,c,d)
+#define IMAPISession_QueryDefaultMessageOpt(p,a,b,c,d) \
+                                                    (p)->lpVtbl->QueryDefaultMessageOpt(p,a,b,c,d)
+#define IMAPISession_EnumAdrTypes(p,a,b,c)          (p)->lpVtbl->EnumAdrTypes(p,a,b,c)
+#define IMAPISession_QueryIdentity(p,a,b)           (p)->lpVtbl->QueryIdentity(p,a,b)
+#define IMAPISession_Logoff(p,a,b,c)                (p)->lpVtbl->Logoff(p,a,b,c)
+#define IMAPISession_SetDefaultStore(p,a,b,c)       (p)->lpVtbl->SetDefaultStore(p,a,b,c)
+#define IMAPISession_AdminServices(p,a,b)           (p)->lpVtbl->AdminServices(p,a,b)
+#define IMAPISession_ShowForm(p,a,b,c,d,e,f,g,h,i,j,k) \
+                                                    (p)->lpVtbl->ShowForm(p,a,b,c,d,e,f,g,h,i,j,k)
+#define IMAPISession_PrepareForm(p,a,b,c)           (p)->lpVtbl->PrepareForm(p,a,b,c)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h
new file mode 100644
index 0000000..f767a5c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2001 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define MCI_MCIAVI_PLAY_WINDOW          __MSABI_LONG(0x01000000)
+#define MCI_MCIAVI_PLAY_FULLSCREEN      __MSABI_LONG(0x02000000)
+#define MCI_MCIAVI_PLAY_FULLBY2         __MSABI_LONG(0x04000000)
+
+#define MCI_AVI_STATUS_FRAMES_SKIPPED   __MSABI_LONG(0x8001)
+
+#define MCI_AVI_STATUS_LAST_PLAY_SPEED  __MSABI_LONG(0x8002)
+
+#define MCI_AVI_STATUS_AUDIO_BREAKS     __MSABI_LONG(0x8003)
+
+#define MCI_AVI_SETVIDEO_DRAW_PROCEDURE __MSABI_LONG(0x8000)
+
+#define MCI_AVI_SETVIDEO_PALETTE_COLOR  __MSABI_LONG(0x8100)
+
+#define MCI_AVI_SETVIDEO_PALETTE_HALFTONE __MSABI_LONG(0x0000FFFF)
+
+#define MCIERR_AVI_OLDAVIFORMAT		(MCIERR_CUSTOM_DRIVER_BASE + 100)
+#define MCIERR_AVI_NOTINTERLEAVED	(MCIERR_CUSTOM_DRIVER_BASE + 101)
+#define MCIERR_AVI_NODISPDIB		(MCIERR_CUSTOM_DRIVER_BASE + 102)
+#define MCIERR_AVI_CANTPLAYFULLSCREEN	(MCIERR_CUSTOM_DRIVER_BASE + 103)
+#define MCIERR_AVI_TOOBIGFORVGA		(MCIERR_CUSTOM_DRIVER_BASE + 104)
+#define MCIERR_AVI_NOCOMPRESSOR         (MCIERR_CUSTOM_DRIVER_BASE + 105)
+#define MCIERR_AVI_DISPLAYERROR         (MCIERR_CUSTOM_DRIVER_BASE + 106)
+#define MCIERR_AVI_AUDIOERROR		(MCIERR_CUSTOM_DRIVER_BASE + 107)
+#define MCIERR_AVI_BADPALETTE		(MCIERR_CUSTOM_DRIVER_BASE + 108)
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h
new file mode 100644
index 0000000..1fcf120
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MCX_H
+#define __WINE_MCX_H
+
+typedef struct tagMODEMDEVCAPS {
+       DWORD dwActualSize;
+       DWORD dwRequiredSize;
+       DWORD dwDevSpecificOffset;
+       DWORD dwDevSpecificSize;
+       DWORD dwModemProviderVersion;
+       DWORD dwModemManufacturerOffset;
+       DWORD dwModemManufacturerSize;
+       DWORD dwModemModelOffset;
+       DWORD dwModemModelSize;
+       DWORD dwModemVersionOffset;
+       DWORD dwModemVersionSize;
+       DWORD dwDialOptions;
+       DWORD dwCallSetupFailTimer;
+       DWORD dwInactivityTimeout;
+       DWORD dwSpeakerVolume;
+       DWORD dwSpeakerMode;
+       DWORD dwModemoptions;
+       DWORD dwMaxDTERate;
+       DWORD dwMaxDCERate;
+       BYTE  abVariablePortion[1];
+} MODEMDEVCAPS, *LPMODEMDEVCAPS;
+
+typedef struct tagMODEMSETTINGS {
+       DWORD dwActualSize;
+       DWORD dwRequiredSize;
+       DWORD dwDevSpecificOffset;
+       DWORD dwDevSpecificSize;
+       DWORD dwCallSetupFailTimer;
+       DWORD dwInactivityTimeout;
+       DWORD dwSpeakerVolume;
+       DWORD dwSpeakerMode;
+       DWORD dwPreferredModemOptions;
+       DWORD dwNegotiatedModemOptions;
+       DWORD dwNegotiatedDCERate;
+       BYTE  abVariablePortion[1];
+} MODEMSETTINGS, *LPMODEMSETTINGS;
+
+#endif  /* __WINE_MCX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h
new file mode 100644
index 0000000..f4620b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _MEDIAERR_H_
+#define _MEDIAERR_H_
+
+#define DMO_E_INVALIDSTREAMINDEX   0x80040201
+#define DMO_E_INVALIDTYPE          0x80040202
+#define DMO_E_TYPE_NOT_SET         0x80040203
+#define DMO_E_NOTACCEPTING         0x80040204
+#define DMO_E_TYPE_NOT_ACCEPTED    0x80040205
+#define DMO_E_NO_MORE_ITEMS        0x80040206
+
+#endif /* _MEDIAERR_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl
new file mode 100644
index 0000000..299c423
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ * Copyright (C) 2004 Vincent Béron
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+
+interface IDMOQualityControl;
+interface IDMOVideoOutputOptimizations;
+interface IMediaBuffer;
+interface IMediaObject;
+interface IMediaObjectInPlace;
+
+typedef struct _DMOMediaType
+{
+    GUID majortype;
+    GUID subtype;
+    BOOL bFixedSizeSamples;
+    BOOL bTemporalCompression;
+    ULONG lSampleSize;
+    GUID formattype;
+    IUnknown *pUnk;
+    ULONG cbFormat;
+    BYTE *pbFormat;
+} DMO_MEDIA_TYPE;
+
+/*****************************************************************************
+ * IEnumDMO interface
+ */
+[
+    object,
+    uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F),
+    pointer_default(unique)
+]
+interface IEnumDMO : IUnknown
+{
+    [local]
+    HRESULT Next(
+        [in] DWORD cItemsToFetch,
+        [out] CLSID *pCLSID,
+        [out] WCHAR **Names,
+        [out] DWORD *pcItemsFetched
+    );
+
+    HRESULT Skip(
+        [in] DWORD cItemsToSkip
+    );
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumDMO **ppEnum
+    );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl
new file mode 100644
index 0000000..ea287c5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2010 Vincent Povirk 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "ocidl.idl";
+import "mscoree.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef LoadLibrary")
+cpp_quote("#endif")
+
+typedef enum
+{
+    METAHOST_POLICY_HIGHCOMPAT              = 0,
+    METAHOST_POLICY_APPLY_UPGRADE_POLICY    = 0x08,
+    METAHOST_POLICY_EMULATE_EXE_LAUNCH      = 0x10,
+    METAHOST_POLICY_SHOW_ERROR_DIALOG       = 0x20,
+    METAHOST_POLICY_USE_PROCESS_IMAGE_PATH  = 0x40,
+    METAHOST_POLICY_ENSURE_SKU_SUPPORTED    = 0x80
+} METAHOST_POLICY_FLAGS;
+
+typedef enum
+{
+    CLR_DEBUGGING_MANAGED_EVENT_PENDING     = 1
+} CLR_DEBUGGING_PROCESS_FLAGS;
+
+typedef struct _CLR_DEBUGGING_VERSION
+{
+    WORD wStructVersion;
+    WORD wMajor;
+    WORD wMinor;
+    WORD wBuild;
+    WORD wRevision;
+} CLR_DEBUGGING_VERSION;
+
+[
+    object,
+    local,
+    uuid(bd39d1d2-ba2f-486a-89b0-b4b0cb466891)
+]
+interface ICLRRuntimeInfo : IUnknown
+{
+    HRESULT GetVersionString(
+        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+        [in, out] DWORD *pcchBuffer);
+
+    HRESULT GetRuntimeDirectory(
+        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+        [in, out] DWORD *pcchBuffer);
+
+    HRESULT IsLoaded(
+        [in] HANDLE hndProcess,
+        [out, retval] BOOL *pbLoaded);
+
+    HRESULT LoadErrorString(
+        [in] UINT iResourceID,
+        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+        [in, out] DWORD *pcchBuffer,
+        [in] LONG iLocaleid);
+
+    HRESULT LoadLibrary(
+        [in] LPCWSTR pwzDllName,
+        [out, retval] HMODULE *phndModule);
+
+    HRESULT GetProcAddress(
+        [in] LPCSTR pszProcName,
+        [out, retval] LPVOID *ppProc);
+
+    HRESULT GetInterface(
+        [in] REFCLSID rclsid,
+        [in] REFIID riid,
+        [out, iid_is(riid), retval] LPVOID *ppUnk);
+
+    HRESULT IsLoadable(
+        [out, retval] BOOL *pbLoadable);
+
+    HRESULT SetDefaultStartupFlags(
+        [in] DWORD dwStartupFlags,
+        [in] LPCWSTR pwzHostConfigFile);
+
+    HRESULT GetDefaultStartupFlags(
+        [out] DWORD *pdwStartupFlags,
+        [out, size_is(*pcchHostConfigFile)] LPWSTR pwzHostConfigFile,
+        [in, out] DWORD *pcchHostConfigFile);
+
+    HRESULT BindAsLegacyV2Runtime();
+
+    HRESULT IsStarted(
+        [out] BOOL *pbStarted,
+        [out] DWORD *pdwStartupFlags);
+};
+
+typedef HRESULT (__stdcall *CallbackThreadSetFnPtr)();
+typedef HRESULT (__stdcall *CallbackThreadUnsetFnPtr)();
+
+typedef void (__stdcall *RuntimeLoadedCallbackFnPtr)(
+    ICLRRuntimeInfo *pRuntimeInfo,
+    CallbackThreadSetFnPtr pfnCallbackThreadSet,
+    CallbackThreadUnsetFnPtr pfnCallbackThreadUnset);
+
+cpp_quote("DEFINE_GUID(CLSID_CLRDebuggingLegacy, 0xDF8395B5,0xA4BA,0x450b,0xA7,0x7C,0xA9,0xA4,0x77,0x62,0xC5,0x20);")
+cpp_quote("DEFINE_GUID(CLSID_CLRMetaHost, 0x9280188d,0x0e8e,0x4867,0xb3,0x0c,0x7f,0xa8,0x38,0x84,0xe8,0xde);")
+
+[
+    object,
+    local,
+    uuid(d332db9e-b9b3-4125-8207-a14884f53216)
+]
+interface ICLRMetaHost : IUnknown
+{
+    HRESULT GetRuntime(
+        [in] LPCWSTR pwzVersion,
+        [in] REFIID iid,
+        [out, iid_is(iid), retval] LPVOID *ppRuntime);
+
+    HRESULT GetVersionFromFile(
+        [in] LPCWSTR pwzFilePath,
+        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+        [in, out] DWORD *pcchBuffer);
+
+    HRESULT EnumerateInstalledRuntimes(
+        [out, retval] IEnumUnknown **ppEnumerator);
+
+    HRESULT EnumerateLoadedRuntimes(
+        [in] HANDLE hndProcess,
+        [out, retval] IEnumUnknown **ppEnumerator);
+
+    HRESULT RequestRuntimeLoadedNotification(
+        [in] RuntimeLoadedCallbackFnPtr pCallbackFunction);
+
+    HRESULT QueryLegacyV2RuntimeBinding(
+        [in] REFIID riid,
+        [out, iid_is(riid), retval] LPVOID *ppUnk);
+
+    HRESULT ExitProcess(
+        [in] INT32 iExitCode);
+};
+
+[
+    object,
+    local,
+    uuid(e2190695-77b2-492e-8e14-c4b3a7fdd593)
+]
+interface ICLRMetaHostPolicy : IUnknown
+{
+    HRESULT GetRequestedRuntime([in] METAHOST_POLICY_FLAGS dwPolicyFlags,
+        [in] LPCWSTR pwzBinary, [in] IStream *pCfgStream,
+        [in, out] LPWSTR pwzVersion, [in, out] DWORD *pcchVersion,
+        [out] LPWSTR pwzImageVersion, [out, in] DWORD *pcchImageVersion,
+        [out] DWORD *pdwConfigFlags, [in] REFIID riid, [retval, out] LPVOID *ppRuntime);
+}
+
+[
+    uuid(2ebcd49a-1b47-4a61-b13a-4a03701e594b)
+]
+coclass CLRMetaHostPolicy
+{
+    [default] interface ICLRMetaHostPolicy;
+}
+
+[
+    object,
+    local,
+    uuid(3151c08d-4d09-4f9b-8838-2880bf18fe51)
+]
+interface ICLRDebuggingLibraryProvider : IUnknown
+{
+    HRESULT ProvideLibrary([in] const WCHAR *pwszFileName,
+            [in] DWORD dwTimestamp, [in] DWORD dwSizeOfImage,
+            [out] HMODULE *phModule);
+}
+
+[
+    object,
+    local,
+    uuid(d28f3c5a-9634-4206-a509-477552eefb10)
+]
+interface ICLRDebugging : IUnknown
+{
+    HRESULT OpenVirtualProcess([in] ULONG64 moduleBaseAddress,
+            [in] IUnknown *pDataTarget, [in] ICLRDebuggingLibraryProvider *pLibraryProvider,
+            [in] CLR_DEBUGGING_VERSION *pMaxDebuggerSupportedVersion,
+            [in] REFIID riidProcess, [out] IUnknown **ppProcess,
+            [out, in] CLR_DEBUGGING_VERSION *pVersion,
+            [out] CLR_DEBUGGING_PROCESS_FLAGS *pdwFlags);
+
+    HRESULT CanUnloadNow(HMODULE hModule);
+}
+
+cpp_quote("HRESULT WINAPI CLRCreateInstance(REFCLSID clsid, REFIID riid, LPVOID *ppInterface);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h
new file mode 100644
index 0000000..a8517cc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h
@@ -0,0 +1,142 @@
+/*
+ * NDR Serialization Services
+ *
+ * Copyright (c) 2007 Robert Shearman 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MIDLES_H__
+#define __WINE_MIDLES_H__
+
+#include <rpcndr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+    MES_ENCODE,
+    MES_DECODE
+} MIDL_ES_CODE;
+
+typedef enum
+{
+    MES_INCREMENTAL_HANDLE,
+    MES_FIXED_BUFFER_HANDLE,
+    MES_DYNAMIC_BUFFER_HANDLE
+} MIDL_ES_HANDLE_STYLE;
+
+typedef void (__RPC_USER * MIDL_ES_ALLOC)(void *,char **,unsigned int *);
+typedef void (__RPC_USER * MIDL_ES_WRITE)(void *,char *,unsigned int);
+typedef void (__RPC_USER * MIDL_ES_READ)(void *,char **,unsigned int *);
+
+typedef struct _MIDL_ES_MESSAGE
+{
+    MIDL_STUB_MESSAGE       StubMsg;
+    MIDL_ES_CODE            Operation;
+    void                   *UserState;
+    ULONG                   MesVersion : 8;
+    ULONG                   HandleStyle : 8;
+    ULONG                   HandleFlags : 8;
+    ULONG                   Reserve : 8;
+    MIDL_ES_ALLOC           Alloc;
+    MIDL_ES_WRITE           Write;
+    MIDL_ES_READ            Read;
+    unsigned char          *Buffer;
+    ULONG                   BufferSize;
+    unsigned char         **pDynBuffer;
+    ULONG                  *pEncodedSize;
+    RPC_SYNTAX_IDENTIFIER   InterfaceId;
+    ULONG                   ProcNumber;
+    ULONG                   AlienDataRep;
+    ULONG                   IncrDataSize;
+    ULONG                   ByteCount;
+} MIDL_ES_MESSAGE, *PMIDL_ES_MESSAGE;
+
+typedef PMIDL_ES_MESSAGE MIDL_ES_HANDLE;
+
+typedef struct _MIDL_TYPE_PICKLING_INFO
+{
+    ULONG       Version;
+    ULONG       Flags;
+    UINT_PTR    Reserved[3];
+} MIDL_TYPE_PICKLING_INFO, *PMIDL_TYPE_PICKLING_INFO;
+
+RPC_STATUS RPC_ENTRY
+ MesEncodeIncrementalHandleCreate(void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesDecodeIncrementalHandleCreate(void *,MIDL_ES_READ,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesIncrementalHandleReset(handle_t,void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,MIDL_ES_READ,MIDL_ES_CODE);
+
+RPC_STATUS RPC_ENTRY
+ MesEncodeFixedBufferHandleCreate(char *,ULONG,ULONG *,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesEncodeDynBufferHandleCreate(char **,ULONG *,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesDecodeBufferHandleCreate(char *,ULONG,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesBufferHandleReset(handle_t,ULONG,MIDL_ES_CODE,char **,ULONG,ULONG *);
+
+RPC_STATUS RPC_ENTRY
+ MesHandleFree(handle_t);
+
+RPC_STATUS RPC_ENTRY
+ MesInqProcEncodingId(handle_t,PRPC_SYNTAX_IDENTIFIER,ULONG *);
+
+SIZE_T RPC_ENTRY
+ NdrMesSimpleTypeAlignSize(handle_t);
+void RPC_ENTRY
+ NdrMesSimpleTypeDecode(handle_t,void *,short);
+void RPC_ENTRY
+ NdrMesSimpleTypeEncode(handle_t,const MIDL_STUB_DESC *,const void *,short);
+
+SIZE_T RPC_ENTRY
+ NdrMesTypeAlignSize(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeEncode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);
+
+SIZE_T RPC_ENTRY
+ NdrMesTypeAlignSize2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeEncode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeDecode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);
+void RPC_ENTRY
+ NdrMesTypeFree2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);
+
+void RPC_VAR_ENTRY
+ NdrMesProcEncodeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...);
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+ NdrMesProcEncodeDeocde2(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MIDLES_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl
new file mode 100644
index 0000000..97cd1ab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+[
+  local,
+  object,
+  uuid(f77459a0-bf9a-11cf-ba4e-00c04fd70816),
+  pointer_default(unique)
+]
+interface IMimeInfo : IUnknown
+{
+    typedef [unique] IMimeInfo *LPMIMEINFO;
+
+    HRESULT GetMimeCLSIDMapping( [out] UINT      *pcTypes,
+                                 [out] LPCSTR  * *ppszTypes,
+                                 [out] CLSID   * *ppclsID );
+}
+
+cpp_quote("#define SID_IMimeInfo IID_IMimeInfo")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl
new file mode 100644
index 0000000..b69dd26
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl
@@ -0,0 +1,1346 @@
+/*
+ * Copyright 2007 Robert Shearman 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "objidl.idl";
+import "propidl.idl";
+
+#define DECLARE_HANDLE(name) typedef void *name
+
+interface IMimeMessageCallback;
+interface IMimeEnumAddressTypes;
+interface IMimeMessageParts;
+interface IMimeMessageTree;
+interface IMimeBody;
+interface IMimeEnumProperties;
+
+cpp_quote("DEFINE_GUID(CLSID_IMimeBody,      0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeMessage,   0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeSecurity,  0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+
+cpp_quote("#define MIME_E_REG_CREATE_KEY         0x800cce01")
+cpp_quote("#define MIME_E_REG_QUERY_INFO         0x800cce02")
+cpp_quote("#define MIME_E_INVALID_ENCTYPE        0x800cce03")
+cpp_quote("#define MIME_E_BOUNDARY_MISMATCH      0x800cce04")
+cpp_quote("#define MIME_E_NOT_FOUND              0x800cce05")
+cpp_quote("#define MIME_E_NO_DATA                0x800cce05")
+cpp_quote("#define MIME_E_BUFFER_TOO_SMALL       0x800cce06")
+cpp_quote("#define MIME_E_INVALID_ITEM_FLAGS     0x800cce07")
+cpp_quote("#define MIME_E_ONE_LINE_ITEME         0x800cce08")
+cpp_quote("#define MIME_E_INVALID_HANDLE         0x800cce09")
+cpp_quote("#define MIME_E_CHARSET_TRANSLATE      0x800cce0a")
+cpp_quote("#define MIME_E_NOT_INITIALIZED        0x800cce0b")
+
+cpp_quote("#define MIME_E_INVALID_CHARSET_TYPE   0x800cce31")
+
+cpp_quote("#define MIME_E_INVALID_TEXT_TYPE      0x800cce38")
+
+cpp_quote("#define MIME_E_SECURITY_NOOP          0x800cceb1")
+cpp_quote("#define MIME_S_SECURITY_NOOP          0x000cceb1")
+
+cpp_quote("typedef enum tagMIMEPROPID {")
+cpp_quote("    PID_HDR_NEWSGROUP  = 2,")
+cpp_quote("    PID_HDR_NEWSGROUPS = 3,")
+cpp_quote("    PID_HDR_REFS       = 4,")
+cpp_quote("    PID_HDR_SUBJECT    = 5,")
+cpp_quote("    PID_HDR_FROM       = 6,")
+cpp_quote("    PID_HDR_MESSAGEID  = 7,")
+cpp_quote("    PID_HDR_RETURNPATH = 8,")
+cpp_quote("    PID_HDR_RR         = 9,")
+cpp_quote("    PID_HDR_RETRCPTO   = 10,")
+cpp_quote("    PID_HDR_APPARTO    = 11,")
+cpp_quote("    PID_HDR_DATE       = 12,")
+cpp_quote("    PID_HDR_RECEIVED   = 13,")
+cpp_quote("    PID_HDR_REPLYTO    = 14,")
+cpp_quote("    PID_HDR_XMAILER    = 15,")
+cpp_quote("    PID_HDR_BCC        = 16,")
+cpp_quote("    PID_HDR_MIMEVER    = 17,")
+cpp_quote("    PID_HDR_CNTTYPE    = 18,")
+cpp_quote("    PID_HDR_CNTXFER    = 19,")
+cpp_quote("    PID_HDR_CNTID      = 20,")
+cpp_quote("    PID_HDR_CNTDESC    = 21,")
+cpp_quote("    PID_HDR_CNTDISP    = 22,")
+cpp_quote("    PID_HDR_CNTBASE    = 23,")
+cpp_quote("    PID_HDR_CNTLOC     = 24,")
+cpp_quote("    PID_HDR_TO         = 25,")
+cpp_quote("    PID_HDR_PATH       = 26,")
+cpp_quote("    PID_HDR_FOLLOWUPTO = 27,")
+cpp_quote("    PID_HDR_EXPIRES    = 28,")
+cpp_quote("    PID_HDR_CC         = 29,")
+
+cpp_quote("    PID_HDR_SENDER     = 61,")
+
+cpp_quote("    PID_HDR_INREPLYTO  = 77,")
+cpp_quote("} MIMEPROPID;")
+
+cpp_quote("#define TYPEDID_MASK                  ((ULONG)0xffff)")
+cpp_quote("#define TYPEDID_TYPE(t)               ((VARTYPE)((t) & TYPEDID_MASK))")
+
+cpp_quote("#define OID_HIDE_TNEF_ATTACHMENTS     (0x000e0000 | VT_BOOL)")
+cpp_quote("#define OID_SECURITY_TYPE             (0x00180000 | VT_UI4)")
+cpp_quote("#define OID_SECURITY_HWND_OWNER       (0x00320000 | VT_UI4)")
+cpp_quote("#define OID_HEADER_RELOAD_TYPE        (0x00370000 | VT_UI4)")
+cpp_quote("#define OID_SHOW_MACBINARY            (0x00390000 | VT_BOOL)")
+
+
+[
+    uuid(e4b28371-83b0-11d0-8259-00c04fd85ab4),
+    version(1.0)
+]
+library MIMEOLE
+{
+    importlib("stdole2.tlb");
+
+    DECLARE_HANDLE(HCHARSET);
+    DECLARE_HANDLE(HBODY);
+    DECLARE_HANDLE(HHEADERROW);
+
+    typedef HCHARSET *LPHCHARSET;
+    typedef HBODY *LPHBODY;
+    typedef HHEADERROW *LPHHEADERROW;
+    typedef DWORD TYPEDID;
+    typedef const PROPVARIANT *LPCPROPVARIANT;
+    typedef const BLOB *LPCBLOB;
+
+    typedef enum tagRELOADTYPE
+    {
+        RELOAD_HEADER_NONE,
+        RELOAD_HEADER_RESET,
+        RELOAD_HEADER_APPEND,
+        RELOAD_HEADER_REPLACE,
+    } RELOADTYPE;
+
+    typedef enum tagMIMESAVETYPE
+    {
+        SAVE_RFC822,
+        SAVE_RFC1521,
+    } MIMESAVETYPE;
+
+    typedef enum tagCSETAPPLYTYPE
+    {
+        CSET_APPLY_UNTAGGED,
+        CSET_APPLY_ALL,
+        CSET_APPLY_TAG_ALL,
+    } CSETAPPLYTYPE;
+
+    typedef enum tagENCODINGTYPE
+    {
+        IET_BINARY,
+        IET_BASE64,
+        IET_UUENCODE,
+        IET_QP,
+        IET_7BIT,
+        IET_8BIT,
+        IET_INETCSET,
+        IET_UNICODE,
+        IET_RFC1522,
+        IET_ENCODED,
+        IET_CURRENT,
+        IET_UNKNOWN,
+        IET_BINHEX40,
+        IET_LAST
+    } ENCODINGTYPE;
+
+    const SHORT IET_DECODED = IET_BINARY;
+
+    const SHORT CCHMAX_HEADER_LINE = 1000;
+
+    [
+        uuid(c5588349-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeInternational : IUnknown
+    {
+        typedef [unique] IMimeInternational *LPMIMEINTERNATIONAL;
+        typedef DWORD CODEPAGEID;
+
+        const CODEPAGEID CP_USASCII = 1252;
+        const CODEPAGEID CP_UNICODE = 1200;
+        const CODEPAGEID CP_JAUTODETECT = 50932;
+        const CODEPAGEID CP_KAUTODETECT = 50949;
+        const CODEPAGEID CP_ISO2022JPESC = 50221;
+        const CODEPAGEID CP_ISO2022JPSIO = 50222;
+
+        const SHORT CCHMAX_CSET_NAME = 128;
+        const SHORT CCHMAX_LANG_NAME = 128;
+        const SHORT CCHMAX_FACE_NAME = 128;
+
+        typedef struct tagINETCSETINFO
+        {
+            CHAR        szName[CCHMAX_CSET_NAME];
+            HCHARSET    hCharset;
+            CODEPAGEID  cpiWindows;
+            CODEPAGEID  cpiInternet;
+            DWORD       dwReserved1;
+        } INETCSETINFO, *LPINETCSETINFO;
+
+        typedef enum tagINETLANGMASK
+        {
+            ILM_FAMILY          = 0x01,
+            ILM_NAME            = 0x02,
+            ILM_BODYCSET        = 0x04,
+            ILM_HEADERCSET      = 0x08,
+            ILM_WEBCSET         = 0x10,
+            ILM_FIXEDFONT       = 0x20,
+            ILM_VARIABLEFONT    = 0x40,
+        } INETLANGMASK;
+
+        typedef struct tagCODEPAGEINFO
+        {
+            DWORD dwMask;
+            CODEPAGEID cpiCodePage;
+            BOOL fIsValidCodePage;
+            ULONG ulMaxCharSize;
+            BOOL fInternetCP;
+            CODEPAGEID cpiFamily;
+            CHAR szName[CCHMAX_LANG_NAME];
+            CHAR szBodyCset[CCHMAX_CSET_NAME];
+            CHAR szHeaderCset[CCHMAX_CSET_NAME];
+            CHAR szWebCset[CCHMAX_CSET_NAME];
+            CHAR szFixedFont[CCHMAX_FACE_NAME];
+            CHAR szVariableFont[CCHMAX_FACE_NAME];
+            ENCODINGTYPE ietNewsDefault;
+            ENCODINGTYPE ietMailDefault;
+            DWORD dwReserved1;
+        } CODEPAGEINFO, *LPCODEPAGEINFO;
+
+        typedef struct tagRFC1522INFO
+        {
+            BOOL fRfc1522Allowed;
+            BOOL fRfc1522Used;
+            BOOL fAllow8bit;
+            HCHARSET hRfc1522Cset;
+        } RFC1522INFO, *LPRFC1522INFO;
+
+        typedef enum tagCHARSETTYPE
+        {
+            CHARSET_BODY,
+            CHARSET_HEADER,
+            CHARSET_WEB,
+        } CHARSETTYPE;
+
+
+        HRESULT SetDefaultCharset(
+            [in]        HCHARSET hCharset);
+        HRESULT GetDefaultCharset(
+            [out]       LPHCHARSET phCharset);
+        HRESULT GetCodePageCharset(
+            [in]        CODEPAGEID cpiCodePage,
+            [in]        CHARSETTYPE ctCsetType,
+            [out]       LPHCHARSET phCharset);
+        HRESULT FindCharset(
+            [in]        LPCSTR pszCharset,
+            [out]       LPHCHARSET phCharset);
+        HRESULT GetCharsetInfo(
+            [in]        HCHARSET hCharset,
+            [in, out]   LPINETCSETINFO pCsetInfo);
+        HRESULT GetCodePageInfo(
+            [in]        CODEPAGEID cpiCodePage,
+            [in, out]   LPCODEPAGEINFO pCodePageInfo);
+        HRESULT CanConvertCodePages(
+            [in]        CODEPAGEID cpiSource,
+            [in]        CODEPAGEID cpiDest);
+        HRESULT DecodeHeader(
+            [in]        HCHARSET hCharset,
+            [in]        LPCSTR pszData,
+            [in, out]   LPPROPVARIANT pDecoded,
+            [in, out]   LPRFC1522INFO pRfc1522Info);
+        HRESULT EncodeHeader(
+            [in]        HCHARSET hCharset,
+            [in]        LPPROPVARIANT pData,
+            [out]       LPSTR *ppszEncoded,
+            [in, out]   LPRFC1522INFO pRfc1522Info);
+        HRESULT ConvertBuffer(
+            [in]        CODEPAGEID cpiSource,
+            [in]        CODEPAGEID cpiDest,
+            [in]        LPBLOB pIn,
+            [in, out]   LPBLOB pOut,
+            [out]       ULONG *pcbRead);
+        HRESULT ConvertString(
+            [in]        CODEPAGEID cpiSource,
+            [in]        CODEPAGEID cpiDest,
+            [in]        LPPROPVARIANT pIn,
+            [in, out]   LPPROPVARIANT pOut);
+        HRESULT MLANG_ConvertInetReset(void);
+        HRESULT MLANG_ConvertInetString(
+            [in]        CODEPAGEID cpiSource,
+            [in]        CODEPAGEID cpiDest,
+            [in]        LPCSTR pSource,
+            [in]        int *pnSizeOfSource,
+            [in,out,unique]  LPSTR pDestination,
+            [in]        int *pnDstSize);
+        HRESULT Rfc1522Decode(
+            [in]        LPCSTR pszValue,
+            [in,ref]    LPSTR pszCharset,
+            [in]        ULONG cchmax,
+            [out]       LPSTR *ppszDecoded);
+        HRESULT Rfc1522Encode(
+            [in]        LPCSTR pszValue,
+            [in]        HCHARSET hCharset,
+            [out]       LPSTR *ppszEncoded);
+    }
+
+    [
+        uuid(c5588353-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeSecurity : IUnknown
+    {
+        typedef [unique] IMimeSecurity *LPMIMESECURITY;
+
+        cpp_quote("#ifdef __WINE_WINCRYPT_H")
+        cpp_quote("typedef PCCERT_CONTEXT PCX509CERT;")
+        cpp_quote("#else")
+        typedef const void *PCX509CERT;
+        typedef void *HCERTSTORE;
+        cpp_quote("#endif")
+
+        typedef BLOB THUMBBLOB;
+        typedef void *HCAPICERTSTORE;
+
+        cpp_quote("#define MST_NONE             0x00000000")
+        cpp_quote("#define MST_THIS_SIGN        0x00000001")
+        cpp_quote("#define MST_THIS_ENCRYPT     0x00000002")
+        cpp_quote("#define MST_BLOB_FLAG        0x00000004")
+        cpp_quote("#define MST_THIS_BLOBSIGN    (MST_BLOB_FLAG | MST_THIS_SIGN)")
+        cpp_quote("#define MST_CHILD_SIGN       0x00000100")
+        cpp_quote("#define MST_CHILD_ENCRYPT    0x00000200")
+        cpp_quote("#define MST_SUBMSG_SIGN      0x00001000")
+        cpp_quote("#define MST_SUBMSG_ENCRYPT   0x00002000")
+        cpp_quote("#define MST_RECEIPT_REQUEST  0x00010000")
+        cpp_quote("#define MST_CLASS_SMIME_V1   0x00000000")
+        cpp_quote("#define MST_CLASS_PGP        0x01000000")
+
+        typedef enum tagCERTSTATE
+        {
+            CERTIFICATE_OK,
+            CERTIFICATE_NOT_PRESENT,
+            CERTIFICATE_EXPIRED,
+            CERTIFICATE_CHAIN_TOO_LONG,
+            CERTIFICATE_MISSING_ISSUER,
+            CERTIFICATE_CRL_LISTED,
+            CERTIFICATE_NOT_TRUSTED,
+            CERTIFICATE_INVALID,
+            CERTIFICATE_ERROR,
+            CERTIFICATE_NOPRINT,
+            CERTIFICATE_UNKNOWN
+        } CERTSTATE;
+
+        typedef enum tagCERTNAMETYPE
+        {
+            SIMPLE,
+            OID,
+            X500,
+        } CERTNAMETYPE;
+
+        typedef enum tagCERTDATAID
+        {
+            CDID_EMAIL,
+            CDID_MAX
+        } CERTDATAID;
+
+        typedef struct tagX509CERTRESULT
+        {
+            DWORD       cEntries;
+            CERTSTATE  *rgcs;
+            PCX509CERT *rgpCert;
+        } X509CERTRESULT, *PX509CERTRESULT;
+        typedef const X509CERTRESULT *PCX509CERTRESULT;
+
+        HRESULT InitNew(void);
+
+        HRESULT CheckInit(void);
+
+        HRESULT EncodeMessage(
+            [in]    IMimeMessageTree */*const*/ pTree,
+            [in]    DWORD dwFlags);
+
+        HRESULT EncodeBody(
+            [in]    IMimeMessageTree */*const*/ pTree,
+            [in]    HBODY hEncodeRoot,
+            [in]    DWORD dwFlags);
+
+        HRESULT DecodeMessage(
+            [in]    IMimeMessageTree */*const*/ pTree,
+            [in]    DWORD dwFlags);
+
+        HRESULT DecodeBody(
+            [in]    IMimeMessageTree */*const*/ pTree,
+            [in]    HBODY hDecodeRoot,
+            [in]    DWORD dwFlags);
+
+        HRESULT EnumCertificates(
+            [in]    HCAPICERTSTORE hc,
+            [in]    DWORD dwUsage,
+            [in]    PCX509CERT pPrev,
+            [out]   PCX509CERT *ppCert);
+
+        HRESULT GetCertificateName(
+            [in]    const PCX509CERT pX509Cert,
+            [in]    const CERTNAMETYPE cn,
+            [out]   LPSTR *ppszName);
+
+        HRESULT GetMessageType(
+            [in]    const HWND hwndParent,
+            [in]    IMimeBody */*const*/ pBody,
+            [out]   DWORD */*const*/ pdwSecType);
+
+        HRESULT GetCertData(
+            [in]        const PCX509CERT pX509Cert,
+            [in]        const CERTDATAID dataid,
+            [out, ref]  LPPROPVARIANT pValue);
+    }
+
+    [
+        uuid(fd853cd1-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeHeaderTable : IPersistStream
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(fd853cec-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimePropertySchema : IUnknown
+    {
+        typedef enum tagMIMEPROPFLAGS
+        {
+            MPF_INETCSET            = 0x01,
+            MPF_RFC1522             = 0x02,
+            MPF_ADDRESS             = 0x04,
+            MPF_HASPARAMS           = 0x08,
+            MPF_MIME                = 0x10,
+            MPF_READONLY            = 0x20
+        } MIMEPROPFLAGS;
+
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(fd853cd3-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimePropertySet : IPersistStreamInit
+    {
+        typedef [unique] IMimePropertySet *LPMIMEPROPERTYSET;
+
+        cpp_quote("#define PDF_ENCODED              0x00000001")
+        cpp_quote("#define PDF_NAMEINDATA           0x00000002")
+        cpp_quote("#define PDF_HEADERFORMAT        (0x00000004 | PDF_ENCODED)")
+        cpp_quote("#define PDF_NOCOMMENTS           0x00000008")
+        cpp_quote("#define PDF_SAVENOENCODE         0x00000010")
+        cpp_quote("#define PDF_VECTOR               0x00000020")
+
+        typedef struct tagMIMEPARAMINFO
+        {
+            LPSTR           pszName;
+            LPSTR           pszData;
+        } MIMEPARAMINFO, *LPMIMEPARAMINFO;
+
+        typedef enum tagPROPINFOMASK
+        {
+            PIM_CHARSET           = 0x01,
+            PIM_ENCODINGTYPE      = 0x02,
+            PIM_ROWNUMBER         = 0x04,
+            PIM_FLAGS             = 0x08,
+            PIM_PROPID            = 0x10,
+            PIM_VALUES            = 0x20,
+            PIM_VTDEFAULT         = 0x40,
+            PIM_VTCURRENT         = 0x80
+        } PROPINFOMASK;
+
+        typedef struct tagMIMEPROPINFO
+        {
+            DWORD           dwMask;
+            HCHARSET        hCharset;
+            ENCODINGTYPE    ietEncoding;
+            DWORD           dwRowNumber;
+            DWORD           dwFlags;
+            DWORD           dwPropId;
+            DWORD           cValues;
+            VARTYPE         vtDefault;
+            VARTYPE         vtCurrent;
+        } MIMEPROPINFO, *LPMIMEPROPINFO;
+        typedef const MIMEPROPINFO *LPCMIMEPROPINFO;
+
+        HRESULT GetPropInfo(
+            [in]        LPCSTR               pszName,
+            [in,out]    LPMIMEPROPINFO       pInfo);
+
+        HRESULT SetPropInfo(
+            [in]        LPCSTR               pszName,
+            [in]        LPCMIMEPROPINFO      pInfo);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetProp")
+cpp_quote("#undef SetProp")
+cpp_quote("#undef EnumProps")
+cpp_quote("#endif")
+        HRESULT GetProp(
+            [in]        LPCSTR               pszName,
+            [in]        DWORD                dwFlags,
+            [in,out]    LPPROPVARIANT        pValue);
+
+        HRESULT SetProp(
+            [in]        LPCSTR               pszName,
+            [in]        DWORD                dwFlags,
+            [in]        LPCPROPVARIANT       pValue);
+
+        HRESULT AppendProp(
+            [in]        LPCSTR               pszName,
+            [in]        DWORD                dwFlags,
+            [in]        LPPROPVARIANT        pValue);
+
+        HRESULT DeleteProp(
+            [in]        LPCSTR               pszName);
+
+        HRESULT CopyProps(
+            [in]        ULONG                cNames,
+            [in,unique] LPCSTR               *prgszName,
+            [in]        IMimePropertySet     *pPropertySet);
+
+        HRESULT MoveProps(
+            [in]        ULONG                cNames,
+            [in]        LPCSTR               *prgszName,
+            [in]        IMimePropertySet     *pPropertySet);
+
+        HRESULT DeleteExcept(
+            [in]        ULONG                cNames,
+            [in]        LPCSTR               *prgszName);
+
+        HRESULT QueryProp(
+            [in]        LPCSTR               pszName,
+            [in]        LPCSTR               pszCriteria,
+            [in]        boolean              fSubString,
+            [in]        boolean              fCaseSensitive);
+
+        HRESULT GetCharset(
+            [out]       LPHCHARSET           phCharset);
+
+        HRESULT SetCharset(
+            [in]        HCHARSET             hCharset,
+            [in]        CSETAPPLYTYPE        applytype);
+
+        HRESULT GetParameters(
+            [in]        LPCSTR               pszName,
+            [out]       ULONG                *pcParams,
+            [out]       LPMIMEPARAMINFO      *pprgParam);
+
+        HRESULT IsContentType(
+            [in]        LPCSTR               pszPriType,
+            [in,unique] LPCSTR               pszSubType);
+
+        HRESULT BindToObject(
+            [in]        REFIID               riid,
+            [out,iid_is(riid)] void          **ppvObject);
+
+        HRESULT Clone(
+            [out]       IMimePropertySet     **ppPropertySet);
+
+        HRESULT SetOption(
+            [in]        const TYPEDID        oid,
+            [in]        LPCPROPVARIANT       pValue);
+
+        HRESULT GetOption(
+            [in]        const TYPEDID        oid,
+            [in,out]    LPPROPVARIANT        pValue);
+
+        cpp_quote("#define EPF_NONAME 0x00000001")
+
+        HRESULT EnumProps(
+            [in]        DWORD                dwFlags,
+            [out]       IMimeEnumProperties  **ppEnum);
+
+    }
+
+    [
+        uuid(c558834a-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeAddressTable : IUnknown
+    {
+        typedef [unique] IMimeAddressTable *LPMIMEADDRESSTABLE;
+
+        DECLARE_HANDLE(HADDRESS);
+        typedef HADDRESS *LPHADDRESS;
+        typedef DWORD IADDRESSTYPE;
+
+        typedef enum tagADDRESSFORMAT
+        {
+            AFT_DISPLAY_FRIENDLY,
+            AFT_DISPLAY_EMAIL,
+            AFT_DISPLAY_BOTH,
+            AFT_RFC822_DECODED,
+            AFT_RFC822_ENCODED,
+            AFT_RFC822_TRANSMIT,
+        } ADDRESSFORMAT;
+
+        typedef struct tagADDRESSPROPS
+        {
+            DWORD           dwProps;
+            HADDRESS        hAddress;
+            ENCODINGTYPE    ietFriendly;
+            HCHARSET        hCharset;
+            DWORD           dwAdrType;
+            LPSTR           pszFriendly;
+            LPWSTR          pwszReserved;
+            LPSTR           pszEmail;
+            CERTSTATE       certstate;
+            THUMBBLOB       tbSigning;
+            THUMBBLOB       tbEncryption;
+            DWORD           dwCookie;
+            DWORD           dwReserved1;
+            DWORD           dwReserved2;
+        } ADDRESSPROPS, *LPADDRESSPROPS;
+
+        typedef struct tagADDRESSLIST
+        {
+            ULONG           cAdrs;
+            LPADDRESSPROPS  prgAdr;
+        } ADDRESSLIST, *LPADDRESSLIST;
+
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(ee519f11-851a-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeWebDocument : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(c558834c-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeBody : IMimePropertySet
+    {
+        typedef [unique] IMimeBody *LPMIMEBODY;
+
+        typedef enum tagIMSGBODYTYPE
+        {
+            IBT_SECURE,
+            IBT_ATTACHMENT,
+            IBT_EMPTY,
+            IBT_CSETTAGGED,
+            IBT_AUTOATTACH,
+        } IMSGBODYTYPE;
+
+        typedef struct tagBODYOFFSETS
+        {
+            DWORD cbBoundaryStart;
+            DWORD cbHeaderStart;
+            DWORD cbBodyStart;
+            DWORD cbBodyEnd;
+        } BODYOFFSETS, *LPBODYOFFSETS;
+
+        typedef struct tagTRANSMITINFO
+        {
+            ENCODINGTYPE ietCurrent;
+            ENCODINGTYPE ietXmitMime;
+            ENCODINGTYPE ietXmit822;
+            ULONG cbLongestLine;
+            ULONG cExtended;
+            ULONG ulPercentExt;
+            ULONG cbSize;
+            ULONG cLines;
+        } TRANSMITINFO, *LPTRANSMITINFO;
+
+        HRESULT IsType(
+            [in]        IMSGBODYTYPE     bodytype);
+
+        HRESULT SetDisplayName(
+            [in]        LPCSTR           pszDisplay);
+
+        HRESULT GetDisplayName(
+            [out]       LPSTR            *ppszDisplay);
+
+        HRESULT GetOffsets(
+            [out]       LPBODYOFFSETS     pOffsets);
+
+        HRESULT GetCurrentEncoding(
+            [out]       ENCODINGTYPE     *pietEncoding);
+
+        HRESULT SetCurrentEncoding(
+            [in]        ENCODINGTYPE     ietEncoding);
+
+        HRESULT GetEstimatedSize(
+            [in]        ENCODINGTYPE     ietEncoding,
+            [out]       ULONG            *pcbSize);
+
+        HRESULT GetDataHere(
+            [in]        ENCODINGTYPE     ietEncoding,
+            [in]        IStream          *pStream);
+
+        HRESULT GetData(
+            [in]        ENCODINGTYPE     ietEncoding,
+            [out]       IStream          **ppStream);
+
+        HRESULT SetData(
+            [in]        ENCODINGTYPE     ietEncoding,
+            [in,unique] LPCSTR           pszPriType,
+            [in,unique] LPCSTR           pszSubType,
+            [in]        REFIID           riid,
+            [in,iid_is(riid)]  LPVOID    pvObject);
+
+        HRESULT EmptyData(void);
+
+        HRESULT CopyTo(
+            [in]        IMimeBody        *pBody);
+
+        HRESULT GetTransmitInfo(
+            [in,out]    LPTRANSMITINFO   pTransmitInfo);
+
+        HRESULT SaveToFile(
+            [in]        ENCODINGTYPE     ietEncoding,
+            [in]        LPCSTR           pszFilePath);
+
+        HRESULT GetHandle(
+           [out]        LPHBODY          phBody);
+
+    }
+
+    [
+        uuid(fd853cd4-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeMessageTree : IPersistStreamInit
+    {
+        typedef [unique] IMimeMessageTree *LPMIMEMESSAGETREE;
+
+        const HBODY HBODY_ROOT = (HBODY)-1;
+
+        typedef enum tagBODYLOCATION
+        {
+            IBL_ROOT,
+            IBL_PARENT,
+            IBL_FIRST,
+            IBL_LAST,
+            IBL_NEXT,
+            IBL_PREVIOUS,
+        } BODYLOCATION;
+
+        typedef struct tagFINDBODY
+        {
+            LPSTR pszPriType;
+            LPSTR pszSubType;
+            DWORD dwReserved;
+        } FINDBODY, *LPFINDBODY;
+
+        HRESULT GetMessageSource(
+            [out]       IStream **ppStream,
+            [in]        DWORD dwFlags);
+
+        HRESULT GetMessageSize(
+            [out]       ULONG *pcbSize,
+            [in]        DWORD dwFlags);
+
+        HRESULT LoadOffsetTable(
+            [in]        IStream *pStream);
+
+        HRESULT SaveOffsetTable(
+            [in]        IStream *pStream,
+            [in]        DWORD dwFlags);
+
+        HRESULT GetFlags(
+            [out]       DWORD *pdwFlags);
+
+        HRESULT Commit(
+            [in]        DWORD dwFlags);
+
+        HRESULT HandsOffStorage();
+
+        HRESULT BindToObject(
+            [in]        const HBODY hBody,
+            [in]        REFIID riid,
+            [out, iid_is(riid)] void **ppvObject);
+
+        HRESULT SaveBody(
+            [in]        HBODY hBody,
+            [in]        DWORD dwFlags,
+            [in]        IStream *pStream);
+
+        HRESULT InsertBody(
+            [in]        BODYLOCATION location,
+            [in]        HBODY hPivot,
+            [out]       LPHBODY phBody);
+
+        HRESULT GetBody(
+            [in]        BODYLOCATION location,
+            [in]        HBODY hPivot,
+            [out]       LPHBODY phBody);
+
+        HRESULT DeleteBody(
+            [in]        HBODY hBody,
+            [in]        DWORD dwFlags);
+
+        HRESULT MoveBody(
+            [in]        HBODY hBody,
+            [in]        BODYLOCATION location);
+
+        HRESULT CountBodies(
+            [in]        HBODY hParent,
+            [in]        boolean fRecurse,
+            [out]       ULONG *pcBodies);
+
+        HRESULT FindFirst(
+            [in, out]   LPFINDBODY pFindBody,
+            [out]       LPHBODY phBody);
+
+        HRESULT FindNext(
+            [in, out]   LPFINDBODY pFindBody,
+            [out]       LPHBODY phBody);
+
+        HRESULT ResolveURL(
+            [in]        HBODY hRelated,
+            [in]        LPCSTR pszBase,
+            [in]        LPCSTR pszURL,
+            [in]        DWORD dwFlags,
+            [out]       LPHBODY phBody);
+
+        HRESULT ToMultipart(
+            [in]        HBODY hBody,
+            [in]        LPCSTR pszSubType,
+            [out]       LPHBODY phMultipart);
+
+        HRESULT GetBodyOffsets(
+            [in]        HBODY hBody,
+            [in, out]   LPBODYOFFSETS pOffsets);
+
+        HRESULT GetCharset(
+            [out]       LPHCHARSET phCharset);
+
+        HRESULT SetCharset(
+            [in]        HCHARSET hCharset,
+            [in]        CSETAPPLYTYPE applytype);
+
+        HRESULT IsBodyType(
+            [in]        HBODY hBody,
+            [in]        IMSGBODYTYPE bodytype);
+
+        HRESULT IsContentType(
+            [in]        HBODY hBody,
+            [in]        LPCSTR pszPriType,
+            [in]        LPCSTR pszSubType);
+
+        HRESULT QueryBodyProp(
+            [in]        HBODY hBody,
+            [in]        LPCSTR pszName,
+            [in]        LPCSTR pszCriteria,
+            [in]        boolean fSubString,
+            [in]        boolean fCaseSensitive);
+
+        HRESULT GetBodyProp(
+            [in]        HBODY hBody,
+            [in]        LPCSTR pszName,
+            [in]        DWORD dwFlags,
+            [in, out]   LPPROPVARIANT pValue);
+
+        HRESULT SetBodyProp(
+            [in]        HBODY hBody,
+            [in]        LPCSTR pszName,
+            [in]        DWORD dwFlags,
+            [in]        LPCPROPVARIANT pValue);
+
+        HRESULT DeleteBodyProp(
+            [in]        HBODY hBody,
+            [in]        LPCSTR pszName);
+
+        HRESULT SetOption(
+            [in]        const TYPEDID oid,
+            [in]        LPCPROPVARIANT pValue);
+
+        HRESULT GetOption(
+            [in]        const TYPEDID oid,
+            [in, out]   LPPROPVARIANT pValue);
+    }
+
+    [
+        uuid(fd853cd5-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeMessage : IMimeMessageTree
+    {
+        typedef [unique] IMimeMessage *LPMIMEMESSAGE;
+
+        typedef DWORD TEXTTYPE;
+
+        typedef enum tagIMSGFLAGS
+        {
+            IMF_ATTACHMENTS     = 0x00000001,
+            IMF_MULTIPART       = 0x00000002,
+            IMF_SUBMULTIPART    = 0x00000004,
+            IMF_MIME            = 0x00000008,
+            IMF_HTML            = 0x00000010,
+            IMF_PLAIN           = 0x00000020,
+            IMF_PARTIAL         = 0x00000040,
+            IMF_SIGNED          = 0x00000080,
+            IMF_ENCRYPTED       = 0x00000100,
+            IMF_TNEF            = 0x00000200,
+            IMF_MHTML           = 0x00000400,
+            IMF_SECURE          = 0x00000800,
+            IMF_TEXT            = 0x00001000,
+            IMF_CSETTAGGED      = 0x00002000,
+            IMF_NEWS            = 0x00004000,
+            IMF_VOICEMAIL       = 0x00008000,
+            IMF_HASVCARD        = 0x00010000,
+            IMF_RFC1154         = 0x00020000,
+        } IMSGFLAGS;
+
+        typedef enum tagIMSGPRIORITY
+        {
+            IMSG_PRI_LOW    = 5,
+            IMSG_PRI_NORMAL = 3,
+            IMSG_PRI_HIGH   = 1,
+        } IMSGPRIORITY;
+
+        cpp_quote("#define WPF_HTML             0x00000001")
+        cpp_quote("#define WPF_AUTOINLINE       0x00000002")
+        cpp_quote("#define WPF_SLIDESHOW        0x00000004")
+        cpp_quote("#define WPF_ATTACHLINKS      0x00000008")
+        cpp_quote("#define WPF_IMAGESONLY       0x00000010")
+        cpp_quote("#define WPF_NOMETACHARSET    0x00000020")
+
+        typedef struct tagWEPAGEOPTIONS
+        {
+            DWORD cbSize;
+            DWORD dwFlags;
+            DWORD dwDelay;
+            WCHAR wchQuote;
+        } WEBPAGEOPTIONS, *LPWEBPAGEOPTIONS;
+
+        cpp_quote("#define TXT_PLAIN       1")
+        cpp_quote("#define TXT_HTML        2")
+
+        HRESULT CreateWebPage(
+            [in]        IStream *pRootStm,
+            [in]        LPWEBPAGEOPTIONS pOptions,
+            [in]        IMimeMessageCallback *pCallback,
+            [out]       IMoniker **ppMoniker);
+
+        HRESULT GetProp(
+            [in]        LPCSTR pszName,
+            [in]        DWORD dwFlags,
+            [in,out]    LPPROPVARIANT pValue);
+
+        HRESULT SetProp(
+            [in]        LPCSTR pszName,
+            [in]        DWORD dwFlags,
+            [in]        LPCPROPVARIANT pValue);
+
+        HRESULT DeleteProp(
+            [in]        LPCSTR pszName);
+
+        HRESULT QueryProp(
+            [in]        LPCSTR pszName,
+            [in]        LPCSTR pszCriteria,
+            [in]        boolean fSubString,
+            [in]        boolean fCaseSensitive);
+
+        HRESULT GetTextBody(
+            [in]        DWORD dwTxtType,
+            [in]        ENCODINGTYPE ietEncoding,
+            [out]       IStream **pStream,
+            [out]       LPHBODY phBody);
+
+        HRESULT SetTextBody(
+            [in]        DWORD dwTxtType,
+            [in]        ENCODINGTYPE ietEncoding,
+            [in]        HBODY hAlternative,
+            [in]        IStream *pStream,
+            [out]       LPHBODY phBody);
+
+        HRESULT AttachObject(
+            [in]        REFIID riid,
+            [in, iid_is(riid)] void *pvObject,
+            [out]       LPHBODY phBody);
+
+        HRESULT AttachFile(
+            [in]        LPCSTR pszFilePath,
+            [in]        IStream *pstmFile,
+            [out]       LPHBODY phBody);
+
+        HRESULT AttachURL(
+            [in]        LPCSTR pszBase,
+            [in]        LPCSTR pszURL,
+            [in]        DWORD dwFlags,
+            [in]        IStream *pstmURL,
+            [out]       LPSTR *ppszCIDURL,
+            [out]       LPHBODY phBody);
+
+        HRESULT GetAttachments(
+            [out]       ULONG *pcAttach,
+            [out]       LPHBODY *pprghAttach);
+
+        HRESULT GetAddressTable(
+            [out]       IMimeAddressTable **ppTable);
+
+        HRESULT GetSender(
+            [in, out]   LPADDRESSPROPS pAddress);
+
+        HRESULT GetAddressTypes(
+            [in]        DWORD dwAdrTypes,
+            [in]        DWORD dwProps,
+            [in, out]   LPADDRESSLIST pList);
+
+        HRESULT GetAddressFormat(
+            [in]        DWORD dwAdrTypes,
+            [in]        ADDRESSFORMAT format,
+            [out]       LPSTR *ppszFormat);
+
+        HRESULT EnumAddressTypes(
+            [in]        DWORD dwAdrTypes,
+            [in]        DWORD dwProps,
+            [out]       IMimeEnumAddressTypes **ppEnum);
+
+        HRESULT SplitMessage(
+            [in]        ULONG cbMaxPart,
+            [out]       IMimeMessageParts **ppParts);
+
+        HRESULT GetRootMoniker(
+            [out]       IMoniker **ppMoniker);
+    }
+
+    [
+        uuid(761aa741-7bda-11d1-8aa9-00c04fb951f3),
+        object
+    ]
+    interface IMimeMessageCallback : IUnknown
+    {
+        HRESULT OnWebPageSplitter(
+            [in]       DWORD cInlined,
+            [in]       IStream *ppStream);
+    }
+
+    [
+        uuid(de4ad8da-555f-11d1-8dd0-00c04fb951f9),
+        object
+    ]
+    interface IPersistMime : IPersist
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(c558834f-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeMessageParts : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(c558834d-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeEnumHeaderRows : IUnknown
+    {
+        typedef struct tagENUMHEADERROW
+        {
+            HHEADERROW   hRow;
+            LPSTR        pszHeader;
+            LPSTR        pszData;
+            ULONG        cchData;
+            DWORD_PTR    dwReserved;
+        } ENUMHEADERROW, *LPENUMHEADERROW;
+
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(fd853cee-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeEnumProperties : IUnknown
+    {
+        typedef [unique] IMimeEnumProperties *LPMIMEENUMPROPERTIES;
+
+        typedef struct tagENUMPROPERTY
+        {
+            LPSTR       pszName;
+            HHEADERROW  hRow;
+            DWORD       dwPropId;
+        } ENUMPROPERTY, *LPENUMPROPERTY;
+
+        HRESULT Next(
+            [in]      ULONG cFetch,
+            [in, out] LPENUMPROPERTY prgProp,
+            [out]     ULONG *pcFetched);
+
+        HRESULT Skip(
+            [in]      ULONG cItems);
+
+        HRESULT Reset(void);
+
+        HRESULT Clone(
+            [out]      IMimeEnumProperties **ppEnum);
+
+        HRESULT Count(
+            [out]      ULONG *pcItems);
+
+    }
+
+    [
+        uuid(c5588354-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeEnumAddressTypes : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(c5588350-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeEnumMessageParts : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(64577981-86d7-11d1-bdfc-00c04fa31009),
+        object
+    ]
+    interface IHashTable : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(c5588351-7f86-11d0-8252-00c04fd85ab4),
+        object
+    ]
+    interface IMimeAllocator : IMalloc
+    {
+        typedef [unique] IMimeAllocator *LPMIMEALLOCATOR;
+
+        HRESULT FreeParamInfoArray(
+            [in] ULONG            cParams,
+            [in] LPMIMEPARAMINFO  prgParam,
+            [in] boolean          fFreeArray);
+
+        HRESULT FreeAddressList(
+            [in,out] LPADDRESSLIST pList);
+
+        HRESULT FreeAddressProps(
+            [in,out] LPADDRESSPROPS pAddress);
+
+        HRESULT ReleaseObjects(
+            [in] ULONG            cObjects,
+            [in] IUnknown         **prgpUnknown,
+            [in] boolean          fFreeArray);
+
+        HRESULT FreeEnumHeaderRowArray(
+            [in] ULONG            cRows,
+            [in] LPENUMHEADERROW  prgRow,
+            [in] boolean          fFreeArray);
+
+        HRESULT FreeEnumPropertyArray(
+            [in] ULONG            cProps,
+            [in] LPENUMPROPERTY   prgProp,
+            [in] boolean          fFreeArray);
+
+        HRESULT FreeThumbprint(
+            [in] THUMBBLOB         *pthumbprint);
+
+        HRESULT PropVariantClear(
+            [in] LPPROPVARIANT     pProp);
+
+    }
+
+    [
+        uuid(feceaffd-c441-11d1-960e-00c04fbd7c09),
+        object
+    ]
+    interface IMimeObjResolver : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(b0d17fc2-7bc4-11d1-bdfa-00c04fa31009),
+        object
+    ]
+    interface IFontCache : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(b0d17fc5-7bc4-11d1-bdfa-00c04fa31009),
+        object
+    ]
+    interface IFontCacheNotify : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(70183210-7b36-11d2-8c12-00c04fa31009),
+        object
+    ]
+    interface IMimeEditTag : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+        uuid(d09ee528-7b38-11d2-8c12-00c04fa31009),
+        object
+    ]
+    interface IMimeEditTagCollection : IUnknown
+    {
+        /* FIXME: fill this in */
+    }
+
+    [
+         uuid(ba715ae0-a740-11d2-8b22-0080c76b34c6),
+         local
+    ]
+    interface IMimeSecurityCallback : IUnknown
+    {
+        /* FIXME: fill this in */
+
+        cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN                0")
+        cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS               1")
+        cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE               2")
+        cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST              3")
+
+        cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE          0")
+        cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS             1")
+        cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER             2")
+        cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE   3")
+        cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE      4")
+
+        cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE           0")
+        cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL          1")
+        cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_KEY_ID                2")
+
+    }
+}
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote(" extern \"C\" {")
+cpp_quote("#endif")
+
+cpp_quote("")
+cpp_quote("HRESULT WINAPI MimeOleSetCompatMode(DWORD);")
+cpp_quote("HRESULT WINAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);")
+cpp_quote("HRESULT WINAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);")
+cpp_quote("HRESULT WINAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);")
+cpp_quote("HRESULT WINAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);")
+cpp_quote("HRESULT WINAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);")
+cpp_quote("HRESULT WINAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);")
+cpp_quote("HRESULT WINAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);")
+cpp_quote("HRESULT WINAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);")
+cpp_quote("HRESULT WINAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);")
+cpp_quote("HRESULT WINAPI MimeOleCreateByteStream(IStream**);")
+cpp_quote("HRESULT WINAPI MimeOlGetPropertySchema(IMimePropertySchema**);")
+cpp_quote("HRESULT WINAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);")
+cpp_quote("HRESULT WINAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);")
+cpp_quote("HRESULT WINAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);")
+cpp_quote("HRESULT WINAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);")
+cpp_quote("HRESULT WINAPI MimeOleVariantFree(LPPROPVARIANT);")
+cpp_quote("HRESULT WINAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);")
+cpp_quote("HRESULT WINAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);")
+cpp_quote("HRESULT WINAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);")
+cpp_quote("HRESULT WINAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);")
+cpp_quote("HRESULT WINAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetInternat(IMimeInternational**);")
+cpp_quote("HRESULT WINAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);")
+cpp_quote("HRESULT WINAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);")
+cpp_quote("HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleSetDefaultCharset(HCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleCreateVirtualStream(IStream**);")
+cpp_quote("HRESULT WINAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);")
+cpp_quote("HRESULT WINAPI MimeOleIsTnefStream(IStream*);")
+cpp_quote("HRESULT WINAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);")
+cpp_quote("HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity**);")
+cpp_quote("HRESULT WINAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);")
+cpp_quote("HRESULT WINAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);")
+cpp_quote("HRESULT WINAPI MimeOleCreateMessageParts(IMimeMessageParts**);")
+cpp_quote("HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator**);")
+cpp_quote("HRESULT WINAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);")
+cpp_quote("HRESULT WINAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);")
+cpp_quote("HRESULT WINAPI MimeOleMergePartialHeaders(IStream*,IStream*);")
+cpp_quote("HRESULT WINAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleCreateBody(IMimeBody**);")
+cpp_quote("HRESULT WINAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);")
+cpp_quote("HRESULT WINAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);")
+cpp_quote("HRESULT WINAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);")
+cpp_quote("HRESULT WINAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);")
+cpp_quote("HRESULT WINAPI MimeOleClearDirtyTree(IMimeMessageTree*);")
+cpp_quote("HRESULT WINAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapRelease(LPVOID);")
+cpp_quote("HRESULT WINAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);")
+cpp_quote("HRESULT WINAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);")
+
+cpp_quote("HRESULT WINAPI MimeEditViewSource(HWND,IMimeMessage*);")
+cpp_quote("HRESULT WINAPI MimeEditIsSafeToRun(HWND,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);")
+cpp_quote("HRESULT WINAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);")
+cpp_quote("HRESULT WINAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);")
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("}")
+cpp_quote("#endif")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h
new file mode 100644
index 0000000..ac53fde
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h
@@ -0,0 +1,40 @@
+/*
+ * min/max macros
+ *
+ * Copyright 2001 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MINMAX_H
+#define __WINE_MINMAX_H
+
+#ifndef max
+#define max(a,b)   (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a,b)   (((a) < (b)) ? (a) : (b))
+#endif
+
+#endif /* __WINE_MINMAX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl
new file mode 100644
index 0000000..110fd21
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl
@@ -0,0 +1,766 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+interface IStream;
+
+cpp_quote("#define CPIOD_PEEK          0x40000000")
+cpp_quote("#define CPIOD_FORCE_PROMPT  0x80000000")
+
+[
+  object,
+  uuid(359f3443-bd4a-11d0-b188-00aa0038c969),
+  pointer_default(unique)
+]
+interface IMLangCodePages : IUnknown
+{
+    HRESULT GetCharCodePages(      
+        [in] WCHAR chSrc,
+        [out] DWORD *pdwCodePages);
+    HRESULT GetStrCodePages(      
+        [in, size_is(cchSrc)] const WCHAR *pszSrc,
+        [in] LONG cchSrc,
+        [in] DWORD dwPriorityCodePages,
+        [out] DWORD *pdwCodePages,
+        [out] LONG *pcchCodePages);
+    HRESULT CodePageToCodePages(      
+        [in] UINT uCodePage,
+        [out] DWORD *pdwCodePages);
+    HRESULT CodePagesToCodePage(      
+        [in] DWORD dwCodePages,
+        [in] UINT uDefaultCodePage,
+        [out] UINT *puCodePage);
+}
+
+[
+  object,
+  uuid(359f3441-bd4a-11d0-b188-00aa0038c969),
+  pointer_default(unique)
+]
+interface IMLangFontLink : IMLangCodePages
+{
+    HRESULT GetFontCodePages(
+        [in] HDC hDC,
+        [in] HFONT hFont,
+        [out] DWORD *pdwCodePages );
+
+    HRESULT MapFont(      
+        [in] HDC hDC,
+        [in] DWORD dwCodePages,
+        [in] HFONT hSrcFont,
+        [out] HFONT *phDestFont);
+
+    HRESULT ReleaseFont(      
+        [in] HFONT hFont);
+
+    HRESULT ResetFontMapping();
+}
+
+[
+  object,
+  uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),
+  pointer_default(unique)
+]
+interface IEnumScript : IUnknown
+{
+    const USHORT MAX_SCRIPT_NAME = 48;
+    const USHORT MAX_MIMEFACE_NAME = 32;
+
+    typedef BYTE SCRIPT_ID;
+    typedef __int64 SCRIPT_IDS;
+
+    typedef enum tagSCRIPTCONTF
+    {
+        sidDefault = 0,
+        sidMerge = sidDefault + 1,
+        sidAsciiSym = sidMerge + 1,
+        sidAsciiLatin = sidAsciiSym + 1,
+        sidLatin = sidAsciiLatin + 1,
+        sidGreek = sidLatin + 1,
+        sidCyrillic = sidGreek + 1,
+        sidArmenian = sidCyrillic + 1,
+        sidHebrew = sidArmenian + 1,
+        sidArabic = sidHebrew + 1,
+        sidDevanagari = sidArabic + 1,
+        sidBengali = sidDevanagari + 1,
+        sidGurmukhi = sidBengali + 1,
+        sidGujarati = sidGurmukhi + 1,
+        sidOriya = sidGujarati + 1,
+        sidTamil = sidOriya + 1,
+        sidTelugu = sidTamil + 1,
+        sidKannada = sidTelugu + 1,
+        sidMalayalam = sidKannada + 1,
+        sidThai = sidMalayalam + 1,
+        sidLao = sidThai + 1,
+        sidTibetan = sidLao + 1,
+        sidGeorgian = sidTibetan + 1,
+        sidHangul = sidGeorgian + 1,
+        sidKana = sidHangul + 1,
+        sidBopomofo = sidKana + 1,
+        sidHan = sidBopomofo + 1,
+        sidEthiopic = sidHan + 1,
+        sidCanSyllabic = sidEthiopic + 1,
+        sidCherokee = sidCanSyllabic + 1,
+        sidYi = sidCherokee + 1,
+        sidBraille = sidYi + 1,
+        sidRunic = sidBraille + 1,
+        sidOgham = sidRunic + 1,
+        sidSinhala = sidOgham + 1,
+        sidSyriac = sidSinhala + 1,
+        sidBurmese = sidSyriac + 1,
+        sidKhmer = sidBurmese + 1,
+        sidThaana = sidKhmer + 1,
+        sidMongolian = sidThaana + 1,
+        sidUserDefined = sidMongolian + 1,
+        sidLim = sidUserDefined + 1,
+        sidFEFirst = sidHangul,
+        sidFELast = sidHan
+    } SCRIPTCONTF;
+
+    typedef enum tagSCRIPTFONTCONTF
+    {
+        SCRIPTCONTF_FIXED_FONT = 0x1,
+        SCRIPTCONTF_PROPORTIONAL_FONT = 0x2,
+        SCRIPTCONTF_SCRIPT_USER = 0x10000,
+        SCRIPTCONTF_SCRIPT_HIDE = 0x20000,
+        SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000
+    } SCRIPTFONTCONTF;
+
+    typedef struct tagSCRIPFONTINFO
+    {
+        SCRIPT_IDS scripts;
+        WCHAR wszFont[MAX_MIMEFACE_NAME];
+    } SCRIPTFONTINFO, *PSCRIPTFONTINFO;
+
+    typedef struct tagSCRIPTINFO {
+        SCRIPT_ID ScriptId;
+        UINT uiCodePage;
+        WCHAR wszDescription[MAX_SCRIPT_NAME];
+        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
+        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
+    } SCRIPTINFO, *PSCRIPTINFO;
+
+    HRESULT Clone( 
+        [out] IEnumScript **ppEnum);
+
+    HRESULT Next(      
+        [in] ULONG celt,
+        [out] PSCRIPTINFO rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(      
+        [in] ULONG celt);
+}
+
+[
+  object,
+  uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a),
+  pointer_default(unique)
+]
+interface IMLangFontLink2 : IMLangCodePages
+{
+    typedef struct tagUNICODERANGE
+    {
+        WCHAR wcFrom;
+        WCHAR wcTo;
+    } UNICODERANGE;
+
+    typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2;
+
+    HRESULT GetFontCodePages(
+        [in] HDC hDC,
+        [in] HFONT hFont,
+        [out] DWORD *pdwCodePages );
+
+    HRESULT ReleaseFont(
+        [in] HFONT hFont);
+
+    HRESULT ResetFontMapping();
+
+    HRESULT MapFont(
+        [in] HDC hDC,
+        [in] DWORD dwCodePages,
+        [in] WCHAR chSrc,
+        [out] HFONT *pFont);
+
+    HRESULT GetFontUnicodeRanges(
+        [in] HDC hDC,
+        [in,out] UINT *puiRanges,
+        [out] UNICODERANGE* pUranges);
+
+    HRESULT GetScriptFontInfo(
+        [in] SCRIPT_ID sid,
+        [in] DWORD dwFlags,
+        [in,out] UINT *puiFonts,
+        [out] SCRIPTFONTINFO* pScriptFont);
+
+    HRESULT CodePageToScriptID(
+        [in] UINT uiCodePage,
+        [out] SCRIPT_ID *pSid);
+}
+
+[
+ object,
+ uuid(c04d65ce-b70d-11d0-b188-00aa0038c969),
+ pointer_default(unique)
+]
+interface IMLangString : IUnknown
+{
+#ifdef NEWMLSTR
+    HRESULT LockMLStr(
+        [in] LONG lPos,
+        [in] DWORD dwFlags,
+        [out] DWORD* pdwCookie,
+        [out] LONG* plActualPos,
+        [out] LONG* plActualLen);
+
+    HRESULT UnlockMLStr(
+        [in] DWORD dwCookie);
+#else
+    HRESULT Sync(
+        [in] BOOL fNoAccess);
+#endif
+    HRESULT GetLength(
+        [out, retval] LONG* plLen);
+    HRESULT SetMLStr(
+        [in] LONG lDestPos,
+        [in] LONG lDestLen,
+        [in] IUnknown *pSrcMLStr,
+        [in] LONG lSrcPos,
+        [in] LONG lSrcLen);
+#ifdef NEWMLSTR
+    HRESULT RegisterAttr(
+        [in] IUnknown *pUnk,
+        [out] DWORD* pdwCookie);
+    HRESULT UnregisterAttr(
+        [in] DWORD dwCookie);
+    HRESULT EnumAttr(
+        [out] IEnumUnknown **ppEnumUnk);
+    HRESULT FindAttr(
+        [in] REFIID riid,
+        [in] LPARAM lParam,
+        [out] IUnknown **ppUnk);
+#else
+    HRESULT GetMLStr(
+        [in] LONG lSrcPos,
+        [in] LONG lSrcLen,
+        [in] IUnknown *pUnkOuter,
+        [in] DWORD dwClsContext,
+        [in] const IID* piid,
+        [out] IUnknown** ppDestMLStr,
+        [out] LONG* plDestPos,
+        [out] LONG* plDestLen);
+#endif
+}
+
+[
+ object,
+ uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969),
+ pointer_default(unique)
+]
+interface IMLangLineBreakConsole : IUnknown
+{
+    HRESULT BreakLineML(
+        [in] IMLangString* pSrcMLStr,
+        [in] LONG lSrcPos,
+        [in] LONG lSrcLen,
+        [in] LONG cMinColumns,
+        [in] LONG cMaxColumns,
+        [out] LONG* plLineLen,
+        [out] LONG* plSkipLen);
+
+    HRESULT BreakLineW(
+        [in] LCID locale,
+        [in, size_is(cchSrc)] const WCHAR* pszSrc,
+        [in] LONG cchSrc,
+        [in] LONG cMaxColumns,
+        [out] LONG* pcchLine,
+        [out] LONG* pcchSkip );
+
+    HRESULT BreakLineA(
+        [in] LCID locale,
+        [in] UINT uCodePage,
+        [in, size_is(cchSrc)] const CHAR* pszSrc,
+        [in] LONG cchSrc,
+        [in] LONG cMaxColumns,
+        [out] LONG* pcchLine,
+        [out] LONG* pcchSkip);
+}
+
+[
+  object,
+  uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
+  pointer_default(unique)
+]
+interface IEnumCodePage : IUnknown
+{
+    const USHORT MAX_MIMECP_NAME = 64;
+    const USHORT MAX_MIMECSET_NAME = 50;
+
+    typedef enum tagMIMECONTF
+    {
+        MIMECONTF_MAILNEWS = 0x00000001,
+        MIMECONTF_BROWSER = 0x00000002,
+        MIMECONTF_MINIMAL = 0x00000004,
+        MIMECONTF_IMPORT = 0x00000008,
+        MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
+        MIMECONTF_SAVABLE_BROWSER = 0x00000200,
+        MIMECONTF_EXPORT = 0x00000400,
+        MIMECONTF_PRIVCONVERTER = 0x00010000,
+        MIMECONTF_VALID = 0x00020000,
+        MIMECONTF_VALID_NLS = 0x00040000,
+        MIMECONTF_MIME_IE4 = 0x10000000,
+        MIMECONTF_MIME_LATEST = 0x20000000,
+        MIMECONTF_MIME_REGISTRY = 0x40000000
+    } MIMECONTF;
+
+    typedef struct tagMIMECPINFO {
+        DWORD dwFlags;
+        UINT uiCodePage;
+        UINT uiFamilyCodePage;
+        WCHAR wszDescription[MAX_MIMECP_NAME];
+        WCHAR wszWebCharset[MAX_MIMECSET_NAME];
+        WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
+        WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
+        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
+        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
+        BYTE bGDICharset;
+    } MIMECPINFO, *PMIMECPINFO;
+
+    typedef struct tagMIMECSETINFO
+    {
+        UINT uiCodePage;
+        UINT uiInternetEncoding;
+        WCHAR wszCharset[MAX_MIMECSET_NAME];
+    } MIMECSETINFO, *PMIMECSETINFO;
+
+    HRESULT Clone( 
+        [out] IEnumCodePage **ppEnum);
+
+    HRESULT Next(      
+        [in] ULONG celt,
+        [out] PMIMECPINFO rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(      
+        [in] ULONG celt);
+}
+
+[
+  object,
+  uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
+  pointer_default(unique)
+]
+interface IMLangConvertCharset : IUnknown
+{
+    typedef enum tagMLCONVCHARF
+    {
+        MLCONVCHARF_AUTODETECT      = 1,
+        MLCONVCHARF_ENTITIZE        = 2,
+        MLCONVCHARF_NCR_ENTITIZE    = 2,
+        MLCONVCHARF_NAME_ENTITIZE   = 4,
+        MLCONVCHARF_USEDEFCHAR      = 8,
+        MLCONVCHARF_NOBESTFITCHARS  = 16,
+        MLCONVCHARF_DETECTJPN       = 32
+    } MLCONVCHAR;
+
+    HRESULT Initialize(      
+        [in] UINT uiSrcCodePage,
+        [in] UINT uiDstCodePage,
+        [in] DWORD dwProperty);
+
+    HRESULT GetSourceCodePage(      
+        [out] UINT *puiSrcCodePage);
+
+    HRESULT GetDestinationCodePage(      
+        [out] UINT *puiDstCodePage);
+
+    HRESULT GetProperty(      
+        [out] DWORD *pdwProperty);
+
+    HRESULT DoConversion(      
+        [in] BYTE *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] BYTE *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT DoConversionToUnicode(      
+        [in] CHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] WCHAR *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT DoConversionFromUnicode(      
+        [in] WCHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] CHAR *pDstStr,
+        [in,out] UINT *pcDstSize);
+}
+
+[
+    uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
+]
+coclass CMLangConvertCharset
+{
+    [default] interface IMLangConvertCharset;
+};
+
+[
+  object,
+  uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
+  pointer_default(unique)
+]
+interface IEnumRfc1766 : IUnknown
+{
+    const USHORT MAX_RFC1766_NAME = 6;
+    const USHORT MAX_LOCALE_NAME = 32;
+
+    typedef struct tagRFC1766INFO
+    {
+        LCID lcid;
+        WCHAR wszRfc1766[MAX_RFC1766_NAME];
+        WCHAR wszLocaleName[MAX_LOCALE_NAME];
+    } RFC1766INFO, *PRFC1766INFO;
+
+    HRESULT Clone( 
+        [out] IEnumRfc1766 **ppEnum);
+
+    HRESULT Next(      
+        [in] ULONG celt,
+        [out] PRFC1766INFO rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(      
+        [in] ULONG celt);
+}
+
+[
+  object,
+  uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
+  pointer_default(unique)
+]
+interface IMultiLanguage : IUnknown
+{
+    HRESULT GetNumberOfCodePageInfo(      
+        [out] UINT *pcCodePage);
+
+    HRESULT GetCodePageInfo(      
+        [in] UINT uiCodePage,
+        [out] PMIMECPINFO pCodePageInfo);
+
+    HRESULT GetFamilyCodePage(      
+        [in] UINT uiCodePage,
+        [out] UINT *puiFamilyCodePage);
+
+    HRESULT EnumCodePages(      
+        [in] DWORD grfFlags,
+        [out] IEnumCodePage **ppEnumCodePage);
+
+    HRESULT GetCharsetInfo(      
+        [in] BSTR Charset,
+        [in] PMIMECSETINFO pCharsetInfo);
+
+    HRESULT IsConvertible(      
+        [in] DWORD dwSrcEncoding,
+        [in] DWORD dwDstEncoding);
+
+    HRESULT ConvertString(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwSrcEncoding,
+        [in] DWORD dwDstEncoding,
+        [in] BYTE *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] BYTE *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT ConvertStringToUnicode(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwEncoding,
+        [in] CHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] WCHAR *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT ConvertStringFromUnicode(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwEncoding,
+        [in] WCHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] CHAR *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT ConvertStringReset();
+
+    HRESULT GetRfc1766FromLcid(      
+        [in] LCID Locale,
+        [out] BSTR *pbstrRfc1766);
+
+    HRESULT GetLcidFromRfc1766(      
+        [out] LCID *pLocale,
+        [in] BSTR bstrRfc1766);
+
+    HRESULT EnumRfc1766(      
+        [out] IEnumRfc1766 **ppEnumRfc1766);
+
+    HRESULT GetRfc1766Info(      
+        [in] LCID Locale,
+        [out] PRFC1766INFO pRfc1766Info);
+
+    HRESULT CreateConvertCharset(      
+        [in] UINT uiSrcCodePage,
+        [in] UINT uiDstCodePage,
+        [in] DWORD dwProperty,
+        [out] IMLangConvertCharset **ppMLangConvertCharset);
+
+}
+
+[
+  object,
+  uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
+  pointer_default(unique)
+]
+interface IMultiLanguage2 : IUnknown
+{
+    typedef struct tagDetectEncodingInfo
+    {
+        UINT nLangID;
+        UINT nCodePage;
+        INT nDocPercent;
+        INT nConfidence;
+    } DetectEncodingInfo, *pDetectEncodingInfo;
+
+    HRESULT GetNumberOfCodePageInfo(      
+        [out] UINT *pcCodePage);
+
+    HRESULT GetCodePageInfo(      
+        [in] UINT uiCodePage,
+        [in] LANGID LangId,
+        [out] PMIMECPINFO pCodePageInfo);
+
+    HRESULT GetFamilyCodePage(      
+        [in] UINT uiCodePage,
+        [out] UINT *puiFamilyCodePage);
+
+    HRESULT EnumCodePages(      
+        [in] DWORD grfFlags,
+        [in] LANGID LangId,
+        [out] IEnumCodePage **ppEnumCodePage);
+
+    HRESULT GetCharsetInfo(      
+        [in] BSTR Charset,
+        [in] PMIMECSETINFO pCharsetInfo);
+
+    HRESULT IsConvertible(      
+        [in] DWORD dwSrcEncoding,
+        [in] DWORD dwDstEncoding);
+
+    HRESULT ConvertString(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwSrcEncoding,
+        [in] DWORD dwDstEncoding,
+        [in] BYTE *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] BYTE *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT ConvertStringToUnicode(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwEncoding,
+        [in] CHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] WCHAR *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT ConvertStringFromUnicode(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwEncoding,
+        [in] WCHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] CHAR *pDstStr,
+        [in,out] UINT *pcDstSize);
+
+    HRESULT ConvertStringReset();
+
+    HRESULT GetRfc1766FromLcid(      
+        [in] LCID Locale,
+        [out] BSTR *pbstrRfc1766);
+
+    HRESULT GetLcidFromRfc1766(      
+        [out] LCID *pLocale,
+        [in] BSTR bstrRfc1766);
+
+    HRESULT EnumRfc1766(      
+        [in] LANGID LangId,
+        [out] IEnumRfc1766 **ppEnumRfc1766);
+
+    HRESULT GetRfc1766Info(      
+        [in] LCID Locale,
+        [in] LANGID LangId,
+        [out] PRFC1766INFO pRfc1766Info);
+
+    HRESULT CreateConvertCharset(      
+        [in] UINT uiSrcCodePage,
+        [in] UINT uiDstCodePage,
+        [in] DWORD dwProperty,
+        [out] IMLangConvertCharset **ppMLangConvertCharset);
+
+    HRESULT ConvertStringInIStream(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwFlag,
+        [in] WCHAR *lpFallBack,
+        [in] DWORD dwSrcEncoding,
+        [in] DWORD dwDstEncoding,
+        [in] IStream *pstmIn,
+        [in] IStream *pstmOut);
+
+    HRESULT ConvertStringToUnicodeEx(      
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwEncoding,
+        [in] CHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] WCHAR *pDstStr,
+        [in,out] UINT *pcDstSize,
+        [in] DWORD dwFlag,
+        [in] WCHAR *lpFallBack);
+
+    HRESULT ConvertStringFromUnicodeEx(
+        [in,out] DWORD *pdwMode,
+        [in] DWORD dwEncoding,
+        [in] WCHAR *pSrcStr,
+        [in,out] UINT *pcSrcSize,
+        [in] CHAR *pDstStr,
+        [in,out] UINT *pcDstSize,
+        [in] DWORD dwFlag,
+        [in] WCHAR *lpFallBack);
+
+    HRESULT DetectCodepageInIStream(      
+        [in] DWORD dwFlag,
+        [in] DWORD dwPrefWinCodePage,
+        [in] IStream *pstmIn,
+        [in,out] DetectEncodingInfo *lpEncoding,
+        [in,out] INT *pnScores);
+
+    HRESULT DetectInputCodepage(      
+        [in] DWORD dwFlag,
+        [in] DWORD dwPrefWinCodePage,
+        [in] CHAR *pSrcStr,
+        [in,out] INT *pcSrcSize,
+        [in,out] DetectEncodingInfo *lpEncoding,
+        [in,out] INT *pnScores);
+
+    HRESULT ValidateCodePage(
+        [in] UINT uiCodePage,
+        [in] HWND hwnd);
+
+    HRESULT GetCodePageDescription(      
+        [in] UINT uiCodePage,
+        [in] LCID lcid,
+        [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,
+        [in] int cchWideChar);
+
+    HRESULT IsCodePageInstallable(
+        [in] UINT uiCodePage);
+
+    HRESULT SetMimeDBSource(      
+        [in] MIMECONTF dwSource);
+
+    HRESULT GetNumberOfScripts(      
+        [out] UINT *pnScripts);
+
+    HRESULT EnumScripts(      
+        [in] DWORD dwFlags,
+        [in] LANGID LangId,
+        [out] IEnumScript **ppEnumScript);
+
+    HRESULT ValidateCodePageEx( /* undocumented on MSDN */
+        [in] UINT uiCodePage,
+        [in] HWND hwnd,
+        [in] DWORD dwfIODControl);
+}
+
+[
+    object,
+    uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
+    pointer_default(unique)
+]
+interface IMultiLanguage3 : IMultiLanguage2
+{
+    typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
+    HRESULT DetectOutboundCodePage(
+        [in] DWORD dwFlags,
+        [in] LPCWSTR lpWideCharStr,
+        [in] UINT cchWideChar,
+        [in] UINT *puiPreferredCodePages,
+        [in] UINT nPreferredCodePages,
+        [in] UINT *puiDetectedCodePages,
+        [in, out] UINT *pnDetectedCodePages,
+        [in] WCHAR *lpSpecialChar);
+
+    HRESULT DetectOutboundCodePageInIStream(
+        [in] DWORD dwFlags,
+        [in] IStream *pStrIn,
+        [in] UINT *puiPreferredCodePages,
+        [in] UINT nPreferredCodePages,
+        [in] UINT *puiDetectedCodePages,
+        [in, out] UINT *pnDetectedCodePages,
+        [in] WCHAR *lpSpecialChar);
+}
+
+[
+    uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
+]
+coclass CMultiLanguage
+{
+    [default] interface IMultiLanguage;
+    interface IMLangCodePages;
+    interface IMLangFontLink;
+    /* interface IMLangLineBreakConsole; */
+    interface IMLangFontLink2;
+}
+
+cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
+cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
+cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")
+
+cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
+cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
+cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
+
+cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);")
+cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
+cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
+cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
+cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl
new file mode 100644
index 0000000..f7bfe41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright 2011 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "basetsd.h";
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    uuid(A8D2C5FE-CDCB-4B9D-BDE5-A27343FF54BC),
+]
+interface IMMCVersionInfo : IUnknown
+{
+   HRESULT GetMMCVersion([out] long * pVersionMajor, [out] long * pVersionMinor);
+}
+
+
+[
+   uuid(9EECDD85-B715-4188-8A72-61159ABDB8C4),
+   version(1.0),
+]
+library MMCVersionLib
+{
+   importlib("stdole2.tlb");
+
+   [
+      helpstring("MMCVersionInfo 1.0 Object"),
+      uuid(D6FEDB1D-CF21-4BD9-AF3B-C5468E9C6684),
+      threading(apartment),
+      progid("NODEMGR.MMCVersionInfo.1"),
+      vi_progid("NODEMGR.MMCVersionInfo")
+   ]
+   coclass MMCVersionInfo
+   {
+       [default] interface IMMCVersionInfo;
+   }
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h
new file mode 100644
index 0000000..183d6b7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h
@@ -0,0 +1,480 @@
+/*
+ * Copyright 1998, Luiz Otavio L. Zorzella
+ *           1999, Eric Pouech
+ *
+ * Purpose:   multimedia declarations (external to WINMM & MMSYSTEM DLLs
+ *                                     for other DLLs (MCI, drivers...))
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MMDDK_H
+#define __MMDDK_H
+
+#include <mmsystem.h>
+#include <winbase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_MIDIINDRV 	(16)
+/* For now I'm making 16 the maximum number of midi devices one can
+ * have. This should be more than enough for everybody. But as a purist,
+ * I intend to make it unbounded in the future, as soon as I figure
+ * a good way to do so.
+ */
+#define MAX_MIDIOUTDRV 	(16)
+
+/* ==================================
+ *   Multimedia DDK compatible part
+ * ================================== */
+
+#include <pshpack1.h>
+
+#define DRVM_INIT		100
+#define DRVM_EXIT		101
+#define DRVM_DISABLE		102
+#define DRVM_ENABLE		103
+
+/* messages that have IOCTL format
+ *    dw1 = NULL or handle
+ *    dw2 = NULL or ptr to DRVM_IOCTL_DATA
+ *    return is MMRESULT
+ */
+#define DRVM_IOCTL		0x100
+#define DRVM_ADD_THRU		(DRVM_IOCTL+1)
+#define DRVM_REMOVE_THRU	(DRVM_IOCTL+2)
+#define DRVM_IOCTL_LAST		(DRVM_IOCTL+5)
+typedef struct {
+    DWORD  dwSize; 	/* size of this structure */
+    DWORD  dwCmd;  	/* IOCTL command code, 0x80000000 and above reserved for system */
+} DRVM_IOCTL_DATA, *LPDRVM_IOCTL_DATA;
+
+/* command code ranges for dwCmd field of DRVM_IOCTL message
+ * - codes from 0 to 0x7FFFFFFF are user defined
+ * - codes from 0x80000000 to 0xFFFFFFFF are reserved for future definition by microsoft
+ */
+#define DRVM_IOCTL_CMD_USER   __MSABI_LONG(0x00000000)
+#define DRVM_IOCTL_CMD_SYSTEM __MSABI_LONG(0x80000000)
+
+#define DRVM_MAPPER			0x2000
+#define DRVM_USER			0x4000
+#define DRVM_MAPPER_STATUS		(DRVM_MAPPER+0)
+#define DRVM_MAPPER_RECONFIGURE 	(DRVM_MAPPER+1)
+#define DRVM_MAPPER_PREFERRED_GET	(DRVM_MAPPER+21)
+#define DRVM_MAPPER_CONSOLEVOICECOM_GET	(DRVM_MAPPER+23)
+
+#define DRV_QUERYDRVENTRY		(DRV_RESERVED + 1)
+#define DRV_QUERYDEVNODE		(DRV_RESERVED + 2)
+#define DRV_QUERYNAME			(DRV_RESERVED + 3)
+#define DRV_QUERYDRIVERIDS		(DRV_RESERVED + 4)
+#define DRV_QUERYMAPPABLE		(DRV_RESERVED + 5)
+#define DRV_QUERYMODULE			(DRV_RESERVED + 9)
+#define DRV_PNPINSTALL			(DRV_RESERVED + 11)
+#define DRV_QUERYDEVICEINTERFACE	(DRV_RESERVED + 12)
+#define DRV_QUERYDEVICEINTERFACESIZE	(DRV_RESERVED + 13)
+#define DRV_QUERYSTRINGID		(DRV_RESERVED + 14)
+#define DRV_QUERYSTRINGIDSIZE		(DRV_RESERVED + 15)
+#define DRV_QUERYIDFROMSTRINGID		(DRV_RESERVED + 16)
+#define DRV_QUERYFUNCTIONINSTANCEID	(DRV_RESERVED + 17)
+#define DRV_QUERYFUNCTIONINSTANCEIDSIZE	(DRV_RESERVED + 18)
+
+#define DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY   0x00000001
+
+#define WODM_INIT		DRVM_INIT
+#define WODM_GETNUMDEVS		 3
+#define WODM_GETDEVCAPS		 4
+#define WODM_OPEN		 5
+#define WODM_CLOSE		 6
+#define WODM_PREPARE		 7
+#define WODM_UNPREPARE		 8
+#define WODM_WRITE		 9
+#define WODM_PAUSE		10
+#define WODM_RESTART		11
+#define WODM_RESET		12
+#define WODM_GETPOS		13
+#define WODM_GETPITCH		14
+#define WODM_SETPITCH		15
+#define WODM_GETVOLUME		16
+#define WODM_SETVOLUME		17
+#define WODM_GETPLAYBACKRATE	18
+#define WODM_SETPLAYBACKRATE	19
+#define WODM_BREAKLOOP		20
+#define WODM_PREFERRED		21
+
+#define WODM_MAPPER_STATUS      (DRVM_MAPPER_STATUS + 0)
+#define WAVEOUT_MAPPER_STATUS_DEVICE    0
+#define WAVEOUT_MAPPER_STATUS_MAPPED    1
+#define WAVEOUT_MAPPER_STATUS_FORMAT    2
+
+#define WODM_BUSY		21
+
+#define WIDM_INIT		DRVM_INIT
+#define WIDM_GETNUMDEVS		50
+#define WIDM_GETDEVCAPS		51
+#define WIDM_OPEN		52
+#define WIDM_CLOSE		53
+#define WIDM_PREPARE		54
+#define WIDM_UNPREPARE		55
+#define WIDM_ADDBUFFER		56
+#define WIDM_START		57
+#define WIDM_STOP		58
+#define WIDM_RESET		59
+#define WIDM_GETPOS		60
+#define WIDM_PREFERRED		61
+#define WIDM_MAPPER_STATUS      (DRVM_MAPPER_STATUS + 0)
+#define WAVEIN_MAPPER_STATUS_DEVICE     0
+#define WAVEIN_MAPPER_STATUS_MAPPED     1
+#define WAVEIN_MAPPER_STATUS_FORMAT     2
+
+#define MODM_INIT		DRVM_INIT
+#define MODM_GETNUMDEVS		1
+#define MODM_GETDEVCAPS		2
+#define MODM_OPEN		3
+#define MODM_CLOSE		4
+#define MODM_PREPARE		5
+#define MODM_UNPREPARE		6
+#define MODM_DATA		7
+#define MODM_LONGDATA		8
+#define MODM_RESET          	9
+#define MODM_GETVOLUME		10
+#define MODM_SETVOLUME		11
+#define MODM_CACHEPATCHES	12
+#define MODM_CACHEDRUMPATCHES	13
+
+#define MIDM_INIT		DRVM_INIT
+#define MIDM_GETNUMDEVS  	53
+#define MIDM_GETDEVCAPS  	54
+#define MIDM_OPEN        	55
+#define MIDM_CLOSE       	56
+#define MIDM_PREPARE     	57
+#define MIDM_UNPREPARE   	58
+#define MIDM_ADDBUFFER   	59
+#define MIDM_START       	60
+#define MIDM_STOP        	61
+#define MIDM_RESET       	62
+
+
+#define AUXM_INIT             	DRVM_INIT
+#define AUXDM_GETNUMDEVS    	3
+#define AUXDM_GETDEVCAPS    	4
+#define AUXDM_GETVOLUME     	5
+#define AUXDM_SETVOLUME     	6
+
+#define MXDM_INIT		DRVM_INIT
+#define MXDM_USER               DRVM_USER
+#define MXDM_MAPPER             DRVM_MAPPER
+
+#define	MXDM_GETNUMDEVS		1
+#define	MXDM_GETDEVCAPS		2
+#define	MXDM_OPEN		3
+#define	MXDM_CLOSE		4
+#define	MXDM_GETLINEINFO	5
+#define	MXDM_GETLINECONTROLS	6
+#define	MXDM_GETCONTROLDETAILS	7
+#define	MXDM_SETCONTROLDETAILS	8
+
+/* pre-defined joystick types */
+#define JOY_HW_NONE			0
+#define JOY_HW_CUSTOM			1
+#define JOY_HW_2A_2B_GENERIC		2
+#define JOY_HW_2A_4B_GENERIC		3
+#define JOY_HW_2B_GAMEPAD		4
+#define JOY_HW_2B_FLIGHTYOKE		5
+#define JOY_HW_2B_FLIGHTYOKETHROTTLE	6
+#define JOY_HW_3A_2B_GENERIC		7
+#define JOY_HW_3A_4B_GENERIC		8
+#define JOY_HW_4B_GAMEPAD		9
+#define JOY_HW_4B_FLIGHTYOKE		10
+#define JOY_HW_4B_FLIGHTYOKETHROTTLE	11
+#define JOY_HW_LASTENTRY		12
+
+/* calibration flags */
+#define JOY_ISCAL_XY            __MSABI_LONG(0x00000001)    /* XY are calibrated */
+#define JOY_ISCAL_Z             __MSABI_LONG(0x00000002)    /* Z is calibrated */
+#define JOY_ISCAL_R             __MSABI_LONG(0x00000004)    /* R is calibrated */
+#define JOY_ISCAL_U             __MSABI_LONG(0x00000008)    /* U is calibrated */
+#define JOY_ISCAL_V             __MSABI_LONG(0x00000010)    /* V is calibrated */
+#define JOY_ISCAL_POV           __MSABI_LONG(0x00000020)    /* POV is calibrated */
+
+/* point of view constants */
+#define JOY_POV_NUMDIRS          4
+#define JOY_POVVAL_FORWARD       0
+#define JOY_POVVAL_BACKWARD      1
+#define JOY_POVVAL_LEFT          2
+#define JOY_POVVAL_RIGHT         3
+
+/* Specific settings for joystick hardware */
+#define JOY_HWS_HASZ            __MSABI_LONG(0x00000001)    /* has Z info? */
+#define JOY_HWS_HASPOV          __MSABI_LONG(0x00000002)    /* point of view hat present */
+#define JOY_HWS_POVISBUTTONCOMBOS __MSABI_LONG(0x00000004)  /* pov done through combo of buttons */
+#define JOY_HWS_POVISPOLL       __MSABI_LONG(0x00000008)    /* pov done through polling */
+#define JOY_HWS_ISYOKE          __MSABI_LONG(0x00000010)    /* joystick is a flight yoke */
+#define JOY_HWS_ISGAMEPAD       __MSABI_LONG(0x00000020)    /* joystick is a game pad */
+#define JOY_HWS_ISCARCTRL       __MSABI_LONG(0x00000040)    /* joystick is a car controller */
+/* X defaults to J1 X axis */
+#define JOY_HWS_XISJ1Y          __MSABI_LONG(0x00000080)    /* X is on J1 Y axis */
+#define JOY_HWS_XISJ2X          __MSABI_LONG(0x00000100)    /* X is on J2 X axis */
+#define JOY_HWS_XISJ2Y          __MSABI_LONG(0x00000200)    /* X is on J2 Y axis */
+/* Y defaults to J1 Y axis */
+#define JOY_HWS_YISJ1X          __MSABI_LONG(0x00000400)    /* Y is on J1 X axis */
+#define JOY_HWS_YISJ2X          __MSABI_LONG(0x00000800)    /* Y is on J2 X axis */
+#define JOY_HWS_YISJ2Y          __MSABI_LONG(0x00001000)    /* Y is on J2 Y axis */
+/* Z defaults to J2 Y axis */
+#define JOY_HWS_ZISJ1X          __MSABI_LONG(0x00002000)    /* Z is on J1 X axis */
+#define JOY_HWS_ZISJ1Y          __MSABI_LONG(0x00004000)    /* Z is on J1 Y axis */
+#define JOY_HWS_ZISJ2X          __MSABI_LONG(0x00008000)    /* Z is on J2 X axis */
+/* POV defaults to J2 Y axis, if it is not button based */
+#define JOY_HWS_POVISJ1X        __MSABI_LONG(0x00010000)    /* pov done through J1 X axis */
+#define JOY_HWS_POVISJ1Y        __MSABI_LONG(0x00020000)    /* pov done through J1 Y axis */
+#define JOY_HWS_POVISJ2X        __MSABI_LONG(0x00040000)    /* pov done through J2 X axis */
+/* R defaults to J2 X axis */
+#define JOY_HWS_HASR            __MSABI_LONG(0x00080000)    /* has R (4th axis) info */
+#define JOY_HWS_RISJ1X          __MSABI_LONG(0x00100000)    /* R done through J1 X axis */
+#define JOY_HWS_RISJ1Y          __MSABI_LONG(0x00200000)    /* R done through J1 Y axis */
+#define JOY_HWS_RISJ2Y          __MSABI_LONG(0x00400000)    /* R done through J2 X axis */
+/* U & V for future hardware */
+#define JOY_HWS_HASU            __MSABI_LONG(0x00800000)    /* has U (5th axis) info */
+#define JOY_HWS_HASV            __MSABI_LONG(0x01000000)    /* has V (6th axis) info */
+
+/* Usage settings */
+#define JOY_US_HASRUDDER        __MSABI_LONG(0x00000001)    /* joystick configured with rudder */
+#define JOY_US_PRESENT          __MSABI_LONG(0x00000002)    /* is joystick actually present? */
+#define JOY_US_ISOEM            __MSABI_LONG(0x00000004)    /* joystick is an OEM defined type */
+
+
+/* struct for storing x,y, z, and rudder values */
+typedef struct joypos_tag {
+    DWORD	dwX;
+    DWORD	dwY;
+    DWORD	dwZ;
+    DWORD	dwR;
+    DWORD	dwU;
+    DWORD	dwV;
+} JOYPOS, *LPJOYPOS;
+
+/* struct for storing ranges */
+typedef struct joyrange_tag {
+    JOYPOS	jpMin;
+    JOYPOS	jpMax;
+    JOYPOS	jpCenter;
+} JOYRANGE,*LPJOYRANGE;
+
+typedef struct joyreguservalues_tag {
+    DWORD	dwTimeOut;	/* value at which to timeout joystick polling */
+    JOYRANGE	jrvRanges;	/* range of values app wants returned for axes */
+    JOYPOS	jpDeadZone;	/* area around center to be considered
+    				   as "dead". specified as a percentage
+				   (0-100). Only X & Y handled by system driver */
+} JOYREGUSERVALUES, *LPJOYREGUSERVALUES;
+
+typedef struct joyreghwsettings_tag {
+    DWORD	dwFlags;
+    DWORD	dwNumButtons;		/* number of buttons */
+} JOYREGHWSETTINGS, *LPJOYHWSETTINGS;
+
+/* range of values returned by the hardware (filled in by calibration) */
+typedef struct joyreghwvalues_tag {
+    JOYRANGE	jrvHardware;		/* values returned by hardware */
+    DWORD	dwPOVValues[JOY_POV_NUMDIRS];/* POV values returned by hardware */
+    DWORD	dwCalFlags;		/* what has been calibrated */
+} JOYREGHWVALUES, *LPJOYREGHWVALUES;
+
+/* hardware configuration */
+typedef struct joyreghwconfig_tag {
+    JOYREGHWSETTINGS	hws;		/* hardware settings */
+    DWORD		dwUsageSettings;/* usage settings */
+    JOYREGHWVALUES	hwv;		/* values returned by hardware */
+    DWORD		dwType;		/* type of joystick */
+    DWORD		dwReserved;	/* reserved for OEM drivers */
+} JOYREGHWCONFIG, *LPJOYREGHWCONFIG;
+
+/* joystick calibration info structure */
+typedef struct joycalibrate_tag {
+    UINT    wXbase;
+    UINT    wXdelta;
+    UINT    wYbase;
+    UINT    wYdelta;
+    UINT    wZbase;
+    UINT    wZdelta;
+} JOYCALIBRATE;
+typedef JOYCALIBRATE *LPJOYCALIBRATE;
+
+/* prototype for joystick message function */
+typedef UINT (CALLBACK * JOYDEVMSGPROC)(DWORD dwID, UINT uMessage, LPARAM lParam1, LPARAM lParam2);
+typedef JOYDEVMSGPROC *LPJOYDEVMSGPROC;
+
+/* messages sent to joystick driver's DriverProc() function */
+#define JDD_GETNUMDEVS          (DRV_RESERVED + 0x0001)
+#define JDD_GETDEVCAPS          (DRV_RESERVED + 0x0002)
+#define JDD_GETPOS              (DRV_RESERVED + 0x0101)
+#define JDD_SETCALIBRATION      (DRV_RESERVED + 0x0102)
+#define JDD_CONFIGCHANGED       (DRV_RESERVED + 0x0103)
+#define JDD_GETPOSEX            (DRV_RESERVED + 0x0104)
+
+#define MCI_MAX_DEVICE_TYPE_LENGTH 80
+
+#define MCI_FALSE                       (MCI_STRING_OFFSET + 19)
+#define MCI_TRUE                        (MCI_STRING_OFFSET + 20)
+
+#define MCI_FORMAT_RETURN_BASE          MCI_FORMAT_MILLISECONDS_S
+#define MCI_FORMAT_MILLISECONDS_S       (MCI_STRING_OFFSET + 21)
+#define MCI_FORMAT_HMS_S                (MCI_STRING_OFFSET + 22)
+#define MCI_FORMAT_MSF_S                (MCI_STRING_OFFSET + 23)
+#define MCI_FORMAT_FRAMES_S             (MCI_STRING_OFFSET + 24)
+#define MCI_FORMAT_SMPTE_24_S           (MCI_STRING_OFFSET + 25)
+#define MCI_FORMAT_SMPTE_25_S           (MCI_STRING_OFFSET + 26)
+#define MCI_FORMAT_SMPTE_30_S           (MCI_STRING_OFFSET + 27)
+#define MCI_FORMAT_SMPTE_30DROP_S       (MCI_STRING_OFFSET + 28)
+#define MCI_FORMAT_BYTES_S              (MCI_STRING_OFFSET + 29)
+#define MCI_FORMAT_SAMPLES_S            (MCI_STRING_OFFSET + 30)
+#define MCI_FORMAT_TMSF_S               (MCI_STRING_OFFSET + 31)
+
+#define MCI_VD_FORMAT_TRACK_S           (MCI_VD_OFFSET + 5)
+
+#define WAVE_FORMAT_PCM_S               (MCI_WAVE_OFFSET + 0)
+#define WAVE_MAPPER_S                   (MCI_WAVE_OFFSET + 1)
+
+#define MCI_SEQ_MAPPER_S                (MCI_SEQ_OFFSET + 5)
+#define MCI_SEQ_FILE_S                  (MCI_SEQ_OFFSET + 6)
+#define MCI_SEQ_MIDI_S                  (MCI_SEQ_OFFSET + 7)
+#define MCI_SEQ_SMPTE_S                 (MCI_SEQ_OFFSET + 8)
+#define MCI_SEQ_FORMAT_SONGPTR_S        (MCI_SEQ_OFFSET + 9)
+#define MCI_SEQ_NONE_S                  (MCI_SEQ_OFFSET + 10)
+#define MIDIMAPPER_S                    (MCI_SEQ_OFFSET + 11)
+
+#define MCI_RESOURCE_RETURNED       0x00010000  /* resource ID */
+#define MCI_COLONIZED3_RETURN       0x00020000  /* colonized ID, 3 bytes data */
+#define MCI_COLONIZED4_RETURN       0x00040000  /* colonized ID, 4 bytes data */
+#define MCI_INTEGER_RETURNED        0x00080000  /* integer conversion needed */
+#define MCI_RESOURCE_DRIVER         0x00100000  /* driver owns returned resource */
+
+#define MCI_NO_COMMAND_TABLE    0xFFFF
+
+#define MCI_COMMAND_HEAD        0
+#define MCI_STRING              1
+#define MCI_INTEGER             2
+#define MCI_END_COMMAND         3
+#define MCI_RETURN              4
+#define MCI_FLAG                5
+#define MCI_END_COMMAND_LIST    6
+#define MCI_RECT                7
+#define MCI_CONSTANT            8
+#define MCI_END_CONSTANT        9
+#define MCI_HWND                10
+#define MCI_HPAL                11
+#define MCI_HDC                 12
+
+#ifdef _WIN64
+#define MCI_INTEGER64           13
+#endif /* _WIN64 */
+
+#define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes))
+
+typedef struct {
+	HWAVE			hWave;
+	LPWAVEFORMATEX		lpFormat;
+	DWORD_PTR		dwCallback;
+	DWORD_PTR		dwInstance;
+	UINT			uMappedDeviceID;
+	DWORD_PTR		dnDevNode;
+} WAVEOPENDESC, *LPWAVEOPENDESC;
+
+typedef struct {
+        DWORD  			dwStreamID;
+        WORD   			wDeviceID;
+} MIDIOPENSTRMID;
+
+typedef struct {
+	HMIDI			hMidi;
+	DWORD_PTR		dwCallback;
+	DWORD_PTR		dwInstance;
+	DWORD_PTR		dnDevNode;
+        DWORD          		cIds;
+        MIDIOPENSTRMID 		rgIds;
+} MIDIOPENDESC, *LPMIDIOPENDESC;
+
+typedef struct tMIXEROPENDESC
+{
+	HMIXEROBJ		hmx;
+        LPVOID			pReserved0;
+	DWORD_PTR		dwCallback;
+	DWORD_PTR		dwInstance;
+	DWORD_PTR		dnDevNode;
+} MIXEROPENDESC, *LPMIXEROPENDESC;
+
+typedef struct {
+	UINT			wDeviceID;		/* device ID */
+	LPSTR			lpstrParams;		/* parameter string for entry in SYSTEM.INI */
+	UINT			wCustomCommandTable;	/* custom command table (0xFFFF if none) * filled in by the driver */
+	UINT			wType;			/* driver type (filled in by the driver) */
+} MCI_OPEN_DRIVER_PARMSA, *LPMCI_OPEN_DRIVER_PARMSA;
+
+typedef struct {
+	UINT			wDeviceID;		/* device ID */
+	LPWSTR			lpstrParams;		/* parameter string for entry in SYSTEM.INI */
+	UINT			wCustomCommandTable;	/* custom command table (0xFFFF if none) * filled in by the driver */
+	UINT			wType;			/* driver type (filled in by the driver) */
+} MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW;
+DECL_WINELIB_TYPE_AW(MCI_OPEN_DRIVER_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OPEN_DRIVER_PARMS)
+
+DWORD_PTR		WINAPI	mciGetDriverData(UINT uDeviceID);
+BOOL			WINAPI	mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData);
+UINT			WINAPI	mciDriverYield(UINT uDeviceID);
+BOOL			WINAPI	mciDriverNotify(HWND hwndCallback, UINT uDeviceID,
+						UINT uStatus);
+UINT			WINAPI	mciLoadCommandResource(HINSTANCE hInstance,
+					       LPCWSTR lpResName, UINT uType);
+BOOL			WINAPI	mciFreeCommandResource(UINT uTable);
+
+#define DCB_NULL		0x0000
+#define DCB_WINDOW		0x0001			/* dwCallback is a HWND */
+#define DCB_TASK		0x0002			/* dwCallback is a HTASK */
+#define DCB_FUNCTION		0x0003			/* dwCallback is a FARPROC */
+#define DCB_EVENT		0x0005			/* dwCallback is an EVENT Handler */
+#define DCB_TYPEMASK		0x0007
+#define DCB_NOSWITCH		0x0008			/* don't switch stacks for callback */
+
+BOOL WINAPI DriverCallback(DWORD_PTR dwCallBack, DWORD uFlags, HDRVR hDev,
+                           DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
+
+typedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst);
+
+#define TASKERR_NOTASKSUPPORT 1
+#define TASKERR_OUTOFMEMORY   2
+UINT     WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD_PTR);
+VOID     WINAPI mmTaskBlock(DWORD);
+BOOL     WINAPI mmTaskSignal(DWORD);
+VOID     WINAPI mmTaskYield(VOID);
+DWORD    WINAPI mmGetCurrentTask(VOID);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MMDDK_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl
new file mode 100644
index 0000000..0aa872d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "propsys.idl";
+
+cpp_quote("#ifndef E_NOTFOUND")
+cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
+cpp_quote("#endif")
+cpp_quote("#ifndef E_UNSUPPORTED_TYPE")
+cpp_quote("#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)")
+cpp_quote("#endif")
+
+
+cpp_quote("#define DEVICE_STATE_ACTIVE 0x1")
+cpp_quote("#define DEVICE_STATE_DISABLED 0x2")
+cpp_quote("#define DEVICE_STATE_NOTPRESENT 0x4")
+cpp_quote("#define DEVICE_STATE_UNPLUGGED 0x8")
+cpp_quote("#define DEVICE_STATEMASK_ALL 0xf")
+
+/* Generic PKEY_AudioEndPoint ID for grepping: {1da5d803-d492-4edd-8c23-e0c0ffee7f0e} */
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);")
+
+cpp_quote("#define ENDPOINT_SYSFX_ENABLED 0")
+cpp_quote("#define ENDPOINT_SYSFX_DISABLED 1")
+
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);")
+
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);")
+
+typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS
+{
+    DWORD cbDirectXAudioActivationParams;
+    GUID guidAudioSession;
+    DWORD dwAudioStreamFlags;
+} DIRECTX_AUDIO_ACTIVATION_PARAMS, *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
+
+typedef enum _EDataFlow
+{
+    eRender,
+    eCapture,
+    eAll,
+    EDataFlow_enum_count
+} EDataFlow;
+
+typedef enum _ERole
+{
+    eConsole,
+    eMultimedia,
+    eCommunications,
+    ERole_enum_count
+} ERole;
+
+typedef enum _EndpointFormFactor
+{
+    RemoteNetworkDevice,
+    Speakers,
+    LineLevel,
+    Headphones,
+    Microphone,
+    Headset,
+    Handset,
+    UnknownDigitalPassthrough,
+    SPDIF,
+    DigitalAudioDisplayDevice,
+    UnknownFormFactor,
+    EndpointFormFactor_enum_count
+} EndpointFormFactor;
+
+cpp_quote("#define HDMI DigitalAudioDisplayDevice")
+
+[
+    object,
+    local,
+    uuid(7991eec9-7e89-4d85-8390-6c703cec60c0),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IMMNotificationClient : IUnknown
+{
+    [id(1)] HRESULT OnDeviceStateChanged(
+        [in] LPCWSTR pwstrDeviceId,
+        [in] DWORD dwNewState
+    );
+    [id(2)] HRESULT OnDeviceAdded(
+        [in] LPCWSTR pwstrDeviceId
+    );
+    [id(3)] HRESULT OnDeviceRemoved(
+        [in] LPCWSTR pwstrDeviceId
+    );
+    [id(4)] HRESULT OnDefaultDeviceChanged(
+        [in] EDataFlow flow,
+        [in] ERole role,
+        [in] LPCWSTR pwstrDeviceId
+    );
+    [id(5)] HRESULT OnPropertyValueChanged(
+        [in] LPCWSTR pwstrDeviceId,
+        [in] const PROPERTYKEY key
+    );
+}
+
+[
+    object,
+    local,
+    uuid(d666063f-1587-4e43-81f1-b948e807363f),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IMMDevice : IUnknown
+{
+    [id(1)] HRESULT Activate(
+        [in] REFIID iid,
+        [in] DWORD dwClsCtx,
+        [in,unique] PROPVARIANT *pActivationParams,
+        [out,iid_is(iid)] void **ppv
+    );
+    [id(2)] HRESULT OpenPropertyStore(
+        [in] DWORD stgmAccess,
+        [out] IPropertyStore **ppProperties
+    );
+    [id(3)] HRESULT GetId(
+        [out] LPWSTR *ppstrId
+    );
+    [id(4)] HRESULT GetState(
+        [out] DWORD *pdwState
+    );
+}
+
+[
+    object,
+    local,
+    uuid(0bd7a1be-7a1a-44db-8397-cc5392387b5e),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IMMDeviceCollection : IUnknown
+{
+    [id(1)] HRESULT GetCount(
+        [out] UINT *pcDevices
+    );
+    [id(2)] HRESULT Item(
+        [in] UINT nDevice,
+        [out] IMMDevice **ppdevice
+    );
+}
+
+[
+    object,
+    local,
+    uuid(1be09788-6894-4089-8586-9a2a6c265ac5),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IMMEndpoint : IUnknown
+{
+    [id(1)] HRESULT GetDataFlow(
+        [out] EDataFlow *pDataFlow
+    );
+}
+
+[
+    object,
+    local,
+    uuid(a95664d2-9614-4f35-a746-de8db63617e6),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IMMDeviceEnumerator : IUnknown
+{
+    [id(1)] HRESULT EnumAudioEndpoints(
+        [in] EDataFlow dataFlow,
+        [in] DWORD dwStateMask,
+        [out] IMMDeviceCollection **ppDevices
+    );
+    [id(2)] HRESULT GetDefaultAudioEndpoint(
+        [in] EDataFlow dataFlow,
+        [in] ERole role,
+        [out] IMMDevice **ppEndpoint
+    );
+    [id(3)] HRESULT GetDevice(
+        [in] LPCWSTR pwstrId,
+        [out] IMMDevice **ppDevice
+    );
+    [id(4)] HRESULT RegisterEndpointNotificationCallback(
+        [in] IMMNotificationClient *pClient
+    );
+    [id(5)] HRESULT UnregisterEndpointNotificationCallback(
+        [in] IMMNotificationClient *pClient
+    );
+}
+
+[
+    object,
+    local,
+    uuid(3b0d0ea4-d0a9-4b0e-935b-09516746fac0),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IMMDeviceActivator : IUnknown
+{
+    [id(1)] HRESULT Activate(
+        [in] REFIID iid,
+        [in] IMMDevice *pDevice,
+        [in] PROPVARIANT *pActivationParams,
+        [out,iid_is(iid)] void **ppv
+    );
+}
+
+typedef struct _AudioExtensionParams
+{
+    LPARAM AddPageParam;
+    IMMDevice *pEndPoint;
+    IMMDevice *pPnpInterface;
+    IMMDevice *pPnpDevnode;
+} AudioExtensionParams;
+
+[
+    uuid(2fdaafa3-7523-4f66-9957-9d5e7fe698f6),
+    version(1.0)
+]
+library MMDeviceAPILib
+{
+    [ uuid(bcde0395-e52f-467c-8e3d-c4579291692e) ] coclass MMDeviceEnumerator
+    {
+        [default] interface IMMDeviceEnumerator;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h
new file mode 100644
index 0000000..ee404f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h
@@ -0,0 +1,508 @@
+/*
+ * Declarations for MultiMedia-REGistration
+ *
+ * Copyright (C) 1999 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MMREG_H
+#define __WINE_MMREG_H
+
+/***********************************************************************
+ * Defines/Enums
+ */
+
+#ifndef _ACM_WAVEFILTER
+#define _ACM_WAVEFILTER
+
+#define WAVE_FILTER_UNKNOWN     0x0000
+#define WAVE_FILTER_DEVELOPMENT 0xFFFF
+
+typedef struct _WAVEFILTER {
+  DWORD   cbStruct;
+  DWORD   dwFilterTag;
+  DWORD   fdwFilter;
+  DWORD   dwReserved[5];
+} WAVEFILTER, *PWAVEFILTER, *NPWAVEFILTER, *LPWAVEFILTER;
+#endif /* _ACM_WAVEFILTER */
+
+#ifndef WAVE_FILTER_VOLUME
+#define WAVE_FILTER_VOLUME      0x0001
+
+typedef struct _WAVEFILTER_VOLUME {
+   WAVEFILTER      wfltr;
+   DWORD           dwVolume;
+} VOLUMEWAVEFILTER, *PVOLUMEWAVEFILTER, *NPVOLUMEWAVEFILTER, *LPVOLUMEWAVEFILTER;
+#endif  /* WAVE_FILTER_VOLUME */
+
+#ifndef WAVE_FILTER_ECHO
+#define WAVE_FILTER_ECHO        0x0002
+
+typedef struct WAVEFILTER_ECHO {
+   WAVEFILTER      wfltr;
+   DWORD           dwVolume;
+   DWORD           dwDelay;
+} ECHOWAVEFILTER, *PECHOWAVEFILTER, *NPECHOWAVEFILTER, *LPECHOWAVEFILTER;
+#endif  /* WAVEFILTER_ECHO */
+
+#ifndef _WAVEFORMATEX_
+#define _WAVEFORMATEX_
+typedef struct _WAVEFORMATEX {
+  WORD   wFormatTag;
+  WORD   nChannels;
+  DWORD  nSamplesPerSec;
+  DWORD  nAvgBytesPerSec;
+  WORD   nBlockAlign;
+  WORD   wBitsPerSample;
+  WORD   cbSize;
+} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
+#endif /* _WAVEFORMATEX_ */
+
+/* WAVE form wFormatTag IDs */
+#define  WAVE_FORMAT_UNKNOWN			0x0000	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_ADPCM			0x0002	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_IEEE_FLOAT			0x0003	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_IBM_CVSD			0x0005	/*  IBM Corporation  */
+#define  WAVE_FORMAT_ALAW			0x0006	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_MULAW			0x0007	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_OKI_ADPCM			0x0010	/*  OKI  */
+#define  WAVE_FORMAT_DVI_ADPCM			0x0011	/*  Intel Corporation  */
+#define  WAVE_FORMAT_IMA_ADPCM			(WAVE_FORMAT_DVI_ADPCM)	/*  Intel Corporation  */
+#define  WAVE_FORMAT_MEDIASPACE_ADPCM		0x0012	/*  Videologic  */
+#define  WAVE_FORMAT_SIERRA_ADPCM		0x0013	/*  Sierra Semiconductor Corp  */
+#define  WAVE_FORMAT_G723_ADPCM			0x0014	/*  Antex Electronics Corporation  */
+#define  WAVE_FORMAT_DIGISTD			0x0015	/*  DSP Solutions, Inc.  */
+#define  WAVE_FORMAT_DIGIFIX			0x0016	/*  DSP Solutions, Inc.  */
+#define  WAVE_FORMAT_DIALOGIC_OKI_ADPCM		0x0017	/*  Dialogic Corporation  */
+#define  WAVE_FORMAT_YAMAHA_ADPCM		0x0020	/*  Yamaha Corporation of America  */
+#define  WAVE_FORMAT_SONARC			0x0021	/*  Speech Compression  */
+#define  WAVE_FORMAT_DSPGROUP_TRUESPEECH	0x0022	/*  DSP Group, Inc  */
+#define  WAVE_FORMAT_ECHOSC1			0x0023	/*  Echo Speech Corporation  */
+#define  WAVE_FORMAT_AUDIOFILE_AF36		0x0024	/*    */
+#define  WAVE_FORMAT_APTX			0x0025	/*  Audio Processing Technology  */
+#define  WAVE_FORMAT_AUDIOFILE_AF10		0x0026	/*    */
+#define  WAVE_FORMAT_DOLBY_AC2			0x0030	/*  Dolby Laboratories  */
+#define  WAVE_FORMAT_GSM610			0x0031	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_ANTEX_ADPCME		0x0033	/*  Antex Electronics Corporation  */
+#define  WAVE_FORMAT_CONTROL_RES_VQLPC		0x0034	/*  Control Resources Limited  */
+#define  WAVE_FORMAT_DIGIREAL			0x0035	/*  DSP Solutions, Inc.  */
+#define  WAVE_FORMAT_DIGIADPCM			0x0036	/*  DSP Solutions, Inc.  */
+#define  WAVE_FORMAT_CONTROL_RES_CR10		0x0037	/*  Control Resources Limited  */
+#define  WAVE_FORMAT_NMS_VBXADPCM		0x0038	/*  Natural MicroSystems  */
+#define  WAVE_FORMAT_G721_ADPCM			0x0040	/*  Antex Electronics Corporation  */
+#define  WAVE_FORMAT_MPEG			0x0050	/*  Microsoft Corporation  */
+#define  WAVE_FORMAT_MPEGLAYER3			0x0055
+#define  WAVE_FORMAT_CREATIVE_ADPCM		0x0200	/*  Creative Labs, Inc  */
+#define  WAVE_FORMAT_CREATIVE_FASTSPEECH8	0x0202	/*  Creative Labs, Inc  */
+#define  WAVE_FORMAT_CREATIVE_FASTSPEECH10	0x0203	/*  Creative Labs, Inc  */
+#define  WAVE_FORMAT_FM_TOWNS_SND		0x0300	/*  Fujitsu Corp.  */
+#define  WAVE_FORMAT_OLIGSM			0x1000	/*  Ing C. Olivetti & C., S.p.A.  */
+#define  WAVE_FORMAT_OLIADPCM			0x1001	/*  Ing C. Olivetti & C., S.p.A.  */
+#define  WAVE_FORMAT_OLICELP			0x1002	/*  Ing C. Olivetti & C., S.p.A.  */
+#define  WAVE_FORMAT_OLISBC			0x1003	/*  Ing C. Olivetti & C., S.p.A.  */
+#define  WAVE_FORMAT_OLIOPR			0x1004	/*  Ing C. Olivetti & C., S.p.A.  */
+
+#if !defined(WAVE_FORMAT_EXTENSIBLE)
+#define  WAVE_FORMAT_EXTENSIBLE			0xFFFE  /* Microsoft */
+#endif
+
+#define WAVE_FORMAT_DEVELOPMENT         	(0xFFFF)
+
+typedef struct adpcmcoef_tag {
+	short   iCoef1;
+	short   iCoef2;
+} ADPCMCOEFSET;
+typedef ADPCMCOEFSET *PADPCMCOEFSET,
+	*NPADPCMCOEFSET, *LPADPCMCOEFSET;
+
+typedef struct adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+	WORD            wNumCoef;
+	/* FIXME: this should be aCoef[0] */
+	ADPCMCOEFSET    aCoef[1];
+} ADPCMWAVEFORMAT;
+typedef ADPCMWAVEFORMAT *PADPCMWAVEFORMAT,
+	*NPADPCMWAVEFORMAT, *LPADPCMWAVEFORMAT;
+
+typedef struct dvi_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} DVIADPCMWAVEFORMAT;
+typedef DVIADPCMWAVEFORMAT *PDVIADPCMWAVEFORMAT,
+	*NPDVIADPCMWAVEFORMAT, *LPDVIADPCMWAVEFORMAT;
+
+typedef struct ima_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} IMAADPCMWAVEFORMAT;
+typedef IMAADPCMWAVEFORMAT *PIMAADPCMWAVEFORMAT, *NPIMAADPCMWAVEFORMAT,
+	*LPIMAADPCMWAVEFORMAT;
+
+typedef struct mediaspace_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wRevision;
+} MEDIASPACEADPCMWAVEFORMAT;
+typedef MEDIASPACEADPCMWAVEFORMAT *PMEDIASPACEADPCMWAVEFORMAT,
+	*NPMEDIASPACEADPCMWAVEFORMAT, *LPMEDIASPACEADPCMWAVEFORMAT;
+
+typedef struct sierra_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wRevision;
+} SIERRAADPCMWAVEFORMAT;
+typedef SIERRAADPCMWAVEFORMAT *PSIERRAADPCMWAVEFORMAT,
+	*NPSIERRAADPCMWAVEFORMAT, *LPSIERRAADPCMWAVEFORMAT;
+
+typedef struct g723_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            cbExtraSize;
+	WORD            nAuxBlockSize;
+} G723_ADPCMWAVEFORMAT;
+typedef G723_ADPCMWAVEFORMAT *PG723_ADPCMWAVEFORMAT,
+	*NPG723_ADPCMWAVEFORMAT, *LPG723_ADPCMWAVEFORMAT;
+
+typedef struct digistdwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} DIGISTDWAVEFORMAT;
+typedef DIGISTDWAVEFORMAT *PDIGISTDWAVEFORMAT,
+	*NPDIGISTDWAVEFORMAT, *LPDIGISTDWAVEFORMAT;
+
+typedef struct digifixwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} DIGIFIXWAVEFORMAT;
+typedef DIGIFIXWAVEFORMAT *PDIGIFIXWAVEFORMAT,
+	*NPDIGIFIXWAVEFORMAT, *LPDIGIFIXWAVEFORMAT;
+
+typedef struct creative_fastspeechformat_tag {
+	WAVEFORMATEX    ewf;
+} DIALOGICOKIADPCMWAVEFORMAT;
+typedef DIALOGICOKIADPCMWAVEFORMAT *PDIALOGICOKIADPCMWAVEFORMAT,
+	*NPDIALOGICOKIADPCMWAVEFORMAT, *LPDIALOGICOKIADPCMWAVEFORMAT;
+
+typedef struct yamaha_adpmcwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} YAMAHA_ADPCMWAVEFORMAT;
+typedef YAMAHA_ADPCMWAVEFORMAT *PYAMAHA_ADPCMWAVEFORMAT,
+	*NPYAMAHA_ADPCMWAVEFORMAT, *LPYAMAHA_ADPCMWAVEFORMAT;
+
+typedef struct sonarcwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wCompType;
+} SONARCWAVEFORMAT;
+typedef SONARCWAVEFORMAT *PSONARCWAVEFORMAT,
+	*NPSONARCWAVEFORMAT,*LPSONARCWAVEFORMAT;
+
+typedef struct truespeechwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wRevision;
+	WORD            nSamplesPerBlock;
+	BYTE            abReserved[28];
+} TRUESPEECHWAVEFORMAT;
+typedef TRUESPEECHWAVEFORMAT *PTRUESPEECHWAVEFORMAT,
+	*NPTRUESPEECHWAVEFORMAT, *LPTRUESPEECHWAVEFORMAT;
+
+typedef struct echosc1waveformat_tag {
+	WAVEFORMATEX    wfx;
+} ECHOSC1WAVEFORMAT;
+typedef ECHOSC1WAVEFORMAT *PECHOSC1WAVEFORMAT,
+	*NPECHOSC1WAVEFORMAT, *LPECHOSC1WAVEFORMAT;
+
+typedef struct audiofile_af36waveformat_tag {
+	WAVEFORMATEX    wfx;
+} AUDIOFILE_AF36WAVEFORMAT;
+typedef AUDIOFILE_AF36WAVEFORMAT *PAUDIOFILE_AF36WAVEFORMAT,
+	*NPAUDIOFILE_AF36WAVEFORMAT, *LPAUDIOFILE_AF36WAVEFORMAT;
+
+typedef struct aptxwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} APTXWAVEFORMAT;
+typedef APTXWAVEFORMAT *PAPTXWAVEFORMAT,
+	*NPAPTXWAVEFORMAT, *LPAPTXWAVEFORMAT;
+
+typedef struct audiofile_af10waveformat_tag {
+	WAVEFORMATEX    wfx;
+} AUDIOFILE_AF10WAVEFORMAT;
+typedef AUDIOFILE_AF10WAVEFORMAT *PAUDIOFILE_AF10WAVEFORMAT,
+	*NPAUDIOFILE_AF10WAVEFORMAT,  *LPAUDIOFILE_AF10WAVEFORMAT;
+
+typedef struct dolbyac2waveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            nAuxBitsCode;
+} DOLBYAC2WAVEFORMAT;
+
+typedef struct gsm610waveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} GSM610WAVEFORMAT;
+typedef GSM610WAVEFORMAT *PGSM610WAVEFORMAT,
+	*NPGSM610WAVEFORMAT, *LPGSM610WAVEFORMAT;
+
+typedef struct adpcmewaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} ADPCMEWAVEFORMAT;
+typedef ADPCMEWAVEFORMAT *PADPCMEWAVEFORMAT,
+	*NPADPCMEWAVEFORMAT, *LPADPCMEWAVEFORMAT;
+
+typedef struct contres_vqlpcwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} CONTRESVQLPCWAVEFORMAT;
+typedef CONTRESVQLPCWAVEFORMAT *PCONTRESVQLPCWAVEFORMAT,
+	*NPCONTRESVQLPCWAVEFORMAT, *LPCONTRESVQLPCWAVEFORMAT;
+
+typedef struct digirealwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} DIGIREALWAVEFORMAT;
+typedef DIGIREALWAVEFORMAT *PDIGIREALWAVEFORMAT,
+	*NPDIGIREALWAVEFORMAT, *LPDIGIREALWAVEFORMAT;
+
+typedef struct digiadpcmmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} DIGIADPCMWAVEFORMAT;
+typedef DIGIADPCMWAVEFORMAT *PDIGIADPCMWAVEFORMAT,
+	*NPDIGIADPCMWAVEFORMAT, *LPDIGIADPCMWAVEFORMAT;
+
+typedef struct contres_cr10waveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} CONTRESCR10WAVEFORMAT;
+typedef CONTRESCR10WAVEFORMAT *PCONTRESCR10WAVEFORMAT,
+	*NPCONTRESCR10WAVEFORMAT, *LPCONTRESCR10WAVEFORMAT;
+
+typedef struct nms_vbxadpcmmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wSamplesPerBlock;
+} NMS_VBXADPCMWAVEFORMAT;
+typedef NMS_VBXADPCMWAVEFORMAT *PNMS_VBXADPCMWAVEFORMAT,
+	*NPNMS_VBXADPCMWAVEFORMAT, *LPNMS_VBXADPCMWAVEFORMAT;
+
+typedef struct g721_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            nAuxBlockSize;
+} G721_ADPCMWAVEFORMAT;
+typedef G721_ADPCMWAVEFORMAT *PG721_ADPCMWAVEFORMAT,
+	*NG721_ADPCMWAVEFORMAT, *LPG721_ADPCMWAVEFORMAT;
+
+typedef struct creative_adpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wRevision;
+} CREATIVEADPCMWAVEFORMAT;
+typedef CREATIVEADPCMWAVEFORMAT *PCREATIVEADPCMWAVEFORMAT,
+	*NPCREATIVEADPCMWAVEFORMAT, *LPCREATIVEADPCMWAVEFORMAT;
+
+typedef struct creative_fastspeech8format_tag {
+	WAVEFORMATEX    wfx;
+	WORD wRevision;
+} CREATIVEFASTSPEECH8WAVEFORMAT;
+typedef CREATIVEFASTSPEECH8WAVEFORMAT *PCREATIVEFASTSPEECH8WAVEFORMAT,
+	*NPCREATIVEFASTSPEECH8WAVEFORMAT, *LPCREATIVEFASTSPEECH8WAVEFORMAT;
+
+typedef struct creative_fastspeech10format_tag {
+	WAVEFORMATEX    wfx;
+	WORD wRevision;
+} CREATIVEFASTSPEECH10WAVEFORMAT;
+typedef CREATIVEFASTSPEECH10WAVEFORMAT *PCREATIVEFASTSPEECH10WAVEFORMAT,
+	*NPCREATIVEFASTSPEECH10WAVEFORMAT, *LPCREATIVEFASTSPEECH10WAVEFORMAT;
+
+typedef struct fmtowns_snd_waveformat_tag {
+	WAVEFORMATEX    wfx;
+	WORD            wRevision;
+} FMTOWNS_SND_WAVEFORMAT;
+typedef FMTOWNS_SND_WAVEFORMAT *PFMTOWNS_SND_WAVEFORMAT,
+	*NPFMTOWNS_SND_WAVEFORMAT, *LPFMTOWNS_SND_WAVEFORMAT;
+
+typedef struct oligsmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} OLIGSMWAVEFORMAT;
+typedef OLIGSMWAVEFORMAT *POLIGSMWAVEFORMAT,
+	*NPOLIGSMWAVEFORMAT, *LPOLIGSMWAVEFORMAT;
+
+typedef struct oliadpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} OLIADPCMWAVEFORMAT;
+typedef OLIADPCMWAVEFORMAT *POLIADPCMWAVEFORMAT,
+	*NPOLIADPCMWAVEFORMAT, *LPOLIADPCMWAVEFORMAT;
+
+typedef struct olicelpwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} OLICELPWAVEFORMAT;
+typedef OLICELPWAVEFORMAT *POLICELPWAVEFORMAT,
+	*NPOLICELPWAVEFORMAT, *LPOLICELPWAVEFORMAT;
+
+typedef struct olisbcwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} OLISBCWAVEFORMAT;
+typedef OLISBCWAVEFORMAT *POLISBCWAVEFORMAT,
+	*NPOLISBCWAVEFORMAT, *LPOLISBCWAVEFORMAT;
+
+typedef struct olioprwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} OLIOPRWAVEFORMAT;
+typedef OLIOPRWAVEFORMAT *POLIOPRWAVEFORMAT,
+	*NPOLIOPRWAVEFORMAT, *LPOLIOPRWAVEFORMAT;
+
+typedef struct csimaadpcmwaveformat_tag {
+	WAVEFORMATEX    wfx;
+} CSIMAADPCMWAVEFORMAT;
+typedef CSIMAADPCMWAVEFORMAT *PCSIMAADPCMWAVEFORMAT,
+	*NPCSIMAADPCMWAVEFORMAT, *LPCSIMAADPCMWAVEFORMAT;
+
+typedef struct mpeg1waveformat_tag {
+	WAVEFORMATEX	wfx;
+	WORD		fwHeadLayer;
+	DWORD		dwHeadBitrate;
+	WORD		fwHeadMode;
+	WORD		fwHeadModeExt;
+	WORD		wHeadEmphasis;
+	WORD		fwHeadFlags;
+	DWORD		dwPTSLow;
+	DWORD		dwPTSHigh;
+} MPEG1WAVEFORMAT,* PMPEG1WAVEFORMAT;
+
+#define	ACM_MPEG_LAYER1		0x0001
+#define	ACM_MPEG_LAYER2		0x0002
+#define	ACM_MPEG_LAYER3		0x0004
+
+#define	ACM_MPEG_STEREO		0x0001
+#define	ACM_MPEG_JOINTSTEREO	0x0002
+#define	ACM_MPEG_DUALCHANNEL	0x0004
+#define	ACM_MPEG_SINGLECHANNEL	0x0008
+#define	ACM_MPEG_PRIVATEBIT	0x0001
+#define	ACM_MPEG_COPYRIGHT	0x0002
+#define	ACM_MPEG_ORIGINALHOME	0x0004
+#define	ACM_MPEG_PROTECTIONBIT	0x0008
+#define	ACM_MPEG_ID_MPEG1	0x0010
+
+typedef struct mpeglayer3waveformat_tag {
+	WAVEFORMATEX	wfx;
+	WORD		wID;
+	DWORD		fdwFlags;
+	WORD		nBlockSize;
+	WORD		nFramesPerBlock;
+	WORD		nCodecDelay;
+} MPEGLAYER3WAVEFORMAT;
+
+#define MPEGLAYER3_WFX_EXTRA_BYTES   12
+
+#define MPEGLAYER3_ID_UNKNOWN           0
+#define MPEGLAYER3_ID_MPEG		1
+#define MPEGLAYER3_ID_CONSTANTFRAMESIZE	2
+
+#define MPEGLAYER3_FLAG_PADDING_ISO	0x00000000
+#define MPEGLAYER3_FLAG_PADDING_ON	0x00000001
+#define MPEGLAYER3_FLAG_PADDING_OFF	0x00000002
+
+#ifdef GUID_DEFINED
+
+#ifndef _WAVEFORMATEXTENSIBLE_
+#define _WAVEFORMATEXTENSIBLE_
+typedef struct {
+    WAVEFORMATEX    Format;
+    union {
+        WORD        wValidBitsPerSample;
+        WORD        wSamplesPerBlock;
+        WORD        wReserved;
+    } Samples;
+    DWORD           dwChannelMask;
+    GUID            SubFormat;
+} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
+#endif /* _WAVEFORMATEXTENSIBLE_ */
+
+#endif /* GUID_DEFINED */
+
+typedef WAVEFORMATEXTENSIBLE    WAVEFORMATPCMEX;
+typedef WAVEFORMATPCMEX*        PWAVEFORMATPCMEX;
+typedef WAVEFORMATPCMEX*        NPWAVEFORMATPCMEX;
+typedef WAVEFORMATPCMEX*        LPWAVEFORMATPCMEX;
+
+typedef WAVEFORMATEXTENSIBLE    WAVEFORMATIEEEFLOATEX;
+typedef WAVEFORMATIEEEFLOATEX*  PWAVEFORMATIEEEFLOATEX;
+typedef WAVEFORMATIEEEFLOATEX*  NPWAVEFORMATIEEEFLOATEX;
+typedef WAVEFORMATIEEEFLOATEX*  LPWAVEFORMATIEEEFLOATEX;
+
+#ifndef _SPEAKER_POSITIONS_
+#define _SPEAKER_POSITIONS_
+
+#define SPEAKER_FRONT_LEFT              0x00000001
+#define SPEAKER_FRONT_RIGHT             0x00000002
+#define SPEAKER_FRONT_CENTER            0x00000004
+#define SPEAKER_LOW_FREQUENCY           0x00000008
+#define SPEAKER_BACK_LEFT               0x00000010
+#define SPEAKER_BACK_RIGHT              0x00000020
+#define SPEAKER_FRONT_LEFT_OF_CENTER    0x00000040
+#define SPEAKER_FRONT_RIGHT_OF_CENTER   0x00000080
+#define SPEAKER_BACK_CENTER             0x00000100
+#define SPEAKER_SIDE_LEFT               0x00000200
+#define SPEAKER_SIDE_RIGHT              0x00000400
+#define SPEAKER_TOP_CENTER              0x00000800
+#define SPEAKER_TOP_FRONT_LEFT          0x00001000
+#define SPEAKER_TOP_FRONT_CENTER        0x00002000
+#define SPEAKER_TOP_FRONT_RIGHT         0x00004000
+#define SPEAKER_TOP_BACK_LEFT           0x00008000
+#define SPEAKER_TOP_BACK_CENTER         0x00010000
+#define SPEAKER_TOP_BACK_RIGHT          0x00020000
+#define SPEAKER_RESERVED                0x7FFC0000
+#define SPEAKER_ALL                     0x80000000
+
+#endif /* _SPEAKER_POSITIONS_ */
+
+
+/* DIB stuff */
+
+#ifndef BI_BITFIELDS
+#define BI_BITFIELDS     3
+#endif
+
+#ifndef QUERYDIBSUPPORT
+#define	QUERYDIBSUPPORT		3073
+#define	QDI_SETDIBITS		1
+#define	QDI_GETDIBITS		2
+#define	QDI_DIBTOSCREEN		4
+#define	QDI_STRETCHDIB		8
+#endif
+
+#ifndef NOBITMAP
+typedef struct tagEXBMINFOHEADER {
+    BITMAPINFOHEADER bmi;
+    DWORD biExtDataOffset;
+} EXBMINFOHEADER;
+#endif
+
+
+/* Video stuff */
+
+#ifndef NONEWIC
+
+#ifndef ICTYPE_VIDEO
+#define ICTYPE_VIDEO		mmioFOURCC('v', 'i', 'd', 'c')
+#define ICTYPE_AUDIO		mmioFOURCC('a', 'u', 'd', 'c')
+#endif
+
+#endif
+
+#endif /* __WINE_MMREG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl
new file mode 100644
index 0000000..35b3953
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#define MS_ERROR_CODE(x)                  MAKE_HRESULT(1, FACILITY_ITF, (x) + 0x400)")
+cpp_quote("#define MS_SUCCESS_CODE(x)                MAKE_HRESULT(0, FACILITY_ITF, x)")
+cpp_quote("#define MS_S_PENDING                      MS_SUCCESS_CODE(1)")
+cpp_quote("#define MS_S_NOUPDATE                     MS_SUCCESS_CODE(2)")
+cpp_quote("#define MS_S_ENDOFSTREAM                  MS_SUCCESS_CODE(3)")
+
+cpp_quote("#define MS_E_SAMPLEALLOC                  MS_ERROR_CODE(1)")
+cpp_quote("#define MS_E_PURPOSEID                    MS_ERROR_CODE(2)")
+cpp_quote("#define MS_E_NOSTREAM                     MS_ERROR_CODE(3)")
+cpp_quote("#define MS_E_NOSEEKING                    MS_ERROR_CODE(4)")
+cpp_quote("#define MS_E_INCOMPATIBLE                 MS_ERROR_CODE(5)")
+cpp_quote("#define MS_E_BUSY                         MS_ERROR_CODE(6)")
+cpp_quote("#define MS_E_NOTINIT                      MS_ERROR_CODE(7)")
+cpp_quote("#define MS_E_SOURCEALREADYDEFINED         MS_ERROR_CODE(8)")
+cpp_quote("#define MS_E_INVALIDSTREAMTYPE            MS_ERROR_CODE(9)")
+cpp_quote("#define MS_E_NOTRUNNING                   MS_ERROR_CODE(10)")
+
+cpp_quote("DEFINE_GUID(MSPID_PrimaryVideo,  0xa35ff56a, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+cpp_quote("DEFINE_GUID(MSPID_PrimaryAudio,  0xa35ff56b, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+
+cpp_quote("#if 0")
+typedef void* PAPCFUNC;
+cpp_quote("#endif")
+
+typedef LONGLONG STREAM_TIME;
+
+typedef GUID MSPID;
+typedef REFGUID REFMSPID;
+
+typedef enum {
+	STREAMTYPE_READ         = 0,
+	STREAMTYPE_WRITE        = 1,
+	STREAMTYPE_TRANSFORM    = 2
+} STREAM_TYPE;
+
+typedef enum {
+	STREAMSTATE_STOP        = 0,
+	STREAMSTATE_RUN         = 1
+} STREAM_STATE;
+
+
+typedef enum {
+	COMPSTAT_NOUPDATEOK                             = 0x00000001,
+	COMPSTAT_WAIT                                   = 0x00000002,
+	COMPSTAT_ABORT                                  = 0x00000004
+} COMPLETION_STATUS_FLAGS;
+
+enum {
+	MMSSF_HASCLOCK                                  = 0x00000001,
+	MMSSF_SUPPORTSEEK                               = 0x00000002,
+	MMSSF_ASYNCHRONOUS                              = 0x00000004
+};
+
+enum {
+	SSUPDATE_ASYNC                                  = 0x00000001,
+	SSUPDATE_CONTINUOUS                             = 0x00000002
+};
+
+interface IMultiMediaStream;
+interface IMediaStream;
+interface IStreamSample;
+
+
+[
+object,
+local,
+uuid(B502D1BC-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMultiMediaStream : IUnknown {
+
+	HRESULT GetInformation(
+		[out, optional] DWORD *pdwFlags,
+		[out, optional] STREAM_TYPE *pStreamType);
+
+	HRESULT GetMediaStream(
+		[in] REFMSPID idPurpose,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT EnumMediaStreams(
+		[in] long Index,
+		[out] IMediaStream **ppMediaStream);
+
+	HRESULT GetState(
+		[out] STREAM_STATE *pCurrentState);
+
+	HRESULT SetState(
+		[in] STREAM_STATE NewState);
+
+	HRESULT GetTime(
+		[out] STREAM_TIME *pCurrentTime);
+
+	HRESULT GetDuration(
+		[out] STREAM_TIME *pDuration);
+
+	HRESULT Seek(
+		[in] STREAM_TIME SeekTime);
+
+	HRESULT GetEndOfStreamEventHandle(
+		[out] HANDLE *phEOS);
+}
+
+
+[
+object,
+uuid(B502D1BD-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMediaStream : IUnknown {
+	
+	HRESULT GetMultiMediaStream(
+		[out] IMultiMediaStream **ppMultiMediaStream);
+
+	HRESULT GetInformation(
+		[out, optional] MSPID *pPurposeId,
+		[out, optional] STREAM_TYPE *pType);
+
+	HRESULT SetSameFormat(
+		[in] IMediaStream *pStreamThatHasDesiredFormat,
+		[in] DWORD dwFlags);
+
+	HRESULT AllocateSample(
+		[in]  DWORD dwFlags,
+		[out] IStreamSample **ppSample);
+
+	HRESULT CreateSharedSample(
+		[in]  IStreamSample *pExistingSample,
+		[in]  DWORD dwFlags,
+		[out] IStreamSample **ppNewSample);
+
+	HRESULT SendEndOfStream(DWORD dwFlags);
+}
+
+
+[
+object,
+local,
+uuid(B502D1BE-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IStreamSample : IUnknown {
+	
+	HRESULT GetMediaStream(
+		[in] IMediaStream **ppMediaStream);
+
+	HRESULT GetSampleTimes(
+		[out, optional] STREAM_TIME * pStartTime,
+		[out, optional] STREAM_TIME * pEndTime,
+		[out, optional] STREAM_TIME * pCurrentTime);
+
+	HRESULT SetSampleTimes(
+		[in, optional] const STREAM_TIME *pStartTime,
+		[in, optional] const STREAM_TIME *pEndTime);
+
+	HRESULT Update(
+		[in] DWORD dwFlags,
+		[in, optional] HANDLE hEvent,
+		[in, optional] PAPCFUNC pfnAPC,
+		[in, optional] DWORD dwAPCData);
+
+	HRESULT CompletionStatus(
+		[in] DWORD dwFlags,
+		[in, optional] DWORD dwMilliseconds);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h
new file mode 100644
index 0000000..9325c65
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h
@@ -0,0 +1,2531 @@
+/*
+ * MMSYSTEM - Multimedia Wine Extension ... :-)
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MMSYSTEM_H
+#define __WINE_MMSYSTEM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LPSTR		HPSTR;          /* a huge version of LPSTR */
+typedef LPCSTR		HPCSTR;         /* a huge version of LPCSTR */
+typedef UINT*           LPUINT;
+
+DECLARE_HANDLE(HDRVR);
+DECLARE_HANDLE(HWAVE);
+DECLARE_HANDLE(HWAVEIN);
+DECLARE_HANDLE(HWAVEOUT);
+DECLARE_HANDLE(HMIDI);
+DECLARE_HANDLE(HMIDIIN);
+DECLARE_HANDLE(HMIDIOUT);
+DECLARE_HANDLE(HMIDISTRM);
+DECLARE_HANDLE(HMIXER);
+DECLARE_HANDLE(HMIXEROBJ);
+DECLARE_HANDLE(HMMIO);
+
+typedef HMIDI *LPHMIDI;
+typedef HMIDIIN *LPHMIDIIN;
+typedef HMIDIOUT *LPHMIDIOUT;
+typedef HMIDISTRM *LPHMIDISTRM;
+typedef HMIXER *LPHMIXER;
+typedef HMIXEROBJ *LPHMIXEROBJ;
+typedef HWAVEIN *LPHWAVEIN;
+typedef HWAVEOUT *LPHWAVEOUT;
+
+#include <pshpack1.h>
+
+typedef LRESULT (CALLBACK *DRIVERPROC)(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);
+
+#define MAXWAVEDRIVERS	10
+#define MAXMIDIDRIVERS	10
+#define MAXAUXDRIVERS	10
+#define MAXMCIDRIVERS	32
+#define MAXMIXERDRIVERS	10
+
+#define MAXPNAMELEN      32     /* max product name length (including NULL) */
+#define MAXERRORLENGTH   256    /* max error text length (including NULL) */
+#define MAX_JOYSTICKOEMVXDNAME	260
+
+#ifndef _MCIERROR_
+#define _MCIERROR_
+typedef DWORD   MCIERROR;
+#endif
+typedef UINT	MMVERSION;
+#ifndef _MCIDEVICEID_
+#define _MCIDEVICEID_
+typedef UINT	MCIDEVICEID;
+#endif
+typedef	UINT	MMRESULT;
+
+typedef struct mmtime_tag {
+    UINT    wType;
+    union {
+	DWORD ms;
+	DWORD sample;
+	DWORD cb;
+        DWORD ticks;
+	struct {
+	    BYTE hour;
+	    BYTE min;
+	    BYTE sec;
+	    BYTE frame;
+	    BYTE fps;
+	    BYTE dummy;
+	    BYTE pad[2];
+	} smpte;
+	struct {
+	    DWORD songptrpos;
+	} midi;
+    } u;
+} MMTIME, *PMMTIME, *LPMMTIME;
+
+#define TIME_MS         0x0001  /* time in milliseconds */
+#define TIME_SAMPLES    0x0002  /* number of wave samples */
+#define TIME_BYTES      0x0004  /* current byte offset */
+#define TIME_SMPTE      0x0008  /* SMPTE time */
+#define TIME_MIDI       0x0010  /* MIDI time */
+#define TIME_TICKS	0x0020  /* MIDI ticks */
+
+#define MM_JOY1MOVE         0x3A0           /* joystick */
+#define MM_JOY2MOVE         0x3A1
+#define MM_JOY1ZMOVE        0x3A2
+#define MM_JOY2ZMOVE        0x3A3
+#define MM_JOY1BUTTONDOWN   0x3B5
+#define MM_JOY2BUTTONDOWN   0x3B6
+#define MM_JOY1BUTTONUP     0x3B7
+#define MM_JOY2BUTTONUP     0x3B8
+
+#define MM_MCINOTIFY        0x3B9           /* MCI */
+
+#define MM_WOM_OPEN         0x3BB           /* waveform output */
+#define MM_WOM_CLOSE        0x3BC
+#define MM_WOM_DONE         0x3BD
+
+#define MM_WIM_OPEN         0x3BE           /* waveform input */
+#define MM_WIM_CLOSE        0x3BF
+#define MM_WIM_DATA         0x3C0
+
+#define MM_MIM_OPEN         0x3C1           /* MIDI input */
+#define MM_MIM_CLOSE        0x3C2
+#define MM_MIM_DATA         0x3C3
+#define MM_MIM_LONGDATA     0x3C4
+#define MM_MIM_ERROR        0x3C5
+#define MM_MIM_LONGERROR    0x3C6
+
+#define MM_MOM_OPEN         0x3C7           /* MIDI output */
+#define MM_MOM_CLOSE        0x3C8
+#define MM_MOM_DONE         0x3C9
+#define MM_MOM_POSITIONCB   0x3CA
+
+#define MM_MIM_MOREDATA     0x3CC
+
+#define MM_MIXM_LINE_CHANGE 0x3D0
+#define MM_MIXM_CONTROL_CHANGE 0x3D1
+
+#define MMSYSERR_BASE          0
+#define WAVERR_BASE            32
+#define MIDIERR_BASE           64
+#define TIMERR_BASE            96
+#define JOYERR_BASE            160
+#define MCIERR_BASE            256
+
+#define MCI_STRING_OFFSET      512
+#define MCI_VD_OFFSET          1024
+#define MCI_CD_OFFSET          1088
+#define MCI_WAVE_OFFSET        1152
+#define MCI_SEQ_OFFSET         1216
+
+#define MMSYSERR_NOERROR      0
+#define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)
+#define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)
+#define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)
+#define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)
+#define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)
+#define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)
+#define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)
+#define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)
+#define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)
+#define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10)
+#define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11)
+#define MMSYSERR_HANDLEBUSY   (MMSYSERR_BASE + 12)
+#define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13)
+#define MMSYSERR_BADDB        (MMSYSERR_BASE + 14)
+#define MMSYSERR_KEYNOTFOUND  (MMSYSERR_BASE + 15)
+#define MMSYSERR_READERROR    (MMSYSERR_BASE + 16)
+#define MMSYSERR_WRITEERROR   (MMSYSERR_BASE + 17)
+#define MMSYSERR_DELETEERROR  (MMSYSERR_BASE + 18)
+#define MMSYSERR_VALNOTFOUND  (MMSYSERR_BASE + 19)
+#define MMSYSERR_NODRIVERCB   (MMSYSERR_BASE + 20)
+#define MMSYSERR_MOREDATA     (MMSYSERR_BASE + 21)
+#define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 21)
+
+#define CALLBACK_TYPEMASK       __MSABI_LONG(0x00070000)      /* callback type mask */
+#define CALLBACK_NULL           __MSABI_LONG(0x00000000)      /* no callback */
+#define CALLBACK_WINDOW         __MSABI_LONG(0x00010000)      /* dwCallback is a HWND */
+#define CALLBACK_TASK           __MSABI_LONG(0x00020000)      /* dwCallback is a HTASK */
+#define CALLBACK_THREAD		(CALLBACK_TASK)	/* dwCallback is a thread ID */
+#define CALLBACK_FUNCTION       __MSABI_LONG(0x00030000)      /* dwCallback is a FARPROC */
+#define CALLBACK_EVENT          __MSABI_LONG(0x00050000)      /* dwCallback is an EVENT Handler */
+
+#define DRV_LOAD                0x0001
+#define DRV_ENABLE              0x0002
+#define DRV_OPEN                0x0003
+#define DRV_CLOSE               0x0004
+#define DRV_DISABLE             0x0005
+#define DRV_FREE                0x0006
+#define DRV_CONFIGURE           0x0007
+#define DRV_QUERYCONFIGURE      0x0008
+#define DRV_INSTALL             0x0009
+#define DRV_REMOVE              0x000A
+#define DRV_EXITSESSION         0x000B
+#define DRV_EXITAPPLICATION     0x000C
+#define DRV_POWER               0x000F
+
+#define DRV_RESERVED            0x0800
+#define DRV_MCI_FIRST           DRV_RESERVED
+#define DRV_MCI_LAST            (0xFFF + DRV_MCI_FIRST)
+#define DRV_USER                0x4000
+
+#define DRVCNF_CANCEL           0x0000
+#define DRVCNF_OK               0x0001
+#define DRVCNF_RESTART 		0x0002
+
+#define DRVEA_NORMALEXIT  	0x0001
+#define DRVEA_ABNORMALEXIT 	0x0002
+
+#define DRV_SUCCESS		0x0001
+#define DRV_FAILURE		0x0000
+
+#define GND_FIRSTINSTANCEONLY 	0x00000001
+
+#define GND_FORWARD  		0x00000000
+#define GND_REVERSE    		0x00000002
+
+typedef struct tagDRVCONFIGINFO {
+    DWORD   			dwDCISize;
+    LPCWSTR  			lpszDCISectionName;
+    LPCWSTR  			lpszDCIAliasName;
+} DRVCONFIGINFO, *LPDRVCONFIGINFO;
+
+
+LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);
+/* this sounds odd, but it's the way it is. OpenDriverA even disappeared
+ * from latest SDK
+ */
+HDRVR 	WINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName,
+			   LPARAM lParam2);
+HDRVR 	WINAPI OpenDriver(LPCWSTR szDriverName, LPCWSTR szSectionName,
+                          LPARAM lParam2);
+LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
+LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message,
+				 LPARAM lParam1, LPARAM lParam2);
+HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
+
+DWORD	WINAPI GetDriverFlags(HDRVR hDriver);
+
+typedef void (CALLBACK *LPDRVCALLBACK)(HDRVR,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);
+
+#define MM_MICROSOFT            1       /* Microsoft Corp. */
+#define MM_CREATIVE             2       /* Creative labs   */
+
+#define MM_MIDI_MAPPER          1       /* MIDI Mapper */
+#define MM_WAVE_MAPPER          2       /* Wave Mapper */
+
+#define MM_SNDBLST_MIDIOUT      3       /* Sound Blaster MIDI output port */
+#define MM_SNDBLST_MIDIIN       4       /* Sound Blaster MIDI input port  */
+#define MM_SNDBLST_SYNTH        5       /* Sound Blaster internal synthesizer */
+#define MM_SNDBLST_WAVEOUT      6       /* Sound Blaster waveform output */
+#define MM_SNDBLST_WAVEIN       7       /* Sound Blaster waveform input */
+
+#define MM_ADLIB                9       /* Ad Lib-compatible synthesizer */
+
+#define MM_MPU401_MIDIOUT       10      /* MPU401-compatible MIDI output port */
+#define MM_MPU401_MIDIIN        11      /* MPU401-compatible MIDI input port */
+
+#define MM_PC_JOYSTICK          12      /* Joystick adapter */
+
+#define MM_CREATIVE_SBP16_WAVEOUT   104 
+
+UINT 		WINAPI 	mmsystemGetVersion(void);
+BOOL 		WINAPI	sndPlaySoundA(LPCSTR lpszSound, UINT fuSound);
+BOOL 		WINAPI	sndPlaySoundW(LPCWSTR lpszSound, UINT fuSound);
+#define 		sndPlaySound WINELIB_NAME_AW(sndPlaySound)
+BOOL 		WINAPI 	PlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
+BOOL 		WINAPI 	PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound);
+#define 		PlaySound WINELIB_NAME_AW(PlaySound)
+
+#define SND_SYNC            	0x0000  /* play synchronously (default) */
+#define SND_ASYNC           	0x0001  /* play asynchronously */
+#define SND_NODEFAULT       	0x0002  /* don't use default sound */
+#define SND_MEMORY          	0x0004  /* lpszSoundName points to a memory file */
+#define SND_LOOP            	0x0008  /* loop the sound until next sndPlaySound */
+#define SND_NOSTOP          	0x0010  /* don't stop any currently playing sound */
+
+#define SND_NOWAIT              __MSABI_LONG(0x00002000) /* don't wait if the driver is busy */
+#define SND_ALIAS               __MSABI_LONG(0x00010000) /* name is a registry alias */
+#define SND_ALIAS_ID            __MSABI_LONG(0x00110000) /* alias is a predefined ID */
+#define SND_FILENAME            __MSABI_LONG(0x00020000) /* name is file name */
+#define SND_RESOURCE            __MSABI_LONG(0x00040004) /* name is resource name or atom */
+#define SND_PURGE               __MSABI_LONG(0x00000040) /* purge all sounds */
+#define SND_APPLICATION         __MSABI_LONG(0x00000080) /* look for application specific association */
+
+#define SND_ALIAS_START         0
+
+#define sndAlias(ch0, ch1)              (SND_ALIAS_START + ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8)))
+
+#define SND_ALIAS_SYSTEMASTERISK        sndAlias('S', '*')
+#define SND_ALIAS_SYSTEMQUESTION        sndAlias('S', '?')
+#define SND_ALIAS_SYSTEMHAND            sndAlias('S', 'H')
+#define SND_ALIAS_SYSTEMEXIT            sndAlias('S', 'E')
+#define SND_ALIAS_SYSTEMSTART           sndAlias('S', 'S')
+#define SND_ALIAS_SYSTEMWELCOME         sndAlias('S', 'W')
+#define SND_ALIAS_SYSTEMEXCLAMATION     sndAlias('S', '!')
+#define SND_ALIAS_SYSTEMDEFAULT         sndAlias('S', 'D')
+
+/* waveform audio error return values */
+#define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    /* unsupported wave format */
+#define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    /* still something playing */
+#define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    /* header not prepared */
+#define WAVERR_SYNC           (WAVERR_BASE + 3)    /* device is synchronous */
+#define WAVERR_LASTERROR      (WAVERR_BASE + 3)    /* last error in range */
+
+typedef LPDRVCALLBACK LPWAVECALLBACK;
+
+#define WOM_OPEN        MM_WOM_OPEN
+#define WOM_CLOSE       MM_WOM_CLOSE
+#define WOM_DONE        MM_WOM_DONE
+#define WIM_OPEN        MM_WIM_OPEN
+#define WIM_CLOSE       MM_WIM_CLOSE
+#define WIM_DATA        MM_WIM_DATA
+
+#define WAVE_MAPPER     (-1)
+
+#define  WAVE_FORMAT_QUERY     		0x0001
+#define  WAVE_ALLOWSYNC        		0x0002
+#define  WAVE_MAPPED               	0x0004
+#define  WAVE_FORMAT_DIRECT        	0x0008
+#define  WAVE_FORMAT_DIRECT_QUERY  	(WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
+
+typedef struct wavehdr_tag {
+    LPSTR       lpData;
+    DWORD       dwBufferLength;
+    DWORD       dwBytesRecorded;
+    DWORD_PTR   dwUser;
+    DWORD       dwFlags;
+    DWORD       dwLoops;
+    struct wavehdr_tag *lpNext;
+    DWORD_PTR   reserved;
+} WAVEHDR, *PWAVEHDR, *NPWAVEHDR, *LPWAVEHDR;
+
+#define WHDR_DONE       0x00000001
+#define WHDR_PREPARED   0x00000002
+#define WHDR_BEGINLOOP  0x00000004
+#define WHDR_ENDLOOP    0x00000008
+#define WHDR_INQUEUE    0x00000010
+
+typedef struct tagWAVEOUTCAPSA {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+} WAVEOUTCAPSA, *LPWAVEOUTCAPSA;
+
+typedef struct tagWAVEOUTCAPSW {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+} WAVEOUTCAPSW, *LPWAVEOUTCAPSW;
+DECL_WINELIB_TYPE_AW(WAVEOUTCAPS)
+DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS)
+
+typedef struct tagWAVEOUTCAPS2A {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} WAVEOUTCAPS2A, *LPWAVEOUTCAPS2A;
+
+typedef struct tagWAVEOUTCAPS2W {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} WAVEOUTCAPS2W, *LPWAVEOUTCAPS2W;
+DECL_WINELIB_TYPE_AW(WAVEOUTCAPS2)
+DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS2)
+
+#define WAVECAPS_PITCH          0x0001   /* supports pitch control */
+#define WAVECAPS_PLAYBACKRATE   0x0002   /* supports playback rate control */
+#define WAVECAPS_VOLUME         0x0004   /* supports volume control */
+#define WAVECAPS_LRVOLUME       0x0008   /* separate left-right volume control */
+#define WAVECAPS_SYNC           0x0010	 /* driver is synchronous and playing is blocking */
+#define WAVECAPS_SAMPLEACCURATE 0x0020	 /* position is sample accurate */
+#define WAVECAPS_DIRECTSOUND	0x0040   /* ? */
+
+typedef struct tagWAVEINCAPSA {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+} WAVEINCAPSA, *LPWAVEINCAPSA;
+typedef struct tagWAVEINCAPSW {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+} WAVEINCAPSW, *LPWAVEINCAPSW;
+DECL_WINELIB_TYPE_AW(WAVEINCAPS)
+DECL_WINELIB_TYPE_AW(LPWAVEINCAPS)
+
+typedef struct tagWAVEINCAPS2A {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} WAVEINCAPS2A, *LPWAVEINCAPS2A;
+typedef struct tagWAVEINCAPS2W {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    DWORD	dwFormats;
+    WORD	wChannels;
+    WORD	wReserved1;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} WAVEINCAPS2W, *LPWAVEINCAPS2W;
+DECL_WINELIB_TYPE_AW(WAVEINCAPS2)
+DECL_WINELIB_TYPE_AW(LPWAVEINCAPS2)
+
+#define WAVE_INVALIDFORMAT     0x00000000    /* invalid format */
+#define WAVE_FORMAT_1M08       0x00000001    /* 11.025 kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_1S08       0x00000002    /* 11.025 kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_1M16       0x00000004    /* 11.025 kHz, Mono,   16-bit */
+#define WAVE_FORMAT_1S16       0x00000008    /* 11.025 kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_2M08       0x00000010    /* 22.05  kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_2S08       0x00000020    /* 22.05  kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_2M16       0x00000040    /* 22.05  kHz, Mono,   16-bit */
+#define WAVE_FORMAT_2S16       0x00000080    /* 22.05  kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_4M08       0x00000100    /* 44.1   kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_4S08       0x00000200    /* 44.1   kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_4M16       0x00000400    /* 44.1   kHz, Mono,   16-bit */
+#define WAVE_FORMAT_4S16       0x00000800    /* 44.1   kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_48M08      0x00001000    /* 48     kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_48S08      0x00002000    /* 48     kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_48M16      0x00004000    /* 48     kHz, Mono,   16-bit */
+#define WAVE_FORMAT_48S16      0x00008000    /* 48     kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_96M08      0x00010000    /* 96     kHz, Mono,   8-bit  */
+#define WAVE_FORMAT_96S08      0x00020000    /* 96     kHz, Stereo, 8-bit  */
+#define WAVE_FORMAT_96M16      0x00040000    /* 96     kHz, Mono,   16-bit */
+#define WAVE_FORMAT_96S16      0x00080000    /* 96     kHz, Stereo, 16-bit */
+
+/* General format structure common to all formats, same for Win16 and Win32 */
+typedef struct waveformat_tag {
+    WORD	wFormatTag;
+    WORD	nChannels;
+    DWORD	nSamplesPerSec;
+    DWORD	nAvgBytesPerSec;
+    WORD	nBlockAlign;
+} WAVEFORMAT, *LPWAVEFORMAT;
+
+#define WAVE_FORMAT_PCM     1
+
+typedef struct pcmwaveformat_tag {
+    WAVEFORMAT	wf;
+    WORD	wBitsPerSample;
+} PCMWAVEFORMAT, *LPPCMWAVEFORMAT;
+
+#ifndef _WAVEFORMATEX_
+#define _WAVEFORMATEX_
+/* ditto same for Win16 / Win32 */
+typedef struct tWAVEFORMATEX {
+    WORD	wFormatTag;
+    WORD	nChannels;
+    DWORD	nSamplesPerSec;
+    DWORD	nAvgBytesPerSec;
+    WORD	nBlockAlign;
+    WORD	wBitsPerSample;
+    WORD	cbSize;
+} WAVEFORMATEX, *LPWAVEFORMATEX, *NPWAVEFORMATEX, *PWAVEFORMATEX;
+#endif
+typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
+
+UINT 		WINAPI 	waveOutGetNumDevs(void);
+UINT           WINAPI  waveOutGetDevCapsA(UINT_PTR,LPWAVEOUTCAPSA,UINT);
+UINT           WINAPI  waveOutGetDevCapsW(UINT_PTR,LPWAVEOUTCAPSW,UINT);
+#define 		waveOutGetDevCaps WINELIB_NAME_AW(waveOutGetDevCaps)
+UINT 		WINAPI	waveOutGetVolume(HWAVEOUT,DWORD*);
+UINT 		WINAPI 	waveOutSetVolume(HWAVEOUT,DWORD);
+UINT 		WINAPI 	waveOutGetErrorTextA(UINT,LPSTR,UINT);
+UINT 		WINAPI 	waveOutGetErrorTextW(UINT,LPWSTR,UINT);
+#define 	    	waveOutGetErrorText WINELIB_NAME_AW(waveOutGetErrorText)
+MMRESULT        WINAPI  waveOutOpen(HWAVEOUT*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);
+UINT 		WINAPI 	waveOutClose(HWAVEOUT);
+UINT 		WINAPI 	waveOutPrepareHeader(HWAVEOUT,WAVEHDR*,UINT);
+UINT 		WINAPI 	waveOutUnprepareHeader(HWAVEOUT,WAVEHDR*,UINT);
+UINT 		WINAPI 	waveOutWrite(HWAVEOUT,WAVEHDR*,UINT);
+UINT 		WINAPI 	waveOutPause(HWAVEOUT);
+UINT 		WINAPI 	waveOutRestart(HWAVEOUT);
+UINT 		WINAPI 	waveOutReset(HWAVEOUT);
+UINT 		WINAPI 	waveOutBreakLoop(HWAVEOUT);
+UINT 		WINAPI 	waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT);
+UINT 		WINAPI 	waveOutGetPitch(HWAVEOUT,DWORD*);
+UINT 		WINAPI 	waveOutSetPitch(HWAVEOUT,DWORD);
+UINT 		WINAPI 	waveOutGetPlaybackRate(HWAVEOUT,DWORD*);
+UINT 		WINAPI 	waveOutSetPlaybackRate(HWAVEOUT,DWORD);
+UINT 		WINAPI 	waveOutGetID(HWAVEOUT,UINT*);
+UINT           WINAPI  waveOutMessage(HWAVEOUT,UINT,DWORD_PTR,DWORD_PTR);
+UINT 		WINAPI 	waveInGetNumDevs(void);
+UINT           WINAPI  waveInGetDevCapsA(UINT_PTR,LPWAVEINCAPSA,UINT);
+UINT           WINAPI  waveInGetDevCapsW(UINT_PTR,LPWAVEINCAPSW,UINT);
+#define 		waveInGetDevCaps WINELIB_NAME_AW(waveInGetDevCaps)
+UINT 		WINAPI 	waveInGetErrorTextA(UINT,LPSTR,UINT);
+UINT 		WINAPI 	waveInGetErrorTextW(UINT,LPWSTR,UINT);
+#define 		waveInGetErrorText WINELIB_NAME_AW(waveInGetErrorText)
+MMRESULT        WINAPI  waveInOpen(HWAVEIN*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);
+UINT 		WINAPI  waveInClose(HWAVEIN);
+UINT 		WINAPI  waveInPrepareHeader(HWAVEIN,WAVEHDR*,UINT);
+UINT 		WINAPI  waveInUnprepareHeader(HWAVEIN,WAVEHDR*,UINT);
+UINT 		WINAPI  waveInAddBuffer(HWAVEIN,WAVEHDR*,UINT);
+UINT 		WINAPI  waveInStart(HWAVEIN);
+UINT 		WINAPI  waveInStop(HWAVEIN);
+UINT 		WINAPI  waveInReset(HWAVEIN);
+UINT 		WINAPI  waveInGetPosition(HWAVEIN,LPMMTIME,UINT);
+UINT 		WINAPI  waveInGetID(HWAVEIN,UINT*);
+UINT           WINAPI  waveInMessage(HWAVEIN,UINT,DWORD_PTR,DWORD_PTR);
+
+#define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)
+#define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)
+#define MIDIERR_NOMAP         (MIDIERR_BASE + 2)
+#define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)
+#define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)
+#define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)
+#define MIDIERR_BADOPENMODE   (MIDIERR_BASE + 6)
+#define MIDIERR_DONT_CONTINUE (MIDIERR_BASE + 7)
+#define MIDIERR_LASTERROR     (MIDIERR_BASE + 7)
+
+typedef LPDRVCALLBACK LPMIDICALLBACK;
+#define MIDIPATCHSIZE   128
+typedef WORD PATCHARRAY[MIDIPATCHSIZE];
+typedef WORD *LPPATCHARRAY;
+typedef WORD KEYARRAY[MIDIPATCHSIZE];
+typedef WORD *LPKEYARRAY;
+
+#define MIM_OPEN        MM_MIM_OPEN
+#define MIM_CLOSE       MM_MIM_CLOSE
+#define MIM_DATA        MM_MIM_DATA
+#define MIM_LONGDATA    MM_MIM_LONGDATA
+#define MIM_ERROR       MM_MIM_ERROR
+#define MIM_LONGERROR   MM_MIM_LONGERROR
+#define MIM_MOREDATA	MM_MIM_MOREDATA
+
+#define MOM_OPEN        MM_MOM_OPEN
+#define MOM_CLOSE       MM_MOM_CLOSE
+#define MOM_DONE        MM_MOM_DONE
+#define MOM_POSITIONCB	MM_MOM_POSITIONCB
+
+/* device ID for MIDI mapper */
+
+#define MIDIMAPPER     (-1)
+#define MIDI_MAPPER    (-1)
+
+/* Only on Win95 and up */
+#define MIDI_IO_STATUS __MSABI_LONG(0x00000020)
+
+/* flags for wFlags parm of
+	midiOutCachePatches(),
+	midiOutCacheDrumPatches() */
+#define MIDI_CACHE_ALL      1
+#define MIDI_CACHE_BESTFIT  2
+#define MIDI_CACHE_QUERY    3
+#define MIDI_UNCACHE        4
+
+typedef struct tagMIDIOUTCAPSA {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wVoices;
+    WORD	wNotes;
+    WORD	wChannelMask;
+    DWORD	dwSupport;
+} MIDIOUTCAPSA, *LPMIDIOUTCAPSA;
+
+typedef struct tagMIDIOUTCAPSW {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wVoices;
+    WORD	wNotes;
+    WORD	wChannelMask;
+    DWORD	dwSupport;
+} MIDIOUTCAPSW, *LPMIDIOUTCAPSW;
+
+DECL_WINELIB_TYPE_AW(MIDIOUTCAPS)
+DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS)
+
+typedef struct tagMIDIOUTCAPS2A {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wVoices;
+    WORD	wNotes;
+    WORD	wChannelMask;
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} MIDIOUTCAPS2A, *LPMIDIOUTCAPS2A;
+
+typedef struct tagMIDIOUTCAPS2W {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wVoices;
+    WORD	wNotes;
+    WORD	wChannelMask;
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} MIDIOUTCAPS2W, *LPMIDIOUTCAPS2W;
+
+DECL_WINELIB_TYPE_AW(MIDIOUTCAPS2)
+DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS2)
+
+#define MOD_MIDIPORT    1  /* output port */
+#define MOD_SYNTH       2  /* generic internal synth */
+#define MOD_SQSYNTH     3  /* square wave internal synth */
+#define MOD_FMSYNTH     4  /* FM internal synth */
+#define MOD_MAPPER      5  /* MIDI mapper */
+#define MOD_WAVETABLE   6  /* hardware wavetable internal synth */
+#define MOD_SWSYNTH     7  /* software synth */
+
+#define MIDICAPS_VOLUME		0x0001  /* supports volume control */
+#define MIDICAPS_LRVOLUME	0x0002  /* separate left-right volume control */
+#define MIDICAPS_CACHE		0x0004
+#define MIDICAPS_STREAM		0x0008  /* capable of supporting stream buffer */
+
+typedef struct tagMIDIINCAPSA {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    DWORD	dwSupport;
+} MIDIINCAPSA, *LPMIDIINCAPSA;
+
+typedef struct tagMIDIINCAPSW {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    DWORD	dwSupport;
+} MIDIINCAPSW, *LPMIDIINCAPSW;
+
+DECL_WINELIB_TYPE_AW(MIDIINCAPS)
+DECL_WINELIB_TYPE_AW(LPMIDIINCAPS)
+
+typedef struct tagMIDIINCAPS2A {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} MIDIINCAPS2A, *LPMIDIINCAPS2A;
+
+typedef struct tagMIDIINCAPS2W {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} MIDIINCAPS2W, *LPMIDIINCAPS2W;
+
+DECL_WINELIB_TYPE_AW(MIDIINCAPS2)
+DECL_WINELIB_TYPE_AW(LPMIDIINCAPS2)
+
+/* It seems that Win32 has a slightly different structure than Win 16.
+ * sigh....
+ */
+typedef struct midihdr_tag {
+    LPSTR	lpData;
+    DWORD	dwBufferLength;
+    DWORD	dwBytesRecorded;
+    DWORD_PTR	dwUser;
+    DWORD	dwFlags;
+    struct midihdr_tag *lpNext;
+    DWORD_PTR	reserved;
+    /* Win 32 extended the structure with these 2 fields */
+    DWORD	dwOffset;
+    DWORD_PTR	dwReserved[8];
+} MIDIHDR, *LPMIDIHDR;
+
+#define MHDR_DONE       0x00000001       /* done bit */
+#define MHDR_PREPARED   0x00000002       /* set if header prepared */
+#define MHDR_INQUEUE    0x00000004       /* reserved for driver */
+#define MHDR_ISSTRM	0x00000008	 /* data is sent by Stream functions */
+
+typedef struct midiproptempo_tag {
+    DWORD		cbStruct;
+    DWORD		dwTempo;
+} MIDIPROPTEMPO, *LPMIDIPROPTEMPO;
+
+typedef struct midiproptimediv_tag {
+    DWORD		cbStruct;
+    DWORD		dwTimeDiv;
+} MIDIPROPTIMEDIV, *LPMIDIPROPTIMEDIV;
+
+#define MIDIPROP_GET		0x40000000
+#define MIDIPROP_SET		0x80000000
+#define MIDIPROP_TEMPO		0x00000002
+#define MIDIPROP_TIMEDIV	0x00000001
+
+typedef struct midievent_tag {
+    DWORD dwDeltaTime;	/* Time, in MIDI ticks, between the previous
+			 * event and the current event. */
+    DWORD dwStreamID;	/* Reserved; must be zero. */
+    DWORD dwEvent;  	/* event => see MEVT_XXX macros */
+    DWORD dwParms[1];	/* extra pmts to dwEvent if F_LONG is set */
+} MIDIEVENT, *LPMIDIEVENT;
+
+#define MEVT_EVENTTYPE(x) ((BYTE) (((x)>>24)&0xFF))
+#define MEVT_EVENTPARM(x) ((DWORD) ((x)&0x00FFFFFF))
+
+#define MEVT_F_CALLBACK __MSABI_LONG(0x40000000)
+#define MEVT_F_LONG     __MSABI_LONG(0x80000000)
+#define MEVT_F_SHORT    __MSABI_LONG(0x00000000)
+#define	MEVT_COMMENT	((BYTE)0x82)
+#define	MEVT_LONGMSG	((BYTE)0x80)
+#define	MEVT_NOP	((BYTE)0x02)
+#define	MEVT_SHORTMSG	((BYTE)0x00)
+#define	MEVT_TEMPO	((BYTE)0x01)
+#define	MEVT_VERSION	((BYTE)0x84)
+
+UINT		WINAPI	midiOutGetNumDevs(void);
+UINT           WINAPI  midiOutGetDevCapsA(UINT_PTR,LPMIDIOUTCAPSA,UINT);
+UINT           WINAPI  midiOutGetDevCapsW(UINT_PTR,LPMIDIOUTCAPSW,UINT);
+#define 		midiOutGetDevCaps WINELIB_NAME_AW(midiOutGetDevCaps)
+UINT		WINAPI	midiOutGetVolume(HMIDIOUT,DWORD*);
+UINT		WINAPI	midiOutSetVolume(HMIDIOUT,DWORD);
+UINT		WINAPI	midiOutGetErrorTextA(UINT,LPSTR,UINT);
+UINT		WINAPI	midiOutGetErrorTextW(UINT,LPWSTR,UINT);
+#define 		midiOutGetErrorText WINELIB_NAME_AW(midiOutGetErrorText)
+UINT           WINAPI  midiOutOpen(LPHMIDIOUT,UINT,DWORD_PTR,DWORD_PTR,DWORD);
+UINT		WINAPI	midiOutClose(HMIDIOUT);
+UINT		WINAPI	midiOutPrepareHeader(HMIDIOUT,MIDIHDR*,UINT);
+UINT		WINAPI	midiOutUnprepareHeader(HMIDIOUT,MIDIHDR*,UINT);
+UINT		WINAPI	midiOutShortMsg(HMIDIOUT,DWORD);
+UINT		WINAPI	midiOutLongMsg(HMIDIOUT,MIDIHDR*,UINT);
+UINT		WINAPI	midiOutReset(HMIDIOUT);
+UINT		WINAPI	midiOutCachePatches(HMIDIOUT,UINT,WORD*,UINT);
+UINT		WINAPI	midiOutCacheDrumPatches(HMIDIOUT,UINT,WORD*,UINT);
+UINT		WINAPI	midiOutGetID(HMIDIOUT,UINT*);
+UINT           WINAPI  midiOutMessage(HMIDIOUT,UINT,DWORD_PTR,DWORD_PTR);
+
+UINT		WINAPI	midiInGetNumDevs(void);
+UINT           WINAPI  midiInGetDevCapsA(UINT_PTR,LPMIDIINCAPSA,UINT);
+UINT           WINAPI  midiInGetDevCapsW(UINT_PTR,LPMIDIINCAPSW,UINT);
+#define 		midiInGetDevCaps WINELIB_NAME_AW(midiInGetDevCaps)
+UINT		WINAPI	midiInGetErrorTextA(UINT,LPSTR,UINT);
+UINT		WINAPI	midiInGetErrorTextW(UINT,LPWSTR,UINT);
+#define 		midiInGetErrorText WINELIB_NAME_AW(midiInGetErrorText)
+UINT           WINAPI  midiInOpen(LPHMIDIIN,UINT,DWORD_PTR,DWORD_PTR,DWORD);
+UINT		WINAPI	midiInClose(HMIDIIN);
+UINT		WINAPI	midiInPrepareHeader(HMIDIIN,MIDIHDR*,UINT);
+UINT		WINAPI	midiInUnprepareHeader(HMIDIIN,MIDIHDR*,UINT);
+UINT		WINAPI	midiInAddBuffer(HMIDIIN,MIDIHDR*,UINT);
+UINT		WINAPI	midiInStart(HMIDIIN);
+UINT		WINAPI	midiInStop(HMIDIIN);
+UINT		WINAPI	midiInReset(HMIDIIN);
+UINT		WINAPI	midiInGetID(HMIDIIN,UINT*);
+UINT           WINAPI  midiInMessage(HMIDIIN,UINT,DWORD_PTR,DWORD_PTR);
+MMRESULT	WINAPI	midiStreamClose(HMIDISTRM hms);
+MMRESULT       WINAPI  midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD_PTR,DWORD_PTR,DWORD);
+MMRESULT	WINAPI	midiStreamOut(HMIDISTRM hms, LPMIDIHDR lpMidiHdr, UINT cbMidiHdr);
+MMRESULT	WINAPI	midiStreamPause(HMIDISTRM hms);
+MMRESULT	WINAPI	midiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt);
+MMRESULT	WINAPI	midiStreamProperty(HMIDISTRM hms, LPBYTE lpPropData, DWORD dwProperty);
+MMRESULT	WINAPI	midiStreamRestart(HMIDISTRM hms);
+MMRESULT	WINAPI	midiStreamStop(HMIDISTRM hms);
+
+#define AUX_MAPPER     (-1)
+
+typedef struct tagAUXCAPSA {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+} AUXCAPSA, *LPAUXCAPSA;
+
+typedef struct tagAUXCAPSW {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+} AUXCAPSW, *LPAUXCAPSW;
+
+DECL_WINELIB_TYPE_AW(AUXCAPS)
+DECL_WINELIB_TYPE_AW(LPAUXCAPS)
+
+typedef struct tagAUXCAPS2A {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    CHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} AUXCAPS2A, *LPAUXCAPS2A;
+
+typedef struct tagAUXCAPS2W {
+    WORD	wMid;
+    WORD	wPid;
+    MMVERSION	vDriverVersion;
+    WCHAR	szPname[MAXPNAMELEN];
+    WORD	wTechnology;
+    WORD	wReserved1;
+    DWORD	dwSupport;
+    GUID	ManufacturerGuid;
+    GUID	ProductGuid;
+    GUID	NameGuid;
+} AUXCAPS2W, *LPAUXCAPS2W;
+
+DECL_WINELIB_TYPE_AW(AUXCAPS2)
+DECL_WINELIB_TYPE_AW(LPAUXCAPS2)
+
+#define AUXCAPS_CDAUDIO    1       /* audio from internal CD-ROM drive */
+#define AUXCAPS_AUXIN      2       /* audio from auxiliary input jacks */
+
+#define AUXCAPS_VOLUME          0x0001  /* supports volume control */
+#define AUXCAPS_LRVOLUME        0x0002  /* separate left-right volume control */
+
+UINT		WINAPI	auxGetNumDevs(void);
+UINT           WINAPI  auxGetDevCapsA(UINT_PTR,LPAUXCAPSA,UINT);
+UINT           WINAPI  auxGetDevCapsW(UINT_PTR,LPAUXCAPSW,UINT);
+#define 		auxGetDevCaps WINELIB_NAME_AW(auxGetDevCaps)
+UINT		WINAPI	auxSetVolume(UINT,DWORD);
+UINT		WINAPI	auxGetVolume(UINT,LPDWORD);
+UINT           WINAPI  auxOutMessage(UINT,UINT,DWORD_PTR,DWORD_PTR);
+
+#define TIMERR_NOERROR        (0)                  /* no error */
+#define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */
+#define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */
+
+typedef void (CALLBACK *LPTIMECALLBACK)(UINT,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);
+
+#define TIME_ONESHOT			0x0000	/* program timer for single event */
+#define TIME_PERIODIC			0x0001	/* program for continuous periodic event */
+#define TIME_CALLBACK_FUNCTION		0x0000	/* callback is function */
+#define TIME_CALLBACK_EVENT_SET		0x0010	/* callback is event - use SetEvent */
+#define TIME_CALLBACK_EVENT_PULSE 	0x0020	/* callback is event - use PulseEvent */
+#define TIME_KILL_SYNCHRONOUS           0x0100
+
+typedef struct timecaps_tag {
+    UINT	wPeriodMin;
+    UINT	wPeriodMax;
+} TIMECAPS, *LPTIMECAPS;
+
+
+MMRESULT	WINAPI	timeGetSystemTime(LPMMTIME,UINT);
+DWORD		WINAPI	timeGetTime(void);	/* same for win32/win16 */
+MMRESULT       WINAPI  timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD_PTR,UINT);
+MMRESULT	WINAPI	timeKillEvent(UINT);
+MMRESULT	WINAPI	timeGetDevCaps(LPTIMECAPS,UINT);
+MMRESULT	WINAPI	timeBeginPeriod(UINT);
+MMRESULT	WINAPI	timeEndPeriod(UINT);
+
+#define JOYERR_NOERROR        (0)                  /* no error */
+#define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */
+#define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* request not completed */
+#define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* joystick is unplugged */
+
+/* JOYINFO, JOYINFOEX, MM_JOY* */
+#define JOY_BUTTON1         	0x0001
+#define JOY_BUTTON2         	0x0002
+#define JOY_BUTTON3         	0x0004
+#define JOY_BUTTON4         	0x0008
+#define JOY_BUTTON1CHG      	0x0100
+#define JOY_BUTTON2CHG      	0x0200
+#define JOY_BUTTON3CHG      	0x0400
+#define JOY_BUTTON4CHG      	0x0800
+
+#define JOYSTICKID1         	0
+#define JOYSTICKID2         	1
+
+/* JOYCAPS.wCaps */
+#define JOYCAPS_HASZ		0x0001
+#define JOYCAPS_HASR		0x0002
+#define JOYCAPS_HASU		0x0004
+#define JOYCAPS_HASV		0x0008
+#define JOYCAPS_HASPOV		0x0010
+#define JOYCAPS_POV4DIR		0x0020
+#define JOYCAPS_POVCTS		0x0040
+
+/* JOYINFOEX stuff */
+#define JOY_POVCENTERED		(WORD) -1
+#define JOY_POVFORWARD		0
+#define JOY_POVRIGHT		9000
+#define JOY_POVBACKWARD		18000
+#define JOY_POVLEFT		27000
+
+#define JOY_RETURNX		0x00000001
+#define JOY_RETURNY		0x00000002
+#define JOY_RETURNZ		0x00000004
+#define JOY_RETURNR		0x00000008
+#define JOY_RETURNU		0x00000010
+#define JOY_RETURNV		0x00000020
+#define JOY_RETURNPOV		0x00000040
+#define JOY_RETURNBUTTONS	0x00000080
+#define JOY_RETURNRAWDATA	0x00000100
+#define JOY_RETURNPOVCTS	0x00000200
+#define JOY_RETURNCENTERED	0x00000400
+#define JOY_USEDEADZONE		0x00000800
+#define JOY_RETURNALL		(JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | \
+				 JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | \
+				 JOY_RETURNPOV | JOY_RETURNBUTTONS)
+#define JOY_CAL_READALWAYS	0x00010000
+#define JOY_CAL_READXYONLY	0x00020000
+#define JOY_CAL_READ3		0x00040000
+#define JOY_CAL_READ4		0x00080000
+#define JOY_CAL_READXONLY	0x00100000
+#define JOY_CAL_READYONLY	0x00200000
+#define JOY_CAL_READ5		0x00400000
+#define JOY_CAL_READ6		0x00800000
+#define JOY_CAL_READZONLY	0x01000000
+#define JOY_CAL_READRONLY	0x02000000
+#define JOY_CAL_READUONLY	0x04000000
+#define JOY_CAL_READVONLY	0x08000000
+
+typedef struct tagJOYCAPSA {
+    WORD wMid;
+    WORD wPid;
+    CHAR szPname[MAXPNAMELEN];
+    UINT wXmin;
+    UINT wXmax;
+    UINT wYmin;
+    UINT wYmax;
+    UINT wZmin;
+    UINT wZmax;
+    UINT wNumButtons;
+    UINT wPeriodMin;
+    UINT wPeriodMax;
+    UINT wRmin;
+    UINT wRmax;
+    UINT wUmin;
+    UINT wUmax;
+    UINT wVmin;
+    UINT wVmax;
+    UINT wCaps;
+    UINT wMaxAxes;
+    UINT wNumAxes;
+    UINT wMaxButtons;
+    CHAR szRegKey[MAXPNAMELEN];
+    CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPSA, *LPJOYCAPSA;
+
+typedef struct tagJOYCAPSW {
+    WORD wMid;
+    WORD wPid;
+    WCHAR szPname[MAXPNAMELEN];
+    UINT wXmin;
+    UINT wXmax;
+    UINT wYmin;
+    UINT wYmax;
+    UINT wZmin;
+    UINT wZmax;
+    UINT wNumButtons;
+    UINT wPeriodMin;
+    UINT wPeriodMax;
+    UINT wRmin;
+    UINT wRmax;
+    UINT wUmin;
+    UINT wUmax;
+    UINT wVmin;
+    UINT wVmax;
+    UINT wCaps;
+    UINT wMaxAxes;
+    UINT wNumAxes;
+    UINT wMaxButtons;
+    WCHAR szRegKey[MAXPNAMELEN];
+    WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPSW, *LPJOYCAPSW;
+DECL_WINELIB_TYPE_AW(JOYCAPS)
+DECL_WINELIB_TYPE_AW(LPJOYCAPS)
+
+typedef struct tagJOYCAPS2A {
+    WORD wMid;
+    WORD wPid;
+    CHAR szPname[MAXPNAMELEN];
+    UINT wXmin;
+    UINT wXmax;
+    UINT wYmin;
+    UINT wYmax;
+    UINT wZmin;
+    UINT wZmax;
+    UINT wNumButtons;
+    UINT wPeriodMin;
+    UINT wPeriodMax;
+    UINT wRmin;
+    UINT wRmax;
+    UINT wUmin;
+    UINT wUmax;
+    UINT wVmin;
+    UINT wVmax;
+    UINT wCaps;
+    UINT wMaxAxes;
+    UINT wNumAxes;
+    UINT wMaxButtons;
+    CHAR szRegKey[MAXPNAMELEN];
+    CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+    GUID ManufacturerGuid;
+    GUID ProductGuid;
+    GUID NameGuid;
+} JOYCAPS2A, *LPJOYCAPS2A;
+
+typedef struct tagJOYCAPS2W {
+    WORD wMid;
+    WORD wPid;
+    WCHAR szPname[MAXPNAMELEN];
+    UINT wXmin;
+    UINT wXmax;
+    UINT wYmin;
+    UINT wYmax;
+    UINT wZmin;
+    UINT wZmax;
+    UINT wNumButtons;
+    UINT wPeriodMin;
+    UINT wPeriodMax;
+    UINT wRmin;
+    UINT wRmax;
+    UINT wUmin;
+    UINT wUmax;
+    UINT wVmin;
+    UINT wVmax;
+    UINT wCaps;
+    UINT wMaxAxes;
+    UINT wNumAxes;
+    UINT wMaxButtons;
+    WCHAR szRegKey[MAXPNAMELEN];
+    WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+    GUID ManufacturerGuid;
+    GUID ProductGuid;
+    GUID NameGuid;
+} JOYCAPS2W, *LPJOYCAPS2W;
+DECL_WINELIB_TYPE_AW(JOYCAPS2)
+DECL_WINELIB_TYPE_AW(LPJOYCAPS2)
+
+typedef struct joyinfo_tag {
+    UINT wXpos;
+    UINT wYpos;
+    UINT wZpos;
+    UINT wButtons;
+} JOYINFO, *LPJOYINFO;
+
+typedef struct joyinfoex_tag {
+    DWORD	dwSize;
+    DWORD	dwFlags;
+    DWORD	dwXpos;
+    DWORD	dwYpos;
+    DWORD	dwZpos;
+    DWORD	dwRpos;
+    DWORD	dwUpos;
+    DWORD	dwVpos;
+    DWORD	dwButtons;
+    DWORD	dwButtonNumber;
+    DWORD	dwPOV;
+    DWORD	dwReserved1;
+    DWORD	dwReserved2;
+} JOYINFOEX,*LPJOYINFOEX;
+
+
+MMRESULT       WINAPI  joyGetDevCapsA(UINT_PTR,LPJOYCAPSA,UINT);
+MMRESULT       WINAPI  joyGetDevCapsW(UINT_PTR,LPJOYCAPSW,UINT);
+#define joyGetDevCaps WINELIB_NAME_AW(joyGetDevCaps)
+UINT		WINAPI	joyGetNumDevs(void);
+MMRESULT	WINAPI	joyGetPos(UINT,LPJOYINFO);
+MMRESULT	WINAPI	joyGetPosEx(UINT,LPJOYINFOEX);
+MMRESULT	WINAPI	joyGetThreshold(UINT,UINT*);
+MMRESULT	WINAPI	joyReleaseCapture(UINT);
+MMRESULT	WINAPI	joySetCapture(HWND,UINT,UINT,BOOL);
+MMRESULT	WINAPI	joySetThreshold(UINT,UINT);
+
+#define	MIXERR_BASE		1024
+#define	MIXERR_INVALLINE	(MIXERR_BASE + 0)
+#define MIXERR_INVALCONTROL	(MIXERR_BASE + 1)
+#define MIXERR_INVALVALUE	(MIXERR_BASE + 2)
+#define MIXERR_LASTERROR	(MIXERR_BASE + 2)
+
+typedef struct tagMIXERCAPSA {
+	WORD		wMid;
+	WORD		wPid;
+	MMVERSION	vDriverVersion;
+	CHAR		szPname[MAXPNAMELEN];
+	DWORD		fdwSupport;
+	DWORD		cDestinations;
+} MIXERCAPSA,*LPMIXERCAPSA;
+
+typedef struct tagMIXERCAPSW {
+	WORD		wMid;
+	WORD		wPid;
+	MMVERSION	vDriverVersion;
+	WCHAR		szPname[MAXPNAMELEN];
+	DWORD		fdwSupport;
+	DWORD		cDestinations;
+} MIXERCAPSW,*LPMIXERCAPSW;
+
+DECL_WINELIB_TYPE_AW(MIXERCAPS)
+DECL_WINELIB_TYPE_AW(LPMIXERCAPS)
+
+typedef struct tagMIXERCAPS2A {
+	WORD		wMid;
+	WORD		wPid;
+	MMVERSION	vDriverVersion;
+	CHAR		szPname[MAXPNAMELEN];
+	DWORD		fdwSupport;
+	DWORD		cDestinations;
+	GUID		ManufacturerGuid;
+	GUID		ProductGuid;
+	GUID		NameGuid;
+} MIXERCAPS2A,*LPMIXERCAPS2A;
+
+typedef struct tagMIXERCAPS2W {
+	WORD		wMid;
+	WORD		wPid;
+	MMVERSION	vDriverVersion;
+	WCHAR		szPname[MAXPNAMELEN];
+	DWORD		fdwSupport;
+	DWORD		cDestinations;
+	GUID		ManufacturerGuid;
+	GUID		ProductGuid;
+	GUID		NameGuid;
+} MIXERCAPS2W,*LPMIXERCAPS2W;
+
+DECL_WINELIB_TYPE_AW(MIXERCAPS2)
+DECL_WINELIB_TYPE_AW(LPMIXERCAPS2)
+
+#define MIXER_SHORT_NAME_CHARS		16
+#define MIXER_LONG_NAME_CHARS		64
+
+/*  MIXERLINE.fdwLine */
+#define	MIXERLINE_LINEF_ACTIVE		0x00000001
+#define	MIXERLINE_LINEF_DISCONNECTED	0x00008000
+#define	MIXERLINE_LINEF_SOURCE		0x80000000
+
+/* Mixer flags */
+#define MIXER_OBJECTF_HANDLE    __MSABI_LONG(0x80000000)
+#define MIXER_OBJECTF_MIXER     __MSABI_LONG(0x00000000)
+#define MIXER_OBJECTF_HMIXER	(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER)
+#define MIXER_OBJECTF_WAVEOUT   __MSABI_LONG(0x10000000)
+#define MIXER_OBJECTF_HWAVEOUT	(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT)
+#define MIXER_OBJECTF_WAVEIN    __MSABI_LONG(0x20000000)
+#define MIXER_OBJECTF_HWAVEIN	(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN)
+#define MIXER_OBJECTF_MIDIOUT   __MSABI_LONG(0x30000000)
+#define MIXER_OBJECTF_HMIDIOUT	(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT)
+#define MIXER_OBJECTF_MIDIIN    __MSABI_LONG(0x40000000)
+#define MIXER_OBJECTF_HMIDIIN	(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN)
+#define MIXER_OBJECTF_AUX       __MSABI_LONG(0x50000000)
+
+/*  MIXERLINE.dwComponentType */
+/*  component types for destinations and sources */
+#define MIXERLINE_COMPONENTTYPE_DST_FIRST       __MSABI_LONG(0x00000000)
+#define	MIXERLINE_COMPONENTTYPE_DST_UNDEFINED	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
+#define	MIXERLINE_COMPONENTTYPE_DST_DIGITAL	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
+#define	MIXERLINE_COMPONENTTYPE_DST_LINE	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
+#define	MIXERLINE_COMPONENTTYPE_DST_MONITOR	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
+#define	MIXERLINE_COMPONENTTYPE_DST_SPEAKERS	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
+#define	MIXERLINE_COMPONENTTYPE_DST_HEADPHONES	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
+#define	MIXERLINE_COMPONENTTYPE_DST_TELEPHONE	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
+#define	MIXERLINE_COMPONENTTYPE_DST_WAVEIN	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
+#define	MIXERLINE_COMPONENTTYPE_DST_VOICEIN	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
+#define	MIXERLINE_COMPONENTTYPE_DST_LAST	(MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
+
+#define MIXERLINE_COMPONENTTYPE_SRC_FIRST       __MSABI_LONG(0x00001000)
+#define	MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
+#define	MIXERLINE_COMPONENTTYPE_SRC_DIGITAL	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
+#define	MIXERLINE_COMPONENTTYPE_SRC_LINE	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
+#define	MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
+#define	MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
+#define	MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
+#define	MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
+#define	MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
+#define	MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
+#define	MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
+#define	MIXERLINE_COMPONENTTYPE_SRC_ANALOG	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
+#define	MIXERLINE_COMPONENTTYPE_SRC_LAST	(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
+
+/*  MIXERLINE.Target.dwType */
+#define	MIXERLINE_TARGETTYPE_UNDEFINED	0
+#define	MIXERLINE_TARGETTYPE_WAVEOUT	1
+#define	MIXERLINE_TARGETTYPE_WAVEIN	2
+#define	MIXERLINE_TARGETTYPE_MIDIOUT	3
+#define	MIXERLINE_TARGETTYPE_MIDIIN	4
+#define MIXERLINE_TARGETTYPE_AUX	5
+
+typedef struct tagMIXERLINEA {
+    DWORD	cbStruct;
+    DWORD	dwDestination;
+    DWORD	dwSource;
+    DWORD	dwLineID;
+    DWORD	fdwLine;
+    DWORD_PTR	dwUser;
+    DWORD	dwComponentType;
+    DWORD	cChannels;
+    DWORD	cConnections;
+    DWORD	cControls;
+    CHAR	szShortName[MIXER_SHORT_NAME_CHARS];
+    CHAR	szName[MIXER_LONG_NAME_CHARS];
+    struct {
+	DWORD	dwType;
+	DWORD	dwDeviceID;
+	WORD	wMid;
+	WORD	wPid;
+	MMVERSION	vDriverVersion;
+	CHAR	szPname[MAXPNAMELEN];
+    } Target;
+} MIXERLINEA, *LPMIXERLINEA;
+
+typedef struct tagMIXERLINEW {
+    DWORD	cbStruct;
+    DWORD	dwDestination;
+    DWORD	dwSource;
+    DWORD	dwLineID;
+    DWORD	fdwLine;
+    DWORD_PTR	dwUser;
+    DWORD	dwComponentType;
+    DWORD	cChannels;
+    DWORD	cConnections;
+    DWORD	cControls;
+    WCHAR	szShortName[MIXER_SHORT_NAME_CHARS];
+    WCHAR	szName[MIXER_LONG_NAME_CHARS];
+    struct {
+	DWORD	dwType;
+	DWORD	dwDeviceID;
+	WORD	wMid;
+	WORD	wPid;
+	MMVERSION	vDriverVersion;
+	WCHAR	szPname[MAXPNAMELEN];
+    } Target;
+} MIXERLINEW, *LPMIXERLINEW;
+
+DECL_WINELIB_TYPE_AW(MIXERLINE)
+DECL_WINELIB_TYPE_AW(LPMIXERLINE)
+
+/*  MIXERCONTROL.fdwControl */
+#define MIXERCONTROL_CONTROLF_UNIFORM           __MSABI_LONG(0x00000001)
+#define MIXERCONTROL_CONTROLF_MULTIPLE          __MSABI_LONG(0x00000002)
+#define MIXERCONTROL_CONTROLF_DISABLED          __MSABI_LONG(0x80000000)
+
+/*  MIXERCONTROL_CONTROLTYPE_xxx building block defines */
+#define MIXERCONTROL_CT_CLASS_MASK              __MSABI_LONG(0xF0000000)
+#define MIXERCONTROL_CT_CLASS_CUSTOM            __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_CLASS_METER             __MSABI_LONG(0x10000000)
+#define MIXERCONTROL_CT_CLASS_SWITCH            __MSABI_LONG(0x20000000)
+#define MIXERCONTROL_CT_CLASS_NUMBER            __MSABI_LONG(0x30000000)
+#define MIXERCONTROL_CT_CLASS_SLIDER            __MSABI_LONG(0x40000000)
+#define MIXERCONTROL_CT_CLASS_FADER             __MSABI_LONG(0x50000000)
+#define MIXERCONTROL_CT_CLASS_TIME              __MSABI_LONG(0x60000000)
+#define MIXERCONTROL_CT_CLASS_LIST              __MSABI_LONG(0x70000000)
+
+#define MIXERCONTROL_CT_SUBCLASS_MASK           __MSABI_LONG(0x0F000000)
+
+#define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN       __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_SC_SWITCH_BUTTON        __MSABI_LONG(0x01000000)
+
+#define MIXERCONTROL_CT_SC_METER_POLLED         __MSABI_LONG(0x00000000)
+
+#define MIXERCONTROL_CT_SC_TIME_MICROSECS       __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_SC_TIME_MILLISECS       __MSABI_LONG(0x01000000)
+
+#define MIXERCONTROL_CT_SC_LIST_SINGLE          __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_SC_LIST_MULTIPLE        __MSABI_LONG(0x01000000)
+
+#define MIXERCONTROL_CT_UNITS_MASK              __MSABI_LONG(0x00FF0000)
+#define MIXERCONTROL_CT_UNITS_CUSTOM            __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_UNITS_BOOLEAN           __MSABI_LONG(0x00010000)
+#define MIXERCONTROL_CT_UNITS_SIGNED            __MSABI_LONG(0x00020000)
+#define MIXERCONTROL_CT_UNITS_UNSIGNED          __MSABI_LONG(0x00030000)
+#define MIXERCONTROL_CT_UNITS_DECIBELS          __MSABI_LONG(0x00040000) /* in 10ths */
+#define MIXERCONTROL_CT_UNITS_PERCENT           __MSABI_LONG(0x00050000) /* in 10ths */
+
+/*  Commonly used control types for specifying MIXERCONTROL.dwControlType */
+#define MIXERCONTROL_CONTROLTYPE_CUSTOM		(MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM)
+#define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER	(MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER	(MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PEAKMETER	(MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
+#define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER	(MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_BOOLEAN	(MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_ONOFF		(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
+#define MIXERCONTROL_CONTROLTYPE_MUTE		(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
+#define MIXERCONTROL_CONTROLTYPE_MONO		(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
+#define MIXERCONTROL_CONTROLTYPE_LOUDNESS	(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
+#define MIXERCONTROL_CONTROLTYPE_STEREOENH	(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
+#define MIXERCONTROL_CONTROLTYPE_BASS_BOOST     (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277)
+#define MIXERCONTROL_CONTROLTYPE_BUTTON		(MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_DECIBELS	(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS)
+#define MIXERCONTROL_CONTROLTYPE_SIGNED		(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_UNSIGNED	(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PERCENT	(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT)
+#define MIXERCONTROL_CONTROLTYPE_SLIDER		(MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PAN		(MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
+#define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN	(MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
+#define MIXERCONTROL_CONTROLTYPE_FADER		(MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_VOLUME		(MIXERCONTROL_CONTROLTYPE_FADER + 1)
+#define MIXERCONTROL_CONTROLTYPE_BASS		(MIXERCONTROL_CONTROLTYPE_FADER + 2)
+#define MIXERCONTROL_CONTROLTYPE_TREBLE		(MIXERCONTROL_CONTROLTYPE_FADER + 3)
+#define MIXERCONTROL_CONTROLTYPE_EQUALIZER	(MIXERCONTROL_CONTROLTYPE_FADER + 4)
+#define MIXERCONTROL_CONTROLTYPE_SINGLESELECT	(MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_MUX		(MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
+#define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT	(MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_MIXER		(MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
+#define MIXERCONTROL_CONTROLTYPE_MICROTIME	(MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_MILLITIME	(MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
+
+
+typedef struct tagMIXERCONTROLA {
+    DWORD		cbStruct;
+    DWORD		dwControlID;
+    DWORD		dwControlType;
+    DWORD		fdwControl;
+    DWORD		cMultipleItems;
+    CHAR		szShortName[MIXER_SHORT_NAME_CHARS];
+    CHAR		szName[MIXER_LONG_NAME_CHARS];
+    union {
+	struct {
+	    LONG	lMinimum;
+	    LONG	lMaximum;
+	} DUMMYSTRUCTNAME;
+	struct {
+	    DWORD	dwMinimum;
+	    DWORD	dwMaximum;
+	} DUMMYSTRUCTNAME1;
+	DWORD       	dwReserved[6];
+    } Bounds;
+    union {
+	DWORD		cSteps;
+	DWORD		cbCustomData;
+	DWORD		dwReserved[6];
+    } Metrics;
+} MIXERCONTROLA, *LPMIXERCONTROLA;
+
+typedef struct MIXERCONTROLW {
+    DWORD		cbStruct;
+    DWORD		dwControlID;
+    DWORD		dwControlType;
+    DWORD		fdwControl;
+    DWORD		cMultipleItems;
+    WCHAR		szShortName[MIXER_SHORT_NAME_CHARS];
+    WCHAR		szName[MIXER_LONG_NAME_CHARS];
+    union {
+	struct {
+	    LONG	lMinimum;
+	    LONG	lMaximum;
+	} DUMMYSTRUCTNAME;
+	struct {
+	    DWORD	dwMinimum;
+	    DWORD	dwMaximum;
+	} DUMMYSTRUCTNAME1;
+	DWORD       	dwReserved[6];
+    } Bounds;
+    union {
+	DWORD		cSteps;
+	DWORD		cbCustomData;
+	DWORD		dwReserved[6];
+    } Metrics;
+} MIXERCONTROLW, *LPMIXERCONTROLW;
+
+DECL_WINELIB_TYPE_AW(MIXERCONTROL)
+DECL_WINELIB_TYPE_AW(LPMIXERCONTROL)
+
+typedef struct tagMIXERLINECONTROLSA {
+    DWORD	cbStruct;
+    DWORD	dwLineID;
+    union {
+	DWORD	dwControlID;
+	DWORD	dwControlType;
+    } DUMMYUNIONNAME;
+    DWORD	cControls;
+    DWORD	cbmxctrl;
+    LPMIXERCONTROLA	pamxctrl;
+} MIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;
+
+typedef struct tagMIXERLINECONTROLSW {
+    DWORD	cbStruct;
+    DWORD	dwLineID;
+    union {
+	DWORD	dwControlID;
+	DWORD	dwControlType;
+    } DUMMYUNIONNAME;
+    DWORD	cControls;
+    DWORD	cbmxctrl;
+    LPMIXERCONTROLW	pamxctrl;
+} MIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;
+
+DECL_WINELIB_TYPE_AW(MIXERLINECONTROLS)
+DECL_WINELIB_TYPE_AW(LPMIXERLINECONTROLS)
+
+typedef struct tMIXERCONTROLDETAILS {
+    DWORD	cbStruct;
+    DWORD	dwControlID;
+    DWORD	cChannels;
+    union {
+        HWND	hwndOwner;
+        DWORD	cMultipleItems;
+    } DUMMYUNIONNAME;
+    DWORD	cbDetails;
+    LPVOID	paDetails;
+} MIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS;
+
+typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {
+    DWORD	dwParam1;
+    DWORD	dwParam2;
+    CHAR	szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA;
+
+typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
+    DWORD	dwParam1;
+    DWORD	dwParam2;
+    WCHAR	szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW;
+
+DECL_WINELIB_TYPE_AW(MIXERCONTROLDETAILS_LISTTEXT)
+DECL_WINELIB_TYPE_AW(LPMIXERCONTROLDETAILS_LISTTEXT)
+
+/*  MIXER_GETCONTROLDETAILSF_VALUE */
+typedef struct {
+	LONG	fValue;
+} MIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN;
+
+typedef struct {
+	LONG	lValue;
+} MIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED;
+
+typedef struct {
+	DWORD	dwValue;
+} MIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED;
+
+/* bits passed to mixerGetLineInfo.fdwInfo */
+#define MIXER_GETLINEINFOF_DESTINATION          __MSABI_LONG(0x00000000)
+#define MIXER_GETLINEINFOF_SOURCE               __MSABI_LONG(0x00000001)
+#define MIXER_GETLINEINFOF_LINEID               __MSABI_LONG(0x00000002)
+#define MIXER_GETLINEINFOF_COMPONENTTYPE        __MSABI_LONG(0x00000003)
+#define MIXER_GETLINEINFOF_TARGETTYPE           __MSABI_LONG(0x00000004)
+#define MIXER_GETLINEINFOF_QUERYMASK            __MSABI_LONG(0x0000000F)
+
+/* bitmask passed to mixerGetLineControl */
+#define MIXER_GETLINECONTROLSF_ALL              __MSABI_LONG(0x00000000)
+#define MIXER_GETLINECONTROLSF_ONEBYID          __MSABI_LONG(0x00000001)
+#define MIXER_GETLINECONTROLSF_ONEBYTYPE        __MSABI_LONG(0x00000002)
+#define MIXER_GETLINECONTROLSF_QUERYMASK        __MSABI_LONG(0x0000000F)
+
+/* bitmask passed to mixerGetControlDetails */
+#define MIXER_GETCONTROLDETAILSF_VALUE          __MSABI_LONG(0x00000000)
+#define MIXER_GETCONTROLDETAILSF_LISTTEXT       __MSABI_LONG(0x00000001)
+#define MIXER_GETCONTROLDETAILSF_QUERYMASK      __MSABI_LONG(0x0000000F)
+
+/* bitmask passed to mixerSetControlDetails */
+#define MIXER_SETCONTROLDETAILSF_VALUE          __MSABI_LONG(0x00000000)
+#define MIXER_SETCONTROLDETAILSF_CUSTOM         __MSABI_LONG(0x00000001)
+#define MIXER_SETCONTROLDETAILSF_QUERYMASK      __MSABI_LONG(0x0000000F)
+
+UINT		WINAPI	mixerGetNumDevs(void);
+UINT           WINAPI  mixerOpen(LPHMIXER,UINT,DWORD_PTR,DWORD_PTR,DWORD);
+UINT		WINAPI	mixerClose(HMIXER);
+DWORD           WINAPI  mixerMessage(HMIXER,UINT,DWORD_PTR,DWORD_PTR);
+UINT           WINAPI  mixerGetDevCapsA(UINT_PTR,LPMIXERCAPSA,UINT);
+UINT           WINAPI  mixerGetDevCapsW(UINT_PTR,LPMIXERCAPSW,UINT);
+#define 		mixerGetDevCaps WINELIB_NAME_AW(mixerGetDevCaps)
+UINT		WINAPI	mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD);
+UINT		WINAPI	mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD);
+#define 		mixerGetLineInfo WINELIB_NAME_AW(mixerGetLineInfo)
+UINT		WINAPI	mixerGetID(HMIXEROBJ,LPUINT,DWORD);
+UINT		WINAPI	mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD);
+UINT		WINAPI	mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD);
+#define 		mixerGetLineControls WINELIB_NAME_AW(mixerGetLineControls)
+UINT		WINAPI	mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+UINT		WINAPI	mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+#define 		mixerGetControlDetails WINELIB_NAME_AW(mixerGetControlDetails)
+UINT		WINAPI	mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+
+#define MMIOERR_BASE            256
+#define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  /* file not found */
+#define MMIOERR_OUTOFMEMORY     (MMIOERR_BASE + 2)  /* out of memory */
+#define MMIOERR_CANNOTOPEN      (MMIOERR_BASE + 3)  /* cannot open */
+#define MMIOERR_CANNOTCLOSE     (MMIOERR_BASE + 4)  /* cannot close */
+#define MMIOERR_CANNOTREAD      (MMIOERR_BASE + 5)  /* cannot read */
+#define MMIOERR_CANNOTWRITE     (MMIOERR_BASE + 6)  /* cannot write */
+#define MMIOERR_CANNOTSEEK      (MMIOERR_BASE + 7)  /* cannot seek */
+#define MMIOERR_CANNOTEXPAND    (MMIOERR_BASE + 8)  /* cannot expand file */
+#define MMIOERR_CHUNKNOTFOUND   (MMIOERR_BASE + 9)  /* chunk not found */
+#define MMIOERR_UNBUFFERED      (MMIOERR_BASE + 10) /* file is unbuffered */
+#define MMIOERR_PATHNOTFOUND     (MMIOERR_BASE + 11)
+#define MMIOERR_ACCESSDENIED     (MMIOERR_BASE + 12)
+#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE + 13)
+#define MMIOERR_NETWORKERROR     (MMIOERR_BASE + 14)
+#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE + 15)
+#define MMIOERR_INVALIDFILE      (MMIOERR_BASE + 16)
+
+#define CFSEPCHAR       '+'             /* compound file name separator char. */
+
+typedef DWORD           FOURCC;         /* a four character code */
+typedef LRESULT (CALLBACK *LPMMIOPROC)  (LPSTR lpmmioinfo, UINT uMessage,
+					 LPARAM lParam1, LPARAM lParam2);
+
+typedef struct _MMIOINFO {
+        DWORD		dwFlags;
+        FOURCC		fccIOProc;
+        LPMMIOPROC	pIOProc;
+        UINT		wErrorRet;
+        HTASK		hTask;
+        /* fields maintained by MMIO functions during buffered I/O */
+        LONG		cchBuffer;
+        HPSTR		pchBuffer;
+        HPSTR		pchNext;
+        HPSTR		pchEndRead;
+        HPSTR		pchEndWrite;
+        LONG		lBufOffset;
+        /* fields maintained by I/O procedure */
+        LONG		lDiskOffset;
+        DWORD		adwInfo[3];
+        /* other fields maintained by MMIO */
+        DWORD		dwReserved1;
+        DWORD		dwReserved2;
+        HMMIO		hmmio;
+} MMIOINFO, *PMMIOINFO, *LPMMIOINFO;
+
+
+typedef struct _MMCKINFO
+{
+        FOURCC          ckid;           /* chunk ID */
+        DWORD           cksize;         /* chunk size */
+        FOURCC          fccType;        /* form type or list type */
+        DWORD           dwDataOffset;   /* offset of data portion of chunk */
+        DWORD           dwFlags;        /* flags used by MMIO functions */
+} MMCKINFO, *LPMMCKINFO;
+
+#define MMIO_RWMODE     0x00000003      /* open file for reading/writing/both */
+#define MMIO_SHAREMODE  0x00000070      /* file sharing mode number */
+
+#define MMIO_CREATE     0x00001000      /* create new file (or truncate file) */
+#define MMIO_PARSE      0x00000100      /* parse new file returning path */
+#define MMIO_DELETE     0x00000200      /* create new file (or truncate file) */
+#define MMIO_EXIST      0x00004000      /* checks for existence of file */
+#define MMIO_ALLOCBUF   0x00010000      /* mmioOpen() should allocate a buffer */
+#define MMIO_GETTEMP    0x00020000      /* mmioOpen() should retrieve temp name */
+
+#define MMIO_DIRTY      0x10000000      /* I/O buffer is dirty */
+
+#define MMIO_READ       0x00000000      /* open file for reading only */
+#define MMIO_WRITE      0x00000001      /* open file for writing only */
+#define MMIO_READWRITE  0x00000002      /* open file for reading and writing */
+
+#define MMIO_COMPAT     0x00000000      /* compatibility mode */
+#define MMIO_EXCLUSIVE  0x00000010      /* exclusive-access mode */
+#define MMIO_DENYWRITE  0x00000020      /* deny writing to other processes */
+#define MMIO_DENYREAD   0x00000030      /* deny reading to other processes */
+#define MMIO_DENYNONE   0x00000040      /* deny nothing to other processes */
+
+#define MMIO_FHOPEN             0x0010  /* mmioClose: keep file handle open */
+#define MMIO_EMPTYBUF           0x0010  /* mmioFlush: empty the I/O buffer */
+#define MMIO_TOUPPER            0x0010  /* mmioStringToFOURCC: to u-case */
+#define MMIO_INSTALLPROC    0x00010000  /* mmioInstallIOProc: install MMIOProc */
+#define MMIO_GLOBALPROC     0x10000000  /* mmioInstallIOProc: install globally */
+#define MMIO_REMOVEPROC     0x00020000  /* mmioInstallIOProc: remove MMIOProc */
+#define MMIO_FINDPROC       0x00040000  /* mmioInstallIOProc: find an MMIOProc */
+#define MMIO_FINDCHUNK          0x0010  /* mmioDescend: find a chunk by ID */
+#define MMIO_FINDRIFF           0x0020  /* mmioDescend: find a LIST chunk */
+#define MMIO_FINDLIST           0x0040  /* mmioDescend: find a RIFF chunk */
+#define MMIO_CREATERIFF         0x0020  /* mmioCreateChunk: make a LIST chunk */
+#define MMIO_CREATELIST         0x0040  /* mmioCreateChunk: make a RIFF chunk */
+
+#ifndef SEEK_SET
+#define SEEK_SET   0
+#define SEEK_CUR   1
+#define SEEK_END   2
+#endif  /* SEEK_SET */
+
+#define MMIOM_READ      MMIO_READ       /* read */
+#define MMIOM_WRITE    MMIO_WRITE       /* write */
+#define MMIOM_SEEK              2       /* seek to a new position in file */
+#define MMIOM_OPEN              3       /* open file */
+#define MMIOM_CLOSE             4       /* close file */
+#define MMIOM_WRITEFLUSH        5       /* write and flush */
+
+#define MMIOM_RENAME            6       /* rename specified file */
+
+#define MMIOM_USER         0x8000       /* beginning of user-defined messages */
+
+#define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
+#define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
+
+#define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
+#define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
+
+#define MMIO_DEFAULTBUFFER      8192    /* default buffer size */
+
+#define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \
+                ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
+                ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+
+LPMMIOPROC 	WINAPI 	mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD);
+LPMMIOPROC 	WINAPI 	mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD);
+#define      		mmioInstallIOProc WINELIB_NAME_AW(mmioInstallIOProc)
+
+FOURCC 		WINAPI	mmioStringToFOURCCA(LPCSTR,UINT);
+FOURCC 		WINAPI	mmioStringToFOURCCW(LPCWSTR,UINT);
+#define 		mmioStringToFOURCC WINELIB_NAME_AW(mmioStringToFOURCC)
+HMMIO		WINAPI	mmioOpenA(LPSTR,MMIOINFO*,DWORD);
+HMMIO		WINAPI	mmioOpenW(LPWSTR,MMIOINFO*,DWORD);
+#define			mmioOpen WINELIB_NAME_AW(mmioOpen)
+
+MMRESULT	WINAPI	mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName,
+				    const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);
+MMRESULT	WINAPI	mmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName,
+				    const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);
+#define 		mmioRename WINELIB_NAME_AW(mmioRename)
+
+MMRESULT 	WINAPI	mmioClose(HMMIO,UINT);
+LONG 		WINAPI	mmioRead(HMMIO,HPSTR,LONG);
+LONG 		WINAPI	mmioWrite(HMMIO,HPCSTR,LONG);
+LONG 		WINAPI	mmioSeek(HMMIO,LONG,INT);
+MMRESULT 	WINAPI	mmioGetInfo(HMMIO,MMIOINFO*,UINT);
+MMRESULT 	WINAPI	mmioSetInfo(HMMIO,const MMIOINFO*,UINT);
+MMRESULT	WINAPI	mmioSetBuffer(HMMIO,LPSTR,LONG,UINT);
+MMRESULT	WINAPI	mmioFlush(HMMIO,UINT);
+MMRESULT	WINAPI	mmioAdvance(HMMIO,MMIOINFO*,UINT);
+LRESULT		WINAPI	mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM);
+MMRESULT	WINAPI	mmioDescend(HMMIO,MMCKINFO*,const MMCKINFO*,UINT);
+MMRESULT	WINAPI	mmioAscend(HMMIO,MMCKINFO*,UINT);
+MMRESULT	WINAPI	mmioCreateChunk(HMMIO,MMCKINFO*,UINT);
+
+typedef UINT (CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD);
+
+BOOL            WINAPI  mciExecute(LPCSTR);
+DWORD           WINAPI  mciSendCommandA(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);
+DWORD           WINAPI  mciSendCommandW(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);
+#define 		mciSendCommand WINELIB_NAME_AW(mciSendCommand)
+DWORD		WINAPI	mciSendStringA(LPCSTR,LPSTR,UINT,HWND);
+DWORD		WINAPI	mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND);
+#define 		mciSendString WINELIB_NAME_AW(mciSendString)
+MCIDEVICEID	WINAPI	mciGetDeviceIDA(LPCSTR);
+MCIDEVICEID	WINAPI	mciGetDeviceIDW(LPCWSTR);
+#define 		mciGetDeviceID WINELIB_NAME_AW(mciGetDeviceID)
+MCIDEVICEID     WINAPI  mciGetDeviceIDFromElementIDA(DWORD,LPCSTR);
+MCIDEVICEID     WINAPI  mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR);
+#define                 mciGetDeviceIDFromElementID WINELIB_NAME_AW(mciGetDeviceIDFromElementID)
+BOOL            WINAPI  mciGetErrorStringA(MCIERROR,LPSTR,UINT);
+BOOL            WINAPI  mciGetErrorStringW(MCIERROR,LPWSTR,UINT);
+#define 		mciGetErrorString WINELIB_NAME_AW(mciGetErrorString)
+BOOL            WINAPI  mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD);
+HTASK           WINAPI  mciGetCreatorTask(MCIDEVICEID);
+YIELDPROC       WINAPI  mciGetYieldProc(MCIDEVICEID,DWORD*);
+
+#define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
+#define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
+#define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
+#define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
+#define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
+#define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
+#define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
+#define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
+#define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
+#define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
+#define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
+#define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
+#define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
+#define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
+#define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
+#define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
+#define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
+#define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
+#define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
+#define MCIERR_DRIVER                   (MCIERR_BASE + 22)
+#define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
+#define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
+#define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
+#define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
+#define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
+#define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
+#define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
+#define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
+#define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
+#define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
+#define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
+#define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
+#define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
+#define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
+#define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
+#define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
+#define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
+#define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
+#define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
+#define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
+#define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
+#define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
+#define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
+#define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
+#define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
+#define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
+#define MCIERR_GET_CD                   (MCIERR_BASE + 51)
+#define MCIERR_SET_CD                   (MCIERR_BASE + 52)
+#define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
+#define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
+#define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
+#define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
+
+#define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
+#define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
+#define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
+#define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
+#define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
+#define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
+#define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
+#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
+#define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
+#define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
+
+#define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
+#define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
+#define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
+#define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
+#define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
+#define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
+#define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
+#define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
+
+#define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
+#define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
+#define MCIERR_FILE_READ                (MCIERR_BASE + 92)
+#define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
+
+#define MCIERR_NO_IDENTITY		(MCIERR_BASE + 94)
+
+#define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
+
+#define MCI_OPEN_DRIVER			0x0801
+#define MCI_CLOSE_DRIVER		0x0802
+#define MCI_OPEN			0x0803
+#define MCI_CLOSE			0x0804
+#define MCI_ESCAPE                      0x0805
+#define MCI_PLAY                        0x0806
+#define MCI_SEEK                        0x0807
+#define MCI_STOP                        0x0808
+#define MCI_PAUSE                       0x0809
+#define MCI_INFO                        0x080A
+#define MCI_GETDEVCAPS                  0x080B
+#define MCI_SPIN                        0x080C
+#define MCI_SET                         0x080D
+#define MCI_STEP                        0x080E
+#define MCI_RECORD                      0x080F
+#define MCI_SYSINFO                     0x0810
+#define MCI_BREAK                       0x0811
+#define MCI_SOUND                       0x0812
+#define MCI_SAVE                        0x0813
+#define MCI_STATUS                      0x0814
+#define MCI_CUE                         0x0830
+#define MCI_REALIZE                     0x0840
+#define MCI_WINDOW                      0x0841
+#define MCI_PUT                         0x0842
+#define MCI_WHERE                       0x0843
+#define MCI_FREEZE                      0x0844
+#define MCI_UNFREEZE                    0x0845
+#define MCI_LOAD                        0x0850
+#define MCI_CUT                         0x0851
+#define MCI_COPY                        0x0852
+#define MCI_PASTE                       0x0853
+#define MCI_UPDATE                      0x0854
+#define MCI_RESUME                      0x0855
+#define MCI_DELETE                      0x0856
+
+#define MCI_USER_MESSAGES               (0x400 + DRV_MCI_FIRST)
+
+#define MCI_ALL_DEVICE_ID               0xFFFFFFFF
+
+#define MCI_DEVTYPE_VCR                 (MCI_STRING_OFFSET + 1)
+#define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 2)
+#define MCI_DEVTYPE_OVERLAY             (MCI_STRING_OFFSET + 3)
+#define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 4)
+#define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 5)
+#define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 6)
+#define MCI_DEVTYPE_ANIMATION           (MCI_STRING_OFFSET + 7)
+#define MCI_DEVTYPE_DIGITAL_VIDEO       (MCI_STRING_OFFSET + 8)
+#define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 9)
+#define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 10)
+#define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 11)
+
+#define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
+#define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
+
+#define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
+#define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
+#define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
+#define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
+#define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
+#define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
+#define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
+
+#define MCI_FORMAT_MILLISECONDS         0
+#define MCI_FORMAT_HMS                  1
+#define MCI_FORMAT_MSF                  2
+#define MCI_FORMAT_FRAMES               3
+#define MCI_FORMAT_SMPTE_24             4
+#define MCI_FORMAT_SMPTE_25             5
+#define MCI_FORMAT_SMPTE_30             6
+#define MCI_FORMAT_SMPTE_30DROP         7
+#define MCI_FORMAT_BYTES                8
+#define MCI_FORMAT_SAMPLES              9
+#define MCI_FORMAT_TMSF                 10
+
+#define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
+#define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
+#define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
+
+#define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | \
+                                                  ((WORD)(s)<<8)) | \
+                                                 (((DWORD)(BYTE)(f))<<16)))
+
+#define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
+#define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
+#define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
+#define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
+
+#define MCI_MAKE_TMSF(t, m, s, f)       ((DWORD)(((BYTE)(t) | \
+                                                  ((WORD)(m)<<8)) | \
+                                                 (((DWORD)(BYTE)(s) | \
+                                                   ((WORD)(f)<<8))<<16)))
+
+#define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
+#define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
+#define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
+
+#define MCI_MAKE_HMS(h, m, s)           ((DWORD)(((BYTE)(h) | \
+                                                  ((WORD)(m)<<8)) | \
+                                                 (((DWORD)(BYTE)(s))<<16)))
+
+#define MCI_NOTIFY_SUCCESSFUL           0x0001
+#define MCI_NOTIFY_SUPERSEDED           0x0002
+#define MCI_NOTIFY_ABORTED              0x0004
+#define MCI_NOTIFY_FAILURE              0x0008
+
+#define MCI_NOTIFY                      __MSABI_LONG(0x00000001)
+#define MCI_WAIT                        __MSABI_LONG(0x00000002)
+#define MCI_FROM                        __MSABI_LONG(0x00000004)
+#define MCI_TO                          __MSABI_LONG(0x00000008)
+#define MCI_TRACK                       __MSABI_LONG(0x00000010)
+
+#define MCI_OPEN_SHAREABLE              __MSABI_LONG(0x00000100)
+#define MCI_OPEN_ELEMENT                __MSABI_LONG(0x00000200)
+#define MCI_OPEN_ALIAS                  __MSABI_LONG(0x00000400)
+#define MCI_OPEN_ELEMENT_ID             __MSABI_LONG(0x00000800)
+#define MCI_OPEN_TYPE_ID                __MSABI_LONG(0x00001000)
+#define MCI_OPEN_TYPE                   __MSABI_LONG(0x00002000)
+
+#define MCI_SEEK_TO_START               __MSABI_LONG(0x00000100)
+#define MCI_SEEK_TO_END                 __MSABI_LONG(0x00000200)
+
+#define MCI_STATUS_ITEM                 __MSABI_LONG(0x00000100)
+#define MCI_STATUS_START                __MSABI_LONG(0x00000200)
+
+#define MCI_STATUS_LENGTH               __MSABI_LONG(0x00000001)
+#define MCI_STATUS_POSITION             __MSABI_LONG(0x00000002)
+#define MCI_STATUS_NUMBER_OF_TRACKS     __MSABI_LONG(0x00000003)
+#define MCI_STATUS_MODE                 __MSABI_LONG(0x00000004)
+#define MCI_STATUS_MEDIA_PRESENT        __MSABI_LONG(0x00000005)
+#define MCI_STATUS_TIME_FORMAT          __MSABI_LONG(0x00000006)
+#define MCI_STATUS_READY                __MSABI_LONG(0x00000007)
+#define MCI_STATUS_CURRENT_TRACK        __MSABI_LONG(0x00000008)
+
+#define MCI_INFO_PRODUCT                __MSABI_LONG(0x00000100)
+#define MCI_INFO_FILE                   __MSABI_LONG(0x00000200)
+#define MCI_INFO_MEDIA_UPC              __MSABI_LONG(0x00000400)
+#define MCI_INFO_MEDIA_IDENTITY         __MSABI_LONG(0x00000800)
+#define MCI_INFO_NAME                   __MSABI_LONG(0x00001000)
+#define MCI_INFO_COPYRIGHT              __MSABI_LONG(0x00002000)
+
+#define MCI_GETDEVCAPS_ITEM             __MSABI_LONG(0x00000100)
+
+#define MCI_GETDEVCAPS_CAN_RECORD       __MSABI_LONG(0x00000001)
+#define MCI_GETDEVCAPS_HAS_AUDIO        __MSABI_LONG(0x00000002)
+#define MCI_GETDEVCAPS_HAS_VIDEO        __MSABI_LONG(0x00000003)
+#define MCI_GETDEVCAPS_DEVICE_TYPE      __MSABI_LONG(0x00000004)
+#define MCI_GETDEVCAPS_USES_FILES       __MSABI_LONG(0x00000005)
+#define MCI_GETDEVCAPS_COMPOUND_DEVICE  __MSABI_LONG(0x00000006)
+#define MCI_GETDEVCAPS_CAN_EJECT        __MSABI_LONG(0x00000007)
+#define MCI_GETDEVCAPS_CAN_PLAY         __MSABI_LONG(0x00000008)
+#define MCI_GETDEVCAPS_CAN_SAVE         __MSABI_LONG(0x00000009)
+
+#define MCI_SYSINFO_QUANTITY            __MSABI_LONG(0x00000100)
+#define MCI_SYSINFO_OPEN                __MSABI_LONG(0x00000200)
+#define MCI_SYSINFO_NAME                __MSABI_LONG(0x00000400)
+#define MCI_SYSINFO_INSTALLNAME         __MSABI_LONG(0x00000800)
+
+#define MCI_SET_DOOR_OPEN               __MSABI_LONG(0x00000100)
+#define MCI_SET_DOOR_CLOSED             __MSABI_LONG(0x00000200)
+#define MCI_SET_TIME_FORMAT             __MSABI_LONG(0x00000400)
+#define MCI_SET_AUDIO                   __MSABI_LONG(0x00000800)
+#define MCI_SET_VIDEO                   __MSABI_LONG(0x00001000)
+#define MCI_SET_ON                      __MSABI_LONG(0x00002000)
+#define MCI_SET_OFF                     __MSABI_LONG(0x00004000)
+
+#define MCI_SET_AUDIO_ALL               __MSABI_LONG(0x00000000)
+#define MCI_SET_AUDIO_LEFT              __MSABI_LONG(0x00000001)
+#define MCI_SET_AUDIO_RIGHT             __MSABI_LONG(0x00000002)
+
+#define MCI_BREAK_KEY                   __MSABI_LONG(0x00000100)
+#define MCI_BREAK_HWND                  __MSABI_LONG(0x00000200)
+#define MCI_BREAK_OFF                   __MSABI_LONG(0x00000400)
+
+#define MCI_RECORD_INSERT               __MSABI_LONG(0x00000100)
+#define MCI_RECORD_OVERWRITE            __MSABI_LONG(0x00000200)
+
+#define MCI_SOUND_NAME                  __MSABI_LONG(0x00000100)
+
+#define MCI_SAVE_FILE                   __MSABI_LONG(0x00000100)
+
+#define MCI_LOAD_FILE                   __MSABI_LONG(0x00000100)
+
+typedef struct tagMCI_GENERIC_PARMS {
+       DWORD_PTR dwCallback;
+} MCI_GENERIC_PARMS, *LPMCI_GENERIC_PARMS;
+
+typedef struct tagMCI_OPEN_PARMSA {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCSTR		lpstrDeviceType;
+	LPCSTR		lpstrElementName;
+	LPCSTR		lpstrAlias;
+} MCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;
+
+typedef struct tagMCI_OPEN_PARMSW {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCWSTR		lpstrDeviceType;
+	LPCWSTR		lpstrElementName;
+	LPCWSTR		lpstrAlias;
+} MCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OPEN_PARMS)
+
+typedef struct tagMCI_PLAY_PARMS{
+       DWORD_PTR dwCallback;
+	DWORD   dwFrom;
+	DWORD   dwTo;
+} MCI_PLAY_PARMS, *LPMCI_PLAY_PARMS;
+
+typedef struct tagMCI_SEEK_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwTo;
+} MCI_SEEK_PARMS, *LPMCI_SEEK_PARMS;
+
+typedef struct tagMCI_STATUS_PARMS {
+       DWORD_PTR dwCallback;
+       DWORD_PTR dwReturn;
+	DWORD   dwItem;
+	DWORD   dwTrack;
+} MCI_STATUS_PARMS, *LPMCI_STATUS_PARMS;
+
+typedef struct tagMCI_INFO_PARMSA {
+    DWORD_PTR   dwCallback;
+    LPSTR       lpstrReturn;
+    DWORD       dwRetSize;
+} MCI_INFO_PARMSA, *LPMCI_INFO_PARMSA;
+
+typedef struct tagMCI_INFO_PARMSW {
+    DWORD_PTR   dwCallback;
+    LPWSTR      lpstrReturn;
+    DWORD       dwRetSize;
+} MCI_INFO_PARMSW, *LPMCI_INFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_INFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_INFO_PARMS)
+
+typedef struct tagMCI_GETDEVCAPS_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwReturn;
+	DWORD   dwItem;
+} MCI_GETDEVCAPS_PARMS, *LPMCI_GETDEVCAPS_PARMS;
+
+typedef struct tagMCI_SYSINFO_PARMSA {
+    DWORD_PTR   dwCallback;
+    LPSTR	lpstrReturn;
+    DWORD	dwRetSize;
+    DWORD	dwNumber;
+    UINT	wDeviceType;
+} MCI_SYSINFO_PARMSA, *LPMCI_SYSINFO_PARMSA;
+
+typedef struct tagMCI_SYSINFO_PARMSW {
+    DWORD_PTR   dwCallback;
+    LPWSTR	lpstrReturn;
+    DWORD	dwRetSize;
+    DWORD	dwNumber;
+    UINT	wDeviceType;
+} MCI_SYSINFO_PARMSW, *LPMCI_SYSINFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_SYSINFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_SYSINFO_PARMS)
+
+typedef struct tagMCI_SET_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwTimeFormat;
+	DWORD   dwAudio;
+} MCI_SET_PARMS, *LPMCI_SET_PARMS;
+
+typedef struct tagMCI_BREAK_PARMS {
+       DWORD_PTR dwCallback;
+	INT	nVirtKey;
+	HWND	hwndBreak;
+} MCI_BREAK_PARMS, *LPMCI_BREAK_PARMS;
+
+
+typedef struct tagMCI_SOUND_PARMSA {
+    DWORD_PTR   dwCallback;
+    LPCSTR      lpstrSoundName;
+} MCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA;
+
+typedef struct tagMCI_SOUND_PARMSW {
+    DWORD_PTR   dwCallback;
+    LPCWSTR     lpstrSoundName;
+} MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_SOUND_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_SOUND_PARMS)
+
+typedef struct tagMCI_SAVE_PARMSA {
+    DWORD_PTR dwCallback;
+    LPCSTR  lpfilename;
+} MCI_SAVE_PARMSA, *LPMCI_SAVE_PARMSA;
+
+typedef struct tagMCI_SAVE_PARMSW {
+    DWORD_PTR dwCallback;
+    LPCWSTR  lpfilename;
+} MCI_SAVE_PARMSW, *LPMCI_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_SAVE_PARMS)
+
+typedef struct tagMCI_LOAD_PARMSA {
+       DWORD_PTR dwCallback;
+	LPCSTR	lpfilename;
+} MCI_LOAD_PARMSA, *LPMCI_LOAD_PARMSA;
+
+typedef struct tagMCI_LOAD_PARMSW {
+       DWORD_PTR dwCallback;
+	LPCWSTR	lpfilename;
+} MCI_LOAD_PARMSW, *LPMCI_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_LOAD_PARMS)
+
+typedef struct tagMCI_RECORD_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwFrom;
+	DWORD   dwTo;
+} MCI_RECORD_PARMS, *LPMCI_RECORD_PARMS;
+
+#define MCI_CDA_STATUS_TYPE_TRACK 	0x00004001
+
+#define MCI_CDA_TRACK_AUDIO		(MCI_CD_OFFSET + 0)
+#define MCI_CDA_TRACK_OTHER		(MCI_CD_OFFSET + 1)
+
+#define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
+
+#define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
+#define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
+#define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
+
+#define MCI_VD_FORMAT_TRACK             0x4001
+
+#define MCI_VD_PLAY_REVERSE             __MSABI_LONG(0x00010000)
+#define MCI_VD_PLAY_FAST                __MSABI_LONG(0x00020000)
+#define MCI_VD_PLAY_SPEED               __MSABI_LONG(0x00040000)
+#define MCI_VD_PLAY_SCAN                __MSABI_LONG(0x00080000)
+#define MCI_VD_PLAY_SLOW                __MSABI_LONG(0x00100000)
+
+#define MCI_VD_SEEK_REVERSE             __MSABI_LONG(0x00010000)
+
+#define MCI_VD_STATUS_SPEED             __MSABI_LONG(0x00004002)
+#define MCI_VD_STATUS_FORWARD           __MSABI_LONG(0x00004003)
+#define MCI_VD_STATUS_MEDIA_TYPE        __MSABI_LONG(0x00004004)
+#define MCI_VD_STATUS_SIDE              __MSABI_LONG(0x00004005)
+#define MCI_VD_STATUS_DISC_SIZE         __MSABI_LONG(0x00004006)
+
+#define MCI_VD_GETDEVCAPS_CLV           __MSABI_LONG(0x00010000)
+#define MCI_VD_GETDEVCAPS_CAV           __MSABI_LONG(0x00020000)
+
+#define MCI_VD_SPIN_UP                  __MSABI_LONG(0x00010000)
+#define MCI_VD_SPIN_DOWN                __MSABI_LONG(0x00020000)
+
+#define MCI_VD_GETDEVCAPS_CAN_REVERSE   __MSABI_LONG(0x00004002)
+#define MCI_VD_GETDEVCAPS_FAST_RATE     __MSABI_LONG(0x00004003)
+#define MCI_VD_GETDEVCAPS_SLOW_RATE     __MSABI_LONG(0x00004004)
+#define MCI_VD_GETDEVCAPS_NORMAL_RATE   __MSABI_LONG(0x00004005)
+
+#define MCI_VD_STEP_FRAMES              __MSABI_LONG(0x00010000)
+#define MCI_VD_STEP_REVERSE             __MSABI_LONG(0x00020000)
+
+#define MCI_VD_ESCAPE_STRING            __MSABI_LONG(0x00000100)
+
+typedef struct tagMCI_VD_PLAY_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwFrom;
+	DWORD   dwTo;
+	DWORD   dwSpeed;
+} MCI_VD_PLAY_PARMS, *LPMCI_VD_PLAY_PARMS;
+
+typedef struct tagMCI_VD_STEP_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwFrames;
+} MCI_VD_STEP_PARMS, *LPMCI_VD_STEP_PARMS;
+
+typedef struct tagMCI_VD_ESCAPE_PARMSA {
+       DWORD_PTR dwCallback;
+	LPCSTR	lpstrCommand;
+} MCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;
+
+typedef struct tagMCI_VD_ESCAPE_PARMSW {
+       DWORD_PTR dwCallback;
+	LPCWSTR	lpstrCommand;
+} MCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_VD_ESCAPE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_VD_ESCAPE_PARMS)
+
+#define MCI_WAVE_OPEN_BUFFER            __MSABI_LONG(0x00010000)
+
+#define MCI_WAVE_SET_FORMATTAG          __MSABI_LONG(0x00010000)
+#define MCI_WAVE_SET_CHANNELS           __MSABI_LONG(0x00020000)
+#define MCI_WAVE_SET_SAMPLESPERSEC      __MSABI_LONG(0x00040000)
+#define MCI_WAVE_SET_AVGBYTESPERSEC     __MSABI_LONG(0x00080000)
+#define MCI_WAVE_SET_BLOCKALIGN         __MSABI_LONG(0x00100000)
+#define MCI_WAVE_SET_BITSPERSAMPLE      __MSABI_LONG(0x00200000)
+
+#define MCI_WAVE_INPUT                  __MSABI_LONG(0x00400000)
+#define MCI_WAVE_OUTPUT                 __MSABI_LONG(0x00800000)
+
+#define MCI_WAVE_STATUS_FORMATTAG       __MSABI_LONG(0x00004001)
+#define MCI_WAVE_STATUS_CHANNELS        __MSABI_LONG(0x00004002)
+#define MCI_WAVE_STATUS_SAMPLESPERSEC   __MSABI_LONG(0x00004003)
+#define MCI_WAVE_STATUS_AVGBYTESPERSEC  __MSABI_LONG(0x00004004)
+#define MCI_WAVE_STATUS_BLOCKALIGN      __MSABI_LONG(0x00004005)
+#define MCI_WAVE_STATUS_BITSPERSAMPLE   __MSABI_LONG(0x00004006)
+#define MCI_WAVE_STATUS_LEVEL           __MSABI_LONG(0x00004007)
+
+#define MCI_WAVE_SET_ANYINPUT           __MSABI_LONG(0x04000000)
+#define MCI_WAVE_SET_ANYOUTPUT          __MSABI_LONG(0x08000000)
+
+#define MCI_WAVE_GETDEVCAPS_INPUTS      __MSABI_LONG(0x00004001)
+#define MCI_WAVE_GETDEVCAPS_OUTPUTS     __MSABI_LONG(0x00004002)
+
+typedef struct tagMCI_WAVE_OPEN_PARMSA {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCSTR		lpstrDeviceType;
+	LPCSTR		lpstrElementName;
+	LPCSTR		lpstrAlias;
+	DWORD   	dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;
+
+typedef struct tagMCI_WAVE_OPEN_PARMSW {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCWSTR		lpstrDeviceType;
+	LPCWSTR		lpstrElementName;
+	LPCWSTR		lpstrAlias;
+	DWORD   	dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_WAVE_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_WAVE_OPEN_PARMS)
+
+typedef struct tagMCI_WAVE_DELETE_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwFrom;
+	DWORD   dwTo;
+} MCI_WAVE_DELETE_PARMS, *LPMCI_WAVE_DELETE_PARMS;
+
+typedef struct tagMCI_WAVE_SET_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD	dwTimeFormat;
+	DWORD	dwAudio;
+	UINT	wInput;
+	UINT	wOutput;
+	UINT	wFormatTag;
+	UINT	nChannels;
+	DWORD	nSamplesPerSec;
+	DWORD	nAvgBytesPerSec;
+	UINT	nBlockAlign;
+	UINT	wBitsPerSample;
+} MCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS;
+
+
+#define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)
+#define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
+#define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
+#define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
+#define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
+
+#define     MCI_SEQ_FORMAT_SONGPTR      0x4001
+#define     MCI_SEQ_FILE                0x4002
+#define     MCI_SEQ_MIDI                0x4003
+#define     MCI_SEQ_SMPTE               0x4004
+#define     MCI_SEQ_NONE                65533
+
+#define MCI_SEQ_STATUS_TEMPO            __MSABI_LONG(0x00004002)
+#define MCI_SEQ_STATUS_PORT             __MSABI_LONG(0x00004003)
+#define MCI_SEQ_STATUS_SLAVE            __MSABI_LONG(0x00004007)
+#define MCI_SEQ_STATUS_MASTER           __MSABI_LONG(0x00004008)
+#define MCI_SEQ_STATUS_OFFSET           __MSABI_LONG(0x00004009)
+#define MCI_SEQ_STATUS_DIVTYPE          __MSABI_LONG(0x0000400A)
+
+#define MCI_SEQ_SET_TEMPO               __MSABI_LONG(0x00010000)
+#define MCI_SEQ_SET_PORT                __MSABI_LONG(0x00020000)
+#define MCI_SEQ_SET_SLAVE               __MSABI_LONG(0x00040000)
+#define MCI_SEQ_SET_MASTER              __MSABI_LONG(0x00080000)
+#define MCI_SEQ_SET_OFFSET              __MSABI_LONG(0x01000000)
+
+typedef struct tagMCI_SEQ_SET_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwTimeFormat;
+	DWORD   dwAudio;
+	DWORD   dwTempo;
+	DWORD   dwPort;
+	DWORD   dwSlave;
+	DWORD   dwMaster;
+	DWORD   dwOffset;
+} MCI_SEQ_SET_PARMS, *LPMCI_SEQ_SET_PARMS;
+
+#define MCI_ANIM_OPEN_WS                __MSABI_LONG(0x00010000)
+#define MCI_ANIM_OPEN_PARENT            __MSABI_LONG(0x00020000)
+#define MCI_ANIM_OPEN_NOSTATIC          __MSABI_LONG(0x00040000)
+
+#define MCI_ANIM_PLAY_SPEED             __MSABI_LONG(0x00010000)
+#define MCI_ANIM_PLAY_REVERSE           __MSABI_LONG(0x00020000)
+#define MCI_ANIM_PLAY_FAST              __MSABI_LONG(0x00040000)
+#define MCI_ANIM_PLAY_SLOW              __MSABI_LONG(0x00080000)
+#define MCI_ANIM_PLAY_SCAN              __MSABI_LONG(0x00100000)
+
+#define MCI_ANIM_STEP_REVERSE           __MSABI_LONG(0x00010000)
+#define MCI_ANIM_STEP_FRAMES            __MSABI_LONG(0x00020000)
+
+#define MCI_ANIM_STATUS_SPEED           __MSABI_LONG(0x00004001)
+#define MCI_ANIM_STATUS_FORWARD         __MSABI_LONG(0x00004002)
+#define MCI_ANIM_STATUS_HWND            __MSABI_LONG(0x00004003)
+#define MCI_ANIM_STATUS_HPAL            __MSABI_LONG(0x00004004)
+#define MCI_ANIM_STATUS_STRETCH         __MSABI_LONG(0x00004005)
+
+#define MCI_ANIM_INFO_TEXT              __MSABI_LONG(0x00010000)
+
+#define MCI_ANIM_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004001)
+#define MCI_ANIM_GETDEVCAPS_FAST_RATE   __MSABI_LONG(0x00004002)
+#define MCI_ANIM_GETDEVCAPS_SLOW_RATE   __MSABI_LONG(0x00004003)
+#define MCI_ANIM_GETDEVCAPS_NORMAL_RATE __MSABI_LONG(0x00004004)
+#define MCI_ANIM_GETDEVCAPS_PALETTES    __MSABI_LONG(0x00004006)
+#define MCI_ANIM_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004007)
+#define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004008)
+
+#define MCI_ANIM_REALIZE_NORM           __MSABI_LONG(0x00010000)
+#define MCI_ANIM_REALIZE_BKGD           __MSABI_LONG(0x00020000)
+
+#define MCI_ANIM_WINDOW_HWND            __MSABI_LONG(0x00010000)
+#define MCI_ANIM_WINDOW_STATE           __MSABI_LONG(0x00040000)
+#define MCI_ANIM_WINDOW_TEXT            __MSABI_LONG(0x00080000)
+#define MCI_ANIM_WINDOW_ENABLE_STRETCH  __MSABI_LONG(0x00100000)
+#define MCI_ANIM_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000)
+
+#define MCI_ANIM_WINDOW_DEFAULT         __MSABI_LONG(0x00000000)
+
+#define MCI_ANIM_RECT                   __MSABI_LONG(0x00010000)
+#define MCI_ANIM_PUT_SOURCE             __MSABI_LONG(0x00020000)
+#define MCI_ANIM_PUT_DESTINATION        __MSABI_LONG(0x00040000)
+
+#define MCI_ANIM_WHERE_SOURCE           __MSABI_LONG(0x00020000)
+#define MCI_ANIM_WHERE_DESTINATION      __MSABI_LONG(0x00040000)
+
+#define MCI_ANIM_UPDATE_HDC             __MSABI_LONG(0x00020000)
+
+typedef struct tagMCI_ANIM_OPEN_PARMSA {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCSTR		lpstrDeviceType;
+	LPCSTR		lpstrElementName;
+	LPCSTR		lpstrAlias;
+	DWORD		dwStyle;
+	HWND		hWndParent;
+} MCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;
+
+typedef struct tagMCI_ANIM_OPEN_PARMSW {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCWSTR		lpstrDeviceType;
+	LPCWSTR		lpstrElementName;
+	LPCWSTR		lpstrAlias;
+	DWORD		dwStyle;
+	HWND		hWndParent;
+} MCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_ANIM_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_ANIM_OPEN_PARMS)
+
+typedef struct tagMCI_ANIM_PLAY_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwFrom;
+	DWORD   dwTo;
+	DWORD   dwSpeed;
+} MCI_ANIM_PLAY_PARMS, *LPMCI_ANIM_PLAY_PARMS;
+
+typedef struct tagMCI_ANIM_STEP_PARMS {
+       DWORD_PTR dwCallback;
+	DWORD   dwFrames;
+} MCI_ANIM_STEP_PARMS, *LPMCI_ANIM_STEP_PARMS;
+
+typedef struct tagMCI_ANIM_WINDOW_PARMSA {
+       DWORD_PTR dwCallback;
+	HWND	hWnd;
+	UINT	nCmdShow;
+	LPCSTR	lpstrText;
+} MCI_ANIM_WINDOW_PARMSA, *LPMCI_ANIM_WINDOW_PARMSA;
+
+typedef struct tagMCI_ANIM_WINDOW_PARMSW {
+       DWORD_PTR dwCallback;
+	HWND	hWnd;
+	UINT	nCmdShow;
+	LPCWSTR	lpstrText;
+} MCI_ANIM_WINDOW_PARMSW, *LPMCI_ANIM_WINDOW_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_ANIM_WINDOW_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_ANIM_WINDOW_PARMS)
+
+typedef struct tagMCI_ANIM_RECT_PARMS {
+       DWORD_PTR dwCallback;
+#ifdef MCI_USE_OFFEXT
+	POINT	ptOffset;
+	POINT	ptExtent;
+#else   /* ifdef MCI_USE_OFFEXT */
+	RECT	rc;
+#endif  /* ifdef MCI_USE_OFFEXT */
+} MCI_ANIM_RECT_PARMS, *LPMCI_ANIM_RECT_PARMS;
+
+
+typedef struct tagMCI_ANIM_UPDATE_PARMS {
+       DWORD_PTR dwCallback;
+	RECT  rc;
+	HDC   hDC;
+} MCI_ANIM_UPDATE_PARMS, *LPMCI_ANIM_UPDATE_PARMS;
+
+
+#define MCI_OVLY_OPEN_WS                __MSABI_LONG(0x00010000)
+#define MCI_OVLY_OPEN_PARENT            __MSABI_LONG(0x00020000)
+
+#define MCI_OVLY_STATUS_HWND            __MSABI_LONG(0x00004001)
+#define MCI_OVLY_STATUS_STRETCH         __MSABI_LONG(0x00004002)
+
+#define MCI_OVLY_INFO_TEXT              __MSABI_LONG(0x00010000)
+
+#define MCI_OVLY_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004001)
+#define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  __MSABI_LONG(0x00004002)
+#define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004003)
+
+#define MCI_OVLY_WINDOW_HWND            __MSABI_LONG(0x00010000)
+#define MCI_OVLY_WINDOW_STATE           __MSABI_LONG(0x00040000)
+#define MCI_OVLY_WINDOW_TEXT            __MSABI_LONG(0x00080000)
+#define MCI_OVLY_WINDOW_ENABLE_STRETCH  __MSABI_LONG(0x00100000)
+#define MCI_OVLY_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000)
+
+#define MCI_OVLY_WINDOW_DEFAULT         __MSABI_LONG(0x00000000)
+
+#define MCI_OVLY_RECT                   __MSABI_LONG(0x00010000)
+#define MCI_OVLY_PUT_SOURCE             __MSABI_LONG(0x00020000)
+#define MCI_OVLY_PUT_DESTINATION        __MSABI_LONG(0x00040000)
+#define MCI_OVLY_PUT_FRAME              __MSABI_LONG(0x00080000)
+#define MCI_OVLY_PUT_VIDEO              __MSABI_LONG(0x00100000)
+
+#define MCI_OVLY_WHERE_SOURCE           __MSABI_LONG(0x00020000)
+#define MCI_OVLY_WHERE_DESTINATION      __MSABI_LONG(0x00040000)
+#define MCI_OVLY_WHERE_FRAME            __MSABI_LONG(0x00080000)
+#define MCI_OVLY_WHERE_VIDEO            __MSABI_LONG(0x00100000)
+
+typedef struct tagMCI_OVLY_OPEN_PARMSA {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCSTR		lpstrDeviceType;
+	LPCSTR		lpstrElementName;
+	LPCSTR		lpstrAlias;
+	DWORD		dwStyle;
+	HWND		hWndParent;
+} MCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;
+
+typedef struct tagMCI_OVLY_OPEN_PARMSW {
+       DWORD_PTR       dwCallback;
+	MCIDEVICEID	wDeviceID;
+	LPCWSTR		lpstrDeviceType;
+	LPCWSTR		lpstrElementName;
+	LPCWSTR		lpstrAlias;
+	DWORD		dwStyle;
+	HWND		hWndParent;
+} MCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_OPEN_PARMS)
+
+typedef struct tagMCI_OVLY_WINDOW_PARMSA {
+       DWORD_PTR dwCallback;
+	HWND	hWnd;
+	UINT	nCmdShow;
+	LPCSTR	lpstrText;
+} MCI_OVLY_WINDOW_PARMSA, *LPMCI_OVLY_WINDOW_PARMSA;
+
+typedef struct tagMCI_OVLY_WINDOW_PARMSW {
+       DWORD_PTR dwCallback;
+	HWND	hWnd;
+	UINT	nCmdShow;
+	LPCWSTR	lpstrText;
+} MCI_OVLY_WINDOW_PARMSW, *LPMCI_OVLY_WINDOW_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_WINDOW_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_WINDOW_PARMS)
+
+typedef struct tagMCI_OVLY_RECT_PARMS {
+       DWORD_PTR dwCallback;
+#ifdef MCI_USE_OFFEXT
+	POINT ptOffset;
+	POINT ptExtent;
+#else   /* ifdef MCI_USE_OFFEXT */
+	RECT  rc;
+#endif  /* ifdef MCI_USE_OFFEXT */
+} MCI_OVLY_RECT_PARMS, *LPMCI_OVLY_RECT_PARMS;
+
+
+typedef struct tagMCI_OVLY_SAVE_PARMSA {
+       DWORD_PTR dwCallback;
+	LPCSTR  lpfilename;
+	RECT  rc;
+} MCI_OVLY_SAVE_PARMSA, *LPMCI_OVLY_SAVE_PARMSA;
+
+typedef struct tagMCI_OVLY_SAVE_PARMSW {
+       DWORD_PTR dwCallback;
+	LPCWSTR  lpfilename;
+	RECT  rc;
+} MCI_OVLY_SAVE_PARMSW, *LPMCI_OVLY_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_SAVE_PARMS)
+
+typedef struct tagMCI_OVLY_LOAD_PARMSA {
+       DWORD_PTR dwCallback;
+	LPCSTR	lpfilename;
+	RECT	rc;
+} MCI_OVLY_LOAD_PARMSA, *LPMCI_OVLY_LOAD_PARMSA;
+
+typedef struct tagMCI_OVLY_LOAD_PARMSW {
+       DWORD_PTR dwCallback;
+	LPCWSTR	lpfilename;
+	RECT	rc;
+} MCI_OVLY_LOAD_PARMSW, *LPMCI_OVLY_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_LOAD_PARMS)
+
+#ifndef NEWTRANSPARENT
+#define NEWTRANSPARENT 3
+#define QUERYROPSUPPORT 40
+#endif
+
+#define SELECTDIB 41
+#define DIBINDEX(n) MAKELONG((n),0x10FF)
+
+#ifndef SC_SCREENSAVE
+#define SC_SCREENSAVE 0xf140
+#endif
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MMSYSTEM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h
new file mode 100644
index 0000000..8903a6b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2006 Dmitry Timoshkov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MPRAPI_H
+#define __WINE_MPRAPI_H
+
+#include <lmcons.h>
+#include <ras.h>
+#include <in6addr.h>
+#include <wincrypt.h>
+
+#define MAX_DEVICE_NAME                 128
+#define MAX_DEVICETYPE_NAME              16
+#define MAX_INTERFACE_NAME_LEN          256
+#define MAX_MEDIA_NAME                   16
+#define MAX_PHONE_NUMBER_LEN            128
+#define MAX_PORT_NAME                    16
+#define MAX_TRANSPORT_NAME_LEN           40
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL APIENTRY MprAdminIsServiceRunning(LPWSTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MPRAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h
new file mode 100644
index 0000000..ac87e81
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h
@@ -0,0 +1,74 @@
+/*
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given:
+ * The w64 mingw-runtime package and its code is distributed in the hope that it
+ * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR
+ * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to
+ * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _MPRERROR_H_
+#define _MPRERROR_H_
+
+#define ROUTEBASE 900
+#define SUCCESS 0
+
+#define ERROR_ROUTER_STOPPED (ROUTEBASE+0)
+#define ERROR_ALREADY_CONNECTED (ROUTEBASE+1)
+#define ERROR_UNKNOWN_PROTOCOL_ID (ROUTEBASE+2)
+#define ERROR_DDM_NOT_RUNNING (ROUTEBASE+3)
+#define ERROR_INTERFACE_ALREADY_EXISTS (ROUTEBASE+4)
+#define ERROR_NO_SUCH_INTERFACE (ROUTEBASE+5)
+#define ERROR_INTERFACE_NOT_CONNECTED (ROUTEBASE+6)
+#define ERROR_PROTOCOL_STOP_PENDING (ROUTEBASE+7)
+#define ERROR_INTERFACE_CONNECTED (ROUTEBASE+8)
+#define ERROR_NO_INTERFACE_CREDENTIALS_SET (ROUTEBASE+9)
+#define ERROR_ALREADY_CONNECTING (ROUTEBASE+10)
+#define ERROR_UPDATE_IN_PROGRESS (ROUTEBASE+11)
+#define ERROR_INTERFACE_CONFIGURATION (ROUTEBASE+12)
+#define ERROR_NOT_CLIENT_PORT (ROUTEBASE+13)
+#define ERROR_NOT_ROUTER_PORT (ROUTEBASE+14)
+#define ERROR_CLIENT_INTERFACE_ALREADY_EXISTS (ROUTEBASE+15)
+#define ERROR_INTERFACE_DISABLED (ROUTEBASE+16)
+#define ERROR_AUTH_PROTOCOL_REJECTED (ROUTEBASE+17)
+#define ERROR_NO_AUTH_PROTOCOL_AVAILABLE (ROUTEBASE+18)
+#define ERROR_PEER_REFUSED_AUTH (ROUTEBASE+19)
+#define ERROR_REMOTE_NO_DIALIN_PERMISSION (ROUTEBASE+20)
+#define ERROR_REMOTE_PASSWD_EXPIRED (ROUTEBASE+21)
+#define ERROR_REMOTE_ACCT_DISABLED (ROUTEBASE+22)
+#define ERROR_REMOTE_RESTRICTED_LOGON_HOURS (ROUTEBASE+23)
+#define ERROR_REMOTE_AUTHENTICATION_FAILURE (ROUTEBASE+24)
+#define ERROR_INTERFACE_HAS_NO_DEVICES (ROUTEBASE+25)
+#define ERROR_IDLE_DISCONNECTED (ROUTEBASE+26)
+#define ERROR_INTERFACE_UNREACHABLE (ROUTEBASE+27)
+#define ERROR_SERVICE_IS_PAUSED (ROUTEBASE+28)
+#define ERROR_INTERFACE_DISCONNECTED (ROUTEBASE+29)
+#define ERROR_AUTH_SERVER_TIMEOUT (ROUTEBASE+30)
+#define ERROR_PORT_LIMIT_REACHED (ROUTEBASE+31)
+#define ERROR_PPP_SESSION_TIMEOUT (ROUTEBASE+32)
+#define ERROR_MAX_LAN_INTERFACE_LIMIT (ROUTEBASE+33)
+#define ERROR_MAX_WAN_INTERFACE_LIMIT (ROUTEBASE+34)
+#define ERROR_MAX_CLIENT_INTERFACE_LIMIT (ROUTEBASE+35)
+#define ERROR_BAP_DISCONNECTED (ROUTEBASE+36)
+#define ERROR_USER_LIMIT (ROUTEBASE+37)
+#define ERROR_NO_RADIUS_SERVERS (ROUTEBASE+38)
+#define ERROR_INVALID_RADIUS_RESPONSE (ROUTEBASE+39)
+#define ERROR_DIALIN_HOURS_RESTRICTION (ROUTEBASE+40)
+#define ERROR_ALLOWED_PORT_TYPE_RESTRICTION (ROUTEBASE+41)
+#define ERROR_AUTH_PROTOCOL_RESTRICTION (ROUTEBASE+42)
+#define ERROR_BAP_REQUIRED (ROUTEBASE+43)
+#define ERROR_DIALOUT_HOURS_RESTRICTION (ROUTEBASE+44)
+#define ERROR_ROUTER_CONFIG_INCOMPATIBLE (ROUTEBASE+45)
+#define WARNING_NO_MD5_MIGRATION (ROUTEBASE+46)
+#define ERROR_PROTOCOL_ALREADY_INSTALLED (ROUTEBASE+48)
+#define ERROR_INVALID_SIGNATURE_LENGTH (ROUTEBASE+49)
+#define ERROR_INVALID_SIGNATURE (ROUTEBASE+50)
+#define ERROR_NO_SIGNATURE (ROUTEBASE+51)
+#define ERROR_INVALID_PACKET_LENGTH_OR_ID (ROUTEBASE+52)
+#define ERROR_INVALID_ATTRIBUTE_LENGTH (ROUTEBASE+53)
+#define ERROR_INVALID_PACKET (ROUTEBASE+54)
+#define ERROR_AUTHENTICATOR_MISMATCH (ROUTEBASE+55)
+#define ROUTEBASEEND (ROUTEBASE+56)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h
new file mode 100644
index 0000000..5913f04
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h
@@ -0,0 +1,801 @@
+/*
+ * Declarations for MSACM
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSACM_H
+#define __WINE_MSACM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#include <pshpack1.h>
+
+#define ACMAPI              WINAPI
+
+/***********************************************************************
+ * Defines/Enums
+ */
+#define ACMERR_BASE        512
+#define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0)
+#define ACMERR_BUSY        (ACMERR_BASE + 1)
+#define ACMERR_UNPREPARED  (ACMERR_BASE + 2)
+#define ACMERR_CANCELED    (ACMERR_BASE + 3)
+
+#define MM_ACM_OPEN  MM_STREAM_OPEN
+#define MM_ACM_CLOSE MM_STREAM_CLOSE
+#define MM_ACM_DONE  MM_STREAM_DONE
+
+#define ACM_DRIVERADDF_NAME       __MSABI_LONG(0x00000001)
+#define ACM_DRIVERADDF_FUNCTION   __MSABI_LONG(0x00000003)
+#define ACM_DRIVERADDF_NOTIFYHWND __MSABI_LONG(0x00000004)
+#define ACM_DRIVERADDF_TYPEMASK   __MSABI_LONG(0x00000007)
+#define ACM_DRIVERADDF_LOCAL      __MSABI_LONG(0x00000000)
+#define ACM_DRIVERADDF_GLOBAL     __MSABI_LONG(0x00000008)
+
+#define ACMDRIVERDETAILS_SHORTNAME_CHARS  32
+#define ACMDRIVERDETAILS_LONGNAME_CHARS  128
+#define ACMDRIVERDETAILS_COPYRIGHT_CHARS  80
+#define ACMDRIVERDETAILS_LICENSING_CHARS 128
+#define ACMDRIVERDETAILS_FEATURES_CHARS  512
+
+#define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')
+#define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED  mmioFOURCC('\0', '\0', '\0', '\0')
+
+#define ACMDRIVERDETAILS_SUPPORTF_CODEC     __MSABI_LONG(0x00000001)
+#define ACMDRIVERDETAILS_SUPPORTF_CONVERTER __MSABI_LONG(0x00000002)
+#define ACMDRIVERDETAILS_SUPPORTF_FILTER    __MSABI_LONG(0x00000004)
+#define ACMDRIVERDETAILS_SUPPORTF_HARDWARE  __MSABI_LONG(0x00000008)
+#define ACMDRIVERDETAILS_SUPPORTF_ASYNC     __MSABI_LONG(0x00000010)
+#define ACMDRIVERDETAILS_SUPPORTF_LOCAL     __MSABI_LONG(0x40000000)
+#define ACMDRIVERDETAILS_SUPPORTF_DISABLED  __MSABI_LONG(0x80000000)
+
+#define ACM_DRIVERENUMF_NOLOCAL  __MSABI_LONG(0x40000000)
+#define ACM_DRIVERENUMF_DISABLED __MSABI_LONG(0x80000000)
+
+#define ACM_DRIVERPRIORITYF_ENABLE    __MSABI_LONG(0x00000001)
+#define ACM_DRIVERPRIORITYF_DISABLE   __MSABI_LONG(0x00000002)
+#define ACM_DRIVERPRIORITYF_ABLEMASK  __MSABI_LONG(0x00000003)
+#define ACM_DRIVERPRIORITYF_BEGIN     __MSABI_LONG(0x00010000)
+#define ACM_DRIVERPRIORITYF_END       __MSABI_LONG(0x00020000)
+#define ACM_DRIVERPRIORITYF_DEFERMASK __MSABI_LONG(0x00030000)
+
+#define MM_ACM_FILTERCHOOSE 0x8000
+
+#define FILTERCHOOSE_MESSAGE          0
+#define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0)
+#define FILTERCHOOSE_FILTER_VERIFY    (FILTERCHOOSE_MESSAGE+1)
+#define FILTERCHOOSE_CUSTOM_VERIFY    (FILTERCHOOSE_MESSAGE+2)
+
+#define ACMFILTERCHOOSE_STYLEF_SHOWHELP             __MSABI_LONG(0x00000004)
+#define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK           __MSABI_LONG(0x00000008)
+#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE       __MSABI_LONG(0x00000010)
+#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)
+#define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT   __MSABI_LONG(0x00000040)
+#define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP          __MSABI_LONG(0x00000080)
+
+#define ACMFILTERDETAILS_FILTER_CHARS 128
+
+#define ACM_FILTERDETAILSF_INDEX     __MSABI_LONG(0x00000000)
+#define ACM_FILTERDETAILSF_FILTER    __MSABI_LONG(0x00000001)
+#define ACM_FILTERDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
+
+#define ACM_FILTERTAGDETAILSF_INDEX       __MSABI_LONG(0x00000000)
+#define ACM_FILTERTAGDETAILSF_FILTERTAG   __MSABI_LONG(0x00000001)
+#define ACM_FILTERTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002)
+#define ACM_FILTERTAGDETAILSF_QUERYMASK   __MSABI_LONG(0x0000000F)
+
+#define ACM_FILTERENUMF_DWFILTERTAG __MSABI_LONG(0x00010000)
+
+#define ACMHELPMSGSTRINGA       "acmchoose_help"
+#if defined(__GNUC__)
+# define ACMHELPMSGSTRINGW (const WCHAR []){ 'a','c','m', \
+  'c','h','o','o','s','e','_','h','e','l','p',0 }
+#elif defined(_MSC_VER)
+# define ACMHELPMSGSTRINGW      L"acmchoose_help"
+#else
+static const WCHAR ACMHELPMSGSTRINGW[] = { 'a','c','m',
+  'c','h','o','o','s','e','_','h','e','l','p',0 };
+#endif
+#define ACMHELPMSGSTRING WINELIB_NAME_AW(ACMHELPMSGSTRING)
+
+#define ACMHELPMSGCONTEXTMENUA  "acmchoose_contextmenu"
+#if defined(__GNUC__)
+# define ACMHELPMSGCONTEXTMENUW (const WCHAR []){ 'a','c','m', \
+  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 }
+#elif defined(_MSC_VER)
+# define ACMHELPMSGCONTEXTMENUW L"acmchoose_contextmenu"
+#else
+static const WCHAR ACMHELPMSGCONTEXTMENUW[] = { 'a','c','m',
+  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 };
+#endif
+#define ACMHELPMSGCONTEXTMENU WINELIB_NAME_AW(ACMHELPMSGCONTEXTMENU)
+
+#define ACMHELPMSGCONTEXTHELPA  "acmchoose_contexthelp"
+#if defined(__GNUC__)
+# define ACMHELPMSGCONTEXTHELPW (const WCHAR []){ 'a','c','m', \
+  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 }
+#elif defined(_MSC_VER)
+# define ACMHELPMSGCONTEXTHELPW L"acmchoose_contexthelp"
+#else
+static const WCHAR ACMHELPMSGCONTEXTHELPW[] = { 'a','c','m',
+  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 };
+#endif
+#define ACMHELPMSGCONTEXTHELP WINELIB_NAME_AW(ACMHELPMSGCONTEXTHELP)
+
+#define MM_ACM_FORMATCHOOSE 0x8000
+
+#define FORMATCHOOSE_MESSAGE          0
+#define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0)
+#define FORMATCHOOSE_FORMAT_VERIFY    (FORMATCHOOSE_MESSAGE+1)
+#define FORMATCHOOSE_CUSTOM_VERIFY    (FORMATCHOOSE_MESSAGE+2)
+
+#define ACMFORMATCHOOSE_STYLEF_SHOWHELP             __MSABI_LONG(0x00000004)
+#define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK           __MSABI_LONG(0x00000008)
+#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE       __MSABI_LONG(0x00000010)
+#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)
+#define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT      __MSABI_LONG(0x00000040)
+#define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP          __MSABI_LONG(0x00000080)
+
+#define ACMFORMATDETAILS_FORMAT_CHARS   128
+
+#define ACM_FORMATDETAILSF_INDEX     __MSABI_LONG(0x00000000)
+#define ACM_FORMATDETAILSF_FORMAT    __MSABI_LONG(0x00000001)
+#define ACM_FORMATDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACM_FORMATENUMF_WFORMATTAG     __MSABI_LONG(0x00010000)
+#define ACM_FORMATENUMF_NCHANNELS      __MSABI_LONG(0x00020000)
+#define ACM_FORMATENUMF_NSAMPLESPERSEC __MSABI_LONG(0x00040000)
+#define ACM_FORMATENUMF_WBITSPERSAMPLE __MSABI_LONG(0x00080000)
+#define ACM_FORMATENUMF_CONVERT        __MSABI_LONG(0x00100000)
+#define ACM_FORMATENUMF_SUGGEST        __MSABI_LONG(0x00200000)
+#define ACM_FORMATENUMF_HARDWARE       __MSABI_LONG(0x00400000)
+#define ACM_FORMATENUMF_INPUT          __MSABI_LONG(0x00800000)
+#define ACM_FORMATENUMF_OUTPUT         __MSABI_LONG(0x01000000)
+
+#define ACM_FORMATSUGGESTF_WFORMATTAG     __MSABI_LONG(0x00010000)
+#define ACM_FORMATSUGGESTF_NCHANNELS      __MSABI_LONG(0x00020000)
+#define ACM_FORMATSUGGESTF_NSAMPLESPERSEC __MSABI_LONG(0x00040000)
+#define ACM_FORMATSUGGESTF_WBITSPERSAMPLE __MSABI_LONG(0x00080000)
+#define ACM_FORMATSUGGESTF_TYPEMASK       __MSABI_LONG(0x00FF0000)
+
+#define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
+
+#define ACM_FORMATTAGDETAILSF_INDEX       __MSABI_LONG(0x00000000)
+#define ACM_FORMATTAGDETAILSF_FORMATTAG   __MSABI_LONG(0x00000001)
+#define ACM_FORMATTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002)
+#define ACM_FORMATTAGDETAILSF_QUERYMASK   __MSABI_LONG(0x0000000F)
+
+#define ACM_METRIC_COUNT_DRIVERS            1
+#define ACM_METRIC_COUNT_CODECS             2
+#define ACM_METRIC_COUNT_CONVERTERS         3
+#define ACM_METRIC_COUNT_FILTERS            4
+#define ACM_METRIC_COUNT_DISABLED           5
+#define ACM_METRIC_COUNT_HARDWARE           6
+#define ACM_METRIC_COUNT_LOCAL_DRIVERS     20
+#define ACM_METRIC_COUNT_LOCAL_CODECS      21
+#define ACM_METRIC_COUNT_LOCAL_CONVERTERS  22
+#define ACM_METRIC_COUNT_LOCAL_FILTERS     23
+#define ACM_METRIC_COUNT_LOCAL_DISABLED    24
+#define ACM_METRIC_HARDWARE_WAVE_INPUT     30
+#define ACM_METRIC_HARDWARE_WAVE_OUTPUT    31
+#define ACM_METRIC_MAX_SIZE_FORMAT         50
+#define ACM_METRIC_MAX_SIZE_FILTER         51
+#define ACM_METRIC_DRIVER_SUPPORT         100
+#define ACM_METRIC_DRIVER_PRIORITY        101
+
+#define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004
+#define ACM_STREAMCONVERTF_START      0x00000010
+#define ACM_STREAMCONVERTF_END        0x00000020
+
+#define ACMSTREAMHEADER_STATUSF_DONE     __MSABI_LONG(0x00010000)
+#define ACMSTREAMHEADER_STATUSF_PREPARED __MSABI_LONG(0x00020000)
+#define ACMSTREAMHEADER_STATUSF_INQUEUE  __MSABI_LONG(0x00100000)
+
+#define ACM_STREAMOPENF_QUERY       0x00000001
+#define ACM_STREAMOPENF_ASYNC       0x00000002
+#define ACM_STREAMOPENF_NONREALTIME 0x00000004
+
+#define ACM_STREAMSIZEF_SOURCE      __MSABI_LONG(0x00000000)
+#define ACM_STREAMSIZEF_DESTINATION __MSABI_LONG(0x00000001)
+#define ACM_STREAMSIZEF_QUERYMASK   __MSABI_LONG(0x0000000F)
+
+#define ACMDM_USER                  (DRV_USER + 0x0000)
+#define ACMDM_RESERVED_LOW          (DRV_USER + 0x2000)
+#define ACMDM_RESERVED_HIGH         (DRV_USER + 0x2FFF)
+
+#define ACMDM_BASE                  ACMDM_RESERVED_LOW
+
+#define ACMDM_DRIVER_ABOUT          (ACMDM_BASE + 11)
+
+/* handles */
+
+DECLARE_HANDLE(HACMDRIVERID);
+DECLARE_HANDLE(HACMDRIVER);
+DECLARE_HANDLE(HACMSTREAM);
+DECLARE_HANDLE(HACMOBJ);
+typedef HACMDRIVERID *PHACMDRIVERID, *LPHACMDRIVERID;
+typedef HACMDRIVER   *PHACMDRIVER, *LPHACMDRIVER;
+typedef HACMSTREAM   *PHACMSTREAM, *LPHACMSTREAM;
+typedef HACMOBJ      *PHACMOBJ, *LPHACMOBJ;
+
+/***********************************************************************
+ * Callbacks
+ */
+
+typedef BOOL (CALLBACK *ACMDRIVERENUMCB)(
+  HACMDRIVERID hadid, DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+#define	ACMFILTERCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFILTERCHOOSEHOOKPROC)
+
+typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+
+typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(
+  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+#define	ACMFORMATCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFORMATCHOOSEHOOKPROC)
+
+/***********************************************************************
+ * Structures
+ */
+
+typedef struct _ACMDRIVERDETAILSA
+{
+  DWORD    cbStruct;
+
+  FOURCC   fccType;
+  FOURCC   fccComp;
+
+  WORD     wMid;
+  WORD     wPid;
+
+  DWORD    vdwACM;
+  DWORD    vdwDriver;
+
+  DWORD    fdwSupport;
+  DWORD    cFormatTags;
+  DWORD    cFilterTags;
+
+  HICON  hicon;
+
+  CHAR     szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+  CHAR     szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+  CHAR     szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+  CHAR     szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+  CHAR     szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+} ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA;
+
+typedef struct _ACMDRIVERDETAILSW
+{
+  DWORD    cbStruct;
+
+  FOURCC   fccType;
+  FOURCC   fccComp;
+
+  WORD     wMid;
+  WORD     wPid;
+
+  DWORD    vdwACM;
+  DWORD    vdwDriver;
+
+  DWORD    fdwSupport;
+  DWORD    cFormatTags;
+  DWORD    cFilterTags;
+
+  HICON  hicon;
+
+  WCHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+  WCHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+  WCHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+  WCHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+  WCHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+} ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMDRIVERDETAILS)
+DECL_WINELIB_TYPE_AW(PACMDRIVERDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMDRIVERDETAILS)
+
+typedef struct _ACMFILTERCHOOSEA
+{
+  DWORD         cbStruct;
+  DWORD         fdwStyle;
+
+  HWND        hwndOwner;
+
+  PWAVEFILTER   pwfltr;
+  DWORD         cbwfltr;
+
+  LPCSTR        pszTitle;
+
+  CHAR          szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+  CHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+  LPSTR         pszName;
+  DWORD         cchName;
+
+  DWORD         fdwEnum;
+  PWAVEFILTER   pwfltrEnum;
+
+  HINSTANCE   hInstance;
+  LPCSTR        pszTemplateName;
+  LPARAM        lCustData;
+  ACMFILTERCHOOSEHOOKPROCA pfnHook;
+} ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, *LPACMFILTERCHOOSEA;
+
+typedef struct _ACMFILTERCHOOSEW
+{
+  DWORD         cbStruct;
+  DWORD         fdwStyle;
+
+  HWND        hwndOwner;
+
+  PWAVEFILTER   pwfltr;
+  DWORD         cbwfltr;
+
+  LPCWSTR       pszTitle;
+
+  WCHAR         szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+  WCHAR         szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+  LPWSTR        pszName;
+  DWORD         cchName;
+
+  DWORD         fdwEnum;
+  PWAVEFILTER   pwfltrEnum;
+
+  HINSTANCE   hInstance;
+  LPCWSTR       pszTemplateName;
+  LPARAM        lCustData;
+  ACMFILTERCHOOSEHOOKPROCW pfnHook;
+} ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, *LPACMFILTERCHOOSEW;
+
+DECL_WINELIB_TYPE_AW(ACMFILTERCHOOSE)
+DECL_WINELIB_TYPE_AW(PACMFILTERCHOOSE)
+DECL_WINELIB_TYPE_AW(LPACMFILTERCHOOSE)
+
+typedef struct _ACMFILTERDETAILSA
+{
+  DWORD           cbStruct;
+  DWORD           dwFilterIndex;
+  DWORD           dwFilterTag;
+  DWORD           fdwSupport;
+  PWAVEFILTER     pwfltr;
+  DWORD           cbwfltr;
+  CHAR            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+} ACMFILTERDETAILSA, *PACMFILTERDETAILSA, *LPACMFILTERDETAILSA;
+
+typedef struct _ACMFILTERDETAILSW
+{
+  DWORD          cbStruct;
+  DWORD          dwFilterIndex;
+  DWORD          dwFilterTag;
+  DWORD          fdwSupport;
+  PWAVEFILTER    pwfltr;
+  DWORD          cbwfltr;
+  WCHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+} ACMFILTERDETAILSW, *PACMFILTERDETAILSW, *LPACMFILTERDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFILTERDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFILTERDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFILTERDETAILS)
+
+typedef struct _ACMFILTERTAGDETAILSA
+{
+  DWORD cbStruct;
+  DWORD dwFilterTagIndex;
+  DWORD dwFilterTag;
+  DWORD cbFilterSize;
+  DWORD fdwSupport;
+  DWORD cStandardFilters;
+  CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+} ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, *LPACMFILTERTAGDETAILSA;
+
+typedef struct _ACMFILTERTAGDETAILSW
+{
+  DWORD cbStruct;
+  DWORD dwFilterTagIndex;
+  DWORD dwFilterTag;
+  DWORD cbFilterSize;
+  DWORD fdwSupport;
+  DWORD cStandardFilters;
+  WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+} ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, *LPACMFILTERTAGDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFILTERTAGDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFILTERTAGDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFILTERTAGDETAILS)
+
+typedef struct _ACMFORMATCHOOSEA
+{
+  DWORD           cbStruct;
+  DWORD           fdwStyle;
+
+  HWND          hwndOwner;
+
+  PWAVEFORMATEX   pwfx;
+  DWORD           cbwfx;
+  LPCSTR          pszTitle;
+
+  CHAR            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+  CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+
+  LPSTR           pszName;
+  DWORD           cchName;
+
+  DWORD           fdwEnum;
+  PWAVEFORMATEX   pwfxEnum;
+
+  HINSTANCE     hInstance;
+  LPCSTR          pszTemplateName;
+  LPARAM          lCustData;
+  ACMFORMATCHOOSEHOOKPROCA pfnHook;
+} ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, *LPACMFORMATCHOOSEA;
+
+typedef struct _ACMFORMATCHOOSEW
+{
+  DWORD           cbStruct;
+  DWORD           fdwStyle;
+
+  HWND          hwndOwner;
+
+  PWAVEFORMATEX   pwfx;
+  DWORD           cbwfx;
+  LPCWSTR         pszTitle;
+
+  WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+  WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+
+  LPWSTR          pszName;
+  DWORD           cchName;
+
+  DWORD           fdwEnum;
+  LPWAVEFORMATEX  pwfxEnum;
+
+  HINSTANCE     hInstance;
+  LPCWSTR         pszTemplateName;
+  LPARAM          lCustData;
+  ACMFORMATCHOOSEHOOKPROCW pfnHook;
+} ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, *LPACMFORMATCHOOSEW;
+
+DECL_WINELIB_TYPE_AW(ACMFORMATCHOOSE)
+DECL_WINELIB_TYPE_AW(PACMFORMATCHOOSE)
+DECL_WINELIB_TYPE_AW(LPACMFORMATCHOOSE)
+
+typedef struct _ACMFORMATDETAILSA
+{
+  DWORD           cbStruct;
+  DWORD           dwFormatIndex;
+  DWORD           dwFormatTag;
+  DWORD           fdwSupport;
+  PWAVEFORMATEX   pwfx;
+  DWORD           cbwfx;
+  CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+} ACMFORMATDETAILSA, *PACMFORMATDETAILSA, *LPACMFORMATDETAILSA;
+
+typedef struct _ACMFORMATDETAILSW
+{
+    DWORD           cbStruct;
+    DWORD           dwFormatIndex;
+    DWORD           dwFormatTag;
+    DWORD           fdwSupport;
+    PWAVEFORMATEX   pwfx;
+    DWORD           cbwfx;
+    WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+} ACMFORMATDETAILSW, *PACMFORMATDETAILSW, *LPACMFORMATDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFORMATDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFORMATDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFORMATDETAILS)
+
+typedef struct _ACMFORMATTAGDETAILSA
+{
+  DWORD cbStruct;
+  DWORD dwFormatTagIndex;
+  DWORD dwFormatTag;
+  DWORD cbFormatSize;
+  DWORD fdwSupport;
+  DWORD cStandardFormats;
+  CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+} ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA;
+
+typedef struct _ACMFORMATTAGDETAILSW
+{
+  DWORD cbStruct;
+  DWORD dwFormatTagIndex;
+  DWORD dwFormatTag;
+  DWORD cbFormatSize;
+  DWORD fdwSupport;
+  DWORD cStandardFormats;
+  WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+} ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFORMATTAGDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFORMATTAGDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFORMATTAGDETAILS)
+
+#ifdef _WIN64
+#  define _ACMSTREAMHEADERRESERVE 15
+#else
+#  define _ACMSTREAMHEADERRESERVE 10
+#endif
+
+typedef struct _ACMSTREAMHEADER
+{
+  DWORD     cbStruct;
+  DWORD     fdwStatus;
+  DWORD_PTR dwUser;
+  LPBYTE    pbSrc;
+  DWORD     cbSrcLength;
+  DWORD     cbSrcLengthUsed;
+  DWORD_PTR dwSrcUser;
+  LPBYTE    pbDst;
+  DWORD     cbDstLength;
+  DWORD     cbDstLengthUsed;
+  DWORD_PTR dwDstUser;
+  DWORD     dwReservedDriver[_ACMSTREAMHEADERRESERVE];
+} ACMSTREAMHEADER, *PACMSTREAMHEADER, *LPACMSTREAMHEADER;
+
+#undef _ACMSTREAMHEADERRESERVE
+
+/***********************************************************************
+ * Callbacks 2
+ */
+
+typedef BOOL (CALLBACK *ACMFILTERENUMCBA)(
+  HACMDRIVERID hadid, PACMFILTERDETAILSA pafd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFILTERENUMCBW)(
+  HACMDRIVERID hadid, PACMFILTERDETAILSW pafd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFILTERENUMCB WINELIB_NAME_AW(ACMFILTERENUMCB)
+
+typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)(
+  HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)(
+  HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFILTERTAGENUMCB WINELIB_NAME_AW(ACMFILTERTAGENUMCB)
+
+typedef BOOL (CALLBACK *ACMFORMATENUMCBA)(
+  HACMDRIVERID hadid, PACMFORMATDETAILSA pafd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFORMATENUMCBW)(
+  HACMDRIVERID hadid, PACMFORMATDETAILSW pafd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFORMATENUMCB WINELIB_NAME_AW(ACMFORMATENUMCB)
+
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)(
+  HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)(
+  HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd,
+  DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFORMATTAGENUMCB WINELIB_NAME_AW(ACMFORMATTAGENUMCB)
+
+/***********************************************************************
+ * Functions - Win32
+ */
+
+MMRESULT WINAPI acmDriverAddA(
+  PHACMDRIVERID phadid, HINSTANCE hinstModule,
+  LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
+);
+MMRESULT WINAPI acmDriverAddW(
+  PHACMDRIVERID phadid, HINSTANCE hinstModule,
+  LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
+);
+#define acmDriverAdd WINELIB_NAME_AW(acmDriverAdd)
+
+MMRESULT WINAPI acmDriverClose(
+  HACMDRIVER had, DWORD fdwClose
+);
+MMRESULT WINAPI acmDriverDetailsA(
+  HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmDriverDetailsW(
+  HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails
+);
+#define acmDriverDetails WINELIB_NAME_AW(acmDriverDetails)
+
+MMRESULT WINAPI acmDriverEnum(
+  ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmDriverID(
+  HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID
+);
+LRESULT WINAPI acmDriverMessage(
+  HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2
+);
+MMRESULT WINAPI acmDriverOpen(
+  PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen
+);
+MMRESULT WINAPI acmDriverPriority(
+  HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority
+);
+MMRESULT WINAPI acmDriverRemove(
+  HACMDRIVERID hadid, DWORD fdwRemove
+);
+MMRESULT WINAPI acmFilterChooseA(
+  PACMFILTERCHOOSEA pafltrc
+);
+MMRESULT WINAPI acmFilterChooseW(
+  PACMFILTERCHOOSEW pafltrc
+);
+#define acmFilterChoose WINELIB_NAME_AW(acmFilterChoose)
+
+MMRESULT WINAPI acmFilterDetailsA(
+  HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFilterDetailsW(
+  HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails
+);
+#define acmFilterDetails WINELIB_NAME_AW(acmFilterDetails)
+
+MMRESULT WINAPI acmFilterEnumA(
+  HACMDRIVER had, PACMFILTERDETAILSA pafd,
+  ACMFILTERENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFilterEnumW(
+  HACMDRIVER had, PACMFILTERDETAILSW pafd,
+  ACMFILTERENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFilterEnum WINELIB_NAME_AW(acmFilterEnum)
+
+MMRESULT WINAPI acmFilterTagDetailsA(
+  HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFilterTagDetailsW(
+  HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails
+);
+#define acmFilterTagDetails WINELIB_NAME_AW(acmFilterTagDetails)
+
+MMRESULT WINAPI acmFilterTagEnumA(
+  HACMDRIVER had, PACMFILTERTAGDETAILSA paftd,
+  ACMFILTERTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFilterTagEnumW(
+  HACMDRIVER had, PACMFILTERTAGDETAILSW paftd,
+  ACMFILTERTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFilterTagEnum WINELIB_NAME_AW(acmFilterTagEnum)
+
+MMRESULT WINAPI acmFormatChooseA(
+  PACMFORMATCHOOSEA pafmtc
+);
+MMRESULT WINAPI acmFormatChooseW(
+  PACMFORMATCHOOSEW pafmtc
+);
+#define acmFormatChoose WINELIB_NAME_AW(acmFormatChoose)
+
+MMRESULT WINAPI acmFormatDetailsA(
+  HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFormatDetailsW(
+  HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails
+);
+#define acmFormatDetails WINELIB_NAME_AW(acmFormatDetails)
+
+MMRESULT WINAPI acmFormatEnumA(
+  HACMDRIVER had, PACMFORMATDETAILSA pafd,
+  ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFormatEnumW(
+  HACMDRIVER had, PACMFORMATDETAILSW pafd,
+  ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance,  DWORD fdwEnum
+);
+#define acmFormatEnum WINELIB_NAME_AW(acmFormatEnum)
+
+MMRESULT WINAPI acmFormatSuggest(
+  HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,
+  DWORD cbwfxDst, DWORD fdwSuggest
+);
+MMRESULT WINAPI acmFormatTagDetailsA(
+  HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFormatTagDetailsW(
+  HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails
+);
+#define acmFormatTagDetails WINELIB_NAME_AW(acmFormatTagDetails)
+
+MMRESULT WINAPI acmFormatTagEnumA(
+  HACMDRIVER had, PACMFORMATTAGDETAILSA paftd,
+  ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFormatTagEnumW(
+  HACMDRIVER had, PACMFORMATTAGDETAILSW paftd,
+  ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFormatTagEnum WINELIB_NAME_AW(acmFormatTagEnum)
+
+DWORD WINAPI acmGetVersion(void
+);
+MMRESULT WINAPI acmMetrics(
+  HACMOBJ hao, UINT  uMetric, LPVOID  pMetric
+);
+MMRESULT WINAPI acmStreamClose(
+  HACMSTREAM has, DWORD fdwClose
+);
+MMRESULT WINAPI acmStreamConvert(
+  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert
+);
+MMRESULT WINAPI acmStreamMessage(
+  HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2
+);
+MMRESULT WINAPI acmStreamOpen(
+  PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
+  PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD_PTR dwCallback,
+  DWORD_PTR dwInstance, DWORD fdwOpen
+);
+MMRESULT WINAPI acmStreamPrepareHeader(
+  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare
+);
+MMRESULT WINAPI acmStreamReset(
+  HACMSTREAM has, DWORD fdwReset
+);
+MMRESULT WINAPI acmStreamSize(
+  HACMSTREAM has, DWORD cbInput,
+  LPDWORD pdwOutputBytes, DWORD fdwSize
+);
+MMRESULT WINAPI acmStreamUnprepareHeader(
+  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare
+);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_MSACM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h
new file mode 100644
index 0000000..bac72d2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h
@@ -0,0 +1,45 @@
+/*
+ * definitions for MSACM dialog boxes
+ *
+ * Copyright (C) 2001 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define DLG_ACMFORMATCHOOSE_ID              70
+#define IDD_ACMFORMATCHOOSE_BTN_HELP        9
+#define IDD_ACMFORMATCHOOSE_CMB_CUSTOM      100
+#define IDD_ACMFORMATCHOOSE_CMB_FORMATTAG   101
+#define IDD_ACMFORMATCHOOSE_CMB_FORMAT      102
+#define IDD_ACMFORMATCHOOSE_BTN_SETNAME     103
+#define IDD_ACMFORMATCHOOSE_BTN_DELNAME     104
+
+#define DLG_ACMFILTERCHOOSE_ID              71
+#define IDD_ACMFILTERCHOOSE_BTN_HELP        9
+#define IDD_ACMFILTERCHOOSE_CMB_CUSTOM      100
+#define IDD_ACMFILTERCHOOSE_CMB_FILTERTAG   101
+#define IDD_ACMFILTERCHOOSE_CMB_FILTER      102
+#define IDD_ACMFILTERCHOOSE_BTN_SETNAME     103
+#define IDD_ACMFILTERCHOOSE_BTN_DELNAME     104
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h
new file mode 100644
index 0000000..50a3118
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h
@@ -0,0 +1,168 @@
+/*
+ * Declarations for MSACM driver
+ *
+ * Copyright 1998 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSACMDRV_H
+#define __WINE_MSACMDRV_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <mmsystem.h>
+#include <mmreg.h>
+#include <msacm.h>
+
+/***********************************************************************
+ * Types
+ */
+
+/***********************************************************************
+ * Defines/Enums
+ */
+
+#define MAKE_ACM_VERSION(mjr, mnr, bld) \
+  (((LONG)(mjr)<<24) | ((LONG)(mnr)<<16) | ((LONG)bld))
+
+#define ACMDRVOPENDESC_SECTIONNAME_CHARS
+
+#define ACMDM_DRIVER_NOTIFY             (ACMDM_BASE + 1)
+#define ACMDM_DRIVER_DETAILS            (ACMDM_BASE + 10)
+
+#define ACMDM_HARDWARE_WAVE_CAPS_INPUT  (ACMDM_BASE + 20)
+#define ACMDM_HARDWARE_WAVE_CAPS_OUTPUT (ACMDM_BASE + 21)
+
+#define ACMDM_FORMATTAG_DETAILS         (ACMDM_BASE + 25)
+#define ACMDM_FORMAT_DETAILS            (ACMDM_BASE + 26)
+#define ACMDM_FORMAT_SUGGEST            (ACMDM_BASE + 27)
+
+#define ACMDM_FILTERTAG_DETAILS         (ACMDM_BASE + 50)
+#define ACMDM_FILTER_DETAILS            (ACMDM_BASE + 51)
+
+#define ACMDM_STREAM_OPEN               (ACMDM_BASE + 76)
+#define ACMDM_STREAM_CLOSE              (ACMDM_BASE + 77)
+#define ACMDM_STREAM_SIZE               (ACMDM_BASE + 78)
+#define ACMDM_STREAM_CONVERT            (ACMDM_BASE + 79)
+#define ACMDM_STREAM_RESET              (ACMDM_BASE + 80)
+#define ACMDM_STREAM_PREPARE            (ACMDM_BASE + 81)
+#define ACMDM_STREAM_UNPREPARE          (ACMDM_BASE + 82)
+#define ACMDM_STREAM_UPDATE             (ACMDM_BASE + 83)
+
+/***********************************************************************
+ * Structures
+ */
+
+typedef struct _ACMDRVOPENDESCA
+{
+  DWORD  cbStruct;
+  FOURCC fccType;
+  FOURCC fccComp;
+  DWORD  dwVersion;
+  DWORD  dwFlags;
+  DWORD  dwError;
+  LPCSTR pszSectionName;
+  LPCSTR pszAliasName;
+  DWORD  dnDevNode;
+} ACMDRVOPENDESCA, *PACMDRVOPENDESCA;
+
+typedef struct _ACMDRVOPENDESCW
+{
+  DWORD   cbStruct;
+  FOURCC  fccType;
+  FOURCC  fccComp;
+  DWORD   dwVersion;
+  DWORD   dwFlags;
+  DWORD   dwError;
+  LPCWSTR pszSectionName;
+  LPCWSTR pszAliasName;
+  DWORD   dnDevNode;
+} ACMDRVOPENDESCW, *PACMDRVOPENDESCW;
+
+typedef struct _ACMDRVSTREAMINSTANCE
+{
+  DWORD           cbStruct;
+  PWAVEFORMATEX   pwfxSrc;
+  PWAVEFORMATEX   pwfxDst;
+  PWAVEFILTER     pwfltr;
+  DWORD_PTR       dwCallback;
+  DWORD_PTR       dwInstance;
+  DWORD           fdwOpen;
+  DWORD           fdwDriver;
+  DWORD_PTR       dwDriver;
+  HACMSTREAM    has;
+} ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE;
+
+typedef struct _ACMDRVSTREAMHEADER *PACMDRVSTREAMHEADER;
+#include <pshpack1.h>
+typedef struct _ACMDRVSTREAMHEADER {
+  DWORD                cbStruct;
+  DWORD                fdwStatus;
+  DWORD_PTR            dwUser;
+  LPBYTE               pbSrc;
+  DWORD                cbSrcLength;
+  DWORD                cbSrcLengthUsed;
+  DWORD_PTR            dwSrcUser;
+  LPBYTE               pbDst;
+  DWORD                cbDstLength;
+  DWORD                cbDstLengthUsed;
+  DWORD_PTR            dwDstUser;
+
+  DWORD                fdwConvert;
+  PACMDRVSTREAMHEADER *padshNext;
+  DWORD                fdwDriver;
+  DWORD_PTR            dwDriver;
+
+  /* Internal fields for ACM */
+  DWORD                fdwPrepared;
+  DWORD_PTR            dwPrepared;
+  LPBYTE               pbPreparedSrc;
+  DWORD                cbPreparedSrcLength;
+  LPBYTE               pbPreparedDst;
+  DWORD                cbPreparedDstLength;
+} ACMDRVSTREAMHEADER;
+#include <poppack.h>
+
+typedef struct _ACMDRVSTREAMSIZE
+{
+  DWORD cbStruct;
+  DWORD fdwSize;
+  DWORD cbSrcLength;
+  DWORD cbDstLength;
+} ACMDRVSTREAMSIZE, *PACMDRVSTREAMSIZE;
+
+typedef struct _ACMDRVFORMATSUGGEST
+{
+  DWORD           cbStruct;
+  DWORD           fdwSuggest;
+  PWAVEFORMATEX   pwfxSrc;
+  DWORD           cbwfxSrc;
+  PWAVEFORMATEX   pwfxDst;
+  DWORD           cbwfxDst;
+} ACMDRVFORMATSUGGEST, *PACMDRVFORMATSUGGEST;
+
+#endif  /* __WINE_MSACMDRV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h
new file mode 100644
index 0000000..2b5380a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSCAT_H
+#define __WINE_MSCAT_H
+
+#include <mssip.h>
+
+typedef HANDLE HCATADMIN;
+typedef HANDLE HCATINFO;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CRYPTCAT_OPEN_CREATENEW             0x00000001
+#define CRYPTCAT_OPEN_ALWAYS                0x00000002
+#define CRYPTCAT_OPEN_EXISTING              0x00000004
+#define CRYPTCAT_OPEN_EXCLUDE_PAGE_HASHES   0x00010000
+#define CRYPTCAT_OPEN_INCLUDE_PAGE_HASHES   0x00020000
+#define CRYPTCAT_OPEN_VERIFYSIGHASH         0x10000000
+#define CRYPTCAT_OPEN_NO_CONTENT_HCRYPTMSG  0x20000000
+#define CRYPTCAT_OPEN_SORTED                0x40000000
+#define CRYPTCAT_OPEN_FLAGS_MASK            0xffff0000
+
+#define CRYPTCAT_E_AREA_HEADER              0x00000000
+#define CRYPTCAT_E_AREA_MEMBER              0x00010000
+#define CRYPTCAT_E_AREA_ATTRIBUTE           0x00020000
+
+#define CRYPTCAT_E_CDF_UNSUPPORTED          0x00000001
+#define CRYPTCAT_E_CDF_DUPLICATE            0x00000002
+#define CRYPTCAT_E_CDF_TAGNOTFOUND          0x00000004
+
+#define CRYPTCAT_E_CDF_MEMBER_FILE_PATH     0x00010001
+#define CRYPTCAT_E_CDF_MEMBER_INDIRECTDATA  0x00010002
+#define CRYPTCAT_E_CDF_MEMBER_FILENOTFOUND  0x00010004
+
+#define CRYPTCAT_E_CDF_BAD_GUID_CONV        0x00020001
+#define CRYPTCAT_E_CDF_ATTR_TOOFEWVALUES    0x00020002
+#define CRYPTCAT_E_CDF_ATTR_TYPECOMBO       0x00020004
+
+#include <pshpack8.h>
+
+typedef struct CRYPTCATATTRIBUTE_
+{
+    DWORD cbStruct;
+    LPWSTR pwszReferenceTag;
+    DWORD dwAttrTypeAndAction;
+    DWORD cbValue;
+    BYTE *pbValue;
+    DWORD dwReserved;
+} CRYPTCATATTRIBUTE;
+
+typedef struct CRYPTCATMEMBER_
+{
+    DWORD cbStruct;
+    LPWSTR pwszReferenceTag;
+    LPWSTR pwszFileName;
+    GUID gSubjectType;
+    DWORD fdwMemberFlags;
+    struct SIP_INDIRECT_DATA_* pIndirectData;
+    DWORD dwCertVersion;
+    DWORD dwReserved;
+    HANDLE hReserved;
+    CRYPT_ATTR_BLOB sEncodedIndirectData;
+    CRYPT_ATTR_BLOB sEncodedMemberInfo;
+} CRYPTCATMEMBER;
+
+typedef struct CATALOG_INFO_
+{
+    DWORD cbStruct;
+    WCHAR wszCatalogFile[MAX_PATH];
+} CATALOG_INFO;
+
+typedef struct CRYPTCATCDF_
+{
+    DWORD cbStruct;
+    HANDLE hFile;
+    DWORD dwCurFilePos;
+    DWORD dwLastMemberOffset;
+    BOOL fEOF;
+    LPWSTR pwszResultDir;
+    HANDLE hCATStore;
+} CRYPTCATCDF;
+
+#include <poppack.h>
+
+typedef void (WINAPI *PFN_CDF_PARSE_ERROR_CALLBACK)(DWORD, DWORD, WCHAR *);
+
+BOOL      WINAPI CryptCATAdminAcquireContext(HCATADMIN*,const GUID*,DWORD);
+HCATINFO  WINAPI CryptCATAdminAddCatalog(HCATADMIN,PWSTR,PWSTR,DWORD);
+BOOL      WINAPI CryptCATAdminCalcHashFromFileHandle(HANDLE,DWORD*,BYTE*,DWORD);
+HCATINFO  WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN,BYTE*,DWORD,DWORD,HCATINFO*);
+BOOL      WINAPI CryptCATAdminReleaseCatalogContext(HCATADMIN,HCATINFO,DWORD);
+BOOL      WINAPI CryptCATAdminReleaseContext(HCATADMIN,DWORD);
+BOOL      WINAPI CryptCATAdminRemoveCatalog(HCATADMIN,LPCWSTR,DWORD);
+BOOL      WINAPI CryptCATAdminResolveCatalogPath(HCATADMIN, WCHAR *, CATALOG_INFO *, DWORD);
+BOOL      WINAPI CryptCATCatalogInfoFromContext(HCATINFO, CATALOG_INFO *, DWORD);
+BOOL      WINAPI CryptCATCDFClose(CRYPTCATCDF *);
+CRYPTCATATTRIBUTE * WINAPI CryptCATCDFEnumCatAttributes(CRYPTCATCDF *, CRYPTCATATTRIBUTE *,
+                                                        PFN_CDF_PARSE_ERROR_CALLBACK);
+LPWSTR              WINAPI CryptCATCDFEnumMembersByCDFTagEx(CRYPTCATCDF *, LPWSTR,
+                                                            PFN_CDF_PARSE_ERROR_CALLBACK,
+                                                            CRYPTCATMEMBER **, BOOL, LPVOID);
+CRYPTCATCDF       * WINAPI CryptCATCDFOpen(LPWSTR, PFN_CDF_PARSE_ERROR_CALLBACK);
+BOOL                WINAPI CryptCATClose(HANDLE);
+CRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateAttr(HANDLE, CRYPTCATMEMBER *, CRYPTCATATTRIBUTE *);
+CRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateCatAttr(HANDLE, CRYPTCATATTRIBUTE *);
+CRYPTCATMEMBER    * WINAPI CryptCATEnumerateMember(HANDLE,CRYPTCATMEMBER *);
+CRYPTCATATTRIBUTE * WINAPI CryptCATGetAttrInfo(HANDLE, CRYPTCATMEMBER *, LPWSTR);
+CRYPTCATATTRIBUTE * WINAPI CryptCATGetCatAttrInfo(HANDLE, LPWSTR);
+CRYPTCATMEMBER    * WINAPI CryptCATGetMemberInfo(HANDLE, LPWSTR);
+HANDLE    WINAPI CryptCATOpen(LPWSTR,DWORD,HCRYPTPROV,DWORD,DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl
new file mode 100644
index 0000000..8387598
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+cpp_quote("/* FIXME: #include <gcghost.h> */")
+cpp_quote("/* FIXME: #include <ivalidator.h> */")
+
+cpp_quote("HRESULT     WINAPI CorBindToRuntimeHost(LPCWSTR,LPCWSTR,LPCWSTR,VOID*,DWORD,REFCLSID,REFIID,LPVOID*);")
+cpp_quote("void        WINAPI CorExitProcess(int);")
+cpp_quote("HRESULT     WINAPI GetCORSystemDirectory(LPWSTR,DWORD,DWORD*);")
+cpp_quote("HRESULT     WINAPI GetCORVersion(LPWSTR,DWORD,DWORD*);")
+cpp_quote("HRESULT     WINAPI GetRequestedRuntimeInfo(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPWSTR,DWORD,DWORD*,LPWSTR,DWORD,DWORD*);")
+cpp_quote("HRESULT     WINAPI LoadLibraryShim(LPCWSTR,LPCWSTR,LPVOID,HMODULE*);")
+cpp_quote("#ifdef WINE_STRICT_PROTOTYPES")
+cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)(void);")
+cpp_quote("#else")
+cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)();")
+cpp_quote("#endif")
+cpp_quote("HRESULT     WINAPI LockClrVersion(FLockClrVersionCallback,FLockClrVersionCallback*,FLockClrVersionCallback*);")
+
+typedef void* HDOMAINENUM;
+
+typedef enum RUNTIME_INFO_FLAGS {
+    RUNTIME_INFO_UPGRADE_VERSION = 0x1,
+    RUNTIME_INFO_REQUEST_IA64 = 0x2,
+    RUNTIME_INFO_REQUEST_AMD64 = 0x4,
+    RUNTIME_INFO_REQUEST_X86 = 0x8,
+    RUNTIME_INFO_DONT_RETURN_DIRECTORY = 0x10,
+    RUNTIME_INFO_DONT_RETURN_VERSION = 0x20,
+    RUNTIME_INFO_DONT_SHOW_ERROR_DIALOG = 0x40
+} RUNTIME_INFO_FLAGS;
+
+typedef HRESULT (__stdcall *FExecuteInAppDomainCallback)([in] void* cookie);
+
+[
+    uuid(F31D1788-C397-4725-87A5-6AF3472C2791),
+    version(1.0),
+    object,
+    local
+]
+interface IGCThreadControl : IUnknown
+{
+    HRESULT ThreadIsBlockingForSuspension();
+
+    HRESULT SuspensionStarting();
+
+    HRESULT SuspensionEnding(DWORD generation);
+}
+
+[
+    uuid(5513D564-8374-4cb9-AED9-0083F4160A1D),
+    version(1.1),
+    local,
+    object
+]
+interface IGCHostControl : IUnknown
+{
+    HRESULT RequestVirtualMemLimit([in] SIZE_T nMaxVirtualMemMB,
+                                   [in, out] SIZE_T* nNewMaxVirtualMemMB);
+}
+
+[
+    uuid(23D86786-0BB5-4774-8FB5-E3522ADD6246),
+    version(1.0),
+    local,
+    object
+]
+interface IDebuggerThreadControl : IUnknown
+{
+    HRESULT ThreadIsBlockingForDebugger();
+
+    HRESULT ReleaseAllRuntimeThreads();
+
+    HRESULT StartBlockingForDebugger(DWORD dwUnused);
+}
+
+[
+    uuid(5C2B07A5-1E98-11d3-872F-00C04F79ED0D),
+    version(1.0),
+    local,
+    object
+]
+interface ICorConfiguration : IUnknown
+{
+    HRESULT SetGCThreadControl([in] IGCThreadControl* GCThreadControl);
+
+    HRESULT SetGCHostControl([in] IGCHostControl* GCHostControl);
+
+    HRESULT SetDebuggerThreadControl([in] IDebuggerThreadControl* debuggerThreadControl);
+
+    HRESULT AddDebuggerSpecialThread([in] DWORD specialThreadId);
+}
+
+[
+    uuid(9065597E-D1A1-4fb2-B6BA-7E1FCE230F61),
+    version(1.0),
+    local
+]
+interface ICLRControl : IUnknown
+{
+    HRESULT GetCLRManager([in] REFIID riid, [out] void **ppObject);
+
+        HRESULT SetAppDomainManagerType([in] LPCWSTR appDomainManagerAssembly,
+                          [in] LPCWSTR appDomainManagerType);
+}
+
+[
+    uuid(02CA073C-7079-4860-880A-C2F7A449C991),
+    version(1.0),
+    local
+]
+interface IHostControl : IUnknown
+{
+    HRESULT GetHostManager( [in] REFIID riid, [out] void **ppObject);
+
+    HRESULT SetAppDomainManager([in] DWORD appDomainID,
+                            [in] IUnknown* appDomainManager);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_CorRuntimeHost, 0xcb2f6723,0xab3a,0x11d2,0x9c,0x40,0x00,0xc0,0x4f,0xa3,0x0a,0x3e);")
+
+[
+    uuid(CB2F6722-AB3A-11d2-9C40-00C04FA30A3E),
+    version(1.0),
+    local,
+    object
+]
+interface ICorRuntimeHost : IUnknown
+{
+    HRESULT CreateLogicalThreadState();
+    HRESULT DeleteLogicalThreadState();
+    HRESULT SwitchInLogicalThreadState([in] DWORD *fiberCookie);
+
+    HRESULT SwitchOutLogicalThreadState([out] DWORD **fiberCookie);
+
+    HRESULT LocksHeldByLogicalThread( [out] DWORD *pCount );
+
+    HRESULT MapFile([in] HANDLE hFile, [out] HMODULE* mapAddress);
+
+    HRESULT GetConfiguration([out] ICorConfiguration** pConfiguration);
+
+    HRESULT Start();
+
+    HRESULT Stop();
+
+    HRESULT CreateDomain([in] LPCWSTR friendlyName,
+                         [in] IUnknown* identityArray,
+                         [out] IUnknown** appDomain);
+
+    HRESULT GetDefaultDomain([out] IUnknown** pAppDomain);
+
+    HRESULT EnumDomains([out] HDOMAINENUM *hEnum);
+
+    HRESULT NextDomain([in] HDOMAINENUM hEnum, [out] IUnknown** appDomain);
+
+    HRESULT CloseEnum([in] HDOMAINENUM hEnum);
+
+    HRESULT CreateDomainEx([in] LPCWSTR friendlyName,
+                           [in] IUnknown* setup,
+                           [in] IUnknown* evidence,
+                           [out] IUnknown** appDomain);
+
+    HRESULT CreateDomainSetup([out] IUnknown** appDomainSetup);
+
+    HRESULT CreateEvidence([out] IUnknown** evidence);
+
+    HRESULT UnloadDomain([in] IUnknown* appDomain);
+
+    HRESULT CurrentDomain([out] IUnknown** appDomain);
+};
+
+cpp_quote("DEFINE_GUID(CLSID_CLRRuntimeHost, 0x90f1a06e,0x7712,0x4762,0x86,0xb5,0x7a,0x5e,0xba,0x6b,0xdb,0x02);")
+
+[
+    uuid(90f1a06c-7712-4762-86b5-7a5eba6bdb02),
+    local,
+    object
+]
+interface ICLRRuntimeHost : IUnknown
+{
+    HRESULT Start();
+
+    HRESULT Stop();
+
+    HRESULT SetHostControl([in] IHostControl *pHostControl);
+
+    HRESULT GetCLRControl([out] ICLRControl **pCLRControl);
+
+    HRESULT UnloadAppDomain([in] DWORD dwAppDomainId,
+                            [in] BOOL fWaitUntilDone);
+
+    HRESULT ExecuteInAppDomain([in] DWORD dwAppDomainId,
+                               [in] FExecuteInAppDomainCallback pCallback,
+                               [in] void *cookie);
+
+    HRESULT GetCurrentAppDomainId([out] DWORD *pdwAppDomainId);
+
+    HRESULT ExecuteApplication([in] LPCWSTR pwzAppFullName,
+                               [in] DWORD dwManifestPaths,
+                               [in] LPCWSTR *ppwzManifestPaths,
+                               [in] DWORD dwActivationData,
+                               [in] LPCWSTR *ppwzActivationData,
+                               [out] int *pReturnValue);
+
+    HRESULT ExecuteInDefaultAppDomain([in] LPCWSTR pwzAssemblyPath,
+                                      [in] LPCWSTR pwzTypeName,
+                                      [in] LPCWSTR pwzMethodName,
+                                      [in] LPCWSTR pwzArgument,
+                                      [out] DWORD *pReturnValue);
+}
+
+[
+    uuid(C3FCC19E-A970-11d2-8B5A-00A0C9B7C9C4),
+    local,
+    object
+]
+interface IManagedObject : IUnknown
+{
+    HRESULT GetSerializedBuffer([out] BSTR *pBSTR);
+
+    HRESULT GetObjectIdentity([out] BSTR *pBSTRGUID,
+                              [out] int *AppDomainID,
+                             [out] int *pCCW);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl
new file mode 100644
index 0000000..a21f977
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl
@@ -0,0 +1,1533 @@
+/*
+ * Copyright 2008 Aric Stewart, 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+import "comcat.idl";
+import "textstor.idl";
+import "ctfutb.idl";
+#endif
+cpp_quote("#include <winuser.h>")
+
+cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)")
+cpp_quote("#define TF_E_DISCONNECTED    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)")
+cpp_quote("#define TF_E_ALREADY_EXISTS  MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)")
+cpp_quote("#define TF_E_NOLOCK          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
+
+cpp_quote("HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim);")
+cpp_quote("HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim);")
+cpp_quote("HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr);")
+cpp_quote("HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm);")
+cpp_quote("HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim);")
+cpp_quote("HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void);")
+
+cpp_quote("EXTERN_C const GUID GUID_PROP_TEXTOWNER;")
+cpp_quote("DEFINE_GUID(GUID_PROP_ATTRIBUTE,0x34b45670,0x7526,0x11d2,0xa1,0x47,0x00,0x10,0x5a,0x27,0x99,0xb5);")
+cpp_quote("EXTERN_C const GUID GUID_PROP_LANGID;")
+cpp_quote("EXTERN_C const GUID GUID_PROP_READING;")
+cpp_quote("EXTERN_C const GUID GUID_PROP_COMPOSING;")
+
+cpp_quote("EXTERN_C const CLSID CLSID_TF_ThreadMgr;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_LangBarMgr;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_CategoryMgr;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr;")
+
+/* GUIDs for Compartments */
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_DISABLED;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_OPENCLOSE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_HANDWRITING_OPENCLOSE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_DISABLED;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_GLOBALSTATE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_PERSISTMENUENABLED;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_EMPTYCONTEXT;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_TIPUISTATUS;")
+
+/* GUIDs for Categories */
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD;")
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH;")
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING;")
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER;")
+
+typedef [uuid(7213778c-7bb0-4270-b050-6189ee594e97)]  DWORD TfEditCookie;
+typedef [uuid(de403c21-89fd-4f85-8b87-64584d063fbc)] DWORD TfClientId;
+typedef [uuid(88a9c478-f3ec-4763-8345-cd9250443f8d)] DWORD TfGuidAtom;
+
+cpp_quote("#define TF_MOD_ALT                   0x0001")
+cpp_quote("#define TF_MOD_CONTROL               0x0002")
+cpp_quote("#define TF_MOD_SHIFT                 0x0004")
+cpp_quote("#define TF_MOD_RALT                  0x0008")
+cpp_quote("#define TF_MOD_RCONTROL              0x0010")
+cpp_quote("#define TF_MOD_RSHIFT                0x0020")
+cpp_quote("#define TF_MOD_LALT                  0x0040")
+cpp_quote("#define TF_MOD_LCONTROL              0x0080")
+cpp_quote("#define TF_MOD_LSHIFT                0x0100")
+cpp_quote("#define TF_MOD_ON_KEYUP              0x0200")
+cpp_quote("#define TF_MOD_IGNORE_ALL_MODIFIER   0x0400")
+
+cpp_quote("#define TF_PROFILETYPE_INPUTPROCESSOR  0x0001")
+cpp_quote("#define TF_PROFILETYPE_KEYBOARDLAYOUT  0x0002")
+
+interface ITfDocumentMgr;
+interface ITfContext;
+interface IEnumTfDocumentMgrs;
+interface IEnumTfContexts;
+interface ITfFunctionProvider;
+interface IEnumTfFunctionProviders;
+interface ITfCompartmentMgr;
+interface ITfEditSession;
+interface ITfRange;
+interface ITfContextView;
+interface IEnumTfContextViews;
+interface ITfProperty;
+interface ITfReadOnlyProperty;
+interface IEnumTfProperties;
+interface ITfRangeBackup;
+interface IEnumTfLanguageProfiles;
+interface ITfEditRecord;
+interface ITfCompositionView;
+interface ITfKeyEventSink;
+
+cpp_quote("#if 0")
+typedef [uuid(4f5d560f-5ab5-4dde-8c4d-404592857ab0)] UINT_PTR HKL;
+cpp_quote("#endif")
+
+typedef [uuid(e26d9e1d-691e-4f29-90d7-338dcf1f8cef)] struct TF_PERSISTENT_PROPERTY_HEADER_ACP
+{
+    GUID guidType;
+    LONG ichStart;
+    LONG cch;
+    ULONG cb;
+    DWORD dwPrivate;
+    CLSID clsidTIP;
+} TF_PERSISTENT_PROPERTY_HEADER_ACP;
+
+typedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE
+{
+    CLSID clsid;
+    LANGID langid;
+    GUID catid;
+    BOOL fActive;
+    GUID guidProfile;
+} TF_LANGUAGEPROFILE;
+
+typedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY
+{
+    UINT uVKey;
+    UINT uModifiers;
+} TF_PRESERVEDKEY;
+
+typedef [uuid(5a886226-ae9a-489b-b991-2b1e25ee59a9)]  enum { TF_ANCHOR_START = 0, TF_ANCHOR_END = 1 } TfAnchor;
+
+[
+    object,
+    uuid(aa80e801-2021-11d2-93e0-0060b067b86e),
+    pointer_default(unique)
+]
+interface ITfThreadMgr: IUnknown
+{
+    HRESULT Activate(
+        [out] TfClientId *ptid);
+
+    HRESULT Deactivate();
+
+    HRESULT CreateDocumentMgr(
+        [out] ITfDocumentMgr **ppdim);
+
+    HRESULT EnumDocumentMgrs(
+        [out] IEnumTfDocumentMgrs **ppEnum);
+
+    HRESULT GetFocus(
+        [out] ITfDocumentMgr **ppdimFocus);
+
+    HRESULT SetFocus(
+        [in] ITfDocumentMgr *pdimFocus);
+
+    HRESULT AssociateFocus(
+        [in] HWND hwnd,
+        [in, unique] ITfDocumentMgr *pdimNew,
+        [out] ITfDocumentMgr **ppdimPrev);
+
+    HRESULT IsThreadFocus(
+        [out] BOOL *pfThreadFocus);
+
+    HRESULT GetFunctionProvider(
+        [in] REFCLSID clsid,
+        [out] ITfFunctionProvider **ppFuncProv);
+
+    HRESULT EnumFunctionProviders(
+        [out] IEnumTfFunctionProviders **ppEnum);
+
+    HRESULT GetGlobalCompartment(
+        [out] ITfCompartmentMgr **ppCompMgr);
+};
+
+[
+    object,
+    uuid(d7540241-f9a1-4364-befc-dbcd2c4395b7),
+    pointer_default(unique)
+]
+interface ITfCompositionView : IUnknown
+{
+    HRESULT GetOwnerClsid([out] CLSID *pclsid);
+
+    HRESULT GetRange([out] ITfRange **ppRange);
+}
+
+[
+    object,
+    uuid(aa80e7f4-2021-11d2-93e0-0060b067b86e),
+    pointer_default(unique)
+]
+interface ITfDocumentMgr: IUnknown
+{
+    HRESULT CreateContext(
+        [in] TfClientId tidOwner,
+        [in] DWORD dwFlags,
+        [in, unique] IUnknown *punk,
+        [out] ITfContext **ppic,
+        [out] TfEditCookie *pecTextStore);
+
+    HRESULT Push(
+        [in] ITfContext *pic);
+
+    const DWORD TF_POPF_ALL = 0x0001;
+
+    HRESULT Pop(
+        [in] DWORD dwFlags);
+
+    HRESULT GetTop(
+        [out] ITfContext **ppic);
+
+    HRESULT GetBase(
+        [out] ITfContext **ppic);
+
+    HRESULT EnumContexts(
+        [out] IEnumTfContexts **ppEnum);
+};
+
+[
+    object,
+    uuid(aa80e7fd-2021-11d2-93e0-0060b067b86e),
+    pointer_default(unique)
+]
+interface ITfContext : IUnknown
+{
+    const DWORD TF_ES_ASYNCDONTCARE = 0x0;
+    const DWORD TF_ES_SYNC          = 0x1;
+    const DWORD TF_ES_READ          = 0x2;
+    const DWORD TF_ES_READWRITE     = 0x6;
+    const DWORD TF_ES_ASYNC         = 0x8;
+
+    HRESULT RequestEditSession(
+        [in] TfClientId tid,
+        [in] ITfEditSession *pes,
+        [in] DWORD dwFlags,
+        [out] HRESULT *phrSession);
+
+    HRESULT InWriteSession(
+        [in] TfClientId tid,
+        [out] BOOL *pfWriteSession);
+
+    typedef [uuid(1690be9b-d3e9-49f6-8d8b-51b905af4c43)] enum { TF_AE_NONE, TF_AE_START, TF_AE_END } TfActiveSelEnd;
+
+    typedef [uuid(36ae42a4-6989-4bdc-b48a-6137b7bf2e42)] struct TF_SELECTIONSTYLE
+    {
+        TfActiveSelEnd ase;
+        BOOL fInterimChar;
+    } TF_SELECTIONSTYLE;
+
+    typedef [uuid(75eb22f2-b0bf-46a8-8006-975a3b6efcf1)] struct TF_SELECTION
+    {
+        ITfRange *range;
+        TF_SELECTIONSTYLE style;
+    } TF_SELECTION;
+
+    const ULONG TF_DEFAULT_SELECTION =  TS_DEFAULT_SELECTION;
+
+    HRESULT GetSelection(
+        [in] TfEditCookie ec,
+        [in] ULONG ulIndex,
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetched)] TF_SELECTION *pSelection,
+        [out] ULONG *pcFetched);
+
+    HRESULT SetSelection(
+        [in] TfEditCookie ec,
+        [in] ULONG ulCount,
+        [in, size_is(ulCount)] const TF_SELECTION *pSelection);
+
+    HRESULT GetStart(
+        [in] TfEditCookie ec,
+        [out] ITfRange **ppStart);
+
+    HRESULT GetEnd(
+        [in] TfEditCookie ec,
+        [out] ITfRange **ppEnd);
+
+    typedef [uuid(bc7d979a-846a-444d-afef-0a9bfa82b961)] TS_STATUS TF_STATUS;
+    const DWORD TF_SD_READONLY    = TS_SD_READONLY;
+    const DWORD TF_SD_LOADING     = TS_SD_LOADING;
+    const DWORD TF_SS_DISJOINTSEL = TS_SS_DISJOINTSEL;
+    const DWORD TF_SS_REGIONS     = TS_SS_REGIONS;
+    const DWORD TF_SS_TRANSITORY  = TS_SS_TRANSITORY;
+
+
+    HRESULT GetActiveView(
+        [out] ITfContextView **ppView);
+
+    HRESULT EnumViews(
+        [out] IEnumTfContextViews **ppEnum);
+
+    HRESULT GetStatus(
+        [out] TF_STATUS *pdcs);
+
+    HRESULT GetProperty(
+        [in] REFGUID guidProp,
+        [out] ITfProperty **ppProp);
+
+    HRESULT GetAppProperty(
+        [in] REFGUID guidProp,
+        [out] ITfReadOnlyProperty **ppProp);
+
+    HRESULT TrackProperties(
+        [in, size_is(cProp)] const GUID **prgProp,
+        [in] ULONG cProp,
+        [in, size_is(cAppProp)] const GUID **prgAppProp,
+        [in] ULONG cAppProp,
+        [out] ITfReadOnlyProperty **ppProperty);
+
+    HRESULT EnumProperties(
+        [out] IEnumTfProperties **ppEnum);
+
+    HRESULT GetDocumentMgr(
+        [out] ITfDocumentMgr **ppDm);
+
+    HRESULT CreateRangeBackup(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pRange,
+        [out] ITfRangeBackup **ppBackup);
+
+};
+
+[
+  object,
+  uuid(4ea48a35-60ae-446f-8fd6-e6a8d82459f7),
+  pointer_default(unique)
+]
+interface ITfSource : IUnknown
+{
+    HRESULT AdviseSink(
+        [in] REFIID riid,
+        [in, iid_is(riid)] IUnknown *punk,
+        [out] DWORD *pdwCookie);
+
+    HRESULT UnadviseSink(
+        [in] DWORD dwCookie);
+};
+
+[
+  object,
+  local,
+  uuid(1F02B6C5-7842-4EE6-8A0B-9A24183A95CA),
+  pointer_default(unique)
+]
+interface ITfInputProcessorProfiles : IUnknown
+{
+    HRESULT Register(
+        [in] REFCLSID rclsid);
+
+    HRESULT Unregister(
+        [in] REFCLSID rclsid);
+
+    HRESULT AddLanguageProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [in, size_is(cchDesc)] const WCHAR *pchDesc,
+        [in] ULONG cchDesc,
+        [in, size_is(cchFile)] const WCHAR *pchIconFile,
+        [in] ULONG cchFile,
+        [in] ULONG uIconIndex);
+
+    HRESULT RemoveLanguageProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile);
+
+    HRESULT EnumInputProcessorInfo(
+        [out] IEnumGUID **ppEnum);
+
+    HRESULT GetDefaultLanguageProfile(
+        [in] LANGID langid,
+        [in] REFGUID catid,
+        [out] CLSID *pclsid,
+        [out] GUID *pguidProfile);
+
+    HRESULT SetDefaultLanguageProfile(
+        [in] LANGID langid,
+        [in] REFCLSID rclsid,
+        [in] REFGUID guidProfiles);
+
+    HRESULT ActivateLanguageProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfiles);
+
+    HRESULT GetActiveLanguageProfile(
+        [in] REFCLSID rclsid,
+        [out] LANGID *plangid,
+        [out] GUID *pguidProfile);
+
+    HRESULT GetLanguageProfileDescription(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [out] BSTR *pbstrProfile);
+
+    HRESULT GetCurrentLanguage(
+        [out] LANGID *plangid);
+
+    HRESULT ChangeCurrentLanguage(
+        [in] LANGID langid);
+
+    HRESULT GetLanguageList(
+        [out] LANGID **ppLangId,
+        [out] ULONG *pulCount);
+
+    HRESULT EnumLanguageProfiles(
+        [in] LANGID langid,
+        [out] IEnumTfLanguageProfiles **ppEnum);
+
+    HRESULT EnableLanguageProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [in] BOOL fEnable);
+
+    HRESULT IsEnabledLanguageProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [out] BOOL *pfEnable);
+
+    HRESULT EnableLanguageProfileByDefault(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [in] BOOL fEnable);
+
+    HRESULT SubstituteKeyboardLayout(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [in] HKL hKL);
+};
+
+typedef [uuid(44d2825a-10e5-43b2-877f-6cb2f43b7e7e)]
+struct TF_INPUTPROCESSORPROFILE {
+    DWORD dwProfileType;
+    LANGID langid;
+    CLSID clsid;
+    GUID guidProfile;
+    GUID catid;
+    HKL hklSubstitute;
+    DWORD dwCaps;
+    HKL hkl;
+    DWORD dwFlags;
+} TF_INPUTPROCESSORPROFILE;
+
+[
+    object,
+    uuid(71c6e74d-0f28-11d8-a82a-00065b84435c),
+    pointer_default(unique)
+]
+interface IEnumTfInputProcessorProfiles : IUnknown
+{
+    HRESULT Clone(
+        [out] IEnumTfInputProcessorProfiles **ppEnum);
+
+    HRESULT Next(
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetch)] TF_INPUTPROCESSORPROFILE *pProfile,
+        [out] ULONG *pcFetch);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] ULONG ulCount);
+}
+
+[
+    object,
+    uuid(71c6e74c-0f28-11d8-a82a-00065b84435c),
+    pointer_default(unique)
+]
+interface ITfInputProcessorProfileMgr : IUnknown
+{
+    HRESULT ActivateProfile(
+        [in] DWORD dwProfileType,
+        [in] LANGID langid,
+        [in] REFCLSID clsid,
+        [in] REFGUID guidProfile,
+        [in] HKL hkl,
+        [in] DWORD dwFlags);
+
+    HRESULT DeactivateProfile(
+        [in] DWORD dwProfileType,
+        [in] LANGID langid,
+        [in] REFCLSID clsid,
+        [in] REFGUID guidProfile,
+        [in] HKL hkl,
+        [in] DWORD dwFlags);
+
+    HRESULT GetProfile(
+        [in] DWORD dwProfileType,
+        [in] LANGID langid,
+        [in] REFCLSID clsid,
+        [in] REFGUID guidProfile,
+        [in] HKL hkl,
+        [out] TF_INPUTPROCESSORPROFILE *pProfile);
+
+
+    HRESULT EnumProfiles(
+        [in] LANGID langid,
+        [out] IEnumTfInputProcessorProfiles **ppEnum);
+
+    HRESULT ReleaseInputProcessor(
+        [in] REFCLSID rclsid,
+        [in] DWORD dwFlags);
+
+    HRESULT RegisterProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [in, size_is(cchDesc)] const WCHAR *pchDesc,
+        [in] ULONG cchDesc,
+        [in, size_is(cchFile)] const WCHAR *pchIconFile,
+        [in] ULONG cchFile,
+        [in] ULONG uIconIndex,
+        [in] HKL hklsubstitute,
+        [in] DWORD dwPreferredLayout,
+        [in] BOOL bEnabledByDefault,
+        [in] DWORD dwFlags);
+
+    HRESULT UnregisterProfile(
+        [in] REFCLSID rclsid,
+        [in] LANGID langid,
+        [in] REFGUID guidProfile,
+        [in] DWORD dwFlags);
+
+    HRESULT GetActiveProfile(
+        [in] REFGUID catid,
+        [out] TF_INPUTPROCESSORPROFILE *pProfile);
+}
+
+typedef [uuid(c4cc07f1-80cc-4a7b-bc54-98512782cbe3)]
+enum {
+    TF_LS_NONE      = 0,
+    TF_LS_SOLID     = 1,
+    TF_LS_DOT       = 2,
+    TF_LS_DASH      = 3,
+    TF_LS_SQUIGGLE  = 4
+} TF_DA_LINESTYLE;
+
+typedef [uuid(d9b92e21-084a-401b-9c64-1e6dad91a1ab)]
+enum {
+    TF_CT_NONE      = 0,
+    TF_CT_SYSCOLOR  = 1,
+    TF_CT_COLORREF  = 2
+} TF_DA_COLORTYPE;
+
+typedef [uuid(90d0cb5e-6520-4a0f-b47c-c39bd955f0d6)]
+struct TF_DA_COLOR {
+    TF_DA_COLORTYPE type;
+    [switch_type(TF_DA_COLORTYPE), switch_is(type)]
+    union {
+        [case(TF_CT_SYSCOLOR)] int nIndex;
+        [case(TF_CT_COLORREF)] COLORREF cr;
+    };
+} TF_DA_COLOR;
+
+typedef [uuid(33d2fe4b-6c24-4f67-8d75-3bc1819e4126)]
+enum {
+    TF_ATTR_INPUT                = 0,
+    TF_ATTR_TARGET_CONVERTED     = 1,
+    TF_ATTR_CONVERTED            = 2,
+    TF_ATTR_TARGET_NOTCONVERTED  = 3,
+    TF_ATTR_INPUT_ERROR          = 4,
+    TF_ATTR_FIXEDCONVERTED       = 5,
+    TF_ATTR_OTHER                = -1
+} TF_DA_ATTR_INFO;
+
+typedef [uuid(1bf1c305-419b-4182-a4d2-9bfadc3f021f)]
+struct TF_DISPLAYATTRIBUTE {
+    TF_DA_COLOR      crText;
+    TF_DA_COLOR      crBk;
+    TF_DA_LINESTYLE  lsStyle;
+    BOOL             fBoldLine;
+    TF_DA_COLOR      crLine;
+    TF_DA_ATTR_INFO  bAttr;
+} TF_DISPLAYATTRIBUTE;
+
+[
+    object,
+    uuid(70528852-2f26-4aea-8c96-215150578932),
+    pointer_default(unique)
+]
+interface ITfDisplayAttributeInfo : IUnknown
+{
+    HRESULT GetGUID([out] GUID *pguid);
+
+    HRESULT GetDescription([out] BSTR *pbstrDesc);
+
+    HRESULT GetAttributeInfo([out] TF_DISPLAYATTRIBUTE *pda);
+
+    HRESULT SetAttributeInfo([in] const TF_DISPLAYATTRIBUTE *pda);
+
+    HRESULT Reset();
+}
+
+[
+    object,
+    uuid(7cef04d7-cb75-4e80-a7ab-5f5bc7d332de),
+    pointer_default(unique)
+]
+interface IEnumTfDisplayAttributeInfo : IUnknown
+{
+    HRESULT Clone([out] IEnumTfDisplayAttributeInfo **ppEnum);
+
+    HRESULT Next(
+            [in] ULONG ulCount,
+            [out, size_is(ulCount), length_is(*pcFetched)] ITfDisplayAttributeInfo **rgInfo,
+            [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip([in] ULONG ulCount);
+}
+
+[
+    object,
+    local,
+    uuid(8ded7393-5db1-475c-9e71-a39111b0ff67),
+    pointer_default(unique)
+]
+interface ITfDisplayAttributeMgr : IUnknown
+{
+    HRESULT OnUpdateInfo();
+
+    HRESULT EnumDisplayAttributeInfo([out] IEnumTfDisplayAttributeInfo **ppEnum);
+
+    HRESULT GetDisplayAttributeInfo(
+            [in] REFGUID guid,
+            [out] ITfDisplayAttributeInfo **ppInfo,
+            [out] CLSID *pclsidOwner);
+
+}
+
+[
+  object,
+  local,
+  uuid(c3acefb5-f69d-4905-938f-fcadcf4be830),
+  pointer_default(unique)
+]
+interface ITfCategoryMgr : IUnknown
+{
+    HRESULT RegisterCategory([in] REFCLSID rclsid,
+                             [in] REFGUID rcatid,
+                             [in] REFGUID rguid);
+
+    HRESULT UnregisterCategory([in] REFCLSID rclsid,
+                               [in] REFGUID rcatid,
+                               [in] REFGUID rguid);
+
+    HRESULT EnumCategoriesInItem([in] REFGUID rguid,
+                                 [out] IEnumGUID **ppEnum);
+
+    HRESULT EnumItemsInCategory([in] REFGUID rcatid,
+                                [out] IEnumGUID **ppEnum);
+
+    HRESULT FindClosestCategory([in] REFGUID rguid,
+                                [out] GUID *pcatid,
+                                [in, size_is(ulCount)] const GUID **ppcatidList,
+                                [in] ULONG ulCount);
+
+    HRESULT RegisterGUIDDescription([in] REFCLSID rclsid,
+                                    [in] REFGUID rguid,
+                                    [in, size_is(cch)] const WCHAR *pchDesc,
+                                    [in] ULONG cch);
+
+    HRESULT UnregisterGUIDDescription([in] REFCLSID rclsid,
+                                      [in] REFGUID rguid);
+
+    HRESULT GetGUIDDescription([in] REFGUID rguid,
+                               [out] BSTR *pbstrDesc);
+
+    HRESULT RegisterGUIDDWORD([in] REFCLSID rclsid,
+                              [in] REFGUID rguid,
+                              [in] DWORD dw);
+
+    HRESULT UnregisterGUIDDWORD([in] REFCLSID rclsid,
+                                [in] REFGUID rguid);
+
+    HRESULT GetGUIDDWORD([in] REFGUID rguid,
+                         [out] DWORD *pdw);
+
+    HRESULT RegisterGUID([in] REFGUID rguid,
+                         [out] TfGuidAtom *pguidatom);
+
+    HRESULT GetGUID([in] TfGuidAtom guidatom,
+                    [out] GUID *pguid);
+
+    HRESULT IsEqualTfGuidAtom([in] TfGuidAtom guidatom,
+                              [in] REFGUID rguid,
+                              [out] BOOL *pfEqual);
+};
+
+[
+  object,
+  uuid(8127d409-ccd3-4683-967a-b43d5b482bf7),
+  pointer_default(unique)
+]
+interface ITfTextEditSink : IUnknown
+{
+    HRESULT OnEndEdit(
+        [in] ITfContext *pic,
+        [in] TfEditCookie ecReadOnly,
+        [in] ITfEditRecord *pEditRecord);
+};
+
+[
+    object,
+    uuid(5F20AA40-B57A-4F34-96AB-3576F377CC79),
+    pointer_default(unique)
+]
+interface ITfContextOwnerCompositionSink : IUnknown
+{
+    HRESULT OnStartComposition(
+        [in] ITfCompositionView *pComposition,
+        [out] BOOL *pfOk);
+
+    HRESULT OnUpdateComposition(
+        [in] ITfCompositionView *pComposition,
+        [in] ITfRange *pRangeNew);
+
+    HRESULT OnEndComposition(
+        [in] ITfCompositionView *pComposition);
+};
+
+[
+  object,
+  uuid(3d61bf11-ac5f-42c8-a4cb-931bcc28c744),
+  pointer_default(unique)
+]
+interface IEnumTfLanguageProfiles : IUnknown
+{
+    HRESULT Clone(
+        [out] IEnumTfLanguageProfiles **ppEnum);
+
+    HRESULT Next(
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetch)] TF_LANGUAGEPROFILE *pProfile,
+        [out] ULONG *pcFetch);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] ULONG ulCount);
+};
+
+[
+  object,
+  local,
+  uuid(aa80e7f7-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfTextInputProcessor : IUnknown
+{
+    HRESULT Activate(
+        [in] ITfThreadMgr *ptim,
+        [in] TfClientId tid);
+
+    HRESULT Deactivate();
+};
+
+[
+  object,
+  uuid(aa80e80e-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfThreadMgrEventSink : IUnknown
+{
+    HRESULT OnInitDocumentMgr(
+        [in] ITfDocumentMgr *pdim);
+
+    HRESULT OnUninitDocumentMgr(
+        [in] ITfDocumentMgr *pdim);
+
+    HRESULT OnSetFocus(
+        [in] ITfDocumentMgr *pdimFocus,
+        [in] ITfDocumentMgr *pdimPrevFocus);
+
+    HRESULT OnPushContext(
+        [in] ITfContext *pic);
+
+    HRESULT OnPopContext(
+        [in] ITfContext *pic);
+};
+
+[
+  object,
+  local,
+  uuid(aa80e7f0-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfKeystrokeMgr : IUnknown
+{
+    HRESULT AdviseKeyEventSink(
+        [in] TfClientId tid,
+        [in] ITfKeyEventSink *pSink,
+        [in] BOOL fForeground);
+
+    HRESULT UnadviseKeyEventSink(
+        [in] TfClientId tid);
+
+    HRESULT GetForeground(
+        [out] CLSID *pclsid);
+
+    HRESULT TestKeyDown(
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT TestKeyUp(
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT KeyDown(
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT KeyUp(
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT GetPreservedKey(
+        [in] ITfContext *pic,
+        [in] const TF_PRESERVEDKEY *pprekey,
+        [out] GUID *pguid);
+
+    HRESULT IsPreservedKey(
+        [in] REFGUID rguid,
+        [in] const TF_PRESERVEDKEY *pprekey,
+        [out] BOOL *pfRegistered);
+
+    HRESULT PreserveKey(
+        [in] TfClientId tid,
+        [in] REFGUID rguid,
+        [in] const TF_PRESERVEDKEY *prekey,
+        [in, size_is(cchDesc)] const WCHAR *pchDesc,
+        [in] ULONG cchDesc);
+
+    HRESULT UnpreserveKey(
+        [in] REFGUID rguid,
+        [in] const TF_PRESERVEDKEY *pprekey);
+
+    HRESULT SetPreservedKeyDescription(
+        [in] REFGUID rguid,
+        [in, size_is(cchDesc)] const WCHAR *pchDesc,
+        [in] ULONG cchDesc);
+
+    HRESULT GetPreservedKeyDescription(
+        [in] REFGUID rguid,
+        [out] BSTR *pbstrDesc);
+
+    HRESULT SimulatePreservedKey(
+        [in] ITfContext *pic,
+        [in] REFGUID rguid,
+        [out] BOOL *pfEaten);
+};
+
+[
+  object,
+  local,
+  uuid(aa80e7f5-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfKeyEventSink : IUnknown
+{
+    HRESULT OnSetFocus(
+        [in] BOOL fForeground);
+
+    HRESULT OnTestKeyDown(
+        [in] ITfContext *pic,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT OnTestKeyUp(
+        [in] ITfContext *pic,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT OnKeyDown(
+        [in] ITfContext *pic,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT OnKeyUp(
+        [in] ITfContext *pic,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] BOOL *pfEaten);
+
+    HRESULT OnPreservedKey(
+        [in] ITfContext *pic,
+        [in] REFGUID rguid,
+        [out] BOOL *pfEaten);
+};
+
+[
+  object,
+  local,
+  uuid(8f1b8ad8-0b6b-4874-90c5-bd76011e8f7c),
+  pointer_default(unique)
+]
+interface ITfMessagePump : IUnknown
+{
+    HRESULT PeekMessageA(
+        [out] LPMSG pMsg,
+        [in] HWND hwnd,
+        [in] UINT wMsgFilterMin,
+        [in] UINT wMsgFilterMax,
+        [in] UINT wRemoveMsg,
+        [out] BOOL *pfResult);
+
+    HRESULT GetMessageA(
+        [out] LPMSG pMsg,
+        [in] HWND hwnd,
+        [in] UINT wMsgFilterMin,
+        [in] UINT wMsgFilterMax,
+        [out] BOOL *pfResult);
+
+    HRESULT PeekMessageW(
+        [out] LPMSG pMsg,
+        [in] HWND hwnd,
+        [in] UINT wMsgFilterMin,
+        [in] UINT wMsgFilterMax,
+        [in] UINT wRemoveMsg,
+        [out] BOOL *pfResult);
+
+    HRESULT GetMessageW(
+        [out] LPMSG pMsg,
+        [in] HWND hwnd,
+        [in] UINT wMsgFilterMin,
+        [in] UINT wMsgFilterMax,
+        [out] BOOL *pfResult);
+};
+
+[
+  object,
+  local,
+  uuid(d60a7b49-1b9f-4be2-b702-47e9dc05dec3),
+  pointer_default(unique)
+]
+interface ITfClientId : IUnknown
+{
+    HRESULT GetClientId(
+        [in] REFCLSID rclsid,
+        [out] TfClientId *ptid);
+};
+
+[
+  object,
+  uuid(43c9fe15-f494-4c17-9de2-b8a4ac350aa8),
+  pointer_default(unique)
+]
+interface ITfLanguageProfileNotifySink : IUnknown
+{
+    HRESULT OnLanguageChange(
+        [in] LANGID langid,
+        [out] BOOL *pfAccept);
+
+    HRESULT OnLanguageChanged();
+}
+
+[
+  object,
+  uuid(aa80e803-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfEditSession : IUnknown
+{
+    HRESULT DoEditSession(
+        [in] TfEditCookie ec);
+}
+
+[
+  object,
+  uuid(aa80e7ff-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfRange : IUnknown
+{
+    const WCHAR TF_CHAR_EMBEDDED     = TS_CHAR_EMBEDDED;
+
+    typedef [uuid(cf610f06-2882-46f6-abe5-298568b664c4)] enum { TF_GRAVITY_BACKWARD = 0, TF_GRAVITY_FORWARD = 1 } TfGravity;
+
+    typedef [uuid(1e512533-bbdc-4530-9a8e-a1dc0af67468)] enum { TF_SD_BACKWARD = 0, TF_SD_FORWARD = 1 } TfShiftDir;
+
+    const DWORD TF_HF_OBJECT         = 1;
+    const DWORD TF_TF_MOVESTART      = 1;
+    const DWORD TF_TF_IGNOREEND      = 2;
+    const DWORD TF_ST_CORRECTION     = 1;
+    const DWORD TF_IE_CORRECTION     = 1;
+
+    typedef [uuid(49930d51-7d93-448c-a48c-fea5dac192b1)] struct  TF_HALTCOND
+    {
+        ITfRange *pHaltRange;
+        TfAnchor aHaltPos;
+        DWORD dwFlags;
+    } TF_HALTCOND;
+
+    HRESULT GetText(
+        [in] TfEditCookie ec,
+        [in] DWORD dwFlags,
+        [out, size_is(cchMax), length_is(*pcch)] WCHAR *pchText,
+        [in] ULONG cchMax,
+        [out] ULONG *pcch);
+
+    HRESULT SetText(
+        [in] TfEditCookie ec,
+        [in] DWORD dwFlags,
+        [in, size_is(cch), unique] const WCHAR *pchText,
+        [in] LONG cch);
+
+    HRESULT GetFormattedText(
+        [in] TfEditCookie ec,
+        [out] IDataObject **ppDataObject);
+
+    HRESULT GetEmbedded(
+        [in] TfEditCookie ec,
+        [in] REFGUID rguidService,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown **ppunk);
+
+    HRESULT InsertEmbedded(
+        [in] TfEditCookie ec,
+        [in] DWORD dwFlags,
+        [in] IDataObject *pDataObject);
+
+    HRESULT ShiftStart(
+        [in] TfEditCookie ec,
+        [in] LONG cchReq,
+        [out] LONG *pcch,
+        [in, unique] const TF_HALTCOND *pHalt);
+
+    HRESULT ShiftEnd(
+        [in] TfEditCookie ec,
+        [in] LONG cchReq,
+        [out] LONG *pcch,
+        [in, unique] const TF_HALTCOND *pHalt);
+
+    HRESULT ShiftStartToRange(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pRange,
+        [in] TfAnchor aPos);
+
+    HRESULT ShiftEndToRange(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pRange,
+        [in] TfAnchor aPos);
+
+    HRESULT ShiftStartRegion(
+        [in] TfEditCookie ec,
+        [in] TfShiftDir dir,
+        [out] BOOL *pfNoRegion);
+
+    HRESULT ShiftEndRegion(
+        [in] TfEditCookie ec,
+        [in] TfShiftDir dir,
+        [out] BOOL *pfNoRegion);
+
+    HRESULT IsEmpty(
+        [in] TfEditCookie ec,
+        [out] BOOL *pfEmpty);
+
+    HRESULT Collapse(
+        [in] TfEditCookie ec,
+        [in] TfAnchor aPos);
+
+    HRESULT IsEqualStart(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pWith,
+        [in] TfAnchor aPos,
+        [out] BOOL *pfEqual);
+
+    HRESULT IsEqualEnd(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pWith,
+        [in] TfAnchor aPos,
+        [out] BOOL *pfEqual);
+
+    HRESULT CompareStart(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pWith,
+        [in] TfAnchor aPos,
+        [out] LONG *plResult);
+
+    HRESULT CompareEnd(
+        [in] TfEditCookie ec,
+        [in] ITfRange *pWith,
+        [in] TfAnchor aPos,
+        [out] LONG *plResult);
+
+    HRESULT AdjustForInsert(
+        [in] TfEditCookie ec,
+        [in] ULONG cchInsert,
+        [out] BOOL *pfInsertOk);
+
+    HRESULT GetGravity(
+        [out] TfGravity *pgStart,
+        [out] TfGravity *pgEnd);
+
+    HRESULT SetGravity(
+        [in] TfEditCookie ec,
+        [in] TfGravity gStart,
+        [in] TfGravity gEnd);
+
+    HRESULT Clone(
+        [out] ITfRange **ppClone);
+
+    HRESULT GetContext(
+        [out] ITfContext **ppContext);
+};
+
+[
+    object,
+    uuid(057a6296-029b-4154-b79a-0d461d4ea94c),
+    pointer_default(unique)
+]
+interface ITfRangeACP : ITfRange
+{
+    HRESULT GetExtent([out] LONG *pacpAnchor,
+                      [out] LONG *pcch);
+
+    HRESULT SetExtent([in] LONG acpAnchor,
+                      [in] LONG cch);
+}
+
+[
+    object,
+    uuid(55ce16ba-3014-41c1-9ceb-fade1446ac6c),
+    pointer_default(unique)
+]
+interface ITfInsertAtSelection : IUnknown
+{
+    const DWORD TF_IAS_NOQUERY   = 0x1;
+    const DWORD TF_IAS_QUERYONLY = 0x2;
+    const DWORD TF_IAS_NO_DEFAULT_COMPOSITION = 0x80000000;
+
+    HRESULT InsertTextAtSelection(
+        [in] TfEditCookie ec,
+        [in] DWORD dwFlags,
+        [in, size_is(cch)] const WCHAR *pchText,
+        [in] LONG cch,
+        [out] ITfRange **ppRange);
+
+    HRESULT InsertEmbeddedAtSelection(
+        [in] TfEditCookie ec,
+        [in] DWORD dwFlags,
+        [in] IDataObject *pDataObject,
+        [out] ITfRange **ppRange);
+};
+
+[
+    object,
+    uuid(6834b120-88cb-11d2-bf45-00105a2799b5),
+    pointer_default(unique)
+]
+interface ITfPropertyStore : IUnknown
+{
+    const DWORD TF_TU_CORRECTION = 0x1;
+
+    HRESULT GetType([out] GUID *pguid);
+
+    HRESULT GetDataType([out] DWORD *pdwReserved);
+
+    HRESULT GetData([out] VARIANT *pvarValue);
+
+    HRESULT OnTextUpdated(
+            [in] DWORD dwFlags,
+            [in] ITfRange *pRangeNew,
+            [out] BOOL *pfAccept);
+
+    HRESULT Shrink(
+            [in] ITfRange *pRangeNew,
+            [out] BOOL *pfFree);
+
+    HRESULT Divide(
+            [in] ITfRange *pRangeThis,
+            [in] ITfRange *pRangeNew,
+            [out] ITfPropertyStore **ppPropStore);
+
+    HRESULT Clone(
+            [out] ITfPropertyStore **pPropStore);
+
+    HRESULT GetPropertyRangeCreator(
+            [out] CLSID *pclsid);
+
+    HRESULT Serialize(
+            [in] IStream *pStream,
+            [out] ULONG *pcb);
+}
+
+[
+    object,
+    uuid(f99d3f40-8e32-11d2-bf46-00105a2799b5),
+    pointer_default(unique)
+]
+interface IEnumTfRanges : IUnknown
+{
+    HRESULT Clone([out] IEnumTfRanges **ppEnum);
+
+    HRESULT Next(
+            [in] ULONG ulCount,
+            [out, size_is(ulCount), length_is(*pcFetched)] ITfRange **ppRange,
+            [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(ULONG ulCount);
+}
+
+[
+    object,
+    uuid(5efd22Ba-7838-46cb-88e2-cadb14124f8f),
+    pointer_default(unique)
+]
+interface IEnumITfCompositionView : IUnknown
+{
+    HRESULT Clone([out] IEnumITfCompositionView **ppEnum);
+
+    HRESULT Next(
+            [in] ULONG ulCount,
+            [out, size_is(ulCount), length_is(*pcFetched)] ITfCompositionView **rgCompositionView,
+            [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip([in] ULONG ulCount);
+}
+
+[
+    object,
+    uuid(20168d64-5a8f-4a5a-b7bd-cfa29f4D0fd9),
+    pointer_default(unique)
+]
+interface ITfComposition : IUnknown
+{
+    HRESULT GetRange([out] ITfRange **ppRange);
+
+    HRESULT ShiftStart(
+            [in] TfEditCookie ecWrite,
+            [in] ITfRange *pNewStart);
+
+    HRESULT ShiftEnd(
+            [in] TfEditCookie ecWrite,
+            [in] ITfRange *pNewEnd);
+
+    HRESULT EndComposition([in] TfEditCookie ecWrite);
+}
+
+[
+    object,
+    uuid(a781718c-579a-4b15-a280-32b8577acc5e),
+    pointer_default(unique)
+]
+interface ITfCompositionSink : IUnknown
+{
+    HRESULT OnCompositionTerminated(
+            [in] TfEditCookie ecWrite,
+            [in] ITfComposition *pComposition);
+}
+
+[
+    object,
+    uuid(d40C8aae-aC92-4fc7-9a11-0ee0e23aa39b),
+    pointer_default(unique)
+]
+interface ITfContextComposition : IUnknown
+{
+    HRESULT StartComposition(
+            [in] TfEditCookie ecWrite,
+            [in] ITfRange *pCompositionRange,
+            [in] ITfCompositionSink *pSink,
+            [out] ITfComposition **ppComposition);
+
+    HRESULT EnumCompositions([out] IEnumITfCompositionView **ppEnum);
+
+    HRESULT FindComposition(
+            [in] TfEditCookie ecRead,
+            [in] ITfRange *pTestRange,
+            [out] IEnumITfCompositionView **ppEnum);
+
+    HRESULT TakeOwnership(
+            [in] TfEditCookie ecWrite,
+            [in] ITfCompositionView *pComposition,
+            [in] ITfCompositionSink *pSink,
+            [out] ITfComposition **ppComposition);
+}
+
+[
+    object,
+    uuid(86462810-593b-4916-9764-19c08e9ce110),
+    pointer_default(unique)
+]
+interface ITfContextOwnerCompositionServices : ITfContextComposition
+{
+    HRESULT TerminateComposition([in] ITfCompositionView *pComposition);
+}
+
+[
+    object,
+    uuid(4ef89150-0807-11d3-8df0-00105a2799b5),
+    pointer_default(unique)
+]
+interface ITfPersistentPropertyLoaderACP : IUnknown
+{
+    HRESULT LoadProperty(
+            [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
+            [out] IStream **ppStream);
+}
+
+[
+    object,
+    uuid(b23eb630-3e1c-11d3-a745-0050040ab407),
+    pointer_default(unique)
+]
+interface ITfContextOwnerServices : IUnknown
+{
+    HRESULT OnLayoutChange();
+
+    HRESULT OnStatusChange([in] DWORD dwFlags);
+
+    HRESULT OnAttributeChange([in] REFGUID rguidAttribute);
+
+    HRESULT Serialize(
+            [in] ITfProperty *pProp,
+            [in] ITfRange *pRange,
+            [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
+            [in] IStream *pStream);
+
+    HRESULT Unserialize(
+            [in] ITfProperty *pProp,
+            [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
+            [in] IStream *pStream,
+            [in] ITfPersistentPropertyLoaderACP *pLoader);
+
+    HRESULT ForceLoadProperty([in] ITfProperty *pProp);
+
+    HRESULT CreateRange(
+            [in] LONG acpStart,
+            [in] LONG acpEnd,
+            [out] ITfRangeACP **ppRange);
+}
+
+[
+    object,
+    uuid(17d49a3d-f8b8-4b2f-b254-52319dd64c53),
+    pointer_default(unique)
+]
+interface ITfReadOnlyProperty : IUnknown
+{
+    HRESULT GetType([out] GUID *pguid);
+
+    HRESULT EnumRanges(
+            [in] TfEditCookie ec,
+            [out] IEnumTfRanges **ppEnum,
+            [in] ITfRange *pTargetRange);
+
+    HRESULT GetValue(
+            [in] TfEditCookie ec,
+            [in] ITfRange *pRange,
+            [out] VARIANT *pvarValue);
+
+    HRESULT GetContext([out] ITfContext **ppContext);
+}
+
+[
+    object,
+    uuid(e2449660-9542-11d2-bf46-00105a2799b5),
+    pointer_default(unique)
+]
+interface ITfProperty : ITfReadOnlyProperty
+{
+    HRESULT FindRange(
+            [in] TfEditCookie ec,
+            [in] ITfRange *pRange,
+            [out] ITfRange **ppRange,
+            [in] TfAnchor aPos);
+
+    HRESULT SetValueStore(
+            [in] TfEditCookie ec,
+            [in] ITfRange *pRange,
+            [in] ITfPropertyStore *pPropStore);
+
+    HRESULT SetValue(
+            [in] TfEditCookie ec,
+            [in] ITfRange *pRange,
+            [in] const VARIANT *pvarValue);
+
+    HRESULT Clear(
+            [in] TfEditCookie ec,
+            [in] ITfRange *pRange);
+}
+
+[
+  object,
+  uuid(bb08f7a9-607a-4384-8623-056892b64371),
+  pointer_default(unique)
+]
+interface ITfCompartment : IUnknown
+{
+    HRESULT SetValue(
+        [in] TfClientId tid,
+        [in] const VARIANT *pvarValue);
+
+    HRESULT GetValue(
+        [out] VARIANT *pvarValue);
+};
+
+[
+  object,
+  uuid(7dcf57ac-18ad-438b-824d-979bffb74b7c),
+  pointer_default(unique)
+]
+interface ITfCompartmentMgr : IUnknown
+{
+    HRESULT GetCompartment(
+        [in] REFGUID rguid,
+        [out] ITfCompartment **ppcomp);
+
+    HRESULT ClearCompartment(
+        [in] TfClientId tid,
+        [in] REFGUID rguid);
+
+    HRESULT EnumCompartments(
+        [out] IEnumGUID **ppEnum);
+};
+
+[
+  object,
+  uuid(743abd5f-f26d-48df-8cc5-238492419b64),
+  pointer_default(unique)
+]
+interface ITfCompartmentEventSink : IUnknown
+{
+    HRESULT OnChange(
+        [in] REFGUID rguid);
+}
+
+[
+  object,
+  uuid(8f1a7ea6-1654-4502-a86e-b2902344d507),
+  pointer_default(unique)
+]
+interface IEnumTfContexts : IUnknown
+{
+    HRESULT Clone(
+        [out] IEnumTfContexts **ppEnum);
+
+    HRESULT Next(
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetched)] ITfContext **rgContext,
+        [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] ULONG ulCount);
+};
+
+[
+  object,
+  uuid(aa80e808-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface IEnumTfDocumentMgrs : IUnknown
+{
+    HRESULT Clone(
+        [out] IEnumTfDocumentMgrs **ppEnum);
+
+    HRESULT Next(
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetched)] ITfDocumentMgr **rgDocumentMgr,
+        [out] ULONG *pcFetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] ULONG ulCount);
+};
+
+[
+  object,
+  uuid(73131f9c-56a9-49dd-b0ee-d046633f7528),
+  pointer_default(unique)
+]
+interface ITfSourceSingle : IUnknown
+{
+    HRESULT AdviseSingleSink(
+        [in] TfClientId tid,
+        [in] REFIID riid,
+        [in, iid_is(riid)] IUnknown *punk);
+
+    HRESULT UnadviseSingleSink(
+        [in] TfClientId tid,
+        [in] REFIID riid);
+};
+
+[
+  object,
+  local,
+  uuid(c0f1db0c-3a20-405c-a303-96b6010a885f),
+  pointer_default(unique)
+]
+interface ITfThreadFocusSink : IUnknown
+{
+    HRESULT OnSetThreadFocus();
+
+    HRESULT OnKillThreadFocus();
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl
new file mode 100644
index 0000000..2fec429
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "oledb.idl";
+
+[
+    object,
+    pointer_default(unique),
+    uuid(0c733a8d-2a1c-11ce-ade5-00aa0044773d)
+]
+interface IDataConvert : IUnknown
+{
+    typedef DWORD DBDATACONVERT;
+
+    enum DBDATACONVERTENUM
+    {
+        DBDATACONVERT_DEFAULT = 0,
+        DBDATACONVERT_SETDATABEHAVIOR = 1,
+        DBDATACONVERT_LENGTHFROMNTS = 2,
+        DBDATACONVERT_DSTISFIXEDLENGTH = 4,
+        DBDATACONVERT_DECIMALSCALE = 8
+    };
+
+    [local] HRESULT DataConvert([in] DBTYPE wSrcType,
+                                [in] DBTYPE wDstType,
+                                [in] DBLENGTH cbSrcLength,
+                                [in, out] DBLENGTH *pcbDstLength,
+                                [in] void *pSrc,
+                                [out] void *pDst,
+                                [in] DBLENGTH cbDstMaxLength,
+                                [in] DBSTATUS dbsSrcStatus,
+                                [out] DBSTATUS *pdbsDstStatus,
+                                [in] BYTE bPrecision,
+                                [in] BYTE bScale,
+                                [in] DBDATACONVERT dwFlags);
+
+
+    HRESULT CanConvert([in] DBTYPE wSrcType,
+                       [in] DBTYPE wDstType);
+
+
+    [local] HRESULT GetConversionSize([in] DBTYPE wSrcType,
+                                      [in] DBTYPE wDstType,
+                                      [in] DBLENGTH *pcbSrcLength,
+                                      [out] DBLENGTH *pcbDstLength,
+                                      [in, size_is(*pcbSrcLength)] void *pSrc);
+};
+
+[
+    object,
+    pointer_default(unique),
+    uuid(0c733a9c-2a1c-11ce-ade5-00aa0044773d)
+]
+interface IDCInfo : IUnknown
+{
+    typedef DWORD DCINFOTYPE;
+
+    enum DCINFOTYPEENUM
+    {
+        DCINFOTYPE_VERSION = 1
+    };
+
+    typedef struct tagDCINFO
+    {
+        DCINFOTYPE eInfoType;
+        VARIANT vData;
+    } DCINFO;
+
+    HRESULT GetInfo([in] ULONG cInfo,
+                    [in, size_is(cInfo)] DCINFOTYPE rgeInfoType[],
+                    [out, size_is(cInfo)] DCINFO **prgInfo);
+
+    HRESULT SetInfo([in] ULONG cInfo,
+                    [in, size_is(cInfo)] DCINFO prgInfo[]);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h
new file mode 100644
index 0000000..dba15de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSDAGUID_H
+#define __WINE_MSDAGUID_H
+
+DEFINE_GUID(CLSID_EXTENDEDERRORINFO,       0xc8b522cf, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+DEFINE_GUID(CLSID_OLEDB_ENUMERATOR,        0xc8b522d0, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+DEFINE_GUID(CLSID_OLEDB_CONVERSIONLIBRARY, 0xc8b522d1, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+DEFINE_GUID(CLSID_OLEDB_ROWPOSITIONLIBRARY,0x2048eee6, 0x7fa2, 0x11d0, 0x9e, 0x6a, 0x00, 0xa0, 0xc9, 0x13, 0x8c, 0x29);
+
+#endif /*__WINE_MSDAGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl
new file mode 100644
index 0000000..3320f51
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2012 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "oledb.idl";
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+typedef LONG_PTR COMPATIBLE_LONG;
+
+[
+    uuid(2206CEB0-19C1-11D1-89E0-00C04FD7A829),
+    version(1.0)
+]
+library MSDASC
+{
+    importlib("stdole2.tlb");
+
+    typedef DWORD DBPROMPTOPTIONS;
+
+    typedef enum tagDBPROMPTOPTIONSENUM
+    {
+        DBPROMPTOPTIONS_NONE                        = 0x00,
+        DBPROMPTOPTIONS_WIZARDSHEET                 = 0x01,
+        DBPROMPTOPTIONS_PROPERTYSHEET               = 0x02,
+        DBPROMPTOPTIONS_BROWSEONLY                  = 0x08,
+        DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION  = 0x10,
+        DBPROMPTOPTIONS_DISABLESAVEPASSWORD         = 0x20
+    } DBPROMPTOPTIONSENUM;
+
+    [
+      odl,
+      uuid(2206CCB2-19C1-11D1-89E0-00C04FD7A829),
+      helpstring("OLE DB Service Component Automation Interface"),
+      dual,
+      oleautomation
+    ]
+    interface IDataSourceLocator : IDispatch
+    {
+        [id(0x60020000), propget]
+        HRESULT hWnd([out, retval] COMPATIBLE_LONG* phwndParent);
+
+        [id(0x60020000), propput]
+        HRESULT hWnd([in] COMPATIBLE_LONG hwndParent);
+
+        [id(0x60020002), helpstring("PromptNew")]
+        HRESULT PromptNew([out, retval] IDispatch** ppADOConnection);
+
+        [id(0x60020003), helpstring("PromptEdit")]
+        HRESULT PromptEdit([in, out] IDispatch** ppADOConnection, [out, retval] VARIANT_BOOL* pbSuccess);
+    }
+
+    [
+      odl,
+      uuid(2206CCB0-19C1-11D1-89E0-00C04FD7A829),
+      restricted
+    ]
+    interface IDBPromptInitialize : IUnknown
+    {
+        HRESULT _stdcall PromptDataSource([in] IUnknown* pUnkOuter, [in] HWND hWndParent,
+            [in] DBPROMPTOPTIONS dwPromptOptions, [in] ULONG cSourceTypeFilter,
+            [in] DBSOURCETYPE* rgSourceTypeFilter, [in] LPWSTR pwszszzProviderFilter,
+            [in] GUID* riid, [in, out] IUnknown** ppDataSource);
+
+        HRESULT _stdcall PromptFileName([in] HWND hWndParent, [in] ULONG dwPromptOptions,
+            [in] LPWSTR pwszInitialDirectory, [in] LPWSTR pwszInitialFile, [out] LPWSTR* ppwszSelectedFile);
+    }
+
+    [
+      uuid(2206CCB1-19C1-11D1-89E0-00C04FD7A829),
+    ]
+    interface IDataInitialize : IUnknown
+    {
+        HRESULT GetDataSource([in] IUnknown* pUnkOuter, [in]  DWORD dwClsCtx,
+                        [in] LPWSTR pwszInitializationString, [in] REFIID riid,
+                        [in, out] IUnknown** ppDataSource);
+
+        HRESULT GetInitializationString([in] IUnknown* pDataSource, [in] boolean fIncludePassword,
+                        [out] LPWSTR* ppwszInitString);
+
+        HRESULT CreateDBInstance([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter,
+                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,
+                        [in] REFIID riid, [out] IUnknown** ppDataSource);
+
+        HRESULT RemoteCreateDBInstanceEx([in] REFCLSID clsidProvider,  [in] IUnknown* pUnkOuter,
+                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,  [in] COSERVERINFO* pServerInfo,
+                        [in] DWORD cmq,  [in] GUID** rgpIID,  [out] IUnknown** rgpItf,
+                        [out] HRESULT* rghr);
+
+        HRESULT LoadStringFromStorage([in] LPWSTR pwszFileName, [out] LPWSTR* ppwszInitializationString);
+
+        HRESULT WriteStringToStorage([in] LPWSTR pwszFileName,  [in] LPWSTR pwszInitializationString,
+                        [in] DWORD dwCreationDisposition);
+    }
+
+    [
+      uuid(2206CDB0-19C1-11D1-89E0-00C04FD7A829),
+      threading(both),
+      progid("MSDASC.MSDAINITIALIZE.1"),
+      vi_progid("MSDASC.MSDAINITIALIZE"),
+    ]
+    coclass MSDAINITIALIZE
+    {
+        [default] interface IDataInitialize;
+    }
+
+    [
+      uuid(2206CDB2-19C1-11D1-89E0-00C04FD7A829),
+      threading(both),
+      progid("DataLinks")
+    ]
+    coclass DataLinks
+    {
+        [default] interface IDataSourceLocator;
+        interface IDBPromptInitialize;
+        interface IDataInitialize;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h
new file mode 100644
index 0000000..84c5ed8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h
@@ -0,0 +1,434 @@
+/*
+ * Copyright 2006 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __mshtmcid_h__
+#define __mshtmcid_h__
+
+#define IDM_UNKNOWN                 0
+#define IDM_ALIGNBOTTOM             1
+#define IDM_ALIGNHORIZONTALCENTERS  2
+#define IDM_ALIGNLEFT               3
+#define IDM_ALIGNRIGHT              4
+#define IDM_ALIGNTOGRID             5
+#define IDM_ALIGNTOP                6
+#define IDM_ALIGNVERTICALCENTERS    7
+#define IDM_ARRANGEBOTTOM           8
+#define IDM_ARRANGERIGHT            9
+#define IDM_BRINGFORWARD            10
+#define IDM_BRINGTOFRONT            11
+#define IDM_CENTERHORIZONTALLY      12
+#define IDM_CENTERVERTICALLY        13
+#define IDM_CODE                    14
+#define IDM_COPY                    15
+#define IDM_CUT                     16
+#define IDM_DELETE                  17
+#define IDM_FONTNAME                18
+#define IDM_FONTSIZE                19
+#define IDM_GROUP                   20
+#define IDM_HORIZSPACECONCATENATE   21
+#define IDM_HORIZSPACEDECREASE      22
+#define IDM_HORIZSPACEINCREASE      23
+#define IDM_HORIZSPACEMAKEEQUAL     24
+#define IDM_INSERTOBJECT            25
+#define IDM_PASTE                   26
+#define IDM_PRINT                   27
+#define IDM_PROPERTIES              28
+#define IDM_REDO                    29
+#define IDM_MULTILEVELREDO          30
+#define IDM_SELECTALL               31
+#define IDM_SENDBACKWARD            32
+#define IDM_SENDTOBACK              33
+#define IDM_SHOWTABLE               34
+#define IDM_SIZETOCONTROL           35
+#define IDM_SIZETOCONTROLHEIGHT     36
+#define IDM_SIZETOCONTROLWIDTH      37
+#define IDM_SIZETOFIT               38
+#define IDM_SIZETOGRID              39
+#define IDM_SNAPTOGRID              40
+#define IDM_TABORDER                41
+#define IDM_TOOLBOX                 42
+#define IDM_UNDO                    43
+#define IDM_MULTILEVELUNDO          44
+#define IDM_UNGROUP                 45
+#define IDM_VERTSPACECONCATENATE    46
+#define IDM_VERTSPACEDECREASE       47
+#define IDM_VERTSPACEINCREASE       48
+#define IDM_VERTSPACEMAKEEQUAL      49
+#define IDM_JUSTIFYFULL             50
+#define IDM_ZOOMPERCENT             50
+#define IDM_BACKCOLOR               51
+#define IDM_BOLD                    52
+#define IDM_BORDERCOLOR             53
+#define IDM_FLAT                    54
+#define IDM_FORECOLOR               55
+#define IDM_ITALIC                  56
+#define IDM_JUSTIFYCENTER           57
+#define IDM_JUSTIFYGENERAL          58
+#define IDM_JUSTIFYLEFT             59
+#define IDM_JUSTIFYRIGHT            60
+#define IDM_RAISED                  61
+#define IDM_SUNKEN                  62
+#define IDM_UNDERLINE               63
+#define IDM_CHISELED                64
+#define IDM_ETCHED                  65
+#define IDM_SHADOWED                66
+#define IDM_FIND                    67
+#define IDM_GETZOOM                 68
+#define IDM_SHOWGRID                69
+#define IDM_SAVE                    70
+#define IDM_SAVEAS                  71
+#define IDM_OBJECTVERBLIST0         72
+#define IDM_OBJECTVERBLIST1         73
+#define IDM_OBJECTVERBLIST2         74
+#define IDM_OBJECTVERBLIST3         75
+#define IDM_OBJECTVERBLIST4         76
+#define IDM_OBJECTVERBLIST5         77
+#define IDM_OBJECTVERBLIST6         78
+#define IDM_OBJECTVERBLIST7         79
+#define IDM_OBJECTVERBLIST8         80
+#define IDM_OBJECTVERBLIST9         81
+
+#define IDM_OBJECTVERBLISTLAST      IDM_OBJECTVERBLIST9
+
+#define IDM_CONVERTOBJECT           82
+#define IDM_CUSTOMCONTROL           83
+#define IDM_CUSTOMIZEITEM           84
+#define IDM_RENAME                  85
+#define IDM_IMPORT                  86
+#define IDM_NEWPAGE                 87
+#define IDM_MOVE                    88
+#define IDM_CANCEL                  89
+#define IDM_FONT                    90
+#define IDM_STRIKETHROUGH           91
+#define IDM_DELETEWORD              92
+#define IDM_EXECPRINT               93
+#define IDM_JUSTIFYNONE             94
+#define IDM_TRISTATEBOLD            95
+#define IDM_TRISTATEITALIC          96
+#define IDM_TRISTATEUNDERLINE       97
+
+#define IDM_OPEN                          2000
+#define IDM_NEW                           2001
+#define IDM_SAVECOPYAS                    2002
+#define IDM_PRINTPREVIEW                  2003
+#define IDM_PAGESETUP                     2004
+#define IDM_SPELL                         2005
+#define IDM_PASTESPECIAL                  2006
+#define IDM_CLEARSELECTION                2007
+#define IDM_FOLLOW_ANCHOR                 2008
+
+#define IDM_SHOWPRINT                     2010
+#define IDM_SHOWPAGESETUP                 2011
+
+#define IDM_INSINPUTIMAGE                 2114
+#define IDM_INSINPUTBUTTON                2115
+#define IDM_INSINPUTRESET                 2116
+#define IDM_INSINPUTSUBMIT                2117
+#define IDM_INSINPUTUPLOAD                2118
+#define IDM_INSFIELDSET                   2119
+#define IDM_PASTEINSERT                   2120
+#define IDM_REPLACE                       2121
+#define IDM_EDITSOURCE                    2122
+#define IDM_BOOKMARK                      2123
+#define IDM_HYPERLINK                     2124
+#define IDM_UNLINK                        2125
+#define IDM_BROWSEMODE                    2126
+#define IDM_EDITMODE                      2127
+#define IDM_UNBOOKMARK                    2128
+
+#define IDM_TOOLBARS                      2130
+#define IDM_STATUSBAR                     2131
+#define IDM_FORMATMARK                    2132
+#define IDM_TEXTONLY                      2133
+
+#define IDM_OPTIONS                       2135
+#define IDM_FOLLOWLINKC                   2136
+#define IDM_FOLLOWLINKN                   2137
+#define IDM_STOP                          2138
+#define IDM_VIEWSOURCE                    2139
+#define IDM_ZOOMPOPUP                     2140
+#define IDM_BASELINEFONT1                 2141
+#define IDM_BASELINEFONT2                 2142
+#define IDM_BASELINEFONT3                 2143
+#define IDM_BASELINEFONT4                 2144
+#define IDM_BASELINEFONT5                 2145
+
+#define IDM_HORIZONTALLINE                2150
+#define IDM_LINEBREAKNORMAL               2151
+#define IDM_LINEBREAKLEFT                 2152
+#define IDM_LINEBREAKRIGHT                2153
+#define IDM_LINEBREAKBOTH                 2154
+#define IDM_NONBREAK                      2155
+#define IDM_SPECIALCHAR                   2156
+#define IDM_HTMLSOURCE                    2157
+#define IDM_IFRAME                        2158
+#define IDM_HTMLCONTAIN                   2159
+
+#define IDM_TEXTBOX                       2161
+#define IDM_TEXTAREA                      2162
+#define IDM_CHECKBOX                      2163
+#define IDM_RADIOBUTTON                   2164
+#define IDM_DROPDOWNBOX                   2165
+#define IDM_LISTBOX                       2166
+#define IDM_BUTTON                        2167
+#define IDM_IMAGE                         2168
+#define IDM_OBJECT                        2169
+#define IDM_1D                            2170
+#define IDM_IMAGEMAP                      2171
+#define IDM_FILE                          2172
+#define IDM_COMMENT                       2173
+#define IDM_SCRIPT                        2174
+#define IDM_JAVAAPPLET                    2175
+#define IDM_PLUGIN                        2176
+#define IDM_PAGEBREAK                     2177
+#define IDM_HTMLAREA                      2178
+
+#define IDM_PARAGRAPH                     2180
+#define IDM_FORM                          2181
+#define IDM_MARQUEE                       2182
+#define IDM_LIST                          2183
+#define IDM_ORDERLIST                     2184
+#define IDM_UNORDERLIST                   2185
+#define IDM_INDENT                        2186
+#define IDM_OUTDENT                       2187
+#define IDM_PREFORMATTED                  2188
+#define IDM_ADDRESS                       2189
+#define IDM_BLINK                         2190
+#define IDM_DIV                           2191
+
+#define IDM_TABLEINSERT                   2200
+#define IDM_RCINSERT                      2201
+#define IDM_CELLINSERT                    2202
+#define IDM_CAPTIONINSERT                 2203
+#define IDM_CELLMERGE                     2204
+#define IDM_CELLSPLIT                     2205
+#define IDM_CELLSELECT                    2206
+#define IDM_ROWSELECT                     2207
+#define IDM_COLUMNSELECT                  2208
+#define IDM_TABLESELECT                   2209
+#define IDM_TABLEPROPERTIES               2210
+#define IDM_CELLPROPERTIES                2211
+#define IDM_ROWINSERT                     2212
+#define IDM_COLUMNINSERT                  2213
+
+#define IDM_HELP_CONTENT                  2220
+#define IDM_HELP_ABOUT                    2221
+#define IDM_HELP_README                   2222
+
+#define IDM_REMOVEFORMAT                  2230
+#define IDM_PAGEINFO                      2231
+#define IDM_TELETYPE                      2232
+#define IDM_GETBLOCKFMTS                  2233
+#define IDM_BLOCKFMT                      2234
+#define IDM_SHOWHIDE_CODE                 2235
+#define IDM_TABLE                         2236
+#define IDM_COPYFORMAT                    2237
+#define IDM_PASTEFORMAT                   2238
+#define IDM_GOTO                          2239
+#define IDM_CHANGEFONT                    2240
+#define IDM_CHANGEFONTSIZE                2241
+
+#define IDM_CHANGECASE                    2246
+#define IDM_SUBSCRIPT                     2247
+#define IDM_SUPERSCRIPT                   2248
+#define IDM_SHOWSPECIALCHAR               2249
+#define IDM_CENTERALIGNPARA               2250
+#define IDM_LEFTALIGNPARA                 2251
+#define IDM_RIGHTALIGNPARA                2252
+#define IDM_REMOVEPARAFORMAT              2253
+#define IDM_APPLYNORMAL                   2254
+#define IDM_APPLYHEADING1                 2255
+#define IDM_APPLYHEADING2                 2256
+#define IDM_APPLYHEADING3                 2257
+
+#define IDM_DOCPROPERTIES                 2260
+#define IDM_ADDFAVORITES                  2261
+#define IDM_COPYSHORTCUT                  2262
+#define IDM_SAVEBACKGROUND                2263
+#define IDM_SETWALLPAPER                  2264
+#define IDM_COPYBACKGROUND                2265
+#define IDM_CREATESHORTCUT                2266
+#define IDM_PAGE                          2267
+#define IDM_SAVETARGET                    2268
+#define IDM_SHOWPICTURE                   2269
+#define IDM_SAVEPICTURE                   2270
+#define IDM_DYNSRCPLAY                    2271
+#define IDM_DYNSRCSTOP                    2272
+#define IDM_PRINTTARGET                   2273
+#define IDM_IMGARTPLAY                    2274
+#define IDM_IMGARTSTOP                    2275
+#define IDM_IMGARTREWIND                  2276
+#define IDM_PRINTQUERYJOBSPENDING         2277
+#define IDM_SETDESKTOPITEM                2278
+
+#define IDM_CONTEXTMENU                   2280
+
+#define IDM_GOBACKWARD                    2282
+#define IDM_GOFORWARD                     2283
+#define IDM_PRESTOP                       2284
+
+#define IDM_MP_MYPICS                     2287
+#define IDM_MP_EMAILPICTURE               2288
+#define IDM_MP_PRINTPICTURE               2289
+#define IDM_CREATELINK                    2290
+#define IDM_COPYCONTENT                   2291
+#define IDM_LANGUAGE                      2292
+ 
+#define IDM_GETPRINTTEMPLATE              2295
+#define IDM_SETPRINTTEMPLATE              2296
+#define IDM_TEMPLATE_PAGESETUP            2298
+
+#define IDM_REFRESH                       2300
+#define IDM_STOPDOWNLOAD                  2301
+#define IDM_ENABLE_INTERACTION            2302
+
+#define IDM_LAUNCHDEBUGGER                2310
+#define IDM_BREAKATNEXT                   2311
+#define IDM_INSINPUTHIDDEN                2312
+#define IDM_INSINPUTPASSWORD              2313
+#define IDM_OVERWRITE                     2314
+#define IDM_PARSECOMPLETE                 2315
+#define IDM_HTMLEDITMODE                  2316
+#define IDM_REGISTRYREFRESH               2317
+#define IDM_COMPOSESETTINGS               2318
+
+#define IDM_SHOWMISCTAGS                  2320
+#define IDM_SHOWALIGNEDSITETAGS           2321
+#define IDM_SHOWSCRIPTTAGS                2322
+#define IDM_SHOWSTYLETAGS                 2323
+#define IDM_SHOWCOMMENTTAGS               2324
+#define IDM_SHOWAREATAGS                  2325
+#define IDM_SHOWUNKNOWNTAGS               2326
+#define IDM_SHOWALLTAGS                   2327
+#define IDM_SHOWZEROBORDERATDESIGNTIME    2328
+#define IDM_AUTODETECT                    2329
+#define IDM_SCRIPTDEBUGGER                2330
+#define IDM_GETBYTESDOWNLOADED            2331
+#define IDM_NOACTIVATENORMALOLECONTROLS   2332
+#define IDM_NOACTIVATEDESIGNTIMECONTROLS  2333
+#define IDM_NOACTIVATEJAVAAPPLETS         2334
+#define IDM_NOFIXUPURLSONPASTE            2335
+#define IDM_EMPTYGLYPHTABLE               2336
+#define IDM_ADDTOGLYPHTABLE               2337
+#define IDM_REMOVEFROMGLYPHTABLE          2338
+#define IDM_REPLACEGLYPHCONTENTS          2339
+#define IDM_SHOWWBRTAGS                   2340
+#define IDM_PERSISTSTREAMSYNC             2341
+#define IDM_SETDIRTY                      2342
+#define IDM_RUNURLSCRIPT                  2343
+
+#ifdef IE5_ZOOM
+#define IDM_ZOOMRATIO                     2344
+#define IDM_GETZOOMNUMERATOR              2345
+#define IDM_GETZOOMDENOMINATOR            2346
+#endif
+
+#define IDM_DIRLTR                        2350
+#define IDM_DIRRTL                        2351
+#define IDM_BLOCKDIRLTR                   2352
+#define IDM_BLOCKDIRRTL                   2353
+#define IDM_INLINEDIRLTR                  2354
+#define IDM_INLINEDIRRTL                  2355
+#define IDM_ISTRUSTEDDLG                  2356
+#define IDM_INSERTSPAN                    2357
+#define IDM_LOCALIZEEDITOR                2358
+
+#define IDM_SAVEPRETRANSFORMSOURCE        2370
+#define IDM_VIEWPRETRANSFORMSOURCE        2371
+
+#define IDM_SCROLL_HERE                   2380
+#define IDM_SCROLL_TOP                    2381
+#define IDM_SCROLL_BOTTOM                 2382
+#define IDM_SCROLL_PAGEUP                 2383
+#define IDM_SCROLL_PAGEDOWN               2384
+#define IDM_SCROLL_UP                     2385
+#define IDM_SCROLL_DOWN                   2386
+#define IDM_SCROLL_LEFTEDGE               2387
+#define IDM_SCROLL_RIGHTEDGE              2388
+#define IDM_SCROLL_PAGELEFT               2389
+#define IDM_SCROLL_PAGERIGHT              2390
+#define IDM_SCROLL_LEFT                   2391
+#define IDM_SCROLL_RIGHT                  2392
+#define IDM_MULTIPLESELECTION             2393
+#define IDM_2D_POSITION                   2394
+#define IDM_2D_ELEMENT                    2395
+#define IDM_1D_ELEMENT                    2396
+#define IDM_ABSOLUTE_POSITION             2397
+#define IDM_LIVERESIZE                    2398
+#define IDM_ATOMICSELECTION               2399
+#define IDM_AUTOURLDETECT_MODE            2400
+#define IDM_IE50_PASTE                    2401
+#define IDM_IE50_PASTE_MODE               2402
+#define IDM_GETIPRINT                     2403
+#define IDM_DISABLE_EDITFOCUS_UI          2404
+#define IDM_RESPECTVISIBILITY_INDESIGN    2405
+#define IDM_CSSEDITING_LEVEL              2406
+#define IDM_UI_OUTDENT                    2407
+#define IDM_UPDATEPAGESTATUS              2408
+#define IDM_IME_ENABLE_RECONVERSION       2409
+#define IDM_KEEPSELECTION                 2410
+#define IDM_UNLOADDOCUMENT                2411
+
+#define IDM_OVERRIDE_CURSOR               2420
+
+#define IDM_PEERHITTESTSAMEINEDIT         2423
+
+#define IDM_TRUSTAPPCACHE                 2425
+
+#define IDM_BACKGROUNDIMAGECACHE          2430
+
+#define IDM_MIMECSET__FIRST_  3609
+#define IDM_MIMECSET__LAST__  3699
+
+#define IDM_MENUEXT_FIRST__  3700
+#define IDM_MENUEXT_LAST__   3732
+#define IDM_MENUEXT_COUNT    3733
+
+#define IDM_DEFAULTBLOCK  6046
+
+#define IDM_NEW_TOPLEVELWINDOW  7050
+
+#define IDM_PRESERVEUNDOALWAYS    6049
+#define IDM_PERSISTDEFAULTVALUES  7100
+#define IDM_PROTECTMETATAGS       7101
+
+#define IDM_GETFRAMEZONE  6037
+
+#define IDM_FIRE_PRINTTEMPLATEUP    15000
+#define IDM_FIRE_PRINTTEMPLATEDOWN  15001
+#define IDM_SETPRINTHANDLES         15002
+
+#define CMD_ZOOM_PAGEWIDTH  -1
+#define CMD_ZOOM_ONEPAGE    -2
+#define CMD_ZOOM_TWOPAGES   -3
+#define CMD_ZOOM_SELECTION  -4
+#define CMD_ZOOM_FIT -5
+
+#define IDM_CONTEXT  1
+#define IDM_HWND     2
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h
new file mode 100644
index 0000000..0d75d89
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h
@@ -0,0 +1,3105 @@
+/*
+ * Copyright 2004,2006 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSHTMDID_H__
+#define __MSHTMDID_H__
+
+#define DISPID_NORMAL_FIRST     1000
+#define DISPID_IE8_NORMAL_FIRST (DISPID_NORMAL_FIRST+150)
+
+#define DISPID_OMDOCUMENT       DISPID_NORMAL_FIRST
+#define DISPID_DATATRANSFER     DISPID_NORMAL_FIRST
+#define DISPID_ANCHOR           DISPID_NORMAL_FIRST
+#define DISPID_BLOCK            DISPID_NORMAL_FIRST
+#define DISPID_BR               DISPID_NORMAL_FIRST
+#define DISPID_BGSOUND          DISPID_NORMAL_FIRST
+#define DISPID_DD               DISPID_NORMAL_FIRST
+#define DISPID_DIR              DISPID_NORMAL_FIRST
+#define DISPID_DIV              DISPID_NORMAL_FIRST
+#define DISPID_DL               DISPID_NORMAL_FIRST
+#define DISPID_DT               DISPID_NORMAL_FIRST
+#define DISPID_EFONT            DISPID_NORMAL_FIRST
+#define DISPID_FORM             DISPID_NORMAL_FIRST
+#define DISPID_HEADER           DISPID_NORMAL_FIRST
+#define DISPID_HEDELEMS         DISPID_NORMAL_FIRST
+#define DISPID_HR               DISPID_NORMAL_FIRST
+#define DISPID_LABEL            DISPID_NORMAL_FIRST
+#define DISPID_LI               DISPID_NORMAL_FIRST
+#define DISPID_IMGBASE          DISPID_NORMAL_FIRST
+#define DISPID_MENU             DISPID_NORMAL_FIRST
+#define DISPID_OL               DISPID_NORMAL_FIRST
+#define DISPID_PARA             DISPID_NORMAL_FIRST
+#define DISPID_SELECT           DISPID_NORMAL_FIRST
+#define DISPID_SELECTOBJ        DISPID_NORMAL_FIRST
+#define DISPID_TABLE            DISPID_NORMAL_FIRST
+#define DISPID_TEXTSITE         DISPID_NORMAL_FIRST
+#define DISPID_UL               DISPID_NORMAL_FIRST
+#define DISPID_PHRASE           DISPID_NORMAL_FIRST
+#define DISPID_UNKNOWNPDL       DISPID_NORMAL_FIRST
+#define DISPID_COMMENTPDL       DISPID_NORMAL_FIRST
+#define DISPID_RANGE            DISPID_NORMAL_FIRST
+#define DISPID_SELECTION        DISPID_NORMAL_FIRST
+#define DISPID_OPTION           DISPID_NORMAL_FIRST
+#define DISPID_RANGE            DISPID_NORMAL_FIRST
+#define DISPID_SELECTION        DISPID_NORMAL_FIRST
+#define DISPID_OPTION           DISPID_NORMAL_FIRST
+#define DISPID_RANGE            DISPID_NORMAL_FIRST
+#define DISPID_SELECTION        DISPID_NORMAL_FIRST
+#define DISPID_OPTION           DISPID_NORMAL_FIRST
+#define DISPID_RANGE            DISPID_NORMAL_FIRST
+#define DISPID_SELECTION        DISPID_NORMAL_FIRST
+#define DISPID_OPTION           DISPID_NORMAL_FIRST
+#define DISPID_RANGE            DISPID_NORMAL_FIRST
+#define DISPID_SELECTION        DISPID_NORMAL_FIRST
+#define DISPID_OPTION           DISPID_NORMAL_FIRST
+#define DISPID_MAP              DISPID_NORMAL_FIRST
+#define DISPID_AREA             DISPID_NORMAL_FIRST
+#define DISPID_PARAM            DISPID_NORMAL_FIRST
+#define DISPID_TABLESECTION     DISPID_NORMAL_FIRST
+#define DISPID_TABLEROW         DISPID_NORMAL_FIRST
+#define DISPID_TABLECOL         DISPID_NORMAL_FIRST
+#define DISPID_SCRIPT           DISPID_NORMAL_FIRST
+#define DISPID_STYLESHEET       DISPID_NORMAL_FIRST
+#define DISPID_STYLERULE        DISPID_NORMAL_FIRST
+#define DISPID_STYLEPAGE        DISPID_NORMAL_FIRST
+#define DISPID_STYLESHEETS_COL  DISPID_NORMAL_FIRST
+#define DISPID_STYLERULES_COL   DISPID_NORMAL_FIRST
+#define DISPID_STYLEPAGES_COL   DISPID_NORMAL_FIRST
+#define DISPID_MIMETYPES_COL    DISPID_NORMAL_FIRST
+#define DISPID_PLUGINS_COL      DISPID_NORMAL_FIRST
+#define DISPID_2D               DISPID_NORMAL_FIRST
+#define DISPID_OMWINDOW         DISPID_NORMAL_FIRST
+#define DISPID_EVENTOBJ         DISPID_NORMAL_FIRST
+#define DISPID_OLESITE          DISPID_NORMAL_FIRST
+#define DISPID_FRAMESET         DISPID_NORMAL_FIRST
+#define DISPID_LINK             DISPID_NORMAL_FIRST
+#define DISPID_STYLEELEMENT     DISPID_NORMAL_FIRST
+#define DISPID_FILTERS          DISPID_NORMAL_FIRST
+#define DISPID_TABLESECTION     DISPID_NORMAL_FIRST
+#define DISPID_OMRECT           DISPID_NORMAL_FIRST
+#define DISPID_OMDOCUMENT       DISPID_NORMAL_FIRST
+#define DISPID_SCREEN           DISPID_NORMAL_FIRST
+#define DISPID_DOMATTRIBUTE     DISPID_NORMAL_FIRST
+#define DISPID_DOMTEXTNODE      DISPID_NORMAL_FIRST
+#define DISPID_GENERIC          DISPID_NORMAL_FIRST
+#define DISPID_URN_COLL         DISPID_NORMAL_FIRST
+#define DISPID_NAMESPACE_COLLECTION               DISPID_NORMAL_FIRST
+#define DISPID_NAMESPACE                          DISPID_NORMAL_FIRST
+#define DISPID_TAGNAMES_COLLECTION                DISPID_NORMAL_FIRST
+#define DISPID_XMLHTTPREQUEST                     DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFO_COLLECTION  DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFO             DISPID_NORMAL_FIRST
+#define DISPID_XDOMAINREQUEST   DISPID_NORMAL_FIRST
+#define DISPID_DOMSTORAGEITEM   DISPID_NORMAL_FIRST
+#define DISPID_DOMSTORAGE       DISPID_NORMAL_FIRST
+#define DISPID_DOMSTORAGELIST   DISPID_NORMAL_FIRST
+#define DISPID_RULESAPPLIED     DISPID_NORMAL_FIRST
+#define DISPID_RULESAPPLIED_COLLECTION            DISPID_NORMAL_FIRST
+#define DISPID_STYLESHEETRULESAPPLIED_COLLECTION  DISPID_NORMAL_FIRST
+#define DISPID_PROCESSINGINSTRUCTION              DISPID_NORMAL_FIRST
+
+#define DISPID_DOMEVENT                           DISPID_NORMAL_FIRST
+#define DISPID_DOMUIEVENT                         (DISPID_DOMEVENT+25)
+#define DISPID_DOMMOUSEEVENT                      (DISPID_DOMUIEVENT+25)
+#define DISPID_DOMMOUSEWHEELEVENT                 (DISPID_DOMMOUSEEVENT+25)
+#define DISPID_DOMWHEELEVENT                      (DISPID_DOMMOUSEWHEELEVENT+25)
+#define DISPID_DOMTEXTEVENT                       (DISPID_DOMWHEELEVENT+25)
+#define DISPID_DOMKEYBOARDEVENT                   (DISPID_DOMTEXTEVENT+25)
+#define DISPID_DOMCOMPOSITIONEVENT                (DISPID_DOMKEYBOARDEVENT+25)
+#define DISPID_DOMCUSTOMEVENT                     (DISPID_DOMCOMPOSITIONEVENT+25)
+#define DISPID_DOMMUTATIONEVENT                   (DISPID_DOMCUSTOMEVENT+25)
+#define DISPID_DOMFOCUSEVENT                      (DISPID_DOMMUTATIONEVENT+25)
+#define DISPID_SVGZOOMEVENT                       (DISPID_DOMFOCUSEVENT+25)
+#define DISPID_DOMSITEMODEEVENT                   (DISPID_SVGZOOMEVENT+25)
+#define DISPID_DOMMESSAGEEVENT                    (DISPID_DOMSITEMODEEVENT+25)
+#define DISPID_DOMSTORAGEEVENT                    (DISPID_DOMMESSAGEEVENT+25)
+#define DISPID_DOMBEFOREUNLOADEVENT               (DISPID_DOMSTORAGEEVENT+25)
+#define DISPID_DOMDRAGEVENT                       (DISPID_DOMBEFOREUNLOADEVENT+25)
+
+#define DISPID_DOMIMPLEMENTATION  DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFO  DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION  DISPID_NORMAL_FIRST
+
+#define DISPID_IE8_ANCHOR        DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_AREA          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_BASE          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_BODY          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_FORM          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_HEAD          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_IMG           DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_INPUT         DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_LINK          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_MOD           DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_SCRIPT        DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_ATTR          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_NAMEDNODEMAP  DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_COLLECTION    DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_PARAM         DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_EMBED         DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_BLOCK         DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_META          DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_STYLE         DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_SELECT        DISPID_IE8_NORMAL_FIRST
+
+#define DISPID_IE8_ELEMENTBASE  (DISPID_ELEMENT+200)
+#define DISPID_IE8_ELEMENTMAX   (DISPID_SITE-1)
+#define DISPID_IE8_ELEMENT      DISPID_IE8_ELEMENTBASE
+
+#define DISPID_IE8_FRAMESITEBASE  (DISPID_FRAMESITE+1120)
+#define DISPID_IE8_FRAMEMAX       (WEBOC_DISPIDBASE-1)
+#define DISPID_IE8_FRAME          DISPID_IE8_FRAMESITEBASE
+#define DISPID_IE8_IFRAME         DISPID_IE8_FRAMESITEBASE
+
+#define DISPID_IE8_OBJECTBASE  (DISPID_OBJECT+30)
+#define DISPID_IE8_OBJECTMAX   (DISPID_STYLE-1)
+#define DISPID_IE8_OBJECT      DISPID_IE8_OBJECTBASE
+
+#define DISPID_COLLECTION      (DISPID_NORMAL_FIRST+500)
+#define DISPID_OPTIONS_COL     (DISPID_NORMAL_FIRST+500)
+#define DISPID_IMG             (DISPID_IMGBASE+1000)
+#define DISPID_INPUTIMAGE      (DISPID_IMGBASE+1000)
+#define DISPID_INPUT           (DISPID_TEXTSITE+1000)
+#define DISPID_TABLECELL       (DISPID_TEXTSITE+1000)
+#define DISPID_1D              (DISPID_TEXTSITE+1000)
+#define DISPID_BODY            (DISPID_TEXTSITE+1000)
+#define DISPID_INPUTTEXTBASE   (DISPID_INPUT+1000)
+#define DISPID_INPUTTEXT       (DISPID_INPUTTEXTBASE+1000)
+#define DISPID_TEXTAREA        (DISPID_INPUTTEXT+1000)
+#define DISPID_MARQUEE         (DISPID_TEXTAREA+1000)
+#define DISPID_RICHTEXT        (DISPID_MARQUEE+1000)
+#define DISPID_BUTTON          (DISPID_RICHTEXT+1000)
+
+#define DISPID_XOBJ_MIN       0x80010000
+#define DISPID_XOBJ_MAX       0x8001FFFF
+#define DISPID_XOBJ_BASE      DISPID_XOBJ_MIN
+#define DISPID_HTMLOBJECT     (DISPID_XOBJ_BASE+500)
+#define DISPID_ELEMENT        (DISPID_HTMLOBJECT+500)
+#define DISPID_SITE           (DISPID_ELEMENT+1000)
+#define DISPID_OBJECT         (DISPID_SITE+1000)
+#define DISPID_STYLE          (DISPID_OBJECT+1000)
+#define DISPID_ATTRS          (DISPID_STYLE+1000)
+#define DISPID_EVENTS         (DISPID_ATTRS+1000)
+#define DISPID_XOBJ_EXPANDO   (DISPID_EVENTS+1000)
+#define DISPID_XOBJ_ORDINAL   (DISPID_XOBJ_EXPANDO+1000)
+#define DISPID_RADIO          (DISPID_CHECKBOX+1000)
+#define DISPID_FRAMESITE      (DISPID_SITE+1000)
+#define DISPID_FRAME          (DISPID_FRAMESITE+1000)
+#define DISPID_IFRAME         (DISPID_FRAMESITE+1000)
+
+#define DISPID_WINDOW      1
+#define DISPID_HISTORY     1
+#define DISPID_LOCATION    1
+#define DISPID_NAVIGATOR   1
+
+#define STDPROPID_XOBJ_NAME              (DISPID_XOBJ_BASE+0)
+#define STDPROPID_XOBJ_INDEX             (DISPID_XOBJ_BASE+1)
+#define STDPROPID_XOBJ_BASEHREF          (DISPID_XOBJ_BASE+2)
+#define STDPROPID_XOBJ_LEFT              (DISPID_XOBJ_BASE+3)
+#define STDPROPID_XOBJ_TOP               (DISPID_XOBJ_BASE+4)
+#define STDPROPID_XOBJ_WIDTH             (DISPID_XOBJ_BASE+5)
+#define STDPROPID_XOBJ_HEIGHT            (DISPID_XOBJ_BASE+6)
+#define STDPROPID_XOBJ_VISIBLE           (DISPID_XOBJ_BASE+7)
+#define STDPROPID_XOBJ_PARENT            (DISPID_XOBJ_BASE+8)
+#define STDPROPID_XOBJ_DRAGMODE          (DISPID_XOBJ_BASE+9)
+#define STDPROPID_XOBJ_DRAGICON          (DISPID_XOBJ_BASE+10)
+#define STDPROPID_XOBJ_TAG               (DISPID_XOBJ_BASE+11)
+#define STDPROPID_XOBJ_TABSTOP           (DISPID_XOBJ_BASE+14)
+#define STDPROPID_XOBJ_TABINDEX          (DISPID_XOBJ_BASE+15)
+#define STDPROPID_XOBJ_HELPCONTEXTID     (DISPID_XOBJ_BASE+50)
+#define STDPROPID_XOBJ_DEFAULT           (DISPID_XOBJ_BASE+55)
+#define STDPROPID_XOBJ_CANCEL            (DISPID_XOBJ_BASE+56)
+#define STDPROPID_XOBJ_LEFTNORUN         (DISPID_XOBJ_BASE+57)
+#define STDPROPID_XOBJ_TOPNORUN          (DISPID_XOBJ_BASE+58)
+#define STDPROPID_XOBJ_ALIGNPERSIST      (DISPID_XOBJ_BASE+60)
+#define STDPROPID_XOBJ_LINKTIMEOUT       (DISPID_XOBJ_BASE+61)
+#define STDPROPID_XOBJ_LINKTOPIC         (DISPID_XOBJ_BASE+62)
+#define STDPROPID_XOBJ_LINKITEM          (DISPID_XOBJ_BASE+63)
+#define STDPROPID_XOBJ_LINKMODE          (DISPID_XOBJ_BASE+64)
+#define STDPROPID_XOBJ_DATACHANGED       (DISPID_XOBJ_BASE+65)
+#define STDPROPID_XOBJ_DATAFIELD         (DISPID_XOBJ_BASE+66)
+#define STDPROPID_XOBJ_DATASOURCE        (DISPID_XOBJ_BASE+67)
+#define STDPROPID_XOBJ_WHATSTHISHELPID   (DISPID_XOBJ_BASE+68)
+#define STDPROPID_XOBJ_CONTROLTIPTEXT    (DISPID_XOBJ_BASE+69)
+#define STDPROPID_XOBJ_STATUSBARTEXT     (DISPID_XOBJ_BASE+70)
+#define STDPROPID_XOBJ_APPLICATION       (DISPID_XOBJ_BASE+71)
+#define STDPROPID_XOBJ_BLOCKALIGN        (DISPID_XOBJ_BASE+72)
+#define STDPROPID_XOBJ_CONTROLALIGN      (DISPID_XOBJ_BASE+73)
+#define STDPROPID_XOBJ_STYLE             (DISPID_XOBJ_BASE+74)
+#define STDPROPID_XOBJ_COUNT             (DISPID_XOBJ_BASE+75)
+#define STDPROPID_XOBJ_DISABLED          (DISPID_XOBJ_BASE+76)
+#define STDPROPID_XOBJ_RIGHT             (DISPID_XOBJ_BASE+77)
+#define STDPROPID_XOBJ_BOTTOM            (DISPID_XOBJ_BASE+78)
+
+#define STDDISPID_XOBJ_ONBLUR             (DISPID_XOBJ_BASE+0)
+#define STDDISPID_XOBJ_ONFOCUS            (DISPID_XOBJ_BASE+1)
+#define STDDISPID_XOBJ_BEFOREUPDATE       (DISPID_XOBJ_BASE+4)
+#define STDDISPID_XOBJ_AFTERUPDATE        (DISPID_XOBJ_BASE+5)
+#define STDDISPID_XOBJ_ONROWEXIT          (DISPID_XOBJ_BASE+6)
+#define STDDISPID_XOBJ_ONROWENTER         (DISPID_XOBJ_BASE+7)
+#define STDDISPID_XOBJ_ONMOUSEOVER        (DISPID_XOBJ_BASE+8)
+#define STDDISPID_XOBJ_ONMOUSEOUT         (DISPID_XOBJ_BASE+9)
+#define STDDISPID_XOBJ_ONHELP             (DISPID_XOBJ_BASE+10)
+#define STDDISPID_XOBJ_ONDRAGSTART        (DISPID_XOBJ_BASE+11)
+#define STDDISPID_XOBJ_ONSELECTSTART      (DISPID_XOBJ_BASE+12)
+#define STDDISPID_XOBJ_ERRORUPDATE        (DISPID_XOBJ_BASE+13)
+#define STDDISPID_XOBJ_ONDATASETCHANGED   (DISPID_XOBJ_BASE+14)
+#define STDDISPID_XOBJ_ONDATAAVAILABLE    (DISPID_XOBJ_BASE+15)
+#define STDDISPID_XOBJ_ONDATASETCOMPLETE  (DISPID_XOBJ_BASE+16)
+#define STDDISPID_XOBJ_ONFILTER           (DISPID_XOBJ_BASE+17)
+#define STDDISPID_XOBJ_ONLOSECAPTURE      (DISPID_XOBJ_BASE+18)
+#define STDDISPID_XOBJ_ONPROPERTYCHANGE   (DISPID_XOBJ_BASE+19)
+#define STDDISPID_XOBJ_ONDRAG             (DISPID_XOBJ_BASE+20)
+#define STDDISPID_XOBJ_ONDRAGEND          (DISPID_XOBJ_BASE+21)
+#define STDDISPID_XOBJ_ONDRAGENTER        (DISPID_XOBJ_BASE+22)
+#define STDDISPID_XOBJ_ONDRAGOVER         (DISPID_XOBJ_BASE+23)
+#define STDDISPID_XOBJ_ONDRAGLEAVE        (DISPID_XOBJ_BASE+24)
+#define STDDISPID_XOBJ_ONDROP             (DISPID_XOBJ_BASE+25)
+#define STDDISPID_XOBJ_ONCUT              (DISPID_XOBJ_BASE+26)
+#define STDDISPID_XOBJ_ONCOPY             (DISPID_XOBJ_BASE+27)
+#define STDDISPID_XOBJ_ONPASTE            (DISPID_XOBJ_BASE+28)
+#define STDDISPID_XOBJ_ONBEFORECUT        (DISPID_XOBJ_BASE+29)
+#define STDDISPID_XOBJ_ONBEFORECOPY       (DISPID_XOBJ_BASE+30)
+#define STDDISPID_XOBJ_ONBEFOREPASTE      (DISPID_XOBJ_BASE+31)
+#define STDDISPID_XOBJ_ONROWSDELETE       (DISPID_XOBJ_BASE+32)
+#define STDDISPID_XOBJ_ONROWSINSERTED     (DISPID_XOBJ_BASE+33)
+#define STDDISPID_XOBJ_ONCELLCHANGE       (DISPID_XOBJ_BASE+34)
+
+#define DISPID_A_FIRST                       DISPID_ATTRS
+#define DISPID_A_BACKGROUNDIMAGE             (DISPID_A_FIRST+1)
+#define DISPID_A_COLOR                       (DISPID_A_FIRST+2)
+#define DISPID_A_TEXTTRANSFORM               (DISPID_A_FIRST+4)
+#define DISPID_A_NOWRAP                      (DISPID_A_FIRST+5)
+#define DISPID_A_LINEHEIGHT                  (DISPID_A_FIRST+6)
+#define DISPID_A_TEXTINDENT                  (DISPID_A_FIRST+7)
+#define DISPID_A_LETTERSPACING               (DISPID_A_FIRST+8)
+#define DISPID_A_LANG                        (DISPID_A_FIRST+9)
+#define DISPID_A_OVERFLOW                    (DISPID_A_FIRST+10)
+#define DISPID_A_PADDING                     (DISPID_A_FIRST+11)
+#define DISPID_A_PADDINGTOP                  (DISPID_A_FIRST+12)
+#define DISPID_A_PADDINGRIGHT                (DISPID_A_FIRST+13)
+#define DISPID_A_PADDINGBOTTOM               (DISPID_A_FIRST+14)
+#define DISPID_A_PADDINGLEFT                 (DISPID_A_FIRST+15)
+#define DISPID_A_CLEAR                       (DISPID_A_FIRST+16)
+#define DISPID_A_LISTTYPE                    (DISPID_A_FIRST+17)
+#define DISPID_A_FONTFACE                    (DISPID_A_FIRST+18)
+#define DISPID_A_FONTSIZE                    (DISPID_A_FIRST+19)
+#define DISPID_A_TEXTDECORATIONLINETHROUGH   (DISPID_A_FIRST+20)
+#define DISPID_A_TEXTDECORATIONUNDERLINE     (DISPID_A_FIRST+21)
+#define DISPID_A_TEXTDECORATIONBLINK         (DISPID_A_FIRST+22)
+#define DISPID_A_TEXTDECORATIONNONE          (DISPID_A_FIRST+23)
+#define DISPID_A_FONTSTYLE                   (DISPID_A_FIRST+24)
+#define DISPID_A_FONTVARIANT                 (DISPID_A_FIRST+25)
+#define DISPID_A_BASEFONT                    (DISPID_A_FIRST+26)
+#define DISPID_A_FONTWEIGHT                  (DISPID_A_FIRST+27)
+#define DISPID_A_TABLEBORDERCOLOR            (DISPID_A_FIRST+28)
+#define DISPID_A_TABLEBORDERCOLORLIGHT       (DISPID_A_FIRST+29)
+#define DISPID_A_TABLEBORDERCOLORDARK        (DISPID_A_FIRST+30)
+#define DISPID_A_TABLEVALIGN                 (DISPID_A_FIRST+31)
+#define DISPID_A_BACKGROUND                  (DISPID_A_FIRST+32)
+#define DISPID_A_BACKGROUNDPOSX              (DISPID_A_FIRST+33)
+#define DISPID_A_BACKGROUNDPOSY              (DISPID_A_FIRST+34)
+#define DISPID_A_TEXTDECORATION              (DISPID_A_FIRST+35)
+#define DISPID_A_MARGIN                      (DISPID_A_FIRST+36)
+#define DISPID_A_MARGINTOP                   (DISPID_A_FIRST+37)
+#define DISPID_A_MARGINRIGHT                 (DISPID_A_FIRST+38)
+#define DISPID_A_MARGINBOTTOM                (DISPID_A_FIRST+39)
+#define DISPID_A_MARGINLEFT                  (DISPID_A_FIRST+40)
+#define DISPID_A_FONT                        (DISPID_A_FIRST+41)
+#define DISPID_A_FONTSIZEKEYWORD             (DISPID_A_FIRST+42)
+#define DISPID_A_FONTSIZECOMBINE             (DISPID_A_FIRST+43)
+#define DISPID_A_BACKGROUNDREPEAT            (DISPID_A_FIRST+44)
+#define DISPID_A_BACKGROUNDATTACHMENT        (DISPID_A_FIRST+45)
+#define DISPID_A_BACKGROUNDPOSITION          (DISPID_A_FIRST+46)
+#define DISPID_A_WORDSPACING                 (DISPID_A_FIRST+47)
+#define DISPID_A_VERTICALALIGN               (DISPID_A_FIRST+48)
+#define DISPID_A_BORDER                      (DISPID_A_FIRST+49)
+#define DISPID_A_BORDERTOP                   (DISPID_A_FIRST+50)
+#define DISPID_A_BORDERRIGHT                 (DISPID_A_FIRST+51)
+#define DISPID_A_BORDERBOTTOM                (DISPID_A_FIRST+52)
+#define DISPID_A_BORDERLEFT                  (DISPID_A_FIRST+53)
+#define DISPID_A_BORDERCOLOR                 (DISPID_A_FIRST+54)
+#define DISPID_A_BORDERTOPCOLOR              (DISPID_A_FIRST+55)
+#define DISPID_A_BORDERRIGHTCOLOR            (DISPID_A_FIRST+56)
+#define DISPID_A_BORDERBOTTOMCOLOR           (DISPID_A_FIRST+57)
+#define DISPID_A_BORDERLEFTCOLOR             (DISPID_A_FIRST+58)
+#define DISPID_A_BORDERWIDTH                 (DISPID_A_FIRST+59)
+#define DISPID_A_BORDERTOPWIDTH              (DISPID_A_FIRST+60)
+#define DISPID_A_BORDERRIGHTWIDTH            (DISPID_A_FIRST+61)
+#define DISPID_A_BORDERBOTTOMWIDTH           (DISPID_A_FIRST+62)
+#define DISPID_A_BORDERLEFTWIDTH             (DISPID_A_FIRST+63)
+#define DISPID_A_BORDERSTYLE                 (DISPID_A_FIRST+64)
+#define DISPID_A_BORDERTOPSTYLE              (DISPID_A_FIRST+65)
+#define DISPID_A_BORDERRIGHTSTYLE            (DISPID_A_FIRST+66)
+#define DISPID_A_BORDERBOTTOMSTYLE           (DISPID_A_FIRST+67)
+#define DISPID_A_BORDERLEFTSTYLE             (DISPID_A_FIRST+68)
+#define DISPID_A_TEXTDECORATIONOVERLINE      (DISPID_A_FIRST+69)
+#define DISPID_A_FLOAT                       (DISPID_A_FIRST+70)
+#define DISPID_A_DISPLAY                     (DISPID_A_FIRST+71)
+#define DISPID_A_LISTSTYLETYPE               (DISPID_A_FIRST+72)
+#define DISPID_A_LISTSTYLEPOSITION           (DISPID_A_FIRST+73)
+#define DISPID_A_LISTSTYLEIMAGE              (DISPID_A_FIRST+74)
+#define DISPID_A_LISTSTYLE                   (DISPID_A_FIRST+75)
+#define DISPID_A_WHITESPACE                  (DISPID_A_FIRST+76)
+#define DISPID_A_PAGEBREAKBEFORE             (DISPID_A_FIRST+77)
+#define DISPID_A_PAGEBREAKAFTER              (DISPID_A_FIRST+78)
+#define DISPID_A_SCROLL                      (DISPID_A_FIRST+79)
+#define DISPID_A_VISIBILITY                  (DISPID_A_FIRST+80)
+#define DISPID_A_HIDDEN                      (DISPID_A_FIRST+81)
+#define DISPID_A_FILTER                      (DISPID_A_FIRST+82)
+#define DISPID_DEFAULTVALUE                  (DISPID_A_FIRST+83)
+#define DISPID_A_BORDERCOLLAPSE              (DISPID_A_FIRST+84)
+#define DISPID_A_POSITION                    (DISPID_A_FIRST+90)
+#define DISPID_A_ZINDEX                      (DISPID_A_FIRST+91)
+#define DISPID_A_CLIP                        (DISPID_A_FIRST+92)
+#define DISPID_A_CLIPRECTTOP                 (DISPID_A_FIRST+93)
+#define DISPID_A_CLIPRECTRIGHT               (DISPID_A_FIRST+94)
+#define DISPID_A_CLIPRECTBOTTOM              (DISPID_A_FIRST+95)
+#define DISPID_A_CLIPRECTLEFT                (DISPID_A_FIRST+96)
+#define DISPID_A_FONTFACESRC                 (DISPID_A_FIRST+97)
+#define DISPID_A_TABLELAYOUT                 (DISPID_A_FIRST+98)
+#define DISPID_A_STYLETEXT                   (DISPID_A_FIRST+99)
+#define DISPID_A_LANGUAGE                    (DISPID_A_FIRST+100)
+#define DISPID_A_VALUE                       (DISPID_A_FIRST+101)
+#define DISPID_A_CURSOR                      (DISPID_A_FIRST+102)
+#define DISPID_A_EVENTSINK                   (DISPID_A_FIRST+103)
+#define DISPID_A_PROPNOTIFYSINK              (DISPID_A_FIRST+104)
+#define DISPID_A_ROWSETNOTIFYSINK            (DISPID_A_FIRST+105)
+#define DISPID_INTERNAL_INLINESTYLEAA        (DISPID_A_FIRST+106)
+#define DISPID_INTERNAL_CSTYLEPTRCACHE       (DISPID_A_FIRST+107)
+#define DISPID_INTERNAL_CRUNTIMESTYLEPTRCACHE  (DISPID_A_FIRST+108)
+#define DISPID_INTERNAL_INVOKECONTEXT        (DISPID_A_FIRST+109)
+#define DISPID_A_BGURLIMGCTXCACHEINDEX       (DISPID_A_FIRST+110)
+#define DISPID_A_LIURLIMGCTXCACHEINDEX       (DISPID_A_FIRST+111)
+#define DISPID_A_ROWSETASYNCHNOTIFYSINK      (DISPID_A_FIRST+112)
+#define DISPID_INTERNAL_FILTERPTRCACHE       (DISPID_A_FIRST+113)
+#define DISPID_A_ROWPOSITIONCHANGESINK       (DISPID_A_FIRST+114)
+#define DISPID_A_BEHAVIOR                    (DISPID_A_FIRST+115)
+#define DISPID_A_READYSTATE                  (DISPID_A_FIRST+116)
+#define DISPID_A_DIR                         (DISPID_A_FIRST+117)
+#define DISPID_A_UNICODEBIDI                 (DISPID_A_FIRST+118)
+#define DISPID_A_DIRECTION                   (DISPID_A_FIRST+119)
+#define DISPID_A_IMEMODE                     (DISPID_A_FIRST+120)
+#define DISPID_A_RUBYALIGN                   (DISPID_A_FIRST+121)
+#define DISPID_A_RUBYPOSITION                (DISPID_A_FIRST+122)
+#define DISPID_A_RUBYOVERHANG                (DISPID_A_FIRST+123)
+#define DISPID_INTERNAL_ONBEHAVIOR_CONTENTREADY   (DISPID_A_FIRST+124)
+#define DISPID_INTERNAL_ONBEHAVIOR_DOCUMENTREADY  (DISPID_A_FIRST+125)
+#define DISPID_INTERNAL_CDOMCHILDRENPTRCACHE (DISPID_A_FIRST+126)
+#define DISPID_A_LAYOUTGRIDCHAR              (DISPID_A_FIRST+127)
+#define DISPID_A_LAYOUTGRIDLINE              (DISPID_A_FIRST+128)
+#define DISPID_A_LAYOUTGRIDMODE              (DISPID_A_FIRST+129)
+#define DISPID_A_LAYOUTGRIDTYPE              (DISPID_A_FIRST+130)
+#define DISPID_A_LAYOUTGRID                  (DISPID_A_FIRST+131)
+#define DISPID_A_TEXTAUTOSPACE               (DISPID_A_FIRST+132)
+#define DISPID_A_LINEBREAK                   (DISPID_A_FIRST+133)
+#define DISPID_A_WORDBREAK                   (DISPID_A_FIRST+134)
+#define DISPID_A_TEXTJUSTIFY                 (DISPID_A_FIRST+135)
+#define DISPID_A_TEXTJUSTIFYTRIM             (DISPID_A_FIRST+136)
+#define DISPID_A_TEXTKASHIDA                 (DISPID_A_FIRST+137)
+#define DISPID_A_OVERFLOWX                   (DISPID_A_FIRST+139)
+#define DISPID_A_OVERFLOWY                   (DISPID_A_FIRST+140)
+#define DISPID_A_HTCDISPATCHITEM_VALUE       (DISPID_A_FIRST+141)
+#define DISPID_A_DOCFRAGMENT                 (DISPID_A_FIRST+142)
+#define DISPID_A_HTCDD_ELEMENT               (DISPID_A_FIRST+143)
+#define DISPID_A_HTCDD_CREATEEVENTOBJECT     (DISPID_A_FIRST+144)
+#define DISPID_A_URNATOM                     (DISPID_A_FIRST+145)
+#define DISPID_A_UNIQUEPEERNUMBER            (DISPID_A_FIRST+146)
+#define DISPID_A_ACCELERATOR                 (DISPID_A_FIRST+147)
+#define DISPID_INTERNAL_ONBEHAVIOR_APPLYSTYLE       (DISPID_A_FIRST+148)
+#define DISPID_INTERNAL_RUNTIMESTYLEAA              (DISPID_A_FIRST+149)
+#define DISPID_A_HTCDISPATCHITEM_VALUE_SCRIPTSONLY  (DISPID_A_FIRST+150)
+#define DISPID_A_EXTENDEDTAGDESC             (DISPID_A_FIRST+151)
+#define DISPID_A_ROTATE                      (DISPID_A_FIRST+152)
+#define DISPID_A_ZOOM                        (DISPID_A_FIRST+153)
+#define DISPID_A_HTCDD_PROTECTEDELEMENT      (DISPID_A_FIRST+154)
+#define DISPID_A_LAYOUTFLOW                  (DISPID_A_FIRST+155)
+#define DISPID_A_HTCDD_ISMARKUPSHARED        (DISPID_A_FIRST+157)
+#define DISPID_A_WORDWRAP                    (DISPID_A_FIRST+158)
+#define DISPID_A_TEXTUNDERLINEPOSITION       (DISPID_A_FIRST+159)
+#define DISPID_A_HASLAYOUT                   (DISPID_A_FIRST+160)
+#define DISPID_A_MEDIA                       (DISPID_A_FIRST+161)
+#define DISPID_A_EDITABLE                    (DISPID_A_FIRST+162)
+#define DISPID_A_HIDEFOCUS                   (DISPID_A_FIRST+163)
+#define DISPID_INTERNAL_LAYOUTRECTREGISTRYPTRCACHE  (DISPID_A_FIRST+164)
+#define DISPID_A_HTCDD_DEFAULTS              (DISPID_A_FIRST+165)
+#define DISPID_A_TEXTLINETHROUGHSTYLE        (DISPID_A_FIRST+166)
+#define DISPID_A_TEXTUNDERLINESTYLE          (DISPID_A_FIRST+167)
+#define DISPID_A_TEXTEFFECT                  (DISPID_A_FIRST+168)
+#define DISPID_A_TEXTBACKGROUNDCOLOR         (DISPID_A_FIRST+169)
+#define DISPID_A_RENDERINGPRIORITY           (DISPID_A_FIRST+170)
+#define DISPID_INTERNAL_DWNPOSTPTRCACHE      (DISPID_A_FIRST+171)
+#define DISPID_INTERNAL_CODEPAGESETTINGSPTRCACHE  (DISPID_A_FIRST+172)
+#define DISPID_INTERNAL_DWNDOCPTRCACHE       (DISPID_A_FIRST+173)
+#define DISPID_INTERNAL_DATABINDTASKPTRCACHE (DISPID_A_FIRST+174)
+#define DISPID_INTERNAL_URLLOCATIONCACHE     (DISPID_A_FIRST+175)
+#define DISPID_INTERNAL_ARYELEMENTRELEASENOTIFYPTRCACHE  (DISPID_A_FIRST+176)
+#define DISPID_INTERNAL_PEERFACTORYURLMAPPTRCACHE        (DISPID_A_FIRST+177)
+#define DISPID_INTERNAL_STMDIRTYPTRCACHE     (DISPID_A_FIRST+178)
+#define DISPID_INTERNAL_COMPUTEFORMATSTATECACHE  (DISPID_A_FIRST+179)
+#define DISPID_A_SCROLLBARBASECOLOR          (DISPID_A_FIRST+180)
+#define DISPID_A_SCROLLBARFACECOLOR          (DISPID_A_FIRST+181)
+#define DISPID_A_SCROLLBAR3DLIGHTCOLOR       (DISPID_A_FIRST+182)
+#define DISPID_A_SCROLLBARSHADOWCOLOR        (DISPID_A_FIRST+183)
+#define DISPID_A_SCROLLBARHIGHLIGHTCOLOR     (DISPID_A_FIRST+184)
+#define DISPID_A_SCROLLBARDARKSHADOWCOLOR    (DISPID_A_FIRST+185)
+#define DISPID_A_SCROLLBARARROWCOLOR         (DISPID_A_FIRST+186)
+#define DISPID_INTERNAL_ONBEHAVIOR_CONTENTSAVE  (DISPID_A_FIRST+187)
+#define DISPID_A_DEFAULTTEXTSELECTION        (DISPID_A_FIRST+188)
+#define DISPID_A_TEXTDECORATIONCOLOR         (DISPID_A_FIRST+189)
+#define DISPID_A_TEXTCOLOR                   (DISPID_A_FIRST+190)
+#define DISPID_A_STYLETEXTDECORATION         (DISPID_A_FIRST+191)
+#define DISPID_A_WRITINGMODE                 (DISPID_A_FIRST+192)
+#define DISPID_INTERNAL_MEDIA_REFERENCE      (DISPID_A_FIRST+193)
+#define DISPID_INTERNAL_GENERICCOMPLUSREF    (DISPID_A_FIRST+194)
+#define DISPID_INTERNAL_FOCUSITEMS           (DISPID_A_FIRST+195)
+#define DISPID_A_SCROLLBARTRACKCOLOR         (DISPID_A_FIRST+196)
+#define DISPID_INTERNAL_DWNHEADERCACHE       (DISPID_A_FIRST+197)
+#define DISPID_A_FROZEN                      (DISPID_A_FIRST+198)
+#define DISPID_A_VIEWINHERITSTYLE            (DISPID_A_FIRST+199)
+#define DISPID_INTERNAL_FRAMESCOLLECTION     (DISPID_A_FIRST+200)
+#define DISPID_A_BGURLIMGCTXCACHEINDEX_FLINE (DISPID_A_FIRST+201)
+#define DISPID_A_BGURLIMGCTXCACHEINDEX_FLETTER  (DISPID_A_FIRST+202)
+#define DISPID_A_TEXTALIGNLAST               (DISPID_A_FIRST+203)
+#define DISPID_A_TEXTKASHIDASPACE            (DISPID_A_FIRST+204)
+#define DISPID_INTERNAL_FONTHISTORYINDEX     (DISPID_A_FIRST+205)
+#define DISPID_A_ALLOWTRANSPARENCY           (DISPID_A_FIRST+206)
+#define DISPID_INTERNAL_URLSEARCHCACHE       (DISPID_A_FIRST+207)
+#define DISPID_A_ISBLOCK                     (DISPID_A_FIRST+208)
+#define DISPID_A_TEXTOVERFLOW                (DISPID_A_FIRST+209)
+#define DISPID_INTERNAL_CATTRIBUTECOLLPTRCACHE  (DISPID_A_FIRST+210)
+#define DISPID_A_MINHEIGHT                   (DISPID_A_FIRST+211)
+#define DISPID_INTERNAL_INVOKECONTEXTDOCUMENT   (DISPID_A_FIRST+212)
+#define DISPID_A_INTERPOLATION               (DISPID_A_FIRST+213)
+#define DISPID_A_MAXHEIGHT                   (DISPID_A_FIRST+214)
+#define DISPID_A_MINWIDTH                    (DISPID_A_FIRST+215)
+#define DISPID_A_MAXWIDTH                    (DISPID_A_FIRST+216)
+#define DISPID_INTERNAL_ARYOBJECTRELEASECLEANUPPTRCACHE  (DISPID_A_FIRST+217)
+#define DISPID_A_CONTENT                     (DISPID_A_FIRST+218)
+#define DISPID_A_CAPTIONSIDE                 (DISPID_A_FIRST+219)
+#define DISPID_A_COUNTERINCREMENT            (DISPID_A_FIRST+220)
+#define DISPID_A_COUNTERRESET                (DISPID_A_FIRST+221)
+#define DISPID_A_OUTLINE                     (DISPID_A_FIRST+222)
+#define DISPID_A_OUTLINEWIDTH                (DISPID_A_FIRST+223)
+#define DISPID_A_OUTLINESTYLE                (DISPID_A_FIRST+224)
+#define DISPID_A_OUTLINECOLOR                (DISPID_A_FIRST+225)
+#define DISPID_A_BOXSIZING                   (DISPID_A_FIRST+226)
+#define DISPID_A_BORDERSPACING               (DISPID_A_FIRST+227)
+#define DISPID_A_ORPHANS                     (DISPID_A_FIRST+228)
+#define DISPID_A_WIDOWS                      (DISPID_A_FIRST+229)
+#define DISPID_A_PAGEBREAKINSIDE             (DISPID_A_FIRST+230)
+#define DISPID_A_MS_BEHAVIOR                 (DISPID_A_FIRST+231)
+#define DISPID_A_MS_SCROLLBARBASECOLOR       (DISPID_A_FIRST+232)
+#define DISPID_A_MS_SCROLLBARFACECOLOR       (DISPID_A_FIRST+233)
+#define DISPID_A_MS_SCROLLBAR3DLIGHTCOLOR    (DISPID_A_FIRST+234)
+#define DISPID_A_MS_SCROLLBARSHADOWCOLOR     (DISPID_A_FIRST+235)
+#define DISPID_A_MS_SCROLLBARHIGHLIGHTCOLOR  (DISPID_A_FIRST+236)
+#define DISPID_A_MS_SCROLLBARDARKSHADOWCOLOR (DISPID_A_FIRST+237)
+#define DISPID_A_MS_SCROLLBARARROWCOLOR      (DISPID_A_FIRST+238)
+#define DISPID_A_MS_SCROLLBARTRACKCOLOR      (DISPID_A_FIRST+239)
+#define DISPID_A_MS_TEXTALIGNLAST            (DISPID_A_FIRST+240)
+#define DISPID_A_MS_TEXTOVERFLOW             (DISPID_A_FIRST+241)
+#define DISPID_A_MS_TEXTUNDERLINEPOSITION    (DISPID_A_FIRST+242)
+#define DISPID_A_MS_WRITINGMODE              (DISPID_A_FIRST+243)
+#define DISPID_A_MS_IMEMODE                  (DISPID_A_FIRST+244)
+#define DISPID_A_MS_BACKGROUNDPOSX           (DISPID_A_FIRST+245)
+#define DISPID_A_MS_BACKGROUNDPOSY           (DISPID_A_FIRST+246)
+#define DISPID_A_MS_ACCELERATOR              (DISPID_A_FIRST+247)
+#define DISPID_A_MS_LAYOUTFLOW               (DISPID_A_FIRST+248)
+#define DISPID_A_MS_ZOOM                     (DISPID_A_FIRST+249)
+#define DISPID_A_EMPTYCELLS                  (DISPID_A_FIRST+250)
+#define DISPID_A_MS_BLOCKPROGRESSION         (DISPID_A_FIRST+251)
+#define DISPID_A_QUOTES                      (DISPID_A_FIRST+252)
+
+#define DISPID_WINDOWOBJECT          (-5500)
+#define DISPID_LOCATIONOBJECT        (-5506)
+#define DISPID_HISTORYOBJECT         (-5507)
+#define DISPID_NAVIGATOROBJECT       (-5508)
+#define DISPID_SECURITYCTX           (-5511)
+#define DISPID_AMBIENT_DLCONTROL     (-5512)
+#define DISPID_AMBIENT_USERAGENT     (-5513)
+#define DISPID_SECURITYDOMAIN        (-5514)
+
+#define DLCTL_DLIMAGES               0x00000010
+#define DLCTL_VIDEOS                 0x00000020
+#define DLCTL_BGSOUNDS               0x00000040
+#define DLCTL_NO_SCRIPTS             0x00000080
+#define DLCTL_NO_JAVA                0x00000100
+#define DLCTL_NO_RUNACTIVEXCTLS      0x00000200
+#define DLCTL_NO_DLACTIVEXCTLS       0x00000400
+#define DLCTL_DOWNLOADONLY           0x00000800
+#define DLCTL_NO_FRAMEDOWNLOAD       0x00001000
+#define DLCTL_RESYNCHRONIZE          0x00002000
+#define DLCTL_PRAGMA_NO_CACHE        0x00004000
+#define DLCTL_FORCEOFFLINE           0x10000000
+#define DLCTL_NO_CLIENTPULL          0x20000000
+#define DLCTL_SILENT                 0x40000000
+#define DLCTL_OFFLINEIFNOTCONNECTED  0x80000000
+#define DLCTL_OFFLINE                DLCTL_OFFLINEIFNOTCONNECTED
+
+/* events */
+#define DISPID_EVPROP_ONMOUSEOVER          (DISPID_EVENTS+0)
+#define DISPID_EVPROP_ONMOUSEOUT           (DISPID_EVENTS+1)
+#define DISPID_EVPROP_ONMOUSEDOWN          (DISPID_EVENTS+2)
+#define DISPID_EVPROP_ONMOUSEUP            (DISPID_EVENTS+3)
+#define DISPID_EVPROP_ONMOUSEMOVE          (DISPID_EVENTS+4)
+#define DISPID_EVPROP_ONKEYDOWN            (DISPID_EVENTS+5)
+#define DISPID_EVPROP_ONKEYUP              (DISPID_EVENTS+6)
+#define DISPID_EVPROP_ONKEYPRESS           (DISPID_EVENTS+7)
+#define DISPID_EVPROP_ONCLICK              (DISPID_EVENTS+8)
+#define DISPID_EVPROP_ONDBLCLICK           (DISPID_EVENTS+9)
+#define DISPID_EVPROP_ONSELECT             (DISPID_EVENTS+10)
+#define DISPID_EVPROP_ONSUBMIT             (DISPID_EVENTS+11)
+#define DISPID_EVPROP_ONRESET              (DISPID_EVENTS+12)
+#define DISPID_EVPROP_ONHELP               (DISPID_EVENTS+13)
+#define DISPID_EVPROP_ONFOCUS              (DISPID_EVENTS+14)
+#define DISPID_EVPROP_ONBLUR               (DISPID_EVENTS+15)
+#define DISPID_EVPROP_ONROWEXIT            (DISPID_EVENTS+18)
+#define DISPID_EVPROP_ONROWENTER           (DISPID_EVENTS+19)
+#define DISPID_EVPROP_ONBOUNCE             (DISPID_EVENTS+20)
+#define DISPID_EVPROP_ONBEFOREUPDATE       (DISPID_EVENTS+21)
+#define DISPID_EVPROP_ONAFTERUPDATE        (DISPID_EVENTS+22)
+#define DISPID_EVPROP_ONBEFOREDRAGOVER     (DISPID_EVENTS+23)
+#define DISPID_EVPROP_ONBEFOREDROPORPASTE  (DISPID_EVENTS+24)
+#define DISPID_EVPROP_ONREADYSTATECHANGE   (DISPID_EVENTS+25)
+#define DISPID_EVPROP_ONFINISH             (DISPID_EVENTS+26)
+#define DISPID_EVPROP_ONSTART              (DISPID_EVENTS+27)
+#define DISPID_EVPROP_ONABORT              (DISPID_EVENTS+28)
+#define DISPID_EVPROP_ONERROR              (DISPID_EVENTS+29)
+#define DISPID_EVPROP_ONCHANGE             (DISPID_EVENTS+30)
+#define DISPID_EVPROP_ONSCROLL             (DISPID_EVENTS+31)
+#define DISPID_EVPROP_ONLOAD               (DISPID_EVENTS+32)
+#define DISPID_EVPROP_ONUNLOAD             (DISPID_EVENTS+33)
+#define DISPID_EVPROP_ONLAYOUT             (DISPID_EVENTS+34)
+#define DISPID_EVPROP_ONDRAGSTART          (DISPID_EVENTS+35)
+#define DISPID_EVPROP_ONRESIZE             (DISPID_EVENTS+36)
+#define DISPID_EVPROP_ONSELECTSTART        (DISPID_EVENTS+37)
+#define DISPID_EVPROP_ONERRORUPDATE        (DISPID_EVENTS+38)
+#define DISPID_EVPROP_ONBEFOREUNLOAD       (DISPID_EVENTS+39)
+#define DISPID_EVPROP_ONDATASETCHANGED     (DISPID_EVENTS+40)
+#define DISPID_EVPROP_ONDATAAVAILABLE      (DISPID_EVENTS+41)
+#define DISPID_EVPROP_ONDATASETCOMPLETE    (DISPID_EVENTS+42)
+#define DISPID_EVPROP_ONFILTER             (DISPID_EVENTS+43)
+#define DISPID_EVPROP_ONCHANGEFOCUS        (DISPID_EVENTS+44)
+#define DISPID_EVPROP_ONCHANGEBLUR         (DISPID_EVENTS+45)
+#define DISPID_EVPROP_ONLOSECAPTURE        (DISPID_EVENTS+46)
+#define DISPID_EVPROP_ONPROPERTYCHANGE     (DISPID_EVENTS+47)
+#define DISPID_EVPROP_ONPERSISTSAVE        (DISPID_EVENTS+48)
+#define DISPID_EVPROP_ONDRAG               (DISPID_EVENTS+49)
+#define DISPID_EVPROP_ONDRAGEND            (DISPID_EVENTS+50)
+#define DISPID_EVPROP_ONDRAGENTER          (DISPID_EVENTS+51)
+#define DISPID_EVPROP_ONDRAGOVER           (DISPID_EVENTS+52)
+#define DISPID_EVPROP_ONDRAGLEAVE          (DISPID_EVENTS+53)
+#define DISPID_EVPROP_ONDROP               (DISPID_EVENTS+54)
+#define DISPID_EVPROP_ONCUT                (DISPID_EVENTS+55)
+#define DISPID_EVPROP_ONCOPY               (DISPID_EVENTS+56)
+#define DISPID_EVPROP_ONPASTE              (DISPID_EVENTS+57)
+#define DISPID_EVPROP_ONBEFORECUT          (DISPID_EVENTS+58)
+#define DISPID_EVPROP_ONBEFORECOPY         (DISPID_EVENTS+59)
+#define DISPID_EVPROP_ONBEFOREPASTE        (DISPID_EVENTS+60)
+#define DISPID_EVPROP_ONPERSISTLOAD        (DISPID_EVENTS+61)
+#define DISPID_EVPROP_ONROWSDELETE         (DISPID_EVENTS+62)
+#define DISPID_EVPROP_ONROWSINSERTED       (DISPID_EVENTS+63)
+#define DISPID_EVPROP_ONCELLCHANGE         (DISPID_EVENTS+64)
+#define DISPID_EVPROP_ONCONTEXTMENU        (DISPID_EVENTS+65)
+#define DISPID_EVPROP_ONBEFOREPRINT        (DISPID_EVENTS+66)
+#define DISPID_EVPROP_ONAFTERPRINT         (DISPID_EVENTS+67)
+#define DISPID_EVPROP_ONSTOP               (DISPID_EVENTS+68)
+#define DISPID_EVPROP_ONBEFOREEDITFOCUS    (DISPID_EVENTS+69)
+#define DISPID_EVPROP_ONATTACHEVENT        (DISPID_EVENTS+70)
+#define DISPID_EVPROP_ONMOUSEHOVER         (DISPID_EVENTS+71)
+#define DISPID_EVPROP_ONCONTENTREADY       (DISPID_EVENTS+72)
+#define DISPID_EVPROP_ONLAYOUTCOMPLETE     (DISPID_EVENTS+73)
+#define DISPID_EVPROP_ONPAGE               (DISPID_EVENTS+74)
+#define DISPID_EVPROP_ONLINKEDOVERFLOW     (DISPID_EVENTS+75)
+#define DISPID_EVPROP_ONMOUSEWHEEL         (DISPID_EVENTS+76)
+#define DISPID_EVPROP_ONBEFOREDEACTIVATE   (DISPID_EVENTS+77)
+#define DISPID_EVPROP_ONMOVE               (DISPID_EVENTS+78)
+#define DISPID_EVPROP_ONCONTROLSELECT      (DISPID_EVENTS+79)
+#define DISPID_EVPROP_ONSELECTIONCHANGE    (DISPID_EVENTS+80)
+#define DISPID_EVPROP_ONMOVESTART          (DISPID_EVENTS+81)
+#define DISPID_EVPROP_ONMOVEEND            (DISPID_EVENTS+82)
+#define DISPID_EVPROP_ONRESIZESTART        (DISPID_EVENTS+83)
+#define DISPID_EVPROP_ONRESIZEEND          (DISPID_EVENTS+84)
+#define DISPID_EVPROP_ONMOUSEENTER         (DISPID_EVENTS+85)
+#define DISPID_EVPROP_ONMOUSELEAVE         (DISPID_EVENTS+86)
+#define DISPID_EVPROP_ONACTIVATE           (DISPID_EVENTS+87)
+#define DISPID_EVPROP_ONDEACTIVATE         (DISPID_EVENTS+88)
+#define DISPID_EVPROP_ONMULTILAYOUTCLEANUP (DISPID_EVENTS+89)
+#define DISPID_EVPROP_ONBEFOREACTIVATE     (DISPID_EVENTS+90)
+#define DISPID_EVPROP_ONFOCUSIN            (DISPID_EVENTS+91)
+#define DISPID_EVPROP_ONFOCUSOUT           (DISPID_EVENTS+92)
+#define DISPID_EVPROP_ONVALUECHANGE        (DISPID_EVENTS+93)
+#define DISPID_EVPROP_ONSELECTADD          (DISPID_EVENTS+94)
+#define DISPID_EVPROP_ONSELECTREMOV        (DISPID_EVENTS+95)
+#define DISPID_EVPROP_ONSELECTWITHI        (DISPID_EVENTS+96)
+#define DISPID_EVPROP_ONSYSTEMSCROLLINGSTART   (DISPID_EVENTS+97)
+#define DISPID_EVPROP_ONSYSTEMSCROLLINGEND     (DISPID_EVENTS+98)
+#define DISPID_EVPROP_ONOBJECTCONTENTSCROLLED  (DISPID_EVENTS+99)
+#define DISPID_EVPROP_ONSTORAGE            (DISPID_EVENTS+100)
+#define DISPID_EVPROP_ONSTORAGECOMMIT      (DISPID_EVENTS+101)
+#define DISPID_EVPROP_ONSHOW               (DISPID_EVENTS+102)
+#define DISPID_EVPROP_ONHIDE               (DISPID_EVENTS+103)
+#define DISPID_EVPROP_ONALERT              (DISPID_EVENTS+104)
+#define DISPID_EVPROP_ONPOPUPMENUSTART     (DISPID_EVENTS+105)
+#define DISPID_EVPROP_ONPOPUPMENUEND       (DISPID_EVENTS+106)
+#define DISPID_EVPROP_ONONLINE             (DISPID_EVENTS+107)
+#define DISPID_EVPROP_ONOFFLINE            (DISPID_EVENTS+108)
+#define DISPID_EVPROP_ONHASHCHANGE         (DISPID_EVENTS+109)
+#define DISPID_EVPROP_ONMESSAGE            (DISPID_EVENTS+110)
+#define DISPID_EVPROP_ONDOMMUTATION        (DISPID_EVENTS+111)
+#define DISPID_EVPROP_TIMEOUT              (DISPID_EVENTS+112)
+#define DISPID_EVPROP_WHEEL                (DISPID_EVENTS+113)
+#define DISPID_EVPROP_SVGLOAD              (DISPID_EVENTS+114)
+#define DISPID_EVPROP_SVGUNLOAD            (DISPID_EVENTS+115)
+#define DISPID_EVPROP_SVGABORT             (DISPID_EVENTS+116)
+#define DISPID_EVPROP_SVGERROR             (DISPID_EVENTS+117)
+#define DISPID_EVPROP_SVGRESIZE            (DISPID_EVENTS+118)
+#define DISPID_EVPROP_SVGSCROLL            (DISPID_EVENTS+119)
+#define DISPID_EVPROP_SVGZOOM              (DISPID_EVENTS+120)
+#define DISPID_EVPROP_ONMSTHUMBNAILCLICK   (DISPID_EVENTS+121)
+#define DISPID_EVPROP_COMPOSITIONSTART     (DISPID_EVENTS+122)
+#define DISPID_EVPROP_COMPOSITIONUPDATE    (DISPID_EVENTS+123)
+#define DISPID_EVPROP_COMPOSITIONEND       (DISPID_EVENTS+124)
+#define DISPID_EVPROP_DOMATTRMODIFIED      (DISPID_EVENTS+125)
+#define DISPID_EVPROP_DOMCONTENTLOADED     (DISPID_EVENTS+126)
+#define DISPID_EVPROP_INPUT                (DISPID_EVENTS+127)
+#define DISPID_EVPROP_DOMCHARDATAMODIFIE   (DISPID_EVENTS+128)
+#define DISPID_EVPROP_TEXTINPUT            (DISPID_EVENTS+129)
+#define DISPID_EVPROP_ONMSSITEMODEJUMPLISTITEMREMOVED  (DISPID_EVENTS+130)
+#define DISPID_EVPROP_DOMNODEINSERTED      (DISPID_EVENTS+131)
+#define DISPID_EVPROP_DOMNODEREMOVED       (DISPID_EVENTS+132)
+#define DISPID_EVPROP_DOMSUBTREEMODIFIED   (DISPID_EVENTS+133)
+#define DISPID_EVPROP_CANPLAY              (DISPID_EVENTS+134)
+#define DISPID_EVPROP_CANPLAYTHROUGH       (DISPID_EVENTS+135)
+#define DISPID_EVPROP_DURATIONCHANGE       (DISPID_EVENTS+136)
+#define DISPID_EVPROP_EMPTIED              (DISPID_EVENTS+137)
+#define DISPID_EVPROP_ENDED                (DISPID_EVENTS+138)
+#define DISPID_EVPROP_LOADEDDATA           (DISPID_EVENTS+139)
+#define DISPID_EVPROP_LOADEDMETADATA       (DISPID_EVENTS+140)
+#define DISPID_EVPROP_LOADSTART            (DISPID_EVENTS+141)
+#define DISPID_EVPROP_PAUSE                (DISPID_EVENTS+142)
+#define DISPID_EVPROP_PLAY                 (DISPID_EVENTS+143)
+#define DISPID_EVPROP_PLAYING              (DISPID_EVENTS+144)
+#define DISPID_EVPROP_PROGRESS             (DISPID_EVENTS+145)
+#define DISPID_EVPROP_RATECHANGE           (DISPID_EVENTS+146)
+#define DISPID_EVPROP_SEEKED               (DISPID_EVENTS+147)
+#define DISPID_EVPROP_SEEKING              (DISPID_EVENTS+148)
+#define DISPID_EVPROP_STALLED              (DISPID_EVENTS+149)
+#define DISPID_EVPROP_SUSPEND              (DISPID_EVENTS+150)
+#define DISPID_EVPROP_TIMEUPDATE           (DISPID_EVENTS+151)
+#define DISPID_EVPROP_VOLUMECHANGE         (DISPID_EVENTS+152)
+#define DISPID_EVPROP_WAITING              (DISPID_EVENTS+153)
+#define DISPID_EVPROPS_COUNT               154
+
+#define DISPID_EVMETH_ONMOUSEOVER           STDDISPID_XOBJ_ONMOUSEOVER
+#define DISPID_EVMETH_ONMOUSEOUT            STDDISPID_XOBJ_ONMOUSEOUT
+#define DISPID_EVMETH_ONMOUSEDOWN           DISPID_MOUSEDOWN
+#define DISPID_EVMETH_ONMOUSEUP             DISPID_MOUSEUP
+#define DISPID_EVMETH_ONMOUSEMOVE           DISPID_MOUSEMOVE
+#define DISPID_EVMETH_ONKEYDOWN             DISPID_KEYDOWN
+#define DISPID_EVMETH_ONKEYUP               DISPID_KEYUP
+#define DISPID_EVMETH_ONKEYPRESS            DISPID_KEYPRESS
+#define DISPID_EVMETH_ONCLICK               DISPID_CLICK
+#define DISPID_EVMETH_ONDBLCLICK            DISPID_DBLCLICK
+#define DISPID_EVMETH_ONSELECT              DISPID_ONSELECT
+#define DISPID_EVMETH_ONSUBMIT              DISPID_ONSUBMIT
+#define DISPID_EVMETH_ONRESET               DISPID_ONRESET
+#define DISPID_EVMETH_ONHELP                STDDISPID_XOBJ_ONHELP
+#define DISPID_EVMETH_ONFOCUS               STDDISPID_XOBJ_ONFOCUS
+#define DISPID_EVMETH_ONBLUR                STDDISPID_XOBJ_ONBLUR
+#define DISPID_EVMETH_ONROWEXIT             STDDISPID_XOBJ_ONROWEXIT
+#define DISPID_EVMETH_ONROWENTER            STDDISPID_XOBJ_ONROWENTER
+#define DISPID_EVMETH_ONBOUNCE              DISPID_ONBOUNCE
+#define DISPID_EVMETH_ONBEFOREUPDATE        STDDISPID_XOBJ_BEFOREUPDATE
+#define DISPID_EVMETH_ONAFTERUPDATE         STDDISPID_XOBJ_AFTERUPDATE
+#define DISPID_EVMETH_ONBEFOREDRAGOVER      EVENTID_CommonCtrlEvent_BeforeDragOver
+#define DISPID_EVMETH_ONBEFOREDROPORPASTE   EVENTID_CommonCtrlEvent_BeforeDropOrPaste
+#define DISPID_EVMETH_ONREADYSTATECHANGE    DISPID_READYSTATECHANGE
+#define DISPID_EVMETH_ONFINISH              DISPID_ONFINISH
+#define DISPID_EVMETH_ONSTART               DISPID_ONSTART
+#define DISPID_EVMETH_ONABORT               DISPID_ONABORT
+#define DISPID_EVMETH_ONERROR               DISPID_ONERROR
+#define DISPID_EVMETH_ONCHANGE              DISPID_ONCHANGE
+#define DISPID_EVMETH_ONSCROLL              DISPID_ONSCROLL
+#define DISPID_EVMETH_ONLOAD                DISPID_ONLOAD
+#define DISPID_EVMETH_ONUNLOAD              DISPID_ONUNLOAD
+#define DISPID_EVMETH_ONLAYOUT              DISPID_ONLAYOUT
+#define DISPID_EVMETH_ONDRAGSTART           STDDISPID_XOBJ_ONDRAGSTART
+#define DISPID_EVMETH_ONRESIZE              DISPID_ONRESIZE
+#define DISPID_EVMETH_ONSELECTSTART         STDDISPID_XOBJ_ONSELECTSTART
+#define DISPID_EVMETH_ONERRORUPDATE         STDDISPID_XOBJ_ERRORUPDATE
+#define DISPID_EVMETH_ONBEFOREUNLOAD        DISPID_ONBEFOREUNLOAD
+#define DISPID_EVMETH_ONDATASETCHANGED      STDDISPID_XOBJ_ONDATASETCHANGED
+#define DISPID_EVMETH_ONDATAAVAILABLE       STDDISPID_XOBJ_ONDATAAVAILABLE
+#define DISPID_EVMETH_ONDATASETCOMPLETE     STDDISPID_XOBJ_ONDATASETCOMPLETE
+#define DISPID_EVMETH_ONFILTER              STDDISPID_XOBJ_ONFILTER
+#define DISPID_EVMETH_ONCHANGEFOCUS         DISPID_ONCHANGEFOCUS
+#define DISPID_EVMETH_ONCHANGEBLUR          DISPID_ONCHANGEBLUR
+#define DISPID_EVMETH_ONLOSECAPTURE         STDDISPID_XOBJ_ONLOSECAPTURE
+#define DISPID_EVMETH_ONPROPERTYCHANGE      STDDISPID_XOBJ_ONPROPERTYCHANGE
+#define DISPID_EVMETH_ONPERSISTSAVE         DISPID_ONPERSISTSAVE
+#define DISPID_EVMETH_ONDRAG                STDDISPID_XOBJ_ONDRAG
+#define DISPID_EVMETH_ONDRAGEND             STDDISPID_XOBJ_ONDRAGEND
+#define DISPID_EVMETH_ONDRAGENTER           STDDISPID_XOBJ_ONDRAGENTER
+#define DISPID_EVMETH_ONDRAGOVER            STDDISPID_XOBJ_ONDRAGOVER
+#define DISPID_EVMETH_ONDRAGLEAVE           STDDISPID_XOBJ_ONDRAGLEAVE
+#define DISPID_EVMETH_ONDROP                STDDISPID_XOBJ_ONDROP
+#define DISPID_EVMETH_ONCUT                 STDDISPID_XOBJ_ONCUT
+#define DISPID_EVMETH_ONCOPY                STDDISPID_XOBJ_ONCOPY
+#define DISPID_EVMETH_ONPASTE               STDDISPID_XOBJ_ONPASTE
+#define DISPID_EVMETH_ONBEFORECUT           STDDISPID_XOBJ_ONBEFORECUT
+#define DISPID_EVMETH_ONBEFORECOPY          STDDISPID_XOBJ_ONBEFORECOPY
+#define DISPID_EVMETH_ONBEFOREPASTE         STDDISPID_XOBJ_ONBEFOREPASTE
+#define DISPID_EVMETH_ONPERSISTLOAD         DISPID_ONPERSISTLOAD
+#define DISPID_EVMETH_ONROWSDELETE          STDDISPID_XOBJ_ONROWSDELETE
+#define DISPID_EVMETH_ONROWSINSERTED        STDDISPID_XOBJ_ONROWSINSERTED
+#define DISPID_EVMETH_ONCELLCHANGE          STDDISPID_XOBJ_ONCELLCHANGE
+#define DISPID_EVMETH_ONCONTEXTMENU         DISPID_ONCONTEXTMENU
+#define DISPID_EVMETH_ONBEFOREPRINT         DISPID_ONBEFOREPRINT
+#define DISPID_EVMETH_ONAFTERPRINT          DISPID_ONAFTERPRINT
+#define DISPID_EVMETH_ONSTOP                DISPID_ONSTOP
+#define DISPID_EVMETH_ONBEFOREEDITFOCUS     DISPID_ONBEFOREEDITFOCUS
+#define DISPID_EVMETH_ONMOUSEHOVER          DISPID_ONMOUSEHOVER
+#define DISPID_EVMETH_ONCONTENTREADY        DISPID_ONCONTENTREADY
+#define DISPID_EVMETH_ONLAYOUTCOMPLETE      DISPID_ONLAYOUTCOMPLETE
+#define DISPID_EVMETH_ONPAGE                DISPID_ONPAGE
+#define DISPID_EVMETH_ONLINKEDOVERFLOW      DISPID_ONLINKEDOVERFLOW
+#define DISPID_EVMETH_ONMOUSEWHEEL          DISPID_ONMOUSEWHEEL
+#define DISPID_EVMETH_ONBEFOREDEACTIVATE    DISPID_ONBEFOREDEACTIVATE
+#define DISPID_EVMETH_ONMOVE                DISPID_ONMOVE
+#define DISPID_EVMETH_ONCONTROLSELECT       DISPID_ONCONTROLSELECT
+#define DISPID_EVMETH_ONSELECTIONCHANGE     DISPID_ONSELECTIONCHANGE
+#define DISPID_EVMETH_ONMOVESTART           DISPID_ONMOVESTART
+#define DISPID_EVMETH_ONMOVEEND             DISPID_ONMOVEEND
+#define DISPID_EVMETH_ONRESIZESTART         DISPID_ONRESIZESTART
+#define DISPID_EVMETH_ONRESIZEEND           DISPID_ONRESIZEEND
+#define DISPID_EVMETH_ONMOUSEENTER          DISPID_ONMOUSEENTER
+#define DISPID_EVMETH_ONMOUSELEAVE          DISPID_ONMOUSELEAVE
+#define DISPID_EVMETH_ONACTIVATE            DISPID_ONACTIVATE
+#define DISPID_EVMETH_ONDEACTIVATE          DISPID_ONDEACTIVATE
+#define DISPID_EVMETH_ONMULTILAYOUTCLEANUP  DISPID_ONMULTILAYOUTCLEANUP
+#define DISPID_EVMETH_ONBEFOREACTIVATE      DISPID_ONBEFOREACTIVATE
+#define DISPID_EVMETH_ONFOCUSIN             DISPID_ONFOCUSIN
+#define DISPID_EVMETH_ONFOCUSOUT            DISPID_ONFOCUSOUT
+#define DISPID_EVMETH_ONSTORAGE             DISPID_ONSTORAGE
+#define DISPID_EVMETH_ONSTORAGECOMMIT       DISPID_ONSTORAGECOMMIT
+
+#define DISPID_ONABORT               (DISPID_NORMAL_FIRST)
+#define DISPID_ONCHANGE              (DISPID_NORMAL_FIRST+1)
+#define DISPID_ONERROR               (DISPID_NORMAL_FIRST+2)
+#define DISPID_ONLOAD                (DISPID_NORMAL_FIRST+3)
+#define DISPID_ONSELECT              (DISPID_NORMAL_FIRST+6)
+#define DISPID_ONSUBMIT              (DISPID_NORMAL_FIRST+7)
+#define DISPID_ONUNLOAD              (DISPID_NORMAL_FIRST+8)
+#define DISPID_ONBOUNCE              (DISPID_NORMAL_FIRST+9)
+#define DISPID_ONFINISH              (DISPID_NORMAL_FIRST+10)
+#define DISPID_ONSTART               (DISPID_NORMAL_FIRST+11)
+#define DISPID_ONLAYOUT              (DISPID_NORMAL_FIRST+13)
+#define DISPID_ONSCROLL              (DISPID_NORMAL_FIRST+14)
+#define DISPID_ONRESET               (DISPID_NORMAL_FIRST+15)
+#define DISPID_ONRESIZE              (DISPID_NORMAL_FIRST+16)
+#define DISPID_ONBEFOREUNLOAD        (DISPID_NORMAL_FIRST+17)
+#define DISPID_ONCHANGEFOCUS         (DISPID_NORMAL_FIRST+18)
+#define DISPID_ONCHANGEBLUR          (DISPID_NORMAL_FIRST+19)
+#define DISPID_ONPERSIST             (DISPID_NORMAL_FIRST+20)
+#define DISPID_ONPERSISTSAVE         (DISPID_NORMAL_FIRST+21)
+#define DISPID_ONPERSISTLOAD         (DISPID_NORMAL_FIRST+22)
+#define DISPID_ONCONTEXTMENU         (DISPID_NORMAL_FIRST+23)
+#define DISPID_ONBEFOREPRINT         (DISPID_NORMAL_FIRST+24)
+#define DISPID_ONAFTERPRINT          (DISPID_NORMAL_FIRST+25)
+#define DISPID_ONSTOP                (DISPID_NORMAL_FIRST+26)
+#define DISPID_ONBEFOREEDITFOCUS     (DISPID_NORMAL_FIRST+27)
+#define DISPID_ONMOUSEHOVER          (DISPID_NORMAL_FIRST+28)
+#define DISPID_ONCONTENTREADY        (DISPID_NORMAL_FIRST+29)
+#define DISPID_ONLAYOUTCOMPLETE      (DISPID_NORMAL_FIRST+30)
+#define DISPID_ONPAGE                (DISPID_NORMAL_FIRST+31)
+#define DISPID_ONLINKEDOVERFLOW      (DISPID_NORMAL_FIRST+32)
+#define DISPID_ONMOUSEWHEEL          (DISPID_NORMAL_FIRST+33)
+#define DISPID_ONBEFOREDEACTIVATE    (DISPID_NORMAL_FIRST+34)
+#define DISPID_ONMOVE                (DISPID_NORMAL_FIRST+35)
+#define DISPID_ONCONTROLSELECT       (DISPID_NORMAL_FIRST+36)
+#define DISPID_ONSELECTIONCHANGE     (DISPID_NORMAL_FIRST+37)
+#define DISPID_ONMOVESTART           (DISPID_NORMAL_FIRST+38)
+#define DISPID_ONMOVEEND             (DISPID_NORMAL_FIRST+39)
+#define DISPID_ONRESIZESTART         (DISPID_NORMAL_FIRST+40)
+#define DISPID_ONRESIZEEND           (DISPID_NORMAL_FIRST+41)
+#define DISPID_ONMOUSEENTER          (DISPID_NORMAL_FIRST+42)
+#define DISPID_ONMOUSELEAVE          (DISPID_NORMAL_FIRST+43)
+#define DISPID_ONACTIVATE            (DISPID_NORMAL_FIRST+44)
+#define DISPID_ONDEACTIVATE          (DISPID_NORMAL_FIRST+45)
+#define DISPID_ONMULTILAYOUTCLEANUP  (DISPID_NORMAL_FIRST+46)
+#define DISPID_ONBEFOREACTIVATE      (DISPID_NORMAL_FIRST+47)
+#define DISPID_ONFOCUSIN             (DISPID_NORMAL_FIRST+48)
+#define DISPID_ONFOCUSOUT            (DISPID_NORMAL_FIRST+49)
+#define DISPID_ONSTORAGE             (DISPID_NORMAL_FIRST+50)
+#define DISPID_ONSTORAGECOMMIT       (DISPID_NORMAL_FIRST+51)
+
+/* HTMLDocumentEvents */
+#define DISPID_HTMLDOCUMENTEVENTS_ONHELP              DISPID_EVMETH_ONHELP
+#define DISPID_HTMLDOCUMENTEVENTS_ONCLICK             DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK          DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN           DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLDOCUMENTEVENTS_ONKEYUP             DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS          DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN         DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE         DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP           DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT          DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER         DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE  DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE      DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE       DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT           DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWENTER          DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART         DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART       DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE       DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU       DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLDOCUMENTEVENTS_ONSTOP              DISPID_EVMETH_ONSTOP
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE        DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED      DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE        DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE    DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED    DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE     DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE   DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS   DISPID_EVMETH_ONBEFOREEDITFOCUS
+#define DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE   DISPID_EVMETH_ONSELECTIONCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT     DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL        DISPID_EVMETH_ONMOUSEWHEEL
+#define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN           DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT          DISPID_EVMETH_ONFOCUSOUT
+#define DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE          DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE        DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE    DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE  DISPID_EVMETH_ONBEFOREDEACTIVATE
+
+/* HTMLDocumentEvents2 */
+#define DISPID_HTMLDOCUMENTEVENTS2_ONHELP              DISPID_EVMETH_ONHELP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCLICK             DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK          DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN           DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP             DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS          DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN         DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE         DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP           DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT          DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER         DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE  DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE      DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE       DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT           DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER          DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART         DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART       DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE       DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU       DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLDOCUMENTEVENTS2_ONSTOP              DISPID_EVMETH_ONSTOP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE        DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED      DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE        DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE    DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED    DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE     DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE   DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS   DISPID_EVMETH_ONBEFOREEDITFOCUS
+#define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE   DISPID_EVMETH_ONSELECTIONCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT     DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL        DISPID_EVMETH_ONMOUSEWHEEL
+#define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN           DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT          DISPID_EVMETH_ONFOCUSOUT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE          DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE        DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE    DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE  DISPID_EVMETH_ONBEFOREDEACTIVATE
+
+/* IHTMLDocument */
+#define DISPID_IHTMLDOCUMENT_SCRIPT    (DISPID_OMDOCUMENT+1)
+
+/* IHTMLDocument2 */
+#define DISPID_IHTMLDOCUMENT2_ALL                     (DISPID_OMDOCUMENT+3)
+#define DISPID_IHTMLDOCUMENT2_BODY                    (DISPID_OMDOCUMENT+4)
+#define DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT           (DISPID_OMDOCUMENT+5)
+#define DISPID_IHTMLDOCUMENT2_APPLETS                 (DISPID_OMDOCUMENT+8)
+#define DISPID_IHTMLDOCUMENT2_ANCHORS                 (DISPID_OMDOCUMENT+7)
+#define DISPID_IHTMLDOCUMENT2_LINKS                   (DISPID_OMDOCUMENT+9)
+#define DISPID_IHTMLDOCUMENT2_FORMS                   (DISPID_OMDOCUMENT+10)
+#define DISPID_IHTMLDOCUMENT2_IMAGES                  (DISPID_OMDOCUMENT+11)
+#define DISPID_IHTMLDOCUMENT2_TITLE                   (DISPID_OMDOCUMENT+12)
+#define DISPID_IHTMLDOCUMENT2_SCRIPTS                 (DISPID_OMDOCUMENT+13)
+#define DISPID_IHTMLDOCUMENT2_DESIGNMODE              (DISPID_OMDOCUMENT+14)
+#define DISPID_IHTMLDOCUMENT2_EMBEDS                  (DISPID_OMDOCUMENT+15)
+#define DISPID_IHTMLDOCUMENT2_SELECTION               (DISPID_OMDOCUMENT+17)
+#define DISPID_IHTMLDOCUMENT2_READYSTATE              (DISPID_OMDOCUMENT+18)
+#define DISPID_IHTMLDOCUMENT2_FRAMES                  (DISPID_OMDOCUMENT+19)
+#define DISPID_IHTMLDOCUMENT2_PLUGINS                 (DISPID_OMDOCUMENT+21)
+#define DISPID_IHTMLDOCUMENT2_ALINKCOLOR              (DISPID_OMDOCUMENT+22)
+#define DISPID_IHTMLDOCUMENT2_VLINKCOLOR              (DISPID_OMDOCUMENT+23)
+#define DISPID_IHTMLDOCUMENT2_LINKCOLOR               (DISPID_OMDOCUMENT+24)
+#define DISPID_IHTMLDOCUMENT2_URL                     (DISPID_OMDOCUMENT+25)
+#define DISPID_IHTMLDOCUMENT2_LOCATION                (DISPID_OMDOCUMENT+26)
+#define DISPID_IHTMLDOCUMENT2_REFERRER                (DISPID_OMDOCUMENT+27)
+#define DISPID_IHTMLDOCUMENT2_LASTMODIFIED            (DISPID_OMDOCUMENT+28)
+#define DISPID_IHTMLDOCUMENT2_DOMAIN                  (DISPID_OMDOCUMENT+29)
+#define DISPID_IHTMLDOCUMENT2_COOKIE                  (DISPID_OMDOCUMENT+30)
+#define DISPID_IHTMLDOCUMENT2_EXPANDO                 (DISPID_OMDOCUMENT+31)
+#define DISPID_IHTMLDOCUMENT2_CHARSET                 (DISPID_OMDOCUMENT+32)
+#define DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET          (DISPID_OMDOCUMENT+33)
+#define DISPID_IHTMLDOCUMENT2_PARENTWINDOW            (DISPID_OMDOCUMENT+34)
+#define DISPID_IHTMLDOCUMENT2_MIMETYPE                (DISPID_OMDOCUMENT+41)
+#define DISPID_IHTMLDOCUMENT2_FILESIZE                (DISPID_OMDOCUMENT+42)
+#define DISPID_IHTMLDOCUMENT2_FILECREATEDDATE         (DISPID_OMDOCUMENT+43)
+#define DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE        (DISPID_OMDOCUMENT+44)
+#define DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE         (DISPID_OMDOCUMENT+45)
+#define DISPID_IHTMLDOCUMENT2_SECURITY                (DISPID_OMDOCUMENT+46)
+#define DISPID_IHTMLDOCUMENT2_PROTOCOL                (DISPID_OMDOCUMENT+47)
+#define DISPID_IHTMLDOCUMENT2_NAMEPROP                (DISPID_OMDOCUMENT+48)
+#define DISPID_IHTMLDOCUMENT2_WRITE                   (DISPID_OMDOCUMENT+54)
+#define DISPID_IHTMLDOCUMENT2_WRITELN                 (DISPID_OMDOCUMENT+55)
+#define DISPID_IHTMLDOCUMENT2_OPEN                    (DISPID_OMDOCUMENT+56)
+#define DISPID_IHTMLDOCUMENT2_CLOSE                   (DISPID_OMDOCUMENT+57)
+#define DISPID_IHTMLDOCUMENT2_CLEAR                   (DISPID_OMDOCUMENT+58)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED   (DISPID_OMDOCUMENT+59)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED     (DISPID_OMDOCUMENT+60)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE       (DISPID_OMDOCUMENT+61)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM    (DISPID_OMDOCUMENT+62)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT        (DISPID_OMDOCUMENT+63)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE       (DISPID_OMDOCUMENT+64)
+#define DISPID_IHTMLDOCUMENT2_EXECCOMMAND             (DISPID_OMDOCUMENT+65)
+#define DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP     (DISPID_OMDOCUMENT+66)
+#define DISPID_IHTMLDOCUMENT2_CREATEELEMENT           (DISPID_OMDOCUMENT+67)
+#define DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT        (DISPID_OMDOCUMENT+68)
+#define DISPID_IHTMLDOCUMENT2_STYLESHEETS             (DISPID_OMDOCUMENT+69)
+#define DISPID_IHTMLDOCUMENT2_TOSTRING                (DISPID_OMDOCUMENT+70)
+#define DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET        (DISPID_OMDOCUMENT+71)
+#define DISPID_IHTMLDOCUMENT2_ONHELP                  DISPID_EVPROP_ONHELP
+#define DISPID_IHTMLDOCUMENT2_ONCLICK                 DISPID_EVPROP_ONCLICK
+#define DISPID_IHTMLDOCUMENT2_ONDBLCLICK              DISPID_EVPROP_ONDBLCLICK
+#define DISPID_IHTMLDOCUMENT2_ONKEYUP                 DISPID_EVPROP_ONKEYUP
+#define DISPID_IHTMLDOCUMENT2_ONKEYDOWN               DISPID_EVPROP_ONKEYDOWN
+#define DISPID_IHTMLDOCUMENT2_ONKEYPRESS              DISPID_EVPROP_ONKEYPRESS
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEUP               DISPID_EVPROP_ONMOUSEUP
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN             DISPID_EVPROP_ONMOUSEDOWN
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE             DISPID_EVPROP_ONMOUSEMOVE
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEOUT              DISPID_EVPROP_ONMOUSEOUT
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEOVER             DISPID_EVPROP_ONMOUSEOVER
+#define DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE      DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE           DISPID_EVPROP_ONAFTERUPDATE
+#define DISPID_IHTMLDOCUMENT2_ONROWEXIT               DISPID_EVPROP_ONROWEXIT
+#define DISPID_IHTMLDOCUMENT2_ONROWENTER              DISPID_EVPROP_ONROWENTER
+#define DISPID_IHTMLDOCUMENT2_ONDRAGSTART             DISPID_EVPROP_ONDRAGSTART
+#define DISPID_IHTMLDOCUMENT2_ONSELECTSTART           DISPID_EVPROP_ONSELECTSTART
+#define DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE          DISPID_EVPROP_ONBEFOREUPDATE
+#define DISPID_IHTMLDOCUMENT2_ONERRORUPDATE           DISPID_EVPROP_ONERRORUPDATE
+#define DISPID_IHTMLDOCUMENT2_BGCOLOR                 DISPID_BACKCOLOR
+#define DISPID_IHTMLDOCUMENT2_FGCOLOR                 DISPID_A_COLOR
+
+/* IHTMLDocument3 */
+#define DISPID_IHTMLDOCUMENT3_RELEASECAPTURE          DISPID_OMDOCUMENT+72
+#define DISPID_IHTMLDOCUMENT3_RECALC                  DISPID_OMDOCUMENT+73
+#define DISPID_IHTMLDOCUMENT3_CREATETEXTNODE          DISPID_OMDOCUMENT+74
+#define DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT         DISPID_OMDOCUMENT+75
+#define DISPID_IHTMLDOCUMENT3_UNIQUEID                DISPID_OMDOCUMENT+77
+#define DISPID_IHTMLDOCUMENT3_ATTACHEVENT             DISPID_HTMLOBJECT+7
+#define DISPID_IHTMLDOCUMENT3_DETACHEVENT             DISPID_HTMLOBJECT+8
+#define DISPID_IHTMLDOCUMENT3_ONROWSDELETE            DISPID_EVPROP_ONROWSDELETE
+#define DISPID_IHTMLDOCUMENT3_ONROWSINSERTED          DISPID_EVPROP_ONROWSINSERTED
+#define DISPID_IHTMLDOCUMENT3_ONCELLCHANGE            DISPID_EVPROP_ONCELLCHANGE
+#define DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED        DISPID_EVPROP_ONDATASETCHANGED
+#define DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE         DISPID_EVPROP_ONDATAAVAILABLE
+#define DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE       DISPID_EVPROP_ONDATASETCOMPLETE
+#define DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE        DISPID_EVPROP_ONPROPERTYCHANGE
+#define DISPID_IHTMLDOCUMENT3_DIR                     DISPID_A_DIR
+#define DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU           DISPID_EVPROP_ONCONTEXTMENU
+#define DISPID_IHTMLDOCUMENT3_ONSTOP                  DISPID_EVPROP_ONSTOP
+#define DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT  DISPID_OMDOCUMENT+76
+#define DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT          DISPID_OMDOCUMENT+78
+#define DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD          DISPID_OMDOCUMENT+79
+#define DISPID_IHTMLDOCUMENT3_BASEURL                 DISPID_OMDOCUMENT+80
+#define DISPID_IHTMLDOCUMENT3_CHILDNODES              DISPID_ELEMENT+49
+#define DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS      DISPID_OMDOCUMENT+82
+#define DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS       DISPID_EVPROP_ONBEFOREEDITFOCUS
+#define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME       DISPID_OMDOCUMENT+86
+#define DISPID_IHTMLDOCUMENT3_GETELEMENTBYID          DISPID_OMDOCUMENT+88
+#define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME    DISPID_OMDOCUMENT+87
+
+
+/* IHTMLDocument4 */
+#define DISPID_IHTMLDOCUMENT4_FOCUS                  DISPID_OMDOCUMENT+89
+#define DISPID_IHTMLDOCUMENT4_HASFOCUS               DISPID_OMDOCUMENT+90
+#define DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE      DISPID_EVPROP_ONSELECTIONCHANGE
+#define DISPID_IHTMLDOCUMENT4_NAMESPACES             DISPID_OMDOCUMENT+91
+#define DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL  DISPID_OMDOCUMENT+92
+#define DISPID_IHTMLDOCUMENT4_MEDIA                  DISPID_OMDOCUMENT+93
+#define DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT      DISPID_OMDOCUMENT+94
+#define DISPID_IHTMLDOCUMENT4_FIREEVENT              DISPID_OMDOCUMENT+95
+#define DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE      DISPID_OMDOCUMENT+96
+#define DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT        DISPID_EVPROP_ONCONTROLSELECT
+#define DISPID_IHTMLDOCUMENT4_URLUNENCODED           DISPID_OMDOCUMENT+97
+
+/* IHTMLDocument5 */
+#define DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL        DISPID_EVPROP_ONMOUSEWHEEL
+#define DISPID_IHTMLDOCUMENT5_DOCTYPE             DISPID_OMDOCUMENT+98
+#define DISPID_IHTMLDOCUMENT5_IMPLEMENTATION      DISPID_OMDOCUMENT+99
+#define DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE     DISPID_OMDOCUMENT+100
+#define DISPID_IHTMLDOCUMENT5_CREATECOMMENT       DISPID_OMDOCUMENT+101
+#define DISPID_IHTMLDOCUMENT5_ONFOCUSIN           DISPID_EVPROP_ONFOCUSIN
+#define DISPID_IHTMLDOCUMENT5_ONFOCUSOUT          DISPID_EVPROP_ONFOCUSOUT
+#define DISPID_IHTMLDOCUMENT5_ONACTIVATE          DISPID_EVPROP_ONACTIVATE
+#define DISPID_IHTMLDOCUMENT5_ONDEACTIVATE        DISPID_EVPROP_ONDEACTIVATE
+#define DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE    DISPID_EVPROP_ONBEFOREACTIVATE
+#define DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE  DISPID_EVPROP_ONBEFOREDEACTIVATE
+#define DISPID_IHTMLDOCUMENT5_COMPATMODE          DISPID_OMDOCUMENT+102
+
+/* IHTMLDocument6 */
+#define DISPID_IHTMLDOCUMENT6_COMPATIBLE          DISPID_OMDOCUMENT+103
+#define DISPID_IHTMLDOCUMENT6_DOCUMENTMODE        DISPID_OMDOCUMENT+104
+#define DISPID_IHTMLDOCUMENT6_ONSTORAGE           DISPID_EVPROP_ONSTORAGE
+#define DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT     DISPID_EVPROP_ONSTORAGECOMMIT
+#define DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID  DISPID_OMDOCUMENT+105
+#define DISPID_IHTMLDOCUMENT6_UPDATESETTINGS      DISPID_OMDOCUMENT+106
+
+/* DWebBridgeEvents */
+#define DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT   1
+#define DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE
+#define DISPID_DWEBBRIDGEEVENTS_ONCLICK            DISPID_HTMLDOCUMENTEVENTS_ONCLICK
+#define DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK         DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK
+#define DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN          DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN
+#define DISPID_DWEBBRIDGEEVENTS_ONKEYUP            DISPID_HTMLDOCUMENTEVENTS_ONKEYUP
+#define DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS         DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS
+#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN        DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN
+#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE        DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE
+#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP          DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP
+
+/* IWebBridge */
+#define DISPID_IWEBBRIDGE_URL                     1
+#define DISPID_IWEBBRIDGE_SCROLLBAR               2
+#define DISPID_IWEBBRIDGE_EMBED                   3
+#define DISPID_IWEBBRIDGE_EVENT                   DISPID_IHTMLWINDOW2_EVENT
+#define DISPID_IWEBBRIDGE_READYSTATE              DISPID_READYSTATE
+#define DISPID_IWEBBRIDGE_ABOUTBOX                DISPID_ABOUTBOX
+
+/* IHTMLEmbedElement */
+#define DISPID_IHTMLEMBEDELEMENT_HIDDEN       DISPID_OBJECT+10
+#define DISPID_IHTMLEMBEDELEMENT_PALETTE      DISPID_OBJECT+4
+#define DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE  DISPID_OBJECT+5
+#define DISPID_IHTMLEMBEDELEMENT_SRC          DISPID_OBJECT+6
+#define DISPID_IHTMLEMBEDELEMENT_UNITS        DISPID_OBJECT+8
+#define DISPID_IHTMLEMBEDELEMENT_NAME         STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLEMBEDELEMENT_WIDTH        STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLEMBEDELEMENT_HEIGHT       STDPROPID_XOBJ_HEIGHT
+
+/* IHTMLEmbedElement2 */
+#define DISPID_IHTMLEMBEDELEMENT2_IE8_SRC          DISPID_IE8_EMBED
+#define DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE  DISPID_IE8_EMBED+1
+
+/* IHTMLElementCollection */
+#define DISPID_IHTMLELEMENTCOLLECTION_LENGTH     DISPID_COLLECTION
+#define DISPID_IHTMLELEMENTCOLLECTION_TOSTRING   (DISPID_COLLECTION+1)
+#define DISPID_IHTMLELEMENTCOLLECTION_TAGS       (DISPID_COLLECTION+2)
+#define DISPID_IHTMLELEMENTCOLLECTION__NEWENUM   DISPID_NEWENUM
+#define DISPID_IHTMLELEMENTCOLLECTION_ITEM       DISPID_VALUE
+
+/* IHTMLElementCollection2 */
+#define DISPID_IHTMLELEMENTCOLLECTION2_URNS  DISPID_COLLECTION+5
+
+/* IHTMLElementCollection3 */
+#define DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM  DISPID_COLLECTION+6
+
+
+/* IHTMLAttributeCollection */
+#define DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH      DISPID_COLLECTION
+#define DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM    DISPID_NEWENUM
+#define DISPID_IHTMLATTRIBUTECOLLECTION_ITEM        DISPID_VALUE
+
+/* IHTMLAttributeCollection2 */
+#define DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM       DISPID_COLLECTION+1
+#define DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM       DISPID_COLLECTION+2
+#define DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM    DISPID_COLLECTION+3
+
+/* IHTMLAttributeCollection3 */
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM     DISPID_IE8_NAMEDNODEMAP
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM     DISPID_IE8_NAMEDNODEMAP+1
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM  DISPID_IE8_NAMEDNODEMAP+2
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM             DISPID_IE8_NAMEDNODEMAP+4
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH           DISPID_IE8_NAMEDNODEMAP+3
+
+/* IHTMLDOMChildrenCollection */
+#define DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH    DISPID_COLLECTION
+#define DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM  DISPID_NEWENUM
+#define DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM      DISPID_VALUE
+
+/* HTMLElementEvents */
+#define DISPID_HTMLELEMENTEVENTS_ONHELP             DISPID_EVMETH_ONHELP
+#define DISPID_HTMLELEMENTEVENTS_ONCLICK            DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLELEMENTEVENTS_ONDBLCLICK         DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLELEMENTEVENTS_ONKEYPRESS         DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLELEMENTEVENTS_ONKEYDOWN          DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLELEMENTEVENTS_ONKEYUP            DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT         DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER        DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE        DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN        DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEUP          DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLELEMENTEVENTS_ONSELECTSTART      DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE     DISPID_EVMETH_ONFILTER
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGSTART        DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE     DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE      DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE      DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLELEMENTEVENTS_ONROWEXIT          DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLELEMENTEVENTS_ONROWENTER         DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED   DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE    DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE  DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE      DISPID_EVMETH_ONLOSECAPTURE
+#define DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE   DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLELEMENTEVENTS_ONSCROLL           DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLELEMENTEVENTS_ONFOCUS            DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLELEMENTEVENTS_ONBLUR             DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLELEMENTEVENTS_ONRESIZE           DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLELEMENTEVENTS_ONDRAG             DISPID_EVMETH_ONDRAG
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGEND          DISPID_EVMETH_ONDRAGEND
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGENTER        DISPID_EVMETH_ONDRAGENTER
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGOVER         DISPID_EVMETH_ONDRAGOVER
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE        DISPID_EVMETH_ONDRAGLEAVE
+#define DISPID_HTMLELEMENTEVENTS_ONDROP             DISPID_EVMETH_ONDROP
+#define DISPID_HTMLELEMENTEVENTS_ONBEFORECUT        DISPID_EVMETH_ONBEFORECUT
+#define DISPID_HTMLELEMENTEVENTS_ONCUT              DISPID_EVMETH_ONCUT
+#define DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY       DISPID_EVMETH_ONBEFORECOPY
+#define DISPID_HTMLELEMENTEVENTS_ONCOPY             DISPID_EVMETH_ONCOPY
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE      DISPID_EVMETH_ONBEFOREPASTE
+#define DISPID_HTMLELEMENTEVENTS_ONPASTE            DISPID_EVMETH_ONPASTE
+#define DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU      DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLELEMENTEVENTS_ONROWSDELETE       DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED     DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE       DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS  DISPID_EVMETH_ONBEFOREEDITFOCUS
+#define DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE   DISPID_EVMETH_ONLAYOUTCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS_ONPAGE             DISPID_EVMETH_ONPAGE
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE   DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONMOVE             DISPID_EVMETH_ONMOVE
+#define DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT    DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLELEMENTEVENTS_ONMOVESTART        DISPID_EVMETH_ONMOVESTART
+#define DISPID_HTMLELEMENTEVENTS_ONMOVEEND          DISPID_EVMETH_ONMOVEEND
+#define DISPID_HTMLELEMENTEVENTS_ONRESIZESTART      DISPID_EVMETH_ONRESIZESTART
+#define DISPID_HTMLELEMENTEVENTS_ONRESIZEEND        DISPID_EVMETH_ONRESIZEEND
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER       DISPID_EVMETH_ONMOUSEENTER
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE       DISPID_EVMETH_ONMOUSELEAVE
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL       DISPID_EVMETH_ONMOUSEWHEEL
+#define DISPID_HTMLELEMENTEVENTS_ONACTIVATE         DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE       DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONFOCUSIN          DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT         DISPID_EVMETH_ONFOCUSOUT
+
+/* HTMLElementEvents2 */
+
+#define DISPID_HTMLELEMENTEVENTS2_ONHELP            DISPID_EVMETH_ONHELP
+#define DISPID_HTMLELEMENTEVENTS2_ONCLICK           DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK        DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS        DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN         DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLELEMENTEVENTS2_ONKEYUP           DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT        DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER       DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE       DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN       DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP         DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART     DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE    DISPID_EVMETH_ONFILTER
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART       DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE    DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE     DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE     DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLELEMENTEVENTS2_ONROWEXIT         DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLELEMENTEVENTS2_ONROWENTER        DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED  DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE   DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE     DISPID_EVMETH_ONLOSECAPTURE
+#define DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE  DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLELEMENTEVENTS2_ONSCROLL          DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLELEMENTEVENTS2_ONFOCUS           DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLELEMENTEVENTS2_ONBLUR            DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLELEMENTEVENTS2_ONRESIZE          DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAG            DISPID_EVMETH_ONDRAG
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGEND         DISPID_EVMETH_ONDRAGEND
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER       DISPID_EVMETH_ONDRAGENTER
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER        DISPID_EVMETH_ONDRAGOVER
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE       DISPID_EVMETH_ONDRAGLEAVE
+#define DISPID_HTMLELEMENTEVENTS2_ONDROP            DISPID_EVMETH_ONDROP
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT       DISPID_EVMETH_ONBEFORECUT
+#define DISPID_HTMLELEMENTEVENTS2_ONCUT             DISPID_EVMETH_ONCUT
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY      DISPID_EVMETH_ONBEFORECOPY
+#define DISPID_HTMLELEMENTEVENTS2_ONCOPY            DISPID_EVMETH_ONCOPY
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE     DISPID_EVMETH_ONBEFOREPASTE
+#define DISPID_HTMLELEMENTEVENTS2_ONPASTE           DISPID_EVMETH_ONPASTE
+#define DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU     DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE      DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED    DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE      DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE  DISPID_EVMETH_ONLAYOUTCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS2_ONPAGE            DISPID_EVMETH_ONPAGE
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER      DISPID_EVMETH_ONMOUSEENTER
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE      DISPID_EVMETH_ONMOUSELEAVE
+#define DISPID_HTMLELEMENTEVENTS2_ONACTIVATE        DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE      DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE  DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN         DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT        DISPID_EVMETH_ONFOCUSOUT
+#define DISPID_HTMLELEMENTEVENTS2_ONMOVE            DISPID_EVMETH_ONMOVE
+#define DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT   DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLELEMENTEVENTS2_ONMOVESTART       DISPID_EVMETH_ONMOVESTART
+#define DISPID_HTMLELEMENTEVENTS2_ONMOVEEND         DISPID_EVMETH_ONMOVEEND
+#define DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART     DISPID_EVMETH_ONRESIZESTART
+#define DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND       DISPID_EVMETH_ONRESIZEEND
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL      DISPID_EVMETH_ONMOUSEWHEEL
+
+/* IHTMLElement */
+#define DISPID_IHTMLELEMENT_SETATTRIBUTE         (DISPID_HTMLOBJECT+1)
+#define DISPID_IHTMLELEMENT_GETATTRIBUTE         (DISPID_HTMLOBJECT+2)
+#define DISPID_IHTMLELEMENT_REMOVEATTRIBUTE      (DISPID_HTMLOBJECT+3)
+#define DISPID_IHTMLELEMENT_CLASSNAME            (DISPID_ELEMENT+1)
+#define DISPID_IHTMLELEMENT_ID                   (DISPID_ELEMENT+2)
+#define DISPID_IHTMLELEMENT_TAGNAME              (DISPID_ELEMENT+4)
+#define DISPID_IHTMLELEMENT_OFFSETLEFT           (DISPID_ELEMENT+8)
+#define DISPID_IHTMLELEMENT_OFFSETTOP            (DISPID_ELEMENT+9)
+#define DISPID_IHTMLELEMENT_OFFSETWIDTH          (DISPID_ELEMENT+10)
+#define DISPID_IHTMLELEMENT_OFFSETHEIGHT         (DISPID_ELEMENT+11)
+#define DISPID_IHTMLELEMENT_OFFSETPARENT         (DISPID_ELEMENT+12)
+#define DISPID_IHTMLELEMENT_DOCUMENT             (DISPID_ELEMENT+18)
+#define DISPID_IHTMLELEMENT_SCROLLINTOVIEW       (DISPID_ELEMENT+19)
+#define DISPID_IHTMLELEMENT_CONTAINS             (DISPID_ELEMENT+20)
+#define DISPID_IHTMLELEMENT_SOURCEINDEX          (DISPID_ELEMENT+24)
+#define DISPID_IHTMLELEMENT_RECORDNUMBER         (DISPID_ELEMENT+25)
+#define DISPID_IHTMLELEMENT_INNERHTML            (DISPID_ELEMENT+26)
+#define DISPID_IHTMLELEMENT_INNERTEXT            (DISPID_ELEMENT+27)
+#define DISPID_IHTMLELEMENT_OUTERHTML            (DISPID_ELEMENT+28)
+#define DISPID_IHTMLELEMENT_OUTERTEXT            (DISPID_ELEMENT+29)
+#define DISPID_IHTMLELEMENT_INSERTADJACENTHTML   (DISPID_ELEMENT+30)
+#define DISPID_IHTMLELEMENT_INSERTADJACENTTEXT   (DISPID_ELEMENT+31)
+#define DISPID_IHTMLELEMENT_PARENTTEXTEDIT       (DISPID_ELEMENT+32)
+#define DISPID_IHTMLELEMENT_ISTEXTEDIT           (DISPID_ELEMENT+34)
+#define DISPID_IHTMLELEMENT_CLICK                (DISPID_ELEMENT+33)
+#define DISPID_IHTMLELEMENT_FILTERS              (DISPID_ELEMENT+35)
+#define DISPID_IHTMLELEMENT_TOSTRING             (DISPID_ELEMENT+36)
+#define DISPID_IHTMLELEMENT_CHILDREN             (DISPID_ELEMENT+37)
+#define DISPID_IHTMLELEMENT_ALL                  (DISPID_ELEMENT+38)
+#define DISPID_IHTMLELEMENT_PARENTELEMENT        STDPROPID_XOBJ_PARENT
+#define DISPID_IHTMLELEMENT_STYLE                STDPROPID_XOBJ_STYLE
+#define DISPID_IHTMLELEMENT_ONHELP               DISPID_EVPROP_ONHELP
+#define DISPID_IHTMLELEMENT_ONCLICK              DISPID_EVPROP_ONCLICK
+#define DISPID_IHTMLELEMENT_ONDBLCLICK           DISPID_EVPROP_ONDBLCLICK
+#define DISPID_IHTMLELEMENT_ONKEYDOWN            DISPID_EVPROP_ONKEYDOWN
+#define DISPID_IHTMLELEMENT_ONKEYUP              DISPID_EVPROP_ONKEYUP
+#define DISPID_IHTMLELEMENT_ONKEYPRESS           DISPID_EVPROP_ONKEYPRESS
+#define DISPID_IHTMLELEMENT_ONMOUSEOUT           DISPID_EVPROP_ONMOUSEOUT
+#define DISPID_IHTMLELEMENT_ONMOUSEOVER          DISPID_EVPROP_ONMOUSEOVER
+#define DISPID_IHTMLELEMENT_ONMOUSEMOVE          DISPID_EVPROP_ONMOUSEMOVE
+#define DISPID_IHTMLELEMENT_ONMOUSEDOWN          DISPID_EVPROP_ONMOUSEDOWN
+#define DISPID_IHTMLELEMENT_ONMOUSEUP            DISPID_EVPROP_ONMOUSEUP
+#define DISPID_IHTMLELEMENT_TITLE                STDPROPID_XOBJ_CONTROLTIPTEXT
+#define DISPID_IHTMLELEMENT_LANGUAGE             DISPID_A_LANGUAGE
+#define DISPID_IHTMLELEMENT_ONSELECTSTART        DISPID_EVPROP_ONSELECTSTART
+#define DISPID_IHTMLELEMENT_LANG                 DISPID_A_LANG
+#define DISPID_IHTMLELEMENT_ONDRAGSTART          DISPID_EVPROP_ONDRAGSTART
+#define DISPID_IHTMLELEMENT_ONBEFOREUPDATE       DISPID_EVPROP_ONBEFOREUPDATE
+#define DISPID_IHTMLELEMENT_ONAFTERUPDATE        DISPID_EVPROP_ONAFTERUPDATE
+#define DISPID_IHTMLELEMENT_ONERRORUPDATE        DISPID_EVPROP_ONERRORUPDATE
+#define DISPID_IHTMLELEMENT_ONROWEXIT            DISPID_EVPROP_ONROWEXIT
+#define DISPID_IHTMLELEMENT_ONROWENTER           DISPID_EVPROP_ONROWENTER
+#define DISPID_IHTMLELEMENT_ONDATASETCHANGED     DISPID_EVPROP_ONDATASETCHANGED
+#define DISPID_IHTMLELEMENT_ONDATAAVAILABLE      DISPID_EVPROP_ONDATAAVAILABLE
+#define DISPID_IHTMLELEMENT_ONDATASETCOMPLETE    DISPID_EVPROP_ONDATASETCOMPLETE
+#define DISPID_IHTMLELEMENT_ONFILTERCHANGE       DISPID_EVPROP_ONFILTER
+
+/* IHTMLElement2 */
+#define DISPID_IHTMLELEMENT2_SCOPENAME              DISPID_ELEMENT+39
+#define DISPID_IHTMLELEMENT2_SETCAPTURE             DISPID_ELEMENT+40
+#define DISPID_IHTMLELEMENT2_RELEASECAPTURE         DISPID_ELEMENT+41
+#define DISPID_IHTMLELEMENT2_ONLOSECAPTURE          DISPID_EVPROP_ONLOSECAPTURE
+#define DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT     DISPID_ELEMENT+42
+#define DISPID_IHTMLELEMENT2_DOSCROLL               DISPID_ELEMENT+43
+#define DISPID_IHTMLELEMENT2_ONSCROLL               DISPID_EVPROP_ONSCROLL
+#define DISPID_IHTMLELEMENT2_ONDRAG                 DISPID_EVPROP_ONDRAG
+#define DISPID_IHTMLELEMENT2_ONDRAGEND              DISPID_EVPROP_ONDRAGEND
+#define DISPID_IHTMLELEMENT2_ONDRAGENTER            DISPID_EVPROP_ONDRAGENTER
+#define DISPID_IHTMLELEMENT2_ONDRAGOVER             DISPID_EVPROP_ONDRAGOVER
+#define DISPID_IHTMLELEMENT2_ONDRAGLEAVE            DISPID_EVPROP_ONDRAGLEAVE
+#define DISPID_IHTMLELEMENT2_ONDROP                 DISPID_EVPROP_ONDROP
+#define DISPID_IHTMLELEMENT2_ONBEFORECUT            DISPID_EVPROP_ONBEFORECUT
+#define DISPID_IHTMLELEMENT2_ONCUT                  DISPID_EVPROP_ONCUT
+#define DISPID_IHTMLELEMENT2_ONBEFORECOPY           DISPID_EVPROP_ONBEFORECOPY
+#define DISPID_IHTMLELEMENT2_ONCOPY                 DISPID_EVPROP_ONCOPY
+#define DISPID_IHTMLELEMENT2_ONBEFOREPASTE          DISPID_EVPROP_ONBEFOREPASTE
+#define DISPID_IHTMLELEMENT2_ONPASTE                DISPID_EVPROP_ONPASTE
+#define DISPID_IHTMLELEMENT2_CURRENTSTYLE           DISPID_ELEMENT+7
+#define DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE       DISPID_EVPROP_ONPROPERTYCHANGE
+#define DISPID_IHTMLELEMENT2_GETCLIENTRECTS         DISPID_ELEMENT+44
+#define DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT  DISPID_ELEMENT+45
+#define DISPID_IHTMLELEMENT2_SETEXPRESSION          DISPID_HTMLOBJECT+4
+#define DISPID_IHTMLELEMENT2_GETEXPRESSION          DISPID_HTMLOBJECT+5
+#define DISPID_IHTMLELEMENT2_REMOVEEXPRESSION       DISPID_HTMLOBJECT+6
+#define DISPID_IHTMLELEMENT2_TABINDEX               STDPROPID_XOBJ_TABINDEX
+#define DISPID_IHTMLELEMENT2_FOCUS                  DISPID_SITE
+#define DISPID_IHTMLELEMENT2_ACCESSKEY              DISPID_SITE+5
+#define DISPID_IHTMLELEMENT2_ONBLUR                 DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLELEMENT2_ONFOCUS                DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLELEMENT2_ONRESIZE               DISPID_EVPROP_ONRESIZE
+#define DISPID_IHTMLELEMENT2_BLUR                   DISPID_SITE+2
+#define DISPID_IHTMLELEMENT2_ADDFILTER              DISPID_SITE+17
+#define DISPID_IHTMLELEMENT2_REMOVEFILTER           DISPID_SITE+18
+#define DISPID_IHTMLELEMENT2_CLIENTHEIGHT           DISPID_SITE+19
+#define DISPID_IHTMLELEMENT2_CLIENTWIDTH            DISPID_SITE+20
+#define DISPID_IHTMLELEMENT2_CLIENTTOP              DISPID_SITE+21
+#define DISPID_IHTMLELEMENT2_CLIENTLEFT             DISPID_SITE+22
+#define DISPID_IHTMLELEMENT2_ATTACHEVENT            DISPID_HTMLOBJECT+7
+#define DISPID_IHTMLELEMENT2_DETACHEVENT            DISPID_HTMLOBJECT+8
+#define DISPID_IHTMLELEMENT2_READYSTATE             DISPID_A_READYSTATE
+#define DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE     DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLELEMENT2_ONROWSDELETE           DISPID_EVPROP_ONROWSDELETE
+#define DISPID_IHTMLELEMENT2_ONROWSINSERTED         DISPID_EVPROP_ONROWSINSERTED
+#define DISPID_IHTMLELEMENT2_ONCELLCHANGE           DISPID_EVPROP_ONCELLCHANGE
+#define DISPID_IHTMLELEMENT2_DIR                    DISPID_A_DIR
+#define DISPID_IHTMLELEMENT2_CREATECONTROLRANGE     DISPID_ELEMENT+56
+#define DISPID_IHTMLELEMENT2_SCROLLHEIGHT           DISPID_ELEMENT+57
+#define DISPID_IHTMLELEMENT2_SCROLLWIDTH            DISPID_ELEMENT+58
+#define DISPID_IHTMLELEMENT2_SCROLLTOP              DISPID_ELEMENT+59
+#define DISPID_IHTMLELEMENT2_SCROLLLEFT             DISPID_ELEMENT+60
+#define DISPID_IHTMLELEMENT2_CLEARATTRIBUTES        DISPID_ELEMENT+62
+#define DISPID_IHTMLELEMENT2_MERGEATTRIBUTES        DISPID_ELEMENT+63
+#define DISPID_IHTMLELEMENT2_ONCONTEXTMENU          DISPID_EVPROP_ONCONTEXTMENU
+#define DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT  DISPID_ELEMENT+69
+#define DISPID_IHTMLELEMENT2_APPLYELEMENT           DISPID_ELEMENT+65
+#define DISPID_IHTMLELEMENT2_GETADJACENTTEXT        DISPID_ELEMENT+70
+#define DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT    DISPID_ELEMENT+71
+#define DISPID_IHTMLELEMENT2_CANHAVECHILDREN        DISPID_ELEMENT+72
+#define DISPID_IHTMLELEMENT2_ADDBEHAVIOR            DISPID_ELEMENT+80
+#define DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR         DISPID_ELEMENT+81
+#define DISPID_IHTMLELEMENT2_RUNTIMESTYLE           DISPID_ELEMENT+64
+#define DISPID_IHTMLELEMENT2_BEHAVIORURNS           DISPID_ELEMENT+82
+#define DISPID_IHTMLELEMENT2_TAGURN                 DISPID_ELEMENT+83
+#define DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS      DISPID_EVPROP_ONBEFOREEDITFOCUS
+#define DISPID_IHTMLELEMENT2_READYSTATEVALUE        DISPID_ELEMENT+84
+#define DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME   DISPID_ELEMENT+85
+
+/* IHTMLElement3 */
+#define DISPID_IHTMLELEMENT3_MERGEATTRIBUTES     DISPID_ELEMENT+96
+#define DISPID_IHTMLELEMENT3_ISMULTILINE         DISPID_ELEMENT+97
+#define DISPID_IHTMLELEMENT3_CANHAVEHTML         DISPID_ELEMENT+98
+#define DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE    DISPID_EVPROP_ONLAYOUTCOMPLETE
+#define DISPID_IHTMLELEMENT3_ONPAGE              DISPID_EVPROP_ONPAGE
+#define DISPID_IHTMLELEMENT3_INFLATEBLOCK        DISPID_ELEMENT+100
+#define DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE  DISPID_EVPROP_ONBEFOREDEACTIVATE
+#define DISPID_IHTMLELEMENT3_SETACTIVE           DISPID_ELEMENT+101
+#define DISPID_IHTMLELEMENT3_CONTENTEDITABLE     DISPID_A_EDITABLE
+#define DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE   DISPID_ELEMENT+102
+#define DISPID_IHTMLELEMENT3_HIDEFOCUS           DISPID_A_HIDEFOCUS
+#define DISPID_IHTMLELEMENT3_DISABLED            STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLELEMENT3_ISDISABLED          DISPID_ELEMENT+105
+#define DISPID_IHTMLELEMENT3_ONMOVE              DISPID_EVPROP_ONMOVE
+#define DISPID_IHTMLELEMENT3_ONCONTROLSELECT     DISPID_EVPROP_ONCONTROLSELECT
+#define DISPID_IHTMLELEMENT3_FIREEVENT           DISPID_ELEMENT+106
+#define DISPID_IHTMLELEMENT3_ONRESIZESTART       DISPID_EVPROP_ONRESIZESTART
+#define DISPID_IHTMLELEMENT3_ONRESIZEEND         DISPID_EVPROP_ONRESIZEEND
+#define DISPID_IHTMLELEMENT3_ONMOVESTART         DISPID_EVPROP_ONMOVESTART
+#define DISPID_IHTMLELEMENT3_ONMOVEEND           DISPID_EVPROP_ONMOVEEND
+#define DISPID_IHTMLELEMENT3_ONMOUSEENTER        DISPID_EVPROP_ONMOUSEENTER
+#define DISPID_IHTMLELEMENT3_ONMOUSELEAVE        DISPID_EVPROP_ONMOUSELEAVE
+#define DISPID_IHTMLELEMENT3_ONACTIVATE          DISPID_EVPROP_ONACTIVATE
+#define DISPID_IHTMLELEMENT3_ONDEACTIVATE        DISPID_EVPROP_ONDEACTIVATE
+#define DISPID_IHTMLELEMENT3_DRAGDROP            DISPID_ELEMENT+107
+#define DISPID_IHTMLELEMENT3_GLYPHMODE           DISPID_ELEMENT+108
+
+/* IHTMLElement4 */
+#define DISPID_IHTMLELEMENT4_ONMOUSEWHEEL         DISPID_EVPROP_ONMOUSEWHEEL
+#define DISPID_IHTMLELEMENT4_NORMALIZE            DISPID_ELEMENT+112
+#define DISPID_IHTMLELEMENT4_GETATTRIBUTENODE     DISPID_ELEMENT+109
+#define DISPID_IHTMLELEMENT4_SETATTRIBUTENODE     DISPID_ELEMENT+110
+#define DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE  DISPID_ELEMENT+111
+#define DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE     DISPID_EVPROP_ONBEFOREACTIVATE
+#define DISPID_IHTMLELEMENT4_ONFOCUSIN            DISPID_EVPROP_ONFOCUSIN
+#define DISPID_IHTMLELEMENT4_ONFOCUSOUT           DISPID_EVPROP_ONFOCUSOUT
+
+/* IElementSelector */
+#define DISPID_IELEMENTSELECTOR_QUERYSELECTOR     DISPID_ELEMENT+114
+#define DISPID_IELEMENTSELECTOR_QUERYSELECTORALL  DISPID_ELEMENT+115
+
+/* IHTMLElement5 */
+#define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE     DISPID_IE8_ELEMENT
+#define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE     DISPID_IE8_ELEMENT+1
+#define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE  DISPID_IE8_ELEMENT+2
+#define DISPID_IHTMLELEMENT5_HASATTRIBUTE             DISPID_IE8_ELEMENT+3
+#define DISPID_IHTMLELEMENT5_ROLE                     DISPID_IE8_ELEMENT+4
+#define DISPID_IHTMLELEMENT5_ARIABUSY                 DISPID_IE8_ELEMENT+5
+#define DISPID_IHTMLELEMENT5_ARIACHECKED              DISPID_IE8_ELEMENT+6
+#define DISPID_IHTMLELEMENT5_ARIADISABLED             DISPID_IE8_ELEMENT+7
+#define DISPID_IHTMLELEMENT5_ARIAEXPANDED             DISPID_IE8_ELEMENT+8
+#define DISPID_IHTMLELEMENT5_ARIAHASPOPUP             DISPID_IE8_ELEMENT+9
+#define DISPID_IHTMLELEMENT5_ARIAHIDDEN               DISPID_IE8_ELEMENT+10
+#define DISPID_IHTMLELEMENT5_ARIAINVALID              DISPID_IE8_ELEMENT+11
+#define DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE      DISPID_IE8_ELEMENT+12
+#define DISPID_IHTMLELEMENT5_ARIAPRESSED              DISPID_IE8_ELEMENT+13
+#define DISPID_IHTMLELEMENT5_ARIAREADONLY             DISPID_IE8_ELEMENT+14
+#define DISPID_IHTMLELEMENT5_ARIAREQUIRED             DISPID_IE8_ELEMENT+15
+#define DISPID_IHTMLELEMENT5_ARIASECRET               DISPID_IE8_ELEMENT+16
+#define DISPID_IHTMLELEMENT5_ARIASELECTED             DISPID_IE8_ELEMENT+17
+#define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE         DISPID_IE8_ELEMENT+18
+#define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE         DISPID_IE8_ELEMENT+19
+#define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE      DISPID_IE8_ELEMENT+20
+#define DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES           DISPID_IE8_ELEMENT+21
+#define DISPID_IHTMLELEMENT5_ARIAVALUENOW             DISPID_IE8_ELEMENT+22
+#define DISPID_IHTMLELEMENT5_ARIAPOSINSET             DISPID_IE8_ELEMENT+23
+#define DISPID_IHTMLELEMENT5_ARIASETSIZE              DISPID_IE8_ELEMENT+24
+#define DISPID_IHTMLELEMENT5_ARIALEVEL                DISPID_IE8_ELEMENT+25
+#define DISPID_IHTMLELEMENT5_ARIAVALUEMIN             DISPID_IE8_ELEMENT+26
+#define DISPID_IHTMLELEMENT5_ARIAVALUEMAX             DISPID_IE8_ELEMENT+27
+#define DISPID_IHTMLELEMENT5_ARIACONTROLS             DISPID_IE8_ELEMENT+28
+#define DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY          DISPID_IE8_ELEMENT+29
+#define DISPID_IHTMLELEMENT5_ARIAFLOWTO               DISPID_IE8_ELEMENT+30
+#define DISPID_IHTMLELEMENT5_ARIALABELLEDBY           DISPID_IE8_ELEMENT+31
+#define DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT     DISPID_IE8_ELEMENT+32
+#define DISPID_IHTMLELEMENT5_ARIAOWNS                 DISPID_IE8_ELEMENT+33
+#define DISPID_IHTMLELEMENT5_HASATTRIBUTES            DISPID_IE8_ELEMENT+34
+#define DISPID_IHTMLELEMENT5_ARIALIVE                 DISPID_IE8_ELEMENT+35
+#define DISPID_IHTMLELEMENT5_ARIARELEVANT             DISPID_IE8_ELEMENT+36
+
+/* IHTMLGenericElement */
+#define DISPID_IHTMLGENERICELEMENT_RECORDSET       DISPID_GENERIC+1
+#define DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET  DISPID_GENERIC+2
+
+/* IHTMLUniqueName */
+#define DISPID_IHTMLUNIQUENAME_UNIQUENUMBER  DISPID_ELEMENT+54
+#define DISPID_IHTMLUNIQUENAME_UNIQUEID      DISPID_ELEMENT+55
+
+/* IHTMLDatabinding */
+#define DISPID_IHTMLDATABINDING_DATAFLD       DISPID_ELEMENT+21
+#define DISPID_IHTMLDATABINDING_DATASRC       DISPID_ELEMENT+22
+#define DISPID_IHTMLDATABINDING_DATAFORMATAS  DISPID_ELEMENT+23
+
+/* IHTMLDOMConstructor */
+#define DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR   DISPID_HTMLOBJECT+9
+#define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPGETTER
+#define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPSETTER
+#define DISPID_IHTMLDOMCONSTRUCTOR_DEFINEGETTER
+#define DISPID_IHTMLDOMCONSTRUCTOR_DEFINESETTER
+
+/* IHTMLStyle */
+#define DISPID_IHTMLSTYLE_PIXELTOP                    DISPID_STYLE
+#define DISPID_IHTMLSTYLE_PIXELLEFT                   (DISPID_STYLE+1)
+#define DISPID_IHTMLSTYLE_PIXELWIDTH                  (DISPID_STYLE+2)
+#define DISPID_IHTMLSTYLE_PIXELHEIGHT                 (DISPID_STYLE+3)
+#define DISPID_IHTMLSTYLE_POSTOP                      (DISPID_STYLE+4)
+#define DISPID_IHTMLSTYLE_POSLEFT                     (DISPID_STYLE+5)
+#define DISPID_IHTMLSTYLE_POSWIDTH                    (DISPID_STYLE+6)
+#define DISPID_IHTMLSTYLE_POSHEIGHT                   (DISPID_STYLE+7)
+#define DISPID_IHTMLSTYLE_TOSTRING                    (DISPID_STYLE+8)
+#define DISPID_IHTMLSTYLE_SETATTRIBUTE                (DISPID_HTMLOBJECT+1)
+#define DISPID_IHTMLSTYLE_GETATTRIBUTE                (DISPID_HTMLOBJECT+2)
+#define DISPID_IHTMLSTYLE_REMOVEATTRIBUTE             (DISPID_HTMLOBJECT+3)
+#define DISPID_IHTMLSTYLE_FONTFAMILY                  DISPID_A_FONTFACE
+#define DISPID_IHTMLSTYLE_FONTSTYLE                   DISPID_A_FONTSTYLE
+#define DISPID_IHTMLSTYLE_FONTVARIANT                 DISPID_A_FONTVARIANT
+#define DISPID_IHTMLSTYLE_FONTWEIGHT                  DISPID_A_FONTWEIGHT
+#define DISPID_IHTMLSTYLE_FONTSIZE                    DISPID_A_FONTSIZE
+#define DISPID_IHTMLSTYLE_FONT                        DISPID_A_FONT
+#define DISPID_IHTMLSTYLE_COLOR                       DISPID_A_COLOR
+#define DISPID_IHTMLSTYLE_BACKGROUND                  DISPID_A_BACKGROUND
+#define DISPID_IHTMLSTYLE_BACKGROUNDIMAGE             DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLSTYLE_BACKGROUNDREPEAT            DISPID_A_BACKGROUNDREPEAT
+#define DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT        DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITION          DISPID_A_BACKGROUNDPOSITION
+#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX         DISPID_A_BACKGROUNDPOSX
+#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY         DISPID_A_BACKGROUNDPOSY
+#define DISPID_IHTMLSTYLE_WORDSPACING                 DISPID_A_WORDSPACING
+#define DISPID_IHTMLSTYLE_LETTERSPACING               DISPID_A_LETTERSPACING
+#define DISPID_IHTMLSTYLE_TEXTDECORATION              DISPID_A_TEXTDECORATION
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONNONE          DISPID_A_TEXTDECORATIONNONE
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE     DISPID_A_TEXTDECORATIONUNDERLINE
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE      DISPID_A_TEXTDECORATIONOVERLINE
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH   DISPID_A_TEXTDECORATIONLINETHROUGH
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK         DISPID_A_TEXTDECORATIONBLINK
+#define DISPID_IHTMLSTYLE_VERTICALALIGN               DISPID_A_VERTICALALIGN
+#define DISPID_IHTMLSTYLE_TEXTTRANSFORM               DISPID_A_TEXTTRANSFORM
+#define DISPID_IHTMLSTYLE_TEXTINDENT                  DISPID_A_TEXTINDENT
+#define DISPID_IHTMLSTYLE_LINEHEIGHT                  DISPID_A_LINEHEIGHT
+#define DISPID_IHTMLSTYLE_MARGINTOP                   DISPID_A_MARGINTOP
+#define DISPID_IHTMLSTYLE_MARGINRIGHT                 DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLSTYLE_MARGINBOTTOM                DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLSTYLE_MARGINLEFT                  DISPID_A_MARGINLEFT
+#define DISPID_IHTMLSTYLE_MARGIN                      DISPID_A_MARGIN
+#define DISPID_IHTMLSTYLE_PADDINGTOP                  DISPID_A_PADDINGTOP
+#define DISPID_IHTMLSTYLE_PADDINGRIGHT                DISPID_A_PADDINGRIGHT
+#define DISPID_IHTMLSTYLE_PADDINGBOTTOM               DISPID_A_PADDINGBOTTOM
+#define DISPID_IHTMLSTYLE_PADDINGLEFT                 DISPID_A_PADDINGLEFT
+#define DISPID_IHTMLSTYLE_PADDING                     DISPID_A_PADDING
+#define DISPID_IHTMLSTYLE_BORDER                      DISPID_A_BORDER
+#define DISPID_IHTMLSTYLE_BORDERTOP                   DISPID_A_BORDERTOP
+#define DISPID_IHTMLSTYLE_BORDERRIGHT                 DISPID_A_BORDERRIGHT
+#define DISPID_IHTMLSTYLE_BORDERBOTTOM                DISPID_A_BORDERBOTTOM
+#define DISPID_IHTMLSTYLE_BORDERLEFT                  DISPID_A_BORDERLEFT
+#define DISPID_IHTMLSTYLE_BORDERCOLOR                 DISPID_A_BORDERCOLOR
+#define DISPID_IHTMLSTYLE_BORDERTOPCOLOR              DISPID_A_BORDERTOPCOLOR
+#define DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR            DISPID_A_BORDERRIGHTCOLOR
+#define DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR           DISPID_A_BORDERBOTTOMCOLOR
+#define DISPID_IHTMLSTYLE_BORDERLEFTCOLOR             DISPID_A_BORDERLEFTCOLOR
+#define DISPID_IHTMLSTYLE_BORDERWIDTH                 DISPID_A_BORDERWIDTH
+#define DISPID_IHTMLSTYLE_BORDERTOPWIDTH              DISPID_A_BORDERTOPWIDTH
+#define DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH            DISPID_A_BORDERRIGHTWIDTH
+#define DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH           DISPID_A_BORDERBOTTOMWIDTH
+#define DISPID_IHTMLSTYLE_BORDERLEFTWIDTH             DISPID_A_BORDERLEFTWIDTH
+#define DISPID_IHTMLSTYLE_BORDERSTYLE                 DISPID_A_BORDERSTYLE
+#define DISPID_IHTMLSTYLE_BORDERTOPSTYLE              DISPID_A_BORDERTOPSTYLE
+#define DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE            DISPID_A_BORDERRIGHTSTYLE
+#define DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE           DISPID_A_BORDERBOTTOMSTYLE
+#define DISPID_IHTMLSTYLE_BORDERLEFTSTYLE             DISPID_A_BORDERLEFTSTYLE
+#define DISPID_IHTMLSTYLE_STYLEFLOAT                  DISPID_A_FLOAT
+#define DISPID_IHTMLSTYLE_CLEAR                       DISPID_A_CLEAR
+#define DISPID_IHTMLSTYLE_DISPLAY                     DISPID_A_DISPLAY
+#define DISPID_IHTMLSTYLE_VISIBILITY                  DISPID_A_VISIBILITY
+#define DISPID_IHTMLSTYLE_LISTSTYLETYPE               DISPID_A_LISTSTYLETYPE
+#define DISPID_IHTMLSTYLE_LISTSTYLEPOSITION           DISPID_A_LISTSTYLEPOSITION
+#define DISPID_IHTMLSTYLE_LISTSTYLEIMAGE              DISPID_A_LISTSTYLEIMAGE
+#define DISPID_IHTMLSTYLE_LISTSTYLE                   DISPID_A_LISTSTYLE
+#define DISPID_IHTMLSTYLE_WHITESPACE                  DISPID_A_WHITESPACE
+#define DISPID_IHTMLSTYLE_POSITION                    DISPID_A_POSITION
+#define DISPID_IHTMLSTYLE_ZINDEX                      DISPID_A_ZINDEX
+#define DISPID_IHTMLSTYLE_OVERFLOW                    DISPID_A_OVERFLOW
+#define DISPID_IHTMLSTYLE_PAGEBREAKBEFORE             DISPID_A_PAGEBREAKBEFORE
+#define DISPID_IHTMLSTYLE_PAGEBREAKAFTER              DISPID_A_PAGEBREAKAFTER
+#define DISPID_IHTMLSTYLE_CSSTEXT                     DISPID_A_STYLETEXT
+#define DISPID_IHTMLSTYLE_CURSOR                      DISPID_A_CURSOR
+#define DISPID_IHTMLSTYLE_CLIP                        DISPID_A_CLIP
+#define DISPID_IHTMLSTYLE_FILTER                      DISPID_A_FILTER
+#define DISPID_IHTMLSTYLE_WIDTH                       STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLSTYLE_HEIGHT                      STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLSTYLE_TOP                         STDPROPID_XOBJ_TOP
+#define DISPID_IHTMLSTYLE_LEFT                        STDPROPID_XOBJ_LEFT
+#define DISPID_IHTMLSTYLE_TEXTALIGN                   STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR             DISPID_BACKCOLOR
+
+/* IHTMLStyle2 */
+#define DISPID_IHTMLSTYLE2_TABLELAYOUT       DISPID_A_TABLELAYOUT
+#define DISPID_IHTMLSTYLE2_BORDERCOLLAPSE    DISPID_A_BORDERCOLLAPSE
+#define DISPID_IHTMLSTYLE2_DIRECTION         DISPID_A_DIRECTION
+#define DISPID_IHTMLSTYLE2_BEHAVIOR          DISPID_A_BEHAVIOR
+#define DISPID_IHTMLSTYLE2_SETEXPRESSION     DISPID_HTMLOBJECT+4
+#define DISPID_IHTMLSTYLE2_GETEXPRESSION     DISPID_HTMLOBJECT+5
+#define DISPID_IHTMLSTYLE2_REMOVEEXPRESSION  DISPID_HTMLOBJECT+6
+#define DISPID_IHTMLSTYLE2_POSITION          DISPID_A_POSITION
+#define DISPID_IHTMLSTYLE2_UNICODEBIDI       DISPID_A_UNICODEBIDI
+#define DISPID_IHTMLSTYLE2_BOTTOM            STDPROPID_XOBJ_BOTTOM
+#define DISPID_IHTMLSTYLE2_RIGHT             STDPROPID_XOBJ_RIGHT
+#define DISPID_IHTMLSTYLE2_PIXELBOTTOM       DISPID_STYLE+9
+#define DISPID_IHTMLSTYLE2_PIXELRIGHT        DISPID_STYLE+10
+#define DISPID_IHTMLSTYLE2_POSBOTTOM         DISPID_STYLE+11
+#define DISPID_IHTMLSTYLE2_POSRIGHT          DISPID_STYLE+12
+#define DISPID_IHTMLSTYLE2_IMEMODE           DISPID_A_IMEMODE
+#define DISPID_IHTMLSTYLE2_RUBYALIGN         DISPID_A_RUBYALIGN
+#define DISPID_IHTMLSTYLE2_RUBYPOSITION      DISPID_A_RUBYPOSITION
+#define DISPID_IHTMLSTYLE2_RUBYOVERHANG      DISPID_A_RUBYOVERHANG
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR    DISPID_A_LAYOUTGRIDCHAR
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE    DISPID_A_LAYOUTGRIDLINE
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE    DISPID_A_LAYOUTGRIDMODE
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE    DISPID_A_LAYOUTGRIDTYPE
+#define DISPID_IHTMLSTYLE2_LAYOUTGRID        DISPID_A_LAYOUTGRID
+#define DISPID_IHTMLSTYLE2_WORDBREAK         DISPID_A_WORDBREAK
+#define DISPID_IHTMLSTYLE2_LINEBREAK         DISPID_A_LINEBREAK
+#define DISPID_IHTMLSTYLE2_TEXTJUSTIFY       DISPID_A_TEXTJUSTIFY
+#define DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM   DISPID_A_TEXTJUSTIFYTRIM
+#define DISPID_IHTMLSTYLE2_TEXTKASHIDA       DISPID_A_TEXTKASHIDA
+#define DISPID_IHTMLSTYLE2_TEXTAUTOSPACE     DISPID_A_TEXTAUTOSPACE
+#define DISPID_IHTMLSTYLE2_OVERFLOWX         DISPID_A_OVERFLOWX
+#define DISPID_IHTMLSTYLE2_OVERFLOWY         DISPID_A_OVERFLOWY
+#define DISPID_IHTMLSTYLE2_ACCELERATOR       DISPID_A_ACCELERATOR
+
+/* IHTMLStyle3 */
+#define DISPID_IHTMLSTYLE3_LAYOUTFLOW                DISPID_A_LAYOUTFLOW
+#define DISPID_IHTMLSTYLE3_ZOOM                      DISPID_A_ZOOM
+#define DISPID_IHTMLSTYLE3_WORDWRAP                  DISPID_A_WORDWRAP
+#define DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION     DISPID_A_TEXTUNDERLINEPOSITION
+#define DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR        DISPID_A_SCROLLBARBASECOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR        DISPID_A_SCROLLBARFACECOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR     DISPID_A_SCROLLBAR3DLIGHTCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR      DISPID_A_SCROLLBARSHADOWCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR   DISPID_A_SCROLLBARHIGHLIGHTCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR  DISPID_A_SCROLLBARDARKSHADOWCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR       DISPID_A_SCROLLBARARROWCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR       DISPID_A_SCROLLBARTRACKCOLOR
+#define DISPID_IHTMLSTYLE3_WRITINGMODE               DISPID_A_WRITINGMODE
+#define DISPID_IHTMLSTYLE3_TEXTALIGNLAST             DISPID_A_TEXTALIGNLAST
+#define DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE          DISPID_A_TEXTKASHIDASPACE
+
+/* IHTMLStyle4 */
+#define DISPID_IHTMLSTYLE4_TEXTOVERFLOW  DISPID_A_TEXTOVERFLOW
+#define DISPID_IHTMLSTYLE4_MINHEIGHT     DISPID_A_MINHEIGHT
+
+/* IHTMLStyle5 */
+#define DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE  DISPID_A_INTERPOLATION
+#define DISPID_IHTMLSTYLE5_MAXHEIGHT            DISPID_A_MAXHEIGHT
+#define DISPID_IHTMLSTYLE5_MINWIDTH             DISPID_A_MINWIDTH
+#define DISPID_IHTMLSTYLE5_MAXWIDTH             DISPID_A_MAXWIDTH
+
+/* IHTMLStyle6 */
+#define DISPID_IHTMLSTYLE6_CONTENT             DISPID_A_CONTENT
+#define DISPID_IHTMLSTYLE6_CAPTIONSIDE         DISPID_A_CAPTIONSIDE
+#define DISPID_IHTMLSTYLE6_COUNTERINCREMENT    DISPID_A_COUNTERINCREMENT
+#define DISPID_IHTMLSTYLE6_COUNTERRESET        DISPID_A_COUNTERRESET
+#define DISPID_IHTMLSTYLE6_OUTLINE             DISPID_A_OUTLINE
+#define DISPID_IHTMLSTYLE6_OUTLINEWIDTH        DISPID_A_OUTLINEWIDTH
+#define DISPID_IHTMLSTYLE6_OUTLINESTYLE        DISPID_A_OUTLINESTYLE
+#define DISPID_IHTMLSTYLE6_OUTLINECOLOR        DISPID_A_OUTLINECOLOR
+#define DISPID_IHTMLSTYLE6_BOXSIZING           DISPID_A_BOXSIZING
+#define DISPID_IHTMLSTYLE6_BORDERSPACING       DISPID_A_BORDERSPACING
+#define DISPID_IHTMLSTYLE6_ORPHANS             DISPID_A_ORPHANS
+#define DISPID_IHTMLSTYLE6_WIDOWS              DISPID_A_WIDOWS
+#define DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE     DISPID_A_PAGEBREAKINSIDE
+#define DISPID_IHTMLSTYLE6_EMPTYCELLS          DISPID_A_EMPTYCELLS
+#define DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION  DISPID_A_MS_BLOCKPROGRESSION
+#define DISPID_IHTMLSTYLE6_QUOTES              DISPID_A_QUOTES
+
+/* IHTMLFiltersCollection */
+#define DISPID_IHTMLFILTERSCOLLECTION_LENGTH     (DISPID_FILTERS+1)
+#define DISPID_IHTMLFILTERSCOLLECTION__NEWENUM   DISPID_NEWENUM
+#define DISPID_IHTMLFILTERSCOLLECTION_ITEM       DISPID_VALUE
+
+/* IHTMLSelectionObject */
+#define DISPID_IHTMLSELECTIONOBJECT_CREATERANGE   (DISPID_SELECTOBJ+1)
+#define DISPID_IHTMLSELECTIONOBJECT_EMPTY         (DISPID_SELECTOBJ+2)
+#define DISPID_IHTMLSELECTIONOBJECT_CLEAR         (DISPID_SELECTOBJ+3)
+#define DISPID_IHTMLSELECTIONOBJECT_TYPE          (DISPID_SELECTOBJ+4)
+
+/* IHTMLFramesCollection2 */
+#define DISPID_IHTMLFRAMESCOLLECTION2_ITEM     0
+#define DISPID_IHTMLFRAMESCOLLECTION2_LENGTH   1001
+
+/* IHTMLLocation */
+#define DISPID_IHTMLLOCATION_HOST       (DISPID_LOCATION+1)
+#define DISPID_IHTMLLOCATION_HOSTNAME   (DISPID_LOCATION+2)
+#define DISPID_IHTMLLOCATION_PORT       (DISPID_LOCATION+3)
+#define DISPID_IHTMLLOCATION_PATHNAME   (DISPID_LOCATION+4)
+#define DISPID_IHTMLLOCATION_SEARCH     (DISPID_LOCATION+5)
+#define DISPID_IHTMLLOCATION_HASH       (DISPID_LOCATION+6)
+#define DISPID_IHTMLLOCATION_RELOAD     (DISPID_LOCATION+7)
+#define DISPID_IHTMLLOCATION_REPLACE    (DISPID_LOCATION+8)
+#define DISPID_IHTMLLOCATION_ASSIGN     (DISPID_LOCATION+9)
+#define DISPID_IHTMLLOCATION_TOSTRING   (DISPID_LOCATION+10)
+#define DISPID_IHTMLLOCATION_HREF       DISPID_VALUE
+#define DISPID_IHTMLLOCATION_PROTOCOL   DISPID_LOCATION
+
+/* IHTMLBookmarkCollection */
+#define DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH    DISPID_OPTIONS_COL+1
+#define DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM  DISPID_NEWENUM
+#define DISPID_IHTMLBOOKMARKCOLLECTION_ITEM      DISPID_VALUE
+
+/* HTMLWindowEvents */
+#define DISPID_HTMLWINDOWEVENTS_ONLOAD           DISPID_EVMETH_ONLOAD
+#define DISPID_HTMLWINDOWEVENTS_ONUNLOAD         DISPID_EVMETH_ONUNLOAD
+#define DISPID_HTMLWINDOWEVENTS_ONHELP           DISPID_EVMETH_ONHELP
+#define DISPID_HTMLWINDOWEVENTS_ONFOCUS          DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLWINDOWEVENTS_ONBLUR           DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLWINDOWEVENTS_ONERROR          DISPID_EVMETH_ONERROR
+#define DISPID_HTMLWINDOWEVENTS_ONRESIZE         DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLWINDOWEVENTS_ONSCROLL         DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD   DISPID_EVMETH_ONBEFOREUNLOAD
+#define DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT    DISPID_EVMETH_ONBEFOREPRINT
+#define DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT     DISPID_EVMETH_ONAFTERPRINT
+
+/* HTMLWindowEvents2 */
+#define DISPID_HTMLWINDOWEVENTS2_ONLOAD          DISPID_EVMETH_ONLOAD
+#define DISPID_HTMLWINDOWEVENTS2_ONUNLOAD        DISPID_EVMETH_ONUNLOAD
+#define DISPID_HTMLWINDOWEVENTS2_ONHELP          DISPID_EVMETH_ONHELP
+#define DISPID_HTMLWINDOWEVENTS2_ONFOCUS         DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLWINDOWEVENTS2_ONBLUR          DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLWINDOWEVENTS2_ONERROR         DISPID_EVMETH_ONERROR
+#define DISPID_HTMLWINDOWEVENTS2_ONRESIZE        DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLWINDOWEVENTS2_ONSCROLL        DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD  DISPID_EVMETH_ONBEFOREUNLOAD
+#define DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT   DISPID_EVMETH_ONBEFOREPRINT
+#define DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT    DISPID_EVMETH_ONAFTERPRINT
+
+/* IHTMLWindow2 */
+#define DISPID_IHTMLWINDOW2_HISTORY              2
+#define DISPID_IHTMLWINDOW2_CLOSE                3
+#define DISPID_IHTMLWINDOW2_OPENER               4
+#define DISPID_IHTMLWINDOW2_NAVIGATOR            5
+#define DISPID_IHTMLWINDOW2_MOVETO               6
+#define DISPID_IHTMLWINDOW2_MOVEBY               7
+#define DISPID_IHTMLWINDOW2_RESIZETO             9
+#define DISPID_IHTMLWINDOW2_RESIZEBY             8
+#define DISPID_IHTMLWINDOW2_NAME                 11
+#define DISPID_IHTMLWINDOW2_PARENT               12
+#define DISPID_IHTMLWINDOW2_OPEN                 13
+#define DISPID_IHTMLWINDOW2_LOCATION             14
+#define DISPID_IHTMLWINDOW2_SELF                 20
+#define DISPID_IHTMLWINDOW2_TOP                  21
+#define DISPID_IHTMLWINDOW2_WINDOW               22
+#define DISPID_IHTMLWINDOW2_CLOSED               23
+#define DISPID_IHTMLWINDOW2_NAVIGATE             25
+#define DISPID_IHTMLWINDOW2_FRAMES               1100
+#define DISPID_IHTMLWINDOW2_DEFAULTSTATUS        1101
+#define DISPID_IHTMLWINDOW2_STATUS               1102
+#define DISPID_IHTMLWINDOW2_SETTIMEOUT           1172
+#define DISPID_IHTMLWINDOW2_CLEARTIMEOUT         1104
+#define DISPID_IHTMLWINDOW2_ALERT                1105
+#define DISPID_IHTMLWINDOW2_CONFIRM              1110
+#define DISPID_IHTMLWINDOW2_PROMPT               1111
+#define DISPID_IHTMLWINDOW2_IMAGE                1125
+#define DISPID_IHTMLWINDOW2_DOCUMENT             1151
+#define DISPID_IHTMLWINDOW2_EVENT                1152
+#define DISPID_IHTMLWINDOW2__NEWENUM             1153
+#define DISPID_IHTMLWINDOW2_SHOWMODALDIALOG      1154
+#define DISPID_IHTMLWINDOW2_SHOWHELP             1155
+#define DISPID_IHTMLWINDOW2_SCREEN               1156
+#define DISPID_IHTMLWINDOW2_OPTION               1157
+#define DISPID_IHTMLWINDOW2_FOCUS                1158
+#define DISPID_IHTMLWINDOW2_BLUR                 1159
+#define DISPID_IHTMLWINDOW2_SCROLL               1160
+#define DISPID_IHTMLWINDOW2_CLIENTINFORMATION    1161
+#define DISPID_IHTMLWINDOW2_SETINTERVAL          1173
+#define DISPID_IHTMLWINDOW2_CLEARINTERVAL        1163
+#define DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING   1164
+#define DISPID_IHTMLWINDOW2_EXECSCRIPT           1165
+#define DISPID_IHTMLWINDOW2_TOSTRING             1166
+#define DISPID_IHTMLWINDOW2_SCROLLBY             1167
+#define DISPID_IHTMLWINDOW2_SCROLLTO             1168
+#define DISPID_IHTMLWINDOW2_EXTERNAL             1169
+#define DISPID_IHTMLWINDOW2_ONFOCUS              DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLWINDOW2_ONBLUR               DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLWINDOW2_ONLOAD               DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD       DISPID_EVPROP_ONBEFOREUNLOAD
+#define DISPID_IHTMLWINDOW2_ONUNLOAD             DISPID_EVPROP_ONUNLOAD
+#define DISPID_IHTMLWINDOW2_ONHELP               DISPID_EVPROP_ONHELP
+#define DISPID_IHTMLWINDOW2_ONERROR              DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLWINDOW2_ONRESIZE             DISPID_EVPROP_ONRESIZE
+#define DISPID_IHTMLWINDOW2_ONSCROLL             DISPID_EVPROP_ONSCROLL
+
+/* IHTMLWindow3 */
+#define DISPID_IHTMLWINDOW3_SCREENLEFT          1170
+#define DISPID_IHTMLWINDOW3_SCREENTOP           1171
+#define DISPID_IHTMLWINDOW3_ATTACHEVENT         DISPID_HTMLOBJECT+7
+#define DISPID_IHTMLWINDOW3_DETACHEVENT         DISPID_HTMLOBJECT+8
+#define DISPID_IHTMLWINDOW3_SETTIMEOUT          1103
+#define DISPID_IHTMLWINDOW3_SETINTERVAL         1162
+#define DISPID_IHTMLWINDOW3_PRINT               1174
+#define DISPID_IHTMLWINDOW3_ONBEFOREPRINT       DISPID_EVPROP_ONBEFOREPRINT
+#define DISPID_IHTMLWINDOW3_ONAFTERPRINT        DISPID_EVPROP_ONAFTERPRINT
+#define DISPID_IHTMLWINDOW3_CLIPBOARDDATA       1175
+#define DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG  1176
+
+/* IHTMLWindow4 */
+#define DISPID_IHTMLWINDOW4_CREATEPOPUP   1180
+#define DISPID_IHTMLWINDOW4_FRAMEELEMENT  1181
+
+/* IHTMLWindow5 */
+#define DISPID_IHTMLWINDOW5_XMLHTTPREQUEST 1190
+
+/* IHTMLWindow6 */
+#define DISPID_IHTMLWINDOW6_XDOMAINREQUEST           1191
+#define DISPID_IHTMLWINDOW6_SESSIONSTORAGE           1192
+#define DISPID_IHTMLWINDOW6_LOCALSTORAGE             1193
+#define DISPID_IHTMLWINDOW6_ONHASHCHANGE             DISPID_EVPROP_ONHASHCHANGE
+#define DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER  1194
+#define DISPID_IHTMLWINDOW6_POSTMESSAGE              1196
+#define DISPID_IHTMLWINDOW6_TOSTATICHTML             1197
+#define DISPID_IHTMLWINDOW6_ONMESSAGE                DISPID_EVPROP_ONMESSAGE
+#define DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK      1198
+
+/* IHTMLImageElementFactory */
+#define DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE                    DISPID_VALUE
+
+/* IHTMLImgElement */
+#define DISPID_IHTMLIMGELEMENT_BORDER             (DISPID_IMGBASE+4)
+#define DISPID_IHTMLIMGELEMENT_VSPACE             (DISPID_IMGBASE+5)
+#define DISPID_IHTMLIMGELEMENT_HSPACE             (DISPID_IMGBASE+6)
+#define DISPID_IHTMLIMGELEMENT_ALT                (DISPID_IMGBASE+2)
+#define DISPID_IHTMLIMGELEMENT_SRC                (DISPID_IMGBASE+3)
+#define DISPID_IHTMLIMGELEMENT_LOWSRC             (DISPID_IMGBASE+7)
+#define DISPID_IHTMLIMGELEMENT_VRML               (DISPID_IMGBASE+8)
+#define DISPID_IHTMLIMGELEMENT_DYNSRC             (DISPID_IMGBASE+9)
+#define DISPID_IHTMLIMGELEMENT_READYSTATE         (DISPID_IMGBASE+12)
+#define DISPID_IHTMLIMGELEMENT_COMPLETE           (DISPID_IMGBASE+10)
+#define DISPID_IHTMLIMGELEMENT_LOOP               (DISPID_IMGBASE+11)
+#define DISPID_IHTMLIMGELEMENT_ISMAP              (DISPID_IMG+2)
+#define DISPID_IHTMLIMGELEMENT_USEMAP             (DISPID_IMG+8)
+#define DISPID_IHTMLIMGELEMENT_MIMETYPE           (DISPID_IMG+10)
+#define DISPID_IHTMLIMGELEMENT_FILESIZE           (DISPID_IMG+11)
+#define DISPID_IHTMLIMGELEMENT_FILECREATEDDATE    (DISPID_IMG+12)
+#define DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE   (DISPID_IMG+13)
+#define DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE    (DISPID_IMG+14)
+#define DISPID_IHTMLIMGELEMENT_PROTOCOL           (DISPID_IMG+15)
+#define DISPID_IHTMLIMGELEMENT_HREF               (DISPID_IMG+16)
+#define DISPID_IHTMLIMGELEMENT_NAMEPROP           (DISPID_IMG+17)
+#define DISPID_IHTMLIMGELEMENT_ALIGN              STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLIMGELEMENT_ONLOAD             DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLIMGELEMENT_ONERROR            DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLIMGELEMENT_ONABORT            DISPID_EVPROP_ONABORT
+#define DISPID_IHTMLIMGELEMENT_NAME               STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLIMGELEMENT_WIDTH              STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLIMGELEMENT_HEIGHT             STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLIMGELEMENT_START              DISPID_IMGBASE+13
+
+/* IHTMLImgElement2 */
+#define DISPID_IHTMLIMGELEMENT2_LONGDESC  DISPID_IMG+19
+
+/* IHTMLXMLHttpRequest */
+#define DISPID_IHTMLXMLHTTPREQUEST_READYSTATE             DISPID_XMLHTTPREQUEST+2
+#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY           DISPID_XMLHTTPREQUEST+3
+#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT           DISPID_XMLHTTPREQUEST+4
+#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML            DISPID_XMLHTTPREQUEST+5
+#define DISPID_IHTMLXMLHTTPREQUEST_STATUS                 DISPID_XMLHTTPREQUEST+6
+#define DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT             DISPID_XMLHTTPREQUEST+7
+#define DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE     DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLXMLHTTPREQUEST_ABORT                  DISPID_XMLHTTPREQUEST+9
+#define DISPID_IHTMLXMLHTTPREQUEST_OPEN                   DISPID_XMLHTTPREQUEST+10
+#define DISPID_IHTMLXMLHTTPREQUEST_SEND                   DISPID_XMLHTTPREQUEST+11
+#define DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS  DISPID_XMLHTTPREQUEST+12
+#define DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER      DISPID_XMLHTTPREQUEST+13
+#define DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER       DISPID_XMLHTTPREQUEST+14
+
+/* IHTMLXMLHttpRequest2 */
+#define DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT    DISPID_XMLHTTPREQUEST+15
+#define DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT  DISPID_EVPROP_TIMEOUT
+
+/* IHTMLXMLHttpRequestFactory */
+#define DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE  DISPID_VALUE
+
+/* HTMLXMLHttpRequestEvents */
+#define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONTIMEOUT           DISPID_XMLHTTPREQUEST+16
+#define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONREADYSTATECHANGE  DISPID_XMLHTTPREQUEST+8
+
+/* IOmHistory */
+#define DISPID_IOMHISTORY_LENGTH    DISPID_HISTORY
+#define DISPID_IOMHISTORY_BACK      (DISPID_HISTORY+1)
+#define DISPID_IOMHISTORY_FORWARD   (DISPID_HISTORY+2)
+#define DISPID_IOMHISTORY_GO        (DISPID_HISTORY+3)
+
+/* IOmNavigator */
+#define DISPID_IOMNAVIGATOR_APPCODENAME       DISPID_NAVIGATOR
+#define DISPID_IOMNAVIGATOR_APPNAME           (DISPID_NAVIGATOR+1)
+#define DISPID_IOMNAVIGATOR_APPVERSION        (DISPID_NAVIGATOR+2)
+#define DISPID_IOMNAVIGATOR_USERAGENT         (DISPID_NAVIGATOR+3)
+#define DISPID_IOMNAVIGATOR_JAVAENABLED       (DISPID_NAVIGATOR+4)
+#define DISPID_IOMNAVIGATOR_TAINTENABLED      (DISPID_NAVIGATOR+5)
+#define DISPID_IOMNAVIGATOR_MIMETYPES         (DISPID_NAVIGATOR+6)
+#define DISPID_IOMNAVIGATOR_PLUGINS           (DISPID_NAVIGATOR+7)
+#define DISPID_IOMNAVIGATOR_COOKIEENABLED     (DISPID_NAVIGATOR+8)
+#define DISPID_IOMNAVIGATOR_OPSPROFILE        (DISPID_NAVIGATOR+9)
+#define DISPID_IOMNAVIGATOR_TOSTRING          (DISPID_NAVIGATOR+10)
+#define DISPID_IOMNAVIGATOR_CPUCLASS          (DISPID_NAVIGATOR+11)
+#define DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE    (DISPID_NAVIGATOR+12)
+#define DISPID_IOMNAVIGATOR_BROWSERLANGUAGE   (DISPID_NAVIGATOR+13)
+#define DISPID_IOMNAVIGATOR_USERLANGUAGE      (DISPID_NAVIGATOR+14)
+#define DISPID_IOMNAVIGATOR_PLATFORM          (DISPID_NAVIGATOR+15)
+#define DISPID_IOMNAVIGATOR_APPMINORVERSION   (DISPID_NAVIGATOR+16)
+#define DISPID_IOMNAVIGATOR_CONNECTIONSPEED   (DISPID_NAVIGATOR+17)
+#define DISPID_IOMNAVIGATOR_ONLINE            (DISPID_NAVIGATOR+18)
+#define DISPID_IOMNAVIGATOR_USERPROFILE       (DISPID_NAVIGATOR+19)
+
+/* IHTMLMimeTypesCollection */
+#define DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH   1
+
+/* IHTMLPluginsCollection */
+#define DISPID_IHTMLPLUGINSCOLLECTION_LENGTH    1
+#define DISPID_IHTMLPLUGINSCOLLECTION_REFRESH   2
+
+/* IHTMLOpsProfile */
+#define DISPID_IHTMLOPSPROFILE_ADDREQUEST       1
+#define DISPID_IHTMLOPSPROFILE_CLEARREQUEST     2
+#define DISPID_IHTMLOPSPROFILE_DOREQUEST        3
+#define DISPID_IHTMLOPSPROFILE_GETATTRIBUTE     4
+#define DISPID_IHTMLOPSPROFILE_SETATTRIBUTE     5
+#define DISPID_IHTMLOPSPROFILE_COMMITCHANGES    6
+#define DISPID_IHTMLOPSPROFILE_ADDREADREQUEST   7
+#define DISPID_IHTMLOPSPROFILE_DOREADREQUEST    8
+#define DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST   9
+
+/* IHTMLDataTransfer */
+#define DISPID_IHTMLDATATRANSFER_SETDATA        DISPID_DATATRANSFER+1
+#define DISPID_IHTMLDATATRANSFER_GETDATA        DISPID_DATATRANSFER+2
+#define DISPID_IHTMLDATATRANSFER_CLEARDATA      DISPID_DATATRANSFER+3
+#define DISPID_IHTMLDATATRANSFER_DROPEFFECT     DISPID_DATATRANSFER+4
+#define DISPID_IHTMLDATATRANSFER_EFFECTALLOWED  DISPID_DATATRANSFER+5
+
+/* IHTMLEventObj */
+#define DISPID_IHTMLEVENTOBJ_SRCELEMENT     (DISPID_EVENTOBJ+1)
+#define DISPID_IHTMLEVENTOBJ_ALTKEY         (DISPID_EVENTOBJ+2)
+#define DISPID_IHTMLEVENTOBJ_CTRLKEY        (DISPID_EVENTOBJ+3)
+#define DISPID_IHTMLEVENTOBJ_SHIFTKEY       (DISPID_EVENTOBJ+4)
+#define DISPID_IHTMLEVENTOBJ_X              (DISPID_EVENTOBJ+5)
+#define DISPID_IHTMLEVENTOBJ_Y              (DISPID_EVENTOBJ+6)
+#define DISPID_IHTMLEVENTOBJ_RETURNVALUE    (DISPID_EVENTOBJ+7)
+#define DISPID_IHTMLEVENTOBJ_CANCELBUBBLE   (DISPID_EVENTOBJ+8)
+#define DISPID_IHTMLEVENTOBJ_FROMELEMENT    (DISPID_EVENTOBJ+9)
+#define DISPID_IHTMLEVENTOBJ_TOELEMENT      (DISPID_EVENTOBJ+10)
+#define DISPID_IHTMLEVENTOBJ_KEYCODE        (DISPID_EVENTOBJ+11)
+#define DISPID_IHTMLEVENTOBJ_BUTTON         (DISPID_EVENTOBJ+12)
+#define DISPID_IHTMLEVENTOBJ_TYPE           (DISPID_EVENTOBJ+13)
+#define DISPID_IHTMLEVENTOBJ_QUALIFIER      (DISPID_EVENTOBJ+14)
+#define DISPID_IHTMLEVENTOBJ_REASON         (DISPID_EVENTOBJ+15)
+#define DISPID_IHTMLEVENTOBJ_CLIENTX        (DISPID_EVENTOBJ+20)
+#define DISPID_IHTMLEVENTOBJ_CLIENTY        (DISPID_EVENTOBJ+21)
+#define DISPID_IHTMLEVENTOBJ_OFFSETX        (DISPID_EVENTOBJ+22)
+#define DISPID_IHTMLEVENTOBJ_OFFSETY        (DISPID_EVENTOBJ+23)
+#define DISPID_IHTMLEVENTOBJ_SCREENX        (DISPID_EVENTOBJ+24)
+#define DISPID_IHTMLEVENTOBJ_SCREENY        (DISPID_EVENTOBJ+25)
+#define DISPID_IHTMLEVENTOBJ_SRCFILTER      (DISPID_EVENTOBJ+26)
+
+/* IHTMLEventObj2 */
+#define DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE     DISPID_HTMLOBJECT+1
+#define DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE     DISPID_HTMLOBJECT+2
+#define DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE  DISPID_HTMLOBJECT+3
+#define DISPID_IHTMLEVENTOBJ2_PROPERTYNAME     DISPID_EVENTOBJ+27
+#define DISPID_IHTMLEVENTOBJ2_BOOKMARKS        DISPID_EVENTOBJ+31
+#define DISPID_IHTMLEVENTOBJ2_RECORDSET        DISPID_EVENTOBJ+32
+#define DISPID_IHTMLEVENTOBJ2_DATAFLD          DISPID_EVENTOBJ+33
+#define DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS    DISPID_EVENTOBJ+34
+#define DISPID_IHTMLEVENTOBJ2_REPEAT           DISPID_EVENTOBJ+35
+#define DISPID_IHTMLEVENTOBJ2_SRCURN           DISPID_EVENTOBJ+36
+#define DISPID_IHTMLEVENTOBJ2_SRCELEMENT       DISPID_EVENTOBJ+1
+#define DISPID_IHTMLEVENTOBJ2_ALTKEY           DISPID_EVENTOBJ+2
+#define DISPID_IHTMLEVENTOBJ2_CTRLKEY          DISPID_EVENTOBJ+3
+#define DISPID_IHTMLEVENTOBJ2_SHIFTKEY         DISPID_EVENTOBJ+4
+#define DISPID_IHTMLEVENTOBJ2_FROMELEMENT      DISPID_EVENTOBJ+9
+#define DISPID_IHTMLEVENTOBJ2_TOELEMENT        DISPID_EVENTOBJ+10
+#define DISPID_IHTMLEVENTOBJ2_BUTTON           DISPID_EVENTOBJ+12
+#define DISPID_IHTMLEVENTOBJ2_TYPE             DISPID_EVENTOBJ+13
+#define DISPID_IHTMLEVENTOBJ2_QUALIFIER        DISPID_EVENTOBJ+14
+#define DISPID_IHTMLEVENTOBJ2_REASON           DISPID_EVENTOBJ+15
+#define DISPID_IHTMLEVENTOBJ2_X                DISPID_EVENTOBJ+5
+#define DISPID_IHTMLEVENTOBJ2_Y                DISPID_EVENTOBJ+6
+#define DISPID_IHTMLEVENTOBJ2_CLIENTX          DISPID_EVENTOBJ+20
+#define DISPID_IHTMLEVENTOBJ2_CLIENTY          DISPID_EVENTOBJ+21
+#define DISPID_IHTMLEVENTOBJ2_OFFSETX          DISPID_EVENTOBJ+22
+#define DISPID_IHTMLEVENTOBJ2_OFFSETY          DISPID_EVENTOBJ+23
+#define DISPID_IHTMLEVENTOBJ2_SCREENX          DISPID_EVENTOBJ+24
+#define DISPID_IHTMLEVENTOBJ2_SCREENY          DISPID_EVENTOBJ+25
+#define DISPID_IHTMLEVENTOBJ2_SRCFILTER        DISPID_EVENTOBJ+26
+#define DISPID_IHTMLEVENTOBJ2_DATATRANSFER     DISPID_EVENTOBJ+37
+
+/* IHTMLEventObj3 */
+#define DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW       DISPID_EVENTOBJ+38
+#define DISPID_IHTMLEVENTOBJ3_SHIFTLEFT             DISPID_EVENTOBJ+39
+#define DISPID_IHTMLEVENTOBJ3_ALTLEFT               DISPID_EVENTOBJ+40
+#define DISPID_IHTMLEVENTOBJ3_CTRLLEFT              DISPID_EVENTOBJ+41
+#define DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE  DISPID_EVENTOBJ+42
+#define DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND      DISPID_EVENTOBJ+43
+#define DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA         DISPID_EVENTOBJ+44
+#define DISPID_IHTMLEVENTOBJ3_IMEREQUEST            DISPID_EVENTOBJ+46
+#define DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA        DISPID_EVENTOBJ+47
+#define DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT        DISPID_EVENTOBJ+45
+#define DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE        DISPID_EVENTOBJ+48
+#define DISPID_IHTMLEVENTOBJ3_BEHAVIORPART          DISPID_EVENTOBJ+49
+#define DISPID_IHTMLEVENTOBJ3_NEXTPAGE              DISPID_EVENTOBJ+50
+
+/* IHTMLEventObj4 */
+#define DISPID_IHTMLEVENTOBJ4_WHEELDELTA  DISPID_EVENTOBJ+51
+
+/* IHTMLScreen */
+#define DISPID_IHTMLSCREEN_COLORDEPTH             (DISPID_SCREEN+1)
+#define DISPID_IHTMLSCREEN_BUFFERDEPTH            (DISPID_SCREEN+2)
+#define DISPID_IHTMLSCREEN_WIDTH                  (DISPID_SCREEN+3)
+#define DISPID_IHTMLSCREEN_HEIGHT                 (DISPID_SCREEN+4)
+#define DISPID_IHTMLSCREEN_UPDATEINTERVAL         (DISPID_SCREEN+5)
+#define DISPID_IHTMLSCREEN_AVAILHEIGHT            (DISPID_SCREEN+6)
+#define DISPID_IHTMLSCREEN_AVAILWIDTH             (DISPID_SCREEN+7)
+#define DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED   (DISPID_SCREEN+8)
+
+/* IHTMLScreen2 */
+#define DISPID_IHTMLSCREEN2_LOGICALXDPI  DISPID_SCREEN+9
+#define DISPID_IHTMLSCREEN2_LOGICALYDPI  DISPID_SCREEN+10
+#define DISPID_IHTMLSCREEN2_DEVICEXDPI   DISPID_SCREEN+11
+#define DISPID_IHTMLSCREEN2_DEVICEYDPI   DISPID_SCREEN+12
+
+/* IHTMLScreen3 */
+#define DISPID_IHTMLSCREEN3_SYSTEMXDPI  DISPID_SCREEN+13
+#define DISPID_IHTMLSCREEN3_SYSTEMYDPI  DISPID_SCREEN+14
+
+/* IHTMLOptionElementFactory */
+#define DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE   DISPID_VALUE
+
+/* IHTMLOptionElement */
+#define DISPID_IHTMLOPTIONELEMENT_SELECTED          (DISPID_OPTION+1)
+#define DISPID_IHTMLOPTIONELEMENT_VALUE             (DISPID_OPTION+2)
+#define DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED   (DISPID_OPTION+3)
+#define DISPID_IHTMLOPTIONELEMENT_INDEX             (DISPID_OPTION+5)
+#define DISPID_IHTMLOPTIONELEMENT_TEXT              (DISPID_OPTION+4)
+#define DISPID_IHTMLOPTIONELEMENT_FORM              (DISPID_OPTION+6)
+
+/* IHTMLOptionElement3 */
+#define DISPID_IHTMLOPTIONELEMENT3_LABEL  DISPID_OPTION+7
+
+/* IHTMLFormElement */
+#define DISPID_IHTMLFORMELEMENT_ACTION     (DISPID_FORM+1)
+#define DISPID_IHTMLFORMELEMENT_DIR        (DISPID_FORM+2)
+#define DISPID_IHTMLFORMELEMENT_ENCODING   (DISPID_FORM+3)
+#define DISPID_IHTMLFORMELEMENT_METHOD     (DISPID_FORM+4)
+#define DISPID_IHTMLFORMELEMENT_ELEMENTS   (DISPID_FORM+5)
+#define DISPID_IHTMLFORMELEMENT_TARGET     (DISPID_FORM+6)
+#define DISPID_IHTMLFORMELEMENT_SUBMIT     (DISPID_FORM+9)
+#define DISPID_IHTMLFORMELEMENT_RESET      (DISPID_FORM+10)
+#define DISPID_IHTMLFORMELEMENT_TAGS       (DISPID_COLLECTION+2)
+#define DISPID_IHTMLFORMELEMENT_NAME       STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLFORMELEMENT_ONSUBMIT   DISPID_EVPROP_ONSUBMIT
+#define DISPID_IHTMLFORMELEMENT_ONRESET    DISPID_EVPROP_ONRESET
+#define DISPID_IHTMLFORMELEMENT_LENGTH     DISPID_COLLECTION
+#define DISPID_IHTMLFORMELEMENT__NEWENUM   DISPID_NEWENUM
+#define DISPID_IHTMLFORMELEMENT_ITEM       DISPID_VALUE
+
+/* HTMLFormElementEvents */
+#define DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT  DISPID_EVMETH_ONSUBMIT
+#define DISPID_HTMLFORMELEMENTEVENTS_ONRESET   DISPID_EVMETH_ONRESET
+
+/* HTMLFormElementEvents2 */
+#define DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT  DISPID_EVMETH_ONSUBMIT
+#define DISPID_HTMLFORMELEMENTEVENTS2_ONRESET   DISPID_EVMETH_ONRESET
+
+/* IHTMLStyleSheetsCollection */
+#define DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH     (DISPID_STYLESHEETS_COL+1)
+#define DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM   DISPID_NEWENUM
+#define DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM       DISPID_VALUE
+
+/* IHTMLStyleSheet */
+#define DISPID_IHTMLSTYLESHEET_TITLE              (DISPID_STYLESHEET+1)
+#define DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET   (DISPID_STYLESHEET+2)
+#define DISPID_IHTMLSTYLESHEET_OWNINGELEMENT      (DISPID_STYLESHEET+3)
+#define DISPID_IHTMLSTYLESHEET_READONLY           (DISPID_STYLESHEET+4)
+#define DISPID_IHTMLSTYLESHEET_IMPORTS            (DISPID_STYLESHEET+5)
+#define DISPID_IHTMLSTYLESHEET_HREF               (DISPID_STYLESHEET+6)
+#define DISPID_IHTMLSTYLESHEET_TYPE               (DISPID_STYLESHEET+7)
+#define DISPID_IHTMLSTYLESHEET_ID                 (DISPID_STYLESHEET+8)
+#define DISPID_IHTMLSTYLESHEET_ADDIMPORT          (DISPID_STYLESHEET+9)
+#define DISPID_IHTMLSTYLESHEET_ADDRULE            (DISPID_STYLESHEET+10)
+#define DISPID_IHTMLSTYLESHEET_REMOVEIMPORT       (DISPID_STYLESHEET+11)
+#define DISPID_IHTMLSTYLESHEET_REMOVERULE         (DISPID_STYLESHEET+12)
+#define DISPID_IHTMLSTYLESHEET_MEDIA              (DISPID_STYLESHEET+13)
+#define DISPID_IHTMLSTYLESHEET_CSSTEXT            (DISPID_STYLESHEET+14)
+#define DISPID_IHTMLSTYLESHEET_RULES              (DISPID_STYLESHEET+15)
+#define DISPID_IHTMLSTYLESHEET_DISABLED           STDPROPID_XOBJ_DISABLED
+
+/* IHTMLStyleSheet2 */
+#define DISPID_IHTMLSTYLESHEET2_PAGES             (DISPID_STYLESHEET+16)
+#define DISPID_IHTMLSTYLESHEET2_ADDPAGERULE       (DISPID_STYLESHEET+17)
+
+/* IHTMLStyleSheetRulesCollection */
+#define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH   (DISPID_STYLERULES_COL+1)
+#define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM     DISPID_VALUE
+
+/* IHTMLStyleSheetPage */
+#define DISPID_IHTMLSTYLESHEETPAGE_SELECTOR       (DISPID_STYLEPAGE+1)
+#define DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS    (DISPID_STYLEPAGE+2)
+
+/* IHTMLStyleSheetPagesCollection */
+#define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH      (DISPID_STYLEPAGES_COL+1)
+#define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM        DISPID_VALUE
+
+/* IHTMLStyleSheetRule */
+#define DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT   (DISPID_STYLERULE+1)
+#define DISPID_IHTMLSTYLESHEETRULE_READONLY       (DISPID_STYLERULE+2)
+#define DISPID_IHTMLSTYLESHEETRULE_STYLE          STDPROPID_XOBJ_STYLE
+
+/* IHTMLRuleStyle */
+#define DISPID_IHTMLRULESTYLE_SETATTRIBUTE                (DISPID_HTMLOBJECT+1)
+#define DISPID_IHTMLRULESTYLE_GETATTRIBUTE                (DISPID_HTMLOBJECT+2)
+#define DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE             (DISPID_HTMLOBJECT+3)
+#define DISPID_IHTMLRULESTYLE_FONTFAMILY                  DISPID_A_FONTFACE
+#define DISPID_IHTMLRULESTYLE_FONTSTYLE                   DISPID_A_FONTSTYLE
+#define DISPID_IHTMLRULESTYLE_FONTVARIANT                 DISPID_A_FONTVARIANT
+#define DISPID_IHTMLRULESTYLE_FONTWEIGHT                  DISPID_A_FONTWEIGHT
+#define DISPID_IHTMLRULESTYLE_FONTSIZE                    DISPID_A_FONTSIZE
+#define DISPID_IHTMLRULESTYLE_FONT                        DISPID_A_FONT
+#define DISPID_IHTMLRULESTYLE_COLOR                       DISPID_A_COLOR
+#define DISPID_IHTMLRULESTYLE_BACKGROUND                  DISPID_A_BACKGROUND
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE             DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT            DISPID_A_BACKGROUNDREPEAT
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT        DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION          DISPID_A_BACKGROUNDPOSITION
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX         DISPID_A_BACKGROUNDPOSX
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY         DISPID_A_BACKGROUNDPOSY
+#define DISPID_IHTMLRULESTYLE_WORDSPACING                 DISPID_A_WORDSPACING
+#define DISPID_IHTMLRULESTYLE_LETTERSPACING               DISPID_A_LETTERSPACING
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATION              DISPID_A_TEXTDECORATION
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE          DISPID_A_TEXTDECORATIONNONE
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE     DISPID_A_TEXTDECORATIONUNDERLINE
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE      DISPID_A_TEXTDECORATIONOVERLINE
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH   DISPID_A_TEXTDECORATIONLINETHROUGH
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK         DISPID_A_TEXTDECORATIONBLINK
+#define DISPID_IHTMLRULESTYLE_VERTICALALIGN               DISPID_A_VERTICALALIGN
+#define DISPID_IHTMLRULESTYLE_TEXTTRANSFORM               DISPID_A_TEXTTRANSFORM
+#define DISPID_IHTMLRULESTYLE_TEXTINDENT                  DISPID_A_TEXTINDENT
+#define DISPID_IHTMLRULESTYLE_LINEHEIGHT                  DISPID_A_LINEHEIGHT
+#define DISPID_IHTMLRULESTYLE_MARGINTOP                   DISPID_A_MARGINTOP
+#define DISPID_IHTMLRULESTYLE_MARGINRIGHT                 DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLRULESTYLE_MARGINBOTTOM                DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLRULESTYLE_MARGINLEFT                  DISPID_A_MARGINLEFT
+#define DISPID_IHTMLRULESTYLE_MARGIN                      DISPID_A_MARGIN
+#define DISPID_IHTMLRULESTYLE_PADDINGTOP                  DISPID_A_PADDINGTOP
+#define DISPID_IHTMLRULESTYLE_PADDINGRIGHT                DISPID_A_PADDINGRIGHT
+#define DISPID_IHTMLRULESTYLE_PADDINGBOTTOM               DISPID_A_PADDINGBOTTOM
+#define DISPID_IHTMLRULESTYLE_PADDINGLEFT                 DISPID_A_PADDINGLEFT
+#define DISPID_IHTMLRULESTYLE_PADDING                     DISPID_A_PADDING
+#define DISPID_IHTMLRULESTYLE_BORDER                      DISPID_A_BORDER
+#define DISPID_IHTMLRULESTYLE_BORDERTOP                   DISPID_A_BORDERTOP
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHT                 DISPID_A_BORDERRIGHT
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOM                DISPID_A_BORDERBOTTOM
+#define DISPID_IHTMLRULESTYLE_BORDERLEFT                  DISPID_A_BORDERLEFT
+#define DISPID_IHTMLRULESTYLE_BORDERCOLOR                 DISPID_A_BORDERCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR              DISPID_A_BORDERTOPCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR            DISPID_A_BORDERRIGHTCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR           DISPID_A_BORDERBOTTOMCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR             DISPID_A_BORDERLEFTCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERWIDTH                 DISPID_A_BORDERWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH              DISPID_A_BORDERTOPWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH            DISPID_A_BORDERRIGHTWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH           DISPID_A_BORDERBOTTOMWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH             DISPID_A_BORDERLEFTWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERSTYLE                 DISPID_A_BORDERSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE              DISPID_A_BORDERTOPSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE            DISPID_A_BORDERRIGHTSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE           DISPID_A_BORDERBOTTOMSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE             DISPID_A_BORDERLEFTSTYLE
+#define DISPID_IHTMLRULESTYLE_STYLEFLOAT                  DISPID_A_FLOAT
+#define DISPID_IHTMLRULESTYLE_CLEAR                       DISPID_A_CLEAR
+#define DISPID_IHTMLRULESTYLE_DISPLAY                     DISPID_A_DISPLAY
+#define DISPID_IHTMLRULESTYLE_VISIBILITY                  DISPID_A_VISIBILITY
+#define DISPID_IHTMLRULESTYLE_LISTSTYLETYPE               DISPID_A_LISTSTYLETYPE
+#define DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION           DISPID_A_LISTSTYLEPOSITION
+#define DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE              DISPID_A_LISTSTYLEIMAGE
+#define DISPID_IHTMLRULESTYLE_LISTSTYLE                   DISPID_A_LISTSTYLE
+#define DISPID_IHTMLRULESTYLE_WHITESPACE                  DISPID_A_WHITESPACE
+#define DISPID_IHTMLRULESTYLE_POSITION                    DISPID_A_POSITION
+#define DISPID_IHTMLRULESTYLE_ZINDEX                      DISPID_A_ZINDEX
+#define DISPID_IHTMLRULESTYLE_OVERFLOW                    DISPID_A_OVERFLOW
+#define DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE             DISPID_A_PAGEBREAKBEFORE
+#define DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER              DISPID_A_PAGEBREAKAFTER
+#define DISPID_IHTMLRULESTYLE_CSSTEXT                     DISPID_A_STYLETEXT
+#define DISPID_IHTMLRULESTYLE_CURSOR                      DISPID_A_CURSOR
+#define DISPID_IHTMLRULESTYLE_CLIP                        DISPID_A_CLIP
+#define DISPID_IHTMLRULESTYLE_FILTER                      DISPID_A_FILTER
+#define DISPID_IHTMLRULESTYLE_TOP                         STDPROPID_XOBJ_TOP
+#define DISPID_IHTMLRULESTYLE_LEFT                        STDPROPID_XOBJ_LEFT
+#define DISPID_IHTMLRULESTYLE_WIDTH                       STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLRULESTYLE_HEIGHT                      STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLRULESTYLE_TEXTALIGN                   STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR             DISPID_BACKCOLOR
+
+/* IHTMLDOMNode */
+#define DISPID_IHTMLDOMNODE_NODETYPE           DISPID_ELEMENT+46
+#define DISPID_IHTMLDOMNODE_PARENTNODE         DISPID_ELEMENT+47
+#define DISPID_IHTMLDOMNODE_HASCHILDNODES      DISPID_ELEMENT+48
+#define DISPID_IHTMLDOMNODE_CHILDNODES         DISPID_ELEMENT+49
+#define DISPID_IHTMLDOMNODE_ATTRIBUTES         DISPID_ELEMENT+50
+#define DISPID_IHTMLDOMNODE_INSERTBEFORE       DISPID_ELEMENT+51
+#define DISPID_IHTMLDOMNODE_REMOVECHILD        DISPID_ELEMENT+52
+#define DISPID_IHTMLDOMNODE_REPLACECHILD       DISPID_ELEMENT+53
+#define DISPID_IHTMLDOMNODE_CLONENODE          DISPID_ELEMENT+61
+#define DISPID_IHTMLDOMNODE_REMOVENODE         DISPID_ELEMENT+66
+#define DISPID_IHTMLDOMNODE_SWAPNODE           DISPID_ELEMENT+68
+#define DISPID_IHTMLDOMNODE_REPLACENODE        DISPID_ELEMENT+67
+#define DISPID_IHTMLDOMNODE_APPENDCHILD        DISPID_ELEMENT+73
+#define DISPID_IHTMLDOMNODE_NODENAME           DISPID_ELEMENT+74
+#define DISPID_IHTMLDOMNODE_NODEVALUE          DISPID_ELEMENT+75
+#define DISPID_IHTMLDOMNODE_FIRSTCHILD         DISPID_ELEMENT+76
+#define DISPID_IHTMLDOMNODE_LASTCHILD          DISPID_ELEMENT+77
+#define DISPID_IHTMLDOMNODE_PREVIOUSSIBLING    DISPID_ELEMENT+78
+#define DISPID_IHTMLDOMNODE_NEXTSIBLING        DISPID_ELEMENT+79
+
+/* IHTMLLinkElement */
+#define DISPID_IHTMLLINKELEMENT_HREF                DISPID_HEDELEMS+5
+#define DISPID_IHTMLLINKELEMENT_REL                 DISPID_HEDELEMS+6
+#define DISPID_IHTMLLINKELEMENT_REV                 DISPID_HEDELEMS+7
+#define DISPID_IHTMLLINKELEMENT_TYPE                DISPID_HEDELEMS+8
+#define DISPID_IHTMLLINKELEMENT_READYSTATE          DISPID_A_READYSTATE
+#define DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLLINKELEMENT_ONLOAD              DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLLINKELEMENT_ONERROR             DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLLINKELEMENT_STYLESHEET          DISPID_HEDELEMS+14
+#define DISPID_IHTMLLINKELEMENT_DISABLED            STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLLINKELEMENT_MEDIA               DISPID_HEDELEMS+16
+
+/* IHTMLLinkElement2 */
+#define DISPID_IHTMLLINKELEMENT2_TARGET  DISPID_HEDELEMS+17
+
+/* IHTMLLinkElement3 */
+#define DISPID_IHTMLLINKELEMENT3_CHARSET   DISPID_HEDELEMS+18
+#define DISPID_IHTMLLINKELEMENT3_HREFLANG  DISPID_HEDELEMS+19
+
+/* IHTMLLinkElement4 */
+#define DISPID_IHTMLLINKELEMENT4_IE8_HREF  DISPID_IE8_LINK
+
+/* IHTMLDOMNode2 */
+#define DISPID_IHTMLDOMNODE2_OWNERDOCUMENT     DISPID_ELEMENT+113
+
+/* IHTMLDOMTextNode */
+#define DISPID_IHTMLDOMTEXTNODE_DATA       DISPID_DOMTEXTNODE
+#define DISPID_IHTMLDOMTEXTNODE_TOSTRING   DISPID_DOMTEXTNODE+1
+#define DISPID_IHTMLDOMTEXTNODE_LENGTH     DISPID_DOMTEXTNODE+2
+#define DISPID_IHTMLDOMTEXTNODE_SPLITTEXT  DISPID_DOMTEXTNODE+3
+
+/* IHTMLDOMTextNode2 */
+#define DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA  DISPID_DOMTEXTNODE+4
+#define DISPID_IHTMLDOMTEXTNODE2_APPENDDATA     DISPID_DOMTEXTNODE+5
+#define DISPID_IHTMLDOMTEXTNODE2_INSERTDATA     DISPID_DOMTEXTNODE+6
+#define DISPID_IHTMLDOMTEXTNODE2_DELETEDATA     DISPID_DOMTEXTNODE+7
+#define DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA    DISPID_DOMTEXTNODE+8
+
+/* IHTMLRenderStyle */
+#define DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE  DISPID_A_TEXTLINETHROUGHSTYLE
+#define DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE    DISPID_A_TEXTUNDERLINESTYLE
+#define DISPID_IHTMLRENDERSTYLE_TEXTEFFECT            DISPID_A_TEXTEFFECT
+#define DISPID_IHTMLRENDERSTYLE_TEXTCOLOR             DISPID_A_TEXTCOLOR
+#define DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR   DISPID_A_TEXTBACKGROUNDCOLOR
+#define DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR   DISPID_A_TEXTDECORATIONCOLOR
+#define DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY     DISPID_A_RENDERINGPRIORITY
+#define DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION  DISPID_A_DEFAULTTEXTSELECTION
+#define DISPID_IHTMLRENDERSTYLE_TEXTDECORATION        DISPID_A_STYLETEXTDECORATION
+
+/* IHTMLDOMImplementation */
+#define DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE  DISPID_DOMIMPLEMENTATION
+
+/* IHTMLDOMAttribute */
+#define DISPID_IHTMLDOMATTRIBUTE_NODENAME   DISPID_DOMATTRIBUTE
+#define DISPID_IHTMLDOMATTRIBUTE_NODEVALUE  DISPID_DOMATTRIBUTE+2
+#define DISPID_IHTMLDOMATTRIBUTE_SPECIFIED  DISPID_DOMATTRIBUTE+1
+
+/* IHTMLDOMAttribute2 */
+#define DISPID_IHTMLDOMATTRIBUTE2_NAME             DISPID_DOMATTRIBUTE+3
+#define DISPID_IHTMLDOMATTRIBUTE2_VALUE            DISPID_DOMATTRIBUTE+4
+#define DISPID_IHTMLDOMATTRIBUTE2_EXPANDO          DISPID_DOMATTRIBUTE+5
+#define DISPID_IHTMLDOMATTRIBUTE2_NODETYPE         DISPID_DOMATTRIBUTE+6
+#define DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE       DISPID_DOMATTRIBUTE+7
+#define DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES       DISPID_DOMATTRIBUTE+8
+#define DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD       DISPID_DOMATTRIBUTE+9
+#define DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD        DISPID_DOMATTRIBUTE+10
+#define DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING  DISPID_DOMATTRIBUTE+11
+#define DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING      DISPID_DOMATTRIBUTE+12
+#define DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES       DISPID_DOMATTRIBUTE+13
+#define DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT    DISPID_DOMATTRIBUTE+14
+#define DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE     DISPID_DOMATTRIBUTE+15
+#define DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD     DISPID_DOMATTRIBUTE+16
+#define DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD      DISPID_DOMATTRIBUTE+17
+#define DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD      DISPID_DOMATTRIBUTE+18
+#define DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES    DISPID_DOMATTRIBUTE+19
+#define DISPID_IHTMLDOMATTRIBUTE2_CLONENODE        DISPID_DOMATTRIBUTE+20
+
+/* IHTMLDOMAttribute3 */
+#define DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE  DISPID_IE8_ATTR+3
+#define DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE      DISPID_IE8_ATTR+4
+#define DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED  DISPID_IE8_ATTR
+#define DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT   DISPID_IE8_ATTR+1
+
+/* IHTMLDocumentCompatibleInfo */
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT  DISPID_DOCUMENTCOMPATIBLEINFO
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION    DISPID_DOCUMENTCOMPATIBLEINFO+1
+
+/* IHTMLDocumentCompatibleInfoCollection */
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM    DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH  DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION+1
+
+/* IHTMLBodyElement */
+#define DISPID_IHTMLBODYELEMENT_BACKGROUND        DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLBODYELEMENT_BGPROPERTIES      DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLBODYELEMENT_LEFTMARGIN        DISPID_A_MARGINLEFT
+#define DISPID_IHTMLBODYELEMENT_TOPMARGIN         DISPID_A_MARGINTOP
+#define DISPID_IHTMLBODYELEMENT_RIGHTMARGIN       DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN      DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLBODYELEMENT_NOWRAP            DISPID_A_NOWRAP
+#define DISPID_IHTMLBODYELEMENT_BGCOLOR           DISPID_BACKCOLOR
+#define DISPID_IHTMLBODYELEMENT_TEXT              DISPID_A_COLOR
+#define DISPID_IHTMLBODYELEMENT_LINK              DISPID_BODY+10
+#define DISPID_IHTMLBODYELEMENT_VLINK             DISPID_BODY+12
+#define DISPID_IHTMLBODYELEMENT_ALINK             DISPID_BODY+11
+#define DISPID_IHTMLBODYELEMENT_ONLOAD            DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLBODYELEMENT_ONUNLOAD          DISPID_EVPROP_ONUNLOAD
+#define DISPID_IHTMLBODYELEMENT_SCROLL            DISPID_A_SCROLL
+#define DISPID_IHTMLBODYELEMENT_ONSELECT          DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD    DISPID_EVPROP_ONBEFOREUNLOAD
+#define DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE   DISPID_BODY+13
+
+/* IHTMLBodyElement2 */
+#define DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT   DISPID_EVPROP_ONBEFOREPRINT
+#define DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT    DISPID_EVPROP_ONAFTERPRINT
+
+/* IHTMLAnchorElement */
+#define DISPID_IHTMLANCHORELEMENT_HREF          DISPID_VALUE
+#define DISPID_IHTMLANCHORELEMENT_TARGET        DISPID_ANCHOR+3
+#define DISPID_IHTMLANCHORELEMENT_REL           DISPID_ANCHOR+5
+#define DISPID_IHTMLANCHORELEMENT_REV           DISPID_ANCHOR+6
+#define DISPID_IHTMLANCHORELEMENT_URN           DISPID_ANCHOR+7
+#define DISPID_IHTMLANCHORELEMENT_METHODS       DISPID_ANCHOR+8
+#define DISPID_IHTMLANCHORELEMENT_NAME          STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLANCHORELEMENT_HOST          DISPID_ANCHOR+12
+#define DISPID_IHTMLANCHORELEMENT_HOSTNAME      DISPID_ANCHOR+13
+#define DISPID_IHTMLANCHORELEMENT_PATHNAME      DISPID_ANCHOR+14
+#define DISPID_IHTMLANCHORELEMENT_PORT          DISPID_ANCHOR+15
+#define DISPID_IHTMLANCHORELEMENT_PROTOCOL      DISPID_ANCHOR+16
+#define DISPID_IHTMLANCHORELEMENT_SEARCH        DISPID_ANCHOR+17
+#define DISPID_IHTMLANCHORELEMENT_HASH          DISPID_ANCHOR+18
+#define DISPID_IHTMLANCHORELEMENT_ONBLUR        DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLANCHORELEMENT_ONFOCUS       DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLANCHORELEMENT_ACCESSKEY     DISPID_SITE+5
+#define DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG  DISPID_ANCHOR+31
+#define DISPID_IHTMLANCHORELEMENT_MIMETYPE      DISPID_ANCHOR+30
+#define DISPID_IHTMLANCHORELEMENT_NAMEPROP      DISPID_ANCHOR+32
+#define DISPID_IHTMLANCHORELEMENT_TABINDEX      STDPROPID_XOBJ_TABINDEX
+#define DISPID_IHTMLANCHORELEMENT_FOCUS         DISPID_SITE+0
+#define DISPID_IHTMLANCHORELEMENT_BLUR          DISPID_SITE+2
+
+/* IHTMLAnchorElement2 */
+#define DISPID_IHTMLANCHORELEMENT2_CHARSET   DISPID_ANCHOR+23
+#define DISPID_IHTMLANCHORELEMENT2_COORDS    DISPID_ANCHOR+24
+#define DISPID_IHTMLANCHORELEMENT2_HREFLANG  DISPID_ANCHOR+25
+#define DISPID_IHTMLANCHORELEMENT2_SHAPE     DISPID_ANCHOR+26
+#define DISPID_IHTMLANCHORELEMENT2_TYPE      DISPID_ANCHOR+27
+
+/* IHTMLAnchorElement3 */
+#define DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE   DISPID_IE8_ANCHOR+1
+#define DISPID_IHTMLANCHORELEMENT3_IE8_COORDS  DISPID_IE8_ANCHOR+2
+#define DISPID_IHTMLANCHORELEMENT3_IE8_HREF    DISPID_IE8_ANCHOR+3
+
+/* IHTMLLabelElement */
+#define DISPID_IHTMLLABELELEMENT_HTMLFOR    DISPID_LABEL
+#define DISPID_IHTMLLABELELEMENT_ACCESSKEY  DISPID_SITE+5
+
+/* IHTMLLabelElement2 */
+#define DISPID_IHTMLLABELELEMENT2_FORM  DISPID_LABEL+2
+
+/* IHTMLTxtRange */
+#define DISPID_IHTMLTXTRANGE_HTMLTEXT                DISPID_RANGE+3
+#define DISPID_IHTMLTXTRANGE_TEXT                    DISPID_RANGE+4
+#define DISPID_IHTMLTXTRANGE_PARENTELEMENT           DISPID_RANGE+6
+#define DISPID_IHTMLTXTRANGE_DUPLICATE               DISPID_RANGE+8
+#define DISPID_IHTMLTXTRANGE_INRANGE                 DISPID_RANGE+10
+#define DISPID_IHTMLTXTRANGE_ISEQUAL                 DISPID_RANGE+11
+#define DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW          DISPID_RANGE+12
+#define DISPID_IHTMLTXTRANGE_COLLAPSE                DISPID_RANGE+13
+#define DISPID_IHTMLTXTRANGE_EXPAND                  DISPID_RANGE+14
+#define DISPID_IHTMLTXTRANGE_MOVE                    DISPID_RANGE+15
+#define DISPID_IHTMLTXTRANGE_MOVESTART               DISPID_RANGE+16
+#define DISPID_IHTMLTXTRANGE_MOVEEND                 DISPID_RANGE+17
+#define DISPID_IHTMLTXTRANGE_SELECT                  DISPID_RANGE+24
+#define DISPID_IHTMLTXTRANGE_PASTEHTML               DISPID_RANGE+26
+#define DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT       DISPID_RANGE+1
+#define DISPID_IHTMLTXTRANGE_SETENDPOINT             DISPID_RANGE+25
+#define DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS        DISPID_RANGE+18
+#define DISPID_IHTMLTXTRANGE_FINDTEXT                DISPID_RANGE+19
+#define DISPID_IHTMLTXTRANGE_MOVETOPOINT             DISPID_RANGE+20
+#define DISPID_IHTMLTXTRANGE_GETBOOKMARK             DISPID_RANGE+21
+#define DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK          DISPID_RANGE+9
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED   DISPID_RANGE+27
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED     DISPID_RANGE+28
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE       DISPID_RANGE+29
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM    DISPID_RANGE+30
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT        DISPID_RANGE+31
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE       DISPID_RANGE+32
+#define DISPID_IHTMLTXTRANGE_EXECCOMMAND             DISPID_RANGE+33
+#define DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP     DISPID_RANGE+34
+
+/* IHTMLTextAreaElement */
+#define DISPID_IHTMLTEXTAREAELEMENT_TYPE             DISPID_INPUT
+#define DISPID_IHTMLTEXTAREAELEMENT_VALUE            DISPID_A_VALUE
+#define DISPID_IHTMLTEXTAREAELEMENT_NAME             STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLTEXTAREAELEMENT_STATUS           DISPID_INPUT+1
+#define DISPID_IHTMLTEXTAREAELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLTEXTAREAELEMENT_FORM             DISPID_SITE+4
+#define DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE     DISPID_DEFAULTVALUE
+#define DISPID_IHTMLTEXTAREAELEMENT_SELECT           DISPID_RICHTEXT+5
+#define DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE         DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLTEXTAREAELEMENT_ONSELECT         DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLTEXTAREAELEMENT_READONLY         DISPID_RICHTEXT+4
+#define DISPID_IHTMLTEXTAREAELEMENT_ROWS             DISPID_RICHTEXT+1
+#define DISPID_IHTMLTEXTAREAELEMENT_COLS             DISPID_RICHTEXT+2
+#define DISPID_IHTMLTEXTAREAELEMENT_WRAP             DISPID_RICHTEXT+3
+#define DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE  DISPID_RICHTEXT+6
+
+/* IHTMLButtonElement */
+#define DISPID_IHTMLBUTTONELEMENT_TYPE             DISPID_INPUT
+#define DISPID_IHTMLBUTTONELEMENT_VALUE            DISPID_A_VALUE
+#define DISPID_IHTMLBUTTONELEMENT_NAME             STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLBUTTONELEMENT_STATUS           DISPID_BUTTON+1
+#define DISPID_IHTMLBUTTONELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLBUTTONELEMENT_FORM             DISPID_SITE+4
+#define DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE  DISPID_BUTTON+2
+
+/* IHTMLInputElement */
+#define DISPID_IHTMLINPUTELEMENT_TYPE             DISPID_INPUT
+#define DISPID_IHTMLINPUTELEMENT_VALUE            DISPID_A_VALUE
+#define DISPID_IHTMLINPUTELEMENT_NAME             STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLINPUTELEMENT_STATUS           DISPID_INPUT+1
+#define DISPID_IHTMLINPUTELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLINPUTELEMENT_FORM             DISPID_SITE+4
+#define DISPID_IHTMLINPUTELEMENT_SIZE             DISPID_INPUT+2
+#define DISPID_IHTMLINPUTELEMENT_MAXLENGTH        DISPID_INPUT+3
+#define DISPID_IHTMLINPUTELEMENT_SELECT           DISPID_INPUT+4
+#define DISPID_IHTMLINPUTELEMENT_ONCHANGE         DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLINPUTELEMENT_ONSELECT         DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE     DISPID_DEFAULTVALUE
+#define DISPID_IHTMLINPUTELEMENT_READONLY         DISPID_INPUT+5
+#define DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE  DISPID_INPUT+6
+#define DISPID_IHTMLINPUTELEMENT_INDETERMINATE    DISPID_INPUT+7
+#define DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED   DISPID_INPUT+8
+#define DISPID_IHTMLINPUTELEMENT_CHECKED          DISPID_INPUT+9
+#define DISPID_IHTMLINPUTELEMENT_BORDER           DISPID_INPUT+12
+#define DISPID_IHTMLINPUTELEMENT_VSPACE           DISPID_INPUT+13
+#define DISPID_IHTMLINPUTELEMENT_HSPACE           DISPID_INPUT+14
+#define DISPID_IHTMLINPUTELEMENT_ALT              DISPID_INPUT+10
+#define DISPID_IHTMLINPUTELEMENT_SRC              DISPID_INPUT+11
+#define DISPID_IHTMLINPUTELEMENT_LOWSRC           DISPID_INPUT+15
+#define DISPID_IHTMLINPUTELEMENT_VRML             DISPID_INPUT+16
+#define DISPID_IHTMLINPUTELEMENT_DYNSRC           DISPID_INPUT+17
+#define DISPID_IHTMLINPUTELEMENT_READYSTATE       DISPID_A_READYSTATE
+#define DISPID_IHTMLINPUTELEMENT_COMPLETE         DISPID_INPUT+18
+#define DISPID_IHTMLINPUTELEMENT_LOOP             DISPID_INPUT+19
+#define DISPID_IHTMLINPUTELEMENT_ALIGN            STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLINPUTELEMENT_ONLOAD           DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLINPUTELEMENT_ONERROR          DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLINPUTELEMENT_ONABORT          DISPID_EVPROP_ONABORT
+#define DISPID_IHTMLINPUTELEMENT_WIDTH            STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLINPUTELEMENT_HEIGHT           STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLINPUTELEMENT_START            DISPID_INPUT+20
+
+/* IHTMLInputElement2 */
+#define DISPID_IHTMLINPUTELEMENT2_ACCEPT  DISPID_INPUT+22
+#define DISPID_IHTMLINPUTELEMENT2_USEMAP  DISPID_INPUT+23
+
+/* IHTMLInputTextElement */
+#define DISPID_IHTMLINPUTTEXTELEMENT_TYPE             DISPID_INPUT
+#define DISPID_IHTMLINPUTTEXTELEMENT_VALUE            DISPID_A_VALUE
+#define DISPID_IHTMLINPUTTEXTELEMENT_NAME             STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLINPUTTEXTELEMENT_STATUS           DISPID_INPUT+21
+#define DISPID_IHTMLINPUTTEXTELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLINPUTTEXTELEMENT_FORM             DISPID_SITE+4
+#define DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE     DISPID_DEFAULTVALUE
+#define DISPID_IHTMLINPUTTEXTELEMENT_SIZE             DISPID_INPUT+2
+#define DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH        DISPID_INPUT+3
+#define DISPID_IHTMLINPUTTEXTELEMENT_SELECT           DISPID_INPUT+4
+#define DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE         DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT         DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLINPUTTEXTELEMENT_READONLY         DISPID_INPUT+5
+#define DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE  DISPID_INPUT+6
+
+/* IHTMLSelectElement */
+#define DISPID_IHTMLSELECTELEMENT_SIZE           DISPID_SELECT+2
+#define DISPID_IHTMLSELECTELEMENT_MULTIPLE       DISPID_SELECT+3
+#define DISPID_IHTMLSELECTELEMENT_NAME           STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLSELECTELEMENT_OPTIONS        DISPID_SELECT+5
+#define DISPID_IHTMLSELECTELEMENT_ONCHANGE       DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX  DISPID_SELECT+10
+#define DISPID_IHTMLSELECTELEMENT_TYPE           DISPID_SELECT+12
+#define DISPID_IHTMLSELECTELEMENT_VALUE          DISPID_SELECT+11
+#define DISPID_IHTMLSELECTELEMENT_DISABLED       STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLSELECTELEMENT_FORM           DISPID_SITE+4
+#define DISPID_IHTMLSELECTELEMENT_ADD            DISPID_COLLECTION+3
+#define DISPID_IHTMLSELECTELEMENT_REMOVE         DISPID_COLLECTION+4
+#define DISPID_IHTMLSELECTELEMENT_LENGTH         DISPID_COLLECTION
+#define DISPID_IHTMLSELECTELEMENT__NEWENUM       DISPID_NEWENUM
+#define DISPID_IHTMLSELECTELEMENT_ITEM           DISPID_VALUE
+#define DISPID_IHTMLSELECTELEMENT_TAGS           DISPID_COLLECTION+2
+
+/* IHTMLSelectElement2 */
+#define DISPID_IHTMLSELECTELEMENT2_URNS  DISPID_COLLECTION+5
+
+/* IHTMLSelectElement4 */
+#define DISPID_IHTMLSELECTELEMENT4_NAMEDITEM  DISPID_COLLECTION+6
+
+/* IHTMLHeadElement */
+#define DISPID_IHTMLHEADELEMENT_PROFILE  DISPID_HEDELEMS+1
+
+/* IHTMLHeadElement2 */
+#define DISPID_IHTMLHEADELEMENT2_IE8_PROFILE  DISPID_IE8_HEAD
+
+/* IHTMLTitleElement */
+#define DISPID_IHTMLTITLEELEMENT_TEXT  DISPID_A_VALUE
+
+/* IHTMLMetaElement */
+#define DISPID_IHTMLMETAELEMENT_HTTPEQUIV  DISPID_HEDELEMS+1
+#define DISPID_IHTMLMETAELEMENT_CONTENT    DISPID_HEDELEMS+2
+#define DISPID_IHTMLMETAELEMENT_NAME       STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLMETAELEMENT_URL        DISPID_HEDELEMS+3
+#define DISPID_IHTMLMETAELEMENT_CHARSET    DISPID_HEDELEMS+13
+
+/* IHTMLMetaElement2 */
+#define DISPID_IHTMLMETAELEMENT2_SCHEME  DISPID_HEDELEMS+20
+
+/* IHTMLMetaElement3 */
+#define DISPID_IHTMLMETAELEMENT3_IE8_URL  DISPID_IE8_META
+
+/* IHTMLRect */
+#define DISPID_IHTMLRECT_LEFT    DISPID_OMRECT+1
+#define DISPID_IHTMLRECT_TOP     DISPID_OMRECT+2
+#define DISPID_IHTMLRECT_RIGHT   DISPID_OMRECT+3
+#define DISPID_IHTMLRECT_BOTTOM  DISPID_OMRECT+4
+
+/* IHTMLRectCollection */
+#define DISPID_IHTMLRECTCOLLECTION_LENGTH    DISPID_COLLECTION
+#define DISPID_IHTMLRECTCOLLECTION__NEWENUM  DISPID_NEWENUM
+#define DISPID_IHTMLRECTCOLLECTION_ITEM      DISPID_VALUE
+
+/* IHTMLCurrentStyle */
+#define DISPID_IHTMLCURRENTSTYLE_POSITION              DISPID_A_POSITION
+#define DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT            DISPID_A_FLOAT
+#define DISPID_IHTMLCURRENTSTYLE_COLOR                 DISPID_A_COLOR
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR       DISPID_BACKCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_FONTFAMILY            DISPID_A_FONTFACE
+#define DISPID_IHTMLCURRENTSTYLE_FONTSTYLE             DISPID_A_FONTSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_FONTVARIANT           DISPID_A_FONTVARIANT
+#define DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT            DISPID_A_FONTWEIGHT
+#define DISPID_IHTMLCURRENTSTYLE_FONTSIZE              DISPID_A_FONTSIZE
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE       DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX   DISPID_A_BACKGROUNDPOSX
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY   DISPID_A_BACKGROUNDPOSY
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT      DISPID_A_BACKGROUNDREPEAT
+#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR       DISPID_A_BORDERLEFTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR        DISPID_A_BORDERTOPCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR      DISPID_A_BORDERRIGHTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR     DISPID_A_BORDERBOTTOMCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE        DISPID_A_BORDERTOPSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE      DISPID_A_BORDERRIGHTSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE     DISPID_A_BORDERBOTTOMSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE       DISPID_A_BORDERLEFTSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH        DISPID_A_BORDERTOPWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH      DISPID_A_BORDERRIGHTWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH     DISPID_A_BORDERBOTTOMWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH       DISPID_A_BORDERLEFTWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_LEFT                  STDPROPID_XOBJ_LEFT
+#define DISPID_IHTMLCURRENTSTYLE_TOP                   STDPROPID_XOBJ_TOP
+#define DISPID_IHTMLCURRENTSTYLE_WIDTH                 STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLCURRENTSTYLE_HEIGHT                STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT           DISPID_A_PADDINGLEFT
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGTOP            DISPID_A_PADDINGTOP
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT          DISPID_A_PADDINGRIGHT
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM         DISPID_A_PADDINGBOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_TEXTALIGN             STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION        DISPID_A_TEXTDECORATION
+#define DISPID_IHTMLCURRENTSTYLE_DISPLAY               DISPID_A_DISPLAY
+#define DISPID_IHTMLCURRENTSTYLE_VISIBILITY            DISPID_A_VISIBILITY
+#define DISPID_IHTMLCURRENTSTYLE_ZINDEX                DISPID_A_ZINDEX
+#define DISPID_IHTMLCURRENTSTYLE_LETTERSPACING         DISPID_A_LETTERSPACING
+#define DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT            DISPID_A_LINEHEIGHT
+#define DISPID_IHTMLCURRENTSTYLE_TEXTINDENT            DISPID_A_TEXTINDENT
+#define DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN         DISPID_A_VERTICALALIGN
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT  DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLCURRENTSTYLE_MARGINTOP             DISPID_A_MARGINTOP
+#define DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT           DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM          DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_MARGINLEFT            DISPID_A_MARGINLEFT
+#define DISPID_IHTMLCURRENTSTYLE_CLEAR                 DISPID_A_CLEAR
+#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE         DISPID_A_LISTSTYLETYPE
+#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION     DISPID_A_LISTSTYLEPOSITION
+#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE        DISPID_A_LISTSTYLEIMAGE
+#define DISPID_IHTMLCURRENTSTYLE_CLIPTOP               DISPID_A_CLIPRECTTOP
+#define DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT             DISPID_A_CLIPRECTRIGHT
+#define DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM            DISPID_A_CLIPRECTBOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_CLIPLEFT              DISPID_A_CLIPRECTLEFT
+#define DISPID_IHTMLCURRENTSTYLE_OVERFLOW              DISPID_A_OVERFLOW
+#define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE       DISPID_A_PAGEBREAKBEFORE
+#define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER        DISPID_A_PAGEBREAKAFTER
+#define DISPID_IHTMLCURRENTSTYLE_CURSOR                DISPID_A_CURSOR
+#define DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT           DISPID_A_TABLELAYOUT
+#define DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE        DISPID_A_BORDERCOLLAPSE
+#define DISPID_IHTMLCURRENTSTYLE_DIRECTION             DISPID_A_DIRECTION
+#define DISPID_IHTMLCURRENTSTYLE_BEHAVIOR              DISPID_A_BEHAVIOR
+#define DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE          DISPID_HTMLOBJECT+2
+#define DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI           DISPID_A_UNICODEBIDI
+#define DISPID_IHTMLCURRENTSTYLE_RIGHT                 STDPROPID_XOBJ_RIGHT
+#define DISPID_IHTMLCURRENTSTYLE_BOTTOM                STDPROPID_XOBJ_BOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_IMEMODE               DISPID_A_IMEMODE
+#define DISPID_IHTMLCURRENTSTYLE_RUBYALIGN             DISPID_A_RUBYALIGN
+#define DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION          DISPID_A_RUBYPOSITION
+#define DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG          DISPID_A_RUBYOVERHANG
+#define DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE         DISPID_A_TEXTAUTOSPACE
+#define DISPID_IHTMLCURRENTSTYLE_LINEBREAK             DISPID_A_LINEBREAK
+#define DISPID_IHTMLCURRENTSTYLE_WORDBREAK             DISPID_A_WORDBREAK
+#define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY           DISPID_A_TEXTJUSTIFY
+#define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM       DISPID_A_TEXTJUSTIFYTRIM
+#define DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA           DISPID_A_TEXTKASHIDA
+#define DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION        DISPID_A_DIR
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR        DISPID_A_LAYOUTGRIDCHAR
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE        DISPID_A_LAYOUTGRIDLINE
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE        DISPID_A_LAYOUTGRIDMODE
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE        DISPID_A_LAYOUTGRIDTYPE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE           DISPID_A_BORDERSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR           DISPID_A_BORDERCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH           DISPID_A_BORDERWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_PADDING               DISPID_A_PADDING
+#define DISPID_IHTMLCURRENTSTYLE_MARGIN                DISPID_A_MARGIN
+#define DISPID_IHTMLCURRENTSTYLE_ACCELERATOR           DISPID_A_ACCELERATOR
+#define DISPID_IHTMLCURRENTSTYLE_OVERFLOWX             DISPID_A_OVERFLOWX
+#define DISPID_IHTMLCURRENTSTYLE_OVERFLOWY             DISPID_A_OVERFLOWY
+#define DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM         DISPID_A_TEXTTRANSFORM
+
+/* IHTMLCurrentStyle2 */
+#define DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW                DISPID_A_LAYOUTFLOW
+#define DISPID_IHTMLCURRENTSTYLE2_WORDWRAP                  DISPID_A_WORDWRAP
+#define DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION     DISPID_A_TEXTUNDERLINEPOSITION
+#define DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT                 DISPID_A_HASLAYOUT
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR        DISPID_A_SCROLLBARBASECOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR        DISPID_A_SCROLLBARFACECOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR     DISPID_A_SCROLLBAR3DLIGHTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR      DISPID_A_SCROLLBARSHADOWCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR   DISPID_A_SCROLLBARHIGHLIGHTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR  DISPID_A_SCROLLBARDARKSHADOWCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR       DISPID_A_SCROLLBARARROWCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR       DISPID_A_SCROLLBARTRACKCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE               DISPID_A_WRITINGMODE
+#define DISPID_IHTMLCURRENTSTYLE2_ZOOM                      DISPID_A_ZOOM
+#define DISPID_IHTMLCURRENTSTYLE2_FILTER                    DISPID_A_FILTER
+#define DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST             DISPID_A_TEXTALIGNLAST
+#define DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE          DISPID_A_TEXTKASHIDASPACE
+#define DISPID_IHTMLCURRENTSTYLE2_ISBLOCK                   DISPID_A_ISBLOCK
+
+/* IHTMLCurrentStyle3 */
+#define DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW  DISPID_A_TEXTOVERFLOW
+#define DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT     DISPID_A_MINHEIGHT
+#define DISPID_IHTMLCURRENTSTYLE3_WORDSPACING   DISPID_A_WORDSPACING
+#define DISPID_IHTMLCURRENTSTYLE3_WHITESPACE    DISPID_A_WHITESPACE
+
+/* IHTMLCurrentStyle4 */
+#define DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE       DISPID_A_INTERPOLATION
+#define DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT                 DISPID_A_MAXHEIGHT
+#define DISPID_IHTMLCURRENTSTYLE4_MINWIDTH                  DISPID_A_MINWIDTH
+#define DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH                  DISPID_A_MAXWIDTH
+
+/* HTMLTextContainerEvents2 */
+#define DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE       DISPID_EVMETH_ONCHANGE
+#define DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT       DISPID_EVMETH_ONSELECT
+
+/* HTMLTextContainerEvents */
+#define DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE        DISPID_EVMETH_ONCHANGE
+#define DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT        DISPID_EVMETH_ONSELECT
+
+/* IHTMLTextContainer */
+#define DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE  DISPID_TEXTSITE+1
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT        DISPID_TEXTSITE+2
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH         DISPID_TEXTSITE+3
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLTOP           DISPID_TEXTSITE+4
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT          DISPID_TEXTSITE+5
+#define DISPID_IHTMLTEXTCONTAINER_ONSCROLL            DISPID_EVPROP_ONSCROLL
+
+/* IHTMLTableCaption */
+#define DISPID_IHTMLTABLECAPTION_ALIGN   STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLECAPTION_VALIGN  DISPID_A_TABLEVALIGN
+
+ /* IHTMLCommentElement */
+#define DISPID_IHTMLCOMMENTELEMENT_TEXT    DISPID_COMMENTPDL+1
+#define DISPID_IHTMLCOMMENTELEMENT_ATOMIC  DISPID_COMMENTPDL+2
+
+ /* IHTMLCommentElement2 */
+#define DISPID_IHTMLCOMMENTELEMENT2_DATA           DISPID_COMMENTPDL+3
+#define DISPID_IHTMLCOMMENTELEMENT2_LENGTH         DISPID_COMMENTPDL+4
+#define DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA  DISPID_COMMENTPDL+5
+#define DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA     DISPID_COMMENTPDL+6
+#define DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA     DISPID_COMMENTPDL+7
+#define DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA     DISPID_COMMENTPDL+8
+#define DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA    DISPID_COMMENTPDL+9
+
+/* IHTMLTable */
+#define DISPID_IHTMLTABLE_COLS                DISPID_TABLE+1
+#define DISPID_IHTMLTABLE_BORDER              DISPID_TABLE+2
+#define DISPID_IHTMLTABLE_FRAME               DISPID_TABLE+4
+#define DISPID_IHTMLTABLE_RULES               DISPID_TABLE+3
+#define DISPID_IHTMLTABLE_CELLSPACING         DISPID_TABLE+5
+#define DISPID_IHTMLTABLE_CELLPADDING         DISPID_TABLE+6
+#define DISPID_IHTMLTABLE_BACKGROUND          DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLTABLE_BGCOLOR             DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLE_BORDERCOLOR         DISPID_A_TABLEBORDERCOLOR
+#define DISPID_IHTMLTABLE_BORDERCOLORLIGHT    DISPID_A_TABLEBORDERCOLORLIGHT
+#define DISPID_IHTMLTABLE_BORDERCOLORDARK     DISPID_A_TABLEBORDERCOLORDARK
+#define DISPID_IHTMLTABLE_ALIGN               STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLTABLE_REFRESH             DISPID_TABLE+15
+#define DISPID_IHTMLTABLE_ROWS                DISPID_TABLE+16
+#define DISPID_IHTMLTABLE_WIDTH               STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLTABLE_HEIGHT              STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLTABLE_DATAPAGESIZE        DISPID_TABLE+17
+#define DISPID_IHTMLTABLE_NEXTPAGE            DISPID_TABLE+18
+#define DISPID_IHTMLTABLE_PREVIOUSPAGE        DISPID_TABLE+19
+#define DISPID_IHTMLTABLE_THEAD               DISPID_TABLE+20
+#define DISPID_IHTMLTABLE_TFOOT               DISPID_TABLE+21
+#define DISPID_IHTMLTABLE_TBODIES             DISPID_TABLE+24
+#define DISPID_IHTMLTABLE_CAPTION             DISPID_TABLE+25
+#define DISPID_IHTMLTABLE_CREATETHEAD         DISPID_TABLE+26
+#define DISPID_IHTMLTABLE_DELETETHEAD         DISPID_TABLE+27
+#define DISPID_IHTMLTABLE_CREATETFOOT         DISPID_TABLE+28
+#define DISPID_IHTMLTABLE_DELETETFOOT         DISPID_TABLE+29
+#define DISPID_IHTMLTABLE_CREATECAPTION       DISPID_TABLE+30
+#define DISPID_IHTMLTABLE_DELETECAPTION       DISPID_TABLE+31
+#define DISPID_IHTMLTABLE_INSERTROW           DISPID_TABLE+32
+#define DISPID_IHTMLTABLE_DELETEROW           DISPID_TABLE+33
+#define DISPID_IHTMLTABLE_READYSTATE          DISPID_A_READYSTATE
+#define DISPID_IHTMLTABLE_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE
+
+/* IHTMLTable2 */
+#define DISPID_IHTMLTABLE2_FIRSTPAGE  DISPID_TABLE+35
+#define DISPID_IHTMLTABLE2_LASTPAGE   DISPID_TABLE+36
+#define DISPID_IHTMLTABLE2_CELLS      DISPID_TABLE+37
+#define DISPID_IHTMLTABLE2_MOVEROW    DISPID_TABLE+38
+
+/* IHTMLTable3 */
+#define DISPID_IHTMLTABLE3_SUMMARY  DISPID_TABLE+39
+
+/* IHTMLTableSection */
+#define DISPID_IHTMLTABLESECTION_ALIGN      STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLESECTION_VALIGN     DISPID_A_TABLEVALIGN
+#define DISPID_IHTMLTABLESECTION_BGCOLOR    DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLESECTION_ROWS       DISPID_TABLESECTION
+#define DISPID_IHTMLTABLESECTION_INSERTROW  DISPID_TABLESECTION+1
+#define DISPID_IHTMLTABLESECTION_DELETEROW  DISPID_TABLESECTION+2
+
+/* IHTMLTableRow */
+#define DISPID_IHTMLTABLEROW_ALIGN             STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLEROW_VALIGN            DISPID_A_TABLEVALIGN
+#define DISPID_IHTMLTABLEROW_BGCOLOR           DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLEROW_BORDERCOLOR       DISPID_A_TABLEBORDERCOLOR
+#define DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT  DISPID_A_TABLEBORDERCOLORLIGHT
+#define DISPID_IHTMLTABLEROW_BORDERCOLORDARK   DISPID_A_TABLEBORDERCOLORDARK
+#define DISPID_IHTMLTABLEROW_ROWINDEX          DISPID_TABLEROW
+#define DISPID_IHTMLTABLEROW_SECTIONROWINDEX   DISPID_TABLEROW+1
+#define DISPID_IHTMLTABLEROW_CELLS             DISPID_TABLEROW+2
+#define DISPID_IHTMLTABLEROW_INSERTCELL        DISPID_TABLEROW+3
+#define DISPID_IHTMLTABLEROW_DELETECELL        DISPID_TABLEROW+4
+
+/* IHTMLTableRow2 */
+#define DISPID_IHTMLTABLEROW2_HEIGHT  STDPROPID_XOBJ_HEIGHT
+
+/* IHTMLTableRow3 */
+#define DISPID_IHTMLTABLEROW3_CH     DISPID_TABLEROW+9
+#define DISPID_IHTMLTABLEROW3_CHOFF  DISPID_TABLEROW+10
+
+/* IHTMLTableCell */
+#define DISPID_IHTMLTABLECELL_ROWSPAN           DISPID_TABLECELL+1
+#define DISPID_IHTMLTABLECELL_COLSPAN           DISPID_TABLECELL+2
+#define DISPID_IHTMLTABLECELL_ALIGN             STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLECELL_VALIGN            DISPID_A_TABLEVALIGN
+#define DISPID_IHTMLTABLECELL_BGCOLOR           DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLECELL_NOWRAP            DISPID_A_NOWRAP
+#define DISPID_IHTMLTABLECELL_BACKGROUND        DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLTABLECELL_BORDERCOLOR       DISPID_A_TABLEBORDERCOLOR
+#define DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT  DISPID_A_TABLEBORDERCOLORLIGHT
+#define DISPID_IHTMLTABLECELL_BORDERCOLORDARK   DISPID_A_TABLEBORDERCOLORDARK
+#define DISPID_IHTMLTABLECELL_WIDTH             STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLTABLECELL_HEIGHT            STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLTABLECELL_CELLINDEX         DISPID_TABLECELL+3
+
+/* IHTMLTableCell2 */
+#define DISPID_IHTMLTABLECELL2_ABBR     DISPID_TABLECELL+4
+#define DISPID_IHTMLTABLECELL2_AXIS     DISPID_TABLECELL+5
+#define DISPID_IHTMLTABLECELL2_CH       DISPID_TABLECELL+6
+#define DISPID_IHTMLTABLECELL2_CHOFF    DISPID_TABLECELL+7
+#define DISPID_IHTMLTABLECELL2_HEADERS  DISPID_TABLECELL+8
+#define DISPID_IHTMLTABLECELL2_SCOPE    DISPID_TABLECELL+9
+
+/* IHTMLTableCell3 */
+#define DISPID_IHTMLTABLECELL3_IE9_CH     DISPID_TABLECELL+10
+#define DISPID_IHTMLTABLECELL3_IE9_CHOFF  DISPID_TABLECELL+11
+
+/* IHTMLScriptElement */
+#define DISPID_IHTMLSCRIPTELEMENT_SRC         DISPID_SCRIPT+1
+#define DISPID_IHTMLSCRIPTELEMENT_HTMLFOR     DISPID_SCRIPT+4
+#define DISPID_IHTMLSCRIPTELEMENT_EVENT       DISPID_SCRIPT+5
+#define DISPID_IHTMLSCRIPTELEMENT_TEXT        DISPID_SCRIPT+6
+#define DISPID_IHTMLSCRIPTELEMENT_DEFER       DISPID_SCRIPT+7
+#define DISPID_IHTMLSCRIPTELEMENT_READYSTATE  DISPID_A_READYSTATE
+#define DISPID_IHTMLSCRIPTELEMENT_ONERROR     DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLSCRIPTELEMENT_TYPE        DISPID_SCRIPT+9
+
+/* IHTMLScriptElement2 */
+#define DISPID_IHTMLSCRIPTELEMENT2_CHARSET  DISPID_SCRIPT+10
+
+/* IHTMLScriptElement3 */
+#define DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC  DISPID_IE8_SCRIPT
+
+/* IHTMLObjectElement */
+#define DISPID_IHTMLOBJECTELEMENT_OBJECT              DISPID_OBJECT+1
+#define DISPID_IHTMLOBJECTELEMENT_CLASSID             DISPID_OBJECT+2
+#define DISPID_IHTMLOBJECTELEMENT_DATA                DISPID_OBJECT+3
+#define DISPID_IHTMLOBJECTELEMENT_RECORDSET           DISPID_OBJECT+5
+#define DISPID_IHTMLOBJECTELEMENT_ALIGN               STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLOBJECTELEMENT_NAME                STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLOBJECTELEMENT_CODEBASE            DISPID_OBJECT+6
+#define DISPID_IHTMLOBJECTELEMENT_CODETYPE            DISPID_OBJECT+7
+#define DISPID_IHTMLOBJECTELEMENT_CODE                DISPID_OBJECT+8
+#define DISPID_IHTMLOBJECTELEMENT_BASEHREF            STDPROPID_XOBJ_BASEHREF
+#define DISPID_IHTMLOBJECTELEMENT_TYPE                DISPID_OBJECT+9
+#define DISPID_IHTMLOBJECTELEMENT_FORM                DISPID_SITE+4
+#define DISPID_IHTMLOBJECTELEMENT_WIDTH               STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLOBJECTELEMENT_HEIGHT              STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLOBJECTELEMENT_READYSTATE          DISPID_OBJECT+10
+#define DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLOBJECTELEMENT_ONERROR             DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLOBJECTELEMENT_ALTHTML             DISPID_OBJECT+11
+#define DISPID_IHTMLOBJECTELEMENT_VSPACE              DISPID_OBJECT+12
+#define DISPID_IHTMLOBJECTELEMENT_HSPACE              DISPID_OBJECT+13
+
+/* IHTMLObjectElement2 */
+#define DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET  DISPID_OBJECT+14
+#define DISPID_IHTMLOBJECTELEMENT2_CLASSID         DISPID_OBJECT+2
+#define DISPID_IHTMLOBJECTELEMENT2_DATA            DISPID_OBJECT+3
+
+/* IHTMLObjectElement3 */
+#define DISPID_IHTMLOBJECTELEMENT3_ARCHIVE  DISPID_OBJECT+15
+#define DISPID_IHTMLOBJECTELEMENT3_ALT      DISPID_OBJECT+16
+#define DISPID_IHTMLOBJECTELEMENT3_DECLARE  DISPID_OBJECT+17
+#define DISPID_IHTMLOBJECTELEMENT3_STANDBY  DISPID_OBJECT+18
+#define DISPID_IHTMLOBJECTELEMENT3_BORDER   DISPID_OBJECT+19
+#define DISPID_IHTMLOBJECTELEMENT3_USEMAP   DISPID_OBJECT+20
+
+/* IHTMLObjectElement4 */
+#define DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT  DISPID_IE8_OBJECT
+#define DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE     DISPID_IE8_OBJECT+1
+#define DISPID_IHTMLOBJECTELEMENT4_IE8_DATA         DISPID_IE8_OBJECT+2
+
+/* IHTMLParamElement */
+#define DISPID_IHTMLPARAMELEMENT_NAME       DISPID_PARAM+1
+#define DISPID_IHTMLPARAMELEMENT_VALUE      DISPID_PARAM+2
+#define DISPID_IHTMLPARAMELEMENT_TYPE       DISPID_PARAM+3
+#define DISPID_IHTMLPARAMELEMENT_VALUETYPE  DISPID_PARAM+4
+
+/* IHTMLParamElement2 */
+#define DISPID_IHTMLPARAMELEMENT2_NAME           DISPID_PARAM+1
+#define DISPID_IHTMLPARAMELEMENT2_TYPE           DISPID_PARAM+3
+#define DISPID_IHTMLPARAMELEMENT2_VALUE          DISPID_PARAM+2
+#define DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE  DISPID_IE8_PARAM
+
+/* IHTMLFrameBase */
+#define DISPID_IHTMLFRAMEBASE_SRC           DISPID_FRAMESITE+0
+#define DISPID_IHTMLFRAMEBASE_NAME          STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLFRAMEBASE_BORDER        DISPID_FRAMESITE+2
+#define DISPID_IHTMLFRAMEBASE_FRAMEBORDER   DISPID_FRAMESITE+3
+#define DISPID_IHTMLFRAMEBASE_FRAMESPACING  DISPID_FRAMESITE+4
+#define DISPID_IHTMLFRAMEBASE_MARGINWIDTH   DISPID_FRAMESITE+5
+#define DISPID_IHTMLFRAMEBASE_MARGINHEIGHT  DISPID_FRAMESITE+6
+#define DISPID_IHTMLFRAMEBASE_NORESIZE      DISPID_FRAMESITE+7
+#define DISPID_IHTMLFRAMEBASE_SCROLLING     DISPID_FRAMESITE+8
+
+/* IHTMLFrameBase2 */
+#define DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW       DISPID_FRAMESITE+9
+#define DISPID_IHTMLFRAMEBASE2_ONLOAD              DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLFRAMEBASE2_READYSTATE          DISPID_A_READYSTATE
+#define DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY   DISPID_A_ALLOWTRANSPARENCY
+
+/* IHTMLFrameBase3 */
+#define DISPID_IHTMLFRAMEBASE3_LONGDESC  DISPID_FRAMESITE+10
+
+/* IHTMLFrameElement */
+#define DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR  DISPID_FRAME+1
+
+/* IHTMLFrameElement2 */
+#define DISPID_IHTMLFRAMEELEMENT2_HEIGHT  STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLFRAMEELEMENT2_WIDTH   STDPROPID_XOBJ_WIDTH
+
+/* IHTMLFrameElement3 */
+#define DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT  DISPID_IE8_FRAME
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_SRC          DISPID_IE8_FRAME+1
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC     DISPID_IE8_FRAME+2
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER  DISPID_IE8_FRAME+3
+
+/* IHTMLIFrameElement */
+#define DISPID_IHTMLIFRAMEELEMENT_VSPACE  DISPID_IFRAME+1
+#define DISPID_IHTMLIFRAMEELEMENT_HSPACE  DISPID_IFRAME+2
+#define DISPID_IHTMLIFRAMEELEMENT_ALIGN   STDPROPID_XOBJ_CONTROLALIGN
+
+/* IHTMLIFrameElement2 */
+#define DISPID_IHTMLIFRAMEELEMENT2_HEIGHT  STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLIFRAMEELEMENT2_WIDTH   STDPROPID_XOBJ_WIDTH
+
+/* IHTMLIFrameElement3 */
+#define DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT  DISPID_IE8_IFRAME
+#define DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC          DISPID_IE8_IFRAME+1
+#define DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC     DISPID_IE8_IFRAME+2
+#define DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER  DISPID_IE8_IFRAME+3
+
+/* IHTMLStyleElement */
+#define DISPID_IHTMLSTYLEELEMENT_TYPE                DISPID_STYLEELEMENT+2
+#define DISPID_IHTMLSTYLEELEMENT_READYSTATE          DISPID_A_READYSTATE
+#define DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLSTYLEELEMENT_ONLOAD              DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLSTYLEELEMENT_ONERROR             DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLSTYLEELEMENT_STYLESHEET          DISPID_STYLEELEMENT+4
+#define DISPID_IHTMLSTYLEELEMENT_DISABLED            STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLSTYLEELEMENT_MEDIA               DISPID_STYLEELEMENT+6
+
+/* IHTMLStorage */
+#define DISPID_IHTMLSTORAGE_LENGTH          DISPID_DOMSTORAGE+1
+#define DISPID_IHTMLSTORAGE_REMAININGSPACE  DISPID_DOMSTORAGE+2
+#define DISPID_IHTMLSTORAGE_KEY             DISPID_DOMSTORAGE+6
+#define DISPID_IHTMLSTORAGE_GETITEM         DISPID_DOMSTORAGE+3
+#define DISPID_IHTMLSTORAGE_SETITEM         DISPID_DOMSTORAGE+4
+#define DISPID_IHTMLSTORAGE_REMOVEITEM      DISPID_DOMSTORAGE+5
+#define DISPID_IHTMLSTORAGE_CLEAR           DISPID_DOMSTORAGE+7
+
+/* IHTMLDOMConstructorCollection */
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR                        DISPID_WINDOW+8001+DomConstructorAttr
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION      DISPID_WINDOW+8001+DomConstructorBehaviorUrnsCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION          DISPID_WINDOW+8001+DomConstructorBookmarkCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO              DISPID_WINDOW+8001+DomConstructorCompatibleInfo
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION    DISPID_WINDOW+8001+DomConstructorCompatibleInfoCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION      DISPID_WINDOW+8001+DomConstructorControlRangeCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION  DISPID_WINDOW+8001+DomConstructorCSSCurrentStyleDeclaration
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST                 DISPID_WINDOW+8001+DomConstructorCSSRuleList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION     DISPID_WINDOW+8001+DomConstructorCSSRuleStyleDeclaration
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION         DISPID_WINDOW+8001+DomConstructorCSSStyleDeclaration
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE                DISPID_WINDOW+8001+DomConstructorCSSStyleRule
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET               DISPID_WINDOW+8001+DomConstructorCSSStyleSheet
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER                DISPID_WINDOW+8001+DomConstructorDataTransfer
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION           DISPID_WINDOW+8001+DomConstructorDOMImplementation
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT                     DISPID_WINDOW+8001+DomConstructorElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT                       DISPID_WINDOW+8001+DomConstructorEvent
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY                     DISPID_WINDOW+8001+DomConstructorHistory
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS  DISPID_WINDOW+8001+DomConstructorHTCElementBehaviorDefaults
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLAnchorElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLAreaElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION         DISPID_WINDOW+8001+DomConstructorHTMLAreasCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLBaseElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLBaseFontElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLBGSoundElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLBlockElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLBodyElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLBRElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLButtonElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION              DISPID_WINDOW+8001+DomConstructorHTMLCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLCommentElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLDDElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT              DISPID_WINDOW+8001+DomConstructorHTMLDivElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT                DISPID_WINDOW+8001+DomConstructorHTMLDocument
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLDListElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLDTElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLEmbedElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLFieldSetElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLFontElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLFormElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLFrameElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLFrameSetElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLGenericElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLHeadElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLHeadingElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLHRElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLHtmlElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLIFrameElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLImageElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLInputElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLIsIndexElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLLabelElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLLegendElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLLIElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLLinkElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT              DISPID_WINDOW+8001+DomConstructorHTMLMapElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLMarqueeElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLMetaElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG          DISPID_WINDOW+8001+DomConstructorHTMLModelessDialog
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO           DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfo
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfoCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLNextIdElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLNoShowElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLObjectElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLOListElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLOptionElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT        DISPID_WINDOW+8001+DomConstructorHTMLParagraphElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLParamElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLPhraseElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION       DISPID_WINDOW+8001+DomConstructorHTMLPluginsCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP                   DISPID_WINDOW+8001+DomConstructorHTMLPopup
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLScriptElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLSelectElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLSpanElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLStyleElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT     DISPID_WINDOW+8001+DomConstructorHTMLTableCaptionElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT        DISPID_WINDOW+8001+DomConstructorHTMLTableCellElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLTableColElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLTableElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLTableRowElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT     DISPID_WINDOW+8001+DomConstructorHTMLTableSectionElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLTextAreaElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLTextElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLTitleElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLUListElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLUnknownElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE                       DISPID_WINDOW+8001+DomConstructorImage
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION                    DISPID_WINDOW+8001+DomConstructorLocation
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP                DISPID_WINDOW+8001+DomConstructorNamedNodeMap
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR                   DISPID_WINDOW+8001+DomConstructorNavigator
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST                    DISPID_WINDOW+8001+DomConstructorNodeList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION                      DISPID_WINDOW+8001+DomConstructorOption
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN                      DISPID_WINDOW+8001+DomConstructorScreen
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION                   DISPID_WINDOW+8001+DomConstructorSelection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST              DISPID_WINDOW+8001+DomConstructorStaticNodeList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE                     DISPID_WINDOW+8001+DomConstructorStorage
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST              DISPID_WINDOW+8001+DomConstructorStyleSheetList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE              DISPID_WINDOW+8001+DomConstructorStyleSheetPage
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST          DISPID_WINDOW+8001+DomConstructorStyleSheetPageList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT                        DISPID_WINDOW+8001+DomConstructorText
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE                   DISPID_WINDOW+8001+DomConstructorTextRange
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION         DISPID_WINDOW+8001+DomConstructorTextRangeCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE               DISPID_WINDOW+8001+DomConstructorTextRectangle
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST           DISPID_WINDOW+8001+DomConstructorTextRectangleList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW                      DISPID_WINDOW+8001+DomConstructorWindow
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST              DISPID_WINDOW+8001+DomConstructorXDomainRequest
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST              DISPID_WINDOW+8001+DomConstructorXMLHttpRequest
+
+/* IEventTarget */
+#define DISPID_IEVENTTARGET_ADDEVENTLISTENER     DISPID_HTMLOBJECT+10
+#define DISPID_IEVENTTARGET_REMOVEEVENTLISTENER  DISPID_HTMLOBJECT+11
+#define DISPID_IEVENTTARGET_DISPATCHEVENT        DISPID_HTMLOBJECT+12
+
+/* IDOMEvent */
+#define DISPID_IDOMEVENT_BUBBLES                   DISPID_DOMEVENT+1
+#define DISPID_IDOMEVENT_CANCELABLE                DISPID_DOMEVENT+2
+#define DISPID_IDOMEVENT_CURRENTTARGET             DISPID_DOMEVENT+3
+#define DISPID_IDOMEVENT_DEFAULTPREVENTED          DISPID_DOMEVENT+4
+#define DISPID_IDOMEVENT_EVENTPHASE                DISPID_DOMEVENT+5
+#define DISPID_IDOMEVENT_TARGET                    DISPID_DOMEVENT+6
+#define DISPID_IDOMEVENT_TIMESTAMP                 DISPID_DOMEVENT+7
+#define DISPID_IDOMEVENT_TYPE                      DISPID_DOMEVENT+8
+#define DISPID_IDOMEVENT_INITEVENT                 DISPID_DOMEVENT+9
+#define DISPID_IDOMEVENT_PREVENTDEFAULT            DISPID_DOMEVENT+10
+#define DISPID_IDOMEVENT_STOPPROPAGATION           DISPID_DOMEVENT+11
+#define DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION  DISPID_DOMEVENT+12
+#define DISPID_IDOMEVENT_ISTRUSTED                 DISPID_DOMEVENT+13
+#define DISPID_IDOMEVENT_CANCELBUBBLE              DISPID_DOMEVENT+14
+#define DISPID_IDOMEVENT_SRCELEMENT                DISPID_DOMEVENT+15
+
+/* IHTMLControlElement */
+#define DISPID_IHTMLCONTROLELEMENT_TABINDEX        STDPROPID_XOBJ_TABINDEX
+#define DISPID_IHTMLCONTROLELEMENT_FOCUS           (DISPID_SITE+0)
+#define DISPID_IHTMLCONTROLELEMENT_ACCESSKEY       (DISPID_SITE+5)
+#define DISPID_IHTMLCONTROLELEMENT_ONBLUR          DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLCONTROLELEMENT_ONFOCUS         DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLCONTROLELEMENT_ONRESIZE        DISPID_EVPROP_ONRESIZE
+#define DISPID_IHTMLCONTROLELEMENT_BLUR            (DISPID_SITE+2)
+#define DISPID_IHTMLCONTROLELEMENT_ADDFILTER       (DISPID_SITE+17)
+#define DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER    (DISPID_SITE+18)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT    (DISPID_SITE+19)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH     (DISPID_SITE+20)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTTOP       (DISPID_SITE+21)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT      (DISPID_SITE+22)
+
+#endif /* __MSHTMDID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl
new file mode 100644
index 0000000..ca3fd02
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "docobj.idl";
+
+cpp_quote("#define CONTEXT_MENU_DEFAULT     0")
+cpp_quote("#define CONTEXT_MENU_IMAGE       1")
+cpp_quote("#define CONTEXT_MENU_CONTROL     2")
+cpp_quote("#define CONTEXT_MENU_TABLE       3")
+cpp_quote("#define CONTEXT_MENU_TEXTSELECT  4")
+cpp_quote("#define CONTEXT_MENU_ANCHOR      5")
+cpp_quote("#define CONTEXT_MENU_UNKNOWN     6")
+cpp_quote("#define CONTEXT_MENU_IMGDYNSRC   7")
+cpp_quote("#define CONTEXT_MENU_IMGART      8")
+cpp_quote("#define CONTEXT_MENU_DEBUG       9")
+cpp_quote("#define CONTEXT_MENU_VSCROLL    10")
+cpp_quote("#define CONTEXT_MENU_HSCROLL    11")
+
+cpp_quote("#define MENUEXT_SHOWDIALOG 1")
+
+cpp_quote("#define DOCHOSTUIFLAG_BROWSER (DOCHOSTUIFLAG_DISABLE_HELP_MENU|DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE)")
+
+cpp_quote("#define HTMLDLG_NOUI            0x0010")
+cpp_quote("#define HTMLDLG_MODAL           0x0020")
+cpp_quote("#define HTMLDLG_MODELESS        0x0040")
+cpp_quote("#define HTMLDLG_PRINT_TEMPLATE  0x0080")
+cpp_quote("#define HTMLDLG_VERIFY          0x0100")
+
+cpp_quote("#define PRINT_DONTBOTHERUSER     0x0001")
+cpp_quote("#define PRINT_WAITFORCOMPLETION  0x0002")
+
+cpp_quote("DEFINE_GUID(CGID_MSHTML, 0xde4ba900,0x59ca,0x11cf,0x95,0x92,0x44,0x45,0x53,0x54,0x00,0x00);")
+cpp_quote("#define CMDSETID_Forms3 CGID_MSHTML")
+
+cpp_quote("#if defined(__GNUC__)")
+cpp_quote("#define SZ_HTML_CLIENTSITE_OBJECTPARAM (const WCHAR[]) {'{','d','4','d','b','6','8','5','0','-','5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a','0','c','9','0','a','9','0','a','c','}',0}")
+cpp_quote("#elif defined(_MSC_VER)")
+cpp_quote("#define SZ_HTML_CLIENTSITE_OBJECTPARAM L\"{d4db6850-5385-11d0-89e9-00a0c90a90ac}\"")
+cpp_quote("#else")
+cpp_quote("static const WCHAR SZ_HTML_CLIENTSITE_OBJECTPARAM[] = {'{','d','4','d','b','6','8','5','0','-','5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a','0','c','9','0','a','9','0','a','c','}',0};")
+cpp_quote("#endif")
+
+cpp_quote("#ifndef __IHTMLWindow2_FWD_DEFINED__")
+cpp_quote("#define __IHTMLWindow2_FWD_DEFINED__")
+cpp_quote("typedef interface IHTMLWindow2 IHTMLWindow2;")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ *    IHostDialogHelper interface
+ */
+[
+    object,
+    uuid(53DEC138-A51E-11d2-861E-00C04FA35C89),
+    pointer_default(unique),
+    local
+]
+interface IHostDialogHelper : IUnknown
+{
+    HRESULT ShowHTMLDialog(
+        HWND hwndParent,
+        IMoniker *pMk,
+        VARIANT *pvarArgIn,
+        WCHAR *pchOptions,
+        VARIANT *pvarArgOut,
+        IUnknown *punkHost);
+}
+
+/*****************************************************************************
+ *    HostDialogHelper coclass
+ */
+[
+    uuid(429AF92C-A51F-11d2-861E-00C04FA35C89)
+]
+coclass HostDialogHelper
+{
+    [default] interface IHostDialogHelper;
+}
+
+/*****************************************************************************
+ *    IDocHostUIHandler interface
+ */
+
+typedef enum tagDOCHOSTUITYPE {
+    DOCHOSTUITYPE_BROWSE = 0,
+    DOCHOSTUITYPE_AUTHOR = 1
+} DOCHOSTUITYPE;
+
+typedef enum tagDOCHOSTUIDBLCLK
+{
+    DOCHOSTUIDBLCLK_DEFAULT         = 0,
+    DOCHOSTUIDBLCLK_SHOWPROPERTIES  = 1,
+    DOCHOSTUIDBLCLK_SHOWCODE        = 2
+} DOCHOSTUIDBLCLK;
+
+typedef enum tagDOCHOSTUIFLAG
+{
+    DOCHOSTUIFLAG_DIALOG                      = 0x00000001,
+    DOCHOSTUIFLAG_DISABLE_HELP_MENU           = 0x00000002,
+    DOCHOSTUIFLAG_NO3DBORDER                  = 0x00000004,
+    DOCHOSTUIFLAG_SCROLL_NO                   = 0x00000008,
+    DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE     = 0x00000010,
+    DOCHOSTUIFLAG_OPENNEWWIN                  = 0x00000020,
+    DOCHOSTUIFLAG_DISABLE_OFFSCREEN           = 0x00000040,
+    DOCHOSTUIFLAG_FLAT_SCROLLBAR              = 0x00000080,
+    DOCHOSTUIFLAG_DIV_BLOCKDEFAULT            = 0x00000100,
+    DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY     = 0x00000200,
+    DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY     = 0x00000400,
+    DOCHOSTUIFLAG_CODEPAGELINKEDFONTS         = 0x00000800,
+    DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8   = 0x00001000,
+    DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8    = 0x00002000,
+    DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE   = 0x00004000,
+    DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION   = 0x00010000,
+    DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION     = 0x00020000,
+    DOCHOSTUIFLAG_THEME                       = 0x00040000,
+    DOCHOSTUIFLAG_NOTHEME                     = 0x00080000,
+    DOCHOSTUIFLAG_NOPICS                      = 0x00100000,
+    DOCHOSTUIFLAG_NO3DOUTERBORDER             = 0x00200000,
+    DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP       = 0x00400000,
+    DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK  = 0x00800000,
+    DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL   = 0x01000000
+} DOCHOSTUIFLAG;
+
+[
+    object,
+    uuid(BD3F23C0-D43E-11CF-893B-00AA00BDCE1A),
+    pointer_default(unique),
+    local
+]
+interface IDocHostUIHandler : IUnknown
+{
+    typedef struct _DOCHOSTUIINFO
+    {
+        ULONG cbSize;
+        DWORD dwFlags;
+        DWORD dwDoubleClick;
+        OLECHAR *pchHostCss;
+        OLECHAR *pchHostNS;
+    } DOCHOSTUIINFO;
+
+    HRESULT ShowContextMenu(
+        [in] DWORD dwID, 
+        [in] POINT *ppt, 
+        [in] IUnknown *pcmdtReserved,  
+        [in] IDispatch *pdispReserved);
+
+    HRESULT GetHostInfo([in, out] DOCHOSTUIINFO *pInfo);
+
+    HRESULT ShowUI(
+        [in] DWORD dwID,
+        [in] IOleInPlaceActiveObject *pActiveObject,
+        [in] IOleCommandTarget *pCommandTarget,
+        [in] IOleInPlaceFrame *pFrame,
+        [in] IOleInPlaceUIWindow *pDoc);
+
+    HRESULT HideUI();
+
+    HRESULT UpdateUI();
+
+    HRESULT EnableModeless([in] BOOL fEnable);
+
+    HRESULT OnDocWindowActivate([in] BOOL fActivate);
+
+    HRESULT OnFrameWindowActivate([in] BOOL fActivate);
+
+    HRESULT ResizeBorder(
+        [in] LPCRECT prcBorder,
+        [in] IOleInPlaceUIWindow *pUIWindow,
+        [in] BOOL fRameWindow);
+
+    HRESULT TranslateAccelerator(
+        [in] LPMSG lpMsg,
+        [in] const GUID *pguidCmdGroup, 
+        [in] DWORD nCmdID);
+
+    HRESULT GetOptionKeyPath(
+        [out] LPOLESTR *pchKey,
+        [in] DWORD dw);
+
+    HRESULT GetDropTarget(
+        [in] IDropTarget *pDropTarget, 
+        [out] IDropTarget **ppDropTarget);
+
+    HRESULT GetExternal([out] IDispatch **ppDispatch);
+
+    HRESULT TranslateUrl(
+        [in] DWORD dwTranslate,
+        [in] OLECHAR *pchURLIn,
+        [out] OLECHAR **ppchURLOut);
+
+    HRESULT FilterDataObject(
+        [in] IDataObject *pDO,
+        [out] IDataObject **ppDORet);
+}
+
+cpp_quote("DEFINE_GUID(CGID_DocHostCommandHandler,0xf38bc242,0xb950,0x11d1,0x89,0x18,0x00,0xc0,0x4f,0xc2,0xc8,0x36);")
+
+[
+    object,
+    uuid(3050F6D0-98b5-11CF-BB82-00AA00BDCE0B),
+    pointer_default(unique),
+    local
+]
+interface IDocHostUIHandler2 : IDocHostUIHandler
+{
+    HRESULT GetOverrideKeyPath(
+        [out] LPOLESTR *pchKey,
+        [in] DWORD dw);
+}
+
+/*****************************************************************************
+ *    ICustomDoc interface
+ */
+[
+    object,
+    uuid(3050f3f0-98b5-11cf-bb82-00aa00bdce0b),
+    pointer_default(unique),
+    local
+]
+interface ICustomDoc : IUnknown
+{
+    HRESULT SetUIHandler([in] IDocHostUIHandler *pUIHandler);
+}
+
+/*****************************************************************************
+ *    IDocHostShowUI interface
+ */
+[
+    object,
+    uuid(c4d244b0-d43e-11cf-893b-00aa00bdce1a),
+    pointer_default(unique),
+    local
+]
+interface IDocHostShowUI : IUnknown
+{
+    HRESULT ShowMessage(
+        [in] HWND hwnd,
+        [in] LPOLESTR lpstrText,
+        [in] LPOLESTR lpstrCaption,
+        [in] DWORD dwType,
+        [in] LPOLESTR lpstrHelpFile,
+        [in] DWORD dwHelpContext,
+        [out] LRESULT *plResult);
+
+    HRESULT ShowHelp(
+        [in] HWND hwnd,
+        [in] LPOLESTR pszHelpFile,
+        [in] UINT uCommand,
+        [in] DWORD dwData,
+        [in] POINT ptMouse,
+        [out] IDispatch *pDispatchObjectHit);
+}
+
+/*****************************************************************************
+ *    IClassFactoryEx interface
+ */
+
+cpp_quote("#define IClassFactory3 IClassFactoryEx")
+cpp_quote("#define IID_IClassFactory3 IID_IClassFactoryEx")
+
+[
+    object,
+    uuid(342D1EA0-AE25-11D1-89C5-006008C3FBFC),
+    pointer_default(unique),
+    local
+]
+interface IClassFactoryEx : IClassFactory
+{
+    HRESULT CreateInstanceWithContext(
+        IUnknown *punkContext,
+        IUnknown *punkOuter,
+        REFIID riid,
+        [out] void **ppv);
+}
+
+cpp_quote("typedef HRESULT WINAPI SHOWHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("typedef HRESULT WINAPI SHOWHTMLDIALOGEXFN(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("typedef HRESULT WINAPI SHOWMODELESSHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);")
+
+cpp_quote("EXTERN_C HRESULT WINAPI ShowHTMLDialog(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("EXTERN_C HRESULT WINAPI ShowHTMLDialogEx(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("EXTERN_C HRESULT WINAPI ShowModelessHTMLDialog(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);")
+cpp_quote("EXTERN_C HRESULT WINAPI RunHTMLApplication(HINSTANCE,HINSTANCE,LPSTR,int);")
+cpp_quote("EXTERN_C HRESULT WINAPI CreateHTMLPropertyPage(IMoniker*,IPropertyPage**);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl
new file mode 100644
index 0000000..913755d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl
@@ -0,0 +1,18564 @@
+/*
+ * Copyright 2004-2010 Jacek Caban for CodeWeavers
+ * Copyright 2008      Konstantin Kondratyuk (Etersoft)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <mshtmdid.h>
+#include <mshtmcid.h>
+#include <olectl.h>
+
+import "ocidl.idl";
+import "dimm.idl";
+import "shtypes.idl";
+import "dispex.idl";
+
+cpp_quote("#include <olectl.h>")
+
+cpp_quote("DEFINE_GUID(SID_SEditCommandTarget,  0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
+cpp_quote("DEFINE_GUID(SID_SHTMLEditHost,       0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
+cpp_quote("DEFINE_GUID(SID_SHTMLEditServices,   0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
+cpp_quote("#define SID_SHTMLWindow IID_IHTMLWindow2")
+cpp_quote("#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef FindText")
+cpp_quote("#endif")
+
+typedef enum {
+    POINTER_GRAVITY_Left,
+    POINTER_GRAVITY_Right,
+    POINTER_GRAVITY_Max = 2147483647
+} POINTER_GRAVITY;
+
+typedef enum {
+    CONTEXT_TYPE_None,
+    CONTEXT_TYPE_Text,
+    CONTEXT_TYPE_EnterScope,
+    CONTEXT_TYPE_ExitScope,
+    CONTEXT_TYPE_NoScope,
+    MARKUP_CONTEXT_TYPE_Max = 2147483647
+} MARKUP_CONTEXT_TYPE;
+
+typedef enum {
+    ELEM_ADJ_BeforeBegin,
+    ELEM_ADJ_AfterBegin,
+    ELEM_ADJ_BeforeEnd,
+    ELEM_ADJ_AfterEnd,
+    ELEMENT_ADJACENCY_Max = 2147483647
+} ELEMENT_ADJACENCY;
+
+typedef enum {
+    MOVEUNIT_PREVCHAR,
+    MOVEUNIT_NEXTCHAR,
+    MOVEUNIT_PREVCLUSTERBEG,
+    MOVEUNIT_NEXTCLUSTERBEG,
+    MOVEUNIT_PREVCLUSTEREND,
+    MOVEUNIT_NEXTCLUSTEREND,
+    MOVEUNIT_PREVWORDBEG,
+    MOVEUNIT_NEXTWORDBEG,
+    MOVEUNIT_PREVWORDEND,
+    MOVEUNIT_NEXTWORDEND,
+    MOVEUNIT_PREVPROOFWORD,
+    MOVEUNIT_NEXTPROOFWORD,
+    MOVEUNIT_NEXTURLBEG,
+    MOVEUNIT_PREVURLBEG,
+    MOVEUNIT_NEXTURLEND,
+    MOVEUNIT_PREVURLEND,
+    MOVEUNIT_PREVSENTENCE,
+    MOVEUNIT_NEXTSENTENCE,
+    MOVEUNIT_PREVBLOCK,
+    MOVEUNIT_NEXTBLOCK,
+    MOVEUNIT_ACTION_Max = 2147483647
+} MOVEUNIT_ACTION;
+
+typedef enum _SELECTION_TYPE {
+    SELECTION_TYPE_None,
+    SELECTION_TYPE_Caret,
+    SELECTION_TYPE_Text,
+    SELECTION_TYPE_Control,
+    SELECTION_TYPE_Max = 2147483647
+} SELECTION_TYPE;
+
+[
+    version(4.0),
+    uuid(3050F1C5-98B5-11CF-BB82-00AA00BDCE0B)
+]
+library MSHTML
+{
+
+importlib("stdole2.tlb");
+
+typedef enum _DomConstructor {
+    DomConstructorObject                      = 0,
+    DomConstructorAttr                        = 1,
+    DomConstructorBehaviorUrnsCollection      = 2,
+    DomConstructorBookmarkCollection          = 3,
+    DomConstructorCompatibleInfo              = 4,
+    DomConstructorCompatibleInfoCollection    = 5,
+    DomConstructorControlRangeCollection      = 6,
+    DomConstructorCSSCurrentStyleDeclaration  = 7,
+    DomConstructorCSSRuleList                 = 8,
+    DomConstructorCSSRuleStyleDeclaration     = 9,
+    DomConstructorCSSStyleDeclaration         = 10,
+    DomConstructorCSSStyleRule                = 11,
+    DomConstructorCSSStyleSheet               = 12,
+    DomConstructorDataTransfer                = 13,
+    DomConstructorDOMImplementation           = 14,
+    DomConstructorElement                     = 15,
+    DomConstructorEvent                       = 16,
+    DomConstructorHistory                     = 17,
+    DomConstructorHTCElementBehaviorDefaults  = 18,
+    DomConstructorHTMLAnchorElement           = 19,
+    DomConstructorHTMLAreaElement             = 20,
+    DomConstructorHTMLAreasCollection         = 21,
+    DomConstructorHTMLBaseElement             = 22,
+    DomConstructorHTMLBaseFontElement         = 23,
+    DomConstructorHTMLBGSoundElement          = 24,
+    DomConstructorHTMLBlockElement            = 25,
+    DomConstructorHTMLBodyElement             = 26,
+    DomConstructorHTMLBRElement               = 27,
+    DomConstructorHTMLButtonElement           = 28,
+    DomConstructorHTMLCollection              = 29,
+    DomConstructorHTMLCommentElement          = 30,
+    DomConstructorHTMLDDElement               = 31,
+    DomConstructorHTMLDivElement              = 32,
+    DomConstructorHTMLDocument                = 33,
+    DomConstructorHTMLDListElement            = 34,
+    DomConstructorHTMLDTElement               = 35,
+    DomConstructorHTMLEmbedElement            = 36,
+    DomConstructorHTMLFieldSetElement         = 37,
+    DomConstructorHTMLFontElement             = 38,
+    DomConstructorHTMLFormElement             = 39,
+    DomConstructorHTMLFrameElement            = 40,
+    DomConstructorHTMLFrameSetElement         = 41,
+    DomConstructorHTMLGenericElement          = 42,
+    DomConstructorHTMLHeadElement             = 43,
+    DomConstructorHTMLHeadingElement          = 44,
+    DomConstructorHTMLHRElement               = 45,
+    DomConstructorHTMLHtmlElement             = 46,
+    DomConstructorHTMLIFrameElement           = 47,
+    DomConstructorHTMLImageElement            = 48,
+    DomConstructorHTMLInputElement            = 49,
+    DomConstructorHTMLIsIndexElement          = 50,
+    DomConstructorHTMLLabelElement            = 51,
+    DomConstructorHTMLLegendElement           = 52,
+    DomConstructorHTMLLIElement               = 53,
+    DomConstructorHTMLLinkElement             = 54,
+    DomConstructorHTMLMapElement              = 55,
+    DomConstructorHTMLMarqueeElement          = 56,
+    DomConstructorHTMLMetaElement             = 57,
+    DomConstructorHTMLModelessDialog          = 58,
+    DomConstructorHTMLNamespaceInfo           = 59,
+    DomConstructorHTMLNamespaceInfoCollection = 60,
+    DomConstructorHTMLNextIdElement           = 61,
+    DomConstructorHTMLNoShowElement           = 62,
+    DomConstructorHTMLObjectElement           = 63,
+    DomConstructorHTMLOListElement            = 64,
+    DomConstructorHTMLOptionElement           = 65,
+    DomConstructorHTMLParagraphElement        = 66,
+    DomConstructorHTMLParamElement            = 67,
+    DomConstructorHTMLPhraseElement           = 68,
+    DomConstructorHTMLPluginsCollection       = 69,
+    DomConstructorHTMLPopup                   = 70,
+    DomConstructorHTMLScriptElement           = 71,
+    DomConstructorHTMLSelectElement           = 72,
+    DomConstructorHTMLSpanElement             = 73,
+    DomConstructorHTMLStyleElement            = 74,
+    DomConstructorHTMLTableCaptionElement     = 75,
+    DomConstructorHTMLTableCellElement        = 76,
+    DomConstructorHTMLTableColElement         = 77,
+    DomConstructorHTMLTableElement            = 78,
+    DomConstructorHTMLTableRowElement         = 79,
+    DomConstructorHTMLTableSectionElement     = 80,
+    DomConstructorHTMLTextAreaElement         = 81,
+    DomConstructorHTMLTextElement             = 82,
+    DomConstructorHTMLTitleElement            = 83,
+    DomConstructorHTMLUListElement            = 84,
+    DomConstructorHTMLUnknownElement          = 85,
+    DomConstructorImage                       = 86,
+    DomConstructorLocation                    = 87,
+    DomConstructorNamedNodeMap                = 88,
+    DomConstructorNavigator                   = 89,
+    DomConstructorNodeList                    = 90,
+    DomConstructorOption                      = 91,
+    DomConstructorScreen                      = 92,
+    DomConstructorSelection                   = 93,
+    DomConstructorStaticNodeList              = 94,
+    DomConstructorStorage                     = 95,
+    DomConstructorStyleSheetList              = 96,
+    DomConstructorStyleSheetPage              = 97,
+    DomConstructorStyleSheetPageList          = 98,
+    DomConstructorText                        = 99,
+    DomConstructorTextRange                   = 100,
+    DomConstructorTextRangeCollection         = 101,
+    DomConstructorTextRectangle               = 102,
+    DomConstructorTextRectangleList           = 103,
+    DomConstructorWindow                      = 104,
+    DomConstructorXDomainRequest              = 105,
+    DomConstructorXMLHttpRequest              = 106,
+    DomConstructorMax                         = 107,
+    DomConstructor_Max                        = 2147483647L
+} DomConstructor;
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051049b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMConstructor : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    HRESULT constructor([retval, out] IDispatch* * p);
+
+    HRESULT LookupGetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);
+
+    HRESULT LookupSetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);
+
+    HRESULT DefineGetter([in] BSTR propname, [in] VARIANT* pdispHandler);
+
+    HRESULT DefineSetter([in] BSTR propname, [in] VARIANT* pdispHandler);
+}
+
+#define WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL                     \
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]       \
+    IDispatch *constructor()
+
+interface IHTMLDocument2;
+interface IHTMLElement2;
+interface IHTMLStyleSheetsCollection;
+interface IHTMLFrameBase;
+interface IHTMLStorage;
+interface IDOMEvent;
+
+/*****************************************************************************
+ *    IHTMLFiltersCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F3EE-98B5-11Cf-BB82-00AA00BDCE0B)
+]
+interface IHTMLFiltersCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLFILTERSCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLFILTERSCOLLECTION__NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLFILTERSCOLLECTION_ITEM)]
+    HRESULT item(
+        [in] VARIANT *pvarIndex,
+        [retval, out] VARIANT *pvarResult);
+}
+
+/*****************************************************************************
+ *    IHTMLStyle interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F25E-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyle : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
+    HRESULT fontFamily([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
+    HRESULT fontFamily([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
+    HRESULT fontStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
+    HRESULT fontStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
+    HRESULT fontVariant([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
+    HRESULT fontVariant([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
+    HRESULT fontWeight([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
+    HRESULT fontWeight([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
+    HRESULT fontSize([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
+    HRESULT fontSize([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
+    HRESULT font([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
+    HRESULT font([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
+    HRESULT color([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
+    HRESULT color([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
+    HRESULT background([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
+    HRESULT background([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+    HRESULT backgroundColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+    HRESULT backgroundColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+    HRESULT backgroundImage([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+    HRESULT backgroundImage([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+    HRESULT backgroundRepeat([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+    HRESULT backgroundRepeat([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+    HRESULT backgroundAttachment([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+    HRESULT backgroundAttachment([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+    HRESULT backgroundPosition([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+    HRESULT backgroundPosition([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+    HRESULT backgroundPositionX([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+    HRESULT backgroundPositionX([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+    HRESULT backgroundPositionY([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+    HRESULT backgroundPositionY([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
+    HRESULT wordSpacing([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
+    HRESULT wordSpacing([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
+    HRESULT letterSpacing([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
+    HRESULT letterSpacing([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
+    HRESULT textDecoration([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
+    HRESULT textDecoration([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+    HRESULT textDecorationNone([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+    HRESULT textDecorationOverline([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+    HRESULT textDecorationBlink([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
+    HRESULT verticalAlign([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
+    HRESULT verticalAlign([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
+    HRESULT textTransform([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
+    HRESULT textTransform([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
+    HRESULT textAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
+    HRESULT textAlign([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
+    HRESULT textIndent([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
+    HRESULT textIndent([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
+    HRESULT lineHeight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
+    HRESULT lineHeight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
+    HRESULT marginTop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
+    HRESULT marginTop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
+    HRESULT marginRight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
+    HRESULT marginRight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
+    HRESULT marginBottom([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
+    HRESULT marginBottom([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
+    HRESULT marginLeft([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
+    HRESULT marginLeft([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
+    HRESULT margin([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
+    HRESULT margin([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
+    HRESULT paddingTop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
+    HRESULT paddingTop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
+    HRESULT paddingRight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
+    HRESULT paddingRight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
+    HRESULT paddingBottom([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
+    HRESULT paddingBottom([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
+    HRESULT paddingLeft([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
+    HRESULT paddingLeft([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
+    HRESULT padding([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
+    HRESULT padding([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
+    HRESULT border([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
+    HRESULT border([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
+    HRESULT borderTop([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
+    HRESULT borderTop([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
+    HRESULT borderRight([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
+    HRESULT borderRight([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
+    HRESULT borderBottom([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
+    HRESULT borderBottom([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
+    HRESULT borderLeft([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
+    HRESULT borderLeft([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
+    HRESULT borderColor([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
+    HRESULT borderColor([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
+    HRESULT borderTopColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
+    HRESULT borderTopColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+    HRESULT borderRightColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+    HRESULT borderRightColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+    HRESULT borderBottomColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+    HRESULT borderBottomColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+    HRESULT borderLeftColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+    HRESULT borderLeftColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
+    HRESULT borderWidth([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
+    HRESULT borderWidth([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
+    HRESULT borderTopWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
+    HRESULT borderTopWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+    HRESULT borderRightWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+    HRESULT borderRightWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+    HRESULT borderBottomWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+    HRESULT borderBottomWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+    HRESULT borderLeftWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+    HRESULT borderLeftWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
+    HRESULT borderStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
+    HRESULT borderStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
+    HRESULT borderTopStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
+    HRESULT borderTopStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+    HRESULT borderRightStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+    HRESULT borderRightStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+    HRESULT borderBottomStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+    HRESULT borderBottomStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+    HRESULT borderLeftStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+    HRESULT borderLeftStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
+    HRESULT height([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
+    HRESULT styleFloat([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
+    HRESULT styleFloat([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
+    HRESULT clear([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
+    HRESULT clear([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
+    HRESULT display([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
+    HRESULT display([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
+    HRESULT visibility([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
+    HRESULT visibility([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
+    HRESULT listStyleType([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
+    HRESULT listStyleType([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+    HRESULT listStylePosition([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+    HRESULT listStylePosition([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+    HRESULT listStyleImage([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+    HRESULT listStyleImage([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
+    HRESULT listStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
+    HRESULT listStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
+    HRESULT whiteSpace([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
+    HRESULT whiteSpace([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
+    HRESULT top([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
+    HRESULT top([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
+    HRESULT left([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
+    HRESULT left([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSITION), bindable, displaybind]
+    HRESULT position([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
+    HRESULT zIndex([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
+    HRESULT zIndex([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
+    HRESULT overflow([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
+    HRESULT overflow([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+    HRESULT pageBreakBefore([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+    HRESULT pageBreakBefore([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
+    HRESULT pageBreakAfter([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
+    HRESULT pageBreakAfter([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
+    HRESULT cssText([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
+    HRESULT cssText([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
+    HRESULT pixelTop([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
+    HRESULT pixelTop([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
+    HRESULT pixelLeft([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
+    HRESULT pixelLeft([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
+    HRESULT pixelWidth([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
+    HRESULT pixelWidth([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
+    HRESULT pixelHeight([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
+    HRESULT pixelHeight([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
+    HRESULT posTop([in] float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
+    HRESULT posTop([retval, out] float *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
+    HRESULT posLeft([in] float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
+    HRESULT posLeft([retval, out] float *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
+    HRESULT posWidth([in] float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
+    HRESULT posWidth([retval, out] float *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
+    HRESULT posHeight([in] float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
+    HRESULT posHeight([retval, out] float *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
+    HRESULT cursor([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
+    HRESULT cursor([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
+    HRESULT clip([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
+    HRESULT clip([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
+    HRESULT filter([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
+    HRESULT filter([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR strAttributeName,
+        [in] VARIANT AttributeValue,
+        [defaultvalue(1), in] LONG lFlags);
+
+    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(0), in] LONG lFlags,
+        [retval, out] VARIANT *AttributeValue);
+
+    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(1), in]
+        LONG lFlags,
+        [retval, out] VARIANT_BOOL *pfSuccess);
+
+    [id(DISPID_IHTMLSTYLE_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+}
+
+/*****************************************************************************
+ *    IHTMLStyle2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4a2-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+    HRESULT tableLayout([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+    HRESULT tableLayout([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+    HRESULT borderCollapse([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+    HRESULT borderCollapse([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+    HRESULT direction([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+    HRESULT direction([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+    HRESULT behavior([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+    HRESULT behavior([out, retval] BSTR *p);
+
+    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
+    HRESULT setExpression(
+            [in] BSTR propname,
+            [in] BSTR expression,
+            [in, defaultvalue("")] BSTR language);
+
+    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
+    HRESULT getExpression(
+            [in] BSTR propname,
+            [out, retval] VARIANT *expression);
+
+    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
+    HRESULT removeExpression(
+            [in] BSTR propname,
+            [out, retval] VARIANT_BOOL *pfSuccess);
+
+    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+    HRESULT position([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+    HRESULT position([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+    HRESULT unicodeBidi([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+    HRESULT unicodeBidi([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+    HRESULT bottom([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+    HRESULT bottom([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+    HRESULT right([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+    HRESULT right([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+    HRESULT pixelBottom([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+    HRESULT pixelBottom([out, retval] LONG *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+    HRESULT pixelRight([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+    HRESULT pixelRight([out, retval] LONG *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+    HRESULT posBottom([in] float v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+    HRESULT posBottom([out, retval] float *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+    HRESULT posRight([in] float v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+    HRESULT posRight([out, retval] float *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+    HRESULT imeMode([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+    HRESULT imeMode([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+    HRESULT rubyAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+    HRESULT rubyAlign([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+    HRESULT rubyPosition([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+    HRESULT rubyPosition([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+    HRESULT rubyOverhang([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+    HRESULT rubyOverhang([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+    HRESULT layoutGridChar([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+    HRESULT layoutGridChar([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+    HRESULT layoutGridLine([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+    HRESULT layoutGridLine([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+    HRESULT layoutGridMode([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+    HRESULT layoutGridMode([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+    HRESULT layoutGridType([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+    HRESULT layoutGridType([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+    HRESULT layoutGrid([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+    HRESULT layoutGrid([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+    HRESULT wordBreak([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+    HRESULT wordBreak([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+    HRESULT lineBreak([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+    HRESULT lineBreak([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+    HRESULT textJustify([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+    HRESULT textJustify([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+    HRESULT textJustifyTrim([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+    HRESULT textJustifyTrim([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+    HRESULT textKashida([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+    HRESULT textKashida([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+    HRESULT textAutospace([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+    HRESULT textAutospace([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+    HRESULT overflowX([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+    HRESULT overflowX([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+    HRESULT overflowY([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+    HRESULT overflowY([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+    HRESULT accelerator([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+    HRESULT accelerator([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLRuleStyle interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLRuleStyle : IDispatch
+{
+    [propput, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
+    HRESULT fontFamily([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
+    HRESULT fontFamily([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
+    HRESULT fontStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
+    HRESULT fontStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
+    HRESULT fontVariant([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
+    HRESULT fontVariant([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
+    HRESULT fontWeight([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
+    HRESULT fontWeight([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
+    HRESULT fontSize([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
+    HRESULT fontSize([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
+    HRESULT font([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
+    HRESULT font([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
+    HRESULT color([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
+    HRESULT color([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
+    HRESULT background([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
+    HRESULT background([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+    HRESULT backgroundColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+    HRESULT backgroundColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+    HRESULT backgroundImage([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+    HRESULT backgroundImage([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+    HRESULT backgroundRepeat([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+    HRESULT backgroundRepeat([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+    HRESULT backgroundAttachment([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+    HRESULT backgroundAttachment([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+    HRESULT backgroundPosition([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+    HRESULT backgroundPosition([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+    HRESULT backgroundPositionX([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+    HRESULT backgroundPositionX([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+    HRESULT backgroundPositionY([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+    HRESULT backgroundPositionY([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
+    HRESULT wordSpacing([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
+    HRESULT wordSpacing([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
+    HRESULT letterSpacing([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
+    HRESULT letterSpacing([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
+    HRESULT textDecoration([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
+    HRESULT textDecoration([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+    HRESULT textDecorationNone([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+    HRESULT textDecorationOverline([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+    HRESULT textDecorationBlink([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
+    HRESULT verticalAlign([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
+    HRESULT verticalAlign([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
+    HRESULT textTransform([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
+    HRESULT textTransform([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
+    HRESULT textAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
+    HRESULT textAlign([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
+    HRESULT textIndent([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
+    HRESULT textIndent([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
+    HRESULT lineHeight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
+    HRESULT lineHeight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
+    HRESULT marginTop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
+    HRESULT marginTop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
+    HRESULT marginRight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
+    HRESULT marginRight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
+    HRESULT marginBottom([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
+    HRESULT marginBottom([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
+    HRESULT marginLeft([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
+    HRESULT marginLeft([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
+    HRESULT margin([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
+    HRESULT margin([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
+    HRESULT paddingTop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
+    HRESULT paddingTop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
+    HRESULT paddingRight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
+    HRESULT paddingRight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
+    HRESULT paddingBottom([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
+    HRESULT paddingBottom([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
+    HRESULT paddingLeft([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
+    HRESULT paddingLeft([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
+    HRESULT padding([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
+    HRESULT padding([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
+    HRESULT border([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
+    HRESULT border([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
+    HRESULT borderTop([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
+    HRESULT borderTop([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
+    HRESULT borderRight([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
+    HRESULT borderRight([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
+    HRESULT borderBottom([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
+    HRESULT borderBottom([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
+    HRESULT borderLeft([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
+    HRESULT borderLeft([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
+    HRESULT borderColor([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
+    HRESULT borderColor([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
+    HRESULT borderTopColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
+    HRESULT borderTopColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+    HRESULT borderRightColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+    HRESULT borderRightColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+    HRESULT borderBottomColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+    HRESULT borderBottomColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+    HRESULT borderLeftColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+    HRESULT borderLeftColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
+    HRESULT borderWidth([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
+    HRESULT borderWidth([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
+    HRESULT borderTopWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
+    HRESULT borderTopWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+    HRESULT borderRightWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+    HRESULT borderRightWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+    HRESULT borderBottomWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+    HRESULT borderBottomWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+    HRESULT borderLeftWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+    HRESULT borderLeftWidth([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
+    HRESULT borderStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
+    HRESULT borderStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
+    HRESULT borderTopStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
+    HRESULT borderTopStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+    HRESULT borderRightStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+    HRESULT borderRightStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+    HRESULT borderBottomStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+    HRESULT borderBottomStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+    HRESULT borderLeftStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+    HRESULT borderLeftStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
+    HRESULT height([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
+    HRESULT styleFloat([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
+    HRESULT styleFloat([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
+    HRESULT clear([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
+    HRESULT clear([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
+    HRESULT display([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
+    HRESULT display([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
+    HRESULT visibility([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
+    HRESULT visibility([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
+    HRESULT listStyleType([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
+    HRESULT listStyleType([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+    HRESULT listStylePosition([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+    HRESULT listStylePosition([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+    HRESULT listStyleImage([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+    HRESULT listStyleImage([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
+    HRESULT listStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
+    HRESULT listStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
+    HRESULT whiteSpace([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
+    HRESULT whiteSpace([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
+    HRESULT top([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
+    HRESULT top([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
+    HRESULT left([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
+    HRESULT left([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_POSITION), bindable, displaybind]
+    HRESULT position([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
+    HRESULT zIndex([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
+    HRESULT zIndex([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
+    HRESULT overflow([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
+    HRESULT overflow([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+    HRESULT pageBreakBefore([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+    HRESULT pageBreakBefore([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
+    HRESULT pageBreakAfter([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
+    HRESULT pageBreakAfter([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
+    HRESULT cssText([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
+    HRESULT cssText([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
+    HRESULT cursor([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
+    HRESULT cursor([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
+    HRESULT clip([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
+    HRESULT clip([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
+    HRESULT filter([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
+    HRESULT filter([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLRULESTYLE_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR strAttributeName,
+        [in] VARIANT AttributeValue,
+        [defaultvalue(1), in] LONG lFlags);
+
+    [id(DISPID_IHTMLRULESTYLE_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(0), in] LONG lFlags,
+        [retval, out] VARIANT *AttributeValue);
+
+    [id(DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(1), in] LONG lFlags,
+        [retval, out] VARIANT_BOOL *pfSuccess);
+}
+
+/*****************************************************************************
+ *    DispHTMLStyle dispinterface
+ */
+[
+    hidden,
+    uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyle
+{
+properties:
+methods:
+    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
+    void fontFamily(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
+    BSTR fontFamily();
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
+    void fontStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
+    BSTR fontStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
+    void fontVariant(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
+    BSTR fontVariant();
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
+    void fontWeight(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
+    BSTR fontWeight();
+
+    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
+    void fontSize(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
+    VARIANT fontSize();
+
+    [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
+    void font(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
+    BSTR font();
+
+    [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
+    void color(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
+    VARIANT color();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
+    void background(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
+    BSTR background();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+    void backgroundColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+    VARIANT backgroundColor();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+    void backgroundImage(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+    BSTR backgroundImage();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+    void backgroundRepeat(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+    BSTR backgroundRepeat();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+    void backgroundAttachment(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+    BSTR backgroundAttachment();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
+    void backgroundPosition(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
+    BSTR backgroundPosition();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+    void backgroundPositionX(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+    VARIANT backgroundPositionX();
+
+    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+    void backgroundPositionY(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+    VARIANT backgroundPositionY();
+
+    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
+    void wordSpacing(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
+    VARIANT wordSpacing();
+
+    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
+    void letterSpacing(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
+    VARIANT letterSpacing();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
+    void textDecoration(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
+    BSTR textDecoration();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
+    void textDecorationNone(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
+    VARIANT_BOOL textDecorationNone();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
+    void textDecorationUnderline(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
+    VARIANT_BOOL textDecorationUnderline();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
+    void textDecorationOverline(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
+    VARIANT_BOOL textDecorationOverline();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
+    void textDecorationLineThrough(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
+    VARIANT_BOOL textDecorationLineThrough();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
+    void textDecorationBlink(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
+    VARIANT_BOOL textDecorationBlink();
+
+    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
+    void verticalAlign(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
+    VARIANT verticalAlign();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
+    void textTransform(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
+    BSTR textTransform();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
+    void textAlign(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
+    BSTR textAlign();
+
+    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
+    void textIndent(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
+    VARIANT textIndent();
+
+    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
+    void lineHeight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
+    VARIANT lineHeight();
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
+    void marginTop(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
+    VARIANT marginTop();
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
+    void marginRight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
+    VARIANT marginRight();
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
+    void marginBottom(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
+    VARIANT marginBottom();
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
+    void marginLeft(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
+    VARIANT marginLeft();
+
+    [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
+    void margin(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
+    BSTR margin();
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
+    void paddingTop(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
+    VARIANT paddingTop();
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
+    void paddingRight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
+    VARIANT paddingRight();
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
+    void paddingBottom(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
+    VARIANT paddingBottom();
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
+    void paddingLeft(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
+    VARIANT paddingLeft();
+
+    [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
+    void padding(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
+    BSTR padding();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
+    void border(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
+    BSTR border();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
+    void borderTop(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
+    BSTR borderTop();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
+    void borderRight(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
+    BSTR borderRight();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
+    void borderBottom(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
+    BSTR borderBottom();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
+    void borderLeft(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
+    BSTR borderLeft();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
+    void borderColor(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
+    BSTR borderColor();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+    void borderTopColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+    VARIANT borderTopColor();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+    void borderRightColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+    VARIANT borderRightColor();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+    void borderBottomColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+    VARIANT borderBottomColor();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+    void borderLeftColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+    VARIANT borderLeftColor();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
+    void borderWidth(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
+    BSTR borderWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+    void borderTopWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+    VARIANT borderTopWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+    void borderRightWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+    VARIANT borderRightWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+    void borderBottomWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+    VARIANT borderBottomWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+    void borderLeftWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+    VARIANT borderLeftWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
+    void borderStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
+    BSTR borderStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+    void borderTopStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+    BSTR borderTopStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+    void borderRightStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+    BSTR borderRightStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+    void borderBottomStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+    BSTR borderBottomStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+    void borderLeftStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+    BSTR borderLeftStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
+    VARIANT width();
+
+    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
+    void styleFloat(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
+    BSTR styleFloat();
+
+    [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
+    void clear(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
+    BSTR clear();
+
+    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
+    void display(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
+    BSTR display();
+
+    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
+    void visibility(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
+    BSTR visibility();
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
+    void listStyleType(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
+    BSTR listStyleType();
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+    void listStylePosition(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+    BSTR listStylePosition();
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+    void listStyleImage(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+    BSTR listStyleImage();
+
+    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
+    void listStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
+    BSTR listStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
+    void whiteSpace(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
+    BSTR whiteSpace();
+
+    [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
+    void top(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
+    VARIANT top();
+
+    [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
+    void left(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
+    VARIANT left();
+
+    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
+    void zIndex(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
+    VARIANT zIndex();
+
+    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
+    void overflow(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
+    BSTR overflow();
+
+    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+    void pageBreakBefore(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+    BSTR pageBreakBefore();
+
+    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+    void pageBreakAfter(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+    BSTR pageBreakAfter();
+
+    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
+    void cssText(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
+    BSTR cssText();
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
+    void pixelTop(LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
+    LONG pixelTop();
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
+    void pixelLeft(LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
+    LONG pixelLeft();
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
+    void pixelWidth(LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
+    LONG pixelWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
+    void pixelHeight(LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
+    LONG pixelHeight();
+
+    [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
+    void posTop(float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
+    float posTop();
+
+    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
+    void posLeft(float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
+    float posLeft();
+
+    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
+    void posWidth(float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
+    float posWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
+    void posHeight(float v);
+
+    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
+    float posHeight();
+
+    [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
+    void cursor(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
+    BSTR cursor();
+
+    [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
+    void clip(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
+    BSTR clip();
+
+    [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
+    void filter(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
+    BSTR filter();
+
+    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
+    void setAttribute(
+            [in] BSTR strAttributeName,
+            [in] VARIANT AttributeValue,
+            [in, defaultvalue(1)] LONG lFlags);
+
+    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
+    VARIANT getAttribute(
+            [in] BSTR strAttributeName,
+            [in, defaultvalue(0)] LONG lFlags);
+
+    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
+    VARIANT_BOOL removeAttribute(
+            [in] BSTR strAttributeName,
+            [in, defaultvalue(1)] LONG lFlags);
+
+    [id(DISPID_IHTMLSTYLE_TOSTRING)]
+    BSTR toString();
+
+    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+    void tableLayout(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+    BSTR tableLayout();
+
+    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+    void borderCollapse(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+    BSTR borderCollapse();
+
+    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+    void direction(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+    BSTR direction();
+
+    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+    void behavior(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+    BSTR behavior();
+
+    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
+    void setExpression(
+            [in] BSTR propname,
+            [in] BSTR expression,
+            [in, defaultvalue("")] BSTR language);
+
+    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
+    VARIANT getExpression([in] BSTR propname);
+
+    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
+    VARIANT_BOOL removeExpression([in] BSTR propname);
+
+    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+    void position(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+    BSTR position();
+
+    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+    void unicodeBidi(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+    BSTR unicodeBidi();
+
+    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+    void bottom(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+    VARIANT bottom();
+
+    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+    void right(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+    VARIANT right();
+
+    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+    void pixelBottom(LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+    LONG pixelBottom();
+
+    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+    void pixelRight(LONG v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+    LONG pixelRight();
+
+    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+    void posBottom(float v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+    float posBottom();
+
+    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+    void posRight(float v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+    float posRight();
+
+    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+    void imeMode(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+    BSTR imeMode();
+
+    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+    void rubyAlign(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+    BSTR rubyAlign();
+
+    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+    void rubyPosition(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+    BSTR rubyPosition();
+
+    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+    void rubyOverhang(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+    BSTR rubyOverhang();
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+    void layoutGridChar(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+    VARIANT layoutGridChar();
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+    void layoutGridLine(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+    VARIANT layoutGridLine();
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+    void layoutGridMode(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+    BSTR layoutGridMode();
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+    void layoutGridType(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+    BSTR layoutGridType();
+
+    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+    void layoutGrid(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+    BSTR layoutGrid();
+
+    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+    void wordBreak(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+    BSTR wordBreak();
+
+    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+    void lineBreak(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+    BSTR lineBreak();
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+    void textJustify(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+    BSTR textJustify();
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+    void textJustifyTrim(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+    BSTR textJustifyTrim();
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+    void textKashida(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+    VARIANT textKashida();
+
+    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+    void textAutospace(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+    BSTR textAutospace();
+
+    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+    void overflowX(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+    BSTR overflowX();
+
+    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+    void overflowY(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+    BSTR overflowY();
+
+    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+    void accelerator(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+    BSTR accelerator();
+
+    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+    void layoutFlow(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+    BSTR layoutFlow();
+
+    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+    void zoom(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+    VARIANT zoom();
+
+    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+    void wordWrap(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+    BSTR wordWrap();
+
+    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+    void textUnderlinePosition(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+    BSTR textUnderlinePosition();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+    void scrollbarBaseColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+    VARIANT scrollbarBaseColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+    void scrollbarFaceColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+    VARIANT scrollbarFaceColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+    void scrollbar3dLightColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+    VARIANT scrollbar3dLightColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+    void scrollbarShadowColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+    VARIANT scrollbarShadowColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+    void scrollbarHighlightColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+    VARIANT scrollbarHighlightColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+    void scrollbarDarkShadowColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+    VARIANT scrollbarDarkShadowColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+    void scrollbarArrowColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+    VARIANT scrollbarArrowColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+    void scrollbarTrackColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+    VARIANT scrollbarTrackColor();
+
+    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+    void writingMode(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+    BSTR writingMode();
+
+    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+    void textAlignLast(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+    BSTR textAlignLast();
+
+    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+    void textKashidaSpace(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+    VARIANT textKashidaSpace();
+
+    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+    void textOverflow(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+    BSTR textOverflow();
+
+    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+    void minHeight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+    VARIANT minHeight();
+
+    [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+    void msInterpolationMode(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+    BSTR msInterpolationMode();
+
+    [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+    void maxHeight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+    VARIANT maxHeight();
+
+    [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+    void minWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+    VARIANT minWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+    void maxWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+    VARIANT maxWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+    void content(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+    BSTR content();
+
+    [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+    void captionSide(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+    BSTR captionSide();
+
+    [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+    void counterIncrement(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+    BSTR counterIncrement();
+
+    [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+    void counterReset(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+    BSTR counterReset();
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+    void outline(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+    BSTR outline();
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+    void outlineWidth(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+    VARIANT outlineWidth();
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+    void outlineStyle(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+    BSTR outlineStyle();
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+    void outlineColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+    VARIANT outlineColor();
+
+    [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+    void boxSizing(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+    BSTR boxSizing();
+
+    [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+    void borderSpacing(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+    BSTR borderSpacing();
+
+    [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+    void orphans(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+    VARIANT orphans();
+
+    [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+    void widows(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+    VARIANT widows();
+
+    [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+    void pageBreakInside(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+    BSTR pageBreakInside();
+
+    [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+    void emptyCells(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+    BSTR emptyCells();
+
+    [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+    void msBlockProgression(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+    BSTR msBlockProgression();
+
+    [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+    void quotes(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+    BSTR quotes();
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f656-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle3 : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+    HRESULT layoutFlow([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+    HRESULT layoutFlow([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+    HRESULT zoom([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+    HRESULT zoom([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+    HRESULT wordWrap([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+    HRESULT wordWrap([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+    HRESULT textUnderlinePosition([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+    HRESULT textUnderlinePosition([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+    HRESULT scrollbarBaseColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+    HRESULT scrollbarBaseColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+    HRESULT scrollbarFaceColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+    HRESULT scrollbarFaceColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+    HRESULT scrollbar3dLightColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+    HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+    HRESULT scrollbarShadowColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+    HRESULT scrollbarShadowColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+    HRESULT scrollbarHighlightColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+    HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+    HRESULT scrollbarDarkShadowColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+    HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+    HRESULT scrollbarArrowColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+    HRESULT scrollbarArrowColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+    HRESULT scrollbarTrackColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+    HRESULT scrollbarTrackColor([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+    HRESULT writingMode([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+    HRESULT writingMode([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+    HRESULT textAlignLast([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+    HRESULT textAlignLast([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+    HRESULT textKashidaSpace([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+    HRESULT textKashidaSpace([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ *    IHTMLSytyle4 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f816-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle4 : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+    HRESULT textOverflow([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+    HRESULT textOverflow([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+    HRESULT minHeight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+    HRESULT minHeight([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ *    IHTMLSytyle5 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f33a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle5 : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+    HRESULT msInterpolationMode([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+    HRESULT msInterpolationMode([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+    HRESULT maxHeight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+    HRESULT maxHeight([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+    HRESULT minWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+    HRESULT minWidth([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+    HRESULT maxWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+    HRESULT maxWidth([out, retval] VARIANT *p);
+}
+
+/*****************************************************************************
+ *    IHTMLSytyle6 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510480-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle6 : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+    HRESULT content([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+    HRESULT content([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+    HRESULT captionSide([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+    HRESULT captionSide([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+    HRESULT counterIncrement([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+    HRESULT counterIncrement([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+    HRESULT counterReset([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+    HRESULT counterReset([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+    HRESULT outline([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+    HRESULT outline([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+    HRESULT outlineWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+    HRESULT outlineWidth([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+    HRESULT outlineStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+    HRESULT outlineStyle([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+    HRESULT outlineColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+    HRESULT outlineColor([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+    HRESULT boxSizing([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+    HRESULT boxSizing([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+    HRESULT borderSpacing([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+    HRESULT borderSpacing([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+    HRESULT orphans([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+    HRESULT orphans([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+    HRESULT widows([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+    HRESULT widows([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+    HRESULT pageBreakInside([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+    HRESULT pageBreakInside([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+    HRESULT emptyCells([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+    HRESULT emptyCells([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+    HRESULT msBlockProgression([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+    HRESULT msBlockProgression([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+    HRESULT quotes([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+    HRESULT quotes([out, retval] BSTR *p);
+}
+
+[
+    noncreatable,
+    uuid(3050f285-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyle
+{
+    [default] dispinterface DispHTMLStyle;
+    interface IHTMLStyle;
+    interface IHTMLStyle2;
+    interface IHTMLStyle3;
+    interface IHTMLStyle4;
+    interface IHTMLStyle5;
+    interface IHTMLStyle6;
+}
+
+/*****************************************************************************
+ *    IHTMLRenderStyle interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f6ae-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLRenderStyle : IDispatch
+{
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
+    HRESULT textLineThroughStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
+    HRESULT textLineThroughStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
+    HRESULT textUnderlineStyle([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
+    HRESULT textUnderlineStyle([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
+    HRESULT textEffect([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
+    HRESULT textEffect([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
+    HRESULT textColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
+    HRESULT textColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
+    HRESULT textBackgroundColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
+    HRESULT textBackgroundColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
+    HRESULT textDecorationColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
+    HRESULT textDecorationColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
+    HRESULT renderingPriority([in] LONG v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
+    HRESULT renderingPriority([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
+    HRESULT defaultTextSelection([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
+    HRESULT defaultTextSelection([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
+    HRESULT textDecoration([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
+    HRESULT textDecoration([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLCurrentStyle interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f3db-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle : IDispatch
+{
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
+    HRESULT position([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
+    HRESULT styleFloat([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
+    HRESULT color([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+    HRESULT backgroundColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
+    HRESULT fontFamily([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
+    HRESULT fontStyle([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
+    HRESULT fontVariant([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
+    HRESULT fontWeight([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
+    HRESULT fontSize([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+    HRESULT backgroundImage([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+    HRESULT backgroundPositionX([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+    HRESULT backgroundPositionY([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+    HRESULT backgroundRepeat([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+    HRESULT borderLeftColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+    HRESULT borderTopColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+    HRESULT borderRightColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+    HRESULT borderBottomColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+    HRESULT borderTopStyle([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+    HRESULT borderRightStyle([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+    HRESULT borderBottomStyle([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+    HRESULT borderLeftStyle([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+    HRESULT borderTopWidth([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+    HRESULT borderRightWidth([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+    HRESULT borderBottomWidth([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+    HRESULT borderLeftWidth([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
+    HRESULT left([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
+    HRESULT top([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
+    HRESULT height([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
+    HRESULT paddingLeft([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
+    HRESULT paddingTop([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
+    HRESULT paddingRight([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
+    HRESULT paddingBottom([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
+    HRESULT textAlign([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
+    HRESULT textDecoration([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
+    HRESULT display([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
+    HRESULT visibility([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
+    HRESULT zIndex([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
+    HRESULT letterSpacing([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
+    HRESULT lineHeight([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
+    HRESULT textIndent([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
+    HRESULT verticalAlign([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+    HRESULT backgroundAttachment([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
+    HRESULT marginTop([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
+    HRESULT marginRight([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
+    HRESULT marginBottom([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
+    HRESULT marginLeft([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
+    HRESULT clear([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
+    HRESULT listStyleType([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+    HRESULT listStylePosition([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+    HRESULT listStyleImage([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
+    HRESULT clipTop([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
+    HRESULT clipRight([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
+    HRESULT clipBottom([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
+    HRESULT clipLeft([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
+    HRESULT overflow([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+    HRESULT pageBreakBefore([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+    HRESULT pageBreakAfter([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
+    HRESULT cursor([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
+    HRESULT tableLayout([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
+    HRESULT borderCollapse([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
+    HRESULT direction([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
+    HRESULT behavior([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(0), in] LONG lFlags,
+        [retval, out] VARIANT *AttributeValue);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
+    HRESULT unicodeBidi([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
+    HRESULT right([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
+    HRESULT bottom([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
+    HRESULT imeMode([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
+    HRESULT rubyAlign([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
+    HRESULT rubyPosition([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
+    HRESULT rubyOverhang([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
+    HRESULT textAutospace([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
+    HRESULT lineBreak([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
+    HRESULT wordBreak([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
+    HRESULT textJustify([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
+    HRESULT textJustifyTrim([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
+    HRESULT textKashida([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
+    HRESULT blockDirection([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
+    HRESULT layoutGridChar([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
+    HRESULT layoutGridLine([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
+    HRESULT layoutGridMode([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
+    HRESULT layoutGridType([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
+    HRESULT borderStyle([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
+    HRESULT borderColor([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
+    HRESULT borderWidth([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
+    HRESULT padding([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
+    HRESULT margin([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
+    HRESULT accelerator([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
+    HRESULT overflowX([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
+    HRESULT overflowY([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
+    HRESULT textTransform([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLCurrentStyle2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f658-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
+    HRESULT layoutFlow([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
+    HRESULT wordWrap([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
+    HRESULT textUnderlinePosition([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
+    HRESULT hasLayout([retval, out] VARIANT_BOOL * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
+    HRESULT scrollbarBaseColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
+    HRESULT scrollbarFaceColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+    HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+    HRESULT scrollbarShadowColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+    HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+    HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
+    HRESULT scrollbarArrowColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
+    HRESULT scrollbarTrackColor([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
+    HRESULT writingMode([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
+    HRESULT zoom([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
+    HRESULT filter([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
+    HRESULT textAlignLast([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
+    HRESULT textKashidaSpace([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
+    HRESULT isBlock([retval, out] VARIANT_BOOL * p);
+}
+
+/*****************************************************************************
+ *    IHTMLCurrentStyle3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f818-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle3 : IDispatch
+{
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
+    HRESULT textOverflow([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
+    HRESULT minHeight([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
+    HRESULT wordSpacing([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
+    HRESULT whiteSpace([retval, out] BSTR * p);
+}
+
+/*****************************************************************************
+ *    IHTMLCurrentStyle4 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f33b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle4 : IDispatch
+{
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]
+    HRESULT msInterpolationMode([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]
+    HRESULT maxHeight([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]
+    HRESULT minWidth([retval, out] VARIANT * p);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
+    HRESULT maxWidth([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ *    DispHTMLCurrentStyle dispinterface
+ */
+[
+    hidden,
+    uuid(3050f557-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLCurrentStyle
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
+    BSTR position();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
+    BSTR styleFloat();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
+    VARIANT color();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+    VARIANT backgroundColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
+    BSTR fontFamily();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
+    BSTR fontStyle();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
+    BSTR fontVariant();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
+    VARIANT fontWeight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
+    VARIANT fontSize();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+    BSTR backgroundImage();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+    VARIANT backgroundPositionX();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+    VARIANT backgroundPositionY();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+    BSTR backgroundRepeat();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+    VARIANT borderLeftColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+    VARIANT borderTopColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+    VARIANT borderRightColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+    VARIANT borderBottomColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+    BSTR borderTopStyle();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+    BSTR borderRightStyle();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+    BSTR borderBottomStyle();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+    BSTR borderLeftStyle();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+    VARIANT borderTopWidth();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+    VARIANT borderRightWidth();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+    VARIANT borderBottomWidth();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+    VARIANT borderLeftWidth();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
+    VARIANT left();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
+    VARIANT top();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
+    VARIANT width();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
+    VARIANT height();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
+    VARIANT paddingLeft();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
+    VARIANT paddingTop();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
+    VARIANT paddingRight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
+    VARIANT paddingBottom();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
+    BSTR textAlign();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
+    BSTR textDecoration();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
+    BSTR display();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
+    BSTR visibility();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
+    VARIANT zIndex();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
+    VARIANT letterSpacing();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
+    VARIANT lineHeight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
+    VARIANT textIndent();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
+    VARIANT verticalAlign();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+    BSTR backgroundAttachment();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
+    VARIANT marginTop();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
+    VARIANT marginRight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
+    VARIANT marginBottom();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
+    VARIANT marginLeft();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
+    BSTR clear();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
+    BSTR listStyleType();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+    BSTR listStylePosition();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+    BSTR listStyleImage();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
+    VARIANT clipTop();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
+    VARIANT clipRight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
+    VARIANT clipBottom();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
+    VARIANT clipLeft();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
+    BSTR overflow();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+    BSTR pageBreakBefore();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+    BSTR pageBreakAfter();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
+    BSTR cursor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
+    BSTR tableLayout();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
+    BSTR borderCollapse();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
+    BSTR direction();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
+    BSTR behavior();
+
+    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
+    VARIANT getAttribute(
+            [in] BSTR strAttributeName,
+            [in, defaultvalue(0)] LONG lFlags);
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
+    BSTR unicodeBidi();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
+    VARIANT right();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
+    VARIANT bottom();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
+    BSTR imeMode();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
+    BSTR rubyAlign();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
+    BSTR rubyPosition();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
+    BSTR rubyOverhang();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
+    BSTR textAutospace();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
+    BSTR lineBreak();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
+    BSTR wordBreak();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
+    BSTR textJustify();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
+    BSTR textJustifyTrim();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
+    VARIANT textKashida();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
+    BSTR blockDirection();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
+    VARIANT layoutGridChar();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
+    VARIANT layoutGridLine();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
+    BSTR layoutGridMode();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
+    BSTR layoutGridType();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
+    BSTR borderStyle();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
+    BSTR borderColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
+    BSTR borderWidth();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
+    BSTR padding();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
+    BSTR margin();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
+    BSTR accelerator();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
+    BSTR overflowX();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
+    BSTR overflowY();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
+    BSTR textTransform();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
+    BSTR layoutFlow();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
+    BSTR wordWrap();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
+    BSTR textUnderlinePosition();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
+    VARIANT_BOOL hasLayout();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
+    VARIANT scrollbarBaseColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
+    VARIANT scrollbarFaceColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+    VARIANT scrollbar3dLightColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+    VARIANT scrollbarShadowColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+    VARIANT scrollbarHighlightColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+    VARIANT scrollbarDarkShadowColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
+    VARIANT scrollbarArrowColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
+    VARIANT scrollbarTrackColor();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
+    BSTR writingMode();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
+    VARIANT zoom();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
+    BSTR filter();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
+    BSTR textAlignLast();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
+    VARIANT textKashidaSpace();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
+    VARIANT_BOOL isBlock();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
+    BSTR textOverflow();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
+    VARIANT minHeight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
+    VARIANT wordSpacing();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
+    BSTR whiteSpace();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]
+    BSTR msInterpolationMode();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]
+    VARIANT maxHeight();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]
+    VARIANT minWidth();
+
+    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
+    VARIANT maxWidth();
+}
+
+[
+    noncreatable,
+    uuid(3050f3dc-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLCurrentStyle
+{
+    [default] dispinterface DispHTMLCurrentStyle;
+    interface IHTMLCurrentStyle;
+    interface IHTMLCurrentStyle2;
+    interface IHTMLCurrentStyle3;
+    interface IHTMLCurrentStyle4;
+}
+
+/*****************************************************************************
+ *    IHTMLRect interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4a3-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLRect : IDispatch
+{
+    [propput, id(DISPID_IHTMLRECT_LEFT)]
+    HRESULT left([in] LONG v);
+
+    [propget, id(DISPID_IHTMLRECT_LEFT)]
+    HRESULT left([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLRECT_TOP)]
+    HRESULT top([in] LONG v);
+
+    [propget, id(DISPID_IHTMLRECT_TOP)]
+    HRESULT top([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLRECT_RIGHT)]
+    HRESULT right([in] LONG v);
+
+    [propget, id(DISPID_IHTMLRECT_RIGHT)]
+    HRESULT right([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLRECT_BOTTOM)]
+    HRESULT bottom([in] LONG v);
+
+    [propget, id(DISPID_IHTMLRECT_BOTTOM)]
+    HRESULT bottom([retval, out] LONG *p);
+}
+
+/*****************************************************************************
+ *    IHTMLRectCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4a4-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLRectCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLRECTCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLRECTCOLLECTION__NEWENUM), hidden, restricted]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLRECTCOLLECTION_ITEM)]
+    HRESULT item(
+        [in] VARIANT *pvarIndex,
+        [retval, out] VARIANT *pvarResult);
+}
+
+/*****************************************************************************
+ *    IHTMLDOMNode interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMNode : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
+    HRESULT nodeType([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
+    HRESULT parentNode([retval, out] IHTMLDOMNode **p);
+
+    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
+    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);
+
+    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
+    HRESULT childNodes([retval, out] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IDispatch **p);
+
+    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
+    HRESULT insertBefore(
+        [in] IHTMLDOMNode *newChild,
+        [optional, in] VARIANT refChild,
+        [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
+    HRESULT removeChild(
+        [in] IHTMLDOMNode *oldChild,
+        [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
+    HRESULT replaceChild(
+        [in] IHTMLDOMNode *newChild,
+        [in] IHTMLDOMNode *oldChild,
+        [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMNODE_CLONENODE)]
+    HRESULT cloneNode(
+        [in] VARIANT_BOOL fDeep,
+        [retval, out] IHTMLDOMNode **clonedNode);
+
+    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
+    HRESULT removeNode(
+        [defaultvalue(0), in] VARIANT_BOOL fDeep,
+        [retval, out] IHTMLDOMNode **removed);
+
+    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
+    HRESULT swapNode(
+        [in] IHTMLDOMNode *otherNode,
+        [retval, out] IHTMLDOMNode **swappedNode);
+
+    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
+    HRESULT replaceNode(
+        [in] IHTMLDOMNode *replacement,
+        [retval, out] IHTMLDOMNode **replaced);
+
+    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
+    HRESULT appendChild(
+        [in] IHTMLDOMNode *newChild,
+        [retval, out] IHTMLDOMNode **node);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
+    HRESULT nodeName([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+    HRESULT nodeValue([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+    HRESULT nodeValue([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
+    HRESULT firstChild([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
+    HRESULT lastChild([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
+    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
+    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
+}
+
+#define WINE_IHTMLDOMNODE_DISPINTERFACE_DECL                            \
+    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]                         \
+    LONG nodeType();                                                    \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]                       \
+    IHTMLDOMNode* parentNode();                                         \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]                             \
+    VARIANT_BOOL hasChildNodes();                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]                       \
+    IDispatch* childNodes();                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]                       \
+    IDispatch* attributes();                                            \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]                              \
+    IHTMLDOMNode* insertBefore(                                         \
+            [in] IHTMLDOMNode* newChild,                                \
+            [optional, in] VARIANT refChild);                           \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]                               \
+    IHTMLDOMNode* removeChild([in] IHTMLDOMNode* oldChild);             \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]                              \
+    IHTMLDOMNode* replaceChild(                                         \
+        [in] IHTMLDOMNode* newChild,                                    \
+        [in] IHTMLDOMNode* oldChild);                                   \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_CLONENODE)]                                 \
+    IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep);                   \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]                                \
+    IHTMLDOMNode* removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep); \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]                                  \
+    IHTMLDOMNode* swapNode([in] IHTMLDOMNode* otherNode);               \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]                               \
+    IHTMLDOMNode* replaceNode([in] IHTMLDOMNode* replacement);          \
+                                                                        \
+    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]                               \
+    IHTMLDOMNode* appendChild([in] IHTMLDOMNode* newChild);             \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]                         \
+    BSTR nodeName();                                                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]                        \
+    void nodeValue(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]                        \
+    VARIANT nodeValue();                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]                       \
+    IHTMLDOMNode* firstChild();                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]                        \
+    IHTMLDOMNode* lastChild();                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]                  \
+    IHTMLDOMNode* previousSibling();                                    \
+                                                                        \
+    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]                      \
+    IHTMLDOMNode* nextSibling()
+
+/*****************************************************************************
+ *    IHTMLDOMNode2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f80b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMNode2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
+    HRESULT ownerDocument([retval, out] IDispatch **p);
+}
+
+#define WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL           \
+    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]   \
+    IDispatch *ownerDocument()
+
+#define WINE_HTMLDOMNODE_DISPINTERFACE_DECL     \
+    WINE_IHTMLDOMNODE_DISPINTERFACE_DECL;       \
+    WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL
+
+/*****************************************************************************
+ *    IHTMLDOMAttribute interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4b0-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMAttribute : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
+    HRESULT nodeName([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+    HRESULT nodeValue([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+    HRESULT nodeValue([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
+    HRESULT specified([retval, out] VARIANT_BOOL *p);
+}
+
+/*****************************************************************************
+ *    IHTMLDOMAttribute2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f810-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMAttribute2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]
+    HRESULT expando([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]
+    HRESULT nodeType([retval, out] long *p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]
+    HRESULT parentNode([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]
+    HRESULT childNodes([retval, out] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]
+    HRESULT firstChild([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]
+    HRESULT lastChild([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]
+    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]
+    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]
+    HRESULT ownerDocument([retval, out] IDispatch **p);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]
+    HRESULT insertBefore(
+            [in] IHTMLDOMNode *newChild,
+            [optional, in] VARIANT refChild,
+            [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]
+    HRESULT replaceChild(
+            [in] IHTMLDOMNode *newChild,
+            [in] IHTMLDOMNode *oldChild,
+            [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]
+    HRESULT removeChild(
+            [in] IHTMLDOMNode *oldChild,
+            [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]
+    HRESULT appendChild(
+            [in] IHTMLDOMNode *newChild,
+            [retval, out] IHTMLDOMNode **node);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]
+    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]
+    HRESULT cloneNode(
+            [in] VARIANT_BOOL fDeep,
+            [retval, out] IHTMLDOMAttribute **clonedNode);
+}
+
+/*****************************************************************************
+ *    IHTMLDOMTextNode interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMTextNode : IDispatch
+{
+    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+    HRESULT data([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+    HRESULT data([out, retval] BSTR *p);
+
+    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
+    HRESULT toString([out, retval] BSTR *String);
+
+    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
+    HRESULT length([out, retval] LONG *p);
+
+    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
+    HRESULT splitText(
+            [in] LONG offset,
+            [out, retval] IHTMLDOMNode **pRetNode);
+}
+
+/*****************************************************************************
+ *    IHTMLDOMTextNode2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f809-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMTextNode2 : IDispatch
+{
+    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
+    HRESULT substringData([in] LONG offset,[in] LONG Count,[retval, out] BSTR* pbstrsubString);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
+    HRESULT appendData([in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
+    HRESULT insertData([in] LONG offset,[in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
+    HRESULT deleteData([in] LONG offset,[in] LONG Count);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
+    HRESULT replaceData([in] LONG offset,[in] LONG Count,[in] BSTR bstrstring);
+}
+
+[
+    noncreatable,
+    uuid(3050f4ba-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLDOMTextNode
+{
+    [default]           dispinterface DispHTMLDOMTextNode;
+                        interface IHTMLDOMTextNode;
+                        interface IHTMLDOMTextNode2;
+                        interface IHTMLDOMNode;
+                        interface IHTMLDOMNode2;
+}
+
+/*****************************************************************************
+ *    IHTMLDOMImplementation interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f80d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMImplementation : IDispatch
+{
+    [id(DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE)]
+    HRESULT hasFeature(
+        [in] BSTR bstrfeature,
+        [optional, in] VARIANT version,
+        [retval, out] VARIANT_BOOL *pfHasFeature);
+}
+
+/*****************************************************************************
+ *    DispHTMLDOMAttribute dispinterface
+ */
+[
+    hidden,
+    uuid(3050f564-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLDOMAttribute
+{
+ properties:
+    methods:
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
+    BSTR nodeName();
+
+    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+    void nodeValue(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+    VARIANT nodeValue();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
+    VARIANT_BOOL specified();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+    BSTR value();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]
+    VARIANT_BOOL expando();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]
+    long nodeType();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]
+    IHTMLDOMNode *parentNode();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]
+    IDispatch *childNodes();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]
+    IHTMLDOMNode *firstChild();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]
+    IHTMLDOMNode *lastChild();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]
+    IHTMLDOMNode *previousSibling();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]
+    IHTMLDOMNode *nextSibling();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]
+    IDispatch *attributes();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]
+    IDispatch *ownerDocument();
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]
+    IHTMLDOMNode *insertBefore(
+            [in] IHTMLDOMNode *newChild,
+            [optional, in] VARIANT refChild);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]
+    IHTMLDOMNode *replaceChild(
+            [in] IHTMLDOMNode *newChild,
+            [in] IHTMLDOMNode *oldChild);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]
+    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]
+    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]
+    VARIANT_BOOL hasChildNodes();
+
+    [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]
+    IHTMLDOMAttribute *cloneNode([in] VARIANT_BOOL fDeep);
+
+    [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]
+    void ie8_nodeValue(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]
+    VARIANT ie8_nodeValue();
+
+    [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]
+    void ie8_value(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]
+    BSTR ie8_value();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED)]
+    VARIANT_BOOL ie8_specified();
+
+    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT)]
+    IHTMLElement2 *ownerElement();
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ *    IHTMLDocumentCompatibleInfo interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051041a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocumentCompatibleInfo : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT)]
+    HRESULT userAgent([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION)]
+    HRESULT version([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLDocumentCompatibleInfoCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510418-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocumentCompatibleInfoCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] long *p);
+
+    [id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM)]
+    HRESULT item([in] long i, [retval, out]IHTMLDocumentCompatibleInfo **p);
+}
+
+/*****************************************************************************
+ *    DispHTMLDOMTextNode dispinterface
+ */
+[
+    hidden,
+    uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLDOMTextNode
+{
+properties:
+methods:
+    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+    void data(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+    BSTR data();
+
+    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
+    BSTR toString();
+
+    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
+    LONG length();
+
+    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
+    IHTMLDOMNode *splitText([in] LONG offset);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
+    BSTR substringData(
+            [in] LONG offset,
+            [in] LONG Count);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
+    void appendData([in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
+    void insertData(
+            [in] LONG offset,
+            [in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
+    void deleteData(
+            [in] LONG offset,
+            [in] LONG Count);
+
+    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
+    void replaceData(
+            [in] LONG offset,
+            [in] LONG Count,
+            [in] BSTR bstrstring);
+
+    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ *    IHTMLAttributeCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4c3-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLAttributeCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]
+    HRESULT length(
+            [retval, out] long *p);
+
+    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]
+    HRESULT _newEnum(
+            [retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]
+    HRESULT item(
+            [optional, in] VARIANT *name,
+            [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ *    IHTMLAttributeCollection2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f80a-98b5-11cf-bb82-00aa00bdce0b)
+    ]
+interface IHTMLAttributeCollection2 : IDispatch
+{
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]
+    HRESULT getNamedItem(
+            [in] BSTR bstrName,
+            [retval, out] IHTMLDOMAttribute **newretNode);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]
+    HRESULT setNamedItem(
+            [in] IHTMLDOMAttribute *ppNode,
+            [retval, out] IHTMLDOMAttribute **newretNode);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]
+    HRESULT removeNamedItem(
+            [in] BSTR bstrName,
+            [retval, out] IHTMLDOMAttribute **newretNode);
+}
+
+/*****************************************************************************
+ *    IHTMLAttributeCollection3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510469-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLAttributeCollection3 : IDispatch
+{
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]
+    HRESULT getNamedItem(
+            [in] BSTR bstrName,
+            [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]
+    HRESULT setNamedItem(
+            [in] IHTMLDOMAttribute *pNodeIn,
+            [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]
+    HRESULT removeNamedItem(
+            [in] BSTR bstrName,
+            [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]
+    HRESULT item(
+            [in] long index,
+            [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]
+    HRESULT length([retval, out] long *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLAttributeCollection dispinterface
+ */
+[
+    hidden,
+    uuid(3050f56c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLAttributeCollection
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]
+    long length();
+
+    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]
+    IDispatch *item([optional, in] VARIANT *name);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]
+    IHTMLDOMAttribute *getNamedItem([in] BSTR bstrName);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]
+    IHTMLDOMAttribute *setNamedItem([in] IHTMLDOMAttribute *ppNode);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]
+    IHTMLDOMAttribute *removeNamedItem([in] BSTR bstrName);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]
+    IHTMLDOMAttribute *ie8_getNamedItem([in] BSTR bstrName);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]
+    IHTMLDOMAttribute *ie8_setNamedItem([in] IHTMLDOMAttribute *pNodeIn);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]
+    IHTMLDOMAttribute *ie8_removeNamedItem([in] BSTR bstrName);
+
+    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]
+    IHTMLDOMAttribute *ie8_item([in] long index);
+
+    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]
+    long ie8_length();
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+}
+
+/*****************************************************************************
+ *    IHTMLDOMChildrenCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMChildrenCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
+    HRESULT length([out, retval] LONG *p);
+
+    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
+    HRESULT _newEnum([out, retval] IUnknown **p);
+
+    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
+    HRESULT item(
+            [in] LONG index,
+            [out, retval] IDispatch **ppItem);
+}
+
+/*****************************************************************************
+ *    DispDOMChildrenCollection dispinterface
+ */
+[
+    hidden,
+    uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispDOMChildrenCollection
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
+    LONG length();
+
+    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
+    IDispatch *item([in] LONG index);
+}
+
+interface IHTMLElementCollection;
+
+/*****************************************************************************
+ *    IHTMLElement interface
+ */
+[
+    odl,
+    dual,
+    oleautomation,
+    uuid(3050f1FF-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLElement : IDispatch
+{
+    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR strAttributeName,
+        [in] VARIANT AttributeValue,
+        [defaultvalue(1), in] LONG lFlags);
+
+    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(0), in] LONG lFlags,
+        [retval, out] VARIANT *AttributeValue);
+
+    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+        [in] BSTR strAttributeName,
+        [defaultvalue(1), in] LONG lFlags,
+        [retval, out] VARIANT_BOOL *pfSuccess);
+
+    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME)]
+    HRESULT className([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME)]
+    HRESULT className([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ID)]
+    HRESULT id([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ID)]
+    HRESULT id([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
+    HRESULT tagName([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
+    HRESULT parentElement([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLELEMENT_STYLE)]
+    HRESULT style([retval, out] IHTMLStyle **p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONHELP)]
+    HRESULT onhelp([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONHELP)]
+    HRESULT onhelp([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONCLICK)]
+    HRESULT onclick([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONCLICK)]
+    HRESULT onclick([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
+    HRESULT ondblclick([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
+    HRESULT ondblclick([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
+    HRESULT onkeydown([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
+    HRESULT onkeydown([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP)]
+    HRESULT onkeyup([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP)]
+    HRESULT onkeyup([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
+    HRESULT onkeypress([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
+    HRESULT onkeypress([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
+    HRESULT onmouseout([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
+    HRESULT onmouseout([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
+    HRESULT onmouseover([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
+    HRESULT onmouseover([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
+    HRESULT onmousemove([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
+    HRESULT onmousemove([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
+    HRESULT onmousedown([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
+    HRESULT onmousedown([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
+    HRESULT onmouseup([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
+    HRESULT onmouseup([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
+    HRESULT document([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLELEMENT_TITLE)]
+    HRESULT title([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_TITLE)]
+    HRESULT title([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE)]
+    HRESULT language([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE)]
+    HRESULT language([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
+    HRESULT onselectstart([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
+    HRESULT onselectstart([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
+    HRESULT scrollIntoView([optional, in] VARIANT varargStart);
+
+    [id(DISPID_IHTMLELEMENT_CONTAINS)]
+    HRESULT contains(
+        [in] IHTMLElement *pChild,
+        [retval, out] VARIANT_BOOL *pfResult);
+
+    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX)]
+    HRESULT sourceIndex([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
+    HRESULT recordNumber([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_LANG)]
+    HRESULT lang([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_LANG)]
+    HRESULT lang([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
+    HRESULT offsetLeft([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
+    HRESULT offsetTop([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
+    HRESULT offsetWidth([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
+    HRESULT offsetHeight([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
+    HRESULT offsetParent([retval, out] IHTMLElement **p);
+
+    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
+    HRESULT innerHTML([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
+    HRESULT innerHTML([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
+    HRESULT innerText([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
+    HRESULT innerText([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
+    HRESULT outerHTML([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
+    HRESULT outerHTML([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
+    HRESULT outerText([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
+    HRESULT outerText([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
+    HRESULT insertAdjacentHTML([in] BSTR where, [in] BSTR html);
+
+    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
+    HRESULT insertAdjacentText([in] BSTR where, [in] BSTR text);
+
+    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
+    HRESULT parentTextEdit([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
+    HRESULT isTextEdit([retval, out] VARIANT_BOOL *p);
+
+    [id(DISPID_IHTMLELEMENT_CLICK)]
+    HRESULT click();
+
+    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
+    HRESULT filters([retval, out] IHTMLFiltersCollection **p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
+    HRESULT ondragstart([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
+    HRESULT ondragstart([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLELEMENT_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
+    HRESULT onbeforeupdate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
+    HRESULT onbeforeupdate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
+    HRESULT onafterupdate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
+    HRESULT onafterupdate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
+    HRESULT onerrorupdate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
+    HRESULT onerrorupdate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
+    HRESULT onrowexit([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
+    HRESULT onrowexit([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER)]
+    HRESULT onrowenter([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER)]
+    HRESULT onrowenter([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
+    HRESULT ondatasetchanged([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
+    HRESULT ondatasetchanged([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
+    HRESULT ondatasetcomplete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
+    HRESULT ondatasetcomplete([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
+    HRESULT onfilterchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
+    HRESULT onfilterchange([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
+    HRESULT children([retval, out] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLELEMENT_ALL)]
+    HRESULT all([retval, out] IDispatch **p);
+}
+
+#define WINE_IHTMLELEMENT_DISPINTERFACE_DECL                            \
+    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]                              \
+    void setAttribute(                                                  \
+        [in] BSTR strAttributeName,                                     \
+        [in] VARIANT AttValue,                                          \
+        [defaultvalue(1), in] LONG lFlags);                             \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]                              \
+    VARIANT getAttribute(                                               \
+        [in] BSTR strAttributeName,                                     \
+        [defaultvalue(0), in] LONG lFlags);                             \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]                           \
+    VARIANT_BOOL removeAttribute(                                       \
+        [in] BSTR strAttributeName,                                     \
+        [defaultvalue(1), in] LONG lFlags);                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]              \
+    void className(BSTR v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]              \
+    BSTR className();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]                     \
+    void id(BSTR v);                                                    \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]                     \
+    BSTR id();                                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]                          \
+    BSTR tagName();                                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]                    \
+    IHTMLElement *parentElement();                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]              \
+    IHTMLStyle *style();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]    \
+    void onhelp(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]    \
+    VARIANT onhelp();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]   \
+    void onclick(VARIANT v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]   \
+    VARIANT onclick();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\
+    void ondblclick(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\
+    VARIANT ondblclick();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \
+    void onkeydown(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \
+    VARIANT onkeydown();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]   \
+    void onkeyup(VARIANT v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]   \
+    VARIANT onkeyup();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\
+    void onkeypress(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\
+    VARIANT onkeypress();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\
+    void onmouseout(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\
+    VARIANT onmouseout();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \
+    void onmouseover(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \
+    VARIANT onmouseover();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \
+    void onmousemove(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \
+    VARIANT onmousemove();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \
+    void onmousedown(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \
+    VARIANT onmousedown();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \
+    void onmouseup(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \
+    VARIANT onmouseup();                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] IDispatch* document();  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]     \
+    void title(BSTR v);                                                 \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]     \
+    BSTR title();                                                       \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]  \
+    void language(BSTR v);                                              \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]  \
+    BSTR language();                                                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \
+    void onselectstart(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \
+    VARIANT onselectstart();                                            \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]                            \
+    void scrollIntoView([optional, in] VARIANT varargStart);            \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_CONTAINS)]                                  \
+    VARIANT_BOOL contains([in] IHTMLElement* pChild);                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]            \
+    LONG sourceIndex();                                                 \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]                     \
+    VARIANT recordNumber();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_LANG)]                             \
+    void lang(BSTR v);                                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_LANG)]                             \
+    BSTR lang();                                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]                       \
+    LONG offsetLeft();                                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]                        \
+    LONG offsetTop();                                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]                      \
+    LONG offsetWidth();                                                 \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]                     \
+    LONG offsetHeight();                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]                     \
+    IHTMLElement* offsetParent();                                       \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]                        \
+    void innerHTML(BSTR v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]                        \
+    BSTR innerHTML();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]                        \
+    void innerText(BSTR v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]                        \
+    BSTR innerText();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]                        \
+    void outerHTML(BSTR v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]                        \
+    BSTR outerHTML();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]                        \
+    void outerText(BSTR v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]                        \
+    BSTR outerText();                                                   \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]                        \
+    void insertAdjacentHTML(                                            \
+        [in] BSTR where,                                                \
+        [in] BSTR html);                                                \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]                        \
+    void insertAdjacentText(                                            \
+        [in] BSTR where,                                                \
+        [in] BSTR text);                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]                   \
+    IHTMLElement* parentTextEdit();                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]                       \
+    VARIANT_BOOL isTextEdit();                                          \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_CLICK)]                                     \
+    void click();                                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]                          \
+    IHTMLFiltersCollection* filters();                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \
+    void ondragstart(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \
+    VARIANT ondragstart();                                              \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT_TOSTRING)]                                  \
+    BSTR toString();                                                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \
+    void onbeforeupdate(VARIANT v);                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \
+    VARIANT onbeforeupdate();                                           \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \
+    void onafterupdate(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \
+    VARIANT onafterupdate();                                            \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \
+    void onerrorupdate(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \
+    VARIANT onerrorupdate();                                            \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \
+    void onrowexit(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \
+    VARIANT onrowexit();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \
+    void onrowenter(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \
+    VARIANT onrowenter();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \
+    void ondatasetchanged(VARIANT v);                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \
+    VARIANT ondatasetchanged();                                         \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \
+    void ondataavailable(VARIANT v);                                    \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \
+    VARIANT ondataavailable();                                          \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \
+    void ondatasetcomplete(VARIANT v);                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \
+    VARIANT ondatasetcomplete();                                        \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \
+    void onfilterchange(VARIANT v);                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \
+    VARIANT onfilterchange();                                           \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]                         \
+    IDispatch* children();                                              \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT_ALL)]                              \
+    IDispatch* all()
+
+/*****************************************************************************
+ *    IHTMLElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f434-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLElement2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
+    HRESULT scopeName([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
+    HRESULT setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture);
+
+    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
+    HRESULT releaseCapture();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
+    HRESULT onlosecapture([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
+    HRESULT onlosecapture([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
+    HRESULT componentFromPoint(
+        [in] LONG x,
+        [in] LONG y,
+        [retval, out] BSTR *component);
+
+    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
+    HRESULT doScroll([optional, in] VARIANT component);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
+    HRESULT onscroll([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
+    HRESULT onscroll([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
+    HRESULT ondrag([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
+    HRESULT ondrag([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
+    HRESULT ondragend([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
+    HRESULT ondragend([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
+    HRESULT ondragenter([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
+    HRESULT ondragenter([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
+    HRESULT ondragover([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
+    HRESULT ondragover([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
+    HRESULT ondragleave([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
+    HRESULT ondragleave([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
+    HRESULT ondrop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
+    HRESULT ondrop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
+    HRESULT onbeforecut([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
+    HRESULT onbeforecut([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
+    HRESULT oncut([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
+    HRESULT oncut([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
+    HRESULT onbeforecopy([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
+    HRESULT onbeforecopy([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
+    HRESULT oncopy([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
+    HRESULT oncopy([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
+    HRESULT onbeforepaste([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
+    HRESULT onbeforepaste([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
+    HRESULT onpaste([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
+    HRESULT onpaste([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
+    HRESULT currentStyle([retval, out] IHTMLCurrentStyle **p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
+    HRESULT onpropertychange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
+    HRESULT onpropertychange([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
+    HRESULT getClientRects([retval, out] IHTMLRectCollection **pRectCol);
+
+    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
+    HRESULT getBoundingClientRect([retval, out] IHTMLRect **pRect);
+
+    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
+    HRESULT setExpression(
+        [in] BSTR propname,
+        [in] BSTR expression,
+        [defaultvalue(""), in] BSTR language);
+
+    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
+    HRESULT getExpression(
+        [in] BSTR propname,
+        [retval, out] VARIANT *expression);
+
+    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
+    HRESULT removeExpression(
+        [in] BSTR propname,
+        [retval, out] VARIANT_BOOL *pfSuccess);
+
+    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
+    HRESULT tabIndex([in] short v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
+    HRESULT tabIndex([retval, out] short *p);
+
+    [id(DISPID_IHTMLELEMENT2_FOCUS)]
+    HRESULT focus();
+
+    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
+    HRESULT onblur([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
+    HRESULT onblur([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
+    HRESULT onfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
+    HRESULT onfocus([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
+    HRESULT onresize([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
+    HRESULT onresize([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLELEMENT2_BLUR)]
+    HRESULT blur();
+
+    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
+    HRESULT addFilter([in] IUnknown *pUnk);
+
+    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
+    HRESULT removeFilter([in] IUnknown *pUnk);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
+    HRESULT clientHeight([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
+    HRESULT clientWidth([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
+    HRESULT clientTop([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
+    HRESULT clientLeft([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
+    HRESULT attachEvent(
+        [in] BSTR event,
+        [in] IDispatch *pDisp,
+        [retval, out] VARIANT_BOOL *pfResult);
+
+    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
+    HRESULT detachEvent(
+        [in] BSTR event,
+        [in] IDispatch *pDisp);
+
+    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
+    HRESULT readyState([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
+    HRESULT onrowsdelete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
+    HRESULT onrowsdelete([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
+    HRESULT onrowsinserted([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
+    HRESULT onrowsinserted([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
+    HRESULT oncellchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
+    HRESULT oncellchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
+    HRESULT dir([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
+    HRESULT dir([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
+    HRESULT createControlRange([retval, out] IDispatch **range);
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
+    HRESULT scrollHeight([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
+    HRESULT scrollWidth([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
+    HRESULT scrollTop([in] LONG v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
+    HRESULT scrollTop([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
+    HRESULT scrollLeft([in] LONG v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
+    HRESULT scrollLeft([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
+    HRESULT clearAttributes();
+
+    [id(DISPID_IHTMLELEMENT2_MERGEATTRIBUTES)]
+    HRESULT mergeAttributes([in] IHTMLElement *mergeThis);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
+    HRESULT oncontextmenu([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
+    HRESULT oncontextmenu([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
+    HRESULT insertAdjacentElement(
+        [in] BSTR where,
+        [in] IHTMLElement *insertedElement,
+        [retval, out] IHTMLElement **inserted);
+
+    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
+    HRESULT applyElement(
+        [in] IHTMLElement *apply,
+        [in] BSTR where,
+        [retval, out] IHTMLElement **applied);
+
+    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
+    HRESULT getAdjacentText(
+        [in] BSTR where,
+        [retval, out] BSTR *text);
+
+    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
+    HRESULT replaceAdjacentText(
+        [in] BSTR where,
+        [in] BSTR newText,
+        [retval, out] BSTR *oldText);
+
+    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
+    HRESULT canHaveChildren([retval, out] VARIANT_BOOL *p);
+
+    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
+    HRESULT addBehavior(
+        [in] BSTR bstrUrl,
+        [optional, in] VARIANT *pvarFactory,
+        [retval, out] LONG *pCookie);
+
+    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
+    HRESULT removeBehavior(
+        [in] LONG cookie,
+        [retval, out] VARIANT_BOOL *pfResult);
+
+    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
+    HRESULT runtimeStyle([retval, out] IHTMLStyle **p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
+    HRESULT behaviorUrns([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
+    HRESULT tagUrn([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
+    HRESULT tagUrn([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
+    HRESULT onbeforeeditfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
+    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
+    HRESULT readyStateValue([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR v,
+        [retval, out] IHTMLElementCollection **pelColl);
+}
+
+#define WINE_IHTMLELEMENT2_DISPINTERFACE_DECL                           \
+    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]                       \
+    BSTR scopeName();                                                   \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]                               \
+    void setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]                           \
+    void releaseCapture();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \
+    void onlosecapture(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \
+    VARIANT onlosecapture();                                            \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]                       \
+    BSTR componentFromPoint([in] LONG x,[in] LONG y);                   \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]                                 \
+    void doScroll([optional, in] VARIANT component);                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \
+    void onscroll(VARIANT v);                                           \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \
+    VARIANT onscroll();                                                 \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]   \
+    void ondrag(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]   \
+    VARIANT ondrag();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \
+    void ondragend(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \
+    VARIANT ondragend();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \
+    void ondragenter(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \
+    VARIANT ondragenter();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \
+    void ondragover(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \
+    VARIANT ondragover();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \
+    void ondragleave(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \
+    VARIANT ondragleave();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]   \
+    void ondrop(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]   \
+    VARIANT ondrop();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \
+    void onbeforecut(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \
+    VARIANT onbeforecut();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]    \
+    void oncut(VARIANT v);                                              \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]    \
+    VARIANT oncut();                                                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \
+    void onbeforecopy(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \
+    VARIANT onbeforecopy();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]   \
+    void oncopy(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]   \
+    VARIANT oncopy();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \
+    void onbeforepaste(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \
+    VARIANT onbeforepaste();                                            \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]  \
+    void onpaste(VARIANT v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]  \
+    VARIANT onpaste();                                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]      \
+    IHTMLCurrentStyle* currentStyle();                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \
+    void onpropertychange(VARIANT v);                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \
+    VARIANT onpropertychange();                                         \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]                           \
+    IHTMLRectCollection* getClientRects();                              \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]                    \
+    IHTMLRect* getBoundingClientRect();                                 \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]                            \
+    void setExpression(                                                 \
+        [in] BSTR propname,                                             \
+        [in] BSTR expr,                                                 \
+        [defaultvalue(""), in] BSTR lang);                              \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]                            \
+    VARIANT getExpression([in] BSTR propname);                          \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]                         \
+    VARIANT_BOOL removeExpression([in] BSTR propname);                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \
+    void tabIndex(short v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \
+    short tabIndex();                                                   \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_FOCUS)]                                    \
+    void focus();                                                       \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\
+    void accessKey(BSTR v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\
+    BSTR accessKey();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]   \
+    void onblur(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]   \
+    VARIANT onblur();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]  \
+    void onfocus(VARIANT v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]  \
+    VARIANT onfocus();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \
+    void onresize(VARIANT v);                                           \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \
+    VARIANT onresize();                                                 \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_BLUR)]                                     \
+    void blur();                                                        \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]                                \
+    void addFilter([in] IUnknown* pUnk);                                \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]                             \
+    void removeFilter([in] IUnknown* pUnk);                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] \
+    LONG clientHeight();                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] \
+    LONG clientWidth();                                                 \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] \
+    LONG clientTop();                                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] \
+    LONG clientLeft();                                                  \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]                              \
+    VARIANT_BOOL attachEvent(                                           \
+            [in] BSTR event,                                            \
+            [in] IDispatch* pDisp);                                     \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]                              \
+    void detachEvent(                                                   \
+            [in] BSTR event,                                            \
+            [in] IDispatch* pDisp);                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] VARIANT readyState(); \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \
+    void onreadystatechange(VARIANT v);                                 \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \
+    VARIANT onreadystatechange();                                       \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \
+    void onrowsdelete(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \
+    VARIANT onrowsdelete();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \
+    void onrowsinserted(VARIANT v);                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \
+    VARIANT onrowsinserted();                                           \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \
+    void oncellchange(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \
+    VARIANT oncellchange();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]      \
+    void dir(BSTR v);                                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]      \
+    BSTR dir();                                                         \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]                       \
+    IDispatch* createControlRange();                                    \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] \
+    LONG scrollHeight();                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] \
+    LONG scrollWidth();                                                 \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\
+    void scrollTop(LONG v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\
+    LONG scrollTop();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \
+    void scrollLeft(LONG v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \
+    LONG scrollLeft();                                                  \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]                          \
+    void clearAttributes();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \
+    void oncontextmenu(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \
+    VARIANT oncontextmenu();                                            \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]                    \
+    IHTMLElement* insertAdjacentElement(                                \
+        [in] BSTR where,                                                \
+        [in] IHTMLElement* insertedElement);                            \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]                             \
+    IHTMLElement* applyElement([in] IHTMLElement* apply,[in] BSTR where); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]                          \
+    BSTR getAdjacentText([in] BSTR where);                              \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]                      \
+    BSTR replaceAdjacentText([in] BSTR where,[in] BSTR newText);        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]                 \
+    VARIANT_BOOL canHaveChildren();                                     \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]                              \
+    LONG addBehavior([in] BSTR bstrUrl,[optional, in] VARIANT* pvarFactory); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]                           \
+    VARIANT_BOOL removeBehavior([in] LONG cookie);                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]      \
+    IHTMLStyle* runtimeStyle();                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]                    \
+    IDispatch* behaviorUrns();                                          \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]                          \
+    void tagUrn(BSTR v);                                                \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]                          \
+    BSTR tagUrn();                                                      \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \
+    void onbeforeeditfocus(VARIANT v);                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \
+    VARIANT onbeforeeditfocus();                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] \
+    LONG readyStateValue();                                             \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]                     \
+    IHTMLElementCollection* getElementsByTagName([in] BSTR v)
+
+/*****************************************************************************
+ *    IHTMLElement3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f673-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLElement3 : IDispatch
+{
+    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] HRESULT mergeAttributes([in]
+    IHTMLElement* mergeThis,[optional, in] VARIANT* pvarFlags);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
+    HRESULT isMultiLine([retval, out] VARIANT_BOOL * p);
+
+    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
+    HRESULT canHaveHTML([retval, out] VARIANT_BOOL * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
+    HRESULT onlayoutcomplete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
+    HRESULT onlayoutcomplete([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
+    HRESULT onpage([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
+    HRESULT onpage([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
+    HRESULT inflateBlock([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
+    HRESULT inflateBlock([retval, out] VARIANT_BOOL * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
+    HRESULT onbeforedeactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
+    HRESULT onbeforedeactivate([retval, out] VARIANT * p);
+
+    [id(DISPID_IHTMLELEMENT3_SETACTIVE)] HRESULT setActive();
+
+    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
+    HRESULT contentEditable([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
+    HRESULT contentEditable([retval, out] BSTR * p);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
+    HRESULT isContentEditable([retval, out] VARIANT_BOOL * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
+    HRESULT hideFocus([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
+    HRESULT hideFocus([retval, out] VARIANT_BOOL * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
+    HRESULT disabled([retval, out] VARIANT_BOOL * p);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
+    HRESULT isDisabled([retval, out] VARIANT_BOOL * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
+    HRESULT onmove([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
+    HRESULT onmove([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
+    HRESULT oncontrolselect([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
+    HRESULT oncontrolselect([retval, out] VARIANT * p);
+
+    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
+    HRESULT fireEvent(
+        [in] BSTR bstrEventName,
+        [optional, in] VARIANT* pvarEventObject,
+        [retval, out] VARIANT_BOOL* pfCancelled);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
+    HRESULT onresizestart([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
+    HRESULT onresizestart([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
+    HRESULT onresizeend([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
+    HRESULT onresizeend([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
+    HRESULT onmovestart([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
+    HRESULT onmovestart([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
+    HRESULT onmoveend([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
+    HRESULT onmoveend([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
+    HRESULT onmouseenter([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
+    HRESULT onmouseenter([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
+    HRESULT onmouseleave([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
+    HRESULT onmouseleave([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
+    HRESULT onactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
+    HRESULT onactivate([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
+    HRESULT ondeactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
+    HRESULT ondeactivate([retval, out] VARIANT * p);
+
+    [id(DISPID_IHTMLELEMENT3_DRAGDROP)] HRESULT dragDrop([retval, out]
+    VARIANT_BOOL* pfRet);
+
+    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
+    HRESULT glyphMode([retval, out] LONG * p);
+}
+
+#define WINE_IHTMLELEMENT3_DISPINTERFACE_DECL                           \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]                          \
+    void mergeAttributes(                                               \
+            [in] IHTMLElement* mergeThis,                               \
+            [optional, in] VARIANT* pvarFlags);                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]                     \
+    VARIANT_BOOL isMultiLine();                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]                     \
+    VARIANT_BOOL canHaveHTML();                                         \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \
+    void onlayoutcomplete(VARIANT v);                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \
+    VARIANT onlayoutcomplete();                                         \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]   \
+    void onpage(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]   \
+    VARIANT onpage();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \
+    void inflateBlock(VARIANT_BOOL v);                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \
+    VARIANT_BOOL inflateBlock();                                        \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \
+    void onbeforedeactivate(VARIANT v);                                 \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \
+    VARIANT onbeforedeactivate();                                       \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]                                \
+    void setActive();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \
+    void contentEditable(BSTR v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \
+    BSTR contentEditable();                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]               \
+    VARIANT_BOOL isContentEditable();                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\
+    void hideFocus(VARIANT_BOOL v);                                     \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\
+    VARIANT_BOOL hideFocus();                                           \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \
+    void disabled(VARIANT_BOOL v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \
+    VARIANT_BOOL disabled();                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]                      \
+    VARIANT_BOOL isDisabled();                                          \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]   \
+    void onmove(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]   \
+    VARIANT onmove();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \
+    void oncontrolselect(VARIANT v);                                    \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \
+    VARIANT oncontrolselect();                                          \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]                                \
+    VARIANT_BOOL fireEvent(                                             \
+        [in] BSTR bstrEventName,                                        \
+        [optional, in] VARIANT* pvarEventObject);                       \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \
+    void onresizestart(VARIANT v);                                      \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \
+    VARIANT onresizestart();                                            \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \
+    void onresizeend(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \
+    VARIANT onresizeend();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \
+    void onmovestart(VARIANT v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \
+    VARIANT onmovestart();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\
+    void onmoveend(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\
+    VARIANT onmoveend();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \
+    void onmouseenter(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \
+    VARIANT onmouseenter();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \
+    void onmouseleave(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \
+    VARIANT onmouseleave();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \
+    void onactivate(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \
+    VARIANT onactivate();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \
+    void ondeactivate(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \
+    VARIANT ondeactivate();                                             \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]                                 \
+    VARIANT_BOOL dragDrop();                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] \
+    LONG glyphMode()
+
+/*****************************************************************************
+ *    IHTMLElement4 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f80f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLElement4 : IDispatch
+{
+    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
+    HRESULT onmousewheel([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
+    HRESULT onmousewheel([retval, out] VARIANT * p);
+
+    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
+    HRESULT normalize();
+
+    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
+    HRESULT getAttributeNode([in] BSTR bstrname,
+        [retval, out] IHTMLDOMAttribute** ppAttribute);
+
+    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
+    HRESULT setAttributeNode(
+        [in] IHTMLDOMAttribute* pattr,
+        [retval, out] IHTMLDOMAttribute** ppretAttribute);
+
+    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
+    HRESULT removeAttributeNode(
+        [in] IHTMLDOMAttribute* pattr,
+        [retval, out] IHTMLDOMAttribute** ppretAttribute);
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
+    HRESULT onbeforeactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
+    HRESULT onbeforeactivate([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
+    HRESULT onfocusin([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
+    HRESULT onfocusin([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
+    HRESULT onfocusout([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
+    HRESULT onfocusout([retval, out] VARIANT * p);
+}
+
+#define WINE_IHTMLELEMENT4_DISPINTERFACE_DECL                           \
+    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \
+    void onmousewheel(VARIANT v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \
+    VARIANT onmousewheel();                                             \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]                                \
+    void normalize();                                                   \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]                         \
+    IHTMLDOMAttribute* getAttributeNode([in] BSTR bstrname);            \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]                         \
+    IHTMLDOMAttribute* setAttributeNode([in] IHTMLDOMAttribute* pattr); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]                      \
+    IHTMLDOMAttribute* removeAttributeNode([in] IHTMLDOMAttribute* pattr); \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \
+    void onbeforeactivate(VARIANT v);                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \
+    VARIANT onbeforeactivate();                                         \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\
+    void onfocusin(VARIANT v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\
+    VARIANT onfocusin();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \
+    void onfocusout(VARIANT v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \
+    VARIANT onfocusout()
+
+#define WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL                \
+    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)]                 \
+    IHTMLElement *querySelector([in] BSTR v);                   \
+                                                                \
+    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)]              \
+    IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v)
+
+/*****************************************************************************
+ *    IHTMLUniqueName interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4d0-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLUniqueName : IDispatch
+{
+    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
+    HRESULT uniqueNumber([retval, out] LONG * p);
+
+    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
+    HRESULT uniqueID([retval, out] BSTR * p);
+}
+
+#define WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL                 \
+    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]  \
+    LONG uniqueNumber();                                        \
+                                                                \
+    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]      \
+    BSTR uniqueID()
+
+#define WINE_IHTMLELEMENT5_DISPINTERFACE_DECL                           \
+    [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE)]                     \
+    IHTMLDOMAttribute2 *ie8_getAttributeNode([in] BSTR bstrname);       \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE)]                     \
+    IHTMLDOMAttribute2 *ie8_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE)]                  \
+    IHTMLDOMAttribute2 *ie8_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_HASATTRIBUTE)]                             \
+    VARIANT_BOOL hasAttribute([in] BSTR name);                          \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable]     \
+    void role(BSTR v);                                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable]     \
+    BSTR role();                                                        \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \
+    void ariaBusy(BSTR v);                                              \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \
+    BSTR ariaBusy();                                                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \
+    void ariaChecked(BSTR v);                                           \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \
+    BSTR ariaChecked();                                                 \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \
+    void ariaDisabled(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \
+    BSTR ariaDisabled();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \
+    void ariaExpanded(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \
+    BSTR ariaExpanded();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable]\
+    void ariaHaspopup(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable] \
+    BSTR ariaHaspopup();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \
+    void ariaHidden(BSTR v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \
+    BSTR ariaHidden();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \
+    void ariaInvalid(BSTR v);                                           \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \
+    BSTR ariaInvalid();                                                 \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \
+    void ariaMultiselectable(BSTR v);                                   \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \
+    BSTR ariaMultiselectable();                                         \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \
+    void ariaPressed(BSTR v);                                           \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \
+    BSTR ariaPressed();                                                 \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \
+    void ariaReadonly(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \
+    BSTR ariaReadonly();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \
+    void ariaRequired(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \
+    BSTR ariaRequired();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \
+    void ariaSecret(BSTR v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \
+    BSTR ariaSecret();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \
+    void ariaSelected(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \
+    BSTR ariaSelected();                                                \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE)]                         \
+    VARIANT ie8_getAttribute([in] BSTR strAttributeName);               \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE)]                         \
+    void ie8_setAttribute([in] BSTR strAttributeName,[in] VARIANT AttributeValue); \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE)]                      \
+    VARIANT_BOOL ie8_removeAttribute([in] BSTR strAttributeName);       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES)]                  \
+    IHTMLAttributeCollection3 *ie8_attributes();                        \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \
+    void ariaValuenow(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \
+    BSTR ariaValuenow();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \
+    void ariaPosinset(short v);                                         \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \
+    short ariaPosinset();                                               \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \
+    void ariaSetsize(short v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \
+    short ariaSetsize();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\
+    void ariaLevel(short v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\
+    short ariaLevel();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \
+    void ariaValuemin(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \
+    BSTR ariaValuemin();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \
+    void ariaValuemax(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \
+    BSTR ariaValuemax();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \
+    void ariaControls(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \
+    BSTR ariaControls();                                                \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \
+    void ariaDescribedby(BSTR v);                                       \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \
+    BSTR ariaDescribedby();                                             \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \
+    void ariaFlowto(BSTR v);                                            \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \
+    BSTR ariaFlowto();                                                  \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \
+    void ariaLabelledby(BSTR v);                                        \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \
+    BSTR ariaLabelledby();                                              \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \
+    void ariaActivedescendant(BSTR v);                                  \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \
+    BSTR ariaActivedescendant();                                        \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \
+    void ariaOwns(BSTR v);                                              \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \
+    BSTR ariaOwns();                                                    \
+                                                                        \
+    [id(DISPID_IHTMLELEMENT5_HASATTRIBUTES)]                            \
+    VARIANT_BOOL hasAttributes();                                       \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \
+    void ariaLive(BSTR v);                                              \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \
+    BSTR ariaLive();                                                    \
+                                                                        \
+    [propput, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \
+    void ariaRelevant(BSTR v);                                          \
+                                                                        \
+    [propget, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \
+    BSTR ariaRelevant()
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f3f2-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDatabinding : IDispatch
+{
+    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
+    HRESULT dataFld([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
+    HRESULT dataFld([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
+    HRESULT dataSrc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
+    HRESULT dataSrc([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
+    HRESULT dataFormatAs([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
+    HRESULT dataFormatAs([retval, out] BSTR * p);
+}
+
+#define WINE_IHTMLDATABINDING_DISPINTERFACE_DECL        \
+    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]      \
+    void dataFld(BSTR v);                               \
+                                                        \
+    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]      \
+    BSTR dataFld();                                     \
+                                                        \
+    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]      \
+    void dataSrc(BSTR v);                               \
+                                                        \
+    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]      \
+    BSTR dataSrc();                                     \
+                                                        \
+    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \
+    void dataFormatAs(BSTR v);                          \
+                                                        \
+    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \
+    BSTR dataFormatAs()
+
+#define WINE_HTMLELEMENT_DISPINTERFACE_DECL     \
+    WINE_IHTMLELEMENT_DISPINTERFACE_DECL;       \
+    WINE_IHTMLELEMENT2_DISPINTERFACE_DECL;      \
+    WINE_IHTMLELEMENT3_DISPINTERFACE_DECL;      \
+    WINE_IHTMLELEMENT4_DISPINTERFACE_DECL;      \
+    WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL;    \
+    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;        \
+    WINE_IHTMLELEMENT5_DISPINTERFACE_DECL;      \
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL
+
+#define WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL \
+    WINE_IHTMLELEMENT_DISPINTERFACE_DECL;       \
+    WINE_IHTMLELEMENT2_DISPINTERFACE_DECL;      \
+    WINE_IHTMLELEMENT3_DISPINTERFACE_DECL;      \
+    WINE_IHTMLELEMENT4_DISPINTERFACE_DECL;      \
+    WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL;    \
+    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;        \
+    WINE_IHTMLDATABINDING_DISPINTERFACE_DECL;   \
+    WINE_IHTMLELEMENT5_DISPINTERFACE_DECL;      \
+    WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL;   \
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL
+
+/*****************************************************************************
+ *    IHTMLGenericElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLGenericElement : IDispatch
+{
+    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
+    HRESULT recordset([out, retval] IDispatch **p);
+
+    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
+    HRESULT namedRecordset(
+            [in] BSTR dataMember,
+            [in, optional] VARIANT *hierarchy,
+            [out, retval] IDispatch **ppRecordset);
+}
+
+/*****************************************************************************
+ *    DispHTMLGenericElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLGenericElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
+    IDispatch *recordset();
+
+    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
+    IDispatch *namedRecordset(
+            [in] BSTR dataMember,
+            [in, optional] VARIANT *hierarchy);
+}
+
+/*****************************************************************************
+ *    IHTMLStyleSheetRule interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F357-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheetRule : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+    HRESULT selectorText([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+    HRESULT selectorText([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE)]
+    HRESULT style([retval, out] IHTMLRuleStyle **p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
+    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+}
+
+[
+    hidden,
+    uuid(3050f50e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetRule
+{
+properties:
+methods:
+    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+    void selectorText(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+    BSTR selectorText();
+
+    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE), nonbrowsable]
+    IHTMLRuleStyle* style();
+
+    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
+    VARIANT_BOOL readOnly();
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+    noncreatable,
+    uuid(3050f3ce-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetRule
+{
+    [default]           dispinterface DispHTMLStyleSheetRule;
+                        interface IHTMLStyleSheetRule;
+                        interface IHTMLDOMConstructor;
+}
+
+/*****************************************************************************
+ *    IHTMLStyleSheetRulesCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F2E5-98B5-11Cf-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheetRulesCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
+    HRESULT item(
+        [in] LONG index,
+        [retval, out] IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
+}
+
+[
+    hidden,
+    uuid(3050f52f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetRulesCollection
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
+    long length();
+
+    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
+    IHTMLStyleSheetRule* item([in] long index);
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+    noncreatable,
+    uuid(3050f3cd-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetRulesCollection
+{
+    [default]           dispinterface DispHTMLStyleSheetRulesCollection;
+                        interface IHTMLStyleSheetRulesCollection;
+                        interface IHTMLDOMConstructor;
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f7ee-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleSheetPage : IDispatch
+{
+    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]
+    HRESULT selector([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]
+    HRESULT pseudoClass([retval, out] BSTR *p);
+}
+
+[
+    hidden,
+    uuid(3050f540-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetPage
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]
+    BSTR selector();
+
+    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]
+    BSTR pseudoClass();
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+[
+    noncreatable,
+    uuid(3050f7ef-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetPage
+{
+    [default]           dispinterface DispHTMLStyleSheetPage;
+                        interface IHTMLStyleSheetPage;
+                        interface IHTMLDOMConstructor;
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f7f0-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleSheetPagesCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]
+    HRESULT item(
+        [in] LONG index,
+        [retval, out] IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
+}
+
+[
+    hidden,
+    uuid(3050f543-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetPagesCollection
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]
+    long length();
+
+    [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]
+    IHTMLStyleSheetPage* item([in] long index);
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+    noncreatable,
+    uuid(3050f7f1-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetPagesCollection
+{
+    [default]           dispinterface DispHTMLStyleSheetPagesCollection;
+                        interface IHTMLStyleSheetPagesCollection;
+                        interface IHTMLDOMConstructor;
+}
+
+/*****************************************************************************
+ *    IHTMLStyleSheet interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F2E3-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheet : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+    HRESULT title([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+    HRESULT title([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
+    HRESULT parentStyleSheet([retval, out] IHTMLStyleSheet **p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
+    HRESULT owningElement([retval, out] IHTMLElement **p);
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+    HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
+    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
+    HRESULT imports([retval, out] IHTMLStyleSheetsCollection **p);
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
+    HRESULT href([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
+    HRESULT href([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
+    HRESULT id([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
+    HRESULT addImport(
+        [in] BSTR bstrURL,
+        [defaultvalue(-1), in] LONG lIndex,
+        [retval, out] LONG *plIndex);
+
+    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
+    HRESULT addRule(
+        [in] BSTR bstrSelector,
+        [in] BSTR bstrStyle,
+        [defaultvalue(-1), in] LONG lIndex,
+        [retval, out] LONG *plNewIndex);
+
+    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
+    HRESULT removeImport([in] LONG lIndex);
+
+    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
+    HRESULT removeRule([in] LONG lIndex);
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+    HRESULT media([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+    HRESULT media([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+    HRESULT cssText([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+    HRESULT cssText([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
+    HRESULT rules([retval, out] IHTMLStyleSheetRulesCollection **p);
+}
+
+/*****************************************************************************
+ *    IHTMLStyleSheet2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f3d1-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleSheet2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]
+    HRESULT pages([retval, out] IHTMLStyleSheetPagesCollection **p);
+
+    [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]
+    HRESULT addPageRule(
+        [in] BSTR bstrSelector,
+        [in] BSTR bstrStyle,
+        [defaultvalue(-1), in] LONG lIndex,
+        [retval, out] LONG *plNewIndex);
+}
+
+[
+    hidden,
+    uuid(3050f58d-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheet
+{
+properties:
+methods:
+    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+    void title(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+    BSTR title();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
+    IHTMLStyleSheet* parentStyleSheet();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
+    IHTMLElement* owningElement();
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+    void disabled(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+    VARIANT_BOOL disabled();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
+    VARIANT_BOOL readOnly();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
+    IHTMLStyleSheetsCollection* imports();
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
+    void href(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
+    BSTR href();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
+    BSTR type();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
+    BSTR id();
+
+    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
+    LONG addImport(
+        [in] BSTR bstrURL,
+        [defaultvalue(-1), in] LONG lIndex);
+
+    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
+    LONG addRule(
+        [in] BSTR bstrSelector,
+        [in] BSTR bstrStyle,
+        [defaultvalue(-1), in] LONG lIndex);
+
+    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
+    void removeImport([in] LONG lIndex);
+
+    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
+    void removeRule([in] LONG lIndex);
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+    void media(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+    BSTR media();
+
+    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+    void cssText(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+    BSTR cssText();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
+    IHTMLStyleSheetRulesCollection* rules();
+
+    [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]
+    IHTMLStyleSheetPagesCollection* pages();
+
+    [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]
+    LONG addPageRule(
+        [in] BSTR bstrSelector,
+        [in] BSTR bstrStyle,
+        [defaultvalue(-1), in] LONG lIndex);
+}
+
+[
+    noncreatable,
+    uuid(3050f2e4-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheet
+{
+    [default]           dispinterface DispHTMLStyleSheet;
+                        interface IHTMLStyleSheet;
+                        interface IHTMLStyleSheet2;
+}
+
+/*****************************************************************************
+ *    IHTMLStyleSheetsCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F37E-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheetsCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
+    HRESULT item(
+        [in] VARIANT *pvarIndex,
+        [retval, out] VARIANT *pvarResult);
+}
+
+/*****************************************************************************
+ *    DispHTMLStyleSheetsCollection dispinterface
+ */
+[
+    hidden,
+    uuid(3050f547-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetsCollection
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
+    long length();
+
+    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
+    VARIANT item([in] VARIANT *pvarIndex);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+}
+
+/*****************************************************************************
+ *    IHTMLLinkElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f205-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+    HRESULT href([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+    HRESULT href([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+    HRESULT rel([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+    HRESULT rel([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+    HRESULT rev([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+    HRESULT rev([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([out, retval] BSTR *p);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_READYSTATE)]
+    HRESULT readyState([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([out, retval] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)]
+    HRESULT styleSheet([out, retval] IHTMLStyleSheet **p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([out, retval] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]
+    HRESULT media([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]\
+    HRESULT media([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLLinkElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4e5-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+    HRESULT target([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+    HRESULT target([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLLinkElement3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f81e-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement3 : IDispatch
+{
+    [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+    HRESULT charset([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+    HRESULT charset([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+    HRESULT hreflang([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+    HRESULT hreflang([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLLinkElement4 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051043a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement4 : IDispatch
+{
+    [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+    HRESULT href([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+    HRESULT href([retval, out] BSTR * p);
+}
+
+/*****************************************************************************
+ *    DispHTMLLinkElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f524-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLLinkElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+    void href(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+    BSTR href();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+    void rel(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+    BSTR rel();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+    void rev(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+    BSTR rev();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)]
+    IHTMLStyleSheet *styleSheet();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]
+    void media(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]
+    BSTR media();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+    void target(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+    BSTR target();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+    void charset(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+    BSTR charset();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+    void hreflang(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+    BSTR hreflang();
+
+    [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+    void ie8_href(BSTR v);
+
+    [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+    BSTR ie8_href();
+}
+
+/*****************************************************************************
+ *    IHTMLTxtRange interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f220-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTxtRange : IDispatch
+{
+    [propget, id(DISPID_IHTMLTXTRANGE_HTMLTEXT)]
+    HRESULT htmlText([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTXTRANGE_TEXT)]
+    HRESULT text([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTXTRANGE_TEXT)]
+    HRESULT text([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLTXTRANGE_PARENTELEMENT)]
+    HRESULT parentElement([retval, out] IHTMLElement **parent);
+
+    [id(DISPID_IHTMLTXTRANGE_DUPLICATE)]
+    HRESULT duplicate([retval, out] IHTMLTxtRange **Duplicate);
+
+    [id(DISPID_IHTMLTXTRANGE_INRANGE)]
+    HRESULT inRange(
+        [in] IHTMLTxtRange *Range,
+        [retval, out] VARIANT_BOOL *InRange);
+
+    [id(DISPID_IHTMLTXTRANGE_ISEQUAL)]
+    HRESULT isEqual(
+        [in] IHTMLTxtRange *Range,
+        [retval, out] VARIANT_BOOL *IsEqual);
+
+    [id(DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW)]
+    HRESULT scrollIntoView([defaultvalue(-1), in] VARIANT_BOOL fStart);
+
+    [id(DISPID_IHTMLTXTRANGE_COLLAPSE)]
+    HRESULT collapse([defaultvalue(-1), in] VARIANT_BOOL Start);
+
+    [id(DISPID_IHTMLTXTRANGE_EXPAND)]
+    HRESULT expand(
+        [in] BSTR Unit,
+        [retval, out] VARIANT_BOOL *Success);
+
+    [id(DISPID_IHTMLTXTRANGE_MOVE)]
+    HRESULT move(
+        [in] BSTR Unit,
+        [defaultvalue(1), in] LONG Count,
+        [retval, out] LONG *ActualCount);
+
+    [id(DISPID_IHTMLTXTRANGE_MOVESTART)]
+    HRESULT moveStart(
+        [in] BSTR Unit,
+        [defaultvalue(1), in] LONG Count,
+        [retval, out] LONG *ActualCount);
+
+    [id(DISPID_IHTMLTXTRANGE_MOVEEND)]
+    HRESULT moveEnd(
+        [in] BSTR Unit,
+        [defaultvalue(1), in] LONG Count,
+        [retval, out] LONG *ActualCount);
+
+    [id(DISPID_IHTMLTXTRANGE_SELECT)]
+    HRESULT select();
+
+    [id(DISPID_IHTMLTXTRANGE_PASTEHTML)]
+    HRESULT pasteHTML([in] BSTR html);
+
+    [id(DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT)]
+    HRESULT moveToElementText([in] IHTMLElement *element);
+
+    [id(DISPID_IHTMLTXTRANGE_SETENDPOINT)]
+    HRESULT setEndPoint(
+        [in] BSTR how,
+        [in] IHTMLTxtRange *SourceRange);
+
+    [id(DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS)]
+    HRESULT compareEndPoints(
+        [in] BSTR how,
+        [in] IHTMLTxtRange *SourceRange,
+        [retval, out] LONG *ret);
+
+    [id(DISPID_IHTMLTXTRANGE_FINDTEXT)]
+    HRESULT findText(
+        [in] BSTR String,
+        [defaultvalue(1073741823), in] LONG count,
+        [defaultvalue(0), in] LONG Flags,
+        [retval, out] VARIANT_BOOL *Success);
+
+    [id(DISPID_IHTMLTXTRANGE_MOVETOPOINT)]
+    HRESULT moveToPoint(
+        [in] LONG x,
+        [in] LONG y);
+
+    [id(DISPID_IHTMLTXTRANGE_GETBOOKMARK)]
+    HRESULT getBookmark([retval, out] BSTR *Boolmark);
+
+    [id(DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK)]
+    HRESULT moveToBookmark(
+        [in] BSTR Bookmark,
+        [retval, out] VARIANT_BOOL *Success);
+
+    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED)]
+    HRESULT queryCommandSupported(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED)]
+    HRESULT queryCommandEnabled(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE)]
+    HRESULT queryCommandState(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM)]
+    HRESULT queryCommandIndeterm(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT)]
+    HRESULT queryCommandText(
+        [in] BSTR cmdID,
+        [retval, out] BSTR *pcmdText);
+
+    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE)]
+    HRESULT queryCommandValue(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT *pcmdValue);
+
+    [id(DISPID_IHTMLTXTRANGE_EXECCOMMAND)]
+    HRESULT execCommand(
+        [in] BSTR cmdID,
+        [defaultvalue(0), in] VARIANT_BOOL showUI,
+        [optional, in] VARIANT value,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP)]
+    HRESULT execCommandShowHelp(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+}
+
+[
+    noncreatable,
+    uuid(3050f37f-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetsCollection
+{
+    [default]           interface IHTMLStyleSheetsCollection;
+}
+
+/*****************************************************************************
+ *    IHTMLFormElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F1F7-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLFormElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+    HRESULT action([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+    HRESULT action([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_DIR)]
+    HRESULT dir([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_DIR)]
+    HRESULT dir([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+    HRESULT encoding([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+    HRESULT encoding([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+    HRESULT method([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+    HRESULT method([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
+    HRESULT elements([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+    HRESULT target([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+    HRESULT target([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+    HRESULT onsubmit([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+    HRESULT onsubmit([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+    HRESULT onreset([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+    HRESULT onreset([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
+    HRESULT submit();
+
+    [id(DISPID_IHTMLFORMELEMENT_RESET)]
+    HRESULT reset();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+    HRESULT length([in] LONG v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLFORMELEMENT_ITEM)]
+    HRESULT item(
+        [optional, in] VARIANT name,
+        [optional, in] VARIANT index,
+        [retval, out] IDispatch **pdisp);
+
+    [id(DISPID_IHTMLFORMELEMENT_TAGS)]
+    HRESULT tags(
+        [in] VARIANT tagName,
+        [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ *    DispHTMLFormElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050F510-98B5-11CF-BB82-00AA00BDCE0B)
+]
+dispinterface DispHTMLFormElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+    void action(BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+    BSTR action();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+    void encoding(BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+    BSTR encoding();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+    void method(BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+    BSTR method();
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
+    IDispatch *elements();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+    void target(BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+    BSTR target();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+    void onsubmit(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+    VARIANT onsubmit();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+    void onreset(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+    VARIANT onreset();
+
+    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
+    void submit();
+
+    [id(DISPID_IHTMLFORMELEMENT_RESET)]
+    void reset();
+
+    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+    void length(long v);
+
+    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+    long length();
+
+    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLFORMELEMENT_ITEM)]
+    IDispatch *item(VARIANT name, VARIANT index);
+
+    [id(DISPID_IHTMLFORMELEMENT_TAGS)]
+    IDispatch *tags(VARIANT tagName);
+}
+
+[
+    hidden,
+    uuid(3050F364-98B5-11CF-BB82-00AA00BDCE0B)
+]
+dispinterface HTMLFormElementEvents
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+    VARIANT_BOOL onhelp();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+    VARIANT_BOOL onclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+    void onkeydown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+    void onkeyup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+    void onmouseout();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+    void onmouseover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+    void onmousemove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+    void onmousedown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+    void onmouseup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+    void onfilterchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+    void onafterupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+    VARIANT_BOOL onrowexit();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+    void onrowenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+    void ondatasetchanged();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+    void ondataavailable();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+    void ondatasetcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+    void onlosecapture();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+    void onpropertychange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+    void onscroll();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+    void onfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+    void onblur();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+    void onresize();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+    VARIANT_BOOL ondrag();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+    void ondragend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+    VARIANT_BOOL ondragover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+    void ondragleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+    VARIANT_BOOL ondrop();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+    VARIANT_BOOL oncut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+    VARIANT_BOOL oncopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+    VARIANT_BOOL onpaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+    void onrowsdelete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+    void onrowsinserted();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+    void oncellchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+    void onreadystatechange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+    void onbeforeeditfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+    void onpage();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+    void onmove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+    VARIANT_BOOL onmovestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+    void onmoveend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+    void onresizeend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+    void onmouseenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+    void onmouseleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+    void onactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+    void ondeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+    void onfocusin();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+    void onfocusout();
+
+    [id(DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT)]
+    VARIANT_BOOL onsubmit();
+
+    [id(DISPID_HTMLFORMELEMENTEVENTS_ONRESET)]
+    VARIANT_BOOL onreset();
+}
+
+interface IHTMLEventObj;
+
+[
+    hidden,
+    uuid(3050F614-98B5-11CF-BB82-00AA00BDCE0B)
+]
+dispinterface HTMLFormElementEvents2
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+    void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+    void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+    void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+    void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+    void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+    void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+    void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+    void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+    void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+    void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+    void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+    void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+    void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+    void onscroll([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+    void onfocus([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+    void onblur([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+    void onresize([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+    void ondragend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+    void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+    void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+    void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+    void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+    void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+    void onpage([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+    void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+    void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+    void onactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+    void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+    void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+    void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+    void onmove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+    void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+    void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT)]
+    VARIANT_BOOL onsubmit([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLFORMELEMENTEVENTS2_ONRESET)]
+    VARIANT_BOOL onreset([in] IHTMLEventObj* pEvtObj);
+}
+
+[
+    noncreatable,
+    uuid(3050F24D-98B5-11CF-BB82-00AA00BDCE0B)
+]
+coclass HTMLFormElement
+{
+    [default]           dispinterface DispHTMLFormElement;
+    [source, default]   dispinterface HTMLFormElementEvents;
+    [source]            dispinterface HTMLFormElementEvents2;
+                        interface IHTMLElement;
+                        interface IHTMLElement2;
+                        interface IHTMLElement3;
+                        interface IHTMLElement4;
+                        interface IHTMLUniqueName;
+                        interface IHTMLDOMNode;
+                        interface IHTMLDOMNode2;
+                        interface IHTMLDOMConstructor;
+                        interface IHTMLFormElement;
+}
+
+/*****************************************************************************
+ *    IHTMLTextContainer interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f230-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTextContainer : IDispatch
+{
+    [id(DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE)]
+    HRESULT createControlRange([retval, out] IDispatch **range);
+
+    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT), displaybind, bindable]
+    HRESULT scrollHeight([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH), displaybind, bindable]
+    HRESULT scrollWidth([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
+    HRESULT scrollTop([in] LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
+    HRESULT scrollTop([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
+    HRESULT scrollLeft([in] LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
+    HRESULT scrollLeft([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
+    HRESULT onscroll([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
+    HRESULT onscroll([retval, out] VARIANT *p);
+}
+
+/*****************************************************************************
+ *    IHTMLImgElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F240-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLImgElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
+    HRESULT isMap([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
+    HRESULT isMap([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
+    HRESULT useMap([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
+    HRESULT useMap([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
+    HRESULT mimeType([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
+    HRESULT fileSize([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
+    HRESULT fileCreatedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
+    HRESULT fileModifiedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
+    HRESULT fileUpdatedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
+    HRESULT protocol([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
+    HRESULT href([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
+    HRESULT nameProp([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER)]
+    HRESULT border([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER)]
+    HRESULT border([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
+    HRESULT vspace([in] LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
+    HRESULT vspace([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
+    HRESULT hspace([in] LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
+    HRESULT hspace([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ALT)]
+    HRESULT alt([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ALT)]
+    HRESULT alt([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_SRC)]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_SRC)]
+    HRESULT src([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
+    HRESULT lowsrc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
+    HRESULT lowsrc([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_VRML)]
+    HRESULT vrml([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_VRML)]
+    HRESULT vrml([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
+    HRESULT dynsrc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
+    HRESULT dynsrc([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_READYSTATE)]
+    HRESULT readyState([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
+    HRESULT complete([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP)]
+    HRESULT loop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP)]
+    HRESULT loop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
+    HRESULT align([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
+    HRESULT onload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
+    HRESULT onerror([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
+    HRESULT onabort([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
+    HRESULT onabort([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_NAME)]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+    HRESULT width([in] LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+    HRESULT width([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+    HRESULT height([in] LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+    HRESULT height([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_START)]
+    HRESULT start([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_START)]
+    HRESULT start([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLImageElementFactory interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F38E-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLImageElementFactory : IDispatch
+{
+    [id(DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE)]
+    HRESULT create(
+        [optional, in] VARIANT width,
+        [optional, in] VARIANT height,
+        [retval, out]  IHTMLImgElement **elem);
+}
+
+/*****************************************************************************
+ *    DispHTMLImg interface
+ */
+[
+    hidden,
+    uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLImg
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
+    void isMap(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
+    VARIANT_BOOL isMap();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
+    void useMap(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
+    BSTR useMap();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
+    BSTR mimeType();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
+    BSTR fileSize();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
+    BSTR fileCreatedDate();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
+    BSTR fileModifiedDate();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
+    BSTR fileUpdatedDate();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
+    BSTR protocol();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
+    BSTR href();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
+    BSTR nameProp();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
+    void border(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
+    VARIANT border();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
+    void vspace(LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
+    LONG vspace();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
+    void hspace(LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
+    LONG hspace();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
+    void alt(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
+    BSTR alt();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
+    void src(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
+    BSTR src();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
+    void lowsrc(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
+    BSTR lowsrc();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
+    void vrml(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
+    BSTR vrml();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
+    void dynsrc(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
+    BSTR dynsrc();
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
+    VARIANT_BOOL complete();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
+    void loop(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
+    VARIANT loop();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
+    void onabort(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
+    VARIANT onabort();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+    void width(LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+    LONG width();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+    void height(LONG v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+    LONG height();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
+    void start(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
+    BSTR start();
+
+    [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
+    void longDesc(BSTR v);
+
+    [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
+    BSTR longDesc();
+}
+
+/*****************************************************************************
+ *    IHTMLXMLHttpRequest interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051040a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLXMLHttpRequest : IDispatch
+{
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]
+    HRESULT readyState([out, retval] long *p);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]
+    HRESULT responseBody([out, retval] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]
+    HRESULT responseText([out, retval] BSTR *p);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]
+    HRESULT responseXML([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]
+    HRESULT status([out, retval] long *p);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]
+    HRESULT statusText([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([out, retval] VARIANT *p);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)] HRESULT abort();
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]
+    HRESULT open(
+            [in] BSTR bstrMethod,
+            [in] BSTR bstrUrl,
+            [in] VARIANT varAsync,
+            [in, optional] VARIANT varUser,
+            [in, optional] VARIANT varPassword);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]
+    HRESULT send([in, optional] VARIANT varBody);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]
+    HRESULT getAllResponseHeaders([out, retval] BSTR *p);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]
+    HRESULT getResponseHeader(
+            [in] BSTR bstrHeader,
+            [out, retval] BSTR *p);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]
+    HRESULT setRequestHeader(
+            [in] BSTR bstrHeader,
+            [in] BSTR bstrValue);
+}
+
+/*****************************************************************************
+ *    IHTMLXMLHttpRequest2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510482-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLXMLHttpRequest2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+    HRESULT timeout([in] long v);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+    HRESULT timeout([out, retval] long *p);
+
+    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+    HRESULT ontimeout([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+    HRESULT ontimeout([out, retval] VARIANT *p);
+}
+
+/*****************************************************************************
+ *    IHTMLXMLHttpRequestFactory interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051040c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLXMLHttpRequestFactory : IDispatch
+{
+    [id(DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE)]
+    HRESULT create([out, retval] IHTMLXMLHttpRequest **p);
+}
+
+/*****************************************************************************
+ *    DispHTMLXMLHttpRequest dispinterface
+ */
+[
+    hidden,
+    uuid(3050f596-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLXMLHttpRequest
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]
+    long readyState();
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]
+    VARIANT responseBody();
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]
+    BSTR responseText();
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]
+    IDispatch *responseXML();
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]
+    long status();
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]
+    BSTR statusText();
+
+    [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+    void onreadystatechange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+    VARIANT onreadystatechange();
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)]
+    void abort();
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]
+    void open(
+            [in] BSTR bstrMethod,
+            [in] BSTR bstrUrl,
+            [in] VARIANT varAsync,
+            [in, optional] VARIANT varUser,
+            [in, optional] VARIANT varPassword);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]
+    void send([in, optional] VARIANT varBody);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]
+    BSTR getAllResponseHeaders();
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]
+    BSTR getResponseHeader([in] BSTR bstrHeader);
+
+    [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]
+    void setRequestHeader(
+            [in] BSTR bstrHeader,
+            [in] BSTR bstrValue);
+
+    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+    void timeout(long v);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+    long timeout();
+
+    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+    void ontimeout(VARIANT v);
+
+    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+    VARIANT ontimeout();
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+
+
+    [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]
+    void addEventListener(
+            [in] BSTR type,
+            [in] IDispatch *listener,
+            [in] VARIANT_BOOL useCapture);
+
+    [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]
+    void removeEventListener(
+            [in] BSTR type,
+            [in] IDispatch *listener,
+            [in] VARIANT_BOOL useCapture);
+
+    [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]
+    VARIANT_BOOL dispatchEvent([in] IDOMEvent *evt);
+}
+
+/*****************************************************************************
+ *    IHTMLControlElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4e9-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLControlElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
+    HRESULT tabIndex([in] short v);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
+    HRESULT tabIndex([retval, out] short * p);
+
+    [id(DISPID_IHTMLCONTROLELEMENT_FOCUS)]
+    HRESULT focus();
+
+    [propput, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
+    HRESULT onblur([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
+    HRESULT onblur([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
+    HRESULT onfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
+    HRESULT onfocus([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
+    HRESULT onresize([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
+    HRESULT onresize([retval, out] VARIANT * p);
+
+    [id(DISPID_IHTMLCONTROLELEMENT_BLUR)]
+    HRESULT blur();
+
+    [id(DISPID_IHTMLCONTROLELEMENT_ADDFILTER)]
+    HRESULT addFilter([in] IUnknown* pUnk);
+
+    [id(DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER)]
+    HRESULT removeFilter([in] IUnknown* pUnk);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT), displaybind, bindable]
+    HRESULT clientHeight([retval, out] LONG * p);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH), displaybind, bindable]
+    HRESULT clientWidth([retval, out] LONG * p);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTTOP), displaybind, bindable]
+    HRESULT clientTop([retval, out] LONG * p);
+
+    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable]
+    HRESULT clientLeft([retval, out] LONG * p);
+}
+
+/*****************************************************************************
+ *    IHTMLBodyElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f1d8-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLBodyElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+    HRESULT background([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+    HRESULT background([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+    HRESULT bgProperties([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+    HRESULT bgProperties([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+    HRESULT leftMargin([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+    HRESULT leftMargin([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+    HRESULT topMargin([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+    HRESULT topMargin([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+    HRESULT rightMargin([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+    HRESULT rightMargin([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+    HRESULT bottomMargin([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+    HRESULT bottomMargin([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+    HRESULT noWrap([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+    HRESULT noWrap([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+    HRESULT bgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+    HRESULT bgColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+    HRESULT text([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+    HRESULT text([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+    HRESULT link([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+    HRESULT link([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+    HRESULT vLink([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+    HRESULT vLink([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+    HRESULT aLink([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+    HRESULT aLink([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+    HRESULT onunload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+    HRESULT onunload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+    HRESULT scroll([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+    HRESULT scroll([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+    HRESULT onbeforeunload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+    HRESULT onbeforeunload([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
+    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+}
+
+/*****************************************************************************
+ *    IHTMLBodyElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f5c5-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLBodyElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+    HRESULT onbeforeprint([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+    HRESULT onbeforeprint([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+    HRESULT onafterprint([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+    HRESULT onafterprint([retval, out] VARIANT *p);
+}
+
+[
+    hidden,
+    uuid(3050f507-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLBody
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+    void background(BSTR v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+    BSTR background();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+    void bgProperties(BSTR v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+    BSTR bgProperties();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+    void leftMargin(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+    VARIANT leftMargin();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+    void topMargin(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+    VARIANT topMargin();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+    void rightMargin(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+    VARIANT rightMargin();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+    void bottomMargin(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+    VARIANT bottomMargin();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+    void noWrap(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+    VARIANT_BOOL noWrap();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+    void bgColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+    VARIANT bgColor();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+    void text(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+    VARIANT text();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+    void link(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+    VARIANT link();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+    void vLink(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+    VARIANT vLink();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+    void aLink(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+    VARIANT aLink();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+    void onunload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+    VARIANT onunload();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+    void scroll(BSTR v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+    BSTR scroll();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+    void onselect(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+    VARIANT onselect();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+    void onbeforeunload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+    VARIANT onbeforeunload();
+
+    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
+    IHTMLTxtRange* createTextRange();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+    void onbeforeprint(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+    VARIANT onbeforeprint();
+
+    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+    void onafterprint(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+    VARIANT onafterprint();
+}
+
+[
+    uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLBody
+{
+    [default]           dispinterface DispHTMLBody;
+    [source, default]   dispinterface HTMLTextContainerEvents;
+    [source]            dispinterface HTMLTextContainerEvents2;
+                        interface IHTMLElement;
+                        interface IHTMLElement2;
+                        interface IHTMLElement3;
+                        interface IHTMLElement4;
+                        interface IHTMLUniqueName;
+                        interface IHTMLDOMNode;
+                        interface IHTMLDOMNode2;
+                        interface IHTMLControlElement;
+                        interface IHTMLTextContainer;
+                        interface IHTMLBodyElement;
+                        interface IHTMLBodyElement2;
+}
+
+/*****************************************************************************
+ *    IHTMLAnchorElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f1da-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLAnchorElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+    HRESULT href([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+    HRESULT href([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+    HRESULT target([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+    HRESULT target([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+    HRESULT rel([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+    HRESULT rel([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+    HRESULT rev([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+    HRESULT rev([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+    HRESULT urn([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+    HRESULT urn([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+    HRESULT Methods([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+    HRESULT Methods([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+    HRESULT host([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+    HRESULT host([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+    HRESULT hostname([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+    HRESULT hostname([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+    HRESULT pathname([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+    HRESULT pathname([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+    HRESULT port([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+    HRESULT port([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+    HRESULT protocol([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+    HRESULT protocol([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+    HRESULT search([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+    HRESULT search([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+    HRESULT hash([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+    HRESULT hash([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
+    HRESULT onblur([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
+    HRESULT onblur([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
+    HRESULT onfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
+    HRESULT onfocus([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
+    HRESULT protocolLong([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
+    HRESULT mimeType([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
+    HRESULT nameProp([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
+    HRESULT tabIndex([in] short v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
+    HRESULT tabIndex([retval, out] short *p);
+
+    [id(DISPID_IHTMLANCHORELEMENT_FOCUS)]
+    HRESULT focus();
+
+    [id(DISPID_IHTMLANCHORELEMENT_BLUR)]
+    HRESULT blur();
+}
+
+/*****************************************************************************
+ *    DispHTMLAnchorElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f502-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLAnchorElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+    void href(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+    BSTR href();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+    void target(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+    BSTR target();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+    void rel(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+    BSTR rel();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+    void rev(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+    BSTR rev();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+    void urn(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+    BSTR urn();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+    void Methods(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+    BSTR Methods();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+    void host(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+    BSTR host();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+    void hostname(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+    BSTR hostname();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+    void pathname(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+    BSTR pathname();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+    void port(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+    BSTR port();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+    void protocol(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+    BSTR protocol();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+    void search(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+    BSTR search();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+    void hash(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+    BSTR hash();
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
+    BSTR protocolLong();
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
+    BSTR mimeType();
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
+    BSTR nameProp();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]
+    void charset(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]
+    BSTR charset();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]
+    void coords(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]
+    BSTR coords();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]
+    void hreflang(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]
+    BSTR hreflang();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]
+    void shape(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]
+    BSTR shape();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]
+    void ie8_shape(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]
+    BSTR ie8_shape();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]
+    void ie8_coords(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]
+    BSTR ie8_coords();
+
+    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]
+    void ie8_href(BSTR v);
+
+    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]
+    BSTR ie8_href();
+}
+
+/*****************************************************************************
+ *    IHTMLLabelElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f32a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLabelElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+    HRESULT htmlFor([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+    HRESULT htmlFor([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable]
+    HRESULT accessKey([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLLabelElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f832-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLabelElement2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)]
+    HRESULT form([out, retval] IHTMLFormElement **p);
+}
+
+/*****************************************************************************
+ *    DispHTMLLabelElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f522-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLLabelElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+    void htmlFor(BSTR v);
+
+    [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+    BSTR htmlFor();
+
+    [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)]
+    IHTMLFormElement *form();
+}
+
+/*****************************************************************************
+ *    IHTMLElementCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F21F-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLElementCollection : IDispatch
+{
+    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+
+    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+    HRESULT length([in] LONG v);
+
+    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
+    HRESULT item(
+        [optional, in] VARIANT name,
+        [optional, in] VARIANT index,
+        [retval,  out] IDispatch **pdisp);
+
+    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
+    HRESULT tags(
+        [in] VARIANT tagName,
+        [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ *    DispHTMLElementCollection dispinterface
+ */
+[
+    hidden,
+    uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLElementCollection
+{
+properties:
+methods:
+    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
+    BSTR toString();
+
+    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+    void length(LONG v);
+
+    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+    LONG length();
+
+    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
+    IDispatch *item(
+            [in, optional] VARIANT name,
+            [in, optional] VARIANT index);
+
+    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
+    IDispatch *tags(
+            [in] VARIANT tagName);
+
+    [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)]
+    IDispatch *urns([in] VARIANT urn);
+
+    [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)]
+    IDispatch *namedItem([in] BSTR name);
+}
+
+/*****************************************************************************
+ *    IHTMLSelectElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f244-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLSelectElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+    HRESULT size([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+    HRESULT size([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+    HRESULT multiple([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+    HRESULT multiple([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
+    HRESULT options([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+    HRESULT selectedIndex([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+    HRESULT selectedIndex([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
+    HRESULT form([retval, out] IHTMLFormElement **p);
+
+    [id(DISPID_IHTMLSELECTELEMENT_ADD)]
+    HRESULT add(
+        [in] IHTMLElement *element,
+        [optional, in] VARIANT before);
+
+    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
+    HRESULT remove([defaultvalue(-1), in] LONG index);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+    HRESULT length([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
+    HRESULT item(
+        [optional, in] VARIANT name,
+        [optional, in] VARIANT index,
+        [retval, out] IDispatch **pdisp);
+
+    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
+    HRESULT tags(
+        [in] VARIANT tagName,
+        [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ *    DispHTMLSelectElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLSelectElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+    void size(LONG v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+    LONG size();
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+    void multiple(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+    VARIANT_BOOL multiple();
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
+    IDispatch *options();
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+    void onchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+    VARIANT onchange();
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+    void selectedIndex(LONG v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+    LONG selectedIndex();
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+    BSTR value();
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [id(DISPID_IHTMLSELECTELEMENT_ADD)]
+    void add(
+            [in] IHTMLElement *element,
+            [in, optional] VARIANT before);
+
+    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
+    void remove([in, defaultvalue(-1)] LONG index);
+
+    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+    void length(LONG v);
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+    LONG length();
+
+    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
+    IDispatch *item(
+            [in, optional] VARIANT name,
+            [in, optional] VARIANT index);
+
+    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
+    IDispatch *tags([in] VARIANT tagName);
+
+    [id(DISPID_IHTMLSELECTELEMENT2_URNS)]
+    IDispatch *urns([in] VARIANT urn);
+
+    [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)]
+    IDispatch *namedItem([in] BSTR name);
+}
+
+/*****************************************************************************
+ *    IHTMLSelectionObject interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F25A-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLSelectionObject : IDispatch
+{
+    [id(DISPID_IHTMLSELECTIONOBJECT_CREATERANGE)]
+    HRESULT createRange([retval, out] IDispatch **range);
+
+    [id(DISPID_IHTMLSELECTIONOBJECT_EMPTY)]
+    HRESULT empty();
+
+    [id(DISPID_IHTMLSELECTIONOBJECT_CLEAR)]
+    HRESULT clear();
+
+    [propget, id(DISPID_IHTMLSELECTIONOBJECT_TYPE)]
+    HRESULT type([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLOptionElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F211-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLOptionElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+    HRESULT selected([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+    HRESULT selected([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+    HRESULT defaultSelected([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+    HRESULT defaultSelected([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+    HRESULT index([in] LONG v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+    HRESULT index([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+    HRESULT text([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+    HRESULT text([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
+    HRESULT form([retval, out] IHTMLFormElement **p);
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f820-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLOptionElement3 : IDispatch
+{
+    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+    HRESULT label([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+    HRESULT label([retval, out] BSTR * p);
+}
+
+/*****************************************************************************
+ *    IHTMLOptionElementFactory interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F38C-98B5-11Cf-BB82-00AA00BDCE0B)
+]
+interface IHTMLOptionElementFactory : IDispatch
+{
+    [id(DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE)]
+    HRESULT create(
+        [optional, in] VARIANT text,
+        [optional, in] VARIANT value,
+        [optional, in] VARIANT defaultselected,
+        [optional, in] VARIANT selected,
+        [retval, out] IHTMLOptionElement **optelem);
+}
+
+/*****************************************************************************
+ *    DispHTMLOptionElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLOptionElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+    void selected(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+    VARIANT_BOOL selected();
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+    BSTR value();
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+    void defaultSelected(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+    VARIANT_BOOL defaultSelected();
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+    void index(LONG v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+    LONG index();
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+    void text(BSTR v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+    BSTR text();
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+    void label(BSTR v);
+
+    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+    BSTR label();
+}
+
+[
+    noncreatable,
+    uuid(3050f24d-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLOptionElement
+{
+    [default]           dispinterface DispHTMLOptionElement;
+    [source, default]   dispinterface HTMLElementEvents;
+    [source]            dispinterface HTMLElementEvents2;
+                        interface IHTMLElement;
+                        interface IHTMLElement2;
+                        interface IHTMLElement3;
+                        interface IHTMLElement4;
+                        interface IHTMLUniqueName;
+                        interface IHTMLDOMNode;
+                        interface IHTMLDOMNode2;
+                        interface IHTMLDatabinding;
+                        interface IHTMLOptionElement;
+                        interface IHTMLOptionElement3;
+}
+
+/*****************************************************************************
+ *    IHTMLInputElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f5d2-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLInputElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+    HRESULT status([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+    HRESULT status([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
+    HRESULT form([retval, out] IHTMLFormElement **p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+    HRESULT size([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+    HRESULT size([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+    HRESULT maxLength([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+    HRESULT maxLength([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
+    HRESULT select();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    HRESULT defaultValue([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    HRESULT defaultValue([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+    HRESULT readOnly([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
+    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+    HRESULT indeterminate([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+    HRESULT indeterminate([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+    HRESULT defaultChecked([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+    HRESULT defaultChecked([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+    HRESULT checked([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+    HRESULT checked([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+    HRESULT border([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+    HRESULT border([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+    HRESULT vspace([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+    HRESULT vspace([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+    HRESULT hspace([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+    HRESULT hspace([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+    HRESULT alt([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+    HRESULT alt([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+    HRESULT src([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+    HRESULT lowsrc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+    HRESULT lowsrc([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+    HRESULT vrml([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+    HRESULT vrml([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+    HRESULT dynsrc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+    HRESULT dynsrc([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_READYSTATE)]
+    HRESULT readyState([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
+    HRESULT complete([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+    HRESULT loop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+    HRESULT loop([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+    HRESULT onabort([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+    HRESULT onabort([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+    HRESULT width([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+    HRESULT width([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+    HRESULT height([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+    HRESULT height([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+    HRESULT start([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+    HRESULT start([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLInputTextElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f2a6-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLInputTextElement : IDispatch
+{
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_TYPE)]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
+    HRESULT status([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
+    HRESULT status([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_FORM)]
+    HRESULT form([retval, out] IHTMLFormElement **p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    HRESULT defaultValue([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    HRESULT defaultValue([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
+    HRESULT size([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
+    HRESULT size([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
+    HRESULT maxLength([in] LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
+    HRESULT maxLength([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLINPUTTEXTELEMENT_SELECT)]
+    HRESULT select();
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
+    HRESULT readOnly([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
+    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+    [id(DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE)]
+    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+}
+
+[
+    hidden,
+    uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLInputElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+    BSTR value();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+    void status(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+    VARIANT_BOOL status();
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+    void size(LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+    LONG size();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+    void maxLength(LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+    LONG maxLength();
+
+    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
+    void select();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+    void onchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+    VARIANT onchange();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+    void onselect(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+    VARIANT onselect();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    void defaultValue(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    BSTR defaultValue();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+    void readOnly(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+    VARIANT_BOOL readOnly();
+
+    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
+    IHTMLTxtRange *createTextRange();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+    void indeterminate(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+    VARIANT_BOOL indeterminate();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+    void defaultChecked(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+    VARIANT_BOOL defaultChecked();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+    void checked(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+    VARIANT_BOOL checked();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+    void border(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+    VARIANT border();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+    void vspace(LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+    LONG vspace();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+    void hspace(LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+    LONG hspace();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+    void alt(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+    BSTR alt();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+    void src(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+    BSTR src();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+    void lowsrc(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+    BSTR lowsrc();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+    void vrml(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+    BSTR vrml();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+    void dynsrc(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+    BSTR dynsrc();
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
+    VARIANT_BOOL complete();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+    void loop(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+    VARIANT loop();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+    void onabort(VARIANT v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+    VARIANT onabort();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+    void width(LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+    LONG width();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+    void height(LONG v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+    LONG height();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+    void start(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+    BSTR start();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
+    void accept(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
+    BSTR accept();
+
+    [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
+    void useMap(BSTR v);
+
+    [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
+    BSTR useMap();
+}
+
+/*****************************************************************************
+ *    IHTMLTextAreaElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f2aa-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTextAreaElement : IDispatch
+{
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+    HRESULT status([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+    HRESULT status([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
+    HRESULT form([retval, out] IHTMLFormElement **p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    HRESULT defaultValue([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    HRESULT defaultValue([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
+    HRESULT select();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+    HRESULT onchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+    HRESULT onselect([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+    HRESULT readOnly([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+    HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+    HRESULT rows([in] LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+    HRESULT rows([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+    HRESULT cols([in] LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+    HRESULT cols([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+    HRESULT wrap([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+    HRESULT wrap([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
+    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+}
+
+/*****************************************************************************
+ *    DispHTMLTextAreaElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f521-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTextAreaElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+    BSTR value();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+    void status(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+    VARIANT status();
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    void defaultValue(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+    BSTR defaultValue();
+
+    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
+    void select();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+    void onchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+    VARIANT onchange();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+    void onselect(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+    VARIANT onselect();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+    void readOnly(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+    VARIANT_BOOL readOnly();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+    void rows(LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+    LONG rows();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+    void cols(LONG v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+    LONG cols();
+
+    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+    void wrap(BSTR v);
+
+    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+    BSTR wrap();
+
+    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
+    IHTMLTxtRange *createTextRange();
+}
+
+/*****************************************************************************
+ *    IHTMLButtonElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f2bb-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLButtonElement : IDispatch
+{
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)]
+    HRESULT type([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+    HRESULT name([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+    HRESULT status([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+    HRESULT status([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([out, retval] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)]
+    HRESULT form([out, retval] IHTMLFormElement **p);
+
+    [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)]
+    HRESULT createTextRange([out, retval] IHTMLTxtRange **range);
+}
+
+/*****************************************************************************
+ *    DispHTMLButtonElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f51f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLButtonElement
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+    BSTR value();
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+    void status(VARIANT v);
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+    VARIANT status();
+
+    [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)]
+    IHTMLTxtRange *createTextRange();
+}
+
+/*****************************************************************************
+ *    IHTMLHeadElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f81d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLHeadElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+    HRESULT profile([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+    HRESULT profile([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLHeadElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051042f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLHeadElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+    HRESULT profile([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+    HRESULT profile([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLTitleElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f322-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTitleElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+    HRESULT text([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+    HRESULT text([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLMetaElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f203-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLMetaElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+    HRESULT httpEquiv([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+    HRESULT httpEquiv([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+    HRESULT content([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+    HRESULT content([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+    HRESULT name([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+    HRESULT url([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+    HRESULT url([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+    HRESULT charset([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+    HRESULT charset([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLMetaElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f81f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLMetaElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+    HRESULT scheme([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+    HRESULT scheme([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLMetaElement3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510495-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLMetaElement3 : IDispatch
+{
+    [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+    HRESULT url([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+    HRESULT url([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLHeadElement interface
+ */
+[
+    hidden,
+    uuid(3050f561-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLHeadElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+    void profile(BSTR v);
+
+    [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+    BSTR profile();
+
+    [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+    void ie8_profile(BSTR v);
+
+    [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+    BSTR ie8_profile();
+}
+
+/*****************************************************************************
+ *    DispHTMLTitleElement interface
+ */
+[
+    hidden,
+    uuid(3050f516-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTitleElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+    void text(BSTR v);
+
+    [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+    BSTR text();
+}
+
+/*****************************************************************************
+ *    DispHTMLMetaElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f517-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLMetaElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+    void httpEquiv(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+    BSTR httpEquiv();
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+    void content(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+    BSTR content();
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+    void url(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+    BSTR url();
+
+    [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+    void charset(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+    BSTR charset();
+
+    [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+    void scheme(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+    BSTR scheme();
+
+    [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+    void ie8_url(BSTR v);
+
+    [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+    BSTR ie8_url();
+}
+
+/*****************************************************************************
+ *    DispHTMLUnknownElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLUnknownElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ *    IOmHistory interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(FECEAAA2-8405-11CF-8BA1-00AA00476DA6)
+]
+interface IOmHistory : IDispatch
+{
+    [propget, id(DISPID_IOMHISTORY_LENGTH)]
+    HRESULT length([retval, out] short *p);
+
+    [id(DISPID_IOMHISTORY_BACK)]
+    HRESULT back([optional, in] VARIANT *pvargdistance);
+
+    [id(DISPID_IOMHISTORY_FORWARD)]
+    HRESULT forward([optional, in] VARIANT *pvargdistance);
+
+    [id(DISPID_IOMHISTORY_GO)]
+    HRESULT go([optional, in] VARIANT *pvargdistance);
+}
+
+[
+    noncreatable,
+    uuid(FECEAAA3-8405-11cf-8BA1-00AA00476DA6)
+]
+coclass HTMLHistory
+{
+    [default]           interface IOmHistory;
+}
+
+/*****************************************************************************
+ *    IHTMLMimeTypesCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F3FC-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLMimeTypesCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+}
+
+[
+    noncreatable,
+    uuid(3050f3fe-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass CMimeTypes
+{
+    [default]           interface IHTMLMimeTypesCollection;
+}
+
+/*****************************************************************************
+ *    IHTMLPluginsCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F3FD-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLPluginsCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
+    HRESULT refresh([defaultvalue(0), in] VARIANT_BOOL reload);
+}
+
+[
+    hidden,
+    uuid(3050f54a-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispCPlugins
+{
+ properties:
+methods:
+    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
+    long length();
+
+    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
+    void refresh([defaultvalue(0), in] VARIANT_BOOL reload);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+}
+
+[
+    noncreatable,
+    uuid(3050f3ff-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass CPlugins
+{
+    [default]  dispinterface DispCPlugins;
+               interface IHTMLPluginsCollection;
+               interface IHTMLDOMConstructor;
+}
+
+/*****************************************************************************
+ *    IHTMLOpsProfile interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F401-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLOpsProfile : IDispatch
+{
+    [id(DISPID_IHTMLOPSPROFILE_ADDREQUEST)]
+    HRESULT addRequest(
+        [in] BSTR name,
+        [optional, in] VARIANT reserved,
+        [retval, out] VARIANT_BOOL *success);
+
+    [id(DISPID_IHTMLOPSPROFILE_CLEARREQUEST)]
+    HRESULT clearRequest();
+
+    [id(DISPID_IHTMLOPSPROFILE_DOREQUEST)]
+    HRESULT doRequest(
+        [in] VARIANT usage,
+        [optional, in] VARIANT fname,
+        [optional, in] VARIANT domain,
+        [optional, in] VARIANT path,
+        [optional, in] VARIANT expire,
+        [optional, in] VARIANT reserved);
+
+    [id(DISPID_IHTMLOPSPROFILE_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR name,
+        [retval, out] BSTR *value);
+
+    [id(DISPID_IHTMLOPSPROFILE_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR name,
+        [in] BSTR value,
+        [optional, in] VARIANT prefs,
+        [retval, out] VARIANT_BOOL *success);
+
+    [id(DISPID_IHTMLOPSPROFILE_COMMITCHANGES)]
+    HRESULT commitChanges([retval, out] VARIANT_BOOL *success);
+
+    [id(DISPID_IHTMLOPSPROFILE_ADDREADREQUEST)]
+    HRESULT addReadRequest(
+        [in] BSTR name,
+        [optional, in] VARIANT reserved,
+        [retval, out] VARIANT_BOOL *success);
+
+    [id(DISPID_IHTMLOPSPROFILE_DOREADREQUEST)]
+    HRESULT doReadRequest(
+        [in] VARIANT usage,
+        [optional, in] VARIANT fname,
+        [optional, in] VARIANT domain,
+        [optional, in] VARIANT path,
+        [optional, in] VARIANT expire,
+        [optional, in] VARIANT reserved);
+
+    [id(DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST)]
+    HRESULT doWriteRequest([retval, out] VARIANT_BOOL *success);
+}
+
+[
+    noncreatable,
+    uuid(3050f402-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass COpsProfile
+{
+    [default]           interface IHTMLOpsProfile;
+}
+
+/*****************************************************************************
+ *    IOmNavigator interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6)
+]
+interface IOmNavigator : IDispatch
+{
+    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
+    HRESULT appCodeName([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
+    HRESULT appName([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
+    HRESULT appVersion([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
+    HRESULT userAgent([retval, out] BSTR *p);
+
+    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
+    HRESULT javaEnabled([retval, out] VARIANT_BOOL *enabled);
+
+    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
+    HRESULT taintEnabled([retval, out] VARIANT_BOOL *enabled);
+
+    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
+    HRESULT mimeTypes([retval, out] IHTMLMimeTypesCollection **p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
+    HRESULT plugins([retval, out] IHTMLPluginsCollection **p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
+    HRESULT cookieEnabled([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
+    HRESULT opsProfile([retval, out] IHTMLOpsProfile **p);
+
+    [id(DISPID_IOMNAVIGATOR_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+
+    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
+    HRESULT cpuClass([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
+    HRESULT systemLanguage([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]
+    HRESULT browserLanguage([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
+    HRESULT userLanguage([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
+    HRESULT platform([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
+    HRESULT appMinorVersion([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]
+    HRESULT connectionSpeed([retval, out] LONG *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
+    HRESULT onLine([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
+    HRESULT userProfile([retval, out] IHTMLOpsProfile **p);
+}
+
+/*****************************************************************************
+ *    DispHTMLNavigator dispinterface
+ */
+[
+    hidden,
+    uuid(3050f54c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLNavigator
+{
+properties:
+methods:
+    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
+    BSTR appCodeName();
+
+    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
+    BSTR appName();
+
+    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
+    BSTR appVersion();
+
+    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
+    BSTR userAgent();
+
+    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
+    VARIANT_BOOL javaEnabled();
+
+    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
+    VARIANT_BOOL taintEnabled();
+
+    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
+    IHTMLMimeTypesCollection *mimeTypes();
+
+    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
+    IHTMLPluginsCollection *plugins();
+
+    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
+    VARIANT_BOOL cookieEnabled();
+
+    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
+    IHTMLOpsProfile *opsProfile();
+
+    [id(DISPID_IOMNAVIGATOR_TOSTRING)]
+    BSTR toString();
+
+    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
+    BSTR cpuClass();
+
+    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
+    BSTR systemLanguage();
+
+    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]
+    BSTR browserLanguage();
+
+    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
+    BSTR userLanguage();
+
+    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
+    BSTR platform();
+
+    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
+    BSTR appMinorVersion();
+
+    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]
+    LONG connectionSpeed();
+
+    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
+    VARIANT_BOOL onLine();
+
+    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
+    IHTMLOpsProfile *userProfile();
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+    noncreatable,
+    uuid(FECEAAA6-8405-11cf-8BA1-00AA00476DA6)
+]
+coclass HTMLNavigator
+{
+    [default]  dispinterface DispHTMLNavigator;
+               interface IOmNavigator;
+}
+
+/*****************************************************************************
+ *    IHTMLLocation interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(163BB1E0-6E00-11cf-837A-48DC04C10000)
+]
+interface IHTMLLocation : IDispatch
+{
+    [propput, id(DISPID_IHTMLLOCATION_HREF)]
+    HRESULT href([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HREF)]
+    HRESULT href([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+    HRESULT protocol([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+    HRESULT protocol([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_HOST)]
+    HRESULT host([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HOST)]
+    HRESULT host([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+    HRESULT hostname([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+    HRESULT hostname([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_PORT)]
+    HRESULT port([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_PORT)]
+    HRESULT port([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
+    HRESULT pathname([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
+    HRESULT pathname([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
+    HRESULT search([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
+    HRESULT search([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLLOCATION_HASH)]
+    HRESULT hash([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HASH)]
+    HRESULT hash([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLLOCATION_RELOAD)]
+    HRESULT reload([defaultvalue(0), in] VARIANT_BOOL flag);
+
+    [id(DISPID_IHTMLLOCATION_REPLACE)]
+    HRESULT replace([in] BSTR bstr);
+
+    [id(DISPID_IHTMLLOCATION_ASSIGN)]
+    HRESULT assign([in] BSTR bstr);
+
+    [id(DISPID_IHTMLLOCATION_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+}
+
+/*****************************************************************************
+ *    DispHTMLHistory dispinterface
+ */
+[
+    hidden,
+    uuid(3050f549-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLHistory
+{
+properties:
+methods:
+    [propget, id(DISPID_IOMHISTORY_LENGTH)]
+    short length();
+
+    [id(DISPID_IOMHISTORY_BACK)]
+    void back([optional, in] VARIANT *pvargdistance);
+
+    [id(DISPID_IOMHISTORY_FORWARD)]
+    void forward([optional, in] VARIANT *pvargdistance);
+
+    [id(DISPID_IOMHISTORY_GO)]
+    void go([optional, in] VARIANT *pvargdistance);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+}
+
+/*****************************************************************************
+ *    DispHTMLLocation dispinterface
+ */
+[
+    hidden,
+    uuid(3050f54e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLLocation
+{
+properties:
+methods:
+    [propput, id(DISPID_IHTMLLOCATION_HREF)]
+    void href(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HREF)]
+    BSTR href();
+
+    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+    void protocol(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+    BSTR protocol();
+
+    [propput, id(DISPID_IHTMLLOCATION_HOST)]
+    void host(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HOST)]
+    BSTR host();
+
+    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+    void hostname(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+    BSTR hostname();
+
+    [propput, id(DISPID_IHTMLLOCATION_PORT)]
+    void port(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_PORT)]
+    BSTR port();
+
+    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
+    void pathname(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
+    BSTR pathname();
+
+    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
+    void search(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
+    BSTR search();
+
+    [propput, id(DISPID_IHTMLLOCATION_HASH)]
+    void hash(BSTR v);
+
+    [propget, id(DISPID_IHTMLLOCATION_HASH)]
+    BSTR hash();
+
+    [id(DISPID_IHTMLLOCATION_RELOAD)]
+    void reload([in, defaultvalue(0)] VARIANT_BOOL flag);
+
+    [id(DISPID_IHTMLLOCATION_REPLACE)]
+    void replace([in] BSTR bstr);
+
+    [id(DISPID_IHTMLLOCATION_ASSIGN)]
+    void assign([in] BSTR bstr);
+
+    [id(DISPID_IHTMLLOCATION_TOSTRING)]
+    BSTR toString();
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+    noncreatable,
+    uuid(163BB1E1-6E00-11cf-837A-48DC04C10000)
+]
+coclass HTMLLocation
+{
+    [default]  dispinterface DispHTMLLocation;
+               interface IHTMLLocation;
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4ce-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLBookmarkCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH), hidden]
+    HRESULT length([out, retval] LONG *p);
+
+    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM), hidden, restricted]
+    HRESULT _newEnum([out, retval] IUnknown **p);
+
+    [id(DISPID_IHTMLBOOKMARKCOLLECTION_ITEM)]
+    HRESULT item(
+            [in] LONG index,
+            [out, retval] VARIANT *pVarBookmark);
+}
+
+/*****************************************************************************
+ *    IHTMLDataTransfer interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDataTransfer : IDispatch
+{
+    [id(DISPID_IHTMLDATATRANSFER_SETDATA)]
+    HRESULT setData(
+            [in] BSTR format,
+            [in] VARIANT *data,
+            [out, retval] VARIANT_BOOL *pret);
+
+    [id(DISPID_IHTMLDATATRANSFER_GETDATA)]
+    HRESULT getData(
+            [in] BSTR format,
+            [out, retval] VARIANT *pvarRet);
+
+    [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)]
+    HRESULT clearData(
+            [in] BSTR format,
+            [out, retval] VARIANT_BOOL *pret);
+
+    [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
+    HRESULT dropEffect([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
+    HRESULT dropEffect([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
+    HRESULT effectAllowed([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
+    HRESULT effectAllowed([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLEventObj interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050F32D-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLEventObj : IDispatch
+{
+    [propget, id(DISPID_IHTMLEVENTOBJ_SRCELEMENT)]
+    HRESULT srcElement([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_ALTKEY)]
+    HRESULT altKey([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_CTRLKEY)]
+    HRESULT ctrlKey([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_SHIFTKEY)]
+    HRESULT shiftKey([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+    HRESULT returnValue([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+    HRESULT returnValue([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+    HRESULT cancelBubble([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+    HRESULT cancelBubble([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_FROMELEMENT)]
+    HRESULT fromElement([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_TOELEMENT)]
+    HRESULT toElement([retval, out] IHTMLElement **p);
+
+    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+    HRESULT keyCode([in] LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+    HRESULT keyCode([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_BUTTON)]
+    HRESULT button([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_TYPE)]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_QUALIFIER)]
+    HRESULT qualifier([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_REASON)]
+    HRESULT reason([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_X)]
+    HRESULT x([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_Y)]
+    HRESULT y([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTX)]
+    HRESULT clientX([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTY)]
+    HRESULT clientY([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETX)]
+    HRESULT offsetX([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETY)]
+    HRESULT offsetY([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENX)]
+    HRESULT screenX([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENY)]
+    HRESULT screenY([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_SRCFILTER)]
+    HRESULT srcFilter([retval, out] IDispatch **p);
+}
+
+/*****************************************************************************
+ *    DispCEventObj dispinterface
+ */
+[
+    hidden,
+    uuid(3050f558-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispCEventObj
+{
+properties:
+methods:
+    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+    void returnValue(VARIANT v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+    VARIANT returnValue();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+    void cancelBubble(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+    VARIANT_BOOL cancelBubble();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+    void keyCode(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+    LONG keyCode();
+
+    [id(DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE)]
+    void setAttribute(
+            [in] BSTR strAttributeName,
+            [in] VARIANT AttributeValue,
+            [in, defaultvalue(1)] LONG lFlags);
+
+    [id(DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE)]
+    VARIANT getAttribute(
+            [in] BSTR strAttributeName,
+            [in, defaultvalue(0)] LONG lFlags);
+
+    [id(DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE)]
+    VARIANT_BOOL removeAttribute(
+            [in] BSTR strAttributeName,
+            [in, defaultvalue(1)] LONG lFlags);
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
+    void propertyName(BSTR v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
+    BSTR propertyName();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
+    void bookmarks(IHTMLBookmarkCollection *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
+    IHTMLBookmarkCollection *bookmarks();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
+    void recordset(IDispatch *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
+    IDispatch *recordset();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
+    void dataFld(BSTR v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
+    BSTR dataFld();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
+    void boundElements(IHTMLElementCollection *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
+    IHTMLElementCollection *boundElements();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
+    void repeat(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
+    VARIANT_BOOL repeat();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
+    void srcUrn(BSTR v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
+    BSTR srcUrn();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
+    void srcElement(IHTMLElement *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
+    IHTMLElement *srcElement();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
+    void altKey(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
+    VARIANT_BOOL altKey();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
+    void ctrlKey(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
+    VARIANT_BOOL ctrlKey();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
+    void shiftKey(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
+    VARIANT_BOOL shiftKey();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
+    void fromElement(IHTMLElement *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
+    IHTMLElement *fromElement();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
+    void toElement(IHTMLElement *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
+    IHTMLElement *toElement();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
+    void button(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
+    LONG button();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
+    void qualifier(BSTR v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
+    BSTR qualifier();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_REASON)]
+    void reason(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_REASON)]
+    LONG reason();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_X)]
+    void x(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_X)]
+    LONG x();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_Y)]
+    void y(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_Y)]
+    LONG y();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
+    void clientX(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
+    LONG clientX();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
+    void clientY(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
+    LONG clientY();
+    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
+    void offsetX(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
+    LONG offsetX();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
+    void offsetY(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
+    LONG offsetY();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
+    void screenX(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
+    LONG screenX();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
+    void screenY(LONG v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
+    LONG screenY();
+
+    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
+    void srcFilter(IDispatch *v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
+    IDispatch *srcFilter();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ2_DATATRANSFER)]
+    IHTMLDataTransfer *dataTransfer();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW)]
+    VARIANT_BOOL contentOverflow();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
+    void shiftLeft(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
+    VARIANT_BOOL shiftLeft();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
+    void altLeft(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
+    VARIANT_BOOL altLeft();
+
+    [propput, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
+    void ctrlLeft(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
+    VARIANT_BOOL ctrlLeft();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE), hidden, restricted, nonbrowsable]
+    LONG_PTR imeCompositionChange();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND), hidden, restricted, nonbrowsable]
+    LONG_PTR imeNotifyCommand();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA), hidden, restricted, nonbrowsable]
+    LONG_PTR imeNotifyData();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUEST), hidden, restricted, nonbrowsable]
+    LONG_PTR imeRequest();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA), hidden, restricted, nonbrowsable]
+    LONG_PTR imeRequestData();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT), hidden, restricted, nonbrowsable]
+    LONG_PTR keyboardLayout();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE)]
+    LONG behaviorCookie();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORPART)]
+    LONG behaviorPart();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ3_NEXTPAGE)]
+    BSTR nextPage();
+
+    [propget, id(DISPID_IHTMLEVENTOBJ4_WHEELDELTA)]
+    LONG wheelDelta();
+}
+
+/*****************************************************************************
+ *    IHTMLFramesCollection2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(332C4426-26CB-11D0-B483-00C04FD90119)
+]
+interface IHTMLFramesCollection2 : IDispatch
+{
+    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
+    HRESULT item(
+        [in] VARIANT *pvarIndex,
+        [retval, out] VARIANT *pvarResult);
+
+    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
+    HRESULT length([retval, out] LONG *p);
+}
+
+/*****************************************************************************
+ *    IHTMLScreen interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f35C-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLScreen : IDispatch
+{
+    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
+    HRESULT colorDepth([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+    HRESULT bufferDepth([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+    HRESULT bufferDepth([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
+    HRESULT width([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
+    HRESULT height([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+    HRESULT updateInterval([in] LONG v);
+
+    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+    HRESULT updateInterval([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
+    HRESULT availHeight([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
+    HRESULT availWidth([retval, out] LONG *p);
+
+    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
+    HRESULT fontSmoothingEnabled([retval, out] VARIANT_BOOL *p);
+}
+
+/*****************************************************************************
+ *    IHTMLWindow2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(332C4427-26CB-11D0-B483-00C04FD90119)
+]
+interface IHTMLWindow2 : IHTMLFramesCollection2
+{
+    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
+    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+    HRESULT defaultStatus([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+    HRESULT defaultStatus([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
+    HRESULT status([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
+    HRESULT status([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLWINDOW2_SETTIMEOUT)]
+    HRESULT setTimeout(
+        [in] BSTR expression,
+        [in] LONG msec,
+        [optional, in] VARIANT *language,
+        [retval, out] LONG *timerID);
+
+    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
+    HRESULT clearTimeout([in] LONG timerID);
+
+    [id(DISPID_IHTMLWINDOW2_ALERT)]
+    HRESULT alert([defaultvalue(""), in] BSTR message);
+
+    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
+    HRESULT confirm(
+        [defaultvalue(""), in] BSTR message,
+        [retval, out] VARIANT_BOOL *confirmed);
+
+    [id(DISPID_IHTMLWINDOW2_PROMPT)]
+    HRESULT prompt(
+        [defaultvalue(""), in] BSTR message,
+        [defaultvalue("undefined"), in] BSTR defstr,
+        [retval, out] VARIANT *textdata);
+
+    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
+    HRESULT Image([retval, out] IHTMLImageElementFactory **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
+    HRESULT location([retval, out] IHTMLLocation **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
+    HRESULT history([retval, out] IOmHistory **p);
+
+    [id(DISPID_IHTMLWINDOW2_CLOSE)]
+    HRESULT close();
+
+    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
+    HRESULT opener([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
+    HRESULT opener([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
+    HRESULT navigator([retval, out] IOmNavigator **p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
+    HRESULT parent([retval, out] IHTMLWindow2 **p);
+
+    [id(DISPID_IHTMLWINDOW2_OPEN)]
+    HRESULT open(
+        [defaultvalue(""), in] BSTR url,
+        [defaultvalue(""), in] BSTR name,
+        [defaultvalue(""), in] BSTR features,
+        [defaultvalue(0), in] VARIANT_BOOL replace,
+        [retval, out] IHTMLWindow2 **pomWindowResult);
+
+    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
+    HRESULT self([retval, out] IHTMLWindow2 **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
+    HRESULT top([retval, out] IHTMLWindow2 **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
+    HRESULT window([retval, out] IHTMLWindow2 **p);
+
+    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
+    HRESULT navigate([in] BSTR url);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
+    HRESULT onfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
+    HRESULT onfocus([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR)]
+    HRESULT onblur([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR)]
+    HRESULT onblur([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD)]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD)]
+    HRESULT onload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
+    HRESULT onbeforeunload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
+    HRESULT onbeforeunload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
+    HRESULT onunload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
+    HRESULT onunload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONHELP)]
+    HRESULT onhelp([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONHELP)]
+    HRESULT onhelp([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONERROR)]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONERROR)]
+    HRESULT onerror([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
+    HRESULT onresize([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
+    HRESULT onresize([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
+    HRESULT onscroll([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
+    HRESULT onscroll([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT)]
+    HRESULT document([retval, out] IHTMLDocument2 **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
+    HRESULT event([retval, out] IHTMLEventObj **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **p);
+
+    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
+    HRESULT showModalDialog(
+        [in] BSTR dialog,
+        [optional, in] VARIANT *varArgIn,
+        [optional, in] VARIANT *varOptions,
+        [retval, out] VARIANT *varArgOut);
+
+    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
+    HRESULT showHelp(
+        [in] BSTR helpURL,
+        [optional, in] VARIANT helpArg,
+        [defaultvalue(""), in] BSTR features);
+
+    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
+    HRESULT screen([retval, out] IHTMLScreen **p);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
+    HRESULT Option([retval, out] IHTMLOptionElementFactory **p);
+
+    [id(DISPID_IHTMLWINDOW2_FOCUS)]
+    HRESULT focus();
+
+    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
+    HRESULT closed([retval, out] VARIANT_BOOL *p);
+
+    [id(DISPID_IHTMLWINDOW2_BLUR)]
+    HRESULT blur();
+
+    [id(DISPID_IHTMLWINDOW2_SCROLL)]
+    HRESULT scroll([in] LONG x, [in] LONG y);
+
+    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
+    HRESULT clientInformation([retval, out] IOmNavigator **p);
+
+    [id(DISPID_IHTMLWINDOW2_SETINTERVAL)]
+    HRESULT setInterval([
+        in] BSTR expression,
+        [in] LONG msec,
+        [optional, in] VARIANT *language,
+        [retval, out] LONG *timerID);
+
+    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
+    HRESULT clearInterval([in] LONG timerID);
+
+    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+    HRESULT offscreenBuffering([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+    HRESULT offscreenBuffering([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
+    HRESULT execScript(
+        [in] BSTR scode,
+        [defaultvalue("JScript"), in] BSTR language,
+        [retval, out] VARIANT *pvarRet);
+
+    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+
+    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
+    HRESULT scrollBy([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
+    HRESULT scrollTo([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_MOVETO)]
+    HRESULT moveTo([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
+    HRESULT moveBy([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
+    HRESULT resizeTo([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
+    HRESULT resizeBy([in] LONG x, [in] LONG y);
+
+    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
+    HRESULT external([retval, out] IDispatch **p);
+}
+
+/*****************************************************************************
+ *    IHTMLWindow3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow3 : IDispatch
+{
+    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
+    HRESULT screenLeft([out, retval] LONG *p);
+
+    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
+    HRESULT screenTop([out, retval] LONG *p);
+
+    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
+    HRESULT attachEvent(
+            [in] BSTR event,
+            [in] IDispatch *pDisp,
+            [out, retval] VARIANT_BOOL *pfResult);
+
+    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
+    HRESULT detachEvent(
+            [in] BSTR event,
+            [in] IDispatch *pDisp);
+
+    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
+    HRESULT setTimeout(
+            [in] VARIANT *expression,
+            [in] LONG msec,
+            [in, optional] VARIANT *language,
+            [out, retval] LONG *timerID);
+
+    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
+    HRESULT setInterval(
+            [in] VARIANT *expression,
+            [in] LONG msec,
+            [in, optional] VARIANT *language,
+            [out, retval] LONG *timerID);
+
+    [id(DISPID_IHTMLWINDOW3_PRINT)]
+    HRESULT print();
+
+    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+    HRESULT onbeforeprint([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+    HRESULT onbeforeprint([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+    HRESULT onafterprint([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+    HRESULT onafterprint([out, retval] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
+    HRESULT clipboardData([out, retval] IHTMLDataTransfer **p);
+
+    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
+    HRESULT showModelessDialog(
+            [in, defaultvalue("")] BSTR url,
+            [in, optional] VARIANT *varArgIn,
+            [in, optional] VARIANT *options,
+            [out, retval] IHTMLWindow2 **pDialog);
+}
+
+/*****************************************************************************
+ *    IHTMLWindow4 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f6cf-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow4 : IDispatch
+{
+    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
+    HRESULT createPopup([optional, in] VARIANT* varArgIn,
+                        [retval, out] IDispatch** ppPopup);
+
+    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
+    HRESULT frameElement([retval, out] IHTMLFrameBase* * p);
+}
+
+/*****************************************************************************
+ *    IHTMLWindow5 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051040e-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow5 : IDispatch
+{
+    [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+    HRESULT XMLHttpRequest([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+    HRESULT XMLHttpRequest([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ *    IHTMLWindow6 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510453-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow6 : IDispatch
+{
+    [propput, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]
+    HRESULT XDomainRequest([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]
+    HRESULT XDomainRequest([out, retval] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
+    HRESULT sessionStorage([out, retval] IHTMLStorage **p);
+
+    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
+    HRESULT localStorage([out, retval] IHTMLStorage **p);
+
+    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+    HRESULT onhashchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+    HRESULT onhashchange([out, retval] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
+    HRESULT maxConnectionsPerServer([out, retval] long *p);
+
+    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
+    HRESULT postMessage(
+            [in] BSTR msg,
+            [in, optional] VARIANT targetOrigin);
+
+    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
+    HRESULT toStaticHTML(
+            [in] BSTR bstrHTML,
+            [out, retval] BSTR *pbstrStaticHTML);
+
+    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+    HRESULT onmessage([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+    HRESULT onmessage([out, retval] VARIANT *p);
+
+    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
+    HRESULT msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
+}
+
+/*****************************************************************************
+ *    DispHTMLScreen dispinterface
+ */
+[
+    hidden,
+    uuid(3050f591-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLScreen
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
+    long colorDepth();
+
+    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+    void bufferDepth(long v);
+
+    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+    long bufferDepth();
+
+    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
+    long width();
+
+    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
+    long height();
+
+    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+    void updateInterval(long v);
+
+    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+    long updateInterval();
+
+    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
+    long availHeight();
+
+    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
+    long availWidth();
+
+    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
+    VARIANT_BOOL fontSmoothingEnabled();
+
+    [propget, id(DISPID_IHTMLSCREEN2_LOGICALXDPI)]
+    long logicalXDPI();
+
+    [propget, id(DISPID_IHTMLSCREEN2_LOGICALYDPI)]
+    long logicalYDPI();
+
+    [propget, id(DISPID_IHTMLSCREEN2_DEVICEXDPI)]
+    long deviceXDPI();
+
+    [propget, id(DISPID_IHTMLSCREEN2_DEVICEYDPI)]
+    long deviceYDPI();
+
+    [propget, id(DISPID_IHTMLSCREEN3_SYSTEMXDPI)]
+    long systemXDPI();
+
+    [propget, id(DISPID_IHTMLSCREEN3_SYSTEMYDPI)]
+    long systemYDPI();
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+    IDispatch *constructor();
+}
+
+/*****************************************************************************
+ *    DispHTMLWindow2 dispinterface
+ */
+[
+    hidden,
+    uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLWindow2
+{
+properties:
+methods:
+    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
+    VARIANT item([in] VARIANT *pvarIndex);
+
+    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
+    LONG length();
+
+    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
+    IHTMLFramesCollection2 *frames();
+
+    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+    void defaultStatus(BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+    BSTR defaultStatus();
+
+    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
+    void status(BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
+    BSTR status();
+
+    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
+    void clearTimeout([in] LONG timerID);
+
+    [id(DISPID_IHTMLWINDOW2_ALERT)]
+    void alert([in, defaultvalue("")] BSTR message);
+
+    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
+    VARIANT_BOOL confirm([in, defaultvalue("")] BSTR message);
+
+    [id(DISPID_IHTMLWINDOW2_PROMPT)]
+    VARIANT prompt(
+            [in, defaultvalue("")] BSTR message,
+            [in, defaultvalue("undefined")] BSTR defstr);
+
+    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
+    IHTMLImageElementFactory *Image();
+
+    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
+    IHTMLLocation *location();
+
+    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
+    IOmHistory *history();
+
+    [id(DISPID_IHTMLWINDOW2_CLOSE)]
+    void close();
+
+    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
+    void opener(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
+    VARIANT opener();
+
+    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
+    IOmNavigator *navigator();
+
+    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
+    BSTR name();
+
+    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
+    IHTMLWindow2 *parent();
+
+    [id(DISPID_IHTMLWINDOW2_OPEN)]
+    IHTMLWindow2 *open(
+            [in, defaultvalue("")] BSTR url,
+            [in, defaultvalue("")] BSTR name,
+            [in, defaultvalue("")] BSTR features,
+            [in, defaultvalue(0)]  VARIANT_BOOL replace);
+
+    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
+    IHTMLWindow2 *self();
+
+    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
+    IHTMLWindow2 *top();
+
+    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
+    IHTMLWindow2 *window();
+
+    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
+    void navigate([in] BSTR url);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+    void onfocus(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+    VARIANT onfocus();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+    void onblur(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+    VARIANT onblur();
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+    void onbeforeunload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+    VARIANT onbeforeunload();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+    void onunload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+    VARIANT onunload();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+    void onhelp(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+    VARIANT onhelp();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+    void onresize(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+    VARIANT onresize();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+    void onscroll(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+    VARIANT onscroll();
+
+    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
+    IHTMLDocument2 *document();
+
+    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
+    IHTMLEventObj *event();
+
+    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
+    IUnknown *_newEnum();
+
+    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
+    VARIANT showModalDialog(
+            [in] BSTR dialog,
+            [in, optional] VARIANT *varArgIn,
+            [in, optional] VARIANT *varOptions);
+
+    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
+    void showHelp(
+            [in] BSTR helpURL,
+            [in, optional] VARIANT helpArg,
+            [in, defaultvalue("")] BSTR features);
+
+    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
+    IHTMLScreen *screen();
+
+    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
+    IHTMLOptionElementFactory *Option();
+
+    [id(DISPID_IHTMLWINDOW2_FOCUS)]
+    void focus();
+
+    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
+    VARIANT_BOOL closed();
+
+    [id(DISPID_IHTMLWINDOW2_BLUR)]
+    void blur();
+
+    [id(DISPID_IHTMLWINDOW2_SCROLL)]
+    void scroll([in] LONG x, [in] LONG y);
+
+    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
+    IOmNavigator *clientInformation();
+
+    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
+    void clearInterval([in] LONG timerID);
+
+    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+    void offscreenBuffering(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+    VARIANT offscreenBuffering();
+
+    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
+    VARIANT execScript(
+            [in] BSTR _code,
+            [in, defaultvalue("JScript")] BSTR language);
+
+    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
+    BSTR toString();
+
+    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
+    void scrollBy([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
+    void scrollTo([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_MOVETO)]
+    void moveTo([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
+    void moveBy([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
+    void resizeTo([in] LONG x, [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
+    void resizeBy([in] LONG x, [in] LONG y);
+
+    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
+    IDispatch *external();
+
+    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
+    LONG screenLeft();
+
+    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
+    LONG screenTop();
+
+    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
+    VARIANT_BOOL attachEvent(
+             [in] BSTR event,
+             [in] IDispatch *pDisp);
+
+    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
+    void detachEvent(
+            [in] BSTR event,
+            [in] IDispatch *pDisp);
+
+    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
+    LONG setTimeout(
+            [in] VARIANT *expression,
+            [in] LONG msec,
+            [in, optional] VARIANT *language);
+
+    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
+    LONG setInterval(
+            [in] VARIANT *expression,
+            [in] LONG msec,
+            [in, optional] VARIANT *language);
+
+    [id(DISPID_IHTMLWINDOW3_PRINT)]
+    void print();
+
+    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+    void onbeforeprint(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+    VARIANT onbeforeprint();
+
+    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+    void onafterprint(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+    VARIANT onafterprint();
+
+    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
+    IHTMLDataTransfer *clipboardData();
+
+    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
+    IHTMLWindow2 *showModelessDialog(
+            [in, defaultvalue("")] BSTR url,
+            [in, optional] VARIANT *varArgIn,
+            [in, optional] VARIANT *options);
+
+    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
+    IDispatch *createPopup([in, optional] VARIANT *varArgIn);
+
+    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
+    IHTMLFrameBase *frameElement();
+
+    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
+    IHTMLStorage *sessionStorage();
+
+    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
+    IHTMLStorage *localStorage();
+
+    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+    void onhashchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+    VARIANT onhashchange();
+
+    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
+    long maxConnectionsPerServer();
+
+    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
+    void postMessage(
+            [in] BSTR msg,
+            [in, optional] VARIANT targetOrigin);
+
+    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
+    BSTR toStaticHTML([in] BSTR bstrHTML);
+
+    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+    void onmessage(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+    VARIANT onmessage();
+
+    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
+    void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ *    DispHTMLWindowProxy dispinterface
+ */
+[
+    hidden,
+    uuid(3050f55e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLWindowProxy
+{
+properties:
+methods:
+    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
+    VARIANT item([in] VARIANT* pvarIndex);
+
+    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
+    LONG length();
+
+    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
+    IHTMLFramesCollection2* frames();
+
+    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+    void defaultStatus(BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+    BSTR defaultStatus();
+
+    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
+    void status(BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
+    BSTR status();
+
+    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
+    void clearTimeout([in] LONG timerID);
+
+    [id(DISPID_IHTMLWINDOW2_ALERT)]
+    void alert([defaultvalue(""), in] BSTR message);
+
+    [id(DISPID_IHTMLWINDOW2_CONFIRM)]
+    VARIANT_BOOL confirm([defaultvalue(""), in] BSTR message);
+
+    [id(DISPID_IHTMLWINDOW2_PROMPT)]
+    VARIANT prompt([defaultvalue(""), in] BSTR message,
+                   [defaultvalue("undefined"), in] BSTR defstr);
+
+    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
+    IHTMLImageElementFactory* Image();
+
+    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
+    IHTMLLocation* location();
+
+    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
+    IOmHistory* history();
+
+    [id(DISPID_IHTMLWINDOW2_CLOSE)]
+    void close();
+
+    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
+    void opener(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
+    VARIANT opener();
+
+    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
+    IOmNavigator* navigator();
+
+    [propput, id(DISPID_IHTMLWINDOW2_NAME)]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_NAME)]
+    BSTR name();
+
+    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
+    IHTMLWindow2* parent();
+
+    [id(DISPID_IHTMLWINDOW2_OPEN)]
+    IHTMLWindow2* open([defaultvalue(""), in] BSTR url,
+                       [defaultvalue(""), in] BSTR name,
+                       [defaultvalue(""), in] BSTR features,
+                       [defaultvalue(0), in] VARIANT_BOOL replace);
+
+    [propget, id(DISPID_IHTMLWINDOW2_SELF)]
+    IHTMLWindow2* self();
+
+    [propget, id(DISPID_IHTMLWINDOW2_TOP)]
+    IHTMLWindow2* top();
+
+    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
+    IHTMLWindow2* window();
+
+    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
+    void navigate([in] BSTR url);
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+    void onfocus(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+    VARIANT onfocus();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+    void onblur(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+    VARIANT onblur();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+    void onbeforeunload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+    VARIANT onbeforeunload();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+    void onunload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+    VARIANT onunload();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+    void onhelp(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+    VARIANT onhelp();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+    void onresize(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+    VARIANT onresize();
+
+    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+    void onscroll(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+    VARIANT onscroll();
+
+    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
+    IHTMLDocument2* document();
+
+    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
+    IHTMLEventObj* event();
+
+    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
+    IUnknown* _newEnum();
+
+    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
+    VARIANT showModalDialog([in] BSTR dialog,
+                            [optional, in] VARIANT* varArgIn,
+                            [optional, in] VARIANT* varOptions);
+
+    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
+    void showHelp([in] BSTR helpURL,
+                  [optional, in] VARIANT helpArg,
+                  [defaultvalue(""), in] BSTR features);
+
+    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
+    IHTMLScreen* screen();
+
+    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
+    IHTMLOptionElementFactory* Option();
+
+    [id(DISPID_IHTMLWINDOW2_FOCUS)]
+    void focus();
+
+    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
+    VARIANT_BOOL closed();
+
+    [id(DISPID_IHTMLWINDOW2_BLUR)]
+    void blur();
+
+    [id(DISPID_IHTMLWINDOW2_SCROLL)]
+    void scroll([in] LONG x,
+                [in] LONG y);
+
+    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
+    IOmNavigator* clientInformation();
+
+    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
+    void clearInterval([in] LONG timerID);
+
+    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+    void offscreenBuffering(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+    VARIANT offscreenBuffering();
+
+    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
+    VARIANT execScript([in] BSTR code,
+                       [defaultvalue("JScript"), in] BSTR language);
+
+    [id(DISPID_IHTMLWINDOW2_TOSTRING)]
+    BSTR toString();
+
+    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
+    void scrollBy([in] LONG x,
+                  [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
+    void scrollTo([in] LONG x,
+                  [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_MOVETO)]
+    void moveTo([in] LONG x,
+                [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_MOVEBY)]
+    void moveBy([in] LONG x,
+                [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_RESIZETO)]
+    void resizeTo([in] LONG x,
+                  [in] LONG y);
+
+    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
+    void resizeBy([in] LONG x,
+                  [in] LONG y);
+
+    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
+    IDispatch* external();
+
+    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
+    LONG screenLeft();
+
+    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
+    LONG screenTop();
+
+    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
+    VARIANT_BOOL attachEvent([in] BSTR event,
+                             [in] IDispatch* pDisp);
+
+    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
+    void detachEvent([in] BSTR event,
+                     [in] IDispatch* pDisp);
+
+    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
+    LONG setTimeout([in] VARIANT* expression,
+                    [in] LONG msec,
+                    [optional, in] VARIANT* language);
+
+    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
+    LONG setInterval([in] VARIANT* expression,
+                     [in] LONG msec,
+                     [optional, in] VARIANT* language);
+
+    [id(DISPID_IHTMLWINDOW3_PRINT)]
+    void print();
+
+    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+    void onbeforeprint(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+    VARIANT onbeforeprint();
+
+    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+    void onafterprint(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+    VARIANT onafterprint();
+
+    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
+    IHTMLDataTransfer* clipboardData();
+
+    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
+    IHTMLWindow2* showModelessDialog([defaultvalue(""), in] BSTR url,
+                                     [optional, in] VARIANT* varArgIn,
+                                     [optional, in] VARIANT* options);
+
+    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
+    IDispatch* createPopup([optional, in] VARIANT* varArgIn);
+
+    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
+    IHTMLFrameBase* frameElement();
+
+    [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+    void XMLHttpRequest(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+    VARIANT XMLHttpRequest();
+
+    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
+    IHTMLStorage *sessionStorage();
+
+    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
+    IHTMLStorage *localStorage();
+
+    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+    void onhashchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+    VARIANT onhashchange();
+
+    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
+    long maxConnectionsPerServer();
+
+    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
+    void postMessage(
+            [in] BSTR msg,
+            [in, optional] VARIANT targetOrigin);
+
+    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
+    BSTR toStaticHTML([in] BSTR bstrHTML);
+
+    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+    void onmessage(VARIANT v);
+
+    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+    VARIANT onmessage();
+
+    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
+    void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
+
+    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ *    HTMLWindowEvents interface
+ */
+[
+    hidden,
+    uuid(96A0A4E0-D062-11cf-94B6-00AA0060275C)
+]
+dispinterface HTMLWindowEvents
+{
+properties:
+methods:
+    [id(DISPID_HTMLWINDOWEVENTS_ONLOAD)]
+    void onload();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONUNLOAD)]
+    void onunload();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONHELP)]
+    VARIANT_BOOL onhelp();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONFOCUS)]
+    void onfocus();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONBLUR)]
+    void onblur();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONERROR)]
+    void onerror([in] BSTR description,
+                 [in] BSTR url,
+                 [in] LONG line);
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONRESIZE)]
+    void onresize();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONSCROLL)]
+    void onscroll();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD)]
+    void onbeforeunload();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT)]
+    void onbeforeprint();
+
+    [id(DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT)]
+    void onafterprint();
+}
+
+/*****************************************************************************
+ *    HTMLWindowEvents2 interface
+ */
+[
+    hidden,
+    uuid(3050f625-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLWindowEvents2
+{
+properties:
+methods:
+    [id(DISPID_HTMLWINDOWEVENTS2_ONLOAD)]
+    void onload([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONUNLOAD)]
+    void onunload([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONHELP)]
+    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONFOCUS)]
+    void onfocus([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONBLUR)]
+    void onblur([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONERROR)]
+    void onerror([in] BSTR description,
+                 [in] BSTR url,
+                 [in] LONG line);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONRESIZE)]
+    void onresize([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONSCROLL)]
+    void onscroll([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD)]
+    void onbeforeunload([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT)]
+    void onbeforeprint([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT)]
+    void onafterprint([in] IHTMLEventObj* pEvtObj);
+}
+
+/*****************************************************************************
+ *    HTMLWindowProxy class
+ */
+[
+    uuid(3050f391-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLWindowProxy
+{
+    [default]           dispinterface DispHTMLWindowProxy;
+    [source, default]   dispinterface HTMLWindowEvents;
+    [source]            dispinterface HTMLWindowEvents2;
+                        interface IHTMLWindow2;
+                        interface IHTMLWindow3;
+                        interface IHTMLWindow4;
+                        interface IHTMLWindow5;
+}
+
+/*****************************************************************************
+ *    HTMLDocumentEvents2 interface
+ */
+[
+    hidden,
+    uuid(3050f613-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLDocumentEvents2
+{
+    properties:
+    methods:
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONHELP)]
+    VARIANT_BOOL onhelp([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCLICK)]
+    VARIANT_BOOL onclick([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN)]
+    void onkeydown([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP)]
+    void onkeyup([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN)]
+    void onmousedown([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE)]
+    void onmousemove([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP)]
+    void onmouseup([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT)]
+    void onmouseout([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER)]
+    void onmouseover([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE)]
+    void onreadystatechange([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE)]
+    void onafterupdate([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT)]
+    VARIANT_BOOL onrowexit([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER)]
+    void onrowenter([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSTOP)]
+    VARIANT_BOOL onstop([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE)]
+    void onrowsdelete([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED)]
+    void onrowsinserted([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE)]
+    void oncellchange([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE)]
+    void onpropertychange([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED)]
+    void ondatasetchanged([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE)]
+    void ondataavailable([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE)]
+    void ondatasetcomplete([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS)]
+    void onbeforeeditfocus([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE)]
+    void onselectionchange([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN)]
+    void onfocusin([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT)]
+    void onfocusout([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE)]
+    void onactivate([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE)]
+    void ondeactivate([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj *pEvtObj);
+
+    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj *pEvtObj);
+}
+
+/*****************************************************************************
+ *    HTMLDocumentEvents interface
+ */
+[
+    hidden,
+    uuid(3050f260-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLDocumentEvents
+{
+    properties:
+    methods:
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONHELP)]
+    VARIANT_BOOL onhelp();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONCLICK)]
+    VARIANT_BOOL onclick();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN)]
+    void onkeydown();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYUP)]
+    void onkeyup();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN)]
+    void onmousedown();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE)]
+    void onmousemove();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP)]
+    void onmouseup();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT)]
+    void onmouseout();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER)]
+    void onmouseover();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE)]
+    void onreadystatechange();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE)]
+    void onafterupdate();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT)]
+    VARIANT_BOOL onrowexit();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWENTER)]
+    void onrowenter();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONSTOP)]
+    VARIANT_BOOL onstop();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE)]
+    void onrowsdelete();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED)]
+    void onrowsinserted();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE)]
+    void oncellchange();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE)]
+    void onpropertychange();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED)]
+    void ondatasetchanged();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE)]
+    void ondataavailable();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE)]
+    void ondatasetcomplete();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS)]
+    void onbeforeeditfocus();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE)]
+    void onselectionchange();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN)]
+    void onfocusin();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT)]
+    void onfocusout();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE)]
+    void onactivate();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE)]
+    void ondeactivate();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate();
+
+    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate();
+}
+
+/*****************************************************************************
+ *    HTMLTextContainerEvents interface
+ */
+[
+    hidden,
+    uuid(1ff6aa72-5842-11cf-a707-00aa00c0098d)
+]
+dispinterface HTMLTextContainerEvents
+{
+properties:
+
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+    VARIANT_BOOL onhelp();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+    VARIANT_BOOL onclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+    void onkeydown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+    void onkeyup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+    void onmouseout();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+    void onmouseover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+    void onmousemove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+    void onmousedown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+    void onmouseup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+    void onfilterchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+    void onafterupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+    VARIANT_BOOL onrowexit();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+    void onrowenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+    void ondatasetchanged();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+    void ondataavailable();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+    void ondatasetcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+    void onlosecapture();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+    void onpropertychange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+    void onscroll();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+    void onfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+    void onblur();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+    void onresize();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+    VARIANT_BOOL ondrag();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+    void ondragend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+    VARIANT_BOOL ondragover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+    void ondragleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+    VARIANT_BOOL ondrop();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+    VARIANT_BOOL oncut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+    VARIANT_BOOL oncopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+    VARIANT_BOOL onpaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+    void onrowsdelete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+    void onrowsinserted();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+    void oncellchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+    void onreadystatechange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+    void onbeforeeditfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+    void onpage();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+    void onmove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+    VARIANT_BOOL onmovestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+    void onmoveend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+    void onresizeend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+    void onmouseenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+    void onmouseleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+    void onactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+    void ondeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+    void onfocusin();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+    void onfocusout();
+
+    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE)]
+    void onchange();
+
+    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)]
+    void onselect();
+}
+
+/*****************************************************************************
+ *    HTMLTextContainerEvents2 interface
+ */
+[
+    hidden,
+    uuid(3050f624-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLTextContainerEvents2
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+    void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+    void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+    void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+    void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+    void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+    void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+    void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+    void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+    void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+    void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+    void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+    void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+    void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+    void onscroll([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+    void onfocus([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+    void onblur([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+    void onresize([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+    void ondragend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+    void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+    void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+    void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+    void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+    void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+    void onpage([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+    void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+    void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+    void onactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+    void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+    void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+    void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+    void onmove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+    void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+    void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE)]
+    void onchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)]
+    void onselect([in] IHTMLEventObj* pEvtObj);
+}
+
+/*****************************************************************************
+ *    IHTMLDocument interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(626FC520-A41E-11CF-A731-00A0C9082637)
+]
+interface IHTMLDocument : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT)]
+    HRESULT Script([retval, out] IDispatch **p);
+}
+
+/*****************************************************************************
+ *    IHTMLDocument2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(332C4425-26CB-11D0-B483-00C04FD90119)
+]
+interface IHTMLDocument2 : IHTMLDocument
+{
+    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
+    HRESULT all([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
+    HRESULT body([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
+    HRESULT activeElement([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
+    HRESULT images([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
+    HRESULT applets([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
+    HRESULT links([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
+    HRESULT forms([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
+    HRESULT anchors([retval, out] IHTMLElementCollection **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+    HRESULT title([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+    HRESULT title([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
+    HRESULT scripts([retval, out] IHTMLElementCollection **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
+    HRESULT designMode([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
+    HRESULT designMode([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
+    HRESULT selection([retval, out] IHTMLSelectionObject **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE)]
+     HRESULT readyState([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
+    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
+    HRESULT embeds([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
+    HRESULT plugins([retval, out] IHTMLElementCollection **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+    HRESULT alinkColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+    HRESULT alinkColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+    HRESULT bgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+    HRESULT bgColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+    HRESULT fgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+    HRESULT fgColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+    HRESULT linkColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+    HRESULT linkColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+    HRESULT vlinkColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+    HRESULT vlinkColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
+    HRESULT referrer([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
+    HRESULT location([retval, out] IHTMLLocation **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
+    HRESULT lastModified([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
+    HRESULT URL([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
+    HRESULT URL([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+    HRESULT domain([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+    HRESULT domain([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+    HRESULT cookie([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+    HRESULT cookie([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
+    HRESULT expando([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
+    HRESULT expando([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
+     HRESULT charset([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
+    HRESULT charset([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+    HRESULT defaultCharset([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+    HRESULT defaultCharset([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
+    HRESULT mimeType([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
+    HRESULT fileSize([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
+    HRESULT fileCreatedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
+    HRESULT fileModifiedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
+    HRESULT fileUpdatedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
+    HRESULT security([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
+    HRESULT protocol([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
+     HRESULT nameProp([retval, out] BSTR *p);
+
+    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
+    HRESULT write([in] SAFEARRAY(VARIANT) psarray);
+
+    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
+    HRESULT writeln([in] SAFEARRAY(VARIANT) psarray);
+
+    [id(DISPID_IHTMLDOCUMENT2_OPEN)]
+    HRESULT open(
+        [defaultvalue("text/html"), in] BSTR url,
+        [optional, in] VARIANT name,
+        [optional, in] VARIANT features,
+        [optional, in] VARIANT replace,
+        [retval, out]  IDispatch **pomWindowResult);
+
+    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
+    HRESULT close();
+
+    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
+    HRESULT clear();
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
+    HRESULT queryCommandSupported(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
+    HRESULT queryCommandEnabled(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
+    HRESULT queryCommandState(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
+    HRESULT queryCommandIndeterm(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
+    HRESULT queryCommandText(
+        [in] BSTR cmdID,
+        [retval, out] BSTR *pcmdText);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
+    HRESULT queryCommandValue(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT *pcmdValue);
+
+    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
+    HRESULT execCommand(
+        [in] BSTR cmdID,
+        [defaultvalue(0), in] VARIANT_BOOL showUI,
+        [optional, in] VARIANT value,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
+    HRESULT execCommandShowHelp(
+        [in] BSTR cmdID,
+        [retval, out] VARIANT_BOOL *pfRet);
+
+    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
+     HRESULT createElement(
+        [in] BSTR eTag,
+        [retval, out] IHTMLElement **newElem);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
+    HRESULT onhelp([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
+    HRESULT onhelp([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
+    HRESULT onclick([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
+    HRESULT onclick([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
+    HRESULT ondblclick([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
+    HRESULT ondblclick([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
+    HRESULT onkeyup([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
+    HRESULT onkeyup([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
+    HRESULT onkeydown([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
+    HRESULT onkeydown([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
+     HRESULT onkeypress([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
+    HRESULT onkeypress([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
+    HRESULT onmouseup([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
+    HRESULT onmouseup([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
+    HRESULT onmousedown([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
+    HRESULT onmousedown([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
+    HRESULT onmousemove([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
+    HRESULT onmousemove([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
+    HRESULT onmouseout([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
+    HRESULT onmouseout([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
+    HRESULT onmouseover([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
+    HRESULT onmouseover([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
+    HRESULT onafterupdate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
+    HRESULT onafterupdate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
+    HRESULT onrowexit([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
+    HRESULT onrowexit([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
+    HRESULT onrowenter([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
+    HRESULT onrowenter([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
+    HRESULT ondragstart([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
+    HRESULT ondragstart([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
+    HRESULT onselectstart([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
+    HRESULT onselectstart([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
+    HRESULT elementFromPoint(
+        [in] LONG x,
+        [in] LONG y,
+        [retval, out] IHTMLElement **elementHit);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
+    HRESULT parentWindow([retval, out] IHTMLWindow2 **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
+    HRESULT styleSheets([retval, out] IHTMLStyleSheetsCollection **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
+    HRESULT onbeforeupdate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
+    HRESULT onbeforeupdate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
+    HRESULT onerrorupdate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
+    HRESULT onerrorupdate([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
+    HRESULT toString([retval, out] BSTR *String);
+
+    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
+    HRESULT createStyleSheet(
+        [defaultvalue(""), in] BSTR bstrHref,
+        [defaultvalue(-1), in] LONG lIndex,
+        [retval, out] IHTMLStyleSheet **ppnewStyleSheet);
+}
+
+/*****************************************************************************
+ *    IHTMLDocument3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument3 : IDispatch
+{
+    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
+    HRESULT releaseCapture();
+
+    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
+    HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce);
+
+    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
+    HRESULT createTextNode(
+        [in] BSTR text,
+        [retval, out] IHTMLDOMNode **newTextNode);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
+    HRESULT documentElement([retval, out] IHTMLElement **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
+    HRESULT uniqueID([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
+    HRESULT attachEvent(
+        [in] BSTR event,
+        [in] IDispatch* pDisp,
+        [retval, out] VARIANT_BOOL *pfResult);
+
+    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
+    HRESULT detachEvent(
+        [in] BSTR event,
+        [in] IDispatch *pDisp);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+    HRESULT onrowsdelete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+    HRESULT onrowsdelete([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+    HRESULT onrowsinserted([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+    HRESULT onrowsinserted([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+    HRESULT oncellchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+    HRESULT oncellchange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+    HRESULT ondatasetchanged([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+    HRESULT ondatasetchanged([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+    HRESULT ondataavailable([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+    HRESULT ondataavailable([retval, out] VARIANT * p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+    HRESULT ondatasetcomplete([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+    HRESULT ondatasetcomplete([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+    HRESULT onpropertychange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+    HRESULT onpropertychange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
+    HRESULT dir([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
+    HRESULT dir([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+    HRESULT oncontextmenu([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+    HRESULT oncontextmenu([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+    HRESULT onstop([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+    HRESULT onstop([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
+    HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
+    HRESULT parentDocument([retval, out] IHTMLDocument2 **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+    HRESULT enableDownload([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+    HRESULT enableDownload([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+    HRESULT baseUrl([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+    HRESULT baseUrl([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)]
+    HRESULT childNodes([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+    HRESULT inheritStyleSheets([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+    HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+    HRESULT onbeforeeditfocus([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
+    HRESULT getElementsByName(
+        [in] BSTR v,
+        [retval, out] IHTMLElementCollection **pelColl);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
+    HRESULT getElementById(
+        [in] BSTR v,
+        [retval, out] IHTMLElement **pel);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR v,
+        [retval, out] IHTMLElementCollection **pelColl);
+}
+
+/*****************************************************************************
+ *    IHTMLDocument4 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f69a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument4 : IDispatch
+{
+    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
+    HRESULT focus();
+
+    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
+    HRESULT hasFocus([retval, out] VARIANT_BOOL *pfFocus);
+
+    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+    HRESULT onselectionchange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+    HRESULT onselectionchange([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
+    HRESULT namespaces([retval, out] IDispatch **p);
+
+    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
+    HRESULT createDocumentFromUrl(
+        [in] BSTR bstrUrl,
+        [in] BSTR bstrOptions,
+        [retval, out] IHTMLDocument2 **newDoc);
+
+    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+    HRESULT media([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+    HRESULT media([retval, out] BSTR *p);
+
+    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
+    HRESULT createEventObject(
+        [optional, in] VARIANT *pvarEventObject,
+        [retval, out] IHTMLEventObj **ppEventObj);
+
+    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
+    HRESULT fireEvent(
+        [in] BSTR bstrEventName,
+        [optional, in] VARIANT *pvarEventObject,
+        [retval, out] VARIANT_BOOL *pfCancelled);
+
+    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
+    HRESULT createRenderStyle(
+        [in] BSTR v,
+        [retval, out] IHTMLRenderStyle **ppIHTMLRenderStyle);
+
+    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+    HRESULT oncontrolselect([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+    HRESULT oncontrolselect([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
+    HRESULT URLUnencoded([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLDocument5 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f80c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument5 : IDispatch
+{
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+    HRESULT onmousewheel([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+    HRESULT onmousewheel([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
+    HRESULT doctype([retval, out] IHTMLDOMNode **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
+    HRESULT implementation([retval, out] IHTMLDOMImplementation **p);
+
+    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
+    HRESULT createAttribute(
+        [in] BSTR bstrattrName,
+        [retval, out] IHTMLDOMAttribute **ppattribute);
+
+    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
+    HRESULT createComment(
+        [in] BSTR bstrdata,
+        [retval, out] IHTMLDOMNode **ppRetNode);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+    HRESULT onfocusin([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+    HRESULT onfocusin([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+    HRESULT onfocusout([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+    HRESULT onfocusout([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+    HRESULT onactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+    HRESULT onactivate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+    HRESULT ondeactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+    HRESULT ondeactivate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+    HRESULT onbeforeactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+    HRESULT onbeforeactivate([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+    HRESULT onbeforedeactivate([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+    HRESULT onbeforedeactivate([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
+    HRESULT compatMode([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLDocument6 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510417-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument6 : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]
+    HRESULT compatible([retval, out] IHTMLDocumentCompatibleInfoCollection **p);
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]
+    HRESULT documentMode([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+    HRESULT onstorage([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+    HRESULT onstorage([out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+    HRESULT onstoragecommit([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+    HRESULT onstoragecommit([out] VARIANT *p);
+
+    [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]
+    HRESULT getElementById(
+        [in] BSTR bstrId,
+        [retval, out] IHTMLElement2 **p);
+
+    [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]
+    HRESULT updateSettings();
+}
+
+/*****************************************************************************
+ *    DispHTMLDocument dispinterface
+ */
+[
+    hidden,
+    uuid(3050f55f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLDocument
+{
+properties:
+methods:
+    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT), hidden, nonbrowsable]
+    IDispatch *Script();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
+    IHTMLElementCollection *all();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
+    IHTMLElement *body();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
+    IHTMLElement *activeElement();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
+    IHTMLElementCollection *images();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
+    IHTMLElementCollection *applets();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
+    IHTMLElementCollection *links();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
+    IHTMLElementCollection *forms();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
+    IHTMLElementCollection *anchors();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+    void title(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+    BSTR title();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
+    IHTMLElementCollection *scripts();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
+    void designMode(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
+    BSTR designMode();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
+    IHTMLSelectionObject *selection();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE), bindable]
+    BSTR readyState();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
+    IHTMLFramesCollection2 *frames();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
+    IHTMLElementCollection *embeds();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
+    IHTMLElementCollection *plugins();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+    void alinkColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+    VARIANT alinkColor();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+    void bgColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+    VARIANT bgColor();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+    void fgColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+    VARIANT fgColor();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+    void linkColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+    VARIANT linkColor();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+    void vlinkColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+    VARIANT vlinkColor();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
+    BSTR referrer();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
+    IHTMLLocation *location();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
+    BSTR lastModified();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
+    void URL(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
+    BSTR URL();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+    void domain(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+    BSTR domain();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+    void cookie(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+    BSTR cookie();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
+    void expando(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
+    VARIANT_BOOL expando();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
+    void charset(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
+    BSTR charset();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+    void defaultCharset(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+    BSTR defaultCharset();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
+    BSTR mimeType();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
+    BSTR fileSize();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
+    BSTR fileCreatedDate();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
+    BSTR fileModifiedDate();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
+    BSTR fileUpdatedDate();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
+    BSTR security();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
+    BSTR protocol();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
+    BSTR nameProp();
+
+    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
+    void write([in] SAFEARRAY(VARIANT) psarray);
+
+    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
+    void writeln([in] SAFEARRAY(VARIANT) psarray);
+
+    [id(DISPID_IHTMLDOCUMENT2_OPEN)]
+    IDispatch *open(
+        [defaultvalue("text/html"), in] BSTR url,
+        [optional, in] VARIANT name,
+        [optional, in] VARIANT features,
+        [optional, in] VARIANT replace);
+
+    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
+    void close();
+
+    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
+    void clear();
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
+    VARIANT_BOOL queryCommandSupported([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
+    VARIANT_BOOL queryCommandEnabled([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
+    VARIANT_BOOL queryCommandState([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
+    VARIANT_BOOL queryCommandIndeterm([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
+    BSTR queryCommandText([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
+    VARIANT queryCommandValue([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
+    VARIANT_BOOL execCommand(
+        [in] BSTR cmdID,
+        [defaultvalue(0), in] VARIANT_BOOL showUI,
+        [optional, in] VARIANT value);
+
+    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
+    VARIANT_BOOL execCommandShowHelp([in] BSTR cmdID);
+
+    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
+    IHTMLElement *createElement([in] BSTR eTag);
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
+    void onhelp(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
+    VARIANT onhelp();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
+    void onclick(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
+    VARIANT onclick();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
+    void ondblclick(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
+    VARIANT ondblclick();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
+    void onkeyup(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
+    VARIANT onkeyup();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
+    void onkeydown(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
+    VARIANT onkeydown();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
+    void onkeypress(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
+    VARIANT onkeypress();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
+    void onmouseup(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
+    VARIANT onmouseup();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
+    void onmousedown(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
+    VARIANT onmousedown();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
+    void onmousemove(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
+    VARIANT onmousemove();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
+    void onmouseout(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
+    VARIANT onmouseout();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
+    void onmouseover(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
+    VARIANT onmouseover();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+    void onreadystatechange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+    VARIANT onreadystatechange();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
+    void onafterupdate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
+    VARIANT onafterupdate();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
+    void onrowexit(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
+    VARIANT onrowexit();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
+    void onrowenter(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
+    VARIANT onrowenter();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
+    void ondragstart(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
+    VARIANT ondragstart();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
+    void onselectstart(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
+    VARIANT onselectstart();
+
+    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
+    IHTMLElement *elementFromPoint(
+        [in] LONG x,
+        [in] LONG y);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
+    IHTMLWindow2 *parentWindow();
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
+    IHTMLStyleSheetsCollection *styleSheets();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
+    void onbeforeupdate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
+    VARIANT onbeforeupdate();
+
+    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
+    void onerrorupdate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
+    VARIANT onerrorupdate();
+
+    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
+    BSTR toString();
+
+    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
+    IHTMLStyleSheet *createStyleSheet(
+        [defaultvalue(""), in] BSTR bstrHref,
+        [defaultvalue(-1), in] LONG lIndex);
+
+    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
+    void releaseCapture();
+
+    [id(DISPID_IHTMLDOCUMENT3_RECALC)]
+    void recalc([defaultvalue(0), in] VARIANT_BOOL fForce);
+
+    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
+    IHTMLDOMNode *createTextNode([in] BSTR text);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
+    IHTMLElement *documentElement();
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
+    BSTR uniqueID();
+
+    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
+    VARIANT_BOOL attachEvent(
+        [in] BSTR event,
+        [in] IDispatch *pDisp);
+
+    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
+    void detachEvent(
+        [in] BSTR event,
+        [in] IDispatch *pDisp);
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+    void onrowsdelete(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+    VARIANT onrowsdelete();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+    void onrowsinserted(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+    VARIANT onrowsinserted();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+    void oncellchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+    VARIANT oncellchange();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+    void ondatasetchanged(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+    VARIANT ondatasetchanged();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+    void ondataavailable(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+    VARIANT ondataavailable();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+    void ondatasetcomplete(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+    VARIANT ondatasetcomplete();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+    void onpropertychange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+    VARIANT onpropertychange();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
+    void dir(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
+    BSTR dir();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+    void oncontextmenu(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+    VARIANT oncontextmenu();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+    void onstop(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+    VARIANT onstop();
+
+    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
+    IHTMLDocument2 *createDocumentFragment();
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
+    IHTMLDocument2 *parentDocument();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+    void enableDownload(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+    VARIANT_BOOL enableDownload();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+    void baseUrl(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+    BSTR baseUrl();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+    void inheritStyleSheets(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+    VARIANT_BOOL inheritStyleSheets();
+
+    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+    void onbeforeeditfocus(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+    VARIANT onbeforeeditfocus();
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
+    IHTMLElementCollection *getElementsByName([in] BSTR v);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
+    IHTMLElement *getElementById([in] BSTR v);
+
+    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
+    IHTMLElementCollection *getElementsByTagName([in] BSTR v);
+
+    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
+    void focus();
+
+    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
+    VARIANT_BOOL hasFocus();
+
+    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+    void onselectionchange(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+    VARIANT onselectionchange();
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
+    IDispatch *namespaces();
+
+    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
+    IHTMLDocument2 *createDocumentFromUrl(
+        [in] BSTR bstrUrl,
+        [in] BSTR bstrOptions);
+
+    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+    void media(BSTR v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+    BSTR media();
+
+    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
+    IHTMLEventObj *createEventObject([optional, in] VARIANT *pvarEventObject);
+
+    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
+    VARIANT_BOOL fireEvent(
+        [in] BSTR bstrEventName,
+        [optional, in] VARIANT *pvarEventObject);
+
+    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
+    IHTMLRenderStyle *createRenderStyle([in] BSTR v);
+
+    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+    void oncontrolselect(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+    VARIANT oncontrolselect();
+
+    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
+    BSTR URLUnencoded();
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+    void onmousewheel(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+    VARIANT onmousewheel();
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
+    IHTMLDOMNode *doctype();
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
+    IHTMLDOMImplementation *implementation();
+
+    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
+    IHTMLDOMAttribute *createAttribute([in] BSTR bstrattrName);
+
+    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
+    IHTMLDOMNode *createComment([in] BSTR bstrdata);
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+    void onfocusin(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+    VARIANT onfocusin();
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+    void onfocusout(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+    VARIANT onfocusout();
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+    void onactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+    VARIANT onactivate();
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+    void ondeactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+    VARIANT ondeactivate();
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+    void onbeforeactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+    VARIANT onbeforeactivate();
+
+    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+    void onbeforedeactivate(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+    VARIANT onbeforedeactivate();
+
+    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
+    BSTR compatMode();
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]
+    IHTMLDocumentCompatibleInfoCollection *compatible();
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]
+    VARIANT documentMode();
+
+    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+    void onstorage(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+    VARIANT onstorage();
+
+    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+    void onstoragecommit(VARIANT v);
+
+    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+    VARIANT onstoragecommit();
+
+    [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]
+    IHTMLElement2 *ie8_getElementById([in] BSTR bstrId);
+
+    [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]
+    void updateSettings();
+
+    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ *    HTMLDocument coclass
+ */
+[
+    uuid(25336920-03F9-11cf-8FD0-00AA00686F13)
+]
+coclass HTMLDocument
+{
+    [default]         dispinterface DispHTMLDocument;
+    [source, default] dispinterface HTMLDocumentEvents;
+    [source]          dispinterface HTMLDocumentEvents2;
+                      interface IHTMLDocument2;
+                      interface IHTMLDocument3;
+                      interface IHTMLDocument4;
+                      interface IHTMLDocument5;
+                      interface IHTMLDocument6;
+                      interface IHTMLDOMNode;
+                      interface IHTMLDOMNode2;
+}
+
+/*****************************************************************************
+ *    DWebBridgeEvents dispinterface
+ */
+[
+    hidden,
+    uuid(a6d897ff-0a95-11d1-b0ba-006008166e11)
+]
+dispinterface DWebBridgeEvents
+{
+properties:
+methods:
+    [id(DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT)]
+    void onscriptletevent([in] BSTR name,[in] VARIANT eventData);
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE)]
+    void onreadystatechange();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONCLICK)]
+    VARIANT_BOOL onclick();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN)]
+    void onkeydown();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYUP)]
+    void onkeyup();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN)]
+    void onmousedown();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE)]
+    void onmousemove();
+
+    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP)]
+    void onmouseup();
+}
+
+/*****************************************************************************
+ *    IWebBridge interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(ae24fdad-03c6-11d1-8b76-0080c744f389)
+]
+interface IWebBridge : IDispatch
+{
+    [propput, id(DISPID_IWEBBRIDGE_URL)]
+    HRESULT URL([in] BSTR v);
+
+    [propget, id(DISPID_IWEBBRIDGE_URL)]
+    HRESULT URL([retval, out] BSTR * p);
+
+    [propput, id(DISPID_IWEBBRIDGE_SCROLLBAR)]
+    HRESULT Scrollbar([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IWEBBRIDGE_SCROLLBAR)]
+    HRESULT Scrollbar([retval, out] VARIANT_BOOL * p);
+
+    [propput, id(DISPID_IWEBBRIDGE_EMBED)]
+    HRESULT embed([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IWEBBRIDGE_EMBED)]
+    HRESULT embed([retval, out] VARIANT_BOOL * p);
+
+    [propget, id(DISPID_IWEBBRIDGE_EVENT)]
+    HRESULT event([retval, out] IDispatch* * p);
+
+    [propget, id(DISPID_IWEBBRIDGE_READYSTATE)]
+    HRESULT readyState([retval, out] long * p);
+
+    [id(DISPID_IWEBBRIDGE_ABOUTBOX)]
+    HRESULT AboutBox();
+}
+
+/*****************************************************************************
+ *    Scriptlet coclass
+ */
+[
+    control,
+    helpstring("Microsoft Scriptlet Component"),
+    progid("ScriptBridge.ScriptBridge.1"),
+    vi_progid("ScriptBridge.ScriptBridge"),
+    uuid(ae24fdae-03c6-11d1-8b76-0080c744f389)
+]
+coclass Scriptlet
+{
+    [default]           interface IWebBridge;
+    [source, default]   dispinterface DWebBridgeEvents;
+}
+
+/*****************************************************************************
+ *    IHTMLEmbedElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f25f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLEmbedElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+    HRESULT hidden([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+    HRESULT hidden([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]
+    HRESULT palette([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]
+    HRESULT pluginspage([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+    HRESULT src([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+    HRESULT units([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+    HRESULT units([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+    HRESULT height([retval, out] VARIANT *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLEmbedElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f52e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLEmbed
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+    void hidden(BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+    BSTR hidden();
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]
+    BSTR palette();
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]
+    BSTR pluginspage();
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+    void src(BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+    BSTR src();
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+    void units(BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+    BSTR units();
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+    VARIANT width();
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]
+    void ie8_src(BSTR v);
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]
+    BSTR ie8_src();
+
+    [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE)]
+    BSTR ie8_pluginspage();
+}
+
+/*****************************************************************************
+ *    IHTMLCommentElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCommentElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+    HRESULT text([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+    HRESULT text([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+    HRESULT atomic([in] LONG v);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+    HRESULT atomic([out, retval] LONG *p);
+}
+
+/*****************************************************************************
+ *    IHTMLCommentElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCommentElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+    HRESULT data([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+    HRESULT data([out, retval] BSTR *p);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
+    HRESULT length([out, retval] LONG *p);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
+    HRESULT substringData(
+            [in] LONG offset,
+            [in] LONG Count,
+            [out, retval] BSTR *pbstrsubString);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
+    HRESULT appendData([in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
+    HRESULT insertData(
+            [in] LONG offset,
+            [in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
+    HRESULT deleteData(
+            [in] LONG offset,
+            [in] LONG Count);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
+    HRESULT replaceData(
+            [in] LONG offset,
+            [in] LONG Count,
+            [in] BSTR bstrstring);
+}
+
+/*****************************************************************************
+ *    DispHTMLCommentElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLCommentElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+    void text(BSTR v);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+    BSTR text();
+
+    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+    void atomic(LONG v);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+    LONG atomic();
+
+    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+    void data(BSTR v);
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+    BSTR data();
+
+    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
+    LONG length();
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
+    BSTR substringData(
+            [in] LONG offset,
+            [in] LONG Count);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
+    void appendData([in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
+     void insertData(
+            [in] LONG offset,
+            [in] BSTR bstrstring);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
+    void deleteData(
+            [in] LONG offset,
+            [in] LONG Count);
+
+    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
+    void replaceData(
+            [in] LONG offset,
+            [in] LONG Count,
+            [in] BSTR bstrstring);
+}
+
+[
+    hidden,
+    uuid(3050f60f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLElementEvents2
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+    void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+    void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+    void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+    void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+    void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+    void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+    void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+    void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+    void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+    void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+    void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+    void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+    void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+    void onscroll([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+    void onfocus([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+    void onblur([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+    void onresize([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+    void ondragend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+    void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+    void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+    void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+    void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+    void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+    void onpage([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+    void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+    void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+    void onactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+    void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+    void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+    void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+    void onmove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+    void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+    void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+}
+
+[
+    hidden,
+    uuid(3050f33c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLElementEvents
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+    VARIANT_BOOL onhelp();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+    VARIANT_BOOL onclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+    void onkeydown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+    void onkeyup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+    void onmouseout();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+    void onmouseover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+    void onmousemove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+    void onmousedown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+    void onmouseup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+    void onfilterchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+    void onafterupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+    VARIANT_BOOL onrowexit();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+    void onrowenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+    void ondatasetchanged();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+    void ondataavailable();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+    void ondatasetcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+    void onlosecapture();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+    void onpropertychange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+    void onscroll();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+    void onfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+    void onblur();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+    void onresize();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+    VARIANT_BOOL ondrag();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+    void ondragend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+    VARIANT_BOOL ondragover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+    void ondragleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+    VARIANT_BOOL ondrop();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+    VARIANT_BOOL oncut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+    VARIANT_BOOL oncopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+    VARIANT_BOOL onpaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+    void onrowsdelete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+    void onrowsinserted();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+    void oncellchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+    void onreadystatechange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+    void onbeforeeditfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+    void onpage();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+    void onmove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+    VARIANT_BOOL onmovestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+    void onmoveend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+    void onresizeend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+    void onmouseenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+    void onmouseleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+    void onactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+    void ondeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+    void onfocusin();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+    void onfocusout();
+}
+
+[
+    noncreatable,
+    uuid(3050f317-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLCommentElement
+{
+    [default]           dispinterface DispHTMLCommentElement;
+    [source, default]   dispinterface HTMLElementEvents;
+    [source]            dispinterface HTMLElementEvents2;
+                        interface IHTMLElement;
+                        interface IHTMLElement2;
+                        interface IHTMLElement3;
+                        interface IHTMLElement4;
+                        interface IHTMLUniqueName;
+                        interface IHTMLDOMNode;
+                        interface IHTMLDOMNode2;
+                        interface IHTMLCommentElement;
+                        interface IHTMLCommentElement2;
+}
+
+/*****************************************************************************
+ *    HTMLTableEvents dispinterface
+ */
+[
+    hidden,
+    uuid(3050f407-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLTableEvents
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+    VARIANT_BOOL onhelp();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+    VARIANT_BOOL onclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+    void onkeydown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+    void onkeyup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+    void onmouseout();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+    void onmouseover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+    void onmousemove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+    void onmousedown();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+    void onmouseup();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+    void onfilterchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+    void onafterupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+    VARIANT_BOOL onrowexit();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+    void onrowenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+    void ondatasetchanged();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+    void ondataavailable();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+    void ondatasetcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+    void onlosecapture();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+    void onpropertychange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+    void onscroll();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+    void onfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+    void onblur();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+    void onresize();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+    VARIANT_BOOL ondrag();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+    void ondragend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+    VARIANT_BOOL ondragover();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+    void ondragleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+    VARIANT_BOOL ondrop();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+    VARIANT_BOOL oncut();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+    VARIANT_BOOL oncopy();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+    VARIANT_BOOL onpaste();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+    void onrowsdelete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+    void onrowsinserted();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+    void oncellchange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+    void onreadystatechange();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+    void onbeforeeditfocus();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+    void onpage();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+    void onmove();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+    VARIANT_BOOL onmovestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+    void onmoveend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+    void onresizeend();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+    void onmouseenter();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+    void onmouseleave();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+    void onactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+    void ondeactivate();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+    void onfocusin();
+
+    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+    void onfocusout();
+}
+
+[
+    hidden,
+    uuid(3050f623-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLTableEvents2
+{
+properties:
+methods:
+    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+    void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+    void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+    void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+    void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+    void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+    void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+    void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+    void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+    void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+    void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+    void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+    void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+    void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+    void onscroll([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+    void onfocus([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+    void onblur([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+    void onresize([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+    void ondragend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+    void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+    void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+    void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+    void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+    void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+    void onpage([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+    void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+    void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+    void onactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+    void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+    void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+    void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+    void onmove([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+    void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+    void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+}
+
+/*****************************************************************************
+ *    IHTMLTableCaption interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f2eb-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableCaption : IDispatch
+{
+    [propput, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
+    HRESULT align([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
+    HRESULT vAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
+    HRESULT vAlign([retval, out] BSTR *p);
+}
+
+interface IHTMLTableSection;
+
+/*****************************************************************************
+ *    IHTMLTable interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f21e-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTable : IDispatch
+{
+    [propput, id(DISPID_IHTMLTABLE_COLS)]
+    HRESULT cols([in] LONG v);
+
+    [propget, id(DISPID_IHTMLTABLE_COLS)]
+    HRESULT cols([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLTABLE_BORDER)]
+    HRESULT border([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDER)]
+    HRESULT border([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_FRAME)]
+    HRESULT frame([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_FRAME)]
+    HRESULT frame([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLE_RULES)]
+    HRESULT rules([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_RULES)]
+    HRESULT rules([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
+    HRESULT cellSpacing([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
+    HRESULT cellSpacing([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
+    HRESULT cellPadding([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
+    HRESULT cellPadding([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
+    HRESULT background([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
+    HRESULT background([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
+    HRESULT bgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
+    HRESULT bgColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+    HRESULT borderColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+    HRESULT borderColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+    HRESULT borderColorLight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+    HRESULT borderColorLight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+    HRESULT borderColorDark([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+    HRESULT borderColorDark([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_ALIGN)]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_ALIGN)]
+    HRESULT align([retval, out] BSTR * p);
+
+    [id(DISPID_IHTMLTABLE_REFRESH)]
+    HRESULT refresh();
+
+    [propget, id(DISPID_IHTMLTABLE_ROWS)]
+    HRESULT rows([retval, out] IHTMLElementCollection **p);
+
+    [propput, id(DISPID_IHTMLTABLE_WIDTH)]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_WIDTH)]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
+    HRESULT height([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+    HRESULT dataPageSize([in] LONG v);
+
+    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+    HRESULT dataPageSize([retval, out] LONG *p);
+
+    [id(DISPID_IHTMLTABLE_NEXTPAGE)]
+    HRESULT nextPage();
+
+    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
+    HRESULT previousPage();
+
+    [propget, id(DISPID_IHTMLTABLE_THEAD)]
+    HRESULT tHead([retval, out] IHTMLTableSection **p);
+
+    [propget, id(DISPID_IHTMLTABLE_TFOOT)]
+    HRESULT tFoot([retval, out] IHTMLTableSection **p);
+
+    [propget, id(DISPID_IHTMLTABLE_TBODIES)]
+    HRESULT tBodies([retval, out] IHTMLElementCollection **p);
+
+    [propget, id(DISPID_IHTMLTABLE_CAPTION)]
+    HRESULT caption([retval, out] IHTMLTableCaption **p);
+
+    [id(DISPID_IHTMLTABLE_CREATETHEAD)]
+    HRESULT createTHead([retval, out] IDispatch **head);
+
+    [id(DISPID_IHTMLTABLE_DELETETHEAD)]
+    HRESULT deleteTHead();
+
+    [id(DISPID_IHTMLTABLE_CREATETFOOT)]
+    HRESULT createTFoot([retval, out] IDispatch **foot);
+
+    [id(DISPID_IHTMLTABLE_DELETETFOOT)]
+    HRESULT deleteTFoot();
+
+    [id(DISPID_IHTMLTABLE_CREATECAPTION)]
+    HRESULT createCaption([retval, out] IHTMLTableCaption **caption);
+
+    [id(DISPID_IHTMLTABLE_DELETECAPTION)]
+    HRESULT deleteCaption();
+
+    [id(DISPID_IHTMLTABLE_INSERTROW)]
+    HRESULT insertRow(
+            [defaultvalue(-1), in] LONG index,
+            [retval, out] IDispatch **row);
+
+    [id(DISPID_IHTMLTABLE_DELETEROW)]
+    HRESULT deleteRow([defaultvalue(-1), in] LONG index);
+
+    [propget, id(DISPID_IHTMLTABLE_READYSTATE)]
+    HRESULT readyState([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([retval, out] VARIANT *p);
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4ad-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTable2 : IDispatch
+{
+    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
+    HRESULT firstPage();
+
+    [id(DISPID_IHTMLTABLE2_LASTPAGE)]
+    HRESULT lastPage();
+
+    [propget, id(DISPID_IHTMLTABLE2_CELLS)]
+    HRESULT cells([retval, out] IHTMLElementCollection* * p);
+
+    [id(DISPID_IHTMLTABLE2_MOVEROW)]
+    HRESULT moveRow([defaultvalue(-1), in] LONG indexFrom,
+        [defaultvalue(-1), in] LONG indexTo,
+        [retval, out] IDispatch** row);
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f829-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTable3 : IDispatch
+{
+    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+    HRESULT summary([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+    HRESULT summary([retval, out] BSTR * p);
+}
+
+[
+    noncreatable,
+    uuid(3050f26b-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLTable
+{
+    [default]           dispinterface DispHTMLTable;
+    [source, default]   dispinterface HTMLTableEvents;
+    [source]            dispinterface HTMLTableEvents2;
+                        interface IHTMLElement;
+                        interface IHTMLElement2;
+                        interface IHTMLElement3;
+                        interface IHTMLElement4;
+                        interface IHTMLUniqueName;
+                        interface IHTMLDOMNode;
+                        interface IHTMLDOMNode2;
+                        interface IHTMLDatabinding;
+                        interface IHTMLControlElement;
+                        interface IHTMLTable;
+                        interface IHTMLTable2;
+                        interface IHTMLTable3;
+}
+
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f23b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableSection : IDispatch
+{
+    [propput, id(DISPID_IHTMLTABLESECTION_ALIGN)]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLESECTION_ALIGN)]
+    HRESULT align([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLESECTION_VALIGN)]
+    HRESULT vAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLESECTION_VALIGN)]
+    HRESULT vAlign([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
+    HRESULT bgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
+    HRESULT bgColor([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLTABLESECTION_ROWS)]
+    HRESULT rows([retval, out] IHTMLElementCollection **p);
+
+    [id(DISPID_IHTMLTABLESECTION_INSERTROW)]
+    HRESULT insertRow(
+            [defaultvalue(-1), in] LONG index,
+            [retval, out] IDispatch **row);
+
+    [id(DISPID_IHTMLTABLESECTION_DELETEROW)]
+    HRESULT deleteRow([defaultvalue(-1), in] LONG index);
+}
+
+/*****************************************************************************
+ *    IHTMLTableRow interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f23c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableRow : IDispatch
+{
+    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
+    HRESULT align([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
+    HRESULT vAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
+    HRESULT vAlign([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+    HRESULT bgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+    HRESULT bgColor([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+    HRESULT borderColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+    HRESULT borderColor([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+    HRESULT borderColorLight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+    HRESULT borderColorLight([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+    HRESULT borderColorDark([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+    HRESULT borderColorDark([out, retval] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
+    HRESULT rowIndex([out, retval] LONG *p);
+
+    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
+    HRESULT sectionRowIndex([out, retval] LONG *p);
+
+    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
+    HRESULT cells([out, retval] IHTMLElementCollection **p);
+
+    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
+    HRESULT insertCell(
+            [in, defaultvalue(-1)] LONG index,
+            [out, retval] IDispatch **row);
+
+    [id(DISPID_IHTMLTABLEROW_DELETECELL)]
+    HRESULT deleteCell([in, defaultvalue(-1)] LONG index);
+}
+
+/*****************************************************************************
+ *    IHTMLTableCell interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f23d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableCell : IDispatch
+{
+    [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+    HRESULT rowSpan([in] long v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+    HRESULT rowSpan([retval, out] long *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+    HRESULT colSpan([in] long v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+    HRESULT colSpan([retval, out] long *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]
+    HRESULT align([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]
+    HRESULT vAlign([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]
+    HRESULT vAlign([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+    HRESULT bgColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+    HRESULT bgColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+    HRESULT noWrap([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+    HRESULT noWrap([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+    HRESULT background([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+    HRESULT background([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+    HRESULT borderColor([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+    HRESULT borderColor([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+    HRESULT borderColorLight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+    HRESULT borderColorLight([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+    HRESULT borderColorDark([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+    HRESULT borderColorDark([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+    HRESULT height([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]
+    HRESULT cellIndex([retval, out] long *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLTable dispinterface
+ */
+[
+    hidden,
+    uuid(3050f532-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTable
+{
+properties:
+methods:
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLTABLE_COLS)]
+    void cols(LONG v);
+
+    [propget, id(DISPID_IHTMLTABLE_COLS)]
+    LONG cols();
+
+    [propput, id(DISPID_IHTMLTABLE_BORDER)]
+    void border(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDER)]
+    VARIANT border();
+
+    [propput, id(DISPID_IHTMLTABLE_FRAME)]
+    void frame(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_FRAME)]
+    BSTR frame();
+
+    [propput, id(DISPID_IHTMLTABLE_RULES)]
+    void rules(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_RULES)]
+    BSTR rules();
+
+    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
+    void cellSpacing(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
+    VARIANT cellSpacing();
+
+    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
+    void cellPadding(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
+    VARIANT cellPadding();
+
+    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
+    void background(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
+    BSTR background();
+
+    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
+    void bgColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
+    VARIANT bgColor();
+
+    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+    void borderColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+    VARIANT borderColor();
+
+    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+    void borderColorLight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+    VARIANT borderColorLight();
+
+    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+    void borderColorDark(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+    VARIANT borderColorDark();
+
+    [propput, id(DISPID_IHTMLTABLE_ALIGN)]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE_ALIGN)]
+    BSTR align();
+
+    [id(DISPID_IHTMLTABLE_REFRESH)]
+    void refresh();
+
+    [propget, id(DISPID_IHTMLTABLE_ROWS)]
+    IHTMLElementCollection *rows();
+
+    [propput, id(DISPID_IHTMLTABLE_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_WIDTH)]
+    VARIANT width();
+
+    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+    void dataPageSize(LONG v);
+
+    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+    LONG dataPageSize();
+
+    [id(DISPID_IHTMLTABLE_NEXTPAGE)]
+    void nextPage();
+
+    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
+    void previousPage();
+
+    [propget, id(DISPID_IHTMLTABLE_THEAD)]
+    IHTMLTableSection *tHead();
+
+    [propget, id(DISPID_IHTMLTABLE_TFOOT)]
+    IHTMLTableSection *tFoot();
+
+    [propget, id(DISPID_IHTMLTABLE_TBODIES)]
+    IHTMLElementCollection *tBodies();
+
+    [propget, id(DISPID_IHTMLTABLE_CAPTION)]
+    IHTMLTableCaption *caption();
+
+    [id(DISPID_IHTMLTABLE_CREATETHEAD)]
+    IDispatch *createTHead();
+
+    [id(DISPID_IHTMLTABLE_DELETETHEAD)]
+    void deleteTHead();
+
+    [id(DISPID_IHTMLTABLE_CREATETFOOT)]
+    IDispatch *createTFoot();
+
+    [id(DISPID_IHTMLTABLE_DELETETFOOT)]
+    void deleteTFoot();
+
+    [id(DISPID_IHTMLTABLE_CREATECAPTION)]
+    IHTMLTableCaption *createCaption();
+
+    [id(DISPID_IHTMLTABLE_DELETECAPTION)]
+    void deleteCaption();
+
+    [id(DISPID_IHTMLTABLE_INSERTROW)]
+    IDispatch *insertRow([in, defaultvalue(-1)] LONG index);
+
+    [id(DISPID_IHTMLTABLE_DELETEROW)]
+    void deleteRow([in, defaultvalue(-1)] LONG index);
+
+    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
+    void firstPage();
+
+    [id(DISPID_IHTMLTABLE2_LASTPAGE)]
+    void lastPage();
+
+    [propget, id(DISPID_IHTMLTABLE2_CELLS)]
+    IHTMLElementCollection *cells();
+
+    [id(DISPID_IHTMLTABLE2_MOVEROW)]
+    IDispatch *moveRow(
+            [in, defaultvalue(-1)] LONG indexFrom,
+            [in, defaultvalue(-1)] LONG indexTo);
+
+    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+    void summary(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+    BSTR summary();
+}
+
+/*****************************************************************************
+ *    DispHTMLTableRow dispinterface
+ */
+[
+    hidden,
+    uuid(3050f535-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTableRow
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
+    void vAlign(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
+    BSTR vAlign();
+
+    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+    void bgColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+    VARIANT bgColor();
+
+    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+    void borderColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+    VARIANT borderColor();
+
+    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+    void borderColorLight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+    VARIANT borderColorLight();
+
+    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+    void borderColorDark(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+    VARIANT borderColorDark();
+
+    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
+    LONG rowIndex();
+
+    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
+    LONG sectionRowIndex();
+
+    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
+    IHTMLElementCollection *cells();
+
+    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
+    IDispatch *insertCell([in, defaultvalue(-1)] LONG index);
+
+    [id(DISPID_IHTMLTABLEROW_DELETECELL)]
+    void deleteCell([in, defaultvalue(-1)] LONG index);
+
+    [propput, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
+    void ch(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
+    BSTR ch();
+
+    [propput, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
+    void chOff(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
+    BSTR chOff();
+}
+
+/*****************************************************************************
+ *    DispHTMLTableCell dispinterface
+ */
+[
+    hidden,
+    uuid(3050f536-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTableCell
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+    void rowSpan(long v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+    long rowSpan();
+
+    [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+    void colSpan(long v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+    long colSpan();
+
+    [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]
+    void vAlign(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]
+    BSTR vAlign();
+
+    [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+    void bgColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+    VARIANT bgColor();
+
+    [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+    void noWrap(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+    VARIANT_BOOL noWrap();
+
+    [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+    void background(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+    BSTR background();
+
+    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+    void borderColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+    VARIANT borderColor();
+
+    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+    void borderColorLight(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+    VARIANT borderColorLight();
+
+    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+    void borderColorDark(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+    VARIANT borderColorDark();
+
+    [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]
+    VARIANT width();
+
+    [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+    VARIANT height();
+
+    [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]
+    long cellIndex();
+
+    [propput, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]
+    void abbr(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]
+    BSTR abbr();
+
+    [propput, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]
+    void axis(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]
+    BSTR axis();
+
+    [propput, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]
+    void ch(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]
+    BSTR ch();
+
+    [propput, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]
+    void chOff(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]
+    BSTR chOff();
+
+    [propput, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]
+    void headers(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]
+    BSTR headers();
+
+    [propput, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]
+    void scope(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]
+    BSTR scope();
+
+    [propput, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]
+    void ie9_ch(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]
+    BSTR ie9_ch();
+
+    [propput, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]
+    void ie9_chOff(BSTR v);
+
+    [propget, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]
+    BSTR ie9_chOff();
+}
+
+/*****************************************************************************
+ *    IHTMLScriptElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f28b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLScriptElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+    HRESULT src([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+    HRESULT htmlFor([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+    HRESULT htmlFor([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+    HRESULT event([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+    HRESULT event([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+    HRESULT text([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+    HRESULT text([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+    HRESULT defer([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+    HRESULT defer([retval, out] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_READYSTATE)]
+    HRESULT readyState([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLScriptElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f828-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLScriptElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+    HRESULT charset([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+    HRESULT charset([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLScriptElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f530-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLScriptElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+    void src(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+    BSTR src();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+    void htmlFor(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+    BSTR htmlFor();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+    void event(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+    BSTR event();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+    void text(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+    BSTR text();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+    void defer(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+    VARIANT_BOOL defer();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+    void charset(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+    BSTR charset();
+
+    [propput, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
+    void ie8_src(BSTR v);
+
+    [propget, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
+    BSTR ie8_src();
+}
+
+/*****************************************************************************
+ *    IHTMLObjectElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f24f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLObjectElement : IDispatch
+{
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]
+    HRESULT object([retval, out] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CLASSID), hidden]
+    HRESULT classid([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_DATA), hidden]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+    HRESULT recordset([in] IDispatch *v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+    HRESULT recordset([retval, out] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+    HRESULT codeBase([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+    HRESULT codeBase([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+    HRESULT codeType([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+    HRESULT codeType([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+    HRESULT code([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+    HRESULT code([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]
+    HRESULT BaseHref([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]
+    HRESULT form([retval, out] IHTMLFormElement **p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+    HRESULT width([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+    HRESULT height([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_READYSTATE), hidden]
+    HRESULT readyState([retval, out] long *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+    HRESULT altHtml([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+    HRESULT altHtml([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+    HRESULT vspace([in] long v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+    HRESULT vspace([retval, out] long *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+    HRESULT hspace([in] long v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+    HRESULT hspace([retval, out] long *p);
+}
+
+/*****************************************************************************
+ *    IHTMLObjectElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4cd-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLObjectElement2 : IDispatch
+{
+    [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]
+    HRESULT namedRecordset(
+            [in] BSTR dataMember,
+            [in, optional] VARIANT *hierarchy,
+            [out, retval] IDispatch **ppRecordset);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+    HRESULT classid([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+    HRESULT classid([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+    HRESULT data([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+    HRESULT data([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLParamElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f83d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLParamElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+    HRESULT valueType([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+    HRESULT valueType([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLParamElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510444-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLParamElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]
+    HRESULT value([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]
+    HRESULT value([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+    HRESULT valueType([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+    HRESULT valueType([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLObjectElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f529-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLObjectElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]
+    IDispatch *object();
+
+    [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+    void recordset(IDispatch *v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+    IDispatch *recordset();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+    void codeBase(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+    BSTR codeBase();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+    void codeType(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+    BSTR codeType();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+    void code(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+    BSTR code();
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]
+    BSTR BaseHref();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]
+    IHTMLFormElement *form();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+    VARIANT width();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+    void altHtml(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+    BSTR altHtml();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+    void vspace(long v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+    long vspace();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+    void hspace(long v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+    long hspace();
+
+    [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]
+    IDispatch *namedRecordset(
+            [in] BSTR dataMember,
+            [optional, in] VARIANT *hierarchy);
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+    void classid(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+    BSTR classid();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+    void data(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+    BSTR data();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]
+    void archive(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]
+    BSTR archive();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]
+    void alt(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]
+    BSTR alt();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]
+    void declare(VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]
+    VARIANT_BOOL declare();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]
+    void standby(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]
+    BSTR standby();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]
+    void border(VARIANT v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]
+    VARIANT border();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]
+    void useMap(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]
+    BSTR useMap();
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT)]
+    IDispatch *contentDocument();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]
+    void ie8_codeBase(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]
+    BSTR ie8_codeBase();
+
+    [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]
+    void ie8_data(BSTR v);
+
+    [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]
+    BSTR ie8_data();
+}
+
+/*****************************************************************************
+ *    DispHTMLParamElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f590-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLParamElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+    void name(BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+    BSTR name();
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+    void value(BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+    BSTR value();
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+    void valueType(BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+    BSTR valueType();
+
+    [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+    void ie8_valueType(BSTR v);
+
+    [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+    BSTR ie8_valueType();
+}
+
+/*****************************************************************************
+ *    IHTMLFrameBase interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLFrameBase : IDispatch
+{
+    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
+    HRESULT src([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
+    HRESULT name([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
+    HRESULT name([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
+    HRESULT border([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
+    HRESULT border([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
+    HRESULT frameBorder([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
+    HRESULT frameBorder([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
+    HRESULT frameSpacing([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
+    HRESULT frameSpacing([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
+    HRESULT marginWidth([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
+    HRESULT marginWidth([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
+    HRESULT marginHeight([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
+    HRESULT marginHeight([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
+    HRESULT noResize([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
+    HRESULT noResize([out, retval] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
+    HRESULT scrolling([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
+    HRESULT scrolling([out, retval] BSTR *p);
+}
+
+#define WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL          \
+    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]            \
+    void src(BSTR v);                                   \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]            \
+    BSTR src();                                         \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]           \
+    void name(BSTR v);                                  \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]           \
+    BSTR name();                                        \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \
+    void border(VARIANT v);                             \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \
+    VARIANT border();                                   \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \
+    void frameBorder(BSTR v);                           \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \
+    BSTR frameBorder();                                 \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \
+    void frameSpacing(VARIANT v);                       \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \
+    VARIANT frameSpacing();                             \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \
+    void marginWidth(VARIANT v);                        \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \
+    VARIANT marginWidth();                              \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \
+    void marginHeight(VARIANT v);                       \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \
+    VARIANT marginHeight();                             \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \
+    void noResize(VARIANT_BOOL v);                      \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \
+    VARIANT_BOOL noResize();                            \
+                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \
+    void scrolling(BSTR v);                             \
+                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \
+    BSTR scrolling()
+
+/*****************************************************************************
+ *    IHTMLFrameBase2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f6db-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLFrameBase2 : IDispatch
+{
+    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
+    HRESULT contentWindow([retval, out] IHTMLWindow2 **p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
+    HRESULT onload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_READYSTATE)]
+    HRESULT readyState([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
+    HRESULT allowTransparency([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
+    HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);
+}
+
+#define WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL                         \
+    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]                 \
+    IHTMLWindow2 *contentWindow();                                      \
+                                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
+    void onload(VARIANT v);                                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
+    VARIANT onload();                                                   \
+                                                                        \
+    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \
+    void allowTransparency(VARIANT_BOOL v);                             \
+                                                                        \
+    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \
+    VARIANT_BOOL allowTransparency()
+
+#define WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL                           \
+    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
+    void longDesc(BSTR v);                                                \
+                                                                          \
+    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
+    BSTR longDesc()
+
+
+#define WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL \
+    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;  \
+    WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL;   \
+    WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL;  \
+    WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL
+
+/*****************************************************************************
+ *    IHTMLFrameElement3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051042d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLFrameElement3 : IDispatch
+{
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
+    HRESULT contentDocument([out, retval] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    HRESULT src([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    HRESULT longDesc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    HRESULT longDesc([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    HRESULT frameBorder([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    HRESULT frameBorder([out, retval] BSTR * p);
+}
+
+/*****************************************************************************
+ *    DispHTMLFrameElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f513-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLFrameElement
+{
+properties:
+methods:
+    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
+    void borderColor(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
+    VARIANT borderColor();
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
+    VARIANT width();
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
+    IDispatch *contentDocument();
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    void ie8_src(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+    BSTR ie8_src();
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    void ie8_longDesc(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+    BSTR ie8_longDesc();
+
+    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    void ie8_frameBorder(BSTR v);
+
+    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    BSTR ie8_frameBorder();
+}
+
+/*****************************************************************************
+ *    IHTMLIFrameElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f315-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    HRESULT vspace([in] LONG v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    HRESULT vspace([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    HRESULT hspace([in] LONG v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    HRESULT hspace([retval, out] LONG *p);
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    HRESULT align([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    IHTMLIFrameElement2 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f4e6-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement2 : IDispatch
+{
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+    HRESULT height([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+    HRESULT height([out, retval] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+    HRESULT width([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+    HRESULT width([out, retval] VARIANT *p);
+}
+
+/*****************************************************************************
+ *    IHTMLIFrameElement3 interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510433-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement3 : IDispatch
+{
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)]
+    HRESULT contentDocument([out, retval] IDispatch **p);
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+    HRESULT src([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+    HRESULT src([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+    HRESULT longDesc([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+    HRESULT longDesc([out, retval] BSTR *p);
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    HRESULT frameBorder([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    HRESULT frameBorder([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLIFrame dispinterface
+ */
+[
+    hidden,
+    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLIFrame
+{
+properties:
+methods:
+    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    void vspace(LONG v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+    LONG vspace();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    void hspace(LONG v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+    LONG hspace();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    void align(BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+    BSTR align();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+    void height(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+    VARIANT height();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+    void width(VARIANT v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+    VARIANT width();
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)]
+    IDispatch *contentDocument();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+    void ie8_src(BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+    BSTR ie8_src();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+    void ie8_longDesc(BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+    BSTR ie8_longDesc();
+
+    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    void ie8_frameBorder(BSTR v);
+
+    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+    BSTR ie8_frameBorder();
+}
+
+/*****************************************************************************
+ *    IHTMLStyleElement interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3050f375-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleElement : IDispatch
+{
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+    HRESULT type([retval, out] BSTR *p);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_READYSTATE)]
+    HRESULT readyState([retval, out] BSTR *p);
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+    HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+    HRESULT onload([retval, out] VARIANT *p);
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([in] VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+    HRESULT onerror([retval, out] VARIANT *p);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]
+    HRESULT styleSheet([retval, out] IHTMLStyleSheet **p);
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]
+    HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+    HRESULT media([in] BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+    HRESULT media([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ *    DispHTMLStyleElement dispinterface
+ */
+[
+    hidden,
+    uuid(3050f511-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleElement
+{
+properties:
+methods:
+    WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+    void type(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+    BSTR type();
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+    void onload(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+    VARIANT onload();
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+    void onerror(VARIANT v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+    VARIANT onerror();
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]
+    IHTMLStyleSheet *styleSheet();
+
+    [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+    void media(BSTR v);
+
+    [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+    BSTR media();
+}
+
+/*****************************************************************************
+ *    IHTMLStorage interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(30510474-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStorage : IDispatch
+{
+    [propget, id(DISPID_IHTMLSTORAGE_LENGTH), hidden]
+    HRESULT length([out, retval] long *p);
+
+    [propget, id(DISPID_IHTMLSTORAGE_REMAININGSPACE), hidden]
+    HRESULT remainingSpace([out, retval] long *p);
+
+    [id(DISPID_IHTMLSTORAGE_KEY)]
+    HRESULT key(
+            [in] long lIndex,
+            [out, retval] BSTR *);
+
+    [id(DISPID_IHTMLSTORAGE_GETITEM)]
+    HRESULT getItem(
+            [in] BSTR bstrKey,
+            [out, retval] VARIANT *);
+
+    [id(DISPID_IHTMLSTORAGE_SETITEM)]
+    HRESULT setItem(
+            [in] BSTR bstrKey,
+            [in] BSTR bstrValue);
+
+    [id(DISPID_IHTMLSTORAGE_REMOVEITEM)]
+    HRESULT removeItem([in] BSTR bstrKey);
+
+    [id(DISPID_IHTMLSTORAGE_CLEAR)]
+    HRESULT clear();
+}
+
+/*****************************************************************************
+ *    IDOMEventTarget interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(305104b9-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IEventTarget : IDispatch
+{
+    [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]
+    HRESULT addEventListener(
+            [in] BSTR type,
+            [in] IDispatch *listener,
+            [in] VARIANT_BOOL useCapture);
+
+    [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]
+    HRESULT removeEventListener(
+            [in] BSTR type,
+            [in] IDispatch *listener,
+            [in] VARIANT_BOOL useCapture);
+
+    [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]
+    HRESULT dispatchEvent(
+            [in] IDOMEvent *evt,
+            [out, retval] VARIANT_BOOL *pfResult);
+}
+
+/*****************************************************************************
+ *    IDOMEvent interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(305104ba-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IDOMEvent : IDispatch
+{
+    [propget, id(DISPID_IDOMEVENT_BUBBLES)]
+    HRESULT bubbles([out, retval] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IDOMEVENT_CANCELABLE)]
+    HRESULT cancelable([out, retval] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)]
+    HRESULT currentTarget([out, retval] IEventTarget **p);
+
+    [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)]
+    HRESULT defaultPrevented([out, retval] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IDOMEVENT_EVENTPHASE)]
+    HRESULT eventPhase([out, retval] USHORT *p);
+
+    [propget, id(DISPID_IDOMEVENT_TARGET)]
+    HRESULT target([out, retval] IEventTarget **p);
+
+    [propget, id(DISPID_IDOMEVENT_TIMESTAMP)]
+    HRESULT timeStamp([out, retval] ULONGLONG *p);
+
+    [propget, id(DISPID_IDOMEVENT_TYPE)]
+    HRESULT type([out, retval] BSTR *p);
+
+    [id(DISPID_IDOMEVENT_INITEVENT)]
+    HRESULT initEvent(
+            [in] BSTR eventType,
+            [in] VARIANT_BOOL canBubble,
+            [in] VARIANT_BOOL cancelable);
+
+    [id(DISPID_IDOMEVENT_PREVENTDEFAULT)]
+    HRESULT preventDefault();
+
+    [id(DISPID_IDOMEVENT_STOPPROPAGATION)]
+    HRESULT stopPropagation();
+
+    [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)]
+    HRESULT stopImmediatePropagation();
+
+    [propget, id(DISPID_IDOMEVENT_ISTRUSTED)]
+    HRESULT isTrusted([out, retval] VARIANT_BOOL *p);
+
+    [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)]
+    HRESULT cancelBubble([in] VARIANT_BOOL v);
+
+    [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)]
+    HRESULT cancelBubble([out, retval] VARIANT_BOOL *p);
+
+    [propget, id(DISPID_IDOMEVENT_SRCELEMENT)]
+    HRESULT srcElement([out, retval] IHTMLElement **p);
+}
+
+/*****************************************************************************
+ *    IMarkupContainer interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f5f9-98b5-11cf-bb82-00aa00bdce0B)
+]
+interface IMarkupContainer : IUnknown
+{
+    HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);
+}
+
+/*****************************************************************************
+ *    IMarkupPointer interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f49f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IMarkupPointer : IUnknown
+{
+    HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);
+
+    HRESULT Gravity([out] POINTER_GRAVITY *pGravity);
+
+    HRESULT SetGravity([in] POINTER_GRAVITY Gravity);
+
+    HRESULT Cling([out] BOOL *pfCling);
+
+    HRESULT SetCling([in] BOOL fCLing);
+
+    HRESULT UnPosition();
+
+    HRESULT IsPositioned([out] BOOL *pfPositioned);
+
+    HRESULT GetContainer([out] IMarkupContainer **ppContainer);
+
+    HRESULT MoveAdjacentToElement(
+        [in] IHTMLElement *pElement,
+        [in] ELEMENT_ADJACENCY eAdj);
+
+    HRESULT MoveToPointer([in] IMarkupPointer *pPointer);
+
+    HRESULT MoveToContainer(
+        [in] IMarkupContainer *pContainer,
+        [in] BOOL fAtStart);
+
+    HRESULT Left(
+        [in] BOOL fMove,
+        [out] MARKUP_CONTEXT_TYPE *pContext,
+        [out] IHTMLElement **ppElement,
+        [in, out] LONG *pcch,
+        [out, size_is(*pcch)] OLECHAR *pchText);
+
+    HRESULT Right(
+        [in] BOOL fMove,
+        [out] MARKUP_CONTEXT_TYPE *pContext,
+        [out] IHTMLElement **ppElement,
+        [in, out] LONG *pcch,
+        [out, size_is(*pcch)] OLECHAR *pchText);
+
+    HRESULT CurrentScope([out] IHTMLElement **ppElemCurrent);
+
+    HRESULT IsLeftOf(
+        [in] IMarkupPointer *pPointerThat,
+        [out] BOOL *pfResult);
+
+    HRESULT IsLeftOfOrEqualTo(
+        [in] IMarkupPointer *pPointerThat,
+        [out] BOOL *pfResult);
+
+    HRESULT IsRightOf(
+        [in] IMarkupPointer *pPointerThat,
+        [out] BOOL *pfResult);
+
+    HRESULT IsRightOfOrEqualTo(
+        [in] IMarkupPointer *pPointerThat,
+        [out] BOOL *pfResult);
+
+    HRESULT IsEqualTo(
+        [in] IMarkupPointer *pPointerThat,
+        [out] BOOL *pfAreEqual);
+
+    HRESULT MoveUnit([in] MOVEUNIT_ACTION muAction);
+
+    HRESULT FindText(
+        [in] OLECHAR *pchFindText,
+        [in] DWORD dwFlags,
+        [in] IMarkupPointer *pIEndMatch,
+        [in] IMarkupPointer *pIEndSearch);
+}
+
+/*****************************************************************************
+ *    IHTMLDOMConstructorCollection interface
+ */
+[
+    odl,
+    oleautomation,
+    dual,
+    uuid(3051049c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMConstructorCollection : IDispatch
+{
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR)]
+    HRESULT Attr([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION)]
+    HRESULT BehaviorUrnsCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION)]
+    HRESULT BookmarkCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO)]
+    HRESULT CompatibleInfo([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION)]
+    HRESULT CompatibleInfoCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION)]
+    HRESULT ControlRangeCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION)]
+    HRESULT CSSCurrentStyleDeclaration([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST)]
+    HRESULT CSSRuleList([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION)]
+    HRESULT CSSRuleStyleDeclaration([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION)]
+    HRESULT CSSStyleDeclaration([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE)]
+    HRESULT CSSStyleRule([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET)]
+    HRESULT CSSStyleSheet([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER)]
+    HRESULT DataTransfer([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION)]
+    HRESULT DOMImplementation([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT)]
+    HRESULT Element([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT)]
+    HRESULT Event([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY)]
+    HRESULT History([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS)]
+    HRESULT HTCElementBehaviorDefaults([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT)]
+    HRESULT HTMLAnchorElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT)]
+    HRESULT HTMLAreaElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION)]
+    HRESULT HTMLAreasCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT)]
+    HRESULT HTMLBaseElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT)]
+    HRESULT HTMLBaseFontElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT)]
+    HRESULT HTMLBGSoundElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT)]
+    HRESULT HTMLBlockElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT)]
+    HRESULT HTMLBodyElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT)]
+    HRESULT HTMLBRElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT)]
+    HRESULT HTMLButtonElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION)]
+    HRESULT HTMLCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT)]
+    HRESULT HTMLCommentElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT)]
+    HRESULT HTMLDDElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT)]
+    HRESULT HTMLDivElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT)]
+    HRESULT HTMLDocument([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT)]
+    HRESULT HTMLDListElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT)]
+    HRESULT HTMLDTElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT)]
+    HRESULT HTMLEmbedElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT)]
+    HRESULT HTMLFieldSetElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT)]
+    HRESULT HTMLFontElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT)]
+    HRESULT HTMLFormElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT)]
+    HRESULT HTMLFrameElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT)]
+    HRESULT HTMLFrameSetElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT)]
+    HRESULT HTMLGenericElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT)]
+    HRESULT HTMLHeadElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT)]
+    HRESULT HTMLHeadingElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT)]
+    HRESULT HTMLHRElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT)]
+    HRESULT HTMLHtmlElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT)]
+    HRESULT HTMLIFrameElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT)]
+    HRESULT HTMLImageElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT)]
+    HRESULT HTMLInputElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT)]
+    HRESULT HTMLIsIndexElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT)]
+    HRESULT HTMLLabelElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT)]
+    HRESULT HTMLLegendElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT)]
+    HRESULT HTMLLIElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT)]
+    HRESULT HTMLLinkElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT)]
+    HRESULT HTMLMapElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT)]
+    HRESULT HTMLMarqueeElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT)]
+    HRESULT HTMLMetaElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG)]
+    HRESULT HTMLModelessDialog([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO)]
+    HRESULT HTMLNamespaceInfo([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION)]
+    HRESULT HTMLNamespaceInfoCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT)]
+    HRESULT HTMLNextIdElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT)]
+    HRESULT HTMLNoShowElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT)]
+    HRESULT HTMLObjectElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT)]
+    HRESULT HTMLOListElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT)]
+    HRESULT HTMLOptionElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT)]
+    HRESULT HTMLParagraphElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT)]
+    HRESULT HTMLParamElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT)]
+    HRESULT HTMLPhraseElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION)]
+    HRESULT HTMLPluginsCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP)]
+    HRESULT HTMLPopup([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT)]
+    HRESULT HTMLScriptElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT)]
+    HRESULT HTMLSelectElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT)]
+    HRESULT HTMLSpanElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT)]
+    HRESULT HTMLStyleElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT)]
+    HRESULT HTMLTableCaptionElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT)]
+    HRESULT HTMLTableCellElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT)]
+    HRESULT HTMLTableColElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT)]
+    HRESULT HTMLTableElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT)]
+    HRESULT HTMLTableRowElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT)]
+    HRESULT HTMLTableSectionElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT)]
+    HRESULT HTMLTextAreaElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT)]
+    HRESULT HTMLTextElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT)]
+    HRESULT HTMLTitleElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT)]
+    HRESULT HTMLUListElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT)]
+    HRESULT HTMLUnknownElement([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE)]
+    HRESULT Image([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION)]
+    HRESULT Location([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP)]
+    HRESULT NamedNodeMap([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR)]
+    HRESULT Navigator([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST)]
+    HRESULT NodeList([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION)]
+    HRESULT Option([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN)]
+    HRESULT Screen([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION)]
+    HRESULT Selection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST)]
+    HRESULT StaticNodeList([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE)]
+    HRESULT Storage([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST)]
+    HRESULT StyleSheetList([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE)]
+    HRESULT StyleSheetPage([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST)]
+    HRESULT StyleSheetPageList([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT)]
+    HRESULT Text([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE)]
+    HRESULT TextRange([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION)]
+    HRESULT TextRangeCollection([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE)]
+    HRESULT TextRectangle([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST)]
+    HRESULT TextRectangleList([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW)]
+    HRESULT Window([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST)]
+    HRESULT XDomainRequest([out, retval] IDispatch **p);
+
+    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST)]
+    HRESULT XMLHttpRequest([out, retval] IDispatch **p);
+}
+
+/*****************************************************************************
+ *    IXMLGenericParse interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(E4E23071-4D07-11d2-AE76-0080C73BC199)
+]
+interface IXMLGenericParse : IUnknown
+{
+    HRESULT SetGenericParse(
+        [in] VARIANT_BOOL fDoGeneric);
+}
+
+/*****************************************************************************
+ *    ISegment interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f683-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface ISegment : IUnknown
+{
+    HRESULT GetPointers(
+        [in] IMarkupPointer *pIStart,
+        [in] IMarkupPointer *pIEnd);
+}
+
+/*****************************************************************************
+ *    IElementSegment interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f68f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IElementSegment : ISegment
+{
+    HRESULT GetElement([out] IHTMLElement **ppIElement);
+
+    HRESULT SetPrimary([in] BOOL fPrimary);
+
+    HRESULT IsPrimary([out] BOOL *pfPrimary);
+}
+
+/*****************************************************************************
+ *    ISelectionServicesListener interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f699-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface ISelectionServicesListener : IUnknown
+{
+    HRESULT BeginSelectionUndo();
+
+    HRESULT EndSelectionUndo();
+
+    HRESULT OnSelectedElementExit(
+        [in] IMarkupPointer *pIElementStart,
+        [in] IMarkupPointer *pIElementEnd,
+        [in] IMarkupPointer *pIElementContentStart,
+        [in] IMarkupPointer *pIElementContentEnd);
+
+    HRESULT OnChangeType(
+        [in] SELECTION_TYPE eType,
+        [in] ISelectionServicesListener *pIListener);
+
+    HRESULT GetTypeDetail([out] BSTR *pTypeDetail);
+}
+
+/*****************************************************************************
+ *    ISelectionServices interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f684-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface ISelectionServices : IUnknown
+{
+    HRESULT SetSelectionType(
+        [in] SELECTION_TYPE eType,
+        [in] ISelectionServicesListener *pIListener);
+
+    HRESULT GetMarkupContainer([out] IMarkupContainer **ppIContainer);
+
+    HRESULT AddSegment(
+        [in] IMarkupPointer *pIStart,
+        [in] IMarkupPointer *pIEnd,
+        [out] ISegment **ppISegmentAdded);
+
+    HRESULT AddElementSegment(
+        [in] IHTMLElement *pIElement,
+        [out] IElementSegment **ppISegmentAdded);
+
+    HRESULT RemoveSegment([in] ISegment *pISegment);
+
+    HRESULT GetSelectionServicesListener([out] ISelectionServicesListener **ppISelectionServicesListener);
+}
+
+/*****************************************************************************
+ *    IHTMLEditDesigner interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f662-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLEditDesigner : IUnknown
+{
+    HRESULT PreHandleEvent(
+        [in] DISPID inEvtDispId,
+        [in] IHTMLEventObj *pIEventObj);
+
+    HRESULT PostHandleEvent(
+        [in] DISPID inEvtDispId,
+        [in] IHTMLEventObj *pIEventObj);
+
+    HRESULT TranslateAccelerator(
+        [in] DISPID inEvtDispId,
+        [in] IHTMLEventObj *pIEventObj);
+
+    HRESULT PostEditorEventNotify(
+        [in] DISPID inEvtDispId,
+        [in] IHTMLEventObj *pIEventObj);
+}
+
+/*****************************************************************************
+ *    IHTMLEditServices interface
+ */
+[
+    object,
+    pointer_default(unique),
+    uuid(3050f663-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLEditServices : IUnknown
+{
+    HRESULT AddDesigner([in] IHTMLEditDesigner *pIDesigner);
+
+    HRESULT RemoveDesigner([in] IHTMLEditDesigner *pIDesigner);
+
+    HRESULT GetSelectionServices(
+        [in] IMarkupContainer *pIContainer,
+        [out] ISelectionServices **ppSelSvc);
+
+    HRESULT MoveToSelectionAnchor([in] IMarkupPointer *pIStartAnchor);
+
+    HRESULT MoveToSelectionEnd([in] IMarkupPointer *pIEndAnchor);
+
+    HRESULT SelectRange(
+        [in] IMarkupPointer* pStart,
+        [in] IMarkupPointer* pEnd,
+        [in] SELECTION_TYPE eType);
+}
+
+/*****************************************************************************
+ *    IElementBehaviorSite interface
+ */
+[
+    odl,
+    uuid(3050F427-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IElementBehaviorSite : IUnknown {
+    HRESULT GetElement([out, retval] IHTMLElement **ppElement);
+    HRESULT RegisterNotification([in] long lEvent);
+}
+
+/*****************************************************************************
+ *    IElementBehavior interface
+ */
+[
+    odl,
+    uuid(3050F425-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IElementBehavior : IUnknown {
+    HRESULT Init([in] IElementBehaviorSite *pBehaviorSite);
+    HRESULT Notify([in] long lEvent,  [in, out] VARIANT *pVar);
+    HRESULT Detach();
+}
+
+/*****************************************************************************
+ *    IElementBehaviorFactory interface
+ */
+[
+    odl,
+    uuid(3050f429-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IElementBehaviorFactory : IUnknown
+{
+    HRESULT FindBehavior(
+        [in] BSTR bstrBehavior,
+        [in] BSTR bstrBehaviorUrl,
+        [in] IElementBehaviorSite *pSite,
+        [out] IElementBehavior **ppBehavior);
+}
+
+} /* library MSHTML */
+
+interface IOleCommandTarget;
+
+/*****************************************************************************
+ *    IHTMLPrivateWindow interface
+ */
+[
+    object,
+    uuid(3050f6dc-98b5-11cf-bb82-00aa00bdce0b),
+    local
+]
+interface IHTMLPrivateWindow : IUnknown
+{
+    HRESULT SuperNavigate(BSTR url, BSTR arg2, BSTR arg3, BSTR arg4, VARIANT *post_data, VARIANT *headers, ULONG flags);
+    HRESULT GetPendingUrl(BSTR *url);
+    HRESULT SetPICSTarget(IOleCommandTarget *cmdtrg);
+    HRESULT PICSComplete(int arg);
+    HRESULT FindWindowByName(LPCWSTR name, IHTMLWindow2 **ret);
+    HRESULT GetAddressBarUrl(BSTR *url);
+}
+
+/*****************************************************************************
+ *    IWebBrowserPriv interface
+ */
+[
+    object,
+    uuid(3050f804-98b5-11cf-bb82-00aa00bdce0b),
+    local
+]
+interface IWebBrowserPriv : IUnknown
+{
+    HRESULT NavigateWithBindCtx(VARIANT *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,
+            VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment);
+    HRESULT OnClose();
+}
+
+/*****************************************************************************
+ *    IWebBrowserPriv2IE8 interface
+ */
+[
+    object,
+    uuid(3ed72303-6ffc-4214-ba90-faf1862dec8a),
+    local
+]
+interface IWebBrowserPriv2IE8 : IUnknown
+{
+  HRESULT NavigateWithBindCtx2(IUri *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,
+          VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment);
+  HRESULT SetBrowserFrameOptions(DWORD opt1, DWORD opt2);
+  HRESULT DetachConnectionPoints();
+  HRESULT GetProcessId(DWORD *pid);
+  HRESULT CompatAttachEditEvents();
+  HRESULT HandleOpenOptions(IUnknown *obj, BSTR bstr, int options);
+  HRESULT SetSearchTerm(BSTR term);
+  HRESULT GetSearchTerm(BSTR *term);
+  HRESULT GetCurrentDocument(IDispatch** doc);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h
new file mode 100644
index 0000000..c712e3f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h
@@ -0,0 +1,719 @@
+/*
+ * Copyright (C) 2002,2003 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSI_H
+#define __WINE_MSI_H
+
+#ifndef _MSI_NO_CRYPTO
+#include <wincrypt.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ULONG MSIHANDLE;
+
+typedef enum tagINSTALLSTATE
+{
+    INSTALLSTATE_NOTUSED = -7,
+    INSTALLSTATE_BADCONFIG = -6,
+    INSTALLSTATE_INCOMPLETE = -5,
+    INSTALLSTATE_SOURCEABSENT = -4,
+    INSTALLSTATE_MOREDATA = -3,
+    INSTALLSTATE_INVALIDARG = -2,
+    INSTALLSTATE_UNKNOWN = -1,
+    INSTALLSTATE_BROKEN = 0,
+    INSTALLSTATE_ADVERTISED = 1,
+    INSTALLSTATE_ABSENT = 2,
+    INSTALLSTATE_LOCAL = 3,
+    INSTALLSTATE_SOURCE = 4,
+    INSTALLSTATE_DEFAULT = 5
+} INSTALLSTATE;
+
+typedef enum tagMSIPATCHSTATE
+{
+    MSIPATCHSTATE_INVALID = 0,
+    MSIPATCHSTATE_APPLIED = 1,
+    MSIPATCHSTATE_SUPERSEDED = 2,
+    MSIPATCHSTATE_OBSOLETED = 4,
+    MSIPATCHSTATE_REGISTERED = 8,
+    MSIPATCHSTATE_ALL = (MSIPATCHSTATE_APPLIED | MSIPATCHSTATE_SUPERSEDED |
+                         MSIPATCHSTATE_OBSOLETED | MSIPATCHSTATE_REGISTERED)
+} MSIPATCHSTATE;
+
+typedef enum tagINSTALLUILEVEL
+{
+    INSTALLUILEVEL_NOCHANGE = 0,
+    INSTALLUILEVEL_DEFAULT = 1,
+    INSTALLUILEVEL_NONE = 2,
+    INSTALLUILEVEL_BASIC = 3,
+    INSTALLUILEVEL_REDUCED = 4,
+    INSTALLUILEVEL_FULL = 5,
+    INSTALLUILEVEL_HIDECANCEL = 0x20,
+    INSTALLUILEVEL_PROGRESSONLY = 0x40,
+    INSTALLUILEVEL_ENDDIALOG = 0x80,
+    INSTALLUILEVEL_SOURCERESONLY = 0x100
+} INSTALLUILEVEL;
+
+typedef enum tagUSERINFOSTATE
+{
+    USERINFOSTATE_MOREDATA = -3,
+    USERINFOSTATE_INVALIDARG = -2,
+    USERINFOSTATE_UNKNOWN = -1,
+    USERINFOSTATE_ABSENT = 0,
+    USERINFOSTATE_PRESENT = 1,
+} USERINFOSTATE;
+
+typedef enum tagINSTALLLEVEL
+{
+    INSTALLLEVEL_DEFAULT = 0,
+    INSTALLLEVEL_MINIMUM = 1,
+    INSTALLLEVEL_MAXIMUM = 0xFFFF
+} INSTALLLEVEL;
+
+typedef enum tagINSTALLMESSAGE
+{
+    INSTALLMESSAGE_FATALEXIT = 0,
+    INSTALLMESSAGE_ERROR = 0x01000000,
+    INSTALLMESSAGE_WARNING = 0x02000000,
+    INSTALLMESSAGE_USER = 0x03000000,
+    INSTALLMESSAGE_INFO = 0x04000000,
+    INSTALLMESSAGE_FILESINUSE = 0x05000000,
+    INSTALLMESSAGE_RESOLVESOURCE = 0x06000000,
+    INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000,
+    INSTALLMESSAGE_ACTIONSTART = 0x08000000,
+    INSTALLMESSAGE_ACTIONDATA = 0x09000000,
+    INSTALLMESSAGE_PROGRESS = 0x0a000000,
+    INSTALLMESSAGE_COMMONDATA = 0x0b000000,
+    INSTALLMESSAGE_INITIALIZE = 0x0c000000,
+    INSTALLMESSAGE_TERMINATE = 0x0d000000,
+    INSTALLMESSAGE_SHOWDIALOG = 0x0e000000
+} INSTALLMESSAGE;
+
+typedef enum tagREINSTALLMODE
+{
+    REINSTALLMODE_REPAIR = 0x00000001,
+    REINSTALLMODE_FILEMISSING = 0x00000002,
+    REINSTALLMODE_FILEOLDERVERSION = 0x00000004,
+    REINSTALLMODE_FILEEQUALVERSION = 0x00000008,
+    REINSTALLMODE_FILEEXACT = 0x00000010,
+    REINSTALLMODE_FILEVERIFY = 0x00000020,
+    REINSTALLMODE_FILEREPLACE = 0x00000040,
+    REINSTALLMODE_MACHINEDATA = 0x00000080,
+    REINSTALLMODE_USERDATA = 0x00000100,
+    REINSTALLMODE_SHORTCUT = 0x00000200,
+    REINSTALLMODE_PACKAGE = 0x00000400
+} REINSTALLMODE;
+
+typedef enum tagINSTALLLOGMODE
+{
+    INSTALLLOGMODE_FATALEXIT      = (1 << (INSTALLMESSAGE_FATALEXIT >> 24)),
+    INSTALLLOGMODE_ERROR          = (1 << (INSTALLMESSAGE_ERROR >> 24)),
+    INSTALLLOGMODE_WARNING        = (1 << (INSTALLMESSAGE_WARNING >> 24)),
+    INSTALLLOGMODE_USER           = (1 << (INSTALLMESSAGE_USER >> 24)),
+    INSTALLLOGMODE_INFO           = (1 << (INSTALLMESSAGE_INFO >> 24)),
+    INSTALLLOGMODE_RESOLVESOURCE  = (1 << (INSTALLMESSAGE_RESOLVESOURCE >> 24)),
+    INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)),
+    INSTALLLOGMODE_ACTIONSTART    = (1 << (INSTALLMESSAGE_ACTIONSTART >> 24)),
+    INSTALLLOGMODE_ACTIONDATA     = (1 << (INSTALLMESSAGE_ACTIONDATA >> 24)),
+    INSTALLLOGMODE_COMMONDATA     = (1 << (INSTALLMESSAGE_COMMONDATA >> 24)),
+    INSTALLLOGMODE_PROPERTYDUMP   = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),
+    INSTALLLOGMODE_VERBOSE        = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
+    INSTALLLOGMODE_EXTRADEBUG     = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),
+    INSTALLLOGMODE_PROGRESS       = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),
+    INSTALLLOGMODE_INITIALIZE     = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
+    INSTALLLOGMODE_TERMINATE      = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),
+    INSTALLLOGMODE_SHOWDIALOG     = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24))
+} INSTALLLOGMODE;
+
+typedef enum tagINSTALLLOGATTRIBUTES
+{
+    INSTALLLOGATTRIBUTES_APPEND = 0x00000001,
+    INSTALLLOGATTRIBUTES_FLUSHEACHLINE = 0x00000002
+} INSTALLLOGATTRIBUTES;
+
+typedef enum tagINSTALLMODE
+{
+    INSTALLMODE_NODETECTION_ANY     = -4,
+    INSTALLMODE_NOSOURCERESOLUTION  = -3,
+    INSTALLMODE_NODETECTION         = -2,
+    INSTALLMODE_EXISTING            = -1,
+    INSTALLMODE_DEFAULT             = 0
+} INSTALLMODE;
+
+typedef enum tagADVERTISEFLAGS
+{
+    ADVERTISEFLAGS_MACHINEASSIGN = 0,
+    ADVERTISEFLAGS_USERASSIGN = 1
+} ADVERTISEFLAGS;
+
+typedef enum tagSCRIPTFLAGS
+{
+    SCRIPTFLAGS_CACHEINFO = 1,
+    SCRIPTFLAGS_SHORTCUTS = 4,
+    SCRIPTFLAGS_MACHINEASSIGN = 8,
+    SCRIPTFLAGS_REGDATA_APPINFO = 0x10,
+    SCRIPTFLAGS_REGDATA_CNFGINFO = 0x20,
+    SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x40,
+    SCRIPTFLAGS_REGDATA_CLASSINFO = 0x80,
+    SCRIPTFLAGS_REGDATA_EXTENSIONINFO = 0x100,
+} SCRIPTFLAGS;
+
+typedef enum tagINSTALLTYPE
+{
+    INSTALLTYPE_DEFAULT = 0,
+    INSTALLTYPE_NETWORK_IMAGE = 1,
+    INSTALLTYPE_SINGLE_INSTANCE = 2,
+} INSTALLTYPE;
+
+typedef enum tagMSIINSTALLCONTEXT
+{
+    MSIINSTALLCONTEXT_FIRSTVISIBLE  =   0,
+    MSIINSTALLCONTEXT_NONE          =   0,
+    MSIINSTALLCONTEXT_USERMANAGED   =   1,
+    MSIINSTALLCONTEXT_USERUNMANAGED =   2,
+    MSIINSTALLCONTEXT_MACHINE       =   4,
+    MSIINSTALLCONTEXT_ALL           = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE),
+    MSIINSTALLCONTEXT_ALLUSERMANAGED=   8,
+} MSIINSTALLCONTEXT;
+
+typedef enum tagMSISOURCETYPE
+{
+    MSISOURCETYPE_UNKNOWN = __MSABI_LONG(0x00000000),
+    MSISOURCETYPE_NETWORK = __MSABI_LONG(0x00000001),
+    MSISOURCETYPE_URL     = __MSABI_LONG(0x00000002),
+    MSISOURCETYPE_MEDIA   = __MSABI_LONG(0x00000004)
+} MSISOURCETYPE;
+
+typedef enum tagMSICODE
+{
+    MSICODE_PRODUCT = __MSABI_LONG(0x00000000),
+    MSICODE_PATCH   = __MSABI_LONG(0x40000000)
+} MSICODE;
+
+typedef enum tagINSTALLFEATUREATTRIBUTE
+{
+    INSTALLFEATUREATTRIBUTE_FAVORLOCAL             = 1 << 0,
+    INSTALLFEATUREATTRIBUTE_FAVORSOURCE            = 1 << 1,
+    INSTALLFEATUREATTRIBUTE_FOLLOWPARENT           = 1 << 2,
+    INSTALLFEATUREATTRIBUTE_FAVORADVERTISE         = 1 << 3,
+    INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE      = 1 << 4,
+    INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5
+} INSTALLFEATUREATTRIBUTE;
+
+typedef struct _MSIFILEHASHINFO {
+    ULONG dwFileHashInfoSize;
+    ULONG dwData[4];
+} MSIFILEHASHINFO, *PMSIFILEHASHINFO;
+
+typedef enum tagMSIPATCHDATATYPE
+{
+    MSIPATCH_DATATYPE_PATCHFILE = 0,
+    MSIPATCH_DATATYPE_XMLPATH = 1,
+    MSIPATCH_DATATYPE_XMLBLOB = 2,
+} MSIPATCHDATATYPE, *PMSIPATCHDATATYPE;
+
+typedef struct tagMSIPATCHSEQUENCEINFOA
+{
+    LPCSTR szPatchData;
+    MSIPATCHDATATYPE ePatchDataType;
+    DWORD dwOrder;
+    UINT uStatus;
+} MSIPATCHSEQUENCEINFOA, *PMSIPATCHSEQUENCEINFOA;
+
+typedef struct tagMSIPATCHSEQUENCEINFOW
+{
+    LPCWSTR szPatchData;
+    MSIPATCHDATATYPE ePatchDataType;
+    DWORD dwOrder;
+    UINT uStatus;
+} MSIPATCHSEQUENCEINFOW, *PMSIPATCHSEQUENCEINFOW;
+
+#define MAX_FEATURE_CHARS 38
+
+#define ERROR_PATCH_TARGET_NOT_FOUND        1642
+
+/* Strings defined in msi.h */
+/* Advertised Information */
+
+#define INSTALLPROPERTY_PACKAGENAMEA "PackageName"
+static const WCHAR INSTALLPROPERTY_PACKAGENAMEW[] = {'P','a','c','k','a','g','e','N','a','m','e',0};
+#define INSTALLPROPERTY_PACKAGENAME WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGENAME)
+
+#define INSTALLPROPERTY_TRANSFORMSA "Transforms"
+static const WCHAR INSTALLPROPERTY_TRANSFORMSW[] = {'T','r','a','n','s','f','o','r','m','s',0};
+#define INSTALLPROPERTY_TRANSFORMS WINELIB_NAME_AW(INSTALLPROPERTY_TRANSFORMS)
+
+#define INSTALLPROPERTY_LANGUAGEA "Language"
+static const WCHAR INSTALLPROPERTY_LANGUAGEW[] = {'L','a','n','g','u','a','g','e',0};
+#define INSTALLPROPERTY_LANGUAGE WINELIB_NAME_AW(INSTALLPROPERTY_LANGUAGE)
+
+#define INSTALLPROPERTY_PRODUCTNAMEA "ProductName"
+static const WCHAR INSTALLPROPERTY_PRODUCTNAMEW[] = {'P','r','o','d','u','c','t','N','a','m','e',0};
+#define INSTALLPROPERTY_PRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTNAME)
+
+#define INSTALLPROPERTY_ASSIGNMENTTYPEA "AssignmentType"
+static const WCHAR INSTALLPROPERTY_ASSIGNMENTTYPEW[] = {'A','s','s','i','g','n','m','e','n','t','T','y','p','e',0};
+#define INSTALLPROPERTY_ASSIGNMENTTYPE WINELIB_NAME_AW(INSTALLPROPERTY_ASSIGNMENTTYPE)
+
+#define INSTALLPROPERTY_PACKAGECODEA "PackageCode"
+static const WCHAR INSTALLPROPERTY_PACKAGECODEW[] = {'P','a','c','k','a','g','e','C','o','d','e',0};
+#define INSTALLPROPERTY_PACKAGECODE WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGECODE)
+
+#define INSTALLPROPERTY_VERSIONA "Version"
+static const WCHAR INSTALLPROPERTY_VERSIONW[]= {'V','e','r','s','i','o','n',0};
+#define INSTALLPROPERTY_VERSION WINELIB_NAME_AW(INSTALLPROPERTY_VERSION)
+
+/* MSI version 1.1 and above */
+
+#define INSTALLPROPERTY_PRODUCTICONA "ProductIcon"
+static const WCHAR INSTALLPROPERTY_PRODUCTICONW[]  = {'P','r','o','d','u','c','t','I','c','o','n',0};
+#define INSTALLPROPERTY_PRODUCTICON WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTICON)
+
+/* MSI version 1.5 and above */
+#define INSTALLPROPERTY_INSTANCETYPEA "InstanceType"
+static const WCHAR INSTALLPROPERTY_INSTANCETYPEW[] = {'I','n','s','t','a','n','c','e','T','y','p','e',0};
+#define INSTALLPROPERTY_INSTANCETYPE WINELIB_NAME_AW(INSTALLPROPERTY_INSTANCETYPE)
+
+/* MSI version 3 and above */
+#define INSTALLPROPERTY_AUTHORIZED_LUA_APPA "AuthorizedLUAApp"
+static const WCHAR INSTALLPROPERTY_AUTHORIZED_LUA_APPW[] = {'A','u','t','h','o','r','i','z','e','d','L','U','A','A','p','p',0};
+#define INSTALLPROPERTY_AUTHORIZED_LUA_APP WINELIB_NAME_AW(INSTALLPROPERTY_AUTHORIZED_LUA_APP)
+
+
+/* Installed Information */
+#define INSTALLPROPERTY_INSTALLEDPRODUCTNAMEA "InstalledProductName"
+static const WCHAR INSTALLPROPERTY_INSTALLEDPRODUCTNAMEW[] = {'I','n','s','t','a','l','l','e','d','P','r','o','d','u','c','t','N','a','m','e',0};
+#define INSTALLPROPERTY_INSTALLEDPRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLEDPRODUCTNAME)
+
+#define INSTALLPROPERTY_VERSIONSTRINGA "VersionString"
+static const WCHAR INSTALLPROPERTY_VERSIONSTRINGW[] = {'V','e','r','s','i','o','n','S','t','r','i','n','g',0};
+#define INSTALLPROPERTY_VERSIONSTRING WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONSTRING)
+
+#define INSTALLPROPERTY_HELPLINKA "HelpLink"
+static const WCHAR INSTALLPROPERTY_HELPLINKW[] = {'H','e','l','p','L','i','n','k',0};
+#define INSTALLPROPERTY_HELPLINK WINELIB_NAME_AW(INSTALLPROPERTY_HELPLINK)
+
+#define INSTALLPROPERTY_HELPTELEPHONEA "HelpTelephone"
+static const WCHAR INSTALLPROPERTY_HELPTELEPHONEW[] = {'H','e','l','p','T','e','l','e','p','h','o','n','e',0};
+#define INSTALLPROPERTY_HELPTELEPHONE WINELIB_NAME_AW(INSTALLPROPERTY_HELPTELEPHONE)
+
+#define INSTALLPROPERTY_INSTALLLOCATIONA "InstallLocation"
+static const WCHAR INSTALLPROPERTY_INSTALLLOCATIONW[] = {'I','n','s','t','a','l','l','L','o','c','a','t','i','o','n',0};
+#define INSTALLPROPERTY_INSTALLLOCATION WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLLOCATION)
+
+#define INSTALLPROPERTY_INSTALLSOURCEA "InstallSource"
+static const WCHAR INSTALLPROPERTY_INSTALLSOURCEW[] = {'I','n','s','t','a','l','l','S','o','u','r','c','e',0};
+#define INSTALLPROPERTY_INSTALLSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLSOURCE)
+
+#define INSTALLPROPERTY_INSTALLDATEA "InstallDate"
+static const WCHAR INSTALLPROPERTY_INSTALLDATEW[] = {'I','n','s','t','a','l','l','D','a','t','e',0};
+#define INSTALLPROPERTY_INSTALLDATE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLDATE)
+
+#define INSTALLPROPERTY_PUBLISHERA "Publisher"
+static const WCHAR INSTALLPROPERTY_PUBLISHERW[] ={'P','u','b','l','i','s','h','e','r',0};
+#define INSTALLPROPERTY_PUBLISHER WINELIB_NAME_AW(INSTALLPROPERTY_PUBLISHER)
+
+#define INSTALLPROPERTY_LOCALPACKAGEA "LocalPackage"
+static const WCHAR INSTALLPROPERTY_LOCALPACKAGEW[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0};
+#define INSTALLPROPERTY_LOCALPACKAGE WINELIB_NAME_AW(INSTALLPROPERTY_LOCALPACKAGE)
+
+#define INSTALLPROPERTY_URLINFOABOUTA "URLInfoAbout"
+static const WCHAR INSTALLPROPERTY_URLINFOABOUTW[] = {'U','R','L','I','n','f','o','A','b','o','u','t',0};
+#define INSTALLPROPERTY_URLINFOABOUT WINELIB_NAME_AW(INSTALLPROPERTY_URLINFOABOUT)
+
+#define INSTALLPROPERTY_URLUPDATEINFOA "URLUpdateInfo"
+static const WCHAR INSTALLPROPERTY_URLUPDATEINFOW[] = {'U','R','L','U','p','d','a','t','e','I','n','f','o',0};
+#define INSTALLPROPERTY_URLUPDATEINFO WINELIB_NAME_AW(INSTALLPROPERTY_URLUPDATEINFO)
+
+#define INSTALLPROPERTY_VERSIONMINORA "VersionMinor"
+static const WCHAR INSTALLPROPERTY_VERSIONMINORW[] = {'V','e','r','s','i','o','n','M','i','n','o','r',0};
+#define INSTALLPROPERTY_VERSIONMINOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMINOR)
+
+#define INSTALLPROPERTY_VERSIONMAJORA "VersionMajor"
+static const WCHAR INSTALLPROPERTY_VERSIONMAJORW[] = {'V','e','r','s','i','o','n','M','a','j','o','r',0};
+#define INSTALLPROPERTY_VERSIONMAJOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMAJOR)
+
+#define INSTALLPROPERTY_PRODUCTIDA "ProductID"
+static const WCHAR INSTALLPROPERTY_PRODUCTIDW[] = {'P','r','o','d','u','c','t','I','D',0};
+#define INSTALLPROPERTY_PRODUCTID WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTID)
+
+#define INSTALLPROPERTY_REGCOMPANYA "RegCompany"
+static const WCHAR INSTALLPROPERTY_REGCOMPANYW[] = {'R','e','g','C','o','m','p','a','n','y',0};
+#define INSTALLPROPERTY_REGCOMPANY WINELIB_NAME_AW(INSTALLPROPERTY_REGCOMPANY)
+
+#define INSTALLPROPERTY_REGOWNERA "RegOwner"
+static const WCHAR INSTALLPROPERTY_REGOWNERW[] = {'R','e','g','O','w','n','e','r',0};
+#define INSTALLPROPERTY_REGOWNER WINELIB_NAME_AW(INSTALLPROPERTY_REGOWNER)
+
+/* MSI Version 3.0 and greater */
+#define INSTALLPROPERTY_UNINSTALLABLEA "Uninstallable"
+static const WCHAR INSTALLPROPERTY_UNINSTALLABLEW[] = {'U','n','i','n','s','t','a','l','l','a','b','l','e',0};
+#define INSTALLPROPERTY_UNINSTALLABLE WINELIB_NAME_AW(INSTALLPROPERTY_UNINSTALLABLE)
+
+#define INSTALLPROPERTY_PRODUCTSTATEA "State"
+static const WCHAR INSTALLPROPERTY_PRODUCTSTATEW[] = {'S','t','a','t','e',0};
+#define INSTALLPROPERTY_PRODUCTSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTSTATE)
+
+#define INSTALLPROPERTY_PATCHSTATEA "State"
+static const WCHAR INSTALLPROPERTY_PATCHSTATEW[] ={'S','t','a','t','e',0};
+#define INSTALLPROPERTY_PATCHSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHSTATE)
+
+#define INSTALLPROPERTY_PATCHTYPEA "PatchType"
+static const WCHAR INSTALLPROPERTY_PATCHTYPEW[] = {'P','a','t','c','h','T','y','p','e',0};
+#define INSTALLPROPERTY_PATCHTYPE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHTYPE)
+
+#define INSTALLPROPERTY_LUAENABLEDA "LUAEnabled"
+static const WCHAR INSTALLPROPERTY_LUAENABLEDW[] = {'L','U','A','E','n','a','b','l','e','d',0};
+#define INSTALLPROPERTY_LUAENABLED WINELIB_NAME_AW(INSTALLPROPERTY_LUAENABLED)
+
+#define INSTALLPROPERTY_DISPLAYNAMEA "DisplayName"
+static const WCHAR INSTALLPROPERTY_DISPLAYNAMEW[] = {'D','i','s','p','l','a','y','N','a','m','e',0};
+#define INSTALLPROPERTY_DISPLAYNAME WINELIB_NAME_AW(INSTALLPROPERTY_DISPLAYNAME)
+
+#define INSTALLPROPERTY_MOREINFOURLA "MoreInfoURL"
+static const WCHAR INSTALLPROPERTY_MOREINFOURLW[] = {'M','o','r','e','I','n','f','o','U','R','L',0};
+#define INSTALLPROPERTY_MOREINFOURL WINELIB_NAME_AW(INSTALLPROPERTY_MOREINFOURL)
+
+/* Source List Info */
+#define INSTALLPROPERTY_LASTUSEDSOURCEA "LastUsedSource"
+static const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[] = {'L','a','s','t','U','s','e','d','S','o','u','r','c','e',0};
+#define INSTALLPROPERTY_LASTUSEDSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDSOURCE)
+
+#define INSTALLPROPERTY_LASTUSEDTYPEA "LastUsedType"
+static const WCHAR INSTALLPROPERTY_LASTUSEDTYPEW[] = {'L','a','s','t','U','s','e','d','T','y','p','e',0};
+#define INSTALLPROPERTY_LASTUSEDTYPE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDTYPE)
+
+#define INSTALLPROPERTY_MEDIAPACKAGEPATHA "MediaPackagePath"
+static const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[] = {'M','e','d','i','a','P','a','c','k','a','g','e','P','a','t','h',0};
+#define INSTALLPROPERTY_MEDIAPACKAGEPATH WINELIB_NAME_AW(INSTALLPROPERTY_MEDIAPACKAGEPATH)
+
+#define INSTALLPROPERTY_DISKPROMPTA "DiskPrompt"
+static const WCHAR INSTALLPROPERTY_DISKPROMPTW[] = {'D','i','s','k','P','r','o','m','p','t',0};
+#define INSTALLPROPERTY_DISKPROMPT WINELIB_NAME_AW(INSTALLPROPERTY_DISKPROMPT)
+
+typedef INT (CALLBACK *INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR);
+typedef INT (CALLBACK *INSTALLUI_HANDLERW)(LPVOID, UINT, LPCWSTR);
+typedef INT (CALLBACK *INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE);
+typedef INSTALLUI_HANDLER_RECORD* PINSTALLUI_HANDLER_RECORD;
+
+UINT WINAPI MsiAdvertiseProductA(LPCSTR, LPCSTR, LPCSTR, LANGID);
+UINT WINAPI MsiAdvertiseProductW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID);
+#define     MsiAdvertiseProduct WINELIB_NAME_AW(MsiAdvertiseProduct)
+
+UINT WINAPI MsiAdvertiseProductExA(LPCSTR, LPCSTR, LPCSTR, LANGID, DWORD, DWORD);
+UINT WINAPI MsiAdvertiseProductExW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID, DWORD, DWORD);
+#define     MsiAdvertiseProductEx WINELIB_NAME_AW(MsiAdvertiseProductEx)
+
+UINT WINAPI MsiInstallProductA(LPCSTR, LPCSTR);
+UINT WINAPI MsiInstallProductW(LPCWSTR, LPCWSTR);
+#define     MsiInstallProduct WINELIB_NAME_AW(MsiInstallProduct)
+
+UINT WINAPI MsiReinstallProductA(LPCSTR, DWORD);
+UINT WINAPI MsiReinstallProductW(LPCWSTR, DWORD);
+#define     MsiReinstallProduct WINELIB_NAME_AW(MsiReinstallProduct)
+
+UINT WINAPI MsiApplyPatchA(LPCSTR, LPCSTR, INSTALLTYPE, LPCSTR);
+UINT WINAPI MsiApplyPatchW(LPCWSTR, LPCWSTR, INSTALLTYPE, LPCWSTR);
+#define     MsiApplyPatch WINELIB_NAME_AW(MsiApplyPatch)
+
+UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE, LPCSTR, DWORD, INSTALLSTATE, LPSTR, LPDWORD, LPINT, LPINT);
+UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE, LPCWSTR, DWORD, INSTALLSTATE, LPWSTR, LPDWORD, LPINT, LPINT);
+#define     MsiEnumComponentCosts WINELIB_NAME_AW(MsiEnumComponentCosts)
+
+UINT WINAPI MsiEnumProductsA(DWORD, LPSTR);
+UINT WINAPI MsiEnumProductsW(DWORD, LPWSTR);
+#define     MsiEnumProducts WINELIB_NAME_AW(MsiEnumProducts)
+
+UINT WINAPI MsiEnumProductsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR[39], MSIINSTALLCONTEXT*, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumProductsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR[39], MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);
+#define     MsiEnumProductsEx WINELIB_NAME_AW(MsiEnumProductsEx)
+
+UINT WINAPI MsiEnumFeaturesA(LPCSTR, DWORD, LPSTR, LPSTR);
+UINT WINAPI MsiEnumFeaturesW(LPCWSTR, DWORD, LPWSTR, LPWSTR);
+#define     MsiEnumFeatures WINELIB_NAME_AW(MsiEnumFeatures)
+
+UINT WINAPI MsiEnumComponentsA(DWORD, LPSTR);
+UINT WINAPI MsiEnumComponentsW(DWORD, LPWSTR);
+#define     MsiEnumComponents WINELIB_NAME_AW(MsiEnumComponents)
+
+UINT WINAPI MsiEnumComponentsExA(LPCSTR, DWORD, DWORD, CHAR[39],
+                                 MSIINSTALLCONTEXT *, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumComponentsExW(LPCWSTR, DWORD, DWORD, WCHAR[39],
+                                 MSIINSTALLCONTEXT *, LPWSTR, LPDWORD);
+#define     MsiEnumComponentsEx WINELIB_NAME_AW(MsiEnumComponentsEx)
+
+UINT WINAPI MsiEnumClientsA(LPCSTR, DWORD, LPSTR);
+UINT WINAPI MsiEnumClientsW(LPCWSTR, DWORD, LPWSTR);
+#define     MsiEnumClients WINELIB_NAME_AW(MsiEnumClients)
+
+UINT WINAPI MsiOpenPackageA(LPCSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenPackageW(LPCWSTR, MSIHANDLE*);
+#define     MsiOpenPackage WINELIB_NAME_AW(MsiOpenPackage)
+
+UINT WINAPI MsiOpenPackageExA(LPCSTR, DWORD, MSIHANDLE*);
+UINT WINAPI MsiOpenPackageExW(LPCWSTR, DWORD, MSIHANDLE*);
+#define     MsiOpenPackageEx WINELIB_NAME_AW(MsiOpenPackageEx)
+
+UINT WINAPI MsiOpenProductA(LPCSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenProductW(LPCWSTR, MSIHANDLE*);
+#define     MsiOpenProduct WINELIB_NAME_AW(MsiOpenProduct)
+
+UINT WINAPI MsiGetProductPropertyA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
+UINT WINAPI MsiGetProductPropertyW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define     MsiGetProductProperty WINELIB_NAME_AW(MsiGetProductProperty)
+
+UINT WINAPI MsiVerifyPackageA(LPCSTR);
+UINT WINAPI MsiVerifyPackageW(LPCWSTR);
+#define     MsiVerifyPackage WINELIB_NAME_AW(MsiVerifyPackage)
+
+UINT WINAPI MsiQueryComponentStateA(LPCSTR,LPCSTR,MSIINSTALLCONTEXT,LPCSTR,INSTALLSTATE*);
+UINT WINAPI MsiQueryComponentStateW(LPCWSTR,LPCWSTR,MSIINSTALLCONTEXT,LPCWSTR,INSTALLSTATE*);
+#define     MsiQueryComponentState WINELIB_NAME_AW(MsiQueryComponentState)
+
+INSTALLSTATE WINAPI MsiQueryProductStateA(LPCSTR);
+INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR);
+#define      MsiQueryProductState WINELIB_NAME_AW(MsiQueryProductState)
+
+UINT WINAPI MsiConfigureProductA(LPCSTR, int, INSTALLSTATE);
+UINT WINAPI MsiConfigureProductW(LPCWSTR, int, INSTALLSTATE);
+#define     MsiConfigureProduct WINELIB_NAME_AW(MsiConfigureProduct);
+
+UINT WINAPI MsiConfigureProductExA(LPCSTR, int, INSTALLSTATE, LPCSTR);
+UINT WINAPI MsiConfigureProductExW(LPCWSTR, int, INSTALLSTATE, LPCWSTR);
+#define     MsiConfigureProductEx WINELIB_NAME_AW(MsiConfigureProductEx);
+
+UINT WINAPI MsiConfigureFeatureA(LPCSTR, LPCSTR, INSTALLSTATE);
+UINT WINAPI MsiConfigureFeatureW(LPCWSTR, LPCWSTR, INSTALLSTATE);
+#define     MsiConfigureFeature WINELIB_NAME_AW(MsiConfigureFeature);
+
+UINT WINAPI MsiGetProductCodeA(LPCSTR, LPSTR);
+UINT WINAPI MsiGetProductCodeW(LPCWSTR, LPWSTR);
+#define     MsiGetProductCode WINELIB_NAME_AW(MsiGetProductCode)
+
+UINT WINAPI MsiGetProductInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetProductInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiGetProductInfo WINELIB_NAME_AW(MsiGetProductInfo)
+
+UINT WINAPI MsiGetProductInfoExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetProductInfoExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiGetProductInfoEx WINELIB_NAME_AW(MsiGetProductInfoEx)
+
+UINT WINAPI MsiGetPatchInfoExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetPatchInfoExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiGetPatchInfoEx WINELIB_NAME_AW(MsiGetPatchInfoEx)
+
+UINT WINAPI MsiGetPatchInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetPatchInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiGetPatchInfo WINELIB_NAME_AW(MsiGetPatchInfo)
+
+UINT WINAPI MsiEnableLogA(DWORD, LPCSTR, DWORD);
+UINT WINAPI MsiEnableLogW(DWORD, LPCWSTR, DWORD);
+#define     MsiEnableLog WINELIB_NAME_AW(MsiEnableLog)
+
+INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA, DWORD, LPVOID);
+INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW, DWORD, LPVOID);
+#define MsiSetExternalUI WINELIB_NAME_AW(MsiSetExternalUI)
+
+INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
+INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetComponentPath WINELIB_NAME_AW(MsiGetComponentPath)
+
+INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR, LPCSTR);
+INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR, LPCWSTR);
+#define MsiQueryFeatureState WINELIB_NAME_AW(MsiQueryFeatureState)
+
+UINT WINAPI MsiQueryFeatureStateExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*);
+UINT WINAPI MsiQueryFeatureStateExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, INSTALLSTATE*);
+#define     MsiQueryFeatureStateEx WINELIB_NAME_AW(MsiQueryFeatureStateEx)
+
+UINT WINAPI MsiGetFeatureInfoA(MSIHANDLE, LPCSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiGetFeatureInfoW(MSIHANDLE, LPCWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiGetFeatureInfo WINELIB_NAME_AW(MsiGetFeatureInfo)
+
+UINT WINAPI MsiGetFeatureUsageA(LPCSTR, LPCSTR, LPDWORD, LPWORD);
+UINT WINAPI MsiGetFeatureUsageW(LPCWSTR, LPCWSTR, LPDWORD, LPWORD);
+#define MsiGetFeatureUsage WINELIB_NAME_AW(MsiGetFeatureUsage)
+
+UINT WINAPI MsiEnumRelatedProductsA(LPCSTR, DWORD, DWORD, LPSTR);
+UINT WINAPI MsiEnumRelatedProductsW(LPCWSTR, DWORD, DWORD, LPWSTR);
+#define MsiEnumRelatedProducts WINELIB_NAME_AW(MsiEnumRelatedProducts)
+
+UINT WINAPI MsiProvideAssemblyA(LPCSTR, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiProvideAssemblyW(LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);
+#define MsiProvideAssembly WINELIB_NAME_AW(MsiProvideAssembly)
+
+UINT WINAPI MsiEnumComponentQualifiersA(LPCSTR, DWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumComponentQualifiersW(LPCWSTR, DWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiEnumComponentQualifiers WINELIB_NAME_AW(MsiEnumComponentQualifiers)
+
+UINT WINAPI MsiGetFileVersionA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiGetFileVersionW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiGetFileVersion WINELIB_NAME_AW(MsiGetFileVersion)
+
+UINT WINAPI MsiMessageBoxA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);
+UINT WINAPI MsiMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);
+#define MsiMessageBox WINELIB_NAME_AW(MsiMessageBox)
+
+UINT WINAPI MsiProvideQualifiedComponentExA(LPCSTR, LPCSTR, DWORD, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);
+#define MsiProvideQualifiedComponentEx WINELIB_NAME_AW(MsiProvideQualifiedComponentEx)
+
+UINT WINAPI MsiProvideQualifiedComponentA(LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiProvideQualifiedComponentW(LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD);
+#define MsiProvideQualifiedComponent WINELIB_NAME_AW(MsiProvideQualifiedComponent)
+
+USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
+USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiGetUserInfo WINELIB_NAME_AW(MsiGetUserInfo)
+
+UINT WINAPI MsiCollectUserInfoA(LPCSTR);
+UINT WINAPI MsiCollectUserInfoW(LPCWSTR);
+#define MsiCollectUserInfo WINELIB_NAME_AW(MsiCollectUserInfo)
+
+UINT WINAPI MsiReinstallFeatureA(LPCSTR, LPCSTR, DWORD);
+UINT WINAPI MsiReinstallFeatureW(LPCWSTR, LPCWSTR, DWORD);
+#define MsiReinstallFeature WINELIB_NAME_AW(MsiReinstallFeature)
+
+UINT WINAPI MsiGetShortcutTargetA(LPCSTR, LPSTR, LPSTR, LPSTR);
+UINT WINAPI MsiGetShortcutTargetW(LPCWSTR, LPWSTR, LPWSTR, LPWSTR);
+#define MsiGetShortcutTarget WINELIB_NAME_AW(MsiGetShortcutTarget)
+
+INSTALLSTATE WINAPI MsiUseFeatureW(LPCWSTR, LPCWSTR);
+INSTALLSTATE WINAPI MsiUseFeatureA(LPCSTR, LPCSTR);
+#define MsiUseFeature WINELIB_NAME_AW(MsiUseFeature)
+
+INSTALLSTATE WINAPI MsiUseFeatureExW(LPCWSTR, LPCWSTR, DWORD, DWORD);
+INSTALLSTATE WINAPI MsiUseFeatureExA(LPCSTR, LPCSTR, DWORD, DWORD);
+#define MsiUseFeatureEx WINELIB_NAME_AW(MsiUseFeatureEx)
+
+HRESULT WINAPI MsiGetFileSignatureInformationA(LPCSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);
+HRESULT WINAPI MsiGetFileSignatureInformationW(LPCWSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);
+#define MsiGetFileSignatureInformation WINELIB_NAME_AW(MsiGetFileSignatureInformation)
+
+INSTALLSTATE WINAPI MsiLocateComponentA(LPCSTR, LPSTR, LPDWORD);
+INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR, LPWSTR, LPDWORD);
+#define  MsiLocateComponent WINELIB_NAME_AW(MsiLocateComponent)
+
+UINT WINAPI MsiSourceListAddSourceA(LPCSTR, LPCSTR, DWORD, LPCSTR);
+UINT WINAPI MsiSourceListAddSourceW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR);
+#define     MsiSourceListAddSource WINELIB_NAME_AW(MsiSourceListAddSource)
+
+UINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,
+                                         LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,
+                                         LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define     MsiSourceListEnumMediaDisks WINELIB_NAME_AW(MsiSourceListEnumMediaDisks)
+
+UINT WINAPI MsiSourceListEnumSourcesA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPWSTR, LPDWORD);
+#define     MsiSourceListEnumSources WINELIB_NAME_AW(MsiSourceListEnumSources)
+
+UINT WINAPI MsiSourceListClearSourceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR);
+UINT WINAPI MsiSourceListClearSourceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR);
+#define     MsiSourceListClearSource WINELIB_NAME_AW(MsiSourceListClearSource)
+
+UINT WINAPI MsiSourceListClearAllA(LPCSTR, LPCSTR, DWORD);
+UINT WINAPI MsiSourceListClearAllW(LPCWSTR, LPCWSTR, DWORD);
+#define     MsiSourceListClearAll WINELIB_NAME_AW(MsiSourceListClearAll)
+
+UINT WINAPI MsiSourceListGetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListGetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo)
+
+UINT WINAPI MsiSourceListSetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPCSTR);
+UINT WINAPI MsiSourceListSetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPCWSTR);
+#define     MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo)
+
+UINT WINAPI MsiSourceListAddSourceExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD);
+UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, DWORD);
+#define     MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx)
+
+UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR);
+UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCWSTR, LPCWSTR);
+#define     MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk)
+
+UINT WINAPI MsiEnumPatchesA(LPCSTR, DWORD, LPSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumPatchesW(LPCWSTR, DWORD, LPWSTR, LPWSTR, LPDWORD);
+#define     MsiEnumPatches WINELIB_NAME_AW(MsiEnumPatches)
+
+UINT WINAPI MsiEnumPatchesExA(LPCSTR, LPCSTR, DWORD, DWORD, DWORD, LPSTR, LPSTR,
+                              MSIINSTALLCONTEXT*, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumPatchesExW(LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, LPWSTR, LPWSTR,
+                              MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);
+#define     MsiEnumPatchesEx WINELIB_NAME_AW(MsiEnumPatchesEx)
+
+UINT WINAPI MsiGetFileHashA(LPCSTR, DWORD, PMSIFILEHASHINFO);
+UINT WINAPI MsiGetFileHashW(LPCWSTR, DWORD, PMSIFILEHASHINFO);
+#define     MsiGetFileHash WINELIB_NAME_AW(MsiGetFileHash)
+
+UINT WINAPI MsiAdvertiseScriptA(LPCSTR, DWORD, PHKEY, BOOL);
+UINT WINAPI MsiAdvertiseScriptW(LPCWSTR, DWORD, PHKEY, BOOL);
+#define     MsiAdvertiseScript WINELIB_NAME_AW(MsiAdvertiseScript)
+
+UINT WINAPI MsiIsProductElevatedA(LPCSTR, BOOL *);
+UINT WINAPI MsiIsProductElevatedW(LPCWSTR, BOOL *);
+#define     MsiIsProductElevated WINELIB_NAME_AW(MsiIsProductElevated)
+
+UINT WINAPI MsiDatabaseMergeA(MSIHANDLE, MSIHANDLE, LPCSTR);
+UINT WINAPI MsiDatabaseMergeW(MSIHANDLE, MSIHANDLE, LPCWSTR);
+#define     MsiDatabaseMerge WINELIB_NAME_AW(MsiDatabaseMerge)
+
+UINT WINAPI MsiInstallMissingComponentA(LPCSTR, LPCSTR, INSTALLSTATE);
+UINT WINAPI MsiInstallMissingComponentW(LPCWSTR, LPCWSTR, INSTALLSTATE);
+#define     MsiInstallMissingComponent WINELIB_NAME_AW(MsiInstallMissingComponent)
+
+UINT WINAPI MsiDetermineApplicablePatchesA(LPCSTR, DWORD, PMSIPATCHSEQUENCEINFOA);
+UINT WINAPI MsiDetermineApplicablePatchesW(LPCWSTR, DWORD, PMSIPATCHSEQUENCEINFOW);
+#define     MsiDetermineApplicablePatches WINELIB_NAME_AW(MsiDetermineApplicablePatches)
+
+UINT WINAPI MsiDeterminePatchSequenceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOA);
+UINT WINAPI MsiDeterminePatchSequenceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOW);
+#define     MsiDeterminePatchSequence WINELIB_NAME_AW(MsiDeterminePatchSequence)
+
+UINT WINAPI MsiApplyMultiplePatchesA(LPCSTR, LPCSTR, LPCSTR);
+UINT WINAPI MsiApplyMultiplePatchesW(LPCWSTR, LPCWSTR, LPCWSTR);
+#define     MsiApplyMultiplePatches WINELIB_NAME_AW(MsiApplyMultiplePatches)
+
+UINT WINAPI MsiBeginTransactionA(LPCSTR, DWORD, MSIHANDLE *, HANDLE *);
+UINT WINAPI MsiBeginTransactionW(LPCWSTR, DWORD, MSIHANDLE *, HANDLE *);
+#define     MsiBeginTransaction WINELIB_NAME_AW(MsiBeginTransaction)
+
+UINT WINAPI MsiEndTransaction(DWORD);
+
+/* Non Unicode */
+UINT WINAPI MsiCloseHandle(MSIHANDLE);
+UINT WINAPI MsiCloseAllHandles(void);
+INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL, HWND*);
+UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD, DWORD, LPVOID, PINSTALLUI_HANDLER_RECORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MSI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h
new file mode 100644
index 0000000..2ab0137
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSIDEFS_H
+#define __WINE_MSIDEFS_H
+
+enum msidbUpgradeAttributes {
+    msidbUpgradeAttributesMigrateFeatures = 0x0000001,
+    msidbUpgradeAttributesOnlyDetect = 0x00000002,
+    msidbUpgradeAttributesIgnoreRemoveFailure = 0x00000004,
+    msidbUpgradeAttributesVersionMinInclusive = 0x00000100,
+    msidbUpgradeAttributesVersionMaxInclusive = 0x00000200,
+    msidbUpgradeAttributesLanguagesExclusive = 0x00000400
+};
+
+enum msidbFileAttributes {
+    msidbFileAttributesReadOnly = 0x00000001,
+    msidbFileAttributesHidden = 0x00000002,
+    msidbFileAttributesSystem = 0x00000004,
+    msidbFileAttributesVital = 0x00000200,
+    msidbFileAttributesChecksum = 0x00000400,
+    msidbFileAttributesPatchAdded = 0x00001000,
+    msidbFileAttributesNoncompressed = 0x00002000,
+    msidbFileAttributesCompressed = 0x00004000
+};
+
+enum msidbPatchAttributes {
+    msidbPatchAttributesNonVital = 0x00000001
+};
+
+enum msidbDialogAttributes {
+    msidbDialogAttributesVisible = 0x00000001,
+    msidbDialogAttributesModal = 0x00000002,
+    msidbDialogAttributesMinimize = 0x00000004,
+    msidbDialogAttributesSysModal = 0x00000008,
+    msidbDialogAttributesKeepModeless = 0x00000010,
+    msidbDialogAttributesTrackDiskSpace = 0x00000020,
+    msidbDialogAttributesUseCustomPalette = 0x00000040,
+    msidbDialogAttributesRTLRO = 0x00000080,
+    msidbDialogAttributesRightAligned = 0x00000100,
+    msidbDialogAttributesLeftScroll = 0x00000200,
+    msidbDialogAttributesBidi = 0x00000380,
+    msidbDialogAttributesError = 0x00010000
+};
+
+enum msidbControlAttributes {
+    msidbControlAttributesVisible = 0x00000001,
+    msidbControlAttributesEnabled = 0x00000002,
+    msidbControlAttributesSunken = 0x00000004,
+    msidbControlAttributesIndirect = 0x00000008,
+    msidbControlAttributesInteger = 0x00000010,
+    msidbControlAttributesRTLRO = 0x00000020,
+    msidbControlAttributesRightAligned = 0x00000040,
+    msidbControlAttributesLeftScroll = 0x00000080,
+    msidbControlAttributesBiDi = 0x000000c0,
+
+    msidbControlAttributesTransparent = 0x00010000,
+    msidbControlAttributesNoPrefix = 0x00020000,
+    msidbControlAttributesNoWrap = 0x00040000,
+    msidbControlAttributesFormatSize = 0x00080000,
+    msidbControlAttributesUsersLanguage = 0x00100000,
+
+    msidbControlAttributesMultiline = 0x00010000,
+    msidbControlAttributesPasswordInput = 0x00200000,
+
+    msidbControlAttributesProgress95 = 0x00010000,
+
+    msidbControlAttributesRemovableVolume = 0x00010000,
+    msidbControlAttributesFixedVolume = 0x00020000,
+    msidbControlAttributesRemoteVolume = 0x00040000,
+    msidbControlAttributesCDROMVolume = 0x00080000,
+    msidbControlAttributesRAMdiskVolume = 0x00100000,
+    msidbControlAttributesFloppyVolume = 0x00200000,
+    msidbControlShowRollbackCost = 0x00400000,
+
+    msidbControlAttributesSorted = 0x00010000,
+    msidbControlAttributesComboList = 0x00020000,
+
+    msidbControlAttributesImageHandle = 0x00010000,
+    msidbControlAttributesPushLike = 0x00020000,
+    msidbControlAttributesBitmap = 0x00040000,
+    msidbControlAttributesIcon = 0x00080000,
+    msidbControlAttributesFixedSize = 0x00100000,
+    msidbControlAttributesIconSize16 = 0x00200000,
+    msidbControlAttributesIconSize32 = 0x00400000,
+    msidbControlAttributesIconSize48 = 0x00600000,
+
+    msidbControlAttributesHasBorder = 0x01000000,
+};
+
+enum msidbTextStyleStyleBits
+{
+    msidbTextStyleStyleBitsBold = 0x00000001,
+    msidbTextStyleStyleBitsItalic = 0x00000002,
+    msidbTextStyleStyleBitsUnderline = 0x00000004,
+    msidbTextStyleStyleBitsStrike = 0x00000008,
+};
+
+enum msidbCustomActionType
+{
+    msidbCustomActionTypeDll = 0x00000001,
+    msidbCustomActionTypeExe = 0x00000002,
+    msidbCustomActionTypeTextData = 0x00000003,
+    msidbCustomActionTypeJScript = 0x00000005,
+    msidbCustomActionTypeVBScript = 0x00000006,
+    msidbCustomActionTypeInstall = 0x00000007,
+
+    msidbCustomActionTypeBinaryData = 0x00000000,
+    msidbCustomActionTypeSourceFile = 0x00000010,
+    msidbCustomActionTypeDirectory = 0x00000020,
+    msidbCustomActionTypeProperty = 0x00000030,
+
+    msidbCustomActionTypeContinue = 0x00000040,
+    msidbCustomActionTypeAsync = 0x00000080,
+
+    msidbCustomActionTypeFirstSequence = 0x00000100,
+    msidbCustomActionTypeOncePerProcess = 0x00000200,
+    msidbCustomActionTypeClientRepeat = 0x00000300,
+    msidbCustomActionTypeInScript = 0x00000400,
+
+    msidbCustomActionTypeRollback = 0x00000100,
+    msidbCustomActionTypeCommit = 0x00000200,
+
+    msidbCustomActionTypeNoImpersonate = 0x00000800,
+    msidbCustomActionTypeTSAware = 0x00004000,
+
+    msidbCustomActionType64BitScript = 0x00001000,
+    msidbCustomActionTypeHideTarget = 0x00002000
+};
+
+enum msidbFeatureAttributes
+{
+    msidbFeatureAttributesFavorLocal = 0x00000000,
+    msidbFeatureAttributesFavorSource = 0x00000001,
+    msidbFeatureAttributesFollowParent = 0x00000002,
+    msidbFeatureAttributesFavorAdvertise = 0x00000004,
+    msidbFeatureAttributesDisallowAdvertise = 0x00000008,
+    msidbFeatureAttributesUIDisallowAbsent = 0x00000010,
+    msidbFeatureAttributesNoUnsupportedAdvertise = 0x00000020
+};
+
+enum msidbComponentAttributes
+{
+    msidbComponentAttributesLocalOnly = 0x00000000,
+    msidbComponentAttributesSourceOnly = 0x00000001,
+    msidbComponentAttributesOptional = 0x00000002,
+    msidbComponentAttributesRegistryKeyPath = 0x00000004,
+    msidbComponentAttributesSharedDllRefCount = 0x00000008,
+    msidbComponentAttributesPermanent = 0x00000010,
+    msidbComponentAttributesODBCDataSource = 0x00000020,
+    msidbComponentAttributesTransitive = 0x00000040,
+    msidbComponentAttributesNeverOverwrite = 0x00000080,
+    msidbComponentAttributes64bit = 0x00000100
+};
+
+enum msidbODBCDataSourceRegistration
+{
+    msidbODBCDataSourceRegistrationPerMachine = 0x00000000,
+    msidbODBCDataSourceRegistrationPerUser = 0x00000001
+};
+
+enum msidbRegistryRoot
+{
+    msidbRegistryRootClassesRoot = 0,
+    msidbRegistryRootCurrentUser = 1,
+    msidbRegistryRootLocalMachine = 2,
+    msidbRegistryRootUsers = 3,
+};
+
+enum msidbLocatorType
+{
+    msidbLocatorTypeDirectory = 0x000,
+    msidbLocatorTypeFileName = 0x001,
+    msidbLocatorTypeRawValue = 0x002,
+    msidbLocatorType64bit = 0x010,
+};
+
+enum msidbServiceControlEvent
+{
+    msidbServiceControlEventStart = 0x00000001,
+    msidbServiceControlEventStop = 0x00000002,
+    msidbServiceControlEventDelete = 0x00000008,
+    msidbServiceControlEventUninstallStart = 0x00000010,
+    msidbServiceControlEventUninstallStop = 0x00000020,
+    msidbServiceControlEventUninstallDelete = 0x00000080,
+};
+
+enum msidbMoveFileOptions
+{
+    msidbMoveFileOptionsMove = 0x00000001,
+};
+
+enum msidbAssemblyAttributes
+{
+    msidbAssemblyAttributesURT = 0x00000000,
+    msidbAssemblyAttributesWin32 = 0x00000001,
+};
+
+enum msidbSumInfoSourceType
+{
+    msidbSumInfoSourceTypeSFN = 0x00000001,
+    msidbSumInfoSourceTypeCompressed = 0x00000002,
+    msidbSumInfoSourceTypeAdminImage = 0x00000004,
+    msidbSumInfoSourceTypeLUAPackage = 0x00000008,
+};
+
+enum msidbRemoveFileInstallMode
+{
+    msidbRemoveFileInstallModeOnInstall = 0x00000001,
+    msidbRemoveFileInstallModeOnRemove = 0x00000002,
+    msidbRemoveFileInstallModeOnBoth = 0x00000003,
+};
+
+enum
+{
+    msidbIniFileActionAddLine    = 0x00000000,
+    msidbIniFileActionCreateLine = 0x00000001,
+    msidbIniFileActionRemoveLine = 0x00000002,
+    msidbIniFileActionAddTag     = 0x00000003,
+    msidbIniFileActionRemoveTag  = 0x00000004
+};
+
+/*
+ * Windows SDK braindamage alert
+ *
+ * PID_DICTIONARY and PID_CODEPAGE are defined by propidl.h too
+ * PID_SECURITY is defined in propidl.h with a different value!
+ * So these need to be undefined first.
+ */
+#ifdef PID_DICTIONARY
+#undef PID_DICTIONARY
+#endif
+
+#ifdef PID_CODEPAGE
+#undef PID_CODEPAGE
+#endif
+
+#ifdef PID_SECURITY
+#undef PID_SECURITY
+#endif
+
+#define PID_DICTIONARY 0
+#define PID_CODEPAGE 1
+#define PID_TITLE 2
+#define PID_SUBJECT 3
+#define PID_AUTHOR 4
+#define PID_KEYWORDS 5
+#define PID_COMMENTS 6
+#define PID_TEMPLATE 7
+#define PID_LASTAUTHOR 8
+#define PID_REVNUMBER 9
+#define PID_EDITTIME 10
+#define PID_LASTPRINTED 11
+#define PID_CREATE_DTM 12
+#define PID_LASTSAVE_DTM 13
+#define PID_PAGECOUNT 14
+#define PID_WORDCOUNT 15
+#define PID_CHARCOUNT 16
+#define PID_THUMBNAIL 17
+#define PID_APPNAME 18
+#define PID_SECURITY 19
+#define PID_MSIVERSION PID_PAGECOUNT
+#define PID_MSISOURCE PID_WORDCOUNT
+#define PID_MSIRESTRICT PID_CHARCOUNT
+
+#endif /* __WINE_MSIDEFS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl
new file mode 100644
index 0000000..62350b5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2012 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+cpp_quote("#define E_IDENTITIES_DISABLED       _HRESULT_TYPEDEF_(0x80007110)")
+cpp_quote("#define S_IDENTITIES_DISABLED       _HRESULT_TYPEDEF_(0x00007110)")
+cpp_quote("#define E_NO_CURRENT_IDENTITY       _HRESULT_TYPEDEF_(0x80007111)")
+cpp_quote("#define E_USER_CANCELLED            _HRESULT_TYPEDEF_(0x80007112)")
+cpp_quote("#define E_PROCESS_CANCELLED_SWITCH  _HRESULT_TYPEDEF_(0x80007113)")
+cpp_quote("#define E_IDENTITY_NOT_FOUND        _HRESULT_TYPEDEF_(0x80007114)")
+cpp_quote("#define E_IDENTITY_EXISTS           _HRESULT_TYPEDEF_(0x80007115)")
+cpp_quote("#define E_IDENTITY_CHANGING         _HRESULT_TYPEDEF_(0x80007116)")
+
+[
+    uuid(a9ae6c8e-1d1b-11d2-b21a-00c04fa357fa),
+]
+interface IUserIdentity : IUnknown
+{
+    HRESULT GetCookie([out] GUID *puidCookie);
+
+    HRESULT GetName(
+            [in] WCHAR *pszName,
+            [in] ULONG ulBuffSize);
+
+    [local]
+    HRESULT OpenIdentityRegKey(
+            [in]DWORD dwDesiredAccess,
+            [out] HKEY *phKey);
+
+    HRESULT GetIdentityFolder(
+            [in] DWORD dwFlags,
+            [in] WCHAR *pszPath,
+            [in] ULONG ulBuffSize);
+
+cpp_quote("#define GIF_ROAMING_FOLDER     0x0001")
+cpp_quote("#define GIF_NON_ROAMING_FOLDER 0x0002")
+}
+
+[
+    uuid(a9ae6c8f-1d1b-11d2-b21a-00c04fa357fa),
+    odl
+]
+interface IEnumUserIdentity : IUnknown
+{
+    HRESULT Next(
+            [in] ULONG celt,
+            [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt,
+            [out] ULONG *pceltFetched);
+
+    HRESULT Skip([in] ULONG celt);
+    HRESULT Reset();
+    HRESULT Clone([out] IEnumUserIdentity **ppenum);
+    HRESULT GetCount([out] ULONG *pnCount);
+}
+
+[
+    uuid(a9ae6c90-1d1b-11d2-b21a-00c04fa357fa)
+]
+interface IUserIdentityManager : IUnknown
+{
+    HRESULT EnumIdentities([out] IEnumUserIdentity **ppEnumUser);
+    HRESULT ManageIdentities([in] HWND hwndParent, [in] DWORD dwFlags);
+
+cpp_quote("#define UIMI_CREATE_NEW_IDENTITY 0x0001")
+    HRESULT Logon([in] HWND hwndParent, [in] DWORD dwFlags, [out] IUserIdentity **ppIdentity);
+
+cpp_quote("#define UIL_FORCE_UI 0x80000001")
+    HRESULT Logoff([in] HWND hwndParent);
+
+    HRESULT GetIdentityByCookie([in] GUID *uidCookie, [out] IUserIdentity **ppIdentity);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_UserIdentityManager, 0xa9ae6c91,0x1d1b,0x11d2,0xb2,0x1a,0x00,0xc0,0x4f,0xa3,0x57,0xfa);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl
new file mode 100644
index 0000000..c4f54c3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl
@@ -0,0 +1,1018 @@
+/* Copyright (C) 2007 C John Klehm
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+    uuid(7D868ACD-1A5D-4A47-A247-F39741353012),
+    version(1.0)
+]
+library MSINKAUTLib
+{
+    importlib("stdole2.tlb");
+
+    typedef float single;
+
+    typedef enum InkBoundingBoxMode {
+        IBBM_Default = 0,
+        IBBM_NoCurveFit = 1,
+        IBBM_CurveFit = 2,
+        IBBM_PointsOnly = 3,
+        IBBM_Union = 4
+    } InkBoundingBoxMode;
+
+    typedef enum InkExtractFlags {
+        IEF_CopyFromOriginal = 0x0,
+        IEF_RemoveFromOriginal = 0x1,
+        IEF_Default = IEF_RemoveFromOriginal
+    } InkExtractFlags;
+
+    typedef enum InkPersistenceFormat {
+        IPF_InkSerializeFormat = 0,
+        IPF_Base64InkSerializedFormat = 1,
+        IPF_GIF = 2,
+        IPF_Base64GIF = 3
+    } InkPersistenceFormat;
+
+    typedef enum InkPersistenceCompressionMode
+    {
+        IPCM_Default = 0,
+        IPCM_MaximumCompression = 1,
+        IPCM_NoCompression = 2
+    } InkPersistenceCompressionMode;
+
+    typedef enum InkPenTip {
+        IPT_Ball = 0,
+        IPT_Rectangle = 1
+    } InkPenTip;
+
+    typedef enum InkRasterOperation {
+        IRO_Black = 1,
+        IRO_NotMergePen,
+        IRO_MaskNotPen,
+        IRO_NotCopyPen,
+        IRO_MaskPenNot,
+        IRO_Not,
+        IRO_XOrPen,
+        IRO_NotMaskPen,
+        IRO_MaskPen,
+        IRO_NotXOrPen,
+        IRO_NoOperation,
+        IRO_MergeNotPen,
+        IRO_CopyPen,
+        IRO_MergePenNot,
+        IRO_MergePen,
+        IRO_White
+    } InkRasterOperation;
+
+    typedef enum InkClipboardModes {
+        ICB_Copy = 0,
+        ICB_Cut = 0x1,
+        ICB_DelayedCopy = 0x20,
+        ICB_ExtractOnly = 0x30,
+        ICB_Default = ICB_Copy
+    } InkClipboardModes;
+
+    typedef enum InkClipboardFormats {
+        ICF_None = 0,
+        ICF_InkSerializedFormat = 0x1,
+        ICF_SketchInk = 0x2,
+        ICF_TextInk = 0x6,
+        ICF_EnhancedMetafile = 0x8,
+        ICF_Metafile = 0x20,
+        ICF_Bitmap = 0x40,
+        ICF_PasteMask = 0x7,
+        ICF_CopyMask = 0x7f,
+        ICF_Default = ICF_CopyMask
+    } InkClipboardFormats;
+
+    typedef enum InkRecognitionConfidence
+    {
+        IRC_Strong = 0,
+        IRC_Intermediate = 1,
+        IRC_Poor = 2
+    } InkRecognitionConfidence;
+
+    [
+        odl,
+        uuid(DB489209-B7C3-411D-90F6-1548CFFF271E),
+        dual,
+        oleautomation
+    ]
+    interface IInkExtendedProperty : IDispatch {
+        [id(0x00000001), propget] HRESULT Guid([out, retval] BSTR* Guid);
+        [id(0x00000002), propget] HRESULT Data([out, retval] VARIANT* Data);
+        [id(0x00000002), propput] HRESULT Data([in] VARIANT Data);
+    };
+
+    [
+        odl,
+        uuid(89F2A8BE-95A9-4530-8B8F-88E971E3E25F),
+        dual,
+        oleautomation
+    ]
+    interface IInkExtendedProperties : IDispatch {
+        HRESULT Count([out, retval] long* Count);
+        HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
+        HRESULT Item(
+            [in] VARIANT Identifier,
+            [out, retval] IInkExtendedProperty** Item);
+        HRESULT Add(
+            [in] BSTR Guid,
+            [in] VARIANT Data,
+            [out, retval] IInkExtendedProperty** InkExtendedProperty);
+        HRESULT Remove([in] VARIANT Identifier);
+        HRESULT Clear();
+        HRESULT DoesPropertyExist(
+            [in] BSTR Guid,
+            [out, retval] VARIANT_BOOL* DoesPropertyExist);
+    };
+
+    [
+        odl,
+        uuid(BF519B75-0A15-4623-ADC9-C00D436A8092),
+        dual,
+        oleautomation
+    ]
+    interface IInkDrawingAttributes : IDispatch {
+        [id(0x00000002), propget] HRESULT Color(
+            [out, retval] long* CurrentColor);
+        [id(0x00000002), propput] HRESULT Color([in] long CurrentColor);
+        [id(0x00000003), propget] HRESULT Width(
+            [out, retval] single* CurrentWidth);
+        [id(0x00000003), propput] HRESULT Width([in] single CurrentWidth);
+        [id(0x00000001), propget] HRESULT Height(
+            [out, retval] single* CurrentHeight);
+        [id(0x00000001), propput] HRESULT Height([in] single CurrentHeight);
+        [id(0x00000004), propget] HRESULT FitToCurve(
+            [out, retval] VARIANT_BOOL* Flag);
+        [id(0x00000004), propput] HRESULT FitToCurve([in] VARIANT_BOOL Flag);
+        [id(0x00000005), propget] HRESULT IgnorePressure(
+            [out, retval] VARIANT_BOOL* Flag);
+        [id(0x00000005), propput] HRESULT IgnorePressure(
+            [in] VARIANT_BOOL Flag);
+        [id(0x00000006), propget] HRESULT AntiAliased(
+            [out, retval] VARIANT_BOOL* Flag);
+        [id(0x00000006), propput] HRESULT AntiAliased([in] VARIANT_BOOL Flag);
+        [id(0x00000007), propget] HRESULT Transparency(
+            [out, retval] long* CurrentTransparency);
+        [id(0x00000007), propput] HRESULT Transparency(
+            [in] long CurrentTransparency);
+        [id(0x00000008), propget] HRESULT RasterOperation(
+            [out, retval] InkRasterOperation* CurrentRasterOperation);
+        [id(0x00000008), propput] HRESULT RasterOperation(
+            [in] InkRasterOperation CurrentRasterOperation);
+        [id(0x00000009), propget] HRESULT PenTip(
+            [out, retval] InkPenTip* CurrentPenTip);
+        [id(0x00000009), propput] HRESULT PenTip([in] InkPenTip CurrentPenTip);
+        [id(0x0000000b), propget] HRESULT ExtendedProperties(
+            [out, retval] IInkExtendedProperties** Properties);
+        [id(0x0000000a)]          HRESULT Clone(
+            [out, retval] IInkDrawingAttributes** DrawingAttributes);
+    };
+
+cpp_quote("#ifndef _WINGDI_")
+/* already defined in wingdi.h but needed for WIDL */
+    typedef struct tagXFORM {
+        single eM11;
+        single eM12;
+        single eM21;
+        single eM22;
+        single eDx;
+        single eDy;
+    } XFORM;
+cpp_quote("#endif /* _WINGDI_ */")
+
+    [
+        odl,
+        uuid(615F1D43-8703-4565-88E2-8201D2ECD7B7),
+        dual,
+        oleautomation
+    ]
+    interface IInkTransform : IDispatch {
+        [id(0x00000001)] HRESULT Reset();
+        [id(0x00000002)] HRESULT Translate(
+            [in] single HorizontalComponent,
+            [in] single VerticalComponent);
+        [id(0x00000003)] HRESULT Rotate(
+            [in] single Degrees,
+            [in, optional, defaultvalue(0)] single x,
+            [in, optional, defaultvalue(0)] single y);
+        [id(0x00000004)] HRESULT Reflect(
+            [in] VARIANT_BOOL Horizontally,
+            [in] VARIANT_BOOL Vertically);
+        [id(0x00000005)] HRESULT Shear(
+            [in] single HorizontalComponent,
+            [in] single VerticalComponent);
+        [id(0x00000006)] HRESULT ScaleTransform(
+            [in] single HorizontalMultiplier,
+            [in] single VerticalMultiplier);
+        [id(0x0000000d)] HRESULT GetTransform(
+            [out] single* eM11,
+            [out] single* eM12,
+            [out] single* eM21,
+            [out] single* eM22,
+            [out] single* eDx,
+            [out] single* eDy);
+        [id(0x0000000e)] HRESULT SetTransform(
+            [in] single eM11,
+            [in] single eM12,
+            [in] single eM21,
+            [in] single eM22,
+            [in] single eDx,
+            [in] single eDy);
+        [id(0x00000007), propget, hidden] HRESULT eM11(
+            [out, retval] single* Value);
+        [id(0x00000007), propput, hidden] HRESULT eM11([in] single Value);
+        [id(0x00000008), propget, hidden] HRESULT eM12(
+            [out, retval] single* Value);
+        [id(0x00000008), propput, hidden] HRESULT eM12([in] single Value);
+        [id(0x00000009), propget, hidden] HRESULT eM21(
+            [out, retval] single* Value);
+        [id(0x00000009), propput, hidden] HRESULT eM21([in] single Value);
+        [id(0x0000000a), propget, hidden] HRESULT eM22(
+            [out, retval] single* Value);
+        [id(0x0000000a), propput, hidden] HRESULT eM22([in] single Value);
+        [id(0x0000000b), propget, hidden] HRESULT eDx(
+            [out, retval] single* Value);
+        [id(0x0000000b), propput, hidden] HRESULT eDx([in] single Value);
+        [id(0x0000000c), propget, hidden] HRESULT eDy(
+            [out, retval] single* Value);
+        [id(0x0000000c), propput, hidden] HRESULT eDy([in] single Value);
+        [id(0x0000000f), propget, hidden] HRESULT Data(
+            [out, retval] XFORM* XFORM);
+        [id(0x0000000f), propput, hidden] HRESULT Data([in] XFORM XFORM);
+    };
+
+    interface IInkDisp;
+
+    [
+        odl,
+        uuid(9794FF82-6071-4717-8A8B-6AC7C64A686E),
+        dual,
+        oleautomation
+    ]
+    interface IInkRectangle
+    {
+        [id(1), propget] HRESULT Top([out, retval] long* Units);
+        [id(1), propput] HRESULT Top([in] long Units);
+        [id(2), propget] HRESULT Left([out, retval] long* Units);
+        [id(2), propput] HRESULT Left([in] long Units);
+        [id(3), propget] HRESULT Bottom([out, retval] long* Units);
+        [id(3), propput] HRESULT Bottom([in] long Units);
+        [id(4), propget] HRESULT Right([out, retval] long* Units);
+        [id(4), propput] HRESULT Right([in] long Units);
+        [id(7), propget] HRESULT Data([out, retval] RECT* Rect);
+        [id(7), propput] HRESULT Data([in] RECT Rect);
+        [id(5)] HRESULT GetRectangle(
+            [out] long* Top,
+            [out] long* Left,
+            [out] long* Bottom,
+            [out] long* Right);
+        [id(6)] HRESULT SetRectangle(
+            [in] long Top,
+            [in] long Left,
+            [in] long Bottom,
+            [in] long Right);
+    };
+
+    interface IInkStrokes;
+
+    typedef enum {
+        TPMU_Default,
+        TPMU_Inches,
+        TPMU_Centimeters,
+        TPMU_Degrees,
+        TPMU_Radians,
+        TPMU_Seconds,
+        TPMU_Pounds,
+        TPMU_Grams
+    } TabletPropertyMetricUnit;
+
+    [
+        odl,
+        uuid(43242FEA-91D1-4A72-963E-FBB91829CFA2),
+        dual,
+        oleautomation
+    ]
+    interface IInkStrokeDisp : IDispatch {
+        [id(0x00000002), propget]    HRESULT Id([out, retval] long* Id);
+        [id(0x0000000d), propget]    HRESULT BezierPoints(
+            [out, retval] VARIANT* Points);
+        [id(0x00000004), propget]    HRESULT DrawingAttributes(
+            [out, retval] IInkDrawingAttributes** DrawAttrs);
+        [id(0x00000004), propputref] HRESULT DrawingAttributes(
+            [in] IInkDrawingAttributes* DrawAttrs);
+        [id(0x0000000c), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);
+        [id(0x0000000b), propget]    HRESULT ExtendedProperties(
+            [out, retval] IInkExtendedProperties** Properties);
+        [id(0x0000000e), propget]    HRESULT PolylineCusps(
+            [out, retval] VARIANT* Cusps);
+        [id(0x0000000f), propget]    HRESULT BezierCusps(
+            [out, retval] VARIANT* Cusps);
+        [id(0x00000010), propget]    HRESULT SelfIntersections(
+            [out, retval] VARIANT* Intersections);
+        [id(0x00000011), propget]    HRESULT PacketCount(
+            [out, retval] long* plCount);
+        [id(0x00000012), propget]    HRESULT PacketSize(
+            [out, retval] long* plSize);
+        [id(0x00000013), propget]    HRESULT PacketDescription(
+            [out, retval] VARIANT* PacketDescription);
+        [id(0x00000014), propget]    HRESULT Deleted(
+            [out, retval] VARIANT_BOOL* Deleted);
+        [id(0x00000003)]             HRESULT GetBoundingBox(
+            [in, optional, defaultvalue(0)] InkBoundingBoxMode BoundingBoxMode,
+            [out, retval] IInkRectangle** Rectangle);
+        [id(0x00000005)]             HRESULT FindIntersections(
+            [in] IInkStrokes* Strokes,
+            [out, retval] VARIANT* Intersections);
+        [id(0x00000006)]             HRESULT GetRectangleIntersections(
+            [in] IInkRectangle* Rectangle,
+            [out, retval] VARIANT* Intersections);
+        [id(0x00000007)]             HRESULT Clip(
+            [in] IInkRectangle* Rectangle);
+        [id(0x00000008)]             HRESULT HitTestCircle(
+            [in] long x,
+            [in] long y,
+            [in] single radius,
+            [out, retval] VARIANT_BOOL* Intersects);
+        [id(0x00000009)]             HRESULT NearestPoint(
+            [in] long x,
+            [in] long y,
+            [in, out, optional, defaultvalue(0)] single* Distance,
+            [out, retval] single* Point);
+        [id(0x0000000a)]             HRESULT Split(
+            [in] single SplitAt,
+            [out, retval] IInkStrokeDisp** NewStroke);
+        [id(0x00000015)]             HRESULT GetPacketDescriptionPropertyMetrics(
+            [in] BSTR propertyName,
+            [out] long* Minimum,
+            [out] long* Maximum,
+            [out] TabletPropertyMetricUnit* Units,
+            [out] single* Resolution);
+        [id(0x00000016)]             HRESULT GetPoints(
+            [in, optional, defaultvalue(0)] long Index,
+            [in, optional, defaultvalue(-1)] long Count,
+            [out, retval] VARIANT* Points);
+        [id(0x00000017)]             HRESULT SetPoints(
+            [in] VARIANT Points,
+            [in, optional, defaultvalue(0)] long Index,
+            [in, optional, defaultvalue(-1)] long Count,
+            [out, retval] long* NumberOfPointsSet);
+        [id(0x00000018)]             HRESULT GetPacketData(
+            [in, optional, defaultvalue(0)] long Index,
+            [in, optional, defaultvalue(-1)] long Count,
+            [out, retval] VARIANT* PacketData);
+        [id(0x00000019)]             HRESULT GetPacketValuesByProperty(
+            [in] BSTR propertyName,
+            [in, optional, defaultvalue(0)] long Index,
+            [in, optional, defaultvalue(-1)] long Count,
+            [out, retval] VARIANT* PacketValues);
+        [id(0x0000001a)]             HRESULT SetPacketValuesByProperty(
+            [in] BSTR bstrPropertyName,
+            [in] VARIANT PacketValues,
+            [in, optional, defaultvalue(0)] long Index,
+            [in, optional, defaultvalue(-1)] long Count,
+            [out, retval] long* NumberOfPacketsSet);
+        [id(0x0000001b)]             HRESULT GetFlattenedBezierPoints(
+            [in, optional, defaultvalue(0)] long FittingError,
+            [out, retval] VARIANT* FlattenedBezierPoints);
+        [id(0x0000001d)]             HRESULT Transform(
+            [in] IInkTransform* Transform,
+            [in, optional, defaultvalue(0)] VARIANT_BOOL ApplyOnPenWidth);
+        [id(0x0000001c)]             HRESULT ScaleToRectangle(
+            [in] IInkRectangle* Rectangle);
+        [id(0x0000001e)]             HRESULT Move(
+            [in] single HorizontalComponent,
+            [in] single VerticalComponent);
+        [id(0x0000001f)]             HRESULT Rotate(
+            [in] single Degrees,
+            [in, optional, defaultvalue(0)] single x,
+            [in, optional, defaultvalue(0)] single y);
+        [id(0x00000020)]             HRESULT Shear(
+            [in] single HorizontalMultiplier,
+            [in] single VerticalMultiplier);
+        [id(0x00000021)]             HRESULT ScaleTransform(
+            [in] single HorizontalMultiplier,
+            [in] single VerticalMultiplier);
+    };
+
+    interface IInkRecognitionResult;
+
+    [
+        odl,
+        uuid(F1F4C9D8-590A-4963-B3AE-1935671BB6F3),
+        dual,
+        oleautomation
+    ]
+    interface IInkStrokes : IDispatch {
+        [propget]                   HRESULT Count(
+            [out, retval] long *Count);
+        [propget, restricted]       HRESULT _NewEnum(
+            [out, retval] IUnknown **_NewEnum);
+        [propget]                   HRESULT Ink(
+            [out, retval] IInkDisp **Ink);
+        [propget]                   HRESULT RecognitionResult(
+            [out, retval] IInkRecognitionResult **RecognitionResult);
+        HRESULT ToString(
+            [out, retval] BSTR *ToString);
+        HRESULT Item(
+            [in] long Index,
+            [out, retval] IInkStrokeDisp **Stroke);
+        HRESULT Add(
+            [in] IInkStrokeDisp *InkStroke);
+        HRESULT AddStrokes(
+            [in] IInkStrokes *InkStrokes);
+        HRESULT Remove(
+            [in] IInkStrokeDisp *InkStroke);
+        HRESULT RemoveStrokes(
+            [in] IInkStrokes *InkStrokes);
+        HRESULT ModifyDrawingAttributes(
+            [in] IInkDrawingAttributes *DrawAttrs);
+        HRESULT GetBoundingBox(
+            [in] InkBoundingBoxMode BoundingBoxMode,
+            [out, retval] IInkRectangle **BoundingBox);
+        HRESULT Transform(
+            [in] IInkTransform *Transform,
+            [in] VARIANT_BOOL ApplyOnPenWidth);
+        HRESULT ScaleToRectangle(
+            [in] IInkRectangle *Rectangle);
+        HRESULT Move(
+            [in] float HorizontalComponent,
+            [in] float VerticalComponent);
+        HRESULT Rotate(
+            [in] float Degrees,
+            [in] float x,
+            [in] float y);
+        HRESULT Shear(
+            [in] float HorizontalMultiplier,
+            [in] float VerticalMultiplier);
+        HRESULT ScaleTransform(
+            [in] float HorizontalMultiplier,
+            [in] float VerticalMultiplier);
+        HRESULT Clip(
+            [in] IInkRectangle *Rectangle);
+        HRESULT RemoveRecognitionResult();
+    };
+
+    [
+        odl,
+        uuid(7E23A88F-C30E-420f-9BDB-28902543F0C1),
+        dual,
+        oleautomation
+    ]
+    interface IInkCustomStrokes : IDispatch {
+        [propget]               HRESULT Count(
+            [out, retval] long *Count);
+        [propget]               HRESULT _NewEnum(
+            [out, retval] IUnknown **_NewEnum);
+        HRESULT Item(
+            [in] VARIANT Identifier,
+            [out, retval] IInkStrokes **Strokes);
+        HRESULT Add(
+            [in] BSTR Name,
+            [in] IInkStrokes *Strokes);
+        HRESULT Remove(
+            [in] VARIANT Identifier);
+        HRESULT Clear();
+    };
+
+    interface IInkRecognitionAlternate;
+    interface IInkRecognitionAlternates;
+
+    [
+        odl,
+        uuid(3BC129A8-86CD-45ad-BDE8-E0D32D61C16D),
+        dual,
+        oleautomation
+    ]
+    interface IInkRecognitionResult : IDispatch {
+        [propget]               HRESULT TopString(
+            [out, retval] BSTR *TopString);
+        [propget]               HRESULT TopAlternate(
+            [out, retval] IInkRecognitionAlternate **TopAlternate);
+        [propget]               HRESULT TopConfidence(
+            [out, retval] InkRecognitionConfidence *TopConfidence);
+        [propget]               HRESULT Strokes(
+            [out, retval] IInkStrokes **Strokes);
+        HRESULT AlternatesFromSelection(
+            [in] long selectionStart,
+            [in] long selectionLength,
+            [in] long maximumAlternates,
+            [out, retval] IInkRecognitionAlternates **AlternatesFromSelection);
+        HRESULT ModifyTopAlternate(
+            [in] IInkRecognitionAlternate *Alternate);
+        HRESULT SetResultOnStrokes();
+    };
+
+    [
+        odl,
+        uuid(B7E660AD-77E4-429b-ADDA-873780D1FC4A),
+        dual,
+        oleautomation
+    ]
+    interface IInkRecognitionAlternate : IDispatch {
+        [propget]               HRESULT String(
+            [out, retval] BSTR *RecoString);
+        [propget]               HRESULT Confidence(
+            [out, retval] InkRecognitionConfidence *Confidence);
+        [propget]               HRESULT Baseline(
+            [out, retval] VARIANT *Baseline);
+        [propget]               HRESULT Midline(
+            [out, retval] VARIANT *Midline);
+        [propget]               HRESULT Ascender(
+            [out, retval] VARIANT *Ascender);
+        [propget]               HRESULT Descender(
+            [out, retval] VARIANT *Descender);
+        [propget]               HRESULT LineNumber(
+            [out, retval] long *LineNumber);
+        [propget]               HRESULT Strokes(
+            [out, retval] IInkStrokes **Strokes);
+        [propget]               HRESULT LineAlternates(
+            [out, retval] IInkRecognitionAlternates **LineAlternates);
+        [propget]               HRESULT ConfidenceAlternates(
+            [out, retval] IInkRecognitionAlternates **ConfidenceAlternates);
+        HRESULT GetStrokesFromStrokeRanges(
+            [in] IInkStrokes *Stroke,
+            [out, retval] IInkStrokes **GetStrokesFromTextRange);
+        HRESULT GetStrokesFromTextRange(
+            [in, out] long *selectionStart,
+            [in, out] long *selectionLength,
+            [out, retval] IInkStrokes **GetStrokesFromTextRange);
+        HRESULT GetTextRangeFromStrokes(
+            [in] IInkStrokes *Strokes,
+            [in, out] long *selectionStart,
+            [in, out] long *selectionLength);
+        HRESULT AlternatesWithConstantPropertyValues(
+            [in] BSTR PropertyType,
+            [out, retval] IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);
+        HRESULT GetPropertyValue(
+            [in] BSTR PropertyType,
+            [out, retval] VARIANT *PropertyValue);
+    };
+
+    [
+        odl,
+        uuid(286A167F-9F19-4c61-9D53-4F07BE622B84),
+        dual,
+        oleautomation
+    ]
+    interface IInkRecognitionAlternates : IDispatch {
+    [propget]                   HRESULT Count(
+        [out, retval] long *Count);
+    [propget, restricted]       HRESULT _NewEnum(
+        [out, retval] IUnknown **_NewEnum);
+    [propget]                   HRESULT Strokes(
+        [out, retval] IInkStrokes **Strokes);
+    HRESULT Item(
+        [in] long Index,
+        [out, retval] IInkRecognitionAlternate **InkRecoAlternate);
+    };
+
+    [
+        odl,
+        uuid(9D398FA0-C4E2-4fcd-9973-975CAAF47EA6),
+        dual,
+        oleautomation
+    ]
+    interface IInkDisp : IDispatch {
+        [propget]               HRESULT Strokes(
+            [out, retval] IInkStrokes **Strokes);
+        [propget]               HRESULT ExtendedProperties(
+            [out, retval] IInkExtendedProperties **Properties);
+        [propget]               HRESULT Dirty(
+            [out, retval] VARIANT_BOOL *Dirty);
+        [propput]               HRESULT Dirty(
+            [in] VARIANT_BOOL Dirty);
+        [propget]               HRESULT CustomStrokes(
+            [out, retval] IInkCustomStrokes **CustomStrokes);
+        HRESULT GetBoundingBox(
+            [in] InkBoundingBoxMode BoundingBoxMode,
+            [out] IInkRectangle **Rectangle);
+        HRESULT DeleteStrokes(
+            [in, unique] IInkStrokes *Strokes);
+        HRESULT DeleteStroke(
+            [in] IInkStrokeDisp *Stroke);
+        HRESULT ExtractStrokes(
+            [in] IInkStrokes *Strokes,
+            [in] InkExtractFlags ExtractFlags,
+            [out, retval] IInkDisp **ExtractedInk);
+        HRESULT ExtractWithRectangle(
+            [in] IInkRectangle *Rectangle,
+            [in] InkExtractFlags ExtractFlags,
+            [out, retval] IInkDisp **ExtractedInk);
+        HRESULT Clip(
+            [in] IInkRectangle *Rectangle);
+        HRESULT Clone(
+            [out, retval] IInkDisp **NewInk);
+        HRESULT HitTestCircle(
+            [in] long X,
+            [in] long Y,
+            [in] float radius,
+            [out, retval] IInkStrokes **Strokes);
+        HRESULT HitTestWithRectangle(
+            [in] IInkRectangle *SelectionRectangle,
+            [in] float IntersectPercent,
+            [out, retval] IInkStrokes **Strokes);
+        HRESULT HitTestWithLasso(
+            [in] VARIANT Points,
+            [in] float IntersectPercent,
+            [in, out, unique] VARIANT *LassoPoints,
+            [out, retval] IInkStrokes **Strokes);
+        HRESULT NearestPoint(
+            [in] long X,
+            [in] long Y,
+            [in, out] float *PointOnStroke,
+            [in, out] float *DistanceFromPacket,
+            [out, retval] IInkStrokeDisp **Stroke);
+        HRESULT CreateStrokes(
+            [in] VARIANT StrokeIds,
+            [out, retval] IInkStrokes **Strokes);
+        HRESULT AddStrokesAtRectangle(
+            [in] IInkStrokes *SourceStrokes,
+            [in] IInkRectangle *TargetRectangle);
+        HRESULT Save(
+            [in] InkPersistenceFormat PersistenceFormat,
+            [in] InkPersistenceCompressionMode CompressionMode,
+            [out, retval] VARIANT *Data);
+        HRESULT Load(
+            [in] VARIANT Data);
+        HRESULT CreateStroke(
+            [in] VARIANT PacketData,
+            [in] VARIANT PacketDescription,
+            [out, retval] IInkStrokeDisp **Stroke);
+        HRESULT ClipboardCopyWithRectangle(
+            [in] IInkRectangle *Rectangle,
+            [in] InkClipboardFormats ClipboardFormats,
+            [in] InkClipboardModes ClipboardModes,
+            [out, retval] IDataObject **DataObject);
+        HRESULT ClipboardCopy(
+            [in] IInkStrokes *strokes,
+            [in] InkClipboardFormats ClipboardFormats,
+            [in] InkClipboardModes ClipboardModes,
+            [out, retval] IDataObject **DataObject);
+        HRESULT CanPaste(
+            [in] IDataObject *DataObject,
+            [out, retval] VARIANT_BOOL *CanPaste);
+        HRESULT ClipboardPaste(
+            [in] long x,
+            [in] long y,
+            [in, unique] IDataObject *DataObject,
+            [out, retval] IInkStrokes **Strokes);
+    };
+
+    [
+        odl,
+        uuid(E6257A9C-B511-4F4C-A8B0-A7DBC9506B83),
+        dual,
+        oleautomation
+    ]
+    interface IInkRenderer : IDispatch {
+        HRESULT GetViewTransform([in] IInkTransform* ViewTransform);
+        HRESULT SetViewTransform([in] IInkTransform* ViewTransform);
+        HRESULT GetObjectTransform([in] IInkTransform* ObjectTransform);
+        HRESULT SetObjectTransform([in] IInkTransform* ObjectTransform);
+        HRESULT Draw(
+            [in] long hDC,
+            [in] IInkStrokes* Strokes);
+        HRESULT DrawStroke(
+            [in] long hDC,
+            [in] IInkStrokeDisp* Stroke,
+            [in, optional, defaultvalue(0)]
+            IInkDrawingAttributes* DrawingAttributes);
+        HRESULT PixelToInkSpace(
+            [in] long hDC,
+            [in, out] long* x,
+            [in, out] long* y);
+        HRESULT InkSpaceToPixel(
+            [in] long hdcDisplay,
+            [in, out] long* x,
+            [in, out] long* y);
+        HRESULT PixelToInkSpaceFromPoints(
+            [in] long hDC,
+            [in, out] VARIANT* Points);
+        HRESULT InkSpaceToPixelFromPoints(
+            [in] long hDC,
+            [in, out] VARIANT* Points);
+        HRESULT Measure(
+            [in] IInkStrokes* Strokes,
+            [out, retval] IInkRectangle** Rectangle);
+        HRESULT MeasureStroke(
+            [in] IInkStrokeDisp* Stroke,
+            [in, optional, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes,
+            [out, retval] IInkRectangle** Rectangle);
+        HRESULT Move(
+            [in] single HorizontalComponent,
+            [in] single VerticalComponent);
+        HRESULT Rotate(
+            [in] single Degrees,
+            [in, optional, defaultvalue(0)] single x,
+            [in, optional, defaultvalue(0)] single y);
+        HRESULT ScaleTransform(
+            [in] single HorizontalMultiplier,
+            [in] single VerticalMultiplier,
+            [in, optional, defaultvalue(-1)] VARIANT_BOOL ApplyOnPenWidth);
+    };
+
+    typedef enum {
+        ICM_InkOnly,
+        ICM_GestureOnly,
+        ICM_InkAndGesture
+    } InkCollectionMode;
+
+    typedef enum {
+        IMP_Default,
+        IMP_Arrow,
+        IMP_Crosshair,
+        IMP_Ibeam,
+        IMP_SizeNESW,
+        IMP_SizeNS,
+        IMP_SizeNWSE,
+        IMP_SizeWE,
+        IMP_UpArrow,
+        IMP_Hourglass,
+        IMP_NoDrop,
+        IMP_ArrowHourglass,
+        IMP_ArrowQuestion,
+        IMP_SizeAll,
+        IMP_Hand,
+        IMP_Custom = 99
+    } InkMousePointer;
+
+    typedef enum {
+        THWC_Integrated = 1,
+        THWC_CursorMustTouch = 2,
+        THWC_HardProximity = 4,
+        THWC_CursorsHavePhysicalIds = 8
+    } TabletHardwareCapabilities;
+
+    [
+        odl,
+        uuid(2DE25EAA-6EF8-42D5-AEE9-185BC81B912D),
+        dual,
+        oleautomation
+    ]
+    interface IInkTablet : IDispatch {
+        [propget] HRESULT Name([out, retval] BSTR* Name);
+        [propget] HRESULT PlugAndPlayId([out, retval] BSTR* Id);
+        [propget] HRESULT MaximumInputRectangle([out, retval] IInkRectangle** Rectangle);
+        [propget] HRESULT HardwareCapabilities(
+            [out, retval] TabletHardwareCapabilities* Capabilities);
+        HRESULT IsPacketPropertySupported(
+            [in] BSTR packetPropertyName,
+            [out, retval] VARIANT_BOOL* Supported);
+        HRESULT GetPropertyMetrics(
+            [in] BSTR propertyName,
+            [out] long* Minimum,
+            [out] long* Maximum,
+            [out] TabletPropertyMetricUnit* Units,
+            [out] single* Resolution);
+    };
+
+    typedef enum {
+        ICBS_Unavailable,
+        ICBS_Up,
+        ICBS_Down
+    } InkCursorButtonState;
+
+    [
+        odl,
+        uuid(85EF9417-1D59-49B2-A13C-702C85430894),
+        dual,
+        oleautomation
+    ]
+    interface IInkCursorButton : IDispatch {
+        [propget] HRESULT Name([out, retval] BSTR* Name);
+        [propget] HRESULT Id([out, retval] BSTR* Id);
+        [propget] HRESULT State([out, retval] InkCursorButtonState* CurrentState);
+    };
+
+    [
+        odl,
+        uuid(3671CC40-B624-4671-9FA0-DB119D952D54),
+        dual,
+        oleautomation
+    ]
+    interface IInkCursorButtons : IDispatch {
+        [propget] HRESULT Count([out, retval] long* Count);
+        [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
+        HRESULT Item(
+            [in] VARIANT Identifier,
+            [out, retval] IInkCursorButton** Button);
+    };
+
+    [
+        odl,
+        uuid(AD30C630-40C5-4350-8405-9C71012FC558),
+        dual,
+        oleautomation
+    ]
+    interface IInkCursor : IDispatch {
+        [id(0x00000000), propget]    HRESULT Name([out, retval] BSTR* Name);
+        [id(0x00000001), propget]    HRESULT Id([out, retval] long* Id);
+        [id(0x00000004), propget]    HRESULT Inverted(
+            [out, retval] VARIANT_BOOL* Status);
+        [id(0x00000002), propget]    HRESULT DrawingAttributes(
+            [out, retval] IInkDrawingAttributes** Attributes);
+        [id(0x00000002), propputref] HRESULT DrawingAttributes(
+            [in] IInkDrawingAttributes* Attributes);
+        [id(0x00000005), propget]    HRESULT Tablet(
+            [out, retval] IInkTablet** Tablet);
+        [id(0x00000003), propget]    HRESULT Buttons(
+            [out, retval] IInkCursorButtons** Buttons);
+    };
+
+    [
+        odl,
+        uuid(A248C1AC-C698-4E06-9E5C-D57F77C7E647),
+        dual,
+        oleautomation
+    ]
+    interface IInkCursors : IDispatch {
+        [propget] HRESULT Count([out, retval] long* Count);
+        [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
+        HRESULT Item(
+            [in] long Index,
+            [out, retval] IInkCursor** Cursor);
+    };
+
+    typedef enum {
+        IAG_AllGestures = 0,
+        IAG_NoGesture = 61440,
+        IAG_Scratchout = 61441,
+        IAG_Triangle = 61442,
+        IAG_Square = 61443,
+        IAG_Star = 61444,
+        IAG_Check = 61445,
+        IAG_Curlicue = 61456,
+        IAG_DoubleCurlicue = 61457,
+        IAG_Circle = 61472,
+        IAG_DoubleCircle = 61473,
+        IAG_SemiCircleLeft = 61480,
+        IAG_SemiCircleRight = 61481,
+        IAG_ChevronUp = 61488,
+        IAG_ChevronDown = 61489,
+        IAG_ChevronLeft = 61490,
+        IAG_ChevronRight = 61491,
+        IAG_ArrowUp = 61496,
+        IAG_ArrowDown = 61497,
+        IAG_ArrowLeft = 61498,
+        IAG_ArrowRight = 61499,
+        IAG_Up = 61528,
+        IAG_Down = 61529,
+        IAG_Left = 61530,
+        IAG_Right = 61531,
+        IAG_UpDown = 61536,
+        IAG_DownUp = 61537,
+        IAG_LeftRight = 61538,
+        IAG_RightLeft = 61539,
+        IAG_UpLeftLong = 61540,
+        IAG_UpRightLong = 61541,
+        IAG_DownLeftLong = 61542,
+        IAG_DownRightLong = 61543,
+        IAG_UpLeft = 61544,
+        IAG_UpRight = 61545,
+        IAG_DownLeft = 61546,
+        IAG_DownRight = 61547,
+        IAG_LeftUp = 61548,
+        IAG_LeftDown = 61549,
+        IAG_RightUp = 61550,
+        IAG_RightDown = 61551,
+        IAG_Exclamation = 61604,
+        IAG_Tap = 61680,
+        IAG_DoubleTap = 61681
+    } InkApplicationGesture;
+
+    typedef enum {
+        ICEI_DefaultEvents = -1,
+        ICEI_CursorDown = 0,
+        ICEI_Stroke,
+        ICEI_NewPackets,
+        ICEI_NewInAirPackets,
+        ICEI_CursorButtonDown,
+        ICEI_CursorButtonUp,
+        ICEI_CursorInRange,
+        ICEI_CursorOutOfRange,
+        ICEI_SystemGesture,
+        ICEI_TabletAdded,
+        ICEI_TabletRemoved,
+        ICEI_MouseDown,
+        ICEI_MouseMove,
+        ICEI_MouseUp,
+        ICEI_MouseWheel,
+        ICEI_DblClick,
+        ICEI_AllEvents
+    } InkCollectorEventInterest;
+
+    [
+        odl,
+        uuid(F0F060B5-8B1F-4A7C-89EC-880692588A4F),
+        dual,
+        oleautomation
+    ]
+    interface IInkCollector : IDispatch {
+        [id(0x00000002), propget]    HRESULT hWnd(
+            [out, retval] long* CurrentWindow);
+        [id(0x00000002), propput]    HRESULT hWnd([in] long CurrentWindow);
+        [id(0x00000001), propget]    HRESULT Enabled(
+            [out, retval] VARIANT_BOOL* Collecting);
+        [id(0x00000001), propput]    HRESULT Enabled(
+            [in] VARIANT_BOOL Collecting);
+        [id(0x00000005), propget]    HRESULT DefaultDrawingAttributes(
+            [out, retval] IInkDrawingAttributes** CurrentAttributes);
+        [id(0x00000005), propputref] HRESULT DefaultDrawingAttributes(
+            [in] IInkDrawingAttributes* CurrentAttributes);
+        [id(0x00000006), propget]    HRESULT Renderer(
+            [out, retval] IInkRenderer** CurrentInkRenderer);
+        [id(0x00000006), propputref] HRESULT Renderer(
+            [in] IInkRenderer* CurrentInkRenderer);
+        [id(0x00000007), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);
+        [id(0x00000007), propputref] HRESULT Ink([in] IInkDisp* Ink);
+        [id(0x00000008), propget]    HRESULT AutoRedraw(
+            [out, retval] VARIANT_BOOL* AutoRedraw);
+        [id(0x00000008), propput]    HRESULT AutoRedraw(
+            [in] VARIANT_BOOL AutoRedraw);
+        [id(0x00000009), propget]    HRESULT CollectingInk(
+            [out, retval] VARIANT_BOOL* Collecting);
+        [id(0x0000001c), propget]    HRESULT CollectionMode(
+            [out, retval] InkCollectionMode* Mode);
+        [id(0x0000001c), propput]    HRESULT CollectionMode(
+            [in] InkCollectionMode Mode);
+        [id(0x0000001f), propget]    HRESULT DynamicRendering(
+            [out, retval] VARIANT_BOOL* Enabled);
+        [id(0x0000001f), propput]    HRESULT DynamicRendering(
+            [in] VARIANT_BOOL Enabled);
+        [id(0x00000020), propget]    HRESULT DesiredPacketDescription(
+            [out, retval] VARIANT* PacketGuids);
+        [id(0x00000020), propput]    HRESULT DesiredPacketDescription(
+            [in] VARIANT PacketGuids);
+        [id(0x00000023), propget]    HRESULT MouseIcon(
+            [out, retval] IPictureDisp** MouseIcon);
+        [id(0x00000023), propput]    HRESULT MouseIcon(
+            [in] IPictureDisp* MouseIcon);
+        [id(0x00000023), propputref] HRESULT MouseIcon(
+            [in] IPictureDisp* MouseIcon);
+        [id(0x00000024), propget]    HRESULT MousePointer(
+            [out, retval] InkMousePointer* MousePointer);
+        [id(0x00000024), propput]    HRESULT MousePointer(
+            [in] InkMousePointer MousePointer);
+        [id(0x00000014), propget]    HRESULT Cursors(
+            [out, retval] IInkCursors** Cursors);
+        [id(0x00000015), propget]    HRESULT MarginX(
+            [out, retval] long* MarginX);
+        [id(0x00000015), propput]    HRESULT MarginX([in] long MarginX);
+        [id(0x00000016), propget]    HRESULT MarginY(
+            [out, retval] long* MarginY);
+        [id(0x00000016), propput]    HRESULT MarginY([in] long MarginY);
+        [id(0x00000019), propget]    HRESULT Tablet(
+            [out, retval] IInkTablet** SingleTablet);
+        [id(0x00000026), propget]    HRESULT SupportHighContrastInk(
+            [out, retval] VARIANT_BOOL* Support);
+        [id(0x00000026), propput]    HRESULT SupportHighContrastInk(
+            [in] VARIANT_BOOL Support);
+        [id(0x0000001d)]             HRESULT SetGestureStatus(
+            [in] InkApplicationGesture Gesture,
+            [in] VARIANT_BOOL Listen);
+        [id(0x0000001e)]             HRESULT GetGestureStatus(
+            [in] InkApplicationGesture Gesture,
+            [out, retval] VARIANT_BOOL* Listening);
+        [id(0x00000018)]             HRESULT GetWindowInputRectangle(
+            [in, out] IInkRectangle** WindowInputRectangle);
+        [id(0x00000017)]             HRESULT SetWindowInputRectangle(
+            [in] IInkRectangle* WindowInputRectangle);
+        [id(0x0000001a)]             HRESULT SetAllTabletsMode(
+            [in, optional, defaultvalue(-1)] VARIANT_BOOL UseMouseForInput);
+        [id(0x0000001b)]             HRESULT SetSingleTabletIntegratedMode(
+            [in] IInkTablet* Tablet);
+        [id(0x0000000b)]             HRESULT GetEventInterest(
+            [in] InkCollectorEventInterest EventId,
+            [out, retval] VARIANT_BOOL* Listen);
+        [id(0x0000000a)]             HRESULT SetEventInterest(
+            [in] InkCollectorEventInterest EventId,
+            [in] VARIANT_BOOL Listen);
+    };
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h
new file mode 100644
index 0000000..537e07a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2002,2003 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSIQUERY_H
+#define __WINE_MSIQUERY_H
+
+#include <msi.h>
+
+typedef enum tagMSICONDITION
+{
+    MSICONDITION_FALSE = 0,
+    MSICONDITION_TRUE  = 1,
+    MSICONDITION_NONE  = 2,
+    MSICONDITION_ERROR = 3,
+} MSICONDITION;
+
+#define MSI_NULL_INTEGER 0x80000000
+
+typedef enum tagMSICOLINFO
+{
+    MSICOLINFO_NAMES = 0,
+    MSICOLINFO_TYPES = 1
+} MSICOLINFO;
+
+typedef enum tagMSICOSTTREE
+{
+    MSICOSTTREE_SELFONLY = 0,
+    MSICOSTTREE_CHILDREN = 1,
+    MSICOSTTREE_PARENTS  = 2,
+    MSICOSTTREE_PRODUCT  = 3,
+} MSICOSTTREE;
+
+typedef enum tagMSIMODIFY
+{
+    MSIMODIFY_SEEK = -1,
+    MSIMODIFY_REFRESH = 0,
+    MSIMODIFY_INSERT = 1,
+    MSIMODIFY_UPDATE = 2,
+    MSIMODIFY_ASSIGN = 3,
+    MSIMODIFY_REPLACE = 4,
+    MSIMODIFY_MERGE = 5,
+    MSIMODIFY_DELETE = 6,
+    MSIMODIFY_INSERT_TEMPORARY = 7,
+    MSIMODIFY_VALIDATE = 8,
+    MSIMODIFY_VALIDATE_NEW = 9,
+    MSIMODIFY_VALIDATE_FIELD = 10,
+    MSIMODIFY_VALIDATE_DELETE = 11
+} MSIMODIFY;
+
+#ifndef WINE_NO_UNICODE_MACROS
+#define MSIDBOPEN_READONLY (LPCTSTR)0
+#define MSIDBOPEN_TRANSACT (LPCTSTR)1
+#define MSIDBOPEN_DIRECT   (LPCTSTR)2
+#define MSIDBOPEN_CREATE   (LPCTSTR)3
+#define MSIDBOPEN_CREATEDIRECT (LPCTSTR)4
+#else
+#define MSIDBOPEN_READONLY (LPCWSTR)0
+#define MSIDBOPEN_TRANSACT (LPCWSTR)1
+#define MSIDBOPEN_DIRECT   (LPCWSTR)2
+#define MSIDBOPEN_CREATE   (LPCWSTR)3
+#define MSIDBOPEN_CREATEDIRECT (LPCWSTR)4
+#endif
+
+#define MSIDBOPEN_PATCHFILE 32 / sizeof(*MSIDBOPEN_READONLY)
+
+typedef enum tagMSIRUNMODE
+{
+    MSIRUNMODE_ADMIN = 0,
+    MSIRUNMODE_ADVERTISE = 1,
+    MSIRUNMODE_MAINTENANCE = 2,
+    MSIRUNMODE_ROLLBACKENABLED = 3,
+    MSIRUNMODE_LOGENABLED = 4,
+    MSIRUNMODE_OPERATIONS = 5,
+    MSIRUNMODE_REBOOTATEND = 6,
+    MSIRUNMODE_REBOOTNOW = 7,
+    MSIRUNMODE_CABINET = 8,
+    MSIRUNMODE_SOURCESHORTNAMES = 9,
+    MSIRUNMODE_TARGETSHORTNAMES = 10,
+    MSIRUNMODE_RESERVED11 = 11,
+    MSIRUNMODE_WINDOWS9X = 12,
+    MSIRUNMODE_ZAWENABLED = 13,
+    MSIRUNMODE_RESERVED14 = 14,
+    MSIRUNMODE_RESERVED15 = 15,
+    MSIRUNMODE_SCHEDULED = 16,
+    MSIRUNMODE_ROLLBACK = 17,
+    MSIRUNMODE_COMMIT = 18
+} MSIRUNMODE;
+
+typedef enum tagMSIDBERROR
+{
+    MSIDBERROR_INVALIDARG = -3,
+    MSIDBERROR_MOREDATA = -2,
+    MSIDBERROR_FUNCTIONERROR = -1,
+    MSIDBERROR_NOERROR = 0,
+    MSIDBERROR_DUPLICATEKEY = 1,
+    MSIDBERROR_REQUIRED = 2,
+    MSIDBERROR_BADLINK = 3,
+    MSIDBERROR_OVERFLOW = 4,
+    MSIDBERROR_UNDERFLOW = 5,
+    MSIDBERROR_NOTINSET = 6,
+    MSIDBERROR_BADVERSION = 7,
+    MSIDBERROR_BADCASE = 8,
+    MSIDBERROR_BADGUID = 9,
+    MSIDBERROR_BADWILDCARD = 10,
+    MSIDBERROR_BADIDENTIFIER = 11,
+    MSIDBERROR_BADLANGUAGE = 12,
+    MSIDBERROR_BADFILENAME = 13,
+    MSIDBERROR_BADPATH = 14,
+    MSIDBERROR_BADCONDITION = 15,
+    MSIDBERROR_BADFORMATTED = 16,
+    MSIDBERROR_BADTEMPLATE = 17,
+    MSIDBERROR_BADDEFAULTDIR = 18,
+    MSIDBERROR_BADREGPATH = 19,
+    MSIDBERROR_BADCUSTOMSOURCE = 20,
+    MSIDBERROR_BADPROPERTY = 21,
+    MSIDBERROR_MISSINGDATA = 22,
+    MSIDBERROR_BADCATEGORY = 23,
+    MSIDBERROR_BADKEYTABLE = 24,
+    MSIDBERROR_BADMAXMINVALUES = 25,
+    MSIDBERROR_BADCABINET = 26,
+    MSIDBERROR_BADSHORTCUT= 27,
+    MSIDBERROR_STRINGOVERFLOW = 28,
+    MSIDBERROR_BADLOCALIZEATTRIB = 29
+} MSIDBERROR; 
+
+typedef enum tagMSIDBSTATE
+{
+    MSIDBSTATE_ERROR = -1,
+    MSIDBSTATE_READ = 0,
+    MSIDBSTATE_WRITE = 1
+} MSIDBSTATE;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* view manipulation */
+UINT WINAPI MsiViewFetch(MSIHANDLE,MSIHANDLE*);
+UINT WINAPI MsiViewExecute(MSIHANDLE,MSIHANDLE);
+UINT WINAPI MsiViewClose(MSIHANDLE);
+UINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE,LPCSTR,MSIHANDLE*);
+UINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE,LPCWSTR,MSIHANDLE*);
+#define     MsiDatabaseOpenView WINELIB_NAME_AW(MsiDatabaseOpenView)
+MSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE,LPSTR,LPDWORD);
+MSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE,LPWSTR,LPDWORD);
+#define     MsiViewGetError WINELIB_NAME_AW(MsiViewGetError)
+
+MSIDBSTATE WINAPI MsiGetDatabaseState(MSIHANDLE);
+
+/* record manipulation */
+MSIHANDLE WINAPI MsiCreateRecord(UINT);
+UINT WINAPI MsiRecordClearData(MSIHANDLE);
+UINT WINAPI MsiRecordSetInteger(MSIHANDLE,UINT,int);
+UINT WINAPI MsiRecordSetStringA(MSIHANDLE,UINT,LPCSTR);
+UINT WINAPI MsiRecordSetStringW(MSIHANDLE,UINT,LPCWSTR);
+#define     MsiRecordSetString WINELIB_NAME_AW(MsiRecordSetString)
+UINT WINAPI MsiRecordGetStringA(MSIHANDLE,UINT,LPSTR,LPDWORD);
+UINT WINAPI MsiRecordGetStringW(MSIHANDLE,UINT,LPWSTR,LPDWORD);
+#define     MsiRecordGetString WINELIB_NAME_AW(MsiRecordGetString)
+UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE);
+int WINAPI MsiRecordGetInteger(MSIHANDLE,UINT);
+UINT WINAPI MsiRecordDataSize(MSIHANDLE,UINT);
+BOOL WINAPI MsiRecordIsNull(MSIHANDLE,UINT);
+UINT WINAPI MsiFormatRecordA(MSIHANDLE,MSIHANDLE,LPSTR,LPDWORD);
+UINT WINAPI MsiFormatRecordW(MSIHANDLE,MSIHANDLE,LPWSTR,LPDWORD);
+#define     MsiFormatRecord WINELIB_NAME_AW(MsiFormatRecord)
+UINT WINAPI MsiRecordSetStreamA(MSIHANDLE,UINT,LPCSTR);
+UINT WINAPI MsiRecordSetStreamW(MSIHANDLE,UINT,LPCWSTR);
+#define     MsiRecordSetStream WINELIB_NAME_AW(MsiRecordSetStream)
+UINT WINAPI MsiRecordReadStream(MSIHANDLE,UINT,char*,LPDWORD);
+
+UINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE,LPCSTR,MSIHANDLE*);
+UINT WINAPI MsiDatabaseGetPrimaryKeysW(MSIHANDLE,LPCWSTR,MSIHANDLE*);
+#define     MsiDatabaseGetPrimaryKeys WINELIB_NAME_AW(MsiDatabaseGetPrimaryKeys)
+
+/* installing */
+UINT WINAPI MsiDoActionA(MSIHANDLE,LPCSTR );
+UINT WINAPI MsiDoActionW(MSIHANDLE,LPCWSTR );
+#define     MsiDoAction WINELIB_NAME_AW(MsiDoAction)
+
+/* database transforms */
+UINT WINAPI MsiDatabaseApplyTransformA(MSIHANDLE,LPCSTR,int);
+UINT WINAPI MsiDatabaseApplyTransformW(MSIHANDLE,LPCWSTR,int);
+#define     MsiDatabaseApplyTransform WINELIB_NAME_AW(MsiDatabaseApplyTransform)
+UINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE,MSIHANDLE,LPCSTR,int,int);
+UINT WINAPI MsiDatabaseGenerateTransformW(MSIHANDLE,MSIHANDLE,LPCWSTR,int,int);
+#define     MsiDatabaseGenerateTransform WINELIB_NAME_AW(MsiDatabaseGenerateTransform)
+
+UINT WINAPI MsiDatabaseCommit(MSIHANDLE);
+
+/* install state */
+UINT WINAPI MsiGetFeatureStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*);
+UINT WINAPI MsiGetFeatureStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*);
+#define     MsiGetFeatureState WINELIB_NAME_AW(MsiGetFeatureState)
+UINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE,LPCSTR,LPDWORD);
+UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE,LPCWSTR,LPDWORD);
+#define     MsiGetFeatureValidStates WINELIB_NAME_AW(MsiGetFeatureValidStates)
+UINT WINAPI MsiSetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE);
+UINT WINAPI MsiSetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE);
+#define     MsiSetComponentState WINELIB_NAME_AW(MsiSetComponentState)
+UINT WINAPI MsiGetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*);
+UINT WINAPI MsiGetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*);
+#define     MsiGetComponentState WINELIB_NAME_AW(MsiGetComponentState)
+
+MSICONDITION WINAPI MsiEvaluateConditionA(MSIHANDLE,LPCSTR);
+MSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE,LPCWSTR);
+#define     MsiEvaluateCondition WINELIB_NAME_AW(MsiEvaluateCondition)
+
+/* property functions */
+UINT WINAPI MsiGetPropertyA(MSIHANDLE, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetPropertyW(MSIHANDLE, LPCWSTR, LPWSTR, LPDWORD);
+#define     MsiGetProperty WINELIB_NAME_AW(MsiGetProperty)
+
+UINT WINAPI MsiSetPropertyA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiSetPropertyW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define     MsiSetProperty WINELIB_NAME_AW(MsiSetProperty)
+
+UINT WINAPI MsiGetTargetPathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
+UINT WINAPI MsiGetTargetPathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define     MsiGetTargetPath WINELIB_NAME_AW(MsiGetTargetPath)
+
+UINT WINAPI MsiSetTargetPathA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiSetTargetPathW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define     MsiSetTargetPath WINELIB_NAME_AW(MsiSetTargetPath)
+
+UINT WINAPI MsiGetSourcePathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
+UINT WINAPI MsiGetSourcePathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define     MsiGetSourcePath WINELIB_NAME_AW(MsiGetSourcePath)
+
+MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE);
+
+UINT WINAPI MsiViewGetColumnInfo(MSIHANDLE, MSICOLINFO, MSIHANDLE*);
+INT WINAPI MsiProcessMessage(MSIHANDLE, INSTALLMESSAGE, MSIHANDLE);
+
+UINT WINAPI MsiSetFeatureAttributesA(MSIHANDLE, LPCSTR, DWORD);
+UINT WINAPI MsiSetFeatureAttributesW(MSIHANDLE, LPCWSTR, DWORD);
+#define     MsiSetFeatureAttributes WINELIB_NAME_AW(MsiSetFeatureAttributes)
+
+UINT WINAPI MsiSetFeatureStateA(MSIHANDLE, LPCSTR, INSTALLSTATE);
+UINT WINAPI MsiSetFeatureStateW(MSIHANDLE, LPCWSTR, INSTALLSTATE);
+#define     MsiSetFeatureState WINELIB_NAME_AW(MsiSetFeatureState)
+
+UINT WINAPI MsiPreviewDialogA(MSIHANDLE, LPCSTR);
+UINT WINAPI MsiPreviewDialogW(MSIHANDLE, LPCWSTR);
+#define     MsiPreviewDialog WINELIB_NAME_AW(MsiPreviewDialog)
+
+UINT WINAPI MsiPreviewBillboardA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiPreviewBillboardW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define     MsiPreviewBillboard WINELIB_NAME_AW(MsiPreviewBillboard)
+
+UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE, MSIHANDLE, LPCSTR, int, int);
+UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE, MSIHANDLE, LPCWSTR, int, int);
+#define     MsiCreateTransformSummaryInfo WINELIB_NAME_AW(MsiCreateTransformSummaryInfo)
+
+UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE, LPCSTR, UINT, MSIHANDLE *);
+UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE, LPCWSTR, UINT, MSIHANDLE *);
+#define     MsiGetSummaryInformation WINELIB_NAME_AW(MsiGetSummaryInformation)
+
+UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPSTR,LPDWORD);
+UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPWSTR,LPDWORD);
+#define     MsiSummaryInfoGetProperty WINELIB_NAME_AW(MsiSummaryInfoGetProperty)
+
+UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCSTR);
+UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCWSTR);
+#define     MsiSummaryInfoSetProperty WINELIB_NAME_AW(MsiSummaryInfoSetProperty)
+
+UINT WINAPI MsiDatabaseExportA(MSIHANDLE, LPCSTR, LPCSTR, LPCSTR);
+UINT WINAPI MsiDatabaseExportW(MSIHANDLE, LPCWSTR, LPCWSTR, LPCWSTR);
+#define     MsiDatabaseExport WINELIB_NAME_AW(MsiDatabaseExport)
+
+UINT WINAPI MsiDatabaseImportA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiDatabaseImportW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define     MsiDatabaseImport WINELIB_NAME_AW(MsiDatabaseImport)
+
+UINT WINAPI MsiOpenDatabaseW(LPCWSTR, LPCWSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenDatabaseA(LPCSTR, LPCSTR, MSIHANDLE*);
+#define     MsiOpenDatabase WINELIB_NAME_AW(MsiOpenDatabase)
+
+MSICONDITION WINAPI MsiDatabaseIsTablePersistentA(MSIHANDLE, LPCSTR);
+MSICONDITION WINAPI MsiDatabaseIsTablePersistentW(MSIHANDLE, LPCWSTR);
+#define     MsiDatabaseIsTablePersistent WINELIB_NAME_AW(MsiDatabaseIsTablePersistent)
+
+UINT WINAPI MsiSequenceA(MSIHANDLE, LPCSTR, INT);
+UINT WINAPI MsiSequenceW(MSIHANDLE, LPCWSTR, INT);
+#define     MsiSequence WINELIB_NAME_AW(MsiSequence)
+
+UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE);
+UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE,PUINT);
+
+UINT WINAPI MsiEnableUIPreview(MSIHANDLE, MSIHANDLE*);
+BOOL WINAPI MsiGetMode(MSIHANDLE, MSIRUNMODE);
+UINT WINAPI MsiSetMode(MSIHANDLE, MSIRUNMODE, BOOL);
+
+UINT WINAPI MsiViewModify(MSIHANDLE, MSIMODIFY, MSIHANDLE);
+
+UINT WINAPI MsiGetFeatureCostA(MSIHANDLE, LPCSTR, MSICOSTTREE, INSTALLSTATE, LPINT);
+UINT WINAPI MsiGetFeatureCostW(MSIHANDLE, LPCWSTR, MSICOSTTREE, INSTALLSTATE, LPINT);
+#define     MsiGetFeatureCost WINELIB_NAME_AW(MsiGetFeatureCost)
+
+LANGID WINAPI MsiGetLanguage(MSIHANDLE);
+
+UINT WINAPI MsiSetInstallLevel(MSIHANDLE, int);
+
+MSIHANDLE WINAPI MsiGetLastErrorRecord(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MSIQUERY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h
new file mode 100644
index 0000000..0621f2a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSSIP_H
+#define __WINE_MSSIP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/**********************************************************************/
+
+typedef CRYPT_HASH_BLOB CRYPT_DIGEST_DATA;
+
+/**********************************************************************/
+
+#define MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE 0x00010000
+#define MSSIP_FLAGS_USE_CATALOG               0x00020000
+
+#define SPC_INC_PE_RESOURCES_FLAG         0x80
+#define SPC_INC_PE_DEBUG_INFO_FLAG        0x40
+#define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20
+
+#define MSSIP_ADDINFO_NONE      0
+#define MSSIP_ADDINFO_FLAT      1
+#define MSSIP_ADDINFO_CATMEMBER 2
+#define MSSIP_ADDINFO_BLOB      3
+#define MSSIP_ADDINFO_NONMSSIP  500
+
+#define SIP_MAX_MAGIC_NUMBER 4
+
+/**********************************************************************/
+
+#include <pshpack8.h>
+typedef struct SIP_SUBJECTINFO_ {
+    DWORD cbSize;
+    GUID *pgSubjectType;
+    HANDLE hFile;
+    LPCWSTR pwsFileName;
+    LPCWSTR pwsDisplayName;
+
+    DWORD dwReserved1;
+    DWORD dwIntVersion;
+
+    HCRYPTPROV hProv;
+    CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
+    DWORD dwFlags;
+    DWORD dwEncodingType;
+    DWORD dwReserved2;
+    DWORD fdwCAPISettings;
+    DWORD fdwSecuritySettings;
+    DWORD dwIndex;
+
+    DWORD dwUnionChoice;
+    union {
+      struct MS_ADDINFO_FLAT_          *psFlat;
+      struct MS_ADDINFO_CATALOGMEMBER_ *psCatMember;
+      struct MS_ADDINFO_BLOB_          *psBlob;
+    } DUMMYUNIONNAME;
+
+    LPVOID pClientData;
+} SIP_SUBJECTINFO, *LPSIP_SUBJECTINFO;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct MS_ADDINFO_FLAT_ {
+  DWORD cbStruct;
+
+  struct SIP_INDIRECT_DATA_ *pIndirectData;
+} MS_ADDINFO_FLAT, *PMS_ADDINFO_FLAT;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct MS_ADDINFO_CATALOGMEMBER_ {
+  DWORD cbStruct;
+
+  struct CRYPTCATSTORE_  *pStore;
+  struct CRYPTCATMEMBER_ *pMember;
+} MS_ADDINFO_CATALOGMEMBER, *PMS_ADDINFO_CATALOGMEMBER;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct MS_ADDINFO_BLOB_ {
+  DWORD cbStruct;
+
+  DWORD cbMemObject;
+  BYTE *pbMemObject;
+
+  DWORD cbMemSignedMsg;
+  BYTE *pbMemSignedMsg;
+} MS_ADDINFO_BLOB, *PMS_ADDINFO_BLOB;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct SIP_INDIRECT_DATA_ {
+  CRYPT_ATTRIBUTE_TYPE_VALUE Data;
+  CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
+  CRYPT_HASH_BLOB            Digest;
+} SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA;
+#include <poppack.h>
+
+typedef BOOL (WINAPI * pCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *);
+typedef BOOL (WINAPI * pCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *);
+typedef BOOL (WINAPI * pCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *);
+typedef BOOL (WINAPI * pCryptSIPVerifyIndirectData)(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *);
+typedef BOOL (WINAPI * pCryptSIPRemoveSignedDataMsg)(SIP_SUBJECTINFO *,DWORD);
+
+#include <pshpack8.h>
+typedef struct SIP_DISPATCH_INFO_ {
+  DWORD cbSize;
+
+  HANDLE hSIP;
+
+  pCryptSIPGetSignedDataMsg    pfGet;
+  pCryptSIPPutSignedDataMsg    pfPut;
+  pCryptSIPCreateIndirectData  pfCreate;
+  pCryptSIPVerifyIndirectData  pfVerify;
+  pCryptSIPRemoveSignedDataMsg pfRemove;
+} SIP_DISPATCH_INFO, *LPSIP_DISPATCH_INFO;
+#include <poppack.h>
+
+typedef BOOL (WINAPI *pfnIsFileSupported)(HANDLE,GUID *);
+typedef BOOL (WINAPI *pfnIsFileSupportedName)(WCHAR *,GUID *);
+
+#include <pshpack8.h>
+typedef struct SIP_ADD_NEWPROVIDER_
+{
+  DWORD cbStruct;
+
+  GUID  *pgSubject;
+
+  WCHAR *pwszDLLFileName;
+  WCHAR *pwszMagicNumber;
+
+  WCHAR *pwszIsFunctionName;
+
+  WCHAR *pwszGetFuncName;
+  WCHAR *pwszPutFuncName;
+  WCHAR *pwszCreateFuncName;
+  WCHAR *pwszVerifyFuncName;
+  WCHAR *pwszRemoveFuncName;
+
+  WCHAR *pwszIsFunctionNameFmt2;
+} SIP_ADD_NEWPROVIDER, *PSIP_ADD_NEWPROVIDER;
+#include <poppack.h>
+
+/**********************************************************************/
+
+BOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *);
+BOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *);
+BOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *);
+BOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *);
+BOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *,DWORD);
+
+BOOL WINAPI CryptSIPLoad(const GUID *,DWORD,SIP_DISPATCH_INFO *);
+BOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR,HANDLE,GUID *);
+BOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR,HANDLE,GUID *);
+BOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *);
+BOOL WINAPI CryptSIPRemoveProvider(GUID *);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_MSSIP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl
new file mode 100644
index 0000000..ed37cac
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl
@@ -0,0 +1,402 @@
+/*
+ * Task Scheduler Service interface
+ *
+ * Copyright (C) 2008 Google (Roy Shea)
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "oleidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+cpp_quote("#define TASK_SUNDAY 0x1")
+cpp_quote("#define TASK_MONDAY 0x2")
+cpp_quote("#define TASK_TUESDAY 0x4")
+cpp_quote("#define TASK_WEDNESDAY 0x8")
+cpp_quote("#define TASK_THURSDAY 0x10")
+cpp_quote("#define TASK_FRIDAY 0x20")
+cpp_quote("#define TASK_SATURDAY 0x40")
+
+cpp_quote("#define TASK_FIRST_WEEK 1")
+cpp_quote("#define TASK_SECOND_WEEK 2")
+cpp_quote("#define TASK_THIRD_WEEK 3")
+cpp_quote("#define TASK_FOURTH_WEEK 4")
+cpp_quote("#define TASK_LAST_WEEK 5")
+
+cpp_quote("#define TASK_JANUARY 0x1")
+cpp_quote("#define TASK_FEBRUARY 0x2")
+cpp_quote("#define TASK_MARCH 0x4")
+cpp_quote("#define TASK_APRIL 0x8")
+cpp_quote("#define TASK_MAY 0x10")
+cpp_quote("#define TASK_JUNE 0x20")
+cpp_quote("#define TASK_JULY 0x40")
+cpp_quote("#define TASK_AUGUST 0x80")
+cpp_quote("#define TASK_SEPTEMBER 0x100")
+cpp_quote("#define TASK_OCTOBER 0x200")
+cpp_quote("#define TASK_NOVEMBER 0x400")
+cpp_quote("#define TASK_DECEMBER 0x800")
+
+cpp_quote("#define TASK_TRIGGER_FLAG_HAS_END_DATE 0x1")
+cpp_quote("#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END 0x2")
+cpp_quote("#define TASK_TRIGGER_FLAG_DISABLED 0x4")
+
+[
+    local,
+    object,
+    uuid(148BD528-A2AB-11CE-B11F-00AA00530503),
+    pointer_default(unique)
+]
+interface IEnumWorkItems : IUnknown
+{
+    HRESULT Next(
+            [in]   ULONG celt,
+            [out]  LPWSTR **rgpwszNames,
+            [out]  ULONG *pceltFetched);
+
+    HRESULT Skip(
+            [in]  ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+            [out]  IEnumWorkItems **ppEnumWorkItems);
+}
+
+cpp_quote("#ifndef _HPROPSHEETPAGE_DEFINED")
+typedef struct _PSP *HPROPSHEETPAGE;
+cpp_quote("#define _HPROPSHEETPAGE_DEFINED")
+cpp_quote("#endif")
+
+[
+    local,
+    object,
+    uuid(4086658a-cbbb-11cf-b604-00c04fd8d565),
+    pointer_default(unique)
+]
+interface IProvideTaskPage : IUnknown
+{
+    typedef enum _TASKPAGE {
+        TASKPAGE_TASK       = 0,
+        TASKPAGE_SCHEDULE   = 1,
+        TASKPAGE_SETTINGS   = 2
+    } TASKPAGE;
+
+    HRESULT GetPage(
+            [in]   TASKPAGE tpType,
+            [in]   BOOL fPersistChanges,
+            [out]  HPROPSHEETPAGE *phPage);
+}
+
+[
+    local,
+    object,
+    uuid(148BD52B-A2AB-11CE-B11F-00AA00530503),
+    pointer_default(unique)
+]
+interface ITaskTrigger : IUnknown
+{
+    typedef enum _TASK_TRIGGER_TYPE {
+        TASK_TIME_TRIGGER_ONCE              = 0,
+        TASK_TIME_TRIGGER_DAILY             = 1,
+        TASK_TIME_TRIGGER_WEEKLY            = 2,
+        TASK_TIME_TRIGGER_MONTHLYDATE       = 3,
+        TASK_TIME_TRIGGER_MONTHLYDOW        = 4,
+        TASK_EVENT_TRIGGER_ON_IDLE          = 5,
+        TASK_EVENT_TRIGGER_AT_SYSTEMSTART   = 6,
+        TASK_EVENT_TRIGGER_AT_LOGON         = 7
+    } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE;
+
+    typedef struct _DAILY {
+        WORD DaysInterval;
+    } DAILY;
+
+    typedef struct _WEEKLY {
+        WORD WeeksInterval;
+        WORD rgfDaysOfTheWeek;
+    } WEEKLY;
+
+    typedef struct _MONTHLYDATE {
+        DWORD rgfDays;
+        WORD rgfMonths;
+    } MONTHLYDATE;
+
+    typedef struct _MONTHLYDOW {
+        WORD wWhichWeek;
+        WORD rgfDaysOfTheWeek;
+        WORD rgfMonths;
+    } MONTHLYDOW;
+
+    typedef union _TRIGGER_TYPE_UNION {
+        DAILY Daily;
+        WEEKLY Weekly;
+        MONTHLYDATE MonthlyDate;
+        MONTHLYDOW MonthlyDOW;
+    } TRIGGER_TYPE_UNION;
+
+    typedef struct _TASK_TRIGGER {
+        WORD cbTriggerSize;
+        WORD Reserved1;
+        WORD wBeginYear;
+        WORD wBeginMonth;
+        WORD wBeginDay;
+        WORD wEndYear;
+        WORD wEndMonth;
+        WORD wEndDay;
+        WORD wStartHour;
+        WORD wStartMinute;
+        DWORD MinutesDuration;
+        DWORD MinutesInterval;
+        DWORD rgFlags;
+        TASK_TRIGGER_TYPE TriggerType;
+        TRIGGER_TYPE_UNION Type;
+        WORD Reserved2;
+        WORD wRandomMinutesInterval;
+    } TASK_TRIGGER, *PTASK_TRIGGER;
+
+    HRESULT SetTrigger(
+            [in]  const PTASK_TRIGGER pTrigger);
+
+    HRESULT GetTrigger(
+            [out]  PTASK_TRIGGER pTrigger);
+
+    HRESULT GetTriggerString(
+            [out]  LPWSTR *ppwszTrigger);
+}
+
+[
+    local,
+    object,
+    uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec),
+    pointer_default(unique)
+]
+interface IScheduledWorkItem : IUnknown
+{
+    HRESULT CreateTrigger(
+            [out]  WORD *piNewTrigger,
+            [out]  ITaskTrigger **ppTrigger);
+
+    HRESULT DeleteTrigger(
+            [in]  WORD iTrigger);
+
+    HRESULT GetTriggerCount(
+            [out]  WORD *plCount);
+
+    HRESULT GetTrigger(
+            [in]   WORD iTrigger,
+            [out]  ITaskTrigger **ppTrigger);
+
+    HRESULT GetTriggerString(
+            [in]   WORD iTrigger,
+            [out]  LPWSTR *ppwszTrigger);
+
+    HRESULT GetRunTimes(
+            [in]       const LPSYSTEMTIME pstBegin,
+            [in]       const LPSYSTEMTIME pstEnd,
+            [in, out]  WORD *pCount,
+            [out]      LPSYSTEMTIME *rgstTaskTimes);
+
+    HRESULT GetNextRunTime(
+            [out]  SYSTEMTIME *pstNextRun);
+
+    HRESULT SetIdleWait(
+            [in]  WORD wIdleMinutes,
+            [in]  WORD wDeadlineMinutes);
+
+    HRESULT GetIdleWait(
+            [out]  WORD *pwIdleMinutes,
+            [out]  WORD *pwDeadlineMinutes);
+
+    HRESULT Run();
+
+    HRESULT Terminate();
+
+    HRESULT EditWorkItem(
+            [in]  HWND hParent,
+            [in]  DWORD dwReserved);
+
+    HRESULT GetMostRecentRunTime(
+            [out]  SYSTEMTIME *pstLastRun);
+
+    HRESULT GetStatus(
+            [out]  HRESULT *phrStatus);
+
+    HRESULT GetExitCode(
+            [out]  DWORD *pdwExitCode);
+
+    HRESULT SetComment(
+            [in]  LPCWSTR pwszComment);
+
+    HRESULT GetComment(
+            [out]  LPWSTR *ppwszComment);
+
+    HRESULT SetCreator(
+            LPCWSTR pwszCreator);
+
+    HRESULT GetCreator(
+            [out]  LPWSTR *ppwszCreator);
+
+    HRESULT SetWorkItemData(
+            [in]  WORD cBytes,
+            [in]  BYTE rgbData[]);
+
+    HRESULT GetWorkItemData(
+            [out]  WORD *pcBytes,
+            [out]  BYTE **ppBytes);
+
+    HRESULT SetErrorRetryCount(
+            WORD wRetryCount);
+
+    HRESULT GetErrorRetryCount(
+            [out]  WORD *pwRetryCount);
+
+    HRESULT SetErrorRetryInterval(
+            WORD wRetryInterval);
+
+    HRESULT GetErrorRetryInterval(
+            [out]  WORD *pwRetryInterval);
+
+    HRESULT SetFlags(
+            DWORD dwFlags);
+
+    HRESULT GetFlags(
+            [out]  DWORD *pdwFlags);
+
+    HRESULT SetAccountInformation(
+            [in]  LPCWSTR pwszAccountName,
+            [in]  LPCWSTR pwszPassword);
+
+    HRESULT GetAccountInformation(
+            [out]  LPWSTR *ppwszAccountName);
+}
+
+[
+    local,
+    object,
+    uuid(148BD524-A2AB-11CE-B11F-00AA00530503),
+    pointer_default(unique)
+]
+interface ITask : IScheduledWorkItem
+{
+    HRESULT SetApplicationName(
+            [in]  LPCWSTR pwszApplicationName);
+
+    HRESULT GetApplicationName(
+            [out]  LPWSTR *ppwszApplicationName);
+
+    HRESULT SetParameters(
+            [in]  LPCWSTR pwszParameters);
+
+    HRESULT GetParameters(
+            [out]  LPWSTR *ppwszParameters);
+
+    HRESULT SetWorkingDirectory(
+            [in]  LPCWSTR pwszWorkingDirectory);
+
+    HRESULT GetWorkingDirectory(
+            [in]  LPWSTR *ppwszWorkingDirectory);
+
+    HRESULT SetPriority(
+            [in]  DWORD dwPriority);
+
+    HRESULT GetPriority(
+            [out]  DWORD *pdwPriority);
+
+    HRESULT SetTaskFlags(
+            [in]  DWORD dwFlags);
+
+    HRESULT GetTaskFlags(
+            [out]  DWORD *pdwFlags);
+
+    HRESULT SetMaxRunTime(
+            [in]  DWORD dwMaxRunTime);
+
+    HRESULT GetMaxRunTime(
+            [out]  DWORD *pdwMaxRunTime);
+}
+
+[
+    local,
+    object,
+    uuid(148BD527-A2AB-11CE-B11F-00AA00530503),
+    pointer_default(unique)
+]
+interface ITaskScheduler : IUnknown
+{
+    HRESULT SetTargetComputer(
+            [in]  LPCWSTR pwszComputer);
+
+    HRESULT GetTargetComputer(
+            [out]  LPWSTR *ppwszComputer);
+
+    HRESULT Enum(
+            [out]  IEnumWorkItems **ppEnumTasks);
+
+    HRESULT Activate(
+            [in]   LPCWSTR pwszName,
+            [in]   REFIID riid,
+            [out]  IUnknown **ppunk);
+
+    HRESULT Delete(
+            [in]  LPCWSTR pwszName);
+
+    HRESULT NewWorkItem(
+            [in]   LPCWSTR pwszTaskName,
+            [in]   REFCLSID rclsid,
+            [in]   REFIID riid,
+            [out]  IUnknown **ppunk);
+
+    HRESULT AddWorkItem(
+            [in]  LPCWSTR pwszTaskName,
+            [in]  IScheduledWorkItem *pWorkItem);
+
+    HRESULT IsOfType(
+            [in]  LPCWSTR pwszName,
+            [in]  REFIID riid);
+}
+
+[
+    threading(both),
+    uuid(148BD52A-A2AB-11CE-B11F-00AA00530503)
+]
+coclass CTaskScheduler
+{
+    [default] interface ITaskScheduler;
+};
+
+
+[
+    threading(both),
+    uuid(148BD520-A2AB-11CE-B11F-00AA00530503)
+]
+coclass CTask
+{
+    [default] interface ITask;
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h
new file mode 100644
index 0000000..6429b85
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2008 Hans Leidekker for CodeWeavers.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSTCPIP_H
+#define __WINE_MSTCPIP_H
+
+#include <nldef.h>
+
+struct tcp_keepalive
+{
+    ULONG onoff;
+    ULONG keepalivetime;
+    ULONG keepaliveinterval;
+};
+
+#ifndef USE_WS_PREFIX
+
+#define SIO_RCVALL            _WSAIOW(IOC_VENDOR, 1)
+#define SIO_RCVALL_MCAST      _WSAIOW(IOC_VENDOR, 2)
+#define SIO_RCVALL_IGMPMCAST  _WSAIOW(IOC_VENDOR, 3)
+#define SIO_KEEPALIVE_VALS    _WSAIOW(IOC_VENDOR, 4)
+#define SIO_ABSORB_RTRALERT   _WSAIOW(IOC_VENDOR, 5)
+#define SIO_UCAST_IF          _WSAIOW(IOC_VENDOR, 6)
+#define SIO_LIMIT_BROADCASTS  _WSAIOW(IOC_VENDOR, 7)
+#define SIO_INDEX_BIND        _WSAIOW(IOC_VENDOR, 8)
+#define SIO_INDEX_MCASTIF     _WSAIOW(IOC_VENDOR, 9)
+#define SIO_INDEX_ADD_MCAST   _WSAIOW(IOC_VENDOR, 10)
+#define SIO_INDEX_DEL_MCAST   _WSAIOW(IOC_VENDOR, 11)
+
+#define RCVALL_OFF             0
+#define RCVALL_ON              1
+#define RCVALL_SOCKETLEVELONLY 2
+
+#else
+
+#define WS_SIO_RCVALL            _WSAIOW(WS_IOC_VENDOR, 1)
+#define WS_SIO_RCVALL_MCAST      _WSAIOW(WS_IOC_VENDOR, 2)
+#define WS_SIO_RCVALL_IGMPMCAST  _WSAIOW(WS_IOC_VENDOR, 3)
+#define WS_SIO_KEEPALIVE_VALS    _WSAIOW(WS_IOC_VENDOR, 4)
+#define WS_SIO_ABSORB_RTRALERT   _WSAIOW(WS_IOC_VENDOR, 5)
+#define WS_SIO_UCAST_IF          _WSAIOW(WS_IOC_VENDOR, 6)
+#define WS_SIO_LIMIT_BROADCASTS  _WSAIOW(WS_IOC_VENDOR, 7)
+#define WS_SIO_INDEX_BIND        _WSAIOW(WS_IOC_VENDOR, 8)
+#define WS_SIO_INDEX_MCASTIF     _WSAIOW(WS_IOC_VENDOR, 9)
+#define WS_SIO_INDEX_ADD_MCAST   _WSAIOW(WS_IOC_VENDOR, 10)
+#define WS_SIO_INDEX_DEL_MCAST   _WSAIOW(WS_IOC_VENDOR, 11)
+
+#define WS_RCVALL_OFF             0
+#define WS_RCVALL_ON              1
+#define WS_RCVALL_SOCKETLEVELONLY 2
+
+#endif /* USE_WS_PREFIX */
+
+#endif /* __WINE_MSTCPIP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h
new file mode 100644
index 0000000..c13067b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h
@@ -0,0 +1,46 @@
+/*
+ * Assert support
+ *
+ * Copyright 2011 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <crtdefs.h>
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#undef assert
+#ifdef NDEBUG
+#define assert(_expr) ((void)0)
+#else
+extern void __cdecl _assert(const char *, const char *, unsigned int);
+#define assert(_expr) (void)((!!(_expr)) || (_assert(#_expr, __FILE__, __LINE__), 0))
+#endif
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h
new file mode 100644
index 0000000..18f3d24
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h
@@ -0,0 +1,63 @@
+/*
+ * Console I/O definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_CONIO_H
+#define __WINE_CONIO_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char* __cdecl _cgets(char*);
+int   __cdecl _cprintf(const char*,...);
+int   __cdecl _cputs(const char*);
+int   __cdecl _cscanf(const char*,...);
+int   __cdecl _getch(void);
+int   __cdecl _getche(void);
+int   __cdecl _kbhit(void);
+int   __cdecl _putch(int);
+int   __cdecl _ungetch(int);
+
+#ifdef _M_IX86
+int            __cdecl _inp(unsigned short);
+__msvcrt_ulong __cdecl _inpd(unsigned short);
+unsigned short __cdecl _inpw(unsigned short);
+int            __cdecl _outp(unsigned short, int);
+__msvcrt_ulong __cdecl _outpd(unsigned short, __msvcrt_ulong);
+unsigned short __cdecl _outpw(unsigned short, unsigned short);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline char* cgets(char* str) { return _cgets(str); }
+static inline int cputs(const char* str) { return _cputs(str); }
+static inline int getch(void) { return _getch(); }
+static inline int getche(void) { return _getche(); }
+static inline int kbhit(void) { return _kbhit(); }
+static inline int putch(int c) { return _putch(c); }
+static inline int ungetch(int c) { return _ungetch(c); }
+#ifdef _M_IX86
+static inline int inp(unsigned short i) { return _inp(i); }
+static inline unsigned short inpw(unsigned short i) { return _inpw(i); }
+static inline int outp(unsigned short i, int j) { return _outp(i, j); }
+static inline unsigned short outpw(unsigned short i, unsigned short j) { return _outpw(i, j); }
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ < 4)
+extern int __cdecl cprintf(const char*,...) __attribute__((alias("_cprintf"),format(printf,1,2)));
+extern int __cdecl cscanf(const char*,...) __attribute__((alias("_cscanf"),format(scanf,1,2)));
+#else
+#define cprintf _cprintf
+#define cscanf _cscanf
+#endif /* __GNUC__ */
+
+#endif /* __WINE_CONIO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h
new file mode 100644
index 0000000..8e5edb9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h
@@ -0,0 +1,140 @@
+/*
+ * Debug API
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CRTDBG_H_
+#define __WINE_CRTDBG_H_
+
+#include <crtdefs.h>
+
+/* The debug API is not implemented in Winelib.
+ * Redirect everything to the regular APIs.
+ */
+
+#define _CRT_WARN                       0
+#define _CRT_ERROR                      1
+#define _CRT_ASSERT                     2
+#define _CRT_ERRCNT                     3
+
+#define _FREE_BLOCK                     0
+#define _NORMAL_BLOCK                   1
+#define _CRT_BLOCK                      2
+#define _IGNORE_BLOCK                   3
+#define _CLIENT_BLOCK                   4
+#define _MAX_BLOCKS                     5
+
+#define _BLOCK_TYPE(block)              (block & 0xFFFF)
+#define _BLOCK_SUBTYPE(block)           (block >> 16 & 0xFFFF)
+
+typedef struct _CrtMemState
+{
+    struct _CrtMemBlockHeader* pBlockHeader;
+    __msvcrt_ulong lCounts[_MAX_BLOCKS];
+    __msvcrt_ulong lSizes[_MAX_BLOCKS];
+    __msvcrt_ulong lHighWaterCount;
+    __msvcrt_ulong lTotalCount;
+} _CrtMemState;
+
+
+#ifndef _DEBUG
+
+#define _ASSERT(expr)                   ((void)0)
+#define _ASSERTE(expr)                  ((void)0)
+#define _CrtDbgBreak()                  ((void)0)
+
+#define _CrtCheckMemory()               ((int)1)
+#define _CrtDbgReport(...)              ((int)0)
+#define _CrtDumpMemoryLeaks()           ((int)0)
+#define _CrtSetBreakAlloc(a)            ((__msvcrt_long)0)
+#define _CrtSetDbgFlag(f)               ((int)0)
+#define _CrtSetDumpClient(f)            ((void)0)
+#define _CrtSetReportMode(t,m)          ((int)0)
+
+#else /* _DEBUG */
+
+#include <assert.h>
+#define _ASSERT(expr)                   assert(expr)
+#define _ASSERTE(expr)                  assert(expr)
+#if defined(__GNUC__) && defined(__i386__)
+#define _CrtDbgBreak()                  __asm__ ("\tint $0x3\n")
+#else
+#define _CrtDbgBreak()                  ((void)0)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int _crtAssertBusy;
+extern int _crtBreakAlloc;
+extern int _crtDbgFlag;
+
+int   __cdecl _CrtCheckMemory(void);
+int   __cdecl _CrtDbgReport(int reportType, const char *filename, int linenumber,
+                            const char *moduleName, const char *format, ...);
+int   __cdecl _CrtDumpMemoryLeaks(void);
+int   __cdecl _CrtSetBreakAlloc(int);
+int   __cdecl _CrtSetDbgFlag(int);
+void *__cdecl _CrtSetDumpClient(void *dumpClient);
+int   __cdecl _CrtSetReportMode(int reportType, int reportMode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DEBUG */
+
+#define _CrtDoForAllClientObjects(f,c)  ((void)0)
+#define _CrtIsMemoryBlock(p,s,r,f,l)    ((int)1)
+#define _CrtIsValidHeapPointer(p)       ((int)1)
+#define _CrtIsValidPointer(p,s,a)       ((int)1)
+#define _CrtMemCheckpoint(s)            ((void)0)
+#define _CrtMemDifference(s1,s2,s3)     ((int)0)
+#define _CrtMemDumpAllObjectsSince(s)   ((void)0)
+#define _CrtMemDumpStatistics(s)        ((void)0)
+#define _CrtSetAllocHook(f)             ((void)0)
+
+#define _RPT0(t,m)
+#define _RPT1(t,m,p1)
+#define _RPT2(t,m,p1,p2)
+#define _RPT3(t,m,p1,p2,p3)
+#define _RPT4(t,m,p1,p2,p3,p4)
+#define _RPTF0(t,m)
+#define _RPTF1(t,m,p1)
+#define _RPTF2(t,m,p1,p2)
+#define _RPTF3(t,m,p1,p2,p3)
+#define _RPTF4(t,m,p1,p2,p3,p4)
+
+
+#define _malloc_dbg(s,t,f,l)            malloc(s)
+#define _calloc_dbg(c,s,t,f,l)          calloc(c,s)
+#define _expand_dbg(p,s,t,f,l)          _expand(p,s)
+#define _free_dbg(p,t)                  free(p)
+#define _realloc_dbg(p,s,t,f,l)         realloc(p,s)
+
+#endif /* __WINE_CRTDBG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h
new file mode 100644
index 0000000..f276416
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h
@@ -0,0 +1,248 @@
+/*
+ * CRT definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CRTDEFS_H
+#define __WINE_CRTDEFS_H
+
+#ifndef __WINE_USE_MSVCRT
+#define __WINE_USE_MSVCRT
+#endif
+
+#ifdef __WINE_WINE_PORT_H
+# error You cannot use both wine/port.h and msvcrt headers
+#endif
+
+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__aarch64__)) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+#if !defined(_MSC_VER) && !defined(__int64)
+# if defined(_WIN64) && !defined(__MINGW64__)
+#   define __int64 long
+# else
+#   define __int64 long long
+# endif
+#endif
+
+#ifndef __stdcall
+# ifdef __i386__
+#  ifdef __GNUC__
+#   ifdef __APPLE__ /* Mac OS X uses a 16-byte aligned stack and not a 4-byte one */
+#    define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))
+#   else
+#    define __stdcall __attribute__((__stdcall__))
+#   endif
+#  elif defined(_MSC_VER)
+    /* Nothing needs to be done. __stdcall already exists */
+#  else
+#   error You need to define __stdcall for your compiler
+#  endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+#  define __stdcall __attribute__((ms_abi))
+# else
+#  define __stdcall
+# endif
+#endif /* __stdcall */
+
+#ifndef __cdecl
+# if defined(__i386__) && defined(__GNUC__)
+#  ifdef __APPLE__ /* Mac OS X uses 16-byte aligned stack and not a 4-byte one */
+#   define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
+#  else
+#   define __cdecl __attribute__((__cdecl__))
+#  endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+#  define __cdecl __attribute__((ms_abi))
+# elif !defined(_MSC_VER)
+#  define __cdecl
+# endif
+#endif /* __cdecl */
+
+#ifndef __ms_va_list
+# if defined(__x86_64__) && defined (__GNUC__)
+#  define __ms_va_list __builtin_ms_va_list
+#  define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
+#  define __ms_va_end(list) __builtin_ms_va_end(list)
+# else
+#  define __ms_va_list va_list
+#  define __ms_va_start(list,arg) va_start(list,arg)
+#  define __ms_va_end(list) va_end(list)
+# endif
+#endif
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+#  define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+#  define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+#define _ARGMAX 100
+
+#ifndef _MSVCRT_LONG_DEFINED
+#define _MSVCRT_LONG_DEFINED
+/* we need 32-bit longs even on 64-bit */
+typedef int __msvcrt_long;
+typedef unsigned int __msvcrt_ulong;
+#endif
+
+#ifndef _INTPTR_T_DEFINED
+#ifdef  _WIN64
+typedef __int64 intptr_t;
+#else
+typedef int intptr_t;
+#endif
+#define _INTPTR_T_DEFINED
+#endif
+
+#ifndef _UINTPTR_T_DEFINED
+#ifdef  _WIN64
+typedef unsigned __int64 uintptr_t;
+#else
+typedef unsigned int uintptr_t;
+#endif
+#define _UINTPTR_T_DEFINED
+#endif
+
+#ifndef _PTRDIFF_T_DEFINED
+#ifdef _WIN64
+typedef __int64 ptrdiff_t;
+#else
+typedef int ptrdiff_t;
+#endif
+#define _PTRDIFF_T_DEFINED
+#endif
+
+#ifndef _SIZE_T_DEFINED
+#ifdef _WIN64
+typedef unsigned __int64 size_t;
+#else
+typedef unsigned int size_t;
+#endif
+#define _SIZE_T_DEFINED
+#endif
+
+#ifndef _TIME32_T_DEFINED
+typedef __msvcrt_long __time32_t;
+#define _TIME32_T_DEFINED
+#endif
+
+#ifndef _TIME64_T_DEFINED
+typedef __int64 DECLSPEC_ALIGN(8) __time64_t;
+#define _TIME64_T_DEFINED
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+# ifdef _WIN64
+#  error You cannot use 32-bit time_t in Win64
+# endif
+#elif !defined(_WIN64)
+# define _USE_32BIT_TIME_T
+#endif
+
+#ifndef _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+typedef __time32_t time_t;
+#else
+typedef __time64_t time_t;
+#endif
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+#ifndef __cplusplus
+typedef unsigned short wchar_t;
+#endif
+#define _WCHAR_T_DEFINED
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+typedef unsigned short  wint_t;
+typedef unsigned short  wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+#ifndef _ERRNO_T_DEFINED
+typedef int errno_t;
+#define _ERRNO_T_DEFINED
+#endif
+
+struct threadlocaleinfostruct;
+struct threadmbcinfostruct;
+typedef struct threadlocaleinfostruct *pthreadlocinfo;
+typedef struct threadmbcinfostruct *pthreadmbcinfo;
+
+typedef struct localeinfo_struct
+{
+    pthreadlocinfo locinfo;
+    pthreadmbcinfo mbcinfo;
+} _locale_tstruct, *_locale_t;
+
+#ifndef _TAGLC_ID_DEFINED
+typedef struct tagLC_ID {
+    unsigned short wLanguage;
+    unsigned short wCountry;
+    unsigned short wCodePage;
+} LC_ID, *LPLC_ID;
+#define _TAGLC_ID_DEFINED
+#endif
+
+#ifndef _THREADLOCALEINFO
+typedef struct threadlocaleinfostruct {
+    int refcount;
+    unsigned int lc_codepage;
+    unsigned int lc_collate_cp;
+    __msvcrt_ulong lc_handle[6];
+    LC_ID lc_id[6];
+    struct {
+        char *locale;
+        wchar_t *wlocale;
+        int *refcount;
+        int *wrefcount;
+    } lc_category[6];
+    int lc_clike;
+    int mb_cur_max;
+    int *lconv_intl_refcount;
+    int *lconv_num_refcount;
+    int *lconv_mon_refcount;
+    struct lconv *lconv;
+    int *ctype1_refcount;
+    unsigned short *ctype1;
+    const unsigned short *pctype;
+    const unsigned char *pclmap;
+    const unsigned char *pcumap;
+    struct __lc_time_data *lc_time_curr;
+} threadlocinfo;
+#define _THREADLOCALEINFO
+#endif
+
+#endif /* __WINE_CRTDEFS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h
new file mode 100644
index 0000000..b44e74c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h
@@ -0,0 +1,85 @@
+/*
+ * Character type definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_CTYPE_H
+#define __WINE_CTYPE_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WEOF
+#define WEOF        (wint_t)(0xFFFF)
+#endif
+
+/* ASCII char classification table - binary compatible */
+#define _UPPER        0x0001  /* C1_UPPER */
+#define _LOWER        0x0002  /* C1_LOWER */
+#define _DIGIT        0x0004  /* C1_DIGIT */
+#define _SPACE        0x0008  /* C1_SPACE */
+#define _PUNCT        0x0010  /* C1_PUNCT */
+#define _CONTROL      0x0020  /* C1_CNTRL */
+#define _BLANK        0x0040  /* C1_BLANK */
+#define _HEX          0x0080  /* C1_XDIGIT */
+#define _LEADBYTE     0x8000
+#define _ALPHA       (0x0100|_UPPER|_LOWER)  /* (C1_ALPHA|_UPPER|_LOWER) */
+
+int __cdecl __isascii(int);
+int __cdecl __iscsym(int);
+int __cdecl __iscsymf(int);
+int __cdecl __toascii(int);
+int __cdecl _isctype(int,int);
+int __cdecl _tolower(int);
+int __cdecl _toupper(int);
+int __cdecl isalnum(int);
+int __cdecl isalpha(int);
+int __cdecl iscntrl(int);
+int __cdecl isdigit(int);
+int __cdecl isgraph(int);
+int __cdecl islower(int);
+int __cdecl isprint(int);
+int __cdecl ispunct(int);
+int __cdecl isspace(int);
+int __cdecl isupper(int);
+int __cdecl isxdigit(int);
+int __cdecl tolower(int);
+int __cdecl toupper(int);
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+int __cdecl is_wctype(wint_t,wctype_t);
+int __cdecl isleadbyte(int);
+int __cdecl iswalnum(wint_t);
+int __cdecl iswalpha(wint_t);
+int __cdecl iswascii(wint_t);
+int __cdecl iswcntrl(wint_t);
+int __cdecl iswctype(wint_t,wctype_t);
+int __cdecl iswdigit(wint_t);
+int __cdecl iswgraph(wint_t);
+int __cdecl iswlower(wint_t);
+int __cdecl iswprint(wint_t);
+int __cdecl iswpunct(wint_t);
+int __cdecl iswspace(wint_t);
+int __cdecl iswupper(wint_t);
+int __cdecl iswxdigit(wint_t);
+wchar_t __cdecl towlower(wchar_t);
+wchar_t __cdecl towupper(wchar_t);
+#endif /* _WCTYPE_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int isascii(int c) { return __isascii(c); }
+static inline int iscsym(int c) { return __iscsym(c); }
+static inline int iscsymf(int c) { return __iscsymf(c); }
+static inline int toascii(int c) { return __toascii(c); }
+
+#endif /* __WINE_CTYPE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h
new file mode 100644
index 0000000..45db8e2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h
@@ -0,0 +1,59 @@
+/*
+ * Path and directory definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_DIRECT_H
+#define __WINE_DIRECT_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _DISKFREE_T_DEFINED
+#define _DISKFREE_T_DEFINED
+struct _diskfree_t {
+  unsigned int total_clusters;
+  unsigned int avail_clusters;
+  unsigned int sectors_per_cluster;
+  unsigned int bytes_per_sector;
+};
+#endif /* _DISKFREE_T_DEFINED */
+
+int           __cdecl _chdir(const char*);
+int           __cdecl _chdrive(int);
+char*         __cdecl _getcwd(char*,int);
+char*         __cdecl _getdcwd(int,char*,int);
+int           __cdecl _getdrive(void);
+__msvcrt_ulong __cdecl _getdrives(void);
+int           __cdecl _mkdir(const char*);
+int           __cdecl _rmdir(const char*);
+
+#ifndef _WDIRECT_DEFINED
+#define _WDIRECT_DEFINED
+int      __cdecl _wchdir(const wchar_t*);
+wchar_t* __cdecl _wgetcwd(wchar_t*,int);
+wchar_t* __cdecl _wgetdcwd(int,wchar_t*,int);
+int      __cdecl _wmkdir(const wchar_t*);
+int      __cdecl _wrmdir(const wchar_t*);
+#endif /* _WDIRECT_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int chdir(const char* newdir) { return _chdir(newdir); }
+static inline char* getcwd(char * buf, int size) { return _getcwd(buf, size); }
+static inline int mkdir(const char* newdir) { return _mkdir(newdir); }
+static inline int rmdir(const char* dir) { return _rmdir(dir); }
+
+#include <poppack.h>
+
+#endif /* __WINE_DIRECT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h
new file mode 100644
index 0000000..5e04280
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h
@@ -0,0 +1 @@
+#include <direct.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h
new file mode 100644
index 0000000..bc62188
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h
@@ -0,0 +1,50 @@
+/*
+ * DOS definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_DOS_H
+#define __WINE_DOS_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+/* The following are also defined in io.h */
+#define _A_NORMAL 0x00000000
+#define _A_RDONLY 0x00000001
+#define _A_HIDDEN 0x00000002
+#define _A_SYSTEM 0x00000004
+#define _A_VOLID  0x00000008
+#define _A_SUBDIR 0x00000010
+#define _A_ARCH   0x00000020
+
+#ifndef _DISKFREE_T_DEFINED
+#define _DISKFREE_T_DEFINED
+struct _diskfree_t {
+  unsigned int total_clusters;
+  unsigned int avail_clusters;
+  unsigned int sectors_per_cluster;
+  unsigned int bytes_per_sector;
+};
+#endif /* _DISKFREE_T_DEFINED */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned int __cdecl _getdiskfree(unsigned int, struct _diskfree_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define diskfree_t _diskfree_t
+
+#include <poppack.h>
+
+#endif /* __WINE_DOS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h
new file mode 100644
index 0000000..0b421a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h
@@ -0,0 +1,58 @@
+/*
+ * C++ exception handling facility
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_EH_H
+#define __WINE_EH_H
+
+#include <crtdefs.h>
+
+#if !defined(__cplusplus) && !defined(__WINE_MSVCRT_TEST)
+#error "eh.h is meant only for C++ applications"
+#endif
+
+#include <pshpack8.h>
+
+struct _EXCEPTION_POINTERS;
+
+typedef void (__cdecl *terminate_handler)(void);
+typedef void (__cdecl *terminate_function)(void);
+typedef void (__cdecl *unexpected_handler)(void);
+typedef void (__cdecl *unexpected_function)(void);
+typedef void (__cdecl *_se_translator_function)(unsigned int code, struct _EXCEPTION_POINTERS *info);
+
+terminate_function __cdecl set_terminate(terminate_function func);
+unexpected_function __cdecl set_unexpected(unexpected_function func);
+_se_translator_function __cdecl set_se_translator(_se_translator_function func);
+
+void __cdecl terminate(void);
+void __cdecl unexpected(void);
+
+#include <poppack.h>
+
+#endif /* __WINE_EH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h
new file mode 100644
index 0000000..d738868
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2001 Jon Griffiths
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ERRNO_H
+#define __WINE_ERRNO_H
+
+#include <crtdefs.h>
+
+#  define EPERM   1
+#  define ENOENT  2
+#  define ESRCH   3
+#  define EINTR   4
+#  define EIO     5
+#  define ENXIO   6
+#  define E2BIG   7
+#  define ENOEXEC 8
+#  define EBADF   9
+#  define ECHILD  10
+#  define EAGAIN  11
+#  define ENOMEM  12
+#  define EACCES  13
+#  define EFAULT  14
+#  define EBUSY   16
+#  define EEXIST  17
+#  define EXDEV   18
+#  define ENODEV  19
+#  define ENOTDIR 20
+#  define EISDIR  21
+#  define EINVAL  22
+#  define ENFILE  23
+#  define EMFILE  24
+#  define ENOTTY  25
+#  define EFBIG   27
+#  define ENOSPC  28
+#  define ESPIPE  29
+#  define EROFS   30
+#  define EMLINK  31
+#  define EPIPE   32
+#  define EDOM    33
+#  define ERANGE  34
+#  define EDEADLK 36
+#  define EDEADLOCK EDEADLK
+#  define ENAMETOOLONG 38
+#  define ENOLCK  39
+#  define ENOSYS  40
+#  define ENOTEMPTY 41
+#  define EILSEQ    42
+
+#  define STRUNCATE 80
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int* __cdecl _errno(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define errno        (*_errno())
+
+#endif  /* __WINE_ERRNO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h
new file mode 100644
index 0000000..267feed
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h
@@ -0,0 +1,50 @@
+/*
+ * File definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_FCNTL_H
+#define __WINE_FCNTL_H
+
+#include <crtdefs.h>
+
+#define _O_RDONLY      0
+#define _O_WRONLY      1
+#define _O_RDWR        2
+#define _O_ACCMODE     (_O_RDONLY|_O_WRONLY|_O_RDWR)
+#define _O_APPEND      0x0008
+#define _O_RANDOM      0x0010
+#define _O_SEQUENTIAL  0x0020
+#define _O_TEMPORARY   0x0040
+#define _O_NOINHERIT   0x0080
+#define _O_CREAT       0x0100
+#define _O_TRUNC       0x0200
+#define _O_EXCL        0x0400
+#define _O_SHORT_LIVED 0x1000
+#define _O_TEXT        0x4000
+#define _O_BINARY      0x8000
+#define _O_RAW         _O_BINARY
+
+#define _O_WTEXT       0x10000
+#define _O_U16TEXT     0x20000
+#define _O_U8TEXT      0x40000
+
+#define O_RDONLY    _O_RDONLY
+#define O_WRONLY    _O_WRONLY
+#define O_RDWR      _O_RDWR
+#define O_ACCMODE   _O_ACCMODE
+#define O_APPEND    _O_APPEND
+#define O_RANDOM    _O_RANDOM
+#define O_SEQENTIAL _O_SEQUENTIAL
+#define O_TEMPORARY _O_TEMPORARY
+#define O_NOINHERIT _O_NOINHERIT
+#define O_CREAT     _O_CREAT
+#define O_TRUNC     _O_TRUNC
+#define O_EXCL      _O_EXCL
+#define O_TEXT      _O_TEXT
+#define O_BINARY    _O_BINARY
+#define O_RAW       _O_BINARY
+
+#endif /* __WINE_FCNTL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h
new file mode 100644
index 0000000..33ebb68
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h
@@ -0,0 +1,158 @@
+/*
+ * Floating point arithmetic.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Hans Leidekker.
+ * This file is in the public domain.
+ */
+
+#ifndef __WINE_FLOAT_H
+#define __WINE_FLOAT_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DBL_DIG        15
+#define DBL_EPSILON    2.2204460492503131e-016
+#define DBL_MANT_DIG   53
+#define DBL_MAX        1.7976931348623158e+308
+#define DBL_MAX_10_EXP 308
+#define DBL_MAX_EXP    1024
+#define DBL_MIN        2.2250738585072014e-308
+#define DBL_MIN_10_EXP (-307)
+#define DBL_MIN_EXP    (-1021)
+
+#define _DBL_RADIX  2
+#define _DBL_ROUNDS 1
+
+#define DBL_RADIX  _DBL_RADIX
+#define DBL_ROUNDS _DBL_ROUNDS
+
+#define FLT_DIG        6
+#define FLT_EPSILON    1.192092896e-07F
+#define FLT_MANT_DIG   24
+#define FLT_MAX        3.402823466e+38F
+#define FLT_MAX_10_EXP 38
+#define FLT_MAX_EXP    128
+#define FLT_MIN        1.175494351e-38F
+#define FLT_MIN_10_EXP (-37)
+#define FLT_MIN_EXP    (-125)
+
+#define FLT_RADIX  2
+#define FLT_ROUNDS 1
+
+#define LDBL_DIG        DBL_DIG
+#define LDBL_EPSILON    DBL_EPSILON
+#define LDBL_MANT_DIG   DBL_MANT_DIG
+#define LDBL_MAX        DBL_MAX
+#define LDBL_MAX_10_EXP DBL_MAX_10_EXP
+#define LDBL_MAX_EXP    DBL_MAX_EXP
+#define LDBL_MIN        DBL_MIN
+#define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+#define LDBL_MIN_EXP    DBL_MIN_EXP
+
+#define _LDBL_RADIX  _DBL_RADIX
+#define _LDBL_ROUNDS _DBL_ROUNDS
+
+#define LDBL_RADIX  _LDBL_RADIX
+#define LDBL_ROUNDS _LDBL_ROUNDS
+
+/* Control word masks for unMask */
+#define _MCW_EM 0x0008001f
+#define _MCW_IC 0x00040000
+#define _MCW_RC 0x00000300
+#define _MCW_PC 0x00030000
+#define _MCW_DN 0x03000000
+
+/* Control word values for unNew (use with related unMask above) */
+#define _EM_INVALID    0x00000010
+#define _EM_DENORMAL   0x00080000
+#define _EM_ZERODIVIDE 0x00000008
+#define _EM_OVERFLOW   0x00000004
+#define _EM_UNDERFLOW  0x00000002
+#define _EM_INEXACT    0x00000001
+#define _IC_AFFINE     0x00040000
+#define _IC_PROJECTIVE 0x00000000
+#define _RC_CHOP       0x00000300
+#define _RC_UP         0x00000200
+#define _RC_DOWN       0x00000100
+#define _RC_NEAR       0x00000000
+#define _PC_24         0x00020000
+#define _PC_53         0x00010000
+#define _PC_64         0x00000000
+#define _DN_SAVE       0x00000000
+#define _DN_FLUSH      0x01000000
+#define _DN_FLUSH_OPERANDS_SAVE_RESULTS 0x02000000
+#define _DN_SAVE_OPERANDS_FLUSH_RESULTS 0x03000000
+#define _EM_AMBIGUOUS  0x80000000
+
+/* _statusfp bit flags */
+#define _SW_INEXACT    0x00000001 /* inexact (precision) */
+#define _SW_UNDERFLOW  0x00000002 /* underflow */
+#define _SW_OVERFLOW   0x00000004 /* overflow */
+#define _SW_ZERODIVIDE 0x00000008 /* zero divide */
+#define _SW_INVALID    0x00000010 /* invalid */
+
+#define _SW_UNEMULATED     0x00000040  /* unemulated instruction */
+#define _SW_SQRTNEG        0x00000080  /* square root of a neg number */
+#define _SW_STACKOVERFLOW  0x00000200  /* FP stack overflow */
+#define _SW_STACKUNDERFLOW 0x00000400  /* FP stack underflow */
+
+#define _SW_DENORMAL 0x00080000 /* denormal status bit */
+
+/* fpclass constants */
+#define _FPCLASS_SNAN 0x0001  /* Signaling "Not a Number" */
+#define _FPCLASS_QNAN 0x0002  /* Quiet "Not a Number" */
+#define _FPCLASS_NINF 0x0004  /* Negative Infinity */
+#define _FPCLASS_NN   0x0008  /* Negative Normal */
+#define _FPCLASS_ND   0x0010  /* Negative Denormal */
+#define _FPCLASS_NZ   0x0020  /* Negative Zero */
+#define _FPCLASS_PZ   0x0040  /* Positive Zero */
+#define _FPCLASS_PD   0x0080  /* Positive Denormal */
+#define _FPCLASS_PN   0x0100  /* Positive Normal */
+#define _FPCLASS_PINF 0x0200  /* Positive Infinity */
+
+/* floating point error signals */
+#define _FPE_INVALID            0x81
+#define _FPE_DENORMAL           0x82
+#define _FPE_ZERODIVIDE         0x83
+#define _FPE_OVERFLOW           0x84
+#define _FPE_UNDERFLOW          0x85
+#define _FPE_INEXACT            0x86
+#define _FPE_UNEMULATED         0x87
+#define _FPE_SQRTNEG            0x88
+#define _FPE_STACKOVERFLOW      0x8a
+#define _FPE_STACKUNDERFLOW     0x8b
+#define _FPE_EXPLICITGEN        0x8c
+
+#if defined(__i386__)
+#define _CW_DEFAULT (_RC_NEAR + _PC_53 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
+#elif defined(__x86_64__)
+#define _CW_DEFAULT (_RC_NEAR + _PC_64 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
+#endif
+
+unsigned int __cdecl _control87(unsigned int, unsigned int);
+unsigned int __cdecl _controlfp(unsigned int, unsigned int);
+errno_t __cdecl _controlfp_s(unsigned int *, unsigned int, unsigned int);
+
+double __cdecl _copysign (double, double);
+double __cdecl _chgsign (double);
+double __cdecl _scalb(double, __msvcrt_long);
+double __cdecl _logb(double);
+double __cdecl _nextafter(double, double);
+int    __cdecl _finite(double);
+int    __cdecl _isnan(double);
+int    __cdecl _fpclass(double);
+
+#ifdef __x86_64__
+float __cdecl _scalbf(float, __msvcrt_long);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_FLOAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h
new file mode 100644
index 0000000..09b615c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h
@@ -0,0 +1,184 @@
+/*
+ * System I/O definitions.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_IO_H
+#define __WINE_IO_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+/* The following are also defined in dos.h */
+#define _A_NORMAL 0x00000000
+#define _A_RDONLY 0x00000001
+#define _A_HIDDEN 0x00000002
+#define _A_SYSTEM 0x00000004
+#define _A_VOLID  0x00000008
+#define _A_SUBDIR 0x00000010
+#define _A_ARCH   0x00000020
+
+#ifndef _FSIZE_T_DEFINED
+typedef __msvcrt_ulong _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _FINDDATA_T_DEFINED
+#define _FINDDATA_T_DEFINED
+struct _finddata_t
+{
+  unsigned attrib;
+  time_t   time_create;
+  time_t   time_access;
+  time_t   time_write;
+  _fsize_t size;
+  char             name[260];
+};
+
+struct _finddatai64_t
+{
+  unsigned attrib;
+  time_t time_create;
+  time_t time_access;
+  time_t time_write;
+  __int64 DECLSPEC_ALIGN(8) size;
+  char           name[260];
+};
+
+struct _finddata64_t
+{
+  unsigned attrib;
+  __time64_t time_create;
+  __time64_t time_access;
+  __time64_t time_write;
+  __int64 DECLSPEC_ALIGN(8) size;
+  char           name[260];
+};
+#endif /* _FINDDATA_T_DEFINED */
+
+#ifndef _WFINDDATA_T_DEFINED
+#define _WFINDDATA_T_DEFINED
+struct _wfinddata_t {
+  unsigned attrib;
+  time_t   time_create;
+  time_t   time_access;
+  time_t   time_write;
+  _fsize_t size;
+  wchar_t  name[260];
+};
+
+struct _wfinddatai64_t {
+  unsigned attrib;
+  time_t  time_create;
+  time_t  time_access;
+  time_t  time_write;
+  __int64 DECLSPEC_ALIGN(8) size;
+  wchar_t name[260];
+};
+#endif /* _WFINDDATA_T_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int         __cdecl _access(const char*,int);
+int         __cdecl _chmod(const char*,int);
+int         __cdecl _chsize(int,__msvcrt_ulong);
+int         __cdecl _close(int);
+int         __cdecl _commit(int);
+int         __cdecl _creat(const char*,int);
+int         __cdecl _dup(int);
+int         __cdecl _dup2(int,int);
+int         __cdecl _eof(int);
+__int64     __cdecl _filelengthi64(int);
+__msvcrt_long __cdecl _filelength(int);
+int         __cdecl _findclose(intptr_t);
+intptr_t    __cdecl _findfirst(const char*,struct _finddata_t*);
+intptr_t    __cdecl _findfirsti64(const char*, struct _finddatai64_t*);
+intptr_t    __cdecl _findfirst64(const char*, struct _finddata64_t*);
+int         __cdecl _findnext(intptr_t,struct _finddata_t*);
+int         __cdecl _findnexti64(intptr_t, struct _finddatai64_t*);
+int         __cdecl _findnext64(intptr_t, struct _finddata64_t*);
+intptr_t    __cdecl _get_osfhandle(int);
+int         __cdecl _isatty(int);
+int         __cdecl _locking(int,int,__msvcrt_long);
+__msvcrt_long __cdecl _lseek(int,__msvcrt_long,int);
+__int64     __cdecl _lseeki64(int,__int64,int);
+char*       __cdecl _mktemp(char*);
+int         __cdecl _mktemp_s(char*,size_t);
+int         __cdecl _open(const char*,int,...);
+int         __cdecl _open_osfhandle(intptr_t,int);
+int         __cdecl _pipe(int*,unsigned int,int);
+int         __cdecl _read(int,void*,unsigned int);
+int         __cdecl _setmode(int,int);
+int         __cdecl _sopen(const char*,int,int,...);
+__msvcrt_long __cdecl _tell(int);
+__int64     __cdecl _telli64(int);
+int         __cdecl _umask(int);
+int         __cdecl _unlink(const char*);
+int         __cdecl _write(int,const void*,unsigned int);
+
+int         __cdecl remove(const char*);
+int         __cdecl rename(const char*,const char*);
+
+#ifndef _WIO_DEFINED
+#define _WIO_DEFINED
+int         __cdecl _waccess(const wchar_t*,int);
+int         __cdecl _wchmod(const wchar_t*,int);
+int         __cdecl _wcreat(const wchar_t*,int);
+intptr_t    __cdecl _wfindfirst(const wchar_t*,struct _wfinddata_t*);
+intptr_t    __cdecl _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+int         __cdecl _wfindnext(intptr_t,struct _wfinddata_t*);
+int         __cdecl _wfindnexti64(intptr_t, struct _wfinddatai64_t*);
+wchar_t *   __cdecl _wmktemp(wchar_t*);
+int         __cdecl _wopen(const wchar_t*,int,...);
+int         __cdecl _wrename(const wchar_t*,const wchar_t*);
+int         __cdecl _wsopen(const wchar_t*,int,int,...);
+int         __cdecl _wunlink(const wchar_t*);
+#endif /* _WIO_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int access(const char* path, int mode) { return _access(path, mode); }
+static inline int chmod(const char* path, int mode) { return _chmod(path, mode); }
+static inline int chsize(int fd, __msvcrt_long size) { return _chsize(fd, size); }
+static inline int close(int fd) { return _close(fd); }
+static inline int creat(const char* path, int mode) { return _creat(path, mode); }
+static inline int dup(int od) { return _dup(od); }
+static inline int dup2(int od, int nd) { return _dup2(od, nd); }
+static inline int eof(int fd) { return _eof(fd); }
+static inline __msvcrt_long filelength(int fd) { return _filelength(fd); }
+static inline int isatty(int fd) { return _isatty(fd); }
+static inline int locking(int fd, int mode, __msvcrt_long size) { return _locking(fd, mode, size); }
+static inline __msvcrt_long lseek(int fd, __msvcrt_long off, int where) { return _lseek(fd, off, where); }
+static inline char* mktemp(char* pat) { return _mktemp(pat); }
+static inline int read(int fd, void* buf, unsigned int size) { return _read(fd, buf, size); }
+static inline int setmode(int fd, int mode) { return _setmode(fd, mode); }
+static inline __msvcrt_long tell(int fd) { return _tell(fd); }
+#ifndef _UMASK_DEFINED
+static inline int umask(int fd) { return _umask(fd); }
+#define _UMASK_DEFINED
+#endif
+#ifndef _UNLINK_DEFINED
+static inline int unlink(const char* path) { return _unlink(path); }
+#define _UNLINK_DEFINED
+#endif
+static inline int write(int fd, const void* buf, unsigned int size) { return _write(fd, buf, size); }
+
+#if defined(__GNUC__) && (__GNUC__ < 4)
+extern int __cdecl open(const char*,int,...) __attribute__((alias("_open")));
+extern int __cdecl sopen(const char*,int,int,...) __attribute__((alias("_sopen")));
+#else
+#define open _open
+#define sopen _sopen
+#endif /* __GNUC__ */
+
+#include <poppack.h>
+
+#endif /* __WINE_IO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h
new file mode 100644
index 0000000..d0f058b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h
@@ -0,0 +1,49 @@
+#ifndef __WINE_LIMITS_H
+#define __WINE_LIMITS_H
+
+#include <crtdefs.h>
+
+#define CHAR_BIT 8
+#define MB_LEN_MAX 2
+
+#define SCHAR_MIN (-0x80)
+#define SCHAR_MAX   0x7f
+#define UCHAR_MAX   0xff
+
+#ifdef __CHAR_UNSIGNED__
+# define CHAR_MIN 0
+# define CHAR_MAX UCHAR_MAX
+#else
+# define CHAR_MIN SCHAR_MIN
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+#define SHRT_MIN  (-0x8000)
+#define SHRT_MAX    0x7fff
+#define USHRT_MAX   0xffff
+
+#define INT_MIN   (-0x80000000)
+#define INT_MAX     0x7fffffff
+#define UINT_MAX    0xffffffff
+
+#define LONG_MIN  (-0x80000000L)
+#define LONG_MAX    0x7fffffffL
+#define ULONG_MAX   0xffffffffUL
+
+#define _I64_MAX    (((__int64)0x7fffffff << 32) | 0xffffffff)
+#define _I64_MIN    (-_I64_MAX-1)
+#define _UI64_MAX   (((unsigned __int64)0xffffffff << 32) | 0xffffffff)
+
+#define I64_MIN  _I64_MIN
+#define I64_MAX  _I64_MAX
+#define UI64_MAX _UI64_MAX
+
+#ifndef SIZE_MAX
+# ifdef _WIN64
+#  define SIZE_MAX UI64_MAX
+# else
+#  define SIZE_MAX UINT_MAX
+# endif
+#endif
+
+#endif /* __WINE_LIMITS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h
new file mode 100644
index 0000000..6cc35fe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h
@@ -0,0 +1,90 @@
+/*
+ * Locale definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LOCALE_H
+#define __WINE_LOCALE_H
+
+#include <crtdefs.h>
+
+#define LC_ALL                 0
+#define LC_COLLATE             1
+#define LC_CTYPE               2
+#define LC_MONETARY            3
+#define LC_NUMERIC             4
+#define LC_TIME                5
+#define LC_MIN                 LC_ALL
+#define LC_MAX                 LC_TIME
+
+#ifndef _LCONV_DEFINED
+#define _LCONV_DEFINED
+struct lconv
+{
+    char* decimal_point;
+    char* thousands_sep;
+    char* grouping;
+    char* int_curr_symbol;
+    char* currency_symbol;
+    char* mon_decimal_point;
+    char* mon_thousands_sep;
+    char* mon_grouping;
+    char* positive_sign;
+    char* negative_sign;
+    char int_frac_digits;
+    char frac_digits;
+    char p_cs_precedes;
+    char p_sep_by_space;
+    char n_cs_precedes;
+    char n_sep_by_space;
+    char p_sign_posn;
+    char n_sign_posn;
+};
+#endif /* _LCONV_DEFINED */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char*         __cdecl setlocale(int,const char*);
+struct lconv* __cdecl localeconv(void);
+int           __cdecl _configthreadlocale(int);
+_locale_t     __cdecl _get_current_locale(void);
+_locale_t     __cdecl _create_locale(int, const char*);
+void          __cdecl _free_locale(_locale_t);
+
+#ifndef _WLOCALE_DEFINED
+#define _WLOCALE_DEFINED
+wchar_t* __cdecl _wsetlocale(int,const wchar_t*);
+#endif /* _WLOCALE_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_LOCALE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h
new file mode 100644
index 0000000..a92f12b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h
@@ -0,0 +1,99 @@
+/*
+ * Heap definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MALLOC_H
+#define __WINE_MALLOC_H
+
+#include <crtdefs.h>
+
+/* heap function constants */
+#define _HEAPEMPTY    -1
+#define _HEAPOK       -2
+#define _HEAPBADBEGIN -3
+#define _HEAPBADNODE  -4
+#define _HEAPEND      -5
+#define _HEAPBADPTR   -6
+
+#define _FREEENTRY     0
+#define _USEDENTRY     1
+
+#ifndef _HEAPINFO_DEFINED
+#define _HEAPINFO_DEFINED
+typedef struct _heapinfo
+{
+  int*           _pentry;
+  size_t _size;
+  int            _useflag;
+} _HEAPINFO;
+#endif /* _HEAPINFO_DEFINED */
+
+#ifdef __i386__
+extern unsigned int* __cdecl __p__amblksiz(void);
+#define _amblksiz (*__p__amblksiz());
+#else
+extern unsigned int _amblksiz;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void*  __cdecl _expand(void*,size_t);
+int    __cdecl _heapadd(void*,size_t);
+int    __cdecl _heapchk(void);
+int    __cdecl _heapmin(void);
+int    __cdecl _heapset(unsigned int);
+size_t __cdecl _heapused(size_t*,size_t*);
+int    __cdecl _heapwalk(_HEAPINFO*);
+size_t __cdecl _msize(void*);
+
+void*  __cdecl calloc(size_t,size_t);
+void   __cdecl free(void*);
+void*  __cdecl malloc(size_t);
+void*  __cdecl realloc(void*,size_t);
+
+void   __cdecl _aligned_free(void*);
+void*  __cdecl _aligned_malloc(size_t,size_t);
+void*  __cdecl _aligned_offset_malloc(size_t,size_t,size_t);
+void*  __cdecl _aligned_realloc(void*,size_t,size_t);
+void*  __cdecl _aligned_offset_realloc(void*,size_t,size_t,size_t);
+
+size_t __cdecl _get_sbh_threshold(void);
+int    __cdecl _set_sbh_threshold(size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+# ifdef __GNUC__
+# define _alloca(x) __builtin_alloca((x))
+# define alloca(x) __builtin_alloca((x))
+# endif
+
+#endif /* __WINE_MALLOC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h
new file mode 100644
index 0000000..4d0655e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h
@@ -0,0 +1,174 @@
+/*
+ * Math functions.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Hans Leidekker.
+ * This file is in the public domain.
+ */
+
+#ifndef __WINE_MATH_H
+#define __WINE_MATH_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _DOMAIN         1       /* domain error in argument */
+#define _SING           2       /* singularity */
+#define _OVERFLOW       3       /* range overflow */
+#define _UNDERFLOW      4       /* range underflow */
+#define _TLOSS          5       /* total loss of precision */
+#define _PLOSS          6       /* partial loss of precision */
+
+#ifndef _EXCEPTION_DEFINED
+#define _EXCEPTION_DEFINED
+struct _exception
+{
+  int     type;
+  char    *name;
+  double  arg1;
+  double  arg2;
+  double  retval;
+};
+#endif /* _EXCEPTION_DEFINED */
+
+#ifndef _COMPLEX_DEFINED
+#define _COMPLEX_DEFINED
+struct _complex
+{
+  double x;      /* Real part */
+  double y;      /* Imaginary part */
+};
+#endif /* _COMPLEX_DEFINED */
+
+double __cdecl sin(double);
+double __cdecl cos(double);
+double __cdecl tan(double);
+double __cdecl sinh(double);
+double __cdecl cosh(double);
+double __cdecl tanh(double);
+double __cdecl asin(double);
+double __cdecl acos(double);
+double __cdecl atan(double);
+double __cdecl atan2(double, double);
+double __cdecl exp(double);
+double __cdecl log(double);
+double __cdecl log10(double);
+double __cdecl pow(double, double);
+double __cdecl sqrt(double);
+double __cdecl ceil(double);
+double __cdecl floor(double);
+double __cdecl fabs(double);
+double __cdecl ldexp(double, int);
+double __cdecl frexp(double, int*);
+double __cdecl modf(double, double*);
+double __cdecl fmod(double, double);
+
+double __cdecl hypot(double, double);
+double __cdecl j0(double);
+double __cdecl j1(double);
+double __cdecl jn(int, double);
+double __cdecl y0(double);
+double __cdecl y1(double);
+double __cdecl yn(int, double);
+
+#ifdef __x86_64__
+
+float __cdecl sinf(float);
+float __cdecl cosf(float);
+float __cdecl tanf(float);
+float __cdecl sinhf(float);
+float __cdecl coshf(float);
+float __cdecl tanhf(float);
+float __cdecl asinf(float);
+float __cdecl acosf(float);
+float __cdecl atanf(float);
+float __cdecl atan2f(float, float);
+float __cdecl expf(float);
+float __cdecl logf(float);
+float __cdecl log10f(float);
+float __cdecl powf(float, float);
+float __cdecl sqrtf(float);
+float __cdecl ceilf(float);
+float __cdecl floorf(float);
+float __cdecl fabsf(float);
+float __cdecl ldexpf(float, int);
+float __cdecl frexpf(float, int*);
+float __cdecl modff(float, float*);
+float __cdecl fmodf(float, float);
+
+#else
+
+#define sinf(x) ((float)sin((double)(x)))
+#define cosf(x) ((float)cos((double)(x)))
+#define tanf(x) ((float)tan((double)(x)))
+#define sinhf(x) ((float)sinh((double)(x)))
+#define coshf(x) ((float)cosh((double)(x)))
+#define tanhf(x) ((float)tanh((double)(x)))
+#define asinf(x) ((float)asin((double)(x)))
+#define acosf(x) ((float)acos((double)(x)))
+#define atanf(x) ((float)atan((double)(x)))
+#define atan2f(x,y) ((float)atan2((double)(x), (double)(y)))
+#define expf(x) ((float)exp((double)(x)))
+#define logf(x) ((float)log((double)(x)))
+#define log10f(x) ((float)log10((double)(x)))
+#define powf(x,y) ((float)pow((double)(x), (double)(y)))
+#define sqrtf(x) ((float)sqrt((double)(x)))
+#define ceilf(x) ((float)ceil((double)(x)))
+#define floorf(x) ((float)floor((double)(x)))
+#define frexpf(x) ((float)frexp((double)(x)))
+#define modff(x,y) ((float)modf((double)(x), (double*)(y)))
+#define fmodf(x,y) ((float)fmod((double)(x), (double)(y)))
+
+#endif
+
+#define fabsf(x) ((float)fabs((double)(x)))
+#define ldexpf(x,y) ((float)ldexp((double)(x),(y)))
+
+float __cdecl hypotf(float, float);
+
+int __cdecl _matherr(struct _exception*);
+double __cdecl _cabs(struct _complex);
+
+#ifndef HUGE_VAL
+#  if defined(__GNUC__) && (__GNUC__ >= 3)
+#    define HUGE_VAL    (__extension__ 0x1.0p2047)
+#  else
+static const union {
+    unsigned char __c[8];
+    double __d;
+} __huge_val = { { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } };
+#    define HUGE_VAL    (__huge_val.__d)
+#  endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#ifdef _USE_MATH_DEFINES
+#ifndef _MATH_DEFINES_DEFINED
+#define _MATH_DEFINES_DEFINED
+#define M_E         2.71828182845904523536
+#define M_LOG2E     1.44269504088896340736
+#define M_LOG10E    0.434294481903251827651
+#define M_LN2       0.693147180559945309417
+#define M_LN10      2.30258509299404568402
+#define M_PI        3.14159265358979323846
+#define M_PI_2      1.57079632679489661923
+#define M_PI_4      0.785398163397448309616
+#define M_1_PI      0.318309886183790671538
+#define M_2_PI      0.636619772367581343076
+#define M_2_SQRTPI  1.12837916709551257390
+#define M_SQRT2     1.41421356237309504880
+#define M_SQRT1_2   0.707106781186547524401
+#endif /* !_MATH_DEFINES_DEFINED */
+#endif /* _USE_MATH_DEFINES */
+
+#endif /* __WINE_MATH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h
new file mode 100644
index 0000000..fc48139
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h
@@ -0,0 +1,90 @@
+/*
+ * Multibyte char definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MBCTYPE_H
+#define __WINE_MBCTYPE_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __i386__
+unsigned char* __cdecl __p__mbctype(void);
+#define _mbctype                   (__p__mbctype())
+#else
+extern unsigned char MSVCRT_mbctype[];
+#endif
+
+#define _MS     0x01
+#define _MP     0x02
+#define _M1     0x04
+#define _M2     0x08
+
+#define _SBUP   0x10
+#define _SBLOW  0x20
+
+#define _MBC_SINGLE     0
+#define _MBC_LEAD       1
+#define _MBC_TRAIL      2
+#define _MBC_ILLEGAL    -1
+
+#define _KANJI_CP   932
+
+#define _MB_CP_SBCS     0
+#define _MB_CP_OEM      -2
+#define _MB_CP_ANSI     -3
+#define _MB_CP_LOCALE   -4
+
+int __cdecl _getmbcp(void);
+int __cdecl _ismbbalnum(unsigned int);
+int __cdecl _ismbbalpha(unsigned int);
+int __cdecl _ismbbgraph(unsigned int);
+int __cdecl _ismbbkalnum(unsigned int);
+int __cdecl _ismbbkana(unsigned int);
+int __cdecl _ismbbkprint(unsigned int);
+int __cdecl _ismbbkpunct(unsigned int);
+int __cdecl _ismbbprint(unsigned int);
+int __cdecl _ismbbpunct(unsigned int);
+int __cdecl _setmbcp(int);
+
+#ifndef _MBLEADTRAIL_DEFINED
+#define _MBLEADTRAIL_DEFINED
+int __cdecl _ismbblead(unsigned int);
+int __cdecl _ismbbtrail(unsigned int);
+int __cdecl _ismbslead(const unsigned char*,const unsigned char*);
+int __cdecl _ismbstrail(const unsigned char*,const unsigned char*);
+#endif /* _MBLEADTRAIL_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MBCTYPE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h
new file mode 100644
index 0000000..fd4a8e6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h
@@ -0,0 +1,132 @@
+/*
+ * Multibyte string definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MBSTRING_H
+#define __WINE_MBSTRING_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _NLSCMP_DEFINED
+#define _NLSCMPERROR               ((unsigned int)0x7fffffff)
+#define _NLSCMP_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int            __cdecl _ismbcalnum(unsigned int);
+int            __cdecl _ismbcalpha(unsigned int);
+int            __cdecl _ismbcdigit(unsigned int);
+int            __cdecl _ismbcgraph(unsigned int);
+int            __cdecl _ismbchira(unsigned int);
+int            __cdecl _ismbckata(unsigned int);
+int            __cdecl _ismbcl0(unsigned int);
+int            __cdecl _ismbcl1(unsigned int);
+int            __cdecl _ismbcl2(unsigned int);
+int            __cdecl _ismbclegal(unsigned int);
+int            __cdecl _ismbclower(unsigned int);
+int            __cdecl _ismbcprint(unsigned int);
+int            __cdecl _ismbcpunct(unsigned int);
+int            __cdecl _ismbcspace(unsigned int);
+int            __cdecl _ismbcsymbol(unsigned int);
+int            __cdecl _ismbcupper(unsigned int);
+unsigned int   __cdecl _mbbtombc(unsigned int);
+int            __cdecl _mbbtype(unsigned char,int);
+#define                _mbccmp(_cpc1,_cpc2) _mbsncmp((_cpc1),(_cpc2),1)
+void           __cdecl _mbccpy(unsigned char*,const unsigned char*);
+unsigned int   __cdecl _mbcjistojms(unsigned int);
+unsigned int   __cdecl _mbcjmstojis(unsigned int);
+size_t         __cdecl _mbclen(const unsigned char*);
+unsigned int   __cdecl _mbctohira(unsigned int);
+unsigned int   __cdecl _mbctokata(unsigned int);
+unsigned int   __cdecl _mbctolower(unsigned int);
+unsigned int   __cdecl _mbctombb(unsigned int);
+unsigned int   __cdecl _mbctoupper(unsigned int);
+int            __cdecl _mbsbtype(const unsigned char*,size_t);
+unsigned char* __cdecl _mbscat(unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbschr(const unsigned char*,unsigned int);
+int            __cdecl _mbscmp(const unsigned char*,const unsigned char*);
+int            __cdecl _mbscoll(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbscpy(unsigned char*,const unsigned char*);
+size_t         __cdecl _mbscspn(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsdec(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsdup(const unsigned char*);
+int            __cdecl _mbsicmp(const unsigned char*,const unsigned char*);
+int            __cdecl _mbsicoll(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsinc(const unsigned char*);
+size_t         __cdecl _mbslen(const unsigned char*);
+unsigned char* __cdecl _mbslwr(unsigned char*);
+unsigned char* __cdecl _mbsnbcat(unsigned char*,const unsigned char*,size_t);
+errno_t        __cdecl _mbsnbcat_s(unsigned char*,size_t,const unsigned char*,size_t);
+int            __cdecl _mbsnbcmp(const unsigned char*,const unsigned char*,size_t);
+int            __cdecl _mbsnbcoll(const unsigned char*,const unsigned char*,size_t);
+size_t         __cdecl _mbsnbcnt(const unsigned char*,size_t);
+unsigned char* __cdecl _mbsnbcpy(unsigned char*,const unsigned char*,size_t);
+int            __cdecl _mbsnbicmp(const unsigned char*,const unsigned char*,size_t);
+int            __cdecl _mbsnbicoll(const unsigned char*,const unsigned char*,size_t);
+unsigned char* __cdecl _mbsnbset(unsigned char*,unsigned int,size_t);
+unsigned char* __cdecl _mbsncat(unsigned char*,const unsigned char*, size_t);
+size_t         __cdecl _mbsnccnt(const unsigned char*,size_t);
+int            __cdecl _mbsncmp(const unsigned char*,const unsigned char*,size_t);
+int            __cdecl _mbsncoll(const unsigned char*,const unsigned char*,size_t);
+unsigned char* __cdecl _mbsncpy(unsigned char*,const unsigned char*,size_t);
+unsigned int   __cdecl _mbsnextc (const unsigned char*);
+int            __cdecl _mbsnicmp(const unsigned char*,const unsigned char*,size_t);
+int            __cdecl _mbsnicoll(const unsigned char*,const unsigned char*,size_t);
+unsigned char* __cdecl _mbsninc(const unsigned char*,size_t);
+unsigned char* __cdecl _mbsnset(unsigned char*,unsigned int,size_t);
+unsigned char* __cdecl _mbspbrk(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsrchr(const unsigned char*,unsigned int);
+unsigned char* __cdecl _mbsrev(unsigned char*);
+unsigned char* __cdecl _mbsset(unsigned char*,unsigned int);
+size_t         __cdecl _mbsspn(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsspnp(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsstr(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbstok(unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbstok_l(unsigned char*,const unsigned char*,_locale_t);
+unsigned char* __cdecl _mbsupr(unsigned char*);
+
+#ifndef _MBLEADTRAIL_DEFINED
+#define _MBLEADTRAIL_DEFINED
+int __cdecl _ismbblead(unsigned int);
+int __cdecl _ismbbtrail(unsigned int);
+int __cdecl _ismbslead(const unsigned char*,const unsigned char*);
+int __cdecl _ismbstrail(const unsigned char*,const unsigned char*);
+#endif /* _MBLEADTRAIL_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_MBSTRING_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h
new file mode 100644
index 0000000..ecf13aa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h
@@ -0,0 +1,37 @@
+/*
+ * Memory definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_MEMORY_H
+#define __WINE_MEMORY_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRT_MEMORY_DEFINED
+#define _CRT_MEMORY_DEFINED
+
+void*   __cdecl memchr(const void*,int,size_t);
+int     __cdecl memcmp(const void*,const void*,size_t);
+void*   __cdecl memcpy(void*,const void*,size_t);
+errno_t __cdecl memcpy_s(void*,size_t,const void*,size_t);
+void*   __cdecl memset(void*,int,size_t);
+void*   __cdecl _memccpy(void*,const void*,int,unsigned int);
+int     __cdecl _memicmp(const void*,const void*,unsigned int);
+
+static inline int memicmp(const void* s1, const void* s2, size_t len) { return _memicmp(s1, s2, len); }
+static inline void* memccpy(void *s1, const void *s2, int c, size_t n) { return _memccpy(s1, s2, c, n); }
+
+#endif /* _CRT_MEMORY_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MEMORY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h
new file mode 100644
index 0000000..f9ab2a4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h
@@ -0,0 +1,126 @@
+/*
+ * Process definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_PROCESS_H
+#define __WINE_PROCESS_H
+
+#include <crtdefs.h>
+
+/* Process creation flags */
+#define _P_WAIT    0
+#define _P_NOWAIT  1
+#define _P_OVERLAY 2
+#define _P_NOWAITO 3
+#define _P_DETACH  4
+
+#define _WAIT_CHILD      0
+#define _WAIT_GRANDCHILD 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (__cdecl *_beginthread_start_routine_t)(void *);
+typedef unsigned int (__stdcall *_beginthreadex_start_routine_t)(void *);
+
+uintptr_t __cdecl _beginthread(_beginthread_start_routine_t,unsigned int,void*);
+uintptr_t __cdecl _beginthreadex(void*,unsigned int,_beginthreadex_start_routine_t,void*,unsigned int,unsigned int*);
+intptr_t  __cdecl _cwait(int*,intptr_t,int);
+void      __cdecl _endthread(void);
+void      __cdecl _endthreadex(unsigned int);
+intptr_t  __cdecl _execl(const char*,const char*,...);
+intptr_t  __cdecl _execle(const char*,const char*,...);
+intptr_t  __cdecl _execlp(const char*,const char*,...);
+intptr_t  __cdecl _execlpe(const char*,const char*,...);
+intptr_t  __cdecl _execv(const char*,const char* const *);
+intptr_t  __cdecl _execve(const char*,const char* const *,const char* const *);
+intptr_t  __cdecl _execvp(const char*,const char* const *);
+intptr_t  __cdecl _execvpe(const char*,const char* const *,const char* const *);
+int       __cdecl _getpid(void);
+intptr_t  __cdecl _spawnl(int,const char*,const char*,...);
+intptr_t  __cdecl _spawnle(int,const char*,const char*,...);
+intptr_t  __cdecl _spawnlp(int,const char*,const char*,...);
+intptr_t  __cdecl _spawnlpe(int,const char*,const char*,...);
+intptr_t  __cdecl _spawnv(int,const char*,const char* const *);
+intptr_t  __cdecl _spawnve(int,const char*,const char* const *,const char* const *);
+intptr_t  __cdecl _spawnvp(int,const char*,const char* const *);
+intptr_t  __cdecl _spawnvpe(int,const char*,const char* const *,const char* const *);
+
+void      __cdecl _c_exit(void);
+void      __cdecl _cexit(void);
+void      __cdecl _exit(int);
+void      __cdecl abort(void);
+void      __cdecl exit(int);
+int       __cdecl system(const char*);
+
+#ifndef _WPROCESS_DEFINED
+#define _WPROCESS_DEFINED
+intptr_t __cdecl _wexecl(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexecle(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexeclp(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexeclpe(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexecv(const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wexecve(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+intptr_t __cdecl _wexecvp(const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wexecvpe(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+intptr_t __cdecl _wspawnl(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnle(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnlp(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnlpe(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnv(int,const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wspawnve(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+intptr_t __cdecl _wspawnvp(int,const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wspawnvpe(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int      __cdecl _wsystem(const wchar_t*);
+#endif /* _WPROCESS_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define P_WAIT          _P_WAIT
+#define P_NOWAIT        _P_NOWAIT
+#define P_OVERLAY       _P_OVERLAY
+#define P_NOWAITO       _P_NOWAITO
+#define P_DETACH        _P_DETACH
+
+#define WAIT_CHILD      _WAIT_CHILD
+#define WAIT_GRANDCHILD _WAIT_GRANDCHILD
+
+static inline intptr_t cwait(int *status, intptr_t pid, int action) { return _cwait(status, pid, action); }
+static inline int getpid(void) { return _getpid(); }
+static inline intptr_t execv(const char* name, const char* const* argv) { return _execv(name, argv); }
+static inline intptr_t execve(const char* name, const char* const* argv, const char* const* envv) { return _execve(name, argv, envv); }
+static inline intptr_t execvp(const char* name, const char* const* argv) { return _execvp(name, argv); }
+static inline intptr_t execvpe(const char* name, const char* const* argv, const char* const* envv) { return _execvpe(name, argv, envv); }
+static inline intptr_t spawnv(int flags, const char* name, const char* const* argv) { return _spawnv(flags, name, argv); }
+static inline intptr_t spawnve(int flags, const char* name, const char* const* argv, const char* const* envv) { return _spawnve(flags, name, argv, envv); }
+static inline intptr_t spawnvp(int flags, const char* name, const char* const* argv) { return _spawnvp(flags, name, argv); }
+static inline intptr_t spawnvpe(int flags, const char* name, const char* const* argv, const char* const* envv) { return _spawnvpe(flags, name, argv, envv); }
+
+#if defined(__GNUC__) && (__GNUC__ < 4)
+extern intptr_t __cdecl execl(const char*,const char*,...) __attribute__((alias("_execl")));
+extern intptr_t __cdecl execle(const char*,const char*,...) __attribute__((alias("_execle")));
+extern intptr_t __cdecl execlp(const char*,const char*,...) __attribute__((alias("_execlp")));
+extern intptr_t __cdecl execlpe(const char*,const char*,...) __attribute__((alias("_execlpe")));
+extern intptr_t __cdecl spawnl(int,const char*,const char*,...) __attribute__((alias("_spawnl")));
+extern intptr_t __cdecl spawnle(int,const char*,const char*,...) __attribute__((alias("_spawnle")));
+extern intptr_t __cdecl spawnlp(int,const char*,const char*,...) __attribute__((alias("_spawnlp")));
+extern intptr_t __cdecl spawnlpe(int,const char*,const char*,...) __attribute__((alias("_spawnlpe")));
+#else
+#define execl    _execl
+#define execle   _execle
+#define execlp   _execlp
+#define execlpe  _execlpe
+#define spawnl   _spawnl
+#define spawnle  _spawnle
+#define spawnlp  _spawnlp
+#define spawnlpe _spawnlpe
+#endif  /* __GNUC__ */
+
+#endif /* __WINE_PROCESS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h
new file mode 100644
index 0000000..c21e6de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h
@@ -0,0 +1,52 @@
+/*
+ * Heap definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SEARCH_H
+#define __WINE_SEARCH_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* __cdecl _lfind(const void*,const void*,unsigned int*,unsigned int,int (*)(const void*,const void*));
+void* __cdecl _lsearch(const void*,void*,unsigned int*,unsigned int,int (*)(const void*,const void*));
+void* __cdecl bsearch(const void*,const void*,size_t,size_t,int (*)(const void*,const void*));
+void  __cdecl qsort(void*,size_t,size_t,int (*)(const void*,const void*));
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline void* lfind(const void* match, const void* start, unsigned int* array_size, unsigned int elem_size, int (*cf)(const void*,const void*)) { return _lfind(match, start, array_size, elem_size, cf); }
+static inline void* lsearch(const void* match, void* start, unsigned int* array_size, unsigned int elem_size, int (*cf)(const void*,const void*) ) { return _lsearch(match, start, array_size, elem_size, cf); }
+
+#endif /* __WINE_SEARCH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h
new file mode 100644
index 0000000..7595f88
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h
@@ -0,0 +1,140 @@
+/*
+ * Setjmp/Longjmp definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SETJMP_H
+#define __WINE_SETJMP_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifdef __i386__
+
+typedef struct __JUMP_BUFFER
+{
+    unsigned long Ebp;
+    unsigned long Ebx;
+    unsigned long Edi;
+    unsigned long Esi;
+    unsigned long Esp;
+    unsigned long Eip;
+    unsigned long Registration;
+    unsigned long TryLevel;
+    /* Start of new struct members */
+    unsigned long Cookie;
+    unsigned long UnwindFunc;
+    unsigned long UnwindData[6];
+} _JUMP_BUFFER;
+
+#define _JBLEN 16
+#define _JBTYPE int
+
+#elif defined(__x86_64__)
+
+typedef struct _SETJMP_FLOAT128
+{
+    unsigned __int64 DECLSPEC_ALIGN(16) Part[2];
+} SETJMP_FLOAT128;
+
+typedef struct _JUMP_BUFFER
+{
+    unsigned __int64 Frame;
+    unsigned __int64 Rbx;
+    unsigned __int64 Rsp;
+    unsigned __int64 Rbp;
+    unsigned __int64 Rsi;
+    unsigned __int64 Rdi;
+    unsigned __int64 R12;
+    unsigned __int64 R13;
+    unsigned __int64 R14;
+    unsigned __int64 R15;
+    unsigned __int64 Rip;
+    unsigned __int64 Spare;
+    SETJMP_FLOAT128  Xmm6;
+    SETJMP_FLOAT128  Xmm7;
+    SETJMP_FLOAT128  Xmm8;
+    SETJMP_FLOAT128  Xmm9;
+    SETJMP_FLOAT128  Xmm10;
+    SETJMP_FLOAT128  Xmm11;
+    SETJMP_FLOAT128  Xmm12;
+    SETJMP_FLOAT128  Xmm13;
+    SETJMP_FLOAT128  Xmm14;
+    SETJMP_FLOAT128  Xmm15;
+} _JUMP_BUFFER;
+
+#define _JBLEN  16
+typedef SETJMP_FLOAT128 _JBTYPE;
+
+#elif defined(__arm__)
+
+typedef struct _JUMP_BUFFER
+{
+    unsigned long Frame;
+    unsigned long R4;
+    unsigned long R5;
+    unsigned long R6;
+    unsigned long R7;
+    unsigned long R8;
+    unsigned long R9;
+    unsigned long R10;
+    unsigned long R11;
+    unsigned long Sp;
+    unsigned long Pc;
+    unsigned long Fpscr;
+    unsigned long long D[8];
+} _JUMP_BUFFER;
+
+#define _JBLEN  28
+#define _JBTYPE int
+
+#else
+
+#define _JBLEN 1
+#define _JBTYPE int
+
+#endif
+
+typedef _JBTYPE jmp_buf[_JBLEN];
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _setjmp(jmp_buf);
+void __cdecl longjmp(jmp_buf,int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define setjmp _setjmp
+
+#include <poppack.h>
+
+#endif /* __WINE_SETJMP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h
new file mode 100644
index 0000000..3813e76
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h
@@ -0,0 +1,42 @@
+/*
+ * share.h
+ *
+ * Constants for file sharing functions.
+ *
+ * Derived from the Mingw32 header written by Colin Peters.
+ * Modified for Wine use by Bill Medland
+ * This file is in the public domain.
+ *
+ * Original header contained the following
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WINE_SHARE_H
+#define __WINE_SHARE_H
+#ifndef __WINE_USE_MSVCRT
+#define __WINE_USE_MSVCRT
+#endif
+
+#define	SH_COMPAT	0x00	/* Compatibility */
+#define	SH_DENYRW	0x10	/* Deny read/write */
+#define	SH_DENYWR	0x20	/* Deny write */
+#define	SH_DENYRD	0x30	/* Deny read */
+#define	SH_DENYNO	0x40	/* Deny nothing */
+
+#define _SH_COMPAT SH_COMPAT
+#define _SH_DENYRW SH_DENYRW
+#define _SH_DENYWR SH_DENYWR
+#define _SH_DENYRD SH_DENYRD
+#define _SH_DENYNO SH_DENYNO
+
+#endif	/* __WINE_SHARE_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h
new file mode 100644
index 0000000..7a3ffa3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h
@@ -0,0 +1,63 @@
+/*
+ * Signal definitions
+ *
+ * Copyright 2005 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_SIGNAL_H
+#define _WINE_SIGNAL_H
+
+#include <crtdefs.h>
+
+#define SIGINT   2
+#define SIGILL   4
+#define SIGFPE   8
+#define SIGSEGV  11
+#define SIGTERM  15
+#define SIGBREAK 21
+#define SIGABRT  22
+
+#define NSIG     (SIGABRT + 1)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (__cdecl *__sighandler_t)(int);
+
+#define SIG_DFL ((__sighandler_t)0)
+#define SIG_IGN ((__sighandler_t)1)
+#define SIG_ERR ((__sighandler_t)-1)
+
+void** __cdecl __pxcptinfoptrs(void);
+__sighandler_t __cdecl signal(int sig, __sighandler_t func);
+int __cdecl raise(int sig);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINE_SIGNAL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h
new file mode 100644
index 0000000..b229cc6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STDDEF_H
+#define __WINE_STDDEF_H
+
+#include <crtdefs.h>
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void *)0)
+#endif
+#endif
+
+#ifdef _WIN64
+#define offsetof(s,m)       (size_t)((ptrdiff_t)&(((s*)NULL)->m))
+#else
+#define offsetof(s,m)       (size_t)&(((s*)NULL)->m)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+__msvcrt_ulong __cdecl __threadid(void);
+__msvcrt_ulong __cdecl __threadhandle(void);
+#define _threadid    (__threadid())
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_STDDEF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h
new file mode 100644
index 0000000..737003d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h
@@ -0,0 +1,272 @@
+/*
+ * Standard I/O definitions.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_STDIO_H
+#define __WINE_STDIO_H
+
+#include <crtdefs.h>
+
+#ifndef RC_INVOKED
+#include <stdarg.h>
+#endif
+
+#include <pshpack8.h>
+
+/* file._flag flags */
+#define _IOREAD          0x0001
+#define _IOWRT           0x0002
+#define _IOMYBUF         0x0008
+#define _IOEOF           0x0010
+#define _IOERR           0x0020
+#define _IOSTRG          0x0040
+#define _IORW            0x0080
+
+#ifndef NULL
+#ifdef  __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void *)0)
+#endif
+#endif
+
+#define STDIN_FILENO  0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+/* more file._flag flags, but these conflict with Unix */
+#define _IOFBF    0x0000
+#define _IONBF    0x0004
+#define _IOLBF    0x0040
+
+#define EOF       (-1)
+#define FILENAME_MAX 260
+#define TMP_MAX   0x7fff
+#define FOPEN_MAX 20
+#define L_tmpnam  260
+
+#define BUFSIZ    512
+
+#ifndef SEEK_SET
+#define SEEK_SET  0
+#define SEEK_CUR  1
+#define SEEK_END  2
+#endif
+
+#ifndef _FILE_DEFINED
+#define _FILE_DEFINED
+typedef struct _iobuf
+{
+  char* _ptr;
+  int   _cnt;
+  char* _base;
+  int   _flag;
+  int   _file;
+  int   _charbuf;
+  int   _bufsiz;
+  char* _tmpfname;
+} FILE;
+#endif  /* _FILE_DEFINED */
+
+#ifndef _FPOS_T_DEFINED
+typedef __int64 DECLSPEC_ALIGN(8) fpos_t;
+#define _FPOS_T_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _STDIO_DEFINED
+# ifdef __i386__
+FILE* __cdecl __p__iob(void);
+#  define _iob (__p__iob())
+# else
+FILE* __cdecl __iob_func(void);
+#  define _iob (__iob_func())
+# endif
+#endif /* _STDIO_DEFINED */
+
+#define stdin              (_iob+STDIN_FILENO)
+#define stdout             (_iob+STDOUT_FILENO)
+#define stderr             (_iob+STDERR_FILENO)
+
+/* return value for _get_output_format */
+#define _TWO_DIGIT_EXPONENT 0x1
+
+#ifndef _STDIO_DEFINED
+#define _STDIO_DEFINED
+int    __cdecl _fcloseall(void);
+FILE*  __cdecl _fdopen(int,const char*);
+int    __cdecl _fgetchar(void);
+int    __cdecl _filbuf(FILE*);
+int    __cdecl _fileno(FILE*);
+int    __cdecl _flsbuf(int,FILE*);
+int    __cdecl _flushall(void);
+int    __cdecl _fputchar(int);
+FILE*  __cdecl _fsopen(const char*,const char*,int);
+int    __cdecl _get_printf_count_output(void);
+int    __cdecl _getmaxstdio(void);
+int    __cdecl _getw(FILE*);
+int    __cdecl _pclose(FILE*);
+FILE*  __cdecl _popen(const char*,const char*);
+int    __cdecl _putw(int,FILE*);
+int    __cdecl _rmtmp(void);
+int    __cdecl _set_printf_count_output(int);
+int    __cdecl _setmaxstdio(int);
+int    __cdecl _snprintf(char*,size_t,const char*,...);
+int    __cdecl _snprintf_s(char*,size_t,size_t,const char*,...);
+char*  __cdecl _tempnam(const char*,const char*);
+int    __cdecl _unlink(const char*);
+int    __cdecl _scprintf(const char*,...);
+int    __cdecl _vscprintf(const char*,__ms_va_list);
+int    __cdecl _vsnprintf(char*,size_t,const char*,__ms_va_list);
+int    __cdecl _vsnprintf_s(char*,size_t,size_t,const char*,__ms_va_list);
+int    __cdecl _vsprintf_p_l(char*,size_t,const char*,_locale_t,__ms_va_list);
+
+void   __cdecl clearerr(FILE*);
+int    __cdecl fclose(FILE*);
+int    __cdecl feof(FILE*);
+int    __cdecl ferror(FILE*);
+int    __cdecl fflush(FILE*);
+int    __cdecl fgetc(FILE*);
+int    __cdecl fgetpos(FILE*,fpos_t*);
+char*  __cdecl fgets(char*,int,FILE*);
+FILE*  __cdecl fopen(const char*,const char*);
+errno_t __cdecl fopen_s(FILE**,const char*,const char*);
+int    __cdecl fprintf(FILE*,const char*,...);
+int    __cdecl fprintf_s(FILE*,const char*,...);
+int    __cdecl fputc(int,FILE*);
+int    __cdecl fputs(const char*,FILE*);
+size_t __cdecl fread(void*,size_t,size_t,FILE*);
+FILE*  __cdecl freopen(const char*,const char*,FILE*);
+int    __cdecl fscanf(FILE*,const char*,...);
+int    __cdecl fscanf_s(FILE*,const char*,...);
+int    __cdecl fseek(FILE*,__msvcrt_long,int);
+int    __cdecl _fseeki64(FILE*,__int64,int);
+int    __cdecl fsetpos(FILE*,fpos_t*);
+__msvcrt_long __cdecl ftell(FILE*);
+__int64 __cdecl _ftelli64(FILE*);
+size_t __cdecl fwrite(const void*,size_t,size_t,FILE*);
+int    __cdecl getc(FILE*);
+int    __cdecl getchar(void);
+char*  __cdecl gets(char*);
+void   __cdecl perror(const char*);
+int    __cdecl printf(const char*,...);
+int    __cdecl printf_s(const char*,...);
+int    __cdecl putc(int,FILE*);
+int    __cdecl putchar(int);
+int    __cdecl puts(const char*);
+int    __cdecl remove(const char*);
+int    __cdecl rename(const char*,const char*);
+void   __cdecl rewind(FILE*);
+int    __cdecl scanf(const char*,...);
+int    __cdecl scanf_s(const char*,...);
+void   __cdecl setbuf(FILE*,char*);
+int    __cdecl setvbuf(FILE*,char*,int,size_t);
+int    __cdecl sprintf(char*,const char*,...);
+int    __cdecl sprintf_s(char*,size_t,const char*,...);
+int    __cdecl _scprintf(const char *, ...);
+int    __cdecl sscanf(const char*,const char*,...);
+int    __cdecl sscanf_s(const char*,const char*,...);
+FILE*  __cdecl tmpfile(void);
+char*  __cdecl tmpnam(char*);
+int    __cdecl ungetc(int,FILE*);
+int    __cdecl vfprintf(FILE*,const char*,__ms_va_list);
+int    __cdecl vfprintf_s(FILE*,const char*,__ms_va_list);
+int    __cdecl vprintf(const char*,__ms_va_list);
+int    __cdecl vprintf_s(const char*,__ms_va_list);
+int    __cdecl vsprintf(char*,const char*,__ms_va_list);
+int    __cdecl vsprintf_s(char*,size_t,const char*,__ms_va_list);
+unsigned int __cdecl _get_output_format(void);
+unsigned int __cdecl _set_output_format(void);
+
+#ifndef _WSTDIO_DEFINED
+#define _WSTDIO_DEFINED
+wint_t   __cdecl _fgetwchar(void);
+wint_t   __cdecl _fputwchar(wint_t);
+wchar_t* __cdecl _getws(wchar_t*);
+int      __cdecl _putws(const wchar_t*);
+int      __cdecl _snwprintf(wchar_t*,size_t,const wchar_t*,...);
+int      __cdecl _snwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,...);
+int      __cdecl _scwprintf(const wchar_t*,...);
+int      __cdecl _vscwprintf(const wchar_t*,__ms_va_list);
+int      __cdecl _vscwprintf_p_l(const wchar_t*,_locale_t,__ms_va_list);
+int      __cdecl _vsnwprintf(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int      __cdecl _vsnwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,__ms_va_list);
+int      __cdecl _vswprintf_p_l(wchar_t*,size_t,const wchar_t*,_locale_t,__ms_va_list);
+FILE*    __cdecl _wfdopen(int,const wchar_t*);
+FILE*    __cdecl _wfopen(const wchar_t*,const wchar_t*);
+errno_t  __cdecl _wfopen_s(FILE**,const wchar_t*,const wchar_t*);
+FILE*    __cdecl _wfreopen(const wchar_t*,const wchar_t*,FILE*);
+FILE*    __cdecl _wfsopen(const wchar_t*,const wchar_t*,int);
+void     __cdecl _wperror(const wchar_t*);
+FILE*    __cdecl _wpopen(const wchar_t*,const wchar_t*);
+int      __cdecl _wremove(const wchar_t*);
+wchar_t* __cdecl _wtempnam(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl _wtmpnam(wchar_t*);
+
+wint_t   __cdecl fgetwc(FILE*);
+wchar_t* __cdecl fgetws(wchar_t*,int,FILE*);
+wint_t   __cdecl fputwc(wint_t,FILE*);
+int      __cdecl fputws(const wchar_t*,FILE*);
+int      __cdecl fwprintf(FILE*,const wchar_t*,...);
+int      __cdecl fwprintf_s(FILE*,const wchar_t*,...);
+int      __cdecl fputws(const wchar_t*,FILE*);
+int      __cdecl fwscanf(FILE*,const wchar_t*,...);
+int      __cdecl fwscanf_s(FILE*,const wchar_t*,...);
+wint_t   __cdecl getwc(FILE*);
+wint_t   __cdecl getwchar(void);
+wchar_t* __cdecl getws(wchar_t*);
+wint_t   __cdecl putwc(wint_t,FILE*);
+wint_t   __cdecl putwchar(wint_t);
+int      __cdecl putws(const wchar_t*);
+int      __cdecl swprintf(wchar_t*,const wchar_t*,...);
+int      __cdecl swprintf_s(wchar_t*,size_t,const wchar_t*,...);
+int      __cdecl swscanf(const wchar_t*,const wchar_t*,...);
+int      __cdecl swscanf_s(const wchar_t*,const wchar_t*,...);
+wint_t   __cdecl ungetwc(wint_t,FILE*);
+int      __cdecl vfwprintf(FILE*,const wchar_t*,__ms_va_list);
+int      __cdecl vfwprintf_s(FILE*,const wchar_t*,__ms_va_list);
+int      __cdecl vswprintf(wchar_t*,const wchar_t*,__ms_va_list);
+int      __cdecl vswprintf_s(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int      __cdecl vwprintf(const wchar_t*,__ms_va_list);
+int      __cdecl vwprintf_s(const wchar_t*,__ms_va_list);
+int      __cdecl wprintf(const wchar_t*,...);
+int      __cdecl wprintf_s(const wchar_t*,...);
+int      __cdecl wscanf(const wchar_t*,...);
+int      __cdecl wscanf_s(const wchar_t*,...);
+#endif /* _WSTDIO_DEFINED */
+
+#endif /* _STDIO_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline FILE* fdopen(int fd, const char *mode) { return _fdopen(fd, mode); }
+static inline int fgetchar(void) { return _fgetchar(); }
+static inline int fileno(FILE* file) { return _fileno(file); }
+static inline int fputchar(int c) { return _fputchar(c); }
+static inline int pclose(FILE* file) { return _pclose(file); }
+static inline FILE* popen(const char* command, const char* mode) { return _popen(command, mode); }
+static inline char* tempnam(const char *dir, const char *prefix) { return _tempnam(dir, prefix); }
+#ifndef _UNLINK_DEFINED
+static inline int unlink(const char* path) { return _unlink(path); }
+#define _UNLINK_DEFINED
+#endif
+static inline int vsnprintf(char *buffer, size_t size, const char *format, __ms_va_list args) { return _vsnprintf(buffer,size,format,args); }
+
+static inline wint_t fgetwchar(void) { return _fgetwchar(); }
+static inline wint_t fputwchar(wint_t wc) { return _fputwchar(wc); }
+static inline int getw(FILE* file) { return _getw(file); }
+static inline int putw(int val, FILE* file) { return _putw(val, file); }
+static inline FILE* wpopen(const wchar_t* command,const wchar_t* mode) { return _wpopen(command, mode); }
+
+#include <poppack.h>
+
+#endif /* __WINE_STDIO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h
new file mode 100644
index 0000000..e88ffa3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h
@@ -0,0 +1,301 @@
+/*
+ * Standard library definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_STDLIB_H
+#define __WINE_STDLIB_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void*)0)
+#endif
+#endif
+
+typedef struct
+{
+    float f;
+} _CRT_FLOAT;
+
+typedef struct
+{
+    double x;
+} _CRT_DOUBLE;
+
+typedef struct
+{
+    unsigned char ld[10];
+} _LDOUBLE;
+
+#define EXIT_SUCCESS        0
+#define EXIT_FAILURE        -1
+#define RAND_MAX            0x7FFF
+
+#ifndef _MAX_PATH
+#define _MAX_DRIVE          3
+#define _MAX_FNAME          256
+#define _MAX_DIR            _MAX_FNAME
+#define _MAX_EXT            _MAX_FNAME
+#define _MAX_PATH           260
+#endif
+
+/* Make the secure string functions (names end in "_s") truncate their output */
+#define _TRUNCATE  ((size_t)-1)
+
+typedef struct _div_t {
+    int quot;
+    int rem;
+} div_t;
+
+typedef struct _ldiv_t {
+    __msvcrt_long quot;
+    __msvcrt_long rem;
+} ldiv_t;
+
+#define __max(a,b) (((a) > (b)) ? (a) : (b))
+#define __min(a,b) (((a) < (b)) ? (a) : (b))
+#ifndef __cplusplus
+#define max(a,b)   (((a) > (b)) ? (a) : (b))
+#define min(a,b)   (((a) < (b)) ? (a) : (b))
+#endif
+
+/* _set_error_mode() constants */
+#define _OUT_TO_DEFAULT      0
+#define _OUT_TO_STDERR       1
+#define _OUT_TO_MSGBOX       2
+#define _REPORT_ERRMODE      3
+
+/* _set_abort_behavior codes */
+#define _WRITE_ABORT_MSG     1
+#define _CALL_REPORTFAULT    2
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __i386__
+
+extern unsigned int* __cdecl __p__osver(void);
+#define _osver             (*__p__osver())
+extern unsigned int* __cdecl __p__winver(void);
+#define _winver            (*__p__winver())
+extern unsigned int* __cdecl __p__winmajor(void);
+#define _winmajor          (*__p__winmajor())
+extern unsigned int* __cdecl __p__winminor(void);
+#define _winminor          (*__p__winminor())
+extern int*          __cdecl __p___argc(void);
+#define __argc             (*__p___argc())
+extern char***       __cdecl __p___argv(void);
+#define __argv             (*__p___argv())
+extern wchar_t***    __cdecl __p___wargv(void);
+#define __wargv            (*__p___wargv())
+extern char***       __cdecl __p__environ(void);
+#define _environ           (*__p__environ())
+extern wchar_t***    __cdecl __p__wenviron(void);
+#define _wenviron          (*__p__wenviron())
+extern unsigned int* __cdecl __p__fmode(void);
+#define _fmode             (*__p__fmode())
+
+#else  /* __i386__ */
+
+extern unsigned int _osver;
+extern unsigned int _winver;
+extern unsigned int _winmajor;
+extern unsigned int _winminor;
+extern int __argc;
+extern char **__argv;
+extern wchar_t **__wargv;
+extern char **_environ;
+extern wchar_t **_wenviron;
+extern unsigned int _fmode;
+
+#endif  /* __i386__ */
+
+extern int*           __cdecl ___mb_cur_max_func(void);
+#define __mb_cur_max        (*___mb_cur_max_func())
+extern __msvcrt_ulong* __cdecl __doserrno(void);
+#define _doserrno           (*__doserrno())
+extern int*           __cdecl _errno(void);
+#define errno               (*_errno())
+
+/* FIXME: We need functions to access these:
+ * int _sys_nerr;
+ * char** _sys_errlist;
+ */
+
+errno_t       __cdecl _get_doserrno(int*);
+errno_t       __cdecl _get_errno(int*);
+errno_t       __cdecl _set_doserrno(int);
+errno_t       __cdecl _set_errno(int);
+
+typedef int (__cdecl *_onexit_t)(void);
+
+
+int           __cdecl _atodbl(_CRT_DOUBLE*,char*);
+int           __cdecl _atodbl_l(_CRT_DOUBLE*,char*,_locale_t);
+int           __cdecl _atoflt(_CRT_FLOAT*,char*);
+int           __cdecl _atoflt_l(_CRT_FLOAT*,char*,_locale_t);
+__int64       __cdecl _atoi64(const char*);
+long double   __cdecl _atold(const char*);
+int           __cdecl _atoldbl(_LDOUBLE*,char*);
+void          __cdecl _beep(unsigned int,unsigned int);
+char*         __cdecl _ecvt(double,int,int*,int*);
+char*         __cdecl _fcvt(double,int,int*,int*);
+char*         __cdecl _fullpath(char*,const char*,size_t);
+char*         __cdecl _gcvt(double,int,char*);
+char*         __cdecl _i64toa(__int64,char*,int);
+char*         __cdecl _itoa(int,char*,int);
+errno_t       __cdecl _itoa_s(int,char*,size_t,int);
+char*         __cdecl _ltoa(__msvcrt_long,char*,int);
+__msvcrt_ulong __cdecl _lrotl(__msvcrt_ulong,int);
+__msvcrt_ulong __cdecl _lrotr(__msvcrt_ulong,int);
+void          __cdecl _makepath(char*,const char*,const char*,const char*,const char*);
+int           __cdecl _makepath_s(char*,size_t,const char*,const char*,const char*,const char*);
+size_t        __cdecl _mbstrlen(const char*);
+_onexit_t     __cdecl _onexit(_onexit_t);
+int           __cdecl _putenv(const char*);
+unsigned int  __cdecl _rotl(unsigned int,int);
+unsigned int  __cdecl _rotr(unsigned int,int);
+void          __cdecl _searchenv(const char*,const char*,char*);
+int           __cdecl _set_error_mode(int);
+void          __cdecl _seterrormode(int);
+void          __cdecl _sleep(__msvcrt_ulong);
+void          __cdecl _splitpath(const char*,char*,char*,char*,char*);
+long double   __cdecl _strtold(const char*,char**);
+void          __cdecl _swab(char*,char*,int);
+char*         __cdecl _ui64toa(unsigned __int64,char*,int);
+errno_t       __cdecl _ui64toa_s(unsigned __int64,char*,size_t,int);
+char*         __cdecl _ultoa(__msvcrt_ulong,char*,int);
+errno_t       __cdecl _ultoa_s(__msvcrt_ulong,char*,size_t,int);
+
+void          __cdecl _exit(int);
+void          __cdecl abort(void);
+int           __cdecl abs(int);
+int           __cdecl atexit(void (*)(void));
+double        __cdecl atof(const char*);
+int           __cdecl atoi(const char*);
+int           __cdecl _atoi_l(const char*,_locale_t);
+__msvcrt_long __cdecl atol(const char*);
+void*         __cdecl calloc(size_t,size_t);
+#ifndef __i386__
+div_t  __cdecl div(int,int);
+ldiv_t __cdecl ldiv(__msvcrt_long,__msvcrt_long);
+#endif
+void          __cdecl exit(int);
+void          __cdecl free(void*);
+char*         __cdecl getenv(const char*);
+__msvcrt_long __cdecl labs(__msvcrt_long);
+void*         __cdecl malloc(size_t);
+int           __cdecl mblen(const char*,size_t);
+void          __cdecl perror(const char*);
+int           __cdecl rand(void);
+errno_t       __cdecl rand_s(unsigned int*);
+void*         __cdecl realloc(void*,size_t);
+void          __cdecl srand(unsigned int);
+double        __cdecl strtod(const char*,char**);
+__msvcrt_long __cdecl strtol(const char*,char**,int);
+__msvcrt_ulong __cdecl strtoul(const char*,char**,int);
+__int64       __cdecl _strtoi64(const char*,char**,int);
+__int64       __cdecl _strtoi64_l(const char*,char**,int,_locale_t);
+unsigned __int64 __cdecl _strtoui64(const char*,char**,int);
+unsigned __int64 __cdecl _strtoui64_l(const char*,char**,int,_locale_t);
+int           __cdecl system(const char*);
+void*         __cdecl bsearch(const void*,const void*,size_t,size_t,int (*)(const void*,const void*));
+void          __cdecl qsort(void*,size_t,size_t,int (*)(const void*,const void*));
+
+#ifndef _WSTDLIB_DEFINED
+#define _WSTDLIB_DEFINED
+wchar_t*      __cdecl _itow(int,wchar_t*,int);
+wchar_t*      __cdecl _i64tow(__int64,wchar_t*,int);
+wchar_t*      __cdecl _ltow(__msvcrt_long,wchar_t*,int);
+wchar_t*      __cdecl _ui64tow(unsigned __int64,wchar_t*,int);
+wchar_t*      __cdecl _ultow(__msvcrt_ulong,wchar_t*,int);
+wchar_t*      __cdecl _wfullpath(wchar_t*,const wchar_t*,size_t);
+wchar_t*      __cdecl _wgetenv(const wchar_t*);
+void          __cdecl _wmakepath(wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*);
+int           __cdecl _wmakepath_s(wchar_t*,size_t,const wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*);
+void          __cdecl _wperror(const wchar_t*);
+int           __cdecl _wputenv(const wchar_t*);
+void          __cdecl _wsearchenv(const wchar_t*,const wchar_t*,wchar_t*);
+void          __cdecl _wsplitpath(const wchar_t*,wchar_t*,wchar_t*,wchar_t*,wchar_t*);
+errno_t       __cdecl _wsplitpath_s(const wchar_t*,wchar_t*,size_t,wchar_t*,size_t,
+                                       wchar_t*,size_t,wchar_t*,size_t);
+int           __cdecl _wsystem(const wchar_t*);
+double        __cdecl _wtof(const wchar_t*);
+int           __cdecl _wtoi(const wchar_t*);
+__int64       __cdecl _wtoi64(const wchar_t*);
+__msvcrt_long __cdecl _wtol(const wchar_t*);
+
+size_t        __cdecl mbstowcs(wchar_t*,const char*,size_t);
+errno_t       __cdecl mbstowcs_s(size_t*,wchar_t*,size_t,const char*,size_t);
+int           __cdecl mbtowc(wchar_t*,const char*,size_t);
+double        __cdecl wcstod(const wchar_t*,wchar_t**);
+__msvcrt_long __cdecl wcstol(const wchar_t*,wchar_t**,int);
+size_t        __cdecl wcstombs(char*,const wchar_t*,size_t);
+errno_t       __cdecl wcstombs_s(size_t*,char*,size_t,const wchar_t*,size_t);
+__msvcrt_ulong __cdecl wcstoul(const wchar_t*,wchar_t**,int);
+int           __cdecl wctomb(char*,wchar_t);
+__int64       __cdecl _wcstoi64(const wchar_t*,wchar_t**,int);
+__int64       __cdecl _wcstoi64_l(const wchar_t*,wchar_t**,int,_locale_t);
+unsigned __int64 __cdecl _wcstoui64(const wchar_t*,wchar_t**,int);
+unsigned __int64 __cdecl _wcstoui64_l(const wchar_t*,wchar_t**,int,_locale_t);
+#endif /* _WSTDLIB_DEFINED */
+
+typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t*, const wchar_t*, const wchar_t*, unsigned, uintptr_t);
+_invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler);
+_invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
+void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file,
+                                unsigned int line, uintptr_t arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define environ _environ
+#define onexit_t _onexit_t
+
+static inline char* ecvt(double value, int ndigit, int* decpt, int* sign) { return _ecvt(value, ndigit, decpt, sign); }
+static inline char* fcvt(double value, int ndigit, int* decpt, int* sign) { return _fcvt(value, ndigit, decpt, sign); }
+static inline char* gcvt(double value, int ndigit, char* buf) { return _gcvt(value, ndigit, buf); }
+static inline char* itoa(int value, char* str, int radix) { return _itoa(value, str, radix); }
+static inline char* ltoa(__msvcrt_long value, char* str, int radix) { return _ltoa(value, str, radix); }
+static inline _onexit_t onexit(_onexit_t func) { return _onexit(func); }
+static inline int putenv(const char* str) { return _putenv(str); }
+static inline void swab(char* src, char* dst, int len) { _swab(src, dst, len); }
+static inline char* ultoa(__msvcrt_ulong value, char* str, int radix) { return _ultoa(value, str, radix); }
+
+#ifdef __i386__
+static inline div_t __wine_msvcrt_div(int num, int denom)
+{
+    extern unsigned __int64 div(int,int);
+    div_t ret;
+    unsigned __int64 res = div(num,denom);
+    ret.quot = (int)res;
+    ret.rem  = (int)(res >> 32);
+    return ret;
+}
+static inline ldiv_t __wine_msvcrt_ldiv(__msvcrt_long num, __msvcrt_long denom)
+{
+    extern unsigned __int64 ldiv(__msvcrt_long,__msvcrt_long);
+    ldiv_t ret;
+    unsigned __int64 res = ldiv(num,denom);
+    ret.quot = (__msvcrt_long)res;
+    ret.rem  = (__msvcrt_long)(res >> 32);
+    return ret;
+}
+#define div(num,denom) __wine_msvcrt_div(num,denom)
+#define ldiv(num,denom) __wine_msvcrt_ldiv(num,denom)
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_STDLIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h
new file mode 100644
index 0000000..d1dca89
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h
@@ -0,0 +1,156 @@
+/*
+ * String definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_STRING_H
+#define __WINE_STRING_H
+
+#include <crtdefs.h>
+
+#ifndef _NLSCMP_DEFINED
+#define _NLSCMPERROR               ((unsigned int)0x7fffffff)
+#define _NLSCMP_DEFINED
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void *)0)
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRT_MEMORY_DEFINED
+#define _CRT_MEMORY_DEFINED
+void*   __cdecl memchr(const void*,int,size_t);
+int     __cdecl memcmp(const void*,const void*,size_t);
+void*   __cdecl memcpy(void*,const void*,size_t);
+errno_t __cdecl memcpy_s(void*,size_t,const void*,size_t);
+void*   __cdecl memset(void*,int,size_t);
+void*   __cdecl _memccpy(void*,const void*,int,unsigned int);
+int     __cdecl _memicmp(const void*,const void*,unsigned int);
+
+static inline int memicmp(const void* s1, const void* s2, size_t len) { return _memicmp(s1, s2, len); }
+static inline void* memccpy(void *s1, const void *s2, int c, size_t n) { return _memccpy(s1, s2, c, n); }
+#endif /* _CRT_MEMORY_DEFINED */
+
+int   __cdecl _strcmpi(const char*,const char*);
+int   __cdecl _strcoll_l(const char*, const char*, _locale_t);
+char* __cdecl _strdup(const char*);
+char* __cdecl _strerror(const char*);
+errno_t __cdecl strerror_s(char*,size_t,int);
+int   __cdecl _stricmp(const char*,const char*);
+int   __cdecl _stricoll(const char*,const char*);
+int   __cdecl _stricoll_l(const char*, const char*, _locale_t);
+char* __cdecl _strlwr(char*);
+errno_t __cdecl _strlwr_s(char*,size_t);
+int   __cdecl _strncoll(const char*, const char*, size_t);
+int   __cdecl _strncoll_l(const char*, const char*, size_t, _locale_t);
+int   __cdecl _strnicmp(const char*,const char*,size_t);
+int   __cdecl _strnicoll(const char*, const char*, size_t);
+int   __cdecl _strnicoll_l(const char*, const char*, size_t, _locale_t);
+char* __cdecl _strnset(char*,int,size_t);
+char* __cdecl _strrev(char*);
+char* __cdecl _strset(char*,int);
+char* __cdecl _strupr(char*);
+
+void*   __cdecl memmove(void*,const void*,size_t);
+errno_t __cdecl memmove_s(void*,size_t,const void*,size_t);
+char*   __cdecl strcat(char*,const char*);
+errno_t __cdecl strcat_s(char*,size_t,const char*);
+char*   __cdecl strchr(const char*,int);
+int     __cdecl strcmp(const char*,const char*);
+int     __cdecl strcoll(const char*,const char*);
+char*   __cdecl strcpy(char*,const char*);
+errno_t __cdecl strcpy_s(char*,size_t,const char*);
+size_t  __cdecl strcspn(const char*,const char*);
+char*   __cdecl strerror(int);
+size_t  __cdecl strlen(const char*);
+char*   __cdecl strncat(char*,const char*,size_t);
+errno_t __cdecl strncat_s(char*,size_t,const char*,size_t);
+int     __cdecl strncmp(const char*,const char*,size_t);
+char*   __cdecl strncpy(char*,const char*,size_t);
+errno_t __cdecl strncpy_s(char*,size_t,const char*,size_t);
+size_t  __cdecl strnlen(const char*,size_t);
+char*   __cdecl strpbrk(const char*,const char*);
+char*   __cdecl strrchr(const char*,int);
+size_t  __cdecl strspn(const char*,const char*);
+char*   __cdecl strstr(const char*,const char*);
+char*   __cdecl strtok(char*,const char*);
+char*   __cdecl strtok_s(char*,const char*,char**);
+size_t  __cdecl strxfrm(char*,const char*,size_t);
+
+#ifndef _WSTRING_DEFINED
+#define _WSTRING_DEFINED
+wchar_t* __cdecl _wcsdup(const wchar_t*);
+int      __cdecl _wcsicmp(const wchar_t*,const wchar_t*);
+int      __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
+int      __cdecl _wcsicoll_l(const wchar_t*, const wchar_t*, _locale_t);
+wchar_t* __cdecl _wcslwr(wchar_t*);
+int      __cdecl _wcscoll_l(const wchar_t*, const wchar_t*, _locale_t);
+int      __cdecl _wcsncoll(const wchar_t*, const wchar_t*, size_t);
+int      __cdecl _wcsncoll_l(const wchar_t*, const wchar_t*, size_t, _locale_t);
+int      __cdecl _wcsnicmp(const wchar_t*,const wchar_t*,size_t);
+int      __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
+int      __cdecl _wcsnicoll_l(const wchar_t*, const wchar_t*, size_t, _locale_t);
+wchar_t* __cdecl _wcsnset(wchar_t*,wchar_t,size_t);
+wchar_t* __cdecl _wcsrev(wchar_t*);
+wchar_t* __cdecl _wcsset(wchar_t*,wchar_t);
+wchar_t* __cdecl _wcsupr(wchar_t*);
+
+wchar_t* __cdecl wcscat(wchar_t*,const wchar_t*);
+errno_t  __cdecl wcscat_s(wchar_t*,size_t,const wchar_t*);
+wchar_t* __cdecl wcschr(const wchar_t*,wchar_t);
+int      __cdecl wcscmp(const wchar_t*,const wchar_t*);
+int      __cdecl wcscoll(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcscpy(wchar_t*,const wchar_t*);
+errno_t  __cdecl wcscpy_s(wchar_t*,size_t,const wchar_t*);
+size_t   __cdecl wcscspn(const wchar_t*,const wchar_t*);
+size_t   __cdecl wcslen(const wchar_t*);
+wchar_t* __cdecl wcsncat(wchar_t*,const wchar_t*,size_t);
+int      __cdecl wcsncmp(const wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl wcsncpy(wchar_t*,const wchar_t*,size_t);
+errno_t  __cdecl wcsncpy_s(wchar_t*,size_t,const wchar_t*,size_t);
+wchar_t* __cdecl wcspbrk(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsrchr(const wchar_t*,wchar_t wcFor);
+size_t   __cdecl wcsspn(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsstr(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcstok(wchar_t*,const wchar_t*);
+size_t   __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t);
+#endif /* _WSTRING_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int strcasecmp(const char* s1, const char* s2) { return _stricmp(s1, s2); }
+static inline int strcmpi(const char* s1, const char* s2) { return _strcmpi(s1, s2); }
+static inline char* strdup(const char* buf) { return _strdup(buf); }
+static inline int stricmp(const char* s1, const char* s2) { return _stricmp(s1, s2); }
+static inline int stricoll(const char* s1, const char* s2) { return _stricoll(s1, s2); }
+static inline char* strlwr(char* str) { return _strlwr(str); }
+static inline int strncasecmp(const char *str1, const char *str2, size_t n) { return _strnicmp(str1, str2, n); }
+static inline int strnicmp(const char* s1, const char* s2, size_t n) { return _strnicmp(s1, s2, n); }
+static inline char* strnset(char* str, int value, unsigned int len) { return _strnset(str, value, len); }
+static inline char* strrev(char* str) { return _strrev(str); }
+static inline char* strset(char* str, int value) { return _strset(str, value); }
+static inline char* strupr(char* str) { return _strupr(str); }
+
+static inline wchar_t* wcsdup(const wchar_t* str) { return _wcsdup(str); }
+static inline int wcsicoll(const wchar_t* str1, const wchar_t* str2) { return _wcsicoll(str1, str2); }
+static inline wchar_t* wcslwr(wchar_t* str) { return _wcslwr(str); }
+static inline int wcsnicmp(const wchar_t* str1, const wchar_t* str2, size_t n) { return _wcsnicmp(str1, str2, n); }
+static inline wchar_t* wcsnset(wchar_t* str, wchar_t c, size_t n) { return _wcsnset(str, c, n); }
+static inline wchar_t* wcsrev(wchar_t* str) { return _wcsrev(str); }
+static inline wchar_t* wcsset(wchar_t* str, wchar_t c) { return _wcsset(str, c); }
+static inline wchar_t* wcsupr(wchar_t* str) { return _wcsupr(str); }
+
+#endif /* __WINE_STRING_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h
new file mode 100644
index 0000000..223cb96
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h
@@ -0,0 +1,42 @@
+/*
+ * _locking constants
+ *
+ * Copyright 2002 Bill Medland
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_LOCKING_H__
+#define __WINE_SYS_LOCKING_H__
+#ifndef __WINE_USE_MSVCRT
+#define __WINE_USE_MSVCRT
+#endif
+
+#define _LK_UNLCK 0
+#define _LK_LOCK 1
+#define _LK_NBLCK 2
+#define _LK_RLCK 3
+#define _LK_NBRLCK 4
+
+#endif /* __WINE_SYS_LOCKING_H__ : Do not place anything after this #endif */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h
new file mode 100644
index 0000000..6509e04
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h
@@ -0,0 +1,201 @@
+/*
+ * _stat() definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_SYS_STAT_H
+#define __WINE_SYS_STAT_H
+
+#include <crtdefs.h>
+#include <sys/types.h>
+
+#include <pshpack8.h>
+
+#ifndef _DEV_T_DEFINED
+typedef unsigned int _dev_t;
+#define _DEV_T_DEFINED
+#endif
+
+#ifndef _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#define _INO_T_DEFINED
+#endif
+
+#ifndef _OFF_T_DEFINED
+typedef int _off_t;
+#define _OFF_T_DEFINED
+#endif
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+#  define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+#  define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+#define _S_IEXEC  0x0040
+#define _S_IWRITE 0x0080
+#define _S_IREAD  0x0100
+#define _S_IFIFO  0x1000
+#define _S_IFCHR  0x2000
+#define _S_IFDIR  0x4000
+#define _S_IFREG  0x8000
+#define _S_IFMT   0xF000
+
+/* for FreeBSD */
+#undef st_atime
+#undef st_ctime
+#undef st_mtime
+
+#ifndef _STAT_DEFINED
+#define _STAT_DEFINED
+
+struct _stat {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct stat {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct _stat32 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short st_nlink;
+  short st_uid;
+  short st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  __time32_t st_atime;
+  __time32_t st_mtime;
+  __time32_t st_ctime;
+};
+
+struct _stat32i64 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short st_nlink;
+  short st_uid;
+  short st_gid;
+  _dev_t st_rdev;
+  __int64 DECLSPEC_ALIGN(8) st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct _stat64i32 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short st_nlink;
+  short st_uid;
+  short st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  __time64_t st_atime;
+  __time64_t st_mtime;
+  __time64_t st_ctime;
+};
+
+struct _stati64 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  __int64 DECLSPEC_ALIGN(8) st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct _stat64 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  __int64 DECLSPEC_ALIGN(8) st_size;
+  __time64_t     st_atime;
+  __time64_t     st_mtime;
+  __time64_t     st_ctime;
+};
+#endif /* _STAT_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _fstat(int,struct _stat*);
+int __cdecl _stat(const char*,struct _stat*);
+int __cdecl _fstat32(int, struct _stat32*);
+int __cdecl _stat32(const char*, struct _stat32*);
+int __cdecl _fstati64(int,struct _stati64*);
+int __cdecl _stati64(const char*,struct _stati64*);
+int __cdecl _fstat64(int,struct _stat64*);
+int __cdecl _stat64(const char*,struct _stat64*);
+int __cdecl _umask(int);
+
+#ifndef _WSTAT_DEFINED
+#define _WSTAT_DEFINED
+int __cdecl _wstat(const wchar_t*,struct _stat*);
+int __cdecl _wstat32(const wchar_t*, struct _stat32*);
+int __cdecl _wstati64(const wchar_t*,struct _stati64*);
+int __cdecl _wstat64(const wchar_t*,struct _stat64*);
+#endif /* _WSTAT_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define S_IFMT   _S_IFMT
+#define S_IFDIR  _S_IFDIR
+#define S_IFCHR  _S_IFCHR
+#define S_IFREG  _S_IFREG
+#define S_IREAD  _S_IREAD
+#define S_IWRITE _S_IWRITE
+#define S_IEXEC  _S_IEXEC
+
+static inline int fstat(int fd, struct stat* ptr) { return _fstat(fd, (struct _stat*)ptr); }
+static inline int stat(const char* path, struct stat* ptr) { return _stat(path, (struct _stat*)ptr); }
+#ifndef _UMASK_DEFINED
+static inline int umask(int fd) { return _umask(fd); }
+#define _UMASK_DEFINED
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_SYS_STAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h
new file mode 100644
index 0000000..07c32b9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h
@@ -0,0 +1,86 @@
+/*
+ * Path and directory definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_TIMEB_H
+#define __WINE_SYS_TIMEB_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _TIMEB_DEFINED
+#define _TIMEB_DEFINED
+struct _timeb
+{
+    time_t time;
+    unsigned short millitm;
+    short          timezone;
+    short          dstflag;
+};
+struct __timeb32
+{
+    __time32_t     time;
+    unsigned short millitm;
+    short          timezone;
+    short          dstflag;
+};
+struct __timeb64
+{
+    __time64_t     time;
+    unsigned short millitm;
+    short          timezone;
+    short          dstflag;
+};
+#endif /* _TIMEB_DEFINED */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void __cdecl _ftime32(struct __timeb32*);
+void __cdecl _ftime64(struct __timeb64*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+static inline void __cdecl _ftime(struct _timeb *tb) { return _ftime32((struct __timeb32*)tb); }
+#else
+static inline void __cdecl _ftime(struct _timeb *tb) { return _ftime64((struct __timeb64*)tb); }
+#endif
+
+#define timeb _timeb
+
+static inline void ftime(struct _timeb* ptr) { return _ftime(ptr); }
+
+#include <poppack.h>
+
+#endif /* __WINE_SYS_TIMEB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h
new file mode 100644
index 0000000..db90547
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h
@@ -0,0 +1,82 @@
+/*
+ * _stat() definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_TYPES_H
+#define __WINE_SYS_TYPES_H
+
+#include <crtdefs.h>
+
+#ifndef _DEV_T_DEFINED
+typedef unsigned int   _dev_t;
+#define _DEV_T_DEFINED
+#endif
+
+#ifndef _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#define _INO_T_DEFINED
+#endif
+
+#ifndef _MODE_T_DEFINED
+typedef unsigned short _mode_t;
+#define _MODE_T_DEFINED
+#endif
+
+#ifndef _OFF_T_DEFINED
+typedef int _off_t;
+#define _OFF_T_DEFINED
+#endif
+
+#ifndef _BSDTYPES_DEFINED
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int  u_int;
+typedef __msvcrt_ulong u_long;
+#define _BSDTYPES_DEFINED
+#endif
+
+#define dev_t _dev_t
+#define ino_t _ino_t
+#define mode_t _mode_t
+#define off_t _off_t
+
+#ifndef _PID_T_DEFINED
+typedef int pid_t;
+#define _PID_T_DEFINED
+#endif
+
+#ifndef _SSIZE_T_DEFINED
+#ifdef _WIN64
+typedef __int64 ssize_t;
+#else
+typedef int ssize_t;
+#endif
+#define _SSIZE_T_DEFINED
+#endif
+
+#endif /* __WINE_SYS_TYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h
new file mode 100644
index 0000000..1e823fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h
@@ -0,0 +1 @@
+#include <unistd.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h
new file mode 100644
index 0000000..4b250fc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h
@@ -0,0 +1,88 @@
+/*
+ * Path and directory definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_UTIME_H
+#define __WINE_SYS_UTIME_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _UTIMBUF_DEFINED
+#define _UTIMBUF_DEFINED
+struct _utimbuf
+{
+    time_t actime;
+    time_t modtime;
+};
+struct __utimbuf32
+{
+    __time32_t actime;
+    __time32_t modtime;
+};
+struct __utimbuf64
+{
+    __time64_t actime;
+    __time64_t modtime;
+};
+#endif /* _UTIMBUF_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _futime32(int,struct __utimbuf32*);
+int __cdecl _futime64(int,struct __utimbuf64*);
+int __cdecl _utime32(const char*,struct __utimbuf32*);
+int __cdecl _utime64(const char*,struct __utimbuf64*);
+int __cdecl _wutime32(const wchar_t*,struct __utimbuf32*);
+int __cdecl _wutime64(const wchar_t*,struct __utimbuf64*);
+
+#ifdef _USE_32BIT_TIME_T
+static inline int _futime(int fd, struct _utimbuf *buf) { return _futime32(fd, (struct __utimbuf32*)buf); }
+static inline int _utime(const char *s, struct _utimbuf *buf) { return _utime32(s, (struct __utimbuf32*)buf); }
+static inline int _wutime(const wchar_t *s, struct _utimbuf *buf) { return _wutime32(s, (struct __utimbuf32*)buf); }
+#else
+static inline int _futime(int fd, struct _utimbuf *buf) { return _futime64(fd, (struct __utimbuf64*)buf); }
+static inline int _utime(const char *s, struct _utimbuf *buf) { return _utime64(s, (struct __utimbuf64*)buf); }
+static inline int _wutime(const wchar_t *s, struct _utimbuf *buf) { return _wutime64(s, (struct __utimbuf64*)buf); }
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define utimbuf _utimbuf
+
+static inline int utime(const char* path, struct _utimbuf* buf) { return _utime(path, buf); }
+
+#include <poppack.h>
+
+#endif /* __WINE_SYS_UTIME_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h
new file mode 100644
index 0000000..6d5e0ed
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h
@@ -0,0 +1,162 @@
+/*
+ * Time definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TIME_H
+#define __WINE_TIME_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _CLOCK_T_DEFINED
+typedef __msvcrt_long clock_t;
+#define _CLOCK_T_DEFINED
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void *)0)
+#endif
+#endif
+
+#ifndef CLOCKS_PER_SEC
+#define CLOCKS_PER_SEC 1000
+#endif
+
+#ifndef _TM_DEFINED
+#define _TM_DEFINED
+struct tm {
+    int tm_sec;
+    int tm_min;
+    int tm_hour;
+    int tm_mday;
+    int tm_mon;
+    int tm_year;
+    int tm_wday;
+    int tm_yday;
+    int tm_isdst;
+};
+#endif /* _TM_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __i386__
+#define _daylight (*__p__daylight())
+#define _dstbias (*__p__dstbias())
+#define _timezone (*__p__timezone())
+#define _tzname (__p__tzname())
+
+int *   __cdecl __p__daylight(void);
+__msvcrt_long *  __cdecl __p__dstbias(void);
+__msvcrt_long *  __cdecl __p__timezone(void);
+char ** __cdecl __p__tzname(void);
+#else
+extern int _daylight;
+extern __msvcrt_long _dstbias;
+extern __msvcrt_long _timezone;
+extern char *_tzname;
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+#define _ctime32     ctime
+#define _difftime32  difftime
+#define _gmtime32    gmtime
+#define _localtime32 localtime
+#define _mktime32    mktime
+#define _time32      time
+#endif
+
+unsigned    __cdecl _getsystime(struct tm*);
+unsigned    __cdecl _setsystime(struct tm*,unsigned);
+char*       __cdecl _strdate(char*);
+errno_t     __cdecl _strdate_s(char*,size_t);
+char*       __cdecl _strtime(char*);
+errno_t     __cdecl _strtime_s(char*,size_t);
+void        __cdecl _tzset(void);
+
+char*       __cdecl asctime(const struct tm*);
+clock_t     __cdecl clock(void);
+char*       __cdecl _ctime32(const __time32_t*);
+char*       __cdecl _ctime64(const __time64_t*);
+double      __cdecl _difftime32(__time32_t,__time32_t);
+double      __cdecl _difftime64(__time64_t,__time64_t);
+struct tm*  __cdecl _gmtime32(const __time32_t*);
+struct tm*  __cdecl _gmtime64(const __time64_t*);
+struct tm*  __cdecl _localtime32(const __time32_t*);
+errno_t     __cdecl _localtime32_s(struct tm*, const __time64_t*);
+struct tm*  __cdecl _localtime64(const __time64_t*);
+errno_t     __cdecl _localtime64_s(struct tm*, const __time64_t*);
+__time32_t  __cdecl _mktime32(struct tm*);
+__time64_t  __cdecl _mktime64(struct tm*);
+size_t      __cdecl strftime(char*,size_t,const char*,const struct tm*);
+__time32_t  __cdecl _time32(__time32_t*);
+__time64_t  __cdecl _time64(__time64_t*);
+
+#ifndef _USE_32BIT_TIME_T
+static inline char* ctime(const time_t *t) { return _ctime64(t); }
+static inline double difftime(time_t t1, time_t t2) { return _difftime64(t1, t2); }
+static inline struct tm* gmtime(const time_t *t) { return _gmtime64(t); }
+static inline struct tm* localtime(const time_t *t) { return _localtime64(t); }
+static inline time_t mktime(struct tm *tm) { return _mktime64(tm); }
+static inline time_t time(time_t *t) { return _time64(t); }
+#endif
+
+#ifndef _WTIME_DEFINED
+#define _WTIME_DEFINED
+
+#ifdef _USE_32BIT_TIME_T
+#define _wctime32 _wctime
+#endif
+
+wchar_t* __cdecl _wasctime(const struct tm*);
+size_t   __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*);
+wchar_t* __cdecl _wctime32(const __time32_t*);
+wchar_t* __cdecl _wctime64(const __time64_t*);
+wchar_t* __cdecl _wstrdate(wchar_t*);
+errno_t  __cdecl _wstrdate_s(wchar_t*,size_t);
+wchar_t* __cdecl _wstrtime(wchar_t*);
+errno_t  __cdecl _wstrtime_s(wchar_t*,size_t);
+
+#ifndef _USE_32BIT_TIME_T
+static inline wchar_t* _wctime(const time_t *t) { return _wctime64(t); }
+#endif
+
+#endif /* _WTIME_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_TIME_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h
new file mode 100644
index 0000000..eca5c5e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h
@@ -0,0 +1,2 @@
+#include <io.h>
+#include <process.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h
new file mode 100644
index 0000000..d936dc3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h
@@ -0,0 +1,478 @@
+/*
+ * Unicode definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_WCHAR_H
+#define __WINE_WCHAR_H
+
+#include <crtdefs.h>
+#include <stdarg.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void *)0)
+#endif
+#endif
+
+#define WCHAR_MIN 0
+#define WCHAR_MAX ((wchar_t)-1)
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+#  define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+#  define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+typedef int mbstate_t;
+
+#ifndef WEOF
+#define WEOF        (wint_t)(0xFFFF)
+#endif
+
+#ifndef _FSIZE_T_DEFINED
+typedef __msvcrt_ulong _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _DEV_T_DEFINED
+typedef unsigned int   _dev_t;
+#define _DEV_T_DEFINED
+#endif
+
+#ifndef _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#define _INO_T_DEFINED
+#endif
+
+#ifndef _OFF_T_DEFINED
+typedef int _off_t;
+#define _OFF_T_DEFINED
+#endif
+
+#ifndef _TM_DEFINED
+#define _TM_DEFINED
+struct tm {
+    int tm_sec;
+    int tm_min;
+    int tm_hour;
+    int tm_mday;
+    int tm_mon;
+    int tm_year;
+    int tm_wday;
+    int tm_yday;
+    int tm_isdst;
+};
+#endif /* _TM_DEFINED */
+
+#ifndef _FILE_DEFINED
+#define _FILE_DEFINED
+typedef struct _iobuf
+{
+  char* _ptr;
+  int   _cnt;
+  char* _base;
+  int   _flag;
+  int   _file;
+  int   _charbuf;
+  int   _bufsiz;
+  char* _tmpfname;
+} FILE;
+#endif  /* _FILE_DEFINED */
+
+#ifndef _WFINDDATA_T_DEFINED
+#define _WFINDDATA_T_DEFINED
+
+struct _wfinddata_t {
+  unsigned attrib;
+  time_t time_create;
+  time_t time_access;
+  time_t time_write;
+  _fsize_t size;
+  wchar_t name[260];
+};
+
+struct _wfinddatai64_t {
+  unsigned attrib;
+  time_t time_create;
+  time_t time_access;
+  time_t time_write;
+  __int64 DECLSPEC_ALIGN(8) size;
+  wchar_t name[260];
+};
+
+#endif /* _WFINDDATA_T_DEFINED */
+
+#ifndef _STAT_DEFINED
+#define _STAT_DEFINED
+
+struct _stat {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct stat {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct _stat32 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short st_nlink;
+  short st_uid;
+  short st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  __time32_t st_atime;
+  __time32_t st_mtime;
+  __time32_t st_ctime;
+};
+
+struct _stat32i64 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short st_nlink;
+  short st_uid;
+  short st_gid;
+  _dev_t st_rdev;
+  __int64 DECLSPEC_ALIGN(8) st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct _stat64i32 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short st_nlink;
+  short st_uid;
+  short st_gid;
+  _dev_t st_rdev;
+  _off_t st_size;
+  __time64_t st_atime;
+  __time64_t st_mtime;
+  __time64_t st_ctime;
+};
+
+struct _stati64 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  __int64 DECLSPEC_ALIGN(8) st_size;
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+};
+
+struct _stat64 {
+  _dev_t st_dev;
+  _ino_t st_ino;
+  unsigned short st_mode;
+  short          st_nlink;
+  short          st_uid;
+  short          st_gid;
+  _dev_t st_rdev;
+  __int64 DECLSPEC_ALIGN(8) st_size;
+  __time64_t     st_atime;
+  __time64_t     st_mtime;
+  __time64_t     st_ctime;
+};
+#endif /* _STAT_DEFINED */
+
+/* ASCII char classification table - binary compatible */
+#define _UPPER        0x0001  /* C1_UPPER */
+#define _LOWER        0x0002  /* C1_LOWER */
+#define _DIGIT        0x0004  /* C1_DIGIT */
+#define _SPACE        0x0008  /* C1_SPACE */
+#define _PUNCT        0x0010  /* C1_PUNCT */
+#define _CONTROL      0x0020  /* C1_CNTRL */
+#define _BLANK        0x0040  /* C1_BLANK */
+#define _HEX          0x0080  /* C1_XDIGIT */
+#define _LEADBYTE     0x8000
+#define _ALPHA       (0x0100|_UPPER|_LOWER)  /* (C1_ALPHA|_UPPER|_LOWER) */
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+int     __cdecl is_wctype(wint_t,wctype_t);
+int     __cdecl isleadbyte(int);
+int     __cdecl iswalnum(wint_t);
+int     __cdecl iswalpha(wint_t);
+int     __cdecl iswascii(wint_t);
+int     __cdecl iswcntrl(wint_t);
+int     __cdecl iswctype(wint_t,wctype_t);
+int     __cdecl iswdigit(wint_t);
+int     __cdecl iswgraph(wint_t);
+int     __cdecl iswlower(wint_t);
+int     __cdecl iswprint(wint_t);
+int     __cdecl iswpunct(wint_t);
+int     __cdecl iswspace(wint_t);
+int     __cdecl iswupper(wint_t);
+int     __cdecl iswxdigit(wint_t);
+wchar_t __cdecl towlower(wchar_t);
+wchar_t __cdecl towupper(wchar_t);
+#endif /* _WCTYPE_DEFINED */
+
+#ifndef _WDIRECT_DEFINED
+#define _WDIRECT_DEFINED
+int      __cdecl _wchdir(const wchar_t*);
+wchar_t* __cdecl _wgetcwd(wchar_t*,int);
+wchar_t* __cdecl _wgetdcwd(int,wchar_t*,int);
+int      __cdecl _wmkdir(const wchar_t*);
+int      __cdecl _wrmdir(const wchar_t*);
+#endif /* _WDIRECT_DEFINED */
+
+#ifndef _WIO_DEFINED
+#define _WIO_DEFINED
+int      __cdecl _waccess(const wchar_t*,int);
+int      __cdecl _wchmod(const wchar_t*,int);
+int      __cdecl _wcreat(const wchar_t*,int);
+intptr_t __cdecl _wfindfirst(const wchar_t*,struct _wfinddata_t*);
+intptr_t __cdecl _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+int      __cdecl _wfindnext(intptr_t,struct _wfinddata_t*);
+int      __cdecl _wfindnexti64(intptr_t, struct _wfinddatai64_t*);
+wchar_t* __cdecl _wmktemp(wchar_t*);
+int      __cdecl _wopen(const wchar_t*,int,...);
+int      __cdecl _wrename(const wchar_t*,const wchar_t*);
+int      __cdecl _wsopen(const wchar_t*,int,int,...);
+int      __cdecl _wunlink(const wchar_t*);
+#endif /* _WIO_DEFINED */
+
+#ifndef _WLOCALE_DEFINED
+#define _WLOCALE_DEFINED
+wchar_t* __cdecl _wsetlocale(int,const wchar_t*);
+#endif /* _WLOCALE_DEFINED */
+
+#ifndef _WPROCESS_DEFINED
+#define _WPROCESS_DEFINED
+int      __cdecl _wexecl(const wchar_t*,const wchar_t*,...);
+int      __cdecl _wexecle(const wchar_t*,const wchar_t*,...);
+int      __cdecl _wexeclp(const wchar_t*,const wchar_t*,...);
+int      __cdecl _wexeclpe(const wchar_t*,const wchar_t*,...);
+int      __cdecl _wexecv(const wchar_t*,const wchar_t* const *);
+int      __cdecl _wexecve(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int      __cdecl _wexecvp(const wchar_t*,const wchar_t* const *);
+int      __cdecl _wexecvpe(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int      __cdecl _wspawnl(int,const wchar_t*,const wchar_t*,...);
+int      __cdecl _wspawnle(int,const wchar_t*,const wchar_t*,...);
+int      __cdecl _wspawnlp(int,const wchar_t*,const wchar_t*,...);
+int      __cdecl _wspawnlpe(int,const wchar_t*,const wchar_t*,...);
+int      __cdecl _wspawnv(int,const wchar_t*,const wchar_t* const *);
+int      __cdecl _wspawnve(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int      __cdecl _wspawnvp(int,const wchar_t*,const wchar_t* const *);
+int      __cdecl _wspawnvpe(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int      __cdecl _wsystem(const wchar_t*);
+#endif /* _WPROCESS_DEFINED */
+
+#ifndef _WSTAT_DEFINED
+#define _WSTAT_DEFINED
+int __cdecl _wstat(const wchar_t*,struct _stat*);
+int __cdecl _wstat32(const wchar_t*, struct _stat32*);
+int __cdecl _wstati64(const wchar_t*,struct _stati64*);
+int __cdecl _wstat64(const wchar_t*,struct _stat64*);
+#endif /* _WSTAT_DEFINED */
+
+#ifndef _WSTDIO_DEFINED
+#define _WSTDIO_DEFINED
+wint_t   __cdecl _fgetwchar(void);
+wint_t   __cdecl _fputwchar(wint_t);
+wchar_t* __cdecl _getws(wchar_t*);
+int      __cdecl _putws(const wchar_t*);
+int      __cdecl _snwprintf(wchar_t*,size_t,const wchar_t*,...);
+int      __cdecl _snwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,...);
+int      __cdecl _vscwprintf(const wchar_t*,__ms_va_list);
+int      __cdecl _vscwprintf_p_l(const wchar_t*,_locale_t,__ms_va_list);
+int      __cdecl _vsnwprintf(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int      __cdecl _vsnwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,__ms_va_list);
+int      __cdecl _vswprintf_p_l(wchar_t*,size_t,const wchar_t*,_locale_t,__ms_va_list);
+FILE*    __cdecl _wfdopen(int,const wchar_t*);
+FILE*    __cdecl _wfopen(const wchar_t*,const wchar_t*);
+errno_t  __cdecl _wfopen_s(FILE**,const wchar_t*,const wchar_t*);
+FILE*    __cdecl _wfreopen(const wchar_t*,const wchar_t*,FILE*);
+FILE*    __cdecl _wfsopen(const wchar_t*,const wchar_t*,int);
+void     __cdecl _wperror(const wchar_t*);
+FILE*    __cdecl _wpopen(const wchar_t*,const wchar_t*);
+int      __cdecl _wremove(const wchar_t*);
+wchar_t* __cdecl _wtempnam(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl _wtmpnam(wchar_t*);
+
+wint_t   __cdecl fgetwc(FILE*);
+wchar_t* __cdecl fgetws(wchar_t*,int,FILE*);
+wint_t   __cdecl fputwc(wint_t,FILE*);
+int      __cdecl fputws(const wchar_t*,FILE*);
+int      __cdecl fwprintf(FILE*,const wchar_t*,...);
+int      __cdecl fwprintf_s(FILE*,const wchar_t*,...);
+int      __cdecl fputws(const wchar_t*,FILE*);
+int      __cdecl fwscanf(FILE*,const wchar_t*,...);
+int      __cdecl fwscanf_s(FILE*,const wchar_t*,...);
+wint_t   __cdecl getwc(FILE*);
+wint_t   __cdecl getwchar(void);
+wchar_t* __cdecl getws(wchar_t*);
+wint_t   __cdecl putwc(wint_t,FILE*);
+wint_t   __cdecl putwchar(wint_t);
+int      __cdecl putws(const wchar_t*);
+int      __cdecl swprintf(wchar_t*,const wchar_t*,...);
+int      __cdecl swprintf_s(wchar_t*,size_t,const wchar_t*,...);
+int      __cdecl swscanf(const wchar_t*,const wchar_t*,...);
+int      __cdecl swscanf_s(const wchar_t*,const wchar_t*,...);
+wint_t   __cdecl ungetwc(wint_t,FILE*);
+int      __cdecl vfwprintf(FILE*,const wchar_t*,__ms_va_list);
+int      __cdecl vfwprintf_s(FILE*,const wchar_t*,__ms_va_list);
+int      __cdecl vswprintf(wchar_t*,const wchar_t*,__ms_va_list);
+int      __cdecl vswprintf_s(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int      __cdecl vwprintf(const wchar_t*,__ms_va_list);
+int      __cdecl vwprintf_s(const wchar_t*,__ms_va_list);
+int      __cdecl wprintf(const wchar_t*,...);
+int      __cdecl wprintf_s(const wchar_t*,...);
+int      __cdecl wscanf(const wchar_t*,...);
+int      __cdecl wscanf_s(const wchar_t*,...);
+#endif /* _WSTDIO_DEFINED */
+
+#ifndef _WSTDLIB_DEFINED
+#define _WSTDLIB_DEFINED
+wchar_t* __cdecl _itow(int,wchar_t*,int);
+wchar_t* __cdecl _i64tow(__int64,wchar_t*,int);
+wchar_t* __cdecl _ltow(__msvcrt_long,wchar_t*,int);
+wchar_t* __cdecl _ui64tow(unsigned __int64,wchar_t*,int);
+wchar_t* __cdecl _ultow(__msvcrt_ulong,wchar_t*,int);
+wchar_t* __cdecl _wfullpath(wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl _wgetenv(const wchar_t*);
+void     __cdecl _wmakepath(wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*);
+void     __cdecl _wperror(const wchar_t*);
+int      __cdecl _wputenv(const wchar_t*);
+void     __cdecl _wsearchenv(const wchar_t*,const wchar_t*,wchar_t*);
+void     __cdecl _wsplitpath(const wchar_t*,wchar_t*,wchar_t*,wchar_t*,wchar_t*);
+errno_t  __cdecl _wsplitpath_s(const wchar_t*,wchar_t*,size_t,wchar_t*,size_t,
+                                   wchar_t*,size_t,wchar_t*,size_t);
+int      __cdecl _wsystem(const wchar_t*);
+double   __cdecl _wtof(const wchar_t*);
+int      __cdecl _wtoi(const wchar_t*);
+__int64  __cdecl _wtoi64(const wchar_t*);
+__msvcrt_long __cdecl _wtol(const wchar_t*);
+
+size_t        __cdecl mbstowcs(wchar_t*,const char*,size_t);
+errno_t       __cdecl mbstowcs_s(size_t*,wchar_t*,size_t,const char*,size_t);
+int           __cdecl mbtowc(wchar_t*,const char*,size_t);
+double        __cdecl wcstod(const wchar_t*,wchar_t**);
+__msvcrt_long __cdecl wcstol(const wchar_t*,wchar_t**,int);
+size_t        __cdecl wcstombs(char*,const wchar_t*,size_t);
+errno_t       __cdecl wcstombs_s(size_t*,char*,size_t,const wchar_t*,size_t);
+__msvcrt_ulong __cdecl wcstoul(const wchar_t*,wchar_t**,int);
+int           __cdecl wctomb(char*,wchar_t);
+#endif /* _WSTDLIB_DEFINED */
+
+#ifndef _WSTRING_DEFINED
+#define _WSTRING_DEFINED
+int      __cdecl _wcscoll_l(const wchar_t*,const wchar_t*,_locale_t);
+wchar_t* __cdecl _wcsdup(const wchar_t*);
+int      __cdecl _wcsicmp(const wchar_t*,const wchar_t*);
+int      __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
+int      __cdecl _wcsicoll_l(const wchar_t*,const wchar_t*,_locale_t);
+wchar_t* __cdecl _wcslwr(wchar_t*);
+int      __cdecl _wcsncoll(const wchar_t*,const wchar_t*,size_t);
+int      __cdecl _wcsncoll_l(const wchar_t*,const wchar_t*,size_t,_locale_t);
+int      __cdecl _wcsnicmp(const wchar_t*,const wchar_t*,size_t);
+int      __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
+int      __cdecl _wcsnicoll_l(const wchar_t*,const wchar_t*,size_t,_locale_t);
+wchar_t* __cdecl _wcsnset(wchar_t*,wchar_t,size_t);
+wchar_t* __cdecl _wcsrev(wchar_t*);
+wchar_t* __cdecl _wcsset(wchar_t*,wchar_t);
+wchar_t* __cdecl _wcsupr(wchar_t*);
+
+wchar_t* __cdecl wcscat(wchar_t*,const wchar_t*);
+errno_t  __cdecl wcscat_s(wchar_t*,size_t,const wchar_t*);
+wchar_t* __cdecl wcschr(const wchar_t*,wchar_t);
+int      __cdecl wcscmp(const wchar_t*,const wchar_t*);
+int      __cdecl wcscoll(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcscpy(wchar_t*,const wchar_t*);
+errno_t  __cdecl wcscpy_s(wchar_t*,size_t,const wchar_t*);
+size_t   __cdecl wcscspn(const wchar_t*,const wchar_t*);
+size_t   __cdecl wcslen(const wchar_t*);
+wchar_t* __cdecl wcsncat(wchar_t*,const wchar_t*,size_t);
+int      __cdecl wcsncmp(const wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl wcsncpy(wchar_t*,const wchar_t*,size_t);
+errno_t  __cdecl wcsncpy_s(wchar_t*,size_t,const wchar_t*,size_t);
+wchar_t* __cdecl wcspbrk(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsrchr(const wchar_t*,wchar_t wcFor);
+size_t   __cdecl wcsspn(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsstr(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcstok(wchar_t*,const wchar_t*);
+size_t   __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t);
+#endif /* _WSTRING_DEFINED */
+
+#ifndef _WTIME_DEFINED
+#define _WTIME_DEFINED
+
+#ifdef _USE_32BIT_TIME_T
+#define _wctime32 _wctime
+#endif
+
+wchar_t* __cdecl _wasctime(const struct tm*);
+size_t   __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*);
+wchar_t* __cdecl _wctime32(const __time32_t*);
+wchar_t* __cdecl _wctime64(const __time64_t*);
+wchar_t* __cdecl _wstrdate(wchar_t*);
+errno_t  __cdecl _wstrdate_s(wchar_t*,size_t);
+wchar_t* __cdecl _wstrtime(wchar_t*);
+errno_t  __cdecl _wstrtime_s(wchar_t*,size_t);
+
+#ifndef _USE_32BIT_TIME_T
+static inline wchar_t* _wctime(const time_t *t) { return _wctime64(t); }
+#endif
+
+#endif /* _WTIME_DEFINED */
+
+wchar_t __cdecl btowc(int);
+size_t  __cdecl mbrlen(const char *,size_t,mbstate_t*);
+size_t  __cdecl mbrtowc(wchar_t*,const char*,size_t,mbstate_t*);
+size_t  __cdecl mbsrtowcs(wchar_t*,const char**,size_t,mbstate_t*);
+size_t  __cdecl wcrtomb(char*,wchar_t,mbstate_t*);
+size_t  __cdecl wcsrtombs(char*,const wchar_t**,size_t,mbstate_t*);
+int     __cdecl wctob(wint_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_WCHAR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h
new file mode 100644
index 0000000..907e631
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h
@@ -0,0 +1,92 @@
+/*
+ * Unicode definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WCTYPE_H
+#define __WINE_WCTYPE_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+/* ASCII char classification table - binary compatible */
+#define _UPPER        0x0001  /* C1_UPPER */
+#define _LOWER        0x0002  /* C1_LOWER */
+#define _DIGIT        0x0004  /* C1_DIGIT */
+#define _SPACE        0x0008  /* C1_SPACE */
+#define _PUNCT        0x0010  /* C1_PUNCT */
+#define _CONTROL      0x0020  /* C1_CNTRL */
+#define _BLANK        0x0040  /* C1_BLANK */
+#define _HEX          0x0080  /* C1_XDIGIT */
+#define _LEADBYTE     0x8000
+#define _ALPHA       (0x0100|_UPPER|_LOWER)  /* (C1_ALPHA|_UPPER|_LOWER) */
+
+#ifndef WEOF
+#define WEOF        (wint_t)(0xFFFF)
+#endif
+
+/* FIXME: there's something to do with __p__pctype and __p__pwctype */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+int __cdecl is_wctype(wint_t,wctype_t);
+int __cdecl isleadbyte(int);
+int __cdecl iswalnum(wint_t);
+int __cdecl iswalpha(wint_t);
+int __cdecl iswascii(wint_t);
+int __cdecl iswcntrl(wint_t);
+int __cdecl iswctype(wint_t,wctype_t);
+int __cdecl iswdigit(wint_t);
+int __cdecl iswgraph(wint_t);
+int __cdecl iswlower(wint_t);
+int __cdecl iswprint(wint_t);
+int __cdecl iswpunct(wint_t);
+int __cdecl iswspace(wint_t);
+int __cdecl iswupper(wint_t);
+int __cdecl iswxdigit(wint_t);
+wchar_t __cdecl towlower(wchar_t);
+wchar_t __cdecl towupper(wchar_t);
+#endif /* _WCTYPE_DEFINED */
+
+typedef wchar_t wctrans_t;
+wint_t __cdecl towctrans(wint_t,wctrans_t);
+wctrans_t __cdecl wctrans(const char *);
+wctype_t __cdecl wctype(const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_WCTYPE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h
new file mode 100644
index 0000000..fba60a4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _MSWSOCK_
+#define _MSWSOCK_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef USE_WS_PREFIX
+#define WS(x)    WS_##x
+#else
+#define WS(x)    x
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_CONNDATA        0x7000
+#define SO_CONNOPT         0x7001
+#define SO_DISCDATA        0x7002
+#define SO_DISCOPT         0x7003
+#define SO_CONNDATALEN     0x7004
+#define SO_CONNOPTLEN      0x7005
+#define SO_DISCDATALEN     0x7006
+#define SO_DISCOPTLEN      0x7007
+#else
+#define WS_SO_CONNDATA     0x7000
+#define WS_SO_CONNOPT      0x7001
+#define WS_SO_DISCDATA     0x7002
+#define WS_SO_DISCOPT      0x7003
+#define WS_SO_CONNDATALEN  0x7004
+#define WS_SO_CONNOPTLEN   0x7005
+#define WS_SO_DISCDATALEN  0x7006
+#define WS_SO_DISCOPTLEN   0x7007
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_OPENTYPE     0x7008
+#else
+#define WS_SO_OPENTYPE  0x7008
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_SYNCHRONOUS_ALERT       0x10
+#define SO_SYNCHRONOUS_NONALERT    0x20
+#else
+#define WS_SO_SYNCHRONOUS_ALERT    0x10
+#define WS_SO_SYNCHRONOUS_NONALERT 0x20
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_MAXDG                      0x7009
+#define SO_MAXPATHDG                  0x700A
+#define SO_UPDATE_ACCEPT_CONTEXT      0x700B
+#define SO_CONNECT_TIME               0x700C
+#define SO_UPDATE_CONNECT_CONTEXT     0x7010
+#else
+#define WS_SO_MAXDG                   0x7009
+#define WS_SO_MAXPATHDG               0x700A
+#define WS_SO_UPDATE_ACCEPT_CONTEXT   0x700B
+#define WS_SO_CONNECT_TIME            0x700C
+#define WS_SO_UPDATE_CONNECT_CONTEXT  0x7010
+#endif
+
+#ifndef USE_WS_PREFIX
+#define TCP_BSDURGENT              0x7000
+#else
+#define WS_TCP_BSDURGENT              0x7000
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
+#define SIO_SET_COMPATIBILITY_MODE _WSAIOW(IOC_VENDOR,300)
+#else
+#define WS_SIO_UDP_CONNRESET _WSAIOW(WS_IOC_VENDOR,12)
+#define WS_SIO_SET_COMPATIBILITY_MODE _WSAIOW(WS_IOC_VENDOR,300)
+#endif
+
+#define DE_REUSE_SOCKET TF_REUSE_SOCKET
+
+#ifndef USE_WS_PREFIX
+#define MSG_TRUNC   0x0100
+#define MSG_CTRUNC  0x0200
+#define MSG_BCAST   0x0400
+#define MSG_MCAST   0x0800
+#else
+#define WS_MSG_TRUNC   0x0100
+#define WS_MSG_CTRUNC  0x0200
+#define WS_MSG_BCAST   0x0400
+#define WS_MSG_MCAST   0x0800
+#endif
+
+#define TF_DISCONNECT          0x01
+#define TF_REUSE_SOCKET        0x02
+#define TF_WRITE_BEHIND        0x04
+#define TF_USE_DEFAULT_WORKER  0x00
+#define TF_USE_SYSTEM_THREAD   0x10
+#define TF_USE_KERNEL_APC      0x20
+
+#define TP_DISCONNECT           TF_DISCONNECT
+#define TP_REUSE_SOCKET         TF_REUSE_SOCKET
+#define TP_USE_DEFAULT_WORKER   TF_USE_DEFAULT_WORKER
+#define TP_USE_SYSTEM_THREAD    TF_USE_SYSTEM_THREAD
+#define TP_USE_KERNEL_APC       TF_USE_KERNEL_APC
+
+#define TP_ELEMENT_MEMORY   1
+#define TP_ELEMENT_FILE     2
+#define TP_ELEMENT_EOP      4
+
+#define WSAID_ACCEPTEX \
+	{0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_CONNECTEX \
+	{0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
+#define WSAID_DISCONNECTEX \
+	{0x7fda2e11,0x8630,0x436f,{0xa0,0x31,0xf5,0x36,0xa6,0xee,0xc1,0x57}}
+#define WSAID_GETACCEPTEXSOCKADDRS \
+	{0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITFILE \
+	{0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITPACKETS \
+	{0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}
+#define WSAID_WSARECVMSG \
+	{0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
+#define WSAID_WSASENDMSG \
+	{0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}}
+
+typedef struct _TRANSMIT_FILE_BUFFERS {
+    LPVOID  Head;
+    DWORD   HeadLength;
+    LPVOID  Tail;
+    DWORD   TailLength;
+} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
+
+typedef struct _TRANSMIT_PACKETS_ELEMENT {
+    ULONG  dwElFlags;
+    ULONG  cLength;
+    union {
+      struct {
+	LARGE_INTEGER  nFileOffset;
+	HANDLE         hFile;
+      } DUMMYSTRUCTNAME;
+      PVOID  pBuffer;
+    } DUMMYUNIONNAME;
+} TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, *LPTRANSMIT_PACKETS_ELEMENT;
+
+typedef struct _WSACMSGHDR {
+    SIZE_T      cmsg_len;
+    INT         cmsg_level;
+    INT         cmsg_type;
+    /* followed by UCHAR cmsg_data[] */
+} WSACMSGHDR, *PWSACMSGHDR, *LPWSACMSGHDR;
+
+typedef BOOL (WINAPI * LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
+typedef BOOL (WINAPI * LPFN_CONNECTEX)(SOCKET, const struct WS(sockaddr) *, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED);
+typedef BOOL (WINAPI * LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD);
+typedef VOID (WINAPI * LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT);
+typedef BOOL (WINAPI * LPFN_TRANSMITFILE)(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
+typedef BOOL (WINAPI * LPFN_TRANSMITPACKETS)(SOCKET, LPTRANSMIT_PACKETS_ELEMENT, DWORD, DWORD, LPOVERLAPPED, DWORD);
+typedef INT  (WINAPI * LPFN_WSARECVMSG)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef INT  (WINAPI * LPFN_WSASENDMSG)(SOCKET, LPWSAMSG, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+
+BOOL WINAPI AcceptEx(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
+VOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT);
+BOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
+INT  WINAPI WSARecvEx(SOCKET, char *, INT, INT *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef WS
+
+#endif /* _MSWSOCK_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h
new file mode 100644
index 0000000..c5829c4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h
@@ -0,0 +1,1773 @@
+/*** Autogenerated by WIDL 1.1.36 from msxml.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_MSXML_H
+#define __WIDL_MSXML_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <wtypes.h>
+#include <objidl.h>
+#include <oaidl.h>
+
+/* Forward declarations */
+
+#ifndef __IXMLElementCollection_FWD_DEFINED__
+#define __IXMLElementCollection_FWD_DEFINED__
+typedef interface IXMLElementCollection IXMLElementCollection;
+#endif
+
+#ifndef __IXMLElement_FWD_DEFINED__
+#define __IXMLElement_FWD_DEFINED__
+typedef interface IXMLElement IXMLElement;
+#endif
+
+#ifndef __IXMLDocument_FWD_DEFINED__
+#define __IXMLDocument_FWD_DEFINED__
+typedef interface IXMLDocument IXMLDocument;
+#endif
+
+#ifndef __IXMLElement2_FWD_DEFINED__
+#define __IXMLElement2_FWD_DEFINED__
+typedef interface IXMLElement2 IXMLElement2;
+#endif
+
+#ifndef __IXMLDocument2_FWD_DEFINED__
+#define __IXMLDocument2_FWD_DEFINED__
+typedef interface IXMLDocument2 IXMLDocument2;
+#endif
+
+#ifndef __IXMLAttribute_FWD_DEFINED__
+#define __IXMLAttribute_FWD_DEFINED__
+typedef interface IXMLAttribute IXMLAttribute;
+#endif
+
+#ifndef __IXMLError_FWD_DEFINED__
+#define __IXMLError_FWD_DEFINED__
+typedef interface IXMLError IXMLError;
+#endif
+
+#ifndef __IXMLElementNotificationSink_FWD_DEFINED__
+#define __IXMLElementNotificationSink_FWD_DEFINED__
+typedef interface IXMLElementNotificationSink IXMLElementNotificationSink;
+#endif
+
+#ifndef __XMLDocument_FWD_DEFINED__
+#define __XMLDocument_FWD_DEFINED__
+typedef struct XMLDocument XMLDocument;
+#endif /* defined __XMLDocument_FWD_DEFINED__ */
+
+
+/*****************************************************************************
+ * IXMLElementCollection interface
+ */
+#ifndef __IXMLElementCollection_INTERFACE_DEFINED__
+#define __IXMLElementCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElementCollection, 0x65725580, 0x9b5d, 0x11d0, 0x9b,0xfe, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElementCollection : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE put_length(
+        LONG v) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_length(
+        LONG *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get__newEnum(
+        IUnknown **ppUnk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE item(
+        VARIANT var1,
+        VARIANT var2,
+        IDispatch **ppDisp) = 0;
+
+};
+#else
+typedef struct IXMLElementCollectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLElementCollection* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLElementCollection* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLElementCollection* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLElementCollection* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLElementCollection* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLElementCollection* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLElementCollection* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLElementCollection methods ***/
+    HRESULT (STDMETHODCALLTYPE *put_length)(
+        IXMLElementCollection* This,
+        LONG v);
+
+    HRESULT (STDMETHODCALLTYPE *get_length)(
+        IXMLElementCollection* This,
+        LONG *p);
+
+    HRESULT (STDMETHODCALLTYPE *get__newEnum)(
+        IXMLElementCollection* This,
+        IUnknown **ppUnk);
+
+    HRESULT (STDMETHODCALLTYPE *item)(
+        IXMLElementCollection* This,
+        VARIANT var1,
+        VARIANT var2,
+        IDispatch **ppDisp);
+
+    END_INTERFACE
+} IXMLElementCollectionVtbl;
+interface IXMLElementCollection {
+    CONST_VTBL IXMLElementCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElementCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElementCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElementCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElementCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElementCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElementCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElementCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElementCollection methods ***/
+#define IXMLElementCollection_put_length(This,v) (This)->lpVtbl->put_length(This,v)
+#define IXMLElementCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
+#define IXMLElementCollection_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
+#define IXMLElementCollection_item(This,var1,var2,ppDisp) (This)->lpVtbl->item(This,var1,var2,ppDisp)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_put_length_Proxy(
+    IXMLElementCollection* This,
+    LONG v);
+void __RPC_STUB IXMLElementCollection_put_length_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_get_length_Proxy(
+    IXMLElementCollection* This,
+    LONG *p);
+void __RPC_STUB IXMLElementCollection_get_length_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_get__newEnum_Proxy(
+    IXMLElementCollection* This,
+    IUnknown **ppUnk);
+void __RPC_STUB IXMLElementCollection_get__newEnum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_item_Proxy(
+    IXMLElementCollection* This,
+    VARIANT var1,
+    VARIANT var2,
+    IDispatch **ppDisp);
+void __RPC_STUB IXMLElementCollection_item_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLElementCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLElement interface
+ */
+#ifndef __IXMLElement_INTERFACE_DEFINED__
+#define __IXMLElement_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElement, 0x3f7f31ac, 0xe15f, 0x11d0, 0x9c,0x25, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElement : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_tagName(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_tagName(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_parent(
+        IXMLElement **parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE setAttribute(
+        BSTR strPropertyName,
+        VARIANT PropertyValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getAttribute(
+        BSTR strPropertyName,
+        VARIANT *PropertyValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE removeAttribute(
+        BSTR strPropertyName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_children(
+        IXMLElementCollection **p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_type(
+        LONG *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_text(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_text(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE addChild(
+        IXMLElement *pChildElem,
+        LONG lIndex,
+        LONG lreserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE removeChild(
+        IXMLElement *pChildElem) = 0;
+
+};
+#else
+typedef struct IXMLElementVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLElement* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLElement* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLElement* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLElement* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLElement* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLElement* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLElement* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLElement methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_tagName)(
+        IXMLElement* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_tagName)(
+        IXMLElement* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *get_parent)(
+        IXMLElement* This,
+        IXMLElement **parent);
+
+    HRESULT (STDMETHODCALLTYPE *setAttribute)(
+        IXMLElement* This,
+        BSTR strPropertyName,
+        VARIANT PropertyValue);
+
+    HRESULT (STDMETHODCALLTYPE *getAttribute)(
+        IXMLElement* This,
+        BSTR strPropertyName,
+        VARIANT *PropertyValue);
+
+    HRESULT (STDMETHODCALLTYPE *removeAttribute)(
+        IXMLElement* This,
+        BSTR strPropertyName);
+
+    HRESULT (STDMETHODCALLTYPE *get_children)(
+        IXMLElement* This,
+        IXMLElementCollection **p);
+
+    HRESULT (STDMETHODCALLTYPE *get_type)(
+        IXMLElement* This,
+        LONG *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_text)(
+        IXMLElement* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_text)(
+        IXMLElement* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *addChild)(
+        IXMLElement* This,
+        IXMLElement *pChildElem,
+        LONG lIndex,
+        LONG lreserved);
+
+    HRESULT (STDMETHODCALLTYPE *removeChild)(
+        IXMLElement* This,
+        IXMLElement *pChildElem);
+
+    END_INTERFACE
+} IXMLElementVtbl;
+interface IXMLElement {
+    CONST_VTBL IXMLElementVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElement_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElement_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElement methods ***/
+#define IXMLElement_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
+#define IXMLElement_put_tagName(This,p) (This)->lpVtbl->put_tagName(This,p)
+#define IXMLElement_get_parent(This,parent) (This)->lpVtbl->get_parent(This,parent)
+#define IXMLElement_setAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->setAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement_getAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->getAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement_removeAttribute(This,strPropertyName) (This)->lpVtbl->removeAttribute(This,strPropertyName)
+#define IXMLElement_get_children(This,p) (This)->lpVtbl->get_children(This,p)
+#define IXMLElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
+#define IXMLElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
+#define IXMLElement_put_text(This,p) (This)->lpVtbl->put_text(This,p)
+#define IXMLElement_addChild(This,pChildElem,lIndex,lreserved) (This)->lpVtbl->addChild(This,pChildElem,lIndex,lreserved)
+#define IXMLElement_removeChild(This,pChildElem) (This)->lpVtbl->removeChild(This,pChildElem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElement_get_tagName_Proxy(
+    IXMLElement* This,
+    BSTR *p);
+void __RPC_STUB IXMLElement_get_tagName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_put_tagName_Proxy(
+    IXMLElement* This,
+    BSTR p);
+void __RPC_STUB IXMLElement_put_tagName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_parent_Proxy(
+    IXMLElement* This,
+    IXMLElement **parent);
+void __RPC_STUB IXMLElement_get_parent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_setAttribute_Proxy(
+    IXMLElement* This,
+    BSTR strPropertyName,
+    VARIANT PropertyValue);
+void __RPC_STUB IXMLElement_setAttribute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_getAttribute_Proxy(
+    IXMLElement* This,
+    BSTR strPropertyName,
+    VARIANT *PropertyValue);
+void __RPC_STUB IXMLElement_getAttribute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_removeAttribute_Proxy(
+    IXMLElement* This,
+    BSTR strPropertyName);
+void __RPC_STUB IXMLElement_removeAttribute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_children_Proxy(
+    IXMLElement* This,
+    IXMLElementCollection **p);
+void __RPC_STUB IXMLElement_get_children_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_type_Proxy(
+    IXMLElement* This,
+    LONG *p);
+void __RPC_STUB IXMLElement_get_type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_text_Proxy(
+    IXMLElement* This,
+    BSTR *p);
+void __RPC_STUB IXMLElement_get_text_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_put_text_Proxy(
+    IXMLElement* This,
+    BSTR p);
+void __RPC_STUB IXMLElement_put_text_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_addChild_Proxy(
+    IXMLElement* This,
+    IXMLElement *pChildElem,
+    LONG lIndex,
+    LONG lreserved);
+void __RPC_STUB IXMLElement_addChild_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_removeChild_Proxy(
+    IXMLElement* This,
+    IXMLElement *pChildElem);
+void __RPC_STUB IXMLElement_removeChild_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLElement_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLDocument interface
+ */
+#ifndef __IXMLDocument_INTERFACE_DEFINED__
+#define __IXMLDocument_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLDocument, 0xf52e2b61, 0x18a1, 0x11d1, 0xb1,0x05, 0x00,0x80,0x5f,0x49,0x91,0x6b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLDocument : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_root(
+        IXMLElement **p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_fileSize(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_fileModifiedDate(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_fileUpdatedDate(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_URL(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_URL(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_mimeType(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_readyState(
+        LONG *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_charset(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_charset(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_version(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_doctype(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_dtdURl(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE createElement(
+        VARIANT vType,
+        VARIANT var1,
+        IXMLElement **ppElem) = 0;
+
+};
+#else
+typedef struct IXMLDocumentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLDocument* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLDocument* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLDocument* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLDocument* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLDocument* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLDocument* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLDocument* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLDocument methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_root)(
+        IXMLDocument* This,
+        IXMLElement **p);
+
+    HRESULT (STDMETHODCALLTYPE *get_fileSize)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_fileModifiedDate)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_fileUpdatedDate)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_URL)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_URL)(
+        IXMLDocument* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *get_mimeType)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_readyState)(
+        IXMLDocument* This,
+        LONG *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_charset)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_charset)(
+        IXMLDocument* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *get_version)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_doctype)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_dtdURl)(
+        IXMLDocument* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *createElement)(
+        IXMLDocument* This,
+        VARIANT vType,
+        VARIANT var1,
+        IXMLElement **ppElem);
+
+    END_INTERFACE
+} IXMLDocumentVtbl;
+interface IXMLDocument {
+    CONST_VTBL IXMLDocumentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLDocument_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLDocument methods ***/
+#define IXMLDocument_get_root(This,p) (This)->lpVtbl->get_root(This,p)
+#define IXMLDocument_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
+#define IXMLDocument_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
+#define IXMLDocument_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
+#define IXMLDocument_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
+#define IXMLDocument_put_URL(This,p) (This)->lpVtbl->put_URL(This,p)
+#define IXMLDocument_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
+#define IXMLDocument_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
+#define IXMLDocument_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
+#define IXMLDocument_put_charset(This,p) (This)->lpVtbl->put_charset(This,p)
+#define IXMLDocument_get_version(This,p) (This)->lpVtbl->get_version(This,p)
+#define IXMLDocument_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
+#define IXMLDocument_get_dtdURl(This,p) (This)->lpVtbl->get_dtdURl(This,p)
+#define IXMLDocument_createElement(This,vType,var1,ppElem) (This)->lpVtbl->createElement(This,vType,var1,ppElem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_root_Proxy(
+    IXMLDocument* This,
+    IXMLElement **p);
+void __RPC_STUB IXMLDocument_get_root_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_fileSize_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_fileSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_fileModifiedDate_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_fileModifiedDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_fileUpdatedDate_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_fileUpdatedDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_URL_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_URL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_put_URL_Proxy(
+    IXMLDocument* This,
+    BSTR p);
+void __RPC_STUB IXMLDocument_put_URL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_mimeType_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_mimeType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_readyState_Proxy(
+    IXMLDocument* This,
+    LONG *p);
+void __RPC_STUB IXMLDocument_get_readyState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_charset_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_charset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_put_charset_Proxy(
+    IXMLDocument* This,
+    BSTR p);
+void __RPC_STUB IXMLDocument_put_charset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_version_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_version_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_doctype_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_doctype_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_dtdURl_Proxy(
+    IXMLDocument* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument_get_dtdURl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_createElement_Proxy(
+    IXMLDocument* This,
+    VARIANT vType,
+    VARIANT var1,
+    IXMLElement **ppElem);
+void __RPC_STUB IXMLDocument_createElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLDocument_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLElement2 interface
+ */
+#ifndef __IXMLElement2_INTERFACE_DEFINED__
+#define __IXMLElement2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElement2, 0x2b8de2ff, 0x8d2d, 0x11d1, 0xb2,0xfc, 0x00,0xc0,0x4f,0xd9,0x15,0xa9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElement2 : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_tagName(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_tagName(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_parent(
+        IXMLElement2 **ppParent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE setAttribute(
+        BSTR strPropertyName,
+        VARIANT PropertyValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE getAttribute(
+        BSTR strPropertyName,
+        VARIANT *PropertyValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE removeAttribute(
+        BSTR strPropertyName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_children(
+        IXMLElementCollection **pp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_type(
+        LONG *plType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_text(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_text(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE addChild(
+        IXMLElement2 *pChildElem,
+        LONG lIndex,
+        LONG lReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE removeChild(
+        IXMLElement2 *pChildElem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_attributes(
+        IXMLElementCollection **pp) = 0;
+
+};
+#else
+typedef struct IXMLElement2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLElement2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLElement2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLElement2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLElement2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLElement2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLElement2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLElement2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLElement2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_tagName)(
+        IXMLElement2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_tagName)(
+        IXMLElement2* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *get_parent)(
+        IXMLElement2* This,
+        IXMLElement2 **ppParent);
+
+    HRESULT (STDMETHODCALLTYPE *setAttribute)(
+        IXMLElement2* This,
+        BSTR strPropertyName,
+        VARIANT PropertyValue);
+
+    HRESULT (STDMETHODCALLTYPE *getAttribute)(
+        IXMLElement2* This,
+        BSTR strPropertyName,
+        VARIANT *PropertyValue);
+
+    HRESULT (STDMETHODCALLTYPE *removeAttribute)(
+        IXMLElement2* This,
+        BSTR strPropertyName);
+
+    HRESULT (STDMETHODCALLTYPE *get_children)(
+        IXMLElement2* This,
+        IXMLElementCollection **pp);
+
+    HRESULT (STDMETHODCALLTYPE *get_type)(
+        IXMLElement2* This,
+        LONG *plType);
+
+    HRESULT (STDMETHODCALLTYPE *get_text)(
+        IXMLElement2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_text)(
+        IXMLElement2* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *addChild)(
+        IXMLElement2* This,
+        IXMLElement2 *pChildElem,
+        LONG lIndex,
+        LONG lReserved);
+
+    HRESULT (STDMETHODCALLTYPE *removeChild)(
+        IXMLElement2* This,
+        IXMLElement2 *pChildElem);
+
+    HRESULT (STDMETHODCALLTYPE *get_attributes)(
+        IXMLElement2* This,
+        IXMLElementCollection **pp);
+
+    END_INTERFACE
+} IXMLElement2Vtbl;
+interface IXMLElement2 {
+    CONST_VTBL IXMLElement2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElement2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElement2 methods ***/
+#define IXMLElement2_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
+#define IXMLElement2_put_tagName(This,p) (This)->lpVtbl->put_tagName(This,p)
+#define IXMLElement2_get_parent(This,ppParent) (This)->lpVtbl->get_parent(This,ppParent)
+#define IXMLElement2_setAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->setAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement2_getAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->getAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement2_removeAttribute(This,strPropertyName) (This)->lpVtbl->removeAttribute(This,strPropertyName)
+#define IXMLElement2_get_children(This,pp) (This)->lpVtbl->get_children(This,pp)
+#define IXMLElement2_get_type(This,plType) (This)->lpVtbl->get_type(This,plType)
+#define IXMLElement2_get_text(This,p) (This)->lpVtbl->get_text(This,p)
+#define IXMLElement2_put_text(This,p) (This)->lpVtbl->put_text(This,p)
+#define IXMLElement2_addChild(This,pChildElem,lIndex,lReserved) (This)->lpVtbl->addChild(This,pChildElem,lIndex,lReserved)
+#define IXMLElement2_removeChild(This,pChildElem) (This)->lpVtbl->removeChild(This,pChildElem)
+#define IXMLElement2_get_attributes(This,pp) (This)->lpVtbl->get_attributes(This,pp)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_tagName_Proxy(
+    IXMLElement2* This,
+    BSTR *p);
+void __RPC_STUB IXMLElement2_get_tagName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_put_tagName_Proxy(
+    IXMLElement2* This,
+    BSTR p);
+void __RPC_STUB IXMLElement2_put_tagName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_parent_Proxy(
+    IXMLElement2* This,
+    IXMLElement2 **ppParent);
+void __RPC_STUB IXMLElement2_get_parent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_setAttribute_Proxy(
+    IXMLElement2* This,
+    BSTR strPropertyName,
+    VARIANT PropertyValue);
+void __RPC_STUB IXMLElement2_setAttribute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_getAttribute_Proxy(
+    IXMLElement2* This,
+    BSTR strPropertyName,
+    VARIANT *PropertyValue);
+void __RPC_STUB IXMLElement2_getAttribute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_removeAttribute_Proxy(
+    IXMLElement2* This,
+    BSTR strPropertyName);
+void __RPC_STUB IXMLElement2_removeAttribute_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_children_Proxy(
+    IXMLElement2* This,
+    IXMLElementCollection **pp);
+void __RPC_STUB IXMLElement2_get_children_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_type_Proxy(
+    IXMLElement2* This,
+    LONG *plType);
+void __RPC_STUB IXMLElement2_get_type_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_text_Proxy(
+    IXMLElement2* This,
+    BSTR *p);
+void __RPC_STUB IXMLElement2_get_text_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_put_text_Proxy(
+    IXMLElement2* This,
+    BSTR p);
+void __RPC_STUB IXMLElement2_put_text_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_addChild_Proxy(
+    IXMLElement2* This,
+    IXMLElement2 *pChildElem,
+    LONG lIndex,
+    LONG lReserved);
+void __RPC_STUB IXMLElement2_addChild_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_removeChild_Proxy(
+    IXMLElement2* This,
+    IXMLElement2 *pChildElem);
+void __RPC_STUB IXMLElement2_removeChild_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_attributes_Proxy(
+    IXMLElement2* This,
+    IXMLElementCollection **pp);
+void __RPC_STUB IXMLElement2_get_attributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLElement2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLDocument2 interface
+ */
+#ifndef __IXMLDocument2_INTERFACE_DEFINED__
+#define __IXMLDocument2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLDocument2, 0x2b8de2fe, 0x8d2d, 0x11d1, 0xb2,0xfc, 0x00,0xc0,0x4f,0xd9,0x15,0xa9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLDocument2 : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_root(
+        IXMLElement2 **p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_fileSize(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_fileModifiedDate(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_fileUpdatedDate(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_URL(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_URL(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_mimeType(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_readyState(
+        LONG *pl) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_charset(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_charset(
+        BSTR p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_version(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_doctype(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_dtdURL(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE createElement(
+        VARIANT vType,
+        VARIANT var,
+        IXMLElement2 **ppElem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_async(
+        VARIANT_BOOL *pf) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE put_async(
+        VARIANT_BOOL f) = 0;
+
+};
+#else
+typedef struct IXMLDocument2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLDocument2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLDocument2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLDocument2* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLDocument2* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLDocument2* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLDocument2* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLDocument2* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLDocument2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_root)(
+        IXMLDocument2* This,
+        IXMLElement2 **p);
+
+    HRESULT (STDMETHODCALLTYPE *get_fileSize)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_fileModifiedDate)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_fileUpdatedDate)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_URL)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_URL)(
+        IXMLDocument2* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *get_mimeType)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_readyState)(
+        IXMLDocument2* This,
+        LONG *pl);
+
+    HRESULT (STDMETHODCALLTYPE *get_charset)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *put_charset)(
+        IXMLDocument2* This,
+        BSTR p);
+
+    HRESULT (STDMETHODCALLTYPE *get_version)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_doctype)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_dtdURL)(
+        IXMLDocument2* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *createElement)(
+        IXMLDocument2* This,
+        VARIANT vType,
+        VARIANT var,
+        IXMLElement2 **ppElem);
+
+    HRESULT (STDMETHODCALLTYPE *get_async)(
+        IXMLDocument2* This,
+        VARIANT_BOOL *pf);
+
+    HRESULT (STDMETHODCALLTYPE *put_async)(
+        IXMLDocument2* This,
+        VARIANT_BOOL f);
+
+    END_INTERFACE
+} IXMLDocument2Vtbl;
+interface IXMLDocument2 {
+    CONST_VTBL IXMLDocument2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLDocument2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLDocument2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLDocument2 methods ***/
+#define IXMLDocument2_get_root(This,p) (This)->lpVtbl->get_root(This,p)
+#define IXMLDocument2_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
+#define IXMLDocument2_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
+#define IXMLDocument2_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
+#define IXMLDocument2_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
+#define IXMLDocument2_put_URL(This,p) (This)->lpVtbl->put_URL(This,p)
+#define IXMLDocument2_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
+#define IXMLDocument2_get_readyState(This,pl) (This)->lpVtbl->get_readyState(This,pl)
+#define IXMLDocument2_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
+#define IXMLDocument2_put_charset(This,p) (This)->lpVtbl->put_charset(This,p)
+#define IXMLDocument2_get_version(This,p) (This)->lpVtbl->get_version(This,p)
+#define IXMLDocument2_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
+#define IXMLDocument2_get_dtdURL(This,p) (This)->lpVtbl->get_dtdURL(This,p)
+#define IXMLDocument2_createElement(This,vType,var,ppElem) (This)->lpVtbl->createElement(This,vType,var,ppElem)
+#define IXMLDocument2_get_async(This,pf) (This)->lpVtbl->get_async(This,pf)
+#define IXMLDocument2_put_async(This,f) (This)->lpVtbl->put_async(This,f)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_root_Proxy(
+    IXMLDocument2* This,
+    IXMLElement2 **p);
+void __RPC_STUB IXMLDocument2_get_root_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_fileSize_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_fileSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_fileModifiedDate_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_fileModifiedDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_fileUpdatedDate_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_fileUpdatedDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_URL_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_URL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_put_URL_Proxy(
+    IXMLDocument2* This,
+    BSTR p);
+void __RPC_STUB IXMLDocument2_put_URL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_mimeType_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_mimeType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_readyState_Proxy(
+    IXMLDocument2* This,
+    LONG *pl);
+void __RPC_STUB IXMLDocument2_get_readyState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_charset_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_charset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_put_charset_Proxy(
+    IXMLDocument2* This,
+    BSTR p);
+void __RPC_STUB IXMLDocument2_put_charset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_version_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_version_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_doctype_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_doctype_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_dtdURL_Proxy(
+    IXMLDocument2* This,
+    BSTR *p);
+void __RPC_STUB IXMLDocument2_get_dtdURL_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_createElement_Proxy(
+    IXMLDocument2* This,
+    VARIANT vType,
+    VARIANT var,
+    IXMLElement2 **ppElem);
+void __RPC_STUB IXMLDocument2_createElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_async_Proxy(
+    IXMLDocument2* This,
+    VARIANT_BOOL *pf);
+void __RPC_STUB IXMLDocument2_get_async_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_put_async_Proxy(
+    IXMLDocument2* This,
+    VARIANT_BOOL f);
+void __RPC_STUB IXMLDocument2_put_async_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLDocument2_INTERFACE_DEFINED__ */
+
+typedef enum tagXMLEMEM_TYPE {
+    XMLELEMTYPE_ELEMENT = 0,
+    XMLELEMTYPE_TEXT = 1,
+    XMLELEMTYPE_COMMENT = 2,
+    XMLELEMTYPE_DOCUMENT = 3,
+    XMLELEMTYPE_DTD = 4,
+    XMLELEMTYPE_PI = 5,
+    XMLELEMTYPE_OTHER = 6
+} XMLELEM_TYPE;
+typedef struct _xml_error {
+    UINT _nLine;
+    BSTR _pchBuf;
+    BSTR _cchBuf;
+    UINT _ich;
+    BSTR _pszFound;
+    BSTR _pszExpected;
+    DWORD _reserved1;
+    DWORD _reserved2;
+} XML_ERROR;
+/*****************************************************************************
+ * IXMLAttribute interface
+ */
+#ifndef __IXMLAttribute_INTERFACE_DEFINED__
+#define __IXMLAttribute_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLAttribute, 0xd4d4a0fc, 0x3b73, 0x11d1, 0xb2,0xb4, 0x00,0xc0,0x4f,0xb9,0x25,0x96);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLAttribute : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE get_name(
+        BSTR *p) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_value(
+        BSTR *p) = 0;
+
+};
+#else
+typedef struct IXMLAttributeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLAttribute* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLAttribute* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLAttribute* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLAttribute* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLAttribute* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLAttribute* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLAttribute* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLAttribute methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_name)(
+        IXMLAttribute* This,
+        BSTR *p);
+
+    HRESULT (STDMETHODCALLTYPE *get_value)(
+        IXMLAttribute* This,
+        BSTR *p);
+
+    END_INTERFACE
+} IXMLAttributeVtbl;
+interface IXMLAttribute {
+    CONST_VTBL IXMLAttributeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLAttribute_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLAttribute methods ***/
+#define IXMLAttribute_get_name(This,p) (This)->lpVtbl->get_name(This,p)
+#define IXMLAttribute_get_value(This,p) (This)->lpVtbl->get_value(This,p)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLAttribute_get_name_Proxy(
+    IXMLAttribute* This,
+    BSTR *p);
+void __RPC_STUB IXMLAttribute_get_name_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLAttribute_get_value_Proxy(
+    IXMLAttribute* This,
+    BSTR *p);
+void __RPC_STUB IXMLAttribute_get_value_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLAttribute_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLError interface
+ */
+#ifndef __IXMLError_INTERFACE_DEFINED__
+#define __IXMLError_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLError, 0x948c5ad3, 0xc58d, 0x11d0, 0x9c,0x0b, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLError : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetErrorInfo(
+        XML_ERROR *pErrorReturn) = 0;
+
+};
+#else
+typedef struct IXMLErrorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLError* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLError* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLError* This);
+
+    /*** IXMLError methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetErrorInfo)(
+        IXMLError* This,
+        XML_ERROR *pErrorReturn);
+
+    END_INTERFACE
+} IXMLErrorVtbl;
+interface IXMLError {
+    CONST_VTBL IXMLErrorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLError_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLError_Release(This) (This)->lpVtbl->Release(This)
+/*** IXMLError methods ***/
+#define IXMLError_GetErrorInfo(This,pErrorReturn) (This)->lpVtbl->GetErrorInfo(This,pErrorReturn)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLError_GetErrorInfo_Proxy(
+    IXMLError* This,
+    XML_ERROR *pErrorReturn);
+void __RPC_STUB IXMLError_GetErrorInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLError_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLElementNotificationSink interface
+ */
+#ifndef __IXMLElementNotificationSink_INTERFACE_DEFINED__
+#define __IXMLElementNotificationSink_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElementNotificationSink, 0xd9f1e15a, 0xccdb, 0x11d0, 0x9c,0x0c, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElementNotificationSink : public IDispatch
+{
+    virtual HRESULT STDMETHODCALLTYPE ChildAdded(
+        IDispatch *pChildElem) = 0;
+
+};
+#else
+typedef struct IXMLElementNotificationSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IXMLElementNotificationSink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IXMLElementNotificationSink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IXMLElementNotificationSink* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IXMLElementNotificationSink* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IXMLElementNotificationSink* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IXMLElementNotificationSink* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IXMLElementNotificationSink* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    /*** IXMLElementNotificationSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *ChildAdded)(
+        IXMLElementNotificationSink* This,
+        IDispatch *pChildElem);
+
+    END_INTERFACE
+} IXMLElementNotificationSinkVtbl;
+interface IXMLElementNotificationSink {
+    CONST_VTBL IXMLElementNotificationSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElementNotificationSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElementNotificationSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElementNotificationSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElementNotificationSink_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElementNotificationSink_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElementNotificationSink_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElementNotificationSink_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElementNotificationSink methods ***/
+#define IXMLElementNotificationSink_ChildAdded(This,pChildElem) (This)->lpVtbl->ChildAdded(This,pChildElem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElementNotificationSink_ChildAdded_Proxy(
+    IXMLElementNotificationSink* This,
+    IDispatch *pChildElem);
+void __RPC_STUB IXMLElementNotificationSink_ChildAdded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IXMLElementNotificationSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * XMLDocument coclass
+ */
+
+DEFINE_GUID(CLSID_XMLDocument, 0xcfc399af, 0xd876, 0x11d0, 0x9c,0x10, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_MSXML_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl
new file mode 100644
index 0000000..6d24ca8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl
@@ -0,0 +1,366 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <msxmldid.h>
+#include <msxml2did.h>
+#include <idispids.h>
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "wtypes.idl";
+import "objidl.idl";
+import "oaidl.idl";
+#endif
+
+[
+    uuid(d63e0ce2-a0a2-11d0-9c02-00c04fc99c8e),
+    version(2.0),
+    helpstring("Microsoft XML, v2.0")
+]
+library MSXML
+{
+
+importlib("stdole2.tlb");
+
+#include <xmldom.idl>
+#include <xmldso.idl>
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e)
+]
+interface IXMLElementCollection : IDispatch
+{
+    [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+    HRESULT length( [in] LONG v );
+
+    [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+    HRESULT length( [retval, out] LONG *p );
+
+    [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)]
+    HRESULT _newEnum( [retval, out] IUnknown ** ppUnk );
+
+    [id(DISPID_XMLELEMENTCOLLECTION_ITEM)]
+    HRESULT item(
+            [optional, in] VARIANT var1,
+            [optional, in] VARIANT var2,
+            [retval, out] IDispatch ** ppDisp );
+}
+
+[
+local,
+object,
+uuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e)
+]
+interface IXMLElement : IDispatch
+{
+    [propget, id(DISPID_XMLELEMENT_TAGNAME)]
+    HRESULT tagName( [retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLELEMENT_TAGNAME)]
+    HRESULT tagName( [in] BSTR p );
+
+    [propget, id(DISPID_XMLELEMENT_PARENT)]
+    HRESULT parent( [retval, out] IXMLElement **parent );
+
+    [id(DISPID_XMLELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+            [in] BSTR strPropertyName,
+            [in] VARIANT PropertyValue );
+
+    [id(DISPID_XMLELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+            [in] BSTR strPropertyName,
+            [retval, out] VARIANT *PropertyValue );
+
+    [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+            [in] BSTR strPropertyName );
+
+    [propget, id(DISPID_XMLELEMENT_CHILDREN)]
+    HRESULT children( [retval, out] IXMLElementCollection **p );
+
+    [propget, id(DISPID_XMLELEMENT_TYPE)]
+    HRESULT type( [retval, out] LONG *p );
+
+    [propget, id(DISPID_XMLELEMENT_TEXT)]
+    HRESULT text( [retval, out] BSTR *p );
+
+    [propput, id(DISPID_XMLELEMENT_TEXT)]
+    HRESULT text( [in] BSTR p );
+
+    [id(DISPID_XMLELEMENT_ADDCHILD)]
+    HRESULT addChild(
+            [in] IXMLElement *pChildElem,
+            [in] LONG lIndex,
+            [in] LONG lreserved );
+
+    [id(DISPID_XMLELEMENT_REMOVECHILD)]
+    HRESULT removeChild(
+            [in] IXMLElement *pChildElem );
+}
+
+[
+local,
+object,
+uuid(f52e2b61-18a1-11d1-b105-00805f49916b)
+]
+interface IXMLDocument : IDispatch
+{
+    [propget, id(DISPID_XMLDOCUMENT_ROOT)]
+    HRESULT root( [retval, out] IXMLElement **p );
+
+    [propget, id(DISPID_XMLDOCUMENT_FILESIZE)]
+    HRESULT fileSize( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)]
+    HRESULT fileModifiedDate( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)]
+    HRESULT fileUpdatedDate( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_URL)]
+    HRESULT URL( [retval, out] BSTR *p );
+
+    [propput, id(DISPID_XMLDOCUMENT_URL)]
+    HRESULT URL( [in] BSTR p );
+
+    [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)]
+    HRESULT mimeType( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_READYSTATE)]
+    HRESULT readyState( [retval, out] LONG *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_CHARSET)]
+    HRESULT charset( [retval, out] BSTR *p );
+
+    [propput, id(DISPID_XMLDOCUMENT_CHARSET)]
+    HRESULT charset( [in] BSTR p );
+
+    [propget, id(DISPID_XMLDOCUMENT_VERSION)]
+    HRESULT version( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)]
+    HRESULT doctype( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLDOCUMENT_DTDURL)]
+    HRESULT dtdURl( [retval, out] BSTR *p );
+
+    [id(DISPID_XMLDOCUMENT_CREATEELEMENT)]
+    HRESULT createElement(
+            [in] VARIANT vType,
+            [optional, in] VARIANT var1,
+            [retval, out] IXMLElement **ppElem );
+}
+
+[
+local,
+object,
+uuid(2B8DE2FF-8D2D-11d1-B2FC-00C04FD915A9)
+]
+interface IXMLElement2 : IDispatch
+{
+    [propget, id(DISPID_XMLELEMENT_TAGNAME)]
+    HRESULT tagName([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLELEMENT_TAGNAME)]
+    HRESULT tagName([in] BSTR p);
+
+    [propget, id(DISPID_XMLELEMENT_PARENT)]
+    HRESULT parent([retval, out]IXMLElement2 **ppParent);
+
+    [id(DISPID_XMLELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR strPropertyName,
+        [in] VARIANT PropertyValue);
+
+    [id(DISPID_XMLELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR strPropertyName,
+        [retval, out] VARIANT *PropertyValue);
+
+    [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute([in] BSTR strPropertyName);
+
+    [propget, id(DISPID_XMLELEMENT_CHILDREN)]
+    HRESULT children([retval, out] IXMLElementCollection **pp);
+
+    [propget, id(DISPID_XMLELEMENT_TYPE)]
+    HRESULT type([retval, out] LONG *plType);
+
+    [propget, id(DISPID_XMLELEMENT_TEXT)]
+    HRESULT text([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLELEMENT_TEXT)]
+    HRESULT text([in] BSTR p);
+
+    [id(DISPID_XMLELEMENT_ADDCHILD)]
+    HRESULT addChild(
+        [in] IXMLElement2 *pChildElem,
+        [in] LONG lIndex,
+        [in] LONG lReserved);
+
+    [id(DISPID_XMLELEMENT_REMOVECHILD)]
+    HRESULT removeChild([in]IXMLElement2 *pChildElem);
+
+    [propget, id(DISPID_XMLELEMENT_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IXMLElementCollection **pp); 
+}
+
+[
+local,
+object,
+uuid(2B8DE2FE-8D2D-11d1-B2FC-00C04FD915A9)
+]
+interface IXMLDocument2 : IDispatch
+{
+    [propget, id(DISPID_XMLDOCUMENT_ROOT)]
+    HRESULT root([retval, out] IXMLElement2 **p);
+
+    [propget, id(DISPID_XMLDOCUMENT_FILESIZE)]
+    HRESULT fileSize([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)]
+    HRESULT fileModifiedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)]
+    HRESULT fileUpdatedDate([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOCUMENT_URL)]
+    HRESULT URL([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOCUMENT_URL)]
+    HRESULT URL([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)]
+    HRESULT mimeType([retval, out] BSTR *p);
+   
+    [propget, id(DISPID_XMLDOCUMENT_READYSTATE)]
+    HRESULT readyState([retval, out]LONG *pl);
+
+    [propget, id(DISPID_XMLDOCUMENT_CHARSET)]
+    HRESULT charset([retval, out]BSTR *p);
+
+    [propput, id(DISPID_XMLDOCUMENT_CHARSET)]
+    HRESULT charset([in]BSTR p);
+
+    [propget, id(DISPID_XMLDOCUMENT_VERSION)]
+    HRESULT version([retval, out]BSTR *p);
+
+    [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)]
+    HRESULT doctype([retval, out]BSTR *p);
+
+    [propget, restricted, id(DISPID_XMLDOCUMENT_DTDURL)]
+    HRESULT dtdURL([retval, out]BSTR *p);
+
+    [id(DISPID_XMLDOCUMENT_CREATEELEMENT)]
+    HRESULT createElement(
+        [in] VARIANT vType, 
+        [optional, in] VARIANT var, 
+        [retval, out] IXMLElement2 **ppElem);
+
+    [propget, id(DISPID_XMLDOCUMENT_ASYNC)]
+    HRESULT async([retval, out] VARIANT_BOOL *pf);
+
+    [propput, id(DISPID_XMLDOCUMENT_ASYNC)]
+    HRESULT async([in] VARIANT_BOOL f);
+}
+
+typedef enum tagXMLEMEM_TYPE {
+	XMLELEMTYPE_ELEMENT	= 0,
+	XMLELEMTYPE_TEXT 	= 1,
+	XMLELEMTYPE_COMMENT	= 2,
+	XMLELEMTYPE_DOCUMENT	= 3,
+	XMLELEMTYPE_DTD		= 4,
+	XMLELEMTYPE_PI		= 5,
+	XMLELEMTYPE_OTHER	= 6
+} XMLELEM_TYPE;
+
+typedef struct _xml_error {
+	UINT _nLine;
+	BSTR _pchBuf;
+	BSTR _cchBuf;
+	UINT _ich;
+	BSTR _pszFound;
+	BSTR _pszExpected;
+	DWORD _reserved1;
+	DWORD _reserved2;
+} XML_ERROR;
+
+[
+local,
+object,
+uuid(d4d4a0fc-3b73-11d1-b2b4-00c04fb92596)
+]
+interface IXMLAttribute : IDispatch
+{
+    [propget, id(DISPID_XMLATTRIBUTE_NAME)]
+    HRESULT name( [retval, out] BSTR *p );
+
+    [propget, id(DISPID_XMLATTRIBUTE_VALUE)]
+    HRESULT value( [retval, out] BSTR *p );
+}
+
+[
+local,
+object,
+uuid(948c5ad3-c58d-11d0-9c0b-00c04fc99c8e)
+]
+interface IXMLError : IUnknown
+{
+    HRESULT GetErrorInfo([out]XML_ERROR *pErrorReturn);
+}
+
+[
+    object,
+    local,
+    uuid(D9F1E15A-CCDB-11d0-9C0C-00C04FC99C8E)
+]
+interface IXMLElementNotificationSink : IDispatch
+{
+    [id(DISPID_XMLNOTIFSINK_CHILDADDED)] 
+    HRESULT ChildAdded([in]IDispatch *pChildElem); 
+}
+
+[
+    helpstring("Msxml"),
+    progid("Msxml"),
+    threading(both),
+    version(1.0),
+    uuid(cfc399af-d876-11d0-9c10-00c04fc99c8e)
+]
+coclass XMLDocument
+{
+    [default] interface IXMLDocument;
+}
+
+} /* Library MSXML */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl
new file mode 100644
index 0000000..8c75bf1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl
@@ -0,0 +1,3576 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <msxml2did.h>
+#include <idispids.h>
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
+    version(3.0),
+    helpstring("Microsoft XML, v3.0")
+]
+library MSXML2
+{
+
+importlib("stdole2.tlb");
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMSchemaCollection;
+interface IXMLDOMDocument2;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+interface IXMLDOMParseErrorCollection;
+interface IXTLRuntime;
+interface IXSLTemplate;
+interface IXSLProcessor;
+
+/* SAX Interfaces */
+interface ISAXAttributes;
+interface ISAXContentHandler;
+interface ISAXDeclHandler;
+interface ISAXDTDHandler;
+interface ISAXEntityResolver;
+interface ISAXErrorHandler;
+interface ISAXLexicalHandler;
+interface ISAXLocator;
+interface ISAXXMLFilter;
+interface ISAXXMLReader;
+
+interface IVBSAXAttributes;
+interface IVBSAXContentHandler;
+interface IVBSAXDeclHandler;
+interface IVBSAXDTDHandler;
+interface IVBSAXEntityResolver;
+interface IVBSAXErrorHandler;
+interface IVBSAXLexicalHandler;
+interface IVBSAXLocator;
+interface IVBSAXXMLFilter;
+interface IVBSAXXMLReader;
+
+interface IMXAttributes;
+interface IMXReaderControl;
+interface IMXWriter;
+
+interface IXMLDOMSchemaCollection2;
+interface ISchemaStringCollection;
+interface ISchemaItemCollection;
+interface ISchemaItem;
+interface ISchema;
+interface ISchemaParticle;
+interface ISchemaAttribute;
+interface ISchemaElement;
+interface ISchemaType;
+interface ISchemaComplexType;
+interface ISchemaAttributeGroup;
+interface ISchemaModelGroup;
+interface ISchemaAny;
+interface ISchemaIdentityConstraint;
+interface ISchemaNotation;
+
+
+cpp_quote("#define DOMDocument DOMDocument2")
+cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2")
+
+cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
+cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
+typedef enum tagDOMNodeType 
+{  
+    NODE_INVALID  		= 0,
+    NODE_ELEMENT  		= 1,
+    NODE_ATTRIBUTE		= 2,
+    NODE_TEXT			= 3,
+    NODE_CDATA_SECTION		= 4,
+    NODE_ENTITY_REFERENCE 	= 5,
+    NODE_ENTITY 		= 6,
+    NODE_PROCESSING_INSTRUCTION = 7,
+    NODE_COMMENT		= 8,
+    NODE_DOCUMENT		= 9,
+    NODE_DOCUMENT_TYPE		= 10,
+    NODE_DOCUMENT_FRAGMENT 	= 11,
+    NODE_NOTATION 		= 12
+} DOMNodeType;
+cpp_quote("#endif")
+
+typedef enum _SOMITEMTYPE
+{
+    SOMITEM_SCHEMA                      = 0x1000,
+    SOMITEM_ATTRIBUTE                   = 0x1001,
+    SOMITEM_ATTRIBUTEGROUP              = 0x1002,
+    SOMITEM_NOTATION                    = 0x1003,
+    SOMITEM_IDENTITYCONSTRAINT          = 0x1100,
+    SOMITEM_KEY                         = 0x1101,
+    SOMITEM_KEYREF                      = 0x1102,
+    SOMITEM_UNIQUE                      = 0x1103,
+    SOMITEM_ANYTYPE                     = 0x2000,
+    SOMITEM_DATATYPE                    = 0x2100,
+    SOMITEM_DATATYPE_ANYTYPE            = 0x2101,
+    SOMITEM_DATATYPE_ANYURI             = 0x2102,
+    SOMITEM_DATATYPE_BASE64BINARY       = 0x2103,
+    SOMITEM_DATATYPE_BOOLEAN            = 0x2104,
+    SOMITEM_DATATYPE_BYTE               = 0x2105,
+    SOMITEM_DATATYPE_DATE               = 0x2106,
+    SOMITEM_DATATYPE_DATETIME           = 0x2107,
+    SOMITEM_DATATYPE_DAY                = 0x2108,
+    SOMITEM_DATATYPE_DECIMAL            = 0x2109,
+    SOMITEM_DATATYPE_DOUBLE             = 0x210A,
+    SOMITEM_DATATYPE_DURATION           = 0x210B,
+    SOMITEM_DATATYPE_ENTITIES           = 0x210C,
+    SOMITEM_DATATYPE_ENTITY             = 0x210D,
+    SOMITEM_DATATYPE_FLOAT              = 0x210E,
+    SOMITEM_DATATYPE_HEXBINARY          = 0x210F,
+    SOMITEM_DATATYPE_ID                 = 0x2110,
+    SOMITEM_DATATYPE_IDREF              = 0x2111,
+    SOMITEM_DATATYPE_IDREFS             = 0x2112,
+    SOMITEM_DATATYPE_INT                = 0x2113,
+    SOMITEM_DATATYPE_INTEGER            = 0x2114,
+    SOMITEM_DATATYPE_LANGUAGE           = 0x2115,
+    SOMITEM_DATATYPE_LONG               = 0x2116,
+    SOMITEM_DATATYPE_MONTH              = 0x2117,
+    SOMITEM_DATATYPE_MONTHDAY           = 0x2118,
+    SOMITEM_DATATYPE_NAME               = 0x2119,
+    SOMITEM_DATATYPE_NCNAME             = 0x211A,
+    SOMITEM_DATATYPE_NEGATIVEINTEGER    = 0x211B,
+    SOMITEM_DATATYPE_NMTOKEN            = 0x211C,
+    SOMITEM_DATATYPE_NMTOKENS           = 0x211D,
+    SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,
+    SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,
+    SOMITEM_DATATYPE_NORMALIZEDSTRING   = 0x2120,
+    SOMITEM_DATATYPE_NOTATION           = 0x2121,
+    SOMITEM_DATATYPE_POSITIVEINTEGER    = 0x2122,
+    SOMITEM_DATATYPE_QNAME              = 0x2123,
+    SOMITEM_DATATYPE_SHORT              = 0x2124,
+    SOMITEM_DATATYPE_STRING             = 0x2125,
+    SOMITEM_DATATYPE_TIME               = 0x2126,
+    SOMITEM_DATATYPE_TOKEN              = 0x2127,
+    SOMITEM_DATATYPE_UNSIGNEDBYTE       = 0x2128,
+    SOMITEM_DATATYPE_UNSIGNEDINT        = 0x2129,
+    SOMITEM_DATATYPE_UNSIGNEDLONG       = 0x212A,
+    SOMITEM_DATATYPE_UNSIGNEDSHORT      = 0x212B,
+    SOMITEM_DATATYPE_YEAR               = 0x212C,
+    SOMITEM_DATATYPE_YEARMONTH          = 0x212D,
+    SOMITEM_DATATYPE_ANYSIMPLETYPE      = 0x21FF,
+    SOMITEM_SIMPLETYPE                  = 0x2200,
+    SOMITEM_COMPLEXTYPE                 = 0x2400,
+    SOMITEM_PARTICLE                    = 0x4000,
+    SOMITEM_ANY                         = 0x4001,
+    SOMITEM_ANYATTRIBUTE                = 0x4002,
+    SOMITEM_ELEMENT                     = 0x4003,
+    SOMITEM_GROUP                       = 0x4100,
+    SOMITEM_ALL                         = 0x4101,
+    SOMITEM_CHOICE                      = 0x4102,
+    SOMITEM_SEQUENCE                    = 0x4103,
+    SOMITEM_EMPTYPARTICLE               = 0x4104,
+    SOMITEM_NULL                        = 0x0800,
+    SOMITEM_NULL_TYPE                   = 0x2800,
+    SOMITEM_NULL_ANY                    = 0x4801,
+    SOMITEM_NULL_ANYATTRIBUTE           = 0x4802,
+    SOMITEM_NULL_ELEMENT                = 0x4803,
+} SOMITEMTYPE;
+
+typedef enum _SCHEMAUSE
+{
+    SCHEMAUSE_OPTIONAL,
+    SCHEMAUSE_PROHIBITED,
+    SCHEMAUSE_REQUIRED,
+} SCHEMAUSE;
+
+typedef enum _SCHEMADERIVATIONMETHOD
+{
+    SCHEMADERIVATIONMETHOD_EMPTY        = 0x0000,
+    SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,
+    SCHEMADERIVATIONMETHOD_EXTENSION    = 0x0002,
+    SCHEMADERIVATIONMETHOD_RESTRICTION  = 0x0004,
+    SCHEMADERIVATIONMETHOD_LIST         = 0x0008,
+    SCHEMADERIVATIONMETHOD_UNION        = 0x0010,
+    SCHEMADERIVATIONMETHOD_ALL          = 0x00FF,
+    SCHEMADERIVATIONMETHOD_NONE         = 0x0100,
+} SCHEMADERIVATIONMETHOD;
+
+typedef enum _SCHEMACONTENTTYPE
+{
+    SCHEMACONTENTTYPE_EMPTY,
+    SCHEMACONTENTTYPE_TEXTONLY,
+    SCHEMACONTENTTYPE_ELEMENTONLY,
+    SCHEMACONTENTTYPE_MIXED,
+} SCHEMACONTENTTYPE;
+
+typedef enum _SCHEMAPROCESSCONTENTS
+{
+    SCHEMAPROCESSCONTENTS_NONE,
+    SCHEMAPROCESSCONTENTS_SKIP,
+    SCHEMAPROCESSCONTENTS_LAX,
+    SCHEMAPROCESSCONTENTS_STRICT,
+} SCHEMAPROCESSCONTENTS;
+
+typedef enum _SCHEMAWHITESPACE
+{
+    SCHEMAWHITESPACE_NONE       = -1,
+    SCHEMAWHITESPACE_PRESERVE   =  0,
+    SCHEMAWHITESPACE_REPLACE    =  1,
+    SCHEMAWHITESPACE_COLLAPSE   =  2,
+} SCHEMAWHITESPACE;
+
+
+typedef enum _SCHEMATYPEVARIETY
+{
+    SCHEMATYPEVARIETY_NONE      = -1,
+    SCHEMATYPEVARIETY_ATOMIC    =  0,
+    SCHEMATYPEVARIETY_LIST      =  1,
+    SCHEMATYPEVARIETY_UNION     =  2,
+} SCHEMATYPEVARIETY;
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e)
+]
+interface IXMLElementCollection : IDispatch
+{
+    [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+    HRESULT length( [in] LONG v );
+
+    [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+    HRESULT length( [retval, out] LONG *p );
+
+    [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)]
+    HRESULT _newEnum( [retval, out] IUnknown ** ppUnk );
+
+    [id(DISPID_XMLELEMENTCOLLECTION_ITEM)]
+    HRESULT item(
+            [optional, in] VARIANT var1,
+            [optional, in] VARIANT var2,
+            [retval, out] IDispatch ** ppDisp );
+}
+
+[
+local,
+object,
+uuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e)
+]
+interface IXMLElement : IDispatch
+{
+    [propget, id(DISPID_XMLELEMENT_TAGNAME)]
+    HRESULT tagName( [retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLELEMENT_TAGNAME)]
+    HRESULT tagName( [in] BSTR p );
+
+    [propget, id(DISPID_XMLELEMENT_PARENT)]
+    HRESULT parent( [retval, out] IXMLElement **parent );
+
+    [id(DISPID_XMLELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+            [in] BSTR strPropertyName,
+            [in] VARIANT PropertyValue );
+
+    [id(DISPID_XMLELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+            [in] BSTR strPropertyName,
+            [retval, out] VARIANT *PropertyValue );
+
+    [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+            [in] BSTR strPropertyName );
+
+    [propget, id(DISPID_XMLELEMENT_CHILDREN)]
+    HRESULT children( [retval, out] IXMLElementCollection **p );
+
+    [propget, id(DISPID_XMLELEMENT_TYPE)]
+    HRESULT type( [retval, out] LONG *p );
+
+    [propget, id(DISPID_XMLELEMENT_TEXT)]
+    HRESULT text( [retval, out] BSTR *p );
+
+    [propput, id(DISPID_XMLELEMENT_TEXT)]
+    HRESULT text( [in] BSTR p );
+
+    [id(DISPID_XMLELEMENT_ADDCHILD)]
+    HRESULT addChild(
+            [in] IXMLElement *pChildElem,
+            [in] LONG lIndex,
+            [in] LONG lreserved );
+
+    [id(DISPID_XMLELEMENT_REMOVECHILD)]
+    HRESULT removeChild(
+            [in] IXMLElement *pChildElem );
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNode : IDispatch
+{
+    [propget, id(DISPID_DOM_NODE_NODENAME)]
+    HRESULT nodeName([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue([in] VARIANT var1);
+
+    [propget, id(DISPID_DOM_NODE_NODETYPE)]
+    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);
+
+    [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+    HRESULT parentNode([retval, out] IXMLDOMNode **parent);
+
+    [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);
+
+    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);
+
+    [id(DISPID_DOM_NODE_INSERTBEFORE)]
+    HRESULT insertBefore(
+        [in] IXMLDOMNode *newNode,
+        [in] VARIANT var1,
+        [retval, out] IXMLDOMNode **outOldNode);
+
+    [id(DISPID_DOM_NODE_REPLACECHILD)]
+    HRESULT replaceChild(
+        [in] IXMLDOMNode *newNode,
+        [in] IXMLDOMNode *oldNode,
+        [retval, out] IXMLDOMNode **outOldNode);
+
+    [id(DISPID_DOM_NODE_REMOVECHILD)]
+    HRESULT removeChild(
+        [in] IXMLDOMNode *domNode,
+        [retval, out] IXMLDOMNode **oldNode);
+
+    [id(DISPID_DOM_NODE_APPENDCHILD)]
+    HRESULT appendChild(
+        [in] IXMLDOMNode *newNode,
+        [retval, out] IXMLDOMNode **outNewNode);
+
+    [id(DISPID_DOM_NODE_HASCHILDNODES)]
+    HRESULT hasChildNodes(
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);
+
+    [id(DISPID_DOM_NODE_CLONENODE)]
+    HRESULT cloneNode(
+        [in] VARIANT_BOOL pbool,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+    HRESULT nodeTypeString([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+    HRESULT specified([retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+    HRESULT definition([retval,out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue([in] VARIANT var1);
+
+    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_NODE_XML)]
+    HRESULT xml([retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+    HRESULT transformNode(
+        [in] IXMLDOMNode *domNode,
+        [retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+    HRESULT selectNodes(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **outList);
+
+    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+    HRESULT selectSingleNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget,id(DISPID_XMLDOM_NODE_PARSED)]
+    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+    HRESULT namespaceURI([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+    HRESULT prefix([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+    HRESULT baseName([retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+    HRESULT transformNodeToObject(
+        [in] IXMLDOMNode *domNode,
+        [in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);
+
+    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);
+
+    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);
+
+    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement([in] IXMLDOMElement *domElement);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+    HRESULT createElement(
+        [in] BSTR p,
+        [retval, out] IXMLDOMElement **domElement);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+    HRESULT createDocumentFragment(
+        [retval, out] IXMLDOMDocumentFragment **docFrag);
+
+    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+    HRESULT createTextNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMText **text);
+
+    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+    HRESULT createComment(
+        [in] BSTR p,
+        [retval, out] IXMLDOMComment **comment);
+
+    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+    HRESULT createCDATASection(
+        [in] BSTR p,
+        [retval, out] IXMLDOMCDATASection **cdata);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+    HRESULT createProcessingInstruction(
+        [in] BSTR target,
+        [in] BSTR data,
+        [retval, out] IXMLDOMProcessingInstruction **pi);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+    HRESULT createAttribute(
+        [in] BSTR p,
+        [retval, out] IXMLDOMAttribute **attribute);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+    HRESULT createEntityReference(
+        [in] BSTR p,
+        [retval, out] IXMLDOMEntityReference **entityRef);
+
+    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **resultList);
+
+    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+    HRESULT createNode(
+        [in] VARIANT var, 
+        [in] BSTR name, 
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+    HRESULT nodeFromID( 
+        [in] BSTR id,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+    HRESULT load(
+        [in] VARIANT var1,
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_READYSTATE)]
+    HRESULT readyState([retval, out] LONG *value);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+    HRESULT parseError([retval, out] IXMLDOMParseError **err);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async([retval, out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async([in] VARIANT_BOOL pbool);
+
+    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+    HRESULT abort();
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+    HRESULT loadXML( 
+        [in] BSTR p,
+        [out, retval] VARIANT_BOOL *pbool);
+
+    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+    HRESULT save( 
+        [in] VARIANT var1);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse([in] VARIANT_BOOL pbool);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals([in] VARIANT_BOOL pbool);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange([in] VARIANT var1);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable([in] VARIANT var1);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+    HRESULT ontransformnode([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (373984c8-b845-449b-91e7-45ac83036ade)
+]
+interface IXMLDOMSchemaCollection : IDispatch
+{
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
+    HRESULT add(
+        [in] BSTR uri,
+        [in] VARIANT var);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
+    HRESULT get(
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
+    HRESULT remove(
+        [in] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
+    HRESULT length(
+        [retval, out] LONG *length);
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
+    HRESULT addCollection(
+        [in] IXMLDOMSchemaCollection *otherCollection);
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),
+]
+interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection
+{
+    [id(DISPID_SOM_VALIDATE)]
+    HRESULT validate();
+
+    [propput, id(DISPID_SOM_VALIDATEONLOAD)]
+    HRESULT validateOnLoad(
+        [in] VARIANT_BOOL validateOnLoad);
+
+    [propget, id(DISPID_SOM_VALIDATEONLOAD)]
+    HRESULT validateOnLoad(
+        [out,retval] VARIANT_BOOL* validateOnLoad);
+
+    [id(DISPID_SOM_GETSCHEMA)]
+    HRESULT getSchema(
+        [in] BSTR namespaceURI,
+        [out,retval] ISchema** schema);
+
+    [id(DISPID_SOM_GETDECLARATION)]
+    HRESULT getDeclaration(
+        [in] IXMLDOMNode* node,
+        [out,retval]ISchemaItem** item);
+};
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument2 : IXMLDOMDocument
+{
+    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
+    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+    HRESULT schemas([retval, out] VARIANT *var1);
+
+    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+    HRESULT schemas([in] VARIANT var1);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
+    HRESULT validate(
+        [retval, out] IXMLDOMParseError **err);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
+    HRESULT setProperty(
+        [in] BSTR p,
+        [in] VARIANT var);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR p,
+        [retval, out] VARIANT *var);
+}
+
+[
+    local,
+    object,
+    dual,
+    uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),
+    oleautomation,
+]
+interface IXMLDOMDocument3 : IXMLDOMDocument2
+{
+    [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]
+    HRESULT validateNode(
+        [in] IXMLDOMNode *node,
+        [out, retval] IXMLDOMParseError **error);
+
+    [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]
+    HRESULT importNode(
+        [in] IXMLDOMNode *node,
+        [in] VARIANT_BOOL deep,
+        [out, retval] IXMLDOMNode **clone);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length([retval, out] LONG *lLength);
+
+    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+    HRESULT nextNode(
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NODELIST_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
+]
+interface IXMLDOMSelection : IXMLDOMNodeList
+{
+    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
+    HRESULT expr([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
+    HRESULT expr([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+    HRESULT context([retval, out] IXMLDOMNode **ppNode);
+
+    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+    HRESULT context([in] IXMLDOMNode * pNode);
+
+    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
+    HRESULT peekNode(
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_MATCHES)]
+    HRESULT matches(
+        [in] IXMLDOMNode *pNode,
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)] 
+    HRESULT removeNext(
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
+    HRESULT removeAll();
+
+    [id(DISPID_XMLDOM_SELECTION_CLONE)]
+    HRESULT clone(
+        [retval, out] IXMLDOMSelection **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR p,
+        [retval, out] VARIANT * var);
+
+    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
+    HRESULT setProperty(
+        [in] BSTR p,
+        [in] VARIANT var);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+    HRESULT getNamedItem(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+    HRESULT setNamedItem(
+        [in] IXMLDOMNode *newNode,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+    HRESULT removeNamedItem(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length([retval, out] LONG *lLength);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+    HRESULT getQualifiedItem(
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+    HRESULT removeQualifiedItem(
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+    HRESULT nextNode(
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+ 
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa413-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode 
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propput, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data([in] BSTR data);
+
+    [propget, id(DISPID_DOM_DATA_LENGTH)]
+    HRESULT length([retval, out] LONG *len);
+
+    [id(DISPID_DOM_DATA_SUBSTRING)]
+    HRESULT substringData(
+        [in] LONG offset,
+        [in] LONG count,
+        [retval, out] BSTR *p);
+
+    [id(DISPID_DOM_DATA_APPEND)]
+    HRESULT appendData(
+        [in] BSTR p);
+
+    [id(DISPID_DOM_DATA_INSERT)]
+    HRESULT insertData(
+        [in] LONG offset,
+        [in] BSTR p);
+
+    [id(DISPID_DOM_DATA_DELETE)]
+    HRESULT deleteData(
+        [in] LONG offset,
+        [in] LONG count);
+
+    [id(DISPID_DOM_DATA_REPLACE)]
+    HRESULT replaceData(
+        [in] LONG offset,
+        [in] LONG count,
+        [in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMAttribute : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMElement : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+    HRESULT tagName([retval, out] BSTR *p);
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR p,
+        [retval, out] VARIANT *var);
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR p,
+        [in] VARIANT var);
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+        [in] BSTR p);
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+    HRESULT getAttributeNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+    HRESULT setAttributeNode(
+        [in] IXMLDOMAttribute *domAttribute,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+    HRESULT removeAttributeNode(
+        [in] IXMLDOMAttribute *domAttribute,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **resultList);
+
+    [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+    HRESULT normalize();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMText : IXMLDOMCharacterData 
+{
+    [id(DISPID_DOM_TEXT_SPLITTEXT)]
+    HRESULT splitText(
+        [in] LONG offset,
+        [retval, out] IXMLDOMText **txtNode);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData 
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_PI_TARGET)]
+    HRESULT target([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_PI_DATA)]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propput, id(DISPID_DOM_PI_DATA)]
+    HRESULT data([in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCDATASection : IXMLDOMText 
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNotation : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+    HRESULT publicId([retval, out] VARIANT *id);
+
+    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+    HRESULT systemId([retval, out] VARIANT *id);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntity : IXMLDOMNode 
+{
+    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+    HRESULT publicId([retval, out] VARIANT *id1);
+
+    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+    HRESULT systemId([retval, out] VARIANT *id1);
+
+    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+    HRESULT notationName([retval, out] BSTR *p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode 
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+    HRESULT hasFeature(
+        [in] BSTR feature,
+        [in] BSTR version,
+        [retval, out] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa425-272f-11d2-836f-0000f87a7782)
+]
+interface IXTLRuntime : IXMLDOMNode
+{
+    [id(DISPID_XTLRUNTIME_UNIQUEID)] 
+    HRESULT uniqueID(
+        [in]IXMLDOMNode *pNode, 
+        [retval, out]LONG *pID);
+
+    [id(DISPID_XTLRUNTIME_DEPTH)]
+    HRESULT depth(
+        [in] IXMLDOMNode *pNode, 
+        [retval, out]LONG * pDepth);
+
+    [id(DISPID_XTLRUNTIME_CHILDNUMBER)] 
+    HRESULT childNumber(
+        [in]IXMLDOMNode *pNode, 
+        [retval, out] LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
+    HRESULT ancestorChildNumber(
+        [in]BSTR bstr, 
+        [in]IXMLDOMNode *pNode, 
+        [retval, out]LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
+    HRESULT absoluteChildNumber(
+        [in]IXMLDOMNode *pNode, 
+        [retval, out]LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_FORMATINDEX)]
+    HRESULT formatIndex(
+        [in] LONG lIndex,
+        [in] BSTR bstr, 
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
+    HRESULT formatNumber(
+        [in] double dblNumber, 
+        [in] BSTR bstr, 
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATDATE)]
+    HRESULT formatDate(
+        [in] VARIANT var1, 
+        [in] BSTR bstr, 
+        [optional, in] VARIANT var2,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATTIME)]
+    HRESULT formatTime(
+        [in] VARIANT var1, 
+        [in] BSTR bstr, 
+        [optional, in] VARIANT var2,
+        [retval, out]BSTR *pbstr);
+
+}
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(310afa62-0575-11d2-9ca9-0060b0ec3d39),
+pointer_default(unique)
+]
+interface IDSOControl : IDispatch
+{
+	[propget,id(DISPID_XMLDSO_DOCUMENT)]
+        HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc);
+
+	[propput,id(DISPID_XMLDSO_DOCUMENT)]
+        HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc);
+
+	[propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]
+        HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible);
+
+	[propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]
+        HRESULT JavaDSOCompatible([in]  BOOL fJavaDSOCompatible);
+
+	[propget, id(DISPID_READYSTATE)]
+        HRESULT readyState([out, retval] long *state);
+}
+
+[
+    uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents 
+{
+    properties:
+    methods:
+    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]  
+    HRESULT ondataavailable();
+ 
+    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)] 
+    HRESULT onreadystatechange();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLProcessor : IDispatch
+{
+    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+    HRESULT input([in] VARIANT var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+    HRESULT input([retval, out] VARIANT *var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
+    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);
+
+    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
+    HRESULT setStartMode(
+        [in] BSTR p, 
+        [in, defaultvalue("")] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
+    HRESULT startMode([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
+    HRESULT startModeURI([retval, out] BSTR *uri);
+
+    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+    HRESULT output([in] VARIANT var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+    HRESULT output([retval, out] VARIANT *var);
+
+    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
+    HRESULT transform(
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [id(DISPID_XMLDOM_PROCESSOR_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
+    HRESULT readyState([retval, out] LONG *pstate);
+
+    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
+    HRESULT addParameter(
+        [in] BSTR p, 
+        [in] VARIANT var, 
+        [in, defaultvalue("")] BSTR uri);
+
+    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
+    HRESULT addObject(
+        [in] IDispatch* obj, 
+        [in] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
+    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+} 
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLTemplate : IDispatch
+{
+    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+    HRESULT stylesheet([in] IXMLDOMNode *node);
+
+    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
+    HRESULT createProcessor(
+        [retval, out] IXSLProcessor **ppProcessor);
+} 
+
+[
+    object,
+    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
+    odl,
+    dual,
+    oleautomation,
+    pointer_default(unique)
+]
+interface IXMLHTTPRequest : IDispatch
+{
+    [id(1)]
+    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
+                 [in,optional] VARIANT username, [in,optional] VARIANT password);
+
+    [id(2)]
+    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+    [id(3)]
+    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);
+
+    [id(4)]
+    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);
+
+    [id(5)]
+    HRESULT send([in, optional] VARIANT body);
+
+    [id(6)]
+    HRESULT abort();
+
+    [propget, id(7)]
+    HRESULT status([out, retval] LONG *pStatus);
+
+    [propget, id(8)]
+    HRESULT statusText([out, retval] BSTR *pStatus);
+
+    [propget, id(9)]
+    HRESULT responseXML([out, retval] IDispatch **pBody);
+
+    [propget, id(10)]
+    HRESULT responseText([out, retval] BSTR *pBody);
+
+    [propget, id(11)]
+    HRESULT responseBody([out, retval] VARIANT *pBody);
+
+    [propget, id(12)]
+    HRESULT responseStream([out, retval] VARIANT *pBody);
+
+    [propget, id(13)]
+    HRESULT readyState([out, retval] LONG *pState);
+
+    [propput, id(14)]
+    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+};
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)
+]
+interface IServerXMLHTTPRequest : IXMLHTTPRequest
+{
+    typedef enum _SERVERXMLHTTP_OPTION
+    {
+        SXH_OPTION_URL = -1,
+        SXH_OPTION_URL_CODEPAGE,
+        SXH_OPTION_ESCAPE_PERCENT_IN_URL,
+        SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,
+        SXH_OPTION_SELECT_CLIENT_SSL_CERT
+    } SERVERXMLHTTP_OPTION;
+
+    [id(15)]
+    HRESULT setTimeouts(
+        [in] long resolveTimeout,
+        [in] long connectTimeout,
+        [in] long sendTimeout,
+        [in] long receiveTimeout);
+
+    [id(16)]
+    HRESULT waitForResponse(
+        [in, optional] VARIANT timeoutInSeconds,
+        [out, retval] VARIANT_BOOL * isSuccessful);
+
+    [id(17)]
+    HRESULT getOption(
+        [in] SERVERXMLHTTP_OPTION option,
+        [out, retval] VARIANT * value);
+
+    [id(18)]
+    HRESULT setOption(
+        [in] SERVERXMLHTTP_OPTION option,
+        [in] VARIANT value);
+}
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)
+]
+interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest
+{
+    typedef enum _SXH_PROXY_SETTING
+    {
+        SXH_PROXY_SET_DEFAULT = 0,
+        SXH_PROXY_SET_PRECONFIG = 0,
+        SXH_PROXY_SET_DIRECT,
+        SXH_PROXY_SET_PROXY
+    } SXH_PROXY_SETTING;
+
+    [id(19)]
+    HRESULT setProxy(
+        [in] SXH_PROXY_SETTING proxySetting,
+        [in, optional] VARIANT varProxyServer,
+        [in, optional] VARIANT varBypassList);
+
+    [id(20)]
+    HRESULT setProxyCredentials(
+        [in] BSTR bstrUserName,
+        [in] BSTR bstrPassword);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT errorCode([retval, out] LONG *errCode);
+
+    [propget, id(DISPID_DOM_ERROR_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_REASON)]
+    HRESULT reason([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+    HRESULT srcText([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_LINE)]
+    HRESULT line([retval, out] LONG *lineNo);
+
+    [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+    HRESULT linepos([retval, out] LONG * linePos);
+
+    [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+    HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa428-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError2 : IXMLDOMParseError
+{
+    [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]
+    HRESULT errorXPath([retval, out] BSTR *xpathexpr);
+
+    [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]
+    HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);
+
+    [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]
+    HRESULT errorParameters(
+        [in] long index,
+        [retval, out] BSTR *param);
+
+    [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]
+    HRESULT errorParametersCount([retval, out] long *count);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa429-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseErrorCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item(
+        [in] long index,
+        [retval, out] IXMLDOMParseError2 **error);
+
+    [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]
+    HRESULT length( [retval, out] long *length);
+
+    [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]
+    HRESULT next( [retval, out] IXMLDOMParseError2 **error);
+
+    [id(DISPID_DOM_ERRORCOLLECTION_RESET)]
+    HRESULT reset();
+
+    [propget, hidden, restricted, id(DISPID_NEWENUM)]
+    HRESULT _newEnum( [retval, out] IUnknown **ppunk);
+}
+
+[
+    uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument26
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("XML DOM Document 3.0"),
+    progid("Msxml2.DOMDocument.3.0"),
+    vi_progid("Msxml2.DOMDocument"),
+    threading(both),
+    uuid(f5078f32-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument30
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(88d969c0-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument40
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(88d96a05-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument60
+{
+    [default] interface IXMLDOMDocument3;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("XML DOM Document"),
+    progid("Msxml2.DOMDocument"),
+    vi_progid("Msxml2.DOMDocument"),
+    threading(both),
+    uuid(f6d90f11-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass DOMDocument
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument26
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("Free threaded XML DOM Document 3.0"),
+    progid("Msxml2.FreeThreadedDOMDocument.3.0"),
+    vi_progid("Msxml2.FreeThreadedDOMDocument"),
+    threading(both),
+    uuid(f5078f33-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument30
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(88d969c1-f192-11d4-a65f-0040963251e5)
+]
+coclass FreeThreadedDOMDocument40
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(88d96a06-f192-11d4-a65f-0040963251e5),
+]
+coclass FreeThreadedDOMDocument60
+{
+    [default] interface IXMLDOMDocument3;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("Free threaded XML DOM Document"),
+    progid("Msxml2.FreeThreadedDOMDocument"),
+    vi_progid("Msxml2.FreeThreadedDOMDocument"),
+    threading(both),
+    uuid(f6d90f12-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass FreeThreadedDOMDocument
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP26
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    helpstring("XML HTTP 3.0"),
+    progid("Msxml2.XMLHTTP.3.0"),
+    vi_progid("Msxml2.XMLHTTP"),
+    threading(apartment),
+    uuid(f5078f35-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP30
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(88d969c5-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP40
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(88d96a0a-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP60
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    helpstring("XML HTTP"),
+    progid("Msxml2.XMLHTTP"),
+    vi_progid("Msxml2.XMLHTTP"),
+    threading(apartment),
+    uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass XMLHTTP
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    helpstring("Server XML HTTP 3.0"),
+    progid("Msxml2.ServerXMLHTTP.3.0"),
+    vi_progid("Msxml2.ServerXMLHTTP"),
+    threading(apartment),
+    uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3)
+]
+coclass ServerXMLHTTP30
+{
+    [default] interface IServerXMLHTTPRequest;
+}
+
+[
+    uuid(88d969c6-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP40
+{
+    [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+    uuid(88d96a0b-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP60
+{
+    [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+    helpstring("Server XML HTTP"),
+    progid("Msxml2.ServerXMLHTTP"),
+    vi_progid("Msxml2.ServerXMLHTTP"),
+    threading(apartment),
+    uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1)
+]
+coclass ServerXMLHTTP
+{
+    [default] interface IServerXMLHTTPRequest;
+}
+
+[
+    uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache26
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    helpstring("XML Schema Cache 3.0"),
+    progid("Msxml2.XMLSchemaCache.3.0"),
+    vi_progid("Msxml2.XMLSchemaCache"),
+    threading(both),
+    uuid(f5078f34-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache30
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    uuid(88d969c2-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache40
+{
+    [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+    uuid(88d96a07-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache60
+{
+    [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+    helpstring("XML Schema Cache"),
+    progid("Msxml2.XMLSchemaCache"),
+    vi_progid("Msxml2.XMLSchemaCache"),
+    threading(both),
+    uuid(373984c9-b845-449b-91e7-45ac83036ade)
+]
+coclass XMLSchemaCache
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    uuid(f5078f21-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate26
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    helpstring("XSL Template 3.0"),
+    progid("Msxml2.XSLTemplate.3.0"),
+    vi_progid("Msxml2.XSLTemplate"),
+    threading(both),
+    uuid(f5078f36-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate30
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    uuid(88d969c3-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate40
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    uuid(88d96a08-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate60
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    helpstring("XSL Template"),
+    progid("Msxml2.XSLTemplate"),
+    vi_progid("Msxml2.XSLTemplate"),
+    threading(both),
+    uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)
+]
+coclass XSLTemplate
+{
+    [default] interface IXSLTemplate;
+}
+
+/*
+ * Sax Interfaces
+ */
+[
+    object,
+    local,
+    uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)
+]
+interface ISAXAttributes : IUnknown
+{
+    HRESULT getLength(
+        [out, retval] int *length);
+
+    HRESULT getURI(
+        [in] int nIndex,
+        [out] const WCHAR **pUrl,
+        [out] int *pUriSize);
+
+    HRESULT getLocalName(
+        [in] int nIndex,
+        [out] const WCHAR **pLocalName,
+        [out] int *pLocalNameLength);
+
+    HRESULT getQName(
+        [in] int nIndex,
+        [out] const WCHAR **pQName,
+        [out] int *pQNameLength);
+
+    HRESULT getName(
+        [in] int nIndex,
+        [out] const WCHAR **pUri,
+        [out] int * pUriLength,
+        [out] const WCHAR ** pLocalName,
+        [out] int * pLocalNameSize,
+        [out] const WCHAR ** pQName,
+        [out] int * pQNameLength);
+
+    HRESULT getIndexFromName(
+        [in] const WCHAR * pUri,
+        [in] int cUriLength,
+        [in] const WCHAR * pLocalName,
+        [in] int cocalNameLength,
+        [out, retval] int * index);
+
+    HRESULT getIndexFromQName(
+        [in] const WCHAR * pQName,
+        [in] int nQNameLength,
+        [out, retval] int * index);
+
+    HRESULT getType(
+        [in] int nIndex,
+        [out] const WCHAR ** pType,
+        [out] int * pTypeLength);
+
+    HRESULT getTypeFromName(
+        [in] const WCHAR * pUri,
+        [in] int nUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [out] const WCHAR ** pType,
+        [out] int * nType);
+
+    HRESULT getTypeFromQName(
+        [in] const WCHAR * pQName,
+        [in] int nQName,
+        [out] const WCHAR ** pType,
+        [out] int * nType);
+
+    HRESULT getValue(
+        [in] int nIndex,
+        [out] const WCHAR ** pValue,
+        [out] int * nValue);
+
+    HRESULT getValueFromName(
+        [in] const WCHAR * pUri,
+        [in] int nUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [out] const WCHAR ** pValue,
+        [out] int * nValue);
+
+    HRESULT getValueFromQName(
+        [in] const WCHAR * pQName,
+        [in] int nQName,
+        [out] const WCHAR ** pValue,
+        [out] int * nValue);
+};
+
+[
+    object,
+    local,
+    uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)
+]
+interface ISAXContentHandler : IUnknown
+{
+    HRESULT putDocumentLocator(
+        [in] ISAXLocator * pLocator);
+
+    HRESULT startDocument();
+
+    HRESULT endDocument();
+
+    HRESULT startPrefixMapping(
+        [in] const WCHAR * pPrefix,
+        [in] int nPrefix,
+        [in] const WCHAR * pUri,
+        [in] int nUri);
+
+    HRESULT endPrefixMapping(
+        [in] const WCHAR * pPrefix,
+        [in] int nPrefix);
+
+    HRESULT startElement(
+        [in] const WCHAR * pNamespaceUri,
+        [in] int nNamespaceUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [in] const WCHAR * pQName,
+        [in] int nQName,
+        [in] ISAXAttributes * pAttr);
+
+    HRESULT endElement(
+        [in] const WCHAR * pNamespaceUri,
+        [in] int nNamespaceUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [in] const WCHAR * pQName,
+        [in] int nQName);
+
+    HRESULT characters(
+        [in] const WCHAR * pChars,
+        [in] int nChars);
+
+    HRESULT ignorableWhitespace(
+        [in] const WCHAR * pChars,
+        [in] int nChars);
+
+    HRESULT processingInstruction(
+        [in] const WCHAR * pTarget,
+        [in] int nTarget,
+        [in] const WCHAR * pData,
+        [in] int nData);
+
+    HRESULT skippedEntity(
+        [in] const WCHAR * pName,
+        [in] int nName);
+};
+
+[
+    object,
+    local,
+    uuid(862629ac-771a-47b2-8337-4e6843c1be90)
+]
+interface ISAXDeclHandler : IUnknown
+{
+    HRESULT elementDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pModel,
+        [in] int nModel);
+
+    HRESULT attributeDecl(
+        [in] const WCHAR * pElementName,
+        [in] int nElementName,
+        [in] const WCHAR * pAttributeName,
+        [in] int nAttributeName,
+        [in] const WCHAR * pType,
+        [in] int nType,
+        [in] const WCHAR * pValueDefault,
+        [in] int nValueDefault,
+        [in] const WCHAR * pValue,
+        [in] int nValue);
+
+    HRESULT internalEntityDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pValue,
+        [in] int nValue);
+
+    HRESULT externalEntityDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId);
+};
+
+[
+    object,
+    local,
+    uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)
+]
+interface ISAXDTDHandler : IUnknown
+{
+    HRESULT notationDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId);
+
+    HRESULT unparsedEntityDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId,
+        [in] const WCHAR * pNotationName,
+        [in] int nNotationName);
+};
+
+[
+    object,
+    local,
+    uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),
+]
+interface ISAXEntityResolver : IUnknown
+{
+    HRESULT resolveEntity(
+        [in] const WCHAR * pPublicId,
+        [in] const WCHAR * pSystemId,
+        [out, retval] VARIANT * ret);
+};
+
+[
+    object,
+    local,
+    uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)
+]
+interface ISAXErrorHandler : IUnknown
+{
+    HRESULT error(
+        [in] ISAXLocator * pLocator,
+        [in] const WCHAR * pErrorMessage,
+        [in] HRESULT hrErrorCode);
+
+    HRESULT fatalError(
+        [in] ISAXLocator * pLocator,
+        [in] const WCHAR * pErrorMessage,
+        [in] HRESULT hrErrorCode);
+
+    HRESULT ignorableWarning(
+        [in] ISAXLocator * pLocator,
+        [in] const WCHAR * pErrorMessage,
+        [in] HRESULT hrErrorCode);
+};
+
+[
+    object,
+    local,
+    uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)
+]
+interface ISAXLexicalHandler : IUnknown
+{
+    HRESULT startDTD(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId);
+
+    HRESULT endDTD();
+
+    HRESULT startEntity(
+        [in] const WCHAR * pName,
+        [in] int nName);
+
+    HRESULT endEntity(
+        [in] const WCHAR * pName,
+        [in] int nName);
+
+    HRESULT startCDATA();
+
+    HRESULT endCDATA();
+
+    HRESULT comment(
+        [in] const WCHAR * pChars,
+        [in] int nChars);
+};
+
+[
+    object,
+    local,
+    uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)
+]
+interface ISAXLocator : IUnknown
+{
+    HRESULT getColumnNumber(
+        [out, retval] int * nColumn);
+
+    HRESULT getLineNumber(
+        [out, retval] int * nLine);
+
+    HRESULT getPublicId(
+        [out, retval] const WCHAR ** publicId);
+
+    HRESULT getSystemId(
+        [out, retval] const WCHAR ** systemId);
+};
+
+[
+    local,
+    object,
+    uuid(70409222-ca09-4475-acb8-40312fe8d145)
+]
+interface ISAXXMLFilter : ISAXXMLReader
+{
+    HRESULT getParent(
+        [out, retval] ISAXXMLReader ** pReader);
+    HRESULT putParent(
+        [in] ISAXXMLReader * reader);
+};
+
+[
+local,
+object,
+uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)
+]
+interface ISAXXMLReader : IUnknown
+{
+    HRESULT getFeature(
+        [in] const WCHAR * pFeature,
+        [out, retval] VARIANT_BOOL * pValue);
+    HRESULT putFeature(
+        [in] const WCHAR * pFeature,
+        [in] VARIANT_BOOL vfValue);
+
+    HRESULT getProperty(
+        [in] const WCHAR * pProp,
+        [out, retval] VARIANT * pValue);
+    HRESULT putProperty(
+        [in] const WCHAR * pProp,
+        [in] VARIANT value);
+
+    HRESULT getEntityResolver(
+        [out, retval] ISAXEntityResolver ** ppEntityResolver);
+    HRESULT putEntityResolver(
+        [in] ISAXEntityResolver * pEntityResolver);
+
+    HRESULT getContentHandler(
+        [out, retval] ISAXContentHandler ** pContentHandler);
+    HRESULT putContentHandler(
+        [in] ISAXContentHandler * contentHandler);
+
+    HRESULT getDTDHandler(
+        [out, retval] ISAXDTDHandler ** pDTDHandler);
+    HRESULT putDTDHandler(
+        [in] ISAXDTDHandler * pDTDHandler);
+
+    HRESULT getErrorHandler(
+        [out, retval] ISAXErrorHandler ** pErrorHandler);
+    HRESULT putErrorHandler(
+        [in] ISAXErrorHandler * errorHandler);
+
+    HRESULT getBaseURL(
+        [out, retval] const WCHAR ** pBaseUrl);
+    HRESULT putBaseURL(
+        [in] const WCHAR * pBaseUrl);
+
+    HRESULT getSecureBaseURL(
+        [out, retval] const WCHAR ** pSecureBaseUrl);
+    HRESULT putSecureBaseURL(
+        [in] const WCHAR * secureBaseUrl);
+
+    HRESULT parse(
+        [in] VARIANT varInput);
+    HRESULT parseURL(
+        [in] const WCHAR * url);
+}
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)
+]
+interface IVBSAXAttributes : IDispatch
+{
+    [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]
+    HRESULT length( [out, retval] int * nLength);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETURI)]
+    HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]
+    HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]
+    HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]
+    HRESULT getIndexFromName( [in] BSTR uri,
+                              [in] BSTR localName, [out, retval] int * nIndex);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]
+    HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]
+    HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]
+    HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,
+                             [out, retval] BSTR * type);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]
+    HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]
+    HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]
+    HRESULT getValueFromName( [in] BSTR uri,
+                              [in] BSTR localName,
+                              [out, retval] BSTR * value);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]
+    HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)
+]
+interface IVBSAXContentHandler : IDispatch
+{
+    [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]
+    HRESULT documentLocator( [in] IVBSAXLocator * oLocator);
+
+    [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]
+    HRESULT startDocument();
+
+    [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]
+    HRESULT endDocument();
+
+    [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]
+    HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);
+
+    [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]
+    HRESULT endPrefixMapping( [in, out] BSTR * prefix);
+
+    [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]
+    HRESULT startElement( [in, out] BSTR * namespaceURI,
+                          [in, out] BSTR * localName,
+                          [in, out] BSTR * QName,
+                          [in] IVBSAXAttributes * oAttributes);
+
+    [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]
+    HRESULT endElement( [in, out] BSTR * namespaceURI,
+                        [in, out] BSTR * localName, [in, out] BSTR * strQName);
+
+    [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]
+    HRESULT characters( [in, out] BSTR * chars);
+
+    [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]
+    HRESULT ignorableWhitespace( [in, out] BSTR * chars);
+
+    [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]
+    HRESULT processingInstruction( [in, out] BSTR * target,
+                                   [in, out] BSTR * data);
+
+    [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]
+    HRESULT skippedEntity( [in, out] BSTR * name);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)
+]
+interface IVBSAXDeclHandler : IDispatch
+{
+    [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]
+    HRESULT elementDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * model);
+
+    [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]
+    HRESULT attributeDecl(
+        [in, out] BSTR * elementName,
+        [in, out] BSTR * attributeName,
+        [in, out] BSTR * type,
+        [in, out] BSTR * valueDefault,
+        [in, out] BSTR * value);
+
+    [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]
+    HRESULT internalEntityDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * value);
+
+    [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]
+    HRESULT externalEntityDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(24fb3297-302d-4620-ba39-3a732d850558)
+]
+interface IVBSAXDTDHandler : IDispatch
+{
+    [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]
+    HRESULT notationDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId);
+
+    [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]
+    HRESULT unparsedEntityDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId,
+        [in, out] BSTR * notationName);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)
+]
+interface IVBSAXEntityResolver : IDispatch
+{
+    [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]
+    HRESULT resolveEntity(
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId,
+        [out, retval] VARIANT * ret);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(d963d3fe-173c-4862-9095-b92f66995f52)
+]
+interface IVBSAXErrorHandler : IDispatch
+{
+    [id(DISPID_SAX_ERRORHANDLER_ERROR)]
+    HRESULT error(
+            [in] IVBSAXLocator * locator,
+	    [in, out] BSTR * errorMessage,
+            [in] LONG errorCode);
+
+    [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]
+    HRESULT fatalError(
+	    [in] IVBSAXLocator * locator,
+	    [in, out] BSTR * errorMessage,
+            [in] LONG errorCode);
+
+    [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]
+    HRESULT ignorableWarning(
+	    [in] IVBSAXLocator * locator,
+	    [in, out] BSTR * errorMessage,
+            [in] LONG errorCode);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(032aac35-8c0e-4d9d-979f-e3b702935576)
+]
+interface IVBSAXLexicalHandler : IDispatch
+{
+    [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]
+    HRESULT startDTD(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId);
+    [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]
+    HRESULT endDTD();
+
+    [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]
+    HRESULT startEntity([in, out] BSTR * name);
+    [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]
+    HRESULT endEntity([in, out] BSTR * name);
+
+    [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]
+    HRESULT startCDATA();
+    [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]
+    HRESULT endCDATA();
+
+    [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]
+    HRESULT comment( [in, out] BSTR * chars);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)
+]
+interface IVBSAXLocator : IDispatch
+{
+    [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]
+    HRESULT columnNumber( [out, retval] int * column);
+
+    [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]
+    HRESULT lineNumber( [out, retval] int * line);
+
+    [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]
+    HRESULT publicId( [out, retval] BSTR * publicId);
+
+    [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]
+    HRESULT systemId( [out, retval] BSTR * systemId);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)
+]
+interface IVBSAXXMLFilter : IDispatch
+{
+    [propget, id(DISPID_SAX_XMLFILTER_PARENT)]
+    HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);
+    [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]
+    HRESULT parent( [in] IVBSAXXMLReader * reader);
+
+};
+
+[
+    dual,
+    oleautomation,
+    object,
+    uuid (8c033caa-6cd6-4f73-b728-4531af74945f)
+]
+interface IVBSAXXMLReader : IDispatch
+{
+    [id(DISPID_SAX_XMLREADER_GETFEATURE)]
+    HRESULT getFeature( [in] const WCHAR * pFeature,
+                        [out, retval] VARIANT_BOOL * pValue);
+    [id(DISPID_SAX_XMLREADER_PUTFEATURE)]
+    HRESULT putFeature( [in] const WCHAR * pFeature,
+                        [in] VARIANT_BOOL vfValue);
+
+    [id(DISPID_SAX_XMLREADER_GETPROPERTY)]
+    HRESULT getProperty( [in] const WCHAR * pProp,
+                         [out, retval] VARIANT * pValue);
+    [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]
+    HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value);
+
+    [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+    HRESULT entityResolver(
+                    [out, retval] IVBSAXEntityResolver ** ppEntityResolver);
+    [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+    HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);
+
+    [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+    HRESULT contentHandler(
+                        [out, retval] IVBSAXContentHandler ** pContentHandler);
+    [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+    HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);
+
+    [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+    HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);
+    [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+    HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);
+
+    [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+    HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);
+    [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+    HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);
+
+    [propget, id(DISPID_SAX_XMLREADER_BASEURL)]
+    HRESULT baseURL([out, retval] const WCHAR ** pBaseUrl);
+    [propput, id(DISPID_SAX_XMLREADER_BASEURL)]
+    HRESULT baseURL([in] const WCHAR * pBaseUrl);
+
+    [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+    HRESULT secureBaseURL([out, retval] const WCHAR ** pSecureBaseUrl);
+    [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+    HRESULT secureBaseURL([in] const WCHAR * secureBaseUrl);
+
+    [id(DISPID_SAX_XMLREADER_PARSE)]
+    HRESULT parse( [in] VARIANT varInput);
+    [id(DISPID_SAX_XMLREADER_PARSEURL)]
+    HRESULT parseURL([in] const WCHAR * url);
+}
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)
+]
+interface IMXAttributes : IDispatch
+{
+    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]
+    HRESULT addAttribute(
+        [in] BSTR uri,
+        [in] BSTR localName,
+        [in] BSTR QName,
+        [in] BSTR type,
+        [in] BSTR value);
+
+    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]
+    HRESULT addAttributeFromIndex( [in] VARIANT atts,
+                                   [in] int index);
+
+    [id(DISPID_MX_ATTRIBUTES_CLEAR)]
+    HRESULT clear();
+
+    [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute( [in] int index);
+
+    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] int index,
+        [in] BSTR uri,
+        [in] BSTR localName,
+        [in] BSTR QName,
+        [in] BSTR type,
+        [in] BSTR value);
+
+    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]
+    HRESULT setAttributes( [in] VARIANT atts);
+
+    [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]
+    HRESULT setLocalName( [in] int index,
+        [in] BSTR localName);
+
+    [id(DISPID_MX_ATTRIBUTES_SETQNAME)]
+    HRESULT setQName(
+        [in] int index,
+        [in] BSTR QName);
+
+    [id(DISPID_MX_ATTRIBUTES_SETTYPE)]
+    HRESULT setType( [in] int index, [in] BSTR type);
+
+    [id(DISPID_MX_ATTRIBUTES_SETURI)]
+    HRESULT setURI( [in] int index,  [in] BSTR uri);
+
+    [id(DISPID_MX_ATTRIBUTES_SETVALUE)]
+    HRESULT setValue([in] int index, [in] BSTR value);
+};
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)
+]
+interface IMXSchemaDeclHandler : IDispatch
+{
+    [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]
+    HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );
+}
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)
+]
+interface IMXReaderControl : IDispatch
+{
+    [id(DISPID_MX_READER_CONTROL_ABORT)]
+    HRESULT abort();
+
+    [id(DISPID_MX_READER_CONTROL_RESUME)]
+    HRESULT resume();
+
+    [id(DISPID_MX_READER_CONTROL_SUSPEND)]
+    HRESULT suspend();
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)
+]
+interface IMXWriter :  IDispatch
+{
+    [propput, id(DISPID_MX_WRITER_OUTPUT)]
+    HRESULT output ( [in] VARIANT Destination);
+    [propget, id(DISPID_MX_WRITER_OUTPUT)]
+    HRESULT output ( [out, retval] VARIANT * Destination);
+
+    [propput, id(DISPID_MX_WRITER_ENCODING)]
+    HRESULT encoding ([in] BSTR encoding);
+    [propget, id(DISPID_MX_WRITER_ENCODING)]
+    HRESULT encoding ([out, retval] BSTR * encoding);
+
+    [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+    HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);
+    [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+    HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);
+
+    [propput, id(DISPID_MX_WRITER_INDENT)]
+    HRESULT indent ([in] VARIANT_BOOL indentMode);
+    [propget, id(DISPID_MX_WRITER_INDENT)]
+    HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);
+
+    [propput, id(DISPID_MX_WRITER_STANDALONE)]
+    HRESULT standalone ([in] VARIANT_BOOL value);
+    [propget, id(DISPID_MX_WRITER_STANDALONE)]
+    HRESULT standalone ([out, retval] VARIANT_BOOL * value);
+
+    [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+    HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);
+    [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+    HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);
+
+    [propput, id(DISPID_MX_WRITER_VERSION)]
+    HRESULT version ([in] BSTR version);
+    [propget, id(DISPID_MX_WRITER_VERSION)]
+    HRESULT version ([out, retval] BSTR * version);
+
+    [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+    HRESULT disableOutputEscaping([in] VARIANT_BOOL value);
+    [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+    HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);
+
+    [id(DISPID_MX_WRITER_FLUSH)]
+    HRESULT flush();
+};
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespacePrefixes : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item(
+        [in] long index,
+        [out, retval] BSTR *prefix);
+
+    [propget, id(DISPID_MX_NSMGR_LENGTH)]
+    HRESULT length( [out,retval] long *length );
+
+    [propget, restricted, hidden, id(DISPID_NEWENUM)]
+    HRESULT _newEnum( [out, retval] IUnknown **ppUnk );
+}
+
+[
+    local,
+    object,
+    hidden,
+    uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespaceManager : IUnknown
+{
+    HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);
+
+    HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);
+
+    HRESULT reset();
+
+    HRESULT pushContext();
+
+    HRESULT pushNodeContext(
+        [in] IXMLDOMNode *contextNode,
+        [in] VARIANT_BOOL fDeep);
+
+    HRESULT popContext();
+
+    HRESULT declarePrefix(
+        [in] const WCHAR *prefix,
+        [in] const WCHAR *namespaceURI);
+
+    HRESULT getDeclaredPrefix(
+        [in] long nIndex,
+        [in, out] WCHAR *pwchPrefix,
+        [in, out] int *pcchPrefix);
+
+    HRESULT getPrefix(
+        [in] const WCHAR *pwszNamespaceURI,
+        [in] long nIndex,
+        [in, out] WCHAR *pwchPrefix,
+        [in, out] int *pcchPrefix);
+
+    HRESULT getURI(
+        [in] const WCHAR *pwchPrefix,
+        [in] IXMLDOMNode* pContextNode,
+        [in, out] WCHAR *pwchUri,
+        [in, out] int *pcchUri);
+}
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IVBMXNamespaceManager : IDispatch
+{
+    [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+    HRESULT allowOverride([in] VARIANT_BOOL fOverride);
+
+    [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+    HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);
+
+    [id(DISPID_MX_NSMGR_RESET)]
+    HRESULT reset();
+
+    [id(DISPID_MX_NSMGR_PUSHCONTEXT)]
+    HRESULT pushContext();
+
+    [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]
+    HRESULT pushNodeContext(
+        [in] IXMLDOMNode* contextNode,
+        [in, defaultvalue(-1)] VARIANT_BOOL fDeep);
+
+    [id(DISPID_MX_NSMGR_POPCONTEXT)]
+    HRESULT popContext();
+
+    [id(DISPID_MX_NSMGR_DECLAREPREFIX)]
+    HRESULT declarePrefix(
+        [in] BSTR prefix,
+        [in] BSTR namespaceURI);
+
+    [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]
+    HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);
+
+    [id(DISPID_MX_NSMGR_GETPREFIXES)]
+    HRESULT getPrefixes(
+        [in] BSTR namespaceURI,
+        [out, retval] IMXNamespacePrefixes** prefixes);
+
+    [id(DISPID_MX_NSMGR_GETURI)]
+    HRESULT getURI(
+        [in] BSTR prefix,
+        [out, retval] VARIANT* uri);
+
+    [id(DISPID_MX_NSMGR_GETURIFROMNODE)]
+    HRESULT getURIFromNode(
+        [in] BSTR strPrefix,
+        [in] IXMLDOMNode* contextNode,
+        [out, retval] VARIANT* uri);
+}
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXXMLFilter : IDispatch
+{
+    [id(DISPID_MXXML_FILTER_GETFEATURE)]
+    HRESULT getFeature(
+        [in] BSTR strName,
+        [out, retval] VARIANT_BOOL * fValue);
+
+    [id(DISPID_MXXML_FILTER_PUTFEATURE)]
+    HRESULT putFeature(
+        [in] BSTR strName,
+        [in] VARIANT_BOOL fValue);
+
+    [id(DISPID_MXXML_FILTER_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR strName,
+        [out, retval] VARIANT * varValue);
+
+    [id(DISPID_MXXML_FILTER_PUTPROPERTY)]
+    HRESULT putProperty(
+        [in] BSTR strName,
+        [in] VARIANT varValue);
+
+    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]
+    HRESULT entityResolver( [out, retval] IUnknown **oResolver );
+
+    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]
+    HRESULT entityResolver( [in] IUnknown *oResolver );
+
+    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]
+    HRESULT contentHandler( [out, retval] IUnknown **oHandler );
+
+    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]
+    HRESULT contentHandler( [in] IUnknown *oHandler );
+
+    [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]
+    HRESULT dtdHandler( [out, retval] IUnknown **oHandler );
+
+    [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]
+    HRESULT dtdHandler( [in] IUnknown *oHandler );
+
+    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]
+    HRESULT errorHandler( [out, retval] IUnknown **oHandler );
+
+    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]
+    HRESULT errorHandler( [in] IUnknown *oHandler );
+}
+
+[
+    local,
+    object,
+    uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaStringCollection : IDispatch
+{
+    [id(DISPID_VALUE), propget]
+    HRESULT item(
+        [in] long index,
+        [out,retval] BSTR* bstr);
+
+    [id(DISPID_SOM_LENGTH), propget]
+    HRESULT length(
+        [out,retval] long* length);
+
+    [id(DISPID_NEWENUM), hidden, restricted, propget]
+    HRESULT _newEnum(
+        [out,retval] IUnknown** ppunk);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaItemCollection : IDispatch
+{
+    [id(DISPID_VALUE), propget]
+    HRESULT item(
+        [in] long index,
+        [out,retval]ISchemaItem** item);
+
+    [id(DISPID_SOM_ITEMBYNAME)]
+    HRESULT itemByName(
+        [in] BSTR name,
+        [out,retval] ISchemaItem** item);
+
+    [id(DISPID_SOM_ITEMBYQNAME)]
+    HRESULT itemByQName(
+        [in] BSTR name,
+        [in] BSTR namespaceURI,
+        [out,retval] ISchemaItem** item);
+
+    [id(DISPID_SOM_LENGTH), propget]
+    HRESULT length(
+        [out,retval]long* length);
+
+    [id(DISPID_NEWENUM), hidden, restricted, propget]
+    HRESULT _newEnum(
+        [out,retval]IUnknown** ppunk);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaItem : IDispatch
+{
+    [id(DISPID_SOM_NAME), propget]
+    HRESULT name(
+        [out,retval] BSTR* name);
+
+    [id(DISPID_SOM_NAMESPACEURI), propget]
+    HRESULT namespaceURI(
+        [out,retval] BSTR* namespaceURI);
+
+    [id(DISPID_SOM_SCHEMA), propget]
+    HRESULT schema(
+        [out,retval] ISchema** schema);
+
+    [id(DISPID_SOM_ID), propget]
+    HRESULT id(
+        [out,retval] BSTR* id);
+
+    [id(DISPID_SOM_ITEMTYPE), propget]
+    HRESULT itemType(
+        [out,retval] SOMITEMTYPE* itemType);
+
+    [id(DISPID_SOM_UNHANDLEDATTRS), propget]
+    HRESULT unhandledAttributes(
+        [out,retval] IVBSAXAttributes** attributes);
+
+    [id(DISPID_SOM_WRITEANNOTATION)]
+    HRESULT writeAnnotation(
+        [in] IUnknown* annotationSink,
+        [out,retval] VARIANT_BOOL* isWritten);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchema : ISchemaItem
+{
+    [id(DISPID_SOM_TARGETNAMESPACE), propget]
+    HRESULT targetNamespace(
+        [out,retval] BSTR* targetNamespace);
+
+    [id(DISPID_SOM_VERSION), propget]
+    HRESULT version(
+        [out,retval] BSTR* version);
+
+    [id(DISPID_SOM_TYPES), propget]
+    HRESULT types(
+        [out,retval] ISchemaItemCollection** types);
+
+    [id(DISPID_SOM_ELEMENTS), propget]
+    HRESULT elements(
+        [out,retval] ISchemaItemCollection** elements);
+
+    [id(DISPID_SOM_ATTRIBUTES), propget]
+    HRESULT attributes(
+        [out,retval] ISchemaItemCollection** attributes);
+
+    [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]
+    HRESULT attributeGroups(
+        [out,retval] ISchemaItemCollection** attributeGroups);
+
+    [id(DISPID_SOM_MODELGROUPS), propget]
+    HRESULT modelGroups(
+        [out,retval] ISchemaItemCollection** modelGroups);
+
+    [id(DISPID_SOM_NOTATIONS), propget]
+    HRESULT notations(
+        [out,retval] ISchemaItemCollection** notations);
+
+    [id(DISPID_SOM_SCHEMALOCATIONS), propget]
+    HRESULT schemaLocations(
+        [out,retval] ISchemaStringCollection** schemaLocations);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaParticle : ISchemaItem
+{
+    [id(DISPID_SOM_MINOCCURS), propget]
+    HRESULT minOccurs(
+        [out,retval] VARIANT* minOccurs);
+
+    [id(DISPID_SOM_MAXOCCURS), propget]
+    HRESULT maxOccurs(
+        [out,retval] VARIANT* maxOccurs);
+};
+
+[
+    object,
+    uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaAttribute : ISchemaItem
+{
+    [id(DISPID_SOM_TYPE), propget]
+    HRESULT type(
+        [out,retval] ISchemaType** type);
+
+    [id(DISPID_SOM_SCOPE), propget]
+    HRESULT scope(
+        [out,retval] ISchemaComplexType** scope);
+
+    [id(DISPID_SOM_DEFAULTVALUE), propget]
+    HRESULT defaultValue(
+        [out,retval]BSTR* defaultValue);
+
+    [id(DISPID_SOM_FIXEDVALUE), propget]
+    HRESULT fixedValue(
+        [out,retval] BSTR* fixedValue);
+
+    [id(DISPID_SOM_USE), propget]
+    HRESULT use(
+        [out,retval] SCHEMAUSE* use);
+
+    [id(DISPID_SOM_ISREFERENCE), propget]
+    HRESULT isReference(
+        [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaElement : ISchemaParticle
+{
+    [id(DISPID_SOM_TYPE), propget]
+    HRESULT type(
+        [out,retval] ISchemaType** type);
+
+    [id(DISPID_SOM_SCOPE), propget]
+    HRESULT scope(
+        [out,retval] ISchemaComplexType** scope);
+
+    [id(DISPID_SOM_DEFAULTVALUE), propget]
+    HRESULT defaultValue(
+        [out,retval] BSTR* defaultValue);
+
+    [id(DISPID_SOM_FIXEDVALUE), propget]
+    HRESULT fixedValue(
+        [out,retval] BSTR* fixedValue);
+
+    [id(DISPID_SOM_ISNILLABLE), propget]
+    HRESULT isNillable(
+        [out,retval] VARIANT_BOOL* nillable);
+
+    [id(DISPID_SOM_IDCONSTRAINTS), propget]
+    HRESULT identityConstraints(
+        [out,retval] ISchemaItemCollection** constraints);
+
+    [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]
+    HRESULT substitutionGroup(
+        [out,retval] ISchemaElement** element);
+
+    [id(DISPID_SOM_EXCLUSIONS), propget]
+    HRESULT substitutionGroupExclusions(
+        [out,retval] SCHEMADERIVATIONMETHOD* exclusions);
+
+    [id(DISPID_SOM_DISALLOWED), propget]
+    HRESULT disallowedSubstitutions(
+        [out,retval] SCHEMADERIVATIONMETHOD* disallowed);
+
+    [id(DISPID_SOM_ISABSTRACT), propget]
+    HRESULT isAbstract(
+        [out,retval] VARIANT_BOOL* abstract);
+
+    [id(DISPID_SOM_ISREFERENCE), propget]
+    HRESULT isReference(
+        [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaType : ISchemaItem
+{
+    [id(DISPID_SOM_BASETYPES), propget]
+    HRESULT baseTypes(
+        [out,retval] ISchemaItemCollection** baseTypes);
+
+    [id(DISPID_SOM_FINAL), propget]
+    HRESULT final(
+        [out,retval] SCHEMADERIVATIONMETHOD* final);
+
+    [id(DISPID_SOM_VARIETY), propget]
+    HRESULT variety(
+        [out,retval] SCHEMATYPEVARIETY* variety);
+
+    [id(DISPID_SOM_DERIVEDBY), propget]
+    HRESULT derivedBy(
+        [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);
+
+    [id(DISPID_SOM_ISVALID)]
+    HRESULT isValid(
+        [in] BSTR data,
+        [out,retval] VARIANT_BOOL* valid);
+
+    [id(DISPID_SOM_MINEXCLUSIVE), propget]
+    HRESULT minExclusive(
+        [out,retval]BSTR* minExclusive);
+
+    [id(DISPID_SOM_MININCLUSIVE), propget]
+    HRESULT minInclusive(
+        [out,retval] BSTR* minInclusive);
+
+    [id(DISPID_SOM_MAXEXCLUSIVE), propget]
+    HRESULT maxExclusive(
+        [out,retval] BSTR* maxExclusive);
+
+    [id(DISPID_SOM_MAXINCLUSIVE), propget]
+    HRESULT maxInclusive(
+        [out,retval] BSTR* maxInclusive);
+
+    [id(DISPID_SOM_TOTALDIGITS), propget]
+    HRESULT totalDigits(
+        [out,retval] VARIANT* totalDigits);
+
+    [id(DISPID_SOM_FRACTIONDIGITS), propget]
+    HRESULT fractionDigits(
+        [out,retval] VARIANT* fractionDigits);
+
+    [id(DISPID_SOM_LENGTH), propget]
+    HRESULT length(
+        [out,retval] VARIANT* length);
+
+    [id(DISPID_SOM_MINLENGTH), propget]
+    HRESULT minLength(
+        [out,retval]VARIANT* minLength);
+
+    [id(DISPID_SOM_MAXLENGTH), propget]
+    HRESULT maxLength(
+        [out,retval]VARIANT* maxLength);
+
+    [id(DISPID_SOM_ENUMERATION), propget]
+    HRESULT enumeration(
+        [out,retval] ISchemaStringCollection** enumeration);
+
+    [id(DISPID_SOM_WHITESPACE), propget]
+    HRESULT whitespace(
+        [out,retval]SCHEMAWHITESPACE* whitespace);
+
+    [id(DISPID_SOM_PATTERNS), propget]
+    HRESULT patterns(
+        [out,retval] ISchemaStringCollection** patterns);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaComplexType : ISchemaType
+{
+    [id(DISPID_SOM_ISABSTRACT), propget]
+    HRESULT isAbstract(
+        [out,retval] VARIANT_BOOL* abstract);
+
+    [id(DISPID_SOM_ANYATTRIBUTE), propget]
+    HRESULT anyAttribute(
+        [out,retval] ISchemaAny** anyAttribute);
+
+    [id(DISPID_SOM_ATTRIBUTES), propget]
+    HRESULT attributes(
+        [out,retval] ISchemaItemCollection** attributes);
+
+    [id(DISPID_SOM_CONTENTTYPE), propget]
+    HRESULT contentType(
+        [out,retval] SCHEMACONTENTTYPE* contentType);
+
+    [id(DISPID_SOM_CONTENTMODEL), propget]
+    HRESULT contentModel(
+        [out,retval] ISchemaModelGroup** contentModel);
+
+    [id(DISPID_SOM_PROHIBITED), propget]
+    HRESULT prohibitedSubstitutions(
+        [out,retval] SCHEMADERIVATIONMETHOD* prohibited);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaAttributeGroup : ISchemaItem
+{
+    [id(DISPID_SOM_ANYATTRIBUTE), propget]
+    HRESULT anyAttribute(
+        [out,retval] ISchemaAny** anyAttribute);
+
+    [id(DISPID_SOM_ATTRIBUTES), propget]
+        HRESULT attributes(
+            [out,retval] ISchemaItemCollection** attributes);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaModelGroup : ISchemaParticle
+{
+    [id(DISPID_SOM_PARTICLES), propget]
+    HRESULT particles(
+        [out,retval] ISchemaItemCollection** particles);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaAny : ISchemaParticle
+{
+    [id(DISPID_SOM_NAMESPACES), propget]
+    HRESULT namespaces(
+        [out,retval] ISchemaStringCollection** namespaces);
+
+    [id(DISPID_SOM_PROCESSCONTENTS), propget]
+    HRESULT processContents(
+        [out,retval] SCHEMAPROCESSCONTENTS* processContents);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaIdentityConstraint : ISchemaItem
+{
+    [id(DISPID_SOM_SELECTOR), propget]
+    HRESULT selector(
+        [out,retval] BSTR* selector);
+
+    [id(DISPID_SOM_FIELDS), propget]
+        HRESULT fields(
+            [out,retval] ISchemaStringCollection** fields);
+
+    [id(DISPID_SOM_REFERENCEDKEY), propget]
+    HRESULT referencedKey(
+        [out,retval] ISchemaIdentityConstraint** key);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaNotation : ISchemaItem
+{
+    [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]
+    HRESULT systemIdentifier(
+        [out,retval] BSTR* uri);
+
+    [id(DISPID_SOM_PUBLICIDENTIFIER), propget]
+    HRESULT publicIdentifier(
+        [out,retval] BSTR* uri);
+};
+
+
+[
+    helpstring("SAX XML Reader 3.0"),
+    progid("Msxml2.SAXXMLReader.3.0"),
+    vi_progid("Msxml2.SAXXMLReader"),
+    threading(both),
+    uuid(3124c396-fb13-4836-a6ad-1317f1713688)
+]
+coclass SAXXMLReader30
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+    interface IMXReaderControl;
+};
+
+[
+    uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)
+]
+coclass SAXXMLReader40
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+}
+
+[
+    uuid(88d96a0c-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXXMLReader60
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+}
+
+[
+    helpstring("SAX XML Reader"),
+    progid("Msxml2.SAXXMLReader"),
+    vi_progid("Msxml2.SAXXMLReader"),
+    threading(both),
+    uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)
+]
+coclass SAXXMLReader
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+    interface IMXReaderControl;
+}
+
+[
+    uuid(a4c23ec3-6b70-4466-9127-550077239978)
+]
+coclass MXHTMLWriter
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXErrorHandler;
+    interface ISAXDTDHandler;
+    interface ISAXLexicalHandler;
+    interface ISAXDeclHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d)
+]
+coclass MXHTMLWriter30
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(88d969c9-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter40
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(88d96a10-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter60
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    helpstring("MXXMLWriter 3.0"),
+    progid("Msxml2.MXXMLWriter.3.0"),
+    vi_progid("Msxml2.MXXMLWriter"),
+    threading(both),
+    uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)
+]
+coclass MXXMLWriter30
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+};
+
+[
+    uuid(88d969c8-f192-11d4-a65f-0040963251e5),
+]
+coclass MXXMLWriter40
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(88d96a0f-f192-11d4-a65f-0040963251e5)
+]
+coclass MXXMLWriter60
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    helpstring("MXXMLWriter"),
+    progid("Msxml2.MXXMLWriter"),
+    vi_progid("Msxml2.MXXMLWriter"),
+    threading(both),
+    uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)
+]
+coclass MXXMLWriter
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXErrorHandler;
+    interface ISAXDTDHandler;
+    interface ISAXLexicalHandler;
+    interface ISAXDeclHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(88d969d5-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager
+{
+    [default] interface IVBMXNamespaceManager;
+    interface IMXNamespaceManager;
+}
+
+[
+    uuid(88d969d6-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager40
+{
+    [default] interface IVBMXNamespaceManager;
+    interface IMXNamespaceManager;
+}
+
+[
+    uuid(88d96a11-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager60
+{
+    [default] interface IVBMXNamespaceManager;
+    interface IMXNamespaceManager;
+}
+
+[
+    helpstring("SAXAttributes 3.0"),
+    progid("Msxml2.SAXAttributes.3.0"),
+    vi_progid("Msxml2.SAXAttributes"),
+    threading(both),
+    uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)
+]
+coclass SAXAttributes30
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+[
+    uuid(88d969ca-f192-11d4-a65f-0040963251e5),
+]
+coclass SAXAttributes40
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+[
+    uuid(88d96a0e-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXAttributes60
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+[
+    helpstring("SAXAttributes"),
+    progid("Msxml2.SAXAttributes"),
+    vi_progid("Msxml2.SAXAttributes"),
+    threading(both),
+    uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)
+]
+coclass SAXAttributes
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+/*
+ * Error Codes
+ */
+cpp_quote("#define E_XML_NOTWF              0xC00CE223")
+cpp_quote("#define E_XML_NODTD              0xC00CE224")
+cpp_quote("#define E_XML_INVALID            0xC00CE225")
+cpp_quote("#define E_XML_BUFFERTOOSMALL     0xC00CE226")
+
+} /* Library MSXML */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h
new file mode 100644
index 0000000..ead9eab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h
@@ -0,0 +1,563 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSXML2DID_H__
+#define __MSXML2DID_H__
+
+#define DISPID_XOBJ_MIN                     0x10000
+#define DISPID_XOBJ_MAX                     0x1FFFF
+#define DISPID_XOBJ_BASE                    0x10000
+
+#define DISPID_XMLELEMENTCOLLECTION         0x10000
+#define DISPID_XMLELEMENTCOLLECTION_LENGTH  0x10001
+#define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM
+#define DISPID_XMLELEMENTCOLLECTION_ITEM    0x10003
+
+#define DISPID_XMLDOCUMENT                  0x10064
+#define DISPID_XMLDOCUMENT_ROOT             0x10065
+#define DISPID_XMLDOCUMENT_FILESIZE         0x10066
+#define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067
+#define DISPID_XMLDOCUMENT_FILEUPDATEDDATE  0x10068
+#define DISPID_XMLDOCUMENT_URL              0x10069
+#define DISPID_XMLDOCUMENT_MIMETYPE         0x1006a
+#define DISPID_XMLDOCUMENT_READYSTATE       0x1006b
+#define DISPID_XMLDOCUMENT_CREATEELEMENT    0x1006c
+#define DISPID_XMLDOCUMENT_CHARSET          0x1006d
+#define DISPID_XMLDOCUMENT_VERSION          0x1006e
+#define DISPID_XMLDOCUMENT_DOCTYPE          0x1006f
+#define DISPID_XMLDOCUMENT_DTDURL           0x10070
+#define DISPID_XMLDOCUMENT_ASYNC            0x10071
+#define DISPID_XMLDOCUMENT_CASEINSENSITIVE  0x10072
+
+#define DISPID_XMLELEMENT                   0x100c8
+#define DISPID_XMLELEMENT_TAGNAME           0x100c9
+#define DISPID_XMLELEMENT_PARENT            0x100ca
+#define DISPID_XMLELEMENT_SETATTRIBUTE      0x100cb
+#define DISPID_XMLELEMENT_GETATTRIBUTE      0x100cc
+#define DISPID_XMLELEMENT_REMOVEATTRIBUTE   0x100cd
+#define DISPID_XMLELEMENT_CHILDREN          0x100ce
+#define DISPID_XMLELEMENT_TYPE              0x100cf
+#define DISPID_XMLELEMENT_TEXT              0x100d0
+#define DISPID_XMLELEMENT_ADDCHILD          0x100d1
+#define DISPID_XMLELEMENT_REMOVECHILD       0x100d2
+#define DISPID_XMLELEMENT_ATTRIBUTES        0x100d3
+
+#define DISPID_XMLNOTIFSINK                 0x1012c
+#define DISPID_XMLNOTIFSINK_CHILDADDED      0x1012d
+
+#define DISPID_XMLATTRIBUTE                 0x10190
+#define DISPID_XMLATTRIBUTE_NAME            0x10191
+#define DISPID_XMLATTRIBUTE_VALUE           0x10192
+
+
+#define DISPID_DOM_BASE                     0x00000001
+#define DISPID_DOM_COLLECTION_BASE          0x000f4240
+#define DISPID_DOM_COLLECTION_MAX           0x002dc6bf
+
+#define DISPID_DOM_NODE                                 0x00000001
+#define DISPID_DOM_NODE_NODENAME                        0x00000002
+#define DISPID_DOM_NODE_NODEVALUE                       0x00000003
+#define DISPID_DOM_NODE_NODETYPE                        0x00000004
+#define DISPID_DOM_NODE_NODETYPEENUM                    0x00000005
+#define DISPID_DOM_NODE_PARENTNODE                      0x00000006
+#define DISPID_DOM_NODE_CHILDNODES                      0x00000007
+#define DISPID_DOM_NODE_FIRSTCHILD                      0x00000008
+#define DISPID_DOM_NODE_LASTCHILD                       0x00000009
+#define DISPID_DOM_NODE_PREVIOUSSIBLING                 0x0000000a
+#define DISPID_DOM_NODE_NEXTSIBLING                     0x0000000b
+#define DISPID_DOM_NODE_ATTRIBUTES                      0x0000000c
+#define DISPID_DOM_NODE_INSERTBEFORE                    0x0000000d
+#define DISPID_DOM_NODE_REPLACECHILD                    0x0000000e
+#define DISPID_DOM_NODE_REMOVECHILD                     0x0000000f
+#define DISPID_DOM_NODE_APPENDCHILD                     0x00000010
+#define DISPID_DOM_NODE_HASCHILDNODES                   0x00000011
+#define DISPID_DOM_NODE_OWNERDOC                        0x00000012
+#define DISPID_DOM_NODE_CLONENODE                       0x00000013
+
+#define DISPID_XMLDOM_NODE                              0x00000014
+#define DISPID_XMLDOM_NODE_STRINGTYPE                   0x00000015
+#define DISPID_XMLDOM_NODE_SPECIFIED                    0x00000016
+#define DISPID_XMLDOM_NODE_DEFINITION                   0x00000017
+#define DISPID_XMLDOM_NODE_TEXT                         0x00000018
+#define DISPID_XMLDOM_NODE_NODETYPEDVALUE               0x00000019
+#define DISPID_XMLDOM_NODE_DATATYPE                     0x0000001a
+#define DISPID_XMLDOM_NODE_XML                          0x0000001b
+#define DISPID_XMLDOM_NODE_TRANSFORMNODE                0x0000001c
+#define DISPID_XMLDOM_NODE_SELECTNODES                  0x0000001d
+#define DISPID_XMLDOM_NODE_SELECTSINGLENODE             0x0000001e
+#define DISPID_XMLDOM_NODE_PARSED                       0x0000001f
+#define DISPID_XMLDOM_NODE_NAMESPACE                    0x00000020
+#define DISPID_XMLDOM_NODE_PREFIX                       0x00000021
+#define DISPID_XMLDOM_NODE_BASENAME                     0x00000022
+#define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT        0x00000023
+#define DISPID_XMLDOM_NODE__TOP                         0x00000024
+
+#define DISPID_DOM_DOCUMENT                             0x00000025
+#define DISPID_DOM_DOCUMENT_DOCTYPE                     0x00000026
+#define DISPID_DOM_DOCUMENT_IMPLEMENTATION              0x00000027
+#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT             0x00000028
+#define DISPID_DOM_DOCUMENT_CREATEELEMENT               0x00000029
+#define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT      0x0000002a
+#define DISPID_DOM_DOCUMENT_CREATETEXTNODE              0x0000002b
+#define DISPID_DOM_DOCUMENT_CREATECOMMENT               0x0000002c
+#define DISPID_DOM_DOCUMENT_CREATECDATASECTION          0x0000002d
+#define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 0x0000002e
+#define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE             0x0000002f
+#define DISPID_DOM_DOCUMENT_CREATEENTITY                0x00000030
+#define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE       0x00000031
+#define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME        0x00000032
+#define DISPID_DOM_DOCUMENT_TOP                         0x00000033
+
+#define DISPID_XMLDOM_DOCUMENT                          0x00000034
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE             0x00000035
+#define DISPID_XMLDOM_DOCUMENT_CREATENODE               0x00000036
+#define DISPID_XMLDOM_DOCUMENT_CREATENODEEX             0x00000037
+#define DISPID_XMLDOM_DOCUMENT_NODEFROMID               0x00000038
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES       0x00000039
+#define DISPID_XMLDOM_DOCUMENT_LOAD                     0x0000003a
+#define DISPID_XMLDOM_DOCUMENT_PARSEERROR               0x0000003b
+#define DISPID_XMLDOM_DOCUMENT_URL                      0x0000003c
+#define DISPID_XMLDOM_DOCUMENT_ASYNC                    0x0000003d
+#define DISPID_XMLDOM_DOCUMENT_ABORT                    0x0000003e
+#define DISPID_XMLDOM_DOCUMENT_LOADXML                  0x0000003f
+#define DISPID_XMLDOM_DOCUMENT_SAVE                     0x00000040
+#define DISPID_XMLDOM_DOCUMENT_VALIDATE                 0x00000041
+#define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE         0x00000042
+#define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE       0x00000043
+#define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE       0x00000044
+#define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE          0x00000045
+#define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE          0x00000046
+#define DISPID_XMLDOM_DOCUMENT__TOP                     0x00000047
+
+#define DISPID_DOM_NODELIST                             0x00000048
+#define DISPID_DOM_NODELIST_ITEM                        0x00000049
+#define DISPID_DOM_NODELIST_LENGTH                      0x0000004a
+#define DISPID_XMLDOM_NODELIST                          0x0000004b
+#define DISPID_XMLDOM_NODELIST_NEXTNODE                 0x0000004c
+#define DISPID_XMLDOM_NODELIST_RESET                    0x0000004d
+#define DISPID_XMLDOM_NODELIST_NEWENUM                  0x0000004e
+#define DISPID_XMLDOM_NODELIST__TOP                     0x0000004f
+
+#define DISPID_DOM_NAMEDNODEMAP                         0x00000050
+#define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM            0x00000053
+#define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM            0x00000054
+#define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM         0x00000055
+#define DISPID_XMLDOM_NAMEDNODEMAP                      0x00000056
+#define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM     0x00000057
+#define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM  0x00000058
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE             0x00000059
+#define DISPID_XMLDOM_NAMEDNODEMAP_RESET                0x0000005a
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM              0x0000005b
+#define DISPID_XMLDOM_NAMEDNODEMAP__TOP                 0x0000005c
+
+#define DISPID_DOM_W3CWRAPPERS                          0x0000005d
+
+#define DISPID_DOM_DOCUMENTFRAGMENT                     0x0000005e
+#define DISPID_DOM_DOCUMENTFRAGMENT__TOP                0x0000005f
+
+#define DISPID_DOM_ELEMENT                              0x00000060
+#define DISPID_DOM_ELEMENT_GETTAGNAME                   0x00000061
+#define DISPID_DOM_ELEMENT_GETATTRIBUTES                0x00000062
+#define DISPID_DOM_ELEMENT_GETATTRIBUTE                 0x00000063
+#define DISPID_DOM_ELEMENT_SETATTRIBUTE                 0x00000064
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE              0x00000065
+#define DISPID_DOM_ELEMENT_GETATTRIBUTENODE             0x00000066
+#define DISPID_DOM_ELEMENT_SETATTRIBUTENODE             0x00000067
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE          0x00000068
+#define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME         0x00000069
+#define DISPID_DOM_ELEMENT_NORMALIZE                    0x0000006a
+#define DISPID_DOM_ELEMENT__TOP                         0x0000006b
+
+#define DISPID_DOM_DATA                0x0000006c
+#define DISPID_DOM_DATA_DATA           0x0000006d
+#define DISPID_DOM_DATA_LENGTH         0x0000006e
+#define DISPID_DOM_DATA_SUBSTRING      0x0000006f
+#define DISPID_DOM_DATA_APPEND         0x00000070
+#define DISPID_DOM_DATA_INSERT         0x00000071
+#define DISPID_DOM_DATA_DELETE         0x00000072
+#define DISPID_DOM_DATA_REPLACE        0x00000073
+#define DISPID_DOM_DATA__TOP           0x00000074
+
+#define DISPID_DOM_ATTRIBUTE           0x00000075
+#define DISPID_DOM_ATTRIBUTE_GETNAME   0x00000076
+#define DISPID_DOM_ATTRIBUTE_SPECIFIED 0x00000077
+#define DISPID_DOM_ATTRIBUTE_VALUE     0x00000078
+#define DISPID_DOM_ATTRIBUTE__TOP      0x00000079
+
+#define DISPID_DOM_TEXT                0x0000007a
+#define DISPID_DOM_TEXT_SPLITTEXT      0x0000007b
+#define DISPID_DOM_TEXT_JOINTEXT       0x0000007c
+#define DISPID_DOM_TEXT__TOP           0x0000007d
+
+#define DISPID_DOM_PI                  0x0000007e
+#define DISPID_DOM_PI_TARGET           0x0000007f
+#define DISPID_DOM_PI_DATA             0x00000080
+#define DISPID_DOM_PI__TOP             0x00000081
+
+#define DISPID_DOM_DOCUMENTTYPE                    0x00000082
+#define DISPID_DOM_DOCUMENTTYPE_NAME               0x00000083
+#define DISPID_DOM_DOCUMENTTYPE_ENTITIES           0x00000084
+#define DISPID_DOM_DOCUMENTTYPE_NOTATIONS          0x00000085
+#define DISPID_DOM_DOCUMENTTYPE__TOP               0x00000086
+
+#define DISPID_DOM_NOTATION            0x00000087
+#define DISPID_DOM_NOTATION_PUBLICID   0x00000088
+#define DISPID_DOM_NOTATION_SYSTEMID   0x00000089
+#define DISPID_DOM_NOTATION__TOP       0x0000008a
+
+#define DISPID_DOM_ENTITY              0x0000008b
+#define DISPID_DOM_ENTITY_PUBLICID     0x0000008c
+#define DISPID_DOM_ENTITY_SYSTEMID     0x0000008d
+#define DISPID_DOM_ENTITY_NOTATIONNAME 0x0000008e
+#define DISPID_DOM_ENTITY__TOP         0x0000008f
+
+#define DISPID_DOM_W3CWRAPPERS_TOP     0x0000008f
+
+#define DISPID_DOM_IMPLEMENTATION              0x00000090
+#define DISPID_DOM_IMPLEMENTATION_HASFEATURE   0x00000091
+#define DISPID_DOM_IMPLEMENTATION__TOP         0x00000092
+
+#define DISPID_DOM__TOP                0x000000af
+
+#define  DISPID_DOM_ERROR              0x000000b0
+#define  DISPID_DOM_ERROR_ERRORCODE    0x000000b1
+#define  DISPID_DOM_ERROR_URL          0x000000b2
+#define  DISPID_DOM_ERROR_REASON       0x000000b3
+#define  DISPID_DOM_ERROR_SRCTEXT      0x000000b4
+#define  DISPID_DOM_ERROR_LINE         0x000000b5
+#define  DISPID_DOM_ERROR_LINEPOS      0x000000b6
+#define  DISPID_DOM_ERROR_FILEPOS      0x000000b7
+#define  DISPID_DOM_ERROR__TOP         0x000000b8
+
+#define  DISPID_DOM_ERROR2                      0x000000b9
+#define  DISPID_DOM_ERROR2_ALLERRORS            0x000000ba
+#define  DISPID_DOM_ERROR2_ERRORPARAMETERS      0x000000bb
+#define  DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT 0x000000bc
+#define  DISPID_DOM_ERROR2_ERRORXPATH           0x000000bd
+#define  DISPID_DOM_ERROR2__TOP                 0x000000be
+
+#define  DISPID_DOM_ERRORCOLLECTION             0x000000bf
+#define  DISPID_DOM_ERRORCOLLECTION_LENGTH      0x000000c0
+#define  DISPID_DOM_ERRORCOLLECTION_NEXT        0x000000c1
+#define  DISPID_DOM_ERRORCOLLECTION_RESET       0x000000c2
+#define  DISPID_DOM_ERRORCOLLECTION__TOP        0x000000c3
+
+#define  DISPID_XTLRUNTIME                     0x000000b9
+#define  DISPID_XTLRUNTIME_UNIQUEID            0x000000ba
+#define  DISPID_XTLRUNTIME_DEPTH               0x000000bb
+#define  DISPID_XTLRUNTIME_CHILDNUMBER         0x000000bc
+#define  DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER 0x000000bd
+#define  DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER 0x000000be
+#define  DISPID_XTLRUNTIME_FORMATINDEX         0x000000bf
+#define  DISPID_XTLRUNTIME_FORMATNUMBER        0x000000c0
+#define  DISPID_XTLRUNTIME_FORMATDATE          0x000000c1
+#define  DISPID_XTLRUNTIME_FORMATTIME          0x000000c2
+#define  DISPID_XTLRUNTIME__TOP                0x000000c3
+
+#define  DISPID_XMLDOMEVENT                    0x000000c4
+#define  DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE
+#define  DISPID_XMLDOMEVENT_ONDATAAVAILABLE    0x000000c5
+#define  DISPID_XMLDOMEVENT__TOP               0x000000c6
+
+#define DISPID_XMLDOM_DOCUMENT2                0x000000c7
+#define DISPID_XMLDOM_DOCUMENT2_NAMESPACES     0x000000c8
+#define DISPID_XMLDOM_DOCUMENT2_SCHEMAS        0x000000c9
+#define DISPID_XMLDOM_DOCUMENT2_VALIDATE       0x000000ca
+#define DISPID_XMLDOM_DOCUMENT2_SETPROPERTY    0x000000cb
+#define DISPID_XMLDOM_DOCUMENT2_GETPROPERTY    0x000000cc
+#define DISPID_XMLDOM_DOCUMENT2__TOP           0x000000cd
+
+#define DISPID_XMLDOM_DOCUMENT3                0x000000ce
+#define DISPID_XMLDOM_DOCUMENT3_VALIDATENODE   0x000000cf
+#define DISPID_XMLDOM_DOCUMENT3_IMPORTNODE     0x000000d0
+#define DISPID_XMLDOM_DOCUMENT3__TOP           0x000000d1
+
+#define DISPID_XMLDOM_SCHEMACOLLECTION                 0x00000002
+#define DISPID_XMLDOM_SCHEMACOLLECTION_ADD             0x00000003
+#define DISPID_XMLDOM_SCHEMACOLLECTION_GET             0x00000004
+#define DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE          0x00000005
+#define DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH          0x00000006
+#define DISPID_XMLDOM_SCHEMACOLLECTION_NAMESPACEURI    0x00000007
+#define DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION   0x00000008
+#define DISPID_XMLDOM_SCHEMACOLLECTION__TOP            0x00000009
+
+#define DISPID_XMLDOM_SELECTION                0x0000000a
+#define DISPID_XMLDOM_SELECTION_EXPR           0x0000000b
+#define DISPID_XMLDOM_SELECTION_CONTEXT        0x0000000c
+#define DISPID_XMLDOM_SELECTION_PEEKNODE       0x0000000d
+#define DISPID_XMLDOM_SELECTION_MATCHES        0x0000000e
+#define DISPID_XMLDOM_SELECTION_REMOVENEXT     0x0000000f
+#define DISPID_XMLDOM_SELECTION_REMOVEALL      0x00000010
+#define DISPID_XMLDOM_SELECTION_CLONE          0x00000011
+#define DISPID_XMLDOM_SELECTION_GETPROPERTY    0x00000012
+#define DISPID_XMLDOM_SELECTION_SETPROPERTY    0x00000013
+#define DISPID_XMLDOM_SELECTION__TOP           0x00000014
+
+#define DISPID_XMLDOM_TEMPLATE                 0x00000001
+#define DISPID_XMLDOM_TEMPLATE_STYLESHEET      0x00000002
+#define DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR 0x00000003
+#define DISPID_XMLDOM_TEMPLATE__TOP            0x00000004
+
+#define DISPID_XMLDOM_PROCESSOR                0x00000001
+#define DISPID_XMLDOM_PROCESSOR_INPUT          0x00000002
+#define DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE    0x00000003
+#define DISPID_XMLDOM_PROCESSOR_SETSTARTMODE   0x00000004
+#define DISPID_XMLDOM_PROCESSOR_STARTMODE      0x00000005
+#define DISPID_XMLDOM_PROCESSOR_STARTMODEURI   0x00000006
+#define DISPID_XMLDOM_PROCESSOR_OUTPUT         0x00000007
+#define DISPID_XMLDOM_PROCESSOR_TRANSFORM      0x00000008
+#define DISPID_XMLDOM_PROCESSOR_RESET          0x00000009
+#define DISPID_XMLDOM_PROCESSOR_READYSTATE     0x0000000a
+#define DISPID_XMLDOM_PROCESSOR_ADDPARAMETER   0x0000000b
+#define DISPID_XMLDOM_PROCESSOR_ADDOBJECT      0x0000000c
+#define DISPID_XMLDOM_PROCESSOR_STYLESHEET     0x0000000d
+#define DISPID_XMLDOM_PROCESSOR__TOP           0x0000000e
+
+#define  DISPID_XMLDSO                         0x10000
+#define  DISPID_XMLDSO_DOCUMENT                0x10001
+#define  DISPID_XMLDSO_JAVADSOCOMPATIBLE       0x10002
+
+/* SAX Defines */
+#define DISPID_SAX_XMLREADER__MIN              0x00000501
+#define DISPID_SAX_XMLREADER__MAX              0x00010000
+#define DISPID_SAX_XMLREADER__BASE             DISPID_SAX_XMLREADER__MIN
+
+#define DISPID_SAX_XMLREADER                   0x00000501
+#define DISPID_SAX_XMLREADER_GETFEATURE        0x00000502
+#define DISPID_SAX_XMLREADER_PUTFEATURE        0x00000503
+#define DISPID_SAX_XMLREADER_GETPROPERTY       0x00000504
+#define DISPID_SAX_XMLREADER_PUTPROPERTY       0x00000505
+#define DISPID_SAX_XMLREADER_ENTITYRESOLVER    0x00000506
+#define DISPID_SAX_XMLREADER_CONTENTHANDLER    0x00000507
+#define DISPID_SAX_XMLREADER_DTDHANDLER        0x00000508
+#define DISPID_SAX_XMLREADER_ERRORHANDLER      0x00000509
+#define DISPID_SAX_XMLREADER_BASEURL           0x0000050A
+#define DISPID_SAX_XMLREADER_SECUREBASEURL     0x0000050B
+#define DISPID_SAX_XMLREADER_PARSE             0x0000050C
+#define DISPID_SAX_XMLREADER_PARSEURL          0x0000050D
+#define DISPID_SAX_XMLREADER_PARENT            0x0000050E
+
+#define DISPID_SAX_XMLFILTER                   0x00000510
+#define DISPID_SAX_XMLFILTER_GETFEATURE        0x00000511
+#define DISPID_SAX_XMLFILTER_PUTFEATURE        0x00000512
+#define DISPID_SAX_XMLFILTER_GETPROPERTY       0x00000513
+#define DISPID_SAX_XMLFILTER_PUTPROPERTY       0x00000514
+#define DISPID_SAX_XMLFILTER_ENTITYRESOLVER    0x00000515
+#define DISPID_SAX_XMLFILTER_CONTENTHANDLER    0x00000516
+#define DISPID_SAX_XMLFILTER_DTDHANDLER        0x00000517
+#define DISPID_SAX_XMLFILTER_ERRORHANDLER      0x00000518
+#define DISPID_SAX_XMLFILTER_BASEURL           0x00000519
+#define DISPID_SAX_XMLFILTER_SECUREBASEURL     0x0000051A
+#define DISPID_SAX_XMLFILTER_PARSE             0x0000051B
+#define DISPID_SAX_XMLFILTER_PARSEURL          0x0000051C
+#define DISPID_SAX_XMLFILTER_PARENT            0x0000051D
+
+#define DISPID_SAX_LOCATOR                     0x00000520
+#define DISPID_SAX_LOCATOR_COLUMNNUMBER        0x00000521
+#define DISPID_SAX_LOCATOR_LINENUMBER          0x00000522
+#define DISPID_SAX_LOCATOR_PUBLICID            0x00000523
+#define DISPID_SAX_LOCATOR_SYSTEMID            0x00000524
+
+#define DISPID_SAX_ENTITYRESOLVER                       0x00000526
+#define DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY         0x00000527
+
+#define DISPID_SAX_CONTENTHANDLER                       0x00000529
+#define DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR       0x0000052A
+#define DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT         0x0000052B
+#define DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT           0x0000052C
+#define DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING    0x0000052D
+#define DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING      0x0000052E
+#define DISPID_SAX_CONTENTHANDLER_STARTELEMENT          0x0000052F
+#define DISPID_SAX_CONTENTHANDLER_ENDELEMENT            0x00000530
+#define DISPID_SAX_CONTENTHANDLER_CHARACTERS            0x00000531
+#define DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE   0x00000532
+#define DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION 0x00000533
+#define DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY         0x00000534
+
+#define DISPID_SAX_DTDHANDLER                           0x00000536
+#define DISPID_SAX_DTDHANDLER_NOTATIONDECL              0x00000537
+#define DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL        0x00000538
+
+#define DISPID_SAX_ERRORHANDLER                         0x0000053A
+#define DISPID_SAX_ERRORHANDLER_ERROR                   0x0000053B
+#define DISPID_SAX_ERRORHANDLER_FATALERROR              0x0000053C
+#define DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING        0x0000053D
+
+#define DISPID_SAX_ATTRIBUTES                           0x0000053F
+#define DISPID_SAX_ATTRIBUTES_LENGTH                    0x00000540
+#define DISPID_SAX_ATTRIBUTES_GETURI                    0x00000541
+#define DISPID_SAX_ATTRIBUTES_GETLOCALNAME              0x00000542
+#define DISPID_SAX_ATTRIBUTES_GETQNAME                  0x00000543
+#define DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME          0x00000544
+#define DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME         0x00000545
+#define DISPID_SAX_ATTRIBUTES_GETTYPE                   0x00000546
+#define DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME           0x00000547
+#define DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME          0x00000548
+#define DISPID_SAX_ATTRIBUTES_GETVALUE                  0x00000549
+#define DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME          0x0000054A
+#define DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME         0x0000054B
+
+#define DISPID_SAX_LEXICALHANDLER                       0x0000054D
+#define DISPID_SAX_LEXICALHANDLER_STARTDTD              0x0000054E
+#define DISPID_SAX_LEXICALHANDLER_ENDDTD                0x0000054F
+#define DISPID_SAX_LEXICALHANDLER_STARTENTITY           0x00000550
+#define DISPID_SAX_LEXICALHANDLER_ENDENTITY             0x00000551
+#define DISPID_SAX_LEXICALHANDLER_STARTCDATA            0x00000552
+#define DISPID_SAX_LEXICALHANDLER_ENDCDATA              0x00000553
+#define DISPID_SAX_LEXICALHANDLER_COMMENT               0x00000554
+
+#define DISPID_SAX_DECLHANDLER                          0x00000556
+#define DISPID_SAX_DECLHANDLER_ELEMENTDECL              0x00000557
+#define DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL            0x00000558
+#define DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL       0x00000559
+#define DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL       0x0000055A
+
+#define DISPID_MX_ATTRIBUTES_ADDATTRIBUTE               0x0000055D
+#define DISPID_MX_ATTRIBUTES_CLEAR                      0x0000055E
+#define DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE            0x0000055F
+#define DISPID_MX_ATTRIBUTES_SETATTRIBUTE               0x00000560
+#define DISPID_MX_ATTRIBUTES_SETATTRIBUTES              0x00000561
+#define DISPID_MX_ATTRIBUTES_SETLOCALNAME               0x00000562
+#define DISPID_MX_ATTRIBUTES_SETQNAME                   0x00000563
+#define DISPID_MX_ATTRIBUTES_SETTYPE                    0x00000564
+#define DISPID_MX_ATTRIBUTES_SETURI                     0x00000565
+#define DISPID_MX_ATTRIBUTES_SETVALUE                   0x00000566
+#define DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX      0x00000567
+
+#define DISPID_MX_WRITER                                0x00000568
+#define DISPID_MX_WRITER_OUTPUT                         0x00000569
+#define DISPID_MX_WRITER_DESTINATION                    0x0000056A
+#define DISPID_MX_WRITER_ENCODING                       0x0000056B
+#define DISPID_MX_WRITER_BYTEORDERMARK                  0x0000056C
+#define DISPID_MX_WRITER_INDENT                         0x0000056D
+#define DISPID_MX_WRITER_STANDALONE                     0x0000056E
+#define DISPID_MX_WRITER_OMITXMLDECLARATION             0x0000056F
+#define DISPID_MX_WRITER_VERSION                        0x00000570
+#define DISPID_MX_WRITER_DISABLEOUTPUTESCAPING          0x00000571
+#define DISPID_MX_WRITER_FLUSH                          0x00000572
+#define DISPID_MX_WRITER_RESET                          0x00000573
+
+#define DISPID_MX_READER_CONTROL                        0x00000575
+#define DISPID_MX_READER_CONTROL_ABORT                  0x00000576
+#define DISPID_MX_READER_CONTROL_RESUME                 0x00000577
+#define DISPID_MX_READER_CONTROL_SUSPEND                0x00000578
+
+#define DISPID_MX_SCHEMADECLHANDLER                     0x0000057a
+#define DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL   0x0000057b
+
+#define DISPID_MX_NSMGR                                 0x0000057d
+#define DISPID_MX_NSMGR_ALLOWOVERRIDE                   0x0000057e
+#define DISPID_MX_NSMGR_RESET                           0x0000057f
+#define DISPID_MX_NSMGR_PUSHCONTEXT                     0x00000580
+#define DISPID_MX_NSMGR_PUSHNODECONTEXT                 0x00000581
+#define DISPID_MX_NSMGR_POPCONTEXT                      0x00000582
+#define DISPID_MX_NSMGR_DECLAREPREFIX                   0x00000583
+#define DISPID_MX_NSMGR_GETDECLAREDPREFIXES             0x00000584
+#define DISPID_MX_NSMGR_GETPREFIXES                     0x00000585
+#define DISPID_MX_NSMGR_GETURI                          0x00000586
+#define DISPID_MX_NSMGR_GETURIFROMNODE                  0x00000587
+#define DISPID_MX_NSMGR_LENGTH                          0x00000588
+
+#define DISPID_MXXML_FILTER                             0x0000058a
+#define DISPID_MXXML_FILTER_CONTENTHANDLER              0x0000058b
+#define DISPID_MXXML_FILTER_DTDHANDLER                  0x0000058c
+#define DISPID_MXXML_FILTER_ENTITYRESOLVER              0x0000058d
+#define DISPID_MXXML_FILTER_ERRORHANDLER                0x0000058e
+#define DISPID_MXXML_FILTER_GETFEATURE                  0x0000058f
+#define DISPID_MXXML_FILTER_GETPROPERTY                 0x00000590
+#define DISPID_MXXML_FILTER_PUTFEATURE                  0x00000591
+#define DISPID_MXXML_FILTER_PUTPROPERTY                 0x00000592
+
+#define DISPID_SOM_VALIDATE                             0x0000058b
+#define DISPID_SOM_VALIDATEONLOAD                       0x0000058c
+#define DISPID_SOM_GETSCHEMA                            0x0000058d
+#define DISPID_SOM_GETDECLARATION                       0x0000058e
+#define DISPID_SOM_ITEMBYNAME                           0x0000058f
+#define DISPID_SOM_ITEMBYQNAME                          0x00000590
+#define DISPID_SOM_ANYATTRIBUTE                         0x00000591
+#define DISPID_SOM_ATTRIBUTEGROUPS                      0x00000592
+#define DISPID_SOM_ATTRIBUTES                           0x00000593
+#define DISPID_SOM_BASETYPES                            0x00000594
+#define DISPID_SOM_CONTENTMODEL                         0x00000595
+#define DISPID_SOM_CONTENTTYPE                          0x00000596
+#define DISPID_SOM_DEFAULTVALUE                         0x00000597
+#define DISPID_SOM_DERIVEDBY                            0x00000598
+#define DISPID_SOM_DISALLOWED                           0x00000599
+#define DISPID_SOM_ELEMENTS                             0x0000059a
+#define DISPID_SOM_ENUMERATION                          0x0000059b
+#define DISPID_SOM_FIELDS                               0x0000059c
+#define DISPID_SOM_FINAL                                0x0000059d
+#define DISPID_SOM_FIXEDVALUE                           0x0000059e
+#define DISPID_SOM_FRACTIONDIGITS                       0x0000059f
+#define DISPID_SOM_ID                                   0x000005a0
+#define DISPID_SOM_IDCONSTRAINTS                        0x000005a1
+#define DISPID_SOM_ISABSTRACT                           0x000005a2
+#define DISPID_SOM_ISNILLABLE                           0x000005a3
+#define DISPID_SOM_ISREFERENCE                          0x000005a4
+#define DISPID_SOM_ISVALID                              0x000005a5
+#define DISPID_SOM_ITEMTYPE                             0x000005a6
+#define DISPID_SOM_LENGTH                               0x000005a7
+#define DISPID_SOM_MAXEXCLUSIVE                         0x000005a8
+#define DISPID_SOM_MAXINCLUSIVE                         0x000005a9
+#define DISPID_SOM_MAXLENGTH                            0x000005aa
+#define DISPID_SOM_MAXOCCURS                            0x000005ab
+#define DISPID_SOM_MINEXCLUSIVE                         0x000005ac
+#define DISPID_SOM_MININCLUSIVE                         0x000005ad
+#define DISPID_SOM_MINLENGTH                            0x000005ae
+#define DISPID_SOM_MINOCCURS                            0x000005af
+#define DISPID_SOM_MODELGROUPS                          0x000005b0
+#define DISPID_SOM_NAME                                 0x000005b1
+#define DISPID_SOM_NAMESPACES                           0x000005b2
+#define DISPID_SOM_NAMESPACEURI                         0x000005b3
+#define DISPID_SOM_NOTATIONS                            0x000005b4
+#define DISPID_SOM_PARTICLES                            0x000005b5
+#define DISPID_SOM_PATTERNS                             0x000005b6
+#define DISPID_SOM_PROCESSCONTENTS                      0x000005b7
+#define DISPID_SOM_PROHIBITED                           0x000005b8
+#define DISPID_SOM_PUBLICIDENTIFIER                     0x000005b9
+#define DISPID_SOM_REFERENCEDKEY                        0x000005ba
+#define DISPID_SOM_SCHEMA                               0x000005bb
+#define DISPID_SOM_SCHEMALOCATIONS                      0x000005bc
+#define DISPID_SOM_SCOPE                                0x000005bd
+#define DISPID_SOM_SELECTOR                             0x000005be
+#define DISPID_SOM_SUBSTITUTIONGROUP                    0x000005bf
+#define DISPID_SOM_EXCLUSIONS                           0x000005c0
+#define DISPID_SOM_SYSTEMIDENTIFIER                     0x000005c1
+#define DISPID_SOM_TARGETNAMESPACE                      0x000005c2
+#define DISPID_SOM_TOTALDIGITS                          0x000005c3
+#define DISPID_SOM_TYPE                                 0x000005c4
+#define DISPID_SOM_TYPES                                0x000005c5
+#define DISPID_SOM_UNHANDLEDATTRS                       0x000005c6
+#define DISPID_SOM_USE                                  0x000005c7
+#define DISPID_SOM_VARIETY                              0x000005c8
+#define DISPID_SOM_VERSION                              0x000005c9
+#define DISPID_SOM_WHITESPACE                           0x000005ca
+#define DISPID_SOM_WRITEANNOTATION                      0x000005cb
+
+
+#endif /* __MSXML2DID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl
new file mode 100644
index 0000000..736ef76
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl
@@ -0,0 +1,3431 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <msxml6did.h>
+#include <idispids.h>
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
+    version(6.0),
+    helpstring("Microsoft XML, v6.0")
+]
+library MSXML2
+{
+
+importlib("stdole2.tlb");
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMSchemaCollection;
+interface IXMLDOMDocument2;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+interface IXMLDOMParseErrorCollection;
+interface IXTLRuntime;
+interface IXSLTemplate;
+interface IXSLProcessor;
+
+/* SAX Interfaces */
+interface ISAXAttributes;
+interface ISAXContentHandler;
+interface ISAXDeclHandler;
+interface ISAXDTDHandler;
+interface ISAXEntityResolver;
+interface ISAXErrorHandler;
+interface ISAXLexicalHandler;
+interface ISAXLocator;
+interface ISAXXMLFilter;
+interface ISAXXMLReader;
+
+interface IVBSAXAttributes;
+interface IVBSAXContentHandler;
+interface IVBSAXDeclHandler;
+interface IVBSAXDTDHandler;
+interface IVBSAXEntityResolver;
+interface IVBSAXErrorHandler;
+interface IVBSAXLexicalHandler;
+interface IVBSAXLocator;
+interface IVBSAXXMLFilter;
+interface IVBSAXXMLReader;
+
+interface IMXAttributes;
+interface IMXReaderControl;
+interface IMXWriter;
+
+interface IXMLDOMSchemaCollection2;
+interface ISchemaStringCollection;
+interface ISchemaItemCollection;
+interface ISchemaItem;
+interface ISchema;
+interface ISchemaParticle;
+interface ISchemaAttribute;
+interface ISchemaElement;
+interface ISchemaType;
+interface ISchemaComplexType;
+interface ISchemaAttributeGroup;
+interface ISchemaModelGroup;
+interface ISchemaAny;
+interface ISchemaIdentityConstraint;
+interface ISchemaNotation;
+
+
+cpp_quote("#define DOMDocument DOMDocument2")
+cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2")
+
+cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
+cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
+typedef enum tagDOMNodeType
+{
+    NODE_INVALID  		= 0,
+    NODE_ELEMENT  		= 1,
+    NODE_ATTRIBUTE		= 2,
+    NODE_TEXT			= 3,
+    NODE_CDATA_SECTION		= 4,
+    NODE_ENTITY_REFERENCE 	= 5,
+    NODE_ENTITY 		= 6,
+    NODE_PROCESSING_INSTRUCTION = 7,
+    NODE_COMMENT		= 8,
+    NODE_DOCUMENT		= 9,
+    NODE_DOCUMENT_TYPE		= 10,
+    NODE_DOCUMENT_FRAGMENT 	= 11,
+    NODE_NOTATION 		= 12
+} DOMNodeType;
+cpp_quote("#endif")
+
+typedef enum _SOMITEMTYPE
+{
+    SOMITEM_SCHEMA                      = 0x1000,
+    SOMITEM_ATTRIBUTE                   = 0x1001,
+    SOMITEM_ATTRIBUTEGROUP              = 0x1002,
+    SOMITEM_NOTATION                    = 0x1003,
+    SOMITEM_IDENTITYCONSTRAINT          = 0x1100,
+    SOMITEM_KEY                         = 0x1101,
+    SOMITEM_KEYREF                      = 0x1102,
+    SOMITEM_UNIQUE                      = 0x1103,
+    SOMITEM_ANYTYPE                     = 0x2000,
+    SOMITEM_DATATYPE                    = 0x2100,
+    SOMITEM_DATATYPE_ANYTYPE            = 0x2101,
+    SOMITEM_DATATYPE_ANYURI             = 0x2102,
+    SOMITEM_DATATYPE_BASE64BINARY       = 0x2103,
+    SOMITEM_DATATYPE_BOOLEAN            = 0x2104,
+    SOMITEM_DATATYPE_BYTE               = 0x2105,
+    SOMITEM_DATATYPE_DATE               = 0x2106,
+    SOMITEM_DATATYPE_DATETIME           = 0x2107,
+    SOMITEM_DATATYPE_DAY                = 0x2108,
+    SOMITEM_DATATYPE_DECIMAL            = 0x2109,
+    SOMITEM_DATATYPE_DOUBLE             = 0x210A,
+    SOMITEM_DATATYPE_DURATION           = 0x210B,
+    SOMITEM_DATATYPE_ENTITIES           = 0x210C,
+    SOMITEM_DATATYPE_ENTITY             = 0x210D,
+    SOMITEM_DATATYPE_FLOAT              = 0x210E,
+    SOMITEM_DATATYPE_HEXBINARY          = 0x210F,
+    SOMITEM_DATATYPE_ID                 = 0x2110,
+    SOMITEM_DATATYPE_IDREF              = 0x2111,
+    SOMITEM_DATATYPE_IDREFS             = 0x2112,
+    SOMITEM_DATATYPE_INT                = 0x2113,
+    SOMITEM_DATATYPE_INTEGER            = 0x2114,
+    SOMITEM_DATATYPE_LANGUAGE           = 0x2115,
+    SOMITEM_DATATYPE_LONG               = 0x2116,
+    SOMITEM_DATATYPE_MONTH              = 0x2117,
+    SOMITEM_DATATYPE_MONTHDAY           = 0x2118,
+    SOMITEM_DATATYPE_NAME               = 0x2119,
+    SOMITEM_DATATYPE_NCNAME             = 0x211A,
+    SOMITEM_DATATYPE_NEGATIVEINTEGER    = 0x211B,
+    SOMITEM_DATATYPE_NMTOKEN            = 0x211C,
+    SOMITEM_DATATYPE_NMTOKENS           = 0x211D,
+    SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,
+    SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,
+    SOMITEM_DATATYPE_NORMALIZEDSTRING   = 0x2120,
+    SOMITEM_DATATYPE_NOTATION           = 0x2121,
+    SOMITEM_DATATYPE_POSITIVEINTEGER    = 0x2122,
+    SOMITEM_DATATYPE_QNAME              = 0x2123,
+    SOMITEM_DATATYPE_SHORT              = 0x2124,
+    SOMITEM_DATATYPE_STRING             = 0x2125,
+    SOMITEM_DATATYPE_TIME               = 0x2126,
+    SOMITEM_DATATYPE_TOKEN              = 0x2127,
+    SOMITEM_DATATYPE_UNSIGNEDBYTE       = 0x2128,
+    SOMITEM_DATATYPE_UNSIGNEDINT        = 0x2129,
+    SOMITEM_DATATYPE_UNSIGNEDLONG       = 0x212A,
+    SOMITEM_DATATYPE_UNSIGNEDSHORT      = 0x212B,
+    SOMITEM_DATATYPE_YEAR               = 0x212C,
+    SOMITEM_DATATYPE_YEARMONTH          = 0x212D,
+    SOMITEM_DATATYPE_ANYSIMPLETYPE      = 0x21FF,
+    SOMITEM_SIMPLETYPE                  = 0x2200,
+    SOMITEM_COMPLEXTYPE                 = 0x2400,
+    SOMITEM_PARTICLE                    = 0x4000,
+    SOMITEM_ANY                         = 0x4001,
+    SOMITEM_ANYATTRIBUTE                = 0x4002,
+    SOMITEM_ELEMENT                     = 0x4003,
+    SOMITEM_GROUP                       = 0x4100,
+    SOMITEM_ALL                         = 0x4101,
+    SOMITEM_CHOICE                      = 0x4102,
+    SOMITEM_SEQUENCE                    = 0x4103,
+    SOMITEM_EMPTYPARTICLE               = 0x4104,
+    SOMITEM_NULL                        = 0x0800,
+    SOMITEM_NULL_TYPE                   = 0x2800,
+    SOMITEM_NULL_ANY                    = 0x4801,
+    SOMITEM_NULL_ANYATTRIBUTE           = 0x4802,
+    SOMITEM_NULL_ELEMENT                = 0x4803,
+} SOMITEMTYPE;
+
+typedef enum _SCHEMAUSE
+{
+    SCHEMAUSE_OPTIONAL,
+    SCHEMAUSE_PROHIBITED,
+    SCHEMAUSE_REQUIRED,
+} SCHEMAUSE;
+
+typedef enum _SCHEMADERIVATIONMETHOD
+{
+    SCHEMADERIVATIONMETHOD_EMPTY        = 0x0000,
+    SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,
+    SCHEMADERIVATIONMETHOD_EXTENSION    = 0x0002,
+    SCHEMADERIVATIONMETHOD_RESTRICTION  = 0x0004,
+    SCHEMADERIVATIONMETHOD_LIST         = 0x0008,
+    SCHEMADERIVATIONMETHOD_UNION        = 0x0010,
+    SCHEMADERIVATIONMETHOD_ALL          = 0x00FF,
+    SCHEMADERIVATIONMETHOD_NONE         = 0x0100,
+} SCHEMADERIVATIONMETHOD;
+
+typedef enum _SCHEMACONTENTTYPE
+{
+    SCHEMACONTENTTYPE_EMPTY,
+    SCHEMACONTENTTYPE_TEXTONLY,
+    SCHEMACONTENTTYPE_ELEMENTONLY,
+    SCHEMACONTENTTYPE_MIXED,
+} SCHEMACONTENTTYPE;
+
+typedef enum _SCHEMAPROCESSCONTENTS
+{
+    SCHEMAPROCESSCONTENTS_NONE,
+    SCHEMAPROCESSCONTENTS_SKIP,
+    SCHEMAPROCESSCONTENTS_LAX,
+    SCHEMAPROCESSCONTENTS_STRICT,
+} SCHEMAPROCESSCONTENTS;
+
+typedef enum _SCHEMAWHITESPACE
+{
+    SCHEMAWHITESPACE_NONE       = -1,
+    SCHEMAWHITESPACE_PRESERVE   =  0,
+    SCHEMAWHITESPACE_REPLACE    =  1,
+    SCHEMAWHITESPACE_COLLAPSE   =  2,
+} SCHEMAWHITESPACE;
+
+
+typedef enum _SCHEMATYPEVARIETY
+{
+    SCHEMATYPEVARIETY_NONE      = -1,
+    SCHEMATYPEVARIETY_ATOMIC    =  0,
+    SCHEMATYPEVARIETY_LIST      =  1,
+    SCHEMATYPEVARIETY_UNION     =  2,
+} SCHEMATYPEVARIETY;
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNode : IDispatch
+{
+    [propget, id(DISPID_DOM_NODE_NODENAME)]
+    HRESULT nodeName([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue([in] VARIANT var1);
+
+    [propget, id(DISPID_DOM_NODE_NODETYPE)]
+    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);
+
+    [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+    HRESULT parentNode([retval, out] IXMLDOMNode **parent);
+
+    [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);
+
+    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);
+
+    [id(DISPID_DOM_NODE_INSERTBEFORE)]
+    HRESULT insertBefore(
+        [in] IXMLDOMNode *newNode,
+        [in] VARIANT var1,
+        [retval, out] IXMLDOMNode **outOldNode);
+
+    [id(DISPID_DOM_NODE_REPLACECHILD)]
+    HRESULT replaceChild(
+        [in] IXMLDOMNode *newNode,
+        [in] IXMLDOMNode *oldNode,
+        [retval, out] IXMLDOMNode **outOldNode);
+
+    [id(DISPID_DOM_NODE_REMOVECHILD)]
+    HRESULT removeChild(
+        [in] IXMLDOMNode *domNode,
+        [retval, out] IXMLDOMNode **oldNode);
+
+    [id(DISPID_DOM_NODE_APPENDCHILD)]
+    HRESULT appendChild(
+        [in] IXMLDOMNode *newNode,
+        [retval, out] IXMLDOMNode **outNewNode);
+
+    [id(DISPID_DOM_NODE_HASCHILDNODES)]
+    HRESULT hasChildNodes(
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);
+
+    [id(DISPID_DOM_NODE_CLONENODE)]
+    HRESULT cloneNode(
+        [in] VARIANT_BOOL pbool,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+    HRESULT nodeTypeString([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+    HRESULT specified([retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+    HRESULT definition([retval,out] IXMLDOMNode **domNode);
+
+    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue([in] VARIANT var1);
+
+    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_NODE_XML)]
+    HRESULT xml([retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+    HRESULT transformNode(
+        [in] IXMLDOMNode *domNode,
+        [retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+    HRESULT selectNodes(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **outList);
+
+    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+    HRESULT selectSingleNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget,id(DISPID_XMLDOM_NODE_PARSED)]
+    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+    HRESULT namespaceURI([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+    HRESULT prefix([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+    HRESULT baseName([retval, out] BSTR *p);
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+    HRESULT transformNodeToObject(
+        [in] IXMLDOMNode *domNode,
+        [in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);
+
+    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);
+
+    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);
+
+    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement([in] IXMLDOMElement *domElement);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+    HRESULT createElement(
+        [in] BSTR p,
+        [retval, out] IXMLDOMElement **domElement);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+    HRESULT createDocumentFragment(
+        [retval, out] IXMLDOMDocumentFragment **docFrag);
+
+    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+    HRESULT createTextNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMText **text);
+
+    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+    HRESULT createComment(
+        [in] BSTR p,
+        [retval, out] IXMLDOMComment **comment);
+
+    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+    HRESULT createCDATASection(
+        [in] BSTR p,
+        [retval, out] IXMLDOMCDATASection **cdata);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+    HRESULT createProcessingInstruction(
+        [in] BSTR target,
+        [in] BSTR data,
+        [retval, out] IXMLDOMProcessingInstruction **pi);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+    HRESULT createAttribute(
+        [in] BSTR p,
+        [retval, out] IXMLDOMAttribute **attribute);
+
+    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+    HRESULT createEntityReference(
+        [in] BSTR p,
+        [retval, out] IXMLDOMEntityReference **entityRef);
+
+    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **resultList);
+
+    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+    HRESULT createNode(
+        [in] VARIANT var,
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+    HRESULT nodeFromID(
+        [in] BSTR id,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+    HRESULT load(
+        [in] VARIANT var1,
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [propget, id(DISPID_READYSTATE)]
+    HRESULT readyState([retval, out] LONG *value);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+    HRESULT parseError([retval, out] IXMLDOMParseError **err);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async([retval, out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async([in] VARIANT_BOOL pbool);
+
+    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+    HRESULT abort();
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+    HRESULT loadXML(
+        [in] BSTR p,
+        [out, retval] VARIANT_BOOL *pbool);
+
+    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+    HRESULT save(
+        [in] VARIANT var1);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse([in] VARIANT_BOOL pbool);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals([in] VARIANT_BOOL pbool);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange([in] VARIANT var1);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable([in] VARIANT var1);
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+    HRESULT ontransformnode([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (373984c8-b845-449b-91e7-45ac83036ade)
+]
+interface IXMLDOMSchemaCollection : IDispatch
+{
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
+    HRESULT add(
+        [in] BSTR uri,
+        [in] VARIANT var);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
+    HRESULT get(
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
+    HRESULT remove(
+        [in] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
+    HRESULT length(
+        [retval, out] LONG *length);
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);
+
+    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
+    HRESULT addCollection(
+        [in] IXMLDOMSchemaCollection *otherCollection);
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),
+]
+interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection
+{
+    [id(DISPID_SOM_VALIDATE)]
+    HRESULT validate();
+
+    [propput, id(DISPID_SOM_VALIDATEONLOAD)]
+    HRESULT validateOnLoad(
+        [in] VARIANT_BOOL validateOnLoad);
+
+    [propget, id(DISPID_SOM_VALIDATEONLOAD)]
+    HRESULT validateOnLoad(
+        [out,retval] VARIANT_BOOL* validateOnLoad);
+
+    [id(DISPID_SOM_GETSCHEMA)]
+    HRESULT getSchema(
+        [in] BSTR namespaceURI,
+        [out,retval] ISchema** schema);
+
+    [id(DISPID_SOM_GETDECLARATION)]
+    HRESULT getDeclaration(
+        [in] IXMLDOMNode* node,
+        [out,retval]ISchemaItem** item);
+};
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument2 : IXMLDOMDocument
+{
+    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
+    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+    HRESULT schemas([retval, out] VARIANT *var1);
+
+    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+    HRESULT schemas([in] VARIANT var1);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
+    HRESULT validate(
+        [retval, out] IXMLDOMParseError **err);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
+    HRESULT setProperty(
+        [in] BSTR p,
+        [in] VARIANT var);
+
+    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR p,
+        [retval, out] VARIANT *var);
+}
+
+[
+    local,
+    object,
+    dual,
+    uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),
+    oleautomation,
+]
+interface IXMLDOMDocument3 : IXMLDOMDocument2
+{
+    [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]
+    HRESULT validateNode(
+        [in] IXMLDOMNode *node,
+        [out, retval] IXMLDOMParseError **error);
+
+    [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]
+    HRESULT importNode(
+        [in] IXMLDOMNode *node,
+        [in] VARIANT_BOOL deep,
+        [out, retval] IXMLDOMNode **clone);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length([retval, out] LONG *lLength);
+
+    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+    HRESULT nextNode(
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NODELIST_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
+]
+interface IXMLDOMSelection : IXMLDOMNodeList
+{
+    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
+    HRESULT expr([retval, out] BSTR *p);
+
+    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
+    HRESULT expr([in] BSTR p);
+
+    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+    HRESULT context([retval, out] IXMLDOMNode **ppNode);
+
+    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+    HRESULT context([in] IXMLDOMNode * pNode);
+
+    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
+    HRESULT peekNode(
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_MATCHES)]
+    HRESULT matches(
+        [in] IXMLDOMNode *pNode,
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)]
+    HRESULT removeNext(
+        [retval, out] IXMLDOMNode **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
+    HRESULT removeAll();
+
+    [id(DISPID_XMLDOM_SELECTION_CLONE)]
+    HRESULT clone(
+        [retval, out] IXMLDOMSelection **ppNode);
+
+    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR p,
+        [retval, out] VARIANT * var);
+
+    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
+    HRESULT setProperty(
+        [in] BSTR p,
+        [in] VARIANT var);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+    HRESULT getNamedItem(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+    HRESULT setNamedItem(
+        [in] IXMLDOMNode *newNode,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+    HRESULT removeNamedItem(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length([retval, out] LONG *lLength);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+    HRESULT getQualifiedItem(
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+    HRESULT removeQualifiedItem(
+        [in] BSTR name,
+        [in] BSTR uri,
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+    HRESULT nextNode(
+        [retval, out] IXMLDOMNode **outNode);
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa413-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propput, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data([in] BSTR data);
+
+    [propget, id(DISPID_DOM_DATA_LENGTH)]
+    HRESULT length([retval, out] LONG *len);
+
+    [id(DISPID_DOM_DATA_SUBSTRING)]
+    HRESULT substringData(
+        [in] LONG offset,
+        [in] LONG count,
+        [retval, out] BSTR *p);
+
+    [id(DISPID_DOM_DATA_APPEND)]
+    HRESULT appendData(
+        [in] BSTR p);
+
+    [id(DISPID_DOM_DATA_INSERT)]
+    HRESULT insertData(
+        [in] LONG offset,
+        [in] BSTR p);
+
+    [id(DISPID_DOM_DATA_DELETE)]
+    HRESULT deleteData(
+        [in] LONG offset,
+        [in] LONG count);
+
+    [id(DISPID_DOM_DATA_REPLACE)]
+    HRESULT replaceData(
+        [in] LONG offset,
+        [in] LONG count,
+        [in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMAttribute : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value([retval, out] VARIANT *var1);
+
+    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMElement : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+    HRESULT tagName([retval, out] BSTR *p);
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute(
+        [in] BSTR p,
+        [retval, out] VARIANT *var);
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] BSTR p,
+        [in] VARIANT var);
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute(
+        [in] BSTR p);
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+    HRESULT getAttributeNode(
+        [in] BSTR p,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+    HRESULT setAttributeNode(
+        [in] IXMLDOMAttribute *domAttribute,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+    HRESULT removeAttributeNode(
+        [in] IXMLDOMAttribute *domAttribute,
+        [retval, out] IXMLDOMAttribute **attributeNode);
+
+    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName(
+        [in] BSTR p,
+        [retval, out] IXMLDOMNodeList **resultList);
+
+    [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+    HRESULT normalize();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMText : IXMLDOMCharacterData
+{
+    [id(DISPID_DOM_TEXT_SPLITTEXT)]
+    HRESULT splitText(
+        [in] LONG offset,
+        [retval, out] IXMLDOMText **txtNode);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_PI_TARGET)]
+    HRESULT target([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_PI_DATA)]
+    HRESULT data([retval, out] BSTR *p);
+
+    [propput, id(DISPID_DOM_PI_DATA)]
+    HRESULT data([in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCDATASection : IXMLDOMText
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+    HRESULT name([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNotation : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+    HRESULT publicId([retval, out] VARIANT *id);
+
+    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+    HRESULT systemId([retval, out] VARIANT *id);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntity : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+    HRESULT publicId([retval, out] VARIANT *id1);
+
+    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+    HRESULT systemId([retval, out] VARIANT *id1);
+
+    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+    HRESULT notationName([retval, out] BSTR *p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+    HRESULT hasFeature(
+        [in] BSTR feature,
+        [in] BSTR version,
+        [retval, out] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa425-272f-11d2-836f-0000f87a7782)
+]
+interface IXTLRuntime : IXMLDOMNode
+{
+    [id(DISPID_XTLRUNTIME_UNIQUEID)]
+    HRESULT uniqueID(
+        [in]IXMLDOMNode *pNode,
+        [retval, out]LONG *pID);
+
+    [id(DISPID_XTLRUNTIME_DEPTH)]
+    HRESULT depth(
+        [in] IXMLDOMNode *pNode,
+        [retval, out]LONG * pDepth);
+
+    [id(DISPID_XTLRUNTIME_CHILDNUMBER)]
+    HRESULT childNumber(
+        [in]IXMLDOMNode *pNode,
+        [retval, out] LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
+    HRESULT ancestorChildNumber(
+        [in]BSTR bstr,
+        [in]IXMLDOMNode *pNode,
+        [retval, out]LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
+    HRESULT absoluteChildNumber(
+        [in]IXMLDOMNode *pNode,
+        [retval, out]LONG *pNumber);
+
+    [id(DISPID_XTLRUNTIME_FORMATINDEX)]
+    HRESULT formatIndex(
+        [in] LONG lIndex,
+        [in] BSTR bstr,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
+    HRESULT formatNumber(
+        [in] double dblNumber,
+        [in] BSTR bstr,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATDATE)]
+    HRESULT formatDate(
+        [in] VARIANT var1,
+        [in] BSTR bstr,
+        [optional, in] VARIANT var2,
+        [retval, out]BSTR *pbstr);
+
+    [id(DISPID_XTLRUNTIME_FORMATTIME)]
+    HRESULT formatTime(
+        [in] VARIANT var1,
+        [in] BSTR bstr,
+        [optional, in] VARIANT var2,
+        [retval, out]BSTR *pbstr);
+
+}
+
+[
+    uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents
+{
+    properties:
+    methods:
+    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable();
+
+    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLProcessor : IDispatch
+{
+    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+    HRESULT input([in] VARIANT var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+    HRESULT input([retval, out] VARIANT *var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
+    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);
+
+    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
+    HRESULT setStartMode(
+        [in] BSTR p,
+        [in, defaultvalue("")] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
+    HRESULT startMode([retval, out] BSTR *p);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
+    HRESULT startModeURI([retval, out] BSTR *uri);
+
+    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+    HRESULT output([in] VARIANT var);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+    HRESULT output([retval, out] VARIANT *var);
+
+    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
+    HRESULT transform(
+        [retval, out] VARIANT_BOOL *pbool);
+
+    [id(DISPID_XMLDOM_PROCESSOR_RESET)]
+    HRESULT reset();
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
+    HRESULT readyState([retval, out] LONG *pstate);
+
+    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
+    HRESULT addParameter(
+        [in] BSTR p,
+        [in] VARIANT var,
+        [in, defaultvalue("")] BSTR uri);
+
+    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
+    HRESULT addObject(
+        [in] IDispatch* obj,
+        [in] BSTR uri);
+
+    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
+    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLTemplate : IDispatch
+{
+    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+    HRESULT stylesheet([in] IXMLDOMNode *node);
+
+    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+
+    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
+    HRESULT createProcessor(
+        [retval, out] IXSLProcessor **ppProcessor);
+}
+
+[
+    object,
+    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
+    odl,
+    dual,
+    oleautomation,
+    pointer_default(unique)
+]
+interface IXMLHTTPRequest : IDispatch
+{
+    [id(1)]
+    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
+                 [in,optional] VARIANT username, [in,optional] VARIANT password);
+
+    [id(2)]
+    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+    [id(3)]
+    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);
+
+    [id(4)]
+    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);
+
+    [id(5)]
+    HRESULT send([in, optional] VARIANT body);
+
+    [id(6)]
+    HRESULT abort();
+
+    [propget, id(7)]
+    HRESULT status([out, retval] LONG *pStatus);
+
+    [propget, id(8)]
+    HRESULT statusText([out, retval] BSTR *pStatus);
+
+    [propget, id(9)]
+    HRESULT responseXML([out, retval] IDispatch **pBody);
+
+    [propget, id(10)]
+    HRESULT responseText([out, retval] BSTR *pBody);
+
+    [propget, id(11)]
+    HRESULT responseBody([out, retval] VARIANT *pBody);
+
+    [propget, id(12)]
+    HRESULT responseStream([out, retval] VARIANT *pBody);
+
+    [propget, id(13)]
+    HRESULT readyState([out, retval] LONG *pState);
+
+    [propput, id(14)]
+    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+};
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)
+]
+interface IServerXMLHTTPRequest : IXMLHTTPRequest
+{
+    typedef enum _SERVERXMLHTTP_OPTION
+    {
+        SXH_OPTION_URL = -1,
+        SXH_OPTION_URL_CODEPAGE,
+        SXH_OPTION_ESCAPE_PERCENT_IN_URL,
+        SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,
+        SXH_OPTION_SELECT_CLIENT_SSL_CERT
+    } SERVERXMLHTTP_OPTION;
+
+    [id(15)]
+    HRESULT setTimeouts(
+        [in] long resolveTimeout,
+        [in] long connectTimeout,
+        [in] long sendTimeout,
+        [in] long receiveTimeout);
+
+    [id(16)]
+    HRESULT waitForResponse(
+        [in, optional] VARIANT timeoutInSeconds,
+        [out, retval] VARIANT_BOOL * isSuccessful);
+
+    [id(17)]
+    HRESULT getOption(
+        [in] SERVERXMLHTTP_OPTION option,
+        [out, retval] VARIANT * value);
+
+    [id(18)]
+    HRESULT setOption(
+        [in] SERVERXMLHTTP_OPTION option,
+        [in] VARIANT value);
+}
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)
+]
+interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest
+{
+    typedef enum _SXH_PROXY_SETTING
+    {
+        SXH_PROXY_SET_DEFAULT = 0,
+        SXH_PROXY_SET_PRECONFIG = 0,
+        SXH_PROXY_SET_DIRECT,
+        SXH_PROXY_SET_PROXY
+    } SXH_PROXY_SETTING;
+
+    [id(19)]
+    HRESULT setProxy(
+        [in] SXH_PROXY_SETTING proxySetting,
+        [in, optional] VARIANT varProxyServer,
+        [in, optional] VARIANT varBypassList);
+
+    [id(20)]
+    HRESULT setProxyCredentials(
+        [in] BSTR bstrUserName,
+        [in] BSTR bstrPassword);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT errorCode([retval, out] LONG *errCode);
+
+    [propget, id(DISPID_DOM_ERROR_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_REASON)]
+    HRESULT reason([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+    HRESULT srcText([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_LINE)]
+    HRESULT line([retval, out] LONG *lineNo);
+
+    [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+    HRESULT linepos([retval, out] LONG * linePos);
+
+    [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+    HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa428-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError2 : IXMLDOMParseError
+{
+    [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]
+    HRESULT errorXPath([retval, out] BSTR *xpathexpr);
+
+    [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]
+    HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);
+
+    [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]
+    HRESULT errorParameters(
+        [in] long index,
+        [retval, out] BSTR *param);
+
+    [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]
+    HRESULT errorParametersCount([retval, out] long *count);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa429-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseErrorCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item(
+        [in] long index,
+        [retval, out] IXMLDOMParseError2 **error);
+
+    [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]
+    HRESULT length( [retval, out] long *length);
+
+    [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]
+    HRESULT next( [retval, out] IXMLDOMParseError2 **error);
+
+    [id(DISPID_DOM_ERRORCOLLECTION_RESET)]
+    HRESULT reset();
+
+    [propget, hidden, restricted, id(DISPID_NEWENUM)]
+    HRESULT _newEnum( [retval, out] IUnknown **ppunk);
+}
+
+[
+    uuid(F6D90F11-9C73-11D3-B32E-00C04F990BB4)
+]
+coclass DOMDocument
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument26
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f5078f32-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument30
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(88d969c0-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument40
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("XML DOM Document 6.0"),
+    progid("Msxml2.DOMDocument.6.0"),
+    threading(both),
+    uuid(88d96a05-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument60
+{
+    [default] interface IXMLDOMDocument3;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(F6D90F12-9C73-11D3-B32E-00C04F990BB4)
+]
+coclass FreeThreadedDOMDocument
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument26
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f5078f33-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument30
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(88d969c1-f192-11d4-a65f-0040963251e5)
+]
+coclass FreeThreadedDOMDocument40
+{
+    [default] interface IXMLDOMDocument2;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("Free threaded XML DOM Document 6.0"),
+    progid("Msxml2.FreeThreadedDOMDocument.6.0"),
+    threading(both),
+    uuid(88d96a06-f192-11d4-a65f-0040963251e5),
+]
+coclass FreeThreadedDOMDocument60
+{
+    [default] interface IXMLDOMDocument3;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass XMLHTTP
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP26
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(f5078f35-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP30
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(88d969c5-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP40
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    helpstring("XML HTTP 6.0"),
+    progid("Msxml2.XMLHTTP.6.0"),
+    threading(apartment),
+    uuid(88d96a0a-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP60
+{
+    [default] interface IXMLHTTPRequest;
+}
+
+[
+    uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1)
+]
+coclass ServerXMLHTTP
+{
+    [default] interface IServerXMLHTTPRequest;
+}
+
+[
+    uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3)
+]
+coclass ServerXMLHTTP30
+{
+    [default] interface IServerXMLHTTPRequest;
+}
+
+[
+    uuid(88d969c6-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP40
+{
+    [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+    helpstring("Server XML HTTP 6.0"),
+    progid("Msxml2.ServerXMLHTTP.6.0"),
+    threading(apartment),
+    uuid(88d96a0b-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP60
+{
+    [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+    uuid(373984c9-b845-449b-91e7-45ac83036ade)
+]
+coclass XMLSchemaCache
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache26
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    uuid(f5078f34-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache30
+{
+    [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+    uuid(88d969c2-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache40
+{
+    [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+    helpstring("XML Schema Cache 6.0"),
+    progid("Msxml2.XMLSchemaCache.6.0"),
+    threading(both),
+    uuid(88d96a07-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache60
+{
+    [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+    uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)
+]
+coclass XSLTemplate
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    uuid(f5078f21-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate26
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    uuid(f5078f36-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate30
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    uuid(88d969c3-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate40
+{
+    [default] interface IXSLTemplate;
+}
+
+[
+    helpstring("XSL Template 6.0"),
+    progid("Msxml2.XSLTemplate.6.0"),
+    threading(both),
+    uuid(88d96a08-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate60
+{
+    [default] interface IXSLTemplate;
+}
+
+/*
+ * Sax Interfaces
+ */
+[
+    object,
+    local,
+    uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)
+]
+interface ISAXAttributes : IUnknown
+{
+    HRESULT getLength(
+        [out, retval] int *length);
+
+    HRESULT getURI(
+        [in] int nIndex,
+        [out] const WCHAR **pUrl,
+        [out] int *pUriSize);
+
+    HRESULT getLocalName(
+        [in] int nIndex,
+        [out] const WCHAR **pLocalName,
+        [out] int *pLocalNameLength);
+
+    HRESULT getQName(
+        [in] int nIndex,
+        [out] const WCHAR **pQName,
+        [out] int *pQNameLength);
+
+    HRESULT getName(
+        [in] int nIndex,
+        [out] const WCHAR **pUri,
+        [out] int * pUriLength,
+        [out] const WCHAR ** pLocalName,
+        [out] int * pLocalNameSize,
+        [out] const WCHAR ** pQName,
+        [out] int * pQNameLength);
+
+    HRESULT getIndexFromName(
+        [in] const WCHAR * pUri,
+        [in] int cUriLength,
+        [in] const WCHAR * pLocalName,
+        [in] int cocalNameLength,
+        [out, retval] int * index);
+
+    HRESULT getIndexFromQName(
+        [in] const WCHAR * pQName,
+        [in] int nQNameLength,
+        [out, retval] int * index);
+
+    HRESULT getType(
+        [in] int nIndex,
+        [out] const WCHAR ** pType,
+        [out] int * pTypeLength);
+
+    HRESULT getTypeFromName(
+        [in] const WCHAR * pUri,
+        [in] int nUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [out] const WCHAR ** pType,
+        [out] int * nType);
+
+    HRESULT getTypeFromQName(
+        [in] const WCHAR * pQName,
+        [in] int nQName,
+        [out] const WCHAR ** pType,
+        [out] int * nType);
+
+    HRESULT getValue(
+        [in] int nIndex,
+        [out] const WCHAR ** pValue,
+        [out] int * nValue);
+
+    HRESULT getValueFromName(
+        [in] const WCHAR * pUri,
+        [in] int nUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [out] const WCHAR ** pValue,
+        [out] int * nValue);
+
+    HRESULT getValueFromQName(
+        [in] const WCHAR * pQName,
+        [in] int nQName,
+        [out] const WCHAR ** pValue,
+        [out] int * nValue);
+};
+
+[
+    object,
+    local,
+    uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)
+]
+interface ISAXContentHandler : IUnknown
+{
+    HRESULT putDocumentLocator(
+        [in] ISAXLocator * pLocator);
+
+    HRESULT startDocument();
+
+    HRESULT endDocument();
+
+    HRESULT startPrefixMapping(
+        [in] const WCHAR * pPrefix,
+        [in] int nPrefix,
+        [in] const WCHAR * pUri,
+        [in] int nUri);
+
+    HRESULT endPrefixMapping(
+        [in] const WCHAR * pPrefix,
+        [in] int nPrefix);
+
+    HRESULT startElement(
+        [in] const WCHAR * pNamespaceUri,
+        [in] int nNamespaceUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [in] const WCHAR * pQName,
+        [in] int nQName,
+        [in] ISAXAttributes * pAttr);
+
+    HRESULT endElement(
+        [in] const WCHAR * pNamespaceUri,
+        [in] int nNamespaceUri,
+        [in] const WCHAR * pLocalName,
+        [in] int nLocalName,
+        [in] const WCHAR * pQName,
+        [in] int nQName);
+
+    HRESULT characters(
+        [in] const WCHAR * pChars,
+        [in] int nChars);
+
+    HRESULT ignorableWhitespace(
+        [in] const WCHAR * pChars,
+        [in] int nChars);
+
+    HRESULT processingInstruction(
+        [in] const WCHAR * pTarget,
+        [in] int nTarget,
+        [in] const WCHAR * pData,
+        [in] int nData);
+
+    HRESULT skippedEntity(
+        [in] const WCHAR * pName,
+        [in] int nName);
+};
+
+[
+    object,
+    local,
+    uuid(862629ac-771a-47b2-8337-4e6843c1be90)
+]
+interface ISAXDeclHandler : IUnknown
+{
+    HRESULT elementDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pModel,
+        [in] int nModel);
+
+    HRESULT attributeDecl(
+        [in] const WCHAR * pElementName,
+        [in] int nElementName,
+        [in] const WCHAR * pAttributeName,
+        [in] int nAttributeName,
+        [in] const WCHAR * pType,
+        [in] int nType,
+        [in] const WCHAR * pValueDefault,
+        [in] int nValueDefault,
+        [in] const WCHAR * pValue,
+        [in] int nValue);
+
+    HRESULT internalEntityDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pValue,
+        [in] int nValue);
+
+    HRESULT externalEntityDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId);
+};
+
+[
+    object,
+    local,
+    uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)
+]
+interface ISAXDTDHandler : IUnknown
+{
+    HRESULT notationDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId);
+
+    HRESULT unparsedEntityDecl(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId,
+        [in] const WCHAR * pNotationName,
+        [in] int nNotationName);
+};
+
+[
+    object,
+    local,
+    uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),
+]
+interface ISAXEntityResolver : IUnknown
+{
+    HRESULT resolveEntity(
+        [in] const WCHAR * pPublicId,
+        [in] const WCHAR * pSystemId,
+        [out, retval] VARIANT * ret);
+};
+
+[
+    object,
+    local,
+    uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)
+]
+interface ISAXErrorHandler : IUnknown
+{
+    HRESULT error(
+        [in] ISAXLocator * pLocator,
+        [in] const WCHAR * pErrorMessage,
+        [in] HRESULT hrErrorCode);
+
+    HRESULT fatalError(
+        [in] ISAXLocator * pLocator,
+        [in] const WCHAR * pErrorMessage,
+        [in] HRESULT hrErrorCode);
+
+    HRESULT ignorableWarning(
+        [in] ISAXLocator * pLocator,
+        [in] const WCHAR * pErrorMessage,
+        [in] HRESULT hrErrorCode);
+};
+
+[
+    object,
+    local,
+    uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)
+]
+interface ISAXLexicalHandler : IUnknown
+{
+    HRESULT startDTD(
+        [in] const WCHAR * pName,
+        [in] int nName,
+        [in] const WCHAR * pPublicId,
+        [in] int nPublicId,
+        [in] const WCHAR * pSystemId,
+        [in] int nSystemId);
+
+    HRESULT endDTD();
+
+    HRESULT startEntity(
+        [in] const WCHAR * pName,
+        [in] int nName);
+
+    HRESULT endEntity(
+        [in] const WCHAR * pName,
+        [in] int nName);
+
+    HRESULT startCDATA();
+
+    HRESULT endCDATA();
+
+    HRESULT comment(
+        [in] const WCHAR * pChars,
+        [in] int nChars);
+};
+
+[
+    object,
+    local,
+    uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)
+]
+interface ISAXLocator : IUnknown
+{
+    HRESULT getColumnNumber(
+        [out, retval] int * nColumn);
+
+    HRESULT getLineNumber(
+        [out, retval] int * nLine);
+
+    HRESULT getPublicId(
+        [out, retval] const WCHAR ** publicId);
+
+    HRESULT getSystemId(
+        [out, retval] const WCHAR ** systemId);
+};
+
+[
+    local,
+    object,
+    uuid(70409222-ca09-4475-acb8-40312fe8d145)
+]
+interface ISAXXMLFilter : ISAXXMLReader
+{
+    HRESULT getParent(
+        [out, retval] ISAXXMLReader ** pReader);
+    HRESULT putParent(
+        [in] ISAXXMLReader * reader);
+};
+
+[
+local,
+object,
+uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)
+]
+interface ISAXXMLReader : IUnknown
+{
+    HRESULT getFeature(
+        [in] const WCHAR * pFeature,
+        [out, retval] VARIANT_BOOL * pValue);
+    HRESULT putFeature(
+        [in] const WCHAR * pFeature,
+        [in] VARIANT_BOOL vfValue);
+
+    HRESULT getProperty(
+        [in] const WCHAR * pProp,
+        [out, retval] VARIANT * pValue);
+    HRESULT putProperty(
+        [in] const WCHAR * pProp,
+        [in] VARIANT value);
+
+    HRESULT getEntityResolver(
+        [out, retval] ISAXEntityResolver ** ppEntityResolver);
+    HRESULT putEntityResolver(
+        [in] ISAXEntityResolver * pEntityResolver);
+
+    HRESULT getContentHandler(
+        [out, retval] ISAXContentHandler ** pContentHandler);
+    HRESULT putContentHandler(
+        [in] ISAXContentHandler * contentHandler);
+
+    HRESULT getDTDHandler(
+        [out, retval] ISAXDTDHandler ** pDTDHandler);
+    HRESULT putDTDHandler(
+        [in] ISAXDTDHandler * pDTDHandler);
+
+    HRESULT getErrorHandler(
+        [out, retval] ISAXErrorHandler ** pErrorHandler);
+    HRESULT putErrorHandler(
+        [in] ISAXErrorHandler * errorHandler);
+
+    HRESULT getBaseURL(
+        [out, retval] const WCHAR ** pBaseUrl);
+    HRESULT putBaseURL(
+        [in] const WCHAR * pBaseUrl);
+
+    HRESULT getSecureBaseURL(
+        [out, retval] const WCHAR ** pSecureBaseUrl);
+    HRESULT putSecureBaseURL(
+        [in] const WCHAR * secureBaseUrl);
+
+    HRESULT parse(
+        [in] VARIANT varInput);
+    HRESULT parseURL(
+        [in] const WCHAR * url);
+}
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)
+]
+interface IVBSAXAttributes : IDispatch
+{
+    [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]
+    HRESULT length( [out, retval] int * nLength);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETURI)]
+    HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]
+    HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]
+    HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]
+    HRESULT getIndexFromName( [in] BSTR uri,
+                              [in] BSTR localName, [out, retval] int * nIndex);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]
+    HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]
+    HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]
+    HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,
+                             [out, retval] BSTR * type);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]
+    HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]
+    HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]
+    HRESULT getValueFromName( [in] BSTR uri,
+                              [in] BSTR localName,
+                              [out, retval] BSTR * value);
+
+    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]
+    HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)
+]
+interface IVBSAXContentHandler : IDispatch
+{
+    [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]
+    HRESULT documentLocator( [in] IVBSAXLocator * oLocator);
+
+    [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]
+    HRESULT startDocument();
+
+    [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]
+    HRESULT endDocument();
+
+    [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]
+    HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);
+
+    [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]
+    HRESULT endPrefixMapping( [in, out] BSTR * prefix);
+
+    [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]
+    HRESULT startElement( [in, out] BSTR * namespaceURI,
+                          [in, out] BSTR * localName,
+                          [in, out] BSTR * QName,
+                          [in] IVBSAXAttributes * oAttributes);
+
+    [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]
+    HRESULT endElement( [in, out] BSTR * namespaceURI,
+                        [in, out] BSTR * localName, [in, out] BSTR * strQName);
+
+    [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]
+    HRESULT characters( [in, out] BSTR * chars);
+
+    [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]
+    HRESULT ignorableWhitespace( [in, out] BSTR * chars);
+
+    [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]
+    HRESULT processingInstruction( [in, out] BSTR * target,
+                                   [in, out] BSTR * data);
+
+    [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]
+    HRESULT skippedEntity( [in, out] BSTR * name);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)
+]
+interface IVBSAXDeclHandler : IDispatch
+{
+    [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]
+    HRESULT elementDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * model);
+
+    [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]
+    HRESULT attributeDecl(
+        [in, out] BSTR * elementName,
+        [in, out] BSTR * attributeName,
+        [in, out] BSTR * type,
+        [in, out] BSTR * valueDefault,
+        [in, out] BSTR * value);
+
+    [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]
+    HRESULT internalEntityDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * value);
+
+    [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]
+    HRESULT externalEntityDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(24fb3297-302d-4620-ba39-3a732d850558)
+]
+interface IVBSAXDTDHandler : IDispatch
+{
+    [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]
+    HRESULT notationDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId);
+
+    [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]
+    HRESULT unparsedEntityDecl(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId,
+        [in, out] BSTR * notationName);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)
+]
+interface IVBSAXEntityResolver : IDispatch
+{
+    [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]
+    HRESULT resolveEntity(
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId,
+        [out, retval] VARIANT * ret);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(d963d3fe-173c-4862-9095-b92f66995f52)
+]
+interface IVBSAXErrorHandler : IDispatch
+{
+    [id(DISPID_SAX_ERRORHANDLER_ERROR)]
+    HRESULT error(
+            [in] IVBSAXLocator * locator,
+	    [in, out] BSTR * errorMessage,
+            [in] LONG errorCode);
+
+    [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]
+    HRESULT fatalError(
+	    [in] IVBSAXLocator * locator,
+	    [in, out] BSTR * errorMessage,
+            [in] LONG errorCode);
+
+    [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]
+    HRESULT ignorableWarning(
+	    [in] IVBSAXLocator * locator,
+	    [in, out] BSTR * errorMessage,
+            [in] LONG errorCode);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(032aac35-8c0e-4d9d-979f-e3b702935576)
+]
+interface IVBSAXLexicalHandler : IDispatch
+{
+    [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]
+    HRESULT startDTD(
+        [in, out] BSTR * name,
+        [in, out] BSTR * publicId,
+        [in, out] BSTR * systemId);
+    [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]
+    HRESULT endDTD();
+
+    [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]
+    HRESULT startEntity([in, out] BSTR * name);
+    [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]
+    HRESULT endEntity([in, out] BSTR * name);
+
+    [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]
+    HRESULT startCDATA();
+    [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]
+    HRESULT endCDATA();
+
+    [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]
+    HRESULT comment( [in, out] BSTR * chars);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)
+]
+interface IVBSAXLocator : IDispatch
+{
+    [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]
+    HRESULT columnNumber( [out, retval] int * column);
+
+    [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]
+    HRESULT lineNumber( [out, retval] int * line);
+
+    [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]
+    HRESULT publicId( [out, retval] BSTR * publicId);
+
+    [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]
+    HRESULT systemId( [out, retval] BSTR * systemId);
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)
+]
+interface IVBSAXXMLFilter : IDispatch
+{
+    [propget, id(DISPID_SAX_XMLFILTER_PARENT)]
+    HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);
+    [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]
+    HRESULT parent( [in] IVBSAXXMLReader * reader);
+
+};
+
+[
+    dual,
+    oleautomation,
+    object,
+    uuid (8c033caa-6cd6-4f73-b728-4531af74945f)
+]
+interface IVBSAXXMLReader : IDispatch
+{
+    [id(DISPID_SAX_XMLREADER_GETFEATURE)]
+    HRESULT getFeature( [in] const WCHAR * pFeature,
+                        [out, retval] VARIANT_BOOL * pValue);
+    [id(DISPID_SAX_XMLREADER_PUTFEATURE)]
+    HRESULT putFeature( [in] const WCHAR * pFeature,
+                        [in] VARIANT_BOOL vfValue);
+
+    [id(DISPID_SAX_XMLREADER_GETPROPERTY)]
+    HRESULT getProperty( [in] const WCHAR * pProp,
+                         [out, retval] VARIANT * pValue);
+    [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]
+    HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value);
+
+    [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+    HRESULT entityResolver(
+                    [out, retval] IVBSAXEntityResolver ** ppEntityResolver);
+    [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+    HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);
+
+    [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+    HRESULT contentHandler(
+                        [out, retval] IVBSAXContentHandler ** pContentHandler);
+    [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+    HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);
+
+    [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+    HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);
+    [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+    HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);
+
+    [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+    HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);
+    [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+    HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);
+
+    [propget, id(DISPID_SAX_XMLREADER_BASEURL)]
+    HRESULT baseURL([out, retval] const WCHAR ** pBaseUrl);
+    [propput, id(DISPID_SAX_XMLREADER_BASEURL)]
+    HRESULT baseURL([in] const WCHAR * pBaseUrl);
+
+    [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+    HRESULT secureBaseURL([out, retval] const WCHAR ** pSecureBaseUrl);
+    [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+    HRESULT secureBaseURL([in] const WCHAR * secureBaseUrl);
+
+    [id(DISPID_SAX_XMLREADER_PARSE)]
+    HRESULT parse( [in] VARIANT varInput);
+    [id(DISPID_SAX_XMLREADER_PARSEURL)]
+    HRESULT parseURL([in] const WCHAR * url);
+}
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)
+]
+interface IMXAttributes : IDispatch
+{
+    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]
+    HRESULT addAttribute(
+        [in] BSTR uri,
+        [in] BSTR localName,
+        [in] BSTR QName,
+        [in] BSTR type,
+        [in] BSTR value);
+
+    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]
+    HRESULT addAttributeFromIndex( [in] VARIANT atts,
+                                   [in] int index);
+
+    [id(DISPID_MX_ATTRIBUTES_CLEAR)]
+    HRESULT clear();
+
+    [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute( [in] int index);
+
+    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]
+    HRESULT setAttribute(
+        [in] int index,
+        [in] BSTR uri,
+        [in] BSTR localName,
+        [in] BSTR QName,
+        [in] BSTR type,
+        [in] BSTR value);
+
+    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]
+    HRESULT setAttributes( [in] VARIANT atts);
+
+    [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]
+    HRESULT setLocalName( [in] int index,
+        [in] BSTR localName);
+
+    [id(DISPID_MX_ATTRIBUTES_SETQNAME)]
+    HRESULT setQName(
+        [in] int index,
+        [in] BSTR QName);
+
+    [id(DISPID_MX_ATTRIBUTES_SETTYPE)]
+    HRESULT setType( [in] int index, [in] BSTR type);
+
+    [id(DISPID_MX_ATTRIBUTES_SETURI)]
+    HRESULT setURI( [in] int index,  [in] BSTR uri);
+
+    [id(DISPID_MX_ATTRIBUTES_SETVALUE)]
+    HRESULT setValue([in] int index, [in] BSTR value);
+};
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)
+]
+interface IMXSchemaDeclHandler : IDispatch
+{
+    [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]
+    HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );
+}
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)
+]
+interface IMXReaderControl : IDispatch
+{
+    [id(DISPID_MX_READER_CONTROL_ABORT)]
+    HRESULT abort();
+
+    [id(DISPID_MX_READER_CONTROL_RESUME)]
+    HRESULT resume();
+
+    [id(DISPID_MX_READER_CONTROL_SUSPEND)]
+    HRESULT suspend();
+};
+
+[
+    object,
+    dual,
+    oleautomation,
+    uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)
+]
+interface IMXWriter :  IDispatch
+{
+    [propput, id(DISPID_MX_WRITER_OUTPUT)]
+    HRESULT output ( [in] VARIANT Destination);
+    [propget, id(DISPID_MX_WRITER_OUTPUT)]
+    HRESULT output ( [out, retval] VARIANT * Destination);
+
+    [propput, id(DISPID_MX_WRITER_ENCODING)]
+    HRESULT encoding ([in] BSTR encoding);
+    [propget, id(DISPID_MX_WRITER_ENCODING)]
+    HRESULT encoding ([out, retval] BSTR * encoding);
+
+    [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+    HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);
+    [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+    HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);
+
+    [propput, id(DISPID_MX_WRITER_INDENT)]
+    HRESULT indent ([in] VARIANT_BOOL indentMode);
+    [propget, id(DISPID_MX_WRITER_INDENT)]
+    HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);
+
+    [propput, id(DISPID_MX_WRITER_STANDALONE)]
+    HRESULT standalone ([in] VARIANT_BOOL value);
+    [propget, id(DISPID_MX_WRITER_STANDALONE)]
+    HRESULT standalone ([out, retval] VARIANT_BOOL * value);
+
+    [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+    HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);
+    [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+    HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);
+
+    [propput, id(DISPID_MX_WRITER_VERSION)]
+    HRESULT version ([in] BSTR version);
+    [propget, id(DISPID_MX_WRITER_VERSION)]
+    HRESULT version ([out, retval] BSTR * version);
+
+    [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+    HRESULT disableOutputEscaping([in] VARIANT_BOOL value);
+    [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+    HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);
+
+    [id(DISPID_MX_WRITER_FLUSH)]
+    HRESULT flush();
+};
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespacePrefixes : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item(
+        [in] long index,
+        [out, retval] BSTR *prefix);
+
+    [propget, id(DISPID_MX_NSMGR_LENGTH)]
+    HRESULT length( [out,retval] long *length );
+
+    [propget, restricted, hidden, id(DISPID_NEWENUM)]
+    HRESULT _newEnum( [out, retval] IUnknown **ppUnk );
+}
+
+[
+    local,
+    object,
+    hidden,
+    uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespaceManager : IUnknown
+{
+    HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);
+
+    HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);
+
+    HRESULT reset();
+
+    HRESULT pushContext();
+
+    HRESULT pushNodeContext(
+        [in] IXMLDOMNode *contextNode,
+        [in] VARIANT_BOOL fDeep);
+
+    HRESULT popContext();
+
+    HRESULT declarePrefix(
+        [in] const WCHAR *prefix,
+        [in] const WCHAR *namespaceURI);
+
+    HRESULT getDeclaredPrefix(
+        [in] long nIndex,
+        [in, out] WCHAR *pwchPrefix,
+        [in, out] int *pcchPrefix);
+
+    HRESULT getPrefix(
+        [in] const WCHAR *pwszNamespaceURI,
+        [in] long nIndex,
+        [in, out] WCHAR *pwchPrefix,
+        [in, out] int *pcchPrefix);
+
+    HRESULT getURI(
+        [in] const WCHAR *pwchPrefix,
+        [in] IXMLDOMNode* pContextNode,
+        [in, out] WCHAR *pwchUri,
+        [in, out] int *pcchUri);
+}
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IVBMXNamespaceManager : IDispatch
+{
+    [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+    HRESULT allowOverride([in] VARIANT_BOOL fOverride);
+
+    [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+    HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);
+
+    [id(DISPID_MX_NSMGR_RESET)]
+    HRESULT reset();
+
+    [id(DISPID_MX_NSMGR_PUSHCONTEXT)]
+    HRESULT pushContext();
+
+    [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]
+    HRESULT pushNodeContext(
+        [in] IXMLDOMNode* contextNode,
+        [in, defaultvalue(-1)] VARIANT_BOOL fDeep);
+
+    [id(DISPID_MX_NSMGR_POPCONTEXT)]
+    HRESULT popContext();
+
+    [id(DISPID_MX_NSMGR_DECLAREPREFIX)]
+    HRESULT declarePrefix(
+        [in] BSTR prefix,
+        [in] BSTR namespaceURI);
+
+    [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]
+    HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);
+
+    [id(DISPID_MX_NSMGR_GETPREFIXES)]
+    HRESULT getPrefixes(
+        [in] BSTR namespaceURI,
+        [out, retval] IMXNamespacePrefixes** prefixes);
+
+    [id(DISPID_MX_NSMGR_GETURI)]
+    HRESULT getURI(
+        [in] BSTR prefix,
+        [out, retval] VARIANT* uri);
+
+    [id(DISPID_MX_NSMGR_GETURIFROMNODE)]
+    HRESULT getURIFromNode(
+        [in] BSTR strPrefix,
+        [in] IXMLDOMNode* contextNode,
+        [out, retval] VARIANT* uri);
+}
+
+[
+    local,
+    object,
+    dual,
+    oleautomation,
+    uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXXMLFilter : IDispatch
+{
+    [id(DISPID_MXXML_FILTER_GETFEATURE)]
+    HRESULT getFeature(
+        [in] BSTR strName,
+        [out, retval] VARIANT_BOOL * fValue);
+
+    [id(DISPID_MXXML_FILTER_PUTFEATURE)]
+    HRESULT putFeature(
+        [in] BSTR strName,
+        [in] VARIANT_BOOL fValue);
+
+    [id(DISPID_MXXML_FILTER_GETPROPERTY)]
+    HRESULT getProperty(
+        [in] BSTR strName,
+        [out, retval] VARIANT * varValue);
+
+    [id(DISPID_MXXML_FILTER_PUTPROPERTY)]
+    HRESULT putProperty(
+        [in] BSTR strName,
+        [in] VARIANT varValue);
+
+    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]
+    HRESULT entityResolver( [out, retval] IUnknown **oResolver );
+
+    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]
+    HRESULT entityResolver( [in] IUnknown *oResolver );
+
+    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]
+    HRESULT contentHandler( [out, retval] IUnknown **oHandler );
+
+    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]
+    HRESULT contentHandler( [in] IUnknown *oHandler );
+
+    [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]
+    HRESULT dtdHandler( [out, retval] IUnknown **oHandler );
+
+    [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]
+    HRESULT dtdHandler( [in] IUnknown *oHandler );
+
+    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]
+    HRESULT errorHandler( [out, retval] IUnknown **oHandler );
+
+    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]
+    HRESULT errorHandler( [in] IUnknown *oHandler );
+}
+
+[
+    local,
+    object,
+    uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaStringCollection : IDispatch
+{
+    [id(DISPID_VALUE), propget]
+    HRESULT item(
+        [in] long index,
+        [out,retval] BSTR* bstr);
+
+    [id(DISPID_SOM_LENGTH), propget]
+    HRESULT length(
+        [out,retval] long* length);
+
+    [id(DISPID_NEWENUM), hidden, restricted, propget]
+    HRESULT _newEnum(
+        [out,retval] IUnknown** ppunk);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaItemCollection : IDispatch
+{
+    [id(DISPID_VALUE), propget]
+    HRESULT item(
+        [in] long index,
+        [out,retval]ISchemaItem** item);
+
+    [id(DISPID_SOM_ITEMBYNAME)]
+    HRESULT itemByName(
+        [in] BSTR name,
+        [out,retval] ISchemaItem** item);
+
+    [id(DISPID_SOM_ITEMBYQNAME)]
+    HRESULT itemByQName(
+        [in] BSTR name,
+        [in] BSTR namespaceURI,
+        [out,retval] ISchemaItem** item);
+
+    [id(DISPID_SOM_LENGTH), propget]
+    HRESULT length(
+        [out,retval]long* length);
+
+    [id(DISPID_NEWENUM), hidden, restricted, propget]
+    HRESULT _newEnum(
+        [out,retval]IUnknown** ppunk);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaItem : IDispatch
+{
+    [id(DISPID_SOM_NAME), propget]
+    HRESULT name(
+        [out,retval] BSTR* name);
+
+    [id(DISPID_SOM_NAMESPACEURI), propget]
+    HRESULT namespaceURI(
+        [out,retval] BSTR* namespaceURI);
+
+    [id(DISPID_SOM_SCHEMA), propget]
+    HRESULT schema(
+        [out,retval] ISchema** schema);
+
+    [id(DISPID_SOM_ID), propget]
+    HRESULT id(
+        [out,retval] BSTR* id);
+
+    [id(DISPID_SOM_ITEMTYPE), propget]
+    HRESULT itemType(
+        [out,retval] SOMITEMTYPE* itemType);
+
+    [id(DISPID_SOM_UNHANDLEDATTRS), propget]
+    HRESULT unhandledAttributes(
+        [out,retval] IVBSAXAttributes** attributes);
+
+    [id(DISPID_SOM_WRITEANNOTATION)]
+    HRESULT writeAnnotation(
+        [in] IUnknown* annotationSink,
+        [out,retval] VARIANT_BOOL* isWritten);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchema : ISchemaItem
+{
+    [id(DISPID_SOM_TARGETNAMESPACE), propget]
+    HRESULT targetNamespace(
+        [out,retval] BSTR* targetNamespace);
+
+    [id(DISPID_SOM_VERSION), propget]
+    HRESULT version(
+        [out,retval] BSTR* version);
+
+    [id(DISPID_SOM_TYPES), propget]
+    HRESULT types(
+        [out,retval] ISchemaItemCollection** types);
+
+    [id(DISPID_SOM_ELEMENTS), propget]
+    HRESULT elements(
+        [out,retval] ISchemaItemCollection** elements);
+
+    [id(DISPID_SOM_ATTRIBUTES), propget]
+    HRESULT attributes(
+        [out,retval] ISchemaItemCollection** attributes);
+
+    [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]
+    HRESULT attributeGroups(
+        [out,retval] ISchemaItemCollection** attributeGroups);
+
+    [id(DISPID_SOM_MODELGROUPS), propget]
+    HRESULT modelGroups(
+        [out,retval] ISchemaItemCollection** modelGroups);
+
+    [id(DISPID_SOM_NOTATIONS), propget]
+    HRESULT notations(
+        [out,retval] ISchemaItemCollection** notations);
+
+    [id(DISPID_SOM_SCHEMALOCATIONS), propget]
+    HRESULT schemaLocations(
+        [out,retval] ISchemaStringCollection** schemaLocations);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaParticle : ISchemaItem
+{
+    [id(DISPID_SOM_MINOCCURS), propget]
+    HRESULT minOccurs(
+        [out,retval] VARIANT* minOccurs);
+
+    [id(DISPID_SOM_MAXOCCURS), propget]
+    HRESULT maxOccurs(
+        [out,retval] VARIANT* maxOccurs);
+};
+
+[
+    object,
+    uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaAttribute : ISchemaItem
+{
+    [id(DISPID_SOM_TYPE), propget]
+    HRESULT type(
+        [out,retval] ISchemaType** type);
+
+    [id(DISPID_SOM_SCOPE), propget]
+    HRESULT scope(
+        [out,retval] ISchemaComplexType** scope);
+
+    [id(DISPID_SOM_DEFAULTVALUE), propget]
+    HRESULT defaultValue(
+        [out,retval]BSTR* defaultValue);
+
+    [id(DISPID_SOM_FIXEDVALUE), propget]
+    HRESULT fixedValue(
+        [out,retval] BSTR* fixedValue);
+
+    [id(DISPID_SOM_USE), propget]
+    HRESULT use(
+        [out,retval] SCHEMAUSE* use);
+
+    [id(DISPID_SOM_ISREFERENCE), propget]
+    HRESULT isReference(
+        [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaElement : ISchemaParticle
+{
+    [id(DISPID_SOM_TYPE), propget]
+    HRESULT type(
+        [out,retval] ISchemaType** type);
+
+    [id(DISPID_SOM_SCOPE), propget]
+    HRESULT scope(
+        [out,retval] ISchemaComplexType** scope);
+
+    [id(DISPID_SOM_DEFAULTVALUE), propget]
+    HRESULT defaultValue(
+        [out,retval] BSTR* defaultValue);
+
+    [id(DISPID_SOM_FIXEDVALUE), propget]
+    HRESULT fixedValue(
+        [out,retval] BSTR* fixedValue);
+
+    [id(DISPID_SOM_ISNILLABLE), propget]
+    HRESULT isNillable(
+        [out,retval] VARIANT_BOOL* nillable);
+
+    [id(DISPID_SOM_IDCONSTRAINTS), propget]
+    HRESULT identityConstraints(
+        [out,retval] ISchemaItemCollection** constraints);
+
+    [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]
+    HRESULT substitutionGroup(
+        [out,retval] ISchemaElement** element);
+
+    [id(DISPID_SOM_EXCLUSIONS), propget]
+    HRESULT substitutionGroupExclusions(
+        [out,retval] SCHEMADERIVATIONMETHOD* exclusions);
+
+    [id(DISPID_SOM_DISALLOWED), propget]
+    HRESULT disallowedSubstitutions(
+        [out,retval] SCHEMADERIVATIONMETHOD* disallowed);
+
+    [id(DISPID_SOM_ISABSTRACT), propget]
+    HRESULT isAbstract(
+        [out,retval] VARIANT_BOOL* abstract);
+
+    [id(DISPID_SOM_ISREFERENCE), propget]
+    HRESULT isReference(
+        [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaType : ISchemaItem
+{
+    [id(DISPID_SOM_BASETYPES), propget]
+    HRESULT baseTypes(
+        [out,retval] ISchemaItemCollection** baseTypes);
+
+    [id(DISPID_SOM_FINAL), propget]
+    HRESULT final(
+        [out,retval] SCHEMADERIVATIONMETHOD* final);
+
+    [id(DISPID_SOM_VARIETY), propget]
+    HRESULT variety(
+        [out,retval] SCHEMATYPEVARIETY* variety);
+
+    [id(DISPID_SOM_DERIVEDBY), propget]
+    HRESULT derivedBy(
+        [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);
+
+    [id(DISPID_SOM_ISVALID)]
+    HRESULT isValid(
+        [in] BSTR data,
+        [out,retval] VARIANT_BOOL* valid);
+
+    [id(DISPID_SOM_MINEXCLUSIVE), propget]
+    HRESULT minExclusive(
+        [out,retval]BSTR* minExclusive);
+
+    [id(DISPID_SOM_MININCLUSIVE), propget]
+    HRESULT minInclusive(
+        [out,retval] BSTR* minInclusive);
+
+    [id(DISPID_SOM_MAXEXCLUSIVE), propget]
+    HRESULT maxExclusive(
+        [out,retval] BSTR* maxExclusive);
+
+    [id(DISPID_SOM_MAXINCLUSIVE), propget]
+    HRESULT maxInclusive(
+        [out,retval] BSTR* maxInclusive);
+
+    [id(DISPID_SOM_TOTALDIGITS), propget]
+    HRESULT totalDigits(
+        [out,retval] VARIANT* totalDigits);
+
+    [id(DISPID_SOM_FRACTIONDIGITS), propget]
+    HRESULT fractionDigits(
+        [out,retval] VARIANT* fractionDigits);
+
+    [id(DISPID_SOM_LENGTH), propget]
+    HRESULT length(
+        [out,retval] VARIANT* length);
+
+    [id(DISPID_SOM_MINLENGTH), propget]
+    HRESULT minLength(
+        [out,retval]VARIANT* minLength);
+
+    [id(DISPID_SOM_MAXLENGTH), propget]
+    HRESULT maxLength(
+        [out,retval]VARIANT* maxLength);
+
+    [id(DISPID_SOM_ENUMERATION), propget]
+    HRESULT enumeration(
+        [out,retval] ISchemaStringCollection** enumeration);
+
+    [id(DISPID_SOM_WHITESPACE), propget]
+    HRESULT whitespace(
+        [out,retval]SCHEMAWHITESPACE* whitespace);
+
+    [id(DISPID_SOM_PATTERNS), propget]
+    HRESULT patterns(
+        [out,retval] ISchemaStringCollection** patterns);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaComplexType : ISchemaType
+{
+    [id(DISPID_SOM_ISABSTRACT), propget]
+    HRESULT isAbstract(
+        [out,retval] VARIANT_BOOL* abstract);
+
+    [id(DISPID_SOM_ANYATTRIBUTE), propget]
+    HRESULT anyAttribute(
+        [out,retval] ISchemaAny** anyAttribute);
+
+    [id(DISPID_SOM_ATTRIBUTES), propget]
+    HRESULT attributes(
+        [out,retval] ISchemaItemCollection** attributes);
+
+    [id(DISPID_SOM_CONTENTTYPE), propget]
+    HRESULT contentType(
+        [out,retval] SCHEMACONTENTTYPE* contentType);
+
+    [id(DISPID_SOM_CONTENTMODEL), propget]
+    HRESULT contentModel(
+        [out,retval] ISchemaModelGroup** contentModel);
+
+    [id(DISPID_SOM_PROHIBITED), propget]
+    HRESULT prohibitedSubstitutions(
+        [out,retval] SCHEMADERIVATIONMETHOD* prohibited);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaAttributeGroup : ISchemaItem
+{
+    [id(DISPID_SOM_ANYATTRIBUTE), propget]
+    HRESULT anyAttribute(
+        [out,retval] ISchemaAny** anyAttribute);
+
+    [id(DISPID_SOM_ATTRIBUTES), propget]
+        HRESULT attributes(
+            [out,retval] ISchemaItemCollection** attributes);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual,
+]
+interface ISchemaModelGroup : ISchemaParticle
+{
+    [id(DISPID_SOM_PARTICLES), propget]
+    HRESULT particles(
+        [out,retval] ISchemaItemCollection** particles);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaAny : ISchemaParticle
+{
+    [id(DISPID_SOM_NAMESPACES), propget]
+    HRESULT namespaces(
+        [out,retval] ISchemaStringCollection** namespaces);
+
+    [id(DISPID_SOM_PROCESSCONTENTS), propget]
+    HRESULT processContents(
+        [out,retval] SCHEMAPROCESSCONTENTS* processContents);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaIdentityConstraint : ISchemaItem
+{
+    [id(DISPID_SOM_SELECTOR), propget]
+    HRESULT selector(
+        [out,retval] BSTR* selector);
+
+    [id(DISPID_SOM_FIELDS), propget]
+        HRESULT fields(
+            [out,retval] ISchemaStringCollection** fields);
+
+    [id(DISPID_SOM_REFERENCEDKEY), propget]
+    HRESULT referencedKey(
+        [out,retval] ISchemaIdentityConstraint** key);
+};
+
+[
+    local,
+    object,
+    uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),
+    oleautomation,
+    dual
+]
+interface ISchemaNotation : ISchemaItem
+{
+    [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]
+    HRESULT systemIdentifier(
+        [out,retval] BSTR* uri);
+
+    [id(DISPID_SOM_PUBLICIDENTIFIER), propget]
+    HRESULT publicIdentifier(
+        [out,retval] BSTR* uri);
+};
+
+
+[
+    uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)
+]
+coclass SAXXMLReader
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+    interface IMXReaderControl;
+};
+
+[
+    uuid(3124c396-fb13-4836-a6ad-1317f1713688)
+]
+coclass SAXXMLReader30
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+    interface IMXReaderControl;
+};
+
+[
+    uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)
+]
+coclass SAXXMLReader40
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+}
+
+[
+    helpstring("SAX XML Reader 6.0"),
+    progid("Msxml2.SAXXMLReader.6.0"),
+    threading(both),
+    uuid(88d96a0c-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXXMLReader60
+{
+    [default] interface IVBSAXXMLReader;
+    interface ISAXXMLReader;
+}
+
+[
+    uuid(a4c23ec3-6b70-4466-9127-550077239978)
+]
+coclass MXHTMLWriter
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXErrorHandler;
+    interface ISAXDTDHandler;
+    interface ISAXLexicalHandler;
+    interface ISAXDeclHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d)
+]
+coclass MXHTMLWriter30
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(88d969c9-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter40
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    helpstring("MXHTMLWriter 6.0"),
+    progid("Msxml2.MXHTMLWriter.6.0"),
+    threading(both),
+    uuid(88d96a10-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter60
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)
+]
+coclass MXXMLWriter
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXErrorHandler;
+    interface ISAXDTDHandler;
+    interface ISAXLexicalHandler;
+    interface ISAXDeclHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+};
+
+[
+    uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)
+]
+coclass MXXMLWriter30
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+};
+
+[
+    uuid(88d969c8-f192-11d4-a65f-0040963251e5),
+]
+coclass MXXMLWriter40
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    helpstring("MXXMLWriter 6.0"),
+    progid("Msxml2.MXXMLWriter.6.0"),
+    threading(both),
+    uuid(88d96a0f-f192-11d4-a65f-0040963251e5)
+]
+coclass MXXMLWriter60
+{
+    [default] interface IMXWriter;
+
+    interface ISAXContentHandler;
+    interface ISAXDeclHandler;
+    interface ISAXDTDHandler;
+    interface ISAXErrorHandler;
+    interface ISAXLexicalHandler;
+
+    interface IVBSAXContentHandler;
+    interface IVBSAXDeclHandler;
+    interface IVBSAXDTDHandler;
+    interface IVBSAXErrorHandler;
+    interface IVBSAXLexicalHandler;
+}
+
+[
+    uuid(88d969d5-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager
+{
+    [default] interface IVBMXNamespaceManager;
+    interface IMXNamespaceManager;
+}
+
+[
+    uuid(88d969d6-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager40
+{
+    [default] interface IVBMXNamespaceManager;
+    interface IMXNamespaceManager;
+}
+
+[
+    helpstring("MXNamespaceManager 6.0"),
+    progid("Msxml2.MXNamespaceManager.6.0"),
+    threading(both),
+    uuid(88d96a11-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager60
+{
+    [default] interface IVBMXNamespaceManager;
+    interface IMXNamespaceManager;
+}
+
+[
+    uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)
+]
+coclass SAXAttributes
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+[
+    uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)
+]
+coclass SAXAttributes30
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+[
+    uuid(88d969ca-f192-11d4-a65f-0040963251e5),
+]
+coclass SAXAttributes40
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+[
+    helpstring("SAXAttributes 6.0"),
+    progid("Msxml2.SAXAttributes.6.0"),
+    threading(both),
+    uuid(88d96a0e-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXAttributes60
+{
+    [default] interface IMXAttributes;
+    interface IVBSAXAttributes;
+    interface ISAXAttributes;
+}
+
+/*
+ * Error Codes
+ */
+cpp_quote("#define E_XML_NOTWF              0xC00CE223")
+cpp_quote("#define E_XML_NODTD              0xC00CE224")
+cpp_quote("#define E_XML_INVALID            0xC00CE225")
+cpp_quote("#define E_XML_BUFFERTOOSMALL     0xC00CE226")
+
+} /* Library MSXML */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h
new file mode 100644
index 0000000..4f9824c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSXML6DID_H__
+#define __MSXML6DID_H__
+
+#include <msxml2did.h>
+
+#endif /* __MSXML6DID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h
new file mode 100644
index 0000000..c08d07a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSXMLDID_H__
+#define __MSXMLDID_H__
+
+#define DISPID_XOBJ_MIN                     0x10000
+#define DISPID_XOBJ_MAX                     0x1FFFF
+#define DISPID_XOBJ_BASE                    0x10000
+
+#define DISPID_XMLELEMENTCOLLECTION         0x10000
+#define DISPID_XMLELEMENTCOLLECTION_LENGTH  0x10001
+#define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM
+#define DISPID_XMLELEMENTCOLLECTION_ITEM    0x10003
+
+#define DISPID_XMLDOCUMENT                  0x10064
+#define DISPID_XMLDOCUMENT_ROOT             0x10065
+#define DISPID_XMLDOCUMENT_FILESIZE         0x10066
+#define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067
+#define DISPID_XMLDOCUMENT_FILEUPDATEDDATE  0x10068
+#define DISPID_XMLDOCUMENT_URL              0x10069
+#define DISPID_XMLDOCUMENT_MIMETYPE         0x1006a
+#define DISPID_XMLDOCUMENT_READYSTATE       0x1006b
+#define DISPID_XMLDOCUMENT_CREATEELEMENT    0x1006c
+#define DISPID_XMLDOCUMENT_CHARSET          0x1006d
+#define DISPID_XMLDOCUMENT_VERSION          0x1006e
+#define DISPID_XMLDOCUMENT_DOCTYPE          0x1006f
+#define DISPID_XMLDOCUMENT_DTDURL           0x10070
+#define DISPID_XMLDOCUMENT_ASYNC            0x10071
+#define DISPID_XMLDOCUMENT_CASEINSENSITIVE  0x10072
+
+#define DISPID_XMLELEMENT                   0x100c8
+#define DISPID_XMLELEMENT_TAGNAME           0x100c9
+#define DISPID_XMLELEMENT_PARENT            0x100ca
+#define DISPID_XMLELEMENT_SETATTRIBUTE      0x100cb
+#define DISPID_XMLELEMENT_GETATTRIBUTE      0x100cc
+#define DISPID_XMLELEMENT_REMOVEATTRIBUTE   0x100cd
+#define DISPID_XMLELEMENT_CHILDREN          0x100ce
+#define DISPID_XMLELEMENT_TYPE              0x100cf
+#define DISPID_XMLELEMENT_TEXT              0x100d0
+#define DISPID_XMLELEMENT_ADDCHILD          0x100d1
+#define DISPID_XMLELEMENT_REMOVECHILD       0x100d2
+#define DISPID_XMLELEMENT_ATTRIBUTES        0x100d3
+
+#define DISPID_XMLNOTIFSINK                 0x1012c
+#define DISPID_XMLNOTIFSINK_CHILDADDED      0x1012d
+
+#define DISPID_XMLATTRIBUTE                 0x10190
+#define DISPID_XMLATTRIBUTE_NAME            0x10191
+#define DISPID_XMLATTRIBUTE_VALUE           0x10192
+
+#endif /* __MSXMLDID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h
new file mode 100644
index 0000000..8e897b8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2001 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef NCB_INCLUDED
+#define NCB_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NCBNAMSZ 16
+#define MAX_LANA 0xfe
+
+#define NCBCALL        0x10
+#define NCBLISTEN      0x11
+#define NCBHANGUP      0x12
+#define NCBSEND        0x14
+#define NCBRECV        0x15
+#define NCBRECVANY     0x16
+#define NCBCHAINSEND   0x17
+#define NCBDGSEND      0x20
+#define NCBDGRECV      0x21
+#define NCBDGSENDBC    0x22
+#define NCBDGRECVBC    0x23
+#define NCBADDNAME     0x30
+#define NCBDELNAME     0x31
+#define NCBRESET       0x32
+#define NCBASTAT       0x33
+#define NCBSSTAT       0x34
+#define NCBCANCEL      0x35
+#define NCBADDGRNAME   0x36
+#define NCBENUM        0x37
+#define NCBUNLINK      0x70
+#define NCBSENDNA      0x71
+#define NCBCHAINSENDNA 0x72
+#define NCBLANSTALERT  0x73
+#define NCBACTION      0x77
+#define NCBFINDNAME    0x78
+#define NCBTRACE       0x79
+
+#define ASYNCH         0x80
+
+typedef struct _NCB
+{
+	UCHAR	ncb_command;
+	UCHAR	ncb_retcode;
+	UCHAR	ncb_lsn;
+	UCHAR	ncb_num;
+	PUCHAR	ncb_buffer;
+	WORD	ncb_length;
+	UCHAR	ncb_callname[NCBNAMSZ];
+	UCHAR	ncb_name[NCBNAMSZ];
+	UCHAR	ncb_rto;
+	UCHAR	ncb_sto;
+	VOID	(CALLBACK *ncb_post)(struct _NCB *);
+	UCHAR	ncb_lana_num;
+	UCHAR	ncb_cmd_cplt;
+#ifdef _WIN64
+	UCHAR	ncb_reserve[18];
+#else
+	UCHAR	ncb_reserve[10];
+#endif
+	HANDLE	ncb_event;
+} NCB, *PNCB;
+
+typedef struct _ADAPTER_STATUS
+{
+	UCHAR   adapter_address[6];
+	UCHAR	rev_major;
+	UCHAR	reserved0;
+	UCHAR	adapter_type;
+	UCHAR	rev_minor;
+	WORD	duration;
+	WORD	frmr_recv;
+	WORD	frmr_xmit;
+	WORD	iframe_recv_error;
+	WORD	xmit_aborts;
+	DWORD	xmit_success;
+	DWORD	recv_success;
+	WORD	iframe_xmit_error;
+	WORD	recv_buffer_unavail;
+	WORD	t1_timeouts;
+	WORD	ti_timeouts;
+	DWORD	reserved1;
+	WORD	free_ncbs;
+	WORD	max_cfg_ncbs;
+	WORD	max_ncbs;
+	WORD	xmit_buf_unavail;
+	WORD	max_dgram_size;
+	WORD	pending_sess;
+	WORD	max_cfg_sess;
+	WORD	max_sess;
+	WORD	max_sess_pkt_size;
+	WORD	name_count;
+} ADAPTER_STATUS, *PADAPTER_STATUS;
+
+typedef struct _NAME_BUFFER
+{
+  UCHAR name[NCBNAMSZ];
+  UCHAR name_num;
+  UCHAR name_flags;
+} NAME_BUFFER, *PNAME_BUFFER;
+
+#define NAME_FLAGS_MASK 0x87
+#define GROUP_NAME      0x80
+#define UNIQUE_NAME     0x00
+#define REGISTERING     0x00
+#define REGISTERED      0x04
+#define DEREGISTERED    0x05
+#define DUPLICATE       0x06
+#define DUPLICATE_DEREG 0x07
+
+typedef struct _LANA_ENUM
+{
+	UCHAR length;
+	UCHAR lana[MAX_LANA+1];
+} LANA_ENUM, *PLANA_ENUM;
+
+typedef struct _FIND_NAME_HEADER
+{
+  WORD  node_count;
+  UCHAR reserved;
+  UCHAR unique_group;
+} FIND_NAME_HEADER, *PFIND_NAME_HEADER;
+
+typedef struct _FIND_NAME_BUFFER
+{
+  UCHAR length;
+  UCHAR access_control;
+  UCHAR frame_control;
+  UCHAR destination_addr[6];
+  UCHAR source_addr[6];
+  UCHAR routing_info[6];
+} FIND_NAME_BUFFER, *PFIND_NAME_BUFFER;
+
+typedef struct _SESSION_HEADER {
+  UCHAR sess_name;
+  UCHAR num_sess;
+  UCHAR rcv_dg_outstanding;
+  UCHAR rcv_any_outstanding;
+} SESSION_HEADER, *PSESSION_HEADER;
+
+typedef struct _SESSION_BUFFER {
+  UCHAR lsn;
+  UCHAR state;
+  UCHAR local_name[NCBNAMSZ];
+  UCHAR remote_name[NCBNAMSZ];
+  UCHAR rcvs_outstanding;
+  UCHAR sends_outstanding;
+} SESSION_BUFFER, *PSESSION_BUFFER;
+
+#define LISTEN_OUTSTANDING  0x01
+#define CALL_PENDING        0x02
+#define SESSION_ESTABLISHED 0x03
+#define HANGUP_PENDING      0x04
+#define HANGUP_COMPLETE     0x05
+#define SESSION_ABORTED     0x06
+
+#define ALL_TRANSPORTS "M\0\0\0"
+
+#define NRC_GOODRET     0x00
+#define NRC_BUFLEN      0x01
+#define NRC_ILLCMD      0x03
+#define NRC_CMDTMO      0x05
+#define NRC_INCOMP      0x06
+#define NRC_BADDR       0x07
+#define NRC_SNUMOUT     0x08
+#define NRC_NORES       0x09
+#define NRC_SCLOSED     0x0a
+#define NRC_CMDCAN      0x0b
+#define NRC_DUPNAME     0x0d
+#define NRC_NAMTFUL     0x0e
+#define NRC_ACTSES      0x0f
+#define NRC_LOCTFUL     0x11
+#define NRC_REMTFUL     0x12
+#define NRC_ILLNN       0x13
+#define NRC_NOCALL      0x14
+#define NRC_NOWILD      0x15
+#define NRC_INUSE       0x16
+#define NRC_NAMERR      0x17
+#define NRC_SABORT      0x18
+#define NRC_NAMCONF     0x19
+#define NRC_IFBUSY      0x21
+#define NRC_TOOMANY     0x22
+#define NRC_BRIDGE      0x23
+#define NRC_CANOCCR     0x24
+#define NRC_CANCEL      0x26
+#define NRC_DUPENV      0x30
+#define NRC_ENVNOTDEF   0x34
+#define NRC_OSRESNOTAV  0x35
+#define NRC_MAXAPPS     0x36
+#define NRC_NOSAPS      0x37
+#define NRC_NORESOURCES 0x38
+#define NRC_INVADDRESS  0x39
+#define NRC_INVDDID     0x3b
+#define NRC_LOCKFAIL    0x3c
+#define NRC_OPENERROR   0x3f
+#define NRC_SYSTEM      0x40
+#define NRC_PENDING     0xff
+
+UCHAR WINAPI Netbios(PNCB pncb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* NCB_INCLUDED */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h
new file mode 100644
index 0000000..b77d4ba
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h
@@ -0,0 +1,190 @@
+/*
+ * NDR Types
+ *
+ * Copyright 2006 Robert Shearman (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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __NDRTYPES_H__
+#define __NDRTYPES_H__
+
+#include <limits.h>
+
+typedef struct
+{
+    unsigned short MustSize : 1; /* 0x0001 - client interpreter MUST size this
+     *  parameter, other parameters may be skipped, using the value in
+     *  NDR_PROC_PARTIAL_OIF_HEADER::constant_client_buffer_size instead. */
+    unsigned short MustFree : 1; /* 0x0002 - server interpreter MUST size this
+     *  parameter, other parameters may be skipped, using the value in
+     *  NDR_PROC_PARTIAL_OIF_HEADER::constant_server_buffer_size instead. */
+    unsigned short IsPipe : 1; /* 0x0004 - The parameter is a pipe handle */
+    unsigned short IsIn : 1; /* 0x0008 - The parameter is an input */
+    unsigned short IsOut : 1; /* 0x0010 - The parameter is an output */
+    unsigned short IsReturn : 1; /* 0x0020 - The parameter is to be returned */
+    unsigned short IsBasetype : 1; /* 0x0040 - The parameter is simple and has the
+     *  format defined by NDR_PARAM_OIF_BASETYPE rather than by
+     *  NDR_PARAM_OIF_OTHER. */
+    unsigned short IsByValue : 1; /* 0x0080 - Set for compound types being sent by
+     *  value. Can be of type: structure, union, transmit_as, represent_as,
+     *  wire_marshal and SAFEARRAY. */
+    unsigned short IsSimpleRef : 1; /* 0x0100 - parameter that is a reference
+     *  pointer to anything other than another pointer, and which has no
+     *  allocate attributes. */
+    unsigned short IsDontCallFreeInst : 1; /*  0x0200 - Used for some represent_as types
+     *  for when the free instance routine should not be called. */
+    unsigned short SaveForAsyncFinish : 1; /* 0x0400 - Unknown */
+    unsigned short Unused : 2;
+    unsigned short ServerAllocSize : 3; /* 0xe000 - If non-zero
+     *  specifies the size of the object in numbers of 8byte blocks needed.
+     *  It will be stored on the server's stack rather than using an allocate
+     *  call. */
+} PARAM_ATTRIBUTES;
+
+typedef struct
+{
+    unsigned char ServerMustSize : 1; /* 0x01 - the server must perform a
+     *  sizing pass. */
+    unsigned char ClientMustSize : 1; /* 0x02 - the client must perform a
+     *  sizing pass. */
+    unsigned char HasReturn : 1; /* 0x04 - procedure has a return value. */
+    unsigned char HasPipes : 1; /* 0x08 - the pipe package should be used. */
+    unsigned char Unused : 1; /* 0x10 - not used */
+    unsigned char HasAsyncUuid : 1; /* 0x20 - indicates an asynchronous DCOM
+     *  procedure. */
+    unsigned char HasExtensions : 1; /* 0x40 - indicates that Win2000
+     *  extensions are in use. */
+    unsigned char HasAsyncHandle : 1; /* 0x80 - indicates an asynchronous RPC
+     *  procedure. */
+} INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
+
+typedef struct
+{
+    unsigned char HasNewCorrDesc : 1; /* 0x01 - indicates new correlation
+     *  descriptors in use. */
+    unsigned char ClientCorrCheck : 1; /* 0x02 - client needs correlation
+     *  check. */
+    unsigned char ServerCorrCheck : 1; /* 0x04 - server needs correlation
+     *  check. */
+    unsigned char HasNotify : 1; /* 0x08 - should call MIDL [notify]
+     *  routine @ NotifyIndex. */
+    unsigned char HasNotify2 : 1; /* 0x10 - should call MIDL [notify_flag] routine @ 
+     *  NotifyIndex. */
+    unsigned char Unused : 3;
+} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
+
+/* Win2000 extensions */
+typedef struct
+{
+    /* size in bytes of all following extensions */
+    unsigned char Size;
+
+    INTERPRETER_OPT_FLAGS2 Flags2;
+
+    /* client cache size hint */
+    unsigned short ClientCorrHint;
+
+    /* server cache size hint */
+    unsigned short ServerCorrHint;
+
+    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
+     * HasNotify or HasNotify2 flag set */
+    unsigned short NotifyIndex;
+} NDR_PROC_HEADER_EXTS;
+
+typedef struct
+{
+    /* size in bytes of all following extensions */
+    unsigned char Size;
+
+    INTERPRETER_OPT_FLAGS2 Flags2;
+
+    /* client cache size hint */
+    unsigned short ClientCorrHint;
+
+    /* server cache size hint */
+    unsigned short ServerCorrHint;
+
+    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
+     * HasNotify or HasNotify2 flag set */
+    unsigned short NotifyIndex;
+
+    /* needed only on IA64 to cope with float/register loading */
+    unsigned short FloatArgMask;
+} NDR_PROC_HEADER_EXTS64;
+
+typedef enum
+{
+    FC_BYTE = 0x01, /* 0x01 */
+    FC_CHAR, /* 0x02 */
+    FC_SMALL, /* 0x03 */
+    FC_USMALL, /* 0x04 */
+    FC_WCHAR, /* 0x05 */
+    FC_SHORT, /* 0x06 */
+    FC_USHORT, /* 0x07 */
+    FC_LONG, /* 0x08 */
+    FC_ULONG, /* 0x09 */
+    FC_FLOAT, /* 0x0a */
+    FC_HYPER, /* 0x0b */
+    FC_DOUBLE, /* 0x0c */
+    FC_ENUM16, /* 0x0d */
+    FC_ENUM32, /* 0x0e */
+    FC_IGNORE, /* 0x0f */
+    FC_ERROR_STATUS_T, /* 0x10 */
+
+    FC_RP, /* 0x11 */ /* reference pointer */
+    FC_UP, /* 0x12 */ /* unique pointer */
+    FC_OP, /* 0x13 */ /* object pointer */
+    FC_FP, /* 0x14 */ /* full pointer */
+
+    FC_STRUCT, /* 0x15 */ /* simple structure */
+    FC_PSTRUCT, /* 0x16 */ /* simple structure w/ pointers */
+    FC_CSTRUCT, /* 0x17 */ /* conformant structure */
+    FC_CPSTRUCT, /* 0x18 */ /* conformant structure w/ pointers */
+    FC_CVSTRUCT, /* 0x19 */ /* conformant varying struct */
+    FC_BOGUS_STRUCT, /* 0x1a */ /* complex structure */
+
+    FC_CARRAY, /* 0x1b */ /* conformant array */
+    FC_CVARRAY, /* 0x1c */ /* conformant varying array */
+    FC_SMFARRAY, /* 0x1d */ /* small (<64K) fixed array */
+    FC_LGFARRAY, /* 0x1e */ /* large (>= 64k) fixed array */
+    FC_SMVARRAY, /* 0x1f */ /* small (<64k) varying array */
+    FC_LGVARRAY, /* 0x20 */ /* large (>= 64k) varying array */
+    FC_BOGUS_ARRAY, /* 0x21 */ /* complex array */
+} FORMAT_CHARACTER;
+
+/* flags for all handle types */
+#define HANDLE_PARAM_IS_VIA_PTR 0x80
+#define HANDLE_PARAM_IS_IN      0x40
+#define HANDLE_PARAM_IS_OUT     0x20
+#define HANDLE_PARAM_IS_RETURN  0x10
+
+/* flags for context handles */
+#define NDR_STRICT_CONTEXT_HANDLE           0x08
+#define NDR_CONTEXT_HANDLE_NOSERIALIZE      0x04
+#define NDR_CONTEXT_HANDLE_SERIALIZE        0x02
+#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL   0x01
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl
new file mode 100644
index 0000000..91293e5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl
@@ -0,0 +1,421 @@
+/*
+ * Copyright 2009 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+import "unknwn.idl";
+import "wtypes.idl";
+/* import "prsht.idl"; */
+#endif
+
+cpp_quote("DEFINE_GUID(CLSID_NetSharingManager,0x5c63c1ad,0x3956,0x4ff8,0x84,0x86,0x40,0x03,0x47,0x58,0x31,0x5b);")
+
+[
+    object,
+    uuid(c08956a1-1cd3-11d1-b1c5-00805fc1270e),
+    pointer_default(unique)
+]
+interface INetConnection : IUnknown
+{
+    typedef enum tagNETCON_CHARACTERISTIC_FLAGS
+    {
+        NCCF_NONE               = 0x0000,
+        NCCF_ALL_USERS          = 0x0001,
+        NCCF_ALLOW_DUPLICATION  = 0x0002,
+        NCCF_ALLOW_REMOVAL      = 0x0004,
+        NCCF_ALLOW_RENAME       = 0x0008,
+        NCCF_INCOMING_ONLY      = 0x0020,
+        NCCF_OUTGOING_ONLY      = 0x0040,
+        NCCF_BRANDED            = 0x0080,
+        NCCF_SHARED             = 0x0100,
+        NCCF_BRIDGED            = 0x0200,
+        NCCF_FIREWALLED         = 0x0400,
+        NCCF_DEFAULT            = 0x0800,
+        NCCF_HOMENET_CAPABLE    = 0x1000,
+        NCCF_SHARED_PRIVATE     = 0x2000,
+        NCCF_QUARANTINED        = 0x4000,
+        NCCF_RESERVED           = 0x8000,
+        NCCF_BLUETOOTH_MASK  = 0x000F0000,
+        NCCF_LAN_MASK        = 0x00F00000
+    } NETCON_CHARACTERISTIC_FLAGS;
+
+    typedef enum tagNETCON_STATUS
+    {
+        NCS_DISCONNECTED,
+        NCS_CONNECTING,
+        NCS_CONNECTED,
+        NCS_DISCONNECTING,
+        NCS_HARDWARE_NOT_PRESENT,
+        NCS_HARDWARE_DISABLED,
+        NCS_HARDWARE_MALFUNCTION,
+        NCS_MEDIA_DISCONNECTED,
+        NCS_AUTHENTICATING,
+        NCS_AUTHENTICATION_SUCCEEDED,
+        NCS_AUTHENTICATION_FAILED,
+        NCS_INVALID_ADDRESS,
+        NCS_CREDENTIALS_REQUIRED
+    } NETCON_STATUS;
+
+    typedef enum tagNETCON_TYPE
+    {
+        NCT_DIRECT_CONNECT,
+        NCT_INBOUND,
+        NCT_INTERNET,
+        NCT_LAN,
+        NCT_PHONE,
+        NCT_TUNNEL,
+        NCT_BRIDGE
+    } NETCON_TYPE;
+
+    typedef enum tagNETCON_MEDIATYPE
+    {
+        NCM_NONE,
+        NCM_DIRECT,
+        NCM_ISDN,
+        NCM_LAN,
+        NCM_PHONE,
+        NCM_TUNNEL,
+        NCM_PPPOE,
+        NCM_BRIDGE,
+        NCM_SHAREDACCESSHOST_LAN,
+        NCM_SHAREDACCESSHOST_RAS
+    } NETCON_MEDIATYPE;
+
+    typedef struct tagNETCON_PROPERTIES
+    {
+        GUID              guidId;
+        [string] LPWSTR   pszwName;
+        [string] LPWSTR   pszwDeviceName;
+        NETCON_STATUS     Status;
+        NETCON_MEDIATYPE  MediaType;
+        DWORD             dwCharacter;
+        CLSID             clsidThisObject;
+        CLSID             clsidUiObject;
+    } NETCON_PROPERTIES;
+
+    HRESULT Connect();
+
+    HRESULT Disconnect();
+
+    HRESULT Delete();
+
+    HRESULT Duplicate(
+            [in, string] LPCWSTR pszwDuplicateName,
+            [out]        INetConnection **ppCon);
+
+    HRESULT GetProperties([out] NETCON_PROPERTIES **ppProps);
+
+    HRESULT GetUiObjectClassId([out, ref] CLSID *pclsid);
+
+    HRESULT Rename([in, string] LPCWSTR pszwNewName);
+}
+
+[
+    object,
+    uuid(24b7e9b5-e38f-4685-851b-00892cf5f940),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetSharingPortMappingProps : IDispatch
+{
+    [propget, id(1)]
+    HRESULT Name([out, retval] BSTR *pbstrName);
+
+    [propget, id(2)]
+    HRESULT IPProtocol([out, retval] UCHAR *pucIPProt);
+
+    [propget, id(3)]
+    HRESULT ExternalPort([out, retval] long *pusPort);
+
+    [propget, id(4)]
+    HRESULT InternalPort([out, retval] long *pusPort);
+
+    [propget, id(5)]
+    HRESULT Options([out, retval] long *pdwOptions);
+
+    [propget, id(6)]
+    HRESULT TargetName([out, retval] BSTR *pbstrTargetName);
+
+    [propget, id(7)]
+    HRESULT TargetIPAddress([out, retval] BSTR *pbstrTargetIPAddress);
+
+    [propget, id(8)]
+    HRESULT Enabled([out, retval] VARIANT_BOOL *pbool);
+}
+
+[
+    object,
+    uuid(c08956b1-1cd3-11d1-b1c5-00805fc1270e),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetSharingPortMapping : IDispatch
+{
+    [id(1)]
+    HRESULT Disable();
+
+    [id(2)]
+    HRESULT Enable();
+
+    [propget, id(3)]
+    HRESULT Properties([out, retval] INetSharingPortMappingProps **ppNSPMP);
+
+    [id(4)]
+    HRESULT Delete();
+};
+[
+    object,
+    uuid(02e4a2de-da20-4e34-89c8-ac22275a010b),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetSharingPortMappingCollection : IDispatch
+{
+    [propget, id(DISPID_NEWENUM), restricted]
+    HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+    [propget, id(1)]
+    HRESULT Count([out, retval] long *pVal);
+}
+
+[
+    object,
+    uuid(c08956b6-1cd3-11d1-b1c5-00805fc1270e),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetSharingConfiguration : IDispatch
+{
+    typedef enum tagSHARINGCONNECTIONTYPE {
+        ICSSHARINGTYPE_PUBLIC,
+        ICSSHARINGTYPE_PRIVATE
+    } SHARINGCONNECTIONTYPE, *LPSHARINGCONNECTIONTYPE;
+
+    typedef enum tagSHARINGCONNECTION_ENUM_FLAGS {
+            ICSSC_DEFAULT,
+            ICSSC_ENABLED
+    } SHARINGCONNECTION_ENUM_FLAGS;
+
+    typedef enum tagICS_TARGETTYPE {
+            ICSTT_NAME,
+            ICSTT_IPADDRESS
+    }ICS_TARGETTYPE;
+
+    [propget, id(1)]
+    HRESULT SharingEnabled([out, retval] VARIANT_BOOL *pbEnabled);
+
+    [propget, id(2)]
+    HRESULT SharingConnectionType([out, retval] SHARINGCONNECTIONTYPE *pType);
+
+    [id(3)]
+    HRESULT DisableSharing();
+
+    [id(4)]
+    HRESULT EnableSharing([in] SHARINGCONNECTIONTYPE Type);
+
+    [propget, id(5)]
+    HRESULT InternetFirewallEnabled([out, retval] VARIANT_BOOL *pbEnabled);
+
+    [id(6)]
+    HRESULT DisableInternetFirewall();
+
+    [id(7)]
+    HRESULT EnableInternetFirewall();
+
+    [propget, id(8)]
+    HRESULT EnumPortMappings(
+        [in] SHARINGCONNECTION_ENUM_FLAGS Flags,
+        [out, retval] INetSharingPortMappingCollection **ppColl);
+
+    [id(9)]
+    HRESULT AddPortMapping(
+            [in] BSTR bstrName,
+            [in] UCHAR ucIPProtocol,
+            [in] USHORT usExternalPort,
+            [in] USHORT usInternalPort,
+            [in] DWORD dwOptions,
+            [in] BSTR bstrTargetNameOrIPAddress,
+            [in] ICS_TARGETTYPE eTargetType,
+            [out, retval] INetSharingPortMapping **ppMapping );
+
+    [id(10)]
+    HRESULT RemovePortMapping([in] INetSharingPortMapping *pMapping);
+}
+
+[
+    object,
+    uuid(c08956b4-1cd3-11d1-b1c5-00805fc1270e),
+    pointer_default(unique)
+]
+interface IEnumNetSharingPublicConnection : IUnknown
+{
+    HRESULT Next(
+            [in] ULONG celt,
+            [out, size_is(celt), length_is(*pceltFetched)] VARIANT *rgVar,
+            [out] ULONG *pceltFetched);
+
+    HRESULT Skip([in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone([out] IEnumNetSharingPublicConnection **ppenum);
+}
+
+[
+    object,
+    uuid(c08956b5-1cd3-11d1-b1c5-00805fc1270e),
+    pointer_default(unique)
+]
+interface IEnumNetSharingPrivateConnection : IUnknown
+{
+    HRESULT Next(
+            [in] ULONG celt,
+            [out, size_is(celt), length_is(*pCeltFetched)] VARIANT *rgVar,
+            [out] ULONG *pCeltFetched);
+
+    HRESULT Skip([in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone([out] IEnumNetSharingPrivateConnection **ppenum);
+}
+
+[
+    object,
+    uuid(f4277c95-ce5b-463d-8167-5662d9bcaa72),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetConnectionProps : IDispatch
+{
+    [propget, id(1)]
+    HRESULT Guid([out, retval] BSTR *pbstrGuid);
+
+    [propget, id(2)]
+    HRESULT Name([out, retval] BSTR *pbstrName);
+
+    [propget, id(3)]
+    HRESULT DeviceName([out, retval] BSTR *pbstrDeviceName);
+
+    [propget, id(4)]
+    HRESULT Status([out, retval] NETCON_STATUS *pStatus);
+
+    [propget, id(5)]
+    HRESULT MediaType([out, retval] NETCON_MEDIATYPE *pMediaType);
+
+    [propget, id(6)]
+    HRESULT Characteristics([out, retval] DWORD *pdwFlags);
+}
+
+[
+    object,
+    uuid(7d7a6355-f372-4971-a149-bfc927be762a),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetSharingPublicConnectionCollection : IDispatch
+{
+    [propget, id(DISPID_NEWENUM), restricted]
+    HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+    [propget, id(1)]
+    HRESULT Count([out, retval] long *pVal);
+}
+
+[
+    object,
+    uuid(33c4643c-7811-46fa-a89a-768597bd7223),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+ ]
+interface INetSharingEveryConnectionCollection : IDispatch
+{
+    [propget, id(DISPID_NEWENUM), restricted]
+    HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+    [propget, id(1)]
+    HRESULT Count([out, retval] long *pVal);
+}
+
+[
+    object,
+    uuid(38ae69e0-4409-402a-a2cb-e965c727f840),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+ ]
+interface INetSharingPrivateConnectionCollection : IDispatch
+{
+    [propget, id(DISPID_NEWENUM), restricted]
+    HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+    [propget, id(1)]
+    HRESULT Count([out, retval] long *pVal);
+}
+
+[
+    object,
+    uuid(c08956b7-1cd3-11d1-b1c5-00805fc1270e),
+    oleautomation,
+    dual,
+    pointer_default(unique)
+]
+interface INetSharingManager : IDispatch
+{
+    [propget, id(1)]
+    HRESULT SharingInstalled([out, retval] VARIANT_BOOL *pbInstalled);
+
+    [propget, id(2)]
+    HRESULT EnumPublicConnections(
+            [in]  SHARINGCONNECTION_ENUM_FLAGS Flags,
+            [out, retval] INetSharingPublicConnectionCollection **ppColl);
+
+    [propget, id(3)]
+    HRESULT EnumPrivateConnections(
+            [in]  SHARINGCONNECTION_ENUM_FLAGS Flags,
+            [out, retval] INetSharingPrivateConnectionCollection **ppColl);
+
+    [propget, id(6)]
+    HRESULT INetSharingConfigurationForINetConnection(
+            [in] INetConnection *pNetConnection,
+            [out, retval] INetSharingConfiguration **ppNetSharingConfiguration);
+
+    [propget, id(7)]
+    HRESULT EnumEveryConnection([out, retval] INetSharingEveryConnectionCollection **ppColl);
+
+    [propget, id(8)]
+    HRESULT NetConnectionProps(
+            [in] INetConnection *pNetConnection,
+            [out, retval] INetConnectionProps **ppProps);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl
new file mode 100644
index 0000000..f5cddb8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl
@@ -0,0 +1,479 @@
+/*
+ * Copyright 2007 Jeff Latimer
+ *
+ * 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
+ *
+ *****************************************************************************
+ *
+ * The firewall management interface
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "icftypes.idl";
+import "oaidl.idl";
+
+[
+   object,
+   uuid(A6207B2E-7CDD-426A-951E-5E1CBC5AFEAD),
+   dual
+]
+interface INetFwIcmpSettings : IDispatch
+{
+    [id(1), propget]
+    HRESULT AllowOutboundDestinationUnreachable([out, retval] VARIANT_BOOL* allow);
+
+    [id(1), propput]
+    HRESULT AllowOutboundDestinationUnreachable( [in] VARIANT_BOOL allow );
+
+    [id(2), propget]
+    HRESULT AllowRedirect( [out, retval] VARIANT_BOOL* allow );
+
+    [id(2), propput]
+    HRESULT AllowRedirect( [in] VARIANT_BOOL allow );
+
+    [id(3), propget]
+    HRESULT AllowInboundEchoRequest( [out, retval] VARIANT_BOOL* allow );
+
+    [id(3), propput]
+    HRESULT AllowInboundEchoRequest( [in] VARIANT_BOOL allow );
+
+    [id(4), propget]
+    HRESULT AllowOutboundTimeExceeded( [out, retval] VARIANT_BOOL* allow );
+
+    [id(4), propput]
+    HRESULT AllowOutboundTimeExceeded( [in] VARIANT_BOOL allow );
+
+    [id(5), propget]
+    HRESULT AllowOutboundParameterProblem( [out, retval] VARIANT_BOOL* allow );
+
+    [id(5), propput]
+    HRESULT AllowOutboundParameterProblem( [in] VARIANT_BOOL allow );
+
+    [id(6), propget]
+    HRESULT AllowOutboundSourceQuench( [out, retval] VARIANT_BOOL* allow );
+
+    [id(6), propput]
+    HRESULT AllowOutboundSourceQuench( [in] VARIANT_BOOL allow );
+
+    [id(7), propget]
+    HRESULT AllowInboundRouterRequest( [out, retval] VARIANT_BOOL* allow );
+
+    [id(7), propput]
+    HRESULT AllowInboundRouterRequest( [in] VARIANT_BOOL allow );
+
+    [id(8), propget]
+    HRESULT AllowInboundTimestampRequest( [out, retval] VARIANT_BOOL* allow );
+
+    [id(8), propput]
+    HRESULT AllowInboundTimestampRequest( [in] VARIANT_BOOL allow );
+
+    [id(9), propget]
+    HRESULT AllowInboundMaskRequest( [out, retval] VARIANT_BOOL* allow );
+
+    [id(9), propput]
+    HRESULT AllowInboundMaskRequest( [in] VARIANT_BOOL allow );
+
+    [id(10), propget]
+    HRESULT AllowOutboundPacketTooBig( [out, retval] VARIANT_BOOL* allow );
+
+    [id(10), propput]
+    HRESULT AllowOutboundPacketTooBig( [in] VARIANT_BOOL allow );
+}
+
+[
+    object,
+    uuid(E0483BA0-47FF-4D9C-A6D6-7741D0B195F7),
+    dual
+]
+interface INetFwOpenPort : IDispatch
+{
+    [id(1), propget]
+    HRESULT Name( [out, retval] BSTR* name );
+
+    [id(1), propput]
+    HRESULT Name( [in] BSTR name );
+
+    [id(2), propget]
+    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+    [id(2), propput]
+    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+    [id(3), propget]
+    HRESULT Protocol( [out, retval] NET_FW_IP_PROTOCOL* ipProtocol );
+
+    [id(3), propput]
+    HRESULT Protocol( [in] NET_FW_IP_PROTOCOL ipProtocol );
+
+    [id(4), propget]
+    HRESULT Port( [out, retval] LONG* portNumber );
+
+    [id(4), propput]
+    HRESULT Port( [in] LONG portNumber );
+
+    [id(5), propget]
+    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+    [id(5), propput]
+    HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+    [id(6), propget]
+    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+    [id(6), propput]
+    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+    [id(7), propget]
+    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+    [id(7), propput]
+    HRESULT Enabled( [in] VARIANT_BOOL enabled );
+
+    [id(8), propget]
+    HRESULT BuiltIn( [out, retval] VARIANT_BOOL* builtIn );
+}
+
+[
+    object,
+    uuid(C0E9D7FA-E07E-430A-B19A-090CE82D92E2),
+    dual
+]
+interface INetFwOpenPorts : IDispatch
+{
+    [id(1), propget]
+    HRESULT Count( [out, retval] long* count );
+
+    [id(2)]
+    HRESULT Add( [in] INetFwOpenPort* port );
+
+    [id(3)]
+    HRESULT Remove( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol );
+
+    [id(4)]
+    HRESULT Item( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol,
+                  [out, retval] INetFwOpenPort** openPort );
+
+    [id(DISPID_NEWENUM), propget, restricted]
+    HRESULT _NewEnum( [out, retval] IUnknown** newEnum );
+}
+
+[
+    object,
+    uuid(79FD57C8-908E-4A36-9888-D5B3F0A444CF),
+    dual
+]
+interface INetFwService : IDispatch
+{
+    [id(1), propget]
+    HRESULT Name( [out, retval] BSTR* name );
+
+    [id(2), propget]
+    HRESULT Type( [out, retval] NET_FW_SERVICE_TYPE* type );
+
+    [id(3), propget]
+    HRESULT Customized( [out, retval] VARIANT_BOOL* customized );
+
+    [id(4), propget]
+    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+    [id(4), propput]
+    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+    [id(5), propget]
+    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+    [id(5), propput]
+    HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+    [id(6), propget]
+    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+    [id(6), propput]
+    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+    [id(7), propget]
+    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+    [id(7), propput]
+    HRESULT Enabled( [in] VARIANT_BOOL enabled );
+
+    [id(8), propget]
+    HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts );
+}
+
+[
+    object,
+    uuid(79649BB4-903E-421B-94C9-79848E79F6EE),
+    dual
+]
+interface INetFwServices : IDispatch
+{
+    [id(1), propget]
+    HRESULT Count( [out, retval] long* count );
+
+     [id(2)]
+    HRESULT Item( [in] NET_FW_SERVICE_TYPE svcType,
+                  [out, retval] INetFwService** service );
+
+    [id(DISPID_NEWENUM), propget, restricted]
+    HRESULT _NewEnum( [out, retval] IUnknown** newEnum );
+}
+
+[
+    object,
+    uuid(B5E64FFA-C2C5-444E-A301-FB5E00018050),
+    dual
+]
+interface INetFwAuthorizedApplication : IDispatch
+{
+    [id(1), propget]
+    HRESULT Name( [out, retval] BSTR* name );
+
+    [id(1), propput]
+    HRESULT Name( [in] BSTR name );
+
+    [id(2), propget]
+    HRESULT ProcessImageFileName( [out, retval] BSTR* imageFileName );
+
+    [id(2), propput]
+    HRESULT ProcessImageFileName( [in] BSTR imageFileName );
+
+    [id(3), propget]
+    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+    [id(3), propput]
+    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+    [id(4), propget]
+    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+    [id(4), propput]
+    HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+    [id(5), propget]
+    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+    [id(5), propput]
+    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+    [id(6), propget]
+    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+    [id(6), propput]
+    HRESULT Enabled( [in] VARIANT_BOOL enabled );
+}
+
+[
+    object,
+    uuid(D4BECDDF-6F73-4A83-B832-9C66874CD20E),
+    dual
+]
+interface INetFwRemoteAdminSettings : IDispatch
+{
+    [id(1), propget]
+    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+    [id(1), propput]
+    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+    [id(2), propget]
+    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+    [id(2), propput]
+    HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+    [id(3), propget]
+    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+    [id(3), propput]
+    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+    [id(4), propget]
+    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+    [id(4), propput]
+    HRESULT Enabled( [in] VARIANT_BOOL enabled );
+}
+
+
+[
+    object,
+    uuid(644EFD52-CCF9-486C-97A2-39F352570B30),
+    dual
+]
+interface INetFwAuthorizedApplications : IDispatch
+{
+    [id(1), propget]
+    HRESULT Count( [out, retval] long* count );
+
+    [id(2)]
+    HRESULT Add( [in] INetFwAuthorizedApplication* app );
+
+    [id(3)]
+    HRESULT Remove( [in] BSTR imageFileName );
+
+    [id(4)]
+    HRESULT Item( [in] BSTR imageFileName,
+                  [out, retval] INetFwAuthorizedApplication** app );
+
+    [id(DISPID_NEWENUM), propget, restricted]
+    HRESULT _NewEnum( [out, retval] IUnknown** newEnum );
+}
+
+[
+     object,
+     uuid(174A0DDA-E9F9-449D-993B-21AB667CA456),
+     dual
+]
+interface INetFwProfile : IDispatch
+{
+    [id(1), propget]
+    HRESULT Type( [out, retval] NET_FW_PROFILE_TYPE* type );
+
+    [id(2), propget]
+    HRESULT FirewallEnabled( [out, retval] VARIANT_BOOL* enabled );
+
+    [id(2), propput]
+    HRESULT FirewallEnabled( [in] VARIANT_BOOL enabled );
+
+    [id(3), propget]
+    HRESULT ExceptionsNotAllowed( [out, retval] VARIANT_BOOL* notAllowed );
+
+    [id(3), propput]
+    HRESULT ExceptionsNotAllowed( [in] VARIANT_BOOL notAllowed );
+
+    [id(4), propget]
+    HRESULT NotificationsDisabled( [out, retval] VARIANT_BOOL* disabled );
+
+    [id(4), propput]
+    HRESULT NotificationsDisabled( [in] VARIANT_BOOL disabled );
+
+    [id(5), propget]
+    HRESULT UnicastResponsesToMulticastBroadcastDisabled( [out, retval] VARIANT_BOOL* disabled );
+
+    [id(5), propput]
+    HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] VARIANT_BOOL disabled );
+
+    [id(6), propget]
+    HRESULT RemoteAdminSettings( [out, retval] INetFwRemoteAdminSettings** remoteAdminSettings );
+
+    [id(7), propget]
+    HRESULT IcmpSettings( [out, retval] INetFwIcmpSettings** icmpSettings );
+
+    [id(8), propget]
+    HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts );
+
+    [id(9), propget]
+    HRESULT Services( [out, retval] INetFwServices** services );
+
+    [id(10), propget]
+    HRESULT AuthorizedApplications( [out, retval] INetFwAuthorizedApplications** apps );
+}
+
+[
+     object,
+     uuid(D46D2478-9AC9-4008-9DC7-5563CE5536CC),
+     dual
+]
+interface INetFwPolicy : IDispatch
+{
+    [id(1), propget]
+    HRESULT CurrentProfile( [out, retval] INetFwProfile** profile );
+
+    [id(2)]
+    HRESULT GetProfileByType( [in] NET_FW_PROFILE_TYPE profileType,
+                              [out, retval] INetFwProfile** profile );
+}
+
+[
+    object,
+    uuid(F7898AF5-CAC4-4632-A2EC-DA06E5111AF2),
+    dual
+]
+interface INetFwMgr : IDispatch
+{
+    [id(1), propget]
+    HRESULT LocalPolicy( [out, retval] INetFwPolicy** localPolicy );
+
+    [id(2), propget]
+    HRESULT CurrentProfileType( [out, retval] NET_FW_PROFILE_TYPE* profileType );
+
+    [id(3)]
+    HRESULT RestoreDefaults();
+
+    [id(4)]
+    HRESULT IsPortAllowed( [in] BSTR imageFileName, [in] NET_FW_IP_VERSION ipVersion,
+                           [in] LONG portNumber, [in] BSTR localAddress,
+                           [in] NET_FW_IP_PROTOCOL ipProtocol, [out] VARIANT* allowed,
+                           [out] VARIANT* restricted );
+
+    [id(5)]
+    HRESULT IsIcmpTypeAllowed( [in] NET_FW_IP_VERSION ipVersion, [in] BSTR localAddress,
+                               [in] BYTE type, [out] VARIANT* allowed,
+                               [out] VARIANT* restricted );
+}
+
+[
+    uuid(DB4F3345-3EF8-45ED-B976-25A6D3B81B71),
+    version(1.0)
+]
+library NetFwPublicTypeLib
+{
+    importlib("stdole2.tlb");
+    interface INetFwRemoteAdminSettings;
+    interface INetFwIcmpSettings;
+    interface INetFwOpenPort;
+    interface INetFwOpenPorts;
+    interface INetFwService;
+    interface INetFwServices;
+    interface INetFwAuthorizedApplication;
+    interface INetFwAuthorizedApplications;
+    interface INetFwProfile;
+    interface INetFwPolicy;
+    interface INetFwMgr;
+
+    [
+        uuid(0CA545C6-37AD-4A6C-BF92-9F7610067EF5)
+    ]
+    coclass NetFwOpenPort
+    {
+        [default] interface INetFwOpenPort;
+    }
+
+    [
+        uuid(EC9846B3-2762-4A6B-A214-6ACB603462D2)
+    ]
+    coclass NetFwAuthorizedApplication
+    {
+        [default] interface INetFwAuthorizedApplication;
+    }
+
+    [
+        uuid(304CE942-6E39-40D8-943A-B913C40C9CD4)
+    ]
+    coclass NetFwMgr
+    {
+        [default] interface INetFwMgr;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h
new file mode 100644
index 0000000..fdd447f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NLDEF_H
+#define __WINE_NLDEF_H
+
+typedef enum
+{
+    IpPrefixOriginOther = 0,
+    IpPrefixOriginManual,
+    IpPrefixOriginWellKnown,
+    IpPrefixOriginDhcp,
+    IpPrefixOriginRouterAdvertisement,
+    IpPrefixOriginUnchanged = 16,
+} NL_PREFIX_ORIGIN;
+
+typedef enum
+{
+    IpSuffixOriginOther = 0,
+    IpSuffixOriginManual,
+    IpSuffixOriginWellKnown,
+    IpSuffixOriginDhcp,
+    IpSuffixOriginLinkLayerAddress,
+    IpSuffixOriginRandom,
+    IpSuffixOriginUnchanged = 16,
+} NL_SUFFIX_ORIGIN;
+
+typedef enum
+{
+    IpDadStateInvalid = 0,
+    IpDadStateTentative,
+    IpDadStateDuplicate,
+    IpDadStateDeprecated,
+    IpDadStatePreferred,
+} NL_DAD_STATE;
+
+
+typedef enum
+{
+#define MAKE_ROUTE_PROTOCOL(name, value) \
+    MIB_IPPROTO_ ## name = value, \
+    PROTO_IP_ ## name = value
+
+    MAKE_ROUTE_PROTOCOL(OTHER,   1),
+    MAKE_ROUTE_PROTOCOL(LOCAL,   2),
+    MAKE_ROUTE_PROTOCOL(NETMGMT, 3),
+    MAKE_ROUTE_PROTOCOL(ICMP,    4),
+    MAKE_ROUTE_PROTOCOL(EGP,     5),
+    MAKE_ROUTE_PROTOCOL(GGP,     6),
+    MAKE_ROUTE_PROTOCOL(HELLO,   7),
+    MAKE_ROUTE_PROTOCOL(RIP,     8),
+    MAKE_ROUTE_PROTOCOL(IS_IS,   9),
+    MAKE_ROUTE_PROTOCOL(ES_IS,   10),
+    MAKE_ROUTE_PROTOCOL(CISCO,   11),
+    MAKE_ROUTE_PROTOCOL(BBN,     12),
+    MAKE_ROUTE_PROTOCOL(OSPF,    13),
+    MAKE_ROUTE_PROTOCOL(BGP,     14),
+
+    MAKE_ROUTE_PROTOCOL(NT_AUTOSTATIC,     10002),
+    MAKE_ROUTE_PROTOCOL(NT_STATIC,         10006),
+    MAKE_ROUTE_PROTOCOL(NT_STATIC_NON_DOD, 10007),
+} NL_ROUTE_PROTOCOL, *PNL_ROUTE_PROTOCOL;
+
+
+#endif /* __WINE_NLDEF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h
new file mode 100644
index 0000000..c501255
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2004 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NPAPI_H__
+#define __WINE_NPAPI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* capabilities */
+#define WNNC_SPEC_VERSION          0x00000001
+#define WNNC_SPEC_VERSION51        0x00050001
+#define WNNC_NET_TYPE              0x00000002
+#define WNNC_NET_NONE              0x00000000
+
+#define WNNC_DRIVER_VERSION        0x00000003
+
+#define WNNC_USER                  0x00000004
+#define WNNC_USR_GETUSER           0x00000001
+
+#define WNNC_CONNECTION            0x00000006
+#define WNNC_CON_ADDCONNECTION     0x00000001
+#define WNNC_CON_CANCELCONNECTION  0x00000002
+#define WNNC_CON_GETCONNECTIONS    0x00000004
+#define WNNC_CON_ADDCONNECTION3    0x00000008
+#define WNNC_CON_GETPERFORMANCE    0x00000040
+#define WNNC_CON_DEFER             0x00000080
+
+#define WNNC_DIALOG                0x00000008
+#define WNNC_DLG_DEVICEMODE        0x00000001
+#define WNNC_DLG_PROPERTYDIALOG    0x00000020
+#define WNNC_DLG_SEARCHDIALOG      0x00000040
+#define WNNC_DLG_FORMATNETWORKNAME 0x00000080
+#define WNNC_DLG_PERMISSIONEDITOR  0x00000100
+#define WNNC_DLG_GETRESOURCEPARENT 0x00000200
+#define WNNC_DLG_GETRESOURCEINFORMATION 0x00000800
+
+#define WNNC_ADMIN                 0x00000009
+#define WNNC_ADM_GETDIRECTORYTYPE  0x00000001
+#define WNNC_ADM_DIRECTORYNOTIFY   0x00000002
+
+#define WNNC_ENUMERATION           0x0000000b
+#define WNNC_ENUM_GLOBAL           0x00000001
+#define WNNC_ENUM_LOCAL            0x00000002
+#define WNNC_ENUM_CONTEXT          0x00000004
+
+#define WNNC_START                 0x0000000c
+#define WNNC_WAIT_FOR_START        0x00000001
+
+typedef DWORD (APIENTRY *PF_NPGetCaps)(DWORD ndex);
+
+/* get user */
+typedef DWORD (APIENTRY *PF_NPGetUser)(LPWSTR lpName, LPWSTR lpUserName,
+ LPDWORD lpnBufferLen);
+
+/* enumeration-related */
+typedef DWORD (APIENTRY *PF_NPOpenEnum)(DWORD dwScope, DWORD dwType, DWORD dwUsage,
+ LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum);
+typedef DWORD (APIENTRY *PF_NPEnumResource)(HANDLE hEnum, LPDWORD lpcCount,
+ LPVOID lpBuffer, LPDWORD lpBufferSize);
+typedef DWORD (APIENTRY *PF_NPCloseEnum)(HANDLE hEnum);
+typedef DWORD (APIENTRY *PF_NPGetResourceInformation)(LPNETRESOURCEW lpNetResource,
+ LPVOID lpBuffer, LPDWORD lpcbBuffer, LPWSTR* lplpSystem);
+
+/* connection-related */
+typedef DWORD (APIENTRY *PF_NPAddConnection)(LPNETRESOURCEW lpNetResource,
+ LPWSTR lpPassword, LPWSTR lpUserName);
+typedef DWORD (APIENTRY *PF_NPAddConnection3)(HWND hwndOwner,
+ LPNETRESOURCEW lpNetResource, LPWSTR lpPassword, LPWSTR lpUserName,
+ DWORD dwFlags);
+typedef DWORD (APIENTRY *PF_NPCancelConnection)(LPWSTR lpName, BOOL fForce);
+typedef DWORD (APIENTRY *PF_NPGetConnection)(LPWSTR lpLocalName,
+ LPWSTR lpRemoteName, LPDWORD lpnBufferLen);
+
+/* network name manipulation */
+typedef DWORD (APIENTRY *PF_NPGetUniversalName)(LPWSTR lpLocalPath,
+ DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpnBufferSize);
+typedef DWORD (APIENTRY *PF_NPFormatNetworkName)(LPWSTR lpRemoteName,
+ LPWSTR lpFormattedName, LPDWORD lpnLength, DWORD dwFlags,
+ DWORD dwAveCharPerLine);
+
+/* dialogs */
+typedef DWORD (APIENTRY *PF_NPDeviceMode)(HWND hParent);
+
+/* search dialog */
+#define WNSRCH_REFRESH_FIRST_LEVEL 0x00000001
+
+typedef DWORD (APIENTRY *PF_NPSearchDialog)(HWND hwndParent,
+ LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, DWORD cbBuffer,
+ LPDWORD lpnFlags);
+
+/* property dialog */
+
+#define WNTYPE_DRIVE   1
+#define WNTYPE_FILE    2
+#define WNTYPE_PRINTER 3
+#define WNTYPE_COMM    4
+
+#define WNPS_FILE 0
+#define WNPS_DIR  1
+#define WNPS_MULT 2
+
+typedef DWORD (APIENTRY *PF_NPGetPropertyText)(DWORD iButton, DWORD nPropSel,
+ LPWSTR lpName, LPWSTR lpButtonName, DWORD nButtonNameLen, DWORD nType);
+
+typedef DWORD (APIENTRY *PF_NPPropertyDialog)(HWND hwndParent, DWORD iButtonDlg,
+ DWORD nPropSel, LPWSTR lpFileName, DWORD nType);
+
+/* admin */
+#define WNDT_NORMAL  0
+#define WNDT_NETWORK 1
+
+#define WNDN_MKDIR 1
+#define WNDN_RMDIR 2
+#define WNDN_MVDIR 3
+
+typedef DWORD (APIENTRY *PF_NPGetDirectoryType)(LPWSTR lpName, LPINT lpType,
+ BOOL bFlushCache);
+typedef DWORD (APIENTRY *PF_NPDirectoryNotify)(HWND hwnd, LPWSTR lpDir,
+ DWORD dwOper);
+
+/* permission editor dialogs */
+#define WNPERMC_PERM  0x00000001
+#define WNPERMC_AUDIT 0x00000002
+#define WNPERMC_OWNER 0x00000004
+
+typedef DWORD (APIENTRY *PF_NPFMXGetPermCaps)(LPWSTR lpDriveName);
+
+#define WNPERM_DLG_PERM  0
+#define WNPERM_DLG_AUDIT 1
+#define WNPERM_DLG_OWNER 2
+
+typedef DWORD (APIENTRY *PF_NPFMXEditPerm)(LPWSTR lpDriveName, HWND hwndFMX,
+ DWORD nDialogType);
+
+typedef DWORD (APIENTRY *PF_NPFMXGetPermHelp)(LPWSTR lpDriveName,
+ DWORD nDialogType, BOOL fDirectory, LPVOID lpFileNameBuffer,
+ LPDWORD lpBufferSize, LPDWORD lpnHelpContext);
+
+VOID WINAPI WNetSetLastErrorA(DWORD err, LPSTR lpError, LPSTR lpProviders);
+VOID WINAPI WNetSetLastErrorW(DWORD err, LPWSTR lpError, LPWSTR lpProviders);
+#define WNetSetLastError WINELIB_NAME_AW(WNetSetLastError)
+
+/* provider classes */
+#define WN_NETWORK_CLASS         0x00000001
+#define WN_CREDENTIAL_CLASS      0x00000002
+#define WN_PRIMARY_AUTHENT_CLASS 0x00000004
+#define WN_SERVICE_CLASS         0x00000008
+
+#define WN_VALID_LOGON_ACCOUNT   0x00000001
+#define WN_NT_PASSWORD_CHANGED   0x00000002
+
+/* notifications */
+typedef DWORD (APIENTRY *PF_NPLogonNotify)(PLUID lpLogonId,
+ LPCWSTR lpAuthentInfoType, LPVOID lpAuthentInfo,
+ LPCWSTR lpPreviousAuthentInfoType, LPVOID lpPreviousAuthentInfo,
+ LPWSTR lpStationName, LPVOID StationHandle, LPWSTR *lpLogonScript);
+typedef DWORD (APIENTRY *PF_NPPasswordChangeNotify)(LPCWSTR lpAuthentInfoType,
+ LPVOID lpAuthentInfo, LPCWSTR lpPreviousAuthentInfoType,
+ LPVOID lpPreviousAuthentInfo, LPWSTR lpStationName, LPVOID StationHandle,
+ DWORD dwChangeInfo);
+
+#define NOTIFY_PRE  0x00000001
+#define NOTIFY_POST 0x00000002
+
+typedef struct _NOTIFYINFO
+{
+    DWORD  dwNotifyStatus;
+    DWORD  dwOperationStatus;
+    LPVOID lpContext;
+} NOTIFYINFO, *LPNOTIFYINFO;
+
+/* FIXME: NetResource is declared as a NETRESOURCE in psdk, not a NETRESOURCEW,
+ * but how can the type change in a service provider?  Defaulting to wide-char
+ * for consistency with the rest of the api.
+ */
+typedef struct _NOTIFYADD
+{
+    HWND         hwndOwner;
+    NETRESOURCEW NetResource;
+    DWORD        dwAddFlags;
+} NOTIFYADD, *LPNOTIFYADD;
+
+/* FIXME: lpName and lpProvider are declared as LPTSTRs in psdk, but again
+ * for consistency with rest of api defaulting to LPWSTRs.
+ */
+typedef struct _NOTIFYCANCEL
+{
+    LPWSTR lpName;
+    LPWSTR lpProvider;
+    DWORD  dwFlags;
+    BOOL   fForce;
+} NOTIFYCANCEL, *LPNOTIFYCANCEL;
+
+typedef DWORD (APIENTRY *PF_AddConnectNotify)(LPNOTIFYINFO lpNotifyInfo,
+ LPNOTIFYADD lpAddInfo);
+typedef DWORD (APIENTRY *PF_CancelConnectNotify)(LPNOTIFYINFO lpNotifyInfo,
+ LPNOTIFYADD lpAddInfo);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef __WINE_NPAPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h
new file mode 100644
index 0000000..04b63c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h
@@ -0,0 +1,214 @@
+/* NSPAPI.H -- winsock 1.1
+ * not supported on win95
+ *
+ * Copyright (C) 2001 Stefan Leichter
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_NSPAPI_
+#define _WINE_NSPAPI_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+/*
+ * constants
+ */
+#define XP_CONNECTIONLESS		0x00000001
+#define XP_GUARANTEED_DELIVERY		0x00000002
+#define XP_GUARANTEED_ORDER		0x00000004
+#define XP_MESSAGE_ORIENTED		0x00000008
+#define XP_PSEUDO_STREAM		0x00000010
+#define XP_GRACEFUL_CLOSE		0x00000020
+#define XP_EXPEDITED_DATA		0x00000040
+#define XP_CONNECT_DATA			0x00000080
+#define XP_DISCONNECT_DATA		0x00000100
+#define XP_SUPPORTS_BROADCAST		0x00000200
+#define XP_SUPPORTS_MULTICAST		0x00000400
+#define XP_BANDWIDTH_ALLOCATION		0x00000800
+#define XP_FRAGMENTATION		0x00001000
+#define XP_ENCRYPTS			0x00002000
+
+/*
+ * structures
+ */
+typedef  struct _PROTOCOL_INFOA
+{
+         DWORD   dwServiceFlags;
+         INT     iAddressFamily;
+         INT     iMaxSockAddr;
+         INT     iMinSockAddr;
+         INT     iSocketType;
+         INT     iProtocol;
+         DWORD   dwMessageSize;
+         LPSTR   lpProtocol;
+} PROTOCOL_INFOA, *PPROTOCOL_INFOA, *LPPROTOCOL_INFOA;
+
+typedef  struct _PROTOCOL_INFOW
+{
+         DWORD   dwServiceFlags;
+         INT     iAddressFamily;
+         INT     iMaxSockAddr;
+         INT     iMinSockAddr;
+         INT     iSocketType;
+         INT     iProtocol;
+         DWORD   dwMessageSize;
+         LPWSTR  lpProtocol;
+} PROTOCOL_INFOW, *PPROTOCOL_INFOW, *LPPROTOCOL_INFOW;
+
+DECL_WINELIB_TYPE_AW(PROTOCOL_INFO)
+DECL_WINELIB_TYPE_AW(PPROTOCOL_INFO)
+DECL_WINELIB_TYPE_AW(LPPROTOCOL_INFO)
+
+typedef struct _SERVICE_ADDRESS
+{
+        DWORD   dwAddressType;
+        DWORD   dwAddressFlags;
+        DWORD   dwAddressLength;
+        DWORD   dwPrincipalLength;
+        BYTE*   lpAddress;
+        BYTE*   lpPrincipal;
+} SERVICE_ADDRESS, *PSERVICE_ADDRESS, *LPSERVICE_ADDRESS;
+
+typedef struct _SERVICE_ADDRESSES
+{
+        DWORD           dwAddressCount;
+        SERVICE_ADDRESS Addresses[1];
+} SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
+
+typedef struct _SERVICE_INFOA
+{
+        LPGUID              lpServiceType;
+        LPSTR               lpServiceName;
+        LPSTR               lpComment;
+        LPSTR               lpLocale;
+        DWORD               dwDisplayHint;
+        DWORD               dwVersion;
+        DWORD               dwTime;
+        LPSTR               lpMachineName;
+        LPSERVICE_ADDRESSES lpServiceAddress;
+        BLOB                ServiceSpecificInfo;
+} SERVICE_INFOA, *PSERVICE_INFOA, *LPSERVICE_INFOA;
+
+typedef struct _SERVICE_INFOW
+{
+        LPGUID              lpServiceType;
+        LPWSTR              lpServiceName;
+        LPWSTR              lpComment;
+        LPWSTR              lpLocale;
+        DWORD               dwDisplayHint;
+        DWORD               dwVersion;
+        DWORD               dwTime;
+        LPSTR               lpMachineName;
+        LPSERVICE_ADDRESSES lpServiceAddress;
+        BLOB                ServiceSpecificInfo; /* May point to SERVICE_TYPE_INFO_ABS */
+} SERVICE_INFOW, *PSERVICE_INFOW, *LPSERVICE_INFOW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_INFO)
+DECL_WINELIB_TYPE_AW(PSERVICE_INFO)
+DECL_WINELIB_TYPE_AW(LPSERVICE_INFO)
+
+typedef struct _SERVICE_TYPE_VALUE_ABSA
+{
+        DWORD   dwNameSpace; /* Name space or set of name spaces */
+        DWORD   dwValueType; /* Type of the value data */
+        DWORD   dwValueSize; /* Size of the value data */
+        LPSTR   lpValueName; /* Name of the value */
+        PVOID   lpValue;     /* Pointer to the value data */
+} SERVICE_TYPE_VALUE_ABSA, *PSERVICE_TYPE_VALUE_ABSA, *LPSERVICE_TYPE_VALUE_ABSA;
+
+typedef struct _SERVICE_TYPE_VALUE_ABSW
+{
+        DWORD   dwNameSpace; /* Name space or set of name spaces */
+        DWORD   dwValueType; /* Type of the value data */
+        DWORD   dwValueSize; /* Size of the value data */
+        LPWSTR  lpValueName; /* Name of the value */
+        PVOID   lpValue;     /* Pointer to the value data */
+} SERVICE_TYPE_VALUE_ABSW, *PSERVICE_TYPE_VALUE_ABSW, *LPSERVICE_TYPE_VALUE_ABSW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_TYPE_VALUE_ABS)
+DECL_WINELIB_TYPE_AW(PSERVICE_TYPE_VALUE_ABS)
+DECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_VALUE_ABS)
+
+typedef struct _SERVICE_TYPE_INFO_ABSA
+{
+        LPSTR                   lpTypeName;     /* Name of the network service type */
+        DWORD                   dwValueCount;   /* Number of SERVICE_TYPE_VALUE_ABS structures */
+        SERVICE_TYPE_VALUE_ABSA Values[1];      /* Array of SERVICE_TYPE_VALUE_ABS structures */
+} SERVICE_TYPE_INFO_ABSA, *PSERVICE_TYPE_INFO_ABSA, *LPSERVICE_TYPE_INFO_ABSA;
+
+typedef struct _SERVICE_TYPE_INFO_ABSW
+{
+        LPWSTR                  lpTypeName;     /* Name of the network service type */
+        DWORD                   dwValueCount;   /* Number of SERVICE_TYPE_VALUE_ABS structures */
+        SERVICE_TYPE_VALUE_ABSW Values[1];      /* Array of SERVICE_TYPE_VALUE_ABS structures */
+} SERVICE_TYPE_INFO_ABSW, *PSERVICE_TYPE_INFO_ABSW, *LPSERVICE_TYPE_INFO_ABSW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_TYPE_INFO_ABS)
+DECL_WINELIB_TYPE_AW(PSERVICE_TYPE_INFO_ABS)
+DECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_INFO_ABS)
+
+typedef void (*LPSERVICE_CALLBACK_PROC)(LPARAM lParam, HANDLE hAsyncTaskHandle);
+
+typedef struct _SERVICE_ASYNC_INFO
+{
+    LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
+    LPARAM                  lParam;
+    HANDLE                  hAsyncTaskHandle;
+} SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, *LPSERVICE_ASYNC_INFO;
+
+/*
+ * function prototypes
+ */
+INT WINAPI GetAddressByNameA(DWORD dwNameSpace, LPGUID lpServiceType, LPSTR lpServiceName,
+    LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
+    LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPSTR lpAliasBuffer,
+    LPDWORD lpdwAliasBufferLength);
+INT WINAPI GetAddressByNameW(DWORD dwNameSpace, LPGUID lpServiceType, LPWSTR lpServiceName,
+    LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
+    LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPWSTR lpAliasBuffer,
+    LPDWORD lpdwAliasBufferLength);
+#define GetAddressByName WINELIB_NAME_AW(GetAddressByName)
+INT WINAPI GetTypeByNameA(LPSTR lpServiceName, LPGUID lpServiceType);
+INT WINAPI GetTypeByNameW(LPWSTR lpServiceName, LPGUID lpServiceType);
+#define GetTypeByName WINELIB_NAME_AW(GetTypeByName)
+INT WINAPI SetServiceA(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOA lpServiceInfo,
+                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags);
+INT WINAPI SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo,
+                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags);
+#define SetService WINELIB_NAME_AW(SetService)
+INT WINAPI GetServiceA(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName,
+                       DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize,
+                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
+INT WINAPI GetServiceW(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName,
+                       DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize,
+                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
+#define GetService WINELIB_NAME_AW(GetService)
+
+#ifdef __cplusplus
+}      /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* _WINE_NSPAPI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h
new file mode 100644
index 0000000..7c150de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h
@@ -0,0 +1,194 @@
+/*
+ * DDK information for CD ROM
+ *
+ * Copyright (C) 2002 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __NTDDCDRM_H
+#define __NTDDCDRM_H
+
+#define IOCTL_CDROM_BASE                FILE_DEVICE_CD_ROM
+#define IOCTL_CDROM_UNLOAD_DRIVER       CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_READ_TOC            CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_GET_CONTROL         CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_PLAY_AUDIO_MSF      CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_SEEK_AUDIO_MSF      CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_STOP_AUDIO          CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_PAUSE_AUDIO         CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RESUME_AUDIO        CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_GET_VOLUME          CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_SET_VOLUME          CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_READ_Q_CHANNEL      CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_GET_LAST_SESSION    CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RAW_READ            CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT,  FILE_READ_ACCESS)
+#define IOCTL_CDROM_DISK_TYPE           CTL_CODE(IOCTL_CDROM_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_CDROM_GET_DRIVE_GEOMETRY  CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_CHECK_VERIFY        CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_MEDIA_REMOVAL       CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_EJECT_MEDIA         CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_LOAD_MEDIA          CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RESERVE             CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RELEASE             CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_FIND_NEW_DEVICES    CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#include <ntddstor.h>
+
+#define MAXIMUM_NUMBER_TRACKS 100
+#define MAXIMUM_CDROM_SIZE 804
+
+typedef struct _TRACK_DATA {
+    UCHAR               Reserved;
+    UCHAR               Control : 4;
+    UCHAR               Adr : 4;
+    UCHAR               TrackNumber;
+    UCHAR               Reserved1;
+    UCHAR               Address[4];
+} TRACK_DATA, *PTRACK_DATA;
+
+typedef struct _CDROM_TOC {
+    UCHAR               Length[2];
+    UCHAR               FirstTrack;
+    UCHAR               LastTrack;
+    TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];
+} CDROM_TOC, *PCDROM_TOC;
+
+#define CDROM_TOC_SIZE sizeof(CDROM_TOC)
+
+typedef struct _CDROM_PLAY_AUDIO_MSF {
+    UCHAR               StartingM;
+    UCHAR               StartingS;
+    UCHAR               StartingF;
+    UCHAR               EndingM;
+    UCHAR               EndingS;
+    UCHAR               EndingF;
+} CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;
+
+typedef struct _CDROM_SEEK_AUDIO_MSF {
+    UCHAR               M;
+    UCHAR               S;
+    UCHAR               F;
+} CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;
+
+typedef struct _CDROM_DISK_DATA {
+    ULONG               DiskData;
+} CDROM_DISK_DATA, *PCDROM_DISK_DATA;
+
+#define CDROM_DISK_AUDIO_TRACK      (0x00000001)
+#define CDROM_DISK_DATA_TRACK       (0x00000002)
+
+#define IOCTL_CDROM_SUB_Q_CHANNEL    0x00
+#define IOCTL_CDROM_CURRENT_POSITION 0x01
+#define IOCTL_CDROM_MEDIA_CATALOG    0x02
+#define IOCTL_CDROM_TRACK_ISRC       0x03
+
+typedef struct _CDROM_SUB_Q_DATA_FORMAT {
+    UCHAR               Format;
+    UCHAR               Track;
+} CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;
+
+typedef struct _SUB_Q_HEADER {
+    UCHAR               Reserved;
+    UCHAR               AudioStatus;
+    UCHAR               DataLength[2];
+} SUB_Q_HEADER, *PSUB_Q_HEADER;
+
+typedef struct _SUB_Q_CURRENT_POSITION {
+    SUB_Q_HEADER        Header;
+    UCHAR               FormatCode;
+    UCHAR               Control : 4;
+    UCHAR               ADR : 4;
+    UCHAR               TrackNumber;
+    UCHAR               IndexNumber;
+    UCHAR               AbsoluteAddress[4];
+    UCHAR               TrackRelativeAddress[4];
+} SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
+
+typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
+    SUB_Q_HEADER        Header;
+    UCHAR               FormatCode;
+    UCHAR               Reserved[3];
+    UCHAR               Reserved1 : 7;
+    UCHAR               Mcval : 1;
+    UCHAR               MediaCatalog[15];
+} SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
+
+typedef struct _SUB_Q_TRACK_ISRC {
+    SUB_Q_HEADER        Header;
+    UCHAR               FormatCode;
+    UCHAR               Reserved0;
+    UCHAR               Track;
+    UCHAR               Reserved1;
+    UCHAR               Reserved2 : 7;
+    UCHAR               Tcval : 1;
+    UCHAR               TrackIsrc[15];
+} SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
+
+typedef union _SUB_Q_CHANNEL_DATA {
+    SUB_Q_CURRENT_POSITION      CurrentPosition;
+    SUB_Q_MEDIA_CATALOG_NUMBER  MediaCatalog;
+    SUB_Q_TRACK_ISRC            TrackIsrc;
+} SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;
+
+#define AUDIO_STATUS_NOT_SUPPORTED      0x00
+#define AUDIO_STATUS_IN_PROGRESS        0x11
+#define AUDIO_STATUS_PAUSED             0x12
+#define AUDIO_STATUS_PLAY_COMPLETE      0x13
+#define AUDIO_STATUS_PLAY_ERROR         0x14
+#define AUDIO_STATUS_NO_STATUS          0x15
+
+#define ADR_NO_MODE_INFORMATION         0x0
+#define ADR_ENCODES_CURRENT_POSITION    0x1
+#define ADR_ENCODES_MEDIA_CATALOG       0x2
+#define ADR_ENCODES_ISRC                0x3
+
+#define AUDIO_WITH_PREEMPHASIS          0x0
+#define DIGITAL_COPY_PERMITTED          0x2
+#define AUDIO_DATA_TRACK                0x4
+#define TWO_FOUR_CHANNEL_AUDIO          0x8
+
+typedef struct _CDROM_AUDIO_CONTROL {
+    UCHAR               LbaFormat;
+    USHORT              LogicalBlocksPerSecond;
+} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
+
+typedef struct _VOLUME_CONTROL {
+    UCHAR               PortVolume[4];
+} VOLUME_CONTROL, *PVOLUME_CONTROL;
+
+typedef enum _TRACK_MODE_TYPE {
+    YellowMode2,
+    XAForm2,
+    CDDA
+} TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
+
+typedef struct __RAW_READ_INFO {
+    LARGE_INTEGER       DiskOffset;
+    ULONG               SectorCount;
+    TRACK_MODE_TYPE     TrackMode;
+} RAW_READ_INFO, *PRAW_READ_INFO;
+
+#endif /* __NTDDCDRM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h
new file mode 100644
index 0000000..57076c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2009 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDNDIS_
+#define _NTDDNDIS_
+
+#include <ifdef.h>
+#include <devpkey.h>
+/* #include <pciprop.h> */
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _NDIS_CONTROL_CODE(request, method) \
+    CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS)
+
+#define IOCTL_NDIS_QUERY_GLOBAL_STATS    _NDIS_CONTROL_CODE(0, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_QUERY_ALL_STATS       _NDIS_CONTROL_CODE(1, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_DO_PNP_OPERATION      _NDIS_CONTROL_CODE(2, METHOD_BUFFERED)
+#define IOCTL_NDIS_QUERY_SELECTED_STATS  _NDIS_CONTROL_CODE(3, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_ENUMERATE_INTERFACES  _NDIS_CONTROL_CODE(4, METHOD_BUFFERED)
+#define IOCTL_NDIS_ADD_TDI_DEVICE        _NDIS_CONTROL_CODE(5, METHOD_BUFFERED)
+#define IOCTL_NDIS_GET_LOG_DATA          _NDIS_CONTROL_CODE(7, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_GET_VERSION           _NDIS_CONTROL_CODE(8, METHOD_BUFFERED)
+
+#define IOCTL_NDIS_RESERVED1   _NDIS_CONTROL_CODE(0x09, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED2   _NDIS_CONTROL_CODE(0x0a, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED3   _NDIS_CONTROL_CODE(0x0b, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED4   _NDIS_CONTROL_CODE(0x0c, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED5   CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0d, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_NDIS_RESERVED6   CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0e, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+#define IOCTL_NDIS_RESERVED7   _NDIS_CONTROL_CODE(0x0f, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_RESERVED8   _NDIS_CONTROL_CODE(0x10, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED9   _NDIS_CONTROL_CODE(0x11, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED10  _NDIS_CONTROL_CODE(0x12, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED11  _NDIS_CONTROL_CODE(0x13, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED12  _NDIS_CONTROL_CODE(0x14, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED13  _NDIS_CONTROL_CODE(0x15, METHOD_BUFFERED)
+
+
+#define OID_802_11_BSSID                    0x0d010101
+#define OID_802_11_SSID                     0x0d010102
+#define OID_802_11_NETWORK_TYPES_SUPPORTED  0x0d010203
+#define OID_802_11_NETWORK_TYPE_IN_USE      0x0d010204
+#define OID_802_11_TX_POWER_LEVEL           0x0d010205
+#define OID_802_11_RSSI                     0x0d010206
+#define OID_802_11_RSSI_TRIGGER             0x0d010207
+#define OID_802_11_INFRASTRUCTURE_MODE      0x0d010108
+#define OID_802_11_FRAGMENTATION_THRESHOLD  0x0d010209
+#define OID_802_11_RTS_THRESHOLD            0x0d01020a
+#define OID_802_11_NUMBER_OF_ANTENNAS       0x0d01020b
+#define OID_802_11_RX_ANTENNA_SELECTED      0x0d01020c
+#define OID_802_11_TX_ANTENNA_SELECTED      0x0d01020d
+#define OID_802_11_SUPPORTED_RATES          0x0d01020e
+#define OID_802_11_DESIRED_RATES            0x0d010210
+#define OID_802_11_CONFIGURATION            0x0d010211
+#define OID_802_11_STATISTICS               0x0d020212
+#define OID_802_11_ADD_WEP                  0x0d010113
+#define OID_802_11_REMOVE_WEP               0x0d010114
+#define OID_802_11_DISASSOCIATE             0x0d010115
+#define OID_802_11_POWER_MODE               0x0d010216
+#define OID_802_11_BSSID_LIST               0x0d010217
+#define OID_802_11_AUTHENTICATION_MODE      0x0d010118
+#define OID_802_11_PRIVACY_FILTER           0x0d010119
+#define OID_802_11_BSSID_LIST_SCAN          0x0d01011a
+#define OID_802_11_WEP_STATUS               0x0d01011b
+#define OID_802_11_ENCRYPTION_STATUS        OID_802_11_WEP_STATUS
+#define OID_802_11_RELOAD_DEFAULTS          0x0d01011c
+#define OID_802_11_ADD_KEY                  0x0d01011d
+#define OID_802_11_REMOVE_KEY               0x0d01011e
+#define OID_802_11_ASSOCIATION_INFORMATION  0x0d01011f
+#define OID_802_11_TEST                     0x0d010120
+#define OID_802_11_MEDIA_STREAM_MODE        0x0d010121
+#define OID_802_11_CAPABILITY               0x0d010122
+#define OID_802_11_PMKID                    0x0d010123
+#define OID_802_11_NON_BCAST_SSID_LIST      0x0d010124
+#define OID_802_11_RADIO_STATUS             0x0d010125
+
+#define NDIS_802_11_LENGTH_SSID      32
+#define NDIS_802_11_LENGTH_RATES     8
+#define NDIS_802_11_LENGTH_RATES_EX  16
+
+typedef LONG NDIS_802_11_RSSI;
+
+typedef struct _NDIS_802_11_CONFIGURATION_FH {
+    ULONG Length;
+    ULONG HopPattern;
+    ULONG HopSet;
+    ULONG DwellTime;
+} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
+
+typedef struct _NDIS_802_11_CONFIGURATION {
+    ULONG Length;
+    ULONG BeaconPeriod;
+    ULONG ATIMWindow;
+    ULONG DSConfig;
+    NDIS_802_11_CONFIGURATION_FH FHConfig;
+} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
+
+typedef UCHAR NDIS_802_11_MAC_ADDRESS[6];
+
+typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE {
+    Ndis802_11IBSS,
+    Ndis802_11Infrastructure,
+    Ndis802_11AutoUnknown,
+    Ndis802_11InfrastructureMax
+} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
+
+typedef enum _NDIS_802_11_NETWORK_TYPE {
+    Ndis802_11FH,
+    Ndis802_11DS,
+    Ndis802_11OFDM5,
+    Ndis802_11OFDM24,
+    Ndis802_11Automode,
+    Ndis802_11NetworkTypeMax
+} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
+
+typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];
+typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];
+
+typedef struct _NDIS_802_11_SSID {
+    ULONG SsidLength;
+    UCHAR Ssid[NDIS_802_11_LENGTH_SSID];
+} NDIS_802_11_SSID, *PNDIS_802_11_SSID;
+
+typedef struct _NDIS_WLAN_BSSID {
+    ULONG                               Length;
+    NDIS_802_11_MAC_ADDRESS             MacAddress;
+    UCHAR                               Reserved[2];
+    NDIS_802_11_SSID                    Ssid;
+    ULONG                               Privacy;
+    NDIS_802_11_RSSI                    Rssi;
+    NDIS_802_11_NETWORK_TYPE            NetworkTypeInUse;
+    NDIS_802_11_CONFIGURATION           Configuration;
+    NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
+    NDIS_802_11_RATES                   SupportedRates;
+} NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;
+
+typedef struct _NDIS_802_11_BSSID_LIST {
+    ULONG NumberOfItems;
+    NDIS_WLAN_BSSID Bssid[1];
+} NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;
+
+#ifndef _NDIS_
+typedef int NDIS_STATUS, *PNDIS_STATUS;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDNDIS_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h
new file mode 100644
index 0000000..f8d1e39
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h
@@ -0,0 +1,133 @@
+/*
+ * Definitions for scsi media access
+ *
+ * Copyright (C) 2002 Laurent Pinchart
+ * Copyright 2005 Ivan Leo Puoti
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDSCSI_H_
+#define _NTDDSCSI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
+
+#define IOCTL_SCSI_PASS_THROUGH         CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SCSI_MINIPORT             CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SCSI_GET_INQUIRY_DATA     CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_GET_CAPABILITIES     CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_PASS_THROUGH_DIRECT  CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SCSI_GET_ADDRESS          CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_RESCAN_BUS           CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_GET_DUMP_POINTERS    CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_FREE_DUMP_POINTERS   CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_IDE_PASS_THROUGH          CTL_CODE(IOCTL_SCSI_BASE, 0x040a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_ATA_PASS_THROUGH          CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_ATA_PASS_THROUGH_DIRECT   CTL_CODE(IOCTL_SCSI_BASE, 0x040c, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define SCSI_IOCTL_DATA_OUT             0
+#define SCSI_IOCTL_DATA_IN              1
+#define SCSI_IOCTL_DATA_UNSPECIFIED     2
+
+typedef struct _SCSI_PASS_THROUGH {
+    USHORT       Length;
+    UCHAR        ScsiStatus;
+    UCHAR        PathId;
+    UCHAR        TargetId;
+    UCHAR        Lun;
+    UCHAR        CdbLength;
+    UCHAR        SenseInfoLength;
+    UCHAR        DataIn;
+    ULONG        DataTransferLength;
+    ULONG        TimeOutValue;
+    ULONG_PTR    DataBufferOffset;
+    ULONG        SenseInfoOffset;
+    UCHAR        Cdb[16];
+} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
+
+typedef struct _SCSI_PASS_THROUGH_DIRECT {
+    USHORT       Length;
+    UCHAR        ScsiStatus;
+    UCHAR        PathId;
+    UCHAR        TargetId;
+    UCHAR        Lun;
+    UCHAR        CdbLength;
+    UCHAR        SenseInfoLength;
+    UCHAR        DataIn;
+    ULONG        DataTransferLength;
+    ULONG        TimeOutValue;
+    PVOID        DataBuffer;
+    ULONG        SenseInfoOffset;
+    UCHAR        Cdb[16];
+} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
+
+typedef struct _SCSI_ADDRESS {
+    ULONG        Length;
+    UCHAR        PortNumber;
+    UCHAR        PathId;
+    UCHAR        TargetId;
+    UCHAR        Lun;
+} SCSI_ADDRESS, *PSCSI_ADDRESS;
+
+typedef struct _IO_SCSI_CAPABILITIES {
+    ULONG       Length;
+    ULONG       MaximumTransferLength;
+    ULONG       MaximumPhysicalPages;
+    ULONG       SupportedAsynchronousEvents;
+    ULONG       AlignmentMask;
+    BOOLEAN     TaggedQueuing;
+    BOOLEAN     AdapterScansDown;
+    BOOLEAN     AdapterUsesPio;
+} IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
+
+typedef struct _SCSI_BUS_DATA {
+    UCHAR NumberOfLogicalUnits;
+    UCHAR InitiatorBusId;
+    ULONG InquiryDataOffset;
+} SCSI_BUS_DATA, *PSCSI_BUS_DATA;
+
+typedef struct _SCSI_ADAPTER_BUS_INFO {
+    UCHAR NumberOfBuses;
+    SCSI_BUS_DATA BusData[1];
+} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
+
+typedef struct _SCSI_INQUIRY_DATA {
+    UCHAR PathId;
+    UCHAR TargetId;
+    UCHAR Lun;
+    BOOLEAN DeviceClaimed;
+    ULONG InquiryDataLength;
+    ULONG NextInquiryDataOffset;
+    UCHAR InquiryData[1];
+} SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDSCSI_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h
new file mode 100644
index 0000000..f427063
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h
@@ -0,0 +1,288 @@
+/*
+ * DDK definitions for storage media access
+ *
+ * Copyright (C) 2002 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDSTOR_H_
+#define _NTDDSTOR_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
+
+#define IOCTL_STORAGE_CHECK_VERIFY      CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_CHECK_VERIFY2     CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MEDIA_REMOVAL     CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECT_MEDIA       CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA        CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA2       CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RESERVE           CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RELEASE           CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_FIND_NEW_DEVICES  CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECTION_CONTROL  CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MCN_CONTROL       CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES   CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_HOTPLUG_INFO  CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_SET_HOTPLUG_INFO  CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_RESET_BUS         CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RESET_DEVICE      CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_PREDICT_FAILURE   CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_QUERY_PROPERTY    CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+DEFINE_GUID(DiskClassGuid,
+  0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(CdRomClassGuid,
+  0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(PartitionClassGuid,
+  0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(TapeClassGuid,
+  0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(WriteOnceDiskClassGuid,
+  0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(VolumeClassGuid,
+  0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(MediumChangerClassGuid,
+  0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(FloppyClassGuid,
+  0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(CdChangerClassGuid,
+  0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(StroagePortClassGuid,
+  0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+typedef struct _STORAGE_DEVICE_NUMBER {
+    DEVICE_TYPE         DeviceType;
+    ULONG               DeviceNumber;
+    ULONG               PartitionNumber;
+} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
+
+typedef struct _STORAGE_BUS_RESET_REQUEST {
+    UCHAR               PathId;
+} STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
+
+typedef struct _PREVENT_MEDIA_REMOVAL {
+    BOOLEAN             PreventMediaRemoval;
+} PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;
+
+typedef struct _TAPE_STATISTICS {
+    ULONG               Version;
+    ULONG               Flags;
+    LARGE_INTEGER       RecoveredWrites;
+    LARGE_INTEGER       UnrecoveredWrites;
+    LARGE_INTEGER       RecoveredReads;
+    LARGE_INTEGER       UnrecoveredReads;
+    UCHAR               CompressionRatioReads;
+    UCHAR               CompressionRatioWrites;
+} TAPE_STATISTICS, *PTAPE_STATISTICS;
+
+#define RECOVERED_WRITES_VALID          0x00000001
+#define UNRECOVERED_WRITES_VALID        0x00000002
+#define RECOVERED_READS_VALID           0x00000004
+#define UNRECOVERED_READS_VALID         0x00000008
+#define WRITE_COMPRESSION_INFO_VALID    0x00000010
+#define READ_COMPRESSION_INFO_VALID     0x00000020
+
+typedef struct _TAPE_GET_STATISTICS {
+    ULONG               Operation;
+} TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS;
+
+#define TAPE_RETURN_STATISTICS          __MSABI_LONG(0)
+#define TAPE_RETURN_ENV_INFO            __MSABI_LONG(1)
+#define TAPE_RESET_STATISTICS           __MSABI_LONG(2)
+
+typedef enum _STORAGE_MEDIA_TYPE {
+    /* see also defines in ntdddisk.h */
+
+    DDS_4mm = 0x20,
+    MiniQic,
+    Travan,
+    QIC,
+    MP_8mm,
+    AME_8mm,
+    AIT1_8mm,
+    DLT,
+    NCTP,
+    IBM_3480,
+    IBM_3490E,
+    IBM_Magstar_3590,
+    IBM_Magstar_MP,
+    STK_DATA_D3,
+    SONY_DTF,
+    DV_6mm,
+    DMI,
+    SONY_D2,
+    CLEANER_CARTRIDGE,
+    CD_ROM,
+    CD_R,
+    CD_RW,
+    DVD_ROM,
+    DVD_R,
+    DVD_RW,
+    MO_3_RW,
+    MO_5_WO,
+    MO_5_RW,
+    MO_5_LIMDOW,
+    PC_5_WO,
+    PC_5_RW,
+    PD_5_RW,
+    ABL_5_WO,
+    PINNACLE_APEX_5_RW,
+    SONY_12_WO,
+    PHILIPS_12_WO,
+    HITACHI_12_WO,
+    CYGNET_12_WO,
+    KODAK_14_WO,
+    MO_NFR_525,
+    NIKON_12_RW,
+    IOMEGA_ZIP,
+    IOMEGA_JAZ,
+    SYQUEST_EZ135,
+    SYQUEST_EZFLYER,
+    SYQUEST_SYJET,
+    AVATAR_F2,
+    MP2_8mm
+} STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
+
+#define MEDIA_ERASEABLE         0x00000001
+#define MEDIA_WRITE_ONCE        0x00000002
+#define MEDIA_READ_ONLY         0x00000004
+#define MEDIA_READ_WRITE        0x00000008
+#define MEDIA_WRITE_PROTECTED   0x00000100
+#define MEDIA_CURRENTLY_MOUNTED 0x80000000
+
+typedef struct _DEVICE_MEDIA_INFO {
+    union {
+        struct {
+            LARGE_INTEGER       Cylinders;
+            STORAGE_MEDIA_TYPE  MediaType;
+            ULONG               TracksPerCylinder;
+            ULONG               SectorsPerTrack;
+            ULONG               BytesPerSector;
+            ULONG               NumberMediaSides;
+            ULONG               MediaCharacteristics;
+        } DiskInfo;
+        struct {
+            LARGE_INTEGER       Cylinders;
+            STORAGE_MEDIA_TYPE  MediaType;
+            ULONG               TracksPerCylinder;
+            ULONG               SectorsPerTrack;
+            ULONG               BytesPerSector;
+            ULONG               NumberMediaSides;
+            ULONG               MediaCharacteristics;
+        } RemovableDiskInfo;
+        struct {
+            STORAGE_MEDIA_TYPE  MediaType;
+            ULONG               MediaCharacteristics;
+            ULONG               CurrentBlockSize;
+        } TapeInfo;
+    } DeviceSpecific;
+} DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
+
+typedef struct _GET_MEDIA_TYPES {
+    ULONG               DeviceType;
+    ULONG               MediaInfoCount;
+    DEVICE_MEDIA_INFO   MediaInfo[1];
+} GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
+
+typedef enum _STORAGE_QUERY_TYPE {
+    PropertyStandardQuery = 0,
+    PropertyExistsQuery,
+    PropertyMaskQuery,
+    PropertyQueryMaxDefined
+} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
+
+typedef enum _STORAGE_PROPERTY_ID {
+    StorageDeviceProperty = 0,
+    StorageAdapterProperty
+} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
+
+typedef struct _STORAGE_PROPERTY_QUERY {
+    STORAGE_PROPERTY_ID         PropertyId;
+    STORAGE_QUERY_TYPE          QueryType;
+    UCHAR                       AdditionalParameters[1];
+} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
+
+typedef struct _STORAGE_DESCRIPTOR_HEADER {
+    ULONG                       Version;
+    ULONG                       Size;
+} STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
+
+typedef enum _STORAGE_BUS_TYPE {
+    BusTypeUnknown = 0x00,
+    BusTypeScsi,
+    BusTypeAtapi,
+    BusTypeAta,
+    BusType1394,
+    BusTypeSsa,
+    BusTypeFibre,
+    BusTypeUsb,
+    BusTypeRAID,
+    BusTypeMaxReserved = 0x7F
+} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
+
+typedef struct _STORAGE_DEVICE_DESCRIPTOR {
+    ULONG                       Version;
+    ULONG                       Size;
+    UCHAR                       DeviceType;
+    UCHAR                       DeviceTypeModifier;
+    BOOLEAN                     RemovableMedia;
+    BOOLEAN                     CommandQueueing;
+    ULONG                       VendorIdOffset;
+    ULONG                       ProductIdOffset;
+    ULONG                       ProductRevisionOffset;
+    ULONG                       SerialNumberOffset;
+    STORAGE_BUS_TYPE            BusType;
+    ULONG                       RawPropertiesLength;
+    UCHAR                       RawDeviceProperties[1];
+} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
+
+typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
+    ULONG                       Version;
+    ULONG                       Size;
+    ULONG                       MaximumTransferLength;
+    ULONG                       MaximumPhysicalPages;
+    ULONG                       AlignmentMask;
+    BOOLEAN                     AdapterUsesPio;
+    BOOLEAN                     AdapterScansDown;
+    BOOLEAN                     CommandQueueing;
+    BOOLEAN                     AcceleratedTransfer;
+    BOOLEAN                     BusType;
+    USHORT                      BusMajorVersion;
+    USHORT                      BusMinorVersion;
+} STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDSTOR_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h
new file mode 100644
index 0000000..02de217
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2006 Dmitry Timoshkov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTDSAPI_H
+#define __WINE_NTDSAPI_H
+
+/* FIXME: #include <schedule.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI DsMakeSpnA(LPCSTR, LPCSTR, LPCSTR, USHORT, LPCSTR, DWORD*, LPSTR);
+DWORD WINAPI DsMakeSpnW(LPCWSTR, LPCWSTR, LPCWSTR, USHORT, LPCWSTR, DWORD*, LPWSTR);
+#define DsMakeSpn WINELIB_NAME_AW(DsMakeSpn)
+
+typedef enum
+{
+    DS_SPN_DNS_HOST    = 0,
+    DS_SPN_DN_HOST     = 1,
+    DS_SPN_NB_HOST     = 2,
+    DS_SPN_DOMAIN      = 3,
+    DS_SPN_NB_DOMAIN   = 4,
+    DS_SPN_SERVICE     = 5
+} DS_SPN_NAME_TYPE;
+
+typedef enum
+{
+    DS_SPN_ADD_SPN_OP     = 0,
+    DS_SPN_REPLACE_SPN_OP = 1,
+    DS_SPN_DELETE_SPN_OP  = 2
+} DS_SPN_WRITE_OP;
+
+DWORD WINAPI DsServerRegisterSpnA(DS_SPN_WRITE_OP operation, LPCSTR ServiceClass, LPCSTR UserObjectDN);
+DWORD WINAPI DsServerRegisterSpnW(DS_SPN_WRITE_OP operation, LPCWSTR ServiceClass, LPCWSTR UserObjectDN);
+#define DsServerRegisterSpn WINELIB_NAME_AW(DsServerRegisterSpn)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_NTDSAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h
new file mode 100644
index 0000000..a459085
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTQUERY_H__
+#define __WINE_NTQUERY_H__
+
+/* FIXME: #include <stgprop.h> */
+
+#include <pshpack4.h>
+
+typedef struct _CI_STATE
+{
+    DWORD cbStruct;
+    DWORD cWordList;
+    DWORD cPersistentIndex;
+    DWORD cQueries;
+    DWORD cDocuments;
+    DWORD cFreshTest;
+    DWORD dwMergeProgress;
+    DWORD eState;
+    DWORD cFilteredDocuments;
+    DWORD cTotalDocuments;
+    DWORD cPendingScans;
+    DWORD dwIndexSize;
+    DWORD cUniqueKeys;
+    DWORD cSeqQDocuments;
+    DWORD dwPropCacheSize;
+} CI_STATE;
+
+#include <poppack.h>
+
+#define PSGUID_STORAGE {0xb725f130, 0x47ef, 0x101a, {0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac}}
+#define PID_STG_DIRECTORY      ((PROPID)0x02)
+#define PID_STG_CLASSID        ((PROPID)0x03)
+#define PID_STG_STORAGETYPE    ((PROPID)0x04)
+#define PID_STG_VOLUME_ID      ((PROPID)0x05)
+#define PID_STG_PARENT_WORKID  ((PROPID)0x06)
+#define PID_STG_SECONDARYSTORE ((PROPID)0x07)
+#define PID_STG_FILEINDEX      ((PROPID)0x08)
+#define PID_STG_LASTCHANGEUSN  ((PROPID)0x09)
+#define PID_STG_NAME           ((PROPID)0x0a)
+#define PID_STG_PATH           ((PROPID)0x0b)
+#define PID_STG_SIZE           ((PROPID)0x0c)
+#define PID_STG_ATTRIBUTES     ((PROPID)0x0d)
+#define PID_STG_WRITETIME      ((PROPID)0x0e)
+#define PID_STG_CREATETIME     ((PROPID)0x0f)
+#define PID_STG_ACCESSTIME     ((PROPID)0x10)
+#define PID_STG_CHANGETIME     ((PROPID)0x11)
+#define PID_STG_CONTENTS       ((PROPID)0x13)
+#define PID_STG_SHORTNAME      ((PROPID)0x14)
+#define PID_STG_MAX            PID_STG_SHORTNAME
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+STDAPI CIState(WCHAR const *, WCHAR const *, CI_STATE *);
+STDAPI LocateCatalogsA(CHAR const *, ULONG, CHAR *, ULONG *, CHAR *, ULONG *);
+STDAPI LocateCatalogsW(WCHAR const *, ULONG, WCHAR *, ULONG *, WCHAR *, ULONG *);
+#define LocateCatalogs WINELIB_NAME_AW(LocateCatalogs)
+STDAPI LoadIFilter(WCHAR const *, IUnknown *, void **);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h
new file mode 100644
index 0000000..03b4e97
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTSECAPI_H
+#define __WINE_NTSECAPI_H
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/* Policy access rights */
+#define POLICY_VIEW_LOCAL_INFORMATION           __MSABI_LONG(0x00000001)
+#define POLICY_VIEW_AUDIT_INFORMATION           __MSABI_LONG(0x00000002)
+#define POLICY_GET_PRIVATE_INFORMATION          __MSABI_LONG(0x00000004)
+#define POLICY_TRUST_ADMIN                      __MSABI_LONG(0x00000008)
+#define POLICY_CREATE_ACCOUNT                   __MSABI_LONG(0x00000010)
+#define POLICY_CREATE_SECRET                    __MSABI_LONG(0x00000020)
+#define POLICY_CREATE_PRIVILEGE                 __MSABI_LONG(0x00000040)
+#define POLICY_SET_DEFAULT_QUOTA_LIMITS         __MSABI_LONG(0x00000080)
+#define POLICY_SET_AUDIT_REQUIREMENTS           __MSABI_LONG(0x00000100)
+#define POLICY_AUDIT_LOG_ADMIN                  __MSABI_LONG(0x00000200)
+#define POLICY_SERVER_ADMIN                     __MSABI_LONG(0x00000400)
+#define POLICY_LOOKUP_NAMES                     __MSABI_LONG(0x00000800)
+#define POLICY_NOTIFICATION                     __MSABI_LONG(0x00001000)
+
+#define POLICY_ALL_ACCESS                       ( \
+    STANDARD_RIGHTS_REQUIRED | \
+    POLICY_VIEW_LOCAL_INFORMATION | \
+    POLICY_VIEW_AUDIT_INFORMATION | \
+    POLICY_GET_PRIVATE_INFORMATION | \
+    POLICY_TRUST_ADMIN | \
+    POLICY_CREATE_ACCOUNT | \
+    POLICY_CREATE_SECRET | \
+    POLICY_CREATE_PRIVILEGE | \
+    POLICY_SET_DEFAULT_QUOTA_LIMITS | \
+    POLICY_SET_AUDIT_REQUIREMENTS | \
+    POLICY_AUDIT_LOG_ADMIN | \
+    POLICY_SERVER_ADMIN | \
+    POLICY_LOOKUP_NAMES)
+
+
+#define POLICY_READ                             ( \
+    STANDARD_RIGHTS_READ | \
+    POLICY_VIEW_AUDIT_INFORMATION | \
+    POLICY_GET_PRIVATE_INFORMATION)
+
+#define POLICY_WRITE                            ( \
+   STANDARD_RIGHTS_WRITE | \
+   POLICY_TRUST_ADMIN | \
+   POLICY_CREATE_ACCOUNT | \
+   POLICY_CREATE_SECRET | \
+   POLICY_CREATE_PRIVILEGE | \
+   POLICY_SET_DEFAULT_QUOTA_LIMITS | \
+   POLICY_SET_AUDIT_REQUIREMENTS | \
+   POLICY_AUDIT_LOG_ADMIN | \
+   POLICY_SERVER_ADMIN)
+
+#define POLICY_EXECUTE                          ( \
+   STANDARD_RIGHTS_EXECUTE | \
+   POLICY_VIEW_LOCAL_INFORMATION | \
+   POLICY_LOOKUP_NAMES)
+
+#define POLICY_AUDIT_EVENT_UNCHANGED __MSABI_LONG(0x00000000)
+#define POLICY_AUDIT_EVENT_SUCCESS   __MSABI_LONG(0x00000001)
+#define POLICY_AUDIT_EVENT_FAILURE   __MSABI_LONG(0x00000002)
+#define POLICY_AUDIT_EVENT_NONE      __MSABI_LONG(0x00000004)
+
+#define POLICY_AUDIT_EVENT_MASK (POLICY_AUDIT_EVENT_SUCCESS | \
+                                 POLICY_AUDIT_EVENT_FAILURE | \
+                                 POLICY_AUDIT_EVENT_NONE)
+
+/* logon rights names */
+#define SE_BATCH_LOGON_NAME \
+ TEXT("SeBatchLogonRight")
+#define SE_INTERACTIVE_LOGON_NAME \
+ TEXT("SeInteractiveLogonRight")
+#define SE_NETWORK_LOGON_NAME \
+ TEXT("SeNetworkLogonRight")
+#define SE_REMOTE_INTERACTIVE_LOGON_NAME \
+ TEXT("SeRemoteInteractiveLogonRight")
+#define SE_SERVICE_LOGON_NAME \
+ TEXT("SeServiceLogonRight")
+#define SE_DENY_BATCH_LOGON_NAME \
+ TEXT("SeDenyBatchLogonRight")
+#define SE_DENY_INTERACTIVE_LOGON_NAME \
+ TEXT("SeDenyInteractiveLogonRight")
+#define SE_DENY_NETWORK_LOGON_NAME \
+ TEXT("SeDenyNetworkLogonRight")
+#define SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME \
+ TEXT("SeDenyRemoteInteractiveLogonRight")
+#define SE_DENY_SERVICE_LOGON_NAME \
+ TEXT("SeDenyServiceLogonRight")
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+#ifndef WINE_PNTSTATUS_DECLARED
+#define WINE_PNTSTATUS_DECLARED
+typedef NTSTATUS *PNTSTATUS;
+#endif
+
+typedef enum _SECURITY_LOGON_TYPE
+{
+    Interactive = 2,
+    Network,
+    Batch,
+    Service,
+    Proxy
+} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
+
+typedef enum _POLICY_AUDIT_EVENT_TYPE
+{
+    AuditCategorySystem,
+    AuditCategoryLogon,
+    AuditCategoryObjectAccess,
+    AuditCategoryPrivilegeUse,
+    AuditCategoryDetailedTracking,
+    AuditCategoryPolicyChange,
+    AuditCategoryAccountManagement
+} POLICY_AUDIT_EVENT_TYPE, *PPOLICY_AUDIT_EVENT_TYPE;
+
+#ifndef __STRING_DEFINED__
+#define __STRING_DEFINED__
+typedef struct _STRING {
+  USHORT Length;
+  USHORT MaximumLength;
+  PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+
+#ifndef __UNICODE_STRING_DEFINED__
+#define __UNICODE_STRING_DEFINED__
+typedef struct _UNICODE_STRING {
+  USHORT Length;        /* bytes */
+  USHORT MaximumLength; /* bytes */
+  PWSTR  Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+#ifndef __OBJECT_ATTRIBUTES_DEFINED__
+#define __OBJECT_ATTRIBUTES_DEFINED__
+typedef struct _OBJECT_ATTRIBUTES {
+  ULONG Length;
+  HANDLE RootDirectory;
+  PUNICODE_STRING ObjectName;
+  ULONG Attributes;
+  PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */
+  PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
+
+typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
+typedef STRING LSA_STRING, *PLSA_STRING;
+typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
+
+typedef PVOID LSA_HANDLE, *PLSA_HANDLE;
+typedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE;
+typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
+
+typedef enum
+{
+	PolicyAuditLogInformation = 1,
+	PolicyAuditEventsInformation,
+	PolicyPrimaryDomainInformation,
+	PolicyPdAccountInformation,
+	PolicyAccountDomainInformation,
+	PolicyLsaServerRoleInformation,
+	PolicyReplicaSourceInformation,
+	PolicyDefaultQuotaInformation,
+	PolicyModificationInformation,
+	PolicyAuditFullSetInformation,
+	PolicyAuditFullQueryInformation,
+	PolicyDnsDomainInformation
+} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;
+
+typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS;
+
+typedef struct _POLICY_AUDIT_EVENTS_INFO
+{
+	BOOLEAN AuditingMode;
+	PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
+	ULONG MaximumAuditEventCount;
+} POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO;
+
+typedef struct _POLICY_PRIMARY_DOMAIN_INFO
+{
+    LSA_UNICODE_STRING Name;
+    PSID Sid;
+} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;
+
+typedef struct _POLICY_ACCOUNT_DOMAIN_INFO
+{
+    LSA_UNICODE_STRING DomainName;
+    PSID DomainSid;
+} POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO;
+
+typedef struct _POLICY_DNS_DOMAIN_INFO
+{
+    LSA_UNICODE_STRING Name;
+    LSA_UNICODE_STRING DnsDomainName;
+    LSA_UNICODE_STRING DnsForestName;
+    GUID DomainGuid;
+    PSID Sid;
+} POLICY_DNS_DOMAIN_INFO, *PPOLICY_DNS_DOMAIN_INFO;
+
+typedef enum _POLICY_LSA_SERVER_ROLE
+{
+    PolicyServerRoleBackup = 2,
+    PolicyServerRolePrimary
+} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE;
+
+typedef struct _POLICY_LSA_SERVER_ROLE_INFO
+{
+    POLICY_LSA_SERVER_ROLE LsaServerRole;
+} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO;
+
+typedef struct _POLICY_MODIFICATION_INFO
+{
+    LARGE_INTEGER ModifiedId;
+    LARGE_INTEGER DatabaseCreationTime;
+} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO;
+
+typedef struct _SECURITY_LOGON_SESSION_DATA {
+    ULONG Size;
+    LUID LogonId;
+    LSA_UNICODE_STRING UserName;
+    LSA_UNICODE_STRING LogonDomain;
+    LSA_UNICODE_STRING AuthenticationPackage;
+    ULONG LogonType;
+    ULONG Session;
+    PSID Sid;
+    LARGE_INTEGER LogonTime;
+    LSA_UNICODE_STRING LogonServer;
+    LSA_UNICODE_STRING DnsDomainName;
+    LSA_UNICODE_STRING Upn;
+} SECURITY_LOGON_SESSION_DATA, *PSECURITY_LOGON_SESSION_DATA;
+
+typedef struct
+{
+    SID_NAME_USE Use;
+    LSA_UNICODE_STRING Name;
+    LONG DomainIndex;
+} LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;
+
+typedef struct
+{
+    LSA_UNICODE_STRING Name;
+    PSID Sid;
+} LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;
+
+typedef struct
+{
+    ULONG Entries;
+    PLSA_TRUST_INFORMATION Domains;
+} LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;
+
+typedef struct _LSA_TRANSLATED_SID
+{
+    SID_NAME_USE Use;
+    ULONG RelativeId;
+    LONG DomainIndex;
+} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;
+
+typedef struct _TRUSTED_DOMAIN_INFORMATION_EX
+{
+    LSA_UNICODE_STRING Name;
+    LSA_UNICODE_STRING FlatName;
+    PSID Sid;
+    ULONG TrustDirection;
+    ULONG TrustType;
+    ULONG TrustAttributes;
+} TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX;
+
+typedef struct _LSA_AUTH_INFORMATION
+{
+    LARGE_INTEGER LastUpdateTime;
+    ULONG AuthType;
+    ULONG AuthInfoLength;
+    PUCHAR AuthInfo;
+} LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION;
+
+typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION
+{
+    ULONG IncomingAuthInfos;
+    PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
+    PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
+    ULONG OutgoingAuthInfos;
+    PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
+    PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
+} TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION;
+
+typedef struct _LSA_TRANSLATED_SID2
+{
+    SID_NAME_USE Use;
+    PSID Sid;
+    LONG DomainIndex;
+    ULONG Flags;
+} LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2;
+
+typedef enum _TRUSTED_INFORMATION_CLASS
+{
+    TrustedDomainNameInformation = 1,
+    TrustedControllersInformation,
+    TrustedPosixOffsetInformation,
+    TrustedPasswordInformation,
+    TrustedDomainInformationBasic,
+    TrustedDomainInformationEx,
+    TrustedDomainAuthInformation,
+    TrustedDomainFullInformation
+} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;
+
+typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS
+{
+    PolicyNotifyAuditEventsInformation = 1,
+    PolicyNotifyAccountDomainInformation,
+    PolicyNotifyServerRoleInformation,
+    PolicyNotifyDnsDomainInformation,
+    PolicyNotifyDomainEfsInformation,
+    PolicyNotifyDomainKerberosTicketInformation,
+    PolicyNotifyMachineAccountPasswordInformation
+} POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS;
+
+#define RtlGenRandom                    SystemFunction036
+#define RtlEncryptMemory                SystemFunction040
+#define RtlDecryptMemory                SystemFunction041
+
+BOOLEAN WINAPI RtlGenRandom(PVOID,ULONG);
+NTSTATUS WINAPI RtlEncryptMemory(PVOID,ULONG,ULONG);
+NTSTATUS WINAPI RtlDecryptMemory(PVOID,ULONG,ULONG);
+
+NTSTATUS WINAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);
+NTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,PULONG,PNTSTATUS);
+NTSTATUS WINAPI LsaClose(LSA_HANDLE);
+NTSTATUS WINAPI LsaConnectUntrusted(PHANDLE);
+NTSTATUS WINAPI LsaCreateTrustedDomainEx(LSA_HANDLE,PTRUSTED_DOMAIN_INFORMATION_EX,
+                                         PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);
+NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE);
+NTSTATUS WINAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
+NTSTATUS WINAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,PVOID*,PULONG);
+NTSTATUS WINAPI LsaEnumerateLogonSessions(PULONG,PLUID*);
+NTSTATUS WINAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);
+NTSTATUS WINAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);
+NTSTATUS WINAPI LsaFreeMemory(PVOID);
+NTSTATUS WINAPI LsaFreeReturnBuffer(PVOID);
+NTSTATUS WINAPI LsaGetLogonSessionData(PLUID,PSECURITY_LOGON_SESSION_DATA*);
+NTSTATUS WINAPI LsaLogonUser(HANDLE,PLSA_STRING,SECURITY_LOGON_TYPE,ULONG,PVOID,ULONG,PTOKEN_GROUPS,PTOKEN_SOURCE,PVOID*,PULONG,PLUID,PHANDLE,PQUOTA_LIMITS,PNTSTATUS);
+NTSTATUS WINAPI LsaLookupAuthenticationPackage(HANDLE,PLSA_STRING,PULONG);
+NTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
+                               PLSA_TRANSLATED_SID*);
+NTSTATUS WINAPI LsaLookupNames2(LSA_HANDLE,ULONG,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
+                                PLSA_TRANSLATED_SID2*);
+NTSTATUS WINAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID *,PLSA_REFERENCED_DOMAIN_LIST *,PLSA_TRANSLATED_NAME *);
+ULONG WINAPI LsaNtStatusToWinError(NTSTATUS);
+NTSTATUS WINAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaOpenTrustedDomainByName(LSA_HANDLE,PLSA_UNICODE_STRING,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaQueryTrustedDomainInfo(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaRegisterLogonProcess(PLSA_STRING,PHANDLE,PLSA_OPERATIONAL_MODE);
+NTSTATUS WINAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);
+NTSTATUS WINAPI LsaRemoveAccountRights(LSA_HANDLE,PSID,BOOLEAN,PLSA_UNICODE_STRING,ULONG);
+NTSTATUS WINAPI LsaRetrievePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING*);
+NTSTATUS WINAPI LsaSetInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaSetTrustedDomainInformation(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaStorePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING);
+NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* !defined(__WINE_NTSECAPI_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h
new file mode 100644
index 0000000..1fe6838
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h
@@ -0,0 +1,480 @@
+/*
+ * Copyright (C) 2007 Yuval Fledel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTSECPKG_H
+#define _NTSECPKG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Flags for the MachineState field in SECPKG_PARAMETERS */
+#define SECPKG_STATE_ENCRYPTION_PERMITTED               0x01
+#define SECPKG_STATE_STRONG_ENCRYPTION_PERMITTED        0x02
+#define SECPKG_STATE_DOMAIN_CONTROLLER                  0x04
+#define SECPKG_STATE_WORKSTATION                        0x08
+#define SECPKG_STATE_STANDALONE                         0x10
+
+/* Version magics as passed to or returned from Sp[Lsa,Mode]ModeInitialize */
+#define SECPKG_INTERFACE_VERSION                     0x10000
+#define SECPKG_INTERFACE_VERSION_2                   0x20000
+#define SECPKG_INTERFACE_VERSION_3                   0x40000
+#define SECPKG_INTERFACE_VERSION_4                   0x80000
+#define SECPKG_INTERFACE_VERSION_5                  0x100000
+#define SECPKG_INTERFACE_VERSION_6                  0x200000
+
+/* enum definitions for Secure Service Provider/Authentication Packages */
+typedef enum _LSA_TOKEN_INFORMATION_TYPE {
+    LsaTokenInformationNull,
+    LsaTokenInformationV1
+} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
+
+typedef enum _SECPKG_EXTENDED_INFORMATION_CLASS
+{
+    SecpkgGssInfo = 1,
+    SecpkgContextThunks,
+    SecpkgMutualAuthLevel,
+    SecpkgMaxInfo
+} SECPKG_EXTENDED_INFORMATION_CLASS;
+
+typedef enum _SECPKG_NAME_TYPE {
+    SecNameSamCompatible,
+    SecNameAlternateId,
+    SecNameFlat,
+    SecNameDN
+} SECPKG_NAME_TYPE;
+
+/* struct definitions for SSP/AP */
+typedef struct _SECPKG_PRIMARY_CRED {
+    LUID LogonId;
+    UNICODE_STRING DownlevelName;
+    UNICODE_STRING DomainName;
+    UNICODE_STRING Password;
+    UNICODE_STRING OldPassword;
+    PSID UserSid;
+    ULONG Flags;
+    UNICODE_STRING DnsDomainName;
+    UNICODE_STRING Upn;
+    UNICODE_STRING LogonServer;
+    UNICODE_STRING Spare1;
+    UNICODE_STRING Spare2;
+    UNICODE_STRING Spare3;
+    UNICODE_STRING Spare4;
+} SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED;
+
+typedef struct _SECPKG_SUPPLEMENTAL_CRED {
+    UNICODE_STRING PackageName;
+    ULONG CredentialSize;
+    PUCHAR Credentials;
+} SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;
+
+typedef struct _SECPKG_SUPPLEMENTAL_CRED_ARRAY {
+    ULONG CredentialCount;
+    SECPKG_SUPPLEMENTAL_CRED Credentials[1];
+} SECPKG_SUPPLEMENTAL_CRED_ARRAY, *PSECPKG_SUPPLEMENTAL_CRED_ARRAY;
+
+typedef struct _SECPKG_PARAMETERS {
+    ULONG Version;
+    ULONG MachineState;
+    ULONG SetupMode;
+    PSID DomainSid;
+    UNICODE_STRING DomainName;
+    UNICODE_STRING DnsDomainName;
+    GUID DomainGuid;
+} SECPKG_PARAMETERS, *PSECPKG_PARAMETERS,
+  SECPKG_EVENT_DOMAIN_CHANGE, *PSECPKG_EVENT_DOMAIN_CHANGE;
+
+typedef struct _SECPKG_CLIENT_INFO {
+    LUID LogonId;
+    ULONG ProcessID;
+    ULONG ThreadID;
+    BOOLEAN HasTcbPrivilege;
+    BOOLEAN Impersonating;
+    BOOLEAN Restricted;
+} SECPKG_CLIENT_INFO,
+ *PSECPKG_CLIENT_INFO;
+
+typedef struct _SECURITY_USER_DATA {
+    UNICODE_STRING UserName;
+    UNICODE_STRING LogonDomainName;
+    UNICODE_STRING LogonServer;
+    PSID pSid;
+} SECURITY_USER_DATA, *PSECURITY_USER_DATA,
+  SecurityUserData, *PSecurityUserData;
+
+typedef struct _SECPKG_GSS_INFO {
+    ULONG EncodedIdLength;
+    UCHAR EncodedId[4];
+} SECPKG_GSS_INFO, *PSECPKG_GSS_INFO;
+
+typedef struct _SECPKG_CONTEXT_THUNKS {
+    ULONG InfoLevelCount;
+    ULONG Levels[1];
+} SECPKG_CONTEXT_THUNKS, *PSECPKG_CONTEXT_THUNKS;
+
+typedef struct _SECPKG_MUTUAL_AUTH_LEVEL {
+    ULONG MutualAuthLevel;
+} SECPKG_MUTUAL_AUTH_LEVEL, *PSECPKG_MUTUAL_AUTH_LEVEL;
+
+typedef struct _SECPKG_CALL_INFO {
+    ULONG ProcessId;
+    ULONG ThreadId;
+    ULONG Attributes;
+    ULONG CallCount;
+} SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;
+
+typedef struct _SECPKG_EXTENDED_INFORMATION {
+    SECPKG_EXTENDED_INFORMATION_CLASS Class;
+    union {
+        SECPKG_GSS_INFO GssInfo;
+        SECPKG_CONTEXT_THUNKS ContextThunks;
+        SECPKG_MUTUAL_AUTH_LEVEL MutualAuthLevel;
+    } Info;
+} SECPKG_EXTENDED_INFORMATION, *PSECPKG_EXTENDED_INFORMATION;
+
+typedef struct  _SECPKG_TARGETINFO {
+    PSID DomainSid;
+    PCWSTR ComputerName;
+} SECPKG_TARGETINFO, *PSECPKG_TARGETINFO;
+
+/* callbacks implemented by SSP/AP dlls and called by the LSA */
+typedef VOID (NTAPI *PLSA_CALLBACK_FUNCTION)(ULONG_PTR, ULONG_PTR, PSecBuffer,
+ PSecBuffer);
+
+/* misc typedefs used in the below prototypes */
+typedef PVOID *PLSA_CLIENT_REQUEST;
+typedef ULONG LSA_SEC_HANDLE, *PLSA_SEC_HANDLE;
+typedef LPTHREAD_START_ROUTINE SEC_THREAD_START;
+typedef PSECURITY_ATTRIBUTES SEC_ATTRS;
+
+/* functions used by SSP/AP obtainable by dispatch tables */
+typedef NTSTATUS (NTAPI *PLSA_REGISTER_CALLBACK)(ULONG, PLSA_CALLBACK_FUNCTION);
+typedef NTSTATUS (NTAPI *PLSA_CREATE_LOGON_SESSION)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_DELETE_LOGON_SESSION)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_ADD_CREDENTIAL)(PLUID, ULONG, PLSA_STRING,
+ PLSA_STRING);
+typedef NTSTATUS (NTAPI *PLSA_GET_CREDENTIALS)(PLUID, ULONG, PULONG, BOOLEAN,
+ PLSA_STRING, PULONG, PLSA_STRING);
+typedef NTSTATUS (NTAPI *PLSA_DELETE_CREDENTIAL)(PLUID, ULONG, PLSA_STRING);
+typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG);
+typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
+ ULONG, PVOID*);
+typedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG,
+ PVOID, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
+ ULONG, PVOID, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_IMPERSONATE_CLIENT)(void);
+typedef NTSTATUS (NTAPI *PLSA_UNLOAD_PACKAGE)(void);
+typedef NTSTATUS (NTAPI *PLSA_DUPLICATE_HANDLE)(HANDLE, PHANDLE);
+typedef NTSTATUS (NTAPI *PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(PLUID, ULONG,
+ PVOID, BOOLEAN);
+typedef HANDLE (NTAPI *PLSA_CREATE_THREAD)(SEC_ATTRS, ULONG, SEC_THREAD_START,
+ PVOID, ULONG, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_GET_CLIENT_INFO)(PSECPKG_CLIENT_INFO);
+typedef HANDLE (NTAPI *PLSA_REGISTER_NOTIFICATION)(SEC_THREAD_START, PVOID,
+ ULONG, ULONG, ULONG, ULONG, HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_CANCEL_NOTIFICATION)(HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_MAP_BUFFER)(PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI *PLSA_CREATE_TOKEN)(PLUID, PTOKEN_SOURCE,
+ SECURITY_LOGON_TYPE, SECURITY_IMPERSONATION_LEVEL, LSA_TOKEN_INFORMATION_TYPE,
+ PVOID, PTOKEN_GROUPS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING,
+ PUNICODE_STRING, PHANDLE, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_AUDIT_LOGON)(NTSTATUS, NTSTATUS, PUNICODE_STRING,
+ PUNICODE_STRING, PUNICODE_STRING, OPTIONAL PSID, SECURITY_LOGON_TYPE,
+ PTOKEN_SOURCE, PLUID);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
+ PVOID*, PULONG, PNTSTATUS);
+typedef BOOLEAN (NTAPI *PLSA_GET_CALL_INFO)(PSECPKG_CALL_INFO);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGEEX)(PUNICODE_STRING, PVOID, PVOID,
+ ULONG, PVOID*, PULONG, PNTSTATUS);
+typedef PVOID (NTAPI *PLSA_CREATE_SHARED_MEMORY)(ULONG, ULONG);
+typedef PVOID (NTAPI *PLSA_ALLOCATE_SHARED_MEMORY)(PVOID, ULONG);
+typedef VOID (NTAPI *PLSA_FREE_SHARED_MEMORY)(PVOID, PVOID);
+typedef BOOLEAN (NTAPI *PLSA_DELETE_SHARED_MEMORY)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_OPEN_SAM_USER)(PUNICODE_STRING, SECPKG_NAME_TYPE,
+ PUNICODE_STRING, BOOLEAN, ULONG, PVOID*);
+typedef NTSTATUS (NTAPI *PLSA_GET_USER_CREDENTIALS)(PVOID, PVOID *, PULONG,
+ PVOID *, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_GET_USER_AUTH_DATA)(PVOID, PUCHAR *, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_CLOSE_SAM_USER)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_CONVERT_AUTH_DATA_TO_TOKEN)(PVOID, ULONG,
+ SECURITY_IMPERSONATION_LEVEL, PTOKEN_SOURCE, SECURITY_LOGON_TYPE,
+ PUNICODE_STRING, PHANDLE, PLUID, PUNICODE_STRING, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_CLIENT_CALLBACK)(PCHAR, ULONG_PTR, ULONG_PTR,
+ PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI *PLSA_UPDATE_PRIMARY_CREDENTIALS)(PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY);
+typedef NTSTATUS (NTAPI *PLSA_GET_AUTH_DATA_FOR_USER)(PUNICODE_STRING,
+ SECPKG_NAME_TYPE, PUNICODE_STRING, PUCHAR *, PULONG, PUNICODE_STRING);
+typedef NTSTATUS (NTAPI *PLSA_CRACK_SINGLE_NAME)(ULONG, BOOLEAN,
+ PUNICODE_STRING, PUNICODE_STRING, ULONG, PUNICODE_STRING, PUNICODE_STRING,
+ PULONG);
+typedef NTSTATUS (NTAPI *PLSA_AUDIT_ACCOUNT_LOGON)(ULONG, BOOLEAN,
+ PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, NTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING, PVOID,
+ PVOID, ULONG, PVOID*, PULONG, PNTSTATUS);
+
+/* Dispatch tables of functions used by SSP/AP */
+typedef struct SECPKG_DLL_FUNCTIONS {
+    PLSA_ALLOCATE_LSA_HEAP AllocateHeap;
+    PLSA_FREE_LSA_HEAP FreeHeap;
+    PLSA_REGISTER_CALLBACK RegisterCallback;
+} SECPKG_DLL_FUNCTIONS,
+ *PSECPKG_DLL_FUNCTIONS;
+
+typedef struct LSA_DISPATCH_TABLE {
+    PLSA_CREATE_LOGON_SESSION CreateLogonSession;
+    PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
+    PLSA_ADD_CREDENTIAL AddCredential;
+    PLSA_GET_CREDENTIALS GetCredentials;
+    PLSA_DELETE_CREDENTIAL DeleteCredential;
+    PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
+    PLSA_FREE_LSA_HEAP FreeLsaHeap;
+    PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
+    PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
+    PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
+    PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
+} LSA_DISPATCH_TABLE,
+ *PLSA_DISPATCH_TABLE;
+
+typedef struct _LSA_SECPKG_FUNCTION_TABLE {
+    PLSA_CREATE_LOGON_SESSION CreateLogonSession;
+    PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
+    PLSA_ADD_CREDENTIAL AddCredential;
+    PLSA_GET_CREDENTIALS GetCredentials;
+    PLSA_DELETE_CREDENTIAL DeleteCredential;
+    PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
+    PLSA_FREE_LSA_HEAP FreeLsaHeap;
+    PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
+    PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
+    PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
+    PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
+    PLSA_IMPERSONATE_CLIENT ImpersonateClient;
+    PLSA_UNLOAD_PACKAGE UnloadPackage;
+    PLSA_DUPLICATE_HANDLE DuplicateHandle;
+    PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;
+    PLSA_CREATE_THREAD CreateThread;
+    PLSA_GET_CLIENT_INFO GetClientInfo;
+    PLSA_REGISTER_NOTIFICATION RegisterNotification;
+    PLSA_CANCEL_NOTIFICATION CancelNotification;
+    PLSA_MAP_BUFFER MapBuffer;
+    PLSA_CREATE_TOKEN CreateToken;
+    PLSA_AUDIT_LOGON AuditLogon;
+    PLSA_CALL_PACKAGE CallPackage;
+    PLSA_FREE_LSA_HEAP FreeReturnBuffer;
+    PLSA_GET_CALL_INFO GetCallInfo;
+    PLSA_CALL_PACKAGEEX CallPackageEx;
+    PLSA_CREATE_SHARED_MEMORY CreateSharedMemory;
+    PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory;
+    PLSA_FREE_SHARED_MEMORY FreeSharedMemory;
+    PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory;
+    PLSA_OPEN_SAM_USER OpenSamUser;
+    PLSA_GET_USER_CREDENTIALS GetUserCredentials;
+    PLSA_GET_USER_AUTH_DATA GetUserAuthData;
+    PLSA_CLOSE_SAM_USER CloseSamUser;
+    PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken;
+    PLSA_CLIENT_CALLBACK ClientCallback;
+    PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials;
+    PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser;
+    PLSA_CRACK_SINGLE_NAME CrackSingleName;
+    PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon;
+    PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
+} LSA_SECPKG_FUNCTION_TABLE,
+ *PLSA_SECPKG_FUNCTION_TABLE;
+
+/* LSA-mode functions implemented by SSP/AP obtainable by a dispatch table */
+typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE,
+ PLSA_STRING, PLSA_STRING, PLSA_STRING *);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER)(LPWSTR, LPWSTR, LPWSTR, LPWSTR,
+ DWORD, DWORD, PHANDLE);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
+ PVOID *, PULONG, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST,
+ PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING,
+ PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST,
+ SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
+ PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
+ PUNICODE_STRING *);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST,
+ SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
+ PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
+ PUNICODE_STRING *, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY *);
+typedef NTSTATUS (SpInitializeFn)(ULONG_PTR, PSECPKG_PARAMETERS,
+ PLSA_SECPKG_FUNCTION_TABLE);
+typedef NTSTATUS (NTAPI SpShutDownFn)(void);
+typedef NTSTATUS (NTAPI SpGetInfoFn)(PSecPkgInfoW);
+typedef NTSTATUS (NTAPI SpAcceptCredentialsFn)(SECURITY_LOGON_TYPE,
+ PUNICODE_STRING, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED);
+typedef NTSTATUS (NTAPI SpAcquireCredentialsHandleFn)(PUNICODE_STRING, ULONG,
+ PLUID, PVOID, PVOID, PVOID, PLSA_SEC_HANDLE, PTimeStamp);
+typedef NTSTATUS (NTAPI SpQueryCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID);
+typedef NTSTATUS (NTAPI SpFreeCredentialsHandleFn)(LSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpSaveCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpGetCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpDeleteCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpInitLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE,
+ PUNICODE_STRING, ULONG, ULONG, PSecBufferDesc, PLSA_SEC_HANDLE, PSecBufferDesc,
+ PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
+typedef NTSTATUS (NTAPI SpAcceptLsaModeContextFn)(LSA_SEC_HANDLE,
+ LSA_SEC_HANDLE, PSecBufferDesc, ULONG, ULONG, PLSA_SEC_HANDLE, PSecBufferDesc,
+ PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
+typedef NTSTATUS (NTAPI SpDeleteContextFn)(LSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpApplyControlTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpGetUserInfoFn)(PLUID, ULONG, PSecurityUserData *);
+typedef NTSTATUS (NTAPI SpGetExtendedInformationFn)(
+ SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION *);
+typedef NTSTATUS (NTAPI SpQueryContextAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID);
+typedef NTSTATUS (NTAPI SpAddCredentialsFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ PUNICODE_STRING, ULONG, PVOID, PVOID, PVOID, PTimeStamp);
+typedef NTSTATUS (NTAPI SpSetExtendedInformationFn)(
+ SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION);
+typedef NTSTATUS (NTAPI SpSetContextAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID,
+ ULONG);
+typedef NTSTATUS (NTAPI SpSetCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID, ULONG);
+typedef NTSTATUS (NTAPI SpChangeAccountPasswordFn)(PUNICODE_STRING,
+ PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpQueryMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ ULONG, PULONG, PUCHAR *, PLSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpExchangeMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ ULONG, ULONG, PUCHAR, PLSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpGetCredUIContextFn)(LSA_SEC_HANDLE, GUID *, PULONG,
+ PUCHAR *);
+typedef NTSTATUS (NTAPI SpUpdateCredentialsFn)(LSA_SEC_HANDLE, GUID *, ULONG,
+ PUCHAR);
+typedef NTSTATUS (NTAPI SpValidateTargetInfoFn)(PLSA_CLIENT_REQUEST, PVOID,
+ PVOID, ULONG, PSECPKG_TARGETINFO);
+
+/* User-mode functions implemented by SSP/AP obtainable by a dispatch table */
+typedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS,
+ PVOID *);
+typedef NTSTATUS (NTAPI SpInitUserModeContextFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpMakeSignatureFn)(LSA_SEC_HANDLE, ULONG,
+ PSecBufferDesc, ULONG);
+typedef NTSTATUS (NTAPI SpVerifySignatureFn)(LSA_SEC_HANDLE, PSecBufferDesc,
+ ULONG, PULONG);
+typedef NTSTATUS (NTAPI SpSealMessageFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc,
+ ULONG);
+typedef NTSTATUS (NTAPI SpUnsealMessageFn)(LSA_SEC_HANDLE, PSecBufferDesc,
+ ULONG, PULONG);
+typedef NTSTATUS (NTAPI SpGetContextTokenFn)(LSA_SEC_HANDLE, PHANDLE);
+typedef NTSTATUS (NTAPI SpCompleteAuthTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpFormatCredentialsFn)(PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI SpMarshallSupplementalCredsFn)(ULONG, PUCHAR, PULONG,
+ PVOID *);
+typedef NTSTATUS (NTAPI SpExportSecurityContextFn)(LSA_SEC_HANDLE, ULONG,
+ PSecBuffer, PHANDLE);
+typedef NTSTATUS (NTAPI SpImportSecurityContextFn)(PSecBuffer, HANDLE,
+ PLSA_SEC_HANDLE);
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef SetContextAttributes
+#endif
+
+/* dispatch tables of LSA-mode functions implemented by SSP/AP */
+typedef struct SECPKG_FUNCTION_TABLE {
+    PLSA_AP_INITIALIZE_PACKAGE InitializePackage;
+    PLSA_AP_LOGON_USER LsaLogonUser;
+    PLSA_AP_CALL_PACKAGE CallPackage;
+    PLSA_AP_LOGON_TERMINATED LogonTerminated;
+    PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted;
+    PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
+    PLSA_AP_LOGON_USER_EX LogonUserEx;
+    PLSA_AP_LOGON_USER_EX2 LogonUserEx2;
+    SpInitializeFn *Initialize;
+    SpShutDownFn *Shutdown;
+    SpGetInfoFn *GetInfo;
+    SpAcceptCredentialsFn *AcceptCredentials;
+    SpAcquireCredentialsHandleFn *SpAcquireCredentialsHandle;
+    SpQueryCredentialsAttributesFn *SpQueryCredentialsAttributes;
+    SpFreeCredentialsHandleFn *FreeCredentialsHandle;
+    SpSaveCredentialsFn *SaveCredentials;
+    SpGetCredentialsFn *GetCredentials;
+    SpDeleteCredentialsFn *DeleteCredentials;
+    SpInitLsaModeContextFn *InitLsaModeContext;
+    SpAcceptLsaModeContextFn *AcceptLsaModeContext;
+    SpDeleteContextFn *DeleteContext;
+    SpApplyControlTokenFn *ApplyControlToken;
+    SpGetUserInfoFn *GetUserInfo;
+    SpGetExtendedInformationFn *GetExtendedInformation;
+    SpQueryContextAttributesFn *SpQueryContextAttributes;
+    SpAddCredentialsFn *SpAddCredentials;
+    SpSetExtendedInformationFn *SetExtendedInformation;
+    /* Packages with version SECPKG_INTERFACE_VERSION end here */
+    SpSetContextAttributesFn *SetContextAttributes;
+    /* Packages with version SECPKG_INTERFACE_VERSION_2 end here */
+    SpSetCredentialsAttributesFn *SetCredentialsAttributes;
+    /* Packages with version SECPKG_INTERFACE_VERSION_3 end here */
+    SpChangeAccountPasswordFn *ChangeAccountPassword;
+    /* Packages with version SECPKG_INTERFACE_VERSION_4 end here */
+    SpQueryMetaDataFn *QueryMetaData;
+    SpExchangeMetaDataFn *ExchangeMetaData;
+    SpGetCredUIContextFn *GetCredUIContext;
+    SpUpdateCredentialsFn *UpdateCredentials;
+    /* Packages with version SECPKG_INTERFACE_VERSION_5 end here */
+    SpValidateTargetInfoFn *ValidateTargetInfo;
+    /* Packages with version SECPKG_INTERFACE_VERSION_6 end here */
+} SECPKG_FUNCTION_TABLE,
+ *PSECPKG_FUNCTION_TABLE;
+
+/* dispatch tables of user-mode functions implemented by SSP/AP */
+typedef struct SECPKG_USER_FUNCTION_TABLE {
+    SpInstanceInitFn *InstanceInit;
+    SpInitUserModeContextFn *InitUserModeContext;
+    SpMakeSignatureFn *MakeSignature;
+    SpVerifySignatureFn *VerifySignature;
+    SpSealMessageFn *SealMessage;
+    SpUnsealMessageFn *UnsealMessage;
+    SpGetContextTokenFn *GetContextToken;
+    SpQueryContextAttributesFn *SpQueryContextAttributes;
+    SpCompleteAuthTokenFn *CompleteAuthToken;
+    SpDeleteContextFn *DeleteUserModeContext;
+    SpFormatCredentialsFn *FormatCredentials;
+    SpMarshallSupplementalCredsFn *MarshallSupplementalCreds;
+    SpExportSecurityContextFn *ExportContext;
+    SpImportSecurityContextFn *ImportContext;
+} SECPKG_USER_FUNCTION_TABLE,
+ *PSECPKG_USER_FUNCTION_TABLE;
+
+/* LSA-mode entry point to SSP/APs */
+typedef NTSTATUS (NTAPI *SpLsaModeInitializeFn)(ULONG, PULONG,
+ PSECPKG_FUNCTION_TABLE *, PULONG);
+
+/* User-mode entry point to SSP/APs */
+typedef NTSTATUS (WINAPI *SpUserModeInitializeFn)(ULONG, PULONG,
+ PSECPKG_USER_FUNCTION_TABLE *, PULONG);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _NTSECPKG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h
new file mode 100644
index 0000000..ff4127f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h
@@ -0,0 +1,1229 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTSTATUS_H
+#define __WINE_NTSTATUS_H
+
+#ifndef WIN32_NO_STATUS
+
+/*
+ * Exception codes
+ */
+
+#define STATUS_SUCCESS                   ((NTSTATUS) 0x00000000)
+#define STATUS_SEVERITY_SUCCESS          ((NTSTATUS) 0x00000000)
+#define STATUS_SEVERITY_INFORMATIONAL    ((NTSTATUS) 0x00000001)
+#define STATUS_SEVERITY_WARNING          ((NTSTATUS) 0x00000002)
+#define STATUS_SEVERITY_ERROR            ((NTSTATUS) 0x00000003)
+
+#define STATUS_WAIT_0                    ((NTSTATUS) 0x00000000)
+#define STATUS_WAIT_1                    ((NTSTATUS) 0x00000001)
+#define STATUS_WAIT_2                    ((NTSTATUS) 0x00000002)
+#define STATUS_WAIT_3                    ((NTSTATUS) 0x00000003)
+#define STATUS_WAIT_63                   ((NTSTATUS) 0x0000003f)
+#define STATUS_ABANDONED                 ((NTSTATUS) 0x00000080)
+#define STATUS_ABANDONED_WAIT_0          ((NTSTATUS) 0x00000080)
+#define STATUS_ABANDONED_WAIT_63         ((NTSTATUS) 0x000000BF)
+#define STATUS_USER_APC                  ((NTSTATUS) 0x000000C0)
+#define STATUS_KERNEL_APC                ((NTSTATUS) 0x00000100)
+#define STATUS_ALERTED                   ((NTSTATUS) 0x00000101)
+#define STATUS_TIMEOUT                   ((NTSTATUS) 0x00000102)
+#define STATUS_PENDING                   ((NTSTATUS) 0x00000103)
+#define STATUS_REPARSE                   ((NTSTATUS) 0x00000104)
+#define STATUS_MORE_ENTRIES              ((NTSTATUS) 0x00000105)
+#define STATUS_NOT_ALL_ASSIGNED          ((NTSTATUS) 0x00000106)
+#define STATUS_SOME_NOT_MAPPED           ((NTSTATUS) 0x00000107)
+#define STATUS_OPLOCK_BREAK_IN_PROGRESS  ((NTSTATUS) 0x00000108)
+#define STATUS_VOLUME_MOUNTED            ((NTSTATUS) 0x00000109)
+#define STATUS_RXACT_COMMITTED           ((NTSTATUS) 0x0000010A)
+#define STATUS_NOTIFY_CLEANUP            ((NTSTATUS) 0x0000010B)
+#define STATUS_NOTIFY_ENUM_DIR           ((NTSTATUS) 0x0000010C)
+#define STATUS_NO_QUOTAS_FOR_ACCOUNT     ((NTSTATUS) 0x0000010D)
+#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS) 0x0000010E)
+#define STATUS_PAGE_FAULT_TRANSITION     ((NTSTATUS) 0x00000110)
+#define STATUS_PAGE_FAULT_DEMAND_ZERO    ((NTSTATUS) 0x00000111)
+#define STATUS_PAGE_FAULT_COPY_ON_WRITE  ((NTSTATUS) 0x00000112)
+#define STATUS_PAGE_FAULT_GUARD_PAGE     ((NTSTATUS) 0x00000113)
+#define STATUS_PAGE_FAULT_PAGING_FILE    ((NTSTATUS) 0x00000114)
+#define STATUS_CACHE_PAGE_LOCKED         ((NTSTATUS) 0x00000115)
+#define STATUS_CRASH_DUMP                ((NTSTATUS) 0x00000116)
+#define STATUS_BUFFER_ALL_ZEROS          ((NTSTATUS) 0x00000117)
+#define STATUS_REPARSE_OBJECT            ((NTSTATUS) 0x00000118)
+#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS) 0x00000119)
+#define STATUS_TRANSLATION_COMPLETE      ((NTSTATUS) 0x00000120)
+#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY  ((NTSTATUS) 0x00000121)
+#define STATUS_NOTHING_TO_TERMINATE      ((NTSTATUS) 0x00000122)
+#define STATUS_PROCESS_NOT_IN_JOB        ((NTSTATUS) 0x00000123)
+#define STATUS_PROCESS_IN_JOB            ((NTSTATUS) 0x00000124)
+#define STATUS_VOLSNAP_HIBERNATE_READY   ((NTSTATUS) 0x00000125)
+#define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS) 0x00000126)
+
+#define STATUS_OBJECT_NAME_EXISTS        ((NTSTATUS) 0x40000000)
+#define STATUS_THREAD_WAS_SUSPENDED      ((NTSTATUS) 0x40000001)
+#define STATUS_WORKING_SET_LIMIT_RANGE   ((NTSTATUS) 0x40000002)
+#define STATUS_IMAGE_NOT_AT_BASE         ((NTSTATUS) 0x40000003)
+#define STATUS_RXACT_STATE_CREATED       ((NTSTATUS) 0x40000004)
+#define STATUS_SEGMENT_NOTIFICATION      ((NTSTATUS) 0x40000005)
+#define STATUS_LOCAL_USER_SESSION_KEY    ((NTSTATUS) 0x40000006)
+#define STATUS_BAD_CURRENT_DIRECTORY     ((NTSTATUS) 0x40000007)
+#define STATUS_SERIAL_MORE_WRITES        ((NTSTATUS) 0x40000008)
+#define STATUS_REGISTRY_RECOVERED        ((NTSTATUS) 0x40000009)
+#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS) 0x4000000A)
+#define STATUS_FT_WRITE_RECOVERY         ((NTSTATUS) 0x4000000B)
+#define STATUS_SERIAL_COUNTER_TIMEOUT    ((NTSTATUS) 0x4000000C)
+#define STATUS_NULL_LM_PASSWORD          ((NTSTATUS) 0x4000000D)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS) 0x4000000E)
+#define STATUS_RECEIVE_PARTIAL           ((NTSTATUS) 0x4000000F)
+#define STATUS_RECEIVE_EXPEDITED         ((NTSTATUS) 0x40000010)
+#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS) 0x40000011)
+#define STATUS_EVENT_DONE                ((NTSTATUS) 0x40000012)
+#define STATUS_EVENT_PENDING             ((NTSTATUS) 0x40000013)
+#define STATUS_CHECKING_FILE_SYSTEM      ((NTSTATUS) 0x40000014)
+#define STATUS_FATAL_APP_EXIT            ((NTSTATUS) 0x40000015)
+#define STATUS_PREDEFINED_HANDLE         ((NTSTATUS) 0x40000016)
+#define STATUS_WAS_UNLOCKED              ((NTSTATUS) 0x40000017)
+#define STATUS_SERVICE_NOTIFICATION      ((NTSTATUS) 0x40000018)
+#define STATUS_WAS_LOCKED                ((NTSTATUS) 0x40000019)
+#define STATUS_LOG_HARD_ERROR            ((NTSTATUS) 0x4000001A)
+#define STATUS_ALREADY_WIN32             ((NTSTATUS) 0x4000001B)
+#define STATUS_WX86_UNSIMULATE           ((NTSTATUS) 0x4000001C)
+#define STATUS_WX86_CONTINUE             ((NTSTATUS) 0x4000001D)
+#define STATUS_WX86_SINGLE_STEP          ((NTSTATUS) 0x4000001E)
+#define STATUS_WX86_BREAKPOINT           ((NTSTATUS) 0x4000001F)
+#define STATUS_WX86_EXCEPTION_CONTINUE   ((NTSTATUS) 0x40000020)
+#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS) 0x40000021)
+#define STATUS_WX86_EXCEPTION_CHAIN      ((NTSTATUS) 0x40000022)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS) 0x40000023)
+#define STATUS_NO_YIELD_PERFORMED        ((NTSTATUS) 0x40000024)
+#define STATUS_TIMER_RESUME_IGNORED      ((NTSTATUS) 0x40000025)
+#define STATUS_ARBITRATION_UNHANDLED     ((NTSTATUS) 0x40000026)
+#define STATUS_CARDBUS_NOT_SUPPORTED     ((NTSTATUS) 0x40000027)
+#define STATUS_WX86_CREATEWX86TIB        ((NTSTATUS) 0x40000028)
+#define STATUS_MP_PROCESSOR_MISMATCH     ((NTSTATUS) 0x40000029)
+#define STATUS_HIBERNATED                ((NTSTATUS) 0x4000002A)
+#define STATUS_RESUME_HIBERNATION        ((NTSTATUS) 0x4000002B)
+#define STATUS_FIRMWARE_UPDATED          ((NTSTATUS) 0x4000002C)
+#define STATUS_WAKE_SYSTEM               ((NTSTATUS) 0x40000294)
+#define STATUS_DS_SHUTTING_DOWN          ((NTSTATUS) 0x40000370)
+
+#define RPC_NT_UUID_LOCAL_ONLY           ((NTSTATUS) 0x40020056)
+#define RPC_NT_SEND_INCOMPLETE           ((NTSTATUS) 0x400200AF)
+
+#define STATUS_CTX_CDM_CONNECT           ((NTSTATUS) 0x400A0004)
+#define STATUS_CTX_CDM_DISCONNECT        ((NTSTATUS) 0x400A0005)
+
+#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS) 0x4015000D)
+
+#define STATUS_GUARD_PAGE_VIOLATION      ((NTSTATUS) 0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT     ((NTSTATUS) 0x80000002)
+#define STATUS_BREAKPOINT                ((NTSTATUS) 0x80000003)
+#define STATUS_SINGLE_STEP               ((NTSTATUS) 0x80000004)
+#define STATUS_BUFFER_OVERFLOW           ((NTSTATUS) 0x80000005)
+#define STATUS_NO_MORE_FILES             ((NTSTATUS) 0x80000006)
+#define STATUS_WAKE_SYSTEM_DEBUGGER      ((NTSTATUS) 0x80000007)
+
+#define STATUS_HANDLES_CLOSED            ((NTSTATUS) 0x8000000A)
+#define STATUS_NO_INHERITANCE            ((NTSTATUS) 0x8000000B)
+#define STATUS_GUID_SUBSTITUTION_MADE    ((NTSTATUS) 0x8000000C)
+#define STATUS_PARTIAL_COPY              ((NTSTATUS) 0x8000000D)
+#define STATUS_DEVICE_PAPER_EMPTY        ((NTSTATUS) 0x8000000E)
+#define STATUS_DEVICE_POWERED_OFF        ((NTSTATUS) 0x8000000F)
+#define STATUS_DEVICE_OFF_LINE           ((NTSTATUS) 0x80000010)
+#define STATUS_DEVICE_BUSY               ((NTSTATUS) 0x80000011)
+#define STATUS_NO_MORE_EAS               ((NTSTATUS) 0x80000012)
+#define STATUS_INVALID_EA_NAME           ((NTSTATUS) 0x80000013)
+#define STATUS_EA_LIST_INCONSISTENT      ((NTSTATUS) 0x80000014)
+#define STATUS_INVALID_EA_FLAG           ((NTSTATUS) 0x80000015)
+#define STATUS_VERIFY_REQUIRED           ((NTSTATUS) 0x80000016)
+#define STATUS_EXTRANEOUS_INFORMATION    ((NTSTATUS) 0x80000017)
+#define STATUS_RXACT_COMMIT_NECESSARY    ((NTSTATUS) 0x80000018)
+#define STATUS_NO_MORE_ENTRIES           ((NTSTATUS) 0x8000001A)
+#define STATUS_FILEMARK_DETECTED         ((NTSTATUS) 0x8000001B)
+#define STATUS_MEDIA_CHANGED             ((NTSTATUS) 0x8000001C)
+#define STATUS_BUS_RESET                 ((NTSTATUS) 0x8000001D)
+#define STATUS_END_OF_MEDIA              ((NTSTATUS) 0x8000001E)
+#define STATUS_BEGINNING_OF_MEDIA        ((NTSTATUS) 0x8000001F)
+#define STATUS_MEDIA_CHECK               ((NTSTATUS) 0x80000020)
+#define STATUS_SETMARK_DETECTED          ((NTSTATUS) 0x80000021)
+#define STATUS_NO_DATA_DETECTED          ((NTSTATUS) 0x80000022)
+#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000023)
+#define STATUS_SERVER_HAS_OPEN_HANDLES   ((NTSTATUS) 0x80000024)
+#define STATUS_ALREADY_DISCONNECTED      ((NTSTATUS) 0x80000025)
+#define STATUS_LONGJUMP                  ((NTSTATUS) 0x80000026)
+#define STATUS_CLEANER_CARTRIDGE_INSTALLED      ((NTSTATUS) 0x80000027)
+#define STATUS_PLUGPLAY_QUERY_VETOED     ((NTSTATUS) 0x80000028)
+#define STATUS_UNWIND_CONSOLIDATE        ((NTSTATUS) 0x80000029)
+#define STATUS_REGISTRY_HIVE_RECOVERED   ((NTSTATUS) 0x8000002A)
+#define STATUS_DLL_MIGHT_BE_INSECURE     ((NTSTATUS) 0x8000002B)
+#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS) 0x8000002C)
+
+#define STATUS_DEVICE_REQUIRES_CLEANING  ((NTSTATUS) 0x80000288)
+#define STATUS_DEVICE_DOOR_OPEN          ((NTSTATUS) 0x80000289)
+
+#define STATUS_CLUSTER_NODE_ALREADY_UP   ((NTSTATUS) 0x80130001)
+#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS) 0x80130002)
+#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE   ((NTSTATUS) 0x80130003)
+#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE  ((NTSTATUS) 0x80130004)
+#define STATUS_CLUSTER_NODE_ALREADY_MEMBER      ((NTSTATUS) 0x80130005)
+
+#define STATUS_UNSUCCESSFUL              ((NTSTATUS) 0xC0000001)
+#define STATUS_NOT_IMPLEMENTED           ((NTSTATUS) 0xC0000002)
+#define STATUS_INVALID_INFO_CLASS        ((NTSTATUS) 0xC0000003)
+#define STATUS_INFO_LENGTH_MISMATCH      ((NTSTATUS) 0xC0000004)
+#define STATUS_ACCESS_VIOLATION          ((NTSTATUS) 0xC0000005)
+#define STATUS_IN_PAGE_ERROR             ((NTSTATUS) 0xC0000006)
+#define STATUS_PAGEFILE_QUOTA            ((NTSTATUS) 0xC0000007)
+#define STATUS_INVALID_HANDLE            ((NTSTATUS) 0xC0000008)
+#define STATUS_BAD_INITIAL_STACK         ((NTSTATUS) 0xC0000009)
+#define STATUS_BAD_INITIAL_PC            ((NTSTATUS) 0xC000000A)
+#define STATUS_INVALID_CID               ((NTSTATUS) 0xC000000B)
+#define STATUS_TIMER_NOT_CANCELED        ((NTSTATUS) 0xC000000C)
+#define STATUS_INVALID_PARAMETER         ((NTSTATUS) 0xC000000D)
+#define STATUS_NO_SUCH_DEVICE            ((NTSTATUS) 0xC000000E)
+#define STATUS_NO_SUCH_FILE              ((NTSTATUS) 0xC000000F)
+#define STATUS_INVALID_DEVICE_REQUEST    ((NTSTATUS) 0xC0000010)
+#define STATUS_END_OF_FILE               ((NTSTATUS) 0xC0000011)
+#define STATUS_WRONG_VOLUME              ((NTSTATUS) 0xC0000012)
+#define STATUS_NO_MEDIA_IN_DEVICE        ((NTSTATUS) 0xC0000013)
+#define STATUS_UNRECOGNIZED_MEDIA        ((NTSTATUS) 0xC0000014)
+#define STATUS_NONEXISTENT_SECTOR        ((NTSTATUS) 0xC0000015)
+#define STATUS_MORE_PROCESSING_REQUIRED  ((NTSTATUS) 0xC0000016)
+#define STATUS_NO_MEMORY                 ((NTSTATUS) 0xC0000017)
+#define STATUS_CONFLICTING_ADDRESSES     ((NTSTATUS) 0xC0000018)
+#define STATUS_NOT_MAPPED_VIEW           ((NTSTATUS) 0xC0000019)
+#define STATUS_UNABLE_TO_FREE_VM         ((NTSTATUS) 0xC000001A)
+#define STATUS_UNABLE_TO_DELETE_SECTION  ((NTSTATUS) 0xC000001B)
+#define STATUS_INVALID_SYSTEM_SERVICE    ((NTSTATUS) 0xC000001C)
+#define STATUS_ILLEGAL_INSTRUCTION       ((NTSTATUS) 0xC000001D)
+#define STATUS_INVALID_LOCK_SEQUENCE     ((NTSTATUS) 0xC000001E)
+#define STATUS_INVALID_VIEW_SIZE         ((NTSTATUS) 0xC000001F)
+#define STATUS_INVALID_FILE_FOR_SECTION  ((NTSTATUS) 0xC0000020)
+#define STATUS_ALREADY_COMMITTED         ((NTSTATUS) 0xC0000021)
+#define STATUS_ACCESS_DENIED             ((NTSTATUS) 0xC0000022)
+#define STATUS_BUFFER_TOO_SMALL          ((NTSTATUS) 0xC0000023)
+#define STATUS_OBJECT_TYPE_MISMATCH      ((NTSTATUS) 0xC0000024)
+#define STATUS_NONCONTINUABLE_EXCEPTION  ((NTSTATUS) 0xC0000025)
+#define STATUS_INVALID_DISPOSITION       ((NTSTATUS) 0xC0000026)
+#define STATUS_UNWIND                    ((NTSTATUS) 0xC0000027)
+#define STATUS_BAD_STACK                 ((NTSTATUS) 0xC0000028)
+#define STATUS_INVALID_UNWIND_TARGET     ((NTSTATUS) 0xC0000029)
+#define STATUS_NOT_LOCKED                ((NTSTATUS) 0xC000002A)
+#define STATUS_PARITY_ERROR              ((NTSTATUS) 0xC000002B)
+#define STATUS_UNABLE_TO_DECOMMIT_VM     ((NTSTATUS) 0xC000002C)
+#define STATUS_NOT_COMMITTED             ((NTSTATUS) 0xC000002D)
+#define STATUS_INVALID_PORT_ATTRIBUTES   ((NTSTATUS) 0xC000002E)
+#define STATUS_PORT_MESSAGE_TOO_LONG     ((NTSTATUS) 0xC000002F)
+#define STATUS_INVALID_PARAMETER_MIX     ((NTSTATUS) 0xC0000030)
+#define STATUS_INVALID_QUOTA_LOWER       ((NTSTATUS) 0xC0000031)
+#define STATUS_DISK_CORRUPT_ERROR        ((NTSTATUS) 0xC0000032)
+#define STATUS_OBJECT_NAME_INVALID       ((NTSTATUS) 0xC0000033)
+#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS) 0xC0000034)
+#define STATUS_OBJECT_NAME_COLLISION     ((NTSTATUS) 0xC0000035)
+#define STATUS_PORT_DISCONNECTED         ((NTSTATUS) 0xC0000037)
+#define STATUS_DEVICE_ALREADY_ATTACHED   ((NTSTATUS) 0xC0000038)
+#define STATUS_OBJECT_PATH_INVALID       ((NTSTATUS) 0xC0000039)
+#define STATUS_OBJECT_PATH_NOT_FOUND     ((NTSTATUS) 0xC000003A)
+#define STATUS_OBJECT_PATH_SYNTAX_BAD    ((NTSTATUS) 0xC000003B)
+#define STATUS_DATA_OVERRUN              ((NTSTATUS) 0xC000003C)
+#define STATUS_DATA_LATE_ERROR           ((NTSTATUS) 0xC000003D)
+#define STATUS_DATA_ERROR                ((NTSTATUS) 0xC000003E)
+#define STATUS_CRC_ERROR                 ((NTSTATUS) 0xC000003F)
+#define STATUS_SECTION_TOO_BIG           ((NTSTATUS) 0xC0000040)
+#define STATUS_PORT_CONNECTION_REFUSED   ((NTSTATUS) 0xC0000041)
+#define STATUS_INVALID_PORT_HANDLE       ((NTSTATUS) 0xC0000042)
+#define STATUS_SHARING_VIOLATION         ((NTSTATUS) 0xC0000043)
+#define STATUS_QUOTA_EXCEEDED            ((NTSTATUS) 0xC0000044)
+#define STATUS_INVALID_PAGE_PROTECTION   ((NTSTATUS) 0xC0000045)
+#define STATUS_MUTANT_NOT_OWNED          ((NTSTATUS) 0xC0000046)
+#define STATUS_SEMAPHORE_LIMIT_EXCEEDED  ((NTSTATUS) 0xC0000047)
+#define STATUS_PORT_ALREADY_SET          ((NTSTATUS) 0xC0000048)
+#define STATUS_SECTION_NOT_IMAGE         ((NTSTATUS) 0xC0000049)
+#define STATUS_SUSPEND_COUNT_EXCEEDED    ((NTSTATUS) 0xC000004A)
+#define STATUS_THREAD_IS_TERMINATING     ((NTSTATUS) 0xC000004B)
+#define STATUS_BAD_WORKING_SET_LIMIT     ((NTSTATUS) 0xC000004C)
+#define STATUS_INCOMPATIBLE_FILE_MAP     ((NTSTATUS) 0xC000004D)
+#define STATUS_SECTION_PROTECTION        ((NTSTATUS) 0xC000004E)
+#define STATUS_EAS_NOT_SUPPORTED         ((NTSTATUS) 0xC000004F)
+#define STATUS_EA_TOO_LARGE              ((NTSTATUS) 0xC0000050)
+#define STATUS_NONEXISTENT_EA_ENTRY      ((NTSTATUS) 0xC0000051)
+#define STATUS_NO_EAS_ON_FILE            ((NTSTATUS) 0xC0000052)
+#define STATUS_EA_CORRUPT_ERROR          ((NTSTATUS) 0xC0000053)
+#define STATUS_FILE_LOCK_CONFLICT        ((NTSTATUS) 0xC0000054)
+#define STATUS_LOCK_NOT_GRANTED          ((NTSTATUS) 0xC0000055)
+#define STATUS_DELETE_PENDING            ((NTSTATUS) 0xC0000056)
+#define STATUS_CTL_FILE_NOT_SUPPORTED    ((NTSTATUS) 0xC0000057)
+#define STATUS_UNKNOWN_REVISION          ((NTSTATUS) 0xC0000058)
+#define STATUS_REVISION_MISMATCH         ((NTSTATUS) 0xC0000059)
+#define STATUS_INVALID_OWNER             ((NTSTATUS) 0xC000005A)
+#define STATUS_INVALID_PRIMARY_GROUP     ((NTSTATUS) 0xC000005B)
+#define STATUS_NO_IMPERSONATION_TOKEN    ((NTSTATUS) 0xC000005C)
+#define STATUS_CANT_DISABLE_MANDATORY    ((NTSTATUS) 0xC000005D)
+#define STATUS_NO_LOGON_SERVERS          ((NTSTATUS) 0xC000005E)
+#define STATUS_NO_SUCH_LOGON_SESSION     ((NTSTATUS) 0xC000005F)
+#define STATUS_NO_SUCH_PRIVILEGE         ((NTSTATUS) 0xC0000060)
+#define STATUS_PRIVILEGE_NOT_HELD        ((NTSTATUS) 0xC0000061)
+#define STATUS_INVALID_ACCOUNT_NAME      ((NTSTATUS) 0xC0000062)
+#define STATUS_USER_EXISTS               ((NTSTATUS) 0xC0000063)
+#define STATUS_NO_SUCH_USER              ((NTSTATUS) 0xC0000064)
+#define STATUS_GROUP_EXISTS              ((NTSTATUS) 0xC0000065)
+#define STATUS_NO_SUCH_GROUP             ((NTSTATUS) 0xC0000066)
+#define STATUS_MEMBER_IN_GROUP           ((NTSTATUS) 0xC0000067)
+#define STATUS_MEMBER_NOT_IN_GROUP       ((NTSTATUS) 0xC0000068)
+#define STATUS_LAST_ADMIN                ((NTSTATUS) 0xC0000069)
+#define STATUS_WRONG_PASSWORD            ((NTSTATUS) 0xC000006A)
+#define STATUS_ILL_FORMED_PASSWORD       ((NTSTATUS) 0xC000006B)
+#define STATUS_PASSWORD_RESTRICTION      ((NTSTATUS) 0xC000006C)
+#define STATUS_LOGON_FAILURE             ((NTSTATUS) 0xC000006D)
+#define STATUS_ACCOUNT_RESTRICTION       ((NTSTATUS) 0xC000006E)
+#define STATUS_INVALID_LOGON_HOURS       ((NTSTATUS) 0xC000006F)
+#define STATUS_INVALID_WORKSTATION       ((NTSTATUS) 0xC0000070)
+#define STATUS_PASSWORD_EXPIRED          ((NTSTATUS) 0xC0000071)
+#define STATUS_ACCOUNT_DISABLED          ((NTSTATUS) 0xC0000072)
+#define STATUS_NONE_MAPPED               ((NTSTATUS) 0xC0000073)
+#define STATUS_TOO_MANY_LUIDS_REQUESTED  ((NTSTATUS) 0xC0000074)
+#define STATUS_LUIDS_EXHAUSTED           ((NTSTATUS) 0xC0000075)
+#define STATUS_INVALID_SUB_AUTHORITY     ((NTSTATUS) 0xC0000076)
+#define STATUS_INVALID_ACL               ((NTSTATUS) 0xC0000077)
+#define STATUS_INVALID_SID               ((NTSTATUS) 0xC0000078)
+#define STATUS_INVALID_SECURITY_DESCR    ((NTSTATUS) 0xC0000079)
+#define STATUS_PROCEDURE_NOT_FOUND       ((NTSTATUS) 0xC000007A)
+#define STATUS_INVALID_IMAGE_FORMAT      ((NTSTATUS) 0xC000007B)
+#define STATUS_NO_TOKEN                  ((NTSTATUS) 0xC000007C)
+#define STATUS_BAD_INHERITANCE_ACL       ((NTSTATUS) 0xC000007D)
+#define STATUS_RANGE_NOT_LOCKED          ((NTSTATUS) 0xC000007E)
+#define STATUS_DISK_FULL                 ((NTSTATUS) 0xC000007F)
+#define STATUS_SERVER_DISABLED           ((NTSTATUS) 0xC0000080)
+#define STATUS_SERVER_NOT_DISABLED       ((NTSTATUS) 0xC0000081)
+#define STATUS_TOO_MANY_GUIDS_REQUESTED  ((NTSTATUS) 0xC0000082)
+#define STATUS_GUIDS_EXHAUSTED           ((NTSTATUS) 0xC0000083)
+#define STATUS_INVALID_ID_AUTHORITY      ((NTSTATUS) 0xC0000084)
+#define STATUS_AGENTS_EXHAUSTED          ((NTSTATUS) 0xC0000085)
+#define STATUS_INVALID_VOLUME_LABEL      ((NTSTATUS) 0xC0000086)
+#define STATUS_SECTION_NOT_EXTENDED      ((NTSTATUS) 0xC0000087)
+#define STATUS_NOT_MAPPED_DATA           ((NTSTATUS) 0xC0000088)
+#define STATUS_RESOURCE_DATA_NOT_FOUND   ((NTSTATUS) 0xC0000089)
+#define STATUS_RESOURCE_TYPE_NOT_FOUND   ((NTSTATUS) 0xC000008A)
+#define STATUS_RESOURCE_NAME_NOT_FOUND   ((NTSTATUS) 0xC000008B)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((NTSTATUS) 0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND    ((NTSTATUS) 0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((NTSTATUS) 0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT      ((NTSTATUS) 0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION   ((NTSTATUS) 0xC0000090)
+#define STATUS_FLOAT_OVERFLOW            ((NTSTATUS) 0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK         ((NTSTATUS) 0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW           ((NTSTATUS) 0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((NTSTATUS) 0xC0000094)
+#define STATUS_INTEGER_OVERFLOW          ((NTSTATUS) 0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION    ((NTSTATUS) 0xC0000096)
+#define STATUS_TOO_MANY_PAGING_FILES     ((NTSTATUS) 0xC0000097)
+#define STATUS_FILE_INVALID              ((NTSTATUS) 0xC0000098)
+#define STATUS_ALLOTTED_SPACE_EXCEEDED   ((NTSTATUS) 0xC0000099)
+#define STATUS_INSUFFICIENT_RESOURCES    ((NTSTATUS) 0xC000009A)
+#define STATUS_DFS_EXIT_PATH_FOUND       ((NTSTATUS) 0xC000009B)
+#define STATUS_DEVICE_DATA_ERROR         ((NTSTATUS) 0xC000009C)
+#define STATUS_DEVICE_NOT_CONNECTED      ((NTSTATUS) 0xC000009D)
+#define STATUS_DEVICE_POWER_FAILURE      ((NTSTATUS) 0xC000009E)
+#define STATUS_FREE_VM_NOT_AT_BASE       ((NTSTATUS) 0xC000009F)
+#define STATUS_MEMORY_NOT_ALLOCATED      ((NTSTATUS) 0xC00000A0)
+#define STATUS_WORKING_SET_QUOTA         ((NTSTATUS) 0xC00000A1)
+#define STATUS_MEDIA_WRITE_PROTECTED     ((NTSTATUS) 0xC00000A2)
+#define STATUS_DEVICE_NOT_READY          ((NTSTATUS) 0xC00000A3)
+#define STATUS_INVALID_GROUP_ATTRIBUTES  ((NTSTATUS) 0xC00000A4)
+#define STATUS_BAD_IMPERSONATION_LEVEL   ((NTSTATUS) 0xC00000A5)
+#define STATUS_CANT_OPEN_ANONYMOUS       ((NTSTATUS) 0xC00000A6)
+#define STATUS_BAD_VALIDATION_CLASS      ((NTSTATUS) 0xC00000A7)
+#define STATUS_BAD_TOKEN_TYPE            ((NTSTATUS) 0xC00000A8)
+#define STATUS_BAD_MASTER_BOOT_RECORD    ((NTSTATUS) 0xC00000A9)
+#define STATUS_INSTRUCTION_MISALIGNMENT  ((NTSTATUS) 0xC00000AA)
+#define STATUS_INSTANCE_NOT_AVAILABLE    ((NTSTATUS) 0xC00000AB)
+#define STATUS_PIPE_NOT_AVAILABLE        ((NTSTATUS) 0xC00000AC)
+#define STATUS_INVALID_PIPE_STATE        ((NTSTATUS) 0xC00000AD)
+#define STATUS_PIPE_BUSY                 ((NTSTATUS) 0xC00000AE)
+#define STATUS_ILLEGAL_FUNCTION          ((NTSTATUS) 0xC00000AF)
+#define STATUS_PIPE_DISCONNECTED         ((NTSTATUS) 0xC00000B0)
+#define STATUS_PIPE_CLOSING              ((NTSTATUS) 0xC00000B1)
+#define STATUS_PIPE_CONNECTED            ((NTSTATUS) 0xC00000B2)
+#define STATUS_PIPE_LISTENING            ((NTSTATUS) 0xC00000B3)
+#define STATUS_INVALID_READ_MODE         ((NTSTATUS) 0xC00000B4)
+#define STATUS_IO_TIMEOUT                ((NTSTATUS) 0xC00000B5)
+#define STATUS_FILE_FORCED_CLOSED        ((NTSTATUS) 0xC00000B6)
+#define STATUS_PROFILING_NOT_STARTED     ((NTSTATUS) 0xC00000B7)
+#define STATUS_PROFILING_NOT_STOPPED     ((NTSTATUS) 0xC00000B8)
+#define STATUS_COULD_NOT_INTERPRET       ((NTSTATUS) 0xC00000B9)
+#define STATUS_FILE_IS_A_DIRECTORY       ((NTSTATUS) 0xC00000BA)
+#define STATUS_NOT_SUPPORTED             ((NTSTATUS) 0xC00000BB)
+#define STATUS_REMOTE_NOT_LISTENING      ((NTSTATUS) 0xC00000BC)
+#define STATUS_DUPLICATE_NAME            ((NTSTATUS) 0xC00000BD)
+#define STATUS_BAD_NETWORK_PATH          ((NTSTATUS) 0xC00000BE)
+#define STATUS_NETWORK_BUSY              ((NTSTATUS) 0xC00000BF)
+#define STATUS_DEVICE_DOES_NOT_EXIST     ((NTSTATUS) 0xC00000C0)
+#define STATUS_TOO_MANY_COMMANDS         ((NTSTATUS) 0xC00000C1)
+#define STATUS_ADAPTER_HARDWARE_ERROR    ((NTSTATUS) 0xC00000C2)
+#define STATUS_INVALID_NETWORK_RESPONSE  ((NTSTATUS) 0xC00000C3)
+#define STATUS_UNEXPECTED_NETWORK_ERROR  ((NTSTATUS) 0xC00000C4)
+#define STATUS_BAD_REMOTE_ADAPTER        ((NTSTATUS) 0xC00000C5)
+#define STATUS_PRINT_QUEUE_FULL          ((NTSTATUS) 0xC00000C6)
+#define STATUS_NO_SPOOL_SPACE            ((NTSTATUS) 0xC00000C7)
+#define STATUS_PRINT_CANCELLED           ((NTSTATUS) 0xC00000C8)
+#define STATUS_NETWORK_NAME_DELETED      ((NTSTATUS) 0xC00000C9)
+#define STATUS_NETWORK_ACCESS_DENIED     ((NTSTATUS) 0xC00000CA)
+#define STATUS_BAD_DEVICE_TYPE           ((NTSTATUS) 0xC00000CB)
+#define STATUS_BAD_NETWORK_NAME          ((NTSTATUS) 0xC00000CC)
+#define STATUS_TOO_MANY_NAMES            ((NTSTATUS) 0xC00000CD)
+#define STATUS_TOO_MANY_SESSIONS         ((NTSTATUS) 0xC00000CE)
+#define STATUS_SHARING_PAUSED            ((NTSTATUS) 0xC00000CF)
+#define STATUS_REQUEST_NOT_ACCEPTED      ((NTSTATUS) 0xC00000D0)
+#define STATUS_REDIRECTOR_PAUSED         ((NTSTATUS) 0xC00000D1)
+#define STATUS_NET_WRITE_FAULT           ((NTSTATUS) 0xC00000D2)
+#define STATUS_PROFILING_AT_LIMIT        ((NTSTATUS) 0xC00000D3)
+#define STATUS_NOT_SAME_DEVICE           ((NTSTATUS) 0xC00000D4)
+#define STATUS_FILE_RENAMED              ((NTSTATUS) 0xC00000D5)
+#define STATUS_VIRTUAL_CIRCUIT_CLOSED    ((NTSTATUS) 0xC00000D6)
+#define STATUS_NO_SECURITY_ON_OBJECT     ((NTSTATUS) 0xC00000D7)
+#define STATUS_CANT_WAIT                 ((NTSTATUS) 0xC00000D8)
+#define STATUS_PIPE_EMPTY                ((NTSTATUS) 0xC00000D9)
+#define STATUS_CANT_ACCESS_DOMAIN_INFO   ((NTSTATUS) 0xC00000DA)
+#define STATUS_CANT_TERMINATE_SELF       ((NTSTATUS) 0xC00000DB)
+#define STATUS_INVALID_SERVER_STATE      ((NTSTATUS) 0xC00000DC)
+#define STATUS_INVALID_DOMAIN_STATE      ((NTSTATUS) 0xC00000DD)
+#define STATUS_INVALID_DOMAIN_ROLE       ((NTSTATUS) 0xC00000DE)
+#define STATUS_NO_SUCH_DOMAIN            ((NTSTATUS) 0xC00000DF)
+#define STATUS_DOMAIN_EXISTS             ((NTSTATUS) 0xC00000E0)
+#define STATUS_DOMAIN_LIMIT_EXCEEDED     ((NTSTATUS) 0xC00000E1)
+#define STATUS_OPLOCK_NOT_GRANTED        ((NTSTATUS) 0xC00000E2)
+#define STATUS_INVALID_OPLOCK_PROTOCOL   ((NTSTATUS) 0xC00000E3)
+#define STATUS_INTERNAL_DB_CORRUPTION    ((NTSTATUS) 0xC00000E4)
+#define STATUS_INTERNAL_ERROR            ((NTSTATUS) 0xC00000E5)
+#define STATUS_GENERIC_NOT_MAPPED        ((NTSTATUS) 0xC00000E6)
+#define STATUS_BAD_DESCRIPTOR_FORMAT     ((NTSTATUS) 0xC00000E7)
+#define STATUS_INVALID_USER_BUFFER       ((NTSTATUS) 0xC00000E8)
+#define STATUS_UNEXPECTED_IO_ERROR       ((NTSTATUS) 0xC00000E9)
+#define STATUS_UNEXPECTED_MM_CREATE_ERR  ((NTSTATUS) 0xC00000EA)
+#define STATUS_UNEXPECTED_MM_MAP_ERROR   ((NTSTATUS) 0xC00000EB)
+#define STATUS_UNEXPECTED_MM_EXTEND_ERR  ((NTSTATUS) 0xC00000EC)
+#define STATUS_NOT_LOGON_PROCESS         ((NTSTATUS) 0xC00000ED)
+#define STATUS_LOGON_SESSION_EXISTS      ((NTSTATUS) 0xC00000EE)
+#define STATUS_INVALID_PARAMETER_1       ((NTSTATUS) 0xC00000EF)
+#define STATUS_INVALID_PARAMETER_2       ((NTSTATUS) 0xC00000F0)
+#define STATUS_INVALID_PARAMETER_3       ((NTSTATUS) 0xC00000F1)
+#define STATUS_INVALID_PARAMETER_4       ((NTSTATUS) 0xC00000F2)
+#define STATUS_INVALID_PARAMETER_5       ((NTSTATUS) 0xC00000F3)
+#define STATUS_INVALID_PARAMETER_6       ((NTSTATUS) 0xC00000F4)
+#define STATUS_INVALID_PARAMETER_7       ((NTSTATUS) 0xC00000F5)
+#define STATUS_INVALID_PARAMETER_8       ((NTSTATUS) 0xC00000F6)
+#define STATUS_INVALID_PARAMETER_9       ((NTSTATUS) 0xC00000F7)
+#define STATUS_INVALID_PARAMETER_10      ((NTSTATUS) 0xC00000F8)
+#define STATUS_INVALID_PARAMETER_11      ((NTSTATUS) 0xC00000F9)
+#define STATUS_INVALID_PARAMETER_12      ((NTSTATUS) 0xC00000FA)
+#define STATUS_REDIRECTOR_NOT_STARTED    ((NTSTATUS) 0xC00000FB)
+#define STATUS_REDIRECTOR_STARTED        ((NTSTATUS) 0xC00000FC)
+#define STATUS_STACK_OVERFLOW            ((NTSTATUS) 0xC00000FD)
+#define STATUS_NO_SUCH_PACKAGE           ((NTSTATUS) 0xC00000FE)
+#define STATUS_BAD_FUNCTION_TABLE        ((NTSTATUS) 0xC00000FF)
+#define STATUS_VARIABLE_NOT_FOUND        ((NTSTATUS) 0xC0000100)
+#define STATUS_DIRECTORY_NOT_EMPTY       ((NTSTATUS) 0xC0000101)
+#define STATUS_FILE_CORRUPT_ERROR        ((NTSTATUS) 0xC0000102)
+#define STATUS_NOT_A_DIRECTORY           ((NTSTATUS) 0xC0000103)
+#define STATUS_BAD_LOGON_SESSION_STATE   ((NTSTATUS) 0xC0000104)
+#define STATUS_LOGON_SESSION_COLLISION   ((NTSTATUS) 0xC0000105)
+#define STATUS_NAME_TOO_LONG             ((NTSTATUS) 0xC0000106)
+#define STATUS_FILES_OPEN                ((NTSTATUS) 0xC0000107)
+#define STATUS_CONNECTION_IN_USE         ((NTSTATUS) 0xC0000108)
+#define STATUS_MESSAGE_NOT_FOUND         ((NTSTATUS) 0xC0000109)
+#define STATUS_PROCESS_IS_TERMINATING    ((NTSTATUS) 0xC000010A)
+#define STATUS_INVALID_LOGON_TYPE        ((NTSTATUS) 0xC000010B)
+#define STATUS_NO_GUID_TRANSLATION       ((NTSTATUS) 0xC000010C)
+#define STATUS_CANNOT_IMPERSONATE        ((NTSTATUS) 0xC000010D)
+#define STATUS_IMAGE_ALREADY_LOADED      ((NTSTATUS) 0xC000010E)
+#define STATUS_ABIOS_NOT_PRESENT         ((NTSTATUS) 0xC000010F)
+#define STATUS_ABIOS_LID_NOT_EXIST       ((NTSTATUS) 0xC0000110)
+#define STATUS_ABIOS_LID_ALREADY_OWNED   ((NTSTATUS) 0xC0000111)
+#define STATUS_ABIOS_NOT_LID_OWNER       ((NTSTATUS) 0xC0000112)
+#define STATUS_ABIOS_INVALID_COMMAND     ((NTSTATUS) 0xC0000113)
+#define STATUS_ABIOS_INVALID_LID         ((NTSTATUS) 0xC0000114)
+#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS) 0xC0000115)
+#define STATUS_ABIOS_INVALID_SELECTOR    ((NTSTATUS) 0xC0000116)
+#define STATUS_NO_LDT                    ((NTSTATUS) 0xC0000117)
+#define STATUS_INVALID_LDT_SIZE          ((NTSTATUS) 0xC0000118)
+#define STATUS_INVALID_LDT_OFFSET        ((NTSTATUS) 0xC0000119)
+#define STATUS_INVALID_LDT_DESCRIPTOR    ((NTSTATUS) 0xC000011A)
+#define STATUS_INVALID_IMAGE_NE_FORMAT   ((NTSTATUS) 0xC000011B)
+#define STATUS_RXACT_INVALID_STATE       ((NTSTATUS) 0xC000011C)
+#define STATUS_RXACT_COMMIT_FAILURE      ((NTSTATUS) 0xC000011D)
+#define STATUS_MAPPED_FILE_SIZE_ZERO     ((NTSTATUS) 0xC000011E)
+#define STATUS_TOO_MANY_OPENED_FILES     ((NTSTATUS) 0xC000011F)
+#define STATUS_CANCELLED                 ((NTSTATUS) 0xC0000120)
+#define STATUS_CANNOT_DELETE             ((NTSTATUS) 0xC0000121)
+#define STATUS_INVALID_COMPUTER_NAME     ((NTSTATUS) 0xC0000122)
+#define STATUS_FILE_DELETED              ((NTSTATUS) 0xC0000123)
+#define STATUS_SPECIAL_ACCOUNT           ((NTSTATUS) 0xC0000124)
+#define STATUS_SPECIAL_GROUP             ((NTSTATUS) 0xC0000125)
+#define STATUS_SPECIAL_USER              ((NTSTATUS) 0xC0000126)
+#define STATUS_MEMBERS_PRIMARY_GROUP     ((NTSTATUS) 0xC0000127)
+#define STATUS_FILE_CLOSED               ((NTSTATUS) 0xC0000128)
+#define STATUS_TOO_MANY_THREADS          ((NTSTATUS) 0xC0000129)
+#define STATUS_THREAD_NOT_IN_PROCESS     ((NTSTATUS) 0xC000012A)
+#define STATUS_TOKEN_ALREADY_IN_USE      ((NTSTATUS) 0xC000012B)
+#define STATUS_PAGEFILE_QUOTA_EXCEEDED   ((NTSTATUS) 0xC000012C)
+#define STATUS_COMMITMENT_LIMIT          ((NTSTATUS) 0xC000012D)
+#define STATUS_INVALID_IMAGE_LE_FORMAT   ((NTSTATUS) 0xC000012E)
+#define STATUS_INVALID_IMAGE_NOT_MZ      ((NTSTATUS) 0xC000012F)
+#define STATUS_INVALID_IMAGE_PROTECT     ((NTSTATUS) 0xC0000130)
+#define STATUS_INVALID_IMAGE_WIN_16      ((NTSTATUS) 0xC0000131)
+#define STATUS_LOGON_SERVER_CONFLICT     ((NTSTATUS) 0xC0000132)
+#define STATUS_TIME_DIFFERENCE_AT_DC     ((NTSTATUS) 0xC0000133)
+#define STATUS_SYNCHRONIZATION_REQUIRED  ((NTSTATUS) 0xC0000134)
+#define STATUS_DLL_NOT_FOUND             ((NTSTATUS) 0xC0000135)
+#define STATUS_OPEN_FAILED               ((NTSTATUS) 0xC0000136)
+#define STATUS_IO_PRIVILEGE_FAILED       ((NTSTATUS) 0xC0000137)
+#define STATUS_ORDINAL_NOT_FOUND         ((NTSTATUS) 0xC0000138)
+#define STATUS_ENTRYPOINT_NOT_FOUND      ((NTSTATUS) 0xC0000139)
+#define STATUS_CONTROL_C_EXIT            ((NTSTATUS) 0xC000013A)
+#define STATUS_LOCAL_DISCONNECT          ((NTSTATUS) 0xC000013B)
+#define STATUS_REMOTE_DISCONNECT         ((NTSTATUS) 0xC000013C)
+#define STATUS_REMOTE_RESOURCES          ((NTSTATUS) 0xC000013D)
+#define STATUS_LINK_FAILED               ((NTSTATUS) 0xC000013E)
+#define STATUS_LINK_TIMEOUT              ((NTSTATUS) 0xC000013F)
+#define STATUS_INVALID_CONNECTION        ((NTSTATUS) 0xC0000140)
+#define STATUS_INVALID_ADDRESS           ((NTSTATUS) 0xC0000141)
+#define STATUS_DLL_INIT_FAILED           ((NTSTATUS) 0xC0000142)
+#define STATUS_MISSING_SYSTEMFILE        ((NTSTATUS) 0xC0000143)
+#define STATUS_UNHANDLED_EXCEPTION       ((NTSTATUS) 0xC0000144)
+#define STATUS_APP_INIT_FAILURE          ((NTSTATUS) 0xC0000145)
+#define STATUS_PAGEFILE_CREATE_FAILED    ((NTSTATUS) 0xC0000146)
+#define STATUS_NO_PAGEFILE               ((NTSTATUS) 0xC0000147)
+#define STATUS_INVALID_LEVEL             ((NTSTATUS) 0xC0000148)
+#define STATUS_WRONG_PASSWORD_CORE       ((NTSTATUS) 0xC0000149)
+#define STATUS_ILLEGAL_FLOAT_CONTEXT     ((NTSTATUS) 0xC000014A)
+#define STATUS_PIPE_BROKEN               ((NTSTATUS) 0xC000014B)
+#define STATUS_REGISTRY_CORRUPT          ((NTSTATUS) 0xC000014C)
+#define STATUS_REGISTRY_IO_FAILED        ((NTSTATUS) 0xC000014D)
+#define STATUS_NO_EVENT_PAIR             ((NTSTATUS) 0xC000014E)
+#define STATUS_UNRECOGNIZED_VOLUME       ((NTSTATUS) 0xC000014F)
+#define STATUS_SERIAL_NO_DEVICE_INITED   ((NTSTATUS) 0xC0000150)
+#define STATUS_NO_SUCH_ALIAS             ((NTSTATUS) 0xC0000151)
+#define STATUS_MEMBER_NOT_IN_ALIAS       ((NTSTATUS) 0xC0000152)
+#define STATUS_MEMBER_IN_ALIAS           ((NTSTATUS) 0xC0000153)
+#define STATUS_ALIAS_EXISTS              ((NTSTATUS) 0xC0000154)
+#define STATUS_LOGON_NOT_GRANTED         ((NTSTATUS) 0xC0000155)
+#define STATUS_TOO_MANY_SECRETS          ((NTSTATUS) 0xC0000156)
+#define STATUS_SECRET_TOO_LONG           ((NTSTATUS) 0xC0000157)
+#define STATUS_INTERNAL_DB_ERROR         ((NTSTATUS) 0xC0000158)
+#define STATUS_FULLSCREEN_MODE           ((NTSTATUS) 0xC0000159)
+#define STATUS_TOO_MANY_CONTEXT_IDS      ((NTSTATUS) 0xC000015A)
+#define STATUS_LOGON_TYPE_NOT_GRANTED    ((NTSTATUS) 0xC000015B)
+#define STATUS_NOT_REGISTRY_FILE         ((NTSTATUS) 0xC000015C)
+#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000015D)
+#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS) 0xC000015E)
+#define STATUS_FT_MISSING_MEMBER         ((NTSTATUS) 0xC000015F)
+#define STATUS_ILL_FORMED_SERVICE_ENTRY  ((NTSTATUS) 0xC0000160)
+#define STATUS_ILLEGAL_CHARACTER         ((NTSTATUS) 0xC0000161)
+#define STATUS_UNMAPPABLE_CHARACTER      ((NTSTATUS) 0xC0000162)
+#define STATUS_UNDEFINED_CHARACTER       ((NTSTATUS) 0xC0000163)
+#define STATUS_FLOPPY_VOLUME             ((NTSTATUS) 0xC0000164)
+#define STATUS_FLOPPY_ID_MARK_NOT_FOUND  ((NTSTATUS) 0xC0000165)
+#define STATUS_FLOPPY_WRONG_CYLINDER     ((NTSTATUS) 0xC0000166)
+#define STATUS_FLOPPY_UNKNOWN_ERROR      ((NTSTATUS) 0xC0000167)
+#define STATUS_FLOPPY_BAD_REGISTERS      ((NTSTATUS) 0xC0000168)
+#define STATUS_DISK_RECALIBRATE_FAILED   ((NTSTATUS) 0xC0000169)
+#define STATUS_DISK_OPERATION_FAILED     ((NTSTATUS) 0xC000016A)
+#define STATUS_DISK_RESET_FAILED         ((NTSTATUS) 0xC000016B)
+#define STATUS_SHARED_IRQ_BUSY           ((NTSTATUS) 0xC000016C)
+#define STATUS_FT_ORPHANING              ((NTSTATUS) 0xC000016D)
+#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS) 0xC000016E)
+
+#define STATUS_PARTITION_FAILURE         ((NTSTATUS) 0xC0000172)
+#define STATUS_INVALID_BLOCK_LENGTH      ((NTSTATUS) 0xC0000173)
+#define STATUS_DEVICE_NOT_PARTITIONED    ((NTSTATUS) 0xC0000174)
+#define STATUS_UNABLE_TO_LOCK_MEDIA      ((NTSTATUS) 0xC0000175)
+#define STATUS_UNABLE_TO_UNLOAD_MEDIA    ((NTSTATUS) 0xC0000176)
+#define STATUS_EOM_OVERFLOW              ((NTSTATUS) 0xC0000177)
+#define STATUS_NO_MEDIA                  ((NTSTATUS) 0xC0000178)
+#define STATUS_NO_SUCH_MEMBER            ((NTSTATUS) 0xC000017A)
+#define STATUS_INVALID_MEMBER            ((NTSTATUS) 0xC000017B)
+#define STATUS_KEY_DELETED               ((NTSTATUS) 0xC000017C)
+#define STATUS_NO_LOG_SPACE              ((NTSTATUS) 0xC000017D)
+#define STATUS_TOO_MANY_SIDS             ((NTSTATUS) 0xC000017E)
+#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000017F)
+#define STATUS_KEY_HAS_CHILDREN          ((NTSTATUS) 0xC0000180)
+#define STATUS_CHILD_MUST_BE_VOLATILE    ((NTSTATUS) 0xC0000181)
+#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS) 0xC0000182)
+#define STATUS_DRIVER_INTERNAL_ERROR     ((NTSTATUS) 0xC0000183)
+#define STATUS_INVALID_DEVICE_STATE      ((NTSTATUS) 0xC0000184)
+#define STATUS_IO_DEVICE_ERROR           ((NTSTATUS) 0xC0000185)
+#define STATUS_DEVICE_PROTOCOL_ERROR     ((NTSTATUS) 0xC0000186)
+#define STATUS_BACKUP_CONTROLLER         ((NTSTATUS) 0xC0000187)
+#define STATUS_LOG_FILE_FULL             ((NTSTATUS) 0xC0000188)
+#define STATUS_TOO_LATE                  ((NTSTATUS) 0xC0000189)
+#define STATUS_NO_TRUST_LSA_SECRET       ((NTSTATUS) 0xC000018A)
+#define STATUS_NO_TRUST_SAM_ACCOUNT      ((NTSTATUS) 0xC000018B)
+#define STATUS_TRUSTED_DOMAIN_FAILURE    ((NTSTATUS) 0xC000018C)
+#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS) 0xC000018D)
+#define STATUS_EVENTLOG_FILE_CORRUPT     ((NTSTATUS) 0xC000018E)
+#define STATUS_EVENTLOG_CANT_START       ((NTSTATUS) 0xC000018F)
+#define STATUS_TRUST_FAILURE             ((NTSTATUS) 0xC0000190)
+#define STATUS_MUTANT_LIMIT_EXCEEDED     ((NTSTATUS) 0xC0000191)
+#define STATUS_NETLOGON_NOT_STARTED      ((NTSTATUS) 0xC0000192)
+#define STATUS_ACCOUNT_EXPIRED           ((NTSTATUS) 0xC0000193)
+#define STATUS_POSSIBLE_DEADLOCK         ((NTSTATUS) 0xC0000194)
+#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS) 0xC0000195)
+#define STATUS_REMOTE_SESSION_LIMIT      ((NTSTATUS) 0xC0000196)
+#define STATUS_EVENTLOG_FILE_CHANGED     ((NTSTATUS) 0xC0000197)
+#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS) 0xC0000198)
+#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS) 0xC0000199)
+#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS) 0xC000019A)
+#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS) 0xC000019B)
+#define STATUS_FS_DRIVER_REQUIRED        ((NTSTATUS) 0xC000019C)
+#define STATUS_NO_USER_SESSION_KEY       ((NTSTATUS) 0xC0000202)
+#define STATUS_USER_SESSION_DELETED      ((NTSTATUS) 0xC0000203)
+#define STATUS_RESOURCE_LANG_NOT_FOUND   ((NTSTATUS) 0xC0000204)
+#define STATUS_INSUFF_SERVER_RESOURCES   ((NTSTATUS) 0xC0000205)
+#define STATUS_INVALID_BUFFER_SIZE       ((NTSTATUS) 0xC0000206)
+#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS) 0xC0000207)
+#define STATUS_INVALID_ADDRESS_WILDCARD  ((NTSTATUS) 0xC0000208)
+#define STATUS_TOO_MANY_ADDRESSES        ((NTSTATUS) 0xC0000209)
+#define STATUS_ADDRESS_ALREADY_EXISTS    ((NTSTATUS) 0xC000020A)
+#define STATUS_ADDRESS_CLOSED            ((NTSTATUS) 0xC000020B)
+#define STATUS_CONNECTION_DISCONNECTED   ((NTSTATUS) 0xC000020C)
+#define STATUS_CONNECTION_RESET          ((NTSTATUS) 0xC000020D)
+#define STATUS_TOO_MANY_NODES            ((NTSTATUS) 0xC000020E)
+#define STATUS_TRANSACTION_ABORTED       ((NTSTATUS) 0xC000020F)
+#define STATUS_TRANSACTION_TIMED_OUT     ((NTSTATUS) 0xC0000210)
+#define STATUS_TRANSACTION_NO_RELEASE    ((NTSTATUS) 0xC0000211)
+#define STATUS_TRANSACTION_NO_MATCH      ((NTSTATUS) 0xC0000212)
+#define STATUS_TRANSACTION_RESPONDED     ((NTSTATUS) 0xC0000213)
+#define STATUS_TRANSACTION_INVALID_ID    ((NTSTATUS) 0xC0000214)
+#define STATUS_TRANSACTION_INVALID_TYPE  ((NTSTATUS) 0xC0000215)
+#define STATUS_NOT_SERVER_SESSION        ((NTSTATUS) 0xC0000216)
+#define STATUS_NOT_CLIENT_SESSION        ((NTSTATUS) 0xC0000217)
+#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS) 0xC0000218)
+#define STATUS_DEBUG_ATTACH_FAILED       ((NTSTATUS) 0xC0000219)
+#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS) 0xC000021A)
+#define STATUS_DATA_NOT_ACCEPTED         ((NTSTATUS) 0xC000021B)
+#define STATUS_NO_BROWSER_SERVERS_FOUND  ((NTSTATUS) 0xC000021C)
+#define STATUS_VDM_HARD_ERROR            ((NTSTATUS) 0xC000021D)
+#define STATUS_DRIVER_CANCEL_TIMEOUT     ((NTSTATUS) 0xC000021E)
+#define STATUS_REPLY_MESSAGE_MISMATCH    ((NTSTATUS) 0xC000021F)
+#define STATUS_MAPPED_ALIGNMENT          ((NTSTATUS) 0xC0000220)
+#define STATUS_IMAGE_CHECKSUM_MISMATCH   ((NTSTATUS) 0xC0000221)
+#define STATUS_LOST_WRITEBEHIND_DATA     ((NTSTATUS) 0xC0000222)
+#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS) 0xC0000223)
+#define STATUS_PASSWORD_MUST_CHANGE      ((NTSTATUS) 0xC0000224)
+#define STATUS_NOT_FOUND                 ((NTSTATUS) 0xC0000225)
+#define STATUS_NOT_TINY_STREAM           ((NTSTATUS) 0xC0000226)
+#define STATUS_RECOVERY_FAILURE          ((NTSTATUS) 0xC0000227)
+#define STATUS_STACK_OVERFLOW_READ       ((NTSTATUS) 0xC0000228)
+#define STATUS_FAIL_CHECK                ((NTSTATUS) 0xC0000229)
+#define STATUS_DUPLICATE_OBJECTID        ((NTSTATUS) 0xC000022A)
+#define STATUS_OBJECTID_EXISTS           ((NTSTATUS) 0xC000022B)
+#define STATUS_CONVERT_TO_LARGE          ((NTSTATUS) 0xC000022C)
+#define STATUS_RETRY                     ((NTSTATUS) 0xC000022D)
+#define STATUS_FOUND_OUT_OF_SCOPE        ((NTSTATUS) 0xC000022E)
+#define STATUS_ALLOCATE_BUCKET           ((NTSTATUS) 0xC000022F)
+#define STATUS_PROPSET_NOT_FOUND         ((NTSTATUS) 0xC0000230)
+#define STATUS_MARSHALL_OVERFLOW         ((NTSTATUS) 0xC0000231)
+#define STATUS_INVALID_VARIANT           ((NTSTATUS) 0xC0000232)
+#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS) 0xC0000233)
+#define STATUS_ACCOUNT_LOCKED_OUT        ((NTSTATUS) 0xC0000234)
+#define STATUS_HANDLE_NOT_CLOSABLE       ((NTSTATUS) 0xC0000235)
+#define STATUS_CONNECTION_REFUSED        ((NTSTATUS) 0xC0000236)
+#define STATUS_GRACEFUL_DISCONNECT       ((NTSTATUS) 0xC0000237)
+#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS) 0xC0000238)
+#define STATUS_ADDRESS_NOT_ASSOCIATED    ((NTSTATUS) 0xC0000239)
+#define STATUS_CONNECTION_INVALID        ((NTSTATUS) 0xC000023A)
+#define STATUS_CONNECTION_ACTIVE         ((NTSTATUS) 0xC000023B)
+#define STATUS_NETWORK_UNREACHABLE       ((NTSTATUS) 0xC000023C)
+#define STATUS_HOST_UNREACHABLE          ((NTSTATUS) 0xC000023D)
+#define STATUS_PROTOCOL_UNREACHABLE      ((NTSTATUS) 0xC000023E)
+#define STATUS_PORT_UNREACHABLE          ((NTSTATUS) 0xC000023F)
+#define STATUS_REQUEST_ABORTED           ((NTSTATUS) 0xC0000240)
+#define STATUS_CONNECTION_ABORTED        ((NTSTATUS) 0xC0000241)
+#define STATUS_BAD_COMPRESSION_BUFFER    ((NTSTATUS) 0xC0000242)
+#define STATUS_USER_MAPPED_FILE          ((NTSTATUS) 0xC0000243)
+#define STATUS_AUDIT_FAILED              ((NTSTATUS) 0xC0000244)
+#define STATUS_TIMER_RESOLUTION_NOT_SET  ((NTSTATUS) 0xC0000245)
+#define STATUS_CONNECTION_COUNT_LIMIT    ((NTSTATUS) 0xC0000246)
+#define STATUS_LOGIN_TIME_RESTRICTION    ((NTSTATUS) 0xC0000247)
+#define STATUS_LOGIN_WKSTA_RESTRICTION   ((NTSTATUS) 0xC0000248)
+#define STATUS_IMAGE_MP_UP_MISMATCH      ((NTSTATUS) 0xC0000249)
+#define STATUS_INSUFFICIENT_LOGON_INFO   ((NTSTATUS) 0xC0000250)
+#define STATUS_BAD_DLL_ENTRYPOINT        ((NTSTATUS) 0xC0000251)
+#define STATUS_BAD_SERVICE_ENTRYPOINT    ((NTSTATUS) 0xC0000252)
+#define STATUS_LPC_REPLY_LOST            ((NTSTATUS) 0xC0000253)
+#define STATUS_IP_ADDRESS_CONFLICT1      ((NTSTATUS) 0xC0000254)
+#define STATUS_IP_ADDRESS_CONFLICT2      ((NTSTATUS) 0xC0000255)
+#define STATUS_REGISTRY_QUOTA_LIMIT      ((NTSTATUS) 0xC0000256)
+#define STATUS_PATH_NOT_COVERED          ((NTSTATUS) 0xC0000257)
+#define STATUS_NO_CALLBACK_ACTIVE        ((NTSTATUS) 0xC0000258)
+#define STATUS_LICENSE_QUOTA_EXCEEDED    ((NTSTATUS) 0xC0000259)
+#define STATUS_PWD_TOO_SHORT             ((NTSTATUS) 0xC000025A)
+#define STATUS_PWD_TOO_RECENT            ((NTSTATUS) 0xC000025B)
+#define STATUS_PWD_HISTORY_CONFLICT      ((NTSTATUS) 0xC000025C)
+#define STATUS_PLUGPLAY_NO_DEVICE        ((NTSTATUS) 0xC000025E)
+#define STATUS_UNSUPPORTED_COMPRESSION   ((NTSTATUS) 0xC000025F)
+#define STATUS_INVALID_HW_PROFILE        ((NTSTATUS) 0xC0000260)
+#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS) 0xC0000261)
+#define STATUS_DRIVER_ORDINAL_NOT_FOUND  ((NTSTATUS) 0xC0000262)
+#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000263)
+#define STATUS_RESOURCE_NOT_OWNED        ((NTSTATUS) 0xC0000264)
+#define STATUS_TOO_MANY_LINKS            ((NTSTATUS) 0xC0000265)
+#define STATUS_QUOTA_LIST_INCONSISTENT   ((NTSTATUS) 0xC0000266)
+#define STATUS_FILE_IS_OFFLINE           ((NTSTATUS) 0xC0000267)
+#define STATUS_EVALUATION_EXPIRATION     ((NTSTATUS) 0xC0000268)
+#define STATUS_ILLEGAL_DLL_RELOCATION    ((NTSTATUS) 0xC0000269)
+#define STATUS_LICENSE_VIOLATION         ((NTSTATUS) 0xC000026A)
+#define STATUS_DLL_INIT_FAILED_LOGOFF    ((NTSTATUS) 0xC000026B)
+#define STATUS_DRIVER_UNABLE_TO_LOAD     ((NTSTATUS) 0xC000026C)
+#define STATUS_DFS_UNAVAILABLE           ((NTSTATUS) 0xC000026D)
+#define STATUS_VOLUME_DISMOUNTED         ((NTSTATUS) 0xC000026E)
+#define STATUS_WX86_INTERNAL_ERROR       ((NTSTATUS) 0xC000026F)
+#define STATUS_WX86_FLOAT_STACK_CHECK    ((NTSTATUS) 0xC0000270)
+#define STATUS_VALIDATE_CONTINUE         ((NTSTATUS) 0xC0000271)
+#define STATUS_NO_MATCH                  ((NTSTATUS) 0xC0000272)
+#define STATUS_NO_MORE_MATCHES           ((NTSTATUS) 0xC0000273)
+#define STATUS_NOT_A_REPARSE_POINT       ((NTSTATUS) 0xC0000275)
+#define STATUS_IO_REPARSE_TAG_INVALID    ((NTSTATUS) 0xC0000276)
+#define STATUS_IO_REPARSE_TAG_MISMATCH   ((NTSTATUS) 0xC0000277)
+#define STATUS_IO_REPARSE_DATA_INVALID   ((NTSTATUS) 0xC0000278)
+#define STATUS_IO_REPARSE_TAG_NOT_HANDLED       ((NTSTATUS) 0xC0000279)
+#define STATUS_REPARSE_POINT_NOT_RESOLVED       ((NTSTATUS) 0xC0000280)
+#define STATUS_DIRECTORY_IS_A_REPARSE_POINT     ((NTSTATUS) 0xC0000281)
+#define STATUS_RANGE_LIST_CONFLICT       ((NTSTATUS) 0xC0000282)
+#define STATUS_SOURCE_ELEMENT_EMPTY      ((NTSTATUS) 0xC0000283)
+#define STATUS_DESTINATION_ELEMENT_FULL  ((NTSTATUS) 0xC0000284)
+#define STATUS_ILLEGAL_ELEMENT_ADDRESS   ((NTSTATUS) 0xC0000285)
+#define STATUS_MAGAZINE_NOT_PRESENT      ((NTSTATUS) 0xC0000286)
+#define STATUS_REINITIALIZATION_NEEDED   ((NTSTATUS) 0xC0000287)
+#define STATUS_ENCRYPTION_FAILED         ((NTSTATUS) 0xC000028A)
+#define STATUS_DECRYPTION_FAILED         ((NTSTATUS) 0xC000028B)
+#define STATUS_RANGE_NOT_FOUND           ((NTSTATUS) 0xC000028C)
+#define STATUS_NO_RECOVERY_POLICY        ((NTSTATUS) 0xC000028D)
+#define STATUS_NO_EFS                    ((NTSTATUS) 0xC000028E)
+#define STATUS_WRONG_EFS                 ((NTSTATUS) 0xC000028F)
+#define STATUS_NO_USER_KEYS              ((NTSTATUS) 0xC0000290)
+#define STATUS_FILE_NOT_ENCRYPTED        ((NTSTATUS) 0xC0000291)
+#define STATUS_NOT_EXPORT_FORMAT         ((NTSTATUS) 0xC0000292)
+#define STATUS_FILE_ENCRYPTED            ((NTSTATUS) 0xC0000293)
+#define STATUS_WMI_GUID_NOT_FOUND        ((NTSTATUS) 0xC0000295)
+#define STATUS_WMI_INSTANCE_NOT_FOUND    ((NTSTATUS) 0xC0000296)
+#define STATUS_WMI_ITEMID_NOT_FOUND      ((NTSTATUS) 0xC0000297)
+#define STATUS_WMI_TRY_AGAIN             ((NTSTATUS) 0xC0000298)
+#define STATUS_SHARED_POLICY             ((NTSTATUS) 0xC0000299)
+#define STATUS_POLICY_OBJECT_NOT_FOUND   ((NTSTATUS) 0xC000029A)
+#define STATUS_POLICY_ONLY_IN_DS         ((NTSTATUS) 0xC000029B)
+#define STATUS_VOLUME_NOT_UPGRADED       ((NTSTATUS) 0xC000029C)
+#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS) 0xC000029D)
+#define STATUS_REMOTE_STORAGE_MEDIA_ERROR       ((NTSTATUS) 0xC000029E)
+#define STATUS_NO_TRACKING_SERVICE       ((NTSTATUS) 0xC000029F)
+#define STATUS_SERVER_SID_MISMATCH       ((NTSTATUS) 0xC00002A0)
+#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE  ((NTSTATUS) 0xC00002A1)
+#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX      ((NTSTATUS) 0xC00002A2)
+#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED      ((NTSTATUS) 0xC00002A3)
+#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS     ((NTSTATUS) 0xC00002A4)
+#define STATUS_DS_BUSY                   ((NTSTATUS) 0xC00002A5)
+#define STATUS_DS_UNAVAILABLE            ((NTSTATUS) 0xC00002A6)
+#define STATUS_DS_NO_RIDS_ALLOCATED      ((NTSTATUS) 0xC00002A7)
+#define STATUS_DS_NO_MORE_RIDS           ((NTSTATUS) 0xC00002A8)
+#define STATUS_DS_INCORRECT_ROLE_OWNER   ((NTSTATUS) 0xC00002A9)
+#define STATUS_DS_RIDMGR_INIT_ERROR      ((NTSTATUS) 0xC00002AA)
+#define STATUS_DS_OBJ_CLASS_VIOLATION    ((NTSTATUS) 0xC00002AB)
+#define STATUS_DS_CANT_ON_NON_LEAF       ((NTSTATUS) 0xC00002AC)
+#define STATUS_DS_CANT_ON_RDN            ((NTSTATUS) 0xC00002AD)
+#define STATUS_DS_CANT_MOD_OBJ_CLASS     ((NTSTATUS) 0xC00002AE)
+#define STATUS_DS_CROSS_DOM_MOVE_FAILED  ((NTSTATUS) 0xC00002AF)
+#define STATUS_DS_GC_NOT_AVAILABLE       ((NTSTATUS) 0xC00002B0)
+#define STATUS_DIRECTORY_SERVICE_REQUIRED       ((NTSTATUS) 0xC00002B1)
+#define STATUS_REPARSE_ATTRIBUTE_CONFLICT       ((NTSTATUS) 0xC00002B2)
+#define STATUS_CANT_ENABLE_DENY_ONLY     ((NTSTATUS) 0xC00002B3)
+#define STATUS_FLOAT_MULTIPLE_FAULTS     ((NTSTATUS) 0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS      ((NTSTATUS) 0xC00002B5)
+#define STATUS_DEVICE_REMOVED            ((NTSTATUS) 0xC00002B6)
+#define STATUS_JOURNAL_DELETE_IN_PROGRESS       ((NTSTATUS) 0xC00002B7)
+#define STATUS_JOURNAL_NOT_ACTIVE        ((NTSTATUS) 0xC00002B8)
+#define STATUS_NOINTERFACE               ((NTSTATUS) 0xC00002B9)
+#define STATUS_DS_ADMIN_LIMIT_EXCEEDED   ((NTSTATUS) 0xC00002C1)
+#define STATUS_DRIVER_FAILED_SLEEP       ((NTSTATUS) 0xC00002C2)
+#define STATUS_MUTUAL_AUTHENTICATION_FAILED     ((NTSTATUS) 0xC00002C3)
+#define STATUS_CORRUPT_SYSTEM_FILE       ((NTSTATUS) 0xC00002C4)
+#define STATUS_DATATYPE_MISALIGNMENT_ERROR      ((NTSTATUS) 0xC00002C5)
+#define STATUS_WMI_READ_ONLY             ((NTSTATUS) 0xC00002C6)
+#define STATUS_WMI_SET_FAILURE           ((NTSTATUS) 0xC00002C7)
+#define STATUS_COMMITMENT_MINIMUM        ((NTSTATUS) 0xC00002C8)
+#define STATUS_REG_NAT_CONSUMPTION       ((NTSTATUS) 0xC00002C9)
+#define STATUS_TRANSPORT_FULL            ((NTSTATUS) 0xC00002CA)
+#define STATUS_DS_SAM_INIT_FAILURE       ((NTSTATUS) 0xC00002CB)
+#define STATUS_ONLY_IF_CONNECTED         ((NTSTATUS) 0xC00002CC)
+#define STATUS_DS_SENSITIVE_GROUP_VIOLATION     ((NTSTATUS) 0xC00002CD)
+#define STATUS_PNP_RESTART_ENUMERATION   ((NTSTATUS) 0xC00002CE)
+#define STATUS_JOURNAL_ENTRY_DELETED     ((NTSTATUS) 0xC00002CF)
+#define STATUS_DS_CANT_MOD_PRIMARYGROUPID       ((NTSTATUS) 0xC00002D0)
+#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS) 0xC00002D1)
+#define STATUS_PNP_REBOOT_REQUIRED       ((NTSTATUS) 0xC00002D2)
+#define STATUS_POWER_STATE_INVALID       ((NTSTATUS) 0xC00002D3)
+#define STATUS_DS_INVALID_GROUP_TYPE     ((NTSTATUS) 0xC00002D4)
+#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN    ((NTSTATUS) 0xC00002D5)
+#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN     ((NTSTATUS) 0xC00002D6)
+#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D7)
+#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER     ((NTSTATUS) 0xC00002D8)
+#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER      ((NTSTATUS) 0xC00002D9)
+#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER   ((NTSTATUS) 0xC00002DA)
+#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER      ((NTSTATUS) 0xC00002DB)
+#define STATUS_DS_HAVE_PRIMARY_MEMBERS   ((NTSTATUS) 0xC00002DC)
+#define STATUS_WMI_NOT_SUPPORTED         ((NTSTATUS) 0xC00002DD)
+#define STATUS_INSUFFICIENT_POWER        ((NTSTATUS) 0xC00002DE)
+#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS) 0xC00002DF)
+#define STATUS_SAM_NEED_BOOTKEY_FLOPPY   ((NTSTATUS) 0xC00002E0)
+#define STATUS_DS_CANT_START             ((NTSTATUS) 0xC00002E1)
+#define STATUS_DS_INIT_FAILURE           ((NTSTATUS) 0xC00002E2)
+#define STATUS_SAM_INIT_FAILURE          ((NTSTATUS) 0xC00002E3)
+#define STATUS_DS_GC_REQUIRED            ((NTSTATUS) 0xC00002E4)
+#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY    ((NTSTATUS) 0xC00002E5)
+#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS    ((NTSTATUS) 0xC00002E6)
+#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED        ((NTSTATUS) 0xC00002E7)
+#define STATUS_MULTIPLE_FAULT_VIOLATION  ((NTSTATUS) 0xC00002E8)
+#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED       ((NTSTATUS) 0xC00002E9)
+#define STATUS_CANNOT_MAKE               ((NTSTATUS) 0xC00002EA)
+#define STATUS_SYSTEM_SHUTDOWN           ((NTSTATUS) 0xC00002EB)
+#define STATUS_DS_INIT_FAILURE_CONSOLE   ((NTSTATUS) 0xC00002EC)
+#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE      ((NTSTATUS) 0xC00002ED)
+#define STATUS_UNFINISHED_CONTEXT_DELETED       ((NTSTATUS) 0xC00002EE)
+#define STATUS_NO_TGT_REPLY              ((NTSTATUS) 0xC00002EF)
+#define STATUS_OBJECTID_NOT_FOUND        ((NTSTATUS) 0xC00002F0)
+#define STATUS_NO_IP_ADDRESSES           ((NTSTATUS) 0xC00002F1)
+#define STATUS_WRONG_CREDENTIAL_HANDLE   ((NTSTATUS) 0xC00002F2)
+#define STATUS_CRYPTO_SYSTEM_INVALID     ((NTSTATUS) 0xC00002F3)
+#define STATUS_MAX_REFERRALS_EXCEEDED    ((NTSTATUS) 0xC00002F4)
+#define STATUS_MUST_BE_KDC               ((NTSTATUS) 0xC00002F5)
+#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED      ((NTSTATUS) 0xC00002F6)
+#define STATUS_TOO_MANY_PRINCIPALS       ((NTSTATUS) 0xC00002F7)
+#define STATUS_NO_PA_DATA                ((NTSTATUS) 0xC00002F8)
+#define STATUS_PKINIT_NAME_MISMATCH      ((NTSTATUS) 0xC00002F9)
+#define STATUS_SMARTCARD_LOGON_REQUIRED  ((NTSTATUS) 0xC00002FA)
+#define STATUS_KDC_INVALID_REQUEST       ((NTSTATUS) 0xC00002FB)
+#define STATUS_KDC_UNABLE_TO_REFER       ((NTSTATUS) 0xC00002FC)
+#define STATUS_KDC_UNKNOWN_ETYPE         ((NTSTATUS) 0xC00002FD)
+#define STATUS_SHUTDOWN_IN_PROGRESS      ((NTSTATUS) 0xC00002FE)
+#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS      ((NTSTATUS) 0xC00002FF)
+#define STATUS_NOT_SUPPORTED_ON_SBS      ((NTSTATUS) 0xC0000300)
+#define STATUS_WMI_GUID_DISCONNECTED     ((NTSTATUS) 0xC0000301)
+#define STATUS_WMI_ALREADY_DISABLED      ((NTSTATUS) 0xC0000302)
+#define STATUS_WMI_ALREADY_ENABLED       ((NTSTATUS) 0xC0000303)
+#define STATUS_MFT_TOO_FRAGMENTED        ((NTSTATUS) 0xC0000304)
+#define STATUS_COPY_PROTECTION_FAILURE   ((NTSTATUS) 0xC0000305)
+#define STATUS_CSS_AUTHENTICATION_FAILURE       ((NTSTATUS) 0xC0000306)
+#define STATUS_CSS_KEY_NOT_PRESENT       ((NTSTATUS) 0xC0000307)
+#define STATUS_CSS_KEY_NOT_ESTABLISHED   ((NTSTATUS) 0xC0000308)
+#define STATUS_CSS_SCRAMBLED_SECTOR      ((NTSTATUS) 0xC0000309)
+#define STATUS_CSS_REGION_MISMATCH       ((NTSTATUS) 0xC000030A)
+#define STATUS_CSS_RESETS_EXHAUSTED      ((NTSTATUS) 0xC000030B)
+#define STATUS_PKINIT_FAILURE            ((NTSTATUS) 0xC0000320)
+#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE      ((NTSTATUS) 0xC0000321)
+#define STATUS_NO_KERB_KEY               ((NTSTATUS) 0xC0000322)
+#define STATUS_HOST_DOWN                 ((NTSTATUS) 0xC0000350)
+#define STATUS_UNSUPPORTED_PREAUTH       ((NTSTATUS) 0xC0000351)
+#define STATUS_EFS_ALG_BLOB_TOO_BIG      ((NTSTATUS) 0xC0000352)
+#define STATUS_PORT_NOT_SET              ((NTSTATUS) 0xC0000353)
+#define STATUS_DEBUGGER_INACTIVE         ((NTSTATUS) 0xC0000354)
+#define STATUS_DS_VERSION_CHECK_FAILURE  ((NTSTATUS) 0xC0000355)
+#define STATUS_AUDITING_DISABLED         ((NTSTATUS) 0xC0000356)
+#define STATUS_PRENT4_MACHINE_ACCOUNT    ((NTSTATUS) 0xC0000357)
+#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC0000358)
+#define STATUS_INVALID_IMAGE_WIN_32      ((NTSTATUS) 0xC0000359)
+#define STATUS_INVALID_IMAGE_WIN_64      ((NTSTATUS) 0xC000035A)
+#define STATUS_BAD_BINDINGS              ((NTSTATUS) 0xC000035B)
+#define STATUS_NETWORK_SESSION_EXPIRED   ((NTSTATUS) 0xC000035C)
+#define STATUS_APPHELP_BLOCK             ((NTSTATUS) 0xC000035D)
+#define STATUS_ALL_SIDS_FILTERED         ((NTSTATUS) 0xC000035E)
+#define STATUS_NOT_SAFE_MODE_DRIVER      ((NTSTATUS) 0xC000035F)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT        ((NTSTATUS) 0xC0000361)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH   ((NTSTATUS) 0xC0000362)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER      ((NTSTATUS) 0xC0000363)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER  ((NTSTATUS) 0xC0000364)
+#define STATUS_FAILED_DRIVER_ENTRY       ((NTSTATUS) 0xC0000365)
+#define STATUS_DEVICE_ENUMERATION_ERROR  ((NTSTATUS) 0xC0000366)
+#define STATUS_WAIT_FOR_OPLOCK           ((NTSTATUS) 0x00000367)
+#define STATUS_MOUNT_POINT_NOT_RESOLVED  ((NTSTATUS) 0xC0000368)
+#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS) 0xC0000369)
+/* STATUS_MCA_OCCURED is not a typo, as per Microsoft's headers */
+#define STATUS_MCA_OCCURED               ((NTSTATUS) 0xC000036A)
+#define STATUS_DRIVER_BLOCKED_CRITICAL   ((NTSTATUS) 0xC000036B)
+#define STATUS_DRIVER_BLOCKED            ((NTSTATUS) 0xC000036C)
+#define STATUS_DRIVER_DATABASE_ERROR     ((NTSTATUS) 0xC000036D)
+#define STATUS_SYSTEM_HIVE_TOO_LARGE     ((NTSTATUS) 0xC000036E)
+#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS) 0xC000036F)
+#define STATUS_SMARTCARD_WRONG_PIN       ((NTSTATUS) 0xC0000380)
+#define STATUS_SMARTCARD_CARD_BLOCKED    ((NTSTATUS) 0xC0000381)
+#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS) 0xC0000382)
+#define STATUS_SMARTCARD_NO_CARD         ((NTSTATUS) 0xC0000383)
+#define STATUS_SMARTCARD_NO_KEY_CONTAINER       ((NTSTATUS) 0xC0000384)
+#define STATUS_SMARTCARD_NO_CERTIFICATE  ((NTSTATUS) 0xC0000385)
+#define STATUS_SMARTCARD_NO_KEYSET       ((NTSTATUS) 0xC0000386)
+#define STATUS_SMARTCARD_IO_ERROR        ((NTSTATUS) 0xC0000387)
+#define STATUS_DOWNGRADE_DETECTED        ((NTSTATUS) 0xC0000388)
+#define STATUS_SMARTCARD_CERT_REVOKED    ((NTSTATUS) 0xC0000389)
+#define STATUS_ISSUING_CA_UNTRUSTED      ((NTSTATUS) 0xC000038A)
+#define STATUS_REVOCATION_OFFLINE_C      ((NTSTATUS) 0xC000038B)
+#define STATUS_PKINIT_CLIENT_FAILURE     ((NTSTATUS) 0xC000038C)
+#define STATUS_SMARTCARD_CERT_EXPIRED    ((NTSTATUS) 0xC000038D)
+#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS) 0xC000038E)
+#define STATUS_SMARTCARD_SILENT_CONTEXT  ((NTSTATUS) 0xC000038F)
+#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000401)
+#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000402)
+#define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000403)
+#define STATUS_DS_NAME_NOT_UNIQUE        ((NTSTATUS) 0xC0000404)
+#define STATUS_DS_DUPLICATE_ID_FOUND     ((NTSTATUS) 0xC0000405)
+#define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS) 0xC0000406)
+#define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS) 0xC0000407)
+#define STATUS_USER2USER_REQUIRED        ((NTSTATUS) 0xC0000408)
+#define STATUS_STACK_BUFFER_OVERRUN      ((NTSTATUS) 0xC0000409)
+#define STATUS_NO_S4U_PROT_SUPPORT       ((NTSTATUS) 0xC000040A)
+#define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS) 0xC000040B)
+#define STATUS_REVOCATION_OFFLINE_KDC    ((NTSTATUS) 0xC000040C)
+#define STATUS_ISSUING_CA_UNTRUSTED_KDC  ((NTSTATUS) 0xC000040D)
+#define STATUS_KDC_CERT_EXPIRED          ((NTSTATUS) 0xC000040E)
+#define STATUS_KDC_CERT_REVOKED          ((NTSTATUS) 0xC000040F)
+#define STATUS_PARAMETER_QUOTA_EXCEEDED  ((NTSTATUS) 0xC0000410)
+#define STATUS_HIBERNATION_FAILURE       ((NTSTATUS) 0xC0000411)
+#define STATUS_DELAY_LOAD_FAILED         ((NTSTATUS) 0xC0000412)
+#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS) 0xC0000413)
+#define STATUS_VDM_DISALLOWED            ((NTSTATUS) 0xC0000414)
+#define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS) 0xC0000415)
+#define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE ((NTSTATUS) 0xC0000416)
+#define STATUS_INVALID_CRUNTIME_PARAMETER   ((NTSTATUS) 0xC0000417)
+#define STATUS_NTLM_BLOCKED                 ((NTSTATUS) 0xC0000418)
+#define STATUS_ASSERTION_FAILURE            ((NTSTATUS) 0xC0000420)
+#define STATUS_VERIFIER_STOP                ((NTSTATUS) 0xC0000421)
+#define STATUS_CALLBACK_POP_STACK           ((NTSTATUS) 0xC0000423)
+#define STATUS_INCOMPATIBLE_DRIVER_BLOCKED  ((NTSTATUS) 0xC0000424)
+#define STATUS_HIVE_UNLOADED                ((NTSTATUS) 0xC0000425)
+#define STATUS_COMPRESSION_DISABLED         ((NTSTATUS) 0xC0000426)
+#define STATUS_FILE_SYSTEM_LIMITATION       ((NTSTATUS) 0xC0000427)
+#define STATUS_INVALID_IMAGE_HASH           ((NTSTATUS) 0xC0000428)
+#define STATUS_NOT_CAPABLE                  ((NTSTATUS) 0xC0000429)
+#define STATUS_REQUEST_OUT_OF_SEQUENCE      ((NTSTATUS) 0xC000042A)
+#define STATUS_IMPLEMENTATION_LIMIT         ((NTSTATUS) 0xC000042B)
+#define STATUS_ELEVATION_REQUIRED           ((NTSTATUS) 0xC000042C)
+#define STATUS_BEYOND_VDL                   ((NTSTATUS) 0xC0000432)
+#define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS ((NTSTATUS) 0xC0000433)
+#define STATUS_PTE_CHANGED                  ((NTSTATUS) 0xC0000434)
+#define STATUS_PURGE_FAILED                 ((NTSTATUS) 0xC0000435)
+#define STATUS_CRED_REQUIRES_CONFIRMATION   ((NTSTATUS) 0xC0000440)
+#define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE ((NTSTATUS) 0xC0000441)
+#define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER ((NTSTATUS) 0xC0000442)
+#define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE ((NTSTATUS) 0xC0000443)
+#define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE ((NTSTATUS) 0xC0000444)
+#define STATUS_CS_ENCRYPTION_FILE_NOT_CSE   ((NTSTATUS) 0xC0000445)
+#define STATUS_INVALID_LABEL                ((NTSTATUS) 0xC0000446)
+#define STATUS_DRIVER_PROCESS_TERMINATED    ((NTSTATUS) 0xC0000450)
+#define STATUS_AMBIGUOUS_SYSTEM_DEVICE      ((NTSTATUS) 0xC0000451)
+#define STATUS_SYSTEM_DEVICE_NOT_FOUND      ((NTSTATUS) 0xC0000452)
+#define STATUS_RESTART_BOOT_APPLICATION     ((NTSTATUS) 0xC0000453)
+#define STATUS_INVALID_TASK_NAME            ((NTSTATUS) 0xC0000500)
+#define STATUS_INVALID_TASK_INDEX           ((NTSTATUS) 0xC0000501)
+#define STATUS_THREAD_ALREADY_IN_TASK       ((NTSTATUS) 0xC0000502)
+#define STATUS_CALLBACK_BYPASS              ((NTSTATUS) 0xC0000503)
+#define STATUS_PORT_CLOSED                  ((NTSTATUS) 0xC0000700)
+#define STATUS_MESSAGE_LOST                 ((NTSTATUS) 0xC0000701)
+#define STATUS_INVALID_MESSAGE              ((NTSTATUS) 0xC0000702)
+#define STATUS_REQUEST_CANCELED             ((NTSTATUS) 0xC0000703)
+#define STATUS_RECURSIVE_DISPATCH           ((NTSTATUS) 0xC0000704)
+#define STATUS_LPC_RECEIVE_BUFFER_EXPECTED  ((NTSTATUS) 0xC0000705)
+#define STATUS_LPC_INVALID_CONNECTION_USAGE ((NTSTATUS) 0xC0000706)
+#define STATUS_LPC_REQUESTS_NOT_ALLOWED     ((NTSTATUS) 0xC0000707)
+#define STATUS_RESOURCE_IN_USE              ((NTSTATUS) 0xC0000708)
+#define STATUS_HARDWARE_MEMORY_ERROR        ((NTSTATUS) 0xC0000709)
+#define STATUS_THREADPOOL_HANDLE_EXCEPTION  ((NTSTATUS) 0xC000070A)
+#define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070B)
+#define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070C)
+#define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070D)
+#define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070E)
+#define STATUS_THREADPOOL_RELEASED_DURING_OPERATION ((NTSTATUS) 0xC000070F)
+#define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000710)
+#define STATUS_APC_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000711)
+#define STATUS_PROCESS_IS_PROTECTED         ((NTSTATUS) 0xC0000712)
+#define STATUS_MCA_EXCEPTION                ((NTSTATUS) 0xC0000713)
+#define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE ((NTSTATUS) 0xC0000714)
+#define STATUS_SYMLINK_CLASS_DISABLED       ((NTSTATUS) 0xC0000715)
+#define STATUS_INVALID_IDN_NORMALIZATION    ((NTSTATUS) 0xC0000716)
+#define STATUS_NO_UNICODE_TRANSLATION       ((NTSTATUS) 0xC0000717)
+#define STATUS_ALREADY_REGISTERED           ((NTSTATUS) 0xC0000718)
+#define STATUS_CONTEXT_MISMATCH             ((NTSTATUS) 0xC0000719)
+#define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST ((NTSTATUS) 0xC000071A)
+#define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY ((NTSTATUS) 0xC000071B)
+#define STATUS_INVALID_THREAD               ((NTSTATUS) 0xC000071C)
+#define STATUS_CALLBACK_RETURNED_TRANSACTION ((NTSTATUS) 0xC000071D)
+#define STATUS_CALLBACK_RETURNED_LDR_LOCK   ((NTSTATUS) 0xC000071E)
+#define STATUS_CALLBACK_RETURNED_LANG       ((NTSTATUS) 0xC000071F)
+#define STATUS_CALLBACK_RETURNED_PRI_BACK   ((NTSTATUS) 0xC0000720)
+#define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY ((NTSTATUS) 0xC0000721)
+#define STATUS_DISK_REPAIR_DISABLED         ((NTSTATUS) 0xC0000800)
+#define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS ((NTSTATUS) 0xC0000801)
+#define STATUS_DISK_QUOTA_EXCEEDED          ((NTSTATUS) 0xC0000802)
+#define STATUS_CONTENT_BLOCKED              ((NTSTATUS) 0xC0000804)
+#define STATUS_BAD_CLUSTERS                 ((NTSTATUS) 0xC0000805)
+#define STATUS_VOLUME_DIRTY                 ((NTSTATUS) 0xC0000806)
+#define STATUS_FILE_CHECKED_OUT             ((NTSTATUS) 0xC0000901)
+#define STATUS_CHECKOUT_REQUIRED            ((NTSTATUS) 0xC0000902)
+#define STATUS_BAD_FILE_TYPE                ((NTSTATUS) 0xC0000903)
+#define STATUS_FILE_TOO_LARGE               ((NTSTATUS) 0xC0000904)
+#define STATUS_FORMS_AUTH_REQUIRED          ((NTSTATUS) 0xC0000905)
+#define STATUS_VIRUS_INFECTED               ((NTSTATUS) 0xC0000906)
+#define STATUS_VIRUS_DELETED                ((NTSTATUS) 0xC0000907)
+#define STATUS_BAD_MCFG_TABLE               ((NTSTATUS) 0xC0000908)
+
+#define STATUS_WOW_ASSERTION             ((NTSTATUS) 0xC0009898)
+
+#define RPC_NT_INVALID_STRING_BINDING    ((NTSTATUS) 0xC0020001)
+#define RPC_NT_WRONG_KIND_OF_BINDING     ((NTSTATUS) 0xC0020002)
+#define RPC_NT_INVALID_BINDING           ((NTSTATUS) 0xC0020003)
+#define RPC_NT_PROTSEQ_NOT_SUPPORTED     ((NTSTATUS) 0xC0020004)
+#define RPC_NT_INVALID_RPC_PROTSEQ       ((NTSTATUS) 0xC0020005)
+#define RPC_NT_INVALID_STRING_UUID       ((NTSTATUS) 0xC0020006)
+#define RPC_NT_INVALID_ENDPOINT_FORMAT   ((NTSTATUS) 0xC0020007)
+#define RPC_NT_INVALID_NET_ADDR          ((NTSTATUS) 0xC0020008)
+#define RPC_NT_NO_ENDPOINT_FOUND         ((NTSTATUS) 0xC0020009)
+#define RPC_NT_INVALID_TIMEOUT           ((NTSTATUS) 0xC002000A)
+#define RPC_NT_OBJECT_NOT_FOUND          ((NTSTATUS) 0xC002000B)
+#define RPC_NT_ALREADY_REGISTERED        ((NTSTATUS) 0xC002000C)
+#define RPC_NT_TYPE_ALREADY_REGISTERED   ((NTSTATUS) 0xC002000D)
+#define RPC_NT_ALREADY_LISTENING         ((NTSTATUS) 0xC002000E)
+#define RPC_NT_NO_PROTSEQS_REGISTERED    ((NTSTATUS) 0xC002000F)
+#define RPC_NT_NOT_LISTENING             ((NTSTATUS) 0xC0020010)
+#define RPC_NT_UNKNOWN_MGR_TYPE          ((NTSTATUS) 0xC0020011)
+#define RPC_NT_UNKNOWN_IF                ((NTSTATUS) 0xC0020012)
+#define RPC_NT_NO_BINDINGS               ((NTSTATUS) 0xC0020013)
+#define RPC_NT_NO_PROTSEQS               ((NTSTATUS) 0xC0020014)
+#define RPC_NT_CANT_CREATE_ENDPOINT      ((NTSTATUS) 0xC0020015)
+#define RPC_NT_OUT_OF_RESOURCES          ((NTSTATUS) 0xC0020016)
+#define RPC_NT_SERVER_UNAVAILABLE        ((NTSTATUS) 0xC0020017)
+#define RPC_NT_SERVER_TOO_BUSY           ((NTSTATUS) 0xC0020018)
+#define RPC_NT_INVALID_NETWORK_OPTIONS   ((NTSTATUS) 0xC0020019)
+#define RPC_NT_NO_CALL_ACTIVE            ((NTSTATUS) 0xC002001A)
+#define RPC_NT_CALL_FAILED               ((NTSTATUS) 0xC002001B)
+#define RPC_NT_CALL_FAILED_DNE           ((NTSTATUS) 0xC002001C)
+#define RPC_NT_PROTOCOL_ERROR            ((NTSTATUS) 0xC002001D)
+#define RPC_NT_UNSUPPORTED_TRANS_SYN     ((NTSTATUS) 0xC002001F)
+#define RPC_NT_UNSUPPORTED_TYPE          ((NTSTATUS) 0xC0020021)
+#define RPC_NT_INVALID_TAG               ((NTSTATUS) 0xC0020022)
+#define RPC_NT_INVALID_BOUND             ((NTSTATUS) 0xC0020023)
+#define RPC_NT_NO_ENTRY_NAME             ((NTSTATUS) 0xC0020024)
+#define RPC_NT_INVALID_NAME_SYNTAX       ((NTSTATUS) 0xC0020025)
+#define RPC_NT_UNSUPPORTED_NAME_SYNTAX   ((NTSTATUS) 0xC0020026)
+#define RPC_NT_UUID_NO_ADDRESS           ((NTSTATUS) 0xC0020028)
+#define RPC_NT_DUPLICATE_ENDPOINT        ((NTSTATUS) 0xC0020029)
+#define RPC_NT_UNKNOWN_AUTHN_TYPE        ((NTSTATUS) 0xC002002A)
+#define RPC_NT_MAX_CALLS_TOO_SMALL       ((NTSTATUS) 0xC002002B)
+#define RPC_NT_STRING_TOO_LONG           ((NTSTATUS) 0xC002002C)
+#define RPC_NT_PROTSEQ_NOT_FOUND         ((NTSTATUS) 0xC002002D)
+#define RPC_NT_PROCNUM_OUT_OF_RANGE      ((NTSTATUS) 0xC002002E)
+#define RPC_NT_BINDING_HAS_NO_AUTH       ((NTSTATUS) 0xC002002F)
+#define RPC_NT_UNKNOWN_AUTHN_SERVICE     ((NTSTATUS) 0xC0020030)
+#define RPC_NT_UNKNOWN_AUTHN_LEVEL       ((NTSTATUS) 0xC0020031)
+#define RPC_NT_INVALID_AUTH_IDENTITY     ((NTSTATUS) 0xC0020032)
+#define RPC_NT_UNKNOWN_AUTHZ_SERVICE     ((NTSTATUS) 0xC0020033)
+#define EPT_NT_INVALID_ENTRY             ((NTSTATUS) 0xC0020034)
+#define EPT_NT_CANT_PERFORM_OP           ((NTSTATUS) 0xC0020035)
+#define EPT_NT_NOT_REGISTERED            ((NTSTATUS) 0xC0020036)
+#define RPC_NT_NOTHING_TO_EXPORT         ((NTSTATUS) 0xC0020037)
+#define RPC_NT_INCOMPLETE_NAME           ((NTSTATUS) 0xC0020038)
+#define RPC_NT_INVALID_VERS_OPTION       ((NTSTATUS) 0xC0020039)
+#define RPC_NT_NO_MORE_MEMBERS           ((NTSTATUS) 0xC002003A)
+#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED   ((NTSTATUS) 0xC002003B)
+#define RPC_NT_INTERFACE_NOT_FOUND       ((NTSTATUS) 0xC002003C)
+#define RPC_NT_ENTRY_ALREADY_EXISTS      ((NTSTATUS) 0xC002003D)
+#define RPC_NT_ENTRY_NOT_FOUND           ((NTSTATUS) 0xC002003E)
+#define RPC_NT_NAME_SERVICE_UNAVAILABLE  ((NTSTATUS) 0xC002003F)
+#define RPC_NT_INVALID_NAF_ID            ((NTSTATUS) 0xC0020040)
+#define RPC_NT_CANNOT_SUPPORT            ((NTSTATUS) 0xC0020041)
+#define RPC_NT_NO_CONTEXT_AVAILABLE      ((NTSTATUS) 0xC0020042)
+#define RPC_NT_INTERNAL_ERROR            ((NTSTATUS) 0xC0020043)
+#define RPC_NT_ZERO_DIVIDE               ((NTSTATUS) 0xC0020044)
+#define RPC_NT_ADDRESS_ERROR             ((NTSTATUS) 0xC0020045)
+#define RPC_NT_FP_DIV_ZERO               ((NTSTATUS) 0xC0020046)
+#define RPC_NT_FP_UNDERFLOW              ((NTSTATUS) 0xC0020047)
+#define RPC_NT_FP_OVERFLOW               ((NTSTATUS) 0xC0020048)
+#define RPC_NT_CALL_IN_PROGRESS          ((NTSTATUS) 0xC0020049)
+#define RPC_NT_NO_MORE_BINDINGS          ((NTSTATUS) 0xC002004A)
+#define RPC_NT_GROUP_MEMBER_NOT_FOUND    ((NTSTATUS) 0xC002004B)
+#define EPT_NT_CANT_CREATE               ((NTSTATUS) 0xC002004C)
+#define RPC_NT_INVALID_OBJECT            ((NTSTATUS) 0xC002004D)
+#define RPC_NT_NO_INTERFACES             ((NTSTATUS) 0xC002004F)
+#define RPC_NT_CALL_CANCELLED            ((NTSTATUS) 0xC0020050)
+#define RPC_NT_BINDING_INCOMPLETE        ((NTSTATUS) 0xC0020051)
+#define RPC_NT_COMM_FAILURE              ((NTSTATUS) 0xC0020052)
+#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL   ((NTSTATUS) 0xC0020053)
+#define RPC_NT_NO_PRINC_NAME             ((NTSTATUS) 0xC0020054)
+#define RPC_NT_NOT_RPC_ERROR             ((NTSTATUS) 0xC0020055)
+#define RPC_NT_SEC_PKG_ERROR             ((NTSTATUS) 0xC0020057)
+#define RPC_NT_NOT_CANCELLED             ((NTSTATUS) 0xC0020058)
+#define RPC_NT_INVALID_ASYNC_HANDLE      ((NTSTATUS) 0xC0020062)
+#define RPC_NT_INVALID_ASYNC_CALL        ((NTSTATUS) 0xC0020063)
+
+#define RPC_NT_NO_MORE_ENTRIES           ((NTSTATUS) 0xC0030001)
+#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL   ((NTSTATUS) 0xC0030002)
+#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE  ((NTSTATUS) 0xC0030003)
+#define RPC_NT_SS_IN_NULL_CONTEXT        ((NTSTATUS) 0xC0030004)
+#define RPC_NT_SS_CONTEXT_MISMATCH       ((NTSTATUS) 0xC0030005)
+#define RPC_NT_SS_CONTEXT_DAMAGED        ((NTSTATUS) 0xC0030006)
+#define RPC_NT_SS_HANDLES_MISMATCH       ((NTSTATUS) 0xC0030007)
+#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS) 0xC0030008)
+#define RPC_NT_NULL_REF_POINTER          ((NTSTATUS) 0xC0030009)
+#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE   ((NTSTATUS) 0xC003000A)
+#define RPC_NT_BYTE_COUNT_TOO_SMALL      ((NTSTATUS) 0xC003000B)
+#define RPC_NT_BAD_STUB_DATA             ((NTSTATUS) 0xC003000C)
+#define RPC_NT_INVALID_ES_ACTION         ((NTSTATUS) 0xC0030059)
+#define RPC_NT_WRONG_ES_VERSION          ((NTSTATUS) 0xC003005A)
+#define RPC_NT_WRONG_STUB_VERSION        ((NTSTATUS) 0xC003005B)
+#define RPC_NT_INVALID_PIPE_OBJECT       ((NTSTATUS) 0xC003005C)
+#define RPC_NT_INVALID_PIPE_OPERATION    ((NTSTATUS) 0xC003005D)
+#define RPC_NT_WRONG_PIPE_VERSION        ((NTSTATUS) 0xC003005E)
+#define RPC_NT_PIPE_CLOSED               ((NTSTATUS) 0xC003005F)
+#define RPC_NT_PIPE_DISCIPLINE_ERROR     ((NTSTATUS) 0xC0030060)
+#define RPC_NT_PIPE_EMPTY                ((NTSTATUS) 0xC0030061)
+
+#define STATUS_PNP_BAD_MPS_TABLE         ((NTSTATUS) 0xC0040035)
+#define STATUS_PNP_TRANSLATION_FAILED    ((NTSTATUS) 0xC0040036)
+#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS) 0xC0040037)
+#define STATUS_PNP_INVALID_ID            ((NTSTATUS) 0xC0040038)
+
+#define STATUS_CTX_WINSTATION_NAME_INVALID      ((NTSTATUS) 0xC00A0001)
+#define STATUS_CTX_INVALID_PD            ((NTSTATUS) 0xC00A0002)
+#define STATUS_CTX_PD_NOT_FOUND          ((NTSTATUS) 0xC00A0003)
+#define STATUS_CTX_CLOSE_PENDING         ((NTSTATUS) 0xC00A0006)
+#define STATUS_CTX_NO_OUTBUF             ((NTSTATUS) 0xC00A0007)
+#define STATUS_CTX_MODEM_INF_NOT_FOUND   ((NTSTATUS) 0xC00A0008)
+#define STATUS_CTX_INVALID_MODEMNAME     ((NTSTATUS) 0xC00A0009)
+#define STATUS_CTX_RESPONSE_ERROR        ((NTSTATUS) 0xC00A000A)
+#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT       ((NTSTATUS) 0xC00A000B)
+#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER    ((NTSTATUS) 0xC00A000C)
+#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE   ((NTSTATUS) 0xC00A000D)
+#define STATUS_CTX_MODEM_RESPONSE_BUSY   ((NTSTATUS) 0xC00A000E)
+#define STATUS_CTX_MODEM_RESPONSE_VOICE  ((NTSTATUS) 0xC00A000F)
+#define STATUS_CTX_TD_ERROR              ((NTSTATUS) 0xC00A0010)
+#define STATUS_CTX_LICENSE_CLIENT_INVALID       ((NTSTATUS) 0xC00A0012)
+#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS) 0xC00A0013)
+#define STATUS_CTX_LICENSE_EXPIRED       ((NTSTATUS) 0xC00A0014)
+#define STATUS_CTX_WINSTATION_NOT_FOUND  ((NTSTATUS) 0xC00A0015)
+#define STATUS_CTX_WINSTATION_NAME_COLLISION    ((NTSTATUS) 0xC00A0016)
+#define STATUS_CTX_WINSTATION_BUSY       ((NTSTATUS) 0xC00A0017)
+#define STATUS_CTX_BAD_VIDEO_MODE        ((NTSTATUS) 0xC00A0018)
+#define STATUS_CTX_GRAPHICS_INVALID      ((NTSTATUS) 0xC00A0022)
+#define STATUS_CTX_NOT_CONSOLE           ((NTSTATUS) 0xC00A0024)
+#define STATUS_CTX_CLIENT_QUERY_TIMEOUT  ((NTSTATUS) 0xC00A0026)
+#define STATUS_CTX_CONSOLE_DISCONNECT    ((NTSTATUS) 0xC00A0027)
+#define STATUS_CTX_CONSOLE_CONNECT       ((NTSTATUS) 0xC00A0028)
+#define STATUS_CTX_SHADOW_DENIED         ((NTSTATUS) 0xC00A002A)
+#define STATUS_CTX_WINSTATION_ACCESS_DENIED     ((NTSTATUS) 0xC00A002B)
+#define STATUS_CTX_INVALID_WD            ((NTSTATUS) 0xC00A002E)
+#define STATUS_CTX_WD_NOT_FOUND          ((NTSTATUS) 0xC00A002F)
+#define STATUS_CTX_SHADOW_INVALID        ((NTSTATUS) 0xC00A0030)
+#define STATUS_CTX_SHADOW_DISABLED       ((NTSTATUS) 0xC00A0031)
+#define STATUS_RDP_PROTOCOL_ERROR        ((NTSTATUS) 0xC00A0032)
+#define STATUS_CTX_CLIENT_LICENSE_NOT_SET       ((NTSTATUS) 0xC00A0033)
+#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS) 0xC00A0034)
+#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE  ((NTSTATUS) 0xC00A0035)
+#define STATUS_CTX_SHADOW_NOT_RUNNING    ((NTSTATUS) 0xC00A0036)
+#define STATUS_CTX_LOGON_DISABLED        ((NTSTATUS) 0xC00A0037)
+#define STATUS_CTX_SECURITY_LAYER_ERROR  ((NTSTATUS) 0xC00A0038)
+
+#define STATUS_CLUSTER_INVALID_NODE      ((NTSTATUS) 0xC0130001)
+#define STATUS_CLUSTER_NODE_EXISTS       ((NTSTATUS) 0xC0130002)
+#define STATUS_CLUSTER_JOIN_IN_PROGRESS  ((NTSTATUS) 0xC0130003)
+#define STATUS_CLUSTER_NODE_NOT_FOUND    ((NTSTATUS) 0xC0130004)
+#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND     ((NTSTATUS) 0xC0130005)
+#define STATUS_CLUSTER_NETWORK_EXISTS    ((NTSTATUS) 0xC0130006)
+#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS) 0xC0130007)
+#define STATUS_CLUSTER_NETINTERFACE_EXISTS      ((NTSTATUS) 0xC0130008)
+#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND   ((NTSTATUS) 0xC0130009)
+#define STATUS_CLUSTER_INVALID_REQUEST   ((NTSTATUS) 0xC013000A)
+#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS) 0xC013000B)
+#define STATUS_CLUSTER_NODE_DOWN         ((NTSTATUS) 0xC013000C)
+#define STATUS_CLUSTER_NODE_UNREACHABLE  ((NTSTATUS) 0xC013000D)
+#define STATUS_CLUSTER_NODE_NOT_MEMBER   ((NTSTATUS) 0xC013000E)
+#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS     ((NTSTATUS) 0xC013000F)
+#define STATUS_CLUSTER_INVALID_NETWORK   ((NTSTATUS) 0xC0130010)
+#define STATUS_CLUSTER_NO_NET_ADAPTERS   ((NTSTATUS) 0xC0130011)
+#define STATUS_CLUSTER_NODE_UP           ((NTSTATUS) 0xC0130012)
+#define STATUS_CLUSTER_NODE_PAUSED       ((NTSTATUS) 0xC0130013)
+#define STATUS_CLUSTER_NODE_NOT_PAUSED   ((NTSTATUS) 0xC0130014)
+#define STATUS_CLUSTER_NO_SECURITY_CONTEXT      ((NTSTATUS) 0xC0130015)
+#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL     ((NTSTATUS) 0xC0130016)
+#define STATUS_CLUSTER_POISONED          ((NTSTATUS) 0xC0130017)
+
+#define STATUS_SXS_SECTION_NOT_FOUND     ((NTSTATUS) 0xC0150001)
+#define STATUS_SXS_CANT_GEN_ACTCTX       ((NTSTATUS) 0xC0150002)
+#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT    ((NTSTATUS) 0xC0150003)
+#define STATUS_SXS_ASSEMBLY_NOT_FOUND    ((NTSTATUS) 0xC0150004)
+#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS) 0xC0150005)
+#define STATUS_SXS_MANIFEST_PARSE_ERROR  ((NTSTATUS) 0xC0150006)
+#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED  ((NTSTATUS) 0xC0150007)
+#define STATUS_SXS_KEY_NOT_FOUND         ((NTSTATUS) 0xC0150008)
+#define STATUS_SXS_VERSION_CONFLICT      ((NTSTATUS) 0xC0150009)
+#define STATUS_SXS_WRONG_SECTION_TYPE    ((NTSTATUS) 0xC015000A)
+#define STATUS_SXS_THREAD_QUERIES_DISABLED      ((NTSTATUS) 0xC015000B)
+#define STATUS_SXS_ASSEMBLY_MISSING      ((NTSTATUS) 0xC015000C)
+#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET  ((NTSTATUS) 0xC015000E)
+#define STATUS_SXS_EARLY_DEACTIVATION    ((NTSTATUS) 0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION  ((NTSTATUS) 0xC0150010)
+#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS) 0xC0150011)
+#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS) 0xC0150012)
+#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS) 0xC0150013)
+#define STATUS_SXS_CORRUPT_ACTIVATION_STACK ((NTSTATUS) 0xC0150014)
+#define STATUS_SXS_CORRUPTION            ((NTSTATUS) 0xC0150015)
+#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE  ((NTSTATUS) 0xC0150016)
+#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME   ((NTSTATUS) 0xC0150017)
+#define STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE      ((NTSTATUS) 0xC0150018)
+#define STATUS_SXS_IDENTITY_PARSE_ERROR              ((NTSTATUS) 0xC0150019)
+#define STATUS_SXS_COMPONENT_STORE_CORRUPT           ((NTSTATUS) 0xC015001A)
+#define STATUS_SXS_FILE_HASH_MISMATCH                ((NTSTATUS) 0xC015001B)
+#define STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT    ((NTSTATUS) 0xC015001C)
+#define STATUS_SXS_IDENTITIES_DIFFERENT              ((NTSTATUS) 0xC015001D)
+#define STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT      ((NTSTATUS) 0xC015001E)
+#define STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY         ((NTSTATUS) 0xC015001F)
+#define STATUS_ADVANCED_INSTALLER_FAILED             ((NTSTATUS) 0xC0150020)
+#define STATUS_XML_ENCODING_MISMATCH                 ((NTSTATUS) 0xC0150021)
+#define STATUS_SXS_MANIFEST_TOO_BIG                  ((NTSTATUS) 0xC0150022)
+#define STATUS_SXS_SETTING_NOT_REGISTERED            ((NTSTATUS) 0xC0150023)
+#define STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE    ((NTSTATUS) 0xC0150024)
+#define STATUS_SXS_PRIMITIVE_INSTALLER_FAILED        ((NTSTATUS) 0xC0150025)
+#define STATUS_GENERIC_COMMAND_FAILED                ((NTSTATUS) 0xC0150026)
+#define STATUS_SXS_FILE_HASH_MISSING                 ((NTSTATUS) 0xC0150027)
+
+#define DBG_EXCEPTION_HANDLED       ((NTSTATUS) 0x00010001)
+#define DBG_CONTINUE                ((NTSTATUS) 0x00010002)
+#define DBG_TERMINATE_THREAD        ((NTSTATUS) 0x40010003)
+#define DBG_TERMINATE_PROCESS       ((NTSTATUS) 0x40010004)
+#define DBG_CONTROL_C               ((NTSTATUS) 0x40010005)
+#define DBG_CONTROL_BREAK           ((NTSTATUS) 0x40010008)
+#define DBG_COMMAND_EXCEPTION       ((NTSTATUS) 0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED   ((NTSTATUS) 0x80010001)
+
+#endif /* WIN32_NO_STATUS */
+
+#endif /* __WINE_NTSTATUS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h
new file mode 100644
index 0000000..f4c2b5b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h
@@ -0,0 +1,5205 @@
+/*** Autogenerated by WIDL 1.1.36 from oaidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_OAIDL_H
+#define __WIDL_OAIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IDispatch_FWD_DEFINED__
+#define __IDispatch_FWD_DEFINED__
+typedef interface IDispatch IDispatch;
+#endif
+
+#ifndef __IEnumVARIANT_FWD_DEFINED__
+#define __IEnumVARIANT_FWD_DEFINED__
+typedef interface IEnumVARIANT IEnumVARIANT;
+#endif
+
+#ifndef __ITypeComp_FWD_DEFINED__
+#define __ITypeComp_FWD_DEFINED__
+typedef interface ITypeComp ITypeComp;
+#endif
+
+#ifndef __ITypeInfo_FWD_DEFINED__
+#define __ITypeInfo_FWD_DEFINED__
+typedef interface ITypeInfo ITypeInfo;
+#endif
+
+#ifndef __ITypeInfo2_FWD_DEFINED__
+#define __ITypeInfo2_FWD_DEFINED__
+typedef interface ITypeInfo2 ITypeInfo2;
+#endif
+
+#ifndef __ITypeLib_FWD_DEFINED__
+#define __ITypeLib_FWD_DEFINED__
+typedef interface ITypeLib ITypeLib;
+#endif
+
+#ifndef __ITypeLib2_FWD_DEFINED__
+#define __ITypeLib2_FWD_DEFINED__
+typedef interface ITypeLib2 ITypeLib2;
+#endif
+
+#ifndef __ITypeChangeEvents_FWD_DEFINED__
+#define __ITypeChangeEvents_FWD_DEFINED__
+typedef interface ITypeChangeEvents ITypeChangeEvents;
+#endif
+
+#ifndef __IErrorInfo_FWD_DEFINED__
+#define __IErrorInfo_FWD_DEFINED__
+typedef interface IErrorInfo IErrorInfo;
+#endif
+
+#ifndef __ICreateErrorInfo_FWD_DEFINED__
+#define __ICreateErrorInfo_FWD_DEFINED__
+typedef interface ICreateErrorInfo ICreateErrorInfo;
+#endif
+
+#ifndef __ISupportErrorInfo_FWD_DEFINED__
+#define __ISupportErrorInfo_FWD_DEFINED__
+typedef interface ISupportErrorInfo ISupportErrorInfo;
+#endif
+
+#ifndef __ITypeFactory_FWD_DEFINED__
+#define __ITypeFactory_FWD_DEFINED__
+typedef interface ITypeFactory ITypeFactory;
+#endif
+
+#ifndef __ITypeMarshal_FWD_DEFINED__
+#define __ITypeMarshal_FWD_DEFINED__
+typedef interface ITypeMarshal ITypeMarshal;
+#endif
+
+#ifndef __IRecordInfo_FWD_DEFINED__
+#define __IRecordInfo_FWD_DEFINED__
+typedef interface IRecordInfo IRecordInfo;
+#endif
+
+#ifndef __ICreateTypeInfo_FWD_DEFINED__
+#define __ICreateTypeInfo_FWD_DEFINED__
+typedef interface ICreateTypeInfo ICreateTypeInfo;
+#endif
+
+#ifndef __ICreateTypeInfo2_FWD_DEFINED__
+#define __ICreateTypeInfo2_FWD_DEFINED__
+typedef interface ICreateTypeInfo2 ICreateTypeInfo2;
+#endif
+
+#ifndef __ICreateTypeLib_FWD_DEFINED__
+#define __ICreateTypeLib_FWD_DEFINED__
+typedef interface ICreateTypeLib ICreateTypeLib;
+#endif
+
+#ifndef __ICreateTypeLib2_FWD_DEFINED__
+#define __ICreateTypeLib2_FWD_DEFINED__
+typedef interface ICreateTypeLib2 ICreateTypeLib2;
+#endif
+
+#ifndef __IErrorLog_FWD_DEFINED__
+#define __IErrorLog_FWD_DEFINED__
+typedef interface IErrorLog IErrorLog;
+#endif
+
+#ifndef __IPropertyBag_FWD_DEFINED__
+#define __IPropertyBag_FWD_DEFINED__
+typedef interface IPropertyBag IPropertyBag;
+#endif
+
+
+#ifndef __IDispatch_FWD_DEFINED__
+#define __IDispatch_FWD_DEFINED__
+typedef interface IDispatch IDispatch;
+#endif
+
+#ifndef __ITypeInfo_FWD_DEFINED__
+#define __ITypeInfo_FWD_DEFINED__
+typedef interface ITypeInfo ITypeInfo;
+#endif
+
+#ifndef __ITypeLib_FWD_DEFINED__
+#define __ITypeLib_FWD_DEFINED__
+typedef interface ITypeLib ITypeLib;
+#endif
+
+#ifndef __IRecordInfo_FWD_DEFINED__
+#define __IRecordInfo_FWD_DEFINED__
+typedef interface IRecordInfo IRecordInfo;
+#endif
+
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+/*****************************************************************************
+ * IOleAutomationTypes interface (v1.0)
+ */
+#ifndef __IOleAutomationTypes_INTERFACE_DEFINED__
+#define __IOleAutomationTypes_INTERFACE_DEFINED__
+
+extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_c_ifspec;
+extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_s_ifspec;
+typedef CY CURRENCY;
+typedef struct tagSAFEARRAYBOUND {
+    ULONG cElements;
+    LONG lLbound;
+} SAFEARRAYBOUND;
+typedef struct tagSAFEARRAYBOUND *LPSAFEARRAYBOUND;
+typedef struct _wireVARIANT *wireVARIANT;
+typedef struct _wireBRECORD *wireBRECORD;
+typedef struct _wireSAFEARR_BSTR {
+    ULONG Size;
+    wireBSTR *aBstr;
+} SAFEARR_BSTR;
+typedef struct _wireSAFEARR_UNKNOWN {
+    ULONG Size;
+    IUnknown **apUnknown;
+} SAFEARR_UNKNOWN;
+typedef struct _wireSAFEARR_DISPATCH {
+    ULONG Size;
+    IDispatch **apDispatch;
+} SAFEARR_DISPATCH;
+typedef struct _wireSAFEARR_VARIANT {
+    ULONG Size;
+    wireVARIANT *aVariant;
+} SAFEARR_VARIANT;
+typedef struct _wireSAFEARR_BRECORD {
+    ULONG Size;
+    wireBRECORD *aRecord;
+} SAFEARR_BRECORD;
+typedef struct _wireSAFEARR_HAVEIID {
+    ULONG Size;
+    IUnknown **apUnknown;
+    IID iid;
+} SAFEARR_HAVEIID;
+typedef enum tagSF_TYPE {
+    SF_ERROR = VT_ERROR,
+    SF_I1 = VT_I1,
+    SF_I2 = VT_I2,
+    SF_I4 = VT_I4,
+    SF_I8 = VT_I8,
+    SF_BSTR = VT_BSTR,
+    SF_UNKNOWN = VT_UNKNOWN,
+    SF_DISPATCH = VT_DISPATCH,
+    SF_VARIANT = VT_VARIANT,
+    SF_RECORD = VT_RECORD,
+    SF_HAVEIID = VT_UNKNOWN | VT_RESERVED
+} SF_TYPE;
+typedef struct _wireSAFEARRAY_UNION {
+    ULONG sfType;
+    union {
+        SAFEARR_BSTR BstrStr;
+        SAFEARR_UNKNOWN UnknownStr;
+        SAFEARR_DISPATCH DispatchStr;
+        SAFEARR_VARIANT VariantStr;
+        SAFEARR_BRECORD RecordStr;
+        SAFEARR_HAVEIID HaveIidStr;
+        BYTE_SIZEDARR ByteStr;
+        WORD_SIZEDARR WordStr;
+        DWORD_SIZEDARR LongStr;
+        HYPER_SIZEDARR HyperStr;
+    } u;
+} SAFEARRAYUNION;
+typedef struct _wireSAFEARRAY {
+    USHORT cDims;
+    USHORT fFeatures;
+    ULONG cbElements;
+    ULONG cLocks;
+    SAFEARRAYUNION uArrayStructs;
+    SAFEARRAYBOUND rgsabound[1];
+} *wireSAFEARRAY;
+typedef wireSAFEARRAY *wirePSAFEARRAY;
+typedef struct tagSAFEARRAY {
+    USHORT cDims;
+    USHORT fFeatures;
+    ULONG cbElements;
+    ULONG cLocks;
+    PVOID pvData;
+    SAFEARRAYBOUND rgsabound[1];
+} SAFEARRAY;
+typedef SAFEARRAY *LPSAFEARRAY;
+#define FADF_AUTO (0x1)
+
+#define FADF_STATIC (0x2)
+
+#define FADF_EMBEDDED (0x4)
+
+#define FADF_FIXEDSIZE (0x10)
+
+#define FADF_RECORD (0x20)
+
+#define FADF_HAVEIID (0x40)
+
+#define FADF_HAVEVARTYPE (0x80)
+
+#define FADF_BSTR (0x100)
+
+#define FADF_UNKNOWN (0x200)
+
+#define FADF_DISPATCH (0x400)
+
+#define FADF_VARIANT (0x800)
+
+#define FADF_RESERVED (0xf008)
+
+#define FADF_DATADELETED (0x1000)
+
+#define FADF_CREATEVECTOR (0x2000)
+
+#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
+#define __VARIANT_NAME_1 n1
+#define __VARIANT_NAME_2 n2
+#define __VARIANT_NAME_3 n3
+#define __VARIANT_NAME_4 brecVal
+#else
+#define __tagVARIANT
+#define __VARIANT_NAME_1
+#define __VARIANT_NAME_2
+#define __VARIANT_NAME_3
+#define __tagBRECORD
+#define __VARIANT_NAME_4
+#endif
+typedef struct tagVARIANT VARIANT;
+struct tagVARIANT {
+    union {
+        struct __tagVARIANT {
+            VARTYPE vt;
+            WORD wReserved1;
+            WORD wReserved2;
+            WORD wReserved3;
+            union {
+                signed char cVal;
+                USHORT uiVal;
+                ULONG ulVal;
+                INT intVal;
+                UINT uintVal;
+                BYTE bVal;
+                SHORT iVal;
+                LONG lVal;
+                FLOAT fltVal;
+                DOUBLE dblVal;
+                VARIANT_BOOL boolVal;
+                SCODE scode;
+                DATE date;
+                BSTR bstrVal;
+                CY cyVal;
+                IUnknown *punkVal;
+                IDispatch *pdispVal;
+                SAFEARRAY *parray;
+                LONGLONG llVal;
+                ULONGLONG ullVal;
+                signed char *pcVal;
+                USHORT *puiVal;
+                ULONG *pulVal;
+                INT *pintVal;
+                UINT *puintVal;
+                BYTE *pbVal;
+                SHORT *piVal;
+                LONG *plVal;
+                FLOAT *pfltVal;
+                DOUBLE *pdblVal;
+                VARIANT_BOOL *pboolVal;
+                SCODE *pscode;
+                DATE *pdate;
+                BSTR *pbstrVal;
+                VARIANT *pvarVal;
+                PVOID byref;
+                CY *pcyVal;
+                DECIMAL *pdecVal;
+                IUnknown **ppunkVal;
+                IDispatch **ppdispVal;
+                SAFEARRAY **pparray;
+                LONGLONG *pllVal;
+                ULONGLONG *pullVal;
+                struct __tagBRECORD {
+                    PVOID pvRecord;
+                    IRecordInfo *pRecInfo;
+                } __VARIANT_NAME_4;
+            } __VARIANT_NAME_3;
+        } __VARIANT_NAME_2;
+        DECIMAL decVal;
+    } __VARIANT_NAME_1;
+};
+
+typedef VARIANT *LPVARIANT;
+typedef VARIANT VARIANTARG;
+typedef VARIANTARG *LPVARIANTARG;
+struct _wireBRECORD {
+    ULONG fFlags;
+    ULONG clSize;
+    IRecordInfo *pRecInfo;
+    byte *pRecord;
+};
+
+struct _wireVARIANT {
+    DWORD clSize;
+    DWORD rpcReserved;
+    USHORT vt;
+    USHORT wReserved1;
+    USHORT wReserved2;
+    USHORT wReserved3;
+    union {
+        signed char cVal;
+        USHORT uiVal;
+        ULONG ulVal;
+        INT intVal;
+        UINT uintVal;
+        BYTE bVal;
+        SHORT iVal;
+        LONG lVal;
+        FLOAT fltVal;
+        DOUBLE dblVal;
+        VARIANT_BOOL boolVal;
+        SCODE scode;
+        DATE date;
+        wireBSTR bstrVal;
+        CY cyVal;
+        DECIMAL decVal;
+        IUnknown *punkVal;
+        IDispatch *pdispVal;
+        wireSAFEARRAY parray;
+        signed char *pcVal;
+        USHORT *puiVal;
+        ULONG *pulVal;
+        INT *pintVal;
+        UINT *puintVal;
+        BYTE *pbVal;
+        SHORT *piVal;
+        LONG *plVal;
+        FLOAT *pfltVal;
+        DOUBLE *pdblVal;
+        VARIANT_BOOL *pboolVal;
+        SCODE *pscode;
+        DATE *pdate;
+        wireBSTR *pbstrVal;
+        wireVARIANT *pvarVal;
+        CY *pcyVal;
+        DECIMAL *pdecVal;
+        IUnknown **ppunkVal;
+        IDispatch **ppdispVal;
+        wireSAFEARRAY *pparray;
+        wireBRECORD brecVal;
+    } DUMMYUNIONNAME;
+};
+
+typedef LONG DISPID;
+typedef DWORD HREFTYPE;
+typedef DISPID MEMBERID;
+typedef enum tagTYPEKIND {
+    TKIND_ENUM = 0,
+    TKIND_RECORD = 1,
+    TKIND_MODULE = 2,
+    TKIND_INTERFACE = 3,
+    TKIND_DISPATCH = 4,
+    TKIND_COCLASS = 5,
+    TKIND_ALIAS = 6,
+    TKIND_UNION = 7,
+    TKIND_MAX = 8
+} TYPEKIND;
+typedef struct tagTYPEDESC {
+    union {
+        struct tagTYPEDESC *lptdesc;
+        struct tagARRAYDESC *lpadesc;
+        HREFTYPE hreftype;
+    } DUMMYUNIONNAME;
+    VARTYPE vt;
+} TYPEDESC;
+typedef struct tagARRAYDESC {
+    TYPEDESC tdescElem;
+    USHORT cDims;
+    SAFEARRAYBOUND rgbounds[1];
+} ARRAYDESC;
+typedef struct tagPARAMDESCEX {
+    ULONG cBytes;
+    VARIANTARG varDefaultValue;
+} PARAMDESCEX;
+typedef struct tagPARAMDESCEX *LPPARAMDESCEX;
+typedef struct tagPARAMDESC {
+    LPPARAMDESCEX pparamdescex;
+    USHORT wParamFlags;
+} PARAMDESC;
+typedef struct tagPARAMDESC *LPPARAMDESC;
+#define PARAMFLAG_NONE (0x0)
+
+#define PARAMFLAG_FIN (0x1)
+
+#define PARAMFLAG_FOUT (0x2)
+
+#define PARAMFLAG_FLCID (0x4)
+
+#define PARAMFLAG_FRETVAL (0x8)
+
+#define PARAMFLAG_FOPT (0x10)
+
+#define PARAMFLAG_FHASDEFAULT (0x20)
+
+#define PARAMFLAG_FHASCUSTDATA (0x40)
+
+typedef struct tagIDLDESC {
+    ULONG dwReserved;
+    USHORT wIDLFlags;
+} IDLDESC;
+typedef struct tagIDLDESC *LPIDLDESC;
+#define IDLFLAG_NONE (PARAMFLAG_NONE)
+
+#define IDLFLAG_FIN (PARAMFLAG_FIN)
+
+#define IDLFLAG_FOUT (PARAMFLAG_FOUT)
+
+#define IDLFLAG_FLCID (PARAMFLAG_FLCID)
+
+#define IDLFLAG_FRETVAL (PARAMFLAG_FRETVAL)
+
+#if 0
+typedef struct tagELEMDESC {
+    TYPEDESC tdesc;
+    PARAMDESC paramdesc;
+} ELEMDESC;
+#else
+typedef struct tagELEMDESC {
+  TYPEDESC tdesc;
+  union {
+    IDLDESC idldesc;
+    PARAMDESC paramdesc;
+  } DUMMYUNIONNAME;
+} ELEMDESC, *LPELEMDESC;
+#endif
+typedef struct tagTYPEATTR {
+    GUID guid;
+    LCID lcid;
+    DWORD dwReserved;
+    MEMBERID memidConstructor;
+    MEMBERID memidDestructor;
+    LPOLESTR lpstrSchema;
+    ULONG cbSizeInstance;
+    TYPEKIND typekind;
+    WORD cFuncs;
+    WORD cVars;
+    WORD cImplTypes;
+    WORD cbSizeVft;
+    WORD cbAlignment;
+    WORD wTypeFlags;
+    WORD wMajorVerNum;
+    WORD wMinorVerNum;
+    TYPEDESC tdescAlias;
+    IDLDESC idldescType;
+} TYPEATTR;
+typedef struct tagTYPEATTR *LPTYPEATTR;
+typedef struct tagDISPPARAMS {
+    VARIANTARG *rgvarg;
+    DISPID *rgdispidNamedArgs;
+    UINT cArgs;
+    UINT cNamedArgs;
+} DISPPARAMS;
+#if 0
+typedef struct tagEXCEPINFO {
+    WORD wCode;
+    WORD wReserved;
+    BSTR bstrSource;
+    BSTR bstrDescription;
+    BSTR bstrHelpFile;
+    DWORD dwHelpContext;
+    ULONG pvReserved;
+    ULONG pfnDeferredFillIn;
+    SCODE scode;
+} EXCEPINFO;
+#else
+typedef struct tagEXCEPINFO {
+  WORD wCode;
+  WORD wReserved;
+  BSTR bstrSource;
+  BSTR bstrDescription;
+  BSTR bstrHelpFile;
+  DWORD dwHelpContext;
+  PVOID pvReserved;
+  HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
+  SCODE scode;
+} EXCEPINFO, *LPEXCEPINFO;
+#endif
+typedef enum tagCALLCONV {
+    CC_FASTCALL = 0,
+    CC_CDECL = 1,
+    CC_MSCPASCAL = 2,
+    CC_PASCAL = CC_MSCPASCAL,
+    CC_MACPASCAL = 3,
+    CC_STDCALL = 4,
+    CC_FPFASTCALL = 5,
+    CC_SYSCALL = 6,
+    CC_MPWCDECL = 7,
+    CC_MPWPASCAL = 8,
+    CC_MAX = 9
+} CALLCONV;
+typedef enum tagFUNCKIND {
+    FUNC_VIRTUAL = 0,
+    FUNC_PUREVIRTUAL = 1,
+    FUNC_NONVIRTUAL = 2,
+    FUNC_STATIC = 3,
+    FUNC_DISPATCH = 4
+} FUNCKIND;
+typedef enum tagINVOKEKIND {
+    INVOKE_FUNC = 1,
+    INVOKE_PROPERTYGET = 2,
+    INVOKE_PROPERTYPUT = 4,
+    INVOKE_PROPERTYPUTREF = 8
+} INVOKEKIND;
+typedef struct tagFUNCDESC {
+    MEMBERID memid;
+    SCODE *lprgscode;
+    ELEMDESC *lprgelemdescParam;
+    FUNCKIND funckind;
+    INVOKEKIND invkind;
+    CALLCONV callconv;
+    SHORT cParams;
+    SHORT cParamsOpt;
+    SHORT oVft;
+    SHORT cScodes;
+    ELEMDESC elemdescFunc;
+    WORD wFuncFlags;
+} FUNCDESC;
+typedef struct tagFUNCDESC *LPFUNCDESC;
+typedef enum tagVARKIND {
+    VAR_PERINSTANCE = 0,
+    VAR_STATIC = 1,
+    VAR_CONST = 2,
+    VAR_DISPATCH = 3
+} VARKIND;
+#define IMPLTYPEFLAG_FDEFAULT (0x1)
+
+#define IMPLTYPEFLAG_FSOURCE (0x2)
+
+#define IMPLTYPEFLAG_FRESTRICTED (0x4)
+
+#define IMPLTYPEFLAG_FDEFAULTVTABLE (0x8)
+
+typedef struct tagVARDESC {
+    MEMBERID memid;
+    LPOLESTR lpstrSchema;
+    union {
+        ULONG oInst;
+        VARIANT *lpvarValue;
+    } DUMMYUNIONNAME;
+    ELEMDESC elemdescVar;
+    WORD wVarFlags;
+    VARKIND varkind;
+} VARDESC;
+typedef struct tagVARDESC *LPVARDESC;
+typedef enum tagTYPEFLAGS {
+    TYPEFLAG_FAPPOBJECT = 0x1,
+    TYPEFLAG_FCANCREATE = 0x2,
+    TYPEFLAG_FLICENSED = 0x4,
+    TYPEFLAG_FPREDECLID = 0x8,
+    TYPEFLAG_FHIDDEN = 0x10,
+    TYPEFLAG_FCONTROL = 0x20,
+    TYPEFLAG_FDUAL = 0x40,
+    TYPEFLAG_FNONEXTENSIBLE = 0x80,
+    TYPEFLAG_FOLEAUTOMATION = 0x100,
+    TYPEFLAG_FRESTRICTED = 0x200,
+    TYPEFLAG_FAGGREGATABLE = 0x400,
+    TYPEFLAG_FREPLACEABLE = 0x800,
+    TYPEFLAG_FDISPATCHABLE = 0x1000,
+    TYPEFLAG_FREVERSEBIND = 0x2000,
+    TYPEFLAG_FPROXY = 0x4000
+} TYPEFLAGS;
+typedef enum tagFUNCFLAGS {
+    FUNCFLAG_FRESTRICTED = 0x1,
+    FUNCFLAG_FSOURCE = 0x2,
+    FUNCFLAG_FBINDABLE = 0x4,
+    FUNCFLAG_FREQUESTEDIT = 0x8,
+    FUNCFLAG_FDISPLAYBIND = 0x10,
+    FUNCFLAG_FDEFAULTBIND = 0x20,
+    FUNCFLAG_FHIDDEN = 0x40,
+    FUNCFLAG_FUSESGETLASTERROR = 0x80,
+    FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
+    FUNCFLAG_FUIDEFAULT = 0x200,
+    FUNCFLAG_FNONBROWSABLE = 0x400,
+    FUNCFLAG_FREPLACEABLE = 0x800,
+    FUNCFLAG_FIMMEDIATEBIND = 0x1000
+} FUNCFLAGS;
+typedef enum tagVARFLAGS {
+    VARFLAG_FREADONLY = 0x1,
+    VARFLAG_FSOURCE = 0x2,
+    VARFLAG_FBINDABLE = 0x4,
+    VARFLAG_FREQUESTEDIT = 0x8,
+    VARFLAG_FDISPLAYBIND = 0x10,
+    VARFLAG_FDEFAULTBIND = 0x20,
+    VARFLAG_FHIDDEN = 0x40,
+    VARFLAG_FRESTRICTED = 0x80,
+    VARFLAG_FDEFAULTCOLLELEM = 0x100,
+    VARFLAG_FUIDEFAULT = 0x200,
+    VARFLAG_FNONBROWSABLE = 0x400,
+    VARFLAG_FREPLACEABLE = 0x800,
+    VARFLAG_FIMMEDIATEBIND = 0x1000
+} VARFLAGS;
+typedef struct tagCLEANLOCALSTORAGE {
+    IUnknown *pInterface;
+    PVOID pStorage;
+    DWORD flags;
+} CLEANLOCALSTORAGE;
+typedef struct tagCUSTDATAITEM {
+    GUID guid;
+    VARIANTARG varValue;
+} CUSTDATAITEM;
+typedef struct tagCUSTDATAITEM *LPCUSTDATAITEM;
+typedef struct tagCUSTDATA {
+    DWORD cCustData;
+    LPCUSTDATAITEM prgCustData;
+} CUSTDATA;
+typedef struct tagCUSTDATA *LPCUSTDATA;
+
+#endif  /* __IOleAutomationTypes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDispatch interface
+ */
+#ifndef __IDispatch_INTERFACE_DEFINED__
+#define __IDispatch_INTERFACE_DEFINED__
+
+typedef IDispatch *LPDISPATCH;
+#define DISPID_UNKNOWN (-1)
+
+#define DISPID_VALUE (0)
+
+#define DISPID_PROPERTYPUT (-3)
+
+#define DISPID_NEWENUM (-4)
+
+#define DISPID_EVALUATE (-5)
+
+#define DISPID_CONSTRUCTOR (-6)
+
+#define DISPID_DESTRUCTOR (-7)
+
+#define DISPID_COLLECT (-8)
+
+DEFINE_GUID(IID_IDispatch, 0x00020400, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDispatch : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
+        UINT *pctinfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Invoke(
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr) = 0;
+
+};
+#else
+typedef struct IDispatchVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDispatch* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDispatch* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDispatch* This);
+
+    /*** IDispatch methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        IDispatch* This,
+        UINT *pctinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IDispatch* This,
+        UINT iTInfo,
+        LCID lcid,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        IDispatch* This,
+        REFIID riid,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        LCID lcid,
+        DISPID *rgDispId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IDispatch* This,
+        DISPID dispIdMember,
+        REFIID riid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    END_INTERFACE
+} IDispatchVtbl;
+interface IDispatch {
+    CONST_VTBL IDispatchVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDispatch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDispatch_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDispatch_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDispatch_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDispatch_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDispatch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDispatch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDispatch_GetTypeInfoCount_Proxy(
+    IDispatch* This,
+    UINT *pctinfo);
+void __RPC_STUB IDispatch_GetTypeInfoCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDispatch_GetTypeInfo_Proxy(
+    IDispatch* This,
+    UINT iTInfo,
+    LCID lcid,
+    ITypeInfo **ppTInfo);
+void __RPC_STUB IDispatch_GetTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDispatch_GetIDsOfNames_Proxy(
+    IDispatch* This,
+    REFIID riid,
+    LPOLESTR *rgszNames,
+    UINT cNames,
+    LCID lcid,
+    DISPID *rgDispId);
+void __RPC_STUB IDispatch_GetIDsOfNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDispatch_RemoteInvoke_Proxy(
+    IDispatch* This,
+    DISPID dispIdMember,
+    REFIID riid,
+    LCID lcid,
+    DWORD dwFlags,
+    DISPPARAMS *pDispParams,
+    VARIANT *pVarResult,
+    EXCEPINFO *pExcepInfo,
+    UINT *pArgErr,
+    UINT cVarRef,
+    UINT *rgVarRefIdx,
+    VARIANTARG *rgVarRef);
+void __RPC_STUB IDispatch_RemoteInvoke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDispatch_Invoke_Proxy(
+    IDispatch* This,
+    DISPID dispIdMember,
+    REFIID riid,
+    LCID lcid,
+    WORD wFlags,
+    DISPPARAMS *pDispParams,
+    VARIANT *pVarResult,
+    EXCEPINFO *pExcepInfo,
+    UINT *puArgErr);
+HRESULT __RPC_STUB IDispatch_Invoke_Stub(
+    IDispatch* This,
+    DISPID dispIdMember,
+    REFIID riid,
+    LCID lcid,
+    DWORD dwFlags,
+    DISPPARAMS *pDispParams,
+    VARIANT *pVarResult,
+    EXCEPINFO *pExcepInfo,
+    UINT *pArgErr,
+    UINT cVarRef,
+    UINT *rgVarRefIdx,
+    VARIANTARG *rgVarRef);
+
+#endif  /* __IDispatch_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumVARIANT interface
+ */
+#ifndef __IEnumVARIANT_INTERFACE_DEFINED__
+#define __IEnumVARIANT_INTERFACE_DEFINED__
+
+typedef IEnumVARIANT *LPENUMVARIANT;
+DEFINE_GUID(IID_IEnumVARIANT, 0x00020404, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumVARIANT : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        VARIANT *rgVar,
+        ULONG *pCeltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumVARIANT **ppEnum) = 0;
+
+};
+#else
+typedef struct IEnumVARIANTVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumVARIANT* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumVARIANT* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumVARIANT* This);
+
+    /*** IEnumVARIANT methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumVARIANT* This,
+        ULONG celt,
+        VARIANT *rgVar,
+        ULONG *pCeltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumVARIANT* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumVARIANT* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumVARIANT* This,
+        IEnumVARIANT **ppEnum);
+
+    END_INTERFACE
+} IEnumVARIANTVtbl;
+interface IEnumVARIANT {
+    CONST_VTBL IEnumVARIANTVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumVARIANT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumVARIANT_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumVARIANT_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumVARIANT methods ***/
+#define IEnumVARIANT_Next(This,celt,rgVar,pCeltFetched) (This)->lpVtbl->Next(This,celt,rgVar,pCeltFetched)
+#define IEnumVARIANT_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumVARIANT_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumVARIANT_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_RemoteNext_Proxy(
+    IEnumVARIANT* This,
+    ULONG celt,
+    VARIANT *rgVar,
+    ULONG *pCeltFetched);
+void __RPC_STUB IEnumVARIANT_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Skip_Proxy(
+    IEnumVARIANT* This,
+    ULONG celt);
+void __RPC_STUB IEnumVARIANT_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Reset_Proxy(
+    IEnumVARIANT* This);
+void __RPC_STUB IEnumVARIANT_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Clone_Proxy(
+    IEnumVARIANT* This,
+    IEnumVARIANT **ppEnum);
+void __RPC_STUB IEnumVARIANT_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumVARIANT_Next_Proxy(
+    IEnumVARIANT* This,
+    ULONG celt,
+    VARIANT *rgVar,
+    ULONG *pCeltFetched);
+HRESULT __RPC_STUB IEnumVARIANT_Next_Stub(
+    IEnumVARIANT* This,
+    ULONG celt,
+    VARIANT *rgVar,
+    ULONG *pCeltFetched);
+
+#endif  /* __IEnumVARIANT_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeComp interface
+ */
+#ifndef __ITypeComp_INTERFACE_DEFINED__
+#define __ITypeComp_INTERFACE_DEFINED__
+
+typedef ITypeComp *LPTYPECOMP;
+typedef enum tagDESCKIND {
+    DESCKIND_NONE = 0,
+    DESCKIND_FUNCDESC = 1,
+    DESCKIND_VARDESC = 2,
+    DESCKIND_TYPECOMP = 3,
+    DESCKIND_IMPLICITAPPOBJ = 4,
+    DESCKIND_MAX = 5
+} DESCKIND;
+typedef union tagBINDPTR {
+    FUNCDESC *lpfuncdesc;
+    VARDESC *lpvardesc;
+    ITypeComp *lptcomp;
+} BINDPTR;
+typedef union tagBINDPTR *LPBINDPTR;
+DEFINE_GUID(IID_ITypeComp, 0x00020403, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeComp : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Bind(
+        LPOLESTR szName,
+        ULONG lHashVal,
+        WORD wFlags,
+        ITypeInfo **ppTInfo,
+        DESCKIND *pDescKind,
+        BINDPTR *pBindPtr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindType(
+        LPOLESTR szName,
+        ULONG lHashVal,
+        ITypeInfo **ppTInfo,
+        ITypeComp **ppTComp) = 0;
+
+};
+#else
+typedef struct ITypeCompVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeComp* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeComp* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeComp* This);
+
+    /*** ITypeComp methods ***/
+    HRESULT (STDMETHODCALLTYPE *Bind)(
+        ITypeComp* This,
+        LPOLESTR szName,
+        ULONG lHashVal,
+        WORD wFlags,
+        ITypeInfo **ppTInfo,
+        DESCKIND *pDescKind,
+        BINDPTR *pBindPtr);
+
+    HRESULT (STDMETHODCALLTYPE *BindType)(
+        ITypeComp* This,
+        LPOLESTR szName,
+        ULONG lHashVal,
+        ITypeInfo **ppTInfo,
+        ITypeComp **ppTComp);
+
+    END_INTERFACE
+} ITypeCompVtbl;
+interface ITypeComp {
+    CONST_VTBL ITypeCompVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeComp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeComp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeComp_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeComp methods ***/
+#define ITypeComp_Bind(This,szName,lHashVal,wFlags,ppTInfo,pDescKind,pBindPtr) (This)->lpVtbl->Bind(This,szName,lHashVal,wFlags,ppTInfo,pDescKind,pBindPtr)
+#define ITypeComp_BindType(This,szName,lHashVal,ppTInfo,ppTComp) (This)->lpVtbl->BindType(This,szName,lHashVal,ppTInfo,ppTComp)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeComp_RemoteBind_Proxy(
+    ITypeComp* This,
+    LPOLESTR szName,
+    ULONG lHashVal,
+    WORD wFlags,
+    ITypeInfo **ppTInfo,
+    DESCKIND *pDescKind,
+    LPFUNCDESC *ppFuncDesc,
+    LPVARDESC *ppVarDesc,
+    ITypeComp **ppTypeComp,
+    CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeComp_RemoteBind_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeComp_RemoteBindType_Proxy(
+    ITypeComp* This,
+    LPOLESTR szName,
+    ULONG lHashVal,
+    ITypeInfo **ppTInfo);
+void __RPC_STUB ITypeComp_RemoteBindType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeComp_Bind_Proxy(
+    ITypeComp* This,
+    LPOLESTR szName,
+    ULONG lHashVal,
+    WORD wFlags,
+    ITypeInfo **ppTInfo,
+    DESCKIND *pDescKind,
+    BINDPTR *pBindPtr);
+HRESULT __RPC_STUB ITypeComp_Bind_Stub(
+    ITypeComp* This,
+    LPOLESTR szName,
+    ULONG lHashVal,
+    WORD wFlags,
+    ITypeInfo **ppTInfo,
+    DESCKIND *pDescKind,
+    LPFUNCDESC *ppFuncDesc,
+    LPVARDESC *ppVarDesc,
+    ITypeComp **ppTypeComp,
+    CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeComp_BindType_Proxy(
+    ITypeComp* This,
+    LPOLESTR szName,
+    ULONG lHashVal,
+    ITypeInfo **ppTInfo,
+    ITypeComp **ppTComp);
+HRESULT __RPC_STUB ITypeComp_BindType_Stub(
+    ITypeComp* This,
+    LPOLESTR szName,
+    ULONG lHashVal,
+    ITypeInfo **ppTInfo);
+
+#endif  /* __ITypeComp_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeInfo interface
+ */
+#ifndef __ITypeInfo_INTERFACE_DEFINED__
+#define __ITypeInfo_INTERFACE_DEFINED__
+
+typedef ITypeInfo *LPTYPEINFO;
+DEFINE_GUID(IID_ITypeInfo, 0x00020401, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetTypeAttr(
+        TYPEATTR **ppTypeAttr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeComp(
+        ITypeComp **ppTComp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFuncDesc(
+        UINT index,
+        FUNCDESC **ppFuncDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVarDesc(
+        UINT index,
+        VARDESC **ppVarDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNames(
+        MEMBERID memid,
+        BSTR *rgBstrNames,
+        UINT cMaxNames,
+        UINT *pcNames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRefTypeOfImplType(
+        UINT index,
+        HREFTYPE *pRefType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetImplTypeFlags(
+        UINT index,
+        INT *pImplTypeFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        MEMBERID *pMemId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Invoke(
+        PVOID pvInstance,
+        MEMBERID memid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDocumentation(
+        MEMBERID memid,
+        BSTR *pBstrName,
+        BSTR *pBstrDocString,
+        DWORD *pdwHelpContext,
+        BSTR *pBstrHelpFile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDllEntry(
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        BSTR *pBstrDllName,
+        BSTR *pBstrName,
+        WORD *pwOrdinal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRefTypeInfo(
+        HREFTYPE hRefType,
+        ITypeInfo **ppTInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddressOfMember(
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        PVOID *ppv) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        PVOID *ppvObj) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMops(
+        MEMBERID memid,
+        BSTR *pBstrMops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetContainingTypeLib(
+        ITypeLib **ppTLib,
+        UINT *pIndex) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseTypeAttr(
+        TYPEATTR *pTypeAttr) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseFuncDesc(
+        FUNCDESC *pFuncDesc) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseVarDesc(
+        VARDESC *pVarDesc) = 0;
+
+};
+#else
+typedef struct ITypeInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeInfo* This);
+
+    /*** ITypeInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeAttr)(
+        ITypeInfo* This,
+        TYPEATTR **ppTypeAttr);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+        ITypeInfo* This,
+        ITypeComp **ppTComp);
+
+    HRESULT (STDMETHODCALLTYPE *GetFuncDesc)(
+        ITypeInfo* This,
+        UINT index,
+        FUNCDESC **ppFuncDesc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVarDesc)(
+        ITypeInfo* This,
+        UINT index,
+        VARDESC **ppVarDesc);
+
+    HRESULT (STDMETHODCALLTYPE *GetNames)(
+        ITypeInfo* This,
+        MEMBERID memid,
+        BSTR *rgBstrNames,
+        UINT cMaxNames,
+        UINT *pcNames);
+
+    HRESULT (STDMETHODCALLTYPE *GetRefTypeOfImplType)(
+        ITypeInfo* This,
+        UINT index,
+        HREFTYPE *pRefType);
+
+    HRESULT (STDMETHODCALLTYPE *GetImplTypeFlags)(
+        ITypeInfo* This,
+        UINT index,
+        INT *pImplTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ITypeInfo* This,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        MEMBERID *pMemId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ITypeInfo* This,
+        PVOID pvInstance,
+        MEMBERID memid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+        ITypeInfo* This,
+        MEMBERID memid,
+        BSTR *pBstrName,
+        BSTR *pBstrDocString,
+        DWORD *pdwHelpContext,
+        BSTR *pBstrHelpFile);
+
+    HRESULT (STDMETHODCALLTYPE *GetDllEntry)(
+        ITypeInfo* This,
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        BSTR *pBstrDllName,
+        BSTR *pBstrName,
+        WORD *pwOrdinal);
+
+    HRESULT (STDMETHODCALLTYPE *GetRefTypeInfo)(
+        ITypeInfo* This,
+        HREFTYPE hRefType,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *AddressOfMember)(
+        ITypeInfo* This,
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        PVOID *ppv);
+
+    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+        ITypeInfo* This,
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        PVOID *ppvObj);
+
+    HRESULT (STDMETHODCALLTYPE *GetMops)(
+        ITypeInfo* This,
+        MEMBERID memid,
+        BSTR *pBstrMops);
+
+    HRESULT (STDMETHODCALLTYPE *GetContainingTypeLib)(
+        ITypeInfo* This,
+        ITypeLib **ppTLib,
+        UINT *pIndex);
+
+    void (STDMETHODCALLTYPE *ReleaseTypeAttr)(
+        ITypeInfo* This,
+        TYPEATTR *pTypeAttr);
+
+    void (STDMETHODCALLTYPE *ReleaseFuncDesc)(
+        ITypeInfo* This,
+        FUNCDESC *pFuncDesc);
+
+    void (STDMETHODCALLTYPE *ReleaseVarDesc)(
+        ITypeInfo* This,
+        VARDESC *pVarDesc);
+
+    END_INTERFACE
+} ITypeInfoVtbl;
+interface ITypeInfo {
+    CONST_VTBL ITypeInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeInfo methods ***/
+#define ITypeInfo_GetTypeAttr(This,ppTypeAttr) (This)->lpVtbl->GetTypeAttr(This,ppTypeAttr)
+#define ITypeInfo_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeInfo_GetFuncDesc(This,index,ppFuncDesc) (This)->lpVtbl->GetFuncDesc(This,index,ppFuncDesc)
+#define ITypeInfo_GetVarDesc(This,index,ppVarDesc) (This)->lpVtbl->GetVarDesc(This,index,ppVarDesc)
+#define ITypeInfo_GetNames(This,memid,rgBstrNames,cMaxNames,pcNames) (This)->lpVtbl->GetNames(This,memid,rgBstrNames,cMaxNames,pcNames)
+#define ITypeInfo_GetRefTypeOfImplType(This,index,pRefType) (This)->lpVtbl->GetRefTypeOfImplType(This,index,pRefType)
+#define ITypeInfo_GetImplTypeFlags(This,index,pImplTypeFlags) (This)->lpVtbl->GetImplTypeFlags(This,index,pImplTypeFlags)
+#define ITypeInfo_GetIDsOfNames(This,rgszNames,cNames,pMemId) (This)->lpVtbl->GetIDsOfNames(This,rgszNames,cNames,pMemId)
+#define ITypeInfo_Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define ITypeInfo_GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeInfo_GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal) (This)->lpVtbl->GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal)
+#define ITypeInfo_GetRefTypeInfo(This,hRefType,ppTInfo) (This)->lpVtbl->GetRefTypeInfo(This,hRefType,ppTInfo)
+#define ITypeInfo_AddressOfMember(This,memid,invKind,ppv) (This)->lpVtbl->AddressOfMember(This,memid,invKind,ppv)
+#define ITypeInfo_CreateInstance(This,pUnkOuter,riid,ppvObj) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObj)
+#define ITypeInfo_GetMops(This,memid,pBstrMops) (This)->lpVtbl->GetMops(This,memid,pBstrMops)
+#define ITypeInfo_GetContainingTypeLib(This,ppTLib,pIndex) (This)->lpVtbl->GetContainingTypeLib(This,ppTLib,pIndex)
+#define ITypeInfo_ReleaseTypeAttr(This,pTypeAttr) (This)->lpVtbl->ReleaseTypeAttr(This,pTypeAttr)
+#define ITypeInfo_ReleaseFuncDesc(This,pFuncDesc) (This)->lpVtbl->ReleaseFuncDesc(This,pFuncDesc)
+#define ITypeInfo_ReleaseVarDesc(This,pVarDesc) (This)->lpVtbl->ReleaseVarDesc(This,pVarDesc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetTypeAttr_Proxy(
+    ITypeInfo* This,
+    LPTYPEATTR *ppTypeAttr,
+    CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeInfo_RemoteGetTypeAttr_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetTypeComp_Proxy(
+    ITypeInfo* This,
+    ITypeComp **ppTComp);
+void __RPC_STUB ITypeInfo_GetTypeComp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetFuncDesc_Proxy(
+    ITypeInfo* This,
+    UINT index,
+    LPFUNCDESC *ppFuncDesc,
+    CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeInfo_RemoteGetFuncDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetVarDesc_Proxy(
+    ITypeInfo* This,
+    UINT index,
+    LPVARDESC *ppVarDesc,
+    CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeInfo_RemoteGetVarDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetNames_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    BSTR *rgBstrNames,
+    UINT cMaxNames,
+    UINT *pcNames);
+void __RPC_STUB ITypeInfo_RemoteGetNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetRefTypeOfImplType_Proxy(
+    ITypeInfo* This,
+    UINT index,
+    HREFTYPE *pRefType);
+void __RPC_STUB ITypeInfo_GetRefTypeOfImplType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetImplTypeFlags_Proxy(
+    ITypeInfo* This,
+    UINT index,
+    INT *pImplTypeFlags);
+void __RPC_STUB ITypeInfo_GetImplTypeFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalGetIDsOfNames_Proxy(
+    ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalGetIDsOfNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalInvoke_Proxy(
+    ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalInvoke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetDocumentation_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    DWORD refPtrFlags,
+    BSTR *pBstrName,
+    BSTR *pBstrDocString,
+    DWORD *pdwHelpContext,
+    BSTR *pBstrHelpFile);
+void __RPC_STUB ITypeInfo_RemoteGetDocumentation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetDllEntry_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    INVOKEKIND invKind,
+    DWORD refPtrFlags,
+    BSTR *pBstrDllName,
+    BSTR *pBstrName,
+    WORD *pwOrdinal);
+void __RPC_STUB ITypeInfo_RemoteGetDllEntry_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetRefTypeInfo_Proxy(
+    ITypeInfo* This,
+    HREFTYPE hRefType,
+    ITypeInfo **ppTInfo);
+void __RPC_STUB ITypeInfo_GetRefTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalAddressOfMember_Proxy(
+    ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalAddressOfMember_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteCreateInstance_Proxy(
+    ITypeInfo* This,
+    REFIID riid,
+    IUnknown **ppvObj);
+void __RPC_STUB ITypeInfo_RemoteCreateInstance_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetMops_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    BSTR *pBstrMops);
+void __RPC_STUB ITypeInfo_GetMops_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetContainingTypeLib_Proxy(
+    ITypeInfo* This,
+    ITypeLib **ppTLib,
+    UINT *pIndex);
+void __RPC_STUB ITypeInfo_RemoteGetContainingTypeLib_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalReleaseTypeAttr_Proxy(
+    ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalReleaseTypeAttr_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalReleaseFuncDesc_Proxy(
+    ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalReleaseFuncDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalReleaseVarDesc_Proxy(
+    ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalReleaseVarDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeInfo_GetTypeAttr_Proxy(
+    ITypeInfo* This,
+    TYPEATTR **ppTypeAttr);
+HRESULT __RPC_STUB ITypeInfo_GetTypeAttr_Stub(
+    ITypeInfo* This,
+    LPTYPEATTR *ppTypeAttr,
+    CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeInfo_GetFuncDesc_Proxy(
+    ITypeInfo* This,
+    UINT index,
+    FUNCDESC **ppFuncDesc);
+HRESULT __RPC_STUB ITypeInfo_GetFuncDesc_Stub(
+    ITypeInfo* This,
+    UINT index,
+    LPFUNCDESC *ppFuncDesc,
+    CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeInfo_GetVarDesc_Proxy(
+    ITypeInfo* This,
+    UINT index,
+    VARDESC **ppVarDesc);
+HRESULT __RPC_STUB ITypeInfo_GetVarDesc_Stub(
+    ITypeInfo* This,
+    UINT index,
+    LPVARDESC *ppVarDesc,
+    CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeInfo_GetNames_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    BSTR *rgBstrNames,
+    UINT cMaxNames,
+    UINT *pcNames);
+HRESULT __RPC_STUB ITypeInfo_GetNames_Stub(
+    ITypeInfo* This,
+    MEMBERID memid,
+    BSTR *rgBstrNames,
+    UINT cMaxNames,
+    UINT *pcNames);
+HRESULT CALLBACK ITypeInfo_GetIDsOfNames_Proxy(
+    ITypeInfo* This,
+    LPOLESTR *rgszNames,
+    UINT cNames,
+    MEMBERID *pMemId);
+HRESULT __RPC_STUB ITypeInfo_GetIDsOfNames_Stub(
+    ITypeInfo* This);
+HRESULT CALLBACK ITypeInfo_Invoke_Proxy(
+    ITypeInfo* This,
+    PVOID pvInstance,
+    MEMBERID memid,
+    WORD wFlags,
+    DISPPARAMS *pDispParams,
+    VARIANT *pVarResult,
+    EXCEPINFO *pExcepInfo,
+    UINT *puArgErr);
+HRESULT __RPC_STUB ITypeInfo_Invoke_Stub(
+    ITypeInfo* This);
+HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    BSTR *pBstrName,
+    BSTR *pBstrDocString,
+    DWORD *pdwHelpContext,
+    BSTR *pBstrHelpFile);
+HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub(
+    ITypeInfo* This,
+    MEMBERID memid,
+    DWORD refPtrFlags,
+    BSTR *pBstrName,
+    BSTR *pBstrDocString,
+    DWORD *pdwHelpContext,
+    BSTR *pBstrHelpFile);
+HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    INVOKEKIND invKind,
+    BSTR *pBstrDllName,
+    BSTR *pBstrName,
+    WORD *pwOrdinal);
+HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub(
+    ITypeInfo* This,
+    MEMBERID memid,
+    INVOKEKIND invKind,
+    DWORD refPtrFlags,
+    BSTR *pBstrDllName,
+    BSTR *pBstrName,
+    WORD *pwOrdinal);
+HRESULT CALLBACK ITypeInfo_AddressOfMember_Proxy(
+    ITypeInfo* This,
+    MEMBERID memid,
+    INVOKEKIND invKind,
+    PVOID *ppv);
+HRESULT __RPC_STUB ITypeInfo_AddressOfMember_Stub(
+    ITypeInfo* This);
+HRESULT CALLBACK ITypeInfo_CreateInstance_Proxy(
+    ITypeInfo* This,
+    IUnknown *pUnkOuter,
+    REFIID riid,
+    PVOID *ppvObj);
+HRESULT __RPC_STUB ITypeInfo_CreateInstance_Stub(
+    ITypeInfo* This,
+    REFIID riid,
+    IUnknown **ppvObj);
+HRESULT CALLBACK ITypeInfo_GetContainingTypeLib_Proxy(
+    ITypeInfo* This,
+    ITypeLib **ppTLib,
+    UINT *pIndex);
+HRESULT __RPC_STUB ITypeInfo_GetContainingTypeLib_Stub(
+    ITypeInfo* This,
+    ITypeLib **ppTLib,
+    UINT *pIndex);
+void CALLBACK ITypeInfo_ReleaseTypeAttr_Proxy(
+    ITypeInfo* This,
+    TYPEATTR *pTypeAttr);
+HRESULT __RPC_STUB ITypeInfo_ReleaseTypeAttr_Stub(
+    ITypeInfo* This);
+void CALLBACK ITypeInfo_ReleaseFuncDesc_Proxy(
+    ITypeInfo* This,
+    FUNCDESC *pFuncDesc);
+HRESULT __RPC_STUB ITypeInfo_ReleaseFuncDesc_Stub(
+    ITypeInfo* This);
+void CALLBACK ITypeInfo_ReleaseVarDesc_Proxy(
+    ITypeInfo* This,
+    VARDESC *pVarDesc);
+HRESULT __RPC_STUB ITypeInfo_ReleaseVarDesc_Stub(
+    ITypeInfo* This);
+
+#endif  /* __ITypeInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeInfo2 interface
+ */
+#ifndef __ITypeInfo2_INTERFACE_DEFINED__
+#define __ITypeInfo2_INTERFACE_DEFINED__
+
+typedef ITypeInfo2 *LPTYPEINFO2;
+DEFINE_GUID(IID_ITypeInfo2, 0x00020412, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeInfo2 : public ITypeInfo
+{
+    virtual HRESULT STDMETHODCALLTYPE GetTypeKind(
+        TYPEKIND *pTypeKind) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeFlags(
+        ULONG *pTypeFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFuncIndexOfMemId(
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        UINT *pFuncIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVarIndexOfMemId(
+        MEMBERID memid,
+        UINT *pVarIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCustData(
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFuncCustData(
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetParamCustData(
+        UINT indexFunc,
+        UINT indexParam,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVarCustData(
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetImplTypeCustData(
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDocumentation2(
+        MEMBERID memid,
+        LCID lcid,
+        BSTR *pbstrHelpString,
+        DWORD *pdwHelpStringContext,
+        BSTR *pbstrHelpStringDll) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllCustData(
+        CUSTDATA *pCustData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllFuncCustData(
+        UINT index,
+        CUSTDATA *pCustData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllParamCustData(
+        UINT indexFunc,
+        UINT indexParam,
+        CUSTDATA *pCustData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllVarCustData(
+        UINT index,
+        CUSTDATA *pCustData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllImplTypeCustData(
+        UINT index,
+        CUSTDATA *pCustData) = 0;
+
+};
+#else
+typedef struct ITypeInfo2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeInfo2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeInfo2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeInfo2* This);
+
+    /*** ITypeInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeAttr)(
+        ITypeInfo2* This,
+        TYPEATTR **ppTypeAttr);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+        ITypeInfo2* This,
+        ITypeComp **ppTComp);
+
+    HRESULT (STDMETHODCALLTYPE *GetFuncDesc)(
+        ITypeInfo2* This,
+        UINT index,
+        FUNCDESC **ppFuncDesc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVarDesc)(
+        ITypeInfo2* This,
+        UINT index,
+        VARDESC **ppVarDesc);
+
+    HRESULT (STDMETHODCALLTYPE *GetNames)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        BSTR *rgBstrNames,
+        UINT cMaxNames,
+        UINT *pcNames);
+
+    HRESULT (STDMETHODCALLTYPE *GetRefTypeOfImplType)(
+        ITypeInfo2* This,
+        UINT index,
+        HREFTYPE *pRefType);
+
+    HRESULT (STDMETHODCALLTYPE *GetImplTypeFlags)(
+        ITypeInfo2* This,
+        UINT index,
+        INT *pImplTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+        ITypeInfo2* This,
+        LPOLESTR *rgszNames,
+        UINT cNames,
+        MEMBERID *pMemId);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        ITypeInfo2* This,
+        PVOID pvInstance,
+        MEMBERID memid,
+        WORD wFlags,
+        DISPPARAMS *pDispParams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo,
+        UINT *puArgErr);
+
+    HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        BSTR *pBstrName,
+        BSTR *pBstrDocString,
+        DWORD *pdwHelpContext,
+        BSTR *pBstrHelpFile);
+
+    HRESULT (STDMETHODCALLTYPE *GetDllEntry)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        BSTR *pBstrDllName,
+        BSTR *pBstrName,
+        WORD *pwOrdinal);
+
+    HRESULT (STDMETHODCALLTYPE *GetRefTypeInfo)(
+        ITypeInfo2* This,
+        HREFTYPE hRefType,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *AddressOfMember)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        PVOID *ppv);
+
+    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+        ITypeInfo2* This,
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        PVOID *ppvObj);
+
+    HRESULT (STDMETHODCALLTYPE *GetMops)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        BSTR *pBstrMops);
+
+    HRESULT (STDMETHODCALLTYPE *GetContainingTypeLib)(
+        ITypeInfo2* This,
+        ITypeLib **ppTLib,
+        UINT *pIndex);
+
+    void (STDMETHODCALLTYPE *ReleaseTypeAttr)(
+        ITypeInfo2* This,
+        TYPEATTR *pTypeAttr);
+
+    void (STDMETHODCALLTYPE *ReleaseFuncDesc)(
+        ITypeInfo2* This,
+        FUNCDESC *pFuncDesc);
+
+    void (STDMETHODCALLTYPE *ReleaseVarDesc)(
+        ITypeInfo2* This,
+        VARDESC *pVarDesc);
+
+    /*** ITypeInfo2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetTypeKind)(
+        ITypeInfo2* This,
+        TYPEKIND *pTypeKind);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeFlags)(
+        ITypeInfo2* This,
+        ULONG *pTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFuncIndexOfMemId)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        INVOKEKIND invKind,
+        UINT *pFuncIndex);
+
+    HRESULT (STDMETHODCALLTYPE *GetVarIndexOfMemId)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        UINT *pVarIndex);
+
+    HRESULT (STDMETHODCALLTYPE *GetCustData)(
+        ITypeInfo2* This,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *GetFuncCustData)(
+        ITypeInfo2* This,
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *GetParamCustData)(
+        ITypeInfo2* This,
+        UINT indexFunc,
+        UINT indexParam,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *GetVarCustData)(
+        ITypeInfo2* This,
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *GetImplTypeCustData)(
+        ITypeInfo2* This,
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *GetDocumentation2)(
+        ITypeInfo2* This,
+        MEMBERID memid,
+        LCID lcid,
+        BSTR *pbstrHelpString,
+        DWORD *pdwHelpStringContext,
+        BSTR *pbstrHelpStringDll);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllCustData)(
+        ITypeInfo2* This,
+        CUSTDATA *pCustData);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllFuncCustData)(
+        ITypeInfo2* This,
+        UINT index,
+        CUSTDATA *pCustData);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllParamCustData)(
+        ITypeInfo2* This,
+        UINT indexFunc,
+        UINT indexParam,
+        CUSTDATA *pCustData);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllVarCustData)(
+        ITypeInfo2* This,
+        UINT index,
+        CUSTDATA *pCustData);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllImplTypeCustData)(
+        ITypeInfo2* This,
+        UINT index,
+        CUSTDATA *pCustData);
+
+    END_INTERFACE
+} ITypeInfo2Vtbl;
+interface ITypeInfo2 {
+    CONST_VTBL ITypeInfo2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeInfo2_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeInfo methods ***/
+#define ITypeInfo2_GetTypeAttr(This,ppTypeAttr) (This)->lpVtbl->GetTypeAttr(This,ppTypeAttr)
+#define ITypeInfo2_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeInfo2_GetFuncDesc(This,index,ppFuncDesc) (This)->lpVtbl->GetFuncDesc(This,index,ppFuncDesc)
+#define ITypeInfo2_GetVarDesc(This,index,ppVarDesc) (This)->lpVtbl->GetVarDesc(This,index,ppVarDesc)
+#define ITypeInfo2_GetNames(This,memid,rgBstrNames,cMaxNames,pcNames) (This)->lpVtbl->GetNames(This,memid,rgBstrNames,cMaxNames,pcNames)
+#define ITypeInfo2_GetRefTypeOfImplType(This,index,pRefType) (This)->lpVtbl->GetRefTypeOfImplType(This,index,pRefType)
+#define ITypeInfo2_GetImplTypeFlags(This,index,pImplTypeFlags) (This)->lpVtbl->GetImplTypeFlags(This,index,pImplTypeFlags)
+#define ITypeInfo2_GetIDsOfNames(This,rgszNames,cNames,pMemId) (This)->lpVtbl->GetIDsOfNames(This,rgszNames,cNames,pMemId)
+#define ITypeInfo2_Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define ITypeInfo2_GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeInfo2_GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal) (This)->lpVtbl->GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal)
+#define ITypeInfo2_GetRefTypeInfo(This,hRefType,ppTInfo) (This)->lpVtbl->GetRefTypeInfo(This,hRefType,ppTInfo)
+#define ITypeInfo2_AddressOfMember(This,memid,invKind,ppv) (This)->lpVtbl->AddressOfMember(This,memid,invKind,ppv)
+#define ITypeInfo2_CreateInstance(This,pUnkOuter,riid,ppvObj) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObj)
+#define ITypeInfo2_GetMops(This,memid,pBstrMops) (This)->lpVtbl->GetMops(This,memid,pBstrMops)
+#define ITypeInfo2_GetContainingTypeLib(This,ppTLib,pIndex) (This)->lpVtbl->GetContainingTypeLib(This,ppTLib,pIndex)
+#define ITypeInfo2_ReleaseTypeAttr(This,pTypeAttr) (This)->lpVtbl->ReleaseTypeAttr(This,pTypeAttr)
+#define ITypeInfo2_ReleaseFuncDesc(This,pFuncDesc) (This)->lpVtbl->ReleaseFuncDesc(This,pFuncDesc)
+#define ITypeInfo2_ReleaseVarDesc(This,pVarDesc) (This)->lpVtbl->ReleaseVarDesc(This,pVarDesc)
+/*** ITypeInfo2 methods ***/
+#define ITypeInfo2_GetTypeKind(This,pTypeKind) (This)->lpVtbl->GetTypeKind(This,pTypeKind)
+#define ITypeInfo2_GetTypeFlags(This,pTypeFlags) (This)->lpVtbl->GetTypeFlags(This,pTypeFlags)
+#define ITypeInfo2_GetFuncIndexOfMemId(This,memid,invKind,pFuncIndex) (This)->lpVtbl->GetFuncIndexOfMemId(This,memid,invKind,pFuncIndex)
+#define ITypeInfo2_GetVarIndexOfMemId(This,memid,pVarIndex) (This)->lpVtbl->GetVarIndexOfMemId(This,memid,pVarIndex)
+#define ITypeInfo2_GetCustData(This,guid,pVarVal) (This)->lpVtbl->GetCustData(This,guid,pVarVal)
+#define ITypeInfo2_GetFuncCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetFuncCustData(This,index,guid,pVarVal)
+#define ITypeInfo2_GetParamCustData(This,indexFunc,indexParam,guid,pVarVal) (This)->lpVtbl->GetParamCustData(This,indexFunc,indexParam,guid,pVarVal)
+#define ITypeInfo2_GetVarCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetVarCustData(This,index,guid,pVarVal)
+#define ITypeInfo2_GetImplTypeCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetImplTypeCustData(This,index,guid,pVarVal)
+#define ITypeInfo2_GetDocumentation2(This,memid,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll) (This)->lpVtbl->GetDocumentation2(This,memid,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll)
+#define ITypeInfo2_GetAllCustData(This,pCustData) (This)->lpVtbl->GetAllCustData(This,pCustData)
+#define ITypeInfo2_GetAllFuncCustData(This,index,pCustData) (This)->lpVtbl->GetAllFuncCustData(This,index,pCustData)
+#define ITypeInfo2_GetAllParamCustData(This,indexFunc,indexParam,pCustData) (This)->lpVtbl->GetAllParamCustData(This,indexFunc,indexParam,pCustData)
+#define ITypeInfo2_GetAllVarCustData(This,index,pCustData) (This)->lpVtbl->GetAllVarCustData(This,index,pCustData)
+#define ITypeInfo2_GetAllImplTypeCustData(This,index,pCustData) (This)->lpVtbl->GetAllImplTypeCustData(This,index,pCustData)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetTypeKind_Proxy(
+    ITypeInfo2* This,
+    TYPEKIND *pTypeKind);
+void __RPC_STUB ITypeInfo2_GetTypeKind_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetTypeFlags_Proxy(
+    ITypeInfo2* This,
+    ULONG *pTypeFlags);
+void __RPC_STUB ITypeInfo2_GetTypeFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetFuncIndexOfMemId_Proxy(
+    ITypeInfo2* This,
+    MEMBERID memid,
+    INVOKEKIND invKind,
+    UINT *pFuncIndex);
+void __RPC_STUB ITypeInfo2_GetFuncIndexOfMemId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetVarIndexOfMemId_Proxy(
+    ITypeInfo2* This,
+    MEMBERID memid,
+    UINT *pVarIndex);
+void __RPC_STUB ITypeInfo2_GetVarIndexOfMemId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetCustData_Proxy(
+    ITypeInfo2* This,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetFuncCustData_Proxy(
+    ITypeInfo2* This,
+    UINT index,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetFuncCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetParamCustData_Proxy(
+    ITypeInfo2* This,
+    UINT indexFunc,
+    UINT indexParam,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetParamCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetVarCustData_Proxy(
+    ITypeInfo2* This,
+    UINT index,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetVarCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetImplTypeCustData_Proxy(
+    ITypeInfo2* This,
+    UINT index,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetImplTypeCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_RemoteGetDocumentation2_Proxy(
+    ITypeInfo2* This,
+    MEMBERID memid,
+    LCID lcid,
+    DWORD refPtrFlags,
+    BSTR *pbstrHelpString,
+    DWORD *pdwHelpStringContext,
+    BSTR *pbstrHelpStringDll);
+void __RPC_STUB ITypeInfo2_RemoteGetDocumentation2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllCustData_Proxy(
+    ITypeInfo2* This,
+    CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllFuncCustData_Proxy(
+    ITypeInfo2* This,
+    UINT index,
+    CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllFuncCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllParamCustData_Proxy(
+    ITypeInfo2* This,
+    UINT indexFunc,
+    UINT indexParam,
+    CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllParamCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllVarCustData_Proxy(
+    ITypeInfo2* This,
+    UINT index,
+    CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllVarCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllImplTypeCustData_Proxy(
+    ITypeInfo2* This,
+    UINT index,
+    CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllImplTypeCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeInfo2_GetDocumentation2_Proxy(
+    ITypeInfo2* This,
+    MEMBERID memid,
+    LCID lcid,
+    BSTR *pbstrHelpString,
+    DWORD *pdwHelpStringContext,
+    BSTR *pbstrHelpStringDll);
+HRESULT __RPC_STUB ITypeInfo2_GetDocumentation2_Stub(
+    ITypeInfo2* This,
+    MEMBERID memid,
+    LCID lcid,
+    DWORD refPtrFlags,
+    BSTR *pbstrHelpString,
+    DWORD *pdwHelpStringContext,
+    BSTR *pbstrHelpStringDll);
+
+#endif  /* __ITypeInfo2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeLib interface
+ */
+#ifndef __ITypeLib_INTERFACE_DEFINED__
+#define __ITypeLib_INTERFACE_DEFINED__
+
+typedef ITypeLib *LPTYPELIB;
+typedef enum tagSYSKIND {
+    SYS_WIN16 = 0,
+    SYS_WIN32 = 1,
+    SYS_MAC = 2,
+    SYS_WIN64 = 3
+} SYSKIND;
+typedef enum tagLIBFLAGS {
+    LIBFLAG_FRESTRICTED = 0x1,
+    LIBFLAG_FCONTROL = 0x2,
+    LIBFLAG_FHIDDEN = 0x4,
+    LIBFLAG_FHASDISKIMAGE = 0x8
+} LIBFLAGS;
+typedef struct tagTLIBATTR {
+    GUID guid;
+    LCID lcid;
+    SYSKIND syskind;
+    WORD wMajorVerNum;
+    WORD wMinorVerNum;
+    WORD wLibFlags;
+} TLIBATTR;
+typedef struct tagTLIBATTR *LPTLIBATTR;
+DEFINE_GUID(IID_ITypeLib, 0x00020402, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeLib : public IUnknown
+{
+    virtual UINT STDMETHODCALLTYPE GetTypeInfoCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+        UINT index,
+        ITypeInfo **ppTInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfoType(
+        UINT index,
+        TYPEKIND *pTKind) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfoOfGuid(
+        REFGUID guid,
+        ITypeInfo **ppTinfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLibAttr(
+        TLIBATTR **ppTLibAttr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeComp(
+        ITypeComp **ppTComp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDocumentation(
+        INT index,
+        BSTR *pBstrName,
+        BSTR *pBstrDocString,
+        DWORD *pdwHelpContext,
+        BSTR *pBstrHelpFile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsName(
+        LPOLESTR szNameBuf,
+        ULONG lHashVal,
+        BOOL *pfName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindName(
+        LPOLESTR szNameBuf,
+        ULONG lHashVal,
+        ITypeInfo **ppTInfo,
+        MEMBERID *rgMemId,
+        USHORT *pcFound) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseTLibAttr(
+        TLIBATTR *pTLibAttr) = 0;
+
+};
+#else
+typedef struct ITypeLibVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeLib* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeLib* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeLib* This);
+
+    /*** ITypeLib methods ***/
+    UINT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ITypeLib* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ITypeLib* This,
+        UINT index,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoType)(
+        ITypeLib* This,
+        UINT index,
+        TYPEKIND *pTKind);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoOfGuid)(
+        ITypeLib* This,
+        REFGUID guid,
+        ITypeInfo **ppTinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetLibAttr)(
+        ITypeLib* This,
+        TLIBATTR **ppTLibAttr);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+        ITypeLib* This,
+        ITypeComp **ppTComp);
+
+    HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+        ITypeLib* This,
+        INT index,
+        BSTR *pBstrName,
+        BSTR *pBstrDocString,
+        DWORD *pdwHelpContext,
+        BSTR *pBstrHelpFile);
+
+    HRESULT (STDMETHODCALLTYPE *IsName)(
+        ITypeLib* This,
+        LPOLESTR szNameBuf,
+        ULONG lHashVal,
+        BOOL *pfName);
+
+    HRESULT (STDMETHODCALLTYPE *FindName)(
+        ITypeLib* This,
+        LPOLESTR szNameBuf,
+        ULONG lHashVal,
+        ITypeInfo **ppTInfo,
+        MEMBERID *rgMemId,
+        USHORT *pcFound);
+
+    void (STDMETHODCALLTYPE *ReleaseTLibAttr)(
+        ITypeLib* This,
+        TLIBATTR *pTLibAttr);
+
+    END_INTERFACE
+} ITypeLibVtbl;
+interface ITypeLib {
+    CONST_VTBL ITypeLibVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeLib_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeLib_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeLib_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeLib methods ***/
+#define ITypeLib_GetTypeInfoCount(This) (This)->lpVtbl->GetTypeInfoCount(This)
+#define ITypeLib_GetTypeInfo(This,index,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,index,ppTInfo)
+#define ITypeLib_GetTypeInfoType(This,index,pTKind) (This)->lpVtbl->GetTypeInfoType(This,index,pTKind)
+#define ITypeLib_GetTypeInfoOfGuid(This,guid,ppTinfo) (This)->lpVtbl->GetTypeInfoOfGuid(This,guid,ppTinfo)
+#define ITypeLib_GetLibAttr(This,ppTLibAttr) (This)->lpVtbl->GetLibAttr(This,ppTLibAttr)
+#define ITypeLib_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeLib_GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeLib_IsName(This,szNameBuf,lHashVal,pfName) (This)->lpVtbl->IsName(This,szNameBuf,lHashVal,pfName)
+#define ITypeLib_FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound) (This)->lpVtbl->FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound)
+#define ITypeLib_ReleaseTLibAttr(This,pTLibAttr) (This)->lpVtbl->ReleaseTLibAttr(This,pTLibAttr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteGetTypeInfoCount_Proxy(
+    ITypeLib* This,
+    UINT *pcTInfo);
+void __RPC_STUB ITypeLib_RemoteGetTypeInfoCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfo_Proxy(
+    ITypeLib* This,
+    UINT index,
+    ITypeInfo **ppTInfo);
+void __RPC_STUB ITypeLib_GetTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfoType_Proxy(
+    ITypeLib* This,
+    UINT index,
+    TYPEKIND *pTKind);
+void __RPC_STUB ITypeLib_GetTypeInfoType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfoOfGuid_Proxy(
+    ITypeLib* This,
+    REFGUID guid,
+    ITypeInfo **ppTinfo);
+void __RPC_STUB ITypeLib_GetTypeInfoOfGuid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteGetLibAttr_Proxy(
+    ITypeLib* This,
+    LPTLIBATTR *ppTLibAttr,
+    CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeLib_RemoteGetLibAttr_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeComp_Proxy(
+    ITypeLib* This,
+    ITypeComp **ppTComp);
+void __RPC_STUB ITypeLib_GetTypeComp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteGetDocumentation_Proxy(
+    ITypeLib* This,
+    INT index,
+    DWORD refPtrFlags,
+    BSTR *pBstrName,
+    BSTR *pBstrDocString,
+    DWORD *pdwHelpContext,
+    BSTR *pBstrHelpFile);
+void __RPC_STUB ITypeLib_RemoteGetDocumentation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteIsName_Proxy(
+    ITypeLib* This,
+    LPOLESTR szNameBuf,
+    ULONG lHashVal,
+    BOOL *pfName,
+    BSTR *pBstrLibName);
+void __RPC_STUB ITypeLib_RemoteIsName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteFindName_Proxy(
+    ITypeLib* This,
+    LPOLESTR szNameBuf,
+    ULONG lHashVal,
+    ITypeInfo **ppTInfo,
+    MEMBERID *rgMemId,
+    USHORT *pcFound,
+    BSTR *pBstrLibName);
+void __RPC_STUB ITypeLib_RemoteFindName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_LocalReleaseTLibAttr_Proxy(
+    ITypeLib* This);
+void __RPC_STUB ITypeLib_LocalReleaseTLibAttr_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT CALLBACK ITypeLib_GetTypeInfoCount_Proxy(
+    ITypeLib* This);
+HRESULT __RPC_STUB ITypeLib_GetTypeInfoCount_Stub(
+    ITypeLib* This,
+    UINT *pcTInfo);
+HRESULT CALLBACK ITypeLib_GetLibAttr_Proxy(
+    ITypeLib* This,
+    TLIBATTR **ppTLibAttr);
+HRESULT __RPC_STUB ITypeLib_GetLibAttr_Stub(
+    ITypeLib* This,
+    LPTLIBATTR *ppTLibAttr,
+    CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeLib_GetDocumentation_Proxy(
+    ITypeLib* This,
+    INT index,
+    BSTR *pBstrName,
+    BSTR *pBstrDocString,
+    DWORD *pdwHelpContext,
+    BSTR *pBstrHelpFile);
+HRESULT __RPC_STUB ITypeLib_GetDocumentation_Stub(
+    ITypeLib* This,
+    INT index,
+    DWORD refPtrFlags,
+    BSTR *pBstrName,
+    BSTR *pBstrDocString,
+    DWORD *pdwHelpContext,
+    BSTR *pBstrHelpFile);
+HRESULT CALLBACK ITypeLib_IsName_Proxy(
+    ITypeLib* This,
+    LPOLESTR szNameBuf,
+    ULONG lHashVal,
+    BOOL *pfName);
+HRESULT __RPC_STUB ITypeLib_IsName_Stub(
+    ITypeLib* This,
+    LPOLESTR szNameBuf,
+    ULONG lHashVal,
+    BOOL *pfName,
+    BSTR *pBstrLibName);
+HRESULT CALLBACK ITypeLib_FindName_Proxy(
+    ITypeLib* This,
+    LPOLESTR szNameBuf,
+    ULONG lHashVal,
+    ITypeInfo **ppTInfo,
+    MEMBERID *rgMemId,
+    USHORT *pcFound);
+HRESULT __RPC_STUB ITypeLib_FindName_Stub(
+    ITypeLib* This,
+    LPOLESTR szNameBuf,
+    ULONG lHashVal,
+    ITypeInfo **ppTInfo,
+    MEMBERID *rgMemId,
+    USHORT *pcFound,
+    BSTR *pBstrLibName);
+void CALLBACK ITypeLib_ReleaseTLibAttr_Proxy(
+    ITypeLib* This,
+    TLIBATTR *pTLibAttr);
+HRESULT __RPC_STUB ITypeLib_ReleaseTLibAttr_Stub(
+    ITypeLib* This);
+
+#endif  /* __ITypeLib_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeLib2 interface
+ */
+#ifndef __ITypeLib2_INTERFACE_DEFINED__
+#define __ITypeLib2_INTERFACE_DEFINED__
+
+typedef ITypeLib2 *LPTYPELIB2;
+DEFINE_GUID(IID_ITypeLib2, 0x00020411, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeLib2 : public ITypeLib
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCustData(
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLibStatistics(
+        ULONG *pcUniqueNames,
+        ULONG *pcchUniqueNames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDocumentation2(
+        INT index,
+        LCID lcid,
+        BSTR *pbstrHelpString,
+        DWORD *pdwHelpStringContext,
+        BSTR *pbstrHelpStringDll) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllCustData(
+        CUSTDATA *pCustData) = 0;
+
+};
+#else
+typedef struct ITypeLib2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeLib2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeLib2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeLib2* This);
+
+    /*** ITypeLib methods ***/
+    UINT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+        ITypeLib2* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        ITypeLib2* This,
+        UINT index,
+        ITypeInfo **ppTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoType)(
+        ITypeLib2* This,
+        UINT index,
+        TYPEKIND *pTKind);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfoOfGuid)(
+        ITypeLib2* This,
+        REFGUID guid,
+        ITypeInfo **ppTinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetLibAttr)(
+        ITypeLib2* This,
+        TLIBATTR **ppTLibAttr);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+        ITypeLib2* This,
+        ITypeComp **ppTComp);
+
+    HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+        ITypeLib2* This,
+        INT index,
+        BSTR *pBstrName,
+        BSTR *pBstrDocString,
+        DWORD *pdwHelpContext,
+        BSTR *pBstrHelpFile);
+
+    HRESULT (STDMETHODCALLTYPE *IsName)(
+        ITypeLib2* This,
+        LPOLESTR szNameBuf,
+        ULONG lHashVal,
+        BOOL *pfName);
+
+    HRESULT (STDMETHODCALLTYPE *FindName)(
+        ITypeLib2* This,
+        LPOLESTR szNameBuf,
+        ULONG lHashVal,
+        ITypeInfo **ppTInfo,
+        MEMBERID *rgMemId,
+        USHORT *pcFound);
+
+    void (STDMETHODCALLTYPE *ReleaseTLibAttr)(
+        ITypeLib2* This,
+        TLIBATTR *pTLibAttr);
+
+    /*** ITypeLib2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCustData)(
+        ITypeLib2* This,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *GetLibStatistics)(
+        ITypeLib2* This,
+        ULONG *pcUniqueNames,
+        ULONG *pcchUniqueNames);
+
+    HRESULT (STDMETHODCALLTYPE *GetDocumentation2)(
+        ITypeLib2* This,
+        INT index,
+        LCID lcid,
+        BSTR *pbstrHelpString,
+        DWORD *pdwHelpStringContext,
+        BSTR *pbstrHelpStringDll);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllCustData)(
+        ITypeLib2* This,
+        CUSTDATA *pCustData);
+
+    END_INTERFACE
+} ITypeLib2Vtbl;
+interface ITypeLib2 {
+    CONST_VTBL ITypeLib2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeLib2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeLib2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeLib2_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeLib methods ***/
+#define ITypeLib2_GetTypeInfoCount(This) (This)->lpVtbl->GetTypeInfoCount(This)
+#define ITypeLib2_GetTypeInfo(This,index,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,index,ppTInfo)
+#define ITypeLib2_GetTypeInfoType(This,index,pTKind) (This)->lpVtbl->GetTypeInfoType(This,index,pTKind)
+#define ITypeLib2_GetTypeInfoOfGuid(This,guid,ppTinfo) (This)->lpVtbl->GetTypeInfoOfGuid(This,guid,ppTinfo)
+#define ITypeLib2_GetLibAttr(This,ppTLibAttr) (This)->lpVtbl->GetLibAttr(This,ppTLibAttr)
+#define ITypeLib2_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeLib2_GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeLib2_IsName(This,szNameBuf,lHashVal,pfName) (This)->lpVtbl->IsName(This,szNameBuf,lHashVal,pfName)
+#define ITypeLib2_FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound) (This)->lpVtbl->FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound)
+#define ITypeLib2_ReleaseTLibAttr(This,pTLibAttr) (This)->lpVtbl->ReleaseTLibAttr(This,pTLibAttr)
+/*** ITypeLib2 methods ***/
+#define ITypeLib2_GetCustData(This,guid,pVarVal) (This)->lpVtbl->GetCustData(This,guid,pVarVal)
+#define ITypeLib2_GetLibStatistics(This,pcUniqueNames,pcchUniqueNames) (This)->lpVtbl->GetLibStatistics(This,pcUniqueNames,pcchUniqueNames)
+#define ITypeLib2_GetDocumentation2(This,index,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll) (This)->lpVtbl->GetDocumentation2(This,index,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll)
+#define ITypeLib2_GetAllCustData(This,pCustData) (This)->lpVtbl->GetAllCustData(This,pCustData)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetCustData_Proxy(
+    ITypeLib2* This,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ITypeLib2_GetCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib2_RemoteGetLibStatistics_Proxy(
+    ITypeLib2* This,
+    ULONG *pcUniqueNames,
+    ULONG *pcchUniqueNames);
+void __RPC_STUB ITypeLib2_RemoteGetLibStatistics_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib2_RemoteGetDocumentation2_Proxy(
+    ITypeLib2* This,
+    INT index,
+    LCID lcid,
+    DWORD refPtrFlags,
+    BSTR *pbstrHelpString,
+    DWORD *pdwHelpStringContext,
+    BSTR *pbstrHelpStringDll);
+void __RPC_STUB ITypeLib2_RemoteGetDocumentation2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetAllCustData_Proxy(
+    ITypeLib2* This,
+    CUSTDATA *pCustData);
+void __RPC_STUB ITypeLib2_GetAllCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeLib2_GetLibStatistics_Proxy(
+    ITypeLib2* This,
+    ULONG *pcUniqueNames,
+    ULONG *pcchUniqueNames);
+HRESULT __RPC_STUB ITypeLib2_GetLibStatistics_Stub(
+    ITypeLib2* This,
+    ULONG *pcUniqueNames,
+    ULONG *pcchUniqueNames);
+HRESULT CALLBACK ITypeLib2_GetDocumentation2_Proxy(
+    ITypeLib2* This,
+    INT index,
+    LCID lcid,
+    BSTR *pbstrHelpString,
+    DWORD *pdwHelpStringContext,
+    BSTR *pbstrHelpStringDll);
+HRESULT __RPC_STUB ITypeLib2_GetDocumentation2_Stub(
+    ITypeLib2* This,
+    INT index,
+    LCID lcid,
+    DWORD refPtrFlags,
+    BSTR *pbstrHelpString,
+    DWORD *pdwHelpStringContext,
+    BSTR *pbstrHelpStringDll);
+
+#endif  /* __ITypeLib2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeChangeEvents interface
+ */
+#ifndef __ITypeChangeEvents_INTERFACE_DEFINED__
+#define __ITypeChangeEvents_INTERFACE_DEFINED__
+
+typedef ITypeChangeEvents *LPTYPECHANGEEVENTS;
+typedef enum tagCHANGEKIND {
+    CHANGEKIND_ADDMEMBER = 0,
+    CHANGEKIND_DELETEMEMBER = 1,
+    CHANGEKIND_SETNAMES = 2,
+    CHANGEKIND_SETDOCUMENTATION = 3,
+    CHANGEKIND_GENERAL = 4,
+    CHANGEKIND_INVALIDATE = 5,
+    CHANGEKIND_CHANGEFAILED = 6,
+    CHANGEKIND_MAX = 7
+} CHANGEKIND;
+DEFINE_GUID(IID_ITypeChangeEvents, 0x00020410, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeChangeEvents : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RequestTypeChange(
+        CHANGEKIND changeKind,
+        ITypeInfo *pTInfoBefore,
+        LPOLESTR pStrName,
+        INT *pfCancel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AfterTypeChange(
+        CHANGEKIND changeKind,
+        ITypeInfo *pTInfoAfter,
+        LPOLESTR pStrName) = 0;
+
+};
+#else
+typedef struct ITypeChangeEventsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeChangeEvents* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeChangeEvents* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeChangeEvents* This);
+
+    /*** ITypeChangeEvents methods ***/
+    HRESULT (STDMETHODCALLTYPE *RequestTypeChange)(
+        ITypeChangeEvents* This,
+        CHANGEKIND changeKind,
+        ITypeInfo *pTInfoBefore,
+        LPOLESTR pStrName,
+        INT *pfCancel);
+
+    HRESULT (STDMETHODCALLTYPE *AfterTypeChange)(
+        ITypeChangeEvents* This,
+        CHANGEKIND changeKind,
+        ITypeInfo *pTInfoAfter,
+        LPOLESTR pStrName);
+
+    END_INTERFACE
+} ITypeChangeEventsVtbl;
+interface ITypeChangeEvents {
+    CONST_VTBL ITypeChangeEventsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeChangeEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeChangeEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeChangeEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeChangeEvents methods ***/
+#define ITypeChangeEvents_RequestTypeChange(This,changeKind,pTInfoBefore,pStrName,pfCancel) (This)->lpVtbl->RequestTypeChange(This,changeKind,pTInfoBefore,pStrName,pfCancel)
+#define ITypeChangeEvents_AfterTypeChange(This,changeKind,pTInfoAfter,pStrName) (This)->lpVtbl->AfterTypeChange(This,changeKind,pTInfoAfter,pStrName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeChangeEvents_RequestTypeChange_Proxy(
+    ITypeChangeEvents* This,
+    CHANGEKIND changeKind,
+    ITypeInfo *pTInfoBefore,
+    LPOLESTR pStrName,
+    INT *pfCancel);
+void __RPC_STUB ITypeChangeEvents_RequestTypeChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeChangeEvents_AfterTypeChange_Proxy(
+    ITypeChangeEvents* This,
+    CHANGEKIND changeKind,
+    ITypeInfo *pTInfoAfter,
+    LPOLESTR pStrName);
+void __RPC_STUB ITypeChangeEvents_AfterTypeChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITypeChangeEvents_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IErrorInfo interface
+ */
+#ifndef __IErrorInfo_INTERFACE_DEFINED__
+#define __IErrorInfo_INTERFACE_DEFINED__
+
+typedef IErrorInfo *LPERRORINFO;
+DEFINE_GUID(IID_IErrorInfo, 0x1cf2b120, 0x547d, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IErrorInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetGUID(
+        GUID *pGUID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSource(
+        BSTR *pBstrSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDescription(
+        BSTR *pBstrDescription) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHelpFile(
+        BSTR *pBstrHelpFile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHelpContext(
+        DWORD *pdwHelpContext) = 0;
+
+};
+#else
+typedef struct IErrorInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IErrorInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IErrorInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IErrorInfo* This);
+
+    /*** IErrorInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetGUID)(
+        IErrorInfo* This,
+        GUID *pGUID);
+
+    HRESULT (STDMETHODCALLTYPE *GetSource)(
+        IErrorInfo* This,
+        BSTR *pBstrSource);
+
+    HRESULT (STDMETHODCALLTYPE *GetDescription)(
+        IErrorInfo* This,
+        BSTR *pBstrDescription);
+
+    HRESULT (STDMETHODCALLTYPE *GetHelpFile)(
+        IErrorInfo* This,
+        BSTR *pBstrHelpFile);
+
+    HRESULT (STDMETHODCALLTYPE *GetHelpContext)(
+        IErrorInfo* This,
+        DWORD *pdwHelpContext);
+
+    END_INTERFACE
+} IErrorInfoVtbl;
+interface IErrorInfo {
+    CONST_VTBL IErrorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IErrorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IErrorInfo methods ***/
+#define IErrorInfo_GetGUID(This,pGUID) (This)->lpVtbl->GetGUID(This,pGUID)
+#define IErrorInfo_GetSource(This,pBstrSource) (This)->lpVtbl->GetSource(This,pBstrSource)
+#define IErrorInfo_GetDescription(This,pBstrDescription) (This)->lpVtbl->GetDescription(This,pBstrDescription)
+#define IErrorInfo_GetHelpFile(This,pBstrHelpFile) (This)->lpVtbl->GetHelpFile(This,pBstrHelpFile)
+#define IErrorInfo_GetHelpContext(This,pdwHelpContext) (This)->lpVtbl->GetHelpContext(This,pdwHelpContext)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetGUID_Proxy(
+    IErrorInfo* This,
+    GUID *pGUID);
+void __RPC_STUB IErrorInfo_GetGUID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetSource_Proxy(
+    IErrorInfo* This,
+    BSTR *pBstrSource);
+void __RPC_STUB IErrorInfo_GetSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetDescription_Proxy(
+    IErrorInfo* This,
+    BSTR *pBstrDescription);
+void __RPC_STUB IErrorInfo_GetDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetHelpFile_Proxy(
+    IErrorInfo* This,
+    BSTR *pBstrHelpFile);
+void __RPC_STUB IErrorInfo_GetHelpFile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetHelpContext_Proxy(
+    IErrorInfo* This,
+    DWORD *pdwHelpContext);
+void __RPC_STUB IErrorInfo_GetHelpContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IErrorInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateErrorInfo interface
+ */
+#ifndef __ICreateErrorInfo_INTERFACE_DEFINED__
+#define __ICreateErrorInfo_INTERFACE_DEFINED__
+
+typedef ICreateErrorInfo *LPCREATEERRORINFO;
+DEFINE_GUID(IID_ICreateErrorInfo, 0x22f03340, 0x547d, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateErrorInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetGUID(
+        REFGUID rguid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSource(
+        LPOLESTR szSource) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDescription(
+        LPOLESTR szDescription) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpFile(
+        LPOLESTR szHelpFile) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpContext(
+        DWORD dwHelpContext) = 0;
+
+};
+#else
+typedef struct ICreateErrorInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICreateErrorInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICreateErrorInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICreateErrorInfo* This);
+
+    /*** ICreateErrorInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetGUID)(
+        ICreateErrorInfo* This,
+        REFGUID rguid);
+
+    HRESULT (STDMETHODCALLTYPE *SetSource)(
+        ICreateErrorInfo* This,
+        LPOLESTR szSource);
+
+    HRESULT (STDMETHODCALLTYPE *SetDescription)(
+        ICreateErrorInfo* This,
+        LPOLESTR szDescription);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpFile)(
+        ICreateErrorInfo* This,
+        LPOLESTR szHelpFile);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+        ICreateErrorInfo* This,
+        DWORD dwHelpContext);
+
+    END_INTERFACE
+} ICreateErrorInfoVtbl;
+interface ICreateErrorInfo {
+    CONST_VTBL ICreateErrorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateErrorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateErrorInfo methods ***/
+#define ICreateErrorInfo_SetGUID(This,rguid) (This)->lpVtbl->SetGUID(This,rguid)
+#define ICreateErrorInfo_SetSource(This,szSource) (This)->lpVtbl->SetSource(This,szSource)
+#define ICreateErrorInfo_SetDescription(This,szDescription) (This)->lpVtbl->SetDescription(This,szDescription)
+#define ICreateErrorInfo_SetHelpFile(This,szHelpFile) (This)->lpVtbl->SetHelpFile(This,szHelpFile)
+#define ICreateErrorInfo_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetGUID_Proxy(
+    ICreateErrorInfo* This,
+    REFGUID rguid);
+void __RPC_STUB ICreateErrorInfo_SetGUID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetSource_Proxy(
+    ICreateErrorInfo* This,
+    LPOLESTR szSource);
+void __RPC_STUB ICreateErrorInfo_SetSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetDescription_Proxy(
+    ICreateErrorInfo* This,
+    LPOLESTR szDescription);
+void __RPC_STUB ICreateErrorInfo_SetDescription_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetHelpFile_Proxy(
+    ICreateErrorInfo* This,
+    LPOLESTR szHelpFile);
+void __RPC_STUB ICreateErrorInfo_SetHelpFile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetHelpContext_Proxy(
+    ICreateErrorInfo* This,
+    DWORD dwHelpContext);
+void __RPC_STUB ICreateErrorInfo_SetHelpContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICreateErrorInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISupportErrorInfo interface
+ */
+#ifndef __ISupportErrorInfo_INTERFACE_DEFINED__
+#define __ISupportErrorInfo_INTERFACE_DEFINED__
+
+typedef ISupportErrorInfo *LPSUPPORTERRORINFO;
+DEFINE_GUID(IID_ISupportErrorInfo, 0xdf0b3d60, 0x548f, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISupportErrorInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo(
+        REFIID riid) = 0;
+
+};
+#else
+typedef struct ISupportErrorInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISupportErrorInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISupportErrorInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISupportErrorInfo* This);
+
+    /*** ISupportErrorInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *InterfaceSupportsErrorInfo)(
+        ISupportErrorInfo* This,
+        REFIID riid);
+
+    END_INTERFACE
+} ISupportErrorInfoVtbl;
+interface ISupportErrorInfo {
+    CONST_VTBL ISupportErrorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISupportErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISupportErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISupportErrorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ISupportErrorInfo methods ***/
+#define ISupportErrorInfo_InterfaceSupportsErrorInfo(This,riid) (This)->lpVtbl->InterfaceSupportsErrorInfo(This,riid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISupportErrorInfo_InterfaceSupportsErrorInfo_Proxy(
+    ISupportErrorInfo* This,
+    REFIID riid);
+void __RPC_STUB ISupportErrorInfo_InterfaceSupportsErrorInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISupportErrorInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeFactory interface
+ */
+#ifndef __ITypeFactory_INTERFACE_DEFINED__
+#define __ITypeFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITypeFactory, 0x0000002e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeFactory : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateFromTypeInfo(
+        ITypeInfo *pTypeInfo,
+        REFIID riid,
+        IUnknown **ppv) = 0;
+
+};
+#else
+typedef struct ITypeFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeFactory* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeFactory* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeFactory* This);
+
+    /*** ITypeFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateFromTypeInfo)(
+        ITypeFactory* This,
+        ITypeInfo *pTypeInfo,
+        REFIID riid,
+        IUnknown **ppv);
+
+    END_INTERFACE
+} ITypeFactoryVtbl;
+interface ITypeFactory {
+    CONST_VTBL ITypeFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeFactory methods ***/
+#define ITypeFactory_CreateFromTypeInfo(This,pTypeInfo,riid,ppv) (This)->lpVtbl->CreateFromTypeInfo(This,pTypeInfo,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeFactory_CreateFromTypeInfo_Proxy(
+    ITypeFactory* This,
+    ITypeInfo *pTypeInfo,
+    REFIID riid,
+    IUnknown **ppv);
+void __RPC_STUB ITypeFactory_CreateFromTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITypeFactory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeMarshal interface
+ */
+#ifndef __ITypeMarshal_INTERFACE_DEFINED__
+#define __ITypeMarshal_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITypeMarshal, 0x0000002d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeMarshal : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Size(
+        PVOID pvType,
+        DWORD dwDestContext,
+        PVOID pvDestContext,
+        ULONG *pSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Marshal(
+        PVOID pvType,
+        DWORD dwDestContext,
+        PVOID pvDestContext,
+        ULONG cbBufferLength,
+        BYTE *pBuffer,
+        ULONG *pcbWritten) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unmarshal(
+        PVOID pvType,
+        DWORD dwFlags,
+        ULONG cbBufferLength,
+        BYTE *pBuffer,
+        ULONG *pcbRead) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Free(
+        PVOID pvType) = 0;
+
+};
+#else
+typedef struct ITypeMarshalVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITypeMarshal* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITypeMarshal* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITypeMarshal* This);
+
+    /*** ITypeMarshal methods ***/
+    HRESULT (STDMETHODCALLTYPE *Size)(
+        ITypeMarshal* This,
+        PVOID pvType,
+        DWORD dwDestContext,
+        PVOID pvDestContext,
+        ULONG *pSize);
+
+    HRESULT (STDMETHODCALLTYPE *Marshal)(
+        ITypeMarshal* This,
+        PVOID pvType,
+        DWORD dwDestContext,
+        PVOID pvDestContext,
+        ULONG cbBufferLength,
+        BYTE *pBuffer,
+        ULONG *pcbWritten);
+
+    HRESULT (STDMETHODCALLTYPE *Unmarshal)(
+        ITypeMarshal* This,
+        PVOID pvType,
+        DWORD dwFlags,
+        ULONG cbBufferLength,
+        BYTE *pBuffer,
+        ULONG *pcbRead);
+
+    HRESULT (STDMETHODCALLTYPE *Free)(
+        ITypeMarshal* This,
+        PVOID pvType);
+
+    END_INTERFACE
+} ITypeMarshalVtbl;
+interface ITypeMarshal {
+    CONST_VTBL ITypeMarshalVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeMarshal_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeMarshal_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeMarshal methods ***/
+#define ITypeMarshal_Size(This,pvType,dwDestContext,pvDestContext,pSize) (This)->lpVtbl->Size(This,pvType,dwDestContext,pvDestContext,pSize)
+#define ITypeMarshal_Marshal(This,pvType,dwDestContext,pvDestContext,cbBufferLength,pBuffer,pcbWritten) (This)->lpVtbl->Marshal(This,pvType,dwDestContext,pvDestContext,cbBufferLength,pBuffer,pcbWritten)
+#define ITypeMarshal_Unmarshal(This,pvType,dwFlags,cbBufferLength,pBuffer,pcbRead) (This)->lpVtbl->Unmarshal(This,pvType,dwFlags,cbBufferLength,pBuffer,pcbRead)
+#define ITypeMarshal_Free(This,pvType) (This)->lpVtbl->Free(This,pvType)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Size_Proxy(
+    ITypeMarshal* This,
+    PVOID pvType,
+    DWORD dwDestContext,
+    PVOID pvDestContext,
+    ULONG *pSize);
+void __RPC_STUB ITypeMarshal_Size_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Marshal_Proxy(
+    ITypeMarshal* This,
+    PVOID pvType,
+    DWORD dwDestContext,
+    PVOID pvDestContext,
+    ULONG cbBufferLength,
+    BYTE *pBuffer,
+    ULONG *pcbWritten);
+void __RPC_STUB ITypeMarshal_Marshal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Unmarshal_Proxy(
+    ITypeMarshal* This,
+    PVOID pvType,
+    DWORD dwFlags,
+    ULONG cbBufferLength,
+    BYTE *pBuffer,
+    ULONG *pcbRead);
+void __RPC_STUB ITypeMarshal_Unmarshal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Free_Proxy(
+    ITypeMarshal* This,
+    PVOID pvType);
+void __RPC_STUB ITypeMarshal_Free_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITypeMarshal_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRecordInfo interface
+ */
+#ifndef __IRecordInfo_INTERFACE_DEFINED__
+#define __IRecordInfo_INTERFACE_DEFINED__
+
+typedef IRecordInfo *LPRECORDINFO;
+DEFINE_GUID(IID_IRecordInfo, 0x0000002f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRecordInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RecordInit(
+        PVOID pvNew) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RecordClear(
+        PVOID pvExisting) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RecordCopy(
+        PVOID pvExisting,
+        PVOID pvNew) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGuid(
+        GUID *pguid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetName(
+        BSTR *pbstrName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSize(
+        ULONG *pcbSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+        ITypeInfo **ppTypeInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetField(
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFieldNoCopy(
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField,
+        PVOID *ppvDataCArray) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutField(
+        ULONG wFlags,
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PutFieldNoCopy(
+        ULONG wFlags,
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFieldNames(
+        ULONG *pcNames,
+        BSTR *rgBstrNames) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE IsMatchingType(
+        IRecordInfo *pRecordInfo) = 0;
+
+    virtual PVOID STDMETHODCALLTYPE RecordCreate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RecordCreateCopy(
+        PVOID pvSource,
+        PVOID *ppvDest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RecordDestroy(
+        PVOID pvRecord) = 0;
+
+};
+#else
+typedef struct IRecordInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRecordInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRecordInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRecordInfo* This);
+
+    /*** IRecordInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *RecordInit)(
+        IRecordInfo* This,
+        PVOID pvNew);
+
+    HRESULT (STDMETHODCALLTYPE *RecordClear)(
+        IRecordInfo* This,
+        PVOID pvExisting);
+
+    HRESULT (STDMETHODCALLTYPE *RecordCopy)(
+        IRecordInfo* This,
+        PVOID pvExisting,
+        PVOID pvNew);
+
+    HRESULT (STDMETHODCALLTYPE *GetGuid)(
+        IRecordInfo* This,
+        GUID *pguid);
+
+    HRESULT (STDMETHODCALLTYPE *GetName)(
+        IRecordInfo* This,
+        BSTR *pbstrName);
+
+    HRESULT (STDMETHODCALLTYPE *GetSize)(
+        IRecordInfo* This,
+        ULONG *pcbSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+        IRecordInfo* This,
+        ITypeInfo **ppTypeInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetField)(
+        IRecordInfo* This,
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField);
+
+    HRESULT (STDMETHODCALLTYPE *GetFieldNoCopy)(
+        IRecordInfo* This,
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField,
+        PVOID *ppvDataCArray);
+
+    HRESULT (STDMETHODCALLTYPE *PutField)(
+        IRecordInfo* This,
+        ULONG wFlags,
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField);
+
+    HRESULT (STDMETHODCALLTYPE *PutFieldNoCopy)(
+        IRecordInfo* This,
+        ULONG wFlags,
+        PVOID pvData,
+        LPCOLESTR szFieldName,
+        VARIANT *pvarField);
+
+    HRESULT (STDMETHODCALLTYPE *GetFieldNames)(
+        IRecordInfo* This,
+        ULONG *pcNames,
+        BSTR *rgBstrNames);
+
+    BOOL (STDMETHODCALLTYPE *IsMatchingType)(
+        IRecordInfo* This,
+        IRecordInfo *pRecordInfo);
+
+    PVOID (STDMETHODCALLTYPE *RecordCreate)(
+        IRecordInfo* This);
+
+    HRESULT (STDMETHODCALLTYPE *RecordCreateCopy)(
+        IRecordInfo* This,
+        PVOID pvSource,
+        PVOID *ppvDest);
+
+    HRESULT (STDMETHODCALLTYPE *RecordDestroy)(
+        IRecordInfo* This,
+        PVOID pvRecord);
+
+    END_INTERFACE
+} IRecordInfoVtbl;
+interface IRecordInfo {
+    CONST_VTBL IRecordInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRecordInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRecordInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRecordInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IRecordInfo methods ***/
+#define IRecordInfo_RecordInit(This,pvNew) (This)->lpVtbl->RecordInit(This,pvNew)
+#define IRecordInfo_RecordClear(This,pvExisting) (This)->lpVtbl->RecordClear(This,pvExisting)
+#define IRecordInfo_RecordCopy(This,pvExisting,pvNew) (This)->lpVtbl->RecordCopy(This,pvExisting,pvNew)
+#define IRecordInfo_GetGuid(This,pguid) (This)->lpVtbl->GetGuid(This,pguid)
+#define IRecordInfo_GetName(This,pbstrName) (This)->lpVtbl->GetName(This,pbstrName)
+#define IRecordInfo_GetSize(This,pcbSize) (This)->lpVtbl->GetSize(This,pcbSize)
+#define IRecordInfo_GetTypeInfo(This,ppTypeInfo) (This)->lpVtbl->GetTypeInfo(This,ppTypeInfo)
+#define IRecordInfo_GetField(This,pvData,szFieldName,pvarField) (This)->lpVtbl->GetField(This,pvData,szFieldName,pvarField)
+#define IRecordInfo_GetFieldNoCopy(This,pvData,szFieldName,pvarField,ppvDataCArray) (This)->lpVtbl->GetFieldNoCopy(This,pvData,szFieldName,pvarField,ppvDataCArray)
+#define IRecordInfo_PutField(This,wFlags,pvData,szFieldName,pvarField) (This)->lpVtbl->PutField(This,wFlags,pvData,szFieldName,pvarField)
+#define IRecordInfo_PutFieldNoCopy(This,wFlags,pvData,szFieldName,pvarField) (This)->lpVtbl->PutFieldNoCopy(This,wFlags,pvData,szFieldName,pvarField)
+#define IRecordInfo_GetFieldNames(This,pcNames,rgBstrNames) (This)->lpVtbl->GetFieldNames(This,pcNames,rgBstrNames)
+#define IRecordInfo_IsMatchingType(This,pRecordInfo) (This)->lpVtbl->IsMatchingType(This,pRecordInfo)
+#define IRecordInfo_RecordCreate(This) (This)->lpVtbl->RecordCreate(This)
+#define IRecordInfo_RecordCreateCopy(This,pvSource,ppvDest) (This)->lpVtbl->RecordCreateCopy(This,pvSource,ppvDest)
+#define IRecordInfo_RecordDestroy(This,pvRecord) (This)->lpVtbl->RecordDestroy(This,pvRecord)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordInit_Proxy(
+    IRecordInfo* This,
+    PVOID pvNew);
+void __RPC_STUB IRecordInfo_RecordInit_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordClear_Proxy(
+    IRecordInfo* This,
+    PVOID pvExisting);
+void __RPC_STUB IRecordInfo_RecordClear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordCopy_Proxy(
+    IRecordInfo* This,
+    PVOID pvExisting,
+    PVOID pvNew);
+void __RPC_STUB IRecordInfo_RecordCopy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetGuid_Proxy(
+    IRecordInfo* This,
+    GUID *pguid);
+void __RPC_STUB IRecordInfo_GetGuid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetName_Proxy(
+    IRecordInfo* This,
+    BSTR *pbstrName);
+void __RPC_STUB IRecordInfo_GetName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetSize_Proxy(
+    IRecordInfo* This,
+    ULONG *pcbSize);
+void __RPC_STUB IRecordInfo_GetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetTypeInfo_Proxy(
+    IRecordInfo* This,
+    ITypeInfo **ppTypeInfo);
+void __RPC_STUB IRecordInfo_GetTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetField_Proxy(
+    IRecordInfo* This,
+    PVOID pvData,
+    LPCOLESTR szFieldName,
+    VARIANT *pvarField);
+void __RPC_STUB IRecordInfo_GetField_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetFieldNoCopy_Proxy(
+    IRecordInfo* This,
+    PVOID pvData,
+    LPCOLESTR szFieldName,
+    VARIANT *pvarField,
+    PVOID *ppvDataCArray);
+void __RPC_STUB IRecordInfo_GetFieldNoCopy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_PutField_Proxy(
+    IRecordInfo* This,
+    ULONG wFlags,
+    PVOID pvData,
+    LPCOLESTR szFieldName,
+    VARIANT *pvarField);
+void __RPC_STUB IRecordInfo_PutField_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_PutFieldNoCopy_Proxy(
+    IRecordInfo* This,
+    ULONG wFlags,
+    PVOID pvData,
+    LPCOLESTR szFieldName,
+    VARIANT *pvarField);
+void __RPC_STUB IRecordInfo_PutFieldNoCopy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetFieldNames_Proxy(
+    IRecordInfo* This,
+    ULONG *pcNames,
+    BSTR *rgBstrNames);
+void __RPC_STUB IRecordInfo_GetFieldNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IRecordInfo_IsMatchingType_Proxy(
+    IRecordInfo* This,
+    IRecordInfo *pRecordInfo);
+void __RPC_STUB IRecordInfo_IsMatchingType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+PVOID STDMETHODCALLTYPE IRecordInfo_RecordCreate_Proxy(
+    IRecordInfo* This);
+void __RPC_STUB IRecordInfo_RecordCreate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordCreateCopy_Proxy(
+    IRecordInfo* This,
+    PVOID pvSource,
+    PVOID *ppvDest);
+void __RPC_STUB IRecordInfo_RecordCreateCopy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordDestroy_Proxy(
+    IRecordInfo* This,
+    PVOID pvRecord);
+void __RPC_STUB IRecordInfo_RecordDestroy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRecordInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeInfo interface
+ */
+#ifndef __ICreateTypeInfo_INTERFACE_DEFINED__
+#define __ICreateTypeInfo_INTERFACE_DEFINED__
+
+typedef ICreateTypeInfo *LPCREATETYPEINFO;
+DEFINE_GUID(IID_ICreateTypeInfo, 0x00020405, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetGuid(
+        REFGUID guid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTypeFlags(
+        UINT uTypeFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDocString(
+        LPOLESTR pStrDoc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpContext(
+        DWORD dwHelpContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVersion(
+        WORD wMajorVerNum,
+        WORD wMinorVerNum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddRefTypeInfo(
+        ITypeInfo *pTInfo,
+        HREFTYPE *phRefType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddFuncDesc(
+        UINT index,
+        FUNCDESC *pFuncDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddImplType(
+        UINT index,
+        HREFTYPE hRefType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetImplTypeFlags(
+        UINT index,
+        INT implTypeFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAlignment(
+        WORD cbAlignment) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSchema(
+        LPOLESTR pStrSchema) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddVarDesc(
+        UINT index,
+        VARDESC *pVarDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFuncAndParamNames(
+        UINT index,
+        LPOLESTR *rgszNames,
+        UINT cNames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVarName(
+        UINT index,
+        LPOLESTR szName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTypeDescAlias(
+        TYPEDESC *pTDescAlias) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DefineFuncAsDllEntry(
+        UINT index,
+        LPOLESTR szDllName,
+        LPOLESTR szProcName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFuncDocString(
+        UINT index,
+        LPOLESTR szDocString) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVarDocString(
+        UINT index,
+        LPOLESTR szDocString) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFuncHelpContext(
+        UINT index,
+        DWORD dwHelpContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVarHelpContext(
+        UINT index,
+        DWORD dwHelpContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMops(
+        UINT index,
+        BSTR bstrMops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTypeIdldesc(
+        IDLDESC *pIdlDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LayOut(
+        ) = 0;
+
+};
+#else
+typedef struct ICreateTypeInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICreateTypeInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICreateTypeInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICreateTypeInfo* This);
+
+    /*** ICreateTypeInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetGuid)(
+        ICreateTypeInfo* This,
+        REFGUID guid);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeFlags)(
+        ICreateTypeInfo* This,
+        UINT uTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SetDocString)(
+        ICreateTypeInfo* This,
+        LPOLESTR pStrDoc);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+        ICreateTypeInfo* This,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetVersion)(
+        ICreateTypeInfo* This,
+        WORD wMajorVerNum,
+        WORD wMinorVerNum);
+
+    HRESULT (STDMETHODCALLTYPE *AddRefTypeInfo)(
+        ICreateTypeInfo* This,
+        ITypeInfo *pTInfo,
+        HREFTYPE *phRefType);
+
+    HRESULT (STDMETHODCALLTYPE *AddFuncDesc)(
+        ICreateTypeInfo* This,
+        UINT index,
+        FUNCDESC *pFuncDesc);
+
+    HRESULT (STDMETHODCALLTYPE *AddImplType)(
+        ICreateTypeInfo* This,
+        UINT index,
+        HREFTYPE hRefType);
+
+    HRESULT (STDMETHODCALLTYPE *SetImplTypeFlags)(
+        ICreateTypeInfo* This,
+        UINT index,
+        INT implTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SetAlignment)(
+        ICreateTypeInfo* This,
+        WORD cbAlignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetSchema)(
+        ICreateTypeInfo* This,
+        LPOLESTR pStrSchema);
+
+    HRESULT (STDMETHODCALLTYPE *AddVarDesc)(
+        ICreateTypeInfo* This,
+        UINT index,
+        VARDESC *pVarDesc);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncAndParamNames)(
+        ICreateTypeInfo* This,
+        UINT index,
+        LPOLESTR *rgszNames,
+        UINT cNames);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarName)(
+        ICreateTypeInfo* This,
+        UINT index,
+        LPOLESTR szName);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeDescAlias)(
+        ICreateTypeInfo* This,
+        TYPEDESC *pTDescAlias);
+
+    HRESULT (STDMETHODCALLTYPE *DefineFuncAsDllEntry)(
+        ICreateTypeInfo* This,
+        UINT index,
+        LPOLESTR szDllName,
+        LPOLESTR szProcName);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncDocString)(
+        ICreateTypeInfo* This,
+        UINT index,
+        LPOLESTR szDocString);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarDocString)(
+        ICreateTypeInfo* This,
+        UINT index,
+        LPOLESTR szDocString);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncHelpContext)(
+        ICreateTypeInfo* This,
+        UINT index,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarHelpContext)(
+        ICreateTypeInfo* This,
+        UINT index,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetMops)(
+        ICreateTypeInfo* This,
+        UINT index,
+        BSTR bstrMops);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeIdldesc)(
+        ICreateTypeInfo* This,
+        IDLDESC *pIdlDesc);
+
+    HRESULT (STDMETHODCALLTYPE *LayOut)(
+        ICreateTypeInfo* This);
+
+    END_INTERFACE
+} ICreateTypeInfoVtbl;
+interface ICreateTypeInfo {
+    CONST_VTBL ICreateTypeInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeInfo methods ***/
+#define ICreateTypeInfo_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeInfo_SetTypeFlags(This,uTypeFlags) (This)->lpVtbl->SetTypeFlags(This,uTypeFlags)
+#define ICreateTypeInfo_SetDocString(This,pStrDoc) (This)->lpVtbl->SetDocString(This,pStrDoc)
+#define ICreateTypeInfo_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeInfo_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeInfo_AddRefTypeInfo(This,pTInfo,phRefType) (This)->lpVtbl->AddRefTypeInfo(This,pTInfo,phRefType)
+#define ICreateTypeInfo_AddFuncDesc(This,index,pFuncDesc) (This)->lpVtbl->AddFuncDesc(This,index,pFuncDesc)
+#define ICreateTypeInfo_AddImplType(This,index,hRefType) (This)->lpVtbl->AddImplType(This,index,hRefType)
+#define ICreateTypeInfo_SetImplTypeFlags(This,index,implTypeFlags) (This)->lpVtbl->SetImplTypeFlags(This,index,implTypeFlags)
+#define ICreateTypeInfo_SetAlignment(This,cbAlignment) (This)->lpVtbl->SetAlignment(This,cbAlignment)
+#define ICreateTypeInfo_SetSchema(This,pStrSchema) (This)->lpVtbl->SetSchema(This,pStrSchema)
+#define ICreateTypeInfo_AddVarDesc(This,index,pVarDesc) (This)->lpVtbl->AddVarDesc(This,index,pVarDesc)
+#define ICreateTypeInfo_SetFuncAndParamNames(This,index,rgszNames,cNames) (This)->lpVtbl->SetFuncAndParamNames(This,index,rgszNames,cNames)
+#define ICreateTypeInfo_SetVarName(This,index,szName) (This)->lpVtbl->SetVarName(This,index,szName)
+#define ICreateTypeInfo_SetTypeDescAlias(This,pTDescAlias) (This)->lpVtbl->SetTypeDescAlias(This,pTDescAlias)
+#define ICreateTypeInfo_DefineFuncAsDllEntry(This,index,szDllName,szProcName) (This)->lpVtbl->DefineFuncAsDllEntry(This,index,szDllName,szProcName)
+#define ICreateTypeInfo_SetFuncDocString(This,index,szDocString) (This)->lpVtbl->SetFuncDocString(This,index,szDocString)
+#define ICreateTypeInfo_SetVarDocString(This,index,szDocString) (This)->lpVtbl->SetVarDocString(This,index,szDocString)
+#define ICreateTypeInfo_SetFuncHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetFuncHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo_SetVarHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetVarHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo_SetMops(This,index,bstrMops) (This)->lpVtbl->SetMops(This,index,bstrMops)
+#define ICreateTypeInfo_SetTypeIdldesc(This,pIdlDesc) (This)->lpVtbl->SetTypeIdldesc(This,pIdlDesc)
+#define ICreateTypeInfo_LayOut(This) (This)->lpVtbl->LayOut(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetGuid_Proxy(
+    ICreateTypeInfo* This,
+    REFGUID guid);
+void __RPC_STUB ICreateTypeInfo_SetGuid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetTypeFlags_Proxy(
+    ICreateTypeInfo* This,
+    UINT uTypeFlags);
+void __RPC_STUB ICreateTypeInfo_SetTypeFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetDocString_Proxy(
+    ICreateTypeInfo* This,
+    LPOLESTR pStrDoc);
+void __RPC_STUB ICreateTypeInfo_SetDocString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetHelpContext_Proxy(
+    ICreateTypeInfo* This,
+    DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeInfo_SetHelpContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVersion_Proxy(
+    ICreateTypeInfo* This,
+    WORD wMajorVerNum,
+    WORD wMinorVerNum);
+void __RPC_STUB ICreateTypeInfo_SetVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddRefTypeInfo_Proxy(
+    ICreateTypeInfo* This,
+    ITypeInfo *pTInfo,
+    HREFTYPE *phRefType);
+void __RPC_STUB ICreateTypeInfo_AddRefTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddFuncDesc_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    FUNCDESC *pFuncDesc);
+void __RPC_STUB ICreateTypeInfo_AddFuncDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddImplType_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    HREFTYPE hRefType);
+void __RPC_STUB ICreateTypeInfo_AddImplType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetImplTypeFlags_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    INT implTypeFlags);
+void __RPC_STUB ICreateTypeInfo_SetImplTypeFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetAlignment_Proxy(
+    ICreateTypeInfo* This,
+    WORD cbAlignment);
+void __RPC_STUB ICreateTypeInfo_SetAlignment_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetSchema_Proxy(
+    ICreateTypeInfo* This,
+    LPOLESTR pStrSchema);
+void __RPC_STUB ICreateTypeInfo_SetSchema_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddVarDesc_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    VARDESC *pVarDesc);
+void __RPC_STUB ICreateTypeInfo_AddVarDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetFuncAndParamNames_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    LPOLESTR *rgszNames,
+    UINT cNames);
+void __RPC_STUB ICreateTypeInfo_SetFuncAndParamNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVarName_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    LPOLESTR szName);
+void __RPC_STUB ICreateTypeInfo_SetVarName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetTypeDescAlias_Proxy(
+    ICreateTypeInfo* This,
+    TYPEDESC *pTDescAlias);
+void __RPC_STUB ICreateTypeInfo_SetTypeDescAlias_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_DefineFuncAsDllEntry_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    LPOLESTR szDllName,
+    LPOLESTR szProcName);
+void __RPC_STUB ICreateTypeInfo_DefineFuncAsDllEntry_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetFuncDocString_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    LPOLESTR szDocString);
+void __RPC_STUB ICreateTypeInfo_SetFuncDocString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVarDocString_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    LPOLESTR szDocString);
+void __RPC_STUB ICreateTypeInfo_SetVarDocString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetFuncHelpContext_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeInfo_SetFuncHelpContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVarHelpContext_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeInfo_SetVarHelpContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetMops_Proxy(
+    ICreateTypeInfo* This,
+    UINT index,
+    BSTR bstrMops);
+void __RPC_STUB ICreateTypeInfo_SetMops_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetTypeIdldesc_Proxy(
+    ICreateTypeInfo* This,
+    IDLDESC *pIdlDesc);
+void __RPC_STUB ICreateTypeInfo_SetTypeIdldesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_LayOut_Proxy(
+    ICreateTypeInfo* This);
+void __RPC_STUB ICreateTypeInfo_LayOut_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICreateTypeInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeInfo2 interface
+ */
+#ifndef __ICreateTypeInfo2_INTERFACE_DEFINED__
+#define __ICreateTypeInfo2_INTERFACE_DEFINED__
+
+typedef ICreateTypeInfo2 *LPCREATETYPEINFO2;
+DEFINE_GUID(IID_ICreateTypeInfo2, 0x0002040e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeInfo2 : public ICreateTypeInfo
+{
+    virtual HRESULT STDMETHODCALLTYPE DeleteFuncDesc(
+        UINT index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteFuncDescByMemId(
+        MEMBERID memid,
+        INVOKEKIND invKind) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteVarDesc(
+        UINT index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteVarDescByMemId(
+        MEMBERID memid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteImplType(
+        UINT index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCustData(
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFuncCustData(
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetParamCustData(
+        UINT indexFunc,
+        UINT indexParam,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVarCustData(
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetImplTypeCustData(
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpStringContext(
+        ULONG dwHelpStringContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFuncHelpStringContext(
+        UINT index,
+        ULONG dwHelpStringContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVarHelpStringContext(
+        UINT index,
+        ULONG dwHelpStringContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Invalidate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetName(
+        LPOLESTR szName) = 0;
+
+};
+#else
+typedef struct ICreateTypeInfo2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICreateTypeInfo2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICreateTypeInfo2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICreateTypeInfo2* This);
+
+    /*** ICreateTypeInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetGuid)(
+        ICreateTypeInfo2* This,
+        REFGUID guid);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeFlags)(
+        ICreateTypeInfo2* This,
+        UINT uTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SetDocString)(
+        ICreateTypeInfo2* This,
+        LPOLESTR pStrDoc);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+        ICreateTypeInfo2* This,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetVersion)(
+        ICreateTypeInfo2* This,
+        WORD wMajorVerNum,
+        WORD wMinorVerNum);
+
+    HRESULT (STDMETHODCALLTYPE *AddRefTypeInfo)(
+        ICreateTypeInfo2* This,
+        ITypeInfo *pTInfo,
+        HREFTYPE *phRefType);
+
+    HRESULT (STDMETHODCALLTYPE *AddFuncDesc)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        FUNCDESC *pFuncDesc);
+
+    HRESULT (STDMETHODCALLTYPE *AddImplType)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        HREFTYPE hRefType);
+
+    HRESULT (STDMETHODCALLTYPE *SetImplTypeFlags)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        INT implTypeFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SetAlignment)(
+        ICreateTypeInfo2* This,
+        WORD cbAlignment);
+
+    HRESULT (STDMETHODCALLTYPE *SetSchema)(
+        ICreateTypeInfo2* This,
+        LPOLESTR pStrSchema);
+
+    HRESULT (STDMETHODCALLTYPE *AddVarDesc)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        VARDESC *pVarDesc);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncAndParamNames)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        LPOLESTR *rgszNames,
+        UINT cNames);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarName)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        LPOLESTR szName);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeDescAlias)(
+        ICreateTypeInfo2* This,
+        TYPEDESC *pTDescAlias);
+
+    HRESULT (STDMETHODCALLTYPE *DefineFuncAsDllEntry)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        LPOLESTR szDllName,
+        LPOLESTR szProcName);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncDocString)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        LPOLESTR szDocString);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarDocString)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        LPOLESTR szDocString);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncHelpContext)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarHelpContext)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetMops)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        BSTR bstrMops);
+
+    HRESULT (STDMETHODCALLTYPE *SetTypeIdldesc)(
+        ICreateTypeInfo2* This,
+        IDLDESC *pIdlDesc);
+
+    HRESULT (STDMETHODCALLTYPE *LayOut)(
+        ICreateTypeInfo2* This);
+
+    /*** ICreateTypeInfo2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *DeleteFuncDesc)(
+        ICreateTypeInfo2* This,
+        UINT index);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteFuncDescByMemId)(
+        ICreateTypeInfo2* This,
+        MEMBERID memid,
+        INVOKEKIND invKind);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteVarDesc)(
+        ICreateTypeInfo2* This,
+        UINT index);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteVarDescByMemId)(
+        ICreateTypeInfo2* This,
+        MEMBERID memid);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteImplType)(
+        ICreateTypeInfo2* This,
+        UINT index);
+
+    HRESULT (STDMETHODCALLTYPE *SetCustData)(
+        ICreateTypeInfo2* This,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncCustData)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *SetParamCustData)(
+        ICreateTypeInfo2* This,
+        UINT indexFunc,
+        UINT indexParam,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarCustData)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *SetImplTypeCustData)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpStringContext)(
+        ICreateTypeInfo2* This,
+        ULONG dwHelpStringContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetFuncHelpStringContext)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        ULONG dwHelpStringContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetVarHelpStringContext)(
+        ICreateTypeInfo2* This,
+        UINT index,
+        ULONG dwHelpStringContext);
+
+    HRESULT (STDMETHODCALLTYPE *Invalidate)(
+        ICreateTypeInfo2* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ICreateTypeInfo2* This,
+        LPOLESTR szName);
+
+    END_INTERFACE
+} ICreateTypeInfo2Vtbl;
+interface ICreateTypeInfo2 {
+    CONST_VTBL ICreateTypeInfo2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeInfo2_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeInfo methods ***/
+#define ICreateTypeInfo2_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeInfo2_SetTypeFlags(This,uTypeFlags) (This)->lpVtbl->SetTypeFlags(This,uTypeFlags)
+#define ICreateTypeInfo2_SetDocString(This,pStrDoc) (This)->lpVtbl->SetDocString(This,pStrDoc)
+#define ICreateTypeInfo2_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeInfo2_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeInfo2_AddRefTypeInfo(This,pTInfo,phRefType) (This)->lpVtbl->AddRefTypeInfo(This,pTInfo,phRefType)
+#define ICreateTypeInfo2_AddFuncDesc(This,index,pFuncDesc) (This)->lpVtbl->AddFuncDesc(This,index,pFuncDesc)
+#define ICreateTypeInfo2_AddImplType(This,index,hRefType) (This)->lpVtbl->AddImplType(This,index,hRefType)
+#define ICreateTypeInfo2_SetImplTypeFlags(This,index,implTypeFlags) (This)->lpVtbl->SetImplTypeFlags(This,index,implTypeFlags)
+#define ICreateTypeInfo2_SetAlignment(This,cbAlignment) (This)->lpVtbl->SetAlignment(This,cbAlignment)
+#define ICreateTypeInfo2_SetSchema(This,pStrSchema) (This)->lpVtbl->SetSchema(This,pStrSchema)
+#define ICreateTypeInfo2_AddVarDesc(This,index,pVarDesc) (This)->lpVtbl->AddVarDesc(This,index,pVarDesc)
+#define ICreateTypeInfo2_SetFuncAndParamNames(This,index,rgszNames,cNames) (This)->lpVtbl->SetFuncAndParamNames(This,index,rgszNames,cNames)
+#define ICreateTypeInfo2_SetVarName(This,index,szName) (This)->lpVtbl->SetVarName(This,index,szName)
+#define ICreateTypeInfo2_SetTypeDescAlias(This,pTDescAlias) (This)->lpVtbl->SetTypeDescAlias(This,pTDescAlias)
+#define ICreateTypeInfo2_DefineFuncAsDllEntry(This,index,szDllName,szProcName) (This)->lpVtbl->DefineFuncAsDllEntry(This,index,szDllName,szProcName)
+#define ICreateTypeInfo2_SetFuncDocString(This,index,szDocString) (This)->lpVtbl->SetFuncDocString(This,index,szDocString)
+#define ICreateTypeInfo2_SetVarDocString(This,index,szDocString) (This)->lpVtbl->SetVarDocString(This,index,szDocString)
+#define ICreateTypeInfo2_SetFuncHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetFuncHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo2_SetVarHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetVarHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo2_SetMops(This,index,bstrMops) (This)->lpVtbl->SetMops(This,index,bstrMops)
+#define ICreateTypeInfo2_SetTypeIdldesc(This,pIdlDesc) (This)->lpVtbl->SetTypeIdldesc(This,pIdlDesc)
+#define ICreateTypeInfo2_LayOut(This) (This)->lpVtbl->LayOut(This)
+/*** ICreateTypeInfo2 methods ***/
+#define ICreateTypeInfo2_DeleteFuncDesc(This,index) (This)->lpVtbl->DeleteFuncDesc(This,index)
+#define ICreateTypeInfo2_DeleteFuncDescByMemId(This,memid,invKind) (This)->lpVtbl->DeleteFuncDescByMemId(This,memid,invKind)
+#define ICreateTypeInfo2_DeleteVarDesc(This,index) (This)->lpVtbl->DeleteVarDesc(This,index)
+#define ICreateTypeInfo2_DeleteVarDescByMemId(This,memid) (This)->lpVtbl->DeleteVarDescByMemId(This,memid)
+#define ICreateTypeInfo2_DeleteImplType(This,index) (This)->lpVtbl->DeleteImplType(This,index)
+#define ICreateTypeInfo2_SetCustData(This,guid,pVarVal) (This)->lpVtbl->SetCustData(This,guid,pVarVal)
+#define ICreateTypeInfo2_SetFuncCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetFuncCustData(This,index,guid,pVarVal)
+#define ICreateTypeInfo2_SetParamCustData(This,indexFunc,indexParam,guid,pVarVal) (This)->lpVtbl->SetParamCustData(This,indexFunc,indexParam,guid,pVarVal)
+#define ICreateTypeInfo2_SetVarCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetVarCustData(This,index,guid,pVarVal)
+#define ICreateTypeInfo2_SetImplTypeCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetImplTypeCustData(This,index,guid,pVarVal)
+#define ICreateTypeInfo2_SetHelpStringContext(This,dwHelpStringContext) (This)->lpVtbl->SetHelpStringContext(This,dwHelpStringContext)
+#define ICreateTypeInfo2_SetFuncHelpStringContext(This,index,dwHelpStringContext) (This)->lpVtbl->SetFuncHelpStringContext(This,index,dwHelpStringContext)
+#define ICreateTypeInfo2_SetVarHelpStringContext(This,index,dwHelpStringContext) (This)->lpVtbl->SetVarHelpStringContext(This,index,dwHelpStringContext)
+#define ICreateTypeInfo2_Invalidate(This) (This)->lpVtbl->Invalidate(This)
+#define ICreateTypeInfo2_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteFuncDesc_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index);
+void __RPC_STUB ICreateTypeInfo2_DeleteFuncDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteFuncDescByMemId_Proxy(
+    ICreateTypeInfo2* This,
+    MEMBERID memid,
+    INVOKEKIND invKind);
+void __RPC_STUB ICreateTypeInfo2_DeleteFuncDescByMemId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteVarDesc_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index);
+void __RPC_STUB ICreateTypeInfo2_DeleteVarDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteVarDescByMemId_Proxy(
+    ICreateTypeInfo2* This,
+    MEMBERID memid);
+void __RPC_STUB ICreateTypeInfo2_DeleteVarDescByMemId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteImplType_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index);
+void __RPC_STUB ICreateTypeInfo2_DeleteImplType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetCustData_Proxy(
+    ICreateTypeInfo2* This,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetFuncCustData_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetFuncCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetParamCustData_Proxy(
+    ICreateTypeInfo2* This,
+    UINT indexFunc,
+    UINT indexParam,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetParamCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetVarCustData_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetVarCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetImplTypeCustData_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetImplTypeCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetHelpStringContext_Proxy(
+    ICreateTypeInfo2* This,
+    ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeInfo2_SetHelpStringContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetFuncHelpStringContext_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index,
+    ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeInfo2_SetFuncHelpStringContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetVarHelpStringContext_Proxy(
+    ICreateTypeInfo2* This,
+    UINT index,
+    ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeInfo2_SetVarHelpStringContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_Invalidate_Proxy(
+    ICreateTypeInfo2* This);
+void __RPC_STUB ICreateTypeInfo2_Invalidate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetName_Proxy(
+    ICreateTypeInfo2* This,
+    LPOLESTR szName);
+void __RPC_STUB ICreateTypeInfo2_SetName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICreateTypeInfo2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeLib interface
+ */
+#ifndef __ICreateTypeLib_INTERFACE_DEFINED__
+#define __ICreateTypeLib_INTERFACE_DEFINED__
+
+typedef ICreateTypeLib *LPCREATETYPELIB;
+DEFINE_GUID(IID_ICreateTypeLib, 0x00020406, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeLib : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateTypeInfo(
+        LPOLESTR szName,
+        TYPEKIND tkind,
+        ICreateTypeInfo **ppCTInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetName(
+        LPOLESTR szName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVersion(
+        WORD wMajorVerNum,
+        WORD wMinorVerNum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGuid(
+        REFGUID guid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDocString(
+        LPOLESTR szDoc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpFileName(
+        LPOLESTR szHelpFileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpContext(
+        DWORD dwHelpContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLcid(
+        LCID lcid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLibFlags(
+        UINT uLibFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveAllChanges(
+        ) = 0;
+
+};
+#else
+typedef struct ICreateTypeLibVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICreateTypeLib* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICreateTypeLib* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICreateTypeLib* This);
+
+    /*** ICreateTypeLib methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateTypeInfo)(
+        ICreateTypeLib* This,
+        LPOLESTR szName,
+        TYPEKIND tkind,
+        ICreateTypeInfo **ppCTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ICreateTypeLib* This,
+        LPOLESTR szName);
+
+    HRESULT (STDMETHODCALLTYPE *SetVersion)(
+        ICreateTypeLib* This,
+        WORD wMajorVerNum,
+        WORD wMinorVerNum);
+
+    HRESULT (STDMETHODCALLTYPE *SetGuid)(
+        ICreateTypeLib* This,
+        REFGUID guid);
+
+    HRESULT (STDMETHODCALLTYPE *SetDocString)(
+        ICreateTypeLib* This,
+        LPOLESTR szDoc);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpFileName)(
+        ICreateTypeLib* This,
+        LPOLESTR szHelpFileName);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+        ICreateTypeLib* This,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetLcid)(
+        ICreateTypeLib* This,
+        LCID lcid);
+
+    HRESULT (STDMETHODCALLTYPE *SetLibFlags)(
+        ICreateTypeLib* This,
+        UINT uLibFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SaveAllChanges)(
+        ICreateTypeLib* This);
+
+    END_INTERFACE
+} ICreateTypeLibVtbl;
+interface ICreateTypeLib {
+    CONST_VTBL ICreateTypeLibVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeLib_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeLib_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeLib_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeLib methods ***/
+#define ICreateTypeLib_CreateTypeInfo(This,szName,tkind,ppCTInfo) (This)->lpVtbl->CreateTypeInfo(This,szName,tkind,ppCTInfo)
+#define ICreateTypeLib_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)
+#define ICreateTypeLib_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeLib_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeLib_SetDocString(This,szDoc) (This)->lpVtbl->SetDocString(This,szDoc)
+#define ICreateTypeLib_SetHelpFileName(This,szHelpFileName) (This)->lpVtbl->SetHelpFileName(This,szHelpFileName)
+#define ICreateTypeLib_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeLib_SetLcid(This,lcid) (This)->lpVtbl->SetLcid(This,lcid)
+#define ICreateTypeLib_SetLibFlags(This,uLibFlags) (This)->lpVtbl->SetLibFlags(This,uLibFlags)
+#define ICreateTypeLib_SaveAllChanges(This) (This)->lpVtbl->SaveAllChanges(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_CreateTypeInfo_Proxy(
+    ICreateTypeLib* This,
+    LPOLESTR szName,
+    TYPEKIND tkind,
+    ICreateTypeInfo **ppCTInfo);
+void __RPC_STUB ICreateTypeLib_CreateTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetName_Proxy(
+    ICreateTypeLib* This,
+    LPOLESTR szName);
+void __RPC_STUB ICreateTypeLib_SetName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetVersion_Proxy(
+    ICreateTypeLib* This,
+    WORD wMajorVerNum,
+    WORD wMinorVerNum);
+void __RPC_STUB ICreateTypeLib_SetVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetGuid_Proxy(
+    ICreateTypeLib* This,
+    REFGUID guid);
+void __RPC_STUB ICreateTypeLib_SetGuid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetDocString_Proxy(
+    ICreateTypeLib* This,
+    LPOLESTR szDoc);
+void __RPC_STUB ICreateTypeLib_SetDocString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetHelpFileName_Proxy(
+    ICreateTypeLib* This,
+    LPOLESTR szHelpFileName);
+void __RPC_STUB ICreateTypeLib_SetHelpFileName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetHelpContext_Proxy(
+    ICreateTypeLib* This,
+    DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeLib_SetHelpContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetLcid_Proxy(
+    ICreateTypeLib* This,
+    LCID lcid);
+void __RPC_STUB ICreateTypeLib_SetLcid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetLibFlags_Proxy(
+    ICreateTypeLib* This,
+    UINT uLibFlags);
+void __RPC_STUB ICreateTypeLib_SetLibFlags_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SaveAllChanges_Proxy(
+    ICreateTypeLib* This);
+void __RPC_STUB ICreateTypeLib_SaveAllChanges_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICreateTypeLib_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeLib2 interface
+ */
+#ifndef __ICreateTypeLib2_INTERFACE_DEFINED__
+#define __ICreateTypeLib2_INTERFACE_DEFINED__
+
+typedef ICreateTypeLib2 *LPCREATETYPELIB2;
+DEFINE_GUID(IID_ICreateTypeLib2, 0x0002040f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeLib2 : public ICreateTypeLib
+{
+    virtual HRESULT STDMETHODCALLTYPE DeleteTypeInfo(
+        LPOLESTR szName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCustData(
+        REFGUID guid,
+        VARIANT *pVarVal) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpStringContext(
+        ULONG dwHelpStringContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHelpStringDll(
+        LPOLESTR szFileName) = 0;
+
+};
+#else
+typedef struct ICreateTypeLib2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICreateTypeLib2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICreateTypeLib2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICreateTypeLib2* This);
+
+    /*** ICreateTypeLib methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateTypeInfo)(
+        ICreateTypeLib2* This,
+        LPOLESTR szName,
+        TYPEKIND tkind,
+        ICreateTypeInfo **ppCTInfo);
+
+    HRESULT (STDMETHODCALLTYPE *SetName)(
+        ICreateTypeLib2* This,
+        LPOLESTR szName);
+
+    HRESULT (STDMETHODCALLTYPE *SetVersion)(
+        ICreateTypeLib2* This,
+        WORD wMajorVerNum,
+        WORD wMinorVerNum);
+
+    HRESULT (STDMETHODCALLTYPE *SetGuid)(
+        ICreateTypeLib2* This,
+        REFGUID guid);
+
+    HRESULT (STDMETHODCALLTYPE *SetDocString)(
+        ICreateTypeLib2* This,
+        LPOLESTR szDoc);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpFileName)(
+        ICreateTypeLib2* This,
+        LPOLESTR szHelpFileName);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+        ICreateTypeLib2* This,
+        DWORD dwHelpContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetLcid)(
+        ICreateTypeLib2* This,
+        LCID lcid);
+
+    HRESULT (STDMETHODCALLTYPE *SetLibFlags)(
+        ICreateTypeLib2* This,
+        UINT uLibFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SaveAllChanges)(
+        ICreateTypeLib2* This);
+
+    /*** ICreateTypeLib2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *DeleteTypeInfo)(
+        ICreateTypeLib2* This,
+        LPOLESTR szName);
+
+    HRESULT (STDMETHODCALLTYPE *SetCustData)(
+        ICreateTypeLib2* This,
+        REFGUID guid,
+        VARIANT *pVarVal);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpStringContext)(
+        ICreateTypeLib2* This,
+        ULONG dwHelpStringContext);
+
+    HRESULT (STDMETHODCALLTYPE *SetHelpStringDll)(
+        ICreateTypeLib2* This,
+        LPOLESTR szFileName);
+
+    END_INTERFACE
+} ICreateTypeLib2Vtbl;
+interface ICreateTypeLib2 {
+    CONST_VTBL ICreateTypeLib2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeLib2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeLib2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeLib2_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeLib methods ***/
+#define ICreateTypeLib2_CreateTypeInfo(This,szName,tkind,ppCTInfo) (This)->lpVtbl->CreateTypeInfo(This,szName,tkind,ppCTInfo)
+#define ICreateTypeLib2_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)
+#define ICreateTypeLib2_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeLib2_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeLib2_SetDocString(This,szDoc) (This)->lpVtbl->SetDocString(This,szDoc)
+#define ICreateTypeLib2_SetHelpFileName(This,szHelpFileName) (This)->lpVtbl->SetHelpFileName(This,szHelpFileName)
+#define ICreateTypeLib2_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeLib2_SetLcid(This,lcid) (This)->lpVtbl->SetLcid(This,lcid)
+#define ICreateTypeLib2_SetLibFlags(This,uLibFlags) (This)->lpVtbl->SetLibFlags(This,uLibFlags)
+#define ICreateTypeLib2_SaveAllChanges(This) (This)->lpVtbl->SaveAllChanges(This)
+/*** ICreateTypeLib2 methods ***/
+#define ICreateTypeLib2_DeleteTypeInfo(This,szName) (This)->lpVtbl->DeleteTypeInfo(This,szName)
+#define ICreateTypeLib2_SetCustData(This,guid,pVarVal) (This)->lpVtbl->SetCustData(This,guid,pVarVal)
+#define ICreateTypeLib2_SetHelpStringContext(This,dwHelpStringContext) (This)->lpVtbl->SetHelpStringContext(This,dwHelpStringContext)
+#define ICreateTypeLib2_SetHelpStringDll(This,szFileName) (This)->lpVtbl->SetHelpStringDll(This,szFileName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_DeleteTypeInfo_Proxy(
+    ICreateTypeLib2* This,
+    LPOLESTR szName);
+void __RPC_STUB ICreateTypeLib2_DeleteTypeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_SetCustData_Proxy(
+    ICreateTypeLib2* This,
+    REFGUID guid,
+    VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeLib2_SetCustData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_SetHelpStringContext_Proxy(
+    ICreateTypeLib2* This,
+    ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeLib2_SetHelpStringContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_SetHelpStringDll_Proxy(
+    ICreateTypeLib2* This,
+    LPOLESTR szFileName);
+void __RPC_STUB ICreateTypeLib2_SetHelpStringDll_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICreateTypeLib2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IErrorLog interface
+ */
+#ifndef __IErrorLog_INTERFACE_DEFINED__
+#define __IErrorLog_INTERFACE_DEFINED__
+
+typedef IErrorLog *LPERRORLOG;
+DEFINE_GUID(IID_IErrorLog, 0x3127ca40, 0x446e, 0x11ce, 0x81,0x35, 0x00,0xaa,0x00,0x4b,0xb8,0x51);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IErrorLog : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddError(
+        LPCOLESTR pszPropName,
+        EXCEPINFO *pExcepInfo) = 0;
+
+};
+#else
+typedef struct IErrorLogVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IErrorLog* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IErrorLog* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IErrorLog* This);
+
+    /*** IErrorLog methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddError)(
+        IErrorLog* This,
+        LPCOLESTR pszPropName,
+        EXCEPINFO *pExcepInfo);
+
+    END_INTERFACE
+} IErrorLogVtbl;
+interface IErrorLog {
+    CONST_VTBL IErrorLogVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IErrorLog_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IErrorLog_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IErrorLog_Release(This) (This)->lpVtbl->Release(This)
+/*** IErrorLog methods ***/
+#define IErrorLog_AddError(This,pszPropName,pExcepInfo) (This)->lpVtbl->AddError(This,pszPropName,pExcepInfo)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IErrorLog_AddError_Proxy(
+    IErrorLog* This,
+    LPCOLESTR pszPropName,
+    EXCEPINFO *pExcepInfo);
+void __RPC_STUB IErrorLog_AddError_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IErrorLog_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPropertyBag interface
+ */
+#ifndef __IPropertyBag_INTERFACE_DEFINED__
+#define __IPropertyBag_INTERFACE_DEFINED__
+
+typedef IPropertyBag *LPPROPERTYBAG;
+DEFINE_GUID(IID_IPropertyBag, 0x55272a00, 0x42cb, 0x11ce, 0x81,0x35, 0x00,0xaa,0x00,0x4b,0xb8,0x51);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPropertyBag : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Read(
+        LPCOLESTR pszPropName,
+        VARIANT *pVar,
+        IErrorLog *pErrorLog) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Write(
+        LPCOLESTR pszPropName,
+        VARIANT *pVar) = 0;
+
+};
+#else
+typedef struct IPropertyBagVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPropertyBag* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPropertyBag* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPropertyBag* This);
+
+    /*** IPropertyBag methods ***/
+    HRESULT (STDMETHODCALLTYPE *Read)(
+        IPropertyBag* This,
+        LPCOLESTR pszPropName,
+        VARIANT *pVar,
+        IErrorLog *pErrorLog);
+
+    HRESULT (STDMETHODCALLTYPE *Write)(
+        IPropertyBag* This,
+        LPCOLESTR pszPropName,
+        VARIANT *pVar);
+
+    END_INTERFACE
+} IPropertyBagVtbl;
+interface IPropertyBag {
+    CONST_VTBL IPropertyBagVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPropertyBag_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertyBag methods ***/
+#define IPropertyBag_Read(This,pszPropName,pVar,pErrorLog) (This)->lpVtbl->Read(This,pszPropName,pVar,pErrorLog)
+#define IPropertyBag_Write(This,pszPropName,pVar) (This)->lpVtbl->Write(This,pszPropName,pVar)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPropertyBag_RemoteRead_Proxy(
+    IPropertyBag* This,
+    LPCOLESTR pszPropName,
+    VARIANT *pVar,
+    IErrorLog *pErrorLog,
+    DWORD varType,
+    IUnknown *pUnkObj);
+void __RPC_STUB IPropertyBag_RemoteRead_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyBag_Write_Proxy(
+    IPropertyBag* This,
+    LPCOLESTR pszPropName,
+    VARIANT *pVar);
+void __RPC_STUB IPropertyBag_Write_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IPropertyBag_Read_Proxy(
+    IPropertyBag* This,
+    LPCOLESTR pszPropName,
+    VARIANT *pVar,
+    IErrorLog *pErrorLog);
+HRESULT __RPC_STUB IPropertyBag_Read_Stub(
+    IPropertyBag* This,
+    LPCOLESTR pszPropName,
+    VARIANT *pVar,
+    IErrorLog *pErrorLog,
+    DWORD varType,
+    IUnknown *pUnkObj);
+
+#endif  /* __IPropertyBag_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER CLEANLOCALSTORAGE_UserSize     (ULONG *, ULONG, CLEANLOCALSTORAGE *);
+unsigned char * __RPC_USER CLEANLOCALSTORAGE_UserMarshal  (ULONG *, unsigned char *, CLEANLOCALSTORAGE *);
+unsigned char * __RPC_USER CLEANLOCALSTORAGE_UserUnmarshal(ULONG *, unsigned char *, CLEANLOCALSTORAGE *);
+void            __RPC_USER CLEANLOCALSTORAGE_UserFree     (ULONG *, CLEANLOCALSTORAGE *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_OAIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl
new file mode 100644
index 0000000..88c134c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl
@@ -0,0 +1,1651 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "objidl.idl";
+#endif
+
+interface IDispatch;
+interface ITypeInfo;
+interface ITypeLib;
+interface IRecordInfo;
+
+[
+  version(1.0),
+  pointer_default(unique)
+]
+interface IOleAutomationTypes
+{
+
+typedef CY CURRENCY;
+
+/* Safe Array */
+
+typedef struct tagSAFEARRAYBOUND {
+  ULONG cElements;
+  LONG lLbound;
+} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;
+
+typedef [unique] struct _wireVARIANT *wireVARIANT;
+typedef [unique] struct _wireBRECORD *wireBRECORD;
+
+typedef struct _wireSAFEARR_BSTR {
+  ULONG Size;
+  [size_is(Size), ref] wireBSTR *aBstr;
+} SAFEARR_BSTR;
+
+typedef struct _wireSAFEARR_UNKNOWN {
+  ULONG Size;
+  [size_is(Size), ref] IUnknown **apUnknown;
+} SAFEARR_UNKNOWN;
+
+typedef struct _wireSAFEARR_DISPATCH {
+  ULONG Size;
+  [size_is(Size), ref] IDispatch **apDispatch;
+} SAFEARR_DISPATCH;
+
+typedef struct _wireSAFEARR_VARIANT {
+  ULONG Size;
+  [size_is(Size), ref] wireVARIANT *aVariant;
+} SAFEARR_VARIANT;
+
+typedef struct _wireSAFEARR_BRECORD {
+  ULONG Size;
+  [size_is(Size), ref] wireBRECORD *aRecord;
+} SAFEARR_BRECORD;
+
+typedef struct _wireSAFEARR_HAVEIID {
+  ULONG Size;
+  [size_is(Size), ref] IUnknown **apUnknown;
+  IID iid;
+} SAFEARR_HAVEIID;
+
+typedef [v1_enum] enum tagSF_TYPE {
+  SF_ERROR    = VT_ERROR,
+  SF_I1       = VT_I1,
+  SF_I2       = VT_I2,
+  SF_I4       = VT_I4,
+  SF_I8       = VT_I8,
+  SF_BSTR     = VT_BSTR,
+  SF_UNKNOWN  = VT_UNKNOWN,
+  SF_DISPATCH = VT_DISPATCH,
+  SF_VARIANT  = VT_VARIANT,
+  SF_RECORD   = VT_RECORD,
+  SF_HAVEIID  = VT_UNKNOWN|VT_RESERVED,
+} SF_TYPE;
+
+typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
+  case SF_BSTR:     SAFEARR_BSTR BstrStr;
+  case SF_UNKNOWN:  SAFEARR_UNKNOWN UnknownStr;
+  case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
+  case SF_VARIANT:  SAFEARR_VARIANT VariantStr;
+  case SF_RECORD:   SAFEARR_BRECORD RecordStr;
+  case SF_HAVEIID:  SAFEARR_HAVEIID HaveIidStr;
+  case SF_I1:       BYTE_SIZEDARR ByteStr;
+  case SF_I2:       WORD_SIZEDARR WordStr;
+  case SF_I4:       DWORD_SIZEDARR LongStr;
+  case SF_I8:       HYPER_SIZEDARR HyperStr;
+} SAFEARRAYUNION;
+
+typedef [unique] struct _wireSAFEARRAY {
+  USHORT cDims;
+  USHORT fFeatures;
+  ULONG cbElements;
+  ULONG cLocks;
+  SAFEARRAYUNION uArrayStructs;
+  [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
+} *wireSAFEARRAY;
+
+typedef [unique] wireSAFEARRAY *wirePSAFEARRAY;
+
+typedef struct tagSAFEARRAY {
+  USHORT cDims;
+  USHORT fFeatures;
+  ULONG cbElements;
+  ULONG cLocks;
+  PVOID pvData;
+  SAFEARRAYBOUND rgsabound[];
+} SAFEARRAY;
+
+typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;
+
+const USHORT FADF_AUTO        = 0x0001;
+const USHORT FADF_STATIC      = 0x0002;
+const USHORT FADF_EMBEDDED    = 0x0004;
+const USHORT FADF_FIXEDSIZE   = 0x0010;
+const USHORT FADF_RECORD      = 0x0020;
+const USHORT FADF_HAVEIID     = 0x0040;
+const USHORT FADF_HAVEVARTYPE = 0x0080;
+const USHORT FADF_BSTR        = 0x0100;
+const USHORT FADF_UNKNOWN     = 0x0200;
+const USHORT FADF_DISPATCH    = 0x0400;
+const USHORT FADF_VARIANT     = 0x0800;
+const USHORT FADF_RESERVED    = 0xF008;
+/* Undocumented flags */
+const USHORT FADF_DATADELETED  = 0x1000; /* Data in a vector has been deleted */
+const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */
+
+/* Variant */
+
+cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
+cpp_quote("#define __VARIANT_NAME_1 n1")
+cpp_quote("#define __VARIANT_NAME_2 n2")
+cpp_quote("#define __VARIANT_NAME_3 n3")
+cpp_quote("#define __VARIANT_NAME_4 brecVal")
+cpp_quote("#else")
+cpp_quote("#define __tagVARIANT")
+cpp_quote("#define __VARIANT_NAME_1")
+cpp_quote("#define __VARIANT_NAME_2")
+cpp_quote("#define __VARIANT_NAME_3")
+cpp_quote("#define __tagBRECORD")
+cpp_quote("#define __VARIANT_NAME_4")
+cpp_quote("#endif")
+
+typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
+
+struct tagVARIANT {
+  union {
+    struct __tagVARIANT {
+      VARTYPE vt;
+      WORD wReserved1;
+      WORD wReserved2;
+      WORD wReserved3;
+      union {
+        signed char cVal;
+        USHORT uiVal;
+        ULONG ulVal;
+        INT intVal;
+        UINT uintVal;
+        BYTE bVal;
+        SHORT iVal;
+        LONG lVal;
+        FLOAT fltVal;
+        DOUBLE dblVal;
+        VARIANT_BOOL boolVal;
+#if 0 /* illegal in C++ */
+        _VARIANT_BOOL bool;
+#endif
+        SCODE scode;
+        DATE date;
+        BSTR bstrVal;
+        CY cyVal;
+        IUnknown *punkVal;
+        IDispatch *pdispVal;
+        SAFEARRAY *parray;
+        LONGLONG llVal;
+        ULONGLONG ullVal;
+        signed char *pcVal;
+        USHORT *puiVal;
+        ULONG *pulVal;
+        INT *pintVal;
+        UINT *puintVal;
+        BYTE *pbVal;
+        SHORT *piVal;
+        LONG *plVal;
+        FLOAT *pfltVal;
+        DOUBLE *pdblVal;
+        VARIANT_BOOL *pboolVal;
+#if 0
+        _VARIANT_BOOL *pbool;
+#endif
+        SCODE *pscode;
+        DATE *pdate;
+        BSTR *pbstrVal;
+        VARIANT *pvarVal;
+        PVOID byref;
+        CY *pcyVal;
+        DECIMAL *pdecVal;
+        IUnknown **ppunkVal;
+        IDispatch **ppdispVal;
+        SAFEARRAY **pparray;
+        LONGLONG *pllVal;
+        ULONGLONG *pullVal;
+        struct __tagBRECORD {
+          PVOID pvRecord;
+          IRecordInfo *pRecInfo;
+        } __VARIANT_NAME_4;
+      } __VARIANT_NAME_3;
+    } __VARIANT_NAME_2;
+
+    DECIMAL decVal;
+  } __VARIANT_NAME_1;
+};
+
+typedef VARIANT *LPVARIANT;
+typedef VARIANT VARIANTARG;
+typedef VARIANTARG *LPVARIANTARG;
+
+cpp_quote("#if 0")
+typedef const VARIANT *REFVARIANT;
+cpp_quote("#elif !defined(_REFVARIANT_DEFINED)")
+cpp_quote("#define _REFVARIANT_DEFINED")
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define REFVARIANT const VARIANT &")
+cpp_quote("#else")
+cpp_quote("#define REFVARIANT const VARIANT *__MIDL_CONST")
+cpp_quote("#endif")
+cpp_quote("#endif")
+
+struct _wireBRECORD {
+  ULONG fFlags;
+  ULONG clSize;
+  IRecordInfo *pRecInfo;
+  [size_is(clSize)] byte *pRecord;
+};
+
+struct _wireVARIANT {
+  DWORD clSize;
+  DWORD rpcReserved;
+  USHORT vt;
+  USHORT wReserved1;
+  USHORT wReserved2;
+  USHORT wReserved3;
+  [switch_is(vt)] union {
+  [case(VT_EMPTY, VT_NULL)]    ;
+  [case(VT_I1)]                signed char cVal;
+  [case(VT_UI2)]               USHORT uiVal;
+  [case(VT_UI4)]               ULONG ulVal;
+  [case(VT_INT)]               INT intVal;
+  [case(VT_UINT)]              UINT uintVal;
+  [case(VT_UI1)]               BYTE bVal;
+  [case(VT_I2)]                SHORT iVal;
+  [case(VT_I4)]                LONG lVal;
+  [case(VT_R4)]                FLOAT fltVal;
+  [case(VT_R8)]                DOUBLE dblVal;
+  [case(VT_BOOL)]              VARIANT_BOOL boolVal;
+  [case(VT_ERROR)]             SCODE scode;
+  [case(VT_DATE)]              DATE date;
+  [case(VT_BSTR)]              wireBSTR bstrVal;
+  [case(VT_CY)]                CY cyVal;
+  [case(VT_DECIMAL)]           DECIMAL decVal;
+  [case(VT_UNKNOWN)]           IUnknown *punkVal;
+  [case(VT_DISPATCH)]          IDispatch *pdispVal;
+  [case(VT_ARRAY)]             wireSAFEARRAY parray;
+  [case(VT_I1|VT_BYREF)]       signed char *pcVal;
+  [case(VT_UI2|VT_BYREF)]      USHORT *puiVal;
+  [case(VT_UI4|VT_BYREF)]      ULONG *pulVal;
+  [case(VT_INT|VT_BYREF)]      INT *pintVal;
+  [case(VT_UINT|VT_BYREF)]     UINT *puintVal;
+  [case(VT_UI1|VT_BYREF)]      BYTE *pbVal;
+  [case(VT_I2|VT_BYREF)]       SHORT *piVal;
+  [case(VT_I4|VT_BYREF)]       LONG *plVal;
+  [case(VT_R4|VT_BYREF)]       FLOAT *pfltVal;
+  [case(VT_R8|VT_BYREF)]       DOUBLE *pdblVal;
+  [case(VT_BOOL|VT_BYREF)]     VARIANT_BOOL *pboolVal;
+  [case(VT_ERROR|VT_BYREF)]    SCODE *pscode;
+  [case(VT_DATE|VT_BYREF)]     DATE *pdate;
+  [case(VT_BSTR|VT_BYREF)]     wireBSTR *pbstrVal;
+  [case(VT_VARIANT|VT_BYREF)]  wireVARIANT *pvarVal;
+  [case(VT_CY|VT_BYREF)]       CY *pcyVal;
+  [case(VT_DECIMAL|VT_BYREF)]  DECIMAL *pdecVal;
+  [case(VT_UNKNOWN|VT_BYREF)]  IUnknown **ppunkVal;
+  [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;
+  [case(VT_ARRAY|VT_BYREF)]    wireSAFEARRAY *pparray;
+  [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;
+  } DUMMYUNIONNAME;
+};
+
+/* Dispatch */
+
+typedef LONG DISPID;
+typedef DWORD HREFTYPE;
+typedef DISPID MEMBERID;
+
+typedef [v1_enum] enum tagTYPEKIND {
+  TKIND_ENUM = 0,
+  TKIND_RECORD,
+  TKIND_MODULE,
+  TKIND_INTERFACE,
+  TKIND_DISPATCH,
+  TKIND_COCLASS,
+  TKIND_ALIAS,
+  TKIND_UNION,
+  TKIND_MAX
+} TYPEKIND;
+
+typedef struct tagTYPEDESC {
+  [switch_is(vt)] union {
+  [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;
+  [case(VT_CARRAY)]            struct tagARRAYDESC *lpadesc;
+  [case(VT_USERDEFINED)]       HREFTYPE hreftype;
+  [default]                    ;
+  } DUMMYUNIONNAME;
+  VARTYPE vt;
+} TYPEDESC;
+
+typedef struct tagARRAYDESC {
+  TYPEDESC tdescElem;
+  USHORT cDims;
+  [size_is(cDims)] SAFEARRAYBOUND rgbounds[];
+} ARRAYDESC;
+
+typedef struct tagPARAMDESCEX {
+  ULONG cBytes;
+  VARIANTARG varDefaultValue;
+} PARAMDESCEX, *LPPARAMDESCEX;
+
+typedef struct tagPARAMDESC {
+  LPPARAMDESCEX pparamdescex;
+  USHORT wParamFlags;
+} PARAMDESC, *LPPARAMDESC;
+
+const USHORT PARAMFLAG_NONE         = 0x00;
+const USHORT PARAMFLAG_FIN          = 0x01;
+const USHORT PARAMFLAG_FOUT         = 0x02;
+const USHORT PARAMFLAG_FLCID        = 0x04;
+const USHORT PARAMFLAG_FRETVAL      = 0x08;
+const USHORT PARAMFLAG_FOPT         = 0x10;
+const USHORT PARAMFLAG_FHASDEFAULT  = 0x20;
+const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
+
+typedef struct tagIDLDESC {
+  ULONG_PTR dwReserved;
+  USHORT wIDLFlags;
+} IDLDESC, *LPIDLDESC;
+
+const USHORT IDLFLAG_NONE    = PARAMFLAG_NONE;
+const USHORT IDLFLAG_FIN     = PARAMFLAG_FIN;
+const USHORT IDLFLAG_FOUT    = PARAMFLAG_FOUT;
+const USHORT IDLFLAG_FLCID   = PARAMFLAG_FLCID;
+const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagELEMDESC {
+  TYPEDESC tdesc;
+  PARAMDESC paramdesc;
+} ELEMDESC;
+cpp_quote("#else") /* C/C++ defs */
+cpp_quote("typedef struct tagELEMDESC {")
+cpp_quote("  TYPEDESC tdesc;")
+cpp_quote("  union {")
+cpp_quote("    IDLDESC idldesc;")
+cpp_quote("    PARAMDESC paramdesc;")
+cpp_quote("  } DUMMYUNIONNAME;")
+cpp_quote("} ELEMDESC, *LPELEMDESC;")
+cpp_quote("#endif")
+
+typedef struct tagTYPEATTR {
+  GUID guid;
+  LCID lcid;
+  DWORD dwReserved;
+  MEMBERID memidConstructor;
+  MEMBERID memidDestructor;
+  LPOLESTR lpstrSchema;
+  ULONG cbSizeInstance;
+  TYPEKIND typekind;
+  WORD cFuncs;
+  WORD cVars;
+  WORD cImplTypes;
+  WORD cbSizeVft;
+  WORD cbAlignment;
+  WORD wTypeFlags;
+  WORD wMajorVerNum;
+  WORD wMinorVerNum;
+  TYPEDESC tdescAlias;
+  IDLDESC idldescType;
+} TYPEATTR, *LPTYPEATTR;
+
+typedef struct tagDISPPARAMS {
+  [size_is(cArgs)] VARIANTARG *rgvarg;
+  [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;
+  UINT cArgs;
+  UINT cNamedArgs;
+} DISPPARAMS;
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagEXCEPINFO {
+  WORD wCode;
+  WORD wReserved;
+  BSTR bstrSource;
+  BSTR bstrDescription;
+  BSTR bstrHelpFile;
+  DWORD dwHelpContext;
+  ULONG_PTR pvReserved;
+  ULONG_PTR pfnDeferredFillIn;
+  SCODE scode;
+} EXCEPINFO;
+cpp_quote("#else")
+cpp_quote("typedef struct tagEXCEPINFO {")
+cpp_quote("  WORD wCode;")
+cpp_quote("  WORD wReserved;")
+cpp_quote("  BSTR bstrSource;")
+cpp_quote("  BSTR bstrDescription;")
+cpp_quote("  BSTR bstrHelpFile;")
+cpp_quote("  DWORD dwHelpContext;")
+cpp_quote("  PVOID pvReserved;")
+cpp_quote("  HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
+cpp_quote("  SCODE scode;")
+cpp_quote("} EXCEPINFO, *LPEXCEPINFO;")
+cpp_quote("#endif")
+
+typedef [v1_enum] enum tagCALLCONV {
+  CC_FASTCALL = 0,
+  CC_CDECL = 1,
+  CC_MSCPASCAL,
+  CC_PASCAL = CC_MSCPASCAL,
+  CC_MACPASCAL,
+  CC_STDCALL,
+  CC_FPFASTCALL,
+  CC_SYSCALL,
+  CC_MPWCDECL,
+  CC_MPWPASCAL,
+  CC_MAX
+} CALLCONV;
+
+typedef [v1_enum] enum tagFUNCKIND {
+  FUNC_VIRTUAL,
+  FUNC_PUREVIRTUAL,
+  FUNC_NONVIRTUAL,
+  FUNC_STATIC,
+  FUNC_DISPATCH
+} FUNCKIND;
+
+typedef [v1_enum] enum tagINVOKEKIND {
+  INVOKE_FUNC = 1,
+  INVOKE_PROPERTYGET = 2,
+  INVOKE_PROPERTYPUT = 4,
+  INVOKE_PROPERTYPUTREF = 8
+} INVOKEKIND;
+
+typedef struct tagFUNCDESC {
+  MEMBERID memid;
+  [size_is(cScodes)] SCODE *lprgscode;
+  [size_is(cParams)] ELEMDESC *lprgelemdescParam;
+  FUNCKIND funckind;
+  INVOKEKIND invkind;
+  CALLCONV callconv;
+  SHORT cParams;
+  SHORT cParamsOpt;
+  SHORT oVft;
+  SHORT cScodes;
+  ELEMDESC elemdescFunc;
+  WORD wFuncFlags;
+} FUNCDESC, *LPFUNCDESC;
+
+typedef [v1_enum] enum tagVARKIND {
+  VAR_PERINSTANCE,
+  VAR_STATIC,
+  VAR_CONST,
+  VAR_DISPATCH
+} VARKIND;
+
+const USHORT IMPLTYPEFLAG_FDEFAULT       = 0x1;
+const USHORT IMPLTYPEFLAG_FSOURCE        = 0x2;
+const USHORT IMPLTYPEFLAG_FRESTRICTED    = 0x4;
+const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;
+
+typedef struct tagVARDESC {
+  MEMBERID memid;
+  LPOLESTR lpstrSchema;
+  [switch_is(varkind)] union {
+  [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
+  [case(VAR_CONST)] VARIANT *lpvarValue;
+  } DUMMYUNIONNAME;
+  ELEMDESC elemdescVar;
+  WORD wVarFlags;
+  VARKIND varkind;
+} VARDESC, *LPVARDESC;
+
+typedef enum tagTYPEFLAGS {
+  TYPEFLAG_FAPPOBJECT     = 0x0001,
+  TYPEFLAG_FCANCREATE     = 0x0002,
+  TYPEFLAG_FLICENSED      = 0x0004,
+  TYPEFLAG_FPREDECLID     = 0x0008,
+  TYPEFLAG_FHIDDEN        = 0x0010,
+  TYPEFLAG_FCONTROL       = 0x0020,
+  TYPEFLAG_FDUAL          = 0x0040,
+  TYPEFLAG_FNONEXTENSIBLE = 0x0080,
+  TYPEFLAG_FOLEAUTOMATION = 0x0100,
+  TYPEFLAG_FRESTRICTED    = 0x0200,
+  TYPEFLAG_FAGGREGATABLE  = 0x0400,
+  TYPEFLAG_FREPLACEABLE   = 0x0800,
+  TYPEFLAG_FDISPATCHABLE  = 0x1000,
+  TYPEFLAG_FREVERSEBIND   = 0x2000,
+  TYPEFLAG_FPROXY         = 0x4000
+} TYPEFLAGS;
+
+typedef enum tagFUNCFLAGS {
+  FUNCFLAG_FRESTRICTED       = 0x0001,
+  FUNCFLAG_FSOURCE           = 0x0002,
+  FUNCFLAG_FBINDABLE         = 0x0004,
+  FUNCFLAG_FREQUESTEDIT      = 0x0008,
+  FUNCFLAG_FDISPLAYBIND      = 0x0010,
+  FUNCFLAG_FDEFAULTBIND      = 0x0020,
+  FUNCFLAG_FHIDDEN           = 0x0040,
+  FUNCFLAG_FUSESGETLASTERROR = 0x0080,
+  FUNCFLAG_FDEFAULTCOLLELEM  = 0x0100,
+  FUNCFLAG_FUIDEFAULT        = 0x0200,
+  FUNCFLAG_FNONBROWSABLE     = 0x0400,
+  FUNCFLAG_FREPLACEABLE      = 0x0800,
+  FUNCFLAG_FIMMEDIATEBIND    = 0x1000
+} FUNCFLAGS;
+
+typedef enum tagVARFLAGS {
+  VARFLAG_FREADONLY        = 0x0001,
+  VARFLAG_FSOURCE          = 0x0002,
+  VARFLAG_FBINDABLE        = 0x0004,
+  VARFLAG_FREQUESTEDIT     = 0x0008,
+  VARFLAG_FDISPLAYBIND     = 0x0010,
+  VARFLAG_FDEFAULTBIND     = 0x0020,
+  VARFLAG_FHIDDEN          = 0x0040,
+  VARFLAG_FRESTRICTED      = 0x0080,
+  VARFLAG_FDEFAULTCOLLELEM = 0x0100,
+  VARFLAG_FUIDEFAULT       = 0x0200,
+  VARFLAG_FNONBROWSABLE    = 0x0400,
+  VARFLAG_FREPLACEABLE     = 0x0800,
+  VARFLAG_FIMMEDIATEBIND   = 0x1000
+} VARFLAGS;
+
+typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
+  IUnknown *pInterface;
+  PVOID pStorage;
+  DWORD flags;
+} CLEANLOCALSTORAGE;
+
+typedef struct tagCUSTDATAITEM {
+  GUID guid;
+  VARIANTARG varValue;
+} CUSTDATAITEM, *LPCUSTDATAITEM;
+
+typedef struct tagCUSTDATA {
+  DWORD cCustData;
+  [size_is(cCustData)] LPCUSTDATAITEM prgCustData;
+} CUSTDATA, *LPCUSTDATA;
+
+} /* interface IOleAutomationTypes */
+
+/******************** INTERFACES ********************/
+
+[
+  object,
+  uuid(00020400-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IDispatch : IUnknown
+{
+  typedef [unique] IDispatch *LPDISPATCH;
+
+  const DISPID DISPID_UNKNOWN     = -1;
+  const DISPID DISPID_VALUE       =  0;
+  const DISPID DISPID_PROPERTYPUT = -3;
+  const DISPID DISPID_NEWENUM     = -4;
+  const DISPID DISPID_EVALUATE    = -5;
+  const DISPID DISPID_CONSTRUCTOR = -6;
+  const DISPID DISPID_DESTRUCTOR  = -7;
+  const DISPID DISPID_COLLECT     = -8;
+
+  HRESULT GetTypeInfoCount(
+    [out] UINT *pctinfo);
+
+  HRESULT GetTypeInfo(
+    [in] UINT iTInfo,
+    [in] LCID lcid,
+    [out] ITypeInfo **ppTInfo);
+
+  HRESULT GetIDsOfNames(
+    [in] REFIID riid,
+    [in, size_is(cNames)] LPOLESTR *rgszNames,
+    [in] UINT cNames,
+    [in] LCID lcid,
+    [out, size_is(cNames)] DISPID *rgDispId);
+
+  [local]
+  HRESULT Invoke(
+    [in] DISPID dispIdMember,
+    [in] REFIID riid,
+    [in] LCID lcid,
+    [in] WORD wFlags,
+    [in, out] DISPPARAMS *pDispParams,
+    [out] VARIANT *pVarResult,
+    [out] EXCEPINFO *pExcepInfo,
+    [out] UINT *puArgErr);
+
+  [call_as(Invoke)]
+  HRESULT RemoteInvoke(
+    [in] DISPID dispIdMember,
+    [in] REFIID riid,
+    [in] LCID lcid,
+    [in] DWORD dwFlags,
+    [in] DISPPARAMS *pDispParams,
+    [out] VARIANT *pVarResult,
+    [out] EXCEPINFO *pExcepInfo,
+    [out] UINT *pArgErr,
+    [in] UINT cVarRef,
+    [in, size_is(cVarRef)] UINT *rgVarRefIdx,
+    [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);
+}
+
+[
+  object,
+  uuid(00020404-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumVARIANT : IUnknown
+{
+  typedef [unique] IEnumVARIANT *LPENUMVARIANT;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out] VARIANT *rgVar,
+    [out] ULONG *pCeltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pCeltFetched)]
+    VARIANT *rgVar,
+    [out] ULONG *pCeltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumVARIANT **ppEnum);
+}
+
+[
+  object,
+  uuid(00020403-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ITypeComp : IUnknown
+{
+  typedef [unique] ITypeComp *LPTYPECOMP;
+
+  typedef [v1_enum] enum tagDESCKIND {
+    DESCKIND_NONE = 0,
+    DESCKIND_FUNCDESC,
+    DESCKIND_VARDESC,
+    DESCKIND_TYPECOMP,
+    DESCKIND_IMPLICITAPPOBJ,
+    DESCKIND_MAX
+  } DESCKIND;
+
+  typedef union tagBINDPTR {
+    FUNCDESC *lpfuncdesc;
+    VARDESC *lpvardesc;
+    ITypeComp *lptcomp;
+  } BINDPTR, *LPBINDPTR;
+
+  [local]
+  HRESULT Bind(
+    [in] LPOLESTR szName,
+    [in] ULONG lHashVal,
+    [in] WORD wFlags,
+    [out] ITypeInfo **ppTInfo,
+    [out] DESCKIND *pDescKind,
+    [out] BINDPTR *pBindPtr);
+
+  [call_as(Bind)]
+  HRESULT RemoteBind(
+    [in] LPOLESTR szName,
+    [in] ULONG lHashVal,
+    [in] WORD wFlags,
+    [out] ITypeInfo **ppTInfo,
+    [out] DESCKIND *pDescKind,
+    [out] LPFUNCDESC *ppFuncDesc,
+    [out] LPVARDESC *ppVarDesc,
+    [out] ITypeComp **ppTypeComp,
+    [out] CLEANLOCALSTORAGE *pDummy);
+
+  [local]
+  HRESULT BindType(
+    [in] LPOLESTR szName,
+    [in] ULONG lHashVal,
+    [out] ITypeInfo **ppTInfo,
+    [out] ITypeComp **ppTComp);
+
+  [call_as(BindType)]
+  HRESULT RemoteBindType(
+    [in] LPOLESTR szName,
+    [in] ULONG lHashVal,
+    [out] ITypeInfo **ppTInfo);
+}
+
+[
+  object,
+  uuid(00020401-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ITypeInfo : IUnknown
+{
+  typedef [unique] ITypeInfo *LPTYPEINFO;
+
+  [local]
+  HRESULT GetTypeAttr(
+    [out] TYPEATTR **ppTypeAttr);
+
+  [call_as(GetTypeAttr)]
+  HRESULT RemoteGetTypeAttr(
+    [out] LPTYPEATTR *ppTypeAttr,
+    [out] CLEANLOCALSTORAGE *pDummy);
+
+  HRESULT GetTypeComp(
+    [out] ITypeComp **ppTComp);
+
+  [local]
+  HRESULT GetFuncDesc(
+    [in] UINT index,
+    [out] FUNCDESC **ppFuncDesc);
+
+  [call_as(GetFuncDesc)]
+  HRESULT RemoteGetFuncDesc(
+    [in] UINT index,
+    [out] LPFUNCDESC *ppFuncDesc,
+    [out] CLEANLOCALSTORAGE *pDummy);
+
+  [local]
+  HRESULT GetVarDesc(
+    [in] UINT index,
+    [out] VARDESC **ppVarDesc);
+
+  [call_as(GetVarDesc)]
+  HRESULT RemoteGetVarDesc(
+    [in] UINT index,
+    [out] LPVARDESC *ppVarDesc,
+    [out] CLEANLOCALSTORAGE *pDummy);
+
+  [local]
+  HRESULT GetNames(
+    [in] MEMBERID memid,
+    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
+    [in] UINT cMaxNames,
+    [out] UINT *pcNames);
+
+  [call_as(GetNames)]
+  HRESULT RemoteGetNames(
+    [in] MEMBERID memid,
+    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
+    [in] UINT cMaxNames,
+    [out] UINT *pcNames);
+
+  HRESULT GetRefTypeOfImplType(
+    [in] UINT index,
+    [out] HREFTYPE *pRefType);
+
+  HRESULT GetImplTypeFlags(
+    [in] UINT index,
+    [out] INT *pImplTypeFlags);
+
+  [local]
+  HRESULT GetIDsOfNames(
+    [in, size_is(cNames)] LPOLESTR *rgszNames,
+    [in] UINT cNames,
+    [out, size_is(cNames)] MEMBERID *pMemId);
+
+  [call_as(GetIDsOfNames)]
+  HRESULT LocalGetIDsOfNames();
+
+  [local]
+  HRESULT Invoke(
+    [in] PVOID pvInstance,
+    [in] MEMBERID memid,
+    [in] WORD wFlags,
+    [in, out] DISPPARAMS *pDispParams,
+    [out] VARIANT *pVarResult,
+    [out] EXCEPINFO *pExcepInfo,
+    [out] UINT *puArgErr);
+
+  [call_as(Invoke)]
+  HRESULT LocalInvoke();
+
+  [local]
+  HRESULT GetDocumentation(
+    [in] MEMBERID memid,
+    [out] BSTR *pBstrName,
+    [out] BSTR *pBstrDocString,
+    [out] DWORD *pdwHelpContext,
+    [out] BSTR *pBstrHelpFile);
+
+  [call_as(GetDocumentation)]
+  HRESULT RemoteGetDocumentation(
+    [in] MEMBERID memid,
+    [in] DWORD refPtrFlags,
+    [out] BSTR *pBstrName,
+    [out] BSTR *pBstrDocString,
+    [out] DWORD *pdwHelpContext,
+    [out] BSTR *pBstrHelpFile);
+
+  [local]
+  HRESULT GetDllEntry(
+    [in] MEMBERID memid,
+    [in] INVOKEKIND invKind,
+    [out] BSTR *pBstrDllName,
+    [out] BSTR *pBstrName,
+    [out] WORD *pwOrdinal);
+
+  [call_as(GetDllEntry)]
+  HRESULT RemoteGetDllEntry(
+    [in] MEMBERID memid,
+    [in] INVOKEKIND invKind,
+    [in] DWORD refPtrFlags,
+    [out] BSTR *pBstrDllName,
+    [out] BSTR *pBstrName,
+    [out] WORD *pwOrdinal);
+
+  HRESULT GetRefTypeInfo(
+    [in] HREFTYPE hRefType,
+    [out] ITypeInfo **ppTInfo);
+
+  [local]
+  HRESULT AddressOfMember(
+    [in] MEMBERID memid,
+    [in] INVOKEKIND invKind,
+    [out] PVOID *ppv);
+
+  [call_as(AddressOfMember)]
+  HRESULT LocalAddressOfMember();
+
+  [local]
+  HRESULT CreateInstance(
+    [in] IUnknown *pUnkOuter,
+    [in] REFIID riid,
+    [out, iid_is(riid)] PVOID *ppvObj);
+
+  [call_as(CreateInstance)]
+  HRESULT RemoteCreateInstance(
+    [in] REFIID riid,
+    [out, iid_is(riid)] IUnknown **ppvObj);
+
+  HRESULT GetMops(
+    [in] MEMBERID memid,
+    [out] BSTR *pBstrMops);
+
+  [local]
+  HRESULT GetContainingTypeLib(
+    [out] ITypeLib **ppTLib,
+    [out] UINT *pIndex);
+
+  [call_as(GetContainingTypeLib)]
+  HRESULT RemoteGetContainingTypeLib(
+    [out] ITypeLib **ppTLib,
+    [out] UINT *pIndex);
+
+  [local]
+  void ReleaseTypeAttr(
+    [in] TYPEATTR *pTypeAttr);
+
+  [call_as(ReleaseTypeAttr)]
+  HRESULT LocalReleaseTypeAttr();
+
+  [local]
+  void ReleaseFuncDesc(
+    [in] FUNCDESC *pFuncDesc);
+
+  [call_as(ReleaseFuncDesc)]
+  HRESULT LocalReleaseFuncDesc();
+
+  [local]
+  void ReleaseVarDesc(
+    [in] VARDESC *pVarDesc);
+
+  [call_as(ReleaseVarDesc)]
+  HRESULT LocalReleaseVarDesc();
+}
+
+[
+  object,
+  uuid(00020412-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ITypeInfo2 : ITypeInfo
+{
+  typedef [unique] ITypeInfo2 *LPTYPEINFO2;
+
+  HRESULT GetTypeKind(
+    [out] TYPEKIND *pTypeKind);
+
+  HRESULT GetTypeFlags(
+    [out] ULONG *pTypeFlags);
+
+  HRESULT GetFuncIndexOfMemId(
+    [in] MEMBERID memid,
+    [in] INVOKEKIND invKind,
+    [out] UINT *pFuncIndex);
+
+  HRESULT GetVarIndexOfMemId(
+    [in] MEMBERID memid,
+    [out] UINT *pVarIndex);
+
+  HRESULT GetCustData(
+    [in] REFGUID guid,
+    [out] VARIANT *pVarVal);
+
+  HRESULT GetFuncCustData(
+    [in] UINT index,
+    [in] REFGUID guid,
+    [out] VARIANT *pVarVal);
+
+  HRESULT GetParamCustData(
+    [in] UINT indexFunc,
+    [in] UINT indexParam,
+    [in] REFGUID guid,
+    [out] VARIANT *pVarVal);
+
+  HRESULT GetVarCustData(
+    [in] UINT index,
+    [in] REFGUID guid,
+    [out] VARIANT *pVarVal);
+
+  HRESULT GetImplTypeCustData(
+    [in] UINT index,
+    [in] REFGUID guid,
+    [out] VARIANT *pVarVal);
+
+  [local]
+  HRESULT GetDocumentation2(
+    [in] MEMBERID memid,
+    [in] LCID lcid,
+    [out] BSTR *pbstrHelpString,
+    [out] DWORD *pdwHelpStringContext,
+    [out] BSTR *pbstrHelpStringDll);
+
+  [call_as(GetDocumentation2)]
+  HRESULT RemoteGetDocumentation2(
+    [in] MEMBERID memid,
+    [in] LCID lcid,
+    [in] DWORD refPtrFlags,
+    [out] BSTR *pbstrHelpString,
+    [out] DWORD *pdwHelpStringContext,
+    [out] BSTR *pbstrHelpStringDll);
+
+  HRESULT GetAllCustData(
+    [out] CUSTDATA *pCustData);
+
+  HRESULT GetAllFuncCustData(
+    [in] UINT index,
+    [out] CUSTDATA *pCustData);
+
+  HRESULT GetAllParamCustData(
+    [in] UINT indexFunc,
+    [in] UINT indexParam,
+    [out] CUSTDATA *pCustData);
+
+  HRESULT GetAllVarCustData(
+    [in] UINT index,
+    [out] CUSTDATA *pCustData);
+
+  HRESULT GetAllImplTypeCustData(
+    [in] UINT index,
+    [out] CUSTDATA *pCustData);
+}
+
+[
+  object,
+  uuid(00020402-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ITypeLib : IUnknown
+{
+  typedef [unique] ITypeLib *LPTYPELIB;
+
+  typedef [v1_enum] enum tagSYSKIND {
+    SYS_WIN16 = 0,
+    SYS_WIN32,
+    SYS_MAC,
+    SYS_WIN64
+  } SYSKIND;
+
+  typedef [v1_enum] enum tagLIBFLAGS {
+    LIBFLAG_FRESTRICTED   = 0x01,
+    LIBFLAG_FCONTROL      = 0x02,
+    LIBFLAG_FHIDDEN       = 0x04,
+    LIBFLAG_FHASDISKIMAGE = 0x08
+  } LIBFLAGS;
+
+  typedef struct tagTLIBATTR {
+    GUID guid;
+    LCID lcid;
+    SYSKIND syskind;
+    WORD wMajorVerNum;
+    WORD wMinorVerNum;
+    WORD wLibFlags;
+  } TLIBATTR, *LPTLIBATTR;
+
+  [local]
+  UINT GetTypeInfoCount();
+
+  [call_as(GetTypeInfoCount)]
+  HRESULT RemoteGetTypeInfoCount(
+    [out] UINT *pcTInfo);
+
+  HRESULT GetTypeInfo(
+    [in] UINT index,
+    [out] ITypeInfo **ppTInfo);
+
+  HRESULT GetTypeInfoType(
+    [in] UINT index,
+    [out] TYPEKIND *pTKind);
+
+  HRESULT GetTypeInfoOfGuid(
+    [in] REFGUID guid,
+    [out] ITypeInfo **ppTinfo);
+
+  [local]
+  HRESULT GetLibAttr(
+    [out] TLIBATTR **ppTLibAttr);
+
+  [call_as(GetLibAttr)]
+  HRESULT RemoteGetLibAttr(
+    [out] LPTLIBATTR *ppTLibAttr,
+    [out] CLEANLOCALSTORAGE *pDummy);
+
+  HRESULT GetTypeComp(
+    [out] ITypeComp **ppTComp);
+
+  [local]
+  HRESULT GetDocumentation(
+    [in] INT index,
+    [out] BSTR *pBstrName,
+    [out] BSTR *pBstrDocString,
+    [out] DWORD *pdwHelpContext,
+    [out] BSTR *pBstrHelpFile);
+
+  [call_as(GetDocumentation)]
+  HRESULT RemoteGetDocumentation(
+    [in] INT index,
+    [in] DWORD refPtrFlags,
+    [out] BSTR *pBstrName,
+    [out] BSTR *pBstrDocString,
+    [out] DWORD *pdwHelpContext,
+    [out] BSTR *pBstrHelpFile);
+
+  [local]
+  HRESULT IsName(
+    [in, out] LPOLESTR szNameBuf,
+    [in] ULONG lHashVal,
+    [out] BOOL *pfName);
+
+  [call_as(IsName)]
+  HRESULT RemoteIsName(
+    [in] LPOLESTR szNameBuf,
+    [in] ULONG lHashVal,
+    [out] BOOL *pfName,
+    [out] BSTR *pBstrLibName);
+
+  [local]
+  HRESULT FindName(
+    [in, out] LPOLESTR szNameBuf,
+    [in] ULONG lHashVal,
+    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
+    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
+    [in, out] USHORT *pcFound);
+
+  [call_as(FindName)]
+  HRESULT RemoteFindName(
+    [in] LPOLESTR szNameBuf,
+    [in] ULONG lHashVal,
+    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
+    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
+    [in, out] USHORT *pcFound,
+    [out] BSTR *pBstrLibName);
+
+  [local]
+  void ReleaseTLibAttr(
+    [in] TLIBATTR *pTLibAttr);
+
+  [call_as(ReleaseTLibAttr)]
+  HRESULT LocalReleaseTLibAttr();
+}
+
+[
+  object,
+  uuid(00020411-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ITypeLib2 : ITypeLib
+{
+  typedef [unique] ITypeLib2 *LPTYPELIB2;
+
+  HRESULT GetCustData(
+    [in] REFGUID guid,
+    [out] VARIANT *pVarVal);
+
+  [local]
+  HRESULT GetLibStatistics(
+    [out] ULONG *pcUniqueNames,
+    [out] ULONG *pcchUniqueNames);
+
+  [call_as(GetLibStatistics)]
+  HRESULT RemoteGetLibStatistics(
+    [out] ULONG *pcUniqueNames,
+    [out] ULONG *pcchUniqueNames);
+
+  [local]
+  HRESULT GetDocumentation2(
+    [in] INT index,
+    [in] LCID lcid,
+    [out] BSTR *pbstrHelpString,
+    [out] DWORD *pdwHelpStringContext,
+    [out] BSTR *pbstrHelpStringDll);
+
+  [call_as(GetDocumentation2)]
+  HRESULT RemoteGetDocumentation2(
+    [in] INT index,
+    [in] LCID lcid,
+    [in] DWORD refPtrFlags,
+    [out] BSTR *pbstrHelpString,
+    [out] DWORD *pdwHelpStringContext,
+    [out] BSTR *pbstrHelpStringDll);
+
+  HRESULT GetAllCustData(
+    [out] CUSTDATA *pCustData);
+}
+
+[
+  local,
+  object,
+  uuid(00020410-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ITypeChangeEvents : IUnknown
+{
+  typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS;
+
+  typedef enum tagCHANGEKIND {
+    CHANGEKIND_ADDMEMBER,
+    CHANGEKIND_DELETEMEMBER,
+    CHANGEKIND_SETNAMES,
+    CHANGEKIND_SETDOCUMENTATION,
+    CHANGEKIND_GENERAL,
+    CHANGEKIND_INVALIDATE,
+    CHANGEKIND_CHANGEFAILED,
+    CHANGEKIND_MAX
+  } CHANGEKIND;
+
+  HRESULT RequestTypeChange(
+    [in] CHANGEKIND changeKind,
+    [in] ITypeInfo *pTInfoBefore,
+    [in] LPOLESTR pStrName,
+    [out] INT *pfCancel);
+  
+  HRESULT AfterTypeChange(
+    [in] CHANGEKIND changeKind,
+    [in] ITypeInfo *pTInfoAfter,
+    [in] LPOLESTR pStrName);
+}
+
+[
+  object,
+  uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
+  pointer_default(unique)
+]
+interface IErrorInfo : IUnknown
+{
+  typedef [unique] IErrorInfo *LPERRORINFO;
+
+  HRESULT GetGUID(
+    [out] GUID *pGUID);
+
+  HRESULT GetSource(
+    [out] BSTR *pBstrSource);
+
+  HRESULT GetDescription(
+    [out] BSTR *pBstrDescription);
+
+  HRESULT GetHelpFile(
+    [out] BSTR *pBstrHelpFile);
+
+  HRESULT GetHelpContext(
+    [out] DWORD *pdwHelpContext);
+}
+
+[
+  object,
+  uuid(22F03340-547D-101B-8E65-08002B2BD119),
+  pointer_default(unique)
+]
+interface ICreateErrorInfo : IUnknown
+{
+  typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;
+
+  HRESULT SetGUID(
+    [in] REFGUID rguid);
+
+  HRESULT SetSource(
+    [in] LPOLESTR szSource);
+
+  HRESULT SetDescription(
+    [in] LPOLESTR szDescription);
+
+  HRESULT SetHelpFile(
+    [in] LPOLESTR szHelpFile);
+
+  HRESULT SetHelpContext(
+    [in] DWORD dwHelpContext);
+}
+
+[
+  object,
+  uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
+  pointer_default(unique)
+]
+interface ISupportErrorInfo : IUnknown
+{
+  typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;
+
+  HRESULT InterfaceSupportsErrorInfo(
+    [in] REFIID riid);
+}
+
+[
+  object,
+  uuid(0000002E-0000-0000-C000-000000000046)
+]
+interface ITypeFactory : IUnknown
+{
+  HRESULT CreateFromTypeInfo(
+    [in] ITypeInfo *pTypeInfo,
+    [in] REFIID riid,
+    [out, iid_is(riid)] IUnknown **ppv);
+}
+
+[
+  local,
+  object,
+  uuid(0000002D-0000-0000-C000-000000000046)
+]
+interface ITypeMarshal : IUnknown
+{
+  HRESULT Size(
+    [in] PVOID pvType,
+    [in] DWORD dwDestContext,
+    [in] PVOID pvDestContext,
+    [out] ULONG *pSize);
+
+  HRESULT Marshal(
+    [in] PVOID pvType,
+    [in] DWORD dwDestContext,
+    [in] PVOID pvDestContext,
+    [in] ULONG cbBufferLength,
+    [out] BYTE *pBuffer,
+    [out] ULONG *pcbWritten);
+
+  HRESULT Unmarshal(
+    [out] PVOID pvType,
+    [in] DWORD dwFlags,
+    [in] ULONG cbBufferLength,
+    [in] BYTE *pBuffer,
+    [out] ULONG *pcbRead);
+
+  HRESULT Free(
+    [in] PVOID pvType);
+}
+
+[
+  local,
+  object,
+  uuid(0000002F-0000-0000-C000-000000000046)
+]
+interface IRecordInfo : IUnknown
+{
+  typedef [unique] IRecordInfo *LPRECORDINFO;
+
+  HRESULT RecordInit(
+    [out] PVOID pvNew);
+
+  HRESULT RecordClear(
+    [in] PVOID pvExisting);
+
+  HRESULT RecordCopy(
+    [in] PVOID pvExisting,
+    [out] PVOID pvNew);
+
+  HRESULT GetGuid(
+    [out] GUID *pguid);
+
+  HRESULT GetName(
+    [out] BSTR *pbstrName);
+
+  HRESULT GetSize(
+    [out] ULONG *pcbSize);
+
+  HRESULT GetTypeInfo(
+    [out] ITypeInfo **ppTypeInfo);
+
+  HRESULT GetField(
+    [in] PVOID pvData,
+    [in] LPCOLESTR szFieldName,
+    [out] VARIANT *pvarField);
+
+  HRESULT GetFieldNoCopy(
+    [in] PVOID pvData,
+    [in] LPCOLESTR szFieldName,
+    [out] VARIANT *pvarField,
+    [out] PVOID *ppvDataCArray);
+
+  HRESULT PutField(
+    [in] ULONG wFlags,
+    [in, out] PVOID pvData,
+    [in] LPCOLESTR szFieldName,
+    [in] VARIANT *pvarField);
+
+  HRESULT PutFieldNoCopy(
+    [in] ULONG wFlags,
+    [in, out] PVOID pvData,
+    [in] LPCOLESTR szFieldName,
+    [in] VARIANT *pvarField);
+
+  HRESULT GetFieldNames(
+    [in, out] ULONG *pcNames,
+    [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames);
+
+  BOOL IsMatchingType(
+    [in] IRecordInfo *pRecordInfo);
+
+  PVOID RecordCreate();
+
+  HRESULT RecordCreateCopy(
+    [in] PVOID pvSource,
+    [out] PVOID *ppvDest);
+
+  HRESULT RecordDestroy(
+    [in] PVOID pvRecord);
+}
+
+[
+  local,
+  object,
+  uuid(00020405-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ICreateTypeInfo : IUnknown
+{
+  typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;
+
+  HRESULT SetGuid(
+    [in] REFGUID guid);
+
+  HRESULT SetTypeFlags(
+    [in] UINT uTypeFlags);
+
+  HRESULT SetDocString(
+    [in] LPOLESTR pStrDoc);
+
+  HRESULT SetHelpContext(
+    [in] DWORD dwHelpContext);
+
+  HRESULT SetVersion(
+    [in] WORD wMajorVerNum,
+    [in] WORD wMinorVerNum);
+
+  HRESULT AddRefTypeInfo(
+    [in] ITypeInfo *pTInfo,
+    [in] HREFTYPE *phRefType);
+
+  HRESULT AddFuncDesc(
+    [in] UINT index,
+    [in] FUNCDESC *pFuncDesc);
+
+  HRESULT AddImplType(
+    [in] UINT index,
+    [in] HREFTYPE hRefType);
+
+  HRESULT SetImplTypeFlags(
+    [in] UINT index,
+    [in] INT implTypeFlags);
+
+  HRESULT SetAlignment(
+    [in] WORD cbAlignment);
+
+  HRESULT SetSchema(
+    [in] LPOLESTR pStrSchema);
+
+  HRESULT AddVarDesc(
+    [in] UINT index,
+    [in] VARDESC *pVarDesc);
+
+  HRESULT SetFuncAndParamNames(
+    [in] UINT index,
+    [in, size_is(cNames)] LPOLESTR *rgszNames,
+    [in] UINT cNames);
+
+  HRESULT SetVarName(
+    [in] UINT index,
+    [in] LPOLESTR szName);
+
+  HRESULT SetTypeDescAlias(
+    [in] TYPEDESC *pTDescAlias);
+
+  HRESULT DefineFuncAsDllEntry(
+    [in] UINT index,
+    [in] LPOLESTR szDllName,
+    [in] LPOLESTR szProcName);
+
+  HRESULT SetFuncDocString(
+    [in] UINT index,
+    [in] LPOLESTR szDocString);
+
+  HRESULT SetVarDocString(
+    [in] UINT index,
+    [in] LPOLESTR szDocString);
+
+  HRESULT SetFuncHelpContext(
+    [in] UINT index,
+    [in] DWORD dwHelpContext);
+
+  HRESULT SetVarHelpContext(
+    [in] UINT index,
+    [in] DWORD dwHelpContext);
+
+  HRESULT SetMops(
+    [in] UINT index,
+    [in] BSTR bstrMops);
+
+  HRESULT SetTypeIdldesc(
+    [in] IDLDESC * pIdlDesc);
+
+  HRESULT LayOut();
+}
+
+[
+  local,
+  object,
+  uuid(0002040E-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ICreateTypeInfo2 : ICreateTypeInfo
+{
+  typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2;
+
+  HRESULT DeleteFuncDesc(
+    [in] UINT index);
+
+  HRESULT DeleteFuncDescByMemId(
+    [in] MEMBERID memid,
+    [in] INVOKEKIND invKind);
+
+  HRESULT DeleteVarDesc(
+    [in] UINT index);
+
+  HRESULT DeleteVarDescByMemId(
+    [in] MEMBERID memid);
+
+  HRESULT DeleteImplType(
+    [in] UINT index);
+
+  HRESULT SetCustData(
+    [in] REFGUID guid,
+    [in] VARIANT *pVarVal);
+
+  HRESULT SetFuncCustData( 
+    [in] UINT index, 
+    [in] REFGUID guid, 
+    [in] VARIANT *pVarVal);
+  
+  HRESULT SetParamCustData( 
+    [in] UINT indexFunc, 
+    [in] UINT indexParam, 
+    [in] REFGUID guid, 
+    [in] VARIANT *pVarVal);
+
+  HRESULT SetVarCustData( 
+    [in] UINT index, 
+    [in] REFGUID guid, 
+    [in] VARIANT *pVarVal);
+
+  HRESULT SetImplTypeCustData( 
+    [in] UINT index, 
+    [in] REFGUID guid, 
+    [in] VARIANT *pVarVal);
+
+  HRESULT SetHelpStringContext(
+    [in] ULONG dwHelpStringContext);
+
+  HRESULT SetFuncHelpStringContext(
+    [in] UINT index,
+    [in] ULONG dwHelpStringContext);
+
+  HRESULT SetVarHelpStringContext(
+    [in] UINT index,
+    [in] ULONG dwHelpStringContext);
+
+  HRESULT Invalidate();
+
+  HRESULT SetName(
+    [in] LPOLESTR szName);
+}
+
+[
+  local,
+  object,
+  uuid(00020406-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ICreateTypeLib : IUnknown
+{
+  typedef [unique] ICreateTypeLib *LPCREATETYPELIB;
+
+  HRESULT CreateTypeInfo(
+    [in] LPOLESTR szName,
+    [in] TYPEKIND tkind,
+    [out] ICreateTypeInfo **ppCTInfo);
+
+  HRESULT SetName(
+    [in] LPOLESTR szName);
+
+  HRESULT SetVersion(
+    [in] WORD wMajorVerNum,
+    [in] WORD wMinorVerNum);
+
+  HRESULT SetGuid(
+    [in] REFGUID guid);
+
+  HRESULT SetDocString(
+    [in] LPOLESTR szDoc);
+
+  HRESULT SetHelpFileName(
+    [in] LPOLESTR szHelpFileName);
+
+  HRESULT SetHelpContext(
+    [in] DWORD dwHelpContext);
+
+  HRESULT SetLcid(
+    [in] LCID lcid);
+
+  HRESULT SetLibFlags(
+    [in] UINT uLibFlags);
+
+  HRESULT SaveAllChanges();
+}
+
+[
+  local,
+  object,
+  uuid(0002040F-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ICreateTypeLib2 : ICreateTypeLib
+{
+  typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2;
+
+  HRESULT DeleteTypeInfo(
+    [in] LPOLESTR szName);
+
+  HRESULT SetCustData(
+    [in] REFGUID guid,
+    [in] VARIANT *pVarVal);
+
+  HRESULT SetHelpStringContext(
+    [in] ULONG dwHelpStringContext);
+
+  HRESULT SetHelpStringDll(
+    [in] LPOLESTR szFileName);
+}
+
+
+/*****************************************************************************
+ * IErrorLog interface
+ */
+[
+  object,
+  uuid(3127ca40-446e-11ce-8135-00aa004bb851),
+  pointer_default(unique)
+]
+interface IErrorLog : IUnknown
+{
+  typedef IErrorLog *LPERRORLOG;
+
+  HRESULT AddError(
+    [in] LPCOLESTR pszPropName,
+    [in] EXCEPINFO *pExcepInfo);
+}
+
+
+/*****************************************************************************
+ * IPropertyBag interface
+ */
+[
+  object,
+  uuid(55272a00-42cb-11ce-8135-00aa004bb851),
+  pointer_default(unique)
+]
+interface IPropertyBag : IUnknown
+{
+  typedef IPropertyBag *LPPROPERTYBAG;
+
+  [local]
+  HRESULT Read(
+    [in] LPCOLESTR pszPropName,
+    [in, out] VARIANT *pVar,
+    [in] IErrorLog *pErrorLog);
+
+  [call_as(Read)]
+  HRESULT RemoteRead(
+    [in] LPCOLESTR pszPropName,
+    [out] VARIANT *pVar,
+    [in] IErrorLog *pErrorLog,
+    [in] DWORD varType,
+    [in] IUnknown *pUnkObj);
+
+  HRESULT Write(
+    [in] LPCOLESTR pszPropName,
+    [in] VARIANT *pVar);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h
new file mode 100644
index 0000000..ac6e9fe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h
@@ -0,0 +1,511 @@
+/*
+ * Copyright (C) 1998-1999 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef _OBJBASE_H_
+#define _OBJBASE_H_
+
+/*****************************************************************************
+ * Macros to define a COM interface
+ */
+/*
+ * The goal of the following set of definitions is to provide a way to use the same
+ * header file definitions to provide both a C interface and a C++ object oriented
+ * interface to COM interfaces. The type of interface is selected automatically
+ * depending on the language but it is always possible to get the C interface in C++
+ * by defining CINTERFACE.
+ *
+ * It is based on the following assumptions:
+ *  - all COM interfaces derive from IUnknown, this should not be a problem.
+ *  - the header file only defines the interface, the actual fields are defined
+ *    separately in the C file implementing the interface.
+ *
+ * The natural approach to this problem would be to make sure we get a C++ class and
+ * virtual methods in C++ and a structure with a table of pointer to functions in C.
+ * Unfortunately the layout of the virtual table is compiler specific, the layout of
+ * g++ virtual tables is not the same as that of an egcs virtual table which is not the
+ * same as that generated by Visual C++. There are workarounds to make the virtual tables
+ * compatible via padding but unfortunately the one which is imposed to the WINE emulator
+ * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all.
+ *
+ * So the solution I finally adopted does not use virtual tables. Instead I use inline
+ * non virtual methods that dereference the method pointer themselves and perform the call.
+ *
+ * Let's take Direct3D as an example:
+ *
+ *    #define INTERFACE IDirect3D
+ *    DECLARE_INTERFACE_(IDirect3D,IUnknown)
+ *    {
+ *        // *** IUnknown methods *** //
+ *        STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID, void**) PURE;
+ *        STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ *        STDMETHOD_(ULONG,Release)(THIS) PURE;
+ *        // *** IDirect3D methods *** //
+ *        STDMETHOD(Initialize)(THIS_ REFIID) PURE;
+ *        STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE;
+ *        STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT *, IUnknown *) PURE;
+ *        STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL *, IUnknown *) PURE;
+ *        STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT *, IUnknown *) PURE;
+ *        STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE;
+ *    };
+ *    #undef INTERFACE
+ *
+ *    #ifdef COBJMACROS
+ *    // *** IUnknown methods *** //
+ *    #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+ *    #define IDirect3D_AddRef(p)             (p)->lpVtbl->AddRef(p)
+ *    #define IDirect3D_Release(p)            (p)->lpVtbl->Release(p)
+ *    // *** IDirect3D methods *** //
+ *    #define IDirect3D_Initialize(p,a)       (p)->lpVtbl->Initialize(p,a)
+ *    #define IDirect3D_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevice(p,a,b)
+ *    #define IDirect3D_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)
+ *    #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+ *    #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+ *    #define IDirect3D_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)
+ *    #endif
+ *
+ * Comments:
+ *  - The INTERFACE macro is used in the STDMETHOD macros to define the type of the 'this'
+ *    pointer. Defining this macro here saves us the trouble of having to repeat the interface
+ *    name everywhere. Note however that because of the way macros work, a macro like STDMETHOD
+ *    cannot use 'INTERFACE##_VTABLE' because this would give 'INTERFACE_VTABLE' and not
+ *    'IDirect3D_VTABLE'.
+ *  - The DECLARE_INTERFACE declares all the structures necessary for the interface. We have to
+ *    explicitly use the interface name for macro expansion reasons again. It defines the list of
+ *    methods that are inheritable from this interface. It must be written manually (rather than
+ *    using a macro to generate the equivalent code) to avoid macro recursion (which compilers
+ *    don't like). It must start with the methods definition of the parent interface so that
+ *    method inheritance works properly.
+ *  - The 'undef INTERFACE' is here to remind you that using INTERFACE in the following macros
+ *    will not work.
+ *  - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access
+ *    to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate
+ *    the inherited method definitions there. This time I could have used a trick to use only one
+ *    macro whatever the number of parameters but I preferred to have it work the same way as above.
+ *  - You probably have noticed that we don't define the fields we need to actually implement this
+ *    interface: reference count, pointer to other resources and miscellaneous fields. That's
+ *    because these interfaces are just that: interfaces. They may be implemented more than once, in
+ *    different contexts and sometimes not even in Wine. Thus it would not make sense to impose
+ *    that the interface contains some specific fields.
+ *
+ *
+ * In C this gives:
+ *    typedef struct IDirect3DVtbl IDirect3DVtbl;
+ *    struct IDirect3D {
+ *        IDirect3DVtbl* lpVtbl;
+ *    };
+ *    struct IDirect3DVtbl {
+ *        HRESULT (*QueryInterface)(IDirect3D* me, REFIID riid, LPVOID* ppvObj);
+ *        ULONG (*AddRef)(IDirect3D* me);
+ *        ULONG (*Release)(IDirect3D* me);
+ *        HRESULT (*Initialize)(IDirect3D* me, REFIID a);
+ *        HRESULT (*EnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);
+ *        HRESULT (*CreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);
+ *        HRESULT (*CreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);
+ *        HRESULT (*CreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);
+ *        HRESULT (*FindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);
+ *    };
+ *
+ *    #ifdef COBJMACROS
+ *    // *** IUnknown methods *** //
+ *    #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+ *    #define IDirect3D_AddRef(p)             (p)->lpVtbl->AddRef(p)
+ *    #define IDirect3D_Release(p)            (p)->lpVtbl->Release(p)
+ *    // *** IDirect3D methods *** //
+ *    #define IDirect3D_Initialize(p,a)       (p)->lpVtbl->Initialize(p,a)
+ *    #define IDirect3D_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevice(p,a,b)
+ *    #define IDirect3D_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)
+ *    #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+ *    #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+ *    #define IDirect3D_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)
+ *    #endif
+ *
+ * Comments:
+ *  - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing
+ *    the user needs to know to use the interface. Of course the structure we will define to
+ *    implement this interface will have more fields but the first one will match this pointer.
+ *  - The code generated by DECLARE_INTERFACE defines both the structure representing the interface and
+ *    the structure for the jump table.
+ *  - Each method is declared as a pointer to function field in the jump table. The implementation
+ *    will fill this jump table with appropriate values, probably using a static variable, and
+ *    initialize the lpVtbl field to point to this variable.
+ *  - The IDirect3D_Xxx macros then just derefence the lpVtbl pointer and use the function pointer
+ *    corresponding to the macro name. This emulates the behavior of a virtual table and should be
+ *    just as fast.
+ *  - This C code should be quite compatible with the Windows headers both for code that uses COM
+ *    interfaces and for code implementing a COM interface.
+ *
+ *
+ * And in C++ (with gcc's g++):
+ *
+ *    typedef struct IDirect3D: public IUnknown {
+ *        virtual HRESULT Initialize(REFIID a) = 0;
+ *        virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b) = 0;
+ *        virtual HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b) = 0;
+ *        virtual HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b) = 0;
+ *        virtual HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b) = 0;
+ *        virtual HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b) = 0;
+ *    };
+ *
+ * Comments:
+ *  - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions.
+ *  - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE
+ *    macro is defined in which case we would not be here.
+ */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+/* C++ interface */
+
+#define STDMETHOD(method)        virtual HRESULT STDMETHODCALLTYPE method
+#define STDMETHOD_(type,method)  virtual type STDMETHODCALLTYPE method
+#define STDMETHODV(method)       virtual HRESULT STDMETHODVCALLTYPE method
+#define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method
+
+#define PURE   = 0
+#define THIS_
+#define THIS   void
+
+#define interface struct
+#define DECLARE_INTERFACE(iface)        interface DECLSPEC_NOVTABLE iface
+#define DECLARE_INTERFACE_(iface,ibase) interface DECLSPEC_NOVTABLE iface : public ibase
+#define DECLARE_INTERFACE_IID_(iface, ibase, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public ibase
+
+#define BEGIN_INTERFACE
+#define END_INTERFACE
+
+#else  /* __cplusplus && !CINTERFACE */
+
+/* C interface */
+
+#define STDMETHOD(method)        HRESULT (STDMETHODCALLTYPE *method)
+#define STDMETHOD_(type,method)  type (STDMETHODCALLTYPE *method)
+#define STDMETHODV(method)       HRESULT (STDMETHODVCALLTYPE *method)
+#define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE *method)
+
+#define PURE
+#define THIS_ INTERFACE *This,
+#define THIS  INTERFACE *This
+
+#define interface struct
+
+#ifdef __WINESRC__
+#define CONST_VTABLE
+#endif
+
+#ifdef CONST_VTABLE
+#undef CONST_VTBL
+#define CONST_VTBL const
+#define DECLARE_INTERFACE(iface) \
+         typedef interface iface { const struct iface##Vtbl *lpVtbl; } iface; \
+         typedef struct iface##Vtbl iface##Vtbl; \
+         struct iface##Vtbl
+#else
+#undef CONST_VTBL
+#define CONST_VTBL
+#define DECLARE_INTERFACE(iface) \
+         typedef interface iface { struct iface##Vtbl *lpVtbl; } iface; \
+         typedef struct iface##Vtbl iface##Vtbl; \
+         struct iface##Vtbl
+#endif
+#define DECLARE_INTERFACE_(iface,ibase) DECLARE_INTERFACE(iface)
+#define DECLARE_INTERFACE_IID_(iface, ibase, iid) DECLARE_INTERFACE_(iface, ibase)
+
+#define BEGIN_INTERFACE
+#define END_INTERFACE
+
+#endif  /* __cplusplus && !CINTERFACE */
+
+#ifndef __IRpcStubBuffer_FWD_DEFINED__
+#define __IRpcStubBuffer_FWD_DEFINED__
+typedef interface IRpcStubBuffer IRpcStubBuffer;
+#endif
+#ifndef __IRpcChannelBuffer_FWD_DEFINED__
+#define __IRpcChannelBuffer_FWD_DEFINED__
+typedef interface IRpcChannelBuffer IRpcChannelBuffer;
+#endif
+
+#ifndef RC_INVOKED
+/* For compatibility only, at least for now */
+#include <stdlib.h>
+#endif
+
+#include <wtypes.h>
+#include <unknwn.h>
+#include <objidl.h>
+
+#include <guiddef.h>
+#ifndef INITGUID
+#include <cguid.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NONAMELESSSTRUCT
+#define LISet32(li, v)   ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v))
+#define ULISet32(li, v)  ((li).HighPart = 0, (li).LowPart = (v))
+#else
+#define LISet32(li, v)   ((li).u.HighPart = (v) < 0 ? -1 : 0, (li).u.LowPart = (v))
+#define ULISet32(li, v)  ((li).u.HighPart = 0, (li).u.LowPart = (v))
+#endif
+
+/*****************************************************************************
+ *	Standard API
+ */
+DWORD WINAPI CoBuildVersion(void);
+
+typedef enum tagCOINIT
+{
+    COINIT_APARTMENTTHREADED  = 0x2, /* Apartment model */
+    COINIT_MULTITHREADED      = 0x0, /* OLE calls objects on any thread */
+    COINIT_DISABLE_OLE1DDE    = 0x4, /* Don't use DDE for Ole1 support */
+    COINIT_SPEED_OVER_MEMORY  = 0x8  /* Trade memory for speed */
+} COINIT;
+
+HRESULT WINAPI CoInitialize(LPVOID lpReserved);
+HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit);
+void WINAPI CoUninitialize(void);
+DWORD WINAPI CoGetCurrentProcess(void);
+
+HINSTANCE WINAPI CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree);
+void WINAPI CoFreeAllLibraries(void);
+void WINAPI CoFreeLibrary(HINSTANCE hLibrary);
+void WINAPI CoFreeUnusedLibraries(void);
+void WINAPI CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD dwReserved);
+
+HRESULT WINAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv);
+HRESULT WINAPI CoCreateInstanceEx(REFCLSID      rclsid,
+				  LPUNKNOWN     pUnkOuter,
+				  DWORD         dwClsContext,
+				  COSERVERINFO* pServerInfo,
+				  ULONG         cmq,
+				  MULTI_QI*     pResults);
+
+HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults);
+HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults);
+
+HRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC* lpMalloc);
+LPVOID WINAPI CoTaskMemAlloc(ULONG size) __WINE_ALLOC_SIZE(1);
+void WINAPI CoTaskMemFree(LPVOID ptr);
+LPVOID WINAPI CoTaskMemRealloc(LPVOID ptr, ULONG size);
+
+HRESULT WINAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy);
+HRESULT WINAPI CoRevokeMallocSpy(void);
+
+HRESULT WINAPI CoGetContextToken( ULONG_PTR *token );
+
+/* class registration flags; passed to CoRegisterClassObject */
+typedef enum tagREGCLS
+{
+    REGCLS_SINGLEUSE = 0,
+    REGCLS_MULTIPLEUSE = 1,
+    REGCLS_MULTI_SEPARATE = 2,
+    REGCLS_SUSPENDED = 4,
+    REGCLS_SURROGATE = 8
+} REGCLS;
+
+HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv);
+HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
+HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister);
+HRESULT WINAPI CoGetPSClsid(REFIID riid,CLSID *pclsid);
+HRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid);
+HRESULT WINAPI CoRegisterSurrogate(LPSURROGATE pSurrogate);
+HRESULT WINAPI CoSuspendClassObjects(void);
+HRESULT WINAPI CoResumeClassObjects(void);
+ULONG WINAPI CoAddRefServerProcess(void);
+ULONG WINAPI CoReleaseServerProcess(void);
+
+/* marshalling */
+HRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal);
+HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv);
+HRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
+HRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal);
+HRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);
+HRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
+HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm);
+HRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm);
+HRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved);
+HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult);
+HRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv);
+HRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases);
+BOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);
+
+/* security */
+HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3);
+HRESULT WINAPI CoGetCallContext(REFIID riid, void** ppInterface);
+HRESULT WINAPI CoSwitchCallContext(IUnknown *pContext, IUnknown **ppOldContext);
+HRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc);
+
+HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilities);
+HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
+HRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy);
+
+HRESULT WINAPI CoImpersonateClient(void);
+HRESULT WINAPI CoQueryClientBlanket(DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTHZ_HANDLE* pPrivs, DWORD* pCapabilities);
+HRESULT WINAPI CoRevertToSelf(void);
+
+/* misc */
+HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew);
+HRESULT WINAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew);
+HRESULT WINAPI CoAllowSetForegroundWindow(IUnknown *pUnk, LPVOID lpvReserved);
+HRESULT WINAPI CoGetObjectContext(REFIID riid, LPVOID *ppv);
+
+HRESULT WINAPI CoCreateGuid(GUID* pguid);
+BOOL WINAPI CoIsOle1Class(REFCLSID rclsid);
+
+BOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);
+BOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);
+HRESULT WINAPI CoFileTimeNow(FILETIME* lpFileTime);
+HRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
+HRESULT WINAPI CoRegisterChannelHook(REFGUID ExtensionGuid, IChannelHook *pChannelHook);
+
+typedef enum tagCOWAIT_FLAGS
+{
+    COWAIT_WAITALL   = 0x00000001,
+    COWAIT_ALERTABLE = 0x00000002
+} COWAIT_FLAGS;
+
+HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags,DWORD dwTimeout,ULONG cHandles,LPHANDLE pHandles,LPDWORD lpdwindex);
+
+/*****************************************************************************
+ *	GUID API
+ */
+HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*);
+HRESULT WINAPI CLSIDFromString(LPCOLESTR, LPCLSID);
+HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid);
+HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID);
+
+INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax);
+
+/*****************************************************************************
+ *	COM Server dll - exports
+ */
+HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv) DECLSPEC_HIDDEN;
+HRESULT WINAPI DllCanUnloadNow(void) DECLSPEC_HIDDEN;
+
+/* shouldn't be here, but is nice for type checking */
+#ifdef __WINESRC__
+HRESULT WINAPI DllRegisterServer(void) DECLSPEC_HIDDEN;
+HRESULT WINAPI DllUnregisterServer(void) DECLSPEC_HIDDEN;
+#endif
+
+
+/*****************************************************************************
+ *	Data Object
+ */
+HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);
+HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID iid, LPVOID* ppv);
+
+/*****************************************************************************
+ *	Moniker API
+ */
+HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID* ppvResult);
+HRESULT WINAPI CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, void **ppv);
+HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk);
+HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC* ppbc);
+HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, LPMONIKER* ppmk);
+HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER* ppmk);
+HRESULT WINAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, LPMONIKER* ppmkComposite);
+HRESULT WINAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR  lpszItem, LPMONIKER* ppmk);
+HRESULT WINAPI CreateObjrefMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);
+HRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);
+HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid);
+HRESULT WINAPI GetRunningObjectTable(DWORD reserved, LPRUNNINGOBJECTTABLE *pprot);
+HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szUserName, ULONG * pchEaten, LPMONIKER * ppmk);
+HRESULT WINAPI MonikerCommonPrefixWith(IMoniker* pmkThis,IMoniker* pmkOther,IMoniker** ppmkCommon);
+HRESULT WINAPI MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER * ppmkRelPath, BOOL dwReserved);
+
+/*****************************************************************************
+ *	Storage API
+ */
+#define STGM_DIRECT		0x00000000
+#define STGM_TRANSACTED		0x00010000
+#define STGM_SIMPLE		0x08000000
+#define STGM_READ		0x00000000
+#define STGM_WRITE		0x00000001
+#define STGM_READWRITE		0x00000002
+#define STGM_SHARE_DENY_NONE	0x00000040
+#define STGM_SHARE_DENY_READ	0x00000030
+#define STGM_SHARE_DENY_WRITE	0x00000020
+#define STGM_SHARE_EXCLUSIVE	0x00000010
+#define STGM_PRIORITY		0x00040000
+#define STGM_DELETEONRELEASE	0x04000000
+#define STGM_CREATE		0x00001000
+#define STGM_CONVERT		0x00020000
+#define STGM_FAILIFTHERE	0x00000000
+#define STGM_NOSCRATCH		0x00100000
+#define STGM_NOSNAPSHOT		0x00200000
+#define STGM_DIRECT_SWMR	0x00400000
+
+#define STGFMT_STORAGE		0
+#define STGFMT_FILE 		3
+#define STGFMT_ANY 		4
+#define STGFMT_DOCFILE 	5
+
+typedef struct tagSTGOPTIONS
+{
+    USHORT usVersion;
+    USHORT reserved;
+    ULONG ulSectorSize;
+    const WCHAR* pwcsTemplateFile;
+} STGOPTIONS;
+
+HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen);
+HRESULT WINAPI StgCreateStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**);
+HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn);
+HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt);
+HRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen);
+HRESULT WINAPI StgOpenStorageEx(const WCHAR* pwcwName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions, void *reserved, REFIID riid, void **ppObjectOpen);
+
+HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode, DWORD reserved, IStorage** ppstgOpen);
+HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen);
+HRESULT WINAPI StgSetTimes( OLECHAR const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef __WINESRC__
+# include <urlmon.h>
+#endif
+#include <propidl.h>
+
+#ifndef __WINESRC__
+
+#define FARSTRUCT
+#define HUGEP
+
+#define WINOLEAPI        STDAPI
+#define WINOLEAPI_(type) STDAPI_(type)
+
+#endif /* __WINESRC__ */
+
+#endif /* _OBJBASE_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl
new file mode 100644
index 0000000..7d2b3eb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2011 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+    uuid(92ca9dcd-5622-4bba-a805-5e9f541bd8c9),
+    object,
+    pointer_default(unique)
+]
+interface IObjectArray : IUnknown
+{
+    HRESULT GetCount([out] UINT *pcObjects);
+    HRESULT GetAt(
+        [in] UINT uiIndex,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+}
+
+[
+    uuid(5632b1a4-e38a-400a-928a-d4cd63230295),
+    object,
+    pointer_default(unique)
+]
+interface IObjectCollection : IObjectArray
+{
+    HRESULT AddObject([in] IUnknown *punk);
+    HRESULT AddFromArray([in] IObjectArray *poaSource);
+    HRESULT RemoveObjectAt([in] UINT uiIndex);
+    HRESULT Clear();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h
new file mode 100644
index 0000000..ec9cdf6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h
@@ -0,0 +1,10438 @@
+/*** Autogenerated by WIDL 1.1.36 from objidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_OBJIDL_H
+#define __WIDL_OBJIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IMarshal_FWD_DEFINED__
+#define __IMarshal_FWD_DEFINED__
+typedef interface IMarshal IMarshal;
+#endif
+
+#ifndef __IMarshal2_FWD_DEFINED__
+#define __IMarshal2_FWD_DEFINED__
+typedef interface IMarshal2 IMarshal2;
+#endif
+
+#ifndef __IStdMarshalInfo_FWD_DEFINED__
+#define __IStdMarshalInfo_FWD_DEFINED__
+typedef interface IStdMarshalInfo IStdMarshalInfo;
+#endif
+
+#ifndef __IExternalConnection_FWD_DEFINED__
+#define __IExternalConnection_FWD_DEFINED__
+typedef interface IExternalConnection IExternalConnection;
+#endif
+
+#ifndef __IMultiQI_FWD_DEFINED__
+#define __IMultiQI_FWD_DEFINED__
+typedef interface IMultiQI IMultiQI;
+#endif
+
+#ifndef __IMalloc_FWD_DEFINED__
+#define __IMalloc_FWD_DEFINED__
+typedef interface IMalloc IMalloc;
+#endif
+
+#ifndef __IMallocSpy_FWD_DEFINED__
+#define __IMallocSpy_FWD_DEFINED__
+typedef interface IMallocSpy IMallocSpy;
+#endif
+
+#ifndef __IInternalUnknown_FWD_DEFINED__
+#define __IInternalUnknown_FWD_DEFINED__
+typedef interface IInternalUnknown IInternalUnknown;
+#endif
+
+#ifndef __IEnumUnknown_FWD_DEFINED__
+#define __IEnumUnknown_FWD_DEFINED__
+typedef interface IEnumUnknown IEnumUnknown;
+#endif
+
+#ifndef __ISurrogate_FWD_DEFINED__
+#define __ISurrogate_FWD_DEFINED__
+typedef interface ISurrogate ISurrogate;
+#endif
+
+#ifndef __IGlobalInterfaceTable_FWD_DEFINED__
+#define __IGlobalInterfaceTable_FWD_DEFINED__
+typedef interface IGlobalInterfaceTable IGlobalInterfaceTable;
+#endif
+
+#ifndef __IBindCtx_FWD_DEFINED__
+#define __IBindCtx_FWD_DEFINED__
+typedef interface IBindCtx IBindCtx;
+#endif
+
+#ifndef __IEnumMoniker_FWD_DEFINED__
+#define __IEnumMoniker_FWD_DEFINED__
+typedef interface IEnumMoniker IEnumMoniker;
+#endif
+
+#ifndef __IRunnableObject_FWD_DEFINED__
+#define __IRunnableObject_FWD_DEFINED__
+typedef interface IRunnableObject IRunnableObject;
+#endif
+
+#ifndef __IRunningObjectTable_FWD_DEFINED__
+#define __IRunningObjectTable_FWD_DEFINED__
+typedef interface IRunningObjectTable IRunningObjectTable;
+#endif
+
+#ifndef __IPersist_FWD_DEFINED__
+#define __IPersist_FWD_DEFINED__
+typedef interface IPersist IPersist;
+#endif
+
+#ifndef __IPersistStream_FWD_DEFINED__
+#define __IPersistStream_FWD_DEFINED__
+typedef interface IPersistStream IPersistStream;
+#endif
+
+#ifndef __IMoniker_FWD_DEFINED__
+#define __IMoniker_FWD_DEFINED__
+typedef interface IMoniker IMoniker;
+#endif
+
+#ifndef __IROTData_FWD_DEFINED__
+#define __IROTData_FWD_DEFINED__
+typedef interface IROTData IROTData;
+#endif
+
+#ifndef __IEnumString_FWD_DEFINED__
+#define __IEnumString_FWD_DEFINED__
+typedef interface IEnumString IEnumString;
+#endif
+
+#ifndef __IClassActivator_FWD_DEFINED__
+#define __IClassActivator_FWD_DEFINED__
+typedef interface IClassActivator IClassActivator;
+#endif
+
+#ifndef __ISequentialStream_FWD_DEFINED__
+#define __ISequentialStream_FWD_DEFINED__
+typedef interface ISequentialStream ISequentialStream;
+#endif
+
+#ifndef __IStream_FWD_DEFINED__
+#define __IStream_FWD_DEFINED__
+typedef interface IStream IStream;
+#endif
+
+#ifndef __IEnumSTATSTG_FWD_DEFINED__
+#define __IEnumSTATSTG_FWD_DEFINED__
+typedef interface IEnumSTATSTG IEnumSTATSTG;
+#endif
+
+#ifndef __IStorage_FWD_DEFINED__
+#define __IStorage_FWD_DEFINED__
+typedef interface IStorage IStorage;
+#endif
+
+#ifndef __IPersistFile_FWD_DEFINED__
+#define __IPersistFile_FWD_DEFINED__
+typedef interface IPersistFile IPersistFile;
+#endif
+
+#ifndef __IPersistStorage_FWD_DEFINED__
+#define __IPersistStorage_FWD_DEFINED__
+typedef interface IPersistStorage IPersistStorage;
+#endif
+
+#ifndef __IRootStorage_FWD_DEFINED__
+#define __IRootStorage_FWD_DEFINED__
+typedef interface IRootStorage IRootStorage;
+#endif
+
+#ifndef __ILockBytes_FWD_DEFINED__
+#define __ILockBytes_FWD_DEFINED__
+typedef interface ILockBytes ILockBytes;
+#endif
+
+#ifndef __IFillLockBytes_FWD_DEFINED__
+#define __IFillLockBytes_FWD_DEFINED__
+typedef interface IFillLockBytes IFillLockBytes;
+#endif
+
+#ifndef __IProgressNotify_FWD_DEFINED__
+#define __IProgressNotify_FWD_DEFINED__
+typedef interface IProgressNotify IProgressNotify;
+#endif
+
+#ifndef __ILayoutStorage_FWD_DEFINED__
+#define __ILayoutStorage_FWD_DEFINED__
+typedef interface ILayoutStorage ILayoutStorage;
+#endif
+
+#ifndef __IBlockingLock_FWD_DEFINED__
+#define __IBlockingLock_FWD_DEFINED__
+typedef interface IBlockingLock IBlockingLock;
+#endif
+
+#ifndef __ITimeAndNoticeControl_FWD_DEFINED__
+#define __ITimeAndNoticeControl_FWD_DEFINED__
+typedef interface ITimeAndNoticeControl ITimeAndNoticeControl;
+#endif
+
+#ifndef __IOplockStorage_FWD_DEFINED__
+#define __IOplockStorage_FWD_DEFINED__
+typedef interface IOplockStorage IOplockStorage;
+#endif
+
+#ifndef __IEnumFORMATETC_FWD_DEFINED__
+#define __IEnumFORMATETC_FWD_DEFINED__
+typedef interface IEnumFORMATETC IEnumFORMATETC;
+#endif
+
+#ifndef __IEnumSTATDATA_FWD_DEFINED__
+#define __IEnumSTATDATA_FWD_DEFINED__
+typedef interface IEnumSTATDATA IEnumSTATDATA;
+#endif
+
+#ifndef __IAdviseSink_FWD_DEFINED__
+#define __IAdviseSink_FWD_DEFINED__
+typedef interface IAdviseSink IAdviseSink;
+#endif
+
+#ifndef __IAdviseSink2_FWD_DEFINED__
+#define __IAdviseSink2_FWD_DEFINED__
+typedef interface IAdviseSink2 IAdviseSink2;
+#endif
+
+#ifndef __IDataObject_FWD_DEFINED__
+#define __IDataObject_FWD_DEFINED__
+typedef interface IDataObject IDataObject;
+#endif
+
+#ifndef __IDataAdviseHolder_FWD_DEFINED__
+#define __IDataAdviseHolder_FWD_DEFINED__
+typedef interface IDataAdviseHolder IDataAdviseHolder;
+#endif
+
+#ifndef __IMessageFilter_FWD_DEFINED__
+#define __IMessageFilter_FWD_DEFINED__
+typedef interface IMessageFilter IMessageFilter;
+#endif
+
+#ifndef __IRpcChannelBuffer_FWD_DEFINED__
+#define __IRpcChannelBuffer_FWD_DEFINED__
+typedef interface IRpcChannelBuffer IRpcChannelBuffer;
+#endif
+
+#ifndef __IRpcChannelBuffer2_FWD_DEFINED__
+#define __IRpcChannelBuffer2_FWD_DEFINED__
+typedef interface IRpcChannelBuffer2 IRpcChannelBuffer2;
+#endif
+
+#ifndef __IRpcChannelBuffer3_FWD_DEFINED__
+#define __IRpcChannelBuffer3_FWD_DEFINED__
+typedef interface IRpcChannelBuffer3 IRpcChannelBuffer3;
+#endif
+
+#ifndef __IAsyncRpcChannelBuffer_FWD_DEFINED__
+#define __IAsyncRpcChannelBuffer_FWD_DEFINED__
+typedef interface IAsyncRpcChannelBuffer IAsyncRpcChannelBuffer;
+#endif
+
+#ifndef __IRpcSyntaxNegotiate_FWD_DEFINED__
+#define __IRpcSyntaxNegotiate_FWD_DEFINED__
+typedef interface IRpcSyntaxNegotiate IRpcSyntaxNegotiate;
+#endif
+
+#ifndef __IRpcProxyBuffer_FWD_DEFINED__
+#define __IRpcProxyBuffer_FWD_DEFINED__
+typedef interface IRpcProxyBuffer IRpcProxyBuffer;
+#endif
+
+#ifndef __IRpcStubBuffer_FWD_DEFINED__
+#define __IRpcStubBuffer_FWD_DEFINED__
+typedef interface IRpcStubBuffer IRpcStubBuffer;
+#endif
+
+#ifndef __IPSFactoryBuffer_FWD_DEFINED__
+#define __IPSFactoryBuffer_FWD_DEFINED__
+typedef interface IPSFactoryBuffer IPSFactoryBuffer;
+#endif
+
+#ifndef __IChannelHook_FWD_DEFINED__
+#define __IChannelHook_FWD_DEFINED__
+typedef interface IChannelHook IChannelHook;
+#endif
+
+#ifndef __IClientSecurity_FWD_DEFINED__
+#define __IClientSecurity_FWD_DEFINED__
+typedef interface IClientSecurity IClientSecurity;
+#endif
+
+#ifndef __IServerSecurity_FWD_DEFINED__
+#define __IServerSecurity_FWD_DEFINED__
+typedef interface IServerSecurity IServerSecurity;
+#endif
+
+#ifndef __IAsyncSetup_FWD_DEFINED__
+#define __IAsyncSetup_FWD_DEFINED__
+typedef interface IAsyncSetup IAsyncSetup;
+#endif
+
+#ifndef __IDirectWriterLock_FWD_DEFINED__
+#define __IDirectWriterLock_FWD_DEFINED__
+typedef interface IDirectWriterLock IDirectWriterLock;
+#endif
+
+#ifndef __ISynchronize_FWD_DEFINED__
+#define __ISynchronize_FWD_DEFINED__
+typedef interface ISynchronize ISynchronize;
+#endif
+
+#ifndef __ISynchronizeHandle_FWD_DEFINED__
+#define __ISynchronizeHandle_FWD_DEFINED__
+typedef interface ISynchronizeHandle ISynchronizeHandle;
+#endif
+
+#ifndef __ISynchronizeEvent_FWD_DEFINED__
+#define __ISynchronizeEvent_FWD_DEFINED__
+typedef interface ISynchronizeEvent ISynchronizeEvent;
+#endif
+
+#ifndef __ISynchronizeContainer_FWD_DEFINED__
+#define __ISynchronizeContainer_FWD_DEFINED__
+typedef interface ISynchronizeContainer ISynchronizeContainer;
+#endif
+
+#ifndef __ISynchronizeMutex_FWD_DEFINED__
+#define __ISynchronizeMutex_FWD_DEFINED__
+typedef interface ISynchronizeMutex ISynchronizeMutex;
+#endif
+
+#ifndef __ICancelMethodCalls_FWD_DEFINED__
+#define __ICancelMethodCalls_FWD_DEFINED__
+typedef interface ICancelMethodCalls ICancelMethodCalls;
+#endif
+
+#ifndef __IAsyncManager_FWD_DEFINED__
+#define __IAsyncManager_FWD_DEFINED__
+typedef interface IAsyncManager IAsyncManager;
+#endif
+
+#ifndef __ICallFactory_FWD_DEFINED__
+#define __ICallFactory_FWD_DEFINED__
+typedef interface ICallFactory ICallFactory;
+#endif
+
+#ifndef __IRpcOptions_FWD_DEFINED__
+#define __IRpcOptions_FWD_DEFINED__
+typedef interface IRpcOptions IRpcOptions;
+#endif
+
+#ifndef __IRpcHelper_FWD_DEFINED__
+#define __IRpcHelper_FWD_DEFINED__
+typedef interface IRpcHelper IRpcHelper;
+#endif
+
+#ifndef __IReleaseMarshalBuffers_FWD_DEFINED__
+#define __IReleaseMarshalBuffers_FWD_DEFINED__
+typedef interface IReleaseMarshalBuffers IReleaseMarshalBuffers;
+#endif
+
+#ifndef __IWaitMultiple_FWD_DEFINED__
+#define __IWaitMultiple_FWD_DEFINED__
+typedef interface IWaitMultiple IWaitMultiple;
+#endif
+
+#ifndef __IUrlMon_FWD_DEFINED__
+#define __IUrlMon_FWD_DEFINED__
+typedef interface IUrlMon IUrlMon;
+#endif
+
+#ifndef __IForegroundTransfer_FWD_DEFINED__
+#define __IForegroundTransfer_FWD_DEFINED__
+typedef interface IForegroundTransfer IForegroundTransfer;
+#endif
+
+#ifndef __IAddrTrackingControl_FWD_DEFINED__
+#define __IAddrTrackingControl_FWD_DEFINED__
+typedef interface IAddrTrackingControl IAddrTrackingControl;
+#endif
+
+#ifndef __IAddrExclusionControl_FWD_DEFINED__
+#define __IAddrExclusionControl_FWD_DEFINED__
+typedef interface IAddrExclusionControl IAddrExclusionControl;
+#endif
+
+#ifndef __IComThreadingInfo_FWD_DEFINED__
+#define __IComThreadingInfo_FWD_DEFINED__
+typedef interface IComThreadingInfo IComThreadingInfo;
+#endif
+
+#ifndef __IProcessInitControl_FWD_DEFINED__
+#define __IProcessInitControl_FWD_DEFINED__
+typedef interface IProcessInitControl IProcessInitControl;
+#endif
+
+#ifndef __IInitializeSpy_FWD_DEFINED__
+#define __IInitializeSpy_FWD_DEFINED__
+typedef interface IInitializeSpy IInitializeSpy;
+#endif
+
+#ifndef __IThumbnailExtractor_FWD_DEFINED__
+#define __IThumbnailExtractor_FWD_DEFINED__
+typedef interface IThumbnailExtractor IThumbnailExtractor;
+#endif
+
+#ifndef __IEnumContextProps_FWD_DEFINED__
+#define __IEnumContextProps_FWD_DEFINED__
+typedef interface IEnumContextProps IEnumContextProps;
+#endif
+
+#ifndef __IContext_FWD_DEFINED__
+#define __IContext_FWD_DEFINED__
+typedef interface IContext IContext;
+#endif
+
+#ifndef __IObjContext_FWD_DEFINED__
+#define __IObjContext_FWD_DEFINED__
+typedef interface IObjContext IObjContext;
+#endif
+
+
+#ifndef __IStream_FWD_DEFINED__
+#define __IStream_FWD_DEFINED__
+typedef interface IStream IStream;
+#endif
+
+#ifndef __IEnumString_FWD_DEFINED__
+#define __IEnumString_FWD_DEFINED__
+typedef interface IEnumString IEnumString;
+#endif
+
+#ifndef __IRunningObjectTable_FWD_DEFINED__
+#define __IRunningObjectTable_FWD_DEFINED__
+typedef interface IRunningObjectTable IRunningObjectTable;
+#endif
+
+#ifndef __IMoniker_FWD_DEFINED__
+#define __IMoniker_FWD_DEFINED__
+typedef interface IMoniker IMoniker;
+#endif
+
+#ifndef __IAdviseSink_FWD_DEFINED__
+#define __IAdviseSink_FWD_DEFINED__
+typedef interface IAdviseSink IAdviseSink;
+#endif
+
+#ifndef __IAsyncManager_FWD_DEFINED__
+#define __IAsyncManager_FWD_DEFINED__
+typedef interface IAsyncManager IAsyncManager;
+#endif
+
+#ifndef __ISynchronize_FWD_DEFINED__
+#define __ISynchronize_FWD_DEFINED__
+typedef interface ISynchronize ISynchronize;
+#endif
+
+typedef struct _COSERVERINFO {
+    DWORD dwReserved1;
+    LPWSTR pwszName;
+    COAUTHINFO *pAuthInfo;
+    DWORD dwReserved2;
+} COSERVERINFO;
+/*****************************************************************************
+ * IMarshal interface
+ */
+#ifndef __IMarshal_INTERFACE_DEFINED__
+#define __IMarshal_INTERFACE_DEFINED__
+
+typedef IMarshal *LPMARSHAL;
+DEFINE_GUID(IID_IMarshal, 0x00000003, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMarshal : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetUnmarshalClass(
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags,
+        CLSID *pCid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMarshalSizeMax(
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags,
+        DWORD *pSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MarshalInterface(
+        IStream *pStm,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnmarshalInterface(
+        IStream *pStm,
+        REFIID riid,
+        void **ppv) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseMarshalData(
+        IStream *pStm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DisconnectObject(
+        DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IMarshalVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMarshal* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMarshal* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMarshal* This);
+
+    /*** IMarshal methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
+        IMarshal* This,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags,
+        CLSID *pCid);
+
+    HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
+        IMarshal* This,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags,
+        DWORD *pSize);
+
+    HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
+        IMarshal* This,
+        IStream *pStm,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags);
+
+    HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
+        IMarshal* This,
+        IStream *pStm,
+        REFIID riid,
+        void **ppv);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
+        IMarshal* This,
+        IStream *pStm);
+
+    HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
+        IMarshal* This,
+        DWORD dwReserved);
+
+    END_INTERFACE
+} IMarshalVtbl;
+interface IMarshal {
+    CONST_VTBL IMarshalVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMarshal_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMarshal_Release(This) (This)->lpVtbl->Release(This)
+/*** IMarshal methods ***/
+#define IMarshal_GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid) (This)->lpVtbl->GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid)
+#define IMarshal_GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize) (This)->lpVtbl->GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize)
+#define IMarshal_MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags) (This)->lpVtbl->MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags)
+#define IMarshal_UnmarshalInterface(This,pStm,riid,ppv) (This)->lpVtbl->UnmarshalInterface(This,pStm,riid,ppv)
+#define IMarshal_ReleaseMarshalData(This,pStm) (This)->lpVtbl->ReleaseMarshalData(This,pStm)
+#define IMarshal_DisconnectObject(This,dwReserved) (This)->lpVtbl->DisconnectObject(This,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMarshal_GetUnmarshalClass_Proxy(
+    IMarshal* This,
+    REFIID riid,
+    void *pv,
+    DWORD dwDestContext,
+    void *pvDestContext,
+    DWORD mshlflags,
+    CLSID *pCid);
+void __RPC_STUB IMarshal_GetUnmarshalClass_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_GetMarshalSizeMax_Proxy(
+    IMarshal* This,
+    REFIID riid,
+    void *pv,
+    DWORD dwDestContext,
+    void *pvDestContext,
+    DWORD mshlflags,
+    DWORD *pSize);
+void __RPC_STUB IMarshal_GetMarshalSizeMax_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_MarshalInterface_Proxy(
+    IMarshal* This,
+    IStream *pStm,
+    REFIID riid,
+    void *pv,
+    DWORD dwDestContext,
+    void *pvDestContext,
+    DWORD mshlflags);
+void __RPC_STUB IMarshal_MarshalInterface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_UnmarshalInterface_Proxy(
+    IMarshal* This,
+    IStream *pStm,
+    REFIID riid,
+    void **ppv);
+void __RPC_STUB IMarshal_UnmarshalInterface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_ReleaseMarshalData_Proxy(
+    IMarshal* This,
+    IStream *pStm);
+void __RPC_STUB IMarshal_ReleaseMarshalData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_DisconnectObject_Proxy(
+    IMarshal* This,
+    DWORD dwReserved);
+void __RPC_STUB IMarshal_DisconnectObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMarshal_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMarshal2 interface
+ */
+#ifndef __IMarshal2_INTERFACE_DEFINED__
+#define __IMarshal2_INTERFACE_DEFINED__
+
+typedef IMarshal2 *LPMARSHAL2;
+DEFINE_GUID(IID_IMarshal2, 0x000001cf, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMarshal2 : public IMarshal
+{
+};
+#else
+typedef struct IMarshal2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMarshal2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMarshal2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMarshal2* This);
+
+    /*** IMarshal methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
+        IMarshal2* This,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags,
+        CLSID *pCid);
+
+    HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
+        IMarshal2* This,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags,
+        DWORD *pSize);
+
+    HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
+        IMarshal2* This,
+        IStream *pStm,
+        REFIID riid,
+        void *pv,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        DWORD mshlflags);
+
+    HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
+        IMarshal2* This,
+        IStream *pStm,
+        REFIID riid,
+        void **ppv);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
+        IMarshal2* This,
+        IStream *pStm);
+
+    HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
+        IMarshal2* This,
+        DWORD dwReserved);
+
+    END_INTERFACE
+} IMarshal2Vtbl;
+interface IMarshal2 {
+    CONST_VTBL IMarshal2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMarshal2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMarshal2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMarshal2_Release(This) (This)->lpVtbl->Release(This)
+/*** IMarshal methods ***/
+#define IMarshal2_GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid) (This)->lpVtbl->GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid)
+#define IMarshal2_GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize) (This)->lpVtbl->GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize)
+#define IMarshal2_MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags) (This)->lpVtbl->MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags)
+#define IMarshal2_UnmarshalInterface(This,pStm,riid,ppv) (This)->lpVtbl->UnmarshalInterface(This,pStm,riid,ppv)
+#define IMarshal2_ReleaseMarshalData(This,pStm) (This)->lpVtbl->ReleaseMarshalData(This,pStm)
+#define IMarshal2_DisconnectObject(This,dwReserved) (This)->lpVtbl->DisconnectObject(This,dwReserved)
+#endif
+
+#endif
+
+
+#endif  /* __IMarshal2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStdMarshalInfo interface
+ */
+#ifndef __IStdMarshalInfo_INTERFACE_DEFINED__
+#define __IStdMarshalInfo_INTERFACE_DEFINED__
+
+typedef IStdMarshalInfo *LPSTDMARSHALINFO;
+DEFINE_GUID(IID_IStdMarshalInfo, 0x00000018, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IStdMarshalInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClassForHandler(
+        DWORD dwDestContext,
+        void *pvDestContext,
+        CLSID *pClsid) = 0;
+
+};
+#else
+typedef struct IStdMarshalInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IStdMarshalInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IStdMarshalInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IStdMarshalInfo* This);
+
+    /*** IStdMarshalInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassForHandler)(
+        IStdMarshalInfo* This,
+        DWORD dwDestContext,
+        void *pvDestContext,
+        CLSID *pClsid);
+
+    END_INTERFACE
+} IStdMarshalInfoVtbl;
+interface IStdMarshalInfo {
+    CONST_VTBL IStdMarshalInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IStdMarshalInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStdMarshalInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStdMarshalInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IStdMarshalInfo methods ***/
+#define IStdMarshalInfo_GetClassForHandler(This,dwDestContext,pvDestContext,pClsid) (This)->lpVtbl->GetClassForHandler(This,dwDestContext,pvDestContext,pClsid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IStdMarshalInfo_GetClassForHandler_Proxy(
+    IStdMarshalInfo* This,
+    DWORD dwDestContext,
+    void *pvDestContext,
+    CLSID *pClsid);
+void __RPC_STUB IStdMarshalInfo_GetClassForHandler_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IStdMarshalInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IExternalConnection interface
+ */
+#ifndef __IExternalConnection_INTERFACE_DEFINED__
+#define __IExternalConnection_INTERFACE_DEFINED__
+
+typedef IExternalConnection *LPEXTERNALCONNECTION;
+typedef enum tagEXTCONN {
+    EXTCONN_STRONG = 0x1,
+    EXTCONN_WEAK = 0x2,
+    EXTCONN_CALLABLE = 0x4
+} EXTCONN;
+DEFINE_GUID(IID_IExternalConnection, 0x00000019, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IExternalConnection : public IUnknown
+{
+    virtual DWORD STDMETHODCALLTYPE AddConnection(
+        DWORD extconn,
+        DWORD reserved) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE ReleaseConnection(
+        DWORD extconn,
+        DWORD reserved,
+        BOOL fLastReleaseCloses) = 0;
+
+};
+#else
+typedef struct IExternalConnectionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IExternalConnection* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IExternalConnection* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IExternalConnection* This);
+
+    /*** IExternalConnection methods ***/
+    DWORD (STDMETHODCALLTYPE *AddConnection)(
+        IExternalConnection* This,
+        DWORD extconn,
+        DWORD reserved);
+
+    DWORD (STDMETHODCALLTYPE *ReleaseConnection)(
+        IExternalConnection* This,
+        DWORD extconn,
+        DWORD reserved,
+        BOOL fLastReleaseCloses);
+
+    END_INTERFACE
+} IExternalConnectionVtbl;
+interface IExternalConnection {
+    CONST_VTBL IExternalConnectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IExternalConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IExternalConnection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IExternalConnection_Release(This) (This)->lpVtbl->Release(This)
+/*** IExternalConnection methods ***/
+#define IExternalConnection_AddConnection(This,extconn,reserved) (This)->lpVtbl->AddConnection(This,extconn,reserved)
+#define IExternalConnection_ReleaseConnection(This,extconn,reserved,fLastReleaseCloses) (This)->lpVtbl->ReleaseConnection(This,extconn,reserved,fLastReleaseCloses)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IExternalConnection_AddConnection_Proxy(
+    IExternalConnection* This,
+    DWORD extconn,
+    DWORD reserved);
+void __RPC_STUB IExternalConnection_AddConnection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IExternalConnection_ReleaseConnection_Proxy(
+    IExternalConnection* This,
+    DWORD extconn,
+    DWORD reserved,
+    BOOL fLastReleaseCloses);
+void __RPC_STUB IExternalConnection_ReleaseConnection_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IExternalConnection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMultiQI interface
+ */
+#ifndef __IMultiQI_INTERFACE_DEFINED__
+#define __IMultiQI_INTERFACE_DEFINED__
+
+typedef IMultiQI *LPMULTIQI;
+typedef struct tagMULTI_QI {
+    const IID *pIID;
+    IUnknown *pItf;
+    HRESULT hr;
+} MULTI_QI;
+DEFINE_GUID(IID_IMultiQI, 0x00000020, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMultiQI : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryMultipleInterfaces(
+        ULONG cMQIs,
+        MULTI_QI *pMQIs) = 0;
+
+};
+#else
+typedef struct IMultiQIVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMultiQI* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMultiQI* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMultiQI* This);
+
+    /*** IMultiQI methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryMultipleInterfaces)(
+        IMultiQI* This,
+        ULONG cMQIs,
+        MULTI_QI *pMQIs);
+
+    END_INTERFACE
+} IMultiQIVtbl;
+interface IMultiQI {
+    CONST_VTBL IMultiQIVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMultiQI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMultiQI_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMultiQI_Release(This) (This)->lpVtbl->Release(This)
+/*** IMultiQI methods ***/
+#define IMultiQI_QueryMultipleInterfaces(This,cMQIs,pMQIs) (This)->lpVtbl->QueryMultipleInterfaces(This,cMQIs,pMQIs)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMultiQI_QueryMultipleInterfaces_Proxy(
+    IMultiQI* This,
+    ULONG cMQIs,
+    MULTI_QI *pMQIs);
+void __RPC_STUB IMultiQI_QueryMultipleInterfaces_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMultiQI_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMalloc interface
+ */
+#ifndef __IMalloc_INTERFACE_DEFINED__
+#define __IMalloc_INTERFACE_DEFINED__
+
+typedef IMalloc *LPMALLOC;
+DEFINE_GUID(IID_IMalloc, 0x00000002, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMalloc : public IUnknown
+{
+    virtual LPVOID STDMETHODCALLTYPE Alloc(
+        ULONG cb) = 0;
+
+    virtual LPVOID STDMETHODCALLTYPE Realloc(
+        LPVOID pv,
+        ULONG cb) = 0;
+
+    virtual void STDMETHODCALLTYPE Free(
+        LPVOID pv) = 0;
+
+    virtual ULONG STDMETHODCALLTYPE GetSize(
+        LPVOID pv) = 0;
+
+    virtual int STDMETHODCALLTYPE DidAlloc(
+        LPVOID pv) = 0;
+
+    virtual void STDMETHODCALLTYPE HeapMinimize(
+        ) = 0;
+
+};
+#else
+typedef struct IMallocVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMalloc* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMalloc* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMalloc* This);
+
+    /*** IMalloc methods ***/
+    LPVOID (STDMETHODCALLTYPE *Alloc)(
+        IMalloc* This,
+        ULONG cb);
+
+    LPVOID (STDMETHODCALLTYPE *Realloc)(
+        IMalloc* This,
+        LPVOID pv,
+        ULONG cb);
+
+    void (STDMETHODCALLTYPE *Free)(
+        IMalloc* This,
+        LPVOID pv);
+
+    ULONG (STDMETHODCALLTYPE *GetSize)(
+        IMalloc* This,
+        LPVOID pv);
+
+    int (STDMETHODCALLTYPE *DidAlloc)(
+        IMalloc* This,
+        LPVOID pv);
+
+    void (STDMETHODCALLTYPE *HeapMinimize)(
+        IMalloc* This);
+
+    END_INTERFACE
+} IMallocVtbl;
+interface IMalloc {
+    CONST_VTBL IMallocVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMalloc_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMalloc_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMalloc_Release(This) (This)->lpVtbl->Release(This)
+/*** IMalloc methods ***/
+#define IMalloc_Alloc(This,cb) (This)->lpVtbl->Alloc(This,cb)
+#define IMalloc_Realloc(This,pv,cb) (This)->lpVtbl->Realloc(This,pv,cb)
+#define IMalloc_Free(This,pv) (This)->lpVtbl->Free(This,pv)
+#define IMalloc_GetSize(This,pv) (This)->lpVtbl->GetSize(This,pv)
+#define IMalloc_DidAlloc(This,pv) (This)->lpVtbl->DidAlloc(This,pv)
+#define IMalloc_HeapMinimize(This) (This)->lpVtbl->HeapMinimize(This)
+#endif
+
+#endif
+
+LPVOID STDMETHODCALLTYPE IMalloc_Alloc_Proxy(
+    IMalloc* This,
+    ULONG cb);
+void __RPC_STUB IMalloc_Alloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMalloc_Realloc_Proxy(
+    IMalloc* This,
+    LPVOID pv,
+    ULONG cb);
+void __RPC_STUB IMalloc_Realloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMalloc_Free_Proxy(
+    IMalloc* This,
+    LPVOID pv);
+void __RPC_STUB IMalloc_Free_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IMalloc_GetSize_Proxy(
+    IMalloc* This,
+    LPVOID pv);
+void __RPC_STUB IMalloc_GetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+int STDMETHODCALLTYPE IMalloc_DidAlloc_Proxy(
+    IMalloc* This,
+    LPVOID pv);
+void __RPC_STUB IMalloc_DidAlloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMalloc_HeapMinimize_Proxy(
+    IMalloc* This);
+void __RPC_STUB IMalloc_HeapMinimize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMalloc_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMallocSpy interface
+ */
+#ifndef __IMallocSpy_INTERFACE_DEFINED__
+#define __IMallocSpy_INTERFACE_DEFINED__
+
+typedef IMallocSpy *LPMALLOCSPY;
+DEFINE_GUID(IID_IMallocSpy, 0x0000001d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMallocSpy : public IUnknown
+{
+    virtual ULONG STDMETHODCALLTYPE PreAlloc(
+        ULONG cbRequest) = 0;
+
+    virtual LPVOID STDMETHODCALLTYPE PostAlloc(
+        LPVOID pActual) = 0;
+
+    virtual LPVOID STDMETHODCALLTYPE PreFree(
+        LPVOID pRequest,
+        BOOL fSpyed) = 0;
+
+    virtual void STDMETHODCALLTYPE PostFree(
+        BOOL fSpyed) = 0;
+
+    virtual ULONG STDMETHODCALLTYPE PreRealloc(
+        LPVOID pRequest,
+        ULONG cbRequest,
+        LPVOID *ppNewRequest,
+        BOOL fSpyed) = 0;
+
+    virtual LPVOID STDMETHODCALLTYPE PostRealloc(
+        LPVOID pActual,
+        BOOL fSpyed) = 0;
+
+    virtual LPVOID STDMETHODCALLTYPE PreGetSize(
+        LPVOID pRequest,
+        BOOL fSpyed) = 0;
+
+    virtual ULONG STDMETHODCALLTYPE PostGetSize(
+        ULONG cbActual,
+        BOOL fSpyed) = 0;
+
+    virtual LPVOID STDMETHODCALLTYPE PreDidAlloc(
+        LPVOID pRequest,
+        BOOL fSpyed) = 0;
+
+    virtual int STDMETHODCALLTYPE PostDidAlloc(
+        LPVOID pRequest,
+        BOOL fSpyed,
+        int fActual) = 0;
+
+    virtual void STDMETHODCALLTYPE PreHeapMinimize(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE PostHeapMinimize(
+        ) = 0;
+
+};
+#else
+typedef struct IMallocSpyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMallocSpy* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMallocSpy* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMallocSpy* This);
+
+    /*** IMallocSpy methods ***/
+    ULONG (STDMETHODCALLTYPE *PreAlloc)(
+        IMallocSpy* This,
+        ULONG cbRequest);
+
+    LPVOID (STDMETHODCALLTYPE *PostAlloc)(
+        IMallocSpy* This,
+        LPVOID pActual);
+
+    LPVOID (STDMETHODCALLTYPE *PreFree)(
+        IMallocSpy* This,
+        LPVOID pRequest,
+        BOOL fSpyed);
+
+    void (STDMETHODCALLTYPE *PostFree)(
+        IMallocSpy* This,
+        BOOL fSpyed);
+
+    ULONG (STDMETHODCALLTYPE *PreRealloc)(
+        IMallocSpy* This,
+        LPVOID pRequest,
+        ULONG cbRequest,
+        LPVOID *ppNewRequest,
+        BOOL fSpyed);
+
+    LPVOID (STDMETHODCALLTYPE *PostRealloc)(
+        IMallocSpy* This,
+        LPVOID pActual,
+        BOOL fSpyed);
+
+    LPVOID (STDMETHODCALLTYPE *PreGetSize)(
+        IMallocSpy* This,
+        LPVOID pRequest,
+        BOOL fSpyed);
+
+    ULONG (STDMETHODCALLTYPE *PostGetSize)(
+        IMallocSpy* This,
+        ULONG cbActual,
+        BOOL fSpyed);
+
+    LPVOID (STDMETHODCALLTYPE *PreDidAlloc)(
+        IMallocSpy* This,
+        LPVOID pRequest,
+        BOOL fSpyed);
+
+    int (STDMETHODCALLTYPE *PostDidAlloc)(
+        IMallocSpy* This,
+        LPVOID pRequest,
+        BOOL fSpyed,
+        int fActual);
+
+    void (STDMETHODCALLTYPE *PreHeapMinimize)(
+        IMallocSpy* This);
+
+    void (STDMETHODCALLTYPE *PostHeapMinimize)(
+        IMallocSpy* This);
+
+    END_INTERFACE
+} IMallocSpyVtbl;
+interface IMallocSpy {
+    CONST_VTBL IMallocSpyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMallocSpy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMallocSpy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMallocSpy_Release(This) (This)->lpVtbl->Release(This)
+/*** IMallocSpy methods ***/
+#define IMallocSpy_PreAlloc(This,cbRequest) (This)->lpVtbl->PreAlloc(This,cbRequest)
+#define IMallocSpy_PostAlloc(This,pActual) (This)->lpVtbl->PostAlloc(This,pActual)
+#define IMallocSpy_PreFree(This,pRequest,fSpyed) (This)->lpVtbl->PreFree(This,pRequest,fSpyed)
+#define IMallocSpy_PostFree(This,fSpyed) (This)->lpVtbl->PostFree(This,fSpyed)
+#define IMallocSpy_PreRealloc(This,pRequest,cbRequest,ppNewRequest,fSpyed) (This)->lpVtbl->PreRealloc(This,pRequest,cbRequest,ppNewRequest,fSpyed)
+#define IMallocSpy_PostRealloc(This,pActual,fSpyed) (This)->lpVtbl->PostRealloc(This,pActual,fSpyed)
+#define IMallocSpy_PreGetSize(This,pRequest,fSpyed) (This)->lpVtbl->PreGetSize(This,pRequest,fSpyed)
+#define IMallocSpy_PostGetSize(This,cbActual,fSpyed) (This)->lpVtbl->PostGetSize(This,cbActual,fSpyed)
+#define IMallocSpy_PreDidAlloc(This,pRequest,fSpyed) (This)->lpVtbl->PreDidAlloc(This,pRequest,fSpyed)
+#define IMallocSpy_PostDidAlloc(This,pRequest,fSpyed,fActual) (This)->lpVtbl->PostDidAlloc(This,pRequest,fSpyed,fActual)
+#define IMallocSpy_PreHeapMinimize(This) (This)->lpVtbl->PreHeapMinimize(This)
+#define IMallocSpy_PostHeapMinimize(This) (This)->lpVtbl->PostHeapMinimize(This)
+#endif
+
+#endif
+
+ULONG STDMETHODCALLTYPE IMallocSpy_PreAlloc_Proxy(
+    IMallocSpy* This,
+    ULONG cbRequest);
+void __RPC_STUB IMallocSpy_PreAlloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PostAlloc_Proxy(
+    IMallocSpy* This,
+    LPVOID pActual);
+void __RPC_STUB IMallocSpy_PostAlloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PreFree_Proxy(
+    IMallocSpy* This,
+    LPVOID pRequest,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreFree_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMallocSpy_PostFree_Proxy(
+    IMallocSpy* This,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PostFree_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IMallocSpy_PreRealloc_Proxy(
+    IMallocSpy* This,
+    LPVOID pRequest,
+    ULONG cbRequest,
+    LPVOID *ppNewRequest,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreRealloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PostRealloc_Proxy(
+    IMallocSpy* This,
+    LPVOID pActual,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PostRealloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PreGetSize_Proxy(
+    IMallocSpy* This,
+    LPVOID pRequest,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreGetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IMallocSpy_PostGetSize_Proxy(
+    IMallocSpy* This,
+    ULONG cbActual,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PostGetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PreDidAlloc_Proxy(
+    IMallocSpy* This,
+    LPVOID pRequest,
+    BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreDidAlloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+int STDMETHODCALLTYPE IMallocSpy_PostDidAlloc_Proxy(
+    IMallocSpy* This,
+    LPVOID pRequest,
+    BOOL fSpyed,
+    int fActual);
+void __RPC_STUB IMallocSpy_PostDidAlloc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMallocSpy_PreHeapMinimize_Proxy(
+    IMallocSpy* This);
+void __RPC_STUB IMallocSpy_PreHeapMinimize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMallocSpy_PostHeapMinimize_Proxy(
+    IMallocSpy* This);
+void __RPC_STUB IMallocSpy_PostHeapMinimize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMallocSpy_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternalUnknown interface
+ */
+#ifndef __IInternalUnknown_INTERFACE_DEFINED__
+#define __IInternalUnknown_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternalUnknown, 0x00000021, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternalUnknown : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryInternalInterface(
+        REFIID riid,
+        void **ppv) = 0;
+
+};
+#else
+typedef struct IInternalUnknownVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternalUnknown* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternalUnknown* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternalUnknown* This);
+
+    /*** IInternalUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInternalInterface)(
+        IInternalUnknown* This,
+        REFIID riid,
+        void **ppv);
+
+    END_INTERFACE
+} IInternalUnknownVtbl;
+interface IInternalUnknown {
+    CONST_VTBL IInternalUnknownVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternalUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternalUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternalUnknown_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternalUnknown methods ***/
+#define IInternalUnknown_QueryInternalInterface(This,riid,ppv) (This)->lpVtbl->QueryInternalInterface(This,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternalUnknown_QueryInternalInterface_Proxy(
+    IInternalUnknown* This,
+    REFIID riid,
+    void **ppv);
+void __RPC_STUB IInternalUnknown_QueryInternalInterface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternalUnknown_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumUnknown interface
+ */
+#ifndef __IEnumUnknown_INTERFACE_DEFINED__
+#define __IEnumUnknown_INTERFACE_DEFINED__
+
+typedef IEnumUnknown *LPENUMUNKNOWN;
+DEFINE_GUID(IID_IEnumUnknown, 0x00000100, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumUnknown : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        IUnknown **rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumUnknown **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumUnknownVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumUnknown* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumUnknown* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumUnknown* This);
+
+    /*** IEnumUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumUnknown* This,
+        ULONG celt,
+        IUnknown **rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumUnknown* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumUnknown* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumUnknown* This,
+        IEnumUnknown **ppenum);
+
+    END_INTERFACE
+} IEnumUnknownVtbl;
+interface IEnumUnknown {
+    CONST_VTBL IEnumUnknownVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumUnknown_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumUnknown methods ***/
+#define IEnumUnknown_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumUnknown_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumUnknown_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumUnknown_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumUnknown_RemoteNext_Proxy(
+    IEnumUnknown* This,
+    ULONG celt,
+    IUnknown **rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumUnknown_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Skip_Proxy(
+    IEnumUnknown* This,
+    ULONG celt);
+void __RPC_STUB IEnumUnknown_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Reset_Proxy(
+    IEnumUnknown* This);
+void __RPC_STUB IEnumUnknown_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Clone_Proxy(
+    IEnumUnknown* This,
+    IEnumUnknown **ppenum);
+void __RPC_STUB IEnumUnknown_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumUnknown_Next_Proxy(
+    IEnumUnknown* This,
+    ULONG celt,
+    IUnknown **rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumUnknown_Next_Stub(
+    IEnumUnknown* This,
+    ULONG celt,
+    IUnknown **rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumUnknown_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISurrogate interface
+ */
+#ifndef __ISurrogate_INTERFACE_DEFINED__
+#define __ISurrogate_INTERFACE_DEFINED__
+
+typedef ISurrogate *LPSURROGATE;
+DEFINE_GUID(IID_ISurrogate, 0x00000022, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISurrogate : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE LoadDllServer(
+        REFCLSID Clsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FreeSurrogate(
+        ) = 0;
+
+};
+#else
+typedef struct ISurrogateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISurrogate* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISurrogate* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISurrogate* This);
+
+    /*** ISurrogate methods ***/
+    HRESULT (STDMETHODCALLTYPE *LoadDllServer)(
+        ISurrogate* This,
+        REFCLSID Clsid);
+
+    HRESULT (STDMETHODCALLTYPE *FreeSurrogate)(
+        ISurrogate* This);
+
+    END_INTERFACE
+} ISurrogateVtbl;
+interface ISurrogate {
+    CONST_VTBL ISurrogateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISurrogate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISurrogate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISurrogate_Release(This) (This)->lpVtbl->Release(This)
+/*** ISurrogate methods ***/
+#define ISurrogate_LoadDllServer(This,Clsid) (This)->lpVtbl->LoadDllServer(This,Clsid)
+#define ISurrogate_FreeSurrogate(This) (This)->lpVtbl->FreeSurrogate(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISurrogate_LoadDllServer_Proxy(
+    ISurrogate* This,
+    REFCLSID Clsid);
+void __RPC_STUB ISurrogate_LoadDllServer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISurrogate_FreeSurrogate_Proxy(
+    ISurrogate* This);
+void __RPC_STUB ISurrogate_FreeSurrogate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISurrogate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IGlobalInterfaceTable interface
+ */
+#ifndef __IGlobalInterfaceTable_INTERFACE_DEFINED__
+#define __IGlobalInterfaceTable_INTERFACE_DEFINED__
+
+typedef IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
+DEFINE_GUID(IID_IGlobalInterfaceTable, 0x00000146, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IGlobalInterfaceTable : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RegisterInterfaceInGlobal(
+        IUnknown *pUnk,
+        REFIID riid,
+        DWORD *pdwCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RevokeInterfaceFromGlobal(
+        DWORD dwCookie) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInterfaceFromGlobal(
+        DWORD dwCookie,
+        REFIID riid,
+        void **ppv) = 0;
+
+};
+#else
+typedef struct IGlobalInterfaceTableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IGlobalInterfaceTable* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IGlobalInterfaceTable* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IGlobalInterfaceTable* This);
+
+    /*** IGlobalInterfaceTable methods ***/
+    HRESULT (STDMETHODCALLTYPE *RegisterInterfaceInGlobal)(
+        IGlobalInterfaceTable* This,
+        IUnknown *pUnk,
+        REFIID riid,
+        DWORD *pdwCookie);
+
+    HRESULT (STDMETHODCALLTYPE *RevokeInterfaceFromGlobal)(
+        IGlobalInterfaceTable* This,
+        DWORD dwCookie);
+
+    HRESULT (STDMETHODCALLTYPE *GetInterfaceFromGlobal)(
+        IGlobalInterfaceTable* This,
+        DWORD dwCookie,
+        REFIID riid,
+        void **ppv);
+
+    END_INTERFACE
+} IGlobalInterfaceTableVtbl;
+interface IGlobalInterfaceTable {
+    CONST_VTBL IGlobalInterfaceTableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IGlobalInterfaceTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IGlobalInterfaceTable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IGlobalInterfaceTable_Release(This) (This)->lpVtbl->Release(This)
+/*** IGlobalInterfaceTable methods ***/
+#define IGlobalInterfaceTable_RegisterInterfaceInGlobal(This,pUnk,riid,pdwCookie) (This)->lpVtbl->RegisterInterfaceInGlobal(This,pUnk,riid,pdwCookie)
+#define IGlobalInterfaceTable_RevokeInterfaceFromGlobal(This,dwCookie) (This)->lpVtbl->RevokeInterfaceFromGlobal(This,dwCookie)
+#define IGlobalInterfaceTable_GetInterfaceFromGlobal(This,dwCookie,riid,ppv) (This)->lpVtbl->GetInterfaceFromGlobal(This,dwCookie,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_RegisterInterfaceInGlobal_Proxy(
+    IGlobalInterfaceTable* This,
+    IUnknown *pUnk,
+    REFIID riid,
+    DWORD *pdwCookie);
+void __RPC_STUB IGlobalInterfaceTable_RegisterInterfaceInGlobal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Proxy(
+    IGlobalInterfaceTable* This,
+    DWORD dwCookie);
+void __RPC_STUB IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_GetInterfaceFromGlobal_Proxy(
+    IGlobalInterfaceTable* This,
+    DWORD dwCookie,
+    REFIID riid,
+    void **ppv);
+void __RPC_STUB IGlobalInterfaceTable_GetInterfaceFromGlobal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IGlobalInterfaceTable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBindCtx interface
+ */
+#ifndef __IBindCtx_INTERFACE_DEFINED__
+#define __IBindCtx_INTERFACE_DEFINED__
+
+typedef IBindCtx *LPBINDCTX;
+typedef IBindCtx *LPBC;
+typedef struct tagBIND_OPTS {
+    DWORD cbStruct;
+    DWORD grfFlags;
+    DWORD grfMode;
+    DWORD dwTickCountDeadline;
+} BIND_OPTS;
+typedef struct tagBIND_OPTS *LPBIND_OPTS;
+typedef struct tagBIND_OPTS2 {
+    DWORD cbStruct;
+    DWORD grfFlags;
+    DWORD grfMode;
+    DWORD dwTickCountDeadline;
+    DWORD dwTrackFlags;
+    DWORD dwClassContext;
+    LCID locale;
+    COSERVERINFO *pServerInfo;
+} BIND_OPTS2;
+typedef struct tagBIND_OPTS2 *LPBIND_OPTS2;
+typedef enum tagBIND_FLAGS {
+    BIND_MAYBOTHERUSER = 1,
+    BIND_JUSTTESTEXISTENCE = 2
+} BIND_FLAGS;
+DEFINE_GUID(IID_IBindCtx, 0x0000000e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindCtx : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RegisterObjectBound(
+        IUnknown *punk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RevokeObjectBound(
+        IUnknown *punk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseBoundObjects(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBindOptions(
+        BIND_OPTS *pbindopts) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBindOptions(
+        BIND_OPTS *pbindopts) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRunningObjectTable(
+        IRunningObjectTable **pprot) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterObjectParam(
+        LPOLESTR pszKey,
+        IUnknown *punk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetObjectParam(
+        LPOLESTR pszKey,
+        IUnknown **ppunk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumObjectParam(
+        IEnumString **ppenum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RevokeObjectParam(
+        LPOLESTR pszKey) = 0;
+
+};
+#else
+typedef struct IBindCtxVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBindCtx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBindCtx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBindCtx* This);
+
+    /*** IBindCtx methods ***/
+    HRESULT (STDMETHODCALLTYPE *RegisterObjectBound)(
+        IBindCtx* This,
+        IUnknown *punk);
+
+    HRESULT (STDMETHODCALLTYPE *RevokeObjectBound)(
+        IBindCtx* This,
+        IUnknown *punk);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseBoundObjects)(
+        IBindCtx* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetBindOptions)(
+        IBindCtx* This,
+        BIND_OPTS *pbindopts);
+
+    HRESULT (STDMETHODCALLTYPE *GetBindOptions)(
+        IBindCtx* This,
+        BIND_OPTS *pbindopts);
+
+    HRESULT (STDMETHODCALLTYPE *GetRunningObjectTable)(
+        IBindCtx* This,
+        IRunningObjectTable **pprot);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterObjectParam)(
+        IBindCtx* This,
+        LPOLESTR pszKey,
+        IUnknown *punk);
+
+    HRESULT (STDMETHODCALLTYPE *GetObjectParam)(
+        IBindCtx* This,
+        LPOLESTR pszKey,
+        IUnknown **ppunk);
+
+    HRESULT (STDMETHODCALLTYPE *EnumObjectParam)(
+        IBindCtx* This,
+        IEnumString **ppenum);
+
+    HRESULT (STDMETHODCALLTYPE *RevokeObjectParam)(
+        IBindCtx* This,
+        LPOLESTR pszKey);
+
+    END_INTERFACE
+} IBindCtxVtbl;
+interface IBindCtx {
+    CONST_VTBL IBindCtxVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindCtx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindCtx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindCtx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindCtx methods ***/
+#define IBindCtx_RegisterObjectBound(This,punk) (This)->lpVtbl->RegisterObjectBound(This,punk)
+#define IBindCtx_RevokeObjectBound(This,punk) (This)->lpVtbl->RevokeObjectBound(This,punk)
+#define IBindCtx_ReleaseBoundObjects(This) (This)->lpVtbl->ReleaseBoundObjects(This)
+#define IBindCtx_SetBindOptions(This,pbindopts) (This)->lpVtbl->SetBindOptions(This,pbindopts)
+#define IBindCtx_GetBindOptions(This,pbindopts) (This)->lpVtbl->GetBindOptions(This,pbindopts)
+#define IBindCtx_GetRunningObjectTable(This,pprot) (This)->lpVtbl->GetRunningObjectTable(This,pprot)
+#define IBindCtx_RegisterObjectParam(This,pszKey,punk) (This)->lpVtbl->RegisterObjectParam(This,pszKey,punk)
+#define IBindCtx_GetObjectParam(This,pszKey,ppunk) (This)->lpVtbl->GetObjectParam(This,pszKey,ppunk)
+#define IBindCtx_EnumObjectParam(This,ppenum) (This)->lpVtbl->EnumObjectParam(This,ppenum)
+#define IBindCtx_RevokeObjectParam(This,pszKey) (This)->lpVtbl->RevokeObjectParam(This,pszKey)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindCtx_RegisterObjectBound_Proxy(
+    IBindCtx* This,
+    IUnknown *punk);
+void __RPC_STUB IBindCtx_RegisterObjectBound_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RevokeObjectBound_Proxy(
+    IBindCtx* This,
+    IUnknown *punk);
+void __RPC_STUB IBindCtx_RevokeObjectBound_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_ReleaseBoundObjects_Proxy(
+    IBindCtx* This);
+void __RPC_STUB IBindCtx_ReleaseBoundObjects_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RemoteSetBindOptions_Proxy(
+    IBindCtx* This,
+    BIND_OPTS2 *pbindopts);
+void __RPC_STUB IBindCtx_RemoteSetBindOptions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RemoteGetBindOptions_Proxy(
+    IBindCtx* This,
+    BIND_OPTS2 *pbindopts);
+void __RPC_STUB IBindCtx_RemoteGetBindOptions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetRunningObjectTable_Proxy(
+    IBindCtx* This,
+    IRunningObjectTable **pprot);
+void __RPC_STUB IBindCtx_GetRunningObjectTable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RegisterObjectParam_Proxy(
+    IBindCtx* This,
+    LPOLESTR pszKey,
+    IUnknown *punk);
+void __RPC_STUB IBindCtx_RegisterObjectParam_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetObjectParam_Proxy(
+    IBindCtx* This,
+    LPOLESTR pszKey,
+    IUnknown **ppunk);
+void __RPC_STUB IBindCtx_GetObjectParam_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_EnumObjectParam_Proxy(
+    IBindCtx* This,
+    IEnumString **ppenum);
+void __RPC_STUB IBindCtx_EnumObjectParam_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RevokeObjectParam_Proxy(
+    IBindCtx* This,
+    LPOLESTR pszKey);
+void __RPC_STUB IBindCtx_RevokeObjectParam_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindCtx_SetBindOptions_Proxy(
+    IBindCtx* This,
+    BIND_OPTS *pbindopts);
+HRESULT __RPC_STUB IBindCtx_SetBindOptions_Stub(
+    IBindCtx* This,
+    BIND_OPTS2 *pbindopts);
+HRESULT CALLBACK IBindCtx_GetBindOptions_Proxy(
+    IBindCtx* This,
+    BIND_OPTS *pbindopts);
+HRESULT __RPC_STUB IBindCtx_GetBindOptions_Stub(
+    IBindCtx* This,
+    BIND_OPTS2 *pbindopts);
+
+#endif  /* __IBindCtx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumMoniker interface
+ */
+#ifndef __IEnumMoniker_INTERFACE_DEFINED__
+#define __IEnumMoniker_INTERFACE_DEFINED__
+
+typedef IEnumMoniker *LPENUMMONIKER;
+DEFINE_GUID(IID_IEnumMoniker, 0x00000102, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumMoniker : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        IMoniker **rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumMoniker **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumMonikerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumMoniker* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumMoniker* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumMoniker* This);
+
+    /*** IEnumMoniker methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumMoniker* This,
+        ULONG celt,
+        IMoniker **rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumMoniker* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumMoniker* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumMoniker* This,
+        IEnumMoniker **ppenum);
+
+    END_INTERFACE
+} IEnumMonikerVtbl;
+interface IEnumMoniker {
+    CONST_VTBL IEnumMonikerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMoniker_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumMoniker methods ***/
+#define IEnumMoniker_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumMoniker_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumMoniker_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMoniker_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumMoniker_RemoteNext_Proxy(
+    IEnumMoniker* This,
+    ULONG celt,
+    IMoniker **rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumMoniker_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Skip_Proxy(
+    IEnumMoniker* This,
+    ULONG celt);
+void __RPC_STUB IEnumMoniker_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Reset_Proxy(
+    IEnumMoniker* This);
+void __RPC_STUB IEnumMoniker_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Clone_Proxy(
+    IEnumMoniker* This,
+    IEnumMoniker **ppenum);
+void __RPC_STUB IEnumMoniker_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumMoniker_Next_Proxy(
+    IEnumMoniker* This,
+    ULONG celt,
+    IMoniker **rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumMoniker_Next_Stub(
+    IEnumMoniker* This,
+    ULONG celt,
+    IMoniker **rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumMoniker_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRunnableObject interface
+ */
+#ifndef __IRunnableObject_INTERFACE_DEFINED__
+#define __IRunnableObject_INTERFACE_DEFINED__
+
+typedef IRunnableObject *LPRUNNABLEOBJECT;
+DEFINE_GUID(IID_IRunnableObject, 0x00000126, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRunnableObject : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetRunningClass(
+        LPCLSID lpClsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Run(
+        LPBINDCTX pbc) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE IsRunning(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRunning(
+        BOOL fLock,
+        BOOL fLastUnlockCloses) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainedObject(
+        BOOL fContained) = 0;
+
+};
+#else
+typedef struct IRunnableObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRunnableObject* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRunnableObject* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRunnableObject* This);
+
+    /*** IRunnableObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetRunningClass)(
+        IRunnableObject* This,
+        LPCLSID lpClsid);
+
+    HRESULT (STDMETHODCALLTYPE *Run)(
+        IRunnableObject* This,
+        LPBINDCTX pbc);
+
+    BOOL (STDMETHODCALLTYPE *IsRunning)(
+        IRunnableObject* This);
+
+    HRESULT (STDMETHODCALLTYPE *LockRunning)(
+        IRunnableObject* This,
+        BOOL fLock,
+        BOOL fLastUnlockCloses);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainedObject)(
+        IRunnableObject* This,
+        BOOL fContained);
+
+    END_INTERFACE
+} IRunnableObjectVtbl;
+interface IRunnableObject {
+    CONST_VTBL IRunnableObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRunnableObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRunnableObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRunnableObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IRunnableObject methods ***/
+#define IRunnableObject_GetRunningClass(This,lpClsid) (This)->lpVtbl->GetRunningClass(This,lpClsid)
+#define IRunnableObject_Run(This,pbc) (This)->lpVtbl->Run(This,pbc)
+#define IRunnableObject_IsRunning(This) (This)->lpVtbl->IsRunning(This)
+#define IRunnableObject_LockRunning(This,fLock,fLastUnlockCloses) (This)->lpVtbl->LockRunning(This,fLock,fLastUnlockCloses)
+#define IRunnableObject_SetContainedObject(This,fContained) (This)->lpVtbl->SetContainedObject(This,fContained)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRunnableObject_GetRunningClass_Proxy(
+    IRunnableObject* This,
+    LPCLSID lpClsid);
+void __RPC_STUB IRunnableObject_GetRunningClass_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_Run_Proxy(
+    IRunnableObject* This,
+    LPBINDCTX pbc);
+void __RPC_STUB IRunnableObject_Run_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_RemoteIsRunning_Proxy(
+    IRunnableObject* This);
+void __RPC_STUB IRunnableObject_RemoteIsRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_LockRunning_Proxy(
+    IRunnableObject* This,
+    BOOL fLock,
+    BOOL fLastUnlockCloses);
+void __RPC_STUB IRunnableObject_LockRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_SetContainedObject_Proxy(
+    IRunnableObject* This,
+    BOOL fContained);
+void __RPC_STUB IRunnableObject_SetContainedObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL CALLBACK IRunnableObject_IsRunning_Proxy(
+    IRunnableObject* This);
+HRESULT __RPC_STUB IRunnableObject_IsRunning_Stub(
+    IRunnableObject* This);
+
+#endif  /* __IRunnableObject_INTERFACE_DEFINED__ */
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetObject
+#endif
+/*****************************************************************************
+ * IRunningObjectTable interface
+ */
+#ifndef __IRunningObjectTable_INTERFACE_DEFINED__
+#define __IRunningObjectTable_INTERFACE_DEFINED__
+
+typedef IRunningObjectTable *LPRUNNINGOBJECTTABLE;
+DEFINE_GUID(IID_IRunningObjectTable, 0x00000010, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRunningObjectTable : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Register(
+        DWORD grfFlags,
+        IUnknown *punkObject,
+        IMoniker *pmkObjectName,
+        DWORD *pdwRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Revoke(
+        DWORD dwRegister) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsRunning(
+        IMoniker *pmkObjectName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetObject(
+        IMoniker *pmkObjectName,
+        IUnknown **ppunkObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NoteChangeTime(
+        DWORD dwRegister,
+        FILETIME *pfiletime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
+        IMoniker *pmkObjectName,
+        FILETIME *pfiletime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumRunning(
+        IEnumMoniker **ppenumMoniker) = 0;
+
+};
+#else
+typedef struct IRunningObjectTableVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRunningObjectTable* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRunningObjectTable* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRunningObjectTable* This);
+
+    /*** IRunningObjectTable methods ***/
+    HRESULT (STDMETHODCALLTYPE *Register)(
+        IRunningObjectTable* This,
+        DWORD grfFlags,
+        IUnknown *punkObject,
+        IMoniker *pmkObjectName,
+        DWORD *pdwRegister);
+
+    HRESULT (STDMETHODCALLTYPE *Revoke)(
+        IRunningObjectTable* This,
+        DWORD dwRegister);
+
+    HRESULT (STDMETHODCALLTYPE *IsRunning)(
+        IRunningObjectTable* This,
+        IMoniker *pmkObjectName);
+
+    HRESULT (STDMETHODCALLTYPE *GetObject)(
+        IRunningObjectTable* This,
+        IMoniker *pmkObjectName,
+        IUnknown **ppunkObject);
+
+    HRESULT (STDMETHODCALLTYPE *NoteChangeTime)(
+        IRunningObjectTable* This,
+        DWORD dwRegister,
+        FILETIME *pfiletime);
+
+    HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(
+        IRunningObjectTable* This,
+        IMoniker *pmkObjectName,
+        FILETIME *pfiletime);
+
+    HRESULT (STDMETHODCALLTYPE *EnumRunning)(
+        IRunningObjectTable* This,
+        IEnumMoniker **ppenumMoniker);
+
+    END_INTERFACE
+} IRunningObjectTableVtbl;
+interface IRunningObjectTable {
+    CONST_VTBL IRunningObjectTableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRunningObjectTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRunningObjectTable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRunningObjectTable_Release(This) (This)->lpVtbl->Release(This)
+/*** IRunningObjectTable methods ***/
+#define IRunningObjectTable_Register(This,grfFlags,punkObject,pmkObjectName,pdwRegister) (This)->lpVtbl->Register(This,grfFlags,punkObject,pmkObjectName,pdwRegister)
+#define IRunningObjectTable_Revoke(This,dwRegister) (This)->lpVtbl->Revoke(This,dwRegister)
+#define IRunningObjectTable_IsRunning(This,pmkObjectName) (This)->lpVtbl->IsRunning(This,pmkObjectName)
+#define IRunningObjectTable_GetObject(This,pmkObjectName,ppunkObject) (This)->lpVtbl->GetObject(This,pmkObjectName,ppunkObject)
+#define IRunningObjectTable_NoteChangeTime(This,dwRegister,pfiletime) (This)->lpVtbl->NoteChangeTime(This,dwRegister,pfiletime)
+#define IRunningObjectTable_GetTimeOfLastChange(This,pmkObjectName,pfiletime) (This)->lpVtbl->GetTimeOfLastChange(This,pmkObjectName,pfiletime)
+#define IRunningObjectTable_EnumRunning(This,ppenumMoniker) (This)->lpVtbl->EnumRunning(This,ppenumMoniker)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_Register_Proxy(
+    IRunningObjectTable* This,
+    DWORD grfFlags,
+    IUnknown *punkObject,
+    IMoniker *pmkObjectName,
+    DWORD *pdwRegister);
+void __RPC_STUB IRunningObjectTable_Register_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_Revoke_Proxy(
+    IRunningObjectTable* This,
+    DWORD dwRegister);
+void __RPC_STUB IRunningObjectTable_Revoke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_IsRunning_Proxy(
+    IRunningObjectTable* This,
+    IMoniker *pmkObjectName);
+void __RPC_STUB IRunningObjectTable_IsRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_GetObject_Proxy(
+    IRunningObjectTable* This,
+    IMoniker *pmkObjectName,
+    IUnknown **ppunkObject);
+void __RPC_STUB IRunningObjectTable_GetObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_NoteChangeTime_Proxy(
+    IRunningObjectTable* This,
+    DWORD dwRegister,
+    FILETIME *pfiletime);
+void __RPC_STUB IRunningObjectTable_NoteChangeTime_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_GetTimeOfLastChange_Proxy(
+    IRunningObjectTable* This,
+    IMoniker *pmkObjectName,
+    FILETIME *pfiletime);
+void __RPC_STUB IRunningObjectTable_GetTimeOfLastChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_EnumRunning_Proxy(
+    IRunningObjectTable* This,
+    IEnumMoniker **ppenumMoniker);
+void __RPC_STUB IRunningObjectTable_EnumRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRunningObjectTable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersist interface
+ */
+#ifndef __IPersist_INTERFACE_DEFINED__
+#define __IPersist_INTERFACE_DEFINED__
+
+typedef IPersist *LPPERSIST;
+DEFINE_GUID(IID_IPersist, 0x0000010c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersist : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClassID(
+        CLSID *pClassID) = 0;
+
+};
+#else
+typedef struct IPersistVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersist* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersist* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersist* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersist* This,
+        CLSID *pClassID);
+
+    END_INTERFACE
+} IPersistVtbl;
+interface IPersist {
+    CONST_VTBL IPersistVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersist_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersist_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersist_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersist_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersist_GetClassID_Proxy(
+    IPersist* This,
+    CLSID *pClassID);
+void __RPC_STUB IPersist_GetClassID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersist_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistStream interface
+ */
+#ifndef __IPersistStream_INTERFACE_DEFINED__
+#define __IPersistStream_INTERFACE_DEFINED__
+
+typedef IPersistStream *LPPERSISTSTREAM;
+DEFINE_GUID(IID_IPersistStream, 0x00000109, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistStream : public IPersist
+{
+    virtual HRESULT STDMETHODCALLTYPE IsDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Load(
+        IStream *pStm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        IStream *pStm,
+        BOOL fClearDirty) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSizeMax(
+        ULARGE_INTEGER *pcbSize) = 0;
+
+};
+#else
+typedef struct IPersistStreamVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistStream* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistStream* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistStream* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersistStream* This,
+        CLSID *pClassID);
+
+    /*** IPersistStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsDirty)(
+        IPersistStream* This);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IPersistStream* This,
+        IStream *pStm);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IPersistStream* This,
+        IStream *pStm,
+        BOOL fClearDirty);
+
+    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
+        IPersistStream* This,
+        ULARGE_INTEGER *pcbSize);
+
+    END_INTERFACE
+} IPersistStreamVtbl;
+interface IPersistStream {
+    CONST_VTBL IPersistStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistStream_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistStream_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistStream methods ***/
+#define IPersistStream_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistStream_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
+#define IPersistStream_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
+#define IPersistStream_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistStream_IsDirty_Proxy(
+    IPersistStream* This);
+void __RPC_STUB IPersistStream_IsDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStream_Load_Proxy(
+    IPersistStream* This,
+    IStream *pStm);
+void __RPC_STUB IPersistStream_Load_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStream_Save_Proxy(
+    IPersistStream* This,
+    IStream *pStm,
+    BOOL fClearDirty);
+void __RPC_STUB IPersistStream_Save_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStream_GetSizeMax_Proxy(
+    IPersistStream* This,
+    ULARGE_INTEGER *pcbSize);
+void __RPC_STUB IPersistStream_GetSizeMax_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMoniker interface
+ */
+#ifndef __IMoniker_INTERFACE_DEFINED__
+#define __IMoniker_INTERFACE_DEFINED__
+
+typedef IMoniker *LPMONIKER;
+typedef enum tagMKSYS {
+    MKSYS_NONE = 0,
+    MKSYS_GENERICCOMPOSITE = 1,
+    MKSYS_FILEMONIKER = 2,
+    MKSYS_ANTIMONIKER = 3,
+    MKSYS_ITEMMONIKER = 4,
+    MKSYS_POINTERMONIKER = 5,
+    MKSYS_CLASSMONIKER = 7
+} MKSYS;
+typedef enum tagMKREDUCE {
+    MKRREDUCE_ONE = 3 << 16,
+    MKRREDUCE_TOUSER = 2 << 16,
+    MKRREDUCE_THROUGHUSER = 1 << 16,
+    MKRREDUCE_ALL = 0
+} MKRREDUCE;
+DEFINE_GUID(IID_IMoniker, 0x0000000f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMoniker : public IPersistStream
+{
+    virtual HRESULT STDMETHODCALLTYPE BindToObject(
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        REFIID riidResult,
+        void **ppvResult) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindToStorage(
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        REFIID riid,
+        void **ppvObj) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reduce(
+        IBindCtx *pbc,
+        DWORD dwReduceHowFar,
+        IMoniker **ppmkToLeft,
+        IMoniker **ppmkReduced) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ComposeWith(
+        IMoniker *pmkRight,
+        BOOL fOnlyIfNotGeneric,
+        IMoniker **ppmkComposite) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Enum(
+        BOOL fForward,
+        IEnumMoniker **ppenumMoniker) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsEqual(
+        IMoniker *pmkOtherMoniker) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Hash(
+        DWORD *pdwHash) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsRunning(
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        IMoniker *pmkNewlyRunning) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        FILETIME *pFileTime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Inverse(
+        IMoniker **ppmk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CommonPrefixWith(
+        IMoniker *pmkOther,
+        IMoniker **ppmkPrefix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RelativePathTo(
+        IMoniker *pmkOther,
+        IMoniker **ppmkRelPath) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        LPOLESTR *ppszDisplayName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        LPOLESTR pszDisplayName,
+        ULONG *pchEaten,
+        IMoniker **ppmkOut) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsSystemMoniker(
+        DWORD *pdwMksys) = 0;
+
+};
+#else
+typedef struct IMonikerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMoniker* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMoniker* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMoniker* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IMoniker* This,
+        CLSID *pClassID);
+
+    /*** IPersistStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsDirty)(
+        IMoniker* This);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IMoniker* This,
+        IStream *pStm);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IMoniker* This,
+        IStream *pStm,
+        BOOL fClearDirty);
+
+    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
+        IMoniker* This,
+        ULARGE_INTEGER *pcbSize);
+
+    /*** IMoniker methods ***/
+    HRESULT (STDMETHODCALLTYPE *BindToObject)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        REFIID riidResult,
+        void **ppvResult);
+
+    HRESULT (STDMETHODCALLTYPE *BindToStorage)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        REFIID riid,
+        void **ppvObj);
+
+    HRESULT (STDMETHODCALLTYPE *Reduce)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        DWORD dwReduceHowFar,
+        IMoniker **ppmkToLeft,
+        IMoniker **ppmkReduced);
+
+    HRESULT (STDMETHODCALLTYPE *ComposeWith)(
+        IMoniker* This,
+        IMoniker *pmkRight,
+        BOOL fOnlyIfNotGeneric,
+        IMoniker **ppmkComposite);
+
+    HRESULT (STDMETHODCALLTYPE *Enum)(
+        IMoniker* This,
+        BOOL fForward,
+        IEnumMoniker **ppenumMoniker);
+
+    HRESULT (STDMETHODCALLTYPE *IsEqual)(
+        IMoniker* This,
+        IMoniker *pmkOtherMoniker);
+
+    HRESULT (STDMETHODCALLTYPE *Hash)(
+        IMoniker* This,
+        DWORD *pdwHash);
+
+    HRESULT (STDMETHODCALLTYPE *IsRunning)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        IMoniker *pmkNewlyRunning);
+
+    HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        FILETIME *pFileTime);
+
+    HRESULT (STDMETHODCALLTYPE *Inverse)(
+        IMoniker* This,
+        IMoniker **ppmk);
+
+    HRESULT (STDMETHODCALLTYPE *CommonPrefixWith)(
+        IMoniker* This,
+        IMoniker *pmkOther,
+        IMoniker **ppmkPrefix);
+
+    HRESULT (STDMETHODCALLTYPE *RelativePathTo)(
+        IMoniker* This,
+        IMoniker *pmkOther,
+        IMoniker **ppmkRelPath);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        LPOLESTR *ppszDisplayName);
+
+    HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+        IMoniker* This,
+        IBindCtx *pbc,
+        IMoniker *pmkToLeft,
+        LPOLESTR pszDisplayName,
+        ULONG *pchEaten,
+        IMoniker **ppmkOut);
+
+    HRESULT (STDMETHODCALLTYPE *IsSystemMoniker)(
+        IMoniker* This,
+        DWORD *pdwMksys);
+
+    END_INTERFACE
+} IMonikerVtbl;
+interface IMoniker {
+    CONST_VTBL IMonikerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMoniker_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistStream methods ***/
+#define IMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IMoniker_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
+#define IMoniker_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
+#define IMoniker_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
+/*** IMoniker methods ***/
+#define IMoniker_BindToObject(This,pbc,pmkToLeft,riidResult,ppvResult) (This)->lpVtbl->BindToObject(This,pbc,pmkToLeft,riidResult,ppvResult)
+#define IMoniker_BindToStorage(This,pbc,pmkToLeft,riid,ppvObj) (This)->lpVtbl->BindToStorage(This,pbc,pmkToLeft,riid,ppvObj)
+#define IMoniker_Reduce(This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced) (This)->lpVtbl->Reduce(This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced)
+#define IMoniker_ComposeWith(This,pmkRight,fOnlyIfNotGeneric,ppmkComposite) (This)->lpVtbl->ComposeWith(This,pmkRight,fOnlyIfNotGeneric,ppmkComposite)
+#define IMoniker_Enum(This,fForward,ppenumMoniker) (This)->lpVtbl->Enum(This,fForward,ppenumMoniker)
+#define IMoniker_IsEqual(This,pmkOtherMoniker) (This)->lpVtbl->IsEqual(This,pmkOtherMoniker)
+#define IMoniker_Hash(This,pdwHash) (This)->lpVtbl->Hash(This,pdwHash)
+#define IMoniker_IsRunning(This,pbc,pmkToLeft,pmkNewlyRunning) (This)->lpVtbl->IsRunning(This,pbc,pmkToLeft,pmkNewlyRunning)
+#define IMoniker_GetTimeOfLastChange(This,pbc,pmkToLeft,pFileTime) (This)->lpVtbl->GetTimeOfLastChange(This,pbc,pmkToLeft,pFileTime)
+#define IMoniker_Inverse(This,ppmk) (This)->lpVtbl->Inverse(This,ppmk)
+#define IMoniker_CommonPrefixWith(This,pmkOther,ppmkPrefix) (This)->lpVtbl->CommonPrefixWith(This,pmkOther,ppmkPrefix)
+#define IMoniker_RelativePathTo(This,pmkOther,ppmkRelPath) (This)->lpVtbl->RelativePathTo(This,pmkOther,ppmkRelPath)
+#define IMoniker_GetDisplayName(This,pbc,pmkToLeft,ppszDisplayName) (This)->lpVtbl->GetDisplayName(This,pbc,pmkToLeft,ppszDisplayName)
+#define IMoniker_ParseDisplayName(This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut)
+#define IMoniker_IsSystemMoniker(This,pdwMksys) (This)->lpVtbl->IsSystemMoniker(This,pdwMksys)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMoniker_RemoteBindToObject_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    REFIID riidResult,
+    IUnknown **ppvResult);
+void __RPC_STUB IMoniker_RemoteBindToObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_RemoteBindToStorage_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    REFIID riid,
+    IUnknown **ppvObj);
+void __RPC_STUB IMoniker_RemoteBindToStorage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Reduce_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    DWORD dwReduceHowFar,
+    IMoniker **ppmkToLeft,
+    IMoniker **ppmkReduced);
+void __RPC_STUB IMoniker_Reduce_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_ComposeWith_Proxy(
+    IMoniker* This,
+    IMoniker *pmkRight,
+    BOOL fOnlyIfNotGeneric,
+    IMoniker **ppmkComposite);
+void __RPC_STUB IMoniker_ComposeWith_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Enum_Proxy(
+    IMoniker* This,
+    BOOL fForward,
+    IEnumMoniker **ppenumMoniker);
+void __RPC_STUB IMoniker_Enum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_IsEqual_Proxy(
+    IMoniker* This,
+    IMoniker *pmkOtherMoniker);
+void __RPC_STUB IMoniker_IsEqual_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Hash_Proxy(
+    IMoniker* This,
+    DWORD *pdwHash);
+void __RPC_STUB IMoniker_Hash_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_IsRunning_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    IMoniker *pmkNewlyRunning);
+void __RPC_STUB IMoniker_IsRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_GetTimeOfLastChange_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    FILETIME *pFileTime);
+void __RPC_STUB IMoniker_GetTimeOfLastChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Inverse_Proxy(
+    IMoniker* This,
+    IMoniker **ppmk);
+void __RPC_STUB IMoniker_Inverse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_CommonPrefixWith_Proxy(
+    IMoniker* This,
+    IMoniker *pmkOther,
+    IMoniker **ppmkPrefix);
+void __RPC_STUB IMoniker_CommonPrefixWith_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_RelativePathTo_Proxy(
+    IMoniker* This,
+    IMoniker *pmkOther,
+    IMoniker **ppmkRelPath);
+void __RPC_STUB IMoniker_RelativePathTo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_GetDisplayName_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    LPOLESTR *ppszDisplayName);
+void __RPC_STUB IMoniker_GetDisplayName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_ParseDisplayName_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    LPOLESTR pszDisplayName,
+    ULONG *pchEaten,
+    IMoniker **ppmkOut);
+void __RPC_STUB IMoniker_ParseDisplayName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_IsSystemMoniker_Proxy(
+    IMoniker* This,
+    DWORD *pdwMksys);
+void __RPC_STUB IMoniker_IsSystemMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IMoniker_BindToObject_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    REFIID riidResult,
+    void **ppvResult);
+HRESULT __RPC_STUB IMoniker_BindToObject_Stub(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    REFIID riidResult,
+    IUnknown **ppvResult);
+HRESULT CALLBACK IMoniker_BindToStorage_Proxy(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    REFIID riid,
+    void **ppvObj);
+HRESULT __RPC_STUB IMoniker_BindToStorage_Stub(
+    IMoniker* This,
+    IBindCtx *pbc,
+    IMoniker *pmkToLeft,
+    REFIID riid,
+    IUnknown **ppvObj);
+
+#endif  /* __IMoniker_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IROTData interface
+ */
+#ifndef __IROTData_INTERFACE_DEFINED__
+#define __IROTData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IROTData, 0xf29f6bc0, 0x5021, 0x11ce, 0xaa,0x15, 0x00,0x00,0x69,0x01,0x29,0x3f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IROTData : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetComparisonData(
+        byte *pbData,
+        ULONG cbMax,
+        ULONG *pcbData) = 0;
+
+};
+#else
+typedef struct IROTDataVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IROTData* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IROTData* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IROTData* This);
+
+    /*** IROTData methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetComparisonData)(
+        IROTData* This,
+        byte *pbData,
+        ULONG cbMax,
+        ULONG *pcbData);
+
+    END_INTERFACE
+} IROTDataVtbl;
+interface IROTData {
+    CONST_VTBL IROTDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IROTData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IROTData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IROTData_Release(This) (This)->lpVtbl->Release(This)
+/*** IROTData methods ***/
+#define IROTData_GetComparisonData(This,pbData,cbMax,pcbData) (This)->lpVtbl->GetComparisonData(This,pbData,cbMax,pcbData)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IROTData_GetComparisonData_Proxy(
+    IROTData* This,
+    byte *pbData,
+    ULONG cbMax,
+    ULONG *pcbData);
+void __RPC_STUB IROTData_GetComparisonData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IROTData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumString interface
+ */
+#ifndef __IEnumString_INTERFACE_DEFINED__
+#define __IEnumString_INTERFACE_DEFINED__
+
+typedef IEnumString *LPENUMSTRING;
+DEFINE_GUID(IID_IEnumString, 0x00000101, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumString : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        LPOLESTR *rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumString **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumStringVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumString* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumString* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumString* This);
+
+    /*** IEnumString methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumString* This,
+        ULONG celt,
+        LPOLESTR *rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumString* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumString* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumString* This,
+        IEnumString **ppenum);
+
+    END_INTERFACE
+} IEnumStringVtbl;
+interface IEnumString {
+    CONST_VTBL IEnumStringVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumString_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumString_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumString_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumString methods ***/
+#define IEnumString_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumString_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumString_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumString_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumString_RemoteNext_Proxy(
+    IEnumString* This,
+    ULONG celt,
+    LPOLESTR *rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumString_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumString_Skip_Proxy(
+    IEnumString* This,
+    ULONG celt);
+void __RPC_STUB IEnumString_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumString_Reset_Proxy(
+    IEnumString* This);
+void __RPC_STUB IEnumString_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumString_Clone_Proxy(
+    IEnumString* This,
+    IEnumString **ppenum);
+void __RPC_STUB IEnumString_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumString_Next_Proxy(
+    IEnumString* This,
+    ULONG celt,
+    LPOLESTR *rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumString_Next_Stub(
+    IEnumString* This,
+    ULONG celt,
+    LPOLESTR *rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumString_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IClassActivator interface
+ */
+#ifndef __IClassActivator_INTERFACE_DEFINED__
+#define __IClassActivator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IClassActivator, 0x00000140, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IClassActivator : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClassObject(
+        REFCLSID rclsid,
+        DWORD dwClassContext,
+        LCID locale,
+        REFIID riid,
+        void **ppv) = 0;
+
+};
+#else
+typedef struct IClassActivatorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IClassActivator* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IClassActivator* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IClassActivator* This);
+
+    /*** IClassActivator methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassObject)(
+        IClassActivator* This,
+        REFCLSID rclsid,
+        DWORD dwClassContext,
+        LCID locale,
+        REFIID riid,
+        void **ppv);
+
+    END_INTERFACE
+} IClassActivatorVtbl;
+interface IClassActivator {
+    CONST_VTBL IClassActivatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IClassActivator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IClassActivator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IClassActivator_Release(This) (This)->lpVtbl->Release(This)
+/*** IClassActivator methods ***/
+#define IClassActivator_GetClassObject(This,rclsid,dwClassContext,locale,riid,ppv) (This)->lpVtbl->GetClassObject(This,rclsid,dwClassContext,locale,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IClassActivator_GetClassObject_Proxy(
+    IClassActivator* This,
+    REFCLSID rclsid,
+    DWORD dwClassContext,
+    LCID locale,
+    REFIID riid,
+    void **ppv);
+void __RPC_STUB IClassActivator_GetClassObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IClassActivator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISequentialStream interface
+ */
+#ifndef __ISequentialStream_INTERFACE_DEFINED__
+#define __ISequentialStream_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISequentialStream, 0x0c733a30, 0x2a1c, 0x11ce, 0xad,0xe5, 0x00,0xaa,0x00,0x44,0x77,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISequentialStream : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Read(
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Write(
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten) = 0;
+
+};
+#else
+typedef struct ISequentialStreamVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISequentialStream* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISequentialStream* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISequentialStream* This);
+
+    /*** ISequentialStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *Read)(
+        ISequentialStream* This,
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead);
+
+    HRESULT (STDMETHODCALLTYPE *Write)(
+        ISequentialStream* This,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten);
+
+    END_INTERFACE
+} ISequentialStreamVtbl;
+interface ISequentialStream {
+    CONST_VTBL ISequentialStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISequentialStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISequentialStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISequentialStream_Release(This) (This)->lpVtbl->Release(This)
+/*** ISequentialStream methods ***/
+#define ISequentialStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define ISequentialStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISequentialStream_RemoteRead_Proxy(
+    ISequentialStream* This,
+    byte *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+void __RPC_STUB ISequentialStream_RemoteRead_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISequentialStream_RemoteWrite_Proxy(
+    ISequentialStream* This,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+void __RPC_STUB ISequentialStream_RemoteWrite_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ISequentialStream_Read_Proxy(
+    ISequentialStream* This,
+    void *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+HRESULT __RPC_STUB ISequentialStream_Read_Stub(
+    ISequentialStream* This,
+    byte *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+HRESULT CALLBACK ISequentialStream_Write_Proxy(
+    ISequentialStream* This,
+    const void *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+HRESULT __RPC_STUB ISequentialStream_Write_Stub(
+    ISequentialStream* This,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+
+#endif  /* __ISequentialStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStream interface
+ */
+#ifndef __IStream_INTERFACE_DEFINED__
+#define __IStream_INTERFACE_DEFINED__
+
+typedef IStream *LPSTREAM;
+typedef struct tagSTATSTG {
+    LPOLESTR pwcsName;
+    DWORD type;
+    ULARGE_INTEGER cbSize;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD grfMode;
+    DWORD grfLocksSupported;
+    CLSID clsid;
+    DWORD grfStateBits;
+    DWORD reserved;
+} STATSTG;
+typedef enum tagSTGTY {
+    STGTY_STORAGE = 1,
+    STGTY_STREAM = 2,
+    STGTY_LOCKBYTES = 3,
+    STGTY_PROPERTY = 4
+} STGTY;
+typedef enum tagSTREAM_SEEK {
+    STREAM_SEEK_SET = 0,
+    STREAM_SEEK_CUR = 1,
+    STREAM_SEEK_END = 2
+} STREAM_SEEK;
+#undef LOCK_MAND
+#undef LOCK_READ
+#undef LOCK_WRITE
+#undef LOCK_RW
+typedef enum tagLOCKTYPE {
+    LOCK_WRITE = 1,
+    LOCK_EXCLUSIVE = 2,
+    LOCK_ONLYONCE = 4
+} LOCKTYPE;
+DEFINE_GUID(IID_IStream, 0x0000000c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IStream : public ISequentialStream
+{
+    virtual HRESULT STDMETHODCALLTYPE Seek(
+        LARGE_INTEGER dlibMove,
+        DWORD dwOrigin,
+        ULARGE_INTEGER *plibNewPosition) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSize(
+        ULARGE_INTEGER libNewSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CopyTo(
+        IStream *pstm,
+        ULARGE_INTEGER cb,
+        ULARGE_INTEGER *pcbRead,
+        ULARGE_INTEGER *pcbWritten) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Commit(
+        DWORD grfCommitFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Revert(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRegion(
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stat(
+        STATSTG *pstatstg,
+        DWORD grfStatFlag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IStream **ppstm) = 0;
+
+};
+#else
+typedef struct IStreamVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IStream* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IStream* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IStream* This);
+
+    /*** ISequentialStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *Read)(
+        IStream* This,
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead);
+
+    HRESULT (STDMETHODCALLTYPE *Write)(
+        IStream* This,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten);
+
+    /*** IStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *Seek)(
+        IStream* This,
+        LARGE_INTEGER dlibMove,
+        DWORD dwOrigin,
+        ULARGE_INTEGER *plibNewPosition);
+
+    HRESULT (STDMETHODCALLTYPE *SetSize)(
+        IStream* This,
+        ULARGE_INTEGER libNewSize);
+
+    HRESULT (STDMETHODCALLTYPE *CopyTo)(
+        IStream* This,
+        IStream *pstm,
+        ULARGE_INTEGER cb,
+        ULARGE_INTEGER *pcbRead,
+        ULARGE_INTEGER *pcbWritten);
+
+    HRESULT (STDMETHODCALLTYPE *Commit)(
+        IStream* This,
+        DWORD grfCommitFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Revert)(
+        IStream* This);
+
+    HRESULT (STDMETHODCALLTYPE *LockRegion)(
+        IStream* This,
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
+        IStream* This,
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType);
+
+    HRESULT (STDMETHODCALLTYPE *Stat)(
+        IStream* This,
+        STATSTG *pstatstg,
+        DWORD grfStatFlag);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IStream* This,
+        IStream **ppstm);
+
+    END_INTERFACE
+} IStreamVtbl;
+interface IStream {
+    CONST_VTBL IStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStream_Release(This) (This)->lpVtbl->Release(This)
+/*** ISequentialStream methods ***/
+#define IStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
+/*** IStream methods ***/
+#define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IStream_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
+#define IStream_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
+#define IStream_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IStream_Revert(This) (This)->lpVtbl->Revert(This)
+#define IStream_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
+#define IStream_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
+#define IStream_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#define IStream_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IStream_RemoteSeek_Proxy(
+    IStream* This,
+    LARGE_INTEGER dlibMove,
+    DWORD dwOrigin,
+    ULARGE_INTEGER *plibNewPosition);
+void __RPC_STUB IStream_RemoteSeek_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_SetSize_Proxy(
+    IStream* This,
+    ULARGE_INTEGER libNewSize);
+void __RPC_STUB IStream_SetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_RemoteCopyTo_Proxy(
+    IStream* This,
+    IStream *pstm,
+    ULARGE_INTEGER cb,
+    ULARGE_INTEGER *pcbRead,
+    ULARGE_INTEGER *pcbWritten);
+void __RPC_STUB IStream_RemoteCopyTo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Commit_Proxy(
+    IStream* This,
+    DWORD grfCommitFlags);
+void __RPC_STUB IStream_Commit_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Revert_Proxy(
+    IStream* This);
+void __RPC_STUB IStream_Revert_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_LockRegion_Proxy(
+    IStream* This,
+    ULARGE_INTEGER libOffset,
+    ULARGE_INTEGER cb,
+    DWORD dwLockType);
+void __RPC_STUB IStream_LockRegion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_UnlockRegion_Proxy(
+    IStream* This,
+    ULARGE_INTEGER libOffset,
+    ULARGE_INTEGER cb,
+    DWORD dwLockType);
+void __RPC_STUB IStream_UnlockRegion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Stat_Proxy(
+    IStream* This,
+    STATSTG *pstatstg,
+    DWORD grfStatFlag);
+void __RPC_STUB IStream_Stat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Clone_Proxy(
+    IStream* This,
+    IStream **ppstm);
+void __RPC_STUB IStream_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IStream_Seek_Proxy(
+    IStream* This,
+    LARGE_INTEGER dlibMove,
+    DWORD dwOrigin,
+    ULARGE_INTEGER *plibNewPosition);
+HRESULT __RPC_STUB IStream_Seek_Stub(
+    IStream* This,
+    LARGE_INTEGER dlibMove,
+    DWORD dwOrigin,
+    ULARGE_INTEGER *plibNewPosition);
+HRESULT CALLBACK IStream_CopyTo_Proxy(
+    IStream* This,
+    IStream *pstm,
+    ULARGE_INTEGER cb,
+    ULARGE_INTEGER *pcbRead,
+    ULARGE_INTEGER *pcbWritten);
+HRESULT __RPC_STUB IStream_CopyTo_Stub(
+    IStream* This,
+    IStream *pstm,
+    ULARGE_INTEGER cb,
+    ULARGE_INTEGER *pcbRead,
+    ULARGE_INTEGER *pcbWritten);
+
+#endif  /* __IStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATSTG interface
+ */
+#ifndef __IEnumSTATSTG_INTERFACE_DEFINED__
+#define __IEnumSTATSTG_INTERFACE_DEFINED__
+
+typedef IEnumSTATSTG *LPENUMSTATSTG;
+DEFINE_GUID(IID_IEnumSTATSTG, 0x0000000d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATSTG : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        STATSTG *rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumSTATSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATSTGVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumSTATSTG* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumSTATSTG* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumSTATSTG* This);
+
+    /*** IEnumSTATSTG methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumSTATSTG* This,
+        ULONG celt,
+        STATSTG *rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumSTATSTG* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumSTATSTG* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumSTATSTG* This,
+        IEnumSTATSTG **ppenum);
+
+    END_INTERFACE
+} IEnumSTATSTGVtbl;
+interface IEnumSTATSTG {
+    CONST_VTBL IEnumSTATSTGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATSTG_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATSTG_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATSTG methods ***/
+#define IEnumSTATSTG_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_RemoteNext_Proxy(
+    IEnumSTATSTG* This,
+    ULONG celt,
+    STATSTG *rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATSTG_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Skip_Proxy(
+    IEnumSTATSTG* This,
+    ULONG celt);
+void __RPC_STUB IEnumSTATSTG_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Reset_Proxy(
+    IEnumSTATSTG* This);
+void __RPC_STUB IEnumSTATSTG_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Clone_Proxy(
+    IEnumSTATSTG* This,
+    IEnumSTATSTG **ppenum);
+void __RPC_STUB IEnumSTATSTG_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATSTG_Next_Proxy(
+    IEnumSTATSTG* This,
+    ULONG celt,
+    STATSTG *rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATSTG_Next_Stub(
+    IEnumSTATSTG* This,
+    ULONG celt,
+    STATSTG *rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumSTATSTG_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStorage interface
+ */
+#ifndef __IStorage_INTERFACE_DEFINED__
+#define __IStorage_INTERFACE_DEFINED__
+
+typedef IStorage *LPSTORAGE;
+typedef struct tagRemSNB {
+    ULONG ulCntStr;
+    ULONG ulCntChar;
+    OLECHAR rgString[1];
+} RemSNB;
+typedef RemSNB *wireSNB;
+typedef OLECHAR **SNB;
+DEFINE_GUID(IID_IStorage, 0x0000000b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IStorage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateStream(
+        LPCOLESTR pwcsName,
+        DWORD grfMode,
+        DWORD reserved1,
+        DWORD reserved2,
+        IStream **ppstm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenStream(
+        LPCOLESTR pwcsName,
+        void *reserved1,
+        DWORD grfMode,
+        DWORD reserved2,
+        IStream **ppstm) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStorage(
+        LPCOLESTR pwcsName,
+        DWORD grfMode,
+        DWORD dwStgFmt,
+        DWORD reserved2,
+        IStorage **ppstg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenStorage(
+        LPCOLESTR pwcsName,
+        IStorage *pstgPriority,
+        DWORD grfMode,
+        SNB snbExclude,
+        DWORD reserved,
+        IStorage **ppstg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CopyTo(
+        DWORD ciidExclude,
+        const IID *rgiidExclude,
+        SNB snbExclude,
+        IStorage *pstgDest) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MoveElementTo(
+        LPCOLESTR pwcsName,
+        IStorage *pstgDest,
+        LPCOLESTR pwcsNewName,
+        DWORD grfFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Commit(
+        DWORD grfCommitFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Revert(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumElements(
+        DWORD reserved1,
+        void *reserved2,
+        DWORD reserved3,
+        IEnumSTATSTG **ppenum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DestroyElement(
+        LPCOLESTR pwcsName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RenameElement(
+        LPCOLESTR pwcsOldName,
+        LPCOLESTR pwcsNewName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetElementTimes(
+        LPCOLESTR pwcsName,
+        const FILETIME *pctime,
+        const FILETIME *patime,
+        const FILETIME *pmtime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClass(
+        REFCLSID clsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStateBits(
+        DWORD grfStateBits,
+        DWORD grfMask) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stat(
+        STATSTG *pstatstg,
+        DWORD grfStatFlag) = 0;
+
+};
+#else
+typedef struct IStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IStorage* This);
+
+    /*** IStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateStream)(
+        IStorage* This,
+        LPCOLESTR pwcsName,
+        DWORD grfMode,
+        DWORD reserved1,
+        DWORD reserved2,
+        IStream **ppstm);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStream)(
+        IStorage* This,
+        LPCOLESTR pwcsName,
+        void *reserved1,
+        DWORD grfMode,
+        DWORD reserved2,
+        IStream **ppstm);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStorage)(
+        IStorage* This,
+        LPCOLESTR pwcsName,
+        DWORD grfMode,
+        DWORD dwStgFmt,
+        DWORD reserved2,
+        IStorage **ppstg);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStorage)(
+        IStorage* This,
+        LPCOLESTR pwcsName,
+        IStorage *pstgPriority,
+        DWORD grfMode,
+        SNB snbExclude,
+        DWORD reserved,
+        IStorage **ppstg);
+
+    HRESULT (STDMETHODCALLTYPE *CopyTo)(
+        IStorage* This,
+        DWORD ciidExclude,
+        const IID *rgiidExclude,
+        SNB snbExclude,
+        IStorage *pstgDest);
+
+    HRESULT (STDMETHODCALLTYPE *MoveElementTo)(
+        IStorage* This,
+        LPCOLESTR pwcsName,
+        IStorage *pstgDest,
+        LPCOLESTR pwcsNewName,
+        DWORD grfFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Commit)(
+        IStorage* This,
+        DWORD grfCommitFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Revert)(
+        IStorage* This);
+
+    HRESULT (STDMETHODCALLTYPE *EnumElements)(
+        IStorage* This,
+        DWORD reserved1,
+        void *reserved2,
+        DWORD reserved3,
+        IEnumSTATSTG **ppenum);
+
+    HRESULT (STDMETHODCALLTYPE *DestroyElement)(
+        IStorage* This,
+        LPCOLESTR pwcsName);
+
+    HRESULT (STDMETHODCALLTYPE *RenameElement)(
+        IStorage* This,
+        LPCOLESTR pwcsOldName,
+        LPCOLESTR pwcsNewName);
+
+    HRESULT (STDMETHODCALLTYPE *SetElementTimes)(
+        IStorage* This,
+        LPCOLESTR pwcsName,
+        const FILETIME *pctime,
+        const FILETIME *patime,
+        const FILETIME *pmtime);
+
+    HRESULT (STDMETHODCALLTYPE *SetClass)(
+        IStorage* This,
+        REFCLSID clsid);
+
+    HRESULT (STDMETHODCALLTYPE *SetStateBits)(
+        IStorage* This,
+        DWORD grfStateBits,
+        DWORD grfMask);
+
+    HRESULT (STDMETHODCALLTYPE *Stat)(
+        IStorage* This,
+        STATSTG *pstatstg,
+        DWORD grfStatFlag);
+
+    END_INTERFACE
+} IStorageVtbl;
+interface IStorage {
+    CONST_VTBL IStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IStorage methods ***/
+#define IStorage_CreateStream(This,pwcsName,grfMode,reserved1,reserved2,ppstm) (This)->lpVtbl->CreateStream(This,pwcsName,grfMode,reserved1,reserved2,ppstm)
+#define IStorage_OpenStream(This,pwcsName,reserved1,grfMode,reserved2,ppstm) (This)->lpVtbl->OpenStream(This,pwcsName,reserved1,grfMode,reserved2,ppstm)
+#define IStorage_CreateStorage(This,pwcsName,grfMode,dwStgFmt,reserved2,ppstg) (This)->lpVtbl->CreateStorage(This,pwcsName,grfMode,dwStgFmt,reserved2,ppstg)
+#define IStorage_OpenStorage(This,pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstg) (This)->lpVtbl->OpenStorage(This,pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstg)
+#define IStorage_CopyTo(This,ciidExclude,rgiidExclude,snbExclude,pstgDest) (This)->lpVtbl->CopyTo(This,ciidExclude,rgiidExclude,snbExclude,pstgDest)
+#define IStorage_MoveElementTo(This,pwcsName,pstgDest,pwcsNewName,grfFlags) (This)->lpVtbl->MoveElementTo(This,pwcsName,pstgDest,pwcsNewName,grfFlags)
+#define IStorage_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IStorage_Revert(This) (This)->lpVtbl->Revert(This)
+#define IStorage_EnumElements(This,reserved1,reserved2,reserved3,ppenum) (This)->lpVtbl->EnumElements(This,reserved1,reserved2,reserved3,ppenum)
+#define IStorage_DestroyElement(This,pwcsName) (This)->lpVtbl->DestroyElement(This,pwcsName)
+#define IStorage_RenameElement(This,pwcsOldName,pwcsNewName) (This)->lpVtbl->RenameElement(This,pwcsOldName,pwcsNewName)
+#define IStorage_SetElementTimes(This,pwcsName,pctime,patime,pmtime) (This)->lpVtbl->SetElementTimes(This,pwcsName,pctime,patime,pmtime)
+#define IStorage_SetClass(This,clsid) (This)->lpVtbl->SetClass(This,clsid)
+#define IStorage_SetStateBits(This,grfStateBits,grfMask) (This)->lpVtbl->SetStateBits(This,grfStateBits,grfMask)
+#define IStorage_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IStorage_CreateStream_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    DWORD grfMode,
+    DWORD reserved1,
+    DWORD reserved2,
+    IStream **ppstm);
+void __RPC_STUB IStorage_CreateStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_RemoteOpenStream_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    ULONG cbReserved1,
+    byte *reserved1,
+    DWORD grfMode,
+    DWORD reserved2,
+    IStream **ppstm);
+void __RPC_STUB IStorage_RemoteOpenStream_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_CreateStorage_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    DWORD grfMode,
+    DWORD dwStgFmt,
+    DWORD reserved2,
+    IStorage **ppstg);
+void __RPC_STUB IStorage_CreateStorage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_OpenStorage_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    IStorage *pstgPriority,
+    DWORD grfMode,
+    SNB snbExclude,
+    DWORD reserved,
+    IStorage **ppstg);
+void __RPC_STUB IStorage_OpenStorage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_CopyTo_Proxy(
+    IStorage* This,
+    DWORD ciidExclude,
+    const IID *rgiidExclude,
+    SNB snbExclude,
+    IStorage *pstgDest);
+void __RPC_STUB IStorage_CopyTo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_MoveElementTo_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    IStorage *pstgDest,
+    LPCOLESTR pwcsNewName,
+    DWORD grfFlags);
+void __RPC_STUB IStorage_MoveElementTo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_Commit_Proxy(
+    IStorage* This,
+    DWORD grfCommitFlags);
+void __RPC_STUB IStorage_Commit_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_Revert_Proxy(
+    IStorage* This);
+void __RPC_STUB IStorage_Revert_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_RemoteEnumElements_Proxy(
+    IStorage* This,
+    DWORD reserved1,
+    ULONG cbReserved2,
+    byte *reserved2,
+    DWORD reserved3,
+    IEnumSTATSTG **ppenum);
+void __RPC_STUB IStorage_RemoteEnumElements_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_DestroyElement_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName);
+void __RPC_STUB IStorage_DestroyElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_RenameElement_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsOldName,
+    LPCOLESTR pwcsNewName);
+void __RPC_STUB IStorage_RenameElement_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_SetElementTimes_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    const FILETIME *pctime,
+    const FILETIME *patime,
+    const FILETIME *pmtime);
+void __RPC_STUB IStorage_SetElementTimes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_SetClass_Proxy(
+    IStorage* This,
+    REFCLSID clsid);
+void __RPC_STUB IStorage_SetClass_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_SetStateBits_Proxy(
+    IStorage* This,
+    DWORD grfStateBits,
+    DWORD grfMask);
+void __RPC_STUB IStorage_SetStateBits_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_Stat_Proxy(
+    IStorage* This,
+    STATSTG *pstatstg,
+    DWORD grfStatFlag);
+void __RPC_STUB IStorage_Stat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IStorage_OpenStream_Proxy(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    void *reserved1,
+    DWORD grfMode,
+    DWORD reserved2,
+    IStream **ppstm);
+HRESULT __RPC_STUB IStorage_OpenStream_Stub(
+    IStorage* This,
+    LPCOLESTR pwcsName,
+    ULONG cbReserved1,
+    byte *reserved1,
+    DWORD grfMode,
+    DWORD reserved2,
+    IStream **ppstm);
+HRESULT CALLBACK IStorage_EnumElements_Proxy(
+    IStorage* This,
+    DWORD reserved1,
+    void *reserved2,
+    DWORD reserved3,
+    IEnumSTATSTG **ppenum);
+HRESULT __RPC_STUB IStorage_EnumElements_Stub(
+    IStorage* This,
+    DWORD reserved1,
+    ULONG cbReserved2,
+    byte *reserved2,
+    DWORD reserved3,
+    IEnumSTATSTG **ppenum);
+
+#endif  /* __IStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistFile interface
+ */
+#ifndef __IPersistFile_INTERFACE_DEFINED__
+#define __IPersistFile_INTERFACE_DEFINED__
+
+typedef IPersistFile *LPPERSISTFILE;
+DEFINE_GUID(IID_IPersistFile, 0x0000010b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistFile : public IPersist
+{
+    virtual HRESULT STDMETHODCALLTYPE IsDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Load(
+        LPCOLESTR pszFileName,
+        DWORD dwMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        LPCOLESTR pszFileName,
+        BOOL fRemember) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
+        LPCOLESTR pszFileName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurFile(
+        LPOLESTR *ppszFileName) = 0;
+
+};
+#else
+typedef struct IPersistFileVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistFile* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistFile* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistFile* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersistFile* This,
+        CLSID *pClassID);
+
+    /*** IPersistFile methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsDirty)(
+        IPersistFile* This);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IPersistFile* This,
+        LPCOLESTR pszFileName,
+        DWORD dwMode);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IPersistFile* This,
+        LPCOLESTR pszFileName,
+        BOOL fRemember);
+
+    HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
+        IPersistFile* This,
+        LPCOLESTR pszFileName);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurFile)(
+        IPersistFile* This,
+        LPOLESTR *ppszFileName);
+
+    END_INTERFACE
+} IPersistFileVtbl;
+interface IPersistFile {
+    CONST_VTBL IPersistFileVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistFile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistFile_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistFile_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistFile methods ***/
+#define IPersistFile_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistFile_Load(This,pszFileName,dwMode) (This)->lpVtbl->Load(This,pszFileName,dwMode)
+#define IPersistFile_Save(This,pszFileName,fRemember) (This)->lpVtbl->Save(This,pszFileName,fRemember)
+#define IPersistFile_SaveCompleted(This,pszFileName) (This)->lpVtbl->SaveCompleted(This,pszFileName)
+#define IPersistFile_GetCurFile(This,ppszFileName) (This)->lpVtbl->GetCurFile(This,ppszFileName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistFile_IsDirty_Proxy(
+    IPersistFile* This);
+void __RPC_STUB IPersistFile_IsDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_Load_Proxy(
+    IPersistFile* This,
+    LPCOLESTR pszFileName,
+    DWORD dwMode);
+void __RPC_STUB IPersistFile_Load_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_Save_Proxy(
+    IPersistFile* This,
+    LPCOLESTR pszFileName,
+    BOOL fRemember);
+void __RPC_STUB IPersistFile_Save_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_SaveCompleted_Proxy(
+    IPersistFile* This,
+    LPCOLESTR pszFileName);
+void __RPC_STUB IPersistFile_SaveCompleted_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_GetCurFile_Proxy(
+    IPersistFile* This,
+    LPOLESTR *ppszFileName);
+void __RPC_STUB IPersistFile_GetCurFile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistFile_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistStorage interface
+ */
+#ifndef __IPersistStorage_INTERFACE_DEFINED__
+#define __IPersistStorage_INTERFACE_DEFINED__
+
+typedef IPersistStorage *LPPERSISTSTORAGE;
+DEFINE_GUID(IID_IPersistStorage, 0x0000010a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistStorage : public IPersist
+{
+    virtual HRESULT STDMETHODCALLTYPE IsDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitNew(
+        IStorage *pStg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Load(
+        IStorage *pStg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        IStorage *pStgSave,
+        BOOL fSameAsLoad) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
+        IStorage *pStgNew) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HandsOffStorage(
+        ) = 0;
+
+};
+#else
+typedef struct IPersistStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistStorage* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersistStorage* This,
+        CLSID *pClassID);
+
+    /*** IPersistStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsDirty)(
+        IPersistStorage* This);
+
+    HRESULT (STDMETHODCALLTYPE *InitNew)(
+        IPersistStorage* This,
+        IStorage *pStg);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IPersistStorage* This,
+        IStorage *pStg);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IPersistStorage* This,
+        IStorage *pStgSave,
+        BOOL fSameAsLoad);
+
+    HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
+        IPersistStorage* This,
+        IStorage *pStgNew);
+
+    HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
+        IPersistStorage* This);
+
+    END_INTERFACE
+} IPersistStorageVtbl;
+interface IPersistStorage {
+    CONST_VTBL IPersistStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistStorage_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistStorage methods ***/
+#define IPersistStorage_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistStorage_InitNew(This,pStg) (This)->lpVtbl->InitNew(This,pStg)
+#define IPersistStorage_Load(This,pStg) (This)->lpVtbl->Load(This,pStg)
+#define IPersistStorage_Save(This,pStgSave,fSameAsLoad) (This)->lpVtbl->Save(This,pStgSave,fSameAsLoad)
+#define IPersistStorage_SaveCompleted(This,pStgNew) (This)->lpVtbl->SaveCompleted(This,pStgNew)
+#define IPersistStorage_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistStorage_IsDirty_Proxy(
+    IPersistStorage* This);
+void __RPC_STUB IPersistStorage_IsDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_InitNew_Proxy(
+    IPersistStorage* This,
+    IStorage *pStg);
+void __RPC_STUB IPersistStorage_InitNew_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_Load_Proxy(
+    IPersistStorage* This,
+    IStorage *pStg);
+void __RPC_STUB IPersistStorage_Load_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_Save_Proxy(
+    IPersistStorage* This,
+    IStorage *pStgSave,
+    BOOL fSameAsLoad);
+void __RPC_STUB IPersistStorage_Save_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_SaveCompleted_Proxy(
+    IPersistStorage* This,
+    IStorage *pStgNew);
+void __RPC_STUB IPersistStorage_SaveCompleted_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_HandsOffStorage_Proxy(
+    IPersistStorage* This);
+void __RPC_STUB IPersistStorage_HandsOffStorage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRootStorage interface
+ */
+#ifndef __IRootStorage_INTERFACE_DEFINED__
+#define __IRootStorage_INTERFACE_DEFINED__
+
+typedef IRootStorage *LPROOTSTORAGE;
+DEFINE_GUID(IID_IRootStorage, 0x00000012, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRootStorage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SwitchToFile(
+        LPOLESTR pszFile) = 0;
+
+};
+#else
+typedef struct IRootStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRootStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRootStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRootStorage* This);
+
+    /*** IRootStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *SwitchToFile)(
+        IRootStorage* This,
+        LPOLESTR pszFile);
+
+    END_INTERFACE
+} IRootStorageVtbl;
+interface IRootStorage {
+    CONST_VTBL IRootStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRootStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRootStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRootStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IRootStorage methods ***/
+#define IRootStorage_SwitchToFile(This,pszFile) (This)->lpVtbl->SwitchToFile(This,pszFile)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRootStorage_SwitchToFile_Proxy(
+    IRootStorage* This,
+    LPOLESTR pszFile);
+void __RPC_STUB IRootStorage_SwitchToFile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRootStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ILockBytes interface
+ */
+#ifndef __ILockBytes_INTERFACE_DEFINED__
+#define __ILockBytes_INTERFACE_DEFINED__
+
+typedef ILockBytes *LPLOCKBYTES;
+DEFINE_GUID(IID_ILockBytes, 0x0000000a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ILockBytes : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ReadAt(
+        ULARGE_INTEGER ulOffset,
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WriteAt(
+        ULARGE_INTEGER ulOffset,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSize(
+        ULARGE_INTEGER cb) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRegion(
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stat(
+        STATSTG *pstatstg,
+        DWORD grfStatFlag) = 0;
+
+};
+#else
+typedef struct ILockBytesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ILockBytes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ILockBytes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ILockBytes* This);
+
+    /*** ILockBytes methods ***/
+    HRESULT (STDMETHODCALLTYPE *ReadAt)(
+        ILockBytes* This,
+        ULARGE_INTEGER ulOffset,
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead);
+
+    HRESULT (STDMETHODCALLTYPE *WriteAt)(
+        ILockBytes* This,
+        ULARGE_INTEGER ulOffset,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten);
+
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        ILockBytes* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetSize)(
+        ILockBytes* This,
+        ULARGE_INTEGER cb);
+
+    HRESULT (STDMETHODCALLTYPE *LockRegion)(
+        ILockBytes* This,
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
+        ILockBytes* This,
+        ULARGE_INTEGER libOffset,
+        ULARGE_INTEGER cb,
+        DWORD dwLockType);
+
+    HRESULT (STDMETHODCALLTYPE *Stat)(
+        ILockBytes* This,
+        STATSTG *pstatstg,
+        DWORD grfStatFlag);
+
+    END_INTERFACE
+} ILockBytesVtbl;
+interface ILockBytes {
+    CONST_VTBL ILockBytesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ILockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILockBytes_Release(This) (This)->lpVtbl->Release(This)
+/*** ILockBytes methods ***/
+#define ILockBytes_ReadAt(This,ulOffset,pv,cb,pcbRead) (This)->lpVtbl->ReadAt(This,ulOffset,pv,cb,pcbRead)
+#define ILockBytes_WriteAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->WriteAt(This,ulOffset,pv,cb,pcbWritten)
+#define ILockBytes_Flush(This) (This)->lpVtbl->Flush(This)
+#define ILockBytes_SetSize(This,cb) (This)->lpVtbl->SetSize(This,cb)
+#define ILockBytes_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
+#define ILockBytes_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
+#define ILockBytes_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ILockBytes_RemoteReadAt_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    byte *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+void __RPC_STUB ILockBytes_RemoteReadAt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_RemoteWriteAt_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+void __RPC_STUB ILockBytes_RemoteWriteAt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_Flush_Proxy(
+    ILockBytes* This);
+void __RPC_STUB ILockBytes_Flush_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_SetSize_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER cb);
+void __RPC_STUB ILockBytes_SetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_LockRegion_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER libOffset,
+    ULARGE_INTEGER cb,
+    DWORD dwLockType);
+void __RPC_STUB ILockBytes_LockRegion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_UnlockRegion_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER libOffset,
+    ULARGE_INTEGER cb,
+    DWORD dwLockType);
+void __RPC_STUB ILockBytes_UnlockRegion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_Stat_Proxy(
+    ILockBytes* This,
+    STATSTG *pstatstg,
+    DWORD grfStatFlag);
+void __RPC_STUB ILockBytes_Stat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ILockBytes_ReadAt_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    void *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+HRESULT __RPC_STUB ILockBytes_ReadAt_Stub(
+    ILockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    byte *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+HRESULT CALLBACK ILockBytes_WriteAt_Proxy(
+    ILockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    const void *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+HRESULT __RPC_STUB ILockBytes_WriteAt_Stub(
+    ILockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+
+#endif  /* __ILockBytes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IFillLockBytes interface
+ */
+#ifndef __IFillLockBytes_INTERFACE_DEFINED__
+#define __IFillLockBytes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IFillLockBytes, 0x99caf010, 0x415e, 0x11cf, 0x88,0x14, 0x00,0xaa,0x00,0xb5,0x69,0xf5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IFillLockBytes : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE FillAppend(
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FillAt(
+        ULARGE_INTEGER ulOffset,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFillSize(
+        ULARGE_INTEGER ulSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Terminate(
+        BOOL bCanceled) = 0;
+
+};
+#else
+typedef struct IFillLockBytesVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IFillLockBytes* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IFillLockBytes* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IFillLockBytes* This);
+
+    /*** IFillLockBytes methods ***/
+    HRESULT (STDMETHODCALLTYPE *FillAppend)(
+        IFillLockBytes* This,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten);
+
+    HRESULT (STDMETHODCALLTYPE *FillAt)(
+        IFillLockBytes* This,
+        ULARGE_INTEGER ulOffset,
+        const void *pv,
+        ULONG cb,
+        ULONG *pcbWritten);
+
+    HRESULT (STDMETHODCALLTYPE *SetFillSize)(
+        IFillLockBytes* This,
+        ULARGE_INTEGER ulSize);
+
+    HRESULT (STDMETHODCALLTYPE *Terminate)(
+        IFillLockBytes* This,
+        BOOL bCanceled);
+
+    END_INTERFACE
+} IFillLockBytesVtbl;
+interface IFillLockBytes {
+    CONST_VTBL IFillLockBytesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IFillLockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IFillLockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IFillLockBytes_Release(This) (This)->lpVtbl->Release(This)
+/*** IFillLockBytes methods ***/
+#define IFillLockBytes_FillAppend(This,pv,cb,pcbWritten) (This)->lpVtbl->FillAppend(This,pv,cb,pcbWritten)
+#define IFillLockBytes_FillAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->FillAt(This,ulOffset,pv,cb,pcbWritten)
+#define IFillLockBytes_SetFillSize(This,ulSize) (This)->lpVtbl->SetFillSize(This,ulSize)
+#define IFillLockBytes_Terminate(This,bCanceled) (This)->lpVtbl->Terminate(This,bCanceled)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IFillLockBytes_RemoteFillAppend_Proxy(
+    IFillLockBytes* This,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+void __RPC_STUB IFillLockBytes_RemoteFillAppend_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFillLockBytes_RemoteFillAt_Proxy(
+    IFillLockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+void __RPC_STUB IFillLockBytes_RemoteFillAt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFillLockBytes_SetFillSize_Proxy(
+    IFillLockBytes* This,
+    ULARGE_INTEGER ulSize);
+void __RPC_STUB IFillLockBytes_SetFillSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFillLockBytes_Terminate_Proxy(
+    IFillLockBytes* This,
+    BOOL bCanceled);
+void __RPC_STUB IFillLockBytes_Terminate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IFillLockBytes_FillAppend_Proxy(
+    IFillLockBytes* This,
+    const void *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+HRESULT __RPC_STUB IFillLockBytes_FillAppend_Stub(
+    IFillLockBytes* This,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+HRESULT CALLBACK IFillLockBytes_FillAt_Proxy(
+    IFillLockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    const void *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+HRESULT __RPC_STUB IFillLockBytes_FillAt_Stub(
+    IFillLockBytes* This,
+    ULARGE_INTEGER ulOffset,
+    const byte *pv,
+    ULONG cb,
+    ULONG *pcbWritten);
+
+#endif  /* __IFillLockBytes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IProgressNotify interface
+ */
+#ifndef __IProgressNotify_INTERFACE_DEFINED__
+#define __IProgressNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IProgressNotify, 0xa9d758a0, 0x4617, 0x11cf, 0x95,0xfc, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IProgressNotify : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnProgress(
+        DWORD dwProgressCurrent,
+        DWORD dwProgressMaximum,
+        BOOL fAccurate,
+        BOOL fOwner) = 0;
+
+};
+#else
+typedef struct IProgressNotifyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IProgressNotify* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IProgressNotify* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IProgressNotify* This);
+
+    /*** IProgressNotify methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnProgress)(
+        IProgressNotify* This,
+        DWORD dwProgressCurrent,
+        DWORD dwProgressMaximum,
+        BOOL fAccurate,
+        BOOL fOwner);
+
+    END_INTERFACE
+} IProgressNotifyVtbl;
+interface IProgressNotify {
+    CONST_VTBL IProgressNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IProgressNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IProgressNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IProgressNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** IProgressNotify methods ***/
+#define IProgressNotify_OnProgress(This,dwProgressCurrent,dwProgressMaximum,fAccurate,fOwner) (This)->lpVtbl->OnProgress(This,dwProgressCurrent,dwProgressMaximum,fAccurate,fOwner)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IProgressNotify_OnProgress_Proxy(
+    IProgressNotify* This,
+    DWORD dwProgressCurrent,
+    DWORD dwProgressMaximum,
+    BOOL fAccurate,
+    BOOL fOwner);
+void __RPC_STUB IProgressNotify_OnProgress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IProgressNotify_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ILayoutStorage interface
+ */
+#ifndef __ILayoutStorage_INTERFACE_DEFINED__
+#define __ILayoutStorage_INTERFACE_DEFINED__
+
+typedef struct tagStorageLayout {
+    DWORD LayoutType;
+    OLECHAR *pwcsElementName;
+    LARGE_INTEGER cOffset;
+    LARGE_INTEGER cBytes;
+} StorageLayout;
+DEFINE_GUID(IID_ILayoutStorage, 0x0e6d4d90, 0x6738, 0x11cf, 0x96,0x08, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ILayoutStorage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE LayoutScript(
+        StorageLayout *pStorageLayout,
+        DWORD nEntries,
+        DWORD glfInterleavedFlag) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginMonitor(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndMonitor(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReLayoutDocfile(
+        OLECHAR *pwcsNewDfName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReLayoutDocfileOnILockBytes(
+        ILockBytes *pILockBytes) = 0;
+
+};
+#else
+typedef struct ILayoutStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ILayoutStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ILayoutStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ILayoutStorage* This);
+
+    /*** ILayoutStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *LayoutScript)(
+        ILayoutStorage* This,
+        StorageLayout *pStorageLayout,
+        DWORD nEntries,
+        DWORD glfInterleavedFlag);
+
+    HRESULT (STDMETHODCALLTYPE *BeginMonitor)(
+        ILayoutStorage* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndMonitor)(
+        ILayoutStorage* This);
+
+    HRESULT (STDMETHODCALLTYPE *ReLayoutDocfile)(
+        ILayoutStorage* This,
+        OLECHAR *pwcsNewDfName);
+
+    HRESULT (STDMETHODCALLTYPE *ReLayoutDocfileOnILockBytes)(
+        ILayoutStorage* This,
+        ILockBytes *pILockBytes);
+
+    END_INTERFACE
+} ILayoutStorageVtbl;
+interface ILayoutStorage {
+    CONST_VTBL ILayoutStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ILayoutStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILayoutStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILayoutStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** ILayoutStorage methods ***/
+#define ILayoutStorage_LayoutScript(This,pStorageLayout,nEntries,glfInterleavedFlag) (This)->lpVtbl->LayoutScript(This,pStorageLayout,nEntries,glfInterleavedFlag)
+#define ILayoutStorage_BeginMonitor(This) (This)->lpVtbl->BeginMonitor(This)
+#define ILayoutStorage_EndMonitor(This) (This)->lpVtbl->EndMonitor(This)
+#define ILayoutStorage_ReLayoutDocfile(This,pwcsNewDfName) (This)->lpVtbl->ReLayoutDocfile(This,pwcsNewDfName)
+#define ILayoutStorage_ReLayoutDocfileOnILockBytes(This,pILockBytes) (This)->lpVtbl->ReLayoutDocfileOnILockBytes(This,pILockBytes)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ILayoutStorage_LayoutScript_Proxy(
+    ILayoutStorage* This,
+    StorageLayout *pStorageLayout,
+    DWORD nEntries,
+    DWORD glfInterleavedFlag);
+void __RPC_STUB ILayoutStorage_LayoutScript_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_BeginMonitor_Proxy(
+    ILayoutStorage* This);
+void __RPC_STUB ILayoutStorage_BeginMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_EndMonitor_Proxy(
+    ILayoutStorage* This);
+void __RPC_STUB ILayoutStorage_EndMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_ReLayoutDocfile_Proxy(
+    ILayoutStorage* This,
+    OLECHAR *pwcsNewDfName);
+void __RPC_STUB ILayoutStorage_ReLayoutDocfile_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_ReLayoutDocfileOnILockBytes_Proxy(
+    ILayoutStorage* This,
+    ILockBytes *pILockBytes);
+void __RPC_STUB ILayoutStorage_ReLayoutDocfileOnILockBytes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ILayoutStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBlockingLock interface
+ */
+#ifndef __IBlockingLock_INTERFACE_DEFINED__
+#define __IBlockingLock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBlockingLock, 0x30f3d47a, 0x6447, 0x11d1, 0x8e,0x3c, 0x00,0xc0,0x4f,0xb9,0x38,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBlockingLock : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Lock(
+        DWORD dwTimeout) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unlock(
+        ) = 0;
+
+};
+#else
+typedef struct IBlockingLockVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBlockingLock* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBlockingLock* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBlockingLock* This);
+
+    /*** IBlockingLock methods ***/
+    HRESULT (STDMETHODCALLTYPE *Lock)(
+        IBlockingLock* This,
+        DWORD dwTimeout);
+
+    HRESULT (STDMETHODCALLTYPE *Unlock)(
+        IBlockingLock* This);
+
+    END_INTERFACE
+} IBlockingLockVtbl;
+interface IBlockingLock {
+    CONST_VTBL IBlockingLockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBlockingLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBlockingLock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBlockingLock_Release(This) (This)->lpVtbl->Release(This)
+/*** IBlockingLock methods ***/
+#define IBlockingLock_Lock(This,dwTimeout) (This)->lpVtbl->Lock(This,dwTimeout)
+#define IBlockingLock_Unlock(This) (This)->lpVtbl->Unlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBlockingLock_Lock_Proxy(
+    IBlockingLock* This,
+    DWORD dwTimeout);
+void __RPC_STUB IBlockingLock_Lock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBlockingLock_Unlock_Proxy(
+    IBlockingLock* This);
+void __RPC_STUB IBlockingLock_Unlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBlockingLock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITimeAndNoticeControl interface
+ */
+#ifndef __ITimeAndNoticeControl_INTERFACE_DEFINED__
+#define __ITimeAndNoticeControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITimeAndNoticeControl, 0xbc0bf6ae, 0x8878, 0x11d1, 0x83,0xe9, 0x00,0xc0,0x4f,0xc2,0xc6,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITimeAndNoticeControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SuppressChanges(
+        DWORD res1,
+        DWORD res2) = 0;
+
+};
+#else
+typedef struct ITimeAndNoticeControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ITimeAndNoticeControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ITimeAndNoticeControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ITimeAndNoticeControl* This);
+
+    /*** ITimeAndNoticeControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *SuppressChanges)(
+        ITimeAndNoticeControl* This,
+        DWORD res1,
+        DWORD res2);
+
+    END_INTERFACE
+} ITimeAndNoticeControlVtbl;
+interface ITimeAndNoticeControl {
+    CONST_VTBL ITimeAndNoticeControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITimeAndNoticeControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITimeAndNoticeControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITimeAndNoticeControl_Release(This) (This)->lpVtbl->Release(This)
+/*** ITimeAndNoticeControl methods ***/
+#define ITimeAndNoticeControl_SuppressChanges(This,res1,res2) (This)->lpVtbl->SuppressChanges(This,res1,res2)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITimeAndNoticeControl_SuppressChanges_Proxy(
+    ITimeAndNoticeControl* This,
+    DWORD res1,
+    DWORD res2);
+void __RPC_STUB ITimeAndNoticeControl_SuppressChanges_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ITimeAndNoticeControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOplockStorage interface
+ */
+#ifndef __IOplockStorage_INTERFACE_DEFINED__
+#define __IOplockStorage_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IOplockStorage, 0x8d19c834, 0x8879, 0x11d1, 0x83,0xe9, 0x00,0xc0,0x4f,0xc2,0xc6,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOplockStorage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateStorageEx(
+        LPCWSTR pwcsName,
+        DWORD grfMode,
+        DWORD stgfmt,
+        DWORD grfAttrs,
+        REFIID riid,
+        void **ppstgOpen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OpenStorageEx(
+        LPCWSTR pwcsName,
+        DWORD grfMode,
+        DWORD stgfmt,
+        DWORD grfAttrs,
+        REFIID riid,
+        void **ppstgOpen) = 0;
+
+};
+#else
+typedef struct IOplockStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOplockStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOplockStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOplockStorage* This);
+
+    /*** IOplockStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateStorageEx)(
+        IOplockStorage* This,
+        LPCWSTR pwcsName,
+        DWORD grfMode,
+        DWORD stgfmt,
+        DWORD grfAttrs,
+        REFIID riid,
+        void **ppstgOpen);
+
+    HRESULT (STDMETHODCALLTYPE *OpenStorageEx)(
+        IOplockStorage* This,
+        LPCWSTR pwcsName,
+        DWORD grfMode,
+        DWORD stgfmt,
+        DWORD grfAttrs,
+        REFIID riid,
+        void **ppstgOpen);
+
+    END_INTERFACE
+} IOplockStorageVtbl;
+interface IOplockStorage {
+    CONST_VTBL IOplockStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOplockStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOplockStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOplockStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IOplockStorage methods ***/
+#define IOplockStorage_CreateStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen) (This)->lpVtbl->CreateStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen)
+#define IOplockStorage_OpenStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen) (This)->lpVtbl->OpenStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOplockStorage_CreateStorageEx_Proxy(
+    IOplockStorage* This,
+    LPCWSTR pwcsName,
+    DWORD grfMode,
+    DWORD stgfmt,
+    DWORD grfAttrs,
+    REFIID riid,
+    void **ppstgOpen);
+void __RPC_STUB IOplockStorage_CreateStorageEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOplockStorage_OpenStorageEx_Proxy(
+    IOplockStorage* This,
+    LPCWSTR pwcsName,
+    DWORD grfMode,
+    DWORD stgfmt,
+    DWORD grfAttrs,
+    REFIID riid,
+    void **ppstgOpen);
+void __RPC_STUB IOplockStorage_OpenStorageEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOplockStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumFORMATETC interface
+ */
+#ifndef __IEnumFORMATETC_INTERFACE_DEFINED__
+#define __IEnumFORMATETC_INTERFACE_DEFINED__
+
+typedef IEnumFORMATETC *LPENUMFORMATETC;
+typedef struct tagDVTARGETDEVICE {
+    DWORD tdSize;
+    WORD tdDriverNameOffset;
+    WORD tdDeviceNameOffset;
+    WORD tdPortNameOffset;
+    WORD tdExtDevmodeOffset;
+    BYTE tdData[1];
+} DVTARGETDEVICE;
+typedef CLIPFORMAT *LPCLIPFORMAT;
+typedef struct tagFORMATETC {
+    CLIPFORMAT cfFormat;
+    DVTARGETDEVICE *ptd;
+    DWORD dwAspect;
+    LONG lindex;
+    DWORD tymed;
+} FORMATETC;
+typedef struct tagFORMATETC *LPFORMATETC;
+DEFINE_GUID(IID_IEnumFORMATETC, 0x00000103, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumFORMATETC : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        FORMATETC *rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumFORMATETC **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumFORMATETCVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumFORMATETC* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumFORMATETC* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumFORMATETC* This);
+
+    /*** IEnumFORMATETC methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumFORMATETC* This,
+        ULONG celt,
+        FORMATETC *rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumFORMATETC* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumFORMATETC* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumFORMATETC* This,
+        IEnumFORMATETC **ppenum);
+
+    END_INTERFACE
+} IEnumFORMATETCVtbl;
+interface IEnumFORMATETC {
+    CONST_VTBL IEnumFORMATETCVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumFORMATETC_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumFORMATETC_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumFORMATETC_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumFORMATETC methods ***/
+#define IEnumFORMATETC_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumFORMATETC_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumFORMATETC_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumFORMATETC_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_RemoteNext_Proxy(
+    IEnumFORMATETC* This,
+    ULONG celt,
+    FORMATETC *rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumFORMATETC_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Skip_Proxy(
+    IEnumFORMATETC* This,
+    ULONG celt);
+void __RPC_STUB IEnumFORMATETC_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Reset_Proxy(
+    IEnumFORMATETC* This);
+void __RPC_STUB IEnumFORMATETC_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Clone_Proxy(
+    IEnumFORMATETC* This,
+    IEnumFORMATETC **ppenum);
+void __RPC_STUB IEnumFORMATETC_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumFORMATETC_Next_Proxy(
+    IEnumFORMATETC* This,
+    ULONG celt,
+    FORMATETC *rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumFORMATETC_Next_Stub(
+    IEnumFORMATETC* This,
+    ULONG celt,
+    FORMATETC *rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumFORMATETC_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATDATA interface
+ */
+#ifndef __IEnumSTATDATA_INTERFACE_DEFINED__
+#define __IEnumSTATDATA_INTERFACE_DEFINED__
+
+typedef IEnumSTATDATA *LPENUMSTATDATA;
+typedef enum tagADVF {
+    ADVF_NODATA = 1,
+    ADVF_PRIMEFIRST = 2,
+    ADVF_ONLYONCE = 4,
+    ADVF_DATAONSTOP = 64,
+    ADVFCACHE_NOHANDLER = 8,
+    ADVFCACHE_FORCEBUILTIN = 16,
+    ADVFCACHE_ONSAVE = 32
+} ADVF;
+typedef struct tagSTATDATA {
+    FORMATETC formatetc;
+    DWORD advf;
+    IAdviseSink *pAdvSink;
+    DWORD dwConnection;
+} STATDATA;
+typedef struct tagSTATDATA *LPSTATDATA;
+DEFINE_GUID(IID_IEnumSTATDATA, 0x00000105, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATDATA : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        STATDATA *rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumSTATDATA **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATDATAVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumSTATDATA* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumSTATDATA* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumSTATDATA* This);
+
+    /*** IEnumSTATDATA methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumSTATDATA* This,
+        ULONG celt,
+        STATDATA *rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumSTATDATA* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumSTATDATA* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumSTATDATA* This,
+        IEnumSTATDATA **ppenum);
+
+    END_INTERFACE
+} IEnumSTATDATAVtbl;
+interface IEnumSTATDATA {
+    CONST_VTBL IEnumSTATDATAVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATDATA_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATDATA_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATDATA_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATDATA methods ***/
+#define IEnumSTATDATA_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATDATA_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATDATA_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATDATA_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_RemoteNext_Proxy(
+    IEnumSTATDATA* This,
+    ULONG celt,
+    STATDATA *rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATDATA_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Skip_Proxy(
+    IEnumSTATDATA* This,
+    ULONG celt);
+void __RPC_STUB IEnumSTATDATA_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Reset_Proxy(
+    IEnumSTATDATA* This);
+void __RPC_STUB IEnumSTATDATA_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Clone_Proxy(
+    IEnumSTATDATA* This,
+    IEnumSTATDATA **ppenum);
+void __RPC_STUB IEnumSTATDATA_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATDATA_Next_Proxy(
+    IEnumSTATDATA* This,
+    ULONG celt,
+    STATDATA *rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATDATA_Next_Stub(
+    IEnumSTATDATA* This,
+    ULONG celt,
+    STATDATA *rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumSTATDATA_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAdviseSink interface
+ */
+#ifndef __IAdviseSink_INTERFACE_DEFINED__
+#define __IAdviseSink_INTERFACE_DEFINED__
+
+typedef IAdviseSink *LPADVISESINK;
+typedef enum tagTYMED {
+    TYMED_HGLOBAL = 1,
+    TYMED_FILE = 2,
+    TYMED_ISTREAM = 4,
+    TYMED_ISTORAGE = 8,
+    TYMED_GDI = 16,
+    TYMED_MFPICT = 32,
+    TYMED_ENHMF = 64,
+    TYMED_NULL = 0
+} TYMED;
+typedef struct tagRemSTGMEDIUM {
+    DWORD tymed;
+    DWORD dwHandleType;
+    ULONG pData;
+    ULONG pUnkForRelease;
+    ULONG cbData;
+    byte data[1];
+} RemSTGMEDIUM;
+typedef struct tagSTGMEDIUM {
+    DWORD tymed;
+    union {
+        HBITMAP hBitmap;
+        HMETAFILEPICT hMetaFilePict;
+        HENHMETAFILE hEnhMetaFile;
+        HGLOBAL hGlobal;
+        LPOLESTR lpszFileName;
+        IStream *pstm;
+        IStorage *pstg;
+    } DUMMYUNIONNAME;
+    IUnknown *pUnkForRelease;
+} uSTGMEDIUM;
+typedef struct _GDI_OBJECT {
+    DWORD ObjectType;
+    union {
+        wireHBITMAP hBitmap;
+        wireHPALETTE hPalette;
+        wireHGLOBAL hGeneric;
+    } u;
+} GDI_OBJECT;
+typedef struct _userSTGMEDIUM {
+    struct {
+        DWORD tymed;
+        union {
+            wireHMETAFILEPICT hMetaFilePict;
+            wireHENHMETAFILE hHEnhMetaFile;
+            GDI_OBJECT *hGdiHandle;
+            wireHGLOBAL hGlobal;
+            LPOLESTR lpszFileName;
+            BYTE_BLOB *pstm;
+            BYTE_BLOB *pstg;
+        } u;
+    } DUMMYUNIONNAME;
+    IUnknown *pUnkForRelease;
+} userSTGMEDIUM;
+typedef userSTGMEDIUM *wireSTGMEDIUM;
+typedef uSTGMEDIUM STGMEDIUM;
+typedef userSTGMEDIUM *wireASYNC_STGMEDIUM;
+typedef STGMEDIUM ASYNC_STGMEDIUM;
+typedef STGMEDIUM *LPSTGMEDIUM;
+typedef struct _userFLAG_STGMEDIUM {
+    LONG ContextFlags;
+    LONG fPassOwnership;
+    userSTGMEDIUM Stgmed;
+} userFLAG_STGMEDIUM;
+typedef userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
+typedef struct _FLAG_STGMEDIUM {
+    LONG ContextFlags;
+    LONG fPassOwnership;
+    STGMEDIUM Stgmed;
+} FLAG_STGMEDIUM;
+DEFINE_GUID(IID_IAdviseSink, 0x0000010f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAdviseSink : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE OnDataChange(
+        FORMATETC *pFormatetc,
+        STGMEDIUM *pStgmed) = 0;
+
+    virtual void STDMETHODCALLTYPE OnViewChange(
+        DWORD dwAspect,
+        LONG lindex) = 0;
+
+    virtual void STDMETHODCALLTYPE OnRename(
+        IMoniker *pmk) = 0;
+
+    virtual void STDMETHODCALLTYPE OnSave(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE OnClose(
+        ) = 0;
+
+};
+#else
+typedef struct IAdviseSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAdviseSink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAdviseSink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAdviseSink* This);
+
+    /*** IAdviseSink methods ***/
+    void (STDMETHODCALLTYPE *OnDataChange)(
+        IAdviseSink* This,
+        FORMATETC *pFormatetc,
+        STGMEDIUM *pStgmed);
+
+    void (STDMETHODCALLTYPE *OnViewChange)(
+        IAdviseSink* This,
+        DWORD dwAspect,
+        LONG lindex);
+
+    void (STDMETHODCALLTYPE *OnRename)(
+        IAdviseSink* This,
+        IMoniker *pmk);
+
+    void (STDMETHODCALLTYPE *OnSave)(
+        IAdviseSink* This);
+
+    void (STDMETHODCALLTYPE *OnClose)(
+        IAdviseSink* This);
+
+    END_INTERFACE
+} IAdviseSinkVtbl;
+interface IAdviseSink {
+    CONST_VTBL IAdviseSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAdviseSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdviseSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdviseSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IAdviseSink methods ***/
+#define IAdviseSink_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)
+#define IAdviseSink_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)
+#define IAdviseSink_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)
+#define IAdviseSink_OnSave(This) (This)->lpVtbl->OnSave(This)
+#define IAdviseSink_OnClose(This) (This)->lpVtbl->OnClose(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnDataChange_Proxy(
+    IAdviseSink* This,
+    FORMATETC *pFormatetc,
+    ASYNC_STGMEDIUM *pStgmed);
+void __RPC_STUB IAdviseSink_RemoteOnDataChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnViewChange_Proxy(
+    IAdviseSink* This,
+    DWORD dwAspect,
+    LONG lindex);
+void __RPC_STUB IAdviseSink_RemoteOnViewChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnRename_Proxy(
+    IAdviseSink* This,
+    IMoniker *pmk);
+void __RPC_STUB IAdviseSink_RemoteOnRename_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnSave_Proxy(
+    IAdviseSink* This);
+void __RPC_STUB IAdviseSink_RemoteOnSave_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnClose_Proxy(
+    IAdviseSink* This);
+void __RPC_STUB IAdviseSink_RemoteOnClose_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void CALLBACK IAdviseSink_OnDataChange_Proxy(
+    IAdviseSink* This,
+    FORMATETC *pFormatetc,
+    STGMEDIUM *pStgmed);
+HRESULT __RPC_STUB IAdviseSink_OnDataChange_Stub(
+    IAdviseSink* This,
+    FORMATETC *pFormatetc,
+    ASYNC_STGMEDIUM *pStgmed);
+void CALLBACK IAdviseSink_OnViewChange_Proxy(
+    IAdviseSink* This,
+    DWORD dwAspect,
+    LONG lindex);
+HRESULT __RPC_STUB IAdviseSink_OnViewChange_Stub(
+    IAdviseSink* This,
+    DWORD dwAspect,
+    LONG lindex);
+void CALLBACK IAdviseSink_OnRename_Proxy(
+    IAdviseSink* This,
+    IMoniker *pmk);
+HRESULT __RPC_STUB IAdviseSink_OnRename_Stub(
+    IAdviseSink* This,
+    IMoniker *pmk);
+void CALLBACK IAdviseSink_OnSave_Proxy(
+    IAdviseSink* This);
+HRESULT __RPC_STUB IAdviseSink_OnSave_Stub(
+    IAdviseSink* This);
+void CALLBACK IAdviseSink_OnClose_Proxy(
+    IAdviseSink* This);
+HRESULT __RPC_STUB IAdviseSink_OnClose_Stub(
+    IAdviseSink* This);
+
+#endif  /* __IAdviseSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAdviseSink2 interface
+ */
+#ifndef __IAdviseSink2_INTERFACE_DEFINED__
+#define __IAdviseSink2_INTERFACE_DEFINED__
+
+typedef IAdviseSink2 *LPADVISESINK2;
+DEFINE_GUID(IID_IAdviseSink2, 0x00000125, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAdviseSink2 : public IAdviseSink
+{
+    virtual void STDMETHODCALLTYPE OnLinkSrcChange(
+        IMoniker *pmk) = 0;
+
+};
+#else
+typedef struct IAdviseSink2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAdviseSink2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAdviseSink2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAdviseSink2* This);
+
+    /*** IAdviseSink methods ***/
+    void (STDMETHODCALLTYPE *OnDataChange)(
+        IAdviseSink2* This,
+        FORMATETC *pFormatetc,
+        STGMEDIUM *pStgmed);
+
+    void (STDMETHODCALLTYPE *OnViewChange)(
+        IAdviseSink2* This,
+        DWORD dwAspect,
+        LONG lindex);
+
+    void (STDMETHODCALLTYPE *OnRename)(
+        IAdviseSink2* This,
+        IMoniker *pmk);
+
+    void (STDMETHODCALLTYPE *OnSave)(
+        IAdviseSink2* This);
+
+    void (STDMETHODCALLTYPE *OnClose)(
+        IAdviseSink2* This);
+
+    /*** IAdviseSink2 methods ***/
+    void (STDMETHODCALLTYPE *OnLinkSrcChange)(
+        IAdviseSink2* This,
+        IMoniker *pmk);
+
+    END_INTERFACE
+} IAdviseSink2Vtbl;
+interface IAdviseSink2 {
+    CONST_VTBL IAdviseSink2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAdviseSink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdviseSink2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdviseSink2_Release(This) (This)->lpVtbl->Release(This)
+/*** IAdviseSink methods ***/
+#define IAdviseSink2_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)
+#define IAdviseSink2_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)
+#define IAdviseSink2_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)
+#define IAdviseSink2_OnSave(This) (This)->lpVtbl->OnSave(This)
+#define IAdviseSink2_OnClose(This) (This)->lpVtbl->OnClose(This)
+/*** IAdviseSink2 methods ***/
+#define IAdviseSink2_OnLinkSrcChange(This,pmk) (This)->lpVtbl->OnLinkSrcChange(This,pmk)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAdviseSink2_RemoteOnLinkSrcChange_Proxy(
+    IAdviseSink2* This,
+    IMoniker *pmk);
+void __RPC_STUB IAdviseSink2_RemoteOnLinkSrcChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void CALLBACK IAdviseSink2_OnLinkSrcChange_Proxy(
+    IAdviseSink2* This,
+    IMoniker *pmk);
+HRESULT __RPC_STUB IAdviseSink2_OnLinkSrcChange_Stub(
+    IAdviseSink2* This,
+    IMoniker *pmk);
+
+#endif  /* __IAdviseSink2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDataObject interface
+ */
+#ifndef __IDataObject_INTERFACE_DEFINED__
+#define __IDataObject_INTERFACE_DEFINED__
+
+typedef IDataObject *LPDATAOBJECT;
+typedef enum tagDATADIR {
+    DATADIR_GET = 1,
+    DATADIR_SET = 2
+} DATADIR;
+DEFINE_GUID(IID_IDataObject, 0x0000010e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDataObject : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetData(
+        FORMATETC *pformatetcIn,
+        STGMEDIUM *pmedium) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDataHere(
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryGetData(
+        FORMATETC *pformatetc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(
+        FORMATETC *pformatectIn,
+        FORMATETC *pformatetcOut) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetData(
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium,
+        BOOL fRelease) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumFormatEtc(
+        DWORD dwDirection,
+        IEnumFORMATETC **ppenumFormatEtc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DAdvise(
+        FORMATETC *pformatetc,
+        DWORD advf,
+        IAdviseSink *pAdvSink,
+        DWORD *pdwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DUnadvise(
+        DWORD dwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumDAdvise(
+        IEnumSTATDATA **ppenumAdvise) = 0;
+
+};
+#else
+typedef struct IDataObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDataObject* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDataObject* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDataObject* This);
+
+    /*** IDataObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IDataObject* This,
+        FORMATETC *pformatetcIn,
+        STGMEDIUM *pmedium);
+
+    HRESULT (STDMETHODCALLTYPE *GetDataHere)(
+        IDataObject* This,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium);
+
+    HRESULT (STDMETHODCALLTYPE *QueryGetData)(
+        IDataObject* This,
+        FORMATETC *pformatetc);
+
+    HRESULT (STDMETHODCALLTYPE *GetCanonicalFormatEtc)(
+        IDataObject* This,
+        FORMATETC *pformatectIn,
+        FORMATETC *pformatetcOut);
+
+    HRESULT (STDMETHODCALLTYPE *SetData)(
+        IDataObject* This,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium,
+        BOOL fRelease);
+
+    HRESULT (STDMETHODCALLTYPE *EnumFormatEtc)(
+        IDataObject* This,
+        DWORD dwDirection,
+        IEnumFORMATETC **ppenumFormatEtc);
+
+    HRESULT (STDMETHODCALLTYPE *DAdvise)(
+        IDataObject* This,
+        FORMATETC *pformatetc,
+        DWORD advf,
+        IAdviseSink *pAdvSink,
+        DWORD *pdwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *DUnadvise)(
+        IDataObject* This,
+        DWORD dwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *EnumDAdvise)(
+        IDataObject* This,
+        IEnumSTATDATA **ppenumAdvise);
+
+    END_INTERFACE
+} IDataObjectVtbl;
+interface IDataObject {
+    CONST_VTBL IDataObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDataObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IDataObject methods ***/
+#define IDataObject_GetData(This,pformatetcIn,pmedium) (This)->lpVtbl->GetData(This,pformatetcIn,pmedium)
+#define IDataObject_GetDataHere(This,pformatetc,pmedium) (This)->lpVtbl->GetDataHere(This,pformatetc,pmedium)
+#define IDataObject_QueryGetData(This,pformatetc) (This)->lpVtbl->QueryGetData(This,pformatetc)
+#define IDataObject_GetCanonicalFormatEtc(This,pformatectIn,pformatetcOut) (This)->lpVtbl->GetCanonicalFormatEtc(This,pformatectIn,pformatetcOut)
+#define IDataObject_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+#define IDataObject_EnumFormatEtc(This,dwDirection,ppenumFormatEtc) (This)->lpVtbl->EnumFormatEtc(This,dwDirection,ppenumFormatEtc)
+#define IDataObject_DAdvise(This,pformatetc,advf,pAdvSink,pdwConnection) (This)->lpVtbl->DAdvise(This,pformatetc,advf,pAdvSink,pdwConnection)
+#define IDataObject_DUnadvise(This,dwConnection) (This)->lpVtbl->DUnadvise(This,dwConnection)
+#define IDataObject_EnumDAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumDAdvise(This,ppenumAdvise)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteGetData_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetcIn,
+    STGMEDIUM *pRemoteMedium);
+void __RPC_STUB IDataObject_RemoteGetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteGetDataHere_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    STGMEDIUM *pRemoteMedium);
+void __RPC_STUB IDataObject_RemoteGetDataHere_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_QueryGetData_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetc);
+void __RPC_STUB IDataObject_QueryGetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_GetCanonicalFormatEtc_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatectIn,
+    FORMATETC *pformatetcOut);
+void __RPC_STUB IDataObject_GetCanonicalFormatEtc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteSetData_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    FLAG_STGMEDIUM *pmedium,
+    BOOL fRelease);
+void __RPC_STUB IDataObject_RemoteSetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_EnumFormatEtc_Proxy(
+    IDataObject* This,
+    DWORD dwDirection,
+    IEnumFORMATETC **ppenumFormatEtc);
+void __RPC_STUB IDataObject_EnumFormatEtc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_DAdvise_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    DWORD advf,
+    IAdviseSink *pAdvSink,
+    DWORD *pdwConnection);
+void __RPC_STUB IDataObject_DAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_DUnadvise_Proxy(
+    IDataObject* This,
+    DWORD dwConnection);
+void __RPC_STUB IDataObject_DUnadvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_EnumDAdvise_Proxy(
+    IDataObject* This,
+    IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IDataObject_EnumDAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDataObject_GetData_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetcIn,
+    STGMEDIUM *pmedium);
+HRESULT __RPC_STUB IDataObject_GetData_Stub(
+    IDataObject* This,
+    FORMATETC *pformatetcIn,
+    STGMEDIUM *pRemoteMedium);
+HRESULT CALLBACK IDataObject_GetDataHere_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    STGMEDIUM *pmedium);
+HRESULT __RPC_STUB IDataObject_GetDataHere_Stub(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    STGMEDIUM *pRemoteMedium);
+HRESULT CALLBACK IDataObject_SetData_Proxy(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    STGMEDIUM *pmedium,
+    BOOL fRelease);
+HRESULT __RPC_STUB IDataObject_SetData_Stub(
+    IDataObject* This,
+    FORMATETC *pformatetc,
+    FLAG_STGMEDIUM *pmedium,
+    BOOL fRelease);
+
+#endif  /* __IDataObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDataAdviseHolder interface
+ */
+#ifndef __IDataAdviseHolder_INTERFACE_DEFINED__
+#define __IDataAdviseHolder_INTERFACE_DEFINED__
+
+typedef IDataAdviseHolder *LPDATAADVISEHOLDER;
+DEFINE_GUID(IID_IDataAdviseHolder, 0x00000110, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDataAdviseHolder : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Advise(
+        IDataObject *pDataObject,
+        FORMATETC *pFetc,
+        DWORD advf,
+        IAdviseSink *pAdvise,
+        DWORD *pdwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unadvise(
+        DWORD dwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
+        IEnumSTATDATA **ppenumAdvise) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendOnDataChange(
+        IDataObject *pDataObject,
+        DWORD dwReserved,
+        DWORD advf) = 0;
+
+};
+#else
+typedef struct IDataAdviseHolderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDataAdviseHolder* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDataAdviseHolder* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDataAdviseHolder* This);
+
+    /*** IDataAdviseHolder methods ***/
+    HRESULT (STDMETHODCALLTYPE *Advise)(
+        IDataAdviseHolder* This,
+        IDataObject *pDataObject,
+        FORMATETC *pFetc,
+        DWORD advf,
+        IAdviseSink *pAdvise,
+        DWORD *pdwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *Unadvise)(
+        IDataAdviseHolder* This,
+        DWORD dwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
+        IDataAdviseHolder* This,
+        IEnumSTATDATA **ppenumAdvise);
+
+    HRESULT (STDMETHODCALLTYPE *SendOnDataChange)(
+        IDataAdviseHolder* This,
+        IDataObject *pDataObject,
+        DWORD dwReserved,
+        DWORD advf);
+
+    END_INTERFACE
+} IDataAdviseHolderVtbl;
+interface IDataAdviseHolder {
+    CONST_VTBL IDataAdviseHolderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDataAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataAdviseHolder_Release(This) (This)->lpVtbl->Release(This)
+/*** IDataAdviseHolder methods ***/
+#define IDataAdviseHolder_Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection)
+#define IDataAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IDataAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IDataAdviseHolder_SendOnDataChange(This,pDataObject,dwReserved,advf) (This)->lpVtbl->SendOnDataChange(This,pDataObject,dwReserved,advf)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_Advise_Proxy(
+    IDataAdviseHolder* This,
+    IDataObject *pDataObject,
+    FORMATETC *pFetc,
+    DWORD advf,
+    IAdviseSink *pAdvise,
+    DWORD *pdwConnection);
+void __RPC_STUB IDataAdviseHolder_Advise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_Unadvise_Proxy(
+    IDataAdviseHolder* This,
+    DWORD dwConnection);
+void __RPC_STUB IDataAdviseHolder_Unadvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_EnumAdvise_Proxy(
+    IDataAdviseHolder* This,
+    IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IDataAdviseHolder_EnumAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_SendOnDataChange_Proxy(
+    IDataAdviseHolder* This,
+    IDataObject *pDataObject,
+    DWORD dwReserved,
+    DWORD advf);
+void __RPC_STUB IDataAdviseHolder_SendOnDataChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDataAdviseHolder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMessageFilter interface
+ */
+#ifndef __IMessageFilter_INTERFACE_DEFINED__
+#define __IMessageFilter_INTERFACE_DEFINED__
+
+typedef IMessageFilter *LPMESSAGEFILTER;
+typedef enum tagCALLTYPE {
+    CALLTYPE_TOPLEVEL = 1,
+    CALLTYPE_NESTED = 2,
+    CALLTYPE_ASYNC = 3,
+    CALLTYPE_TOPLEVEL_CALLPENDING = 4,
+    CALLTYPE_ASYNC_CALLPENDING = 5
+} CALLTYPE;
+typedef enum tagSERVERCALL {
+    SERVERCALL_ISHANDLED = 0,
+    SERVERCALL_REJECTED = 1,
+    SERVERCALL_RETRYLATER = 2
+} SERVERCALL;
+typedef enum tagPENDINGTYPE {
+    PENDINGTYPE_TOPLEVEL = 1,
+    PENDINGTYPE_NESTED = 2
+} PENDINGTYPE;
+typedef enum tagPENDINGMSG {
+    PENDINGMSG_CANCELCALL = 0,
+    PENDINGMSG_WAITNOPROCESS = 1,
+    PENDINGMSG_WAITDEFPROCESS = 2
+} PENDINGMSG;
+typedef struct tagINTERFACEINFO {
+    IUnknown *pUnk;
+    IID iid;
+    WORD wMethod;
+} INTERFACEINFO;
+typedef struct tagINTERFACEINFO *LPINTERFACEINFO;
+DEFINE_GUID(IID_IMessageFilter, 0x00000016, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMessageFilter : public IUnknown
+{
+    virtual DWORD STDMETHODCALLTYPE HandleInComingCall(
+        DWORD dwCallType,
+        HTASK htaskCaller,
+        DWORD dwTickCount,
+        LPINTERFACEINFO lpInterfaceInfo) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE RetryRejectedCall(
+        HTASK htaskCallee,
+        DWORD dwTickCount,
+        DWORD dwRejectType) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE MessagePending(
+        HTASK htaskCallee,
+        DWORD dwTickCount,
+        DWORD dwPendingType) = 0;
+
+};
+#else
+typedef struct IMessageFilterVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMessageFilter* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMessageFilter* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMessageFilter* This);
+
+    /*** IMessageFilter methods ***/
+    DWORD (STDMETHODCALLTYPE *HandleInComingCall)(
+        IMessageFilter* This,
+        DWORD dwCallType,
+        HTASK htaskCaller,
+        DWORD dwTickCount,
+        LPINTERFACEINFO lpInterfaceInfo);
+
+    DWORD (STDMETHODCALLTYPE *RetryRejectedCall)(
+        IMessageFilter* This,
+        HTASK htaskCallee,
+        DWORD dwTickCount,
+        DWORD dwRejectType);
+
+    DWORD (STDMETHODCALLTYPE *MessagePending)(
+        IMessageFilter* This,
+        HTASK htaskCallee,
+        DWORD dwTickCount,
+        DWORD dwPendingType);
+
+    END_INTERFACE
+} IMessageFilterVtbl;
+interface IMessageFilter {
+    CONST_VTBL IMessageFilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMessageFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMessageFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMessageFilter_Release(This) (This)->lpVtbl->Release(This)
+/*** IMessageFilter methods ***/
+#define IMessageFilter_HandleInComingCall(This,dwCallType,htaskCaller,dwTickCount,lpInterfaceInfo) (This)->lpVtbl->HandleInComingCall(This,dwCallType,htaskCaller,dwTickCount,lpInterfaceInfo)
+#define IMessageFilter_RetryRejectedCall(This,htaskCallee,dwTickCount,dwRejectType) (This)->lpVtbl->RetryRejectedCall(This,htaskCallee,dwTickCount,dwRejectType)
+#define IMessageFilter_MessagePending(This,htaskCallee,dwTickCount,dwPendingType) (This)->lpVtbl->MessagePending(This,htaskCallee,dwTickCount,dwPendingType)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IMessageFilter_HandleInComingCall_Proxy(
+    IMessageFilter* This,
+    DWORD dwCallType,
+    HTASK htaskCaller,
+    DWORD dwTickCount,
+    LPINTERFACEINFO lpInterfaceInfo);
+void __RPC_STUB IMessageFilter_HandleInComingCall_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IMessageFilter_RetryRejectedCall_Proxy(
+    IMessageFilter* This,
+    HTASK htaskCallee,
+    DWORD dwTickCount,
+    DWORD dwRejectType);
+void __RPC_STUB IMessageFilter_RetryRejectedCall_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IMessageFilter_MessagePending_Proxy(
+    IMessageFilter* This,
+    HTASK htaskCallee,
+    DWORD dwTickCount,
+    DWORD dwPendingType);
+void __RPC_STUB IMessageFilter_MessagePending_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMessageFilter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcChannelBuffer interface
+ */
+#ifndef __IRpcChannelBuffer_INTERFACE_DEFINED__
+#define __IRpcChannelBuffer_INTERFACE_DEFINED__
+
+typedef IRpcChannelBuffer *LPRPCCHANNELBUFFER;
+typedef ULONG RPCOLEDATAREP;
+typedef struct tagRPCOLEMESSAGE {
+    void *reserved1;
+    RPCOLEDATAREP dataRepresentation;
+    void *Buffer;
+    ULONG cbBuffer;
+    ULONG iMethod;
+    void * reserved2[5];
+    ULONG rpcFlags;
+} RPCOLEMESSAGE;
+typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
+DEFINE_GUID(IID_IRpcChannelBuffer, 0xd5f56b60, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcChannelBuffer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetBuffer(
+        RPCOLEMESSAGE *pMessage,
+        REFIID riid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendReceive(
+        RPCOLEMESSAGE *pMessage,
+        ULONG *pStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FreeBuffer(
+        RPCOLEMESSAGE *pMessage) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDestCtx(
+        DWORD *pdwDestContext,
+        void **ppvDestContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsConnected(
+        ) = 0;
+
+};
+#else
+typedef struct IRpcChannelBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcChannelBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcChannelBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcChannelBuffer* This);
+
+    /*** IRpcChannelBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        IRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMessage,
+        REFIID riid);
+
+    HRESULT (STDMETHODCALLTYPE *SendReceive)(
+        IRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMessage,
+        ULONG *pStatus);
+
+    HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+        IRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMessage);
+
+    HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+        IRpcChannelBuffer* This,
+        DWORD *pdwDestContext,
+        void **ppvDestContext);
+
+    HRESULT (STDMETHODCALLTYPE *IsConnected)(
+        IRpcChannelBuffer* This);
+
+    END_INTERFACE
+} IRpcChannelBufferVtbl;
+interface IRpcChannelBuffer {
+    CONST_VTBL IRpcChannelBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IRpcChannelBuffer_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetBuffer_Proxy(
+    IRpcChannelBuffer* This,
+    RPCOLEMESSAGE *pMessage,
+    REFIID riid);
+void __RPC_STUB IRpcChannelBuffer_GetBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_SendReceive_Proxy(
+    IRpcChannelBuffer* This,
+    RPCOLEMESSAGE *pMessage,
+    ULONG *pStatus);
+void __RPC_STUB IRpcChannelBuffer_SendReceive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_FreeBuffer_Proxy(
+    IRpcChannelBuffer* This,
+    RPCOLEMESSAGE *pMessage);
+void __RPC_STUB IRpcChannelBuffer_FreeBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetDestCtx_Proxy(
+    IRpcChannelBuffer* This,
+    DWORD *pdwDestContext,
+    void **ppvDestContext);
+void __RPC_STUB IRpcChannelBuffer_GetDestCtx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_IsConnected_Proxy(
+    IRpcChannelBuffer* This);
+void __RPC_STUB IRpcChannelBuffer_IsConnected_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcChannelBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcChannelBuffer2 interface
+ */
+#ifndef __IRpcChannelBuffer2_INTERFACE_DEFINED__
+#define __IRpcChannelBuffer2_INTERFACE_DEFINED__
+
+typedef IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
+DEFINE_GUID(IID_IRpcChannelBuffer2, 0x594f31d0, 0x7f19, 0x11d0, 0xb1,0x94, 0x00,0xa0,0xc9,0x0d,0xc8,0xbf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcChannelBuffer2 : public IRpcChannelBuffer
+{
+    virtual HRESULT STDMETHODCALLTYPE GetProtocolVersion(
+        DWORD *pdwVersion) = 0;
+
+};
+#else
+typedef struct IRpcChannelBuffer2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcChannelBuffer2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcChannelBuffer2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcChannelBuffer2* This);
+
+    /*** IRpcChannelBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        IRpcChannelBuffer2* This,
+        RPCOLEMESSAGE *pMessage,
+        REFIID riid);
+
+    HRESULT (STDMETHODCALLTYPE *SendReceive)(
+        IRpcChannelBuffer2* This,
+        RPCOLEMESSAGE *pMessage,
+        ULONG *pStatus);
+
+    HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+        IRpcChannelBuffer2* This,
+        RPCOLEMESSAGE *pMessage);
+
+    HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+        IRpcChannelBuffer2* This,
+        DWORD *pdwDestContext,
+        void **ppvDestContext);
+
+    HRESULT (STDMETHODCALLTYPE *IsConnected)(
+        IRpcChannelBuffer2* This);
+
+    /*** IRpcChannelBuffer2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
+        IRpcChannelBuffer2* This,
+        DWORD *pdwVersion);
+
+    END_INTERFACE
+} IRpcChannelBuffer2Vtbl;
+interface IRpcChannelBuffer2 {
+    CONST_VTBL IRpcChannelBuffer2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcChannelBuffer2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer2_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer2_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer2_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IRpcChannelBuffer2_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IRpcChannelBuffer2_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer2_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+/*** IRpcChannelBuffer2 methods ***/
+#define IRpcChannelBuffer2_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer2_GetProtocolVersion_Proxy(
+    IRpcChannelBuffer2* This,
+    DWORD *pdwVersion);
+void __RPC_STUB IRpcChannelBuffer2_GetProtocolVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcChannelBuffer2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcChannelBuffer3 interface
+ */
+#ifndef __IRpcChannelBuffer3_INTERFACE_DEFINED__
+#define __IRpcChannelBuffer3_INTERFACE_DEFINED__
+
+typedef IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
+DEFINE_GUID(IID_IRpcChannelBuffer3, 0x25b15600, 0x0115, 0x11d0, 0xbf,0x0d, 0x00,0xaa,0x00,0xb8,0xdf,0xd2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcChannelBuffer3 : public IRpcChannelBuffer2
+{
+    virtual HRESULT STDMETHODCALLTYPE Send(
+        RPCOLEMESSAGE *pMsg,
+        ULONG *pulStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Receive(
+        RPCOLEMESSAGE *pMsg,
+        ULONG ulSize,
+        ULONG *pulStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        RPCOLEMESSAGE *pMsg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCallContext(
+        RPCOLEMESSAGE *pMsg,
+        REFIID riid,
+        void **pInterface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDestCtxEx(
+        RPCOLEMESSAGE *pMsg,
+        DWORD *pdwDestContext,
+        void **ppvDestContext) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetState(
+        RPCOLEMESSAGE *pMsg,
+        DWORD *pState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterAsync(
+        RPCOLEMESSAGE *pMsg,
+        IAsyncManager *pAsyncMgr) = 0;
+
+};
+#else
+typedef struct IRpcChannelBuffer3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcChannelBuffer3* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcChannelBuffer3* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcChannelBuffer3* This);
+
+    /*** IRpcChannelBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMessage,
+        REFIID riid);
+
+    HRESULT (STDMETHODCALLTYPE *SendReceive)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMessage,
+        ULONG *pStatus);
+
+    HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMessage);
+
+    HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+        IRpcChannelBuffer3* This,
+        DWORD *pdwDestContext,
+        void **ppvDestContext);
+
+    HRESULT (STDMETHODCALLTYPE *IsConnected)(
+        IRpcChannelBuffer3* This);
+
+    /*** IRpcChannelBuffer2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
+        IRpcChannelBuffer3* This,
+        DWORD *pdwVersion);
+
+    /*** IRpcChannelBuffer3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *Send)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg,
+        ULONG *pulStatus);
+
+    HRESULT (STDMETHODCALLTYPE *Receive)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg,
+        ULONG ulSize,
+        ULONG *pulStatus);
+
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg);
+
+    HRESULT (STDMETHODCALLTYPE *GetCallContext)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg,
+        REFIID riid,
+        void **pInterface);
+
+    HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg,
+        DWORD *pdwDestContext,
+        void **ppvDestContext);
+
+    HRESULT (STDMETHODCALLTYPE *GetState)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg,
+        DWORD *pState);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterAsync)(
+        IRpcChannelBuffer3* This,
+        RPCOLEMESSAGE *pMsg,
+        IAsyncManager *pAsyncMgr);
+
+    END_INTERFACE
+} IRpcChannelBuffer3Vtbl;
+interface IRpcChannelBuffer3 {
+    CONST_VTBL IRpcChannelBuffer3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcChannelBuffer3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer3_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer3_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer3_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IRpcChannelBuffer3_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IRpcChannelBuffer3_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer3_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+/*** IRpcChannelBuffer2 methods ***/
+#define IRpcChannelBuffer3_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)
+/*** IRpcChannelBuffer3 methods ***/
+#define IRpcChannelBuffer3_Send(This,pMsg,pulStatus) (This)->lpVtbl->Send(This,pMsg,pulStatus)
+#define IRpcChannelBuffer3_Receive(This,pMsg,ulSize,pulStatus) (This)->lpVtbl->Receive(This,pMsg,ulSize,pulStatus)
+#define IRpcChannelBuffer3_Cancel(This,pMsg) (This)->lpVtbl->Cancel(This,pMsg)
+#define IRpcChannelBuffer3_GetCallContext(This,pMsg,riid,pInterface) (This)->lpVtbl->GetCallContext(This,pMsg,riid,pInterface)
+#define IRpcChannelBuffer3_GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer3_GetState(This,pMsg,pState) (This)->lpVtbl->GetState(This,pMsg,pState)
+#define IRpcChannelBuffer3_RegisterAsync(This,pMsg,pAsyncMgr) (This)->lpVtbl->RegisterAsync(This,pMsg,pAsyncMgr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Send_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg,
+    ULONG *pulStatus);
+void __RPC_STUB IRpcChannelBuffer3_Send_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Receive_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg,
+    ULONG ulSize,
+    ULONG *pulStatus);
+void __RPC_STUB IRpcChannelBuffer3_Receive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Cancel_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg);
+void __RPC_STUB IRpcChannelBuffer3_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetCallContext_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg,
+    REFIID riid,
+    void **pInterface);
+void __RPC_STUB IRpcChannelBuffer3_GetCallContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetDestCtxEx_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg,
+    DWORD *pdwDestContext,
+    void **ppvDestContext);
+void __RPC_STUB IRpcChannelBuffer3_GetDestCtxEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetState_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg,
+    DWORD *pState);
+void __RPC_STUB IRpcChannelBuffer3_GetState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_RegisterAsync_Proxy(
+    IRpcChannelBuffer3* This,
+    RPCOLEMESSAGE *pMsg,
+    IAsyncManager *pAsyncMgr);
+void __RPC_STUB IRpcChannelBuffer3_RegisterAsync_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcChannelBuffer3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncRpcChannelBuffer interface
+ */
+#ifndef __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__
+#define __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAsyncRpcChannelBuffer, 0xa5029fb6, 0x3c34, 0x11d1, 0x9c,0x99, 0x00,0xc0,0x4f,0xb9,0x98,0xaa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAsyncRpcChannelBuffer : public IRpcChannelBuffer2
+{
+    virtual HRESULT STDMETHODCALLTYPE Send(
+        RPCOLEMESSAGE *pMsg,
+        ISynchronize *pSync,
+        ULONG *pulStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Receive(
+        RPCOLEMESSAGE *pMsg,
+        ULONG *pulStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDestCtxEx(
+        RPCOLEMESSAGE *pMsg,
+        DWORD *pdwDestContext,
+        void **ppvDestContext) = 0;
+
+};
+#else
+typedef struct IAsyncRpcChannelBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAsyncRpcChannelBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAsyncRpcChannelBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAsyncRpcChannelBuffer* This);
+
+    /*** IRpcChannelBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        IAsyncRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMessage,
+        REFIID riid);
+
+    HRESULT (STDMETHODCALLTYPE *SendReceive)(
+        IAsyncRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMessage,
+        ULONG *pStatus);
+
+    HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+        IAsyncRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMessage);
+
+    HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+        IAsyncRpcChannelBuffer* This,
+        DWORD *pdwDestContext,
+        void **ppvDestContext);
+
+    HRESULT (STDMETHODCALLTYPE *IsConnected)(
+        IAsyncRpcChannelBuffer* This);
+
+    /*** IRpcChannelBuffer2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
+        IAsyncRpcChannelBuffer* This,
+        DWORD *pdwVersion);
+
+    /*** IAsyncRpcChannelBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Send)(
+        IAsyncRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMsg,
+        ISynchronize *pSync,
+        ULONG *pulStatus);
+
+    HRESULT (STDMETHODCALLTYPE *Receive)(
+        IAsyncRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMsg,
+        ULONG *pulStatus);
+
+    HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
+        IAsyncRpcChannelBuffer* This,
+        RPCOLEMESSAGE *pMsg,
+        DWORD *pdwDestContext,
+        void **ppvDestContext);
+
+    END_INTERFACE
+} IAsyncRpcChannelBufferVtbl;
+interface IAsyncRpcChannelBuffer {
+    CONST_VTBL IAsyncRpcChannelBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAsyncRpcChannelBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IAsyncRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IAsyncRpcChannelBuffer_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IAsyncRpcChannelBuffer_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IAsyncRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IAsyncRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+/*** IRpcChannelBuffer2 methods ***/
+#define IAsyncRpcChannelBuffer_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)
+/*** IAsyncRpcChannelBuffer methods ***/
+#define IAsyncRpcChannelBuffer_Send(This,pMsg,pSync,pulStatus) (This)->lpVtbl->Send(This,pMsg,pSync,pulStatus)
+#define IAsyncRpcChannelBuffer_Receive(This,pMsg,pulStatus) (This)->lpVtbl->Receive(This,pMsg,pulStatus)
+#define IAsyncRpcChannelBuffer_GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_Send_Proxy(
+    IAsyncRpcChannelBuffer* This,
+    RPCOLEMESSAGE *pMsg,
+    ISynchronize *pSync,
+    ULONG *pulStatus);
+void __RPC_STUB IAsyncRpcChannelBuffer_Send_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_Receive_Proxy(
+    IAsyncRpcChannelBuffer* This,
+    RPCOLEMESSAGE *pMsg,
+    ULONG *pulStatus);
+void __RPC_STUB IAsyncRpcChannelBuffer_Receive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_GetDestCtxEx_Proxy(
+    IAsyncRpcChannelBuffer* This,
+    RPCOLEMESSAGE *pMsg,
+    DWORD *pdwDestContext,
+    void **ppvDestContext);
+void __RPC_STUB IAsyncRpcChannelBuffer_GetDestCtxEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcSyntaxNegotiate interface
+ */
+#ifndef __IRpcSyntaxNegotiate_INTERFACE_DEFINED__
+#define __IRpcSyntaxNegotiate_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRpcSyntaxNegotiate, 0x58a08519, 0x24c8, 0x4935, 0xb4,0x82, 0x3f,0xd8,0x23,0x33,0x3a,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcSyntaxNegotiate : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE NegotiateSyntax(
+        RPCOLEMESSAGE *pMsg) = 0;
+
+};
+#else
+typedef struct IRpcSyntaxNegotiateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcSyntaxNegotiate* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcSyntaxNegotiate* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcSyntaxNegotiate* This);
+
+    /*** IRpcSyntaxNegotiate methods ***/
+    HRESULT (STDMETHODCALLTYPE *NegotiateSyntax)(
+        IRpcSyntaxNegotiate* This,
+        RPCOLEMESSAGE *pMsg);
+
+    END_INTERFACE
+} IRpcSyntaxNegotiateVtbl;
+interface IRpcSyntaxNegotiate {
+    CONST_VTBL IRpcSyntaxNegotiateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcSyntaxNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcSyntaxNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcSyntaxNegotiate_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcSyntaxNegotiate methods ***/
+#define IRpcSyntaxNegotiate_NegotiateSyntax(This,pMsg) (This)->lpVtbl->NegotiateSyntax(This,pMsg)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcSyntaxNegotiate_NegotiateSyntax_Proxy(
+    IRpcSyntaxNegotiate* This,
+    RPCOLEMESSAGE *pMsg);
+void __RPC_STUB IRpcSyntaxNegotiate_NegotiateSyntax_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcSyntaxNegotiate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcProxyBuffer interface
+ */
+#ifndef __IRpcProxyBuffer_INTERFACE_DEFINED__
+#define __IRpcProxyBuffer_INTERFACE_DEFINED__
+
+typedef IRpcProxyBuffer *LPRPCPROXYBUFFER;
+DEFINE_GUID(IID_IRpcProxyBuffer, 0xd5f56a34, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcProxyBuffer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Connect(
+        IRpcChannelBuffer *pRpcChannelBuffer) = 0;
+
+    virtual void STDMETHODCALLTYPE Disconnect(
+        ) = 0;
+
+};
+#else
+typedef struct IRpcProxyBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcProxyBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcProxyBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcProxyBuffer* This);
+
+    /*** IRpcProxyBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Connect)(
+        IRpcProxyBuffer* This,
+        IRpcChannelBuffer *pRpcChannelBuffer);
+
+    void (STDMETHODCALLTYPE *Disconnect)(
+        IRpcProxyBuffer* This);
+
+    END_INTERFACE
+} IRpcProxyBufferVtbl;
+interface IRpcProxyBuffer {
+    CONST_VTBL IRpcProxyBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcProxyBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcProxyBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcProxyBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcProxyBuffer methods ***/
+#define IRpcProxyBuffer_Connect(This,pRpcChannelBuffer) (This)->lpVtbl->Connect(This,pRpcChannelBuffer)
+#define IRpcProxyBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcProxyBuffer_Connect_Proxy(
+    IRpcProxyBuffer* This,
+    IRpcChannelBuffer *pRpcChannelBuffer);
+void __RPC_STUB IRpcProxyBuffer_Connect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IRpcProxyBuffer_Disconnect_Proxy(
+    IRpcProxyBuffer* This);
+void __RPC_STUB IRpcProxyBuffer_Disconnect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcProxyBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcStubBuffer interface
+ */
+#ifndef __IRpcStubBuffer_INTERFACE_DEFINED__
+#define __IRpcStubBuffer_INTERFACE_DEFINED__
+
+typedef IRpcStubBuffer *LPRPCSTUBBUFFER;
+DEFINE_GUID(IID_IRpcStubBuffer, 0xd5f56afc, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcStubBuffer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Connect(
+        IUnknown *pUnkServer) = 0;
+
+    virtual void STDMETHODCALLTYPE Disconnect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Invoke(
+        RPCOLEMESSAGE *_prpcmsg,
+        IRpcChannelBuffer *_pRpcChannelBuffer) = 0;
+
+    virtual IRpcStubBuffer * STDMETHODCALLTYPE IsIIDSupported(
+        REFIID riid) = 0;
+
+    virtual ULONG STDMETHODCALLTYPE CountRefs(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DebugServerQueryInterface(
+        void **ppv) = 0;
+
+    virtual void STDMETHODCALLTYPE DebugServerRelease(
+        void *pv) = 0;
+
+};
+#else
+typedef struct IRpcStubBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcStubBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcStubBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcStubBuffer* This);
+
+    /*** IRpcStubBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Connect)(
+        IRpcStubBuffer* This,
+        IUnknown *pUnkServer);
+
+    void (STDMETHODCALLTYPE *Disconnect)(
+        IRpcStubBuffer* This);
+
+    HRESULT (STDMETHODCALLTYPE *Invoke)(
+        IRpcStubBuffer* This,
+        RPCOLEMESSAGE *_prpcmsg,
+        IRpcChannelBuffer *_pRpcChannelBuffer);
+
+    IRpcStubBuffer * (STDMETHODCALLTYPE *IsIIDSupported)(
+        IRpcStubBuffer* This,
+        REFIID riid);
+
+    ULONG (STDMETHODCALLTYPE *CountRefs)(
+        IRpcStubBuffer* This);
+
+    HRESULT (STDMETHODCALLTYPE *DebugServerQueryInterface)(
+        IRpcStubBuffer* This,
+        void **ppv);
+
+    void (STDMETHODCALLTYPE *DebugServerRelease)(
+        IRpcStubBuffer* This,
+        void *pv);
+
+    END_INTERFACE
+} IRpcStubBufferVtbl;
+interface IRpcStubBuffer {
+    CONST_VTBL IRpcStubBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcStubBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcStubBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcStubBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcStubBuffer methods ***/
+#define IRpcStubBuffer_Connect(This,pUnkServer) (This)->lpVtbl->Connect(This,pUnkServer)
+#define IRpcStubBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)
+#define IRpcStubBuffer_Invoke(This,_prpcmsg,_pRpcChannelBuffer) (This)->lpVtbl->Invoke(This,_prpcmsg,_pRpcChannelBuffer)
+#define IRpcStubBuffer_IsIIDSupported(This,riid) (This)->lpVtbl->IsIIDSupported(This,riid)
+#define IRpcStubBuffer_CountRefs(This) (This)->lpVtbl->CountRefs(This)
+#define IRpcStubBuffer_DebugServerQueryInterface(This,ppv) (This)->lpVtbl->DebugServerQueryInterface(This,ppv)
+#define IRpcStubBuffer_DebugServerRelease(This,pv) (This)->lpVtbl->DebugServerRelease(This,pv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Connect_Proxy(
+    IRpcStubBuffer* This,
+    IUnknown *pUnkServer);
+void __RPC_STUB IRpcStubBuffer_Connect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IRpcStubBuffer_Disconnect_Proxy(
+    IRpcStubBuffer* This);
+void __RPC_STUB IRpcStubBuffer_Disconnect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Invoke_Proxy(
+    IRpcStubBuffer* This,
+    RPCOLEMESSAGE *_prpcmsg,
+    IRpcChannelBuffer *_pRpcChannelBuffer);
+void __RPC_STUB IRpcStubBuffer_Invoke_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+IRpcStubBuffer * STDMETHODCALLTYPE IRpcStubBuffer_IsIIDSupported_Proxy(
+    IRpcStubBuffer* This,
+    REFIID riid);
+void __RPC_STUB IRpcStubBuffer_IsIIDSupported_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IRpcStubBuffer_CountRefs_Proxy(
+    IRpcStubBuffer* This);
+void __RPC_STUB IRpcStubBuffer_CountRefs_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_DebugServerQueryInterface_Proxy(
+    IRpcStubBuffer* This,
+    void **ppv);
+void __RPC_STUB IRpcStubBuffer_DebugServerQueryInterface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IRpcStubBuffer_DebugServerRelease_Proxy(
+    IRpcStubBuffer* This,
+    void *pv);
+void __RPC_STUB IRpcStubBuffer_DebugServerRelease_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcStubBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPSFactoryBuffer interface
+ */
+#ifndef __IPSFactoryBuffer_INTERFACE_DEFINED__
+#define __IPSFactoryBuffer_INTERFACE_DEFINED__
+
+typedef IPSFactoryBuffer *LPPSFACTORYBUFFER;
+DEFINE_GUID(IID_IPSFactoryBuffer, 0xd5f569d0, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPSFactoryBuffer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateProxy(
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        IRpcProxyBuffer **ppProxy,
+        void **ppv) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStub(
+        REFIID riid,
+        IUnknown *pUnkServer,
+        IRpcStubBuffer **ppStub) = 0;
+
+};
+#else
+typedef struct IPSFactoryBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPSFactoryBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPSFactoryBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPSFactoryBuffer* This);
+
+    /*** IPSFactoryBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateProxy)(
+        IPSFactoryBuffer* This,
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        IRpcProxyBuffer **ppProxy,
+        void **ppv);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStub)(
+        IPSFactoryBuffer* This,
+        REFIID riid,
+        IUnknown *pUnkServer,
+        IRpcStubBuffer **ppStub);
+
+    END_INTERFACE
+} IPSFactoryBufferVtbl;
+interface IPSFactoryBuffer {
+    CONST_VTBL IPSFactoryBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPSFactoryBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPSFactoryBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPSFactoryBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IPSFactoryBuffer methods ***/
+#define IPSFactoryBuffer_CreateProxy(This,pUnkOuter,riid,ppProxy,ppv) (This)->lpVtbl->CreateProxy(This,pUnkOuter,riid,ppProxy,ppv)
+#define IPSFactoryBuffer_CreateStub(This,riid,pUnkServer,ppStub) (This)->lpVtbl->CreateStub(This,riid,pUnkServer,ppStub)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateProxy_Proxy(
+    IPSFactoryBuffer* This,
+    IUnknown *pUnkOuter,
+    REFIID riid,
+    IRpcProxyBuffer **ppProxy,
+    void **ppv);
+void __RPC_STUB IPSFactoryBuffer_CreateProxy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateStub_Proxy(
+    IPSFactoryBuffer* This,
+    REFIID riid,
+    IUnknown *pUnkServer,
+    IRpcStubBuffer **ppStub);
+void __RPC_STUB IPSFactoryBuffer_CreateStub_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPSFactoryBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IChannelHook interface
+ */
+#ifndef __IChannelHook_INTERFACE_DEFINED__
+#define __IChannelHook_INTERFACE_DEFINED__
+
+typedef IChannelHook *LPCHANNELHOOK;
+typedef struct SChannelHookCallInfo {
+    IID iid;
+    DWORD cbSize;
+    GUID uCausality;
+    DWORD dwServerPid;
+    DWORD iMethod;
+    void *pObject;
+} SChannelHookCallInfo;
+DEFINE_GUID(IID_IChannelHook, 0x1008c4a0, 0x7613, 0x11cf, 0x9a,0xf1, 0x00,0x20,0xaf,0x6e,0x72,0xf4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IChannelHook : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE ClientGetSize(
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG *pDataSize) = 0;
+
+    virtual void STDMETHODCALLTYPE ClientFillBuffer(
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG *pDataSize,
+        void *pDataBuffer) = 0;
+
+    virtual void STDMETHODCALLTYPE ClientNotify(
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG cbDataSize,
+        void *pDataBuffer,
+        DWORD lDataRep,
+        HRESULT hrFault) = 0;
+
+    virtual void STDMETHODCALLTYPE ServerNotify(
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG cbDataSize,
+        void *pDataBuffer,
+        DWORD lDataRep) = 0;
+
+    virtual void STDMETHODCALLTYPE ServerGetSize(
+        REFGUID uExtent,
+        REFIID riid,
+        HRESULT hrFault,
+        ULONG *pDataSize) = 0;
+
+    virtual void STDMETHODCALLTYPE ServerFillBuffer(
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG *pDataSize,
+        void *pDataBuffer,
+        HRESULT hrFault) = 0;
+
+};
+#else
+typedef struct IChannelHookVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IChannelHook* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IChannelHook* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IChannelHook* This);
+
+    /*** IChannelHook methods ***/
+    void (STDMETHODCALLTYPE *ClientGetSize)(
+        IChannelHook* This,
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG *pDataSize);
+
+    void (STDMETHODCALLTYPE *ClientFillBuffer)(
+        IChannelHook* This,
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG *pDataSize,
+        void *pDataBuffer);
+
+    void (STDMETHODCALLTYPE *ClientNotify)(
+        IChannelHook* This,
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG cbDataSize,
+        void *pDataBuffer,
+        DWORD lDataRep,
+        HRESULT hrFault);
+
+    void (STDMETHODCALLTYPE *ServerNotify)(
+        IChannelHook* This,
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG cbDataSize,
+        void *pDataBuffer,
+        DWORD lDataRep);
+
+    void (STDMETHODCALLTYPE *ServerGetSize)(
+        IChannelHook* This,
+        REFGUID uExtent,
+        REFIID riid,
+        HRESULT hrFault,
+        ULONG *pDataSize);
+
+    void (STDMETHODCALLTYPE *ServerFillBuffer)(
+        IChannelHook* This,
+        REFGUID uExtent,
+        REFIID riid,
+        ULONG *pDataSize,
+        void *pDataBuffer,
+        HRESULT hrFault);
+
+    END_INTERFACE
+} IChannelHookVtbl;
+interface IChannelHook {
+    CONST_VTBL IChannelHookVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IChannelHook_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IChannelHook_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IChannelHook_Release(This) (This)->lpVtbl->Release(This)
+/*** IChannelHook methods ***/
+#define IChannelHook_ClientGetSize(This,uExtent,riid,pDataSize) (This)->lpVtbl->ClientGetSize(This,uExtent,riid,pDataSize)
+#define IChannelHook_ClientFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer) (This)->lpVtbl->ClientFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer)
+#define IChannelHook_ClientNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep,hrFault) (This)->lpVtbl->ClientNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep,hrFault)
+#define IChannelHook_ServerNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep) (This)->lpVtbl->ServerNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep)
+#define IChannelHook_ServerGetSize(This,uExtent,riid,hrFault,pDataSize) (This)->lpVtbl->ServerGetSize(This,uExtent,riid,hrFault,pDataSize)
+#define IChannelHook_ServerFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer,hrFault) (This)->lpVtbl->ServerFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer,hrFault)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IChannelHook_ClientGetSize_Proxy(
+    IChannelHook* This,
+    REFGUID uExtent,
+    REFIID riid,
+    ULONG *pDataSize);
+void __RPC_STUB IChannelHook_ClientGetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ClientFillBuffer_Proxy(
+    IChannelHook* This,
+    REFGUID uExtent,
+    REFIID riid,
+    ULONG *pDataSize,
+    void *pDataBuffer);
+void __RPC_STUB IChannelHook_ClientFillBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ClientNotify_Proxy(
+    IChannelHook* This,
+    REFGUID uExtent,
+    REFIID riid,
+    ULONG cbDataSize,
+    void *pDataBuffer,
+    DWORD lDataRep,
+    HRESULT hrFault);
+void __RPC_STUB IChannelHook_ClientNotify_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ServerNotify_Proxy(
+    IChannelHook* This,
+    REFGUID uExtent,
+    REFIID riid,
+    ULONG cbDataSize,
+    void *pDataBuffer,
+    DWORD lDataRep);
+void __RPC_STUB IChannelHook_ServerNotify_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ServerGetSize_Proxy(
+    IChannelHook* This,
+    REFGUID uExtent,
+    REFIID riid,
+    HRESULT hrFault,
+    ULONG *pDataSize);
+void __RPC_STUB IChannelHook_ServerGetSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ServerFillBuffer_Proxy(
+    IChannelHook* This,
+    REFGUID uExtent,
+    REFIID riid,
+    ULONG *pDataSize,
+    void *pDataBuffer,
+    HRESULT hrFault);
+void __RPC_STUB IChannelHook_ServerFillBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IChannelHook_INTERFACE_DEFINED__ */
+
+extern const FMTID FMTID_SummaryInformation;
+
+extern const FMTID FMTID_DocSummaryInformation;
+
+extern const FMTID FMTID_UserDefinedProperties;
+
+/*****************************************************************************
+ * IClientSecurity interface
+ */
+#ifndef __IClientSecurity_INTERFACE_DEFINED__
+#define __IClientSecurity_INTERFACE_DEFINED__
+
+typedef struct tagSOLE_AUTHENTICATION_SERVICE {
+    DWORD dwAuthnSvc;
+    DWORD dwAuthzSvc;
+    OLECHAR *pPrincipalName;
+    HRESULT hr;
+} SOLE_AUTHENTICATION_SERVICE;
+typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
+typedef struct tagSOLE_AUTHENTICATION_INFO {
+    DWORD dwAuthnSvc;
+    DWORD dwAuthzSvc;
+    void *pAuthInfo;
+} SOLE_AUTHENTICATION_INFO;
+#define COLE_DEFAULT_PRINCIPAL ((OLECHAR *)-1)
+
+#define COLE_DEFAULT_AUTHINFO ((void *)-1)
+
+typedef struct tagSOLE_AUTHENTICATION_LIST {
+    DWORD cAuthInfo;
+    SOLE_AUTHENTICATION_INFO *aAuthInfo;
+} SOLE_AUTHENTICATION_LIST;
+typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
+    EOAC_NONE = 0x0,
+    EOAC_MUTUAL_AUTH = 0x1,
+    EOAC_SECURE_REFS = 0x2,
+    EOAC_ACCESS_CONTROL = 0x4,
+    EOAC_APPID = 0x8,
+    EOAC_DYNAMIC = 0x10,
+    EOAC_STATIC_CLOAKING = 0x20,
+    EOAC_DYNAMIC_CLOAKING = 0x40,
+    EOAC_ANY_AUTHORITY = 0x80,
+    EOAC_MAKE_FULLSIC = 0x100,
+    EOAC_REQUIRE_FULLSIC = 0x200,
+    EOAC_AUTO_IMPERSONATE = 0x400,
+    EOAC_DEFAULT = 0x800,
+    EOAC_DISABLE_AAA = 0x1000,
+    EOAC_NO_CUSTOM_MARSHAL = 0x2000
+} EOLE_AUTHENTICATION_CAPABILITIES;
+DEFINE_GUID(IID_IClientSecurity, 0x0000013d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IClientSecurity : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryBlanket(
+        IUnknown *pProxy,
+        DWORD *pAuthnSvc,
+        DWORD *pAuthzSvc,
+        OLECHAR **pServerPrincName,
+        DWORD *pAuthnLevel,
+        DWORD *pImpLevel,
+        void **pAuthInfo,
+        DWORD *pCapabilities) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBlanket(
+        IUnknown *pProxy,
+        DWORD AuthnSvc,
+        DWORD AuthzSvc,
+        OLECHAR *pServerPrincName,
+        DWORD AuthnLevel,
+        DWORD ImpLevel,
+        void *pAuthInfo,
+        DWORD Capabilities) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CopyProxy(
+        IUnknown *pProxy,
+        IUnknown **ppCopy) = 0;
+
+};
+#else
+typedef struct IClientSecurityVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IClientSecurity* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IClientSecurity* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IClientSecurity* This);
+
+    /*** IClientSecurity methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
+        IClientSecurity* This,
+        IUnknown *pProxy,
+        DWORD *pAuthnSvc,
+        DWORD *pAuthzSvc,
+        OLECHAR **pServerPrincName,
+        DWORD *pAuthnLevel,
+        DWORD *pImpLevel,
+        void **pAuthInfo,
+        DWORD *pCapabilities);
+
+    HRESULT (STDMETHODCALLTYPE *SetBlanket)(
+        IClientSecurity* This,
+        IUnknown *pProxy,
+        DWORD AuthnSvc,
+        DWORD AuthzSvc,
+        OLECHAR *pServerPrincName,
+        DWORD AuthnLevel,
+        DWORD ImpLevel,
+        void *pAuthInfo,
+        DWORD Capabilities);
+
+    HRESULT (STDMETHODCALLTYPE *CopyProxy)(
+        IClientSecurity* This,
+        IUnknown *pProxy,
+        IUnknown **ppCopy);
+
+    END_INTERFACE
+} IClientSecurityVtbl;
+interface IClientSecurity {
+    CONST_VTBL IClientSecurityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IClientSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IClientSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IClientSecurity_Release(This) (This)->lpVtbl->Release(This)
+/*** IClientSecurity methods ***/
+#define IClientSecurity_QueryBlanket(This,pProxy,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pAuthInfo,pCapabilities) (This)->lpVtbl->QueryBlanket(This,pProxy,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pAuthInfo,pCapabilities)
+#define IClientSecurity_SetBlanket(This,pProxy,AuthnSvc,AuthzSvc,pServerPrincName,AuthnLevel,ImpLevel,pAuthInfo,Capabilities) (This)->lpVtbl->SetBlanket(This,pProxy,AuthnSvc,AuthzSvc,pServerPrincName,AuthnLevel,ImpLevel,pAuthInfo,Capabilities)
+#define IClientSecurity_CopyProxy(This,pProxy,ppCopy) (This)->lpVtbl->CopyProxy(This,pProxy,ppCopy)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IClientSecurity_QueryBlanket_Proxy(
+    IClientSecurity* This,
+    IUnknown *pProxy,
+    DWORD *pAuthnSvc,
+    DWORD *pAuthzSvc,
+    OLECHAR **pServerPrincName,
+    DWORD *pAuthnLevel,
+    DWORD *pImpLevel,
+    void **pAuthInfo,
+    DWORD *pCapabilities);
+void __RPC_STUB IClientSecurity_QueryBlanket_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IClientSecurity_SetBlanket_Proxy(
+    IClientSecurity* This,
+    IUnknown *pProxy,
+    DWORD AuthnSvc,
+    DWORD AuthzSvc,
+    OLECHAR *pServerPrincName,
+    DWORD AuthnLevel,
+    DWORD ImpLevel,
+    void *pAuthInfo,
+    DWORD Capabilities);
+void __RPC_STUB IClientSecurity_SetBlanket_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IClientSecurity_CopyProxy_Proxy(
+    IClientSecurity* This,
+    IUnknown *pProxy,
+    IUnknown **ppCopy);
+void __RPC_STUB IClientSecurity_CopyProxy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IClientSecurity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IServerSecurity interface
+ */
+#ifndef __IServerSecurity_INTERFACE_DEFINED__
+#define __IServerSecurity_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IServerSecurity, 0x0000013e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IServerSecurity : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryBlanket(
+        DWORD *pAuthnSvc,
+        DWORD *pAuthzSvc,
+        OLECHAR **pServerPrincName,
+        DWORD *pAuthnLevel,
+        DWORD *pImpLevel,
+        void **pPrivs,
+        DWORD *pCapabilities) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ImpersonateClient(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RevertToSelf(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE IsImpersonating(
+        ) = 0;
+
+};
+#else
+typedef struct IServerSecurityVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IServerSecurity* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IServerSecurity* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IServerSecurity* This);
+
+    /*** IServerSecurity methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
+        IServerSecurity* This,
+        DWORD *pAuthnSvc,
+        DWORD *pAuthzSvc,
+        OLECHAR **pServerPrincName,
+        DWORD *pAuthnLevel,
+        DWORD *pImpLevel,
+        void **pPrivs,
+        DWORD *pCapabilities);
+
+    HRESULT (STDMETHODCALLTYPE *ImpersonateClient)(
+        IServerSecurity* This);
+
+    HRESULT (STDMETHODCALLTYPE *RevertToSelf)(
+        IServerSecurity* This);
+
+    BOOL (STDMETHODCALLTYPE *IsImpersonating)(
+        IServerSecurity* This);
+
+    END_INTERFACE
+} IServerSecurityVtbl;
+interface IServerSecurity {
+    CONST_VTBL IServerSecurityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IServerSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IServerSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IServerSecurity_Release(This) (This)->lpVtbl->Release(This)
+/*** IServerSecurity methods ***/
+#define IServerSecurity_QueryBlanket(This,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pPrivs,pCapabilities) (This)->lpVtbl->QueryBlanket(This,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pPrivs,pCapabilities)
+#define IServerSecurity_ImpersonateClient(This) (This)->lpVtbl->ImpersonateClient(This)
+#define IServerSecurity_RevertToSelf(This) (This)->lpVtbl->RevertToSelf(This)
+#define IServerSecurity_IsImpersonating(This) (This)->lpVtbl->IsImpersonating(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IServerSecurity_QueryBlanket_Proxy(
+    IServerSecurity* This,
+    DWORD *pAuthnSvc,
+    DWORD *pAuthzSvc,
+    OLECHAR **pServerPrincName,
+    DWORD *pAuthnLevel,
+    DWORD *pImpLevel,
+    void **pPrivs,
+    DWORD *pCapabilities);
+void __RPC_STUB IServerSecurity_QueryBlanket_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IServerSecurity_ImpersonateClient_Proxy(
+    IServerSecurity* This);
+void __RPC_STUB IServerSecurity_ImpersonateClient_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IServerSecurity_RevertToSelf_Proxy(
+    IServerSecurity* This);
+void __RPC_STUB IServerSecurity_RevertToSelf_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IServerSecurity_IsImpersonating_Proxy(
+    IServerSecurity* This);
+void __RPC_STUB IServerSecurity_IsImpersonating_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IServerSecurity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncSetup interface
+ */
+#ifndef __IAsyncSetup_INTERFACE_DEFINED__
+#define __IAsyncSetup_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAsyncSetup, 0x00000024, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAsyncSetup : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetAsyncManager(
+        REFIID riid,
+        IUnknown *pOuter,
+        DWORD dwFlags,
+        IUnknown **ppInner,
+        IAsyncManager **ppAsyncMgr) = 0;
+
+};
+#else
+typedef struct IAsyncSetupVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAsyncSetup* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAsyncSetup* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAsyncSetup* This);
+
+    /*** IAsyncSetup methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAsyncManager)(
+        IAsyncSetup* This,
+        REFIID riid,
+        IUnknown *pOuter,
+        DWORD dwFlags,
+        IUnknown **ppInner,
+        IAsyncManager **ppAsyncMgr);
+
+    END_INTERFACE
+} IAsyncSetupVtbl;
+interface IAsyncSetup {
+    CONST_VTBL IAsyncSetupVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAsyncSetup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncSetup_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncSetup_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncSetup methods ***/
+#define IAsyncSetup_GetAsyncManager(This,riid,pOuter,dwFlags,ppInner,ppAsyncMgr) (This)->lpVtbl->GetAsyncManager(This,riid,pOuter,dwFlags,ppInner,ppAsyncMgr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAsyncSetup_GetAsyncManager_Proxy(
+    IAsyncSetup* This,
+    REFIID riid,
+    IUnknown *pOuter,
+    DWORD dwFlags,
+    IUnknown **ppInner,
+    IAsyncManager **ppAsyncMgr);
+void __RPC_STUB IAsyncSetup_GetAsyncManager_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAsyncSetup_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectWriterLock interface
+ */
+#ifndef __IDirectWriterLock_INTERFACE_DEFINED__
+#define __IDirectWriterLock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectWriterLock, 0x0e6d4d92, 0x6738, 0x11cf, 0x96,0x08, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDirectWriterLock : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE WaitForWriteAccess(
+        DWORD dwTimeout) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseWriteAccess(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HaveWriteAccess(
+        ) = 0;
+
+};
+#else
+typedef struct IDirectWriterLockVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectWriterLock* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectWriterLock* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectWriterLock* This);
+
+    /*** IDirectWriterLock methods ***/
+    HRESULT (STDMETHODCALLTYPE *WaitForWriteAccess)(
+        IDirectWriterLock* This,
+        DWORD dwTimeout);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseWriteAccess)(
+        IDirectWriterLock* This);
+
+    HRESULT (STDMETHODCALLTYPE *HaveWriteAccess)(
+        IDirectWriterLock* This);
+
+    END_INTERFACE
+} IDirectWriterLockVtbl;
+interface IDirectWriterLock {
+    CONST_VTBL IDirectWriterLockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDirectWriterLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectWriterLock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectWriterLock_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectWriterLock methods ***/
+#define IDirectWriterLock_WaitForWriteAccess(This,dwTimeout) (This)->lpVtbl->WaitForWriteAccess(This,dwTimeout)
+#define IDirectWriterLock_ReleaseWriteAccess(This) (This)->lpVtbl->ReleaseWriteAccess(This)
+#define IDirectWriterLock_HaveWriteAccess(This) (This)->lpVtbl->HaveWriteAccess(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDirectWriterLock_WaitForWriteAccess_Proxy(
+    IDirectWriterLock* This,
+    DWORD dwTimeout);
+void __RPC_STUB IDirectWriterLock_WaitForWriteAccess_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectWriterLock_ReleaseWriteAccess_Proxy(
+    IDirectWriterLock* This);
+void __RPC_STUB IDirectWriterLock_ReleaseWriteAccess_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectWriterLock_HaveWriteAccess_Proxy(
+    IDirectWriterLock* This);
+void __RPC_STUB IDirectWriterLock_HaveWriteAccess_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDirectWriterLock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronize interface
+ */
+#ifndef __ISynchronize_INTERFACE_DEFINED__
+#define __ISynchronize_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronize, 0x00000030, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronize : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Wait(
+        DWORD dwFlags,
+        DWORD dwMilliseconds) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Signal(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+};
+#else
+typedef struct ISynchronizeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISynchronize* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISynchronize* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISynchronize* This);
+
+    /*** ISynchronize methods ***/
+    HRESULT (STDMETHODCALLTYPE *Wait)(
+        ISynchronize* This,
+        DWORD dwFlags,
+        DWORD dwMilliseconds);
+
+    HRESULT (STDMETHODCALLTYPE *Signal)(
+        ISynchronize* This);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        ISynchronize* This);
+
+    END_INTERFACE
+} ISynchronizeVtbl;
+interface ISynchronize {
+    CONST_VTBL ISynchronizeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronize_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronize_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronize_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronize methods ***/
+#define ISynchronize_Wait(This,dwFlags,dwMilliseconds) (This)->lpVtbl->Wait(This,dwFlags,dwMilliseconds)
+#define ISynchronize_Signal(This) (This)->lpVtbl->Signal(This)
+#define ISynchronize_Reset(This) (This)->lpVtbl->Reset(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronize_Wait_Proxy(
+    ISynchronize* This,
+    DWORD dwFlags,
+    DWORD dwMilliseconds);
+void __RPC_STUB ISynchronize_Wait_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISynchronize_Signal_Proxy(
+    ISynchronize* This);
+void __RPC_STUB ISynchronize_Signal_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISynchronize_Reset_Proxy(
+    ISynchronize* This);
+void __RPC_STUB ISynchronize_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISynchronize_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeHandle interface
+ */
+#ifndef __ISynchronizeHandle_INTERFACE_DEFINED__
+#define __ISynchronizeHandle_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeHandle, 0x00000031, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeHandle : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetHandle(
+        HANDLE *ph) = 0;
+
+};
+#else
+typedef struct ISynchronizeHandleVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISynchronizeHandle* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISynchronizeHandle* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISynchronizeHandle* This);
+
+    /*** ISynchronizeHandle methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetHandle)(
+        ISynchronizeHandle* This,
+        HANDLE *ph);
+
+    END_INTERFACE
+} ISynchronizeHandleVtbl;
+interface ISynchronizeHandle {
+    CONST_VTBL ISynchronizeHandleVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeHandle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeHandle_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeHandle_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronizeHandle methods ***/
+#define ISynchronizeHandle_GetHandle(This,ph) (This)->lpVtbl->GetHandle(This,ph)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeHandle_GetHandle_Proxy(
+    ISynchronizeHandle* This,
+    HANDLE *ph);
+void __RPC_STUB ISynchronizeHandle_GetHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISynchronizeHandle_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeEvent interface
+ */
+#ifndef __ISynchronizeEvent_INTERFACE_DEFINED__
+#define __ISynchronizeEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeEvent, 0x00000032, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeEvent : public ISynchronizeHandle
+{
+    virtual HRESULT STDMETHODCALLTYPE SetEventHandle(
+        HANDLE *ph) = 0;
+
+};
+#else
+typedef struct ISynchronizeEventVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISynchronizeEvent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISynchronizeEvent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISynchronizeEvent* This);
+
+    /*** ISynchronizeHandle methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetHandle)(
+        ISynchronizeEvent* This,
+        HANDLE *ph);
+
+    /*** ISynchronizeEvent methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetEventHandle)(
+        ISynchronizeEvent* This,
+        HANDLE *ph);
+
+    END_INTERFACE
+} ISynchronizeEventVtbl;
+interface ISynchronizeEvent {
+    CONST_VTBL ISynchronizeEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronizeHandle methods ***/
+#define ISynchronizeEvent_GetHandle(This,ph) (This)->lpVtbl->GetHandle(This,ph)
+/*** ISynchronizeEvent methods ***/
+#define ISynchronizeEvent_SetEventHandle(This,ph) (This)->lpVtbl->SetEventHandle(This,ph)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeEvent_SetEventHandle_Proxy(
+    ISynchronizeEvent* This,
+    HANDLE *ph);
+void __RPC_STUB ISynchronizeEvent_SetEventHandle_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISynchronizeEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeContainer interface
+ */
+#ifndef __ISynchronizeContainer_INTERFACE_DEFINED__
+#define __ISynchronizeContainer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeContainer, 0x00000033, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeContainer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AddSynchronize(
+        ISynchronize *pSync) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WaitMultiple(
+        DWORD dwFlags,
+        DWORD dwTimeOut,
+        ISynchronize **ppSync) = 0;
+
+};
+#else
+typedef struct ISynchronizeContainerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISynchronizeContainer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISynchronizeContainer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISynchronizeContainer* This);
+
+    /*** ISynchronizeContainer methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddSynchronize)(
+        ISynchronizeContainer* This,
+        ISynchronize *pSync);
+
+    HRESULT (STDMETHODCALLTYPE *WaitMultiple)(
+        ISynchronizeContainer* This,
+        DWORD dwFlags,
+        DWORD dwTimeOut,
+        ISynchronize **ppSync);
+
+    END_INTERFACE
+} ISynchronizeContainerVtbl;
+interface ISynchronizeContainer {
+    CONST_VTBL ISynchronizeContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronizeContainer methods ***/
+#define ISynchronizeContainer_AddSynchronize(This,pSync) (This)->lpVtbl->AddSynchronize(This,pSync)
+#define ISynchronizeContainer_WaitMultiple(This,dwFlags,dwTimeOut,ppSync) (This)->lpVtbl->WaitMultiple(This,dwFlags,dwTimeOut,ppSync)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeContainer_AddSynchronize_Proxy(
+    ISynchronizeContainer* This,
+    ISynchronize *pSync);
+void __RPC_STUB ISynchronizeContainer_AddSynchronize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISynchronizeContainer_WaitMultiple_Proxy(
+    ISynchronizeContainer* This,
+    DWORD dwFlags,
+    DWORD dwTimeOut,
+    ISynchronize **ppSync);
+void __RPC_STUB ISynchronizeContainer_WaitMultiple_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISynchronizeContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeMutex interface
+ */
+#ifndef __ISynchronizeMutex_INTERFACE_DEFINED__
+#define __ISynchronizeMutex_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeMutex, 0x00000025, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeMutex : public ISynchronize
+{
+    virtual HRESULT STDMETHODCALLTYPE ReleaseMutex(
+        ) = 0;
+
+};
+#else
+typedef struct ISynchronizeMutexVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISynchronizeMutex* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISynchronizeMutex* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISynchronizeMutex* This);
+
+    /*** ISynchronize methods ***/
+    HRESULT (STDMETHODCALLTYPE *Wait)(
+        ISynchronizeMutex* This,
+        DWORD dwFlags,
+        DWORD dwMilliseconds);
+
+    HRESULT (STDMETHODCALLTYPE *Signal)(
+        ISynchronizeMutex* This);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        ISynchronizeMutex* This);
+
+    /*** ISynchronizeMutex methods ***/
+    HRESULT (STDMETHODCALLTYPE *ReleaseMutex)(
+        ISynchronizeMutex* This);
+
+    END_INTERFACE
+} ISynchronizeMutexVtbl;
+interface ISynchronizeMutex {
+    CONST_VTBL ISynchronizeMutexVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeMutex_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeMutex_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeMutex_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronize methods ***/
+#define ISynchronizeMutex_Wait(This,dwFlags,dwMilliseconds) (This)->lpVtbl->Wait(This,dwFlags,dwMilliseconds)
+#define ISynchronizeMutex_Signal(This) (This)->lpVtbl->Signal(This)
+#define ISynchronizeMutex_Reset(This) (This)->lpVtbl->Reset(This)
+/*** ISynchronizeMutex methods ***/
+#define ISynchronizeMutex_ReleaseMutex(This) (This)->lpVtbl->ReleaseMutex(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeMutex_ReleaseMutex_Proxy(
+    ISynchronizeMutex* This);
+void __RPC_STUB ISynchronizeMutex_ReleaseMutex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISynchronizeMutex_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICancelMethodCalls interface
+ */
+#ifndef __ICancelMethodCalls_INTERFACE_DEFINED__
+#define __ICancelMethodCalls_INTERFACE_DEFINED__
+
+typedef ICancelMethodCalls *LPCANCELMETHODCALLS;
+DEFINE_GUID(IID_ICancelMethodCalls, 0x00000029, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICancelMethodCalls : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cancel(
+        ULONG ulSeconds) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TestCancel(
+        ) = 0;
+
+};
+#else
+typedef struct ICancelMethodCallsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICancelMethodCalls* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICancelMethodCalls* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICancelMethodCalls* This);
+
+    /*** ICancelMethodCalls methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cancel)(
+        ICancelMethodCalls* This,
+        ULONG ulSeconds);
+
+    HRESULT (STDMETHODCALLTYPE *TestCancel)(
+        ICancelMethodCalls* This);
+
+    END_INTERFACE
+} ICancelMethodCallsVtbl;
+interface ICancelMethodCalls {
+    CONST_VTBL ICancelMethodCallsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICancelMethodCalls_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICancelMethodCalls_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICancelMethodCalls_Release(This) (This)->lpVtbl->Release(This)
+/*** ICancelMethodCalls methods ***/
+#define ICancelMethodCalls_Cancel(This,ulSeconds) (This)->lpVtbl->Cancel(This,ulSeconds)
+#define ICancelMethodCalls_TestCancel(This) (This)->lpVtbl->TestCancel(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICancelMethodCalls_Cancel_Proxy(
+    ICancelMethodCalls* This,
+    ULONG ulSeconds);
+void __RPC_STUB ICancelMethodCalls_Cancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICancelMethodCalls_TestCancel_Proxy(
+    ICancelMethodCalls* This);
+void __RPC_STUB ICancelMethodCalls_TestCancel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICancelMethodCalls_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncManager interface
+ */
+#ifndef __IAsyncManager_INTERFACE_DEFINED__
+#define __IAsyncManager_INTERFACE_DEFINED__
+
+typedef enum tagDCOM_CALL_STATE {
+    DCOM_NONE = 0,
+    DCOM_CALL_COMPLETE = 1,
+    DCOM_CALL_CANCELED = 2
+} DCOM_CALL_STATE;
+DEFINE_GUID(IID_IAsyncManager, 0x0000002a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAsyncManager : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CompleteCall(
+        HRESULT Result) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCallContext(
+        REFIID riid,
+        void **pInterface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetState(
+        ULONG *pulStateFlags) = 0;
+
+};
+#else
+typedef struct IAsyncManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAsyncManager* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAsyncManager* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAsyncManager* This);
+
+    /*** IAsyncManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *CompleteCall)(
+        IAsyncManager* This,
+        HRESULT Result);
+
+    HRESULT (STDMETHODCALLTYPE *GetCallContext)(
+        IAsyncManager* This,
+        REFIID riid,
+        void **pInterface);
+
+    HRESULT (STDMETHODCALLTYPE *GetState)(
+        IAsyncManager* This,
+        ULONG *pulStateFlags);
+
+    END_INTERFACE
+} IAsyncManagerVtbl;
+interface IAsyncManager {
+    CONST_VTBL IAsyncManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAsyncManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncManager methods ***/
+#define IAsyncManager_CompleteCall(This,Result) (This)->lpVtbl->CompleteCall(This,Result)
+#define IAsyncManager_GetCallContext(This,riid,pInterface) (This)->lpVtbl->GetCallContext(This,riid,pInterface)
+#define IAsyncManager_GetState(This,pulStateFlags) (This)->lpVtbl->GetState(This,pulStateFlags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAsyncManager_CompleteCall_Proxy(
+    IAsyncManager* This,
+    HRESULT Result);
+void __RPC_STUB IAsyncManager_CompleteCall_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncManager_GetCallContext_Proxy(
+    IAsyncManager* This,
+    REFIID riid,
+    void **pInterface);
+void __RPC_STUB IAsyncManager_GetCallContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncManager_GetState_Proxy(
+    IAsyncManager* This,
+    ULONG *pulStateFlags);
+void __RPC_STUB IAsyncManager_GetState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAsyncManager_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICallFactory interface
+ */
+#ifndef __ICallFactory_INTERFACE_DEFINED__
+#define __ICallFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICallFactory, 0x1c733a30, 0x2a1c, 0x11ce, 0xad,0xe5, 0x00,0xaa,0x00,0x44,0x77,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICallFactory : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateCall(
+        REFIID riid,
+        IUnknown *pCtrlUnk,
+        REFIID riid2,
+        IUnknown **ppv) = 0;
+
+};
+#else
+typedef struct ICallFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICallFactory* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICallFactory* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICallFactory* This);
+
+    /*** ICallFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateCall)(
+        ICallFactory* This,
+        REFIID riid,
+        IUnknown *pCtrlUnk,
+        REFIID riid2,
+        IUnknown **ppv);
+
+    END_INTERFACE
+} ICallFactoryVtbl;
+interface ICallFactory {
+    CONST_VTBL ICallFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICallFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICallFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICallFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** ICallFactory methods ***/
+#define ICallFactory_CreateCall(This,riid,pCtrlUnk,riid2,ppv) (This)->lpVtbl->CreateCall(This,riid,pCtrlUnk,riid2,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICallFactory_CreateCall_Proxy(
+    ICallFactory* This,
+    REFIID riid,
+    IUnknown *pCtrlUnk,
+    REFIID riid2,
+    IUnknown **ppv);
+void __RPC_STUB ICallFactory_CreateCall_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICallFactory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcOptions interface
+ */
+#ifndef __IRpcOptions_INTERFACE_DEFINED__
+#define __IRpcOptions_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRpcOptions, 0x00000144, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcOptions : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Set(
+        IUnknown *pPrx,
+        DWORD dwProperty,
+        ULONG_PTR dwValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Query(
+        IUnknown *pPrx,
+        DWORD dwProperty,
+        ULONG_PTR *pdwValue) = 0;
+
+};
+#else
+typedef struct IRpcOptionsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcOptions* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcOptions* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcOptions* This);
+
+    /*** IRpcOptions methods ***/
+    HRESULT (STDMETHODCALLTYPE *Set)(
+        IRpcOptions* This,
+        IUnknown *pPrx,
+        DWORD dwProperty,
+        ULONG_PTR dwValue);
+
+    HRESULT (STDMETHODCALLTYPE *Query)(
+        IRpcOptions* This,
+        IUnknown *pPrx,
+        DWORD dwProperty,
+        ULONG_PTR *pdwValue);
+
+    END_INTERFACE
+} IRpcOptionsVtbl;
+interface IRpcOptions {
+    CONST_VTBL IRpcOptionsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcOptions_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcOptions_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcOptions_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcOptions methods ***/
+#define IRpcOptions_Set(This,pPrx,dwProperty,dwValue) (This)->lpVtbl->Set(This,pPrx,dwProperty,dwValue)
+#define IRpcOptions_Query(This,pPrx,dwProperty,pdwValue) (This)->lpVtbl->Query(This,pPrx,dwProperty,pdwValue)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcOptions_Set_Proxy(
+    IRpcOptions* This,
+    IUnknown *pPrx,
+    DWORD dwProperty,
+    ULONG_PTR dwValue);
+void __RPC_STUB IRpcOptions_Set_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcOptions_Query_Proxy(
+    IRpcOptions* This,
+    IUnknown *pPrx,
+    DWORD dwProperty,
+    ULONG_PTR *pdwValue);
+void __RPC_STUB IRpcOptions_Query_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcOptions_INTERFACE_DEFINED__ */
+
+enum {
+    COMBND_RPCTIMEOUT = 1,
+    COMBND_SERVER_LOCALITY = 2
+};
+
+enum {
+    SERVER_LOCALITY_PROCESS_LOCAL = 0,
+    SERVER_LOCALITY_MACHINE_LOCAL = 1,
+    SERVER_LOCALITY_REMOTE = 2
+};
+
+/*****************************************************************************
+ * IRpcHelper interface
+ */
+#ifndef __IRpcHelper_INTERFACE_DEFINED__
+#define __IRpcHelper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRpcHelper, 0x00000149, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcHelper : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDCOMProtocolVersion(
+        DWORD *pComVersion) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIIDFromOBJREF(
+        void *pObjRef,
+        IID **piid) = 0;
+
+};
+#else
+typedef struct IRpcHelperVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IRpcHelper* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IRpcHelper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IRpcHelper* This);
+
+    /*** IRpcHelper methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDCOMProtocolVersion)(
+        IRpcHelper* This,
+        DWORD *pComVersion);
+
+    HRESULT (STDMETHODCALLTYPE *GetIIDFromOBJREF)(
+        IRpcHelper* This,
+        void *pObjRef,
+        IID **piid);
+
+    END_INTERFACE
+} IRpcHelperVtbl;
+interface IRpcHelper {
+    CONST_VTBL IRpcHelperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcHelper_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcHelper methods ***/
+#define IRpcHelper_GetDCOMProtocolVersion(This,pComVersion) (This)->lpVtbl->GetDCOMProtocolVersion(This,pComVersion)
+#define IRpcHelper_GetIIDFromOBJREF(This,pObjRef,piid) (This)->lpVtbl->GetIIDFromOBJREF(This,pObjRef,piid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcHelper_GetDCOMProtocolVersion_Proxy(
+    IRpcHelper* This,
+    DWORD *pComVersion);
+void __RPC_STUB IRpcHelper_GetDCOMProtocolVersion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcHelper_GetIIDFromOBJREF_Proxy(
+    IRpcHelper* This,
+    void *pObjRef,
+    IID **piid);
+void __RPC_STUB IRpcHelper_GetIIDFromOBJREF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IRpcHelper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IReleaseMarshalBuffers interface
+ */
+#ifndef __IReleaseMarshalBuffers_INTERFACE_DEFINED__
+#define __IReleaseMarshalBuffers_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IReleaseMarshalBuffers, 0xeb0cb9e8, 0x7996, 0x11d2, 0x87,0x2e, 0x00,0x00,0xf8,0x08,0x08,0x59);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IReleaseMarshalBuffers : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ReleaseMarshalBuffer(
+        RPCOLEMESSAGE *pMsg,
+        DWORD dwFlags,
+        IUnknown *pChnl) = 0;
+
+};
+#else
+typedef struct IReleaseMarshalBuffersVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IReleaseMarshalBuffers* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IReleaseMarshalBuffers* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IReleaseMarshalBuffers* This);
+
+    /*** IReleaseMarshalBuffers methods ***/
+    HRESULT (STDMETHODCALLTYPE *ReleaseMarshalBuffer)(
+        IReleaseMarshalBuffers* This,
+        RPCOLEMESSAGE *pMsg,
+        DWORD dwFlags,
+        IUnknown *pChnl);
+
+    END_INTERFACE
+} IReleaseMarshalBuffersVtbl;
+interface IReleaseMarshalBuffers {
+    CONST_VTBL IReleaseMarshalBuffersVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IReleaseMarshalBuffers_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IReleaseMarshalBuffers_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IReleaseMarshalBuffers_Release(This) (This)->lpVtbl->Release(This)
+/*** IReleaseMarshalBuffers methods ***/
+#define IReleaseMarshalBuffers_ReleaseMarshalBuffer(This,pMsg,dwFlags,pChnl) (This)->lpVtbl->ReleaseMarshalBuffer(This,pMsg,dwFlags,pChnl)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IReleaseMarshalBuffers_ReleaseMarshalBuffer_Proxy(
+    IReleaseMarshalBuffers* This,
+    RPCOLEMESSAGE *pMsg,
+    DWORD dwFlags,
+    IUnknown *pChnl);
+void __RPC_STUB IReleaseMarshalBuffers_ReleaseMarshalBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IReleaseMarshalBuffers_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWaitMultiple interface
+ */
+#ifndef __IWaitMultiple_INTERFACE_DEFINED__
+#define __IWaitMultiple_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWaitMultiple, 0x0000002b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWaitMultiple : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE WaitMultiple(
+        DWORD timeout,
+        ISynchronize **pSync) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddSynchronize(
+        ISynchronize *pSync) = 0;
+
+};
+#else
+typedef struct IWaitMultipleVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWaitMultiple* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWaitMultiple* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWaitMultiple* This);
+
+    /*** IWaitMultiple methods ***/
+    HRESULT (STDMETHODCALLTYPE *WaitMultiple)(
+        IWaitMultiple* This,
+        DWORD timeout,
+        ISynchronize **pSync);
+
+    HRESULT (STDMETHODCALLTYPE *AddSynchronize)(
+        IWaitMultiple* This,
+        ISynchronize *pSync);
+
+    END_INTERFACE
+} IWaitMultipleVtbl;
+interface IWaitMultiple {
+    CONST_VTBL IWaitMultipleVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWaitMultiple_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWaitMultiple_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWaitMultiple_Release(This) (This)->lpVtbl->Release(This)
+/*** IWaitMultiple methods ***/
+#define IWaitMultiple_WaitMultiple(This,timeout,pSync) (This)->lpVtbl->WaitMultiple(This,timeout,pSync)
+#define IWaitMultiple_AddSynchronize(This,pSync) (This)->lpVtbl->AddSynchronize(This,pSync)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWaitMultiple_WaitMultiple_Proxy(
+    IWaitMultiple* This,
+    DWORD timeout,
+    ISynchronize **pSync);
+void __RPC_STUB IWaitMultiple_WaitMultiple_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWaitMultiple_AddSynchronize_Proxy(
+    IWaitMultiple* This,
+    ISynchronize *pSync);
+void __RPC_STUB IWaitMultiple_AddSynchronize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWaitMultiple_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUrlMon interface
+ */
+#ifndef __IUrlMon_INTERFACE_DEFINED__
+#define __IUrlMon_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUrlMon, 0x00000026, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUrlMon : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AsyncGetClassBits(
+        REFCLSID rclsid,
+        LPCWSTR pszTYPE,
+        LPCWSTR pszExt,
+        DWORD dwFileVersionMS,
+        DWORD dwFileVersionLS,
+        LPCWSTR pszCodeBase,
+        IBindCtx *pbc,
+        DWORD dwClassContext,
+        REFIID riid,
+        DWORD flags) = 0;
+
+};
+#else
+typedef struct IUrlMonVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUrlMon* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUrlMon* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUrlMon* This);
+
+    /*** IUrlMon methods ***/
+    HRESULT (STDMETHODCALLTYPE *AsyncGetClassBits)(
+        IUrlMon* This,
+        REFCLSID rclsid,
+        LPCWSTR pszTYPE,
+        LPCWSTR pszExt,
+        DWORD dwFileVersionMS,
+        DWORD dwFileVersionLS,
+        LPCWSTR pszCodeBase,
+        IBindCtx *pbc,
+        DWORD dwClassContext,
+        REFIID riid,
+        DWORD flags);
+
+    END_INTERFACE
+} IUrlMonVtbl;
+interface IUrlMon {
+    CONST_VTBL IUrlMonVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUrlMon_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUrlMon_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUrlMon_Release(This) (This)->lpVtbl->Release(This)
+/*** IUrlMon methods ***/
+#define IUrlMon_AsyncGetClassBits(This,rclsid,pszTYPE,pszExt,dwFileVersionMS,dwFileVersionLS,pszCodeBase,pbc,dwClassContext,riid,flags) (This)->lpVtbl->AsyncGetClassBits(This,rclsid,pszTYPE,pszExt,dwFileVersionMS,dwFileVersionLS,pszCodeBase,pbc,dwClassContext,riid,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUrlMon_AsyncGetClassBits_Proxy(
+    IUrlMon* This,
+    REFCLSID rclsid,
+    LPCWSTR pszTYPE,
+    LPCWSTR pszExt,
+    DWORD dwFileVersionMS,
+    DWORD dwFileVersionLS,
+    LPCWSTR pszCodeBase,
+    IBindCtx *pbc,
+    DWORD dwClassContext,
+    REFIID riid,
+    DWORD flags);
+void __RPC_STUB IUrlMon_AsyncGetClassBits_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IUrlMon_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IForegroundTransfer interface
+ */
+#ifndef __IForegroundTransfer_INTERFACE_DEFINED__
+#define __IForegroundTransfer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IForegroundTransfer, 0x00000145, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IForegroundTransfer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE AllowForegroundTransfer(
+        void *lpvReserved) = 0;
+
+};
+#else
+typedef struct IForegroundTransferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IForegroundTransfer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IForegroundTransfer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IForegroundTransfer* This);
+
+    /*** IForegroundTransfer methods ***/
+    HRESULT (STDMETHODCALLTYPE *AllowForegroundTransfer)(
+        IForegroundTransfer* This,
+        void *lpvReserved);
+
+    END_INTERFACE
+} IForegroundTransferVtbl;
+interface IForegroundTransfer {
+    CONST_VTBL IForegroundTransferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IForegroundTransfer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IForegroundTransfer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IForegroundTransfer_Release(This) (This)->lpVtbl->Release(This)
+/*** IForegroundTransfer methods ***/
+#define IForegroundTransfer_AllowForegroundTransfer(This,lpvReserved) (This)->lpVtbl->AllowForegroundTransfer(This,lpvReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IForegroundTransfer_AllowForegroundTransfer_Proxy(
+    IForegroundTransfer* This,
+    void *lpvReserved);
+void __RPC_STUB IForegroundTransfer_AllowForegroundTransfer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IForegroundTransfer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAddrTrackingControl interface
+ */
+#ifndef __IAddrTrackingControl_INTERFACE_DEFINED__
+#define __IAddrTrackingControl_INTERFACE_DEFINED__
+
+typedef IAddrTrackingControl *LPADDRTRACKINGCONTROL;
+DEFINE_GUID(IID_IAddrTrackingControl, 0x00000147, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAddrTrackingControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE EnableCOMDynamicAddrTracking(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DisableCOMDynamicAddrTracking(
+        ) = 0;
+
+};
+#else
+typedef struct IAddrTrackingControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAddrTrackingControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAddrTrackingControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAddrTrackingControl* This);
+
+    /*** IAddrTrackingControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *EnableCOMDynamicAddrTracking)(
+        IAddrTrackingControl* This);
+
+    HRESULT (STDMETHODCALLTYPE *DisableCOMDynamicAddrTracking)(
+        IAddrTrackingControl* This);
+
+    END_INTERFACE
+} IAddrTrackingControlVtbl;
+interface IAddrTrackingControl {
+    CONST_VTBL IAddrTrackingControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAddrTrackingControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAddrTrackingControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAddrTrackingControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IAddrTrackingControl methods ***/
+#define IAddrTrackingControl_EnableCOMDynamicAddrTracking(This) (This)->lpVtbl->EnableCOMDynamicAddrTracking(This)
+#define IAddrTrackingControl_DisableCOMDynamicAddrTracking(This) (This)->lpVtbl->DisableCOMDynamicAddrTracking(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAddrTrackingControl_EnableCOMDynamicAddrTracking_Proxy(
+    IAddrTrackingControl* This);
+void __RPC_STUB IAddrTrackingControl_EnableCOMDynamicAddrTracking_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAddrTrackingControl_DisableCOMDynamicAddrTracking_Proxy(
+    IAddrTrackingControl* This);
+void __RPC_STUB IAddrTrackingControl_DisableCOMDynamicAddrTracking_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAddrTrackingControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAddrExclusionControl interface
+ */
+#ifndef __IAddrExclusionControl_INTERFACE_DEFINED__
+#define __IAddrExclusionControl_INTERFACE_DEFINED__
+
+typedef IAddrExclusionControl *LPADDREXCLUSIONCONTROL;
+DEFINE_GUID(IID_IAddrExclusionControl, 0x00000148, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAddrExclusionControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentAddrExclusionList(
+        REFIID riid,
+        void **ppEnumerator) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateAddrExclusionList(
+        IUnknown *pEnumerator) = 0;
+
+};
+#else
+typedef struct IAddrExclusionControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAddrExclusionControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAddrExclusionControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAddrExclusionControl* This);
+
+    /*** IAddrExclusionControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCurrentAddrExclusionList)(
+        IAddrExclusionControl* This,
+        REFIID riid,
+        void **ppEnumerator);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateAddrExclusionList)(
+        IAddrExclusionControl* This,
+        IUnknown *pEnumerator);
+
+    END_INTERFACE
+} IAddrExclusionControlVtbl;
+interface IAddrExclusionControl {
+    CONST_VTBL IAddrExclusionControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAddrExclusionControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAddrExclusionControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAddrExclusionControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IAddrExclusionControl methods ***/
+#define IAddrExclusionControl_GetCurrentAddrExclusionList(This,riid,ppEnumerator) (This)->lpVtbl->GetCurrentAddrExclusionList(This,riid,ppEnumerator)
+#define IAddrExclusionControl_UpdateAddrExclusionList(This,pEnumerator) (This)->lpVtbl->UpdateAddrExclusionList(This,pEnumerator)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAddrExclusionControl_GetCurrentAddrExclusionList_Proxy(
+    IAddrExclusionControl* This,
+    REFIID riid,
+    void **ppEnumerator);
+void __RPC_STUB IAddrExclusionControl_GetCurrentAddrExclusionList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAddrExclusionControl_UpdateAddrExclusionList_Proxy(
+    IAddrExclusionControl* This,
+    IUnknown *pEnumerator);
+void __RPC_STUB IAddrExclusionControl_UpdateAddrExclusionList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAddrExclusionControl_INTERFACE_DEFINED__ */
+
+typedef enum _APTTYPE {
+    APTTYPE_CURRENT = -1,
+    APTTYPE_STA = 0,
+    APTTYPE_MTA = 1,
+    APTTYPE_NA = 2,
+    APTTYPE_MAINSTA = 3
+} APTTYPE;
+typedef enum _THDTYPE {
+    THDTYPE_BLOCKMESSAGES = 0,
+    THDTYPE_PROCESSMESSAGES = 1
+} THDTYPE;
+/*****************************************************************************
+ * IComThreadingInfo interface
+ */
+#ifndef __IComThreadingInfo_INTERFACE_DEFINED__
+#define __IComThreadingInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComThreadingInfo, 0x000001ce, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IComThreadingInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentApartmentType(
+        APTTYPE *pAptType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentThreadType(
+        THDTYPE *pThreadType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentLogicalThreadId(
+        GUID *pguidLogicalThreadId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCurrentLogicalThreadId(
+        REFGUID rguid) = 0;
+
+};
+#else
+typedef struct IComThreadingInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IComThreadingInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IComThreadingInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IComThreadingInfo* This);
+
+    /*** IComThreadingInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCurrentApartmentType)(
+        IComThreadingInfo* This,
+        APTTYPE *pAptType);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentThreadType)(
+        IComThreadingInfo* This,
+        THDTYPE *pThreadType);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentLogicalThreadId)(
+        IComThreadingInfo* This,
+        GUID *pguidLogicalThreadId);
+
+    HRESULT (STDMETHODCALLTYPE *SetCurrentLogicalThreadId)(
+        IComThreadingInfo* This,
+        REFGUID rguid);
+
+    END_INTERFACE
+} IComThreadingInfoVtbl;
+interface IComThreadingInfo {
+    CONST_VTBL IComThreadingInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IComThreadingInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IComThreadingInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IComThreadingInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IComThreadingInfo methods ***/
+#define IComThreadingInfo_GetCurrentApartmentType(This,pAptType) (This)->lpVtbl->GetCurrentApartmentType(This,pAptType)
+#define IComThreadingInfo_GetCurrentThreadType(This,pThreadType) (This)->lpVtbl->GetCurrentThreadType(This,pThreadType)
+#define IComThreadingInfo_GetCurrentLogicalThreadId(This,pguidLogicalThreadId) (This)->lpVtbl->GetCurrentLogicalThreadId(This,pguidLogicalThreadId)
+#define IComThreadingInfo_SetCurrentLogicalThreadId(This,rguid) (This)->lpVtbl->SetCurrentLogicalThreadId(This,rguid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentApartmentType_Proxy(
+    IComThreadingInfo* This,
+    APTTYPE *pAptType);
+void __RPC_STUB IComThreadingInfo_GetCurrentApartmentType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentThreadType_Proxy(
+    IComThreadingInfo* This,
+    THDTYPE *pThreadType);
+void __RPC_STUB IComThreadingInfo_GetCurrentThreadType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentLogicalThreadId_Proxy(
+    IComThreadingInfo* This,
+    GUID *pguidLogicalThreadId);
+void __RPC_STUB IComThreadingInfo_GetCurrentLogicalThreadId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_SetCurrentLogicalThreadId_Proxy(
+    IComThreadingInfo* This,
+    REFGUID rguid);
+void __RPC_STUB IComThreadingInfo_SetCurrentLogicalThreadId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IComThreadingInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IProcessInitControl interface
+ */
+#ifndef __IProcessInitControl_INTERFACE_DEFINED__
+#define __IProcessInitControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IProcessInitControl, 0x72380d55, 0x8d2b, 0x43a3, 0x85,0x13, 0x2b,0x6e,0xf3,0x14,0x34,0xe9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IProcessInitControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ResetInitializerTimeout(
+        DWORD dwSecondsRemaining) = 0;
+
+};
+#else
+typedef struct IProcessInitControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IProcessInitControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IProcessInitControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IProcessInitControl* This);
+
+    /*** IProcessInitControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *ResetInitializerTimeout)(
+        IProcessInitControl* This,
+        DWORD dwSecondsRemaining);
+
+    END_INTERFACE
+} IProcessInitControlVtbl;
+interface IProcessInitControl {
+    CONST_VTBL IProcessInitControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IProcessInitControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IProcessInitControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IProcessInitControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IProcessInitControl methods ***/
+#define IProcessInitControl_ResetInitializerTimeout(This,dwSecondsRemaining) (This)->lpVtbl->ResetInitializerTimeout(This,dwSecondsRemaining)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IProcessInitControl_ResetInitializerTimeout_Proxy(
+    IProcessInitControl* This,
+    DWORD dwSecondsRemaining);
+void __RPC_STUB IProcessInitControl_ResetInitializerTimeout_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IProcessInitControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInitializeSpy interface
+ */
+#ifndef __IInitializeSpy_INTERFACE_DEFINED__
+#define __IInitializeSpy_INTERFACE_DEFINED__
+
+typedef IInitializeSpy *LPINITIALIZESPY;
+DEFINE_GUID(IID_IInitializeSpy, 0x00000034, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInitializeSpy : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE PreInitialize(
+        DWORD dwCoInit,
+        DWORD dwCurThreadAptRefs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PostInitialize(
+        HRESULT hrCoInit,
+        DWORD dwCoInit,
+        DWORD dwNewThreadAptRefs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PreUninitialize(
+        DWORD dwCurThreadAptRefs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PostUninitialize(
+        DWORD dwNewThreadAptRefs) = 0;
+
+};
+#else
+typedef struct IInitializeSpyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInitializeSpy* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInitializeSpy* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInitializeSpy* This);
+
+    /*** IInitializeSpy methods ***/
+    HRESULT (STDMETHODCALLTYPE *PreInitialize)(
+        IInitializeSpy* This,
+        DWORD dwCoInit,
+        DWORD dwCurThreadAptRefs);
+
+    HRESULT (STDMETHODCALLTYPE *PostInitialize)(
+        IInitializeSpy* This,
+        HRESULT hrCoInit,
+        DWORD dwCoInit,
+        DWORD dwNewThreadAptRefs);
+
+    HRESULT (STDMETHODCALLTYPE *PreUninitialize)(
+        IInitializeSpy* This,
+        DWORD dwCurThreadAptRefs);
+
+    HRESULT (STDMETHODCALLTYPE *PostUninitialize)(
+        IInitializeSpy* This,
+        DWORD dwNewThreadAptRefs);
+
+    END_INTERFACE
+} IInitializeSpyVtbl;
+interface IInitializeSpy {
+    CONST_VTBL IInitializeSpyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInitializeSpy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInitializeSpy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInitializeSpy_Release(This) (This)->lpVtbl->Release(This)
+/*** IInitializeSpy methods ***/
+#define IInitializeSpy_PreInitialize(This,dwCoInit,dwCurThreadAptRefs) (This)->lpVtbl->PreInitialize(This,dwCoInit,dwCurThreadAptRefs)
+#define IInitializeSpy_PostInitialize(This,hrCoInit,dwCoInit,dwNewThreadAptRefs) (This)->lpVtbl->PostInitialize(This,hrCoInit,dwCoInit,dwNewThreadAptRefs)
+#define IInitializeSpy_PreUninitialize(This,dwCurThreadAptRefs) (This)->lpVtbl->PreUninitialize(This,dwCurThreadAptRefs)
+#define IInitializeSpy_PostUninitialize(This,dwNewThreadAptRefs) (This)->lpVtbl->PostUninitialize(This,dwNewThreadAptRefs)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PreInitialize_Proxy(
+    IInitializeSpy* This,
+    DWORD dwCoInit,
+    DWORD dwCurThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PreInitialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PostInitialize_Proxy(
+    IInitializeSpy* This,
+    HRESULT hrCoInit,
+    DWORD dwCoInit,
+    DWORD dwNewThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PostInitialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PreUninitialize_Proxy(
+    IInitializeSpy* This,
+    DWORD dwCurThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PreUninitialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PostUninitialize_Proxy(
+    IInitializeSpy* This,
+    DWORD dwNewThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PostUninitialize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInitializeSpy_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IThumbnailExtractor interface
+ */
+#ifndef __IThumbnailExtractor_INTERFACE_DEFINED__
+#define __IThumbnailExtractor_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IThumbnailExtractor, 0x969dc708, 0x5c76, 0x11d1, 0x8d,0x86, 0x00,0x00,0xf8,0x04,0xb0,0x57);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IThumbnailExtractor : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ExtractThumbnail(
+        IStorage *pStg,
+        ULONG ulLength,
+        ULONG ulHeight,
+        ULONG *pulOutputLength,
+        ULONG *pulOutputHeight,
+        HBITMAP *phOutputBitmap) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnFileUpdated(
+        IStorage *pStg) = 0;
+
+};
+#else
+typedef struct IThumbnailExtractorVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IThumbnailExtractor* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IThumbnailExtractor* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IThumbnailExtractor* This);
+
+    /*** IThumbnailExtractor methods ***/
+    HRESULT (STDMETHODCALLTYPE *ExtractThumbnail)(
+        IThumbnailExtractor* This,
+        IStorage *pStg,
+        ULONG ulLength,
+        ULONG ulHeight,
+        ULONG *pulOutputLength,
+        ULONG *pulOutputHeight,
+        HBITMAP *phOutputBitmap);
+
+    HRESULT (STDMETHODCALLTYPE *OnFileUpdated)(
+        IThumbnailExtractor* This,
+        IStorage *pStg);
+
+    END_INTERFACE
+} IThumbnailExtractorVtbl;
+interface IThumbnailExtractor {
+    CONST_VTBL IThumbnailExtractorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IThumbnailExtractor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IThumbnailExtractor_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IThumbnailExtractor_Release(This) (This)->lpVtbl->Release(This)
+/*** IThumbnailExtractor methods ***/
+#define IThumbnailExtractor_ExtractThumbnail(This,pStg,ulLength,ulHeight,pulOutputLength,pulOutputHeight,phOutputBitmap) (This)->lpVtbl->ExtractThumbnail(This,pStg,ulLength,ulHeight,pulOutputLength,pulOutputHeight,phOutputBitmap)
+#define IThumbnailExtractor_OnFileUpdated(This,pStg) (This)->lpVtbl->OnFileUpdated(This,pStg)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IThumbnailExtractor_ExtractThumbnail_Proxy(
+    IThumbnailExtractor* This,
+    IStorage *pStg,
+    ULONG ulLength,
+    ULONG ulHeight,
+    ULONG *pulOutputLength,
+    ULONG *pulOutputHeight,
+    HBITMAP *phOutputBitmap);
+void __RPC_STUB IThumbnailExtractor_ExtractThumbnail_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IThumbnailExtractor_OnFileUpdated_Proxy(
+    IThumbnailExtractor* This,
+    IStorage *pStg);
+void __RPC_STUB IThumbnailExtractor_OnFileUpdated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IThumbnailExtractor_INTERFACE_DEFINED__ */
+
+#ifdef USE_COM_CONTEXT_DEF
+typedef DWORD CPFLAGS;
+typedef struct tagContextProperty {
+    GUID policyId;
+    CPFLAGS flags;
+    IUnknown *pUnk;
+} ContextProperty;
+/*****************************************************************************
+ * IEnumContextProps interface
+ */
+#ifndef __IEnumContextProps_INTERFACE_DEFINED__
+#define __IEnumContextProps_INTERFACE_DEFINED__
+
+typedef IEnumContextProps *LPENUMCONTEXTPROPS;
+DEFINE_GUID(IID_IEnumContextProps, 0x000001c1, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumContextProps : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        ContextProperty *pContextProperties,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumContextProps **ppEnumContextProps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Count(
+        ULONG *pcelt) = 0;
+
+};
+#else
+typedef struct IEnumContextPropsVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumContextProps* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumContextProps* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumContextProps* This);
+
+    /*** IEnumContextProps methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumContextProps* This,
+        ULONG celt,
+        ContextProperty *pContextProperties,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumContextProps* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumContextProps* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumContextProps* This,
+        IEnumContextProps **ppEnumContextProps);
+
+    HRESULT (STDMETHODCALLTYPE *Count)(
+        IEnumContextProps* This,
+        ULONG *pcelt);
+
+    END_INTERFACE
+} IEnumContextPropsVtbl;
+interface IEnumContextProps {
+    CONST_VTBL IEnumContextPropsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumContextProps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumContextProps_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumContextProps_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumContextProps methods ***/
+#define IEnumContextProps_Next(This,celt,pContextProperties,pceltFetched) (This)->lpVtbl->Next(This,celt,pContextProperties,pceltFetched)
+#define IEnumContextProps_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumContextProps_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumContextProps_Clone(This,ppEnumContextProps) (This)->lpVtbl->Clone(This,ppEnumContextProps)
+#define IEnumContextProps_Count(This,pcelt) (This)->lpVtbl->Count(This,pcelt)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Next_Proxy(
+    IEnumContextProps* This,
+    ULONG celt,
+    ContextProperty *pContextProperties,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumContextProps_Next_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Skip_Proxy(
+    IEnumContextProps* This,
+    ULONG celt);
+void __RPC_STUB IEnumContextProps_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Reset_Proxy(
+    IEnumContextProps* This);
+void __RPC_STUB IEnumContextProps_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Clone_Proxy(
+    IEnumContextProps* This,
+    IEnumContextProps **ppEnumContextProps);
+void __RPC_STUB IEnumContextProps_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Count_Proxy(
+    IEnumContextProps* This,
+    ULONG *pcelt);
+void __RPC_STUB IEnumContextProps_Count_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IEnumContextProps_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IContext interface
+ */
+#ifndef __IContext_INTERFACE_DEFINED__
+#define __IContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContext, 0x000001c0, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IContext : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetProperty(
+        REFGUID policyId,
+        CPFLAGS flags,
+        IUnknown *pUnk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveProperty(
+        REFGUID policyId) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProperty(
+        REFGUID guid,
+        CPFLAGS *pFlags,
+        IUnknown **ppUnk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumContextProps(
+        IEnumContextProps **ppEnumContextProps) = 0;
+
+};
+#else
+typedef struct IContextVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IContext* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IContext* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IContext* This);
+
+    /*** IContext methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetProperty)(
+        IContext* This,
+        REFGUID policyId,
+        CPFLAGS flags,
+        IUnknown *pUnk);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveProperty)(
+        IContext* This,
+        REFGUID policyId);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        IContext* This,
+        REFGUID guid,
+        CPFLAGS *pFlags,
+        IUnknown **ppUnk);
+
+    HRESULT (STDMETHODCALLTYPE *EnumContextProps)(
+        IContext* This,
+        IEnumContextProps **ppEnumContextProps);
+
+    END_INTERFACE
+} IContextVtbl;
+interface IContext {
+    CONST_VTBL IContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IContext methods ***/
+#define IContext_SetProperty(This,policyId,flags,pUnk) (This)->lpVtbl->SetProperty(This,policyId,flags,pUnk)
+#define IContext_RemoveProperty(This,policyId) (This)->lpVtbl->RemoveProperty(This,policyId)
+#define IContext_GetProperty(This,guid,pFlags,ppUnk) (This)->lpVtbl->GetProperty(This,guid,pFlags,ppUnk)
+#define IContext_EnumContextProps(This,ppEnumContextProps) (This)->lpVtbl->EnumContextProps(This,ppEnumContextProps)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IContext_SetProperty_Proxy(
+    IContext* This,
+    REFGUID policyId,
+    CPFLAGS flags,
+    IUnknown *pUnk);
+void __RPC_STUB IContext_SetProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IContext_RemoveProperty_Proxy(
+    IContext* This,
+    REFGUID policyId);
+void __RPC_STUB IContext_RemoveProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IContext_GetProperty_Proxy(
+    IContext* This,
+    REFGUID guid,
+    CPFLAGS *pFlags,
+    IUnknown **ppUnk);
+void __RPC_STUB IContext_GetProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IContext_EnumContextProps_Proxy(
+    IContext* This,
+    IEnumContextProps **ppEnumContextProps);
+void __RPC_STUB IContext_EnumContextProps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IContext_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IObjContext interface
+ */
+#ifndef __IObjContext_INTERFACE_DEFINED__
+#define __IObjContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IObjContext, 0x000001c6, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IObjContext : public IContext
+{
+    virtual void STDMETHODCALLTYPE Reserved1(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Reserved2(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Reserved3(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Reserved4(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Reserved5(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Reserved6(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE Reserved7(
+        ) = 0;
+
+};
+#else
+typedef struct IObjContextVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IObjContext* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IObjContext* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IObjContext* This);
+
+    /*** IContext methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetProperty)(
+        IObjContext* This,
+        REFGUID policyId,
+        CPFLAGS flags,
+        IUnknown *pUnk);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveProperty)(
+        IObjContext* This,
+        REFGUID policyId);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperty)(
+        IObjContext* This,
+        REFGUID guid,
+        CPFLAGS *pFlags,
+        IUnknown **ppUnk);
+
+    HRESULT (STDMETHODCALLTYPE *EnumContextProps)(
+        IObjContext* This,
+        IEnumContextProps **ppEnumContextProps);
+
+    /*** IObjContext methods ***/
+    void (STDMETHODCALLTYPE *Reserved1)(
+        IObjContext* This);
+
+    void (STDMETHODCALLTYPE *Reserved2)(
+        IObjContext* This);
+
+    void (STDMETHODCALLTYPE *Reserved3)(
+        IObjContext* This);
+
+    void (STDMETHODCALLTYPE *Reserved4)(
+        IObjContext* This);
+
+    void (STDMETHODCALLTYPE *Reserved5)(
+        IObjContext* This);
+
+    void (STDMETHODCALLTYPE *Reserved6)(
+        IObjContext* This);
+
+    void (STDMETHODCALLTYPE *Reserved7)(
+        IObjContext* This);
+
+    END_INTERFACE
+} IObjContextVtbl;
+interface IObjContext {
+    CONST_VTBL IObjContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IObjContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IObjContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IObjContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IContext methods ***/
+#define IObjContext_SetProperty(This,policyId,flags,pUnk) (This)->lpVtbl->SetProperty(This,policyId,flags,pUnk)
+#define IObjContext_RemoveProperty(This,policyId) (This)->lpVtbl->RemoveProperty(This,policyId)
+#define IObjContext_GetProperty(This,guid,pFlags,ppUnk) (This)->lpVtbl->GetProperty(This,guid,pFlags,ppUnk)
+#define IObjContext_EnumContextProps(This,ppEnumContextProps) (This)->lpVtbl->EnumContextProps(This,ppEnumContextProps)
+/*** IObjContext methods ***/
+#define IObjContext_Reserved1(This) (This)->lpVtbl->Reserved1(This)
+#define IObjContext_Reserved2(This) (This)->lpVtbl->Reserved2(This)
+#define IObjContext_Reserved3(This) (This)->lpVtbl->Reserved3(This)
+#define IObjContext_Reserved4(This) (This)->lpVtbl->Reserved4(This)
+#define IObjContext_Reserved5(This) (This)->lpVtbl->Reserved5(This)
+#define IObjContext_Reserved6(This) (This)->lpVtbl->Reserved6(This)
+#define IObjContext_Reserved7(This) (This)->lpVtbl->Reserved7(This)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IObjContext_Reserved1_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved1_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved2_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved3_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved3_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved4_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved4_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved5_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved5_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved6_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved6_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved7_Proxy(
+    IObjContext* This);
+void __RPC_STUB IObjContext_Reserved7_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IObjContext_INTERFACE_DEFINED__ */
+
+#endif /* defined USE_COM_CONTEXT_DEF */
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER SNB_UserSize     (ULONG *, ULONG, SNB *);
+unsigned char * __RPC_USER SNB_UserMarshal  (ULONG *, unsigned char *, SNB *);
+unsigned char * __RPC_USER SNB_UserUnmarshal(ULONG *, unsigned char *, SNB *);
+void            __RPC_USER SNB_UserFree     (ULONG *, SNB *);
+ULONG           __RPC_USER CLIPFORMAT_UserSize     (ULONG *, ULONG, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserMarshal  (ULONG *, unsigned char *, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
+void            __RPC_USER CLIPFORMAT_UserFree     (ULONG *, CLIPFORMAT *);
+ULONG           __RPC_USER STGMEDIUM_UserSize     (ULONG *, ULONG, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserMarshal  (ULONG *, unsigned char *, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
+void            __RPC_USER STGMEDIUM_UserFree     (ULONG *, STGMEDIUM *);
+ULONG           __RPC_USER ASYNC_STGMEDIUM_UserSize     (ULONG *, ULONG, ASYNC_STGMEDIUM *);
+unsigned char * __RPC_USER ASYNC_STGMEDIUM_UserMarshal  (ULONG *, unsigned char *, ASYNC_STGMEDIUM *);
+unsigned char * __RPC_USER ASYNC_STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, ASYNC_STGMEDIUM *);
+void            __RPC_USER ASYNC_STGMEDIUM_UserFree     (ULONG *, ASYNC_STGMEDIUM *);
+ULONG           __RPC_USER FLAG_STGMEDIUM_UserSize     (ULONG *, ULONG, FLAG_STGMEDIUM *);
+unsigned char * __RPC_USER FLAG_STGMEDIUM_UserMarshal  (ULONG *, unsigned char *, FLAG_STGMEDIUM *);
+unsigned char * __RPC_USER FLAG_STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, FLAG_STGMEDIUM *);
+void            __RPC_USER FLAG_STGMEDIUM_UserFree     (ULONG *, FLAG_STGMEDIUM *);
+ULONG           __RPC_USER HBITMAP_UserSize     (ULONG *, ULONG, HBITMAP *);
+unsigned char * __RPC_USER HBITMAP_UserMarshal  (ULONG *, unsigned char *, HBITMAP *);
+unsigned char * __RPC_USER HBITMAP_UserUnmarshal(ULONG *, unsigned char *, HBITMAP *);
+void            __RPC_USER HBITMAP_UserFree     (ULONG *, HBITMAP *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_OBJIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl
new file mode 100644
index 0000000..a94d18f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl
@@ -0,0 +1,2531 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+interface IStream;
+interface IEnumString;
+interface IRunningObjectTable;
+interface IMoniker;
+interface IAdviseSink;
+interface IAsyncManager;
+interface ISynchronize;
+
+typedef struct _COSERVERINFO {
+  DWORD dwReserved1;
+  LPWSTR pwszName;
+  COAUTHINFO *pAuthInfo;
+  DWORD dwReserved2;
+} COSERVERINFO;
+
+/******************** Fundamentals ********************/
+
+[
+  local,
+  object,
+  uuid(00000003-0000-0000-C000-000000000046)
+]
+interface IMarshal : IUnknown
+{
+  typedef [unique] IMarshal *LPMARSHAL;
+
+  HRESULT GetUnmarshalClass(
+    [in] REFIID riid,
+    [in, unique] void *pv,
+    [in] DWORD dwDestContext,
+    [in, unique] void *pvDestContext,
+    [in] DWORD mshlflags,
+    [out] CLSID *pCid);
+
+  HRESULT GetMarshalSizeMax(
+    [in] REFIID riid,
+    [in, unique] void *pv,
+    [in] DWORD dwDestContext,
+    [in, unique] void *pvDestContext,
+    [in] DWORD mshlflags,
+    [out] DWORD *pSize);
+
+  HRESULT MarshalInterface(
+    [in, unique] IStream *pStm,
+    [in] REFIID riid,
+    [in, unique] void *pv,
+    [in] DWORD dwDestContext,
+    [in, unique] void *pvDestContext,
+    [in] DWORD mshlflags);
+
+  HRESULT UnmarshalInterface(
+    [in, unique] IStream *pStm,
+    [in] REFIID riid,
+    [out] void **ppv);
+
+  HRESULT ReleaseMarshalData(
+    [in, unique] IStream *pStm);
+
+  HRESULT DisconnectObject(
+    [in] DWORD dwReserved);
+}
+
+[
+    local,
+    object,
+    uuid(000001cf-0000-0000-C000-000000000046)
+]
+interface IMarshal2 : IMarshal
+{
+    typedef [unique] IMarshal2 *LPMARSHAL2;
+}
+
+[
+  local,
+  object,
+  uuid(00000018-0000-0000-C000-000000000046)
+]
+interface IStdMarshalInfo : IUnknown
+{
+  typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO;
+
+  HRESULT GetClassForHandler(
+    [in] DWORD dwDestContext,
+    [in, unique] void *pvDestContext,
+    [out] CLSID *pClsid);
+}
+
+[
+  local,
+  object,
+  uuid(00000019-0000-0000-C000-000000000046)
+]
+interface IExternalConnection : IUnknown
+{
+  typedef [unique] IExternalConnection *LPEXTERNALCONNECTION;
+
+  typedef enum tagEXTCONN {
+    EXTCONN_STRONG   = 0x0001,
+    EXTCONN_WEAK     = 0x0002,
+    EXTCONN_CALLABLE = 0x0004
+  } EXTCONN;
+
+  DWORD AddConnection(
+    [in] DWORD extconn,
+    [in] DWORD reserved);
+
+  DWORD ReleaseConnection(
+    [in] DWORD extconn,
+    [in] DWORD reserved,
+    [in] BOOL fLastReleaseCloses);
+}
+
+[
+  local,
+  object,
+  uuid(00000020-0000-0000-C000-000000000046)
+]
+interface IMultiQI : IUnknown
+{
+  typedef [unique] IMultiQI *LPMULTIQI;
+
+  typedef struct tagMULTI_QI {
+    const IID *pIID;
+    IUnknown *pItf;
+    HRESULT hr;
+  } MULTI_QI;
+
+  HRESULT QueryMultipleInterfaces(
+    [in] ULONG cMQIs,
+    [in, out] MULTI_QI *pMQIs);
+}
+
+[
+  local,
+  object,
+  uuid(00000002-0000-0000-C000-000000000046)
+]
+interface IMalloc : IUnknown
+{
+  typedef [unique] IMalloc *LPMALLOC;
+
+  LPVOID Alloc(
+    [in] ULONG cb);
+
+  LPVOID Realloc(
+    [in] LPVOID pv,
+    [in] ULONG cb);
+
+  void Free(
+    [in] LPVOID pv);
+
+  ULONG GetSize(
+    [in] LPVOID pv);
+
+  int DidAlloc(LPVOID pv);
+
+  void HeapMinimize();
+}
+
+[
+  local,
+  object,
+  uuid(0000001d-0000-0000-C000-000000000046)
+]
+interface IMallocSpy : IUnknown
+{
+  typedef [unique] IMallocSpy *LPMALLOCSPY;
+
+  ULONG PreAlloc(
+    [in] ULONG cbRequest);
+
+  LPVOID PostAlloc(
+    [in] LPVOID pActual);
+
+  LPVOID PreFree(
+    [in] LPVOID pRequest,
+    [in] BOOL fSpyed);
+
+  void PostFree(
+    [in] BOOL fSpyed);
+
+  ULONG PreRealloc(
+    [in] LPVOID pRequest,
+    [in] ULONG cbRequest,
+    [out] LPVOID *ppNewRequest,
+    [in] BOOL fSpyed);
+
+  LPVOID PostRealloc(
+    [in] LPVOID pActual,
+    [in] BOOL fSpyed);
+
+  LPVOID PreGetSize(
+    [in] LPVOID pRequest,
+    [in] BOOL fSpyed);
+
+  ULONG PostGetSize(
+    [in] ULONG cbActual,
+    [in] BOOL fSpyed);
+
+  LPVOID PreDidAlloc(
+    [in] LPVOID pRequest,
+    [in] BOOL fSpyed);
+
+  int PostDidAlloc(
+    [in] LPVOID pRequest,
+    [in] BOOL fSpyed,
+    [in] int fActual);
+
+  void PreHeapMinimize();
+
+  void PostHeapMinimize();
+}
+
+[
+  local,
+  object,
+  uuid(00000021-0000-0000-C000-000000000046)
+]
+interface IInternalUnknown : IUnknown
+{
+  HRESULT QueryInternalInterface(
+    [in] REFIID riid,
+    [out] void **ppv);
+}
+
+[
+  object,
+  uuid(00000100-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumUnknown : IUnknown
+{
+  typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out] IUnknown **rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    IUnknown **rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumUnknown **ppenum);
+}
+
+[
+  object,
+  uuid(00000022-0000-0000-C000-000000000046),
+  version(1.0),
+  pointer_default(unique)
+]
+interface ISurrogate : IUnknown
+{
+  typedef [unique] ISurrogate *LPSURROGATE;
+
+  HRESULT LoadDllServer(
+    [in] REFCLSID Clsid);
+  HRESULT FreeSurrogate();
+}
+
+[
+  local,
+  object,
+  uuid(00000146-0000-0000-C000-000000000046)
+]
+interface IGlobalInterfaceTable : IUnknown
+{
+  typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
+
+  HRESULT RegisterInterfaceInGlobal(
+    [in] IUnknown *pUnk,
+    [in] REFIID riid,
+    [out] DWORD *pdwCookie);
+
+  HRESULT RevokeInterfaceFromGlobal(
+    [in] DWORD dwCookie);
+
+  HRESULT GetInterfaceFromGlobal(
+    [in] DWORD dwCookie,
+    [in] REFIID riid,
+    [out, iid_is(riid)] void **ppv);
+}
+
+/******************** Monikers ********************/
+
+[
+  object,
+  uuid(0000000e-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IBindCtx : IUnknown
+{
+  typedef [unique] IBindCtx *LPBINDCTX;
+  typedef [unique] IBindCtx *LPBC;
+
+  typedef struct tagBIND_OPTS {
+    DWORD cbStruct;
+    DWORD grfFlags;
+    DWORD grfMode;
+    DWORD dwTickCountDeadline;
+  } BIND_OPTS, *LPBIND_OPTS;
+
+  /* FIXME: C++ crap */
+  typedef struct tagBIND_OPTS2 {
+    DWORD cbStruct;
+    DWORD grfFlags;
+    DWORD grfMode;
+    DWORD dwTickCountDeadline;
+    DWORD dwTrackFlags;
+    DWORD dwClassContext;
+    LCID  locale;
+    COSERVERINFO *pServerInfo;
+  } BIND_OPTS2, *LPBIND_OPTS2;
+
+  typedef struct tagBIND_OPTS3 {
+    DWORD cbStruct;
+    DWORD grfFlags;
+    DWORD grfMode;
+    DWORD dwTickCountDeadline;
+    DWORD dwTrackFlags;
+    DWORD dwClassContext;
+    LCID  locale;
+    COSERVERINFO *pServerInfo;
+    HWND hwnd;
+  } BIND_OPTS3, *LPBIND_OPTS3;
+
+  typedef enum tagBIND_FLAGS {
+    BIND_MAYBOTHERUSER   = 1,
+    BIND_JUSTTESTEXISTENCE = 2
+  } BIND_FLAGS;
+
+  HRESULT RegisterObjectBound(
+    [in, unique] IUnknown *punk);
+
+  HRESULT RevokeObjectBound(
+    [in, unique] IUnknown *punk);
+
+  HRESULT ReleaseBoundObjects();
+
+  [local]
+  HRESULT SetBindOptions(
+    [in] BIND_OPTS *pbindopts);
+
+  [call_as(SetBindOptions)]
+  HRESULT RemoteSetBindOptions(
+    [in] BIND_OPTS2 *pbindopts);
+
+  [local]
+  HRESULT GetBindOptions(
+    [in, out] BIND_OPTS *pbindopts);
+
+  [call_as(GetBindOptions)]
+  HRESULT RemoteGetBindOptions(
+    [in, out] BIND_OPTS2 *pbindopts);
+
+  HRESULT GetRunningObjectTable(
+    [out] IRunningObjectTable **pprot);
+
+  HRESULT RegisterObjectParam(
+    [in] LPOLESTR pszKey,
+    [in, unique] IUnknown *punk);
+
+  HRESULT GetObjectParam(
+    [in] LPOLESTR pszKey,
+    [out] IUnknown **ppunk);
+
+  HRESULT EnumObjectParam(
+    [out] IEnumString **ppenum);
+
+  HRESULT RevokeObjectParam(
+    [in] LPOLESTR pszKey);
+}
+
+[
+  object,
+  uuid(00000102-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumMoniker : IUnknown
+{
+  typedef [unique] IEnumMoniker *LPENUMMONIKER;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    IMoniker **rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    IMoniker **rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumMoniker **ppenum);
+}
+
+[
+  object,
+  uuid(00000126-0000-0000-C000-000000000046)
+]
+interface IRunnableObject : IUnknown
+{
+  typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
+
+  HRESULT GetRunningClass(
+    [out] LPCLSID lpClsid);
+
+  HRESULT Run(
+    [in] LPBINDCTX pbc);
+
+  [local]
+  BOOL IsRunning();
+
+  [call_as(IsRunning)]
+  HRESULT RemoteIsRunning();
+
+  HRESULT LockRunning(
+    [in] BOOL fLock,
+    [in] BOOL fLastUnlockCloses);
+
+  HRESULT SetContainedObject(
+    [in] BOOL fContained);
+}
+
+/* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject),
+ * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined,
+ * but GetObject is used as a valid method name below, so we have
+ * to undefine it in that case */
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetObject")
+cpp_quote("#endif")
+
+[
+  object,
+  uuid(00000010-0000-0000-C000-000000000046)
+]
+interface IRunningObjectTable : IUnknown
+{
+  typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
+
+  HRESULT Register(
+    [in] DWORD grfFlags,
+    [in, unique] IUnknown *punkObject,
+    [in, unique] IMoniker *pmkObjectName,
+    [out] DWORD *pdwRegister);
+
+  HRESULT Revoke(
+    [in] DWORD dwRegister);
+
+  HRESULT IsRunning(
+    [in, unique] IMoniker *pmkObjectName);
+
+  HRESULT GetObject(
+    [in, unique] IMoniker *pmkObjectName,
+    [out] IUnknown **ppunkObject);
+
+  HRESULT NoteChangeTime(
+    [in] DWORD dwRegister,
+    [in] FILETIME *pfiletime);
+
+  HRESULT GetTimeOfLastChange(
+    [in, unique] IMoniker *pmkObjectName,
+    [out] FILETIME *pfiletime);
+
+  HRESULT EnumRunning(
+    [out] IEnumMoniker **ppenumMoniker);
+}
+
+[
+  object,
+  uuid(0000010c-0000-0000-C000-000000000046)
+]
+interface IPersist : IUnknown
+{
+  typedef [unique] IPersist *LPPERSIST;
+
+  HRESULT GetClassID(
+    [out] CLSID *pClassID);
+}
+
+[
+  object,
+  uuid(00000109-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IPersistStream : IPersist
+{
+  typedef [unique] IPersistStream *LPPERSISTSTREAM;
+
+  HRESULT IsDirty();
+
+  HRESULT Load(
+    [in, unique] IStream *pStm);
+
+  HRESULT Save(
+    [in, unique] IStream *pStm,
+    [in] BOOL fClearDirty);
+
+  HRESULT GetSizeMax(
+    [out] ULARGE_INTEGER *pcbSize);
+}
+
+[
+  object,
+  uuid(0000000f-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IMoniker : IPersistStream
+{
+  typedef [unique] IMoniker *LPMONIKER;
+
+  typedef enum tagMKSYS {
+    MKSYS_NONE             = 0,
+    MKSYS_GENERICCOMPOSITE = 1,
+    MKSYS_FILEMONIKER      = 2,
+    MKSYS_ANTIMONIKER      = 3,
+    MKSYS_ITEMMONIKER      = 4,
+    MKSYS_POINTERMONIKER   = 5,
+    /* MKSYS_URLMONIKER       = 6, */ /* defined in urlmon.idl */
+    MKSYS_CLASSMONIKER     = 7
+  } MKSYS;
+
+  typedef [v1_enum] enum tagMKREDUCE {
+    MKRREDUCE_ONE         = 3 << 16,
+    MKRREDUCE_TOUSER      = 2 << 16,
+    MKRREDUCE_THROUGHUSER = 1 << 16,
+    MKRREDUCE_ALL         = 0
+  } MKRREDUCE;
+
+  [local]
+  HRESULT BindToObject(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [in] REFIID riidResult,
+    [out, iid_is(riidResult)] void **ppvResult);
+
+  [call_as(BindToObject)]
+  HRESULT RemoteBindToObject(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [in] REFIID riidResult,
+    [out, iid_is(riidResult)] IUnknown **ppvResult);
+
+  [local]
+  HRESULT BindToStorage(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [in] REFIID riid,
+    [out, iid_is(riid)] void **ppvObj);
+
+  [call_as(BindToStorage)]
+  HRESULT RemoteBindToStorage(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [in] REFIID riid,
+    [out, iid_is(riid)] IUnknown **ppvObj);
+
+  HRESULT Reduce(
+    [in, unique] IBindCtx *pbc,
+    [in] DWORD dwReduceHowFar,
+    [in, out, unique] IMoniker **ppmkToLeft,
+    [out] IMoniker **ppmkReduced);
+
+  HRESULT ComposeWith(
+    [in, unique] IMoniker *pmkRight,
+    [in] BOOL fOnlyIfNotGeneric,
+    [out] IMoniker **ppmkComposite);
+
+  HRESULT Enum(
+    [in] BOOL fForward,
+    [out] IEnumMoniker **ppenumMoniker);
+
+  HRESULT IsEqual(
+    [in, unique] IMoniker *pmkOtherMoniker);
+
+  HRESULT Hash(
+    [out] DWORD *pdwHash);
+
+  HRESULT IsRunning(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [in, unique] IMoniker *pmkNewlyRunning);
+
+  HRESULT GetTimeOfLastChange(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [out] FILETIME *pFileTime);
+
+  HRESULT Inverse(
+    [out] IMoniker **ppmk);
+
+  HRESULT CommonPrefixWith(
+    [in, unique] IMoniker *pmkOther,
+    [out] IMoniker **ppmkPrefix);
+
+  HRESULT RelativePathTo(
+    [in, unique] IMoniker *pmkOther,
+    [out] IMoniker **ppmkRelPath);
+
+  HRESULT GetDisplayName(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [out] LPOLESTR *ppszDisplayName);
+
+  HRESULT ParseDisplayName(
+    [in, unique] IBindCtx *pbc,
+    [in, unique] IMoniker *pmkToLeft,
+    [in] LPOLESTR pszDisplayName,
+    [out] ULONG *pchEaten,
+    [out] IMoniker **ppmkOut);
+
+  HRESULT IsSystemMoniker(
+    [out] DWORD *pdwMksys);
+}
+
+[
+  object,
+  uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
+  pointer_default(unique)
+]
+interface IROTData : IUnknown
+{
+  HRESULT GetComparisonData(
+    [out, size_is(cbMax)] byte *pbData,
+    [in] ULONG cbMax,
+    [out] ULONG *pcbData);
+}
+
+[
+  object,
+  uuid(00000101-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumString : IUnknown
+{
+  typedef [unique] IEnumString *LPENUMSTRING;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    LPOLESTR *rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    LPOLESTR *rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumString **ppenum);
+}
+
+[
+  object,
+  uuid(00000140-0000-0000-C000-000000000046)
+]
+interface IClassActivator : IUnknown
+{
+  HRESULT GetClassObject(
+    [in] REFCLSID rclsid,
+    [in] DWORD dwClassContext,
+    [in] LCID locale,
+    [in] REFIID riid,
+    [out, iid_is(riid)] void **ppv);
+}
+
+/******************** Storage ********************/
+
+[
+  object,
+  uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
+  pointer_default(unique)
+]
+interface ISequentialStream : IUnknown
+{
+  [local]
+  HRESULT Read(
+    [out, size_is(cb), length_is(*pcbRead)]
+    void *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbRead);
+
+  [call_as(Read)]
+  HRESULT RemoteRead(
+    [out, size_is(cb), length_is(*pcbRead)]
+    byte *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbRead);
+
+  [local]
+  HRESULT Write(
+    [in, size_is(cb)] const void *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  [call_as(Write)]
+  HRESULT RemoteWrite(
+    [in, size_is(cb)] const byte *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+}
+
+[
+  object,
+  uuid(0000000c-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IStream : ISequentialStream
+{
+  typedef [unique] IStream *LPSTREAM;
+
+  typedef struct tagSTATSTG {
+    LPOLESTR pwcsName;
+    DWORD type;
+    ULARGE_INTEGER cbSize;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD grfMode;
+    DWORD grfLocksSupported;
+    CLSID clsid;
+    DWORD grfStateBits;
+    DWORD reserved;
+  } STATSTG;
+
+  typedef enum tagSTGTY {
+    STGTY_STORAGE   = 1,
+    STGTY_STREAM    = 2,
+    STGTY_LOCKBYTES = 3,
+    STGTY_PROPERTY  = 4
+  } STGTY;
+
+  typedef enum tagSTREAM_SEEK {
+    STREAM_SEEK_SET = 0,
+    STREAM_SEEK_CUR = 1,
+    STREAM_SEEK_END = 2
+  } STREAM_SEEK;
+
+  /* these are defined in Linux's fcntl.h,
+   * undefine them to avoid conflicts */
+  cpp_quote("#undef LOCK_MAND")
+  cpp_quote("#undef LOCK_READ")
+  cpp_quote("#undef LOCK_WRITE")
+  cpp_quote("#undef LOCK_RW")
+
+  typedef enum tagLOCKTYPE {
+    LOCK_WRITE      = 1,
+    LOCK_EXCLUSIVE  = 2,
+    LOCK_ONLYONCE   = 4
+  } LOCKTYPE;
+
+  [local]
+  HRESULT Seek(
+    [in] LARGE_INTEGER dlibMove,
+    [in] DWORD dwOrigin,
+    [out] ULARGE_INTEGER *plibNewPosition);
+
+  [call_as(Seek)]
+  HRESULT RemoteSeek(
+    [in] LARGE_INTEGER dlibMove,
+    [in] DWORD dwOrigin,
+    [out] ULARGE_INTEGER *plibNewPosition);
+
+  HRESULT SetSize(
+    [in] ULARGE_INTEGER libNewSize);
+
+  [local]
+  HRESULT CopyTo(
+    [in, unique] IStream *pstm,
+    [in] ULARGE_INTEGER cb,
+    [out] ULARGE_INTEGER *pcbRead,
+    [out] ULARGE_INTEGER *pcbWritten);
+
+  [call_as(CopyTo)]
+  HRESULT RemoteCopyTo(
+    [in, unique] IStream *pstm,
+    [in] ULARGE_INTEGER cb,
+    [out] ULARGE_INTEGER *pcbRead,
+    [out] ULARGE_INTEGER *pcbWritten);
+
+  HRESULT Commit(
+    [in] DWORD grfCommitFlags);
+
+  HRESULT Revert();
+
+  HRESULT LockRegion(
+    [in] ULARGE_INTEGER libOffset,
+    [in] ULARGE_INTEGER cb,
+    [in] DWORD dwLockType);
+
+  HRESULT UnlockRegion(
+    [in] ULARGE_INTEGER libOffset,
+    [in] ULARGE_INTEGER cb,
+    [in] DWORD dwLockType);
+
+  HRESULT Stat(
+    [out] STATSTG *pstatstg,
+    [in] DWORD grfStatFlag);
+
+  HRESULT Clone(
+    [out] IStream **ppstm);
+}
+
+[
+  object,
+  uuid(0000000d-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumSTATSTG : IUnknown
+{
+  typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATSTG *rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATSTG *rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumSTATSTG **ppenum);
+}
+
+[
+  object,
+  uuid(0000000b-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IStorage : IUnknown
+{
+  typedef [unique] IStorage *LPSTORAGE;
+
+  typedef struct tagRemSNB {
+    unsigned long ulCntStr;
+    unsigned long ulCntChar;
+    [size_is(ulCntChar)] OLECHAR rgString[];
+  } RemSNB;
+
+  typedef [unique] RemSNB *wireSNB;
+  typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
+
+  HRESULT CreateStream(
+    [in] LPCOLESTR pwcsName,
+    [in] DWORD grfMode,
+    [in] DWORD reserved1,
+    [in] DWORD reserved2,
+    [out] IStream **ppstm);
+
+  [local]
+  HRESULT OpenStream(
+    [in] LPCOLESTR pwcsName,
+    [in, unique] void *reserved1,
+    [in] DWORD grfMode,
+    [in] DWORD reserved2,
+    [out] IStream **ppstm);
+
+  [call_as(OpenStream)]
+  HRESULT RemoteOpenStream(
+    [in] LPCOLESTR pwcsName,
+    [in] unsigned long cbReserved1,
+    [in, unique, size_is(cbReserved1)] byte *reserved1,
+    [in] DWORD grfMode,
+    [in] DWORD reserved2,
+    [out] IStream **ppstm);
+
+  HRESULT CreateStorage(
+    [in] LPCOLESTR pwcsName,
+    [in] DWORD grfMode,
+    [in] DWORD dwStgFmt,
+    [in] DWORD reserved2,
+    [out] IStorage **ppstg);
+
+  HRESULT OpenStorage(
+    [in, unique] LPCOLESTR pwcsName,
+    [in, unique] IStorage *pstgPriority,
+    [in] DWORD grfMode,
+    [in, unique] SNB snbExclude,
+    [in] DWORD reserved,
+    [out] IStorage **ppstg);
+
+  HRESULT CopyTo(
+    [in] DWORD ciidExclude,
+    [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,
+    [in, unique] SNB snbExclude,
+    [in, unique] IStorage *pstgDest);
+
+  HRESULT MoveElementTo(
+    [in] LPCOLESTR pwcsName,
+    [in, unique] IStorage *pstgDest,
+    [in] LPCOLESTR pwcsNewName,
+    [in] DWORD grfFlags);
+
+  HRESULT Commit(
+    [in] DWORD grfCommitFlags);
+
+  HRESULT Revert();
+
+  [local]
+  HRESULT EnumElements(
+    [in] DWORD reserved1,
+    [in, unique, size_is(1)] void *reserved2,
+    [in] DWORD reserved3,
+    [out] IEnumSTATSTG **ppenum);
+
+  [call_as(EnumElements)]
+  HRESULT RemoteEnumElements(
+    [in] DWORD reserved1,
+    [in] unsigned long cbReserved2,
+    [in, unique, size_is(cbReserved2)] byte *reserved2,
+    [in] DWORD reserved3,
+    [out] IEnumSTATSTG **ppenum);
+
+  HRESULT DestroyElement(
+    [in] LPCOLESTR pwcsName);
+
+  HRESULT RenameElement(
+    [in] LPCOLESTR pwcsOldName,
+    [in] LPCOLESTR pwcsNewName);
+
+  HRESULT SetElementTimes(
+    [in, unique] LPCOLESTR pwcsName,
+    [in, unique] const FILETIME *pctime,
+    [in, unique] const FILETIME *patime,
+    [in, unique] const FILETIME *pmtime);
+
+  HRESULT SetClass(
+    [in] REFCLSID clsid);
+
+  HRESULT SetStateBits(
+    [in] DWORD grfStateBits,
+    [in] DWORD grfMask);
+
+  HRESULT Stat(
+    [out] STATSTG *pstatstg,
+    [in] DWORD grfStatFlag);
+}
+
+[
+  object,
+  uuid(0000010b-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IPersistFile : IPersist
+{
+  typedef [unique] IPersistFile *LPPERSISTFILE;
+
+  HRESULT IsDirty();
+
+  HRESULT Load(
+    [in] LPCOLESTR pszFileName,
+    [in] DWORD dwMode);
+
+  HRESULT Save(
+    [in, unique] LPCOLESTR pszFileName,
+    [in] BOOL fRemember);
+
+  HRESULT SaveCompleted(
+    [in, unique] LPCOLESTR pszFileName);
+
+  HRESULT GetCurFile(
+    [out] LPOLESTR *ppszFileName);
+}
+
+[
+  object,
+  uuid(0000010a-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IPersistStorage : IPersist
+{
+  typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
+
+  HRESULT IsDirty();
+
+  HRESULT InitNew(
+    [in, unique] IStorage *pStg);
+
+  HRESULT Load(
+    [in, unique] IStorage *pStg);
+
+  HRESULT Save(
+    [in, unique] IStorage *pStgSave,
+    [in] BOOL fSameAsLoad);
+
+  HRESULT SaveCompleted(
+    [in, unique] IStorage *pStgNew);
+
+  HRESULT HandsOffStorage();
+}
+
+[
+  object,
+  uuid(00000012-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IRootStorage : IUnknown
+{
+  typedef [unique] IRootStorage *LPROOTSTORAGE;
+
+  HRESULT SwitchToFile(
+    [in] LPOLESTR pszFile);
+}
+
+[
+  object,
+  uuid(0000000a-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface ILockBytes : IUnknown
+{
+  typedef [unique] ILockBytes *LPLOCKBYTES;
+
+  [local]
+  HRESULT ReadAt(
+    [in] ULARGE_INTEGER ulOffset,
+    [out, size_is(cb), length_is(*pcbRead)]
+    void *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbRead);
+
+  [call_as(ReadAt)]
+  HRESULT RemoteReadAt(
+    [in] ULARGE_INTEGER ulOffset,
+    [out, size_is(cb), length_is(*pcbRead)]
+    byte *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbRead);
+
+  [local]
+  HRESULT WriteAt(
+    [in] ULARGE_INTEGER ulOffset,
+    [in, size_is(cb)] const void *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  [call_as(WriteAt)]
+  HRESULT RemoteWriteAt(
+    [in] ULARGE_INTEGER ulOffset,
+    [in, size_is(cb)] const byte *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  HRESULT Flush();
+
+  HRESULT SetSize(
+    [in] ULARGE_INTEGER cb);
+
+  HRESULT LockRegion(
+    [in] ULARGE_INTEGER libOffset,
+    [in] ULARGE_INTEGER cb,
+    [in] DWORD dwLockType);
+
+  HRESULT UnlockRegion(
+    [in] ULARGE_INTEGER libOffset,
+    [in] ULARGE_INTEGER cb,
+    [in] DWORD dwLockType);
+
+  HRESULT Stat(
+    [out] STATSTG *pstatstg,
+    [in] DWORD grfStatFlag);
+}
+
+[
+  object,
+  uuid(99caf010-415e-11cf-8814-00aa00b569f5),
+  pointer_default(unique)
+]
+interface IFillLockBytes : IUnknown
+{
+  [local]
+  HRESULT FillAppend(
+    [in, size_is(cb)] const void *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  [call_as(FillAppend)]
+  HRESULT RemoteFillAppend(
+    [in, size_is(cb)] const byte *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  [local]
+  HRESULT FillAt(
+    [in] ULARGE_INTEGER ulOffset,
+    [in, size_is(cb)] const void *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  [call_as(FillAt)]
+  HRESULT RemoteFillAt(
+    [in] ULARGE_INTEGER ulOffset,
+    [in, size_is(cb)] const byte *pv,
+    [in] ULONG cb,
+    [out] ULONG *pcbWritten);
+
+  HRESULT SetFillSize(
+    [in] ULARGE_INTEGER ulSize);
+
+  HRESULT Terminate(
+    [in] BOOL bCanceled);
+}
+
+[
+  object,
+  uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
+  pointer_default(unique)
+]
+interface IProgressNotify : IUnknown
+{
+  HRESULT OnProgress(
+    [in] DWORD dwProgressCurrent,
+    [in] DWORD dwProgressMaximum,
+    [in] BOOL fAccurate,
+    [in] BOOL fOwner);
+}
+
+[
+  local,
+  object,
+  uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
+  pointer_default(unique)
+]
+interface ILayoutStorage : IUnknown
+{
+  typedef struct tagStorageLayout {
+    DWORD LayoutType;
+    OLECHAR *pwcsElementName;
+    LARGE_INTEGER cOffset;
+    LARGE_INTEGER cBytes;
+  } StorageLayout;
+
+  HRESULT LayoutScript(
+    [in] StorageLayout *pStorageLayout,
+    [in] DWORD nEntries,
+    [in] DWORD glfInterleavedFlag);
+
+  HRESULT BeginMonitor();
+
+  HRESULT EndMonitor();
+
+  HRESULT ReLayoutDocfile(
+    [in] OLECHAR *pwcsNewDfName);
+
+  HRESULT ReLayoutDocfileOnILockBytes(
+    [in] ILockBytes *pILockBytes);
+}
+
+[
+    object,
+    uuid(30f3d47a-6447-11d1-8e3c-00c04fb9386d)
+]
+interface IBlockingLock : IUnknown
+{
+    HRESULT Lock(
+        [in] DWORD dwTimeout);
+
+    HRESULT Unlock();
+}
+
+
+[
+    object,
+    uuid(bc0bf6ae-8878-11d1-83e9-00c04fc2c6d4)
+]
+interface ITimeAndNoticeControl : IUnknown
+{
+    HRESULT SuppressChanges(
+        [in] DWORD res1,
+        [in] DWORD res2);
+
+}
+
+
+
+[
+    object,
+    uuid(8d19c834-8879-11d1-83e9-00c04fc2c6d4)
+]
+interface IOplockStorage: IUnknown
+{
+    HRESULT CreateStorageEx(
+        [in] LPCWSTR pwcsName,
+        [in] DWORD grfMode,
+        [in] DWORD stgfmt,
+        [in] DWORD grfAttrs,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppstgOpen);
+
+    HRESULT OpenStorageEx(
+        [in] LPCWSTR pwcsName,
+        [in] DWORD grfMode,
+        [in] DWORD stgfmt,
+        [in] DWORD grfAttrs,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppstgOpen);
+}
+
+/******************** Data Object ********************/
+
+[
+  object,
+  uuid(00000103-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumFORMATETC : IUnknown
+{
+  typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
+
+  typedef struct tagDVTARGETDEVICE {
+    DWORD tdSize;
+    WORD tdDriverNameOffset;
+    WORD tdDeviceNameOffset;
+    WORD tdPortNameOffset;
+    WORD tdExtDevmodeOffset;
+    [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
+    BYTE tdData[];
+  } DVTARGETDEVICE;
+
+  typedef CLIPFORMAT *LPCLIPFORMAT;
+
+  typedef struct tagFORMATETC {
+    CLIPFORMAT cfFormat;
+    [unique] DVTARGETDEVICE *ptd;
+    DWORD dwAspect;
+    LONG lindex;
+    DWORD tymed;
+  } FORMATETC, *LPFORMATETC;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    FORMATETC *rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    FORMATETC *rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumFORMATETC **ppenum);
+}
+
+[
+  object,
+  uuid(00000105-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumSTATDATA : IUnknown
+{
+  typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
+
+  typedef enum tagADVF {
+    ADVF_NODATA            = 1,
+    ADVF_PRIMEFIRST        = 2,
+    ADVF_ONLYONCE          = 4,
+    ADVF_DATAONSTOP        = 64,
+    ADVFCACHE_NOHANDLER    = 8,
+    ADVFCACHE_FORCEBUILTIN = 16,
+    ADVFCACHE_ONSAVE       = 32
+  } ADVF;
+
+  typedef struct tagSTATDATA
+  {
+    FORMATETC formatetc;
+    DWORD advf;
+    [unique] IAdviseSink *pAdvSink;
+    DWORD dwConnection;
+  } STATDATA, *LPSTATDATA;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATDATA *rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATDATA *rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumSTATDATA **ppenum);
+}
+
+[
+  object,
+  uuid(0000010f-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IAdviseSink : IUnknown
+{
+  typedef IAdviseSink *LPADVISESINK;
+
+  typedef [v1_enum] enum tagTYMED {
+    TYMED_HGLOBAL  = 1,
+    TYMED_FILE     = 2,
+    TYMED_ISTREAM  = 4,
+    TYMED_ISTORAGE = 8,
+    TYMED_GDI      = 16,
+    TYMED_MFPICT   = 32,
+    TYMED_ENHMF    = 64,
+    TYMED_NULL     = 0
+  } TYMED;
+
+  typedef struct tagRemSTGMEDIUM {
+    DWORD tymed;
+    DWORD dwHandleType;
+    unsigned long pData;
+    unsigned long pUnkForRelease;
+    unsigned long cbData;
+    [size_is(cbData)] byte data[];
+  } RemSTGMEDIUM;
+
+  typedef struct tagSTGMEDIUM {
+    DWORD tymed;
+    [switch_is(tymed)] union {
+    [case(TYMED_GDI)]      HBITMAP hBitmap;
+    [case(TYMED_MFPICT)]   HMETAFILEPICT hMetaFilePict;
+    [case(TYMED_ENHMF)]    HENHMETAFILE hEnhMetaFile;
+    [case(TYMED_HGLOBAL)]  HGLOBAL hGlobal;
+    [case(TYMED_FILE)]     LPOLESTR lpszFileName;
+    [case(TYMED_ISTREAM)]  IStream *pstm;
+    [case(TYMED_ISTORAGE)] IStorage *pstg;
+    [default]              ;
+    } DUMMYUNIONNAME;
+    [unique] IUnknown *pUnkForRelease;
+  } uSTGMEDIUM;
+
+/* copied from wingdi.h */
+#define OBJ_PEN             1
+#define OBJ_BRUSH           2
+#define OBJ_DC              3
+#define OBJ_METADC          4
+#define OBJ_PAL             5
+#define OBJ_FONT            6
+#define OBJ_BITMAP          7
+#define OBJ_REGION          8
+#define OBJ_METAFILE        9
+#define OBJ_MEMDC           10
+#define OBJ_EXTPEN          11
+#define OBJ_ENHMETADC       12
+#define OBJ_ENHMETAFILE     13
+
+  typedef union _GDI_OBJECT switch(DWORD ObjectType) u {
+    case OBJ_BITMAP: wireHBITMAP hBitmap;
+    case OBJ_PAL:    wireHPALETTE hPalette;
+    default:         wireHGLOBAL hGeneric;
+  } GDI_OBJECT;
+
+  typedef struct _userSTGMEDIUM {
+    union switch(DWORD tymed) u {
+    case TYMED_NULL:     ;
+    case TYMED_MFPICT:   wireHMETAFILEPICT hMetaFilePict;
+    case TYMED_ENHMF:    wireHENHMETAFILE hHEnhMetaFile;
+    case TYMED_GDI:      GDI_OBJECT *hGdiHandle;
+    case TYMED_HGLOBAL:  wireHGLOBAL hGlobal;
+    case TYMED_FILE:     LPOLESTR lpszFileName;
+    case TYMED_ISTREAM:  BYTE_BLOB *pstm;
+    case TYMED_ISTORAGE: BYTE_BLOB *pstg;
+    } DUMMYUNIONNAME;
+    IUnknown *pUnkForRelease;
+  } userSTGMEDIUM;
+
+  typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;
+  typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;
+
+  typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM;
+  typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;
+
+  typedef STGMEDIUM *LPSTGMEDIUM;
+
+  typedef struct _userFLAG_STGMEDIUM {
+    long ContextFlags;
+    long fPassOwnership;
+    userSTGMEDIUM Stgmed;
+  } userFLAG_STGMEDIUM;
+
+  typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
+
+  typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {
+    long ContextFlags;
+    long fPassOwnership;
+    STGMEDIUM Stgmed;
+  } FLAG_STGMEDIUM;
+
+  [local]
+  void OnDataChange(
+    [in, unique] FORMATETC *pFormatetc,
+    [in, unique] STGMEDIUM *pStgmed);
+
+  [call_as(OnDataChange)]
+  HRESULT  RemoteOnDataChange(
+    [in, unique] FORMATETC *pFormatetc,
+    [in, unique] ASYNC_STGMEDIUM *pStgmed);
+
+  [local]
+  void OnViewChange(
+    [in] DWORD dwAspect,
+    [in] LONG lindex);
+
+  [call_as(OnViewChange)]
+  HRESULT RemoteOnViewChange(
+    [in] DWORD dwAspect,
+    [in] LONG lindex);
+
+  [local]
+  void OnRename(
+    [in] IMoniker *pmk);
+
+  [call_as(OnRename)]
+  HRESULT RemoteOnRename(
+    [in] IMoniker *pmk);
+
+  [local]
+  void OnSave();
+
+  [call_as(OnSave)]
+  HRESULT RemoteOnSave();
+
+  [local]
+  void OnClose();
+
+  [call_as(OnClose)]
+  HRESULT RemoteOnClose();
+}
+
+[
+  object,
+  uuid(00000125-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IAdviseSink2 : IAdviseSink
+{
+  typedef [unique] IAdviseSink2 *LPADVISESINK2;
+
+  [local]
+  void OnLinkSrcChange(
+    [in, unique] IMoniker *pmk);
+
+  [call_as(OnLinkSrcChange)]
+  HRESULT RemoteOnLinkSrcChange(
+    [in, unique] IMoniker *pmk);
+}
+
+[
+  object,
+  uuid(0000010e-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IDataObject : IUnknown
+{
+  typedef [unique] IDataObject *LPDATAOBJECT;
+
+  typedef enum tagDATADIR {
+    DATADIR_GET = 1,
+    DATADIR_SET = 2
+  } DATADIR;
+
+  [local]
+  HRESULT GetData(
+    [in, unique] FORMATETC *pformatetcIn,
+    [out] STGMEDIUM *pmedium);
+
+  [call_as(GetData)]
+  HRESULT RemoteGetData(
+    [in, unique] FORMATETC *pformatetcIn,
+    [out] STGMEDIUM *pRemoteMedium);
+
+  [local]
+  HRESULT GetDataHere(
+    [in, unique] FORMATETC *pformatetc,
+    [in, out] STGMEDIUM *pmedium);
+
+  [call_as(GetDataHere)]
+  HRESULT RemoteGetDataHere(
+    [in, unique] FORMATETC *pformatetc,
+    [in, out] STGMEDIUM *pRemoteMedium);
+
+  HRESULT QueryGetData(
+    [in, unique] FORMATETC *pformatetc);
+
+  HRESULT GetCanonicalFormatEtc(
+    [in, unique] FORMATETC *pformatectIn,
+    [out] FORMATETC *pformatetcOut);
+
+  [local]
+  HRESULT SetData(
+    [in, unique] FORMATETC *pformatetc,
+    [in, unique] STGMEDIUM *pmedium,
+    [in] BOOL fRelease);
+
+  [call_as(SetData)]
+  HRESULT RemoteSetData(
+    [in, unique] FORMATETC *pformatetc,
+    [in, unique] FLAG_STGMEDIUM *pmedium,
+    [in] BOOL fRelease);
+
+  HRESULT EnumFormatEtc(
+    [in] DWORD dwDirection,
+    [out] IEnumFORMATETC **ppenumFormatEtc);
+
+  HRESULT DAdvise(
+    [in] FORMATETC *pformatetc,
+    [in] DWORD advf,
+    [in, unique] IAdviseSink *pAdvSink,
+    [out] DWORD *pdwConnection);
+
+  HRESULT DUnadvise(
+    [in] DWORD dwConnection);
+
+  HRESULT EnumDAdvise(
+    [out] IEnumSTATDATA **ppenumAdvise);
+}
+
+[
+  local,
+  object,
+  uuid(00000110-0000-0000-C000-000000000046)
+]
+interface IDataAdviseHolder : IUnknown
+{
+  typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
+
+  HRESULT Advise(
+    [in, unique] IDataObject *pDataObject,
+    [in, unique] FORMATETC *pFetc,
+    [in] DWORD advf,
+    [in, unique] IAdviseSink *pAdvise,
+    [out] DWORD *pdwConnection);
+
+  HRESULT Unadvise(
+    [in] DWORD dwConnection);
+
+  HRESULT EnumAdvise(
+    [out] IEnumSTATDATA **ppenumAdvise);
+
+  HRESULT SendOnDataChange(
+    [in, unique] IDataObject *pDataObject,
+    [in] DWORD dwReserved,
+    [in] DWORD advf);
+}
+
+/******************** Remoting ********************/
+
+[
+  local,
+  object,
+  uuid(00000016-0000-0000-C000-000000000046)
+]
+interface IMessageFilter : IUnknown
+{
+  typedef [unique] IMessageFilter *LPMESSAGEFILTER;
+
+  typedef enum tagCALLTYPE {
+    CALLTYPE_TOPLEVEL = 1,
+    CALLTYPE_NESTED   = 2,
+    CALLTYPE_ASYNC    = 3,
+    CALLTYPE_TOPLEVEL_CALLPENDING = 4,
+    CALLTYPE_ASYNC_CALLPENDING    = 5
+  } CALLTYPE;
+
+  typedef enum tagSERVERCALL {
+    SERVERCALL_ISHANDLED  = 0,
+    SERVERCALL_REJECTED   = 1,
+    SERVERCALL_RETRYLATER = 2
+  } SERVERCALL;
+
+  typedef enum tagPENDINGTYPE {
+    PENDINGTYPE_TOPLEVEL = 1,
+    PENDINGTYPE_NESTED   = 2
+  } PENDINGTYPE;
+
+  typedef enum tagPENDINGMSG {
+    PENDINGMSG_CANCELCALL     = 0,
+    PENDINGMSG_WAITNOPROCESS  = 1,
+    PENDINGMSG_WAITDEFPROCESS = 2
+  } PENDINGMSG;
+
+  typedef struct tagINTERFACEINFO {
+    IUnknown *pUnk;
+    IID iid;
+    WORD wMethod;
+  } INTERFACEINFO, *LPINTERFACEINFO;
+
+  DWORD HandleInComingCall(
+    [in] DWORD dwCallType,
+    [in] HTASK htaskCaller,
+    [in] DWORD dwTickCount,
+    [in] LPINTERFACEINFO lpInterfaceInfo);
+
+  DWORD RetryRejectedCall(
+    [in] HTASK htaskCallee,
+    [in] DWORD dwTickCount,
+    [in] DWORD dwRejectType);
+
+  DWORD MessagePending(
+    [in] HTASK htaskCallee,
+    [in] DWORD dwTickCount,
+    [in] DWORD dwPendingType);
+}
+
+[
+  local,
+  object,
+  uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
+]
+interface IRpcChannelBuffer : IUnknown
+{
+  typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER;
+
+  typedef unsigned long RPCOLEDATAREP;
+
+  typedef struct tagRPCOLEMESSAGE {
+    void *reserved1;
+    RPCOLEDATAREP dataRepresentation;
+    void *Buffer;
+    ULONG cbBuffer;
+    ULONG iMethod;
+    void *reserved2[5];
+    ULONG rpcFlags;
+  } RPCOLEMESSAGE;
+
+  typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
+
+  HRESULT GetBuffer(
+    [in] RPCOLEMESSAGE *pMessage,
+    [in] REFIID riid);
+
+  HRESULT SendReceive(
+    [in,out] RPCOLEMESSAGE *pMessage,
+    [out] ULONG *pStatus);
+
+  HRESULT FreeBuffer(
+    [in] RPCOLEMESSAGE *pMessage);
+
+  HRESULT GetDestCtx(
+    [out] DWORD *pdwDestContext,
+    [out] void **ppvDestContext);
+
+  HRESULT IsConnected();
+}
+
+[
+  local,
+  object,
+  uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)
+]
+interface IRpcChannelBuffer2 : IRpcChannelBuffer
+{
+  typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
+
+  HRESULT GetProtocolVersion(
+    [in,out] DWORD *pdwVersion);
+}
+
+[
+  local,
+  object,
+  uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2)
+]
+interface IRpcChannelBuffer3 : IRpcChannelBuffer2
+{
+  typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
+
+  HRESULT Send(
+    [in,out] RPCOLEMESSAGE *pMsg,
+    [out] ULONG *pulStatus);
+
+  HRESULT Receive(
+    [in,out] RPCOLEMESSAGE *pMsg,
+    [in] ULONG ulSize,
+    [out] ULONG *pulStatus);
+
+  HRESULT Cancel(
+    [in] RPCOLEMESSAGE *pMsg);
+
+  HRESULT GetCallContext(
+    [in] RPCOLEMESSAGE *pMsg,
+    [in] REFIID riid,
+    [out] void **pInterface);
+
+  HRESULT GetDestCtxEx(
+    [in] RPCOLEMESSAGE *pMsg,
+    [out] DWORD *pdwDestContext,
+    [out] void **ppvDestContext);
+
+  HRESULT GetState(
+    [in] RPCOLEMESSAGE *pMsg,
+    [out] DWORD *pState);
+
+  HRESULT RegisterAsync(
+    [in] RPCOLEMESSAGE *pMsg,
+    [in] IAsyncManager *pAsyncMgr);
+}
+
+[
+    local,
+    object,
+    uuid(a5029fb6-3c34-11d1-9c99-00c04fb998aa),
+    pointer_default(unique)
+]
+interface IAsyncRpcChannelBuffer : IRpcChannelBuffer2
+{
+    HRESULT Send(
+        [in, out] RPCOLEMESSAGE *pMsg,
+        [in] ISynchronize *pSync,
+        [out] ULONG *pulStatus);
+
+    HRESULT Receive(
+        [in, out] RPCOLEMESSAGE *pMsg,
+        [out] ULONG *pulStatus);
+
+    HRESULT GetDestCtxEx(
+        [in] RPCOLEMESSAGE *pMsg,
+        [out] DWORD *pdwDestContext,
+        [out] void **ppvDestContext);
+}
+
+[
+    local,
+    object,
+    uuid(58a08519-24c8-4935-b482-3fd823333a4f)
+]
+interface IRpcSyntaxNegotiate : IUnknown
+{
+    HRESULT NegotiateSyntax(
+        [in, out] RPCOLEMESSAGE *pMsg);
+}
+
+[
+  local,
+  object,
+  uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
+]
+interface IRpcProxyBuffer : IUnknown
+{
+  typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER;
+
+  HRESULT Connect(
+    [in, unique] IRpcChannelBuffer *pRpcChannelBuffer);
+
+  void Disconnect();
+}
+
+[
+  local,
+  object,
+  uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
+]
+interface IRpcStubBuffer : IUnknown
+{
+  typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER;
+
+  HRESULT Connect(
+    [in] IUnknown *pUnkServer);
+
+  void Disconnect();
+
+  HRESULT Invoke(
+    [in] RPCOLEMESSAGE *_prpcmsg,
+    [in] IRpcChannelBuffer *_pRpcChannelBuffer);
+
+  IRpcStubBuffer *IsIIDSupported(
+    [in] REFIID riid);
+
+  ULONG CountRefs();
+
+  HRESULT DebugServerQueryInterface(
+    void **ppv);
+
+  void DebugServerRelease(
+    void *pv);
+}
+
+[
+  local,
+  object,
+  uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
+]
+interface IPSFactoryBuffer : IUnknown
+{
+  typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER;
+
+  HRESULT CreateProxy(
+    [in] IUnknown *pUnkOuter,
+    [in] REFIID riid,
+    [out] IRpcProxyBuffer **ppProxy,
+    [out] void **ppv);
+
+  HRESULT CreateStub(
+    [in] REFIID riid,
+    [in, unique] IUnknown *pUnkServer,
+    [out] IRpcStubBuffer **ppStub);
+}
+
+[
+  local,
+  object,
+  uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
+]
+interface IChannelHook : IUnknown
+{
+  typedef [unique] IChannelHook *LPCHANNELHOOK;
+
+  typedef struct SChannelHookCallInfo {
+    IID iid;
+    DWORD cbSize;
+    GUID uCausality;
+    DWORD dwServerPid;
+    DWORD iMethod;
+    void *pObject;
+  } SChannelHookCallInfo;
+
+  void ClientGetSize(
+    [in] REFGUID uExtent,
+    [in] REFIID riid,
+    [out] ULONG *pDataSize);
+
+  void ClientFillBuffer(
+    [in] REFGUID uExtent,
+    [in] REFIID riid,
+    [in, out] ULONG *pDataSize,
+    [in] void *pDataBuffer);
+
+  void ClientNotify(
+    [in] REFGUID uExtent,
+    [in] REFIID riid,
+    [in] ULONG cbDataSize,
+    [in] void *pDataBuffer,
+    [in] DWORD lDataRep,
+    [in] HRESULT hrFault);
+
+  void ServerNotify(
+    [in] REFGUID uExtent,
+    [in] REFIID riid,
+    [in] ULONG cbDataSize,
+    [in] void *pDataBuffer,
+    [in] DWORD lDataRep);
+
+  void ServerGetSize(
+    [in] REFGUID uExtent,
+    [in] REFIID riid,
+    [in] HRESULT hrFault,
+    [out] ULONG *pDataSize);
+
+  void ServerFillBuffer(
+    [in] REFGUID uExtent,
+    [in] REFIID riid,
+    [in, out] ULONG *pDataSize,
+    [in] void *pDataBuffer,
+    [in] HRESULT hrFault );
+}
+
+extern const FMTID FMTID_SummaryInformation;
+extern const FMTID FMTID_DocSummaryInformation;
+extern const FMTID FMTID_UserDefinedProperties;
+
+
+/******************** Connection Points ********************/
+/* FIXME */
+
+/******************** DCOM ********************/
+
+[
+  local,
+  object,
+  uuid(0000013D-0000-0000-C000-000000000046)
+]
+interface IClientSecurity : IUnknown
+{
+  typedef struct tagSOLE_AUTHENTICATION_SERVICE {
+    DWORD dwAuthnSvc;
+    DWORD dwAuthzSvc;
+    OLECHAR *pPrincipalName;
+    HRESULT hr;
+  } SOLE_AUTHENTICATION_SERVICE;
+
+  typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
+
+  typedef struct tagSOLE_AUTHENTICATION_INFO {
+    DWORD dwAuthnSvc;
+    DWORD dwAuthzSvc;
+    void *pAuthInfo;
+  } SOLE_AUTHENTICATION_INFO;
+
+  const OLECHAR *COLE_DEFAULT_PRINCIPAL = (OLECHAR*) -1;
+  const void *COLE_DEFAULT_AUTHINFO = (void*) -1;
+
+  typedef struct tagSOLE_AUTHENTICATION_LIST {
+    DWORD cAuthInfo;
+    SOLE_AUTHENTICATION_INFO *aAuthInfo;
+  } SOLE_AUTHENTICATION_LIST;
+
+  typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
+    EOAC_NONE               = 0x0,
+    EOAC_MUTUAL_AUTH        = 0x1,
+    EOAC_SECURE_REFS        = 0x2, /* CoInitializeSecurity only */
+    EOAC_ACCESS_CONTROL     = 0x4, /* CoInitializeSecurity only */
+    EOAC_APPID              = 0x8, /* CoInitializeSecurity only */
+    EOAC_DYNAMIC            = 0x10, /* CoInitializeSecurity only */
+    EOAC_STATIC_CLOAKING    = 0x20,
+    EOAC_DYNAMIC_CLOAKING   = 0x40,
+    EOAC_ANY_AUTHORITY      = 0x80,
+    EOAC_MAKE_FULLSIC       = 0x100,
+    EOAC_REQUIRE_FULLSIC    = 0x200, /* CoInitializeSecurity only */
+    EOAC_AUTO_IMPERSONATE   = 0x400, /* CoInitializeSecurity only */
+    EOAC_DEFAULT            = 0x800,
+    EOAC_DISABLE_AAA        = 0x1000, /* CoInitializeSecurity only */
+    EOAC_NO_CUSTOM_MARSHAL  = 0x2000, /* CoInitializeSecurity only */
+  } EOLE_AUTHENTICATION_CAPABILITIES;
+
+  HRESULT QueryBlanket(
+    [in] IUnknown *pProxy,
+    [out] DWORD *pAuthnSvc,
+    [out] DWORD *pAuthzSvc,
+    [out] OLECHAR **pServerPrincName,
+    [out] DWORD *pAuthnLevel,
+    [out] DWORD *pImpLevel,
+    [out] void **pAuthInfo,
+    [out] DWORD *pCapabilities);
+
+  HRESULT SetBlanket(
+    [in] IUnknown *pProxy,
+    [in] DWORD AuthnSvc,
+    [in] DWORD AuthzSvc,
+    [in] OLECHAR *pServerPrincName,
+    [in] DWORD AuthnLevel,
+    [in] DWORD ImpLevel,
+    [in] void *pAuthInfo,
+    [in] DWORD Capabilities);
+
+  HRESULT CopyProxy(
+    [in] IUnknown *pProxy,
+    [out] IUnknown **ppCopy);
+}
+
+[
+  local,
+  object,
+  uuid(0000013E-0000-0000-C000-000000000046)
+]
+interface IServerSecurity : IUnknown
+{
+  HRESULT QueryBlanket(
+    [out] DWORD *pAuthnSvc,
+    [out] DWORD *pAuthzSvc,
+    [out] OLECHAR **pServerPrincName,
+    [out] DWORD *pAuthnLevel,
+    [out] DWORD *pImpLevel,
+    [out] void **pPrivs,
+    [out] DWORD *pCapabilities);
+
+  HRESULT ImpersonateClient();
+
+  HRESULT RevertToSelf();
+
+  BOOL IsImpersonating();
+}
+
+[
+  local,
+  object,
+  uuid(00000024-0000-0000-C000-000000000046)
+]
+interface IAsyncSetup : IUnknown
+{
+  HRESULT GetAsyncManager(
+    [in] REFIID riid,
+    [in] IUnknown *pOuter,
+    [in] DWORD dwFlags,
+    [out] IUnknown **ppInner,
+    [out] IAsyncManager **ppAsyncMgr);
+}
+
+[
+    object,
+    uuid(0e6d4d92-6738-11cf-9608-00aa00680db4)
+]
+interface IDirectWriterLock : IUnknown
+{
+    HRESULT WaitForWriteAccess(
+        [in] DWORD dwTimeout);
+
+    HRESULT ReleaseWriteAccess();
+
+    HRESULT HaveWriteAccess();
+}
+
+[
+    object,
+    uuid(00000030-0000-0000-C000-000000000046)
+]
+
+interface ISynchronize : IUnknown
+{
+    HRESULT Wait(
+        [in] DWORD dwFlags,
+        [in] DWORD dwMilliseconds);
+
+    HRESULT Signal();
+
+    HRESULT Reset();
+}
+
+
+[
+    local,
+    object,
+    uuid(00000031-0000-0000-C000-000000000046)
+]
+interface ISynchronizeHandle : IUnknown
+{
+    HRESULT GetHandle(
+        [out] HANDLE *ph);
+}
+
+
+[
+    local,
+    object,
+    uuid(00000032-0000-0000-C000-000000000046)
+]
+interface ISynchronizeEvent : ISynchronizeHandle
+{
+    HRESULT SetEventHandle(
+        [in] HANDLE *ph);
+}
+
+
+[
+    local,
+    object,
+    uuid(00000033-0000-0000-C000-000000000046)
+]
+interface ISynchronizeContainer : IUnknown
+{
+    HRESULT AddSynchronize(
+        [in] ISynchronize *pSync);
+
+    HRESULT WaitMultiple(
+        [in] DWORD dwFlags,
+        [in] DWORD dwTimeOut,
+        [out] ISynchronize **ppSync);
+}
+
+[
+    local,
+    object,
+    uuid(00000025-0000-0000-C000-000000000046)
+]
+interface ISynchronizeMutex : ISynchronize
+{
+    HRESULT ReleaseMutex();
+}
+
+[
+    local,
+    object,
+    uuid(00000029-0000-0000-C000-000000000046)
+]
+
+interface ICancelMethodCalls : IUnknown
+{
+    typedef [unique] ICancelMethodCalls *LPCANCELMETHODCALLS;
+
+    HRESULT Cancel(
+        [in] ULONG ulSeconds);
+
+    HRESULT TestCancel();
+}
+
+[
+  local,
+  object,
+  uuid(0000002A-0000-0000-C000-000000000046)
+]
+interface IAsyncManager : IUnknown
+{
+  typedef enum tagDCOM_CALL_STATE {
+    DCOM_NONE          = 0,
+    DCOM_CALL_COMPLETE = 1,
+    DCOM_CALL_CANCELED = 2
+  } DCOM_CALL_STATE;
+
+  HRESULT CompleteCall(
+    [in] HRESULT Result);
+
+  HRESULT GetCallContext(
+    [in] REFIID riid,
+    [out] void **pInterface);
+
+  HRESULT GetState(
+    [out] ULONG *pulStateFlags);
+}
+
+[
+    local,
+    object,
+    uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface ICallFactory : IUnknown
+{
+    HRESULT CreateCall(
+        [in] REFIID riid,
+        [in] IUnknown *pCtrlUnk,
+        [in] REFIID riid2,
+        [out, iid_is(riid2)] IUnknown **ppv);
+}
+
+[
+    local,
+    object,
+    uuid(00000144-0000-0000-C000-000000000046)
+]
+interface IRpcOptions : IUnknown
+{
+    HRESULT Set(
+        [in] IUnknown *pPrx,
+        [in] DWORD dwProperty,
+        [in] ULONG_PTR dwValue);
+
+    HRESULT Query(
+        [in] IUnknown *pPrx,
+        [in] DWORD dwProperty,
+        [out] ULONG_PTR *pdwValue);
+}
+
+enum {
+   COMBND_RPCTIMEOUT = 1,
+   COMBND_SERVER_LOCALITY = 2
+};  
+
+enum {
+   SERVER_LOCALITY_PROCESS_LOCAL = 0,
+   SERVER_LOCALITY_MACHINE_LOCAL = 1,
+   SERVER_LOCALITY_REMOTE = 2
+};
+
+[
+    local,
+    object,
+    uuid(00000149-0000-0000-C000-000000000046),
+    pointer_default(unique)
+]
+interface IRpcHelper : IUnknown
+{
+    HRESULT GetDCOMProtocolVersion(
+        [out] DWORD *pComVersion);
+
+    HRESULT GetIIDFromOBJREF(
+        [in] void *pObjRef,
+        [out] IID **piid);
+}
+
+[
+    local,
+    object,
+    uuid(eb0cb9e8-7996-11d2-872e-0000f8080859)
+]
+interface IReleaseMarshalBuffers : IUnknown
+{
+    HRESULT ReleaseMarshalBuffer(
+        [in] RPCOLEMESSAGE *pMsg,
+        [in] DWORD dwFlags,
+        [in, unique] IUnknown *pChnl);
+}
+
+[
+    local,
+    object,
+    uuid(0000002B-0000-0000-C000-000000000046)
+]
+interface IWaitMultiple : IUnknown
+{
+    HRESULT WaitMultiple(
+        [in] DWORD timeout,
+        [out] ISynchronize **pSync);
+    HRESULT AddSynchronize(
+        [in] ISynchronize *pSync);
+}
+
+
+[
+    object,
+    uuid(00000026-0000-0000-C000-000000000046)
+]
+interface IUrlMon : IUnknown
+{
+    HRESULT AsyncGetClassBits(
+        [in] REFCLSID rclsid,
+        [in, unique] LPCWSTR pszTYPE,
+        [in, unique] LPCWSTR pszExt,
+        [in] DWORD dwFileVersionMS,
+        [in] DWORD dwFileVersionLS,
+        [in, unique] LPCWSTR pszCodeBase,
+        [in] IBindCtx *pbc,
+        [in] DWORD dwClassContext,
+        [in] REFIID riid,
+        [in] DWORD flags);
+}
+
+[
+    local,
+    object,
+    uuid(00000145-0000-0000-C000-000000000046)
+]
+interface IForegroundTransfer : IUnknown
+{
+    HRESULT AllowForegroundTransfer(
+        [in] void *lpvReserved);
+}
+
+[
+    local,
+    object,
+    uuid(00000147-0000-0000-C000-000000000046)
+]
+interface IAddrTrackingControl : IUnknown
+{
+    typedef [unique] IAddrTrackingControl *LPADDRTRACKINGCONTROL;
+
+    HRESULT EnableCOMDynamicAddrTracking();
+    HRESULT DisableCOMDynamicAddrTracking();
+}
+
+[
+    local,
+    object,
+    uuid(00000148-0000-0000-C000-000000000046)
+]
+interface IAddrExclusionControl : IUnknown
+{
+    typedef [unique] IAddrExclusionControl *LPADDREXCLUSIONCONTROL;
+
+    HRESULT GetCurrentAddrExclusionList(
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppEnumerator);
+    HRESULT UpdateAddrExclusionList(
+        [in] IUnknown *pEnumerator);
+}
+
+typedef enum _APTTYPE {
+    APTTYPE_CURRENT = -1,
+    APTTYPE_STA     = 0,
+    APTTYPE_MTA     = 1,
+    APTTYPE_NA      = 2,
+    APTTYPE_MAINSTA = 3
+} APTTYPE;
+
+typedef enum _THDTYPE {
+    THDTYPE_BLOCKMESSAGES   = 0,
+    THDTYPE_PROCESSMESSAGES = 1
+} THDTYPE;
+
+[
+    local,
+    object,
+    uuid(000001ce-0000-0000-C000-000000000046),
+    pointer_default(unique)
+]
+interface IComThreadingInfo : IUnknown
+{
+    HRESULT GetCurrentApartmentType(
+        [out] APTTYPE *pAptType);
+    HRESULT GetCurrentThreadType(
+        [out] THDTYPE *pThreadType);
+    HRESULT GetCurrentLogicalThreadId(
+        [out] GUID *pguidLogicalThreadId);
+    HRESULT SetCurrentLogicalThreadId(
+        [in] REFGUID rguid);
+}
+
+
+[
+    object,
+    pointer_default(unique),
+    uuid(72380d55-8d2b-43a3-8513-2b6ef31434e9)
+]
+interface IProcessInitControl : IUnknown
+{
+    HRESULT ResetInitializerTimeout(
+        [in] DWORD dwSecondsRemaining);
+}
+
+[
+    local,
+    object,
+    uuid(00000034-0000-0000-C000-000000000046),
+    pointer_default(unique)
+]
+interface IInitializeSpy : IUnknown
+{
+    typedef [unique] IInitializeSpy *LPINITIALIZESPY;
+
+    HRESULT PreInitialize(
+        [in] DWORD dwCoInit,
+        [in] DWORD dwCurThreadAptRefs);
+
+    HRESULT PostInitialize(
+        [in] HRESULT hrCoInit,
+        [in] DWORD dwCoInit,
+        [in] DWORD dwNewThreadAptRefs);
+
+    HRESULT PreUninitialize(
+        [in] DWORD dwCurThreadAptRefs);
+
+    HRESULT PostUninitialize(
+        [in] DWORD dwNewThreadAptRefs);
+}
+
+[
+    object,
+    uuid(969dc708-5c76-11d1-8d86-0000f804b057)
+]
+interface IThumbnailExtractor : IUnknown
+{
+    HRESULT ExtractThumbnail(
+        [in] IStorage *pStg,
+        [in] ULONG ulLength,
+        [in] ULONG ulHeight,
+        [out] ULONG *pulOutputLength,
+        [out] ULONG *pulOutputHeight,
+        [out] HBITMAP *phOutputBitmap);
+
+
+    HRESULT OnFileUpdated(
+        [in] IStorage *pStg);
+}
+
+typedef enum tagGLOBALOPT_PROPERTIES
+{
+    COMGLB_EXCEPTION_HANDLING     = 1,
+    COMGLB_APPID                  = 2,
+    COMGLB_RPC_THREADPOOL_SETTING = 3
+} GLOBALOPT_PROPERTIES;
+
+typedef enum tagGLOBALOPT_EH_VALUES
+{
+    COMGLB_EXCEPTION_HANDLE               = 0,
+    COMGLB_EXCEPTION_DONOT_HANDLE_FATAL   = 1,
+    COMGLB_EXCEPTION_DONOT_HANDLE         = COMGLB_EXCEPTION_DONOT_HANDLE_FATAL,
+    COMGLB_EXCEPTION_DONOT_HANDLE_ANY     = 2
+} GLOBALOPT_EH_VALUES;
+
+typedef enum tagGLOBALOPT_RPCTP_VALUES
+{
+    COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL = 0,
+    COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1
+} GLOBALOPT_RPCTP_VALUES;
+
+
+[
+    object,
+    local,
+    pointer_default(unique),
+    uuid(0000015B-0000-0000-C000-000000000046)
+]
+interface IGlobalOptions : IUnknown
+{
+    HRESULT Set([in] GLOBALOPT_PROPERTIES property, [in] ULONG_PTR value);
+    HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value);
+}
+
+cpp_quote("#ifdef USE_COM_CONTEXT_DEF")
+
+typedef DWORD CPFLAGS;
+
+typedef struct tagContextProperty
+{
+    GUID policyId;
+    CPFLAGS flags;
+    [unique] IUnknown *pUnk;
+} ContextProperty;
+
+[
+    local,
+    object,
+    uuid(000001c1-0000-0000-C000-000000000046)
+]
+interface IEnumContextProps : IUnknown
+{
+    typedef [unique] IEnumContextProps *LPENUMCONTEXTPROPS;
+
+    HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] ContextProperty *pContextProperties,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumContextProps **ppEnumContextProps);
+
+    HRESULT Count(
+        [out] ULONG *pcelt);
+}
+
+[
+    local,
+    object,
+    uuid(000001c0-0000-0000-C000-000000000046)
+]
+interface IContext : IUnknown
+{
+    HRESULT SetProperty(
+        [in] REFGUID policyId,
+        [in] CPFLAGS flags,
+        [in] IUnknown *pUnk);
+
+    HRESULT RemoveProperty(
+        [in] REFGUID policyId);
+
+    HRESULT GetProperty(
+        [in] REFGUID guid,
+        [out] CPFLAGS *pFlags,
+        [out] IUnknown **ppUnk);
+
+    HRESULT EnumContextProps(
+        [out] IEnumContextProps **ppEnumContextProps);
+}
+
+[
+    local,
+    object,
+    uuid(000001c6-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IObjContext : IContext
+{
+    void Reserved1();
+    void Reserved2();
+    void Reserved3();
+    void Reserved4();
+    void Reserved5();
+    void Reserved6();
+    void Reserved7();
+}
+
+cpp_quote("#endif /* defined USE_COM_CONTEXT_DEF */")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl
new file mode 100644
index 0000000..badb2f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2005 CorVu Corporation
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+cpp_quote("#define INTERFACESAFE_FOR_UNTRUSTED_CALLER 1")
+cpp_quote("#define INTERFACESAFE_FOR_UNTRUSTED_DATA 2")
+cpp_quote("#define INTERFACE_USES_DISPEX 4")
+cpp_quote("#define INTERFACE_USES_SECURITY_MANAGER 8")
+
+cpp_quote("DEFINE_GUID(CATID_SafeForScripting, 0x7dd95801,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);")
+cpp_quote("DEFINE_GUID(CATID_SafeForInitializing, 0x7dd95802,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);")
+
+[
+    object,
+    uuid(cb5bdc81-93c1-11cf-8f20-00805f2cd064),
+    pointer_default(unique)
+]
+interface IObjectSafety : IUnknown
+{
+    HRESULT GetInterfaceSafetyOptions([in] REFIID riid,
+    				      [out] DWORD *pdwSupportedOptions,
+				      [out] DWORD *pdwEnabledOptions);
+
+    HRESULT SetInterfaceSafetyOptions([in] REFIID riid,
+    				      [in] DWORD dwOptionSetMask,
+				      [in] DWORD dwEnabledOptions);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h
new file mode 100644
index 0000000..c01d4c7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h
@@ -0,0 +1,169 @@
+/*
+ * objsel.h
+ *
+ * Object Picker Dialog
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef __OBJSEL_H_
+#define __OBJSEL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_GUID(CLSID_DsObjectPicker, 0x17d6ccd8, 0x3b7b, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);
+DEFINE_GUID(IID_IDsObjectPicker,  0x0c87e64e, 0x3b7a, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);
+
+#define CFSTR_DSOP_DS_SELECTION_LIST    TEXT("CFSTR_DSOP_DS_SELECTION_LIST")
+
+/* up-level scope filters in the DSOP_UPLEVEL_FILTER_FLAGS structure */
+#define DSOP_FILTER_INCLUDE_ADVANCED_VIEW       (0x1)
+#define DSOP_FILTER_USERS       (0x2)
+#define DSOP_FILTER_BUILTIN_GROUPS      (0x4)
+#define DSOP_FILTER_WELL_KNOWN_PRINCIPALS       (0x8)
+#define DSOP_FILTER_UNIVERSAL_GROUPS_DL (0x10)
+#define DSOP_FILTER_UNIVERSAL_GROUPS_SE (0x20)
+#define DSOP_FILTER_GLOBAL_GROUPS_DL    (0x40)
+#define DSOP_FILTER_GLOBAL_GROUPS_SE    (0x80)
+#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL      (0x100)
+#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE      (0x200)
+#define DSOP_FILTER_CONTACTS    (0x400)
+#define DSOP_FILTER_COMPUTERS   (0x800)
+
+typedef struct _DSOP_UPLEVEL_FILTER_FLAGS
+{
+    ULONG flBothModes;
+    ULONG flMixedModeOnly;
+    ULONG flNativeModeOnly;
+} DSOP_UPLEVEL_FILTER_FLAGS, *PDSOP_UPLEVEL_FILTER_FLAGS;
+
+/* down-level scope filters in the DSOP_FILTER_FLAGS structure */
+#define DSOP_DOWNLEVEL_FILTER_USERS     (0x80000001)
+#define DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS      (0x80000002)
+#define DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS     (0x80000004)
+#define DSOP_DOWNLEVEL_FILTER_COMPUTERS (0x80000008)
+#define DSOP_DOWNLEVEL_FILTER_WORLD     (0x80000010)
+#define DSOP_DOWNLEVEL_FILTER_AUTHENTICATED_USER        (0x80000020)
+#define DSOP_DOWNLEVEL_FILTER_ANONYMOUS (0x80000040)
+#define DSOP_DOWNLEVEL_FILTER_BATCH     (0x80000080)
+#define DSOP_DOWNLEVEL_FILTER_CREATOR_OWNER     (0x80000100)
+#define DSOP_DOWNLEVEL_FILTER_CREATOR_GROUP     (0x80000200)
+#define DSOP_DOWNLEVEL_FILTER_DIALUP    (0x80000400)
+#define DSOP_DOWNLEVEL_FILTER_INTERACTIVE       (0x80000800)
+#define DSOP_DOWNLEVEL_FILTER_NETWORK   (0x80001000)
+#define DSOP_DOWNLEVEL_FILTER_SERVICE   (0x80002000)
+#define DSOP_DOWNLEVEL_FILTER_SYSTEM    (0x80004000)
+#define DSOP_DOWNLEVEL_FILTER_EXCLUDE_BUILTIN_GROUPS    (0x80008000)
+#define DSOP_DOWNLEVEL_FILTER_TERMINAL_SERVER   (0x80010000)
+#define DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS        (0x80020000)
+#define DSOP_DOWNLEVEL_FILTER_LOCAL_SERVICE     (0x80040000)
+#define DSOP_DOWNLEVEL_FILTER_NETWORK_SERVICE   (0x80080000)
+#define DSOP_DOWNLEVEL_FILTER_REMOTE_LOGON      (0x80100000)
+
+typedef struct _DSOP_FILTER_FLAGS
+{
+    DSOP_UPLEVEL_FILTER_FLAGS Uplevel;
+    ULONG flDownlevel;
+} DSOP_FILTER_FLAGS, *PDSOP_FILTER_FLAGS;
+
+/* ADsPath format flags in the DSOP_SCOPE_INIT_INFO structure */
+#define DSOP_SCOPE_FLAG_STARTING_SCOPE  (0x1)
+#define DSOP_SCOPE_FLAG_WANT_PROVIDER_WINNT     (0x2)
+#define DSOP_SCOPE_FLAG_WANT_PROVIDER_LDAP      (0x4)
+#define DSOP_SCOPE_FLAG_WANT_PROVIDER_GC        (0x8)
+#define DSOP_SCOPE_FLAG_WANT_SID_PATH   (0x10)
+#define DSOP_SCOPE_FLAG_WANT_DOWNLEVEL_BUILTIN_PATH     (0x20)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS    (0x40)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS   (0x80)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_COMPUTERS        (0x100)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_CONTACTS (0x200)
+
+typedef struct _DSOP_SCOPE_INIT_INFO
+{
+    ULONG cbSize;
+    ULONG flType;
+    ULONG flScope;
+    DSOP_FILTER_FLAGS FilterFlags;
+    PCWSTR pwzDcName;
+    PCWSTR pwzADsPath;
+    HRESULT hr;
+} DSOP_SCOPE_INIT_INFO, *PDSOP_SCOPE_INIT_INFO;
+typedef const DSOP_SCOPE_INIT_INFO *PCDSOP_SCOPE_INIT_INFO;
+
+/* object picker options in the DSOP_INIT_INFO structure */
+#define DSOP_FLAG_MULTISELECT   (0x1)
+#define DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK (0x2)
+
+typedef struct _DSOP_INIT_INFO
+{
+    ULONG cbSize;
+    PCWSTR pwzTargetComputer;
+    ULONG cDsScopeInfos;
+    PDSOP_SCOPE_INIT_INFO aDsScopeInfos;
+    ULONG flOptions;
+    ULONG cAttributesToFetch;
+    PCWSTR *apwzAttributeNames;
+} DSOP_INIT_INFO, *PDSOP_INIT_INFO;
+
+typedef const DSOP_INIT_INFO *PCDSOP_INIT_INFO;
+
+/* selection scope types in the DS_SELECTION structure */
+#define DSOP_SCOPE_TYPE_TARGET_COMPUTER (0x1)
+#define DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN   (0x2)
+#define DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN (0x4)
+#define DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN       (0x8)
+#define DSOP_SCOPE_TYPE_GLOBAL_CATALOG  (0x10)
+#define DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN (0x20)
+#define DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN       (0x40)
+#define DSOP_SCOPE_TYPE_WORKGROUP       (0x80)
+#define DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE      (0x100)
+#define DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE    (0x200)
+
+typedef struct _DS_SELECTION
+{
+    PWSTR pwzName;
+    PWSTR pwzADsPath;
+    PWSTR pwzClass;
+    PWSTR pwzUPN;
+    VARIANT *pvarFetchedAttributes;
+    ULONG flScopeType;
+} DS_SELECTION, *PDS_SELECTION;
+
+typedef struct _DS_SELECTION_LIST
+{
+    ULONG cItems;
+    ULONG cFetchedAttributes;
+    DS_SELECTION aDsSelection[ANYSIZE_ARRAY];
+} DS_SELECTION_LIST, *PDS_SELECTION_LIST;
+
+/*****************************************************************************
+ * IDsObjectPicker interface
+ */
+#define INTERFACE   IDsObjectPicker
+DECLARE_INTERFACE_(IDsObjectPicker,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDsObjectPicker methods ***/
+    STDMETHOD(Initialize)(THIS_ PDSOP_INIT_INFO pInitInfo) PURE;
+    STDMETHOD(InvokeDialog)(THIS_ HWND hwndParent, IDataObject** ppdoSelections) PURE;
+};
+#undef INTERFACE
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __OBJSEL_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl
new file mode 100644
index 0000000..8f9fcc2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl
@@ -0,0 +1,1343 @@
+/*
+ * Copyright (C) 1999 Paul Quinn
+ * Copyright (C) 1999 Francis Beaudet
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oleidl.idl";
+import "oaidl.idl";
+import "servprov.idl";
+import "urlmon.idl";
+#endif
+
+/*****************************************************************************
+ * IOleControlTypes interface
+ */
+[
+    pointer_default(unique)
+]
+interface IOleControlTypes
+{
+    typedef [v1_enum] enum tagUASFLAGS
+    {
+        UAS_NORMAL       = 0x0,
+        UAS_BLOCKED      = 0x1,
+        UAS_NOPARENTABLE = 0x2,
+        UAS_MASK         = 0x3
+    } UASFLAGS;
+
+    typedef enum tagREADYSTATE
+    {
+        READYSTATE_UNINITIALIZED  = 0,
+        READYSTATE_LOADING  = 1,
+        READYSTATE_LOADED = 2,
+        READYSTATE_INTERACTIVE  = 3,
+        READYSTATE_COMPLETE = 4
+    } READYSTATE;
+
+    typedef struct tagVARIANT_BLOB
+    {
+        DWORD clSize;
+        DWORD rpcReserved;
+        [size_is(clSize-1)] ULONGLONG ahData[];
+    } wireVARIANT_BLOB;
+
+    typedef struct tagUserVARIANT
+    {
+      wireVARIANT_BLOB pVarBlob;
+    } UserVARIANT;
+}
+
+
+/*****************************************************************************
+ * IFont interface
+ */
+[
+    object,
+    uuid(bef6e002-a874-101a-8bba-00aa00300cab),
+    pointer_default(unique)
+]
+interface IFont : IUnknown
+{
+    typedef IFont *LPFONT;
+    typedef TEXTMETRICW TEXTMETRICOLE, *LPTEXTMETRICOLE;
+
+    [propget] HRESULT Name( [out] BSTR *pname);
+    [propput] HRESULT Name( [in] BSTR name );
+    [propget] HRESULT Size( [out] CY *psize );
+    [propput] HRESULT Size( [in] CY size );
+    [propget] HRESULT Bold( [out] BOOL *pbold );
+    [propput] HRESULT Bold( [in] BOOL bold );
+    [propget] HRESULT Italic( [out] BOOL *pitalic );
+    [propput] HRESULT Italic( [in] BOOL italic );
+    [propget] HRESULT Underline( [out] BOOL *punderline );
+    [propput] HRESULT Underline( [in] BOOL underline );
+    [propget] HRESULT Strikethrough( [out] BOOL *pstrikethrough );
+    [propput] HRESULT Strikethrough( [in] BOOL strikethrough );
+    [propget] HRESULT Weight( [out] SHORT *pweight );
+    [propput] HRESULT Weight( [in] SHORT weight );
+    [propget] HRESULT Charset( [out] SHORT *pcharset );
+    [propput] HRESULT Charset( [in] SHORT charset );
+    [propget] HRESULT hFont( [out] HFONT *phfont );
+    HRESULT Clone( [out] IFont **ppfont );
+    HRESULT IsEqual( [in] IFont *pFontOther );
+    HRESULT SetRatio( [in] LONG cyLogical, [in] LONG cyHimetric );
+    HRESULT QueryTextMetrics( [out] TEXTMETRICOLE * ptm );
+    HRESULT AddRefHfont( [in] HFONT hfont );
+    HRESULT ReleaseHfont( [in] HFONT hfont );
+    HRESULT SetHdc( [in] HDC hdc );
+}
+
+
+/*****************************************************************************
+ * IFontDisp interface
+ */
+[
+    object,
+    uuid(bef6e003-a874-101a-8bba-00aa00300cab),
+    pointer_default(unique)
+]
+interface IFontDisp : IDispatch
+{
+    typedef IFontDisp *LPFONTDISP;
+}
+
+
+/*****************************************************************************
+ * IFontEventsDisp interface
+ */
+[
+    object,
+    uuid(4ef6100a-af88-11d0-9846-00c04fc29993),
+    pointer_default(unique)
+]
+interface IFontEventsDisp : IDispatch
+{
+    typedef IFontEventsDisp *LPFONTEVENTS;
+}
+
+
+/*****************************************************************************
+ * IPicture interface
+ */
+[
+    object,
+    uuid(7bf80980-bf32-101a-8bbb-00aa00300cab),
+    pointer_default(unique)
+]
+interface IPicture : IUnknown
+{
+    typedef IPicture *LPPICTURE;
+
+    typedef enum tagPicture
+    {
+        PICTURE_SCALABLE = 0x1,
+        PICTURE_TRANSPARENT = 0x2
+    } PICTUREATTRIBUTES;
+
+    typedef UINT OLE_HANDLE;
+    typedef LONG OLE_XPOS_HIMETRIC;
+    typedef LONG OLE_YPOS_HIMETRIC;
+    typedef LONG OLE_XSIZE_HIMETRIC;
+    typedef LONG OLE_YSIZE_HIMETRIC;
+
+    [propget] HRESULT Handle( [out] OLE_HANDLE *pHandle );
+    [propget] HRESULT hPal( [out] OLE_HANDLE *phPal );
+    [propget] HRESULT Type( [out] SHORT *pType );
+    [propget] HRESULT Width( [out] OLE_XSIZE_HIMETRIC *pWidth );
+    [propget] HRESULT Height( [out] OLE_YSIZE_HIMETRIC *pHeight );
+
+    HRESULT Render(
+        [in] HDC hdc,
+        [in] LONG x,
+        [in] LONG y,
+        [in] LONG cx,
+        [in] LONG cy,
+        [in] OLE_XPOS_HIMETRIC xSrc,
+        [in] OLE_YPOS_HIMETRIC ySrc,
+        [in] OLE_XSIZE_HIMETRIC cxSrc,
+        [in] OLE_YSIZE_HIMETRIC cySrc,
+        [in] LPCRECT pRcWBounds);
+
+    HRESULT set_hPal( [in] OLE_HANDLE hPal );
+
+    [propget] HRESULT CurDC( [out] HDC *phDC );
+
+    HRESULT SelectPicture(
+        [in] HDC hDCIn,
+        [out] HDC * phDCOut,
+        [out] OLE_HANDLE * phBmpOut);
+
+    [propget] HRESULT KeepOriginalFormat( [out] BOOL *pKeep );
+
+    [propput] HRESULT KeepOriginalFormat( [in] BOOL keep );
+
+    HRESULT PictureChanged();
+
+    HRESULT SaveAsFile(
+        [in] LPSTREAM pStream,
+        [in] BOOL fSaveMemCopy,
+        [out] LONG *pCbSize);
+
+    [propget] HRESULT Attributes( [out] DWORD *pDwAttr );
+}
+
+
+/*****************************************************************************
+ * IPictureDisp interface
+ */
+[
+    object,
+    uuid(7bf80981-bf32-101a-8bbb-00aa00300cab),
+    pointer_default(unique)
+]
+interface IPictureDisp : IDispatch
+{
+    typedef IPictureDisp *LPPICTUREDISP;
+}
+
+
+/*****************************************************************************
+ * IOleControl interface
+ */
+[
+    object,
+    uuid(b196b288-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+
+interface IOleControl : IUnknown
+{
+    typedef IOleControl *LPOLECONTROL;
+
+    typedef struct tagCONTROLINFO
+    {
+        ULONG cb;
+        HACCEL hAccel;
+        USHORT cAccel;
+        DWORD dwFlags;
+    } CONTROLINFO, *LPCONTROLINFO;
+
+    typedef enum tagCTRLINFO
+    {
+        CTRLINFO_EATS_RETURN = 1,
+        CTRLINFO_EATS_ESCAPE = 2
+    } CTRLINFO;
+
+    HRESULT GetControlInfo( [out] CONTROLINFO *pCI );
+    HRESULT OnMnemonic( [in] MSG *pMsg );
+    HRESULT OnAmbientPropertyChange( [in] DISPID dispID );
+    HRESULT FreezeEvents( [in] BOOL bFreeze );
+}
+
+
+/*****************************************************************************
+ * IOleControlSite interface
+ */
+[
+    object,
+    uuid(b196b289-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IOleControlSite : IUnknown
+{
+    typedef IOleControlSite *LPOLECONTROLSITE;
+
+    typedef struct tagPOINTF
+    {
+        FLOAT x;
+        FLOAT y;
+    } POINTF, *LPPOINTF;
+
+    typedef enum tagXFORMCOORDS
+    {
+	XFORMCOORDS_POSITION = 0x1,
+	XFORMCOORDS_SIZE = 0x2,
+	XFORMCOORDS_HIMETRICTOCONTAINER = 0x4,
+	XFORMCOORDS_CONTAINERTOHIMETRIC = 0x8,
+        XFORMCOORDS_EVENTCOMPAT = 0x10
+    } XFORMCOORDS;
+
+    HRESULT OnControlInfoChanged();
+
+    HRESULT LockInPlaceActive( [in] BOOL fLock );
+
+    HRESULT GetExtendedControl( [out] IDispatch ** ppDisp );
+
+    HRESULT TransformCoords(
+        [in, out] POINTL *pPtlHimetric,
+        [in, out] POINTF *pPtfContainer,
+        [in] DWORD dwFlags);
+
+    HRESULT TranslateAccelerator( [in] MSG *pMsg, [in] DWORD grfModifiers );
+
+    HRESULT OnFocus( [in] BOOL fGotFocus );
+
+    HRESULT ShowPropertyFrame();
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceSiteEx interface
+ */
+[
+    object,
+    uuid(9c2cad80-3424-11cf-b670-00aa004cd6d8),
+    pointer_default(unique)
+]
+interface IOleInPlaceSiteEx : IOleInPlaceSite
+{
+    typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX;
+
+    typedef enum tagACTIVATEFLAGS
+    {
+        ACTIVATE_WINDOWLESS = 1
+    } ACTIVATE_FLAGS;
+
+    HRESULT OnInPlaceActivateEx( [out] BOOL * pfNoRedraw, [in] DWORD dwFlags );
+    HRESULT OnInPlaceDeactivateEx( [in] BOOL fNoRedraw );
+    HRESULT RequestUIActivate();
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceSiteWindowless interface
+ */
+[
+    local,
+    object,
+    uuid(922eada0-3424-11cf-b670-00aa004cd6d8),
+    pointer_default(unique)
+]
+interface IOleInPlaceSiteWindowless : IOleInPlaceSiteEx
+{
+    typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS;
+
+    typedef enum tagOLEDCFLAGS
+    {
+        OLEDC_NODRAW = 0x1,
+        OLEDC_PAINTBKGND = 0x2,
+        OLEDC_OFFSCREEN = 0x4
+    } OLEDCFLAGS;
+
+    HRESULT CanWindowlessActivate();
+
+    HRESULT GetCapture();
+
+    HRESULT SetCapture( [in] BOOL fCapture );
+
+    HRESULT GetFocus();
+
+    HRESULT SetFocus( [in] BOOL fFocus );
+
+    HRESULT GetDC(
+        [in] LPCRECT pRect,
+        [in] DWORD grfFlags,
+        [out] HDC *phDC);
+
+    HRESULT ReleaseDC( [in] HDC hDC );
+
+    HRESULT InvalidateRect(
+        [in] LPCRECT pRect,
+        [in] BOOL fErase);
+
+    HRESULT InvalidateRgn(
+        [in] HRGN hRGN,
+        [in] BOOL fErase);
+
+    HRESULT ScrollRect(
+        [in] INT dx,
+        [in] INT dy,
+        [in] LPCRECT pRectScroll,
+        [in] LPCRECT pRectClip);
+
+    HRESULT AdjustRect( [in, out] LPRECT prc );
+
+    HRESULT OnDefWindowMessage(
+        [in] UINT msg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] LRESULT *plResult);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceObjectWindowless interface
+ */
+[
+    local,
+    object,
+    uuid(1c2056cc-5ef4-101b-8bc8-00aa003e3b29),
+    pointer_default(unique)
+]
+interface IOleInPlaceObjectWindowless : IOleInPlaceObject
+{
+    typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS;
+
+    HRESULT OnWindowMessage(
+        [in] UINT msg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] LRESULT *plResult);
+
+    HRESULT GetDropTarget( [out] IDropTarget **ppDropTarget );
+}
+
+
+/*****************************************************************************
+ * IClassFactory2 interface
+ */
+[
+    object,
+    uuid(b196b28f-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IClassFactory2 : IClassFactory
+{
+    typedef IClassFactory2 *LPCLASSFACTORY2;
+
+    typedef struct tagLICINFO
+    {
+        LONG cbLicInfo;
+        BOOL fRuntimeKeyAvail;
+        BOOL fLicVerified;
+    } LICINFO, *LPLICINFO;
+
+    HRESULT GetLicInfo( [out] LICINFO *pLicInfo );
+
+    HRESULT RequestLicKey(
+        [in] DWORD dwReserved,
+        [out] BSTR *pBstrKey);
+
+    [local]
+    HRESULT CreateInstanceLic(
+        [in] IUnknown *pUnkOuter,
+        [in] IUnknown *pUnkReserved,
+        [in] REFIID riid,
+        [in] BSTR bstrKey,
+        [out, iid_is(riid)] PVOID *ppvObj);
+
+    [call_as(CreateInstanceLic)]
+    HRESULT RemoteCreateInstanceLic(
+        [in] REFIID riid,
+        [in] BSTR bstrKey,
+        [out, iid_is(riid)] IUnknown **ppvObj);
+}
+
+
+/*****************************************************************************
+ * IViewObject interface
+ */
+[
+    local,
+    object,
+    uuid(3af24292-0c96-11ce-a0cf-00aa00600ab8),
+    pointer_default(unique)
+]
+interface IViewObjectEx : IViewObject2
+{
+    typedef IViewObjectEx *LPVIEWOBJECTEX;
+
+    typedef enum tagVIEWSTATUS
+    {
+        VIEWSTATUS_OPAQUE = 1,
+        VIEWSTATUS_SOLIDBKGND = 2,
+        VIEWSTATUS_DVASPECTOPAQUE = 4,
+        VIEWSTATUS_DVASPECTTRANSPARENT = 8,
+        VIEWSTATUS_SURFACE = 16,
+        VIEWSTATUS_3DSURFACE = 32
+    } VIEWSTATUS;
+
+    typedef enum tagHITRESULT
+    {
+        HITRESULT_OUTSIDE = 0,
+        HITRESULT_TRANSPARENT = 1,
+        HITRESULT_CLOSE = 2,
+        HITRESULT_HIT = 3
+    } HITRESULT;
+
+    typedef enum tagDVASPECT2
+    {
+        DVASPECT_OPAQUE = 16,
+        DVASPECT_TRANSPARENT = 32
+    } DVASPECT2;
+
+    typedef struct tagExtentInfo
+    {
+        ULONG cb;
+        DWORD dwExtentMode;
+        SIZEL sizelProposed;
+    } DVEXTENTINFO;
+
+    typedef enum tagAspectInfoFlag
+    {
+        DVASPECTINFOFLAG_CANOPTIMIZE = 1
+    } DVASPECTINFOFLAG;
+
+    typedef struct tagAspectInfo
+    {
+        ULONG cb;
+        DWORD dwFlags;
+    } DVASPECTINFO;
+
+    HRESULT GetRect(
+        [in] DWORD dwAspect,
+        [out] LPRECTL pRect);
+
+    HRESULT GetViewStatus( [out] DWORD *pdwStatus );
+
+    HRESULT QueryHitPoint(
+        [in] DWORD dwAspect,
+        [in] LPCRECT pRectBounds,
+        [in] POINT ptlLoc,
+        [in] LONG lCloseHint,
+        [out] DWORD *pHitResult);
+
+    HRESULT QueryHitRect(
+        [in] DWORD dwAspect,
+        [in] LPCRECT pRectBounds,
+        [in] LPCRECT pRectLoc,
+        [in] LONG lCloseHint,
+        [out] DWORD *pHitResult);
+
+    HRESULT GetNaturalExtent (
+        [in] DWORD dwAspect,
+        [in] LONG lindex,
+        [in] DVTARGETDEVICE *ptd,
+        [in] HDC hicTargetDev,
+        [in] DVEXTENTINFO *pExtentInfo,
+        [out] LPSIZEL pSizel);
+}
+
+
+/*****************************************************************************
+ * IProvideClassInfo interface
+ */
+[
+    object,
+    uuid(b196b283-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IProvideClassInfo : IUnknown
+{
+    typedef IProvideClassInfo *LPPROVIDECLASSINFO;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetClassInfo")
+cpp_quote("#endif")
+
+    HRESULT GetClassInfo( [out] ITypeInfo ** ppTI );
+}
+
+
+/*****************************************************************************
+ * IProvideClassInfo2 interface
+ */
+[
+    object,
+    uuid(a6bc3ac0-dbaa-11ce-9de3-00aa004bb851),
+    pointer_default(unique)
+]
+interface IProvideClassInfo2 : IProvideClassInfo
+{
+    typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2;
+
+    typedef enum tagGUIDKIND
+    {
+        GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1
+    } GUIDKIND;
+
+    HRESULT GetGUID(
+        [in]  DWORD dwGuidKind,
+        [out] GUID *pGUID );
+}
+
+
+[
+    object,
+    uuid(a7aba9c1-8983-11cf-8f20-00805f2cd064),
+    pointer_default(unique)
+]
+interface IProvideMultipleClassInfo : IProvideClassInfo2
+{
+    cpp_quote("#define MULTICLASSINFO_GETTYPEINFO           0x00000001")
+    cpp_quote("#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002")
+    cpp_quote("#define MULTICLASSINFO_GETIIDPRIMARY         0x00000004")
+    cpp_quote("#define MULTICLASSINFO_GETIIDSOURCE          0x00000008")
+
+    cpp_quote("#define TIFLAGS_EXTENDDISPATCHONLY           0x00000001")
+
+    typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO;
+
+    HRESULT GetMultiTypeInfoCount( 
+        [out] ULONG *pcti);
+
+    HRESULT GetInfoOfIndex( 
+        [in] ULONG iti,
+        [in] DWORD dwFlags,
+        [out] ITypeInfo **pptiCoClass,
+        [out] DWORD *pdwTIFlags,
+        [out] ULONG *pcdispidReserved,
+        [out] IID *piidPrimary,
+        [out] IID *piidSource);
+}
+
+
+/*****************************************************************************
+ * IConnectionPoint interface
+ */
+interface IConnectionPointContainer; /* forward declarations */
+interface IEnumConnections;
+
+[
+    object,
+    uuid(b196b286-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IConnectionPoint : IUnknown
+{
+    typedef IConnectionPoint *PCONNECTIONPOINT, *LPCONNECTIONPOINT;
+
+    HRESULT GetConnectionInterface( [out] IID *pIID );
+    HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer **ppCPC );
+    HRESULT Advise( [in] IUnknown *pUnkSink, [out] DWORD *pdwCookie );
+    HRESULT Unadvise( [in] DWORD dwCookie );
+    HRESULT EnumConnections( [out] IEnumConnections **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IConnectionPointContainer interface
+ */
+interface IEnumConnectionPoints; /* forward declaration */
+[
+    object,
+    uuid(b196b284-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IConnectionPointContainer : IUnknown
+{
+    typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER, *LPCONNECTIONPOINTCONTAINER;
+
+    HRESULT EnumConnectionPoints( [out] IEnumConnectionPoints **ppEnum );
+    HRESULT FindConnectionPoint( [in] REFIID riid, [out] IConnectionPoint **ppCP );
+}
+
+
+/*****************************************************************************
+ * IEnumConnections interface
+ */
+[
+    object,
+    uuid(b196b287-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IEnumConnections : IUnknown
+{
+    typedef IEnumConnections *PENUMCONNECTIONS, *LPENUMCONNECTIONS;
+
+    typedef struct tagCONNECTDATA
+    {
+        IUnknown *pUnk;
+        DWORD dwCookie;
+    } CONNECTDATA, *PCONNECTDATA, *LPCONNECTDATA;
+
+    [local]
+    HRESULT Next(
+        [in] ULONG cConnections,
+        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,
+        [out] ULONG *pcFetched);
+
+    [call_as(Next)]
+    HRESULT RemoteNext(
+        [in] ULONG cConnections,
+        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,
+        [out] ULONG *pcFetched);
+
+    HRESULT Skip( [in] ULONG cConnections );
+
+    HRESULT Reset();
+
+    HRESULT Clone( [out] IEnumConnections **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IEnumConnectionPoints interface
+ */
+[
+    object,
+    uuid(b196b285-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IEnumConnectionPoints : IUnknown
+{
+    typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS, *LPENUMCONNECTIONPOINTS;
+
+    [local]
+    HRESULT Next(
+        [in] ULONG cConnections,
+        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,
+        [out] ULONG *pcFetched);
+
+    [call_as(Next)]
+    HRESULT RemoteNext(
+        [in] ULONG cConnections,
+        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,
+        [out] ULONG *pcFetched);
+
+    HRESULT Skip( [in] ULONG cConnections );
+
+    HRESULT Reset();
+
+    HRESULT Clone( [out] IEnumConnectionPoints **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IPropertyPage interface
+ */
+interface IPropertyPageSite;  /* forward declaration */
+[
+    object,
+    uuid(b196b28d-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IPropertyPage : IUnknown
+{
+    typedef IPropertyPage *LPPROPERTYPAGE;
+
+    typedef struct tagPROPPAGEINFO
+    {
+        ULONG cb;
+        LPOLESTR pszTitle;
+        SIZE size;
+        LPOLESTR pszDocString;
+        LPOLESTR pszHelpFile;
+        DWORD dwHelpContext;
+    } PROPPAGEINFO, *LPPROPPAGEINFO;
+
+    HRESULT SetPageSite( [in] IPropertyPageSite *pPageSite );
+
+    HRESULT Activate(
+        [in] HWND hWndParent,
+        [in] LPCRECT pRect,
+        [in] BOOL bModal);
+
+    HRESULT Deactivate();
+
+    HRESULT GetPageInfo( [out] PROPPAGEINFO *pPageInfo );
+
+    HRESULT SetObjects(
+        [in] ULONG cObjects,
+        [in, size_is(cObjects)] IUnknown **ppUnk);
+
+    HRESULT Show( [in] UINT nCmdShow );
+
+    HRESULT Move( [in] LPCRECT pRect );
+
+    HRESULT IsPageDirty();
+
+    HRESULT Apply();
+
+    HRESULT Help( [in] LPCOLESTR pszHelpDir );
+
+    HRESULT TranslateAccelerator( [in] MSG *pMsg );
+}
+
+
+/*****************************************************************************
+ * IPropertyPage2 interface
+ */
+[
+    object,
+    uuid(01e44665-24ac-101b-84ed-08002b2ec713),
+    pointer_default(unique)
+]
+interface IPropertyPage2 : IPropertyPage
+{
+    typedef IPropertyPage2 *LPPROPERTYPAGE2;
+
+    HRESULT EditProperty( [in] DISPID dispID );
+}
+
+
+/*****************************************************************************
+ * IPropertyPageSite interface
+ */
+[
+    object,
+    uuid(b196b28c-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface IPropertyPageSite : IUnknown
+{
+    typedef IPropertyPageSite *LPPROPERTYPAGESITE;
+
+    typedef enum tagPROPPAGESTATUS
+    {
+        PROPPAGESTATUS_DIRTY = 0x1,
+        PROPPAGESTATUS_VALIDATE = 0x2,
+        PROPPAGESTATUS_CLEAN = 0x4
+    } PROPPAGESTATUS;
+
+    HRESULT OnStatusChange( [in] DWORD dwFlags );
+    HRESULT GetLocaleID( [out] LCID *pLocaleID );
+    HRESULT GetPageContainer( [out] IUnknown **ppUnk );
+    HRESULT TranslateAccelerator( [in] MSG *pMsg );
+}
+
+
+/*****************************************************************************
+ * IPropertyNotifySink interface
+ */
+[
+    object,
+    uuid(9bfbbc02-eff1-101a-84ed-00aa00341d07),
+    pointer_default(unique)
+]
+interface IPropertyNotifySink : IUnknown
+{
+    typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK;
+
+    HRESULT OnChanged( [in] DISPID dispID );
+    HRESULT OnRequestEdit( [in] DISPID dispID );
+}
+
+
+/*****************************************************************************
+ * ISimpleFrameSite interface
+ */
+[
+    object,
+    uuid(742b0e01-14e6-101b-914e-00aa00300cab),
+    pointer_default(unique)
+]
+interface ISimpleFrameSite : IUnknown
+{
+    typedef ISimpleFrameSite *LPSIMPLEFRAMESITE;
+
+    HRESULT PreMessageFilter(
+        [in] HWND hWnd,
+        [in] UINT msg,
+        [in] WPARAM wp,
+        [in] LPARAM lp,
+        [out] LRESULT *plResult,
+        [out] DWORD *pdwCookie);
+
+    HRESULT PostMessageFilter(
+        [in] HWND hWnd,
+        [in] UINT msg,
+        [in] WPARAM wp,
+        [in] LPARAM lp,
+        [out] LRESULT *plResult,
+        [in] DWORD dwCookie);
+}
+
+
+/*****************************************************************************
+ * IPersistStreamInit interface
+ */
+[
+    object,
+    uuid(7fd52380-4e07-101b-ae2d-08002b2ec713),
+    pointer_default(unique)
+]
+interface IPersistStreamInit : IPersist
+{
+    typedef IPersistStreamInit *LPPERSISTSTREAMINIT;
+
+    HRESULT IsDirty();
+    HRESULT Load( [in] LPSTREAM pStm );
+    HRESULT Save( [in] LPSTREAM pStm, [in] BOOL fClearDirty );
+    HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize );
+    HRESULT InitNew();
+}
+
+
+/*****************************************************************************
+ * IPersistMemory interface
+ */
+[
+    object,
+    uuid(bd1ae5e0-a6ae-11ce-bd37-504200c10000),
+    pointer_default(unique)
+]
+interface IPersistMemory : IPersist
+{
+    typedef IPersistMemory *LPPERSISTMEMORY;
+
+    HRESULT IsDirty();
+
+    [local]
+    HRESULT Load(
+        [in, size_is(cbSize)] LPVOID pMem,
+        [in] ULONG cbSize);
+
+    [call_as(Load)]
+    HRESULT RemoteLoad(
+        [in, size_is(cbSize)] BYTE *pMem,
+        [in] ULONG cbSize);
+
+    [local]
+    HRESULT Save(
+        [out, size_is(cbSize)] LPVOID pMem,
+        [in] BOOL fClearDirty,
+        [in] ULONG cbSize);
+
+    [call_as(Save)]
+    HRESULT RemoteSave(
+        [out, size_is(cbSize)] BYTE *pMem,
+        [in] BOOL fClearDirty,
+        [in] ULONG cbSize);
+
+    HRESULT GetSizeMax( [out] ULONG *pCbSize );
+    HRESULT InitNew();
+}
+
+
+/*****************************************************************************
+ * IPersistPropertyBag interface
+ */
+[
+    object,
+    uuid(37d84f60-42cb-11ce-8135-00aa004bb851),
+    pointer_default(unique)
+]
+interface IPersistPropertyBag : IPersist
+{
+    typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG;
+
+    HRESULT InitNew();
+
+    HRESULT Load(
+        [in] IPropertyBag *pPropBag,
+        [in] IErrorLog *pErrorLog);
+
+    HRESULT Save(
+        [in] IPropertyBag *pPropBag,
+        [in] BOOL fClearDirty,
+        [in] BOOL fSaveAllProperties);
+}
+
+
+/*****************************************************************************
+ * IPropertyBag2 interface
+ */
+[
+    object,
+    uuid(22f55882-280b-11d0-a8a9-00a0c90c2004),
+    pointer_default(unique)
+]
+interface IPropertyBag2 : IUnknown
+{
+    typedef IPropertyBag2 *LPPROPERTYBAG2;
+
+    typedef enum tagPROPBAG2_TYPE
+    {
+        PROPBAG2_TYPE_UNDEFINED = 0,
+        PROPBAG2_TYPE_DATA = 1,
+        PROPBAG2_TYPE_URL = 2,
+        PROPBAG2_TYPE_OBJECT = 3,
+        PROPBAG2_TYPE_STREAM = 4,
+        PROPBAG2_TYPE_STORAGE = 5,
+        PROPBAG2_TYPE_MONIKER = 6
+    } PROPBAG2_TYPE;
+
+    typedef struct tagPROPBAG2
+    {
+        DWORD dwType;
+        VARTYPE vt;
+        CLIPFORMAT cfType;
+        DWORD dwHint;
+        LPOLESTR pstrName;
+        CLSID clsid;
+    } PROPBAG2;
+
+    HRESULT Read(
+        [in] ULONG cProperties,
+        [in] PROPBAG2 *pPropBag,
+        [in] IErrorLog *pErrLog,
+        [out] VARIANT *pvarValue,
+        [out] HRESULT *phrError);
+
+    HRESULT Write(
+        [in] ULONG cProperties,
+        [in] PROPBAG2 *pPropBag,
+        [in] VARIANT *pvarValue);
+
+    HRESULT CountProperties(
+        [out] ULONG *pcProperties );
+
+    HRESULT GetPropertyInfo(
+        [in] ULONG iProperty,
+        [in] ULONG cProperties,
+        [out] PROPBAG2 *pPropBag,
+        [out] ULONG *pcProperties);
+
+    HRESULT LoadObject(
+        [in] LPCOLESTR pstrName,
+        [in] DWORD dwHint,
+        [in] IUnknown *pUnkObject,
+        [in] IErrorLog *pErrLog);
+}
+
+
+/*****************************************************************************
+ * IPersistPropertyBag2 interface
+ */
+[
+    object,
+    uuid(22f55881-280b-11d0-a8a9-00a0c90c2004),
+    pointer_default(unique)
+]
+interface IPersistPropertyBag2 : IPersist
+{
+    typedef IPersistPropertyBag2 *LPPERSISTPROPERTYBAG2;
+
+    HRESULT InitNew();
+
+    HRESULT Load(
+        [in] IPropertyBag2 *pPropBag,
+        [in] IErrorLog *pErrorLog);
+
+    HRESULT Save(
+        [in] IPropertyBag2 *pPropBag,
+        [in] BOOL fClearDirty,
+        [in] BOOL fSaveAllProperties);
+
+    HRESULT IsDirty();
+}
+
+
+/*****************************************************************************
+ * ISpecifyPropertyPages interface
+ */
+[
+    object,
+    uuid(b196b28b-bab4-101a-b69c-00aa00341d07),
+    pointer_default(unique)
+]
+interface ISpecifyPropertyPages : IUnknown
+{
+    typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES;
+
+    typedef struct tagCAUUID
+    {
+	ULONG cElems;
+        [size_is(cElems)] GUID *pElems;
+    } CAUUID, *LPCAUUID;
+
+    HRESULT GetPages( [out] CAUUID *pPages );
+}
+
+
+/*****************************************************************************
+ * IPerPropertyBrowsing interface
+ */
+[
+    object,
+    uuid(376bd3aa-3845-101b-84ed-08002b2ec713),
+    pointer_default(unique)
+]
+interface IPerPropertyBrowsing : IUnknown
+{
+    typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING;
+
+    typedef struct tagCALPOLESTR
+    {
+        ULONG cElems;
+        [size_is(cElems)] LPOLESTR *pElems;
+    } CALPOLESTR, *LPCALPOLESTR;
+
+    typedef struct tagCADWORD
+    {
+        ULONG cElems;
+        [size_is(cElems)] DWORD *pElems;
+    } CADWORD, *LPCADWORD;
+
+    HRESULT GetDisplayString(
+        [in] DISPID dispID,
+        [out] BSTR *pBstr);
+
+    HRESULT MapPropertyToPage(
+        [in] DISPID dispID,
+        [out] CLSID *pClsid);
+
+    HRESULT GetPredefinedStrings(
+        [in] DISPID dispID,
+        [out] CALPOLESTR *pCaStringsOut,
+        [out] CADWORD *pCaCookiesOut);
+
+    HRESULT GetPredefinedValue(
+        [in] DISPID dispID,
+        [in] DWORD dwCookie,
+        [out] VARIANT *pVarOut);
+}
+
+
+/*****************************************************************************
+ * IAdviseSinkEx interface
+ */
+[
+    object,
+    uuid(3af24290-0c96-11ce-a0cf-00aa00600ab8),
+    pointer_default(unique)
+]
+interface IAdviseSinkEx : IAdviseSink
+{
+    typedef IAdviseSinkEx *LPADVISESINKEX;
+
+    [local]
+    void OnViewStatusChange( [in] DWORD dwViewStatus );
+
+    [call_as(OnViewStatusChange)]
+    HRESULT RemoteOnViewStatusChange( [in] DWORD dwViewStatus );
+}
+
+
+/*****************************************************************************
+ * IPointerInactive interface
+ */
+[
+    object,
+    uuid(55980ba0-35aa-11cf-b671-00aa004cd6d8),
+    pointer_default(unique)
+]
+interface IPointerInactive : IUnknown
+{
+    typedef IPointerInactive *LPPOINTERINACTIVE;
+
+    HRESULT GetActivationPolicy(
+        [out] DWORD *pdwPolicy);
+
+    HRESULT OnInactiveMouseMove(
+        [in] LPCRECT pRectBounds,
+        [in] LONG x,
+        [in] LONG y,
+        [in] DWORD grfKeyState);
+
+    HRESULT OnInactiveSetCursor(
+        [in] LPCRECT pRectBounds,
+        [in] LONG x,
+        [in] LONG y,
+        [in] DWORD dwMouseMsg,
+        [in] BOOL fSetAlways);
+}
+
+
+/*****************************************************************************
+ * IObjectWithSite interface
+ */
+[
+    object,
+    uuid(fc4801a3-2ba9-11cf-a229-00aa003d7352),
+    pointer_default(unique)
+]
+interface IObjectWithSite : IUnknown
+{
+    typedef IObjectWithSite *LPOBJECTWITHSITE;
+
+    HRESULT SetSite(
+        [in] IUnknown * pUnkSite);
+
+    HRESULT GetSite(
+        [in] REFIID riid, 
+        [out, iid_is(riid)] PVOID *ppvSite);
+}
+
+
+/*****************************************************************************
+ * IOleUndoUnit interface
+ */
+interface IOleUndoManager;  /* forward declaration */
+[
+    object,
+    uuid(894ad3b0-ef97-11ce-9bc9-00aa00608e01),
+    pointer_default(unique)
+]
+interface IOleUndoUnit : IUnknown
+{
+    typedef IOleUndoUnit *LPOLEUNDOUNIT;
+
+    HRESULT Do( [in] IOleUndoManager *pUndoManager );
+    HRESULT GetDescription( [out] BSTR *pBstr );
+    HRESULT GetUnitType( [out] CLSID *pClsid, [out] LONG *plID );
+    HRESULT OnNextAdd();
+}
+
+
+/*****************************************************************************
+ * IOleParentUndoUnit interface
+ */
+[
+    object,
+    uuid(a1faf330-ef97-11ce-9bc9-00aa00608e01),
+    pointer_default(unique)
+]
+interface IOleParentUndoUnit : IOleUndoUnit
+{
+    typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT;
+
+    HRESULT Open( [in] IOleParentUndoUnit *pPUU );
+    HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );
+    HRESULT Add( [in] IOleUndoUnit *pUU );
+    HRESULT FindUnit( [in] IOleUndoUnit *pUU );
+    HRESULT GetParentState( [out] DWORD *pdwState );
+}
+
+
+/*****************************************************************************
+ * IEnumOleUndoUnits interface
+ */
+[
+    object,
+    uuid(b3e7c340-ef97-11ce-9bc9-00aa00608e01),
+    pointer_default(unique)
+]
+interface IEnumOleUndoUnits : IUnknown
+{
+    typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS;
+
+    [local]
+    HRESULT Next(
+        [in] ULONG cElt,
+        [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,
+        [out] ULONG *pcEltFetched);
+
+    [call_as(Next)]
+    HRESULT RemoteNext(
+        [in] ULONG cElt,
+        [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,
+        [out] ULONG *pcEltFetched);
+
+    HRESULT Skip( [in] ULONG cElt );
+
+    HRESULT Reset();
+
+    HRESULT Clone( [out] IEnumOleUndoUnits **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IOleUndoManager interface
+ */
+[
+    object,
+    uuid(d001f200-ef97-11ce-9bc9-00aa00608e01),
+    pointer_default(unique)
+]
+interface IOleUndoManager : IUnknown
+{
+cpp_quote("#define SID_SOleUndoManager IID_IOleUndoManager")
+    typedef IOleUndoManager *LPOLEUNDOMANAGER;
+
+    HRESULT Open( [in] IOleParentUndoUnit *pPUU );
+    HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );
+    HRESULT Add( [in] IOleUndoUnit *pUU );
+    HRESULT GetOpenParentState( [out] DWORD *pdwState );
+    HRESULT DiscardFrom( [in] IOleUndoUnit *pUU );
+    HRESULT UndoTo( [in] IOleUndoUnit *pUU );
+    HRESULT RedoTo( [in] IOleUndoUnit *pUU );
+    HRESULT EnumUndoable( [out] IEnumOleUndoUnits **ppEnum );
+    HRESULT EnumRedoable( [out] IEnumOleUndoUnits **ppEnum );
+    HRESULT GetLastUndoDescription( [out] BSTR *pBstr );
+    HRESULT GetLastRedoDescription( [out] BSTR *pBstr );
+    HRESULT Enable( [in] BOOL fEnable );
+}
+
+
+/*****************************************************************************
+ * IQuickActivate interface
+ */
+[
+    object,
+    uuid(cf51ed10-62fe-11cf-bf86-00a0c9034836),
+    pointer_default(unique)
+]
+interface IQuickActivate : IUnknown
+{
+    typedef IQuickActivate *LPQUICKACTIVATE;
+
+    typedef enum tagQACONTAINERFLAGS
+    {
+        QACONTAINER_SHOWHATCHING = 0x1,
+        QACONTAINER_SHOWGRABHANDLES = 0x2,
+        QACONTAINER_USERMODE = 0x4,
+        QACONTAINER_DISPLAYASDEFAULT = 0x8,
+        QACONTAINER_UIDEAD = 0x10,
+        QACONTAINER_AUTOCLIP = 0x20,
+        QACONTAINER_MESSAGEREFLECT = 0x40,
+        QACONTAINER_SUPPORTSMNEMONICS = 0x80
+    } QACONTAINERFLAGS;
+
+    typedef DWORD OLE_COLOR;
+    
+    typedef struct tagQACONTAINER
+    {
+        ULONG cbSize;
+        IOleClientSite *pClientSite;
+        IAdviseSinkEx *pAdviseSink;
+        IPropertyNotifySink *pPropertyNotifySink;
+        IUnknown *pUnkEventSink;
+        DWORD dwAmbientFlags;
+        OLE_COLOR colorFore;
+        OLE_COLOR colorBack;
+        IFont *pFont;
+        IOleUndoManager *pUndoMgr;
+        DWORD dwAppearance;
+        LONG lcid;
+        HPALETTE hpal;
+        IBindHost *pBindHost;
+        IOleControlSite *pOleControlSite;
+        IServiceProvider *pServiceProvider;
+    } QACONTAINER;
+
+    typedef struct tagQACONTROL
+    {
+        ULONG cbSize;
+        DWORD dwMiscStatus;
+        DWORD dwViewStatus;
+        DWORD dwEventCookie;
+        DWORD dwPropNotifyCookie;
+        DWORD dwPointerActivationPolicy;
+    } QACONTROL;
+
+    [local]
+    HRESULT QuickActivate(
+        [in] QACONTAINER *pQaContainer,
+        [in,out] QACONTROL *pQaControl);
+
+    [call_as(QuickActivate)]
+    HRESULT RemoteQuickActivate(
+        [in] QACONTAINER *pQaContainer,
+        [out] QACONTROL *pQaControl);
+
+    HRESULT SetContentExtent( [in] LPSIZEL pSizel );
+
+    HRESULT GetContentExtent( [out] LPSIZEL pSizel );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl
new file mode 100644
index 0000000..d84810b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2006 Matthew Kehrer
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "oleidl.idl";
+
+cpp_quote("EXTERN_C const GUID NAMEDTIMER_DRAW;")
+
+[
+    object,
+    uuid(3050F361-98B5-11CF-BB82-00AA00BDCE0B),
+    pointer_default(unique)
+]
+interface ITimerSink : IUnknown
+{
+    HRESULT OnTimer([in] VARIANT vtimeAdvise);
+}
+
+
+[
+    object,
+    uuid(3050F360-98B5-11CF-BB82-00AA00BDCE0B),
+    pointer_default(unique)
+]
+interface ITimer : IUnknown
+{
+    HRESULT Advise([in] VARIANT vtimeMin,
+                   [in] VARIANT vtimeMax,
+                   [in] VARIANT vtimeInterval,
+                   [in] DWORD dwFlags,
+                   [in] ITimerSink *pTimerSink,
+                   [out] DWORD *pdwCookie);
+
+    HRESULT Unadvise([in] DWORD dwCookie);
+
+    HRESULT Freeze([in] BOOL fFreeze);
+
+    HRESULT GetTime([out] VARIANT *pvtime);
+}
+
+
+[
+    object,
+    uuid(3050F35F-98B5-11CF-BB82-00AA00BDCE0B),
+    pointer_default(unique)
+]
+interface ITimerService : IUnknown
+{
+    HRESULT CreateTimer([in] ITimer *pReferenceTimer,
+                        [out] ITimer **ppNewTimer);
+
+    HRESULT GetNamedTimer([in] REFGUID rguidName,
+                          [out] ITimer **ppTimer);
+
+    HRESULT SetNamedTimerReference([in] REFGUID rguidName,
+                                   [in] ITimer *pReferenceTimer);
+}
+
+cpp_quote("#define SID_STimerService IID_ITimerService")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h
new file mode 100644
index 0000000..543e89a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ODBCINST_H
+#define __WINE_ODBCINST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sql.h>
+
+/* flags for Installer function requests */
+#define ODBC_INSTALL_INQUIRY 	1
+#define ODBC_INSTALL_COMPLETE	2
+
+#define ODBC_INSTALL_DRIVER	1
+#define ODBC_REMOVE_DRIVER	2
+#define ODBC_CONFIG_DRIVER	3
+#define ODBC_CONFIG_DRIVER_MAX  100
+
+#define ODBC_ADD_DSN            1
+#define ODBC_CONFIG_DSN         2
+#define ODBC_REMOVE_DSN         3
+#define ODBC_ADD_SYS_DSN        4
+#define ODBC_CONFIG_SYS_DSN     5
+#define ODBC_REMOVE_SYS_DSN     6
+#define ODBC_REMOVE_DEFAULT_DSN 7
+
+/* Mode values for SQLSetConfigMode/SQLGetConfigMode */
+#define ODBC_BOTH_DSN 0
+#define ODBC_USER_DSN 1
+#define ODBC_SYSTEM_DSN 2
+
+/* error values */
+#define ODBC_ERROR_GENERAL_ERR			1
+#define ODBC_ERROR_INVALID_BUFF_LEN		2
+#define ODBC_ERROR_INVALID_HWND			3
+#define ODBC_ERROR_INVALID_STR			4
+#define ODBC_ERROR_INVALID_REQUEST_TYPE		5
+#define ODBC_ERROR_COMPONENT_NOT_FOUND		6
+#define ODBC_ERROR_INVALID_NAME			7
+#define ODBC_ERROR_INVALID_KEYWORD_VALUE	8
+#define ODBC_ERROR_INVALID_DSN			9
+#define ODBC_ERROR_INVALID_INF			10
+#define ODBC_ERROR_REQUEST_FAILED		11
+#define ODBC_ERROR_INVALID_PATH			12
+#define ODBC_ERROR_LOAD_LIB_FAILED		13
+#define ODBC_ERROR_INVALID_PARAM_SEQUENCE	14
+#define ODBC_ERROR_INVALID_LOG_FILE		15
+#define ODBC_ERROR_USER_CANCELED		16
+#define ODBC_ERROR_USAGE_UPDATE_FAILED		17
+#define ODBC_ERROR_CREATE_DSN_FAILED		18
+#define ODBC_ERROR_WRITING_SYSINFO_FAILED	19
+#define ODBC_ERROR_REMOVE_DSN_FAILED		20
+#define ODBC_ERROR_OUT_OF_MEM			21
+#define ODBC_ERROR_OUTPUT_STRING_TRUNCATED	22
+
+
+BOOL WINAPI ODBCCPlApplet(LONG,LONG,LONG*,LONG*);
+BOOL WINAPI SQLConfigDataSource(HWND,WORD,LPCSTR,LPCSTR);
+BOOL WINAPI SQLConfigDataSourceW(HWND,WORD,LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLCreateDataSource(HWND,LPCSTR);
+BOOL WINAPI SQLCreateDataSourceW(HWND,LPCWSTR);
+BOOL WINAPI SQLGetAvailableDrivers(LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLGetAvailableDriversW(LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLGetConfigMode(UWORD*);
+BOOL WINAPI SQLGetInstalledDrivers(LPSTR,WORD,WORD*);
+BOOL WINAPI SQLGetInstalledDriversW(LPWSTR,WORD,WORD*);
+int WINAPI SQLGetPrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR,int,LPCSTR);
+int WINAPI SQLGetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,int,LPCWSTR);
+BOOL WINAPI SQLGetTranslator(HWND,LPSTR,WORD,WORD*,LPSTR,WORD,WORD*,DWORD*);
+BOOL WINAPI SQLGetTranslatorW(HWND,LPWSTR,WORD,WORD*,LPWSTR,WORD,WORD*,DWORD*);
+BOOL WINAPI SQLInstallDriver(LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallDriverW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallDriverEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallDriverExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallDriverManager(LPSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallDriverManagerW(LPWSTR,WORD,WORD*);
+SQLRETURN WINAPI SQLInstallerError(WORD,DWORD*,LPSTR,WORD,WORD*);
+SQLRETURN WINAPI SQLInstallerErrorW(WORD,DWORD*,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallODBC(HWND,LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI SQLInstallODBCW(HWND,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLInstallTranslatorEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallTranslatorExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallTranslator(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallTranslatorW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLManageDataSources(HWND hwnd);
+SQLRETURN WINAPI SQLPostInstallerError(DWORD,LPCSTR);
+SQLRETURN WINAPI SQLPostInstallerErrorW(DWORD,LPCWSTR);
+BOOL WINAPI SQLReadFileDSN(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLReadFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLRemoveDefaultDataSource(void);
+BOOL WINAPI SQLRemoveDriver(LPCSTR,BOOL,LPDWORD);
+BOOL WINAPI SQLRemoveDriverW(LPCWSTR,BOOL,LPDWORD);
+BOOL WINAPI SQLRemoveDriverManager(LPDWORD);
+BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR);
+BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR);
+BOOL WINAPI SQLRemoveTranslator(LPCSTR,LPDWORD);
+BOOL WINAPI SQLRemoveTranslatorW(LPCWSTR,LPDWORD);
+BOOL WINAPI SQLSetConfigMode(UWORD);
+BOOL WINAPI SQLValidDSN(LPCSTR);
+BOOL WINAPI SQLValidDSNW(LPCWSTR);
+BOOL WINAPI SQLWriteDSNToIni(LPCSTR,LPCSTR);
+BOOL WINAPI SQLWriteDSNToIniW(LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLWriteFileDSN(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI SQLWriteFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLWritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WINE_ODBCINST_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h
new file mode 100644
index 0000000..8516f62
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h
@@ -0,0 +1,179 @@
+/*
+ * Declarations for OLE2
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLE2_H
+#define __WINE_OLE2_H
+
+#include <winerror.h>
+#include <objbase.h>
+#include <oleauto.h>
+#include <oleidl.h>
+
+struct tagMSG;
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define E_DRAW                  VIEW_E_DRAW
+#define DATA_E_FORMATETC        DV_E_FORMATETC
+
+#define OLEIVERB_PRIMARY            (__MSABI_LONG(0))
+#define OLEIVERB_SHOW               (__MSABI_LONG(-1))
+#define OLEIVERB_OPEN               (__MSABI_LONG(-2))
+#define OLEIVERB_HIDE               (__MSABI_LONG(-3))
+#define OLEIVERB_UIACTIVATE         (__MSABI_LONG(-4))
+#define OLEIVERB_INPLACEACTIVATE    (__MSABI_LONG(-5))
+#define OLEIVERB_DISCARDUNDOSTATE   (__MSABI_LONG(-6))
+#define OLEIVERB_PROPERTIES         (__MSABI_LONG(-7))
+
+#define EMBDHLP_INPROC_HANDLER  0x00000000
+#define EMBDHLP_INPROC_SERVER   0x00000001
+#define EMBDHLP_CREATENOW       0x00000000
+#define EMBDHLP_DELAYCREATE     0x00010000
+
+/*
+ * API declarations
+ */
+HRESULT     WINAPI RegisterDragDrop(HWND,LPDROPTARGET);
+HRESULT     WINAPI RevokeDragDrop(HWND);
+HRESULT     WINAPI DoDragDrop(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
+HRESULT  WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvObj);
+HRESULT  WINAPI OleSaveToStream(IPersistStream *pPStm,IStream *pStm);
+HOLEMENU WINAPI OleCreateMenuDescriptor(HMENU hmenuCombined,LPOLEMENUGROUPWIDTHS lpMenuWidths);
+HRESULT   WINAPI OleDestroyMenuDescriptor(HOLEMENU hmenuDescriptor);
+HRESULT  WINAPI OleSetMenuDescriptor(HOLEMENU hmenuDescriptor,HWND hwndFrame,HWND hwndActiveObject,LPOLEINPLACEFRAME lpFrame,LPOLEINPLACEACTIVEOBJECT lpActiveObject);
+
+HRESULT WINAPI WriteClassStg(IStorage *pstg, REFCLSID rclsid);
+HRESULT WINAPI ReadClassStg(IStorage *pstg,CLSID *pclsid);
+HRESULT WINAPI WriteClassStm(IStream *pStm,REFCLSID rclsid);
+HRESULT WINAPI ReadClassStm(IStream *pStm,CLSID *pclsid);
+
+
+HRESULT     WINAPI OleSave(LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad);
+HRESULT     WINAPI OleRegGetUserType(REFCLSID clsid,
+				     DWORD dwFormOfType,
+				     LPOLESTR* pszUserType);
+HRESULT     WINAPI OleRegGetMiscStatus (REFCLSID clsid, DWORD dwAspect, DWORD* pdwStatus);
+HRESULT     WINAPI OleRegEnumFormatEtc (REFCLSID clsid,
+					DWORD    dwDirection,
+					LPENUMFORMATETC* ppenumFormatetc);
+HRESULT     WINAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM* ppstm);
+HRESULT     WINAPI GetHGlobalFromStream(LPSTREAM pstm, HGLOBAL* phglobal);
+HRESULT     WINAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB* ppenum);
+BOOL        WINAPI OleIsRunning(LPOLEOBJECT pObject);
+HRESULT     WINAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,
+                DWORD renderopt, LPFORMATETC pFormatEtc,
+                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
+                LPVOID* ppvObj);
+HRESULT     WINAPI OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained);
+HRESULT     WINAPI OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible);
+HRESULT     WINAPI OleQueryLinkFromData(IDataObject* pSrcDataObject);
+HRESULT     WINAPI OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject);
+HRESULT     WINAPI OleRun(LPUNKNOWN pUnknown);
+HRESULT     WINAPI OleDraw(LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw, LPCRECT lprcBounds);
+VOID        WINAPI ReleaseStgMedium(LPSTGMEDIUM);
+HRESULT     WINAPI OleGetClipboard(IDataObject** ppDataObj);
+HRESULT     WINAPI OleIsCurrentClipboard(LPDATAOBJECT);
+HRESULT     WINAPI OleSetClipboard(LPDATAOBJECT);
+HRESULT     WINAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid,
+                DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
+                LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT     WINAPI ReadFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT* pcf, LPOLESTR* lplpszUserType);
+HRESULT     WINAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID* ppvObj);
+HRESULT     WINAPI GetHGlobalFromILockBytes(LPLOCKBYTES plkbyt, HGLOBAL* phglobal);
+HRESULT     WINAPI CreateILockBytesOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPLOCKBYTES* pplkbyt);
+HRESULT     WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);
+HGLOBAL     WINAPI OleGetIconOfClass(REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseTypeAsLabel);
+HGLOBAL     WINAPI OleGetIconOfFile(LPOLESTR lpszPath, BOOL fUseFileAsLabel);
+HGLOBAL     WINAPI OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, LPOLESTR lpszSourceFile, UINT iIconIndex);
+HRESULT     WINAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses);
+HRESULT     WINAPI OleCreateFromFile(REFCLSID rclsid, LPCOLESTR lpszFileName, REFIID riid,
+                DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT     WINAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,
+                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT     WINAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
+                LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT     WINAPI OleFlushClipboard(void);
+HRESULT     WINAPI GetConvertStg(LPSTORAGE pStg);
+HRESULT     WINAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert);
+BOOL        WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, struct tagMSG* lpMsg, WORD* lpwCmd);
+HRESULT     WINAPI OleCreateLinkToFile(LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,
+                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HANDLE      WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags);
+HRESULT     WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType);
+HRESULT     WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo, struct tagMSG* lpmsg);
+HRESULT     WINAPI OleCreateFromData(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc,
+                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT     WINAPI OleCreateFromDataEx(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD dwFlags, DWORD renderopt, ULONG num_formats,
+                                       DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink, DWORD *conns,
+                                       LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT     WINAPI OleCreateDefaultHandler(REFCLSID  clsid,
+					   LPUNKNOWN pUnkOuter,
+					   REFIID    riid,
+					   LPVOID*   ppvObj);
+HRESULT     WINAPI OleCreateEmbeddingHelper(REFCLSID  clsid,
+					   LPUNKNOWN pUnkOuter,
+					   DWORD     flags,
+					   IClassFactory *pCF,
+					   REFIID    riid,
+					   LPVOID*   ppvObj);
+HRESULT     WINAPI CreateOleAdviseHolder (LPOLEADVISEHOLDER *ppOAHolder);
+HRESULT     WINAPI OleInitialize(LPVOID pvReserved);
+void        WINAPI OleUninitialize(void);
+BOOL        WINAPI IsValidInterface(LPUNKNOWN punk);
+DWORD       WINAPI OleBuildVersion(VOID);
+
+/*
+ *  OLE version conversion declarations
+ */
+
+
+typedef struct _OLESTREAM* LPOLESTREAM;
+typedef struct _OLESTREAMVTBL {
+	DWORD	(CALLBACK *Get)(LPOLESTREAM,LPSTR,DWORD);
+	DWORD	(CALLBACK *Put)(LPOLESTREAM,LPSTR,DWORD);
+} OLESTREAMVTBL;
+typedef OLESTREAMVTBL*	LPOLESTREAMVTBL;
+typedef struct _OLESTREAM {
+	LPOLESTREAMVTBL	lpstbl;
+} OLESTREAM;
+
+HRESULT     WINAPI OleConvertOLESTREAMToIStorage( LPOLESTREAM lpolestream, LPSTORAGE pstg, const DVTARGETDEVICE* ptd);
+HRESULT     WINAPI OleConvertIStorageToOLESTREAM( LPSTORAGE pstg, LPOLESTREAM lpolestream);
+
+HRESULT     WINAPI OleDoAutoConvert( LPSTORAGE pStg, LPCLSID pClsidNew );
+HRESULT     WINAPI OleGetAutoConvert( REFCLSID clsidOld, LPCLSID pClsidNew );
+HRESULT     WINAPI OleSetAutoConvert( REFCLSID clsidOld, REFCLSID clsidNew );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_OLE2_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h
new file mode 100644
index 0000000..2a54282
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h
@@ -0,0 +1,53 @@
+/*
+ * Version number info
+ *
+ * Copyright (C) 1999 Paul Quinn
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLE2VER_H
+#define __WINE_OLE2VER_H
+
+/*
+ * other versions rmm/rup:
+ * 23/639
+ * 23/700
+ * 23/730
+ * 23/824
+ *
+ * Win98 SE original files:
+ * COMPOBJ: CoBuildVersion 23/700
+ * OLE2: OleBuildVersion -> COMPOBJ.CoBuildVersion
+ * OLE32: CoBuildVersion and Ole~ 23/824
+ *
+ * We probably should reorganize the OLE version stuff, i.e.
+ * use different values for every *BuildVersion function and Win version.
+ */
+
+/* bad: we shouldn't make use of it that globally ! */
+#define rmm             23
+#define rup		824
+
+#endif  /* __WINE_OLE2VER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl
new file mode 100644
index 0000000..e87c14f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2005 Dmitry Timoshkov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+cpp_quote("#define NAVDIR_UP         1")
+cpp_quote("#define NAVDIR_DOWN       2")
+cpp_quote("#define NAVDIR_LEFT       3")
+cpp_quote("#define NAVDIR_RIGHT      4")
+cpp_quote("#define NAVDIR_NEXT       5")
+cpp_quote("#define NAVDIR_PREVIOUS   6")
+cpp_quote("#define NAVDIR_FIRSTCHILD 7")
+cpp_quote("#define NAVDIR_LASTCHILD  8")
+
+cpp_quote("#define ROLE_SYSTEM_TITLEBAR     1")
+cpp_quote("#define ROLE_SYSTEM_MENUBAR      2")
+cpp_quote("#define ROLE_SYSTEM_SCROLLBAR    3")
+cpp_quote("#define ROLE_SYSTEM_GRIP         4")
+cpp_quote("#define ROLE_SYSTEM_SOUND        5")
+cpp_quote("#define ROLE_SYSTEM_CURSOR       6")
+cpp_quote("#define ROLE_SYSTEM_CARET        7")
+cpp_quote("#define ROLE_SYSTEM_ALERT        8")
+cpp_quote("#define ROLE_SYSTEM_WINDOW       9")
+cpp_quote("#define ROLE_SYSTEM_CLIENT       10")
+cpp_quote("#define ROLE_SYSTEM_MENUPOPUP    11")
+cpp_quote("#define ROLE_SYSTEM_MENUITEM     12")
+cpp_quote("#define ROLE_SYSTEM_TOOLTIP      13")
+cpp_quote("#define ROLE_SYSTEM_APPLICATION  14")
+cpp_quote("#define ROLE_SYSTEM_DOCUMENT     15")
+cpp_quote("#define ROLE_SYSTEM_PANE         16")
+cpp_quote("#define ROLE_SYSTEM_CHART        17")
+cpp_quote("#define ROLE_SYSTEM_DIALOG       18")
+cpp_quote("#define ROLE_SYSTEM_BORDER       19")
+cpp_quote("#define ROLE_SYSTEM_GROUPING     20")
+cpp_quote("#define ROLE_SYSTEM_SEPARATOR    21")
+cpp_quote("#define ROLE_SYSTEM_TOOLBAR      22")
+cpp_quote("#define ROLE_SYSTEM_STATUSBAR    23")
+cpp_quote("#define ROLE_SYSTEM_TABLE        24")
+cpp_quote("#define ROLE_SYSTEM_COLUMNHEADER 25")
+cpp_quote("#define ROLE_SYSTEM_ROWHEADER    26")
+cpp_quote("#define ROLE_SYSTEM_COLUMN       27")
+cpp_quote("#define ROLE_SYSTEM_ROW          28")
+cpp_quote("#define ROLE_SYSTEM_CELL         29")
+cpp_quote("#define ROLE_SYSTEM_LINK         30")
+cpp_quote("#define ROLE_SYSTEM_HELPBALLOON  31")
+cpp_quote("#define ROLE_SYSTEM_CHARACTER    32")
+cpp_quote("#define ROLE_SYSTEM_LIST         33")
+cpp_quote("#define ROLE_SYSTEM_LISTITEM     34")
+cpp_quote("#define ROLE_SYSTEM_OUTLINE      35")
+cpp_quote("#define ROLE_SYSTEM_OUTLINEITEM  36")
+cpp_quote("#define ROLE_SYSTEM_PAGETAB      37")
+cpp_quote("#define ROLE_SYSTEM_PROPERTYPAGE 38")
+cpp_quote("#define ROLE_SYSTEM_INDICATOR    39")
+cpp_quote("#define ROLE_SYSTEM_GRAPHIC      40")
+cpp_quote("#define ROLE_SYSTEM_STATICTEXT   41")
+cpp_quote("#define ROLE_SYSTEM_TEXT         42")
+cpp_quote("#define ROLE_SYSTEM_PUSHBUTTON   43")
+cpp_quote("#define ROLE_SYSTEM_CHECKBUTTON  44")
+cpp_quote("#define ROLE_SYSTEM_RADIOBUTTON  45")
+cpp_quote("#define ROLE_SYSTEM_COMBOBOX     46")
+cpp_quote("#define ROLE_SYSTEM_DROPLIST     47")
+cpp_quote("#define ROLE_SYSTEM_PROGRESSBAR  48")
+cpp_quote("#define ROLE_SYSTEM_DIAL         49")
+cpp_quote("#define ROLE_SYSTEM_HOTKEYFIELD  50")
+cpp_quote("#define ROLE_SYSTEM_SLIDER       51")
+cpp_quote("#define ROLE_SYSTEM_SPINBUTTON   52")
+cpp_quote("#define ROLE_SYSTEM_DIAGRAM      53")
+cpp_quote("#define ROLE_SYSTEM_ANIMATION    54")
+cpp_quote("#define ROLE_SYSTEM_EQUATION     55")
+cpp_quote("#define ROLE_SYSTEM_BUTTONDROPDOWN 56")
+cpp_quote("#define ROLE_SYSTEM_BUTTONMENU   57")
+cpp_quote("#define ROLE_SYSTEM_BUTTONDROPDOWNGRID 58")
+cpp_quote("#define ROLE_SYSTEM_WHITESPACE   59")
+cpp_quote("#define ROLE_SYSTEM_PAGETABLIST  60")
+cpp_quote("#define ROLE_SYSTEM_CLOCK        61")
+cpp_quote("#define ROLE_SYSTEM_SPLITBUTTON  62")
+cpp_quote("#define ROLE_SYSTEM_IPADDRESS    63")
+cpp_quote("#define ROLE_SYSTEM_OUTLINEBUTTON 64")
+
+cpp_quote("#define SELFLAG_NONE            0x00")
+cpp_quote("#define SELFLAG_TAKEFOCUS       0x01")
+cpp_quote("#define SELFLAG_TAKESELECTION   0x02")
+cpp_quote("#define SELFLAG_EXTENDSELECTION 0x04")
+cpp_quote("#define SELFLAG_ADDSELECTION    0x08")
+cpp_quote("#define SELFLAG_REMOVESELECTION 0x10")
+cpp_quote("#define SELFLAG_VALID           0x1f")
+
+typedef GUID MSAAPROPID;
+
+typedef enum AnnoScope
+{
+    ANNO_THIS,
+    ANNO_CONTAINER
+} AnnoScope;
+
+[
+  local,
+  object,
+  uuid(618736e0-3c3d-11cf-810c-00aa00389b71),
+  pointer_default(unique)
+]
+interface IAccessible : IDispatch
+{
+    typedef [unique] IAccessible  *LPACCESSIBLE;
+    const long DISPID_ACC_PARENT     = -5000;
+    const long DISPID_ACC_CHILDCOUNT = -5001;
+    const long DISPID_ACC_CHILD      = -5002;
+    const long DISPID_ACC_NAME       = -5003;
+    const long DISPID_ACC_VALUE      = -5004;
+    const long DISPID_ACC_DESCRIPTION= -5005;
+    const long DISPID_ACC_ROLE       = -5006;
+    const long DISPID_ACC_STATE      = -5007;
+    const long DISPID_ACC_HELP       = -5008;
+    const long DISPID_ACC_HELPTOPIC  = -5009;
+    const long DISPID_ACC_KEYBOARDSHORTCUT = -5010;
+    const long DISPID_ACC_FOCUS      = -5011;
+    const long DISPID_ACC_SELECTION  = -5012;
+    const long DISPID_ACC_DEFAULTACTION = -5013;
+    const long DISPID_ACC_SELECT     = -5014;
+    const long DISPID_ACC_LOCATION   = -5015;
+    const long DISPID_ACC_NAVIGATE   = -5016;
+    const long DISPID_ACC_HITTEST    = -5017;
+    const long DISPID_ACC_DODEFAULTACTION = -5018;
+
+    [hidden, propget, id(DISPID_ACC_PARENT)] HRESULT accParent([out, retval]IDispatch** ppdispParent);
+    [hidden, propget, id(DISPID_ACC_CHILDCOUNT)] HRESULT accChildCount([out, retval] long* pcountChildren);
+    [hidden, propget, id(DISPID_ACC_CHILD)] HRESULT accChild([in] VARIANT varChildID, [out, retval]IDispatch **ppdispChild);
+    [hidden, propget, id(DISPID_ACC_NAME)] HRESULT accName([in]VARIANT varID, [out, retval] BSTR* pszName);
+    [hidden, propget, id(DISPID_ACC_VALUE)] HRESULT accValue([in]VARIANT varID, [out, retval] BSTR* pszValue);
+    [hidden, propget, id(DISPID_ACC_DESCRIPTION)] HRESULT accDescription([in]VARIANT varID, [out, retval] BSTR* pszDescription);
+    [hidden, propget, id(DISPID_ACC_ROLE)] HRESULT accRole([in]VARIANT varID, [out, retval]VARIANT* pvarRole);
+    [hidden, propget, id(DISPID_ACC_STATE)] HRESULT accState([in]VARIANT varID, [out, retval]VARIANT* pvarState);
+    [hidden, propget, id(DISPID_ACC_HELP)] HRESULT accHelp([in]VARIANT varID, [out, retval]BSTR* pszHelp);
+    [hidden, propget, id(DISPID_ACC_HELPTOPIC)] HRESULT accHelpTopic([out]BSTR* pszHelpFile, [in]VARIANT varID, [out, retval] long* pidTopic);
+    [hidden, propget, id(DISPID_ACC_KEYBOARDSHORTCUT)] HRESULT accKeyboardShortcut([in]VARIANT varID, [out, retval] BSTR* pszKeyboardShortcut);
+    [hidden, propget, id(DISPID_ACC_FOCUS)] HRESULT accFocus([out, retval] VARIANT* pvarID);
+    [hidden, propget, id(DISPID_ACC_SELECTION)] HRESULT accSelection([out, retval] VARIANT* pvarID);
+    [hidden, propget, id(DISPID_ACC_DEFAULTACTION)] HRESULT accDefaultAction([in]VARIANT varID, [out, retval] BSTR* pszDefaultAction);
+
+    [hidden, id(DISPID_ACC_SELECT)] HRESULT accSelect([in]long flagsSelect, [in]VARIANT varID);
+    [hidden, id(DISPID_ACC_LOCATION)] HRESULT accLocation([out]long* pxLeft, [out]long* pyTop, [out]long* pcxWidth, [out]long* pcyHeight, [in]VARIANT varID);
+    [hidden, id(DISPID_ACC_NAVIGATE)] HRESULT accNavigate([in]long navDir, [in]VARIANT varStart, [out, retval] VARIANT* pvarEnd);
+    [hidden, id(DISPID_ACC_HITTEST)] HRESULT accHitTest([in]long xLeft, [in]long yTop, [out,retval] VARIANT* pvarID);
+    [hidden, id(DISPID_ACC_DODEFAULTACTION)] HRESULT accDoDefaultAction([in]VARIANT varID);
+
+    [hidden, propput, id(DISPID_ACC_NAME)] HRESULT accName([in]VARIANT varID, [in]BSTR pszName);
+    [hidden, propput, id(DISPID_ACC_VALUE)] HRESULT accValue([in]VARIANT varID, [out, retval]BSTR pszValue);
+}
+
+[
+    object,
+    uuid(03022430-ABC4-11d0-BDE2-00AA001A1953),
+    hidden,
+    oleautomation,
+    pointer_default(unique)
+]
+interface IAccessibleHandler : IUnknown
+{
+    typedef [unique] IAccessibleHandler *LPACCESSIBLEHANDLER;
+
+    HRESULT AccessibleObjectFromID( [in] long hwnd, [in] long lObjectID, [out] LPACCESSIBLE *pIAccessible );
+}
+
+[
+    object,
+    uuid(7852b78d-1cfd-41c1-a615-9c0c85960b5f),
+    pointer_default(unique)
+]
+interface IAccIdentity : IUnknown
+{
+    HRESULT GetIdentityString ([in] DWORD dwIDChild, [out] BYTE **ppIDString, [out] DWORD *pdwIDStringLen);
+}
+
+[
+    object,
+    uuid(76c0dbbb-15e0-4e7b-b61b-20eeea2001e0),
+    pointer_default(unique)
+]
+interface IAccPropServer: IUnknown
+{
+    HRESULT GetPropValue ([in] const BYTE *pIDString, [in] DWORD  dwIDStringLen, [in] MSAAPROPID idProp,
+        [out] VARIANT *pvarValue, [out] BOOL *pfHasProp);
+}
+
+[
+    object,
+    uuid(6e26e776-04f0-495d-80e4-3330352e3169),
+    pointer_default(unique)
+]
+interface IAccPropServices : IUnknown
+{
+    HRESULT SetPropValue([in] const BYTE *pIDString, [in] DWORD dwIDStringLen, [in] MSAAPROPID idProp, [in] VARIANT var);
+
+    HRESULT SetPropServer([in] const BYTE * pIDString, [in] DWORD dwIDStringLen, [in] const MSAAPROPID* paProps,
+                    [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope);
+
+    HRESULT ClearProps([in] const BYTE *pIDString, [in] DWORD dwIDStringLen, [in] const MSAAPROPID* paProps, [in] int cProps);
+
+    HRESULT SetHwndProp([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+                    [in] MSAAPROPID idProp, [in] VARIANT var);
+
+    HRESULT SetHwndPropStr([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+                    [in] MSAAPROPID idProp, [in] LPWSTR str);
+
+    HRESULT SetHwndPropServer([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+                    [in] const MSAAPROPID* paProps, [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope);
+
+    HRESULT ClearHwndProps([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+                    [in] const MSAAPROPID* paProps, [in] int cProps);
+
+    HRESULT ComposeHwndIdentityString([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+                    [out] BYTE **ppIDString, [out] DWORD* pdwIDStringLen);
+
+    HRESULT DecomposeHwndIdentityString([in] const BYTE *pIDString, [in] DWORD dwIDStringLen,
+                    [out] HWND* phwnd, [out] DWORD* pidObject, [out] DWORD* pidChild);
+
+    HRESULT SetHmenuProp([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] VARIANT var);
+
+    HRESULT SetHmenuPropStr([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] LPWSTR str);
+
+    HRESULT SetHmenuPropServer([in] HMENU hmenu, [in] DWORD idChild, [in] const MSAAPROPID* paProps,
+                    [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope);
+
+    HRESULT ClearHmenuProps([in] HMENU hmenu, [in] DWORD idChild, [in] const MSAAPROPID* paProps, [in] int cProps);
+
+    HRESULT ComposeHmenuIdentityString([in] HMENU hmenu, [in] DWORD idChild,
+                    [out] BYTE **ppIDString, [out] DWORD *pdwIDStringLen);
+
+    HRESULT DecomposeHmenuIdentityString([in] const BYTE *pIDString, [in] DWORD dwIDStringLen,
+                    [out] HMENU *phmenu, [out] DWORD *pidChild);
+}
+
+[
+    uuid(1ea4dbf0-3c3b-11cf-810c-00aa00389b71),
+    lcid(0),
+    version(1.1),
+    hidden
+]
+library Accessibility
+{
+    importlib ("stdole2.tlb");
+    interface IAccessible;
+    interface IAccessibleHandler;
+
+    interface IAccIdentity;
+    interface IAccPropServer;
+    interface IAccPropServices;
+
+    [
+        uuid(b5f8350b-0548-48b1-a6ee-88bd00b4a5e7)
+    ]
+    coclass CAccPropServices
+    {
+        interface IAccPropServices;
+    }
+};
+
+cpp_quote("DEFINE_GUID(LIBID_Accessibility, 0x1ea4dbf0, 0x3c3b, 0x11cf, 0x81, 0x0c, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);")
+cpp_quote("DEFINE_GUID(CLSID_AccPropServices, 0xb5f8350b, 0x0548, 0x48b1, 0xa6, 0xee, 0x88, 0xbd, 0x00, 0xb4, 0xa5, 0xe7);")
+cpp_quote("DEFINE_GUID(IIS_IsOleaccProxy, 0x902697fa, 0x80e4, 0x4560, 0x80, 0x2a, 0xa1, 0x3f, 0x22, 0xa6, 0x47, 0x09);")
+
+cpp_quote("LRESULT WINAPI LresultFromObject(REFIID,WPARAM,LPUNKNOWN);")
+cpp_quote("HRESULT WINAPI ObjectFromLresult(LRESULT,REFIID,WPARAM,void **);")
+cpp_quote("HRESULT WINAPI WindowFromAccessibleObject(IAccessible *,HWND *);")
+cpp_quote("HRESULT WINAPI AccessibleObjectFromWindow(HWND,DWORD,REFIID,void **);")
+cpp_quote("HRESULT WINAPI AccessibleObjectFromEvent(HWND,DWORD,DWORD,IAccessible **,VARIANT *);")
+cpp_quote("HRESULT WINAPI AccessibleObjectFromPoint(POINT,IAccessible **,VARIANT *);")
+cpp_quote("HRESULT WINAPI AccessibleChildren(IAccessible *,LONG,LONG,VARIANT *,LONG *);")
+
+cpp_quote("void WINAPI GetOleaccVersionInfo(DWORD *,DWORD *);")
+cpp_quote("HRESULT WINAPI CreateStdAccessibleObject(HWND,LONG,REFIID,void **);")
+cpp_quote("HRESULT WINAPI CreateStdAccessibleProxyA(HWND,LPCSTR,LONG,REFIID,void **);")
+cpp_quote("HRESULT WINAPI CreateStdAccessibleProxyW(HWND,LPCWSTR,LONG,REFIID,void **);")
+cpp_quote("#define CreateStdAccessibleProxy WINELIB_NAME_AW(CreateStdAccessibleProxy)")
+
+cpp_quote("UINT WINAPI GetRoleTextA(DWORD,LPSTR,UINT);")
+cpp_quote("UINT WINAPI GetRoleTextW(DWORD,LPWSTR,UINT);")
+cpp_quote("#define GetRoleText WINELIB_NAME_AW(GetRoleText)")
+cpp_quote("UINT WINAPI GetStateTextA(DWORD,LPSTR,UINT);")
+cpp_quote("UINT WINAPI GetStateTextW(DWORD,LPWSTR,UINT);")
+cpp_quote("#define GetStateText WINELIB_NAME_AW(GetStateText)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h
new file mode 100644
index 0000000..4c0fb41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h
@@ -0,0 +1,772 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLEAUTO_H
+#define __WINE_OLEAUTO_H
+
+#include <oaidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0);
+
+#define STDOLE_MAJORVERNUM  1
+#define STDOLE_MINORVERNUM  0
+#define STDOLE_LCID         0
+
+#define STDOLE2_MAJORVERNUM 2
+#define STDOLE2_MINORVERNUM 0
+#define STDOLE2_LCID        0
+
+ULONG WINAPI OaBuildVersion(void);
+
+/* BSTR functions */
+BSTR WINAPI SysAllocString(const OLECHAR*);
+BSTR WINAPI SysAllocStringByteLen(LPCSTR,UINT);
+BSTR WINAPI SysAllocStringLen(const OLECHAR*,UINT);
+void WINAPI SysFreeString(BSTR);
+INT  WINAPI SysReAllocString(LPBSTR,const OLECHAR*);
+int  WINAPI SysReAllocStringLen(BSTR*,const OLECHAR*,UINT);
+UINT WINAPI SysStringByteLen(BSTR);
+UINT WINAPI SysStringLen(BSTR);
+
+/* IErrorInfo helpers */
+HRESULT WINAPI SetErrorInfo(ULONG,IErrorInfo*);
+HRESULT WINAPI GetErrorInfo(ULONG,IErrorInfo**);
+HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo**);
+
+/* SafeArray functions */
+SAFEARRAY* WINAPI SafeArrayCreate(VARTYPE,UINT,SAFEARRAYBOUND*);
+SAFEARRAY* WINAPI SafeArrayCreateEx(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID);
+SAFEARRAY* WINAPI SafeArrayCreateVector(VARTYPE,LONG,ULONG);
+SAFEARRAY* WINAPI SafeArrayCreateVectorEx(VARTYPE,LONG,ULONG,LPVOID);
+
+HRESULT WINAPI SafeArrayAllocDescriptor(UINT,SAFEARRAY**);
+HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE,UINT,SAFEARRAY**);
+HRESULT WINAPI SafeArrayAllocData(SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY*);
+HRESULT WINAPI SafeArrayPutElement(SAFEARRAY*,LONG*,void*);
+HRESULT WINAPI SafeArrayGetElement(SAFEARRAY*,LONG*,void*);
+HRESULT WINAPI SafeArrayLock(SAFEARRAY*);
+HRESULT WINAPI SafeArrayUnlock(SAFEARRAY*);
+HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY*,UINT,LONG*);
+HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY*,UINT,LONG*);
+UINT    WINAPI SafeArrayGetDim(SAFEARRAY*);
+UINT    WINAPI SafeArrayGetElemsize(SAFEARRAY*);
+HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY*,VARTYPE*);
+HRESULT WINAPI SafeArrayAccessData(SAFEARRAY*,void**);
+HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY*);
+HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY*,LONG*,void **);
+HRESULT WINAPI SafeArrayCopyData(SAFEARRAY*,SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroy(SAFEARRAY*);
+HRESULT WINAPI SafeArrayCopy(SAFEARRAY*,SAFEARRAY**);
+HRESULT WINAPI SafeArrayRedim(SAFEARRAY*,SAFEARRAYBOUND*);
+HRESULT WINAPI SafeArraySetRecordInfo(SAFEARRAY*,IRecordInfo*);
+HRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY*,IRecordInfo**);
+HRESULT WINAPI SafeArraySetIID(SAFEARRAY*,REFGUID);
+HRESULT WINAPI SafeArrayGetIID(SAFEARRAY*,GUID*);
+
+HRESULT WINAPI VectorFromBstr(BSTR,SAFEARRAY**);
+HRESULT WINAPI BstrFromVector(SAFEARRAY*,BSTR*);
+
+/* Object registration helpers */
+#define ACTIVEOBJECT_STRONG 0
+#define ACTIVEOBJECT_WEAK   1
+
+HRESULT WINAPI RegisterActiveObject(LPUNKNOWN,REFCLSID,DWORD,LPDWORD);
+HRESULT WINAPI RevokeActiveObject(DWORD,LPVOID);
+HRESULT WINAPI GetActiveObject(REFCLSID,LPVOID,LPUNKNOWN*);
+
+/* IRecordInfo helpers */
+HRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo*,IRecordInfo**);
+HRESULT WINAPI GetRecordInfoFromGuids(REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordInfo**);
+
+/*
+ * Variants
+ */
+
+/* Macros for accessing the fields of the VARIANT type */
+#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
+#define V_UNION(A,B) ((A)->n1.n2.n3.B)
+#define V_VT(A)      ((A)->n1.n2.vt)
+#else
+#define V_UNION(A,B) ((A)->B)
+#define V_VT(A)      ((A)->vt)
+#endif
+
+#define V_ISBYREF(A)  (V_VT(A) & VT_BYREF)
+#define V_ISARRAY(A)  (V_VT(A) & VT_ARRAY)
+#define V_ISVECTOR(A) (V_VT(A) & VT_VECTOR)
+#define V_NONE(A)     V_I2(A)
+
+#define V_ARRAY(A)       V_UNION(A,parray)
+#define V_ARRAYREF(A)    V_UNION(A,pparray)
+#define V_BOOL(A)        V_UNION(A,boolVal)
+#define V_BOOLREF(A)     V_UNION(A,pboolVal)
+#define V_BSTR(A)        V_UNION(A,bstrVal)
+#define V_BSTRREF(A)     V_UNION(A,pbstrVal)
+#define V_BYREF(A)       V_UNION(A,byref)
+#define V_CY(A)          V_UNION(A,cyVal)
+#define V_CYREF(A)       V_UNION(A,pcyVal)
+#define V_DATE(A)        V_UNION(A,date)
+#define V_DATEREF(A)     V_UNION(A,pdate)
+#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
+#define V_DECIMAL(A)     ((A)->n1.decVal)
+#else
+#define V_DECIMAL(A)     ((A)->decVal)
+#endif
+#define V_DECIMALREF(A)  V_UNION(A,pdecVal)
+#define V_DISPATCH(A)    V_UNION(A,pdispVal)
+#define V_DISPATCHREF(A) V_UNION(A,ppdispVal)
+#define V_ERROR(A)       V_UNION(A,scode)
+#define V_ERRORREF(A)    V_UNION(A,pscode)
+#define V_I1(A)          V_UNION(A,cVal)
+#define V_I1REF(A)       V_UNION(A,pcVal)
+#define V_I2(A)          V_UNION(A,iVal)
+#define V_I2REF(A)       V_UNION(A,piVal)
+#define V_I4(A)          V_UNION(A,lVal)
+#define V_I4REF(A)       V_UNION(A,plVal)
+#define V_I8(A)          V_UNION(A,llVal)
+#define V_I8REF(A)       V_UNION(A,pllVal)
+#define V_INT(A)         V_UNION(A,intVal)
+#define V_INTREF(A)      V_UNION(A,pintVal)
+#ifdef _WIN64
+#define V_INT_PTR(A)     V_I8(A)
+#define V_INT_PTRREF(A)  V_I8REF(A)
+#else
+#define V_INT_PTR(A)     V_I4(A)
+#define V_INT_PTRREF(A)  V_I4REF(A)
+#endif
+#define V_R4(A)          V_UNION(A,fltVal)
+#define V_R4REF(A)       V_UNION(A,pfltVal)
+#define V_R8(A)          V_UNION(A,dblVal)
+#define V_R8REF(A)       V_UNION(A,pdblVal)
+#define V_UINT(A)        V_UNION(A,uintVal)
+#define V_UINTREF(A)     V_UNION(A,puintVal)
+#define V_UI1(A)         V_UNION(A,bVal)
+#define V_UI1REF(A)      V_UNION(A,pbVal)
+#define V_UI2(A)         V_UNION(A,uiVal)
+#define V_UI2REF(A)      V_UNION(A,puiVal)
+#define V_UI4(A)         V_UNION(A,ulVal)
+#define V_UI4REF(A)      V_UNION(A,pulVal)
+#define V_UI8(A)         V_UNION(A,ullVal)
+#define V_UI8REF(A)      V_UNION(A,pullVal)
+#ifdef _WIN64
+#define V_UINT_PTR(A)    V_UI8(A)
+#define V_UINT_PTRREF(A) V_UI8REF(A)
+#else
+#define V_UINT_PTR(A)    V_UI4(A)
+#define V_UINT_PTRREF(A) V_UI4REF(A)
+#endif
+#define V_UNKNOWN(A)     V_UNION(A,punkVal)
+#define V_UNKNOWNREF(A)  V_UNION(A,ppunkVal)
+#define V_VARIANTREF(A)  V_UNION(A,pvarVal)
+
+void    WINAPI VariantInit(VARIANT*);
+HRESULT WINAPI VariantClear(VARIANT*);
+HRESULT WINAPI VariantCopy(VARIANT*,VARIANT*);
+HRESULT WINAPI VariantCopyInd(VARIANT*,VARIANT*);
+HRESULT WINAPI VariantChangeType(VARIANT*,VARIANT*,USHORT,VARTYPE);
+HRESULT WINAPI VariantChangeTypeEx(VARIANT*,VARIANT*,LCID,USHORT,VARTYPE);
+
+/* VariantChangeType/VariantChangeTypeEx flags */
+#define VARIANT_NOVALUEPROP        0x01 /* Don't get the default value property from IDispatch */
+#define VARIANT_ALPHABOOL          0x02 /* Coerce to "True"|"False" instead of "-1"|"0" */
+#define VARIANT_NOUSEROVERRIDE     0x04 /* Pass LOCALE_NOUSEROVERRIDE to low level conversions */
+#define VARIANT_CALENDAR_HIJRI     0x08 /* Use the Hijri calendar */
+#define VARIANT_LOCALBOOL          0x10 /* Like VARIANT_ALPHABOOL, but use localised text */
+#define VARIANT_CALENDAR_THAI      0x20 /* Use the Thai buddhist calendar */
+#define VARIANT_CALENDAR_GREGORIAN 0x40 /* Use the Gregorian calendar */
+#define VARIANT_USE_NLS            0x80 /* Format result using NLS calls */
+
+/*
+ * Low level Variant coercion functions
+ */
+
+#define VT_HARDTYPE VT_RESERVED /* Don't coerce this variant when comparing it to others */
+
+/* Flags for low level coercions. LOCALE_ flags can also be passed */
+#define VAR_TIMEVALUEONLY       0x001 /* Ignore date portion of VT_DATE */
+#define VAR_DATEVALUEONLY       0x002 /* Ignore time portion of VT_DATE */
+#define VAR_VALIDDATE           0x004
+#define VAR_CALENDAR_HIJRI      0x008 /* Use the Hijri calendar */
+#define VAR_LOCALBOOL           0x010 /* VT_BOOL<->VT_BSTR: Use localised boolean text */
+#define VAR_FORMAT_NOSUBSTITUTE 0x020 /* Don't change format strings for un-coercable types */
+#define VAR_FOURDIGITYEARS      0x040 /* Always print years with 4 digits */
+#define VAR_CALENDAR_THAI       0x080 /* Use the Thai buddhist calendar */
+#define VAR_CALENDAR_GREGORIAN  0x100 /* Use the Gregorian calendar */
+
+#ifndef LOCALE_USE_NLS
+/* This is missing from native winnls.h, but may be added at some point */
+#define LOCALE_USE_NLS          0x10000000
+#endif
+
+#define VTDATEGRE_MIN -657434 /* Minimum possible Gregorian date: 1/1/100 */
+#define VTDATEGRE_MAX 2958465 /* Maximum possible Gregorian date: 31/12/9999 */
+
+HRESULT WINAPI VarUI1FromI2(SHORT,BYTE*);
+HRESULT WINAPI VarUI1FromI4(LONG,BYTE*);
+HRESULT WINAPI VarUI1FromI8(LONG64,BYTE*);
+HRESULT WINAPI VarUI1FromR4(FLOAT,BYTE*);
+HRESULT WINAPI VarUI1FromR8(DOUBLE,BYTE*);
+HRESULT WINAPI VarUI1FromDate(DATE,BYTE*);
+HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL,BYTE*);
+HRESULT WINAPI VarUI1FromI1(signed char,BYTE*);
+HRESULT WINAPI VarUI1FromUI2(USHORT,BYTE*);
+HRESULT WINAPI VarUI1FromUI4(ULONG,BYTE*);
+HRESULT WINAPI VarUI1FromUI8(ULONG64,BYTE*);
+HRESULT WINAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*);
+HRESULT WINAPI VarUI1FromCy(CY,BYTE*);
+HRESULT WINAPI VarUI1FromDec(DECIMAL*,BYTE*);
+HRESULT WINAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*);
+
+HRESULT WINAPI VarI2FromUI1(BYTE,SHORT*);
+HRESULT WINAPI VarI2FromI4(LONG,SHORT*);
+HRESULT WINAPI VarI2FromI8(LONG64,SHORT*);
+HRESULT WINAPI VarI2FromR4(FLOAT,SHORT*);
+HRESULT WINAPI VarI2FromR8(DOUBLE,SHORT*);
+HRESULT WINAPI VarI2FromDate(DATE,SHORT*);
+HRESULT WINAPI VarI2FromBool(VARIANT_BOOL,SHORT*);
+HRESULT WINAPI VarI2FromI1(signed char,SHORT*);
+HRESULT WINAPI VarI2FromUI2(USHORT,SHORT*);
+HRESULT WINAPI VarI2FromUI4(ULONG,SHORT*);
+HRESULT WINAPI VarI2FromUI8(ULONG64,SHORT*);
+HRESULT WINAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*);
+HRESULT WINAPI VarI2FromCy(CY,SHORT*);
+HRESULT WINAPI VarI2FromDec(DECIMAL*,SHORT*);
+HRESULT WINAPI VarI2FromDisp(IDispatch*,LCID,SHORT*);
+
+HRESULT WINAPI VarI4FromUI1(BYTE,LONG*);
+HRESULT WINAPI VarI4FromI2(SHORT,LONG*);
+HRESULT WINAPI VarI4FromI8(LONG64,LONG*);
+HRESULT WINAPI VarI4FromR4(FLOAT,LONG*);
+HRESULT WINAPI VarI4FromR8(DOUBLE,LONG*);
+HRESULT WINAPI VarI4FromDate(DATE,LONG*);
+HRESULT WINAPI VarI4FromBool(VARIANT_BOOL,LONG*);
+HRESULT WINAPI VarI4FromI1(signed char,LONG*);
+HRESULT WINAPI VarI4FromUI2(USHORT,LONG*);
+HRESULT WINAPI VarI4FromUI4(ULONG,LONG*);
+HRESULT WINAPI VarI4FromUI8(ULONG64,LONG*);
+HRESULT WINAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*);
+HRESULT WINAPI VarI4FromCy(CY,LONG*);
+HRESULT WINAPI VarI4FromDec(DECIMAL*,LONG*);
+HRESULT WINAPI VarI4FromDisp(IDispatch*,LCID,LONG*);
+
+HRESULT WINAPI VarI8FromUI1(BYTE,LONG64*);
+HRESULT WINAPI VarI8FromI2(SHORT,LONG64*);
+HRESULT WINAPI VarI8FromI4(LONG,LONG64*);
+HRESULT WINAPI VarI8FromR4(FLOAT,LONG64*);
+HRESULT WINAPI VarI8FromR8(DOUBLE,LONG64*);
+HRESULT WINAPI VarI8FromDate(DATE,LONG64*);
+HRESULT WINAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*);
+HRESULT WINAPI VarI8FromBool(VARIANT_BOOL,LONG64*);
+HRESULT WINAPI VarI8FromI1(signed char,LONG64*);
+HRESULT WINAPI VarI8FromUI2(USHORT,LONG64*);
+HRESULT WINAPI VarI8FromUI4(ULONG,LONG64*);
+HRESULT WINAPI VarI8FromUI8(ULONG64,LONG64*);
+HRESULT WINAPI VarI8FromDec(DECIMAL *pdecIn,LONG64*);
+HRESULT WINAPI VarI8FromInt(INT intIn,LONG64*);
+HRESULT WINAPI VarI8FromCy(CY,LONG64*);
+HRESULT WINAPI VarI8FromDisp(IDispatch*,LCID,LONG64*);
+
+HRESULT WINAPI VarR4FromUI1(BYTE,FLOAT*);
+HRESULT WINAPI VarR4FromI2(SHORT,FLOAT*);
+HRESULT WINAPI VarR4FromI4(LONG,FLOAT*);
+HRESULT WINAPI VarR4FromI8(LONG64,FLOAT*);
+HRESULT WINAPI VarR4FromR8(DOUBLE,FLOAT*);
+HRESULT WINAPI VarR4FromDate(DATE,FLOAT*);
+HRESULT WINAPI VarR4FromBool(VARIANT_BOOL,FLOAT*);
+HRESULT WINAPI VarR4FromI1(signed char,FLOAT*);
+HRESULT WINAPI VarR4FromUI2(USHORT,FLOAT*);
+HRESULT WINAPI VarR4FromUI4(ULONG,FLOAT*);
+HRESULT WINAPI VarR4FromUI8(ULONG64,FLOAT*);
+HRESULT WINAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*);
+HRESULT WINAPI VarR4FromCy(CY,FLOAT*);
+HRESULT WINAPI VarR4FromDec(DECIMAL*,FLOAT*);
+HRESULT WINAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*);
+
+HRESULT WINAPI VarR8FromUI1(BYTE,double*);
+HRESULT WINAPI VarR8FromI2(SHORT,double*);
+HRESULT WINAPI VarR8FromI4(LONG,double*);
+HRESULT WINAPI VarR8FromI8(LONG64,double*);
+HRESULT WINAPI VarR8FromR4(FLOAT,double*);
+HRESULT WINAPI VarR8FromDate(DATE,double*);
+HRESULT WINAPI VarR8FromBool(VARIANT_BOOL,double*);
+HRESULT WINAPI VarR8FromI1(signed char,double*);
+HRESULT WINAPI VarR8FromUI2(USHORT,double*);
+HRESULT WINAPI VarR8FromUI4(ULONG,double*);
+HRESULT WINAPI VarR8FromUI8(ULONG64,double*);
+HRESULT WINAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*);
+HRESULT WINAPI VarR8FromCy(CY,double*);
+HRESULT WINAPI VarR8FromDec(const DECIMAL*,double*);
+HRESULT WINAPI VarR8FromDisp(IDispatch*,LCID,double*);
+
+HRESULT WINAPI VarDateFromUI1(BYTE,DATE*);
+HRESULT WINAPI VarDateFromI2(SHORT,DATE*);
+HRESULT WINAPI VarDateFromI4(LONG,DATE*);
+HRESULT WINAPI VarDateFromI8(LONG64,DATE*);
+HRESULT WINAPI VarDateFromR4(FLOAT,DATE*);
+HRESULT WINAPI VarDateFromR8(DOUBLE,DATE*);
+HRESULT WINAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*);
+HRESULT WINAPI VarDateFromI1(signed char,DATE*);
+HRESULT WINAPI VarDateFromUI2(USHORT,DATE*);
+HRESULT WINAPI VarDateFromUI4(ULONG,DATE*);
+HRESULT WINAPI VarDateFromUI8(ULONG64,DATE*);
+HRESULT WINAPI VarDateFromBool(VARIANT_BOOL,DATE*);
+HRESULT WINAPI VarDateFromCy(CY,DATE*);
+HRESULT WINAPI VarDateFromDec(DECIMAL*,DATE*);
+HRESULT WINAPI VarDateFromDisp(IDispatch*,LCID,DATE*);
+
+HRESULT WINAPI VarCyFromUI1(BYTE,CY*);
+HRESULT WINAPI VarCyFromI2(SHORT sIn,CY*);
+HRESULT WINAPI VarCyFromI4(LONG,CY*);
+HRESULT WINAPI VarCyFromI8(LONG64,CY*);
+HRESULT WINAPI VarCyFromR4(FLOAT,CY*);
+HRESULT WINAPI VarCyFromR8(DOUBLE,CY*);
+HRESULT WINAPI VarCyFromDate(DATE,CY*);
+HRESULT WINAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*);
+HRESULT WINAPI VarCyFromBool(VARIANT_BOOL,CY*);
+HRESULT WINAPI VarCyFromI1(signed char,CY*);
+HRESULT WINAPI VarCyFromUI2(USHORT,CY*);
+HRESULT WINAPI VarCyFromUI4(ULONG,CY*);
+HRESULT WINAPI VarCyFromUI8(ULONG64,CY*);
+HRESULT WINAPI VarCyFromDec(DECIMAL*,CY*);
+HRESULT WINAPI VarCyFromDisp(IDispatch*,LCID,CY*);
+
+HRESULT WINAPI VarBstrFromUI1(BYTE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI4(LONG,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI8(LONG64,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromR4(FLOAT,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromR8(DOUBLE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromDate(DATE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI1(signed char,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromUI2(USHORT,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromUI8(ULONG64,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromUI4(ULONG,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromCy(CY,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromDec(DECIMAL*,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromDisp(IDispatch*,LCID,ULONG,BSTR*);
+
+HRESULT WINAPI VarBoolFromUI1(BYTE,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI2(SHORT,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI4(LONG,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI8(LONG64,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDate(DATE,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI1(signed char,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI8(ULONG64,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromCy(CY,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDec(DECIMAL*,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDisp(IDispatch*,LCID,VARIANT_BOOL*);
+
+HRESULT WINAPI VarI1FromUI1(BYTE,signed char*);
+HRESULT WINAPI VarI1FromI2(SHORT,signed char*);
+HRESULT WINAPI VarI1FromI4(LONG,signed char*);
+HRESULT WINAPI VarI1FromI8(LONG64,signed char*);
+HRESULT WINAPI VarI1FromR4(FLOAT,signed char*);
+HRESULT WINAPI VarI1FromR8(DOUBLE,signed char*);
+HRESULT WINAPI VarI1FromDate(DATE,signed char*);
+HRESULT WINAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*);
+HRESULT WINAPI VarI1FromBool(VARIANT_BOOL,signed char*);
+HRESULT WINAPI VarI1FromUI2(USHORT,signed char*);
+HRESULT WINAPI VarI1FromUI4(ULONG,signed char*);
+HRESULT WINAPI VarI1FromUI8(ULONG64,signed char*);
+HRESULT WINAPI VarI1FromCy(CY,signed char*);
+HRESULT WINAPI VarI1FromDec(DECIMAL*,signed char*);
+HRESULT WINAPI VarI1FromDisp(IDispatch*,LCID,signed char*);
+
+HRESULT WINAPI VarUI2FromUI1(BYTE,USHORT*);
+HRESULT WINAPI VarUI2FromI2(SHORT,USHORT*);
+HRESULT WINAPI VarUI2FromI4(LONG,USHORT*);
+HRESULT WINAPI VarUI2FromI8(LONG64,USHORT*);
+HRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*);
+HRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*);
+HRESULT WINAPI VarUI2FromDate(DATE,USHORT*);
+HRESULT WINAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*);
+HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL,USHORT*);
+HRESULT WINAPI VarUI2FromI1(signed char,USHORT*);
+HRESULT WINAPI VarUI2FromUI4(ULONG,USHORT*);
+HRESULT WINAPI VarUI2FromUI8(ULONG64,USHORT*);
+HRESULT WINAPI VarUI2FromCy(CY,USHORT*);
+HRESULT WINAPI VarUI2FromDec(DECIMAL*,USHORT*);
+HRESULT WINAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*);
+
+HRESULT WINAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*);
+HRESULT WINAPI VarUI4FromUI1(BYTE,ULONG*);
+HRESULT WINAPI VarUI4FromI2(SHORT,ULONG*);
+HRESULT WINAPI VarUI4FromI4(LONG,ULONG*);
+HRESULT WINAPI VarUI4FromI8(LONG64,ULONG*);
+HRESULT WINAPI VarUI4FromR4(FLOAT,ULONG*);
+HRESULT WINAPI VarUI4FromR8(DOUBLE,ULONG*);
+HRESULT WINAPI VarUI4FromDate(DATE,ULONG*);
+HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL,ULONG*);
+HRESULT WINAPI VarUI4FromI1(signed char,ULONG*);
+HRESULT WINAPI VarUI4FromUI2(USHORT,ULONG*);
+HRESULT WINAPI VarUI4FromUI8(ULONG64,ULONG*);
+HRESULT WINAPI VarUI4FromCy(CY,ULONG*);
+HRESULT WINAPI VarUI4FromDec(DECIMAL*,ULONG*);
+HRESULT WINAPI VarUI4FromDisp(IDispatch*,LCID,ULONG*);
+
+HRESULT WINAPI VarUI8FromUI1(BYTE,ULONG64*);
+HRESULT WINAPI VarUI8FromI2(SHORT,ULONG64*);
+HRESULT WINAPI VarUI8FromI4(LONG,ULONG64*);
+HRESULT WINAPI VarUI8FromI8(LONG64,ULONG64*);
+HRESULT WINAPI VarUI8FromR4(FLOAT,ULONG64*);
+HRESULT WINAPI VarUI8FromR8(DOUBLE,ULONG64*);
+HRESULT WINAPI VarUI8FromDate(DATE,ULONG64*);
+HRESULT WINAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*);
+HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*);
+HRESULT WINAPI VarUI8FromI1(signed char,ULONG64*);
+HRESULT WINAPI VarUI8FromUI2(USHORT,ULONG64*);
+HRESULT WINAPI VarUI8FromUI4(ULONG,ULONG64*);
+HRESULT WINAPI VarUI8FromDec(DECIMAL*,ULONG64*);
+HRESULT WINAPI VarUI8FromInt(INT,ULONG64*);
+HRESULT WINAPI VarUI8FromCy(CY,ULONG64*);
+HRESULT WINAPI VarUI8FromDisp(IDispatch*,LCID,ULONG64*);
+
+HRESULT WINAPI VarDecFromUI1(BYTE,DECIMAL*);
+HRESULT WINAPI VarDecFromI2(SHORT,DECIMAL*);
+HRESULT WINAPI VarDecFromI4(LONG,DECIMAL*);
+HRESULT WINAPI VarDecFromI8(LONG64,DECIMAL*);
+HRESULT WINAPI VarDecFromR4(FLOAT,DECIMAL*);
+HRESULT WINAPI VarDecFromR8(DOUBLE,DECIMAL*);
+HRESULT WINAPI VarDecFromDate(DATE,DECIMAL*);
+HRESULT WINAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*);
+HRESULT WINAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*);
+HRESULT WINAPI VarDecFromI1(signed char,DECIMAL*);
+HRESULT WINAPI VarDecFromUI2(USHORT,DECIMAL*);
+HRESULT WINAPI VarDecFromUI4(ULONG,DECIMAL*);
+HRESULT WINAPI VarDecFromUI8(ULONG64,DECIMAL*);
+HRESULT WINAPI VarDecFromCy(CY,DECIMAL*);
+HRESULT WINAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*);
+
+#define VarUI4FromUI4( in,pOut ) ( *(pOut) =  (in) )
+#define VarI4FromI4( in,pOut )   ( *(pOut) =  (in) )
+
+#define VarUI1FromInt   VarUI1FromI4
+#define VarUI1FromUint  VarUI1FromUI4
+#define VarI2FromInt    VarI2FromI4
+#define VarI2FromUint   VarI2FromUI4
+#define VarI4FromInt    VarI4FromI4
+#define VarI4FromUint   VarI4FromUI4
+#define VarI8FromInt    VarI8FromI4
+#define VarI8FromUint   VarI8FromUI4
+#define VarR4FromInt    VarR4FromI4
+#define VarR4FromUint   VarR4FromUI4
+#define VarR8FromInt    VarR8FromI4
+#define VarR8FromUint   VarR8FromUI4
+#define VarDateFromInt  VarDateFromI4
+#define VarDateFromUint VarDateFromUI4
+#define VarCyFromInt    VarCyFromI4
+#define VarCyFromUint   VarCyFromUI4
+#define VarBstrFromInt  VarBstrFromI4
+#define VarBstrFromUint VarBstrFromUI4
+#define VarBoolFromInt  VarBoolFromI4
+#define VarBoolFromUint VarBoolFromUI4
+#define VarI1FromInt    VarI1FromI4
+#define VarI1FromUint   VarI1FromUI4
+#define VarUI2FromInt   VarUI2FromI4
+#define VarUI2FromUint  VarUI2FromUI4
+#define VarUI4FromInt   VarUI4FromI4
+#define VarUI4FromUint  VarUI4FromUI4
+#define VarUI8FromInt   VarUI8FromI4
+#define VarUI8FromUint  VarUI8FromUI4
+#define VarDecFromInt   VarDecFromI4
+#define VarDecFromUint  VarDecFromUI4
+#define VarIntFromUI1   VarI4FromUI1
+#define VarIntFromI2    VarI4FromI2
+#define VarIntFromI4    VarI4FromI4
+#define VarIntFromI8    VarI4FromI8
+#define VarIntFromR4    VarI4FromR4
+#define VarIntFromR8    VarI4FromR8
+#define VarIntFromDate  VarI4FromDate
+#define VarIntFromCy    VarI4FromCy
+#define VarIntFromStr   VarI4FromStr
+#define VarIntFromDisp  VarI4FromDisp
+#define VarIntFromBool  VarI4FromBool
+#define VarIntFromI1    VarI4FromI1
+#define VarIntFromUI2   VarI4FromUI2
+#define VarIntFromUI4   VarI4FromUI4
+#define VarIntFromUI8   VarI4FromUI8
+#define VarIntFromDec   VarI4FromDec
+#define VarIntFromUint  VarI4FromUI4
+#define VarUintFromUI1  VarUI4FromUI1
+#define VarUintFromI2   VarUI4FromI2
+#define VarUintFromI4   VarUI4FromI4
+#define VarUintFromI8   VarUI4FromI8
+#define VarUintFromR4   VarUI4FromR4
+#define VarUintFromR8   VarUI4FromR8
+#define VarUintFromDate VarUI4FromDate
+#define VarUintFromCy   VarUI4FromCy
+#define VarUintFromStr  VarUI4FromStr
+#define VarUintFromDisp VarUI4FromDisp
+#define VarUintFromBool VarUI4FromBool
+#define VarUintFromI1   VarUI4FromI1
+#define VarUintFromUI2  VarUI4FromUI2
+#define VarUintFromUI4  VarUI4FromUI4
+#define VarUintFromUI8  VarUI4FromUI8
+#define VarUintFromDec  VarUI4FromDec
+#define VarUintFromInt  VarUI4FromI4
+
+/*
+ * Variant Math operations
+ */
+#define VARCMP_LT   0
+#define VARCMP_EQ   1
+#define VARCMP_GT   2
+#define VARCMP_NULL 3
+
+HRESULT WINAPI VarR4CmpR8(float,double);
+
+HRESULT WINAPI VarR8Pow(double,double,double*);
+HRESULT WINAPI VarR8Round(double,int,double*);
+
+HRESULT WINAPI VarDecAbs(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecAdd(const DECIMAL*,const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecCmp(const DECIMAL*,const DECIMAL*);
+HRESULT WINAPI VarDecCmpR8(const DECIMAL*,DOUBLE);
+HRESULT WINAPI VarDecDiv(const DECIMAL*,const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecFix(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecInt(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecMul(const DECIMAL*,const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecNeg(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecRound(const DECIMAL*,int,DECIMAL*);
+HRESULT WINAPI VarDecSub(const DECIMAL*,const DECIMAL*,DECIMAL*);
+
+HRESULT WINAPI VarCyAbs(const CY,CY*);
+HRESULT WINAPI VarCyAdd(const CY,const CY,CY*);
+HRESULT WINAPI VarCyCmp(const CY,const CY);
+HRESULT WINAPI VarCyCmpR8(const CY,DOUBLE);
+HRESULT WINAPI VarCyFix(const CY,CY*);
+HRESULT WINAPI VarCyInt(const CY,CY*);
+HRESULT WINAPI VarCyMul(const CY,CY,CY*);
+HRESULT WINAPI VarCyMulI4(const CY,LONG,CY*);
+HRESULT WINAPI VarCyMulI8(const CY,LONG64,CY*);
+HRESULT WINAPI VarCyNeg(const CY,CY*);
+HRESULT WINAPI VarCyRound(const CY,INT,CY*);
+HRESULT WINAPI VarCySub(const CY,const CY,CY*);
+
+HRESULT WINAPI VarAdd(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarAnd(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarCat(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarDiv(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarEqv(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarIdiv(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarImp(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarMod(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarMul(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarOr(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarPow(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarSub(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarXor(LPVARIANT,LPVARIANT,LPVARIANT);
+
+HRESULT WINAPI VarAbs(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarFix(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarInt(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarNeg(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarNot(LPVARIANT,LPVARIANT);
+
+HRESULT WINAPI VarRound(LPVARIANT,int,LPVARIANT);
+
+HRESULT WINAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG);
+
+HRESULT WINAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG);
+HRESULT WINAPI VarBstrCat(BSTR,BSTR,BSTR*);
+
+
+typedef struct {
+    SYSTEMTIME st;
+    USHORT wDayOfYear;
+} UDATE;
+
+typedef struct
+{
+    INT   cDig;       /* Number of parsed digits */
+    ULONG dwInFlags;  /* Acceptable state of the input string (NUMPRS_ flags) */
+    ULONG dwOutFlags; /* Parsed state of the output string (NUMPRS_ flags) */
+    INT   cchUsed;    /* Number of characters parsed from input string */
+    INT   nBaseShift; /* Base of the number (but apparently unused) */
+    INT   nPwr10;     /* Scale of the number in powers of 10 */
+} NUMPARSE;
+
+#define NUMPRS_LEADING_WHITE  0x00001 /* Leading whitespace */
+#define NUMPRS_TRAILING_WHITE 0x00002 /* Trailing whitespace */
+#define NUMPRS_LEADING_PLUS   0x00004 /* Leading '+' sign */
+#define NUMPRS_TRAILING_PLUS  0x00008 /* Trailing '+' sign */
+#define NUMPRS_LEADING_MINUS  0x00010 /* Leading '-' sign */
+#define NUMPRS_TRAILING_MINUS 0x00020 /* Trailing '-' sign */
+#define NUMPRS_HEX_OCT        0x00040 /* Octal number (with a leading 0) */
+#define NUMPRS_PARENS         0x00080 /* Parentheses for negative numbers */
+#define NUMPRS_DECIMAL        0x00100 /* Decimal separator */
+#define NUMPRS_THOUSANDS      0x00200 /* Thousands separator */
+#define NUMPRS_CURRENCY       0x00400 /* Currency symbol */
+#define NUMPRS_EXPONENT       0x00800 /* Exponent (e.g. "e-14") */
+#define NUMPRS_USE_ALL        0x01000 /* Parse the entire string */
+#define NUMPRS_STD            0x01FFF /* Standard flags for internal coercions (All of the above) */
+#define NUMPRS_NEG            0x10000 /* Number is negative (dwOutFlags only) */
+#define NUMPRS_INEXACT        0x20000 /* Number is represented inexactly (dwOutFlags only) */
+
+#define VTBIT_I1      (1 << VT_I1)
+#define VTBIT_UI1     (1 << VT_UI1)
+#define VTBIT_I2      (1 << VT_I2)
+#define VTBIT_UI2     (1 << VT_UI2)
+#define VTBIT_I4      (1 << VT_I4)
+#define VTBIT_UI4     (1 << VT_UI4)
+#define VTBIT_I8      (1 << VT_I8)
+#define VTBIT_UI8     (1 << VT_UI8)
+#define VTBIT_R4      (1 << VT_R4)
+#define VTBIT_R8      (1 << VT_R8)
+#define VTBIT_CY      (1 << VT_CY)
+#define VTBIT_DECIMAL (1 << VT_DECIMAL)
+
+HRESULT WINAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*);
+HRESULT WINAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*);
+
+INT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*);
+INT WINAPI VariantTimeToDosDateTime(double,USHORT*,USHORT*);
+
+INT WINAPI VariantTimeToSystemTime(DOUBLE,LPSYSTEMTIME);
+INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME,double*);
+
+HRESULT WINAPI VarDateFromUdate(UDATE*,ULONG,DATE*);
+HRESULT WINAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*);
+HRESULT WINAPI VarUdateFromDate(DATE,ULONG,UDATE*);
+
+/* Variant formatting */
+HRESULT WINAPI VarWeekdayName(int,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarMonthName(int,int,ULONG,BSTR*);
+HRESULT WINAPI GetAltMonthNames(LCID,LPOLESTR**);
+
+HRESULT WINAPI VarFormat(LPVARIANT,LPOLESTR,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatCurrency(LPVARIANT,int,int,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatDateTime(LPVARIANT,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatNumber(LPVARIANT,int,int,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatPercent(LPVARIANT,int,int,int,int,ULONG,BSTR*);
+
+HRESULT WINAPI VarFormatFromTokens(LPVARIANT,LPOLESTR,LPBYTE,ULONG,BSTR*,LCID);
+HRESULT WINAPI VarTokenizeFormatString(LPOLESTR,LPBYTE,int,int,int,LCID,int*);
+
+
+/*
+ * IDispatch types and helper functions
+ */
+
+/* A structure describing a single parameter to a com object method. */
+typedef struct tagPARAMDATA
+{
+    OLECHAR *szName; /* Name of Parameter */
+    VARTYPE  vt;     /* Type of Parameter */
+} PARAMDATA, *LPPARAMDATA;
+
+/* A structure describing a single method of a com object. */
+typedef struct tagMETHODDATA
+{
+    OLECHAR   *szName;   /* Name of method */
+    PARAMDATA *ppdata;   /* Parameters of the method */
+    DISPID     dispid;   /* Id of the method */
+    UINT       iMeth;    /* Vtable index of the method */
+    CALLCONV   cc;       /* Calling convention of the method */
+    UINT       cArgs;    /* Number of parameters in the method */
+    WORD       wFlags;   /* Type of the method (DISPATCH_ flags) */
+    VARTYPE    vtReturn; /* Type of the return value */
+} METHODDATA, *LPMETHODDATA;
+
+/* Structure describing a single com object */
+typedef struct tagINTERFACEDATA
+{
+    METHODDATA *pmethdata;  /* Methods of the object */
+    UINT        cMembers;   /* Number of methods in the object */
+} INTERFACEDATA, *LPINTERFACEDATA;
+
+typedef enum tagREGKIND
+{
+    REGKIND_DEFAULT,
+    REGKIND_REGISTER,
+    REGKIND_NONE
+} REGKIND;
+
+HRESULT WINAPI DispGetParam(DISPPARAMS*,UINT,VARTYPE,VARIANT*,UINT*);
+HRESULT WINAPI DispGetIDsOfNames(ITypeInfo*,OLECHAR**,UINT,DISPID*);
+HRESULT WINAPI DispInvoke(void*,ITypeInfo*,DISPID,WORD,DISPPARAMS*,VARIANT*,
+                          EXCEPINFO*,UINT*);
+HRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA*,LCID,ITypeInfo**);
+HRESULT WINAPI CreateStdDispatch(IUnknown*,void*,ITypeInfo*,IUnknown**);
+HRESULT WINAPI DispCallFunc(void*,ULONG_PTR,CALLCONV,VARTYPE,UINT,VARTYPE*,
+                            VARIANTARG**,VARIANT*);
+
+
+/*
+ * TypeLib API
+ */
+
+ULONG WINAPI LHashValOfNameSysA(SYSKIND,LCID,LPCSTR);
+ULONG WINAPI LHashValOfNameSys(SYSKIND,LCID,LPCOLESTR);
+
+#define LHashValOfName(lcid,name) LHashValOfNameSys(SYS_WIN32,lcid,name)
+#define WHashValOfLHashVal(hash) ((USHORT)((hash) & 0xffff))
+#define IsHashValCompatible(hash1,hash2) ((hash1) & 0xff0000 == (hash2) & 0xff0000)
+
+#define MEMBERID_NIL   DISPID_UNKNOWN
+#define ID_DEFAULTINST -2
+
+#define DISPATCH_METHOD         0x1
+#define DISPATCH_PROPERTYGET    0x2
+#define DISPATCH_PROPERTYPUT    0x4
+#define DISPATCH_PROPERTYPUTREF 0x8
+
+#define LOAD_TLB_AS_32BIT       0x20
+#define LOAD_TLB_AS_64BIT       0x40
+#define MASK_TO_RESET_TLB_BITS  ~(LOAD_TLB_AS_32BIT|LOAD_TLB_AS_64BIT)
+
+HRESULT WINAPI CreateTypeLib(SYSKIND,const OLECHAR*,ICreateTypeLib**);
+HRESULT WINAPI CreateTypeLib2(SYSKIND,LPCOLESTR,ICreateTypeLib2**);
+HRESULT WINAPI LoadRegTypeLib(REFGUID,WORD,WORD,LCID,ITypeLib**);
+HRESULT WINAPI LoadTypeLib(const OLECHAR*,ITypeLib**);
+HRESULT WINAPI LoadTypeLibEx(LPCOLESTR,REGKIND,ITypeLib**);
+HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID,WORD,WORD,LCID,LPBSTR);
+HRESULT WINAPI RegisterTypeLib(ITypeLib*,OLECHAR*,OLECHAR*);
+HRESULT WINAPI UnRegisterTypeLib(REFGUID,WORD,WORD,LCID,SYSKIND);
+HRESULT WINAPI RegisterTypeLibForUser(ITypeLib*,OLECHAR*,OLECHAR*);
+HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND);
+
+VOID WINAPI ClearCustData(LPCUSTDATA);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /*__WINE_OLEAUTO_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h
new file mode 100644
index 0000000..b9cbe44
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h
@@ -0,0 +1,458 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLECTL_H
+#define __WINE_OLECTL_H
+
+#if !defined(__midl) && !defined(__WIDL__)
+
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+/*
+ * Ole Control Interfaces
+ */
+DEFINE_GUID(CLSID_ConvertVBX,
+            0xfb8f0822,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13);
+DEFINE_GUID(CLSID_PersistPropset,
+            0xfb8f0821,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13);
+
+DEFINE_GUID(CLSID_StdFont,
+            0x0be35203,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_StdPicture,
+            0x0be35204,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+
+DEFINE_GUID(IID_IPropertyFrame,
+            0xb196b28a,0xbab4,0x101a,0xb6,0x9c,0x00,0xaa,0x00,0x34,0x1d,0x07);
+
+DEFINE_GUID(CLSID_CFontPropPage,
+            0x0be35200,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_CColorPropPage,
+            0x0be35201,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_CPicturePropPage,
+            0x0be35202,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+
+DEFINE_GUID(GUID_HIMETRIC,
+            0x66504300,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_COLOR,
+            0x66504301,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XPOSPIXEL,
+            0x66504302,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YPOSPIXEL,
+            0x66504303,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XSIZEPIXEL,
+            0x66504304,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YSIZEPIXEL,
+            0x66504305,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XPOS,
+            0x66504306,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YPOS,
+            0x66504307,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XSIZE,
+            0x66504308,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YSIZE,
+            0x66504309,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+
+#ifndef __CGUID_H__
+DEFINE_GUID(GUID_TRISTATE,
+            0x6650430a,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+#endif
+
+DEFINE_GUID(GUID_OPTIONVALUEEXCLUSIVE,
+            0x6650430b,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_CHECKVALUEEXCLUSIVE,
+            0x6650430c,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTNAME,
+            0x6650430d,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTSIZE,
+            0x6650430e,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTBOLD,
+            0x6650430f,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTITALIC,
+            0x66504310,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTUNDERSCORE,
+            0x66504311,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTSTRIKETHROUGH,
+            0x66504312,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_HANDLE,
+            0x66504313,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+
+typedef struct tagOCPFIPARAMS
+{
+	ULONG cbStructSize;
+	HWND hWndOwner;
+	int x;
+	int y;
+	LPCOLESTR lpszCaption;
+	ULONG cObjects;
+	LPUNKNOWN *lplpUnk;
+	ULONG cPages;
+	CLSID *lpPages;
+	LCID lcid;
+	DISPID dispidInitialProperty;
+} OCPFIPARAMS, *LPOCPFIPARAMS;
+
+/*
+ * FONTDESC is used as an OLE encapsulation of the GDI fonts
+ */
+typedef struct tagFONTDESC {
+  UINT     cbSizeofstruct;
+  LPOLESTR lpstrName;
+  CY         cySize;
+  SHORT      sWeight;
+  SHORT      sCharset;
+  BOOL     fItalic;
+  BOOL     fUnderline;
+  BOOL     fStrikethrough;
+} FONTDESC, *LPFONTDESC;
+
+#define FONTSIZE(n) { n##0000, 0 }
+
+#define PICTYPE_UNINITIALIZED (-1)
+#define PICTYPE_NONE          0
+#define PICTYPE_BITMAP        1
+#define PICTYPE_METAFILE      2
+#define PICTYPE_ICON          3
+#define PICTYPE_ENHMETAFILE   4
+
+typedef struct tagPICTDESC {
+	UINT cbSizeofstruct;
+	UINT picType;
+	union {
+			struct {
+					HBITMAP hbitmap;
+					HPALETTE hpal;
+			} bmp;
+			struct {
+					HMETAFILE hmeta;
+					int xExt;
+					int yExt;
+			} wmf;
+			struct {
+					HICON hicon;
+			} icon;
+			struct {
+					HENHMETAFILE hemf;
+			} emf;
+	} DUMMYUNIONNAME;
+} PICTDESC, *LPPICTDESC;
+
+typedef LONG OLE_XPOS_PIXELS;
+typedef LONG OLE_YPOS_PIXELS;
+typedef LONG OLE_XSIZE_PIXELS;
+typedef LONG OLE_YSIZE_PIXELS;
+typedef float OLE_XPOS_CONTAINER;
+typedef float OLE_YPOS_CONTAINER;
+typedef float OLE_XSIZE_CONTAINER;
+typedef float OLE_YSIZE_CONTAINER;
+
+typedef enum
+{
+	triUnchecked = 0,
+	triChecked = 1,
+	triGray = 2
+} OLE_TRISTATE;
+
+typedef VARIANT_BOOL OLE_OPTEXCLUSIVE;
+typedef VARIANT_BOOL OLE_CANCELBOOL;
+typedef VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;
+
+/* flags for OleLoadPictureEx and OleLoadPictureFileEx */
+#define LP_DEFAULT      0x0
+#define LP_MONOCHROME   0x1
+#define LP_VGACOLOR     0x2
+#define LP_COLOR        0x4
+
+HRESULT WINAPI DllRegisterServer(void);
+
+HRESULT WINAPI DllUnregisterServer(void);
+
+HCURSOR WINAPI OleIconToCursor( HINSTANCE hinstExe, HICON hicon);
+
+HRESULT WINAPI OleCreatePropertyFrameIndirect( LPOCPFIPARAMS lpParams);
+
+HRESULT WINAPI OleCreatePropertyFrame(
+	HWND hwndOwner, UINT x, UINT y,
+	LPCOLESTR lpszCaption, ULONG cObjects, LPUNKNOWN* ppUnk,
+	ULONG cPages, LPCLSID pPageClsID, LCID lcid, DWORD dwReserved,
+	LPVOID pvReserved );
+
+HRESULT WINAPI OleLoadPicture(	LPSTREAM lpstream, LONG lSize, BOOL fRunmode,
+		REFIID riid, LPVOID *lplpvObj );
+
+HRESULT WINAPI OleLoadPictureEx( LPSTREAM lpstream, LONG lSize, BOOL fRunMode,
+                REFIID riid, DWORD xSizeDesired, DWORD ySizeDesired,
+                DWORD dwFlags, LPVOID *lplpvObj );
+
+HRESULT WINAPI OleLoadPictureFile( VARIANT varFilename, IDispatch **ppdispPicture );
+
+HRESULT WINAPI OleLoadPictureFileEx( VARIANT varFilename, DWORD xSizeDesired,
+                DWORD ySizeDesired, DWORD dwFlags, IDispatch **ppdispPicture );
+
+HRESULT WINAPI OleSavePictureFile( IDispatch *pdispPicture, BSTR bstrFilename );
+
+HRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller,
+		DWORD dwReserved, OLE_COLOR clrReserved, REFIID riid,
+		LPVOID *ppvRet );
+
+HRESULT WINAPI OleCreatePictureIndirect(LPPICTDESC lpPictDesc, REFIID riid,
+		BOOL fOwn, LPVOID * lplpvObj );
+
+HRESULT WINAPI OleCreateFontIndirect(LPFONTDESC lpFontDesc, REFIID riid,
+		LPVOID* lplpvObj);
+
+HRESULT WINAPI OleTranslateColor( OLE_COLOR clr, HPALETTE hpal,
+		COLORREF* lpcolorref);
+
+/* Reflected Window Message IDs */
+#define OCM__BASE           (WM_USER+0x1c00)
+#define OCM_COMMAND         (OCM__BASE + WM_COMMAND)
+
+#define OCM_CTLCOLORBTN     (OCM__BASE + WM_CTLCOLORBTN)
+#define OCM_CTLCOLOREDIT    (OCM__BASE + WM_CTLCOLOREDIT)
+#define OCM_CTLCOLORDLG     (OCM__BASE + WM_CTLCOLORDLG)
+#define OCM_CTLCOLORLISTBOX (OCM__BASE + WM_CTLCOLORLISTBOX)
+#define OCM_CTLCOLORMSGBOX  (OCM__BASE + WM_CTLCOLORMSGBOX)
+#define OCM_CTLCOLORSCROLLBAR   (OCM__BASE + WM_CTLCOLORSCROLLBAR)
+#define OCM_CTLCOLORSTATIC  (OCM__BASE + WM_CTLCOLORSTATIC)
+
+#define OCM_DRAWITEM        (OCM__BASE + WM_DRAWITEM)
+#define OCM_MEASUREITEM     (OCM__BASE + WM_MEASUREITEM)
+#define OCM_DELETEITEM      (OCM__BASE + WM_DELETEITEM)
+#define OCM_VKEYTOITEM      (OCM__BASE + WM_VKEYTOITEM)
+#define OCM_CHARTOITEM      (OCM__BASE + WM_CHARTOITEM)
+#define OCM_COMPAREITEM     (OCM__BASE + WM_COMPAREITEM)
+#define OCM_HSCROLL         (OCM__BASE + WM_HSCROLL)
+#define OCM_VSCROLL         (OCM__BASE + WM_VSCROLL)
+#define OCM_PARENTNOTIFY    (OCM__BASE + WM_PARENTNOTIFY)
+#define OCM_NOTIFY            (OCM__BASE + WM_NOTIFY)
+
+#define CONNECT_E_FIRST    MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0200)
+#define CONNECT_E_LAST     MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x020F)
+#define CONNECT_S_FIRST    MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)
+#define CONNECT_S_LAST     MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)
+
+#define CONNECT_E_NOCONNECTION      (CONNECT_E_FIRST+0)
+#define CONNECT_E_ADVISELIMIT       (CONNECT_E_FIRST+1)
+#define CONNECT_E_CANNOTCONNECT     (CONNECT_E_FIRST+2)
+#define CONNECT_E_OVERRIDDEN        (CONNECT_E_FIRST+3)
+
+#define SELFREG_E_FIRST             MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0200)
+#define SELFREG_E_LAST              MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x020F)
+#define SELFREG_S_FIRST             MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)
+#define SELFREG_S_LAST              MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)
+#define SELFREG_E_TYPELIB           (SELFREG_E_FIRST+0)
+#define SELFREG_E_CLASS             (SELFREG_E_FIRST+1)
+
+#ifndef FACILITY_CONTROL
+#define FACILITY_CONTROL 0xa
+#endif
+#define STD_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)
+#define CTL_E_ILLEGALFUNCTIONCALL       STD_CTL_SCODE(5)
+#define CTL_E_OVERFLOW                  STD_CTL_SCODE(6)
+#define CTL_E_OUTOFMEMORY               STD_CTL_SCODE(7)
+#define CTL_E_DIVISIONBYZERO            STD_CTL_SCODE(11)
+#define CTL_E_OUTOFSTRINGSPACE          STD_CTL_SCODE(14)
+#define CTL_E_OUTOFSTACKSPACE           STD_CTL_SCODE(28)
+#define CTL_E_BADFILENAMEORNUMBER       STD_CTL_SCODE(52)
+#define CTL_E_FILENOTFOUND              STD_CTL_SCODE(53)
+#define CTL_E_BADFILEMODE               STD_CTL_SCODE(54)
+#define CTL_E_FILEALREADYOPEN           STD_CTL_SCODE(55)
+#define CTL_E_DEVICEIOERROR             STD_CTL_SCODE(57)
+#define CTL_E_FILEALREADYEXISTS         STD_CTL_SCODE(58)
+#define CTL_E_BADRECORDLENGTH           STD_CTL_SCODE(59)
+#define CTL_E_DISKFULL                  STD_CTL_SCODE(61)
+#define CTL_E_BADRECORDNUMBER           STD_CTL_SCODE(63)
+#define CTL_E_BADFILENAME               STD_CTL_SCODE(64)
+#define CTL_E_TOOMANYFILES              STD_CTL_SCODE(67)
+#define CTL_E_DEVICEUNAVAILABLE         STD_CTL_SCODE(68)
+#define CTL_E_PERMISSIONDENIED          STD_CTL_SCODE(70)
+#define CTL_E_DISKNOTREADY              STD_CTL_SCODE(71)
+#define CTL_E_PATHFILEACCESSERROR       STD_CTL_SCODE(75)
+#define CTL_E_PATHNOTFOUND              STD_CTL_SCODE(76)
+#define CTL_E_INVALIDPATTERNSTRING      STD_CTL_SCODE(93)
+#define CTL_E_INVALIDUSEOFNULL          STD_CTL_SCODE(94)
+#define CTL_E_INVALIDFILEFORMAT         STD_CTL_SCODE(321)
+#define CTL_E_INVALIDPROPERTYVALUE      STD_CTL_SCODE(380)
+#define CTL_E_INVALIDPROPERTYARRAYINDEX STD_CTL_SCODE(381)
+#define CTL_E_SETNOTSUPPORTEDATRUNTIME  STD_CTL_SCODE(382)
+#define CTL_E_SETNOTSUPPORTED           STD_CTL_SCODE(383)
+#define CTL_E_NEEDPROPERTYARRAYINDEX    STD_CTL_SCODE(385)
+#define CTL_E_SETNOTPERMITTED           STD_CTL_SCODE(387)
+#define CTL_E_GETNOTSUPPORTEDATRUNTIME  STD_CTL_SCODE(393)
+#define CTL_E_GETNOTSUPPORTED           STD_CTL_SCODE(394)
+#define CTL_E_PROPERTYNOTFOUND          STD_CTL_SCODE(422)
+#define CTL_E_INVALIDCLIPBOARDFORMAT    STD_CTL_SCODE(460)
+#define CTL_E_INVALIDPICTURE            STD_CTL_SCODE(481)
+#define CTL_E_PRINTERERROR              STD_CTL_SCODE(482)
+#define CTL_E_CANTSAVEFILETOTEMP        STD_CTL_SCODE(735)
+#define CTL_E_SEARCHTEXTNOTFOUND        STD_CTL_SCODE(744)
+#define CTL_E_REPLACEMENTSTOOLONG       STD_CTL_SCODE(746)
+
+#define CUSTOM_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)
+#define CTL_E_CUSTOM_FIRST              CUSTOM_CTL_SCODE(600)
+
+#define VT_COLOR            VT_I4
+#define VT_XPOS_PIXELS      VT_I4
+#define VT_YPOS_PIXELS      VT_I4
+#define VT_XSIZE_PIXELS     VT_I4
+#define VT_YSIZE_PIXELS     VT_I4
+#define VT_XPOS_HIMETRIC    VT_I4
+#define VT_YPOS_HIMETRIC    VT_I4
+#define VT_XSIZE_HIMETRIC   VT_I4
+#define VT_YSIZE_HIMETRIC   VT_I4
+#define VT_TRISTATE         VT_I2
+#define VT_OPTEXCLUSIVE     VT_BOOL
+#define VT_FONT             VT_DISPATCH
+#define VT_PICTURE          VT_DISPATCH
+
+#define VT_STREAMED_PROPSET 73
+#define VT_STORED_PROPSET   74
+#define VT_BLOB_PROPSET     75
+#define VT_VERBOSE_ENUM     76
+
+#ifndef OLEIVERB_PROPERTIES
+#define OLEIVERB_PROPERTIES (__MSABI_LONG(-7))
+#endif
+
+#define PERPROP_E_FIRST    MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0200)
+#define PERPROP_E_LAST     MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x020F)
+#define PERPROP_S_FIRST    MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)
+#define PERPROP_S_LAST     MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)
+
+#define PERPROP_E_NOPAGEAVAILABLE   (PERPROP_E_FIRST+0)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* !__midl && !__WIDL__ */
+
+/* standard dispatch ID's */
+#define DISPID_AUTOSIZE                 (-500)
+#define DISPID_BACKCOLOR                (-501)
+#define DISPID_BACKSTYLE                (-502)
+#define DISPID_BORDERCOLOR              (-503)
+#define DISPID_BORDERSTYLE              (-504)
+#define DISPID_BORDERWIDTH              (-505)
+#define DISPID_DRAWMODE                 (-507)
+#define DISPID_DRAWSTYLE                (-508)
+#define DISPID_DRAWWIDTH                (-509)
+#define DISPID_FILLCOLOR                (-510)
+#define DISPID_FILLSTYLE                (-511)
+#define DISPID_FONT                     (-512)
+#define DISPID_FORECOLOR                (-513)
+#define DISPID_ENABLED                  (-514)
+#define DISPID_HWND                     (-515)
+#define DISPID_TABSTOP                  (-516)
+#define DISPID_TEXT                     (-517)
+#define DISPID_CAPTION                  (-518)
+#define DISPID_BORDERVISIBLE            (-519)
+#define DISPID_APPEARANCE               (-520)
+#define DISPID_MOUSEPOINTER             (-521)
+#define DISPID_MOUSEICON                (-522)
+#define DISPID_PICTURE                  (-523)
+#define DISPID_VALID                    (-524)
+#define DISPID_READYSTATE               (-525)
+
+#define DISPID_REFRESH                  (-550)
+#define DISPID_DOCLICK                  (-551)
+#define DISPID_ABOUTBOX                 (-552)
+#define DISPID_ADDITEM                  (-553)
+#define DISPID_CLEAR                    (-554)
+#define DISPID_REMOVEITEM               (-555)
+
+#define DISPID_CLICK                    (-600)
+#define DISPID_DBLCLICK                 (-601)
+#define DISPID_KEYDOWN                  (-602)
+#define DISPID_KEYPRESS                 (-603)
+#define DISPID_KEYUP                    (-604)
+#define DISPID_MOUSEDOWN                (-605)
+#define DISPID_MOUSEMOVE                (-606)
+#define DISPID_MOUSEUP                  (-607)
+#define DISPID_ERROREVENT               (-608)
+#define DISPID_READYSTATECHANGE         (-609)
+#define DISPID_CLICK_VALUE              (-610)
+#define DISPID_RIGHTTOLEFT              (-611)
+#define DISPID_TOPTOBOTTOM              (-612)
+#define DISPID_THIS                     (-613)
+
+#define DISPID_AMBIENT_BACKCOLOR        (-701)
+#define DISPID_AMBIENT_DISPLAYNAME      (-702)
+#define DISPID_AMBIENT_FONT             (-703)
+#define DISPID_AMBIENT_FORECOLOR        (-704)
+#define DISPID_AMBIENT_LOCALEID         (-705)
+#define DISPID_AMBIENT_MESSAGEREFLECT   (-706)
+#define DISPID_AMBIENT_SCALEUNITS       (-707)
+#define DISPID_AMBIENT_TEXTALIGN        (-708)
+#define DISPID_AMBIENT_USERMODE         (-709)
+#define DISPID_AMBIENT_UIDEAD           (-710)
+#define DISPID_AMBIENT_SHOWGRABHANDLES  (-711)
+#define DISPID_AMBIENT_SHOWHATCHING     (-712)
+#define DISPID_AMBIENT_DISPLAYASDEFAULT (-713)
+#define DISPID_AMBIENT_SUPPORTSMNEMONICS (-714)
+#define DISPID_AMBIENT_AUTOCLIP         (-715)
+#define DISPID_AMBIENT_APPEARANCE       (-716)
+
+#define DISPID_AMBIENT_CODEPAGE         (-725)
+#define DISPID_AMBIENT_PALETTE          (-726)
+#define DISPID_AMBIENT_CHARSET          (-727)
+#define DISPID_AMBIENT_TRANSFERPRIORITY (-728)
+
+#define DISPID_AMBIENT_RIGHTTOLEFT      (-732)
+#define DISPID_AMBIENT_TOPTOBOTTOM      (-733)
+
+#define DISPID_Name                     (-800)
+#define DISPID_Delete                   (-801)
+#define DISPID_Object                   (-802)
+#define DISPID_Parent                   (-803)
+
+#define DISPID_FONT_NAME 0
+#define DISPID_FONT_SIZE 2
+#define DISPID_FONT_BOLD 3
+#define DISPID_FONT_ITALIC 4
+#define DISPID_FONT_UNDER 5
+#define DISPID_FONT_STRIKE 6
+#define DISPID_FONT_WEIGHT 7
+#define DISPID_FONT_CHARSET 8
+#define DISPID_FONT_CHANGED 9
+
+/* IPicture */
+#define DISPID_PICT_HANDLE	0
+#define DISPID_PICT_HPAL	2
+#define DISPID_PICT_TYPE	3
+#define DISPID_PICT_WIDTH	4
+#define DISPID_PICT_HEIGHT	5
+#define DISPID_PICT_RENDER	6
+
+#endif /*  __WINE_OLECTL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl
new file mode 100644
index 0000000..f6abde2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#include <pshpack8.h>")
+cpp_quote("#else")
+cpp_quote("#include <pshpack2.h>")
+cpp_quote("#endif")
+cpp_quote("")
+
+import "wtypes.idl";
+import "oaidl.idl";
+import "ocidl.idl";
+import "propidl.idl";
+import "urlmon.idl";
+
+typedef ULONG_PTR DBBYTEOFFSET;
+typedef LONG_PTR  DBROWOFFSET;
+typedef LONG_PTR  DBROWCOUNT;
+typedef ULONG_PTR DBCOUNTITEM;
+typedef ULONG_PTR DBLENGTH;
+typedef ULONG_PTR DBORDINAL;
+typedef ULONG_PTR DBBKMARK;
+typedef DWORD_PTR DB_DWRESERVE;
+typedef ULONG_PTR DBREFCOUNT;
+typedef ULONG_PTR DB_UPARAMS;
+typedef LONG_PTR  DB_LPARAMS;
+typedef DWORD_PTR DBHASHVALUE;
+
+#include "dbs.idl"
+
+#include "access.idl"
+#include "rstbas.idl"
+#include "rstinf.idl"
+#include "rstloc.idl"
+#include "chprst.idl"
+#include "cmdbas.idl"
+#include "cmdtxt.idl"
+#include "dbccmd.idl"
+#include "dbcses.idl"
+#include "srcrst.idl"
+#include "dbprop.idl"
+#include "dbinit.idl"
+#include "dbdsad.idl"
+#include "asynot.idl"
+#include "asysta.idl"
+#include "sesprp.idl"
+#include "rstnot.idl"
+#include "opnrst.idl"
+#include "row.idl"
+#include "rowchg.idl"
+#include "rowpos.idl"
+#include "rowpsc.idl"
+#include "binres.idl"
+#include "crtrow.idl"
+#include "errrec.idl"
+
+cpp_quote("#include <accctrl.h>")
+
+cpp_quote("#include <poppack.h>")
+cpp_quote("")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h
new file mode 100644
index 0000000..e9eb30a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h
@@ -0,0 +1,83 @@
+/* OLE DB error codes.
+ *
+ * Copyright 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLEDBERR_H
+#define __WINE_OLEDBERR_H
+
+#define DB_E_BADBINDINFO                    0x80040e08
+
+#define DB_E_NOTFOUND                       0x80040e19
+
+#define DB_E_UNSUPPORTEDCONVERSION          0x80040e1d
+
+#define DB_E_ERRORSOCCURRED                 0x80040e21
+
+#define DB_E_BADSTORAGEFLAG                 0x80040e26
+#define DB_E_BADCOMPAREOP                   0x80040e27
+#define DB_E_BADSTATUSVALUE                 0x80040e28
+#define DB_E_CANTSCROLLBACKWARDS            0x80040e29
+#define DB_E_BADREGIONHANDLE                0x80040e2a
+#define DB_E_NONCONTIGUOUSRANGE             0x80040e2b
+#define DB_E_INVALIDTRANSITION              0x80040e2c
+#define DB_E_NOTASUBREGION                  0x80040e2d
+#define DB_E_MULTIPLESTATEMENTS             0x80040e2e
+#define DB_E_INTEGRITYVIOLATION             0x80040e2f
+#define DB_E_BADTYPENAME                    0x80040e30
+#define DB_E_ABORTLIMITREACHED              0x80040e31
+#define DB_E_ROWSETINCOMMAND                0x80040e32
+#define DB_E_CANTTRANSLATE                  0x80040e33
+#define DB_E_DUPLICATEINDEXID               0x80040e34
+#define DB_E_NOINDEX                        0x80040e35
+#define DB_E_INDEXINUSE                     0x80040e36
+#define DB_E_NOTABLE                        0x80040e37
+#define DB_E_CONCURRENCYVIOLATION           0x80040e38
+
+#define DB_E_TABLEINUSE                     0x80040e40
+#define DB_E_NOLOCALE                       0x80040e41
+#define DB_E_BADRECORDNUM                   0x80040e42
+#define DB_E_BOOKMARKSKIPPED                0x80040e43
+#define DB_E_BADPROPERTYVALUE               0x80040e44
+#define DB_E_INVALID                        0x80040e45
+#define DB_E_BADACCESSORFLAGS               0x80040e46
+#define DB_E_BADSTORAGEFLAGS                0x80040e47
+#define DB_E_BYREFACCESSORNOTSUPPORTED      0x80040e48
+#define DB_E_NULLACCESSORNOTSUPPORTED       0x80040e49
+#define DB_E_NOTPREPARED                    0x80040e4a
+#define DB_E_BADACCESSORTYPE                0x80040e4b
+#define DB_E_WRITEONLYACCESSOR              0x80040e4c
+#define DB_SEC_E_AUTH_FAILED                0x80040e4d
+#define DB_E_CANCELED                       0x80040e4e
+
+#define DB_E_ALREADYINITIALIZED             0x80040e52
+#define DB_E_DATAOVERFLOW                   0x80040e57
+
+#define DB_E_MISMATCHEDPROVIDER             0x80040e75
+
+#define DB_S_ERRORSOCCURRED                 0x00040eda
+
+#endif /* __WINE_OLEDBERR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h
new file mode 100644
index 0000000..2d6b75d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h
@@ -0,0 +1,988 @@
+/*
+ * Declarations for OLEDLG
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLEDLG_H
+#define __WINE_OLEDLG_H
+
+#include <windows.h>
+#include <shellapi.h>
+#include <commdlg.h>
+#include <ole2.h>
+#ifndef __WINESRC__
+# include <string.h>
+# include <tchar.h>
+#endif
+#include <dlgs.h>
+#include <prsht.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct IOleUILinkContainerA *POLEUILINKCONTAINERA, *LPOLEUILINKCONTAINERA;
+typedef struct IOleUILinkContainerW *POLEUILINKCONTAINERW, *LPOLEUILINKCONTAINERW;
+
+typedef struct IOleUILinkInfoA *POLEUILINKINFOA, *LPOLEUILINKINFOA;
+typedef struct IOleUILinkInfoW *POLEUILINKINFOW, *LPOLEUILINKINFOW;
+
+typedef struct IOleUIObjInfoA *POLEUIOBJINFOA, *LPOLEUIOBJINFOA;
+typedef struct IOleUIObjInfoW *POLEUIOBJINFOW, *LPOLEUIOBJINFOW;
+
+#define IDC_OLEUIHELP                   99
+
+
+#define OLEUI_ERR_STANDARDMAX           116
+
+#define OLEUI_BZERR_HTASKINVALID        (OLEUI_ERR_STANDARDMAX+0)
+#define OLEUI_BZ_SWITCHTOSELECTED       (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_BZ_RETRYSELECTED          (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_BZ_CALLUNBLOCKED          (OLEUI_ERR_STANDARDMAX+3)
+
+#define OLEUI_FALSE   0
+#define OLEUI_SUCCESS 1 /* Same as OLEUI_OK */
+#define OLEUI_OK      1 /* OK button pressed */
+#define OLEUI_CANCEL  2 /* Cancel button pressed */
+
+#define OLEUI_ERR_STANDARDMIN           100
+#define OLEUI_ERR_OLEMEMALLOC           100
+#define OLEUI_ERR_STRUCTURENULL         101
+#define OLEUI_ERR_STRUCTUREINVALID      102
+#define OLEUI_ERR_CBSTRUCTINCORRECT     103
+#define OLEUI_ERR_HWNDOWNERINVALID      104
+#define OLEUI_ERR_LPSZCAPTIONINVALID    105
+#define OLEUI_ERR_LPFNHOOKINVALID       106
+#define OLEUI_ERR_HINSTANCEINVALID      107
+#define OLEUI_ERR_LPSZTEMPLATEINVALID   108
+#define OLEUI_ERR_HRESOURCEINVALID      109
+#define OLEUI_ERR_FINDTEMPLATEFAILURE   110
+#define OLEUI_ERR_LOADTEMPLATEFAILURE   111
+#define OLEUI_ERR_DIALOGFAILURE         112
+#define OLEUI_ERR_LOCALMEMALLOC         113
+#define OLEUI_ERR_GLOBALMEMALLOC        114
+#define OLEUI_ERR_LOADSTRING            115
+#define OLEUI_ERR_STANDARDMAX           116
+
+typedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM);
+
+/*****************************************************************************
+ * Registered Message Names
+ */
+#define SZOLEUI_MSG_HELPA              "OLEUI_MSG_HELP"
+#define SZOLEUI_MSG_ENDDIALOGA         "OLEUI_MSG_ENDDIALOG"
+#define SZOLEUI_MSG_BROWSEA            "OLEUI_MSG_BROWSE"
+#define SZOLEUI_MSG_CHANGEICONA        "OLEUI_MSG_CHANGEICON"
+#define SZOLEUI_MSG_CLOSEBUSYDIALOGA   "OLEUI_MSG_CLOSEBUSYDIALOG"
+#define SZOLEUI_MSG_CONVERTA           "OLEUI_MSG_CONVERT"
+#define SZOLEUI_MSG_CHANGESOURCEA      "OLEUI_MSG_CHANGESOURCE"
+#define SZOLEUI_MSG_ADDCONTROLA        "OLEUI_MSG_ADDCONTROL"
+#define SZOLEUI_MSG_BROWSE_OFNA        "OLEUI_MSG_BROWSE_OFN"
+#if defined(__GNUC__)
+# define SZOLEUI_MSG_HELPW             (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 }
+# define SZOLEUI_MSG_ENDDIALOGW        (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 }
+# define SZOLEUI_MSG_BROWSEW           (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 }
+# define SZOLEUI_MSG_CHANGEICONW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 }
+# define SZOLEUI_MSG_CLOSEBUSYDIALOGW  (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 }
+# define SZOLEUI_MSG_CONVERTW          (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 }
+# define SZOLEUI_MSG_CHANGESOURCEW     (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 }
+# define SZOLEUI_MSG_ADDCONTROLW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 }
+# define SZOLEUI_MSG_BROWSE_OFNW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 }
+#elif defined(_MSC_VER)
+# define SZOLEUI_MSG_HELPW              L"OLEUI_MSG_HELP"
+# define SZOLEUI_MSG_ENDDIALOGW         L"OLEUI_MSG_ENDDIALOG"
+# define SZOLEUI_MSG_BROWSEW            L"OLEUI_MSG_BROWSE"
+# define SZOLEUI_MSG_CHANGEICONW        L"OLEUI_MSG_CHANGEICON"
+# define SZOLEUI_MSG_CLOSEBUSYDIALOGW   L"OLEUI_MSG_CLOSEBUSYDIALOG"
+# define SZOLEUI_MSG_CONVERTW           L"OLEUI_MSG_CONVERT"
+# define SZOLEUI_MSG_CHANGESOURCEW      L"OLEUI_MSG_CHANGESOURCE"
+# define SZOLEUI_MSG_ADDCONTROLW        L"OLEUI_MSG_ADDCONTROL"
+# define SZOLEUI_MSG_BROWSE_OFNW        L"OLEUI_MSG_BROWSE_OFN"
+#else
+static const WCHAR SZOLEUI_MSG_HELPW[]             = { 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 };
+static const WCHAR SZOLEUI_MSG_ENDDIALOGW[]        = { 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 };
+static const WCHAR SZOLEUI_MSG_BROWSEW[]           = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 };
+static const WCHAR SZOLEUI_MSG_CHANGEICONW[]       = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 };
+static const WCHAR SZOLEUI_MSG_CLOSEBUSYDIALOGW[]  = { 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 };
+static const WCHAR SZOLEUI_MSG_CONVERTW[]          = { 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 };
+static const WCHAR SZOLEUI_MSG_CHANGESOURCEW[]     = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 };
+static const WCHAR SZOLEUI_MSG_ADDCONTROLW[]       = { 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 };
+static const WCHAR SZOLEUI_MSG_BROWSE_OFNW[]       = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 };
+#endif
+#define SZOLEUI_MSG_HELP             WINELIB_NAME_AW(SZOLEUI_MSG_HELP)
+#define SZOLEUI_MSG_ENDDIALOG        WINELIB_NAME_AW(SZOLEUI_MSG_ENDDIALOG)
+#define SZOLEUI_MSG_BROWSE           WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE)
+#define SZOLEUI_MSG_CHANGEICON       WINELIB_NAME_AW(SZOLEUI_MSG_CHANGEICON)
+#define SZOLEUI_MSG_CLOSEBUSYDIALOG  WINELIB_NAME_AW(SZOLEUI_MSG_CLOSEBUSYDIALOG)
+#define SZOLEUI_MSG_CONVERT          WINELIB_NAME_AW(SZOLEUI_MSG_CONVERT)
+#define SZOLEUI_MSG_CHANGESOURCE     WINELIB_NAME_AW(SZOLEUI_MSG_CHANGESOURCE)
+#define SZOLEUI_MSG_ADDCONTROL       WINELIB_NAME_AW(SZOLEUI_MSG_ADDCONTROL)
+#define SZOLEUI_MSG_BROWSE_OFN       WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE_OFN)
+
+
+/*****************************************************************************
+ * INSERT OBJECT DIALOG
+ */
+typedef struct tagOLEUIINSERTOBJECTA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    CLSID           clsid;
+    LPSTR           lpszFile;
+    UINT            cchFile;
+    UINT            cClsidExclude;
+    LPCLSID         lpClsidExclude;
+    IID             iid;
+    DWORD           oleRender;
+    LPFORMATETC     lpFormatEtc;
+    LPOLECLIENTSITE lpIOleClientSite;
+    LPSTORAGE       lpIStorage;
+    LPVOID          *ppvObj;
+    SCODE           sc;
+    HGLOBAL         hMetaPict;
+} OLEUIINSERTOBJECTA, *POLEUIINSERTOBJECTA, *LPOLEUIINSERTOBJECTA;
+
+typedef struct tagOLEUIINSERTOBJECTW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    CLSID           clsid;
+    LPWSTR          lpszFile;
+    UINT            cchFile;
+    UINT            cClsidExclude;
+    LPCLSID         lpClsidExclude;
+    IID             iid;
+    DWORD           oleRender;
+    LPFORMATETC     lpFormatEtc;
+    LPOLECLIENTSITE lpIOleClientSite;
+    LPSTORAGE       lpIStorage;
+    LPVOID          *ppvObj;
+    SCODE           sc;
+    HGLOBAL         hMetaPict;
+} OLEUIINSERTOBJECTW, *POLEUIINSERTOBJECTW, *LPOLEUIINSERTOBJECTW;
+
+DECL_WINELIB_TYPE_AW(OLEUIINSERTOBJECT)
+DECL_WINELIB_TYPE_AW(POLEUIINSERTOBJECT)
+DECL_WINELIB_TYPE_AW(LPOLEUIINSERTOBJECT)
+
+#define IOF_SHOWHELP                    __MSABI_LONG(0x00000001)
+#define IOF_SELECTCREATENEW             __MSABI_LONG(0x00000002)
+#define IOF_SELECTCREATEFROMFILE        __MSABI_LONG(0x00000004)
+#define IOF_CHECKLINK                   __MSABI_LONG(0x00000008)
+#define IOF_CHECKDISPLAYASICON          __MSABI_LONG(0x00000010)
+#define IOF_CREATENEWOBJECT             __MSABI_LONG(0x00000020)
+#define IOF_CREATEFILEOBJECT            __MSABI_LONG(0x00000040)
+#define IOF_CREATELINKOBJECT            __MSABI_LONG(0x00000080)
+#define IOF_DISABLELINK                 __MSABI_LONG(0x00000100)
+#define IOF_VERIFYSERVERSEXIST          __MSABI_LONG(0x00000200)
+#define IOF_DISABLEDISPLAYASICON        __MSABI_LONG(0x00000400)
+#define IOF_HIDECHANGEICON              __MSABI_LONG(0x00000800)
+#define IOF_SHOWINSERTCONTROL           __MSABI_LONG(0x00001000)
+#define IOF_SELECTCREATECONTROL         __MSABI_LONG(0x00002000)
+
+/*****************************************************************************
+ * CONVERT DIALOG
+ */
+typedef struct tagOLEUICONVERTA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    CLSID           clsid;
+    CLSID           clsidConvertDefault;
+    CLSID           clsidActivateDefault;
+    CLSID           clsidNew;
+    DWORD           dvAspect;
+    WORD            wFormat;
+    BOOL            fIsLinkedObject;
+    HGLOBAL         hMetaPict;
+    LPSTR           lpszUserType;
+    BOOL            fObjectsIconChanged;
+    LPSTR           lpszDefLabel;
+    UINT            cClsidExclude;
+    LPCLSID         lpClsidExclude;
+} OLEUICONVERTA, *POLEUICONVERTA, *LPOLEUICONVERTA;
+
+typedef struct tagOLEUICONVERTW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    CLSID           clsid;
+    CLSID           clsidConvertDefault;
+    CLSID           clsidActivateDefault;
+    CLSID           clsidNew;
+    DWORD           dvAspect;
+    WORD            wFormat;
+    BOOL            fIsLinkedObject;
+    HGLOBAL         hMetaPict;
+    LPWSTR          lpszUserType;
+    BOOL            fObjectsIconChanged;
+    LPWSTR          lpszDefLabel;
+    UINT            cClsidExclude;
+    LPCLSID         lpClsidExclude;
+} OLEUICONVERTW, *POLEUICONVERTW, *LPOLEUICONVERTW;
+
+DECL_WINELIB_TYPE_AW(OLEUICONVERT)
+DECL_WINELIB_TYPE_AW(POLEUICONVERT)
+DECL_WINELIB_TYPE_AW(LPOLEUICONVERT)
+
+#define CF_SHOWHELPBUTTON               __MSABI_LONG(0x00000001)
+#define CF_SETCONVERTDEFAULT            __MSABI_LONG(0x00000002)
+#define CF_SETACTIVATEDEFAULT           __MSABI_LONG(0x00000004)
+#define CF_SELECTCONVERTTO              __MSABI_LONG(0x00000008)
+#define CF_SELECTACTIVATEAS             __MSABI_LONG(0x00000010)
+#define CF_DISABLEDISPLAYASICON         __MSABI_LONG(0x00000020)
+#define CF_DISABLEACTIVATEAS            __MSABI_LONG(0x00000040)
+#define CF_HIDECHANGEICON               __MSABI_LONG(0x00000080)
+#define CF_CONVERTONLY                  __MSABI_LONG(0x00000100)
+
+/*****************************************************************************
+ * CHANGE ICON DIALOG
+ */
+typedef struct tagOLEUICHANGEICONA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    HGLOBAL         hMetaPict;
+    CLSID           clsid;
+    CHAR            szIconExe[MAX_PATH];
+    INT             cchIconExe;
+} OLEUICHANGEICONA, *POLEUICHANGEICONA, *LPOLEUICHANGEICONA;
+
+typedef struct tagOLEUICHANGEICONW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    HGLOBAL         hMetaPict;
+    CLSID           clsid;
+    WCHAR           szIconExe[MAX_PATH];
+    INT             cchIconExe;
+} OLEUICHANGEICONW, *POLEUICHANGEICONW, *LPOLEUICHANGEICONW;
+
+DECL_WINELIB_TYPE_AW(OLEUICHANGEICON)
+DECL_WINELIB_TYPE_AW(POLEUICHANGEICON)
+DECL_WINELIB_TYPE_AW(LPOLEUICHANGEICON)
+
+
+#define CIF_SHOWHELP                    __MSABI_LONG(0x00000001)
+#define CIF_SELECTCURRENT               __MSABI_LONG(0x00000002)
+#define CIF_SELECTDEFAULT               __MSABI_LONG(0x00000004)
+#define CIF_SELECTFROMFILE              __MSABI_LONG(0x00000008)
+#define CIF_USEICONEXE                  __MSABI_LONG(0x00000010)
+
+/*****************************************************************************
+ * PASTE SPECIAL DIALOG
+ */
+
+typedef enum tagOLEUIPASTEFLAG
+{
+   OLEUIPASTE_ENABLEICON    = 2048,
+   OLEUIPASTE_PASTEONLY     = 0,
+   OLEUIPASTE_PASTE         = 512,
+   OLEUIPASTE_LINKANYTYPE   = 1024,
+   OLEUIPASTE_LINKTYPE1     = 1,
+   OLEUIPASTE_LINKTYPE2     = 2,
+   OLEUIPASTE_LINKTYPE3     = 4,
+   OLEUIPASTE_LINKTYPE4     = 8,
+   OLEUIPASTE_LINKTYPE5     = 16,
+   OLEUIPASTE_LINKTYPE6     = 32,
+   OLEUIPASTE_LINKTYPE7     = 64,
+   OLEUIPASTE_LINKTYPE8     = 128
+} OLEUIPASTEFLAG;
+
+typedef struct tagOLEUIPASTEENTRYA
+{
+   FORMATETC        fmtetc;
+   LPCSTR           lpstrFormatName;
+   LPCSTR           lpstrResultText;
+   DWORD            dwFlags;
+   DWORD            dwScratchSpace;
+} OLEUIPASTEENTRYA, *POLEUIPASTEENTRYA, *LPOLEUIPASTEENTRYA;
+
+typedef struct tagOLEUIPASTEENTRYW
+{
+   FORMATETC        fmtetc;
+   LPCWSTR          lpstrFormatName;
+   LPCWSTR          lpstrResultText;
+   DWORD            dwFlags;
+   DWORD            dwScratchSpace;
+} OLEUIPASTEENTRYW, *POLEUIPASTEENTRYW, *LPOLEUIPASTEENTRYW;
+
+DECL_WINELIB_TYPE_AW(OLEUIPASTEENTRY)
+DECL_WINELIB_TYPE_AW(POLEUIPASTEENTRY)
+DECL_WINELIB_TYPE_AW(LPOLEUIPASTEENTRY)
+
+typedef struct tagOLEUIPASTESPECIALA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    LPDATAOBJECT    lpSrcDataObj;
+    LPOLEUIPASTEENTRYA arrPasteEntries;
+    INT             cPasteEntries;
+    UINT*           arrLinkTypes;
+    INT             cLinkTypes;
+    UINT            cClsidExclude;
+    LPCLSID         lpClsidExclude;
+    INT             nSelectedIndex;
+    BOOL            fLink;
+    HGLOBAL         hMetaPict;
+    SIZEL           sizel;
+} OLEUIPASTESPECIALA, *POLEUIPASTESPECIALA, *LPOLEUIPASTESPECIALA;
+
+typedef struct tagOLEUIPASTESPECIALW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    LPDATAOBJECT    lpSrcDataObj;
+    LPOLEUIPASTEENTRYW arrPasteEntries;
+    INT             cPasteEntries;
+    UINT*           arrLinkTypes;
+    INT             cLinkTypes;
+    UINT            cClsidExclude;
+    LPCLSID         lpClsidExclude;
+    INT             nSelectedIndex;
+    BOOL            fLink;
+    HGLOBAL         hMetaPict;
+    SIZEL           sizel;
+} OLEUIPASTESPECIALW, *POLEUIPASTESPECIALW, *LPOLEUIPASTESPECIALW;
+
+DECL_WINELIB_TYPE_AW(OLEUIPASTESPECIAL)
+DECL_WINELIB_TYPE_AW(POLEUIPASTESPECIAL)
+DECL_WINELIB_TYPE_AW(LPOLEUIPASTESPECIAL)
+
+#define PS_MAXLINKTYPES                 8
+
+#define PSF_SHOWHELP                    __MSABI_LONG(0x00000001)
+#define PSF_SELECTPASTE                 __MSABI_LONG(0x00000002)
+#define PSF_SELECTPASTELINK             __MSABI_LONG(0x00000004)
+
+#define PSF_CHECKDISPLAYASICON          __MSABI_LONG(0x00000008)
+#define PSF_DISABLEDISPLAYASICON        __MSABI_LONG(0x00000010)
+#define PSF_HIDECHANGEICON              __MSABI_LONG(0x00000020)
+#define PSF_STAYONCLIPBOARDCHANGE       __MSABI_LONG(0x00000040)
+#define PSF_NOREFRESHDATAOBJECT         __MSABI_LONG(0x00000080)
+
+#define OLEUI_IOERR_SRCDATAOBJECTINVALID    (OLEUI_ERR_STANDARDMAX+0)
+#define OLEUI_IOERR_ARRPASTEENTRIESINVALID  (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_IOERR_ARRLINKTYPESINVALID     (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_PSERR_CLIPBOARDCHANGED        (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_PSERR_GETCLIPBOARDFAILED      (OLEUI_ERR_STANDARDMAX+4)
+
+/* Paste Special dialog resource ids */
+#define IDD_PASTESPECIAL       1003
+#define IDD_PASTESPECIAL4      1108
+
+/* Paste Special dialog control ids */
+#define IDC_PS_PASTE           500
+#define IDC_PS_PASTELINK       501
+#define IDC_PS_SOURCETEXT      502
+#define IDC_PS_PASTELIST       503
+#define IDC_PS_PASTELINKLIST   504
+#define IDC_PS_DISPLAYLIST     505
+#define IDC_PS_DISPLAYASICON   506
+#define IDC_PS_ICONDISPLAY     507
+#define IDC_PS_CHANGEICON      508
+#define IDC_PS_RESULTIMAGE     509
+#define IDC_PS_RESULTTEXT      510
+
+/*****************************************************************************
+ * EDIT LINKS DIALOG
+ */
+
+#define ELF_SHOWHELP               __MSABI_LONG(0x00000001)
+#define ELF_DISABLEUPDATENOW       __MSABI_LONG(0x00000002)
+#define ELF_DISABLEOPENSOURCE      __MSABI_LONG(0x00000004)
+#define ELF_DISABLECHANGESOURCE    __MSABI_LONG(0x00000008)
+#define ELF_DISABLECANCELLINK      __MSABI_LONG(0x00000010)
+
+typedef struct tagOLEUIEDITLINKSW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    LPOLEUILINKCONTAINERW lpOleUILinkContainer;
+} OLEUIEDITLINKSW, *POLEUIEDITLINKSW, *LPOLEUIEDITLINKSW;
+
+typedef struct tagOLEUIEDITLINKSA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    LPOLEUILINKCONTAINERA lpOleUILinkContainer;
+} OLEUIEDITLINKSA, *POLEUIEDITLINKSA, *LPOLEUIEDITLINKSA;
+
+DECL_WINELIB_TYPE_AW(OLEUIEDITLINKS)
+DECL_WINELIB_TYPE_AW(POLEUIEDITLINKS)
+DECL_WINELIB_TYPE_AW(LPOLEUIEDITLINKS)
+
+
+/***********************************************************************************
+ * BUSY DIALOG
+ */
+typedef struct tagOLEUIBUSYA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    HTASK           hTask;
+    HWND*           lphWndDialog;
+} OLEUIBUSYA, *POLEUIBUSYA, *LPOLEUIBUSYA;
+
+typedef struct tagOLEUIBUSYW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    HTASK           hTask;
+    HWND*           lphWndDialog;
+} OLEUIBUSYW, *POLEUIBUSYW, *LPOLEUIBUSYW;
+
+DECL_WINELIB_TYPE_AW(OLEUIBUSY)
+DECL_WINELIB_TYPE_AW(POLEUIBUSY)
+DECL_WINELIB_TYPE_AW(LPOLEUIBUSY)
+
+
+#define BZ_DISABLECANCELBUTTON          __MSABI_LONG(0x00000001)
+#define BZ_DISABLESWITCHTOBUTTON        __MSABI_LONG(0x00000002)
+#define BZ_DISABLERETRYBUTTON           __MSABI_LONG(0x00000004)
+#define BZ_NOTRESPONDINGDIALOG          __MSABI_LONG(0x00000008)
+
+/***********************************************************************************
+ * OBJECT PROPERTIES DIALOG
+ */
+
+struct tagOLEUIOBJECTPROPSW;
+struct tagOLEUIOBJECTPROPSA;
+
+typedef struct tagOLEUIGNRLPROPSA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    DWORD           dwReserved1[2];
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    DWORD           dwReserved2[3];
+    struct tagOLEUIOBJECTPROPSA* lpOP;
+
+} OLEUIGNRLPROPSA, *POLEUIGNRLPROPSA, *LPOLEUIGNRLPROPSA;
+
+typedef struct tagOLEUIGNRLPROPSW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    DWORD           dwReserved1[2];
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    DWORD           dwReserved2[3];
+    struct tagOLEUIOBJECTPROPSW* lpOP;
+} OLEUIGNRLPROPSW, *POLEUIGNRLPROPSW, *LPOLEUIGNRLPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUIGNRLPROPS)
+DECL_WINELIB_TYPE_AW(POLEUIGNRLPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUIGNRLPROPS)
+
+typedef struct tagOLEUIVIEWPROPSA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    DWORD           dwReserved1[2];
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    DWORD           dwReserved2[3];
+    struct tagOLEUIOBJECTPROPSA* lpOP;
+    INT             nScaleMin;
+    INT             nScaleMax;
+} OLEUIVIEWPROPSA, *POLEUIVIEWPROPSA, *LPOLEUIVIEWPROPSA;
+
+typedef struct tagOLEUIVIEWPROPSW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    DWORD           dwReserved1[2];
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    DWORD           dwReserved2[3];
+    struct tagOLEUIOBJECTPROPSW* lpOP;
+    INT             nScaleMin;
+    INT             nScaleMax;
+} OLEUIVIEWPROPSW, *POLEUIVIEWPROPSW, *LPOLEUIVIEWPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUIVIEWPROPS)
+DECL_WINELIB_TYPE_AW(POLEUIVIEWPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUIVIEWPROPS)
+
+
+#define VPF_SELECTRELATIVE          __MSABI_LONG(0x00000001)
+#define VPF_DISABLERELATIVE         __MSABI_LONG(0x00000002)
+#define VPF_DISABLESCALE            __MSABI_LONG(0x00000004)
+
+typedef struct tagOLEUILINKPROPSA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    DWORD           dwReserved1[2];
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    DWORD           dwReserved2[3];
+    struct tagOLEUIOBJECTPROPSA* lpOP;
+} OLEUILINKPROPSA, *POLEUILINKPROPSA, *LPOLEUILINKPROPSA;
+
+typedef struct tagOLEUILINKPROPSW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    DWORD           dwReserved1[2];
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    DWORD           dwReserved2[3];
+    struct tagOLEUIOBJECTPROPSW* lpOP;
+} OLEUILINKPROPSW, *POLEUILINKPROPSW, *LPOLEUILINKPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUILINKPROPS)
+DECL_WINELIB_TYPE_AW(POLEUILINKPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUILINKPROPS)
+
+typedef struct tagOLEUIOBJECTPROPSA
+{
+    DWORD                cbStruct;
+    DWORD                dwFlags;
+    LPPROPSHEETHEADERA   lpPS;
+    DWORD                dwObject;
+    LPOLEUIOBJINFOA      lpObjInfo;
+    DWORD                dwLink;
+    LPOLEUILINKINFOA     lpLinkInfo;
+    LPOLEUIGNRLPROPSA    lpGP;
+    LPOLEUIVIEWPROPSA    lpVP;
+    LPOLEUILINKPROPSA    lpLP;
+} OLEUIOBJECTPROPSA, *POLEUIOBJECTPROPSA, *LPOLEUIOBJECTPROPSA;
+
+typedef struct tagOLEUIOBJECTPROPSW
+{
+    DWORD                cbStruct;
+    DWORD                dwFlags;
+    LPPROPSHEETHEADERW   lpPS;
+    DWORD                dwObject;
+    LPOLEUIOBJINFOW      lpObjInfo;
+    DWORD                dwLink;
+    LPOLEUILINKINFOW     lpLinkInfo;
+    LPOLEUIGNRLPROPSW    lpGP;
+    LPOLEUIVIEWPROPSW    lpVP;
+    LPOLEUILINKPROPSW    lpLP;
+} OLEUIOBJECTPROPSW, *POLEUIOBJECTPROPSW, *LPOLEUIOBJECTPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUIOBJECTPROPS)
+DECL_WINELIB_TYPE_AW(POLEUIOBJECTPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUIOBJECTPROPS)
+
+#define OPF_OBJECTISLINK                __MSABI_LONG(0x00000001)
+#define OPF_NOFILLDEFAULT               __MSABI_LONG(0x00000002)
+#define OPF_SHOWHELP                    __MSABI_LONG(0x00000004)
+#define OPF_DISABLECONVERT              __MSABI_LONG(0x00000008)
+
+
+/************************************************************************************
+ * CHANGE SOURCE DIALOG
+ */
+
+
+typedef struct tagOLEUICHANGESOURCEW
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCWSTR         lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCWSTR         lpszTemplate;
+    HRSRC           hResource;
+    OPENFILENAMEW*lpOFN;
+    DWORD           dwReserved1[4];
+    LPOLEUILINKCONTAINERW lpOleUILinkContainer;
+    DWORD           dwLink;
+    LPWSTR          lpszDisplayName;
+    ULONG           nFileLength;
+    LPWSTR          lpszFrom;
+    LPWSTR          lpszTo;
+} OLEUICHANGESOURCEW, *POLEUICHANGESOURCEW, *LPOLEUICHANGESOURCEW;
+
+
+typedef struct tagOLEUICHANGESOURCEA
+{
+    DWORD           cbStruct;
+    DWORD           dwFlags;
+    HWND            hWndOwner;
+    LPCSTR          lpszCaption;
+    LPFNOLEUIHOOK   lpfnHook;
+    LPARAM          lCustData;
+    HINSTANCE       hInstance;
+    LPCSTR          lpszTemplate;
+    HRSRC           hResource;
+    OPENFILENAMEA*  lpOFN;
+    DWORD           dwReserved1[4];
+    LPOLEUILINKCONTAINERA lpOleUILinkContainer;
+    DWORD           dwLink;
+    LPSTR           lpszDisplayName;
+    ULONG           nFileLength;
+    LPSTR           lpszFrom;
+    LPSTR           lpszTo;
+} OLEUICHANGESOURCEA, *POLEUICHANGESOURCEA, *LPOLEUICHANGESOURCEA;
+
+
+DECL_WINELIB_TYPE_AW(OLEUICHANGESOURCE)
+DECL_WINELIB_TYPE_AW(POLEUICHANGESOURCE)
+DECL_WINELIB_TYPE_AW(LPOLEUICHANGESOURCE)
+
+/* Change Source Dialog flags */
+#define CSF_SHOWHELP                    __MSABI_LONG(0x00000001)
+#define CSF_VALIDSOURCE                 __MSABI_LONG(0x00000002)
+#define CSF_ONLYGETSOURCE               __MSABI_LONG(0x00000004)
+#define CSF_EXPLORER                    __MSABI_LONG(0x00000008)
+
+
+/*****************************************************************************
+ * IOleUILinkContainer interface
+ */
+#define INTERFACE   IOleUILinkContainerA
+DECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IOleUILinkContainerA methods ***/
+    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,
+                ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,
+                LPSTR *lplpszFullLinkType,  LPSTR *lplpszShortLinkType,
+                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE   IOleUILinkContainerW
+DECLARE_INTERFACE_(IOleUILinkContainerW,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IOleUILinkContainerW methods ***/
+    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink,  LPWSTR lpszDisplayName,
+                ULONG lenFileName,  ULONG *pchEaten,  BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,
+                LPWSTR *lplpszFullLinkType,  LPWSTR *lplpszShortLinkType,
+                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(IOleUILinkContainer)
+DECL_WINELIB_TYPE_AW(POLEUILINKCONTAINER)
+DECL_WINELIB_TYPE_AW(LPOLEUILINKCONTAINER)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IOleUILinkContainer_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleUILinkContainer_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IOleUILinkContainer_Release(p)                     (p)->lpVtbl->Release(p)
+/*** IOleUILinkContainer methods ***/
+#define IOleUILinkContainer_GetNextLink(p,a)               (p)->lpVtbl->GetNextLink(p,a)
+#define IOleUILinkContainer_SetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)
+#define IOleUILinkContainer_GetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)
+#define IOleUILinkContainer_SetLinkSource(p,a,b,c,d,e)     (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)
+#define IOleUILinkContainer_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)
+#define IOleUILinkContainer_OpenLinkSource(p,a)            (p)->lpVtbl->OpenLinkSource(p,a)
+#define IOleUILinkContainer_UpdateLink(p,a,b,c)            (p)->lpVtbl->UpdateLink(p,a,b,c)
+#define IOleUILinkContainer_CancelLink(p,a)                (p)->lpVtbl->CancelLink(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IOleUILinkInfo interface
+ */
+#define INTERFACE   IOleUILinkInfoA
+DECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IOleUILinkContainerA methods ***/
+    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,
+                ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,
+                LPSTR *lplpszFullLinkType,  LPSTR *lplpszShortLinkType,
+                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+    /*** IOleUILinkInfoA methods ***/
+    STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink,  FILETIME *lpLastUpdate) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE   IOleUILinkInfoW
+DECLARE_INTERFACE_(IOleUILinkInfoW,IOleUILinkContainerW)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IOleUILinkContainerW methods ***/
+    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD dwUpdateOpt) PURE;
+    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD *lpdwUpdateOpt) PURE;
+    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink,  LPWSTR lpszDisplayName,
+                ULONG lenFileName,  ULONG *pchEaten,  BOOL fValidateSource) PURE;
+    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,
+                LPWSTR *lplpszFullLinkType,  LPWSTR *lplpszShortLinkType,
+                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;
+    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+    /*** IOleUILinkInfoW methods ***/
+    STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink,  FILETIME *lpLastUpdate) PURE;
+};
+#undef  INTERFACE
+
+DECL_WINELIB_TYPE_AW(IOleUILinkInfo)
+DECL_WINELIB_TYPE_AW(POLEUILINKINFO)
+DECL_WINELIB_TYPE_AW(LPOLEUILINKINFO)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IOleUILinkInfo_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleUILinkInfo_AddRef(p)                      (p)->lpVtbl->AddRef(p)
+#define IOleUILinkInfo_Release(p)                     (p)->lpVtbl->Release(p)
+/*** IOleUILinkContainer methods ***/
+#define IOleUILinkInfo_GetNextLink(p,a)               (p)->lpVtbl->GetNextLink(p,a)
+#define IOleUILinkInfo_SetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)
+#define IOleUILinkInfo_GetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)
+#define IOleUILinkInfo_SetLinkSource(p,a,b,c,d,e)     (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)
+#define IOleUILinkInfo_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)
+#define IOleUILinkInfo_OpenLinkSource(p,a)            (p)->lpVtbl->OpenLinkSource(p,a)
+#define IOleUILinkInfo_UpdateLink(p,a,b,c)            (p)->lpVtbl->UpdateLink(p,a,b,c)
+#define IOleUILinkInfo_CancelLink(p,a)                (p)->lpVtbl->CancelLink(p,a)
+/*** IOleUILinkInfo methods ***/
+#define IOleUILinkInfo_GetLastUpdate(p,a,b)           (p)->lpVtbl->GetLastUpdate(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IOleUIObjInfo interface
+ */
+#define INTERFACE   IOleUIObjInfoA
+DECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IOleUIObjInfoA methods ***/
+    STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPSTR *lplpszLabel,
+                LPSTR *lplpszType, LPSTR *lplpszShortType, LPSTR *lplpszLocation) PURE;
+    STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,
+                CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;
+    STDMETHOD(ConvertObject)(THIS_ DWORD dwObject,  REFCLSID clsidNew) PURE;
+    STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;
+    STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,
+                INT nCurrentScale, BOOL bRelativeToOrig) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE   IOleUIObjInfoW
+DECLARE_INTERFACE_(IOleUIObjInfoW,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IOleUIObjInfoW methods ***/
+    STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPWSTR *lplpszLabel,
+                LPWSTR *lplpszType,  LPWSTR *lplpszShortType,  LPWSTR *lplpszLocation) PURE;
+    STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,
+                CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;
+    STDMETHOD(ConvertObject)(THIS_ DWORD dwObject,  REFCLSID clsidNew) PURE;
+    STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;
+    STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,
+                INT nCurrentScale, BOOL bRelativeToOrig) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(IOleUIObjInfo)
+DECL_WINELIB_TYPE_AW(POLEUIOBJINFO)
+DECL_WINELIB_TYPE_AW(LPOLEUIOBJINFO)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IOleUIObjInfo_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleUIObjInfo_AddRef(p)                        (p)->lpVtbl->AddRef(p)
+#define IOleUIObjInfo_Release(p)                       (p)->lpVtbl->Release(p)
+/*** IOleUIObjInfo methods ***/
+#define IOleUIObjInfo_GetObjectInfo(p,a,b,c,d,e,f)     (p)->lpVtbl->GetObjectInfo(p,a,b,c,d,e,f)
+#define IOleUIObjInfo_GetConvertInfo(p,a,b,c,d,e,f)    (p)->lpVtbl->GetConvertInfo(p,a,b,c,d,e,f)
+#define IOleUIObjInfo_ConvertObject(p,a,b)             (p)->lpVtbl->ConvertObject(p,a,b)
+#define IOleUIObjInfo_GetViewInfo(p,a,b,c,d)           (p)->lpVtbl->GetViewInfo(p,a,b,c,d)
+#define IOleUIObjInfo_SetViewInfo(p,a,b,c,d,e)         (p)->lpVtbl->SetViewInfo(p,a,b,c,d,e)
+#endif
+
+UINT WINAPI  OleUIInsertObjectW(LPOLEUIINSERTOBJECTW);
+UINT WINAPI  OleUIInsertObjectA(LPOLEUIINSERTOBJECTA);
+#define      OleUIInsertObject WINELIB_NAME_AW(OleUIInsertObject)
+UINT WINAPI  OleUIConvertA(LPOLEUICONVERTA);
+UINT WINAPI  OleUIConvertW(LPOLEUICONVERTW);
+#define      OleUIConvert WINELIB_NAME_AW(OleUIConvert)
+UINT WINAPI  OleUIChangeIconA(LPOLEUICHANGEICONA);
+UINT WINAPI  OleUIChangeIconW(LPOLEUICHANGEICONW);
+#define      OleUIChangeIcon WINELIB_NAME_AW(OleUIChangeIcon)
+UINT WINAPI  OleUIBusyA(LPOLEUIBUSYA);
+UINT WINAPI  OleUIBusyW(LPOLEUIBUSYW);
+#define      OleUIBusy WINELIB_NAME_AW(OleUIBusy)
+UINT WINAPI  OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA);
+UINT WINAPI  OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW);
+#define      OleUIObjectProperties WINELIB_NAME_AW(OleUIObjectProperties)
+UINT WINAPI  OleUIChangeSourceW(LPOLEUICHANGESOURCEW);
+UINT WINAPI  OleUIChangeSourceA(LPOLEUICHANGESOURCEA);
+#define      OleUIChangeSource WINELIB_NAME_AW(OleUIChangeSource)
+UINT WINAPI  OleUIEditLinksA(LPOLEUIEDITLINKSA lpOleUIEditLinks);
+UINT WINAPI  OleUIEditLinksW(LPOLEUIEDITLINKSW lpOleUIEditLinks);
+#define      OleUIEditLinks WINELIB_NAME_AW(OleUIEditLinks)
+BOOL WINAPI  OleUIUpdateLinksA(LPOLEUILINKCONTAINERA lpOleUILinkCntr, HWND hwndParent, LPSTR lpszTitle, INT cLinks);
+BOOL WINAPI  OleUIUpdateLinksW(LPOLEUILINKCONTAINERW lpOleUILinkCntr, HWND hwndParent, LPWSTR lpszTitle, INT cLinks);
+#define      OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks)
+BOOL WINAPI  OleUIAddVerbMenuA(LPOLEOBJECT lpOleObj, LPCSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
+  BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);
+BOOL WINAPI  OleUIAddVerbMenuW(LPOLEOBJECT lpOleObj, LPCWSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
+  BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);
+#define      OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu)
+UINT WINAPI  OleUIPasteSpecialA(LPOLEUIPASTESPECIALA lpOleUIPasteSpecial);
+UINT WINAPI  OleUIPasteSpecialW(LPOLEUIPASTESPECIALW lpOleUIPasteSpecial);
+#define      OleUIPasteSpecial WINELIB_NAME_AW(OleUIPasteSpecial)
+INT  __cdecl OleUIPromptUserA(INT,HWND, ...);
+INT  __cdecl OleUIPromptUserW(INT,HWND, ...);
+#define      OleUIPromptUser WINELIB_NAME_AW(OleUIPromptUser)
+
+#ifdef __cplusplus
+} /* Extern "C" */
+#endif
+
+
+#endif  /* __WINE_OLEDLG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h
new file mode 100644
index 0000000..3c39c58
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h
@@ -0,0 +1,3645 @@
+/*** Autogenerated by WIDL 1.1.36 from oleidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_OLEIDL_H
+#define __WIDL_OLEIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IOleWindow_FWD_DEFINED__
+#define __IOleWindow_FWD_DEFINED__
+typedef interface IOleWindow IOleWindow;
+#endif
+
+#ifndef __IOleInPlaceObject_FWD_DEFINED__
+#define __IOleInPlaceObject_FWD_DEFINED__
+typedef interface IOleInPlaceObject IOleInPlaceObject;
+#endif
+
+#ifndef __IOleInPlaceUIWindow_FWD_DEFINED__
+#define __IOleInPlaceUIWindow_FWD_DEFINED__
+typedef interface IOleInPlaceUIWindow IOleInPlaceUIWindow;
+#endif
+
+#ifndef __IOleInPlaceFrame_FWD_DEFINED__
+#define __IOleInPlaceFrame_FWD_DEFINED__
+typedef interface IOleInPlaceFrame IOleInPlaceFrame;
+#endif
+
+#ifndef __IOleInPlaceActiveObject_FWD_DEFINED__
+#define __IOleInPlaceActiveObject_FWD_DEFINED__
+typedef interface IOleInPlaceActiveObject IOleInPlaceActiveObject;
+#endif
+
+#ifndef __IOleInPlaceSite_FWD_DEFINED__
+#define __IOleInPlaceSite_FWD_DEFINED__
+typedef interface IOleInPlaceSite IOleInPlaceSite;
+#endif
+
+#ifndef __IParseDisplayName_FWD_DEFINED__
+#define __IParseDisplayName_FWD_DEFINED__
+typedef interface IParseDisplayName IParseDisplayName;
+#endif
+
+#ifndef __IOleContainer_FWD_DEFINED__
+#define __IOleContainer_FWD_DEFINED__
+typedef interface IOleContainer IOleContainer;
+#endif
+
+#ifndef __IOleItemContainer_FWD_DEFINED__
+#define __IOleItemContainer_FWD_DEFINED__
+typedef interface IOleItemContainer IOleItemContainer;
+#endif
+
+#ifndef __IOleLink_FWD_DEFINED__
+#define __IOleLink_FWD_DEFINED__
+typedef interface IOleLink IOleLink;
+#endif
+
+#ifndef __IOleClientSite_FWD_DEFINED__
+#define __IOleClientSite_FWD_DEFINED__
+typedef interface IOleClientSite IOleClientSite;
+#endif
+
+#ifndef __IOleCache_FWD_DEFINED__
+#define __IOleCache_FWD_DEFINED__
+typedef interface IOleCache IOleCache;
+#endif
+
+#ifndef __IOleCache2_FWD_DEFINED__
+#define __IOleCache2_FWD_DEFINED__
+typedef interface IOleCache2 IOleCache2;
+#endif
+
+#ifndef __IOleCacheControl_FWD_DEFINED__
+#define __IOleCacheControl_FWD_DEFINED__
+typedef interface IOleCacheControl IOleCacheControl;
+#endif
+
+#ifndef __IEnumOLEVERB_FWD_DEFINED__
+#define __IEnumOLEVERB_FWD_DEFINED__
+typedef interface IEnumOLEVERB IEnumOLEVERB;
+#endif
+
+#ifndef __IOleObject_FWD_DEFINED__
+#define __IOleObject_FWD_DEFINED__
+typedef interface IOleObject IOleObject;
+#endif
+
+#ifndef __IOleAdviseHolder_FWD_DEFINED__
+#define __IOleAdviseHolder_FWD_DEFINED__
+typedef interface IOleAdviseHolder IOleAdviseHolder;
+#endif
+
+#ifndef __IContinue_FWD_DEFINED__
+#define __IContinue_FWD_DEFINED__
+typedef interface IContinue IContinue;
+#endif
+
+#ifndef __IViewObject_FWD_DEFINED__
+#define __IViewObject_FWD_DEFINED__
+typedef interface IViewObject IViewObject;
+#endif
+
+#ifndef __IViewObject2_FWD_DEFINED__
+#define __IViewObject2_FWD_DEFINED__
+typedef interface IViewObject2 IViewObject2;
+#endif
+
+#ifndef __IDropSource_FWD_DEFINED__
+#define __IDropSource_FWD_DEFINED__
+typedef interface IDropSource IDropSource;
+#endif
+
+#ifndef __IDropTarget_FWD_DEFINED__
+#define __IDropTarget_FWD_DEFINED__
+typedef interface IDropTarget IDropTarget;
+#endif
+
+
+#ifndef __IOleInPlaceActiveObject_FWD_DEFINED__
+#define __IOleInPlaceActiveObject_FWD_DEFINED__
+typedef interface IOleInPlaceActiveObject IOleInPlaceActiveObject;
+#endif
+
+#include <winuser.h>
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+/*****************************************************************************
+ * IOLETypes interface (v0.0)
+ */
+#ifndef __IOLETypes_INTERFACE_DEFINED__
+#define __IOLETypes_INTERFACE_DEFINED__
+
+extern RPC_IF_HANDLE IOLETypes_v0_0_c_ifspec;
+extern RPC_IF_HANDLE IOLETypes_v0_0_s_ifspec;
+typedef enum tagOLERENDER {
+    OLERENDER_NONE = 0,
+    OLERENDER_DRAW = 1,
+    OLERENDER_FORMAT = 2,
+    OLERENDER_ASIS = 3
+} OLERENDER;
+typedef enum tagOLERENDER *LPOLERENDER;
+typedef struct tagOBJECTDESCRIPTOR {
+    ULONG cbSize;
+    CLSID clsid;
+    DWORD dwDrawAspect;
+    SIZEL sizel;
+    POINTL pointl;
+    DWORD dwStatus;
+    DWORD dwFullUserTypeName;
+    DWORD dwSrcOfCopy;
+} OBJECTDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *POBJECTDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *LPOBJECTDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR LINKSRCDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *PLINKSRCDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *LPLINKSRCDESCRIPTOR;
+
+#endif  /* __IOLETypes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleWindow interface
+ */
+#ifndef __IOleWindow_INTERFACE_DEFINED__
+#define __IOleWindow_INTERFACE_DEFINED__
+
+typedef IOleWindow *LPOLEWINDOW;
+DEFINE_GUID(IID_IOleWindow, 0x00000114, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleWindow : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetWindow(
+        HWND *phwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(
+        BOOL fEnterMode) = 0;
+
+};
+#else
+typedef struct IOleWindowVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleWindow* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleWindow* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleWindow* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IOleWindow* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IOleWindow* This,
+        BOOL fEnterMode);
+
+    END_INTERFACE
+} IOleWindowVtbl;
+interface IOleWindow {
+    CONST_VTBL IOleWindowVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleWindow_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleWindow_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleWindow_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleWindow_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleWindow_GetWindow_Proxy(
+    IOleWindow* This,
+    HWND *phwnd);
+void __RPC_STUB IOleWindow_GetWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleWindow_ContextSensitiveHelp_Proxy(
+    IOleWindow* This,
+    BOOL fEnterMode);
+void __RPC_STUB IOleWindow_ContextSensitiveHelp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleWindow_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceObject interface
+ */
+#ifndef __IOleInPlaceObject_INTERFACE_DEFINED__
+#define __IOleInPlaceObject_INTERFACE_DEFINED__
+
+typedef IOleInPlaceObject *LPOLEINPLACEOBJECT;
+DEFINE_GUID(IID_IOleInPlaceObject, 0x00000113, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceObject : public IOleWindow
+{
+    virtual HRESULT STDMETHODCALLTYPE InPlaceDeactivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UIDeactivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetObjectRects(
+        LPCRECT lprcPosRect,
+        LPCRECT lprcClipRect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReactivateAndUndo(
+        ) = 0;
+
+};
+#else
+typedef struct IOleInPlaceObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleInPlaceObject* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleInPlaceObject* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleInPlaceObject* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IOleInPlaceObject* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IOleInPlaceObject* This,
+        BOOL fEnterMode);
+
+    /*** IOleInPlaceObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *InPlaceDeactivate)(
+        IOleInPlaceObject* This);
+
+    HRESULT (STDMETHODCALLTYPE *UIDeactivate)(
+        IOleInPlaceObject* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetObjectRects)(
+        IOleInPlaceObject* This,
+        LPCRECT lprcPosRect,
+        LPCRECT lprcClipRect);
+
+    HRESULT (STDMETHODCALLTYPE *ReactivateAndUndo)(
+        IOleInPlaceObject* This);
+
+    END_INTERFACE
+} IOleInPlaceObjectVtbl;
+interface IOleInPlaceObject {
+    CONST_VTBL IOleInPlaceObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceObject_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceObject_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceObject methods ***/
+#define IOleInPlaceObject_InPlaceDeactivate(This) (This)->lpVtbl->InPlaceDeactivate(This)
+#define IOleInPlaceObject_UIDeactivate(This) (This)->lpVtbl->UIDeactivate(This)
+#define IOleInPlaceObject_SetObjectRects(This,lprcPosRect,lprcClipRect) (This)->lpVtbl->SetObjectRects(This,lprcPosRect,lprcClipRect)
+#define IOleInPlaceObject_ReactivateAndUndo(This) (This)->lpVtbl->ReactivateAndUndo(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_InPlaceDeactivate_Proxy(
+    IOleInPlaceObject* This);
+void __RPC_STUB IOleInPlaceObject_InPlaceDeactivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_UIDeactivate_Proxy(
+    IOleInPlaceObject* This);
+void __RPC_STUB IOleInPlaceObject_UIDeactivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_SetObjectRects_Proxy(
+    IOleInPlaceObject* This,
+    LPCRECT lprcPosRect,
+    LPCRECT lprcClipRect);
+void __RPC_STUB IOleInPlaceObject_SetObjectRects_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_ReactivateAndUndo_Proxy(
+    IOleInPlaceObject* This);
+void __RPC_STUB IOleInPlaceObject_ReactivateAndUndo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleInPlaceObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceUIWindow interface
+ */
+#ifndef __IOleInPlaceUIWindow_INTERFACE_DEFINED__
+#define __IOleInPlaceUIWindow_INTERFACE_DEFINED__
+
+typedef IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
+typedef RECT BORDERWIDTHS;
+typedef LPRECT LPBORDERWIDTHS;
+typedef LPCRECT LPCBORDERWIDTHS;
+DEFINE_GUID(IID_IOleInPlaceUIWindow, 0x00000115, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceUIWindow : public IOleWindow
+{
+    virtual HRESULT STDMETHODCALLTYPE GetBorder(
+        LPRECT lprectBorder) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestBorderSpace(
+        LPCBORDERWIDTHS pborderwidths) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBorderSpace(
+        LPCBORDERWIDTHS pborderwidths) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetActiveObject(
+        IOleInPlaceActiveObject *pActiveObject,
+        LPCOLESTR pszObjName) = 0;
+
+};
+#else
+typedef struct IOleInPlaceUIWindowVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleInPlaceUIWindow* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleInPlaceUIWindow* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleInPlaceUIWindow* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IOleInPlaceUIWindow* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IOleInPlaceUIWindow* This,
+        BOOL fEnterMode);
+
+    /*** IOleInPlaceUIWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBorder)(
+        IOleInPlaceUIWindow* This,
+        LPRECT lprectBorder);
+
+    HRESULT (STDMETHODCALLTYPE *RequestBorderSpace)(
+        IOleInPlaceUIWindow* This,
+        LPCBORDERWIDTHS pborderwidths);
+
+    HRESULT (STDMETHODCALLTYPE *SetBorderSpace)(
+        IOleInPlaceUIWindow* This,
+        LPCBORDERWIDTHS pborderwidths);
+
+    HRESULT (STDMETHODCALLTYPE *SetActiveObject)(
+        IOleInPlaceUIWindow* This,
+        IOleInPlaceActiveObject *pActiveObject,
+        LPCOLESTR pszObjName);
+
+    END_INTERFACE
+} IOleInPlaceUIWindowVtbl;
+interface IOleInPlaceUIWindow {
+    CONST_VTBL IOleInPlaceUIWindowVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceUIWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceUIWindow_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceUIWindow_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceUIWindow_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceUIWindow_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceUIWindow methods ***/
+#define IOleInPlaceUIWindow_GetBorder(This,lprectBorder) (This)->lpVtbl->GetBorder(This,lprectBorder)
+#define IOleInPlaceUIWindow_RequestBorderSpace(This,pborderwidths) (This)->lpVtbl->RequestBorderSpace(This,pborderwidths)
+#define IOleInPlaceUIWindow_SetBorderSpace(This,pborderwidths) (This)->lpVtbl->SetBorderSpace(This,pborderwidths)
+#define IOleInPlaceUIWindow_SetActiveObject(This,pActiveObject,pszObjName) (This)->lpVtbl->SetActiveObject(This,pActiveObject,pszObjName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_GetBorder_Proxy(
+    IOleInPlaceUIWindow* This,
+    LPRECT lprectBorder);
+void __RPC_STUB IOleInPlaceUIWindow_GetBorder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_RequestBorderSpace_Proxy(
+    IOleInPlaceUIWindow* This,
+    LPCBORDERWIDTHS pborderwidths);
+void __RPC_STUB IOleInPlaceUIWindow_RequestBorderSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_SetBorderSpace_Proxy(
+    IOleInPlaceUIWindow* This,
+    LPCBORDERWIDTHS pborderwidths);
+void __RPC_STUB IOleInPlaceUIWindow_SetBorderSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_SetActiveObject_Proxy(
+    IOleInPlaceUIWindow* This,
+    IOleInPlaceActiveObject *pActiveObject,
+    LPCOLESTR pszObjName);
+void __RPC_STUB IOleInPlaceUIWindow_SetActiveObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleInPlaceUIWindow_INTERFACE_DEFINED__ */
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef TranslateAccelerator
+#endif
+/*****************************************************************************
+ * IOleInPlaceFrame interface
+ */
+#ifndef __IOleInPlaceFrame_INTERFACE_DEFINED__
+#define __IOleInPlaceFrame_INTERFACE_DEFINED__
+
+typedef IOleInPlaceFrame *LPOLEINPLACEFRAME;
+typedef struct tagOleInPlaceFrameInfo {
+    UINT cb;
+    BOOL fMDIApp;
+    HWND hwndFrame;
+    HACCEL haccel;
+    UINT cAccelEntries;
+} OLEINPLACEFRAMEINFO;
+typedef struct tagOleInPlaceFrameInfo *LPOLEINPLACEFRAMEINFO;
+typedef struct tagOleMenuGroupWidths {
+    LONG width[6];
+} OLEMENUGROUPWIDTHS;
+typedef struct tagOleMenuGroupWidths *LPOLEMENUGROUPWIDTHS;
+typedef HGLOBAL HOLEMENU;
+DEFINE_GUID(IID_IOleInPlaceFrame, 0x00000116, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceFrame : public IOleInPlaceUIWindow
+{
+    virtual HRESULT STDMETHODCALLTYPE InsertMenus(
+        HMENU hmenuShared,
+        LPOLEMENUGROUPWIDTHS lpMenuWidths) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMenu(
+        HMENU hmenuShared,
+        HOLEMENU holemenu,
+        HWND hwndActiveObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveMenus(
+        HMENU hmenuShared) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStatusText(
+        LPCOLESTR pszStatusText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableModeless(
+        BOOL fEnable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
+        LPMSG lpmsg,
+        WORD wID) = 0;
+
+};
+#else
+typedef struct IOleInPlaceFrameVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleInPlaceFrame* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleInPlaceFrame* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleInPlaceFrame* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IOleInPlaceFrame* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IOleInPlaceFrame* This,
+        BOOL fEnterMode);
+
+    /*** IOleInPlaceUIWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBorder)(
+        IOleInPlaceFrame* This,
+        LPRECT lprectBorder);
+
+    HRESULT (STDMETHODCALLTYPE *RequestBorderSpace)(
+        IOleInPlaceFrame* This,
+        LPCBORDERWIDTHS pborderwidths);
+
+    HRESULT (STDMETHODCALLTYPE *SetBorderSpace)(
+        IOleInPlaceFrame* This,
+        LPCBORDERWIDTHS pborderwidths);
+
+    HRESULT (STDMETHODCALLTYPE *SetActiveObject)(
+        IOleInPlaceFrame* This,
+        IOleInPlaceActiveObject *pActiveObject,
+        LPCOLESTR pszObjName);
+
+    /*** IOleInPlaceFrame methods ***/
+    HRESULT (STDMETHODCALLTYPE *InsertMenus)(
+        IOleInPlaceFrame* This,
+        HMENU hmenuShared,
+        LPOLEMENUGROUPWIDTHS lpMenuWidths);
+
+    HRESULT (STDMETHODCALLTYPE *SetMenu)(
+        IOleInPlaceFrame* This,
+        HMENU hmenuShared,
+        HOLEMENU holemenu,
+        HWND hwndActiveObject);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveMenus)(
+        IOleInPlaceFrame* This,
+        HMENU hmenuShared);
+
+    HRESULT (STDMETHODCALLTYPE *SetStatusText)(
+        IOleInPlaceFrame* This,
+        LPCOLESTR pszStatusText);
+
+    HRESULT (STDMETHODCALLTYPE *EnableModeless)(
+        IOleInPlaceFrame* This,
+        BOOL fEnable);
+
+    HRESULT (STDMETHODCALLTYPE *TranslateAccelerator)(
+        IOleInPlaceFrame* This,
+        LPMSG lpmsg,
+        WORD wID);
+
+    END_INTERFACE
+} IOleInPlaceFrameVtbl;
+interface IOleInPlaceFrame {
+    CONST_VTBL IOleInPlaceFrameVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceFrame_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceFrame_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceFrame_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceFrame_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceFrame_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceUIWindow methods ***/
+#define IOleInPlaceFrame_GetBorder(This,lprectBorder) (This)->lpVtbl->GetBorder(This,lprectBorder)
+#define IOleInPlaceFrame_RequestBorderSpace(This,pborderwidths) (This)->lpVtbl->RequestBorderSpace(This,pborderwidths)
+#define IOleInPlaceFrame_SetBorderSpace(This,pborderwidths) (This)->lpVtbl->SetBorderSpace(This,pborderwidths)
+#define IOleInPlaceFrame_SetActiveObject(This,pActiveObject,pszObjName) (This)->lpVtbl->SetActiveObject(This,pActiveObject,pszObjName)
+/*** IOleInPlaceFrame methods ***/
+#define IOleInPlaceFrame_InsertMenus(This,hmenuShared,lpMenuWidths) (This)->lpVtbl->InsertMenus(This,hmenuShared,lpMenuWidths)
+#define IOleInPlaceFrame_SetMenu(This,hmenuShared,holemenu,hwndActiveObject) (This)->lpVtbl->SetMenu(This,hmenuShared,holemenu,hwndActiveObject)
+#define IOleInPlaceFrame_RemoveMenus(This,hmenuShared) (This)->lpVtbl->RemoveMenus(This,hmenuShared)
+#define IOleInPlaceFrame_SetStatusText(This,pszStatusText) (This)->lpVtbl->SetStatusText(This,pszStatusText)
+#define IOleInPlaceFrame_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
+#define IOleInPlaceFrame_TranslateAccelerator(This,lpmsg,wID) (This)->lpVtbl->TranslateAccelerator(This,lpmsg,wID)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_InsertMenus_Proxy(
+    IOleInPlaceFrame* This,
+    HMENU hmenuShared,
+    LPOLEMENUGROUPWIDTHS lpMenuWidths);
+void __RPC_STUB IOleInPlaceFrame_InsertMenus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_SetMenu_Proxy(
+    IOleInPlaceFrame* This,
+    HMENU hmenuShared,
+    HOLEMENU holemenu,
+    HWND hwndActiveObject);
+void __RPC_STUB IOleInPlaceFrame_SetMenu_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_RemoveMenus_Proxy(
+    IOleInPlaceFrame* This,
+    HMENU hmenuShared);
+void __RPC_STUB IOleInPlaceFrame_RemoveMenus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_SetStatusText_Proxy(
+    IOleInPlaceFrame* This,
+    LPCOLESTR pszStatusText);
+void __RPC_STUB IOleInPlaceFrame_SetStatusText_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_EnableModeless_Proxy(
+    IOleInPlaceFrame* This,
+    BOOL fEnable);
+void __RPC_STUB IOleInPlaceFrame_EnableModeless_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_TranslateAccelerator_Proxy(
+    IOleInPlaceFrame* This,
+    LPMSG lpmsg,
+    WORD wID);
+void __RPC_STUB IOleInPlaceFrame_TranslateAccelerator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleInPlaceFrame_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceActiveObject interface
+ */
+#ifndef __IOleInPlaceActiveObject_INTERFACE_DEFINED__
+#define __IOleInPlaceActiveObject_INTERFACE_DEFINED__
+
+typedef IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
+DEFINE_GUID(IID_IOleInPlaceActiveObject, 0x00000117, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceActiveObject : public IOleWindow
+{
+    virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
+        LPMSG lpmsg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(
+        BOOL fActivate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate(
+        BOOL fActivate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ResizeBorder(
+        LPCRECT prcBorder,
+        IOleInPlaceUIWindow *pUIWindow,
+        BOOL fFrameWindow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableModeless(
+        BOOL fEnable) = 0;
+
+};
+#else
+typedef struct IOleInPlaceActiveObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleInPlaceActiveObject* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleInPlaceActiveObject* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleInPlaceActiveObject* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IOleInPlaceActiveObject* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IOleInPlaceActiveObject* This,
+        BOOL fEnterMode);
+
+    /*** IOleInPlaceActiveObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *TranslateAccelerator)(
+        IOleInPlaceActiveObject* This,
+        LPMSG lpmsg);
+
+    HRESULT (STDMETHODCALLTYPE *OnFrameWindowActivate)(
+        IOleInPlaceActiveObject* This,
+        BOOL fActivate);
+
+    HRESULT (STDMETHODCALLTYPE *OnDocWindowActivate)(
+        IOleInPlaceActiveObject* This,
+        BOOL fActivate);
+
+    HRESULT (STDMETHODCALLTYPE *ResizeBorder)(
+        IOleInPlaceActiveObject* This,
+        LPCRECT prcBorder,
+        IOleInPlaceUIWindow *pUIWindow,
+        BOOL fFrameWindow);
+
+    HRESULT (STDMETHODCALLTYPE *EnableModeless)(
+        IOleInPlaceActiveObject* This,
+        BOOL fEnable);
+
+    END_INTERFACE
+} IOleInPlaceActiveObjectVtbl;
+interface IOleInPlaceActiveObject {
+    CONST_VTBL IOleInPlaceActiveObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceActiveObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceActiveObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceActiveObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceActiveObject_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceActiveObject_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceActiveObject methods ***/
+#define IOleInPlaceActiveObject_TranslateAccelerator(This,lpmsg) (This)->lpVtbl->TranslateAccelerator(This,lpmsg)
+#define IOleInPlaceActiveObject_OnFrameWindowActivate(This,fActivate) (This)->lpVtbl->OnFrameWindowActivate(This,fActivate)
+#define IOleInPlaceActiveObject_OnDocWindowActivate(This,fActivate) (This)->lpVtbl->OnDocWindowActivate(This,fActivate)
+#define IOleInPlaceActiveObject_ResizeBorder(This,prcBorder,pUIWindow,fFrameWindow) (This)->lpVtbl->ResizeBorder(This,prcBorder,pUIWindow,fFrameWindow)
+#define IOleInPlaceActiveObject_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_RemoteTranslateAccelerator_Proxy(
+    IOleInPlaceActiveObject* This);
+void __RPC_STUB IOleInPlaceActiveObject_RemoteTranslateAccelerator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_OnFrameWindowActivate_Proxy(
+    IOleInPlaceActiveObject* This,
+    BOOL fActivate);
+void __RPC_STUB IOleInPlaceActiveObject_OnFrameWindowActivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_OnDocWindowActivate_Proxy(
+    IOleInPlaceActiveObject* This,
+    BOOL fActivate);
+void __RPC_STUB IOleInPlaceActiveObject_OnDocWindowActivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_RemoteResizeBorder_Proxy(
+    IOleInPlaceActiveObject* This,
+    LPCRECT prcBorder,
+    REFIID riid,
+    IOleInPlaceUIWindow *pUIWindow,
+    BOOL fFrameWindow);
+void __RPC_STUB IOleInPlaceActiveObject_RemoteResizeBorder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_EnableModeless_Proxy(
+    IOleInPlaceActiveObject* This,
+    BOOL fEnable);
+void __RPC_STUB IOleInPlaceActiveObject_EnableModeless_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IOleInPlaceActiveObject_TranslateAccelerator_Proxy(
+    IOleInPlaceActiveObject* This,
+    LPMSG lpmsg);
+HRESULT __RPC_STUB IOleInPlaceActiveObject_TranslateAccelerator_Stub(
+    IOleInPlaceActiveObject* This);
+HRESULT CALLBACK IOleInPlaceActiveObject_ResizeBorder_Proxy(
+    IOleInPlaceActiveObject* This,
+    LPCRECT prcBorder,
+    IOleInPlaceUIWindow *pUIWindow,
+    BOOL fFrameWindow);
+HRESULT __RPC_STUB IOleInPlaceActiveObject_ResizeBorder_Stub(
+    IOleInPlaceActiveObject* This,
+    LPCRECT prcBorder,
+    REFIID riid,
+    IOleInPlaceUIWindow *pUIWindow,
+    BOOL fFrameWindow);
+
+#endif  /* __IOleInPlaceActiveObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceSite interface
+ */
+#ifndef __IOleInPlaceSite_INTERFACE_DEFINED__
+#define __IOleInPlaceSite_INTERFACE_DEFINED__
+
+typedef IOleInPlaceSite *LPOLEINPLACESITE;
+DEFINE_GUID(IID_IOleInPlaceSite, 0x00000119, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceSite : public IOleWindow
+{
+    virtual HRESULT STDMETHODCALLTYPE CanInPlaceActivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnInPlaceActivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnUIActivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetWindowContext(
+        IOleInPlaceFrame **ppFrame,
+        IOleInPlaceUIWindow **ppDoc,
+        LPRECT lprcPosRect,
+        LPRECT lprcClipRect,
+        LPOLEINPLACEFRAMEINFO lpFrameInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Scroll(
+        SIZE scrollExtent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnUIDeactivate(
+        BOOL fUndoable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DiscardUndoState(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeactivateAndUndo(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnPosRectChange(
+        LPCRECT lprcPosRect) = 0;
+
+};
+#else
+typedef struct IOleInPlaceSiteVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleInPlaceSite* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleInPlaceSite* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleInPlaceSite* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IOleInPlaceSite* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IOleInPlaceSite* This,
+        BOOL fEnterMode);
+
+    /*** IOleInPlaceSite methods ***/
+    HRESULT (STDMETHODCALLTYPE *CanInPlaceActivate)(
+        IOleInPlaceSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *OnInPlaceActivate)(
+        IOleInPlaceSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *OnUIActivate)(
+        IOleInPlaceSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetWindowContext)(
+        IOleInPlaceSite* This,
+        IOleInPlaceFrame **ppFrame,
+        IOleInPlaceUIWindow **ppDoc,
+        LPRECT lprcPosRect,
+        LPRECT lprcClipRect,
+        LPOLEINPLACEFRAMEINFO lpFrameInfo);
+
+    HRESULT (STDMETHODCALLTYPE *Scroll)(
+        IOleInPlaceSite* This,
+        SIZE scrollExtent);
+
+    HRESULT (STDMETHODCALLTYPE *OnUIDeactivate)(
+        IOleInPlaceSite* This,
+        BOOL fUndoable);
+
+    HRESULT (STDMETHODCALLTYPE *OnInPlaceDeactivate)(
+        IOleInPlaceSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *DiscardUndoState)(
+        IOleInPlaceSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *DeactivateAndUndo)(
+        IOleInPlaceSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *OnPosRectChange)(
+        IOleInPlaceSite* This,
+        LPCRECT lprcPosRect);
+
+    END_INTERFACE
+} IOleInPlaceSiteVtbl;
+interface IOleInPlaceSite {
+    CONST_VTBL IOleInPlaceSiteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceSite_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceSite_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceSite_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceSite methods ***/
+#define IOleInPlaceSite_CanInPlaceActivate(This) (This)->lpVtbl->CanInPlaceActivate(This)
+#define IOleInPlaceSite_OnInPlaceActivate(This) (This)->lpVtbl->OnInPlaceActivate(This)
+#define IOleInPlaceSite_OnUIActivate(This) (This)->lpVtbl->OnUIActivate(This)
+#define IOleInPlaceSite_GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo) (This)->lpVtbl->GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo)
+#define IOleInPlaceSite_Scroll(This,scrollExtent) (This)->lpVtbl->Scroll(This,scrollExtent)
+#define IOleInPlaceSite_OnUIDeactivate(This,fUndoable) (This)->lpVtbl->OnUIDeactivate(This,fUndoable)
+#define IOleInPlaceSite_OnInPlaceDeactivate(This) (This)->lpVtbl->OnInPlaceDeactivate(This)
+#define IOleInPlaceSite_DiscardUndoState(This) (This)->lpVtbl->DiscardUndoState(This)
+#define IOleInPlaceSite_DeactivateAndUndo(This) (This)->lpVtbl->DeactivateAndUndo(This)
+#define IOleInPlaceSite_OnPosRectChange(This,lprcPosRect) (This)->lpVtbl->OnPosRectChange(This,lprcPosRect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_CanInPlaceActivate_Proxy(
+    IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_CanInPlaceActivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnInPlaceActivate_Proxy(
+    IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_OnInPlaceActivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnUIActivate_Proxy(
+    IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_OnUIActivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_GetWindowContext_Proxy(
+    IOleInPlaceSite* This,
+    IOleInPlaceFrame **ppFrame,
+    IOleInPlaceUIWindow **ppDoc,
+    LPRECT lprcPosRect,
+    LPRECT lprcClipRect,
+    LPOLEINPLACEFRAMEINFO lpFrameInfo);
+void __RPC_STUB IOleInPlaceSite_GetWindowContext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_Scroll_Proxy(
+    IOleInPlaceSite* This,
+    SIZE scrollExtent);
+void __RPC_STUB IOleInPlaceSite_Scroll_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnUIDeactivate_Proxy(
+    IOleInPlaceSite* This,
+    BOOL fUndoable);
+void __RPC_STUB IOleInPlaceSite_OnUIDeactivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnInPlaceDeactivate_Proxy(
+    IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_OnInPlaceDeactivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_DiscardUndoState_Proxy(
+    IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_DiscardUndoState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_DeactivateAndUndo_Proxy(
+    IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_DeactivateAndUndo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnPosRectChange_Proxy(
+    IOleInPlaceSite* This,
+    LPCRECT lprcPosRect);
+void __RPC_STUB IOleInPlaceSite_OnPosRectChange_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleInPlaceSite_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IParseDisplayName interface
+ */
+#ifndef __IParseDisplayName_INTERFACE_DEFINED__
+#define __IParseDisplayName_INTERFACE_DEFINED__
+
+typedef IParseDisplayName *LPPARSEDISPLAYNAME;
+DEFINE_GUID(IID_IParseDisplayName, 0x0000011a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IParseDisplayName : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
+        IBindCtx *pbc,
+        LPOLESTR pszDisplayName,
+        ULONG *pchEaten,
+        IMoniker **ppmkOut) = 0;
+
+};
+#else
+typedef struct IParseDisplayNameVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IParseDisplayName* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IParseDisplayName* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IParseDisplayName* This);
+
+    /*** IParseDisplayName methods ***/
+    HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+        IParseDisplayName* This,
+        IBindCtx *pbc,
+        LPOLESTR pszDisplayName,
+        ULONG *pchEaten,
+        IMoniker **ppmkOut);
+
+    END_INTERFACE
+} IParseDisplayNameVtbl;
+interface IParseDisplayName {
+    CONST_VTBL IParseDisplayNameVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IParseDisplayName_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IParseDisplayName_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IParseDisplayName_Release(This) (This)->lpVtbl->Release(This)
+/*** IParseDisplayName methods ***/
+#define IParseDisplayName_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IParseDisplayName_ParseDisplayName_Proxy(
+    IParseDisplayName* This,
+    IBindCtx *pbc,
+    LPOLESTR pszDisplayName,
+    ULONG *pchEaten,
+    IMoniker **ppmkOut);
+void __RPC_STUB IParseDisplayName_ParseDisplayName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IParseDisplayName_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleContainer interface
+ */
+#ifndef __IOleContainer_INTERFACE_DEFINED__
+#define __IOleContainer_INTERFACE_DEFINED__
+
+typedef IOleContainer *LPOLECONTAINER;
+DEFINE_GUID(IID_IOleContainer, 0x0000011b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleContainer : public IParseDisplayName
+{
+    virtual HRESULT STDMETHODCALLTYPE EnumObjects(
+        DWORD grfFlags,
+        IEnumUnknown **ppenum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockContainer(
+        BOOL fLock) = 0;
+
+};
+#else
+typedef struct IOleContainerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleContainer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleContainer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleContainer* This);
+
+    /*** IParseDisplayName methods ***/
+    HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+        IOleContainer* This,
+        IBindCtx *pbc,
+        LPOLESTR pszDisplayName,
+        ULONG *pchEaten,
+        IMoniker **ppmkOut);
+
+    /*** IOleContainer methods ***/
+    HRESULT (STDMETHODCALLTYPE *EnumObjects)(
+        IOleContainer* This,
+        DWORD grfFlags,
+        IEnumUnknown **ppenum);
+
+    HRESULT (STDMETHODCALLTYPE *LockContainer)(
+        IOleContainer* This,
+        BOOL fLock);
+
+    END_INTERFACE
+} IOleContainerVtbl;
+interface IOleContainer {
+    CONST_VTBL IOleContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IParseDisplayName methods ***/
+#define IOleContainer_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)
+/*** IOleContainer methods ***/
+#define IOleContainer_EnumObjects(This,grfFlags,ppenum) (This)->lpVtbl->EnumObjects(This,grfFlags,ppenum)
+#define IOleContainer_LockContainer(This,fLock) (This)->lpVtbl->LockContainer(This,fLock)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleContainer_EnumObjects_Proxy(
+    IOleContainer* This,
+    DWORD grfFlags,
+    IEnumUnknown **ppenum);
+void __RPC_STUB IOleContainer_EnumObjects_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleContainer_LockContainer_Proxy(
+    IOleContainer* This,
+    BOOL fLock);
+void __RPC_STUB IOleContainer_LockContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleItemContainer interface
+ */
+#ifndef __IOleItemContainer_INTERFACE_DEFINED__
+#define __IOleItemContainer_INTERFACE_DEFINED__
+
+typedef IOleItemContainer *LPOLEITEMCONTAINER;
+typedef enum tagBINDSPEED {
+    BINDSPEED_INDEFINITE = 1,
+    BINDSPEED_MODERATE = 2,
+    BINDSPEED_IMMEDIATE = 3
+} BINDSPEED;
+typedef enum tagOLECONTF {
+    OLECONTF_EMBEDDINGS = 1,
+    OLECONTF_LINKS = 2,
+    OLECONTF_OTHERS = 4,
+    OLECONTF_ONLYUSER = 8,
+    OLECONTF_ONLYIFRUNNING = 16
+} OLECONTF;
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetObject
+#endif
+DEFINE_GUID(IID_IOleItemContainer, 0x0000011c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleItemContainer : public IOleContainer
+{
+    virtual HRESULT STDMETHODCALLTYPE GetObject(
+        LPOLESTR pszItem,
+        DWORD dwSpeedNeeded,
+        IBindCtx *pbc,
+        REFIID riid,
+        void **ppvObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetObjectStorage(
+        LPOLESTR pszItem,
+        IBindCtx *pbc,
+        REFIID riid,
+        void **ppvStorage) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsRunning(
+        LPOLESTR pszItem) = 0;
+
+};
+#else
+typedef struct IOleItemContainerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleItemContainer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleItemContainer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleItemContainer* This);
+
+    /*** IParseDisplayName methods ***/
+    HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+        IOleItemContainer* This,
+        IBindCtx *pbc,
+        LPOLESTR pszDisplayName,
+        ULONG *pchEaten,
+        IMoniker **ppmkOut);
+
+    /*** IOleContainer methods ***/
+    HRESULT (STDMETHODCALLTYPE *EnumObjects)(
+        IOleItemContainer* This,
+        DWORD grfFlags,
+        IEnumUnknown **ppenum);
+
+    HRESULT (STDMETHODCALLTYPE *LockContainer)(
+        IOleItemContainer* This,
+        BOOL fLock);
+
+    /*** IOleItemContainer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetObject)(
+        IOleItemContainer* This,
+        LPOLESTR pszItem,
+        DWORD dwSpeedNeeded,
+        IBindCtx *pbc,
+        REFIID riid,
+        void **ppvObject);
+
+    HRESULT (STDMETHODCALLTYPE *GetObjectStorage)(
+        IOleItemContainer* This,
+        LPOLESTR pszItem,
+        IBindCtx *pbc,
+        REFIID riid,
+        void **ppvStorage);
+
+    HRESULT (STDMETHODCALLTYPE *IsRunning)(
+        IOleItemContainer* This,
+        LPOLESTR pszItem);
+
+    END_INTERFACE
+} IOleItemContainerVtbl;
+interface IOleItemContainer {
+    CONST_VTBL IOleItemContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleItemContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleItemContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleItemContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IParseDisplayName methods ***/
+#define IOleItemContainer_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)
+/*** IOleContainer methods ***/
+#define IOleItemContainer_EnumObjects(This,grfFlags,ppenum) (This)->lpVtbl->EnumObjects(This,grfFlags,ppenum)
+#define IOleItemContainer_LockContainer(This,fLock) (This)->lpVtbl->LockContainer(This,fLock)
+/*** IOleItemContainer methods ***/
+#define IOleItemContainer_GetObject(This,pszItem,dwSpeedNeeded,pbc,riid,ppvObject) (This)->lpVtbl->GetObject(This,pszItem,dwSpeedNeeded,pbc,riid,ppvObject)
+#define IOleItemContainer_GetObjectStorage(This,pszItem,pbc,riid,ppvStorage) (This)->lpVtbl->GetObjectStorage(This,pszItem,pbc,riid,ppvStorage)
+#define IOleItemContainer_IsRunning(This,pszItem) (This)->lpVtbl->IsRunning(This,pszItem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleItemContainer_GetObject_Proxy(
+    IOleItemContainer* This,
+    LPOLESTR pszItem,
+    DWORD dwSpeedNeeded,
+    IBindCtx *pbc,
+    REFIID riid,
+    void **ppvObject);
+void __RPC_STUB IOleItemContainer_GetObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleItemContainer_GetObjectStorage_Proxy(
+    IOleItemContainer* This,
+    LPOLESTR pszItem,
+    IBindCtx *pbc,
+    REFIID riid,
+    void **ppvStorage);
+void __RPC_STUB IOleItemContainer_GetObjectStorage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleItemContainer_IsRunning_Proxy(
+    IOleItemContainer* This,
+    LPOLESTR pszItem);
+void __RPC_STUB IOleItemContainer_IsRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleItemContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleLink interface
+ */
+#ifndef __IOleLink_INTERFACE_DEFINED__
+#define __IOleLink_INTERFACE_DEFINED__
+
+typedef IOleLink *LPOLELINK;
+typedef enum tagOLEUPDATE {
+    OLEUPDATE_ALWAYS = 1,
+    OLEUPDATE_ONCALL = 3
+} OLEUPDATE;
+typedef enum tagOLEUPDATE *POLEUPDATE;
+typedef enum tagOLEUPDATE *LPOLEUPDATE;
+typedef enum tagOLELINKBIND {
+    OLELINKBIND_EVENIFCLASSDIFF = 1
+} OLELINKBIND;
+DEFINE_GUID(IID_IOleLink, 0x0000011d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleLink : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetUpdateOptions(
+        DWORD dwUpdateOpt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUpdateOptions(
+        DWORD *pdwUpdateOpt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSourceMoniker(
+        IMoniker *pmk,
+        REFCLSID rclsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSourceMoniker(
+        IMoniker **ppmk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSourceDisplayName(
+        LPCOLESTR pszStatusText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSourceDisplayName(
+        LPOLESTR *ppszDisplayName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindToSource(
+        DWORD bindflags,
+        IBindCtx *pbc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindIfRunning(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBoundSource(
+        IUnknown **ppunk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnbindSource(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Update(
+        IBindCtx *pbc) = 0;
+
+};
+#else
+typedef struct IOleLinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleLink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleLink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleLink* This);
+
+    /*** IOleLink methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetUpdateOptions)(
+        IOleLink* This,
+        DWORD dwUpdateOpt);
+
+    HRESULT (STDMETHODCALLTYPE *GetUpdateOptions)(
+        IOleLink* This,
+        DWORD *pdwUpdateOpt);
+
+    HRESULT (STDMETHODCALLTYPE *SetSourceMoniker)(
+        IOleLink* This,
+        IMoniker *pmk,
+        REFCLSID rclsid);
+
+    HRESULT (STDMETHODCALLTYPE *GetSourceMoniker)(
+        IOleLink* This,
+        IMoniker **ppmk);
+
+    HRESULT (STDMETHODCALLTYPE *SetSourceDisplayName)(
+        IOleLink* This,
+        LPCOLESTR pszStatusText);
+
+    HRESULT (STDMETHODCALLTYPE *GetSourceDisplayName)(
+        IOleLink* This,
+        LPOLESTR *ppszDisplayName);
+
+    HRESULT (STDMETHODCALLTYPE *BindToSource)(
+        IOleLink* This,
+        DWORD bindflags,
+        IBindCtx *pbc);
+
+    HRESULT (STDMETHODCALLTYPE *BindIfRunning)(
+        IOleLink* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetBoundSource)(
+        IOleLink* This,
+        IUnknown **ppunk);
+
+    HRESULT (STDMETHODCALLTYPE *UnbindSource)(
+        IOleLink* This);
+
+    HRESULT (STDMETHODCALLTYPE *Update)(
+        IOleLink* This,
+        IBindCtx *pbc);
+
+    END_INTERFACE
+} IOleLinkVtbl;
+interface IOleLink {
+    CONST_VTBL IOleLinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleLink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleLink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleLink_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleLink methods ***/
+#define IOleLink_SetUpdateOptions(This,dwUpdateOpt) (This)->lpVtbl->SetUpdateOptions(This,dwUpdateOpt)
+#define IOleLink_GetUpdateOptions(This,pdwUpdateOpt) (This)->lpVtbl->GetUpdateOptions(This,pdwUpdateOpt)
+#define IOleLink_SetSourceMoniker(This,pmk,rclsid) (This)->lpVtbl->SetSourceMoniker(This,pmk,rclsid)
+#define IOleLink_GetSourceMoniker(This,ppmk) (This)->lpVtbl->GetSourceMoniker(This,ppmk)
+#define IOleLink_SetSourceDisplayName(This,pszStatusText) (This)->lpVtbl->SetSourceDisplayName(This,pszStatusText)
+#define IOleLink_GetSourceDisplayName(This,ppszDisplayName) (This)->lpVtbl->GetSourceDisplayName(This,ppszDisplayName)
+#define IOleLink_BindToSource(This,bindflags,pbc) (This)->lpVtbl->BindToSource(This,bindflags,pbc)
+#define IOleLink_BindIfRunning(This) (This)->lpVtbl->BindIfRunning(This)
+#define IOleLink_GetBoundSource(This,ppunk) (This)->lpVtbl->GetBoundSource(This,ppunk)
+#define IOleLink_UnbindSource(This) (This)->lpVtbl->UnbindSource(This)
+#define IOleLink_Update(This,pbc) (This)->lpVtbl->Update(This,pbc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleLink_SetUpdateOptions_Proxy(
+    IOleLink* This,
+    DWORD dwUpdateOpt);
+void __RPC_STUB IOleLink_SetUpdateOptions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetUpdateOptions_Proxy(
+    IOleLink* This,
+    DWORD *pdwUpdateOpt);
+void __RPC_STUB IOleLink_GetUpdateOptions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_SetSourceMoniker_Proxy(
+    IOleLink* This,
+    IMoniker *pmk,
+    REFCLSID rclsid);
+void __RPC_STUB IOleLink_SetSourceMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetSourceMoniker_Proxy(
+    IOleLink* This,
+    IMoniker **ppmk);
+void __RPC_STUB IOleLink_GetSourceMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_SetSourceDisplayName_Proxy(
+    IOleLink* This,
+    LPCOLESTR pszStatusText);
+void __RPC_STUB IOleLink_SetSourceDisplayName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetSourceDisplayName_Proxy(
+    IOleLink* This,
+    LPOLESTR *ppszDisplayName);
+void __RPC_STUB IOleLink_GetSourceDisplayName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_BindToSource_Proxy(
+    IOleLink* This,
+    DWORD bindflags,
+    IBindCtx *pbc);
+void __RPC_STUB IOleLink_BindToSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_BindIfRunning_Proxy(
+    IOleLink* This);
+void __RPC_STUB IOleLink_BindIfRunning_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetBoundSource_Proxy(
+    IOleLink* This,
+    IUnknown **ppunk);
+void __RPC_STUB IOleLink_GetBoundSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_UnbindSource_Proxy(
+    IOleLink* This);
+void __RPC_STUB IOleLink_UnbindSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_Update_Proxy(
+    IOleLink* This,
+    IBindCtx *pbc);
+void __RPC_STUB IOleLink_Update_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleLink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleClientSite interface
+ */
+#ifndef __IOleClientSite_INTERFACE_DEFINED__
+#define __IOleClientSite_INTERFACE_DEFINED__
+
+typedef IOleClientSite *LPOLECLIENTSITE;
+DEFINE_GUID(IID_IOleClientSite, 0x00000118, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleClientSite : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SaveObject(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMoniker(
+        DWORD dwAssign,
+        DWORD dwWhichMoniker,
+        IMoniker **ppmk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        IOleContainer **ppContainer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowObject(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnShowWindow(
+        BOOL fShow) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout(
+        ) = 0;
+
+};
+#else
+typedef struct IOleClientSiteVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleClientSite* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleClientSite* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleClientSite* This);
+
+    /*** IOleClientSite methods ***/
+    HRESULT (STDMETHODCALLTYPE *SaveObject)(
+        IOleClientSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetMoniker)(
+        IOleClientSite* This,
+        DWORD dwAssign,
+        DWORD dwWhichMoniker,
+        IMoniker **ppmk);
+
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IOleClientSite* This,
+        IOleContainer **ppContainer);
+
+    HRESULT (STDMETHODCALLTYPE *ShowObject)(
+        IOleClientSite* This);
+
+    HRESULT (STDMETHODCALLTYPE *OnShowWindow)(
+        IOleClientSite* This,
+        BOOL fShow);
+
+    HRESULT (STDMETHODCALLTYPE *RequestNewObjectLayout)(
+        IOleClientSite* This);
+
+    END_INTERFACE
+} IOleClientSiteVtbl;
+interface IOleClientSite {
+    CONST_VTBL IOleClientSiteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleClientSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleClientSite_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleClientSite_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleClientSite methods ***/
+#define IOleClientSite_SaveObject(This) (This)->lpVtbl->SaveObject(This)
+#define IOleClientSite_GetMoniker(This,dwAssign,dwWhichMoniker,ppmk) (This)->lpVtbl->GetMoniker(This,dwAssign,dwWhichMoniker,ppmk)
+#define IOleClientSite_GetContainer(This,ppContainer) (This)->lpVtbl->GetContainer(This,ppContainer)
+#define IOleClientSite_ShowObject(This) (This)->lpVtbl->ShowObject(This)
+#define IOleClientSite_OnShowWindow(This,fShow) (This)->lpVtbl->OnShowWindow(This,fShow)
+#define IOleClientSite_RequestNewObjectLayout(This) (This)->lpVtbl->RequestNewObjectLayout(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleClientSite_SaveObject_Proxy(
+    IOleClientSite* This);
+void __RPC_STUB IOleClientSite_SaveObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_GetMoniker_Proxy(
+    IOleClientSite* This,
+    DWORD dwAssign,
+    DWORD dwWhichMoniker,
+    IMoniker **ppmk);
+void __RPC_STUB IOleClientSite_GetMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_GetContainer_Proxy(
+    IOleClientSite* This,
+    IOleContainer **ppContainer);
+void __RPC_STUB IOleClientSite_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_ShowObject_Proxy(
+    IOleClientSite* This);
+void __RPC_STUB IOleClientSite_ShowObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_OnShowWindow_Proxy(
+    IOleClientSite* This,
+    BOOL fShow);
+void __RPC_STUB IOleClientSite_OnShowWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_RequestNewObjectLayout_Proxy(
+    IOleClientSite* This);
+void __RPC_STUB IOleClientSite_RequestNewObjectLayout_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleClientSite_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleCache interface
+ */
+#ifndef __IOleCache_INTERFACE_DEFINED__
+#define __IOleCache_INTERFACE_DEFINED__
+
+typedef IOleCache *LPOLECACHE;
+DEFINE_GUID(IID_IOleCache, 0x0000011e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleCache : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Cache(
+        FORMATETC *pformatetc,
+        DWORD advf,
+        DWORD *pdwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Uncache(
+        DWORD dwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumCache(
+        IEnumSTATDATA **ppenumSTATDATA) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitCache(
+        IDataObject *pDataObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetData(
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium,
+        BOOL fRelease) = 0;
+
+};
+#else
+typedef struct IOleCacheVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleCache* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleCache* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleCache* This);
+
+    /*** IOleCache methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cache)(
+        IOleCache* This,
+        FORMATETC *pformatetc,
+        DWORD advf,
+        DWORD *pdwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *Uncache)(
+        IOleCache* This,
+        DWORD dwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCache)(
+        IOleCache* This,
+        IEnumSTATDATA **ppenumSTATDATA);
+
+    HRESULT (STDMETHODCALLTYPE *InitCache)(
+        IOleCache* This,
+        IDataObject *pDataObject);
+
+    HRESULT (STDMETHODCALLTYPE *SetData)(
+        IOleCache* This,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium,
+        BOOL fRelease);
+
+    END_INTERFACE
+} IOleCacheVtbl;
+interface IOleCache {
+    CONST_VTBL IOleCacheVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleCache_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleCache_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleCache_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleCache methods ***/
+#define IOleCache_Cache(This,pformatetc,advf,pdwConnection) (This)->lpVtbl->Cache(This,pformatetc,advf,pdwConnection)
+#define IOleCache_Uncache(This,dwConnection) (This)->lpVtbl->Uncache(This,dwConnection)
+#define IOleCache_EnumCache(This,ppenumSTATDATA) (This)->lpVtbl->EnumCache(This,ppenumSTATDATA)
+#define IOleCache_InitCache(This,pDataObject) (This)->lpVtbl->InitCache(This,pDataObject)
+#define IOleCache_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleCache_Cache_Proxy(
+    IOleCache* This,
+    FORMATETC *pformatetc,
+    DWORD advf,
+    DWORD *pdwConnection);
+void __RPC_STUB IOleCache_Cache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_Uncache_Proxy(
+    IOleCache* This,
+    DWORD dwConnection);
+void __RPC_STUB IOleCache_Uncache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_EnumCache_Proxy(
+    IOleCache* This,
+    IEnumSTATDATA **ppenumSTATDATA);
+void __RPC_STUB IOleCache_EnumCache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_InitCache_Proxy(
+    IOleCache* This,
+    IDataObject *pDataObject);
+void __RPC_STUB IOleCache_InitCache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_SetData_Proxy(
+    IOleCache* This,
+    FORMATETC *pformatetc,
+    STGMEDIUM *pmedium,
+    BOOL fRelease);
+void __RPC_STUB IOleCache_SetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleCache_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleCache2 interface
+ */
+#ifndef __IOleCache2_INTERFACE_DEFINED__
+#define __IOleCache2_INTERFACE_DEFINED__
+
+typedef IOleCache2 *LPOLECACHE2;
+#define UPDFCACHE_NODATACACHE (0x1)
+
+#define UPDFCACHE_ONSAVECACHE (0x2)
+
+#define UPDFCACHE_ONSTOPCACHE (0x4)
+
+#define UPDFCACHE_NORMALCACHE (0x8)
+
+#define UPDFCACHE_IFBLANK (0x10)
+
+#define UPDFCACHE_ONLYIFBLANK (0x80000000)
+
+#define UPDFCACHE_IFBLANKORONSAVECACHE (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE)
+
+#define UPDFCACHE_ALL ((DWORD)~UPDFCACHE_ONLYIFBLANK)
+
+#define UPDFCACHE_ALLBUTNODATACACHE (UPDFCACHE_ALL & (DWORD)~UPDFCACHE_NODATACACHE)
+
+typedef enum tagDISCARDCACHE {
+    DISCARDCACHE_SAVEIFDIRTY = 0,
+    DISCARDCACHE_NOSAVE = 1
+} DISCARDCACHE;
+DEFINE_GUID(IID_IOleCache2, 0x00000128, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleCache2 : public IOleCache
+{
+    virtual HRESULT STDMETHODCALLTYPE UpdateCache(
+        LPDATAOBJECT pDataObject,
+        DWORD grfUpdf,
+        LPVOID pReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DiscardCache(
+        DWORD dwDiscardOptions) = 0;
+
+};
+#else
+typedef struct IOleCache2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleCache2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleCache2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleCache2* This);
+
+    /*** IOleCache methods ***/
+    HRESULT (STDMETHODCALLTYPE *Cache)(
+        IOleCache2* This,
+        FORMATETC *pformatetc,
+        DWORD advf,
+        DWORD *pdwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *Uncache)(
+        IOleCache2* This,
+        DWORD dwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *EnumCache)(
+        IOleCache2* This,
+        IEnumSTATDATA **ppenumSTATDATA);
+
+    HRESULT (STDMETHODCALLTYPE *InitCache)(
+        IOleCache2* This,
+        IDataObject *pDataObject);
+
+    HRESULT (STDMETHODCALLTYPE *SetData)(
+        IOleCache2* This,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pmedium,
+        BOOL fRelease);
+
+    /*** IOleCache2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *UpdateCache)(
+        IOleCache2* This,
+        LPDATAOBJECT pDataObject,
+        DWORD grfUpdf,
+        LPVOID pReserved);
+
+    HRESULT (STDMETHODCALLTYPE *DiscardCache)(
+        IOleCache2* This,
+        DWORD dwDiscardOptions);
+
+    END_INTERFACE
+} IOleCache2Vtbl;
+interface IOleCache2 {
+    CONST_VTBL IOleCache2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleCache2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleCache2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleCache2_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleCache methods ***/
+#define IOleCache2_Cache(This,pformatetc,advf,pdwConnection) (This)->lpVtbl->Cache(This,pformatetc,advf,pdwConnection)
+#define IOleCache2_Uncache(This,dwConnection) (This)->lpVtbl->Uncache(This,dwConnection)
+#define IOleCache2_EnumCache(This,ppenumSTATDATA) (This)->lpVtbl->EnumCache(This,ppenumSTATDATA)
+#define IOleCache2_InitCache(This,pDataObject) (This)->lpVtbl->InitCache(This,pDataObject)
+#define IOleCache2_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+/*** IOleCache2 methods ***/
+#define IOleCache2_UpdateCache(This,pDataObject,grfUpdf,pReserved) (This)->lpVtbl->UpdateCache(This,pDataObject,grfUpdf,pReserved)
+#define IOleCache2_DiscardCache(This,dwDiscardOptions) (This)->lpVtbl->DiscardCache(This,dwDiscardOptions)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleCache2_RemoteUpdateCache_Proxy(
+    IOleCache2* This,
+    LPDATAOBJECT pDataObject,
+    DWORD grfUpdf,
+    LONG_PTR pReserved);
+void __RPC_STUB IOleCache2_RemoteUpdateCache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache2_DiscardCache_Proxy(
+    IOleCache2* This,
+    DWORD dwDiscardOptions);
+void __RPC_STUB IOleCache2_DiscardCache_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IOleCache2_UpdateCache_Proxy(
+    IOleCache2* This,
+    LPDATAOBJECT pDataObject,
+    DWORD grfUpdf,
+    LPVOID pReserved);
+HRESULT __RPC_STUB IOleCache2_UpdateCache_Stub(
+    IOleCache2* This,
+    LPDATAOBJECT pDataObject,
+    DWORD grfUpdf,
+    LONG_PTR pReserved);
+
+#endif  /* __IOleCache2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleCacheControl interface
+ */
+#ifndef __IOleCacheControl_INTERFACE_DEFINED__
+#define __IOleCacheControl_INTERFACE_DEFINED__
+
+typedef IOleCacheControl *LPOLECACHECONTROL;
+DEFINE_GUID(IID_IOleCacheControl, 0x00000129, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleCacheControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnRun(
+        LPDATAOBJECT pDataObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnStop(
+        ) = 0;
+
+};
+#else
+typedef struct IOleCacheControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleCacheControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleCacheControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleCacheControl* This);
+
+    /*** IOleCacheControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnRun)(
+        IOleCacheControl* This,
+        LPDATAOBJECT pDataObject);
+
+    HRESULT (STDMETHODCALLTYPE *OnStop)(
+        IOleCacheControl* This);
+
+    END_INTERFACE
+} IOleCacheControlVtbl;
+interface IOleCacheControl {
+    CONST_VTBL IOleCacheControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleCacheControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleCacheControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleCacheControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleCacheControl methods ***/
+#define IOleCacheControl_OnRun(This,pDataObject) (This)->lpVtbl->OnRun(This,pDataObject)
+#define IOleCacheControl_OnStop(This) (This)->lpVtbl->OnStop(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleCacheControl_OnRun_Proxy(
+    IOleCacheControl* This,
+    LPDATAOBJECT pDataObject);
+void __RPC_STUB IOleCacheControl_OnRun_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCacheControl_OnStop_Proxy(
+    IOleCacheControl* This);
+void __RPC_STUB IOleCacheControl_OnStop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleCacheControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumOLEVERB interface
+ */
+#ifndef __IEnumOLEVERB_INTERFACE_DEFINED__
+#define __IEnumOLEVERB_INTERFACE_DEFINED__
+
+typedef IEnumOLEVERB *LPENUMOLEVERB;
+typedef struct tagOLEVERB {
+    LONG lVerb;
+    LPOLESTR lpszVerbName;
+    DWORD fuFlags;
+    DWORD grfAttribs;
+} OLEVERB;
+typedef struct tagOLEVERB *LPOLEVERB;
+typedef enum tagOLEVERBATTRIB {
+    OLEVERBATTRIB_NEVERDIRTIES = 1,
+    OLEVERBATTRIB_ONCONTAINERMENU = 2
+} OLEVERBATTRIB;
+DEFINE_GUID(IID_IEnumOLEVERB, 0x00000104, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumOLEVERB : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        LPOLEVERB rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumOLEVERB **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumOLEVERBVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumOLEVERB* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumOLEVERB* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumOLEVERB* This);
+
+    /*** IEnumOLEVERB methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumOLEVERB* This,
+        ULONG celt,
+        LPOLEVERB rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumOLEVERB* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumOLEVERB* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumOLEVERB* This,
+        IEnumOLEVERB **ppenum);
+
+    END_INTERFACE
+} IEnumOLEVERBVtbl;
+interface IEnumOLEVERB {
+    CONST_VTBL IEnumOLEVERBVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumOLEVERB_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumOLEVERB_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumOLEVERB_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumOLEVERB methods ***/
+#define IEnumOLEVERB_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumOLEVERB_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumOLEVERB_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumOLEVERB_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_RemoteNext_Proxy(
+    IEnumOLEVERB* This,
+    ULONG celt,
+    LPOLEVERB rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumOLEVERB_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_Skip_Proxy(
+    IEnumOLEVERB* This,
+    ULONG celt);
+void __RPC_STUB IEnumOLEVERB_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_Reset_Proxy(
+    IEnumOLEVERB* This);
+void __RPC_STUB IEnumOLEVERB_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_Clone_Proxy(
+    IEnumOLEVERB* This,
+    IEnumOLEVERB **ppenum);
+void __RPC_STUB IEnumOLEVERB_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumOLEVERB_Next_Proxy(
+    IEnumOLEVERB* This,
+    ULONG celt,
+    LPOLEVERB rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumOLEVERB_Next_Stub(
+    IEnumOLEVERB* This,
+    ULONG celt,
+    LPOLEVERB rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumOLEVERB_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleObject interface
+ */
+#ifndef __IOleObject_INTERFACE_DEFINED__
+#define __IOleObject_INTERFACE_DEFINED__
+
+typedef IOleObject *LPOLEOBJECT;
+typedef enum tagOLEGETMONIKER {
+    OLEGETMONIKER_ONLYIFTHERE = 1,
+    OLEGETMONIKER_FORCEASSIGN = 2,
+    OLEGETMONIKER_UNASSIGN = 3,
+    OLEGETMONIKER_TEMPFORUSER = 4
+} OLEGETMONIKER;
+typedef enum tagOLEWHICHMK {
+    OLEWHICHMK_CONTAINER = 1,
+    OLEWHICHMK_OBJREL = 2,
+    OLEWHICHMK_OBJFULL = 3
+} OLEWHICHMK;
+typedef enum tagUSERCLASSTYPE {
+    USERCLASSTYPE_FULL = 1,
+    USERCLASSTYPE_SHORT = 2,
+    USERCLASSTYPE_APPNAME = 3
+} USERCLASSTYPE;
+typedef enum tagOLEMISC {
+    OLEMISC_RECOMPOSEONRESIZE = 0x1,
+    OLEMISC_ONLYICONIC = 0x2,
+    OLEMISC_INSERTNOTREPLACE = 0x4,
+    OLEMISC_STATIC = 0x8,
+    OLEMISC_CANTLINKINSIDE = 0x10,
+    OLEMISC_CANLINKBYOLE1 = 0x20,
+    OLEMISC_ISLINKOBJECT = 0x40,
+    OLEMISC_INSIDEOUT = 0x80,
+    OLEMISC_ACTIVATEWHENVISIBLE = 0x100,
+    OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,
+    OLEMISC_INVISIBLEATRUNTIME = 0x400,
+    OLEMISC_ALWAYSRUN = 0x800,
+    OLEMISC_ACTSLIKEBUTTON = 0x1000,
+    OLEMISC_ACTSLIKELABEL = 0x2000,
+    OLEMISC_NOUIACTIVATE = 0x4000,
+    OLEMISC_ALIGNABLE = 0x8000,
+    OLEMISC_SIMPLEFRAME = 0x10000,
+    OLEMISC_SETCLIENTSITEFIRST = 0x20000,
+    OLEMISC_IMEMODE = 0x40000,
+    OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,
+    OLEMISC_WANTSTOMENUMERGE = 0x100000,
+    OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000
+} OLEMISC;
+typedef enum tagOLECLOSE {
+    OLECLOSE_SAVEIFDIRTY = 0,
+    OLECLOSE_NOSAVE = 1,
+    OLECLOSE_PROMPTSAVE = 2
+} OLECLOSE;
+DEFINE_GUID(IID_IOleObject, 0x00000112, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleObject : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetClientSite(
+        IOleClientSite *pClientSite) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClientSite(
+        IOleClientSite **ppClientSite) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHostNames(
+        LPCOLESTR szContainerApp,
+        LPCOLESTR szContainerObj) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Close(
+        DWORD dwSaveOption) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMoniker(
+        DWORD dwWhichMoniker,
+        IMoniker *pmk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMoniker(
+        DWORD dwAssign,
+        DWORD dwWhichMoniker,
+        IMoniker **ppmk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitFromData(
+        IDataObject *pDataObject,
+        BOOL fCreation,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipboardData(
+        DWORD dwReserved,
+        IDataObject **ppDataObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DoVerb(
+        LONG iVerb,
+        LPMSG lpmsg,
+        IOleClientSite *pActiveSite,
+        LONG lindex,
+        HWND hwndParent,
+        LPCRECT lprcPosRect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumVerbs(
+        IEnumOLEVERB **ppEnumOleVerb) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Update(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsUpToDate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserClassID(
+        CLSID *pClsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserType(
+        DWORD dwFormOfType,
+        LPOLESTR *pszUserType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetExtent(
+        DWORD dwDrawAspect,
+        SIZEL *psizel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetExtent(
+        DWORD dwDrawAspect,
+        SIZEL *psizel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Advise(
+        IAdviseSink *pAdvSink,
+        DWORD *pdwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unadvise(
+        DWORD dwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
+        IEnumSTATDATA **ppenumAdvise) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMiscStatus(
+        DWORD dwAspect,
+        DWORD *pdwStatus) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetColorScheme(
+        LOGPALETTE *pLogpal) = 0;
+
+};
+#else
+typedef struct IOleObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleObject* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleObject* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleObject* This);
+
+    /*** IOleObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetClientSite)(
+        IOleObject* This,
+        IOleClientSite *pClientSite);
+
+    HRESULT (STDMETHODCALLTYPE *GetClientSite)(
+        IOleObject* This,
+        IOleClientSite **ppClientSite);
+
+    HRESULT (STDMETHODCALLTYPE *SetHostNames)(
+        IOleObject* This,
+        LPCOLESTR szContainerApp,
+        LPCOLESTR szContainerObj);
+
+    HRESULT (STDMETHODCALLTYPE *Close)(
+        IOleObject* This,
+        DWORD dwSaveOption);
+
+    HRESULT (STDMETHODCALLTYPE *SetMoniker)(
+        IOleObject* This,
+        DWORD dwWhichMoniker,
+        IMoniker *pmk);
+
+    HRESULT (STDMETHODCALLTYPE *GetMoniker)(
+        IOleObject* This,
+        DWORD dwAssign,
+        DWORD dwWhichMoniker,
+        IMoniker **ppmk);
+
+    HRESULT (STDMETHODCALLTYPE *InitFromData)(
+        IOleObject* This,
+        IDataObject *pDataObject,
+        BOOL fCreation,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipboardData)(
+        IOleObject* This,
+        DWORD dwReserved,
+        IDataObject **ppDataObject);
+
+    HRESULT (STDMETHODCALLTYPE *DoVerb)(
+        IOleObject* This,
+        LONG iVerb,
+        LPMSG lpmsg,
+        IOleClientSite *pActiveSite,
+        LONG lindex,
+        HWND hwndParent,
+        LPCRECT lprcPosRect);
+
+    HRESULT (STDMETHODCALLTYPE *EnumVerbs)(
+        IOleObject* This,
+        IEnumOLEVERB **ppEnumOleVerb);
+
+    HRESULT (STDMETHODCALLTYPE *Update)(
+        IOleObject* This);
+
+    HRESULT (STDMETHODCALLTYPE *IsUpToDate)(
+        IOleObject* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserClassID)(
+        IOleObject* This,
+        CLSID *pClsid);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserType)(
+        IOleObject* This,
+        DWORD dwFormOfType,
+        LPOLESTR *pszUserType);
+
+    HRESULT (STDMETHODCALLTYPE *SetExtent)(
+        IOleObject* This,
+        DWORD dwDrawAspect,
+        SIZEL *psizel);
+
+    HRESULT (STDMETHODCALLTYPE *GetExtent)(
+        IOleObject* This,
+        DWORD dwDrawAspect,
+        SIZEL *psizel);
+
+    HRESULT (STDMETHODCALLTYPE *Advise)(
+        IOleObject* This,
+        IAdviseSink *pAdvSink,
+        DWORD *pdwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *Unadvise)(
+        IOleObject* This,
+        DWORD dwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
+        IOleObject* This,
+        IEnumSTATDATA **ppenumAdvise);
+
+    HRESULT (STDMETHODCALLTYPE *GetMiscStatus)(
+        IOleObject* This,
+        DWORD dwAspect,
+        DWORD *pdwStatus);
+
+    HRESULT (STDMETHODCALLTYPE *SetColorScheme)(
+        IOleObject* This,
+        LOGPALETTE *pLogpal);
+
+    END_INTERFACE
+} IOleObjectVtbl;
+interface IOleObject {
+    CONST_VTBL IOleObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleObject methods ***/
+#define IOleObject_SetClientSite(This,pClientSite) (This)->lpVtbl->SetClientSite(This,pClientSite)
+#define IOleObject_GetClientSite(This,ppClientSite) (This)->lpVtbl->GetClientSite(This,ppClientSite)
+#define IOleObject_SetHostNames(This,szContainerApp,szContainerObj) (This)->lpVtbl->SetHostNames(This,szContainerApp,szContainerObj)
+#define IOleObject_Close(This,dwSaveOption) (This)->lpVtbl->Close(This,dwSaveOption)
+#define IOleObject_SetMoniker(This,dwWhichMoniker,pmk) (This)->lpVtbl->SetMoniker(This,dwWhichMoniker,pmk)
+#define IOleObject_GetMoniker(This,dwAssign,dwWhichMoniker,ppmk) (This)->lpVtbl->GetMoniker(This,dwAssign,dwWhichMoniker,ppmk)
+#define IOleObject_InitFromData(This,pDataObject,fCreation,dwReserved) (This)->lpVtbl->InitFromData(This,pDataObject,fCreation,dwReserved)
+#define IOleObject_GetClipboardData(This,dwReserved,ppDataObject) (This)->lpVtbl->GetClipboardData(This,dwReserved,ppDataObject)
+#define IOleObject_DoVerb(This,iVerb,lpmsg,pActiveSite,lindex,hwndParent,lprcPosRect) (This)->lpVtbl->DoVerb(This,iVerb,lpmsg,pActiveSite,lindex,hwndParent,lprcPosRect)
+#define IOleObject_EnumVerbs(This,ppEnumOleVerb) (This)->lpVtbl->EnumVerbs(This,ppEnumOleVerb)
+#define IOleObject_Update(This) (This)->lpVtbl->Update(This)
+#define IOleObject_IsUpToDate(This) (This)->lpVtbl->IsUpToDate(This)
+#define IOleObject_GetUserClassID(This,pClsid) (This)->lpVtbl->GetUserClassID(This,pClsid)
+#define IOleObject_GetUserType(This,dwFormOfType,pszUserType) (This)->lpVtbl->GetUserType(This,dwFormOfType,pszUserType)
+#define IOleObject_SetExtent(This,dwDrawAspect,psizel) (This)->lpVtbl->SetExtent(This,dwDrawAspect,psizel)
+#define IOleObject_GetExtent(This,dwDrawAspect,psizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,psizel)
+#define IOleObject_Advise(This,pAdvSink,pdwConnection) (This)->lpVtbl->Advise(This,pAdvSink,pdwConnection)
+#define IOleObject_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IOleObject_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IOleObject_GetMiscStatus(This,dwAspect,pdwStatus) (This)->lpVtbl->GetMiscStatus(This,dwAspect,pdwStatus)
+#define IOleObject_SetColorScheme(This,pLogpal) (This)->lpVtbl->SetColorScheme(This,pLogpal)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleObject_SetClientSite_Proxy(
+    IOleObject* This,
+    IOleClientSite *pClientSite);
+void __RPC_STUB IOleObject_SetClientSite_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetClientSite_Proxy(
+    IOleObject* This,
+    IOleClientSite **ppClientSite);
+void __RPC_STUB IOleObject_GetClientSite_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetHostNames_Proxy(
+    IOleObject* This,
+    LPCOLESTR szContainerApp,
+    LPCOLESTR szContainerObj);
+void __RPC_STUB IOleObject_SetHostNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Close_Proxy(
+    IOleObject* This,
+    DWORD dwSaveOption);
+void __RPC_STUB IOleObject_Close_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetMoniker_Proxy(
+    IOleObject* This,
+    DWORD dwWhichMoniker,
+    IMoniker *pmk);
+void __RPC_STUB IOleObject_SetMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetMoniker_Proxy(
+    IOleObject* This,
+    DWORD dwAssign,
+    DWORD dwWhichMoniker,
+    IMoniker **ppmk);
+void __RPC_STUB IOleObject_GetMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_InitFromData_Proxy(
+    IOleObject* This,
+    IDataObject *pDataObject,
+    BOOL fCreation,
+    DWORD dwReserved);
+void __RPC_STUB IOleObject_InitFromData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetClipboardData_Proxy(
+    IOleObject* This,
+    DWORD dwReserved,
+    IDataObject **ppDataObject);
+void __RPC_STUB IOleObject_GetClipboardData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_DoVerb_Proxy(
+    IOleObject* This,
+    LONG iVerb,
+    LPMSG lpmsg,
+    IOleClientSite *pActiveSite,
+    LONG lindex,
+    HWND hwndParent,
+    LPCRECT lprcPosRect);
+void __RPC_STUB IOleObject_DoVerb_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_EnumVerbs_Proxy(
+    IOleObject* This,
+    IEnumOLEVERB **ppEnumOleVerb);
+void __RPC_STUB IOleObject_EnumVerbs_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Update_Proxy(
+    IOleObject* This);
+void __RPC_STUB IOleObject_Update_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_IsUpToDate_Proxy(
+    IOleObject* This);
+void __RPC_STUB IOleObject_IsUpToDate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetUserClassID_Proxy(
+    IOleObject* This,
+    CLSID *pClsid);
+void __RPC_STUB IOleObject_GetUserClassID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetUserType_Proxy(
+    IOleObject* This,
+    DWORD dwFormOfType,
+    LPOLESTR *pszUserType);
+void __RPC_STUB IOleObject_GetUserType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetExtent_Proxy(
+    IOleObject* This,
+    DWORD dwDrawAspect,
+    SIZEL *psizel);
+void __RPC_STUB IOleObject_SetExtent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetExtent_Proxy(
+    IOleObject* This,
+    DWORD dwDrawAspect,
+    SIZEL *psizel);
+void __RPC_STUB IOleObject_GetExtent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Advise_Proxy(
+    IOleObject* This,
+    IAdviseSink *pAdvSink,
+    DWORD *pdwConnection);
+void __RPC_STUB IOleObject_Advise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Unadvise_Proxy(
+    IOleObject* This,
+    DWORD dwConnection);
+void __RPC_STUB IOleObject_Unadvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_EnumAdvise_Proxy(
+    IOleObject* This,
+    IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IOleObject_EnumAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetMiscStatus_Proxy(
+    IOleObject* This,
+    DWORD dwAspect,
+    DWORD *pdwStatus);
+void __RPC_STUB IOleObject_GetMiscStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetColorScheme_Proxy(
+    IOleObject* This,
+    LOGPALETTE *pLogpal);
+void __RPC_STUB IOleObject_SetColorScheme_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleAdviseHolder interface
+ */
+#ifndef __IOleAdviseHolder_INTERFACE_DEFINED__
+#define __IOleAdviseHolder_INTERFACE_DEFINED__
+
+typedef IOleAdviseHolder *LPOLEADVISEHOLDER;
+DEFINE_GUID(IID_IOleAdviseHolder, 0x00000111, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleAdviseHolder : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Advise(
+        IAdviseSink *pAdvise,
+        DWORD *pdwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unadvise(
+        DWORD dwConnection) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
+        IEnumSTATDATA **ppenumAdvise) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendOnRename(
+        IMoniker *pmk) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendOnSave(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SendOnClose(
+        ) = 0;
+
+};
+#else
+typedef struct IOleAdviseHolderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IOleAdviseHolder* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IOleAdviseHolder* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IOleAdviseHolder* This);
+
+    /*** IOleAdviseHolder methods ***/
+    HRESULT (STDMETHODCALLTYPE *Advise)(
+        IOleAdviseHolder* This,
+        IAdviseSink *pAdvise,
+        DWORD *pdwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *Unadvise)(
+        IOleAdviseHolder* This,
+        DWORD dwConnection);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
+        IOleAdviseHolder* This,
+        IEnumSTATDATA **ppenumAdvise);
+
+    HRESULT (STDMETHODCALLTYPE *SendOnRename)(
+        IOleAdviseHolder* This,
+        IMoniker *pmk);
+
+    HRESULT (STDMETHODCALLTYPE *SendOnSave)(
+        IOleAdviseHolder* This);
+
+    HRESULT (STDMETHODCALLTYPE *SendOnClose)(
+        IOleAdviseHolder* This);
+
+    END_INTERFACE
+} IOleAdviseHolderVtbl;
+interface IOleAdviseHolder {
+    CONST_VTBL IOleAdviseHolderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleAdviseHolder_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleAdviseHolder methods ***/
+#define IOleAdviseHolder_Advise(This,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pAdvise,pdwConnection)
+#define IOleAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IOleAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IOleAdviseHolder_SendOnRename(This,pmk) (This)->lpVtbl->SendOnRename(This,pmk)
+#define IOleAdviseHolder_SendOnSave(This) (This)->lpVtbl->SendOnSave(This)
+#define IOleAdviseHolder_SendOnClose(This) (This)->lpVtbl->SendOnClose(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_Advise_Proxy(
+    IOleAdviseHolder* This,
+    IAdviseSink *pAdvise,
+    DWORD *pdwConnection);
+void __RPC_STUB IOleAdviseHolder_Advise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_Unadvise_Proxy(
+    IOleAdviseHolder* This,
+    DWORD dwConnection);
+void __RPC_STUB IOleAdviseHolder_Unadvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_EnumAdvise_Proxy(
+    IOleAdviseHolder* This,
+    IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IOleAdviseHolder_EnumAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_SendOnRename_Proxy(
+    IOleAdviseHolder* This,
+    IMoniker *pmk);
+void __RPC_STUB IOleAdviseHolder_SendOnRename_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_SendOnSave_Proxy(
+    IOleAdviseHolder* This);
+void __RPC_STUB IOleAdviseHolder_SendOnSave_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_SendOnClose_Proxy(
+    IOleAdviseHolder* This);
+void __RPC_STUB IOleAdviseHolder_SendOnClose_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IOleAdviseHolder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IContinue interface
+ */
+#ifndef __IContinue_INTERFACE_DEFINED__
+#define __IContinue_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContinue, 0x0000012a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IContinue : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE FContinue(
+        ) = 0;
+
+};
+#else
+typedef struct IContinueVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IContinue* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IContinue* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IContinue* This);
+
+    /*** IContinue methods ***/
+    HRESULT (STDMETHODCALLTYPE *FContinue)(
+        IContinue* This);
+
+    END_INTERFACE
+} IContinueVtbl;
+interface IContinue {
+    CONST_VTBL IContinueVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IContinue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IContinue_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IContinue_Release(This) (This)->lpVtbl->Release(This)
+/*** IContinue methods ***/
+#define IContinue_FContinue(This) (This)->lpVtbl->FContinue(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IContinue_FContinue_Proxy(
+    IContinue* This);
+void __RPC_STUB IContinue_FContinue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IContinue_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IViewObject interface
+ */
+#ifndef __IViewObject_INTERFACE_DEFINED__
+#define __IViewObject_INTERFACE_DEFINED__
+
+typedef IViewObject *LPVIEWOBJECT;
+DEFINE_GUID(IID_IViewObject, 0x0000010d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IViewObject : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Draw(
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DVTARGETDEVICE *ptd,
+        HDC hdcTargetDev,
+        HDC hdcDraw,
+        LPCRECTL lprcBounds,
+        LPCRECTL lprcWBounds,
+        BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+        ULONG_PTR dwContinue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetColorSet(
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DVTARGETDEVICE *ptd,
+        HDC hicTargetDev,
+        LOGPALETTE **ppColorSet) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Freeze(
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DWORD *pdwFreeze) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unfreeze(
+        DWORD dwFreeze) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAdvise(
+        DWORD aspects,
+        DWORD advf,
+        IAdviseSink *pAdvSink) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdvise(
+        DWORD *pAspects,
+        DWORD *pAdvf,
+        IAdviseSink **ppAdvSink) = 0;
+
+};
+#else
+typedef struct IViewObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IViewObject* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IViewObject* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IViewObject* This);
+
+    /*** IViewObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IViewObject* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DVTARGETDEVICE *ptd,
+        HDC hdcTargetDev,
+        HDC hdcDraw,
+        LPCRECTL lprcBounds,
+        LPCRECTL lprcWBounds,
+        BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+        ULONG_PTR dwContinue);
+
+    HRESULT (STDMETHODCALLTYPE *GetColorSet)(
+        IViewObject* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DVTARGETDEVICE *ptd,
+        HDC hicTargetDev,
+        LOGPALETTE **ppColorSet);
+
+    HRESULT (STDMETHODCALLTYPE *Freeze)(
+        IViewObject* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DWORD *pdwFreeze);
+
+    HRESULT (STDMETHODCALLTYPE *Unfreeze)(
+        IViewObject* This,
+        DWORD dwFreeze);
+
+    HRESULT (STDMETHODCALLTYPE *SetAdvise)(
+        IViewObject* This,
+        DWORD aspects,
+        DWORD advf,
+        IAdviseSink *pAdvSink);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdvise)(
+        IViewObject* This,
+        DWORD *pAspects,
+        DWORD *pAdvf,
+        IAdviseSink **ppAdvSink);
+
+    END_INTERFACE
+} IViewObjectVtbl;
+interface IViewObject {
+    CONST_VTBL IViewObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IViewObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IViewObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IViewObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IViewObject methods ***/
+#define IViewObject_Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue) (This)->lpVtbl->Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue)
+#define IViewObject_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)
+#define IViewObject_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)
+#define IViewObject_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)
+#define IViewObject_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)
+#define IViewObject_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteDraw_Proxy(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    ULONG_PTR pvAspect,
+    DVTARGETDEVICE *ptd,
+    ULONG_PTR hdcTargetDev,
+    ULONG_PTR hdcDraw,
+    LPCRECTL lprcBounds,
+    LPCRECTL lprcWBounds,
+    IContinue *pContinue);
+void __RPC_STUB IViewObject_RemoteDraw_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteGetColorSet_Proxy(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    ULONG_PTR pvAspect,
+    DVTARGETDEVICE *ptd,
+    ULONG_PTR hicTargetDev,
+    LOGPALETTE **ppColorSet);
+void __RPC_STUB IViewObject_RemoteGetColorSet_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteFreeze_Proxy(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    ULONG_PTR pvAspect,
+    DWORD *pdwFreeze);
+void __RPC_STUB IViewObject_RemoteFreeze_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_Unfreeze_Proxy(
+    IViewObject* This,
+    DWORD dwFreeze);
+void __RPC_STUB IViewObject_Unfreeze_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_SetAdvise_Proxy(
+    IViewObject* This,
+    DWORD aspects,
+    DWORD advf,
+    IAdviseSink *pAdvSink);
+void __RPC_STUB IViewObject_SetAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteGetAdvise_Proxy(
+    IViewObject* This,
+    DWORD *pAspects,
+    DWORD *pAdvf,
+    IAdviseSink **ppAdvSink);
+void __RPC_STUB IViewObject_RemoteGetAdvise_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IViewObject_Draw_Proxy(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    void *pvAspect,
+    DVTARGETDEVICE *ptd,
+    HDC hdcTargetDev,
+    HDC hdcDraw,
+    LPCRECTL lprcBounds,
+    LPCRECTL lprcWBounds,
+    BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+    ULONG_PTR dwContinue);
+HRESULT __RPC_STUB IViewObject_Draw_Stub(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    ULONG_PTR pvAspect,
+    DVTARGETDEVICE *ptd,
+    ULONG_PTR hdcTargetDev,
+    ULONG_PTR hdcDraw,
+    LPCRECTL lprcBounds,
+    LPCRECTL lprcWBounds,
+    IContinue *pContinue);
+HRESULT CALLBACK IViewObject_GetColorSet_Proxy(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    void *pvAspect,
+    DVTARGETDEVICE *ptd,
+    HDC hicTargetDev,
+    LOGPALETTE **ppColorSet);
+HRESULT __RPC_STUB IViewObject_GetColorSet_Stub(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    ULONG_PTR pvAspect,
+    DVTARGETDEVICE *ptd,
+    ULONG_PTR hicTargetDev,
+    LOGPALETTE **ppColorSet);
+HRESULT CALLBACK IViewObject_Freeze_Proxy(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    void *pvAspect,
+    DWORD *pdwFreeze);
+HRESULT __RPC_STUB IViewObject_Freeze_Stub(
+    IViewObject* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    ULONG_PTR pvAspect,
+    DWORD *pdwFreeze);
+HRESULT CALLBACK IViewObject_GetAdvise_Proxy(
+    IViewObject* This,
+    DWORD *pAspects,
+    DWORD *pAdvf,
+    IAdviseSink **ppAdvSink);
+HRESULT __RPC_STUB IViewObject_GetAdvise_Stub(
+    IViewObject* This,
+    DWORD *pAspects,
+    DWORD *pAdvf,
+    IAdviseSink **ppAdvSink);
+
+#endif  /* __IViewObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IViewObject2 interface
+ */
+#ifndef __IViewObject2_INTERFACE_DEFINED__
+#define __IViewObject2_INTERFACE_DEFINED__
+
+typedef IViewObject2 *LPVIEWOBJECT2;
+DEFINE_GUID(IID_IViewObject2, 0x00000127, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IViewObject2 : public IViewObject
+{
+    virtual HRESULT STDMETHODCALLTYPE GetExtent(
+        DWORD dwDrawAspect,
+        LONG lindex,
+        DVTARGETDEVICE *ptd,
+        LPSIZEL lpsizel) = 0;
+
+};
+#else
+typedef struct IViewObject2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IViewObject2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IViewObject2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IViewObject2* This);
+
+    /*** IViewObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *Draw)(
+        IViewObject2* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DVTARGETDEVICE *ptd,
+        HDC hdcTargetDev,
+        HDC hdcDraw,
+        LPCRECTL lprcBounds,
+        LPCRECTL lprcWBounds,
+        BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+        ULONG_PTR dwContinue);
+
+    HRESULT (STDMETHODCALLTYPE *GetColorSet)(
+        IViewObject2* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DVTARGETDEVICE *ptd,
+        HDC hicTargetDev,
+        LOGPALETTE **ppColorSet);
+
+    HRESULT (STDMETHODCALLTYPE *Freeze)(
+        IViewObject2* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void *pvAspect,
+        DWORD *pdwFreeze);
+
+    HRESULT (STDMETHODCALLTYPE *Unfreeze)(
+        IViewObject2* This,
+        DWORD dwFreeze);
+
+    HRESULT (STDMETHODCALLTYPE *SetAdvise)(
+        IViewObject2* This,
+        DWORD aspects,
+        DWORD advf,
+        IAdviseSink *pAdvSink);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdvise)(
+        IViewObject2* This,
+        DWORD *pAspects,
+        DWORD *pAdvf,
+        IAdviseSink **ppAdvSink);
+
+    /*** IViewObject2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetExtent)(
+        IViewObject2* This,
+        DWORD dwDrawAspect,
+        LONG lindex,
+        DVTARGETDEVICE *ptd,
+        LPSIZEL lpsizel);
+
+    END_INTERFACE
+} IViewObject2Vtbl;
+interface IViewObject2 {
+    CONST_VTBL IViewObject2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IViewObject2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IViewObject2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IViewObject2_Release(This) (This)->lpVtbl->Release(This)
+/*** IViewObject methods ***/
+#define IViewObject2_Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue) (This)->lpVtbl->Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue)
+#define IViewObject2_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)
+#define IViewObject2_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)
+#define IViewObject2_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)
+#define IViewObject2_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)
+#define IViewObject2_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)
+/*** IViewObject2 methods ***/
+#define IViewObject2_GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IViewObject2_GetExtent_Proxy(
+    IViewObject2* This,
+    DWORD dwDrawAspect,
+    LONG lindex,
+    DVTARGETDEVICE *ptd,
+    LPSIZEL lpsizel);
+void __RPC_STUB IViewObject2_GetExtent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IViewObject2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDropSource interface
+ */
+#ifndef __IDropSource_INTERFACE_DEFINED__
+#define __IDropSource_INTERFACE_DEFINED__
+
+typedef IDropSource *LPDROPSOURCE;
+DEFINE_GUID(IID_IDropSource, 0x00000121, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDropSource : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(
+        BOOL fEscapePressed,
+        DWORD grfKeyState) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GiveFeedback(
+        DWORD dwEffect) = 0;
+
+};
+#else
+typedef struct IDropSourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDropSource* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDropSource* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDropSource* This);
+
+    /*** IDropSource methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryContinueDrag)(
+        IDropSource* This,
+        BOOL fEscapePressed,
+        DWORD grfKeyState);
+
+    HRESULT (STDMETHODCALLTYPE *GiveFeedback)(
+        IDropSource* This,
+        DWORD dwEffect);
+
+    END_INTERFACE
+} IDropSourceVtbl;
+interface IDropSource {
+    CONST_VTBL IDropSourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDropSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDropSource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDropSource_Release(This) (This)->lpVtbl->Release(This)
+/*** IDropSource methods ***/
+#define IDropSource_QueryContinueDrag(This,fEscapePressed,grfKeyState) (This)->lpVtbl->QueryContinueDrag(This,fEscapePressed,grfKeyState)
+#define IDropSource_GiveFeedback(This,dwEffect) (This)->lpVtbl->GiveFeedback(This,dwEffect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDropSource_QueryContinueDrag_Proxy(
+    IDropSource* This,
+    BOOL fEscapePressed,
+    DWORD grfKeyState);
+void __RPC_STUB IDropSource_QueryContinueDrag_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropSource_GiveFeedback_Proxy(
+    IDropSource* This,
+    DWORD dwEffect);
+void __RPC_STUB IDropSource_GiveFeedback_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDropSource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDropTarget interface
+ */
+#ifndef __IDropTarget_INTERFACE_DEFINED__
+#define __IDropTarget_INTERFACE_DEFINED__
+
+typedef IDropTarget *LPDROPTARGET;
+#define MK_ALT (0x20)
+
+#define DROPEFFECT_NONE (0)
+
+#define DROPEFFECT_COPY (1)
+
+#define DROPEFFECT_MOVE (2)
+
+#define DROPEFFECT_LINK (4)
+
+#define DROPEFFECT_SCROLL (0x80000000)
+
+#define DD_DEFSCROLLINSET (11)
+
+#define DD_DEFSCROLLDELAY (50)
+
+#define DD_DEFSCROLLINTERVAL (50)
+
+#define DD_DEFDRAGDELAY (200)
+
+#define DD_DEFDRAGMINDIST (2)
+
+DEFINE_GUID(IID_IDropTarget, 0x00000122, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDropTarget : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE DragEnter(
+        IDataObject *pDataObj,
+        DWORD grfKeyState,
+        POINTL pt,
+        DWORD *pdwEffect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DragOver(
+        DWORD grfKeyState,
+        POINTL pt,
+        DWORD *pdwEffect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DragLeave(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Drop(
+        IDataObject *pDataObj,
+        DWORD grfKeyState,
+        POINTL pt,
+        DWORD *pdwEffect) = 0;
+
+};
+#else
+typedef struct IDropTargetVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDropTarget* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDropTarget* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDropTarget* This);
+
+    /*** IDropTarget methods ***/
+    HRESULT (STDMETHODCALLTYPE *DragEnter)(
+        IDropTarget* This,
+        IDataObject *pDataObj,
+        DWORD grfKeyState,
+        POINTL pt,
+        DWORD *pdwEffect);
+
+    HRESULT (STDMETHODCALLTYPE *DragOver)(
+        IDropTarget* This,
+        DWORD grfKeyState,
+        POINTL pt,
+        DWORD *pdwEffect);
+
+    HRESULT (STDMETHODCALLTYPE *DragLeave)(
+        IDropTarget* This);
+
+    HRESULT (STDMETHODCALLTYPE *Drop)(
+        IDropTarget* This,
+        IDataObject *pDataObj,
+        DWORD grfKeyState,
+        POINTL pt,
+        DWORD *pdwEffect);
+
+    END_INTERFACE
+} IDropTargetVtbl;
+interface IDropTarget {
+    CONST_VTBL IDropTargetVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDropTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDropTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDropTarget_Release(This) (This)->lpVtbl->Release(This)
+/*** IDropTarget methods ***/
+#define IDropTarget_DragEnter(This,pDataObj,grfKeyState,pt,pdwEffect) (This)->lpVtbl->DragEnter(This,pDataObj,grfKeyState,pt,pdwEffect)
+#define IDropTarget_DragOver(This,grfKeyState,pt,pdwEffect) (This)->lpVtbl->DragOver(This,grfKeyState,pt,pdwEffect)
+#define IDropTarget_DragLeave(This) (This)->lpVtbl->DragLeave(This)
+#define IDropTarget_Drop(This,pDataObj,grfKeyState,pt,pdwEffect) (This)->lpVtbl->Drop(This,pDataObj,grfKeyState,pt,pdwEffect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDropTarget_DragEnter_Proxy(
+    IDropTarget* This,
+    IDataObject *pDataObj,
+    DWORD grfKeyState,
+    POINTL pt,
+    DWORD *pdwEffect);
+void __RPC_STUB IDropTarget_DragEnter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropTarget_DragOver_Proxy(
+    IDropTarget* This,
+    DWORD grfKeyState,
+    POINTL pt,
+    DWORD *pdwEffect);
+void __RPC_STUB IDropTarget_DragOver_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropTarget_DragLeave_Proxy(
+    IDropTarget* This);
+void __RPC_STUB IDropTarget_DragLeave_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropTarget_Drop_Proxy(
+    IDropTarget* This,
+    IDataObject *pDataObj,
+    DWORD grfKeyState,
+    POINTL pt,
+    DWORD *pdwEffect);
+void __RPC_STUB IDropTarget_Drop_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDropTarget_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
+unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
+unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
+void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);
+ULONG           __RPC_USER HMENU_UserSize     (ULONG *, ULONG, HMENU *);
+unsigned char * __RPC_USER HMENU_UserMarshal  (ULONG *, unsigned char *, HMENU *);
+unsigned char * __RPC_USER HMENU_UserUnmarshal(ULONG *, unsigned char *, HMENU *);
+void            __RPC_USER HMENU_UserFree     (ULONG *, HMENU *);
+ULONG           __RPC_USER HGLOBAL_UserSize     (ULONG *, ULONG, HGLOBAL *);
+unsigned char * __RPC_USER HGLOBAL_UserMarshal  (ULONG *, unsigned char *, HGLOBAL *);
+unsigned char * __RPC_USER HGLOBAL_UserUnmarshal(ULONG *, unsigned char *, HGLOBAL *);
+void            __RPC_USER HGLOBAL_UserFree     (ULONG *, HGLOBAL *);
+ULONG           __RPC_USER HACCEL_UserSize     (ULONG *, ULONG, HACCEL *);
+unsigned char * __RPC_USER HACCEL_UserMarshal  (ULONG *, unsigned char *, HACCEL *);
+unsigned char * __RPC_USER HACCEL_UserUnmarshal(ULONG *, unsigned char *, HACCEL *);
+void            __RPC_USER HACCEL_UserFree     (ULONG *, HACCEL *);
+ULONG           __RPC_USER CLIPFORMAT_UserSize     (ULONG *, ULONG, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserMarshal  (ULONG *, unsigned char *, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
+void            __RPC_USER CLIPFORMAT_UserFree     (ULONG *, CLIPFORMAT *);
+ULONG           __RPC_USER STGMEDIUM_UserSize     (ULONG *, ULONG, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserMarshal  (ULONG *, unsigned char *, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
+void            __RPC_USER STGMEDIUM_UserFree     (ULONG *, STGMEDIUM *);
+ULONG           __RPC_USER HDC_UserSize     (ULONG *, ULONG, HDC *);
+unsigned char * __RPC_USER HDC_UserMarshal  (ULONG *, unsigned char *, HDC *);
+unsigned char * __RPC_USER HDC_UserUnmarshal(ULONG *, unsigned char *, HDC *);
+void            __RPC_USER HDC_UserFree     (ULONG *, HDC *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_OLEIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl
new file mode 100644
index 0000000..2e36db9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl
@@ -0,0 +1,967 @@
+/*
+ * Copyright (C) 1999 Paul Quinn
+ * Copyright (C) 1999 Francis Beaudet
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "objidl.idl";
+#endif
+
+interface IOleInPlaceActiveObject;
+
+cpp_quote("#include <winuser.h>")
+
+/*****************************************************************************
+ * IOleTypes interface
+ */
+[
+    uuid(b0916c84-7416-101a-bcea-08002b2b79ef)
+]
+interface IOLETypes
+{
+    typedef enum tagOLERENDER
+    {
+	OLERENDER_NONE = 0,
+	OLERENDER_DRAW = 1,
+	OLERENDER_FORMAT = 2,
+	OLERENDER_ASIS = 3
+    } OLERENDER, *LPOLERENDER;
+
+    typedef struct tagOBJECTDESCRIPTOR
+    {
+	ULONG cbSize;
+	CLSID clsid;
+	DWORD dwDrawAspect;
+	SIZEL sizel;
+	POINTL pointl;
+	DWORD dwStatus;
+	DWORD dwFullUserTypeName;
+	DWORD dwSrcOfCopy;
+    } OBJECTDESCRIPTOR,  *POBJECTDESCRIPTOR,   *LPOBJECTDESCRIPTOR,
+      LINKSRCDESCRIPTOR, *PLINKSRCDESCRIPTOR,  *LPLINKSRCDESCRIPTOR;
+}
+
+
+/*****************************************************************************
+ * IOleWindow interface
+ */
+[
+    object,
+    uuid(00000114-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleWindow : IUnknown
+{
+    typedef [unique] IOleWindow *LPOLEWINDOW;
+
+    HRESULT GetWindow(
+        [out] HWND *phwnd);
+
+    HRESULT ContextSensitiveHelp(
+        [in] BOOL fEnterMode);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceObject interface
+ */
+[
+    object,
+    uuid(00000113-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleInPlaceObject : IOleWindow
+{
+    typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT;
+
+    HRESULT InPlaceDeactivate();
+
+    HRESULT UIDeactivate();
+
+    HRESULT SetObjectRects(
+        [in] LPCRECT lprcPosRect,
+        [in] LPCRECT lprcClipRect);
+
+    HRESULT ReactivateAndUndo();
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceUIWindow interface
+ */
+[
+    object,
+    uuid(00000115-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+
+interface IOleInPlaceUIWindow : IOleWindow
+{
+    typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
+
+    typedef RECT BORDERWIDTHS;
+    typedef LPRECT LPBORDERWIDTHS;
+    typedef LPCRECT LPCBORDERWIDTHS;
+
+    HRESULT GetBorder(
+        [out] LPRECT lprectBorder);
+
+    HRESULT RequestBorderSpace(
+        [in, unique] LPCBORDERWIDTHS pborderwidths);
+
+    HRESULT SetBorderSpace(
+        [in, unique] LPCBORDERWIDTHS pborderwidths);
+
+    HRESULT SetActiveObject(
+        [in, unique] IOleInPlaceActiveObject *pActiveObject,
+        [in, string, unique] LPCOLESTR pszObjName);
+}
+
+
+/* avoid conflict with Wine Unicode macros */
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef TranslateAccelerator")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * IOleInPlaceFrame interface
+ */
+[
+    object,
+    uuid(00000116-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleInPlaceFrame : IOleInPlaceUIWindow
+{
+    typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME;
+
+    typedef struct tagOleInPlaceFrameInfo
+    {
+        UINT cb;
+        BOOL fMDIApp;
+        HWND hwndFrame;
+        HACCEL haccel;
+        UINT cAccelEntries;
+    } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO;
+
+    typedef struct  tagOleMenuGroupWidths
+    {
+        LONG width[ 6 ];
+    } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS;
+
+    typedef HGLOBAL HOLEMENU;
+
+    HRESULT InsertMenus(
+        [in] HMENU hmenuShared,
+        [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
+
+    HRESULT SetMenu(
+        [in] HMENU hmenuShared,
+        [in] HOLEMENU holemenu,
+        [in] HWND hwndActiveObject);
+
+    HRESULT RemoveMenus(
+        [in] HMENU hmenuShared);
+
+    HRESULT SetStatusText(
+        [in, unique] LPCOLESTR pszStatusText);
+
+    HRESULT EnableModeless(
+        [in] BOOL fEnable);
+
+    HRESULT TranslateAccelerator(
+        [in] LPMSG lpmsg,
+        [in] WORD wID);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceActiveObject interface
+ */
+[
+    object,
+    uuid(00000117-0000-0000-c000-000000000046)
+]
+interface IOleInPlaceActiveObject : IOleWindow
+{
+    typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
+
+    [local]
+    HRESULT TranslateAccelerator(
+        [in] LPMSG lpmsg);
+
+    [call_as(TranslateAccelerator)]
+    HRESULT RemoteTranslateAccelerator();
+
+    HRESULT OnFrameWindowActivate(
+        [in] BOOL fActivate);
+
+    HRESULT OnDocWindowActivate(
+        [in] BOOL fActivate);
+
+    [local]
+    HRESULT ResizeBorder(
+        [in] LPCRECT prcBorder,
+        [in, unique] IOleInPlaceUIWindow *pUIWindow,
+        [in] BOOL fFrameWindow);
+
+    [call_as(ResizeBorder)]
+    HRESULT RemoteResizeBorder(
+        [in] LPCRECT prcBorder,
+        [in] REFIID riid,
+        [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow,
+        [in] BOOL fFrameWindow);
+
+    HRESULT EnableModeless(
+        [in] BOOL fEnable);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceSite interface
+ */
+[
+    object,
+    uuid(00000119-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleInPlaceSite : IOleWindow
+{
+    typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE;
+
+    HRESULT CanInPlaceActivate();
+    HRESULT OnInPlaceActivate();
+    HRESULT OnUIActivate();
+
+    HRESULT GetWindowContext(
+        [out] IOleInPlaceFrame **ppFrame,
+        [out] IOleInPlaceUIWindow **ppDoc,
+        [out] LPRECT lprcPosRect,
+        [out] LPRECT lprcClipRect,
+        [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo);
+
+    HRESULT Scroll(
+        [in] SIZE scrollExtent);
+
+    HRESULT OnUIDeactivate(
+        [in] BOOL fUndoable);
+
+    HRESULT OnInPlaceDeactivate();
+    HRESULT DiscardUndoState();
+    HRESULT DeactivateAndUndo();
+
+    HRESULT OnPosRectChange(
+        [in] LPCRECT lprcPosRect);
+}
+
+
+/*****************************************************************************
+ * IParseDisplayName interface
+ */
+[
+    object,
+    uuid(0000011a-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IParseDisplayName : IUnknown
+{
+    typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME;
+
+    HRESULT ParseDisplayName(
+        [in, unique] IBindCtx *pbc,
+        [in] LPOLESTR pszDisplayName,
+        [out] ULONG *pchEaten,
+        [out] IMoniker **ppmkOut);
+}
+
+
+/*****************************************************************************
+ * IOleContainer interface
+ */
+[
+    object,
+    uuid(0000011b-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleContainer : IParseDisplayName
+{
+    typedef [unique] IOleContainer *LPOLECONTAINER;
+
+    HRESULT EnumObjects(
+        [in] DWORD grfFlags,
+        [out] IEnumUnknown **ppenum);
+
+    HRESULT LockContainer(
+        [in] BOOL fLock);
+}
+
+
+/*****************************************************************************
+ * IOleItemContainer interface
+ */
+[
+    object,
+    uuid(0000011c-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleItemContainer : IOleContainer
+{
+    typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER;
+
+    typedef enum tagBINDSPEED
+    {
+	BINDSPEED_INDEFINITE = 1,
+	BINDSPEED_MODERATE = 2,
+	BINDSPEED_IMMEDIATE = 3
+    } BINDSPEED;
+
+    typedef enum tagOLECONTF
+    {
+	OLECONTF_EMBEDDINGS = 1,
+	OLECONTF_LINKS = 2,
+	OLECONTF_OTHERS = 4,
+	OLECONTF_ONLYUSER = 8,
+	OLECONTF_ONLYIFRUNNING = 16
+    } OLECONTF;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetObject")
+cpp_quote("#endif")
+    HRESULT GetObject(
+        [in] LPOLESTR pszItem,
+        [in] DWORD dwSpeedNeeded,
+        [in, unique] IBindCtx *pbc,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvObject);
+
+    HRESULT GetObjectStorage(
+        [in] LPOLESTR pszItem,
+        [in, unique] IBindCtx *pbc,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvStorage);
+
+    HRESULT IsRunning(
+        [in] LPOLESTR pszItem);
+}
+
+
+/*****************************************************************************
+ * IOleLink interface
+ */
+[
+    object,
+    uuid(0000011d-0000-0000-c000-000000000046)
+]
+interface IOleLink : IUnknown
+{
+    typedef [unique] IOleLink *LPOLELINK;
+
+    typedef enum tagOLEUPDATE
+    {
+	OLEUPDATE_ALWAYS = 1,
+	OLEUPDATE_ONCALL = 3
+    } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE;
+
+    typedef enum tagOLELINKBIND
+    {
+	OLELINKBIND_EVENIFCLASSDIFF = 1
+    } OLELINKBIND;
+
+    HRESULT SetUpdateOptions(
+        [in] DWORD dwUpdateOpt);
+
+    HRESULT GetUpdateOptions(
+        [out] DWORD *pdwUpdateOpt);
+
+    HRESULT SetSourceMoniker(
+        [in, unique] IMoniker *pmk,
+        [in] REFCLSID rclsid);
+
+    HRESULT GetSourceMoniker(
+        [out] IMoniker **ppmk);
+
+    HRESULT SetSourceDisplayName(
+        [in]LPCOLESTR pszStatusText);
+
+    HRESULT GetSourceDisplayName(
+        [out] LPOLESTR *ppszDisplayName);
+
+    HRESULT BindToSource(
+        [in] DWORD bindflags,
+        [in, unique] IBindCtx *pbc);
+
+    HRESULT BindIfRunning();
+
+    HRESULT GetBoundSource(
+        [out] IUnknown **ppunk);
+
+    HRESULT UnbindSource();
+
+    HRESULT Update(
+        [in, unique] IBindCtx *pbc);
+}
+
+
+/*****************************************************************************
+ * IOleClientSite interface
+ */
+[
+    object,
+    uuid(00000118-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleClientSite : IUnknown
+{
+    typedef [unique] IOleClientSite * LPOLECLIENTSITE;
+
+    HRESULT SaveObject();
+
+    HRESULT GetMoniker(
+        [in] DWORD dwAssign,
+        [in] DWORD dwWhichMoniker,
+        [out] IMoniker **ppmk);
+
+    HRESULT GetContainer(
+        [out] IOleContainer **ppContainer);
+
+    HRESULT ShowObject();
+
+    HRESULT OnShowWindow(
+        [in] BOOL fShow);
+
+    HRESULT RequestNewObjectLayout();
+}
+
+
+/*****************************************************************************
+ * IOleCache interface
+ */
+[
+    object,
+    uuid(0000011e-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleCache : IUnknown
+{
+    typedef [unique] IOleCache *LPOLECACHE;
+
+    HRESULT Cache(
+        [in, unique] FORMATETC *pformatetc,
+        [in] DWORD advf,
+        [out] DWORD *pdwConnection);
+
+    HRESULT Uncache(
+        [in] DWORD dwConnection);
+
+    HRESULT EnumCache(
+        [out] IEnumSTATDATA **ppenumSTATDATA);
+
+    HRESULT InitCache(
+        [in, unique] IDataObject *pDataObject);
+
+    HRESULT SetData(
+        [in, unique] FORMATETC *pformatetc,
+        [in, unique] STGMEDIUM *pmedium,
+        [in] BOOL fRelease);
+}
+
+
+/*****************************************************************************
+ * IOleCache2 interface
+ */
+[
+    object,
+    uuid(00000128-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleCache2 : IOleCache
+{
+    typedef [unique] IOleCache2 *LPOLECACHE2;
+
+    const DWORD UPDFCACHE_NODATACACHE = 0x00000001;
+    const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002;
+    const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004;
+    const DWORD UPDFCACHE_NORMALCACHE = 0x00000008;
+    const DWORD UPDFCACHE_IFBLANK     = 0x00000010;
+    const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000;
+
+    const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE);
+    const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK)));
+    const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE)));
+
+    typedef enum tagDISCARDCACHE
+    {
+        DISCARDCACHE_SAVEIFDIRTY = 0,
+        DISCARDCACHE_NOSAVE =  1
+    } DISCARDCACHE;
+
+    [local]
+    HRESULT UpdateCache(
+        [in] LPDATAOBJECT pDataObject,
+        [in] DWORD grfUpdf,
+        [in] LPVOID pReserved);
+
+    [call_as(UpdateCache)]
+    HRESULT RemoteUpdateCache(
+        [in] LPDATAOBJECT pDataObject,
+        [in] DWORD grfUpdf,
+        [in] LONG_PTR pReserved);
+
+    HRESULT DiscardCache(
+        [in] DWORD dwDiscardOptions);
+}
+
+
+/*****************************************************************************
+ * IOleCacheControl interface
+ */
+[
+    object,
+    uuid(00000129-0000-0000-c000-000000000046)
+]
+interface IOleCacheControl : IUnknown
+{
+    typedef [unique] IOleCacheControl *LPOLECACHECONTROL;
+
+    HRESULT OnRun(
+        LPDATAOBJECT pDataObject);
+
+    HRESULT OnStop();
+}
+
+
+/*****************************************************************************
+ *  IEnumOLEVERB interface
+ */
+[
+    object,
+    uuid(00000104-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IEnumOLEVERB : IUnknown
+{
+    typedef [unique] IEnumOLEVERB *LPENUMOLEVERB;
+
+    typedef struct tagOLEVERB
+    {
+	LONG lVerb;
+	LPOLESTR lpszVerbName;
+	DWORD fuFlags;
+	DWORD grfAttribs;
+    } OLEVERB, *LPOLEVERB;
+
+    typedef enum tagOLEVERBATTRIB
+    {
+	OLEVERBATTRIB_NEVERDIRTIES = 1,
+	OLEVERBATTRIB_ONCONTAINERMENU = 2
+    } OLEVERBATTRIB;
+
+    [local]
+    HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,
+        [out] ULONG *pceltFetched);
+
+    [call_as(Next)]
+    HRESULT RemoteNext(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumOLEVERB **ppenum);
+}
+
+
+/*****************************************************************************
+ * IOleObject interface
+ */
+[
+    object,
+    uuid(00000112-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IOleObject : IUnknown
+{
+    typedef [unique] IOleObject *LPOLEOBJECT;
+
+    typedef enum tagOLEGETMONIKER
+    {
+	OLEGETMONIKER_ONLYIFTHERE = 1,
+	OLEGETMONIKER_FORCEASSIGN = 2,
+	OLEGETMONIKER_UNASSIGN = 3,
+	OLEGETMONIKER_TEMPFORUSER = 4
+    } OLEGETMONIKER;
+
+    typedef enum tagOLEWHICHMK
+    {
+	OLEWHICHMK_CONTAINER = 1,
+	OLEWHICHMK_OBJREL = 2,
+	OLEWHICHMK_OBJFULL = 3
+    } OLEWHICHMK;
+
+    typedef enum tagUSERCLASSTYPE
+    {
+	USERCLASSTYPE_FULL = 1,
+	USERCLASSTYPE_SHORT = 2,
+	USERCLASSTYPE_APPNAME = 3
+    } USERCLASSTYPE;
+
+    typedef enum tagOLEMISC
+    {
+	OLEMISC_RECOMPOSEONRESIZE = 0x1,
+	OLEMISC_ONLYICONIC = 0x2,
+	OLEMISC_INSERTNOTREPLACE = 0x4,
+	OLEMISC_STATIC = 0x8,
+	OLEMISC_CANTLINKINSIDE = 0x10,
+	OLEMISC_CANLINKBYOLE1 = 0x20,
+	OLEMISC_ISLINKOBJECT = 0x40,
+	OLEMISC_INSIDEOUT = 0x80,
+	OLEMISC_ACTIVATEWHENVISIBLE = 0x100,
+	OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,
+	OLEMISC_INVISIBLEATRUNTIME = 0x400,
+	OLEMISC_ALWAYSRUN = 0x800,
+	OLEMISC_ACTSLIKEBUTTON = 0x1000,
+	OLEMISC_ACTSLIKELABEL = 0x2000,
+	OLEMISC_NOUIACTIVATE = 0x4000,
+	OLEMISC_ALIGNABLE = 0x8000,
+	OLEMISC_SIMPLEFRAME = 0x10000,
+	OLEMISC_SETCLIENTSITEFIRST = 0x20000,
+	OLEMISC_IMEMODE = 0x40000,
+	OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,
+	OLEMISC_WANTSTOMENUMERGE = 0x100000,
+	OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000
+    } OLEMISC;
+
+    typedef enum tagOLECLOSE
+    {
+	OLECLOSE_SAVEIFDIRTY = 0,
+	OLECLOSE_NOSAVE = 1,
+	OLECLOSE_PROMPTSAVE = 2
+    } OLECLOSE;
+
+    HRESULT SetClientSite(
+        [in, unique] IOleClientSite *pClientSite);
+
+    HRESULT GetClientSite(
+        [out] IOleClientSite **ppClientSite);
+
+    HRESULT SetHostNames(
+        [in] LPCOLESTR szContainerApp,
+        [in, unique] LPCOLESTR szContainerObj);
+
+    HRESULT Close(
+        [in] DWORD dwSaveOption);
+
+    HRESULT SetMoniker(
+        [in] DWORD dwWhichMoniker,
+        [in, unique] IMoniker *pmk);
+
+    HRESULT GetMoniker(
+        [in] DWORD dwAssign,
+        [in] DWORD dwWhichMoniker,
+        [out] IMoniker **ppmk);
+
+    HRESULT InitFromData(
+        [in, unique] IDataObject *pDataObject,
+        [in] BOOL fCreation,
+        [in] DWORD dwReserved);
+
+    HRESULT GetClipboardData(
+        [in] DWORD dwReserved,
+        [out] IDataObject **ppDataObject);
+
+    HRESULT DoVerb(
+        [in] LONG iVerb,
+        [in, unique] LPMSG lpmsg,
+        [in, unique] IOleClientSite *pActiveSite,
+        [in] LONG lindex,
+        [in] HWND hwndParent,
+        [in, unique] LPCRECT lprcPosRect);
+
+    HRESULT EnumVerbs(
+        [out] IEnumOLEVERB **ppEnumOleVerb);
+
+    HRESULT Update();
+
+    HRESULT IsUpToDate();
+
+    HRESULT GetUserClassID(
+        [out] CLSID *pClsid);
+
+    HRESULT GetUserType(
+        [in] DWORD dwFormOfType,
+        [out] LPOLESTR *pszUserType);
+
+    HRESULT SetExtent(
+        [in] DWORD dwDrawAspect,
+        [in] SIZEL *psizel);
+
+    HRESULT GetExtent(
+        [in] DWORD dwDrawAspect,
+        [out] SIZEL *psizel);
+
+    HRESULT Advise(
+        [in, unique] IAdviseSink *pAdvSink,
+        [out] DWORD *pdwConnection);
+
+    HRESULT Unadvise(
+        [in] DWORD dwConnection);
+
+    HRESULT EnumAdvise(
+        [out] IEnumSTATDATA **ppenumAdvise);
+
+    HRESULT GetMiscStatus(
+        [in] DWORD dwAspect,
+        [out] DWORD *pdwStatus);
+
+    HRESULT SetColorScheme(
+        [in] LOGPALETTE *pLogpal);
+}
+
+
+/*****************************************************************************
+ * IOleAdviseHolder interface
+ */
+[
+    local,
+    object,
+    uuid(00000111-0000-0000-c000-000000000046)
+]
+interface IOleAdviseHolder : IUnknown
+{
+    typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER;
+
+    HRESULT Advise(
+        [in, unique] IAdviseSink *pAdvise,
+        [out] DWORD *pdwConnection);
+
+    HRESULT Unadvise(
+        [in] DWORD dwConnection);
+
+    HRESULT EnumAdvise(
+        [out] IEnumSTATDATA **ppenumAdvise);
+
+    HRESULT SendOnRename(
+        [in, unique] IMoniker *pmk);
+
+    HRESULT SendOnSave();
+    HRESULT SendOnClose();
+}
+
+
+/*****************************************************************************
+ * IContinue interface
+ */
+[
+    object,
+    uuid(0000012a-0000-0000-c000-000000000046)
+]
+interface IContinue : IUnknown
+{
+    HRESULT FContinue();
+}
+
+
+/*****************************************************************************
+ * IViewObject interface
+ */
+[
+    object,
+    uuid(0000010d-0000-0000-c000-000000000046)
+]
+interface IViewObject : IUnknown
+{
+    typedef [unique] IViewObject *LPVIEWOBJECT;
+
+    [local]
+    HRESULT Draw(
+        [in] DWORD dwDrawAspect,
+        [in] LONG lindex,
+        [in, unique] void * pvAspect,
+        [in, unique] DVTARGETDEVICE *ptd,
+        [in] HDC hdcTargetDev,
+        [in] HDC hdcDraw,
+        [in] LPCRECTL lprcBounds,
+        [in, unique] LPCRECTL lprcWBounds,
+        [in] BOOL (*pfnContinue)(ULONG_PTR dwContinue),
+        [in] ULONG_PTR dwContinue);
+
+    [call_as(Draw)]
+    HRESULT RemoteDraw(
+        [in] DWORD dwDrawAspect,
+        [in] LONG lindex,
+        [in] ULONG_PTR pvAspect,
+        [in, unique] DVTARGETDEVICE *ptd,
+        [in] ULONG_PTR hdcTargetDev,
+        [in] ULONG_PTR hdcDraw,
+        [in] LPCRECTL lprcBounds,
+        [in, unique] LPCRECTL lprcWBounds,
+        [in] IContinue *pContinue);
+
+    [local]
+    HRESULT GetColorSet(
+        [in] DWORD dwDrawAspect,
+        [in] LONG lindex,
+        [in, unique] void *pvAspect,
+        [in, unique] DVTARGETDEVICE *ptd,
+        [in] HDC hicTargetDev,
+        [out] LOGPALETTE **ppColorSet);
+
+    [call_as(GetColorSet)]
+    HRESULT RemoteGetColorSet(
+        [in] DWORD dwDrawAspect,
+        [in] LONG lindex,
+        [in] ULONG_PTR pvAspect,
+        [in, unique] DVTARGETDEVICE *ptd,
+        [in] ULONG_PTR hicTargetDev,
+        [out] LOGPALETTE **ppColorSet);
+
+    [local]
+    HRESULT Freeze(
+        [in] DWORD dwDrawAspect,
+        [in] LONG lindex,
+        [in, unique] void *pvAspect,
+        [out] DWORD *pdwFreeze);
+
+    [call_as(Freeze)]
+    HRESULT RemoteFreeze(
+        [in] DWORD dwDrawAspect,
+        [in] LONG lindex,
+        [in] ULONG_PTR pvAspect,
+        [out] DWORD *pdwFreeze);
+
+    HRESULT Unfreeze(
+        [in] DWORD dwFreeze);
+
+    HRESULT SetAdvise(
+        [in] DWORD aspects,
+        [in] DWORD advf,
+        [in, unique] IAdviseSink *pAdvSink);
+
+    [local]
+    HRESULT GetAdvise(
+        [out, unique] DWORD *pAspects,
+        [out, unique] DWORD *pAdvf,
+        [out] IAdviseSink **ppAdvSink);
+
+    [call_as(GetAdvise)]
+    HRESULT RemoteGetAdvise(
+        [out] DWORD *pAspects,
+        [out] DWORD *pAdvf,
+        [out] IAdviseSink **ppAdvSink);
+}
+
+
+/*****************************************************************************
+ * IViewObject2 interface
+ */
+[
+    object,
+    uuid(00000127-0000-0000-c000-000000000046)
+]
+interface IViewObject2 : IViewObject
+{
+    typedef [unique] IViewObject2 *LPVIEWOBJECT2;
+
+    HRESULT GetExtent(
+        [in]  DWORD dwDrawAspect,
+        [in]  LONG lindex,
+        [in, unique]  DVTARGETDEVICE* ptd,
+        [out] LPSIZEL lpsizel);
+}
+
+
+/*****************************************************************************
+ * IDropSource interface
+ */
+[
+    local,
+    object,
+    uuid(00000121-0000-0000-c000-000000000046)
+]
+interface IDropSource : IUnknown
+{
+    typedef [unique] IDropSource *LPDROPSOURCE;
+
+    HRESULT QueryContinueDrag(
+        [in] BOOL fEscapePressed,
+        [in] DWORD grfKeyState);
+
+    HRESULT GiveFeedback(
+        [in] DWORD dwEffect);
+}
+
+
+/*****************************************************************************
+ * IDropTarget interface
+ */
+[
+    object,
+    uuid(00000122-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IDropTarget : IUnknown
+{
+    typedef [unique] IDropTarget *LPDROPTARGET;
+
+    const DWORD MK_ALT = 0x20;
+    const DWORD DROPEFFECT_NONE = 0;
+    const DWORD DROPEFFECT_COPY = 1;
+    const DWORD DROPEFFECT_MOVE = 2;
+    const DWORD DROPEFFECT_LINK = 4;
+    const DWORD DROPEFFECT_SCROLL = 0x80000000;
+    const DWORD DD_DEFSCROLLINSET = 11;
+    const DWORD DD_DEFSCROLLDELAY = 50;
+    const DWORD DD_DEFSCROLLINTERVAL = 50;
+    const DWORD DD_DEFDRAGDELAY = 200;
+    const DWORD DD_DEFDRAGMINDIST = 2;
+
+    HRESULT DragEnter(
+        [in, unique] IDataObject *pDataObj,
+        [in] DWORD grfKeyState,
+        [in] POINTL pt,
+        [in, out] DWORD *pdwEffect);
+
+    HRESULT DragOver(
+        [in] DWORD grfKeyState,
+        [in] POINTL pt,
+        [in, out] DWORD *pdwEffect);
+
+    HRESULT DragLeave();
+
+    HRESULT Drop(
+        [in, unique] IDataObject *pDataObj,
+        [in] DWORD grfKeyState,
+        [in] POINTL pt,
+        [in, out] DWORD *pdwEffect);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl
new file mode 100644
index 0000000..512d911
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a69-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IOpenRowset : IUnknown
+{
+    [local]
+    HRESULT OpenRowset([in] IUnknown *pUnkOuter,
+                       [in, unique] DBID *pTableID,
+                       [in, unique] DBID *pIndexID,
+                       [in] REFIID riid,
+                       [in] ULONG cPropertySets,
+                       [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[],
+                       [out, iid_is(riid)] IUnknown **ppRowset);
+
+    [call_as(OpenRowset)]
+    HRESULT RemoteOpenRowset([in] IUnknown *pUnkOuter,
+                             [in, unique] DBID *pTableID,
+                             [in, unique] DBID *pIndexID,
+                             [in] REFIID riid,
+                             [in] ULONG cPropertySets,
+                             [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+                             [in, out, unique, iid_is(riid)] IUnknown **ppRowset,
+                             [in] ULONG cTotalProps,
+                             [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+                             [out] IErrorInfo **ppErrorInfoRem);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl
new file mode 100644
index 0000000..e0346f1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2006 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+/*****************************************************************************
+ *    IOptionArray interface
+ */
+[
+    local,
+    object,
+    uuid(22b6d492-0f88-11d1-ba19-00c04fd912d0),
+    pointer_default(unique)
+]
+interface IOptionArray : IUnknown
+{
+    typedef [unique] IOptionArray *LPOPTIONARRAY;
+
+    HRESULT QueryOption(
+        [in] DWORD  dwOption,
+        [out, size_is(*pcbBuf)] LPVOID pBuffer,
+        [in, out] ULONG *pcbBuf);
+
+    HRESULT SetOption(
+        [in] DWORD dwOption,
+        [in, size_is(cbBuf)] LPVOID pBuffer,
+        [in] ULONG cbBuf);
+}
+
+/*****************************************************************************
+ *    IHtmlLoadOptions interface
+ */
+[
+    local,
+    object,
+    uuid(a71a0808-0f88-11d1-ba19-00c04fd912d0),
+    pointer_default(unique)
+]
+interface IHtmlLoadOptions : IOptionArray
+{
+    typedef enum {
+        HTMLLOADOPTION_CODEPAGE,
+        HTMLLOADOPTION_INETSHORTCUTPATH,
+        HTMLLOADOPTION_HYPERLINK,
+        HTMLLOADOPTION_FRAMELOAD
+    } HTMLLOADOPTION;
+}
+
+cpp_quote("DEFINE_GUID(CLSID_HTMLLoadOptions, 0x18845040, 0x0FA5, 0x11D1, 0xBA,0x19, 0x00,0xC0,0x4F,0xD9,0x12,0xD0);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h
new file mode 100644
index 0000000..0646696
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2011 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _PATCHAPI_H_
+#define _PATCHAPI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define APPLY_OPTION_FAIL_IF_EXACT  0x00000001
+#define APPLY_OPTION_FAIL_IF_CLOSE  0x00000002
+#define APPLY_OPTION_TEST_ONLY      0x00000004
+#define APPLY_OPTION_VALID_FLAGS    0x00000007
+
+typedef struct _PATCH_IGNORE_RANGE
+{
+    ULONG OffsetInOldFile;
+    ULONG LengthInBytes;
+} PATCH_IGNORE_RANGE, *PPATCH_IGNORE_RANGE;
+
+typedef struct _PATCH_RETAIN_RANGE
+{
+    ULONG OffsetInOldFile;
+    ULONG LengthInBytes;
+    ULONG OffsetInNewFile;
+} PATCH_RETAIN_RANGE, *PPATCH_RETAIN_RANGE;
+
+BOOL WINAPI ApplyPatchToFileA(LPCSTR,LPCSTR,LPCSTR,ULONG);
+BOOL WINAPI ApplyPatchToFileW(LPCWSTR,LPCWSTR,LPCWSTR,ULONG);
+#define     ApplyPatchToFile WINELIB_NAME_AW(ApplyPatchToFile)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PATCHAPI_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h
new file mode 100644
index 0000000..34053ee
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h
@@ -0,0 +1,255 @@
+/*
+ * Performance Data Helper
+ *
+ * Copyright 2007 Hans Leidekker
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _PDH_H_
+#define _PDH_H_
+
+#include <windows.h>
+#include <winperf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LONG   PDH_STATUS;
+typedef HANDLE PDH_HQUERY;
+typedef HANDLE PDH_HCOUNTER;
+typedef HANDLE PDH_HLOG;
+
+typedef PDH_HCOUNTER HCOUNTER;
+typedef PDH_HQUERY   HQUERY;
+typedef PDH_HLOG     HLOG;
+
+#define PDH_CVERSION_WIN40  0x0400
+#define PDH_CVERSION_WIN50  0x0500
+#define PDH_VERSION         0x0503
+
+#define PDH_MAX_SCALE 7
+#define PDH_MIN_SCALE (-7)
+
+#define PDH_MAX_COUNTER_NAME    1024
+
+#define PDH_FMT_LONG        0x00000100
+#define PDH_FMT_DOUBLE      0x00000200
+#define PDH_FMT_LARGE       0x00000400
+#define PDH_FMT_NOSCALE     0x00001000
+#define PDH_FMT_1000        0x00002000
+#define PDH_FMT_NOCAP100    0x00008000
+
+#define DATA_SOURCE_REGISTRY    0x00000001
+#define DATA_SOURCE_LOGFILE     0x00000002
+#define DATA_SOURCE_WBEM        0x00000004
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_PDH_TYPE_AW(name)  /* nothing */
+#else  /* WINE_NO_UNICODE_MACROS */
+# ifdef UNICODE
+# define DECL_PDH_TYPE_AW(name)  typedef name##_W name;
+# else
+# define DECL_PDH_TYPE_AW(name)  typedef name##_A name;
+# endif
+#endif  /* WINE_NO_UNICODE_MACROS */
+
+typedef struct _PDH_FMT_COUNTERVALUE
+{
+    DWORD CStatus;
+    union
+    {
+        LONG     longValue;
+        double   doubleValue;
+        LONGLONG largeValue;
+        LPCSTR   AnsiStringValue;
+        LPCWSTR  WideStringValue;
+    } DUMMYUNIONNAME;
+} PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
+
+typedef struct _PDH_RAW_COUNTER
+{
+    DWORD    CStatus;
+    FILETIME TimeStamp;
+    LONGLONG FirstValue;
+    LONGLONG SecondValue;
+    DWORD    MultiCount;
+} PDH_RAW_COUNTER, *PPDH_RAW_COUNTER;
+
+typedef struct _PDH_COUNTER_PATH_ELEMENTS_A
+{
+    LPSTR szMachineName;
+    LPSTR szObjectName;
+    LPSTR szInstanceName;
+    LPSTR szParentInstance;
+    DWORD dwInstanceIndex;
+    LPSTR szCounterName;
+} PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A;
+
+typedef struct _PDH_COUNTER_PATH_ELEMENTS_W
+{
+    LPWSTR szMachineName;
+    LPWSTR szObjectName;
+    LPWSTR szInstanceName;
+    LPWSTR szParentInstance;
+    DWORD  dwInstanceIndex;
+    LPWSTR szCounterName;
+} PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W;
+
+DECL_PDH_TYPE_AW(PDH_COUNTER_PATH_ELEMENTS)
+DECL_PDH_TYPE_AW(PPDH_COUNTER_PATH_ELEMENTS)
+
+typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A
+{
+    LPSTR szMachineName;
+    GUID  ObjectGUID;
+    DWORD dwItemId;
+    LPSTR szInstanceName;
+} PDH_DATA_ITEM_PATH_ELEMENTS_A, *PPDH_DATA_ITEM_PATH_ELEMENTS_A;
+
+typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W
+{
+    LPWSTR szMachineName;
+    GUID   ObjectGUID;
+    DWORD  dwItemId;
+    LPWSTR szInstanceName;
+} PDH_DATA_ITEM_PATH_ELEMENTS_W, *PPDH_DATA_ITEM_PATH_ELEMENTS_W;
+
+DECL_PDH_TYPE_AW(PDH_DATA_ITEM_PATH_ELEMENTS)
+DECL_PDH_TYPE_AW(PPDH_DATA_ITEM_PATH_ELEMENTS)
+
+typedef struct _PDH_COUNTER_INFO_A
+{
+    DWORD     dwLength;
+    DWORD     dwType;
+    DWORD     CVersion;
+    DWORD     CStatus;
+    LONG      lScale;
+    LONG      lDefaultScale;
+    DWORD_PTR dwUserData;
+    DWORD_PTR dwQueryUserData;
+    LPSTR     szFullPath;
+    union
+    {
+        PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;
+        PDH_COUNTER_PATH_ELEMENTS_A   CounterPath;
+        struct
+        {
+            LPSTR szMachineName;
+            LPSTR szObjectName;
+            LPSTR szInstanceName;
+            LPSTR szParentInstance;
+            DWORD dwInstanceIndex;
+            LPSTR szCounterName;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    LPSTR szExplainText;
+    DWORD DataBuffer[1];
+} PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A;
+
+typedef struct _PDH_COUNTER_INFO_W
+{
+    DWORD     dwLength;
+    DWORD     dwType;
+    DWORD     CVersion;
+    DWORD     CStatus;
+    LONG      lScale;
+    LONG      lDefaultScale;
+    DWORD_PTR dwUserData;
+    DWORD_PTR dwQueryUserData;
+    LPWSTR    szFullPath;
+    union
+    {
+        PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;
+        PDH_COUNTER_PATH_ELEMENTS_W   CounterPath;
+        struct
+        {
+            LPWSTR szMachineName;
+            LPWSTR szObjectName;
+            LPWSTR szInstanceName;
+            LPWSTR szParentInstance;
+            DWORD  dwInstanceIndex;
+            LPWSTR szCounterName;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    LPWSTR szExplainText;
+    DWORD DataBuffer[1];
+} PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W;
+
+DECL_PDH_TYPE_AW(PDH_COUNTER_INFO)
+DECL_PDH_TYPE_AW(PPDH_COUNTER_INFO)
+
+#undef DECL_PDH_TYPE_AW
+
+PDH_STATUS WINAPI PdhAddCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);
+PDH_STATUS WINAPI PdhAddCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);
+#define    PdhAddCounter WINELIB_NAME_AW(PdhAddCounter)
+PDH_STATUS WINAPI PdhAddEnglishCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);
+PDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);
+#define    PdhAddEnglishCounter WINELIB_NAME_AW(PdhAddEnglishCounter)
+PDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY);
+PDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY);
+PDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY, DWORD, HANDLE);
+PDH_STATUS WINAPI PdhCollectQueryDataWithTime(PDH_HQUERY,LONGLONG *);
+PDH_STATUS WINAPI PdhEnumObjectsA(LPCSTR,LPCSTR,PZZSTR,LPDWORD,DWORD,BOOL);
+PDH_STATUS WINAPI PdhEnumObjectsW(LPCWSTR,LPCWSTR,PZZWSTR,LPDWORD,DWORD,BOOL);
+#define    PdhEnumObjects WINELIB_NAME_AW(PdhEnumObjects)
+PDH_STATUS WINAPI PdhEnumObjectItemsA(LPCSTR, LPCSTR, LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, DWORD, DWORD);
+PDH_STATUS WINAPI PdhEnumObjectItemsW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, DWORD, DWORD);
+#define    PdhEnumObjectItems WINELIB_NAME_AW(PdhEnumObjectItems)
+PDH_STATUS WINAPI PdhGetCounterInfoA(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_A);
+PDH_STATUS WINAPI PdhGetCounterInfoW(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_W);
+#define    PdhGetCounterInfo WINELIB_NAME_AW(PdhGetCounterInfo)
+PDH_STATUS WINAPI PdhGetCounterTimeBase(PDH_HCOUNTER, LONGLONG *);
+PDH_STATUS WINAPI PdhGetDllVersion(LPDWORD);
+PDH_STATUS WINAPI PdhGetFormattedCounterValue(PDH_HCOUNTER, DWORD, LPDWORD, PPDH_FMT_COUNTERVALUE);
+PDH_STATUS WINAPI PdhGetRawCounterValue(PDH_HCOUNTER, LPDWORD, PPDH_RAW_COUNTER);
+PDH_STATUS WINAPI PdhLookupPerfIndexByNameA(LPCSTR, LPCSTR, LPDWORD);
+PDH_STATUS WINAPI PdhLookupPerfIndexByNameW(LPCWSTR, LPCWSTR, LPDWORD);
+#define    PdhLookupPerfIndexByName WINELIB_NAME_AW(PdhLookupPerfIndexByName)
+PDH_STATUS WINAPI PdhLookupPerfNameByIndexA(LPCSTR, DWORD, LPSTR, LPDWORD);
+PDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR, DWORD, LPWSTR, LPDWORD);
+#define    PdhLookupPerfNameByIndex WINELIB_NAME_AW(PdhLookupPerfNameByIndex)
+PDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *, LPSTR, LPDWORD, DWORD);
+PDH_STATUS WINAPI PdhMakeCounterPathW(PDH_COUNTER_PATH_ELEMENTS_W *, LPWSTR, LPDWORD, DWORD);
+#define    PdhMakeCounterPath WINELIB_NAME_AW(PdhMakeCounterPath)
+PDH_STATUS WINAPI PdhOpenQueryA(LPCSTR, DWORD_PTR, PDH_HQUERY *);
+PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *);
+#define    PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery)
+PDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER);
+PDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER, LONG);
+PDH_STATUS WINAPI PdhSetDefaultRealTimeDataSource(DWORD);
+PDH_STATUS WINAPI PdhValidatePathA(LPCSTR);
+PDH_STATUS WINAPI PdhValidatePathW(LPCWSTR);
+#define    PdhValidatePath WINELIB_NAME_AW(PdhValidatePath)
+PDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG, LPCSTR);
+PDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG, LPCWSTR);
+#define    PdhValidatePathEx WINELIB_NAME_AW(PdhValidatePathEx)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PDH_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h
new file mode 100644
index 0000000..61f3e31
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h
@@ -0,0 +1,120 @@
+/*
+ * Performance Data Helper
+ *
+ * Copyright 2007 Hans Leidekker
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _PDH_MSG_H_
+#define _PDH_MSG_H_
+
+#define PDH_CSTATUS_VALID_DATA          0x00000000
+#define PDH_CSTATUS_NEW_DATA            0x00000001
+#define PDH_CSTATUS_NO_MACHINE          0x800007d0
+#define PDH_CSTATUS_NO_INSTANCE         0x800007d1
+#define PDH_MORE_DATA                   0x800007d2
+#define PDH_CSTATUS_ITEM_NOT_VALIDATED  0x800007d3
+#define PDH_RETRY                       0x800007d4
+#define PDH_NO_DATA                     0x800007d5
+#define PDH_CALC_NEGATIVE_DENOMINATOR   0x800007d6
+#define PDH_CALC_NEGATIVE_TIMEBASE      0x800007d7
+#define PDH_CALC_NEGATIVE_VALUE         0x800007d8
+#define PDH_DIALOG_CANCELLED            0x800007d9
+#define PDH_END_OF_LOG_FILE             0x800007da
+#define PDH_ASYNC_QUERY_TIMEOUT         0x800007db
+#define PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE 0x800007dc
+#define PDH_UNABLE_MAP_NAME_FILES       0x80000bd5
+#define PDH_PLA_VALIDATION_WARNING      0x80000bf3
+#define PDH_CSTATUS_NO_OBJECT           0xc0000bb8
+#define PDH_CSTATUS_NO_COUNTER          0xc0000bb9
+#define PDH_CSTATUS_INVALID_DATA        0xc0000bba
+#define PDH_MEMORY_ALLOCATION_FAILURE   0xc0000bbb
+#define PDH_INVALID_HANDLE              0xc0000bbc
+#define PDH_INVALID_ARGUMENT            0xc0000bbd
+#define PDH_FUNCTION_NOT_FOUND          0xc0000bbe
+#define PDH_CSTATUS_NO_COUNTERNAME      0xc0000bbf
+#define PDH_CSTATUS_BAD_COUNTERNAME     0xc0000bc0
+#define PDH_INVALID_BUFFER              0xc0000bc1
+#define PDH_INSUFFICIENT_BUFFER         0xc0000bc2
+#define PDH_CANNOT_CONNECT_MACHINE      0xc0000bc3
+#define PDH_INVALID_PATH                0xc0000bc4
+#define PDH_INVALID_INSTANCE            0xc0000bc5
+#define PDH_INVALID_DATA                0xc0000bc6
+#define PDH_NO_DIALOG_DATA              0xc0000bc7
+#define PDH_CANNOT_READ_NAME_STRINGS    0xc0000bc8
+#define PDH_LOG_FILE_CREATE_ERROR       0xc0000bc9
+#define PDH_LOG_FILE_OPEN_ERROR         0xc0000bca
+#define PDH_LOG_TYPE_NOT_FOUND          0xc0000bcb
+#define PDH_NO_MORE_DATA                0xc0000bcc
+#define PDH_ENTRY_NOT_IN_LOG_FILE       0xc0000bcd
+#define PDH_DATA_SOURCE_IS_LOG_FILE     0xc0000bce
+#define PDH_DATA_SOURCE_IS_REAL_TIME    0xc0000bcf
+#define PDH_UNABLE_READ_LOG_HEADER      0xc0000bd0
+#define PDH_FILE_NOT_FOUND              0xc0000bd1
+#define PDH_FILE_ALREADY_EXISTS         0xc0000bd2
+#define PDH_NOT_IMPLEMENTED             0xc0000bd3
+#define PDH_STRING_NOT_FOUND            0xc0000bd4
+#define PDH_UNKNOWN_LOG_FORMAT          0xc0000bd6
+#define PDH_UNKNOWN_LOGSVC_COMMAND      0xc0000bd7
+#define PDH_LOGSVC_QUERY_NOT_FOUND      0xc0000bd8
+#define PDH_LOGSVC_NOT_OPENED           0xc0000bd9
+#define PDH_WBEM_ERROR                  0xc0000bda
+#define PDH_ACCESS_DENIED               0xc0000bdb
+#define PDH_LOG_FILE_TOO_SMALL          0xc0000bdc
+#define PDH_INVALID_DATASOURCE          0xc0000bdd
+#define PDH_INVALID_SQLDB               0xc0000bde
+#define PDH_NO_COUNTERS                 0xc0000bdf
+#define PDH_SQL_ALLOC_FAILED            0xc0000be0
+#define PDH_SQL_ALLOCCON_FAILED         0xc0000be1
+#define PDH_SQL_EXEC_DIRECT_FAILED      0xc0000be2
+#define PDH_SQL_FETCH_FAILED            0xc0000be3
+#define PDH_SQL_ROWCOUNT_FAILED         0xc0000be4
+#define PDH_SQL_MORE_RESULTS_FAILED     0xc0000be5
+#define PDH_SQL_CONNECT_FAILED          0xc0000be6
+#define PDH_SQL_BIND_FAILED             0xc0000be7
+#define PDH_CANNOT_CONNECT_WMI_SERVER   0xc0000be8
+#define PDH_PLA_COLLECTION_ALREADY_RUNNING 0xc0000be9
+#define PDH_PLA_ERROR_SCHEDULE_OVERLAP  0xc0000bea
+#define PDH_PLA_COLLECTION_NOT_FOUND    0xc0000beb
+#define PDH_PLA_ERROR_SCHEDULE_ELAPSED  0xc0000bec
+#define PDH_PLA_ERROR_NOSTART           0xc0000bed
+#define PDH_PLA_ERROR_ALREADY_EXISTS    0xc0000bee
+#define PDH_PLA_ERROR_TYPE_MISMATCH     0xc0000bef
+#define PDH_PLA_ERROR_FILEPATH          0xc0000bf0
+#define PDH_PLA_SERVICE_ERROR           0xc0000bf1
+#define PDH_PLA_VALIDATION_ERROR        0xc0000bf2
+#define PDH_PLA_ERROR_NAME_TOO_LONG     0xc0000bf4
+#define PDH_INVALID_SQL_LOG_FORMAT      0xc0000bf5
+#define PDH_COUNTER_ALREADY_IN_QUERY    0xc0000bf6
+#define PDH_BINARY_LOG_CORRUPT          0xc0000bf7
+#define PDH_LOG_SAMPLE_TOO_SMALL        0xc0000bf8
+#define PDH_OS_LATER_VERSION            0xc0000bf9
+#define PDH_OS_EARLIER_VERSION          0xc0000bfa
+#define PDH_INCORRECT_APPEND_TIME       0xc0000bfb
+#define PDH_UNMATCHED_APPEND_COUNTER    0xc0000bfc
+#define PDH_SQL_ALTER_DETAIL_FAILED     0xc0000bfd
+#define PDH_QUERY_PERF_DATA_TIMEOUT     0xc0000bfe
+
+#endif /* _PDH_MSG_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl
new file mode 100644
index 0000000..4effb68
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2009 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+[
+    object,
+    uuid(91A565C1-E38F-11d0-94BF-00A0C9055CBF),
+    pointer_default(unique)
+]
+interface IPersistHistory : IPersist
+{
+    typedef [unique] IPersistHistory *LPPERSISTHISTORY;
+
+    HRESULT LoadHistory([in] IStream *pStream, [in] IBindCtx *pbc);
+
+    HRESULT SaveHistory([in] IStream *pStream);
+
+    HRESULT SetPositionCookie([in] DWORD dwPositioncookie);
+
+    HRESULT GetPositionCookie([out] DWORD *pdwPositioncookie);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h
new file mode 100644
index 0000000..3fa5e48
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 1991-1998 by LCS/Telegraphics
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PKTDEF_H
+#define __WINE_PKTDEF_H
+
+/***********************************************************************
+ * How to use pktdef.h:
+ * 
+ * 1. Include wintab.h
+ * 2. if using just one packet format:
+ *    a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits
+ *       (use the PK_* identifiers).
+ *    b. Include pktdef.h.
+ *    c. The generated structure typedef will be called PACKET.  Use PACKETDATA
+ *       and PACKETMODE to fill in the LOGCONTEXT structure.
+ * 3. If using multiple packet formats, for each one:
+ *    a. Define PACKETNAME. Its text value will be a prefix for this packet's
+ *       parameters and names.
+ *    b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
+ *       2.a. above.
+ *    c. Include pktdef.h.
+ *    d. The generated structure typedef will be called
+ *       <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
+ * 4. If using extension packet data, do the following additional steps
+ *    for each extension:
+ *    a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
+ *       as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.
+ *    b. The generated structure typedef will contain a field for the
+ *       extension data.
+ *    c. Scan the WTI_EXTENSION categories to find the extension's
+ *       packet mask bit.
+ *    d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
+ *       result in the lcPktData field of the LOGCONTEXT structure.
+ *    e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
+ *       packet mask bit with <PACKETNAME>PACKETMODE and use the result
+ *       in the lcPktMode field of the LOGCONTEXT structure.
+ *
+ *
+ * Example #1.  -- single packet format
+ *
+ * #include <wintab.h>
+ * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS  /@ x, y, buttons @/
+ * #define PACKETMODE PK_BUTTONS                /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * ...
+ *     lc.lcPktData = PACKETDATA;
+ *     lc.lcPktMode = PACKETMODE;
+ * 
+ * Example #2.  -- multiple formats
+ * 
+ * #include <wintab.h>
+ * #define PACKETNAME     MOE
+ * #define MOEPACKETDATA  PK_X | PK_Y | PK_BUTTONS  /@ x, y, buttons @/
+ * #define MOEPACKETMODE  PK_BUTTONS                /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * #define PACKETNAME       LARRY
+ * #define LARRYPACKETDATA  PK_Y | PK_Z | PK_BUTTONS  /@ y, z, buttons @/
+ * #define LARRYPACKETMODE  PK_BUTTONS                /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * #define PACKETNAME       CURLY
+ * #define CURLYPACKETDATA  PK_X | PK_Z | PK_BUTTONS  /@ x, z, buttons @/
+ * #define CURLYPACKETMODE  PK_BUTTONS                /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * ...
+ *     lcMOE.lcPktData = MOEPACKETDATA;
+ *     lcMOE.lcPktMode = MOEPACKETMODE;
+ * ...
+ *     lcLARRY.lcPktData = LARRYPACKETDATA;
+ *     lcLARRY.lcPktMode = LARRYPACKETMODE;
+ * ...
+ *     lcCURLY.lcPktData = CURLYPACKETDATA;
+ *     lcCURLY.lcPktMode = CURLYPACKETMODE;
+ *
+ * Example #3. -- extension packet data "XFOO".
+ *
+ * #include <wintab.h>
+ * #define PACKETDATA  PK_X | PK_Y | PK_BUTTONS  /@ x, y, buttons @/
+ * #define PACKETMODE  PK_BUTTONS                /@ buttons relative mode @/
+ * #define PACKETXFOO  PKEXT_ABSOLUTE            /@ XFOO absolute mode @/
+ * #include <pktdef.h>
+ * ...
+ * UINT ScanExts(UINT wTag)
+ * {
+ *     UINT i;
+ *     UINT wScanTag;
+ * 
+ *     /@ scan for wTag's info category. @/
+ *     for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {
+ *          if (wTag == wScanTag) {
+ *             /@ return category offset from WTI_EXTENSIONS. @/
+ *             return i;
+ *         }
+ *     }
+ *     /@ return error code. @/
+ *     return 0xFFFF;
+ * }
+ * ...
+ *     lc.lcPktData = PACKETDATA;
+ *     lc.lcPktMode = PACKETMODE;
+ * #ifdef PACKETXFOO
+ *     categoryXFOO = ScanExts(WTX_XFOO);
+ *     WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);
+ *    lc.lcPktData |= maskXFOO;
+ * #if PACKETXFOO == PKEXT_RELATIVE
+ *     lc.lcPktMode |= maskXFOO;
+ * #endif
+ * #endif
+ *    WTOpen(hWnd, &lc, TRUE);
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef PACKETNAME
+/* if no packet name prefix */
+# define __PFX(x)    x
+# define __IFX(x,y)  x ## y
+#else
+/* add prefixes and infixes to packet format names */
+# define __PFX(x)       __PFX2(PACKETNAME,x)
+# define __PFX2(p,x)    __PFX3(p,x)
+# define __PFX3(p,x)    p ## x
+# define __IFX(x,y)     __IFX2(x,PACKETNAME,y)
+# define __IFX2(x,i,y)  __IFX3(x,i,y)
+# define __IFX3(x,i,y)  x ## i ## y
+#endif
+
+#define __SFX2(x,s)  __SFX3(x,s)
+#define __SFX3(x,s)  x ## s
+
+#define __TAG  __IFX(tag,PACKET)
+#define __TYPES \
+  __PFX(PACKET), * __IFX(P,PACKET), \
+  * __IFX(NP,PACKET), * __IFX(LP,PACKET)
+
+#define __DATA    (__PFX(PACKETDATA))
+#define __MODE    (__PFX(PACKETMODE))
+#define __EXT(x)  __SFX2(__PFX(PACKET),x)
+
+typedef struct __TAG {
+#if (__DATA & PK_CONTEXT)
+    HCTX pkContext;
+#endif
+#if (__DATA & PK_STATUS)
+    UINT pkStatus;
+#endif
+#if (__DATA & PK_TIME)
+    DWORD pkTime;
+#endif
+#if (__DATA & PK_CHANGED)
+    WTPKT pkChanged;
+#endif
+#if (__DATA & PK_SERIAL_NUMBER)
+    UINT pkSerialNumber;
+#endif
+#if (__DATA & PK_CURSOR)
+    UINT pkCursor;
+#endif
+#if (__DATA & PK_BUTTONS)
+    DWORD pkButtons;
+#endif
+#if (__DATA & PK_X)
+    LONG pkX;
+#endif
+#if (__DATA & PK_Y)
+    LONG pkY;
+#endif
+#if (__DATA & PK_Z)
+    LONG pkZ;
+#endif
+#if (__DATA & PK_NORMAL_PRESSURE)
+# if (__MODE & PK_NORMAL_PRESSURE)
+    /* relative */
+    int pkNormalPressure;
+# else
+    /* absolute */
+    UINT pkNormalPressure;
+# endif
+#endif
+#if (__DATA & PK_TANGENT_PRESSURE)
+# if (__MODE & PK_TANGENT_PRESSURE)
+    /* relative */
+    int pkTangentPressure;
+# else
+    /* absolute */
+    UINT pkTangentPressure;
+# endif
+#endif
+#if (__DATA & PK_ORIENTATION)
+    ORIENTATION pkOrientation;
+#endif
+#if (__DATA & PK_ROTATION)
+    ROTATION pkRotation;  /* 1.1 */
+#endif
+
+#ifndef NOWTEXTENSIONS
+    /* extensions begin here. */
+
+#if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)
+    UINT pkFKeys;
+#endif
+#if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)
+    TILT pkTilt;
+#endif
+
+#endif
+
+} __TYPES;
+
+#undef PACKETNAME
+#undef __TAG
+#undef __TAG2
+#undef __TYPES
+#undef __TYPES2
+#undef __DATA
+#undef __MODE
+#undef __PFX
+#undef __PFX2
+#undef __PFX3
+#undef __IFX
+#undef __IFX2
+#undef __IFX3
+#undef __SFX2
+#undef __SFX3
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* defined(__WINE_PKTDEF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h
new file mode 100644
index 0000000..a5d8708
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H15
+#  endif
+/* Depth == 15 */
+
+#  if __WINE_PSHPACK_H14 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H14 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H14 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H14)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H14
+#  endif
+/* Depth == 14 */
+
+#  if __WINE_PSHPACK_H13 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H13 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H13 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H13)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H13
+#  endif
+/* Depth == 13 */
+
+#  if __WINE_PSHPACK_H12 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H12 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H12 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H12)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H12
+#  endif
+/* Depth == 12 */
+
+#  if __WINE_PSHPACK_H11 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H11 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H11 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H11)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H11
+#  endif
+/* Depth == 11 */
+
+#  if __WINE_PSHPACK_H10 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H10 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H10 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H10)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H10
+#  endif
+/* Depth == 10 */
+
+#  if __WINE_PSHPACK_H9 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H9 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H9 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H9)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H9
+#  endif
+/* Depth == 9 */
+
+#  if __WINE_PSHPACK_H8 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H8 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H8 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H8)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H8
+#  endif
+/* Depth == 8 */
+
+#  if __WINE_PSHPACK_H7 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H7 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H7 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H7)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H7
+#  endif
+/* Depth == 7 */
+
+#  if __WINE_PSHPACK_H6 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H6 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H6 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H6)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H6
+#  endif
+/* Depth == 6 */
+
+#  if __WINE_PSHPACK_H5 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H5 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H5 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H5)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H5
+#  endif
+/* Depth == 5 */
+
+#  if __WINE_PSHPACK_H4 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H4 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H4 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H4)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H4
+#  endif
+/* Depth == 4 */
+
+#  if __WINE_PSHPACK_H3 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H3 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H3 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H3)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H3
+#  endif
+/* Depth == 3 */
+
+#  if __WINE_PSHPACK_H2 == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H2 == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H2 == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H2)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H2
+#  endif
+/* Depth == 2 */
+
+#  if __WINE_PSHPACK_H == 1
+#    pragma pack(1)
+#  elif __WINE_PSHPACK_H == 2
+#    pragma pack(2)
+#  elif __WINE_PSHPACK_H == 8
+#    pragma pack(8)
+#  else
+#    pragma pack(4)
+#  endif
+
+#elif defined(__WINE_PSHPACK_H)
+#  ifndef __WINE_INTERNAL_POPPACK
+#    undef __WINE_PSHPACK_H
+#  endif
+/* Depth == 1 */
+
+#  if defined(__SUNPRO_CC)
+#    warning "Assuming a default alignment of 4"
+#    pragma pack(4)
+#  else
+#    pragma pack()
+#  endif
+
+#else
+/* Depth == 0 ! */
+
+#error "Popping alignment isn't possible since no alignment has been pushed"
+
+#endif
+
+#undef __WINE_INTERNAL_POPPACK
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h
new file mode 100644
index 0000000..91cea76
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2005 Benjamin Cutler
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_POWRPROF_H
+#define __WINE_POWRPROF_H 1
+
+#define EnableSysTrayBatteryMeter	0x01
+#define EnableMultiBatteryDisplay	0x02
+#define EnablePasswordLogon		0x04
+#define EnableWakeOnRing		0x08
+#define EnableVideoDimDisplay		0x10
+
+typedef struct _GLOBAL_MACHINE_POWER_POLICY {
+	ULONG Revision;
+	SYSTEM_POWER_STATE LidOpenWakeAc;
+	SYSTEM_POWER_STATE LidOpenWakeDc;
+	ULONG BroadcastCapacityResolution;
+} GLOBAL_MACHINE_POWER_POLICY, 
+*PGLOBAL_MACHINE_POWER_POLICY;
+
+typedef struct _GLOBAL_USER_POWER_POLICY {
+	ULONG Revision;
+	POWER_ACTION_POLICY PowerButtonAc;
+	POWER_ACTION_POLICY PowerButtonDc;
+	POWER_ACTION_POLICY SleepButtonAc;
+	POWER_ACTION_POLICY SleepButtonDc;
+	POWER_ACTION_POLICY LidCloseAc;
+	POWER_ACTION_POLICY LidCloseDc;
+	SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+	ULONG GlobalFlags;
+} GLOBAL_USER_POWER_POLICY, 
+*PGLOBAL_USER_POWER_POLICY;
+
+typedef struct _GLOBAL_POWER_POLICY {
+	GLOBAL_USER_POWER_POLICY user;
+	GLOBAL_MACHINE_POWER_POLICY mach;
+} GLOBAL_POWER_POLICY, 
+*PGLOBAL_POWER_POLICY;
+
+typedef struct _MACHINE_POWER_POLICY {
+	ULONG Revision;
+	SYSTEM_POWER_STATE MinSleepAc;
+	SYSTEM_POWER_STATE MinSleepDc;
+	SYSTEM_POWER_STATE ReducedLatencySleepAc;
+	SYSTEM_POWER_STATE ReducedLatencySleepDc;
+	ULONG DozeTimeoutAc;
+	ULONG DozeTimeoutDc;
+	ULONG DozeS4TimeoutAc;
+	ULONG DozeS4TimeoutDc;
+	UCHAR MinThrottleAc;
+	UCHAR MinThrottleDc;
+	UCHAR pad1[2];
+	POWER_ACTION_POLICY OverThrottledAc;
+	POWER_ACTION_POLICY OverThrottledDc;
+} MACHINE_POWER_POLICY, 
+*PMACHINE_POWER_POLICY;
+
+typedef struct _MACHINE_PROCESSOR_POWER_POLICY {
+	ULONG Revision;
+	PROCESSOR_POWER_POLICY ProcessorPolicyAc;
+	PROCESSOR_POWER_POLICY ProcessorPolicyDc;
+} MACHINE_PROCESSOR_POWER_POLICY, 
+*PMACHINE_PROCESSOR_POWER_POLICY;
+
+typedef struct _USER_POWER_POLICY {
+	ULONG Revision;
+	POWER_ACTION_POLICY IdleAc;
+	POWER_ACTION_POLICY IdleDc;
+	ULONG IdleTimeoutAc;
+	ULONG IdleTimeoutDc;
+	UCHAR IdleSensitivityAc;
+	UCHAR IdleSensitivityDc;
+	UCHAR ThrottlePolicyAc;
+	UCHAR ThrottlePolicyDc;
+	SYSTEM_POWER_STATE MaxSleepAc;
+	SYSTEM_POWER_STATE MaxSleepDc;
+	ULONG Reserved[2];
+	ULONG VideoTimeoutAc;
+	ULONG VideoTimeoutDc;
+	ULONG SpindownTimeoutAc;
+	ULONG SpindownTimeoutDc;
+	BOOLEAN OptimizeForPowerAc;
+	BOOLEAN OptimizeForPowerDc;
+	UCHAR FanThrottleToleranceAc;
+	UCHAR FanThrottleToleranceDc;
+	UCHAR ForcedThrottleAc;
+	UCHAR ForcedThrottleDc;
+} USER_POWER_POLICY, 
+*PUSER_POWER_POLICY;
+
+typedef struct _POWER_POLICY {
+	USER_POWER_POLICY user;
+	MACHINE_POWER_POLICY mach;
+} POWER_POLICY, 
+*PPOWER_POLICY;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPWSTR, DWORD, LPWSTR, PPOWER_POLICY, LPARAM);
+
+NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG);
+BOOLEAN WINAPI CanUserWritePwrScheme(VOID);
+BOOLEAN WINAPI DeletePwrScheme(UINT);
+BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);
+BOOLEAN WINAPI GetActivePwrScheme(PUINT);
+BOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
+BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT, PUINT);
+BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
+BOOLEAN WINAPI IsPwrHibernateAllowed(VOID);
+BOOLEAN WINAPI IsPwrShutdownAllowed(VOID);
+BOOLEAN WINAPI IsPwrSuspendAllowed(VOID);
+BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY);
+BOOLEAN WINAPI SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);
+BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI WritePwrScheme(PUINT, LPWSTR, LPWSTR, PPOWER_POLICY);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _POWRPROF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h
new file mode 100644
index 0000000..f1ed43c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PROFINFO_H
+#define __WINE_PROFINFO_H
+
+typedef struct _PROFILEINFOA {
+    DWORD dwSize;
+    DWORD dwFlags;
+    LPSTR lpUserName;
+    LPSTR lpProfilePath;
+    LPSTR lpDefaultPath;
+    LPSTR lpServerName;
+    LPSTR lpPolicyPath;
+    HANDLE hProfile;
+} PROFILEINFOA, *LPPROFILEINFOA;
+
+typedef struct _PROFILEINFOW {
+    DWORD dwSize;
+    DWORD dwFlags;
+    LPWSTR lpUserName;
+    LPWSTR lpProfilePath;
+    LPWSTR lpDefaultPath;
+    LPWSTR lpServerName;
+    LPWSTR lpPolicyPath;
+    HANDLE hProfile;
+} PROFILEINFOW, *LPPROFILEINFOW;
+
+DECL_WINELIB_TYPE_AW(PROFILEINFO)
+DECL_WINELIB_TYPE_AW(LPPROFILEINFO)
+
+#endif /* __WINE_PROFINFO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h
new file mode 100644
index 0000000..9463768
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h
@@ -0,0 +1,1027 @@
+/*** Autogenerated by WIDL 1.1.36 from propidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_PROPIDL_H
+#define __WIDL_PROPIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+#include <oaidl.h>
+
+/* Forward declarations */
+
+#ifndef __IPropertyStorage_FWD_DEFINED__
+#define __IPropertyStorage_FWD_DEFINED__
+typedef interface IPropertyStorage IPropertyStorage;
+#endif
+
+#ifndef __IPropertySetStorage_FWD_DEFINED__
+#define __IPropertySetStorage_FWD_DEFINED__
+typedef interface IPropertySetStorage IPropertySetStorage;
+#endif
+
+#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG;
+#endif
+
+#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
+#endif
+
+
+#ifdef PID_DICTIONARY
+#undef PID_DICTIONARY
+#endif
+#ifdef PID_CODEPAGE
+#undef PID_CODEPAGE
+#endif
+#ifdef PID_SECURITY
+#undef PID_SECURITY
+#endif
+#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG;
+#endif
+
+#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
+#endif
+
+/*****************************************************************************
+ * IPropertyStorage interface
+ */
+#ifndef __IPropertyStorage_INTERFACE_DEFINED__
+#define __IPropertyStorage_INTERFACE_DEFINED__
+
+typedef IPropertyStorage *LPPROPERTYSTORAGE;
+#define PROPSETFLAG_DEFAULT (0)
+
+#define PROPSETFLAG_NONSIMPLE (1)
+
+#define PROPSETFLAG_ANSI (2)
+
+#define PROPSETFLAG_UNBUFFERED (4)
+
+#define PROPSETFLAG_CASE_SENSITIVE (8)
+
+#define PROPSET_BEHAVIOR_CASE_SENSITIVE (1)
+
+#define PID_DICTIONARY (0x0)
+
+#define PID_CODEPAGE (0x1)
+
+#define PID_FIRST_USABLE (0x2)
+
+#define PID_FIRST_NAME_DEFAULT (0xfff)
+
+#define PID_LOCALE (0x80000000)
+
+#define PID_MODIFY_TIME (0x80000001)
+
+#define PID_SECURITY (0x80000002)
+
+#define PID_BEHAVIOR (0x80000003)
+
+#define PID_ILLEGAL (0xffffffff)
+
+#define PID_MIN_READONLY (0x80000000)
+
+#define PID_MAX_READONLY (0xbfffffff)
+
+typedef struct tagPROPVARIANT PROPVARIANT;
+typedef struct tagCAUB {
+    ULONG cElems;
+    unsigned char *pElems;
+} CAUB;
+typedef struct tagCAI {
+    ULONG cElems;
+    short *pElems;
+} CAI;
+typedef struct tagCAUI {
+    ULONG cElems;
+    USHORT *pElems;
+} CAUI;
+typedef struct tagCAL {
+    ULONG cElems;
+    LONG *pElems;
+} CAL;
+typedef struct tagCAUL {
+    ULONG cElems;
+    ULONG *pElems;
+} CAUL;
+typedef struct tagCAFLT {
+    ULONG cElems;
+    float *pElems;
+} CAFLT;
+typedef struct tagCADBL {
+    ULONG cElems;
+    double *pElems;
+} CADBL;
+typedef struct tagCACY {
+    ULONG cElems;
+    CY *pElems;
+} CACY;
+typedef struct tagCADATE {
+    ULONG cElems;
+    DATE *pElems;
+} CADATE;
+typedef struct tagCABSTR {
+    ULONG cElems;
+    BSTR *pElems;
+} CABSTR;
+typedef struct tagCABSTRBLOB {
+    ULONG cElems;
+    BSTRBLOB *pElems;
+} CABSTRBLOB;
+typedef struct tagCABOOL {
+    ULONG cElems;
+    VARIANT_BOOL *pElems;
+} CABOOL;
+typedef struct tagCASCODE {
+    ULONG cElems;
+    SCODE *pElems;
+} CASCODE;
+typedef struct tagCAPROPVARIANT {
+    ULONG cElems;
+    PROPVARIANT *pElems;
+} CAPROPVARIANT;
+typedef struct tagCAH {
+    ULONG cElems;
+    LARGE_INTEGER *pElems;
+} CAH;
+typedef struct tagCAUH {
+    ULONG cElems;
+    ULARGE_INTEGER *pElems;
+} CAUH;
+typedef struct tagCALPSTR {
+    ULONG cElems;
+    LPSTR *pElems;
+} CALPSTR;
+typedef struct tagCALPWSTR {
+    ULONG cElems;
+    LPWSTR *pElems;
+} CALPWSTR;
+typedef struct tagCAFILETIME {
+    ULONG cElems;
+    FILETIME *pElems;
+} CAFILETIME;
+typedef struct tagCACLIPDATA {
+    ULONG cElems;
+    CLIPDATA *pElems;
+} CACLIPDATA;
+typedef struct tagCACLSID {
+    ULONG cElems;
+    CLSID *pElems;
+} CACLSID;
+struct tagPROPVARIANT {
+    VARTYPE vt;
+    WORD wReserved1;
+    WORD wReserved2;
+    WORD wReserved3;
+    union {
+        char cVal;
+        UCHAR bVal;
+        short iVal;
+        USHORT uiVal;
+        VARIANT_BOOL boolVal;
+        LONG lVal;
+        ULONG ulVal;
+        float fltVal;
+        SCODE scode;
+        LARGE_INTEGER hVal;
+        ULARGE_INTEGER uhVal;
+        double dblVal;
+        CY cyVal;
+        DATE date;
+        FILETIME filetime;
+        CLSID *puuid;
+        BLOB blob;
+        CLIPDATA *pclipdata;
+        IStream *pStream;
+        IStorage *pStorage;
+        BSTR bstrVal;
+        BSTRBLOB bstrblobVal;
+        LPSTR pszVal;
+        LPWSTR pwszVal;
+        CAUB caub;
+        CAI cai;
+        CAUI caui;
+        CABOOL cabool;
+        CAL cal;
+        CAUL caul;
+        CAFLT caflt;
+        CASCODE cascode;
+        CAH cah;
+        CAUH cauh;
+        CADBL cadbl;
+        CACY cacy;
+        CADATE cadate;
+        CAFILETIME cafiletime;
+        CACLSID cauuid;
+        CACLIPDATA caclipdata;
+        CABSTR cabstr;
+        CABSTRBLOB cabstrblob;
+        CALPSTR calpstr;
+        CALPWSTR calpwstr;
+        CAPROPVARIANT capropvar;
+        LPSAFEARRAY parray;
+        CHAR *pcVal;
+        UCHAR *pbVal;
+        SHORT *piVal;
+        USHORT *puiVal;
+        LONG *plVal;
+        ULONG *pulVal;
+        INT *pintVal;
+        UINT *puintVal;
+        FLOAT *pfltVal;
+        DOUBLE *pdblVal;
+        VARIANT_BOOL *pboolVal;
+        DECIMAL *pdecVal;
+        SCODE *pscode;
+        CY *pcyVal;
+        DATE *pdate;
+        BSTR *pbstrVal;
+        IUnknown **ppunkVal;
+        IDispatch **ppdispVal;
+        LPSAFEARRAY *pparray;
+        PROPVARIANT *pvarVal;
+    } DUMMYUNIONNAME;
+};
+
+typedef struct tagPROPVARIANT *LPPROPVARIANT;
+#if 0
+typedef const PROPVARIANT *REFPROPVARIANT;
+#endif
+#ifndef _REFPROPVARIANT_DEFINED
+#define _REFPROPVARIANT_DEFINED
+#ifdef __cplusplus
+#define REFPROPVARIANT const PROPVARIANT &
+#else
+#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST
+#endif
+#endif
+#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */
+
+#define PIDSI_TITLE        0x00000002L /* VT_LPSTR */
+#define PIDSI_SUBJECT      0x00000003L /* VT_LPSTR */
+#define PIDSI_AUTHOR       0x00000004L /* VT_LPSTR */
+#define PIDSI_KEYWORDS     0x00000005L /* VT_LPSTR */
+#define PIDSI_COMMENTS     0x00000006L /* VT_LPSTR */
+#define PIDSI_TEMPLATE     0x00000007L /* VT_LPSTR */
+#define PIDSI_LASTAUTHOR   0x00000008L /* VT_LPSTR */
+#define PIDSI_REVNUMBER    0x00000009L /* VT_LPSTR */
+#define PIDSI_EDITTIME     0x0000000AL /* VT_FILETIME (UTC) */
+#define PIDSI_LASTPRINTED  0x0000000BL /* VT_FILETIME (UTC) */
+#define PIDSI_CREATE_DTM   0x0000000CL /* VT_FILETIME (UTC) */
+#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */
+#define PIDSI_PAGECOUNT    0x0000000EL /* VT_I4 */
+#define PIDSI_WORDCOUNT    0x0000000FL /* VT_I4 */
+#define PIDSI_CHARCOUNT    0x00000010L /* VT_I4 */
+#define PIDSI_THUMBNAIL    0x00000011L /* VT_CF */
+#define PIDSI_APPNAME      0x00000012L /* VT_LPSTR */
+#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */
+
+#define PIDDSI_CATEGORY    0x00000002L /* VT_LPSTR */
+#define PIDDSI_PRESFORMAT  0x00000003L /* VT_LPSTR */
+#define PIDDSI_BYTECOUNT   0x00000004L /* VT_I4 */
+#define PIDDSI_LINECOUNT   0x00000005L /* VT_I4 */
+#define PIDDSI_PARCOUNT    0x00000006L /* VT_I4 */
+#define PIDDSI_SLIDECOUNT  0x00000007L /* VT_I4 */
+#define PIDDSI_NOTECOUNT   0x00000008L /* VT_I4 */
+#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */
+#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */
+#define PIDDSI_SCALE       0x0000000BL /* VT_BOOL */
+#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */
+#define PIDDSI_DOCPARTS    0x0000000DL /* VT_LPSTR|VT_VECTOR */
+#define PIDDSI_MANAGER     0x0000000EL /* VT_LPSTR */
+#define PIDDSI_COMPANY     0x0000000FL /* VT_LPSTR */
+#define PIDDSI_LINKSDIRTY  0x00000010L /* VT_B0OL */
+#define PRSPEC_INVALID (0xffffffff)
+
+#define PRSPEC_LPWSTR (0)
+
+#define PRSPEC_PROPID (1)
+
+typedef struct tagPROPSPEC {
+    ULONG ulKind;
+    union {
+        PROPID propid;
+        LPOLESTR lpwstr;
+    } DUMMYUNIONNAME;
+} PROPSPEC;
+typedef struct tagSTATPROPSTG {
+    LPOLESTR lpwstrName;
+    PROPID propid;
+    VARTYPE vt;
+} STATPROPSTG;
+/* Macros for dwOSVersion member of STATPROPSETSTG */
+#define PROPSETHDR_OSVER_KIND(dwOSVer)  HIWORD((dwOSVer))
+#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))
+#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))
+#define PROPSETHDR_OSVERSION_UNKNOWN    0xffffffff
+typedef struct tagSTATPROPSETSTG {
+    FMTID fmtid;
+    CLSID clsid;
+    DWORD grfFlags;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD dwOSVersion;
+} STATPROPSETSTG;
+DEFINE_GUID(IID_IPropertyStorage, 0x00000138, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPropertyStorage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ReadMultiple(
+        ULONG cpspec,
+        const PROPSPEC rgpspec[],
+        PROPVARIANT rgpropvar[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WriteMultiple(
+        ULONG cpspec,
+        const PROPSPEC rgpspec[],
+        const PROPVARIANT rgpropvar[],
+        PROPID propidNameFirst) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeleteMultiple(
+        ULONG cpspec,
+        const PROPSPEC rgpspec[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames(
+        ULONG cpropid,
+        const PROPID rgpropid[],
+        LPOLESTR rglpwstrName[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WritePropertyNames(
+        ULONG cpropid,
+        const PROPID rgpropid[],
+        const LPOLESTR rglpwstrName[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames(
+        ULONG cpropid,
+        const PROPID rgpropid[]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Commit(
+        DWORD grfCommitFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Revert(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Enum(
+        IEnumSTATPROPSTG **ppenum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTimes(
+        const FILETIME *pctime,
+        const FILETIME *patime,
+        const FILETIME *pmtime) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClass(
+        REFCLSID clsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stat(
+        STATPROPSETSTG *statpsstg) = 0;
+
+};
+#else
+typedef struct IPropertyStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPropertyStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPropertyStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPropertyStorage* This);
+
+    /*** IPropertyStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *ReadMultiple)(
+        IPropertyStorage* This,
+        ULONG cpspec,
+        const PROPSPEC rgpspec[],
+        PROPVARIANT rgpropvar[]);
+
+    HRESULT (STDMETHODCALLTYPE *WriteMultiple)(
+        IPropertyStorage* This,
+        ULONG cpspec,
+        const PROPSPEC rgpspec[],
+        const PROPVARIANT rgpropvar[],
+        PROPID propidNameFirst);
+
+    HRESULT (STDMETHODCALLTYPE *DeleteMultiple)(
+        IPropertyStorage* This,
+        ULONG cpspec,
+        const PROPSPEC rgpspec[]);
+
+    HRESULT (STDMETHODCALLTYPE *ReadPropertyNames)(
+        IPropertyStorage* This,
+        ULONG cpropid,
+        const PROPID rgpropid[],
+        LPOLESTR rglpwstrName[]);
+
+    HRESULT (STDMETHODCALLTYPE *WritePropertyNames)(
+        IPropertyStorage* This,
+        ULONG cpropid,
+        const PROPID rgpropid[],
+        const LPOLESTR rglpwstrName[]);
+
+    HRESULT (STDMETHODCALLTYPE *DeletePropertyNames)(
+        IPropertyStorage* This,
+        ULONG cpropid,
+        const PROPID rgpropid[]);
+
+    HRESULT (STDMETHODCALLTYPE *Commit)(
+        IPropertyStorage* This,
+        DWORD grfCommitFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Revert)(
+        IPropertyStorage* This);
+
+    HRESULT (STDMETHODCALLTYPE *Enum)(
+        IPropertyStorage* This,
+        IEnumSTATPROPSTG **ppenum);
+
+    HRESULT (STDMETHODCALLTYPE *SetTimes)(
+        IPropertyStorage* This,
+        const FILETIME *pctime,
+        const FILETIME *patime,
+        const FILETIME *pmtime);
+
+    HRESULT (STDMETHODCALLTYPE *SetClass)(
+        IPropertyStorage* This,
+        REFCLSID clsid);
+
+    HRESULT (STDMETHODCALLTYPE *Stat)(
+        IPropertyStorage* This,
+        STATPROPSETSTG *statpsstg);
+
+    END_INTERFACE
+} IPropertyStorageVtbl;
+interface IPropertyStorage {
+    CONST_VTBL IPropertyStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPropertyStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertyStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPropertyStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertyStorage methods ***/
+#define IPropertyStorage_ReadMultiple(This,cpspec,rgpspec,rgpropvar) (This)->lpVtbl->ReadMultiple(This,cpspec,rgpspec,rgpropvar)
+#define IPropertyStorage_WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst) (This)->lpVtbl->WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst)
+#define IPropertyStorage_DeleteMultiple(This,cpspec,rgpspec) (This)->lpVtbl->DeleteMultiple(This,cpspec,rgpspec)
+#define IPropertyStorage_ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName) (This)->lpVtbl->ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName)
+#define IPropertyStorage_WritePropertyNames(This,cpropid,rgpropid,rglpwstrName) (This)->lpVtbl->WritePropertyNames(This,cpropid,rgpropid,rglpwstrName)
+#define IPropertyStorage_DeletePropertyNames(This,cpropid,rgpropid) (This)->lpVtbl->DeletePropertyNames(This,cpropid,rgpropid)
+#define IPropertyStorage_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IPropertyStorage_Revert(This) (This)->lpVtbl->Revert(This)
+#define IPropertyStorage_Enum(This,ppenum) (This)->lpVtbl->Enum(This,ppenum)
+#define IPropertyStorage_SetTimes(This,pctime,patime,pmtime) (This)->lpVtbl->SetTimes(This,pctime,patime,pmtime)
+#define IPropertyStorage_SetClass(This,clsid) (This)->lpVtbl->SetClass(This,clsid)
+#define IPropertyStorage_Stat(This,statpsstg) (This)->lpVtbl->Stat(This,statpsstg)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPropertyStorage_ReadMultiple_Proxy(
+    IPropertyStorage* This,
+    ULONG cpspec,
+    const PROPSPEC rgpspec[],
+    PROPVARIANT rgpropvar[]);
+void __RPC_STUB IPropertyStorage_ReadMultiple_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_WriteMultiple_Proxy(
+    IPropertyStorage* This,
+    ULONG cpspec,
+    const PROPSPEC rgpspec[],
+    const PROPVARIANT rgpropvar[],
+    PROPID propidNameFirst);
+void __RPC_STUB IPropertyStorage_WriteMultiple_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_DeleteMultiple_Proxy(
+    IPropertyStorage* This,
+    ULONG cpspec,
+    const PROPSPEC rgpspec[]);
+void __RPC_STUB IPropertyStorage_DeleteMultiple_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_ReadPropertyNames_Proxy(
+    IPropertyStorage* This,
+    ULONG cpropid,
+    const PROPID rgpropid[],
+    LPOLESTR rglpwstrName[]);
+void __RPC_STUB IPropertyStorage_ReadPropertyNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_WritePropertyNames_Proxy(
+    IPropertyStorage* This,
+    ULONG cpropid,
+    const PROPID rgpropid[],
+    const LPOLESTR rglpwstrName[]);
+void __RPC_STUB IPropertyStorage_WritePropertyNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_DeletePropertyNames_Proxy(
+    IPropertyStorage* This,
+    ULONG cpropid,
+    const PROPID rgpropid[]);
+void __RPC_STUB IPropertyStorage_DeletePropertyNames_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Commit_Proxy(
+    IPropertyStorage* This,
+    DWORD grfCommitFlags);
+void __RPC_STUB IPropertyStorage_Commit_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Revert_Proxy(
+    IPropertyStorage* This);
+void __RPC_STUB IPropertyStorage_Revert_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Enum_Proxy(
+    IPropertyStorage* This,
+    IEnumSTATPROPSTG **ppenum);
+void __RPC_STUB IPropertyStorage_Enum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_SetTimes_Proxy(
+    IPropertyStorage* This,
+    const FILETIME *pctime,
+    const FILETIME *patime,
+    const FILETIME *pmtime);
+void __RPC_STUB IPropertyStorage_SetTimes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_SetClass_Proxy(
+    IPropertyStorage* This,
+    REFCLSID clsid);
+void __RPC_STUB IPropertyStorage_SetClass_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Stat_Proxy(
+    IPropertyStorage* This,
+    STATPROPSETSTG *statpsstg);
+void __RPC_STUB IPropertyStorage_Stat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPropertyStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPropertySetStorage interface
+ */
+#ifndef __IPropertySetStorage_INTERFACE_DEFINED__
+#define __IPropertySetStorage_INTERFACE_DEFINED__
+
+typedef IPropertySetStorage *LPPROPERTYSETSTORAGE;
+DEFINE_GUID(IID_IPropertySetStorage, 0x0000013a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPropertySetStorage : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Create(
+        REFFMTID rfmtid,
+        const CLSID *pclsid,
+        DWORD grfFlags,
+        DWORD grfMode,
+        IPropertyStorage **ppprstg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Open(
+        REFFMTID rfmtid,
+        DWORD grfMode,
+        IPropertyStorage **ppprstg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Delete(
+        REFFMTID rfmtid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Enum(
+        IEnumSTATPROPSETSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IPropertySetStorageVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPropertySetStorage* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPropertySetStorage* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPropertySetStorage* This);
+
+    /*** IPropertySetStorage methods ***/
+    HRESULT (STDMETHODCALLTYPE *Create)(
+        IPropertySetStorage* This,
+        REFFMTID rfmtid,
+        const CLSID *pclsid,
+        DWORD grfFlags,
+        DWORD grfMode,
+        IPropertyStorage **ppprstg);
+
+    HRESULT (STDMETHODCALLTYPE *Open)(
+        IPropertySetStorage* This,
+        REFFMTID rfmtid,
+        DWORD grfMode,
+        IPropertyStorage **ppprstg);
+
+    HRESULT (STDMETHODCALLTYPE *Delete)(
+        IPropertySetStorage* This,
+        REFFMTID rfmtid);
+
+    HRESULT (STDMETHODCALLTYPE *Enum)(
+        IPropertySetStorage* This,
+        IEnumSTATPROPSETSTG **ppenum);
+
+    END_INTERFACE
+} IPropertySetStorageVtbl;
+interface IPropertySetStorage {
+    CONST_VTBL IPropertySetStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPropertySetStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertySetStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPropertySetStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertySetStorage methods ***/
+#define IPropertySetStorage_Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg) (This)->lpVtbl->Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg)
+#define IPropertySetStorage_Open(This,rfmtid,grfMode,ppprstg) (This)->lpVtbl->Open(This,rfmtid,grfMode,ppprstg)
+#define IPropertySetStorage_Delete(This,rfmtid) (This)->lpVtbl->Delete(This,rfmtid)
+#define IPropertySetStorage_Enum(This,ppenum) (This)->lpVtbl->Enum(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Create_Proxy(
+    IPropertySetStorage* This,
+    REFFMTID rfmtid,
+    const CLSID *pclsid,
+    DWORD grfFlags,
+    DWORD grfMode,
+    IPropertyStorage **ppprstg);
+void __RPC_STUB IPropertySetStorage_Create_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Open_Proxy(
+    IPropertySetStorage* This,
+    REFFMTID rfmtid,
+    DWORD grfMode,
+    IPropertyStorage **ppprstg);
+void __RPC_STUB IPropertySetStorage_Open_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Delete_Proxy(
+    IPropertySetStorage* This,
+    REFFMTID rfmtid);
+void __RPC_STUB IPropertySetStorage_Delete_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Enum_Proxy(
+    IPropertySetStorage* This,
+    IEnumSTATPROPSETSTG **ppenum);
+void __RPC_STUB IPropertySetStorage_Enum_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPropertySetStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATPROPSTG interface
+ */
+#ifndef __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+
+typedef IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
+DEFINE_GUID(IID_IEnumSTATPROPSTG, 0x00000139, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATPROPSTG : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        STATPROPSTG *rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumSTATPROPSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATPROPSTGVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumSTATPROPSTG* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumSTATPROPSTG* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumSTATPROPSTG* This);
+
+    /*** IEnumSTATPROPSTG methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumSTATPROPSTG* This,
+        ULONG celt,
+        STATPROPSTG *rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumSTATPROPSTG* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumSTATPROPSTG* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumSTATPROPSTG* This,
+        IEnumSTATPROPSTG **ppenum);
+
+    END_INTERFACE
+} IEnumSTATPROPSTGVtbl;
+interface IEnumSTATPROPSTG {
+    CONST_VTBL IEnumSTATPROPSTGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATPROPSTG_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATPROPSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATPROPSTG_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATPROPSTG methods ***/
+#define IEnumSTATPROPSTG_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATPROPSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATPROPSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATPROPSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_RemoteNext_Proxy(
+    IEnumSTATPROPSTG* This,
+    ULONG celt,
+    STATPROPSTG *rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Skip_Proxy(
+    IEnumSTATPROPSTG* This,
+    ULONG celt);
+void __RPC_STUB IEnumSTATPROPSTG_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Reset_Proxy(
+    IEnumSTATPROPSTG* This);
+void __RPC_STUB IEnumSTATPROPSTG_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Clone_Proxy(
+    IEnumSTATPROPSTG* This,
+    IEnumSTATPROPSTG **ppenum);
+void __RPC_STUB IEnumSTATPROPSTG_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATPROPSTG_Next_Proxy(
+    IEnumSTATPROPSTG* This,
+    ULONG celt,
+    STATPROPSTG *rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATPROPSTG_Next_Stub(
+    IEnumSTATPROPSTG* This,
+    ULONG celt,
+    STATPROPSTG *rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumSTATPROPSTG_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATPROPSETSTG interface
+ */
+#ifndef __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+
+typedef IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+DEFINE_GUID(IID_IEnumSTATPROPSETSTG, 0x0000013b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATPROPSETSTG : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Next(
+        ULONG celt,
+        STATPROPSETSTG *rgelt,
+        ULONG *pceltFetched) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Skip(
+        ULONG celt) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clone(
+        IEnumSTATPROPSETSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATPROPSETSTGVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IEnumSTATPROPSETSTG* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IEnumSTATPROPSETSTG* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IEnumSTATPROPSETSTG* This);
+
+    /*** IEnumSTATPROPSETSTG methods ***/
+    HRESULT (STDMETHODCALLTYPE *Next)(
+        IEnumSTATPROPSETSTG* This,
+        ULONG celt,
+        STATPROPSETSTG *rgelt,
+        ULONG *pceltFetched);
+
+    HRESULT (STDMETHODCALLTYPE *Skip)(
+        IEnumSTATPROPSETSTG* This,
+        ULONG celt);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IEnumSTATPROPSETSTG* This);
+
+    HRESULT (STDMETHODCALLTYPE *Clone)(
+        IEnumSTATPROPSETSTG* This,
+        IEnumSTATPROPSETSTG **ppenum);
+
+    END_INTERFACE
+} IEnumSTATPROPSETSTGVtbl;
+interface IEnumSTATPROPSETSTG {
+    CONST_VTBL IEnumSTATPROPSETSTGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATPROPSETSTG_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATPROPSETSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATPROPSETSTG_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATPROPSETSTG methods ***/
+#define IEnumSTATPROPSETSTG_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATPROPSETSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATPROPSETSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATPROPSETSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_RemoteNext_Proxy(
+    IEnumSTATPROPSETSTG* This,
+    ULONG celt,
+    STATPROPSETSTG *rgelt,
+    ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Skip_Proxy(
+    IEnumSTATPROPSETSTG* This,
+    ULONG celt);
+void __RPC_STUB IEnumSTATPROPSETSTG_Skip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Reset_Proxy(
+    IEnumSTATPROPSETSTG* This);
+void __RPC_STUB IEnumSTATPROPSETSTG_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Clone_Proxy(
+    IEnumSTATPROPSETSTG* This,
+    IEnumSTATPROPSETSTG **ppenum);
+void __RPC_STUB IEnumSTATPROPSETSTG_Clone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATPROPSETSTG_Next_Proxy(
+    IEnumSTATPROPSETSTG* This,
+    ULONG celt,
+    STATPROPSETSTG *rgelt,
+    ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATPROPSETSTG_Next_Stub(
+    IEnumSTATPROPSETSTG* This,
+    ULONG celt,
+    STATPROPSETSTG *rgelt,
+    ULONG *pceltFetched);
+
+#endif  /* __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ */
+
+HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);
+HRESULT WINAPI PropVariantClear(PROPVARIANT*);
+HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);
+
+#define _PROPVARIANT_INIT_DEFINED_
+#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))
+
+#ifndef _STGCREATEPROPSTG_DEFINED_
+#define _STGCREATEPROPSTG_DEFINED_
+HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);
+HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);
+HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);
+#define CCH_MAX_PROPSTG_NAME 31
+HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);
+HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);
+#endif /* _STGCREATEPROPSTG_DEFINED_ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
+unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
+unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
+void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_PROPIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl
new file mode 100644
index 0000000..cf52e9e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl
@@ -0,0 +1,464 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ * Copyright 2004 Francois Gouget
+ * Copyright 2005 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "objidl.idl";
+import "oaidl.idl";
+#endif
+
+/*
+ * Windows SDK braindamage alert
+ *
+ * PID_DICTIONARY and PID_CODEPAGE are defined by msidefs.h too
+ * PID_SECURITY is defined in msidefs.h with a different value!
+ * So these need to be undefined first.
+ */
+cpp_quote("#ifdef PID_DICTIONARY")
+cpp_quote("#undef PID_DICTIONARY")
+cpp_quote("#endif")
+
+cpp_quote("#ifdef PID_CODEPAGE")
+cpp_quote("#undef PID_CODEPAGE")
+cpp_quote("#endif")
+
+cpp_quote("#ifdef PID_SECURITY")
+cpp_quote("#undef PID_SECURITY")
+cpp_quote("#endif")
+
+/******************** Property Storage ********************/
+
+interface IEnumSTATPROPSTG;
+interface IEnumSTATPROPSETSTG;
+
+[
+  object,
+  uuid(00000138-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IPropertyStorage : IUnknown
+{
+  typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;
+
+  const DWORD PROPSETFLAG_DEFAULT = 0;
+  const DWORD PROPSETFLAG_NONSIMPLE = 1;
+  const DWORD PROPSETFLAG_ANSI = 2;
+  const DWORD PROPSETFLAG_UNBUFFERED = 4;
+  const DWORD PROPSETFLAG_CASE_SENSITIVE = 8;
+
+  const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1;
+
+  const PROPID PID_DICTIONARY          = 0x00000000;
+  const PROPID PID_CODEPAGE            = 0x00000001;
+  const PROPID PID_FIRST_USABLE        = 0x00000002;
+  const PROPID PID_FIRST_NAME_DEFAULT  = 0x00000fff;
+  const PROPID PID_LOCALE              = 0x80000000;
+  const PROPID PID_MODIFY_TIME         = 0x80000001;
+  const PROPID PID_SECURITY            = 0x80000002;
+  const PROPID PID_BEHAVIOR            = 0x80000003;
+  const PROPID PID_ILLEGAL             = 0xffffffff;
+  const PROPID PID_MIN_READONLY        = 0x80000000;
+  const PROPID PID_MAX_READONLY        = 0xbfffffff;
+
+  typedef struct tagPROPVARIANT PROPVARIANT;
+
+#define TYPEDEF_CA(type, name) \
+    typedef struct tag##name { \
+      ULONG cElems; \
+      [size_is(cElems)] \
+      type *pElems; \
+    } name
+
+  TYPEDEF_CA(unsigned char, CAUB);
+  TYPEDEF_CA(short, CAI);
+  TYPEDEF_CA(USHORT, CAUI);
+  TYPEDEF_CA(long, CAL);
+  TYPEDEF_CA(ULONG, CAUL);
+  TYPEDEF_CA(float, CAFLT);
+  TYPEDEF_CA(double, CADBL);
+  TYPEDEF_CA(CY, CACY);
+  TYPEDEF_CA(DATE, CADATE);
+  TYPEDEF_CA(BSTR, CABSTR);
+  TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);
+  TYPEDEF_CA(VARIANT_BOOL, CABOOL);
+  TYPEDEF_CA(SCODE,  CASCODE);
+  TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
+  TYPEDEF_CA(LARGE_INTEGER, CAH);
+  TYPEDEF_CA(ULARGE_INTEGER, CAUH);
+  TYPEDEF_CA(LPSTR, CALPSTR);
+  TYPEDEF_CA(LPWSTR, CALPWSTR);
+  TYPEDEF_CA(FILETIME, CAFILETIME);
+  TYPEDEF_CA(CLIPDATA, CACLIPDATA);
+  TYPEDEF_CA(CLSID, CACLSID);
+
+  struct tagPROPVARIANT {
+    VARTYPE vt;
+    WORD wReserved1;
+    WORD wReserved2;
+    WORD wReserved3;
+    [switch_is(vt & 0x1fff)] union {
+    [case(VT_EMPTY, VT_NULL)]             ;
+    [case(VT_I1)]                         char cVal;
+    [case(VT_UI1)]                        UCHAR bVal;
+    [case(VT_I2)]                         short iVal;
+    [case(VT_UI2)]                        USHORT uiVal;
+    [case(VT_BOOL)]                       VARIANT_BOOL boolVal;
+#if 0 /* illegal in C++ */
+    [case(VT_ILLEGAL)]                    _VARIANT_BOOL bool;
+#endif
+    [case(VT_I4)]                         long lVal;
+    [case(VT_UI4)]                        ULONG ulVal;
+    [case(VT_R4)]                         float fltVal;
+    [case(VT_ERROR)]                      SCODE scode;
+    [case(VT_I8)]                         LARGE_INTEGER hVal;
+    [case(VT_UI8)]                        ULARGE_INTEGER uhVal;
+    [case(VT_R8)]                         double dblVal;
+    [case(VT_CY)]                         CY cyVal;
+    [case(VT_DATE)]                       DATE date;
+    [case(VT_FILETIME)]                   FILETIME filetime;
+    [case(VT_CLSID)]                      CLSID *puuid;
+    [case(VT_BLOB, VT_BLOB_OBJECT)]       BLOB blob;
+    [case(VT_CF)]                         CLIPDATA *pclipdata;
+    [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream;
+    [case(VT_STORAGE, VT_STORED_OBJECT)]  IStorage *pStorage;
+    [case(VT_BSTR)]                       BSTR bstrVal;
+    [case(VT_BSTR_BLOB)]                  BSTRBLOB bstrblobVal;
+    [case(VT_LPSTR)]                      LPSTR pszVal;
+    [case(VT_LPWSTR)]                     LPWSTR pwszVal;
+    [case(VT_UI1|VT_VECTOR)]              CAUB caub;
+    [case(VT_I2|VT_VECTOR)]               CAI cai;
+    [case(VT_UI2|VT_VECTOR)]              CAUI caui;
+    [case(VT_BOOL|VT_VECTOR)]             CABOOL cabool;
+    [case(VT_I4|VT_VECTOR)]               CAL cal;
+    [case(VT_UI4|VT_VECTOR)]              CAUL caul;
+    [case(VT_R4|VT_VECTOR)]               CAFLT caflt;
+    [case(VT_ERROR|VT_VECTOR)]            CASCODE cascode;
+    [case(VT_I8|VT_VECTOR)]               CAH cah;
+    [case(VT_UI8|VT_VECTOR)]              CAUH cauh;
+    [case(VT_R8|VT_VECTOR)]               CADBL cadbl;
+    [case(VT_CY|VT_VECTOR)]               CACY cacy;
+    [case(VT_DATE|VT_VECTOR)]             CADATE cadate;
+    [case(VT_FILETIME|VT_VECTOR)]         CAFILETIME cafiletime;
+    [case(VT_CLSID|VT_VECTOR)]            CACLSID cauuid;
+    [case(VT_CF|VT_VECTOR)]               CACLIPDATA caclipdata;
+    [case(VT_BSTR|VT_VECTOR)]             CABSTR cabstr;
+    [case(VT_BSTR_BLOB|VT_VECTOR)]        CABSTRBLOB cabstrblob;
+    [case(VT_LPSTR|VT_VECTOR)]            CALPSTR calpstr;
+    [case(VT_LPWSTR|VT_VECTOR)]           CALPWSTR calpwstr;
+    [case(VT_VARIANT|VT_VECTOR)]          CAPROPVARIANT capropvar;
+    [case(VT_ARRAY|VT_I1,
+          VT_ARRAY|VT_UI1,
+          VT_ARRAY|VT_I2,
+          VT_ARRAY|VT_UI2,
+          VT_ARRAY|VT_I4,
+          VT_ARRAY|VT_UI4,
+          VT_ARRAY|VT_INT,
+          VT_ARRAY|VT_UINT,
+          VT_ARRAY|VT_R4,
+          VT_ARRAY|VT_R8,
+          VT_ARRAY|VT_CY,
+          VT_ARRAY|VT_DATE,
+          VT_ARRAY|VT_BSTR,
+          VT_ARRAY|VT_BOOL,
+          VT_ARRAY|VT_DECIMAL,
+          VT_ARRAY|VT_DISPATCH,
+          VT_ARRAY|VT_UNKNOWN,
+          VT_ARRAY|VT_ERROR,
+          VT_ARRAY|VT_VARIANT)]           LPSAFEARRAY parray;
+    [case(VT_BYREF|VT_I1)]                CHAR *pcVal;
+    [case(VT_BYREF|VT_UI1)]               UCHAR *pbVal;
+    [case(VT_BYREF|VT_I2)]                SHORT *piVal;
+    [case(VT_BYREF|VT_UI2)]               USHORT *puiVal;
+    [case(VT_BYREF|VT_I4)]                LONG *plVal;
+    [case(VT_BYREF|VT_UI4)]               ULONG *pulVal;
+    [case(VT_BYREF|VT_INT)]               INT *pintVal;
+    [case(VT_BYREF|VT_UINT)]              UINT *puintVal;
+    [case(VT_BYREF|VT_R4)]                FLOAT *pfltVal;
+    [case(VT_BYREF|VT_R8)]                DOUBLE *pdblVal;
+    [case(VT_BYREF|VT_BOOL)]              VARIANT_BOOL *pboolVal;
+    [case(VT_BYREF|VT_DECIMAL)]           DECIMAL *pdecVal;
+    [case(VT_BYREF|VT_ERROR)]             SCODE *pscode;
+    [case(VT_BYREF|VT_CY)]                CY *pcyVal;
+    [case(VT_BYREF|VT_DATE)]              DATE *pdate;
+    [case(VT_BYREF|VT_BSTR)]              BSTR *pbstrVal;
+    [case(VT_BYREF|VT_UNKNOWN)]           IUnknown **ppunkVal;
+    [case(VT_BYREF|VT_DISPATCH)]          IDispatch **ppdispVal;
+    [case(VT_BYREF|VT_ARRAY)]             LPSAFEARRAY *pparray;
+    [case(VT_BYREF|VT_VARIANT)]           PROPVARIANT *pvarVal;
+    };
+  };
+
+  typedef struct tagPROPVARIANT *LPPROPVARIANT;
+
+  cpp_quote("#if 0")
+  typedef const PROPVARIANT * REFPROPVARIANT;
+  cpp_quote("#endif")
+  cpp_quote("#ifndef _REFPROPVARIANT_DEFINED")
+  cpp_quote("#define _REFPROPVARIANT_DEFINED")
+  cpp_quote("#ifdef __cplusplus")
+  cpp_quote("#define REFPROPVARIANT const PROPVARIANT &")
+  cpp_quote("#else")
+  cpp_quote("#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST")
+  cpp_quote("#endif")
+  cpp_quote("#endif")
+
+  cpp_quote("#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */")
+  cpp_quote("")
+  cpp_quote("#define PIDSI_TITLE        0x00000002L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_SUBJECT      0x00000003L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_AUTHOR       0x00000004L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_KEYWORDS     0x00000005L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_COMMENTS     0x00000006L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_TEMPLATE     0x00000007L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_LASTAUTHOR   0x00000008L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_REVNUMBER    0x00000009L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_EDITTIME     0x0000000AL /* VT_FILETIME (UTC) */")
+  cpp_quote("#define PIDSI_LASTPRINTED  0x0000000BL /* VT_FILETIME (UTC) */")
+  cpp_quote("#define PIDSI_CREATE_DTM   0x0000000CL /* VT_FILETIME (UTC) */")
+  cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */")
+  cpp_quote("#define PIDSI_PAGECOUNT    0x0000000EL /* VT_I4 */")
+  cpp_quote("#define PIDSI_WORDCOUNT    0x0000000FL /* VT_I4 */")
+  cpp_quote("#define PIDSI_CHARCOUNT    0x00000010L /* VT_I4 */")
+  cpp_quote("#define PIDSI_THUMBNAIL    0x00000011L /* VT_CF */")
+  cpp_quote("#define PIDSI_APPNAME      0x00000012L /* VT_LPSTR */")
+  cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */")
+  cpp_quote("")
+  cpp_quote("#define PIDDSI_CATEGORY    0x00000002L /* VT_LPSTR */")
+  cpp_quote("#define PIDDSI_PRESFORMAT  0x00000003L /* VT_LPSTR */")
+  cpp_quote("#define PIDDSI_BYTECOUNT   0x00000004L /* VT_I4 */")
+  cpp_quote("#define PIDDSI_LINECOUNT   0x00000005L /* VT_I4 */")
+  cpp_quote("#define PIDDSI_PARCOUNT    0x00000006L /* VT_I4 */")
+  cpp_quote("#define PIDDSI_SLIDECOUNT  0x00000007L /* VT_I4 */")
+  cpp_quote("#define PIDDSI_NOTECOUNT   0x00000008L /* VT_I4 */")
+  cpp_quote("#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */")
+  cpp_quote("#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */")
+  cpp_quote("#define PIDDSI_SCALE       0x0000000BL /* VT_BOOL */")
+  cpp_quote("#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */")
+  cpp_quote("#define PIDDSI_DOCPARTS    0x0000000DL /* VT_LPSTR|VT_VECTOR */")
+  cpp_quote("#define PIDDSI_MANAGER     0x0000000EL /* VT_LPSTR */")
+  cpp_quote("#define PIDDSI_COMPANY     0x0000000FL /* VT_LPSTR */")
+  cpp_quote("#define PIDDSI_LINKSDIRTY  0x00000010L /* VT_B0OL */")
+
+  const ULONG PRSPEC_INVALID = 0xffffffff;
+  const ULONG PRSPEC_LPWSTR = 0;
+  const ULONG PRSPEC_PROPID = 1;
+
+  typedef struct tagPROPSPEC {
+    ULONG ulKind;
+    [switch_is(ulKind)] union {
+    [case(PRSPEC_PROPID)] PROPID propid;
+    [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr;
+    [default]             ;
+    } DUMMYUNIONNAME;
+  } PROPSPEC;
+
+  typedef struct tagSTATPROPSTG {
+    LPOLESTR lpwstrName;
+    PROPID propid;
+    VARTYPE vt;
+  } STATPROPSTG;
+
+  cpp_quote("/* Macros for dwOSVersion member of STATPROPSETSTG */")
+  cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer)  HIWORD((dwOSVer))")
+  cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))")
+  cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))")
+  cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN    0xffffffff")
+
+  typedef struct tagSTATPROPSETSTG {
+    FMTID fmtid;
+    CLSID clsid;
+    DWORD grfFlags;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD dwOSVersion;
+  } STATPROPSETSTG;
+
+  HRESULT ReadMultiple(
+    [in] ULONG cpspec,
+    [in, size_is(cpspec)] const PROPSPEC rgpspec[],
+    [out, size_is(cpspec)] PROPVARIANT rgpropvar[]);
+
+  HRESULT WriteMultiple(
+    [in] ULONG cpspec,
+    [in, size_is(cpspec)] const PROPSPEC rgpspec[],
+    [in, size_is(cpspec)] const PROPVARIANT rgpropvar[],
+    [in] PROPID propidNameFirst);
+
+  HRESULT DeleteMultiple(
+    [in] ULONG cpspec,
+    [in, size_is(cpspec)] const PROPSPEC rgpspec[]);
+
+  HRESULT ReadPropertyNames(
+    [in] ULONG cpropid,
+    [in, size_is(cpropid)] const PROPID rgpropid[],
+    [out, size_is(cpropid)] LPOLESTR rglpwstrName[]);
+
+  HRESULT WritePropertyNames(
+    [in] ULONG cpropid,
+    [in, size_is(cpropid)] const PROPID rgpropid[],
+    [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]);
+
+  HRESULT DeletePropertyNames(
+    [in] ULONG cpropid,
+    [in, size_is(cpropid)] const PROPID rgpropid[]);
+
+  HRESULT Commit(
+    [in] DWORD grfCommitFlags);
+
+  HRESULT Revert();
+
+  HRESULT Enum(
+    [out] IEnumSTATPROPSTG **ppenum);
+
+  HRESULT SetTimes(
+    [in] const FILETIME *pctime,
+    [in] const FILETIME *patime,
+    [in] const FILETIME *pmtime);
+
+  HRESULT SetClass(
+    [in] REFCLSID clsid);
+
+  HRESULT Stat(
+    [out] STATPROPSETSTG *statpsstg);
+}
+
+[
+  object,
+  uuid(0000013A-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IPropertySetStorage : IUnknown
+{
+  typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE;
+
+  HRESULT Create(
+    [in] REFFMTID rfmtid,
+    [in, unique] const CLSID *pclsid,
+    [in] DWORD grfFlags,
+    [in] DWORD grfMode,
+    [out] IPropertyStorage **ppprstg);
+
+  HRESULT Open(
+    [in] REFFMTID rfmtid,
+    [in] DWORD grfMode,
+    [out] IPropertyStorage **ppprstg);
+
+  HRESULT Delete(
+    [in] REFFMTID rfmtid);
+
+  HRESULT Enum(
+    [out] IEnumSTATPROPSETSTG **ppenum);
+}
+
+[
+  object,
+  uuid(00000139-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumSTATPROPSTG : IUnknown
+{
+  typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATPROPSTG *rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATPROPSTG *rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumSTATPROPSTG **ppenum);
+}
+
+[
+  object,
+  uuid(0000013B-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IEnumSTATPROPSETSTG : IUnknown
+{
+  typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+
+  [local]
+  HRESULT Next(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATPROPSETSTG *rgelt,
+    [out] ULONG *pceltFetched);
+
+  [call_as(Next)]
+  HRESULT RemoteNext(
+    [in] ULONG celt,
+    [out, size_is(celt), length_is(*pceltFetched)]
+    STATPROPSETSTG *rgelt,
+    [out] ULONG *pceltFetched);
+
+  HRESULT Skip(
+    [in] ULONG celt);
+
+  HRESULT Reset();
+
+  HRESULT Clone(
+    [out] IEnumSTATPROPSETSTG **ppenum);
+}
+
+typedef struct SERIALIZEDPROPERTYVALUE {
+    DWORD dwType;
+    BYTE rgb[1];
+} SERIALIZEDPROPERTYVALUE;
+
+cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);")
+cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);")
+cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);")
+cpp_quote("")
+cpp_quote("#define _PROPVARIANT_INIT_DEFINED_")
+cpp_quote("#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))")
+cpp_quote("")
+cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_")
+cpp_quote("#define _STGCREATEPROPSTG_DEFINED_")
+cpp_quote("HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);")
+cpp_quote("HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);")
+cpp_quote("HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);")
+cpp_quote("#define CCH_MAX_PROPSTG_NAME 31")
+cpp_quote("HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);")
+cpp_quote("HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);")
+cpp_quote("#endif /* _STGCREATEPROPSTG_DEFINED_ */")
+cpp_quote("")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h
new file mode 100644
index 0000000..68ae86b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_PROPKEY
+#define _INC_PROPKEY
+
+#include <propkeydef.h>
+
+DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 7);
+DEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 10);
+DEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 2);
+DEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xe6822fee, 0x8c17, 0x4d62, 0x82, 0x3c, 0x8e, 0x9c, 0xfc, 0xbd, 0x1d, 0x5c, 100);
+DEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579e5d0, 0x1116, 0x4084, 0xbd, 0x9a, 0x9b, 0x4f, 0x7c, 0xb4, 0xdf, 0x5e, 100);
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 5);
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 6);
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 9);
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 8);
+
+DEFINE_PROPERTYKEY(PKEY_Title, 0xf29f85e0,0x4ff9,0x1068,0xab,0x91,0x08,0x00,0x2b,0x27,0xb3,0xd9,2);
+
+DEFINE_PROPERTYKEY(PKEY_ItemName, 0x6b8da074,0x3b5c,0x43bc,0x88,0x6f,0x0a,0x2c,0xdc,0xe0,0x0b,0x6f,100);
+
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_ExcludeFromShowInNewInstall, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,8);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_ID, 0x9f4c2855,0x9f79,0x4B39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,5);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDestListSeparator, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,6);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_PreventPinning, 0x9f4c2855,0x9F79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,9);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchCommand, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,2);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchDisplayNameResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,4);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchIconResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,3);
+
+#endif /*_INC_PROPKEY*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h
new file mode 100644
index 0000000..c0c3611
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef PID_FIRST_USABLE
+#define PID_FIRST_USABLE 2
+#endif
+
+#ifndef REFPROPERTYKEY
+#ifdef __cplusplus
+#define REFPROPERTYKEY const PROPERTYKEY &
+#else /*!__cplusplus*/
+#define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST
+#endif
+#endif
+
+#undef DEFINE_PROPERTYKEY
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+        EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \
+        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+        const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \
+        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#endif
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+    EXTERN_C const PROPERTYKEY name DECLSPEC_HIDDEN
+#endif
+
+#ifndef IsEqualPropertyKey
+#ifdef __cplusplus
+#define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid))
+#else
+#define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid))
+#endif
+#endif
+
+#ifndef _PROPERTYKEY_EQUALITY_OPERATORS_
+#define _PROPERTYKEY_EQUALITY_OPERATORS_
+#ifdef __cplusplus
+extern "C++"
+{
+
+inline bool operator==(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther)
+{
+    return IsEqualPropertyKey(guidOne, guidOther);
+}
+inline bool operator!=(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther)
+{
+    return !(guidOne == guidOther);
+}
+
+}
+#endif
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl
new file mode 100644
index 0000000..c78e5c7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl
@@ -0,0 +1,832 @@
+/*
+ * system property interfaces
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "ocidl.idl";
+import "shtypes.idl";
+import "structuredquerycondition.idl";
+
+cpp_quote("#ifndef PSSTDAPI")
+cpp_quote("#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE")
+cpp_quote("#endif")
+
+cpp_quote("#if 0")
+typedef PROPERTYKEY *REFPROPERTYKEY;
+cpp_quote("#endif")
+cpp_quote("#include <propkeydef.h>")
+
+[
+    uuid(b7d14566-0509-4cce-a71f-0a554233bd9b),
+    object,
+    pointer_default(unique)
+]
+interface IInitializeWithFile : IUnknown
+{
+    HRESULT Initialize(
+        [in,string] LPCWSTR pszFilePath,
+        [in] DWORD grfMode
+    );
+}
+
+[
+    uuid(b824b49d-22ac-4161-ac8a-9916e8fa3f7f),
+    object,
+    pointer_default(unique)
+]
+interface IInitializeWithStream : IUnknown
+{
+    [local] HRESULT Initialize(
+        [in] IStream *pstream,
+        [in] DWORD grfMode
+    );
+}
+
+[
+    uuid(886d8eeb-8cf2-4446-8d02-cdba1dbdcf99),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyStore : IUnknown
+{
+    HRESULT GetCount(
+        [out] DWORD *cProps
+    );
+    HRESULT GetAt(
+        [in] DWORD iProp,
+        [out] PROPERTYKEY *pkey
+    );
+    HRESULT GetValue(
+        [in] REFPROPERTYKEY key,
+        [out] PROPVARIANT *pv
+    );
+    HRESULT SetValue(
+        [in] REFPROPERTYKEY key,
+        [in] REFPROPVARIANT propvar
+    );
+    HRESULT Commit(void);
+}
+
+typedef IPropertyStore *LPPROPERTYSTORE;
+
+[
+    uuid(71604b0f-97b0-4764-8577-2f13e98a1422),
+    object,
+    pointer_default(unique)
+]
+interface INamedPropertyStore : IUnknown
+{
+    HRESULT GetNamedValue(
+        [in,string] LPCWSTR pszName,
+        [out] PROPVARIANT *ppropvar
+    );
+    HRESULT SetNamedValue(
+        [in,string] LPCWSTR pszName,
+        [in] REFPROPVARIANT propvar
+    );
+    HRESULT GetNameCount(
+        [out] DWORD *pdwCount
+    );
+    HRESULT GetNameAt(
+        [in] DWORD iProp,
+        [out] BSTR *pbstrName
+    );
+}
+
+typedef [v1_enum] enum GETPROPERTYSTOREFLAGS
+{
+    GPS_DEFAULT = 0x00,
+    GPS_HANDLERPROPERTIESONLY = 0x01,
+    GPS_READWRITE = 0x02,
+    GPS_TEMPORARY = 0x04,
+    GPS_FASTPROPERTIESONLY = 0x08,
+    GPS_OPENSLOWITEM = 0x10,
+    GPS_DELAYCREATION = 0x20,
+    GPS_BESTEFFORT = 0x40,
+    GPS_NO_OPLOCK = 0x80,
+    GPS_MASK_VALID = 0xff
+} GETPROPERTYSTOREFLAGS;
+
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS)")
+
+[
+    uuid(fc0ca0a7-c316-4fd2-9031-3e628e6d4f23),
+    object
+]
+interface IObjectWithPropertyKey : IUnknown
+{
+    HRESULT SetPropertyKey(
+        [in] REFPROPERTYKEY key
+    );
+    HRESULT GetPropertyKey(
+        [out] PROPERTYKEY *key
+    );
+}
+
+typedef [v1_enum] enum PKA_FLAGS
+{
+    PKA_SET,
+    PKA_APPEND,
+    PKA_DELETE
+} PKA_FLAGS;
+
+[
+    uuid(f917bc8a-1bba-4478-a245-1bde03eb9431),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyChange : IObjectWithPropertyKey
+{
+    HRESULT ApplyToPropVariant([in] REFPROPVARIANT propvarin, [out] PROPVARIANT *propvarout);
+}
+
+[
+    uuid(380f5cad-1b5e-42f2-805d-637fd392d31e),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyChangeArray : IUnknown
+{
+    HRESULT GetCount(
+        [out] UINT *pcOperations
+    );
+    HRESULT GetAt(
+        [in] UINT iIndex,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv
+    );
+    HRESULT InsertAt(
+        [in] UINT iIndex,
+        [in] IPropertyChange *ppropChange
+    );
+    HRESULT Append(
+        [in] IPropertyChange *ppropChange
+    );
+    HRESULT AppendOrReplace(
+        [in] IPropertyChange *ppropChange
+    );
+    HRESULT RemoveAt(
+        [in] UINT iIndex
+    );
+    HRESULT IsKeyInArray(
+        [in] REFPROPERTYKEY key
+    );
+}
+
+[
+    uuid(c8e2d566-186e-4d49-bf41-6909ead56acc),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyStoreCapabilities : IUnknown
+{
+    HRESULT IsPropertyWritable(
+        [in] REFPROPERTYKEY key
+    );
+}
+
+[
+    uuid(3017056d-9a91-4e90-937d-746c72abbf4f),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyStoreCache : IPropertyStore
+{
+    typedef [v1_enum] enum PSC_STATE
+    {
+        PSC_NORMAL = 0,
+        PSC_NOTINSOURCE,
+        PSC_DIRTY,
+        PSC_READONLY
+    } PSC_STATE;
+
+    HRESULT GetState(
+        [in] REFPROPERTYKEY key,
+        [out] PSC_STATE *pstate
+    );
+    HRESULT GetValueAndState(
+        [in] REFPROPERTYKEY key,
+        [out] PROPVARIANT *ppropvar,
+        [out] PSC_STATE *pstate
+    );
+    HRESULT SetState(
+        [in] REFPROPERTYKEY key,
+        [in] PSC_STATE pstate
+    );
+    HRESULT SetValueAndState(
+        [in] REFPROPERTYKEY key,
+        [in, unique] const PROPVARIANT *ppropvar,
+        [in] PSC_STATE state
+    );
+}
+
+[
+    uuid(11e1fbf9-2d56-4a6b-8db3-7cd193a471f2),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyEnumType : IUnknown
+{
+    typedef [v1_enum] enum PROPENUMTYPE
+    {
+        PET_DISCRETEVALUE = 0,
+        PET_RANGEDVALUE,
+        PET_DEFAULTVALUE,
+        PET_ENDRANGE
+    } PROPENUMTYPE;
+
+    HRESULT GetEnumType(
+        [out] PROPENUMTYPE *penumtype
+    );
+    HRESULT GetValue(
+        [out] PROPVARIANT *ppropvar
+    );
+    HRESULT GetRangeMinValue(
+        [out] PROPVARIANT *ppropvar
+    );
+    HRESULT GetRangeSetValue(
+        [out] PROPVARIANT *ppropvar
+    );
+    HRESULT GetDisplayText(
+        [out] LPWSTR *ppszDisplay
+    );
+}
+
+[
+    uuid(9b6e051c-5ddd-4321-9070-fe2acb55e974),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyEnumType2 : IPropertyEnumType
+{
+    HRESULT GetImageReference(
+        [out] LPWSTR *ppszImageRes
+    );
+}
+
+[
+    uuid(a99400f4-3d84-4557-94ba-1242fb2cc9a6),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyEnumTypeList : IUnknown
+{
+    HRESULT GetCount(
+        [out] UINT *pctypes
+    );
+    HRESULT GetAt(
+        [in] UINT itype,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv
+    );
+    HRESULT GetConditionAt(
+        [in] UINT nIndex,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv
+    );
+    HRESULT FindMatchingIndex(
+        [in] REFPROPVARIANT propvarCmp,
+        [out] UINT *pnIndex
+    );
+}
+
+[
+    uuid(6f79d558-3e96-4549-a1d1-7d75d2288814),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyDescription : IUnknown
+{
+    typedef [v1_enum] enum PROPDESC_TYPE_FLAGS
+    {
+        PDTF_DEFAULT = 0,
+        PDTF_MULTIPLEVALUES = 0x001,
+        PDTF_ISINNATE = 0x002,
+        PDTF_ISGROUP = 0x004,
+        PDTF_CANGROUPBY = 0x008,
+        PDTF_CANSTACKBY = 0x010,
+        PDTF_ISTREEPROPERTY = 0x020,
+        PDTF_INCLUDEINFULLTEXTQUERY = 0x040,
+        PDTF_ISVIEWABLE = 0x080,
+        PDTF_ISQUERYABLE = 0x100,
+        PDTF_CANBEPURGED = 0x200,
+        PDTF_SEARCHRAWVALUE = 0x400,
+        PDTF_ISSYSTEMPROPERTY = 0x80000000,
+        PDTF_MASK_ALL = 0x800007ff
+    } PROPDESC_TYPE_FLAGS;
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_TYPE_FLAGS)")
+
+    typedef [v1_enum] enum PROPDESC_VIEW_FLAGS
+    {
+        PDVF_DEFAULT = 0x0000,
+        PDVF_CENTERALIGN = 0x0001,
+        PDVF_RIGHTALIGN = 0x0002,
+        PDVF_BEGINNEWGROUP = 0x0004,
+        PDVF_FILLAREA = 0x0008,
+        PDVF_SORTDESCENDING = 0x0010,
+        PDVF_SHOWONLYIFPRESENT = 0x0020,
+        PDVF_SHOWBYDEFAULT = 0x0040,
+        PDVF_SHOWINPRIMARYLIST = 0x0080,
+        PDVF_SHOWINSECONDARYLIST = 0x0100,
+        PDVF_HIDELABEL = 0x0200,
+        PDVF_HIDDEN = 0x0800,
+        PDVF_CANWRAP = 0x1000,
+        PDVF_MASK_ALL = 0x1bff
+    } PROPDESC_VIEW_FLAGS;
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_VIEW_FLAGS)")
+
+    typedef [v1_enum] enum PROPDESC_DISPLAYTYPE
+    {
+        PDDT_STRING = 0,
+        PDDT_NUMBER,
+        PDDT_BOOLEAN,
+        PDDT_DATETIME,
+        PDDT_ENUMERATED
+    } PROPDESC_DISPLAYTYPE;
+
+    typedef [v1_enum] enum PROPDESC_GROUPING_RANGE
+    {
+        PDGR_DISCRETE = 0,
+        PDGR_ALPHANUMERIC,
+        PDGR_SIZE,
+        PDGR_DYNAMIC,
+        PDGR_DATE,
+        PDGR_PERCENT,
+        PDGR_ENUMERATED
+    } PROPDESC_GROUPING_RANGE;
+
+    typedef [v1_enum] enum PROPDESC_FORMAT_FLAGS
+    {
+        PDFF_DEFAULT = 0x0000,
+        PDFF_PREFIXNAME = 0x0001,
+        PDFF_FILENAME = 0x0002,
+        PDFF_ALWAYSKB = 0x0004,
+        PDFF_RESERVED_RIGHTTOLEFT = 0x0008,
+        PDFF_SHORTTIME = 0x0010,
+        PDFF_LONGTIME = 0x0020,
+        PDFF_HIDETIME = 0x0040,
+        PDFF_SHORTDATE = 0x0080,
+        PDFF_LONGDATE = 0x0100,
+        PDFF_HIDEDATE = 0x0200,
+        PDFF_RELATIVEDATE = 0x0400,
+        PDFF_USEEDITINVITATION = 0x0800,
+        PDFF_READONLY = 0x1000,
+        PDFF_NOAUTOREADINGORDER = 0x2000
+    } PROPDESC_FORMAT_FLAGS;
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_FORMAT_FLAGS)")
+
+    typedef [v1_enum] enum PROPDESC_SORTDESCRIPTION
+    {
+        PDSD_GENERAL = 0,
+        PDSD_A_Z,
+        PDSD_LOWEST_HIGHEST,
+        PDSD_SMALLEST_BIGGEST,
+        PDSD_OLDEST_NEWEST
+    } PROPDESC_SORTDESCRIPTION;
+
+    typedef [v1_enum] enum PROPDESC_RELATIVEDESCRIPTION_TYPE
+    {
+        PDRDT_GENERAL = 0,
+        PDRDT_DATE,
+        PDRDT_SIZE,
+        PDRDT_COUNT,
+        PDRDT_REVISION,
+        PDRDT_LENGTH,
+        PDRDT_DURATION,
+        PDRDT_SPEED,
+        PDRDT_RATE,
+        PDRDT_RATING,
+        PDRDT_PRIORITY
+    } PROPDESC_RELATIVEDESCRIPTION_TYPE;
+
+    typedef [v1_enum] enum PROPDESC_AGGREGATION_TYPE
+    {
+        PDAT_DEFAULT = 0,
+        PDAT_FIRST,
+        PDAT_SUM,
+        PDAT_AVERAGE,
+        PDAT_DATERANGE,
+        PDAT_UNION,
+        PDAT_MAX,
+        PDAT_MIN
+    } PROPDESC_AGGREGATION_TYPE;
+
+    typedef [v1_enum] enum PROPDESC_CONDITION_TYPE
+    {
+        PDCOT_NONE = 0,
+        PDCOT_STRING,
+        PDCOT_SIZE,
+        PDCOT_DATETIME,
+        PDCOT_BOOLEAN,
+        PDCOT_NUMBER
+    } PROPDESC_CONDITION_TYPE;
+
+    HRESULT GetPropertyKey(
+        [out] PROPERTYKEY *pkey
+    );
+    HRESULT GetCanonicalName(
+        [out, string] LPWSTR *ppszName
+    );
+    HRESULT GetPropertyType(
+        [out] VARTYPE *pvartype
+    );
+    HRESULT GetDisplayName(
+        [out, string] LPWSTR *ppszName
+    );
+    HRESULT GetEditInvitation(
+        [out, string] LPWSTR *ppszName
+    );
+    HRESULT GetTypeFlags(
+        [in] PROPDESC_TYPE_FLAGS mask,
+        [out] PROPDESC_TYPE_FLAGS *ppdtFlags
+    );
+    HRESULT GetViewFlags(
+        [out] PROPDESC_VIEW_FLAGS *ppdvFlags
+    );
+    HRESULT GetDefaultColumnWidth(
+        [out] UINT *pcxChars
+    );
+    HRESULT GetDisplayType(
+        [out] PROPDESC_DISPLAYTYPE *pdisplaytype
+    );
+    HRESULT GetColumnState(
+        [out] SHCOLSTATEF *pcsFlags
+    );
+    HRESULT GetGroupingRange(
+        [out] PROPDESC_GROUPING_RANGE *psd
+    );
+    HRESULT GetRelativeDescriptionType(
+        [out] PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt
+    );
+    HRESULT GetRelativeDescription(
+        [in] REFPROPVARIANT propvar1,
+        [in] REFPROPVARIANT propvar2,
+        [out,string] LPWSTR *ppszDesc1,
+        [out,string] LPWSTR *ppszDesc2
+    );
+    HRESULT GetSortDescription(
+        [out] PROPDESC_SORTDESCRIPTION *psd
+    );
+    HRESULT GetSortDescriptionLabel(
+        [in] BOOL fDescending,
+        [out,string] LPWSTR *ppszDescription
+    );
+    HRESULT GetAggregationType(
+        [out] PROPDESC_AGGREGATION_TYPE *paggtype
+    );
+    HRESULT GetConditionType(
+        [out] PROPDESC_CONDITION_TYPE *pcontype,
+        [out] CONDITION_OPERATION *popDefault
+    );
+    HRESULT GetEnumTypeList(
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    [local] HRESULT CoerceToCanonicalValue(
+        [in,out] PROPVARIANT *propvar
+    );
+    [call_as(CoerceToCanonicalValue)] HRESULT RemoteCoerceToCanonicalValue(
+        [in] REFPROPVARIANT propvar,
+        [out] PROPVARIANT *ppropvar
+    );
+    HRESULT FormatForDisplay(
+        [in] REFPROPVARIANT propvar,
+        [in] PROPDESC_FORMAT_FLAGS flags,
+        [out,string] LPWSTR *ppszDisplay
+    );
+    HRESULT IsValueCanonical(
+        [in] REFPROPVARIANT propvar
+    );
+}
+
+[
+    uuid(57d2eded-5062-400e-b107-5dae79fe57a6),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyDescription2 : IPropertyDescription
+{
+    HRESULT GetImageReferenceForValue(
+        [in] REFPROPVARIANT propvar,
+        [out,string] LPWSTR *ppszImageRes
+    );
+}
+
+[
+    uuid(f67104fc-2af9-46fd-b32d-243c1404f3d1),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyDescriptionAliasInfo : IPropertyDescription
+{
+    HRESULT GetSortByAlias(
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    HRESULT GetAdditionalSortByAliases(
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+}
+
+[
+    uuid(078f91bd-29a2-440f-924e-46a291524520),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyDescriptionSearchInfo : IPropertyDescription
+{
+    typedef [v1_enum] enum PROPDESC_SEARCHINFO_FLAGS
+    {
+        PDSIF_DEFAULT = 0x0,
+        PDSIF_ININVERTEDINDEX = 0x1,
+        PDSIF_ISCOLUMN = 0x2,
+        PDSIF_ISCOLUMNSPARSE = 0x4,
+        PDSIF_ALWAYSINCLUDE = 0x8,
+    } PROPDESC_SEARCHINFO_FLAGS;
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_SEARCHINFO_FLAGS)")
+
+    typedef [v1_enum] enum PROPDESC_COLUMNINDEX_TYPE
+    {
+        PDCIT_NONE = 0,
+        PDCIT_ONDISK,
+        PDCIT_INMEMORY,
+        PDCIT_ONDEMAND,
+        PDCIT_ONDISKALL,
+        PDCIT_ONDISKVECTOR
+    } PROPDESC_COLUMNINDEX_TYPE;
+
+    HRESULT GetSearchInfoFlags(
+        [out] PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags
+    );
+    HRESULT GetColumnIndexType(
+        [out] PROPDESC_COLUMNINDEX_TYPE *ppdciType
+    );
+    HRESULT GetProjectionString(
+        [out] LPWSTR *ppszProjection
+    );
+    HRESULT GetMaxSize(
+        [out] UINT *pcbMaxSize
+    );
+}
+
+[
+    uuid(507393f4-2a3d-4a60-b59e-d9c75716c2dd),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyDescriptionRelatedPropertyInfo : IPropertyDescription
+{
+    HRESULT GetRelatedProperty(
+        [in] LPCWSTR ppszRelationshipName,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+}
+
+typedef [v1_enum] enum PROPDESC_ENUMFILTER
+{
+    PDEF_ALL = 0,
+    PDEF_SYSTEM,
+    PDEF_NONSYSTEM,
+    PDEF_VIEWABLE,
+    PDEF_QUERYABLE,
+    PDEF_INFULLTEXTQUERY,
+    PDEF_COLUMN
+} PROPDESC_ENUMFILTER;
+
+[
+    uuid(ca724e8a-c3e6-442b-88a4-6fb0db8035a3),
+    object,
+    pointer_default(unique)
+]
+interface IPropertySystem : IUnknown
+{
+    HRESULT GetPropertyDescription(
+        [in] REFPROPERTYKEY propkey,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    HRESULT GetPropertyDescriptionByName(
+        [in,string] LPCWSTR pszCanonicalName,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    HRESULT GetPropertyDescriptionListFromString(
+        [in,string] LPCWSTR pszPropList,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    HRESULT EnumeratePropertyDescriptions(
+        [in] PROPDESC_ENUMFILTER filterOn,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    HRESULT FormatForDisplay(
+        [in] REFPROPERTYKEY key,
+        [in] REFPROPVARIANT propvar,
+        [in] PROPDESC_FORMAT_FLAGS pdff,
+        [out,string,size_is(cchText)] LPWSTR pszText,
+        [in] DWORD cchText
+    );
+    HRESULT FormatForDisplayAlloc(
+        [in] REFPROPERTYKEY key,
+        [in] REFPROPVARIANT propvar,
+        [in] PROPDESC_FORMAT_FLAGS pdff,
+        [out,string] LPWSTR *pszText
+    );
+    HRESULT RegisterPropertySchema(
+        [in,string] LPCWSTR pszPath
+    );
+    HRESULT UnregisterPropertySchema(
+        [in,string] LPCWSTR pszPath
+    );
+    HRESULT RefreshPropertySchema(void);
+}
+
+[
+    uuid(1f9fc1d0-c39b-4b26-817f-011967d3440e),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyDescriptionList : IUnknown
+{
+    HRESULT GetCount(
+        [out] UINT *pcelem
+    );
+    HRESULT GetAt(
+        [in] UINT iElem,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+}
+
+[
+    uuid(bc110b6d-57e8-4148-a9c6-91015ab2f3a5),
+    object,
+    pointer_default(unique)
+]
+interface IPropertyStoreFactory : IUnknown
+{
+    HRESULT GetPropertyStore(
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in,unique] IUnknown *pUnkFactory,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+    HRESULT GetPropertyStoreForKeys(
+        [in,unique] const PROPERTYKEY *rgKeys,
+        [in] UINT cKeys,
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+}
+
+[
+    uuid(40d4577f-e237-4bdb-bd69-58f089431b6a),
+    object,
+    pointer_default(unique)
+]
+interface IDelayedPropertyStoreFactory : IPropertyStoreFactory
+{
+    HRESULT GetDelayedPropertyStore(
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in] DWORD dwStoreId,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+}
+
+[v1_enum] enum _PERSIST_SPROPSTORE_FLAGS
+{
+    FPSPS_DEFAULT = 0,
+    FPSPS_READONLY = 1
+};
+typedef int PERSIST_SPROPSTORE_FLAGS;
+
+typedef struct tagSERIALIZEDROPSTORAGE SERIALIZEDPROPSTORAGE;
+
+cpp_quote("#if 0") /* Wine doesn't have __unaligned builtin, hack */
+typedef SERIALIZEDPROPSTORAGE *PUSERIALIZEDPROPSTORAGE;
+typedef const SERIALIZEDPROPSTORAGE *PCUSERIALIZEDPROPSTORAGE;
+cpp_quote("#endif")
+cpp_quote("typedef SERIALIZEDPROPSTORAGE UNALIGNED *PUSERIALIZEDPROPSTORAGE;")
+cpp_quote("typedef const SERIALIZEDPROPSTORAGE UNALIGNED *PCUSERIALIZEDPROPSTORAGE;")
+
+[
+    uuid(e318ad57-0aa0-450f-aca5-6fab7103d917),
+    pointer_default(unique),
+    local
+]
+interface IPersistSerializedPropStorage : IUnknown
+{
+    HRESULT SetFlags(
+        [in] PERSIST_SPROPSTORE_FLAGS flags
+    );
+    HRESULT SetPropertyStorage(
+        [in] PCUSERIALIZEDPROPSTORAGE psps,
+        [in] DWORD cb
+    );
+    HRESULT GetPropertyStorage(
+        [out] SERIALIZEDPROPSTORAGE **psps,
+        [out] DWORD *pcb
+    );
+}
+
+[
+    uuid(77effa68-4f98-4366-ba72-573b3d880571),
+    pointer_default(unique),
+    local
+]
+interface IPersistSerializedPropStorage2 : IPersistSerializedPropStorage
+{
+    HRESULT GetpropertyStorageSize(
+        [out] DWORD *pcb
+    );
+    HRESULT GetPropertyStorageBuffer(
+        [out] SERIALIZEDPROPSTORAGE *psps,
+        [in] DWORD cb,
+        [out] DWORD *pcbWritten
+    );
+}
+
+[
+    uuid(fa955fd9-38be-4879-a6ce-824cf52d609f),
+    object,
+    pointer_default(unique)
+]
+interface IPropertySystemChangeNotify : IUnknown
+{
+    HRESULT SchemaRefreshed(void);
+}
+
+/* Interface for CoCreateInstance? */
+[
+    uuid(75121952-e0d0-43e5-9380-1d80483acf72),
+    pointer_default(unique)
+]
+interface ICreateObject : IUnknown
+{
+    HRESULT CreateObject(
+        [in] REFCLSID clsid,
+        [in,unique] IUnknown *pUnkOuter,
+        [in] REFIID riid,
+        [out,iid_is(riid)] void **ppv
+    );
+}
+
+cpp_quote("#define PKEY_PIDSTR_MAX 10")
+cpp_quote("#define GUIDSTRING_MAX 39")
+cpp_quote("#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)")
+
+cpp_quote("HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);")
+cpp_quote("HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);")
+cpp_quote("HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);")
+cpp_quote("HRESULT WINAPI PSRefreshPropertySchema(void);")
+
+/* TODO: Add remainder of the C api here */
+
+[
+    uuid(2cda3294-6c4f-4020-b161-27c530c81fa6),
+    lcid(0x0000),
+    version(1.0)
+]
+library PropSysObjects
+{
+    [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore
+    {
+        interface IPropertyStore;
+    }
+    [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem
+    {
+        interface IPropertySystem;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h
new file mode 100644
index 0000000..936121e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2008 James Hawkins 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PROPVARUTIL_H
+#define __WINE_PROPVARUTIL_H
+
+#include <shtypes.h>
+#include <shlwapi.h>
+
+enum tagPROPVAR_CHANGE_FLAGS
+{
+    PVCHF_DEFAULT           = 0x00000000,
+    PVCHF_NOVALUEPROP       = 0x00000001,
+    PVCHF_ALPHABOOL         = 0x00000002,
+    PVCHF_NOUSEROVERRIDE    = 0x00000004,
+    PVCHF_LOCALBOOL         = 0x00000008,
+    PVCHF_NOHEXSTRING       = 0x00000010,
+};
+
+typedef int PROPVAR_CHANGE_FLAGS;
+
+enum tagPROPVAR_COMPARE_UNIT
+{
+    PVCU_DEFAULT           = 0x00000000,
+    PVCU_SECOND            = 0x00000001,
+    PVCU_MINUTE            = 0x00000002,
+    PVCU_HOUR              = 0x00000003,
+    PVCU_DAY               = 0x00000004,
+    PVCU_MONTH             = 0x00000005,
+    PVCU_YEAR              = 0x00000006,
+};
+
+typedef int PROPVAR_COMPARE_UNIT;
+
+enum tagPROPVAR_COMPARE_FLAGS
+{
+    PVCF_DEFAULT           = 0x00000000,
+    PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
+    PVCF_USESTRCMP         = 0x00000002,
+    PVCF_USESTRCMPC        = 0x00000004,
+    PVCF_USESTRCMPI        = 0x00000008,
+    PVCF_USESTRCMPIC       = 0x00000010,
+};
+
+typedef int PROPVAR_COMPARE_FLAGS;
+
+HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
+                                     PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
+HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
+HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
+HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, 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,
+                                PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
+
+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);
+
+#ifdef __cplusplus
+
+HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar);
+HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
+HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
+
+#ifndef NO_PROPVAR_INLINES
+
+inline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar)
+{
+    ppropvar->vt = VT_BOOL;
+    ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
+    return S_OK;
+}
+
+inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
+{
+    HRESULT hres;
+
+    hres = SHStrDupW(psz, &ppropvar->pwszVal);
+    if(SUCCEEDED(hres))
+        ppropvar->vt = VT_LPWSTR;
+    else
+        PropVariantInit(ppropvar);
+
+    return hres;
+}
+
+inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
+{
+    ppropvar->vt = VT_I8;
+    ppropvar->hVal.QuadPart = llVal;
+    return S_OK;
+}
+
+#endif
+#endif
+
+#endif /* __WINE_PROPVARUTIL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h
new file mode 100644
index 0000000..5c8181b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h
@@ -0,0 +1,547 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PRSHT_H
+#define __WINE_PRSHT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Property sheet support (callback procs)
+ */
+
+
+#define WC_PROPSHEETA      "SysPropertySheet"
+#if defined(__GNUC__)
+# define WC_PROPSHEETW (const WCHAR []){ 'S','y','s', \
+  'P','r','o','p','e','r','t','y','S','h','e','e','t',0 }
+#elif defined(_MSC_VER)
+# define WC_PROPSHEETW     L"SysPropertySheet"
+#else
+static const WCHAR WC_PROPSHEETW[] = { 'S','y','s',
+  'P','r','o','p','e','r','t','y','S','h','e','e','t',0 };
+#endif
+#define WC_PROPSHEET         WINELIB_NAME_AW(WC_PROPSHEET)
+
+struct _PROPSHEETPAGEA;  /** need to forward declare those structs **/
+struct _PROPSHEETPAGEW;
+struct _PSP;
+#ifndef _HPROPSHEETPAGE_DEFINED
+#define _HPROPSHEETPAGE_DEFINED
+typedef struct _PSP *HPROPSHEETPAGE;
+#endif /* _HPROPSHEETPAGE_DEFINED */
+
+
+typedef UINT (CALLBACK *LPFNPSPCALLBACKA)(HWND, UINT, struct _PROPSHEETPAGEA*);
+typedef UINT (CALLBACK *LPFNPSPCALLBACKW)(HWND, UINT, struct _PROPSHEETPAGEW*);
+typedef INT  (CALLBACK *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM);
+typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);
+typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM);
+
+/*
+ * Property sheet support (structures)
+ */
+
+typedef LPCDLGTEMPLATEA PROPSHEETPAGE_RESOURCEA;
+typedef LPCDLGTEMPLATEW PROPSHEETPAGE_RESOURCEW;
+DECL_WINELIB_TYPE_AW(PROPSHEETPAGE_RESOURCE)
+
+typedef struct _PROPSHEETPAGEA
+{
+    DWORD              dwSize;
+    DWORD              dwFlags;
+    HINSTANCE          hInstance;
+    union
+    {
+        LPCSTR         pszTemplate;
+        PROPSHEETPAGE_RESOURCEA pResource;
+    } DUMMYUNIONNAME;
+    union
+    {
+        HICON          hIcon;
+        LPCSTR         pszIcon;
+    } DUMMYUNIONNAME2;
+    LPCSTR             pszTitle;
+    DLGPROC            pfnDlgProc;
+    LPARAM             lParam;
+    LPFNPSPCALLBACKA   pfnCallback;
+    UINT*              pcRefParent;
+    LPCSTR             pszHeaderTitle;
+    LPCSTR             pszHeaderSubTitle;
+    HANDLE             hActCtx;
+    union
+    {
+        HBITMAP        hbmHeader;
+        LPCSTR         pszbmHeader;
+    } DUMMYUNIONNAME3;
+} PROPSHEETPAGEA, *LPPROPSHEETPAGEA,
+  PROPSHEETPAGEA_LATEST, *LPPROPSHEETPAGEA_LATEST;
+
+typedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA, *LPCPROPSHEETPAGEA_LATEST;
+#define PROPSHEETPAGEA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pcRefParent)
+#define PROPSHEETPAGEA_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pszHeaderSubTitle)
+#define PROPSHEETPAGEA_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, hActCtx)
+#define PROPSHEETPAGEA_V4_SIZE sizeof(PROPSHEETHEADERA)
+
+typedef struct _PROPSHEETPAGEW
+{
+    DWORD              dwSize;
+    DWORD              dwFlags;
+    HINSTANCE          hInstance;
+    union
+    {
+        LPCWSTR        pszTemplate;
+        PROPSHEETPAGE_RESOURCEW pResource;
+    } DUMMYUNIONNAME;
+    union
+    {
+        HICON          hIcon;
+        LPCWSTR        pszIcon;
+    } DUMMYUNIONNAME2;
+    LPCWSTR            pszTitle;
+    DLGPROC            pfnDlgProc;
+    LPARAM             lParam;
+    LPFNPSPCALLBACKW   pfnCallback;
+    UINT*              pcRefParent;
+    LPCWSTR            pszHeaderTitle;
+    LPCWSTR            pszHeaderSubTitle;
+    HANDLE             hActCtx;
+    union
+    {
+        HBITMAP        hbmHeader;
+        LPCWSTR        pszbmHeader;
+    } DUMMYUNIONNAME3;
+} PROPSHEETPAGEW, *LPPROPSHEETPAGEW,
+  PROPSHEETPAGEW_LATEST, *LPPROPSHEETPAGEW_LATEST;
+
+typedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW, *LPCPROPSHEETPAGEW_LATEST;
+#define PROPSHEETPAGEW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pcRefParent)
+#define PROPSHEETPAGEW_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pszHeaderSubTitle)
+#define PROPSHEETPAGEW_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, hActCtx)
+#define PROPSHEETPAGEW_V4_SIZE sizeof(PROPSHEETHEADERA)
+
+
+typedef struct _PROPSHEETHEADERA
+{
+    DWORD                    dwSize;
+    DWORD                    dwFlags;
+    HWND                   hwndParent;
+    HINSTANCE              hInstance;
+    union
+    {
+      HICON                  hIcon;
+      LPCSTR                   pszIcon;
+    }DUMMYUNIONNAME;
+    LPCSTR                   pszCaption;
+    UINT                   nPages;
+    union
+    {
+        UINT                 nStartPage;
+        LPCSTR                 pStartPage;
+    }DUMMYUNIONNAME2;
+    union
+    {
+        LPCPROPSHEETPAGEA    ppsp;
+        HPROPSHEETPAGE*        phpage;
+    }DUMMYUNIONNAME3;
+    PFNPROPSHEETCALLBACK   pfnCallback;
+    union
+    {
+        HBITMAP              hbmWatermark;
+        LPCSTR                 pszbmWatermark;
+    }DUMMYUNIONNAME4;
+    HPALETTE               hplWatermark;
+    union
+    {
+        HBITMAP              hbmHeader;
+        LPCSTR                 pszbmHeader;
+    }DUMMYUNIONNAME5;
+} PROPSHEETHEADERA, *LPPROPSHEETHEADERA;
+
+typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA;
+#define PROPSHEETHEADERA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERA, pfnCallback)
+#define PROPSHEETHEADERA_V2_SIZE sizeof(PROPSHEETHEADERA)
+
+typedef struct _PROPSHEETHEADERW
+{
+    DWORD                    dwSize;
+    DWORD                    dwFlags;
+    HWND                   hwndParent;
+    HINSTANCE              hInstance;
+    union
+    {
+      HICON                  hIcon;
+      LPCWSTR                   pszIcon;
+    }DUMMYUNIONNAME;
+    LPCWSTR                  pszCaption;
+    UINT                   nPages;
+    union
+    {
+        UINT                 nStartPage;
+        LPCWSTR                pStartPage;
+    }DUMMYUNIONNAME2;
+    union
+    {
+        LPCPROPSHEETPAGEW    ppsp;
+        HPROPSHEETPAGE*        phpage;
+    }DUMMYUNIONNAME3;
+    PFNPROPSHEETCALLBACK   pfnCallback;
+    union
+    {
+        HBITMAP              hbmWatermark;
+        LPCWSTR                pszbmWatermark;
+    }DUMMYUNIONNAME4;
+    HPALETTE               hplWatermark;
+    union
+    {
+        HBITMAP              hbmHeader;
+        LPCWSTR                pszbmHeader;
+    }DUMMYUNIONNAME5;
+} PROPSHEETHEADERW, *LPPROPSHEETHEADERW;
+
+typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW;
+#define PROPSHEETHEADERW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERW, pfnCallback)
+#define PROPSHEETHEADERW_V2_SIZE sizeof(PROPSHEETHEADERW)
+
+
+/*
+ * Property sheet support (methods)
+ */
+INT_PTR WINAPI PropertySheetA(LPCPROPSHEETHEADERA);
+INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW);
+#define PropertySheet WINELIB_NAME_AW(PropertySheet)
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(LPCPROPSHEETPAGEA);
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW);
+#define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage)
+BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage);
+
+/*
+ * Property sheet support (UNICODE-Winelib)
+ */
+
+DECL_WINELIB_TYPE_AW(PROPSHEETPAGE)
+DECL_WINELIB_TYPE_AW(LPPROPSHEETPAGE)
+DECL_WINELIB_TYPE_AW(LPCPROPSHEETPAGE)
+DECL_WINELIB_TYPE_AW(PROPSHEETHEADER)
+DECL_WINELIB_TYPE_AW(LPPROPSHEETHEADER)
+DECL_WINELIB_TYPE_AW(LPCPROPSHEETHEADER)
+DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK)
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define PRSHT_NAME_AW(base, suffix)                  \
+    base##_##suffix##_must_use_W_or_A_in_this_context \
+    base##_##suffix##_must_use_W_or_A_in_this_context
+# define DECL_PRSHT_TYPE_AW(base, suffix)  /* nothing */
+#else  /* WINE_NO_UNICODE_MACROS */
+# ifdef UNICODE
+#  define PRSHT_NAME_AW(base, suffix) base##W_##suffix
+# else
+#  define PRSHT_NAME_AW(base, suffix) base##A_##suffix
+# endif
+# define DECL_PRSHT_TYPE_AW(base, suffix)  typedef PRSHT_NAME_AW(base, suffix) base##_##suffix;
+#endif  /* WINE_NO_UNICODE_MACROS */
+
+DECL_PRSHT_TYPE_AW(PROPSHEETPAGE, LATEST)
+DECL_PRSHT_TYPE_AW(LPPROPSHEETPAGE, LATEST)
+DECL_PRSHT_TYPE_AW(LPCPROPSHEETPAGE, LATEST)
+#define PROPSHEETPAGE_V1_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V1_SIZE)
+#define PROPSHEETPAGE_V2_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V2_SIZE)
+#define PROPSHEETPAGE_V3_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V3_SIZE)
+#define PROPSHEETPAGE_V4_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V4_SIZE)
+#define PROPSHEETHEADER_V1_SIZE  PRSHT_NAME_AW(PROPSHEETHEADER, V1_SIZE)
+#define PROPSHEETHEADER_V2_SIZE  PRSHT_NAME_AW(PROPSHEETHEADER, V2_SIZE)
+
+#undef PRSHT_NAME_AW
+#undef DECL_PRSHT_TYPE_AW
+
+/*
+ * Property sheet support (defines)
+ */
+#define PSP_DEFAULT             0x0000
+#define PSP_DLGINDIRECT         0x0001
+#define PSP_USEHICON            0x0002
+#define PSP_USEICONID           0x0004
+#define PSP_USETITLE            0x0008
+#define PSP_RTLREADING          0x0010
+
+#define PSP_HASHELP             0x0020
+#define PSP_USEREFPARENT        0x0040
+#define PSP_USECALLBACK         0x0080
+#define PSP_PREMATURE           0x0400
+
+#define PSP_HIDEHEADER          0x00000800
+#define PSP_USEHEADERTITLE      0x00001000
+#define PSP_USEHEADERSUBTITLE   0x00002000
+#define PSP_USEFUSIONCONTEXT    0x00004000
+#define PSP_COMMANDLINKS        0x00040000
+
+#define PSPCB_RELEASE           1
+#define PSPCB_CREATE            2
+
+#define PSH_DEFAULT             0x0000
+#define PSH_PROPTITLE           0x0001
+#define PSH_USEHICON            0x0002
+#define PSH_USEICONID           0x0004
+#define PSH_PROPSHEETPAGE       0x0008
+#define PSH_WIZARDHASFINISH     0x0010
+#define PSH_WIZARD              0x0020
+#define PSH_USEPSTARTPAGE       0x0040
+#define PSH_NOAPPLYNOW          0x0080
+#define PSH_USECALLBACK         0x0100
+#define PSH_HASHELP             0x0200
+#define PSH_MODELESS            0x0400
+#define PSH_RTLREADING          0x0800
+#define PSH_WIZARDCONTEXTHELP   0x00001000
+
+#define PSH_WIZARD97_OLD        0x00002000 /* for IE < 5 */
+#define PSH_AEROWIZARD          0x00004000
+#define PSH_WATERMARK           0x00008000
+#define PSH_USEHBMWATERMARK     0x00010000
+#define PSH_USEHPLWATERMARK     0x00020000
+#define PSH_STRETCHWATERMARK    0x00040000
+#define PSH_HEADER              0x00080000
+#define PSH_USEHBMHEADER        0x00100000
+#define PSH_USEPAGELANG         0x00200000
+#define PSH_WIZARD_LITE         0x00400000
+#define PSH_WIZARD97_NEW        0x01000000 /* for IE >= 5 */
+#define PSH_NOCONTEXTHELP       0x02000000
+#define PSH_RESIZABLE           0x04000000
+#define PSH_HEADERBITMAP        0x08000000
+#define PSH_NOMARGIN            0x10000000
+#ifndef __WINESRC__
+# if defined(_WIN32_IE) && (_WIN32_IE < 0x0500)
+#  define PSH_WIZARD97          PSH_WIZARD97_OLD
+# else
+#  define PSH_WIZARD97          PSH_WIZARD97_NEW
+# endif
+#endif
+
+#define PSCB_INITIALIZED  1
+#define PSCB_PRECREATE    2
+
+typedef struct _PSHNOTIFY
+{
+   NMHDR hdr;
+   LPARAM lParam;
+} PSHNOTIFY, *LPPSHNOTIFY;
+
+#define PSN_FIRST               (0U-200U)
+#define PSN_LAST                (0U-299U)
+
+
+#define PSN_SETACTIVE           (PSN_FIRST-0)
+#define PSN_KILLACTIVE          (PSN_FIRST-1)
+/* #define PSN_VALIDATE            (PSN_FIRST-1) */
+#define PSN_APPLY               (PSN_FIRST-2)
+#define PSN_RESET               (PSN_FIRST-3)
+/* #define PSN_CANCEL              (PSN_FIRST-3) */
+#define PSN_HELP                (PSN_FIRST-5)
+#define PSN_WIZBACK             (PSN_FIRST-6)
+#define PSN_WIZNEXT             (PSN_FIRST-7)
+#define PSN_WIZFINISH           (PSN_FIRST-8)
+#define PSN_QUERYCANCEL         (PSN_FIRST-9)
+#define PSN_GETOBJECT           (PSN_FIRST-10)
+#define PSN_TRANSLATEACCELERATOR (PSN_FIRST-12)
+#define PSN_QUERYINITIALFOCUS   (PSN_FIRST-13)
+
+#define PSNRET_NOERROR              0
+#define PSNRET_INVALID              1
+#define PSNRET_INVALID_NOCHANGEPAGE 2
+
+
+#define PSM_SETCURSEL           (WM_USER + 101)
+#define PSM_REMOVEPAGE          (WM_USER + 102)
+#define PSM_ADDPAGE             (WM_USER + 103)
+#define PSM_CHANGED             (WM_USER + 104)
+#define PSM_RESTARTWINDOWS      (WM_USER + 105)
+#define PSM_REBOOTSYSTEM        (WM_USER + 106)
+#define PSM_CANCELTOCLOSE       (WM_USER + 107)
+#define PSM_QUERYSIBLINGS       (WM_USER + 108)
+#define PSM_UNCHANGED           (WM_USER + 109)
+#define PSM_APPLY               (WM_USER + 110)
+#define PSM_SETTITLEA         (WM_USER + 111)
+#define PSM_SETTITLEW         (WM_USER + 120)
+#define PSM_SETTITLE WINELIB_NAME_AW(PSM_SETTITLE)
+#define PSM_SETWIZBUTTONS       (WM_USER + 112)
+#define PSM_PRESSBUTTON         (WM_USER + 113)
+#define PSM_SETCURSELID         (WM_USER + 114)
+#define PSM_SETFINISHTEXTA    (WM_USER + 115)
+#define PSM_SETFINISHTEXTW    (WM_USER + 121)
+#define PSM_SETFINISHTEXT WINELIB_NAME_AW(PSM_SETFINISHTEXT)
+#define PSM_GETTABCONTROL       (WM_USER + 116)
+#define PSM_ISDIALOGMESSAGE     (WM_USER + 117)
+#define PSM_GETCURRENTPAGEHWND  (WM_USER + 118)
+#define PSM_INSERTPAGE          (WM_USER + 119)
+#define PSM_SETHEADERTITLEA     (WM_USER + 125)
+#define PSM_SETHEADERTITLEW     (WM_USER + 126)
+#define PSM_SETHEADERTITLE      WINELIB_NAME_AW(PSM_SETHEADERTITLE)
+#define PSM_SETHEADERSUBTITLEA  (WM_USER + 127)
+#define PSM_SETHEADERSUBTITLEW  (WM_USER + 128)
+#define PSM_SETHEADERSUBTITLE   WINELIB_NAME_AW(PSM_SETHEADERSUBTITLE)
+#define PSM_HWNDTOINDEX         (WM_USER + 129)
+#define PSM_INDEXTOHWND         (WM_USER + 130)
+#define PSM_PAGETOINDEX         (WM_USER + 131)
+#define PSM_INDEXTOPAGE         (WM_USER + 132)
+#define PSM_IDTOINDEX           (WM_USER + 133)
+#define PSM_INDEXTOID           (WM_USER + 134)
+#define PSM_GETRESULT           (WM_USER + 135)
+#define PSM_RECALCPAGESIZES     (WM_USER + 136)
+
+#define PSWIZB_BACK             0x00000001
+#define PSWIZB_NEXT             0x00000002
+#define PSWIZB_FINISH           0x00000004
+#define PSWIZB_DISABLEDFINISH   0x00000008
+
+#define PSBTN_BACK              0
+#define PSBTN_NEXT              1
+#define PSBTN_FINISH            2
+#define PSBTN_OK                3
+#define PSBTN_APPLYNOW          4
+#define PSBTN_CANCEL            5
+#define PSBTN_HELP              6
+#define PSBTN_MAX               6
+
+#define ID_PSRESTARTWINDOWS     0x2
+#define ID_PSREBOOTSYSTEM       (ID_PSRESTARTWINDOWS | 0x1)
+
+
+#define WIZ_CXDLG               276
+#define WIZ_CYDLG               140
+
+#define WIZ_CXBMP               80
+
+#define WIZ_BODYX               92
+#define WIZ_BODYCX              184
+
+#define PROP_SM_CXDLG           212
+#define PROP_SM_CYDLG           188
+
+#define PROP_MED_CXDLG          227
+#define PROP_MED_CYDLG          215
+
+#define PROP_LG_CXDLG           252
+#define PROP_LG_CYDLG           218
+
+/*
+ * Property sheet support (macros)
+ */
+
+#define PropSheet_SetCurSel(hDlg, hpage, index) \
+	SendMessageA(hDlg, PSM_SETCURSEL, (WPARAM)index, (LPARAM)hpage)
+
+#define PropSheet_RemovePage(hDlg, index, hpage) \
+	SNDMSG(hDlg, PSM_REMOVEPAGE, index, (LPARAM)hpage)
+
+#define PropSheet_AddPage(hDlg, hpage) \
+	SNDMSG(hDlg, PSM_ADDPAGE, 0, (LPARAM)hpage)
+
+#define PropSheet_Changed(hDlg, hwnd) \
+        SNDMSG(hDlg, PSM_CHANGED, (WPARAM)hwnd, 0)
+
+#define PropSheet_RestartWindows(hDlg) \
+        SNDMSG(hDlg, PSM_RESTARTWINDOWS, 0, 0)
+
+#define PropSheet_RebootSystem(hDlg) \
+        SNDMSG(hDlg, PSM_REBOOTSYSTEM, 0, 0)
+
+#define PropSheet_CancelToClose(hDlg) \
+        PostMessage(hDlg, PSM_CANCELTOCLOSE, 0, 0)
+
+#define PropSheet_QuerySiblings(hDlg, wParam, lParam) \
+	SNDMSG(hDlg, PSM_QUERYSIBLINGS, wParam, lParam)
+
+#define PropSheet_UnChanged(hDlg, hwnd) \
+        SNDMSG(hDlg, PSM_UNCHANGED, (WPARAM)hwnd, 0)
+
+#define PropSheet_Apply(hDlg) \
+        SNDMSG(hDlg, PSM_APPLY, 0, 0)
+
+#define PropSheet_SetTitle(hDlg, wStyle, lpszText)\
+	SNDMSG(hDlg, PSM_SETTITLE, wStyle, (LPARAM)(LPCTSTR)lpszText)
+
+#define PropSheet_SetWizButtons(hDlg, dwFlags) \
+	PostMessage(hDlg, PSM_SETWIZBUTTONS, 0, (LPARAM)dwFlags)
+
+#define PropSheet_PressButton(hDlg, iButton) \
+	PostMessage(hDlg, PSM_PRESSBUTTON, (WPARAM)iButton, 0)
+
+#define PropSheet_SetCurSelByID(hDlg, id) \
+	SNDMSG(hDlg, PSM_SETCURSELID, 0, (LPARAM)id)
+
+#define PropSheet_SetFinishText(hDlg, lpszText) \
+	SNDMSG(hDlg, PSM_SETFINISHTEXT, 0, (LPARAM)lpszText)
+
+#define PropSheet_GetTabControl(hDlg) \
+	(HWND)SNDMSG(hDlg, PSM_GETTABCONTROL, 0, 0)
+
+#define PropSheet_IsDialogMessage(hDlg, pMsg) \
+	(BOOL)SNDMSG(hDlg, PSM_ISDIALOGMESSAGE, 0, (LPARAM)pMsg)
+
+#define PropSheet_GetCurrentPageHwnd(hDlg) \
+        (HWND)SNDMSG(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0)
+
+#define PropSheet_InsertPage(hDlg, index, hpage) \
+        SNDMSG(hDlg, PSM_INSERTPAGE, (WPARAM)(index), (LPARAM)(hpage))
+
+#define PropSheet_SetHeaderTitle(hDlg, index, lpszText) \
+        SNDMSG(hDlg, PSM_SETHEADERTITLE, (WPARAM)(index), (LPARAM)(lpszText))
+
+#define PropSheet_SetHeaderSubTitle(hDlg, index, lpszText) \
+        SNDMSG(hDlg, PSM_SETHEADERSUBTITLE, (WPARAM)(index), (LPARAM)(lpszText))
+
+#define PropSheet_HwndToIndex(hDlg, hwnd) \
+        (int)SNDMSG(hDlg, PSM_HWNDTOINDEX, (WPARAM)(hwnd), 0)
+
+#define PropSheet_IndexToHwnd(hDlg, i) \
+        (HWND)SNDMSG(hDlg, PSM_INDEXTOHWND, (WPARAM)(i), 0)
+
+#define PropSheet_PageToIndex(hDlg, hpage) \
+        (int)SNDMSG(hDlg, PSM_PAGETOINDEX, 0, (LPARAM)(hpage))
+
+#define PropSheet_IndexToPage(hDlg, i) \
+        (HPROPSHEETPAGE)SNDMSG(hDlg, PSM_INDEXTOPAGE, (WPARAM)(i), 0)
+
+#define PropSheet_IdToIndex(hDlg, id) \
+        (int)SNDMSG(hDlg, PSM_IDTOINDEX, 0, (LPARAM)(id))
+
+#define PropSheet_IndexToId(hDlg, i) \
+        SNDMSG(hDlg, PSM_INDEXTOID, (WPARAM)(i), 0)
+
+#define PropSheet_GetResult(hDlg) \
+        SNDMSG(hDlg, PSM_GETRESULT, 0, 0)
+
+#define PropSheet_RecalcPageSizes(hDlg) \
+        SNDMSG(hDlg, PSM_RECALCPAGESIZES, 0, 0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_PRSHT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h
new file mode 100644
index 0000000..1971d25
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h
@@ -0,0 +1,128 @@
+/*
+ * Declarations for PSAPI
+ *
+ * Copyright (C) 1998 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PSAPI_H
+#define __WINE_PSAPI_H
+
+typedef struct _MODULEINFO {
+  LPVOID lpBaseOfDll;
+  DWORD SizeOfImage;
+  LPVOID EntryPoint;
+} MODULEINFO, *LPMODULEINFO;
+
+typedef struct _PROCESS_MEMORY_COUNTERS {
+  DWORD  cb;
+  DWORD  PageFaultCount;
+  SIZE_T PeakWorkingSetSize;
+  SIZE_T WorkingSetSize;
+  SIZE_T QuotaPeakPagedPoolUsage;
+  SIZE_T QuotaPagedPoolUsage;
+  SIZE_T QuotaPeakNonPagedPoolUsage;
+  SIZE_T QuotaNonPagedPoolUsage;
+  SIZE_T PagefileUsage;
+  SIZE_T PeakPagefileUsage;
+} PROCESS_MEMORY_COUNTERS;
+typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
+
+typedef struct _PSAPI_WS_WATCH_INFORMATION {
+  LPVOID FaultingPc;
+  LPVOID FaultingVa;
+} PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;
+
+typedef struct _PERFORMANCE_INFORMATION {
+    DWORD cb;
+    SIZE_T CommitTotal;
+    SIZE_T CommitLimit;
+    SIZE_T CommitPeak;
+    SIZE_T PhysicalTotal;
+    SIZE_T PhysicalAvailable;
+    SIZE_T SystemCache;
+    SIZE_T KernelTotal;
+    SIZE_T KernelPaged;
+    SIZE_T KernelNonpaged;
+    SIZE_T PageSize;
+    DWORD HandleCount;
+    DWORD ProcessCount;
+    DWORD ThreadCount;
+} PERFORMANCE_INFORMATION, *PPERFORMANCE_INFORMATION;
+
+typedef struct _ENUM_PAGE_FILE_INFORMATION {
+    DWORD cb;
+    DWORD Reserved;
+    SIZE_T TotalSize;
+    SIZE_T TotalInUse;
+    SIZE_T PeakUsage;
+} ENUM_PAGE_FILE_INFORMATION, *PENUM_PAGE_FILE_INFORMATION;
+
+typedef BOOL (*PENUM_PAGE_FILE_CALLBACKA) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR);
+typedef BOOL (*PENUM_PAGE_FILE_CALLBACKW) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR);
+#define PENUM_PAGE_FILE_CALLBACK WINELIB_NAME_AW(PENUM_PAGE_FILE_CALLBACK)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL  WINAPI EnumProcesses(DWORD*, DWORD, DWORD*);
+BOOL  WINAPI EnumProcessModules(HANDLE, HMODULE*, DWORD, LPDWORD);
+DWORD WINAPI GetModuleBaseNameA(HANDLE, HMODULE, LPSTR, DWORD);
+DWORD WINAPI GetModuleBaseNameW(HANDLE, HMODULE, LPWSTR, DWORD);
+#define      GetModuleBaseName WINELIB_NAME_AW(GetModuleBaseName)
+DWORD WINAPI GetModuleFileNameExA(HANDLE, HMODULE, LPSTR, DWORD);
+DWORD WINAPI GetModuleFileNameExW(HANDLE, HMODULE, LPWSTR, DWORD);
+#define      GetModuleFileNameEx WINELIB_NAME_AW(GetModuleFileNameEx)
+BOOL  WINAPI GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD);
+BOOL  WINAPI EmptyWorkingSet(HANDLE);
+BOOL  WINAPI QueryWorkingSet(HANDLE, PVOID, DWORD);
+BOOL  WINAPI QueryWorkingSetEx(HANDLE, PVOID, DWORD);
+BOOL  WINAPI InitializeProcessForWsWatch(HANDLE);
+BOOL  WINAPI GetWsChanges(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD);
+DWORD WINAPI GetMappedFileNameW(HANDLE, LPVOID, LPWSTR, DWORD);
+DWORD WINAPI GetMappedFileNameA(HANDLE, LPVOID, LPSTR, DWORD);
+#define      GetMappedFileName WINELIB_NAME_AW(GetMappedFileName)
+BOOL  WINAPI EnumDeviceDrivers(LPVOID*, DWORD, LPDWORD);
+DWORD WINAPI GetDeviceDriverBaseNameA(LPVOID, LPSTR, DWORD);
+DWORD WINAPI GetDeviceDriverBaseNameW(LPVOID, LPWSTR, DWORD);
+#define      GetDeviceDriverBaseName WINELIB_NAME_AW(GetDeviceDriverBaseName)
+DWORD WINAPI GetDeviceDriverFileNameA(LPVOID, LPSTR, DWORD);
+DWORD WINAPI GetDeviceDriverFileNameW(LPVOID, LPWSTR, DWORD);
+#define      GetDeviceDriverFileName WINELIB_NAME_AW(GetDeviceDriverFileName)
+BOOL  WINAPI GetProcessMemoryInfo(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD);
+BOOL  WINAPI GetPerformanceInfo(PPERFORMANCE_INFORMATION, DWORD);
+BOOL  WINAPI EnumPageFilesA(PENUM_PAGE_FILE_CALLBACKA, LPVOID);
+BOOL  WINAPI EnumPageFilesW(PENUM_PAGE_FILE_CALLBACKW, LPVOID);
+#define EnumPageFiles WINELIB_NAME_AW(EnumPageFiles)
+DWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD);
+DWORD WINAPI GetProcessImageFileNameW(HANDLE, LPWSTR, DWORD);
+#define      GetProcessImageFileName WINELIB_NAME_AW(GetProcessImageFileName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_PSAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h
new file mode 100644
index 0000000..7f5d4b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+   /* Depth > 15 */
+#  error "Alignment nesting > 15 is not supported"
+
+#else
+
+#  if !defined(__WINE_PSHPACK_H)
+#    define __WINE_PSHPACK_H  1
+     /* Depth == 1 */
+#  elif !defined(__WINE_PSHPACK_H2)
+#    define __WINE_PSHPACK_H2 1
+     /* Depth == 2 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H3)
+#    define __WINE_PSHPACK_H3 1
+     /* Depth == 3 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H4)
+#    define __WINE_PSHPACK_H4 1
+     /* Depth == 4 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H5)
+#    define __WINE_PSHPACK_H5 1
+     /* Depth == 5 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H6)
+#    define __WINE_PSHPACK_H6 1
+     /* Depth == 6 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H7)
+#    define __WINE_PSHPACK_H7 1
+     /* Depth == 7 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H8)
+#    define __WINE_PSHPACK_H8 1
+     /* Depth == 8 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H9)
+#    define __WINE_PSHPACK_H9 1
+     /* Depth == 9 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H10)
+#    define __WINE_PSHPACK_H10 1
+     /* Depth == 10 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H11)
+#    define __WINE_PSHPACK_H11 1
+     /* Depth == 11 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H12)
+#    define __WINE_PSHPACK_H12 1
+     /* Depth == 12 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H13)
+#    define __WINE_PSHPACK_H13 1
+     /* Depth == 13 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H14)
+#    define __WINE_PSHPACK_H14 1
+     /* Depth == 14 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H15)
+#    define __WINE_PSHPACK_H15 1
+     /* Depth == 15 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  endif
+
+#  if defined(_MSC_VER) && (_MSC_VER >= 800)
+#   pragma warning(disable:4103)
+#  endif
+
+#  pragma pack(1)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h
new file mode 100644
index 0000000..30dde03
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+   /* Depth > 15 */
+#  error "Alignment nesting > 15 is not supported"
+
+#else
+
+#  if !defined(__WINE_PSHPACK_H)
+#    define __WINE_PSHPACK_H  2
+     /* Depth == 1 */
+#  elif !defined(__WINE_PSHPACK_H2)
+#    define __WINE_PSHPACK_H2 2
+     /* Depth == 2 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H3)
+#    define __WINE_PSHPACK_H3 2
+     /* Depth == 3 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H4)
+#    define __WINE_PSHPACK_H4 2
+     /* Depth == 4 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H5)
+#    define __WINE_PSHPACK_H5 2
+     /* Depth == 5 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H6)
+#    define __WINE_PSHPACK_H6 2
+     /* Depth == 6 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H7)
+#    define __WINE_PSHPACK_H7 2
+     /* Depth == 7 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H8)
+#    define __WINE_PSHPACK_H8 2
+     /* Depth == 8 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H9)
+#    define __WINE_PSHPACK_H9 2
+     /* Depth == 9 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H10)
+#    define __WINE_PSHPACK_H10 2
+     /* Depth == 10 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H11)
+#    define __WINE_PSHPACK_H11 2
+     /* Depth == 11 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H12)
+#    define __WINE_PSHPACK_H12 2
+     /* Depth == 12 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H13)
+#    define __WINE_PSHPACK_H13 2
+     /* Depth == 13 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H14)
+#    define __WINE_PSHPACK_H14 2
+     /* Depth == 14 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H15)
+#    define __WINE_PSHPACK_H15 2
+     /* Depth == 15 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  endif
+
+#  if defined(_MSC_VER) && (_MSC_VER >= 800)
+#   pragma warning(disable:4103)
+#  endif
+
+#  pragma pack(2)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h
new file mode 100644
index 0000000..c73332f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+   /* Depth > 15 */
+#  error "Alignment nesting > 15 is not supported"
+
+#else
+
+#  if !defined(__WINE_PSHPACK_H)
+#    define __WINE_PSHPACK_H  4
+     /* Depth == 1 */
+#  elif !defined(__WINE_PSHPACK_H2)
+#    define __WINE_PSHPACK_H2 4
+     /* Depth == 2 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H3)
+#    define __WINE_PSHPACK_H3 4
+     /* Depth == 3 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H4)
+#    define __WINE_PSHPACK_H4 4
+     /* Depth == 4 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H5)
+#    define __WINE_PSHPACK_H5 4
+     /* Depth == 5 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H6)
+#    define __WINE_PSHPACK_H6 4
+     /* Depth == 6 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H7)
+#    define __WINE_PSHPACK_H7 4
+     /* Depth == 7 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H8)
+#    define __WINE_PSHPACK_H8 4
+     /* Depth == 8 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H9)
+#    define __WINE_PSHPACK_H9 4
+     /* Depth == 9 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H10)
+#    define __WINE_PSHPACK_H10 4
+     /* Depth == 10 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H11)
+#    define __WINE_PSHPACK_H11 4
+     /* Depth == 11 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H12)
+#    define __WINE_PSHPACK_H12 4
+     /* Depth == 12 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H13)
+#    define __WINE_PSHPACK_H13 4
+     /* Depth == 13 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H14)
+#    define __WINE_PSHPACK_H14 4
+     /* Depth == 14 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H15)
+#    define __WINE_PSHPACK_H15 4
+     /* Depth == 15 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  endif
+
+#  if defined(_MSC_VER) && (_MSC_VER >= 800)
+#   pragma warning(disable:4103)
+#  endif
+
+#  pragma pack(4)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h
new file mode 100644
index 0000000..12a558f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+   /* Depth > 15 */
+#  error "Alignment nesting > 15 is not supported"
+
+#else
+
+#  if !defined(__WINE_PSHPACK_H)
+#    define __WINE_PSHPACK_H  8
+     /* Depth == 1 */
+#  elif !defined(__WINE_PSHPACK_H2)
+#    define __WINE_PSHPACK_H2 8
+     /* Depth == 2 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H3)
+#    define __WINE_PSHPACK_H3 8
+     /* Depth == 3 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H4)
+#    define __WINE_PSHPACK_H4 8
+     /* Depth == 4 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H5)
+#    define __WINE_PSHPACK_H5 8
+     /* Depth == 5 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H6)
+#    define __WINE_PSHPACK_H6 8
+     /* Depth == 6 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H7)
+#    define __WINE_PSHPACK_H7 8
+     /* Depth == 7 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H8)
+#    define __WINE_PSHPACK_H8 8
+     /* Depth == 8 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H9)
+#    define __WINE_PSHPACK_H9 8
+     /* Depth == 9 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H10)
+#    define __WINE_PSHPACK_H10 8
+     /* Depth == 10 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H11)
+#    define __WINE_PSHPACK_H11 8
+     /* Depth == 11 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H12)
+#    define __WINE_PSHPACK_H12 8
+     /* Depth == 12 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H13)
+#    define __WINE_PSHPACK_H13 8
+     /* Depth == 13 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H14)
+#    define __WINE_PSHPACK_H14 8
+     /* Depth == 14 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  elif !defined(__WINE_PSHPACK_H15)
+#    define __WINE_PSHPACK_H15 8
+     /* Depth == 15 */
+#    define __WINE_INTERNAL_POPPACK
+#    include <poppack.h>
+#  endif
+
+#  if defined(_MSC_VER) && (_MSC_VER >= 800)
+#   pragma warning(disable:4103)
+#  endif
+
+#  pragma pack(8)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl
new file mode 100644
index 0000000..3d1b3e1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "oaidl.idl";
+
+cpp_quote("#define PST_KEY_CURRENT_USER    0")
+cpp_quote("#define PST_KEY_LOCAL_MACHINE   1")
+
+cpp_quote("#define PST_E_OK          0x00000000L")
+cpp_quote("#define PST_E_TYPE_EXISTS 0x800C0004L")
+
+cpp_quote("#define PST_AUTHENTICODE        1")
+cpp_quote("#define PST_BINARY_CHECK        2")
+cpp_quote("#define PST_SECURITY_DESCRIPTOR 4")
+
+typedef DWORD PST_ACCESSMODE;
+typedef DWORD PST_ACCESSCLAUSETYPE;
+typedef DWORD PST_KEY;
+typedef DWORD PST_PROVIDERCAPABILITIES;
+typedef GUID PST_PROVIDERID, *PPST_PROVIDERID;
+
+/*****************************************************************************
+ * PSTOREC library
+ */
+[
+    uuid(5a6f1ebd-2db1-11d0-8c39-00c04fd9126b),
+    version(1.0),
+    helpstring("PStore 1.0 Type Library")
+]
+library PSTORECLib
+{
+    importlib("stdole2.tlb");
+
+typedef struct _PST_PROVIDERINFO
+{
+    DWORD cbSize;
+    PST_PROVIDERID ID;
+    PST_PROVIDERCAPABILITIES Capabilities;
+    LPWSTR szProviderName;
+} PST_PROVIDERINFO, *PPST_PROVIDERINFO;
+
+typedef struct _PST_PROMPTINFO
+{
+    DWORD cbSize;
+    DWORD dwPromptFlags;
+    HWND hwndApp;
+    LPCWSTR szPrompt;
+} PST_PROMPTINFO, *PPST_PROMPTINFO;
+
+typedef struct _PST_ACCESSCLAUSE {
+    DWORD cbSize;
+    PST_ACCESSCLAUSETYPE ClauseType;
+    DWORD cbClauseData;
+    BYTE* pbClauseData;
+} PST_ACCESSCLAUSE, *PPST_ACCESSCLAUSE;
+
+typedef struct _PST_ACCESSRULE {
+    DWORD cbSize;
+    PST_ACCESSMODE AccessModeFlags;
+    DWORD cClauses;
+    PST_ACCESSCLAUSE* rgClauses;
+} PST_ACCESSRULE, *PPST_ACCESSRULE;
+
+typedef struct _PST_ACCESSRULESET {
+    DWORD cbSize;
+    DWORD cClause;
+    PST_ACCESSRULE* rgRules;
+} PST_ACCESSRULESET, *PPST_ACCESSRULESET;
+
+typedef struct _PST_TYPEINFO {
+    DWORD cbSize;
+    LPWSTR szDisplayName;
+} PST_TYPEINFO, *PPST_TYPEINFO;
+
+[
+  object,
+  uuid(5a6f1ec1-2db1-11d0-8c39-00c04fd9126b),
+  pointer_default(unique)
+]
+interface IEnumPStoreItems : IUnknown
+{
+    HRESULT Clone(
+        [in] IEnumPStoreItems** ppenum );
+
+    HRESULT Next(
+        [in] DWORD celt,
+        [in] LPWSTR* rgelt,
+        [in] DWORD* pceltFetched );
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] DWORD celt );
+}
+
+[
+  object,
+  uuid(789c1cbf-31ee-11d0-8c39-00c04fd9126b),
+  pointer_default(unique)
+]
+interface IEnumPStoreTypes : IUnknown
+{
+    HRESULT Clone(
+        [in] IEnumPStoreTypes** ppenum );
+
+    HRESULT Next(
+        [in] DWORD celt,
+        [in] LPWSTR* rgelt,
+        [in] DWORD* pceltFetched );
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] DWORD celt );
+}
+
+/*****************************************************************************
+ * IPStore interface
+ */
+[
+  object,
+  uuid(5a6f1ec0-2db1-11d0-8c39-00c04fd9126b),
+  pointer_default(unique)
+]
+interface IPStore : IUnknown
+{
+    HRESULT GetInfo(
+        [in] PPST_PROVIDERINFO* ppProperties );
+
+    HRESULT GetProvParam(
+        [in] DWORD dwParam,
+        [out] DWORD* pcbData,
+        [out] BYTE** ppbData,
+        [in] DWORD dwFlags );
+
+    HRESULT SetProvParam(
+        [in] DWORD dwParam,
+        [in] DWORD cbData,
+        [in] BYTE* pbData,
+        [in] DWORD* dwFlags );
+
+    HRESULT CreateType(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] PPST_TYPEINFO pInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT GetTypeInfo(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] PPST_TYPEINFO** ppInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT DeleteType(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] DWORD dwFlags );
+
+    HRESULT CreateSubtype(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO pInfo,
+        [in] PPST_ACCESSRULESET pRules,
+        [in] DWORD dwFlags );
+
+    HRESULT GetSubtypeInfo(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO** ppInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT DeleteSubtype(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] DWORD dwFlags );
+
+    HRESULT ReadAccessRuleset(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO pInfo,
+        [in] PPST_ACCESSRULESET** ppRules,
+        [in] DWORD dwFlags );
+
+    HRESULT WriteAccessRuleset(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO pInfo,
+        [in] PPST_ACCESSRULESET pRules,
+        [in] DWORD dwFlags );
+
+    HRESULT EnumTypes(
+        [in] PST_KEY Key,
+        [in] DWORD dwFlags,
+        [in] IEnumPStoreTypes** ppenum );
+
+    HRESULT EnumSubtypes(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] DWORD dwFlags,
+        [in] IEnumPStoreTypes** ppenum );
+
+    HRESULT DeleteItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubType,
+        [in] LPCWSTR szItemName,
+        [in] PPST_PROMPTINFO pPromptInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT ReadItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR szItemName,
+        [in] DWORD *cbData,
+        [in] BYTE** pbData,
+        [in] PPST_PROMPTINFO pPromptInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT WriteItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR szItemName,
+        [in] DWORD cbData,
+        [in,size_is(cbData)] BYTE *ppbData,
+        [in] PPST_PROMPTINFO pPromptInfo,
+        [in] DWORD dwDefaultConfirmationStyle,
+        [in] DWORD dwFlags);
+
+    HRESULT OpenItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR szItemName,
+        [in] PST_ACCESSMODE ModeFlags,
+        [in] PPST_PROMPTINFO pProomptInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT CloseItem( 
+        [in] PST_KEY Key, 
+        [in] const GUID* pItemType, 
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR* szItemName,
+        [in] DWORD dwFlags );
+
+    HRESULT EnumItems(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] DWORD dwFlags,
+        [in] IEnumPStoreItems** ppenum );
+}
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl
new file mode 100644
index 0000000..4064aff
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2008 Google (Lei Zhang)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+/* import "dxtrans.idl"; */
+import "amstream.idl";
+import "msxml.idl";
+
+[
+    object,
+    uuid(0579154A-2B53-4994-B0D0-E773148EFF85),
+    local,
+    pointer_default(unique)
+]
+interface ISampleGrabberCB : IUnknown
+{
+    HRESULT SampleCB(
+        double SampleTime,
+        IMediaSample * pSample
+    );
+    HRESULT BufferCB(
+        double SampleTime,
+        BYTE * pBuffer,
+        LONG BufferLen
+    );
+}
+
+[
+    object,
+    uuid(6B652FFF-11FE-4fce-92AD-0266B5D7C78F),
+    local,
+    pointer_default(unique)
+]
+interface ISampleGrabber: IUnknown
+{
+    HRESULT SetOneShot(
+        BOOL OneShot
+    );
+
+    HRESULT SetMediaType(
+        const AM_MEDIA_TYPE * pType
+    );
+
+    HRESULT GetConnectedMediaType(
+        AM_MEDIA_TYPE * pType
+    );
+
+    HRESULT SetBufferSamples(
+        BOOL BufferThem
+    );
+
+    HRESULT GetCurrentBuffer(
+        [in,out] LONG * pBufferSize,
+        [out] LONG * pBuffer
+    );
+
+    HRESULT GetCurrentSample(
+        [out] IMediaSample ** ppSample
+    );
+
+    HRESULT SetCallback(
+        ISampleGrabberCB * pCallback,
+        LONG WhichMethodToCallback
+    );
+};
+
+[
+    object,
+    uuid(65bd0710-24d2-4FF7-9324-ed2e5d3abafa),
+    pointer_default(unique)
+]
+interface IMediaDet : IUnknown
+{
+    HRESULT get_Filter(
+        [out] IUnknown* *pVal
+    );
+
+    HRESULT put_Filter(
+        IUnknown* newVal
+    );
+
+    HRESULT get_OutputStreams(
+        [out] LONG *pVal
+    );
+
+    HRESULT get_CurrentStream(
+        [out] LONG *pVal
+    );
+
+    HRESULT put_CurrentStream(
+        LONG newVal
+    );
+
+    HRESULT get_StreamType(
+        [out] GUID *pVal
+    );
+
+    HRESULT get_StreamTypeB(
+        [out] BSTR *pVal
+    );
+
+    HRESULT get_StreamLength(
+        [out] double *pVal
+    );
+
+    HRESULT get_Filename(
+        [out] BSTR *pVal
+    );
+
+    HRESULT put_Filename(
+        BSTR newVal
+    );
+
+    HRESULT GetBitmapBits(
+        double StreamTime,
+        LONG * pBufferSize,
+        char * pBuffer,
+        LONG Width,
+        LONG Height
+    );
+
+    HRESULT WriteBitmapBits(
+        double StreamTime,
+        LONG Width,
+        LONG Height,
+        BSTR Filename
+    );
+
+    HRESULT get_StreamMediaType(
+        [out] AM_MEDIA_TYPE * pVal
+    );
+
+    HRESULT GetSampleGrabber(
+        [out] ISampleGrabber ** ppVal
+    );
+
+    HRESULT get_FrameRate(
+        [out] double *pVal
+    );
+
+    HRESULT EnterBitmapGrabMode(
+        double SeekTime
+    );
+};
+
+[
+    uuid(65BD0711-24D2-4ff7-9324-ED2E5D3ABAFA),
+]
+coclass MediaDet
+{
+    [default] interface IMediaDet;
+};
+
+enum
+{
+    E_NOTINTREE = 0x80040400,
+    E_RENDER_ENGINE_IS_BROKEN = 0x80040401,
+    E_MUST_INIT_RENDERER = 0x80040402,
+    E_NOTDETERMINED = 0x80040403,
+    E_NO_TIMELINE = 0x80040404,
+    S_WARN_OUTPUTRESET = 40404
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h
new file mode 100644
index 0000000..4cd90a3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h
@@ -0,0 +1,526 @@
+/*
+ * Copyright (C) 1998 Marcus Meissner
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RAS_H
+#define __WINE_RAS_H
+
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <pshpack4.h>
+#include <inaddr.h>
+#include <in6addr.h>
+
+#define RAS_MaxCallbackNumber RAS_MaxPhoneNumber
+#define RAS_MaxDeviceName     128
+#define RAS_MaxDeviceType     16
+#define RAS_MaxEntryName      256
+#define RAS_MaxPhoneNumber    128
+#define RAS_MaxAreaCode       10
+#define RAS_MaxPadType        32
+#define RAS_MaxX25Address     200
+#define RAS_MaxFacilities     200
+#define RAS_MaxUserData       200
+#define RAS_MaxDnsSuffix      256
+
+/* szDeviceType strings for RASDEVINFO */
+#define RASDT_Direct     "direct"
+#define RASDT_Modem      "modem"
+#define RASDT_Isdn       "isdn"
+#define RASDT_X25        "x25"
+#define RASDT_Vpn        "vpn"
+#define RASDT_Pad        "pad"
+#define RASDT_Generic    "GENERIC"
+#define RASDT_Serial     "SERIAL"
+#define RASDT_FrameRelay "FRAMERELAY"
+#define RASDT_Atm        "ATM"
+#define RASDT_Sonet      "SONET"
+#define RASDT_SW56       "SW56"
+#define RASDT_Irda       "IRDA"
+#define RASDT_Parallel   "PARALLEL"
+#define RASDT_PPPoE      "PPPoE"
+
+typedef struct tagRASDEVINFOA {
+    DWORD    dwSize;
+    CHAR     szDeviceType[ RAS_MaxDeviceType + 1 ];
+    CHAR     szDeviceName[ RAS_MaxDeviceName + 1 ];
+} RASDEVINFOA, *LPRASDEVINFOA;
+
+typedef struct tagRASDEVINFOW {
+    DWORD    dwSize;
+    WCHAR    szDeviceType[ RAS_MaxDeviceType + 1 ];
+    WCHAR    szDeviceName[ RAS_MaxDeviceName + 1 ];
+} RASDEVINFOW, *LPRASDEVINFOW;
+
+DECL_WINELIB_TYPE_AW(RASDEVINFO)
+DECL_WINELIB_TYPE_AW(LPRASDEVINFO)
+
+DECLARE_HANDLE(HRASCONN);
+typedef  HRASCONN* LPHRASCONN;
+
+typedef struct tagRASCONNA {
+    DWORD    dwSize;
+    HRASCONN hRasConn;
+    CHAR     szEntryName[ RAS_MaxEntryName + 1 ];
+    CHAR     szDeviceType[ RAS_MaxDeviceType + 1 ];
+    CHAR     szDeviceName[ RAS_MaxDeviceName + 1 ];
+    CHAR     szPhonebook[ MAX_PATH ];
+    DWORD    dwSubEntry;
+    GUID     guidEntry;
+    DWORD    dwFlags;
+    LUID     luid;
+    GUID     guidCorrelationId;
+} RASCONNA,*LPRASCONNA;
+
+typedef struct tagRASCONNW {
+    DWORD    dwSize;
+    HRASCONN hRasConn;
+    WCHAR    szEntryName[ RAS_MaxEntryName + 1 ];
+    WCHAR    szDeviceType[ RAS_MaxDeviceType + 1 ];
+    WCHAR    szDeviceName[ RAS_MaxDeviceName + 1 ];
+    WCHAR    szPhonebook[ MAX_PATH ];
+    DWORD    dwSubEntry;
+    GUID     guidEntry;
+    DWORD    dwFlags;
+    LUID     luid;
+    GUID     guidCorrelationId;
+} RASCONNW,*LPRASCONNW;
+
+DECL_WINELIB_TYPE_AW(RASCONN)
+DECL_WINELIB_TYPE_AW(LPRASCONN)
+
+typedef struct tagRASENTRYNAMEA {
+    DWORD dwSize;
+    CHAR  szEntryName[ RAS_MaxEntryName + 1 ];
+} RASENTRYNAMEA, *LPRASENTRYNAMEA;
+
+typedef struct tagRASENTRYNAMEW {
+    DWORD dwSize;
+    WCHAR szEntryName[ RAS_MaxEntryName + 1 ];
+} RASENTRYNAMEW, *LPRASENTRYNAMEW;
+
+DECL_WINELIB_TYPE_AW(RASENTRYNAME)
+DECL_WINELIB_TYPE_AW(LPRASENTRYNAME)
+
+typedef struct tagRASDIALPARAMSA {
+    DWORD dwSize;
+    CHAR szEntryName[ RAS_MaxEntryName + 1 ];
+    CHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+    CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
+    CHAR szUserName[ UNLEN + 1 ];
+    CHAR szPassword[ PWLEN + 1 ];
+    CHAR szDomain[ DNLEN + 1 ];
+    DWORD dwSubEntry;
+    DWORD dwCallbackId;
+} RASDIALPARAMSA, *LPRASDIALPARAMSA;
+
+typedef struct tagRASDIALPARAMSW {
+    DWORD dwSize;
+    WCHAR szEntryName[ RAS_MaxEntryName + 1 ];
+    WCHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+    WCHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
+    WCHAR szUserName[ UNLEN + 1 ];
+    WCHAR szPassword[ PWLEN + 1 ];
+    WCHAR szDomain[ DNLEN + 1 ];
+    DWORD dwSubEntry;
+    DWORD dwCallbackId;
+} RASDIALPARAMSW, *LPRASDIALPARAMSW;
+
+DECL_WINELIB_TYPE_AW(RASDIALPARAMS)
+DECL_WINELIB_TYPE_AW(LPRASDIALPARAMS)
+
+typedef struct tagRASIPADDR {
+	BYTE classA,classB,classC,classD;
+} RASIPADDR;
+
+#define RASEO_UseCountryAndAreaCodes	0x0001
+#define RASEO_SpecificIpAddr		0x0002
+#define RASEO_SpecificNameServers	0x0004
+#define RASEO_IpHeaderCompression	0x0008
+#define RASEO_RemoteDefaultGateway	0x0010
+#define RASEO_DisableLcpExtensions	0x0020
+#define RASEO_TerminalBeforeDial	0x0040
+#define RASEO_TerminalAfterDial		0x0080
+#define RASEO_ModemLights		0x0100
+#define RASEO_SwCompression		0x0200
+#define RASEO_RequireEncryptedPw	0x0400
+#define RASEO_RequireMsEncryptedPw	0x0800
+#define RASEO_RequireDataEncryption	0x1000
+#define RASEO_NetworkLogon		0x2000
+#define RASEO_UseLogonCredentials	0x4000
+#define RASEO_PromoteAlternates		0x8000
+typedef struct tagRASENTRYA {
+    DWORD dwSize;
+    DWORD dwfOptions;
+
+    /* Location */
+
+    DWORD dwCountryID;
+    DWORD dwCountryCode;
+    CHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
+    CHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+    DWORD dwAlternateOffset;
+
+    /* IP related stuff */
+
+    RASIPADDR ipaddr;
+    RASIPADDR ipaddrDns;
+    RASIPADDR ipaddrDnsAlt;
+    RASIPADDR ipaddrWins;
+    RASIPADDR ipaddrWinsAlt;
+
+    /* Framing (for ppp/isdn etc...) */
+
+    DWORD dwFrameSize;
+    DWORD dwfNetProtocols;
+    DWORD dwFramingProtocol;
+
+    CHAR szScript[ MAX_PATH ];
+
+    CHAR szAutodialDll[ MAX_PATH ];
+    CHAR szAutodialFunc[ MAX_PATH ];
+
+    CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+    CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+
+    /* x25 only */
+
+    CHAR szX25PadType[ RAS_MaxPadType + 1 ];
+    CHAR szX25Address[ RAS_MaxX25Address + 1 ];
+    CHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
+    CHAR szX25UserData[ RAS_MaxUserData + 1 ];
+    DWORD dwChannels;
+
+    DWORD dwReserved1;
+    DWORD dwReserved2;
+
+    /* Multilink and BAP */
+
+    DWORD dwSubEntries;
+    DWORD dwDialMode;
+    DWORD dwDialExtraPercent;
+    DWORD dwDialExtraSampleSeconds;
+    DWORD dwHangUpExtraPercent;
+    DWORD dwHangUpExtraSampleSeconds;
+
+    /* Idle time out */
+    DWORD dwIdleDisconnectSeconds;
+
+    DWORD dwType;		/* entry type */
+    DWORD dwEncryptionType;	/* type of encryption to use */
+    DWORD dwCustomAuthKey;	/* authentication key for EAP */
+    GUID guidId;		/* guid that represents the phone-book entry  */
+    CHAR szCustomDialDll[MAX_PATH];    /* DLL for custom dialing  */
+    DWORD dwVpnStrategy;         /* specifies type of VPN protocol */
+
+    DWORD dwfOptions2;
+    DWORD dwfOptions3;
+    CHAR szDnsSuffix[RAS_MaxDnsSuffix];
+    DWORD dwTcpWindowSize;
+    CHAR szPrerequisitePbk[MAX_PATH];
+    CHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
+    DWORD dwRedialCount;
+    DWORD dwRedialPause;
+} RASENTRYA, *LPRASENTRYA;
+
+typedef struct tagRASENTRYW {
+    DWORD dwSize;
+    DWORD dwfOptions;
+
+    /* Location */
+
+    DWORD dwCountryID;
+    DWORD dwCountryCode;
+    WCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
+    WCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+    DWORD dwAlternateOffset;
+
+    /* IP related stuff */
+
+    RASIPADDR ipaddr;
+    RASIPADDR ipaddrDns;
+    RASIPADDR ipaddrDnsAlt;
+    RASIPADDR ipaddrWins;
+    RASIPADDR ipaddrWinsAlt;
+
+    /* Framing (for ppp/isdn etc...) */
+
+    DWORD dwFrameSize;
+    DWORD dwfNetProtocols;
+    DWORD dwFramingProtocol;
+
+    WCHAR szScript[ MAX_PATH ];
+
+    WCHAR szAutodialDll[ MAX_PATH ];
+    WCHAR szAutodialFunc[ MAX_PATH ];
+
+    WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+    WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+
+    /* x25 only */
+
+    WCHAR szX25PadType[ RAS_MaxPadType + 1 ];
+    WCHAR szX25Address[ RAS_MaxX25Address + 1 ];
+    WCHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
+    WCHAR szX25UserData[ RAS_MaxUserData + 1 ];
+    DWORD dwChannels;
+
+    DWORD dwReserved1;
+    DWORD dwReserved2;
+
+    /* Multilink and BAP */
+
+    DWORD dwSubEntries;
+    DWORD dwDialMode;
+    DWORD dwDialExtraPercent;
+    DWORD dwDialExtraSampleSeconds;
+    DWORD dwHangUpExtraPercent;
+    DWORD dwHangUpExtraSampleSeconds;
+
+    /* Idle time out */
+    DWORD dwIdleDisconnectSeconds;
+
+    DWORD dwType;		/* entry type */
+    DWORD dwEncryptionType;	/* type of encryption to use */
+    DWORD dwCustomAuthKey;	/* authentication key for EAP */
+    GUID guidId;		/* guid that represents the phone-book entry  */
+    WCHAR szCustomDialDll[MAX_PATH];    /* DLL for custom dialing  */
+    DWORD dwVpnStrategy;         /* specifies type of VPN protocol */
+
+    DWORD dwfOptions2;
+    DWORD dwfOptions3;
+    WCHAR szDnsSuffix[RAS_MaxDnsSuffix];
+    DWORD dwTcpWindowSize;
+    WCHAR szPrerequisitePbk[MAX_PATH];
+    WCHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
+    DWORD dwRedialCount;
+    DWORD dwRedialPause;
+} RASENTRYW, *LPRASENTRYW;
+
+DECL_WINELIB_TYPE_AW(RASENTRY)
+
+#define RASCS_PAUSED 0x1000
+#define RASCS_DONE   0x2000
+typedef enum tagRASCONNSTATE
+{
+      RASCS_OpenPort = 0,
+      RASCS_PortOpened,
+      RASCS_ConnectDevice,
+      RASCS_DeviceConnected,
+      RASCS_AllDevicesConnected,
+      RASCS_Authenticate,
+      RASCS_AuthNotify,
+      RASCS_AuthRetry,
+      RASCS_AuthCallback,
+      RASCS_AuthChangePassword,
+      RASCS_AuthProject,
+      RASCS_AuthLinkSpeed,
+      RASCS_AuthAck,
+      RASCS_ReAuthenticate,
+      RASCS_Authenticated,
+      RASCS_PrepareForCallback,
+      RASCS_WaitForModemReset,
+      RASCS_WaitForCallback,
+      RASCS_Projected,
+      RASCS_StartAuthentication,
+      RASCS_CallbackComplete,
+      RASCS_LogonNetwork,
+      RASCS_SubEntryConnected,
+      RASCS_SubEntryDisconnected,
+      RASCS_Interactive = RASCS_PAUSED,
+      RASCS_RetryAuthentication,
+      RASCS_CallbackSetByCaller,
+      RASCS_PasswordExpired,
+      RASCS_Connected = RASCS_DONE,
+      RASCS_Disconnected
+}  RASCONNSTATE, *LPRASCONNSTATE;
+
+typedef struct tagRASCONNSTATUSA
+{
+    DWORD dwSize;
+    RASCONNSTATE rasconnstate;
+    DWORD dwError;
+    CHAR szDeviceType[RAS_MaxDeviceType + 1];
+    CHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUSA, *LPRASCONNSTATUSA;
+
+typedef struct tagRASCONNSTATUSW
+{
+    DWORD dwSize;
+    RASCONNSTATE rasconnstate;
+    DWORD dwError;
+    WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+    WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUSW, *LPRASCONNSTATUSW;
+
+DECL_WINELIB_TYPE_AW(RASCONNSTATUS)
+
+typedef enum tagRASPROJECTION
+{
+    RASP_Amb =    0x10000,
+    RASP_PppNbf = 0x803F,
+    RASP_PppIpx = 0x802B,
+    RASP_PppIp =  0x8021,
+    RASP_PppLcp = 0xC021,
+    RASP_Slip =   0x20000
+} RASPROJECTION, *LPRASPROJECTION;
+
+typedef struct tagRASSUBENTRYA
+{
+    DWORD dwSize;
+    DWORD dwfFlags;
+    CHAR szDeviceType[RAS_MaxDeviceType + 1];
+    CHAR szDeviceName[RAS_MaxDeviceName + 1];
+    CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+    DWORD dwAlternateOffset;
+} RASSUBENTRYA, *LPRASSUBENTRYA;
+
+typedef struct tagRASSUBENTRYW
+{
+    DWORD dwSize;
+    DWORD dwfFlags;
+    WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+    WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+    WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+    DWORD dwAlternateOffset;
+} RASSUBENTRYW, *LPRASSUBENTRYW;
+
+typedef struct tagRASDIALEXTENSIONS
+{
+    DWORD dwSize;
+    DWORD dwfOptions;
+    HWND hwndParent;
+    ULONG_PTR reserved;
+} RASDIALEXTENSIONS, *LPRASDIALEXTENSIONS;
+
+typedef struct tagRASAUTODIALENTRYA
+{
+    DWORD dwSize;
+    DWORD dwFlags;
+    DWORD dwDialingLocation;
+    CHAR  szEntry[ RAS_MaxEntryName + 1 ];
+} RASAUTODIALENTRYA, *LPRASAUTODIALENTRYA;
+
+typedef struct tagRASAUTODIALENTRYW
+{
+    DWORD dwSize;
+    DWORD dwFlags;
+    DWORD dwDialingLocation;
+    WCHAR szEntry[ RAS_MaxEntryName + 1 ];
+} RASAUTODIALENTRYW, *LPRASAUTODIALENTRYW;
+
+
+DWORD WINAPI RasConnectionNotificationA(HRASCONN,HANDLE,DWORD);
+DWORD WINAPI RasConnectionNotificationW(HRASCONN,HANDLE,DWORD);
+#define      RasConnectionNotification WINELIB_NAME_AW(RasConnectionNotification)
+DWORD WINAPI RasCreatePhonebookEntryA(HWND,LPCSTR);
+DWORD WINAPI RasCreatePhonebookEntryW(HWND,LPCWSTR);
+#define      RasCreatePhonebookEntry WINELIB_NAME_AW(RasCreatePhonebookEntry)
+DWORD WINAPI RasDeleteEntryA(LPCSTR,LPCSTR);
+DWORD WINAPI RasDeleteEntryW(LPCWSTR,LPCWSTR);
+#define      RasDeleteEntry WINELIB_NAME_AW(RasDeleteEntry)
+DWORD WINAPI RasDeleteSubEntryA(LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI RasDeleteSubEntryW(LPCWSTR,LPCWSTR,DWORD);
+#define      RasDeleteSubEntry WINELIB_NAME_AW(RasDeleteSubEntry)
+DWORD WINAPI RasDialA(LPRASDIALEXTENSIONS,LPCSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN);
+DWORD WINAPI RasDialW(LPRASDIALEXTENSIONS,LPCWSTR,LPRASDIALPARAMSW,DWORD,LPVOID,LPHRASCONN);
+#define      RasDial WINELIB_NAME_AW(RasDial)
+DWORD WINAPI RasEditPhonebookEntryA(HWND,LPCSTR,LPCSTR);
+DWORD WINAPI RasEditPhonebookEntryW(HWND,LPCWSTR,LPCWSTR);
+#define      RasEditPhonebookEntry WINELIB_NAME_AW(RasEditPhonebookEntry)
+DWORD WINAPI RasEnumAutodialAddressesA(LPSTR*,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumAutodialAddressesW(LPWSTR*,LPDWORD,LPDWORD);
+#define      RasEnumAutodialAddresses WINELIB_NAME_AW(RasEnumAutodialAddresses)
+DWORD WINAPI RasEnumConnectionsA(LPRASCONNA,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumConnectionsW(LPRASCONNW,LPDWORD,LPDWORD);
+#define      RasEnumConnections WINELIB_NAME_AW(RasEnumConnections)
+DWORD WINAPI RasEnumDevicesA(LPRASDEVINFOA,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumDevicesW(LPRASDEVINFOW,LPDWORD,LPDWORD);
+#define      RasEnumDevices WINELIB_NAME_AW(RasEnumDevices)
+DWORD WINAPI RasEnumEntriesA(LPCSTR,LPCSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumEntriesW(LPCWSTR,LPCWSTR,LPRASENTRYNAMEW,LPDWORD,LPDWORD);
+#define      RasEnumEntries WINELIB_NAME_AW(RasEnumEntries)
+DWORD WINAPI RasGetAutodialAddressA(LPCSTR,LPDWORD,LPRASAUTODIALENTRYA,LPDWORD,LPDWORD);
+DWORD WINAPI RasGetAutodialAddressW(LPCWSTR,LPDWORD,LPRASAUTODIALENTRYW,LPDWORD,LPDWORD);
+#define      RasGetAutodialAddresses WINELIB_NAME_AW(RasGetAutodialAddresses)
+DWORD WINAPI RasGetAutodialEnableA(DWORD,LPBOOL);
+DWORD WINAPI RasGetAutodialEnableW(DWORD,LPBOOL);
+#define      RasGetAutodialEnable WINELIB_NAME_AW(RasGetAutodialEnable)
+DWORD WINAPI RasGetAutodialParamA(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue);
+DWORD WINAPI RasGetAutodialParamW(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue);
+#define RasGetAutodialParam WINELIB_NAME_AW(RasGetAutodialParam)
+DWORD WINAPI RasGetConnectStatusA(HRASCONN,LPRASCONNSTATUSA);
+DWORD WINAPI RasGetConnectStatusW(HRASCONN,LPRASCONNSTATUSW);
+#define      RasGetConnectStatus WINELIB_NAME_AW(RasGetConnectStatus)
+DWORD WINAPI RasGetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,LPBOOL);
+DWORD WINAPI RasGetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,LPBOOL);
+#define      RasGetEntryDialParams WINELIB_NAME_AW(RasGetEntryDialParams)
+DWORD WINAPI RasGetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,LPDWORD,LPBYTE,LPDWORD);
+DWORD WINAPI RasGetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,LPDWORD,LPBYTE,LPDWORD);
+#define      RasGetEntryProperties WINELIB_NAME_AW(RasGetEntryProperties)
+DWORD WINAPI RasGetErrorStringA(UINT,LPSTR,DWORD);
+DWORD WINAPI RasGetErrorStringW(UINT,LPWSTR,DWORD);
+#define      RasGetErrorString WINELIB_NAME_AW(RasGetErrorString)
+DWORD WINAPI RasGetProjectionInfoA(HRASCONN,RASPROJECTION,LPVOID,LPDWORD);
+DWORD WINAPI RasGetProjectionInfoW(HRASCONN,RASPROJECTION,LPVOID,LPDWORD);
+#define      RasGetProjectionInfo WINELIB_NAME_AW(RasGetProjectionInfo)
+DWORD WINAPI RasHangUpA(HRASCONN);
+DWORD WINAPI RasHangUpW(HRASCONN);
+#define      RasHangUp WINELIB_NAME_AW(RasHangUp)
+DWORD WINAPI RasRenameEntryA(LPCSTR,LPCSTR,LPCSTR);
+DWORD WINAPI RasRenameEntryW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define      RasRenameEntry WINELIB_NAME_AW(RasRenameEntry)
+DWORD WINAPI RasSetAutodialAddressA(LPCSTR,DWORD,LPRASAUTODIALENTRYA,DWORD,DWORD);
+DWORD WINAPI RasSetAutodialAddressW(LPCWSTR,DWORD,LPRASAUTODIALENTRYW,DWORD,DWORD);
+#define      RasSetAutodialAddress WINELIB_NAME_AW(RasSetAutodialAddress)
+DWORD WINAPI RasSetAutodialParamA(DWORD,LPVOID,DWORD);
+DWORD WINAPI RasSetAutodialParamW(DWORD,LPVOID,DWORD);
+#define      RasSetAutodialParam WINELIB_NAME_AW(RasSetAutodialParam)
+DWORD WINAPI RasSetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,BOOL);
+DWORD WINAPI RasSetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,BOOL);
+#define      RasSetEntryDialParams WINELIB_NAME_AW(RasSetEntryDialParams)
+DWORD WINAPI RasSetSubEntryPropertiesA(LPCSTR,LPCSTR,DWORD,LPRASSUBENTRYA,DWORD,LPBYTE,DWORD);
+DWORD WINAPI RasSetSubEntryPropertiesW(LPCWSTR,LPCWSTR,DWORD,LPRASSUBENTRYW,DWORD,LPBYTE,DWORD);
+#define      RasSetSubEntryProperties WINELIB_NAME_AW(RasSetSubEntryProperties)
+DWORD WINAPI RasValidateEntryNameA(LPCSTR  lpszPhonebook, LPCSTR  lpszEntry);
+DWORD WINAPI RasValidateEntryNameW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry);
+#define RasValidateEntryName WINELIB_NAME_AW(RasValidateEntryName)
+DWORD WINAPI RasSetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,DWORD,LPBYTE,DWORD);
+DWORD WINAPI RasSetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,DWORD,LPBYTE,DWORD);
+#define RasSetEntryProperties WINELIB_NAME_AW(RasSetEntryProperties)
+DWORD WINAPI RasSetAutodialEnableA(DWORD dwDialingLocation, BOOL fEnabled);
+DWORD WINAPI RasSetAutodialEnableW(DWORD dwDialingLocation, BOOL fEnabled);
+#define RasSetAutodialEnable WINELIB_NAME_AW(RasSetAutodialEnable)
+
+#include <poppack.h>
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h
new file mode 100644
index 0000000..c1f7bb9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <ras.h>
+
+typedef struct tagRASENTRYDLGW
+{
+    DWORD dwSize;
+    HWND  hwndOwner;
+    DWORD dwFlags;
+    LONG  xDlg;
+    LONG  yDlg;
+    WCHAR szEntry[ RAS_MaxEntryName + 1 ];
+    DWORD dwError;
+    ULONG_PTR reserved;
+    ULONG_PTR reserved2;
+} RASENTRYDLGW;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h
new file mode 100644
index 0000000..91963fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 Stefan Leichter
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RASERROR_H
+#define __WINE_RASERROR_H
+
+#define RASBASE                                600
+#define ERROR_BUFFER_TOO_SMALL                 (RASBASE+3)
+#define ERROR_BUFFER_INVALID                   (RASBASE+10)
+#define ERROR_INVALID_SIZE                     (RASBASE+32)
+#define ERROR_STATE_MACHINES_NOT_STARTED       (RASBASE+95)
+#define ERROR_RASMAN_CANNOT_INITIALIZE         (RASBASE+111)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h
new file mode 100644
index 0000000..f60dbff
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h
@@ -0,0 +1,84 @@
+/*
+ * ExitWindowsEx() reason codes
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_REASON_H
+#define __WINE_REASON_H
+
+
+#define SHTDN_REASON_FLAG_USER_DEFINED            0x40000000
+#define SHTDN_REASON_FLAG_PLANNED                 0x80000000
+
+#define SHTDN_REASON_MAJOR_OTHER                  0x00000000
+#define SHTDN_REASON_MAJOR_NONE                   0x00000000
+#define SHTDN_REASON_MAJOR_HARDWARE               0x00010000
+#define SHTDN_REASON_MAJOR_OPERATINGSYSTEM        0x00020000
+#define SHTDN_REASON_MAJOR_SOFTWARE               0x00030000
+#define SHTDN_REASON_MAJOR_APPLICATION            0x00040000
+#define SHTDN_REASON_MAJOR_SYSTEM                 0x00050000
+#define SHTDN_REASON_MAJOR_POWER                  0x00060000
+#define SHTDN_REASON_MAJOR_LEGACY_API             0x00070000
+
+#define SHTDN_REASON_MINOR_OTHER                  0x00000000
+#define SHTDN_REASON_MINOR_MAINTENANCE            0x00000001
+#define SHTDN_REASON_MINOR_INSTALLATION           0x00000002
+#define SHTDN_REASON_MINOR_UPGRADE                0x00000003
+#define SHTDN_REASON_MINOR_RECONFIG               0x00000004
+#define SHTDN_REASON_MINOR_HUNG                   0x00000005
+#define SHTDN_REASON_MINOR_UNSTABLE               0x00000006
+#define SHTDN_REASON_MINOR_DISK                   0x00000007
+#define SHTDN_REASON_MINOR_PROCESSOR              0x00000008
+#define SHTDN_REASON_MINOR_NETWORKCARD            0x00000009
+#define SHTDN_REASON_MINOR_POWER_SUPPLY           0x0000000a
+#define SHTDN_REASON_MINOR_CORDUNPLUGGED          0x0000000b
+#define SHTDN_REASON_MINOR_ENVIRONMENT            0x0000000c
+#define SHTDN_REASON_MINOR_HARDWARE_DRIVER        0x0000000d
+#define SHTDN_REASON_MINOR_OTHERDRIVER            0x0000000e
+#define SHTDN_REASON_MINOR_BLUESCREEN             0x0000000f
+#define SHTDN_REASON_MINOR_SERVICEPACK            0x00000010
+#define SHTDN_REASON_MINOR_HOTFIX                 0x00000011
+#define SHTDN_REASON_MINOR_SECURITYFIX            0x00000012
+#define SHTDN_REASON_MINOR_SECURITY               0x00000013
+#define SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY   0x00000014
+#define SHTDN_REASON_MINOR_WMI                    0x00000015
+#define SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL  0x00000016
+#define SHTDN_REASON_MINOR_HOTFIX_UNINSTALL       0x00000017
+#define SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL  0x00000018
+#define SHTDN_REASON_MINOR_MMC                    0x00000019
+#define SHTDN_REASON_MINOR_SYSTEMRESTORE          0x0000001a
+#define SHTDN_REASON_MINOR_TERMSRV                0x00000020
+#define SHTDN_REASON_MINOR_DC_PROMOTION           0x00000021
+#define SHTDN_REASON_MINOR_DC_DEMOTION            0x00000022
+#define SHTDN_REASON_MINOR_NONE                   0x000000ff
+
+#define SHTDN_REASON_VALID_BIT_MASK               0xc0ffffff
+
+#define SHTDN_REASON_UNKNOWN                      SHTDN_REASON_MINOR_NONE
+#define SHTDN_REASON_LEGACY_API                   (SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h
new file mode 100644
index 0000000..522ec69
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h
@@ -0,0 +1,42 @@
+/*
+ * Win32 registry string defines (see also winnt.h)
+ *
+ * Copyright (C) 2000 Andreas Mohr
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_REGSTR
+#define _INC_REGSTR
+
+
+#define REGSTR_PATH_UNINSTALL			TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
+
+/* DisplayName <= 32 chars in Windows (otherwise not displayed for uninstall) */
+#define REGSTR_VAL_UNINSTALLER_DISPLAYNAME	TEXT("DisplayName")
+/* UninstallString <= 63 chars in Windows (otherwise problems) */
+#define REGSTR_VAL_UNINSTALLER_COMMANDLINE	TEXT("UninstallString")
+
+
+#endif  /* _INC_REGSTR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h
new file mode 100644
index 0000000..8e5975f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 Austin English
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef RESTARTMANAGER_H
+#define RESTARTMANAGER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CCH_RM_MAX_APP_NAME 255
+#define CH_RM_MAX_SVC_NAME 63
+
+typedef enum  {
+    RmUnknownApp = 0,
+    RmMainWindow = 1,
+    RmOtherWindow = 2,
+    RmService = 3,
+    RmExplorer = 4,
+    RmConsole = 5,
+    RmCritical = 1000
+} RM_APP_TYPE;
+
+typedef struct {
+    DWORD dwProcessId;
+    FILETIME ProcessStartTime;
+} RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
+
+typedef struct {
+    RM_UNIQUE_PROCESS Process;
+    WCHAR strAppName[CCH_RM_MAX_APP_NAME+1];
+    WCHAR strServiceShortName[CH_RM_MAX_SVC_NAME+1];
+    RM_APP_TYPE ApplicationType;
+    ULONG AppStatus;
+    DWORD TSSessionID;
+    BOOL bRestartable;
+} RM_PROCESS_INFO, *PRM_PROCESS_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RESTARTMANAGER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h
new file mode 100644
index 0000000..3a846b6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h
@@ -0,0 +1,1088 @@
+/*
+ * Copyright (C) 2000 Jean-Claude Batista
+ * Copyright (C) 2002 Andriy Palamarchuk
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RICHEDIT_H
+#define __WINE_RICHEDIT_H
+
+#include <pshpack4.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _RICHEDIT_VER
+#define _RICHEDIT_VER   0x0210
+#endif /* _RICHEDIT_VER */
+
+#define cchTextLimitDefault 0x7fff
+
+#if defined(__GNUC__)
+# define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 }
+#elif defined(_MSC_VER)
+# define MSFTEDIT_CLASS L"RichEdit50W"
+#else
+static const WCHAR MSFTEDIT_CLASS[] = { 'R','i','c','h','E','d','i','t','5','0','W',0 };
+#endif
+
+#define RICHEDIT_CLASS20A	"RichEdit20A"
+#if defined(__GNUC__)
+# define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 }
+#elif defined(_MSC_VER)
+# define RICHEDIT_CLASS20W      L"RichEdit20W"
+#else
+static const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 };
+#endif
+#define RICHEDIT_CLASS10A	"RICHEDIT"
+
+#if (_RICHEDIT_VER >= 0x0200 )
+#define RICHEDIT_CLASS		WINELIB_NAME_AW(RICHEDIT_CLASS20)
+#else
+#define RICHEDIT_CLASS		RICHEDIT_CLASS10A
+#endif
+
+#ifndef WM_NOTIFY
+#define WM_NOTIFY               0x004e
+#endif
+#ifndef WM_CONTEXTMENU
+#define WM_CONTEXTMENU          0x007b
+#endif
+#ifndef WM_UNICHAR
+#define WM_UNICHAR              0x0109
+#endif
+#ifndef WM_PRINTCLIENT
+#define WM_PRINTCLIENT          0x0318
+#endif
+
+#ifndef EM_GETLIMITTEXT
+#define EM_GETLIMITTEXT         (WM_USER + 37)
+#endif
+#ifndef EM_POSFROMCHAR
+#define EM_POSFROMCHAR          (WM_USER + 38)
+#define EM_CHARFROMPOS          (WM_USER + 39)
+#endif
+#ifndef EM_SCROLLCARET
+#define EM_SCROLLCARET		(WM_USER + 49)
+#endif
+#define EM_CANPASTE		(WM_USER + 50)
+#define EM_DISPLAYBAND		(WM_USER + 51)
+#define EM_EXGETSEL		(WM_USER + 52)
+#define EM_EXLIMITTEXT		(WM_USER + 53)
+#define EM_EXLINEFROMCHAR	(WM_USER + 54)
+#define EM_EXSETSEL		(WM_USER + 55)
+#define EM_FINDTEXT		(WM_USER + 56)
+#define EM_FORMATRANGE		(WM_USER + 57)
+#define EM_GETCHARFORMAT	(WM_USER + 58)
+#define EM_GETEVENTMASK		(WM_USER + 59)
+#define EM_GETOLEINTERFACE	(WM_USER + 60)
+#define EM_GETPARAFORMAT	(WM_USER + 61)
+#define EM_GETSELTEXT		(WM_USER + 62)
+#define EM_HIDESELECTION	(WM_USER + 63)
+#define EM_PASTESPECIAL		(WM_USER + 64)
+#define EM_REQUESTRESIZE	(WM_USER + 65)
+#define EM_SELECTIONTYPE	(WM_USER + 66)
+#define EM_SETBKGNDCOLOR	(WM_USER + 67)
+#define EM_SETCHARFORMAT	(WM_USER + 68)
+#define EM_SETEVENTMASK		(WM_USER + 69)
+#define EM_SETOLECALLBACK	(WM_USER + 70)
+#define EM_SETPARAFORMAT	(WM_USER + 71)
+#define EM_SETTARGETDEVICE	(WM_USER + 72)
+#define EM_STREAMIN		(WM_USER + 73)
+#define EM_STREAMOUT		(WM_USER + 74)
+#define EM_GETTEXTRANGE		(WM_USER + 75)
+#define EM_FINDWORDBREAK	(WM_USER + 76)
+#define EM_SETOPTIONS		(WM_USER + 77)
+#define EM_GETOPTIONS		(WM_USER + 78)
+#define EM_FINDTEXTEX		(WM_USER + 79)
+#define EM_GETWORDBREAKPROCEX	(WM_USER + 80)
+#define EM_SETWORDBREAKPROCEX	(WM_USER + 81)
+
+#define EM_SETUNDOLIMIT		(WM_USER + 82)
+#define EM_REDO			(WM_USER + 84)
+#define EM_CANREDO		(WM_USER + 85)
+#define EM_GETUNDONAME		(WM_USER + 86)
+#define EM_GETREDONAME		(WM_USER + 87)
+#define EM_STOPGROUPTYPING	(WM_USER + 88)
+
+#define EM_SETTEXTMODE		(WM_USER + 89)
+#define EM_GETTEXTMODE		(WM_USER + 90)
+#define EM_AUTOURLDETECT	(WM_USER + 91)
+#define EM_GETAUTOURLDETECT	(WM_USER + 92)
+#define EM_SETPALETTE		(WM_USER + 93)
+#define EM_GETTEXTEX		(WM_USER + 94)
+#define EM_GETTEXTLENGTHEX	(WM_USER + 95)
+#define EM_SHOWSCROLLBAR	(WM_USER + 96)
+#define EM_SETTEXTEX		(WM_USER + 97)
+
+#define EM_SETPUNCTUATION	(WM_USER + 100)
+#define EM_GETPUNCTUATION	(WM_USER + 101)
+#define EM_SETWORDWRAPMODE	(WM_USER + 102)
+#define EM_GETWORDWRAPMODE	(WM_USER + 103)
+#define EM_SETIMECOLOR		(WM_USER + 104)
+#define EM_GETIMECOLOR		(WM_USER + 105)
+#define EM_SETIMEOPTIONS	(WM_USER + 106)
+#define EM_GETIMEOPTIONS	(WM_USER + 107)
+#define EM_CONVPOSITION		(WM_USER + 108)
+
+#define EM_SETLANGOPTIONS	(WM_USER + 120)
+#define EM_GETLANGOPTIONS	(WM_USER + 121)
+#define EM_GETIMECOMPMODE	(WM_USER + 122)
+
+#define EM_FINDTEXTW		(WM_USER + 123)
+#define EM_FINDTEXTEXW		(WM_USER + 124)
+
+#define EM_RECONVERSION		(WM_USER + 125)
+#define EM_SETIMEMODEBIAS	(WM_USER + 126)
+#define EM_GETIMEMODEBIAS	(WM_USER + 127)
+
+#define EM_SETBIDIOPTIONS	(WM_USER + 200)
+#define EM_GETBIDIOPTIONS	(WM_USER + 201)
+
+#define EM_SETTYPOGRAPHYOPTIONS (WM_USER + 202)
+#define EM_GETTYPOGRAPHYOPTIONS (WM_USER + 203)
+
+#define EM_SETEDITSTYLE		(WM_USER + 204)
+#define EM_GETEDITSTYLE		(WM_USER + 205)
+
+#define EM_OUTLINE              (WM_USER + 220)
+
+#define EM_GETSCROLLPOS         (WM_USER + 221)
+#define EM_SETSCROLLPOS         (WM_USER + 222)
+
+#define EM_SETFONTSIZE          (WM_USER + 223)
+#define EM_GETZOOM		(WM_USER + 224)
+#define EM_SETZOOM		(WM_USER + 225)
+#define EM_GETVIEWKIND          (WM_USER + 226)
+#define EM_SETVIEWKIND          (WM_USER + 227)
+
+#define EM_GETPAGE              (WM_USER + 228)
+#define EM_SETPAGE              (WM_USER + 229)
+#define EM_GETHYPHENATEINFO     (WM_USER + 230)
+#define EM_SETHYPHENATEINFO     (WM_USER + 231)
+#define EM_GETPAGEROTATE        (WM_USER + 235)
+#define EM_SETPAGEROTATE        (WM_USER + 236)
+#define EM_GETCTFMODEBIAS       (WM_USER + 237)
+#define EM_SETCTFMODEBIAS       (WM_USER + 238)
+#define EM_GETCTFOPENSTATUS     (WM_USER + 240)
+#define EM_SETCTFOPENSTATUS     (WM_USER + 241)
+#define EM_GETIMECOMPTEXT       (WM_USER + 242)
+#define EM_ISIME                (WM_USER + 243)
+#define EM_GETIMEPROPERTY       (WM_USER + 244)
+#define EM_GETQUERYRTFOBJ       (WM_USER + 269)
+#define EM_SETQUERYRTFOBJ       (WM_USER + 270)
+
+/* New notifications */
+#define EN_MSGFILTER                    0x0700
+#define EN_REQUESTRESIZE                0x0701
+#define EN_SELCHANGE                    0x0702
+#define EN_DROPFILES                    0x0703
+#define EN_PROTECTED                    0x0704
+#define EN_CORRECTTEXT                  0x0705
+#define EN_STOPNOUNDO                   0x0706
+#define EN_IMECHANGE                    0x0707
+#define EN_SAVECLIPBOARD                0x0708
+#define EN_OLEOPFAILED                  0x0709
+#define EN_OBJECTPOSITIONS              0x070a
+#define EN_LINK				0x070b
+#define EN_DRAGDROPDONE                 0x070c
+#define EN_PARAGRAPHEXPANDED		0x070d
+#define EN_PAGECHANGE                   0x070e
+#define EN_LOWFIRTF                     0x070f
+#define EN_ALIGNLTR			0x0710
+#define EN_ALIGNRTL			0x0711
+
+
+typedef DWORD (CALLBACK * EDITSTREAMCALLBACK)( DWORD_PTR, LPBYTE, LONG, LONG * );
+
+
+#define yHeightCharPtsMost    1638
+#define lDefaultTab           720
+
+/* tab stops number limit */
+#define MAX_TAB_STOPS         0x00000020
+
+#define MAX_TABLE_CELLS       63
+
+/* Rich edit control styles */
+#define ES_NOOLEDRAGDROP      0x00000008
+#define ES_DISABLENOSCROLL    0x00002000
+#define ES_SUNKEN             0x00004000
+#define ES_SAVESEL            0x00008000
+#define ES_SELFIME            0x00040000
+#define ES_NOIME              0x00080000
+#define ES_VERTICAL           0x00400000
+#define ES_SELECTIONBAR       0x01000000
+#define ES_EX_NOCALLOLEINIT   0x01000000
+
+/* the character formatting options */
+#define SCF_DEFAULT           0x00000000
+#define SCF_SELECTION         0x00000001
+#define SCF_WORD              0x00000002
+#define SCF_ALL               0x00000004
+#define SCF_USEUIRULES        0x00000008
+#define SCF_ASSOCIATEFONT     0x00000010
+#define SCF_NOKBUPDATE        0x00000020
+#define SCF_ASSOCIATEFONT2    0x00000040
+
+#ifndef WM_NOTIFY
+typedef struct _nmhdr
+{
+    HWND       hwndFrom;
+    UINT       idFrom;
+    UINT       code;
+} NMHDR;
+#endif
+
+/* CHARFORMAT structure */
+typedef struct _charformat
+{
+    UINT       cbSize;
+    DWORD      dwMask;
+    DWORD      dwEffects;
+    LONG       yHeight;
+    LONG       yOffset;
+    COLORREF   crTextColor;
+    BYTE       bCharSet;
+    BYTE       bPitchAndFamily;
+    char       szFaceName[LF_FACESIZE];
+} CHARFORMATA;
+
+typedef struct _charformatw
+{
+    UINT       cbSize;
+    DWORD      dwMask;
+    DWORD      dwEffects;
+    LONG       yHeight;
+    LONG       yOffset;
+    COLORREF   crTextColor;
+    BYTE       bCharSet;
+    BYTE       bPitchAndFamily;
+    WCHAR      szFaceName[LF_FACESIZE];
+} CHARFORMATW;
+
+DECL_WINELIB_TYPE_AW(CHARFORMAT)
+
+typedef struct _charformat2a {
+    UINT       cbSize;
+    DWORD      dwMask;
+    DWORD      dwEffects;
+    LONG       yHeight;
+    LONG       yOffset;
+    COLORREF   crTextColor;
+    BYTE       bCharSet;
+    BYTE       bPitchAndFamily;
+    char       szFaceName[LF_FACESIZE];
+    WORD       wWeight;
+    SHORT      sSpacing;
+    COLORREF   crBackColor;
+    LCID       lcid;
+    DWORD      dwReserved;
+    SHORT      sStyle;
+    WORD       wKerning;
+    BYTE       bUnderlineType;
+    BYTE       bAnimation;
+    BYTE       bRevAuthor;
+} CHARFORMAT2A;
+
+typedef struct _charformat2w {
+    UINT       cbSize;
+    DWORD      dwMask;
+    DWORD      dwEffects;
+    LONG       yHeight;
+    LONG       yOffset;
+    COLORREF   crTextColor;
+    BYTE       bCharSet;
+    BYTE       bPitchAndFamily;
+    WCHAR      szFaceName[LF_FACESIZE];
+    WORD       wWeight;
+    SHORT      sSpacing;
+    COLORREF   crBackColor;
+    LCID       lcid;
+    DWORD      dwReserved;
+    SHORT      sStyle;
+    WORD       wKerning;
+    BYTE       bUnderlineType;
+    BYTE       bAnimation;
+    BYTE       bRevAuthor;
+} CHARFORMAT2W;
+
+DECL_WINELIB_TYPE_AW(CHARFORMAT2)
+
+#define CHARFORMATDELTA       (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))
+
+/* CHARFORMAT masks */
+#define CFM_BOLD              0x00000001
+#define CFM_ITALIC            0x00000002
+#define CFM_UNDERLINE         0x00000004
+#define CFM_STRIKEOUT         0x00000008
+#define CFM_PROTECTED         0x00000010
+#define CFM_LINK              0x00000020
+#define CFM_SMALLCAPS         0x00000040
+#define CFM_ALLCAPS           0x00000080
+#define CFM_HIDDEN            0x00000100
+#define CFM_OUTLINE           0x00000200
+#define CFM_SHADOW            0x00000400
+#define CFM_EMBOSS            0x00000800
+#define CFM_IMPRINT           0x00001000
+#define CFM_DISABLED          0x00002000
+#define CFM_REVISED           0x00004000
+#define CFM_REVAUTHOR         0x00008000
+#define CFM_SUBSCRIPT         0x00030000
+#define CFM_SUPERSCRIPT       0x00030000
+#define CFM_ANIMATION         0x00040000
+#define CFM_STYLE             0x00080000
+#define CFM_KERNING           0x00100000
+#define CFM_SPACING           0x00200000
+#define CFM_WEIGHT            0x00400000
+#define CFM_UNDERLINETYPE     0x00800000
+#define CFM_LCID              0x02000000
+#define CFM_BACKCOLOR         0x04000000
+#define CFM_CHARSET           0x08000000
+#define CFM_OFFSET            0x10000000
+#define CFM_FACE              0x20000000
+#define CFM_COLOR             0x40000000
+#define CFM_SIZE              0x80000000
+
+#define CFM_EFFECTS           (CFM_BOLD | \
+                               CFM_ITALIC | \
+                               CFM_UNDERLINE | \
+                               CFM_COLOR | \
+                               CFM_STRIKEOUT | \
+                               CFE_PROTECTED | \
+                               CFM_LINK)
+
+#define CFM_EFFECTS2          (CFM_EFFECTS | \
+                               CFM_DISABLED | \
+                               CFM_SMALLCAPS | \
+                               CFM_ALLCAPS | \
+                               CFM_HIDDEN | \
+                               CFM_OUTLINE | \
+                               CFM_SHADOW | \
+                               CFM_EMBOSS | \
+                               CFM_IMPRINT | \
+                               CFM_DISABLED | \
+                               CFM_REVISED | \
+                               CFM_SUBSCRIPT | \
+                               CFM_SUPERSCRIPT | \
+                               CFM_BACKCOLOR)
+
+#define CFM_ALL               (CFM_EFFECTS | \
+                               CFM_SIZE | \
+                               CFM_FACE | \
+                               CFM_OFFSET | \
+                               CFM_CHARSET)
+
+#define CFM_ALL2              (CFM_ALL | \
+                               CFM_EFFECTS2 | \
+                               CFM_BACKCOLOR | \
+                               CFM_LCID | \
+                               CFM_UNDERLINETYPE | \
+                               CFM_WEIGHT | \
+                               CFM_REVAUTHOR | \
+                               CFM_SPACING | \
+                               CFM_KERNING | \
+                               CFM_STYLE | \
+                               CFM_ANIMATION)
+
+/* CHARFORMAT effects */
+#define CFE_BOLD              0x00000001
+#define CFE_ITALIC            0x00000002
+#define CFE_UNDERLINE         0x00000004
+#define CFE_STRIKEOUT         0x00000008
+#define CFE_PROTECTED         0x00000010
+#define CFE_LINK              0x00000020
+#define CFE_SUBSCRIPT         0x00010000
+#define CFE_SUPERSCRIPT       0x00020000
+#define CFE_AUTOCOLOR         0x40000000
+
+#define CFE_SMALLCAPS         CFM_SMALLCAPS
+#define CFE_ALLCAPS           CFM_ALLCAPS
+#define CFE_HIDDEN            CFM_HIDDEN
+#define CFE_OUTLINE           CFM_OUTLINE
+#define CFE_SHADOW            CFM_SHADOW
+#define CFE_EMBOSS            CFM_EMBOSS
+#define CFE_IMPRINT           CFM_IMPRINT
+#define CFE_DISABLED          CFM_DISABLED
+#define CFE_REVISED           CFM_REVISED
+#define CFE_AUTOBACKCOLOR     CFM_BACKCOLOR
+
+#define CFU_UNDERLINENONE             0x00
+#define CFU_UNDERLINE                 0x01
+#define CFU_UNDERLINEWORD             0x02
+#define CFU_UNDERLINEDOUBLE           0x03
+#define CFU_UNDERLINEDOTTED           0x04
+#define CFU_UNDERLINEDASH             0x05
+#define CFU_UNDERLINEDASHDOT          0x06
+#define CFU_UNDERLINEDASHDOTDOT       0x07
+#define CFU_UNDERLINEWAVE             0x08
+#define CFU_UNDERLINETHICK            0x09
+#define CFU_UNDERLINEHAIRLINE         0x0a
+#define CFU_UNDERLINEDOUBLEWAVE       0x0b
+#define CFU_UNDERLINEHEAVYWAVE        0x0c
+#define CFU_UNDERLINELONGDASH         0x0d
+#define CFU_UNDERLINETHICKDASH        0x0e
+#define CFU_UNDERLINETHICKDASHDOT     0x0f
+#define CFU_UNDERLINETHICKDASHDOTDOT  0x10
+#define CFU_UNDERLINETHICKDOTTED      0x11
+#define CFU_UNDERLINETHICKLONGDASH    0x12
+#define CFU_INVERT                    0xFE
+#define CFU_CF1UNDERLINE              0xFF
+
+/* ECO operations */
+#define ECOOP_SET             0x0001
+#define ECOOP_OR              0x0002
+#define ECOOP_AND             0x0003
+#define ECOOP_XOR             0x0004
+
+/* edit control options */
+#define ECO_AUTOWORDSELECTION 0x00000001
+#define ECO_AUTOVSCROLL       0x00000040
+#define ECO_AUTOHSCROLL       0x00000080
+#define ECO_NOHIDESEL         0x00000100
+#define ECO_READONLY          0x00000800
+#define ECO_WANTRETURN        0x00001000
+#define ECO_SAVESEL           0x00008000
+#define ECO_SELECTIONBAR      0x01000000
+#define ECO_VERTICAL          0x00400000
+
+/* Event notification masks */
+#define ENM_NONE              0x00000000
+#define ENM_CHANGE            0x00000001
+#define ENM_UPDATE            0x00000002
+#define ENM_SCROLL            0x00000004
+#define ENM_SCROLLEVENTS      0x00000008
+#define ENM_DRAGDROPDONE      0x00000010
+#define ENM_PARAGRAPHEXPANDED 0x00000020
+#define ENM_PAGECHANGE        0x00000040
+#define ENM_KEYEVENTS         0x00010000
+#define ENM_MOUSEEVENTS       0x00020000
+#define ENM_REQUESTRESIZE     0x00040000
+#define ENM_SELCHANGE         0x00080000
+#define ENM_DROPFILES         0x00100000
+#define ENM_PROTECTED         0x00200000
+#define ENM_CORRECTTEXT       0x00400000
+#define ENM_IMECHANGE         0x00800000
+#define ENM_LANGCHANGE        0x01000000
+#define ENM_OBJECTPOSITIONS   0x02000000
+#define ENM_LINK              0x04000000
+#define ENM_LOWFIRTF          0x08000000
+
+typedef struct _bidioptions
+{
+    UINT    cbSize;
+    WORD    wMask;
+    WORD    wEffects;
+} BIDIOPTIONS;
+
+#ifndef __RICHEDIT_CHARRANGE_DEFINED
+#define __RICHEDIT_CHARRANGE_DEFINED
+
+typedef struct _charrange
+{
+    LONG    cpMin;
+    LONG    cpMax;
+} CHARRANGE;
+
+#endif /* __RICHEDIT_CHARRANGE_DEFINED */
+
+typedef struct _textrange
+{
+    CHARRANGE chrg;
+    LPSTR     lpstrText;
+} TEXTRANGEA;
+
+typedef struct _textrangew
+{
+    CHARRANGE chrg;
+    LPWSTR     lpstrText;
+} TEXTRANGEW;
+
+DECL_WINELIB_TYPE_AW(TEXTRANGE)
+
+typedef struct _editstream
+{
+    DWORD_PTR		dwCookie;
+    DWORD		dwError;
+    EDITSTREAMCALLBACK	pfnCallback;
+} EDITSTREAM;
+
+typedef struct _compcolor {
+    COLORREF   crText;
+    COLORREF   crBackground;
+    DWORD      dwEffects;
+} COMPCOLOR;
+
+typedef struct _encorrecttext {
+    NMHDR      nmhdr;
+    CHARRANGE  chrg;
+    WORD       seltyp;
+} ENCORRECTTEXT;
+
+typedef struct _endropfiles {
+    NMHDR      nmhdr;
+    HANDLE     hDrop;
+    LONG       cp;
+    BOOL       fProtected;
+} ENDROPFILES;
+
+typedef struct _enlink {
+    NMHDR      nmhdr;
+    UINT       msg;
+    WPARAM     wParam;
+    LPARAM     lParam;
+    CHARRANGE  chrg;
+} ENLINK;
+
+typedef struct _enlowfirtf {
+    NMHDR      nmhdr;
+    char       *szControl;
+} ENLOWFIRTF;
+
+typedef struct {
+    NMHDR      nmhdr;
+    LONG       iob;
+    LONG       lOper;
+    HRESULT    hr;
+} ENOLEOPFAILED;
+
+typedef struct _enprotected {
+    NMHDR      nmhdr;
+    UINT       msg;
+    WPARAM     wParam;
+    LPARAM     lParam;
+    CHARRANGE  chrg;
+} ENPROTECTED, *LPENPROTECTED;
+
+typedef struct _ensaveclipboard {
+    NMHDR      nmhdr;
+    LONG       cObjectCount;
+    LONG       cch;
+} ENSAVECLIPBOARD;
+
+typedef struct _findtextA {
+    CHARRANGE  chrg;
+    LPCSTR     lpstrText;
+} FINDTEXTA;
+
+typedef struct _findtextW {
+    CHARRANGE  chrg;
+    LPCWSTR    lpstrText;
+} FINDTEXTW;
+
+DECL_WINELIB_TYPE_AW(FINDTEXT)
+
+typedef struct _findtextexA {
+    CHARRANGE  chrg;
+    LPCSTR     lpstrText;
+    CHARRANGE  chrgText;
+} FINDTEXTEXA;
+
+typedef struct _findtextexW {
+    CHARRANGE  chrg;
+    LPCWSTR    lpstrText;
+    CHARRANGE  chrgText;
+} FINDTEXTEXW;
+
+DECL_WINELIB_TYPE_AW(FINDTEXTEX)
+
+typedef struct _formatrange {
+    HDC        hdc;
+    HDC        hdcTarget;
+    RECT       rc;
+    RECT       rcPage;
+    CHARRANGE  chrg;
+} FORMATRANGE;
+
+typedef enum tagKHYPH
+{
+    khyphNil           = 0,
+    khyphNormal        = 1,
+    khyphAddBefore     = 2,
+    khyphChangeBefore  = 3,
+    khyphDeleteBefore  = 4,
+    khyphChangeAfter   = 5,
+    khyphDelAndChange  = 6
+} KHYPH;
+
+typedef struct hyphresult
+{
+    KHYPH      khyph;
+    LONG       ichHyph;
+    WCHAR      chHyph;
+} HYPHRESULT;
+
+typedef struct tagHyphenateInfo
+{
+    SHORT      cbSize;
+    SHORT      dxHyphenateZone;
+    void       (WINAPI* pfnHyphenate)(WCHAR*, LANGID, LONG, HYPHRESULT*);
+} HYPHENATEINFO;
+
+typedef struct _msgfilter {
+    NMHDR      nmhdr;
+    UINT       msg;
+    WPARAM     wParam;
+    LPARAM     lParam;
+} MSGFILTER;
+
+typedef struct _objectpositions {
+    NMHDR      nmhdr;
+    LONG       cObjectCount;
+    LONG       *pcpPositions;
+} OBJECTPOSITIONS;
+
+typedef struct _paraformat {
+    UINT       cbSize;
+    DWORD      dwMask;
+    WORD       wNumbering;
+    WORD       wReserved;
+    LONG       dxStartIndent;
+    LONG       dxRightIndent;
+    LONG       dxOffset;
+    WORD       wAlignment;
+    SHORT      cTabCount;
+    LONG       rgxTabs[MAX_TAB_STOPS];
+} PARAFORMAT;
+
+typedef struct _paraformat2 {
+    UINT       cbSize;
+    DWORD      dwMask;
+    WORD       wNumbering;
+    WORD       wEffects;
+    LONG       dxStartIndent;
+    LONG       dxRightIndent;
+    LONG       dxOffset;
+    WORD       wAlignment;
+    SHORT      cTabCount;
+    LONG       rgxTabs[MAX_TAB_STOPS];
+    LONG       dySpaceBefore, dySpaceAfter, dyLineSpacing;
+    SHORT      sStyle;
+    BYTE       bLineSpacingRule, bOutlineLevel;
+    WORD       wShadingWeight, wShadingStyle;
+    WORD       wNumberingStart, wNumberingStyle, wNumberingTab;
+    WORD       wBorderSpace, wBorderWidth, wBorders;
+} PARAFORMAT2;
+
+typedef struct _selchange {
+    NMHDR      nmhdr;
+    CHARRANGE  chrg;
+    WORD       seltyp;
+} SELCHANGE;
+
+typedef struct _reqresize {
+    NMHDR      nmhdr;
+    RECT       rc;
+} REQRESIZE;
+
+typedef struct _repastespecial {
+    DWORD      dwAspect;
+    DWORD      dwParam;
+} REPASTESPECIAL;
+
+typedef struct _punctuation {
+    UINT       iSize;
+    LPSTR      szPunctuation;
+} PUNCTUATION;
+
+typedef struct _gettextex {
+    DWORD      cb;
+    DWORD      flags;
+    UINT       codepage;
+    LPCSTR     lpDefaultChar;
+    LPBOOL     lpUsedDefChar;
+} GETTEXTEX;
+
+typedef struct _imecomptext {
+    LONG       cb;
+    DWORD      flags;
+} IMECOMPTEXT;
+
+void WINAPI HyphenateProc(WCHAR*, LANGID, LONG, HYPHRESULT*);
+
+#define SF_TEXT		      0x00000001
+#define SF_RTF		      0x00000002
+#define SF_RTFNOOBJS	      0x00000003
+#define SF_TEXTIZED	      0x00000004
+#define SF_UNICODE            0x00000010
+#define SF_USECODEPAGE        0x00000020
+#define SF_NCRFORNONASCII     0x00000040
+#define SF_RTFVAL             0x00000700
+
+/* BIDIOPTIONS.wMask flag values */
+#define BOM_DEFPARADIR        0x00000001
+#define BOM_PLAINTEXT         0x00000002
+#define BOM_NEUTRALOVERRIDE   0x00000004
+#define BOM_CONTEXTREADING    0x00000008
+#define BOM_CONTEXTALIGNMENT  0x00000010
+#define BOM_LEGACYBIDICLASS   0x00000040
+
+/* BIDIOPTIONS.wEffects flag values */
+#define BOE_RTLDIR            0x00000001
+#define BOE_PLAINTEXT         0x00000002
+#define BOE_NEUTRALOVERRIDE   0x00000004
+#define BOE_CONTEXTREADING    0x00000008
+#define BOE_CONTEXTALIGNMENT  0x00000010
+#define BOE_LEGACYBIDICLASS   0x00000040
+
+/* Clipboard formats */
+#define CF_RTF          TEXT("Rich Text Format")
+#define CF_RTFNOOBJS    TEXT("Rich Text Format Without Objects")
+#define CF_RETEXTOBJ    TEXT("RichEdit Text and Objects")
+
+/* Mode bias wParam values for EM_SETCTFMODEBIAS message */
+#define CTFMODEBIAS_DEFAULT                0x00000000
+#define CTFMODEBIAS_FILENAME               0x00000001
+#define CTFMODEBIAS_NAME                   0x00000002
+#define CTFMODEBIAS_READING                0x00000003
+#define CTFMODEBIAS_DATETIME               0x00000004
+#define CTFMODEBIAS_CONVERSATION           0x00000005
+#define CTFMODEBIAS_NUMERIC                0x00000006
+#define CTFMODEBIAS_HIRAGANA               0x00000007
+#define CTFMODEBIAS_KATAKANA               0x00000008
+#define CTFMODEBIAS_HANGUL                 0x00000009
+#define CTFMODEBIAS_HALFWIDTHKATAKANA      0x0000000a
+#define CTFMODEBIAS_FULLWIDTHALPHANUMERIC  0x0000000b
+#define CTFMODEBIAS_HALFWIDTHALPHANUMERIC  0x0000000c
+
+#define EMO_EXIT              0x00000000
+#define EMO_ENTER             0x00000001
+#define EMO_PROMOTE           0x00000002
+#define EMO_EXPAND            0x00000003
+#define EMO_MOVESELECTION     0x00000004
+#define EMO_GETVIEWMODE       0x00000005
+
+#define EMO_EXPANDSELECTION   0x00000000
+#define EMO_EXPANDDOCUMENT    0x00000001
+
+/* Page Rotate values used in wParam of EM_SETPAGEROTATE message */
+#define EPR_0                 0x00000000
+#define EPR_270               0x00000001
+#define EPR_180               0x00000002
+#define EPR_90                0x00000003
+
+/* Find flags for wParam of EM_FINDTEXT message */
+#define FR_MATCHDIAC          0x20000000
+#define FR_MATCHKASHIDA       0x40000000
+#define FR_MATCHALEFHAMZA     0x80000000
+
+/* IME Compatibility Mode return values for EM_GETIMECOMPMODE message */
+#define ICM_NOTOPEN           0x00000000
+#define ICM_LEVEL3            0x00000001
+#define ICM_LEVEL2            0x00000002
+#define ICM_LEVEL2_5          0x00000003
+#define ICM_LEVEL2_SUI        0x00000004
+#define ICM_CTF               0x00000005
+
+/* Flags value for IMECOMPTEXT structure */
+#define ICT_RESULTREADSTR     0x00000001
+
+/* Input Method Flags used in EM_SETLANGOPTIONS message */
+#define IMF_AUTOKEYBOARD        0x00000001
+#define IMF_AUTOFONT            0x00000002
+#define IMF_IMECANCELCOMPLETE   0x00000004
+#define IMF_IMEALWAYSSENDNOTIFY 0x00000008
+#define IMF_AUTOFONTSIZEADJUST  0x00000010
+#define IMF_UIFONTS             0x00000020
+#define IMF_DUALFONT            0x00000080
+
+/* Parameters values for the EM_SETIMEMODEBIAS message */
+#define IMF_SMODE_PLAURALCLAUSE 0x00000001
+#define IMF_SMODE_NONE          0x00000002
+
+/* Parameters of the EM_SETIMEOPTIONS message */
+#define IMF_FORCENONE         0x00000001
+#define IMF_FORCEENABLE       0x00000002
+#define IMF_FORCEDISABLE      0x00000004
+#define IMF_CLOSESTATUSWINDOW 0x00000008
+#define IMF_VERTICAL          0x00000020
+#define IMF_FORCEACTIVE       0x00000040
+#define IMF_FORCEINACTIVE     0x00000080
+#define IMF_FORCEREMEMBER     0x00000100
+#define IMF_MULTIPLEEDIT      0x00000400
+
+/* return values of the EM_SELECTION_TYPE message */
+#define SEL_EMPTY             0x00000000
+#define SEL_TEXT              0x00000001
+#define SEL_OBJECT            0x00000002
+#define SEL_MULTICHAR         0x00000004
+#define SEL_MULTIOBJECT       0x00000008
+
+/* ENOLEOPFAILED.lOper value that indicates operation failure */
+#define OLEOP_DOVERB          0x00000001
+
+/* punctionation type values for wParam of EM_SETPUNCTUATION message */
+#define PC_FOLLOWING          0x00000001
+#define PC_LEADING            0x00000002
+#define PC_OVERFLOW           0x00000003
+#define PC_DELIMITER          0x00000004
+
+/* mask values in the PARAFORMAT structure */
+#define PFM_STARTINDENT       0x00000001
+#define PFM_RIGHTINDENT       0x00000002
+#define PFM_OFFSET            0x00000004
+#define PFM_ALIGNMENT         0x00000008
+#define PFM_TABSTOPS          0x00000010
+#define PFM_NUMBERING         0x00000020
+#define PFM_OFFSETINDENT      0x80000000
+
+/* mask values in the PARAFORMAT2 structure */
+#define PFM_SPACEBEFORE       0x00000040
+#define PFM_SPACEAFTER        0x00000080
+#define PFM_LINESPACING       0x00000100
+#define PFM_STYLE             0x00000400
+#define PFM_BORDER            0x00000800
+#define PFM_SHADING           0x00001000
+#define PFM_NUMBERINGSTYLE    0x00002000
+#define PFM_NUMBERINGTAB      0x00004000
+#define PFM_NUMBERINGSTART    0x00008000
+#define PFM_RTLPARA           0x00010000
+#define PFM_KEEP              0x00020000
+#define PFM_KEEPNEXT          0x00040000
+#define PFM_PAGEBREAKBEFORE   0x00080000
+#define PFM_NOLINENUMBER      0x00100000
+#define PFM_NOWIDOWCONTROL    0x00200000
+#define PFM_DONOTHYPHEN       0x00400000
+#define PFM_SIDEBYSIDE        0x00800000
+#define PFM_COLLAPSED         0x01000000
+#define PFM_OUTLINELEVEL      0x02000000
+#define PFM_BOX               0x04000000
+#define PFM_RESERVED2         0x08000000
+#define PFM_TABLEROWDELIMITER 0x10000000
+#define PFM_TEXTWRAPPINGBREAK 0x20000000
+#define PFM_TABLE             0x40000000
+
+#define PFM_ALL               (PFM_STARTINDENT | \
+                               PFM_RIGHTINDENT | \
+                               PFM_OFFSET | \
+                               PFM_ALIGNMENT | \
+                               PFM_TABSTOPS | \
+                               PFM_NUMBERING | \
+                               PFM_OFFSETINDENT | \
+                               PFM_RTLPARA)
+
+#define PFM_EFFECTS           (PFM_RTLPARA | \
+                               PFM_KEEP | \
+                               PFM_KEEPNEXT | \
+                               PFM_PAGEBREAKBEFORE | \
+                               PFM_NOLINENUMBER | \
+                               PFM_NOWIDOWCONTROL | \
+                               PFM_DONOTHYPHEN | \
+                               PFM_SIDEBYSIDE | \
+                               PFM_TABLEROWDELIMITER | \
+                               PFM_TABLE)
+
+#define PFM_ALL2              (PFM_ALL | \
+                               PFM_EFFECTS | \
+                               PFM_SPACEBEFORE | \
+                               PFM_SPACEAFTER | \
+                               PFM_LINESPACING | \
+                               PFM_STYLE | \
+                               PFM_BORDER | \
+                               PFM_SHADING | \
+                               PFM_NUMBERINGSTYLE | \
+                               PFM_NUMBERINGTAB | \
+                               PFM_NUMBERINGSTART)
+
+/* numbering option */
+#define PFN_BULLET            0x00000001
+#define PFN_ARABIC            0x00000002
+#define PFN_LCLETTER          0x00000003
+#define PFN_UCLETTER          0x00000004
+#define PFN_LCROMAN           0x00000005
+#define PFN_UCROMAN           0x00000006
+
+/* paragraph format numbering styles */
+#define PFNS_PAREN            0x00000000
+#define PFNS_PARENS           0x00000100
+#define PFNS_PERIOD           0x00000200
+#define PFNS_PLAIN            0x00000300
+#define PFNS_NONUMBER         0x00000400
+#define PFNS_NEWNUMBER        0x00008000
+
+/* paragraph alignment */
+#define PFA_LEFT              0x00000001
+#define PFA_RIGHT             0x00000002
+#define PFA_CENTER            0x00000003
+#define PFA_JUSTIFY           0x00000004
+#define PFA_FULL_INTERWORD    0x00000004
+#define PFA_FULL_INTERLETTER  0x00000005
+#define PFA_FULL_SCALED       0x00000006
+#define PFA_FULL_GLYPHS       0x00000007
+#define PFA_SNAP_GRID         0x00000008
+
+/* paragraph effects */
+#define PFE_RTLPARA           0x00000001
+#define PFE_KEEP              0x00000002
+#define PFE_KEEPNEXT          0x00000004
+#define PFE_PAGEBREAKBEFORE   0x00000008
+#define PFE_NOLINENUMBER      0x00000010
+#define PFE_NOWIDOWCONTROL    0x00000020
+#define PFE_DONOTHYPHEN       0x00000040
+#define PFE_SIDEBYSIDE        0x00000080
+#define PFE_COLLAPSED         0x00000100
+#define PFE_BOX               0x00000400
+#define PFE_TABLEROWDELIMITER 0x00001000
+#define PFE_TEXTWRAPPINGBREAK 0x00002000
+#define PFE_TABLE             0x00004000
+
+/* Set Edit Style flags for EM_SETEDITSTYLE message */
+#define SES_EMULATESYSEDIT      0x00000001
+#define SES_BEEPONMAXTEXT       0x00000002
+#define SES_EXTENDBACKCOLOR     0x00000004
+#define SES_MAPCPS              0x00000008
+#define SES_EMULATE10           0x00000010
+#define SES_USECRLF             0x00000020
+#define SES_NOXLTSYMBOLRANGE    0x00000020
+#define SES_USEAIMM             0x00000040
+#define SES_NOIME               0x00000080
+#define SES_ALLOWBEEPS          0x00000100
+#define SES_UPPERCASE           0x00000200
+#define SES_LOWERCASE           0x00000400
+#define SES_NOINPUTSEQUENCECHK  0x00000800
+#define SES_BIDI                0x00001000
+#define SES_SCROLLONKILLFOCUS   0x00002000
+#define SES_XLTCRCRLFTOCR       0x00004000
+#define SES_DRAFTMODE           0x00008000
+#define SES_USECTF              0x00010000
+#define SES_HIDEGRIDLINES       0x00020000
+#define SES_USEATFONT           0x00040000
+#define SES_CUSTOMLOOK          0x00080000
+#define SES_LBSCROLLNOTIFY      0x00100000
+#define SES_CTFALLOWEMBED       0x00200000
+#define SES_CTFALLOWSMARTTAG    0x00400000
+#define SES_CTFALLOWPROOFING    0x00800000
+
+/* streaming flags */
+#define SFF_WRITEXTRAPAR      0x00000080
+#define SFF_PWD               0x00000800
+#define SFF_KEEPDOCINFO       0x00001000
+#define SFF_PERSISTVIEWSCALE  0x00002000
+#define SFF_PLAINRTF          0x00004000
+#define SFF_SELECTION         0x00008000
+
+typedef enum _undonameid
+{
+    UID_UNKNOWN     = 0,
+    UID_TYPING      = 1,
+    UID_DELETE      = 2,
+    UID_DRAGDROP    = 3,
+    UID_CUT         = 4,
+    UID_PASTE       = 5,
+    UID_AUTOCORRECT = 6
+} UNDONAMEID;
+
+typedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT);
+
+#define VM_OUTLINE            0x00000002
+#define VM_NORMAL             0x00000004
+#define VM_PAGE               0x00000009
+
+/* options of the EM_FINDWORDBREAK message */
+#define WB_CLASSIFY           0x00000003
+#define WB_MOVEWORDLEFT       0x00000004
+#define WB_MOVEWORDPREV       0x00000004
+#define WB_MOVEWORDRIGHT      0x00000005
+#define WB_MOVEWORDNEXT       0x00000005
+#define WB_LEFTBREAK          0x00000006
+#define WB_PREVBREAK          0x00000006
+#define WB_RIGHTBREAK         0x00000007
+#define WB_NEXTBREAK          0x00000007
+
+/* options of the EM_SETWORDWRAPMODE message */
+#define WBF_WORDWRAP          0x00000010
+#define WBF_WORDBREAK         0x00000020
+#define WBF_OVERFLOW          0x00000040
+#define WBF_LEVEL1            0x00000080
+#define WBF_LEVEL2            0x00000100
+#define WBF_CUSTOM            0x00000200
+
+#define WBF_CLASS             ((BYTE) 0x0F)
+#define WBF_ISWHITE           ((BYTE) 0x10)
+#define WBF_BREAKLINE         ((BYTE) 0x20)
+#define WBF_BREAKAFTER        ((BYTE) 0x40)
+
+/* Placeholder unicode character for an embedded object */
+#ifndef WCH_EMBEDDING
+#define WCH_EMBEDDING         (WCHAR)0xFFFC
+#endif
+
+/* options of the EM_SETTEXTMODE message */
+#define TM_PLAINTEXT          0x00000001
+#define TM_RICHTEXT           0x00000002
+#define TM_SINGLELEVELUNDO    0x00000004
+#define TM_MULTILEVELUNDO     0x00000008
+#define TM_SINGLECODEPAGE     0x00000010
+#define TM_MULTICODEPAGE      0x00000020
+
+/* GETTEXTEX structure flags */
+#define GT_DEFAULT            0x00000000
+#define GT_USECRLF            0x00000001
+#define GT_SELECTION          0x00000002
+#define GT_RAWTEXT            0x00000004
+#define GT_NOHIDDENTEXT       0x00000008
+
+/* Options of the EM_SETTYPOGRAPHYOPTIONS message */
+#define TO_ADVANCEDTYPOGRAPHY   0x00000001
+#define TO_SIMPLELINEBREAK      0x00000002
+#define TO_DISABLECUSTOMTEXTOUT 0x00000004
+#define TO_ADVANCEDLAYOUT       0x00000008
+
+typedef struct _gettextlengthex {
+    DWORD      flags;
+    UINT       codepage;
+} GETTEXTLENGTHEX;
+
+/* Flags of the GETTEXTLENGTHEX structure */
+#define GTL_DEFAULT           0x00000000
+#define GTL_USECRLF           0x00000001
+#define GTL_PRECISE           0x00000002
+#define GTL_CLOSE             0x00000004
+#define GTL_NUMCHARS          0x00000008
+#define GTL_NUMBYTES          0x00000010
+
+#define GCM_RIGHTMOUSEDROP    0x8000
+
+/* Options of the EM_SETTEXTEX message */
+typedef struct _settextex {
+    DWORD	flags;
+    UINT	codepage;
+} SETTEXTEX;
+
+/* Flags of the EM_SETTEXTEX message */
+#define ST_DEFAULT	      0x00000000	
+#define ST_KEEPUNDO           0x00000001
+#define ST_SELECTION          0x00000002
+#define ST_NEWCHARS           0x00000004
+#define ST_UNICODE            0x00000008
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_RICHEDIT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl
new file mode 100644
index 0000000..a50681d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2002 Andriy Palamarchuk
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("#if 0")  /* not included on Windows */
+import "oleidl.idl";
+cpp_quote("#endif")
+
+/* REOBJECT structure flags */
+cpp_quote("#define REO_GETOBJ_NO_INTERFACES        0x00000000")
+cpp_quote("#define REO_GETOBJ_POLEOBJ              0x00000001")
+cpp_quote("#define REO_GETOBJ_PSTG                 0x00000002")
+cpp_quote("#define REO_GETOBJ_POLESITE             0x00000004")
+cpp_quote("#define REO_GETOBJ_ALL_INTERFACES       0x00000007")
+cpp_quote("#define REO_CP_SELECTION                0xFFFFFFFF")
+cpp_quote("#define REO_IOB_SELECTION               0xFFFFFFFF")
+cpp_quote("#define REO_IOB_USE_CP                  0xFFFFFFFE")
+cpp_quote("#define REO_NULL                        0x00000000")
+cpp_quote("#define REO_READWRITEMASK               0x0000003F")
+cpp_quote("#define REO_DONTNEEDPALETTE             0x00000020")
+cpp_quote("#define REO_BLANK                       0x00000010")
+cpp_quote("#define REO_DYNAMICSIZE                 0x00000008")
+cpp_quote("#define REO_INVERTEDSELECT              0x00000004")
+cpp_quote("#define REO_BELOWBASELINE               0x00000002")
+cpp_quote("#define REO_RESIZABLE                   0x00000001")
+cpp_quote("#define REO_LINK                        0x80000000")
+cpp_quote("#define REO_STATIC                      0x40000000")
+cpp_quote("#define REO_SELECTED                    0x08000000")
+cpp_quote("#define REO_OPEN                        0x04000000")
+cpp_quote("#define REO_INPLACEACTIVE               0x02000000")
+cpp_quote("#define REO_HILITED                     0x01000000")
+cpp_quote("#define REO_LINKAVAILABLE               0x00800000")
+cpp_quote("#define REO_GETMETAFILE                 0x00400000")
+
+/* clipboard operation flags */
+cpp_quote("#define RECO_PASTE            0x00000000")
+cpp_quote("#define RECO_DROP             0x00000001")
+cpp_quote("#define RECO_COPY             0x00000002")
+cpp_quote("#define RECO_CUT              0x00000003")
+cpp_quote("#define RECO_DRAG             0x00000004")
+
+typedef struct _reobject {
+    DWORD cbStruct;
+    LONG cp;
+    CLSID clsid;
+    LPOLEOBJECT poleobj;
+    LPSTORAGE pstg;
+    LPOLECLIENTSITE polesite;
+    SIZEL sizel;
+    DWORD dvaspect;
+    DWORD dwFlags;
+    DWORD dwUser;
+} REOBJECT;
+
+cpp_quote("#ifndef __RICHEDIT_CHARRANGE_DEFINED")
+cpp_quote("#define __RICHEDIT_CHARRANGE_DEFINED")
+
+typedef struct _charrange
+{
+    LONG cpMin;
+    LONG cpMax;
+} CHARRANGE;
+
+cpp_quote("#endif /* __RICHEDIT_CHARRANGE_DEFINED */")
+
+/*****************************************************************************
+ * IRichEditOle
+ */
+[
+  object,
+  uuid(00020d00-0000-0000-c000-000000000046),
+  pointer_default(unique)
+]
+interface IRichEditOle : IUnknown
+{
+    typedef [unique] IRichEditOle *LPRICHEDITOLE;
+
+    HRESULT GetClientSite(LPOLECLIENTSITE *lplpolesite);
+    HRESULT GetObjectCount();
+    HRESULT GetLinkCount();
+    HRESULT GetObject(LONG iob, REOBJECT *lpreobject, DWORD dwFlags);
+    HRESULT InsertObject(REOBJECT *lpreobject);
+    HRESULT ConvertObject(LONG iob, REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew);
+    HRESULT ActivateAs(REFCLSID rclsid, REFCLSID rclsidAs);
+    HRESULT SetHostNames(LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj);
+    HRESULT SetLinkAvailable(LONG iob, BOOL fAvailable);
+    HRESULT SetDvaspect(LONG iob, DWORD dvaspect);
+    HRESULT HandsOffStorage(LONG iob);
+    HRESULT SaveCompleted(LONG iob, LPSTORAGE lpstg);
+    HRESULT InPlaceDeactivate();
+    HRESULT ContextSensitiveHelp(BOOL fEnterMode);
+    HRESULT GetClipboardData(CHARRANGE* lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj);
+    HRESULT ImportDataObject(LPDATAOBJECT lpdataobj, CLIPFORMAT cf, HGLOBAL hMetaPict);
+}
+
+/*****************************************************************************
+ * IRichEditOleCallback
+ */
+[
+  object,
+  uuid(00020d03-0000-0000-c000-000000000046),
+  pointer_default(unique)
+]
+interface IRichEditOleCallback : IUnknown
+{
+    typedef [unique] IRichEditOleCallback *LPRICHEDITOLECALLBACK;
+
+    HRESULT GetNewStorage(LPSTORAGE *lplpstg);
+    HRESULT GetInPlaceContext(LPOLEINPLACEFRAME *lplpFrame, LPOLEINPLACEUIWINDOW *lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo);
+    HRESULT ShowContainerUI(BOOL fShow);
+    HRESULT QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp);
+    HRESULT DeleteObject(LPOLEOBJECT lpoleobj);
+    HRESULT QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT *lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict);
+    HRESULT ContextSensitiveHelp(BOOL fEnterMode);
+    HRESULT GetClipboardData(CHARRANGE *lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj);
+    HRESULT GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect);
+    HRESULT GetContextMenu(WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE *lpchrg, HMENU *lphmenu);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h
new file mode 100644
index 0000000..48beda2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2007 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RMXFGUID_H
+#define __WINE_RMXFGUID_H
+
+/*****************************************************************************
+ * Define GUIDs
+ */
+
+DEFINE_GUID(TID_D3DRMAnimation,             0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMAnimationKey,          0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMAnimationOptions,      0xe2bf56c0, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMAnimationSet,          0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMAppData,               0xe5745280, 0xb24f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMBoolean,               0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMBoolean2d,             0x4885ae63, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMCamera,                0x3d82ab51, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMColorRGB,              0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMColorRGBA,             0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMCoords2d,              0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMExternalVisual,        0x98116aa0, 0xbdba, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMFloatKeys,             0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrame,                 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMFramePosition,         0xe2bf56c1, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrameRotation,         0xe2bf56c3, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrameTransformMatrix,  0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrameVelocity,         0xe2bf56c2, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMGuid,                  0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMIndexedColor,          0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMInfo,                  0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMInlineData,            0x3a23eea0, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMLight,                 0x3d82ab4a, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMLightAttenuation,      0xa8a98ba0, 0xc5e5, 0x11cf, 0xb9, 0x41, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMLightPenumbra,         0xaed22741, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMLightRange,            0xaed22742, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMLightUmbra,            0xaed22740, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMMaterial,              0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMMaterialAmbientColor,  0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialArray,         0x35ff44e1, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialDiffuseColor,  0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialEmissiveColor, 0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialPower,         0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialSpecularColor, 0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialWrap,          0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMatrix4x4,             0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMesh,                  0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMMeshFace,              0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMMeshFaceWraps,         0xed1ec5c0, 0xc0a8, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMMeshMaterialList,      0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMeshNormals,           0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMeshTextureCoords,     0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMeshVertexColors,      0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMProgressiveMesh,       0x8a63c360, 0x997d, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMPropertyBag,           0x7f0f21e1, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMRightHanded,           0x7f5d5ea0, 0xd53a, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMStringProperty,        0x7f0f21e0, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMTextureFilename,       0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMTextureReference,      0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMTimedFloatKeys,        0xf406b180, 0x7b3b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMUrl,                   0x3a23eea1, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMVector,                0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+#endif /* __WINE_RMXFGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
new file mode 100644
index 0000000..e7144b0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
@@ -0,0 +1,268 @@
+xof 0302txt 0064
+// Copyright (C) 2011 Dylan Smith
+//
+// 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
+
+template Header
+{
+    <3D82AB43-62DA-11CF-AB39-0020AF71E433>
+    WORD major;
+    WORD minor;
+    DWORD flags;
+}
+
+template Vector
+{
+    <3D82AB5E-62DA-11CF-AB39-0020AF71E433>
+    FLOAT x;
+    FLOAT y;
+    FLOAT z;
+}
+
+template Coords2d
+{
+    <F6F23F44-7686-11CF-8F52-0040333594A3>
+    FLOAT u;
+    FLOAT v;
+}
+
+template Matrix4x4
+{
+    <F6F23F45-7686-11CF-8F52-0040333594A3>
+    array FLOAT matrix[16];
+}
+
+template ColorRGBA
+{
+    <35FF44E0-6C7C-11CF-8F52-0040333594A3>
+    FLOAT red;
+    FLOAT green;
+    FLOAT blue;
+    FLOAT alpha;
+}
+
+template ColorRGB
+{
+    <D3E16E81-7835-11CF-8F52-0040333594A3>
+    FLOAT red;
+    FLOAT green;
+    FLOAT blue;
+}
+
+template IndexedColor
+{
+    <1630B820-7842-11CF-8F52-0040333594A3>
+    DWORD index;
+    ColorRGBA indexColor;
+}
+
+template Boolean
+{
+    <537DA6A0-CA37-11D0-941C-0080C80CFA7B>
+    DWORD truefalse;
+}
+
+template Boolean2d
+{
+    <4885AE63-78E8-11CF-8F52-0040333594A3>
+    Boolean u;
+    Boolean v;
+}
+
+template MaterialWrap
+{
+    <4885AE60-78E8-11CF-8F52-0040333594A3>
+    Boolean u;
+    Boolean v;
+}
+
+template TextureFilename
+{
+    <A42790E1-7810-11CF-8F52-0040333594A3>
+    STRING filename;
+}
+
+template Material
+{
+    <3D82AB4D-62DA-11CF-AB39-0020AF71E433>
+    ColorRGBA faceColor;
+    FLOAT power;
+    ColorRGB specularColor;
+    ColorRGB emissiveColor;
+    [ ... ]
+}
+
+template MeshFace
+{
+    <3D82AB5F-62DA-11CF-AB39-0020AF71E433>
+    DWORD nFaceVertexIndices;
+    array DWORD faceVertexIndices[nFaceVertexIndices];
+}
+
+template MeshFaceWraps
+{
+    <ED1EC5C0-C0A8-11D0-941C-0080C80CFA7B>
+    DWORD nFaceWrapValues;
+    array Boolean2d faceWrapValues[nFaceWrapValues];
+}
+
+template MeshTextureCoords
+{
+    <F6F23F40-7686-11CF-8F52-0040333594A3>
+    DWORD nTextureCoords;
+    array Coords2d textureCoords[nTextureCoords];
+}
+
+template MeshMaterialList
+{
+    <F6F23F42-7686-11CF-8F52-0040333594A3>
+    DWORD nMaterials;
+    DWORD nFaceIndexes;
+    array DWORD faceIndexes[nFaceIndexes];
+    [ Material ]
+}
+
+template MeshNormals
+{
+    <F6F23F43-7686-11CF-8F52-0040333594A3>
+    DWORD nNormals;
+    array Vector normals[nNormals];
+    DWORD nFaceNormals;
+    array MeshFace faceNormals[nFaceNormals];
+}
+
+template MeshVertexColors
+{
+    <1630B821-7842-11CF-8F52-0040333594A3>
+    DWORD nVertexColors;
+    array IndexedColor vertexColors[nVertexColors];
+}
+
+template Mesh
+{
+    <3D82AB44-62DA-11CF-AB39-0020AF71E433>
+    DWORD nVertices;
+    array Vector vertices[nVertices];
+    DWORD nFaces;
+    array MeshFace faces[nFaces];
+    [ ... ]
+}
+
+template FrameTransformMatrix
+{
+    <F6F23F41-7686-11CF-8F52-0040333594A3>
+    Matrix4x4 frameMatrix;
+}
+
+template Frame
+{
+    <3D82AB46-62DA-11CF-AB39-0020AF71E433>
+    [ ... ]
+}
+
+template FloatKeys
+{
+    <10DD46A9-775B-11CF-8F52-0040333594A3>
+    DWORD nValues;
+    array FLOAT values[nValues];
+}
+
+template TimedFloatKeys
+{
+    <F406B180-7B3B-11CF-8F52-0040333594A3>
+    DWORD time;
+    FloatKeys tfkeys;
+}
+
+template AnimationKey
+{
+    <10DD46A8-775B-11CF-8F52-0040333594A3>
+    DWORD keyType;
+    DWORD nKeys;
+    array TimedFloatKeys keys[nKeys];
+}
+
+template AnimationOptions
+{
+    <E2BF56C0-840F-11CF-8F52-0040333594A3>
+    DWORD openclosed;
+    DWORD positionquality;
+}
+
+template Animation
+{
+    <3D82AB4F-62DA-11CF-AB39-0020AF71E433>
+    [ ... ]
+}
+
+template AnimationSet
+{
+    <3D82AB50-62DA-11CF-AB39-0020AF71E433>
+    [ Animation ]
+}
+
+template InlineData
+{
+    <3A23EEA0-94B1-11D0-AB39-0020AF71E433>
+    [ BINARY ]
+}
+
+template Url
+{
+    <3A23EEA1-94B1-11D0-AB39-0020AF71E433>
+    DWORD nUrls;
+    array STRING urls[nUrls];
+}
+
+template ProgressiveMesh
+{
+    <8A63C360-997D-11D0-941C-0080C80CFA7B>
+    [ Url, InlineData ]
+}
+
+template Guid
+{
+    <A42790E0-7810-11CF-8F52-0040333594A3>
+    DWORD data1;
+    WORD data2;
+    WORD data3;
+    array UCHAR data4[8];
+}
+
+template StringProperty
+{
+    <7F0F21E0-BFE1-11D1-82C0-00A0C9697271>
+    STRING key;
+    STRING value;
+}
+
+template PropertyBag
+{
+    <7F0F21E1-BFE1-11D1-82C0-00A0C9697271>
+    [ StringProperty ]
+}
+
+template ExternalVisual
+{
+    <98116AA0-BDBA-11D1-82C0-00A0C9697271>
+    Guid guidExternalVisual;
+    [ ... ]
+}
+
+template RightHanded
+{
+    <7F5D5EA0-D53A-11D1-82C0-00A0C9697271>
+    DWORD bRightHanded;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl
new file mode 100644
index 0000000..02d489a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    local,
+    object,
+    uuid(0c733ab4-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRow : IUnknown
+{
+    [local]
+    HRESULT GetColumns([in] DBORDINAL cColumns,
+                       [in, out, size_is(cColumns), annotation("__inout_ecount(cColumns)")] DBCOLUMNACCESS rgColumns[]);
+
+
+    HRESULT GetSourceRowset([in, annotation("__in")] REFIID riid,
+                            [out, iid_is(riid), annotation("__deref_opt_out_opt")] IUnknown **ppRowset,
+                            [out, annotation("__out_opt")] HROW *phRow);
+
+   HRESULT Open([in, unique, annotation("__in_opt")] IUnknown *pUnkOuter,
+                [in, annotation("__in")] DBID *pColumnID,
+                [in, annotation("__in")] REFGUID rguidColumnType,
+                [in] DWORD dwBindFlags,
+                [in, annotation("__in")] REFIID riid,
+                [out, iid_is(riid), annotation("__deref_opt_out")] IUnknown **ppUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl
new file mode 100644
index 0000000..69dd831
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    local,
+    object,
+    uuid(0c733ab5-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRowChange : IUnknown
+{
+    [local]
+    HRESULT SetColumns([in] DBORDINAL  cColumns,
+                       [in, out, size_is(cColumns), annotation("__in_ecount(cColumns)")] DBCOLUMNACCESS rgColumns[]);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl
new file mode 100644
index 0000000..5153e98
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2013 Nikolay Sivov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a94-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRowPosition : IUnknown
+{
+    typedef DWORD DBPOSITIONFLAGS;
+
+    enum DBPOSITIONFLAGSENUM {
+        DBPOSITION_OK,
+        DBPOSITION_NOROW,
+        DBPOSITION_BOF,
+        DBPOSITION_EOF
+    };
+
+    [local]
+    HRESULT ClearRowPosition();
+
+    [call_as(ClearRowPosition)]
+    HRESULT RemoteClearRowPosition([out] IErrorInfo **errorinfo);
+
+    [local]
+    HRESULT GetRowPosition([out] HCHAPTER *chapter,
+                           [out] HROW *row,
+                           [out] DBPOSITIONFLAGS *position_flags);
+
+    [call_as(GetRowPosition)]
+    HRESULT RemoteGetRowPosition([out] HCHAPTER *chapter,
+                                 [out] HROW *row,
+                                 [out] DBPOSITIONFLAGS *position_flags,
+                                 [out] IErrorInfo **errorinfo);
+    [local]
+    HRESULT GetRowset([in] REFIID riid,
+                      [out, iid_is(riid)] IUnknown **rowset);
+
+    [call_as(GetRowset)]
+    HRESULT RemoteGetRowset([in] REFIID riid,
+                            [out, iid_is(riid)] IUnknown **rowset,
+                            [out] IErrorInfo **errorinfo);
+
+    [local]
+    HRESULT Initialize([in] IUnknown *rowset);
+
+    [call_as(Initialize)]
+    HRESULT RemoteInitialize([in] IUnknown *rowset,
+                             [out] IErrorInfo **errorinfo);
+
+    [local]
+    HRESULT SetRowPosition([in] HCHAPTER chapter,
+                           [in] HROW row,
+                           [in] DBPOSITIONFLAGS flags);
+
+    [call_as(SetRowPosition)]
+    HRESULT RemoteSetRowPosition([in] HCHAPTER chapter,
+                                 [in] HROW row,
+                                 [in] DBPOSITIONFLAGS flags,
+                                 [out] IErrorInfo **errorinfo);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl
new file mode 100644
index 0000000..605c4aa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2013 Nikolay Sivov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0997a571-126e-11d0-9f8a-00a0c9a0631e),
+    pointer_default(unique)
+]
+interface IRowPositionChange : IUnknown
+{
+    [local]
+    HRESULT OnRowPositionChange([in] DBREASON reason,
+                                [in] DBEVENTPHASE phase,
+                                [in] BOOL cant_deny);
+
+    [call_as(OnRowPositionChange)]
+    HRESULT RemoteOnRowPositionChange([in] DBREASON reason,
+                                      [in] DBEVENTPHASE phase,
+                                      [in] BOOL cant_deny,
+                                      [out] IErrorInfo **errorinfo);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h
new file mode 100644
index 0000000..298f39f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h
@@ -0,0 +1,93 @@
+/*
+ *    RPC interface
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef RPC_NO_WINDOWS_H
+# include <windows.h>
+#endif
+
+#ifndef __WINE_RPC_H
+#define __WINE_RPC_H
+
+#if defined(__powerpc__) || defined(_MAC) /* ? */
+# define __RPC_MAC__
+ /* Also define __RPC_WIN32__ to ensure compatibility */
+# define __RPC_WIN32__
+#elif defined(_WIN64)
+# define __RPC_WIN64__
+#else
+# define __RPC_WIN32__
+#endif
+
+#include <basetsd.h>
+
+#define __RPC_FAR
+#define __RPC_API  __stdcall
+#define __RPC_USER __stdcall
+#define __RPC_STUB __stdcall
+#define RPC_ENTRY  __stdcall
+#define RPCRTAPI
+typedef LONG RPC_STATUS;
+
+typedef void* I_RPC_HANDLE;
+
+#include <rpcdce.h>
+/* #include <rpcnsi.h> */
+#include <rpcnterr.h>
+#include <excpt.h>
+#include <winerror.h>
+#ifndef RPC_NO_WINDOWS_H
+#include <rpcasync.h>
+#endif
+
+#ifdef USE_COMPILER_EXCEPTIONS
+
+#define RpcTryExcept __try {
+#define RpcExcept(expr) } __except (expr) {
+#define RpcEndExcept }
+#define RpcTryFinally __try {
+#define RpcFinally } __finally {
+#define RpcEndFinally }
+#define RpcExceptionCode() GetExceptionCode()
+#define RpcAbnormalTermination() AbnormalTermination()
+
+#else /* USE_COMPILER_EXCEPTIONS */
+
+/* ignore exception handling for now */
+#define RpcTryExcept if (1) {
+#define RpcExcept(expr) } else {
+#define RpcEndExcept }
+#define RpcTryFinally
+#define RpcFinally
+#define RpcEndFinally
+#define RpcExceptionCode() 0
+/* #define RpcAbnormalTermination() abort() */
+
+#endif /* USE_COMPILER_EXCEPTIONS */
+
+#endif /*__WINE_RPC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h
new file mode 100644
index 0000000..3f4274d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RPCASYNC_H
+#define __WINE_RPCASYNC_H
+
+#ifdef RPC_NO_WINDOWS_H
+# include <windef.h>
+#endif
+
+#ifdef __RPC_WIN64__
+# include <pshpack8.h>
+#endif
+
+typedef struct tagRPC_ERROR_ENUM_HANDLE
+{
+    ULONG Signature;
+    void* CurrentPos;
+    void* Head;
+} RPC_ERROR_ENUM_HANDLE;
+
+typedef enum tagExtendedErrorParamTypes
+{
+    eeptAnsiString = 1,
+    eeptUnicodeString,
+    eeptLongVal,
+    eeptShortVal,
+    eeptPointerVal,
+    eeptNone,
+    eeptBinary
+} ExtendedErrorParamTypes;
+
+#define MaxNumberOfEEInfoParams 4
+#define RPC_EEINFO_VERSION      1
+
+typedef struct tagBinaryParam
+{
+    void *Buffer;
+    short Size;
+} BinaryParam;
+
+typedef struct tagRPC_EE_INFO_PARAM
+{
+    ExtendedErrorParamTypes ParameterType;
+    union
+    {
+        LPSTR AnsiString;
+        LPWSTR UnicodeString;
+        LONG LVal;
+        short SVal;
+        ULONGLONG PVal;
+        BinaryParam BVal;
+    } u;
+} RPC_EE_INFO_PARAM;
+
+#define EEInfoPreviousRecordsMissing    0x1
+#define EEInfoNextRecordsMissing        0x2
+#define EEInfoUseFileTime               0x4
+
+#define EEInfoGCCOM                     11
+#define EEInfoGCFRS                     12
+
+typedef struct tagRPC_EXTENDED_ERROR_INFO
+{
+    ULONG Version;
+    LPWSTR ComputerName;
+    ULONG ProcessID;
+    union
+    {
+        SYSTEMTIME SystemTime;
+        FILETIME FileTime;
+    } u;
+    ULONG GeneratingComponent;
+    ULONG Status;
+    USHORT DetectionLocation;
+    USHORT Flags;
+    int NumberOfParameters;
+    RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams];
+} RPC_EXTENDED_ERROR_INFO;
+
+#define RPC_ASYNC_VERSION_1_0   sizeof(RPC_ASYNC_STATE)
+
+typedef enum _RPC_NOTIFICATION_TYPES
+{
+    RpcNotificationTypeNone,
+    RpcNotificationTypeEvent,
+    RpcNotificationTypeApc,
+    RpcNotificationTypeIoc,
+    RpcNotificationTypeHwnd,
+    RpcNotificationTypeCallback,
+} RPC_NOTIFICATION_TYPES;
+
+typedef enum _RPC_ASYNC_EVENT
+{
+    RpcCallComplete,
+    RpcSendComplete,
+    RpcReceiveComplete,
+    RpcClientDisconnect,
+    RpcClientCancel,
+} RPC_ASYNC_EVENT;
+
+struct _RPC_ASYNC_STATE;
+
+typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *,void *,RPC_ASYNC_EVENT);
+typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
+
+typedef union _RPC_ASYNC_NOTIFICATION_INFO
+{
+    struct
+    {
+        PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
+        HANDLE hThread;
+    } APC;
+    struct
+    {
+        HANDLE hIOPort;
+        DWORD dwNumberOfBytesTransferred;
+        DWORD_PTR dwCompletionKey;
+        LPOVERLAPPED lpOverlapped;
+    } IOC;
+    struct
+    {
+        HWND hWnd;
+        UINT Msg;
+    } HWND;
+    HANDLE hEvent;
+    PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
+} RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;
+
+#define RPC_C_NOTIFY_ON_SEND_COMPLETE   0x1
+#define RPC_C_INFINITE_TIMEOUT          INFINITE
+
+typedef struct _RPC_ASYNC_STATE
+{
+    unsigned int Size;
+    ULONG Signature;
+    LONG Lock;
+    ULONG Flags;
+    void *StubInfo;
+    void *UserInfo;
+    void *RuntimeInfo;
+    RPC_ASYNC_EVENT Event;
+    RPC_NOTIFICATION_TYPES NotificationType;
+    RPC_ASYNC_NOTIFICATION_INFO u;
+    LONG_PTR Reserved[4];
+} RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;
+
+#define RpcAsyncGetCallHandle(async) (((PRPC_ASYNC_STATE)async)->RuntimeInfo)
+
+#ifdef __RPC_WIN64__
+# include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE,unsigned int);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE,void *);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE,BOOL);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE*,BOOL,RPC_EXTENDED_ERROR_INFO*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE*,int*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE*,PVOID*,SIZE_T*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID,SIZE_T,RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorClearInformation(void);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE,BOOL,LPVOID,PLARGE_INTEGER,LUID,DWORD,PVOID,PVOID*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE,PVOID);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE,PVOID);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE,PRPC_ASYNC_STATE);
+RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG);
+RPCRTAPI int        RPC_ENTRY I_RpcExceptionFilter(ULONG);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h
new file mode 100644
index 0000000..8e95ec8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h
@@ -0,0 +1,635 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RPCDCE_H
+#define __WINE_RPCDCE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef IN
+#define IN
+#endif
+#ifndef OUT
+#define OUT
+#endif
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifndef UUID_DEFINED
+#define UUID_DEFINED
+typedef GUID UUID;
+#endif
+
+typedef unsigned char* RPC_CSTR;
+typedef unsigned short* RPC_WSTR;
+typedef void* RPC_AUTH_IDENTITY_HANDLE;
+typedef void* RPC_AUTHZ_HANDLE;
+typedef void* RPC_IF_HANDLE;
+typedef I_RPC_HANDLE RPC_BINDING_HANDLE;
+typedef RPC_BINDING_HANDLE handle_t;
+#define rpc_binding_handle_t RPC_BINDING_HANDLE
+#define RPC_MGR_EPV void
+
+typedef struct _RPC_BINDING_VECTOR
+{
+  ULONG Count;
+  RPC_BINDING_HANDLE BindingH[1];
+} RPC_BINDING_VECTOR;
+#define rpc_binding_vector_t RPC_BINDING_VECTOR
+
+typedef struct _UUID_VECTOR
+{
+  ULONG Count;
+  UUID *Uuid[1];
+} UUID_VECTOR;
+#define uuid_vector_t UUID_VECTOR
+
+typedef struct _RPC_IF_ID
+{
+  UUID Uuid;
+  unsigned short VersMajor;
+  unsigned short VersMinor;
+} RPC_IF_ID;
+
+typedef struct
+{
+  ULONG Count;
+  RPC_IF_ID *IfId[1];
+} RPC_IF_ID_VECTOR;
+
+typedef struct
+{
+  unsigned int Count;
+  ULONG Stats[1];
+} RPC_STATS_VECTOR;
+
+typedef struct _RPC_PROTSEQ_VECTORA
+{
+  unsigned int Count;
+  unsigned char *Protseq[1];
+} RPC_PROTSEQ_VECTORA;
+
+typedef struct _RPC_PROTSEQ_VECTORW
+{
+  unsigned int Count;
+  unsigned short *Protseq[1];
+} RPC_PROTSEQ_VECTORW;
+
+DECL_WINELIB_TYPE_AW(RPC_PROTSEQ_VECTOR)
+
+typedef I_RPC_HANDLE *RPC_EP_INQ_HANDLE;
+
+#define RPC_C_EP_ALL_ELTS 0
+#define RPC_C_EP_MATCH_BY_IF 1
+#define RPC_C_EP_MATCH_BY_OBJ 2
+#define RPC_C_EP_MATCH_BY_BOTH 3
+
+#define RPC_C_VERS_ALL 1
+#define RPC_C_VERS_COMPATIBLE 2
+#define RPC_C_VERS_EXACT 3
+#define RPC_C_VERS_MAJOR_ONLY 4
+#define RPC_C_VERS_UPTO 5
+
+#define RPC_C_BINDING_INFINITE_TIMEOUT 10
+#define RPC_C_BINDING_MIN_TIMEOUT 0
+#define RPC_C_BINDING_DEFAULT_TIMEOUT 5
+#define RPC_C_BINDING_MAX_TIMEOUT 9
+
+#define RPC_C_CANCEL_INFINITE_TIMEOUT -1
+
+#define RPC_C_LISTEN_MAX_CALLS_DEFAULT 1234
+#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT 10
+
+#define RPC_PROTSEQ_TCP     0x1
+#define RPC_PROTSEQ_NMP     0x2
+#define RPC_PROTSEQ_LRPC    0x3
+#define RPC_PROTSEQ_HTTP    0x4
+
+/* RPC_POLICY EndpointFlags */
+#define RPC_C_BIND_TO_ALL_NICS          0x1
+#define RPC_C_USE_INTERNET_PORT         0x1
+#define RPC_C_USE_INTRANET_PORT         0x2
+#define RPC_C_DONT_FAIL                 0x4
+
+/* RPC_POLICY EndpointFlags specific to the Falcon/RPC transport */
+#define RPC_C_MQ_TEMPORARY                  0x0000
+#define RPC_C_MQ_PERMANENT                  0x0001
+#define RPC_C_MQ_CLEAR_ON_OPEN              0x0002
+#define RPC_C_MQ_USE_EXISTING_SECURITY      0x0004
+#define RPC_C_MQ_AUTHN_LEVEL_NONE           0x0000
+#define RPC_C_MQ_AUTHN_LEVEL_PKT_INTEGRITY  0x0008
+#define RPC_C_MQ_AUTHN_LEVEL_PKT_PRIVACY    0x0010
+
+#define RPC_C_AUTHN_LEVEL_DEFAULT 0
+#define RPC_C_AUTHN_LEVEL_NONE 1
+#define RPC_C_AUTHN_LEVEL_CONNECT 2
+#define RPC_C_AUTHN_LEVEL_CALL 3
+#define RPC_C_AUTHN_LEVEL_PKT 4
+#define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5
+#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6
+
+#define RPC_C_AUTHN_NONE 0
+#define RPC_C_AUTHN_DCE_PRIVATE 1
+#define RPC_C_AUTHN_DCE_PUBLIC 2
+#define RPC_C_AUTHN_DEC_PUBLIC 4
+#define RPC_C_AUTHN_GSS_NEGOTIATE 9
+#define RPC_C_AUTHN_WINNT 10
+#define RPC_C_AUTHN_GSS_SCHANNEL 14
+#define RPC_C_AUTHN_GSS_KERBEROS 16
+#define RPC_C_AUTHN_DPA 17
+#define RPC_C_AUTHN_MSN 18
+#define RPC_C_AUTHN_DIGEST 21
+#define RPC_C_AUTHN_MQ 100
+#define RPC_C_AUTHN_DEFAULT 0xffffffff
+
+#define RPC_C_AUTHZ_NONE 0
+#define RPC_C_AUTHZ_NAME 1
+#define RPC_C_AUTHZ_DCE  2
+#define RPC_C_AUTHZ_DEFAULT 0xffffffff
+
+/* values for RPC_SECURITY_QOS*::ImpersonationType */
+#define RPC_C_IMP_LEVEL_DEFAULT     0
+#define RPC_C_IMP_LEVEL_ANONYMOUS   1
+#define RPC_C_IMP_LEVEL_IDENTIFY    2
+#define RPC_C_IMP_LEVEL_IMPERSONATE 3
+#define RPC_C_IMP_LEVEL_DELEGATE    4
+
+/* values for RPC_SECURITY_QOS*::IdentityTracking */
+#define RPC_C_QOS_IDENTITY_STATIC   0
+#define RPC_C_QOS_IDENTITY_DYNAMIC  1
+
+/* flags for RPC_SECURITY_QOS*::Capabilities */
+#define RPC_C_QOS_CAPABILITIES_DEFAULT          0x0
+#define RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH      0x1
+#define RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC     0x2
+#define RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY    0x4
+
+/* values for RPC_SECURITY_QOS*::Version */
+#define RPC_C_SECURITY_QOS_VERSION      1
+#define RPC_C_SECURITY_QOS_VERSION_1    1
+#define RPC_C_SECURITY_QOS_VERSION_2    2
+
+/* flags for RPC_SECURITY_QOS_V2::AdditionalSecurityInfoType */
+#define RPC_C_AUTHN_INFO_TYPE_HTTP  1
+
+/* flags for RPC_HTTP_TRANSPORT_CREDENTIALS::Flags */
+#define RPC_C_HTTP_FLAG_USE_SSL                 0x1
+#define RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME   0x2
+
+/* values for RPC_HTTP_TRANSPORT_CREDENTIALS::AuthenticationTarget */
+#define RPC_C_HTTP_AUTHN_TARGET_SERVER  1
+#define RPC_C_HTTP_AUTHN_TARGET_PROXY   2
+
+#define RPC_C_HTTP_AUTHN_SCHEME_BASIC       0x01
+#define RPC_C_HTTP_AUTHN_SCHEME_NTLM        0x02
+#define RPC_C_HTTP_AUTHN_SCHEME_PASSPORT    0x04
+#define RPC_C_HTTP_AUTHN_SCHEME_DIGEST      0x08
+#define RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE   0x10
+
+typedef RPC_STATUS RPC_ENTRY RPC_IF_CALLBACK_FN( RPC_IF_HANDLE InterfaceUuid, void *Context );
+typedef void (__RPC_USER *RPC_AUTH_KEY_RETRIEVAL_FN)(void *, RPC_WSTR, ULONG, void **, RPC_STATUS *);
+
+typedef struct _RPC_POLICY
+{
+  unsigned int  Length;
+  ULONG EndpointFlags;
+  ULONG NICFlags;
+} RPC_POLICY,  *PRPC_POLICY;
+
+typedef struct _SEC_WINNT_AUTH_IDENTITY_W
+{
+    unsigned short* User;
+    ULONG UserLength;
+    unsigned short* Domain;
+    ULONG DomainLength;
+    unsigned short* Password;
+    ULONG PasswordLength;
+    ULONG Flags;
+} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
+
+typedef struct _SEC_WINNT_AUTH_IDENTITY_A
+{
+    unsigned char* User;
+    ULONG UserLength;
+    unsigned char* Domain;
+    ULONG DomainLength;
+    unsigned char* Password;
+    ULONG PasswordLength;
+    ULONG Flags;
+} SEC_WINNT_AUTH_IDENTITY_A, *PSEC_WINNT_AUTH_IDENTITY_A;
+
+typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_W
+{
+    SEC_WINNT_AUTH_IDENTITY_W *TransportCredentials;
+    ULONG Flags;
+    ULONG AuthenticationTarget;
+    ULONG NumberOfAuthnSchemes;
+    ULONG *AuthnSchemes;
+    unsigned short *ServerCertificateSubject;
+} RPC_HTTP_TRANSPORT_CREDENTIALS_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_W;
+
+typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_A
+{
+    SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials;
+    ULONG Flags;
+    ULONG AuthenticationTarget;
+    ULONG NumberOfAuthnSchemes;
+    ULONG *AuthnSchemes;
+    unsigned char *ServerCertificateSubject;
+} RPC_HTTP_TRANSPORT_CREDENTIALS_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_A;
+
+typedef struct _RPC_SECURITY_QOS {
+    ULONG Version;
+    ULONG Capabilities;
+    ULONG IdentityTracking;
+    ULONG ImpersonationType;
+} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;
+
+typedef struct _RPC_SECURITY_QOS_V2_W
+{
+    ULONG Version;
+    ULONG Capabilities;
+    ULONG IdentityTracking;
+    ULONG ImpersonationType;
+    ULONG AdditionalSecurityInfoType;
+    union
+    {
+        RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials;
+    } u;
+} RPC_SECURITY_QOS_V2_W, *PRPC_SECURITY_QOS_V2_W;
+
+typedef struct _RPC_SECURITY_QOS_V2_A
+{
+    ULONG Version;
+    ULONG Capabilities;
+    ULONG IdentityTracking;
+    ULONG ImpersonationType;
+    ULONG AdditionalSecurityInfoType;
+    union
+    {
+        RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
+    } u;
+} RPC_SECURITY_QOS_V2_A, *PRPC_SECURITY_QOS_V2_A;
+
+#define _SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(_SEC_WINNT_AUTH_IDENTITY_)
+#define  SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(SEC_WINNT_AUTH_IDENTITY_)
+#define PSEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(PSEC_WINNT_AUTH_IDENTITY_)
+
+#define RPC_HTTP_TRANSPORT_CREDENTIALS_  WINELIB_NAME_AW(RPC_HTTP_TRANSPORT_CREDENTIALS_)
+#define PRPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(PRPC_HTTP_TRANSPORT_CREDENTIALS_)
+#define _RPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(_RPC_HTTP_TRANSPORT_CREDENTIALS_)
+
+#define RPC_SECURITY_QOS_V2  WINELIB_NAME_AW(RPC_SECURITY_QOS_V2_)
+#define PRPC_SECURITY_QOS_V2 WINELIB_NAME_AW(PRPC_SECURITY_QOS_V2_)
+#define _RPC_SECURITY_QOS_V2 WINELIB_NAME_AW(_RPC_SECURITY_QOS_V2_)
+
+/* SEC_WINNT_AUTH Flags */
+#define SEC_WINNT_AUTH_IDENTITY_ANSI    0x1
+#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
+
+/* RpcServerRegisterIfEx Flags */
+#define RPC_IF_AUTOLISTEN                   0x01
+#define RPC_IF_OLE                          0x02
+#define RPC_IF_ALLOW_UNKNOWN_AUTHORITY      0x04
+#define RPC_IF_ALLOW_SECURE_ONLY            0x08
+#define RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 0x10
+#define RPC_IF_ALLOW_LOCAL_ONLY             0x20
+#define RPC_IF_SEC_NO_CACHE                 0x40
+
+RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS e, RPC_CSTR buffer);
+RPC_STATUS RPC_ENTRY DceErrorInqTextW(RPC_STATUS e, RPC_WSTR buffer);
+#define              DceErrorInqText WINELIB_NAME_AW(DceErrorInqText)
+
+RPCRTAPI DECLSPEC_NORETURN void RPC_ENTRY
+  RpcRaiseException( RPC_STATUS exception );
+        
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingCopy( RPC_BINDING_HANDLE SourceBinding, RPC_BINDING_HANDLE* DestinationBinding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingFree( RPC_BINDING_HANDLE* Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR *OptionValue );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingReset( RPC_BINDING_HANDLE Binding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingSetObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingSetOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR OptionValue );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcObjectSetType( UUID* ObjUuid, UUID* TypeUuid );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingFromStringBindingA( RPC_CSTR StringBinding, RPC_BINDING_HANDLE* Binding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingFromStringBindingW( RPC_WSTR StringBinding, RPC_BINDING_HANDLE* Binding );
+#define RpcBindingFromStringBinding WINELIB_NAME_AW(RpcBindingFromStringBinding)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingToStringBindingA( RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingToStringBindingW( RPC_BINDING_HANDLE Binding, RPC_WSTR *StringBinding );
+#define RpcBindingToStringBinding WINELIB_NAME_AW(RpcBindingToStringBinding)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingVectorFree( RPC_BINDING_VECTOR** BindingVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcStringBindingComposeA( RPC_CSTR ObjUuid, RPC_CSTR Protseq, RPC_CSTR NetworkAddr,
+                            RPC_CSTR Endpoint, RPC_CSTR Options, RPC_CSTR *StringBinding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcStringBindingComposeW( RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr,
+                            RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding );
+#define RpcStringBindingCompose WINELIB_NAME_AW(RpcStringBindingCompose)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcStringBindingParseA( RPC_CSTR StringBinding, RPC_CSTR *ObjUuid, RPC_CSTR *Protseq,
+                          RPC_CSTR *NetworkAddr, RPC_CSTR *Endpoint, RPC_CSTR *NetworkOptions );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcStringBindingParseW( RPC_WSTR StringBinding, RPC_WSTR *ObjUuid, RPC_WSTR *Protseq,
+                          RPC_WSTR *NetworkAddr, RPC_WSTR *Endpoint, RPC_WSTR *NetworkOptions );
+#define RpcStringBindingParse WINELIB_NAME_AW(RpcStringBindingParse)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcEpResolveBinding( RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcEpRegisterA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+                  UUID_VECTOR* UuidVector, RPC_CSTR Annotation );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcEpRegisterW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+                  UUID_VECTOR* UuidVector, RPC_WSTR Annotation );
+#define RpcEpRegister WINELIB_NAME_AW(RpcEpRegister)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcEpRegisterNoReplaceA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+                           UUID_VECTOR* UuidVector, RPC_CSTR Annotation );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcEpRegisterNoReplaceW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+                           UUID_VECTOR* UuidVector, RPC_WSTR Annotation );
+#define RpcEpRegisterNoReplace WINELIB_NAME_AW(RpcEpRegisterNoReplace)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcEpUnregister( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+                   UUID_VECTOR* UuidVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerListen( unsigned int MinimumCallThreads, unsigned int MaxCalls, unsigned int DontWait );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtEnableIdleCleanup( void );
+
+typedef int (__RPC_API *RPC_MGMT_AUTHORIZATION_FN)( RPC_BINDING_HANDLE, ULONG, RPC_STATUS * );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetAuthorizationFn( RPC_MGMT_AUTHORIZATION_FN );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetCancelTimeout(LONG);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtWaitServerListen( void );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtInqStats( RPC_BINDING_HANDLE Binding, RPC_STATS_VECTOR **Statistics );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtStopServerListening( RPC_BINDING_HANDLE Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtIsServerListening(RPC_BINDING_HANDLE Binding);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtInqIfIds( RPC_BINDING_HANDLE Binding, RPC_IF_ID_VECTOR** IfIdVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtEpEltInqBegin( RPC_BINDING_HANDLE EpBinding, ULONG InquiryType, RPC_IF_ID *IfId,
+                        ULONG VersOption, UUID *ObjectUuid, RPC_EP_INQ_HANDLE *InquiryContext);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtSetComTimeout( RPC_BINDING_HANDLE Binding, unsigned int Timeout );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcMgmtSetServerStackSize( ULONG ThreadStackSize );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+RpcMgmtStatsVectorFree( RPC_STATS_VECTOR **StatsVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerRegisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerRegisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,
+                         unsigned int Flags, unsigned int MaxCalls, RPC_IF_CALLBACK_FN* IfCallbackFn );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,
+                        unsigned int Flags, unsigned int MaxCalls, unsigned int MaxRpcSize, RPC_IF_CALLBACK_FN* IfCallbackFn );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, unsigned int WaitForCallsToComplete );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUnregisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, int RundownContextHandles );
+
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUseProtseqA(RPC_CSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor);
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUseProtseqW(RPC_WSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor);
+#define RpcServerUseProtseq WINELIB_NAME_AW(RpcServerUseProtseq)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUseProtseqEpA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUseProtseqEpW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor );
+#define RpcServerUseProtseqEp WINELIB_NAME_AW(RpcServerUseProtseqEp)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUseProtseqEpExA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor,
+                            PRPC_POLICY Policy );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerUseProtseqEpExW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor,
+                            PRPC_POLICY Policy );
+#define RpcServerUseProtseqEpEx WINELIB_NAME_AW(RpcServerUseProtseqEpEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerRegisterAuthInfoA( RPC_CSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,
+                              void *Arg );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,
+                              void *Arg );
+#define RpcServerRegisterAuthInfo WINELIB_NAME_AW(RpcServerRegisterAuthInfo)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingSetAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel,
+                            ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr,
+                            RPC_SECURITY_QOS *SecurityQos );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingSetAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel,
+                            ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr,
+                            RPC_SECURITY_QOS *SecurityQos );
+#define RpcBindingSetAuthInfoEx WINELIB_NAME_AW(RpcBindingSetAuthInfoEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingSetAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel,
+                          ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingSetAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel,
+                          ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr );
+#define RpcBindingSetAuthInfo WINELIB_NAME_AW(RpcBindingSetAuthInfo)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel,
+                            ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc,
+                            ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel,
+                            ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc,
+                            ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS );
+#define RpcBindingInqAuthInfoEx WINELIB_NAME_AW(RpcBindingInqAuthInfoEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel,
+                          ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel,
+                          ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc );
+#define RpcBindingInqAuthInfo WINELIB_NAME_AW(RpcBindingInqAuthInfo)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthClientA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+                            RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+                            ULONG *AuthzSvc );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthClientW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+                            RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+                            ULONG *AuthzSvc );
+#define RpcBindingInqAuthClient WINELIB_NAME_AW(RpcBindingInqAuthClient)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthClientExA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+                              RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+                              ULONG *AuthzSvc, ULONG Flags );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcBindingInqAuthClientExW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+                              RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+                              ULONG *AuthzSvc, ULONG Flags );
+#define RpcBindingInqAuthClientEx WINELIB_NAME_AW(RpcBindingInqAuthClientEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThread(void*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThreadEx(void*,LONG);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcImpersonateClient( RPC_BINDING_HANDLE Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcNetworkIsProtseqValidA( RPC_CSTR protseq );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcNetworkIsProtseqValidW( RPC_WSTR protseq );
+#define RpcNetworkIsProtseqValid WINELIB_NAME_AW(RpcNetworkIsProtseqValid)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA** protseqs );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs );
+#define RpcNetworkInqProtseqs WINELIB_NAME_AW(RpcNetworkInqProtseqs)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcProtseqVectorFreeA( RPC_PROTSEQ_VECTORA** protseqs );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcProtseqVectorFreeW( RPC_PROTSEQ_VECTORW** protseqs );
+#define RpcProtseqVectorFree WINELIB_NAME_AW(RpcProtseqVectorFree)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcRevertToSelf( void );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcRevertToSelfEx( RPC_BINDING_HANDLE Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcStringFreeA(RPC_CSTR* String);
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcStringFreeW(RPC_WSTR* String);
+#define RpcStringFree WINELIB_NAME_AW(RpcStringFree)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidToStringA( UUID* Uuid, RPC_CSTR* StringUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidToStringW( UUID* Uuid, RPC_WSTR* StringUuid );
+#define UuidToString WINELIB_NAME_AW(UuidToString)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidFromStringA( RPC_CSTR StringUuid, UUID* Uuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidFromStringW( RPC_WSTR StringUuid, UUID* Uuid );
+#define UuidFromString WINELIB_NAME_AW(UuidFromString)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidCreate( UUID* Uuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidCreateSequential( UUID* Uuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  UuidCreateNil( UUID* Uuid );
+RPCRTAPI signed int RPC_ENTRY
+  UuidCompare( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ );
+RPCRTAPI int RPC_ENTRY
+  UuidEqual( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ );
+RPCRTAPI unsigned short RPC_ENTRY
+  UuidHash(UUID* Uuid, RPC_STATUS* Status_ );
+RPCRTAPI int RPC_ENTRY
+  UuidIsNil( UUID* Uuid, RPC_STATUS* Status_ );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerInqDefaultPrincNameA( ULONG AuthnSvc, RPC_CSTR *PrincName );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcServerInqDefaultPrincNameW( ULONG AuthnSvc, RPC_WSTR *PrincName );
+#define RpcServerInqDefaultPrincName WINELIB_NAME_AW(RpcServerInqDefaultPrincName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <rpcdcep.h>
+
+#endif /*__WINE_RPCDCE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h
new file mode 100644
index 0000000..b0d6f0d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RPCDCEP_H
+#define __WINE_RPCDCEP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _RPC_VERSION {
+    unsigned short MajorVersion;
+    unsigned short MinorVersion;
+} RPC_VERSION;
+
+typedef struct _RPC_SYNTAX_IDENTIFIER {
+    GUID SyntaxGUID;
+    RPC_VERSION SyntaxVersion;
+} RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER;
+
+typedef struct _RPC_MESSAGE
+{
+    RPC_BINDING_HANDLE Handle;
+    ULONG DataRepresentation;
+    void* Buffer;
+    unsigned int BufferLength;
+    unsigned int ProcNum;
+    PRPC_SYNTAX_IDENTIFIER TransferSyntax;
+    void* RpcInterfaceInformation;
+    void* ReservedForRuntime;
+    RPC_MGR_EPV* ManagerEpv;
+    void* ImportContext;
+    ULONG RpcFlags;
+} RPC_MESSAGE, *PRPC_MESSAGE;
+
+/* or'ed with ProcNum */
+#define RPC_FLAGS_VALID_BIT         0x00008000
+
+#define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d)
+
+#define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS    0x00000000
+#define RPC_CONTEXT_HANDLE_FLAGS            0x30000000
+#define RPC_CONTEXT_HANDLE_SERIALIZE        0x10000000
+#define RPC_CONTEXT_HANDLE_DONT_SERIALIZE   0x20000000
+#define RPC_TYPE_STRICT_CONTEXT_HANDLE      0x40000000
+
+#define RPC_NCA_FLAGS_DEFAULT       0x00000000
+#define RPC_NCA_FLAGS_IDEMPOTENT    0x00000001
+#define RPC_NCA_FLAGS_BROADCAST     0x00000002
+#define RPC_NCA_FLAGS_MAYBE         0x00000004
+
+#define RPC_BUFFER_COMPLETE         0x00001000
+#define RPC_BUFFER_PARTIAL          0x00002000
+#define RPC_BUFFER_EXTRA            0x00004000
+#define RPC_BUFFER_ASYNC            0x00008000
+#define RPC_BUFFER_NONOTIFY         0x00010000
+
+#define RPCFLG_MESSAGE              0x01000000
+#define RPCFLG_HAS_MULTI_SYNTAXES   0x02000000
+#define RPCFLG_HAS_CALLBACK         0x04000000
+#define RPCFLG_AUTO_COMPLETE        0x08000000
+#define RPCFLG_LOCAL_CALL           0x10000000
+#define RPCFLG_INPUT_SYNCHRONOUS    0x20000000
+#define RPCFLG_ASYNCHRONOUS         0x40000000
+#define RPCFLG_NON_NDR              0x80000000
+
+typedef void  (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message);
+typedef RPC_STATUS (RPC_ENTRY *RPC_FORWARD_FUNCTION)(UUID *InterfaceId, RPC_VERSION *InterfaceVersion, UUID *ObjectId, unsigned char *Rpcpro, void **ppDestEndpoint);
+
+typedef struct
+{
+    unsigned int DispatchTableCount;
+    RPC_DISPATCH_FUNCTION* DispatchTable;
+    LONG_PTR Reserved;
+} RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE;
+
+typedef struct _RPC_PROTSEQ_ENDPOINT
+{
+    unsigned char* RpcProtocolSequence;
+    unsigned char* Endpoint;
+} RPC_PROTSEQ_ENDPOINT, *PRPC_PROTSEQ_ENDPOINT;
+
+#define NT351_INTERFACE_SIZE 0x40
+#define RPC_INTERFACE_HAS_PIPES 0x0001
+
+typedef struct _RPC_SERVER_INTERFACE
+{
+    unsigned int Length;
+    RPC_SYNTAX_IDENTIFIER InterfaceId;
+    RPC_SYNTAX_IDENTIFIER TransferSyntax;
+    PRPC_DISPATCH_TABLE DispatchTable;
+    unsigned int RpcProtseqEndpointCount;
+    PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
+    RPC_MGR_EPV* DefaultManagerEpv;
+    void const* InterpreterInfo;
+    unsigned int Flags;
+} RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE;
+
+typedef struct _RPC_CLIENT_INTERFACE
+{
+    unsigned int Length;
+    RPC_SYNTAX_IDENTIFIER InterfaceId;
+    RPC_SYNTAX_IDENTIFIER TransferSyntax;
+    PRPC_DISPATCH_TABLE DispatchTable;
+    unsigned int RpcProtseqEndpointCount;
+    PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
+    ULONG_PTR Reserved;
+    void const* InterpreterInfo;
+    unsigned int Flags;
+} RPC_CLIENT_INTERFACE, *PRPC_CLIENT_INTERFACE;
+
+#define RPC_C_OPT_COOKIE_AUTH 7
+
+typedef struct _RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR
+{
+    ULONG BufferSize;
+    char *Buffer;
+} RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR;
+
+#define TRANSPORT_TYPE_CN   0x01
+#define TRANSPORT_TYPE_DG   0x02
+#define TRANSPORT_TYPE_LPC  0x04
+#define TRANSPORT_TYPE_WMSG 0x08
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcNegotiateTransferSyntax( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcGetBuffer( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcGetBufferWithObject( RPC_MESSAGE* Message, UUID* ObjectUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcSendReceive( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcFreeBuffer( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcSend( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcReceive( RPC_MESSAGE* Message );
+
+RPCRTAPI void* RPC_ENTRY
+  I_RpcAllocate( unsigned int Size );
+RPCRTAPI void RPC_ENTRY
+  I_RpcFree( void* Object );
+
+RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
+  I_RpcGetCurrentCallHandle( void );
+
+/*
+ * The platform SDK headers don't define these functions at all if WINNT is defined
+ * The MSVC6 headers define two different sets of functions :
+ *  If WINNT and MSWMSG are defined, the NT versions are defined
+ *  If WINNT is not defined, the windows 9x versions are defined.
+ * Note that the prototypes for I_RpcBindingSetAsync are different for each case.
+ *
+ * Wine defaults to the WinNT case and only defines these function is MSWMSG is
+ *  defined. Defining the NT functions by default causes MIDL generated proxies
+ *  to not compile.
+ */
+
+#if 1  /* WINNT */
+#ifdef MSWMSG
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcServerStartListening( HWND hWnd );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcServerStopListening( void );
+/* WINNT */
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_GetThreadWindowHandle( HWND* hWnd );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcAsyncSendReceive( RPC_MESSAGE* Message, void* Context, HWND hWnd );
+
+typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, HANDLE hSyncEvent);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn );
+
+RPCRTAPI UINT RPC_ENTRY
+  I_RpcWindowProc( void* hWnd, UINT Message, UINT wParam, ULONG lParam );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcSetWMsgEndpoint( WCHAR* Endpoint );
+
+#endif
+
+#else
+
+/* WIN9x */
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcServerStartListening( void* hWnd );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcServerStopListening( void );
+
+typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, void* hSyncEvent);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn, ULONG ServerTid );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcSetThreadParams( int fClientFree, void* Context, void* hWndClient );
+
+RPCRTAPI UINT RPC_ENTRY
+  I_RpcWindowProc( void* hWnd, unsigned int Message, unsigned int wParam, ULONG lParam );
+
+#endif
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type );
+
+RPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WINE_RPCDCEP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h
new file mode 100644
index 0000000..e40b210
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h
@@ -0,0 +1,786 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCNDR_H_VERSION__
+#define __RPCNDR_H_VERSION__ ( 500 )
+#endif
+
+#ifndef __WINE_RPCNDR_H
+#define __WINE_RPCNDR_H
+
+#include <basetsd.h>
+#include <rpcsal.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#undef CONST_VTBL
+#ifdef CONST_VTABLE
+# define CONST_VTBL const
+#else
+# define CONST_VTBL
+#endif
+
+#ifdef __cplusplus
+#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        EXTERN_C const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \
+        EXTERN_C const GUID DECLSPEC_SELECTANY name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#else
+#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+        const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \
+        const GUID DECLSPEC_SELECTANY name = \
+	{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+#endif
+
+/* stupid #if can't handle casts... this __stupidity
+   is just a workaround for that limitation */
+
+#define __NDR_CHAR_REP_MASK  0x000f
+#define __NDR_INT_REP_MASK   0x00f0
+#define __NDR_FLOAT_REP_MASK 0xff00
+
+#define __NDR_IEEE_FLOAT     0x0000
+#define __NDR_VAX_FLOAT      0x0100
+#define __NDR_IBM_FLOAT      0x0300
+
+#define __NDR_ASCII_CHAR     0x0000
+#define __NDR_EBCDIC_CHAR    0x0001
+
+#define __NDR_LITTLE_ENDIAN  0x0010
+#define __NDR_BIG_ENDIAN     0x0000
+
+/* Mac's are special */
+#if defined(__RPC_MAC__)
+# define __NDR_LOCAL_DATA_REPRESENTATION \
+    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_BIG_ENDIAN)
+#else
+# define __NDR_LOCAL_DATA_REPRESENTATION \
+    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_LITTLE_ENDIAN)
+#endif
+
+#define __NDR_LOCAL_ENDIAN \
+  (__NDR_LOCAL_DATA_REPRESENTATION & __NDR_INT_REP_MASK)
+
+/* for convenience, define NDR_LOCAL_IS_BIG_ENDIAN iff it is */
+#if __NDR_LOCAL_ENDIAN == __NDR_BIG_ENDIAN
+# define NDR_LOCAL_IS_BIG_ENDIAN
+#elif __NDR_LOCAL_ENDIAN == __NDR_LITTLE_ENDIAN
+# undef NDR_LOCAL_IS_BIG_ENDIAN
+#else
+# error alien NDR_LOCAL_ENDIAN - Greg botched the defines again, please report
+#endif
+
+/* finally, do the casts like Microsoft */
+
+#define NDR_CHAR_REP_MASK             ((ULONG) __NDR_CHAR_REP_MASK)
+#define NDR_INT_REP_MASK              ((ULONG) __NDR_INT_REP_MASK)
+#define NDR_FLOAT_REP_MASK            ((ULONG) __NDR_FLOAT_REP_MASK)
+#define NDR_IEEE_FLOAT                ((ULONG) __NDR_IEEE_FLOAT)
+#define NDR_VAX_FLOAT                 ((ULONG) __NDR_VAX_FLOAT)
+#define NDR_IBM_FLOAT                 ((ULONG) __NDR_IBM_FLOAT)
+#define NDR_ASCII_CHAR                ((ULONG) __NDR_ASCII_CHAR)
+#define NDR_EBCDIC_CHAR               ((ULONG) __NDR_EBCDIC_CHAR)
+#define NDR_LITTLE_ENDIAN             ((ULONG) __NDR_LITTLE_ENDIAN)
+#define NDR_BIG_ENDIAN                ((ULONG) __NDR_BIG_ENDIAN)
+#define NDR_LOCAL_DATA_REPRESENTATION ((ULONG) __NDR_LOCAL_DATA_REPRESENTATION)
+#define NDR_LOCAL_ENDIAN              ((ULONG) __NDR_LOCAL_ENDIAN)
+
+
+#define TARGET_IS_NT50_OR_LATER 1
+#define TARGET_IS_NT40_OR_LATER 1
+#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
+
+#define small char
+typedef unsigned char byte;
+typedef INT64 hyper;
+typedef UINT64 MIDL_uhyper;
+typedef unsigned char boolean;
+
+#define __RPC_CALLEE WINAPI
+#define RPC_VAR_ENTRY __cdecl
+#define NDR_SHAREABLE static
+
+#define MIDL_ascii_strlen(s) strlen(s)
+#define MIDL_ascii_strcpy(d,s) strcpy(d,s)
+#define MIDL_memset(d,v,n) memset(d,v,n)
+#define midl_user_free MIDL_user_free
+#define midl_user_allocate MIDL_user_allocate
+
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+#define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)
+#define NdrFcLong(s)  (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \
+  (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)
+
+#define RPC_BAD_STUB_DATA_EXCEPTION_FILTER  \
+  ((RpcExceptionCode() == STATUS_ACCESS_VIOLATION) || \
+   (RpcExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) || \
+   (RpcExceptionCode() == RPC_X_BAD_STUB_DATA) || \
+   (RpcExceptionCode() == RPC_S_INVALID_BOUND))
+
+typedef struct
+{
+  void *pad[2];
+  void *userContext;
+} *NDR_SCONTEXT;
+
+#define NDRSContextValue(hContext) (&(hContext)->userContext)
+#define cbNDRContext 20
+
+typedef void (__RPC_USER *NDR_RUNDOWN)(void *context);
+typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
+typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);
+
+#define DECLSPEC_UUID(x)
+#define MIDL_INTERFACE(x)   struct
+
+struct _MIDL_STUB_MESSAGE;
+struct _MIDL_STUB_DESC;
+struct _FULL_PTR_XLAT_TABLES;
+struct NDR_ALLOC_ALL_NODES_CONTEXT;
+struct NDR_POINTER_QUEUE_STATE;
+
+typedef unsigned char *RPC_BUFPTR;
+typedef ULONG RPC_LENGTH;
+typedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);
+typedef const unsigned char *PFORMAT_STRING;
+
+typedef struct
+{
+  LONG Dimension;
+  ULONG *BufferConformanceMark;
+  ULONG *BufferVarianceMark;
+  ULONG *MaxCountArray;
+  ULONG *OffsetArray;
+  ULONG *ActualCountArray;
+} ARRAY_INFO, *PARRAY_INFO;
+
+typedef struct
+{
+  ULONG WireCodeset;
+  ULONG DesiredReceivingCodeset;
+  void *CSArrayInfo;
+} CS_STUB_INFO;
+
+typedef struct _NDR_PIPE_DESC *PNDR_PIPE_DESC;
+typedef struct _NDR_PIPE_MESSAGE *PNDR_PIPE_MESSAGE;
+typedef struct _NDR_ASYNC_MESSAGE *PNDR_ASYNC_MESSAGE;
+typedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO;
+
+typedef struct _MIDL_STUB_MESSAGE
+{
+  PRPC_MESSAGE RpcMsg;
+  unsigned char *Buffer;
+  unsigned char *BufferStart;
+  unsigned char *BufferEnd;
+  unsigned char *BufferMark;
+  ULONG BufferLength;
+  ULONG MemorySize;
+  unsigned char *Memory;
+  unsigned char IsClient;
+  unsigned char Pad;
+  unsigned short uFlags2;
+  int ReuseBuffer;
+  struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext;
+  struct NDR_POINTER_QUEUE_STATE *pPointerQueueState;
+  int IgnoreEmbeddedPointers;
+  unsigned char *PointerBufferMark;
+  unsigned char CorrDespIncrement;
+  unsigned char uFlags;
+  unsigned short UniquePtrCount;
+  ULONG_PTR MaxCount;
+  ULONG Offset;
+  ULONG ActualCount;
+  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
+  void (__RPC_API *pfnFree)(void *);
+  unsigned char *StackTop;
+  unsigned char *pPresentedType;
+  unsigned char *pTransmitType;
+  handle_t SavedHandle;
+  const struct _MIDL_STUB_DESC *StubDesc;
+  struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;
+  ULONG FullPtrRefId;
+  ULONG PointerLength;
+  unsigned int fInDontFree:1;
+  unsigned int fDontCallFreeInst:1;
+  unsigned int fInOnlyParam:1;
+  unsigned int fHasReturn:1;
+  unsigned int fHasExtensions:1;
+  unsigned int fHasNewCorrDesc:1;
+  unsigned int fIsIn:1;
+  unsigned int fIsOut:1;
+  unsigned int fIsOicf:1;
+  unsigned int fBufferValid:1;
+  unsigned int fHasMemoryValidateCallback:1;
+  unsigned int fInFree:1;
+  unsigned int fNeedMCCP:1;
+  int fUnused:3;
+  int fUnused2:16;
+  DWORD dwDestContext;
+  void *pvDestContext;
+  NDR_SCONTEXT *SavedContextHandles;
+  LONG ParamNumber;
+  struct IRpcChannelBuffer *pRpcChannelBuffer;
+  PARRAY_INFO pArrayInfo;
+  ULONG *SizePtrCountArray;
+  ULONG *SizePtrOffsetArray;
+  ULONG *SizePtrLengthArray;
+  void *pArgQueue;
+  DWORD dwStubPhase;
+  void *LowStackMark;
+  PNDR_ASYNC_MESSAGE pAsyncMsg;
+  PNDR_CORRELATION_INFO pCorrInfo;
+  unsigned char *pCorrMemory;
+  void *pMemoryList;
+  CS_STUB_INFO *pCSInfo;
+  unsigned char *ConformanceMark;
+  unsigned char *VarianceMark;
+  INT_PTR Unused; /* BackingStoreLowMark on IA64 */
+  struct _NDR_PROC_CONTEXT *pContext;
+  void* ContextHandleHash;
+  void* pUserMarshalList;
+  INT_PTR Reserved51_3;
+  INT_PTR Reserved51_4;
+  INT_PTR Reserved51_5;
+} MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE;
+
+typedef void * (__RPC_API * GENERIC_BINDING_ROUTINE)(void *);
+typedef void (__RPC_API * GENERIC_UNBIND_ROUTINE)(void *, unsigned char *);
+
+typedef struct _GENERIC_BINDING_ROUTINE_PAIR
+{
+  GENERIC_BINDING_ROUTINE pfnBind;
+  GENERIC_UNBIND_ROUTINE pfnUnbind;
+} GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR;
+
+typedef struct __GENERIC_BINDING_INFO
+{
+  void *pObj;
+  unsigned int Size;
+  GENERIC_BINDING_ROUTINE pfnBind;
+  GENERIC_UNBIND_ROUTINE pfnUnbind;
+} GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO;
+
+typedef void (__RPC_USER *XMIT_HELPER_ROUTINE)(PMIDL_STUB_MESSAGE);
+
+typedef struct _XMIT_ROUTINE_QUINTUPLE
+{
+  XMIT_HELPER_ROUTINE pfnTranslateToXmit;
+  XMIT_HELPER_ROUTINE pfnTranslateFromXmit;
+  XMIT_HELPER_ROUTINE pfnFreeXmit;
+  XMIT_HELPER_ROUTINE pfnFreeInst;
+} XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE;
+
+typedef ULONG (__RPC_USER *USER_MARSHAL_SIZING_ROUTINE)(ULONG *, ULONG, void *);
+typedef unsigned char * (__RPC_USER *USER_MARSHAL_MARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);
+typedef unsigned char * (__RPC_USER *USER_MARSHAL_UNMARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);
+typedef void (__RPC_USER *USER_MARSHAL_FREEING_ROUTINE)(ULONG *, void *);
+
+typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE
+{
+  USER_MARSHAL_SIZING_ROUTINE pfnBufferSize;
+  USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall;
+  USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall;
+  USER_MARSHAL_FREEING_ROUTINE pfnFree;
+} USER_MARSHAL_ROUTINE_QUADRUPLE;
+
+/* 'USRC' */
+#define USER_MARSHAL_CB_SIGNATURE \
+	( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \
+	  ( (DWORD)'R' << 8  ) | ( (DWORD)'C'       ) )
+
+typedef enum
+{
+    USER_MARSHAL_CB_BUFFER_SIZE,
+    USER_MARSHAL_CB_MARSHALL,
+    USER_MARSHAL_CB_UNMARSHALL,
+    USER_MARSHAL_CB_FREE
+} USER_MARSHAL_CB_TYPE;
+
+typedef struct _USER_MARSHAL_CB
+{
+    ULONG Flags;
+    PMIDL_STUB_MESSAGE pStubMsg;
+    PFORMAT_STRING pReserve;
+    ULONG Signature;
+    USER_MARSHAL_CB_TYPE CBType;
+    PFORMAT_STRING pFormat;
+    PFORMAT_STRING pTypeFormat;
+} USER_MARSHAL_CB;
+
+#define USER_CALL_CTXT_MASK(f) ((f) & 0x00ff)
+#define USER_CALL_AUX_MASK(f) ((f) & 0xff00)
+#define GET_USER_DATA_REP(f) HIWORD(f)
+
+#define USER_CALL_IS_ASYNC 0x0100
+#define USER_CALL_NEW_CORRELATION_DESC 0x0200
+
+typedef struct _MALLOC_FREE_STRUCT
+{
+  void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T);
+  void   (__RPC_USER *pfnFree)(void *);
+} MALLOC_FREE_STRUCT;
+
+typedef struct _COMM_FAULT_OFFSETS
+{
+  short CommOffset;
+  short FaultOffset;
+} COMM_FAULT_OFFSETS;
+
+typedef struct _MIDL_STUB_DESC
+{
+  void *RpcInterfaceInformation;
+  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
+  void (__RPC_API *pfnFree)(void *);
+  union {
+    handle_t *pAutoHandle;
+    handle_t *pPrimitiveHandle;
+    PGENERIC_BINDING_INFO pGenericBindingInfo;
+  } IMPLICIT_HANDLE_INFO;
+  const NDR_RUNDOWN *apfnNdrRundownRoutines;
+  const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;
+  const EXPR_EVAL *apfnExprEval;
+  const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;
+  const unsigned char *pFormatTypes;
+  int fCheckBounds;
+  ULONG Version;
+  MALLOC_FREE_STRUCT *pMallocFreeStruct;
+  LONG MIDLVersion;
+  const COMM_FAULT_OFFSETS *CommFaultOffsets;
+  const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;
+  const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;
+  ULONG_PTR mFlags;
+  ULONG_PTR Reserved3;
+  ULONG_PTR Reserved4;
+  ULONG_PTR Reserved5;
+} MIDL_STUB_DESC;
+typedef const MIDL_STUB_DESC *PMIDL_STUB_DESC;
+
+typedef struct _MIDL_FORMAT_STRING
+{
+  short Pad;
+#if defined(__GNUC__)
+  unsigned char Format[0];
+#else
+  unsigned char Format[1];
+#endif
+} MIDL_FORMAT_STRING;
+
+typedef struct _MIDL_SYNTAX_INFO
+{
+  RPC_SYNTAX_IDENTIFIER TransferSyntax;
+  RPC_DISPATCH_TABLE* DispatchTable;
+  PFORMAT_STRING ProcString;
+  const unsigned short* FmtStringOffset;
+  PFORMAT_STRING TypeString;
+  const void* aUserMarshalQuadruple;
+  ULONG_PTR pReserved1;
+  ULONG_PTR pReserved2;
+} MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;
+
+typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE );
+
+#ifdef WINE_STRICT_PROTOTYPES
+typedef LONG (__RPC_API *SERVER_ROUTINE)(void);
+#else
+typedef LONG (__RPC_API *SERVER_ROUTINE)();
+#endif
+
+typedef struct _MIDL_SERVER_INFO_
+{
+  PMIDL_STUB_DESC pStubDesc;
+  const SERVER_ROUTINE *DispatchTable;
+  PFORMAT_STRING ProcString;
+  const unsigned short *FmtStringOffset;
+  const STUB_THUNK *ThunkTable;
+  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
+  ULONG_PTR nCount;
+  PMIDL_SYNTAX_INFO pSyntaxInfo;
+} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;
+
+typedef struct _MIDL_STUBLESS_PROXY_INFO
+{
+  PMIDL_STUB_DESC pStubDesc;
+  PFORMAT_STRING ProcFormatString;
+  const unsigned short *FormatStringOffset;
+  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
+  ULONG_PTR nCount;
+  PMIDL_SYNTAX_INFO pSyntaxInfo;
+} MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO;
+
+
+#if defined(__i386__) && !defined(__MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)
+/* Calling convention for returning structures/unions is different between Windows and gcc on i386 */
+typedef LONG_PTR CLIENT_CALL_RETURN;
+#else
+typedef union _CLIENT_CALL_RETURN
+{
+  void *Pointer;
+  LONG_PTR Simple;
+} CLIENT_CALL_RETURN;
+#endif
+
+typedef enum {
+  STUB_UNMARSHAL,
+  STUB_CALL_SERVER,
+  STUB_MARSHAL,
+  STUB_CALL_SERVER_NO_HRESULT
+} STUB_PHASE;
+
+typedef enum {
+  PROXY_CALCSIZE,
+  PROXY_GETBUFFER,
+  PROXY_MARSHAL,
+  PROXY_SENDRECEIVE,
+  PROXY_UNMARSHAL
+} PROXY_PHASE;
+
+typedef enum {
+  XLAT_SERVER = 1,
+  XLAT_CLIENT
+} XLAT_SIDE;
+
+typedef struct _FULL_PTR_TO_REFID_ELEMENT {
+  struct _FULL_PTR_TO_REFID_ELEMENT *Next;
+  void *Pointer;
+  ULONG RefId;
+  unsigned char State;
+} FULL_PTR_TO_REFID_ELEMENT, *PFULL_PTR_TO_REFID_ELEMENT;
+
+/* Full pointer translation tables */
+typedef struct _FULL_PTR_XLAT_TABLES {
+  struct {
+    void **XlatTable;
+    unsigned char *StateTable;
+    ULONG NumberOfEntries;
+  } RefIdToPointer;
+
+  struct {
+    PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
+    ULONG NumberOfBuckets;
+    ULONG HashMask;
+  } PointerToRefId;
+
+  ULONG                   NextRefId;
+  XLAT_SIDE               XlatSide;
+} FULL_PTR_XLAT_TABLES,  *PFULL_PTR_XLAT_TABLES;
+
+struct IRpcStubBuffer;
+
+typedef ULONG error_status_t;
+typedef void  * NDR_CCONTEXT;
+
+typedef struct _SCONTEXT_QUEUE {
+  ULONG NumberOfObjects;
+  NDR_SCONTEXT *ArrayOfObjects;
+} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;
+
+typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
+{
+    void *Buffer;
+    ULONG BufferSize;
+    void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
+    void (__RPC_API *pfnFree)(void *);
+    struct IRpcChannelBuffer *pRpcChannelBuffer;
+    ULONG_PTR Reserved[5];
+} NDR_USER_MARSHAL_INFO_LEVEL1;
+
+typedef struct _NDR_USER_MARSHAL_INFO
+{
+    ULONG InformationLevel;
+    union
+    {
+        NDR_USER_MARSHAL_INFO_LEVEL1 Level1;
+    } DUMMYUNIONNAME1;
+} NDR_USER_MARSHAL_INFO;
+
+/* Context Handles */
+
+RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
+  NDRCContextBinding( NDR_CCONTEXT CContext );
+
+RPCRTAPI void RPC_ENTRY
+  NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );
+
+RPCRTAPI void RPC_ENTRY
+  NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,
+                         void *pBuff, ULONG DataRepresentation );
+
+RPCRTAPI void RPC_ENTRY
+  NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+  NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );
+
+RPCRTAPI void RPC_ENTRY
+  NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
+                         void *pBuff, NDR_RUNDOWN userRunDownIn );
+
+RPCRTAPI void RPC_ENTRY
+  NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
+                        void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,
+                        ULONG Flags );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+  NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
+                           ULONG DataRepresentation );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+  NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
+                          ULONG DataRepresentation, void *CtxGuard,
+                          ULONG Flags );
+
+RPCRTAPI void RPC_ENTRY
+  NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );
+
+RPCRTAPI void RPC_ENTRY
+  NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,
+                              RPC_BINDING_HANDLE BindHandle );
+
+RPCRTAPI void RPC_ENTRY
+  NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+  NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );
+
+RPCRTAPI void RPC_ENTRY
+  NdrContextHandleSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+  NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+RPCRTAPI void RPC_ENTRY
+  NdrServerContextNewMarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle,
+                               NDR_RUNDOWN RundownRoutine, PFORMAT_STRING pFormat );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+  NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  RpcSmDestroyClientContext( void **ContextHandle );
+
+RPCRTAPI void RPC_ENTRY
+  RpcSsDestroyClientContext( void **ContextHandle );
+
+RPCRTAPI void RPC_ENTRY
+  NdrSimpleTypeMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
+RPCRTAPI void RPC_ENTRY
+  NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
+
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrByteCountPointerMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrByteCountPointerUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );
+RPCRTAPI void RPC_ENTRY
+  NdrByteCountPointerBufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+RPCRTAPI void RPC_ENTRY
+  NdrByteCountPointerFree( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrRangeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );
+
+/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
+#define SIMPLE_TYPE_MARSHAL(type) \
+RPCRTAPI unsigned char* RPC_ENTRY \
+  Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
+RPCRTAPI unsigned char* RPC_ENTRY \
+  Ndr##type##Unmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); \
+RPCRTAPI void RPC_ENTRY \
+  Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
+RPCRTAPI ULONG RPC_ENTRY \
+  Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+#define TYPE_MARSHAL(type) \
+  SIMPLE_TYPE_MARSHAL(type) \
+RPCRTAPI void RPC_ENTRY \
+  Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+
+TYPE_MARSHAL(Pointer)
+TYPE_MARSHAL(SimpleStruct)
+TYPE_MARSHAL(ConformantStruct)
+TYPE_MARSHAL(ConformantVaryingStruct)
+TYPE_MARSHAL(ComplexStruct)
+TYPE_MARSHAL(FixedArray)
+TYPE_MARSHAL(ConformantArray)
+TYPE_MARSHAL(ConformantVaryingArray)
+TYPE_MARSHAL(VaryingArray)
+TYPE_MARSHAL(ComplexArray)
+TYPE_MARSHAL(EncapsulatedUnion)
+TYPE_MARSHAL(NonEncapsulatedUnion)
+TYPE_MARSHAL(XmitOrRepAs)
+TYPE_MARSHAL(UserMarshal)
+TYPE_MARSHAL(InterfacePointer)
+
+SIMPLE_TYPE_MARSHAL(ConformantString)
+SIMPLE_TYPE_MARSHAL(NonConformantString)
+
+#undef TYPE_MARSHAL
+#undef SIMPLE_TYPE_MARSHAL
+
+RPCRTAPI void RPC_ENTRY
+  NdrCorrelationInitialize( PMIDL_STUB_MESSAGE pStubMsg, void *pMemory, ULONG CacheSize, ULONG flags );
+RPCRTAPI void RPC_ENTRY
+  NdrCorrelationPass( PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+  NdrCorrelationFree( PMIDL_STUB_MESSAGE pStubMsg );
+
+RPCRTAPI void RPC_ENTRY
+  NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );
+RPCRTAPI void RPC_ENTRY
+  NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+#define USER_MARSHAL_FC_BYTE    1
+#define USER_MARSHAL_FC_CHAR    2
+#define USER_MARSHAL_FC_SMALL   3
+#define USER_MARSHAL_FC_USMALL  4
+#define USER_MARSHAL_FC_WCHAR   5
+#define USER_MARSHAL_FC_SHORT   6
+#define USER_MARSHAL_FC_USHORT  7
+#define USER_MARSHAL_FC_LONG    8
+#define USER_MARSHAL_FC_ULONG   9
+#define USER_MARSHAL_FC_FLOAT   10
+#define USER_MARSHAL_FC_HYPER   11
+#define USER_MARSHAL_FC_DOUBLE  12
+
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar );
+
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+  NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+  NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+  NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+  NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+
+RPCRTAPI void RPC_ENTRY
+  NdrServerCall2( PRPC_MESSAGE pRpcMsg );
+RPCRTAPI void RPC_ENTRY
+  NdrServerCall( PRPC_MESSAGE pRpcMsg );
+RPCRTAPI void RPC_ENTRY
+  NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );
+
+RPCRTAPI LONG RPC_ENTRY
+  NdrStubCall2( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+RPCRTAPI LONG RPC_ENTRY
+  NdrStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+RPCRTAPI LONG RPC_ENTRY
+  NdrAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+RPCRTAPI LONG RPC_ENTRY
+  NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+
+RPCRTAPI void* RPC_ENTRY
+  NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);
+
+RPCRTAPI void RPC_ENTRY
+  NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,
+                            ULONG *pFaultStatus, RPC_STATUS Status_ );
+
+RPCRTAPI void* RPC_ENTRY
+  NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
+RPCRTAPI void RPC_ENTRY
+  NdrOleFree( void* NodeToFree );
+
+RPCRTAPI void RPC_ENTRY
+  NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
+                       PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
+RPCRTAPI void RPC_ENTRY
+  NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
+                          PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrServerInitializeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, PRPC_MESSAGE pRpcMsg );
+RPCRTAPI void RPC_ENTRY
+  NdrServerInitializeMarshall( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg  );
+RPCRTAPI void RPC_ENTRY
+  NdrServerMarshall( struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+RPCRTAPI void RPC_ENTRY
+  NdrServerUnmarshall( struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg,
+                       PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc,
+                       PFORMAT_STRING pFormat, void *pParamList );
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );
+RPCRTAPI void RPC_ENTRY
+  NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI unsigned char* RPC_ENTRY
+  NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );
+
+RPCRTAPI unsigned char * RPC_ENTRY
+  NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );
+RPCRTAPI unsigned char * RPC_ENTRY
+  NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );
+
+RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY
+  NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );
+RPCRTAPI void RPC_ENTRY
+  NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );
+RPCRTAPI int RPC_ENTRY
+  NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,
+                              unsigned char QueryType, ULONG *pRefId );
+RPCRTAPI int RPC_ENTRY
+  NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,
+                            unsigned char QueryType, void **ppPointer );
+RPCRTAPI void RPC_ENTRY
+  NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );
+RPCRTAPI int RPC_ENTRY
+  NdrFullPointerFree( PFULL_PTR_XLAT_TABLES pXlatTables, void *Pointer );
+
+RPCRTAPI void RPC_ENTRY
+  NdrRpcSsEnableAllocate( PMIDL_STUB_MESSAGE pMessage );
+RPCRTAPI void RPC_ENTRY
+  NdrRpcSsDisableAllocate( PMIDL_STUB_MESSAGE pMessage );
+RPCRTAPI void RPC_ENTRY
+  NdrRpcSmSetClientToOsf( PMIDL_STUB_MESSAGE pMessage );
+RPCRTAPI void * RPC_ENTRY
+  NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
+RPCRTAPI void RPC_ENTRY
+  NdrRpcSmClientFree( void *NodeToFree );
+RPCRTAPI void * RPC_ENTRY
+  NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
+RPCRTAPI void RPC_ENTRY
+  NdrRpcSsDefaultFree( void *NodeToFree );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+  NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__WINE_RPCNDR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h
new file mode 100644
index 0000000..363b959
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2001 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCNTERR_H__
+#define __RPCNTERR_H__
+
+#define RPC_S_OK                          ERROR_SUCCESS
+#define RPC_S_INVALID_ARG                 ERROR_INVALID_PARAMETER
+#define RPC_S_OUT_OF_MEMORY               ERROR_OUTOFMEMORY
+#define RPC_S_OUT_OF_THREADS              ERROR_MAX_THRDS_REACHED
+#define RPC_S_INVALID_LEVEL               ERROR_INVALID_PARAMETER
+#define RPC_S_BUFFER_TOO_SMALL            ERROR_INSUFFICIENT_BUFFER
+#define RPC_S_INVALID_SECURITY_DESC       ERROR_INVALID_SECURITY_DESCR
+#define RPC_S_ACCESS_DENIED               ERROR_ACCESS_DENIED
+#define RPC_S_SERVER_OUT_OF_MEMORY        ERROR_NOT_ENOUGH_SERVER_MEMORY
+#define RPC_S_ASYNC_CALL_PENDING          ERROR_IO_PENDING
+#define RPC_S_UNKNOWN_PRINCIPAL           ERROR_NONE_MAPPED
+#define RPC_S_TIMEOUT                     ERROR_TIMEOUT
+
+#define RPC_X_NO_MEMORY                   RPC_S_OUT_OF_MEMORY
+#define RPC_X_INVALID_BOUND               RPC_S_INVALID_BOUND
+#define RPC_X_INVALID_TAG                 RPC_S_INVALID_TAG
+#define RPC_X_ENUM_VALUE_TOO_LARGE        RPC_X_ENUM_VALUE_OUT_OF_RANGE
+#define RPC_X_SS_CONTEXT_MISMATCH         ERROR_INVALID_HANDLE
+#define RPC_X_INVALID_BUFFER              ERROR_INVALID_USER_BUFFER
+#define RPC_X_PIPE_APP_MEMORY             ERROR_OUTOFMEMORY
+#define RPC_X_INVALID_PIPE_OPERATION      RPC_X_WRONG_PIPE_ORDER
+
+#endif  /* __RPCNTERR_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h
new file mode 100644
index 0000000..75a0ee7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h
@@ -0,0 +1,394 @@
+/*
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCPROXY_H_VERSION__
+/* FIXME: Find an appropriate version number.  I guess something is better than nothing */
+#define __RPCPROXY_H_VERSION__ ( 399 )
+#endif
+
+#ifndef __WINE_RPCPROXY_H
+#define __WINE_RPCPROXY_H
+
+#define __midl_proxy
+
+#include <basetsd.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;
+typedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList;
+typedef const char *PCInterfaceName;
+typedef int __stdcall IIDLookupRtn( const IID *pIID, int *pIndex );
+typedef IIDLookupRtn *PIIDLookup;
+
+typedef struct tagProxyFileInfo
+{
+  const PCInterfaceProxyVtblList *pProxyVtblList;
+  const PCInterfaceStubVtblList *pStubVtblList;
+  const PCInterfaceName *pNamesArray;
+  const IID **pDelegatedIIDs;
+  const PIIDLookup pIIDLookupRtn;
+  unsigned short TableSize;
+  unsigned short TableVersion;
+  const IID **pAsyncIIDLookup;
+  LONG_PTR Filler2;
+  LONG_PTR Filler3;
+  LONG_PTR Filler4;
+} ProxyFileInfo;
+
+typedef ProxyFileInfo ExtendedProxyFileInfo;
+
+typedef struct tagCInterfaceProxyHeader
+{
+#ifdef USE_STUBLESS_PROXY
+  const void *pStublessProxyInfo;
+#endif
+  const IID *piid;
+} CInterfaceProxyHeader;
+
+#define CINTERFACE_PROXY_VTABLE(n) \
+  struct \
+  { \
+    CInterfaceProxyHeader header; \
+    void *Vtbl[n]; \
+  }
+
+typedef struct tagCInterfaceProxyVtbl
+{
+  CInterfaceProxyHeader header;
+#if defined(__GNUC__)
+  void *Vtbl[0];
+#else
+  void *Vtbl[1];
+#endif
+} CInterfaceProxyVtbl;
+
+typedef void (__RPC_STUB *PRPC_STUB_FUNCTION)(
+  IRpcStubBuffer *This,
+  IRpcChannelBuffer *_pRpcChannelBuffer,
+  PRPC_MESSAGE _pRpcMessage,
+  DWORD *pdwStubPhase);
+
+typedef struct tagCInterfaceStubHeader
+{
+  const IID *piid;
+  const MIDL_SERVER_INFO *pServerInfo;
+  ULONG DispatchTableCount;
+  const PRPC_STUB_FUNCTION *pDispatchTable;
+} CInterfaceStubHeader;
+
+typedef struct tagCInterfaceStubVtbl
+{
+  CInterfaceStubHeader header;
+  IRpcStubBufferVtbl Vtbl;
+} CInterfaceStubVtbl;
+
+typedef struct tagCStdStubBuffer
+{
+  const IRpcStubBufferVtbl *lpVtbl;
+  LONG RefCount;
+  struct IUnknown *pvServerObject;
+  const struct ICallFactoryVtbl *pCallFactoryVtbl;
+  const IID *pAsyncIID;
+  struct IPSFactoryBuffer *pPSFactory;
+} CStdStubBuffer;
+
+typedef struct tagCStdPSFactoryBuffer
+{
+  const IPSFactoryBufferVtbl *lpVtbl;
+  LONG RefCount;
+  const ProxyFileInfo **pProxyFileList;
+  LONG Filler1;
+} CStdPSFactoryBuffer;
+
+#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
+
+ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) DECLSPEC_HIDDEN;
+ULONG STDMETHODCALLTYPE NdrCStdStubBuffer2_Release(IRpcStubBuffer *This, IPSFactoryBuffer *pPSF);
+
+#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
+
+
+HRESULT WINAPI
+  CStdStubBuffer_QueryInterface( IRpcStubBuffer *This, REFIID riid, void **ppvObject );
+ULONG WINAPI
+  CStdStubBuffer_AddRef( IRpcStubBuffer *This );
+ULONG WINAPI
+  CStdStubBuffer_Release( IRpcStubBuffer *This ) DECLSPEC_HIDDEN;
+ULONG WINAPI
+  NdrCStdStubBuffer_Release( IRpcStubBuffer *This, IPSFactoryBuffer *pPSF );
+HRESULT WINAPI
+  CStdStubBuffer_Connect( IRpcStubBuffer *This, IUnknown *pUnkServer );
+void WINAPI
+  CStdStubBuffer_Disconnect( IRpcStubBuffer *This );
+HRESULT WINAPI
+  CStdStubBuffer_Invoke( IRpcStubBuffer *This, RPCOLEMESSAGE *pRpcMsg, IRpcChannelBuffer *pRpcChannelBuffer );
+IRpcStubBuffer * WINAPI
+  CStdStubBuffer_IsIIDSupported( IRpcStubBuffer *This, REFIID riid );
+ULONG WINAPI
+  CStdStubBuffer_CountRefs( IRpcStubBuffer *This );
+HRESULT WINAPI
+  CStdStubBuffer_DebugServerQueryInterface( IRpcStubBuffer *This, void **ppv );
+void WINAPI
+  CStdStubBuffer_DebugServerRelease( IRpcStubBuffer *This, void *pv );
+
+#define CStdStubBuffer_METHODS \
+  CStdStubBuffer_QueryInterface, \
+  CStdStubBuffer_AddRef, \
+  CStdStubBuffer_Release, \
+  CStdStubBuffer_Connect, \
+  CStdStubBuffer_Disconnect, \
+  CStdStubBuffer_Invoke, \
+  CStdStubBuffer_IsIIDSupported, \
+  CStdStubBuffer_CountRefs, \
+  CStdStubBuffer_DebugServerQueryInterface, \
+  CStdStubBuffer_DebugServerRelease
+
+RPCRTAPI void RPC_ENTRY
+  NdrProxyInitialize( void *This, PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,
+                      PMIDL_STUB_DESC pStubDescriptor, unsigned int ProcNum );
+RPCRTAPI void RPC_ENTRY
+  NdrProxyGetBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+  NdrProxySendReceive( void *This, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+  NdrProxyFreeBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI HRESULT RPC_ENTRY
+  NdrProxyErrorHandler( DWORD dwExceptionCode );
+
+RPCRTAPI void RPC_ENTRY
+  NdrStubInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,
+                     PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer );
+RPCRTAPI void RPC_ENTRY
+  NdrStubInitializePartial( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,
+                            PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer,
+                            ULONG RequestedBufferSize );
+void __RPC_STUB NdrStubForwardingFunction( IRpcStubBuffer *This, IRpcChannelBuffer *pChannel,
+                                           PRPC_MESSAGE pMsg, DWORD *pdwStubPhase );
+RPCRTAPI void RPC_ENTRY
+  NdrStubGetBuffer( IRpcStubBuffer *This, IRpcChannelBuffer *pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI HRESULT RPC_ENTRY
+  NdrStubErrorHandler( DWORD dwExceptionCode );
+
+RPCRTAPI HRESULT RPC_ENTRY
+  NdrDllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv, const ProxyFileInfo **pProxyFileList,
+                        const CLSID *pclsid, CStdPSFactoryBuffer *pPSFactoryBuffer );
+RPCRTAPI HRESULT RPC_ENTRY
+  NdrDllCanUnloadNow( CStdPSFactoryBuffer *pPSFactoryBuffer );
+
+RPCRTAPI HRESULT RPC_ENTRY
+  NdrDllRegisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid );
+RPCRTAPI HRESULT RPC_ENTRY
+  NdrDllUnregisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid );
+
+HRESULT __wine_register_resources( HMODULE module ) DECLSPEC_HIDDEN;
+HRESULT __wine_unregister_resources( HMODULE module ) DECLSPEC_HIDDEN;
+
+#define CSTDSTUBBUFFERRELEASE(pFactory) \
+ULONG WINAPI CStdStubBuffer_Release(IRpcStubBuffer *This) \
+  { return NdrCStdStubBuffer_Release(This, (IPSFactoryBuffer *)pFactory); }
+
+#ifdef PROXY_DELEGATION
+#define CSTDSTUBBUFFER2RELEASE(pFactory) \
+ULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *This) \
+  { return NdrCStdStubBuffer2_Release(This, (IPSFactoryBuffer *)pFactory); }
+#else
+#define CSTDSTUBBUFFER2RELEASE(pFactory)
+#endif
+
+#define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID, name##_ProxyVtblList[index]->header.piid, sizeof(IID))
+
+/*
+ * In these macros, BS stands for Binary Search. MIDL uses these to
+ * "unroll" a binary search into the module's IID_Lookup function.
+ * However, I haven't bothered to reimplement that stuff yet;
+ * I've just implemented a linear search for now.
+ */
+#define IID_BS_LOOKUP_SETUP \
+  int c;
+#define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split)
+#define IID_BS_LOOKUP_NEXT_TEST(name, split)
+#define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index) \
+  for (c=0; c<sz; c++) if (!name##_CHECK_IID(c)) { (index)=c; return 1; } \
+  return 0;
+
+/* macros used in dlldata.c files */
+#define EXTERN_PROXY_FILE(proxy) \
+    EXTERN_C const ProxyFileInfo proxy##_ProxyFileInfo DECLSPEC_HIDDEN;
+
+#define PROXYFILE_LIST_START \
+    const ProxyFileInfo * aProxyFileList[] DECLSPEC_HIDDEN = \
+    {
+
+#define REFERENCE_PROXY_FILE(proxy) \
+        & proxy##_ProxyFileInfo
+
+#define PROXYFILE_LIST_END \
+        NULL \
+    };
+
+
+/* define PROXY_CLSID to use an existing CLSID */
+/* define PROXY_CLSID_IS to specify the CLSID data of the PSFactoryBuffer */
+/* define neither to use the GUID of the first interface */
+#ifdef PROXY_CLSID
+# define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID DECLSPEC_HIDDEN;
+#else
+# ifdef PROXY_CLSID_IS
+#  define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer DECLSPEC_HIDDEN; \
+    const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
+#  define PROXY_CLSID CLSID_PSFactoryBuffer
+# else
+#  define CLSID_PSFACTORYBUFFER
+# endif
+#endif
+
+#ifndef PROXY_CLSID
+# define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] ? \
+    aProxyFileList[0]->pStubVtblList[0]->header.piid : NULL)
+#else
+# define GET_DLL_CLSID &PROXY_CLSID
+#endif
+
+#ifdef ENTRY_PREFIX
+# define __rpc_macro_expand2(a, b) a##b
+# define __rpc_macro_expand(a, b) __rpc_macro_expand2(a, b)
+# define DLLREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllRegisterServer)
+# define DLLUNREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllUnregisterServer)
+# define DLLMAIN_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllMain)
+# define DLLGETCLASSOBJECT_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllGetClassObject)
+# define DLLCANUNLOADNOW_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllCanUnloadNow)
+#else
+# define DLLREGISTERSERVER_ENTRY DllRegisterServer
+# define DLLUNREGISTERSERVER_ENTRY DllUnregisterServer
+# define DLLMAIN_ENTRY DllMain
+# define DLLGETCLASSOBJECT_ENTRY DllGetClassObject
+# define DLLCANUNLOADNOW_ENTRY DllCanUnloadNow
+#endif
+
+#ifdef WINE_REGISTER_DLL
+# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources( hProxyDll )
+# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources( hProxyDll )
+#else
+# define WINE_DO_REGISTER_DLL(pfl, clsid)   return NdrDllRegisterProxy( hProxyDll, (pfl), (clsid) )
+# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return NdrDllUnregisterProxy( hProxyDll, (pfl), (clsid) )
+#endif
+
+
+#define DLLDATA_GETPROXYDLLINFO(pfl, rclsid) \
+    void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \
+                                   const CLSID **ppClsid) DECLSPEC_HIDDEN; \
+    void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \
+                                   const CLSID **ppClsid) \
+    { \
+        *ppProxyFileInfo = (pfl); \
+        *ppClsid = (rclsid); \
+    }
+
+#define DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, factory) \
+    HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, void **ppv) DECLSPEC_HIDDEN; \
+    HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, \
+                                           void **ppv) \
+    { \
+        return NdrDllGetClassObject(rclsid, riid, ppv, (pfl), \
+                                    (factory_clsid), factory); \
+    }
+
+#define DLLCANUNLOADNOW(factory) \
+    HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) DECLSPEC_HIDDEN; \
+    HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) \
+    { \
+        return NdrDllCanUnloadNow((factory)); \
+    }
+
+#define REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid) \
+    HINSTANCE hProxyDll DECLSPEC_HIDDEN = NULL; \
+    \
+    BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) DECLSPEC_HIDDEN; \
+    BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, \
+                              LPVOID lpvReserved) \
+    { \
+        if (fdwReason == DLL_PROCESS_ATTACH) \
+        { \
+            DisableThreadLibraryCalls(hinstDLL); \
+            hProxyDll = hinstDLL; \
+        } \
+        return TRUE; \
+    } \
+    \
+    HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \
+    HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) \
+    { \
+        WINE_DO_REGISTER_DLL( (pfl), (factory_clsid) ); \
+    } \
+    \
+    HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \
+    HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) \
+    { \
+        WINE_DO_UNREGISTER_DLL( (pfl), (factory_clsid) ); \
+    }
+
+#if defined(REGISTER_PROXY_DLL) || defined(WINE_REGISTER_DLL)
+# define DLLREGISTRY_ROUTINES(pfl, factory_clsid) \
+    REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid)
+#else
+# define DLLREGISTRY_ROUTINES(pfl, factory_clsid)
+#endif
+
+#define DLLDATA_ROUTINES(pfl, factory_clsid) \
+    CLSID_PSFACTORYBUFFER \
+    CStdPSFactoryBuffer DECLSPEC_HIDDEN gPFactory = { NULL, 0, NULL, 0 }; \
+    DLLDATA_GETPROXYDLLINFO(pfl, factory_clsid) \
+    DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, &gPFactory) \
+    DLLCANUNLOADNOW(&gPFactory) \
+    CSTDSTUBBUFFERRELEASE(&gPFactory) \
+    CSTDSTUBBUFFER2RELEASE(&gPFactory) \
+    DLLREGISTRY_ROUTINES(pfl, factory_clsid)
+
+#if 0
+
+RPCRTAPI HRESULT RPC_ENTRY
+  CreateProxyFromTypeInfo( LPTYPEINFO pTypeInfo, LPUNKNOWN pUnkOuter, REFIID riid,
+                           LPRPCPROXYBUFFER *ppProxy, LPVOID *ppv );
+RPCRTAPI HRESULT RPC_ENTRY
+  CreateStubFromTypeInfo( LPTYPEINFO pTypeInfo, REFIID riid, LPUNKNOWN pUnkServer,
+                          LPRPCSTUBBUFFER *ppStub );
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WINE_RPCPROXY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h
new file mode 100644
index 0000000..aa14ee5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2011 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCSAL_H_VERSION__
+# define __RPCSAL_H_VERSION__  100
+#endif
+
+#define __RPC__deref_in
+#define __RPC__deref_in_opt
+#define __RPC__deref_in_string
+#define __RPC__deref_in_opt_string
+#define __RPC__deref_in_ecount(size)
+#define __RPC__deref_in_ecount_opt(size)
+#define __RPC__deref_in_ecount_opt_string(size)
+#define __RPC__deref_in_ecount_full(size)
+#define __RPC__deref_in_ecount_full_opt(size)
+#define __RPC__deref_in_ecount_full_string(size)
+#define __RPC__deref_in_ecount_full_opt_string(size)
+#define __RPC__deref_in_ecount_part(size, length)
+#define __RPC__deref_in_ecount_part_opt(size, length)
+#define __RPC__deref_in_xcount(size)
+#define __RPC__deref_in_xcount_opt(size)
+#define __RPC__deref_in_xcount_opt_string(size)
+#define __RPC__deref_in_xcount_full(size)
+#define __RPC__deref_in_xcount_full_opt(size)
+#define __RPC__deref_in_xcount_full_string(size)
+#define __RPC__deref_in_xcount_full_opt_string(size)
+#define __RPC__deref_in_xcount_part(size, length)
+#define __RPC__deref_in_xcount_part_opt(size, length)
+
+#define __RPC__deref_inout
+#define __RPC__deref_inout_opt
+#define __RPC__deref_inout_string
+#define __RPC__deref_inout_opt_string
+#define __RPC__deref_inout_ecount_opt(size)
+#define __RPC__deref_inout_ecount_full(size)
+#define __RPC__deref_inout_ecount_full_opt(size)
+#define __RPC__deref_inout_ecount_full_string(size)
+#define __RPC__deref_inout_ecount_full_opt_string(size)
+#define __RPC__deref_inout_ecount_part_opt(size, length)
+#define __RPC__deref_inout_xcount_opt(size)
+#define __RPC__deref_inout_xcount_full(size)
+#define __RPC__deref_inout_xcount_full_opt(size)
+#define __RPC__deref_inout_xcount_full_string(size)
+#define __RPC__deref_inout_xcount_full_opt_string(size)
+#define __RPC__deref_inout_xcount_part_opt(size, length)
+
+#define __RPC__deref_out
+#define __RPC__deref_out_opt
+#define __RPC__deref_out_string
+#define __RPC__deref_out_opt_string
+#define __RPC__deref_out_ecount(size)
+#define __RPC__deref_out_ecount_opt(size)
+#define __RPC__deref_out_ecount_full(size)
+#define __RPC__deref_out_ecount_full_opt(size)
+#define __RPC__deref_out_ecount_full_string(size)
+#define __RPC__deref_out_ecount_full_opt_string(size)
+#define __RPC__deref_out_ecount_part(size, length)
+#define __RPC__deref_out_ecount_part_opt(size, length)
+#define __RPC__deref_out_xcount(size)
+#define __RPC__deref_out_xcount_opt(size)
+#define __RPC__deref_out_xcount_full(size)
+#define __RPC__deref_out_xcount_full_opt(size)
+#define __RPC__deref_out_xcount_full_string(size)
+#define __RPC__deref_out_xcount_full_opt_string(size)
+#define __RPC__deref_out_xcount_part(size, length)
+#define __RPC__deref_out_xcount_part_opt(size, length)
+
+#define __RPC__deref_opt_in
+#define __RPC__deref_opt_in_opt
+#define __RPC__deref_opt_in_string
+#define __RPC__deref_opt_in_opt_string
+
+#define __RPC__deref_opt_inout
+#define __RPC__deref_opt_inout_opt
+#define __RPC__deref_opt_inout_string
+#define __RPC__deref_opt_inout_opt_string
+#define __RPC__deref_opt_inout_ecount(size)
+#define __RPC__deref_opt_inout_ecount_opt(size)
+#define __RPC__deref_opt_inout_ecount_full(size)
+#define __RPC__deref_opt_inout_ecount_full_opt(size)
+#define __RPC__deref_opt_inout_ecount_full_string(size)
+#define __RPC__deref_opt_inout_ecount_full_opt_string(size)
+#define __RPC__deref_opt_inout_ecount_part(size, length)
+#define __RPC__deref_opt_inout_ecount_part_opt(size, length)
+#define __RPC__deref_opt_inout_xcount(size)
+#define __RPC__deref_opt_inout_xcount_opt(size)
+#define __RPC__deref_opt_inout_xcount_full(size)
+#define __RPC__deref_opt_inout_xcount_full_opt(size)
+#define __RPC__deref_opt_inout_xcount_full_string(size)
+#define __RPC__deref_opt_inout_xcount_full_opt_string(size)
+#define __RPC__deref_opt_inout_xcount_part(size, length)
+#define __RPC__deref_opt_inout_xcount_part_opt(size, length)
+
+#define __RPC__in
+#define __RPC__in_opt
+#define __RPC__in_string
+#define __RPC__in_opt_string
+#define __RPC__in_ecount(size)
+#define __RPC__in_ecount_opt(size)
+#define __RPC__in_ecount_full(size)
+#define __RPC__in_ecount_full_opt(size)
+#define __RPC__in_ecount_full_string(size)
+#define __RPC__in_ecount_full_opt_string(size)
+#define __RPC__in_ecount_part(size, length)
+#define __RPC__in_ecount_part_opt(size, length)
+#define __RPC__in_xcount(size)
+#define __RPC__in_xcount_opt(size)
+#define __RPC__in_xcount_full(size)
+#define __RPC__in_xcount_full_opt(size)
+#define __RPC__in_xcount_full_string(size)
+#define __RPC__in_xcount_full_opt_string(size)
+#define __RPC__in_xcount_part(size, length)
+#define __RPC__in_xcount_part_opt(size, length)
+
+#define __RPC__inout
+#define __RPC__inout_opt
+#define __RPC__inout_string
+#define __RPC__inout_opt_string
+#define __RPC__opt_inout
+#define __RPC__inout_ecount(size)
+#define __RPC__inout_ecount_opt(size)
+#define __RPC__inout_ecount_full(size)
+#define __RPC__inout_ecount_full_opt(size)
+#define __RPC__inout_ecount_full_string(size)
+#define __RPC__inout_ecount_full_opt_string(size)
+#define __RPC__inout_ecount_part(size, length)
+#define __RPC__inout_ecount_part_opt(size, length)
+#define __RPC__inout_xcount(size)
+#define __RPC__inout_xcount_opt(size)
+#define __RPC__inout_xcount_full(size)
+#define __RPC__inout_xcount_full_opt(size)
+#define __RPC__inout_xcount_full_string(size)
+#define __RPC__inout_xcount_full_opt_string(size)
+#define __RPC__inout_xcount_part(size, length)
+#define __RPC__inout_xcount_part_opt(size, length)
+
+#define __RPC__out
+#define __RPC__out_ecount(size)
+#define __RPC__out_ecount_full(size)
+#define __RPC__out_ecount_full_string(size)
+#define __RPC__out_ecount_part(size, length)
+#define __RPC__out_xcount(size)
+#define __RPC__out_xcount_full(size)
+#define __RPC__out_xcount_full_string(size)
+#define __RPC__out_xcount_part(size, length)
+
+#define __RPC_full_pointer
+#define __RPC_ref_pointer
+#define __RPC_string
+#define __RPC_unique_pointer
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl
new file mode 100644
index 0000000..8dd3169
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    local,
+    object,
+    uuid(0c733a7c-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRowset : IUnknown
+{
+    typedef DWORD DBROWOPTIONS;
+
+    HRESULT AddRefRows([in] DBCOUNTITEM cRows,
+                       [in, size_is(cRows)] const HROW rghRows[],
+                       [out, size_is(cRows)] DBREFCOUNT rgRefCounts[],
+                       [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);
+
+    HRESULT GetData([in] HROW hRow,
+                    [in] HACCESSOR hAccessor,
+                    [out] void *pData);
+
+    HRESULT GetNextRows([in] HCHAPTER hReserved,
+                        [in] DBROWOFFSET lRowsOffset,
+                        [in] DBROWCOUNT cRows,
+                        [out] DBCOUNTITEM *pcRowObtained,
+                        [out, size_is(,cRows)] HROW **prghRows);
+
+    HRESULT ReleaseRows([in] DBCOUNTITEM cRows,
+                        [in, size_is(cRows)] const HROW rghRows[],
+                        [in, size_is(cRows)] DBROWOPTIONS rgRowOptions[],
+                        [out, size_is(cRows)] DBREFCOUNT rgRefCounts[],
+                        [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);
+
+    HRESULT RestartPosition([in] HCHAPTER hReserved);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl
new file mode 100644
index 0000000..a9641f3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a55-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRowsetInfo : IUnknown
+{
+    [local]
+    HRESULT GetProperties([in] const ULONG cPropertyIDSets,
+                          [in, size_is(cPropertyIDSets), annotation("__in_ecount_opt(cPropertyIDSets)")] const DBPROPIDSET rgPropertyIDSets[],
+                          [in, out, annotation("__out")] ULONG *pcPropertySets,
+                          [out, size_is(,*pcPropertySets), annotation("__deref_out_ecount_opt(*pcPropertySets)")] DBPROPSET **prgPropertySets);
+
+    [call_as(GetProperties)]
+    HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets,
+                                [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+                                [in, out] ULONG *pcPropertySets,
+                                [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,
+                                [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetReferencedRowset([in] DBORDINAL iOrdinal,
+                                [in, annotation("__in")] REFIID riid,
+                                [out, iid_is(riid), annotation("deref_out_opt")] IUnknown **ppReferencedRowset);
+
+    [call_as(GetReferencedRowset)]
+    HRESULT RemoteGetReferencedRowset([in] DBORDINAL iOrdinal,
+                                      [in] REFIID riid,
+                                      [out, iid_is(riid)] IUnknown **ppReferencedRowset,
+                                      [out] IErrorInfo **ppErrorInfoRem);
+    [local]
+    HRESULT GetSpecification([in, annotation("__in")] REFIID riid,
+                             [out, iid_is(riid), annotation("__deref_out_opt")] IUnknown **ppSpecification);
+
+    [call_as(GetSpecification)]
+    HRESULT RemoteGetSpecification([in] REFIID riid,
+                                   [out, iid_is(riid)] IUnknown **ppSpecification,
+                                   [out] IErrorInfo **ppErrorInfoRem);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl
new file mode 100644
index 0000000..c5f3068
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    local,
+    object,
+    uuid(0c733a7d-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRowsetLocate : IRowset
+{
+    typedef DWORD DBCOMPARE;
+
+    enum DBCOMPAREENUM
+    {
+        DBCOMPARE_LT,
+        DBCOMPARE_EQ,
+        DBCOMPARE_GT,
+        DBCOMPARE_NE,
+        DBCOMPARE_NOTCOMPARABLE
+    };
+
+    HRESULT Compare([in] HCHAPTER hReserved,
+                    [in] DBBKMARK cbBookmark1,
+                    [in, size_is(cbBookmark1)] const BYTE *pBookmark1,
+                    [in] DBBKMARK cbBookmark2,
+                    [in, size_is(cbBookmark2)] const BYTE *pBookmark2,
+                    [out] DBCOMPARE *pComparison);
+
+    HRESULT GetRowsAt([in] HWATCHREGION hReserved1,
+                      [in] HCHAPTER hReserved2,
+                      [in] DBBKMARK cbBookmark,
+                      [in, size_is(cbBookmark)] const BYTE *pBookmark,
+                      [in] DBROWOFFSET lRowsOffset,
+                      [in] DBROWCOUNT cRows,
+                      [out] DBCOUNTITEM *pcRowsObtained,
+                      [out, size_is(,cRows)] HROW **prghRows);
+
+    HRESULT GetRowsByBookmark([in] HCHAPTER hReserved,
+                              [in] DBCOUNTITEM cRows,
+                              [in, size_is(cRows)] const DBBKMARK rgcbBookmarks[],
+                              [in, size_is(cRows)] const BYTE *rgpBookmarks[],
+                              [out, size_is(cRows)] HROW rghRows[],
+                              [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);
+
+    HRESULT Hash([in] HCHAPTER hReserved,
+                 [in] DBBKMARK cBookmarks,
+                 [in, size_is(cBookmarks)] const DBBKMARK rgcbBookmarks[],
+                 [in, size_is(cBookmarks)] const BYTE *rgpBookmarks[],
+                 [out, size_is(cBookmarks)] DBHASHVALUE rgHashedValues[],
+                 [out, size_is(cBookmarks)] DBROWSTATUS rgBookmarkStatus[]);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl
new file mode 100644
index 0000000..e9fa0b7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2013 Nikolay Sivov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a83-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IRowsetNotify : IUnknown
+{
+    [local]
+    HRESULT OnFieldChange([in] IRowset *rowset,
+                          [in] HROW row,
+                          [in] DBORDINAL ccols,
+                          [in, size_is((ULONG)ccols)] DBORDINAL *columns,
+                          [in] DBREASON reason,
+                          [in] DBEVENTPHASE phase,
+                          [in] BOOL cantdeny);
+
+    [call_as(OnFieldChange)]
+    HRESULT RemoteOnFieldChange(
+                          [in] IRowset *rowset,
+                          [in] HROW row,
+                          [in] DBORDINAL ccols,
+                          [in, size_is((ULONG)ccols)] DBORDINAL *columns,
+                          [in] DBREASON reason,
+                          [in] DBEVENTPHASE phase,
+                          [in] BOOL cantdeny);
+
+    [local]
+    HRESULT OnRowChange([in] IRowset *rowset,
+                        [in] DBCOUNTITEM rows,
+                        [in, size_is((ULONG)rows)] HROW *hrows,
+                        [in] DBREASON reason,
+                        [in] DBEVENTPHASE phase,
+                        [in] BOOL cantdeny);
+
+    [call_as(OnRowChange)]
+    HRESULT RemoteOnRowChange(
+                        [in] IRowset *rowset,
+                        [in] DBCOUNTITEM rows,
+                        [in, size_is((ULONG)rows)] HROW *hrows,
+                        [in] DBREASON reason,
+                        [in] DBEVENTPHASE phase,
+                        [in] BOOL cantdeny);
+
+    [local]
+    HRESULT OnRowsetChange([in] IRowset *rowset,
+                           [in] DBREASON reason,
+                           [in] DBEVENTPHASE phase,
+                           [in] BOOL cantdeny);
+
+    [call_as(OnRowsetChange)]
+    HRESULT RemoteOnRowsetChange(
+                           [in] IRowset *rowset,
+                           [in] DBREASON reason,
+                           [in] DBEVENTPHASE phase,
+                           [in] BOOL cantdeny);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h
new file mode 100644
index 0000000..3008013
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h
@@ -0,0 +1,58 @@
+/*
+ * Rtutils.h - Routing utilities / RRAS tracing
+ *
+ * Copyright (C) 2009 Alexander Scott-Johns
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _RTUTILS_H_
+#define _RTUTILS_H_
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI TraceRegisterExW(LPCWSTR name, DWORD flags);
+DWORD WINAPI TraceRegisterExA(LPCSTR name, DWORD flags);
+#define      TraceRegisterEx  WINELIB_NAME_AW(TraceRegisterEx)
+
+#define TraceRegisterW(name) TraceRegisterExW((name), 0)
+#define TraceRegisterA(name) TraceRegisterExA((name), 0)
+#define TraceRegister  WINELIB_NAME_AW(TraceRegister)
+
+/* Flags for TraceRegisterEx(W|A) */
+#define TRACE_USE_FILE     1
+#define TRACE_USE_CONSOLE  2
+
+/* Return value of TraceRegisterEx(W|A) */
+#define INVALID_TRACEID    0xFFFFFFFF
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTUTILS_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h
new file mode 100644
index 0000000..a1922a5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h
@@ -0,0 +1,105 @@
+/*
+ * Winscard definitions
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* Note that if you included winerror.h directly or indirectly,
+ * none of these definitions will be used!
+ */
+#ifndef SCARD_S_SUCCESS
+
+#define FACILITY_SYSTEM                       0
+#define FACILITY_SCARD                       16
+
+#define STATUS_SEVERITY_INFORMATIONAL    ((NTSTATUS) 0x00000001)
+#define STATUS_SEVERITY_WARNING          ((NTSTATUS) 0x00000002)
+#define STATUS_SEVERITY_ERROR            ((NTSTATUS) 0x00000003)
+
+#define SCARD_S_SUCCESS                                    NO_ERROR
+#define SCARD_F_INTERNAL_ERROR                             ((DWORD)0x80100001)
+#define SCARD_E_CANCELLED                                  ((DWORD)0x80100002)
+#define SCARD_E_INVALID_HANDLE                             ((DWORD)0x80100003)
+#define SCARD_E_INVALID_PARAMETER                          ((DWORD)0x80100004)
+#define SCARD_E_INVALID_TARGET                             ((DWORD)0x80100005)
+#define SCARD_E_NO_MEMORY                                  ((DWORD)0x80100006)
+#define SCARD_F_WAITED_TOO_LONG                            ((DWORD)0x80100007)
+#define SCARD_E_INSUFFICIENT_BUFFER                        ((DWORD)0x80100008)
+#define SCARD_E_UNKNOWN_READER                             ((DWORD)0x80100009)
+#define SCARD_E_TIMEOUT                                    ((DWORD)0x8010000A)
+#define SCARD_E_SHARING_VIOLATION                          ((DWORD)0x8010000B)
+#define SCARD_E_NO_SMARTCARD                               ((DWORD)0x8010000C)
+#define SCARD_E_UNKNOWN_CARD                               ((DWORD)0x8010000D)
+#define SCARD_E_CANT_DISPOSE                               ((DWORD)0x8010000E)
+#define SCARD_E_PROTO_MISMATCH                             ((DWORD)0x8010000F)
+#define SCARD_E_NOT_READY                                  ((DWORD)0x80100010)
+#define SCARD_E_INVALID_VALUE                              ((DWORD)0x80100011)
+#define SCARD_E_SYSTEM_CANCELLED                           ((DWORD)0x80100012)
+#define SCARD_F_COMM_ERROR                                 ((DWORD)0x80100013)
+#define SCARD_F_UNKNOWN_ERROR                              ((DWORD)0x80100014)
+#define SCARD_E_INVALID_ATR                                ((DWORD)0x80100015)
+#define SCARD_E_NOT_TRANSACTED                             ((DWORD)0x80100016)
+#define SCARD_E_READER_UNAVAILABLE                         ((DWORD)0x80100017)
+#define SCARD_P_SHUTDOWN                                   ((DWORD)0x80100018)
+#define SCARD_E_PCI_TOO_SMALL                              ((DWORD)0x80100019)
+#define SCARD_E_READER_UNSUPPORTED                         ((DWORD)0x8010001A)
+#define SCARD_E_DUPLICATE_READER                           ((DWORD)0x8010001B)
+#define SCARD_E_CARD_UNSUPPORTED                           ((DWORD)0x8010001C)
+#define SCARD_E_NO_SERVICE                                 ((DWORD)0x8010001D)
+#define SCARD_E_SERVICE_STOPPED                            ((DWORD)0x8010001E)
+#define SCARD_E_UNEXPECTED                                 ((DWORD)0x8010001F)
+#define SCARD_E_ICC_INSTALLATION                           ((DWORD)0x80100020)
+#define SCARD_E_ICC_CREATEORDER                            ((DWORD)0x80100021)
+#define SCARD_E_UNSUPPORTED_FEATURE                        ((DWORD)0x80100022)
+#define SCARD_E_DIR_NOT_FOUND                              ((DWORD)0x80100023)
+#define SCARD_E_FILE_NOT_FOUND                             ((DWORD)0x80100024)
+#define SCARD_E_NO_DIR                                     ((DWORD)0x80100025)
+#define SCARD_E_NO_FILE                                    ((DWORD)0x80100026)
+#define SCARD_E_NO_ACCESS                                  ((DWORD)0x80100027)
+#define SCARD_E_WRITE_TOO_MANY                             ((DWORD)0x80100028)
+#define SCARD_E_BAD_SEEK                                   ((DWORD)0x80100029)
+#define SCARD_E_INVALID_CHV                                ((DWORD)0x8010002A)
+#define SCARD_E_UNKNOWN_RES_MNG                            ((DWORD)0x8010002B)
+#define SCARD_E_NO_SUCH_CERTIFICATE                        ((DWORD)0x8010002C)
+#define SCARD_E_CERTIFICATE_UNAVAILABLE                    ((DWORD)0x8010002D)
+#define SCARD_E_NO_READERS_AVAILABLE                       ((DWORD)0x8010002E)
+#define SCARD_E_COMM_DATA_LOST                             ((DWORD)0x8010002F)
+#define SCARD_E_NO_KEY_CONTAINER                           ((DWORD)0x80100030)
+#define SCARD_E_SERVER_TOO_BUSY                            ((DWORD)0x80100031)
+#define SCARD_W_UNSUPPORTED_CARD                           ((DWORD)0x80100065)
+#define SCARD_W_UNRESPONSIVE_CARD                          ((DWORD)0x80100066)
+#define SCARD_W_UNPOWERED_CARD                             ((DWORD)0x80100067)
+#define SCARD_W_RESET_CARD                                 ((DWORD)0x80100068)
+#define SCARD_W_REMOVED_CARD                               ((DWORD)0x80100069)
+#define SCARD_W_SECURITY_VIOLATION                         ((DWORD)0x8010006A)
+#define SCARD_W_WRONG_CHV                                  ((DWORD)0x8010006B)
+#define SCARD_W_CHV_BLOCKED                                ((DWORD)0x8010006C)
+#define SCARD_W_EOF                                        ((DWORD)0x8010006D)
+#define SCARD_W_CANCELLED_BY_USER                          ((DWORD)0x8010006E)
+#define SCARD_W_CARD_NOT_AUTHENTICATED                     ((DWORD)0x8010006F)
+#define SCARD_W_CACHE_ITEM_NOT_FOUND                       ((DWORD)0x80100070)
+#define SCARD_W_CACHE_ITEM_STALE                           ((DWORD)0x80100071)
+#define SCARD_W_CACHE_ITEM_TOO_BIG                         ((DWORD)0x80100072)
+
+#endif /* SCARD_S_SUCCESS */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h
new file mode 100644
index 0000000..bee7bb2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2005 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SCHANNEL_H__
+#define __WINE_SCHANNEL_H__
+
+#include <wincrypt.h>
+
+/* Package names */
+#define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
+#if defined(__GNUC__)
+#define UNISP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',\
+ 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+#define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
+#else
+static const WCHAR UNISP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',
+ 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define UNISP_NAME WINELIB_NAME_AW(UNISP_NAME_)
+
+#define SSL2SP_NAME_A   "Microsoft SSL 2.0"
+#if defined(__GNUC__)
+#define SSL2SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','S','S','L',' ','2','.','0',0 }
+#elif defined(_MSC_VER)
+#define SSL2SP_NAME_W  L"Microsoft SSL 2.0"
+#else
+static const WCHAR SSL2SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','S','S','L',' ','2','.','0',0 };
+#endif
+#define SSL2SP_NAME WINELIB_NAME_AW(SSL2SP_NAME_)
+
+#define SSL3SP_NAME_A   "Microsoft SSL 3.0"
+#if defined(__GNUC__)
+#define SSL3SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','S','S','L',' ','3','.','0',0 }
+#elif defined(_MSC_VER)
+#define SSL3SP_NAME_W  L"Microsoft SSL 3.0"
+#else
+static const WCHAR SSL3SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','S','S','L',' ','3','.','0',0 };
+#endif
+#define SSL3SP_NAME WINELIB_NAME_AW(SSL3SP_NAME_)
+
+#define TLS1SP_NAME_A   "Microsoft TLS 1.0"
+#if defined(__GNUC__)
+#define TLS1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','T','L','S',' ','1','.','0',0 }
+#elif defined(_MSC_VER)
+#define TLS1SP_NAME_W  L"Microsoft TLS 1.0"
+#else
+static const WCHAR TLS1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','T','L','S',' ','1','.','0',0 };
+#endif
+#define TLS1SP_NAME WINELIB_NAME_AW(TLS1SP_NAME_)
+
+#define PCT1SP_NAME_A   "Microsoft PCT 1.0"
+#if defined(__GNUC__)
+#define PCT1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','P','C','T',' ','1','.','0',0 }
+#elif defined(_MSC_VER)
+#define PCT1SP_NAME_W  L"Microsoft PCT 1.0"
+#else
+static const WCHAR PCT1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','P','C','T',' ','1','.','0',0 };
+#endif
+#define PCT1SP_NAME WINELIB_NAME_AW(PCT1SP_NAME_)
+
+#define SCHANNEL_NAME_A "Schannel"
+#if defined(__GNUC__)
+#define SCHANNEL_NAME_W (const WCHAR []){ 'S','c','h','a','n','n','e','l',0 }
+#elif defined(_MSC_VER)
+#define SCHANNEL_NAME_W  L"Schannel"
+#else
+static const WCHAR SCHANNEL_NAME_W[] = { 'S','c','h','a','n','n','e','l',0 };
+#endif
+#define SCHANNEL_NAME WINELIB_NAME_AW(SCHANNEL_NAME_)
+
+#define SCH_CRED_V1           1
+#define SCH_CRED_V2           2
+#define SCH_CRED_VERSION      2
+#define SCH_CRED_V3           3
+#define SCHANNEL_CRED_VERSION 4
+
+#define SCHANNEL_RENEGOTIATE 0
+#define SCHANNEL_SHUTDOWN    1
+#define SCHANNEL_ALERT       2
+#define SCHANNEL_SESSION     3
+
+#define SP_PROT_ALL           0xffffffff
+#define SP_PROT_UNI_CLIENT    0x80000000
+#define SP_PROT_UNI_SERVER    0x40000000
+#define SP_PROT_TLS1_2_CLIENT 0x00000800
+#define SP_PROT_TLS1_2_SERVER 0x00000400
+#define SP_PROT_TLS1_1_CLIENT 0x00000200
+#define SP_PROT_TLS1_1_SERVER 0x00000100
+#define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT
+#define SP_PROT_TLS1_0_SERVER SP_PROT_TLS1_SERVER
+#define SP_PROT_TLS1_CLIENT   0x00000080
+#define SP_PROT_TLS1_SERVER   0x00000040
+#define SP_PROT_SSL3_CLIENT   0x00000020
+#define SP_PROT_SSL3_SERVER   0x00000010
+#define SP_PROT_SSL2_CLIENT   0x00000008
+#define SP_PROT_SSL2_SERVER   0x00000004
+#define SP_PROT_PCT1_CLIENT   0x00000002
+#define SP_PROT_PCT1_SERVER   0x00000001
+#define SP_PROT_NONE          0x00000000
+
+#define SP_PROT_UNI                (SP_PROT_UNI_CLIENT | SP_PROT_UNI_SERVER)
+#define SP_PROT_TLS1_2             (SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_2_SERVER)
+#define SP_PROT_TLS1_1             (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_1_SERVER)
+#define SP_PROT_TLS1_0             (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_0_SERVER)
+#define SP_PROT_TLS1               (SP_PROT_TLS1_CLIENT | SP_PROT_TLS1_SERVER)
+#define SP_PROT_SSL3               (SP_PROT_SSL3_CLIENT | SP_PROT_SSL3_SERVER)
+#define SP_PROT_SSL2               (SP_PROT_SSL2_CLIENT | SP_PROT_SSL2_SERVER)
+#define SP_PROT_PCT1               (SP_PROT_PCT1_CLIENT | SP_PROT_PCT1_SERVER)
+
+#define SP_PROT_SSL3TLS1_CLIENTS   (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_CLIENT)
+#define SP_PROT_SSL3TLS1_SERVERS   (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_SERVER)
+#define SP_PROT_SSL3TLS1_X_CLIENTS (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_X_CLIENT)
+#define SP_PROT_SSL3TLS1_X_SERVERS (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_X_SERVER)
+#define SP_PROT_TLS1_X_CLIENT      (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)
+#define SP_PROT_TLS1_X_SERVER      (SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)
+#define SP_PROT_TLS1_1PLUS_CLIENT  (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)
+#define SP_PROT_TLS1_1PLUS_SERVER  (SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)
+#define SP_PROT_CLIENTS            (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT \
+                                  | SP_PROT_TLS1_CLIENT | SP_PROT_UNI_CLIENT)
+#define SP_PROT_SERVERS            (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER \
+                                  | SP_PROT_TLS1_SERVER | SP_PROT_UNI_SERVER)
+#define SP_PROT_X_CLIENTS          (SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT)
+#define SP_PROT_X_SERVERS          (SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER)
+
+#define SP_PROT_SSL3TLS1           (SP_PROT_SSL3 | SP_PROT_TLS1)
+#define SP_PROT_SSL3TLS1_X         (SP_PROT_SSL3 | SP_PROT_TLS1_X)
+#define SP_PROT_TLS1_X             (SP_PROT_TLS1_X_CLIENT | SP_PROT_TLS1_X_SERVER)
+#define SP_PROT_TLS1_1PLUS         (SP_PROT_TLS1_1PLUS_CLIENT | SP_PROT_TLS1_1PLUS_SERVER)
+
+#define SCH_CRED_NO_SYSTEM_MAPPER                    2
+#define SCH_CRED_NO_SERVERNAME_CHECK                 4
+#define SCH_CRED_MANUAL_CRED_VALIDATION              8
+#define SCH_CRED_NO_DEFAULT_CREDS                    16
+#define SCH_CRED_AUTO_CRED_VALIDATION                32
+#define SCH_CRED_USE_DEFAULT_CREDS                   64
+#define SCH_CRED_REVOCATION_CHECK_CHAIN_END_CERT     256
+#define SCH_CRED_REVOCATION_CHECK_CHAIN              512
+#define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 1024
+#define SCH_CRED_IGNORE_NO_REVOCATION_CHECK          2048
+#define SCH_CRED_IGNORE_REVOCATION_OFFLINE           4096
+
+#define SECPKG_ATTR_ISSUER_LIST         0x50
+#define SECPKG_ATTR_REMOTE_CRED         0x51
+#define SECPKG_ATTR_LOCAL_CRED          0x52
+#define SECPKG_ATTR_REMOTE_CERT_CONTEXT 0x53
+#define SECPKG_ATTR_LOCAL_CERT_CONTEXT  0x54
+#define SECPKG_ATTR_ROOT_STORE          0x55
+#define SECPKG_ATTR_SUPPORTED_ALGS      0x56
+#define SECPKG_ATTR_CIPHER_STRENGTHS    0x57
+#define SECPKG_ATTR_SUPPORTED_PROTOCOLS 0x58
+#define SECPKG_ATTR_ISSUER_LIST_EX      0x59
+#define SECPKG_ATTR_CONNECTION_INFO     0x5a
+#define SECPKG_ATTR_EAP_KEY_BLOCK       0x5b
+#define SECPKG_ATTR_MAPPED_CRED_ATTR    0x5c
+#define SECPKG_ATTR_SESSION_INFO        0x5d
+#define SECPKG_ATTR_APP_DATA            0x5e
+
+#define UNISP_RPC_ID 14
+
+struct _HMAPPER;
+
+typedef struct _SCHANNEL_CRED
+{
+    DWORD dwVersion;
+    DWORD cCreds;
+    PCCERT_CONTEXT *paCred;
+    HCERTSTORE hRootStore;
+    DWORD cMappers;
+    struct _HMAPPER **aphMappers;
+    DWORD cSupportedAlgs;
+    ALG_ID *palgSupportedAlgs;
+    DWORD grbitEnabledProtocols;
+    DWORD dwMinimumCipherStrength;
+    DWORD dwMaximumCipherStrength;
+    DWORD dwSessionLifespan;
+    DWORD dwFlags;
+    DWORD dwCredFormat;
+} SCHANNEL_CRED, *PSCHANNEL_CRED;
+
+typedef struct _SecPkgCred_SupportedAlgs
+{
+    DWORD cSupportedAlgs;
+    ALG_ID *palgSupportedAlgs;
+} SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs;
+
+typedef struct _SecPkgCred_CipherStrengths
+{
+    DWORD dwMinimumCipherStrength;
+    DWORD dwMaximumCipherStrength;
+} SecPkgCred_CipherStrengths, *PSecPkgCred_CipherStrengths;
+
+typedef struct _SecPkgCred_SupportedProtocols
+{
+    DWORD grbitProtocol;
+} SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols;
+
+typedef struct _SecPkgContext_IssuerListInfoEx
+{
+    PCERT_NAME_BLOB aIssuers;
+    DWORD cIssuers;
+} SecPkgContext_IssuerListInfoEx, *PSecPkgContext_IssuerListInfoEx;
+
+typedef struct _SecPkgContext_ConnectionInfo
+{
+    DWORD dwProtocol;
+    ALG_ID aiCipher;
+    DWORD dwCipherStrength;
+    ALG_ID aiHash;
+    DWORD dwHashStrength;
+    ALG_ID aiExch;
+    DWORD dwExchStrength;
+} SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo;
+
+#endif /* __WINE_SCHANNEL_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h
new file mode 100644
index 0000000..a8f471e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2003 Kevin Koltzau
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SCHEMADEF_H
+#define __WINE_SCHEMADEF_H
+
+#define BEGIN_TM_SCHEMA(name)
+#define END_TM_SCHEMA(name)
+
+#define BEGIN_TM_ENUM(name)                enum name {
+#define TM_ENUM(value, prefix, name)           prefix##_##name = (value),
+#define END_TM_ENUM()                      };
+
+#define BEGIN_TM_PROPS()                   enum PropValues { \
+                                               DummyProp = 49,
+#define TM_PROP(value, prefix, name, type)     prefix##_##name = (value),
+#define END_TM_PROPS()                     };
+
+#define BEGIN_TM_CLASS_PARTS(name)         enum name##PARTS { \
+                                               name##PartFiller0,
+#define TM_PART(value, prefix, name)           prefix##_##name = (value),
+#define END_TM_CLASS_PARTS()               };
+
+#define BEGIN_TM_PART_STATES(name)         enum name##STATES { \
+                                               name##StateFiller0,
+#define TM_STATE(value, prefix, name)          prefix##_##name = (value),
+#define END_TM_PART_STATES()               };
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h
new file mode 100644
index 0000000..97145ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2005 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHNLSP_H__
+#define __WINE_SHNLSP_H__
+
+#include <schannel.h>
+
+#endif /* __WINE_SHNLSP_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h
new file mode 100644
index 0000000..c89cbdf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2003 Ulrich Czekalla 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SDDL_H__
+#define __SDDL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Versioning */
+#define SDDL_REVISION_1 1
+#define SDDL_REVISION   SDDL_REVISION_1
+
+#ifndef WINE_NO_UNICODE_MACROS
+/* Component tags */
+#ifndef UNICODE
+# define SDDL_OWNER "O"
+# define SDDL_GROUP "G"
+# define SDDL_DACL  "D"
+# define SDDL_SACL  "S"
+#else
+# if defined(__GNUC__)
+#  define SDDL_OWNER (const WCHAR[]){ 'O',0 }
+#  define SDDL_GROUP (const WCHAR[]){ 'G',0 }
+#  define SDDL_DACL  (const WCHAR[]){ 'D',0 }
+#  define SDDL_SACL  (const WCHAR[]){ 'S',0 }
+# elif defined(_MSC_VER)
+#  define SDDL_OWNER L"O"
+#  define SDDL_GROUP L"G"
+#  define SDDL_DACL  L"D"
+#  define SDDL_SACL  L"S"
+# else
+   static const WCHAR SDDL_OWNER[] = { 'O',0 };
+   static const WCHAR SDDL_GROUP[] = { 'G',0 };
+   static const WCHAR SDDL_DACL[]  = { 'D',0 };
+   static const WCHAR SDDL_SACL[]  = { 'S',0 };
+# endif
+#endif /* UNICODE */
+
+/* Separators as characters */
+/* SDDL_SEPERATORC is not a typo, as per Microsoft's headers */
+#ifndef UNICODE
+# define SDDL_SEPERATORC   ';'
+# define SDDL_DELIMINATORC ':'
+# define SDDL_ACE_BEGINC   '('
+# define SDDL_ACE_ENDC     ')'
+#else
+# define SDDL_SEPERATORC   ((WCHAR)';')
+# define SDDL_DELIMINATORC ((WCHAR)':')
+# define SDDL_ACE_BEGINC   ((WCHAR)'(')
+# define SDDL_ACE_ENDC     ((WCHAR)')')
+#endif /* UNICODE */
+
+/* Separators as strings */
+/* SDDL_SEPERATOR is not a typo, as per Microsoft's headers */
+#ifndef UNICODE
+# define SDDL_SEPERATOR   ";"
+# define SDDL_DELIMINATOR ":"
+# define SDDL_ACE_BEGIN   "("
+# define SDDL_ACE_END     ")"
+#else
+# if defined(__GNUC__)
+#  define SDDL_SEPERATOR   (const WCHAR[]){ ';',0 }
+#  define SDDL_DELIMINATOR (const WCHAR[]){ ':',0 }
+#  define SDDL_ACE_BEGIN   (const WCHAR[]){ '(',0 }
+#  define SDDL_ACE_END     (const WCHAR[]){ ')',0 }
+# elif defined(_MSC_VER)
+#  define SDDL_SEPERATOR   L";"
+#  define SDDL_DELIMINATOR L":"
+#  define SDDL_ACE_BEGIN   L"("
+#  define SDDL_ACE_END     L")"
+# else
+   static const WCHAR SDDL_SEPERATOR[]   = { ';',0 };
+   static const WCHAR SDDL_DELIMINATOR[] = { ':',0 };
+   static const WCHAR SDDL_ACE_BEGIN[]   = { '(',0 };
+   static const WCHAR SDDL_ACE_END[]     = { ')',0 };
+# endif
+#endif /* UNICODE */
+#endif /* WINE_NO_UNICODE_MACROS */
+
+BOOL WINAPI ConvertSidToStringSidA( PSID, LPSTR* );
+BOOL WINAPI ConvertSidToStringSidW( PSID, LPWSTR* );
+#define ConvertSidToStringSid WINELIB_NAME_AW(ConvertSidToStringSid)
+
+BOOL WINAPI ConvertStringSidToSidA( LPCSTR, PSID* );
+BOOL WINAPI ConvertStringSidToSidW( LPCWSTR, PSID* );
+#define ConvertStringSidToSid WINELIB_NAME_AW(ConvertStringSidToSid)
+
+BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorA(
+    LPCSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG );
+BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW(
+    LPCWSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG );
+#define ConvertStringSecurityDescriptorToSecurityDescriptor WINELIB_NAME_AW(ConvertStringSecurityDescriptorToSecurityDescriptor)
+
+BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorA(
+    PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPSTR*, PULONG );
+BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorW(
+    PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPWSTR*, PULONG );
+#define ConvertSecurityDescriptorToStringSecurityDescriptor WINELIB_NAME_AW(ConvertSecurityDescriptorToStringSecurityDescriptor)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __SDDL_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h
new file mode 100644
index 0000000..fd9c2de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SECEXT_H__
+#define __SECEXT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+    NameUnknown = 0,
+    NameFullyQualifiedDN = 1,
+    NameSamCompatible = 2,
+    NameDisplay = 3,
+    NameUniqueId = 6,
+    NameCanonical = 7,
+    NameUserPrincipal = 8,
+    NameCanonicalEx = 9,
+    NameServicePrincipal = 10,
+    NameDnsDomain = 12,
+    NameGivenName = 13,
+    NameSurname = 14,
+} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT;
+
+BOOLEAN WINAPI GetComputerObjectNameA( EXTENDED_NAME_FORMAT, LPSTR, PULONG );
+BOOLEAN WINAPI GetComputerObjectNameW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG );
+#define        GetComputerObjectName WINELIB_NAME_AW(GetComputerObjectName)
+
+BOOLEAN WINAPI GetUserNameExA( EXTENDED_NAME_FORMAT, LPSTR, PULONG );
+BOOLEAN WINAPI GetUserNameExW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG );
+#define        GetUserNameEx WINELIB_NAME_AW(GetUserNameEx)
+
+BOOLEAN WINAPI TranslateNameA( LPCSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPSTR, PULONG);
+BOOLEAN WINAPI TranslateNameW( LPCWSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPWSTR, PULONG);
+#define        TranslateName WINELIB_NAME_AW(TranslateName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SECEXT_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/security.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/security.h
new file mode 100644
index 0000000..1da8386
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/security.h
@@ -0,0 +1,35 @@
+/*
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _SECURITY_H
+#define _SECURITY_H
+
+#include <sspi.h>
+
+#if defined(SECURITY_WIN32) || defined(SECURITY_KERNEL)
+#include <secext.h>
+#endif
+
+#endif /* _SECURITY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h
new file mode 100644
index 0000000..14b024b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2005 Steven Edwards
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SENSAPI_H__
+#define __SENSAPI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NETWORK_ALIVE_LAN 1
+#define NETWORK_ALIVE_WAN 2
+#define NETWORK_ALIVE_AOL 4
+
+typedef struct tagQOCINFO
+{
+    DWORD dwSize;
+    DWORD dwFlags;
+    DWORD dwInSpeed;
+    DWORD dwOutSpeed;
+} QOCINFO, *LPQOCINFO;
+
+BOOL WINAPI IsDestinationReachableA(LPCSTR lpszDestination, LPQOCINFO lpQOCInfo);
+BOOL WINAPI IsDestinationReachableW(LPCWSTR lpszDestination, LPQOCINFO lpQOCInfo);
+#define     IsDestinationReachable WINELIB_NAME_AW(IsDestinationReachable)
+BOOL WINAPI IsNetworkAlive(LPDWORD lpdwFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSAPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl
new file mode 100644
index 0000000..0cb0ad5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "oaidl.idl";
+
+[
+  version(2.0),
+  uuid(d597deed-5b9f-11d1-8dd2-00aa004abd5e)
+]
+library SensEvents
+{
+    importlib("stdole2.tlb");
+
+    typedef struct SENS_QOCINFO
+    {
+        DWORD dwSize;
+        DWORD dwFlags;
+        DWORD dwOutSpeed;
+        DWORD dwInSpeed;
+    } SENS_QOCINFO, *LPSENS_QOCINFO;
+
+    [
+      object,
+      uuid(d597bab1-5b9f-11d1-8dd2-00aa004abd5e),
+      pointer_default(unique)
+    ]
+    interface ISensNetwork : IDispatch
+    {
+        HRESULT ConnectionMade(
+            [in] BSTR bstrConnection,
+            [in] ULONG ulType,
+            [in] LPSENS_QOCINFO lpQOCInfo );
+        HRESULT ConnectionMadeNoQOCInfo(
+            [in] BSTR bstrConnection,
+            [in] ULONG ulType );
+        HRESULT ConnectionLost(
+            [in] BSTR bstrConnection,
+            [in] ULONG ulType );
+        HRESULT DestinationReachable(
+            [in] BSTR bstrDestination,
+            [in] BSTR bstrConnection,
+            [in] ULONG ulType,
+            [in] LPSENS_QOCINFO lpQOCInfo );
+        HRESULT DestinationReachableNoQOCInfo(
+            [in] BSTR bstrDestination,
+            [in] BSTR bstrConnection,
+            [in] ULONG ulType );
+    }
+
+    [
+      object,
+      uuid(d597bab2-5b9f-11d1-8dd2-00aa004abd5e),
+      pointer_default(unique)
+    ]
+    interface ISensOnNow : IDispatch
+    {
+        HRESULT OnAcPower( void );
+        HRESULT OnBatteryPower(
+            [in] DWORD dwBatteryLifePercent );
+        HRESULT BatteryLow(
+            [in] DWORD dwBatteryLifePercent );
+    }
+
+    [
+      object,
+      uuid(d597bab3-5b9f-11d1-8dd2-00aa004abd5e),
+      pointer_default(unique)
+    ]
+    interface ISensLogon : IDispatch
+    {
+        HRESULT Logon(
+            [in] BSTR bstrUserName );
+        HRESULT Logoff(
+            [in] BSTR bstrUserName );
+        HRESULT StartShell(
+            [in] BSTR bstrUserName );
+        HRESULT DisplayLock(
+            [in] BSTR bstrUserName );
+        HRESULT DisplayUnlock(
+            [in] BSTR bstrUserName );
+        HRESULT StartScreenSaver(
+            [in] BSTR bstrUserName );
+        HRESULT StopScreenSaver(
+            [in] BSTR bstrUserName );
+    }
+
+    [
+      object,
+      uuid(d597bab4-5b9f-11d1-8dd2-00aa004abd5e),
+      pointer_default(unique)
+    ]
+    interface ISensLogon2 : IDispatch
+    {
+        HRESULT Logon(
+            [in] BSTR bstrUserName,
+            [in] DWORD dwSessionId );
+        HRESULT Logoff(
+            [in] BSTR bstrUserName,
+            [in] DWORD dwSessionId );
+        HRESULT SessionDisconnect(
+            [in] BSTR bstrUserName,
+            [in] DWORD dwSessionId );
+        HRESULT SessionReconnect(
+            [in] BSTR bstrUserName,
+            [in] DWORD dwSessionId );
+        HRESULT PostShell(
+            [in] BSTR bstrUserName,
+            [in] DWORD dwSessionId );
+    }
+
+} /* library SensEvents */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h
new file mode 100644
index 0000000..a838034
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h
@@ -0,0 +1,114 @@
+/*** Autogenerated by WIDL 1.1.36 from servprov.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_SERVPROV_H
+#define __WIDL_SERVPROV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IServiceProvider_FWD_DEFINED__
+#define __IServiceProvider_FWD_DEFINED__
+typedef interface IServiceProvider IServiceProvider;
+#endif
+
+
+/*****************************************************************************
+ * IServiceProvider interface
+ */
+#ifndef __IServiceProvider_INTERFACE_DEFINED__
+#define __IServiceProvider_INTERFACE_DEFINED__
+
+typedef IServiceProvider *LPSERVICEPROVIDER;
+DEFINE_GUID(IID_IServiceProvider, 0x6d5140c1, 0x7436, 0x11ce, 0x80,0x34, 0x00,0xaa,0x00,0x60,0x09,0xfa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IServiceProvider : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryService(
+        REFGUID guidService,
+        REFIID riid,
+        void **ppvObject) = 0;
+
+};
+#else
+typedef struct IServiceProviderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IServiceProvider* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IServiceProvider* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IServiceProvider* This);
+
+    /*** IServiceProvider methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryService)(
+        IServiceProvider* This,
+        REFGUID guidService,
+        REFIID riid,
+        void **ppvObject);
+
+    END_INTERFACE
+} IServiceProviderVtbl;
+interface IServiceProvider {
+    CONST_VTBL IServiceProviderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IServiceProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IServiceProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IServiceProvider_Release(This) (This)->lpVtbl->Release(This)
+/*** IServiceProvider methods ***/
+#define IServiceProvider_QueryService(This,guidService,riid,ppvObject) (This)->lpVtbl->QueryService(This,guidService,riid,ppvObject)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IServiceProvider_RemoteQueryService_Proxy(
+    IServiceProvider* This,
+    REFGUID guidService,
+    REFIID riid,
+    IUnknown **ppvObject);
+void __RPC_STUB IServiceProvider_RemoteQueryService_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IServiceProvider_QueryService_Proxy(
+    IServiceProvider* This,
+    REFGUID guidService,
+    REFIID riid,
+    void **ppvObject);
+HRESULT __RPC_STUB IServiceProvider_QueryService_Stub(
+    IServiceProvider* This,
+    REFGUID guidService,
+    REFIID riid,
+    IUnknown **ppvObject);
+
+#endif  /* __IServiceProvider_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_SERVPROV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl
new file mode 100644
index 0000000..e36035f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 1999 Francois Gouget
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+
+/*****************************************************************************
+ * IServiceProvider interface
+ */
+[
+    object,
+    uuid(6d5140c1-7436-11ce-8034-00aa006009fa),
+    pointer_default(unique)
+]
+interface IServiceProvider : IUnknown
+{
+    typedef [unique] IServiceProvider *LPSERVICEPROVIDER;
+
+    [local]
+    HRESULT QueryService(
+        [in] REFGUID guidService,
+        [in] REFIID riid,
+        [out] void ** ppvObject);
+
+    [call_as(QueryService)]
+    HRESULT RemoteQueryService(
+        [in] REFGUID guidService,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown ** ppvObject);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl
new file mode 100644
index 0000000..87fd317
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a85-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface ISessionProperties : IUnknown
+{
+    [local]
+    HRESULT GetProperties([in] ULONG cPropertyIDSets,
+                          [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+                          [in, out] ULONG *pcPropertySets,
+                          [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets);
+
+    [call_as(GetProperties)]
+    HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets,
+                                [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+                                [in, out] ULONG *pcPropertySets,
+                                [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,
+                                [out] IErrorInfo **ppErrorInfoRem);
+
+
+    [local]
+    HRESULT SetProperties([in] ULONG cPropertySets,
+                          [in, out, unique, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);
+
+    [call_as(SetProperties)]
+    HRESULT RemoteSetProperties([in] ULONG cPropertySets,
+                                [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+                                [in] ULONG cTotalProps,
+                                [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+                                [out] IErrorInfo **ppErrorInfoRem);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h
new file mode 100644
index 0000000..ec30632
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h
@@ -0,0 +1,1873 @@
+/*
+ * Copyright (C) 2000 James Hatheway
+ * Copyright (C) 2007 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_SETUPAPI
+#define _INC_SETUPAPI
+
+#include <commctrl.h>
+#include <devpropdef.h>
+
+#ifdef _WIN64
+#include <pshpack8.h>
+#else
+#include <pshpack1.h>
+#endif
+
+/* setupapi doesn't use the normal convention, it adds an underscore before A/W */
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_SETUPAPI_TYPE_AW(type)  /* nothing */
+#else
+# define DECL_WINELIB_SETUPAPI_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define type for handle to a loaded inf file */
+typedef PVOID HINF;
+
+/* Define type for handle to a device information set */
+typedef PVOID HDEVINFO;
+
+/* Define type for handle to a setup log file */
+typedef PVOID HSPFILELOG;
+
+/* Define type for setup file queue */
+typedef PVOID HSPFILEQ;
+
+typedef PVOID HDSKSPC;
+
+/* inf structure. */
+typedef struct _INFCONTEXT
+{
+   PVOID Inf;
+   PVOID CurrentInf;
+   UINT  Section;
+   UINT  Line;
+} INFCONTEXT, *PINFCONTEXT;
+
+typedef struct _SP_ALTPLATFORM_INFO_V2
+{
+    DWORD cbSize;
+    DWORD Platform;
+    DWORD MajorVersion;
+    DWORD MinorVersion;
+    WORD  ProcessorArchitecture;
+    union
+    {
+        WORD  Reserved;
+        WORD  Flags;
+    } DUMMYUNIONNAME;
+    DWORD FirstValidatedMajorVersion;
+    DWORD FirstValidatedMinorVersion;
+} SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2;
+
+#define SP_ALTPLATFORM_FLAGS_VERSION_RANGE 0x0001
+
+typedef struct _SP_ALTPLATFORM_INFO_V1
+{
+    DWORD cbSize;
+    DWORD Platform;
+    DWORD MajorVersion;
+    DWORD MinorVersion;
+    WORD  ProcessorArchitecture;
+    WORD  Reserved;
+} SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1;
+
+typedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO;
+typedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO;
+
+typedef struct _SP_FILE_COPY_PARAMS_A
+{
+    DWORD    cbSize;
+    HSPFILEQ QueueHandle;
+    PCSTR    SourceRootPath;
+    PCSTR    SourcePath;
+    PCSTR    SourceFilename;
+    PCSTR    SourceDescription;
+    PCSTR    SourceTagfile;
+    PCSTR    TargetDirectory;
+    PCSTR    TargetFilename;
+    DWORD    CopyStyle;
+    HINF     LayoutInf;
+    PCSTR    SecurityDescriptor;
+} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A;
+
+typedef struct _SP_FILE_COPY_PARAMS_W
+{
+    DWORD    cbSize;
+    HSPFILEQ QueueHandle;
+    PCWSTR   SourceRootPath;
+    PCWSTR   SourcePath;
+    PCWSTR   SourceFilename;
+    PCWSTR   SourceDescription;
+    PCWSTR   SourceTagfile;
+    PCWSTR   TargetDirectory;
+    PCWSTR   TargetFilename;
+    DWORD    CopyStyle;
+    HINF     LayoutInf;
+    PCWSTR   SecurityDescriptor;
+} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_FILE_COPY_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_COPY_PARAMS)
+
+typedef struct _SP_REGISTER_CONTROL_STATUSA
+{
+    DWORD    cbSize;
+    PCSTR    FileName;
+    DWORD    Win32Error;
+    DWORD    FailureCode;
+} SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA;
+
+typedef struct _SP_REGISTER_CONTROL_STATUSW
+{
+    DWORD    cbSize;
+    PCWSTR   FileName;
+    DWORD    Win32Error;
+    DWORD    FailureCode;
+} SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW;
+
+DECL_WINELIB_TYPE_AW(SP_REGISTER_CONTROL_STATUS)
+DECL_WINELIB_TYPE_AW(PSP_REGISTER_CONTROL_STATUS)
+
+#define SPREG_SUCCESS       0x00000000
+#define SPREG_LOADLIBRARY   0x00000001
+#define SPREG_GETPROCADDR   0x00000002
+#define SPREG_REGSVR        0x00000003
+#define SPREG_DLLINSTALL    0x00000004
+#define SPREG_TIMEOUT       0x00000005
+#define SPREG_UNKNOWN       0xffffffff
+
+typedef UINT (CALLBACK *PSP_FILE_CALLBACK_A)( PVOID Context, UINT Notification,
+                                              UINT_PTR Param1, UINT_PTR Param2 );
+typedef UINT (CALLBACK *PSP_FILE_CALLBACK_W)( PVOID Context, UINT Notification,
+                                              UINT_PTR Param1, UINT_PTR Param2 );
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_CALLBACK)
+
+#define LINE_LEN                    256
+#define MAX_INF_STRING_LENGTH       4096
+#define MAX_TITLE_LEN               60
+#define MAX_INSTRUCTION_LEN         256
+#define MAX_LABEL_LEN               30
+#define MAX_SERVICE_NAME_LEN        256
+#define MAX_SUBTITLE_LEN            256
+#define SP_MAX_MACHINENAME_LENGTH   (MAX_PATH + 3)
+
+typedef UINT DI_FUNCTION;
+
+typedef struct _SP_CLASSINSTALL_HEADER
+{
+  DWORD       cbSize;
+  DI_FUNCTION InstallFunction;
+} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
+
+typedef struct _SP_ENABLECLASS_PARAMS
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    GUID                   ClassGuid;
+    DWORD                  EnableMessage;
+} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
+
+/* SP_ENABLECLASS_PARAMS EnableMessage values */
+#define ENABLECLASS_QUERY   0
+#define ENABLECLASS_SUCCESS 1
+#define ENABLECLASS_FAILURE 2
+
+typedef struct _SP_PROPCHANGE_PARAMS
+{
+  SP_CLASSINSTALL_HEADER  ClassInstallHeader;
+  DWORD  StateChange;
+  DWORD  Scope;
+  DWORD  HwProfile;
+} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
+
+/* SP_PROPCHANGE_PARAMS StateChange values */
+#define DICS_ENABLE      0x00000001
+#define DICS_DISABLE     0x00000002
+#define DICS_PROPCHANGE  0x00000003
+#define DICS_START       0x00000004
+#define DICS_STOP        0x00000005
+/* SP_PROPCHANGE_PARAMS Scope values */
+#define DICS_FLAG_GLOBAL         0x00000001
+#define DICS_FLAG_CONFIGSPECIFIC 0x00000002
+#define DICS_FLAG_CONFIGGENERAL  0x00000004
+
+
+typedef struct _SP_DEVINSTALL_PARAMS_A
+{
+    DWORD               cbSize;
+    DWORD               Flags;
+    DWORD               FlagsEx;
+    HWND                hwndParent;
+    PSP_FILE_CALLBACK_A InstallMsgHandler;
+    PVOID               InstallMsgHandlerContext;
+    HSPFILEQ            FileQueue;
+    ULONG_PTR           ClassInstallReserved;
+    DWORD               Reserved;
+    CHAR                DriverPath[MAX_PATH];
+} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
+
+typedef struct _SP_DEVINSTALL_PARAMS_W
+{
+    DWORD               cbSize;
+    DWORD               Flags;
+    DWORD               FlagsEx;
+    HWND                hwndParent;
+    PSP_FILE_CALLBACK_W InstallMsgHandler;
+    PVOID               InstallMsgHandlerContext;
+    HSPFILEQ            FileQueue;
+    ULONG_PTR           ClassInstallReserved;
+    DWORD               Reserved;
+    WCHAR               DriverPath[MAX_PATH];
+} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINSTALL_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINSTALL_PARAMS)
+
+/* SP_DEVINSTALL_PARAMS Flags values */
+#define DI_SHOWOEM             0x00000001
+#define DI_SHOWCOMPAT          0x00000002
+#define DI_SHOWCLASS           0x00000004
+#define DI_SHOWALL             0x00000007
+#define DI_NOVCP               0x00000008
+#define DI_DIDCOMPAT           0x00000010
+#define DI_DIDCLASS            0x00000020
+#define DI_AUTOASSIGNRES       0x00000040
+#define DI_NEEDRESTART         0x00000080
+#define DI_NEEDREBOOT          0x00000100
+#define DI_NOBROWSE            0x00000200
+#define DI_MULTMFGS            0x00000400
+#define DI_DISABLED            0x00000800
+#define DI_GENERALPAGE_ADDED   0x00001000
+#define DI_RESOURCEPAGE_ADDED  0x00002000
+#define DI_PROPERTIES_CHANGE   0x00004000
+#define DI_INF_IS_SORTED       0x00080000
+#define DI_ENUMSINGLEINF       0x00010000
+#define DI_DONOTCALLCONFIGMG   0x00020000
+#define DI_INSTALLDISABLED     0x00040000
+#define DI_COMPAT_FROM_CLASS   0x00080000
+#define DI_CLASSINSTALLPARAMS  0x00100000
+#define DI_NODI_DEFAULTACTION  0x00200000
+#define DI_QUIETINSTALL        0x00800000
+#define DI_NOFILECOPY          0x01000000
+#define DI_FORCECOPY           0x02000000
+#define DI_DRIVERPAGE_ADDED    0x04000000
+#define DI_USECI_SELECTSTRINGS 0x08000000
+#define DI_OVERRIDE_INFFLAGS   0x10000000
+#define DI_PROPS_NOCHANGEUSAGE 0x20000000
+#define DI_NOSELECTICONS       0x40000000
+#define DI_NOWRITE_IDS         0x80000000
+/* SP_DEVINSTALL_PARAMS FlagsEx values */
+#define DI_FLAGSEX_USEOLDINFSEARCH          0x00000001
+#define DI_FLAGSEX_RESERVED2                0x00000002
+#define DI_FLAGSEX_CI_FAILED                0x00000004
+#define DI_FLAGSEX_FINISHINSTALL_ACTION     0x00000008
+#define DI_FLAGSEX_DIDINFOLIST              0x00000010
+#define DI_FLAGSEX_DIDCOMPATINFO            0x00000020
+#define DI_FLAGSEX_FILTERCLASSES            0x00000040
+#define DI_FLAGSEX_SETFAILEDINSTALL         0x00000080
+#define DI_FLAGSEX_DEVICECHANGE             0x00000100
+#define DI_FLAGSEX_ALWAYSWRITEIDS           0x00000200
+#define DI_FLAGSEX_PROPCHANGE_PENDING       0x00000400
+#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS        0x00000800
+#define DI_FLAGSEX_NOUIONQUERYREMOVE        0x00001000
+#define DI_FLAGSEX_USECLASSFORCOMPAT        0x00002000
+#define DI_FLAGSEX_RESERVED3                0x00004000
+#define DI_FLAGSEX_NO_DRVREG_MODIFY         0x00008000
+#define DI_FLAGSEX_IN_SYSTEM_SETUP          0x00010000
+#define DI_FLAGSEX_INET_DRIVER              0x00020000
+#define DI_FLAGSEX_APPENDDRIVERLIST         0x00040000
+#define DI_FLAGSEX_PREINSTALLBACKUP         0x00080000
+#define DI_FLAGSEX_BACKUPONREPLACE          0x00100000
+#define DI_FLAGSEX_DRIVERLIST_FROM_URL      0x00200000
+#define DI_FLAGSEX_RESERVED1                0x00400000
+#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000
+#define DI_FLAGSEX_POWERPAGE_ADDED          0x01000000
+#define DI_FLAGSEX_FILTERSIMILARDRIVERS     0x02000000
+#define DI_FLAGSEX_INSTALLEDDRIVER          0x04000000
+#define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE  0x08000000
+#define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH    0x10000000
+#define DI_FLAGSEX_RESTART_DEVICE_ONLY      0x20000000
+#define DI_FLAGSEX_RECURSIVESEARCH          0x40000000
+#define DI_FLAGSEX_SEARCH_PUBLISHED_INFS    0x80000000
+
+typedef struct _SP_REMOVEDEVICE_PARAMS
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    DWORD                  Scope;
+    DWORD                  HwProfile;
+} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
+
+/* SP_REMOVEDEVICE_PARAMS Scope values */
+#define DI_REMOVEDEVICE_GLOBAL         0x00000001
+#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002
+
+typedef struct _SP_UNREMOVEDEVICE_PARAMS
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    DWORD                  Scope;
+    DWORD                  HwProfile;
+} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;
+
+/* SP_UNREMOVEDEVICE_PARAMS Scope values */
+#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002
+
+typedef struct _SP_SELECTDEVICE_PARAMS_A
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    CHAR                   Title[MAX_TITLE_LEN];
+    CHAR                   Instructions[MAX_INSTRUCTION_LEN];
+    CHAR                   ListLabel[MAX_LABEL_LEN];
+    CHAR                   SubTitle[MAX_SUBTITLE_LEN];
+    BYTE                   Reserved[2];
+} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
+
+typedef struct _SP_SELECTDEVICE_PARAMS_W
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    WCHAR                  Title[MAX_TITLE_LEN];
+    WCHAR                  Instructions[MAX_INSTRUCTION_LEN];
+    WCHAR                  ListLabel[MAX_LABEL_LEN];
+    WCHAR                  SubTitle[MAX_SUBTITLE_LEN];
+} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
+
+typedef BOOL (CALLBACK *PDETECT_PROGRESS_NOTIFY)(PVOID ProgressNotifyParam,
+        DWORD DetectComplete);
+
+typedef struct _SP_DETECTDEVICE_PARAMS
+{
+    SP_CLASSINSTALL_HEADER  ClassInstallHeader;
+    PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
+    PVOID                   ProgressNotifyParam;
+} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;
+
+#define MAX_INSTALLWIZARD_DYNAPAGES 20
+
+typedef struct _SP_INSTALLWIZARD_DATA
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    DWORD                  Flags;
+    HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
+    DWORD                  NumDynamicPages;
+    DWORD                  DynamicPageFlags;
+    DWORD                  PrivateFlags;
+    LPARAM                 PrivateData;
+    HWND                   hwndWizardDlg;
+} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
+
+/* SP_INSTALLWIZARD_DATA Flags values */
+#define NDW_INSTALLFLAG_DIDFACTDEFS        0x00000001
+#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002
+#define NDW_INSTALLFLAG_NEEDRESTART        DI_NEEDRESTART
+#define NDW_INSTALLFLAG_NEEDREBOOT         DI_NEEDREBOOT
+#define NDW_INSTALLFLAG_NEEDSHUTDOWN       0x00000200
+#define NDW_INSTALLFLAG_EXPRESSINTRO       0x00000400
+#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800
+#define NDW_INSTALLFLAG_NODETECTEDDEVS     0x00001000
+#define NDW_INSTALLFLAG_INSTALLSPECIFIC    0x00002000
+#define NDW_INSTALLFLAG_SKIPCLASSLIST      0x00004000
+#define NDW_INSTALLFLAG_CI_PICKED_OEM      0x00008000
+#define NDW_INSTALLFLAG_PCMCIAMODE         0x00010000
+#define NDW_INSTALLFLAG_PCMCIADEVICE       0x00020000
+#define NDW_INSTALLFLAG_USERCANCEL         0x00040000
+#define NDW_INSTALLFLAG_KNOWNCLASS         0x00080000
+/* SP_INSTALLWIZARD_DATA DynamicPageFlags values */
+#define DYNAWIZ_FLAG_PAGESADDED             0x00000001
+#define DYNAWIZ_FLAG_INSTALLDET_NEXT        0x00000002
+#define DYNAWIZ_FLAG_INSTALLDET_PREV        0x00000004
+#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
+
+/* Resource IDs */
+#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000
+#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000
+
+#define IDD_DYNAWIZ_FIRSTPAGE                10000
+#define IDD_DYNAWIZ_SELECT_PREVPAGE          10001
+#define IDD_DYNAWIZ_SELECT_NEXTPAGE          10002
+#define IDD_DYNAWIZ_ANALYZE_PREVPAGE         10003
+#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE         10004
+#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006
+#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007
+#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS   10008
+#define IDD_DYNAWIZ_SELECTDEV_PAGE           10009
+#define IDD_DYNAWIZ_ANALYZEDEV_PAGE          10010
+#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011
+#define IDD_DYNAWIZ_SELECTCLASS_PAGE         10012
+
+#define IDI_RESOURCEFIRST        159
+#define IDI_RESOURCE             IDI_RESOURCEFIRST
+#define IDI_RESOURCELAST         161
+#define IDI_RESOURCEOVERLAYFIRST 161
+#define IDI_RESOURCEOVERLAYLAST  161
+
+#define IDI_CLASSICON_OVERLAYFIRST 500
+#define IDI_CLASSICON_OVERLAYLAST  502
+#define IDI_PROBLEM_OVL            500
+#define IDI_DISABLED_OVL           501
+#define IDI_FORCED_OVL             502
+
+typedef struct _SP_NEWDEVICEWIZARD_DATA
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    DWORD                  Flags;
+    HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
+    DWORD                  NumDynamicPages;
+    HWND                   hwndWizardDlg;
+} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA;
+
+typedef SP_NEWDEVICEWIZARD_DATA  SP_ADDPROPERTYPAGE_DATA;
+typedef PSP_NEWDEVICEWIZARD_DATA PSP_ADDPROPERTYPAGE_DATA;
+
+typedef struct _SP_TROUBLESHOOTER_PARAMS_A
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    CHAR                   ChmFile[MAX_PATH];
+    CHAR                   HtmlTroubleShooter[MAX_PATH];
+} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A;
+
+typedef struct _SP_TROUBLESHOOTER_PARAMS_W
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    WCHAR                  ChmFile[MAX_PATH];
+    WCHAR                  HtmlTroubleShooter[MAX_PATH];
+} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_TROUBLESHOOTER_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_TROUBLESHOOTER_PARAMS)
+
+typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    CHAR                   PowerMessageWake[LINE_LEN * 2];
+} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A;
+
+typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W
+{
+    SP_CLASSINSTALL_HEADER ClassInstallHeader;
+    WCHAR                  PowerMessageWake[LINE_LEN * 2];
+} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_POWERMESSAGEWAKE_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_POWERMESSAGEWAKE_PARAMS)
+
+typedef struct _SP_DRVINFO_DATA_V1_A
+{
+    DWORD     cbSize;
+    DWORD     DriverType;
+    ULONG_PTR Reserved;
+    CHAR      Description[LINE_LEN];
+    CHAR      MfgName[LINE_LEN];
+    CHAR      ProviderName[LINE_LEN];
+} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A;
+
+typedef struct _SP_DRVINFO_DATA_V1_W
+{
+    DWORD     cbSize;
+    DWORD     DriverType;
+    ULONG_PTR Reserved;
+    WCHAR     Description[LINE_LEN];
+    WCHAR     MfgName[LINE_LEN];
+    WCHAR     ProviderName[LINE_LEN];
+} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V1)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V1)
+
+typedef struct _SP_DRVINFO_DATA_V2_A
+{
+    DWORD     cbSize;
+    DWORD     DriverType;
+    ULONG_PTR Reserved;
+    CHAR      Description[LINE_LEN];
+    CHAR      MfgName[LINE_LEN];
+    CHAR      ProviderName[LINE_LEN];
+    FILETIME  DriverDate;
+    DWORDLONG DriverVersion;
+} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A;
+
+typedef struct _SP_DRVINFO_DATA_V2_W
+{
+    DWORD     cbSize;
+    DWORD     DriverType;
+    ULONG_PTR Reserved;
+    WCHAR     Description[LINE_LEN];
+    WCHAR     MfgName[LINE_LEN];
+    WCHAR     ProviderName[LINE_LEN];
+    FILETIME  DriverDate;
+    DWORDLONG DriverVersion;
+} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V2)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V2)
+
+typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A;
+typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_A;
+typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W;
+typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA)
+
+typedef struct _SP_DRVINFO_DETAIL_DATA_A
+{
+    DWORD     cbSize;
+    FILETIME  InfDate;
+    DWORD     CompatIDsOffset;
+    DWORD     CompatIDsLength;
+    ULONG_PTR Reserved;
+    CHAR      SectionName[LINE_LEN];
+    CHAR      InfFileName[MAX_PATH];
+    CHAR      DrvDescription[LINE_LEN];
+    CHAR      HardwareID[ANYSIZE_ARRAY];
+} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
+
+typedef struct _SP_DRVINFO_DETAIL_DATA_W
+{
+    DWORD     cbSize;
+    FILETIME  InfDate;
+    DWORD     CompatIDsOffset;
+    DWORD     CompatIDsLength;
+    ULONG_PTR Reserved;
+    WCHAR     SectionName[LINE_LEN];
+    WCHAR     InfFileName[MAX_PATH];
+    WCHAR     DrvDescription[LINE_LEN];
+    WCHAR     HardwareID[ANYSIZE_ARRAY];
+} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DETAIL_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DETAIL_DATA)
+
+typedef struct _SP_DRVINSTALL_PARAMS
+{
+    DWORD     cbSize;
+    DWORD     Rank;
+    DWORD     Flags;
+    DWORD_PTR PrivateData;
+    DWORD     Reserved;
+} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
+
+/* SP_DRVINSTALL_PARAMS Flags values */
+#define DNF_DUPDESC               0x00000001
+#define DNF_OLDDRIVER             0x00000002
+#define DNF_EXCLUDEFROMLIST       0x00000004
+#define DNF_NODRIVER              0x00000008
+#define DNF_LEGACYINF             0x00000010
+#define DNF_CLASS_DRIVER          0x00000020
+#define DNF_COMPATIBLE_DRIVER     0x00000040
+#define DNF_INET_DRIVER           0x00000080
+#define DNF_UNUSED1               0x00000100
+#define DNF_INDEXED_DRIVER        0x00000200
+#define DNF_OLD_INET_DRIVER       0x00000400
+#define DNF_BAD_DRIVER            0x00000800
+#define DNF_DUPPROVIDER           0x00001000
+#define DNF_INF_IS_SIGNED         0x00002000
+#define DNF_OEM_F6_INF            0x00004000
+#define DNF_DUPDRIVERVER          0x00008000
+#define DNF_BASIC_DRIVER          0x00010000
+#define DNF_AUTHENTICODE_SIGNED   0x00020000
+#define DNF_INSTALLEDDRIVER       0x00040000
+#define DNF_ALWAYSEXCLUDEFROMLIST 0x00080000
+/* SP_DRVINSTALL_PARAMS Rank values */
+#define DRIVER_HARDWAREID_RANK             0x00000fff
+#define DRIVER_COMPATID_RANK               0x00003fff
+#define DRIVER_UNTRUSTED_RANK              0x00008000
+#define DRIVER_UNTRUSTED_HARDWAREID_RANK   0x00008fff
+#define DRIVER_UNTRUSTED_COMPATID_RANK     0x0000bfff
+#define DRIVER_W9X_SUSPECT_RANK            0x0000c000
+#define DRIVER_W9X_SUSPECT_HARDWAREID_RANK 0x0000cfff
+
+/* Device Information structure (references a device instance that is a member
+   of a device information set) */
+typedef struct _SP_DEVINFO_DATA
+{
+   DWORD     cbSize;
+   GUID      ClassGuid;
+   DWORD     DevInst;   /* DEVINST handle */
+   ULONG_PTR Reserved;
+} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
+
+typedef struct _SP_DEVICE_INTERFACE_DATA
+{
+   DWORD      cbSize;
+   GUID       InterfaceClassGuid;
+   DWORD      Flags;
+   ULONG_PTR  Reserved;
+} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
+
+#define SPINT_ACTIVE  0x00000001
+#define SPINT_DEFAULT 0x00000002
+#define SPINT_REMOVED 0x00000004
+
+typedef SP_DEVICE_INTERFACE_DATA  SP_INTERFACE_DEVICE_DATA;
+typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA;
+#define SPID_ACTIVE  SPINT_ACTIVE
+#define SPID_DEFAULT SPINT_DEFAULT
+#define SPID_REMOVED SPINT_REMOVED
+
+typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A
+{
+   DWORD      cbSize;
+   CHAR       DevicePath[ANYSIZE_ARRAY];
+} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
+
+typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W
+{
+   DWORD      cbSize;
+   WCHAR      DevicePath[ANYSIZE_ARRAY];
+} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVICE_INTERFACE_DETAIL_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVICE_INTERFACE_DETAIL_DATA)
+
+typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {
+    DWORD  cbSize;
+    GUID   ClassGuid;
+    HANDLE RemoteMachineHandle;
+    CHAR   RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
+} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;
+
+typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {
+    DWORD  cbSize;
+    GUID   ClassGuid;
+    HANDLE RemoteMachineHandle;
+    WCHAR  RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
+} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINFO_LIST_DETAIL_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINFO_LIST_DETAIL_DATA)
+
+typedef DWORD (CALLBACK *PSP_DETSIG_CMPPROC)(HDEVINFO, PSP_DEVINFO_DATA,
+ PSP_DEVINFO_DATA, PVOID);
+
+typedef struct _COINSTALLER_CONTEXT_DATA
+{
+    BOOL  PostProcessing;
+    DWORD InstallResult;
+    PVOID PrivateData;
+} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
+
+typedef struct _SP_CLASSIMAGELIST_DATA
+{
+    DWORD      cbSize;
+    HIMAGELIST ImageList;
+    ULONG_PTR  Reserved;
+} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
+
+typedef struct _SP_PROPSHEETPAGE_REQUEST
+{
+    DWORD            cbSize;
+    DWORD            PageRequested;
+    HDEVINFO         DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
+
+/* SP_PROPSHEETPAGE_REQUEST PageRequested values */
+#define SPPSR_SELECT_DEVICE_RESOURCES      1
+#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2
+#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES   3
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_A
+{
+    DWORD cbSize;
+    CHAR  FullInfPath[MAX_PATH];
+    INT   FilenameOffset;
+} SP_BACKUP_QUEUE_PARAMS_V1_A, *PSP_BACKUP_QUEUE_PARAMS_V1_A;
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_W
+{
+    DWORD cbSize;
+    WCHAR FullInfPath[MAX_PATH];
+    INT   FilenameOffset;
+} SP_BACKUP_QUEUE_PARAMS_V1_W, *PSP_BACKUP_QUEUE_PARAMS_V1_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V1)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V1)
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_A
+{
+    DWORD cbSize;
+    CHAR  FullInfPath[MAX_PATH];
+    INT   FilenameOffset;
+    CHAR  ReinstallInstance[MAX_PATH];
+} SP_BACKUP_QUEUE_PARAMS_V2_A, *PSP_BACKUP_QUEUE_PARAMS_V2_A;
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_W
+{
+    DWORD cbSize;
+    WCHAR FullInfPath[MAX_PATH];
+    INT   FilenameOffset;
+    WCHAR ReinstallInstance[MAX_PATH];
+} SP_BACKUP_QUEUE_PARAMS_V2_W, *PSP_BACKUP_QUEUE_PARAMS_V2_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V2)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V2)
+
+typedef SP_BACKUP_QUEUE_PARAMS_V2_A SP_BACKUP_QUEUE_PARAMS_A;
+typedef PSP_BACKUP_QUEUE_PARAMS_V2_A PSP_BACKUP_QUEUE_PARAMS_A;
+typedef SP_BACKUP_QUEUE_PARAMS_V2_W SP_BACKUP_QUEUE_PARAMS_W;
+typedef PSP_BACKUP_QUEUE_PARAMS_V2_W PSP_BACKUP_QUEUE_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS)
+
+typedef struct _FILE_IN_CABINET_INFO_A {
+  LPCSTR NameInCabinet;
+  DWORD FileSize;
+  DWORD Win32Error;
+  WORD DosDate;
+  WORD DosTime;
+  WORD DosAttribs;
+  CHAR FullTargetName[MAX_PATH];
+} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
+
+typedef struct _FILE_IN_CABINET_INFO_W {
+  LPCWSTR NameInCabinet;
+  DWORD FileSize;
+  DWORD Win32Error;
+  WORD DosDate;
+  WORD DosTime;
+  WORD DosAttribs;
+  WCHAR FullTargetName[MAX_PATH];
+} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(FILE_IN_CABINET_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PFILE_IN_CABINET_INFO)
+
+typedef struct _CABINET_INFO_A {
+  PCSTR CabinetPath;
+  PCSTR CabinetFile;
+  PCSTR DiskName;
+  USHORT SetId;
+  USHORT CabinetNumber;
+} CABINET_INFO_A, *PCABINET_INFO_A;
+
+typedef struct _CABINET_INFO_W {
+  PCWSTR CabinetPath;
+  PCWSTR CabinetFile;
+  PCWSTR DiskName;
+  USHORT SetId;
+  USHORT CabinetNumber;
+} CABINET_INFO_W, *PCABINET_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(CABINET_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PCABINET_INFO)
+
+typedef struct _SP_INF_INFORMATION {
+    DWORD InfStyle;
+    DWORD InfCount;
+    BYTE VersionData[ANYSIZE_ARRAY];
+} SP_INF_INFORMATION, *PSP_INF_INFORMATION;
+
+#define INF_STYLE_NONE           0x00
+#define INF_STYLE_OLDNT          0x01
+#define INF_STYLE_WIN4           0x02
+#define INF_STYLE_CACHE_ENABLE   0x10
+#define INF_STYLE_CACHE_DISABLE  0x20
+
+#define FILEOP_COPY              0
+#define FILEOP_RENAME            1
+#define FILEOP_DELETE            2
+#define FILEOP_BACKUP            3
+
+#define FILEOP_ABORT             0
+#define FILEOP_DOIT              1
+#define FILEOP_SKIP              2
+#define FILEOP_RETRY             FILEOP_DOIT
+#define FILEOP_NEWPATH           4
+
+#define COPYFLG_WARN_IF_SKIP                  0x00000001
+#define COPYFLG_NOSKIP                        0x00000002
+#define COPYFLG_NOVERSIONCHECK                0x00000004
+#define COPYFLG_FORCE_FILE_IN_USE             0x00000008
+#define COPYFLG_NO_OVERWRITE                  0x00000010
+#define COPYFLG_NO_VERSION_DIALOG             0x00000020
+#define COPYFLG_OVERWRITE_OLDER_ONLY          0x00000040
+#define COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE 0x00000100
+#define COPYFLG_REPLACEONLY                   0x00000400
+#define COPYFLG_NODECOMP                      0x00000800
+#define COPYFLG_REPLACE_BOOT_FILE             0x00001000
+#define COPYFLG_NOPRUNE                       0x00002000
+#define COPYFLG_IN_USE_TRY_RENAME             0x00004000
+
+#define DELFLG_IN_USE  0x00000001
+#define DELFLG_IN_USE1 0x00010000
+
+typedef struct _FILEPATHS_A
+{
+    PCSTR  Target;
+    PCSTR  Source;
+    UINT   Win32Error;
+    DWORD  Flags;
+} FILEPATHS_A, *PFILEPATHS_A;
+
+typedef struct _FILEPATHS_W
+{
+    PCWSTR Target;
+    PCWSTR Source;
+    UINT   Win32Error;
+    DWORD  Flags;
+} FILEPATHS_W, *PFILEPATHS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS)
+
+typedef struct _FILEPATHS_SIGNERINFO_A
+{
+    PCSTR Target;
+    PCSTR Source;
+    UINT  Win32Error;
+    DWORD Flags;
+    PCSTR DigitalSigner;
+    PCSTR Version;
+    PCSTR CatalogFile;
+} FILEPATHS_SIGNERINFO_A, *PFILEPATHS_SIGNERINFO_A;
+
+typedef struct _FILEPATHS_SIGNERINFO_W
+{
+    PCWSTR Target;
+    PCWSTR Source;
+    UINT   Win32Error;
+    DWORD  Flags;
+    PCWSTR DigitalSigner;
+    PCWSTR Version;
+    PCWSTR CatalogFile;
+} FILEPATHS_SIGNERINFO_W, *PFILEPATHS_SIGNERINFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS_SIGNERINFO)
+
+typedef struct _SOURCE_MEDIA_A
+{
+    PCSTR Reserved;
+    PCSTR Tagfile;
+    PCSTR Description;
+    PCSTR SourcePath;
+    PCSTR SourceFile;
+    DWORD Flags;
+} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
+
+typedef struct _SOURCE_MEDIA_W
+{
+    PCWSTR Reserved;
+    PCWSTR Tagfile;
+    PCWSTR Description;
+    PCWSTR SourcePath;
+    PCWSTR SourceFile;
+    DWORD  Flags;
+} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SOURCE_MEDIA)
+
+typedef struct _SP_ORIGINAL_FILE_INFO_A
+{
+    DWORD cbSize;
+    CHAR  OriginalInfName[MAX_PATH];
+    CHAR  OriginalCatalogName[MAX_PATH];
+} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A;
+
+typedef struct _SP_ORIGINAL_FILE_INFO_W
+{
+    DWORD cbSize;
+    WCHAR  OriginalInfName[MAX_PATH];
+    WCHAR  OriginalCatalogName[MAX_PATH];
+} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_ORIGINAL_FILE_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_ORIGINAL_FILE_INFO)
+
+typedef struct _SP_INF_SIGNER_INFO_A
+{
+    DWORD cbSize;
+    CHAR  CatalogFile[MAX_PATH];
+    CHAR  DigitalSigner[MAX_PATH];
+    CHAR  DigitalSignerVersion[MAX_PATH];
+} SP_INF_SIGNER_INFO_A, *PSP_INF_SIGNER_INFO_A;
+
+typedef struct _SP_INF_SIGNER_INFO_W
+{
+    DWORD cbSize;
+    WCHAR CatalogFile[MAX_PATH];
+    WCHAR DigitalSigner[MAX_PATH];
+    WCHAR DigitalSignerVersion[MAX_PATH];
+} SP_INF_SIGNER_INFO_W, *PSP_INF_SIGNER_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_INF_SIGNER_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_INF_SIGNER_INFO)
+
+#define SPFILENOTIFY_STARTQUEUE           0x0001
+#define SPFILENOTIFY_ENDQUEUE             0x0002
+#define SPFILENOTIFY_STARTSUBQUEUE        0x0003
+#define SPFILENOTIFY_ENDSUBQUEUE          0x0004
+#define SPFILENOTIFY_STARTDELETE          0x0005
+#define SPFILENOTIFY_ENDDELETE            0x0006
+#define SPFILENOTIFY_DELETEERROR          0x0007
+#define SPFILENOTIFY_STARTRENAME          0x0008
+#define SPFILENOTIFY_ENDRENAME            0x0009
+#define SPFILENOTIFY_RENAMEERROR          0x000a
+#define SPFILENOTIFY_STARTCOPY            0x000b
+#define SPFILENOTIFY_ENDCOPY              0x000c
+#define SPFILENOTIFY_COPYERROR            0x000d
+#define SPFILENOTIFY_NEEDMEDIA            0x000e
+#define SPFILENOTIFY_QUEUESCAN            0x000f
+#define SPFILENOTIFY_CABINETINFO          0x0010
+#define SPFILENOTIFY_FILEINCABINET        0x0011
+#define SPFILENOTIFY_NEEDNEWCABINET       0x0012
+#define SPFILENOTIFY_FILEEXTRACTED        0x0013
+#define SPFILENOTIFY_FILEOPDELAYED        0x0014
+#define SPFILENOTIFY_STARTBACKUP          0x0015
+#define SPFILENOTIFY_BACKUPERROR          0x0016
+#define SPFILENOTIFY_ENDBACKUP            0x0017
+#define SPFILENOTIFY_QUEUESCAN_EX         0x0018
+#define SPFILENOTIFY_STARTREGISTRATION    0x0019
+#define SPFILENOTIFY_ENDREGISTRATION      0x0020
+#define SPFILENOTIFY_QUEUESCAN_SIGNERINFO 0x0040
+
+#define SPFILENOTIFY_LANGMISMATCH         0x00010000
+#define SPFILENOTIFY_TARGETEXISTS         0x00020000
+#define SPFILENOTIFY_TARGETNEWER          0x00040000
+
+#define SPINST_LOGCONFIG                  0x00000001
+#define SPINST_INIFILES                   0x00000002
+#define SPINST_REGISTRY                   0x00000004
+#define SPINST_INI2REG                    0x00000008
+#define SPINST_FILES                      0x00000010
+#define SPINST_BITREG                     0x00000020
+#define SPINST_REGSVR                     0x00000040
+#define SPINST_UNREGSVR                   0x00000080
+#define SPINST_PROFILEITEMS               0x00000100
+#define SPINST_COPYINF                    0x00000200
+#define SPINST_ALL                        0x000003ff
+#define SPINST_SINGLESECTION              0x00010000
+#define SPINST_LOGCONFIG_IS_FORCED        0x00020000
+#define SPINST_LOGCONFIGS_ARE_OVERRIDES   0x00040000
+#define SPINST_REGISTERCALLBACKAWARE      0x00080000
+
+#define SPSVCINST_TAGTOFRONT               0x00000001
+#define SPSVCINST_ASSOCSERVICE             0x00000002
+#define SPSVCINST_DELETEEVENTLOGENTRY      0x00000004
+#define SPSVCINST_NOCLOBBER_DISPLAYNAME    0x00000008
+#define SPSVCINST_NOCLOBBER_STARTTYPE      0x00000010
+#define SPSVCINST_NOCLOBBER_ERRORCONTROL   0x00000020
+#define SPSVCINST_NOCLOBBER_LOADORDERGROUP 0x00000040
+#define SPSVCINST_NOCLOBBER_DEPENDENCIES   0x00000080
+#define SPSVCINST_NOCLOBBER_DESCRIPTION    0x00000100
+#define SPSVCINST_STOPSERVICE              0x00000200
+#define SPSVCINST_CLOBBER_SECURITY         0x00000400
+#define SPSVCINST_STARTSERVICE             0x00000800
+
+#define SP_COPY_DELETESOURCE              0x00000001
+#define SP_COPY_REPLACEONLY               0x00000002
+#define SP_COPY_NEWER                     0x00000004
+#define SP_COPY_NEWER_OR_SAME             SP_COPY_NEWER
+#define SP_COPY_NOOVERWRITE               0x00000008
+#define SP_COPY_NODECOMP                  0x00000010
+#define SP_COPY_LANGUAGEAWARE             0x00000020
+#define SP_COPY_SOURCE_ABSOLUTE           0x00000040
+#define SP_COPY_SOURCEPATH_ABSOLUTE       0x00000080
+#define SP_COPY_IN_USE_NEEDS_REBOOT       0x00000100
+#define SP_COPY_FORCE_IN_USE              0x00000200
+#define SP_COPY_NOSKIP                    0x00000400
+#define SP_FLAG_CABINETCONTINUATION       0x00000800
+#define SP_COPY_FORCE_NOOVERWRITE         0x00001000
+#define SP_COPY_FORCE_NEWER               0x00002000
+#define SP_COPY_WARNIFSKIP                0x00004000
+#define SP_COPY_NOBROWSE                  0x00008000
+#define SP_COPY_NEWER_ONLY                0x00010000
+#define SP_COPY_SOURCE_SIS_MASTER         0x00020000
+#define SP_COPY_OEMINF_CATALOG_ONLY       0x00040000
+#define SP_COPY_REPLACE_BOOT_FILE         0x00080000
+#define SP_COPY_NOPRUNE                   0x00100000
+#define SP_COPY_OEM_F6_INF                0x00200000
+
+#define SP_BACKUP_BACKUPPASS 0x00000001
+#define SP_BACKUP_DEMANDPASS 0x00000002
+#define SP_BACKUP_SPECIAL    0x00000004
+#define SP_BACKUP_BOOTFILE   0x00000008
+
+#define SPOST_NONE  0
+#define SPOST_PATH  1
+#define SPOST_URL   2
+#define SPOST_MAX   3
+
+#define SPQ_SCAN_FILE_PRESENCE            0x00000001
+#define SPQ_SCAN_FILE_VALIDITY            0x00000002
+#define SPQ_SCAN_USE_CALLBACK             0x00000004
+#define SPQ_SCAN_USE_CALLBACKEX           0x00000008
+#define SPQ_SCAN_INFORM_USER              0x00000010
+#define SPQ_SCAN_PRUNE_COPY_QUEUE         0x00000020
+#define SPQ_SCAN_USE_CALLBACK_SIGNERINFO  0x00000040
+#define SPQ_SCAN_PRUNE_DELREN             0x00000080
+
+#define SPQ_DELAYED_COPY 0x00000001
+
+#define SPQ_FLAG_BACKUP_AWARE      0x00000001
+#define SPQ_FLAG_ABORT_IF_UNSIGNED 0x00000002
+#define SPQ_FLAG_FILES_MODIFIED    0x00000004
+#define SPQ_FLAG_VALID             0x00000007
+
+#define FLG_ADDREG_DELREG_BIT             0x00008000
+#define FLG_ADDREG_BINVALUETYPE           0x00000001
+#define FLG_ADDREG_NOCLOBBER              0x00000002
+#define FLG_ADDREG_DELVAL                 0x00000004
+#define FLG_ADDREG_APPEND                 0x00000008
+#define FLG_ADDREG_KEYONLY                0x00000010
+#define FLG_ADDREG_OVERWRITEONLY          0x00000020
+#define FLG_ADDREG_64BITKEY               0x00001000
+#define FLG_ADDREG_KEYONLY_COMMON         0x00002000
+#define FLG_ADDREG_32BITKEY               0x00004000
+#define FLG_ADDREG_TYPE_SZ                0x00000000
+#define FLG_ADDREG_TYPE_MULTI_SZ          0x00010000
+#define FLG_ADDREG_TYPE_EXPAND_SZ         0x00020000
+#define FLG_ADDREG_TYPE_BINARY           (0x00000000 | FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_DWORD            (0x00010000 | FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_NONE             (0x00020000 | FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_MASK             (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE)
+
+#define FLG_DELREG_VALUE                 (0x00000000)
+#define FLG_DELREG_TYPE_MASK             FLG_ADDREG_TYPE_MASK
+#define FLG_DELREG_TYPE_SZ               FLG_ADDREG_TYPE_SZ
+#define FLG_DELREG_TYPE_MULTI_SZ         FLG_ADDREG_TYPE_MULTI_SZ
+#define FLG_DELREG_TYPE_EXPAND_SZ        FLG_ADDREG_TYPE_EXPAND_SZ
+#define FLG_DELREG_TYPE_BINARY           FLG_ADDREG_TYPE_BINARY
+#define FLG_DELREG_TYPE_DWORD            FLG_ADDREG_TYPE_DWORD
+#define FLG_DELREG_TYPE_NONE             FLG_ADDREG_TYPE_NONE
+#define FLG_DELREG_64BITKEY              FLG_ADDREG_64BITKEY
+#define FLG_DELREG_KEYONLY_COMMON        FLG_ADDREG_KEYONLY_COMMON
+#define FLG_DELREG_32BITKEY              FLG_ADDREG_32BITKEY
+#define FLG_DELREG_OPERATION_MASK        (0x000000FE)
+#define FLG_DELREG_MULTI_SZ_DELSTRING    (FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT | 0x00000002)
+
+#define FLG_REGSVR_DLLREGISTER           0x00000001
+#define FLG_REGSVR_DLLINSTALL            0x00000002
+
+#define FLG_PROFITEM_CURRENTUSER         0x00000001
+#define FLG_PROFITEM_DELETE              0x00000002
+#define FLG_PROFITEM_GROUP               0x00000004
+#define FLG_PROFITEM_CSIDL               0x00000008
+
+#define DI_NOVCP 0x00000008
+
+/* Class installer function codes */
+#define DIF_SELECTDEVICE                    0x01
+#define DIF_INSTALLDEVICE                   0x02
+#define DIF_ASSIGNRESOURCES                 0x03
+#define DIF_PROPERTIES                      0x04
+#define DIF_REMOVE                          0x05
+#define DIF_FIRSTTIMESETUP                  0x06
+#define DIF_FOUNDDEVICE                     0x07
+#define DIF_SELECTCLASSDRIVERS              0x08
+#define DIF_VALIDATECLASSDRIVERS            0x09
+#define DIF_INSTALLCLASSDRIVERS             0x0a
+#define DIF_CALCDISKSPACE                   0x0b
+#define DIF_DESTROYPRIVATEDATA              0x0c
+#define DIF_VALIDATEDRIVER                  0x0d
+#define DIF_MOVEDEVICE                      0x0e
+#define DIF_DETECT                          0x0f
+#define DIF_INSTALLWIZARD                   0x10
+#define DIF_DESTROYWIZARDDATA               0x11
+#define DIF_PROPERTYCHANGE                  0x12
+#define DIF_ENABLECLASS                     0x13
+#define DIF_DETECTVERIFY                    0x14
+#define DIF_INSTALLDEVICEFILES              0x15
+#define DIF_UNREMOVE                        0x16
+#define DIF_SELECTBESTCOMPATDRV             0x17
+#define DIF_ALLOW_INSTALL                   0x18
+#define DIF_REGISTERDEVICE                  0x19
+#define DIF_NEWDEVICEWIZARD_PRESELECT       0x1a
+#define DIF_NEWDEVICEWIZARD_SELECT          0x1b
+#define DIF_NEWDEVICEWIZARD_PREANALYZE      0x1c
+#define DIF_NEWDEVICEWIZARD_POSTANALYZE     0x1d
+#define DIF_NEWDEVICEWIZARD_FINISHINSTALL   0x1e
+#define DIF_UNUSED1                         0x1f
+#define DIF_INSTALLINTERFACES               0x20
+#define DIF_DETECTCANCEL                    0x21
+#define DIF_REGISTER_COINSTALLERS           0x22
+#define DIF_ADDPROPERTYPAGE_ADVANCED        0x23
+#define DIF_ADDPROPERTYPAGE_BASIC           0x24
+#define DIF_RESERVED1                       0x25
+#define DIF_TROUBLESHOOTER                  0x26
+#define DIF_POWERMESSAGEWAKE                0x27
+#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED  0x28
+#define DIF_UPDATEDRIVER_UI                 0x29
+#define DIF_RESERVED2                       0x30
+
+/* Directory ids */
+#define DIRID_ABSOLUTE                (-1)
+#define DIRID_ABSOLUTE_16BIT          0xffff
+#define DIRID_NULL                    0
+#define DIRID_SRCPATH                 1
+#define DIRID_WINDOWS                 10
+#define DIRID_SYSTEM                  11
+#define DIRID_DRIVERS                 12
+#define DIRID_IOSUBSYS                DIRID_DRIVERS
+#define DIRID_INF                     17
+#define DIRID_HELP                    18
+#define DIRID_FONTS                   20
+#define DIRID_VIEWERS                 21
+#define DIRID_COLOR                   23
+#define DIRID_APPS                    24
+#define DIRID_SHARED                  25
+#define DIRID_BOOT                    30
+#define DIRID_SYSTEM16                50
+#define DIRID_SPOOL                   51
+#define DIRID_SPOOLDRIVERS            52
+#define DIRID_USERPROFILE             53
+#define DIRID_LOADER                  54
+#define DIRID_PRINTPROCESSOR          55
+#define DIRID_DEFAULT                 DIRID_SYSTEM
+
+#define DIRID_COMMON_STARTMENU        16406
+#define DIRID_COMMON_PROGRAMS         16407
+#define DIRID_COMMON_STARTUP          16408
+#define DIRID_COMMON_DESKTOPDIRECTORY 16409
+#define DIRID_COMMON_FAVORITES        16415
+#define DIRID_COMMON_APPDATA          16419
+#define DIRID_PROGRAM_FILES           16422
+#define DIRID_SYSTEM_X86              16425
+#define DIRID_PROGRAM_FILES_X86       16426
+#define DIRID_PROGRAM_FILES_COMMON    16427
+#define DIRID_PROGRAM_FILES_COMMONX86 16428
+#define DIRID_COMMON_TEMPLATES        16429
+#define DIRID_COMMON_DOCUMENTS        16430
+
+#define DIRID_USER                    0x8000
+
+
+/* Error code */
+
+#define ERROR_EXPECTED_SECTION_NAME       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
+#define ERROR_BAD_SECTION_NAME_LINE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
+#define ERROR_SECTION_NAME_TOO_LONG       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
+#define ERROR_GENERAL_SYNTAX              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
+#define ERROR_WRONG_INF_STYLE             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
+#define ERROR_SECTION_NOT_FOUND           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
+#define ERROR_LINE_NOT_FOUND              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
+#define ERROR_NO_BACKUP                   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103)
+#define ERROR_NO_ASSOCIATED_CLASS         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
+#define ERROR_CLASS_MISMATCH              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
+#define ERROR_DUPLICATE_FOUND             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
+#define ERROR_NO_DRIVER_SELECTED          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
+#define ERROR_KEY_DOES_NOT_EXIST          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
+#define ERROR_INVALID_DEVINST_NAME        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
+#define ERROR_INVALID_CLASS               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
+#define ERROR_DEVINST_ALREADY_EXISTS      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
+#define ERROR_DEVINFO_NOT_REGISTERED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
+#define ERROR_INVALID_REG_PROPERTY        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
+#define ERROR_NO_INF                      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
+#define ERROR_NO_SUCH_DEVINST             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
+#define ERROR_CANT_LOAD_CLASS_ICON        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
+#define ERROR_INVALID_CLASS_INSTALLER     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
+#define ERROR_DI_DO_DEFAULT               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
+#define ERROR_DI_NOFILECOPY               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
+#define ERROR_INVALID_HWPROFILE           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
+#define ERROR_NO_DEVICE_SELECTED          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
+#define ERROR_DEVINFO_LIST_LOCKED         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
+#define ERROR_DEVINFO_DATA_LOCKED         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
+#define ERROR_DI_BAD_PATH                 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
+#define ERROR_NO_CLASSINSTALL_PARAMS      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
+#define ERROR_FILEQUEUE_LOCKED            (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
+#define ERROR_BAD_SERVICE_INSTALLSECT     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
+#define ERROR_NO_CLASS_DRIVER_LIST        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
+#define ERROR_NO_ASSOCIATED_SERVICE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
+#define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)
+#define ERROR_DEVICE_INTERFACE_ACTIVE     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)
+#define ERROR_DEVICE_INTERFACE_REMOVED    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)
+#define ERROR_BAD_INTERFACE_INSTALLSECT   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)
+#define ERROR_NO_SUCH_INTERFACE_CLASS     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)
+#define ERROR_INVALID_REFERENCE_STRING    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)
+#define ERROR_INVALID_MACHINENAME         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)
+#define ERROR_REMOTE_COMM_FAILURE         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)
+#define ERROR_MACHINE_UNAVAILABLE         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)
+#define ERROR_NO_CONFIGMGR_SERVICES       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)
+#define ERROR_INVALID_PROPPAGE_PROVIDER   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)
+#define ERROR_NO_SUCH_DEVICE_INTERFACE    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)
+#define ERROR_DI_POSTPROCESSING_REQUIRED  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)
+#define ERROR_INVALID_COINSTALLER         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)
+#define ERROR_NO_COMPAT_DRIVERS           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)
+#define ERROR_NO_DEVICE_ICON              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)
+#define ERROR_INVALID_INF_LOGCONFIG       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)
+#define ERROR_DI_DONT_INSTALL             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)
+#define ERROR_INVALID_FILTER_DRIVER       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)
+#define ERROR_NON_WINDOWS_NT_DRIVER       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D)
+#define ERROR_NON_WINDOWS_DRIVER          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E)
+#define ERROR_NO_CATALOG_FOR_OEM_INF      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F)
+#define ERROR_DEVINSTALL_QUEUE_NONNATIVE  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230)
+#define ERROR_NOT_DISABLEABLE             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231)
+#define ERROR_CANT_REMOVE_DEVINST         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232)
+#define ERROR_INVALID_TARGET              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x233)
+#define ERROR_DRIVER_NONNATIVE            (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x234)
+#define ERROR_IN_WOW64                    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235)
+#define ERROR_SET_SYSTEM_RESTORE_POINT    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x236)
+#define ERROR_INCORRECTLY_COPIED_INF      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x237)
+#define ERROR_SCE_DISABLED                (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x238)
+#define ERROR_WRONG_INF_TYPE              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24A)
+#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE
+#define ERROR_INTERFACE_DEVICE_ACTIVE     ERROR_DEVICE_INTERFACE_ACTIVE
+#define ERROR_INTERFACE_DEVICE_REMOVED    ERROR_DEVICE_INTERFACE_REMOVED
+#define ERROR_NO_SUCH_INTERFACE_DEVICE    ERROR_NO_SUCH_DEVICE_INTERFACE
+#define ERROR_NOT_INSTALLED               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
+
+/* flags for SetupDiGetClassDevs */
+#define DIGCF_DEFAULT         0x00000001
+#define DIGCF_PRESENT         0x00000002
+#define DIGCF_ALLCLASSES      0x00000004
+#define DIGCF_PROFILE         0x00000008
+#define DIGCF_DEVICEINTERFACE 0x00000010
+
+/* Flags for SetupDiOpenClassRegKeyEx */
+#define DIOCR_INSTALLER       0x00000001
+#define DIOCR_INTERFACE       0x00000002
+
+/* Flags for SetupDiBuildClassInfoList(Ex) */
+#define DIBCI_NOINSTALLCLASS  0x00000001
+#define DIBCI_NODISPLAYCLASS  0x00000002
+
+/* Flags for SetupDiCreateDeviceInfo */
+#define DICD_GENERATE_ID       0x00000001
+#define DICD_INHERIT_CLASSDRVS 0x00000002
+
+/* Flags for SetupDiOpenDeviceInfo */
+#define DIOD_INHERIT_CLASSDRVS 0x00000002
+#define DIOD_CANCEL_REMOVE     0x00000004
+
+/* Flags for SetupDiOpenDeviceInterface */
+#define DIODI_NO_ADD 0x00000001
+
+/* Flags for SetupDiRegisterDeviceInfo */
+#define SPRDI_FIND_DUPS 0x00000001
+
+/* Values for SetupDi*Info* DriverType */
+#define SPDIT_NODRIVER     0x00000000
+#define SPDIT_CLASSDRIVER  0x00000001
+#define SPDIT_COMPATDRIVER 0x00000002
+
+/* setup device registry property codes */
+#define SPDRP_DEVICEDESC                  0x00000000
+#define SPDRP_HARDWAREID                  0x00000001
+#define SPDRP_COMPATIBLEIDS               0x00000002
+#define SPDRP_UNUSED0                     0x00000003
+#define SPDRP_SERVICE                     0x00000004
+#define SPDRP_UNUSED1                     0x00000005
+#define SPDRP_UNUSED2                     0x00000006
+#define SPDRP_CLASS                       0x00000007
+#define SPDRP_CLASSGUID                   0x00000008
+#define SPDRP_DRIVER                      0x00000009
+#define SPDRP_CONFIGFLAGS                 0x0000000a
+#define SPDRP_MFG                         0x0000000b
+#define SPDRP_FRIENDLYNAME                0x0000000c
+#define SPDRP_LOCATION_INFORMATION        0x0000000d
+#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000e
+#define SPDRP_CAPABILITIES                0x0000000f
+#define SPDRP_UI_NUMBER                   0x00000010
+#define SPDRP_UPPERFILTERS                0x00000011
+#define SPDRP_LOWERFILTERS                0x00000012
+#define SPDRP_BUSTYPEGUID                 0x00000013
+#define SPDRP_LEGACYBUSTYPE               0x00000014
+#define SPDRP_BUSNUMBER                   0x00000015
+#define SPDRP_ENUMERATOR_NAME             0x00000016
+#define SPDRP_SECURITY                    0x00000017
+#define SPDRP_SECURITY_SDS                0x00000018
+#define SPDRP_DEVTYPE                     0x00000019
+#define SPDRP_EXCLUSIVE                   0x0000001a
+#define SPDRP_CHARACTERISTICS             0x0000001b
+#define SPDRP_ADDRESS                     0x0000001c
+#define SPDRP_UI_NUMBER_DESC_FORMAT       0x0000001d
+#define SPDRP_DEVICE_POWER_DATA           0x0000001e
+#define SPDRP_REMOVAL_POLICY              0x0000001f
+#define SPDRP_REMOVAL_POLICY_HW_DEFAULT   0x00000020
+#define SPDRP_REMOVAL_POLICY_OVERRIDE     0x00000021
+#define SPDRP_INSTALL_STATE               0x00000022
+#define SPDRP_MAXIMUM_PROPERTY            0x00000023
+
+#define DPROMPT_SUCCESS        0
+#define DPROMPT_CANCEL         1
+#define DPROMPT_SKIPFILE       2
+#define DPROMPT_BUFFERTOOSMALL 3
+#define DPROMPT_OUTOFMEMORY    4
+
+#define SETDIRID_NOT_FULL_PATH 0x00000001
+
+#define IDF_NOBROWSE     0x00000001
+#define IDF_NOSKIP       0x00000002
+#define IDF_NODETAILS    0x00000004
+#define IDF_NOCOMPRESSED 0x00000008
+#define IDF_CHECKFIRST   0x00000100
+#define IDF_NOBEEP       0x00000200
+#define IDF_NOFOREGROUND 0x00000400
+#define IDF_WARNIFSKIP   0x00000800
+
+#define IDF_NOREMOVABLEMEDIAPROMPT 0x00001000
+#define IDF_USEDISKNAMEASPROMPT    0x00002000
+#define IDF_OEMDISK                0x80000000
+
+#define INFINFO_INF_SPEC_IS_HINF        1
+#define INFINFO_INF_NAME_IS_ABSOLUTE    2
+#define INFINFO_DEFAULT_SEARCH          3
+#define INFINFO_REVERSE_DEFAULT_SEARCH  4
+#define INFINFO_INF_PATH_LIST_SEARCH    5
+
+#define LogSeverity         DWORD
+#define LogSevInformation   0x00000000
+#define LogSevWarning       0x00000001
+#define LogSevError         0x00000002
+#define LogSevFatalError    0x00000003
+#define LogSevMaximum       0x00000004
+
+#define SRCINFO_PATH           1
+#define SRCINFO_TAGFILE        2
+#define SRCINFO_DESCRIPTION    3
+#define SRCINFO_FLAGS          4
+#define SRCINFO_TAGFILE2       5
+
+#define SRC_FLAGS_CABFILE      (0x0010)
+
+#define FILE_COMPRESSION_NONE       0
+#define FILE_COMPRESSION_WINLZA     1
+#define FILE_COMPRESSION_MSZIP      2
+#define FILE_COMPRESSION_NTCAB      3
+
+#define SPDSL_IGNORE_DISK              0x00000001
+#define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002
+
+/* SetupInitializeFileLog Flags values */
+#define SPFILELOG_SYSTEMLOG 0x00000001
+#define SPFILELOG_FORCENEW  0x00000002
+#define SPFILELOG_QUERYONLY 0x00000004
+
+/* SetupLogFile Flags values */
+#define SPFILELOG_OEMFILE 0x00000001
+
+/* SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey
+ * KeyType values
+ */
+#define DIREG_DEV  0x00000001
+#define DIREG_DRV  0x00000002
+#define DIREG_BOTH 0x00000004
+
+/* SetupDiDrawMiniIcon Flags values */
+#define DMI_MASK    0x00000001
+#define DMI_BKCOLOR 0x00000002
+#define DMI_USERECT 0x00000004
+
+/* SetupDiGetClassDevPropertySheets PropertySheetType values */
+#define DIGCDP_FLAG_BASIC           0x00000001
+#define DIGCDP_FLAG_ADVANCED        0x00000002
+#define DIGCDP_FLAG_REMOTE_BASIC    0x00000003
+#define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004
+
+typedef enum {
+    SetupFileLogSourceFilename,
+    SetupFileLogChecksum,
+    SetupFileLogDiskTagfile,
+    SetupFileLogDiskDescription,
+    SetupFileLogOtherInfo,
+    SetupFileLogMax
+} SetupFileLogInfo;
+
+/* SetupDiGetWizardPage PageType values */
+#define SPWPT_SELECTDEVICE 0x00000001
+/* SetupDiGetWizardPage Flags values */
+#define SPWP_USE_DEVINFO_DATA 0x00000001
+
+/* SetupDiGetCustomDeviceProperty Flags values */
+#define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001
+
+/* SetupConfigureWmiFromInfSection Flags values */
+#define SCWMI_CLOBBER_SECURITY 0x00000001
+
+/* SetupUninstallOEMInf Flags values */
+#define SUOI_FORCEDELETE 0x00000001
+
+LONG     WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3);
+DWORD    WINAPI CaptureAndConvertAnsiArg(PCSTR lpSrc, PWSTR *lpDst);
+DWORD    WINAPI CaptureStringArg(PCWSTR lpSrc, PWSTR *lpDst);
+BOOL     WINAPI DelayedMove(PCWSTR lpExistingFileName, PCWSTR lpNewFileName);
+BOOL     WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName);
+PWSTR    WINAPI DuplicateString(PCWSTR lpSrc);
+BOOL     WINAPI EnablePrivilege(PCWSTR lpPrivilegeName, BOOL bEnable);
+BOOL     WINAPI FileExists(PCWSTR lpFileName, PWIN32_FIND_DATAW lpFileFindData);
+void     WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, PCSTR cmdline, INT show );
+void     WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, PCWSTR cmdline, INT show );
+#define         InstallHinfSection WINELIB_NAME_AW(InstallHinfSection)
+BOOL     WINAPI IsUserAdmin(VOID);
+PWSTR    WINAPI MultiByteToUnicode(PCSTR lpMultiByteStr, UINT uCodePage);
+VOID     WINAPI MyFree(PVOID lpMem);
+PVOID    WINAPI MyMalloc(DWORD dwSize);
+PVOID    WINAPI MyRealloc(PVOID lpSrc, DWORD dwSize);
+DWORD    WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID *);
+LONG     WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE *, PDWORD, PDWORD);
+/* RetreiveFileSecurity is not a typo, as per Microsoft's dlls */
+DWORD    WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR *);
+BOOL     WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);
+BOOL     WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
+#define         SetupAddSectionToDiskSpaceList WINELIB_NAME_AW(SetupAddSectionToDiskSpaceList)
+BOOL     WINAPI SetupAddToDiskSpaceListA(HDSKSPC, PCSTR, LONGLONG, UINT, PVOID, UINT);
+BOOL     WINAPI SetupAddToDiskSpaceListW(HDSKSPC, PCWSTR, LONGLONG, UINT, PVOID, UINT);
+#define         SetupAddToDiskSpaceList WINELIB_NAME_AW(SetupAddToDiskSpaceList)
+BOOL     WINAPI SetupAddToSourceListA(DWORD, PCSTR);
+BOOL     WINAPI SetupAddToSourceListW(DWORD, PCWSTR);
+#define         SetupAddToSourceList WINELIB_NAME_AW(SetupAddToSourceList)
+BOOL     WINAPI SetupAdjustDiskSpaceListA(HDSKSPC, LPCSTR, LONGLONG, PVOID, UINT);
+BOOL     WINAPI SetupAdjustDiskSpaceListW(HDSKSPC, LPCWSTR, LONGLONG, PVOID, UINT);
+#define         SetupAdjustDiskSpaceList WINELIB_NAME_AW(SetupAdjustDiskSpaceList)
+BOOL     WINAPI SetupCancelTemporarySourceList(void);
+BOOL     WINAPI SetupConfigureWmiFromInfSectionA(HINF, PCSTR, DWORD);
+BOOL     WINAPI SetupConfigureWmiFromInfSectionW(HINF, PCWSTR, DWORD);
+#define         SetupConfigureWmiFromInfSection WINELIB_NAME_AW(SetupConfigureWmiFromInfSection)
+UINT     WINAPI SetupBackupErrorA(HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD);
+UINT     WINAPI SetupBackupErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD);
+#define         SetupBackupError WINELIB_NAME_AW(SetupBackupError)
+BOOL     WINAPI SetupCloseFileQueue( HSPFILEQ );
+void     WINAPI SetupCloseInfFile( HINF hinf );
+void     WINAPI SetupCloseLog(void);
+BOOL     WINAPI SetupCommitFileQueueA( HWND, HSPFILEQ, PSP_FILE_CALLBACK_A, PVOID );
+BOOL     WINAPI SetupCommitFileQueueW( HWND, HSPFILEQ, PSP_FILE_CALLBACK_W, PVOID );
+#define         SetupCommitFileQueue WINELIB_NAME_AW(SetupCommitFileQueue)
+UINT     WINAPI SetupCopyErrorA( HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, UINT, DWORD, PSTR, DWORD, PDWORD );
+UINT     WINAPI SetupCopyErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD, PWSTR, DWORD, PDWORD );
+#define         SetupCopyError WINELIB_NAME_AW(SetupCopyError)
+BOOL     WINAPI SetupCopyOEMInfA( PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR * );
+BOOL     WINAPI SetupCopyOEMInfW( PCWSTR, PCWSTR, DWORD, DWORD, PWSTR, DWORD, PDWORD, PWSTR * );
+#define         SetupCopyOEMInf WINELIB_NAME_AW(SetupCopyOEMInf)
+HDSKSPC  WINAPI SetupCreateDiskSpaceListA(PVOID, DWORD, UINT);
+HDSKSPC  WINAPI SetupCreateDiskSpaceListW(PVOID, DWORD, UINT);
+#define         SetupCreateDiskSpaceList WINELIB_NAME_AW(SetupCreateDiskSpaceList)
+DWORD    WINAPI SetupDecompressOrCopyFileA( PCSTR, PCSTR, PUINT );
+DWORD    WINAPI SetupDecompressOrCopyFileW( PCWSTR, PCWSTR, PUINT );
+#define         SetupDecompressOrCopyFile WINELIB_NAME_AW(SetupDecompressOrCopyFile)
+UINT     WINAPI SetupDefaultQueueCallbackA( PVOID, UINT, UINT_PTR, UINT_PTR );
+UINT     WINAPI SetupDefaultQueueCallbackW( PVOID, UINT, UINT_PTR, UINT_PTR );
+#define         SetupDefaultQueueCallback WINELIB_NAME_AW(SetupDefaultQueueCallback)
+UINT     WINAPI SetupDeleteErrorA( HWND, PCSTR, PCSTR, UINT, DWORD );
+UINT     WINAPI SetupDeleteErrorW( HWND, PCWSTR, PCWSTR, UINT, DWORD );
+#define         SetupDeleteError WINELIB_NAME_AW(SetupDeleteError)
+BOOL     WINAPI SetupDestroyDiskSpaceList(HDSKSPC);
+BOOL     WINAPI SetupDiAskForOEMDisk(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiBuildClassInfoList(DWORD, LPGUID, DWORD, PDWORD);
+BOOL     WINAPI SetupDiBuildClassInfoListExA(DWORD, LPGUID, DWORD, PDWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiBuildClassInfoListExW(DWORD, LPGUID, DWORD, PDWORD, PCWSTR, PVOID);
+#define         SetupDiBuildClassInfoListEx WINELIB_NAME_AW(SetupDiBuildClassInfoListEx)
+BOOL     WINAPI SetupDiBuildDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);
+BOOL     WINAPI SetupDiCallClassInstaller(DI_FUNCTION, HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiCancelDriverInfoSearch(HDEVINFO);
+BOOL     WINAPI SetupDiChangeState(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiClassGuidsFromNameA(LPCSTR, LPGUID, DWORD, PDWORD);
+BOOL     WINAPI SetupDiClassGuidsFromNameW(LPCWSTR, LPGUID, DWORD, PDWORD);
+#define         SetupDiClassGuidsFromName WINELIB_NAME_AW(SetupDiClassGuidsFromName)
+BOOL     WINAPI SetupDiClassGuidsFromNameExA(LPCSTR, LPGUID, DWORD, PDWORD, LPCSTR, PVOID);
+BOOL     WINAPI SetupDiClassGuidsFromNameExW(LPCWSTR, LPGUID, DWORD, PDWORD, LPCWSTR, PVOID);
+#define         SetupDiClassGuidsFromNameEx WINELIB_NAME_AW(SetupDiClassGuidsFromNameEx)
+BOOL     WINAPI SetupDiClassNameFromGuidA(const GUID*, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupDiClassNameFromGuidW(const GUID*, PWSTR, DWORD, PDWORD);
+#define         SetupDiClassNameFromGuid WINELIB_NAME_AW(SetupDiClassNameFromGuid)
+BOOL     WINAPI SetupDiClassNameFromGuidExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiClassNameFromGuidExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
+#define         SetupDiClassNameFromGuidEx WINELIB_NAME_AW(SetupDiClassNameFromGuidEx)
+HDEVINFO WINAPI SetupDiCreateDeviceInfoList(const GUID *, HWND);
+HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(const GUID *, HWND, PCSTR, PVOID);
+HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *, HWND, PCWSTR, PVOID);
+#define         SetupDiCreateDeviceInfoListEx WINELIB_NAME_AW(SetupDiCreateDeviceInfoListEx)
+BOOL     WINAPI SetupDiCreateDeviceInfoA(HDEVINFO, PCSTR, const GUID*, PCSTR, HWND, DWORD,PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiCreateDeviceInfoW(HDEVINFO, PCWSTR, const GUID*, PCWSTR, HWND, DWORD,PSP_DEVINFO_DATA);
+#define         SetupDiCreateDeviceInfo WINELIB_NAME_AW(SetupDiCreateDeviceInfo)
+BOOL     WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+BOOL     WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+#define         SetupDiCreateDeviceInterface WINELIB_NAME_AW(SetupDiCreateDeviceInterface)
+HKEY     WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCSTR);
+HKEY     WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCWSTR);
+#define         SetupDiCreateDeviceInterfaceRegKey WINELIB_NAME_AW(SetupDiCreateDeviceInterfaceRegKey)
+HKEY     WINAPI SetupDiCreateDevRegKeyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCSTR);
+HKEY     WINAPI SetupDiCreateDevRegKeyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCWSTR);
+#define         SetupDiCreateDevRegKey WINELIB_NAME_AW(SetupDiCreateDevRegKey)
+BOOL     WINAPI SetupDiDeleteDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiDeleteDeviceInterfaceData(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);
+BOOL     WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD);
+BOOL     WINAPI SetupDiDeleteDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD);
+BOOL     WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA);
+BOOL     WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO);
+BOOL     WINAPI SetupDiDestroyDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);
+INT      WINAPI SetupDiDrawMiniIcon(HDC, RECT, INT, DWORD);
+BOOL     WINAPI SetupDiEnumDeviceInfo(HDEVINFO, DWORD, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, DWORD, PSP_DEVICE_INTERFACE_DATA);
+BOOL     WINAPI SetupDiEnumDriverInfoA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_A);
+BOOL     WINAPI SetupDiEnumDriverInfoW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_W);
+#define         SetupDiEnumDriverInfo WINELIB_NAME_AW(SetupDiEnumDriverInfo)
+BOOL     WINAPI SetupDiGetActualModelsSectionA(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PSTR, DWORD, PDWORD, PVOID);
+BOOL     WINAPI SetupDiGetActualModelsSectionW(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PWSTR, DWORD, PDWORD, PVOID);
+#define         SetupDiGetActualModelsSection WINELIB_NAME_AW(SetupDiGetActualModelsSection)
+BOOL     WINAPI SetupDiGetActualSectionToInstallA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *);
+BOOL     WINAPI SetupDiGetActualSectionToInstallW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *);
+#define         SetupDiGetActualSectionToInstall WINELIB_NAME_AW(SetupDiGetActualSectionToInstall)
+BOOL     WINAPI SetupDiGetActualSectionToInstallExA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *, PVOID);
+BOOL     WINAPI SetupDiGetActualSectionToInstallExW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *, PVOID);
+#define         SetupDiGetActualSectionToInstallEx WINELIB_NAME_AW(SetupDiGetActualSectionToInstallEx)
+BOOL     WINAPI SetupDiGetClassBitmapIndex(const GUID *, PINT);
+BOOL     WINAPI SetupDiGetClassDescriptionA(const GUID*, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetClassDescriptionW(const GUID*, PWSTR, DWORD, PDWORD);
+#define         SetupDiGetClassDescription WINELIB_NAME_AW(SetupDiGetClassDescription)
+BOOL     WINAPI SetupDiGetClassDescriptionExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiGetClassDescriptionExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
+#define         SetupDiGetClassDescriptionEx WINELIB_NAME_AW(SetupDiGetClassDescriptionEx)
+BOOL     WINAPI SetupDiGetClassDevPropertySheetsA(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERA, DWORD, PDWORD, DWORD);
+BOOL     WINAPI SetupDiGetClassDevPropertySheetsW(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERW, DWORD, PDWORD, DWORD);
+#define         SetupDiGetClassDevPropertySheets WINELIB_NAME_AW(SetupDiGetClassDevPropertySheets)
+HDEVINFO WINAPI SetupDiGetClassDevsA(const GUID *,LPCSTR,HWND,DWORD);
+HDEVINFO WINAPI SetupDiGetClassDevsW(const GUID *,LPCWSTR,HWND,DWORD);
+#define         SetupDiGetClassDevs WINELIB_NAME_AW(SetupDiGetClassDevs)
+HDEVINFO WINAPI SetupDiGetClassDevsExA(const GUID *, PCSTR, HWND, DWORD, HDEVINFO, PCSTR, PVOID);
+HDEVINFO WINAPI SetupDiGetClassDevsExW(const GUID *, PCWSTR, HWND, DWORD, HDEVINFO, PCWSTR, PVOID);
+#define         SetupDiGetClassDevsEx WINELIB_NAME_AW(SetupDiGetClassDevsEx)
+BOOL     WINAPI SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA, const GUID *, PINT);
+BOOL     WINAPI SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA);
+BOOL     WINAPI SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA, PCSTR, PVOID);
+BOOL     WINAPI SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA, PCWSTR, PVOID);
+#define         SetupDiGetClassImageListEx WINELIB_NAME_AW(SetupDiGetClassImageListEx)
+BOOL     WINAPI SetupDiGetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);
+#define         SetupDiGetClassInstallParams WINELIB_NAME_AW(SetupDiGetClassInstallParams)
+BOOL     WINAPI SetupDiGetClassRegistryPropertyA(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiGetClassRegistryPropertyW(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCWSTR, PVOID);
+#define         SetupDiGetClassRegistryProperty WINELIB_NAME_AW(SetupDiGetClassRegistryProperty)
+BOOL     WINAPI SetupDiGetCustomDevicePropertyA(HDEVINFO, PSP_DEVINFO_DATA, PCSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetCustomDevicePropertyW(HDEVINFO, PSP_DEVINFO_DATA, PCWSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+#define         SetupDiGetCustomDeviceProperty WINELIB_NAME_AW(SetupDiGetCustomDeviceProperty)
+BOOL     WINAPI SetupDiGetDeviceInfoListClass(HDEVINFO, LPGUID);
+BOOL     WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_A);
+BOOL     WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_W);
+#define         SetupDiGetDeviceInfoListDetail WINELIB_NAME_AW(SetupDiGetDeviceInfoListDetail)
+BOOL     WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);
+BOOL     WINAPI SetupDiGetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);
+#define         SetupDiGetDeviceInstallParams WINELIB_NAME_AW(SetupDiGetDeviceInstallParams)
+BOOL     WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO, PSP_DEVINFO_DATA, PWSTR, DWORD, PDWORD);
+#define         SetupDiGetDeviceInstanceId WINELIB_NAME_AW(SetupDiGetDeviceInstanceId)
+BOOL     WINAPI SetupDiGetDeviceInterfaceAlias(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, const GUID *, PSP_DEVICE_INTERFACE_DATA);
+BOOL     WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A,
+                                                 DWORD, PDWORD, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
+                                                 DWORD, PDWORD, PSP_DEVINFO_DATA);
+#define         SetupDiGetDeviceInterfaceDetail WINELIB_NAME_AW(SetupDiGetDeviceInterfaceDetail)
+BOOL     WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetDriverInfoDetailA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINFO_DETAIL_DATA_A, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetDriverInfoDetailW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINFO_DETAIL_DATA_W, DWORD, PDWORD);
+#define         SetupDiGetDriverInfoDetail WINELIB_NAME_AW(SetupDiGetDriverInfoDetail)
+BOOL     WINAPI SetupDiGetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);
+BOOL     WINAPI SetupDiGetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);
+#define         SetupDiGetDriverInstallParams WINELIB_NAME_AW(SetupDiGetDriverInstallParams)
+BOOL     WINAPI SetupDiGetHwProfileFriendlyNameA(DWORD, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD, PWSTR, DWORD, PDWORD);
+#define         SetupDiGetHwProfileFriendlyName WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyName)
+BOOL     WINAPI SetupDiGetHwProfileFriendlyNameExA(DWORD, PSTR, DWORD, PDWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiGetHwProfileFriendlyNameExW(DWORD, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
+#define         SetupDiGetHwProfileFriendlyNameEx WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyNameEx)
+BOOL     WINAPI SetupDiGetHwProfileList(PDWORD, DWORD, PDWORD, PDWORD);
+BOOL     WINAPI SetupDiGetHwProfileListExA(PDWORD, DWORD, PDWORD, PDWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiGetHwProfileListExW(PDWORD, DWORD, PDWORD, PDWORD, PCWSTR, PVOID);
+#define         SetupDiGetHwProfileListEx WINELIB_NAME_AW(SetupDiGetHwProfileListEx)
+BOOL     WINAPI SetupDiGetINFClassA(PCSTR, LPGUID, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupDiGetINFClassW(PCWSTR, LPGUID, PWSTR, DWORD, PDWORD);
+#define         SetupDiGetINFClass WINELIB_NAME_AW(SetupDiGetINFClass)
+BOOL     WINAPI SetupDiGetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiGetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);
+BOOL     WINAPI SetupDiGetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);
+#define         SetupDiGetSelectedDriver WINELIB_NAME_AW(SetupDiGetSelectedDriver)
+HPROPSHEETPAGE WINAPI SetupDiGetWizardPage(HDEVINFO, PSP_DEVINFO_DATA, PSP_INSTALLWIZARD_DATA, DWORD, DWORD);
+BOOL     WINAPI SetupDiInstallClassA(HWND, PCSTR, DWORD, HSPFILEQ);
+BOOL     WINAPI SetupDiInstallClassW(HWND, PCWSTR, DWORD, HSPFILEQ);
+#define         SetupDiInstallClass WINELIB_NAME_AW(SetupDiInstallClass)
+BOOL     WINAPI SetupDiInstallClassExA(HWND, PCSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID);
+BOOL     WINAPI SetupDiInstallClassExW(HWND, PCWSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID);
+#define         SetupDiInstallClassEx WINELIB_NAME_AW(SetupDiInstallClassEx)
+BOOL     WINAPI SetupDiInstallDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiInstallDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiInstallDriverFiles(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiLoadClassIcon(const GUID *, HICON *, PINT);
+HKEY     WINAPI SetupDiOpenClassRegKey(const GUID*, REGSAM);
+HKEY     WINAPI SetupDiOpenClassRegKeyExA(const GUID*, REGSAM, DWORD, PCSTR, PVOID);
+HKEY     WINAPI SetupDiOpenClassRegKeyExW(const GUID*, REGSAM, DWORD, PCWSTR, PVOID);
+#define         SetupDiOpenClassRegKeyEx WINELIB_NAME_AW(SetupDiOpenClassRegKeyEx)
+BOOL     WINAPI SetupDiOpenDeviceInfoA(HDEVINFO, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiOpenDeviceInfoW(HDEVINFO, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA);
+#define         SetupDiOpenDeviceInfo WINELIB_NAME_AW(SetupDiOpenDeviceInfo)
+BOOL     WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+BOOL     WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+#define         SetupDiOpenDeviceInterface WINELIB_NAME_AW(SetupDiOpenDeviceInterface)
+BOOL     WINAPI SetupDiOpenDeviceInterfaceRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, REGSAM);
+HKEY     WINAPI SetupDiOpenDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM);
+BOOL     WINAPI SetupDiRegisterCoDeviceInstallers(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiRegisterDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PSP_DETSIG_CMPPROC, PVOID, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiRemoveDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiRemoveDeviceInterface(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);
+BOOL     WINAPI SetupDiRestartDevices(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiSelectBestCompatDrv(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiSelectDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiSelectOEMDrv(HWND, HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiSetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);
+BOOL     WINAPI SetupDiSetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);
+#define         SetupDiSetClassInstallParams WINELIB_NAME_AW(SetupDiSetClassInstallParams)
+BOOL     WINAPI SetupDiSetClassRegistryPropertyA(const GUID *, DWORD, const BYTE *, DWORD, PCSTR, PVOID);
+BOOL     WINAPI SetupDiSetClassRegistryPropertyW(const GUID *, DWORD, const BYTE *, DWORD, PCWSTR, PVOID);
+#define         SetupDiSetClassRegistryProperty WINELIB_NAME_AW(SetupDiSetClassRegistryProperty)
+BOOL     WINAPI SetupDiSetDeviceInterfaceDefault(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, PVOID);
+BOOL     WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);
+BOOL     WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);
+#define         SetupDiSetDeviceInstallParams WINELIB_NAME_AW(SetupDiSetDeviceInstallParams)
+BOOL     WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD);
+BOOL     WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD);
+#define         SetupDiSetDeviceRegistryProperty WINELIB_NAME_AW(SetupDiSetDeviceRegistryProperty)
+BOOL     WINAPI SetupDiSetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);
+BOOL     WINAPI SetupDiSetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);
+#define         SetupDiSetDriverInstallParams WINELIB_NAME_AW(SetupDiSetDriverInstallParams)
+BOOL     WINAPI SetupDiSetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupDiSetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);
+BOOL     WINAPI SetupDiSetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);
+#define         SetupDiSetSelectedDriver WINELIB_NAME_AW(SetupDiSetSelectedDriver)
+BOOL     WINAPI SetupDiUnremoveDevice(HDEVINFO, PSP_DEVINFO_DATA);
+HDSKSPC  WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC, PVOID, DWORD, UINT);
+HDSKSPC  WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC, PVOID, DWORD, UINT);
+#define         SetupDuplicateDiskSpaceList WINELIB_NAME_AW(SetupDuplicateDiskSpaceList)
+BOOL     WINAPI SetupEnumInfSectionsA(HINF, UINT, PSTR, DWORD, DWORD *);
+BOOL     WINAPI SetupEnumInfSectionsW(HINF, UINT, PWSTR, DWORD, DWORD *);
+#define         SetupEnumInfSections WINELIB_NAME_AW(SetupEnumInfSections)
+BOOL     WINAPI SetupFindFirstLineA( HINF hinf, PCSTR section, PCSTR key, INFCONTEXT *context );
+BOOL     WINAPI SetupFindFirstLineW( HINF hinf, PCWSTR section, PCWSTR key, INFCONTEXT *context );
+#define         SetupFindFirstLine WINELIB_NAME_AW(SetupFindFirstLine)
+BOOL     WINAPI SetupFindNextLine( PINFCONTEXT context_in, PINFCONTEXT context_out );
+BOOL     WINAPI SetupFindNextMatchLineA( PINFCONTEXT context_in, PCSTR key, PINFCONTEXT context_out );
+BOOL     WINAPI SetupFindNextMatchLineW( PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out );
+#define         SetupFindNextMatchLine WINELIB_NAME_AW(SetupFindNextMatchLine)
+BOOL     WINAPI SetupFreeSourceListA(PCSTR **, UINT);
+BOOL     WINAPI SetupFreeSourceListW(PCWSTR **, UINT);
+#define         SetupFreeSourceList WINELIB_NAME_AW(SetupFreeSourceList)
+BOOL     WINAPI SetupGetBackupInformationA(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_A BackupParams);
+BOOL     WINAPI SetupGetBackupInformationW(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_W BackupParams);
+#define         SetupGetBackupInformation WINELIB_NAME_AW(SetupGetBackupInformation)
+BOOL     WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, DWORD size, LPDWORD required );
+DWORD    WINAPI SetupGetFieldCount( PINFCONTEXT context );
+DWORD    WINAPI SetupGetFileCompressionInfoA(PCSTR, PSTR *, PDWORD, PDWORD, PUINT);
+DWORD    WINAPI SetupGetFileCompressionInfoW(PCWSTR, PWSTR *, PDWORD, PDWORD, PUINT);
+#define         SetupGetFileCompressionInfo WINELIB_NAME_AW(SetupGetFileCompressionInfo)
+BOOL     WINAPI SetupGetFileCompressionInfoExA(PCSTR, PSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT);
+BOOL     WINAPI SetupGetFileCompressionInfoExW(PCWSTR, PWSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT);
+#define         SetupGetFileCompressionInfoEx WINELIB_NAME_AW(SetupGetFileCompressionInfoEx)
+BOOL     WINAPI SetupGetFileQueueCount( HSPFILEQ, UINT, PUINT );
+BOOL     WINAPI SetupGetFileQueueFlags( HSPFILEQ, PDWORD );
+BOOL     WINAPI SetupGetInfFileListA(PCSTR, DWORD, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupGetInfFileListW(PCWSTR, DWORD, PWSTR, DWORD, PDWORD);
+#define         SetupGetInfFileList WINELIB_NAME_AW(SetupGetFileList)
+BOOL     WINAPI SetupGetInfInformationA( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);
+BOOL     WINAPI SetupGetInfInformationW( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);
+#define         SetupGetInfInformation WINELIB_NAME_AW(SetupGetInfInformation)
+BOOL     WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result );
+BOOL     WINAPI SetupGetLineByIndexA( HINF, PCSTR, DWORD, INFCONTEXT * );
+BOOL     WINAPI SetupGetLineByIndexW( HINF, PCWSTR, DWORD, INFCONTEXT * );
+#define         SetupGetLineByIndex WINELIB_NAME_AW(SetupGetLineByIndex)
+LONG     WINAPI SetupGetLineCountA( HINF hinf, PCSTR section );
+LONG     WINAPI SetupGetLineCountW( HINF hinf, PCWSTR section );
+#define         SetupGetLineCount WINELIB_NAME_AW(SetupGetLineCount)
+BOOL     WINAPI SetupGetLineTextA( PINFCONTEXT context, HINF hinf, PCSTR section_name,PCSTR key_name, PSTR buffer, DWORD size, PDWORD required );
+BOOL     WINAPI SetupGetLineTextW( PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required );
+#define         SetupGetLineText WINELIB_NAME_AW(SetupGetLineText)
+BOOL     WINAPI SetupGetMultiSzFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, LPDWORD required );
+BOOL     WINAPI SetupGetMultiSzFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, LPDWORD required );
+#define         SetupGetMultiSzField WINELIB_NAME_AW(SetupGetMultiSzField)
+BOOL     WINAPI SetupGetNonInteractiveMode(void);
+BOOL     WINAPI SetupGetSourceFileLocationA( HINF hinf, PINFCONTEXT context, PCSTR filename, PUINT source_id, PSTR buffer, DWORD buffer_size, PDWORD required_size );
+BOOL     WINAPI SetupGetSourceFileLocationW( HINF hinf, PINFCONTEXT context, PCWSTR filename, PUINT source_id, PWSTR buffer, DWORD buffer_size, PDWORD required_size );
+#define         SetupGetSourceFileLocation WINELIB_NAME_AW(SetupGetSourceFileLocation)
+BOOL     WINAPI SetupGetSourceFileSizeA(HINF, PINFCONTEXT, PCSTR, PCSTR, PDWORD, UINT);
+BOOL     WINAPI SetupGetSourceFileSizeW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PDWORD, UINT);
+#define         SetupGetSourceFileSize WINELIB_NAME_AW(SetupGetSourceFileSize)
+BOOL     WINAPI SetupGetSourceInfoA( HINF hinf, UINT source_id, UINT info, PSTR buffer, DWORD buffer_size, LPDWORD required_size );
+BOOL     WINAPI SetupGetSourceInfoW( HINF hinf, UINT source_id, UINT info, PWSTR buffer, DWORD buffer_size, LPDWORD required_size );
+#define         SetupGetSourceInfo WINELIB_NAME_AW(SetupGetSourceInfo)
+BOOL     WINAPI SetupGetStringFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, PDWORD required );
+BOOL     WINAPI SetupGetStringFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, PDWORD required );
+#define         SetupGetStringField WINELIB_NAME_AW(SetupGetStringField)
+BOOL     WINAPI SetupGetTargetPathA( HINF hinf, PINFCONTEXT context, PCSTR section, PSTR buffer, DWORD buffer_size, PDWORD required_size );
+BOOL     WINAPI SetupGetTargetPathW( HINF hinf, PINFCONTEXT context, PCWSTR section, PWSTR buffer, DWORD buffer_size, PDWORD required_size );
+#define         SetupGetTargetPath WINELIB_NAME_AW(SetupGetTargetPath)
+PVOID    WINAPI SetupInitDefaultQueueCallback( HWND );
+PVOID    WINAPI SetupInitDefaultQueueCallbackEx( HWND, HWND, UINT, DWORD, PVOID );
+HSPFILELOG WINAPI SetupInitializeFileLogA(PCSTR, DWORD);
+HSPFILELOG WINAPI SetupInitializeFileLogW(PCWSTR, DWORD);
+#define           SetupInitializeFileLog WINELIB_NAME_AW(SetupInitializeFileLog)
+BOOL     WINAPI SetupInstallFileA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);
+BOOL     WINAPI SetupInstallFileW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);
+#define         SetupInstallFile WINELIB_NAME_AW(SetupInstallFile)
+BOOL     WINAPI SetupInstallFileExA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID, PBOOL);
+BOOL     WINAPI SetupInstallFileExW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID, PBOOL);
+#define         SetupInstallFileEx WINELIB_NAME_AW(SetupInstallFileEx)
+BOOL     WINAPI SetupInstallFilesFromInfSectionA( HINF, HINF, HSPFILEQ, PCSTR, PCSTR, UINT );
+BOOL     WINAPI SetupInstallFilesFromInfSectionW( HINF, HINF, HSPFILEQ, PCWSTR, PCWSTR, UINT );
+#define         SetupInstallFilesFromInfSection WINELIB_NAME_AW(SetupInstallFilesFromInfSection)
+BOOL     WINAPI SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT,
+                                            PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA);
+BOOL     WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT,
+                                            PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA);
+#define         SetupInstallFromInfSection WINELIB_NAME_AW(SetupInstallFromInfSection)
+BOOL     WINAPI SetupInstallServicesFromInfSectionA(HINF, PCSTR, DWORD);
+BOOL     WINAPI SetupInstallServicesFromInfSectionW(HINF, PCWSTR, DWORD);
+#define         SetupInstallServicesFromInfSection WINELIB_NAME_AW(SetupInstallServicesFromInfSection)
+BOOL     WINAPI SetupInstallServicesFromInfSectionExA(HINF, PCSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);
+BOOL     WINAPI SetupInstallServicesFromInfSectionExW(HINF, PCWSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);
+#define         SetupInstallServicesFromInfSectionEx WINELIB_NAME_AW(SetupInstallServicesFromInfSectionEx)
+BOOL     WINAPI SetupIterateCabinetA(PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);
+BOOL     WINAPI SetupIterateCabinetW(PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);
+#define         SetupIterateCabinet WINELIB_NAME_AW(SetupIterateCabinet)
+BOOL     WINAPI SetupLogErrorA(LPCSTR,LogSeverity);
+BOOL     WINAPI SetupLogErrorW(LPCWSTR,LogSeverity);
+#define         SetupLogError WINELIB_NAME_AW(SetupLogError)
+BOOL     WINAPI SetupLogFileA(HSPFILELOG, PCSTR, PCSTR, PCSTR, DWORD, PCSTR, PCSTR, PCSTR, DWORD);
+BOOL     WINAPI SetupLogFileW(HSPFILELOG, PCWSTR, PCWSTR, PCWSTR, DWORD, PCWSTR, PCWSTR, PCWSTR, DWORD);
+#define         SetupLogFile WINELIB_NAME_AW(SetupLogFile)
+BOOL     WINAPI SetupOpenAppendInfFileA( PCSTR, HINF, UINT * );
+BOOL     WINAPI SetupOpenAppendInfFileW( PCWSTR, HINF, UINT * );
+#define         SetupOpenAppendInfFile WINELIB_NAME_AW(SetupOpenAppendInfFile)
+HSPFILEQ WINAPI SetupOpenFileQueue(void);
+HINF     WINAPI SetupOpenInfFileA( PCSTR name, PCSTR pszclass, DWORD style, UINT *error );
+HINF     WINAPI SetupOpenInfFileW( PCWSTR name, PCWSTR pszclass, DWORD style, UINT *error );
+#define         SetupOpenInfFile WINELIB_NAME_AW(SetupOpenInfFile)
+BOOL     WINAPI SetupOpenLog(BOOL);
+HINF     WINAPI SetupOpenMasterInf( VOID );
+BOOL     WINAPI SetupPrepareQueueForRestoreA(HSPFILEQ, PCSTR, DWORD);
+BOOL     WINAPI SetupPrepareQueueForRestoreW(HSPFILEQ, PCWSTR, DWORD);
+#define         SetupPrepareQueueForRestore WINELIB_NAME_AW(SetupPrepareQueueForRestore)
+UINT     WINAPI SetupPromptForDiskA(HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, DWORD, PSTR, DWORD, PDWORD);
+UINT     WINAPI SetupPromptForDiskW(HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, DWORD, PWSTR, DWORD, PDWORD);
+#define         SetupPromptForDisk WINELIB_NAME_AW(SetupPromptForDisk)
+INT      WINAPI SetupPromptReboot( HSPFILEQ, HWND, BOOL);
+BOOL     WINAPI SetupQueryDrivesInDiskSpaceListA(HDSKSPC, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupQueryDrivesInDiskSpaceListW(HDSKSPC, PWSTR, DWORD, PDWORD);
+#define         SetupQueryDrivesInDiskSpaceList WINELIB_NAME_AW(SetupQueryDrivesInDiskSpaceList)
+BOOL     WINAPI SetupQueryFileLogA(HSPFILELOG, PCSTR, PCSTR, SetupFileLogInfo, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupQueryFileLogW(HSPFILELOG, PCWSTR, PCWSTR, SetupFileLogInfo, PWSTR, DWORD, PDWORD);
+#define         SetupQueryFileLog WINELIB_NAME_AW(SetupQueryFileLog)
+BOOL     WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION, UINT, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION, UINT, PWSTR, DWORD, PDWORD);
+#define         SetupQueryInfFileInformation WINELIB_NAME_AW(SetupQueryInFileInformation)
+BOOL     WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A);
+BOOL     WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_W);
+#define         SetupQueryInfOriginalFileInformation WINELIB_NAME_AW(SetupQueryInfOriginalFileInformation)
+BOOL     WINAPI SetupQueryInfVersionInformationA(PSP_INF_INFORMATION, UINT, PCSTR, PSTR, DWORD, PDWORD);
+BOOL     WINAPI SetupQueryInfVersionInformationW(PSP_INF_INFORMATION, UINT, PCWSTR, PWSTR, DWORD, PDWORD);
+#define         SetupQueryInfVersionInformation WINELIB_NAME_AW(SetupQueryInfVersionInformation)
+BOOL     WINAPI SetupQuerySourceListA(DWORD, PCSTR **, PUINT);
+BOOL     WINAPI SetupQuerySourceListW(DWORD, PCWSTR **, PUINT);
+#define         SetupQuerySourceList WINELIB_NAME_AW(SetupQuerySourceList)
+BOOL     WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC, PCSTR, LONGLONG *, PVOID, UINT);
+BOOL     WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC, PCWSTR, LONGLONG *, PVOID, UINT);
+#define         SetupQuerySpaceRequiredOnDrive WINELIB_NAME_AW(SetupQuerySpaceRequiredOnDrive)
+BOOL     WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD);
+BOOL     WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD);
+#define         SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy)
+BOOL     WINAPI SetupQueueCopyIndirectA( PSP_FILE_COPY_PARAMS_A );
+BOOL     WINAPI SetupQueueCopyIndirectW( PSP_FILE_COPY_PARAMS_W );
+#define         SetupQueueCopyIndirect WINELIB_NAME_AW(SetupQueueCopyIndirect)
+BOOL     WINAPI SetupQueueCopySectionA( HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD );
+BOOL     WINAPI SetupQueueCopySectionW( HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD );
+#define         SetupQueueCopySection WINELIB_NAME_AW(SetupQueueCopySection)
+BOOL     WINAPI SetupQueueDefaultCopyA( HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD );
+BOOL     WINAPI SetupQueueDefaultCopyW( HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD );
+#define         SetupQueueDefaultCopy WINELIB_NAME_AW(SetupQueueDefaultCopy)
+BOOL     WINAPI SetupQueueDeleteA( HSPFILEQ, PCSTR, PCSTR );
+BOOL     WINAPI SetupQueueDeleteW( HSPFILEQ, PCWSTR, PCWSTR );
+#define         SetupQueueDelete WINELIB_NAME_AW(SetupQueueDelete)
+BOOL     WINAPI SetupQueueDeleteSectionA( HSPFILEQ, HINF, HINF, PCSTR );
+BOOL     WINAPI SetupQueueDeleteSectionW( HSPFILEQ, HINF, HINF, PCWSTR );
+#define         SetupQueueDeleteSection WINELIB_NAME_AW(SetupQueueDeleteSection)
+BOOL     WINAPI SetupQueueRenameA( HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR );
+BOOL     WINAPI SetupQueueRenameW( HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR );
+#define         SetupQueueRename WINELIB_NAME_AW(SetupQueueRename)
+BOOL     WINAPI SetupQueueRenameSectionA( HSPFILEQ, HINF, HINF, PCSTR );
+BOOL     WINAPI SetupQueueRenameSectionW( HSPFILEQ, HINF, HINF, PCWSTR );
+#define         SetupQueueRenameSection WINELIB_NAME_AW(SetupQueueRenameSection)
+BOOL     WINAPI SetupRemoveFileLogEntryA(HSPFILELOG, PCSTR, PCSTR);
+BOOL     WINAPI SetupRemoveFileLogEntryW(HSPFILELOG, PCWSTR, PCWSTR);
+#define         SetupRemoveFileLogEntry WINELIB_NAME_AW(SetupRemoveFileLogEntry)
+BOOL     WINAPI SetupRemoveFromDiskSpaceListA(HDSKSPC, PCSTR, UINT, PVOID, UINT);
+BOOL     WINAPI SetupRemoveFromDiskSpaceListW(HDSKSPC, PCWSTR, UINT, PVOID, UINT);
+#define         SetupRemoveFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveFromDiskSpaceList)
+BOOL     WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, PVOID, UINT);
+BOOL     WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, PVOID, UINT);
+#define         SetupRemoveInstallSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveInstallSectionFromDiskSpaceList)
+BOOL     WINAPI SetupRemoveSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);
+BOOL     WINAPI SetupRemoveSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
+#define         SetupRemoveSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveSectionFromDiskSpaceList)
+BOOL     WINAPI SetupRemoveFromSourceListA(DWORD, PCSTR);
+BOOL     WINAPI SetupRemoveFromSourceListW(DWORD, PCWSTR);
+#define         SetupRemoveFromSourceList WINELIB_NAME_AW(SetupRemoveFromSourceList)
+UINT     WINAPI SetupRenameErrorA( HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD );
+UINT     WINAPI SetupRenameErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD );
+#define         SetupRenameError WINELIB_NAME_AW(SetupRenameError)
+BOOL     WINAPI SetupScanFileQueueA( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD );
+BOOL     WINAPI SetupScanFileQueueW( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD );
+#define         SetupScanFileQueue WINELIB_NAME_AW(SetupScanFileQueue)
+BOOL     WINAPI SetupSetDirectoryIdA( HINF, DWORD, PCSTR );
+BOOL     WINAPI SetupSetDirectoryIdW( HINF, DWORD, PCWSTR );
+#define         SetupSetDirectoryId WINELIB_NAME_AW(SetupSetDirectoryId)
+BOOL     WINAPI SetupSetDirectoryIdExA( HINF, DWORD, PCSTR, DWORD, DWORD, PVOID );
+BOOL     WINAPI SetupSetDirectoryIdExW( HINF, DWORD, PCWSTR, DWORD, DWORD, PVOID );
+#define         SetupSetDirectoryIdEx WINELIB_NAME_AW(SetupSetDirectoryIdEx)
+BOOL     WINAPI SetupSetFileQueueAlternatePlatformA( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR );
+BOOL     WINAPI SetupSetFileQueueAlternatePlatformW( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR );
+#define         SetupSetFileQueueAlternatePlatform WINELIB_NAME_AW(SetupSetFileQueueAlternatePlatform)
+BOOL     WINAPI SetupSetFileQueueFlags( HSPFILEQ, DWORD, DWORD );
+BOOL     WINAPI SetupSetNonInteractiveMode(BOOL);
+BOOL     WINAPI SetupSetPlatformPathOverrideA(PCSTR);
+BOOL     WINAPI SetupSetPlatformPathOverrideW(PCWSTR);
+#define         SetupSetPlatformPathOverride WINELIB_NAME_AW(SetupSetPlatformPathOverride)
+BOOL     WINAPI SetupSetSourceListA(DWORD, PCSTR *, UINT);
+BOOL     WINAPI SetupSetSourceListW(DWORD, PCWSTR *, UINT);
+#define         SetupSetSourceList WINELIB_NAME_AW(SetupSetSourceList)
+void     WINAPI SetupTermDefaultQueueCallback( PVOID );
+BOOL     WINAPI SetupTerminateFileLog(HSPFILELOG);
+BOOL     WINAPI SetupUninstallOEMInfA(PCSTR, DWORD, PVOID);
+BOOL     WINAPI SetupUninstallOEMInfW(PCWSTR, DWORD, PVOID);
+#define         SetupUninstallOEMInf WINELIB_NAME_AW(SetupUninstallOEMInf)
+BOOL     WINAPI SetupUninstallNewlyCopiedInfs(HSPFILEQ, DWORD, PVOID);
+BOOL     WINAPI SetupVerifyInfFileA(PCSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_A);
+BOOL     WINAPI SetupVerifyInfFileW(PCWSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_W);
+#define         SetupVerifyInfFile WINELIB_NAME_AW(SetupVerifyInfFile)
+DWORD    WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR);
+DWORD    WINAPI TakeOwnershipOfFile(PCWSTR);
+PSTR     WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);
+BOOL     WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef DECL_WINELIB_SETUPAPI_TYPE_AW
+
+#include <poppack.h>
+
+#endif /* _INC_SETUPAPI */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h
new file mode 100644
index 0000000..acb5fa4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h
@@ -0,0 +1,55 @@
+/*
+ * Definitions for the System File Checker (Windows File Protection)
+ *
+ * Copyright 2006 Detlef Riekenberg
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SFC_H
+#define __WINE_SFC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Types */
+
+typedef struct _PROTECTED_FILE_DATA {
+ WCHAR FileName[MAX_PATH];
+ DWORD FileNumber;
+} PROTECTED_FILE_DATA, *PPROTECTED_FILE_DATA;
+
+/* Functions */
+
+BOOL WINAPI SfcGetNextProtectedFile(HANDLE, PPROTECTED_FILE_DATA);
+BOOL WINAPI SfcIsFileProtected(HANDLE, LPCWSTR);
+BOOL WINAPI SfcIsKeyProtected(HKEY, LPCWSTR, REGSAM);
+BOOL WINAPI SfpVerifyFile(LPCSTR, LPSTR, DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl
new file mode 100644
index 0000000..033cd09
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl
@@ -0,0 +1,613 @@
+/*
+ * Deprecated shell interfaces
+ *
+ * Copyright (C) 2010 Nikolay Sivov 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "ocidl.idl";
+import "shtypes.idl";
+import "shobjidl.idl";
+import "hlink.idl";
+import "exdisp.idl";
+
+cpp_quote("#define TLOG_BACK    -1")
+cpp_quote("#define TLOG_FORE    1")
+
+cpp_quote("#define TLMENUF_INCLUDECURRENT   0x00000001")
+cpp_quote("#define TLMENUF_CHECKCURRENT     (TLMENUF_INCLUDECURRENT | 0x00000002)")
+cpp_quote("#define TLMENUF_BACK             0x00000010")
+cpp_quote("#define TLMENUF_FORE             0x00000020")
+cpp_quote("#define TLMENUF_BACKANDFORTH     (TLMENUF_BACK | TLMENUF_FORE | TLMENUF_INCLUDECURRENT)")
+
+[
+    hidden,
+    local,
+    object,
+    uuid(F46EDB3B-BC2F-11d0-9412-00AA00A3EBD3)
+]
+interface ITravelEntry : IUnknown
+{
+    HRESULT Invoke(
+        [in] IUnknown *punk);
+
+    HRESULT Update(
+        [in] IUnknown *punk,
+        [in] BOOL fIsLocalAnchor);
+
+    HRESULT GetPidl(
+        [out] LPITEMIDLIST *ppidl);
+};
+
+[
+    hidden,
+    local,
+    object,
+    uuid(66A9CB08-4802-11d2-A561-00A0C92DBFE8)
+]
+interface ITravelLog : IUnknown
+{
+    HRESULT AddEntry(
+        [in] IUnknown *punk,
+        [in] BOOL fIsLocalAnchor);
+
+    HRESULT UpdateEntry(
+        [in] IUnknown *punk,
+        [in] BOOL fIsLocalAnchor);
+
+    HRESULT UpdateExternal(
+        [in] IUnknown *punk,
+        [in] IUnknown *punkHLBrowseContext);
+
+    HRESULT Travel(
+        [in] IUnknown *punk,
+        [in] int iOffset);
+
+    HRESULT GetTravelEntry(
+        [in]  IUnknown *punk,
+        [in]  int iOffset,
+        [optional, out] ITravelEntry **ppte);
+
+    HRESULT FindTravelEntry(
+        [in]  IUnknown *punk,
+        [in]  LPCITEMIDLIST pidl,
+        [out] ITravelEntry **ppte);
+
+    HRESULT GetToolTipText(
+        [in]  IUnknown *punk,
+        [in]  int iOffset,
+        [in]  int idsTemplate,
+        [out, size_is(cchText)] LPWSTR pwzText,
+        [in]  DWORD cchText);
+
+    HRESULT InsertMenuEntries(
+        [in] IUnknown *punk,
+        [in] HMENU hmenu,
+        [in] int nPos,
+        [in] int idFirst,
+        [in] int idLast,
+        [in] DWORD dwFlags);
+
+    HRESULT Clone(
+        [out] ITravelLog **pptl);
+
+    DWORD CountEntries(
+        [in] IUnknown *punk);
+
+    HRESULT Revert();
+};
+
+typedef void *CIE4ConnectionPoint;
+
+[
+    local,
+    object,
+    uuid(0D7D1D00-6FC0-11D0-A974-00C04FD705A2)
+]
+interface IExpDispSupport : IUnknown
+{
+    HRESULT FindCIE4ConnectionPoint(
+        REFIID riid,
+        CIE4ConnectionPoint **ppccp);
+
+    HRESULT OnTranslateAccelerator(
+        MSG  *pMsg,
+        DWORD grfModifiers);
+
+    HRESULT OnInvoke(
+        DISPID dispidMember,
+        REFIID iid,
+        LCID lcid,
+        WORD wFlags,
+        DISPPARAMS *pdispparams,
+        VARIANT *pVarResult,
+        EXCEPINFO *pexcepinfo,
+        UINT *puArgErr);
+};
+
+typedef enum tagBNSTATE
+{
+    BNS_NORMAL = 0,
+    BNS_BEGIN_NAVIGATE = 1,
+    BNS_NAVIGATE = 2
+
+} BNSTATE;
+
+enum {
+    SBSC_HIDE = 0,
+    SBSC_SHOW = 1,
+    SBSC_TOGGLE = 2,
+    SBSC_QUERY =  3
+};
+
+cpp_quote("#define BSF_REGISTERASDROPTARGET     0x00000001")
+cpp_quote("#define BSF_THEATERMODE              0x00000002")
+cpp_quote("#define BSF_NOLOCALFILEWARNING       0x00000010")
+cpp_quote("#define BSF_UISETBYAUTOMATION        0x00000100")
+cpp_quote("#define BSF_RESIZABLE                0x00000200")
+cpp_quote("#define BSF_CANMAXIMIZE              0x00000400")
+cpp_quote("#define BSF_TOPBROWSER               0x00000800")
+cpp_quote("#define BSF_NAVNOHISTORY             0x00001000")
+cpp_quote("#define BSF_HTMLNAVCANCELED          0x00002000")
+cpp_quote("#define BSF_DONTSHOWNAVCANCELPAGE    0x00004000")
+cpp_quote("#define BSF_SETNAVIGATABLECODEPAGE   0x00008000")
+cpp_quote("#define BSF_DELEGATEDNAVIGATION      0x00010000")
+cpp_quote("#define BSF_TRUSTEDFORACTIVEX        0x00020000")
+
+cpp_quote("#define HLNF_CALLERUNTRUSTED             0x00200000")
+cpp_quote("#define HLNF_TRUSTEDFORACTIVEX           0x00400000")
+cpp_quote("#define HLNF_DISABLEWINDOWRESTRICTIONS   0x00800000")
+cpp_quote("#define HLNF_TRUSTFIRSTDOWNLOAD          0x01000000")
+cpp_quote("#define HLNF_UNTRUSTEDFORDOWNLOAD        0x02000000")
+cpp_quote("#define SHHLNF_NOAUTOSELECT              0x04000000")
+cpp_quote("#define SHHLNF_WRITENOHISTORY            0x08000000")
+cpp_quote("#define HLNF_EXTERNALNAVIGATE            0x10000000")
+cpp_quote("#define HLNF_ALLOW_AUTONAVIGATE          0x20000000")
+cpp_quote("#define HLNF_NEWWINDOWSMANAGED           0x80000000")
+
+[
+    local,
+    object,
+    uuid(02ba3b52-0547-11d1-b833-00c04fc9b31f)
+]
+interface IBrowserService : IUnknown
+{
+    HRESULT GetParentSite(
+        [out] IOleInPlaceSite **ppipsite);
+
+    HRESULT SetTitle(
+        [in] IShellView *psv,
+        [in] LPCWSTR pszName);
+
+    HRESULT GetTitle(
+        [in] IShellView *psv,
+        [out, size_is(cchName)] LPWSTR pszName,
+        [in] DWORD cchName);
+
+    HRESULT GetOleObject(
+        [out] IOleObject **ppobjv);
+
+    HRESULT GetTravelLog(
+        [out, optional] ITravelLog **pptl);
+
+    HRESULT ShowControlWindow(
+        [in] UINT id,
+        [in] BOOL fShow);
+
+    HRESULT IsControlWindowShown(
+        [in] UINT id,
+        [out] BOOL *pfShown);
+
+    HRESULT IEGetDisplayName(
+        [in] PCIDLIST_ABSOLUTE pidl,
+        [out] LPWSTR pwszName,
+        [in] UINT uFlags);
+
+    HRESULT IEParseDisplayName(
+        [in] UINT uiCP,
+        [in] LPCWSTR pwszPath,
+        [out] PIDLIST_ABSOLUTE *ppidlOut);
+
+    HRESULT DisplayParseError(
+        [in] HRESULT hres,
+        [in] LPCWSTR pwszPath);
+
+    HRESULT NavigateToPidl(
+        [in] PCIDLIST_ABSOLUTE pidl,
+        [in] DWORD grfHLNF);
+
+    HRESULT SetNavigateState(
+        [in] BNSTATE bnstate);
+
+    HRESULT GetNavigateState(
+        [out] BNSTATE *pbnstate);
+
+    HRESULT NotifyRedirect(
+        [in] IShellView *psv,
+        [in] PCIDLIST_ABSOLUTE pidl,
+        [out] BOOL *pfDidBrowse);
+
+    HRESULT UpdateWindowList();
+
+    HRESULT UpdateBackForwardState();
+
+    HRESULT SetFlags(
+        [in] DWORD dwFlags,
+        [in] DWORD dwFlagMask);
+
+    HRESULT GetFlags(
+        [out] DWORD *pdwFlags);
+
+    HRESULT CanNavigateNow();
+
+    HRESULT GetPidl(
+        [out] PIDLIST_ABSOLUTE *ppidl);
+
+    HRESULT SetReferrer(
+        [in] PCIDLIST_ABSOLUTE pidl);
+
+    DWORD GetBrowserIndex();
+
+    HRESULT GetBrowserByIndex(
+        [in] DWORD dwID,
+        [out] IUnknown **ppunk);
+
+    HRESULT GetHistoryObject(
+        [out] IOleObject **ppole,
+        [out] IStream **pstm,
+        [out] IBindCtx **ppbc);
+
+    HRESULT SetHistoryObject(
+        [in] IOleObject *pole,
+        [in] BOOL fIsLocalAnchor);
+
+    HRESULT CacheOLEServer(
+        [in] IOleObject *pole);
+
+    HRESULT GetSetCodePage(
+        [in] VARIANT *pvarIn,
+        [out] VARIANT *pvarOut);
+
+    HRESULT OnHttpEquiv(
+        [in] IShellView *psv,
+        [in] BOOL fDone,
+        [in] VARIANT *pvarargIn,
+        [out] VARIANT *pvarargOut);
+
+    HRESULT GetPalette(
+        [out] HPALETTE *hpal);
+
+    HRESULT RegisterWindow(
+        [in] BOOL fForceRegister,
+        [in] int swc);
+}
+
+[
+    object,
+    local,
+    uuid(5836fb00-8187-11cf-a12b-00aa004ae837)
+]
+interface IShellService : IUnknown
+{
+    HRESULT SetOwner( [in] IUnknown *pUnk );
+}
+
+cpp_quote("#if 0")
+typedef HANDLE HMONITOR;
+cpp_quote("#endif")
+
+enum {
+    SECURELOCK_NOCHANGE                 = -1,
+    SECURELOCK_SET_UNSECURE             = 0,
+    SECURELOCK_SET_MIXED                = 1,
+    SECURELOCK_SET_SECUREUNKNOWNBIT     = 2,
+    SECURELOCK_SET_SECURE40BIT          = 3,
+    SECURELOCK_SET_SECURE56BIT          = 4,
+    SECURELOCK_SET_FORTEZZA             = 5,
+    SECURELOCK_SET_SECURE128BIT         = 6,
+    SECURELOCK_FIRSTSUGGEST             = 7,
+    SECURELOCK_SUGGEST_UNSECURE         = SECURELOCK_FIRSTSUGGEST,
+    SECURELOCK_SUGGEST_MIXED            = 8,
+    SECURELOCK_SUGGEST_SECUREUNKNOWNBIT = 9,
+    SECURELOCK_SUGGEST_SECURE40BIT      = 10,
+    SECURELOCK_SUGGEST_SECURE56BIT      = 11,
+    SECURELOCK_SUGGEST_FORTEZZA         = 12,
+    SECURELOCK_SUGGEST_SECURE128BIT     = 13,
+};
+
+
+typedef struct {
+    HWND _hwnd;
+    ITravelLog *_ptl;
+    IHlinkFrame *_phlf;
+    IWebBrowser2 *_pautoWB2;
+    IExpDispSupport *_pautoEDS;
+    IShellService *_pautoSS;
+    int _eSecureLockIcon;
+    DWORD _fCreatingViewWindow;
+    UINT _uActivateState;
+
+    LPCITEMIDLIST _pidlNewShellView;
+
+    IOleCommandTarget *_pctView;
+
+    LPITEMIDLIST _pidlCur;
+    IShellView *_psv;
+    IShellFolder *_psf;
+    HWND _hwndView;
+    LPWSTR _pszTitleCur;
+
+    LPITEMIDLIST _pidlPending;
+    IShellView *_psvPending;
+    IShellFolder *_psfPending;
+    HWND _hwndViewPending;
+    LPWSTR _pszTitlePending;
+
+    BOOL _fIsViewMSHTML;
+    BOOL _fPrivacyImpacted;
+
+} BASEBROWSERDATA, *LPBASEBROWSERDATA;
+typedef const BASEBROWSERDATA *LPCBASEBROWSERDATA;
+
+cpp_quote("#define VIEW_PRIORITY_RESTRICTED         0x00000070")
+cpp_quote("#define VIEW_PRIORITY_CACHEHIT           0x00000050")
+cpp_quote("#define VIEW_PRIORITY_STALECACHEHIT      0x00000045")
+cpp_quote("#define VIEW_PRIORITY_USEASDEFAULT       0x00000043")
+cpp_quote("#define VIEW_PRIORITY_SHELLEXT           0x00000040")
+cpp_quote("#define VIEW_PRIORITY_CACHEMISS          0x00000030")
+cpp_quote("#define VIEW_PRIORITY_INHERIT            0x00000020")
+cpp_quote("#define VIEW_PRIORITY_SHELLEXT_ASBACKUP  0x0015")
+cpp_quote("#define VIEW_PRIORITY_DESPERATE          0x00000010")
+cpp_quote("#define VIEW_PRIORITY_NONE               0x00000000")
+
+typedef struct tagFolderSetData {
+    FOLDERSETTINGS _fs;
+    SHELLVIEWID _vidRestore;
+    DWORD _dwViewPriority;
+} FOLDERSETDATA, *LPFOLDERSETDATA;
+
+typedef struct SToolbarItem {
+    IDockingWindow *ptbar;
+    BORDERWIDTHS rcBorderTool;
+    LPWSTR pwszItem;
+    BOOL fShow;
+    HMONITOR hMon;
+} TOOLBARITEM, *LPTOOLBARITEM;
+
+cpp_quote("#define ITB_VIEW        ((UINT)-1)")
+
+[
+    local,
+    object,
+    uuid(68BD21CC-438B-11d2-A560-00A0C92DBFE8)
+]
+interface IBrowserService2 : IBrowserService
+{
+    LRESULT WndProcBS(
+        [in] HWND hwnd,
+        [in] UINT uMsg,
+        [in, out] WPARAM wParam,
+        [in, out] LPARAM lParam);
+
+    HRESULT SetAsDefFolderSettings();
+
+    HRESULT GetViewRect(
+        [in, out] RECT *prc);
+
+    HRESULT OnSize(
+        [in] WPARAM wParam);
+
+    HRESULT OnCreate(
+        [in] struct tagCREATESTRUCTW *pcs);
+
+    LRESULT OnCommand(
+        [in] WPARAM wParam,
+        [in] LPARAM lParam);
+
+    HRESULT OnDestroy();
+
+    LRESULT OnNotify(
+        [in, out] struct tagNMHDR *pnm);
+
+    HRESULT OnSetFocus();
+
+    HRESULT OnFrameWindowActivateBS(
+        [in] BOOL fActive);
+
+    HRESULT ReleaseShellView();
+
+    HRESULT ActivatePendingView();
+
+    HRESULT CreateViewWindow(
+        [in] IShellView *psvNew,
+        [in] IShellView *psvOld,
+        [out] LPRECT prcView,
+        [out] HWND *phwnd);
+
+    HRESULT CreateBrowserPropSheetExt(
+        [in] REFIID riid,
+        [out] void **ppv);
+
+    HRESULT GetViewWindow(
+        [out] HWND *phwndView);
+
+    HRESULT GetBaseBrowserData(
+        [in, out] LPCBASEBROWSERDATA *pbbd);
+
+    LPBASEBROWSERDATA PutBaseBrowserData();
+
+    HRESULT InitializeTravelLog(
+        [in] ITravelLog *ptl,
+        [in] DWORD dw);
+
+    HRESULT SetTopBrowser();
+
+    HRESULT Offline(
+        [in] int iCmd);
+
+    HRESULT AllowViewResize(
+        [in] BOOL f);
+
+    HRESULT SetActivateState(
+        [in] UINT u);
+
+    HRESULT UpdateSecureLockIcon(
+        [in] int eSecureLock);
+
+    HRESULT InitializeDownloadManager();
+
+    HRESULT InitializeTransitionSite();
+
+    HRESULT _Initialize(
+        [in] HWND hwnd,
+        [in] IUnknown *pauto);
+
+    HRESULT _CancelPendingNavigationAsync();
+
+    HRESULT _CancelPendingView();
+
+    HRESULT _MaySaveChanges();
+
+    HRESULT _PauseOrResumeView(
+        [in] BOOL fPaused);
+
+    HRESULT _DisableModeless();
+
+    HRESULT _NavigateToPidl(
+        [in] LPCITEMIDLIST pidl,
+        [in] DWORD grfHLNF,
+        [in] DWORD dwFlags);
+
+    HRESULT _TryShell2Rename(
+        [in] IShellView *psv,
+        [in] LPCITEMIDLIST pidlNew);
+
+    HRESULT _SwitchActivationNow();
+
+    HRESULT _ExecChildren(
+        [in] IUnknown *punkBar,
+        [in] BOOL fBroadcast,
+        [in] const GUID *pguidCmdGroup,
+        [in] DWORD nCmdID,
+        [in] DWORD nCmdexecopt,
+        [in] VARIANTARG *pvarargIn,
+        [in, out] VARIANTARG *pvarargOut);
+
+    HRESULT _SendChildren(
+        [in] HWND hwndBar,
+        [in] BOOL fBroadcast,
+        [in] UINT uMsg,
+        [in, out] WPARAM wParam,
+        [in, out] LPARAM lParam);
+
+    HRESULT GetFolderSetData(
+        [in, out] struct tagFolderSetData *pfsd);
+
+    HRESULT _OnFocusChange(
+        [in] UINT itb);
+
+    HRESULT v_ShowHideChildWindows(
+        [in] BOOL fChildOnly);
+
+    UINT _get_itbLastFocus();
+
+    HRESULT _put_itbLastFocus(
+        [in] UINT itbLastFocus);
+
+    HRESULT _UIActivateView(
+        [in] UINT uState);
+
+    HRESULT _GetViewBorderRect(
+        [in, out] RECT* prc);
+
+    HRESULT _UpdateViewRectSize();
+
+    HRESULT _ResizeNextBorder(
+        [in] UINT itb);
+
+    HRESULT _ResizeView();
+
+    HRESULT _GetEffectiveClientArea(
+        [in, out] LPRECT lprectBorder,
+        [in] HMONITOR hmon);
+
+    IStream* v_GetViewStream(
+        [in] LPCITEMIDLIST pidl,
+        [in] DWORD grfMode,
+        [in] LPCWSTR pwszName);
+
+    LRESULT ForwardViewMsg(
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam);
+
+    HRESULT SetAcceleratorMenu(
+        [in] HACCEL hacc);
+
+    int _GetToolbarCount();
+
+    LPTOOLBARITEM _GetToolbarItem(
+        [in] int itb);
+
+    HRESULT _SaveToolbars(
+        [in] IStream *pstm);
+
+    HRESULT _LoadToolbars(
+        [in] IStream *pstm);
+
+    HRESULT _CloseAndReleaseToolbars(
+        [in] BOOL fClose);
+
+    HRESULT v_MayGetNextToolbarFocus(
+        [in] LPMSG lpMsg,
+        [in] UINT itbNext,
+        [in] int citb,
+        [out] LPTOOLBARITEM *pptbi,
+        [out] HWND *phwnd);
+
+    HRESULT _ResizeNextBorderHelper(
+        [in] UINT itb,
+        [in] BOOL bUseHmonitor);
+
+    UINT _FindTBar(
+        [in] IUnknown *punkSrc);
+
+    HRESULT _SetFocus(
+        [in] LPTOOLBARITEM ptbi,
+        [in] HWND hwnd,
+        [in] LPMSG lpMsg);
+
+    HRESULT v_MayTranslateAccelerator(
+        [in] MSG* pmsg);
+
+    HRESULT _GetBorderDWHelper(
+        [in] IUnknown *punkSrc,
+        [in] LPRECT lprectBorder,
+        [in] BOOL bUseHmonitor);
+
+    HRESULT v_CheckZoneCrossing(
+        [in, out] LPCITEMIDLIST pidl);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h
new file mode 100644
index 0000000..233f807
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h
@@ -0,0 +1,39 @@
+/*
+ * DispIds for Shell Interfaces
+ *
+ * Copyright (C) 2008 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _SHDISPID_H_
+#define _SHDISPID_H_
+
+#define DISPID_SELECTIONCHANGED     200
+#define DISPID_FILELISTENUMDONE     201
+#define DISPID_VERBINVOKED          202
+#define DISPID_DEFAULTVERBINVOKED   203
+#define DISPID_BEGINDRAG            204
+
+#endif /* defined _SHDISPID_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h
new file mode 100644
index 0000000..e526fe1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h
@@ -0,0 +1,670 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHELLAPI_H
+#define __WINE_SHELLAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <pshpack1.h>
+#endif
+
+DECLARE_HANDLE(HDROP);
+
+/******************************************
+ * DragObject
+ */
+
+typedef struct _DRAGINFOA
+{	UINT uSize;
+	POINT pt;
+	BOOL fNC;
+	LPSTR   lpFileList;
+	DWORD grfKeyState;
+} DRAGINFOA, *LPDRAGINFOA;
+
+typedef struct _DRAGINFOW
+{	UINT uSize;
+	POINT pt;
+	BOOL fNC;
+	LPWSTR  lpFileList;
+	DWORD grfKeyState;
+} DRAGINFOW, *LPDRAGINFOW;
+
+DECL_WINELIB_TYPE_AW(DRAGINFO)
+DECL_WINELIB_TYPE_AW(LPDRAGINFO)
+
+void	WINAPI DragAcceptFiles(HWND hWnd, BOOL b);
+UINT	WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength);
+UINT	WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength);
+#define        DragQueryFile WINELIB_NAME_AW(DragQueryFile)
+void	WINAPI DragFinish(HDROP h);
+BOOL	WINAPI DragQueryPoint(HDROP hDrop, POINT *p);
+
+
+
+/******************************************
+ * Application Bar
+ */
+#define ABM_NEW			0x00000000
+#define ABM_REMOVE		0x00000001
+#define ABM_QUERYPOS		0x00000002
+#define ABM_SETPOS		0x00000003
+#define ABM_GETSTATE		0x00000004
+#define ABM_GETTASKBARPOS	0x00000005
+#define ABM_ACTIVATE		0x00000006
+#define ABM_GETAUTOHIDEBAR	0x00000007
+#define ABM_SETAUTOHIDEBAR	0x00000008
+#define ABM_WINDOWPOSCHANGED	0x00000009
+
+#define ABN_STATECHANGE		0x00000000
+#define ABN_POSCHANGED		0x00000001
+#define ABN_FULLSCREENAPP	0x00000002
+#define ABN_WINDOWARRANGE	0x00000003
+
+#define ABS_AUTOHIDE		0x00000001
+#define ABS_ALWAYSONTOP		0x00000002
+
+#define ABE_LEFT		0
+#define ABE_TOP			1
+#define ABE_RIGHT		2
+#define ABE_BOTTOM		3
+
+typedef struct _AppBarData
+{	DWORD	cbSize;
+	HWND	hWnd;
+	UINT	uCallbackMessage;
+	UINT	uEdge;
+	RECT	rc;
+	LPARAM	lParam;
+} APPBARDATA, *PAPPBARDATA;
+
+UINT_PTR WINAPI SHAppBarMessage(DWORD,PAPPBARDATA);
+
+/******************************************
+ * SHGetFileInfo
+ */
+
+#define SHGFI_LARGEICON         0x000000000     /* get large icon */
+#define SHGFI_SMALLICON         0x000000001     /* get small icon */
+#define SHGFI_OPENICON          0x000000002     /* get open icon */
+#define SHGFI_SHELLICONSIZE     0x000000004     /* get shell size icon */
+#define SHGFI_PIDL              0x000000008     /* pszPath is a pidl */
+#define SHGFI_USEFILEATTRIBUTES 0x000000010     /* use passed dwFileAttribute */
+#define SHGFI_ADDOVERLAYS       0x000000020
+#define SHGFI_OVERLAYINDEX      0x000000040
+#define SHGFI_ICON              0x000000100     /* get icon */
+#define SHGFI_DISPLAYNAME       0x000000200     /* get display name */
+#define SHGFI_TYPENAME          0x000000400     /* get type name */
+#define SHGFI_ATTRIBUTES        0x000000800     /* get attributes */
+#define SHGFI_ICONLOCATION      0x000001000     /* get icon location */
+#define SHGFI_EXETYPE           0x000002000     /* return exe type */
+#define SHGFI_SYSICONINDEX      0x000004000     /* get system icon index */
+#define SHGFI_LINKOVERLAY       0x000008000     /* put a link overlay on icon */
+#define SHGFI_SELECTED          0x000010000     /* show icon in selected state */
+#define SHGFI_ATTR_SPECIFIED    0x000020000     /* get only specified attributes */
+
+typedef struct tagSHFILEINFOA
+{	HICON	hIcon;			/* icon */
+	int	iIcon;			/* icon index */
+	DWORD	dwAttributes;		/* SFGAO_ flags */
+	CHAR	szDisplayName[MAX_PATH];/* display name (or path) */
+	CHAR	szTypeName[80];		/* type name */
+} SHFILEINFOA;
+
+typedef struct tagSHFILEINFOW
+{	HICON	hIcon;			/* icon */
+	int	iIcon;			/* icon index */
+	DWORD	dwAttributes;		/* SFGAO_ flags */
+	WCHAR	szDisplayName[MAX_PATH];/* display name (or path) */
+	WCHAR	szTypeName[80];		/* type name */
+} SHFILEINFOW;
+
+DECL_WINELIB_TYPE_AW(SHFILEINFO)
+
+DWORD_PTR	WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+DWORD_PTR	WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
+#define  SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo)
+
+/******************************************
+ * SHGetImageList
+ */
+
+HRESULT WINAPI SHGetImageList(INT, REFIID, void **);
+
+#define SHIL_LARGE        0x0
+#define SHIL_SMALL        0x1
+#define SHIL_EXTRALARGE   0x2
+#define SHIL_SYSSMALL     0x3
+#define SHIL_JUMBO        0x4
+#define SHIL_LAST         SHIL_JUMBO
+
+/******************************************
+ * SHSetFileInfo
+ */
+
+/******************************************
+* SHFileOperation
+*/
+#define FO_MOVE           0x0001
+#define FO_COPY           0x0002
+#define FO_DELETE         0x0003
+#define FO_RENAME         0x0004
+
+#define FOF_MULTIDESTFILES         0x0001
+#define FOF_CONFIRMMOUSE           0x0002
+#define FOF_SILENT                 0x0004
+#define FOF_RENAMEONCOLLISION      0x0008
+#define FOF_NOCONFIRMATION         0x0010
+#define FOF_WANTMAPPINGHANDLE      0x0020
+#define FOF_ALLOWUNDO              0x0040
+#define FOF_FILESONLY              0x0080
+#define FOF_SIMPLEPROGRESS         0x0100
+#define FOF_NOCONFIRMMKDIR         0x0200
+#define FOF_NOERRORUI              0x0400
+#define FOF_NOCOPYSECURITYATTRIBS  0x0800
+#define FOF_NORECURSION            0x1000  /* don't do recursion into directories */
+#define FOF_NO_CONNECTED_ELEMENTS  0x2000  /* don't do connected files */
+#define FOF_WANTNUKEWARNING        0x4000  /* during delete operation, warn if delete instead
+                                              of recycling (even if FOF_NOCONFIRMATION) */
+#define FOF_NORECURSEREPARSE       0x8000  /* don't do recursion into reparse points */
+#define FOF_NO_UI                  (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR)
+
+typedef WORD FILEOP_FLAGS;
+
+#define PO_DELETE       0x0013
+#define PO_RENAME       0x0014
+#define PO_PORTCHANGE   0x0020
+#define PO_REN_PORT     (PO_RENAME | PO_PORTCHANGE)
+
+typedef WORD PRINTEROP_FLAGS;
+
+typedef struct _SHFILEOPSTRUCTA
+{ HWND          hwnd;
+  UINT          wFunc;
+  LPCSTR          pFrom;
+  LPCSTR          pTo;
+  FILEOP_FLAGS    fFlags;
+  BOOL          fAnyOperationsAborted;
+  LPVOID          hNameMappings;
+  LPCSTR          lpszProgressTitle;
+} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
+
+typedef struct _SHFILEOPSTRUCTW
+{ HWND          hwnd;
+  UINT          wFunc;
+  LPCWSTR         pFrom;
+  LPCWSTR         pTo;
+  FILEOP_FLAGS    fFlags;
+  BOOL          fAnyOperationsAborted;
+  LPVOID          hNameMappings;
+  LPCWSTR         lpszProgressTitle;
+} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
+
+#define  SHFILEOPSTRUCT WINELIB_NAME_AW(SHFILEOPSTRUCT)
+#define  LPSHFILEOPSTRUCT WINELIB_NAME_AW(LPSHFILEOPSTRUCT)
+
+int	WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp);
+int	WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp);
+#define  SHFileOperation WINELIB_NAME_AW(SHFileOperation)
+
+typedef struct _SHNAMEMAPPINGA
+{
+  LPSTR    pszOldPath;
+  LPSTR    pszNewPath;
+  int      cchOldPath;
+  int      cchNewPath;
+} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;
+
+typedef struct _SHNAMEMAPPINGW
+{
+  LPWSTR   pszOldPath;
+  LPWSTR   pszNewPath;
+  int      cchOldPath;
+  int      cchNewPath;
+} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;
+
+DECL_WINELIB_TYPE_AW(SHNAMEMAPPING)
+DECL_WINELIB_TYPE_AW(LPSHNAMEMAPPING)
+
+void WINAPI SHFreeNameMappings(HANDLE hNameMappings);
+
+/******************************************
+ * ShellExecute
+ */
+#define SE_ERR_SHARE            26
+#define SE_ERR_ASSOCINCOMPLETE  27
+#define SE_ERR_DDETIMEOUT       28
+#define SE_ERR_DDEFAIL          29
+#define SE_ERR_DDEBUSY          30
+#define SE_ERR_NOASSOC          31
+
+HINSTANCE	WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);
+HINSTANCE	WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);
+#define     ShellExecute WINELIB_NAME_AW(ShellExecute)
+
+#define SE_ERR_FNF              2       /* file not found */
+#define SE_ERR_PNF              3       /* path not found */
+#define SE_ERR_ACCESSDENIED     5       /* access denied */
+#define SE_ERR_OOM              8       /* out of memory */
+#define SE_ERR_DLLNOTFOUND      32
+#define SE_ERR_SHARE                    26
+#define SE_ERR_ASSOCINCOMPLETE          27
+#define SE_ERR_DDETIMEOUT               28
+#define SE_ERR_DDEFAIL                  29
+#define SE_ERR_DDEBUSY                  30
+#define SE_ERR_NOASSOC                  31
+
+#define SEE_MASK_DEFAULT          0x00000000
+#define SEE_MASK_CLASSNAME        0x00000001
+#define SEE_MASK_CLASSKEY         0x00000003
+#define SEE_MASK_IDLIST           0x00000004
+#define SEE_MASK_INVOKEIDLIST     0x0000000c
+#define SEE_MASK_ICON             0x00000010
+#define SEE_MASK_HOTKEY           0x00000020
+#define SEE_MASK_NOCLOSEPROCESS   0x00000040
+#define SEE_MASK_CONNECTNETDRV    0x00000080
+#define SEE_MASK_NOASYNC          0x00000100
+#define SEE_MASK_FLAG_DDEWAIT     SEE_MASK_NOASYNC
+#define SEE_MASK_DOENVSUBST       0x00000200
+#define SEE_MASK_FLAG_NO_UI       0x00000400
+#define SEE_MASK_UNICODE          0x00004000
+#define SEE_MASK_NO_CONSOLE       0x00008000
+#define SEE_MASK_ASYNCOK          0x00100000
+#define SEE_MASK_HMONITOR         0x00200000
+#define SEE_MASK_NOZONECHECKS     0x00800000
+#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000
+#define SEE_MASK_WAITFORINPUTIDLE 0x02000000
+#define SEE_MASK_FLAG_LOG_USAGE   0x04000000
+
+typedef struct _SHELLEXECUTEINFOA
+{       DWORD cbSize;
+        ULONG fMask;
+        HWND hwnd;
+        LPCSTR   lpVerb;
+        LPCSTR   lpFile;
+        LPCSTR   lpParameters;
+        LPCSTR   lpDirectory;
+       INT nShow;
+        HINSTANCE hInstApp;
+        /* Optional fields */
+        LPVOID lpIDList;
+        LPCSTR   lpClass;
+        HKEY hkeyClass;
+        DWORD dwHotKey;
+        union
+        { HANDLE hIcon;
+          HANDLE hMonitor;
+        } DUMMYUNIONNAME;
+        HANDLE hProcess;
+} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;
+
+typedef struct _SHELLEXECUTEINFOW
+{       DWORD cbSize;
+        ULONG fMask;
+        HWND hwnd;
+        LPCWSTR  lpVerb;
+        LPCWSTR  lpFile;
+        LPCWSTR  lpParameters;
+        LPCWSTR  lpDirectory;
+       INT nShow;
+        HINSTANCE hInstApp;
+        /* Optional fields*/
+        LPVOID lpIDList;
+        LPCWSTR  lpClass;
+        HKEY hkeyClass;
+        DWORD dwHotKey;
+        union
+        { HANDLE hIcon;
+          HANDLE hMonitor;
+        } DUMMYUNIONNAME;
+        HANDLE hProcess;
+} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;
+
+#define SHELLEXECUTEINFO   WINELIB_NAME_AW(SHELLEXECUTEINFO)
+#define LPSHELLEXECUTEINFO WINELIB_NAME_AW(LPSHELLEXECUTEINFO)
+
+BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo);
+BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);
+#define ShellExecuteEx  WINELIB_NAME_AW(ShellExecuteEx)
+
+void WINAPI WinExecErrorA(HWND hwnd,INT error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);
+void WINAPI WinExecErrorW(HWND hwnd,INT error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);
+#define WinExecError  WINELIB_NAME_AW(WinExecError)
+
+/******************************************
+ * Tray Notification
+ */
+/* notifyicondata.uFlags values*/
+#define NIF_MESSAGE             0x00000001
+#define NIF_ICON                0x00000002
+#define NIF_TIP                 0x00000004
+#define NIF_STATE               0x00000008
+#define NIF_INFO                0x00000010
+#define NIF_GUID                0x00000020
+#define NIF_REALTIME            0x00000040
+#define NIF_SHOWTIP             0x00000080
+
+/* notifyicondata.dwState values */
+#define NIS_HIDDEN              0x00000001
+#define NIS_SHAREDICON          0x00000002
+
+/* notifyicondata.dwInfoFlags values */
+#define NIIF_NONE               0x00000000
+#define NIIF_INFO               0x00000001
+#define NIIF_WARNING            0x00000002
+#define NIIF_ERROR              0x00000003
+#define NIIF_USER               0x00000004
+#define NIIF_ICONMASK           0x0000000f
+#define NIIF_NOSOUND            0x00000010
+#define NIIF_LARGEICON          0x00000020
+
+/* dwMessage values */
+#define NIM_ADD                 0x00000000
+#define NIM_MODIFY              0x00000001
+#define NIM_DELETE              0x00000002
+#define NIM_SETFOCUS            0x00000003
+#define NIM_SETVERSION          0x00000004
+
+#define NOTIFY_VERSION   3     /* supported by Windows 2000 and later */
+#define NOTIFY_VERSION_4 4     /* supported by Windows Vista */
+
+/* callback message lParam values */
+#define NIN_SELECT              (WM_USER+0)
+#define NINF_KEY                1
+#define NIN_KEYSELECT           (NIN_SELECT|NINF_KEY)  /* WM_USER+1 */
+#define NIN_BALOONSHOW          (WM_USER+2)
+#define NIN_BALOONHIDE          (WM_USER+3)
+#define NIN_BALOONTIMEOUT       (WM_USER+4)
+#define NIN_BALOONCLICK         (WM_USER+5)
+#define NIN_POPUPOPEN           (WM_USER+6)
+#define NIN_POPUPCLOSE          (WM_USER+7)
+
+typedef struct _NOTIFYICONDATAA
+{	DWORD cbSize;
+	HWND hWnd;
+	UINT uID;
+	UINT uFlags;
+	UINT uCallbackMessage;
+	HICON hIcon;
+	CHAR szTip[128];
+	DWORD dwState;
+	DWORD dwStateMask;
+	CHAR szInfo[256];
+	union {
+	    UINT uTimeout;
+	    UINT uVersion;
+	} DUMMYUNIONNAME;
+	CHAR szInfoTitle[64];
+	DWORD dwInfoFlags;
+	GUID guidItem;
+	HICON hBalloonIcon;
+} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
+
+typedef struct _NOTIFYICONDATAW
+{	DWORD cbSize;
+	HWND hWnd;
+	UINT uID;
+	UINT uFlags;
+	UINT uCallbackMessage;
+	HICON hIcon;
+	WCHAR szTip[128];
+	DWORD dwState;
+	DWORD dwStateMask;
+	WCHAR szInfo[256];
+	union {
+	    UINT uTimeout;
+	    UINT uVersion;
+	} DUMMYUNIONNAME;
+	WCHAR szInfoTitle[64];
+	DWORD dwInfoFlags;
+	GUID guidItem;
+	HICON hBalloonIcon;
+} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
+
+DECL_WINELIB_TYPE_AW(NOTIFYICONDATA)
+DECL_WINELIB_TYPE_AW(PNOTIFYICONDATA)
+
+BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);
+BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);
+
+#define Shell_NotifyIcon WINELIB_NAME_AW(Shell_NotifyIcon)
+
+/* pre IE 5.0 */
+#define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
+#define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
+
+/* pre Window XP */
+#define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
+#define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
+
+/* pre Window Vista */
+#define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon)
+#define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon)
+
+
+/******************************************
+ * Links
+ */
+
+#define SHGNLI_PIDL        0x01
+#define SHGNLI_PREFIXNAME  0x02
+#define SHGNLI_NOUNIQUE    0x04
+#define SHGNLI_NOLNK       0x08
+
+BOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT);
+BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT);
+#define     SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
+
+/******************************************
+ * Recycle bin
+ */
+
+typedef struct _SHQUERYRBINFO
+{
+    DWORD cbSize;
+    DWORDLONG i64Size;
+    DWORDLONG i64NumItems;
+} SHQUERYRBINFO, *LPSHQUERYRBINFO;
+
+HRESULT     WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD);
+HRESULT     WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD);
+#define     SHEmptyRecycleBin WINELIB_NAME_AW(SHEmptyRecycleBin)
+HRESULT     WINAPI SHQueryRecycleBinA(LPCSTR,LPSHQUERYRBINFO);
+HRESULT     WINAPI SHQueryRecycleBinW(LPCWSTR,LPSHQUERYRBINFO);
+#define     SHQueryRecycleBin WINELIB_NAME_AW(SHQueryRecycleBin)
+
+/******************************************
+ * Misc
+ */
+
+typedef enum SHSTOCKICONID
+{
+    SIID_INVALID=-1,
+    SIID_DOCNOASSOC,
+    SIID_DOCASSOC,
+    SIID_APPLICATION,
+    SIID_FOLDER,
+    SIID_FOLDEROPEN,
+    SIID_DRIVE525,
+    SIID_DRIVE35,
+    SIID_DRIVERREMOVE,
+    SIID_DRIVERFIXED,
+    SIID_DRIVERNET,
+    SIID_DRIVERNETDISABLE,
+    SIID_DRIVERCD,
+    SIID_DRIVERRAM,
+    SIID_WORLD,
+    /* Missing: 14 */
+    SIID_SERVER = 15,
+    SIID_PRINTER,
+    SIID_MYNETWORK,
+    /* Missing: 18 - 21 */
+    SIID_FIND = 22,
+    SIID_HELP,
+    /* Missing: 24 - 27 */
+    SIID_SHARE = 28,
+    SIID_LINK,
+    SIID_SLOWFILE,
+    SIID_RECYCLER,
+    SIID_RECYCLERFULL,
+    /* Missing: 33 - 39 */
+    SIID_MEDIACDAUDIO = 40,
+    /* Missing: 41 - 46 */
+    SIID_LOCK = 47,
+    /* Missing: 48 */
+    SIID_AUTOLIST = 49,
+    SIID_PRINTERNET,
+    SIID_SERVERSHARE,
+    SIID_PRINTERFAX,
+    SIID_PRINTERFAXNET,
+    SIID_PRINTERFILE,
+    SIID_STACK,
+    SIID_MEDIASVCD,
+    SIID_STUFFEDFOLDER,
+    SIID_DRIVEUNKNOWN,
+    SIID_DRIVEDVD,
+    SIID_MEDIADVD,
+    SIID_MEDIADVDRAM,
+    SIID_MEDIADVDRW,
+    SIID_MEDIADVDR,
+    SIID_MEDIADVDROM,
+    SIID_MEDIACDAUDIOPLUS,
+    SIID_MEDIACDRW,
+    SIID_MEDIACDR,
+    SIID_MEDIACDBURN,
+    SIID_MEDIABLANKCD,
+    SIID_MEDIACDROM,
+    SIID_AUDIOFILES,
+    SIID_IMAGEFILES,
+    SIID_VIDEOFILES,
+    SIID_MIXEDFILES,
+    SIID_FOLDERBACK,
+    SIID_FOLDERFRONT,
+    SIID_SHIELD,
+    SIID_WARNING,
+    SIID_INFO,
+    SIID_ERROR,
+    SIID_KEY,
+    SIID_SOFTWARE,
+    SIID_RENAME,
+    SIID_DELETE,
+    SIID_MEDIAAUDIODVD,
+    SIID_MEDIAMOVIEDVD,
+    SIID_MEDIAENHANCEDCD,
+    SIID_MEDIAENHANCEDDVD,
+    SIID_MEDIAHDDVD,
+    SIID_MEDIABLUERAY,
+    SIID_MEDIAVCD,
+    SIID_MEDIADVDPLUSR,
+    SIID_MEDIADVDPLUSRW,
+    SIID_DESKTOPPC,
+    SIID_MOBILEPC,
+    SIID_USERS,
+    SIID_MEDIASMARTMEDIA,
+    SIID_MEDIACOMPACTFLASH,
+    SIID_DEVICECELLPHONE,
+    SIID_DEVICECAMERA,
+    SIID_DEVICEVIDEOCAMERA,
+    SIID_DEVICEAUDIOPLAYER,
+    SIID_NETWORKCONNECT,
+    SIID_INTERNET,
+    SIID_ZIPFILE,
+    SIID_SETTINGS,
+    /* Missing: 107 - 131 */
+    SIID_DRIVEHDDVD = 132,
+    SIID_DRIVEBD,
+    SIID_MEDIAHDDVDROM,
+    SIID_MEDIAHDDVDR,
+    SIID_MEDIAHDDVDRAM,
+    SIID_MEDIABDROM,
+    SIID_MEDIABDR,
+    SIID_MEDIABDRE,
+    SIID_CLUSTEREDDRIVE,
+    /* Missing: 141 - 174 */
+    SIID_MAX_ICONS = 175
+}SHSTOCKICONID;
+
+typedef struct _SHSTOCKICONINFO
+{
+    DWORD   cbSize;
+    HICON   hIcon;
+    INT     iSysImageIndex;
+    INT     iIcon;
+    WCHAR   szPath[MAX_PATH];
+} SHSTOCKICONINFO;
+
+/* flags for SHGetStockIconInfo */
+#define SHGSI_ICONLOCATION  0
+#define SHGSI_ICON          SHGFI_ICON
+#define SHGSI_SYSICONINDEX  SHGFI_SYSICONINDEX
+#define SHGSI_LINKOVERLAY   SHGFI_LINKOVERLAY
+#define SHGSI_SELECTED      SHGFI_SELECTED
+#define SHGSI_LARGEICON     SHGFI_LARGEICON
+#define SHGSI_SMALLICON     SHGFI_SMALLICON
+#define SHGSI_SHELLICONSIZE SHGFI_SHELLICONSIZE
+
+HRESULT     WINAPI SHGetStockIconInfo(SHSTOCKICONID, UINT, SHSTOCKICONINFO*);
+LPWSTR*     WINAPI CommandLineToArgvW(LPCWSTR,int*);
+HICON       WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);
+HICON       WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);
+#define     ExtractIcon WINELIB_NAME_AW(ExtractIcon)
+HICON       WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD);
+HICON       WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD);
+#define     ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon)
+HICON       WINAPI ExtractAssociatedIconExA(HINSTANCE,LPSTR,LPWORD,LPWORD);
+HICON       WINAPI ExtractAssociatedIconExW(HINSTANCE,LPWSTR,LPWORD,LPWORD);
+#define     ExtractAssociatedIconEx WINELIB_NAME_AW(ExtractAssociatedIconEx)
+UINT        WINAPI ExtractIconExA(LPCSTR,INT,HICON*,HICON*,UINT);
+UINT        WINAPI ExtractIconExW(LPCWSTR,INT,HICON*,HICON*,UINT);
+#define     ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)
+HINSTANCE   WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);
+HINSTANCE   WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);
+#define     FindExecutable WINELIB_NAME_AW(FindExecutable)
+BOOL        WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
+BOOL        WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
+#define     ShellAbout WINELIB_NAME_AW(ShellAbout)
+int         WINAPIV ShellMessageBoxA(HINSTANCE,HWND,LPCSTR,LPCSTR,UINT,...);
+int         WINAPIV ShellMessageBoxW(HINSTANCE,HWND,LPCWSTR,LPCWSTR,UINT,...);
+#define     ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
+DWORD       WINAPI DoEnvironmentSubstA(LPSTR, UINT);
+DWORD       WINAPI DoEnvironmentSubstW(LPWSTR, UINT);
+#define     DoEnvironmentSubst WINELIB_NAME_AW(DoEnvironmentSubst)
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#endif /* __WINE_SHELLAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl
new file mode 100644
index 0000000..1f88214
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl
@@ -0,0 +1,573 @@
+/*
+ * COM interfaces for shell objects
+ *
+ * Copyright (C) 2004 Maxime Bellengé
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+
+#include <shdispid.h>
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef ShellExecute")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * IEnumACString interface
+ */
+[
+    local,
+    object,
+    uuid(8e74c210-cf9d-4eaf-a403-7356428f0a5a),
+    pointer_default(unique)
+]
+interface IEnumACString : IEnumString
+{
+    typedef IEnumACString *PENUMACSTRING, *LPENUMACSTRING;
+
+    typedef enum _tagACENUMOPTION
+    {
+        ACEO_NONE            = 0x00000000,
+        ACEO_MOSTRECENTFIRST = 0x00000001,
+        ACEO_FIRSTUNUSED     = 0x00010000,
+    } ACENUMOPTION;
+
+    HRESULT NextItem( [out] LPWSTR pszUrl,
+                      [in] ULONG cchMax,
+                      [out] ULONG *pulSortIndex);
+
+    HRESULT SetEnumOptions( [in] DWORD dwOptions );
+
+    HRESULT GetEnumOptions( [out] DWORD *pdwOptions );
+}
+
+/*****************************************************************************
+ * IAutoComplete interface
+ */
+[
+    local,
+    object,
+    uuid(00bb2762-6a77-11d0-a535-00c04fd7d062),
+    pointer_default(unique)
+]
+interface IAutoComplete : IUnknown
+{
+    typedef IAutoComplete *LPAUTOCOMPLETE;
+
+    HRESULT Init( [in] HWND hwndEdit,
+		  [in] IUnknown *punkACL,
+		  [in] LPCOLESTR pwszRegKeyPath,
+		  [in] LPCOLESTR pwszQuickComplete);
+    
+    HRESULT Enable( [in] BOOL fEnable );
+}
+
+/*****************************************************************************
+ * IAutoComplete2 interface
+ */
+[
+    local,
+    object,
+    uuid(eac04bc0-3791-11d2-bb95-0060977b464c),
+    pointer_default(unique)
+]
+interface IAutoComplete2 : IAutoComplete
+{
+    typedef IAutoComplete2 *LPAUTOCOMPLETE2;
+
+    typedef enum _tagAUTOCOMPLETEOPTIONS
+	{
+	    ACO_NONE           = 0x00,      /* No AutoComplete */
+	    ACO_AUTOSUGGEST    = 0x01,      /* enable autosuggest dropdown */
+	    ACO_AUTOAPPEND     = 0x02,      /* enable autoappend */
+	    ACO_SEARCH         = 0x04,      /* add search entry to completion list */
+	    ACO_FILTERPREFIXES = 0x08,      /* don't match common prefixes (www., http://, etc) */
+	    ACO_USETAB         = 0x10,      /* use tab to select autosuggest entries */
+	    ACO_UPDOWNKEYDROPSLIST = 0x20,  /* up/down arrow key invokes autosuggest dropdown (if enabled) */
+	    ACO_RTLREADING     = 0x40,      /* enable RTL reading order for dropdown */
+	} AUTOCOMPLETEOPTIONS;
+
+    HRESULT SetOptions( [in] DWORD dwFlag);
+
+    HRESULT GetOptions( [out] DWORD *pdwFlag);
+}
+
+[
+    uuid(50a7e9b0-70ef-11d1-b75a-00a0c90564fe),
+    version(1.0)
+]
+library Shell32
+{
+
+importlib("stdole2.tlb");
+
+[
+    object,
+    oleautomation,
+    uuid(9ba05970-f6a8-11cf-a442-00a0c90a8f39),
+    pointer_default(unique)
+]
+interface IFolderViewOC : IDispatch
+{
+    HRESULT SetFolderView( [in] IDispatch *pdisp );
+}
+
+[
+    uuid(62112aa2-ebe4-11cf-a5fb-0020afe7292d)
+]
+dispinterface DShellFolderViewEvents
+{
+    properties:
+    methods:
+    [id(DISPID_SELECTIONCHANGED)]
+    void SelectionChanged();
+
+    [id(DISPID_FILELISTENUMDONE)]
+    void EnumDone();
+
+    [id(DISPID_VERBINVOKED)]
+    VARIANT_BOOL VerbInvoked();
+
+    [id(DISPID_DEFAULTVERBINVOKED)]
+    VARIANT_BOOL DefaultVerbInvoked();
+
+    [id(DISPID_BEGINDRAG)]
+    VARIANT_BOOL BeginDrag();
+}
+
+[
+    uuid(9ba05971-f6a8-11cf-a442-00a0c90a8f39),
+    hidden
+]
+coclass ShellFolderViewOC
+{
+    [default]         interface     IFolderViewOC;
+    [default, source] dispinterface DShellFolderViewEvents;
+}
+
+interface FolderItem;
+interface FolderItems;
+interface FolderItemVerb;
+interface FolderItemVerbs;
+
+/*****************************************************************************
+ * Folder interface
+ */
+[
+    object,
+    uuid(bbcbde60-c3ff-11ce-8350-444553540000),
+    oleautomation,
+    dual
+]
+interface Folder : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Title( [out, retval] BSTR *pbs );
+
+    [propget]
+    HRESULT Application( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT Parent( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT ParentFolder( [out, retval] Folder **ppsf );
+
+    HRESULT Items( [out, retval] FolderItems **ppid );
+
+    HRESULT ParseName( [in] BSTR bName, [out, retval] FolderItem **ppid );
+
+    HRESULT NewFolder( [in] BSTR bName, [in, optional] VARIANT vOptions );
+
+    HRESULT MoveHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions );
+
+    HRESULT CopyHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions );
+
+    HRESULT GetDetailsOf( [in] VARIANT vItem,
+        [in] int iColumn,
+        [out, retval] BSTR *pbs );
+}
+
+/*****************************************************************************
+ * Folder2 interface
+ */
+[
+    object,
+    uuid(f0d2d8ef-3890-11d2-bf8b-00c04fb93661),
+    oleautomation,
+    dual
+]
+interface Folder2 : Folder
+{
+    [propget]
+    HRESULT Self( [out, retval] FolderItem **ppfi );
+
+    [propget]
+    HRESULT OfflineStatus( [out, retval] LONG *pul );
+
+    HRESULT Synchronize();
+
+    [propget, id(1)]
+    HRESULT HaveToShowWebViewBarricade(
+        [out, retval] VARIANT_BOOL *pbHaveToShowWebViewBarricade );
+
+    HRESULT DismissedWebViewBarricade();
+}
+
+/*****************************************************************************
+ * Folder3 interface
+ */
+[
+    object,
+    uuid(a7ae5f64-c4d7-4d7f-9307-4d24ee54b841),
+    oleautomation,
+    dual
+]
+interface Folder3 : Folder2
+{
+    [propget, id(2)]
+    HRESULT ShowWebViewBarricade(
+        [out, retval] VARIANT_BOOL *pbShowWebViewBarricade );
+
+    [propput, id(2)]
+    HRESULT ShowWebViewBarricade( [in] VARIANT_BOOL bShowWebViewBarricade );
+}
+
+/*****************************************************************************
+ * FolderItem interface
+ */
+[
+    object,
+    uuid(fac32c80-cbe4-11ce-8350-444553540000),
+    oleautomation,
+    dual
+]
+interface FolderItem : IDispatch
+{
+    typedef FolderItem *LPFOLDERITEM;
+
+    [propget]
+    HRESULT Application( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT Parent( [out, retval] IDispatch **ppid );
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT Name( [out, retval] BSTR *pbs );
+
+    [propput, id(DISPID_VALUE)]
+    HRESULT Name( [in] BSTR bs );
+
+    [propget]
+    HRESULT Path( [out, retval] BSTR *pbs );
+
+    [propget]
+    HRESULT GetLink( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT GetFolder( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT IsLink( [out, retval] VARIANT_BOOL *pb );
+
+    [propget]
+    HRESULT IsFolder( [out, retval] VARIANT_BOOL *pb );
+
+    [propget]
+    HRESULT IsFileSystem( [out, retval] VARIANT_BOOL *pb );
+
+    [propget]
+    HRESULT IsBrowsable( [out, retval] VARIANT_BOOL *pb );
+
+    [propget]
+    HRESULT ModifyDate( [out, retval] DATE *pdt );
+
+    [propput]
+    HRESULT ModifyDate( [in] DATE dt );
+
+    [propget]
+    HRESULT Size( [out, retval] LONG *pul );
+
+    [propget]
+    HRESULT Type( [out, retval] BSTR *pbs );
+
+    HRESULT Verbs( [out, retval] FolderItemVerbs **ppfic );
+
+    HRESULT InvokeVerb( [in, optional] VARIANT vVerb );
+}
+
+/*****************************************************************************
+ * FolderItems interface
+ */
+[
+    object,
+    uuid(744129e0-cbe5-11ce-8350-444553540000),
+    oleautomation,
+    dual
+]
+interface FolderItems : IDispatch
+{
+    [propget]
+    HRESULT Count( [out, retval] long *plCount );
+
+    [propget]
+    HRESULT Application( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT Parent( [out, retval] IDispatch **ppid );
+
+    HRESULT Item( [in, optional] VARIANT index,
+        [out, retval] FolderItem **ppid );
+
+    [id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **ppunk );
+}
+
+/*****************************************************************************
+ * FolderItemVerb interface
+ */
+[
+    object,
+    uuid(08ec3e00-50b0-11cf-960c-0080c7f4ee85),
+    oleautomation,
+    dual
+]
+interface FolderItemVerb : IDispatch
+{
+    [propget]
+    HRESULT Application( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT Parent( [out, retval] IDispatch **ppid );
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT Name( [out, retval] BSTR *pbs );
+
+    HRESULT DoIt();
+}
+
+/*****************************************************************************
+ * FolderItemVerbs interface
+ */
+[
+    object,
+    uuid(1f8352c0-50b0-11cf-960c-0080c7f4ee85),
+    oleautomation,
+    dual
+]
+interface FolderItemVerbs : IDispatch
+{
+    [propget]
+    HRESULT Count( [out, retval] long *plCount );
+
+    [propget]
+    HRESULT Application( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT Parent( [out, retval] IDispatch **ppid );
+
+    HRESULT Item( [in, optional] VARIANT index,
+        [out, retval] FolderItemVerb **ppid );
+
+    [id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **ppunk );
+}
+
+/*****************************************************************************
+ * IShellDispatch interface
+ */
+[
+    object,
+    uuid(d8f015c0-c278-11ce-a49e-444553540000),
+    oleautomation,
+    hidden,
+    dual
+]
+interface IShellDispatch : IDispatch
+{
+    [propget]
+    HRESULT Application( [out, retval] IDispatch **ppid );
+
+    [propget]
+    HRESULT Parent( [out, retval] IDispatch **ppid );
+
+    HRESULT NameSpace( [in] VARIANT vDir, [out, retval] Folder **ppsdf );
+
+    HRESULT BrowseForFolder( [in] long Hwnd,
+        [in] BSTR Title,
+        [in] long Options,
+        [in, optional] VARIANT RootFolder,
+        [out, retval] Folder **ppsdf );
+
+    HRESULT Windows( [out, retval] IDispatch **ppid );
+
+    HRESULT Open( [in] VARIANT vDir );
+
+    HRESULT Explore( [in] VARIANT vDir );
+
+    HRESULT MinimizeAll();
+
+    HRESULT UndoMinimizeALL();
+
+    HRESULT FileRun();
+
+    HRESULT CascadeWindows();
+
+    HRESULT TileVertically();
+
+    HRESULT TileHorizontally();
+
+    HRESULT ShutdownWindows();
+
+    HRESULT Suspend();
+
+    HRESULT EjectPC();
+
+    HRESULT SetTime();
+
+    HRESULT TrayProperties();
+
+    HRESULT Help();
+
+    HRESULT FindFiles();
+
+    HRESULT FindComputer();
+
+    HRESULT RefreshMenu();
+
+    HRESULT ControlPanelItem( [in] BSTR szDir );
+}
+
+[
+    object,
+    uuid(a4c6892c-3ba9-11d2-9dea-00c04fb16162),
+    oleautomation,
+    hidden,
+    dual,
+]
+interface IShellDispatch2 : IShellDispatch
+{
+    HRESULT IsRestricted([in] BSTR group, [in] BSTR restriction, [out, retval] long *value);
+    HRESULT ShellExecute([in] BSTR file, [in, optional] VARIANT args, [in, optional] VARIANT dir,
+        [in, optional] VARIANT op, [in, optional] VARIANT show);
+    HRESULT FindPrinter([in, optional] BSTR name, [in, optional] BSTR location, [in, optional] BSTR model);
+    HRESULT GetSystemInformation([in] BSTR name, [out, retval] VARIANT *ret);
+    HRESULT ServiceStart([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret);
+    HRESULT ServiceStop([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret);
+    HRESULT IsServiceRunning([in] BSTR service, [out, retval] VARIANT *running);
+    HRESULT CanStartStopService([in] BSTR service, [out, retval] VARIANT *ret);
+    HRESULT ShowBrowserBar([in] BSTR clsid, [in] VARIANT show, [out, retval] VARIANT *ret);
+}
+
+[
+    uuid(13709620-c279-11ce-a49e-444553540000)
+]
+coclass Shell
+{
+    [default] interface IShellDispatch2;
+}
+
+[
+    uuid(0a89a860-d7b1-11ce-8350-444553540000),
+    hidden
+]
+coclass ShellDispatchInproc
+{
+    interface IUnknown;
+}
+
+typedef
+[
+    uuid(ca31ea20-48d0-11cf-8350-444553540000)
+]
+enum ShellSpecialFolderConstants {
+    ssfDESKTOP          = 0x00,
+    ssfPROGRAMS         = 0x02,
+    ssfCONTROLS         = 0x03,
+    ssfPRINTERS         = 0x04,
+    ssfPERSONAL         = 0x05,
+    ssfFAVORITES        = 0x06,
+    ssfSTARTUP          = 0x07,
+    ssfRECENT           = 0x08,
+    ssfSENDTO           = 0x09,
+    ssfBITBUCKET        = 0x0a,
+    ssfSTARTMENU        = 0x0b,
+    ssfDESKTOPDIRECTORY = 0x10,
+    ssfDRIVES           = 0x11,
+    ssfNETWORK          = 0x12,
+    ssfNETHOOD          = 0x13,
+    ssfFONTS            = 0x14,
+    ssfTEMPLATES        = 0x15,
+    ssfCOMMONSTARTMENU  = 0x16,
+    ssfCOMMONPROGRAMS   = 0x17,
+    ssfCOMMONSTARTUP    = 0x18,
+    ssfCOMMONDESKTOPDIR = 0x19,
+    ssfAPPDATA          = 0x1a,
+    ssfPRINTHOOD        = 0x1b,
+    ssfLOCALAPPDATA     = 0x1c,
+    ssfALTSTARTUP       = 0x1d,
+    ssfCOMMONALTSTARTUP = 0x1e,
+    ssfCOMMONFAVORITES  = 0x1f,
+    ssfINTERNETCACHE    = 0x20,
+    ssfCOOKIES          = 0x21,
+    ssfHISTORY          = 0x22,
+    ssfCOMMONAPPDATA    = 0x23,
+    ssfWINDOWS          = 0x24,
+    ssfSYSTEM           = 0x25,
+    ssfPROGRAMFILES     = 0x26,
+    ssfMYPICTURES       = 0x27,
+    ssfPROFILE          = 0x28,
+    ssfSYSTEMx86        = 0x29,
+    ssfPROGRAMFILESx86  = 0x30
+} ShellSpecialFolderConstants;
+
+} /* library Shell32 */
+
+/*****************************************************************************
+ * IAsyncOperation interface
+ */
+[
+    uuid(3d8b0590-f691-11d2-8ea9-006097df5bd4),
+    object,
+]
+
+interface IAsyncOperation : IUnknown
+{
+    typedef [unique] IAsyncOperation *LPASYNCOPERATION;
+
+    HRESULT SetAsyncMode([in] BOOL fDoOpAsync);
+
+    HRESULT GetAsyncMode([out] BOOL *pfIsOpAsync);
+
+    HRESULT StartOperation([in, unique, optional] IBindCtx *pbcReserved);
+
+    HRESULT InOperation([out] BOOL *pfInAsyncOp);
+
+    HRESULT EndOperation(
+            [in] HRESULT hResult,
+            [in, unique] IBindCtx *pbcReserved,
+            [in] DWORD dwEffects);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h
new file mode 100644
index 0000000..3e3d087
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHLGUID_H
+#define __WINE_SHLGUID_H
+
+DEFINE_OLEGUID(CLSID_ShellDesktop,      0x00021400, 0, 0);
+
+DEFINE_OLEGUID(CATID_BrowsableShellExt, 0x00021490, 0, 0);
+DEFINE_OLEGUID(CATID_BrowseInPlace,     0x00021491, 0, 0);
+DEFINE_OLEGUID(CATID_DeskBand,          0x00021492, 0, 0);
+DEFINE_OLEGUID(CATID_InfoBand,          0x00021493, 0, 0);
+DEFINE_OLEGUID(CATID_CommBand,          0x00021494, 0, 0);
+
+/* shell32 formatids */
+DEFINE_OLEGUID(FMTID_Intshcut,          0x000214A0, 0, 0);
+DEFINE_OLEGUID(FMTID_InternetSite,      0x000214A1, 0, 0);
+
+/* command group ids */
+DEFINE_OLEGUID(CGID_Explorer,           0x000214D0, 0, 0);
+DEFINE_OLEGUID(CGID_ShellDocView,       0x000214D1, 0, 0);
+DEFINE_OLEGUID(CGID_ShellServiceObject, 0x000214D2, 0, 0);
+DEFINE_OLEGUID(CGID_ExplorerBarDoc,     0x000214D3, 0, 0);
+
+DEFINE_OLEGUID(IID_IShellDetails,       0x000214EC, 0, 0);
+DEFINE_OLEGUID(IID_IDelayedRelease,     0x000214ED, 0, 0);
+DEFINE_OLEGUID(IID_IShellCopyHookA,     0x000214EF, 0, 0);
+DEFINE_OLEGUID(IID_IFileViewerA,        0x000214F0, 0, 0);
+DEFINE_OLEGUID(IID_IFileViewerSite,     0x000214F3, 0, 0);
+DEFINE_OLEGUID(IID_IPropSheetPage,      0x000214F6, 0, 0);
+DEFINE_OLEGUID(IID_IFileViewerW,        0x000214F8, 0, 0);
+DEFINE_OLEGUID(IID_IShellCopyHookW,     0x000214FC, 0, 0);
+DEFINE_OLEGUID(IID_IRemoteComputer,     0x000214FE, 0, 0);
+DEFINE_OLEGUID(IID_IQueryInfo,          0x00021500, 0, 0);
+
+
+/* avoid duplicate definitions with shobjidl.h (FIXME) */
+/* DEFINE_OLEGUID(IID_IShellPropSheetExt,  0x000214E9, 0, 0); */
+/* DEFINE_OLEGUID(IID_IExtractIconA,       0x000214EB, 0, 0); */
+/* DEFINE_OLEGUID(IID_IExtractIconW,       0x000214FA, 0, 0); */
+/* DEFINE_OLEGUID(IID_IContextMenu,        0x000214E4, 0, 0); */
+/* DEFINE_OLEGUID(IID_IContextMenu2,       0x000214F4, 0, 0); */
+/* DEFINE_OLEGUID(IID_ICommDlgBrowser,     0x000214F1, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellBrowser,       0x000214E2, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellView,          0x000214E3, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellFolder,        0x000214E6, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellExtInit,       0x000214E8, 0, 0); */
+/* DEFINE_OLEGUID(IID_IPersistFolder,      0x000214EA, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellLinkA,         0x000214EE, 0, 0); */
+/* DEFINE_OLEGUID(IID_IEnumIDList,         0x000214F2, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellLinkW,         0x000214F9, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellExecuteHookA,  0x000214F5, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellExecuteHookW,  0x000214FB, 0, 0); */
+/* DEFINE_OLEGUID(IID_INewShortcutHookA,   0x000214E1, 0, 0); */
+/* DEFINE_OLEGUID(IID_INewShortcutHookW,   0x000214F7, 0, 0); */
+
+#ifndef NO_INTSHCUT_GUIDS
+#include <isguids.h>
+#endif
+
+#ifndef NO_SHDOCVW_GUIDS
+# ifndef GUID_DEFS_ONLY
+#  include <exdisp.h>
+#  include <shldisp.h>
+# endif
+
+DEFINE_GUID(IID_IACList,   0x77A130B0,0x94FD,0x11D0,0xA5,0x44,0x00,0xC0,0x4F,0xD7,0xD0,0x62);
+DEFINE_GUID(IID_IACList2,  0x470141A0,0x5186,0x11D2,0xBB,0xB6,0x00,0x60,0x97,0x7B,0x46,0x4C);
+DEFINE_GUID(IID_IObjMgr,   0x00BB2761,0x6A77,0x11D0,0xA5,0x35,0x00,0xC0,0x4F,0xD7,0xD0,0x62);
+
+DEFINE_GUID(IID_IProgressDialog, 0xEBBC7C04,0x315E,0x11D2,0xB6,0x2F,0x00,0x60,0x97,0xDF,0x5B,0xD4);
+#define SID_SProgressUI CLSID_ProgressDialog
+
+DEFINE_GUID(CLSID_CUrlHistory, 0x3c374a40, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee);
+#define SID_SUrlHistory       CLSID_CUrlHistory
+
+DEFINE_GUID(CLSID_CURLSearchHook, 0xcfbfae00, 0x17a6, 0x11d0, 0x99, 0xcb, 0x00, 0xc0, 0x4f, 0xd6, 0x44, 0x97);
+
+DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
+
+DEFINE_GUID(CLSID_AutoComplete,   0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
+DEFINE_GUID(CLSID_ACLMulti,       0x00bb2765, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
+DEFINE_GUID(CLSID_ACListISF,      0x03c036f1, 0xa186, 0x11d0, 0x82, 0x4a, 0x00, 0xaa, 0x00, 0x5b, 0x043, 0x83);
+
+#define SID_SInternetExplorer IID_IWebBrowserApp
+#define SID_SWebBrowserApp    IID_IWebBrowserApp
+#define SID_SWebBrowserEventsService IID_IWebBrowserEventsService
+
+#endif /* NO_SHDOCVW_GUIDS */
+
+DEFINE_GUID(SID_STopWindow,       0x49e1b500, 0x4636, 0x11d3, 0x97, 0xf7, 0x00, 0xc0, 0x4f, 0x45, 0xd0, 0xb3);
+DEFINE_GUID(SID_SCommDlgBrowser,  0x80f30233, 0xb7df, 0x11d2, 0xa3, 0x3b, 0x00, 0x60, 0x97, 0xdf, 0x5b, 0xd4);
+
+#define SID_LinkSite          IID_IShellLinkW
+#define SID_SShellBrowser     IID_IShellBrowser
+#define SID_SShellDesktop     CLSID_ShellDesktop
+#define IID_IFileViewer       WINELIB_NAME_AW(IID_IFileViewer)
+#define IID_IShellLink        WINELIB_NAME_AW(IID_IShellLink)
+#define IID_IExtractIcon      WINELIB_NAME_AW(IID_IExtractIcon)
+#define IID_IShellCopyHook    WINELIB_NAME_AW(IID_IShellCopyHook)
+#define IID_IShellExecuteHook WINELIB_NAME_AW(IID_IShellExecuteHook)
+#define IID_INewShortcutHook  WINELIB_NAME_AW(IID_INewShortcutHook)
+
+DEFINE_GUID(IID_IDockingWindowSite, 0x2A342FC2, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
+DEFINE_GUID(IID_IInputObject,       0x68284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4);
+DEFINE_GUID(IID_IInputObjectSite,   0xF1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
+
+/****************************************************************************
+ * the next IID's are the namespace elements of the pidls
+ */
+DEFINE_GUID(CLSID_NetworkPlaces, 0x208D2C60, 0x3AEA, 0x1069, 0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_NetworkDomain, 0x46e06680, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);
+DEFINE_GUID(CLSID_NetworkServer, 0xc0542a90, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);
+DEFINE_GUID(CLSID_NetworkShare, 0x54a754c0, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);
+DEFINE_GUID(CLSID_MyComputer, 0x20D04FE0, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_Internet, 0x871C5380, 0x42A0, 0x1069, 0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_ShellFSFolder, 0xF3364BA0, 0x65B9, 0x11CE, 0xA9, 0xBA, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
+DEFINE_GUID(CLSID_RecycleBin, 0x645FF040, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E);
+DEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03);
+DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D);
+
+DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57);
+
+DEFINE_GUID(CLSID_QueryAssociations, 0xa07034fd, 0x6caa, 0x4954, 0xac, 0x3f, 0x97, 0xa2, 0x72, 0x16, 0xf9, 0x8a);
+
+DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
+
+DEFINE_GUID(CLSID_ProgressDialog, 0xf8383852, 0xfcd3, 0x11d1, 0xa6, 0xb9, 0x0, 0x60, 0x97, 0xdf, 0x5b, 0xd4);
+
+DEFINE_GUID(CLSID_ShellItem,      0x2fe352ea, 0xfd1f, 0x11d2, 0xb1, 0xf4, 0x00, 0xc0, 0x4f, 0x8e, 0xeb, 0x3e);
+
+#define PSGUID_SHELLDETAILS     {0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0}
+DEFINE_GUID(FMTID_ShellDetails,  0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
+#define PID_FINDDATA        0
+#define PID_NETRESOURCE     1
+#define PID_DESCRIPTIONID   2
+#define PID_WHICHFOLDER     3
+#define PID_NETWORKLOCATION 4
+#define PID_COMPUTERNAME    5
+
+/* Note: PSGUID_STORAGE defined in ntquery.h */
+DEFINE_GUID(FMTID_Storage, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac);
+/* PID_* for FMTID_Storage defined in ntquery.h*/
+
+#define PSGUID_DISPLACED    {0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71}
+DEFINE_GUID(FMTID_Displaced, 0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71);
+#define PID_DISPLACED_FROM 2
+#define PID_DISPLACED_DATE 3
+
+DEFINE_GUID(CLSID_CAnchorBrowsePropertyPage, 0x3050F3BB, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
+DEFINE_GUID(CLSID_CDocBrowsePropertyPage, 0x3050F3B4, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
+DEFINE_GUID(CLSID_CImageBrowsePropertyPage, 0x3050F3B3, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
+
+DEFINE_GUID(VID_LargeIcons, 0x0057d0e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_SmallIcons, 0x089000c0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_List,       0x0e1fa5e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_Details,    0x137e7700, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_Thumbnails, 0x8bebb290, 0x52d0, 0x11d0, 0xb7, 0xf4, 0x00, 0xc0, 0x4f, 0xd7, 0x06, 0xec);
+DEFINE_GUID(VID_Tile,       0x65f125e5, 0x7be1, 0x4810, 0xba, 0x9d, 0xd2, 0x71, 0xc8, 0x43, 0x2c, 0xe3);
+DEFINE_GUID(VID_ThumbStrip, 0x8eefa624, 0xd1e9, 0x445b, 0x94, 0xb7, 0x74, 0xfb, 0xce, 0x2e, 0xa1, 0x1a);
+
+#include <knownfolders.h>
+
+/* FOLDERTYPEID */
+DEFINE_GUID(FOLDERTYPEID_Communications,        0x91475fe5, 0x586b, 0x4eba, 0x8d, 0x75, 0xd1, 0x74, 0x34, 0xb8, 0xcd, 0xf6);
+DEFINE_GUID(FOLDERTYPEID_CompressedFolder,      0x80213e82, 0xbcfd, 0x4c4f, 0x88, 0x17, 0xbb, 0x27, 0x60, 0x12, 0x67, 0xa9);
+DEFINE_GUID(FOLDERTYPEID_Contacts,              0xde2b70ec, 0x9bf7, 0x4a93, 0xbd, 0x3d, 0x24, 0x3f, 0x78, 0x81, 0xd4, 0x92);
+DEFINE_GUID(FOLDERTYPEID_ControlPanelCategory,  0xde4f0660, 0xfa10, 0x4b8f, 0xa4, 0x94, 0x06, 0x8b, 0x20, 0xb2, 0x23, 0x07);
+DEFINE_GUID(FOLDERTYPEID_ControlPanelClassic,   0x0c3794f3, 0xb545, 0x43aa, 0xa3, 0x29, 0xc3, 0x74, 0x30, 0xc5, 0x8d, 0x2a);
+DEFINE_GUID(FOLDERTYPEID_Documents,             0x7d49d726, 0x3c21, 0x4f05, 0x99, 0xaa, 0xfd, 0xc2, 0xc9, 0x47, 0x46, 0x56);
+DEFINE_GUID(FOLDERTYPEID_Games,                 0xb689b0d0, 0x76d3, 0x4cbb, 0x87, 0xf7, 0x58, 0x5d, 0x0e, 0x0c, 0xe0, 0x70);
+DEFINE_GUID(FOLDERTYPEID_Generic,               0x5c4f28b5, 0xf869, 0x4e84, 0x8e, 0x60, 0xf1, 0x1d, 0xb9, 0x7c, 0x5c, 0xc7);
+DEFINE_GUID(FOLDERTYPEID_GenericLibrary,        0x5f4eab9a, 0x6833, 0x4f61, 0x89, 0x9d, 0x31, 0xcf, 0x46, 0x97, 0x9d, 0x49);
+DEFINE_GUID(FOLDERTYPEID_GenericSearchResults,  0x7fde1a1e, 0x8b31, 0x49a5, 0x93, 0xb8, 0x6b, 0xe1, 0x4c, 0xfa, 0x49, 0x43);
+DEFINE_GUID(FOLDERTYPEID_Invalid,               0x57807898, 0x8c4f, 0x4462, 0xbb, 0x63, 0x71, 0x04, 0x23, 0x80, 0xb1, 0x09);
+DEFINE_GUID(FOLDERTYPEID_Music,                 0x94d6ddcc, 0x4a68, 0x4175, 0xa3, 0x74, 0xbd, 0x58, 0x4a, 0x51, 0x0b, 0x78);
+DEFINE_GUID(FOLDERTYPEID_NetworkExplorer,       0x25cc242b, 0x9a7c, 0x4f51, 0x80, 0xe0, 0x7a, 0x29, 0x28, 0xfe, 0xbe, 0x42);
+DEFINE_GUID(FOLDERTYPEID_OpenSearch,            0x8faf9629, 0x1980, 0x46ff, 0x80, 0x23, 0x9d, 0xce, 0xab, 0x9c, 0x3e, 0xe3);
+DEFINE_GUID(FOLDERTYPEID_OtherUsers,            0xb337fd00, 0x9dd5, 0x4635, 0xa6, 0xd4, 0xda, 0x33, 0xfd, 0x10, 0x2b, 0x7a);
+DEFINE_GUID(FOLDERTYPEID_Pictures,              0xb3690e58, 0xe961, 0x423b, 0xb6, 0x87, 0x38, 0x6e, 0xbf, 0xd8, 0x32, 0x39);
+DEFINE_GUID(FOLDERTYPEID_Printers,              0x2c7bbec6, 0xc844, 0x4a0a, 0x91, 0xfa, 0xce, 0xf6, 0xf5, 0x9c, 0xfd, 0xa1);
+DEFINE_GUID(FOLDERTYPEID_PublishedItems,        0x7f2f5b96, 0xff74, 0x41da, 0xaf, 0xd8, 0x1c, 0x78, 0xa5, 0xf3, 0xae, 0xa2);
+DEFINE_GUID(FOLDERTYPEID_RecordedTV,            0x5557a28f, 0x5da6, 0x4f83, 0x88, 0x09, 0xc2, 0xc9, 0x8a, 0x11, 0xa6, 0xfa);
+DEFINE_GUID(FOLDERTYPEID_RecycleBin,            0xd6d9e004, 0xcd87, 0x442b, 0x9d, 0x57, 0x5e, 0x0a, 0xeb, 0x4f, 0x6f, 0x72);
+DEFINE_GUID(FOLDERTYPEID_SavedGames,            0xd0363307, 0x28cb, 0x4106, 0x9f, 0x23, 0x29, 0x56, 0xe3, 0xe5, 0xe0, 0xe7);
+DEFINE_GUID(FOLDERTYPEID_SearchConnector,       0x982725ee, 0x6f47, 0x479e, 0xb4, 0x47, 0x81, 0x2b, 0xfa, 0x7d, 0x2e, 0x8f);
+DEFINE_GUID(FOLDERTYPEID_Searches,              0x0b0ba2e3, 0x405f, 0x415e, 0xa6, 0xee, 0xca, 0xd6, 0x25, 0x20, 0x78, 0x53);
+DEFINE_GUID(FOLDERTYPEID_SearchHome,            0x834d8a44, 0x0974, 0x4ed6, 0x86, 0x6e, 0xf2, 0x03, 0xd8, 0x0b, 0x38, 0x10);
+DEFINE_GUID(FOLDERTYPEID_SoftwareExplorer,      0xd674391b, 0x52d9, 0x4e07, 0x83, 0x4e, 0x67, 0xc9, 0x86, 0x10, 0xf3, 0x9d);
+DEFINE_GUID(FOLDERTYPEID_StartMenu,             0xef87b4cb, 0xf2ce, 0x4785, 0x86, 0x58, 0x4c, 0xa6, 0xc6, 0x3e, 0x38, 0xc6);
+DEFINE_GUID(FOLDERTYPEID_UserFiles,             0xcd0fc69b, 0x71e2, 0x46e5, 0x96, 0x90, 0x5b, 0xcd, 0x9f, 0x57, 0xaa, 0xb3);
+DEFINE_GUID(FOLDERTYPEID_UsersLibraries,        0xc4d98f09, 0x6124, 0x4fe0, 0x99, 0x42, 0x82, 0x64, 0x16, 0x08, 0x2d, 0xa9);
+DEFINE_GUID(FOLDERTYPEID_Videos,                0x5fa96407, 0x7e77, 0x483c, 0xac, 0x93, 0x69, 0x1d, 0x05, 0x85, 0x0d, 0xe8);
+
+/* IExplorerBrowser */
+DEFINE_GUID(EP_NavPane, 0xCB316B22, 0x25F7, 0x42B8, 0x8A, 0x09, 0x54, 0x0D, 0x23, 0xA4, 0x3C, 0x2F);
+DEFINE_GUID(EP_Commands,0xD9745868, 0xCA5F, 0x4A76, 0x91, 0xCD, 0xF5, 0xA1, 0x29, 0xFB, 0xB0, 0x76);
+DEFINE_GUID(EP_Commands_Organize, 0x72E81700, 0xE3EC, 0x4660, 0xBF, 0x24, 0x3C, 0x3B, 0x7B, 0x64, 0x88, 0x06);
+DEFINE_GUID(EP_Commands_View, 0x21F7C32D, 0xEEAA, 0x439B, 0xBB, 0x51, 0x37, 0xB9, 0x6F, 0xD6, 0xA9, 0x43);
+DEFINE_GUID(EP_DetailsPane, 0x43ABF98B, 0x89B8, 0x472D, 0xB9, 0xCE, 0xE6, 0x9B, 0x82, 0x29, 0xF0, 0x19);
+DEFINE_GUID(EP_PreviewPane, 0x893C63D1, 0x45C8, 0x4D17, 0xBE, 0x19, 0x22, 0x3B, 0xE7, 0x1B, 0xE3, 0x65);
+DEFINE_GUID(EP_QueryPane, 0x65BCDE4F, 0x4F07, 0x4F27, 0x83, 0xA7, 0x1A, 0xFC, 0xA4, 0xDF, 0x7D, 0xDD);
+DEFINE_GUID(EP_AdvQueryPane, 0xB4E9DB8B, 0x34BA, 0x4C39, 0xB5, 0xCC, 0x16, 0xA1, 0xBD, 0x2C, 0x41, 0x1C);
+
+/* IShellItem/IShellItemArray BindToHandler */
+DEFINE_GUID(BHID_SFObject,    0x3981E224, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_SFUIObject,  0x3981E225, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_SFViewObject,0x3981E226, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_Storage,     0x3981E227, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_Stream,      0x1CEBB3AB, 0x7C10, 0x499A, 0xA4,0x17, 0x92,0xCA,0x16,0xC4,0xCB,0x83);
+DEFINE_GUID(BHID_StorageEnum, 0x4621A4E3, 0xF0D6, 0x4773, 0x8A,0x9C, 0x46,0xE7,0x7B,0x17,0x48,0x40);
+DEFINE_GUID(BHID_Transfer,    0xD5E346A1, 0xF753, 0x4932, 0xB4,0x03, 0x45,0x74,0x80,0x0E,0x24,0x98);
+DEFINE_GUID(BHID_EnumItems,   0x94F60519, 0x2850, 0x4924, 0xAA,0x5A, 0xD1,0x5E,0x84,0x86,0x80,0x39);
+DEFINE_GUID(BHID_DataObject,  0xB8C0BD9F, 0xED24, 0x455C, 0x83,0xE6, 0xD5,0x39,0x0C,0x4F,0xE8,0xC4);
+DEFINE_GUID(BHID_Filter,      0x38D08778, 0xF557, 0x4690, 0x9E,0xBF, 0xBA,0x54,0x70,0x6A,0xD8,0xF7);
+DEFINE_GUID(BHID_LinkTargetItem,   0x3981E228, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_PropertyStore,    0x0384E1A4, 0x1523, 0x439C, 0xA4,0xC8, 0xAB,0x91,0x10,0x52,0xF5,0x86);
+DEFINE_GUID(BHID_ThumbnailHandler, 0x7B2E650A, 0x8E20, 0x4F4A, 0xB0,0x9E, 0x65,0x97,0xAF,0xC7,0x2F,0xB0);
+DEFINE_GUID(BHID_AssociationArray, 0xBEA9EF17, 0x82F1, 0x4F60, 0x92,0x84, 0x4F,0x8D,0xB7,0x5C,0x3B,0xE9);
+DEFINE_GUID(BHID_EnumAssocHandlers,0xB8AB0B9C, 0xC2EC, 0x4F7A, 0x91,0x8D, 0x31,0x49,0x00,0xE6,0x28,0x0A);
+
+#endif /* __WINE_SHLGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h
new file mode 100644
index 0000000..efcde12
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h
@@ -0,0 +1,1775 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHLOBJ_H
+#define __WINE_SHLOBJ_H
+
+#include <ole2.h>
+#include <commctrl.h>
+#include <prsht.h>
+#include <shlguid.h>
+#include <shtypes.h>
+#include <shobjidl.h>
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetObject
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/* Except for specific structs, this header is byte packed */
+#include <pshpack1.h>
+
+#ifndef HPSXA_DEFINED
+#define HPSXA_DEFINED
+DECLARE_HANDLE(HPSXA);
+#endif
+
+UINT         WINAPI SHAddFromPropSheetExtArray(HPSXA,LPFNADDPROPSHEETPAGE,LPARAM);
+LPVOID       WINAPI SHAlloc(ULONG) __WINE_ALLOC_SIZE(1);
+HRESULT      WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);
+HPSXA        WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);
+HPSXA        WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
+HRESULT      WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
+DWORD        WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);
+DWORD        WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);
+#define             SHCLSIDFromString WINELIB_NAME_AW(SHCLSIDFromString)
+HRESULT      WINAPI SHCreateStdEnumFmtEtc(DWORD,const FORMATETC *,IEnumFORMATETC**);
+void         WINAPI SHDestroyPropSheetExtArray(HPSXA);
+BOOL         WINAPI SHFindFiles(LPCITEMIDLIST,LPCITEMIDLIST);
+DWORD        WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);
+void         WINAPI SHFree(LPVOID);
+BOOL         WINAPI GetFileNameFromBrowse(HWND,LPWSTR,DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+HRESULT      WINAPI SHGetInstanceExplorer(IUnknown**);
+HRESULT      WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
+HRESULT      WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
+#define             SHGetFolderPathAndSubDir WINELIB_NAME_AW(SHGetFolderPathAndSubDir);
+HRESULT      WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID,DWORD,HANDLE,PWSTR*);
+BOOL         WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
+BOOL         WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
+#define             SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
+INT          WINAPI SHHandleUpdateImage(LPCITEMIDLIST);
+HRESULT      WINAPI SHILCreateFromPath(LPCWSTR,LPITEMIDLIST*,DWORD*);
+HRESULT      WINAPI SHLoadOLE(LPARAM);
+HRESULT      WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST*,SFGAOF,SFGAOF*);
+HRESULT      WINAPI SHPathPrepareForWriteA(HWND,IUnknown*,LPCSTR,DWORD);
+HRESULT      WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD);
+#define             SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite);
+UINT         WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM);
+LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR);
+BOOL         WINAPI SHRunControlPanel(LPCWSTR, HWND);
+int          WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*);
+HRESULT      WINAPI SHStartNetConnectionDialog(HWND,LPCSTR,DWORD);
+VOID         WINAPI SHUpdateImageA(LPCSTR,INT,UINT,INT);
+VOID         WINAPI SHUpdateImageW(LPCWSTR,INT,UINT,INT);
+#define             SHUpdateImage WINELIB_NAME_AW(SHUpdateImage)
+int          WINAPI RestartDialog(HWND,LPCWSTR,DWORD);
+int          WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD);
+int          WINAPI DriveType(int);
+int          WINAPI RealDriveType(int, BOOL);
+int          WINAPI IsNetDrive(int);
+BOOL         WINAPI IsUserAnAdmin(void);
+UINT         WINAPI Shell_MergeMenus(HMENU,HMENU,UINT,UINT,UINT,ULONG);
+BOOL         WINAPI Shell_GetImageLists(HIMAGELIST*,HIMAGELIST*);
+BOOL         WINAPI SignalFileOpen(PCIDLIST_ABSOLUTE);
+BOOL         WINAPI ImportPrivacySettings(LPCWSTR, BOOL*, BOOL*);
+
+#define KF_FLAG_SIMPLE_IDLIST       0x00000100
+#define KF_FLAG_NOT_PARENT_RELATIVE 0x00000200
+#define KF_FLAG_DEFAULT_PATH        0x00000400
+#define KF_FLAG_INIT                0x00000800
+#define KF_FLAG_NO_ALIAS            0x00001000
+#define KF_FLAG_DONT_UNEXPAND       0x00002000
+#define KF_FLAG_DONT_VERIFY         0x00004000
+#define KF_FLAG_CREATE              0x00008000
+
+#define SHFMT_ERROR     __MSABI_LONG(0xFFFFFFFF)  /* Error on last format, drive may be formattable */
+#define SHFMT_CANCEL    __MSABI_LONG(0xFFFFFFFE)  /* Last format was cancelled */
+#define SHFMT_NOFORMAT  __MSABI_LONG(0xFFFFFFFD)  /* Drive is not formattable */
+
+/* SHFormatDrive flags */
+#define SHFMT_ID_DEFAULT	0xFFFF
+#define SHFMT_OPT_FULL		1
+#define SHFMT_OPT_SYSONLY	2
+
+/* SHPathPrepareForWrite flags */
+#define SHPPFW_NONE             0x00000000
+#define SHPPFW_DIRCREATE        0x00000001
+#define SHPPFW_DEFAULT          SHPPFW_DIRCREATE
+#define SHPPFW_ASKDIRCREATE     0x00000002
+#define SHPPFW_IGNOREFILENAME   0x00000004
+#define SHPPFW_NOWRITECHECK     0x00000008
+#define SHPPFW_MEDIACHECKONLY   0x00000010
+
+/* SHObjectProperties flags */
+#define SHOP_PRINTERNAME 0x01
+#define SHOP_FILEPATH    0x02
+#define SHOP_VOLUMEGUID  0x04
+
+BOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR);
+
+#define PCS_FATAL           0x80000000
+#define PCS_REPLACEDCHAR    0x00000001
+#define PCS_REMOVEDCHAR     0x00000002
+#define PCS_TRUNCATED       0x00000004
+#define PCS_PATHTOOLONG     0x00000008
+
+int WINAPI PathCleanupSpec(LPCWSTR,LPWSTR);
+
+/* Shell_MergeMenus flags */
+#define MM_ADDSEPARATOR     0x00000001
+#define MM_SUBMENUSHAVEIDS  0x00000002
+#define MM_DONTREMOVESEPS   0x00000004
+
+/*****************************************************************************
+ * IContextMenu interface
+ */
+
+
+/* DATAOBJECT_InitShellIDList*/
+#define CFSTR_SHELLIDLISTA           "Shell IDList Array"   /* CF_IDLIST */
+#define CFSTR_SHELLIDLISTOFFSETA     "Shell Object Offsets" /* CF_OBJECTPOSITIONS */
+#define CFSTR_NETRESOURCESA          "Net Resource"         /* CF_NETRESOURCE */
+/* DATAOBJECT_InitFileGroupDesc */
+#define CFSTR_FILEDESCRIPTORA        "FileGroupDescriptor"  /* CF_FILEGROUPDESCRIPTORA */
+/* DATAOBJECT_InitFileContents*/
+#define CFSTR_FILECONTENTSA          "FileContents"         /* CF_FILECONTENTS */
+#define CFSTR_FILENAMEA              "FileName"             /* CF_FILENAMEA */
+#define CFSTR_FILENAMEMAPA           "FileNameMap"          /* CF_FILENAMEMAPA */
+#define CFSTR_PRINTERGROUPA          "PrinterFriendlyName"  /* CF_PRINTERS */
+#define CFSTR_SHELLURLA              "UniformResourceLocator"
+#define CFSTR_INETURLA               CFSTR_SHELLURLA
+#define CFSTR_PREFERREDDROPEFFECTA   "Preferred DropEffect"
+#define CFSTR_PERFORMEDDROPEFFECTA   "Performed DropEffect"
+#define CFSTR_PASTESUCCEEDEDA        "Paste Succeeded"
+#define CFSTR_INDRAGLOOPA            "InShellDragLoop"
+#define CFSTR_DRAGCONTEXTA           "DragContext"
+#define CFSTR_MOUNTEDVOLUMEA         "MountedVolume"
+#define CFSTR_PERSISTEDDATAOBJECTA   "PersistedDataObject"
+#define CFSTR_TARGETCLSIDA           "TargetCLSID"
+#define CFSTR_AUTOPLAY_SHELLIDLISTSA "Autoplay Enumerated IDList Array"
+#define CFSTR_LOGICALPERFORMEDDROPEFFECTA "Logical Performed DropEffect"
+
+#if defined(__GNUC__)
+# define CFSTR_SHELLIDLISTW \
+    (const WCHAR []){ 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }
+# define CFSTR_SHELLIDLISTOFFSETW \
+    (const WCHAR []){ 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 }
+# define CFSTR_NETRESOURCESW \
+    (const WCHAR []){ 'N','e','t',' ','R','e','s','o','u','r','c','e',0 }
+# define CFSTR_FILEDESCRIPTORW \
+    (const WCHAR []){ 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 }
+# define CFSTR_FILECONTENTSW \
+    (const WCHAR []){ 'F','i','l','e','C','o','n','t','e','n','t','s',0 }
+# define CFSTR_FILENAMEW \
+    (const WCHAR []){ 'F','i','l','e','N','a','m','e','W',0 }
+# define CFSTR_FILENAMEMAPW \
+    (const WCHAR []){ 'F','i','l','e','N','a','m','e','M','a','p','W',0 }
+# define CFSTR_PRINTERGROUPW \
+    (const WCHAR []){ 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 }
+# define CFSTR_SHELLURLW \
+    (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 }
+# define CFSTR_INETURLW \
+    (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 }
+# define CFSTR_PREFERREDDROPEFFECTW \
+    (const WCHAR []){ 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }
+# define CFSTR_PERFORMEDDROPEFFECTW \
+    (const WCHAR []){ 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }
+# define CFSTR_PASTESUCCEEDEDW \
+    (const WCHAR []){ 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 }
+# define CFSTR_INDRAGLOOPW \
+    (const WCHAR []){ 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 }
+# define CFSTR_DRAGCONTEXTW \
+    (const WCHAR []){ 'D','r','a','g','C','o','n','t','e','x','t',0 }
+# define CFSTR_MOUNTEDVOLUMEW \
+    (const WCHAR []){ 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 }
+# define CFSTR_PERSISTEDDATAOBJECTW \
+    (const WCHAR []){ 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 }
+# define CFSTR_TARGETCLSIDW \
+    (const WCHAR []){ 'T','a','r','g','e','t','C','L','S','I','D',0 }
+# define CFSTR_AUTOPLAY_SHELLIDLISTSW \
+    (const WCHAR []){ 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',\
+                      ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }
+# define CFSTR_LOGICALPERFORMEDDROPEFFECTW \
+    (const WCHAR []){ 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',\
+                      ' ','D','r','o','p','E','f','f','e','c','t',0 }
+#elif defined(_MSC_VER)
+# define CFSTR_SHELLIDLISTW           L"Shell IDList Array"
+# define CFSTR_SHELLIDLISTOFFSETW     L"Shell Object Offsets"
+# define CFSTR_NETRESOURCESW          L"Net Resource"
+# define CFSTR_FILEDESCRIPTORW        L"FileGroupDescriptorW"
+# define CFSTR_FILECONTENTSW          L"FileContents"
+# define CFSTR_FILENAMEW              L"FileNameW"
+# define CFSTR_FILENAMEMAPW           L"FileNameMapW"
+# define CFSTR_PRINTERGROUPW          L"PrinterFriendlyName"
+# define CFSTR_SHELLURLW              L"UniformResourceLocator"
+# define CFSTR_INETURLW               L"UniformResourceLocatorW"
+# define CFSTR_PREFERREDDROPEFFECTW   L"Preferred DropEffect"
+# define CFSTR_PERFORMEDDROPEFFECTW   L"Performed DropEffect"
+# define CFSTR_PASTESUCCEEDEDW        L"Paste Succeeded"
+# define CFSTR_INDRAGLOOPW            L"InShellDragLoop"
+# define CFSTR_DRAGCONTEXTW           L"DragContext"
+# define CFSTR_MOUNTEDVOLUMEW         L"MountedVolume"
+# define CFSTR_PERSISTEDDATAOBJECTW   L"PersistedDataObject"
+# define CFSTR_TARGETCLSIDW           L"TargetCLSID"
+# define CFSTR_AUTOPLAY_SHELLIDLISTSW L"Autoplay Enumerated IDList Array"
+# define CFSTR_LOGICALPERFORMEDDROPEFFECTW L"Logical Performed DropEffect"
+#else
+static const WCHAR CFSTR_SHELLIDLISTW[] =
+    { 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };
+static const WCHAR CFSTR_SHELLIDLISTOFFSETW[] =
+    { 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 };
+static const WCHAR CFSTR_NETRESOURCESW[] =
+    { 'N','e','t',' ','R','e','s','o','u','r','c','e',0 };
+static const WCHAR CFSTR_FILEDESCRIPTORW[] =
+    { 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 };
+static const WCHAR CFSTR_FILECONTENTSW[] =
+    { 'F','i','l','e','C','o','n','t','e','n','t','s',0 };
+static const WCHAR CFSTR_FILENAMEW[] =
+    { 'F','i','l','e','N','a','m','e','W',0 };
+static const WCHAR CFSTR_FILENAMEMAPW[] =
+    { 'F','i','l','e','N','a','m','e','M','a','p','W',0 };
+static const WCHAR CFSTR_PRINTERGROUPW[] =
+    { 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 };
+static const WCHAR CFSTR_SHELLURLW[] =
+    { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 };
+static const WCHAR CFSTR_INETURLW[] =
+    { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 };
+static const WCHAR CFSTR_PREFERREDDROPEFFECTW[] =
+    { 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };
+static const WCHAR CFSTR_PERFORMEDDROPEFFECTW[] =
+    { 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };
+static const WCHAR CFSTR_PASTESUCCEEDEDW[] =
+    { 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 };
+static const WCHAR CFSTR_INDRAGLOOPW[] =
+    { 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 };
+static const WCHAR CFSTR_DRAGCONTEXTW[] =
+    { 'D','r','a','g','C','o','n','t','e','x','t',0 };
+static const WCHAR CFSTR_MOUNTEDVOLUMEW[] =
+    { 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 };
+static const WCHAR CFSTR_PERSISTEDDATAOBJECTW[] =
+    { 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 };
+static const WCHAR CFSTR_TARGETCLSIDW[] =
+    { 'T','a','r','g','e','t','C','L','S','I','D',0 };
+static const WCHAR CFSTR_AUTOPLAY_SHELLIDLISTSW[] =
+    { 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',
+      ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };
+static const WCHAR CFSTR_LOGICALPERFORMEDDROPEFFECTW[] =
+    { 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',
+      ' ','D','r','o','p','E','f','f','e','c','t',0 };
+#endif
+
+#define CFSTR_SHELLIDLIST           WINELIB_NAME_AW(CFSTR_SHELLIDLIST)
+#define CFSTR_SHELLIDLISTOFFSET     WINELIB_NAME_AW(CFSTR_SHELLIDLISTOFFSET)
+#define CFSTR_NETRESOURCES          WINELIB_NAME_AW(CFSTR_NETRESOURCES)
+#define CFSTR_FILEDESCRIPTOR        WINELIB_NAME_AW(CFSTR_FILEDESCRIPTOR)
+#define CFSTR_FILECONTENTS          WINELIB_NAME_AW(CFSTR_FILECONTENTS)
+#define CFSTR_FILENAME              WINELIB_NAME_AW(CFSTR_FILENAME)
+#define CFSTR_FILENAMEMAP           WINELIB_NAME_AW(CFSTR_FILENAMEMAP)
+#define CFSTR_PRINTERGROUP          WINELIB_NAME_AW(CFSTR_PRINTERGROUP)
+#define CFSTR_SHELLURL              WINELIB_NAME_AW(CFSTR_SHELLURL)
+#define CFSTR_INETURL               WINELIB_NAME_AW(CFSTR_INETURL)
+#define CFSTR_PREFERREDDROPEFFECT   WINELIB_NAME_AW(CFSTR_PREFERREDDROPEFFECT)
+#define CFSTR_PERFORMEDDROPEFFECT   WINELIB_NAME_AW(CFSTR_PERFORMEDDROPEFFECT)
+#define CFSTR_PASTESUCCEEDED        WINELIB_NAME_AW(CFSTR_PASTESUCCEEDED)
+#define CFSTR_INDRAGLOOP            WINELIB_NAME_AW(CFSTR_INDRAGLOOP)
+#define CFSTR_DRAGCONTEXT           WINELIB_NAME_AW(CFSTR_DRAGCONTEXT)
+#define CFSTR_MOUNTEDVOLUME         WINELIB_NAME_AW(CFSTR_MOUNTEDVOLUME)
+#define CFSTR_PERSISTEDDATAOBJECT   WINELIB_NAME_AW(CFSTR_PERSISTEDDATAOBJECT)
+#define CFSTR_TARGETCLSID           WINELIB_NAME_AW(CFSTR_TARGETCLSID)
+#define CFSTR_AUTOPLAY_SHELLIDLISTS WINELIB_NAME_AW(CFSTR_AUTOPLAY_SHELLIDLISTS)
+#define CFSTR_LOGICALPERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_LOGICALPERFORMEDDROPEFFECT)
+
+typedef struct
+{	UINT cidl;
+	UINT aoffset[1];
+} CIDA, *LPIDA;
+
+/************************************************************************
+* IShellView interface
+*/
+
+#define FCIDM_SHVIEWFIRST       0x0000
+/* undocumented */
+#define FCIDM_SHVIEW_ARRANGE    0x7001
+#define FCIDM_SHVIEW_DELETE     0x7011
+#define FCIDM_SHVIEW_PROPERTIES 0x7013
+#define FCIDM_SHVIEW_CUT        0x7018
+#define FCIDM_SHVIEW_COPY       0x7019
+#define FCIDM_SHVIEW_INSERT     0x701A
+#define FCIDM_SHVIEW_UNDO       0x701B
+#define FCIDM_SHVIEW_INSERTLINK 0x701C
+#define FCIDM_SHVIEW_SELECTALL  0x7021
+#define FCIDM_SHVIEW_INVERTSELECTION 0x7022
+
+#define FCIDM_SHVIEW_BIGICON    0x7029
+#define FCIDM_SHVIEW_SMALLICON  0x702A
+#define FCIDM_SHVIEW_LISTVIEW   0x702B
+#define FCIDM_SHVIEW_REPORTVIEW 0x702C
+/* 0x7030-0x703f are used by the shellbrowser */
+#define FCIDM_SHVIEW_AUTOARRANGE 0x7031
+#define FCIDM_SHVIEW_SNAPTOGRID 0x7032
+
+#define FCIDM_SHVIEW_HELP       0x7041
+#define FCIDM_SHVIEW_RENAME     0x7050
+#define FCIDM_SHVIEW_CREATELINK 0x7051
+#define FCIDM_SHVIEW_NEWLINK    0x7052
+#define FCIDM_SHVIEW_NEWFOLDER  0x7053
+
+#define FCIDM_SHVIEW_REFRESH    0x7100 /* FIXME */
+#define FCIDM_SHVIEW_EXPLORE    0x7101 /* FIXME */
+#define FCIDM_SHVIEW_OPEN       0x7102 /* FIXME */
+
+#define FCIDM_SHVIEWLAST        0x7fff
+#define FCIDM_BROWSERFIRST      0xA000
+/* undocumented toolbar items from stddlg's*/
+#define FCIDM_TB_UPFOLDER       0xA001
+#define FCIDM_TB_NEWFOLDER      0xA002
+#define FCIDM_TB_SMALLICON      0xA003
+#define FCIDM_TB_REPORTVIEW     0xA004
+#define FCIDM_TB_DESKTOP        0xA005  /* FIXME */
+
+#define FCIDM_BROWSERLAST       0xbf00
+#define FCIDM_GLOBALFIRST       0x8000
+#define FCIDM_GLOBALLAST        0x9fff
+
+/*
+* Global submenu IDs and separator IDs
+*/
+#define FCIDM_MENU_FILE             (FCIDM_GLOBALFIRST+0x0000)
+#define FCIDM_MENU_EDIT             (FCIDM_GLOBALFIRST+0x0040)
+#define FCIDM_MENU_VIEW             (FCIDM_GLOBALFIRST+0x0080)
+#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)
+#define FCIDM_MENU_TOOLS            (FCIDM_GLOBALFIRST+0x00c0)
+#define FCIDM_MENU_TOOLS_SEP_GOTO   (FCIDM_GLOBALFIRST+0x00c1)
+#define FCIDM_MENU_HELP             (FCIDM_GLOBALFIRST+0x0100)
+#define FCIDM_MENU_FIND             (FCIDM_GLOBALFIRST+0x0140)
+#define FCIDM_MENU_EXPLORE          (FCIDM_GLOBALFIRST+0x0150)
+#define FCIDM_MENU_FAVORITES        (FCIDM_GLOBALFIRST+0x0170)
+
+/* control IDs known to the view */
+#define FCIDM_TOOLBAR      (FCIDM_BROWSERFIRST + 0)
+#define FCIDM_STATUS       (FCIDM_BROWSERFIRST + 1)
+
+#define INTERFACE IShellDetails
+DECLARE_INTERFACE_(IShellDetails, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IShellDetails methods ***/
+    STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE;
+    STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellDetails_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellDetails_AddRef(p)                (p)->lpVtbl->AddRef(p)
+#define IShellDetails_Release(p)               (p)->lpVtbl->Release(p)
+/*** IShellDetails methods ***/
+#define IShellDetails_GetDetailsOf(p,a,b,c)    (p)->lpVtbl->GetDetailsOf(p,a,b,c)
+#define IShellDetails_ColumnClick(p,a)         (p)->lpVtbl->ColumnClick(p,a)
+#endif
+
+/* IQueryInfo interface */
+#define INTERFACE IQueryInfo
+DECLARE_INTERFACE_(IQueryInfo,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IQueryInfo methods ***/
+    STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR** lppTips) PURE;
+    STDMETHOD(GetInfoFlags)(THIS_ DWORD* lpFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IQueryInfo_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IQueryInfo_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IQueryInfo_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IQueryInfo methods ***/
+#define IQueryInfo_GetInfoTip(p,a,b)          (p)->lpVtbl->GetInfoTip(p,a,b)
+#define IQueryInfo_GetInfoFlags(p,a)          (p)->lpVtbl->GetInfoFlags(p,a)
+#endif
+
+/* IInputObject interface */
+#define INTERFACE IInputObject
+DECLARE_INTERFACE_(IInputObject,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IInputObject methods ***/
+    STDMETHOD(UIActivateIO)(THIS_ BOOL bActivating, LPMSG lpMsg) PURE;
+    STDMETHOD(HasFocusIO)(THIS) PURE;
+    STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IInputObject_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IInputObject_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IInputObject_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IInputObject methods ***/
+#define IInputObject_UIActivateIO(p,a,b)         (p)->lpVtbl->UIActivateIO(p,a,b)
+#define IInputObject_HasFocusIO(p)               (p)->lpVtbl->HasFocusIO(p)
+#define IInputObject_TranslateAcceleratorIO(p,a) (p)->lpVtbl->TranslateAcceleratorIO(p,a)
+#endif
+
+/* IInputObjectSite interface */
+#define INTERFACE IInputObjectSite
+DECLARE_INTERFACE_(IInputObjectSite,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IInputObjectSite methods ***/
+    STDMETHOD(OnFocusChangeIS)(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IInputObjectSite_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IInputObjectSite_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IInputObjectSite_Release(p)             (p)->lpVtbl->Release(p)
+/*** IInputObject methods ***/
+#define IInputObjectSite_OnFocusChangeIS(p,a,b) (p)->lpVtbl->OnFocusChangeIS(p,a,b)
+#endif
+
+/* IObjMgr interface */
+#define INTERFACE IObjMgr
+DECLARE_INTERFACE_(IObjMgr,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IObjMgr methods ***/
+    STDMETHOD(Append)(THIS_ LPUNKNOWN punk) PURE;
+    STDMETHOD(Remove)(THIS_ LPUNKNOWN punk) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IObjMgr_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IObjMgr_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IObjMgr_Release(p)             (p)->lpVtbl->Release(p)
+/*** IObjMgr methods ***/
+#define IObjMgr_Append(p,a) (p)->lpVtbl->Append(p,a)
+#define IObjMgr_Remove(p,a) (p)->lpVtbl->Remove(p,a)
+#endif
+
+/* IACList interface */
+#define INTERFACE IACList
+DECLARE_INTERFACE_(IACList,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IACList methods ***/
+    STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IACList_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IACList_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IACList_Release(p)             (p)->lpVtbl->Release(p)
+/*** IACList methods ***/
+#define IACList_Expand(p,a)             (p)->lpVtbl->Expand(p,a)
+#endif
+
+/* IACList2 interface */
+#define INTERFACE IACList2
+DECLARE_INTERFACE_(IACList2,IACList)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IACList methods ***/
+    STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
+    /*** IACList2 methods ***/
+    STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;
+    STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IACList2_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IACList2_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IACList2_Release(p)             (p)->lpVtbl->Release(p)
+/*** IACList2 methods ***/
+#define IACList2_GetOptions(p,a)        (p)->lpVtbl->GetOptions(p,a)
+#define IACList2_SetOptions(p,a)        (p)->lpVtbl->SetOptions(p,a)
+#endif
+
+/****************************************************************************
+ * IShellFolderViewCB interface
+ */
+
+#define INTERFACE IShellFolderViewCB
+DECLARE_INTERFACE_(IShellFolderViewCB,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IShellFolderViewCB methods ***/
+    STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellFolderViewCB_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellFolderViewCB_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IShellFolderViewCB_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IShellFolderViewCB methods ***/
+#define IShellFolderViewCB_MessageSFVCB(p,a,b,c)      (p)->lpVtbl->MessageSFVCB(p,a,b,c)
+#endif
+
+/****************************************************************************
+ * IShellFolderView interface
+ */
+
+#include <pshpack8.h>
+
+typedef struct _ITEMSPACING
+{
+    int cxSmall;
+    int cySmall;
+    int cxLarge;
+    int cyLarge;
+} ITEMSPACING;
+
+#include <poppack.h>
+
+#define INTERFACE IShellFolderView
+DEFINE_GUID(IID_IShellFolderView,0x37a378c0,0xf82d,0x11ce,0xae,0x65,0x08,0x00,0x2b,0x2e,0x12,0x62);
+DECLARE_INTERFACE_(IShellFolderView, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+    /*** IShellFolderView methods ***/
+    STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE;
+    STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE;
+    STDMETHOD(ArrangeGrid) (THIS) PURE;
+    STDMETHOD(AutoArrange) (THIS) PURE;
+    STDMETHOD(GetAutoArrange) (THIS) PURE;
+    STDMETHOD(AddObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+    STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE;
+    STDMETHOD(RemoveObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+    STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE;
+    STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE;
+    STDMETHOD(UpdateObject) (THIS_ PITEMID_CHILD pidlOld, PITEMID_CHILD pidlNew, UINT *puItem) PURE;
+    STDMETHOD(RefreshObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+    STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE;
+    STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE;
+    STDMETHOD(GetSelectedObjects) (THIS_ PCITEMID_CHILD **pppidl, UINT *puItems) PURE;
+    STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE;
+    STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE;
+    STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE;
+    STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE;
+    STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE;
+    STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE;
+    STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE;
+    STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE;
+    STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE;
+    STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB** ppOldCB) PURE;
+    STDMETHOD(Select) ( THIS_  UINT dwFlags ) PURE;
+    STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE;
+    STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellFolderView_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellFolderView_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IShellFolderView_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IShellFolderView methods ***/
+#define IShellFolderView_Rearrange(p,a)             (p)->lpVtbl->Rearrange(p,a)
+#define IShellFolderView_GetArrangeParam(p,a)       (p)->lpVtbl->GetArrangeParam(p,a)
+#define IShellFolderView_ArrangeGrid(p)             (p)->lpVtbl->ArrangeGrid(p)
+#define IShellFolderView_AutoArrange(p)             (p)->lpVtbl->AutoArrange(p)
+#define IShellFolderView_GetAutoArrange(p)          (p)->lpVtbl->GetAutoArrange(p)
+#define IShellFolderView_AddObject(p,a,b)           (p)->lpVtbl->AddObject(p,a,b)
+#define IShellFolderView_GetObject(p,a,b)           (p)->lpVtbl->GetObject(p,a,b)
+#define IShellFolderView_RemoveObject(p,a,b)        (p)->lpVtbl->RemoveObject(p,a,b)
+#define IShellFolderView_GetObjectCount(p,a)        (p)->lpVtbl->GetObjectCount(p,a)
+#define IShellFolderView_SetObjectCount(p,a,b)      (p)->lpVtbl->SetObjectCount(p,a,b)
+#define IShellFolderView_UpdateObject(p,a,b,c)      (p)->lpVtbl->UpdateObject(p,a,b,c)
+#define IShellFolderView_RefreshObject(p,a,b)       (p)->lpVtbl->RefreshObject(p,a,b)
+#define IShellFolderView_SetRedraw(p,a)             (p)->lpVtbl->SetRedraw(p,a)
+#define IShellFolderView_GetSelectedCount(p,a)      (p)->lpVtbl->GetSelectedCount(p,a)
+#define IShellFolderView_GetSelectedObjects(p,a,b)  (p)->lpVtbl->GetSelectedObjects(p,a,b)
+#define IShellFolderView_IsDropOnSource(p,a)        (p)->lpVtbl->IsDropOnSource(p,a)
+#define IShellFolderView_GetDragPoint(p,a)          (p)->lpVtbl->GetDragPoint(p,a)
+#define IShellFolderView_GetDropPoint(p,a)          (p)->lpVtbl->GetDropPoint(p,a)
+#define IShellFolderView_MoveIcons(p,a)             (p)->lpVtbl->MoveIcons(p,a)
+#define IShellFolderView_SetItemPos(p,a,b)          (p)->lpVtbl->SetItemPos(p,a,b)
+#define IShellFolderView_DropTarget(p,a)            (p)->lpVtbl->DropTarget(p,a)
+#define IShellFolderView_SetClipboard(p,a)          (p)->lpVtbl->SetClipboard(p,a)
+#define IShellFolderView_SetPoints(p,a)             (p)->lpVtbl->SetPoints(p,a)
+#define IShellFolderView_GetItemSpacing(p,a)        (p)->lpVtbl->GetItemSpacing(p,a)
+#define IShellFolderView_SetCallback(p,a)           (p)->lpVtbl->SetCallback(p,a)
+#define IShellFolderView_Select(p,a)                (p)->lpVtbl->Select(p,a)
+#define IShellFolderView_QuerySupport(p,a)          (p)->lpVtbl->QuerySupport(p,a)
+#define IShellFolderView_SetAutomationObject(p,a)   (p)->lpVtbl->SetAutomationObject(p,a)
+#endif
+
+/* IProgressDialog interface */
+#define PROGDLG_NORMAL           0x00000000
+#define PROGDLG_MODAL            0x00000001
+#define PROGDLG_AUTOTIME         0x00000002
+#define PROGDLG_NOTIME           0x00000004
+#define PROGDLG_NOMINIMIZE       0x00000008
+#define PROGDLG_NOPROGRESSBAR    0x00000010
+#define PROGDLG_MARQUEEPROGRESS  0x00000020
+#define PROGDLG_NOCANCEL         0x00000040
+
+#define PDTIMER_RESET            0x00000001
+#define PDTIMER_PAUSE            0x00000002
+#define PDTIMER_RESUME           0x00000003
+
+#define INTERFACE IProgressDialog
+DECLARE_INTERFACE_(IProgressDialog,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IProgressDialog methods ***/
+    STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown *punkEnableModeless, DWORD dwFlags, LPCVOID reserved) PURE;
+    STDMETHOD(StopProgressDialog)(THIS) PURE;
+    STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE;
+    STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstance, UINT uiResourceId) PURE;
+    STDMETHOD_(BOOL,HasUserCancelled)(THIS) PURE;
+    STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;
+    STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
+    STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL bPath, LPCVOID reserved) PURE;
+    STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID reserved) PURE;
+    STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID reserved) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IProgressDialog_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IProgressDialog_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IProgressDialog_Release(p)             (p)->lpVtbl->Release(p)
+/*** IProgressDialog methods ***/
+#define IProgressDialog_StartProgressDialog(p,a,b,c,d)    (p)->lpVtbl->StartProgressDialog(p,a,b,c,d)
+#define IProgressDialog_StopProgressDialog(p)             (p)->lpVtbl->StopProgressDialog(p)
+#define IProgressDialog_SetTitle(p,a)                     (p)->lpVtbl->SetTitle(p,a)
+#define IProgressDialog_SetAnimation(p,a,b)               (p)->lpVtbl->SetAnimation(p,a,b)
+#define IProgressDialog_HasUserCancelled(p)               (p)->lpVtbl->HasUserCancelled(p)
+#define IProgressDialog_SetProgress(p,a,b)                (p)->lpVtbl->SetProgress(p,a,b)
+#define IProgressDialog_SetProgress64(p,a,b)              (p)->lpVtbl->SetProgress64(p,a,b)
+#define IProgressDialog_SetLine(p,a,b,c,d)                (p)->lpVtbl->SetLine(p,a,b,c,d)
+#define IProgressDialog_SetCancelMsg(p,a,b)               (p)->lpVtbl->SetCancelMsg(p,a,b)
+#define IProgressDialog_Timer(p,a,b)                      (p)->lpVtbl->Timer(p,a,b)
+#endif
+
+
+/****************************************************************************
+* SHAddToRecentDocs API
+*/
+#define SHARD_PIDL      __MSABI_LONG(0x00000001)
+#define SHARD_PATHA     __MSABI_LONG(0x00000002)
+#define SHARD_PATHW     __MSABI_LONG(0x00000003)
+#define SHARD_PATH WINELIB_NAME_AW(SHARD_PATH)
+
+void WINAPI SHAddToRecentDocs(UINT,LPCVOID);
+
+/****************************************************************************
+ * SHBrowseForFolder API
+ */
+typedef INT (CALLBACK *BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM);
+
+#include <pshpack8.h>
+
+typedef struct tagBROWSEINFOA {
+    HWND        hwndOwner;
+    LPCITEMIDLIST pidlRoot;
+    LPSTR         pszDisplayName;
+    LPCSTR        lpszTitle;
+    UINT        ulFlags;
+    BFFCALLBACK   lpfn;
+    LPARAM        lParam;
+    INT         iImage;
+} BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;
+
+typedef struct tagBROWSEINFOW {
+    HWND        hwndOwner;
+    LPCITEMIDLIST pidlRoot;
+    LPWSTR        pszDisplayName;
+    LPCWSTR       lpszTitle;
+    UINT        ulFlags;
+    BFFCALLBACK   lpfn;
+    LPARAM        lParam;
+    INT         iImage;
+} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;
+
+#define BROWSEINFO   WINELIB_NAME_AW(BROWSEINFO)
+#define PBROWSEINFO  WINELIB_NAME_AW(PBROWSEINFO)
+#define LPBROWSEINFO WINELIB_NAME_AW(LPBROWSEINFO)
+
+#include <poppack.h>
+
+/* Browsing for directory. */
+#define BIF_RETURNONLYFSDIRS   0x0001
+#define BIF_DONTGOBELOWDOMAIN  0x0002
+#define BIF_STATUSTEXT         0x0004
+#define BIF_RETURNFSANCESTORS  0x0008
+#define BIF_EDITBOX            0x0010
+#define BIF_VALIDATE           0x0020
+#define BIF_NEWDIALOGSTYLE     0x0040
+#define BIF_USENEWUI           (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
+#define BIF_BROWSEINCLUDEURLS  0x0080
+#define BIF_UAHINT             0x0100
+#define BIF_NONEWFOLDERBUTTON  0x0200
+#define BIF_NOTRANSLATETARGETS 0x0400
+
+#define BIF_BROWSEFORCOMPUTER  0x1000
+#define BIF_BROWSEFORPRINTER   0x2000
+#define BIF_BROWSEINCLUDEFILES 0x4000
+
+/* message from browser */
+#define BFFM_INITIALIZED        1
+#define BFFM_SELCHANGED         2
+#define BFFM_VALIDATEFAILEDA    3
+#define BFFM_VALIDATEFAILEDW    4
+#define BFFM_IUNKNOWN           5
+
+/* messages to browser */
+#define BFFM_SETSTATUSTEXTA     (WM_USER+100)
+#define BFFM_ENABLEOK           (WM_USER+101)
+#define BFFM_SETSELECTIONA      (WM_USER+102)
+#define BFFM_SETSELECTIONW      (WM_USER+103)
+#define BFFM_SETSTATUSTEXTW     (WM_USER+104)
+#define BFFM_SETOKTEXT          (WM_USER+105)
+#define BFFM_SETEXPANDED        (WM_USER+106)
+
+LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);
+LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);
+#define SHBrowseForFolder	 WINELIB_NAME_AW(SHBrowseForFolder)
+#define BFFM_SETSTATUSTEXT  WINELIB_NAME_AW(BFFM_SETSTATUSTEXT)
+#define BFFM_SETSELECTION   WINELIB_NAME_AW(BFFM_SETSELECTION)
+#define BFFM_VALIDATEFAILED WINELIB_NAME_AW(BFFM_VALIDATEFAILED)
+
+/**********************************************************************
+ * SHCreateShellFolderViewEx API
+ */
+
+typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)(
+	IShellView* dwUser,
+	IShellFolder* pshf,
+	HWND hWnd,
+	UINT uMsg,
+	WPARAM wParam,
+	LPARAM lParam);
+
+#include <pshpack8.h>
+
+typedef struct _CSFV
+{
+  UINT             cbSize;
+  IShellFolder*    pshf;
+  IShellView*      psvOuter;
+  LPCITEMIDLIST    pidl;
+  LONG             lEvents;
+  LPFNVIEWCALLBACK pfnCallback;
+  FOLDERVIEWMODE   fvm;
+} CSFV, *LPCSFV;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv);
+
+/* SHCreateShellFolderViewEx callback messages */
+#define SFVM_MERGEMENU                 1
+#define SFVM_INVOKECOMMAND             2
+#define SFVM_GETHELPTEXT               3
+#define SFVM_GETTOOLTIPTEXT            4
+#define SFVM_GETBUTTONINFO             5
+#define SFVM_GETBUTTONS                6
+#define SFVM_INITMENUPOPUP             7
+#define SFVM_SELECTIONCHANGED          8 /* undocumented */
+#define SFVM_DRAWMENUITEM              9 /* undocumented */
+#define SFVM_MEASUREMENUITEM          10 /* undocumented */
+#define SFVM_EXITMENULOOP             11 /* undocumented */
+#define SFVM_VIEWRELEASE              12 /* undocumented */
+#define SFVM_GETNAMELENGTH            13 /* undocumented */
+#define SFVM_FSNOTIFY                 14
+#define SFVM_WINDOWCREATED            15
+#define SFVM_WINDOWCLOSING            16 /* undocumented */
+#define SFVM_LISTREFRESHED            17 /* undocumented */
+#define SFVM_WINDOWFOCUSED            18 /* undocumented */
+#define SFVM_REGISTERCOPYHOOK         20 /* undocumented */
+#define SFVM_COPYHOOKCALLBACK         21 /* undocumented */
+#define SFVM_GETDETAILSOF             23
+#define SFVM_COLUMNCLICK              24
+#define SFVM_QUERYFSNOTIFY            25
+#define SFVM_DEFITEMCOUNT             26
+#define SFVM_DEFVIEWMODE              27
+#define SFVM_UNMERGEFROMMENU          28
+#define SFVM_ADDINGOBJECT             29 /* undocumented */
+#define SFVM_REMOVINGOBJECT           30 /* undocumented */
+#define SFVM_UPDATESTATUSBAR          31
+#define SFVM_BACKGROUNDENUM           32
+#define SFVM_GETCOMMANDDIR            33 /* undocumented */
+#define SFVM_GETCOLUMNSTREAM          34 /* undocumented */
+#define SFVM_CANSELECTALL             35 /* undocumented */
+#define SFVM_DIDDRAGDROP              36
+#define SFVM_ISSTRICTREFRESH          37 /* undocumented */
+#define SFVM_ISCHILDOBJECT            38 /* undocumented */
+#define SFVM_SETISFV                  39
+#define SFVM_GETEXTVIEWS              40 /* undocumented */
+#define SFVM_THISIDLIST               41
+#define SFVM_ADDPROPERTYPAGES         47
+#define SFVM_BACKGROUNDENUMDONE       48
+#define SFVM_GETNOTIFY                49
+#define SFVM_GETSORTDEFAULTS          53
+#define SFVM_SIZE                     57
+#define SFVM_GETZONE                  58
+#define SFVM_GETPANE                  59
+#define SFVM_GETHELPTOPIC             63
+#define SFVM_GETANIMATION             68
+#define SFVM_GET_CUSTOMVIEWINFO       77 /* undocumented */
+#define SFVM_ENUMERATEDITEMS          79 /* undocumented */
+#define SFVM_GET_VIEW_DATA            80 /* undocumented */
+#define SFVM_GET_WEBVIEW_LAYOUT       82 /* undocumented */
+#define SFVM_GET_WEBVIEW_CONTENT      83 /* undocumented */
+#define SFVM_GET_WEBVIEW_TASKS        84 /* undocumented */
+#define SFVM_GET_WEBVIEW_THEME        86 /* undocumented */
+#define SFVM_GETDEFERREDVIEWSETTINGS  92 /* undocumented */
+
+#include <pshpack8.h>
+
+typedef struct _SFV_CREATE
+{
+    UINT cbSize;
+    IShellFolder *pshf;
+    IShellView *psvOuter;
+    IShellFolderViewCB *psfvcb;
+} SFV_CREATE;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv);
+
+/* Types and definitions for the SFM_* parameters */
+#include <pshpack8.h>
+
+#define QCMINFO_PLACE_BEFORE          0
+#define QCMINFO_PLACE_AFTER           1
+typedef struct _QCMINFO_IDMAP_PLACEMENT
+{
+    UINT id;
+    UINT fFlags;
+} QCMINFO_IDMAP_PLACEMENT;
+
+typedef struct _QCMINFO_IDMAP
+{
+    UINT nMaxIds;
+    QCMINFO_IDMAP_PLACEMENT pIdList[1];
+} QCMINFO_IDMAP;
+
+typedef struct _QCMINFO
+{
+    HMENU hmenu;
+    UINT indexMenu;
+    UINT idCmdFirst;
+    UINT idCmdLast;
+    QCMINFO_IDMAP const* pIdMap;
+} QCMINFO, *LPQCMINFO;
+
+#define TBIF_DEFAULT           0x00000000
+#define TBIF_APPEND            0x00000000
+#define TBIF_PREPEND           0x00000001
+#define TBIF_REPLACE           0x00000002
+#define TBIF_INTERNETBAR       0x00010000
+#define TBIF_STANDARDTOOLBAR   0x00020000
+#define TBIF_NOTOOLBAR         0x00030000
+
+typedef struct _TBINFO
+{
+    UINT cbuttons;
+    UINT uFlags;
+} TBINFO, *LPTBINFO;
+
+#include <poppack.h>
+
+/****************************************************************************
+*	SHShellFolderView_Message API
+*/
+
+LRESULT WINAPI SHShellFolderView_Message(
+	HWND hwndCabinet,
+	UINT uMessage,
+	LPARAM lParam);
+
+/* SHShellFolderView_Message messages */
+#define SFVM_REARRANGE          0x0001
+#define SFVM_GETARRANGECOLUMN   0x0002 /* undocumented */
+#define SFVM_ADDOBJECT          0x0003
+#define SFVM_GETITEMCOUNT       0x0004 /* undocumented */
+#define SFVM_GETITEMPIDL        0x0005 /* undocumented */
+#define SFVM_REMOVEOBJECT       0x0006
+#define SFVM_UPDATEOBJECT       0x0007
+#define SFVM_SETREDRAW          0x0008 /* undocumented */
+#define SFVM_GETSELECTEDOBJECTS 0x0009
+#define SFVM_ISDROPONSOURCE     0x000A /* undocumented */
+#define SFVM_MOVEICONS          0x000B /* undocumented */
+#define SFVM_GETDRAGPOINT       0x000C /* undocumented */
+#define SFVM_GETDROPPOINT       0x000D /* undocumented */
+#define SFVM_SETITEMPOS         0x000E
+#define SFVM_ISDROPONBACKGROUND 0x000F /* undocumented */
+#define SFVM_SETCLIPBOARD       0x0010
+#define SFVM_TOGGLEAUTOARRANGE  0x0011 /* undocumented */
+#define SFVM_LINEUPICONS        0x0012 /* undocumented */
+#define SFVM_GETAUTOARRANGE     0x0013 /* undocumented */
+#define SFVM_GETSELECTEDCOUNT   0x0014 /* undocumented */
+#define SFVM_GETITEMSPACING     0x0015 /* undocumented */
+#define SFVM_REFRESHOBJECT      0x0016 /* undocumented */
+#define SFVM_SETPOINTS          0x0017
+
+/****************************************************************************
+*	SHGetDataFromIDList API
+*/
+#define SHGDFIL_FINDDATA        1
+#define SHGDFIL_NETRESOURCE     2
+#define SHGDFIL_DESCRIPTIONID   3
+
+#define SHDID_ROOT_REGITEM          1
+#define SHDID_FS_FILE               2
+#define SHDID_FS_DIRECTORY          3
+#define SHDID_FS_OTHER              4
+#define SHDID_COMPUTER_DRIVE35      5
+#define SHDID_COMPUTER_DRIVE525     6
+#define SHDID_COMPUTER_REMOVABLE    7
+#define SHDID_COMPUTER_FIXED        8
+#define SHDID_COMPUTER_NETDRIVE     9
+#define SHDID_COMPUTER_CDROM        10
+#define SHDID_COMPUTER_RAMDISK      11
+#define SHDID_COMPUTER_OTHER        12
+#define SHDID_NET_DOMAIN            13
+#define SHDID_NET_SERVER            14
+#define SHDID_NET_SHARE             15
+#define SHDID_NET_RESTOFNET         16
+#define SHDID_NET_OTHER             17
+#define SHDID_COMPUTER_IMAGING      18
+#define SHDID_COMPUTER_AUDIO        19
+#define SHDID_COMPUTER_SHAREDDOCS   20
+
+#include <pshpack8.h>
+
+typedef struct _SHDESCRIPTIONID
+{   DWORD   dwDescriptionId;
+    CLSID   clsid;
+} SHDESCRIPTIONID, *LPSHDESCRIPTIONID;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
+HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
+#define  SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)
+
+BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate);
+BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate);
+#define  SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)
+
+HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
+
+/**********************************************************************
+ * SHGetSetSettings ()
+ */
+
+typedef struct
+{
+    BOOL fShowAllObjects : 1;
+    BOOL fShowExtensions : 1;
+    BOOL fNoConfirmRecycle : 1;
+
+    BOOL fShowSysFiles : 1;
+    BOOL fShowCompColor : 1;
+    BOOL fDoubleClickInWebView : 1;
+    BOOL fDesktopHTML : 1;
+    BOOL fWin95Classic : 1;
+    BOOL fDontPrettyPath : 1;
+    BOOL fShowAttribCol : 1;
+    BOOL fMapNetDrvBtn : 1;
+    BOOL fShowInfoTip : 1;
+    BOOL fHideIcons : 1;
+    BOOL fWebView : 1;
+    BOOL fFilter : 1;
+    BOOL fShowSuperHidden : 1;
+    BOOL fNoNetCrawling : 1;
+
+    UINT :15; /* Required for proper binary layout with gcc */
+    DWORD dwWin95Unused;
+    UINT  uWin95Unused;
+    LONG   lParamSort;
+    int    iSortDirection;
+    UINT   version;
+    UINT uNotUsed;
+    BOOL fSepProcess: 1;
+    BOOL fStartPanelOn: 1;
+    BOOL fShowStartPage: 1;
+    UINT fSpareFlags : 13;
+    UINT :15; /* Required for proper binary layout with gcc */
+} SHELLSTATE, *LPSHELLSTATE;
+
+/**********************************************************************
+ * SHGetSettings ()
+ */
+typedef struct
+{	BOOL fShowAllObjects : 1;
+	BOOL fShowExtensions : 1;
+	BOOL fNoConfirmRecycle : 1;
+	BOOL fShowSysFiles : 1;
+
+	BOOL fShowCompColor : 1;
+	BOOL fDoubleClickInWebView : 1;
+	BOOL fDesktopHTML : 1;
+	BOOL fWin95Classic : 1;
+
+	BOOL fDontPrettyPath : 1;
+	BOOL fShowAttribCol : 1;
+	BOOL fMapNetDrvBtn : 1;
+	BOOL fShowInfoTip : 1;
+
+	BOOL fHideIcons : 1;
+	UINT fRestFlags : 3;
+	UINT :15; /* Required for proper binary layout with gcc */
+} SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
+
+VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
+
+#define SSF_SHOWALLOBJECTS		0x0001
+#define SSF_SHOWEXTENSIONS		0x0002
+#define SSF_SHOWCOMPCOLOR		0x0008
+#define SSF_SHOWSYSFILES		0x0020
+#define SSF_DOUBLECLICKINWEBVIEW	0x0080
+#define SSF_SHOWATTRIBCOL		0x0100
+#define SSF_DESKTOPHTML			0x0200
+#define SSF_WIN95CLASSIC		0x0400
+#define SSF_DONTPRETTYPATH		0x0800
+#define SSF_SHOWINFOTIP			0x2000
+#define SSF_MAPNETDRVBUTTON		0x1000
+#define SSF_NOCONFIRMRECYCLE		0x8000
+#define SSF_HIDEICONS			0x4000
+
+/****************************************************************************
+* SHRestricted API
+*/
+typedef enum RESTRICTIONS
+{
+	REST_NONE			= 0x00000000,
+	REST_NORUN			= 0x00000001,
+	REST_NOCLOSE			= 0x00000002,
+	REST_NOSAVESET			= 0x00000004,
+	REST_NOFILEMENU			= 0x00000008,
+	REST_NOSETFOLDERS		= 0x00000010,
+	REST_NOSETTASKBAR		= 0x00000020,
+	REST_NODESKTOP			= 0x00000040,
+	REST_NOFIND			= 0x00000080,
+	REST_NODRIVES			= 0x00000100,
+	REST_NODRIVEAUTORUN		= 0x00000200,
+	REST_NODRIVETYPEAUTORUN		= 0x00000400,
+	REST_NONETHOOD			= 0x00000800,
+	REST_STARTBANNER		= 0x00001000,
+	REST_RESTRICTRUN		= 0x00002000,
+	REST_NOPRINTERTABS		= 0x00004000,
+	REST_NOPRINTERDELETE		= 0x00008000,
+	REST_NOPRINTERADD		= 0x00010000,
+	REST_NOSTARTMENUSUBFOLDERS	= 0x00020000,
+	REST_MYDOCSONNET		= 0x00040000,
+	REST_NOEXITTODOS		= 0x00080000,
+	REST_ENFORCESHELLEXTSECURITY	= 0x00100000,
+	REST_LINKRESOLVEIGNORELINKINFO	= 0x00200000,
+	REST_NOCOMMONGROUPS		= 0x00400000,
+	REST_SEPARATEDESKTOPPROCESS	= 0x00800000,
+	REST_NOWEB			= 0x01000000,
+	REST_NOTRAYCONTEXTMENU		= 0x02000000,
+	REST_NOVIEWCONTEXTMENU		= 0x04000000,
+	REST_NONETCONNECTDISCONNECT	= 0x08000000,
+	REST_STARTMENULOGOFF		= 0x10000000,
+	REST_NOSETTINGSASSIST		= 0x20000000,
+	REST_NOINTERNETICON		= 0x40000001,
+	REST_NORECENTDOCSHISTORY,
+	REST_NORECENTDOCSMENU,
+	REST_NOACTIVEDESKTOP,
+	REST_NOACTIVEDESKTOPCHANGES,
+	REST_NOFAVORITESMENU,
+	REST_CLEARRECENTDOCSONEXIT,
+	REST_CLASSICSHELL,
+	REST_NOCUSTOMIZEWEBVIEW,
+
+	REST_NOHTMLWALLPAPER		= 0x40000010,
+	REST_NOCHANGINGWALLPAPER,
+	REST_NODESKCOMP,
+	REST_NOADDDESKCOMP,
+	REST_NODELDESKCOMP,
+	REST_NOCLOSEDESKCOMP,
+	REST_NOCLOSE_DRAGDROPBAND,
+	REST_NOMOVINGBAND,
+	REST_NOEDITDESKCOMP,
+	REST_NORESOLVESEARCH,
+	REST_NORESOLVETRACK,
+	REST_FORCECOPYACLWITHFILE,
+	REST_NOLOGO3CHANNELNOTIFY,
+	REST_NOFORGETSOFTWAREUPDATE,
+	REST_NOSETACTIVEDESKTOP,
+	REST_NOUPDATEWINDOWS,
+	REST_NOCHANGESTARMENU,		/* 0x40000020 */
+	REST_NOFOLDEROPTIONS,
+	REST_HASFINDCOMPUTERS,
+	REST_INTELLIMENUS,
+	REST_RUNDLGMEMCHECKBOX,
+	REST_ARP_ShowPostSetup,
+	REST_NOCSC,
+	REST_NOCONTROLPANEL,
+	REST_ENUMWORKGROUP,
+	REST_ARP_NOARP,
+	REST_ARP_NOREMOVEPAGE,
+	REST_ARP_NOADDPAGE,
+	REST_ARP_NOWINSETUPPAGE,
+	REST_GREYMSIADS,
+	REST_NOCHANGEMAPPEDDRIVELABEL,
+	REST_NOCHANGEMAPPEDDRIVECOMMENT,
+	REST_MaxRecentDocs,		/* 0x40000030 */
+	REST_NONETWORKCONNECTIONS,
+	REST_FORCESTARTMENULOGOFF,
+	REST_NOWEBVIEW,
+	REST_NOCUSTOMIZETHISFOLDER,
+	REST_NOENCRYPTION,
+
+	REST_ALLOWFRENCHENCRYPTION,	/* not documented */
+
+	REST_DONTSHOWSUPERHIDDEN,
+	REST_NOSHELLSEARCHBUTTON,
+	REST_NOHARDWARETAB,
+	REST_NORUNASINSTALLPROMPT,
+	REST_PROMPTRUNASINSTALLNETPATH,
+	REST_NOMANAGEMYCOMPUTERVERB,
+	REST_NORECENTDOCSNETHOOD,
+	REST_DISALLOWRUN,
+	REST_NOWELCOMESCREEN,
+	REST_RESTRICTCPL,		/* 0x40000040 */
+	REST_DISALLOWCPL,
+	REST_NOSMBALLOONTIP,
+	REST_NOSMHELP,
+	REST_NOWINKEYS,
+	REST_NOENCRYPTONMOVE,
+	REST_NOLOCALMACHINERUN,
+	REST_NOCURRENTUSERRUN,
+	REST_NOLOCALMACHINERUNONCE,
+	REST_NOCURRENTUSERRUNONCE,
+	REST_FORCEACTIVEDESKTOPON,
+	REST_NOCOMPUTERSNEARME,
+	REST_NOVIEWONDRIVE,
+	REST_NONETCRAWL,
+	REST_NOSHAREDDOCUMENTS,
+	REST_NOSMMYDOCS,
+	REST_NOSMMYPICS,		/* 0x40000050 */
+	REST_ALLOWBITBUCKDRIVES,
+	REST_NONLEGACYSHELLMODE,
+	REST_NOCONTROLPANELBARRICADE,
+	REST_NOSTARTPAGE,
+	REST_NOAUTOTRAYNOTIFY,
+	REST_NOTASKGROUPING,
+	REST_NOCDBURNING,
+	REST_MYCOMPNOPROP,
+	REST_MYDOCSNOPROP,
+	REST_NOSTARTPANEL,
+	REST_NODISPLAYAPPEARANCEPAGE,
+	REST_NOTHEMESTAB,
+	REST_NOVISUALSTYLECHOICE,
+	REST_NOSIZECHOICE,
+	REST_NOCOLORCHOICE,
+	REST_SETVISUALSTYLE,		/* 0x40000060 */
+	REST_STARTRUNNOHOMEPATH,
+	REST_NOUSERNAMEINSTARTPANEL,
+	REST_NOMYCOMPUTERICON,
+	REST_NOSMNETWORKPLACES,
+	REST_NOSMPINNEDLIST,
+	REST_NOSMMYMUSIC,
+	REST_NOSMEJECTPC,
+	REST_NOSMMOREPROGRAMS,
+	REST_NOSMMFUPROGRAMS,
+	REST_NOTRAYITEMSDISPLAY,
+	REST_NOTOOLBARSONTASKBAR,
+	/* 0x4000006C
+	   0x4000006D
+	   0x4000006E */
+	REST_NOSMCONFIGUREPROGRAMS	= 0x4000006F,
+	REST_HIDECLOCK,			/* 0x40000070 */
+	REST_NOLOWDISKSPACECHECKS,
+	REST_NOENTIRENETWORK,
+	REST_NODESKTOPCLEANUP,
+	REST_BITBUCKNUKEONDELETE,
+	REST_BITBUCKCONFIRMDELETE,
+	REST_BITBUCKNOPROP,
+	REST_NODISPBACKGROUND,
+	REST_NODISPSCREENSAVEPG,
+	REST_NODISPSETTINGSPG,
+	REST_NODISPSCREENSAVEPREVIEW,
+	REST_NODISPLAYCPL,
+	REST_HIDERUNASVERB,
+	REST_NOTHUMBNAILCACHE,
+	REST_NOSTRCMPLOGICAL,
+	REST_NOPUBLISHWIZARD,
+	REST_NOONLINEPRINTSWIZARD,	/* 0x40000080 */
+	REST_NOWEBSERVICES,
+	REST_ALLOWUNHASHEDWEBVIEW,
+	REST_ALLOWLEGACYWEBVIEW,
+	REST_REVERTWEBVIEWSECURITY,
+
+	REST_INHERITCONSOLEHANDLES	= 0x40000086,
+
+	REST_NODISCONNECT		= 0x41000001,
+	REST_NOSECURITY,
+	REST_NOFILEASSOCIATE,		/* 0x41000003 */
+} RESTRICTIONS;
+
+DWORD WINAPI SHRestricted(RESTRICTIONS rest);
+
+/****************************************************************************
+* SHChangeNotify API
+*/
+typedef struct _SHChangeNotifyEntry
+{
+    LPCITEMIDLIST pidl;
+    BOOL   fRecursive;
+} SHChangeNotifyEntry;
+
+#define SHCNE_RENAMEITEM	0x00000001
+#define SHCNE_CREATE		0x00000002
+#define SHCNE_DELETE		0x00000004
+#define SHCNE_MKDIR		0x00000008
+#define SHCNE_RMDIR		0x00000010
+#define SHCNE_MEDIAINSERTED	0x00000020
+#define SHCNE_MEDIAREMOVED	0x00000040
+#define SHCNE_DRIVEREMOVED	0x00000080
+#define SHCNE_DRIVEADD		0x00000100
+#define SHCNE_NETSHARE		0x00000200
+#define SHCNE_NETUNSHARE	0x00000400
+#define SHCNE_ATTRIBUTES	0x00000800
+#define SHCNE_UPDATEDIR		0x00001000
+#define SHCNE_UPDATEITEM	0x00002000
+#define SHCNE_SERVERDISCONNECT	0x00004000
+#define SHCNE_UPDATEIMAGE	0x00008000
+#define SHCNE_DRIVEADDGUI	0x00010000
+#define SHCNE_RENAMEFOLDER	0x00020000
+#define SHCNE_FREESPACE		0x00040000
+
+#define SHCNE_EXTENDED_EVENT	0x04000000
+#define SHCNE_ASSOCCHANGED	0x08000000
+#define SHCNE_DISKEVENTS	0x0002381F
+#define SHCNE_GLOBALEVENTS	0x0C0581E0
+#define SHCNE_ALLEVENTS		0x7FFFFFFF
+#define SHCNE_INTERRUPT		0x80000000
+
+#define SHCNEE_ORDERCHANGED     __MSABI_LONG(0x0002)
+#define SHCNEE_MSI_CHANGE       __MSABI_LONG(0x0004)
+#define SHCNEE_MSI_UNINSTALL    __MSABI_LONG(0x0005)
+
+#define SHCNF_IDLIST		0x0000
+#define SHCNF_PATHA		0x0001
+#define SHCNF_PRINTERA		0x0002
+#define SHCNF_DWORD		0x0003
+#define SHCNF_PATHW		0x0005
+#define SHCNF_PRINTERW		0x0006
+#define SHCNF_TYPE		0x00FF
+#define SHCNF_FLUSH		0x1000
+#define SHCNF_FLUSHNOWAIT	0x3000
+#define SHCNF_NOTIFYRECURSIVE	0x10000
+
+#define SHCNF_PATH              WINELIB_NAME_AW(SHCNF_PATH)
+#define SHCNF_PRINTER           WINELIB_NAME_AW(SHCNF_PRINTER)
+
+#define SHCNRF_InterruptLevel 0x0001
+#define SHCNRF_ShellLevel 0x0002
+#define SHCNRF_RecursiveInterrupt 0x1000
+#define SHCNRF_NewDelivery 0x8000
+
+void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
+
+typedef enum {
+    SLDF_HAS_ID_LIST = 0x00000001,
+    SLDF_HAS_LINK_INFO = 0x00000002,
+    SLDF_HAS_NAME = 0x00000004,
+    SLDF_HAS_RELPATH = 0x00000008,
+    SLDF_HAS_WORKINGDIR = 0x00000010,
+    SLDF_HAS_ARGS = 0x00000020,
+    SLDF_HAS_ICONLOCATION = 0x00000040,
+    SLDF_UNICODE = 0x00000080,
+    SLDF_FORCE_NO_LINKINFO = 0x00000100,
+    SLDF_HAS_EXP_SZ = 0x00000200,
+    SLDF_RUN_IN_SEPARATE = 0x00000400,
+    SLDF_HAS_LOGO3ID = 0x00000800,
+    SLDF_HAS_DARWINID = 0x00001000,
+    SLDF_RUNAS_USER = 0x00002000,
+    SLDF_HAS_EXP_ICON_SZ = 0x00004000,
+    SLDF_NO_PIDL_ALIAS = 0x00008000,
+    SLDF_FORCE_UNCNAME = 0x00010000,
+    SLDF_RUN_WITH_SHIMLAYER = 0x00020000,
+    SLDF_FORCE_NO_LINKTRACK = 0x00040000,
+    SLDF_ENABLE_TARGET_METADATA = 0x00080000,
+    SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000,
+    SLDF_VALID = 0x003ff7ff,
+    SLDF_RESERVED = 0x80000000,
+} SHELL_LINK_DATA_FLAGS;
+
+typedef struct tagDATABLOCKHEADER
+{
+    DWORD cbSize;
+    DWORD dwSignature;
+} DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST;
+
+typedef struct {
+    DATABLOCK_HEADER dbh;
+    CHAR szDarwinID[MAX_PATH];
+    WCHAR szwDarwinID[MAX_PATH];
+} EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK;
+
+typedef struct {
+    DWORD cbSize;
+    DWORD cbSignature;
+    CHAR szTarget[MAX_PATH];
+    WCHAR szwTarget[MAX_PATH];
+} EXP_SZ_LINK, *LPEXP_SZ_LINK;
+
+typedef struct {
+    DWORD cbSize;
+    DWORD dwSignature;
+    DWORD idSpecialFolder;
+    DWORD cbOffset;
+} EXP_SPECIAL_FOLDER, *LPEXP_SPECIAL_FOLDER;
+
+typedef struct {
+    DWORD cbSize;
+    DWORD dwSignature;
+    BYTE abPropertyStorage[1];
+} EXP_PROPERTYSTORAGE;
+
+#define EXP_SZ_LINK_SIG         0xa0000001
+#define NT_CONSOLE_PROPS_SIG    0xa0000002
+#define NT_FE_CONSOLE_PROPS_SIG 0xa0000004
+#define EXP_SPECIAL_FOLDER_SIG  0xa0000005
+#define EXP_DARWIN_ID_SIG       0xa0000006
+#define EXP_SZ_ICON_SIG         0xa0000007
+#define EXP_LOGO3_ID_SIG        EXP_SZ_ICON_SIG /* Old SDKs only */
+#define EXP_PROPERTYSTORAGE_SIG 0xa0000009
+
+typedef struct _SHChangeDWORDAsIDList {
+    USHORT   cb;
+    DWORD    dwItem1;
+    DWORD    dwItem2;
+    USHORT   cbZero;
+} SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList;
+
+typedef struct _SHChangeProductKeyAsIDList {
+    USHORT cb;
+    WCHAR wszProductKey[39];
+    USHORT cbZero;
+} SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
+
+ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
+                                    int cEntries, SHChangeNotifyEntry *pshcne);
+BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);
+HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,
+                                        LPITEMIDLIST **pppidl, LONG *plEvent);
+BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
+
+HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);
+
+/****************************************************************************
+* SHCreateDirectory API
+*/
+DWORD WINAPI SHCreateDirectory(HWND, LPCVOID);
+int WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);
+int WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);
+#define    SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx)
+
+/****************************************************************************
+* SHGetSetFolderCustomSettings API
+*/
+typedef struct {
+    DWORD dwSize;
+    DWORD dwMask;
+    SHELLVIEWID *pvid;
+    LPWSTR pszWebViewTemplate;
+    DWORD cchWebViewTemplate;
+    LPWSTR pszWebViewTemplateVersion;
+    LPWSTR pszInfoTip;
+    DWORD cchInfoTip;
+    CLSID *pclsid;
+    DWORD dwFlags;
+    LPWSTR pszIconFile;
+    DWORD cchIconFile;
+    int iIconIndex;
+    LPWSTR pszLogo;
+    DWORD cchLogo;
+} SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS;
+
+HRESULT WINAPI SHGetSetFolderCustomSettings(LPSHFOLDERCUSTOMSETTINGS pfcs, LPCSTR pszPath, DWORD dwReadWrite);
+
+/****************************************************************************
+* SHGetSpecialFolderLocation API
+*/
+HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl);
+HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl);
+
+/****************************************************************************
+* SHGetFolderPath API
+*/
+typedef enum {
+    SHGFP_TYPE_CURRENT = 0,
+    SHGFP_TYPE_DEFAULT = 1
+} SHGFP_TYPE;
+
+HRESULT WINAPI SHGetFolderPathA(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
+HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
+#define        SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath)
+
+#define CSIDL_DESKTOP		0x0000
+#define CSIDL_INTERNET		0x0001
+#define CSIDL_PROGRAMS		0x0002
+#define CSIDL_CONTROLS		0x0003
+#define CSIDL_PRINTERS		0x0004
+#define CSIDL_PERSONAL		0x0005
+#define CSIDL_FAVORITES		0x0006
+#define CSIDL_STARTUP		0x0007
+#define CSIDL_RECENT		0x0008
+#define CSIDL_SENDTO		0x0009
+#define CSIDL_BITBUCKET		0x000a
+#define CSIDL_STARTMENU		0x000b
+#define CSIDL_MYDOCUMENTS	CSIDL_PERSONAL
+#define CSIDL_MYMUSIC		0x000d
+#define CSIDL_MYVIDEO		0x000e
+#define CSIDL_DESKTOPDIRECTORY	0x0010
+#define CSIDL_DRIVES		0x0011
+#define CSIDL_NETWORK		0x0012
+#define CSIDL_NETHOOD		0x0013
+#define CSIDL_FONTS		0x0014
+#define CSIDL_TEMPLATES		0x0015
+#define CSIDL_COMMON_STARTMENU	0x0016
+#define CSIDL_COMMON_PROGRAMS	0X0017
+#define CSIDL_COMMON_STARTUP	0x0018
+#define CSIDL_COMMON_DESKTOPDIRECTORY	0x0019
+#define CSIDL_APPDATA		0x001a
+#define CSIDL_PRINTHOOD		0x001b
+#define CSIDL_LOCAL_APPDATA	0x001c
+#define CSIDL_ALTSTARTUP	0x001d
+#define CSIDL_COMMON_ALTSTARTUP	0x001e
+#define CSIDL_COMMON_FAVORITES  0x001f
+#define CSIDL_INTERNET_CACHE	0x0020
+#define CSIDL_COOKIES		0x0021
+#define CSIDL_HISTORY		0x0022
+#define CSIDL_COMMON_APPDATA	0x0023
+#define CSIDL_WINDOWS		0x0024
+#define CSIDL_SYSTEM		0x0025
+#define CSIDL_PROGRAM_FILES	0x0026
+#define CSIDL_MYPICTURES	0x0027
+#define CSIDL_PROFILE		0x0028
+#define CSIDL_SYSTEMX86		0x0029
+#define CSIDL_PROGRAM_FILESX86	0x002a
+#define CSIDL_PROGRAM_FILES_COMMON	0x002b
+#define CSIDL_PROGRAM_FILES_COMMONX86	0x002c
+#define CSIDL_COMMON_TEMPLATES	0x002d
+#define CSIDL_COMMON_DOCUMENTS	0x002e
+#define CSIDL_COMMON_ADMINTOOLS	0x002f
+#define CSIDL_ADMINTOOLS	0x0030
+#define CSIDL_CONNECTIONS	0x0031
+#define CSIDL_COMMON_MUSIC	0x0035
+#define CSIDL_COMMON_PICTURES	0x0036
+#define CSIDL_COMMON_VIDEO	0x0037
+#define CSIDL_RESOURCES		0x0038
+#define CSIDL_RESOURCES_LOCALIZED 0x0039
+#define CSIDL_COMMON_OEM_LINKS	0x003a
+#define CSIDL_CDBURN_AREA	0x003b
+#define CSIDL_COMPUTERSNEARME	0x003d
+#define CSIDL_PROFILES		0x003e
+#define CSIDL_FOLDER_MASK	0x00ff
+#define CSIDL_FLAG_PER_USER_INIT 0x0800
+#define CSIDL_FLAG_NO_ALIAS	0x1000
+#define CSIDL_FLAG_DONT_VERIFY	0x4000
+#define CSIDL_FLAG_CREATE	0x8000
+
+#define CSIDL_FLAG_MASK		0xff00
+
+/****************************************************************************
+ * SHGetDesktopFolder API
+ */
+HRESULT WINAPI SHGetDesktopFolder(IShellFolder * *);
+
+/****************************************************************************
+ * SHBindToParent API
+ */
+HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);
+
+/****************************************************************************
+* SHDefExtractIcon API
+*/
+HRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags,
+                                 HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
+HRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags,
+                                 HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
+#define        SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon)
+
+/*
+ * DROPFILES for CF_HDROP and CF_PRINTERS
+ */
+typedef struct _DROPFILES
+{
+  DWORD pFiles;
+  POINT pt;
+  BOOL  fNC;
+  BOOL  fWide;
+} DROPFILES, *LPDROPFILES;
+
+/*
+ * Properties of a file in the clipboard
+ */
+typedef struct _FILEDESCRIPTORA {
+    DWORD dwFlags;
+    CLSID clsid;
+    SIZEL sizel;
+    POINTL pointl;
+    DWORD dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD nFileSizeHigh;
+    DWORD nFileSizeLow;
+    CHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORA, *LPFILEDESCRIPTORA;
+
+typedef struct _FILEDESCRIPTORW {
+    DWORD dwFlags;
+    CLSID clsid;
+    SIZEL sizel;
+    POINTL pointl;
+    DWORD dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD nFileSizeHigh;
+    DWORD nFileSizeLow;
+    WCHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORW, *LPFILEDESCRIPTORW;
+
+DECL_WINELIB_TYPE_AW(FILEDESCRIPTOR)
+DECL_WINELIB_TYPE_AW(LPFILEDESCRIPTOR)
+
+/*
+ * CF_FILEGROUPDESCRIPTOR clipboard format
+ */
+typedef struct _FILEGROUPDESCRIPTORA {
+    UINT cItems;
+    FILEDESCRIPTORA fgd[1];
+} FILEGROUPDESCRIPTORA, *LPFILEGROUPDESCRIPTORA;
+
+typedef struct _FILEGROUPDESCRIPTORW {
+    UINT cItems;
+    FILEDESCRIPTORW fgd[1];
+} FILEGROUPDESCRIPTORW, *LPFILEGROUPDESCRIPTORW;
+
+DECL_WINELIB_TYPE_AW(FILEGROUPDESCRIPTOR)
+DECL_WINELIB_TYPE_AW(LPFILEGROUPDESCRIPTOR)
+
+/****************************************************************************
+ * Cabinet functions
+ */
+
+typedef struct {
+    WORD cLength;
+    WORD nVersion;
+    BOOL fFullPathTitle:1;
+    BOOL fSaveLocalView:1;
+    BOOL fNotShell:1;
+    BOOL fSimpleDefault:1;
+    BOOL fDontShowDescBar:1;
+    BOOL fNewWindowMode:1;
+    BOOL fShowCompColor:1;
+    BOOL fDontPrettyNames:1;
+    BOOL fAdminsCreateCommonGroups:1;
+    UINT fUnusedFlags:7;
+    UINT :15; /* Required for proper binary layout with gcc */
+    UINT fMenuEnumFilter;
+} CABINETSTATE, *LPCABINETSTATE;
+
+#define CABINETSTATE_VERSION 2
+
+BOOL WINAPI ReadCabinetState(CABINETSTATE *, int);
+BOOL WINAPI WriteCabinetState(CABINETSTATE *);
+
+/****************************************************************************
+ * Path Manipulation Routines
+ */
+
+/* PathProcessCommand flags */
+#define PPCF_ADDQUOTES        0x01
+#define PPCF_INCLUDEARGS      0x02
+#define PPCF_ADDARGUMENTS     0x03
+#define PPCF_NODIRECTORIES    0x10
+#define PPCF_DONTRESOLVE      0x20
+#define PPCF_FORCEQUALIFY     0x40
+#define PPCF_LONGESTPOSSIBLE  0x80
+
+/* PathResolve flags */
+#define PRF_VERIFYEXISTS         0x01
+#define PRF_EXECUTABLE           0x02
+#define PRF_TRYPROGRAMEXTENSIONS 0x03
+#define PRF_FIRSTDIRDEF          0x04
+#define PRF_DONTFINDLINK         0x08
+#define PRF_REQUIREABSOLUTE      0x10
+
+VOID WINAPI PathGetShortPath(LPWSTR pszPath);
+LONG WINAPI PathProcessCommand(LPCWSTR, LPWSTR, int, DWORD);
+int  WINAPI PathResolve(LPWSTR, PZPCWSTR, UINT);
+BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR, LPCWSTR, LPCWSTR, LPCWSTR);
+BOOL WINAPI Win32DeleteFile(LPCWSTR);
+
+/****************************************************************************
+ * Drag And Drop Routines
+ */
+
+/* DAD_AutoScroll sample structure */
+#define NUM_POINTS 3
+typedef struct
+{
+    int   iNextSample;
+    DWORD dwLastScroll;
+    BOOL  bFull;
+    POINT pts[NUM_POINTS];
+    DWORD dwTimes[NUM_POINTS];
+} AUTO_SCROLL_DATA;
+
+BOOL         WINAPI DAD_SetDragImage(HIMAGELIST,LPPOINT);
+BOOL         WINAPI DAD_DragEnterEx(HWND,POINT);
+BOOL         WINAPI DAD_DragEnterEx2(HWND,POINT,IDataObject*);
+BOOL         WINAPI DAD_DragMove(POINT);
+BOOL         WINAPI DAD_DragLeave(void);
+BOOL         WINAPI DAD_AutoScroll(HWND,AUTO_SCROLL_DATA*,LPPOINT);
+HRESULT      WINAPI SHDoDragDrop(HWND,IDataObject*,IDropSource*,DWORD,LPDWORD);
+
+/****************************************************************************
+ * Internet shortcut properties
+ */
+
+#define PID_IS_URL         2
+#define PID_IS_NAME        4
+#define PID_IS_WORKINGDIR  5
+#define PID_IS_HOTKEY      6
+#define PID_IS_SHOWCMD     7
+#define PID_IS_ICONINDEX   8
+#define PID_IS_ICONFILE    9
+#define PID_IS_WHATSNEW    10
+#define PID_IS_AUTHOR      11
+#define PID_IS_DESCRIPTION 12
+#define PID_IS_COMMENT     13
+
+
+LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST,LPCSHITEMID,BOOL);
+LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR);
+LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR);
+#define             ILCreateFromPath WINELIB_NAME_AW(ILCreateFromPath)
+LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST,LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST,LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);
+void         WINAPI ILFree(LPITEMIDLIST);
+LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);
+UINT         WINAPI ILGetSize(LPCITEMIDLIST);
+BOOL         WINAPI ILIsEqual(LPCITEMIDLIST,LPCITEMIDLIST);
+BOOL         WINAPI ILIsParent(LPCITEMIDLIST,LPCITEMIDLIST,BOOL);
+HRESULT      WINAPI ILLoadFromStream(LPSTREAM,LPITEMIDLIST*);
+BOOL         WINAPI ILRemoveLastID(LPITEMIDLIST);
+HRESULT      WINAPI ILSaveToStream(LPSTREAM,LPCITEMIDLIST);
+
+static inline BOOL ILIsEmpty(LPCITEMIDLIST pidl)
+{
+    return !(pidl && pidl->mkid.cb);
+}
+
+#include <pshpack8.h>
+
+typedef struct {
+    HWND hwnd;
+    IContextMenuCB *pcmcb;
+    PCIDLIST_ABSOLUTE pidlFolder;
+    IShellFolder *psf;
+    UINT cidl;
+    PCUITEMID_CHILD_ARRAY apidl;
+    IUnknown *punkAssociationInfo;
+    UINT cKeys;
+    const HKEY *aKeys;
+} DEFCONTEXTMENU;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv);
+
+typedef HRESULT (CALLBACK *LPFNDFMCALLBACK)(IShellFolder*,HWND,IDataObject*,UINT,WPARAM,LPARAM);
+
+HRESULT WINAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl,
+                                      LPCITEMIDLIST *apidl, IShellFolder *psf,
+                                      LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeys,
+                                      IContextMenu **ppcm);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_SHLOBJ_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h
new file mode 100644
index 0000000..9430425
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h
@@ -0,0 +1,1135 @@
+/*
+ * SHLWAPI.DLL functions
+ *
+ * Copyright (C) 2000 Juergen Schmied
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHLWAPI_H
+#define __WINE_SHLWAPI_H
+
+/* FIXME: #include <specstrings.h> */
+#include <objbase.h>
+#include <shtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#include <pshpack8.h>
+
+#ifndef NO_SHLWAPI_REG
+
+/* Registry functions */
+
+DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR);
+DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR);
+#define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey)
+
+DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR);
+DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR);
+#define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey)
+
+DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR);
+DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR);
+#define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue)
+
+DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD);
+DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD);
+#define SHGetValue WINELIB_NAME_AW(SHGetValue)
+
+DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);
+DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);
+#define SHSetValue WINELIB_NAME_AW(SHSetValue)
+
+DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+#define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx)
+
+LONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD);
+LONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD);
+#define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx)
+
+LONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+LONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+#define SHEnumValue WINELIB_NAME_AW(SHEnumValue)
+
+LONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+LONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+#define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey)
+
+DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);
+DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD);
+#define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath)
+
+DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);
+#define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath)
+
+DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);
+DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);
+#define SHCopyKey WINELIB_NAME_AW(SHCopyKey)
+
+HKEY WINAPI  SHRegDuplicateHKey(HKEY);
+
+/* SHRegGetValue flags */
+typedef INT SRRF;
+
+#define SRRF_RT_REG_NONE 0x1
+#define SRRF_RT_REG_SZ 0x2
+#define SRRF_RT_REG_EXPAND_SZ 0x4
+#define SRRF_RT_REG_BINARY 0x8
+#define SRRF_RT_REG_DWORD 0x10
+#define SRRF_RT_REG_MULTI_SZ 0x20
+#define SRRF_RT_REG_QWORD 0x40
+
+#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_DWORD)
+#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_QWORD)
+#define SRRF_RT_ANY 0xffff
+
+#define SRRF_RM_ANY 0
+#define SRRF_RM_NORMAL 0x10000
+#define SRRF_RM_SAFE 0x20000
+#define SRRF_RM_SAFENETWORK 0x40000
+
+#define SRRF_NOEXPAND 0x10000000
+#define SRRF_ZEROONFAILURE 0x20000000
+#define SRRF_NOVIRT 0x40000000
+
+LSTATUS WINAPI SHRegGetValueA(HKEY,LPCSTR,LPCSTR,SRRF,LPDWORD,LPVOID,LPDWORD);
+LSTATUS WINAPI SHRegGetValueW(HKEY,LPCWSTR,LPCWSTR,SRRF,LPDWORD,LPVOID,LPDWORD);
+#define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue)
+
+/* Undocumented registry functions */
+
+DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR);
+DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR);
+#define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey)
+
+
+/* User registry functions */
+
+typedef enum
+{
+  SHREGDEL_DEFAULT = 0,
+  SHREGDEL_HKCU    = 0x1,
+  SHREGDEL_HKLM    = 0x10,
+  SHREGDEL_BOTH    = SHREGDEL_HKLM | SHREGDEL_HKCU
+} SHREGDEL_FLAGS;
+
+typedef enum
+{
+  SHREGENUM_DEFAULT = 0,
+  SHREGENUM_HKCU    = 0x1,
+  SHREGENUM_HKLM    = 0x10,
+  SHREGENUM_BOTH    = SHREGENUM_HKLM | SHREGENUM_HKCU
+} SHREGENUM_FLAGS;
+
+#define SHREGSET_HKCU       0x1 /* Apply to HKCU if empty */
+#define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */
+#define SHREGSET_HKLM       0x4 /* Apply to HKLM if empty */
+#define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */
+#define SHREGSET_DEFAULT    (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
+
+typedef HANDLE HUSKEY;
+typedef HUSKEY *PHUSKEY;
+
+LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+#define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey)
+
+LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+#define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey)
+
+LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,
+                               BOOL,LPVOID,DWORD);
+LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
+                               BOOL,LPVOID,DWORD);
+#define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue)
+
+LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
+LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+#define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue)
+
+LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
+LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+#define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue)
+
+LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
+LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+#define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey)
+
+LONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS);
+LONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS);
+#define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey)
+
+LONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,
+                              LPVOID,LPDWORD,SHREGENUM_FLAGS);
+LONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,
+                              LPVOID,LPDWORD,SHREGENUM_FLAGS);
+#define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue)
+
+LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
+                                 LPDWORD,SHREGENUM_FLAGS);
+LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
+                                 LPDWORD,SHREGENUM_FLAGS);
+#define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey)
+
+LONG WINAPI SHRegCloseUSKey(HUSKEY);
+
+LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,
+                             BOOL,LPVOID,DWORD);
+LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
+                             BOOL,LPVOID,DWORD);
+#define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue)
+
+LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
+LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+#define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue)
+
+BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL);
+BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL);
+#define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue)
+
+int WINAPI SHRegGetIntW(HKEY,LPCWSTR,int);
+
+/* IQueryAssociation and helpers */
+enum
+{
+    ASSOCF_INIT_NOREMAPCLSID    = 0x001, /* Don't map clsid->progid */
+    ASSOCF_INIT_BYEXENAME       = 0x002, /* .exe name given */
+    ASSOCF_OPEN_BYEXENAME       = 0x002, /* Synonym */
+    ASSOCF_INIT_DEFAULTTOSTAR   = 0x004, /* Use * as base */
+    ASSOCF_INIT_DEFAULTTOFOLDER = 0x008, /* Use folder as base */
+    ASSOCF_NOUSERSETTINGS       = 0x010, /* No HKCU reads */
+    ASSOCF_NOTRUNCATE           = 0x020, /* Don't truncate return */
+    ASSOCF_VERIFY               = 0x040, /* Verify data */
+    ASSOCF_REMAPRUNDLL          = 0x080, /* Get rundll args */
+    ASSOCF_NOFIXUPS             = 0x100, /* Don't fixup errors */
+    ASSOCF_IGNOREBASECLASS      = 0x200, /* Don't read baseclass */
+    ASSOCF_INIT_IGNOREUNKNOWN   = 0x400, /* Fail for unknown progid */
+};
+
+typedef DWORD ASSOCF;
+
+typedef enum
+{
+    ASSOCSTR_COMMAND = 1,     /* Verb command */
+    ASSOCSTR_EXECUTABLE,      /* .exe from command string */
+    ASSOCSTR_FRIENDLYDOCNAME, /* Friendly doc type name */
+    ASSOCSTR_FRIENDLYAPPNAME, /* Friendly .exe name */
+    ASSOCSTR_NOOPEN,          /* noopen value */
+    ASSOCSTR_SHELLNEWVALUE,   /* Use shellnew key */
+    ASSOCSTR_DDECOMMAND,      /* DDE command template */
+    ASSOCSTR_DDEIFEXEC,       /* DDE command for process create */
+    ASSOCSTR_DDEAPPLICATION,  /* DDE app name */
+    ASSOCSTR_DDETOPIC,        /* DDE topic */
+    ASSOCSTR_INFOTIP,         /* Infotip */
+    ASSOCSTR_QUICKTIP,        /* Quick infotip */
+    ASSOCSTR_TILEINFO,        /* Properties for tileview */
+    ASSOCSTR_CONTENTTYPE,     /* Mimetype */
+    ASSOCSTR_DEFAULTICON,     /* Icon */
+    ASSOCSTR_SHELLEXTENSION,  /* GUID for shell extension handler */
+    ASSOCSTR_MAX
+} ASSOCSTR;
+
+typedef enum
+{
+    ASSOCKEY_SHELLEXECCLASS = 1, /* Key for ShellExec */
+    ASSOCKEY_APP,                /* Application */
+    ASSOCKEY_CLASS,              /* Progid or class */
+    ASSOCKEY_BASECLASS,          /* Base class */
+    ASSOCKEY_MAX
+} ASSOCKEY;
+
+typedef enum
+{
+    ASSOCDATA_MSIDESCRIPTOR = 1, /* Component descriptor */
+    ASSOCDATA_NOACTIVATEHANDLER, /* Don't activate */
+    ASSOCDATA_QUERYCLASSSTORE,   /* Look in Class Store */
+    ASSOCDATA_HASPERUSERASSOC,   /* Use user association */
+    ASSOCDATA_EDITFLAGS,         /* Edit flags */
+    ASSOCDATA_VALUE,             /* pszExtra is value */
+    ASSOCDATA_MAX
+} ASSOCDATA;
+
+typedef enum
+{
+    ASSOCENUM_NONE
+} ASSOCENUM;
+
+typedef struct IQueryAssociations *LPQUERYASSOCIATIONS;
+
+#define INTERFACE IQueryAssociations
+DECLARE_INTERFACE_(IQueryAssociations,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IQueryAssociations methods ***/
+    STDMETHOD(Init)(THIS_ ASSOCF  flags, LPCWSTR  pszAssoc, HKEY  hkProgid, HWND  hwnd) PURE;
+    STDMETHOD(GetString)(THIS_ ASSOCF  flags, ASSOCSTR  str, LPCWSTR  pszExtra, LPWSTR  pszOut, DWORD * pcchOut) PURE;
+    STDMETHOD(GetKey)(THIS_ ASSOCF  flags, ASSOCKEY  key, LPCWSTR  pszExtra, HKEY * phkeyOut) PURE;
+    STDMETHOD(GetData)(THIS_ ASSOCF  flags, ASSOCDATA  data, LPCWSTR  pszExtra, LPVOID  pvOut, DWORD * pcbOut) PURE;
+    STDMETHOD(GetEnum)(THIS_ ASSOCF  flags, ASSOCENUM  assocenum, LPCWSTR  pszExtra, REFIID  riid, LPVOID * ppvOut) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IQueryAssociations_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
+#define IQueryAssociations_AddRef(p)               (p)->lpVtbl->AddRef(p)
+#define IQueryAssociations_Release(p)              (p)->lpVtbl->Release(p)
+#define IQueryAssociations_Init(p,a,b,c,d)         (p)->lpVtbl->Init(p,a,b,c,d)
+#define IQueryAssociations_GetString(p,a,b,c,d,e)  (p)->lpVtbl->GetString(p,a,b,c,d,e)
+#define IQueryAssociations_GetKey(p,a,b,c,d)       (p)->lpVtbl->GetKey(p,a,b,c,d)
+#define IQueryAssociations_GetData(p,a,b,c,d,e)    (p)->lpVtbl->GetData(p,a,b,c,d,e)
+#define IQueryAssociations_GetEnum(p,a,b,c,d,e)    (p)->lpVtbl->GetEnum(p,a,b,c,d,e)
+#endif
+
+HRESULT WINAPI AssocCreate(CLSID,REFIID,LPVOID*);
+
+HRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD);
+HRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD);
+#define AssocQueryString WINELIB_NAME_AW(AssocQueryString)
+
+HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,LPDWORD);
+HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,LPDWORD);
+#define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey)
+
+HRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,PHKEY);
+HRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,PHKEY);
+#define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey)
+
+BOOL WINAPI AssocIsDangerous(LPCWSTR);
+
+#endif /* NO_SHLWAPI_REG */
+
+void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk);
+void WINAPI IUnknown_AtomicRelease(IUnknown **punk);
+HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd);
+HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);
+HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv);
+HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut);
+
+/* Path functions */
+#ifndef NO_SHLWAPI_PATH
+
+/* GetPathCharType return flags */
+#define GCT_INVALID     0x0
+#define GCT_LFNCHAR     0x1
+#define GCT_SHORTCHAR   0x2
+#define GCT_WILD        0x4
+#define GCT_SEPARATOR   0x8
+
+LPSTR  WINAPI PathAddBackslashA(LPSTR);
+LPWSTR WINAPI PathAddBackslashW(LPWSTR);
+#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
+
+BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR);
+BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR);
+#define PathAddExtension WINELIB_NAME_AW(PathAddExtension)
+
+BOOL WINAPI PathAppendA(LPSTR,LPCSTR);
+BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR);
+#define PathAppend WINELIB_NAME_AW(PathAppend)
+
+LPSTR  WINAPI PathBuildRootA(LPSTR,int);
+LPWSTR WINAPI PathBuildRootW(LPWSTR,int);
+#define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot)
+
+BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR);
+BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR);
+#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
+
+LPSTR  WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR);
+LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR);
+#define PathCombine WINELIB_NAME_AW(PathCombine)
+
+BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT);
+BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT);
+#define PathCompactPath WINELIB_NAME_AW(PathCompactPath)
+
+BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD);
+BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD);
+#define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx)
+
+int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR);
+int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);
+#define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix)
+
+HRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl)
+
+HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD);
+
+BOOL WINAPI PathFileExistsA(LPCSTR);
+BOOL WINAPI PathFileExistsW(LPCWSTR);
+#define PathFileExists WINELIB_NAME_AW(PathFileExists)
+
+BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*);
+BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*);
+#define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes)
+
+LPSTR  WINAPI PathFindExtensionA(LPCSTR);
+LPWSTR WINAPI PathFindExtensionW(LPCWSTR);
+#define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
+
+LPSTR  WINAPI PathFindFileNameA(LPCSTR);
+LPWSTR WINAPI PathFindFileNameW(LPCWSTR);
+#define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
+
+LPSTR  WINAPI PathFindNextComponentA(LPCSTR);
+LPWSTR WINAPI PathFindNextComponentW(LPCWSTR);
+#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
+
+BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*);
+BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*);
+#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
+
+LPSTR  WINAPI PathGetArgsA(LPCSTR);
+LPWSTR WINAPI PathGetArgsW(LPCWSTR);
+#define PathGetArgs WINELIB_NAME_AW(PathGetArgs)
+
+UINT WINAPI PathGetCharTypeA(UCHAR);
+UINT WINAPI PathGetCharTypeW(WCHAR);
+#define PathGetCharType WINELIB_NAME_AW(PathGetCharType)
+
+int WINAPI PathGetDriveNumberA(LPCSTR);
+int WINAPI PathGetDriveNumberW(LPCWSTR);
+#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
+
+BOOL WINAPI PathIsDirectoryA(LPCSTR);
+BOOL WINAPI PathIsDirectoryW(LPCWSTR);
+#define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory)
+
+BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR);
+BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR);
+#define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty)
+
+BOOL WINAPI PathIsFileSpecA(LPCSTR);
+BOOL WINAPI PathIsFileSpecW(LPCWSTR);
+#define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec);
+
+BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR);
+BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR);
+#define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix)
+
+BOOL WINAPI PathIsRelativeA(LPCSTR);
+BOOL WINAPI PathIsRelativeW(LPCWSTR);
+#define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
+
+BOOL WINAPI PathIsRootA(LPCSTR);
+BOOL WINAPI PathIsRootW(LPCWSTR);
+#define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
+
+BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR);
+BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR);
+#define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot)
+
+BOOL WINAPI PathIsUNCA(LPCSTR);
+BOOL WINAPI PathIsUNCW(LPCWSTR);
+#define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
+
+BOOL WINAPI PathIsUNCServerA(LPCSTR);
+BOOL WINAPI PathIsUNCServerW(LPCWSTR);
+#define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer)
+
+BOOL WINAPI PathIsUNCServerShareA(LPCSTR);
+BOOL WINAPI PathIsUNCServerShareW(LPCWSTR);
+#define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare)
+
+BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR);
+BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR);
+#define PathIsContentType WINELIB_NAME_AW(PathIsContentType)
+
+BOOL WINAPI PathIsURLA(LPCSTR);
+BOOL WINAPI PathIsURLW(LPCWSTR);
+#define PathIsURL WINELIB_NAME_AW(PathIsURL)
+
+BOOL WINAPI PathMakePrettyA(LPSTR);
+BOOL WINAPI PathMakePrettyW(LPWSTR);
+#define PathMakePretty WINELIB_NAME_AW(PathMakePretty)
+
+BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR);
+BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR);
+#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
+
+int WINAPI PathParseIconLocationA(LPSTR);
+int WINAPI PathParseIconLocationW(LPWSTR);
+#define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation)
+
+VOID WINAPI PathQuoteSpacesA(LPSTR);
+VOID WINAPI PathQuoteSpacesW(LPWSTR);
+#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
+
+BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD);
+BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD);
+#define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo)
+
+VOID WINAPI PathRemoveArgsA(LPSTR);
+VOID WINAPI PathRemoveArgsW(LPWSTR);
+#define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs)
+
+LPSTR  WINAPI PathRemoveBackslashA(LPSTR);
+LPWSTR WINAPI PathRemoveBackslashW(LPWSTR);
+#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
+
+VOID WINAPI PathRemoveBlanksA(LPSTR);
+VOID WINAPI PathRemoveBlanksW(LPWSTR);
+#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
+
+VOID WINAPI PathRemoveExtensionA(LPSTR);
+VOID WINAPI PathRemoveExtensionW(LPWSTR);
+#define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension)
+
+BOOL WINAPI PathRemoveFileSpecA(LPSTR);
+BOOL WINAPI PathRemoveFileSpecW(LPWSTR);
+#define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec)
+
+BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR);
+BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR);
+#define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension)
+
+BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT);
+BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT);
+#define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify)
+
+VOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR);
+VOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR);
+#define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath)
+
+LPSTR  WINAPI PathSkipRootA(LPCSTR);
+LPWSTR WINAPI PathSkipRootW(LPCWSTR);
+#define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot)
+
+VOID WINAPI PathStripPathA(LPSTR);
+VOID WINAPI PathStripPathW(LPWSTR);
+#define PathStripPath WINELIB_NAME_AW(PathStripPath)
+
+BOOL WINAPI PathStripToRootA(LPSTR);
+BOOL WINAPI PathStripToRootW(LPWSTR);
+#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)
+
+VOID WINAPI PathUnquoteSpacesA(LPSTR);
+VOID WINAPI PathUnquoteSpacesW(LPWSTR);
+#define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces)
+
+BOOL WINAPI PathMakeSystemFolderA(LPCSTR);
+BOOL WINAPI PathMakeSystemFolderW(LPCWSTR);
+#define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder)
+
+BOOL WINAPI PathUnmakeSystemFolderA(LPCSTR);
+BOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR);
+#define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder)
+
+BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD);
+BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD);
+#define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder)
+
+BOOL WINAPI PathIsNetworkPathA(LPCSTR);
+BOOL WINAPI PathIsNetworkPathW(LPCWSTR);
+#define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath)
+
+BOOL WINAPI PathIsLFNFileSpecA(LPCSTR);
+BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR);
+#define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec)
+
+LPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int);
+LPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int);
+#define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray)
+
+VOID WINAPI PathUndecorateA(LPSTR);
+VOID WINAPI PathUndecorateW(LPWSTR);
+#define PathUndecorate WINELIB_NAME_AW(PathUndecorate)
+
+BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT);
+BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT);
+#define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings)
+
+/* Url functions */
+typedef enum {
+    URL_SCHEME_INVALID     = -1,
+    URL_SCHEME_UNKNOWN     =  0,
+    URL_SCHEME_FTP,
+    URL_SCHEME_HTTP,
+    URL_SCHEME_GOPHER,
+    URL_SCHEME_MAILTO,
+    URL_SCHEME_NEWS,
+    URL_SCHEME_NNTP,
+    URL_SCHEME_TELNET,
+    URL_SCHEME_WAIS,
+    URL_SCHEME_FILE,
+    URL_SCHEME_MK,
+    URL_SCHEME_HTTPS,
+    URL_SCHEME_SHELL,
+    URL_SCHEME_SNEWS,
+    URL_SCHEME_LOCAL,
+    URL_SCHEME_JAVASCRIPT,
+    URL_SCHEME_VBSCRIPT,
+    URL_SCHEME_ABOUT,
+    URL_SCHEME_RES,
+    URL_SCHEME_MSSHELLROOTED,
+    URL_SCHEME_MSSHELLIDLIST,
+    URL_SCHEME_MSHELP,
+    URL_SCHEME_MSSHELLDEVICE,
+    URL_SCHEME_WILDCARD,
+    URL_SCHEME_SEARCH_MS,
+    URL_SCHEME_SEARCH,
+    URL_SCHEME_KNOWNFOLDER,
+    URL_SCHEME_MAXVALUE
+} URL_SCHEME;
+
+/* These are used by UrlGetPart routine */
+typedef enum {
+    URL_PART_NONE    = 0,
+    URL_PART_SCHEME  = 1,
+    URL_PART_HOSTNAME,
+    URL_PART_USERNAME,
+    URL_PART_PASSWORD,
+    URL_PART_PORT,
+    URL_PART_QUERY
+} URL_PART;
+
+#define URL_PARTFLAG_KEEPSCHEME  0x00000001
+
+/* These are used by the UrlIs... routines */
+typedef enum {
+    URLIS_URL,
+    URLIS_OPAQUE,
+    URLIS_NOHISTORY,
+    URLIS_FILEURL,
+    URLIS_APPLIABLE,
+    URLIS_DIRECTORY,
+    URLIS_HASQUERY
+} URLIS;
+
+/* This is used by the UrlApplyScheme... routines */
+#define URL_APPLY_FORCEAPPLY         0x00000008
+#define URL_APPLY_GUESSFILE          0x00000004
+#define URL_APPLY_GUESSSCHEME        0x00000002
+#define URL_APPLY_DEFAULT            0x00000001
+
+/* The following are used by UrlEscape..., UrlUnEscape...,
+ * UrlCanonicalize..., and UrlCombine... routines
+ */
+#define URL_WININET_COMPATIBILITY    0x80000000
+#define URL_PLUGGABLE_PROTOCOL       0x40000000
+#define URL_ESCAPE_UNSAFE            0x20000000
+#define URL_UNESCAPE                 0x10000000
+
+#define URL_DONT_SIMPLIFY            0x08000000
+#define URL_NO_META                  URL_DONT_SIMPLIFY
+#define URL_ESCAPE_SPACES_ONLY       0x04000000
+#define URL_DONT_ESCAPE_EXTRA_INFO   0x02000000
+#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
+#define URL_BROWSER_MODE             URL_DONT_ESCAPE_EXTRA_INFO
+
+#define URL_INTERNAL_PATH            0x00800000  /* Will escape #'s in paths */
+#define URL_UNESCAPE_HIGH_ANSI_ONLY  0x00400000
+#define URL_CONVERT_IF_DOSPATH       0x00200000
+#define URL_UNESCAPE_INPLACE         0x00100000
+
+#define URL_FILE_USE_PATHURL         0x00010000
+
+#define URL_ESCAPE_SEGMENT_ONLY      0x00002000
+#define URL_ESCAPE_PERCENT           0x00001000
+
+HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme)
+
+HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize)
+
+HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlCombine WINELIB_NAME_AW(UrlCombine)
+
+INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL);
+INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL);
+#define UrlCompare WINELIB_NAME_AW(UrlCompare)
+
+HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlEscape WINELIB_NAME_AW(UrlEscape)
+
+#define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \
+                         URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
+#define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \
+                         URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
+#define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces)
+
+LPCSTR  WINAPI UrlGetLocationA(LPCSTR);
+LPCWSTR WINAPI UrlGetLocationW(LPCWSTR);
+#define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation)
+
+HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD);
+HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD);
+#define UrlGetPart WINELIB_NAME_AW(UrlGetPart)
+
+HRESULT WINAPI HashData(const unsigned char *,DWORD,unsigned char *lpDest,DWORD);
+
+HRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,DWORD);
+HRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,DWORD);
+#define UrlHash WINELIB_NAME_AW(UrlHash)
+
+BOOL    WINAPI UrlIsA(LPCSTR,URLIS);
+BOOL    WINAPI UrlIsW(LPCWSTR,URLIS);
+#define UrlIs WINELIB_NAME_AW(UrlIs)
+
+BOOL    WINAPI UrlIsNoHistoryA(LPCSTR);
+BOOL    WINAPI UrlIsNoHistoryW(LPCWSTR);
+#define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory)
+
+BOOL    WINAPI UrlIsOpaqueA(LPCSTR);
+BOOL    WINAPI UrlIsOpaqueW(LPCWSTR);
+#define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque)
+
+#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL)
+#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL)
+#define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl)
+
+HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlUnescape WINELIB_NAME_AW(UrlUnescape)
+
+#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \
+                                              y | URL_UNESCAPE_INPLACE)
+#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \
+                                              y | URL_UNESCAPE_INPLACE)
+#define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace)
+
+HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath)
+
+typedef struct tagPARSEDURLA {
+    DWORD cbSize;
+    LPCSTR pszProtocol;
+    UINT cchProtocol;
+    LPCSTR pszSuffix;
+    UINT cchSuffix;
+    UINT nScheme;
+} PARSEDURLA, *PPARSEDURLA;
+
+typedef struct tagPARSEDURLW {
+    DWORD cbSize;
+    LPCWSTR pszProtocol;
+    UINT cchProtocol;
+    LPCWSTR pszSuffix;
+    UINT cchSuffix;
+    UINT nScheme;
+} PARSEDURLW, *PPARSEDURLW;
+
+HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu);
+HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu);
+#define ParseURL WINELIB_NAME_AW(ParseUrl)
+
+#endif /* NO_SHLWAPI_PATH */
+
+
+/* String functions */
+#ifndef NO_SHLWAPI_STRFCNS
+
+/* StrToIntEx flags */
+#define STIF_DEFAULT     __MSABI_LONG(0x0)
+#define STIF_SUPPORT_HEX __MSABI_LONG(0x1)
+
+BOOL WINAPI ChrCmpIA (WORD,WORD);
+BOOL WINAPI ChrCmpIW (WCHAR,WCHAR);
+#define ChrCmpI WINELIB_NAME_AW(ChrCmpI)
+
+INT WINAPI StrCSpnA(LPCSTR,LPCSTR);
+INT WINAPI StrCSpnW(LPCWSTR,LPCWSTR);
+#define StrCSpn WINELIB_NAME_AW(StrCSpn)
+
+INT WINAPI StrCSpnIA(LPCSTR,LPCSTR);
+INT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR);
+#define StrCSpnI WINELIB_NAME_AW(StrCSpnI)
+
+#define StrCatA lstrcatA
+LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR);
+#define StrCat WINELIB_NAME_AW(StrCat)
+
+LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT);
+LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT);
+#define StrCatBuff WINELIB_NAME_AW(StrCatBuff)
+
+DWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR);
+
+LPSTR WINAPI StrChrA(LPCSTR,WORD);
+LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR);
+#define StrChr WINELIB_NAME_AW(StrChr)
+
+LPSTR WINAPI StrChrIA(LPCSTR,WORD);
+LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR);
+#define StrChrI WINELIB_NAME_AW(StrChrI)
+
+#define StrCmpA lstrcmpA
+int WINAPI StrCmpW(LPCWSTR,LPCWSTR);
+#define StrCmp WINELIB_NAME_AW(StrCmp)
+
+#define StrCmpIA lstrcmpiA
+int WINAPI StrCmpIW(LPCWSTR,LPCWSTR);
+#define StrCmpI WINELIB_NAME_AW(StrCmpI)
+
+#define StrCpyA lstrcpyA
+LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR);
+#define StrCpy WINELIB_NAME_AW(StrCpy)
+
+#define StrCpyNA lstrcpynA
+LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int);
+#define StrCpyN WINELIB_NAME_AW(StrCpyN)
+#define StrNCpy WINELIB_NAME_AW(StrCpyN)
+
+INT WINAPI StrCmpLogicalW(LPCWSTR,LPCWSTR);
+
+INT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT);
+INT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT);
+#define StrCmpN WINELIB_NAME_AW(StrCmpN)
+#define StrNCmp WINELIB_NAME_AW(StrCmpN)
+
+INT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT);
+INT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT);
+#define StrCmpNI WINELIB_NAME_AW(StrCmpNI)
+#define StrNCmpI WINELIB_NAME_AW(StrCmpNI)
+
+LPSTR WINAPI StrDupA(LPCSTR);
+LPWSTR WINAPI StrDupW(LPCWSTR);
+#define StrDup WINELIB_NAME_AW(StrDup)
+
+HRESULT WINAPI SHStrDupA(LPCSTR,WCHAR**);
+HRESULT WINAPI SHStrDupW(LPCWSTR,WCHAR**);
+#define SHStrDup WINELIB_NAME_AW(SHStrDup)
+
+LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT);
+
+/* A/W Pairing is broken for this function */
+LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT);
+LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT);
+#ifndef WINE_NO_UNICODE_MACROS
+#ifdef UNICODE
+#define StrFormatByteSize StrFormatByteSizeW
+#else
+#define StrFormatByteSize StrFormatByteSize64A
+#endif
+#endif
+
+LPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT);
+LPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT);
+#define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize)
+
+int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int);
+int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int);
+#define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval)
+
+BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int);
+BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);
+#define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual)
+
+#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c)
+#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c)
+
+#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c)
+#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c)
+
+LPSTR  WINAPI StrNCatA(LPSTR,LPCSTR,int);
+LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int);
+#define StrNCat WINELIB_NAME_AW(StrNCat)
+#define StrCatN WINELIB_NAME_AW(StrNCat)
+
+LPSTR  WINAPI StrPBrkA(LPCSTR,LPCSTR);
+LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR);
+#define StrPBrk WINELIB_NAME_AW(StrPBrk)
+
+LPSTR  WINAPI StrRChrA(LPCSTR,LPCSTR,WORD);
+LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD);
+#define StrRChr WINELIB_NAME_AW(StrRChr)
+
+LPSTR  WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD);
+LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD);
+#define StrRChrI WINELIB_NAME_AW(StrRChrI)
+
+LPSTR  WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR);
+LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define StrRStrI WINELIB_NAME_AW(StrRStrI)
+
+int WINAPI StrSpnA(LPCSTR,LPCSTR);
+int WINAPI StrSpnW(LPCWSTR,LPCWSTR);
+#define StrSpn WINELIB_NAME_AW(StrSpn)
+
+LPSTR  WINAPI StrStrA(LPCSTR,LPCSTR);
+LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR);
+#define StrStr WINELIB_NAME_AW(StrStr)
+
+LPSTR  WINAPI StrStrIA(LPCSTR,LPCSTR);
+LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR);
+#define StrStrI WINELIB_NAME_AW(StrStrI)
+
+LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT);
+LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT);
+
+int WINAPI StrToIntA(LPCSTR);
+int WINAPI StrToIntW(LPCWSTR);
+#define StrToInt WINELIB_NAME_AW(StrToInt)
+#define StrToLong WINELIB_NAME_AW(StrToInt)
+
+BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*);
+BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*);
+#define StrToIntEx WINELIB_NAME_AW(StrToIntEx)
+
+BOOL WINAPI StrToInt64ExA(LPCSTR,DWORD,LONGLONG*);
+BOOL WINAPI StrToInt64ExW(LPCWSTR,DWORD,LONGLONG*);
+#define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64)
+
+BOOL WINAPI StrTrimA(LPSTR,LPCSTR);
+BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);
+#define StrTrim WINELIB_NAME_AW(StrTrim)
+
+INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list);
+INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list);
+#define wvnsprintf WINELIB_NAME_AW(wvnsprintf)
+
+INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...);
+INT WINAPIV wnsprintfW(LPWSTR,INT,LPCWSTR, ...);
+#define wnsprintf WINELIB_NAME_AW(wnsprintf)
+
+HRESULT WINAPI SHLoadIndirectString(LPCWSTR,LPWSTR,UINT,PVOID*);
+
+BOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int);
+BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int);
+#define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker)
+
+#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n)
+#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n)
+#define IntlStrEqN WINELIB_NAME_AW(IntlStrEqN)
+
+#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n)
+#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n)
+#define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI)
+
+HRESULT WINAPI StrRetToStrA(STRRET*,LPCITEMIDLIST,LPSTR*);
+HRESULT WINAPI StrRetToStrW(STRRET*,LPCITEMIDLIST,LPWSTR*);
+#define StrRetToStr WINELIB_NAME_AW(StrRetToStr)
+
+HRESULT WINAPI StrRetToBufA(STRRET*,LPCITEMIDLIST,LPSTR,UINT);
+HRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT);
+#define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf)
+
+HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*);
+
+BOOL WINAPI IsCharSpaceA(CHAR);
+BOOL WINAPI IsCharSpaceW(WCHAR);
+#define IsCharSpace WINELIB_NAME_AW(IsCharSpace)
+
+#endif /* NO_SHLWAPI_STRFCNS */
+
+
+/* GDI functions */
+#ifndef NO_SHLWAPI_GDI
+
+HPALETTE WINAPI SHCreateShellPalette(HDC);
+
+COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD);
+
+COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL);
+
+VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD);
+
+#endif /* NO_SHLWAPI_GDI */
+
+/* Security functions */
+BOOL WINAPI IsInternetESCEnabled(void);
+
+/* Stream functions */
+#ifndef NO_SHLWAPI_STREAM
+
+struct IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD);
+struct IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD);
+#define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */
+
+struct IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD);
+struct IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD);
+#define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2)
+
+HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**);
+HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**);
+#define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile)
+
+HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**);
+
+HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**);
+
+#endif /* NO_SHLWAPI_STREAM */
+
+/* SHAutoComplete flags */
+#define SHACF_DEFAULT               0x00000000
+#define SHACF_FILESYSTEM            0x00000001
+#define SHACF_URLHISTORY            0x00000002
+#define SHACF_URLMRU                0x00000004
+#define SHACF_URLALL                (SHACF_URLHISTORY|SHACF_URLMRU)
+#define SHACF_USETAB                0x00000008
+#define SHACF_FILESYS_ONLY          0x00000010
+#define SHACF_FILESYS_DIRS          0x00000020
+#define SHACF_AUTOSUGGEST_FORCE_ON  0x10000000
+#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000
+#define SHACF_AUTOAPPEND_FORCE_ON   0x40000000
+#define SHACF_AUTOAPPEND_FORCE_OFF  0x80000000
+
+HRESULT WINAPI SHAutoComplete(HWND,DWORD);
+
+/* Threads */
+HRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**);
+HRESULT WINAPI SHGetThreadRef(IUnknown**);
+HRESULT WINAPI SHSetThreadRef(IUnknown*);
+HRESULT WINAPI SHReleaseThreadRef(void);
+
+/* SHCreateThread flags */
+#define CTF_INSIST          0x01 /* Always call */
+#define CTF_THREAD_REF      0x02 /* Hold thread ref */
+#define CTF_PROCESS_REF     0x04 /* Hold process ref */
+#define CTF_COINIT          0x08 /* Startup COM first */
+#define CTF_FREELIBANDEXIT  0x10 /* Hold DLL ref */
+#define CTF_REF_COUNTED     0x20 /* Thread is ref counted */
+#define CTF_WAIT_ALLOWCOM   0x40 /* Allow marshalling */
+
+BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE);
+
+BOOL WINAPI SHSkipJunction(struct IBindCtx*,const CLSID*);
+
+/* Version Information */
+
+typedef struct _DllVersionInfo {
+    DWORD cbSize;
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+    DWORD dwBuildNumber;
+    DWORD dwPlatformID;
+} DLLVERSIONINFO;
+
+#define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */
+#define DLLVER_PLATFORM_NT      0x02 /* WinNT */
+
+typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);
+
+#ifdef __WINESRC__
+/* shouldn't be here, but is nice for type checking */
+HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *) DECLSPEC_HIDDEN;
+#endif
+
+typedef struct _DLLVERSIONINFO2 {
+    DLLVERSIONINFO info1;
+    DWORD          dwFlags;    /* Reserved */
+    ULONGLONG DECLSPEC_ALIGN(8) ullVersion; /* 16 bits each for Major, Minor, Build, QFE */
+} DLLVERSIONINFO2;
+
+#define DLLVER_MAJOR_MASK 0xFFFF000000000000
+#define DLLVER_MINOR_MASK 0x0000FFFF00000000
+#define DLLVER_BUILD_MASK 0x00000000FFFF0000
+#define DLLVER_QFE_MASK   0x000000000000FFFF
+
+#define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \
+  ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe))
+
+HRESULT WINAPI DllInstall(BOOL,LPCWSTR) DECLSPEC_HIDDEN;
+
+
+/* IsOS definitions */
+
+#define OS_WIN32SORGREATER        0x00
+#define OS_NT                     0x01
+#define OS_WIN95ORGREATER         0x02
+#define OS_NT4ORGREATER           0x03
+#define OS_WIN2000ORGREATER_ALT   0x04
+#define OS_WIN98ORGREATER         0x05
+#define OS_WIN98_GOLD             0x06
+#define OS_WIN2000ORGREATER       0x07
+#define OS_WIN2000PRO             0x08
+#define OS_WIN2000SERVER          0x09
+#define OS_WIN2000ADVSERVER       0x0A
+#define OS_WIN2000DATACENTER      0x0B
+#define OS_WIN2000TERMINAL        0x0C
+#define OS_EMBEDDED               0x0D
+#define OS_TERMINALCLIENT         0x0E
+#define OS_TERMINALREMOTEADMIN    0x0F
+#define OS_WIN95_GOLD             0x10
+#define OS_MEORGREATER            0x11
+#define OS_XPORGREATER            0x12
+#define OS_HOME                   0x13
+#define OS_PROFESSIONAL           0x14
+#define OS_DATACENTER             0x15
+#define OS_ADVSERVER              0x16
+#define OS_SERVER                 0x17
+#define OS_TERMINALSERVER         0x18
+#define OS_PERSONALTERMINALSERVER 0x19
+#define OS_FASTUSERSWITCHING      0x1A
+#define OS_WELCOMELOGONUI         0x1B
+#define OS_DOMAINMEMBER           0x1C
+#define OS_ANYSERVER              0x1D
+#define OS_WOW6432                0x1E
+#define OS_WEBSERVER              0x1F
+#define OS_SMALLBUSINESSSERVER    0x20
+#define OS_TABLETPC               0x21
+#define OS_SERVERADMINUI          0x22
+#define OS_MEDIACENTER            0x23
+#define OS_APPLIANCE              0x24
+
+BOOL WINAPI IsOS(DWORD);
+
+/* SHSetTimerQueueTimer definitions */
+#define TPS_EXECUTEIO    0x00000001
+#define TPS_LONGEXECTIME 0x00000008
+
+/* SHFormatDateTimeA/SHFormatDateTimeW flags */
+#define FDTF_SHORTTIME          0x00000001
+#define FDTF_SHORTDATE          0x00000002
+#define FDTF_DEFAULT            (FDTF_SHORTDATE | FDTF_SHORTTIME)
+#define FDTF_LONGDATE           0x00000004
+#define FDTF_LONGTIME           0x00000008
+#define FDTF_RELATIVE           0x00000010
+#define FDTF_LTRDATE            0x00000100
+#define FDTF_RTLDATE            0x00000200
+#define FDTF_NOAUTOREADINGORDER 0x00000400
+
+
+typedef struct
+{
+    const IID *piid;
+    int        dwOffset;
+} QITAB, *LPQITAB;
+
+HRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv);
+
+#include <poppack.h> 
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_SHLWAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl
new file mode 100644
index 0000000..8e7f041
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl
@@ -0,0 +1,3408 @@
+/*
+ * COM interfaces for shell objects
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "docobj.idl";
+import "shtypes.idl";
+import "servprov.idl";
+import "comcat.idl";
+import "propidl.idl";
+/* FIXME: import "prsht.idl";*/
+import "msxml.idl";
+import "wtypes.idl";
+import "propsys.idl";
+import "objectarray.idl";
+/* FIXME: import "structuredquery.idl"; */
+
+cpp_quote("/* FIXME: #include <sherrors.h> */")
+
+
+/*****************************************************************************
+ * IPersistFolder interface
+ */
+[
+    object,
+    uuid(000214ea-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IPersistFolder : IPersist
+{
+    typedef IPersistFolder *LPPERSISTFOLDER;
+
+    HRESULT Initialize( [in] LPCITEMIDLIST pidl );
+}
+
+
+/*****************************************************************************
+ * IPersistFolder2 interface
+ */
+[
+    object,
+    uuid(1ac3d9f0-175c-11d1-95be-00609797ea4f),
+    pointer_default(unique)
+]
+interface IPersistFolder2 : IPersistFolder
+{
+    typedef IPersistFolder2 *LPPERSISTFOLDER2;
+
+    HRESULT GetCurFolder( [out] LPITEMIDLIST *ppidl );
+}
+
+
+/*****************************************************************************
+ * IPersistIDList interface
+ */
+[
+    object,
+    uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5),
+    pointer_default(unique)
+]
+interface IPersistIDList : IPersist
+{
+    HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
+    HRESULT GetIDList( [out] LPITEMIDLIST *ppidl );
+}
+
+
+/*****************************************************************************
+ * IEnumIDList interface
+ */
+[
+    object,
+    uuid(000214f2-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IEnumIDList : IUnknown
+{
+    typedef IEnumIDList *LPENUMIDLIST;
+
+    HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip( [in] ULONG celt );
+    HRESULT Reset();
+    HRESULT Clone( [out] IEnumIDList **ppenum );
+}
+
+/*****************************************************************************
+ * IShellPropSheetExt interface
+ */
+cpp_quote("#if 0")
+    typedef LPARAM LPFNSVADDPROPSHEETPAGE;
+cpp_quote("#else")
+cpp_quote("#include <prsht.h>")
+cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;")
+cpp_quote("#endif")
+
+[
+    object,
+    uuid(000214E9-0000-0000-C000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IShellPropSheetExt : IUnknown
+{
+    enum tagSHELLPROPSHEETEXTPAGEID {
+        EXPPS_FILETYPES = 0x1
+    };
+
+    typedef UINT EXPPS;
+
+    HRESULT AddPages(
+        [in] LPFNSVADDPROPSHEETPAGE pfnAddPage,
+        [in] LPARAM lParam);
+    HRESULT ReplacePage(
+        [in] EXPPS uPageID,
+        [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith,
+        [in] LPARAM lParam);
+}
+typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
+
+/*****************************************************************************
+ * IShellFolder interface
+ */
+[
+    object,
+    uuid(000214e6-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IShellFolder : IUnknown
+{
+    typedef IShellFolder * LPSHELLFOLDER;
+
+    typedef enum tagSHGDN
+    {
+        SHGDN_NORMAL = 0,
+        SHGDN_INFOLDER = 1,
+        SHGDN_FOREDITING = 0x1000,
+        SHGDN_INCLUDE_NONFILESYS = 0x2000,
+        SHGDN_FORADDRESSBAR = 0x4000,
+        SHGDN_FORPARSING = 0x8000
+    } SHGNO;
+
+    typedef DWORD SHGDNF;
+
+    enum tagSHCONTF
+    {
+        SHCONTF_FOLDERS = 32,
+        SHCONTF_NONFOLDERS = 64,
+        SHCONTF_INCLUDEHIDDEN = 128,
+        SHCONTF_INIT_ON_FIRST_NEXT = 256,
+        SHCONTF_NETPRINTERSRCH = 512,
+        SHCONTF_SHAREABLE = 1024,
+        SHCONTF_STORAGE = 2048
+    };
+
+    typedef DWORD SHCONTF;
+
+    cpp_quote("#define SFGAO_CANCOPY           DROPEFFECT_COPY")
+    cpp_quote("#define SFGAO_CANMOVE           DROPEFFECT_MOVE")
+    cpp_quote("#define SFGAO_CANLINK           DROPEFFECT_LINK")
+    cpp_quote("#define SFGAO_STORAGE           0x00000008L")
+    cpp_quote("#define SFGAO_CANRENAME         0x00000010L")
+    cpp_quote("#define SFGAO_CANDELETE         0x00000020L")
+    cpp_quote("#define SFGAO_HASPROPSHEET      0x00000040L")
+    cpp_quote("#define SFGAO_DROPTARGET        0x00000100L")
+    cpp_quote("#define SFGAO_CAPABILITYMASK    0x00000177L")
+    cpp_quote("#define SFGAO_ENCRYPTED         0x00002000L")
+    cpp_quote("#define SFGAO_ISSLOW            0x00004000L")
+    cpp_quote("#define SFGAO_GHOSTED           0x00008000L")
+    cpp_quote("#define SFGAO_LINK              0x00010000L")
+    cpp_quote("#define SFGAO_SHARE             0x00020000L")
+    cpp_quote("#define SFGAO_READONLY          0x00040000L")
+    cpp_quote("#define SFGAO_HIDDEN            0x00080000L")
+    cpp_quote("#define SFGAO_DISPLAYATTRMASK   0x000FC000L")
+    cpp_quote("#define SFGAO_FILESYSANCESTOR   0x10000000L")
+    cpp_quote("#define SFGAO_FOLDER            0x20000000L")
+    cpp_quote("#define SFGAO_FILESYSTEM        0x40000000L")
+    cpp_quote("#define SFGAO_HASSUBFOLDER      0x80000000L")
+    cpp_quote("#define SFGAO_CONTENTSMASK      0x80000000L")
+    cpp_quote("#define SFGAO_VALIDATE          0x01000000L")
+    cpp_quote("#define SFGAO_REMOVABLE         0x02000000L")
+    cpp_quote("#define SFGAO_COMPRESSED        0x04000000L")
+    cpp_quote("#define SFGAO_BROWSABLE         0x08000000L")
+    cpp_quote("#define SFGAO_NONENUMERATED     0x00100000L")
+    cpp_quote("#define SFGAO_NEWCONTENT        0x00200000L")
+    cpp_quote("#define SFGAO_STREAM            0x00400000L")
+    cpp_quote("#define SFGAO_STORAGEANCESTOR   0x00800000L")
+
+    typedef ULONG SFGAOF;
+
+    HRESULT ParseDisplayName(
+        [in] HWND hwndOwner,
+        [in] LPBC pbcReserved,
+        [in, string] LPOLESTR lpszDisplayName,
+        [out] ULONG *pchEaten,
+        [out] LPITEMIDLIST *ppidl,
+        [in, out, unique] ULONG *pdwAttributes);
+
+    HRESULT EnumObjects(
+        [in] HWND hwndOwner,
+        [in] SHCONTF grfFlags,
+        [out] IEnumIDList **ppenumIDList);
+
+    HRESULT BindToObject(
+        [in] LPCITEMIDLIST pidl,
+        [in] LPBC pbcReserved,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvOut);
+
+    HRESULT BindToStorage(
+        [in] LPCITEMIDLIST pidl,
+        [in] LPBC pbcReserved,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvObj);
+
+    HRESULT CompareIDs(
+        [in] LPARAM lParam,
+        [in] LPCITEMIDLIST pidl1,
+        [in] LPCITEMIDLIST pidl2);
+
+    HRESULT CreateViewObject(
+        [in] HWND hwndOwner,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvOut);
+
+    HRESULT GetAttributesOf(
+        [in] UINT cidl,
+        [in, size_is(cidl)] LPCITEMIDLIST *apidl,
+        [in, out] SFGAOF *rgfInOut);
+
+    HRESULT GetUIObjectOf(
+        [in] HWND hwndOwner,
+        [in] UINT cidl,
+        [in, size_is(cidl)] LPCITEMIDLIST *apidl,
+        [in] REFIID riid,
+        [in, out, unique] UINT *prgfInOut,
+        [out, iid_is(riid)] void **ppvOut);
+
+    HRESULT GetDisplayNameOf(
+        [in] LPCITEMIDLIST pidl,
+        [in] SHGDNF uFlags,
+        [out] STRRET *lpName);
+
+    HRESULT SetNameOf(
+        [in] HWND hwnd,
+        [in] LPCITEMIDLIST pidl,
+        [in, string] LPCOLESTR lpszName,
+        [in] SHGDNF uFlags,
+        [out] LPITEMIDLIST *ppidlOut);
+}
+
+
+/*****************************************************************************
+ * IEnumExtraSearch interface
+ */
+[
+    object,
+    uuid(0e700be1-9db6-11d1-a1ce-00c04fd75d13),
+    pointer_default(unique)
+]
+interface IEnumExtraSearch : IUnknown
+{
+    typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
+
+    typedef struct
+    {
+        GUID guidSearch;
+        WCHAR wszFriendlyName[80];
+        /*
+         *WCHAR wszMenuText[80];
+         *WCHAR wszHelpText[MAX_PATH];
+         */
+        WCHAR wszUrl[2084];
+        /*
+         *WCHAR wszIcon[MAX_PATH+10];
+         *WCHAR wszGreyIcon[MAX_PATH+10];
+         *WCHAR wszClrIcon[MAX_PATH+10];
+         */
+    } EXTRASEARCH, *LPEXTRASEARCH;
+
+    HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip( [in] ULONG celt );
+    HRESULT Reset();
+    HRESULT Clone( [out] IEnumExtraSearch **ppenum );
+}
+
+
+/*****************************************************************************
+ * IShellFolder2 interface
+ */
+[
+    object,
+    uuid(93f2f68c-1d1b-11d3-a30e-00c04f79abd1),
+    pointer_default(unique)
+]
+interface IShellFolder2 : IShellFolder
+{
+    typedef struct
+    {
+        GUID    fmtid;
+        DWORD   pid;
+    } SHCOLUMNID, *LPSHCOLUMNID;
+    typedef const SHCOLUMNID *LPCSHCOLUMNID;
+
+    HRESULT GetDefaultSearchGUID( [out] GUID *lpguid );
+    HRESULT EnumSearches( [out] IEnumExtraSearch **ppenum );
+    HRESULT GetDefaultColumn( [in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay );
+    HRESULT GetDefaultColumnState( [in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags );
+    HRESULT GetDetailsEx( [in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);
+    HRESULT GetDetailsOf( [in] LPCITEMIDLIST pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd);
+    HRESULT MapColumnToSCID( [in] UINT iColumn, [in] SHCOLUMNID *pscid );
+}
+
+/*****************************************************************************
+ * IShellItem interface
+ */
+[
+    object,
+    uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe),
+    pointer_default(unique)
+]
+interface IShellItem : IUnknown
+{
+    typedef [v1_enum] enum {
+        SIGDN_NORMALDISPLAY                = 0,
+        SIGDN_PARENTRELATIVEPARSING        = 0x80018001,
+        SIGDN_DESKTOPABSOLUTEPARSING       = 0x80028000,
+        SIGDN_PARENTRELATIVEEDITING        = 0x80031001,
+        SIGDN_DESKTOPABSOLUTEEDITING       = 0x8004c000,
+        SIGDN_FILESYSPATH                  = 0x80058000,
+        SIGDN_URL                          = 0x80068000,
+        SIGDN_PARENTRELATIVEFORADDRESSBAR  = 0x8007c001,
+        SIGDN_PARENTRELATIVE               = 0x80080001
+    } SIGDN; /* & 0xFFFF => SHGDN */
+
+    [v1_enum] enum _SICHINTF
+    {
+        SICHINT_DISPLAY                       = 0x00000000,
+        SICHINT_CANONICAL                     = 0x10000000,
+        SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,
+        SICHINT_ALLFIELDS                     = 0x80000000
+    };
+    typedef DWORD SICHINTF;
+
+    HRESULT BindToHandler(
+        [in] IBindCtx *pbc,
+        [in] REFGUID rbhid,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvOut);
+
+    HRESULT GetParent( [out] IShellItem **ppsi );
+
+    HRESULT GetDisplayName(
+        [in] SIGDN sigdnName,
+        [out] LPWSTR *ppszName);
+
+    HRESULT GetAttributes(
+        [in] SFGAOF sfgaoMask,
+        [out] SFGAOF *psfgaoAttribs);
+
+    HRESULT Compare(
+        [in] IShellItem *psi,
+        [in] SICHINTF hint,
+        [out] int *piOrder);
+}
+
+/*****************************************************************************
+ * IShellItem2 interface
+ */
+[
+    object,
+    uuid(7E9FB0D3-919F-4307-AB2E-9B1860310C93),
+    pointer_default(unique)
+]
+interface IShellItem2 : IShellItem
+{
+    HRESULT GetPropertyStore(
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT GetPropertyStoreWithCreateObject(
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in] IUnknown *punkCreateObject,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT GetPropertyStoreForKeys(
+        [in, size_is(cKeys)] const PROPERTYKEY *rgKeys,
+        [in] UINT cKeys,
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT GetPropertyDescriptionList(
+        [in] REFPROPERTYKEY keyType,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT Update(
+        [in, unique] IBindCtx *pbc);
+
+    HRESULT GetProperty(
+        [in] REFPROPERTYKEY key,
+        [out] PROPVARIANT *ppropvar);
+
+    HRESULT GetCLSID(
+        [in] REFPROPERTYKEY key,
+        [out] CLSID *pclsid);
+
+    HRESULT GetFileTime (
+        [in] REFPROPERTYKEY key,
+        [out] FILETIME *pft);
+
+    HRESULT GetInt32(
+        [in] REFPROPERTYKEY key,
+        [out] int *pi);
+
+    HRESULT GetString(
+        [in] REFPROPERTYKEY key,
+        [out, string] LPWSTR *ppsz);
+
+    HRESULT GetUInt32(
+        [in] REFPROPERTYKEY key,
+        [out] ULONG *pui);
+
+    HRESULT GetUInt64(
+        [in] REFPROPERTYKEY key,
+        [out] ULONGLONG *pull);
+
+    HRESULT GetBool(
+        [in] REFPROPERTYKEY key,
+        [out] BOOL *pf);
+}
+
+typedef enum tagNWMF {
+    NWMF_UNLOADING        = 0x0001,
+    NWMF_USERINITED       = 0x0002,
+    NWMF_FIRST            = 0x0004,
+    NWMF_OVERRIDEKEY      = 0x0008,
+    NWMF_SHOWHELP         = 0x0010,
+    NWMF_HTMLDIALOG       = 0x0020,
+    NWMF_FROMDIALOGCHILD  = 0x0040,
+    NWMF_USERREQUESTED    = 0x0080,
+    NWMF_USERALLOWED      = 0x0100
+} NWMF;
+
+[
+    uuid(d2bc4c84-3f72-4a52-a604-7bcbf3982cbb),
+    object,
+    pointer_default(unique)
+]
+interface INewWindowManager : IUnknown
+{
+    HRESULT EvaluateNewWindow(
+        [in, string] LPCWSTR pszUrl,
+        [in, string] LPCWSTR pszName,
+        [in, string] LPCWSTR pszUrlContext,
+        [in, string] LPCWSTR pszFeatures,
+        [in]         BOOL fReplace,
+        [in]         DWORD dwFlags,
+        [in]         DWORD dwUserActionTime);
+}
+
+cpp_quote("#define SID_SNewWindowManager IID_INewWindowManager")
+
+/*****************************************************************************
+ * IEnumShellItems interface
+ */
+[
+ object,
+ uuid(70629033-E363-4A28-A567-0DB78006E6D7),
+ pointer_default(unique)
+]
+interface IEnumShellItems : IUnknown
+{
+    [local] HRESULT Next(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
+        [out] ULONG *pceltFetched);
+
+    [call_as(Next)] HRESULT RemoteNext(
+        [in] ULONG celt,
+        [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
+        [out] ULONG *pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IEnumShellItems **ppenum);
+}
+
+/*****************************************************************************
+ * IShellItemArray interface
+ */
+[
+ object,
+ uuid(B63EA76D-1F85-456F-A19C-48159EFA858B),
+ pointer_default(unique)
+]
+interface IShellItemArray : IUnknown
+{
+    typedef [v1_enum] enum SIATTRIBFLAGS {
+        SIATTRIBFLAGS_AND            = 0x0001,
+        SIATTRIBFLAGS_OR             = 0x0002,
+        SIATTRIBFLAGS_APPCOMPAT      = 0x0003,
+        SIATTRIBFLAGS_MASK           = 0x0003,
+        SIATTRIBFLAGS_ALLITEMS       = 0x4000
+    } SIATTRIBFLAGS;
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)")
+
+    HRESULT BindToHandler(
+        [in, unique] IBindCtx *pbc,
+        [in] REFGUID bhid,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvOut);
+
+    HRESULT GetPropertyStore(
+        [in] GETPROPERTYSTOREFLAGS flags,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT GetPropertyDescriptionList(
+        [in] REFPROPERTYKEY keyType,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT GetAttributes(
+        [in] SIATTRIBFLAGS AttribFlags,
+        [in] SFGAOF sfgaoMask,
+        [out] SFGAOF *psfgaoAttribs);
+
+    HRESULT GetCount(
+        [out] DWORD *pdwNumItems);
+
+    HRESULT GetItemAt(
+        [in] DWORD dwIndex,
+        [out] IShellItem **ppsi);
+
+    HRESULT EnumItems(
+        [out] IEnumShellItems **ppenumShellItems);
+
+}
+
+typedef [v1_enum] enum DATAOBJ_GET_ITEM_FLAGS
+{
+    DOGIF_DEFAULT       = 0x0,
+    DOGIF_TRAVERSE_LINK = 0x1,
+    DOGIF_NO_HDROP      = 0x2,
+    DOGIF_NO_URL        = 0x4,
+    DOGIF_ONLY_IF_ONE   = 0x8
+} DATAOBJ_GET_ITEM_FLAGS;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DATAOBJ_GET_ITEM_FLAGS)")
+
+cpp_quote("HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName);")
+cpp_quote("HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl);")
+cpp_quote("HRESULT WINAPI SHGetItemFromObject(IUnknown *punk, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHCreateShellItemArray(PCIDLIST_ABSOLUTE pidlParent, IShellFolder* psf, UINT cidl, PCUITEMID_CHILD_ARRAY ppidl, IShellItemArray **ppsiItemArray);")
+cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromShellItem(IShellItem *psi, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromDataObject(IDataObject *pdo, REFIID riid, void **ppv);")
+
+/*****************************************************************************
+ * IShellItemFilter interface
+ */
+[
+ object,
+ uuid(2659B475-EEB8-48B7-8F07-B378810F48CF),
+ pointer_default(unique)
+]
+interface IShellItemFilter : IUnknown
+{
+    HRESULT IncludeItem(
+        [in] IShellItem *psi);
+
+    HRESULT GetEnumFlagsForItem(
+        [in] IShellItem *psi,
+        [out] SHCONTF *pgrfFlags);
+}
+
+/*****************************************************************************
+ * FOLDERSETTINGS
+ */
+typedef char *LPVIEWSETTINGS;
+
+typedef enum
+{
+    FWF_AUTOARRANGE         = 0x00000001,
+    FWF_ABBREVIATEDNAMES    = 0x00000002,
+    FWF_SNAPTOGRID          = 0x00000004,
+    FWF_OWNERDATA           = 0x00000008,
+    FWF_BESTFITWINDOW       = 0x00000010,
+    FWF_DESKTOP             = 0x00000020,
+    FWF_SINGLESEL           = 0x00000040,
+    FWF_NOSUBFOLDERS        = 0x00000080,
+    FWF_TRANSPARENT         = 0x00000100,
+    FWF_NOCLIENTEDGE        = 0x00000200,
+    FWF_NOSCROLL            = 0x00000400,
+    FWF_ALIGNLEFT           = 0x00000800,
+    FWF_NOICONS             = 0x00001000,
+    FWF_SHOWSELALWAYS       = 0x00002000,
+    FWF_NOVISIBLE           = 0x00004000,
+    FWF_SINGLECLICKACTIVATE = 0x00008000,
+    FWF_NOWEBVIEW           = 0x00010000,
+    FWF_HIDEFILENAMES       = 0x00020000,
+    FWF_CHECKSELECT         = 0x00040000,
+    FWF_NOENUMREFRESH       = 0x00080000,
+    FWF_NOGROUPING          = 0x00100000,
+    FWF_FULLROWSELECT       = 0x00200000,
+    FWF_NOFILTERS           = 0x00400000,
+    FWF_NOCOLUMNHEADER      = 0x00800000,
+    FWF_NOHEADERINALLVIEWS  = 0x01000000,
+    FWF_EXTENDEDTILES       = 0x02000000,
+    FWF_TRICHECKSELECT      = 0x04000000,
+    FWF_AUTOCHECKSELECT     = 0x08000000,
+    FWF_NOBROWSERVIEWSTATE  = 0x10000000,
+    FWF_SUBSETGROUPS        = 0x20000000,
+    FWF_USESEARCHFOLDER     = 0x40000000,
+    FWF_ALLOWRTLREADING     = 0x80000000
+} FOLDERFLAGS;
+
+typedef enum
+{
+    FVM_AUTO       =-1,
+    FVM_ICON       = 1,
+    FVM_FIRST      = FVM_ICON,
+    FVM_SMALLICON  = 2,
+    FVM_LIST       = 3,
+    FVM_DETAILS    = 4,
+    FVM_THUMBNAIL  = 5,
+    FVM_TILE       = 6,
+    FVM_THUMBSTRIP = 7,
+    FVM_CONTENT    = 8,
+    FVM_LAST       = FVM_CONTENT
+} FOLDERVIEWMODE;
+
+typedef struct
+{
+    UINT ViewMode;
+    UINT fFlags;
+} FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS;
+typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
+
+/*****************************************************************************
+ * IShellIcon interface
+ */
+[
+    uuid(000214e5-0000-0000-c000-000000000046),
+    object,
+    pointer_default(unique)
+]
+interface IShellIcon : IUnknown
+{
+    HRESULT GetIconOf(
+        [in] PCUITEMID_CHILD pidl,
+        [in] UINT flags,
+        [out] int *pIconIndex);
+}
+
+/*****************************************************************************
+ * IShellView interface
+ */
+interface IShellBrowser;  /* forward declaration */
+[
+    object,
+    uuid(000214e3-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IShellView : IOleWindow
+{
+    typedef IShellView *LPSHELLVIEW;
+
+    cpp_quote("#define SVSI_DESELECT       0x00000000")
+    cpp_quote("#define SVSI_SELECT         0x00000001")
+    cpp_quote("#define SVSI_EDIT           0x00000003")
+    cpp_quote("#define SVSI_DESELECTOTHERS 0x00000004")
+    cpp_quote("#define SVSI_ENSUREVISIBLE  0x00000008")
+    cpp_quote("#define SVSI_FOCUSED        0x00000010")
+    cpp_quote("#define SVSI_TRANSLATEPT    0x00000020")
+    cpp_quote("#define SVSI_SELECTIONMARK  0x00000040")
+    cpp_quote("#define SVSI_POSITIONITEM   0x00000080")
+    cpp_quote("#define SVSI_CHECK          0x00000100")
+    cpp_quote("#define SVSI_NOSTATECHANGE  0x80000000")
+
+    typedef UINT SVSIF;
+
+    typedef enum
+    {
+        SVGIO_BACKGROUND     = 0x00000000,
+        SVGIO_SELECTION      = 0x00000001,
+        SVGIO_ALLVIEW        = 0x00000002,
+        SVGIO_CHECKED        = 0x00000003,
+        SVGIO_TYPE_MASK      = 0x0000000f,
+        SVGIO_FLAG_VIEWORDER = 0x80000000,
+    } SVGIO;
+
+    typedef enum
+    {
+        SVUIA_DEACTIVATE       = 0,
+        SVUIA_ACTIVATE_NOFOCUS = 1,
+        SVUIA_ACTIVATE_FOCUS   = 2,
+        SVUIA_INPLACEACTIVATE  = 3
+    } SVUIA_STATUS;
+
+    HRESULT TranslateAccelerator( [in] MSG *pmsg );
+    HRESULT EnableModeless( [in] BOOL fEnable );
+    HRESULT UIActivate( [in] UINT uState );
+    HRESULT Refresh();
+    HRESULT CreateViewWindow(
+        [in] IShellView *psvPrevious,
+        [in] LPCFOLDERSETTINGS lpfs,
+        [in] IShellBrowser *psb,
+        [out] RECT *prcView,
+        [out] HWND *phWnd);
+
+    HRESULT DestroyViewWindow();
+    HRESULT GetCurrentInfo( [out] LPFOLDERSETTINGS lpfs );
+
+    [local] HRESULT AddPropertySheetPages(
+        [in] DWORD dwReserved,
+        [in] LPFNSVADDPROPSHEETPAGE pfn,
+        [in] LPARAM lparam);
+
+    HRESULT SaveViewState();
+    HRESULT SelectItem(
+        [in] LPCITEMIDLIST pidlItem,
+        [in] SVSIF uFlags);
+    HRESULT GetItemObject(
+        [in] UINT uItem,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+}
+
+[
+    object,
+    uuid(88e39e80-3578-11cf-ae69-08002b2e1262),
+    pointer_default(unique)
+]
+interface IShellView2 : IShellView
+{
+    typedef GUID SHELLVIEWID;
+cpp_quote("#include <pshpack8.h>")
+    typedef struct _SV2CVW2_PARAMS
+    {
+        DWORD cbSize;
+        IShellView *psvPrev;
+        LPCFOLDERSETTINGS pfs;
+        IShellBrowser *psbOwner;
+        RECT *prcView;
+        SHELLVIEWID const *pvid;
+        HWND hwndView;
+    } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;
+cpp_quote("#include <poppack.h>")
+
+    HRESULT GetView(
+        [in, out] SHELLVIEWID *view_guid,
+        [in] ULONG view_type
+    );
+    HRESULT CreateViewWindow2(
+        [in] LPSV2CVW2_PARAMS view_params
+    );
+    HRESULT HandleRename(
+        [in] LPCITEMIDLIST new_pidl
+    );
+    HRESULT SelectAndPositionItem(
+        [in] LPCITEMIDLIST item,
+        [in] UINT flags,
+        [in] POINT *point
+    );
+}
+
+/*****************************************************************************
+ * IFolderView interface
+ */
+[
+    uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
+    object,
+    pointer_default(unique)
+]
+interface IFolderView : IUnknown
+{
+    HRESULT GetCurrentViewMode( [out] UINT *mode );
+    HRESULT SetCurrentViewMode( [in] UINT mode );
+    HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv );
+    HRESULT Item(
+        [in] int index,
+        [out] PITEMID_CHILD *ppidl
+    );
+    HRESULT ItemCount(
+        [in] UINT flags,
+        [out] int *items
+    );
+    HRESULT Items(
+        [in] UINT flags,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv
+    );
+    HRESULT GetSelectionMarkedItem( [out] int *item );
+    HRESULT GetFocusedItem( [out] int *item );
+    HRESULT GetItemPosition(
+        [in] PCUITEMID_CHILD pidl,
+        [out] POINT* ppt
+    );
+    HRESULT GetSpacing( [in, out, unique] POINT* pt );
+    HRESULT GetDefaultSpacing( [out] POINT* pt );
+    HRESULT GetAutoArrange();
+    HRESULT SelectItem(
+        [in] int item,
+        [in] DWORD flags
+    );
+    HRESULT SelectAndPositionItems(
+        [in] UINT cidl,
+        [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
+        [in, unique, size_is(cidl)] POINT* apt,
+        [in] DWORD flags
+    );
+}
+
+/*****************************************************************************
+ * IShellBrowser interface
+ */
+[
+    object,
+    uuid(000214e2-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IShellBrowser : IOleWindow
+{
+    typedef IShellBrowser *LPSHELLBROWSER;
+
+cpp_quote("#define SBSP_DEFBROWSER            0x00000000")
+cpp_quote("#define SBSP_SAMEBROWSER           0x00000001")
+cpp_quote("#define SBSP_NEWBROWSER            0x00000002")
+cpp_quote("#define SBSP_DEFMODE               0x00000000")
+cpp_quote("#define SBSP_OPENMODE              0x00000010")
+cpp_quote("#define SBSP_EXPLOREMODE           0x00000020")
+cpp_quote("#define SBSP_HELPMODE              0x00000040")
+cpp_quote("#define SBSP_NOTRANSFERHIST        0x00000080")
+cpp_quote("#define SBSP_ABSOLUTE              0x00000000")
+cpp_quote("#define SBSP_RELATIVE              0x00001000")
+cpp_quote("#define SBSP_PARENT                0x00002000")
+cpp_quote("#define SBSP_NAVIGATEBACK          0x00004000")
+cpp_quote("#define SBSP_NAVIGATEFORWARD       0x00008000")
+cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE    0x00010000")
+cpp_quote("#define SBSP_KEEPSAMETEMPLATE      0x00020000")
+cpp_quote("#define SBSP_KEEPWORDWHEELTEXT     0x00040000")
+cpp_quote("#define SBSP_ACTIVATE_NOFOCUS      0x00080000")
+cpp_quote("#define SBSP_CREATENOHISTORY       0x00100000")
+cpp_quote("#define SBSP_PLAYNOSOUND           0x00200000")
+cpp_quote("#define SBSP_CALLERUNTURUSTED      0x00800000")
+cpp_quote("#define SBSP_TRUSTFIRSTDOWNLOAD    0x01000000")
+cpp_quote("#define SBSP_UNTRUSTEDFORDOWNLOAD  0x02000000")
+cpp_quote("#define SBSP_NOAUTOSELECT          0x04000000")
+cpp_quote("#define SBSP_WRITENOHISTORY        0x08000000")
+cpp_quote("#define SBSP_TRUSTEDFORACTIVEX     0x10000000")
+cpp_quote("#define SBSP_FEEDNAVIGATION        0x20000000")
+cpp_quote("#define SBSP_REDIRECT              0x40000000")
+cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME 0x80000000")
+
+cpp_quote("#define FCW_STATUS      0x0001")
+cpp_quote("#define FCW_TOOLBAR     0x0002")
+cpp_quote("#define FCW_TREE        0x0003")
+cpp_quote("#define FCW_INTERNETBAR 0x0006")
+cpp_quote("#define FCW_PROGRESS    0x0008")
+
+cpp_quote("#define FCT_MERGE       0x0001")
+cpp_quote("#define FCT_CONFIGABLE  0x0002")
+cpp_quote("#define FCT_ADDTOEND    0x0004")
+
+cpp_quote("#if 0")
+    typedef LPARAM LPTBBUTTONSB;
+cpp_quote("#else")
+cpp_quote("#include <commctrl.h>")
+cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")
+cpp_quote("#endif")
+
+    HRESULT InsertMenusSB(
+        [in] HMENU hmenuShared,
+        [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
+
+    HRESULT SetMenuSB(
+        [in] HMENU hmenuShared,
+        [in] HOLEMENU holemenuReserved,
+        [in] HWND hwndActiveObject);
+
+    HRESULT RemoveMenusSB( [in] HMENU hmenuShared );
+    HRESULT SetStatusTextSB( [in, unique] LPCOLESTR pszStatusText );
+    HRESULT EnableModelessSB( [in] BOOL fEnable );
+    HRESULT TranslateAcceleratorSB( [in] MSG *pmsg, [in] WORD wID );
+
+    HRESULT BrowseObject(
+        [in] LPCITEMIDLIST pidl,
+        [in] UINT wFlags);
+
+    HRESULT GetViewStateStream(
+        [in] DWORD grfMode,
+        [out] IStream **ppStrm);
+
+    HRESULT GetControlWindow(
+        [in] UINT id,
+        [out] HWND *phwnd);
+
+    [local] HRESULT SendControlMsg(
+        [in] UINT id,
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [in] LRESULT *pret);
+
+    HRESULT QueryActiveShellView( [out] IShellView **ppshv );
+    HRESULT OnViewWindowActive( [in] IShellView *pshv );
+
+    [local]
+    HRESULT SetToolbarItems(
+        [in] LPTBBUTTONSB lpButtons,
+        [in] UINT nButtons,
+        [in] UINT uFlags);
+}
+
+
+/*****************************************************************************
+ * IShellLinkA interface
+ */
+[
+    object,
+    uuid(000214ee-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IShellLinkA : IUnknown
+{
+    typedef enum
+    {
+        SLR_NO_UI               = 0x0001,
+        SLR_ANY_MATCH           = 0x0002,
+        SLR_UPDATE              = 0x0004,
+        SLR_NOUPDATE            = 0x0008,
+        SLR_NOSEARCH            = 0x0010,
+        SLR_NOTRACK             = 0x0020,
+        SLR_NOLINKINFO          = 0x0040,
+        SLR_INVOKE_MSI          = 0x0080,
+        SLR_NO_UI_WITH_MSG_PUMP = 0x0101,
+    } SLR_FLAGS;
+
+    typedef enum
+    {
+        SLGP_SHORTPATH   = 0x0001,
+        SLGP_UNCPRIORITY = 0x0002,
+        SLGP_RAWPATH     = 0x0004,
+    } SLGP_FLAGS;
+
+    HRESULT GetPath(
+        [out, size_is(cch)] LPSTR pszFile,
+        [in] int cch,
+        [in, out, unique] WIN32_FIND_DATAA *pfd,
+        [in] DWORD fFlags);
+
+    HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );
+
+    HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
+
+    HRESULT GetDescription(
+        [out, size_is(cch)] LPSTR pszName,
+        [in] int cch);
+
+    HRESULT SetDescription( [in] LPCSTR pszName );
+
+    HRESULT GetWorkingDirectory(
+        [out, size_is(cch)] LPSTR pszDir,
+        [in] int cch);
+
+    HRESULT SetWorkingDirectory( [in] LPCSTR pszDir );
+
+    HRESULT GetArguments(
+        [out, size_is(cch)] LPSTR pszArgs,
+        [in] int cch);
+
+    HRESULT SetArguments( [in] LPCSTR pszArgs );
+
+    HRESULT GetHotkey( [out] WORD *pwHotkey );
+
+    HRESULT SetHotkey( [in] WORD wHotkey );
+
+    HRESULT GetShowCmd( [out] int *piShowCmd );
+
+    HRESULT SetShowCmd( [in] int iShowCmd );
+
+    HRESULT GetIconLocation(
+        [out, size_is(cch)] LPSTR pszIconPath,
+        [in] int cch,
+        [out] int *piIcon);
+
+    HRESULT SetIconLocation(
+        [in] LPCSTR pszIconPath,
+        [in] int iIcon);
+
+    HRESULT SetRelativePath(
+        [in] LPCSTR pszPathRel,
+        [in] DWORD dwReserved);
+
+    HRESULT Resolve(
+        [in] HWND hwnd,
+        [in] DWORD fFlags);
+
+    HRESULT SetPath( [in] LPCSTR pszFile );
+}
+
+
+/*****************************************************************************
+ * IShellLinkW interface
+ */
+[
+    object,
+    uuid(000214f9-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IShellLinkW : IUnknown
+{
+    HRESULT GetPath(
+        [out, size_is(cch)] LPWSTR pszFile,
+        [in] int cch,
+        [in, out] WIN32_FIND_DATAW *pfd,
+        [in] DWORD fFlags);
+
+    HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );
+
+    HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
+
+    HRESULT GetDescription(
+        [out, size_is(cch)] LPWSTR pszName,
+        [in] int cch);
+
+    HRESULT SetDescription( [in] LPCWSTR pszName );
+
+    HRESULT GetWorkingDirectory(
+        [out, size_is(cch)] LPWSTR pszDir,
+        [in] int cch);
+
+    HRESULT SetWorkingDirectory( [in] LPCWSTR pszDir );
+
+    HRESULT GetArguments(
+        [out, size_is(cch)] LPWSTR pszArgs,
+        [in] int cch);
+
+    HRESULT SetArguments( [in] LPCWSTR pszArgs );
+
+    HRESULT GetHotkey( [out] WORD *pwHotkey );
+
+    HRESULT SetHotkey( [in] WORD wHotkey );
+
+    HRESULT GetShowCmd( [out] int *piShowCmd );
+
+    HRESULT SetShowCmd( [in] int iShowCmd );
+
+    HRESULT GetIconLocation(
+        [out, size_is(cch)] LPWSTR pszIconPath,
+        [in] int cch,
+        [out] int *piIcon);
+
+    HRESULT SetIconLocation(
+        [in] LPCWSTR pszIconPath,
+        [in] int iIcon);
+
+    HRESULT SetRelativePath(
+        [in] LPCWSTR pszPathRel,
+        [in] DWORD dwReserved);
+
+    HRESULT Resolve(
+        [in] HWND hwnd,
+        [in] DWORD fFlags);
+
+    HRESULT SetPath( [in] LPCWSTR pszFile );
+}
+
+cpp_quote("#define IShellLink WINELIB_NAME_AW(IShellLink)")
+
+
+/*****************************************************************************
+ * IShellExtInit interface
+ */
+[
+    object,
+    uuid(000214e8-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IShellExtInit : IUnknown
+{
+    typedef IShellExtInit *LPSHELLEXTINIT;
+
+    HRESULT Initialize(
+        [in] LPCITEMIDLIST pidlFolder,
+        [in] IDataObject *pdtobj,
+        [in] HKEY hkeyProgID);
+}
+
+
+/*******************************************************************************/
+/* Note: the following interfaces are not in shobjidl.idl under Windows, they  */
+/* are declared directly in shlobj.h. It hopefully won't break anything to put */
+/* them here anyway.                                                           */
+/*******************************************************************************/
+
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
+
+
+/*****************************************************************************
+ * IPersistFolder3 interface
+ */
+[
+    object,
+    uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf),
+    pointer_default(unique)
+]
+interface IPersistFolder3 : IPersistFolder2
+{
+    typedef struct
+    {
+        LPITEMIDLIST	pidlTargetFolder;
+	WCHAR		szTargetParsingName[MAX_PATH];
+	WCHAR		szNetworkProvider[MAX_PATH];
+	DWORD		dwAttributes;
+	int		csidl;
+    } PERSIST_FOLDER_TARGET_INFO;
+
+    HRESULT InitializeEx(
+        [in] IBindCtx *pbc,
+        [in] LPCITEMIDLIST pidlRoot,
+        [in] const PERSIST_FOLDER_TARGET_INFO *ppfti);
+
+    HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti );
+}
+
+
+/*****************************************************************************
+ * IExtractIconA interface
+ */
+[
+    object,
+    uuid(000214eb-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IExtractIconA : IUnknown
+{
+cpp_quote("#define GIL_OPENICON     0x0001")
+cpp_quote("#define GIL_FORSHELL     0x0002")
+cpp_quote("#define GIL_ASYNC        0x0020")
+cpp_quote("#define GIL_DEFAULTICON  0x0040")
+cpp_quote("#define GIL_FORSHORTCUT  0x0080")
+
+cpp_quote("#define GIL_SIMULATEDOC  0x0001")
+cpp_quote("#define GIL_PERINSTANCE  0x0002")
+cpp_quote("#define GIL_PERCLASS     0x0004")
+cpp_quote("#define GIL_NOTFILENAME  0x0008")
+cpp_quote("#define GIL_DONTCACHE    0x0010")
+
+    typedef IExtractIconA *LPEXTRACTICONA;
+
+    HRESULT GetIconLocation(
+        [in] UINT uFlags,
+        [out, size_is(cchMax)] LPSTR szIconFile,
+        [in] UINT cchMax,
+        [out] INT *piIndex,
+        [out] UINT *pwFlags);
+
+    HRESULT Extract(
+        [in] LPCSTR pszFile,
+        [in] UINT nIconIndex,
+        [out] HICON *phiconLarge,
+        [out] HICON *phiconSmall,
+        [in] UINT nIconSize );
+}
+
+
+/*****************************************************************************
+ * IExtractIconW interface
+ */
+[
+    object,
+    uuid(000214fa-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IExtractIconW : IUnknown
+{
+    typedef IExtractIconW *LPEXTRACTICONW;
+
+    HRESULT GetIconLocation(
+        [in] UINT uFlags,
+        [out, size_is(cchMax)] LPWSTR szIconFile,
+        [in] UINT cchMax,
+        [out] INT *piIndex,
+        [out] UINT *pwFlags);
+
+    HRESULT Extract(
+        [in] LPCWSTR pszFile,
+        [in] UINT nIconIndex,
+        [out] HICON *phiconLarge,
+        [out] HICON *phiconSmall,
+        [in] UINT nIconSize );
+}
+
+cpp_quote("#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)")
+cpp_quote("#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)")
+
+
+/*****************************************************************************
+ * ICommDlgBrowser interface
+ */
+[
+    object,
+    uuid(000214f1-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface ICommDlgBrowser : IUnknown
+{
+cpp_quote("#define CDBOSC_SETFOCUS     0x00000000")
+cpp_quote("#define CDBOSC_KILLFOCUS    0x00000001")
+cpp_quote("#define CDBOSC_SELCHANGE    0x00000002")
+cpp_quote("#define CDBOSC_RENAME       0x00000003")
+cpp_quote("#define CDBOSC_STATECHANGE  0x00000004")
+
+    typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+    HRESULT OnDefaultCommand( [in] IShellView *shv );
+    HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange );
+    HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl );
+}
+
+
+/*****************************************************************************
+ * ICommDlgBrowser2 interface
+ */
+[
+ object,
+ uuid(10339516-2894-11D2-9039-00C04F8EEB3E),
+ pointer_default(unique)
+]
+interface ICommDlgBrowser2 : ICommDlgBrowser
+{
+
+    HRESULT Notify(
+        [in] IShellView *ppshv,
+        [in] DWORD dwNotifyType);
+
+    HRESULT GetDefaultMenuText(
+        [in] IShellView *ppshv,
+        [out, string, size_is(cchMax)] LPWSTR pszText,
+        [in] int cchMax);
+
+    HRESULT GetViewFlags(
+        [out] DWORD *pdwFlags);
+}
+
+
+/*****************************************************************************
+ * ICommDlgBrowser3 interface
+ */
+[
+ object,
+ uuid(C8AD25A1-3294-41EE-8165-71174BD01C57),
+ pointer_default(unique)
+]
+interface ICommDlgBrowser3 : ICommDlgBrowser2
+{
+
+    HRESULT OnColumnClicked(
+        [in] IShellView *ppshv,
+        [in] int iColumn);
+
+    HRESULT GetCurrentFilter(
+        [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec,
+        [in] int cchFileSpec);
+
+    HRESULT OnPreviewCreated(
+        [in] IShellView *ppshv);
+}
+
+/*****************************************************************************
+ * IDockingWindow interface
+ */
+[
+    object,
+    uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8)
+]
+interface IDockingWindow : IOleWindow
+{
+    HRESULT ShowDW(
+        [in] BOOL fShow);
+
+    HRESULT CloseDW(
+        [in] DWORD dwReserved);
+
+    HRESULT ResizeBorderDW(
+        [in] LPCRECT prcBorder,
+        [in] IUnknown *punkToolbarSite,
+        [in] BOOL fReserved);
+};
+
+
+/*****************************************************************************
+ * IDockingWindowFrame interface
+ */
+[
+    object,
+    uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8),
+    pointer_default(unique),
+    local
+]
+interface IDockingWindowFrame : IOleWindow
+{
+cpp_quote("#define DWFRF_NORMAL           0x0000")
+cpp_quote("#define DWFRF_DELETECONFIGDATA 0x0001")
+cpp_quote("#define DWFAF_HIDDEN           0x0001")
+
+    HRESULT AddToolbar(
+        [in] IUnknown *punkSrc,
+        [in] LPCWSTR pwszItem,
+        [in] DWORD dwAddFlags);
+
+    HRESULT RemoveToolbar(
+        [in] IUnknown *punkSrc,
+        [in] DWORD dwRemoveFlags);
+
+    HRESULT FindToolbar(
+        [in] LPCWSTR pwszItem,
+        [in] REFIID riid,
+        [out] LPVOID *ppvObj);
+}
+
+
+/*****************************************************************************
+ * IDragSourceHelper interface
+ */
+[
+    object,
+    uuid(de5bf786-477a-11d2-839d-00c04fd918d0),
+    pointer_default(unique),
+    local
+]
+interface IDragSourceHelper : IUnknown
+{
+    typedef struct
+    {
+        SIZE     sizeDragImage;
+        POINT    ptOffset;
+        HBITMAP  hbmpDragImage;
+        COLORREF crColorKey;
+    } SHDRAGIMAGE, *LPSHDRAGIMAGE;
+
+  HRESULT InitializeFromBitmap(
+      [in] LPSHDRAGIMAGE pshdi,
+      [in] IDataObject *pDataObject);
+
+  HRESULT InitializeFromWindow(
+      [in] HWND hwnd,
+      [in] POINT *ppt,
+      [in] IDataObject *pDataObject);
+}
+
+
+/*****************************************************************************
+ * IDropTargetHelper interface
+ */
+[
+    object,
+    uuid(4657278b-411b-11d2-839a-00c04fd918d0),
+    pointer_default(unique),
+    local
+]
+interface IDropTargetHelper : IUnknown
+{
+    HRESULT DragEnter(
+        [in] HWND hwndTarget,
+        [in] IDataObject *pDataObject,
+        [in] POINT *ppt,
+        [in] DWORD dwEffect);
+
+    HRESULT DragLeave();
+
+    HRESULT DragOver(
+        [in] POINT *ppt,
+        [in] DWORD dwEffect);
+
+    HRESULT Drop(
+        [in] IDataObject *pDataObject,
+        [in] POINT *ppt,
+        [in] DWORD dwEffect);
+
+    HRESULT Show( [in] BOOL fShow );
+}
+
+
+/*****************************************************************************
+ * IContextMenu interface
+ */
+[
+    object,
+    uuid(000214e4-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IContextMenu : IUnknown
+{
+cpp_quote("#define CMF_NORMAL        0x00000000")
+cpp_quote("#define CMF_DEFAULTONLY   0x00000001")
+cpp_quote("#define CMF_VERBSONLY     0x00000002")
+cpp_quote("#define CMF_EXPLORE       0x00000004")
+cpp_quote("#define CMF_NOVERBS       0x00000008")
+cpp_quote("#define CMF_CANRENAME     0x00000010")
+cpp_quote("#define CMF_NODEFAULT     0x00000020")
+cpp_quote("#define CMF_INCLUDESTATIC 0x00000040")
+cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100")
+cpp_quote("#define CMF_RESERVED      0xffff0000")
+
+cpp_quote("#define GCS_VERBA         0x00000000")
+cpp_quote("#define GCS_HELPTEXTA     0x00000001")
+cpp_quote("#define GCS_VALIDATEA     0x00000002")
+cpp_quote("#define GCS_VERBW         0x00000004")
+cpp_quote("#define GCS_HELPTEXTW     0x00000005")
+cpp_quote("#define GCS_VALIDATEW     0x00000006")
+cpp_quote("#define GCS_UNICODE       0x00000004")
+cpp_quote("#define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)")
+cpp_quote("#define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)")
+cpp_quote("#define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)")
+
+cpp_quote("#define CMDSTR_NEWFOLDERA   \"NewFolder\"")
+cpp_quote("#define CMDSTR_VIEWLISTA    \"ViewList\"")
+cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"")
+cpp_quote("#if defined(__GNUC__)")
+cpp_quote("# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }")
+cpp_quote("# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }")
+cpp_quote("# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }")
+cpp_quote("#elif defined(_MSC_VER)")
+cpp_quote("# define CMDSTR_NEWFOLDERW   L\"NewFolder\"")
+cpp_quote("# define CMDSTR_VIEWLISTW    L\"ViewList\"")
+cpp_quote("# define CMDSTR_VIEWDETAILSW L\"ViewDetails\"")
+cpp_quote("#else")
+cpp_quote("static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};")
+cpp_quote("static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};")
+cpp_quote("static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};")
+cpp_quote("#endif")
+cpp_quote("#define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)")
+cpp_quote("#define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)")
+cpp_quote("#define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)")
+
+cpp_quote("#define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY")
+cpp_quote("#define CMIC_MASK_ICON           SEE_MASK_ICON")
+cpp_quote("#define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI")
+cpp_quote("#define CMIC_MASK_UNICODE        SEE_MASK_UNICODE")
+cpp_quote("#define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE")
+cpp_quote("#define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME")
+cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM")
+cpp_quote("#define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE")
+cpp_quote("#define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK")
+cpp_quote("#define CMIC_MASK_NOASYNC        SEE_MASK_NOASYNC")
+cpp_quote("#define CMIC_MASK_SHIFT_DOWN     0x10000000")
+cpp_quote("#define CMIC_MASK_PTINVOKE       0x20000000")
+cpp_quote("#define CMIC_MASK_CONTROL_DOWN   0x40000000")
+cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE")
+cpp_quote("#define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS")
+
+    typedef IContextMenu *LPCONTEXTMENU;
+
+    typedef struct tagCMINVOKECOMMANDINFO
+    {
+        DWORD cbSize;
+        DWORD fMask;
+        HWND hwnd;
+        LPCSTR lpVerb;
+        LPCSTR lpParameters;
+        LPCSTR lpDirectory;
+        INT nShow;
+        DWORD dwHotKey;
+        HANDLE hIcon;
+    } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
+
+    typedef struct tagCMInvokeCommandInfoEx
+    {
+        DWORD cbSize;
+        DWORD fMask;
+        HWND hwnd;
+        LPCSTR lpVerb;
+        LPCSTR lpParameters;
+        LPCSTR lpDirectory;
+        INT nShow;
+        DWORD dwHotKey;
+        HANDLE hIcon;
+        LPCSTR lpTitle;
+        LPCWSTR lpVerbW;
+        LPCWSTR lpParametersW;
+        LPCWSTR lpDirectoryW;
+        LPCWSTR lpTitleW;
+        POINT ptInvoke;
+    } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
+
+    HRESULT QueryContextMenu(
+        [in] HMENU hmenu,
+        [in] UINT indexMenu,
+        [in] UINT idCmdFirst,
+        [in] UINT idCmdLast,
+        [in] UINT uFlags);
+
+    HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici );
+
+    HRESULT GetCommandString(
+        [in] UINT_PTR idCmd,
+        [in] UINT uType,
+        [out] UINT *pwReserved,
+        [out, size_is(cchMax)] LPSTR pszName,
+        [in] UINT cchMax);
+}
+
+
+/*****************************************************************************
+ * IContextMenu2 interface
+ */
+[
+    object,
+    uuid(000214f4-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IContextMenu2 : IContextMenu
+{
+    typedef IContextMenu2 *LPCONTEXTMENU2;
+
+    HRESULT HandleMenuMsg(
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam);
+}
+
+
+/*****************************************************************************
+ * IContextMenu3 interface
+ */
+[
+    object,
+    uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719),
+    pointer_default(unique),
+    local
+]
+interface IContextMenu3 : IContextMenu2
+{
+    typedef IContextMenu3 *LPCONTEXTMENU3;
+
+    HRESULT HandleMenuMsg2(
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] LRESULT *plResult);
+}
+
+
+[
+    object,
+    uuid(3409e930-5a39-11d1-83fa-00a0c90dc849),
+    pointer_default(unique),
+    local
+]
+interface IContextMenuCB : IUnknown
+{
+    HRESULT CallBack(
+        [in] IShellFolder *psf,
+        [in] HWND hwndOwner,
+        [in] IDataObject *pdtobj,
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam);
+}
+
+/*****************************************************************************
+ * IShellExecuteHookA interface
+ */
+[
+    object,
+    uuid(000214f5-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IShellExecuteHookA : IUnknown
+{
+    cpp_quote("struct _SHELLEXECUTEINFOA;")
+    HRESULT Execute(
+        [in, out] struct _SHELLEXECUTEINFOA* pei);
+}
+
+
+/*****************************************************************************
+ * IShellExecuteHookW interface
+ */
+[
+    object,
+    uuid(000214fb-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface IShellExecuteHookW : IUnknown
+{
+    cpp_quote("struct _SHELLEXECUTEINFOW;")
+    HRESULT Execute(
+		[in, out] struct _SHELLEXECUTEINFOW* pei);
+}
+
+/*****************************************************************************
+ * IShellLinkDataList interface
+ */
+[
+    object,
+    uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1),
+    pointer_default(unique)
+]
+interface IShellLinkDataList : IUnknown
+{
+    [local] HRESULT AddDataBlock(
+                [in] void *pDataBlock);
+    [local] HRESULT CopyDataBlock(
+                [in] DWORD dwSig,
+                [out] void **ppDataBlock);
+    HRESULT RemoveDataBlock(
+                [in] DWORD dwSig);
+    HRESULT GetFlags(
+                [out] DWORD *pdwFlags);
+    HRESULT SetFlags(
+                [in] DWORD dwFlags);
+}
+
+
+/*****************************************************************************
+ * IResolveShellLink interface
+ */
+[
+    object,
+    uuid(5cd52983-9449-11d2-963a-00c04f79adf0),
+    pointer_default(unique)
+]
+interface IResolveShellLink : IUnknown
+{
+    HRESULT ResolveShellLink(
+                [in] IUnknown *punk,
+                [in] HWND hwnd,
+                [in] DWORD fFlags);
+}
+
+
+/*****************************************************************************
+ * IURLSearchHook interface
+ */
+[
+    object,
+    uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497),
+    pointer_default(unique),
+    local
+]
+interface IURLSearchHook : IUnknown
+{
+    HRESULT Translate(
+                [in, out] LPWSTR lpwszSearchURL,
+                [in] DWORD cchBufferSize);
+}
+
+
+/*****************************************************************************
+ * ISearchContext interface
+ */
+[
+    object,
+    uuid(09f656a2-41af-480c-88f7-16cc0d164615),
+    pointer_default(unique),
+    local
+]
+interface ISearchContext : IUnknown
+{
+    HRESULT GetSearchUrl(
+                [in] BSTR *pbstrSearchUrl);
+    HRESULT GetSearchText(
+                [in] BSTR *pbstrSearchText);
+    HRESULT GetSearchStyle(
+                [in] BSTR *pdwSearchStyle);
+}
+
+
+/*****************************************************************************
+ * IURLSearchHook2 interface
+ */
+[
+    object,
+    uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0),
+    pointer_default(unique),
+    local
+]
+interface IURLSearchHook2 : IURLSearchHook
+{
+    HRESULT TranslateWithSearchContext(
+                [in, out] LPWSTR lpwszSearchURL,
+                [in] DWORD cchBufferSize,
+                [in] ISearchContext *pSearchContext);
+}
+
+
+cpp_quote("#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)")
+
+/*****************************************************************************
+ * INewShortcutHookA interface
+ */
+[
+    object,
+    uuid(000214e1-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface INewShortcutHookA : IUnknown
+{
+    HRESULT SetReferent(
+                [in] LPCSTR pcszReferent,
+                [in] HWND hwnd);
+    HRESULT GetReferent(
+                [out] LPSTR pcszReferent,
+                [in] int cchReferent);
+    HRESULT SetFolder(
+                [in] LPCSTR pcszReferent);
+    HRESULT GetFolder(
+                [out] LPSTR pcszReferent,
+                [in] int cchFolder);
+    HRESULT GetName(
+                [out] LPSTR pszName,
+                [in] int cchName);
+    HRESULT GetExtension(
+                [out] LPSTR pszExtension,
+                [in] int cchExtension);
+} 
+
+
+/*****************************************************************************
+ * INewShortcutHookW interface
+ */
+[
+    object,
+    uuid(000214f7-0000-0000-c000-000000000046),
+    pointer_default(unique),
+    local
+]
+interface INewShortcutHookW : IUnknown
+{
+    HRESULT SetReferent(
+                [in] LPCWSTR pcszReferent,
+                [in] HWND hwnd);
+    HRESULT GetReferent(
+                [out] LPWSTR pcszReferent,
+                [in] int cchReferent);
+    HRESULT SetFolder(
+                [in] LPCWSTR pcszReferent);
+    HRESULT GetFolder(
+                [out] LPWSTR pcszReferent,
+                [in] int cchFolder);
+    HRESULT GetName(
+                [out] LPWSTR pszName,
+                [in] int cchName);
+    HRESULT GetExtension(
+                [out] LPWSTR pszExtension,
+                [in] int cchExtension);
+} 
+
+/*****************************************************************************
+ * IRunnableTask interface
+ */
+[
+    object,
+    uuid(85788d00-6807-11d0-b810-00c04fd706ec),
+    pointer_default(unique),
+    local
+]
+interface IRunnableTask : IUnknown
+{
+    HRESULT Run();
+    HRESULT Kill([in] BOOL fWait);
+    HRESULT Suspend();
+    HRESULT Resume();
+    ULONG IsRunning();
+}
+
+/*****************************************************************************
+ * IShellChangeNotify interface
+ */
+[
+    object,
+    uuid(d82be2b1-5764-11d0-a96e-00c04fd705a2),
+    pointer_default(unique),
+    local
+]
+interface IShellChangeNotify : IUnknown
+{
+    HRESULT OnChange(
+                [in] LONG lEvent,
+                [in] LPCITEMIDLIST pidl1,
+                [in] LPCITEMIDLIST pidl2);
+}
+
+/*****************************************************************************
+ * IFileSystemBindData interface
+ */
+[
+    object,
+    uuid(01e18d10-4d8b-11d2-855d-006008059367),
+    pointer_default(unique),
+    local
+]
+interface IFileSystemBindData : IUnknown
+{
+    HRESULT SetFindData(
+                [in] const WIN32_FIND_DATAW *pfd);
+    HRESULT GetFindData(
+                [out] WIN32_FIND_DATAW *pfd);
+}
+
+/*****************************************************************************
+ *    ITaskbarList interface
+ */
+[
+    object,
+    uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
+    pointer_default(unique)
+]
+interface ITaskbarList : IUnknown
+{
+    HRESULT HrInit();
+
+    HRESULT AddTab(
+        [in] HWND hwnd);
+
+    HRESULT DeleteTab(
+        [in] HWND hwnd);
+
+    HRESULT ActivateTab(
+        [in] HWND hwnd);
+
+    HRESULT SetActiveAlt(
+        [in] HWND hwnd);
+}
+
+/*****************************************************************************
+ *    ITaskbarList2 interface
+ */
+[
+    object,
+    uuid(602D4995-B13A-429B-A66E-1935E44F4317),
+    pointer_default(unique)
+]
+interface ITaskbarList2 : ITaskbarList
+{
+    HRESULT MarkFullscreenWindow(
+        [in] HWND hwnd,
+        [in] BOOL fullscreen);
+}
+
+cpp_quote("#ifdef MIDL_PASS")
+typedef IUnknown* HIMAGELIST;
+cpp_quote("#endif")
+
+typedef [v1_enum] enum THUMBBUTTONFLAGS {
+    THBF_ENABLED         = 0x0000,
+    THBF_DISABLED        = 0x0001,
+    THBF_DISMISSONCLICK  = 0x0002,
+    THBF_NOBACKGROUND    = 0x0004,
+    THBF_HIDDEN          = 0x0008,
+    THBF_NONINTERACTIVE  = 0x0010
+} THUMBBUTTONFLAGS;
+
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)")
+
+typedef [v1_enum] enum THUMBBUTTONMASK {
+    THB_BITMAP   = 0x0001,
+    THB_ICON     = 0x0002,
+    THB_TOOLTIP  = 0x0004,
+    THB_FLAGS    = 0x0008
+} THUMBBUTTONMASK;
+
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)")
+
+cpp_quote("#include <pshpack8.h>")
+typedef struct THUMBBUTTON {
+    THUMBBUTTONMASK dwMask;
+    UINT iId;
+    UINT iBitmap;
+    HICON hIcon;
+    WCHAR szTip[260];
+    THUMBBUTTONFLAGS dwFlags;
+} THUMBBUTTON, *LPTHUMBBUTTON;
+cpp_quote("#include <poppack.h>")
+
+[
+    uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf),
+    object
+]
+interface ITaskbarList3 : ITaskbarList2
+{
+    typedef [v1_enum] enum TBPFLAG {
+        TBPF_NOPROGRESS     = 0x0000,
+        TBPF_INDETERMINATE  = 0x0001,
+        TBPF_NORMAL         = 0x0002,
+        TBPF_ERROR          = 0x0004,
+        TBPF_PAUSED         = 0x0008
+    } TBPFLAG;
+
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)")
+
+    HRESULT SetProgressValue(
+            [in] HWND hwnd,
+            [in] ULONGLONG ullCompleted,
+            [in] ULONGLONG ullTotal);
+
+    HRESULT SetProgressState(
+            [in] HWND hwnd,
+            [in] TBPFLAG tbpFlags);
+
+    HRESULT RegisterTab(
+            [in] HWND hwndTab,
+            [in] HWND hwndMDI);
+
+    HRESULT UnregisterTab([in] HWND hwndTab);
+
+    HRESULT SetTabOrder(
+            [in] HWND hwndTab,
+            [in] HWND hwndInsertBefore);
+
+    HRESULT SetTabActive(
+            [in] HWND hwndTab,
+            [in] HWND hwndMDI,
+            [in] DWORD dwReserved);
+
+    HRESULT ThumbBarAddButtons(
+            [in] HWND hwnd,
+            [in] UINT cButtons,
+            [in, size_is(cButtons)] LPTHUMBBUTTON pButton);
+
+    HRESULT ThumbBarUpdateButtons(
+            [in] HWND hwnd,
+            [in] UINT cButtons,
+            [in, size_is(cButtons)] LPTHUMBBUTTON pButton);
+
+    HRESULT ThumbBarSetImageList(
+            [in] HWND hwnd,
+            [in] HIMAGELIST himl);
+
+    HRESULT SetOverlayIcon(
+            [in] HWND hwnd,
+            [in] HICON hIcon,
+            [in, unique, string] LPCWSTR pszDescription);
+
+    HRESULT SetThumbnailTooltip(
+            [in] HWND hwnd,
+            [in, unique, string] LPCWSTR pszTip);
+
+    HRESULT SetThumbnailClip(
+            [in] HWND hwnd,
+            [in] RECT *prcClip);
+}
+
+[
+    uuid(c43dc798-95d1-4bea-9030-bb99e2983a1a),
+    object
+]
+interface ITaskbarList4 : ITaskbarList3
+{
+    typedef [v1_enum] enum STPFLAG {
+        STPF_NONE                       = 0x0000,
+        STPF_USEAPPTHUMBNAILALWAYS      = 0x0001,
+        STPF_USEAPPTHUMBNAILWHENACTIVE  = 0x0002,
+        STPF_USEAPPPEEKALWAYS           = 0x0004,
+        STPF_USEAPPPEEKWHENACTIVE       = 0x0008
+    } STPFLAG;
+
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(STPFLAG)")
+
+    HRESULT SetTabProperties(
+            [in] HWND hwndTab,
+            [in] STPFLAG stpFlags);
+}
+
+/*****************************************************************************
+ *    IAutoCompleteDropDown interface
+ */
+[
+    object,
+    uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),
+    pointer_default(unique)
+]
+interface IAutoCompleteDropDown : IUnknown
+{
+cpp_quote("#define ACDD_VISIBLE   0x0001")
+
+    HRESULT GetDropDownStatus(
+        [out] DWORD *pdwFlags,
+        [out, string] LPWSTR *ppwszString);
+
+    HRESULT ResetEnumerator();
+}
+
+[
+    object,
+    uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0),
+    pointer_default(unique)
+]
+interface IProfferService : IUnknown
+{
+    HRESULT ProfferService(
+        [in] REFGUID service,
+        [in] IServiceProvider *pService,
+        [out] DWORD *pCookie);
+
+    HRESULT RevokeService([in] DWORD cookie);
+}
+
+/*****************************************************************************
+ * IExplorerBrowserEvents interface
+ */
+[
+ object,
+ uuid(361BBDC7-E6EE-4E13-BE58-58E2240C810F)
+]
+interface IExplorerBrowserEvents : IUnknown
+{
+    HRESULT OnNavigationPending(
+        [in] PCIDLIST_ABSOLUTE pidlFolder);
+
+    HRESULT OnViewCreated(
+        [in] IShellView *psv);
+
+    HRESULT OnNavigationComplete(
+        [in] PCIDLIST_ABSOLUTE pidlFolder);
+
+    HRESULT OnNavigationFailed(
+        [in] PCIDLIST_ABSOLUTE pidlFolder);
+}
+
+typedef GUID EXPLORERPANE;
+typedef EXPLORERPANE *REFEXPLORERPANE;
+
+cpp_quote("#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility")
+
+/*****************************************************************************
+ * IExplorerPaneVisibility interface
+ */
+[
+ object,
+ uuid(E07010EC-BC17-44C0-97B0-46C7C95B9EDC)
+]
+interface IExplorerPaneVisibility : IUnknown
+{
+    typedef enum tagEXPLORERPANESTATE {
+        EPS_DONTCARE     = 0x0,
+        EPS_DEFAULT_ON   = 0x1,
+        EPS_DEFAULT_OFF  = 0x2,
+        EPS_STATE_MASK   = 0xffff,
+        EPS_INITIALSTATE = 0x10000,
+        EPS_FORCE        = 0x20000
+    } EXPLORERPANESTATE;
+
+    HRESULT GetPaneState(
+        [in] REFEXPLORERPANE ep,
+        [out] EXPLORERPANESTATE *peps);
+}
+
+typedef [v1_enum] enum tagEXPLORER_BROWSER_FILL_FLAGS {
+    EBF_NONE                     = 0,
+    EBF_SELECTFROMDATAOBJECT     = 0x100,
+    EBF_NODROPTARGET             = 0x200
+} EXPLORER_BROWSER_FILL_FLAGS;
+
+typedef [v1_enum] enum tagEXPLORER_BROWSER_OPTIONS {
+    EBO_NONE               = 0x00,
+    EBO_NAVIGATEONCE       = 0x01,
+    EBO_SHOWFRAMES         = 0x02,
+    EBO_ALWAYSNAVIGATE     = 0x04,
+    EBO_NOTRAVELLOG        = 0x08,
+    EBO_NOWRAPPERWINDOW    = 0x10,
+    EBO_HTMLSHAREPOINTVIEW = 0x20
+} EXPLORER_BROWSER_OPTIONS;
+
+cpp_quote("#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser")
+
+/*****************************************************************************
+ * IExplorerBrowser interface
+ */
+[
+ object,
+ uuid(DFD3B6B5-C10C-4BE9-85F6-A66969F402F6),
+ pointer_default(unique)
+]
+interface IExplorerBrowser : IUnknown
+{
+
+    [local] HRESULT Initialize(
+        [in] HWND hwndParent,
+        [in] const RECT *prc,
+        [in, unique] const FOLDERSETTINGS *pfs);
+
+    HRESULT Destroy();
+
+    [local] HRESULT SetRect(
+        [in,out,unique] HDWP *phdwp,
+        [in] RECT rcBrowser);
+
+    HRESULT SetPropertyBag(
+        [in, string] LPCWSTR pszPropertyBag);
+
+    HRESULT SetEmptyText(
+        [in, string] LPCWSTR pszEmptyText);
+
+    HRESULT SetFolderSettings(
+        [in] const FOLDERSETTINGS *pfs);
+
+    HRESULT Advise(
+        [in] IExplorerBrowserEvents *psbe,
+        [out] DWORD *pdwCookie);
+
+    HRESULT Unadvise(
+        [in] DWORD dwCookie);
+
+    HRESULT SetOptions(
+        [in] EXPLORER_BROWSER_OPTIONS dwFlag);
+
+    HRESULT GetOptions(
+        [out] EXPLORER_BROWSER_OPTIONS *pdwFlag);
+
+    HRESULT BrowseToIDList(
+        [in] PCUIDLIST_RELATIVE pidl,
+        [in] UINT uFlags);
+
+    HRESULT BrowseToObject(
+        [in] IUnknown *punk,
+        [in] UINT uFlags);
+
+    HRESULT FillFromObject(
+        [in] IUnknown *punk,
+        [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags);
+
+    HRESULT RemoveAll();
+
+    HRESULT GetCurrentView(
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControl interface
+ */
+[
+ object,
+ uuid(028212A3-B627-47E9-8856-C14265554E4F)
+]
+interface INameSpaceTreeControl : IUnknown
+{
+    [v1_enum] enum _NSTCSTYLE {
+        NSTCS_HASEXPANDOS                 = 0x00000001,
+        NSTCS_HASLINES                    = 0x00000002,
+        NSTCS_SINGLECLICKEXPAND           = 0x00000004,
+        NSTCS_FULLROWSELECT               = 0x00000008,
+        NSTCS_SPRINGEXPAND                = 0x00000010,
+        NSTCS_HORIZONTALSCROLL            = 0x00000020,
+        NSTCS_ROOTHASEXPANDO              = 0x00000040,
+        NSTCS_SHOWSELECTIONALWAYS         = 0x00000080,
+        NSTCS_NOINFOTIP                   = 0x00000200,
+        NSTCS_EVENHEIGHT                  = 0x00000400,
+        NSTCS_NOREPLACEOPEN               = 0x00000800,
+        NSTCS_DISABLEDRAGDROP             = 0x00001000,
+        NSTCS_NOORDERSTREAM               = 0x00002000,
+        NSTCS_RICHTOOLTIP                 = 0x00004000,
+        NSTCS_BORDER                      = 0x00008000,
+        NSTCS_NOEDITLABELS                = 0x00010000,
+        NSTCS_TABSTOP                     = 0x00020000,
+        NSTCS_FAVORITESMODE               = 0x00080000,
+        NSTCS_AUTOHSCROLL                 = 0x00100000,
+        NSTCS_FADEINOUTEXPANDOS           = 0x00200000,
+        NSTCS_EMPTYTEXT                   = 0x00400000,
+        NSTCS_CHECKBOXES                  = 0x00800000,
+        NSTCS_PARTIALCHECKBOXES           = 0x01000000,
+        NSTCS_EXCLUSIONCHECKBOXES         = 0x02000000,
+        NSTCS_DIMMEDCHECKBOXES            = 0x04000000,
+        NSTCS_NOINDENTCHECKS              = 0x08000000,
+        NSTCS_ALLOWJUNCTIONS              = 0x10000000,
+        NSTCS_SHOWTABSBUTTON              = 0x20000000,
+        NSTCS_SHOWDELETEBUTTON            = 0x40000000,
+        NSTCS_SHOWREFRESHBUTTON      = (int)0x80000000
+    };
+    typedef DWORD NSTCSTYLE;
+
+    [v1_enum] enum _NSTCROOTSTYLE {
+        NSTCRS_VISIBLE                    = 0x0000,
+        NSTCRS_HIDDEN                     = 0x0001,
+        NSTCRS_EXPANDED                   = 0x0002
+    };
+    typedef DWORD NSTCROOTSTYLE;
+
+    [v1_enum] enum _NSTCITEMSTATE {
+        NSTCIS_NONE                       = 0x0000,
+        NSTCIS_SELECTED                   = 0x0001,
+        NSTCIS_EXPANDED                   = 0x0002,
+        NSTCIS_BOLD                       = 0x0004,
+        NSTCIS_DISABLED                   = 0x0008,
+        NSTCIS_SELECTEDNOEXPAND           = 0x0010
+    };
+    typedef DWORD NSTCITEMSTATE;
+
+    typedef [v1_enum] enum NSTCGNI {
+        NSTCGNI_NEXT                      = 0,
+        NSTCGNI_NEXTVISIBLE               = 1,
+        NSTCGNI_PREV                      = 2,
+        NSTCGNI_PREVVISIBLE               = 3,
+        NSTCGNI_PARENT                    = 4,
+        NSTCGNI_CHILD                     = 5,
+        NSTCGNI_FIRSTVISIBLE              = 6,
+        NSTCGNI_LASTVISIBLE               = 7
+    } NSTCGNI;
+
+    HRESULT Initialize(
+        [in] HWND hwndParent,
+        [in, unique] RECT *prc,
+        [in] NSTCSTYLE nstcsFlags);
+
+    HRESULT TreeAdvise(
+        [in] IUnknown *punk,
+        [out] DWORD *pdwCookie);
+
+    HRESULT TreeUnadvise(
+        [in] DWORD dwCookie);
+
+    HRESULT AppendRoot(
+        [in] IShellItem *psiRoot,
+        [in] SHCONTF grfEnumFlags,
+        [in] NSTCROOTSTYLE grfRootStyle,
+        [in, unique] IShellItemFilter *pif);
+
+    HRESULT InsertRoot(
+        [in] int iIndex,
+        [in] IShellItem *psiRoot,
+        [in] SHCONTF grfEnumFlags,
+        [in] NSTCROOTSTYLE grfRootStyle,
+        [in, unique] IShellItemFilter *pif);
+
+    HRESULT RemoveRoot(
+        [in] IShellItem *psiRoot);
+
+    HRESULT RemoveAllRoots();
+
+    HRESULT GetRootItems(
+        [out] IShellItemArray **ppsiaRootItems);
+
+    HRESULT SetItemState(
+        [in] IShellItem *psi,
+        [in] NSTCITEMSTATE nstcisMask,
+        [in] NSTCITEMSTATE nstcisFlags);
+
+    HRESULT GetItemState(
+        [in] IShellItem *psi,
+        [in] NSTCITEMSTATE nstcismask,
+        [out] NSTCITEMSTATE *pnstcisFlags);
+
+    HRESULT GetSelectedItems(
+        [out] IShellItemArray **psiaItems);
+
+    HRESULT GetItemCustomState(
+        [in] IShellItem *psi,
+        [out] int *piStateNumber);
+
+    HRESULT SetItemCustomState(
+        [in] IShellItem *psi,
+        [in] int iStateNumber);
+
+    HRESULT EnsureItemVisible(
+        [in] IShellItem *psi);
+
+    HRESULT SetTheme(
+        [in, string] LPCWSTR pszTheme);
+
+    HRESULT GetNextItem(
+        [in, unique] IShellItem *psi,
+        [in] NSTCGNI nstcgi,
+        [out] IShellItem **ppsiNext);
+
+    HRESULT HitTest(
+        [in] POINT *ppt,
+        [out] IShellItem **ppsiOut);
+
+    HRESULT GetItemRect(
+        [in] IShellItem *psi,
+        [out] RECT *prect);
+
+    HRESULT CollapseAll();
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControl2 interface
+ */
+[
+ object,
+ uuid(7CC7AED8-290E-49BC-8945-C1401CC9306C)
+]
+interface INameSpaceTreeControl2 : INameSpaceTreeControl
+{
+    typedef [v1_enum] enum NSTCSTYLE2 {
+        NSTCS2_DEFAULT                     = 0x00,
+        NSTCS2_INTERRUPTNOTIFICATIONS      = 0x01,
+        NSTCS2_SHOWNULLSPACEMENU           = 0x02,
+        NSTCS2_DISPLAYPADDING              = 0x04,
+        NSTCS2_DISPLAYPINNEDONLY           = 0x08,
+        NTSCS2_NOSINGLETONAUTOEXPAND       = 0x10,  /* The apparent typo here is   */
+        NTSCS2_NEVERINSERTNONENUMERATED    = 0x20   /* present also in the Win SDK */
+    } NSTCSTYLE2;
+    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)")
+
+    HRESULT SetControlStyle(
+        [in] NSTCSTYLE nstcsMask,
+        [in] NSTCSTYLE nstcsStyle);
+
+    HRESULT GetControlStyle(
+        [in] NSTCSTYLE nstcsMask,
+        [out] NSTCSTYLE *pnstcsStyle);
+
+    HRESULT SetControlStyle2(
+        [in] NSTCSTYLE2 nstcsMask,
+        [in] NSTCSTYLE2 nstcsStyle);
+
+    HRESULT GetControlStyle2(
+        [in] NSTCSTYLE2 nstcsMask,
+        [out] NSTCSTYLE2 *pnstcsStyle);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControlEvents interface
+ */
+
+[
+ object,
+ uuid(93D77985-B3D8-4484-8318-672CDDA002CE),
+ local
+]
+interface INameSpaceTreeControlEvents : IUnknown
+{
+    [v1_enum] enum _NSTCEHITTEST {
+        NSTCEHT_NOWHERE                    = 0x0001,
+        NSTCEHT_ONITEMICON                 = 0x0002,
+        NSTCEHT_ONITEMLABEL                = 0x0004,
+        NSTCEHT_ONITEMIDENT                = 0x0008,
+        NSTCEHT_ONITEMBUTTON               = 0x0010,
+        NSTCEHT_ONITEMRIGHT                = 0x0020,
+        NSTCEHT_ONITEMSTATEICON            = 0x0040,
+        NSTCEHT_ONITEM                     = 0x0046,
+        NSTCEHT_ONITEMTABBUTTON            = 0x1000
+    };
+    typedef DWORD NSTCEHITTEST;
+
+    [v1_enum] enum _NSTCECLICKTYPE {
+        NSTCECT_LBUTTON                    = 0x1,
+        NSTCECT_MBUTTON                    = 0x2,
+        NSTCECT_RBUTTON                    = 0x3,
+        NSTCECT_BUTTON                     = 0x3,
+        NSTCECT_DBLCLICK                   = 0x4
+    };
+    typedef DWORD NSTCECLICKTYPE;
+
+    HRESULT OnItemClick(
+        [in] IShellItem *psi,
+        [in] NSTCEHITTEST nstceHitTest,
+        [in] NSTCECLICKTYPE nstceClickType);
+
+    HRESULT OnPropertyItemCommit(
+        [in] IShellItem *psi);
+
+    HRESULT OnItemStateChanging(
+        [in] IShellItem *psi,
+        [in] NSTCITEMSTATE nstcisMask,
+        [in] NSTCITEMSTATE nstcisState);
+
+    HRESULT OnItemStateChanged(
+        [in] IShellItem *psi,
+        [in] NSTCITEMSTATE nstcisMask,
+        [in] NSTCITEMSTATE nstcisState);
+
+    HRESULT OnSelectionChanged(
+        [in] IShellItemArray *psiaSelection);
+
+    HRESULT OnKeyboardInput(
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam);
+
+    HRESULT OnBeforeExpand(
+        [in] IShellItem *psi);
+
+    HRESULT OnAfterExpand(
+        [in] IShellItem *psi);
+
+    HRESULT OnBeginLabelEdit(
+        [in] IShellItem *psi);
+
+    HRESULT OnEndLabelEdit(
+        [in] IShellItem *psi);
+
+    HRESULT OnGetToolTip(
+        [in] IShellItem *psi,
+        [out, string, size_is(cchTip)] LPWSTR pszTip,
+        [in] int cchTip);
+
+    HRESULT OnBeforeItemDelete(
+        [in] IShellItem *psi);
+
+    HRESULT OnItemAdded(
+        [in] IShellItem *psi,
+        [in] BOOL fIsRoot);
+
+    HRESULT OnItemDeleted(
+        [in] IShellItem *psi,
+        [in] BOOL fIsRoot);
+
+    HRESULT OnBeforeContextMenu(
+        [in, unique] IShellItem *psi,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT OnAfterContextMenu(
+        [in] IShellItem *psi,
+        [in] IContextMenu *pcmIn,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT OnBeforeStateImageChange(
+        [in] IShellItem *psi);
+
+    HRESULT OnGetDefaultIconIndex(
+        [in] IShellItem *psi,
+        [out] int *piDefaultIcon,
+        [out] int *piOpenIcon);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControlCustomDraw interface
+ */
+[
+ object,
+ uuid(2D3BA758-33EE-42D5-BB7B-5F3431D86C78),
+ local
+]
+
+interface INameSpaceTreeControlCustomDraw : IUnknown
+{
+    typedef struct NSTCCUSTOMDRAW
+    {
+        IShellItem *psi;
+        UINT uItemState;
+        NSTCITEMSTATE nstcis;
+        LPCWSTR pszText;
+        int iImage;
+        HIMAGELIST himl;
+        int iLevel;
+        int iIndent;
+    } NSTCCUSTOMDRAW;
+
+    HRESULT PrePaint(
+        [in] HDC hdc,
+        [in] RECT *prc,
+        [out] LRESULT *plres);
+
+    HRESULT PostPaint(
+        [in] HDC hdc,
+        [in] RECT *prc);
+
+    HRESULT ItemPrePaint(
+        [in] HDC hdc,
+        [in] RECT *prc,
+        [in, out] COLORREF *pclrText,
+        [in, out] COLORREF *pclrTextBk,
+        [out] LRESULT *plres);
+
+    HRESULT ItemPostPaint(
+        [in] HDC hdc,
+        [in] RECT *prc,
+        [in] NSTCCUSTOMDRAW *pnstccdItem);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControlDropHandler interface
+ */
+[
+ object,
+ uuid(F9C665D6-C2F2-4C19-BF33-8322D7352F51),
+ local
+]
+interface INameSpaceTreeControlDropHandler : IUnknown
+{
+    HRESULT OnDragEnter(
+        [in, unique] IShellItem *psiOver,
+        [in] IShellItemArray *psiaData,
+        [in] BOOL fOutsideSource,
+        [in] DWORD grfKeyState,
+        [in, out] DWORD *pdwEffect);
+
+    HRESULT OnDragOver(
+        [in, unique] IShellItem *psiOver,
+        [in] IShellItemArray *psiaData,
+        [in] DWORD grfKeyState,
+        [in, out] DWORD *pdwEffect);
+
+    HRESULT OnDragPosition(
+        [in, unique] IShellItem *psiOver,
+        [in] IShellItemArray *psiaData,
+        [in] int iNewPosition,
+        [in] int iOldPosition);
+
+    HRESULT OnDrop(
+        [in, unique] IShellItem *psiOver,
+        [in] IShellItemArray *psiaData,
+        [in] int iPosition,
+        [in] DWORD grfKeyState,
+        [in, out] DWORD *pdwEffect);
+
+    HRESULT OnDropPosition(
+        [in, unique] IShellItem *psiOver,
+        [in] IShellItemArray *psiaData,
+        [in] int iNewPosition,
+        [in] int iOldPosition);
+
+    HRESULT OnDragLeave(
+        [in, unique] IShellItem *psiOver);
+}
+cpp_quote("#define NSTCDHPOS_ONTOP -1")
+
+interface IFileDialog;
+
+typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE
+{
+    FDEOR_DEFAULT  = 0,
+    FDEOR_ACCCEP   = 1,
+    FDEOR_REFUSE   = 2
+} FDE_OVERWRITE_RESPONSE;
+
+typedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE
+{
+    FDESVR_DEFAULT = 0,
+    FDESVR_ACCEPT  = 1,
+    FDESVR_REFUSE  = 2
+} FDE_SHAREVIOLATION_RESPONSE;
+
+/*****************************************************************************
+ * IFileDialogEvents interface
+ */
+[
+ object,
+ uuid(973510DB-7D7F-452B-8975-74A85828D354),
+ pointer_default(unique)
+]
+interface IFileDialogEvents : IUnknown
+{
+    HRESULT OnFileOk(
+        [in] IFileDialog *pfd);
+
+    HRESULT OnFolderChanging(
+        [in] IFileDialog *pfd,
+        [in] IShellItem *psiFolder);
+
+    HRESULT OnFolderChange(
+        [in] IFileDialog *pfd);
+
+    HRESULT OnSelectionChange(
+        [in] IFileDialog *pfd);
+
+    HRESULT OnShareViolation(
+        [in] IFileDialog *pfd,
+        [in] IShellItem *psi,
+        [out] FDE_SHAREVIOLATION_RESPONSE *pResponse);
+
+    HRESULT OnTypeChange(
+        [in] IFileDialog *pfd);
+
+    HRESULT OnOverwrite(
+        [in] IFileDialog *pfd,
+        [in] IShellItem *psi,
+        [out] FDE_OVERWRITE_RESPONSE *pResponse);
+}
+
+/*****************************************************************************
+ * IModalWindow interface
+ */
+[
+ object,
+ uuid(B4DB1657-70D7-485E-8E3E-6FCB5A5C1802),
+ pointer_default(unique)
+]
+interface IModalWindow : IUnknown
+{
+    [local]
+    HRESULT Show(
+        [in, unique, annotation("__in_opt")] HWND hwndOwner);
+
+    [call_as(Show)]
+    HRESULT RemoteShow(
+        [in, unique] HWND hwndOwner);
+}
+
+typedef [v1_enum] enum FDAP
+{
+    FDAP_BOTTOM    = 0,
+    FDAP_TOP       = 1
+} FDAP;
+
+/*****************************************************************************
+ * IFileDialog interface
+ */
+[
+ object,
+ uuid(42F85136-DB7E-439C-85F1-E4075D135FC8),
+ pointer_default(unique)
+]
+interface IFileDialog : IModalWindow
+{
+    [v1_enum] enum _FILEOPENDIALOGOPTIONS
+    {
+        FOS_OVERWRITEPROMPT     = 0x00000002,
+        FOS_STRICTFILETYPES     = 0x00000004,
+        FOS_NOCHANGEDIR         = 0x00000008,
+        FOS_PICKFOLDERS         = 0x00000020,
+        FOS_FORCEFILESYSTEM     = 0x00000040,
+        FOS_ALLNONSTORAGEITEMS  = 0x00000080,
+        FOS_NOVALIDATE          = 0x00000100,
+        FOS_ALLOWMULTISELECT    = 0x00000200,
+        FOS_PATHMUSTEXIST       = 0x00000800,
+        FOS_FILEMUSTEXIST       = 0x00001000,
+        FOS_CREATEPROMPT        = 0x00002000,
+        FOS_SHAREAWARE          = 0x00004000,
+        FOS_NOREADONLYRETURN    = 0x00008000,
+        FOS_NOTESTFILECREATE    = 0x00010000,
+        FOS_HIDEMRUPLACES       = 0x00020000,
+        FOS_HIDEPINNEDPLACES    = 0x00040000,
+        FOS_NODEREFERENCELINKS  = 0x00100000,
+        FOS_DONTADDTORECENT     = 0x02000000,
+        FOS_FORCESHOWHIDDEN     = 0x10000000,
+        FOS_DEFAULTNOMINIMODE   = 0x20000000,
+        FOS_FORCEPREVIEWPANEON  = 0x40000000
+    };
+    typedef DWORD FILEOPENDIALOGOPTIONS;
+
+    HRESULT SetFileTypes(
+        [in] UINT cFileTypes,
+        [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec);
+
+    HRESULT SetFileTypeIndex(
+        [in] UINT iFileType);
+
+    HRESULT GetFileTypeIndex(
+        [out] UINT *piFileType);
+
+    HRESULT Advise(
+        [in] IFileDialogEvents *pfde,
+        [out] DWORD *pdwCookie);
+
+    HRESULT Unadvise(
+        [in] DWORD dwCookie);
+
+    HRESULT SetOptions(
+        [in] FILEOPENDIALOGOPTIONS fos);
+
+    HRESULT GetOptions(
+        [in] FILEOPENDIALOGOPTIONS *pfos);
+
+    HRESULT SetDefaultFolder(
+        [in] IShellItem *psi);
+
+    HRESULT SetFolder(
+        [in] IShellItem *psi);
+
+    HRESULT GetFolder(
+        [out] IShellItem **ppsi);
+
+    HRESULT GetCurrentSelection(
+        [out] IShellItem **ppsi);
+
+    HRESULT SetFileName(
+        [in, string] LPCWSTR pszName);
+
+    HRESULT GetFileName(
+        [out, string] LPWSTR *pszName);
+
+    HRESULT SetTitle(
+        [in, string] LPCWSTR pszTitle);
+
+    HRESULT SetOkButtonLabel(
+        [in, string] LPCWSTR pszText);
+
+    HRESULT SetFileNameLabel(
+        [in, string] LPCWSTR pszLabel);
+
+    HRESULT GetResult(
+        [out] IShellItem **ppsi);
+
+    HRESULT AddPlace(
+        [in] IShellItem *psi,
+        [in] FDAP fdap);
+
+    HRESULT SetDefaultExtension(
+        [in, string] LPCWSTR pszDefaultExtension);
+
+    HRESULT Close(
+        [in] HRESULT hr);
+
+    HRESULT SetClientGuid(
+        [in] REFGUID guid);
+
+    HRESULT ClearClientData();
+
+    HRESULT SetFilter(
+        [in] IShellItemFilter *pFilter);
+}
+
+/*****************************************************************************
+ * IFileDialog2 interface
+ */
+[
+ object,
+ uuid(61744FC7-85B5-4791-A9B0-272276309B13),
+ pointer_default(unique)
+]
+interface IFileDialog2 : IFileDialog
+{
+    HRESULT SetCancelButtonLabel(
+        [in] LPCWSTR pszLabel);
+
+    HRESULT SetNavigationRoot(
+        [in] IShellItem *psi);
+}
+
+/*****************************************************************************
+ * IFileOperationProgressSink interface
+ */
+[
+ object,
+ uuid(04B0F1A7-9490-44BC-96E1-4296A31252E2),
+ pointer_default(unique)
+]
+interface IFileOperationProgressSink : IUnknown
+{
+    HRESULT StartOperations();
+
+    HRESULT FinishOperations(
+        [in] HRESULT hrResult);
+
+    HRESULT PreRenameItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in, unique, string] LPCWSTR pszNewName);
+
+    HRESULT PostRenameItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in, string] LPCWSTR pszNewName,
+        [in] HRESULT hrRename,
+        [in] IShellItem *psiNewlyCreated);
+
+    HRESULT PreMoveItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in] IShellItem *psiDestinationFolder,
+        [in, unique, string] LPCWSTR pszNewName);
+
+    HRESULT PostMoveItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in] IShellItem *psiDestinationFolder,
+        [in, unique, string] LPCWSTR pszNewName,
+        [in] HRESULT hrMove,
+        [in] IShellItem *psiNewlyCreated);
+
+    HRESULT PreCopyItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in] IShellItem *psiDestinationFolder,
+        [in, unique, string] LPCWSTR pszNewName);
+
+    HRESULT PostCopyItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in] IShellItem *psiDestinationFolder,
+        [in, unique, string] LPCWSTR pszNewName,
+        [in] HRESULT hrCopy,
+        [in] IShellItem *psiNewlyCreated);
+
+    HRESULT PreDeleteItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem);
+
+    HRESULT PostDeleteItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiItem,
+        [in] HRESULT hrDelete,
+        [in] IShellItem *psiNewlyCreated);
+
+    HRESULT PreNewItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiDestinationFolder,
+        [in, unique, string] LPCWSTR pszNewName);
+
+    HRESULT PostNewItem(
+        [in] DWORD dwFlags,
+        [in] IShellItem *psiDestinationFolder,
+        [in, unique, string] LPCWSTR pszNewName,
+        [in, unique, string] LPCWSTR pszTemplateName,
+        [in] DWORD dwFileAttributes,
+        [in] HRESULT hrNew,
+        [in] IShellItem *psiNewItem);
+
+    HRESULT UpdateProgress(
+        [in] UINT iWorkTotal,
+        [in] UINT iWorkSoFar);
+
+    HRESULT ResetTimer();
+
+    HRESULT PauseTimer();
+
+    HRESULT ResumeTimer();
+}
+
+/*****************************************************************************
+ * IFileSaveDialog interface
+ */
+[
+ object,
+ uuid(84BCCD23-5FDE-4CDB-AEA4-AF64B83D78AB),
+ pointer_default(unique)
+]
+interface IFileSaveDialog : IFileDialog
+{
+    HRESULT SetSaveAsItem(
+        [in] IShellItem *psi);
+
+    HRESULT SetProperties(
+        [in] IPropertyStore *pStore);
+
+    HRESULT SetCollectedProperties(
+        [in] IPropertyDescriptionList *pList,
+        [in] BOOL fAppendDefault);
+
+    HRESULT GetProperties(
+        [in] IPropertyStore **ppStore);
+
+    HRESULT ApplyProperties(
+        [in] IShellItem *psi,
+        [in] IPropertyStore *pStore,
+        [in, unique] HWND hwnd,
+        [in, unique] IFileOperationProgressSink *pSink);
+}
+
+
+/*****************************************************************************
+ * IFileOpenDialog interface
+ */
+[
+ object,
+ uuid(D57C7288-D4AD-4768-BE02-9D969532D960),
+ pointer_default(unique)
+]
+interface IFileOpenDialog : IFileDialog
+{
+    HRESULT GetResults(
+        [out] IShellItemArray **ppenum);
+
+    HRESULT GetSelectedItems(
+        [out] IShellItemArray **ppsai);
+}
+
+typedef [v1_enum] enum CDCONTROLSTATEF
+{
+    CDCS_INACTIVE       = 0x0,
+    CDCS_ENABLED        = 0x1,
+    CDCS_VISIBLE        = 0x2,
+    CDCS_ENABLEDVISIBLE = 0x3
+} CDCONTROLSTATEF;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)")
+/*****************************************************************************
+ * IFileDialogCustomize interface
+ */
+[
+ object,
+ uuid(E6FDD21A-163F-4975-9C8C-A69F1BA37034),
+ pointer_default(unique)
+]
+interface IFileDialogCustomize : IUnknown
+{
+    HRESULT EnableOpenDropDown(
+        [in] DWORD dwIDCtl);
+
+    HRESULT AddMenu(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszLabel);
+
+    HRESULT AddPushButton(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszLabel);
+
+    HRESULT AddComboBox(
+        [in] DWORD dwIDCtl);
+
+    HRESULT AddRadioButtonList(
+        [in] DWORD dwIDCtl);
+
+    HRESULT AddCheckButton(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszLabel,
+        [in] BOOL bChecked);
+
+    HRESULT AddEditBox(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszText);
+
+    HRESULT AddSeparator(
+        [in] DWORD dwIDCtl);
+
+    HRESULT AddText(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszText);
+
+    HRESULT SetControlLabel(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszLabel);
+
+    HRESULT GetControlState(
+        [in] DWORD dwIDCtl,
+        [out] CDCONTROLSTATEF *pdwState);
+
+    HRESULT SetControlState(
+        [in] DWORD dwIDCtl,
+        [in] CDCONTROLSTATEF dwState);
+
+    HRESULT GetEditBoxText(
+        [in] DWORD dwIDCtl,
+        [out, string] WCHAR **ppszText);
+
+    HRESULT SetEditBoxText(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszText);
+
+    HRESULT GetCheckButtonState(
+        [in] DWORD dwIDCtl,
+        [out] BOOL *pbChecked);
+
+    HRESULT SetCheckButtonState(
+        [in] DWORD dwIDCtl,
+        [in] BOOL bChecked);
+
+    HRESULT AddControlItem(
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem,
+        [in] LPCWSTR pszLabel);
+
+    HRESULT RemoveControlItem(
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem);
+
+    HRESULT RemoveAllControlItems(
+        [in] DWORD dwIDCtl);
+
+    HRESULT GetControlItemState(
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem,
+        [out] CDCONTROLSTATEF *pdwState);
+
+    HRESULT SetControlItemState(
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem,
+        [in] CDCONTROLSTATEF dwState);
+
+    HRESULT GetSelectedControlItem(
+        [in] DWORD dwIDCtl,
+        [out] DWORD *pdwIDItem);
+
+    HRESULT SetSelectedControlItem(
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem);
+
+    HRESULT StartVisualGroup(
+        [in] DWORD dwIDCtl,
+        [in, string] LPCWSTR pszLabel);
+
+    HRESULT EndVisualGroup();
+
+    HRESULT MakeProminent(
+        [in] DWORD dwIDCtl);
+
+    HRESULT SetControlItemText(
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem,
+        [in, string] LPCWSTR pszLabel);
+}
+
+/*****************************************************************************
+ * IFileDialogControlEvents interface
+ */
+[
+ object,
+ uuid(36116642-D713-4B97-9B83-7484A9D00433),
+ pointer_default(unique)
+]
+interface IFileDialogControlEvents : IUnknown
+{
+    HRESULT OnItemSelected(
+        [in] IFileDialogCustomize *pfdc,
+        [in] DWORD dwIDCtl,
+        [in] DWORD dwIDItem);
+
+    HRESULT OnButtonClicked(
+        [in] IFileDialogCustomize *pfdc,
+        [in] DWORD dwIDCtl);
+
+    HRESULT OnCheckButtonToggled(
+        [in] IFileDialogCustomize *pfdc,
+        [in] BOOL dwIDCtl,
+        [in] BOOL bChecked);
+
+    HRESULT OnControlActivating(
+        [in] IFileDialogCustomize *pfdc,
+        [in] DWORD dwIDCtl);
+}
+
+typedef [v1_enum] enum tagKF_CATEGORY
+{
+    KF_CATEGORY_VIRTUAL = 0x00000001,
+    KF_CATEGORY_FIXED   = 0x00000002,
+    KF_CATEGORY_COMMON  = 0x00000003,
+    KF_CATEGORY_PERUSER = 0x00000004
+} KF_CATEGORY;
+
+typedef [v1_enum] enum tagKF_REDIRECTION_CAPABILITIES
+{
+    KF_REDIRECTION_CAPABILITIES_ALLOW_ALL               = 0x000000ff,
+    KF_REDIRECTION_CAPABILITIES_REDIRECTABLE            = 0x00000001,
+    KF_REDIRECTION_CAPABILITIES_DENY_ALL                = 0x000fff00,
+    KF_REDIRECTION_CAPABILITIES_DENY_POLICY_REDIRECTED  = 0x00000100,
+    KF_REDIRECTION_CAPABILITIES_DENY_POLICY             = 0x00000200,
+    KF_REDIRECTION_CAPABILITIES_DENY_PERMISSIONS        = 0x00000400
+} KF_REDIRECTION_CAPABILITIES;
+
+typedef [v1_enum] enum tagKF_DEFINITION_FLAGS
+{
+    KFDF_LOCAL_REDIRECT_ONLY    = 0x00000002,
+    KFDF_ROAMABLE               = 0x00000004,
+    KFDF_PRECREATE              = 0x00000008,
+    KFDF_STREAM                 = 0x00000010,
+    KFDF_PUBLISHEXPANDEDPATH    = 0x00000020
+} KF_DEFINITION_FLAGS;
+
+typedef struct tagKNOWNFOLDER_DEFINITION
+{
+    KF_CATEGORY         category;
+    LPWSTR              pszName;
+    LPWSTR              pszDescription;
+    KNOWNFOLDERID       fidParent;
+    LPWSTR              pszRelativePath;
+    LPWSTR              pszParsingName;
+    LPWSTR              pszTooltip;
+    LPWSTR              pszLocalizedName;
+    LPWSTR              pszIcon;
+    LPWSTR              pszSecurity;
+    DWORD               dwAttributes;
+    KF_DEFINITION_FLAGS kfdFlags;
+    FOLDERTYPEID        ftidType;
+} KNOWNFOLDER_DEFINITION;
+
+[
+ object,
+ uuid(3aa7af7e-9b36-420C-a8e3-f77d4674a488),
+ pointer_default(ref)
+]
+interface IKnownFolder : IUnknown
+{
+    HRESULT GetId(
+        [out] KNOWNFOLDERID *pkfid);
+
+    HRESULT GetCategory(
+        [out] KF_CATEGORY *pCategory);
+
+    HRESULT GetShellItem(
+        [in] DWORD dwFlags,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppv);
+
+    HRESULT GetPath(
+        [in] DWORD dwFlags,
+        [out, string] LPWSTR *ppszPath);
+
+    HRESULT SetPath(
+        [in] DWORD dwFlags,
+        [in, string] LPCWSTR pszPath);
+
+    HRESULT GetIDList(
+        [in] DWORD dwFlags,
+        [out] PIDLIST_ABSOLUTE *ppidl);
+
+    HRESULT GetFolderType(
+        [out] FOLDERTYPEID *pftid);
+
+    HRESULT GetRedirectionCapabilities(
+        [out] KF_REDIRECTION_CAPABILITIES *pCapabilities);
+
+    HRESULT GetFolderDefinition(
+        [out] KNOWNFOLDER_DEFINITION *pKFD);
+}
+
+typedef [v1_enum] enum tagKF_REDIRECT_FLAGS
+{
+    KF_REDIRECT_USER_EXCLUSIVE      = 0x00000001,
+    KF_REDIRECT_COPY_SOURCE_DACL    = 0x00000002,
+    KF_REDIRECT_OWNER_USER          = 0x00000004,
+    KF_REDIRECT_SET_OWNER_EXPLICIT  = 0x00000008,
+    KF_REDIRECT_CHECK_ONLY          = 0x00000010,
+    KF_REDIRECT_WITH_UI             = 0x00000020,
+    KF_REDIRECT_UNPIN               = 0x00000040,
+    KF_REDIRECT_PIN                 = 0x00000080,
+    KF_REDIRECT_COPY_CONTENTS       = 0x00000200,
+    KF_REDIRECT_DEL_SOURCE_CONTENTS = 0x00000400,
+    KF_REDIRECT_EXCLUDE_ALL_KNOWN_SUBFOLDERS = 0x00000800
+} KF_REDIRECT_FLAGS;
+
+[
+    object,
+    uuid(8BE2D872-86AA-4d47-B776-32CCA40C7018),
+    pointer_default(ref)
+]
+interface IKnownFolderManager : IUnknown
+{
+    typedef [v1_enum] enum tagFFFP_MODE
+    {
+        FFFP_EXACTMATCH,
+        FFFP_NEARESTPARENTMATCH
+    } FFFP_MODE;
+
+    HRESULT FolderIdFromCsidl(
+        [in] int nCsidl,
+        [out] KNOWNFOLDERID *pfid);
+
+    HRESULT FolderIdToCsidl(
+        [in] REFKNOWNFOLDERID rfid,
+        [out] int *pnCsidl);
+
+    HRESULT GetFolderIds(
+        [out, size_is(, *pCount)] KNOWNFOLDERID **ppKFId,
+        [in, out] UINT *pCount);
+
+    HRESULT GetFolder(
+        [in] REFKNOWNFOLDERID rfid,
+        [out] IKnownFolder **ppkf);
+
+    HRESULT GetFolderByName(
+        [in, string] LPCWSTR pszCanonicalName,
+        [out] IKnownFolder **ppkf);
+
+    HRESULT RegisterFolder(
+        [in] REFKNOWNFOLDERID rfid,
+        [in] KNOWNFOLDER_DEFINITION const *pKFD);
+
+    HRESULT UnregisterFolder(
+        [in] REFKNOWNFOLDERID rfid);
+
+    HRESULT FindFolderFromPath(
+        [in, string] LPCWSTR pszPath,
+        [in] FFFP_MODE mode,
+        [out] IKnownFolder **ppkf);
+
+    HRESULT FindFolderFromIDList(
+        [in] PCIDLIST_ABSOLUTE pidl,
+        [out] IKnownFolder **ppkf);
+
+    HRESULT Redirect(
+        [in] REFKNOWNFOLDERID rfid,
+        [in, unique] HWND hwnd,
+        [in] KF_REDIRECT_FLAGS flags,
+        [in, unique, string] LPCWSTR pszTargetPath,
+        [in] UINT cFolders,
+        [in, size_is(cFolders), unique] KNOWNFOLDERID const *pExclusion,
+        [out, string] LPWSTR *ppszError);
+}
+
+/* function for releasing structure returned from IKnownFolder::GetFolderDefinition */
+cpp_quote("static inline void FreeKnownFolderDefinitionFields(KNOWNFOLDER_DEFINITION *pKFD)")
+cpp_quote("{")
+cpp_quote("    CoTaskMemFree(pKFD->pszName);")
+cpp_quote("    CoTaskMemFree(pKFD->pszDescription);")
+cpp_quote("    CoTaskMemFree(pKFD->pszRelativePath);")
+cpp_quote("    CoTaskMemFree(pKFD->pszParsingName);")
+cpp_quote("    CoTaskMemFree(pKFD->pszTooltip);")
+cpp_quote("    CoTaskMemFree(pKFD->pszLocalizedName);")
+cpp_quote("    CoTaskMemFree(pKFD->pszIcon);")
+cpp_quote("    CoTaskMemFree(pKFD->pszSecurity);")
+cpp_quote("}")
+
+typedef [v1_enum] enum ASSOCIATIONLEVEL {
+    AL_MACHINE,
+    AL_EFFECTIVE,
+    AL_USER
+} ASSOCIATIONLEVEL;
+
+typedef [v1_enum] enum ASSOCIATIONTYPE {
+    AT_FILEEXTENSION,
+    AT_URLPROTOCOL,
+    AT_STARTMENUCLIENT,
+    AT_MIMETYPE
+} ASSOCIATIONTYPE;
+
+[
+    object,
+    uuid(4e530b0a-e611-4c77-a3ac-9031d022281b),
+    pointer_default(unique)
+]
+interface IApplicationAssociationRegistration : IUnknown
+{
+    HRESULT QueryCurrentDefault(
+        [in, string] LPCWSTR pszQuery,
+        [in] ASSOCIATIONTYPE atQueryType,
+        [in] ASSOCIATIONLEVEL alQueryLevel,
+        [out, string] LPWSTR *ppszAssociation);
+
+    HRESULT QueryAppIsDefault(
+        [in, string] LPCWSTR pszQuery,
+        [in] ASSOCIATIONTYPE atQueryType,
+        [in] ASSOCIATIONLEVEL alQueryLevel,
+        [in, string] LPCWSTR pszAppRegistryName,
+        [out] BOOL *pfDefault);
+
+    HRESULT QueryAppIsDefaultAll(
+        [in] ASSOCIATIONLEVEL alQueryLevel,
+        [in, string] LPCWSTR pszAppRegistryName,
+        [out] BOOL* pfDefault);
+
+    HRESULT SetAppAsDefault(
+        [in, string] LPCWSTR pszAppRegistryName,
+        [in, string] LPCWSTR pszSet,
+        [in] ASSOCIATIONTYPE atSetType);
+
+    HRESULT SetAppAsDefaultAll(
+        [in, string] LPCWSTR pszAppRegistryName);
+
+    HRESULT ClearUserAssociations();
+}
+
+[
+    uuid(6332debf-87b5-4670-90c0-5e57b408a49e),
+    object,
+    pointer_default(unique)
+]
+interface ICustomDestinationList : IUnknown
+{
+    typedef [v1_enum] enum KNOWNDESTCATEGORY {
+        KDC_FREQUENT = 1,
+        KDC_RECENT
+    } KNOWNDESTCATEGORY;
+
+    HRESULT SetAppID([in, string] LPCWSTR pszAppID);
+
+    HRESULT BeginList(
+            [out] UINT *pcMinSlots,
+            [in] REFIID riid,
+            [out, iid_is(riid)] void **ppv);
+
+    HRESULT AppendCategory(
+            [in, string] LPCWSTR pszCategory,
+            [in] IObjectArray *poa);
+
+    HRESULT AppendKnownCategory([in] KNOWNDESTCATEGORY category);
+    HRESULT AddUserTasks([in] IObjectArray *poa);
+    HRESULT CommitList();
+
+    HRESULT GetRemovedDestinations(
+            [in] REFIID riid,
+            [out, iid_is(riid)] void **ppv);
+
+    HRESULT DeleteList([in, unique, string] LPCWSTR pszAppID);
+    HRESULT AbortList();
+}
+
+/*****************************************************************************
+ * ShellObjects typelibrary
+ */
+[
+ uuid(50A7E9B1-70EF-11D1-B75A-00A0C90564FE),
+ lcid(0x0000),
+ version(1.0)
+]
+library ShellObjects
+{
+    [
+        uuid(71F96385-DDD6-48D3-A0C1-AE06E8B055FB)
+    ]
+    coclass ExplorerBrowser
+    {
+        interface IExplorerBrowser;
+    }
+
+    [
+        uuid(DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7)
+    ]
+    coclass FileOpenDialog
+    {
+        interface IFileOpenDialog;
+    }
+
+    [
+        uuid(C0B4E2F3-BA21-4773-8DBA-335EC946EB8B)
+    ]
+    coclass FileSaveDialog
+    {
+        interface IFileSaveDialog;
+    }
+
+    [
+        uuid(AE054212-3535-4430-83ED-D501AA6680E6)
+    ]
+    coclass NamespaceTreeControl
+    {
+        interface INameSpaceTreeControl2;
+    }
+
+    [
+        uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a)
+    ]
+    coclass KnownFolderManager
+    {
+        interface IKnownFolderManager;
+    }
+
+    [
+        uuid(591209c7-767b-42b2-9fba-44ee4615f2c7)
+    ]
+    coclass ApplicationAssociationRegistration
+    {
+        interface IApplicationAssociationRegistration;
+    }
+
+    [
+         uuid(00021401-0000-0000-c000-000000000046)
+    ]
+    coclass ShellLink
+    {
+        interface IShellLinkW;
+    }
+
+    [
+        uuid(56fdf344-fd6d-11d0-958a-006097c9a090)
+    ]
+    coclass TaskbarList
+    {
+        interface ITaskbarList4;
+    }
+
+    [
+        uuid(77f10cf0-3db5-4966-b520-b7c54fd35ed6)
+    ]
+    coclass DestinationList {
+        interface ICustomDestinationList;
+    }
+
+    [
+        uuid(2d3468c1-36a7-43b6-ac24-d3f02fd9607a)
+    ]
+    coclass EnumerableObjectCollection
+    {
+        interface IEnumObjects;
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl
new file mode 100644
index 0000000..f4c7ea9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl
@@ -0,0 +1,171 @@
+/*
+ * Type definitions for shell objects
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+cpp_quote("#include <pshpack1.h>")
+typedef struct
+{
+    WORD cb;      /* nr of bytes in this item */
+    BYTE abID[1]; /* first byte in this item */
+} SHITEMID, *LPSHITEMID;
+typedef const SHITEMID *LPCSHITEMID;
+
+typedef struct _ITEMIDLIST
+{
+    SHITEMID mkid; /* first itemid in list */
+} ITEMIDLIST,*LPITEMIDLIST;
+typedef const ITEMIDLIST *LPCITEMIDLIST;
+typedef LPITEMIDLIST PITEMID_CHILD;
+typedef const PITEMID_CHILD PCITEMID_CHILD;
+typedef LPCITEMIDLIST PCUITEMID_CHILD;
+typedef LPCITEMIDLIST *PCUITEMID_CHILD_ARRAY;
+typedef LPCITEMIDLIST PCUIDLIST_RELATIVE;
+typedef LPITEMIDLIST PIDLIST_ABSOLUTE;
+typedef LPCITEMIDLIST PCIDLIST_ABSOLUTE;
+cpp_quote("#include <poppack.h>")
+
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
+
+cpp_quote("#if 0")
+typedef struct { int dummy; } WIN32_FIND_DATAA, WIN32_FIND_DATAW;
+cpp_quote("#endif")
+
+typedef enum tagSTRRET_TYPE
+{
+    STRRET_WSTR = 0,
+    STRRET_OFFSET = 1,
+    STRRET_CSTR = 2
+} STRRET_TYPE;
+
+cpp_quote("#include <pshpack8.h>")
+typedef struct _STRRET
+{
+    UINT uType;			/* STRRET_xxx */
+    [switch_type(UINT), switch_is(uType)] union
+    {
+    [case(STRRET_WSTR)][string] LPWSTR    pOleStr;        /* OLESTR that will be freed */
+    [case(STRRET_OFFSET)]       UINT      uOffset;        /* Offset into SHITEMID (ANSI) */
+    [case(STRRET_CSTR)]         char      cStr[MAX_PATH]; /* ANSI Buffer */
+    } DUMMYUNIONNAME;
+} STRRET, *LPSTRRET;
+cpp_quote("#include <poppack.h>")
+
+cpp_quote("#include <pshpack1.h>")
+typedef struct
+{
+    int fmt;
+    int cxChar;
+    STRRET str;
+} SHELLDETAILS, *LPSHELLDETAILS;
+cpp_quote("#include <poppack.h>")
+
+typedef struct _COMDLG_FILTERSPEC
+{
+    [string] LPCWSTR pszName;
+    [string] LPCWSTR pszSpec;
+} COMDLG_FILTERSPEC;
+
+typedef [v1_enum] enum tagSHCOLSTATE
+{
+    SHCOLSTATE_DEFAULT = 0,
+    SHCOLSTATE_TYPE_STR,
+    SHCOLSTATE_TYPE_INT,
+    SHCOLSTATE_TYPE_DATE,
+    SHCOLSTATE_TYPEMASK = 0xf,
+    SHCOLSTATE_ONBYDEFAULT = 0x10,
+    SHCOLSTATE_SLOW = 0x20,
+    SHCOLSTATE_EXTENDED = 0x40,
+    SHCOLSTATE_SECONDARYUI = 0x80,
+    SHCOLSTATE_HIDDEN = 0x100,
+    SHCOLSTATE_PREFER_VARCMP = 0x200,
+    SHCOLSTATE_PREFER_FMTCMP = 0x400,
+    SHCOLSTATE_NOSORTBYFOLDERNESS = 0x800,
+    SHCOLSTATE_VIEWONLY = 0x10000,
+    SHCOLSTATE_BATCHREAD = 0x20000,
+    SHCOLSTATE_NO_GROUPBY = 0x40000,
+    SHCOLSTATE_FIXED_WIDTH = 0x1000,
+    SHCOLSTATE_NODPISCALE = 0x2000,
+    SHCOLSTATE_FIXED_RATIO = 0x4000,
+    SHCOLSTATE_DISPLAYMASK = 0xf000
+} SHCOLSTATE;
+
+typedef DWORD SHCOLSTATEF;
+
+typedef GUID KNOWNFOLDERID;
+
+cpp_quote("#if 0")
+typedef KNOWNFOLDERID *REFKNOWNFOLDERID;
+cpp_quote("#endif")
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID &")
+cpp_quote("#else")
+cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST")
+cpp_quote("#endif")
+
+typedef GUID FOLDERTYPEID;
+
+cpp_quote("#if 0")
+typedef FOLDERTYPEID *REFFOLDERTYPEID;
+cpp_quote("#endif")
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID &")
+cpp_quote("#else")
+cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST")
+cpp_quote("#endif")
+
+typedef  [v1_enum] enum tagPERCEIVED {
+  PERCEIVED_TYPE_CUSTOM      = -3,
+  PERCEIVED_TYPE_UNSPECIFIED = -2,
+  PERCEIVED_TYPE_FOLDER      = -1,
+  PERCEIVED_TYPE_UNKNOWN     = 0,
+  PERCEIVED_TYPE_TEXT        = 1,
+  PERCEIVED_TYPE_IMAGE       = 2,
+  PERCEIVED_TYPE_AUDIO       = 3,
+  PERCEIVED_TYPE_VIDEO       = 4,
+  PERCEIVED_TYPE_COMPRESSED  = 5,
+  PERCEIVED_TYPE_DOCUMENT    = 6,
+  PERCEIVED_TYPE_SYSTEM      = 7,
+  PERCEIVED_TYPE_APPLICATION = 8,
+  PERCEIVED_TYPE_GAMEMEDIA   = 9,
+  PERCEIVED_TYPE_CONTACTS    = 10
+} PERCEIVED;
+
+cpp_quote("#define PERCEIVEDFLAG_UNDEFINED     0x0000")
+cpp_quote("#define PERCEIVEDFLAG_SOFTCODED     0x0001")
+cpp_quote("#define PERCEIVEDFLAG_HARDCODED     0x0002")
+cpp_quote("#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004")
+cpp_quote("#define PERCEIVEDFLAG_GDIPLUS       0x0010")
+cpp_quote("#define PERCEIVEDFLAG_WMSDK         0x0020")
+cpp_quote("#define PERCEIVEDFLAG_ZIPFOLDER     0x0040")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h
new file mode 100644
index 0000000..a8ca7af
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SIPBASE_H
+#define __WINE_SIPBASE_H
+
+#include <mssip.h>
+
+#endif  /* __WINE_SIPBASE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h
new file mode 100644
index 0000000..927174d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright 2008 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SLERROR_H
+#define __WINE_SLERROR_H
+
+#define SL_E_RIGHT_NOT_GRANTED        0xC004F013
+#define SL_E_DATATYPE_MISMATCHED      0xC004F01E
+
+#endif /* __WINE_SLERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h
new file mode 100644
index 0000000..9cd0a6d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright 2008 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SLPUBLIC_H
+#define __WINE_SLPUBLIC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _SLC_
+#define SLCAPI
+#else
+#define SLCAPI DECLSPEC_IMPORT
+#endif
+
+SLCAPI DWORD WINAPI SLGetWindowsInformationDWORD(LPCWSTR lpszValueName, LPDWORD pdwValue);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_SLPUBLIC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h
new file mode 100644
index 0000000..9b2ba93
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2005 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_SNMP_H
+#define _WINE_SNMP_H
+
+#include <windows.h>
+
+#include <pshpack4.h>
+
+typedef struct {
+    BYTE *stream;
+    UINT  length;
+    BOOL  dynamic;
+} AsnOctetString;
+
+typedef struct {
+    UINT  idLength;
+    UINT *ids;
+} AsnObjectIdentifier;
+
+typedef LONG           AsnInteger32;
+typedef ULONG          AsnUnsigned32;
+typedef ULARGE_INTEGER AsnCounter64;
+typedef AsnUnsigned32  AsnCounter32;
+typedef AsnUnsigned32  AsnGauge32;
+typedef AsnUnsigned32  AsnTimeticks;
+typedef AsnOctetString AsnBits;
+typedef AsnOctetString AsnSequence;
+typedef AsnOctetString AsnImplicitSequence;
+typedef AsnOctetString AsnIPAddress;
+typedef AsnOctetString AsnNetworkAddress;
+typedef AsnOctetString AsnDisplayString;
+typedef AsnOctetString AsnOpaque;
+
+typedef struct {
+    BYTE asnType;
+    union {
+        AsnInteger32        number;
+        AsnUnsigned32       unsigned32;
+        AsnCounter64        counter64;
+        AsnOctetString      string;
+        AsnBits             bits;
+        AsnObjectIdentifier object;
+        AsnSequence         sequence;
+        AsnIPAddress        address;
+        AsnCounter32        counter;
+        AsnGauge32          gauge;
+        AsnTimeticks        ticks;
+        AsnOpaque           arbitrary;
+    } asnValue;
+} AsnAny;
+
+typedef AsnObjectIdentifier AsnObjectName;
+typedef AsnAny              AsnObjectSyntax;
+
+typedef struct {
+    AsnObjectName   name;
+    AsnObjectSyntax value;
+} SnmpVarBind;
+
+typedef struct {
+    SnmpVarBind *list;
+    UINT         len;
+} SnmpVarBindList;
+
+#include <poppack.h>
+
+#define ASN_UNIVERSAL   0x00
+#define ASN_APPLICATION 0x40
+#define ASN_CONTEXT     0x80
+#define ASN_PRIVATE     0xc0
+#define ASN_PRIMITIVE   0x00
+#define ASN_CONSTRUCTOR 0x20
+
+#define SNMP_PDU_GET         (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x00)
+#define SNMP_PDU_GETNEXT     (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x01)
+#define SNMP_PDU_RESPONSE    (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x02)
+#define SNMP_PDU_SET         (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x03)
+#define SNMP_PDU_V1TRAP      (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x04)
+#define SNMP_PDU_GETBULK     (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x05)
+#define SNMP_PDU_INFORM      (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x06)
+#define SNMP_PDU_TRAP        (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x07)
+
+#define ASN_INTEGER          (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x02)
+#define ASN_BITS             (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x03)
+#define ASN_OCTETSTRING      (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x04)
+#define ASN_NULL             (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x05)
+#define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x06)
+#define ASN_INTEGER32        ASN_INTEGER
+
+#define ASN_SEQUENCE         (ASN_UNIVERSAL   | ASN_CONSTRUCTOR | 0x10)
+#define ASN_SEQUENCEOF       ASN_SEQUENCE
+
+#define ASN_IPADDRESS        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x00)
+#define ASN_COUNTER32        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x01)
+#define ASN_GAUGE32          (ASN_APPLICATION | ASN_PRIMITIVE   | 0x02)
+#define ASN_TIMETICKS        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x03)
+#define ASN_OPAQUE           (ASN_APPLICATION | ASN_PRIMITIVE   | 0x04)
+#define ASN_COUNTER64        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x06)
+#define ASN_UNSIGNED32       (ASN_APPLICATION | ASN_PRIMITIVE   | 0x07)
+
+#define SNMP_EXCEPTION_NOSUCHOBJECT   (ASN_CONTEXT | ASN_PRIMITIVE | 0x00)
+#define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01)
+#define SNMP_EXCEPTION_ENDOFMIBVIEW   (ASN_CONTEXT | ASN_PRIMITIVE | 0x02)
+
+#define SNMP_EXTENSION_GET         SNMP_PDU_GET
+#define SNMP_EXTENSION_GET_NEXT    SNMP_PDU_GETNEXT
+#define SNMP_EXTENSION_GET_BULK    SNMP_PDU_GETBULK
+#define SNMP_EXTENSION_SET_TEST    (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0)
+#define SNMP_EXTENSION_SET_COMMIT  SNMP_PDU_SET
+#define SNMP_EXTENSION_SET_UNDO    (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1)
+#define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2)
+
+#define SNMP_ERRORSTATUS_NOERROR             0
+#define SNMP_ERRORSTATUS_TOOBIG              1
+#define SNMP_ERRORSTATUS_NOSUCHNAME          2
+#define SNMP_ERRORSTATUS_BADVALUE            3
+#define SNMP_ERRORSTATUS_READONLY            4
+#define SNMP_ERRORSTATUS_GENERR              5
+#define SNMP_ERRORSTATUS_NOACCESS            6
+#define SNMP_ERRORSTATUS_WRONGTYPE           7
+#define SNMP_ERRORSTATUS_WRONGLENGTH         8
+#define SNMP_ERRORSTATUS_WRONGENCODING       9
+#define SNMP_ERRORSTATUS_WRONGVALUE          10
+#define SNMP_ERRORSTATUS_NOCREATION          11
+#define SNMP_ERRORSTATUS_INCONSISTENTVALUE   12
+#define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13
+#define SNMP_ERRORSTATUS_COMMITFAILED        14
+#define SNMP_ERRORSTATUS_UNDOFAILED          15
+#define SNMP_ERRORSTATUS_AUTHORIZATIONERROR  16
+#define SNMP_ERRORSTATUS_NOTWRITABLE         17
+#define SNMP_ERRORSTATUS_INCONSISTENTNAME    18
+
+#define SNMP_GENERICTRAP_COLDSTART           0
+#define SNMP_GENERICTRAP_WARMSTART           1
+#define SNMP_GENERICTRAP_LINKDOWN            2
+#define SNMP_GENERICTRAP_LINKUP              3
+#define SNMP_GENERICTRAP_AUTHFAILURE         4
+#define SNMP_GENERICTRAP_EGPNEIGHLOSS        5
+#define SNMP_GENERICTRAP_ENTERSPECIFIC       6
+
+#define SNMP_ACCESS_NONE        0
+#define SNMP_ACCESS_NOTIFY      1
+#define SNMP_ACCESS_READ_ONLY   2
+#define SNMP_ACCESS_READ_WRITE  3
+#define SNMP_ACCESS_READ_CREATE 4
+
+#define SNMP_LOG_SILENT  0
+#define SNMP_LOG_FATAL   1
+#define SNMP_LOG_ERROR   2
+#define SNMP_LOG_WARNING 3
+#define SNMP_LOG_TRACE   4
+#define SNMP_LOG_VERBOSE 5
+
+#define SNMP_OUTPUT_TO_CONSOLE  1
+#define SNMP_OUTPUT_TO_LOGFILE  2
+#define SNMP_OUTPUT_TO_EVENTLOG 4
+#define SNMP_OUTPUT_TO_DEBUGGER 8
+
+#define DEFINE_SIZEOF(x)     (sizeof(x)/sizeof((x)[0]))
+#define DEFINE_OID(x)        { DEFINE_SIZEOF(x),(x) }
+#define DEFINE_NULLOID()     { 0, NULL }
+#define DEFINE_NULLOCTENTS() { NULL, 0, FALSE }
+
+#define DEFAULT_SNMP_PORT_UDP     161
+#define DEFAULT_SNMP_PORT_IPX     36879
+#define DEFAULT_SNMPTRAP_PORT_UDP 162
+#define DEFAULT_SNMPTRAP_PORT_IPX 36880
+
+#define SNMP_MAX_OID_LEN 128
+
+#define SNMP_MEM_ALLOC_ERROR          0
+#define SNMP_BERAPI_INVALID_LENGTH    10
+#define SNMP_BERAPI_INVALID_TAG       11
+#define SNMP_BERAPI_OVERFLOW          12
+#define SNMP_BERAPI_SHORT_BUFFER      13
+#define SNMP_BERAPI_INVALID_OBJELEM   14
+#define SNMP_PDUAPI_UNRECOGNIZED_PDU  20
+#define SNMP_PDUAPI_INVALID_ES        21
+#define SNMP_PDUAPI_INVALID_GT        22
+#define SNMP_AUTHAPI_INVALID_VERSION  30
+#define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
+#define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
+
+#define SNMPAPI_NOERROR TRUE
+#define SNMPAPI_ERROR   FALSE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI SnmpExtensionInit(DWORD dwUptimeReference,
+ HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion);
+BOOL WINAPI SnmpExtensionInitEx(AsnObjectIdentifier *pNextSupportedRegion);
+
+BOOL WINAPI SnmpExtensionMonitor(LPVOID pAgentMgmtData);
+
+BOOL WINAPI SnmpExtensionQuery(BYTE bPduType, SnmpVarBindList *pVarBindList,
+ AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex);
+BOOL WINAPI SnmpExtensionQueryEx(UINT nRequestType, UINT nTransactionId,
+ SnmpVarBindList *pVarBindList, AsnOctetString *pContextInfo,
+ AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex);
+
+BOOL WINAPI SnmpExtensionTrap(AsnObjectIdentifier *pEnterpriseOid,
+ AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId,
+ AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList);
+
+VOID WINAPI SnmpExtensionClose(VOID);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONINIT)(DWORD dwUptimeReference,
+ HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion);
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONINITEX)(
+ AsnObjectIdentifier *pNextSupportedRegion);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONMONITOR)(LPVOID pAgentMgmtData);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERY)(BYTE bPduType,
+ SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus,
+ AsnInteger32 *pErrorIndex);
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERYEX)(UINT nRequestType,
+ UINT nTransactionId, SnmpVarBindList *pVarBindList,
+ AsnOctetString *pContextInfo, AsnInteger32 *pErrorStatus,
+ AsnInteger32 *pErrorIndex);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONTRAP)(AsnObjectIdentifier *pEnterpriseOid,
+ AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId,
+ AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList);
+
+typedef VOID (WINAPI *PFNSNMPEXTENSIONCLOSE)(VOID);
+
+INT WINAPI SnmpUtilOidCpy(AsnObjectIdentifier *pOidDst,
+ AsnObjectIdentifier *pOidSrc);
+INT WINAPI SnmpUtilOidAppend(AsnObjectIdentifier *pOidDst,
+ AsnObjectIdentifier *pOidSrc);
+INT WINAPI SnmpUtilOidCmp(AsnObjectIdentifier *pOid1,
+ AsnObjectIdentifier *pOid2);
+INT WINAPI SnmpUtilOidNCmp(AsnObjectIdentifier *pOid1,
+ AsnObjectIdentifier *pOid2, UINT nSubIds);
+VOID WINAPI SnmpUtilOidFree(AsnObjectIdentifier *pOid);
+
+INT WINAPI SnmpUtilOctetsCmp(AsnOctetString *pOctets1,
+ AsnOctetString *pOctets2);
+INT WINAPI SnmpUtilOctetsNCmp(AsnOctetString *pOctets1,
+ AsnOctetString *pOctets2, UINT nChars);
+INT WINAPI SnmpUtilOctetsCpy(AsnOctetString *pOctetsDst,
+ AsnOctetString *pOctetsSrc);
+VOID WINAPI SnmpUtilOctetsFree(AsnOctetString *pOctets);
+
+INT WINAPI SnmpUtilAsnAnyCpy(AsnAny *pAnyDst, AsnAny *pAnySrc);
+VOID WINAPI SnmpUtilAsnAnyFree(AsnAny *pAny);
+
+INT WINAPI SnmpUtilVarBindCpy(SnmpVarBind *pVbDst, SnmpVarBind *pVbSrc);
+VOID WINAPI SnmpUtilVarBindFree(SnmpVarBind *pVb);
+
+INT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *pVblDst,
+ SnmpVarBindList *pVblSrc);
+VOID WINAPI SnmpUtilVarBindListFree(SnmpVarBindList *pVbl);
+
+LPVOID WINAPI SnmpUtilMemAlloc(UINT nBytes) __WINE_ALLOC_SIZE(1);
+LPVOID WINAPI SnmpUtilMemReAlloc(LPVOID pMem, UINT nBytes) __WINE_ALLOC_SIZE(2);
+VOID WINAPI SnmpUtilMemFree(LPVOID pMem);
+
+LPSTR WINAPI SnmpUtilOidToA(AsnObjectIdentifier *Oid);
+LPSTR WINAPI SnmpUtilIdsToA(UINT *Ids, UINT IdLength);
+
+VOID WINAPI SnmpUtilPrintOid(AsnObjectIdentifier *Oid);
+VOID WINAPI SnmpUtilPrintAsnAny(AsnAny *pAny);
+
+DWORD WINAPI SnmpSvcGetUptime(VOID);
+VOID WINAPI SnmpSvcSetLogLevel(INT nLogLevel);
+VOID WINAPI SnmpSvcSetLogType(INT nLogType);
+
+VOID WINAPIV SnmpUtilDbgPrint(INT nLogLevel, LPSTR szFormat, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINE_SNMP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h
new file mode 100644
index 0000000..e79cf9f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SOFTPUB_H
+#define __WINE_SOFTPUB_H
+
+#include <wintrust.h>
+
+#define WINTRUST_ACTION_GENERIC_CERT_VERIFY \
+    { 0x189a3842, 0x3041, 0x11d1, { 0x85,0xe1,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define SP_GENERIC_CERT_INIT_FUNCTION (const WCHAR []) \
+    {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0}
+#elif defined(_MSC_VER)
+#define SP_GENERIC_CERT_INIT_FUNCTION L"SoftpubDefCertInit"
+#else
+static const WCHAR SP_GENERIC_CERT_INIT_FUNCTION[] =
+    {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0};
+#endif
+
+#define WINTRUST_ACTION_GENERIC_CHAIN_VERIFY \
+    { 0xfc451c16, 0xac75, 0x11d1, { 0xb4,0xb8,0x00,0xc0,0x4f,0xb6,0x6e,0xa0 }}
+
+#if defined(__GNUC__)
+#define GENERIC_CHAIN_FINALPOLICY_FUNCTION (const WCHAR []) \
+    {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0}
+#define GENERIC_CHAIN_CERTTRUST_FUNCTION (const WCHAR []) \
+    {'G','e','n','e','r','i','c','C','h','a','i','n','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
+#elif defined(_MSC_VER)
+#define GENERIC_CHAIN_FINALPOLICY_FUNCTION L"GenericChainFinalProv"
+#define GENERIC_CHAIN_CERTTRUST_FUNCTION   L"GenericChainCertificateTrust"
+#else
+static const WCHAR GENERIC_CHAIN_FINALPOLICY_FUNCTION[] =
+    {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0};
+static const WCHAR GENERIC_CHAIN_CERTTRUST_FUNCTION[] =
+    {'G','e','n','e','r','i','c','C','h','a','i','n','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
+#endif
+
+typedef struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO
+{
+    union {
+        DWORD cbStruct;
+        DWORD cbSize;
+    } DUMMYUNIONNAME;
+    PCCERT_CHAIN_CONTEXT pChainContext;
+    DWORD                dwSignerType;
+    PCMSG_SIGNER_INFO    pMsgSignerInfo;
+    DWORD                dwError;
+    DWORD                cCounterSigner;
+    struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO *rgpCounterSigner;
+} WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO, *PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;
+
+typedef HRESULT (WINAPI *PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK)(
+ PCRYPT_PROVIDER_DATA pProvData, DWORD dwStepError, DWORD dwRegPolicySettings,
+ DWORD cSigner, PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO rgpSigner,
+ void *pvPolicyArg);
+
+typedef struct _WTD_GENERIC_CHAIN_POLICY_CREATE_INFO
+{
+    union {
+        DWORD cbStruct;
+        DWORD cbSize;
+    } DUMMYUNIONNAME;
+    HCERTCHAINENGINE hChainEngine;
+    PCERT_CHAIN_PARA pChainPara;
+    DWORD            dwFlags;
+    void            *pvReserved;
+} WTD_GENERIC_CHAIN_POLICY_CREATE_INFO, *PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO;
+
+typedef struct _WTD_GENERIC_CHAIN_POLICY_DATA
+{
+    union {
+        DWORD cbStruct;
+        DWORD cbSize;
+    } DUMMYUNIONNAME;
+    PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pSignerChainInfo;
+    PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pCounterSignerChainInfo;
+    PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK pfnPolicyCallback;
+    void                                 *pvPolicyArg;
+} WTD_GENERIC_CHAIN_POLICY_DATA, *PWTD_GENERIC_CHAIN_POLICY_DATA;
+
+#if defined(__GNUC__)
+#define SP_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \
+    {'W','I','N','T','R','U','S','T','.','D','L','L' ,0}
+#elif defined(_MSC_VER)
+#define SP_POLICY_PROVIDER_DLL_NAME L"WINTRUST.DLL"
+#else
+static const WCHAR SP_POLICY_PROVIDER_DLL_NAME[] =
+    {'W','I','N','T','R','U','S','T','.','D','L','L', 0};
+#endif
+
+#define WINTRUST_ACTION_GENERIC_VERIFY_V2 \
+    { 0xaac56b,   0xcd44, 0x11d0, { 0x8c,0xc2,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define SP_INIT_FUNCTION          (const WCHAR []) \
+    {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0}
+#define SP_OBJTRUST_FUNCTION      (const WCHAR []) \
+    {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0}
+#define SP_SIGTRUST_FUNCTION      (const WCHAR []) \
+    {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0}
+#define SP_CHKCERT_FUNCTION       (const WCHAR []) \
+    {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0}
+#define SP_FINALPOLICY_FUNCTION   (const WCHAR []) \
+    {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0}
+#define SP_CLEANUPPOLICY_FUNCTION (const WCHAR []) \
+    {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0}
+#elif defined(_MSC_VER)
+#define SP_INIT_FUNCTION          L"SoftpubInitialize"
+#define SP_OBJTRUST_FUNCTION      L"SoftpubLoadMessage"
+#define SP_SIGTRUST_FUNCTION      L"SoftpubLoadSignature"
+#define SP_CHKCERT_FUNCTION       L"SoftpubCheckCert"
+#define SP_FINALPOLICY_FUNCTION   L"SoftpubAuthenticode"
+#define SP_CLEANUPPOLICY_FUNCTION L"SoftpubCleanup"
+#else
+static const WCHAR SP_INIT_FUNCTION[]          =
+    {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0};
+static const WCHAR SP_OBJTRUST_FUNCTION[]      =
+    {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0};
+static const WCHAR SP_SIGTRUST_FUNCTION[]      =
+    {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0};
+static const WCHAR SP_CHKCERT_FUNCTION[]       =
+    {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0};
+static const WCHAR SP_FINALPOLICY_FUNCTION[]   =
+    {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0};
+static const WCHAR SP_CLEANUPPOLICY_FUNCTION[] =
+    {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0};
+#endif
+
+#define WINTRUST_ACTION_TRUSTPROVIDER_TEST \
+    { 0x573e31f8, 0xddba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define SP_TESTDUMPPOLICY_FUNCTION_TEST (const WCHAR []) \
+    {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0}
+#elif defined(_MSC_VER)
+#define SP_TESTDUMPPOLICY_FUNCTION_TEST L"SoftpubDumpStructure"
+#else
+static const WCHAR SP_TESTDUMPPOLICY_FUNCTION_TEST[] =
+    {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0};
+#endif
+
+#define HTTPSPROV_ACTION \
+    { 0x573e31f8, 0xaaba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define HTTPS_CERTTRUST_FUNCTION (const WCHAR []) \
+    {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
+#define HTTPS_FINALPOLICY_FUNCTION (const WCHAR []) \
+    {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0}
+#elif defined(_MSC_VER)
+#define HTTPS_FINALPOLICY_FUNCTION L"HTTPSFinalProv"
+#define HTTPS_CERTTRUST_FUNCTION   L"HTTPSCertificateTrust"
+#else
+static const WCHAR HTTPS_CERTTRUST_FUNCTION[] =
+    {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
+static const WCHAR HTTPS_FINALPOLICY_FUNCTION[] =
+    {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0};
+#endif
+
+#define OFFICESIGN_ACTION_VERIFY \
+    { 0x5555c2cd, 0x17fb, 0x11d1, { 0x85,0xc4,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define OFFICE_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \
+    {'W','I','N','T','R','U','S','T','.','D','L','L' ,0}
+#define OFFICE_INITPROV_FUNCTION (const WCHAR []) \
+    {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}
+#define OFFICE_CLEANUPPOLICY_FUNCTION (const WCHAR []) \
+    {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}
+#elif defined(_MSC_VER)
+#define     OFFICE_POLICY_PROVIDER_DLL_NAME SP_POLICY_PROVIDER_DLL_NAME
+#define     OFFICE_INITPROV_FUNCTION        L"OfficeInitializePolicy"
+#define     OFFICE_CLEANUPPOLICY_FUNCTION   L"OfficeCleanupPolicy"
+#else
+static const WCHAR OFFICE_POLICY_PROVIDER_DLL_NAME[] =
+    {'W','I','N','T','R','U','S','T','.','D','L','L', 0};
+static const WCHAR OFFICE_INITPROV_FUNCTION[] =
+    {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0};
+static const WCHAR OFFICE_CLEANUPPOLICY_FUNCTION[] =
+    {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0};
+#endif
+
+#define DRIVER_ACTION_VERIFY \
+    { 0xf750e6c3, 0x38ee, 0x11d1, { 0x85,0xe5,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define DRIVER_INITPROV_FUNCTION (const WCHAR []) \
+    {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}
+#define DRIVER_FINALPOLPROV_FUNCTION (const WCHAR []) \
+    {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0}
+#define DRIVER_CLEANUPPOLICY_FUNCTION (const WCHAR []) \
+    {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}
+#elif defined(_MSC_VER)
+#define     DRIVER_INITPROV_FUNCTION      L"DriverInitializePolicy"
+#define     DRIVER_FINALPOLPROV_FUNCTION  L"DriverFinalPolicy"
+#define     DRIVER_CLEANUPPOLICY_FUNCTION L"DriverCleanupPolicy"
+#else
+static const WCHAR DRIVER_INITPROV_FUNCTION[] =
+    {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0};
+static const WCHAR DRIVER_FINALPOLPROV_FUNCTION[] =
+    {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0};
+static const WCHAR DRIVER_CLEANUPPOLICY_FUNCTION[] =
+    {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0};
+#endif
+
+typedef struct DRIVER_VER_MAJORMINOR_
+{
+    DWORD dwMajor;
+    DWORD dwMinor;
+} DRIVER_VER_MAJORMINOR;
+
+typedef struct DRIVER_VER_INFO_
+{
+    DWORD                 cbStruct;
+    ULONG_PTR             dwReserved1;
+    ULONG_PTR             dwReserved2;
+    DWORD                 dwPlatform;
+    DWORD                 dwVersion;
+    WCHAR                 wszVersion[MAX_PATH];
+    WCHAR                 wszSignedBy[MAX_PATH];
+    PCCERT_CONTEXT        pcSignerCertContext;
+    DRIVER_VER_MAJORMINOR sOSVersionLow;
+    DRIVER_VER_MAJORMINOR sOSVersionHigh;
+    DWORD                 dwBuildNumberLow;
+    DWORD                 dwBuildNumberHigh;
+} DRIVER_VER_INFO, *PDRIVER_VER_INFO;
+
+#endif /* __WINE_SOFTPUB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h
new file mode 100644
index 0000000..5e0b2c0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h
@@ -0,0 +1,755 @@
+/*
+ * ODBC definitions
+ *
+ * Copyright (C) 1999 Xiang Li
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SQL_H
+#define __SQL_H
+
+#ifndef ODBCVER
+#define ODBCVER 0x0351
+#endif
+
+#include <sqltypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SQL_NULL_DATA             (-1)
+#define SQL_DATA_AT_EXEC          (-2)
+#define SQL_SUCCESS                0
+#define SQL_SUCCESS_WITH_INFO      1
+#if (ODBCVER >= 0x0300)
+#define SQL_NO_DATA              100
+#endif
+#define SQL_ERROR                 (-1)
+#define SQL_INVALID_HANDLE        (-2)
+#define SQL_STILL_EXECUTING        2
+#define SQL_NEED_DATA             99
+#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
+
+#define SQL_NTS                   (-3)
+#define SQL_NTSL                  (__MSABI_LONG(-3))
+
+#define SQL_MAX_MESSAGE_LENGTH   512
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DATE_LEN           10
+#define SQL_TIME_LEN            8
+#define SQL_TIMESTAMP_LEN      19
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_HANDLE_ENV             1
+#define SQL_HANDLE_DBC             2
+#define SQL_HANDLE_STMT            3
+#define SQL_HANDLE_DESC            4
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_OUTPUT_NTS    10001
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_AUTO_IPD      10001
+#define SQL_ATTR_METADATA_ID   10014
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_APP_ROW_DESC       10010
+#define SQL_ATTR_APP_PARAM_DESC     10011
+#define SQL_ATTR_IMP_ROW_DESC       10012
+#define SQL_ATTR_IMP_PARAM_DESC     10013
+#define SQL_ATTR_CURSOR_SCROLLABLE  (-1)
+#define SQL_ATTR_CURSOR_SENSITIVITY (-2)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NONSCROLLABLE			0
+#define SQL_SCROLLABLE				1
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_COUNT                  1001
+#define SQL_DESC_TYPE                   1002
+#define SQL_DESC_LENGTH                 1003
+#define SQL_DESC_OCTET_LENGTH_PTR       1004
+#define SQL_DESC_PRECISION              1005
+#define SQL_DESC_SCALE                  1006
+#define SQL_DESC_DATETIME_INTERVAL_CODE 1007
+#define SQL_DESC_NULLABLE               1008
+#define SQL_DESC_INDICATOR_PTR          1009
+#define SQL_DESC_DATA_PTR               1010
+#define SQL_DESC_NAME                   1011
+#define SQL_DESC_UNNAMED                1012
+#define SQL_DESC_OCTET_LENGTH           1013
+#define SQL_DESC_ALLOC_TYPE             1099
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DIAG_RETURNCODE        1
+#define SQL_DIAG_NUMBER            2
+#define SQL_DIAG_ROW_COUNT         3
+#define SQL_DIAG_SQLSTATE          4
+#define SQL_DIAG_NATIVE            5
+#define SQL_DIAG_MESSAGE_TEXT      6
+#define SQL_DIAG_DYNAMIC_FUNCTION  7
+#define SQL_DIAG_CLASS_ORIGIN      8
+#define SQL_DIAG_SUBCLASS_ORIGIN   9
+#define SQL_DIAG_CONNECTION_NAME  10
+#define SQL_DIAG_SERVER_NAME      11
+#define SQL_DIAG_DYNAMIC_FUNCTION_CODE 12
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DIAG_ALTER_DOMAIN			3
+#define SQL_DIAG_ALTER_TABLE            4
+#define SQL_DIAG_CALL					7
+#define SQL_DIAG_CREATE_ASSERTION		6
+#define SQL_DIAG_CREATE_CHARACTER_SET	8
+#define SQL_DIAG_CREATE_COLLATION		10
+#define SQL_DIAG_CREATE_DOMAIN			23
+#define SQL_DIAG_CREATE_INDEX          (-1)
+#define SQL_DIAG_CREATE_SCHEMA			64
+#define SQL_DIAG_CREATE_TABLE          77
+#define SQL_DIAG_CREATE_TRANSLATION		79
+#define SQL_DIAG_CREATE_VIEW           84
+#define SQL_DIAG_DELETE_WHERE          19
+#define	SQL_DIAG_DROP_ASSERTION			24
+#define	SQL_DIAG_DROP_CHARACTER_SET		25
+#define	SQL_DIAG_DROP_COLLATION			26
+#define	SQL_DIAG_DROP_DOMAIN			27
+#define SQL_DIAG_DROP_INDEX            (-2)
+#define SQL_DIAG_DROP_SCHEMA			31
+#define SQL_DIAG_DROP_TABLE            32
+#define SQL_DIAG_DROP_TRANSLATION      33
+#define SQL_DIAG_DROP_VIEW             36
+#define SQL_DIAG_DYNAMIC_DELETE_CURSOR 38
+#define SQL_DIAG_DYNAMIC_UPDATE_CURSOR 81
+#define SQL_DIAG_GRANT                 48
+#define SQL_DIAG_INSERT                50
+#define SQL_DIAG_REVOKE                59
+#define SQL_DIAG_SELECT_CURSOR         85
+#define SQL_DIAG_UNKNOWN_STATEMENT      0
+#define SQL_DIAG_UPDATE_WHERE          82
+#endif
+
+#define	SQL_UNKNOWN_TYPE	0
+#define SQL_CHAR            1
+#define SQL_NUMERIC         2
+#define SQL_DECIMAL         3
+#define SQL_INTEGER         4
+#define SQL_SMALLINT        5
+#define SQL_FLOAT           6
+#define SQL_REAL            7
+#define SQL_DOUBLE          8
+#if (ODBCVER >= 0x0300)
+#define SQL_DATETIME        9
+#endif
+#define SQL_VARCHAR        12
+
+#if (ODBCVER >= 0x0300)
+#define SQL_TYPE_DATE      91
+#define SQL_TYPE_TIME      92
+#define SQL_TYPE_TIMESTAMP 93
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_UNSPECIFIED     0
+#define SQL_INSENSITIVE     1
+#define SQL_SENSITIVE       2
+#endif
+
+#define SQL_ALL_TYPES       0
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DEFAULT        99
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ARD_TYPE      (-99)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CODE_DATE       1
+#define SQL_CODE_TIME       2
+#define SQL_CODE_TIMESTAMP  3
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_FALSE           0
+#define SQL_TRUE            1
+#endif
+
+#define SQL_NO_NULLS        0
+#define SQL_NULLABLE        1
+
+#define SQL_NULLABLE_UNKNOWN  2
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PRED_NONE     0
+#define SQL_PRED_CHAR     1
+#define SQL_PRED_BASIC    2
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NAMED           0
+#define SQL_UNNAMED         1
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_ALLOC_AUTO 1
+#define SQL_DESC_ALLOC_USER 2
+#endif
+
+#define SQL_CLOSE           0
+#define SQL_DROP            1
+#define SQL_UNBIND          2
+#define SQL_RESET_PARAMS    3
+#define SQL_FETCH_NEXT      1
+#define SQL_FETCH_FIRST     2
+#define SQL_FETCH_LAST      3
+#define SQL_FETCH_PRIOR     4
+#define SQL_FETCH_ABSOLUTE  5
+#define SQL_FETCH_RELATIVE  6
+
+#define SQL_COMMIT          0
+#define SQL_ROLLBACK        1
+
+#define SQL_NULL_HENV       0
+#define SQL_NULL_HDBC       0
+#define SQL_NULL_HSTMT      0
+#if (ODBCVER >= 0x0300)
+#define SQL_NULL_HDESC      0
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NULL_HANDLE     __MSABI_LONG(0)
+#endif
+
+#define SQL_SCOPE_CURROW    0
+#define SQL_SCOPE_TRANSACTION 1
+#define SQL_SCOPE_SESSION   2
+
+#define SQL_PC_UNKNOWN      0
+#if (ODBCVER >= 0x0300)
+#define SQL_PC_NON_PSEUDO   1
+#endif
+#define SQL_PC_PSEUDO       2
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ROW_IDENTIFIER  1
+#endif
+
+#define SQL_INDEX_UNIQUE    0
+#define SQL_INDEX_ALL       1
+
+#define SQL_INDEX_CLUSTERED 1
+#define SQL_INDEX_HASHED    2
+#define SQL_INDEX_OTHER     3
+
+#define SQL_API_SQLALLOCCONNECT         1
+#define SQL_API_SQLALLOCENV             2
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLALLOCHANDLE       1001
+#endif
+#define SQL_API_SQLALLOCSTMT            3
+#define SQL_API_SQLBINDCOL              4
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLBINDPARAM         1002
+#endif
+#define SQL_API_SQLCANCEL               5
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLCLOSECURSOR       1003
+#define SQL_API_SQLCOLATTRIBUTE         6
+#endif
+#define SQL_API_SQLCOLUMNS             40
+#define SQL_API_SQLCONNECT              7
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLCOPYDESC          1004
+#endif
+#define SQL_API_SQLDATASOURCES         57
+#define SQL_API_SQLDESCRIBECOL          8
+#define SQL_API_SQLDISCONNECT           9
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLENDTRAN           1005
+#endif
+#define SQL_API_SQLERROR               10
+#define SQL_API_SQLEXECDIRECT          11
+#define SQL_API_SQLEXECUTE             12
+#define SQL_API_SQLFETCH               13
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLFETCHSCROLL       1021
+#endif
+#define SQL_API_SQLFREECONNECT         14
+#define SQL_API_SQLFREEENV             15
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLFREEHANDLE        1006
+#endif
+#define SQL_API_SQLFREESTMT            16
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLGETCONNECTATTR    1007
+#endif
+#define SQL_API_SQLGETCONNECTOPTION    42
+#define SQL_API_SQLGETCURSORNAME       17
+#define SQL_API_SQLGETDATA             43
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLGETDESCFIELD      1008
+#define SQL_API_SQLGETDESCREC        1009
+#define SQL_API_SQLGETDIAGFIELD      1010
+#define SQL_API_SQLGETDIAGREC        1011
+#define SQL_API_SQLGETENVATTR        1012
+#endif
+#define SQL_API_SQLGETFUNCTIONS        44
+#define SQL_API_SQLGETINFO             45
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLGETSTMTATTR       1014
+#endif
+#define SQL_API_SQLGETSTMTOPTION       46
+#define SQL_API_SQLGETTYPEINFO         47
+#define SQL_API_SQLNUMRESULTCOLS       18
+#define SQL_API_SQLPARAMDATA           48
+#define SQL_API_SQLPREPARE             19
+#define SQL_API_SQLPUTDATA             49
+#define SQL_API_SQLROWCOUNT            20
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLSETCONNECTATTR    1016
+#endif
+#define SQL_API_SQLSETCONNECTOPTION    50
+#define SQL_API_SQLSETCURSORNAME       21
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLSETDESCFIELD      1017
+#define SQL_API_SQLSETDESCREC        1018
+#define SQL_API_SQLSETENVATTR        1019
+#endif
+#define SQL_API_SQLSETPARAM            22
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLSETSTMTATTR       1020
+#endif
+#define SQL_API_SQLSETSTMTOPTION       51
+#define SQL_API_SQLSPECIALCOLUMNS      52
+#define SQL_API_SQLSTATISTICS          53
+#define SQL_API_SQLTABLES              54
+#define SQL_API_SQLTRANSACT            23
+
+#if (ODBCVER >= 0x0300)
+#define SQL_MAX_DRIVER_CONNECTIONS           0
+#define SQL_MAXIMUM_DRIVER_CONNECTIONS		SQL_MAX_DRIVER_CONNECTIONS
+#define SQL_MAX_CONCURRENT_ACTIVITIES        1
+#define SQL_MAXIMUM_CONCURRENT_ACTIVITIES	SQL_MAX_CONCURRENT_ACTIVITIES
+#endif
+#define SQL_DATA_SOURCE_NAME                 2
+#define SQL_FETCH_DIRECTION                  8
+#define SQL_SERVER_NAME                     13
+#define SQL_SEARCH_PATTERN_ESCAPE           14
+#define SQL_DBMS_NAME                       17
+#define SQL_DBMS_VER                        18
+#define SQL_ACCESSIBLE_TABLES               19
+#define SQL_ACCESSIBLE_PROCEDURES        	20
+#define SQL_CURSOR_COMMIT_BEHAVIOR          23
+#define SQL_DATA_SOURCE_READ_ONLY           25
+#define SQL_DEFAULT_TXN_ISOLATION           26
+#define SQL_IDENTIFIER_CASE                 28
+#define SQL_IDENTIFIER_QUOTE_CHAR           29
+#define SQL_MAX_COLUMN_NAME_LEN             30
+#define SQL_MAXIMUM_COLUMN_NAME_LENGTH		SQL_MAX_COLUMN_NAME_LEN
+#define SQL_MAX_CURSOR_NAME_LEN             31
+#define SQL_MAXIMUM_CURSOR_NAME_LENGTH		SQL_MAX_CURSOR_NAME_LEN
+#define SQL_MAX_SCHEMA_NAME_LEN             32
+#define SQL_MAXIMUM_SCHEMA_NAME_LENGTH		SQL_MAX_SCHEMA_NAME_LEN
+#define SQL_MAX_CATALOG_NAME_LEN            34
+#define SQL_MAXIMUM_CATALOG_NAME_LENGTH		SQL_MAX_CATALOG_NAME_LEN
+#define SQL_MAX_TABLE_NAME_LEN              35
+#define SQL_SCROLL_CONCURRENCY              43
+#define SQL_TXN_CAPABLE                     46
+#define SQL_TRANSACTION_CAPABLE				SQL_TXN_CAPABLE
+#define SQL_USER_NAME                       47
+#define SQL_TXN_ISOLATION_OPTION            72
+#define SQL_TRANSACTION_ISOLATION_OPTION	SQL_TXN_ISOLATION_OPTION
+#define SQL_INTEGRITY                       73
+#define SQL_GETDATA_EXTENSIONS              81
+#define SQL_NULL_COLLATION                  85
+#define SQL_ALTER_TABLE                     86
+#define SQL_ORDER_BY_COLUMNS_IN_SELECT      90
+#define SQL_SPECIAL_CHARACTERS              94
+#define SQL_MAX_COLUMNS_IN_GROUP_BY         97
+#define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY		SQL_MAX_COLUMNS_IN_GROUP_BY
+#define SQL_MAX_COLUMNS_IN_INDEX            98
+#define SQL_MAXIMUM_COLUMNS_IN_INDEX		SQL_MAX_COLUMNS_IN_INDEX
+#define SQL_MAX_COLUMNS_IN_ORDER_BY         99
+#define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY		SQL_MAX_COLUMNS_IN_ORDER_BY
+#define SQL_MAX_COLUMNS_IN_SELECT          100
+#define SQL_MAXIMUM_COLUMNS_IN_SELECT	   SQL_MAX_COLUMNS_IN_SELECT
+#define SQL_MAX_COLUMNS_IN_TABLE           101
+#define SQL_MAX_INDEX_SIZE                 102
+#define SQL_MAXIMUM_INDEX_SIZE			   SQL_MAX_INDEX_SIZE
+#define SQL_MAX_ROW_SIZE                   104
+#define SQL_MAXIMUM_ROW_SIZE			   SQL_MAX_ROW_SIZE
+#define SQL_MAX_STATEMENT_LEN              105
+#define SQL_MAXIMUM_STATEMENT_LENGTH	   SQL_MAX_STATEMENT_LEN
+#define SQL_MAX_TABLES_IN_SELECT           106
+#define SQL_MAXIMUM_TABLES_IN_SELECT	   SQL_MAX_TABLES_IN_SELECT
+#define SQL_MAX_USER_NAME_LEN              107
+#define SQL_MAXIMUM_USER_NAME_LENGTH	   SQL_MAX_USER_NAME_LEN
+#if (ODBCVER >= 0x0300)
+#define SQL_OJ_CAPABILITIES                115
+#define SQL_OUTER_JOIN_CAPABILITIES		   SQL_OJ_CAPABILITIES
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_XOPEN_CLI_YEAR               10000
+#define SQL_CURSOR_SENSITIVITY           10001
+#define SQL_DESCRIBE_PARAMETER           10002
+#define SQL_CATALOG_NAME                 10003
+#define SQL_COLLATION_SEQ                10004
+#define SQL_MAX_IDENTIFIER_LEN           10005
+#define SQL_MAXIMUM_IDENTIFIER_LENGTH	 SQL_MAX_IDENTIFIER_LEN
+#endif
+
+#if (ODBCVER >= 0x0200)
+#define SQL_AT_ADD_COLUMN                   __MSABI_LONG(0x00000001)
+#define SQL_AT_DROP_COLUMN                  __MSABI_LONG(0x00000002)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AT_ADD_CONSTRAINT               __MSABI_LONG(0x00000008)
+
+#endif  /* ODBCVER >= 0x0300 */
+
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AM_NONE                         0
+#define SQL_AM_CONNECTION                   1
+#define SQL_AM_STATEMENT                    2
+#endif
+
+#define SQL_CB_DELETE                       0
+#define SQL_CB_CLOSE                        1
+#define SQL_CB_PRESERVE                     2
+
+#define SQL_FD_FETCH_NEXT                   __MSABI_LONG(0x00000001)
+#define SQL_FD_FETCH_FIRST                  __MSABI_LONG(0x00000002)
+#define SQL_FD_FETCH_LAST                   __MSABI_LONG(0x00000004)
+#define SQL_FD_FETCH_PRIOR                  __MSABI_LONG(0x00000008)
+#define SQL_FD_FETCH_ABSOLUTE               __MSABI_LONG(0x00000010)
+#define SQL_FD_FETCH_RELATIVE               __MSABI_LONG(0x00000020)
+
+#define SQL_GD_ANY_COLUMN                   __MSABI_LONG(0x00000001)
+#define SQL_GD_ANY_ORDER                    __MSABI_LONG(0x00000002)
+
+#define SQL_IC_UPPER                        1
+#define SQL_IC_LOWER                        2
+#define SQL_IC_SENSITIVE                    3
+#define SQL_IC_MIXED                        4
+
+#if (ODBCVER >= 0x0201)
+#define SQL_OJ_LEFT                         __MSABI_LONG(0x00000001)
+#define SQL_OJ_RIGHT                        __MSABI_LONG(0x00000002)
+#define SQL_OJ_FULL                         __MSABI_LONG(0x00000004)
+#define SQL_OJ_NESTED                       __MSABI_LONG(0x00000008)
+#define SQL_OJ_NOT_ORDERED                  __MSABI_LONG(0x00000010)
+#define SQL_OJ_INNER                        __MSABI_LONG(0x00000020)
+#define SQL_OJ_ALL_COMPARISON_OPS           __MSABI_LONG(0x00000040)
+#endif
+
+#define SQL_SCCO_READ_ONLY                  __MSABI_LONG(0x00000001)
+#define SQL_SCCO_LOCK                       __MSABI_LONG(0x00000002)
+#define SQL_SCCO_OPT_ROWVER                 __MSABI_LONG(0x00000004)
+#define SQL_SCCO_OPT_VALUES                 __MSABI_LONG(0x00000008)
+
+#define SQL_TC_NONE                         0
+#define SQL_TC_DML                          1
+#define SQL_TC_ALL                          2
+#define SQL_TC_DDL_COMMIT                   3
+#define SQL_TC_DDL_IGNORE                   4
+
+#define SQL_TXN_READ_UNCOMMITTED            __MSABI_LONG(0x00000001)
+#define SQL_TRANSACTION_READ_UNCOMMITTED	SQL_TXN_READ_UNCOMMITTED
+#define SQL_TXN_READ_COMMITTED              __MSABI_LONG(0x00000002)
+#define SQL_TRANSACTION_READ_COMMITTED		SQL_TXN_READ_COMMITTED
+#define SQL_TXN_REPEATABLE_READ             __MSABI_LONG(0x00000004)
+#define SQL_TRANSACTION_REPEATABLE_READ		SQL_TXN_REPEATABLE_READ
+#define SQL_TXN_SERIALIZABLE                __MSABI_LONG(0x00000008)
+#define SQL_TRANSACTION_SERIALIZABLE		SQL_TXN_SERIALIZABLE
+
+#define SQL_NC_HIGH                         0
+#define SQL_NC_LOW                          1
+
+SQLRETURN WINAPI   SQLAllocConnect(SQLHENV EnvironmentHandle,
+           SQLHDBC *ConnectionHandle);
+
+SQLRETURN WINAPI   SQLAllocEnv(SQLHENV *EnvironmentHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLAllocHandle(SQLSMALLINT HandleType,
+           SQLHANDLE InputHandle, SQLHANDLE *OutputHandle);
+#endif
+
+SQLRETURN WINAPI   SQLAllocStmt(SQLHDBC ConnectionHandle,
+           SQLHSTMT *StatementHandle);
+
+SQLRETURN WINAPI   SQLBindCol(SQLHSTMT StatementHandle,
+		   SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
+		   SQLPOINTER TargetValue, SQLINTEGER BufferLength,
+	   	   SQLINTEGER *StrLen_or_Ind);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLBindParam(SQLHSTMT StatementHandle,
+           SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
+           SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
+           SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
+           SQLINTEGER *StrLen_or_Ind);
+#endif
+
+SQLRETURN WINAPI   SQLCancel(SQLHSTMT StatementHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLCloseCursor(SQLHSTMT StatementHandle);
+
+SQLRETURN WINAPI   SQLColAttribute (SQLHSTMT StatementHandle,
+           SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
+           SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
+           SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute);
+#endif
+
+
+SQLRETURN WINAPI   SQLColumns(SQLHSTMT StatementHandle,
+           SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
+           SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
+           SQLCHAR *TableName, SQLSMALLINT NameLength3,
+           SQLCHAR *ColumnName, SQLSMALLINT NameLength4);
+
+
+SQLRETURN WINAPI   SQLConnect(SQLHDBC ConnectionHandle,
+           SQLCHAR *ServerName, SQLSMALLINT NameLength1,
+           SQLCHAR *UserName, SQLSMALLINT NameLength2,
+           SQLCHAR *Authentication, SQLSMALLINT NameLength3);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLCopyDesc(SQLHDESC SourceDescHandle,
+           SQLHDESC TargetDescHandle);
+#endif
+
+SQLRETURN WINAPI   SQLDataSources(SQLHENV EnvironmentHandle,
+           SQLUSMALLINT Direction, SQLCHAR *ServerName,
+           SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
+           SQLCHAR *Description, SQLSMALLINT BufferLength2,
+           SQLSMALLINT *NameLength2);
+
+SQLRETURN WINAPI   SQLDescribeCol(SQLHSTMT StatementHandle,
+           SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
+           SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
+           SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
+           SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable);
+
+SQLRETURN WINAPI   SQLDisconnect(SQLHDBC ConnectionHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle,
+           SQLSMALLINT CompletionType);
+#endif
+
+SQLRETURN WINAPI   SQLError(SQLHENV EnvironmentHandle,
+           SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
+           SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
+           SQLCHAR *MessageText, SQLSMALLINT BufferLength,
+           SQLSMALLINT *TextLength);
+
+SQLRETURN WINAPI   SQLExecDirect(SQLHSTMT StatementHandle,
+           SQLCHAR *StatementText, SQLINTEGER TextLength);
+
+SQLRETURN WINAPI   SQLExecute(SQLHSTMT StatementHandle);
+
+SQLRETURN WINAPI   SQLFetch(SQLHSTMT StatementHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLFetchScroll(SQLHSTMT StatementHandle,
+           SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset);
+#endif
+
+SQLRETURN WINAPI   SQLFreeConnect(SQLHDBC ConnectionHandle);
+
+SQLRETURN WINAPI   SQLFreeEnv(SQLHENV EnvironmentHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle);
+#endif
+
+SQLRETURN WINAPI   SQLFreeStmt(SQLHSTMT StatementHandle,
+           SQLUSMALLINT Option);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLGetConnectAttr(SQLHDBC ConnectionHandle,
+           SQLINTEGER Attribute, SQLPOINTER Value,
+           SQLINTEGER BufferLength, SQLINTEGER *StringLength);
+#endif
+
+SQLRETURN WINAPI   SQLGetConnectOption(SQLHDBC ConnectionHandle,
+           SQLUSMALLINT Option, SQLPOINTER Value);
+
+SQLRETURN WINAPI   SQLGetCursorName(SQLHSTMT StatementHandle,
+           SQLCHAR *CursorName, SQLSMALLINT BufferLength,
+           SQLSMALLINT *NameLength);
+
+SQLRETURN WINAPI   SQLGetData(SQLHSTMT StatementHandle,
+           SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
+           SQLPOINTER TargetValue, SQLINTEGER BufferLength,
+           SQLINTEGER *StrLen_or_Ind);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLGetDescField(SQLHDESC DescriptorHandle,
+           SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
+           SQLPOINTER Value, SQLINTEGER BufferLength,
+           SQLINTEGER *StringLength);
+
+SQLRETURN WINAPI   SQLGetDescRec(SQLHDESC DescriptorHandle,
+           SQLSMALLINT RecNumber, SQLCHAR *Name,
+           SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
+           SQLSMALLINT *Type, SQLSMALLINT *SubType,
+           SQLINTEGER *Length, SQLSMALLINT *Precision,
+           SQLSMALLINT *Scale, SQLSMALLINT *Nullable);
+
+SQLRETURN WINAPI   SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
+           SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
+           SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
+           SQLSMALLINT *StringLength);
+
+SQLRETURN WINAPI   SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
+           SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
+           SQLINTEGER *NativeError, SQLCHAR *MessageText,
+           SQLSMALLINT BufferLength, SQLSMALLINT *TextLength);
+
+SQLRETURN WINAPI   SQLGetEnvAttr(SQLHENV EnvironmentHandle,
+           SQLINTEGER Attribute, SQLPOINTER Value,
+           SQLINTEGER BufferLength, SQLINTEGER *StringLength);
+#endif
+
+SQLRETURN WINAPI   SQLGetFunctions(SQLHDBC ConnectionHandle,
+           SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported);
+
+SQLRETURN WINAPI   SQLGetInfo(SQLHDBC ConnectionHandle,
+           SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
+           SQLSMALLINT BufferLength, SQLSMALLINT *StringLength);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLGetStmtAttr(SQLHSTMT StatementHandle,
+           SQLINTEGER Attribute, SQLPOINTER Value,
+           SQLINTEGER BufferLength, SQLINTEGER *StringLength);
+#endif
+
+SQLRETURN WINAPI   SQLGetStmtOption(SQLHSTMT StatementHandle,
+           SQLUSMALLINT Option, SQLPOINTER Value);
+
+SQLRETURN WINAPI   SQLGetTypeInfo(SQLHSTMT StatementHandle,
+           SQLSMALLINT DataType);
+
+SQLRETURN WINAPI   SQLNumResultCols(SQLHSTMT StatementHandle,
+           SQLSMALLINT *ColumnCount);
+
+SQLRETURN WINAPI   SQLParamData(SQLHSTMT StatementHandle,
+           SQLPOINTER *Value);
+
+SQLRETURN WINAPI   SQLPrepare(SQLHSTMT StatementHandle,
+           SQLCHAR *StatementText, SQLINTEGER TextLength);
+
+SQLRETURN WINAPI   SQLPutData(SQLHSTMT StatementHandle,
+           SQLPOINTER Data, SQLINTEGER StrLen_or_Ind);
+
+SQLRETURN WINAPI   SQLRowCount(SQLHSTMT StatementHandle,
+	   SQLINTEGER *RowCount);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLSetConnectAttr(SQLHDBC ConnectionHandle,
+           SQLINTEGER Attribute, SQLPOINTER Value,
+           SQLINTEGER StringLength);
+#endif
+
+SQLRETURN WINAPI   SQLSetConnectOption(SQLHDBC ConnectionHandle,
+           SQLUSMALLINT Option, SQLUINTEGER Value);
+
+SQLRETURN WINAPI   SQLSetCursorName(SQLHSTMT StatementHandle,
+           SQLCHAR *CursorName, SQLSMALLINT NameLength);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLSetDescField(SQLHDESC DescriptorHandle,
+           SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
+           SQLPOINTER Value, SQLINTEGER BufferLength);
+
+SQLRETURN WINAPI   SQLSetDescRec(SQLHDESC DescriptorHandle,
+           SQLSMALLINT RecNumber, SQLSMALLINT Type,
+           SQLSMALLINT SubType, SQLINTEGER Length,
+           SQLSMALLINT Precision, SQLSMALLINT Scale,
+           SQLPOINTER Data, SQLINTEGER *StringLength,
+           SQLINTEGER *Indicator);
+
+SQLRETURN WINAPI   SQLSetEnvAttr(SQLHENV EnvironmentHandle,
+           SQLINTEGER Attribute, SQLPOINTER Value,
+           SQLINTEGER StringLength);
+#endif
+
+SQLRETURN WINAPI   SQLSetParam(SQLHSTMT StatementHandle,
+           SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
+           SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
+           SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
+           SQLINTEGER *StrLen_or_Ind);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI   SQLSetStmtAttr(SQLHSTMT StatementHandle,
+           SQLINTEGER Attribute, SQLPOINTER Value,
+           SQLINTEGER StringLength);
+#endif
+
+SQLRETURN WINAPI   SQLSetStmtOption(SQLHSTMT StatementHandle,
+           SQLUSMALLINT Option, SQLUINTEGER Value);
+
+SQLRETURN WINAPI   SQLSpecialColumns(SQLHSTMT StatementHandle,
+           SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
+           SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
+           SQLSMALLINT NameLength2, SQLCHAR *TableName,
+           SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
+           SQLUSMALLINT Nullable);
+
+SQLRETURN WINAPI   SQLStatistics(SQLHSTMT StatementHandle,
+           SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
+           SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
+           SQLCHAR *TableName, SQLSMALLINT NameLength3,
+           SQLUSMALLINT Unique, SQLUSMALLINT Reserved);
+
+SQLRETURN WINAPI   SQLTables(SQLHSTMT StatementHandle,
+           SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
+           SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
+           SQLCHAR *TableName, SQLSMALLINT NameLength3,
+           SQLCHAR *TableType, SQLSMALLINT NameLength4);
+
+SQLRETURN WINAPI   SQLTransact(SQLHENV EnvironmentHandle,
+           SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h
new file mode 100644
index 0000000..f97050f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h
@@ -0,0 +1,1682 @@
+/*
+ * MS SQL Extension definitions
+ *
+ * Copyright (C) 1999 Xiang Li
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SQLEXT_H
+#define __SQLEXT_H
+
+#include <sql.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SQL_SPEC_MAJOR     3
+#define SQL_SPEC_MINOR	   51
+#define SQL_SPEC_STRING   "03.51"
+
+#define SQL_SQLSTATE_SIZE	5
+#define SQL_MAX_DSN_LENGTH	32
+
+#define SQL_MAX_OPTION_STRING_LENGTH    256
+
+#if (ODBCVER < 0x0300)
+#define SQL_NO_DATA_FOUND	100
+#else
+#define SQL_NO_DATA_FOUND	SQL_NO_DATA
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define	SQL_HANDLE_SENV		5
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_ODBC_VERSION				200
+#define SQL_ATTR_CONNECTION_POOLING			201
+#define SQL_ATTR_CP_MATCH					202
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CP_OFF                      __MSABI_LONG(0U)
+#define SQL_CP_ONE_PER_DRIVER           __MSABI_LONG(1U)
+#define SQL_CP_ONE_PER_HENV             __MSABI_LONG(2U)
+#define SQL_CP_DEFAULT						SQL_CP_OFF
+
+#define SQL_CP_STRICT_MATCH             __MSABI_LONG(0U)
+#define SQL_CP_RELAXED_MATCH            __MSABI_LONG(1U)
+#define SQL_CP_MATCH_DEFAULT				SQL_CP_STRICT_MATCH
+
+#define SQL_OV_ODBC2                    __MSABI_LONG(2U)
+#define SQL_OV_ODBC3                    __MSABI_LONG(3U)
+#endif
+
+#define SQL_ACCESS_MODE                 101
+#define SQL_AUTOCOMMIT                  102
+#define SQL_LOGIN_TIMEOUT               103
+#define SQL_OPT_TRACE                   104
+#define SQL_OPT_TRACEFILE               105
+#define SQL_TRANSLATE_DLL               106
+#define SQL_TRANSLATE_OPTION            107
+#define SQL_TXN_ISOLATION               108
+#define SQL_CURRENT_QUALIFIER           109
+#define SQL_ODBC_CURSORS                110
+#define SQL_QUIET_MODE                  111
+#define SQL_PACKET_SIZE                 112
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_ACCESS_MODE		SQL_ACCESS_MODE
+#define SQL_ATTR_AUTOCOMMIT			SQL_AUTOCOMMIT
+#define SQL_ATTR_CONNECTION_TIMEOUT	113
+#define SQL_ATTR_CURRENT_CATALOG	SQL_CURRENT_QUALIFIER
+#define SQL_ATTR_DISCONNECT_BEHAVIOR	114
+#define SQL_ATTR_ENLIST_IN_DTC		1207
+#define SQL_ATTR_ENLIST_IN_XA		1208
+#define SQL_ATTR_LOGIN_TIMEOUT		SQL_LOGIN_TIMEOUT
+#define SQL_ATTR_ODBC_CURSORS		SQL_ODBC_CURSORS
+#define SQL_ATTR_PACKET_SIZE		SQL_PACKET_SIZE
+#define SQL_ATTR_QUIET_MODE			SQL_QUIET_MODE
+#define SQL_ATTR_TRACE				SQL_OPT_TRACE
+#define SQL_ATTR_TRACEFILE			SQL_OPT_TRACEFILE
+#define SQL_ATTR_TRANSLATE_LIB		SQL_TRANSLATE_DLL
+#define SQL_ATTR_TRANSLATE_OPTION	SQL_TRANSLATE_OPTION
+#define SQL_ATTR_TXN_ISOLATION		SQL_TXN_ISOLATION
+#endif
+
+#define SQL_ATTR_CONNECTION_DEAD	1209
+
+#if (ODBCVER >= 0x0351)
+#define SQL_ATTR_ANSI_APP			115
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_CONNECT_OPT_DRVR_START      1000
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_CONN_OPT_MAX                SQL_PACKET_SIZE
+#define SQL_CONN_OPT_MIN                SQL_ACCESS_MODE
+#endif
+
+#define SQL_MODE_READ_WRITE             __MSABI_LONG(0U)
+#define SQL_MODE_READ_ONLY              __MSABI_LONG(1U)
+#define SQL_MODE_DEFAULT                SQL_MODE_READ_WRITE
+
+#define SQL_AUTOCOMMIT_OFF              __MSABI_LONG(0U)
+#define SQL_AUTOCOMMIT_ON               __MSABI_LONG(1U)
+#define SQL_AUTOCOMMIT_DEFAULT          SQL_AUTOCOMMIT_ON
+
+#define SQL_LOGIN_TIMEOUT_DEFAULT       __MSABI_LONG(15U)
+
+#define SQL_OPT_TRACE_OFF               __MSABI_LONG(0U)
+#define SQL_OPT_TRACE_ON                __MSABI_LONG(1U)
+#define SQL_OPT_TRACE_DEFAULT           SQL_OPT_TRACE_OFF
+#define SQL_OPT_TRACE_FILE_DEFAULT      "\\SQL.LOG"
+
+#define SQL_CUR_USE_IF_NEEDED           __MSABI_LONG(0U)
+#define SQL_CUR_USE_ODBC                __MSABI_LONG(1U)
+#define SQL_CUR_USE_DRIVER              __MSABI_LONG(2U)
+#define SQL_CUR_DEFAULT                 SQL_CUR_USE_DRIVER
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DB_RETURN_TO_POOL           __MSABI_LONG(0U)
+#define SQL_DB_DISCONNECT               __MSABI_LONG(1U)
+#define SQL_DB_DEFAULT					SQL_DB_RETURN_TO_POOL
+
+#define SQL_DTC_DONE                    __MSABI_LONG(0)
+#endif
+
+#define SQL_CD_TRUE                     __MSABI_LONG(1)
+#define SQL_CD_FALSE                    __MSABI_LONG(0)
+
+#if (ODBCVER >= 0x0351)
+#define SQL_AA_TRUE                     __MSABI_LONG(1)
+#define SQL_AA_FALSE                    __MSABI_LONG(0)
+#endif
+
+#define SQL_QUERY_TIMEOUT		0
+#define SQL_MAX_ROWS			1
+#define SQL_NOSCAN			2
+#define SQL_MAX_LENGTH			3
+#define SQL_ASYNC_ENABLE		4
+#define SQL_BIND_TYPE			5
+#define SQL_CURSOR_TYPE			6
+#define SQL_CONCURRENCY			7
+#define SQL_KEYSET_SIZE			8
+#define SQL_ROWSET_SIZE			9
+#define SQL_SIMULATE_CURSOR		10
+#define SQL_RETRIEVE_DATA		11
+#define SQL_USE_BOOKMARKS		12
+#define SQL_GET_BOOKMARK		13
+#define SQL_ROW_NUMBER			14
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_ASYNC_ENABLE				4
+#define SQL_ATTR_CONCURRENCY				SQL_CONCURRENCY
+#define SQL_ATTR_CURSOR_TYPE				SQL_CURSOR_TYPE
+#define	SQL_ATTR_ENABLE_AUTO_IPD			15
+#define SQL_ATTR_FETCH_BOOKMARK_PTR			16
+#define SQL_ATTR_KEYSET_SIZE				SQL_KEYSET_SIZE
+#define SQL_ATTR_MAX_LENGTH				SQL_MAX_LENGTH
+#define SQL_ATTR_MAX_ROWS				SQL_MAX_ROWS
+#define SQL_ATTR_NOSCAN					SQL_NOSCAN
+#define SQL_ATTR_PARAM_BIND_OFFSET_PTR			17
+#define	SQL_ATTR_PARAM_BIND_TYPE			18
+#define SQL_ATTR_PARAM_OPERATION_PTR			19
+#define SQL_ATTR_PARAM_STATUS_PTR			20
+#define	SQL_ATTR_PARAMS_PROCESSED_PTR			21
+#define SQL_ATTR_RETRIEVE_DATA				SQL_RETRIEVE_DATA
+#define SQL_ATTR_ROW_BIND_OFFSET_PTR			23
+#define	SQL_ATTR_ROW_BIND_TYPE				SQL_BIND_TYPE
+#define SQL_ATTR_ROW_NUMBER				SQL_ROW_NUMBER
+#define SQL_ATTR_ROW_OPERATION_PTR			24
+#define	SQL_ATTR_ROW_STATUS_PTR				25
+#define	SQL_ATTR_ROWS_FETCHED_PTR			26
+#define SQL_ATTR_ROW_ARRAY_SIZE				27
+#define SQL_ATTR_SIMULATE_CURSOR			SQL_SIMULATE_CURSOR
+#define SQL_ATTR_USE_BOOKMARKS				SQL_USE_BOOKMARKS
+
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_STMT_OPT_MAX                SQL_ROW_NUMBER
+#define SQL_STMT_OPT_MIN	SQL_QUERY_TIMEOUT
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define	SQL_COL_PRED_CHAR		SQL_LIKE_ONLY
+#define	SQL_COL_PRED_BASIC		SQL_ALL_EXCEPT_LIKE
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_IS_POINTER							(-4)
+#define SQL_IS_UINTEGER							(-5)
+#define SQL_IS_INTEGER							(-6)
+#define SQL_IS_USMALLINT						(-7)
+#define SQL_IS_SMALLINT							(-8)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PARAM_BIND_BY_COLUMN        __MSABI_LONG(0U)
+#define SQL_PARAM_BIND_TYPE_DEFAULT			SQL_PARAM_BIND_BY_COLUMN
+#endif
+
+#define SQL_QUERY_TIMEOUT_DEFAULT       __MSABI_LONG(0U)
+
+#define SQL_MAX_ROWS_DEFAULT            __MSABI_LONG(0U)
+
+#define SQL_NOSCAN_OFF                  __MSABI_LONG(0U)
+#define SQL_NOSCAN_ON                   __MSABI_LONG(1U)
+#define SQL_NOSCAN_DEFAULT              SQL_NOSCAN_OFF
+
+#define SQL_MAX_LENGTH_DEFAULT          __MSABI_LONG(0U)
+
+#define SQL_ASYNC_ENABLE_OFF            __MSABI_LONG(0U)
+#define SQL_ASYNC_ENABLE_ON             __MSABI_LONG(1U)
+#define SQL_ASYNC_ENABLE_DEFAULT        SQL_ASYNC_ENABLE_OFF
+
+#define SQL_BIND_BY_COLUMN              __MSABI_LONG(0U)
+#define SQL_BIND_TYPE_DEFAULT           SQL_BIND_BY_COLUMN
+
+#define SQL_CONCUR_READ_ONLY            1
+#define SQL_CONCUR_LOCK                 2
+#define SQL_CONCUR_ROWVER               3
+#define SQL_CONCUR_VALUES               4
+#define SQL_CONCUR_DEFAULT              SQL_CONCUR_READ_ONLY
+
+#define SQL_CURSOR_FORWARD_ONLY         __MSABI_LONG(0U)
+#define SQL_CURSOR_KEYSET_DRIVEN        __MSABI_LONG(1U)
+#define SQL_CURSOR_DYNAMIC              __MSABI_LONG(2U)
+#define SQL_CURSOR_STATIC               __MSABI_LONG(3U)
+#define SQL_CURSOR_TYPE_DEFAULT         SQL_CURSOR_FORWARD_ONLY
+
+#define SQL_ROWSET_SIZE_DEFAULT         __MSABI_LONG(1U)
+
+#define SQL_KEYSET_SIZE_DEFAULT         __MSABI_LONG(0U)
+
+#define SQL_SC_NON_UNIQUE               __MSABI_LONG(0U)
+#define SQL_SC_TRY_UNIQUE               __MSABI_LONG(1U)
+#define SQL_SC_UNIQUE                   __MSABI_LONG(2U)
+
+#define SQL_RD_OFF                      __MSABI_LONG(0U)
+#define SQL_RD_ON                       __MSABI_LONG(1U)
+#define SQL_RD_DEFAULT                  SQL_RD_ON
+
+#define SQL_UB_OFF                      __MSABI_LONG(0U)
+#define SQL_UB_ON                       __MSABI_LONG(1U)
+#define SQL_UB_DEFAULT                  SQL_UB_OFF
+
+#if (ODBCVER >= 0x0300)
+#define SQL_UB_FIXED					SQL_UB_ON
+#define SQL_UB_VARIABLE                 __MSABI_LONG(2U)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_ARRAY_SIZE					20
+#define SQL_DESC_ARRAY_STATUS_PTR				21
+#define SQL_DESC_AUTO_UNIQUE_VALUE				SQL_COLUMN_AUTO_INCREMENT
+#define SQL_DESC_BASE_COLUMN_NAME				22
+#define SQL_DESC_BASE_TABLE_NAME				23
+#define SQL_DESC_BIND_OFFSET_PTR				24
+#define SQL_DESC_BIND_TYPE					25
+#define SQL_DESC_CASE_SENSITIVE					SQL_COLUMN_CASE_SENSITIVE
+#define SQL_DESC_CATALOG_NAME					SQL_COLUMN_QUALIFIER_NAME
+#define SQL_DESC_CONCISE_TYPE					SQL_COLUMN_TYPE
+#define SQL_DESC_DATETIME_INTERVAL_PRECISION			26
+#define SQL_DESC_DISPLAY_SIZE					SQL_COLUMN_DISPLAY_SIZE
+#define SQL_DESC_FIXED_PREC_SCALE				SQL_COLUMN_MONEY
+#define SQL_DESC_LABEL						SQL_COLUMN_LABEL
+#define SQL_DESC_LITERAL_PREFIX					27
+#define SQL_DESC_LITERAL_SUFFIX					28
+#define SQL_DESC_LOCAL_TYPE_NAME				29
+#define	SQL_DESC_MAXIMUM_SCALE					30
+#define SQL_DESC_MINIMUM_SCALE					31
+#define SQL_DESC_NUM_PREC_RADIX					32
+#define SQL_DESC_PARAMETER_TYPE					33
+#define SQL_DESC_ROWS_PROCESSED_PTR				34
+#if (ODBCVER >= 0x0350)
+#define SQL_DESC_ROWVER						35
+#endif
+#define SQL_DESC_SCHEMA_NAME					SQL_COLUMN_OWNER_NAME
+#define SQL_DESC_SEARCHABLE					SQL_COLUMN_SEARCHABLE
+#define SQL_DESC_TYPE_NAME					SQL_COLUMN_TYPE_NAME
+#define SQL_DESC_TABLE_NAME					SQL_COLUMN_TABLE_NAME
+#define SQL_DESC_UNSIGNED					SQL_COLUMN_UNSIGNED
+#define SQL_DESC_UPDATABLE					SQL_COLUMN_UPDATABLE
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DIAG_CURSOR_ROW_COUNT			(-1249)
+#define SQL_DIAG_ROW_NUMBER				(-1248)
+#define SQL_DIAG_COLUMN_NUMBER				(-1247)
+#endif
+
+#define SQL_DATE                                9
+#if (ODBCVER >= 0x0300)
+#define SQL_INTERVAL				10
+#endif
+#define SQL_TIME                                10
+#define SQL_TIMESTAMP                           11
+#define SQL_LONGVARCHAR                         (-1)
+#define SQL_BINARY                              (-2)
+#define SQL_VARBINARY                           (-3)
+#define SQL_LONGVARBINARY                       (-4)
+#define SQL_BIGINT                              (-5)
+#define SQL_TINYINT                             (-6)
+#define SQL_BIT                                 (-7)
+#if (ODBCVER >= 0x0350)
+#define SQL_GUID				(-11)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CODE_YEAR				1
+#define SQL_CODE_MONTH				2
+#define SQL_CODE_DAY				3
+#define SQL_CODE_HOUR				4
+#define SQL_CODE_MINUTE				5
+#define SQL_CODE_SECOND				6
+#define SQL_CODE_YEAR_TO_MONTH			7
+#define SQL_CODE_DAY_TO_HOUR			8
+#define SQL_CODE_DAY_TO_MINUTE			9
+#define SQL_CODE_DAY_TO_SECOND			10
+#define SQL_CODE_HOUR_TO_MINUTE			11
+#define SQL_CODE_HOUR_TO_SECOND			12
+#define SQL_CODE_MINUTE_TO_SECOND		13
+
+#define SQL_INTERVAL_YEAR			(100 + SQL_CODE_YEAR)
+#define SQL_INTERVAL_MONTH			(100 + SQL_CODE_MONTH)
+#define SQL_INTERVAL_DAY			(100 + SQL_CODE_DAY)
+#define SQL_INTERVAL_HOUR			(100 + SQL_CODE_HOUR)
+#define SQL_INTERVAL_MINUTE			(100 + SQL_CODE_MINUTE)
+#define SQL_INTERVAL_SECOND                	(100 + SQL_CODE_SECOND)
+#define SQL_INTERVAL_YEAR_TO_MONTH		(100 + SQL_CODE_YEAR_TO_MONTH)
+#define SQL_INTERVAL_DAY_TO_HOUR		(100 + SQL_CODE_DAY_TO_HOUR)
+#define SQL_INTERVAL_DAY_TO_MINUTE		(100 + SQL_CODE_DAY_TO_MINUTE)
+#define SQL_INTERVAL_DAY_TO_SECOND		(100 + SQL_CODE_DAY_TO_SECOND)
+#define SQL_INTERVAL_HOUR_TO_MINUTE		(100 + SQL_CODE_HOUR_TO_MINUTE)
+#define SQL_INTERVAL_HOUR_TO_SECOND		(100 + SQL_CODE_HOUR_TO_SECOND)
+#define SQL_INTERVAL_MINUTE_TO_SECOND		(100 + SQL_CODE_MINUTE_TO_SECOND)
+
+#else
+#define SQL_INTERVAL_YEAR                       (-80)
+#define SQL_INTERVAL_MONTH                      (-81)
+#define SQL_INTERVAL_YEAR_TO_MONTH              (-82)
+#define SQL_INTERVAL_DAY                        (-83)
+#define SQL_INTERVAL_HOUR                       (-84)
+#define SQL_INTERVAL_MINUTE                     (-85)
+#define SQL_INTERVAL_SECOND                     (-86)
+#define SQL_INTERVAL_DAY_TO_HOUR                (-87)
+#define SQL_INTERVAL_DAY_TO_MINUTE              (-88)
+#define SQL_INTERVAL_DAY_TO_SECOND              (-89)
+#define SQL_INTERVAL_HOUR_TO_MINUTE             (-90)
+#define SQL_INTERVAL_HOUR_TO_SECOND             (-91)
+#define SQL_INTERVAL_MINUTE_TO_SECOND           (-92)
+#endif
+
+
+#if (ODBCVER <= 0x0300)
+#define SQL_UNICODE                             (-95)
+#define SQL_UNICODE_VARCHAR                     (-96)
+#define SQL_UNICODE_LONGVARCHAR                 (-97)
+#define SQL_UNICODE_CHAR                        SQL_UNICODE
+#else
+
+#define	SQL_UNICODE			SQL_WCHAR
+#define	SQL_UNICODE_VARCHAR		SQL_WVARCHAR
+#define SQL_UNICODE_LONGVARCHAR	SQL_WLONGVARCHAR
+#define SQL_UNICODE_CHAR		SQL_WCHAR
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_TYPE_DRIVER_START                   SQL_INTERVAL_YEAR
+#define SQL_TYPE_DRIVER_END                     SQL_UNICODE_LONGVARCHAR
+#endif
+
+#define SQL_C_CHAR    SQL_CHAR
+#define SQL_C_LONG    SQL_INTEGER
+#define SQL_C_SHORT   SQL_SMALLINT
+#define SQL_C_FLOAT   SQL_REAL
+#define SQL_C_DOUBLE  SQL_DOUBLE
+#if (ODBCVER >= 0x0300)
+#define	SQL_C_NUMERIC		SQL_NUMERIC
+#endif
+#define SQL_C_DEFAULT 99
+
+#define SQL_SIGNED_OFFSET       (-20)
+#define SQL_UNSIGNED_OFFSET     (-22)
+
+#define SQL_C_DATE       SQL_DATE
+#define SQL_C_TIME       SQL_TIME
+#define SQL_C_TIMESTAMP  SQL_TIMESTAMP
+#if (ODBCVER >= 0x0300)
+#define SQL_C_TYPE_DATE				SQL_TYPE_DATE
+#define SQL_C_TYPE_TIME				SQL_TYPE_TIME
+#define SQL_C_TYPE_TIMESTAMP			SQL_TYPE_TIMESTAMP
+#define SQL_C_INTERVAL_YEAR			SQL_INTERVAL_YEAR
+#define SQL_C_INTERVAL_MONTH			SQL_INTERVAL_MONTH
+#define SQL_C_INTERVAL_DAY			SQL_INTERVAL_DAY
+#define SQL_C_INTERVAL_HOUR			SQL_INTERVAL_HOUR
+#define SQL_C_INTERVAL_MINUTE			SQL_INTERVAL_MINUTE
+#define SQL_C_INTERVAL_SECOND			SQL_INTERVAL_SECOND
+#define SQL_C_INTERVAL_YEAR_TO_MONTH		SQL_INTERVAL_YEAR_TO_MONTH
+#define SQL_C_INTERVAL_DAY_TO_HOUR		SQL_INTERVAL_DAY_TO_HOUR
+#define SQL_C_INTERVAL_DAY_TO_MINUTE		SQL_INTERVAL_DAY_TO_MINUTE
+#define SQL_C_INTERVAL_DAY_TO_SECOND		SQL_INTERVAL_DAY_TO_SECOND
+#define SQL_C_INTERVAL_HOUR_TO_MINUTE		SQL_INTERVAL_HOUR_TO_MINUTE
+#define SQL_C_INTERVAL_HOUR_TO_SECOND		SQL_INTERVAL_HOUR_TO_SECOND
+#define SQL_C_INTERVAL_MINUTE_TO_SECOND		SQL_INTERVAL_MINUTE_TO_SECOND
+#endif
+#define SQL_C_BINARY     SQL_BINARY
+#define SQL_C_BIT        SQL_BIT
+#if (ODBCVER >= 0x0300)
+#define SQL_C_SBIGINT	(SQL_BIGINT+SQL_SIGNED_OFFSET)
+#define SQL_C_UBIGINT	(SQL_BIGINT+SQL_UNSIGNED_OFFSET)
+#endif
+#define SQL_C_TINYINT    SQL_TINYINT
+#define SQL_C_SLONG      (SQL_C_LONG+SQL_SIGNED_OFFSET)
+#define SQL_C_SSHORT     (SQL_C_SHORT+SQL_SIGNED_OFFSET)
+#define SQL_C_STINYINT   (SQL_TINYINT+SQL_SIGNED_OFFSET)
+#define SQL_C_ULONG      (SQL_C_LONG+SQL_UNSIGNED_OFFSET)
+#define SQL_C_USHORT     (SQL_C_SHORT+SQL_UNSIGNED_OFFSET)
+#define SQL_C_UTINYINT   (SQL_TINYINT+SQL_UNSIGNED_OFFSET)
+#define SQL_C_BOOKMARK   SQL_C_ULONG
+
+#if (ODBCVER >= 0x0350)
+#define SQL_C_GUID	SQL_GUID
+#endif
+
+#define SQL_TYPE_NULL                   0
+#if (ODBCVER < 0x0300)
+#define SQL_TYPE_MIN                    SQL_BIT
+#define SQL_TYPE_MAX                    SQL_VARCHAR
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_C_VARBOOKMARK		SQL_C_BINARY
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NO_ROW_NUMBER					(-1)
+#define SQL_NO_COLUMN_NUMBER					(-1)
+#define SQL_ROW_NUMBER_UNKNOWN					(-2)
+#define SQL_COLUMN_NUMBER_UNKNOWN				(-2)
+#endif
+
+#define SQL_DEFAULT_PARAM            (-5)
+#define SQL_IGNORE                   (-6)
+#if (ODBCVER >= 0x0300)
+#define SQL_COLUMN_IGNORE		SQL_IGNORE
+#endif
+#define SQL_LEN_DATA_AT_EXEC_OFFSET  (-100)
+#define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET)
+
+#define SQL_LEN_BINARY_ATTR_OFFSET	 (-100)
+#define SQL_LEN_BINARY_ATTR(length)	 (-(length)+SQL_LEN_BINARY_ATTR_OFFSET)
+
+#define SQL_PARAM_TYPE_DEFAULT           SQL_PARAM_INPUT_OUTPUT
+#define SQL_SETPARAM_VALUE_MAX           (__MSABI_LONG(-1))
+
+#define SQL_COLUMN_COUNT                0
+#define SQL_COLUMN_NAME                 1
+#define SQL_COLUMN_TYPE                 2
+#define SQL_COLUMN_LENGTH               3
+#define SQL_COLUMN_PRECISION            4
+#define SQL_COLUMN_SCALE                5
+#define SQL_COLUMN_DISPLAY_SIZE         6
+#define SQL_COLUMN_NULLABLE             7
+#define SQL_COLUMN_UNSIGNED             8
+#define SQL_COLUMN_MONEY                9
+#define SQL_COLUMN_UPDATABLE            10
+#define SQL_COLUMN_AUTO_INCREMENT       11
+#define SQL_COLUMN_CASE_SENSITIVE       12
+#define SQL_COLUMN_SEARCHABLE           13
+#define SQL_COLUMN_TYPE_NAME            14
+#define SQL_COLUMN_TABLE_NAME           15
+#define SQL_COLUMN_OWNER_NAME           16
+#define SQL_COLUMN_QUALIFIER_NAME       17
+#define SQL_COLUMN_LABEL                18
+#define SQL_COLATT_OPT_MAX              SQL_COLUMN_LABEL
+#if (ODBCVER < 0x0300)
+#define SQL_COLUMN_DRIVER_START         1000
+#endif
+
+#define SQL_COLATT_OPT_MIN              SQL_COLUMN_COUNT
+
+#define SQL_ATTR_READONLY               0
+#define SQL_ATTR_WRITE                  1
+#define SQL_ATTR_READWRITE_UNKNOWN      2
+
+#define SQL_UNSEARCHABLE                0
+#define SQL_LIKE_ONLY                   1
+#define SQL_ALL_EXCEPT_LIKE             2
+#define SQL_SEARCHABLE                  3
+#define SQL_PRED_SEARCHABLE				SQL_SEARCHABLE
+
+
+#define SQL_NO_TOTAL                    (-4)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLALLOCHANDLESTD	73
+#define SQL_API_SQLBULKOPERATIONS	24
+#endif
+#define SQL_API_SQLBINDPARAMETER    72
+#define SQL_API_SQLBROWSECONNECT    55
+#define SQL_API_SQLCOLATTRIBUTES    6
+#define SQL_API_SQLCOLUMNPRIVILEGES 56
+#define SQL_API_SQLDESCRIBEPARAM    58
+#define	SQL_API_SQLDRIVERCONNECT	41
+#define SQL_API_SQLDRIVERS          71
+#define SQL_API_SQLEXTENDEDFETCH    59
+#define SQL_API_SQLFOREIGNKEYS      60
+#define SQL_API_SQLMORERESULTS      61
+#define SQL_API_SQLNATIVESQL        62
+#define SQL_API_SQLNUMPARAMS        63
+#define SQL_API_SQLPARAMOPTIONS     64
+#define SQL_API_SQLPRIMARYKEYS      65
+#define SQL_API_SQLPROCEDURECOLUMNS 66
+#define SQL_API_SQLPROCEDURES       67
+#define SQL_API_SQLSETPOS           68
+#define SQL_API_SQLSETSCROLLOPTIONS 69
+#define SQL_API_SQLTABLEPRIVILEGES  70
+
+#if (ODBCVER < 0x0300)
+#define SQL_EXT_API_LAST            SQL_API_SQLBINDPARAMETER
+#define SQL_NUM_FUNCTIONS           23
+#define SQL_EXT_API_START           40
+#define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1)
+#endif
+
+#define SQL_API_ALL_FUNCTIONS       0
+
+#define SQL_API_LOADBYORDINAL       199
+
+#if (ODBCVER >= 0x0300)
+#define SQL_API_ODBC3_ALL_FUNCTIONS		999
+#define	SQL_API_ODBC3_ALL_FUNCTIONS_SIZE	250
+
+
+#define SQL_FUNC_EXISTS(pfExists, uwAPI) ((*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) & (1 << ((uwAPI) & 0x000F)) ) ? SQL_TRUE : SQL_FALSE )
+
+#endif
+
+#define SQL_INFO_FIRST                       0
+#define SQL_ACTIVE_CONNECTIONS               0
+#define SQL_ACTIVE_STATEMENTS                1
+#define SQL_DRIVER_HDBC                      3
+#define SQL_DRIVER_HENV                      4
+#define SQL_DRIVER_HSTMT                     5
+#define SQL_DRIVER_NAME                      6
+#define SQL_DRIVER_VER                       7
+#define SQL_ODBC_API_CONFORMANCE             9
+#define SQL_ODBC_VER                        10
+#define SQL_ROW_UPDATES                     11
+#define SQL_ODBC_SAG_CLI_CONFORMANCE        12
+#define SQL_ODBC_SQL_CONFORMANCE            15
+#define SQL_PROCEDURES                      21
+#define SQL_CONCAT_NULL_BEHAVIOR            22
+#define SQL_CURSOR_ROLLBACK_BEHAVIOR        24
+#define SQL_EXPRESSIONS_IN_ORDERBY          27
+#define SQL_MAX_OWNER_NAME_LEN              32
+#define SQL_MAX_PROCEDURE_NAME_LEN          33
+#define SQL_MAX_QUALIFIER_NAME_LEN          34
+#define SQL_MULT_RESULT_SETS                36
+#define SQL_MULTIPLE_ACTIVE_TXN             37
+#define SQL_OUTER_JOINS                     38
+#define SQL_OWNER_TERM                      39
+#define SQL_PROCEDURE_TERM                  40
+#define SQL_QUALIFIER_NAME_SEPARATOR        41
+#define SQL_QUALIFIER_TERM                  42
+#define SQL_SCROLL_OPTIONS                  44
+#define SQL_TABLE_TERM                      45
+#define SQL_CONVERT_FUNCTIONS               48
+#define SQL_NUMERIC_FUNCTIONS               49
+#define SQL_STRING_FUNCTIONS                50
+#define SQL_SYSTEM_FUNCTIONS                51
+#define SQL_TIMEDATE_FUNCTIONS              52
+#define SQL_CONVERT_BIGINT                  53
+#define SQL_CONVERT_BINARY                  54
+#define SQL_CONVERT_BIT                     55
+#define SQL_CONVERT_CHAR                    56
+#define SQL_CONVERT_DATE                    57
+#define SQL_CONVERT_DECIMAL                 58
+#define SQL_CONVERT_DOUBLE                  59
+#define SQL_CONVERT_FLOAT                   60
+#define SQL_CONVERT_INTEGER                 61
+#define SQL_CONVERT_LONGVARCHAR             62
+#define SQL_CONVERT_NUMERIC                 63
+#define SQL_CONVERT_REAL                    64
+#define SQL_CONVERT_SMALLINT                65
+#define SQL_CONVERT_TIME                    66
+#define SQL_CONVERT_TIMESTAMP               67
+#define SQL_CONVERT_TINYINT                 68
+#define SQL_CONVERT_VARBINARY               69
+#define SQL_CONVERT_VARCHAR                 70
+#define SQL_CONVERT_LONGVARBINARY           71
+#define SQL_ODBC_SQL_OPT_IEF                73
+#define SQL_CORRELATION_NAME                74
+#define SQL_NON_NULLABLE_COLUMNS            75
+#define SQL_DRIVER_HLIB                     76
+#define SQL_DRIVER_ODBC_VER                 77
+#define SQL_LOCK_TYPES                      78
+#define SQL_POS_OPERATIONS                  79
+#define SQL_POSITIONED_STATEMENTS           80
+#define SQL_BOOKMARK_PERSISTENCE            82
+#define SQL_STATIC_SENSITIVITY              83
+#define SQL_FILE_USAGE                      84
+#define SQL_COLUMN_ALIAS                    87
+#define SQL_GROUP_BY                        88
+#define SQL_KEYWORDS                        89
+#define SQL_OWNER_USAGE                     91
+#define SQL_QUALIFIER_USAGE                 92
+#define SQL_QUOTED_IDENTIFIER_CASE          93
+#define SQL_SUBQUERIES                      95
+#define SQL_UNION                           96
+#define SQL_MAX_ROW_SIZE_INCLUDES_LONG      103
+#define SQL_MAX_CHAR_LITERAL_LEN            108
+#define SQL_TIMEDATE_ADD_INTERVALS          109
+#define SQL_TIMEDATE_DIFF_INTERVALS         110
+#define SQL_NEED_LONG_DATA_LEN              111
+#define SQL_MAX_BINARY_LITERAL_LEN          112
+#define SQL_LIKE_ESCAPE_CLAUSE              113
+#define SQL_QUALIFIER_LOCATION              114
+
+#if (ODBCVER >= 0x0201 && ODBCVER < 0x0300)
+#define SQL_OJ_CAPABILITIES         65003
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_INFO_LAST							SQL_QUALIFIER_LOCATION
+#define SQL_INFO_DRIVER_START						1000
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ACTIVE_ENVIRONMENTS						116
+#define	SQL_ALTER_DOMAIN						117
+
+#define	SQL_SQL_CONFORMANCE						118
+#define SQL_DATETIME_LITERALS						119
+
+#define	SQL_ASYNC_MODE							10021
+#define SQL_BATCH_ROW_COUNT						120
+#define SQL_BATCH_SUPPORT						121
+#define SQL_CATALOG_LOCATION						SQL_QUALIFIER_LOCATION
+#define SQL_CATALOG_NAME_SEPARATOR					SQL_QUALIFIER_NAME_SEPARATOR
+#define SQL_CATALOG_TERM						SQL_QUALIFIER_TERM
+#define SQL_CATALOG_USAGE						SQL_QUALIFIER_USAGE
+#define	SQL_CONVERT_WCHAR						122
+#define SQL_CONVERT_INTERVAL_DAY_TIME					123
+#define SQL_CONVERT_INTERVAL_YEAR_MONTH					124
+#define	SQL_CONVERT_WLONGVARCHAR					125
+#define	SQL_CONVERT_WVARCHAR						126
+#define	SQL_CREATE_ASSERTION						127
+#define	SQL_CREATE_CHARACTER_SET					128
+#define	SQL_CREATE_COLLATION						129
+#define	SQL_CREATE_DOMAIN						130
+#define	SQL_CREATE_SCHEMA						131
+#define	SQL_CREATE_TABLE						132
+#define	SQL_CREATE_TRANSLATION						133
+#define	SQL_CREATE_VIEW							134
+#define SQL_DRIVER_HDESC						135
+#define	SQL_DROP_ASSERTION						136
+#define	SQL_DROP_CHARACTER_SET						137
+#define	SQL_DROP_COLLATION						138
+#define	SQL_DROP_DOMAIN							139
+#define	SQL_DROP_SCHEMA							140
+#define	SQL_DROP_TABLE							141
+#define	SQL_DROP_TRANSLATION						142
+#define	SQL_DROP_VIEW							143
+#define SQL_DYNAMIC_CURSOR_ATTRIBUTES1			144
+#define SQL_DYNAMIC_CURSOR_ATTRIBUTES2			145
+#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1		146
+#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2		147
+#define SQL_INDEX_KEYWORDS				148
+#define SQL_INFO_SCHEMA_VIEWS				149
+#define SQL_KEYSET_CURSOR_ATTRIBUTES1			150
+#define SQL_KEYSET_CURSOR_ATTRIBUTES2			151
+#define	SQL_MAX_ASYNC_CONCURRENT_STATEMENTS		10022
+#define SQL_ODBC_INTERFACE_CONFORMANCE			152
+#define SQL_PARAM_ARRAY_ROW_COUNTS     			153
+#define SQL_PARAM_ARRAY_SELECTS     			154
+#define SQL_SCHEMA_TERM					SQL_OWNER_TERM
+#define SQL_SCHEMA_USAGE				SQL_OWNER_USAGE
+#define SQL_SQL92_DATETIME_FUNCTIONS			155
+#define SQL_SQL92_FOREIGN_KEY_DELETE_RULE		156
+#define SQL_SQL92_FOREIGN_KEY_UPDATE_RULE		157
+#define SQL_SQL92_GRANT					158
+#define SQL_SQL92_NUMERIC_VALUE_FUNCTIONS		159
+#define SQL_SQL92_PREDICATES				160
+#define SQL_SQL92_RELATIONAL_JOIN_OPERATORS		161
+#define SQL_SQL92_REVOKE				162
+#define SQL_SQL92_ROW_VALUE_CONSTRUCTOR			163
+#define SQL_SQL92_STRING_FUNCTIONS			164
+#define SQL_SQL92_VALUE_EXPRESSIONS			165
+#define SQL_STANDARD_CLI_CONFORMANCE			166
+#define SQL_STATIC_CURSOR_ATTRIBUTES1			167
+#define SQL_STATIC_CURSOR_ATTRIBUTES2			168
+
+#define SQL_AGGREGATE_FUNCTIONS				169
+#define SQL_DDL_INDEX					170
+#define SQL_DM_VER					171
+#define SQL_INSERT_STATEMENT				172
+#define SQL_UNION_STATEMENT				SQL_UNION
+#endif
+
+#define	SQL_DTC_TRANSITION_COST				1750
+
+#if (ODBCVER >= 0x0300)
+
+#define SQL_AT_ADD_COLUMN_SINGLE                        __MSABI_LONG(0x00000020)
+#define SQL_AT_ADD_COLUMN_DEFAULT                       __MSABI_LONG(0x00000040)
+#define SQL_AT_ADD_COLUMN_COLLATION                     __MSABI_LONG(0x00000080)
+#define SQL_AT_SET_COLUMN_DEFAULT                       __MSABI_LONG(0x00000100)
+#define SQL_AT_DROP_COLUMN_DEFAULT                      __MSABI_LONG(0x00000200)
+#define SQL_AT_DROP_COLUMN_CASCADE                      __MSABI_LONG(0x00000400)
+#define SQL_AT_DROP_COLUMN_RESTRICT                     __MSABI_LONG(0x00000800)
+#define SQL_AT_ADD_TABLE_CONSTRAINT                     __MSABI_LONG(0x00001000)
+#define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE            __MSABI_LONG(0x00002000)
+#define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT           __MSABI_LONG(0x00004000)
+#define SQL_AT_CONSTRAINT_NAME_DEFINITION               __MSABI_LONG(0x00008000)
+#define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED            __MSABI_LONG(0x00010000)
+#define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE           __MSABI_LONG(0x00020000)
+#define SQL_AT_CONSTRAINT_DEFERRABLE                    __MSABI_LONG(0x00040000)
+#define SQL_AT_CONSTRAINT_NON_DEFERRABLE                __MSABI_LONG(0x00080000)
+#endif
+
+#define SQL_CVT_CHAR                    __MSABI_LONG(0x00000001)
+#define SQL_CVT_NUMERIC                 __MSABI_LONG(0x00000002)
+#define SQL_CVT_DECIMAL                 __MSABI_LONG(0x00000004)
+#define SQL_CVT_INTEGER                 __MSABI_LONG(0x00000008)
+#define SQL_CVT_SMALLINT                __MSABI_LONG(0x00000010)
+#define SQL_CVT_FLOAT                   __MSABI_LONG(0x00000020)
+#define SQL_CVT_REAL                    __MSABI_LONG(0x00000040)
+#define SQL_CVT_DOUBLE                  __MSABI_LONG(0x00000080)
+#define SQL_CVT_VARCHAR                 __MSABI_LONG(0x00000100)
+#define SQL_CVT_LONGVARCHAR             __MSABI_LONG(0x00000200)
+#define SQL_CVT_BINARY                  __MSABI_LONG(0x00000400)
+#define SQL_CVT_VARBINARY               __MSABI_LONG(0x00000800)
+#define SQL_CVT_BIT                     __MSABI_LONG(0x00001000)
+#define SQL_CVT_TINYINT                 __MSABI_LONG(0x00002000)
+#define SQL_CVT_BIGINT                  __MSABI_LONG(0x00004000)
+#define SQL_CVT_DATE                    __MSABI_LONG(0x00008000)
+#define SQL_CVT_TIME                    __MSABI_LONG(0x00010000)
+#define SQL_CVT_TIMESTAMP               __MSABI_LONG(0x00020000)
+#define SQL_CVT_LONGVARBINARY           __MSABI_LONG(0x00040000)
+#if (ODBCVER >= 0x0300)
+#define SQL_CVT_INTERVAL_YEAR_MONTH     __MSABI_LONG(0x00080000)
+#define SQL_CVT_INTERVAL_DAY_TIME       __MSABI_LONG(0x00100000)
+#define SQL_CVT_WCHAR                   __MSABI_LONG(0x00200000)
+#define SQL_CVT_WLONGVARCHAR            __MSABI_LONG(0x00400000)
+#define SQL_CVT_WVARCHAR                __MSABI_LONG(0x00800000)
+
+#endif
+
+
+#define SQL_FN_CVT_CONVERT              __MSABI_LONG(0x00000001)
+#if (ODBCVER >= 0x0300)
+#define SQL_FN_CVT_CAST                 __MSABI_LONG(0x00000002)
+#endif
+
+#define SQL_FN_STR_CONCAT               __MSABI_LONG(0x00000001)
+#define SQL_FN_STR_INSERT               __MSABI_LONG(0x00000002)
+#define SQL_FN_STR_LEFT                 __MSABI_LONG(0x00000004)
+#define SQL_FN_STR_LTRIM                __MSABI_LONG(0x00000008)
+#define SQL_FN_STR_LENGTH               __MSABI_LONG(0x00000010)
+#define SQL_FN_STR_LOCATE               __MSABI_LONG(0x00000020)
+#define SQL_FN_STR_LCASE                __MSABI_LONG(0x00000040)
+#define SQL_FN_STR_REPEAT               __MSABI_LONG(0x00000080)
+#define SQL_FN_STR_REPLACE              __MSABI_LONG(0x00000100)
+#define SQL_FN_STR_RIGHT                __MSABI_LONG(0x00000200)
+#define SQL_FN_STR_RTRIM                __MSABI_LONG(0x00000400)
+#define SQL_FN_STR_SUBSTRING            __MSABI_LONG(0x00000800)
+#define SQL_FN_STR_UCASE                __MSABI_LONG(0x00001000)
+#define SQL_FN_STR_ASCII                __MSABI_LONG(0x00002000)
+#define SQL_FN_STR_CHAR                 __MSABI_LONG(0x00004000)
+#define SQL_FN_STR_DIFFERENCE           __MSABI_LONG(0x00008000)
+#define SQL_FN_STR_LOCATE_2             __MSABI_LONG(0x00010000)
+#define SQL_FN_STR_SOUNDEX              __MSABI_LONG(0x00020000)
+#define SQL_FN_STR_SPACE                __MSABI_LONG(0x00040000)
+#if (ODBCVER >= 0x0300)
+#define SQL_FN_STR_BIT_LENGTH           __MSABI_LONG(0x00080000)
+#define SQL_FN_STR_CHAR_LENGTH          __MSABI_LONG(0x00100000)
+#define SQL_FN_STR_CHARACTER_LENGTH     __MSABI_LONG(0x00200000)
+#define SQL_FN_STR_OCTET_LENGTH         __MSABI_LONG(0x00400000)
+#define SQL_FN_STR_POSITION             __MSABI_LONG(0x00800000)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SSF_CONVERT                 __MSABI_LONG(0x00000001)
+#define SQL_SSF_LOWER                   __MSABI_LONG(0x00000002)
+#define SQL_SSF_UPPER                   __MSABI_LONG(0x00000004)
+#define SQL_SSF_SUBSTRING               __MSABI_LONG(0x00000008)
+#define SQL_SSF_TRANSLATE               __MSABI_LONG(0x00000010)
+#define SQL_SSF_TRIM_BOTH               __MSABI_LONG(0x00000020)
+#define SQL_SSF_TRIM_LEADING            __MSABI_LONG(0x00000040)
+#define SQL_SSF_TRIM_TRAILING           __MSABI_LONG(0x00000080)
+#endif
+
+#define SQL_FN_NUM_ABS                  __MSABI_LONG(0x00000001)
+#define SQL_FN_NUM_ACOS                 __MSABI_LONG(0x00000002)
+#define SQL_FN_NUM_ASIN                 __MSABI_LONG(0x00000004)
+#define SQL_FN_NUM_ATAN                 __MSABI_LONG(0x00000008)
+#define SQL_FN_NUM_ATAN2                __MSABI_LONG(0x00000010)
+#define SQL_FN_NUM_CEILING              __MSABI_LONG(0x00000020)
+#define SQL_FN_NUM_COS                  __MSABI_LONG(0x00000040)
+#define SQL_FN_NUM_COT                  __MSABI_LONG(0x00000080)
+#define SQL_FN_NUM_EXP                  __MSABI_LONG(0x00000100)
+#define SQL_FN_NUM_FLOOR                __MSABI_LONG(0x00000200)
+#define SQL_FN_NUM_LOG                  __MSABI_LONG(0x00000400)
+#define SQL_FN_NUM_MOD                  __MSABI_LONG(0x00000800)
+#define SQL_FN_NUM_SIGN                 __MSABI_LONG(0x00001000)
+#define SQL_FN_NUM_SIN                  __MSABI_LONG(0x00002000)
+#define SQL_FN_NUM_SQRT                 __MSABI_LONG(0x00004000)
+#define SQL_FN_NUM_TAN                  __MSABI_LONG(0x00008000)
+#define SQL_FN_NUM_PI                   __MSABI_LONG(0x00010000)
+#define SQL_FN_NUM_RAND                 __MSABI_LONG(0x00020000)
+#define SQL_FN_NUM_DEGREES              __MSABI_LONG(0x00040000)
+#define SQL_FN_NUM_LOG10                __MSABI_LONG(0x00080000)
+#define SQL_FN_NUM_POWER                __MSABI_LONG(0x00100000)
+#define SQL_FN_NUM_RADIANS              __MSABI_LONG(0x00200000)
+#define SQL_FN_NUM_ROUND                __MSABI_LONG(0x00400000)
+#define SQL_FN_NUM_TRUNCATE             __MSABI_LONG(0x00800000)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SNVF_BIT_LENGTH             __MSABI_LONG(0x00000001)
+#define SQL_SNVF_CHAR_LENGTH            __MSABI_LONG(0x00000002)
+#define SQL_SNVF_CHARACTER_LENGTH       __MSABI_LONG(0x00000004)
+#define SQL_SNVF_EXTRACT                __MSABI_LONG(0x00000008)
+#define SQL_SNVF_OCTET_LENGTH           __MSABI_LONG(0x00000010)
+#define SQL_SNVF_POSITION               __MSABI_LONG(0x00000020)
+#endif
+
+#define SQL_FN_TD_NOW                   __MSABI_LONG(0x00000001)
+#define SQL_FN_TD_CURDATE               __MSABI_LONG(0x00000002)
+#define SQL_FN_TD_DAYOFMONTH            __MSABI_LONG(0x00000004)
+#define SQL_FN_TD_DAYOFWEEK             __MSABI_LONG(0x00000008)
+#define SQL_FN_TD_DAYOFYEAR             __MSABI_LONG(0x00000010)
+#define SQL_FN_TD_MONTH                 __MSABI_LONG(0x00000020)
+#define SQL_FN_TD_QUARTER               __MSABI_LONG(0x00000040)
+#define SQL_FN_TD_WEEK                  __MSABI_LONG(0x00000080)
+#define SQL_FN_TD_YEAR                  __MSABI_LONG(0x00000100)
+#define SQL_FN_TD_CURTIME               __MSABI_LONG(0x00000200)
+#define SQL_FN_TD_HOUR                  __MSABI_LONG(0x00000400)
+#define SQL_FN_TD_MINUTE                __MSABI_LONG(0x00000800)
+#define SQL_FN_TD_SECOND                __MSABI_LONG(0x00001000)
+#define SQL_FN_TD_TIMESTAMPADD          __MSABI_LONG(0x00002000)
+#define SQL_FN_TD_TIMESTAMPDIFF         __MSABI_LONG(0x00004000)
+#define SQL_FN_TD_DAYNAME               __MSABI_LONG(0x00008000)
+#define SQL_FN_TD_MONTHNAME             __MSABI_LONG(0x00010000)
+#if (ODBCVER >= 0x0300)
+#define SQL_FN_TD_CURRENT_DATE          __MSABI_LONG(0x00020000)
+#define SQL_FN_TD_CURRENT_TIME          __MSABI_LONG(0x00040000)
+#define SQL_FN_TD_CURRENT_TIMESTAMP     __MSABI_LONG(0x00080000)
+#define SQL_FN_TD_EXTRACT               __MSABI_LONG(0x00100000)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SDF_CURRENT_DATE            __MSABI_LONG(0x00000001)
+#define SQL_SDF_CURRENT_TIME            __MSABI_LONG(0x00000002)
+#define SQL_SDF_CURRENT_TIMESTAMP       __MSABI_LONG(0x00000004)
+#endif
+
+#define SQL_FN_SYS_USERNAME             __MSABI_LONG(0x00000001)
+#define SQL_FN_SYS_DBNAME               __MSABI_LONG(0x00000002)
+#define SQL_FN_SYS_IFNULL               __MSABI_LONG(0x00000004)
+
+#define SQL_FN_TSI_FRAC_SECOND          __MSABI_LONG(0x00000001)
+#define SQL_FN_TSI_SECOND               __MSABI_LONG(0x00000002)
+#define SQL_FN_TSI_MINUTE               __MSABI_LONG(0x00000004)
+#define SQL_FN_TSI_HOUR                 __MSABI_LONG(0x00000008)
+#define SQL_FN_TSI_DAY                  __MSABI_LONG(0x00000010)
+#define SQL_FN_TSI_WEEK                 __MSABI_LONG(0x00000020)
+#define SQL_FN_TSI_MONTH                __MSABI_LONG(0x00000040)
+#define SQL_FN_TSI_QUARTER              __MSABI_LONG(0x00000080)
+#define SQL_FN_TSI_YEAR                 __MSABI_LONG(0x00000100)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CA1_NEXT                    __MSABI_LONG(0x00000001)
+#define SQL_CA1_ABSOLUTE                __MSABI_LONG(0x00000002)
+#define SQL_CA1_RELATIVE                __MSABI_LONG(0x00000004)
+#define SQL_CA1_BOOKMARK                __MSABI_LONG(0x00000008)
+
+#define SQL_CA1_LOCK_NO_CHANGE          __MSABI_LONG(0x00000040)
+#define SQL_CA1_LOCK_EXCLUSIVE          __MSABI_LONG(0x00000080)
+#define SQL_CA1_LOCK_UNLOCK             __MSABI_LONG(0x00000100)
+
+#define SQL_CA1_POS_POSITION            __MSABI_LONG(0x00000200)
+#define SQL_CA1_POS_UPDATE              __MSABI_LONG(0x00000400)
+#define SQL_CA1_POS_DELETE              __MSABI_LONG(0x00000800)
+#define SQL_CA1_POS_REFRESH             __MSABI_LONG(0x00001000)
+
+#define SQL_CA1_POSITIONED_UPDATE       __MSABI_LONG(0x00002000)
+#define SQL_CA1_POSITIONED_DELETE       __MSABI_LONG(0x00004000)
+#define SQL_CA1_SELECT_FOR_UPDATE       __MSABI_LONG(0x00008000)
+
+#define SQL_CA1_BULK_ADD                __MSABI_LONG(0x00010000)
+#define SQL_CA1_BULK_UPDATE_BY_BOOKMARK __MSABI_LONG(0x00020000)
+#define SQL_CA1_BULK_DELETE_BY_BOOKMARK __MSABI_LONG(0x00040000)
+#define SQL_CA1_BULK_FETCH_BY_BOOKMARK  __MSABI_LONG(0x00080000)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CA2_READ_ONLY_CONCURRENCY   __MSABI_LONG(0x00000001)
+#define SQL_CA2_LOCK_CONCURRENCY        __MSABI_LONG(0x00000002)
+#define SQL_CA2_OPT_ROWVER_CONCURRENCY  __MSABI_LONG(0x00000004)
+#define SQL_CA2_OPT_VALUES_CONCURRENCY  __MSABI_LONG(0x00000008)
+
+#define SQL_CA2_SENSITIVITY_ADDITIONS   __MSABI_LONG(0x00000010)
+#define SQL_CA2_SENSITIVITY_DELETIONS   __MSABI_LONG(0x00000020)
+#define SQL_CA2_SENSITIVITY_UPDATES     __MSABI_LONG(0x00000040)
+
+#define SQL_CA2_MAX_ROWS_SELECT         __MSABI_LONG(0x00000080)
+#define SQL_CA2_MAX_ROWS_INSERT         __MSABI_LONG(0x00000100)
+#define SQL_CA2_MAX_ROWS_DELETE         __MSABI_LONG(0x00000200)
+#define SQL_CA2_MAX_ROWS_UPDATE         __MSABI_LONG(0x00000400)
+#define SQL_CA2_MAX_ROWS_CATALOG        __MSABI_LONG(0x00000800)
+#define SQL_CA2_MAX_ROWS_AFFECTS_ALL		(SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_INSERT | SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_MAX_ROWS_CATALOG)
+
+#define SQL_CA2_CRC_EXACT               __MSABI_LONG(0x00001000)
+#define SQL_CA2_CRC_APPROXIMATE         __MSABI_LONG(0x00002000)
+
+#define SQL_CA2_SIMULATE_NON_UNIQUE     __MSABI_LONG(0x00004000)
+#define SQL_CA2_SIMULATE_TRY_UNIQUE     __MSABI_LONG(0x00008000)
+#define SQL_CA2_SIMULATE_UNIQUE         __MSABI_LONG(0x00010000)
+#endif
+
+#define SQL_OAC_NONE                        0x0000
+#define SQL_OAC_LEVEL1                      0x0001
+#define SQL_OAC_LEVEL2                      0x0002
+
+#define SQL_OSCC_NOT_COMPLIANT              0x0000
+#define SQL_OSCC_COMPLIANT                  0x0001
+
+#define SQL_OSC_MINIMUM                     0x0000
+#define SQL_OSC_CORE                        0x0001
+#define SQL_OSC_EXTENDED                    0x0002
+
+#define SQL_CB_NULL                         0x0000
+#define SQL_CB_NON_NULL                     0x0001
+
+#define SQL_SO_FORWARD_ONLY             __MSABI_LONG(0x00000001)
+#define SQL_SO_KEYSET_DRIVEN            __MSABI_LONG(0x00000002)
+#define SQL_SO_DYNAMIC                  __MSABI_LONG(0x00000004)
+#define SQL_SO_MIXED                    __MSABI_LONG(0x00000008)
+#define SQL_SO_STATIC                   __MSABI_LONG(0x00000010)
+
+#define SQL_FD_FETCH_BOOKMARK           __MSABI_LONG(0x00000080)
+
+#define SQL_CN_NONE                         0x0000
+#define SQL_CN_DIFFERENT                    0x0001
+#define SQL_CN_ANY                          0x0002
+
+#define SQL_NNC_NULL                        0x0000
+#define SQL_NNC_NON_NULL                    0x0001
+
+#define SQL_NC_START                        0x0002
+#define SQL_NC_END                          0x0004
+
+#define SQL_FILE_NOT_SUPPORTED              0x0000
+#define SQL_FILE_TABLE                      0x0001
+#define SQL_FILE_QUALIFIER                  0x0002
+#define SQL_FILE_CATALOG		SQL_FILE_QUALIFIER
+
+#define SQL_GD_BLOCK                    __MSABI_LONG(0x00000004)
+#define SQL_GD_BOUND                    __MSABI_LONG(0x00000008)
+
+#define SQL_PS_POSITIONED_DELETE        __MSABI_LONG(0x00000001)
+#define SQL_PS_POSITIONED_UPDATE        __MSABI_LONG(0x00000002)
+#define SQL_PS_SELECT_FOR_UPDATE        __MSABI_LONG(0x00000004)
+
+#define SQL_GB_NOT_SUPPORTED                0x0000
+#define SQL_GB_GROUP_BY_EQUALS_SELECT       0x0001
+#define SQL_GB_GROUP_BY_CONTAINS_SELECT     0x0002
+#define SQL_GB_NO_RELATION                  0x0003
+#if (ODBCVER >= 0x0300)
+#define	SQL_GB_COLLATE			0x0004
+
+#endif
+
+#define SQL_OU_DML_STATEMENTS           __MSABI_LONG(0x00000001)
+#define SQL_OU_PROCEDURE_INVOCATION     __MSABI_LONG(0x00000002)
+#define SQL_OU_TABLE_DEFINITION         __MSABI_LONG(0x00000004)
+#define SQL_OU_INDEX_DEFINITION         __MSABI_LONG(0x00000008)
+#define SQL_OU_PRIVILEGE_DEFINITION     __MSABI_LONG(0x00000010)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SU_DML_STATEMENTS			SQL_OU_DML_STATEMENTS
+#define SQL_SU_PROCEDURE_INVOCATION		SQL_OU_PROCEDURE_INVOCATION
+#define SQL_SU_TABLE_DEFINITION			SQL_OU_TABLE_DEFINITION
+#define SQL_SU_INDEX_DEFINITION			SQL_OU_INDEX_DEFINITION
+#define SQL_SU_PRIVILEGE_DEFINITION		SQL_OU_PRIVILEGE_DEFINITION
+#endif
+
+#define SQL_QU_DML_STATEMENTS           __MSABI_LONG(0x00000001)
+#define SQL_QU_PROCEDURE_INVOCATION     __MSABI_LONG(0x00000002)
+#define SQL_QU_TABLE_DEFINITION         __MSABI_LONG(0x00000004)
+#define SQL_QU_INDEX_DEFINITION         __MSABI_LONG(0x00000008)
+#define SQL_QU_PRIVILEGE_DEFINITION     __MSABI_LONG(0x00000010)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CU_DML_STATEMENTS			SQL_QU_DML_STATEMENTS
+#define SQL_CU_PROCEDURE_INVOCATION		SQL_QU_PROCEDURE_INVOCATION
+#define SQL_CU_TABLE_DEFINITION			SQL_QU_TABLE_DEFINITION
+#define SQL_CU_INDEX_DEFINITION			SQL_QU_INDEX_DEFINITION
+#define SQL_CU_PRIVILEGE_DEFINITION		SQL_QU_PRIVILEGE_DEFINITION
+#endif
+
+#define SQL_SQ_COMPARISON               __MSABI_LONG(0x00000001)
+#define SQL_SQ_EXISTS                   __MSABI_LONG(0x00000002)
+#define SQL_SQ_IN                       __MSABI_LONG(0x00000004)
+#define SQL_SQ_QUANTIFIED               __MSABI_LONG(0x00000008)
+#define SQL_SQ_CORRELATED_SUBQUERIES    __MSABI_LONG(0x00000010)
+
+#define SQL_U_UNION                     __MSABI_LONG(0x00000001)
+#define SQL_U_UNION_ALL                 __MSABI_LONG(0x00000002)
+
+#define SQL_BP_CLOSE                    __MSABI_LONG(0x00000001)
+#define SQL_BP_DELETE                   __MSABI_LONG(0x00000002)
+#define SQL_BP_DROP                     __MSABI_LONG(0x00000004)
+#define SQL_BP_TRANSACTION              __MSABI_LONG(0x00000008)
+#define SQL_BP_UPDATE                   __MSABI_LONG(0x00000010)
+#define SQL_BP_OTHER_HSTMT              __MSABI_LONG(0x00000020)
+#define SQL_BP_SCROLL                   __MSABI_LONG(0x00000040)
+
+#define SQL_SS_ADDITIONS                __MSABI_LONG(0x00000001)
+#define SQL_SS_DELETIONS                __MSABI_LONG(0x00000002)
+#define SQL_SS_UPDATES                  __MSABI_LONG(0x00000004)
+
+#define SQL_CV_CREATE_VIEW              __MSABI_LONG(0x00000001)
+#define SQL_CV_CHECK_OPTION             __MSABI_LONG(0x00000002)
+#define SQL_CV_CASCADED                 __MSABI_LONG(0x00000004)
+#define SQL_CV_LOCAL                    __MSABI_LONG(0x00000008)
+
+#define SQL_LCK_NO_CHANGE               __MSABI_LONG(0x00000001)
+#define SQL_LCK_EXCLUSIVE               __MSABI_LONG(0x00000002)
+#define SQL_LCK_UNLOCK                  __MSABI_LONG(0x00000004)
+
+#define SQL_POS_POSITION                __MSABI_LONG(0x00000001)
+#define SQL_POS_REFRESH                 __MSABI_LONG(0x00000002)
+#define SQL_POS_UPDATE                  __MSABI_LONG(0x00000004)
+#define SQL_POS_DELETE                  __MSABI_LONG(0x00000008)
+#define SQL_POS_ADD                     __MSABI_LONG(0x00000010)
+
+#define SQL_QL_START                        0x0001
+#define SQL_QL_END                          0x0002
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AF_AVG                      __MSABI_LONG(0x00000001)
+#define SQL_AF_COUNT                    __MSABI_LONG(0x00000002)
+#define SQL_AF_MAX                      __MSABI_LONG(0x00000004)
+#define SQL_AF_MIN                      __MSABI_LONG(0x00000008)
+#define SQL_AF_SUM                      __MSABI_LONG(0x00000010)
+#define SQL_AF_DISTINCT                 __MSABI_LONG(0x00000020)
+#define SQL_AF_ALL                      __MSABI_LONG(0x00000040)
+
+#define SQL_SC_SQL92_ENTRY              __MSABI_LONG(0x00000001)
+#define SQL_SC_FIPS127_2_TRANSITIONAL   __MSABI_LONG(0x00000002)
+#define SQL_SC_SQL92_INTERMEDIATE       __MSABI_LONG(0x00000004)
+#define SQL_SC_SQL92_FULL               __MSABI_LONG(0x00000008)
+
+#define SQL_DL_SQL92_DATE               __MSABI_LONG(0x00000001)
+#define SQL_DL_SQL92_TIME               __MSABI_LONG(0x00000002)
+#define SQL_DL_SQL92_TIMESTAMP          __MSABI_LONG(0x00000004)
+#define SQL_DL_SQL92_INTERVAL_YEAR      __MSABI_LONG(0x00000008)
+#define SQL_DL_SQL92_INTERVAL_MONTH     __MSABI_LONG(0x00000010)
+#define SQL_DL_SQL92_INTERVAL_DAY       __MSABI_LONG(0x00000020)
+#define SQL_DL_SQL92_INTERVAL_HOUR      __MSABI_LONG(0x00000040)
+#define SQL_DL_SQL92_INTERVAL_MINUTE    __MSABI_LONG(0x00000080)
+#define SQL_DL_SQL92_INTERVAL_SECOND    __MSABI_LONG(0x00000100)
+#define SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH     __MSABI_LONG(0x00000200)
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR       __MSABI_LONG(0x00000400)
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE     __MSABI_LONG(0x00000800)
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND     __MSABI_LONG(0x00001000)
+#define SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE    __MSABI_LONG(0x00002000)
+#define SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND    __MSABI_LONG(0x00004000)
+#define SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND  __MSABI_LONG(0x00008000)
+
+#define SQL_CL_START						SQL_QL_START
+#define SQL_CL_END							SQL_QL_END
+
+#define SQL_BRC_PROCEDURES			0x0000001
+#define	SQL_BRC_EXPLICIT			0x0000002
+#define	SQL_BRC_ROLLED_UP			0x0000004
+
+#define SQL_BS_SELECT_EXPLICIT          __MSABI_LONG(0x00000001)
+#define SQL_BS_ROW_COUNT_EXPLICIT       __MSABI_LONG(0x00000002)
+#define SQL_BS_SELECT_PROC              __MSABI_LONG(0x00000004)
+#define SQL_BS_ROW_COUNT_PROC           __MSABI_LONG(0x00000008)
+
+#define SQL_PARC_BATCH		1
+#define SQL_PARC_NO_BATCH	2
+
+#define SQL_PAS_BATCH				1
+#define SQL_PAS_NO_BATCH			2
+#define SQL_PAS_NO_SELECT			3
+
+#define SQL_IK_NONE                     __MSABI_LONG(0x00000000)
+#define SQL_IK_ASC                      __MSABI_LONG(0x00000001)
+#define SQL_IK_DESC                     __MSABI_LONG(0x00000002)
+#define SQL_IK_ALL							(SQL_IK_ASC | SQL_IK_DESC)
+
+#define SQL_ISV_ASSERTIONS              __MSABI_LONG(0x00000001)
+#define SQL_ISV_CHARACTER_SETS          __MSABI_LONG(0x00000002)
+#define SQL_ISV_CHECK_CONSTRAINTS       __MSABI_LONG(0x00000004)
+#define SQL_ISV_COLLATIONS              __MSABI_LONG(0x00000008)
+#define SQL_ISV_COLUMN_DOMAIN_USAGE     __MSABI_LONG(0x00000010)
+#define SQL_ISV_COLUMN_PRIVILEGES       __MSABI_LONG(0x00000020)
+#define SQL_ISV_COLUMNS                 __MSABI_LONG(0x00000040)
+#define SQL_ISV_CONSTRAINT_COLUMN_USAGE __MSABI_LONG(0x00000080)
+#define SQL_ISV_CONSTRAINT_TABLE_USAGE  __MSABI_LONG(0x00000100)
+#define SQL_ISV_DOMAIN_CONSTRAINTS      __MSABI_LONG(0x00000200)
+#define SQL_ISV_DOMAINS                 __MSABI_LONG(0x00000400)
+#define SQL_ISV_KEY_COLUMN_USAGE        __MSABI_LONG(0x00000800)
+#define SQL_ISV_REFERENTIAL_CONSTRAINTS __MSABI_LONG(0x00001000)
+#define SQL_ISV_SCHEMATA                __MSABI_LONG(0x00002000)
+#define SQL_ISV_SQL_LANGUAGES           __MSABI_LONG(0x00004000)
+#define SQL_ISV_TABLE_CONSTRAINTS       __MSABI_LONG(0x00008000)
+#define SQL_ISV_TABLE_PRIVILEGES        __MSABI_LONG(0x00010000)
+#define SQL_ISV_TABLES                  __MSABI_LONG(0x00020000)
+#define SQL_ISV_TRANSLATIONS            __MSABI_LONG(0x00040000)
+#define SQL_ISV_USAGE_PRIVILEGES        __MSABI_LONG(0x00080000)
+#define SQL_ISV_VIEW_COLUMN_USAGE       __MSABI_LONG(0x00100000)
+#define SQL_ISV_VIEW_TABLE_USAGE        __MSABI_LONG(0x00200000)
+#define SQL_ISV_VIEWS                   __MSABI_LONG(0x00400000)
+
+#define	SQL_AM_NONE			0
+#define	SQL_AM_CONNECTION	1
+#define	SQL_AM_STATEMENT	2
+
+#define SQL_AD_CONSTRAINT_NAME_DEFINITION               __MSABI_LONG(0x00000001)
+#define SQL_AD_ADD_DOMAIN_CONSTRAINT                    __MSABI_LONG(0x00000002)
+#define SQL_AD_DROP_DOMAIN_CONSTRAINT                   __MSABI_LONG(0x00000004)
+#define SQL_AD_ADD_DOMAIN_DEFAULT                       __MSABI_LONG(0x00000008)
+#define SQL_AD_DROP_DOMAIN_DEFAULT                      __MSABI_LONG(0x00000010)
+#define SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED        __MSABI_LONG(0x00000020)
+#define SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE       __MSABI_LONG(0x00000040)
+#define SQL_AD_ADD_CONSTRAINT_DEFERRABLE                __MSABI_LONG(0x00000080)
+#define SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE            __MSABI_LONG(0x00000100)
+
+#define SQL_CS_CREATE_SCHEMA            __MSABI_LONG(0x00000001)
+#define SQL_CS_AUTHORIZATION            __MSABI_LONG(0x00000002)
+#define SQL_CS_DEFAULT_CHARACTER_SET    __MSABI_LONG(0x00000004)
+
+#define SQL_CTR_CREATE_TRANSLATION      __MSABI_LONG(0x00000001)
+
+#define SQL_CA_CREATE_ASSERTION                 __MSABI_LONG(0x00000001)
+#define SQL_CA_CONSTRAINT_INITIALLY_DEFERRED    __MSABI_LONG(0x00000010)
+#define SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE   __MSABI_LONG(0x00000020)
+#define SQL_CA_CONSTRAINT_DEFERRABLE            __MSABI_LONG(0x00000040)
+#define SQL_CA_CONSTRAINT_NON_DEFERRABLE        __MSABI_LONG(0x00000080)
+
+#define SQL_CCS_CREATE_CHARACTER_SET    __MSABI_LONG(0x00000001)
+#define SQL_CCS_COLLATE_CLAUSE          __MSABI_LONG(0x00000002)
+#define SQL_CCS_LIMITED_COLLATION       __MSABI_LONG(0x00000004)
+
+#define SQL_CCOL_CREATE_COLLATION       __MSABI_LONG(0x00000001)
+
+#define SQL_CDO_CREATE_DOMAIN                   __MSABI_LONG(0x00000001)
+#define SQL_CDO_DEFAULT                         __MSABI_LONG(0x00000002)
+#define SQL_CDO_CONSTRAINT                      __MSABI_LONG(0x00000004)
+#define SQL_CDO_COLLATION                       __MSABI_LONG(0x00000008)
+#define SQL_CDO_CONSTRAINT_NAME_DEFINITION      __MSABI_LONG(0x00000010)
+#define SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED   __MSABI_LONG(0x00000020)
+#define SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE  __MSABI_LONG(0x00000040)
+#define SQL_CDO_CONSTRAINT_DEFERRABLE           __MSABI_LONG(0x00000080)
+#define SQL_CDO_CONSTRAINT_NON_DEFERRABLE       __MSABI_LONG(0x00000100)
+
+#define SQL_CT_CREATE_TABLE                     __MSABI_LONG(0x00000001)
+#define SQL_CT_COMMIT_PRESERVE                  __MSABI_LONG(0x00000002)
+#define SQL_CT_COMMIT_DELETE                    __MSABI_LONG(0x00000004)
+#define SQL_CT_GLOBAL_TEMPORARY                 __MSABI_LONG(0x00000008)
+#define SQL_CT_LOCAL_TEMPORARY                  __MSABI_LONG(0x00000010)
+#define SQL_CT_CONSTRAINT_INITIALLY_DEFERRED    __MSABI_LONG(0x00000020)
+#define SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE   __MSABI_LONG(0x00000040)
+#define SQL_CT_CONSTRAINT_DEFERRABLE            __MSABI_LONG(0x00000080)
+#define SQL_CT_CONSTRAINT_NON_DEFERRABLE        __MSABI_LONG(0x00000100)
+#define SQL_CT_COLUMN_CONSTRAINT                __MSABI_LONG(0x00000200)
+#define SQL_CT_COLUMN_DEFAULT                   __MSABI_LONG(0x00000400)
+#define SQL_CT_COLUMN_COLLATION                 __MSABI_LONG(0x00000800)
+#define SQL_CT_TABLE_CONSTRAINT                 __MSABI_LONG(0x00001000)
+#define SQL_CT_CONSTRAINT_NAME_DEFINITION       __MSABI_LONG(0x00002000)
+
+#define SQL_DI_CREATE_INDEX             __MSABI_LONG(0x00000001)
+#define SQL_DI_DROP_INDEX               __MSABI_LONG(0x00000002)
+
+#define SQL_DC_DROP_COLLATION           __MSABI_LONG(0x00000001)
+
+#define SQL_DD_DROP_DOMAIN              __MSABI_LONG(0x00000001)
+#define SQL_DD_RESTRICT                 __MSABI_LONG(0x00000002)
+#define SQL_DD_CASCADE                  __MSABI_LONG(0x00000004)
+
+#define SQL_DS_DROP_SCHEMA              __MSABI_LONG(0x00000001)
+#define SQL_DS_RESTRICT                 __MSABI_LONG(0x00000002)
+#define SQL_DS_CASCADE                  __MSABI_LONG(0x00000004)
+
+#define SQL_DCS_DROP_CHARACTER_SET      __MSABI_LONG(0x00000001)
+
+#define SQL_DA_DROP_ASSERTION           __MSABI_LONG(0x00000001)
+
+#define SQL_DT_DROP_TABLE               __MSABI_LONG(0x00000001)
+#define SQL_DT_RESTRICT                 __MSABI_LONG(0x00000002)
+#define SQL_DT_CASCADE                  __MSABI_LONG(0x00000004)
+
+#define SQL_DTR_DROP_TRANSLATION        __MSABI_LONG(0x00000001)
+
+#define SQL_DV_DROP_VIEW                __MSABI_LONG(0x00000001)
+#define SQL_DV_RESTRICT                 __MSABI_LONG(0x00000002)
+#define SQL_DV_CASCADE                  __MSABI_LONG(0x00000004)
+
+#define SQL_IS_INSERT_LITERALS          __MSABI_LONG(0x00000001)
+#define SQL_IS_INSERT_SEARCHED          __MSABI_LONG(0x00000002)
+#define SQL_IS_SELECT_INTO              __MSABI_LONG(0x00000004)
+
+#define SQL_OIC_CORE                    __MSABI_LONG(1U)
+#define SQL_OIC_LEVEL1                  __MSABI_LONG(2U)
+#define SQL_OIC_LEVEL2                  __MSABI_LONG(3U)
+
+#define SQL_SFKD_CASCADE                __MSABI_LONG(0x00000001)
+#define SQL_SFKD_NO_ACTION              __MSABI_LONG(0x00000002)
+#define SQL_SFKD_SET_DEFAULT            __MSABI_LONG(0x00000004)
+#define SQL_SFKD_SET_NULL               __MSABI_LONG(0x00000008)
+
+#define SQL_SFKU_CASCADE                __MSABI_LONG(0x00000001)
+#define SQL_SFKU_NO_ACTION              __MSABI_LONG(0x00000002)
+#define SQL_SFKU_SET_DEFAULT            __MSABI_LONG(0x00000004)
+#define SQL_SFKU_SET_NULL               __MSABI_LONG(0x00000008)
+
+#define SQL_SG_USAGE_ON_DOMAIN          __MSABI_LONG(0x00000001)
+#define SQL_SG_USAGE_ON_CHARACTER_SET   __MSABI_LONG(0x00000002)
+#define SQL_SG_USAGE_ON_COLLATION       __MSABI_LONG(0x00000004)
+#define SQL_SG_USAGE_ON_TRANSLATION     __MSABI_LONG(0x00000008)
+#define SQL_SG_WITH_GRANT_OPTION        __MSABI_LONG(0x00000010)
+#define SQL_SG_DELETE_TABLE             __MSABI_LONG(0x00000020)
+#define SQL_SG_INSERT_TABLE             __MSABI_LONG(0x00000040)
+#define SQL_SG_INSERT_COLUMN            __MSABI_LONG(0x00000080)
+#define SQL_SG_REFERENCES_TABLE         __MSABI_LONG(0x00000100)
+#define SQL_SG_REFERENCES_COLUMN        __MSABI_LONG(0x00000200)
+#define SQL_SG_SELECT_TABLE             __MSABI_LONG(0x00000400)
+#define SQL_SG_UPDATE_TABLE             __MSABI_LONG(0x00000800)
+#define SQL_SG_UPDATE_COLUMN            __MSABI_LONG(0x00001000)
+
+#define SQL_SP_EXISTS                   __MSABI_LONG(0x00000001)
+#define SQL_SP_ISNOTNULL                __MSABI_LONG(0x00000002)
+#define SQL_SP_ISNULL                   __MSABI_LONG(0x00000004)
+#define SQL_SP_MATCH_FULL               __MSABI_LONG(0x00000008)
+#define SQL_SP_MATCH_PARTIAL            __MSABI_LONG(0x00000010)
+#define SQL_SP_MATCH_UNIQUE_FULL        __MSABI_LONG(0x00000020)
+#define SQL_SP_MATCH_UNIQUE_PARTIAL     __MSABI_LONG(0x00000040)
+#define SQL_SP_OVERLAPS                 __MSABI_LONG(0x00000080)
+#define SQL_SP_UNIQUE                   __MSABI_LONG(0x00000100)
+#define SQL_SP_LIKE                     __MSABI_LONG(0x00000200)
+#define SQL_SP_IN                       __MSABI_LONG(0x00000400)
+#define SQL_SP_BETWEEN                  __MSABI_LONG(0x00000800)
+#define SQL_SP_COMPARISON               __MSABI_LONG(0x00001000)
+#define SQL_SP_QUANTIFIED_COMPARISON    __MSABI_LONG(0x00002000)
+
+#define SQL_SRJO_CORRESPONDING_CLAUSE   __MSABI_LONG(0x00000001)
+#define SQL_SRJO_CROSS_JOIN             __MSABI_LONG(0x00000002)
+#define SQL_SRJO_EXCEPT_JOIN            __MSABI_LONG(0x00000004)
+#define SQL_SRJO_FULL_OUTER_JOIN        __MSABI_LONG(0x00000008)
+#define SQL_SRJO_INNER_JOIN             __MSABI_LONG(0x00000010)
+#define SQL_SRJO_INTERSECT_JOIN         __MSABI_LONG(0x00000020)
+#define SQL_SRJO_LEFT_OUTER_JOIN        __MSABI_LONG(0x00000040)
+#define SQL_SRJO_NATURAL_JOIN           __MSABI_LONG(0x00000080)
+#define SQL_SRJO_RIGHT_OUTER_JOIN       __MSABI_LONG(0x00000100)
+#define SQL_SRJO_UNION_JOIN             __MSABI_LONG(0x00000200)
+
+#define SQL_SR_USAGE_ON_DOMAIN          __MSABI_LONG(0x00000001)
+#define SQL_SR_USAGE_ON_CHARACTER_SET   __MSABI_LONG(0x00000002)
+#define SQL_SR_USAGE_ON_COLLATION       __MSABI_LONG(0x00000004)
+#define SQL_SR_USAGE_ON_TRANSLATION     __MSABI_LONG(0x00000008)
+#define SQL_SR_GRANT_OPTION_FOR         __MSABI_LONG(0x00000010)
+#define SQL_SR_CASCADE                  __MSABI_LONG(0x00000020)
+#define SQL_SR_RESTRICT                 __MSABI_LONG(0x00000040)
+#define SQL_SR_DELETE_TABLE             __MSABI_LONG(0x00000080)
+#define SQL_SR_INSERT_TABLE             __MSABI_LONG(0x00000100)
+#define SQL_SR_INSERT_COLUMN            __MSABI_LONG(0x00000200)
+#define SQL_SR_REFERENCES_TABLE         __MSABI_LONG(0x00000400)
+#define SQL_SR_REFERENCES_COLUMN        __MSABI_LONG(0x00000800)
+#define SQL_SR_SELECT_TABLE             __MSABI_LONG(0x00001000)
+#define SQL_SR_UPDATE_TABLE             __MSABI_LONG(0x00002000)
+#define SQL_SR_UPDATE_COLUMN            __MSABI_LONG(0x00004000)
+
+#define SQL_SRVC_VALUE_EXPRESSION       __MSABI_LONG(0x00000001)
+#define SQL_SRVC_NULL                   __MSABI_LONG(0x00000002)
+#define SQL_SRVC_DEFAULT                __MSABI_LONG(0x00000004)
+#define SQL_SRVC_ROW_SUBQUERY           __MSABI_LONG(0x00000008)
+
+#define SQL_SVE_CASE                    __MSABI_LONG(0x00000001)
+#define SQL_SVE_CAST                    __MSABI_LONG(0x00000002)
+#define SQL_SVE_COALESCE                __MSABI_LONG(0x00000004)
+#define SQL_SVE_NULLIF                  __MSABI_LONG(0x00000008)
+
+#define SQL_SCC_XOPEN_CLI_VERSION1      __MSABI_LONG(0x00000001)
+#define SQL_SCC_ISO92_CLI               __MSABI_LONG(0x00000002)
+
+#define SQL_US_UNION							SQL_U_UNION
+#define SQL_US_UNION_ALL						SQL_U_UNION_ALL
+
+#endif
+
+#define SQL_DTC_ENLIST_EXPENSIVE        __MSABI_LONG(0x00000001)
+#define SQL_DTC_UNENLIST_EXPENSIVE      __MSABI_LONG(0x00000002)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_FETCH_FIRST_USER				31
+#define SQL_FETCH_FIRST_SYSTEM				32
+#endif
+
+#define SQL_ENTIRE_ROWSET            0
+
+#define SQL_POSITION                 0
+#define SQL_REFRESH                  1
+#define SQL_UPDATE                   2
+#define SQL_DELETE                   3
+
+#define SQL_ADD                      4
+#define	SQL_SETPOS_MAX_OPTION_VALUE			SQL_ADD
+#if (ODBCVER >= 0x0300)
+#define SQL_UPDATE_BY_BOOKMARK		 5
+#define SQL_DELETE_BY_BOOKMARK		 6
+#define	SQL_FETCH_BY_BOOKMARK		 7
+
+#endif
+
+#define SQL_LOCK_NO_CHANGE           0
+#define SQL_LOCK_EXCLUSIVE           1
+#define SQL_LOCK_UNLOCK              2
+
+#define	SQL_SETPOS_MAX_LOCK_VALUE		SQL_LOCK_UNLOCK
+
+#define SQL_POSITION_TO(hstmt,irow) SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE)
+#define SQL_LOCK_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_POSITION,fLock)
+#define SQL_REFRESH_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_REFRESH,fLock)
+#define SQL_UPDATE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE)
+#define SQL_DELETE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE)
+#define SQL_ADD_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE)
+
+#define SQL_BEST_ROWID                  1
+#define SQL_ROWVER                      2
+
+#define SQL_PC_NOT_PSEUDO               1
+
+#define SQL_QUICK                       0
+#define SQL_ENSURE                      1
+
+#define SQL_TABLE_STAT                  0
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ALL_CATALOGS				"%"
+#define SQL_ALL_SCHEMAS					"%"
+#define SQL_ALL_TABLE_TYPES				"%"
+#endif  /* ODBCVER >= 0x0300 */
+
+#define SQL_DRIVER_NOPROMPT             0
+#define SQL_DRIVER_COMPLETE             1
+#define SQL_DRIVER_PROMPT               2
+#define SQL_DRIVER_COMPLETE_REQUIRED    3
+
+SQLRETURN WINAPI  SQLDriverConnect(
+    SQLHDBC            hdbc,
+    SQLHWND            hwnd,
+    SQLCHAR 		  *szConnStrIn,
+    SQLSMALLINT        cbConnStrIn,
+    SQLCHAR           *szConnStrOut,
+    SQLSMALLINT        cbConnStrOutMax,
+    SQLSMALLINT 	  *pcbConnStrOut,
+    SQLUSMALLINT       fDriverCompletion);
+
+#define SQL_FETCH_BOOKMARK               8
+
+#define SQL_ROW_SUCCESS                  0
+#define SQL_ROW_DELETED                  1
+#define SQL_ROW_UPDATED                  2
+#define SQL_ROW_NOROW                    3
+#define SQL_ROW_ADDED                    4
+#define SQL_ROW_ERROR                    5
+#if (ODBCVER >= 0x0300)
+#define SQL_ROW_SUCCESS_WITH_INFO		 6
+#define SQL_ROW_PROCEED					 0
+#define SQL_ROW_IGNORE					 1
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PARAM_SUCCESS				0
+#define SQL_PARAM_SUCCESS_WITH_INFO		6
+#define SQL_PARAM_ERROR					5
+#define SQL_PARAM_UNUSED				7
+#define SQL_PARAM_DIAG_UNAVAILABLE		1
+
+#define SQL_PARAM_PROCEED				0
+#define SQL_PARAM_IGNORE				1
+#endif
+
+#define SQL_CASCADE                      0
+#define SQL_RESTRICT                     1
+#define SQL_SET_NULL                     2
+#if (ODBCVER >= 0x0250)
+#define SQL_NO_ACTION			 3
+#define SQL_SET_DEFAULT			 4
+#endif
+
+#if (ODBCVER >= 0x0300)
+
+#define SQL_INITIALLY_DEFERRED			5
+#define SQL_INITIALLY_IMMEDIATE			6
+#define SQL_NOT_DEFERRABLE			7
+
+#endif
+
+#define SQL_PARAM_TYPE_UNKNOWN           0
+#define SQL_PARAM_INPUT                  1
+#define SQL_PARAM_INPUT_OUTPUT           2
+#define SQL_RESULT_COL                   3
+#define SQL_PARAM_OUTPUT                 4
+#define SQL_RETURN_VALUE                 5
+
+#define SQL_PT_UNKNOWN                   0
+#define SQL_PT_PROCEDURE                 1
+#define SQL_PT_FUNCTION                  2
+
+#define SQL_ODBC_KEYWORDS "ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"
+
+SQLRETURN WINAPI  SQLBrowseConnect(
+    SQLHDBC            hdbc,
+    SQLCHAR 		  *szConnStrIn,
+    SQLSMALLINT        cbConnStrIn,
+    SQLCHAR 		  *szConnStrOut,
+    SQLSMALLINT        cbConnStrOutMax,
+    SQLSMALLINT       *pcbConnStrOut);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI	SQLBulkOperations(
+	SQLHSTMT			StatementHandle,
+	SQLSMALLINT			Operation);
+#endif
+
+SQLRETURN WINAPI  SQLColAttributes(
+    SQLHSTMT           hstmt,
+    SQLUSMALLINT       icol,
+    SQLUSMALLINT       fDescType,
+    SQLPOINTER         rgbDesc,
+    SQLSMALLINT        cbDescMax,
+    SQLSMALLINT 	  *pcbDesc,
+    SQLINTEGER 		  *pfDesc);
+
+SQLRETURN WINAPI  SQLColumnPrivileges(
+    SQLHSTMT           hstmt,
+    SQLCHAR 		  *szCatalogName,
+    SQLSMALLINT        cbCatalogName,
+    SQLCHAR 		  *szSchemaName,
+    SQLSMALLINT        cbSchemaName,
+    SQLCHAR 		  *szTableName,
+    SQLSMALLINT        cbTableName,
+    SQLCHAR 		  *szColumnName,
+    SQLSMALLINT        cbColumnName);
+
+SQLRETURN WINAPI  SQLDescribeParam(
+    SQLHSTMT           hstmt,
+    SQLUSMALLINT       ipar,
+    SQLSMALLINT 	  *pfSqlType,
+    SQLUINTEGER 	  *pcbParamDef,
+    SQLSMALLINT 	  *pibScale,
+    SQLSMALLINT 	  *pfNullable);
+
+SQLRETURN WINAPI  SQLExtendedFetch(
+    SQLHSTMT           hstmt,
+    SQLUSMALLINT       fFetchType,
+    SQLINTEGER         irow,
+    SQLUINTEGER 	  *pcrow,
+    SQLUSMALLINT 	  *rgfRowStatus);
+
+SQLRETURN WINAPI  SQLForeignKeys(
+    SQLHSTMT           hstmt,
+    SQLCHAR 		  *szPkCatalogName,
+    SQLSMALLINT        cbPkCatalogName,
+    SQLCHAR 		  *szPkSchemaName,
+    SQLSMALLINT        cbPkSchemaName,
+    SQLCHAR 		  *szPkTableName,
+    SQLSMALLINT        cbPkTableName,
+    SQLCHAR 		  *szFkCatalogName,
+    SQLSMALLINT        cbFkCatalogName,
+    SQLCHAR 		  *szFkSchemaName,
+    SQLSMALLINT        cbFkSchemaName,
+    SQLCHAR 		  *szFkTableName,
+    SQLSMALLINT        cbFkTableName);
+
+SQLRETURN WINAPI  SQLMoreResults(
+    SQLHSTMT           hstmt);
+
+SQLRETURN WINAPI  SQLNativeSql(
+    SQLHDBC            hdbc,
+    SQLCHAR 		  *szSqlStrIn,
+    SQLINTEGER         cbSqlStrIn,
+    SQLCHAR 		  *szSqlStr,
+    SQLINTEGER         cbSqlStrMax,
+    SQLINTEGER 		  *pcbSqlStr);
+
+SQLRETURN WINAPI  SQLNumParams(
+    SQLHSTMT           hstmt,
+    SQLSMALLINT 	  *pcpar);
+
+SQLRETURN WINAPI  SQLParamOptions(
+    SQLHSTMT           hstmt,
+    SQLUINTEGER        crow,
+    SQLUINTEGER 	  *pirow);
+
+SQLRETURN WINAPI  SQLPrimaryKeys(
+    SQLHSTMT           hstmt,
+    SQLCHAR 		  *szCatalogName,
+    SQLSMALLINT        cbCatalogName,
+    SQLCHAR 		  *szSchemaName,
+    SQLSMALLINT        cbSchemaName,
+    SQLCHAR 		  *szTableName,
+    SQLSMALLINT        cbTableName);
+
+SQLRETURN WINAPI  SQLProcedureColumns(
+    SQLHSTMT           hstmt,
+    SQLCHAR 		  *szCatalogName,
+    SQLSMALLINT        cbCatalogName,
+    SQLCHAR 		  *szSchemaName,
+    SQLSMALLINT        cbSchemaName,
+    SQLCHAR 		  *szProcName,
+    SQLSMALLINT        cbProcName,
+    SQLCHAR 		  *szColumnName,
+    SQLSMALLINT        cbColumnName);
+
+SQLRETURN WINAPI  SQLProcedures(
+    SQLHSTMT           hstmt,
+    SQLCHAR 		  *szCatalogName,
+    SQLSMALLINT        cbCatalogName,
+    SQLCHAR 		  *szSchemaName,
+    SQLSMALLINT        cbSchemaName,
+    SQLCHAR 		  *szProcName,
+    SQLSMALLINT        cbProcName);
+
+SQLRETURN WINAPI  SQLSetPos(
+    SQLHSTMT           hstmt,
+    SQLUSMALLINT       irow,
+    SQLUSMALLINT       fOption,
+    SQLUSMALLINT       fLock);
+
+SQLRETURN WINAPI  SQLTablePrivileges(
+    SQLHSTMT           hstmt,
+    SQLCHAR 		  *szCatalogName,
+    SQLSMALLINT        cbCatalogName,
+    SQLCHAR 		  *szSchemaName,
+    SQLSMALLINT        cbSchemaName,
+    SQLCHAR 		  *szTableName,
+    SQLSMALLINT        cbTableName);
+
+SQLRETURN WINAPI  SQLDrivers(
+    SQLHENV            henv,
+    SQLUSMALLINT       fDirection,
+    SQLCHAR 		  *szDriverDesc,
+    SQLSMALLINT        cbDriverDescMax,
+    SQLSMALLINT 	  *pcbDriverDesc,
+    SQLCHAR 		  *szDriverAttributes,
+    SQLSMALLINT        cbDrvrAttrMax,
+    SQLSMALLINT 	  *pcbDrvrAttr);
+
+SQLRETURN WINAPI  SQLBindParameter(
+    SQLHSTMT           hstmt,
+    SQLUSMALLINT       ipar,
+    SQLSMALLINT        fParamType,
+    SQLSMALLINT        fCType,
+    SQLSMALLINT        fSqlType,
+    SQLUINTEGER        cbColDef,
+    SQLSMALLINT        ibScale,
+    SQLPOINTER         rgbValue,
+    SQLINTEGER         cbValueMax,
+    SQLINTEGER 		  *pcbValue);
+
+#ifdef ODBC_STD
+#define SQLAllocHandle  SQLAllocHandleStd
+#define SQLAllocEnv(phenv)  SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, phenv)
+
+#define SQL_YEAR						SQL_CODE_YEAR
+#define SQL_MONTH						SQL_CODE_MONTH
+#define SQL_DAY							SQL_CODE_DAY
+#define SQL_HOUR						SQL_CODE_HOUR
+#define SQL_MINUTE						SQL_CODE_MINUTE
+#define SQL_SECOND						SQL_CODE_SECOND
+#define SQL_YEAR_TO_MONTH				SQL_CODE_YEAR_TO_MONTH
+#define SQL_DAY_TO_HOUR					SQL_CODE_DAY_TO_HOUR
+#define SQL_DAY_TO_MINUTE				SQL_CODE_DAY_TO_MINUTE
+#define SQL_DAY_TO_SECOND				SQL_CODE_DAY_TO_SECOND
+#define SQL_HOUR_TO_MINUTE				SQL_CODE_HOUR_TO_MINUTE
+#define SQL_HOUR_TO_SECOND				SQL_CODE_HOUR_TO_SECOND
+#define SQL_MINUTE_TO_SECOND			SQL_CODE_MINUTE_TO_SECOND
+#endif
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI  SQLAllocHandleStd(
+	SQLSMALLINT		fHandleType,
+	SQLHANDLE		hInput,
+	SQLHANDLE	   *phOutput);
+#endif
+
+#define SQL_DATABASE_NAME               16
+#define SQL_FD_FETCH_PREV               SQL_FD_FETCH_PRIOR
+#define SQL_FETCH_PREV                  SQL_FETCH_PRIOR
+#define SQL_CONCUR_TIMESTAMP            SQL_CONCUR_ROWVER
+#define SQL_SCCO_OPT_TIMESTAMP          SQL_SCCO_OPT_ROWVER
+#define SQL_CC_DELETE                   SQL_CB_DELETE
+#define SQL_CR_DELETE                   SQL_CB_DELETE
+#define SQL_CC_CLOSE                    SQL_CB_CLOSE
+#define SQL_CR_CLOSE                    SQL_CB_CLOSE
+#define SQL_CC_PRESERVE                 SQL_CB_PRESERVE
+#define SQL_CR_PRESERVE                 SQL_CB_PRESERVE
+#define SQL_SCROLL_FORWARD_ONLY         __MSABI_LONG(0)
+#define SQL_SCROLL_KEYSET_DRIVEN        (__MSABI_LONG(-1))
+#define SQL_SCROLL_DYNAMIC              (__MSABI_LONG(-2))
+#define SQL_SCROLL_STATIC               (__MSABI_LONG(-3))
+
+SQLRETURN WINAPI  SQLSetScrollOptions(
+    SQLHSTMT           hstmt,
+    SQLUSMALLINT       fConcurrency,
+    SQLINTEGER         crowKeyset,
+    SQLUSMALLINT       crowRowset);
+
+#define		TRACE_VERSION	1000
+
+RETCODE	 TraceOpenLogFile(LPWSTR,LPWSTR,DWORD);
+RETCODE	 TraceCloseLogFile(void);
+VOID	 TraceReturn(RETCODE,RETCODE);
+DWORD	 TraceVersion(void);
+
+/*#define TRACE_ON                      __MSABI_LONG(0x00000001)*/
+#define TRACE_VS_EVENT_ON               __MSABI_LONG(0x00000002)
+
+RETCODE	TraceVSControl(DWORD);
+
+#define ODBC_VS_FLAG_UNICODE_ARG        __MSABI_LONG(0x00000001)
+#define ODBC_VS_FLAG_UNICODE_COR        __MSABI_LONG(0x00000002)
+#define ODBC_VS_FLAG_RETCODE            __MSABI_LONG(0x00000004)
+#define ODBC_VS_FLAG_STOP               __MSABI_LONG(0x00000008)
+
+typedef struct tagODBC_VS_ARGS {
+	const GUID	*pguidEvent;
+	DWORD	dwFlags;
+	union {
+		WCHAR	*wszArg;
+		CHAR	*szArg;
+	} DUMMYUNIONNAME1;
+	union {
+		WCHAR	*wszCorrelation;
+		CHAR	*szCorrelation;
+	} DUMMYUNIONNAME2;
+	RETCODE	RetCode;
+} ODBC_VS_ARGS, *PODBC_VS_ARGS;
+
+VOID	FireVSDebugEvent(PODBC_VS_ARGS);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h
new file mode 100644
index 0000000..5933cfa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 1999 Xiang Li
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SQLTYPES_H
+#define __SQLTYPES_H
+
+#ifndef ODBCVER
+#define ODBCVER	0x0351
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned char   SQLCHAR;
+#ifdef WINE_UNICODE_NATIVE
+typedef wchar_t         SQLWCHAR;
+#else
+typedef unsigned short  SQLWCHAR;
+#endif
+#ifndef UNICODE
+typedef SQLCHAR         SQLTCHAR;
+#else
+typedef SQLWCHAR        SQLTCHAR;
+#endif
+
+#if (ODBCVER >= 0x0300)
+typedef unsigned char   SQLDATE;
+typedef unsigned char   SQLDECIMAL;
+typedef double          SQLDOUBLE;
+typedef double          SQLFLOAT;
+#endif
+
+typedef int             SQLINTEGER;
+
+#if (ODBCVER >= 0x0300)
+typedef unsigned char   SQLNUMERIC;
+#endif
+
+typedef void *          SQLPOINTER;
+
+#if (ODBCVER >= 0x0300)
+typedef float           SQLREAL;
+#endif
+
+typedef signed short int   SQLSMALLINT;
+typedef unsigned short  SQLUSMALLINT;
+
+#if (ODBCVER >= 0x0300)
+typedef unsigned char   SQLTIME;
+typedef unsigned char   SQLTIMESTAMP;
+typedef unsigned char   SQLVARCHAR;
+#endif
+
+typedef SQLSMALLINT     SQLRETURN;
+
+#if (ODBCVER >= 0x0300)
+typedef void *SQLHANDLE;
+typedef SQLHANDLE               SQLHENV;
+typedef SQLHANDLE               SQLHDBC;
+typedef SQLHANDLE               SQLHSTMT;
+typedef SQLHANDLE               SQLHDESC;
+#else
+typedef void *SQLHENV;
+typedef void *SQLHDBC;
+typedef void *SQLHSTMT;
+#endif
+
+typedef signed char             SCHAR;
+typedef SCHAR                   SQLSCHAR;
+typedef int                     SDWORD;
+typedef signed short int        SWORD;
+typedef unsigned int            UDWORD;
+typedef unsigned short int      UWORD;
+typedef UDWORD                  SQLUINTEGER;
+typedef signed long             SLONG;
+typedef signed short            SSHORT;
+typedef double                  SDOUBLE;
+typedef double            		LDOUBLE;
+typedef float                   SFLOAT;
+typedef void*              		PTR;
+typedef signed short            RETCODE;
+typedef void*                   SQLHWND;
+
+#ifdef _WIN64
+typedef INT64           SQLLEN;
+typedef UINT64          SQLULEN;
+typedef UINT64          SQLSETPOSIROW;
+#else
+#define SQLLEN          SQLINTEGER
+#define SQLULEN         SQLUINTEGER
+#define SQLSETPOSIROW   SQLUSMALLINT
+#endif
+
+typedef SQLHANDLE          		HENV;
+typedef SQLHANDLE          		HDBC;
+typedef SQLHANDLE          		HSTMT;
+
+#ifndef	__SQLDATE
+#define	__SQLDATE
+typedef struct tagDATE_STRUCT
+{
+        SQLSMALLINT    year;
+        SQLUSMALLINT   month;
+        SQLUSMALLINT   day;
+} DATE_STRUCT;
+
+#if (ODBCVER >= 0x0300)
+typedef DATE_STRUCT	SQL_DATE_STRUCT;
+#endif
+
+typedef struct tagTIME_STRUCT
+{
+        SQLUSMALLINT   hour;
+        SQLUSMALLINT   minute;
+        SQLUSMALLINT   second;
+} TIME_STRUCT;
+
+#if (ODBCVER >= 0x0300)
+typedef TIME_STRUCT	SQL_TIME_STRUCT;
+#endif
+
+typedef struct tagTIMESTAMP_STRUCT
+{
+        SQLSMALLINT    year;
+        SQLUSMALLINT   month;
+        SQLUSMALLINT   day;
+        SQLUSMALLINT   hour;
+        SQLUSMALLINT   minute;
+        SQLUSMALLINT   second;
+        SQLUINTEGER    fraction;
+} TIMESTAMP_STRUCT;
+
+#if (ODBCVER >= 0x0300)
+typedef TIMESTAMP_STRUCT	SQL_TIMESTAMP_STRUCT;
+#endif
+
+
+#if (ODBCVER >= 0x0300)
+typedef enum
+{
+	SQL_IS_YEAR						= 1,
+	SQL_IS_MONTH					= 2,
+	SQL_IS_DAY						= 3,
+	SQL_IS_HOUR						= 4,
+	SQL_IS_MINUTE					= 5,
+	SQL_IS_SECOND					= 6,
+	SQL_IS_YEAR_TO_MONTH			= 7,
+	SQL_IS_DAY_TO_HOUR				= 8,
+	SQL_IS_DAY_TO_MINUTE			= 9,
+	SQL_IS_DAY_TO_SECOND			= 10,
+	SQL_IS_HOUR_TO_MINUTE			= 11,
+	SQL_IS_HOUR_TO_SECOND			= 12,
+	SQL_IS_MINUTE_TO_SECOND			= 13
+} SQLINTERVAL;
+
+#endif
+
+#if (ODBCVER >= 0x0300)
+typedef struct tagSQL_YEAR_MONTH
+{
+		SQLUINTEGER		year;
+		SQLUINTEGER		month;
+} SQL_YEAR_MONTH_STRUCT;
+
+typedef struct tagSQL_DAY_SECOND
+{
+		SQLUINTEGER		day;
+		SQLUINTEGER		hour;
+		SQLUINTEGER		minute;
+		SQLUINTEGER		second;
+		SQLUINTEGER		fraction;
+} SQL_DAY_SECOND_STRUCT;
+
+typedef struct tagSQL_INTERVAL_STRUCT
+{
+	SQLINTERVAL		interval_type;
+	SQLSMALLINT		interval_sign;
+	union {
+		SQL_YEAR_MONTH_STRUCT		year_month;
+		SQL_DAY_SECOND_STRUCT		day_second;
+	} intval;
+
+} SQL_INTERVAL_STRUCT;
+
+#endif
+
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define ODBCINT64	__int64
+#define UODBCINT64	unsigned __int64
+#ifdef ODBCINT64
+typedef ODBCINT64	SQLBIGINT;
+typedef unsigned ODBCINT64	SQLUBIGINT;
+#endif
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_MAX_NUMERIC_LEN		16
+typedef struct tagSQL_NUMERIC_STRUCT
+{
+	SQLCHAR		precision;
+	SQLSCHAR	scale;
+	SQLCHAR		sign;	/* 1=pos 0=neg */
+	SQLCHAR		val[SQL_MAX_NUMERIC_LEN];
+} SQL_NUMERIC_STRUCT;
+#endif
+
+#if (ODBCVER >= 0x0350)
+#ifdef GUID_DEFINED
+typedef GUID	SQLGUID;
+#else
+typedef struct  tagSQLGUID
+{
+    DWORD Data1;
+    WORD Data2;
+    WORD Data3;
+    BYTE Data4[ 8 ];
+} SQLGUID;
+#endif
+#endif
+
+
+typedef SQLULEN BOOKMARK;
+
+#define SQL_WCHAR             (-8)
+#define SQL_C_WCHAR            SQL_WCHAR
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl
new file mode 100644
index 0000000..f616f97
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2013 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    object,
+    uuid(0c733a1e-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface ISourcesRowset : IUnknown
+{
+    typedef DWORD DBSOURCETYPE;
+
+    enum DBSOURCETYPEENUM
+    {
+        DBSOURCETYPE_DATASOURCE     = 1,
+        DBSOURCETYPE_ENUMERATOR     = 2,
+    };
+
+    enum DBSOURCETYPEENUM20
+    {
+        DBSOURCETYPE_DATASOURCE_TDP = 1,
+        DBSOURCETYPE_DATASOURCE_MDP = 3,
+    };
+
+    enum DBSOURCETYPEENUM25
+    {
+        DBSOURCETYPE_BINDER         = 4,
+    };
+
+    [local]
+    HRESULT GetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets,
+        [in, out] DBPROPSET rgProperties[], [out] IUnknown **ppSourcesRowset);
+
+    [call_as(GetSourcesRowset)]
+    HRESULT RemoteGetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets,
+        [in] DBPROPSET * rgProperties, [out] IUnknown **ppSourcesRowset, [in] ULONG cTotalProps,
+        [out] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h
new file mode 100644
index 0000000..bf055e4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h
@@ -0,0 +1,67 @@
+/*
+ * System Restore definitions
+ *
+ * Copyright 2008 Paul Vriens
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SRRESTOREPTAPI_H
+#define __WINE_SRRESTOREPTAPI_H
+
+/* Event types */
+#define BEGIN_NESTED_SYSTEM_CHANGE 102
+#define END_NESTED_SYSTEM_CHANGE   103
+
+/* Restore point types */
+#define APPLICATION_INSTALL          0
+
+#define MAX_DESC                    64
+
+#pragma pack(1)
+
+typedef struct _RESTOREPTINFOA {
+    DWORD dwEventType;
+    DWORD dwRestorePtType;
+    INT64 llSequenceNumber;
+    CHAR  szDescription[MAX_DESC];
+} RESTOREPOINTINFOA, *PRESTOREPOINTINFOA;
+
+typedef struct _SMGRSTATUS {
+    DWORD nStatus;
+    INT64 llSequenceNumber;
+} STATEMGRSTATUS, *PSTATEMGRSTATUS;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI SRSetRestorePointA(PRESTOREPOINTINFOA, PSTATEMGRSTATUS);
+DWORD WINAPI SRRemoveRestorePoint(DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(__WINE_SRRESTOREPTAPI_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h
new file mode 100644
index 0000000..5361cbe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h
@@ -0,0 +1,842 @@
+/*
+ * Copyright (C) 2004 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SSPI_H__
+#define __WINE_SSPI_H__
+
+/* FIXME: #include <sdkddkver.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SEC_ENTRY __stdcall
+
+typedef WCHAR SEC_WCHAR;
+typedef CHAR  SEC_CHAR;
+
+#ifndef __SECSTATUS_DEFINED__
+#define __SECSTATUS_DEFINED__
+typedef LONG SECURITY_STATUS;
+#endif
+
+#ifdef UNICODE
+typedef SEC_WCHAR * SECURITY_PSTR;
+typedef const SEC_WCHAR *  SECURITY_PCSTR;
+#else
+typedef SEC_CHAR * SECURITY_PSTR;
+typedef const SEC_CHAR *  SECURITY_PCSTR;
+#endif
+
+#ifndef __SECHANDLE_DEFINED__
+#define __SECHANDLE_DEFINED__
+typedef struct _SecHandle
+{
+    ULONG_PTR dwLower;
+    ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+#endif
+
+#define SecInvalidateHandle(x) do { \
+ ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \
+ ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \
+ } while (0)
+
+#define SecIsValidHandle(x) \
+ ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \
+ (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))
+
+typedef SecHandle CredHandle;
+typedef PSecHandle PCredHandle;
+
+#ifndef __WINE_CTXTHANDLE_DEFINED__
+#define __WINE_CTXTHANDLE_DEFINED__
+typedef SecHandle CtxtHandle;
+typedef PSecHandle PCtxtHandle;
+#endif
+
+typedef struct _SECURITY_INTEGER
+{
+    ULONG LowPart;
+    LONG  HighPart;
+} SECURITY_INTEGER, *PSECURITY_INTEGER;
+typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
+
+#ifndef __UNICODE_STRING_DEFINED__
+#define __UNICODE_STRING_DEFINED__
+typedef struct _UNICODE_STRING {
+  USHORT Length;        /* bytes */
+  USHORT MaximumLength; /* bytes */
+  PWSTR  Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
+
+typedef struct _SecPkgInfoA
+{
+    ULONG     fCapabilities;
+    USHORT    wVersion;
+    USHORT    wRPCID;
+    ULONG     cbMaxToken;
+    SEC_CHAR *Name;
+    SEC_CHAR *Comment;
+} SecPkgInfoA, *PSecPkgInfoA;
+
+typedef struct _SecPkgInfoW
+{
+    ULONG      fCapabilities;
+    USHORT     wVersion;
+    USHORT     wRPCID;
+    ULONG      cbMaxToken;
+    SEC_WCHAR *Name;
+    SEC_WCHAR *Comment;
+} SecPkgInfoW, *PSecPkgInfoW;
+
+#define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo)
+#define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo)
+
+/* fCapabilities field of SecPkgInfo */
+#define SECPKG_FLAG_INTEGRITY              0x00000001
+#define SECPKG_FLAG_PRIVACY                0x00000002
+#define SECPKG_FLAG_TOKEN_ONLY             0x00000004
+#define SECPKG_FLAG_DATAGRAM               0x00000008
+#define SECPKG_FLAG_CONNECTION             0x00000010
+#define SECPKG_FLAG_MULTI_REQUIRED         0x00000020
+#define SECPKG_FLAG_CLIENT_ONLY            0x00000040
+#define SECPKG_FLAG_EXTENDED_ERROR         0x00000080
+#define SECPKG_FLAG_IMPERSONATION          0x00000100
+#define SECPKG_FLAG_ACCEPT_WIN32_NAME      0x00000200
+#define SECPKG_FLAG_STREAM                 0x00000400
+#define SECPKG_FLAG_NEGOTIABLE             0x00000800
+#define SECPKG_FLAG_GSS_COMPATIBLE         0x00001000
+#define SECPKG_FLAG_LOGON                  0x00002000
+#define SECPKG_FLAG_ASCII_BUFFERS          0x00004000
+#define SECPKG_FLAG_FRAGMENT               0x00008000
+#define SECPKG_FLAG_MUTUAL_AUTH            0x00010000
+#define SECPKG_FLAG_DELEGATION             0x00020000
+#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
+#define SECPKG_FLAG_RESTRICTED_TOKENS      0x00080000
+#define SECPKG_FLAG_NEGO_EXTENDER          0x00100000
+#define SECPKG_FLAG_NEGOTIABLE2            0x00200000
+#define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000
+#define SECPKG_FLAG_APPCONTAINER_CHECKS    0x00800000
+
+#define SECPKG_ID_NONE  0xffff
+
+typedef struct _SecBuffer
+{
+    ULONG cbBuffer;
+    ULONG BufferType;
+    PVOID pvBuffer;
+} SecBuffer, *PSecBuffer;
+
+/* values for BufferType */
+#define SECBUFFER_EMPTY               0
+#define SECBUFFER_DATA                1
+#define SECBUFFER_TOKEN               2
+#define SECBUFFER_PKG_PARAMS          3
+#define SECBUFFER_MISSING             4
+#define SECBUFFER_EXTRA               5
+#define SECBUFFER_STREAM_TRAILER      6
+#define SECBUFFER_STREAM_HEADER       7
+#define SECBUFFER_NEGOTIATION_INFO    8
+#define SECBUFFER_PADDING             9
+#define SECBUFFER_STREAM             10
+#define SECBUFFER_MECHLIST           11
+#define SECBUFFER_MECHLIST_SIGNATURE 12
+#define SECBUFFER_TARGET             13
+#define SECBUFFER_CHANNEL_BINDINGS   14
+
+#define SECBUFFER_ATTRMASK               0xf0000000
+#define SECBUFFER_READONLY               0x80000000
+#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
+#define SECBUFFER_RESERVED               0x60000000
+
+typedef struct _SecBufferDesc
+{
+    ULONG      ulVersion;
+    ULONG      cBuffers;
+    PSecBuffer pBuffers;
+} SecBufferDesc, *PSecBufferDesc;
+
+/* values for ulVersion */
+#define SECBUFFER_VERSION 0
+
+typedef void (SEC_ENTRY *SEC_GET_KEY_FN)(void *Arg, void *Principal,
+ ULONG KeyVer, void **Key, SECURITY_STATUS *Status);
+
+SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(PULONG pcPackages,
+ PSecPkgInfoA *ppPackageInfo);
+SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(PULONG pcPackages,
+ PSecPkgInfoW *ppPackageInfo);
+#define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages)
+
+typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG,
+ PSecPkgInfoA *);
+typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG,
+ PSecPkgInfoW *);
+#define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_)
+
+SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA(
+ PCredHandle phCredential, ULONG ulAttribute, void *pBuffer);
+SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW(
+ PCredHandle phCredential, ULONG ulAttribute, void *pBuffer);
+#define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes)
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)
+ (PCredHandle, ULONG, PVOID);
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)
+ (PCredHandle, ULONG, PVOID);
+#define QUERY_CREDENTIALS_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CREDENTIALS_ATTRIBUTES_FN_)
+
+/* values for QueryCredentialsAttributes ulAttribute */
+#define SECPKG_CRED_ATTR_NAMES 1
+
+/* types for QueryCredentialsAttributes */
+typedef struct _SecPkgCredentials_NamesA
+{
+    SEC_CHAR *sUserName;
+} SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA;
+
+typedef struct _SecPkgCredentials_NamesW
+{
+    SEC_WCHAR *sUserName;
+} SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;
+
+#define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names)
+
+SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA(
+ SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialsUse,
+ PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn,
+ PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry);
+SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW(
+ SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse,
+ PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn,
+ PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry);
+#define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle)
+
+/* flags for fCredentialsUse */
+#define SECPKG_CRED_INBOUND  0x00000001
+#define SECPKG_CRED_OUTBOUND 0x00000002
+#define SECPKG_CRED_BOTH     (SECPKG_CRED_INBOUND | SECPKG_CRED_OUTBOUND)
+#define SECPKG_CRED_DEFAULT  0x00000004
+#define SECPKG_CRED_RESERVED 0xf0000000
+
+typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(
+ SEC_CHAR *, SEC_CHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,
+ PCredHandle, PTimeStamp);
+typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
+ SEC_WCHAR *, SEC_WCHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,
+ PCredHandle, PTimeStamp);
+#define ACQUIRE_CREDENTIALS_HANDLE_FN WINELIB_NAME_AW(ACQUIRE_CREDENTIALS_HANDLE_FN_)
+
+SECURITY_STATUS SEC_ENTRY FreeContextBuffer(PVOID pv);
+
+typedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)(PVOID);
+
+SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(PCredHandle
+ phCredential);
+
+#define FreeCredentialHandle FreeCredentialsHandle
+
+typedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);
+
+SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA(
+ PCredHandle phCredential, PCtxtHandle phContext,
+ SEC_CHAR *pszTargetName, ULONG fContextReq,
+ ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput,
+ ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput,
+ ULONG *pfContextAttr, PTimeStamp ptsExpiry);
+SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(
+ PCredHandle phCredential, PCtxtHandle phContext,
+ SEC_WCHAR *pszTargetName, ULONG fContextReq,
+ ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput,
+ ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput,
+ ULONG *pfContextAttr, PTimeStamp ptsExpiry);
+#define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext)
+
+typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A)
+ (PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG, ULONG, PSecBufferDesc,
+ ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp);
+typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W)
+ (PCredHandle, PCtxtHandle, SEC_WCHAR *, ULONG, ULONG, ULONG, PSecBufferDesc,
+ ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp);
+#define INITIALIZE_SECURITY_CONTEXT_FN WINELIB_NAME_AW(INITIALIZE_SECURITY_CONTEXT_FN_)
+
+/* flags for InitializeSecurityContext fContextReq and pfContextAttr */
+#define ISC_REQ_DELEGATE               0x00000001
+#define ISC_REQ_MUTUAL_AUTH            0x00000002
+#define ISC_REQ_REPLAY_DETECT          0x00000004
+#define ISC_REQ_SEQUENCE_DETECT        0x00000008
+#define ISC_REQ_CONFIDENTIALITY        0x00000010
+#define ISC_REQ_USE_SESSION_KEY        0x00000020
+#define ISC_REQ_PROMPT_FOR_CREDS       0x00000040
+#define ISC_REQ_USE_SUPPLIED_CREDS     0x00000080
+#define ISC_REQ_ALLOCATE_MEMORY        0x00000100
+#define ISC_REQ_USE_DCE_STYLE          0x00000200
+#define ISC_REQ_DATAGRAM               0x00000400
+#define ISC_REQ_CONNECTION             0x00000800
+#define ISC_REQ_CALL_LEVEL             0x00001000
+#define ISC_REQ_FRAGMENT_SUPPLIED      0x00002000
+#define ISC_REQ_EXTENDED_ERROR         0x00004000
+#define ISC_REQ_STREAM                 0x00008000
+#define ISC_REQ_INTEGRITY              0x00010000
+#define ISC_REQ_IDENTIFY               0x00020000
+#define ISC_REQ_NULL_SESSION           0x00040000
+#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
+#define ISC_REQ_RESERVED1              0x00100000
+#define ISC_REQ_FRAGMENT_TO_FIT        0x00200000
+
+#define ISC_RET_DELEGATE               0x00000001
+#define ISC_RET_MUTUAL_AUTH            0x00000002
+#define ISC_RET_REPLAY_DETECT          0x00000004
+#define ISC_RET_SEQUENCE_DETECT        0x00000008
+#define ISC_RET_CONFIDENTIALITY        0x00000010
+#define ISC_RET_USE_SESSION_KEY        0x00000020
+#define ISC_RET_USED_COLLECTED_CREDS   0x00000040
+#define ISC_RET_USED_SUPPLIED_CREDS    0x00000080
+#define ISC_RET_ALLOCATED_MEMORY       0x00000100
+#define ISC_RET_USED_DCE_STYLE         0x00000200
+#define ISC_RET_DATAGRAM               0x00000400
+#define ISC_RET_CONNECTION             0x00000800
+#define ISC_RET_INTERMEDIATE_RETURN    0x00001000
+#define ISC_RET_CALL_LEVEL             0x00002000
+#define ISC_RET_EXTENDED_ERROR         0x00004000
+#define ISC_RET_STREAM                 0x00008000
+#define ISC_RET_INTEGRITY              0x00010000
+#define ISC_RET_IDENTIFY               0x00020000
+#define ISC_RET_NULL_SESSION           0x00040000
+#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
+#define ISC_RET_RESERVED1              0x00100000
+#define ISC_RET_FRAGMENT_ONLY          0x00200000
+
+SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
+ PCredHandle phCredential, PCtxtHandle phContext, PSecBufferDesc pInput,
+ ULONG fContextReq, ULONG TargetDataRep,
+ PCtxtHandle phNewContext, PSecBufferDesc pOutput,
+ ULONG *pfContextAttr, PTimeStamp ptsExpiry);
+
+typedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,
+ PCtxtHandle, PSecBufferDesc, ULONG, ULONG, PCtxtHandle,
+ PSecBufferDesc, ULONG *, PTimeStamp);
+
+/* flags for AcceptSecurityContext fContextReq and pfContextAttr */
+#define ASC_REQ_DELEGATE               0x00000001
+#define ASC_REQ_MUTUAL_AUTH            0x00000002
+#define ASC_REQ_REPLAY_DETECT          0x00000004
+#define ASC_REQ_SEQUENCE_DETECT        0x00000008
+#define ASC_REQ_CONFIDENTIALITY        0x00000010
+#define ASC_REQ_USE_SESSION_KEY        0x00000020
+#define ASC_REQ_ALLOCATE_MEMORY        0x00000100
+#define ASC_REQ_USE_DCE_STYLE          0x00000200
+#define ASC_REQ_DATAGRAM               0x00000400
+#define ASC_REQ_CONNECTION             0x00000800
+#define ASC_REQ_CALL_LEVEL             0x00001000
+#define ASC_REQ_FRAGMENT_SUPPLIED      0x00002000
+#define ASC_REQ_EXTENDED_ERROR         0x00008000
+#define ASC_REQ_STREAM                 0x00010000
+#define ASC_REQ_INTEGRITY              0x00020000
+#define ASC_REQ_LICENSING              0x00040000
+#define ASC_REQ_IDENTIFY               0x00080000
+#define ASC_REQ_ALLOW_NULL_SESSION     0x00100000
+#define ASC_REQ_ALLOW_NON_USER_LOGONS  0x00200000
+#define ASC_REQ_ALLOW_CONTEXT_REPLAY   0x00400000
+#define ASC_REQ_FRAGMENT_TO_FIT        0x00800000
+#define ASC_REQ_FRAGMENT_NO_TOKEN      0x01000000
+
+#define ASC_RET_DELEGATE               0x00000001
+#define ASC_RET_MUTUAL_AUTH            0x00000002
+#define ASC_RET_REPLAY_DETECT          0x00000004
+#define ASC_RET_SEQUENCE_DETECT        0x00000008
+#define ASC_RET_CONFIDENTIALITY        0x00000010
+#define ASC_RET_USE_SESSION_KEY        0x00000020
+#define ASC_RET_ALLOCATED_MEMORY       0x00000100
+#define ASC_RET_USED_DCE_STYLE         0x00000200
+#define ASC_RET_DATAGRAM               0x00000400
+#define ASC_RET_CONNECTION             0x00000800
+#define ASC_RET_CALL_LEVEL             0x00002000
+#define ASC_RET_THIRD_LEG_FAILED       0x00004000
+#define ASC_RET_EXTENDED_ERROR         0x00008000
+#define ASC_RET_STREAM                 0x00010000
+#define ASC_RET_INTEGRITY              0x00020000
+#define ASC_RET_LICENSING              0x00040000
+#define ASC_RET_IDENTIFY               0x00080000
+#define ASC_RET_NULL_SESSION           0x00100000
+#define ASC_RET_ALLOW_NON_USER_LOGONS  0x00200000
+#define ASC_RET_ALLOW_CONTEXT_REPLAY   0x00400000
+#define ASC_RET_FRAGMENT_ONLY          0x00800000
+#define ASC_RET_NO_TOKEN               0x01000000
+
+/* values for TargetDataRep */
+#define SECURITY_NATIVE_DREP  0x00000010
+#define SECURITY_NETWORK_DREP 0x00000000
+
+SECURITY_STATUS SEC_ENTRY CompleteAuthToken(PCtxtHandle phContext,
+ PSecBufferDesc pToken);
+
+typedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,
+ PSecBufferDesc);
+
+SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(PCtxtHandle phContext);
+
+typedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);
+
+SECURITY_STATUS SEC_ENTRY ApplyControlToken(PCtxtHandle phContext,
+ PSecBufferDesc pInput);
+
+typedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle,
+ PSecBufferDesc);
+
+SECURITY_STATUS SEC_ENTRY QueryContextAttributesA(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer);
+SECURITY_STATUS SEC_ENTRY QueryContextAttributesW(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer);
+#define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes)
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,
+ ULONG, void *);
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,
+ ULONG, void *);
+#define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_)
+
+/* values for QueryContextAttributes/SetContextAttributes ulAttribute */
+#define SECPKG_ATTR_SIZES               0
+#define SECPKG_ATTR_NAMES               1
+#define SECPKG_ATTR_LIFESPAN            2
+#define SECPKG_ATTR_DCE_INFO            3
+#define SECPKG_ATTR_STREAM_SIZES        4
+#define SECPKG_ATTR_KEY_INFO            5
+#define SECPKG_ATTR_AUTHORITY           6
+#define SECPKG_ATTR_PROTO_INFO          7
+#define SECPKG_ATTR_PASSWORD_EXPIRY     8
+#define SECPKG_ATTR_SESSION_KEY         9
+#define SECPKG_ATTR_PACKAGE_INFO       10
+#define SECPKG_ATTR_USER_FLAGS         11
+#define SECPKG_ATTR_NEGOTIATION_INFO   12
+#define SECPKG_ATTR_NATIVE_NAMES       13
+#define SECPKG_ATTR_FLAGS              14
+#define SECPKG_ATTR_USE_VALIDATED      15
+#define SECPKG_ATTR_CREDENTIAL_NAME    16
+#define SECPKG_ATTR_TARGET_INFORMATION 17
+#define SECPKG_ATTR_ACCESS_TOKEN       18
+#define SECPKG_ATTR_TARGET             19
+#define SECPKG_ATTR_AUTHENTICATION_ID  20
+
+/* types for QueryContextAttributes/SetContextAttributes */
+
+typedef struct _SecPkgContext_Sizes
+{
+    ULONG cbMaxToken;
+    ULONG cbMaxSignature;
+    ULONG cbBlockSize;
+    ULONG cbSecurityTrailer;
+} SecPkgContext_Sizes, *PSecPkgContext_Sizes;
+
+typedef struct _SecPkgContext_StreamSizes
+{
+    ULONG cbHeader;
+    ULONG cbTrailer;
+    ULONG cbMaximumMessage;
+    ULONG cbBuffers;
+    ULONG cbBlockSize;
+} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
+
+typedef struct _SecPkgContext_NamesA
+{
+    SEC_CHAR *sUserName;
+} SecPkgContext_NamesA, *PSecPkgContext_NamesA;
+
+typedef struct _SecPkgContext_NamesW
+{
+    SEC_WCHAR *sUserName;
+} SecPkgContext_NamesW, *PSecPkgContext_NamesW;
+
+#define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names)
+#define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names)
+
+typedef struct _SecPkgContext_Lifespan
+{
+    TimeStamp tsStart;
+    TimeStamp tsExpiry;
+} SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
+
+typedef struct _SecPkgContext_DceInfo
+{
+    ULONG AuthzSvc;
+    PVOID pPac;
+} SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
+
+typedef struct _SecPkgContext_KeyInfoA
+{
+    SEC_CHAR *sSignatureAlgorithmName;
+    SEC_CHAR *sEncryptAlgorithmName;
+    ULONG     KeySize;
+    ULONG     SignatureAlgorithm;
+    ULONG     EncryptAlgorithm;
+} SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA;
+
+typedef struct _SecPkgContext_KeyInfoW
+{
+    SEC_WCHAR *sSignatureAlgorithmName;
+    SEC_WCHAR *sEncryptAlgorithmName;
+    ULONG      KeySize;
+    ULONG      SignatureAlgorithm;
+    ULONG      EncryptAlgorithm;
+} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
+
+#define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo)
+#define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo)
+
+typedef struct _SecPkgContext_AuthorityA
+{
+    SEC_CHAR *sAuthorityName;
+} SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA;
+
+typedef struct _SecPkgContext_AuthorityW
+{
+    SEC_WCHAR *sAuthorityName;
+} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
+
+#define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority)
+#define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority)
+
+typedef struct _SecPkgContext_ProtoInfoA
+{
+    SEC_CHAR *sProtocolName;
+    ULONG     majorVersion;
+    ULONG     minorVersion;
+} SecPkgContext_ProtoInfoA, *PSecPkgContext_ProtoInfoA;
+
+typedef struct _SecPkgContext_ProtoInfoW
+{
+    SEC_WCHAR *sProtocolName;
+    ULONG      majorVersion;
+    ULONG      minorVersion;
+} SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
+
+#define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo)
+#define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo)
+
+typedef struct _SecPkgContext_PasswordExpiry
+{
+    TimeStamp tsPasswordExpires;
+} SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry;
+
+typedef struct _SecPkgContext_SessionKey
+{
+    ULONG          SessionKeyLength;
+    unsigned char *SessionKey;
+} SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
+
+typedef struct _SecPkgContext_PackageInfoA
+{
+    PSecPkgInfoA PackageInfo;
+} SecPkgContext_PackageInfoA, *PSecPkgContext_PackageInfoA;
+
+typedef struct _SecPkgContext_PackageInfoW
+{
+    PSecPkgInfoW PackageInfo;
+} SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
+
+#define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo)
+#define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo)
+
+typedef struct _SecPkgContext_Flags
+{
+    ULONG Flags;
+} SecPkgContext_Flags, *PSecPkgContext_Flags;
+
+typedef struct _SecPkgContext_UserFlags
+{
+    ULONG UserFlags;
+} SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
+
+typedef struct _SecPkgContext_NegotiationInfoA
+{
+    PSecPkgInfoA PackageInfo;
+    ULONG        NegotiationState;
+} SecPkgContext_NegotiationInfoA, *PSecPkgContext_NegotiationInfoA;
+
+typedef struct _SecPkgContext_NegotiationInfoW
+{
+    PSecPkgInfoW PackageInfo;
+    ULONG        NegotiationState;
+} SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW;
+
+#define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo)
+#define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo)
+
+/* values for NegotiationState */
+#define SECPKG_NEGOTIATION_COMPLETE      0
+#define SECPKG_NEGOTIATION_OPTIMISTIC    1
+#define SECPKG_NEGOTIATION_IN_PROGRESS   2
+#define SECPKG_NEGOTIATION_DIRECT        3
+#define SECPKG_NEGOTIATION_TRY_MULTICRED 4
+
+typedef struct _SecPkgContext_NativeNamesA
+{
+    SEC_CHAR *sClientName;
+    SEC_CHAR *sServerName;
+} SecPkgContext_NativeNamesA, *PSecPkgContext_NativeNamesA;
+
+typedef struct _SecPkgContext_NativeNamesW
+{
+    SEC_WCHAR *sClientName;
+    SEC_WCHAR *sServerName;
+} SecPkgContext_NativeNamesW, *PSecPkgContext_NativeNamesW;
+
+#define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames)
+#define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames)
+
+typedef struct _SecPkgContext_CredentialNameA
+{
+    ULONG     CredentialType;
+    SEC_CHAR *sCredentialName;
+} SecPkgContext_CredentialNameA, *PSecPkgContext_CredentialNameA;
+
+typedef struct _SecPkgContext_CredentialNameW
+{
+    ULONG      CredentialType;
+    SEC_WCHAR *sCredentialName;
+} SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
+
+#define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName)
+#define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName)
+
+typedef struct _SecPkgContext_AccessToken
+{
+    void *AccessToken;
+} SecPkgContext_AccessToken, *PSecPkgContext_AccessToken;
+
+typedef struct _SecPkgContext_TargetInformation
+{
+    ULONG          MarshalledTargetInfoLength;
+    unsigned char *MarshalledTargetInfo;
+} SecPkgContext_TargetInformation, *PSecPkgContext_TargetInformation;
+
+typedef struct _SecPkgContext_AuthzID
+{
+    ULONG  AuthzIDLength;
+    char  *AuthzID;
+} SecPkgContext_AuthzID, *PSecPkgContext_AuthzID;
+
+typedef struct _SecPkgContext_Target
+{
+    ULONG  TargetLength;
+    char  *Target;
+} SecPkgContext_Target, *PSecPkgContext_Target;
+
+SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(PCtxtHandle phContext);
+
+typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN)
+ (PCtxtHandle);
+
+SECURITY_STATUS SEC_ENTRY RevertSecurityContext(PCtxtHandle phContext);
+
+typedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);
+
+SECURITY_STATUS SEC_ENTRY MakeSignature(PCtxtHandle phContext,
+ ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo);
+
+typedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)(PCtxtHandle,
+ ULONG, PSecBufferDesc, ULONG);
+
+SECURITY_STATUS SEC_ENTRY VerifySignature(PCtxtHandle phContext,
+ PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP);
+
+typedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)(PCtxtHandle,
+ PSecBufferDesc, ULONG, PULONG);
+
+SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA(
+ SEC_CHAR *pszPackageName, PSecPkgInfoA *ppPackageInfo);
+SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW(
+ SEC_WCHAR *pszPackageName, PSecPkgInfoW *ppPackageInfo);
+#define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo)
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A)
+ (SEC_CHAR *, PSecPkgInfoA *);
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W)
+ (SEC_WCHAR *, PSecPkgInfoW *);
+#define QUERY_SECURITY_PACKAGE_INFO_FN WINELIB_NAME_AW(QUERY_SECURITY_PACKAGE_INFO_FN_)
+
+SECURITY_STATUS SEC_ENTRY ExportSecurityContext(PCtxtHandle phContext,
+ ULONG fFlags, PSecBuffer pPackedContext, void **pToken);
+
+typedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle,
+ ULONG, PSecBuffer, void **);
+
+/* values for ExportSecurityContext fFlags */
+#define SECPKG_CONTEXT_EXPORT_RESET_NEW  0x00000001
+#define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
+
+SECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR *pszPackage,
+ PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext);
+SECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR *pszPackage,
+ PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext);
+#define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext)
+
+typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *,
+ PSecBuffer, void *, PCtxtHandle);
+typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR *,
+ PSecBuffer, void *, PCtxtHandle);
+#define IMPORT_SECURITY_CONTEXT_FN WINELIB_NAME_AW(IMPORT_SECURITY_CONTEXT_FN_)
+
+SECURITY_STATUS SEC_ENTRY AddCredentialsA(PCredHandle hCredentials,
+ SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialUse,
+ void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument,
+ PTimeStamp ptsExpiry);
+SECURITY_STATUS SEC_ENTRY AddCredentialsW(PCredHandle hCredentials,
+ SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialUse,
+ void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument,
+ PTimeStamp ptsExpiry);
+#define AddCredentials WINELIB_NAME_AW(AddCredentials)
+
+typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)(PCredHandle,
+ SEC_CHAR *, SEC_CHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,
+ PTimeStamp);
+typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)(PCredHandle,
+ SEC_WCHAR *, SEC_WCHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,
+ PTimeStamp);
+
+SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(PCtxtHandle phContext,
+ HANDLE *phToken);
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN)
+ (PCtxtHandle, HANDLE *);
+
+SECURITY_STATUS SEC_ENTRY EncryptMessage(PCtxtHandle phContext, ULONG fQOP,
+ PSecBufferDesc pMessage, ULONG MessageSeqNo);
+SECURITY_STATUS SEC_ENTRY DecryptMessage(PCtxtHandle phContext,
+ PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP);
+
+/* values for EncryptMessage fQOP */
+#define SECQOP_WRAP_NO_ENCRYPT 0x80000001
+
+typedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)(PCtxtHandle, ULONG,
+ PSecBufferDesc, ULONG);
+typedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)(PCtxtHandle,
+ PSecBufferDesc, ULONG, PULONG);
+
+SECURITY_STATUS SEC_ENTRY SetContextAttributesA(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer, ULONG cbBuffer);
+SECURITY_STATUS SEC_ENTRY SetContextAttributesW(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer, ULONG cbBuffer);
+#define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes)
+
+typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,
+ ULONG, void *, ULONG);
+typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,
+ ULONG, void *, ULONG);
+
+#define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
+#define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
+#define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI)
+
+typedef struct _SECURITY_FUNCTION_TABLE_A
+{
+    ULONG                             dwVersion;
+    ENUMERATE_SECURITY_PACKAGES_FN_A  EnumerateSecurityPackagesA;
+    QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
+    ACQUIRE_CREDENTIALS_HANDLE_FN_A   AcquireCredentialsHandleA;
+    FREE_CREDENTIALS_HANDLE_FN        FreeCredentialsHandle;
+    void                             *Reserved2;
+    INITIALIZE_SECURITY_CONTEXT_FN_A  InitializeSecurityContextA;
+    ACCEPT_SECURITY_CONTEXT_FN        AcceptSecurityContext;
+    COMPLETE_AUTH_TOKEN_FN            CompleteAuthToken;
+    DELETE_SECURITY_CONTEXT_FN        DeleteSecurityContext;
+    APPLY_CONTROL_TOKEN_FN            ApplyControlToken;
+    QUERY_CONTEXT_ATTRIBUTES_FN_A     QueryContextAttributesA;
+    IMPERSONATE_SECURITY_CONTEXT_FN   ImpersonateSecurityContext;
+    REVERT_SECURITY_CONTEXT_FN        RevertSecurityContext;
+    MAKE_SIGNATURE_FN                 MakeSignature;
+    VERIFY_SIGNATURE_FN               VerifySignature;
+    FREE_CONTEXT_BUFFER_FN            FreeContextBuffer;
+    QUERY_SECURITY_PACKAGE_INFO_FN_A  QuerySecurityPackageInfoA;
+    void                             *Reserved3;
+    void                             *Reserved4;
+    EXPORT_SECURITY_CONTEXT_FN        ExportSecurityContext;
+    IMPORT_SECURITY_CONTEXT_FN_A      ImportSecurityContextA;
+    ADD_CREDENTIALS_FN_A              AddCredentialsA;
+    void                             *Reserved8;
+    QUERY_SECURITY_CONTEXT_TOKEN_FN   QuerySecurityContextToken;
+    ENCRYPT_MESSAGE_FN                EncryptMessage;
+    DECRYPT_MESSAGE_FN                DecryptMessage;
+    SET_CONTEXT_ATTRIBUTES_FN_A       SetContextAttributesA;
+} SecurityFunctionTableA, *PSecurityFunctionTableA;
+
+typedef struct _SECURITY_FUNCTION_TABLE_W
+{
+    ULONG                             dwVersion;
+    ENUMERATE_SECURITY_PACKAGES_FN_W  EnumerateSecurityPackagesW;
+    QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
+    ACQUIRE_CREDENTIALS_HANDLE_FN_W   AcquireCredentialsHandleW;
+    FREE_CREDENTIALS_HANDLE_FN        FreeCredentialsHandle;
+    void                             *Reserved2;
+    INITIALIZE_SECURITY_CONTEXT_FN_W  InitializeSecurityContextW;
+    ACCEPT_SECURITY_CONTEXT_FN        AcceptSecurityContext;
+    COMPLETE_AUTH_TOKEN_FN            CompleteAuthToken;
+    DELETE_SECURITY_CONTEXT_FN        DeleteSecurityContext;
+    APPLY_CONTROL_TOKEN_FN            ApplyControlToken;
+    QUERY_CONTEXT_ATTRIBUTES_FN_W     QueryContextAttributesW;
+    IMPERSONATE_SECURITY_CONTEXT_FN   ImpersonateSecurityContext;
+    REVERT_SECURITY_CONTEXT_FN        RevertSecurityContext;
+    MAKE_SIGNATURE_FN                 MakeSignature;
+    VERIFY_SIGNATURE_FN               VerifySignature;
+    FREE_CONTEXT_BUFFER_FN            FreeContextBuffer;
+    QUERY_SECURITY_PACKAGE_INFO_FN_W  QuerySecurityPackageInfoW;
+    void                             *Reserved3;
+    void                             *Reserved4;
+    EXPORT_SECURITY_CONTEXT_FN        ExportSecurityContext;
+    IMPORT_SECURITY_CONTEXT_FN_W      ImportSecurityContextW;
+    ADD_CREDENTIALS_FN_W              AddCredentialsW;
+    void                             *Reserved8;
+    QUERY_SECURITY_CONTEXT_TOKEN_FN   QuerySecurityContextToken;
+    ENCRYPT_MESSAGE_FN                EncryptMessage;
+    DECRYPT_MESSAGE_FN                DecryptMessage;
+    SET_CONTEXT_ATTRIBUTES_FN_W       SetContextAttributesW;
+} SecurityFunctionTableW, *PSecurityFunctionTableW;
+
+#define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable)
+#define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable)
+
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION   1
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
+
+PSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA(void);
+PSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW(void);
+#define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface)
+
+typedef PSecurityFunctionTableA (SEC_ENTRY *INIT_SECURITY_INTERFACE_A)(void);
+typedef PSecurityFunctionTableW (SEC_ENTRY *INIT_SECURITY_INTERFACE_W)(void);
+#define INIT_SECURITY_INTERFACE WINELIB_NAME_AW(INIT_SECURITY_INTERFACE_)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef __WINE_SSPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in b/src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in
@@ -0,0 +1 @@
+timestamp
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl
new file mode 100644
index 0000000..1587763
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl
@@ -0,0 +1,440 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ *               2005 Huw Davies
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+  uuid(00020430-0000-0000-C000-000000000046),
+  version(2.0),
+  helpstring("OLE Automation")
+]
+library stdole
+{
+	/* typedefs aren't stored in the type library.
+           These type names are known by the type compiler so it
+           doesn't really matter what we define them as. */
+
+    typedef short VARIANT_BOOL;
+    typedef long BSTR;
+    typedef double CURRENCY;
+    typedef unsigned long HRESULT;
+    typedef void *VARIANT;
+    typedef unsigned long SCODE;
+
+    typedef struct GUID {
+        unsigned long  Data1;
+        unsigned short Data2;
+        unsigned short Data3;
+        unsigned char  Data4[ 8 ];
+    } GUID;
+
+    typedef struct DISPPARAMS {
+        VARIANT *rgvarg;
+        long *rgdispidNamedArgs;
+        unsigned int cArgs;
+        unsigned int cNamedArgs;
+    } DISPPARAMS;
+
+    typedef struct EXCEPINFO {
+        unsigned short wCode;
+        unsigned short wReserved;
+        BSTR  bstrSource;
+        BSTR  bstrDescription;
+        BSTR  bstrHelpFile;
+        unsigned long dwHelpContext;
+        void *pvReserved;
+        void *pfnDeferredFillIn;
+        SCODE scode;
+    } EXCEPINFO;
+
+    [
+        odl,
+        uuid(00000000-0000-0000-C000-000000000046),
+        hidden
+    ]
+    interface IUnknown
+    {
+        [restricted]
+        HRESULT QueryInterface(
+                               [in] GUID *riid,
+                               [out] void **ppvObj);
+
+        [restricted]
+        unsigned long AddRef();
+
+        [restricted]
+        unsigned long Release();
+    }
+
+    [
+        odl,
+        uuid(00020400-0000-0000-C000-000000000046),
+        restricted
+    ]
+    interface IDispatch : IUnknown
+    {
+        [restricted]
+        HRESULT GetTypeInfoCount(
+                                 [out] unsigned int *pctinfo);
+
+        [restricted]
+        HRESULT GetTypeInfo(
+                            [in] unsigned int itinfo,
+                            [in] unsigned long lcid,
+                            [out] void **pptinfo);
+
+        [restricted]
+        HRESULT GetIDsOfNames(
+                              [in] GUID *riid,
+                              [in] char **rgszNames,
+                              [in] unsigned int cNames,
+                              [in] unsigned long lcid,
+                              [out] long *rgdispid);
+
+        [restricted]
+        HRESULT Invoke(
+                       [in] long dispidMember,
+                       [in] GUID *riid,
+                       [in] unsigned long lcid,
+                       [in] unsigned short wFlags,
+                       [in] DISPPARAMS *pdispparams,
+                       [out] VARIANT *pvarResult,
+                       [out] EXCEPINFO *pexcepinfo,
+                       [out] unsigned int *puArgErr);
+
+    }
+
+    [
+        odl,
+        uuid(00020404-0000-0000-C000-000000000046),
+        hidden
+    ]
+    interface IEnumVARIANT : IUnknown
+    {
+        HRESULT Next(
+                     [in] unsigned long celt,
+                     [in] VARIANT *rgvar,
+                     [out] unsigned long *pceltFetched);
+
+        HRESULT Skip(
+                     [in] unsigned long celt);
+
+        HRESULT Reset();
+
+        HRESULT Clone(
+                      [out] IEnumVARIANT **ppenum);
+    }
+
+    typedef [uuid(66504301-BE0F-101A-8BBB-00AA00300CAB), public]
+        unsigned long OLE_COLOR;
+
+    typedef [uuid(66504302-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_XPOS_PIXELS;
+
+    typedef [uuid(66504303-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_YPOS_PIXELS;
+
+    typedef [uuid(66504304-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_XSIZE_PIXELS;
+
+    typedef [uuid(66504305-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_YSIZE_PIXELS;
+
+    typedef [uuid(66504306-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_XPOS_HIMETRIC;
+
+    typedef [uuid(66504307-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_YPOS_HIMETRIC;
+
+    typedef [uuid(66504308-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_XSIZE_HIMETRIC;
+
+    typedef [uuid(66504309-BE0F-101A-8BBB-00AA00300CAB), public]
+        long OLE_YSIZE_HIMETRIC;
+
+    typedef [uuid(BF030640-9069-101B-AE2D-08002B2EC713), public]
+        float OLE_XPOS_CONTAINER;
+
+    typedef [uuid(BF030641-9069-101B-AE2D-08002B2EC713), public]
+        float OLE_YPOS_CONTAINER;
+
+    typedef [uuid(BF030642-9069-101B-AE2D-08002B2EC713), public]
+        float OLE_XSIZE_CONTAINER;
+
+    typedef [uuid(BF030643-9069-101B-AE2D-08002B2EC713), public]
+        float OLE_YSIZE_CONTAINER;
+
+    typedef [uuid(66504313-BE0F-101A-8BBB-00AA00300CAB), public]
+        int OLE_HANDLE;
+
+    typedef [uuid(6650430B-BE0F-101A-8BBB-00AA00300CAB), public]
+        VARIANT_BOOL OLE_OPTEXCLUSIVE;
+
+    typedef [uuid(BF030644-9069-101B-AE2D-08002B2EC713), public]
+        VARIANT_BOOL OLE_CANCELBOOL;
+
+    typedef [uuid(BF030645-9069-101B-AE2D-08002B2EC713), public]
+        VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;
+
+    [
+     uuid(6650430A-BE0F-101A-8BBB-00AA00300CAB)
+    ]
+    enum OLE_TRISTATE {
+        Unchecked = 0,
+        Checked = 1,
+        Gray = 2
+    };
+
+    typedef [uuid(6650430D-BE0F-101A-8BBB-00AA00300CAB), public]
+        BSTR FONTNAME;
+
+    typedef [uuid(6650430E-BE0F-101A-8BBB-00AA00300CAB), public]
+        CURRENCY FONTSIZE;
+
+    typedef [uuid(6650430F-BE0F-101A-8BBB-00AA00300CAB), public]
+        VARIANT_BOOL FONTBOLD;
+
+    typedef [uuid(66504310-BE0F-101A-8BBB-00AA00300CAB), public]
+        VARIANT_BOOL FONTITALIC;
+
+    typedef [uuid(66504311-BE0F-101A-8BBB-00AA00300CAB), public]
+        VARIANT_BOOL FONTUNDERSCORE;
+
+    typedef [uuid(66504312-BE0F-101A-8BBB-00AA00300CAB), public]
+        VARIANT_BOOL FONTSTRIKETHROUGH;
+
+
+    [
+     odl,
+     uuid(BEF6E002-A874-101A-8BBA-00AA00300CAB),
+     helpstring("Font Object"),
+     hidden
+    ]
+    interface IFont : IUnknown {
+        [propget] HRESULT Name([out, retval] BSTR *pname);
+        [propput] HRESULT Name([in] BSTR pname);
+
+        [propget] HRESULT Size([out, retval] CURRENCY *psize);
+        [propput] HRESULT Size([in] CURRENCY psize);
+
+        [propget] HRESULT Bold([out, retval] VARIANT_BOOL *pbold);
+        [propput] HRESULT Bold([in] VARIANT_BOOL pbold);
+
+        [propget] HRESULT Italic([out, retval] VARIANT_BOOL *pitalic);
+        [propput] HRESULT Italic([in] VARIANT_BOOL pitalic);
+
+        [propget] HRESULT Underline([out, retval] VARIANT_BOOL *punderline);
+        [propput] HRESULT Underline([in] VARIANT_BOOL punderline);
+
+        [propget] HRESULT Strikethrough([out, retval] VARIANT_BOOL *pstrikethrough);
+        [propput] HRESULT Strikethrough([in] VARIANT_BOOL pstrikethrough);
+
+        [propget] HRESULT Weight([out, retval] short *pweight);
+        [propput] HRESULT Weight([in] short pweight);
+
+        [propget] HRESULT Charset([out, retval] short *pcharset);
+        [propput] HRESULT Charset([in] short pcharset);
+
+        [propget] HRESULT hFont([out, retval] OLE_HANDLE *phfont);
+        
+        HRESULT Clone([out] IFont **ppfont);
+
+        HRESULT IsEqual([in] IFont *pfontOther);
+
+        HRESULT SetRatio([in] long cyLogical, [in] long cyHimetric);
+
+        HRESULT AddRefHfont([in] OLE_HANDLE hFont);
+
+        HRESULT ReleaseHfont([in] OLE_HANDLE hFont);
+    };
+
+
+    [
+     odl,
+     uuid(BEF6E003-A874-101A-8BBA-00AA00300CAB)
+    ]
+    dispinterface Font {
+    properties:
+        [id(0x0)] BSTR Name;
+        [id(0x2)] CURRENCY Size;
+        [id(0x3)] VARIANT_BOOL Bold;
+        [id(0x4)] VARIANT_BOOL Italic;
+        [id(0x5)] VARIANT_BOOL Underline;
+        [id(0x6)] VARIANT_BOOL Strikethrough;
+        [id(0x7)] short Weight;
+        [id(0x8)] short Charset;
+    methods:
+    }
+
+    typedef [public] Font IFontDisp;
+
+    [
+     uuid(0BE35203-8F91-11CE-9DE3-00AA004BB851)
+    ]
+    coclass StdFont {
+        [default] dispinterface Font;
+        /* FIXME: We can't reference dispinterface FontEvents here because we need it to
+           appear at the end of the typelib. */
+/*      [default, source] dispinterface FontEvents;*/
+        interface IFont;
+    };
+
+    [
+     odl,
+     uuid(7BF80980-BF32-101A-8BBB-00AA00300CAB),
+     helpstring("Picture Object"),
+     hidden
+    ]
+    interface IPicture : IUnknown {
+        [propget] HRESULT Handle([out, retval] OLE_HANDLE *phandle);
+
+        [propget] HRESULT hPal([out, retval] OLE_HANDLE *phpal);
+        
+        [propget] HRESULT Type([out, retval] short *ptype);
+
+        [propget] HRESULT Width([out, retval] OLE_XSIZE_HIMETRIC *pwidth);
+
+        [propget] HRESULT Height([out, retval] OLE_YSIZE_HIMETRIC *pheight);
+
+        HRESULT Render([in] int hdc,
+                       [in] long x,
+                       [in] long y,
+                       [in] long cx,
+                       [in] long cy,
+                       [in] OLE_XPOS_HIMETRIC xSrc,
+                       [in] OLE_YPOS_HIMETRIC ySrc,
+                       [in] OLE_XSIZE_HIMETRIC cxSrc,
+                       [in] OLE_YSIZE_HIMETRIC cySrc,
+                       [in] void *prcWBounds);
+
+        [propput] HRESULT hPal([in] OLE_HANDLE phpal);
+
+        [propget] HRESULT CurDC([out, retval] int *phdcOut);
+
+        HRESULT SelectPicture([in] int hdcIn,
+                              [out] int *phdcOut,
+                              [out] OLE_HANDLE *phbmpOut);
+        
+        [propget] HRESULT KeepOriginalFormat([out, retval] VARIANT_BOOL *pfkeep);
+        [propput] HRESULT KeepOriginalFormat([in] VARIANT_BOOL pfkeep);
+
+        HRESULT PictureChanged();
+
+        HRESULT SaveAsFile([in] void *pstm,
+                           [in] VARIANT_BOOL fSaveMemCopy,
+                           [out] long *pcbSize);
+
+        [propget] HRESULT Attributes([out, retval] long *pdwAttr);
+
+        HRESULT SetHdc([in] OLE_HANDLE hdc);
+    };
+
+    [
+     uuid(7BF80981-BF32-101A-8BBB-00AA00300CAB)
+    ]
+    dispinterface Picture {
+    properties:
+        [id(0x0), readonly] OLE_HANDLE Handle;
+        [id(0x2)] OLE_HANDLE hPal;
+        [id(0x3), readonly] short Type; 
+        [id(0x4), readonly] OLE_XSIZE_HIMETRIC Width;
+        [id(0x5), readonly] OLE_YSIZE_HIMETRIC Height;
+    methods:
+        [id(0x6)] void Render(int hdc,
+                              long x,
+                              long y,
+                              long cx,
+                              long cy,
+                              OLE_XPOS_HIMETRIC xSrc,
+                              OLE_YPOS_HIMETRIC ySrc,
+                              OLE_XSIZE_HIMETRIC cxSrc,
+                              OLE_YSIZE_HIMETRIC cySrc,
+                              void *prcWBounds);
+    };
+    
+    typedef [public] Picture IPictureDisp;
+
+    [
+     uuid(0BE35204-8F91-11CE-9DE3-00AA004BB851)
+    ]
+    coclass StdPicture {
+        [default] dispinterface Picture;
+        interface IPicture;
+    };
+
+    [
+     uuid(E6C8FA08-BD9F-11D0-985E-00C04FC29993)
+    ]
+    enum LoadPictureConstants {
+        Default = 0,
+        Monochrome = 1,
+        VgaColor = 2,
+        Color = 4
+    };
+
+    [
+     dllname("oleaut32.dll"),
+     uuid(91209AC0-60F6-11CF-9C5D-00AA00C1489E),
+     helpstring("Functions for Standard OLE Objects"),
+     helpcontext(0x2775)
+    ]
+    module StdFunctions{
+        [
+         entry("OleLoadPictureFileEx"),
+         helpstring("Loads a picture from a file"),
+         helpcontext(0x2775)
+        ]
+        HRESULT LoadPicture([in, optional] VARIANT filename,
+                            [in, optional, defaultvalue(0)] int widthDesired,
+                            [in, optional, defaultvalue(0)] int heightDesired,
+                            [in, optional, defaultvalue(Default)] enum LoadPictureConstants flags,
+                            [out, retval] IPictureDisp **retval);
+        [
+         entry("OleSavePictureFile"),
+         helpstring("Saves a picture to a file"),
+         helpcontext(0x2775)
+        ]
+        HRESULT SavePicture([in] IPictureDisp *Picture,
+                            [in] BSTR filename);
+    };
+
+
+    [
+     uuid(4EF6100A-AF88-11D0-9846-00C04FC29993),
+     helpstring("Event Interface for the Font Object"),
+     hidden
+    ]
+    dispinterface FontEvents {
+    properties:
+    methods:
+        [id(0x9)] void FontChanged([in] BSTR PropertyName);
+    };
+
+    typedef [public] FontEvents IFontEventsDisp;
+
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h
new file mode 100644
index 0000000..4808839
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2009 Damjan Jovanovic
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STI_H
+#define __WINE_STI_H
+
+#include <objbase.h>
+/* #include <stireg.h> */
+/* #include <stierr.h> */
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_GUID(CLSID_Sti, 0xB323F8E0, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C);
+
+DEFINE_GUID(IID_IStillImageW, 0x641BD880, 0x2DC8, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C);
+
+DEFINE_GUID(IID_IStillImageA, 0xA7B1F740, 0x1D7F, 0x11D1, 0xAC, 0xA9, 0x00, 0xA0, 0x24, 0x38, 0xAD, 0x48);
+
+#define STI_VERSION_REAL         0x00000002
+#define STI_VERSION_FLAG_UNICODE 0x01000000
+
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+#  define STI_VERSION (STI_VERSION_REAL | STI_VERSION_FLAG_UNICODE)
+# else
+#  define STI_VERSION (STI_VERSION_REAL)
+# endif
+#endif
+
+typedef struct IStillImageA *PSTIA;
+typedef struct IStillImageW *PSTIW;
+DECL_WINELIB_TYPE_AW(PSTI)
+typedef struct IStillImageA *LPSTILLIMAGEA;
+typedef struct IStillImageW *LPSTILLIMAGEW;
+DECL_WINELIB_TYPE_AW(LPSTILLIMAGE)
+typedef struct IStiDeviceA *PSTIDEVICEA;
+typedef struct IStiDeviceW *PSTIDEVICEW;
+DECL_WINELIB_TYPE_AW(PSTIDEVICE)
+
+HRESULT WINAPI StiCreateInstanceA(HINSTANCE hinst, DWORD dwVer, PSTIA *ppSti, LPUNKNOWN pUnkOuter);
+HRESULT WINAPI StiCreateInstanceW(HINSTANCE hinst, DWORD dwVer, PSTIW *ppSti, LPUNKNOWN pUnkOuter);
+#define        StiCreateInstance WINELIB_NAME_AW(StiCreateInstance)
+
+typedef DWORD STI_DEVICE_TYPE;
+typedef enum _STI_DEVICE_MJ_TYPE
+{
+    StiDeviceTypeDefault           = 0,
+    StiDeviceTypeScanner           = 1,
+    StiDeviceTypeDigitalCamera     = 2,
+    StiDeviceTypeStreamingVideo    = 3
+} STI_DEVICE_MJ_TYPE;
+
+#define GET_STIDEVICE_TYPE(dwDevType) HIWORD(dwDevType)
+#define GET_STIDEVICE_SUBTYPE(dwDevType) LOWORD(dwDevType)
+
+typedef struct _STI_DEV_CAPS {
+    DWORD dwGeneric;
+} STI_DEV_CAPS, *PSTI_DEV_CAPS;
+
+#define STI_MAX_INTERNAL_NAME_LENGTH 128
+
+typedef struct _STI_DEVICE_INFORMATIONW {
+    DWORD dwSize;
+    STI_DEVICE_TYPE DeviceType;
+    WCHAR szDeviceInternalName[STI_MAX_INTERNAL_NAME_LENGTH];
+    STI_DEV_CAPS DeviceCapabilities;
+    DWORD dwHardwareConfiguration;
+    LPWSTR pszVendorDescription;
+    LPWSTR pszDeviceDescription;
+    LPWSTR pszPortName;
+    LPWSTR pszPropProvider;
+    LPWSTR pszLocalName;
+} STI_DEVICE_INFORMATIONW, *PSTI_DEVICE_INFORMATIONW;
+
+typedef STI_DEVICE_INFORMATIONW STI_DEVICE_INFORMATION;
+typedef PSTI_DEVICE_INFORMATIONW PSTI_DEVICE_INFORMATION;
+
+#define MAX_NOTIFICATION_DATA 64
+
+typedef struct _STINOTIFY {
+    DWORD dwSize;
+    GUID guidNotificationCode;
+    BYTE abNotificationData[MAX_NOTIFICATION_DATA];
+} STINOTIFY,*LPSTINOTIFY;
+
+#define INTERFACE IStillImageW
+DECLARE_INTERFACE_(IStillImageW, IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IStillImageW methods ***/
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+    STDMETHOD(GetDeviceList)(THIS_ DWORD dwType, DWORD dwFlags, DWORD *pdwItemsReturned, LPVOID *ppBuffer) PURE;
+    STDMETHOD(GetDeviceInfo)(THIS_ LPWSTR pwszDeviceName, LPVOID *ppBuffer) PURE;
+    STDMETHOD(CreateDevice)(THIS_ LPWSTR pwszDeviceName, DWORD dwMode, PSTIDEVICEW *pDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(GetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, LPDWORD pType, LPBYTE pData, LPDWORD cbData) PURE;
+    STDMETHOD(SetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, DWORD type, LPBYTE pData, DWORD cbData) PURE;
+    STDMETHOD(GetSTILaunchInformation)(THIS_ LPWSTR pwszDeviceName, DWORD *pdwEventCode, LPWSTR pwszEventName) PURE;
+    STDMETHOD(RegisterLaunchApplication)(THIS_ LPWSTR pwszAppName, LPWSTR pwszCommandLine) PURE;
+    STDMETHOD(UnregisterLaunchApplication)(THIS_ LPWSTR pwszAppName) PURE;
+    STDMETHOD(EnableHwNotifications)(THIS_ LPCWSTR pwszDeviceName, BOOL bNewState) PURE;
+    STDMETHOD(GetHwNotificationState)(THIS_ LPCWSTR pwszDeviceName, BOOL *pbCurrentState) PURE;
+    STDMETHOD(RefreshDeviceBus)(THIS_ LPCWSTR pwszDeviceName) PURE;
+    STDMETHOD(LaunchApplicationForDevice)(THIS_ LPWSTR pwszDeviceName, LPWSTR pwszAppName, LPSTINOTIFY pStiNotify);
+    STDMETHOD(SetupDeviceParameters)(THIS_ PSTI_DEVICE_INFORMATIONW pDevInfo);
+    STDMETHOD(WriteToErrorLog)(THIS_ DWORD dwMessageType, LPCWSTR pszMessage) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IStillImage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IStillImage_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IStillImage_Release(p)            (p)->lpVtbl->Release(p)
+/*** IStillImage methods ***/
+#define IStillImage_Initialize(p,a,b)                   (p)->lpVtbl->Initialize(p,a,b)
+#define IStillImage_GetDeviceList(p,a,b,c,d)            (p)->lpVtbl->GetDeviceList(p,a,b,c,d)
+#define IStillImage_GetDeviceInfo(p,a,b)                (p)->lpVtbl->GetDeviceInfo(p,a,b)
+#define IStillImage_CreateDevice(p,a,b,c,d)             (p)->lpVtbl->CreateDevice(p,a,b,c,d)
+#define IStillImage_GetDeviceValue(p,a,b,c,d,e)         (p)->lpVtbl->GetDeviceValue(p,a,b,c,d,e)
+#define IStillImage_SetDeviceValue(p,a,b,c,d,e)         (p)->lpVtbl->SetDeviceValue(p,a,b,c,d,e)
+#define IStillImage_GetSTILaunchInformation(p,a,b,c)    (p)->lpVtbl->GetSTILaunchInformation(p,a,b,c)
+#define IStillImage_RegisterLaunchApplication(p,a,b)    (p)->lpVtbl->RegisterLaunchApplication(p,a,b)
+#define IStillImage_UnregisterLaunchApplication(p,a)    (p)->lpVtbl->UnregisterLaunchApplication(p,a)
+#define IStillImage_EnableHwNotifications(p,a,b)        (p)->lpVtbl->EnableHwNotifications(p,a,b)
+#define IStillImage_GetHwNotificationState(p,a,b)       (p)->lpVtbl->GetHwNotificationState(p,a,b)
+#define IStillImage_RefreshDeviceBus(p,a)               (p)->lpVtbl->RefreshDeviceBus(p,a)
+#define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->lpVtbl->LaunchApplicationForDevice(p,a,b,c)
+#define IStillImage_SetupDeviceParameters(p,a)          (p)->lpVtbl->SetupDeviceParameters(p,a)
+#define IStillImage_WriteToErrorLog(p,a,b)              (p)->lpVtbl->WriteToErrorLog(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IStillImage_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IStillImage_AddRef(p)             (p)->AddRef()
+#define IStillImage_Release(p)            (p)->Release()
+/*** IStillImage methods ***/
+#define IStillImage_Initialize(p,a,b)                   (p)->Initialize(a,b)
+#define IStillImage_GetDeviceList(p,a,b,c,d)            (p)->GetDeviceList(a,b,c,d)
+#define IStillImage_GetDeviceInfo(p,a,b)                (p)->GetDeviceInfo(a,b)
+#define IStillImage_CreateDevice(p,a,b,c,d)             (p)->CreateDevice(a,b,c,d)
+#define IStillImage_GetDeviceValue(p,a,b,c,d,e)         (p)->GetDeviceValue(a,b,c,d,e)
+#define IStillImage_SetDeviceValue(p,a,b,c,d,e)         (p)->SetDeviceValue(a,b,c,d,e)
+#define IStillImage_GetSTILaunchInformation(p,a,b,c)    (p)->GetSTILaunchInformation(a,b,c)
+#define IStillImage_RegisterLaunchApplication(p,a,b)    (p)->RegisterLaunchApplication(a,b)
+#define IStillImage_UnregisterLaunchApplication(p,a)    (p)->UnregisterLaunchApplication(a)
+#define IStillImage_EnableHwNotifications(p,a,b)        (p)->EnableHwNotifications(a,b)
+#define IStillImage_GetHwNotificationState(p,a,b)       (p)->GetHwNotificationState(a,b)
+#define IStillImage_RefreshDeviceBus(p,a)               (p)->RefreshDeviceBus(a)
+#define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->LaunchApplicationForDevice(a,b,c)
+#define IStillImage_SetupDeviceParameters(p,a)          (p)->SetupDeviceParameters(a)
+#define IStillImage_WriteToErrorLog(p,a,b)              (p)->WriteToErrorLog(a,b)
+#endif
+
+#ifdef __cplusplus
+};
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_STI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h
new file mode 100644
index 0000000..b098c28
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 1999 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STORAGE_H
+#define __WINE_STORAGE_H
+
+/* "storage.h" is obsolete, you should include "objbase.h" instead */
+
+#include <objbase.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl
new file mode 100644
index 0000000..46730c7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+
+#include <devenum.idl>
+
+#include <axcore.idl>
+
+#include <axextend.idl>
+
+#include <dyngraph.idl>
+
+/* TODO: #include <dvdif.h> */
+#include <vmrender.idl>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h
new file mode 100644
index 0000000..e7e6fcf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2010 Thomas Mullaly
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STRSAFE_H
+#define __WINE_STRSAFE_H
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+/* Windows version includes this header. */
+/* #include <specstring.h> */
+
+#define STRSAFE_E_INSUFFICIENT_BUFFER   ((HRESULT)0x8007007A)
+#define STRSAFE_E_INVALID_PARAM         ((HRESULT)0x80070075)
+#define STRSAFE_E_END_OF_FILE           ((HRESULT)0x80070026)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl
new file mode 100644
index 0000000..8336a90
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl
@@ -0,0 +1,61 @@
+/*
+ * structured query condition
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * 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
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "objidl.idl";
+import "propidl.idl";
+
+typedef [v1_enum] enum tagCONDITION_TYPE
+{
+    CT_AND_CONDITION,
+    CT_OR_CONDITION,
+    CT_NOT_CONDITION,
+    CT_LEAF_CONDITION
+} CONDITION_TYPE;
+
+typedef [v1_enum] enum tagCONDITION_OPERATION
+{
+    COP_IMPLICIT,
+    COP_EQUAL,
+    COP_NOTEQUAL,
+    COP_LESSTHAN,
+    COP_GREATERTHAN,
+    COP_LESSTHANOREQUAL,
+    COP_GREATERTHANOREQUAL,
+    COP_VALUE_STARTSWITH,
+    COP_VALUE_ENDSWITH,
+    COP_VALUE_CONTAINS,
+    COP_VALUE_NOTCONTAINS,
+    COP_DOSWILDCARDS,
+    COP_WORD_EQUAL,
+    COP_WORD_STARTSWITH,
+    COP_APPLICATION_SPECIFIC
+} CONDITION_OPERATION;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h
new file mode 100644
index 0000000..adbe791
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h
@@ -0,0 +1,55 @@
+/*
+* Copyright 2006 Konstantin Petrov
+*
+* 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
+*/
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef SVRAPI_INCLUDED
+#define SVRAPI_INCLUDED
+
+#include <lmcons.h>
+#include <lmerr.h>
+
+#include <pshpack1.h>
+
+typedef struct _share_info_1 {
+       char shi1_netname[LM20_NNLEN+1];
+       char shi1_pad1;
+       unsigned short shi1_type;
+       char* shi1_remark;
+} share_info_1;
+
+typedef struct _share_info_50 {
+       char shi50_netname[LM20_NNLEN+1];
+       unsigned char shi50_type;
+       unsigned short shi50_flags;
+       char* shi50_remark;
+       char* shi50_path;
+       char shi50_rw_password[SHPWLEN+1];
+       char shi50_ro_password[SHPWLEN+1];
+} share_info_50;
+
+#include <poppack.h>
+
+#endif /* SVRAPI_INCLUDED */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h
new file mode 100644
index 0000000..e337921
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2009 Andrew Nguyen
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_T2EMBAPI_H
+#define __WINE_T2EMBAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CHARSET_UNICODE   1
+#define CHARSET_DEFAULT   1
+#define CHARSET_SYMBOL    2
+#define CHARSET_GLYPHIDX  3
+
+#define LICENSE_INSTALLABLE   0x0000
+#define LICENSE_DEFAULT       0x0000
+#define LICENSE_NOEMBEDDING   0x0002
+#define LICENSE_PREVIEWPRINT  0x0004
+#define LICENSE_EDITABLE      0x0008
+
+#define TTLOAD_PRIVATE  0x0001
+
+/* Possible return values. */
+#define E_NONE                              __MSABI_LONG(0x0000)
+#define E_API_NOTIMPL                       __MSABI_LONG(0x0001)
+
+typedef ULONG (WINAPIV * READEMBEDPROC)(void*,void*,ULONG);
+typedef ULONG (WINAPIV * WRITEEMBEDPROC)(void*,void*,ULONG);
+
+typedef struct
+{
+    unsigned short usStructSize;
+    unsigned short usRefStrSize;
+    unsigned short *pusRefStr;
+} TTLOADINFO;
+
+typedef struct
+{
+    unsigned short usStructSize;
+    unsigned short usRootStrSize;
+    unsigned short *pusRootStr;
+} TTEMBEDINFO;
+
+LONG WINAPI TTLoadEmbeddedFont(HANDLE*,ULONG,ULONG*,ULONG,ULONG*,READEMBEDPROC,
+                               LPVOID,LPWSTR,LPSTR,TTLOADINFO*);
+LONG WINAPI TTDeleteEmbeddedFont(HANDLE,ULONG,ULONG*);
+
+/* embedding privileges */
+#define EMBED_PREVIEWPRINT  1
+#define EMBED_EDITABLE      2
+#define EMBED_INSTALLABLE   3
+#define EMBED_NOEMBEDDING   4
+
+LONG WINAPI TTGetEmbeddingType(HDC, ULONG*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h
new file mode 100644
index 0000000..3a23f0c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h
@@ -0,0 +1,1077 @@
+/*
+ * TAPI definitions
+ *
+ * Copyright (c) 1999 Andreas Mohr
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TAPI_H
+#define __WINE_TAPI_H
+
+#include <windows.h>
+#include <basetsd.h>
+#include <oaidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef HANDLE HCALL, *LPHCALL;
+typedef HANDLE HLINE, *LPHLINE;
+typedef HANDLE HLINEAPP, *LPHLINEAPP;
+typedef HANDLE HPHONE, *LPHPHONE;
+typedef HANDLE HPHONEAPP, *LPHPHONEAPP;
+
+#define TAPIERR_REQUESTFAILED          __MSABI_LONG(-16)
+#define LINEERR_ALLOCATED              0x80000001
+#define LINEERR_BADDEVICEID            0x80000002
+#define LINEERR_BEARERMODEUNAVAIL      0x80000003
+#define LINEERR_CALLUNAVAIL            0x80000005
+#define LINEERR_COMPLETIONOVERRUN      0x80000006
+#define LINEERR_CONFERENCEFULL         0x80000007
+#define LINEERR_DIALBILLING            0x80000008
+#define LINEERR_DIALDIALTONE           0x80000009
+#define LINEERR_DIALPROMPT             0x8000000A
+#define LINEERR_DIALQUIET              0x8000000B
+#define LINEERR_INCOMPATIBLEAPIVERSION 0x8000000C
+#define LINEERR_INCOMPATIBLEEXTVERSION 0x8000000D
+#define LINEERR_INIFILECORRUPT         0x8000000E
+#define LINEERR_INUSE                  0x8000000F
+#define LINEERR_INVALADDRESS           0x80000010
+#define LINEERR_INVALADDRESSID         0x80000011
+#define LINEERR_INVALADDRESSMODE       0x80000012
+#define LINEERR_INVALADDRESSSTATE      0x80000013
+#define LINEERR_INVALAPPHANDLE         0x80000014
+#define LINEERR_INVALAPPNAME           0x80000015
+#define LINEERR_INVALBEARERMODE        0x80000016
+#define LINEERR_INVALCALLCOMPLMODE     0x80000017
+#define LINEERR_INVALCALLHANDLE        0x80000018
+#define LINEERR_INVALCALLPARAMS        0x80000019
+#define LINEERR_INVALCALLPRIVILEGE     0x8000001A
+#define LINEERR_INVALCALLSELECT        0x8000001B
+#define LINEERR_INVALCALLSTATE         0x8000001C
+#define LINEERR_INVALCALLSTATELIST     0x8000001D
+#define LINEERR_INVALCARD              0x8000001E
+#define LINEERR_INVALCOMPLETIONID      0x8000001F
+#define LINEERR_INVALCONFCALLHANDLE    0x80000020
+#define LINEERR_INVALCONSULTCALLHANDLE 0x80000021
+#define LINEERR_INVALCOUNTRYCODE       0x80000022
+#define LINEERR_INVALDEVICECLASS       0x80000023
+#define LINEERR_INVALDEVICEHANDLE      0x80000024
+#define LINEERR_INVALDIALPARAMS        0x80000025
+#define LINEERR_INVALDIGITLIST         0x80000026
+#define LINEERR_INVALDIGITMODE         0x80000027
+#define LINEERR_INVALDIGITS            0x80000028
+#define LINEERR_INVALEXTVERSION        0x80000029
+#define LINEERR_INVALGROUPID           0x8000002A
+#define LINEERR_INVALLINEHANDLE        0x8000002B
+#define LINEERR_INVALLINESTATE         0x8000002C
+#define LINEERR_INVALLOCATION          0x8000002D
+#define LINEERR_INVALMEDIALIST         0x8000002E
+#define LINEERR_INVALMEDIAMODE         0x8000002F
+#define LINEERR_INVALMESSAGEID         0x80000030
+#define LINEERR_INVALPARAM             0x80000032
+#define LINEERR_INVALPARKID            0x80000033
+#define LINEERR_INVALPARKMODE          0x80000034
+#define LINEERR_INVALPOINTER           0x80000035
+#define LINEERR_INVALPRIVSELECT        0x80000036
+#define LINEERR_INVALRATE              0x80000037
+#define LINEERR_INVALREQUESTMODE       0x80000038
+#define LINEERR_INVALTERMINALID        0x80000039
+#define LINEERR_INVALTERMINALMODE      0x8000003A
+#define LINEERR_INVALTIMEOUT           0x8000003B
+#define LINEERR_INVALTONE              0x8000003C
+#define LINEERR_INVALTONELIST          0x8000003D
+#define LINEERR_INVALTONEMODE          0x8000003E
+#define LINEERR_INVALTRANSFERMODE      0x8000003F
+#define LINEERR_LINEMAPPERFAILED       0x80000040
+#define LINEERR_NOCONFERENCE           0x80000041
+#define LINEERR_NODEVICE               0x80000042
+#define LINEERR_NODRIVER               0x80000043
+#define LINEERR_NOMEM                  0x80000044
+#define LINEERR_NOREQUEST              0x80000045
+#define LINEERR_NOTOWNER               0x80000046
+#define LINEERR_NOTREGISTERED          0x80000047
+#define LINEERR_OPERATIONFAILED        0x80000048
+#define LINEERR_OPERATIONUNAVAIL       0x80000049
+#define LINEERR_RATEUNAVAIL            0x8000004A
+#define LINEERR_RESOURCEUNAVAIL        0x8000004B
+#define LINEERR_REQUESTOVERRUN         0x8000004C
+#define LINEERR_STRUCTURETOOSMALL      0x8000004D
+#define LINEERR_TARGETNOTFOUND         0x8000004E
+#define LINEERR_TARGETSELF             0x8000004F
+#define LINEERR_UNINITIALIZED          0x80000050
+#define LINEERR_USERUSERINFOTOOBIG     0x80000051
+#define LINEERR_REINIT                 0x80000052
+#define LINEERR_ADDRESSBLOCKED         0x80000053
+#define LINEERR_BILLINGREJECTED        0x80000054
+#define LINEERR_INVALFEATURE           0x80000055
+#define LINEERR_NOMULTIPLEINSTANCE     0x80000056
+
+#define STRINGFORMAT_ASCII             0x00000001
+#define STRINGFORMAT_DBCS              0x00000002
+#define STRINGFORMAT_UNICODE           0x00000003
+#define STRINGFORMAT_BINARY            0x00000004
+
+#define LINEADDRESSMODE_ADDRESSID      0x00000001
+#define LINEADDRESSMODE_DIALABLEADDR   0x00000002
+
+#define LINEBEARERMODE_VOICE           0x00000001
+#define LINEBEARERMODE_SPEECH          0x00000002
+#define LINEBEARERMODE_MULTIUSE        0x00000004
+#define LINEBEARERMODE_DATA            0x00000008
+#define LINEBEARERMODE_ALTSPEECHDATA   0x00000010
+#define LINEBEARERMODE_NONCALLSIGNALING 0x00000020
+#define LINEBEARERMODE_PASSTHROUGH     0x00000040
+
+#define LINEMEDIAMODE_UNKNOWN          0x00000002
+#define LINEMEDIAMODE_INTERACTIVEVOICE 0x00000004
+#define LINEMEDIAMODE_AUTOMATEDVOICE   0x00000008
+#define LINEMEDIAMODE_DATAMODEM        0x00000010
+
+#define LINEDEVCAPFLAGS_CROSSADDRCONF  0x00000001
+#define LINEDEVCAPFLAGS_HIGHLEVCOMP    0x00000002
+#define LINEDEVCAPFLAGS_LOWLEVCOMP     0x00000004
+#define LINEDEVCAPFLAGS_MEDIACONTROL   0x00000008
+#define LINEDEVCAPFLAGS_MULTIPLEADDR   0x00000010
+#define LINEDEVCAPFLAGS_CLOSEDROP      0x00000020
+#define LINEDEVCAPFLAGS_DIALBILLING    0x00000040
+#define LINEDEVCAPFLAGS_DIALQUIET      0x00000080
+#define LINEDEVCAPFLAGS_DIALDIALTONE   0x00000100
+
+#define LINEDEVSTATE_OTHER             0x00000001
+#define LINEDEVSTATE_RINGING           0x00000002
+#define LINEDEVSTATE_CONNECTED         0x00000004
+#define LINEDEVSTATE_DISCONNECTED      0x00000008
+#define LINEDEVSTATE_MSGWAITON         0x00000010
+#define LINEDEVSTATE_MSGWAITOFF        0x00000020
+#define LINEDEVSTATE_INSERVICE         0x00000040
+#define LINEDEVSTATE_OUTOFSERVICE      0x00000080
+#define LINEDEVSTATE_MAINTENANCE       0x00000100
+#define LINEDEVSTATE_OPEN              0x00000200
+#define LINEDEVSTATE_CLOSE             0x00000400
+#define LINEDEVSTATE_NUMCALLS          0x00000800
+#define LINEDEVSTATE_NUMCOMPLETIONS    0x00001000
+#define LINEDEVSTATE_TERMINALS         0x00002000
+#define LINEDEVSTATE_ROAMMODE          0x00004000
+#define LINEDEVSTATE_BATTERY           0x00008000
+#define LINEDEVSTATE_SIGNAL            0x00010000
+#define LINEDEVSTATE_DEVSPECIFIC       0x00020000
+#define LINEDEVSTATE_REINIT            0x00040000
+#define LINEDEVSTATE_LOCK              0x00080000
+
+#define LINEDEVSTATE_CAPSCHANGE        0x00100000
+#define LINEDEVSTATE_CONFIGCHANGE      0x00200000
+#define LINEDEVSTATE_TRANSLATECHANGE   0x00400000
+#define LINEDEVSTATE_COMPLCANCEL       0x00800000
+#define LINEDEVSTATE_REMOVED           0x01000000
+
+#define LINELOCATIONOPTION_PULSEDIAL   0x00000001
+
+
+#define LINEFEATURE_DEVSPECIFIC        0x00000001
+#define LINEFEATURE_DEVSPECIFICFEAT    0x00000002
+#define LINEFEATURE_FORWARD            0x00000004
+#define LINEFEATURE_MAKECALL           0x00000008
+#define LINEFEATURE_SETMEDIACONTROL    0x00000010
+#define LINEFEATURE_SETTERMINAL        0x00000020
+#define LINEFEATURE_SETDEVSTATUS       0x00000040
+#define LINEFEATURE_FORWARDFWD         0x00000080
+#define LINEFEATURE_FORWARDDND         0x00000100
+
+/* tapi callback messages */
+
+#define LINE_ADDRESSSTATE             __MSABI_LONG(0)
+#define LINE_CALLINFO                 __MSABI_LONG(1)
+#define LINE_CALLSTATE                __MSABI_LONG(2)
+#define LINE_CLOSE                    __MSABI_LONG(3)
+#define LINE_DEVSPECIFIC              __MSABI_LONG(4)
+#define LINE_DEVSPECIFICFEATURE       __MSABI_LONG(5)
+#define LINE_GATHERDIGITS             __MSABI_LONG(6)
+#define LINE_GENERATE                 __MSABI_LONG(7)
+#define LINE_LINEDEVSTATE             __MSABI_LONG(8)
+#define LINE_MONITORDIGITS            __MSABI_LONG(9)
+#define LINE_MONITORMEDIA             __MSABI_LONG(10)
+#define LINE_MONITORTONE              __MSABI_LONG(11)
+#define LINE_REPLY                    __MSABI_LONG(12)
+#define LINE_REQUEST                  __MSABI_LONG(13)
+#define PHONE_BUTTON                  __MSABI_LONG(14)
+#define PHONE_CLOSE                   __MSABI_LONG(15)
+#define PHONE_DEVSPECIFIC             __MSABI_LONG(16)
+#define PHONE_REPLY                   __MSABI_LONG(17)
+#define PHONE_STATE                   __MSABI_LONG(18)
+#define LINE_CREATE                   __MSABI_LONG(19)
+#define PHONE_CREATE                  __MSABI_LONG(20)
+
+#define LINE_AGENTSPECIFIC            __MSABI_LONG(21)
+#define LINE_AGENTSTATUS              __MSABI_LONG(22)
+#define LINE_APPNEWCALL               __MSABI_LONG(23)
+#define LINE_PROXYREQUEST             __MSABI_LONG(24)
+#define LINE_REMOVE                   __MSABI_LONG(25)
+#define PHONE_REMOVE                  __MSABI_LONG(26)
+/* these are used as Param1 of line_callstate messages */
+#define LINECALLSTATE_IDLE            0x00000001
+#define LINECALLSTATE_OFFERING        0x00000002
+#define LINECALLSTATE_ACCEPTED        0x00000004
+#define LINECALLSTATE_DIALTONE        0x00000008
+#define LINECALLSTATE_DIALING         0x00000010
+#define LINECALLSTATE_RINGBACK        0x00000020
+#define LINECALLSTATE_BUSY            0x00000040
+#define LINECALLSTATE_SPECIALINFO     0x00000080
+#define LINECALLSTATE_CONNECTED       0x00000100
+#define LINECALLSTATE_PROCEEDING      0x00000200
+#define LINECALLSTATE_ONHOLD          0x00000400
+#define LINECALLSTATE_CONFERENCED     0x00000800
+#define LINECALLSTATE_ONHOLDPENDCONF  0x00001000
+#define LINECALLSTATE_ONHOLDPENDTRANSFER 0x00002000
+#define LINECALLSTATE_DISCONNECTED    0x00004000
+#define LINECALLSTATE_UNKNOWN         0x00008000
+#define LINECONNECTEDMODE_ACTIVE            0x00000001
+#define LINECONNECTEDMODE_INACTIVE          0x00000002
+#define LINECONNECTEDMODE_ACTIVEHELD        0x00000004
+#define LINECONNECTEDMODE_INACTIVEHELD      0x00000008
+#define LINECONNECTEDMODE_CONFIRMED         0x00000010
+
+/* these are Param2 values for state_disconnected line_callstate messages */
+#define LINEDISCONNECTMODE_NORMAL           0x00000001
+#define LINEDISCONNECTMODE_UNKNOWN          0x00000002
+#define LINEDISCONNECTMODE_REJECT           0x00000004
+#define LINEDISCONNECTMODE_PICKUP           0x00000008
+#define LINEDISCONNECTMODE_FORWARDED        0x00000010
+#define LINEDISCONNECTMODE_BUSY             0x00000020
+#define LINEDISCONNECTMODE_NOANSWER         0x00000040
+#define LINEDISCONNECTMODE_BADADDRESS       0x00000080
+#define LINEDISCONNECTMODE_UNREACHABLE      0x00000100
+#define LINEDISCONNECTMODE_CONGESTION       0x00000200
+#define LINEDISCONNECTMODE_INCOMPATIBLE     0x00000400
+#define LINEDISCONNECTMODE_UNAVAIL          0x00000800
+#define LINEDISCONNECTMODE_NODIALTONE       0x00001000
+#define LINEDISCONNECTMODE_NUMBERCHANGED    0x00002000
+#define LINEDISCONNECTMODE_OUTOFORDER       0x00004000
+#define LINEDISCONNECTMODE_TEMPFAILURE      0x00008000
+#define LINEDISCONNECTMODE_QOSUNAVAIL       0x00010000
+#define LINEDISCONNECTMODE_BLOCKED          0x00020000
+#define LINEDISCONNECTMODE_DONOTDISTURB     0x00040000
+#define LINEDISCONNECTMODE_CANCELLED        0x00080000
+
+#define LINECALLSELECT_LINE                 0x00000001
+#define LINECALLSELECT_ADDRESS              0x00000002
+#define LINECALLSELECT_CALL                 0x00000004
+#define LINECALLSELECT_DEVICEID             0x00000008
+
+#define LINECALLPRIVILEGE_NONE              0x00000001
+#define LINECALLPRIVILEGE_MONITOR           0x00000002
+#define LINECALLPRIVILEGE_OWNER             0x00000004
+#define LINECALLFEATURE_ACCEPT              0x00000001
+#define LINECALLFEATURE_ADDTOCONF           0x00000002
+#define LINECALLFEATURE_ANSWER              0x00000004
+#define LINECALLFEATURE_BLINDTRANSFER       0x00000008
+#define LINECALLFEATURE_COMPLETECALL        0x00000010
+#define LINECALLFEATURE_COMPLETETRANSF      0x00000020
+#define LINECALLFEATURE_DIAL                0x00000040
+#define LINECALLFEATURE_DROP                0x00000080
+#define LINECALLFEATURE_GATHERDIGITS        0x00000100
+#define LINECALLFEATURE_GENERATEDIGITS      0x00000200
+#define LINECALLFEATURE_GENERATETONE        0x00000400
+#define LINECALLFEATURE_HOLD                0x00000800
+#define LINECALLFEATURE_MONITORDIGITS       0x00001000
+#define LINECALLFEATURE_MONITORMEDIA        0x00002000
+#define LINECALLFEATURE_MONITORTONES        0x00004000
+#define LINECALLFEATURE_PARK                0x00008000
+#define LINECALLFEATURE_PREPAREADDCONF      0x00010000
+#define LINECALLFEATURE_REDIRECT            0x00020000
+#define LINECALLFEATURE_REMOVEFROMCONF      0x00040000
+#define LINECALLFEATURE_SECURECALL          0x00080000
+#define LINECALLFEATURE_SENDUSERUSER        0x00100000
+#define LINECALLFEATURE_SETCALLPARAMS       0x00200000
+#define LINECALLFEATURE_SETMEDIACONTROL     0x00400000
+#define LINECALLFEATURE_SETTERMINAL         0x00800000
+#define LINECALLFEATURE_SETUPCONF           0x01000000
+#define LINECALLFEATURE_SETUPTRANSFER       0x02000000
+#define LINECALLFEATURE_SWAPHOLD            0x04000000
+#define LINECALLFEATURE_UNHOLD              0x08000000
+#define LINECALLFEATURE_RELEASEUSERUSERINFO 0x10000000
+
+typedef struct lineaddresscaps_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwLineDeviceID;
+    DWORD dwAddressSize;
+    DWORD dwAddressOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+    DWORD dwAddressSharing;
+    DWORD dwAddressStates;
+    DWORD dwCallInfoStates;
+    DWORD dwCallerIDFlags;
+    DWORD dwCalledIDFlags;
+    DWORD dwConnectedIDFlags;
+    DWORD dwRedirectionIDFlags;
+    DWORD dwRedirectingIDFlags;
+    DWORD dwCallStates;
+    DWORD dwDialToneModes;
+    DWORD dwBusyModes;
+    DWORD dwSpecialInfo;
+    DWORD dwDisconnectModes;
+    DWORD dwMaxNumActiveCalls;
+    DWORD dwMaxNumOnHoldCalls;
+    DWORD dwMaxNumOnHoldPendingCalls;
+    DWORD dwMaxNumConference;
+    DWORD dwMaxNumTransConf;
+    DWORD dwAddrCapFlags;
+    DWORD dwCallFeatures;
+    DWORD dwRemoveFromConfCaps;
+    DWORD dwRemoveFromConfState;
+    DWORD dwTransferModes;
+    DWORD dwParkModes;
+    DWORD dwForwardModes;
+    DWORD dwMaxForwardEntries;
+    DWORD dwMaxSpecificEntries;
+    DWORD dwMinFwdNumRings;
+    DWORD dwMaxFwdNumRings;
+    DWORD dwMaxCallCompletions;
+    DWORD dwCallCompletionConds;
+    DWORD dwCallCompletionModes;
+    DWORD dwNumCompletionMessages;
+    DWORD dwCompletionMsgTextEntrySize;
+    DWORD dwCompletionMsgTextSize;
+    DWORD dwCompletionMsgTextOffset;
+    DWORD dwAddressFeatures;
+} LINEADDRESSCAPS, *LPLINEADDRESSCAPS;
+
+typedef struct lineaddressstatus_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwNumInUse;
+    DWORD dwNumActiveCalls;
+    DWORD dwNumOnHoldCalls;
+    DWORD dwNumOnHoldPendCalls;
+    DWORD dwAddressFeatures;
+    DWORD dwNumRingsNoAnswer;
+    DWORD dwForwardNumEntries;
+    DWORD dwForwardSize;
+    DWORD dwForwardOffset;
+    DWORD dwTerminalModesSize;
+    DWORD dwTerminalModesOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} LINEADDRESSSTATUS, *LPLINEADDRESSSTATUS;
+
+typedef struct linedialparams_tag {
+    DWORD dwDialPause;
+    DWORD dwDialSpeed;
+    DWORD dwDigitDuration;
+    DWORD dwWaitForDialtone;
+} LINEDIALPARAMS, *LPLINEDIALPARAMS;
+
+typedef struct linecallinfo_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    HLINE hLine;
+    DWORD dwLineDeviceID;
+    DWORD dwAddressID;
+    DWORD dwBearerMode;
+    DWORD dwRate;
+    DWORD dwMediaMode;
+    DWORD dwAppSpecific;
+    DWORD dwCallID;
+    DWORD dwRelatedCallID;
+    DWORD dwCallParamFlags;
+    DWORD dwCallStates;
+    DWORD dwMonitorDigitModes;
+    DWORD dwMonitorMediaModes;
+    LINEDIALPARAMS DialParams;
+    DWORD dwOrigin;
+    DWORD dwReason;
+    DWORD dwCompletionID;
+    DWORD dwNumOwners;
+    DWORD dwNumMonitors;
+    DWORD dwCountryCode;
+    DWORD dwTrunk;
+    DWORD dwCallerIDFlags;
+    DWORD dwCallerIDSize;
+    DWORD dwCallerIDOffset;
+    DWORD dwCallerIDNameSize;
+    DWORD dwCallerIDNameOffset;
+    DWORD dwCalledIDFlags;
+    DWORD dwCalledIDSize;
+    DWORD dwCalledIDOffset;
+    DWORD dwCalledIDNameSize;
+    DWORD dwCalledIDNameOffset;
+    DWORD dwConnectedIDFlags;
+    DWORD dwConnectedIDSize;
+    DWORD dwConnectedIDOffset;
+    DWORD dwConnectedIDNameSize;
+    DWORD dwConnectedIDNameOffset;
+    DWORD dwRedirectionIDFlags;
+    DWORD dwRedirectionIDSize;
+    DWORD dwRedirectionIDOffset;
+    DWORD dwRedirectionIDNameSize;
+    DWORD dwRedirectionIDNameOffset;
+    DWORD dwRedirectingIDFlags;
+    DWORD dwRedirectingIDSize;
+    DWORD dwRedirectingIDOffset;
+    DWORD dwRedirectingIDNameSize;
+    DWORD dwRedirectingIDNameOffset;
+    DWORD dwAppNameSize;
+    DWORD dwAppNameOffset;
+    DWORD dwDisplayableAddressSize;
+    DWORD dwDisplayableAddressOffset;
+    DWORD dwCalledPartySize;
+    DWORD dwCalledPartyOffset;
+    DWORD dwCommentSize;
+    DWORD dwCommentOffset;
+    DWORD dwDisplaySize;
+    DWORD dwDisplayOffset;
+    DWORD dwUserUserInfoSize;
+    DWORD dwUserUserInfoOffset;
+    DWORD dwHighLevelCompSize;
+    DWORD dwHighLevelCompOffset;
+    DWORD dwLowLevelCompSize;
+    DWORD dwLowLevelCompOffset;
+    DWORD dwChargingInfoSize;
+    DWORD dwChargingInfoOffset;
+    DWORD dwTerminalModesSize;
+    DWORD dwTerminalModesOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} LINECALLINFO, *LPLINECALLINFO;
+
+typedef struct linecalllist_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwCallsNumEntries;
+    DWORD dwCallsSize;
+    DWORD dwCallsOffset;
+} LINECALLLIST, *LPLINECALLLIST;
+
+typedef struct linecallparams_tag {
+    DWORD dwTotalSize;
+    DWORD dwBearerMode;
+    DWORD dwMinRate;
+    DWORD dwMaxRate;
+    DWORD dwMediaMode;
+    DWORD dwCallParamFlags;
+    DWORD dwAddressMode;
+    DWORD dwAddressID;
+    LINEDIALPARAMS DialParams;
+    DWORD dwOrigAddressSize;
+    DWORD dwOrigAddressOffset;
+    DWORD dwDisplayableAddressSize;
+    DWORD dwDisplayableAddressOffset;
+    DWORD dwCalledPartySize;
+    DWORD dwCalledPartyOffset;
+    DWORD dwCommentSize;
+    DWORD dwCommentOffset;
+    DWORD dwUserUserInfoSize;
+    DWORD dwUserUserInfoOffset;
+    DWORD dwHighLevelCompSize;
+    DWORD dwHighLevelCompOffset;
+    DWORD dwLowLevelCompSize;
+    DWORD dwLowLevelCompOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} LINECALLPARAMS, *LPLINECALLPARAMS;
+
+typedef struct linecallstatus_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwCallState;
+    DWORD dwCallStateMode;
+    DWORD dwCallPrivilege;
+    DWORD dwCallFeatures;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} LINECALLSTATUS, *LPLINECALLSTATUS;
+
+typedef struct linecountrylist_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwNumCountries;
+    DWORD dwCountryListSize;
+    DWORD dwCountryListOffset;
+} LINECOUNTRYLIST, *LPLINECOUNTRYLIST;
+
+typedef struct linecountryentry_tag {
+    DWORD dwCountryID;
+    DWORD dwCountryCode;
+    DWORD dwNextCountryID;
+    DWORD dwCountryNameSize;
+    DWORD dwCountryNameOffset;
+    DWORD dwSameAreaRuleSize;
+    DWORD dwSameAreaRuleOffset;
+    DWORD dwLongDistanceRuleSize;
+    DWORD dwLongDistanceRuleOffset;
+    DWORD dwInternationalRuleSize;
+    DWORD dwInternationalRuleOffset;
+} LINECOUNTRYENTRY, *LPLINECOUNTRYENTRY;
+
+typedef struct linedevcaps_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwProviderInfoSize;
+    DWORD dwProviderInfoOffset;
+    DWORD dwSwitchInfoSize;
+    DWORD dwSwitchInfoOffset;
+    DWORD dwPermanentLineID;
+    DWORD dwLineNameSize;
+    DWORD dwLineNameOffset;
+    DWORD dwStringFormat;
+    DWORD dwAddressModes;
+    DWORD dwNumAddresses;
+    DWORD dwBearerModes;
+    DWORD dwMaxRate;
+    DWORD dwMediaModes;
+    DWORD dwGenerateToneModes;
+    DWORD dwGenerateToneMaxNumFreq;
+    DWORD dwGenerateDigitModes;
+    DWORD dwMonitorToneMaxNumFreq;
+    DWORD dwMonitorToneMaxNumEntries;
+    DWORD dwMonitorDigitModes;
+    DWORD dwGatherDigitsMinTimeout;
+    DWORD dwGatherDigitsMaxTimeout;
+    DWORD dwMedCtlDigitMaxListSize;
+    DWORD dwMedCtlMediaMaxListSize;
+    DWORD dwMedCtlToneMaxListSize;
+    DWORD dwMedCtlCallStateMaxListSize;
+    DWORD dwDevCapFlags;
+    DWORD dwMaxNumActiveCalls;
+    DWORD dwAnswerMode;
+    DWORD dwRingModes;
+    DWORD dwLineStates;
+    DWORD dwUUIAcceptSize;
+    DWORD dwUUIAnswerSize;
+    DWORD dwUUIMakeCallSize;
+    DWORD dwUUIDropSize;
+    DWORD dwUUISendUserUserInfoSize;
+    DWORD dwUUICallInfoSize;
+    LINEDIALPARAMS MinDialParams;
+    LINEDIALPARAMS MaxDialParams;
+    LINEDIALPARAMS DefaultDialParams;
+    DWORD dwNumTerminals;
+    DWORD dwTerminalCapsSize;
+    DWORD dwTerminalCapsOffset;
+    DWORD dwTerminalTextEntrySize;
+    DWORD dwTerminalTextSize;
+    DWORD dwTerminalTextOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+    DWORD dwLineFeatures;
+} LINEDEVCAPS, *LPLINEDEVCAPS;
+
+typedef struct linedevstatus_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwNumOpens;
+    DWORD dwOpenMediaModes;
+    DWORD dwNumActiveCalls;
+    DWORD dwNumOnHoldCalls;
+    DWORD dwNumOnHoldPendCalls;
+    DWORD dwLineFeatures;
+    DWORD dwNumCallCompletions;
+    DWORD dwRingMode;
+    DWORD dwSignalLevel;
+    DWORD dwBatteryLevel;
+    DWORD dwRoamMode;
+    DWORD dwDevStatusFlags;
+    DWORD dwTerminalModesSize;
+    DWORD dwTerminalModesOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} LINEDEVSTATUS, *LPLINEDEVSTATUS;
+
+typedef struct lineextensionid_tag {
+    DWORD dwExtensionID0;
+    DWORD dwExtensionID1;
+    DWORD dwExtensionID2;
+    DWORD dwExtensionID3;
+} LINEEXTENSIONID, *LPLINEEXTENSIONID;
+
+typedef struct lineforward_tag {
+    DWORD dwForwardMode;
+    DWORD dwCallerAddressSize;
+    DWORD dwCallerAddressOffset;
+    DWORD dwDestCountryCode;
+    DWORD dwDestAddressSize;
+    DWORD dwDestAddressOffset;
+} LINEFORWARD, *LPLINEFORWARD;
+
+typedef struct lineforwardlist_tag {
+    DWORD dwTotalSize;
+    DWORD dwNumEntries;
+    LINEFORWARD ForwardList[1];
+} LINEFORWARDLIST, *LPLINEFORWARDLIST;
+
+typedef struct linegeneratetone_tag {
+    DWORD dwFrequency;
+    DWORD dwCadenceOn;
+    DWORD dwCadenceOff;
+    DWORD dwVolume;
+} LINEGENERATETONE, *LPLINEGENERATETONE;
+
+typedef struct lineinitializeexparams_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwOptions;
+    union {
+    HANDLE hEvent;
+    HANDLE hCompletionPort;
+    } Handles;
+    DWORD dwCompletionKey;
+} LINEINITIALIZEEXPARAMS, *LPLINEINITIALIZEEXPARAMS;
+
+typedef struct linemediacontrolcallstate_tag {
+    DWORD dwCallStates;
+    DWORD dwMediaControl;
+} LINEMEDIACONTROLCALLSTATE, *LPLINEMEDIACONTROLCALLSTATE;
+
+typedef struct linemediacontroldigit_tag {
+    DWORD dwDigit;
+    DWORD dwDigitModes;
+    DWORD dwMediaControl;
+} LINEMEDIACONTROLDIGIT, *LPLINEMEDIACONTROLDIGIT;
+
+typedef struct linemediacontrolmedia_tag {
+    DWORD dwMediaModes;
+    DWORD dwDuration;
+    DWORD dwMediaControl;
+} LINEMEDIACONTROLMEDIA, *LPLINEMEDIACONTROLMEDIA;
+
+typedef struct linemediacontroltone_tag {
+    DWORD dwAppSpecific;
+    DWORD dwDuration;
+    DWORD dwFrequency1;
+    DWORD dwFrequency2;
+    DWORD dwFrequency3;
+    DWORD dwMediaControl;
+} LINEMEDIACONTROLTONE, *LPLINEMEDIACONTROLTONE;
+
+typedef struct linemonitortone_tag {
+    DWORD dwAppSpecific;
+    DWORD dwDuration;
+    DWORD dwFrequency1;
+    DWORD dwFrequency2;
+    DWORD dwFrequency3;
+} LINEMONITORTONE, *LPLINEMONITORTONE;
+
+typedef struct lineproviderlist_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwNumProviders;
+    DWORD dwProviderListSize;
+    DWORD dwProviderListOffset;
+} LINEPROVIDERLIST, *LPLINEPROVIDERLIST;
+
+typedef struct linetranslatecaps_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwNumLocations;
+    DWORD dwLocationListSize;
+    DWORD dwLocationListOffset;
+    DWORD dwCurrentLocationID;
+    DWORD dwNumCards;
+    DWORD dwCardListSize;
+    DWORD dwCardListOffset;
+    DWORD dwCurrentPreferredCardID;
+} LINETRANSLATECAPS, *LPLINETRANSLATECAPS;
+
+typedef struct linelocationentry_tag {
+    DWORD dwPermanentLocationID;
+    DWORD dwLocationNameSize;
+    DWORD dwLocationNameOffset;
+    DWORD dwCountryCode;
+    DWORD dwCityCodeSize;
+    DWORD dwCityCodeOffset;
+    DWORD dwPreferredCardID;
+    DWORD dwLocalAccessCodeSize;
+    DWORD dwLocalAccessCodeOffset;
+    DWORD dwLongDistanceAccessCodeSize;
+    DWORD dwLongDistanceAccessCodeOffset;
+    DWORD dwTollPrefixListSize;
+    DWORD dwTollPrefixListOffset;
+    DWORD dwCountryID;
+    DWORD dwOptions;
+    DWORD dwCancelCallWaitingSize;
+    DWORD dwCancelCallWaitingOffset;
+} LINELOCATIONENTRY, *LPLINELOCATIONENTRY;
+
+typedef struct linecardentry_tag {
+    DWORD dwPermanentCardID;
+    DWORD dwCardNameSize;
+    DWORD dwCardNameOffset;
+    DWORD dwCardNumberDigits;
+    DWORD dwSameAreaRuleSize;
+    DWORD dwSameAreaRuleOffset;
+    DWORD dwLongDistanceRuleSize;
+    DWORD dwLongDistanceRuleOffset;
+    DWORD dwInternationalRuleSize;
+    DWORD dwInternationalRuleOffset;
+    DWORD dwOptions;
+} LINECARDENTRY, *LPLINECARDENTRY;
+
+
+typedef struct linetranslateoutput_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwDialableStringSize;
+    DWORD dwDialableStringOffset;
+    DWORD dwDisplayableStringSize;
+    DWORD dwDisplayableStringOffset;
+    DWORD dwCurrentCountry;
+    DWORD dwDestCountry;
+    DWORD dwTranslateResults;
+} LINETRANSLATEOUTPUT, *LPLINETRANSLATEOUTPUT;
+
+typedef struct linemessage_tag {
+  DWORD     hDevice;
+  DWORD     dwMessageID;
+  DWORD_PTR dwCallbackInstance;
+  DWORD_PTR dwParam1;
+  DWORD_PTR dwParam2;
+  DWORD_PTR dwParam3;
+} LINEMESSAGE, *LPLINEMESSAGE;
+
+typedef void (CALLBACK *LINECALLBACK)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD);
+
+typedef struct _PHONEAPP {
+  int dummy;
+} PHONEAPP, *LPPHONEAPP;
+
+typedef struct _PHONE {
+    DWORD dwRingMode;
+    DWORD dwVolume;
+} PHONE, *LPPHONE;
+
+typedef struct phonebuttoninfo_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwButtonMode;
+    DWORD dwButtonFunction;
+    DWORD dwButtonTextSize;
+    DWORD dwButtonTextOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+    DWORD dwButtonState;
+} PHONEBUTTONINFO, *LPPHONEBUTTONINFO;
+
+typedef struct phonecaps_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwProviderInfoSize;
+    DWORD dwProviderInfoOffset;
+    DWORD dwPhoneInfoSize;
+    DWORD dwPhoneInfoOffset;
+    DWORD dwPermanentPhoneID;
+    DWORD dwPhoneNameSize;
+    DWORD dwPhoneNameOffset;
+    DWORD dwStringFormat;
+    DWORD dwPhoneStates;
+    DWORD dwHookSwitchDevs;
+    DWORD dwHandsetHookSwitchModes;
+    DWORD dwSpeakerHookSwitchModes;
+    DWORD dwHeadsetHookSwitchModes;
+    DWORD dwVolumeFlags;
+    DWORD dwGainFlags;
+    DWORD dwDisplayNumRows;
+    DWORD dwDisplayNumColumns;
+    DWORD dwNumRingModes;
+    DWORD dwNumButtonLamps;
+    DWORD dwButtonModesSize;
+    DWORD dwButtonModesOffset;
+    DWORD dwButtonFunctionsSize;
+    DWORD dwButtonFunctionsOffset;
+    DWORD dwLampModesSize;
+    DWORD dwLampModesOffset;
+    DWORD dwNumSetData;
+    DWORD dwSetDataSize;
+    DWORD dwSetDataOffset;
+    DWORD dwNumGetData;
+    DWORD dwGetDataSize;
+    DWORD dwGetDataOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} PHONECAPS, *LPPHONECAPS;
+
+typedef struct phoneextensionid_tag {
+    DWORD dwExtensionID0;
+    DWORD dwExtensionID1;
+    DWORD dwExtensionID2;
+    DWORD dwExtensionID3;
+} PHONEEXTENSIONID, *LPPHONEEXTENSIONID;
+
+typedef struct phoneinitializeexparams_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwOptions;
+    union {
+    HANDLE hEvent;
+    HANDLE hCompletionPort;
+    } Handles;
+    DWORD dwCompletionKey;
+} PHONEINITIALIZEEXPARAMS, *LPPHONEINITIALIZEEXPARAMS;
+
+typedef struct phonemessage_tag {
+  DWORD     hDevice;
+  DWORD     dwMessageID;
+  DWORD_PTR dwCallbackInstance;
+  DWORD_PTR dwParam1;
+  DWORD_PTR dwParam2;
+  DWORD_PTR dwParam3;
+} PHONEMESSAGE, *LPPHONEMESSAGE;
+
+typedef struct phonestatus_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwStatusFlags;
+    DWORD dwNumOwners;
+    DWORD dwRingMOde;
+    DWORD dwRingVolume;
+    DWORD dwHandsetHookSwitchMode;
+    DWORD dwHandsetVolume;
+    DWORD dwHandsetGain;
+    DWORD dwSpeakerHookSwitchMode;
+    DWORD dwSpeakerVolume;
+    DWORD dwSpeakerGain;
+    DWORD dwHeadsetHookSwitchMode;
+    DWORD dwHeadsetVolume;
+    DWORD dwHeadsetGain;
+    DWORD dwDisplaySize;
+    DWORD dwDisplayOffset;
+    DWORD dwLampModesSize;
+    DWORD dwLampModesOffset;
+    DWORD dwOwnerNameSize;
+    DWORD dwOwnerNameOffset;
+    DWORD dwDevSpecificSize;
+    DWORD dwDevSpecificOffset;
+} PHONESTATUS, *LPPHONESTATUS;
+
+typedef void (CALLBACK *PHONECALLBACK)(HANDLE, DWORD, DWORD, DWORD, DWORD, DWORD);
+
+typedef struct varstring_tag {
+    DWORD dwTotalSize;
+    DWORD dwNeededSize;
+    DWORD dwUsedSize;
+    DWORD dwStringFormat;
+    DWORD dwStringSize;
+    DWORD dwStringOffset;
+} VARSTRING, *LPVARSTRING;
+
+/* line functions */
+DWORD WINAPI lineAccept(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineAddProviderA(LPCSTR,HWND,LPDWORD);
+DWORD WINAPI lineAddProviderW(LPCWSTR,HWND,LPDWORD);
+#define      lineAddProvider WINELIB_NAME_AW(lineAddProvider)
+DWORD WINAPI lineAddToConference(HCALL,HCALL);
+DWORD WINAPI lineAnswer(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineBlindTransfer(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineClose(HLINE);
+DWORD WINAPI lineCompleteCall(HCALL,LPDWORD,DWORD,DWORD);
+DWORD WINAPI lineCompleteTransfer(HCALL,HCALL,LPHCALL,DWORD);
+DWORD WINAPI lineConfigDialog(DWORD,HWND,LPCSTR);
+DWORD WINAPI lineConfigDialogEdit(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
+DWORD WINAPI lineConfigProvider(HWND,DWORD);
+DWORD WINAPI lineDeallocateCall(HCALL);
+DWORD WINAPI lineDevSpecific(HLINE,DWORD,HCALL,LPVOID,DWORD);
+DWORD WINAPI lineDevSpecificFeature(HLINE,DWORD,LPVOID,DWORD);
+DWORD WINAPI lineDial(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineDrop(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineForward(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineGatherDigits(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
+DWORD WINAPI lineGenerateDigits(HCALL,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGenerateTone(HCALL,DWORD,DWORD,DWORD,LPLINEGENERATETONE);
+DWORD WINAPI lineGetAddressCaps(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
+DWORD WINAPI lineGetAddressID(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGetAddressStatus(HLINE,DWORD,LPLINEADDRESSSTATUS);
+DWORD WINAPI lineGetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);
+DWORD WINAPI lineGetCallInfo(HCALL,LPLINECALLINFO);
+DWORD WINAPI lineGetCallStatus(HCALL,LPLINECALLSTATUS);
+DWORD WINAPI lineGetConfRelatedCalls(HCALL,LPLINECALLLIST);
+DWORD WINAPI lineGetCountry(DWORD,DWORD,LPLINECOUNTRYLIST);
+DWORD WINAPI lineGetDevCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
+DWORD WINAPI lineGetDevCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
+#define      lineGetDevCaps WINELIB_NAME_AW(lineGetDevCaps);
+DWORD WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetIDA(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetIDW(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCWSTR);
+#define      lineGetID WINELIB_NAME_AW(lineGetID);
+DWORD WINAPI lineGetIcon(DWORD,LPCSTR,HICON *);
+DWORD WINAPI lineGetLineDevStatus(HLINE,LPLINEDEVSTATUS);
+DWORD WINAPI lineGetNewCalls(HLINE,DWORD,DWORD,LPLINECALLLIST);
+DWORD WINAPI lineGetNumRings(HLINE,DWORD,LPDWORD);
+DWORD WINAPI lineGetProviderListA(DWORD,LPLINEPROVIDERLIST);
+DWORD WINAPI lineGetProviderListW(DWORD,LPLINEPROVIDERLIST);
+#define      lineGetProviderList WINELIB_NAME_AW(lineGetProviderList)
+DWORD WINAPI lineGetRequest(HLINEAPP,DWORD,LPVOID);
+DWORD WINAPI lineGetStatusMessages(HLINE,LPDWORD,LPDWORD);
+DWORD WINAPI lineGetTranslateCaps(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
+DWORD WINAPI lineHandoff(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineHold(HCALL);
+DWORD WINAPI lineInitialize(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD);
+LONG  WINAPI lineInitializeExA(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
+LONG  WINAPI lineInitializeExW(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
+#define      lineInitializeEx WINELIB_NAME_AW(lineInitializeEx)
+DWORD WINAPI lineMakeCallA(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineMakeCallW(HLINE,LPHCALL,LPCWSTR,DWORD,LPLINECALLPARAMS);
+#define      lineMakeCall WINELIB_NAMEAW(lineMakeCall);
+DWORD WINAPI lineMonitorDigits(HCALL,DWORD);
+DWORD WINAPI lineMonitorMedia(HCALL,DWORD);
+DWORD WINAPI lineMonitorTones(HCALL,LPLINEMONITORTONE,DWORD);
+DWORD WINAPI lineNegotiateAPIVersion(HLINEAPP,DWORD,DWORD,DWORD,LPDWORD,LPLINEEXTENSIONID);
+DWORD WINAPI lineNegotiateExtVersion(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
+DWORD WINAPI lineOpen(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI linePark(HCALL,DWORD,LPCSTR,LPVARSTRING);
+DWORD WINAPI linePickup(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
+DWORD WINAPI linePrepareAddToConference(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineRedirect(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP,DWORD,DWORD,DWORD);
+DWORD WINAPI lineReleaseUserUserInfo(HCALL);
+DWORD WINAPI lineRemoveFromConference(HCALL);
+DWORD WINAPI lineRemoveProvider(DWORD,HWND);
+DWORD WINAPI lineSecureCall(HCALL);
+DWORD WINAPI lineSendUserUserInfo(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineSetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetAppSpecific(HCALL,DWORD);
+DWORD WINAPI lineSetCallParams(HCALL,DWORD,DWORD,DWORD,LPLINEDIALPARAMS);
+DWORD WINAPI lineSetCallPrivilege(HCALL,DWORD);
+DWORD WINAPI lineSetCurrentLocation(HLINEAPP,DWORD);
+DWORD WINAPI lineSetDevConfig(DWORD,LPVOID,DWORD,LPCSTR);
+DWORD WINAPI lineSetMediaControl(HLINE,DWORD,HCALL,DWORD,LPLINEMEDIACONTROLDIGIT,DWORD,LPLINEMEDIACONTROLMEDIA,DWORD,LPLINEMEDIACONTROLTONE,DWORD,LPLINEMEDIACONTROLCALLSTATE,DWORD);
+DWORD WINAPI lineSetMediaMode(HCALL,DWORD);
+DWORD WINAPI lineSetNumRings(HLINE,DWORD,DWORD);
+DWORD WINAPI lineSetStatusMessages(HLINE,DWORD,DWORD);
+DWORD WINAPI lineSetTerminal(HLINE,DWORD,HCALL,DWORD,DWORD,DWORD,DWORD);
+DWORD WINAPI lineSetTollList(HLINEAPP,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetupConference(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineSetupTransfer(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineShutdown(HLINEAPP);
+DWORD WINAPI lineSwapHold(HCALL,HCALL);
+DWORD WINAPI lineTranslateAddress(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
+DWORD WINAPI lineTranslateDialog(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
+DWORD WINAPI lineUncompleteCall(HLINE,DWORD);
+DWORD WINAPI lineUnHold(HCALL);
+DWORD WINAPI lineUnpark(HLINE,DWORD,LPHCALL,LPCSTR);
+
+DWORD WINAPI lineBlindTransferA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineConfigDialogA(DWORD,HWND,LPCSTR);
+DWORD WINAPI lineConfigDialogEditA(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
+DWORD WINAPI lineDialA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineForwardA(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineGatherDigitsA(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
+DWORD WINAPI lineGenerateDigitsA(HCALL,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGetAddressCapsA(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
+DWORD WINAPI lineGetAddressIDA(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGetAddressStatusA(HLINE,DWORD,LPLINEADDRESSSTATUS);
+DWORD WINAPI lineGetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);
+DWORD WINAPI lineGetCallInfoA(HCALL,LPLINECALLINFO);
+DWORD WINAPI lineGetCountryA(DWORD,DWORD,LPLINECOUNTRYLIST);
+DWORD WINAPI lineGetDevConfigA(DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetIconA(DWORD,LPCSTR,HICON *);
+DWORD WINAPI lineGetLineDevStatusA(HLINE,LPLINEDEVSTATUS);
+DWORD WINAPI lineGetRequestA(HLINEAPP,DWORD,LPVOID);
+DWORD WINAPI lineGetTranslateCapsA(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
+DWORD WINAPI lineHandoffA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineOpenA(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineParkA(HCALL,DWORD,LPCSTR,LPVARSTRING);
+DWORD WINAPI linePickupA(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
+DWORD WINAPI linePrepareAddToConferenceA(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineRedirectA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineSetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetDevConfigA(DWORD,LPVOID,DWORD,LPCSTR);
+DWORD WINAPI lineSetTollListA(HLINEAPP,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetupConferenceA(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineSetupTransferA(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineTranslateAddressA(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
+DWORD WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
+DWORD WINAPI lineUnhold(HCALL);
+DWORD WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR);
+
+/* phone functions */
+DWORD WINAPI phoneClose(HPHONE);
+DWORD WINAPI phoneConfigDialog(DWORD,HWND,LPCSTR);
+DWORD WINAPI phoneDevSpecific(HPHONE,LPVOID,DWORD);
+DWORD WINAPI phoneGetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
+DWORD WINAPI phoneGetData(HPHONE,DWORD,LPVOID,DWORD);
+DWORD WINAPI phoneGetDevCaps(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
+DWORD WINAPI phoneGetDisplay(HPHONE,LPVARSTRING);
+DWORD WINAPI phoneGetGain(HPHONE,DWORD,LPDWORD);
+DWORD WINAPI phoneGetHookSwitch(HPHONE,LPDWORD);
+DWORD WINAPI phoneGetID(HPHONE,LPVARSTRING,LPCSTR);
+DWORD WINAPI phoneGetIcon(DWORD,LPCSTR,HICON *);
+DWORD WINAPI phoneGetLamp(HPHONE,DWORD,LPDWORD);
+DWORD WINAPI phoneGetRing(HPHONE,LPDWORD,LPDWORD);
+DWORD WINAPI phoneGetStatus(HPHONE,LPPHONESTATUS);
+DWORD WINAPI phoneGetStatusMessages(HPHONE,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI phoneGetVolume(HPHONE,DWORD,LPDWORD);
+DWORD WINAPI phoneInitialize(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD);
+DWORD WINAPI phoneNegotiateAPIVersion(HPHONEAPP,DWORD,DWORD,DWORD,LPDWORD,LPPHONEEXTENSIONID);
+DWORD WINAPI phoneNegotiateExtVersion(HPHONEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
+DWORD WINAPI phoneOpen(HPHONEAPP,DWORD,LPHPHONE,DWORD,DWORD,DWORD,DWORD);
+DWORD WINAPI phoneSetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
+DWORD WINAPI phoneSetData(HPHONE,DWORD,LPVOID,DWORD);
+DWORD WINAPI phoneSetDisplay(HPHONE,DWORD,DWORD,LPCSTR,DWORD);
+DWORD WINAPI phoneSetGain(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetHookSwitch(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetLamp(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetRing(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetStatusMessages(HPHONE,DWORD,DWORD,DWORD);
+DWORD WINAPI phoneSetVolume(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneShutdown(HPHONEAPP);
+
+DWORD WINAPI phoneConfigDialogA(DWORD,HWND,LPCSTR);
+DWORD WINAPI phoneGetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);
+DWORD WINAPI phoneGetDevCapsA(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
+DWORD WINAPI phoneGetIDA(HPHONE,LPVARSTRING,LPCSTR);
+DWORD WINAPI phoneGetIconA(DWORD,LPCSTR,HICON *);
+DWORD WINAPI phoneGetStatusA(HPHONE,LPPHONESTATUS);
+DWORD WINAPI phoneSetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);
+
+/* "assisted" functions */
+DWORD WINAPI tapiGetLocationInfo(LPSTR,LPSTR);
+DWORD WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+
+DWORD WINAPI tapiGetLocationInfoA(LPSTR,LPSTR);
+DWORD WINAPI tapiRequestMakeCallA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_TAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h
new file mode 100644
index 0000000..3640385
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 1998 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TCHAR_H
+#define __WINE_TCHAR_H
+
+#ifdef __WINESRC__
+#error Wine should not include tchar.h internally
+#endif
+
+#if defined(_UNICODE) || defined(_MBCS)
+#error You must use msvcrt when building in Unicode/MBCS mode
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * tchar routines
+ */
+#define _strdec(start,current)  ((start)<(current) ? ((char*)(current))-1 : NULL)
+#define _strinc(current)        (((char*)(current))+1)
+#define _strncnt(str,max)       (strlen(str)>(max) ? (max) : strlen(str))
+#define _strnextc(str)          ((unsigned int)*(str))
+#define _strninc(str,n)         (((char*)(str))+(n))
+#define _strspnp(s1,s2)         (*((s1)+=strspn((s1),(s2))) ? (s1) : NULL)
+
+
+/*****************************************************************************
+ * tchar mappings
+ */
+#ifndef _UNICODE
+#  ifndef _MBCS
+#    include <string.h>
+#    define WINE_tchar_routine(std,mbcs,unicode) std
+#  else
+#    include <mbstring.h>
+#    define WINE_tchar_routine(std,mbcs,unicode) mbcs
+#  endif
+#else /* _UNICODE */
+#  include <wchar.h>
+#  define WINE_tchar_routine(std,mbcs,unicode) unicode
+#endif
+
+#define WINE_tchar_true(a) (1)
+#define WINE_tchar_false(a) (0)
+#define WINE_tchar_tclen(a) (1)
+#define WINE_tchar_tccpy(a,b) do { *(a)=*(b); } while (0)
+
+#define __targv       WINE_tchar_routine(__argv,          __argv,      __wargv)
+#define _fgettc       WINE_tchar_routine(fgetc,           fgetc,       fgetwc)
+#define _fgettchar    WINE_tchar_routine(fgetchar,        fgetchar,    _fgetwchar)
+#define _fgetts       WINE_tchar_routine(fgets,           fgets,       fgetws)
+#define _fputtc       WINE_tchar_routine(fputc,           fputc,       fputwc)
+#define _fputtchar    WINE_tchar_routine(fputchar,        fputchar,    _fputwchar)
+#define _fputts       WINE_tchar_routine(fputs,           fputs,       fputws)
+#define _ftprintf     WINE_tchar_routine(fprintf,         fprintf,     fwprintf)
+#define _ftscanf      WINE_tchar_routine(fscanf,          fscanf,      fwscanf)
+#define _gettc        WINE_tchar_routine(getc,            getc,        getwc)
+#define _gettchar     WINE_tchar_routine(getchar,         getchar,     getwchar)
+#define _getts        WINE_tchar_routine(gets,            gets,        getws)
+#define _isalnum      WINE_tchar_routine(isalnum,         _ismbcalnum, iswalnum)
+#define _istalpha     WINE_tchar_routine(isalpha,         _ismbcalpha, iswalpha)
+#define _istascii     WINE_tchar_routine(isascii,         __isascii,   iswascii)
+#define _istcntrl     WINE_tchar_routine(iscntrl,         iscntrl,     iswcntrl)
+#define _istdigit     WINE_tchar_routine(isdigit,         _ismbcdigit, iswdigit)
+#define _istgraph     WINE_tchar_routine(isgraph,         _ismbcgraph, iswgraph)
+#define _istlead      WINE_tchar_routine(WINE_tchar_false,_ismbblead,  WINE_tchar_false)
+#define _istleadbyte  WINE_tchar_routine(WINE_tchar_false,isleadbyte,  WINE_tchar_false)
+#define _istlegal     WINE_tchar_routine(WINE_tchar_true, _ismbclegal, WINE_tchar_true)
+#define _istlower     WINE_tchar_routine(islower,         _ismbcslower,iswlower)
+#define _istprint     WINE_tchar_routine(isprint,         _ismbcprint, iswprint)
+#define _istpunct     WINE_tchar_routine(ispunct,         _ismbcpunct, iswpunct)
+#define _istspace     WINE_tchar_routine(isspace,         _ismbcspace, iswspace)
+#define _istupper     WINE_tchar_routine(isupper,         _ismbcupper, iswupper)
+#define _istxdigit    WINE_tchar_routine(isxdigit,        isxdigit,    iswxdigit)
+#define _itot         WINE_tchar_routine(_itoa,           _itoa,       _itow)
+#define _ltot         WINE_tchar_routine(_ltoa,           _ltoa,       _ltow)
+#define _puttc        WINE_tchar_routine(putc,            putc,        putwc)
+#define _puttchar     WINE_tchar_routine(putchar,         putchar,     putwchar)
+#define _putts        WINE_tchar_routine(puts,            puts,        putws)
+#define _sntprintf    WINE_tchar_routine(snprintf,        snprintf,    snwprintf)
+#define _stprintf     WINE_tchar_routine(sprintf,         sprintf,     swprintf)
+#define _stscanf      WINE_tchar_routine(sscanf,          sscanf,      swscanf)
+#define _taccess      WINE_tchar_routine(access,          _access,     _waccess)
+#define _tasctime     WINE_tchar_routine(asctime,         asctime,     _wasctime)
+#define _tccpy        WINE_tchar_routine(WINE_tchar_tccpy,_mbccpy,     WINE_tchar_tccpy)
+#define _tchdir       WINE_tchar_routine(chdir,           _chdir,      _wchdir)
+#define _tclen        WINE_tchar_routine(WINE_tchar_tclen,_mbclen,     WINE_tchar_tclen)
+#define _tchmod       WINE_tchar_routine(chmod,           _chmod,      _wchmod)
+#define _tcreat       WINE_tchar_routine(creat,           _creat,      _wcreat)
+#define _tcscat       WINE_tchar_routine(strcat,          _mbscat,     wcscat)
+#define _tcschr       WINE_tchar_routine(strchr,          _mbschr,     wcschr)
+#define _tcsclen      WINE_tchar_routine(strlen,          _mbslen,     wcslen)
+#define _tcscmp       WINE_tchar_routine(strcmp,          _mbscmp,     wcscmp)
+#define _tcscoll      WINE_tchar_routine(strcoll,         _mbscoll,    wcscoll)
+#define _tcscpy       WINE_tchar_routine(strcpy,          _mbscpy,     wcscpy)
+#define _tcscspn      WINE_tchar_routine(strcspn,         _mbscspn,    wcscspn)
+#define _tcsdec       WINE_tchar_routine(_strdec,         _mbsdec,     _wcsdec)
+#define _tcsdup       WINE_tchar_routine(strdup,          _mbsdup,     _wcsdup)
+#define _tcsftime     WINE_tchar_routine(strftime,        strftime,    wcsftime)
+#define _tcsicmp      WINE_tchar_routine(strcasecmp,      _mbsicmp,    _wcsicmp)
+#define _tcsicoll     WINE_tchar_routine(_stricoll,       _stricoll,   _wcsicoll)
+#define _tcsinc       WINE_tchar_routine(_strinc,         _mbsinc,     _wcsinc)
+#define _tcslen       WINE_tchar_routine(strlen,          strlen,      wcslen)
+#define _tcslwr       WINE_tchar_routine(_strlwr,         _mbslwr,     _wcslwr)
+#define _tcsnbcnt     WINE_tchar_routine(_strncnt,        _mbsnbcnt,   _wcnscnt)
+#define _tcsncat      WINE_tchar_routine(strncat,         _mbsnbcat,   wcsncat)
+#define _tcsnccat     WINE_tchar_routine(strncat,         _mbsncat,    wcsncat)
+#define _tcsncmp      WINE_tchar_routine(strncmp,         _mbsnbcmp,   wcsncmp)
+#define _tcsnccmp     WINE_tchar_routine(strncmp,         _mbsncmp,    wcsncmp)
+#define _tcsnccnt     WINE_tchar_routine(_strncnt,        _mbsnccnt,   _wcsncnt)
+#define _tcsnccpy     WINE_tchar_routine(strncpy,         _mbsncpy,    wcsncpy)
+#define _tcsncicmp    WINE_tchar_routine(_strnicmp,       _mbsnicmp,   _wcsnicmp)
+#define _tcsncpy      WINE_tchar_routine(strncpy,         _mbsnbcpy,   wcsncpy)
+#define _tcsncset     WINE_tchar_routine(_strnset,        _mbsnset,    _wcsnset)
+#define _tcsnextc     WINE_tchar_routine(_strnextc,       _mbsnextc,   _wcsnextc)
+#define _tcsnicmp     WINE_tchar_routine(_strnicmp,       _mbsnicmp,   _wcsnicmp)
+#define _tcsnicoll    WINE_tchar_routine(_strnicoll,      _strnicoll   _wcsnicoll)
+#define _tcsninc      WINE_tchar_routine(_strninc,        _mbsninc,    _wcsninc)
+#define _tcsnccnt     WINE_tchar_routine(_strncnt,        _mbsnccnt,   _wcsncnt)
+#define _tcsnset      WINE_tchar_routine(_strnset,        _mbsnbset,   _wcsnset)
+#define _tcspbrk      WINE_tchar_routine(strpbrk,         _mbspbrk,    wcspbrk)
+#define _tcsspnp      WINE_tchar_routine(_strspnp,        _mbsspnp,    _wcsspnp)
+#define _tcsrchr      WINE_tchar_routine(strrchr,         _mbsrchr,    wcsrchr)
+#define _tcsrev       WINE_tchar_routine(_strrev,         _mbsrev,     _wcsrev)
+#define _tcsset       WINE_tchar_routine(_strset,         _mbsset,     _wcsset)
+#define _tcsspn       WINE_tchar_routine(strspn,          _mbsspn,     wcsspn)
+#define _tcsstr       WINE_tchar_routine(strstr,          _mbsstr,     wcsstr)
+#define _tcstod       WINE_tchar_routine(strtod,          strtod,      wcstod)
+#define _tcstok       WINE_tchar_routine(strtok,          _mbstok,     wcstok)
+#define _tcstol       WINE_tchar_routine(strtol,          strtol,      wcstol)
+#define _tcstoul      WINE_tchar_routine(strtoul,         strtoul,     wcstoul)
+#define _tcsupr       WINE_tchar_routine(_strupr,         _mbsupr,     _wcsupr)
+#define _tcsxfrm      WINE_tchar_routine(strxfrm,         strxfrm,     wcsxfrm)
+#define _tctime       WINE_tchar_routine(ctime,           ctime,       _wctime)
+#define _tenviron     WINE_tchar_routine(_environ,        _environ,    _wenviron)
+#define _texecl       WINE_tchar_routine(execl,           _execl,      _wexecl)
+#define _texecle      WINE_tchar_routine(execle,          _execle,     _wexecle)
+#define _texeclp      WINE_tchar_routine(execlp,          _execlp,     _wexeclp)
+#define _texeclpe     WINE_tchar_routine(execlpe,         _execlpe,    _wexeclpe)
+#define _texecv       WINE_tchar_routine(execv,           _execv,      _wexecv)
+#define _texecve      WINE_tchar_routine(execve,          _execve,     _wexecve)
+#define _texecvp      WINE_tchar_routine(execvp,          _execvp,     _wexecvp)
+#define _texecvpe     WINE_tchar_routine(execvpe,         _execvpe,    _wexecvpe)
+#define _tfdopen      WINE_tchar_routine(fdopen,          _fdopen,     _wfdopen)
+#define _tfinddata_t  WINE_tchar_routine(_finddata_t,     _finddata_t, _wfinddata_t)
+#define _tfinddatai64_t WINE_tchar_routine(_finddatai64_t,_finddatai64_t,_wfinddatai64_t)
+#define _tfindfirst   WINE_tchar_routine(_findfirst,      _findfirst,  _wfindfirst)
+#define _tfindnext    WINE_tchar_routine(_findnext,       _findnext,   _wfindnext)
+#define _tfopen       WINE_tchar_routine(fopen,           fopen,       _wfopen)
+#define _tfreopen     WINE_tchar_routine(freopen,         freopen,     _wfreopen)
+#define _tfsopen      WINE_tchar_routine(_fsopen,         _fsopen,     _wfsopen)
+#define _tfullpath    WINE_tchar_routine(_fullpath,       _fullpath,   _wfullpath)
+#define _tgetcwd      WINE_tchar_routine(getcwd,          _getcwd,     _wgetcwd)
+#define _tgetenv      WINE_tchar_routine(getenv,          getenv,      _wgetenv)
+#define _tmain        WINE_tchar_routine(main,            main,        wmain)
+#define _tmakepath    WINE_tchar_routine(_makepath,       _makepath,   _wmakepath)
+#define _tmkdir       WINE_tchar_routine(mkdir,           _mkdir,      _wmkdir)
+#define _tmktemp      WINE_tchar_routine(mktemp,          _mktemp,     _wmktemp)
+#define _tperror      WINE_tchar_routine(perror,          perror,      _wperror)
+#define _topen        WINE_tchar_routine(open,            _open,       _wopen)
+#define _totlower     WINE_tchar_routine(tolower,         _mbctolower, towlower)
+#define _totupper     WINE_tchar_routine(toupper,         _mbctoupper, towupper)
+#define _tpopen       WINE_tchar_routine(popen,           _popen,      _wpopen)
+#define _tprintf      WINE_tchar_routine(printf,          printf,      wprintf)
+#define _tremove      WINE_tchar_routine(remove,          remove,      _wremove)
+#define _trename      WINE_tchar_routine(rename,          rename,      _wrename)
+#define _trmdir       WINE_tchar_routine(rmdir,           _rmdir,      _wrmdir)
+#define _tsearchenv   WINE_tchar_routine(_searchenv,      _searchenv,  _wsearchenv)
+#define _tscanf       WINE_tchar_routine(scanf,           scanf,       wscanf)
+#define _tsetlocale   WINE_tchar_routine(setlocale,       setlocale,   _wsetlocale)
+#define _tsopen       WINE_tchar_routine(_sopen,          _sopen,      _wsopen)
+#define _tspawnl      WINE_tchar_routine(_spawnl,         _spawnl,     _wspawnl)
+#define _tspawnle     WINE_tchar_routine(_spawnle,        _spawnle,    _wspawnle)
+#define _tspawnlp     WINE_tchar_routine(_spawnlp,        _spawnlp,    _wspawnlp)
+#define _tspawnlpe    WINE_tchar_routine(_spawnlpe,       _spawnlpe,   _wspawnlpe)
+#define _tspawnv      WINE_tchar_routine(_spawnv,         _spawnv,     _wspawnv)
+#define _tspawnve     WINE_tchar_routine(_spawnve,        _spawnve,    _wspawnve)
+#define _tspawnvp     WINE_tchar_routine(_spawnvp,        _spawnvp,    _tspawnvp)
+#define _tspawnvpe    WINE_tchar_routine(_spawnvpe,       _spawnvpe,   _tspawnvpe)
+#define _tsplitpath   WINE_tchar_routine(_splitpath,      _splitpath,  _wsplitpath)
+#define _tstat        WINE_tchar_routine(_stat,           _stat,       _wstat)
+#define _tstrdate     WINE_tchar_routine(_strdate,        _strdate,    _wstrdate)
+#define _tstrtime     WINE_tchar_routine(_strtime,        _strtime,    _wstrtime)
+#define _tsystem      WINE_tchar_routine(system,          system,      _wsystem)
+#define _ttempnam     WINE_tchar_routine(tempnam,         _tempnam,    _wtempnam)
+#define _ttmpnam      WINE_tchar_routine(tmpnam,          tmpnam,      _wtmpnam)
+#define _ttoi         WINE_tchar_routine(atoi,            atoi,        _wtoi)
+#define _ttol         WINE_tchar_routine(atol,            atol,        _wtol)
+#define _tutime       WINE_tchar_routine(utime,           _utime,      _wutime)
+#define _tWinMain     WINE_tchar_routine(WinMain,         WinMain,     wWinMain)
+#define _ultot        WINE_tchar_routine(_ultoa,          _ultoa,      _ultow)
+#define _ungettc      WINE_tchar_routine(ungetc,          ungetc,      ungetwc)
+#define _vftprintf    WINE_tchar_routine(vfprintf,        vfprintf,    vfwprintf)
+#define _vsntprintf   WINE_tchar_routine(vsnprintf,       _vsnprintf,  _vsnwprintf)
+#define _vstprintf    WINE_tchar_routine(vsprintf,        vsprintf,    vswprintf)
+#define _vtprintf     WINE_tchar_routine(vprintf,         vprintf,     vwprintf)
+#define _TEOF         WINE_tchar_routine(EOF,             EOF,         WEOF)
+
+#define __T(x) __TEXT(x)
+#define _T(x) __T(x)
+#define _TEXT(x) __T(x)
+
+#ifdef _UNICODE
+#if !defined(_WINT_T_DEFINED) && !defined(__WINT_TYPE__)
+typedef unsigned short wint_t;
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+typedef unsigned short wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+#ifndef __TCHAR_DEFINED
+#ifdef WINE_UNICODE_NATIVE
+typedef wchar_t       _TCHAR;
+#else
+typedef unsigned short _TCHAR;
+#endif
+typedef _TCHAR        _TUCHAR;
+typedef _TCHAR        _TSCHAR;
+typedef _TCHAR        _TXCHAR;
+typedef _TCHAR        _TINT;
+#define __TCHAR_DEFINED
+#endif
+
+#else /* _UNICODE */
+#ifndef __TCHAR_DEFINED
+typedef char          _TCHAR;
+typedef unsigned char _TUCHAR;
+typedef signed char   _TSCHAR;
+#ifndef _MBCS
+typedef unsigned char _TXCHAR;
+typedef int           _TINT;
+#else
+typedef char          _TXCHAR;
+typedef unsigned int  _TINT;
+#endif
+#endif
+#endif
+
+#ifndef _TCHAR_DEFINED
+typedef _TCHAR        TCHAR, *PTCHAR;
+#define _TCHAR_DEFINED
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_TCHAR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h
new file mode 100644
index 0000000..74248a0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TCPMIB_H
+#define __WINE_TCPMIB_H
+
+#define TCPIP_OWNING_MODULE_SIZE 16
+
+
+/* TCP tables */
+
+typedef enum
+{
+    MIB_TCP_STATE_CLOSED = 1,
+    MIB_TCP_STATE_LISTEN = 2,
+    MIB_TCP_STATE_SYN_SENT = 3,
+    MIB_TCP_STATE_SYN_RCVD = 4,
+    MIB_TCP_STATE_ESTAB = 5,
+    MIB_TCP_STATE_FIN_WAIT1 = 6,
+    MIB_TCP_STATE_FIN_WAIT2 = 7,
+    MIB_TCP_STATE_CLOSE_WAIT = 8,
+    MIB_TCP_STATE_CLOSING = 9,
+    MIB_TCP_STATE_LAST_ACK = 10,
+    MIB_TCP_STATE_TIME_WAIT = 11,
+    MIB_TCP_STATE_DELETE_TCB = 12,
+} MIB_TCP_STATE;
+
+typedef enum
+{
+    TcpConnectionOffloadStateInHost,
+    TcpConnectionOffloadStateOffloading,
+    TcpConnectionOffloadStateOffloaded,
+    TcpConnectionOffloadStateUploading,
+    TcpConnectionOffloadStateMax,
+} TCP_CONNECTION_OFFLOAD_STATE, *PTCP_CONNECTION_OFFLOAD_STATE;
+
+typedef struct _MIB_TCPROW
+{
+    union
+    {
+        DWORD         dwState;
+        MIB_TCP_STATE State;
+    } DUMMYUNIONNAME;
+    DWORD dwLocalAddr;
+    DWORD dwLocalPort;
+    DWORD dwRemoteAddr;
+    DWORD dwRemotePort;
+} MIB_TCPROW, *PMIB_TCPROW;
+
+typedef struct _MIB_TCPTABLE
+{
+    DWORD      dwNumEntries;
+    MIB_TCPROW table[1];
+} MIB_TCPTABLE, *PMIB_TCPTABLE;
+
+typedef struct _MIB_TCP6ROW {
+    MIB_TCP_STATE State;
+    IN6_ADDR LocalAddr;
+    DWORD dwLocalScopeId;
+    DWORD dwLocalPort;
+    IN6_ADDR RemoteAddr;
+    DWORD dwRemoteScopeId;
+    DWORD dwRemotePort;
+} MIB_TCP6ROW, *PMIB_TCP6ROW;
+
+typedef struct _MIB_TCP6TABLE {
+    DWORD dwNumEntries;
+    MIB_TCP6ROW table[1];
+} MIB_TCP6TABLE, *PMIB_TCP6TABLE;
+
+typedef struct _MIB_TCP6ROW2 {
+    IN6_ADDR LocalAddr;
+    DWORD dwLocalScopeId;
+    DWORD dwLocalPort;
+    IN6_ADDR RemoteAddr;
+    DWORD dwRemoteScopeId;
+    DWORD dwRemotePort;
+    MIB_TCP_STATE State;
+    DWORD dwOwningPid;
+    TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
+} MIB_TCP6ROW2, *PMIB_TCP6ROW2;
+
+typedef struct _MIB_TCP6TABLE2 {
+    DWORD dwNumEntries;
+    MIB_TCP6ROW2 table[1];
+} MIB_TCP6TABLE2, *PMIB_TCP6TABLE2;
+
+typedef struct _MIB_TCPROW_OWNER_PID
+{
+    DWORD dwState;
+    DWORD dwLocalAddr;
+    DWORD dwLocalPort;
+    DWORD dwRemoteAddr;
+    DWORD dwRemotePort;
+    DWORD dwOwningPid;
+} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
+
+typedef struct _MIB_TCPTABLE_OWNER_PID
+{
+    DWORD                dwNumEntries;
+    MIB_TCPROW_OWNER_PID table[1];
+} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
+
+typedef struct _MIB_TCPROW_OWNER_MODULE
+{
+    DWORD         dwState;
+    DWORD         dwLocalAddr;
+    DWORD         dwLocalPort;
+    DWORD         dwRemoteAddr;
+    DWORD         dwRemotePort;
+    DWORD         dwOwningPid;
+    LARGE_INTEGER liCreateTimestamp;
+    ULONGLONG     OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
+} MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE;
+
+typedef struct _MIB_TCPTABLE_OWNER_MODULE
+{
+    DWORD                   dwNumEntries;
+    MIB_TCPROW_OWNER_MODULE table[1];
+} MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE;
+
+typedef struct _MIB_TCPROW2
+{
+    DWORD dwState;
+    DWORD dwLocalAddr;
+    DWORD dwLocalPort;
+    DWORD dwRemoteAddr;
+    DWORD dwRemotePort;
+    DWORD dwOwningPid;
+    TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
+} MIB_TCPROW2, *PMIB_TCPROW2;
+
+typedef struct _MIB_TCPTABLE2
+{
+    DWORD       dwNumEntries;
+    MIB_TCPROW2 table[1];
+} MIB_TCPTABLE2, *PMIB_TCPTABLE2;
+
+
+/* TCP stats */
+
+typedef enum
+{
+    TcpRtoAlgorithmOther = 0,
+    TcpRtoAlgorithmConstant = 1,
+    TcpRtoAlgorithmRsre = 2,
+    TcpRtoAlgorithmVanj = 3,
+
+    MIB_TCP_RTO_OTHER = 1,
+    MIB_TCP_RTO_CONSTANT = 2,
+    MIB_TCP_RTO_RSRE = 3,
+    MIB_TCP_RTO_VANJ = 4,
+} TCP_RTO_ALGORITHM, *PTCP_RTO_ALGORITHM;
+
+typedef struct _MIB_TCPSTATS
+{
+    union
+    {
+        DWORD             dwRtoAlgorithm;
+        TCP_RTO_ALGORITHM RtoAlgorithm;
+    } DUMMYUNIONNAME;
+    DWORD dwRtoMin;
+    DWORD dwRtoMax;
+    DWORD dwMaxConn;
+    DWORD dwActiveOpens;
+    DWORD dwPassiveOpens;
+    DWORD dwAttemptFails;
+    DWORD dwEstabResets;
+    DWORD dwCurrEstab;
+    DWORD dwInSegs;
+    DWORD dwOutSegs;
+    DWORD dwRetransSegs;
+    DWORD dwInErrs;
+    DWORD dwOutRsts;
+    DWORD dwNumConns;
+} MIB_TCPSTATS, *PMIB_TCPSTATS;
+
+#endif /* __WINE_TCPMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h
new file mode 100644
index 0000000..bda0375
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h
@@ -0,0 +1,378 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _TEXTSERV_H
+#define _TEXTSERV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EXTERN_C const IID IID_ITextServices;
+EXTERN_C const IID IID_ITextHost;
+
+/*****************************************************************************
+ * ITextServices interface
+ */
+#define INTERFACE ITextServices
+DECLARE_INTERFACE_(ITextServices,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_
+        REFIID riid,
+        void** ppvObject) PURE;
+
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+    /*** ITextServices methods ***/
+
+    STDMETHOD(TxSendMessage)( THIS_
+        UINT msg, WPARAM wparam, LPARAM lparam, LRESULT* plresult) PURE;
+
+    STDMETHOD(TxDraw)( THIS_
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void* pvAspect,
+        DVTARGETDEVICE* ptd,
+        HDC hdcDraw,
+        HDC hicTargetDev,
+        LPCRECTL lprcBounds,
+        LPCRECTL lprcWBounds,
+        LPRECT lprcUpdate,
+        BOOL (CALLBACK * pfnContinue)(DWORD),
+        DWORD dwContinue,
+        LONG lViewId) PURE;
+
+    STDMETHOD(TxGetHScroll)( THIS_
+        LONG* plMin,
+        LONG* plMax,
+        LONG* plPos,
+        LONG* plPage,
+        BOOL* pfEnabled) PURE;
+
+    STDMETHOD(TxGetVScroll)( THIS_
+        LONG* plMin,
+        LONG* plMax,
+        LONG* plPos,
+        LONG* plPage,
+        BOOL* pfEnabled) PURE;
+
+    STDMETHOD(OnTxSetCursor)( THIS_
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void* pvAspect,
+        DVTARGETDEVICE* ptd,
+        HDC hdcDraw,
+        HDC hicTargetDev,
+        LPCRECT lprcClient,
+        INT x,
+        INT y) PURE;
+
+    STDMETHOD(TxQueryHitPoint)( THIS_
+        DWORD dwDrawAspect,
+        LONG lindex,
+        void* pvAspect,
+        DVTARGETDEVICE* ptd,
+        HDC hdcDraw,
+        HDC hicTargetDev,
+        LPCRECT lprcClient,
+        INT x,
+        INT y,
+        DWORD* pHitResult) PURE;
+
+    STDMETHOD(OnTxInplaceActivate)( THIS_
+        LPCRECT prcClient) PURE;
+
+    STDMETHOD(OnTxInplaceDeactivate)( THIS ) PURE;
+
+    STDMETHOD(OnTxUIActivate)( THIS ) PURE;
+
+    STDMETHOD(OnTxUIDeactivate)( THIS ) PURE;
+
+    STDMETHOD(TxGetText)( THIS_
+        BSTR* pbstrText) PURE;
+
+    STDMETHOD(TxSetText)( THIS_
+        LPCWSTR pszText) PURE;
+
+    STDMETHOD(TxGetCurrentTargetX)( THIS_
+        LONG* x) PURE;
+
+    STDMETHOD(TxGetBaseLinePos)( THIS_
+        LONG* x) PURE;
+
+    STDMETHOD(TxGetNaturalSize)( THIS_
+        DWORD dwAspect,
+        HDC hdcDraw,
+        HDC hicTargetDev,
+        DVTARGETDEVICE* ptd,
+        DWORD dwMode,
+        const SIZEL* psizelExtent,
+        LONG* pwidth,
+        LONG* pheight) PURE;
+
+    STDMETHOD(TxGetDropTarget)( THIS_
+        IDropTarget** ppDropTarget) PURE;
+
+    STDMETHOD(OnTxPropertyBitsChange)( THIS_
+        DWORD dwMask,
+        DWORD dwBits) PURE;
+
+    STDMETHOD(TxGetCachedSize)( THIS_
+        DWORD* pdwWidth,
+        DWORD* pdwHeight) PURE;
+
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITextServices_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITextServices_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITextServices_Release(p) (p)->lpVtbl->Release(p)
+#endif
+
+typedef enum _TXTBACKSTYLE {
+    TXTBACK_TRANSPARENT = 0,
+    TXTBACK_OPAQUE
+} TXTBACKSTYLE;
+
+enum TXTHITRESULT {
+    TXTHITRESULT_NOHIT = 0,
+    TXTHITRESULT_TRANSPARENT = 1,
+    TXTHITRESULT_CLOSE = 2,
+    TXTHITRESULT_HIT = 3
+};
+
+enum TXTNATURALSIZE {
+    TXTNS_FITTOCONTENT = 1,
+    TXTNS_ROUNDTOLINE = 2
+};
+
+enum TXTVIEW {
+    TXTVIEW_ACTIVE = 0,
+    TXTVIEW_INACTIVE = 1
+};
+
+#define TXTBIT_RICHTEXT         0x000001
+#define TXTBIT_MULTILINE        0x000002
+#define TXTBIT_READONLY         0x000004
+#define TXTBIT_SHOWACCELERATOR  0x000008
+#define TXTBIT_USEPASSWORD      0x000010
+#define TXTBIT_HIDESELECTION    0x000020
+#define TXTBIT_SAVESELECTION    0x000040
+#define TXTBIT_AUTOWORDSEL      0x000080
+#define TXTBIT_VERTICAL         0x000100
+#define TXTBIT_SELBARCHANGE     0x000200
+#define TXTBIT_WORDWRAP         0x000400
+#define TXTBIT_ALLOWBEEP        0x000800
+#define TXTBIT_DISABLEDRAG      0x001000
+#define TXTBIT_VIEWINSETCHANGE  0x002000
+#define TXTBIT_BACKSTYLECHANGE  0x004000
+#define TXTBIT_MAXLENGTHCHANGE  0x008000
+#define TXTBIT_SCROLLBARCHANGE  0x010000
+#define TXTBIT_CHARFORMATCHANGE 0x020000
+#define TXTBIT_PARAFORMATCHANGE 0x040000
+#define TXTBIT_EXTENTCHANGE     0x080000
+#define TXTBIT_CLIENTRECTCHANGE 0x100000
+#define TXTBIT_USECURRENTBKG    0x200000
+
+/*****************************************************************************
+ * ITextHost interface
+ */
+#define INTERFACE ITextHost
+DECLARE_INTERFACE_(ITextHost,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD(QueryInterface)(THIS_
+        REFIID riid,
+        void** ppvObject) PURE;
+
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+    /*** ITextHost methods ***/
+    STDMETHOD_(HDC,TxGetDC)( THIS
+        ) PURE;
+
+    STDMETHOD_(INT,TxReleaseDC)( THIS_
+        HDC hdc) PURE;
+
+    STDMETHOD_(BOOL,TxShowScrollBar)( THIS_
+        INT fnBar,
+        BOOL fShow) PURE;
+
+    STDMETHOD_(BOOL,TxEnableScrollBar)( THIS_
+        INT fuSBFlags,
+        INT fuArrowflags) PURE;
+
+    STDMETHOD_(BOOL,TxSetScrollRange)( THIS_
+        INT fnBar,
+        LONG nMinPos,
+        INT nMaxPos,
+        BOOL fRedraw) PURE;
+
+    STDMETHOD_(BOOL,TxSetScrollPos)( THIS_
+        INT fnBar,
+        INT nPos,
+        BOOL fRedraw) PURE;
+
+    STDMETHOD_(void,TxInvalidateRect)( THIS_
+        LPCRECT prc,
+        BOOL fMode) PURE;
+
+    STDMETHOD_(void,TxViewChange)( THIS_
+        BOOL fUpdate) PURE;
+
+    STDMETHOD_(BOOL,TxCreateCaret)( THIS_
+        HBITMAP hbmp,
+        INT xWidth,
+        INT yHeight) PURE;
+
+    STDMETHOD_(BOOL,TxShowCaret)( THIS_
+        BOOL fShow) PURE;
+
+    STDMETHOD_(BOOL,TxSetCaretPos)( THIS_
+        INT x,
+        INT y) PURE;
+
+    STDMETHOD_(BOOL,TxSetTimer)( THIS_
+        UINT idTimer,
+        UINT uTimeout) PURE;
+
+    STDMETHOD_(void,TxKillTimer)( THIS_
+        UINT idTimer) PURE;
+
+    STDMETHOD_(void,TxScrollWindowEx)( THIS_
+        INT dx,
+        INT dy,
+        LPCRECT lprcScroll,
+        LPCRECT lprcClip,
+        HRGN hRgnUpdate,
+        LPRECT lprcUpdate,
+        UINT fuScroll) PURE;
+
+    STDMETHOD_(void,TxSetCapture)( THIS_
+        BOOL fCapture) PURE;
+
+    STDMETHOD_(void,TxSetFocus)( THIS
+        ) PURE;
+
+    STDMETHOD_(void,TxSetCursor)( THIS_
+        HCURSOR hcur,
+        BOOL fText) PURE;
+
+    STDMETHOD_(BOOL,TxScreenToClient)( THIS_
+        LPPOINT lppt) PURE;
+
+    STDMETHOD_(BOOL,TxClientToScreen)( THIS_
+        LPPOINT lppt) PURE;
+
+    STDMETHOD(TxActivate)( THIS_
+        LONG* plOldState) PURE;
+
+    STDMETHOD(TxDeactivate)( THIS_
+        LONG lNewState) PURE;
+
+    STDMETHOD(TxGetClientRect)( THIS_
+        LPRECT prc) PURE;
+
+    STDMETHOD(TxGetViewInset)( THIS_
+        LPRECT prc) PURE;
+
+    STDMETHOD(TxGetCharFormat)( THIS_
+        const CHARFORMATW** ppCF) PURE;
+
+    STDMETHOD(TxGetParaFormat)( THIS_
+        const PARAFORMAT** ppPF) PURE;
+
+    STDMETHOD_(COLORREF,TxGetSysColor)( THIS_
+        int nIndex) PURE;
+
+    STDMETHOD(TxGetBackStyle)( THIS_
+        TXTBACKSTYLE* pStyle) PURE;
+
+    STDMETHOD(TxGetMaxLength)( THIS_
+        DWORD* plength) PURE;
+
+    STDMETHOD(TxGetScrollBars)( THIS_
+        DWORD* pdwScrollBar) PURE;
+
+    STDMETHOD(TxGetPasswordChar)( THIS_
+        WCHAR* pch) PURE;
+
+    STDMETHOD(TxGetAcceleratorPos)( THIS_
+        LONG* pch) PURE;
+
+    STDMETHOD(TxGetExtent)( THIS_
+        LPSIZEL lpExtent) PURE;
+
+    STDMETHOD(OnTxCharFormatChange)( THIS_
+        const CHARFORMATW* pcf) PURE;
+
+    STDMETHOD(OnTxParaFormatChange)( THIS_
+        const PARAFORMAT* ppf) PURE;
+
+    STDMETHOD(TxGetPropertyBits)( THIS_
+        DWORD dwMask,
+        DWORD* pdwBits) PURE;
+
+    STDMETHOD(TxNotify)( THIS_
+        DWORD iNotify,
+        void* pv) PURE;
+
+    STDMETHOD_(HIMC,TxImmGetContext)( THIS
+        ) PURE;
+
+    STDMETHOD_(void,TxImmReleaseContext)( THIS_
+        HIMC himc) PURE;
+
+    STDMETHOD(TxGetSelectionBarWidth)( THIS_
+        LONG* lSelBarWidth) PURE;
+
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITextHost_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITextHost_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITextHost_Release(p) (p)->lpVtbl->Release(p)
+#endif
+
+HRESULT WINAPI CreateTextServices(IUnknown*,ITextHost*,IUnknown**);
+
+typedef HRESULT (WINAPI *PCreateTextServices)(IUnknown*,ITextHost*,IUnknown**);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TEXTSERV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl
new file mode 100644
index 0000000..dc203cb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2009 Aric Stewart, 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+#endif
+
+cpp_quote("#define TS_E_INVALIDPOS      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)")
+cpp_quote("#define TS_E_NOLOCK          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
+cpp_quote("#define TS_E_NOOBJECT        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)")
+cpp_quote("#define TS_E_NOSERVICE       MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)")
+cpp_quote("#define TS_E_NOINTERFACE     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)")
+cpp_quote("#define TS_E_NOSELECTION     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)")
+cpp_quote("#define TS_E_NOLAYOUT        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)")
+cpp_quote("#define TS_E_INVALIDPOINT    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)")
+cpp_quote("#define TS_E_SYNCHRONOUS     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)")
+cpp_quote("#define TS_E_READONLY        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)")
+cpp_quote("#define TS_E_FORMAT          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020a)")
+
+cpp_quote("#define TS_S_ASYNC           MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)")
+
+
+const ULONG TS_DEFAULT_SELECTION = ~0u;
+
+const DWORD TS_SD_READONLY     = 0x001;
+const DWORD TS_SD_LOADING      = 0x002;
+
+const DWORD TS_SS_DISJOINTSEL  = 0x001;
+const DWORD TS_SS_REGIONS      = 0x002;
+const DWORD TS_SS_TRANSITORY   = 0x004;
+const DWORD TS_SS_NOHIDDENTEXT = 0x008;
+
+const DWORD TS_AS_TEXT_CHANGE      = 0x01;
+const DWORD TS_AS_SEL_CHANGE       = 0x02;
+const DWORD TS_AS_LAYOUT_CHANGE    = 0x04;
+const DWORD TS_AS_ATTR_CHANGE      = 0x08;
+const DWORD TS_AS_STATUS_CHANGE    = 0x10;
+
+const DWORD TS_AS_ALL_SINKS = (TS_AS_TEXT_CHANGE | TS_AS_SEL_CHANGE | TS_AS_LAYOUT_CHANGE | TS_AS_ATTR_CHANGE | TS_AS_STATUS_CHANGE);
+
+const DWORD TS_LF_SYNC            = 0x1;
+const DWORD TS_LF_READ            = 0x2;
+const DWORD TS_LF_READWRITE       = 0x6;
+
+const WCHAR TS_CHAR_EMBEDDED     = 0xfffc;
+const WCHAR TS_CHAR_REGION       = 0x0000;
+const WCHAR TS_CHAR_REPLACEMENT  = 0xfffd;
+
+const DWORD TS_IAS_NOQUERY    = 0x1;
+const DWORD TS_IAS_QUERYONLY  = 0x2;
+
+const DWORD TS_ST_CORRECTION = 0x1;
+
+typedef [uuid(05fcf85b-5e9c-4c3e-ab71-29471d4f38e7)]  enum { TS_AE_NONE, TS_AE_START, TS_AE_END } TsActiveSelEnd;
+typedef [uuid(033b0df0-f193-4170-b47b-141afc247878)]  enum { TS_RT_PLAIN, TS_RT_HIDDEN, TS_RT_OPAQUE } TsRunType;
+typedef [uuid(ef3457d9-8446-49a7-a9e6-b50d9d5f3fd9)]  GUID TS_ATTRID;
+
+typedef [uuid(fec4f516-c503-45b1-a5fd-7a3d8ab07049)] struct TS_STATUS
+{
+    DWORD dwDynamicFlags;
+    DWORD dwStaticFlags;
+} TS_STATUS;
+
+typedef [uuid(f3181bd6-bcf0-41d3-a81c-474b17ec38fb)]  struct TS_TEXTCHANGE
+{
+    LONG acpStart;
+    LONG acpOldEnd;
+    LONG acpNewEnd;
+} TS_TEXTCHANGE;
+
+typedef [uuid(7ecc3ffa-8f73-4d91-98ed-76f8ac5b1600)]  struct TS_SELECTIONSTYLE
+{
+    TsActiveSelEnd ase;
+    BOOL fInterimChar;
+} TS_SELECTIONSTYLE;
+
+typedef [uuid(c4b9c33b-8a0d-4426-bebe-d444a4701fe9)]  struct TS_SELECTION_ACP
+{
+    LONG acpStart;
+    LONG acpEnd;
+    TS_SELECTIONSTYLE style;
+} TS_SELECTION_ACP;
+
+typedef [uuid(a6231949-37c5-4b74-a24e-2a26c327201d)]  struct TS_RUNINFO
+{
+    ULONG uCount;
+    TsRunType type;
+} TS_RUNINFO;
+
+typedef [uuid(2cc2b33f-1174-4507-b8d9-5bc0eb37c197)]  struct TS_ATTRVAL
+{
+    TS_ATTRID idAttr;
+    DWORD dwOverlapId;
+    VARIANT varValue;
+} TS_ATTRVAL;
+
+const DWORD TS_ATTR_FIND_BACKWARDS    = 0x0001;
+const DWORD TS_ATTR_FIND_WANT_OFFSET  = 0x0002;
+const DWORD TS_ATTR_FIND_UPDATESTART  = 0x0004;
+const DWORD TS_ATTR_FIND_WANT_VALUE   = 0x0008;
+const DWORD TS_ATTR_FIND_WANT_END     = 0x0010;
+const DWORD TS_ATTR_FIND_HIDDEN       = 0x0020;
+
+typedef [uuid(7899d7c4-5f07-493c-a89a-fac8e777f476)]  enum { TS_LC_CREATE, TS_LC_CHANGE, TS_LC_DESTROY } TsLayoutCode;
+typedef [uuid(1faf509e-44c1-458e-950a-38a96705a62b)]  DWORD TsViewCookie;
+
+[
+  object,
+  uuid(22d44c94-a419-4542-a272-ae26093ececf),
+  pointer_default(unique)
+]
+interface ITextStoreACPSink : IUnknown
+{
+    HRESULT OnTextChange(
+        [in] DWORD dwFlags,
+        [in] const TS_TEXTCHANGE *pChange);
+
+    HRESULT OnSelectionChange();
+
+    HRESULT OnLayoutChange(
+        [in] TsLayoutCode lcode,
+        [in] TsViewCookie vcView);
+
+    HRESULT OnStatusChange(
+        [in] DWORD dwFlags);
+
+    HRESULT OnAttrsChange(
+        [in] LONG acpStart,
+        [in] LONG acpEnd,
+        [in] ULONG cAttrs,
+        [in, size_is(cAttrs)] const TS_ATTRID *paAttrs);
+
+    HRESULT OnLockGranted(
+        [in] DWORD dwLockFlags);
+
+    HRESULT OnStartEditTransaction();
+
+    HRESULT OnEndEditTransaction();
+};
+
+[
+  object,
+  uuid(28888fe3-c2a0-483a-a3ea-8cb1ce51ff3d),
+  pointer_default(unique)
+]
+interface ITextStoreACP : IUnknown
+{
+    HRESULT AdviseSink(
+        [in] REFIID riid,
+        [in, iid_is(riid)] IUnknown *punk,
+        [in] DWORD dwMask);
+
+    HRESULT UnadviseSink(
+        [in] IUnknown *punk);
+
+    HRESULT RequestLock(
+        [in] DWORD dwLockFlags,
+        [out] HRESULT *phrSession);
+
+    HRESULT GetStatus(
+        [out] TS_STATUS *pdcs);
+
+    HRESULT QueryInsert(
+        [in] LONG acpTestStart,
+        [in] LONG acpTestEnd,
+        [in] ULONG cch,
+        [out] LONG *pacpResultStart,
+        [out] LONG *pacpResultEnd);
+
+    HRESULT GetSelection(
+        [in] ULONG ulIndex,
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetched)] TS_SELECTION_ACP *pSelection,
+        [out] ULONG *pcFetched);
+
+    HRESULT SetSelection(
+        [in] ULONG ulCount,
+        [in, size_is(ulCount)] const TS_SELECTION_ACP *pSelection);
+
+    HRESULT GetText(
+        [in] LONG acpStart,
+        [in] LONG acpEnd,
+        [out, size_is(cchPlainReq), length_is(*pcchPlainRet)] WCHAR *pchPlain,
+        [in] ULONG cchPlainReq,
+        [out] ULONG *pcchPlainRet,
+        [out, size_is(cRunInfoReq), length_is(*pcRunInfoRet)] TS_RUNINFO *prgRunInfo,
+        [in] ULONG cRunInfoReq,
+        [out] ULONG *pcRunInfoRet,
+        [out] LONG *pacpNext);
+
+    HRESULT SetText(
+        [in] DWORD dwFlags,
+        [in] LONG acpStart,
+        [in] LONG acpEnd,
+        [in, size_is(cch)] const WCHAR *pchText,
+        [in] ULONG cch,
+        [out] TS_TEXTCHANGE *pChange);
+
+    HRESULT GetFormattedText(
+        [in] LONG acpStart,
+        [in] LONG acpEnd,
+        [out] IDataObject **ppDataObject);
+
+    HRESULT GetEmbedded(
+        [in] LONG acpPos,
+        [in] REFGUID rguidService,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown **ppunk);
+
+    HRESULT QueryInsertEmbedded(
+        [in] const GUID *pguidService,
+        [in] const FORMATETC *pFormatEtc,
+        [out] BOOL *pfInsertable);
+
+    HRESULT InsertEmbedded(
+        [in] DWORD dwFlags,
+        [in] LONG acpStart,
+        [in] LONG acpEnd,
+        [in] IDataObject *pDataObject,
+        [out] TS_TEXTCHANGE *pChange);
+
+
+    HRESULT InsertTextAtSelection(
+        [in] DWORD dwFlags,
+        [in, size_is(cch)] const WCHAR *pchText,
+        [in] ULONG cch,
+        [out] LONG *pacpStart,
+        [out] LONG *pacpEnd,
+        [out] TS_TEXTCHANGE *pChange);
+
+    HRESULT InsertEmbeddedAtSelection(
+        [in] DWORD dwFlags,
+        [in] IDataObject *pDataObject,
+        [out] LONG *pacpStart,
+        [out] LONG *pacpEnd,
+        [out] TS_TEXTCHANGE *pChange);
+
+    HRESULT RequestSupportedAttrs(
+        [in] DWORD dwFlags,
+        [in] ULONG cFilterAttrs,
+        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs);
+
+    HRESULT RequestAttrsAtPosition(
+        [in] LONG acpPos,
+        [in] ULONG cFilterAttrs,
+        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,
+        [in] DWORD dwFlags);
+
+    HRESULT RequestAttrsTransitioningAtPosition(
+        [in] LONG acpPos,
+        [in] ULONG cFilterAttrs,
+        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,
+        [in] DWORD dwFlags);
+
+    HRESULT FindNextAttrTransition(
+        [in] LONG acpStart,
+        [in] LONG acpHalt,
+        [in] ULONG cFilterAttrs,
+        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,
+        [in] DWORD dwFlags,
+        [out] LONG *pacpNext,
+        [out] BOOL *pfFound,
+        [out] LONG *plFoundOffset);
+
+    HRESULT RetrieveRequestedAttrs(
+        [in] ULONG ulCount,
+        [out, size_is(ulCount), length_is(*pcFetched)] TS_ATTRVAL *paAttrVals,
+        [out] ULONG *pcFetched);
+
+    HRESULT GetEndACP(
+        [out] LONG *pacp);
+
+    HRESULT GetActiveView(
+        [out] TsViewCookie *pvcView);
+
+    HRESULT GetACPFromPoint(
+        [in] TsViewCookie vcView,
+        [in] const POINT *ptScreen,
+        [in] DWORD dwFlags,
+        [out] LONG *pacp);
+
+    HRESULT GetTextExt(
+        [in] TsViewCookie vcView,
+        [in] LONG acpStart,
+        [in] LONG acpEnd,
+        [out] RECT *prc,
+        [out] BOOL *pfClipped);
+
+    HRESULT GetScreenExt(
+        [in] TsViewCookie vcView,
+        [out] RECT *prc);
+
+    HRESULT GetWnd(
+        [in] TsViewCookie vcView,
+        [out] HWND *phwnd);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h
new file mode 100644
index 0000000..2002c29
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 1998 Patrick Spinler
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TLHELP32_H
+#define __WINE_TLHELP32_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * CreateToolhelp32Snapshot
+ */
+
+#define TH32CS_SNAPHEAPLIST 0x00000001
+#define TH32CS_SNAPPROCESS  0x00000002
+#define TH32CS_SNAPTHREAD   0x00000004
+#define TH32CS_SNAPMODULE   0x00000008
+#define TH32CS_SNAPALL     (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
+#define TH32CS_INHERIT     0x80000000
+
+HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);
+
+/*
+ * thread entry list as created by CreateToolHelp32Snapshot
+ */
+
+typedef struct tagTHREADENTRY32
+{
+    DWORD dwSize;
+    DWORD cntUsage;
+    DWORD th32ThreadID;
+    DWORD th32OwnerProcessID;
+    LONG  tpBasePri;
+    LONG  tpDeltaPri;
+    DWORD dwFlags;
+} THREADENTRY32, *PTHREADENTRY32, *LPTHREADENTRY32;
+
+BOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32);
+BOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32);
+
+/*
+ * Process entry list as created by CreateToolHelp32Snapshot
+ */
+
+typedef struct tagPROCESSENTRY32
+{
+    DWORD     dwSize;
+    DWORD     cntUsage;
+    DWORD     th32ProcessID;
+    ULONG_PTR th32DefaultHeapID;
+    DWORD     th32ModuleID;
+    DWORD     cntThreads;
+    DWORD     th32ParentProcessID;
+    LONG      pcPriClassBase;
+    DWORD     dwFlags;
+    char      szExeFile[MAX_PATH];
+} PROCESSENTRY32, *PPROCESSENTRY32, *LPPROCESSENTRY32;
+
+typedef struct tagPROCESSENTRY32W
+{
+    DWORD     dwSize;
+    DWORD     cntUsage;
+    DWORD     th32ProcessID;
+    ULONG_PTR th32DefaultHeapID;
+    DWORD     th32ModuleID;
+    DWORD     cntThreads;
+    DWORD     th32ParentProcessID;
+    LONG      pcPriClassBase;
+    DWORD     dwFlags;
+    WCHAR     szExeFile[MAX_PATH];
+} PROCESSENTRY32W, *PPROCESSENTRY32W, *LPPROCESSENTRY32W;
+
+BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32);
+BOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W);
+BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32);
+BOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W);
+
+#ifdef UNICODE
+#define Process32First Process32FirstW
+#define Process32Next Process32NextW
+#define PROCESSENTRY32 PROCESSENTRY32W
+#define PPROCESSENTRY32 PPROCESSENTRY32W
+#define LPPROCESSENTRY32 LPPROCESSENTRY32W
+#endif
+
+/*
+ * Module entry list as created by CreateToolHelp32Snapshot
+ */
+
+#define MAX_MODULE_NAME32 255
+
+typedef struct tagMODULEENTRY32
+{
+    DWORD  dwSize;
+    DWORD  th32ModuleID;
+    DWORD  th32ProcessID;
+    DWORD  GlblcntUsage;
+    DWORD  ProccntUsage;
+    BYTE  *modBaseAddr;
+    DWORD  modBaseSize;
+    HMODULE hModule;
+    char   szModule[MAX_MODULE_NAME32 + 1];
+    char   szExePath[MAX_PATH];
+} MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32;
+
+typedef struct tagMODULEENTRY32W
+{
+    DWORD  dwSize;
+    DWORD  th32ModuleID;
+    DWORD  th32ProcessID;
+    DWORD  GlblcntUsage;
+    DWORD  ProccntUsage;
+    BYTE  *modBaseAddr;
+    DWORD  modBaseSize;
+    HMODULE hModule;
+    WCHAR  szModule[MAX_MODULE_NAME32 + 1];
+    WCHAR  szExePath[MAX_PATH];
+} MODULEENTRY32W, *PMODULEENTRY32W, *LPMODULEENTRY32W;
+
+BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W);
+BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W);
+
+#ifdef UNICODE
+#define Module32First Module32FirstW
+#define Module32Next Module32NextW
+#define MODULEENTRY32 MODULEENTRY32W
+#define PMODULEENTRY32 PMODULEENTRY32W
+#define LPMODULEENTRY32 LPMODULEENTRY32W
+#endif
+
+typedef struct tagHEAPLIST32
+{
+    SIZE_T dwSize;
+    DWORD th32ProcessID;
+    ULONG_PTR th32HeapID;
+    DWORD dwFlags;
+} HEAPLIST32, *PHEAPLIST32, *LPHEAPLIST32;
+
+#define HF32_DEFAULT 1
+#define HF32_SHARED  2
+
+BOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32);
+BOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32);
+BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,SIZE_T,SIZE_T*);
+
+typedef struct tagHEAPENTRY32
+{
+    SIZE_T dwSize;
+    HANDLE hHandle;
+    ULONG_PTR dwAddress;
+    SIZE_T dwBlockSize;
+    DWORD dwFlags;
+    DWORD dwLockCount;
+    DWORD dwResvd;
+    DWORD th32ProcessID;
+    ULONG_PTR th32HeapID;
+} HEAPENTRY32, *PHEAPENTRY32, *LPHEAPENTRY32;
+
+BOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,ULONG_PTR);
+BOOL WINAPI Heap32Next(LPHEAPENTRY32);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_TLHELP32_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl
new file mode 100644
index 0000000..228d6f3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2012 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "shtypes.idl";
+
+typedef struct _WINDOWDATA {
+    DWORD dwWindowID;
+    UINT uiCP;
+    PIDLIST_ABSOLUTE pidl;
+    [string] LPWSTR lpszUrl;
+    [string] LPWSTR lpszUrlLocation;
+    [string] LPWSTR lpszTitle;
+} WINDOWDATA;
+
+typedef WINDOWDATA *LPWINDOWDATA;
+typedef const WINDOWDATA *LPCWINDOWDATA;
+
+[
+    uuid(241c033e-e659-43da-aa4d-4086dbc4758d),
+    object
+]
+interface ITravelLogClient : IUnknown
+{
+    HRESULT FindWindowByIndex(
+            [in] DWORD dwID,
+            [out] IUnknown **ppunk);
+
+    HRESULT GetWindowData(
+            [in] IStream *pStream,
+            [out] LPWINDOWDATA pWinData);
+
+    HRESULT LoadHistoryPosition(
+            [in] LPWSTR pszUrlLocation,
+            [in] DWORD dwPosition);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h
new file mode 100644
index 0000000..2fb47b6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h
@@ -0,0 +1,1279 @@
+/*
+ * Copyright (C) 2003 Kevin Koltzau
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TMSCHEMA_H
+#define __WINE_TMSCHEMA_H
+
+#include <schemadef.h>
+
+BEGIN_TM_SCHEMA(ThemeMgrSchema)
+
+
+/***** ENUMERATIONS *****/
+
+/* BGTYPE Enum */
+BEGIN_TM_ENUM(BGTYPE)
+    TM_ENUM(0, BT, IMAGEFILE)
+    TM_ENUM(1, BT, BORDERFILL)
+    TM_ENUM(2, BT, NONE)
+END_TM_ENUM()
+
+/* IMAGELAYOUT Enum */
+BEGIN_TM_ENUM(IMAGELAYOUT)
+    TM_ENUM(0, IL, VERTICAL)
+    TM_ENUM(1, IL, HORIZONTAL)
+END_TM_ENUM()
+
+/* BORDERTYPE Enum */
+BEGIN_TM_ENUM(BORDERTYPE)
+    TM_ENUM(0, BT, RECT)
+    TM_ENUM(1, BT, ROUNDRECT)
+    TM_ENUM(2, BT, ELLIPSE)
+END_TM_ENUM()
+
+/* FILLTYPE Enum */
+BEGIN_TM_ENUM(FILLTYPE)
+    TM_ENUM(0, FT, SOLID)
+    TM_ENUM(1, FT, VERTGRADIENT)
+    TM_ENUM(2, FT, HORZGRADIENT)
+    TM_ENUM(3, FT, RADIALGRADIENT)
+    TM_ENUM(4, FT, TILEIMAGE)
+END_TM_ENUM()
+
+/* SIZINGTYPE Enum */
+BEGIN_TM_ENUM(SIZINGTYPE)
+    TM_ENUM(0, ST, TRUESIZE)
+    TM_ENUM(1, ST, STRETCH)
+    TM_ENUM(2, ST, TILE)
+END_TM_ENUM()
+
+/* HALIGN Enum */
+BEGIN_TM_ENUM(HALIGN)
+    TM_ENUM(0, HA, LEFT)
+    TM_ENUM(1, HA, CENTER)
+    TM_ENUM(2, HA, RIGHT)
+END_TM_ENUM()
+
+/* CONTENTALIGNMENT Enum */
+BEGIN_TM_ENUM(CONTENTALIGNMENT)
+    TM_ENUM(0, CA, LEFT)
+    TM_ENUM(1, CA, CENTER)
+    TM_ENUM(2, CA, RIGHT)
+END_TM_ENUM()
+
+/* VALIGN Enum */
+BEGIN_TM_ENUM(VALIGN)
+    TM_ENUM(0, VA, TOP)
+    TM_ENUM(1, VA, CENTER)
+    TM_ENUM(2, VA, BOTTOM)
+END_TM_ENUM()
+
+/* OFFSETTYPE Enum */
+BEGIN_TM_ENUM(OFFSETTYPE)
+    TM_ENUM(0, OT, TOPLEFT)
+    TM_ENUM(1, OT, TOPRIGHT)
+    TM_ENUM(2, OT, TOPMIDDLE)
+    TM_ENUM(3, OT, BOTTOMLEFT)
+    TM_ENUM(4, OT, BOTTOMRIGHT)
+    TM_ENUM(5, OT, BOTTOMMIDDLE)
+    TM_ENUM(6, OT, MIDDLELEFT)
+    TM_ENUM(7, OT, MIDDLERIGHT)
+    TM_ENUM(8, OT, LEFTOFCAPTION)
+    TM_ENUM(9, OT, RIGHTOFCAPTION)
+    TM_ENUM(10, OT, LEFTOFLASTBUTTON)
+    TM_ENUM(11, OT, RIGHTOFLASTBUTTON)
+    TM_ENUM(12, OT, ABOVELASTBUTTON)
+    TM_ENUM(13, OT, BELOWLASTBUTTON)
+END_TM_ENUM()
+
+/* ICONEFFECT Enum */
+BEGIN_TM_ENUM(ICONEFFECT)
+    TM_ENUM(0, ICE, NONE)
+    TM_ENUM(1, ICE, GLOW)
+    TM_ENUM(2, ICE, SHADOW)
+    TM_ENUM(3, ICE, PULSE)
+    TM_ENUM(4, ICE, ALPHA)
+END_TM_ENUM()
+
+/* TEXTSHADOWTYPE Enum */
+BEGIN_TM_ENUM(TEXTSHADOWTYPE)
+    TM_ENUM(0, TST, NONE)
+    TM_ENUM(1, TST, SINGLE)
+    TM_ENUM(2, TST, CONTINUOUS)
+END_TM_ENUM()
+
+/* GLYPHTYPE Enum */
+BEGIN_TM_ENUM(GLYPHTYPE)
+    TM_ENUM(0, GT, NONE)
+    TM_ENUM(1, GT, IMAGEGLYPH)
+    TM_ENUM(2, GT, FONTGLYPH)
+END_TM_ENUM()
+
+/* IMAGESELECTTYPE Enum */
+BEGIN_TM_ENUM(IMAGESELECTTYPE)
+    TM_ENUM(0, IST, NONE)
+    TM_ENUM(1, IST, SIZE)
+    TM_ENUM(2, IST, DPI)
+END_TM_ENUM()
+
+/* TRUESIZESCALINGTYPE Enum */
+BEGIN_TM_ENUM(TRUESIZESCALINGTYPE)
+    TM_ENUM(0, TSST, NONE)
+    TM_ENUM(1, TSST, SIZE)
+    TM_ENUM(2, TSST, DPI)
+END_TM_ENUM()
+
+/* GLYPHFONTSIZINGTYPE Enum */
+BEGIN_TM_ENUM(GLYPHFONTSIZINGTYPE)
+    TM_ENUM(0, GFST, NONE)
+    TM_ENUM(1, GFST, SIZE)
+    TM_ENUM(2, GFST, DPI)
+END_TM_ENUM()
+
+
+/***** PROPERTIES *****/
+BEGIN_TM_PROPS()
+
+    /* Primitive types */
+    TM_PROP(201, TMT, STRING,                     STRING)
+    TM_PROP(202, TMT, INT,                        INT)
+    TM_PROP(203, TMT, BOOL,                       BOOL)
+    TM_PROP(204, TMT, COLOR,                      COLOR)
+    TM_PROP(205, TMT, MARGINS,                    MARGINS)
+    TM_PROP(206, TMT, FILENAME,                   FILENAME)
+    TM_PROP(207, TMT, SIZE,                       SIZE)
+    TM_PROP(208, TMT, POSITION,                   POSITION)
+    TM_PROP(209, TMT, RECT,                       RECT)
+    TM_PROP(210, TMT, FONT,                       FONT)
+    TM_PROP(211, TMT, INTLIST,                    INTLIST)
+    /* we should have ENUM around here */
+
+    /* Misc properties */
+    TM_PROP(401, TMT, COLORSCHEMES,               STRING)
+    TM_PROP(402, TMT, SIZES,                      STRING)
+    TM_PROP(403, TMT, CHARSET,                    INT)
+
+    /* Documentation properties */
+    TM_PROP(601, TMT, DISPLAYNAME,                STRING)
+    TM_PROP(602, TMT, TOOLTIP,                    STRING)
+    TM_PROP(603, TMT, COMPANY,                    STRING)
+    TM_PROP(604, TMT, AUTHOR,                     STRING)
+    TM_PROP(605, TMT, COPYRIGHT,                  STRING)
+    TM_PROP(606, TMT, URL,                        STRING)
+    TM_PROP(607, TMT, VERSION,                    STRING)
+    TM_PROP(608, TMT, DESCRIPTION,                STRING)
+#   define TMT_FIRST_RCSTRING_NAME                TMT_DISPLAYNAME
+#   define TMT_LAST_RCSTRING_NAME                 TMT_DESCRIPTION
+
+    /* Font theme metric properties */
+    TM_PROP(801, TMT, CAPTIONFONT,                FONT)
+    TM_PROP(802, TMT, SMALLCAPTIONFONT,           FONT)
+    TM_PROP(803, TMT, MENUFONT,                   FONT)
+    TM_PROP(804, TMT, STATUSFONT,                 FONT)
+    TM_PROP(805, TMT, MSGBOXFONT,                 FONT)
+    TM_PROP(806, TMT, ICONTITLEFONT,              FONT)
+#   define TMT_FIRSTFONT                          TMT_CAPTIONFONT
+#   define TMT_LASTFONT                           TMT_ICONTITLEFONT
+
+    /* Bool theme metric properties */
+    TM_PROP(1001, TMT, FLATMENUS,                 BOOL)
+#   define TMT_FIRSTBOOL                          TMT_FLATMENUS
+#   define TMT_LASTBOOL                           TMT_FLATMENUS
+
+    /* Size theme metric properties */
+    TM_PROP(1201, TMT, SIZINGBORDERWIDTH,         SIZE)
+    TM_PROP(1202, TMT, SCROLLBARWIDTH,            SIZE)
+    TM_PROP(1203, TMT, SCROLLBARHEIGHT,           SIZE)
+    TM_PROP(1204, TMT, CAPTIONBARWIDTH,           SIZE)
+    TM_PROP(1205, TMT, CAPTIONBARHEIGHT,          SIZE)
+    TM_PROP(1206, TMT, SMCAPTIONBARWIDTH,         SIZE)
+    TM_PROP(1207, TMT, SMCAPTIONBARHEIGHT,        SIZE)
+    TM_PROP(1208, TMT, MENUBARWIDTH,              SIZE)
+    TM_PROP(1209, TMT, MENUBARHEIGHT,             SIZE)
+#   define TMT_FIRSTSIZE                          TMT_SIZINGBORDERWIDTH
+#   define TMT_LASTSIZE                           TMT_MENUBARHEIGHT
+
+    /* Int theme metric properties */
+    TM_PROP(1301, TMT, MINCOLORDEPTH,             INT)
+#   define TMT_FIRSTINT                           TMT_MINCOLORDEPTH
+#   define TMT_LASTINT                            TMT_MINCOLORDEPTH
+
+    /* String theme metric properties */
+    TM_PROP(1401, TMT, CSSNAME,                   STRING)
+    TM_PROP(1402, TMT, XMLNAME,                   STRING)
+#   define TMT_FIRSTSTRING                        TMT_CSSNAME
+#   define TMT_LASTSTRING                         TMT_XMLNAME
+
+    /* Color theme metric properties */
+    TM_PROP(1601, TMT, SCROLLBAR,                 COLOR)
+    TM_PROP(1602, TMT, BACKGROUND,                COLOR)
+    TM_PROP(1603, TMT, ACTIVECAPTION,             COLOR)
+    TM_PROP(1604, TMT, INACTIVECAPTION,           COLOR)
+    TM_PROP(1605, TMT, MENU,                      COLOR)
+    TM_PROP(1606, TMT, WINDOW,                    COLOR)
+    TM_PROP(1607, TMT, WINDOWFRAME,               COLOR)
+    TM_PROP(1608, TMT, MENUTEXT,                  COLOR)
+    TM_PROP(1609, TMT, WINDOWTEXT,                COLOR)
+    TM_PROP(1610, TMT, CAPTIONTEXT,               COLOR)
+    TM_PROP(1611, TMT, ACTIVEBORDER,              COLOR)
+    TM_PROP(1612, TMT, INACTIVEBORDER,            COLOR)
+    TM_PROP(1613, TMT, APPWORKSPACE,              COLOR)
+    TM_PROP(1614, TMT, HIGHLIGHT,                 COLOR)
+    TM_PROP(1615, TMT, HIGHLIGHTTEXT,             COLOR)
+    TM_PROP(1616, TMT, BTNFACE,                   COLOR)
+    TM_PROP(1617, TMT, BTNSHADOW,                 COLOR)
+    TM_PROP(1618, TMT, GRAYTEXT,                  COLOR)
+    TM_PROP(1619, TMT, BTNTEXT,                   COLOR)
+    TM_PROP(1620, TMT, INACTIVECAPTIONTEXT,       COLOR)
+    TM_PROP(1621, TMT, BTNHIGHLIGHT,              COLOR)
+    TM_PROP(1622, TMT, DKSHADOW3D,                COLOR)
+    TM_PROP(1623, TMT, LIGHT3D,                   COLOR)
+    TM_PROP(1624, TMT, INFOTEXT,                  COLOR)
+    TM_PROP(1625, TMT, INFOBK,                    COLOR)
+    TM_PROP(1626, TMT, BUTTONALTERNATEFACE,       COLOR)
+    TM_PROP(1627, TMT, HOTTRACKING,               COLOR)
+    TM_PROP(1628, TMT, GRADIENTACTIVECAPTION,     COLOR)
+    TM_PROP(1629, TMT, GRADIENTINACTIVECAPTION,   COLOR)
+    TM_PROP(1630, TMT, MENUHILIGHT,               COLOR)
+    TM_PROP(1631, TMT, MENUBAR,                   COLOR)
+#   define TMT_FIRSTCOLOR                         TMT_SCROLLBAR
+#   define TMT_LASTCOLOR                          TMT_MENUBAR
+
+    /* hue substitutions */
+    TM_PROP(1801, TMT, FROMHUE1,                  INT)
+    TM_PROP(1802, TMT, FROMHUE2,                  INT)
+    TM_PROP(1803, TMT, FROMHUE3,                  INT)
+    TM_PROP(1804, TMT, FROMHUE4,                  INT)
+    TM_PROP(1805, TMT, FROMHUE5,                  INT)
+    TM_PROP(1806, TMT, TOHUE1,                    INT)
+    TM_PROP(1807, TMT, TOHUE2,                    INT)
+    TM_PROP(1808, TMT, TOHUE3,                    INT)
+    TM_PROP(1809, TMT, TOHUE4,                    INT)
+    TM_PROP(1810, TMT, TOHUE5,                    INT)
+
+    /* color substitutions */
+    TM_PROP(2001, TMT, FROMCOLOR1,                COLOR)
+    TM_PROP(2002, TMT, FROMCOLOR2,                COLOR)
+    TM_PROP(2003, TMT, FROMCOLOR3,                COLOR)
+    TM_PROP(2004, TMT, FROMCOLOR4,                COLOR)
+    TM_PROP(2005, TMT, FROMCOLOR5,                COLOR)
+    TM_PROP(2006, TMT, TOCOLOR1,                  COLOR)
+    TM_PROP(2007, TMT, TOCOLOR2,                  COLOR)
+    TM_PROP(2008, TMT, TOCOLOR3,                  COLOR)
+    TM_PROP(2009, TMT, TOCOLOR4,                  COLOR)
+    TM_PROP(2010, TMT, TOCOLOR5,                  COLOR)
+
+    /* Bool rendering properties */
+    TM_PROP(2201, TMT, TRANSPARENT,               BOOL)
+    TM_PROP(2202, TMT, AUTOSIZE,                  BOOL)
+    TM_PROP(2203, TMT, BORDERONLY,                BOOL)
+    TM_PROP(2204, TMT, COMPOSITED,                BOOL)
+    TM_PROP(2205, TMT, BGFILL,                    BOOL)
+    TM_PROP(2206, TMT, GLYPHTRANSPARENT,          BOOL)
+    TM_PROP(2207, TMT, GLYPHONLY,                 BOOL)
+    TM_PROP(2208, TMT, ALWAYSSHOWSIZINGBAR,       BOOL)
+    TM_PROP(2209, TMT, MIRRORIMAGE,               BOOL)
+    TM_PROP(2210, TMT, UNIFORMSIZING,             BOOL)
+    TM_PROP(2211, TMT, INTEGRALSIZING,            BOOL)
+    TM_PROP(2212, TMT, SOURCEGROW,                BOOL)
+    TM_PROP(2213, TMT, SOURCESHRINK,              BOOL)
+
+    /* Int rendering properties */
+    TM_PROP(2401, TMT, IMAGECOUNT,                INT)
+    TM_PROP(2402, TMT, ALPHALEVEL,                INT)
+    TM_PROP(2403, TMT, BORDERSIZE,                INT)
+    TM_PROP(2404, TMT, ROUNDCORNERWIDTH,          INT)
+    TM_PROP(2405, TMT, ROUNDCORNERHEIGHT,         INT)
+    TM_PROP(2406, TMT, GRADIENTRATIO1,            INT)
+    TM_PROP(2407, TMT, GRADIENTRATIO2,            INT)
+    TM_PROP(2408, TMT, GRADIENTRATIO3,            INT)
+    TM_PROP(2409, TMT, GRADIENTRATIO4,            INT)
+    TM_PROP(2410, TMT, GRADIENTRATIO5,            INT)
+    TM_PROP(2411, TMT, PROGRESSCHUNKSIZE,         INT)
+    TM_PROP(2412, TMT, PROGRESSSPACESIZE,         INT)
+    TM_PROP(2413, TMT, SATURATION,                INT)
+    TM_PROP(2414, TMT, TEXTBORDERSIZE,            INT)
+    TM_PROP(2415, TMT, ALPHATHRESHOLD,            INT)
+    TM_PROP(2416, TMT, WIDTH,                     SIZE)
+    TM_PROP(2417, TMT, HEIGHT,                    SIZE)
+    TM_PROP(2418, TMT, GLYPHINDEX,                INT)
+    TM_PROP(2419, TMT, TRUESIZESTRETCHMARK,       INT)
+    TM_PROP(2420, TMT, MINDPI1,                   INT)
+    TM_PROP(2421, TMT, MINDPI2,                   INT)
+    TM_PROP(2422, TMT, MINDPI3,                   INT)
+    TM_PROP(2423, TMT, MINDPI4,                   INT)
+    TM_PROP(2424, TMT, MINDPI5,                   INT)
+
+    /* Font rendering properties */
+    TM_PROP(2601, TMT, GLYPHFONT,                 FONT)
+
+    /* Filename rendering properties */
+    TM_PROP(3001, TMT, IMAGEFILE,                 FILENAME)
+    TM_PROP(3002, TMT, IMAGEFILE1,                FILENAME)
+    TM_PROP(3003, TMT, IMAGEFILE2,                FILENAME)
+    TM_PROP(3004, TMT, IMAGEFILE3,                FILENAME)
+    TM_PROP(3005, TMT, IMAGEFILE4,                FILENAME)
+    TM_PROP(3006, TMT, IMAGEFILE5,                FILENAME)
+    TM_PROP(3007, TMT, STOCKIMAGEFILE,            FILENAME)
+    TM_PROP(3008, TMT, GLYPHIMAGEFILE,            FILENAME)
+
+    /* String rendering properties */
+    TM_PROP(3201, TMT, TEXT,                      STRING)
+
+    /* Position rendering properties */
+    TM_PROP(3401, TMT, OFFSET,                    POSITION)
+    TM_PROP(3402, TMT, TEXTSHADOWOFFSET,          POSITION)
+    TM_PROP(3403, TMT, MINSIZE,                   POSITION)
+    TM_PROP(3404, TMT, MINSIZE1,                  POSITION)
+    TM_PROP(3405, TMT, MINSIZE2,                  POSITION)
+    TM_PROP(3406, TMT, MINSIZE3,                  POSITION)
+    TM_PROP(3407, TMT, MINSIZE4,                  POSITION)
+    TM_PROP(3408, TMT, MINSIZE5,                  POSITION)
+    TM_PROP(3409, TMT, NORMALSIZE,                POSITION)
+
+    /* Margin rendering properties */
+    TM_PROP(3601, TMT, SIZINGMARGINS,             MARGINS)
+    TM_PROP(3602, TMT, CONTENTMARGINS,            MARGINS)
+    TM_PROP(3603, TMT, CAPTIONMARGINS,            MARGINS)
+
+    /* Color rendering properties */
+    TM_PROP(3801, TMT, BORDERCOLOR,               COLOR)
+    TM_PROP(3802, TMT, FILLCOLOR,                 COLOR)
+    TM_PROP(3803, TMT, TEXTCOLOR,                 COLOR)
+    TM_PROP(3804, TMT, EDGELIGHTCOLOR,            COLOR)
+    TM_PROP(3805, TMT, EDGEHIGHLIGHTCOLOR,        COLOR)
+    TM_PROP(3806, TMT, EDGESHADOWCOLOR,           COLOR)
+    TM_PROP(3807, TMT, EDGEDKSHADOWCOLOR,         COLOR)
+    TM_PROP(3808, TMT, EDGEFILLCOLOR,             COLOR)
+    TM_PROP(3809, TMT, TRANSPARENTCOLOR,          COLOR)
+    TM_PROP(3810, TMT, GRADIENTCOLOR1,            COLOR)
+    TM_PROP(3811, TMT, GRADIENTCOLOR2,            COLOR)
+    TM_PROP(3812, TMT, GRADIENTCOLOR3,            COLOR)
+    TM_PROP(3813, TMT, GRADIENTCOLOR4,            COLOR)
+    TM_PROP(3814, TMT, GRADIENTCOLOR5,            COLOR)
+    TM_PROP(3815, TMT, SHADOWCOLOR,               COLOR)
+    TM_PROP(3816, TMT, GLOWCOLOR,                 COLOR)
+    TM_PROP(3817, TMT, TEXTBORDERCOLOR,           COLOR)
+    TM_PROP(3818, TMT, TEXTSHADOWCOLOR,           COLOR)
+    TM_PROP(3819, TMT, GLYPHTEXTCOLOR,            COLOR)
+    TM_PROP(3820, TMT, GLYPHTRANSPARENTCOLOR,     COLOR)
+    TM_PROP(3821, TMT, FILLCOLORHINT,             COLOR)
+    TM_PROP(3822, TMT, BORDERCOLORHINT,           COLOR)
+    TM_PROP(3823, TMT, ACCENTCOLORHINT,           COLOR)
+
+    /* Enum rendering properties */
+    TM_PROP(4001, TMT, BGTYPE,                    ENUM)
+    TM_PROP(4002, TMT, BORDERTYPE,                ENUM)
+    TM_PROP(4003, TMT, FILLTYPE,                  ENUM)
+    TM_PROP(4004, TMT, SIZINGTYPE,                ENUM)
+    TM_PROP(4005, TMT, HALIGN,                    ENUM)
+    TM_PROP(4006, TMT, CONTENTALIGNMENT,          ENUM)
+    TM_PROP(4007, TMT, VALIGN,                    ENUM)
+    TM_PROP(4008, TMT, OFFSETTYPE,                ENUM)
+    TM_PROP(4009, TMT, ICONEFFECT,                ENUM)
+    TM_PROP(4010, TMT, TEXTSHADOWTYPE,            ENUM)
+    TM_PROP(4011, TMT, IMAGELAYOUT,               ENUM)
+    TM_PROP(4012, TMT, GLYPHTYPE,                 ENUM)
+    TM_PROP(4013, TMT, IMAGESELECTTYPE,           ENUM)
+    TM_PROP(4014, TMT, GLYPHFONTSIZINGTYPE,       ENUM)
+    TM_PROP(4015, TMT, TRUESIZESCALINGTYPE,       ENUM)
+
+    /* custom properties */
+    TM_PROP(5001, TMT, USERPICTURE,               BOOL)
+    TM_PROP(5002, TMT, DEFAULTPANESIZE,           RECT)
+    TM_PROP(5003, TMT, BLENDCOLOR,                COLOR)
+
+END_TM_PROPS()
+
+
+/***** PARTS & STATES *****/
+
+/* BUTTON parts */
+BEGIN_TM_CLASS_PARTS(BUTTON)
+    TM_PART(1, BP, PUSHBUTTON)
+    TM_PART(2, BP, RADIOBUTTON)
+    TM_PART(3, BP, CHECKBOX)
+    TM_PART(4, BP, GROUPBOX)
+    TM_PART(5, BP, USERBUTTON)
+END_TM_CLASS_PARTS()
+
+/* BUTTON - PUSHBUTTON states */
+BEGIN_TM_PART_STATES(PUSHBUTTON)
+    TM_STATE(1, PBS, NORMAL)
+    TM_STATE(2, PBS, HOT)
+    TM_STATE(3, PBS, PRESSED)
+    TM_STATE(4, PBS, DISABLED)
+    TM_STATE(5, PBS, DEFAULTED)
+END_TM_PART_STATES()
+
+/* BUTTON - RADIOBUTTON states */
+BEGIN_TM_PART_STATES(RADIOBUTTON)
+    TM_STATE(1, RBS, UNCHECKEDNORMAL)
+    TM_STATE(2, RBS, UNCHECKEDHOT)
+    TM_STATE(3, RBS, UNCHECKEDPRESSED)
+    TM_STATE(4, RBS, UNCHECKEDDISABLED)
+    TM_STATE(5, RBS, CHECKEDNORMAL)
+    TM_STATE(6, RBS, CHECKEDHOT)
+    TM_STATE(7, RBS, CHECKEDPRESSED)
+    TM_STATE(8, RBS, CHECKEDDISABLED)
+END_TM_PART_STATES()
+
+/* BUTTON - CHECKBOX states */
+BEGIN_TM_PART_STATES(CHECKBOX)
+    TM_STATE(1, CBS, UNCHECKEDNORMAL)
+    TM_STATE(2, CBS, UNCHECKEDHOT)
+    TM_STATE(3, CBS, UNCHECKEDPRESSED)
+    TM_STATE(4, CBS, UNCHECKEDDISABLED)
+    TM_STATE(5, CBS, CHECKEDNORMAL)
+    TM_STATE(6, CBS, CHECKEDHOT)
+    TM_STATE(7, CBS, CHECKEDPRESSED)
+    TM_STATE(8, CBS, CHECKEDDISABLED)
+    TM_STATE(9, CBS, MIXEDNORMAL)
+    TM_STATE(10, CBS, MIXEDHOT)
+    TM_STATE(11, CBS, MIXEDPRESSED)
+    TM_STATE(12, CBS, MIXEDDISABLED)
+END_TM_PART_STATES()
+
+/* BUTTON - GROUPBOX states */
+BEGIN_TM_PART_STATES(GROUPBOX)
+    TM_STATE(1, GBS, NORMAL)
+    TM_STATE(2, GBS, DISABLED)
+END_TM_PART_STATES()
+
+/* CLOCK parts */
+BEGIN_TM_CLASS_PARTS(CLOCK)
+    TM_PART(1, CLP, TIME)
+END_TM_CLASS_PARTS()
+
+/* CLOCK states */
+BEGIN_TM_PART_STATES(CLOCK)
+    TM_STATE(1, CLS, NORMAL)
+END_TM_PART_STATES()
+
+/* COMBOBOX parts */
+BEGIN_TM_CLASS_PARTS(COMBOBOX)
+    TM_PART(1, CP, DROPDOWNBUTTON)
+END_TM_CLASS_PARTS()
+
+/* COMBOBOX states */
+BEGIN_TM_PART_STATES(COMBOBOX)
+    TM_STATE(1, CBXS, NORMAL)
+    TM_STATE(2, CBXS, HOT)
+    TM_STATE(3, CBXS, PRESSED)
+    TM_STATE(4, CBXS, DISABLED)
+END_TM_PART_STATES()
+
+/* EDIT parts */
+BEGIN_TM_CLASS_PARTS(EDIT)
+    TM_PART(1, EP, EDITTEXT)
+    TM_PART(2, EP, CARET)
+END_TM_CLASS_PARTS()
+
+/* EDIT - EDITTEXT states */
+BEGIN_TM_PART_STATES(EDITTEXT)
+    TM_STATE(1, ETS, NORMAL)
+    TM_STATE(2, ETS, HOT)
+    TM_STATE(3, ETS, SELECTED)
+    TM_STATE(4, ETS, DISABLED)
+    TM_STATE(5, ETS, FOCUSED)
+    TM_STATE(6, ETS, READONLY)
+    TM_STATE(7, ETS, ASSIST)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR parts */
+BEGIN_TM_CLASS_PARTS(EXPLORERBAR)
+    TM_PART(1, EBP, HEADERBACKGROUND)
+    TM_PART(2, EBP, HEADERCLOSE)
+    TM_PART(3, EBP, HEADERPIN)
+    TM_PART(4, EBP, IEBARMENU)
+    TM_PART(5, EBP, NORMALGROUPBACKGROUND)
+    TM_PART(6, EBP, NORMALGROUPCOLLAPSE)
+    TM_PART(7, EBP, NORMALGROUPEXPAND)
+    TM_PART(8, EBP, NORMALGROUPHEAD)
+    TM_PART(9, EBP, SPECIALGROUPBACKGROUND)
+    TM_PART(10, EBP, SPECIALGROUPCOLLAPSE)
+    TM_PART(11, EBP, SPECIALGROUPEXPAND)
+    TM_PART(12, EBP, SPECIALGROUPHEAD)
+END_TM_CLASS_PARTS()
+
+/* EXPLORERBAR - HEADERCLOSE states */
+BEGIN_TM_PART_STATES(HEADERCLOSE)
+    TM_STATE(1, EBHC, NORMAL)
+    TM_STATE(2, EBHC, HOT)
+    TM_STATE(3, EBHC, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - HEADERPIN states */
+BEGIN_TM_PART_STATES(HEADERPIN)
+    TM_STATE(1, EBHP, NORMAL)
+    TM_STATE(2, EBHP, HOT)
+    TM_STATE(3, EBHP, PRESSED)
+    TM_STATE(4, EBHP, SELECTEDNORMAL)
+    TM_STATE(5, EBHP, SELECTEDHOT)
+    TM_STATE(6, EBHP, SELECTEDPRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - IEBARMENU states */
+BEGIN_TM_PART_STATES(IEBARMENU)
+    TM_STATE(1, EBM, NORMAL)
+    TM_STATE(2, EBM, HOT)
+    TM_STATE(3, EBM, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - NORMALGROUPCOLLAPSE states */
+BEGIN_TM_PART_STATES(NORMALGROUPCOLLAPSE)
+    TM_STATE(1, EBNGC, NORMAL)
+    TM_STATE(2, EBNGC, HOT)
+    TM_STATE(3, EBNGC, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - NORMALGROUPEXPAND states */
+BEGIN_TM_PART_STATES(NORMALGROUPEXPAND)
+    TM_STATE(1, EBNGE, NORMAL)
+    TM_STATE(2, EBNGE, HOT)
+    TM_STATE(3, EBNGE, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - SPECIALGROUPCOLLAPSE states */
+BEGIN_TM_PART_STATES(SPECIALGROUPCOLLAPSE)
+    TM_STATE(1, EBSGC, NORMAL)
+    TM_STATE(2, EBSGC, HOT)
+    TM_STATE(3, EBSGC, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - SPECIALGROUPEXPAND states */
+BEGIN_TM_PART_STATES(SPECIALGROUPEXPAND)
+    TM_STATE(1, EBSGE, NORMAL)
+    TM_STATE(2, EBSGE, HOT)
+    TM_STATE(3, EBSGE, PRESSED)
+END_TM_PART_STATES()
+
+/* GLOBALS parts */
+BEGIN_TM_CLASS_PARTS(GLOBALS)
+    TM_PART(1, GP, BORDER)
+    TM_PART(2, GP, LINEHORZ)
+    TM_PART(3, GP, LINEVERT)
+END_TM_CLASS_PARTS()
+
+/* GLOBALS - BORDER states */
+BEGIN_TM_PART_STATES(BORDER)
+    TM_STATE(1, BSS, FLAT)
+    TM_STATE(2, BSS, RAISED)
+    TM_STATE(3, BSS, SUNKEN)
+END_TM_PART_STATES()
+
+/* GLOBALS - LINEHORZ states */
+BEGIN_TM_PART_STATES(LINEHORZ)
+    TM_STATE(1, LHS, FLAT)
+    TM_STATE(2, LHS, RAISED)
+    TM_STATE(3, LHS, SUNKEN)
+END_TM_PART_STATES()
+
+/* GLOBAL - LINEVERT states */
+BEGIN_TM_PART_STATES(LINEVERT)
+    TM_STATE(1, LVS, FLAT)
+    TM_STATE(2, LVS, RAISED)
+    TM_STATE(3, LVS, SUNKEN)
+END_TM_PART_STATES()
+
+/* HEADER parts */
+BEGIN_TM_CLASS_PARTS(HEADER)
+    TM_PART(1, HP, HEADERITEM)
+    TM_PART(2, HP, HEADERITEMLEFT)
+    TM_PART(3, HP, HEADERITEMRIGHT)
+    TM_PART(4, HP, HEADERSORTARROW)
+END_TM_CLASS_PARTS()
+
+/* HEADER - HEADERITEM states */
+BEGIN_TM_PART_STATES(HEADERITEM)
+    TM_STATE(1, HIS, NORMAL)
+    TM_STATE(2, HIS, HOT)
+    TM_STATE(3, HIS, PRESSED)
+END_TM_PART_STATES()
+
+/* HEADER - HEADERITEMLEFT states */
+BEGIN_TM_PART_STATES(HEADERITEMLEFT)
+    TM_STATE(1, HILS, NORMAL)
+    TM_STATE(2, HILS, HOT)
+    TM_STATE(3, HILS, PRESSED)
+END_TM_PART_STATES()
+
+/* HEADER - HEADERITEMRIGHT states */
+BEGIN_TM_PART_STATES(HEADERITEMRIGHT)
+    TM_STATE(1, HIRS, NORMAL)
+    TM_STATE(2, HIRS, HOT)
+    TM_STATE(3, HIRS, PRESSED)
+END_TM_PART_STATES()
+
+/* HEADER - HEADERSORTARROW states */
+BEGIN_TM_PART_STATES(HEADERSORTARROW)
+    TM_STATE(1, HSAS, SORTEDUP)
+    TM_STATE(2, HSAS, SORTEDDOWN)
+END_TM_PART_STATES()
+
+/* LISTVIEW parts */
+BEGIN_TM_CLASS_PARTS(LISTVIEW)
+    TM_PART(1, LVP, LISTITEM)
+    TM_PART(2, LVP, LISTGROUP)
+    TM_PART(3, LVP, LISTDETAIL)
+    TM_PART(4, LVP, LISTSORTEDDETAIL)
+    TM_PART(5, LVP, EMPTYTEXT)
+END_TM_CLASS_PARTS()
+
+/* LISTVIEW - LISTITEM states */
+BEGIN_TM_PART_STATES(LISTITEM)
+    TM_STATE(1, LIS, NORMAL)
+    TM_STATE(2, LIS, HOT)
+    TM_STATE(3, LIS, SELECTED)
+    TM_STATE(4, LIS, DISABLED)
+    TM_STATE(5, LIS, SELECTEDNOTFOCUS)
+END_TM_PART_STATES()
+
+/* MENU parts */
+BEGIN_TM_CLASS_PARTS(MENU)
+    TM_PART(1, MP, MENUITEM)
+    TM_PART(2, MP, MENUDROPDOWN)
+    TM_PART(3, MP, MENUBARITEM)
+    TM_PART(4, MP, MENUBARDROPDOWN)
+    TM_PART(5, MP, CHEVRON)
+    TM_PART(6, MP, SEPARATOR)
+END_TM_CLASS_PARTS()
+
+/* MENU - * states */
+BEGIN_TM_PART_STATES(MENU)
+    TM_STATE(1, MS, NORMAL)
+    TM_STATE(2, MS, SELECTED)
+    TM_STATE(3, MS, DEMOTED)
+END_TM_PART_STATES()
+
+/* MENUBAND parts */
+BEGIN_TM_CLASS_PARTS(MENUBAND)
+    TM_PART(1, MDP, NEWAPPBUTTON)
+/* MDP_SEPERATOR isn't a typo, as per Microsoft's headers */
+    TM_PART(2, MDP, SEPERATOR)
+END_TM_CLASS_PARTS()
+
+/* MENUBAND states */
+BEGIN_TM_PART_STATES(MENUBAND)
+    TM_STATE(1, MDS, NORMAL)
+    TM_STATE(2, MDS, HOT)
+    TM_STATE(3, MDS, PRESSED)
+    TM_STATE(4, MDS, DISABLED)
+    TM_STATE(5, MDS, CHECKED)
+    TM_STATE(6, MDS, HOTCHECKED)
+END_TM_PART_STATES()
+
+/* PAGE parts */
+BEGIN_TM_CLASS_PARTS(PAGE)
+    TM_PART(1, PGRP, UP)
+    TM_PART(2, PGRP, DOWN)
+    TM_PART(3, PGRP, UPHORZ)
+    TM_PART(4, PGRP, DOWNHORZ)
+END_TM_CLASS_PARTS()
+
+/* PAGE - UP states */
+BEGIN_TM_PART_STATES(UP)
+    TM_STATE(1, UPS, NORMAL)
+    TM_STATE(2, UPS, HOT)
+    TM_STATE(3, UPS, PRESSED)
+    TM_STATE(4, UPS, DISABLED)
+END_TM_PART_STATES()
+
+/* PAGE - DOWN states  */
+BEGIN_TM_PART_STATES(DOWN)
+    TM_STATE(1, DNS, NORMAL)
+    TM_STATE(2, DNS, HOT)
+    TM_STATE(3, DNS, PRESSED)
+    TM_STATE(4, DNS, DISABLED)
+END_TM_PART_STATES()
+
+/* PAGE - UPHORZ states */
+BEGIN_TM_PART_STATES(UPHORZ)
+    TM_STATE(1, UPHZS, NORMAL)
+    TM_STATE(2, UPHZS, HOT)
+    TM_STATE(3, UPHZS, PRESSED)
+    TM_STATE(4, UPHZS, DISABLED)
+END_TM_PART_STATES()
+
+/* PAGE - DOWNHORZ states */
+BEGIN_TM_PART_STATES(DOWNHORZ)
+    TM_STATE(1, DNHZS, NORMAL)
+    TM_STATE(2, DNHZS, HOT)
+    TM_STATE(3, DNHZS, PRESSED)
+    TM_STATE(4, DNHZS, DISABLED)
+END_TM_PART_STATES()
+
+/* PROGRESS parts */
+BEGIN_TM_CLASS_PARTS(PROGRESS)
+    TM_PART(1, PP, BAR)
+    TM_PART(2, PP, BARVERT)
+    TM_PART(3, PP, CHUNK)
+    TM_PART(4, PP, CHUNKVERT)
+END_TM_CLASS_PARTS()
+
+/* REBAR parts */
+BEGIN_TM_CLASS_PARTS(REBAR)
+    TM_PART(1, RP, GRIPPER)
+    TM_PART(2, RP, GRIPPERVERT)
+    TM_PART(3, RP, BAND)
+    TM_PART(4, RP, CHEVRON)
+    TM_PART(5, RP, CHEVRONVERT)
+END_TM_CLASS_PARTS()
+
+/* REBAR - CHEVRON states */
+BEGIN_TM_PART_STATES(CHEVRON)
+    TM_STATE(1, CHEVS, NORMAL)
+    TM_STATE(2, CHEVS, HOT)
+    TM_STATE(3, CHEVS, PRESSED)
+END_TM_PART_STATES()
+
+/* SCROLLBAR parts */
+BEGIN_TM_CLASS_PARTS(SCROLLBAR)
+    TM_PART(1, SBP, ARROWBTN)
+    TM_PART(2, SBP, THUMBBTNHORZ)
+    TM_PART(3, SBP, THUMBBTNVERT)
+    TM_PART(4, SBP, LOWERTRACKHORZ)
+    TM_PART(5, SBP, UPPERTRACKHORZ)
+    TM_PART(6, SBP, LOWERTRACKVERT)
+    TM_PART(7, SBP, UPPERTRACKVERT)
+    TM_PART(8, SBP, GRIPPERHORZ)
+    TM_PART(9, SBP, GRIPPERVERT)
+    TM_PART(10, SBP, SIZEBOX)
+END_TM_CLASS_PARTS()
+
+/* SCROLLBAR - ARROWBTN states */
+BEGIN_TM_PART_STATES(ARROWBTN)
+    TM_STATE(1, ABS, UPNORMAL)
+    TM_STATE(2, ABS, UPHOT)
+    TM_STATE(3, ABS, UPPRESSED)
+    TM_STATE(4, ABS, UPDISABLED)
+    TM_STATE(5, ABS, DOWNNORMAL)
+    TM_STATE(6, ABS, DOWNHOT)
+    TM_STATE(7, ABS, DOWNPRESSED)
+    TM_STATE(8, ABS, DOWNDISABLED)
+    TM_STATE(9, ABS, LEFTNORMAL)
+    TM_STATE(10, ABS, LEFTHOT)
+    TM_STATE(11, ABS, LEFTPRESSED)
+    TM_STATE(12, ABS, LEFTDISABLED)
+    TM_STATE(13, ABS, RIGHTNORMAL)
+    TM_STATE(14, ABS, RIGHTHOT)
+    TM_STATE(15, ABS, RIGHTPRESSED)
+    TM_STATE(16, ABS, RIGHTDISABLED)
+END_TM_PART_STATES()
+
+/* SCROLLBAR - LOWER* / THUMB* / UPPER* states */
+BEGIN_TM_PART_STATES(SCROLLBAR)
+    TM_STATE(1, SCRBS, NORMAL)
+    TM_STATE(2, SCRBS, HOT)
+    TM_STATE(3, SCRBS, PRESSED)
+    TM_STATE(4, SCRBS, DISABLED)
+END_TM_PART_STATES()
+
+/* SCROLLBAR - SIZEBOX states */
+BEGIN_TM_PART_STATES(SIZEBOX)
+    TM_STATE(1, SZB, RIGHTALIGN)
+    TM_STATE(2, SZB, LEFTALIGN)
+END_TM_PART_STATES()
+
+/* SPIN parts */
+BEGIN_TM_CLASS_PARTS(SPIN)
+    TM_PART(1, SPNP, UP)
+    TM_PART(2, SPNP, DOWN)
+    TM_PART(3, SPNP, UPHORZ)
+    TM_PART(4, SPNP, DOWNHORZ)
+END_TM_CLASS_PARTS()
+
+/* SPIN * states */
+/* See PAGE states */
+
+/* STARTPANEL parts */
+BEGIN_TM_CLASS_PARTS(STARTPANEL)
+    TM_PART(1, SPP, USERPANE)
+    TM_PART(2, SPP, MOREPROGRAMS)
+    TM_PART(3, SPP, MOREPROGRAMSARROW)
+    TM_PART(4, SPP, PROGLIST)
+    TM_PART(5, SPP, PROGLISTSEPARATOR)
+    TM_PART(6, SPP, PLACESLIST)
+    TM_PART(7, SPP, PLACESLISTSEPARATOR)
+    TM_PART(8, SPP, LOGOFF)
+    TM_PART(9, SPP, LOGOFFBUTTONS)
+    TM_PART(10, SPP, USERPICTURE)
+    TM_PART(11, SPP, PREVIEW)
+END_TM_CLASS_PARTS()
+
+/* STARTPANEL - MOREPROGRAMSARROW states */
+BEGIN_TM_PART_STATES(MOREPROGRAMSARROW)
+    TM_STATE(1, SPS, NORMAL)
+    TM_STATE(2, SPS, HOT)
+    TM_STATE(3, SPS, PRESSED)
+END_TM_PART_STATES()
+
+/* STARTPANEL - LOGOFFBUTTONS states */
+BEGIN_TM_PART_STATES(LOGOFFBUTTONS)
+    TM_STATE(1, SPLS, NORMAL)
+    TM_STATE(2, SPLS, HOT)
+    TM_STATE(3, SPLS, PRESSED)
+END_TM_PART_STATES()
+
+/* STATUS parts */
+BEGIN_TM_CLASS_PARTS(STATUS)
+    TM_PART(1, SP, PANE)
+    TM_PART(2, SP, GRIPPERPANE)
+    TM_PART(3, SP, GRIPPER)
+END_TM_CLASS_PARTS()
+
+/* TAB parts */
+BEGIN_TM_CLASS_PARTS(TAB)
+    TM_PART(1, TABP, TABITEM)
+    TM_PART(2, TABP, TABITEMLEFTEDGE)
+    TM_PART(3, TABP, TABITEMRIGHTEDGE)
+    TM_PART(4, TABP, TABITEMBOTHEDGE)
+    TM_PART(5, TABP, TOPTABITEM)
+    TM_PART(6, TABP, TOPTABITEMLEFTEDGE)
+    TM_PART(7, TABP, TOPTABITEMRIGHTEDGE)
+    TM_PART(8, TABP, TOPTABITEMBOTHEDGE)
+    TM_PART(9, TABP, PANE)
+    TM_PART(10, TABP, BODY)
+END_TM_CLASS_PARTS()
+
+/* TAB - TABITEM states */
+BEGIN_TM_PART_STATES(TABITEM)
+    TM_STATE(1, TIS, NORMAL)
+    TM_STATE(2, TIS, HOT)
+    TM_STATE(3, TIS, SELECTED)
+    TM_STATE(4, TIS, DISABLED)
+    TM_STATE(5, TIS, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TABITEMLEFTEDGE states */
+BEGIN_TM_PART_STATES(TABITEMLEFTEDGE)
+    TM_STATE(1, TILES, NORMAL)
+    TM_STATE(2, TILES, HOT)
+    TM_STATE(3, TILES, SELECTED)
+    TM_STATE(4, TILES, DISABLED)
+    TM_STATE(5, TILES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TABITEMRIGHTEDGE states */
+BEGIN_TM_PART_STATES(TABITEMRIGHTEDGE)
+    TM_STATE(1, TIRES, NORMAL)
+    TM_STATE(2, TIRES, HOT)
+    TM_STATE(3, TIRES, SELECTED)
+    TM_STATE(4, TIRES, DISABLED)
+    TM_STATE(5, TIRES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TABITEMBOTHEDGES states */
+BEGIN_TM_PART_STATES(TABITEMBOTHEDGES)
+    TM_STATE(1, TIBES, NORMAL)
+    TM_STATE(2, TIBES, HOT)
+    TM_STATE(3, TIBES, SELECTED)
+    TM_STATE(4, TIBES, DISABLED)
+    TM_STATE(5, TIBES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEM states */
+BEGIN_TM_PART_STATES(TOPTABITEM)
+    TM_STATE(1, TTIS, NORMAL)
+    TM_STATE(2, TTIS, HOT)
+    TM_STATE(3, TTIS, SELECTED)
+    TM_STATE(4, TTIS, DISABLED)
+    TM_STATE(5, TTIS, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEMLEFTEDGE states */
+BEGIN_TM_PART_STATES(TOPTABITEMLEFTEDGE)
+    TM_STATE(1, TTILES, NORMAL)
+    TM_STATE(2, TTILES, HOT)
+    TM_STATE(3, TTILES, SELECTED)
+    TM_STATE(4, TTILES, DISABLED)
+    TM_STATE(5, TTILES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEMRIGHTEDGE states */
+BEGIN_TM_PART_STATES(TOPTABITEMRIGHTEDGE)
+    TM_STATE(1, TTIRES, NORMAL)
+    TM_STATE(2, TTIRES, HOT)
+    TM_STATE(3, TTIRES, SELECTED)
+    TM_STATE(4, TTIRES, DISABLED)
+    TM_STATE(5, TTIRES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEMBOTHEDGES states */
+BEGIN_TM_PART_STATES(TOPTABITEMBOTHEDGES)
+    TM_STATE(1, TTIBES, NORMAL)
+    TM_STATE(2, TTIBES, HOT)
+    TM_STATE(3, TTIBES, SELECTED)
+    TM_STATE(4, TTIBES, DISABLED)
+    TM_STATE(5, TTIBES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TASKBAND parts */
+BEGIN_TM_CLASS_PARTS(TASKBAND)
+    TM_PART(1, TDP, GROUPCOUNT)
+    TM_PART(2, TDP, FLASHBUTTON)
+    TM_PART(3, TDP, FLASHBUTTONGROUPMENU)
+END_TM_CLASS_PARTS()
+
+/* TASKBAR parts */
+BEGIN_TM_CLASS_PARTS(TASKBAR)
+    TM_PART(1, TBP, BACKGROUNDBOTTOM)
+    TM_PART(2, TBP, BACKGROUNDRIGHT)
+    TM_PART(3, TBP, BACKGROUNDTOP)
+    TM_PART(4, TBP, BACKGROUNDLEFT)
+    TM_PART(5, TBP, SIZINGBARBOTTOM)
+    TM_PART(6, TBP, SIZINGBARRIGHT)
+    TM_PART(7, TBP, SIZINGBARTOP)
+    TM_PART(8, TBP, SIZINGBARLEFT)
+END_TM_CLASS_PARTS()
+
+/* TOOLBAR parts */
+BEGIN_TM_CLASS_PARTS(TOOLBAR)
+    TM_PART(1, TP, BUTTON)
+    TM_PART(2, TP, DROPDOWNBUTTON)
+    TM_PART(3, TP, SPLITBUTTON)
+    TM_PART(4, TP, SPLITBUTTONDROPDOWN)
+    TM_PART(5, TP, SEPARATOR)
+    TM_PART(6, TP, SEPARATORVERT)
+END_TM_CLASS_PARTS()
+
+/* TOOLBAR - * states */
+BEGIN_TM_PART_STATES(TOOLBAR)
+    TM_STATE(1, TS, NORMAL)
+    TM_STATE(2, TS, HOT)
+    TM_STATE(3, TS, PRESSED)
+    TM_STATE(4, TS, DISABLED)
+    TM_STATE(5, TS, CHECKED)
+    TM_STATE(6, TS, HOTCHECKED)
+END_TM_PART_STATES()
+
+/* TOOLTIP parts */
+BEGIN_TM_CLASS_PARTS(TOOLTIP)
+    TM_PART(1, TTP, STANDARD)
+    TM_PART(2, TTP, STANDARDTITLE)
+    TM_PART(3, TTP, BALLOON)
+    TM_PART(4, TTP, BALLOONTITLE)
+    TM_PART(5, TTP, CLOSE)
+END_TM_CLASS_PARTS()
+
+/* TOOLTIP - STANDARD states */
+BEGIN_TM_PART_STATES(STANDARD)
+    TM_STATE(1, TTSS, NORMAL)
+    TM_STATE(2, TTSS, LINK)
+END_TM_PART_STATES()
+
+/* TOOLTIP - STANDARDTITLE states */
+/* See TOOLTIP STANDARD  */
+
+/* TOOLTIP - BALLOON states */
+BEGIN_TM_PART_STATES(BALLOON)
+    TM_STATE(1, TTBS, NORMAL)
+    TM_STATE(2, TTBS, LINK)
+END_TM_PART_STATES()
+
+/* TOOLTIP - BALLOONTITLE states */
+/* See TOOLTIP BALLOON */
+
+/* TOOLTIP - CLOSE states */
+BEGIN_TM_PART_STATES(CLOSE)
+    TM_STATE(1, TTCS, NORMAL)
+    TM_STATE(2, TTCS, HOT)
+    TM_STATE(3, TTCS, PRESSED)
+END_TM_PART_STATES()
+
+/* TRACKBAR parts */
+BEGIN_TM_CLASS_PARTS(TRACKBAR)
+    TM_PART(1, TKP, TRACK)
+    TM_PART(2, TKP, TRACKVERT)
+    TM_PART(3, TKP, THUMB)
+    TM_PART(4, TKP, THUMBBOTTOM)
+    TM_PART(5, TKP, THUMBTOP)
+    TM_PART(6, TKP, THUMBVERT)
+    TM_PART(7, TKP, THUMBLEFT)
+    TM_PART(8, TKP, THUMBRIGHT)
+    TM_PART(9, TKP, TICS)
+    TM_PART(10, TKP, TICSVERT)
+END_TM_CLASS_PARTS()
+
+/* TRACKBAR states */
+BEGIN_TM_PART_STATES(TRACKBAR)
+    TM_STATE(1, TKS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TRACK states */
+BEGIN_TM_PART_STATES(TRACK)
+    TM_STATE(1, TRS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TRACKVERT states */
+BEGIN_TM_PART_STATES(TRACKVERT)
+    TM_STATE(1, TRVS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMB states */
+BEGIN_TM_PART_STATES(THUMB)
+    TM_STATE(1, TUS, NORMAL)
+    TM_STATE(2, TUS, HOT)
+    TM_STATE(3, TUS, PRESSED)
+    TM_STATE(4, TUS, FOCUSED)
+    TM_STATE(5, TUS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBBOTTOM states */
+BEGIN_TM_PART_STATES(THUMBBOTTOM)
+    TM_STATE(1, TUBS, NORMAL)
+    TM_STATE(2, TUBS, HOT)
+    TM_STATE(3, TUBS, PRESSED)
+    TM_STATE(4, TUBS, FOCUSED)
+    TM_STATE(5, TUBS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBTOP states */
+BEGIN_TM_PART_STATES(THUMBTOP)
+    TM_STATE(1, TUTS, NORMAL)
+    TM_STATE(2, TUTS, HOT)
+    TM_STATE(3, TUTS, PRESSED)
+    TM_STATE(4, TUTS, FOCUSED)
+    TM_STATE(5, TUTS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBVERT states */
+BEGIN_TM_PART_STATES(THUMBVERT)
+    TM_STATE(1, TUVS, NORMAL)
+    TM_STATE(2, TUVS, HOT)
+    TM_STATE(3, TUVS, PRESSED)
+    TM_STATE(4, TUVS, FOCUSED)
+    TM_STATE(5, TUVS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBLEFT states */
+BEGIN_TM_PART_STATES(THUMBLEFT)
+    TM_STATE(1, TUVLS, NORMAL)
+    TM_STATE(2, TUVLS, HOT)
+    TM_STATE(3, TUVLS, PRESSED)
+    TM_STATE(4, TUVLS, FOCUSED)
+    TM_STATE(5, TUVLS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBRIGHT states */
+BEGIN_TM_PART_STATES(THUMBRIGHT)
+    TM_STATE(1, TUVRS, NORMAL)
+    TM_STATE(2, TUVRS, HOT)
+    TM_STATE(3, TUVRS, PRESSED)
+    TM_STATE(4, TUVRS, FOCUSED)
+    TM_STATE(5, TUVRS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TICS states */
+BEGIN_TM_PART_STATES(TICS)
+    TM_STATE(1, TSS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TICSVERT states */
+BEGIN_TM_PART_STATES(TICSVERT)
+    TM_STATE(1, TSVS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRAYNOTIFY parts */
+BEGIN_TM_CLASS_PARTS(TRAYNOTIFY)
+    TM_PART(1, TNP, BACKGROUND)
+    TM_PART(2, TNP, ANIMBACKGROUND)
+END_TM_CLASS_PARTS()
+
+/* TREEVIEW parts */
+BEGIN_TM_CLASS_PARTS(TREEVIEW)
+    TM_PART(1, TVP, TREEITEM)
+    TM_PART(2, TVP, GLYPH)
+    TM_PART(3, TVP, BRANCH)
+END_TM_CLASS_PARTS()
+
+/* TREEVIEW - TREEITEM states */
+BEGIN_TM_PART_STATES(TREEITEM)
+    TM_STATE(1, TREIS, NORMAL)
+    TM_STATE(2, TREIS, HOT)
+    TM_STATE(3, TREIS, SELECTED)
+    TM_STATE(4, TREIS, DISABLED)
+    TM_STATE(5, TREIS, SELECTEDNOTFOCUS)
+END_TM_PART_STATES()
+
+/* TREEVIEW - GLYPH states */
+BEGIN_TM_PART_STATES(GLYPH)
+    TM_STATE(1, GLPS, CLOSED)
+    TM_STATE(2, GLPS, OPENED)
+END_TM_PART_STATES()
+
+/* WINDOW parts */
+BEGIN_TM_CLASS_PARTS(WINDOW)
+    TM_PART(1, WP, CAPTION)
+    TM_PART(2, WP, SMALLCAPTION)
+    TM_PART(3, WP, MINCAPTION)
+    TM_PART(4, WP, SMALLMINCAPTION)
+    TM_PART(5, WP, MAXCAPTION)
+    TM_PART(6, WP, SMALLMAXCAPTION)
+    TM_PART(7, WP, FRAMELEFT)
+    TM_PART(8, WP, FRAMERIGHT)
+    TM_PART(9, WP, FRAMEBOTTOM)
+    TM_PART(10, WP, SMALLFRAMELEFT)
+    TM_PART(11, WP, SMALLFRAMERIGHT)
+    TM_PART(12, WP, SMALLFRAMEBOTTOM)
+    TM_PART(13, WP, SYSBUTTON)
+    TM_PART(14, WP, MDISYSBUTTON)
+    TM_PART(15, WP, MINBUTTON)
+    TM_PART(16, WP, MDIMINBUTTON)
+    TM_PART(17, WP, MAXBUTTON)
+    TM_PART(18, WP, CLOSEBUTTON)
+    TM_PART(19, WP, SMALLCLOSEBUTTON)
+    TM_PART(20, WP, MDICLOSEBUTTON)
+    TM_PART(21, WP, RESTOREBUTTON)
+    TM_PART(22, WP, MDIRESTOREBUTTON)
+    TM_PART(23, WP, HELPBUTTON)
+    TM_PART(24, WP, MDIHELPBUTTON)
+    TM_PART(25, WP, HORZSCROLL)
+    TM_PART(26, WP, HORZTHUMB)
+    TM_PART(27, WP, VERTSCROLL)
+    TM_PART(28, WP, VERTTHUMB)
+    TM_PART(29, WP, DIALOG)
+    TM_PART(30, WP, CAPTIONSIZINGTEMPLATE)
+    TM_PART(31, WP, SMALLCAPTIONSIZINGTEMPLATE)
+    TM_PART(32, WP, FRAMELEFTSIZINGTEMPLATE)
+    TM_PART(33, WP, SMALLFRAMELEFTSIZINGTEMPLATE)
+    TM_PART(34, WP, FRAMERIGHTSIZINGTEMPLATE)
+    TM_PART(35, WP, SMALLFRAMERIGHTSIZINGTEMPLATE)
+    TM_PART(36, WP, FRAMEBOTTOMSIZINGTEMPLATE)
+    TM_PART(37, WP, SMALLFRAMEBOTTOMSIZINGTEMPLATE)
+END_TM_CLASS_PARTS()
+
+/* WINDOW - CAPTION / SMALLCAPTION states */
+BEGIN_TM_PART_STATES(CAPTION)
+    TM_STATE(1, CS, ACTIVE)
+    TM_STATE(2, CS, INACTIVE)
+    TM_STATE(3, CS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MINCAPTION / SMALLMINCAPTION states */
+BEGIN_TM_PART_STATES(MINCAPTION)
+    TM_STATE(1, MNCS, ACTIVE)
+    TM_STATE(2, MNCS, INACTIVE)
+    TM_STATE(3, MNCS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MAXCAPTION / SMALLMAXCAPTION states */
+BEGIN_TM_PART_STATES(MAXCAPTION)
+    TM_STATE(1, MXCS, ACTIVE)
+    TM_STATE(2, MXCS, INACTIVE)
+    TM_STATE(3, MXCS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - FRAME* / SMALLFRAME* states */
+BEGIN_TM_PART_STATES(FRAME)
+    TM_STATE(1, FS, ACTIVE)
+    TM_STATE(2, FS, INACTIVE)
+END_TM_PART_STATES()
+
+/* WINDOW - SYSBUTTON / MDISYSBUTTON states */
+BEGIN_TM_PART_STATES(SYSBUTTON)
+    TM_STATE(1, SBS, NORMAL)
+    TM_STATE(2, SBS, HOT)
+    TM_STATE(3, SBS, PUSHED)
+    TM_STATE(4, SBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MINBUTTON / MDIMINBUTTON states */
+BEGIN_TM_PART_STATES(MINBUTTON)
+    TM_STATE(1, MINBS, NORMAL)
+    TM_STATE(2, MINBS, HOT)
+    TM_STATE(3, MINBS, PUSHED)
+    TM_STATE(4, MINBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MAXBUTTON states */
+BEGIN_TM_PART_STATES(MAXBUTTON)
+    TM_STATE(1, MAXBS, NORMAL)
+    TM_STATE(2, MAXBS, HOT)
+    TM_STATE(3, MAXBS, PUSHED)
+    TM_STATE(4, MAXBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - CLOSEBUTTON / SMALLCLOSEBUTTON / MDICLOSEBUTTON states */
+BEGIN_TM_PART_STATES(CLOSEBUTTON)
+    TM_STATE(1, CBS, NORMAL)
+    TM_STATE(2, CBS, HOT)
+    TM_STATE(3, CBS, PUSHED)
+    TM_STATE(4, CBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - RESTOREBUTTON / MDIRESTOREBUTTON states */
+BEGIN_TM_PART_STATES(RESTOREBUTTON)
+    TM_STATE(1, RBS, NORMAL)
+    TM_STATE(2, RBS, HOT)
+    TM_STATE(3, RBS, PUSHED)
+    TM_STATE(4, RBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - HELPBUTTON / MDIHELPBUTTON states */
+BEGIN_TM_PART_STATES(HELPBUTTON)
+    TM_STATE(1, HBS, NORMAL)
+    TM_STATE(2, HBS, HOT)
+    TM_STATE(3, HBS, PUSHED)
+    TM_STATE(4, HBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - HORZSCROLL states */
+BEGIN_TM_PART_STATES(HORZSCROLL)
+    TM_STATE(1, HSS, NORMAL)
+    TM_STATE(2, HSS, HOT)
+    TM_STATE(3, HSS, PUSHED)
+    TM_STATE(4, HSS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - HORZTHUMB states */
+BEGIN_TM_PART_STATES(HORZTHUMB)
+    TM_STATE(1, HTS, NORMAL)
+    TM_STATE(2, HTS, HOT)
+    TM_STATE(3, HTS, PUSHED)
+    TM_STATE(4, HTS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - VERTSCROLL states */
+BEGIN_TM_PART_STATES(VERTSCROLL)
+    TM_STATE(1, VSS, NORMAL)
+    TM_STATE(2, VSS, HOT)
+    TM_STATE(3, VSS, PUSHED)
+    TM_STATE(4, VSS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - VERTTHUMB states */
+BEGIN_TM_PART_STATES(VERTTHUMB)
+    TM_STATE(1, VTS, NORMAL)
+    TM_STATE(2, VTS, HOT)
+    TM_STATE(3, VTS, PUSHED)
+    TM_STATE(4, VTS, DISABLED)
+END_TM_PART_STATES()
+
+END_TM_SCHEMA(ThemeMgrSchema)
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl
new file mode 100644
index 0000000..f636e20
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl
@@ -0,0 +1,444 @@
+/*
+ * Copyright 2006 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef FindText")
+cpp_quote("#endif")
+
+typedef enum tagTomConstants
+{
+    tomFalse       = 0,
+    tomTrue        = -1,
+    tomUndefined   = -9999999,
+    tomToggle      = -9999998,
+    tomAutoColor   = -9999997,
+    tomDefault     = -9999996,
+    tomSuspend     = -9999995,
+    tomResume      = -9999994,
+    tomApplyNow    = 0,
+    tomApplyLater  = 1,
+    tomTrackParms  = 2,
+    tomCacheParms  = 3,
+    tomBackward    = 0xc0000001,
+    tomForward     = 0x3fffffff,
+    tomMove        = 0,
+    tomExtend      = 1,
+    tomNoSelection          = 0,
+    tomSelectionIP          = 1,
+    tomSelectionNormal      = 2,
+    tomSelectionFrame       = 3,
+    tomSelectionColumn      = 4,
+    tomSelectionRow         = 5,
+    tomSelectionBlock       = 6,
+    tomSelectionInlineShape = 7,
+    tomSelectionShape       = 8,
+    tomSelStartActive = 1,
+    tomSelAtEOL       = 2,
+    tomSelOvertype    = 4,
+    tomSelActive      = 8,
+    tomSelReplace     = 16,
+    tomEnd   = 0,
+    tomStart = 32,
+    tomCollapseEnd   = 0,
+    tomCollapseStart = 1,
+    tomClientCoord = 256,
+    tomNone       = 0,
+    tomSingle     = 1,
+    tomWords      = 2,
+    tomDouble     = 3,
+    tomDotted     = 4,
+    tomDash       = 5,
+    tomDashDot    = 6,
+    tomDashDotDot = 7,
+    tomWave       = 8,
+    tomThick      = 9,
+    tomHair       = 10,
+    tomLineSpaceSingle   = 0,
+    tomLineSpace1pt5     = 1,
+    tomLineSpaceDouble   = 2,
+    tomLineSpaceAtLeast  = 3,
+    tomLineSpaceExactly  = 4,
+    tomLineSpaceMultiple = 5,
+    tomAlignLeft        = 0,
+    tomAlignCenter      = 1,
+    tomAlignRight       = 2,
+    tomAlignJustify     = 3,
+    tomAlignDecimal     = 3,
+    tomAlignBar         = 4,
+    tomAlignInterWord   = 3,
+    tomAlignInterLetter = 4,
+    tomAlignScaled      = 5,
+    tomAlignGlyphs      = 6,
+    tomAlignSnapGrid    = 7,
+    tomSpaces     = 0,
+    tomDots       = 1,
+    tomDashes     = 2,
+    tomLines      = 3,
+    tomThickLines = 4,
+    tomEquals     = 5,
+    tomTabBack = -3,
+    tomTabNext = -2,
+    tomTabHere = -1,
+    tomListBullet           = 1,
+    tomListNumberAsArabic   = 2,
+    tomListNumberAsLCLetter = 3,
+    tomListNumberAsUCLetter = 4,
+    tomListNumberAsLCRoman  = 5,
+    tomListNumberAsUCRoman  = 6,
+    tomListNumberAsSequence = 7,
+    tomListParentheses      = 0x10000,
+    tomListPeriod           = 0x20000,
+    tomListPlain            = 0x30000,
+    tomCharacter  = 1,
+    tomWord       = 2,
+    tomSentence   = 3,
+    tomParagraph  = 4,
+    tomLine       = 5,
+    tomStory      = 6,
+    tomScreen     = 7,
+    tomSection    = 8,
+    tomColumn     = 9,
+    tomRow        = 10,
+    tomWindow     = 11,
+    tomCell       = 12,
+    tomCharFormat = 13,
+    tomParaFormat = 14,
+    tomTable      = 15,
+    tomObject     = 16,
+    tomMatchWord    = 2,
+    tomMatchCase    = 4,
+    tomMatchPattern = 8,
+    tomUnknownStory         = 0,
+    tomMainTextStory        = 1,
+    tomFootnotesStory       = 2,
+    tomEndnotesStory        = 3,
+    tomCommentsStory        = 4,
+    tomTextFrameStory       = 5,
+    tomEvenPagesHeaderStory = 6,
+    tomPrimaryHeaderStory   = 7,
+    tomEvenPagesFooterStory = 8,
+    tomPrimaryFooterStory   = 9,
+    tomFirstPageHeaderStory = 10,
+    tomFirstPageFooterStory = 11,
+    tomNoAnimation        = 0,
+    tomLasVegasLights     = 1,
+    tomBlinkingBackground = 2,
+    tomSparkleText        = 3,
+    tomMarchingBlackAnts  = 4,
+    tomMarchingRedAnts    = 5,
+    tomShimmer            = 6,
+    tomWipeDown           = 7,
+    tomWipeRight          = 8,
+    tomAnimationMax       = 8,
+    tomLowerCase     = 0,
+    tomUpperCase     = 1,
+    tomTitleCase     = 2,
+    tomSentenceCase  = 4,
+    tomToggleCase    = 5,
+    tomReadOnly         = 0x100,
+    tomShareDenyRead    = 0x200,
+    tomShareDenyWrite   = 0x400,
+    tomPasteFile        = 0x1000,
+    tomCreateNew        = 0x10,
+    tomCreateAlways     = 0x20,
+    tomOpenExisting     = 0x30,
+    tomOpenAlways       = 0x40,
+    tomTruncateExisting = 0x50,
+    tomRTF              = 0x1,
+    tomText             = 0x2,
+    tomHTML             = 0x3,
+    tomWordDocument     = 0x4,
+    tomBold      = 0x80000001,
+    tomItalic    = 0x80000002,
+    tomUnderline = 0x80000004,
+    tomStrikeout = 0x80000008,
+    tomProtected = 0x80000010,
+    tomLink      = 0x80000020,
+    tomSmallCaps = 0x80000040,
+    tomAllCaps   = 0x80000080,
+    tomHidden    = 0x80000100,
+    tomOutline   = 0x80000200,
+    tomShadow    = 0x80000400,
+    tomEmboss    = 0x80000800,
+    tomImprint   = 0x80001000,
+    tomDisabled  = 0x80002000,
+    tomRevised   = 0x80004000,
+    tomNormalCaret      = 0,
+    tomKoreanBlockCaret = 0x1,
+    tomIncludeInset = 0x1,
+    tomIgnoreCurrentFont  = 0,
+    tomMatchFontCharset   = 0x1,
+    tomMatchFontSignature = 0x2,
+    tomCharset = 0x80000000,
+    tomRE10Mode = 0x1,
+    tomNoIME   = 0x80000,
+    tomSelfIME = 0x40000
+} tomConstants;
+
+interface ITextRange;
+interface ITextSelection;
+interface ITextStoryRanges;
+
+[
+  object,
+  uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextDocument : IDispatch
+{
+    HRESULT GetName([retval, out]BSTR *pName);
+    HRESULT GetSelection([retval, out]ITextSelection **ppSel);
+    HRESULT GetStoryCount([retval, out]LONG *pCount);
+    HRESULT GetStoryRanges([retval, out]ITextStoryRanges **ppStories);
+    HRESULT GetSaved([retval, out]LONG *pValue);
+    HRESULT SetSaved([in]LONG Value);
+    HRESULT GetDefaultTabStop([retval, out]float *pValue);
+    HRESULT SetDefaultTabStop([in]float Value);
+    HRESULT New();
+    HRESULT Open([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);
+    HRESULT Save([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);
+    HRESULT Freeze([retval, out]LONG *pCount);
+    HRESULT Unfreeze([retval, out]LONG *pCount);
+    HRESULT BeginEditCollection();
+    HRESULT EndEditCollection();
+    HRESULT Undo([in]LONG Count, [retval, out]LONG *prop);
+    HRESULT Redo([in]LONG Count, [retval, out]LONG *prop);
+    HRESULT Range([in]LONG cp1, [in]LONG cp2, [retval, out]ITextRange **ppRange);
+    HRESULT RangeFromPoint([in]LONG x, [in]LONG y, [retval, out]ITextRange **ppRange);
+}
+
+interface ITextFont;
+interface ITextPara;
+
+[
+  object,
+  uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextRange : IDispatch
+{
+    HRESULT GetText([retval, out]BSTR *pbstr);
+    HRESULT SetText([in]BSTR bstr);
+    HRESULT GetChar([retval, out]LONG *pch);
+    HRESULT SetChar([in]LONG ch);
+    HRESULT GetDuplicate([retval, out]ITextRange **ppRange);
+    HRESULT GetFormattedText([retval, out]ITextRange **ppRange);
+    HRESULT SetFormattedText([in]ITextRange *pRange);
+    HRESULT GetStart([retval, out]LONG *pcpFirst);
+    HRESULT SetStart([in]LONG cpFirst);
+    HRESULT GetEnd([retval, out]LONG *pcpLim);
+    HRESULT SetEnd([in]LONG cpLim);
+    HRESULT GetFont([retval, out]ITextFont **pFont);
+    HRESULT SetFont([in]ITextFont *pFont);
+    HRESULT GetPara([retval, out]ITextPara **ppPara);
+    HRESULT SetPara([in]ITextPara *pPara);
+    HRESULT GetStoryLength([retval, out]LONG *pcch);
+    HRESULT GetStoryType([retval, out]LONG *pValue);
+    HRESULT Collapse([in]LONG bStart);
+    HRESULT Expand([in]LONG Unit, [retval, out]LONG *pDelta);
+    HRESULT GetIndex([in]LONG Unit, [retval, out]LONG *pIndex);
+    HRESULT SetIndex([in]LONG Unit, [in]LONG Index, [in]LONG Extend);
+    HRESULT SetRange([in]LONG cpActive, [in]LONG cpOther);
+    HRESULT InRange([in]ITextRange *pRange, [retval, out]LONG *pb);
+    HRESULT InStory([in]ITextRange *pRange, [retval, out]LONG *pb);
+    HRESULT IsEqual([in]ITextRange *pRange, [retval, out]LONG *pb);
+    HRESULT Select();
+    HRESULT StartOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT EndOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT Move([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveStart([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveEnd([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveStartWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveEndWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveStartUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT MoveEndUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT FindText([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
+    HRESULT FindTextStart([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
+    HRESULT FindTextEnd([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
+    HRESULT Delete([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+    HRESULT Cut([out]VARIANT *pVar);
+    HRESULT Copy([out]VARIANT *pVar);
+    HRESULT Paste([in]VARIANT *pVar, [in]LONG Format);
+    HRESULT CanPaste([in]VARIANT *pVar, [in]LONG Format, [retval, out]LONG *pb);
+    HRESULT CanEdit([retval, out]LONG *pb);
+    HRESULT ChangeCase([in]LONG Type);
+    HRESULT GetPoint([in]LONG Type, [out]LONG *cx, [out]LONG *cy);
+    HRESULT SetPoint([in]LONG x, [in]LONG y, [in]LONG Type, [in]LONG Extend);
+    HRESULT ScrollIntoView([in]LONG Value);
+    HRESULT GetEmbeddedObject([retval, out]IUnknown **ppv);
+}
+
+[
+  object,
+  uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextSelection : ITextRange
+{
+    HRESULT GetFlags([retval, out]LONG *pFlags);
+    HRESULT SetFlags([in]LONG Flags);
+    HRESULT GetType([retval, out]LONG *pType);
+    HRESULT MoveLeft([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT MoveRight([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT MoveUp([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT MoveDown([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT HomeKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT EndKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+    HRESULT TypeText([in]BSTR bstr);
+}
+
+[
+  object,
+  uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextFont : IDispatch
+{
+    HRESULT GetDuplicate([retval, out]ITextFont **ppFont);
+    HRESULT SetDuplicate([in]ITextFont *pFont);
+    HRESULT CanChange([out]LONG *pB);
+    HRESULT IsEqual([in]ITextFont *pFont, [retval, out]LONG *pB);
+    HRESULT Reset([in]LONG Value);
+    HRESULT GetStyle([retval, out]LONG *pValue);
+    HRESULT SetStyle([in]LONG Value);
+    HRESULT GetAllCaps([retval, out]LONG *pValue);
+    HRESULT SetAllCaps([in]LONG Value);
+    HRESULT GetAnimation([retval, out]LONG *pValue);
+    HRESULT SetAnimation([in]LONG Value);
+    HRESULT GetBackColor([retval, out]LONG *pValue);
+    HRESULT SetBackColor([in]LONG Value);
+    HRESULT GetBold([retval, out]LONG *pValue);
+    HRESULT SetBold([in]LONG Value);
+    HRESULT GetEmboss([retval, out]LONG *pValue);
+    HRESULT SetEmboss([in]LONG Value);
+    HRESULT GetForeColor([retval, out]LONG *pValue);
+    HRESULT SetForeColor([in]LONG Value);
+    HRESULT GetHidden([retval, out]LONG *pValue);
+    HRESULT SetHidden([in]LONG Value);
+    HRESULT GetEngrave([retval, out]LONG *pValue);
+    HRESULT SetEngrave([in]LONG Value);
+    HRESULT GetItalic([retval, out]LONG *pValue);
+    HRESULT SetItalic([in]LONG Value);
+    HRESULT GetKerning([retval, out]LONG *pValue);
+    HRESULT SetKerning([in]LONG Value);
+    HRESULT GetLanguageID([retval, out]LONG *pValue);
+    HRESULT SetLanguageID([in]LONG Value);
+    HRESULT GetName([retval, out]BSTR *pValue);
+    HRESULT SetName([in]BSTR Value);
+    HRESULT GetOutline([retval, out]LONG *pValue);
+    HRESULT SetOutline([in]LONG Value);
+    HRESULT GetPosition([retval, out]LONG *pValue);
+    HRESULT SetPosition([in]LONG Value);
+    HRESULT GetProtected([retval, out]LONG *pValue);
+    HRESULT SetProtected([in]LONG Value);
+    HRESULT GetShadow([retval, out]LONG *pValue);
+    HRESULT SetShadow([in]LONG Value);
+    HRESULT GetSize([retval, out]LONG *pValue);
+    HRESULT SetSize([in]LONG Value);
+    HRESULT GetSmallCaps([retval, out]LONG *pValue);
+    HRESULT SetSmallCaps([in]LONG Value);
+    HRESULT GetSpacing([retval, out]float *pValue);
+    HRESULT SetSpacing([in]float Value);
+    HRESULT GetStrikeThrough([retval, out]LONG *pValue);
+    HRESULT SetStrikeThrough([in]LONG Value);
+    HRESULT GetSubscript([retval, out]LONG *pValue);
+    HRESULT SetSubscript([in]LONG Value);
+    HRESULT GetSuperscript([retval, out]LONG *pValue);
+    HRESULT SetSuperscript([in]LONG Value);
+    HRESULT GetUnderline([retval, out]LONG *pValue);
+    HRESULT SetUnderline([in]LONG Value);
+    HRESULT GetWeight([retval, out]LONG *pValue);
+    HRESULT SetWeight([in]LONG Value);
+}
+
+[
+  object,
+  uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextPara : IDispatch
+{
+    HRESULT GetDuplicate([retval, out]ITextPara **ppPara);
+    HRESULT SetDuplicate([in]ITextPara *pPara);
+    HRESULT CanChange([out]LONG *pB);
+    HRESULT IsEqual([in]ITextPara *pPara, [retval, out]LONG *pB);
+    HRESULT Reset([in]LONG Value);
+    HRESULT GetStyle([retval, out]LONG *pValue);
+    HRESULT SetStyle([in]LONG Value);
+    HRESULT GetAlignment([retval, out]LONG *pValue);
+    HRESULT SetAlignment([in]LONG Value);
+    HRESULT GetHyphenation([retval, out]LONG *pValue);
+    HRESULT SetHyphenation([in]LONG Value);
+    HRESULT GetFirstLineIndent([retval, out]float *pValue);
+    HRESULT GetKeepTogether([retval, out]LONG *pValue);
+    HRESULT SetKeepTogether([in]LONG Value);
+    HRESULT GetKeepWithNext([retval, out]LONG *pValue);
+    HRESULT SetKeepWithNext([in]LONG Value);
+    HRESULT GetLeftIndent([retval, out]float *pValue);
+    HRESULT GetLineSpacing([retval, out]float *pValue);
+    HRESULT GetLineSpacingRule([retval, out]LONG *pValue);
+    HRESULT GetListAlignment([retval, out]LONG *pValue);
+    HRESULT SetListAlignment([in]LONG Value);
+    HRESULT GetListLevelIndex([retval, out]LONG *pValue);
+    HRESULT SetListLevelIndex([in]LONG Value);
+    HRESULT GetListStart([retval, out]LONG *pValue);
+    HRESULT SetListStart([in]LONG Value);
+    HRESULT GetListTab([retval, out]LONG *pValue);
+    HRESULT SetListTab([in]LONG Value);
+    HRESULT GetListType([retval, out]LONG *pValue);
+    HRESULT SetListType([in]LONG Value);
+    HRESULT GetNoLineNumber([retval, out]LONG *pValue);
+    HRESULT SetNoLineNumber([in]LONG Value);
+    HRESULT GetPageBreakBefore([retval, out]LONG *pValue);
+    HRESULT SetPageBreakBefore([in]LONG Value);
+    HRESULT GetRightIndent([retval, out]float *pValue);
+    HRESULT SetRightIndent([in]float Value);
+    HRESULT SetIndents([in]float StartIndent, [in]float LeftIndent, [in]float RightIndent);
+    HRESULT SetLineSpacing([in]LONG LineSpacingRule, [in]float LineSpacing);
+    HRESULT GetSpaceAfter([retval, out]float *pValue);
+    HRESULT SetSpaceAfter([in]float Value);
+    HRESULT GetSpaceBefore([retval, out]float *pValue);
+    HRESULT SetSpaceBefore([in]float Value);
+    HRESULT GetWindowControl([retval, out]float *pValue);
+    HRESULT SetWindowControl([in]float Value);
+    HRESULT GetTabCount([retval, out]LONG *pCount);
+    HRESULT AddTab([in]float tbPos, [in]LONG tbAlign, [in]LONG tbLeader);
+    HRESULT ClearAllTabs();
+    HRESULT DeleteTab([in]float tbPos);
+    HRESULT GetTab([in]LONG iTab, [out]float *ptbPos, [out]LONG *ptbAlign, [out]LONG *ptbLeader);
+}
+
+[
+  object,
+  uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextStoryRanges : IDispatch
+{
+    HRESULT _NewEnum([retval, out]IUnknown **ppUnkEnum);
+    HRESULT Item([in]LONG Index, [retval, out]ITextRange **ppRange);
+    HRESULT GetCount([retval, out]LONG *pCount);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h
new file mode 100644
index 0000000..7651c57
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h
@@ -0,0 +1,57 @@
+/*
+ * TRAFFIC definitions
+ *
+ * Copyright (c) 2009 Stefan Leichter
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TRAFFIC_H
+#define __WINE_TRAFFIC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef VOID (CALLBACK * TCI_ADD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);
+typedef VOID (CALLBACK * TCI_DEL_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);
+typedef VOID (CALLBACK * TCI_MOD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);
+typedef VOID (CALLBACK * TCI_NOTIFY_HANDLER)
+                              (HANDLE,HANDLE,ULONG,HANDLE,ULONG,PVOID);
+
+typedef struct _TCI_CLIENT_FUNC_LIST
+{
+    TCI_NOTIFY_HANDLER ClNotifyHandler;
+    TCI_ADD_FLOW_COMPLETE_HANDLER ClAddFlowCompleteHandler;
+    TCI_MOD_FLOW_COMPLETE_HANDLER ClModifyFlowCompleteHandler;
+    TCI_DEL_FLOW_COMPLETE_HANDLER ClDeleteFlowCompleteHandler;
+} TCI_CLIENT_FUNC_LIST, *PTCI_CLIENT_FUNC_LIST;
+
+ULONG WINAPI TcRegisterClient(ULONG,HANDLE,PTCI_CLIENT_FUNC_LIST,PHANDLE);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_TRAFFIC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl
new file mode 100644
index 0000000..16bcc85
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl
@@ -0,0 +1,235 @@
+/*
+ * Copyright (C) 2013 Daniel Jeliński
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#include <winerror.h>")
+
+interface ITransaction;
+interface ITransactionCloner;
+interface ITransaction2;
+interface ITransactionDispenser;
+interface ITransactionOptions;
+interface ITransactionOutcomeEvents;
+interface ITmNodeName;
+
+typedef struct BOID {
+    byte rgb[16];
+} BOID;
+
+cpp_quote("#ifndef MAX_TRAN_DESC_DEFINED")
+cpp_quote("#define MAX_TRAN_DESC_DEFINED")
+typedef enum TX_MISC_CONSTANTS {
+    MAX_TRAN_DESC = 40
+} TX_MISC_CONSTANTS;
+cpp_quote("#endif")
+
+typedef BOID XACTUOW;
+typedef LONG ISOLEVEL;
+
+typedef enum ISOLATIONLEVEL {
+    ISOLATIONLEVEL_UNSPECIFIED = 0xffffffff,
+    ISOLATIONLEVEL_CHAOS = 0x10,
+    ISOLATIONLEVEL_READUNCOMMITTED = 0x100,
+    ISOLATIONLEVEL_BROWSE = 0x100,
+    ISOLATIONLEVEL_CURSORSTABILITY = 0x1000,
+    ISOLATIONLEVEL_READCOMMITTED = 0x1000,
+    ISOLATIONLEVEL_REPEATABLEREAD = 0x10000,
+    ISOLATIONLEVEL_SERIALIZABLE = 0x100000,
+    ISOLATIONLEVEL_ISOLATED = 0x100000
+} ISOLATIONLEVEL;
+
+typedef struct XACTTRANSINFO {
+    XACTUOW uow;
+    ISOLEVEL isoLevel;
+    ULONG isoFlags;
+    DWORD grfTCSupported;
+    DWORD grfRMSupported;
+    DWORD grfTCSupportedRetaining;
+    DWORD grfRMSupportedRetaining;
+} XACTTRANSINFO;
+
+typedef struct XACTSTATS {
+    ULONG cOpen;
+    ULONG cCommitting;
+    ULONG cCommitted;
+    ULONG cAborting;
+    ULONG cAborted;
+    ULONG cInDoubt;
+    ULONG cHeuristicDecision;
+    FILETIME timeTransactionsUp;
+} XACTSTATS;
+
+typedef enum ISOFLAG {
+    ISOFLAG_RETAIN_COMMIT_DC = 1,
+    ISOFLAG_RETAIN_COMMIT = 2,
+    ISOFLAG_RETAIN_COMMIT_NO = 3,
+    ISOFLAG_RETAIN_ABORT_DC = 4,
+    ISOFLAG_RETAIN_ABORT = 8,
+    ISOFLAG_RETAIN_ABORT_NO = 12,
+    ISOFLAG_RETAIN_DONTCARE = ISOFLAG_RETAIN_COMMIT_DC | ISOFLAG_RETAIN_ABORT_DC,
+    ISOFLAG_RETAIN_BOTH = ISOFLAG_RETAIN_COMMIT | ISOFLAG_RETAIN_ABORT,
+    ISOFLAG_RETAIN_NONE = ISOFLAG_RETAIN_COMMIT_NO | ISOFLAG_RETAIN_ABORT_NO,
+    ISOFLAG_OPTIMISTIC = 16,
+    ISOFLAG_READONLY = 32
+} ISOFLAG;
+
+typedef enum XACTTC {
+    XACTTC_NONE = 0,
+    XACTTC_SYNC_PHASEONE = 1,
+    XACTTC_SYNC_PHASETWO = 2,
+    XACTTC_SYNC = 2,
+    XACTTC_ASYNC_PHASEONE = 4,
+    XACTTC_ASYNC = 4
+} XACTTC;
+
+typedef enum XACTRM {
+    XACTRM_OPTIMISTICLASTWINS = 1,
+    XACTRM_NOREADONLYPREPARES
+} XACTRM;
+
+typedef enum XACTCONST {
+    XACTCONST_TIMEOUTINFINITE
+} XACTCONST;
+
+typedef enum XACTHEURISTIC {
+    XACTHEURISTIC_ABORT = 1,
+    XACTHEURISTIC_COMMIT,
+    XACTHEURISTIC_DAMAGE,
+    XACTHEURISTIC_DANGER
+} XACTHEURISTIC;
+
+typedef enum XACTSTAT {
+    XACTSTAT_NONE = 0,
+    XACTSTAT_OPENNORMAL = 0x1,
+    XACTSTAT_OPENREFUSED = 0x2,
+    XACTSTAT_PREPARING = 0x4,
+    XACTSTAT_PREPARED = 0x8,
+    XACTSTAT_PREPARERETAINING = 0x10,
+    XACTSTAT_PREPARERETAINED = 0x20,
+    XACTSTAT_COMMITTING = 0x40,
+    XACTSTAT_COMMITRETAINING = 0x80,
+    XACTSTAT_ABORTING = 0x100,
+    XACTSTAT_ABORTED = 0x200,
+    XACTSTAT_COMMITTED = 0x400,
+    XACTSTAT_HEURISTIC_ABORT = 0x800,
+    XACTSTAT_HEURISTIC_COMMIT = 0x1000,
+    XACTSTAT_HEURISTIC_DAMAGE = 0x2000,
+    XACTSTAT_HEURISTIC_DANGER = 0x4000,
+    XACTSTAT_FORCED_ABORT = 0x8000,
+    XACTSTAT_FORCED_COMMIT = 0x10000,
+    XACTSTAT_INDOUBT = 0x20000,
+    XACTSTAT_CLOSED = 0x40000,
+    XACTSTAT_OPEN = 0x3,
+    XACTSTAT_NOTPREPARED = 0x7ffc3,
+    XACTSTAT_ALL = 0x7ffff
+} XACTSTAT;
+
+typedef struct XACTOPT {
+    ULONG ulTimeout;
+    char szDescription[40 ];
+} XACTOPT;
+
+[
+    object,
+    uuid(0fb15084-af41-11ce-bd2b-204c4f4f5020)
+]
+interface ITransaction : IUnknown {
+    HRESULT Commit([in] BOOL fRetaining,
+                   [in] DWORD grfTC,
+                   [in] DWORD grfRM);
+    HRESULT Abort([in, unique] BOID *pboidReason,
+                  [in] BOOL fRetaining,
+                  [in] BOOL fAsync);
+    HRESULT GetTransactionInfo([out] XACTTRANSINFO *pinfo);
+};
+
+[
+    object,
+    uuid(02656950-2152-11d0-944C-00A0C905416E)
+]
+interface ITransactionCloner : ITransaction {
+    HRESULT CloneWithCommitDisabled([out] ITransaction **ppITransaction);
+};
+
+[
+    object,
+    uuid(34021548-0065-11d3-bac1-00c04f797be2)
+]
+interface ITransaction2 : ITransactionCloner {
+    HRESULT GetTransactionInfo2([out] XACTTRANSINFO *pinfo);
+};
+
+[
+    object,
+    uuid(3A6AD9E1-23B9-11cf-AD60-00AA00A74CCD)
+]
+interface ITransactionDispenser : IUnknown {
+    HRESULT GetOptionsObject([out] ITransactionOptions **ppOptions);
+    HRESULT BeginTransaction([in, unique] IUnknown *punkOuter,
+                             [in] ISOLEVEL isoLevel,
+                             [in] ULONG isoFlags,
+                             [in, unique] ITransactionOptions *pOptions,
+                             [out] ITransaction **ppTransaction);
+};
+
+[
+    object,
+    uuid(3A6AD9E0-23B9-11cf-AD60-00AA00A74CCD)
+]
+interface ITransactionOptions : IUnknown {
+    HRESULT SetOptions([in] XACTOPT *pOptions);
+    HRESULT GetOptions([in, out] XACTOPT *pOptions);
+};
+
+[
+    object,
+    uuid(3A6AD9E2-23B9-11cf-AD60-00AA00A74CCD)
+]
+interface ITransactionOutcomeEvents : IUnknown {
+    HRESULT Committed([in] BOOL fRetaining,
+                      [in, unique] XACTUOW *pNewUOW,
+                      [in] HRESULT hr);
+    HRESULT Aborted([in, unique] BOID *pboidReason,
+                    [in] BOOL fRetaining,
+                    [in, unique] XACTUOW *pNewUOW,
+                    [in] HRESULT hr);
+    HRESULT HeuristicDecision([in] DWORD dwDecision,
+                              [in, unique] BOID *pboidReason,
+                              [in] HRESULT hr);
+    HRESULT Indoubt(void);
+};
+
+[
+    object,
+    uuid(30274F88-6EE4-474e-9B95-7807BC9EF8CF)
+]
+interface ITmNodeName : IUnknown {
+    HRESULT GetNodeNameSize([out] ULONG *pcbNodeNameSize);
+    HRESULT GetNodeName([in] ULONG cbNodeNameBufferSize,
+                        [in, out] LPWSTR pNodeNameBuffer);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h
new file mode 100644
index 0000000..bdbda47
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h
@@ -0,0 +1,1849 @@
+/* ======================================================================== *\
+
+  Copyright (C) 1991, 1992 TWAIN Working Group: Aldus, Caere, Eastman-Kodak,
+  Hewlett-Packard and Logitech Corporations.  All rights reserved.
+
+  Copyright (C) 1997 TWAIN Working Group: Bell+Howell, Canon, DocuMagix,
+  Fujitsu, Genoa Technology, Hewlett-Packard, Kofax Imaging Products, and
+  Ricoh Corporation.  All rights reserved.
+
+  Copyright (C) 1998 TWAIN Working Group: Adobe Systems Incorporated,
+  Canon Information Systems, Eastman Kodak Company,
+  Fujitsu Computer Products of America, Genoa Technology,
+  Hewlett-Packard Company, Intel Corporation, Kofax Image Products,
+  JFL Peripheral Solutions Inc., Ricoh Corporation, and Xerox Corporation.
+  All rights reserved.
+
+  TWAIN.h -  This is the definitive include file for applications and
+          data sources written to the TWAIN specification.
+          It defines constants, data structures, messages etc.
+          for the public interface to TWAIN.
+
+  Revision History:
+    version 1.0, March 6, 1992.  TWAIN 1.0.
+    version 1.1, January 1993.   Tech Notes 1.1
+    version 1.5, June 1993.      Specification Update 1.5
+                                 Change DC to TW
+                                 Change filename from DC.H to TWAIN.H
+    version 1.5, July 1993.      Remove spaces from country identifiers
+
+    version 1.7, July 1997       Added Capabilities and data structure for
+                                 document imaging and digital cameras.
+                                 KHL.
+    version 1.7, July 1997       Inserted Borland compatible structure packing
+                                 directives provided by Mentor.  JMH
+    version 1.7, Aug 1997        Expanded file tabs to spaces.
+                                 NOTE: future authors should be sure to have
+                                 their editors set to automatically expand tabs
+                                 to spaces (original tab setting was 4 spaces).
+    version 1.7, Sept 1997       Added job control values
+                                 Added return codes
+    version 1.7, Sept 1997       changed definition of pRGBRESPONSE to
+                                 pTW_RGBRESPONSE
+    version 1.7  Aug 1998        Added missing TWEI_BARCODEROTATION values
+                                 TWBCOR_ types JMH
+    version 1.8  August 1998     Added new types and definitions required
+                                 for 1.8 Specification JMH
+    version 1.8  January 1999    Changed search mode from SRCH_ to TWBD_ as
+                                 in 1.8 Specification, added TWBT_MAXICODE	JMH
+    version 1.8  January 1999    Removed undocumented duplicate AUTO<cap> JMH
+\* ======================================================================== */
+
+#ifndef TWAIN
+#define TWAIN
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+
+/* The Twain structures must be packed on 2 byte alignment */
+#include "pshpack2.h"
+
+#undef FAR
+#define FAR
+
+/****************************************************************************
+ * TWAIN Version                                                            *
+ ****************************************************************************/
+#define TWON_PROTOCOLMINOR   8        /* Changed for Version 1.8            */
+#define TWON_PROTOCOLMAJOR   1
+
+/****************************************************************************
+ * Platform Dependent Definitions and Typedefs                              *
+ ****************************************************************************/
+
+/* Define one of the following, depending on the platform */
+/* #define _MAC_   */
+/* #define _UNIX_  */
+#define _MSWIN_
+
+#ifdef  _MSWIN_
+    typedef HANDLE         TW_HANDLE;
+    typedef LPVOID         TW_MEMREF;
+    typedef BYTE         * HPBYTE;
+    typedef void         * HPVOID;
+#endif  /* _MSWIN_ */
+
+#ifdef  _MAC_
+#define PASCAL         pascal
+#define FAR
+    typedef Handle         TW_HANDLE;
+    typedef char          *TW_MEMREF;
+#endif  /* _MAC_ */
+
+#ifdef  _UNIX_
+/*    #define PASCAL         pascal */
+#define FAR
+    typedef unsigned char *TW_HANDLE;
+    typedef unsigned char *TW_MEMREF;
+#endif  /* _UNIX_ */
+
+/****************************************************************************
+ * Type Definitions                                                         *
+ ****************************************************************************/
+
+/* String types. These include room for the strings and a NULL char,     *
+ * or, on the Mac, a length byte followed by the string.                 *
+ * TW_STR255 must hold less than 256 chars so length fits in first byte. */
+typedef char    TW_STR32[34],     FAR *pTW_STR32;
+typedef char    TW_STR64[66],     FAR *pTW_STR64;
+typedef char    TW_STR128[130],   FAR *pTW_STR128;
+typedef char    TW_STR255[256],   FAR *pTW_STR255;
+
+/* Numeric types. */
+typedef char           TW_INT8,   FAR *pTW_INT8;
+typedef short          TW_INT16,  FAR *pTW_INT16;
+typedef LONG           TW_INT32,  FAR *pTW_INT32;
+typedef unsigned char  TW_UINT8,  FAR *pTW_UINT8;
+typedef unsigned short TW_UINT16, FAR *pTW_UINT16;
+typedef ULONG          TW_UINT32, FAR *pTW_UINT32;
+typedef unsigned short TW_BOOL,   FAR *pTW_BOOL;
+
+/* Fixed point structure type. */
+typedef struct {
+    TW_INT16     Whole;        /* maintains the sign */
+    TW_UINT16    Frac;
+} TW_FIX32,  FAR *pTW_FIX32;
+
+/****************************************************************************
+ * Structure Definitions                                                    *
+ ****************************************************************************/
+
+/* No DAT needed. */
+typedef struct {
+   TW_FIX32   X;
+   TW_FIX32   Y;
+   TW_FIX32   Z;
+} TW_CIEPOINT, FAR * pTW_CIEPOINT;
+
+/* No DAT needed. */
+typedef struct {
+   TW_FIX32   StartIn;
+   TW_FIX32   BreakIn;
+   TW_FIX32   EndIn;
+   TW_FIX32   StartOut;
+   TW_FIX32   BreakOut;
+   TW_FIX32   EndOut;
+   TW_FIX32   Gamma;
+   TW_FIX32   SampleCount;  /* if =0 use the gamma */
+} TW_DECODEFUNCTION, FAR * pTW_DECODEFUNCTION;
+
+/* No DAT needed. */
+typedef struct {
+   TW_UINT8    Index;    /* Value used to index into the color table. */
+   TW_UINT8    Channel1; /* First  tri-stimulus value (e.g Red)       */
+   TW_UINT8    Channel2; /* Second tri-stimulus value (e.g Green)     */
+   TW_UINT8    Channel3; /* Third  tri-stimulus value (e.g Blue)      */
+} TW_ELEMENT8, FAR * pTW_ELEMENT8;
+
+/* No DAT.  Defines a frame rectangle in ICAP_UNITS coordinates. */
+typedef struct {
+   TW_FIX32   Left;
+   TW_FIX32   Top;
+   TW_FIX32   Right;
+   TW_FIX32   Bottom;
+} TW_FRAME, FAR * pTW_FRAME;
+
+/* No DAT needed.  Used to manage memory buffers. */
+typedef struct {
+   TW_UINT32  Flags;  /* Any combination of the TWMF_ constants.           */
+   TW_UINT32  Length; /* Number of bytes stored in buffer TheMem.          */
+   TW_MEMREF  TheMem; /* Pointer or handle to the allocated memory buffer. */
+} TW_MEMORY, FAR * pTW_MEMORY;
+
+/* No DAT needed. */
+typedef struct {
+   TW_DECODEFUNCTION   Decode[3];
+   TW_FIX32            Mix[3][3];
+} TW_TRANSFORMSTAGE, FAR * pTW_TRANSFORMSTAGE;
+
+/* No DAT needed.  Describes version of software currently running. */
+typedef struct {
+   TW_UINT16  MajorNum;  /* Major revision number of the software. */
+   TW_UINT16  MinorNum;  /* Incremental revision number of the software. */
+   TW_UINT16  Language;  /* e.g. TWLG_SWISSFRENCH */
+   TW_UINT16  Country;   /* e.g. TWCY_SWITZERLAND */
+   TW_STR32   Info;      /* e.g. "1.0b3 Beta release" */
+} TW_VERSION, FAR * pTW_VERSION;
+
+/* TWON_ARRAY. Container for array of values (a simplified TW_ENUMERATION) */
+typedef struct {
+   TW_UINT16  ItemType;
+   TW_UINT32  NumItems;    /* How many items in ItemList           */
+   TW_UINT8   ItemList[1]; /* Array of ItemType values starts here */
+} TW_ARRAY, FAR * pTW_ARRAY;
+
+/* TWON_ENUMERATION. Container for a collection of values. */
+typedef struct {
+   TW_UINT16  ItemType;
+   TW_UINT32  NumItems;     /* How many items in ItemList                 */
+   TW_UINT32  CurrentIndex; /* Current value is in ItemList[CurrentIndex] */
+   TW_UINT32  DefaultIndex; /* Powerup value is in ItemList[DefaultIndex] */
+   TW_UINT8   ItemList[1];  /* Array of ItemType values starts here       */
+} TW_ENUMERATION, FAR * pTW_ENUMERATION;
+
+/* TWON_ONEVALUE. Container for one value. */
+typedef struct {
+   TW_UINT16  ItemType;
+   TW_UINT32  Item;
+} TW_ONEVALUE, FAR * pTW_ONEVALUE;
+
+/* TWON_RANGE. Container for a range of values. */
+typedef struct {
+   TW_UINT16  ItemType;
+   TW_UINT32  MinValue;     /* Starting value in the range.           */
+   TW_UINT32  MaxValue;     /* Final value in the range.              */
+   TW_UINT32  StepSize;     /* Increment from MinValue to MaxValue.   */
+   TW_UINT32  DefaultValue; /* Power-up value.                        */
+   TW_UINT32  CurrentValue; /* The value that is currently in effect. */
+} TW_RANGE, FAR * pTW_RANGE;
+
+/* DAT_CAPABILITY. Used by application to get/set capability from/in a data source. */
+typedef struct {
+   TW_UINT16  Cap; /* id of capability to set or get, e.g. CAP_BRIGHTNESS */
+   TW_UINT16  ConType; /* TWON_ONEVALUE, _RANGE, _ENUMERATION or _ARRAY   */
+   TW_HANDLE  hContainer; /* Handle to container of type Dat              */
+} TW_CAPABILITY, FAR * pTW_CAPABILITY;
+
+/* DAT_CIECOLOR. */
+typedef struct {
+   TW_UINT16           ColorSpace;
+   TW_INT16            LowEndian;
+   TW_INT16            DeviceDependent;
+   TW_INT32            VersionNumber;
+   TW_TRANSFORMSTAGE   StageABC;
+   TW_TRANSFORMSTAGE   StageLMN;
+   TW_CIEPOINT         WhitePoint;
+   TW_CIEPOINT         BlackPoint;
+   TW_CIEPOINT         WhitePaper;
+   TW_CIEPOINT         BlackInk;
+   TW_FIX32            Samples[1];
+} TW_CIECOLOR, FAR * pTW_CIECOLOR;
+
+/* DAT_EVENT. For passing events down from the application to the DS. */
+typedef struct {
+   TW_MEMREF  pEvent;    /* Windows pMSG or Mac pEvent.                 */
+   TW_UINT16  TWMessage; /* TW msg from data source, e.g. MSG_XFERREADY */
+} TW_EVENT, FAR * pTW_EVENT;
+
+/* DAT_GRAYRESPONSE */
+typedef struct {
+   TW_ELEMENT8         Response[1];
+} TW_GRAYRESPONSE, FAR * pTW_GRAYRESPONSE;
+
+/* DAT_IDENTITY. Identifies the program/library/code resource. */
+typedef struct {
+   TW_UINT32  Id;              /* Unique number.  In Windows, application hWnd      */
+   TW_VERSION Version;         /* Identifies the piece of code              */
+   TW_UINT16  ProtocolMajor;   /* Application and DS must set to TWON_PROTOCOLMAJOR */
+   TW_UINT16  ProtocolMinor;   /* Application and DS must set to TWON_PROTOCOLMINOR */
+   TW_UINT32  SupportedGroups; /* Bit field OR combination of DG_ constants */
+   TW_STR32   Manufacturer;    /* Manufacturer name, e.g. "Hewlett-Packard" */
+   TW_STR32   ProductFamily;   /* Product family name, e.g. "ScanJet"       */
+   TW_STR32   ProductName;     /* Product name, e.g. "ScanJet Plus"         */
+} TW_IDENTITY, FAR * pTW_IDENTITY;
+
+/* DAT_IMAGEINFO. Application gets detailed image info from DS with this. */
+typedef struct {
+   TW_FIX32   XResolution;      /* Resolution in the horizontal             */
+   TW_FIX32   YResolution;      /* Resolution in the vertical               */
+   TW_INT32   ImageWidth;       /* Columns in the image, -1 if unknown by DS*/
+   TW_INT32   ImageLength;      /* Rows in the image, -1 if unknown by DS   */
+   TW_INT16   SamplesPerPixel;  /* Number of samples per pixel, 3 for RGB   */
+   TW_INT16   BitsPerSample[8]; /* Number of bits for each sample           */
+   TW_INT16   BitsPerPixel;     /* Number of bits for each padded pixel     */
+   TW_BOOL    Planar;           /* True if Planar, False if chunky          */
+   TW_INT16   PixelType;        /* How to interp data; photo interp (TWPT_) */
+   TW_UINT16  Compression;      /* How the data is compressed (TWCP_xxxx)   */
+} TW_IMAGEINFO, FAR * pTW_IMAGEINFO;
+
+/* DAT_IMAGELAYOUT. Provides image layout information in current units. */
+typedef struct {
+   TW_FRAME   Frame;          /* Frame coords within larger document */
+   TW_UINT32  DocumentNumber;
+   TW_UINT32  PageNumber;     /* Reset when you go to next document  */
+   TW_UINT32  FrameNumber;    /* Reset when you go to next page      */
+} TW_IMAGELAYOUT, FAR * pTW_IMAGELAYOUT;
+
+/* DAT_IMAGEMEMXFER. Used to pass image data (e.g. in strips) from DS to application.*/
+typedef struct {
+   TW_UINT16  Compression;  /* How the data is compressed                */
+   TW_UINT32  BytesPerRow;  /* Number of bytes in a row of data          */
+   TW_UINT32  Columns;      /* How many columns                          */
+   TW_UINT32  Rows;         /* How many rows                             */
+   TW_UINT32  XOffset;      /* How far from the side of the image        */
+   TW_UINT32  YOffset;      /* How far from the top of the image         */
+   TW_UINT32  BytesWritten; /* How many bytes written in Memory          */
+   TW_MEMORY  Memory;       /* Mem struct used to pass actual image data */
+} TW_IMAGEMEMXFER, FAR * pTW_IMAGEMEMXFER;
+
+/* Changed in 1.1: QuantTable, HuffmanDC, HuffmanAC TW_MEMREF -> TW_MEMORY  */
+/* DAT_JPEGCOMPRESSION. Based on JPEG Draft International Std, ver 10918-1. */
+typedef struct {
+   TW_UINT16   ColorSpace;       /* One of the TWPT_xxxx values                */
+   TW_UINT32   SubSampling;      /* Two word "array" for subsampling values    */
+   TW_UINT16   NumComponents;    /* Number of color components in image        */
+   TW_UINT16   RestartFrequency; /* Frequency of restart marker codes in MDU's */
+   TW_UINT16   QuantMap[4];      /* Mapping of components to QuantTables       */
+   TW_MEMORY   QuantTable[4];    /* Quantization tables                        */
+   TW_UINT16   HuffmanMap[4];    /* Mapping of components to Huffman tables    */
+   TW_MEMORY   HuffmanDC[2];     /* DC Huffman tables                          */
+   TW_MEMORY   HuffmanAC[2];     /* AC Huffman tables                          */
+} TW_JPEGCOMPRESSION, FAR * pTW_JPEGCOMPRESSION;
+
+/* DAT_PALETTE8. Color palette when TWPT_PALETTE pixels xfer'd in mem buf. */
+typedef struct {
+   TW_UINT16    NumColors;   /* Number of colors in the color table.  */
+   TW_UINT16    PaletteType; /* TWPA_xxxx, specifies type of palette. */
+   TW_ELEMENT8  Colors[256]; /* Array of palette values starts here.  */
+} TW_PALETTE8, FAR * pTW_PALETTE8;
+
+/* DAT_PENDINGXFERS. Used with MSG_ENDXFER to indicate additional data. */
+typedef struct {
+   TW_UINT16 Count;
+   union {
+      TW_UINT32 EOJ;
+      TW_UINT32 Reserved;
+   } u;
+} TW_PENDINGXFERS, FAR *pTW_PENDINGXFERS;
+
+/* DAT_RGBRESPONSE */
+typedef struct {
+   TW_ELEMENT8         Response[1];
+} TW_RGBRESPONSE, FAR * pTW_RGBRESPONSE;
+
+/* DAT_SETUPFILEXFER. Sets up DS to application data transfer via a file. */
+typedef struct {
+   TW_STR255 FileName;
+   TW_UINT16 Format;   /* Any TWFF_ constant */
+   TW_INT16  VRefNum;  /* Used for Mac only  */
+} TW_SETUPFILEXFER, FAR * pTW_SETUPFILEXFER;
+
+/* DAT_SETUPMEMXFER. Sets up DS to application data transfer via a memory buffer. */
+typedef struct {
+   TW_UINT32 MinBufSize;
+   TW_UINT32 MaxBufSize;
+   TW_UINT32 Preferred;
+} TW_SETUPMEMXFER, FAR * pTW_SETUPMEMXFER;
+
+/* DAT_STATUS. Application gets detailed status info from a data source with this. */
+typedef struct {
+   TW_UINT16  ConditionCode; /* Any TWCC_ constant     */
+   TW_UINT16  Reserved;      /* Future expansion space */
+} TW_STATUS, FAR * pTW_STATUS;
+
+/* DAT_USERINTERFACE. Coordinates UI between application and data source. */
+typedef struct {
+   TW_BOOL    ShowUI;  /* TRUE if DS should bring up its UI           */
+   TW_BOOL    ModalUI; /* For Mac only - true if the DS's UI is modal */
+   TW_HANDLE  hParent; /* For windows only - Application window handle        */
+} TW_USERINTERFACE, FAR * pTW_USERINTERFACE;
+
+/* SDH - 03/21/95 - TWUNK */
+/* DAT_TWUNKIDENTITY. Provides DS identity and 'other' information necessary */
+/*                    across thunk link. */
+typedef struct {
+   TW_IDENTITY identity;        /* Identity of data source.                 */
+   TW_STR255   dsPath;          /* Full path and file name of data source.  */
+} TW_TWUNKIDENTITY, FAR * pTW_TWUNKIDENTITY;
+
+/* SDH - 03/21/95 - TWUNK */
+/* Provides DS_Entry parameters over thunk link. */
+typedef struct
+{
+    TW_INT8     destFlag;       /* TRUE if dest is not NULL                 */
+    TW_IDENTITY dest;           /* Identity of data source (if used)        */
+    TW_INT32    dataGroup;      /* DSM_Entry dataGroup parameter            */
+    TW_INT16    dataArgType;    /* DSM_Entry dataArgType parameter          */
+    TW_INT16    message;        /* DSM_Entry message parameter              */
+    TW_INT32    pDataSize;      /* Size of pData (0 if NULL)                */
+    /*  TW_MEMREF   pData; */   /* Based on implementation specifics, a     */
+                                /* pData parameter makes no sense in this   */
+                                /* structure, but data (if provided) will be*/
+                                /* appended in the data block.              */
+   } TW_TWUNKDSENTRYPARAMS, FAR * pTW_TWUNKDSENTRYPARAMS;
+
+/* SDH - 03/21/95 - TWUNK */
+/* Provides DS_Entry results over thunk link. */
+typedef struct
+{
+    TW_UINT16   returnCode;     /* Thunker DsEntry return code.             */
+    TW_UINT16   conditionCode;  /* Thunker DsEntry condition code.          */
+    TW_INT32    pDataSize;      /* Size of pData (0 if NULL)                */
+    /*  TW_MEMREF   pData; */   /* Based on implementation specifics, a     */
+                                /* pData parameter makes no sense in this   */
+                                /* structure, but data (if provided) will be*/
+                                /* appended in the data block.              */
+} TW_TWUNKDSENTRYRETURN, FAR * pTW_TWUNKDSENTRYRETURN;
+
+/* WJD - 950818 */
+/* Added for 1.6 Specification */
+/* TWAIN 1.6 CAP_SUPPORTEDCAPSEXT structure */
+typedef struct
+{
+    TW_UINT16 Cap;   /* Which CAP/ICAP info is relevant to */
+    TW_UINT16 Properties;  /* Messages this CAP/ICAP supports */
+} TW_CAPEXT, FAR * pTW_CAPEXT;
+
+/* ----------------------------------------------------------------------- *\
+
+  Version 1.7:      Added Following data structure for Document Imaging
+  July 1997         Enhancement.
+  KHL               TW_CUSTOMDSDATA --  For Saving and Restoring Source's
+                                        state.
+                    TW_INFO         --  Each attribute for extended image
+                                        information.
+                    TW_EXTIMAGEINFO --  Extended image information structure.
+
+\* ----------------------------------------------------------------------- */
+
+typedef struct {
+    TW_UINT32  InfoLength;     /* Length of Information in bytes.  */
+    TW_HANDLE  hData;          /* Place holder for data, DS Allocates */
+}TW_CUSTOMDSDATA, FAR *pTW_CUSTOMDSDATA;
+
+typedef struct {
+    TW_UINT16   InfoID;
+    TW_UINT16   ItemType;
+    TW_UINT16   NumItems;
+    TW_UINT16   CondCode;
+    TW_UINT32   Item;
+}TW_INFO, FAR* pTW_INFO;
+
+typedef struct {
+    TW_UINT32   NumInfos;
+    TW_INFO     Info[1];
+}TW_EXTIMAGEINFO, FAR* pTW_EXTIMAGEINFO;
+
+/* Added 1.8 */
+
+/* DAT_AUDIOINFO, information about audio data */
+typedef struct {
+   TW_STR255  Name;       /* name of audio data */
+   TW_UINT32  Reserved;   /* reserved space */
+} TW_AUDIOINFO, FAR * pTW_AUDIOINFO;
+
+/* DAT_DEVICEEVENT, information about events */
+typedef struct {
+   TW_UINT32  Event;                  /* One of the TWDE_xxxx values. */
+   TW_STR255  DeviceName;             /* The name of the device that generated the event */
+   TW_UINT32  BatteryMinutes;         /* Battery Minutes Remaining    */
+   TW_INT16   BatteryPercentage;      /* Battery Percentage Remaining */
+   TW_INT32   PowerSupply;            /* Power Supply                 */
+   TW_FIX32   XResolution;            /* Resolution                   */
+   TW_FIX32   YResolution;            /* Resolution                   */
+   TW_UINT32  FlashUsed2;             /* Flash Used2                  */
+   TW_UINT32  AutomaticCapture;       /* Automatic Capture            */
+   TW_UINT32  TimeBeforeFirstCapture; /* Automatic Capture            */
+   TW_UINT32  TimeBetweenCaptures;    /* Automatic Capture            */
+} TW_DEVICEEVENT, FAR * pTW_DEVICEEVENT;
+
+/* DAT_FILESYSTEM, information about TWAIN file system */
+typedef struct {
+   /* DG_CONTROL / DAT_FILESYSTEM / MSG_xxxx fields     */
+   TW_STR255  InputName; /* The name of the input or source file */
+   TW_STR255  OutputName; /* The result of an operation or the name of a destination file */
+   TW_MEMREF  Context; /* Source specific data used to remember state information */
+   /* DG_CONTROL / DAT_FILESYSTEM / MSG_DELETE field    */
+   int        Recursive; /* recursively delete all sub-directories */
+   /* DG_CONTROL / DAT_FILESYSTEM / MSG_GETINFO fields  */
+   TW_INT32   FileType; /* One of the TWFT_xxxx values */
+   TW_UINT32  Size; /* Size of current FileType */
+   TW_STR32   CreateTimeDate; /* creation date of the file */
+   TW_STR32   ModifiedTimeDate; /* last date the file was modified */
+   TW_UINT32  FreeSpace; /* bytes of free space on the current device */
+   TW_INT32   NewImageSize; /* estimate of the amount of space a new image would take up */
+   TW_UINT32  NumberOfFiles; /* number of files, depends on FileType */
+   TW_UINT32  NumberOfSnippets; /**/
+   char       Reserved[512]; /**/
+} TW_FILESYSTEM, FAR * pTW_FILESYSTEM;
+
+/* DAT_PASSTHRU, device dependent data to pass through Data Source */
+typedef struct {
+   TW_MEMREF  pCommand;        /* Pointer to Command buffer */
+   TW_UINT32  CommandBytes;    /* Number of bytes in Command buffer */
+   TW_INT32   Direction;       /* One of the TWDR_xxxx values.  Defines the direction of data flow */
+   TW_MEMREF  pData;           /* Pointer to Data buffer */
+   TW_UINT32  DataBytes;       /* Number of bytes in Data buffer */
+   TW_UINT32  DataBytesXfered; /* Number of bytes successfully transferred */
+} TW_PASSTHRU, FAR * pTW_PASSTHRU;
+
+/* DAT_SETUPAUDIOFILEXFER, information required to setup an audio file transfer */
+typedef struct {
+   TW_STR255  FileName; /* full path target file */
+   TW_UINT16  Format;   /* one of TWAF_xxxx */
+   TW_INT16 VRefNum;
+} TW_SETUPAUDIOFILEXFER, FAR * pTW_SETUPAUDIOFILEXFER;
+
+/****************************************************************************
+ * Generic Constants                                                        *
+ ****************************************************************************/
+
+#define TWON_ARRAY           3 /* indicates TW_ARRAY container       */
+#define TWON_ENUMERATION     4 /* indicates TW_ENUMERATION container */
+#define TWON_ONEVALUE        5 /* indicates TW_ONEVALUE container    */
+#define TWON_RANGE           6 /* indicates TW_RANGE container       */
+
+#define TWON_ICONID          962 /* res Id of icon used in USERSELECT lbox */
+#define TWON_DSMID           461 /* res Id of the DSM version num resource */
+#define TWON_DSMCODEID       63  /* res Id of the Mac SM Code resource     */
+
+#define TWON_DONTCARE8       0xff
+#define TWON_DONTCARE16      0xffff
+#define TWON_DONTCARE32      0xffffffff
+
+/* Flags used in TW_MEMORY structure. */
+#define TWMF_APPOWNS     0x1
+#define TWMF_DSMOWNS     0x2
+#define TWMF_DSOWNS      0x4
+#define TWMF_POINTER     0x8
+#define TWMF_HANDLE      0x10
+
+/* Palette types for TW_PALETTE8 */
+#define TWPA_RGB         0
+#define TWPA_GRAY        1
+#define TWPA_CMY         2
+
+/* There are four containers used for capabilities negotiation:
+ *    TWON_ONEVALUE, TWON_RANGE, TWON_ENUMERATION, TWON_ARRAY
+ * In each container structure ItemType can be TWTY_INT8, TWTY_INT16, etc.
+ * The kind of data stored in the container can be determined by doing
+ * DCItemSize[ItemType] where the following is defined in TWAIN glue code:
+ *          DCItemSize[]= { sizeof(TW_INT8),
+ *                          sizeof(TW_INT16),
+ *                          etc.
+ *                          sizeof(TW_UINT32) };
+ *
+ */
+
+#define TWTY_INT8        0x0000    /* Means Item is a TW_INT8   */
+#define TWTY_INT16       0x0001    /* Means Item is a TW_INT16  */
+#define TWTY_INT32       0x0002    /* Means Item is a TW_INT32  */
+
+#define TWTY_UINT8       0x0003    /* Means Item is a TW_UINT8  */
+#define TWTY_UINT16      0x0004    /* Means Item is a TW_UINT16 */
+#define TWTY_UINT32      0x0005    /* Means Item is a TW_UINT32 */
+
+#define TWTY_BOOL        0x0006    /* Means Item is a TW_BOOL   */
+
+#define TWTY_FIX32       0x0007    /* Means Item is a TW_FIX32  */
+
+#define TWTY_FRAME       0x0008    /* Means Item is a TW_FRAME  */
+
+#define TWTY_STR32       0x0009    /* Means Item is a TW_STR32  */
+#define TWTY_STR64       0x000a    /* Means Item is a TW_STR64  */
+#define TWTY_STR128      0x000b    /* Means Item is a TW_STR128 */
+#define TWTY_STR255      0x000c    /* Means Item is a TW_STR255 */
+
+/****************************************************************************
+ * Capability Constants                                                     *
+ ****************************************************************************/
+
+/* ICAP_BITORDER values (BO_ means Bit Order) */
+#define TWBO_LSBFIRST    0
+#define TWBO_MSBFIRST    1
+
+/* ICAP_COMPRESSION values (CP_ means ComPression ) */
+#define TWCP_NONE        0
+#define TWCP_PACKBITS    1
+#define TWCP_GROUP31D    2 /* Follows CCITT spec (no End Of Line)          */
+#define TWCP_GROUP31DEOL 3 /* Follows CCITT spec (has End Of Line)         */
+#define TWCP_GROUP32D    4 /* Follows CCITT spec (use cap for K Factor)    */
+#define TWCP_GROUP4      5 /* Follows CCITT spec                           */
+#define TWCP_JPEG        6 /* Use capability for more info                 */
+#define TWCP_LZW         7 /* Must license from Unisys and IBM to use      */
+#define TWCP_JBIG        8 /* For Bitonal images  -- Added 1.7 KHL         */
+/* Added 1.8 */
+#define TWCP_PNG         9
+#define TWCP_RLE4        10
+#define TWCP_RLE8        11
+#define TWCP_BITFIELDS   12
+
+
+/* ICAP_IMAGEFILEFORMAT values (FF_means File Format)   */
+#define TWFF_TIFF        0    /* Tagged Image File Format     */
+#define TWFF_PICT        1    /* Macintosh PICT               */
+#define TWFF_BMP         2    /* Windows Bitmap               */
+#define TWFF_XBM         3    /* X-Windows Bitmap             */
+#define TWFF_JFIF        4    /* JPEG File Interchange Format */
+#define TWFF_FPX         5    /* Flash Pix                    */
+#define TWFF_TIFFMULTI   6    /* Multi-page tiff file         */
+#define TWFF_PNG         7
+#define TWFF_SPIFF       8
+#define TWFF_EXIF        9
+
+
+/* ICAP_FILTER values (FT_ means Filter Type) */
+#define TWFT_RED         0
+#define TWFT_GREEN       1
+#define TWFT_BLUE        2
+#define TWFT_NONE        3
+#define TWFT_WHITE       4
+#define TWFT_CYAN        5
+#define TWFT_MAGENTA     6
+#define TWFT_YELLOW      7
+#define TWFT_BLACK       8
+
+/* ICAP_LIGHTPATH values (LP_ means Light Path) */
+#define TWLP_REFLECTIVE   0
+#define TWLP_TRANSMISSIVE 1
+
+/* ICAP_LIGHTSOURCE values (LS_ means Light Source) */
+#define TWLS_RED         0
+#define TWLS_GREEN       1
+#define TWLS_BLUE        2
+#define TWLS_NONE        3
+#define TWLS_WHITE       4
+#define TWLS_UV          5
+#define TWLS_IR          6
+
+/* ICAP_ORIENTATION values (OR_ means ORientation) */
+#define TWOR_ROT0        0
+#define TWOR_ROT90       1
+#define TWOR_ROT180      2
+#define TWOR_ROT270      3
+#define TWOR_PORTRAIT    TWOR_ROT0
+#define TWOR_LANDSCAPE   TWOR_ROT270
+
+/* ICAP_PLANARCHUNKY values (PC_ means Planar/Chunky ) */
+#define TWPC_CHUNKY      0
+#define TWPC_PLANAR      1
+
+/* ICAP_PIXELFLAVOR values (PF_ means Pixel Flavor) */
+#define TWPF_CHOCOLATE   0  /* zero pixel represents darkest shade  */
+#define TWPF_VANILLA     1  /* zero pixel represents lightest shade */
+
+/* ICAP_PIXELTYPE values (PT_ means Pixel Type) */
+#define TWPT_BW          0 /* Black and White */
+#define TWPT_GRAY        1
+#define TWPT_RGB         2
+#define TWPT_PALETTE     3
+#define TWPT_CMY         4
+#define TWPT_CMYK        5
+#define TWPT_YUV         6
+#define TWPT_YUVK        7
+#define TWPT_CIEXYZ      8
+
+/* ICAP_SUPPORTEDSIZES values (SS_ means Supported Sizes) */
+#define TWSS_NONE        0
+#define TWSS_A4LETTER    1
+#define TWSS_B5LETTER    2
+#define TWSS_USLETTER    3
+#define TWSS_USLEGAL     4
+/* Added 1.5 */
+#define TWSS_A5          5
+#define TWSS_B4          6
+#define TWSS_B6          7
+/*#define TWSS_B          8 */
+/* Added 1.7 */
+#define TWSS_USLEDGER    9
+#define TWSS_USEXECUTIVE 10
+#define TWSS_A3          11
+#define TWSS_B3          12
+#define TWSS_A6          13
+#define TWSS_C4          14
+#define TWSS_C5          15
+#define TWSS_C6          16
+/* Added 1.8 */
+#define TWSS_4A0          17
+#define TWSS_2A0          18
+#define TWSS_A0           19
+#define TWSS_A1           20
+#define TWSS_A2           21
+#define TWSS_A4           TWSS_A4LETTER
+#define TWSS_A7           22
+#define TWSS_A8           23
+#define TWSS_A9           24
+#define TWSS_A10          25
+#define TWSS_ISOB0        26
+#define TWSS_ISOB1        27
+#define TWSS_ISOB2        28
+#define TWSS_ISOB3        TWSS_B3
+#define TWSS_ISOB4        TWSS_B4
+#define TWSS_ISOB5        29
+#define TWSS_ISOB6        TWSS_B6
+#define TWSS_ISOB7        30
+#define TWSS_ISOB8        31
+#define TWSS_ISOB9        32
+#define TWSS_ISOB10       33
+#define TWSS_JISB0        34
+#define TWSS_JISB1        35
+#define TWSS_JISB2        36
+#define TWSS_JISB3        37
+#define TWSS_JISB4        38
+#define TWSS_JISB5        TWSS_B5LETTER
+#define TWSS_JISB6        39
+#define TWSS_JISB7        40
+#define TWSS_JISB8        41
+#define TWSS_JISB9        42
+#define TWSS_JISB10       43
+#define TWSS_C0           44
+#define TWSS_C1           45
+#define TWSS_C2           46
+#define TWSS_C3           47
+#define TWSS_C7           48
+#define TWSS_C8           49
+#define TWSS_C9           50
+#define TWSS_C10          51
+#define TWSS_USSTATEMENT  52
+#define TWSS_BUSINESSCARD 53
+
+/* ICAP_XFERMECH values (SX_ means Setup XFer) */
+#define TWSX_NATIVE      0
+#define TWSX_FILE        1
+#define TWSX_MEMORY      2
+
+/* ICAP_UNITS values (UN_ means UNits) */
+#define TWUN_INCHES      0
+#define TWUN_CENTIMETERS 1
+#define TWUN_PICAS       2
+#define TWUN_POINTS      3
+#define TWUN_TWIPS       4
+#define TWUN_PIXELS      5
+
+/* Added 1.5 */
+/* ICAP_BITDEPTHREDUCTION values (BR_ means Bitdepth Reduction) */
+#define TWBR_THRESHOLD     0
+#define TWBR_HALFTONE      1
+#define TWBR_CUSTHALFTONE  2
+#define TWBR_DIFFUSION     3
+
+/* Added 1.7 */
+/* ICAP_DUPLEX values */
+#define TWDX_NONE         0
+#define TWDX_1PASSDUPLEX  1
+#define TWDX_2PASSDUPLEX  2
+
+/* Added 1.7 */
+/* TWEI_BARCODETYPE values */
+#define TWBT_3OF9                 0
+#define TWBT_2OF5INTERLEAVED      1
+#define TWBT_2OF5NONINTERLEAVED   2
+#define TWBT_CODE93               3
+#define TWBT_CODE128              4
+#define TWBT_UCC128               5
+#define TWBT_CODABAR              6
+#define TWBT_UPCA                 7
+#define TWBT_UPCE                 8
+#define TWBT_EAN8                 9
+#define TWBT_EAN13                10
+#define TWBT_POSTNET              11
+#define TWBT_PDF417               12
+/* Added 1.8 */
+#define TWBT_2OF5INDUSTRIAL       13
+#define TWBT_2OF5MATRIX           14
+#define TWBT_2OF5DATALOGIC        15
+#define TWBT_2OF5IATA             16
+#define TWBT_3OF9FULLASCII        17
+#define TWBT_CODABARWITHSTARTSTOP 18
+#define TWBT_MAXICODE             19
+
+/* Added 1.7 */
+/* TWEI_DESKEWSTATUS values */
+#define TWDSK_SUCCESS     0
+#define TWDSK_REPORTONLY  1
+#define TWDSK_FAIL        2
+#define TWDSK_DISABLED    3
+
+/* Added 1.7 */
+/* TWEI_PATCHCODE values */
+#define TWPCH_PATCH1      0
+#define TWPCH_PATCH2      1
+#define TWPCH_PATCH3      2
+#define TWPCH_PATCH4      3
+#define TWPCH_PATCH6      4
+#define TWPCH_PATCHT      5
+
+/* Added 1.7 */
+/* CAP_JOBCONTROL values */
+#define TWJC_NONE   0
+#define TWJC_JSIC   1
+#define TWJC_JSIS   2
+#define TWJC_JSXC   3
+#define TWJC_JSXS   4
+
+/* Added 1.7 */
+/* TWEI_BARCODEROTATION values (BCOR_ means barcode rotation) */
+#define TWBCOR_ROT0   0
+#define TWBCOR_ROT90  1
+#define TWBCOR_ROT180 2
+#define TWBCOR_ROT270 3
+#define TWBCOR_ROTX   4
+
+/* Added 1.8 */
+/* ACAP_AUDIOFILEFORMAT values (AF_ means audio format) */
+#define TWAF_WAV      0
+#define TWAF_AIFF     1
+#define TWAF_AU       3
+#define TWAF_SND      4
+
+/* CAP_ALARMS values (AL_ means alarms) */
+#define TWAL_ALARM          0
+#define TWAL_FEEDERERROR    1
+#define TWAL_FEEDERWARNING  2
+#define TWAL_BARCODE        3
+#define TWAL_DOUBLEFEED     4
+#define TWAL_JAM            5
+#define TWAL_PATCHCODE      6
+#define TWAL_POWER          7
+#define TWAL_SKEW           8
+
+/* CAP_CLEARBUFFERS values (CB_ means clear buffers) */
+#define TWCB_AUTO           0
+#define TWCB_CLEAR          1
+#define TWCB_NOCLEAR        2
+
+/* CAP_DEVICEEVENT values (DE_ means device event) */
+#define TWDE_CUSTOMEVENTS           0x8000
+#define TWDE_CHECKAUTOMATICCAPTURE  0
+#define TWDE_CHECKBATTERY           1
+#define TWDE_CHECKDEVICEONLINE      2
+#define TWDE_CHECKFLASH             3
+#define TWDE_CHECKPOWERSUPPLY       4
+#define TWDE_CHECKRESOLUTION        5
+#define TWDE_DEVICEADDED            6
+#define TWDE_DEVICEOFFLINE          7
+#define TWDE_DEVICEREADY            8
+#define TWDE_DEVICEREMOVED          9
+#define TWDE_IMAGECAPTURED          10
+#define TWDE_IMAGEDELETED           11
+#define TWDE_PAPERDOUBLEFEED        12
+#define TWDE_PAPERJAM               13
+#define TWDE_LAMPFAILURE            14
+#define TWDE_POWERSAVE              15
+#define TWDE_POWERSAVENOTIFY        16
+
+/* CAP_FEEDERALIGNMENT values (FA_ means feeder alignment) */
+#define TWFA_NONE   0
+#define TWFA_LEFT   1
+#define TWFA_CENTER 2
+#define TWFA_RIGHT  3
+
+/* CAP_FEEDERORDER values (FO_ means feeder order) */
+#define TWFO_FIRSTPAGEFIRST 0
+#define TWFO_LASTPAGEFIRST  1
+
+/* CAP_FILESYSTEM values (FS_ means file system) */
+#define TWFS_FILESYSTEM       0
+#define TWFS_RECURSIVEDELETE  1
+
+/* CAP_POWERSUPPLY values (PS_ means power supply) */
+#define TWPS_EXTERNAL 0
+#define TWPS_BATTERY  1
+
+/* CAP_PRINTER values (PR_ means printer) */
+#define TWPR_IMPRINTERTOPBEFORE     0
+#define TWPR_IMPRINTERTOPAFTER      1
+#define TWPR_IMPRINTERBOTTOMBEFORE  2
+#define TWPR_IMPRINTERBOTTOMAFTER   3
+#define TWPR_ENDORSERTOPBEFORE      4
+#define TWPR_ENDORSERTOPAFTER       5
+#define TWPR_ENDORSERBOTTOMBEFORE   6
+#define TWPR_ENDORSERBOTTOMAFTER    7
+
+/* CAP_PRINTERMODE values (PM_ means printer mode) */
+#define TWPM_SINGLESTRING     0
+#define TWPM_MULTISTRING      1
+#define TWPM_COMPOUNDSTRING   2
+
+/* ICAP_BARCODESEARCHMODE values (TWBD_ means search) */
+#define TWBD_HORZ     0
+#define TWBD_VERT     1
+#define TWBD_HORZVERT 2
+#define TWBD_VERTHORZ 3
+
+/* ICAP_FLASHUSED2 values (FL_ means flash) */
+#define TWFL_NONE     0
+#define TWFL_OFF      1
+#define TWFL_ON       2
+#define TWFL_AUTO     3
+#define TWFL_REDEYE   4
+
+/* ICAP_FLIPROTATION values (FR_ means flip rotation) */
+#define TWFR_BOOK     0
+#define TWFR_FANFOLD  1
+
+/* ICAP_IMAGEFILTER values (IF_ means image filter) */
+#define TWIF_NONE     0
+#define TWIF_AUTO     1
+#define TWIF_LOWPASS  2
+#define TWIF_BANDPASS 3
+#define TWIF_HIGHPASS 4
+#define TWIF_TEXT     TWIF_BANDPASS
+#define TWIF_FINELINE TWIF_HIGHPASS
+
+/* ICAP_NOISEFILTER values (NF_ means noise filter) */
+#define TWNF_NONE         0
+#define TWNF_AUTO         1
+#define TWNF_LONEPIXEL    2
+#define TWNF_MAJORITYRULE 3
+
+/* ICAP_OVERSCAN values (OV_ means overscan) */
+#define TWOV_NONE       0
+#define TWOV_AUTO       1
+#define TWOV_TOPBOTTOM  2
+#define TWOV_LEFTRIGHT  3
+#define TWOV_ALL        4
+
+/* TW_FILESYSTEM.FileType values (FT_ means file type) */
+#define TWFY_CAMERA         0
+#define TWFY_CAMERATOP      1
+#define TWFY_CAMERABOTTOM   2
+#define TWFY_CAMERAPREVIEW  3
+#define TWFY_DOMAIN         4
+#define TWFY_HOST           5
+#define TWFY_DIRECTORY      6
+#define TWFY_IMAGE          7
+#define TWFY_UNKNOWN        8
+
+/****************************************************************************
+ * Country Constants                                                        *
+ ****************************************************************************/
+
+#define TWCY_AFGHANISTAN   1001
+#define TWCY_ALGERIA        213
+#define TWCY_AMERICANSAMOA  684
+#define TWCY_ANDORRA        033
+#define TWCY_ANGOLA        1002
+#define TWCY_ANGUILLA      8090
+#define TWCY_ANTIGUA       8091
+#define TWCY_ARGENTINA       54
+#define TWCY_ARUBA          297
+#define TWCY_ASCENSIONI     247
+#define TWCY_AUSTRALIA       61
+#define TWCY_AUSTRIA         43
+#define TWCY_BAHAMAS       8092
+#define TWCY_BAHRAIN        973
+#define TWCY_BANGLADESH     880
+#define TWCY_BARBADOS      8093
+#define TWCY_BELGIUM         32
+#define TWCY_BELIZE         501
+#define TWCY_BENIN          229
+#define TWCY_BERMUDA       8094
+#define TWCY_BHUTAN        1003
+#define TWCY_BOLIVIA        591
+#define TWCY_BOTSWANA       267
+#define TWCY_BRITAIN          6
+#define TWCY_BRITVIRGINIS  8095
+#define TWCY_BRAZIL          55
+#define TWCY_BRUNEI         673
+#define TWCY_BULGARIA       359
+#define TWCY_BURKINAFASO   1004
+#define TWCY_BURMA         1005
+#define TWCY_BURUNDI       1006
+#define TWCY_CAMAROON       237
+#define TWCY_CANADA           2
+#define TWCY_CAPEVERDEIS    238
+#define TWCY_CAYMANIS      8096
+#define TWCY_CENTRALAFREP  1007
+#define TWCY_CHAD          1008
+#define TWCY_CHILE           56
+#define TWCY_CHINA           86
+#define TWCY_CHRISTMASIS   1009
+#define TWCY_COCOSIS       1009
+#define TWCY_COLOMBIA        57
+#define TWCY_COMOROS       1010
+#define TWCY_CONGO         1011
+#define TWCY_COOKIS        1012
+#define TWCY_COSTARICA     506
+#define TWCY_CUBA           005
+#define TWCY_CYPRUS         357
+#define TWCY_CZECHOSLOVAKIA  42
+#define TWCY_DENMARK         45
+#define TWCY_DJIBOUTI      1013
+#define TWCY_DOMINICA      8097
+#define TWCY_DOMINCANREP   8098
+#define TWCY_EASTERIS      1014
+#define TWCY_ECUADOR        593
+#define TWCY_EGYPT           20
+#define TWCY_ELSALVADOR     503
+#define TWCY_EQGUINEA      1015
+#define TWCY_ETHIOPIA       251
+#define TWCY_FALKLANDIS    1016
+#define TWCY_FAEROEIS       298
+#define TWCY_FIJIISLANDS    679
+#define TWCY_FINLAND        358
+#define TWCY_FRANCE          33
+#define TWCY_FRANTILLES     596
+#define TWCY_FRGUIANA       594
+#define TWCY_FRPOLYNEISA    689
+#define TWCY_FUTANAIS      1043
+#define TWCY_GABON          241
+#define TWCY_GAMBIA         220
+#define TWCY_GERMANY         49
+#define TWCY_GHANA          233
+#define TWCY_GIBRALTER      350
+#define TWCY_GREECE          30
+#define TWCY_GREENLAND      299
+#define TWCY_GRENADA       8099
+#define TWCY_GRENEDINES    8015
+#define TWCY_GUADELOUPE     590
+#define TWCY_GUAM           671
+#define TWCY_GUANTANAMOBAY 5399
+#define TWCY_GUATEMALA      502
+#define TWCY_GUINEA         224
+#define TWCY_GUINEABISSAU  1017
+#define TWCY_GUYANA         592
+#define TWCY_HAITI          509
+#define TWCY_HONDURAS       504
+#define TWCY_HONGKONG      852
+#define TWCY_HUNGARY         36
+#define TWCY_ICELAND        354
+#define TWCY_INDIA           91
+#define TWCY_INDONESIA       62
+#define TWCY_IRAN            98
+#define TWCY_IRAQ           964
+#define TWCY_IRELAND        353
+#define TWCY_ISRAEL         972
+#define TWCY_ITALY           39
+#define TWCY_IVORYCOAST    225
+#define TWCY_JAMAICA       8010
+#define TWCY_JAPAN           81
+#define TWCY_JORDAN         962
+#define TWCY_KENYA          254
+#define TWCY_KIRIBATI      1018
+#define TWCY_KOREA           82
+#define TWCY_KUWAIT         965
+#define TWCY_LAOS          1019
+#define TWCY_LEBANON       1020
+#define TWCY_LIBERIA        231
+#define TWCY_LIBYA          218
+#define TWCY_LIECHTENSTEIN   41
+#define TWCY_LUXENBOURG     352
+#define TWCY_MACAO          853
+#define TWCY_MADAGASCAR    1021
+#define TWCY_MALAWI         265
+#define TWCY_MALAYSIA        60
+#define TWCY_MALDIVES       960
+#define TWCY_MALI          1022
+#define TWCY_MALTA          356
+#define TWCY_MARSHALLIS     692
+#define TWCY_MAURITANIA    1023
+#define TWCY_MAURITIUS      230
+#define TWCY_MEXICO           3
+#define TWCY_MICRONESIA     691
+#define TWCY_MIQUELON       508
+#define TWCY_MONACO          33
+#define TWCY_MONGOLIA      1024
+#define TWCY_MONTSERRAT    8011
+#define TWCY_MOROCCO        212
+#define TWCY_MOZAMBIQUE    1025
+#define TWCY_NAMIBIA        264
+#define TWCY_NAURU         1026
+#define TWCY_NEPAL          977
+#define TWCY_NETHERLANDS     31
+#define TWCY_NETHANTILLES   599
+#define TWCY_NEVIS         8012
+#define TWCY_NEWCALEDONIA   687
+#define TWCY_NEWZEALAND      64
+#define TWCY_NICARAGUA      505
+#define TWCY_NIGER          227
+#define TWCY_NIGERIA        234
+#define TWCY_NIUE          1027
+#define TWCY_NORFOLKI      1028
+#define TWCY_NORWAY          47
+#define TWCY_OMAN           968
+#define TWCY_PAKISTAN        92
+#define TWCY_PALAU         1029
+#define TWCY_PANAMA         507
+#define TWCY_PARAGUAY       595
+#define TWCY_PERU            51
+#define TWCY_PHILLIPPINES    63
+#define TWCY_PITCAIRNIS    1030
+#define TWCY_PNEWGUINEA     675
+#define TWCY_POLAND          48
+#define TWCY_PORTUGAL       351
+#define TWCY_QATAR          974
+#define TWCY_REUNIONI      1031
+#define TWCY_ROMANIA         40
+#define TWCY_RWANDA         250
+#define TWCY_SAIPAN         670
+#define TWCY_SANMARINO       39
+#define TWCY_SAOTOME       1033
+#define TWCY_SAUDIARABIA    966
+#define TWCY_SENEGAL        221
+#define TWCY_SEYCHELLESIS  1034
+#define TWCY_SIERRALEONE   1035
+#define TWCY_SINGAPORE       65
+#define TWCY_SOLOMONIS     1036
+#define TWCY_SOMALI        1037
+#define TWCY_SOUTHAFRICA    27
+#define TWCY_SPAIN           34
+#define TWCY_SRILANKA        94
+#define TWCY_STHELENA      1032
+#define TWCY_STKITTS       8013
+#define TWCY_STLUCIA       8014
+#define TWCY_STPIERRE       508
+#define TWCY_STVINCENT     8015
+#define TWCY_SUDAN         1038
+#define TWCY_SURINAME       597
+#define TWCY_SWAZILAND      268
+#define TWCY_SWEDEN          46
+#define TWCY_SWITZERLAND     41
+#define TWCY_SYRIA         1039
+#define TWCY_TAIWAN         886
+#define TWCY_TANZANIA       255
+#define TWCY_THAILAND        66
+#define TWCY_TOBAGO        8016
+#define TWCY_TOGO           228
+#define TWCY_TONGAIS        676
+#define TWCY_TRINIDAD      8016
+#define TWCY_TUNISIA        216
+#define TWCY_TURKEY          90
+#define TWCY_TURKSCAICOS   8017
+#define TWCY_TUVALU        1040
+#define TWCY_UGANDA         256
+#define TWCY_USSR             7
+#define TWCY_UAEMIRATES     971
+#define TWCY_UNITEDKINGDOM   44
+#define TWCY_USA              1
+#define TWCY_URUGUAY        598
+#define TWCY_VANUATU       1041
+#define TWCY_VATICANCITY     39
+#define TWCY_VENEZUELA       58
+#define TWCY_WAKE          1042
+#define TWCY_WALLISIS      1043
+#define TWCY_WESTERNSAHARA 1044
+#define TWCY_WESTERNSAMOA  1045
+#define TWCY_YEMEN         1046
+#define TWCY_YUGOSLAVIA      38
+#define TWCY_ZAIRE          243
+#define TWCY_ZAMBIA         260
+#define TWCY_ZIMBABWE       263
+/* Added for 1.8 */
+#define TWCY_ALBANIA        355
+#define TWCY_ARMENIA        374
+#define TWCY_AZERBAIJAN     994
+#define TWCY_BELARUS        375
+#define TWCY_BOSNIAHERZGO   387
+#define TWCY_CAMBODIA       855
+#define TWCY_CROATIA        385
+#define TWCY_CZECHREPUBLIC  420
+#define TWCY_DIEGOGARCIA    246
+#define TWCY_ERITREA        291
+#define TWCY_ESTONIA        372
+#define TWCY_GEORGIA        995
+#define TWCY_LATVIA         371
+#define TWCY_LESOTHO        266
+#define TWCY_LITHUANIA      370
+#define TWCY_MACEDONIA      389
+#define TWCY_MAYOTTEIS      269
+#define TWCY_MOLDOVA        373
+#define TWCY_MYANMAR        95
+#define TWCY_NORTHKOREA     850
+#define TWCY_PUERTORICO     787
+#define TWCY_RUSSIA         7
+#define TWCY_SERBIA         381
+#define TWCY_SLOVAKIA       421
+#define TWCY_SLOVENIA       386
+#define TWCY_SOUTHKOREA     82
+#define TWCY_UKRAINE        380
+#define TWCY_USVIRGINIS     340
+#define TWCY_VIETNAM        84
+
+/****************************************************************************
+ * Language Constants                                                       *
+ ****************************************************************************/
+
+#define TWLG_DAN              0 /* Danish                 */
+#define TWLG_DUT              1 /* Dutch                  */
+#define TWLG_ENG              2 /* International English  */
+#define TWLG_FCF              3 /* French Canadian        */
+#define TWLG_FIN              4 /* Finnish                */
+#define TWLG_FRN              5 /* French                 */
+#define TWLG_GER              6 /* German                 */
+#define TWLG_ICE              7 /* Icelandic              */
+#define TWLG_ITN              8 /* Italian                */
+#define TWLG_NOR              9 /* Norwegian              */
+#define TWLG_POR             10 /* Portuguese             */
+#define TWLG_SPA             11 /* Spanish                */
+#define TWLG_SWE             12 /* Swedish                */
+#define TWLG_USA             13 /* U.S. English           */
+/* Added for 1.8 */
+#define TWLG_USERLOCALE           -1
+#define TWLG_AFRIKAANS            14
+#define TWLG_ALBANIA              15
+#define TWLG_ARABIC               16
+#define TWLG_ARABIC_ALGERIA       17
+#define TWLG_ARABIC_BAHRAIN       18
+#define TWLG_ARABIC_EGYPT         19
+#define TWLG_ARABIC_IRAQ          20
+#define TWLG_ARABIC_JORDAN        21
+#define TWLG_ARABIC_KUWAIT        22
+#define TWLG_ARABIC_LEBANON       23
+#define TWLG_ARABIC_LIBYA         24
+#define TWLG_ARABIC_MOROCCO       25
+#define TWLG_ARABIC_OMAN          26
+#define TWLG_ARABIC_QATAR         27
+#define TWLG_ARABIC_SAUDIARABIA   28
+#define TWLG_ARABIC_SYRIA         29
+#define TWLG_ARABIC_TUNISIA       30
+#define TWLG_ARABIC_UAE           31 /* United Arabic Emirates */
+#define TWLG_ARABIC_YEMEN         32
+#define TWLG_BASQUE               33
+#define TWLG_BYELORUSSIAN         34
+#define TWLG_BULGARIAN            35
+#define TWLG_CATALAN              36
+#define TWLG_CHINESE              37
+#define TWLG_CHINESE_HONGKONG     38
+#define TWLG_CHINESE_PRC          39 /* People's Republic of China */
+#define TWLG_CHINESE_SINGAPORE    40
+#define TWLG_CHINESE_SIMPLIFIED   41
+#define TWLG_CHINESE_TAIWAN       42
+#define TWLG_CHINESE_TRADITIONAL  43
+#define TWLG_CROATIA              44
+#define TWLG_CZECH                45
+#define TWLG_DANISH               TWLG_DAN
+#define TWLG_DUTCH                TWLG_DUT
+#define TWLG_DUTCH_BELGIAN        46
+#define TWLG_ENGLISH              TWLG_ENG
+#define TWLG_ENGLISH_AUSTRALIAN   47
+#define TWLG_ENGLISH_CANADIAN     48
+#define TWLG_ENGLISH_IRELAND      49
+#define TWLG_ENGLISH_NEWZEALAND   50
+#define TWLG_ENGLISH_SOUTHAFRICA  51
+#define TWLG_ENGLISH_UK           52
+#define TWLG_ENGLISH_USA          TWLG_USA
+#define TWLG_ESTONIAN             53
+#define TWLG_FAEROESE             54
+#define TWLG_FARSI                55
+#define TWLG_FINNISH              TWLG_FIN
+#define TWLG_FRENCH               TWLG_FRN
+#define TWLG_FRENCH_BELGIAN       56
+#define TWLG_FRENCH_CANADIAN      TWLG_FCF
+#define TWLG_FRENCH_LUXEMBOURG    57
+#define TWLG_FRENCH_SWISS         58
+#define TWLG_GERMAN               TWLG_GER
+#define TWLG_GERMAN_AUSTRIAN      59
+#define TWLG_GERMAN_LUXEMBOURG    60
+#define TWLG_GERMAN_LIECHTENSTEIN 61
+#define TWLG_GERMAN_SWISS         62
+#define TWLG_GREEK                63
+#define TWLG_HEBREW               64
+#define TWLG_HUNGARIAN            65
+#define TWLG_ICELANDIC            TWLG_ICE
+#define TWLG_INDONESIAN           66
+#define TWLG_ITALIAN              TWLG_ITN
+#define TWLG_ITALIAN_SWISS        67
+#define TWLG_JAPANESE             68
+#define TWLG_KOREAN               69
+#define TWLG_KOREAN_JOHAB         70
+#define TWLG_LATVIAN              71
+#define TWLG_LITHUANIAN           72
+#define TWLG_NORWEGIAN            TWLG_NOR
+#define TWLG_NORWEGIAN_BOKMAL     73
+#define TWLG_NORWEGIAN_NYNORSK    74
+#define TWLG_POLISH               75
+#define TWLG_PORTUGUESE           TWLG_POR
+#define TWLG_PORTUGUESE_BRAZIL    76
+#define TWLG_ROMANIAN             77
+#define TWLG_RUSSIAN              78
+#define TWLG_SERBIAN_LATIN        79
+#define TWLG_SLOVAK               80
+#define TWLG_SLOVENIAN            81
+#define TWLG_SPANISH              TWLG_SPA
+#define TWLG_SPANISH_MEXICAN      82
+#define TWLG_SPANISH_MODERN       83
+#define TWLG_SWEDISH              TWLG_SWE
+#define TWLG_THAI                 84
+#define TWLG_TURKISH              85
+#define TWLG_UKRANIAN             86
+/* More stuff added for 1.8 */
+#define TWLG_ASSAMESE             87
+#define TWLG_BENGALI              88
+#define TWLG_BIHARI               89
+#define TWLG_BODO                 90
+#define TWLG_DOGRI                91
+#define TWLG_GUJARATI             92
+#define TWLG_HARYANVI             93
+#define TWLG_HINDI                94
+#define TWLG_KANNADA              95
+#define TWLG_KASHMIRI             96
+#define TWLG_MALAYALAM            97
+#define TWLG_MARATHI              98
+#define TWLG_MARWARI              99
+#define TWLG_MEGHALAYAN          100
+#define TWLG_MIZO                101
+#define TWLG_NAGA                102
+#define TWLG_ORISSI              103
+#define TWLG_PUNJABI             104
+#define TWLG_PUSHTU              105
+#define TWLG_SERBIAN_CYRILLIC    106
+#define TWLG_SIKKIMI             107
+#define TWLG_SWEDISH_FINLAND     108
+#define TWLG_TAMIL               109
+#define TWLG_TELUGU              110
+#define TWLG_TRIPURI             111
+#define TWLG_URDU                112
+#define TWLG_VIETNAMESE          113
+
+/****************************************************************************
+ * Data Groups                                                              *
+ ****************************************************************************/
+
+/* More Data Groups may be added in the future.
+ * Possible candidates include text, vector graphics, sound, etc.
+ * NOTE: Data Group constants must be powers of 2 as they are used
+ *       as bitflags when Application asks DSM to present a list of DSs.
+ */
+
+#define DG_CONTROL          0x0001L /* data pertaining to control       */
+#define DG_IMAGE            0x0002L /* data pertaining to raster images */
+/* Added 1.8 */
+#define DG_AUDIO            0x0004L /* data pertaining to audio */
+
+/****************************************************************************
+ * Data Argument Types                                                      *
+ ****************************************************************************/
+
+/*  SDH - 03/23/95 - WATCH                                                  */
+/*  The thunker requires knowledge about size of data being passed in the   */
+/*  lpData parameter to DS_Entry (which is not readily available due to     */
+/*  type LPVOID.  Thus, we key off the DAT_ argument to determine the size. */
+/*  This has a couple implications:                                         */
+/*  1) Any additional DAT_ features require modifications to the thunk code */
+/*     for thunker support.                                                 */
+/*  2) Any applications which use the custom capabilities are not supported */
+/*     under thunking since we have no way of knowing what size data (if    */
+/*     any) is being passed.                                                */
+
+#define DAT_NULL            0x0000 /* No data or structure. */
+#define DAT_CUSTOMBASE      0x8000 /* Base of custom DATs.  */
+
+/* Data Argument Types for the DG_CONTROL Data Group. */
+#define DAT_CAPABILITY      0x0001 /* TW_CAPABILITY                        */
+#define DAT_EVENT           0x0002 /* TW_EVENT                             */
+#define DAT_IDENTITY        0x0003 /* TW_IDENTITY                          */
+#define DAT_PARENT          0x0004 /* TW_HANDLE, application win handle in Windows */
+#define DAT_PENDINGXFERS    0x0005 /* TW_PENDINGXFERS                      */
+#define DAT_SETUPMEMXFER    0x0006 /* TW_SETUPMEMXFER                      */
+#define DAT_SETUPFILEXFER   0x0007 /* TW_SETUPFILEXFER                     */
+#define DAT_STATUS          0x0008 /* TW_STATUS                            */
+#define DAT_USERINTERFACE   0x0009 /* TW_USERINTERFACE                     */
+#define DAT_XFERGROUP       0x000a /* TW_UINT32                            */
+/*  SDH - 03/21/95 - TWUNK                                         */
+/*  Additional message required for thunker to request the special */
+/*  identity information.                                          */
+#define DAT_TWUNKIDENTITY   0x000b /* TW_TWUNKIDENTITY                     */
+#define DAT_CUSTOMDSDATA    0x000c /* TW_CUSTOMDSDATA.                     */
+/* Added 1.8 */
+#define DAT_DEVICEEVENT     0x000d /* TW_DEVICEEVENT                       */
+#define DAT_FILESYSTEM      0x000e /* TW_FILESYSTEM                        */
+#define DAT_PASSTHRU        0x000f /* TW_PASSTHRU                          */
+
+/* Data Argument Types for the DG_IMAGE Data Group. */
+#define DAT_IMAGEINFO       0x0101 /* TW_IMAGEINFO                         */
+#define DAT_IMAGELAYOUT     0x0102 /* TW_IMAGELAYOUT                       */
+#define DAT_IMAGEMEMXFER    0x0103 /* TW_IMAGEMEMXFER                      */
+#define DAT_IMAGENATIVEXFER 0x0104 /* TW_UINT32 loword is hDIB, PICHandle  */
+#define DAT_IMAGEFILEXFER   0x0105 /* Null data                            */
+#define DAT_CIECOLOR        0x0106 /* TW_CIECOLOR                          */
+#define DAT_GRAYRESPONSE    0x0107 /* TW_GRAYRESPONSE                      */
+#define DAT_RGBRESPONSE     0x0108 /* TW_RGBRESPONSE                       */
+#define DAT_JPEGCOMPRESSION 0x0109 /* TW_JPEGCOMPRESSION                   */
+#define DAT_PALETTE8        0x010a /* TW_PALETTE8                          */
+#define DAT_EXTIMAGEINFO    0x010b /* TW_EXTIMAGEINFO -- for 1.7 Spec.     */
+
+/* Added 1.8 */
+/* Data Argument Types for the DG_AUDIO Data Group. */
+#define DAT_AUDIOFILEXFER   0x0201 /* Null data                            */
+#define DAT_AUDIOINFO       0x0202 /* TW_AUDIOINFO                         */
+#define DAT_AUDIONATIVEXFER 0x0203 /* TW_UINT32 handle to WAV, (AIFF Mac)  */
+
+/****************************************************************************
+ * Messages                                                                 *
+ ****************************************************************************/
+
+/* All message constants are unique.
+ * Messages are grouped according to which DATs they are used with.*/
+
+#define MSG_NULL         0x0000 /* Used in TW_EVENT structure               */
+#define MSG_CUSTOMBASE   0x8000 /* Base of custom messages                  */
+
+/* Generic messages may be used with any of several DATs.                   */
+#define MSG_GET          0x0001 /* Get one or more values                   */
+#define MSG_GETCURRENT   0x0002 /* Get current value                        */
+#define MSG_GETDEFAULT   0x0003 /* Get default (e.g. power up) value        */
+#define MSG_GETFIRST     0x0004 /* Get first of a series of items, e.g. DSs */
+#define MSG_GETNEXT      0x0005 /* Iterate through a series of items.       */
+#define MSG_SET          0x0006 /* Set one or more values                   */
+#define MSG_RESET        0x0007 /* Set current value to default value       */
+#define MSG_QUERYSUPPORT 0x0008 /* Get supported operations on the cap.     */
+
+/* Messages used with DAT_NULL                                              */
+#define MSG_XFERREADY    0x0101 /* The data source has data ready           */
+#define MSG_CLOSEDSREQ   0x0102 /* Request for Application. to close DS             */
+#define MSG_CLOSEDSOK    0x0103 /* Tell the Application. to save the state.         */
+/* Added 1.8 */
+#define MSG_DEVICEEVENT  0X0104 /* Some event has taken place               */
+
+/* Messages used with a pointer to a DAT_STATUS structure                   */
+#define MSG_CHECKSTATUS  0x0201 /* Get status information                   */
+
+/* Messages used with a pointer to DAT_PARENT data                          */
+#define MSG_OPENDSM      0x0301 /* Open the DSM                             */
+#define MSG_CLOSEDSM     0x0302 /* Close the DSM                            */
+
+/* Messages used with a pointer to a DAT_IDENTITY structure                 */
+#define MSG_OPENDS       0x0401 /* Open a data source                       */
+#define MSG_CLOSEDS      0x0402 /* Close a data source                      */
+#define MSG_USERSELECT   0x0403 /* Put up a dialog of all DS                */
+
+/* Messages used with a pointer to a DAT_USERINTERFACE structure            */
+#define MSG_DISABLEDS    0x0501 /* Disable data transfer in the DS          */
+#define MSG_ENABLEDS     0x0502 /* Enable data transfer in the DS           */
+#define MSG_ENABLEDSUIONLY  0x0503  /* Enable for saving DS state only.     */
+
+/* Messages used with a pointer to a DAT_EVENT structure                    */
+#define MSG_PROCESSEVENT 0x0601
+
+/* Messages used with a pointer to a DAT_PENDINGXFERS structure             */
+#define MSG_ENDXFER      0x0701
+
+/* Added 1.8 */
+/* Messages used with a pointer to a DAT_FILESYSTEM structure               */
+#define MSG_CHANGEDIRECTORY   0x0801
+#define MSG_CREATEDIRECTORY   0x0802
+#define MSG_DELETE            0x0803
+#define MSG_FORMATMEDIA       0x0804
+#define MSG_GETCLOSE          0x0805
+#define MSG_GETFIRSTFILE      0x0806
+#define MSG_GETINFO           0x0807
+#define MSG_GETNEXTFILE       0x0808
+#define MSG_RENAME            0x0809
+
+/* Messages used with a pointer to a DAT_PASSTHRU structure                 */
+#define MSG_PASSTHRU          0x0901
+
+/****************************************************************************
+ * Capabilities                                                             *
+ ****************************************************************************/
+
+#define CAP_CUSTOMBASE          0x8000 /* Base of custom capabilities */
+
+/* all data sources are REQUIRED to support these caps */
+#define CAP_XFERCOUNT           0x0001
+
+/* image data sources are REQUIRED to support these caps */
+#define ICAP_COMPRESSION        0x0100
+#define ICAP_PIXELTYPE          0x0101
+#define ICAP_UNITS              0x0102 /* default is TWUN_INCHES */
+#define ICAP_XFERMECH           0x0103
+
+/* all data sources MAY support these caps */
+#define CAP_AUTHOR                  0x1000
+#define CAP_CAPTION                 0x1001
+#define CAP_FEEDERENABLED           0x1002
+#define CAP_FEEDERLOADED            0x1003
+#define CAP_TIMEDATE                0x1004
+#define CAP_SUPPORTEDCAPS           0x1005
+#define CAP_EXTENDEDCAPS            0x1006
+#define CAP_AUTOFEED                0x1007
+#define CAP_CLEARPAGE               0x1008
+#define CAP_FEEDPAGE                0x1009
+#define CAP_REWINDPAGE              0x100a
+#define CAP_INDICATORS              0x100b   /* Added 1.1 */
+#define CAP_SUPPORTEDCAPSEXT        0x100c   /* Added 1.6 */
+#define CAP_PAPERDETECTABLE         0x100d   /* Added 1.6 */
+#define CAP_UICONTROLLABLE          0x100e   /* Added 1.6 */
+#define CAP_DEVICEONLINE            0x100f   /* Added 1.6 */
+#define CAP_AUTOSCAN                0x1010   /* Added 1.6 */
+#define CAP_THUMBNAILSENABLED       0x1011   /* Added 1.7 */
+#define CAP_DUPLEX                  0x1012   /* Added 1.7 */
+#define CAP_DUPLEXENABLED           0x1013   /* Added 1.7 */
+#define CAP_ENABLEDSUIONLY          0x1014   /* Added 1.7 */
+#define CAP_CUSTOMDSDATA            0x1015   /* Added 1.7 */
+#define CAP_ENDORSER                0x1016   /* Added 1.7 */
+#define CAP_JOBCONTROL              0x1017   /* Added 1.7 */
+#define CAP_ALARMS                  0x1018   /* Added 1.8 */
+#define CAP_ALARMVOLUME             0x1019   /* Added 1.8 */
+#define CAP_AUTOMATICCAPTURE        0x101a   /* Added 1.8 */
+#define CAP_TIMEBEFOREFIRSTCAPTURE  0x101b   /* Added 1.8 */
+#define CAP_TIMEBETWEENCAPTURES     0x101c   /* Added 1.8 */
+#define CAP_CLEARBUFFERS            0x101d   /* Added 1.8 */
+#define CAP_MAXBATCHBUFFERS         0x101e   /* Added 1.8 */
+#define CAP_DEVICETIMEDATE          0x101f   /* Added 1.8 */
+#define CAP_POWERSUPPLY             0x1020   /* Added 1.8 */
+#define CAP_CAMERAPREVIEWUI         0x1021   /* Added 1.8 */
+#define CAP_DEVICEEVENT             0x1022   /* Added 1.8 */
+#define CAP_PAGEMULTIPLEACQUIRE     0x1023   /* Added 1.8 */
+#define CAP_SERIALNUMBER            0x1024   /* Added 1.8 */
+#define CAP_FILESYSTEM              0x1025   /* Added 1.8 */
+#define CAP_PRINTER                 0x1026   /* Added 1.8 */
+#define CAP_PRINTERENABLED          0x1027   /* Added 1.8 */
+#define CAP_PRINTERINDEX            0x1028   /* Added 1.8 */
+#define CAP_PRINTERMODE             0x1029   /* Added 1.8 */
+#define CAP_PRINTERSTRING           0x102a   /* Added 1.8 */
+#define CAP_PRINTERSUFFIX           0x102b   /* Added 1.8 */
+#define CAP_LANGUAGE                0x102c   /* Added 1.8 */
+#define CAP_FEEDERALIGNMENT         0x102d   /* Added 1.8 */
+#define CAP_FEEDERORDER             0x102e   /* Added 1.8 */
+#define CAP_PAPERBINDING            0x102f   /* Added 1.8 */
+#define CAP_REACQUIREALLOWED        0x1030   /* Added 1.8 */
+#define CAP_PASSTHRU                0x1031   /* Added 1.8 */
+#define CAP_BATTERYMINUTES          0x1032   /* Added 1.8 */
+#define CAP_BATTERYPERCENTAGE       0x1033   /* Added 1.8 */
+#define CAP_POWERDOWNTIME           0x1034   /* Added 1.8 */
+
+/* image data sources MAY support these caps */
+#define ICAP_AUTOBRIGHT                   0x1100
+#define ICAP_BRIGHTNESS                   0x1101
+#define ICAP_CONTRAST                     0x1103
+#define ICAP_CUSTHALFTONE                 0x1104
+#define ICAP_EXPOSURETIME                 0x1105
+#define ICAP_FILTER                       0x1106
+#define ICAP_FLASHUSED                    0x1107
+#define ICAP_GAMMA                        0x1108
+#define ICAP_HALFTONES                    0x1109
+#define ICAP_HIGHLIGHT                    0x110a
+#define ICAP_IMAGEFILEFORMAT              0x110c
+#define ICAP_LAMPSTATE                    0x110d
+#define ICAP_LIGHTSOURCE                  0x110e
+#define ICAP_ORIENTATION                  0x1110
+#define ICAP_PHYSICALWIDTH                0x1111
+#define ICAP_PHYSICALHEIGHT               0x1112
+#define ICAP_SHADOW                       0x1113
+#define ICAP_FRAMES                       0x1114
+#define ICAP_XNATIVERESOLUTION            0x1116
+#define ICAP_YNATIVERESOLUTION            0x1117
+#define ICAP_XRESOLUTION                  0x1118
+#define ICAP_YRESOLUTION                  0x1119
+#define ICAP_MAXFRAMES                    0x111a
+#define ICAP_TILES                        0x111b
+#define ICAP_BITORDER                     0x111c
+#define ICAP_CCITTKFACTOR                 0x111d
+#define ICAP_LIGHTPATH                    0x111e
+#define ICAP_PIXELFLAVOR                  0x111f
+#define ICAP_PLANARCHUNKY                 0x1120
+#define ICAP_ROTATION                     0x1121
+#define ICAP_SUPPORTEDSIZES               0x1122
+#define ICAP_THRESHOLD                    0x1123
+#define ICAP_XSCALING                     0x1124
+#define ICAP_YSCALING                     0x1125
+#define ICAP_BITORDERCODES                0x1126
+#define ICAP_PIXELFLAVORCODES             0x1127
+#define ICAP_JPEGPIXELTYPE                0x1128
+#define ICAP_TIMEFILL                     0x112a
+#define ICAP_BITDEPTH                     0x112b
+#define ICAP_BITDEPTHREDUCTION            0x112c  /* Added 1.5 */
+#define ICAP_UNDEFINEDIMAGESIZE           0x112d  /* Added 1.6 */
+#define ICAP_IMAGEDATASET                 0x112e  /* Added 1.7 */
+#define ICAP_EXTIMAGEINFO                 0x112f  /* Added 1.7 */
+#define ICAP_MINIMUMHEIGHT                0x1130  /* Added 1.7 */
+#define ICAP_MINIMUMWIDTH                 0x1131  /* Added 1.7 */
+#define ICAP_AUTODISCARDBLANKPAGES        0x1134  /* Added 1.8 */
+#define ICAP_FLIPROTATION                 0x1136  /* Added 1.8 */
+#define ICAP_BARCODEDETECTIONENABLED      0x1137  /* Added 1.8 */
+#define ICAP_SUPPORTEDBARCODETYPES        0x1138  /* Added 1.8 */
+#define ICAP_BARCODEMAXSEARCHPRIORITIES   0x1139  /* Added 1.8 */
+#define ICAP_BARCODESEARCHPRIORITIES      0x113a  /* Added 1.8 */
+#define ICAP_BARCODESEARCHMODE            0x113b  /* Added 1.8 */
+#define ICAP_BARCODEMAXRETRIES            0x113c  /* Added 1.8 */
+#define ICAP_BARCODETIMEOUT               0x113d  /* Added 1.8 */
+#define ICAP_ZOOMFACTOR                   0x113e  /* Added 1.8 */
+#define ICAP_PATCHCODEDETECTIONENABLED    0x113f  /* Added 1.8 */
+#define ICAP_SUPPORTEDPATCHCODETYPES      0x1140  /* Added 1.8 */
+#define ICAP_PATCHCODEMAXSEARCHPRIORITIES 0x1141  /* Added 1.8 */
+#define ICAP_PATCHCODESEARCHPRIORITIES    0x1142  /* Added 1.8 */
+#define ICAP_PATCHCODESEARCHMODE          0x1143  /* Added 1.8 */
+#define ICAP_PATCHCODEMAXRETRIES          0x1144  /* Added 1.8 */
+#define ICAP_PATCHCODETIMEOUT             0x1145  /* Added 1.8 */
+#define ICAP_FLASHUSED2                   0x1146  /* Added 1.8 */
+#define ICAP_IMAGEFILTER                  0x1147  /* Added 1.8 */
+#define ICAP_NOISEFILTER                  0x1148  /* Added 1.8 */
+#define ICAP_OVERSCAN                     0x1149  /* Added 1.8 */
+#define ICAP_AUTOMATICBORDERDETECTION     0x1150  /* Added 1.8 */
+#define ICAP_AUTOMATICDESKEW              0x1151  /* Added 1.8 */
+#define ICAP_AUTOMATICROTATE              0x1152  /* Added 1.8 */
+
+/* image data sources MAY support these audio caps */
+#define ACAP_AUDIOFILEFORMAT    0x1201  /* Added 1.8 */
+#define ACAP_XFERMECH           0x1202  /* Added 1.8 */
+
+/* ----------------------------------------------------------------------- *\
+
+  Version 1.7:      Following is Extended Image Info Attributes.
+  July 1997
+  KHL
+
+\* ----------------------------------------------------------------------- */
+
+#define TWEI_BARCODEX               0x1200
+#define TWEI_BARCODEY               0x1201
+#define TWEI_BARCODETEXT            0x1202
+#define TWEI_BARCODETYPE            0x1203
+#define TWEI_DESHADETOP             0x1204
+#define TWEI_DESHADELEFT            0x1205
+#define TWEI_DESHADEHEIGHT          0x1206
+#define TWEI_DESHADEWIDTH           0x1207
+#define TWEI_DESHADESIZE            0x1208
+#define TWEI_SPECKLESREMOVED        0x1209
+#define TWEI_HORZLINEXCOORD         0x120A
+#define TWEI_HORZLINEYCOORD         0x120B
+#define TWEI_HORZLINELENGTH         0x120C
+#define TWEI_HORZLINETHICKNESS      0x120D
+#define TWEI_VERTLINEXCOORD         0x120E
+#define TWEI_VERTLINEYCOORD         0x120F
+#define TWEI_VERTLINELENGTH         0x1210
+#define TWEI_VERTLINETHICKNESS      0x1211
+#define TWEI_PATCHCODE              0x1212
+#define TWEI_ENDORSEDTEXT           0x1213
+#define TWEI_FORMCONFIDENCE         0x1214
+#define TWEI_FORMTEMPLATEMATCH      0x1215
+#define TWEI_FORMTEMPLATEPAGEMATCH  0x1216
+#define TWEI_FORMHORZDOCOFFSET      0x1217
+#define TWEI_FORMVERTDOCOFFSET      0x1218
+#define TWEI_BARCODECOUNT           0x1219
+#define TWEI_BARCODECONFIDENCE      0x121A
+#define TWEI_BARCODEROTATION        0x121B
+#define TWEI_BARCODETEXTLENGTH      0x121C
+#define TWEI_DESHADECOUNT           0x121D
+#define TWEI_DESHADEBLACKCOUNTOLD   0x121E
+#define TWEI_DESHADEBLACKCOUNTNEW   0x121F
+#define TWEI_DESHADEBLACKRLMIN      0x1220
+#define TWEI_DESHADEBLACKRLMAX      0x1221
+#define TWEI_DESHADEWHITECOUNTOLD   0x1222
+#define TWEI_DESHADEWHITECOUNTNEW   0x1223
+#define TWEI_DESHADEWHITERLMIN      0x1224
+#define TWEI_DESHADEWHITERLAVE      0x1225
+#define TWEI_DESHADEWHITERLMAX      0x1226
+#define TWEI_BLACKSPECKLESREMOVED   0x1227
+#define TWEI_WHITESPECKLESREMOVED   0x1228
+#define TWEI_HORZLINECOUNT          0x1229
+#define TWEI_VERTLINECOUNT          0x122A
+#define TWEI_DESKEWSTATUS           0x122B
+#define TWEI_SKEWORIGINALANGLE      0x122C
+#define TWEI_SKEWFINALANGLE         0x122D
+#define TWEI_SKEWCONFIDENCE         0x122E
+#define TWEI_SKEWWINDOWX1           0x122F
+#define TWEI_SKEWWINDOWY1           0x1230
+#define TWEI_SKEWWINDOWX2           0x1231
+#define TWEI_SKEWWINDOWY2           0x1232
+#define TWEI_SKEWWINDOWX3           0x1233
+#define TWEI_SKEWWINDOWY3           0x1234
+#define TWEI_SKEWWINDOWX4           0x1235
+#define TWEI_SKEWWINDOWY4           0x1236
+
+#define TWEJ_NONE                   0x0000
+#define TWEJ_MIDSEPARATOR           0x0001
+#define TWEJ_PATCH1                 0x0002
+#define TWEJ_PATCH2                 0x0003
+#define TWEJ_PATCH3                 0x0004
+#define TWEJ_PATCH4                 0x0005
+#define TWEJ_PATCH6                 0x0006
+#define TWEJ_PATCHT                 0x0007
+
+/***************************************************************************
+ *            Return Codes and Condition Codes section                     *
+ ***************************************************************************/
+
+/* Return Codes: DSM_Entry and DS_Entry may return any one of these values. */
+#define TWRC_CUSTOMBASE     0x8000
+
+#define TWRC_SUCCESS          0
+#define TWRC_FAILURE          1 /* Application may get TW_STATUS for info on failure */
+#define TWRC_CHECKSTATUS      2 /* "tried hard"; get status                  */
+#define TWRC_CANCEL           3
+#define TWRC_DSEVENT          4
+#define TWRC_NOTDSEVENT       5
+#define TWRC_XFERDONE         6
+#define TWRC_ENDOFLIST        7 /* After MSG_GETNEXT if nothing left         */
+#define TWRC_INFONOTSUPPORTED 8
+#define TWRC_DATANOTAVAILABLE 9
+
+/* Condition Codes: Application gets these by doing DG_CONTROL DAT_STATUS MSG_GET.  */
+#define TWCC_CUSTOMBASE         0x8000
+
+#define TWCC_SUCCESS            0 /* It worked!                                */
+#define TWCC_BUMMER             1 /* Failure due to unknown causes             */
+#define TWCC_LOWMEMORY          2 /* Not enough memory to perform operation    */
+#define TWCC_NODS               3 /* No Data Source                            */
+#define TWCC_MAXCONNECTIONS     4 /* DS is connected to max possible applications */
+#define TWCC_OPERATIONERROR     5 /* DS or DSM reported error, application shouldn't */
+#define TWCC_BADCAP             6 /* Unknown capability                        */
+#define TWCC_BADPROTOCOL        9 /* Unrecognized MSG DG DAT combination       */
+#define TWCC_BADVALUE           10 /* Data parameter out of range              */
+#define TWCC_SEQERROR           11 /* DG DAT MSG out of expected sequence      */
+#define TWCC_BADDEST            12 /* Unknown destination Application/Source in DSM_Entry */
+#define TWCC_CAPUNSUPPORTED     13 /* Capability not supported by source            */
+#define TWCC_CAPBADOPERATION    14 /* Operation not supported by capability         */
+#define TWCC_CAPSEQERROR        15 /* Capability has dependency on other capability */
+/* Added 1.8 */
+#define TWCC_DENIED             16 /* File System operation is denied (file is protected) */
+#define TWCC_FILEEXISTS         17 /* Operation failed because file already exists. */
+#define TWCC_FILENOTFOUND       18 /* File not found */
+#define TWCC_NOTEMPTY           19 /* Operation failed because directory is not empty */
+#define TWCC_PAPERJAM           20  /* The feeder is jammed */
+#define TWCC_PAPERDOUBLEFEED    21  /* The feeder detected multiple pages */
+#define TWCC_FILEWRITEERROR     22  /* Error writing the file (meant for things like disk full conditions) */
+#define TWCC_CHECKDEVICEONLINE  23  /* The device went offline prior to or during this operation */
+
+
+/* bit patterns: for query the operation that are supported by the data source on a capability */
+/* Application gets these through DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT */
+/* Added 1.6 */
+#define TWQC_GET           0x0001
+#define TWQC_SET           0x0002
+#define TWQC_GETDEFAULT    0x0004
+#define TWQC_GETCURRENT    0x0008
+#define TWQC_RESET         0x0010
+
+
+/****************************************************************************
+ * Entry Points                                                             *
+ ****************************************************************************/
+
+/**********************************************************************
+ * Function: DSM_Entry, the only entry point into the Data Source Manager.
+ *
+ * Parameters:
+ *  pOrigin Identifies the source module of the message. This could
+ *          identify an Application, a Source, or the Source Manager.
+ *
+ *  pDest   Identifies the destination module for the message.
+ *          This could identify an application or a data source.
+ *          If this is NULL, the message goes to the Source Manager.
+ *
+ *  DG      The Data Group.
+ *          Example: DG_IMAGE.
+ *
+ *  DAT     The Data Attribute Type.
+ *          Example: DAT_IMAGEMEMXFER.
+ *
+ *  MSG     The message.  Messages are interpreted by the destination module
+ *          with respect to the Data Group and the Data Attribute Type.
+ *          Example: MSG_GET.
+ *
+ *  pData   A pointer to the data structure or variable identified
+ *          by the Data Attribute Type.
+ *          Example: (TW_MEMREF)&ImageMemXfer
+ *                   where ImageMemXfer is a TW_IMAGEMEMXFER structure.
+ *
+ * Returns:
+ *  ReturnCode
+ *         Example: TWRC_SUCCESS.
+ *
+ ********************************************************************/
+
+/* Don't mangle the name "DSM_Entry" if we're compiling in C++! */
+#ifdef  __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+
+#ifdef  _MSWIN_
+TW_UINT16 FAR PASCAL DSM_Entry( pTW_IDENTITY pOrigin,
+                                pTW_IDENTITY pDest,
+                                TW_UINT32    DG,
+                                TW_UINT16    DAT,
+                                TW_UINT16    MSG,
+                                TW_MEMREF    pData);
+
+typedef TW_UINT16 (FAR PASCAL *DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY,
+                                             TW_UINT32,    TW_UINT16,
+                                             TW_UINT16,    TW_MEMREF);
+#else   /* _MSWIN_ */
+
+/*FAR PASCAL TW_UINT16 DSM_Entry( pTW_IDENTITY pOrigin,
+                                pTW_IDENTITY pDest,
+                                TW_UINT32    DG,
+                                TW_UINT16    DAT,
+                                TW_UINT16    MSG,
+                                TW_MEMREF    pData);*/
+
+typedef TW_UINT16 (*DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY,
+                                  TW_UINT32,    TW_UINT16,
+                                  TW_UINT16,    TW_MEMREF);
+#endif  /* _MSWIN_ */
+
+#ifdef  __cplusplus
+}
+#endif  /* cplusplus */
+
+
+/**********************************************************************
+ * Function: DS_Entry, the entry point provided by a Data Source.
+ *
+ * Parameters:
+ *  pOrigin Identifies the source module of the message. This could
+ *          identify an application or the Data Source Manager.
+ *
+ *  DG      The Data Group.
+ *          Example: DG_IMAGE.
+ *
+ *  DAT     The Data Attribute Type.
+ *          Example: DAT_IMAGEMEMXFER.
+ *
+ *  MSG     The message.  Messages are interpreted by the data source
+ *          with respect to the Data Group and the Data Attribute Type.
+ *          Example: MSG_GET.
+ *
+ *  pData   A pointer to the data structure or variable identified
+ *          by the Data Attribute Type.
+ *          Example: (TW_MEMREF)&ImageMemXfer
+ *                   where ImageMemXfer is a TW_IMAGEMEMXFER structure.
+ *
+ * Returns:
+ *  ReturnCode
+ *          Example: TWRC_SUCCESS.
+ *
+ * Note:
+ *  The DSPROC type is only used by an application when it calls
+ *  a Data Source directly, bypassing the Data Source Manager.
+ *
+ ********************************************************************/
+/* Don't mangle the name "DS_Entry" if we're compiling in C++! */
+#ifdef  __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+#ifdef  _MSWIN_
+  TW_UINT16 DECLSPEC_EXPORT PASCAL DS_Entry (pTW_IDENTITY pOrigin,
+                                             TW_UINT32    DG,
+                                             TW_UINT16    DAT,
+                                             TW_UINT16    MSG,
+                                             TW_MEMREF    pData);
+
+  typedef TW_UINT16 (FAR PASCAL *DSENTRYPROC) (pTW_IDENTITY pOrigin,
+                                               TW_UINT32    DG,
+                                               TW_UINT16    DAT,
+                                               TW_UINT16    MSG,
+                                               TW_MEMREF    pData);
+#else   /* _MSWIN_ */
+/*FAR PASCAL TW_UINT16 DS_Entry( pTW_IDENTITY pOrigin,
+                               TW_UINT32    DG,
+                               TW_UINT16    DAT,
+                               TW_UINT16    MSG,
+                               TW_MEMREF    pData);*/
+
+typedef TW_UINT16 (*DSENTRYPROC)(pTW_IDENTITY,
+                                  TW_UINT32,    TW_UINT16,
+                                  TW_UINT16,    TW_MEMREF);
+#endif  /* _MSWIN_ */
+#ifdef  __cplusplus
+}
+#endif  /* cplusplus */
+
+/* The Twain structures must be packed on 2 byte alignment */
+#include "poppack.h"
+
+#endif  /* TWAIN */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl
new file mode 100644
index 0000000..69b14ce
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2013 Daniel Jeliński
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "transact.idl";
+import "objidl.idl";
+
+interface ITransactionResourceAsync;
+interface ITransactionLastResourceAsync;
+interface ITransactionResource;
+interface ITransactionEnlistmentAsync;
+interface ITransactionLastEnlistmentAsync;
+interface ITransactionExportFactory;
+interface ITransactionImportWhereabouts;
+interface ITransactionExport;
+interface ITransactionImport;
+interface ITipTransaction;
+interface ITipHelper;
+interface ITipPullSink;
+interface IDtcNetworkAccessConfig;
+interface IDtcNetworkAccessConfig2;
+
+[
+    object,
+    uuid(69e971f0-23ce-11cf-ad60-00aa00a74ccd)
+]
+interface ITransactionResourceAsync : IUnknown {
+    HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase);
+    HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW);
+    HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW);
+    HRESULT TMDown(void);
+};
+
+[
+    object,
+    uuid(c82bd532-5b30-11d3-8a91-00c04f79eb6d)
+]
+interface ITransactionLastResourceAsync : IUnknown {
+    HRESULT DelegateCommit([in]DWORD grfRM);
+    HRESULT ForgetRequest([in]XACTUOW *pNewUOW);
+};
+
+[
+    object,
+    uuid(ee5ff7b3-4572-11d0-9452-00a0c905416e)
+]
+interface ITransactionResource : IUnknown {
+    HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase);
+    HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW);
+    HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW);
+    HRESULT TMDown(void);
+};
+
+[
+    object,
+    uuid(0fb15081-af41-11ce-bd2b-204c4f4f5020)
+]
+interface ITransactionEnlistmentAsync : IUnknown {
+    HRESULT PrepareRequestDone([in]HRESULT hr,[in]IMoniker *pmk,[in]BOID *pboidReason);
+    HRESULT CommitRequestDone([in]HRESULT hr);
+    HRESULT AbortRequestDone([in]HRESULT hr);
+};
+
+[
+    object,
+    uuid(c82bd533-5b30-11d3-8a91-00c04f79eb6d)
+]
+interface ITransactionLastEnlistmentAsync : IUnknown {
+    HRESULT TransactionOutcome([in]XACTSTAT XactStat,[in]BOID *pboidReason);
+};
+
+[
+    object,
+    uuid(e1cf9b53-8745-11ce-a9ba-00aa006c3706)
+]
+interface ITransactionExportFactory : IUnknown {
+    HRESULT GetRemoteClassId([in]CLSID *pclsid);
+    HRESULT Create([in]ULONG cbWhereabouts,[in]byte *rgbWhereabouts,[out]ITransactionExport **ppExport);
+};
+
+[
+    object,
+    uuid(0141fda4-8fc0-11ce-bd18-204c4f4f5020)
+]
+interface ITransactionImportWhereabouts : IUnknown {
+    HRESULT GetWhereaboutsSize([out]ULONG *pcbWhereabouts);
+    HRESULT GetWhereabouts([in]ULONG cbWhereabouts,[out]byte *rgbWhereabouts,[out]ULONG *pcbUsed);
+};
+
+[
+    object,
+    uuid(0141fda5-8fc0-11ce-bd18-204c4f4f5020)
+]
+interface ITransactionExport : IUnknown {
+    HRESULT Export([in]IUnknown *punkTransaction,[out]ULONG *pcbTransactionCookie);
+    HRESULT GetTransactionCookie([in]IUnknown *punkTransaction,[in]ULONG cbTransactionCookie,[out]byte *rgbTransactionCookie,[out]ULONG *pcbUsed);
+};
+
+[
+    object,
+    uuid(e1cf9b5a-8745-11ce-a9ba-00aa006c3706)
+]
+interface ITransactionImport : IUnknown {
+    HRESULT Import([in]ULONG cbTransactionCookie,[in]byte *rgbTransactionCookie,[in]IID *piid,[out,iid_is(piid)]void **ppvTransaction);
+};
+[
+    object,
+    uuid(17cf72d0-bac5-11d1-b1bf-00c04fc2f3ef)
+]
+interface ITipTransaction : IUnknown {
+    HRESULT Push([in]char *i_pszRemoteTmUrl,[out]char **o_ppszRemoteTxUrl);
+    HRESULT GetTransactionUrl([out]char **o_ppszLocalTxUrl);
+};
+[
+    object,
+    uuid(17cf72d1-bac5-11d1-b1bf-00c04fc2f3ef)
+]
+interface ITipHelper : IUnknown {
+    HRESULT Pull([in]char *i_pszTxUrl,[out]ITransaction **o_ppITransaction);
+    HRESULT PullAsync([in]char *i_pszTxUrl,[in]ITipPullSink *i_pTipPullSink,[out]ITransaction **o_ppITransaction);
+    HRESULT GetLocalTmUrl([out]char **o_ppszLocalTmUrl);
+};
+[
+    object,
+    uuid(17cf72d2-bac5-11d1-b1bf-00c04fc2f3ef)
+]
+interface ITipPullSink : IUnknown {
+    HRESULT PullComplete([in]HRESULT i_hrPull);
+};
+[
+    object,
+    uuid(9797c15d-a428-4291-87b6-0995031a678d)
+]
+interface IDtcNetworkAccessConfig : IUnknown {
+    HRESULT GetAnyNetworkAccess([out]BOOL *pbAnyNetworkAccess);
+    HRESULT SetAnyNetworkAccess([in]BOOL bAnyNetworkAccess);
+    HRESULT GetNetworkAdministrationAccess([out]BOOL *pbNetworkAdministrationAccess);
+    HRESULT SetNetworkAdministrationAccess([in]BOOL bNetworkAdministrationAccess);
+    HRESULT GetNetworkTransactionAccess([out]BOOL *pbNetworkTransactionAccess);
+    HRESULT SetNetworkTransactionAccess([in]BOOL bNetworkTransactionAccess);
+    HRESULT GetNetworkClientAccess([out]BOOL *pbNetworkClientAccess);
+    HRESULT SetNetworkClientAccess([in]BOOL bNetworkClientAccess);
+    HRESULT GetNetworkTIPAccess([out]BOOL *pbNetworkTIPAccess);
+    HRESULT SetNetworkTIPAccess([in]BOOL bNetworkTIPAccess);
+    HRESULT GetXAAccess([out]BOOL *pbXAAccess);
+    HRESULT SetXAAccess([in]BOOL bXAAccess);
+    HRESULT RestartDtcService(void);
+};
+
+typedef enum AUTHENTICATION_LEVEL {
+    NO_AUTHENTICATION_REQUIRED,
+    INCOMING_AUTHENTICATION_REQUIRED,
+    MUTUAL_AUTHENTICATION_REQUIRED
+} AUTHENTICATION_LEVEL;
+
+[
+    object,
+    uuid(a7aa013b-eb7d-4f42-b41c-b2dec09ae034)
+]
+interface IDtcNetworkAccessConfig2 : IDtcNetworkAccessConfig {
+    HRESULT GetNetworkInboundAccess([out]BOOL *pbInbound);
+    HRESULT GetNetworkOutboundAccess([out]BOOL *pbOutbound);
+    HRESULT SetNetworkInboundAccess([in]BOOL bInbound);
+    HRESULT SetNetworkOutboundAccess([in]BOOL bOutbound);
+    HRESULT GetAuthenticationLevel([out]AUTHENTICATION_LEVEL *pAuthLevel);
+    HRESULT SetAuthenticationLevel([in]AUTHENTICATION_LEVEL AuthLevel);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl
new file mode 100644
index 0000000..532747a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl
@@ -0,0 +1,524 @@
+/*
+ * Copyright (C) 2013 Daniel Jeliński
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "txcoord.idl";
+
+interface IXATransLookup;
+interface IXATransLookup2;
+interface IResourceManagerSink;
+interface IResourceManager;
+interface ILastResourceManager;
+interface IResourceManager2;
+interface IXAConfig;
+/*interface IRMHelper;
+interface IXAObtainRMInfo;*/
+interface IResourceManagerFactory;
+interface IResourceManagerFactory2;
+interface IPrepareInfo;
+interface IPrepareInfo2;
+interface IGetDispenser;
+interface ITransactionVoterBallotAsync2;
+interface ITransactionVoterNotifyAsync2;
+interface ITransactionVoterFactory2;
+interface ITransactionPhase0EnlistmentAsync;
+interface ITransactionPhase0NotifyAsync;
+interface ITransactionPhase0Factory;
+interface ITransactionTransmitter;
+interface ITransactionTransmitterFactory;
+interface ITransactionReceiver;
+interface ITransactionReceiverFactory;
+interface IDtcLuConfigure;
+interface IDtcLuRecovery;
+interface IDtcLuRecoveryFactory;
+interface IDtcLuRecoveryInitiatedByDtcTransWork;
+interface IDtcLuRecoveryInitiatedByDtcStatusWork;
+interface IDtcLuRecoveryInitiatedByDtc;
+interface IDtcLuRecoveryInitiatedByLuWork;
+interface IDtcLuRecoveryInitiatedByLu;
+interface IDtcLuRmEnlistment;
+interface IDtcLuRmEnlistmentSink;
+interface IDtcLuRmEnlistmentFactory;
+interface IDtcLuSubordinateDtc;
+interface IDtcLuSubordinateDtcSink;
+interface IDtcLuSubordinateDtcFactory;
+
+cpp_quote("#define XACTTOMSG(dwXact) (dwXact-0x00040000+0x40000000)")
+typedef enum XACT_DTC_CONSTANTS {
+    XACT_E_CONNECTION_REQUEST_DENIED = 0x8004d100,
+    XACT_E_TOOMANY_ENLISTMENTS = 0x8004d101,
+    XACT_E_DUPLICATE_GUID = 0x8004d102,
+    XACT_E_NOTSINGLEPHASE = 0x8004d103,
+    XACT_E_RECOVERYALREADYDONE = 0x8004d104,
+    XACT_E_PROTOCOL = 0x8004d105,
+    XACT_E_RM_FAILURE = 0x8004d106,
+    XACT_E_RECOVERY_FAILED = 0x8004d107,
+    XACT_E_LU_NOT_FOUND = 0x8004d108,
+    XACT_E_DUPLICATE_LU = 0x8004d109,
+    XACT_E_LU_NOT_CONNECTED = 0x8004d10a,
+    XACT_E_DUPLICATE_TRANSID = 0x8004d10b,
+    XACT_E_LU_BUSY = 0x8004d10c,
+    XACT_E_LU_NO_RECOVERY_PROCESS = 0x8004d10d,
+    XACT_E_LU_DOWN = 0x8004d10e,
+    XACT_E_LU_RECOVERING = 0x8004d10f,
+    XACT_E_LU_RECOVERY_MISMATCH = 0x8004d110,
+    XACT_E_RM_UNAVAILABLE = 0x8004d111,
+    XACT_E_LRMRECOVERYALREADYDONE = 0x8004d112,
+    XACT_E_NOLASTRESOURCEINTERFACE = 0x8004d113,
+    XACT_S_NONOTIFY = 0x4d100,
+    XACT_OK_NONOTIFY = 0x4d101,
+    dwUSER_MS_SQLSERVER = 0xffff
+} XACT_DTC_CONSTANTS;
+
+cpp_quote("#ifndef _XID_T_DEFINED")
+cpp_quote("#define _XID_T_DEFINED")
+typedef struct xid_t {
+    LONG32 formatID;
+    LONG32 gtrid_length;
+    LONG32 bqual_length;
+    char data[128 ];
+} XID;
+cpp_quote("#endif")
+/* idl doesn't like this type
+cpp_quote("#ifndef _XA_SWITCH_T_DEFINED")
+cpp_quote("#define _XA_SWITCH_T_DEFINED")
+typedef struct xa_switch_t {
+    char name[32 ];
+    LONG32 flags;
+    LONG32 version;
+    int (__cdecl *xa_open_entry)(char *__MIDL_0004,int __MIDL_0005,LONG32 __MIDL_0006);
+    int (__cdecl *xa_close_entry)(char *__MIDL_0008,int __MIDL_0009,LONG32 __MIDL_0010);
+    int (__cdecl *xa_start_entry)(XID *__MIDL_0012,int __MIDL_0013,LONG32 __MIDL_0014);
+    int (__cdecl *xa_end_entry)(XID *__MIDL_0016,int __MIDL_0017,LONG32 __MIDL_0018);
+    int (__cdecl *xa_rollback_entry)(XID *__MIDL_0020,int __MIDL_0021,LONG32 __MIDL_0022);
+    int (__cdecl *xa_prepare_entry)(XID *__MIDL_0024,int __MIDL_0025,LONG32 __MIDL_0026);
+    int (__cdecl *xa_commit_entry)(XID *__MIDL_0028,int __MIDL_0029,LONG32 __MIDL_0030);
+    int (__cdecl *xa_recover_entry)(XID *__MIDL_0032,LONG32 __MIDL_0033,int __MIDL_0034,LONG32 __MIDL_0035);
+    int (__cdecl *xa_forget_entry)(XID *__MIDL_0037,int __MIDL_0038,LONG32 __MIDL_0039);
+    int (__cdecl *xa_complete_entry)(int *__MIDL_0041,int *__MIDL_0042,int __MIDL_0043,LONG32 __MIDL_0044);
+} xa_switch_t;
+cpp_quote("#endif")
+*/
+[
+    object,
+    uuid(f3b1f131-eeda-11ce-aed4-00aa0051e2c4)
+]
+interface IXATransLookup : IUnknown {
+    HRESULT Lookup([out]ITransaction **ppTransaction);
+};
+[
+    object,
+    uuid(bf193c85-0d1a-4290-b88f-d2cb8873d1e7)
+]
+interface IXATransLookup2 : IUnknown {
+    HRESULT Lookup([in]XID *pXID,[out]ITransaction **ppTransaction);
+};
+[
+    object,
+    uuid(0d563181-defb-11ce-aed1-00aa0051e2c4)
+]
+interface IResourceManagerSink : IUnknown {
+    HRESULT TMDown(void);
+};
+[
+    object,
+    uuid(13741d21-87eb-11ce-8081-0080c758527e)
+]
+interface IResourceManager : IUnknown {
+    HRESULT Enlist([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pRes,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]ITransactionEnlistmentAsync **ppEnlist);
+    HRESULT Reenlist([in]byte *pPrepInfo,[in]ULONG cbPrepInfo,[in]DWORD lTimeout,[out]XACTSTAT *pXactStat);
+    HRESULT ReenlistmentComplete(void);
+    HRESULT GetDistributedTransactionManager([in]REFIID iid,[out,iid_is(iid)]void **ppvObject);
+};
+[
+    object,
+    uuid(4d964ad4-5b33-11d3-8a91-00c04f79eb6d)
+]
+interface ILastResourceManager : IUnknown {
+    HRESULT TransactionCommitted([in]byte *pPrepInfo,[in]ULONG cbPrepInfo);
+    HRESULT RecoveryDone(void);
+};
+[
+    object,
+    uuid(d136c69a-f749-11d1-8f47-00c04f8ee57d)
+]
+interface IResourceManager2 : IResourceManager {
+    HRESULT Enlist2([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pResAsync,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]XID *pXid,[out]ITransactionEnlistmentAsync **ppEnlist);
+    HRESULT Reenlist2([in]XID *pXid,[in]DWORD dwTimeout,[out]XACTSTAT *pXactStat);
+};
+[
+    object,
+    uuid(c8a6e3a1-9a8c-11cf-a308-00a0c905416e)
+]
+interface IXAConfig : IUnknown {
+    HRESULT Initialize([in]GUID clsidHelperDll);
+    HRESULT Terminate(void);
+};
+/* commented out because idl doesn't accept xa_switch_t type
+[
+    object,
+    uuid(E793F6D1-F53D-11cf-A60D-00A0C905416E)
+]
+interface IRMHelper : IUnknown {
+    HRESULT RMCount([in]DWORD dwcTotalNumberOfRMs);
+    HRESULT RMInfo([in]xa_switch_t *pXa_Switch,[in]BOOL fCDeclCallingConv,[in]char *pszOpenString,[in]char *pszCloseString,[in]GUID guidRMRecovery);
+};
+[
+    object,
+    uuid(E793F6D2-F53D-11cf-A60D-00A0C905416E)
+]
+interface IXAObtainRMInfo : IUnknown {
+    HRESULT ObtainRMInfo([in]IRMHelper *pIRMHelper);
+};*/
+[
+    object,
+    uuid(13741d20-87eb-11ce-8081-0080c758527e)
+]
+interface IResourceManagerFactory : IUnknown {
+    HRESULT Create([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[out]IResourceManager **ppResMgr);
+};
+[
+    object,
+    uuid(6b369c21-fbd2-11d1-8f47-00c04f8ee57d)
+]
+interface IResourceManagerFactory2 : IResourceManagerFactory {
+    HRESULT CreateEx([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[in]REFIID riidRequested,[out, iid_is(riidRequested)]void **ppvResMgr);
+};
+
+[
+    object,
+    uuid(80c7bfd0-87ee-11ce-8081-0080c758527e)
+]
+interface IPrepareInfo : IUnknown {
+    HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo);
+    HRESULT GetPrepareInfo([out]byte *pPrepInfo);
+};
+[
+    object,
+    uuid(5fab2547-9779-11d1-b886-00c04fb9618a)
+]
+interface IPrepareInfo2 : IUnknown {
+    HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo);
+    HRESULT GetPrepareInfo([in]ULONG cbPrepareInfo,[out]byte *pPrepInfo);
+};
+[
+    object,
+    uuid(c23cc370-87ef-11ce-8081-0080c758527e)
+]
+interface IGetDispenser : IUnknown {
+    HRESULT GetDispenser([in]REFIID iid,[out,iid_is(iid)]void **ppvObject);
+};
+[
+    object,
+    uuid(5433376c-414d-11d3-b206-00c04fc2f3ef)
+]
+interface ITransactionVoterBallotAsync2 : IUnknown {
+    HRESULT VoteRequestDone([in]HRESULT hr,[in]BOID *pboidReason);
+};
+[
+    object,
+    uuid(5433376b-414d-11d3-b206-00c04fc2f3ef)
+]
+interface ITransactionVoterNotifyAsync2 : ITransactionOutcomeEvents {
+    HRESULT VoteRequest(void);
+};
+[
+    object,
+    uuid(5433376a-414d-11d3-b206-00c04fc2f3ef)
+]
+interface ITransactionVoterFactory2 : IUnknown {
+    HRESULT Create([in]ITransaction *pTransaction,[in]ITransactionVoterNotifyAsync2 *pVoterNotify,[out]ITransactionVoterBallotAsync2 **ppVoterBallot);
+};
+[
+    object,
+    uuid(82dc88e1-a954-11d1-8f88-00600895e7d5)
+]
+interface ITransactionPhase0EnlistmentAsync : IUnknown {
+    HRESULT Enable(void);
+    HRESULT WaitForEnlistment(void);
+    HRESULT Phase0Done(void);
+    HRESULT Unenlist(void);
+    HRESULT GetTransaction([out]ITransaction **ppITransaction);
+};
+[
+    object,
+    uuid(ef081809-0c76-11d2-87a6-00c04f990f34)
+]
+interface ITransactionPhase0NotifyAsync : IUnknown {
+    HRESULT Phase0Request([in]BOOL fAbortingHint);
+    HRESULT EnlistCompleted([in]HRESULT status);
+};
+[
+    object,
+    uuid(82dc88e0-a954-11d1-8f88-00600895e7d5)
+]
+interface ITransactionPhase0Factory : IUnknown {
+    HRESULT Create([in]ITransactionPhase0NotifyAsync *pPhase0Notify,[out]ITransactionPhase0EnlistmentAsync **ppPhase0Enlistment);
+};
+[
+    object,
+    uuid(59313e01-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionTransmitter : IUnknown {
+    HRESULT Set([in]ITransaction *pTransaction);
+    HRESULT GetPropagationTokenSize([out]ULONG *pcbToken);
+    HRESULT MarshalPropagationToken([in]ULONG cbToken,[out]byte *rgbToken,[out]ULONG *pcbUsed);
+    HRESULT UnmarshalReturnToken([in]ULONG cbReturnToken,[in]byte *rgbReturnToken);
+    HRESULT Reset(void);
+};
+[
+    object,
+    uuid(59313e00-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionTransmitterFactory : IUnknown {
+    HRESULT Create([out]ITransactionTransmitter **ppTransmitter);
+};
+[
+    object,
+    uuid(59313e03-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionReceiver : IUnknown {
+    HRESULT UnmarshalPropagationToken([in]ULONG cbToken,[in]byte *rgbToken,[out]ITransaction **ppTransaction);
+    HRESULT GetReturnTokenSize([out]ULONG *pcbReturnToken);
+    HRESULT MarshalReturnToken([in]ULONG cbReturnToken,[out]byte *rgbReturnToken,[out]ULONG *pcbUsed);
+    HRESULT Reset(void);
+};
+[
+    object,
+    uuid(59313e02-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionReceiverFactory : IUnknown {
+    HRESULT Create([out]ITransactionReceiver **ppReceiver);
+};
+
+typedef struct _ProxyConfigParams {
+    WORD wcThreadsMax;
+} PROXY_CONFIG_PARAMS;
+
+[
+    object,
+    uuid(4131e760-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuConfigure : IUnknown {
+    HRESULT Add([in]byte *pucLuPair,[in]DWORD cbLuPair);
+    HRESULT Delete([in]byte *pucLuPair,[in]DWORD cbLuPair);
+};
+[
+    object,
+    uuid(ac2b8ad2-d6f0-11d0-b386-00a0c9083365)
+]
+interface IDtcLuRecovery : IUnknown {
+};
+[
+    object,
+    uuid(4131e762-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryFactory : IUnknown {
+    HRESULT Create([in]byte *pucLuPair,[in]DWORD cbLuPair,[out]IDtcLuRecovery **ppRecovery);
+};
+
+typedef enum _DtcLu_LocalRecovery_Work {
+    DTCINITIATEDRECOVERYWORK_CHECKLUSTATUS = 1,
+    DTCINITIATEDRECOVERYWORK_TRANS,
+    DTCINITIATEDRECOVERYWORK_TMDOWN
+} DTCINITIATEDRECOVERYWORK;
+
+typedef enum _DtcLu_Xln {
+    DTCLUXLN_COLD = 1,
+    DTCLUXLN_WARM
+} DTCLUXLN;
+
+typedef enum _DtcLu_Xln_Confirmation {
+    DTCLUXLNCONFIRMATION_CONFIRM = 1,
+    DTCLUXLNCONFIRMATION_LOGNAMEMISMATCH,
+    DTCLUXLNCONFIRMATION_COLDWARMMISMATCH,
+    DTCLUXLNCONFIRMATION_OBSOLETE
+} DTCLUXLNCONFIRMATION;
+
+typedef enum _DtcLu_Xln_Response {
+    DTCLUXLNRESPONSE_OK_SENDOURXLNBACK = 1,
+    DTCLUXLNRESPONSE_OK_SENDCONFIRMATION,
+    DTCLUXLNRESPONSE_LOGNAMEMISMATCH,
+    DTCLUXLNRESPONSE_COLDWARMMISMATCH
+} DTCLUXLNRESPONSE;
+
+typedef enum _DtcLu_Xln_Error {
+    DTCLUXLNERROR_PROTOCOL = 1,
+    DTCLUXLNERROR_LOGNAMEMISMATCH,
+    DTCLUXLNERROR_COLDWARMMISMATCH
+} DTCLUXLNERROR;
+
+typedef enum _DtcLu_CompareState {
+    DTCLUCOMPARESTATE_COMMITTED = 1,
+    DTCLUCOMPARESTATE_HEURISTICCOMMITTED,
+    DTCLUCOMPARESTATE_HEURISTICMIXED,
+    DTCLUCOMPARESTATE_HEURISTICRESET,
+    DTCLUCOMPARESTATE_INDOUBT,
+    DTCLUCOMPARESTATE_RESET
+} DTCLUCOMPARESTATE;
+
+typedef enum _DtcLu_CompareStates_Confirmation {
+    DTCLUCOMPARESTATESCONFIRMATION_CONFIRM = 1,
+    DTCLUCOMPARESTATESCONFIRMATION_PROTOCOL
+} DTCLUCOMPARESTATESCONFIRMATION;
+
+typedef enum _DtcLu_CompareStates_Error {
+    DTCLUCOMPARESTATESERROR_PROTOCOL = 1
+} DTCLUCOMPARESTATESERROR;
+
+typedef enum _DtcLu_CompareStates_Response {
+    DTCLUCOMPARESTATESRESPONSE_OK = 1,
+    DTCLUCOMPARESTATESRESPONSE_PROTOCOL
+} DTCLUCOMPARESTATESRESPONSE;
+
+[
+    object,
+    uuid(4131e765-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryInitiatedByDtcTransWork : IUnknown {
+    HRESULT GetLogNameSizes([out]DWORD *pcbOurLogName,[out]DWORD *pcbRemoteLogName);
+    HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[in,out]unsigned char *pRemoteLogName,[out]DWORD *pdwProtocol);
+    HRESULT HandleConfirmationFromOurXln([in]DTCLUXLNCONFIRMATION Confirmation);
+    HRESULT HandleTheirXlnResponse([in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]DWORD dwProtocol,[out]DTCLUXLNCONFIRMATION *pConfirmation);
+    HRESULT HandleErrorFromOurXln([in]DTCLUXLNERROR Error);
+    HRESULT CheckForCompareStates([out]BOOL *fCompareStates);
+    HRESULT GetOurTransIdSize([in,out]DWORD *pcbOurTransId);
+    HRESULT GetOurCompareStates([in,out]unsigned char *pOurTransId,[out]DTCLUCOMPARESTATE *pCompareState);
+    HRESULT HandleTheirCompareStatesResponse([in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESCONFIRMATION *pConfirmation);
+    HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error);
+    HRESULT ConversationLost(void);
+    HRESULT GetRecoverySeqNum([out]LONG *plRecoverySeqNum);
+    HRESULT ObsoleteRecoverySeqNum([in]LONG lNewRecoverySeqNum);
+};
+[
+    object,
+    uuid(4131e766-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryInitiatedByDtcStatusWork : IUnknown {
+    HRESULT HandleCheckLuStatus([in]LONG lRecoverySeqNum);
+};
+[
+    object,
+    uuid(4131e764-1aea-11d0-944b-00a0c905416e)
+]
+[local] interface IDtcLuRecoveryInitiatedByDtc : IUnknown {
+    HRESULT GetWork([in,out]DTCINITIATEDRECOVERYWORK *pWork,[in,out]void **ppv);
+};
+[
+    object,
+    uuid(ac2b8ad1-d6f0-11d0-b386-00a0c9083365)
+]
+interface IDtcLuRecoveryInitiatedByLuWork : IUnknown {
+    HRESULT HandleTheirXln([in]LONG lRecoverySeqNum,[in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]unsigned char *pOurLogName,[in]DWORD cbOurLogName,[in]DWORD dwProtocol,[out]DTCLUXLNRESPONSE *pResponse);
+    HRESULT GetOurLogNameSize([in,out]DWORD *pcbOurLogName);
+    HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[out]DWORD *pdwProtocol);
+    HRESULT HandleConfirmationOfOurXln([in]DTCLUXLNCONFIRMATION Confirmation);
+    HRESULT HandleTheirCompareStates([in,out]unsigned char *pRemoteTransId,[in]DWORD cbRemoteTransId,[in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESRESPONSE *pResponse,[out]DTCLUCOMPARESTATE *pCompareState);
+    HRESULT HandleConfirmationOfOurCompareStates([in]DTCLUCOMPARESTATESCONFIRMATION Confirmation);
+    HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error);
+    HRESULT ConversationLost(void);
+};
+[
+    object,
+    uuid(4131e768-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryInitiatedByLu : IUnknown {
+    HRESULT GetObjectToHandleWorkFromLu([out]IDtcLuRecoveryInitiatedByLuWork **ppWork);
+};
+[
+    object,
+    uuid(4131e769-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRmEnlistment : IUnknown {
+    HRESULT Unplug([in]BOOL fConversationLost);
+    HRESULT BackedOut(void);
+    HRESULT BackOut(void);
+    HRESULT Committed(void);
+    HRESULT Forget(void);
+    HRESULT RequestCommit(void);
+};
+[
+    object,
+    uuid(4131e770-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRmEnlistmentSink : IUnknown {
+    HRESULT AckUnplug(void);
+    HRESULT TmDown(void);
+    HRESULT SessionLost(void);
+    HRESULT BackedOut(void);
+    HRESULT BackOut(void);
+    HRESULT Committed(void);
+    HRESULT Forget(void);
+    HRESULT Prepare(void);
+    HRESULT RequestCommit(void);
+};
+[
+    object,
+    uuid(4131e771-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRmEnlistmentFactory : IUnknown {
+    HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]ITransaction *pITransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuRmEnlistmentSink *pRmEnlistmentSink,[in,out]IDtcLuRmEnlistment **ppRmEnlistment);
+};
+[
+    object,
+    uuid(4131e773-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuSubordinateDtc : IUnknown {
+    HRESULT Unplug([in]BOOL fConversationLost);
+    HRESULT BackedOut(void);
+    HRESULT BackOut(void);
+    HRESULT Committed(void);
+    HRESULT Forget(void);
+    HRESULT Prepare(void);
+    HRESULT RequestCommit(void);
+};
+[
+    object,
+    uuid(4131e774-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuSubordinateDtcSink : IUnknown {
+    HRESULT AckUnplug(void);
+    HRESULT TmDown(void);
+    HRESULT SessionLost(void);
+    HRESULT BackedOut(void);
+    HRESULT BackOut(void);
+    HRESULT Committed(void);
+    HRESULT Forget(void);
+    HRESULT RequestCommit(void);
+};
+[
+    object,
+    uuid(4131e775-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuSubordinateDtcFactory : IUnknown {
+    HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]IUnknown *punkTransactionOuter,[in]ISOLEVEL isoLevel,[in]ULONG isoFlags,[in]ITransactionOptions *pOptions,[out]ITransaction **ppTransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuSubordinateDtcSink *pSubordinateDtcSink,[in,out]IDtcLuSubordinateDtc **ppSubordinateDtc);
+};
+
+/* these GUIDs were found in mingw header, but without corresponding interface definitions
+  DEFINE_GUID(IID_IXAResourceManager,0x4131e751,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);
+  DEFINE_GUID(IID_IXAResourceManagerFactory,0x4131e750,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);
+  DEFINE_GUID(IID_IXATransaction,0x4131e752,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);
+*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h
new file mode 100644
index 0000000..a0a1cde
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_UDPMIB_H
+#define __WINE_UDPMIB_H
+
+#define TCPIP_OWNING_MODULE_SIZE 16
+
+
+/* UDP table */
+
+typedef struct _MIB_UDPROW
+{
+    DWORD dwLocalAddr;
+    DWORD dwLocalPort;
+} MIB_UDPROW, *PMIB_UDPROW;
+
+typedef struct _MIB_UDPTABLE
+{
+    DWORD      dwNumEntries;
+    MIB_UDPROW table[1];
+} MIB_UDPTABLE, *PMIB_UDPTABLE;
+
+typedef struct _MIB_UDPROW_OWNER_PID
+{
+    DWORD dwLocalAddr;
+    DWORD dwLocalPort;
+    DWORD dwOwningPid;
+} MIB_UDPROW_OWNER_PID, *PMIB_UDPROW_OWNER_PID;
+
+typedef struct _MIB_UDPTABLE_OWNER_PID
+{
+    DWORD                dwNumEntries;
+    MIB_UDPROW_OWNER_PID table[1];
+} MIB_UDPTABLE_OWNER_PID, *PMIB_UDPTABLE_OWNER_PID;
+
+typedef struct _MIB_UDPROW_OWNER_MODULE
+{
+    DWORD         dwLocalAddr;
+    DWORD         dwLocalPort;
+    DWORD         dwOwningPid;
+    LARGE_INTEGER liCreateTimestamp;
+    __C89_NAMELESS union
+    {
+        __C89_NAMELESS struct
+        {
+            int SpecificPortBind:1;
+        } __C89_NAMELESSSTRUCTNAME;
+        int dwFlags;
+    } __C89_NAMELESSUNIONNAME;
+    ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
+} MIB_UDPROW_OWNER_MODULE, *PMIB_UDPROW_OWNER_MODULE;
+
+typedef struct _MIB_UDPTABLE_OWNER_MODULE
+{
+    DWORD                   dwNumEntries;
+    MIB_UDPROW_OWNER_MODULE table[1];
+} MIB_UDPTABLE_OWNER_MODULE, *PMIB_UDPTABLE_OWNER_MODULE;
+
+/* UDP statistics */
+
+typedef struct _MIB_UDPSTATS
+{
+    DWORD dwInDatagrams;
+    DWORD dwNoPorts;
+    DWORD dwInErrors;
+    DWORD dwOutDatagrams;
+    DWORD dwNumAddrs;
+} MIB_UDPSTATS, *PMIB_UDPSTATS;
+
+#endif /* __WINE_UDPMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h
new file mode 100644
index 0000000..aac9f07
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2012 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <uiautomationcore.h>
+#include <uiautomationclient.h>
+#include <uiautomationcoreapi.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl
new file mode 100644
index 0000000..8d91ac7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2012 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define DO_NO_IMPORTS
+import "uiautomationcore.idl";
+
+[
+    uuid(944de083-8fb8-45cf-bcb7-c477acb2f897),
+    lcid(0),
+    version(1.0)
+]
+library UIAutomationClient {
+    importlib ("stdole2.tlb");
+
+    /* FIXME: Uncomment when properly supported in widl
+    [dllname("<no entry points>")]
+    module UIA_PropertyIds
+    {
+    */
+        const long UIA_RuntimeIdPropertyId              = 30000;
+        const long UIA_BoundingRectanglePropertyId      = 30001;
+        const long UIA_ProcessIdPropertyId              = 30002;
+        const long UIA_ControlTypePropertyId            = 30003;
+        const long UIA_LocalizedControlTypePropertyId   = 30004;
+        const long UIA_NamePropertyId                   = 30005;
+        const long UIA_AcceleratorKeyPropertyId         = 30006;
+        const long UIA_AccessKeyPropertyId              = 30007;
+        const long UIA_HasKeyboardFocusPropertyId       = 30008;
+        const long UIA_IsKeyboardFocusablePropertyId    = 30009;
+        const long UIA_IsEnabledPropertyId              = 30010;
+        const long UIA_AutomationIdPropertyId           = 30011;
+        const long UIA_ClassNamePropertyId              = 30012;
+        const long UIA_HelpTextPropertyId               = 30013;
+        const long UIA_ClickablePointPropertyId         = 30014;
+        const long UIA_CulturePropertyId                = 30015;
+        const long UIA_IsControlElementPropertyId       = 30016;
+        const long UIA_IsContentElementPropertyId       = 30017;
+        const long UIA_LabeledByPropertyId              = 30018;
+        const long UIA_IsPasswordPropertyId             = 30019;
+        const long UIA_NativeWindowHandlePropertyId     = 30020;
+        const long UIA_ItemTypePropertyId               = 30021;
+        const long UIA_IsOffscreenPropertyId            = 30022;
+        const long UIA_OrientationPropertyId            = 30023;
+        const long UIA_FrameworkIdPropertyId            = 30024;
+        const long UIA_IsRequiredForFormPropertyId      = 30025;
+        const long UIA_ItemStatusPropertyId             = 30026;
+        const long UIA_IsDockPatternAvailablePropertyId = 30027;
+        const long UIA_IsExpandCollapsePatternAvailablePropertyId = 30028;
+        const long UIA_IsGridItemPatternAvailablePropertyId       = 30029;
+        const long UIA_IsGridPatternAvailablePropertyId           = 30030;
+        const long UIA_IsInvokePatternAvailablePropertyId         = 30031;
+        const long UIA_IsMultipleViewPatternAvailablePropertyId   = 30032;
+        const long UIA_IsRangeValuePatternAvailablePropertyId     = 30033;
+        const long UIA_IsScrollPatternAvailablePropertyId         = 30034;
+        const long UIA_IsScrollItemPatternAvailablePropertyId     = 30035;
+        const long UIA_IsSelectionItemPatternAvailablePropertyId  = 30036;
+        const long UIA_IsSelectionPatternAvailablePropertyId      = 30037;
+        const long UIA_IsTablePatternAvailablePropertyId          = 30038;
+        const long UIA_IsTableItemPatternAvailablePropertyId      = 30039;
+        const long UIA_IsTextPatternAvailablePropertyId           = 30040;
+        const long UIA_IsTogglePatternAvailablePropertyId         = 30041;
+        const long UIA_IsTransformPatternAvailablePropertyId      = 30042;
+        const long UIA_IsValuePatternAvailablePropertyId          = 30043;
+        const long UIA_IsWindowPatternAvailablePropertyId         = 30044;
+        const long UIA_ValueValuePropertyId             = 30045;
+        const long UIA_ValueIsReadOnlyPropertyId        = 30046;
+        const long UIA_RangeValueValuePropertyId        = 30047;
+        const long UIA_RangeValueIsReadOnlyPropertyId   = 30048;
+        const long UIA_RangeValueMinimumPropertyId      = 30049;
+        const long UIA_RangeValueMaximumPropertyId      = 30050;
+        const long UIA_RangeValueLargeChangePropertyId  = 30051;
+        const long UIA_RangeValueSmallChangePropertyId  = 30052;
+        const long UIA_ScrollHorizontalScrollPercentPropertyId    = 30053;
+        const long UIA_ScrollHorizontalViewSizePropertyId         = 30054;
+        const long UIA_ScrollVerticalScrollPercentPropertyId      = 30055;
+        const long UIA_ScrollVerticalViewSizePropertyId           = 30056;
+        const long UIA_ScrollHorizontallyScrollablePropertyId     = 30057;
+        const long UIA_ScrollVerticallyScrollablePropertyId       = 30058;
+        const long UIA_SelectionSelectionPropertyId               = 30059;
+        const long UIA_SelectionCanSelectMultiplePropertyId       = 30060;
+        const long UIA_SelectionIsSelectionRequiredPropertyId     = 30061;
+        const long UIA_GridRowCountPropertyId           = 30062;
+        const long UIA_GridColumnCountPropertyId        = 30063;
+        const long UIA_GridItemRowPropertyId            = 30064;
+        const long UIA_GridItemColumnPropertyId         = 30065;
+        const long UIA_GridItemRowSpanPropertyId        = 30066;
+        const long UIA_GridItemColumnSpanPropertyId     = 30067;
+        const long UIA_GridItemContainingGridPropertyId = 30068;
+        const long UIA_DockDockPositionPropertyId       = 30069;
+        const long UIA_ExpandCollapseExpandCollapseStatePropertyId = 30070;
+        const long UIA_MultipleViewCurrentViewPropertyId           = 30071;
+        const long UIA_MultipleViewSupportedViewsPropertyId        = 30072;
+        const long UIA_WindowCanMaximizePropertyId                 = 30073;
+        const long UIA_WindowCanMinimizePropertyId                 = 30074;
+        const long UIA_WindowWindowVisualStatePropertyId           = 30075;
+        const long UIA_WindowWindowInteractionStatePropertyId      = 30076;
+        const long UIA_WindowIsModalPropertyId                     = 30077;
+        const long UIA_WindowIsTopmostPropertyId                   = 30078;
+        const long UIA_SelectionItemIsSelectedPropertyId           = 30079;
+        const long UIA_SelectionItemSelectionContainerPropertyId   = 30080;
+        const long UIA_TableRowHeadersPropertyId                   = 30081;
+        const long UIA_TableColumnHeadersPropertyId                = 30082;
+        const long UIA_TableRowOrColumnMajorPropertyId             = 30083;
+        const long UIA_TableItemRowHeaderItemsPropertyId           = 30084;
+        const long UIA_TableItemColumnHeaderItemsPropertyId        = 30085;
+        const long UIA_ToggleToggleStatePropertyId                 = 30086;
+        const long UIA_TransformCanMovePropertyId                  = 30087;
+        const long UIA_TransformCanResizePropertyId                = 30088;
+        const long UIA_TransformCanRotatePropertyId                = 30089;
+        const long UIA_IsLegacyIAccessiblePatternAvailablePropertyId  = 30090;
+        const long UIA_LegacyIAccessibleChildIdPropertyId          = 30091;
+        const long UIA_LegacyIAccessibleNamePropertyId             = 30092;
+        const long UIA_LegacyIAccessibleValuePropertyId            = 30093;
+        const long UIA_LegacyIAccessibleDescriptionPropertyId      = 30094;
+        const long UIA_LegacyIAccessibleRolePropertyId             = 30095;
+        const long UIA_LegacyIAccessibleStatePropertyId            = 30096;
+        const long UIA_LegacyIAccessibleHelpPropertyId             = 30097;
+        const long UIA_LegacyIAccessibleKeyboardShortcutPropertyId = 30098;
+        const long UIA_LegacyIAccessibleSelectionPropertyId        = 30099;
+        const long UIA_LegacyIAccessibleDefaultActionPropertyId    = 30100;
+        const long UIA_AriaRolePropertyId                          = 30101;
+        const long UIA_AriaPropertiesPropertyId                    = 30102;
+        const long UIA_IsDataValidForFormPropertyId                = 30103;
+        const long UIA_ControllerForPropertyId                     = 30104;
+        const long UIA_DescribedByPropertyId                       = 30105;
+        const long UIA_FlowsToPropertyId                           = 30106;
+        const long UIA_ProviderDescriptionPropertyId               = 30107;
+        const long UIA_IsItemContainerPatternAvailablePropertyId   = 30108;
+        const long UIA_IsVirtualizedItemPatternAvailablePropertyId = 30109;
+        const long UIA_IsSynchronizedInputPatternAvailablePropertyId  = 30110;
+    /*
+    }
+    */
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl
new file mode 100644
index 0000000..4c2a9ab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2012 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define DO_NO_IMPORTS
+import "oaidl.idl";
+import "oleacc.idl";
+
+enum ProviderOptions {
+    ProviderOptions_ClientSideProvider    = 0x0001,
+    ProviderOptions_ServerSideProvider    = 0x0002,
+    ProviderOptions_NonClientAreaProvider = 0x0004,
+    ProviderOptions_OverrideProvider      = 0x0008,
+    ProviderOptions_ProviderOwnsSetFocus  = 0x0010,
+    ProviderOptions_UseComThreading       = 0x0020
+};
+
+typedef int PROPERTYID;
+typedef int PATTERNID;
+typedef int EVENTID;
+typedef int TEXTATTRIBUTEID;
+typedef int CONTROLTYPEID;
+
+[
+    version(1.0),
+    uuid(930299ce-9965-4dec-b0f4-a54848d4b667),
+    lcid(0),
+    hidden
+]
+library UIA
+{
+    importlib("stdole2.tlb");
+
+    [
+        object,
+        uuid(d6dd68d1-86fd-4332-8666-9abedea2d24c),
+        pointer_default(unique)
+    ]
+    interface IRawElementProviderSimple : IUnknown
+    {
+        [propget] HRESULT ProviderOptions([out, retval] enum ProviderOptions *pRetVal);
+
+        HRESULT GetPatternProvider(
+                [in] PATTERNID patternId,
+                [out, retval] IUnknown **pRetVal);
+
+        HRESULT GetPropertyValue(
+                [in] PROPERTYID propertyId,
+                [out, retval] VARIANT *pRetVal);
+
+        [propget] HRESULT HostRawElementProvider([out, retval] IRawElementProviderSimple **pRetVal);
+    }
+
+    [
+        object,
+        uuid(f8b80ada-2c44-48d0-89be-5ff23c9cd875),
+        pointer_default(unique),
+        oleautomation
+    ]
+    interface IAccessibleEx : IUnknown
+    {
+        HRESULT GetObjectForChild(
+                [in] long idChild,
+                [out, retval] IAccessibleEx **pRetVal);
+
+        HRESULT GetIAccessiblePair(
+                [out] IAccessible **ppAcc,
+                [out] long *pidChild);
+
+        HRESULT GetRuntimeId(
+                [out, retval] SAFEARRAY(int) *pRetVal);
+
+        HRESULT ConvertReturnedElement(
+                [in] IRawElementProviderSimple *pIn,
+                [out] IAccessibleEx **ppRetValOut);
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h
new file mode 100644
index 0000000..0adc206
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_UIAUTOMATIONCOREAPI
+#define _INC_UIAUTOMATIONCOREAPI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define UIA_E_ELEMENTNOTENABLED       0x80040200
+#define UIA_E_ELEMENTNOTAVAILABLE     0x80040201
+#define UIA_E_NOCLICKABLEPOINT        0x80040202
+#define UIA_E_PROXYASSEMBLYNOTLOADED  0x80040203
+#define UIA_E_NOTSUPPORTED            0x80040204
+#define UIA_E_INVALIDOPERATION        0x80131509
+#define UIA_E_TIMEOUT                 0x80131505
+
+#define UiaAppendRuntimeId  3
+#define UiaRootObjectId     -25
+
+DECLARE_HANDLE(HUIANODE);
+DECLARE_HANDLE(HUIAPATTERNOBJECT);
+DECLARE_HANDLE(HUIATEXTRANGE);
+DECLARE_HANDLE(HUIAEVENT);
+
+BOOL WINAPI UiaPatternRelease(HUIAPATTERNOBJECT hobj);
+BOOL WINAPI UiaTextRangeRelease(HUIATEXTRANGE hobj);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INC_UIAUTOMATIONCOREAPI */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h
new file mode 100644
index 0000000..7381cfe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h
@@ -0,0 +1,221 @@
+/*** Autogenerated by WIDL 1.1.36 from unknwn.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_UNKNWN_H
+#define __WIDL_UNKNWN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <wtypes.h>
+
+/* Forward declarations */
+
+#ifndef __IUnknown_FWD_DEFINED__
+#define __IUnknown_FWD_DEFINED__
+typedef interface IUnknown IUnknown;
+#endif
+
+#ifndef __IClassFactory_FWD_DEFINED__
+#define __IClassFactory_FWD_DEFINED__
+typedef interface IClassFactory IClassFactory;
+#endif
+
+
+/*****************************************************************************
+ * IUnknown interface
+ */
+#ifndef __IUnknown_INTERFACE_DEFINED__
+#define __IUnknown_INTERFACE_DEFINED__
+
+typedef IUnknown *LPUNKNOWN;
+DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUnknown
+{
+    BEGIN_INTERFACE
+
+    virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+        REFIID riid,
+        void **ppvObject) = 0;
+
+    virtual ULONG STDMETHODCALLTYPE AddRef(
+        ) = 0;
+
+    virtual ULONG STDMETHODCALLTYPE Release(
+        ) = 0;
+
+    END_INTERFACE
+};
+#else
+typedef struct IUnknownVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUnknown* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUnknown* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUnknown* This);
+
+    END_INTERFACE
+} IUnknownVtbl;
+interface IUnknown {
+    CONST_VTBL IUnknownVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUnknown_Release(This) (This)->lpVtbl->Release(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(
+    IUnknown* This,
+    REFIID riid,
+    void **ppvObject);
+void __RPC_STUB IUnknown_QueryInterface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(
+    IUnknown* This);
+void __RPC_STUB IUnknown_AddRef_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(
+    IUnknown* This);
+void __RPC_STUB IUnknown_Release_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IUnknown_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IClassFactory interface
+ */
+#ifndef __IClassFactory_INTERFACE_DEFINED__
+#define __IClassFactory_INTERFACE_DEFINED__
+
+typedef IClassFactory *LPCLASSFACTORY;
+DEFINE_GUID(IID_IClassFactory, 0x00000001, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IClassFactory : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        void **ppvObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockServer(
+        BOOL fLock) = 0;
+
+};
+#else
+typedef struct IClassFactoryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IClassFactory* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IClassFactory* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IClassFactory* This);
+
+    /*** IClassFactory methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+        IClassFactory* This,
+        IUnknown *pUnkOuter,
+        REFIID riid,
+        void **ppvObject);
+
+    HRESULT (STDMETHODCALLTYPE *LockServer)(
+        IClassFactory* This,
+        BOOL fLock);
+
+    END_INTERFACE
+} IClassFactoryVtbl;
+interface IClassFactory {
+    CONST_VTBL IClassFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IClassFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IClassFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IClassFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IClassFactory methods ***/
+#define IClassFactory_CreateInstance(This,pUnkOuter,riid,ppvObject) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObject)
+#define IClassFactory_LockServer(This,fLock) (This)->lpVtbl->LockServer(This,fLock)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IClassFactory_RemoteCreateInstance_Proxy(
+    IClassFactory* This,
+    REFIID riid,
+    IUnknown **ppvObject);
+void __RPC_STUB IClassFactory_RemoteCreateInstance_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IClassFactory_RemoteLockServer_Proxy(
+    IClassFactory* This,
+    BOOL fLock);
+void __RPC_STUB IClassFactory_RemoteLockServer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IClassFactory_CreateInstance_Proxy(
+    IClassFactory* This,
+    IUnknown *pUnkOuter,
+    REFIID riid,
+    void **ppvObject);
+HRESULT __RPC_STUB IClassFactory_CreateInstance_Stub(
+    IClassFactory* This,
+    REFIID riid,
+    IUnknown **ppvObject);
+HRESULT CALLBACK IClassFactory_LockServer_Proxy(
+    IClassFactory* This,
+    BOOL fLock);
+HRESULT __RPC_STUB IClassFactory_LockServer_Stub(
+    IClassFactory* This,
+    BOOL fLock);
+
+#endif  /* __IClassFactory_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_UNKNWN_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl
new file mode 100644
index 0000000..dc0f150
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "wtypes.idl";
+#endif
+
+cpp_quote("#ifdef __WINESRC__")
+cpp_quote("#define WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#endif")
+
+cpp_quote("#ifdef WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#define SAVE_WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#undef WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#endif")
+
+[
+  local,
+  object,
+  uuid(00000000-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IUnknown
+{
+  typedef [unique] IUnknown *LPUNKNOWN;
+
+  HRESULT QueryInterface(
+    [in] REFIID riid,
+    [out, iid_is(riid)] void **ppvObject);
+  ULONG AddRef();
+  ULONG Release();
+}
+
+cpp_quote("#ifdef SAVE_WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#define WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#endif")
+
+[
+  object,
+  uuid(00000001-0000-0000-C000-000000000046),
+  pointer_default(unique)
+]
+interface IClassFactory : IUnknown
+{
+  typedef [unique] IClassFactory *LPCLASSFACTORY;
+
+  [local]
+  HRESULT CreateInstance(
+    [in, unique] IUnknown *pUnkOuter,
+    [in] REFIID riid,
+    [out, iid_is(riid)] void **ppvObject);
+
+  [call_as(CreateInstance)]
+  HRESULT RemoteCreateInstance(
+    [in] REFIID riid,
+    [out, iid_is(riid)] IUnknown **ppvObject);
+
+  [local]
+  HRESULT LockServer(
+    [in] BOOL fLock);
+
+  [call_as(LockServer)]
+  HRESULT RemoteLockServer(
+    [in] BOOL fLock);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl
new file mode 100644
index 0000000..537fa47
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2006 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "docobj.idl";
+
+cpp_quote("#define STATURL_QUERYFLAG_ISCACHED  0x010000")
+cpp_quote("#define STATURL_QUERYFLAG_NOURL     0x020000")
+cpp_quote("#define STATURL_QUERYFLAG_NOTITLE   0x040000")
+cpp_quote("#define STATURL_QUERYFLAG_TOPLEVEL  0x080000")
+
+cpp_quote("#define STATURLFLAG_ISCACHED    0x0001")
+cpp_quote("#define STATURLFLAG_ISTOPLEVEL  0x0002")
+
+typedef enum _ADDURL_FLAG
+{
+    ADDURL_FIRST                = 0,
+    ADDURL_ADDTOHISTORYANDCACHE = 0,
+    ADDURL_ADDTOCACHE           = 1,
+    ADDURL_Max                  = 0x7fffffff
+} ADDURL_FLAG;
+
+/*****************************************************************************
+ *    IEnumSTATURL interface
+ */
+[
+    object,
+    uuid(3c374a42-bae4-11cf-bf7d-00aa006946ee),
+    pointer_default(unique)
+]
+interface IEnumSTATURL : IUnknown
+{
+    typedef [unique] IEnumSTATURL *LPENUMSTATURL;
+
+    typedef struct _STATURL
+    {
+        DWORD cbSize;
+        LPWSTR pwcsUrl;
+        LPWSTR pwcsTitle;
+        FILETIME ftLastVisited;
+        FILETIME ftLastUpdated;
+        FILETIME ftExpires;
+        DWORD dwFlags;
+    } STATURL, *LPSTATURL;
+
+    HRESULT Next(
+        [in] ULONG celt,
+        [in, out] LPSTATURL rgelt,
+        [in, out] ULONG *pceltFetched);
+
+    HRESULT Skip([in] ULONG celt);
+    HRESULT Reset();
+    HRESULT Clone([out] IEnumSTATURL **ppenum);
+
+    HRESULT SetFilter(
+        [in] LPCOLESTR poszFilter,
+        [in] DWORD dwFlags);
+}
+
+/*****************************************************************************
+ *    IUrlHistoryStg interface
+ */
+[
+    object,
+    uuid(3c374a41-bae4-11cf-bf7d-00aa006946ee),
+    pointer_default(unique)
+]
+interface IUrlHistoryStg : IUnknown
+{
+    typedef [unique] IUrlHistoryStg *LPURLHISTORYSTG;
+
+    HRESULT AddUrl(
+        [in] LPCOLESTR pocsUrl,
+        [in, unique] LPCOLESTR pocsTitle,
+        [in] DWORD dwFlags);
+
+    HRESULT DeleteUrl(
+        [in] LPCOLESTR pocsUrl,
+        [in] DWORD dwFlags);
+
+    HRESULT QueryUrl(
+        [in] LPCOLESTR pocsUrl,
+        [in] DWORD dwFlags,
+        [in, out, unique] LPSTATURL lpSTATURL);
+
+    HRESULT BindToObject(
+        [in] LPCOLESTR pocsUrl,
+        [in] REFIID riid,
+        [out, iid_is(riid)] void **ppvOut);
+
+    HRESULT EnumUrls(
+        [out] IEnumSTATURL **ppEnum);
+}
+
+/*****************************************************************************
+ *    IUrlHistoryStg2 interface
+ */
+[
+    object,
+    uuid(afa0dc11-c313-11d0-831a-00c04fd5ae38),
+    pointer_default(unique)
+]
+interface IUrlHistoryStg2 : IUrlHistoryStg
+{
+    typedef [unique] IUrlHistoryStg2 *LPURLHISTORYSTG2;
+
+    HRESULT AddUrlAndNotify(
+        [in] LPCOLESTR pocsUrl,
+        [in,unique] LPCOLESTR pocsTitle,
+        [in] DWORD dwFlags,
+        [in] BOOL fWriteHistory,
+        [in] IOleCommandTarget *poctNotify,
+        [in, unique] IUnknown *punkISFolder);
+
+    HRESULT ClearHistory();
+}
+
+/*****************************************************************************
+ *    IUrlHistoryNotify interface
+ */
+[
+    object,
+    uuid(bc40bec1-c493-11d0-831b-00C04fd5ae38),
+    pointer_default(unique)
+]
+interface IUrlHistoryNotify : IOleCommandTarget
+{
+    typedef [unique] IUrlHistoryNotify *LPURLHISTORYNOTIFY;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h
new file mode 100644
index 0000000..7f7915f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h
@@ -0,0 +1,5449 @@
+/*** Autogenerated by WIDL 1.1.36 from urlmon.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_URLMON_H
+#define __WIDL_URLMON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+#include <oleidl.h>
+#include <servprov.h>
+#include <msxml.h>
+
+/* Forward declarations */
+
+#ifndef __IInternet_FWD_DEFINED__
+#define __IInternet_FWD_DEFINED__
+typedef interface IInternet IInternet;
+#endif
+
+#ifndef __IBinding_FWD_DEFINED__
+#define __IBinding_FWD_DEFINED__
+typedef interface IBinding IBinding;
+#endif
+
+#ifndef __IBindStatusCallback_FWD_DEFINED__
+#define __IBindStatusCallback_FWD_DEFINED__
+typedef interface IBindStatusCallback IBindStatusCallback;
+#endif
+
+#ifndef __IBindStatusCallbackEx_FWD_DEFINED__
+#define __IBindStatusCallbackEx_FWD_DEFINED__
+typedef interface IBindStatusCallbackEx IBindStatusCallbackEx;
+#endif
+
+#ifndef __IAuthenticate_FWD_DEFINED__
+#define __IAuthenticate_FWD_DEFINED__
+typedef interface IAuthenticate IAuthenticate;
+#endif
+
+#ifndef __IHttpNegotiate_FWD_DEFINED__
+#define __IHttpNegotiate_FWD_DEFINED__
+typedef interface IHttpNegotiate IHttpNegotiate;
+#endif
+
+#ifndef __IHttpNegotiate2_FWD_DEFINED__
+#define __IHttpNegotiate2_FWD_DEFINED__
+typedef interface IHttpNegotiate2 IHttpNegotiate2;
+#endif
+
+#ifndef __IBindHost_FWD_DEFINED__
+#define __IBindHost_FWD_DEFINED__
+typedef interface IBindHost IBindHost;
+#endif
+
+#ifndef __IWinInetInfo_FWD_DEFINED__
+#define __IWinInetInfo_FWD_DEFINED__
+typedef interface IWinInetInfo IWinInetInfo;
+#endif
+
+#ifndef __IWinInetHttpInfo_FWD_DEFINED__
+#define __IWinInetHttpInfo_FWD_DEFINED__
+typedef interface IWinInetHttpInfo IWinInetHttpInfo;
+#endif
+
+#ifndef __IWindowForBindingUI_FWD_DEFINED__
+#define __IWindowForBindingUI_FWD_DEFINED__
+typedef interface IWindowForBindingUI IWindowForBindingUI;
+#endif
+
+#ifndef __IHttpSecurity_FWD_DEFINED__
+#define __IHttpSecurity_FWD_DEFINED__
+typedef interface IHttpSecurity IHttpSecurity;
+#endif
+
+#ifndef __IPersistMoniker_FWD_DEFINED__
+#define __IPersistMoniker_FWD_DEFINED__
+typedef interface IPersistMoniker IPersistMoniker;
+#endif
+
+#ifndef __IMonikerProp_FWD_DEFINED__
+#define __IMonikerProp_FWD_DEFINED__
+typedef interface IMonikerProp IMonikerProp;
+#endif
+
+#ifndef __IBindProtocol_FWD_DEFINED__
+#define __IBindProtocol_FWD_DEFINED__
+typedef interface IBindProtocol IBindProtocol;
+#endif
+
+#ifndef __IInternetBindInfo_FWD_DEFINED__
+#define __IInternetBindInfo_FWD_DEFINED__
+typedef interface IInternetBindInfo IInternetBindInfo;
+#endif
+
+#ifndef __IInternetPriority_FWD_DEFINED__
+#define __IInternetPriority_FWD_DEFINED__
+typedef interface IInternetPriority IInternetPriority;
+#endif
+
+#ifndef __IInternetProtocolRoot_FWD_DEFINED__
+#define __IInternetProtocolRoot_FWD_DEFINED__
+typedef interface IInternetProtocolRoot IInternetProtocolRoot;
+#endif
+
+#ifndef __IInternetProtocolSink_FWD_DEFINED__
+#define __IInternetProtocolSink_FWD_DEFINED__
+typedef interface IInternetProtocolSink IInternetProtocolSink;
+#endif
+
+#ifndef __IInternetProtocol_FWD_DEFINED__
+#define __IInternetProtocol_FWD_DEFINED__
+typedef interface IInternetProtocol IInternetProtocol;
+#endif
+
+#ifndef __IInternetProtocolInfo_FWD_DEFINED__
+#define __IInternetProtocolInfo_FWD_DEFINED__
+typedef interface IInternetProtocolInfo IInternetProtocolInfo;
+#endif
+
+#ifndef __IInternetSession_FWD_DEFINED__
+#define __IInternetSession_FWD_DEFINED__
+typedef interface IInternetSession IInternetSession;
+#endif
+
+#ifndef __IInternetSecurityMgrSite_FWD_DEFINED__
+#define __IInternetSecurityMgrSite_FWD_DEFINED__
+typedef interface IInternetSecurityMgrSite IInternetSecurityMgrSite;
+#endif
+
+#ifndef __IInternetSecurityManager_FWD_DEFINED__
+#define __IInternetSecurityManager_FWD_DEFINED__
+typedef interface IInternetSecurityManager IInternetSecurityManager;
+#endif
+
+#ifndef __IInternetHostSecurityManager_FWD_DEFINED__
+#define __IInternetHostSecurityManager_FWD_DEFINED__
+typedef interface IInternetHostSecurityManager IInternetHostSecurityManager;
+#endif
+
+#ifndef __IInternetZoneManager_FWD_DEFINED__
+#define __IInternetZoneManager_FWD_DEFINED__
+typedef interface IInternetZoneManager IInternetZoneManager;
+#endif
+
+#ifndef __IInternetZoneManagerEx_FWD_DEFINED__
+#define __IInternetZoneManagerEx_FWD_DEFINED__
+typedef interface IInternetZoneManagerEx IInternetZoneManagerEx;
+#endif
+
+#ifndef __IInternetZoneManagerEx2_FWD_DEFINED__
+#define __IInternetZoneManagerEx2_FWD_DEFINED__
+typedef interface IInternetZoneManagerEx2 IInternetZoneManagerEx2;
+#endif
+
+#ifndef __ISoftDistExt_FWD_DEFINED__
+#define __ISoftDistExt_FWD_DEFINED__
+typedef interface ISoftDistExt ISoftDistExt;
+#endif
+
+#ifndef __IUri_FWD_DEFINED__
+#define __IUri_FWD_DEFINED__
+typedef interface IUri IUri;
+#endif
+
+#ifndef __IUriContainer_FWD_DEFINED__
+#define __IUriContainer_FWD_DEFINED__
+typedef interface IUriContainer IUriContainer;
+#endif
+
+#ifndef __IInternetProtocolEx_FWD_DEFINED__
+#define __IInternetProtocolEx_FWD_DEFINED__
+typedef interface IInternetProtocolEx IInternetProtocolEx;
+#endif
+
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetUserName
+#endif
+#ifndef __IInternetProtocolSink_FWD_DEFINED__
+#define __IInternetProtocolSink_FWD_DEFINED__
+typedef interface IInternetProtocolSink IInternetProtocolSink;
+#endif
+
+/*****************************************************************************
+ * IInternet interface
+ */
+#ifndef __IInternet_INTERFACE_DEFINED__
+#define __IInternet_INTERFACE_DEFINED__
+
+typedef IInternet *LPIINTERNET;
+DEFINE_GUID(IID_IInternet, 0x79eac9e0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternet : public IUnknown
+{
+};
+#else
+typedef struct IInternetVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternet* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternet* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternet* This);
+
+    END_INTERFACE
+} IInternetVtbl;
+interface IInternet {
+    CONST_VTBL IInternetVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternet_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternet_Release(This) (This)->lpVtbl->Release(This)
+#endif
+
+#endif
+
+
+#endif  /* __IInternet_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBinding interface
+ */
+#ifndef __IBinding_INTERFACE_DEFINED__
+#define __IBinding_INTERFACE_DEFINED__
+
+typedef IBinding *LPBINDING;
+DEFINE_GUID(IID_IBinding, 0x79eac9c0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBinding : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Abort(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Suspend(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Resume(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPriority(
+        LONG nPriority) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPriority(
+        LONG *pnPriority) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBindResult(
+        CLSID *pclsidProtocol,
+        DWORD *pdwResult,
+        LPOLESTR *pszResult,
+        DWORD *pdwReserved) = 0;
+
+};
+#else
+typedef struct IBindingVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBinding* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBinding* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBinding* This);
+
+    /*** IBinding methods ***/
+    HRESULT (STDMETHODCALLTYPE *Abort)(
+        IBinding* This);
+
+    HRESULT (STDMETHODCALLTYPE *Suspend)(
+        IBinding* This);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IBinding* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPriority)(
+        IBinding* This,
+        LONG nPriority);
+
+    HRESULT (STDMETHODCALLTYPE *GetPriority)(
+        IBinding* This,
+        LONG *pnPriority);
+
+    HRESULT (STDMETHODCALLTYPE *GetBindResult)(
+        IBinding* This,
+        CLSID *pclsidProtocol,
+        DWORD *pdwResult,
+        LPOLESTR *pszResult,
+        DWORD *pdwReserved);
+
+    END_INTERFACE
+} IBindingVtbl;
+interface IBinding {
+    CONST_VTBL IBindingVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBinding_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBinding_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBinding_Release(This) (This)->lpVtbl->Release(This)
+/*** IBinding methods ***/
+#define IBinding_Abort(This) (This)->lpVtbl->Abort(This)
+#define IBinding_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IBinding_Resume(This) (This)->lpVtbl->Resume(This)
+#define IBinding_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)
+#define IBinding_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#define IBinding_GetBindResult(This,pclsidProtocol,pdwResult,pszResult,pdwReserved) (This)->lpVtbl->GetBindResult(This,pclsidProtocol,pdwResult,pszResult,pdwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBinding_Abort_Proxy(
+    IBinding* This);
+void __RPC_STUB IBinding_Abort_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_Suspend_Proxy(
+    IBinding* This);
+void __RPC_STUB IBinding_Suspend_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_Resume_Proxy(
+    IBinding* This);
+void __RPC_STUB IBinding_Resume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_SetPriority_Proxy(
+    IBinding* This,
+    LONG nPriority);
+void __RPC_STUB IBinding_SetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_GetPriority_Proxy(
+    IBinding* This,
+    LONG *pnPriority);
+void __RPC_STUB IBinding_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_RemoteGetBindResult_Proxy(
+    IBinding* This,
+    CLSID *pclsidProtocol,
+    DWORD *pdwResult,
+    LPOLESTR *pszResult,
+    DWORD dwReserved);
+void __RPC_STUB IBinding_RemoteGetBindResult_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IBinding_GetBindResult_Proxy(
+    IBinding* This,
+    CLSID *pclsidProtocol,
+    DWORD *pdwResult,
+    LPOLESTR *pszResult,
+    DWORD *pdwReserved);
+HRESULT __RPC_STUB IBinding_GetBindResult_Stub(
+    IBinding* This,
+    CLSID *pclsidProtocol,
+    DWORD *pdwResult,
+    LPOLESTR *pszResult,
+    DWORD dwReserved);
+
+#endif  /* __IBinding_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBindStatusCallback interface
+ */
+#ifndef __IBindStatusCallback_INTERFACE_DEFINED__
+#define __IBindStatusCallback_INTERFACE_DEFINED__
+
+typedef IBindStatusCallback *LPBINDSTATUSCALLBACK;
+typedef enum __WIDL_urlmon_generated_name_00000000 {
+    BINDVERB_GET = 0x0,
+    BINDVERB_POST = 0x1,
+    BINDVERB_PUT = 0x2,
+    BINDVERB_CUSTOM = 0x3
+} BINDVERB;
+typedef enum __WIDL_urlmon_generated_name_00000001 {
+    BINDINFOF_URLENCODESTGMEDDATA = 0x1,
+    BINDINFOF_URLENCODEDEXTRAINFO = 0x2
+} BINDINFOF;
+typedef enum __WIDL_urlmon_generated_name_00000002 {
+    BINDF_ASYNCHRONOUS = 0x1,
+    BINDF_ASYNCSTORAGE = 0x2,
+    BINDF_NOPROGRESSIVERENDERING = 0x4,
+    BINDF_OFFLINEOPERATION = 0x8,
+    BINDF_GETNEWESTVERSION = 0x10,
+    BINDF_NOWRITECACHE = 0x20,
+    BINDF_NEEDFILE = 0x40,
+    BINDF_PULLDATA = 0x80,
+    BINDF_IGNORESECURITYPROBLEM = 0x100,
+    BINDF_RESYNCHRONIZE = 0x200,
+    BINDF_HYPERLINK = 0x400,
+    BINDF_NO_UI = 0x800,
+    BINDF_SILENTOPERATION = 0x1000,
+    BINDF_PRAGMA_NO_CACHE = 0x2000,
+    BINDF_GETCLASSOBJECT = 0x4000,
+    BINDF_RESERVED_1 = 0x8000,
+    BINDF_FREE_THREADED = 0x10000,
+    BINDF_DIRECT_READ = 0x20000,
+    BINDF_FORMS_SUBMIT = 0x40000,
+    BINDF_GETFROMCACHE_IF_NET_FAIL = 0x80000,
+    BINDF_FROMURLMON = 0x100000,
+    BINDF_FWD_BACK = 0x200000,
+    BINDF_PREFERDEFAULTHANDLER = 0x400000,
+    BINDF_ENFORCERESTRICTED = 0x800000
+} BINDF;
+typedef enum __WIDL_urlmon_generated_name_00000003 {
+    URL_ENCODING_NONE = 0x0,
+    URL_ENCODING_ENABLE_UTF8 = 0x10000000,
+    URL_ENCODING_DISABLE_UTF8 = 0x20000000
+} URL_ENCODING;
+typedef struct _tagBINDINFO {
+    ULONG cbSize;
+    LPWSTR szExtraInfo;
+    STGMEDIUM stgmedData;
+    DWORD grfBindInfoF;
+    DWORD dwBindVerb;
+    LPWSTR szCustomVerb;
+    DWORD cbstgmedData;
+    DWORD dwOptions;
+    DWORD dwOptionsFlags;
+    DWORD dwCodePage;
+    SECURITY_ATTRIBUTES securityAttributes;
+    IID iid;
+    IUnknown *pUnk;
+    DWORD dwReserved;
+} BINDINFO;
+typedef struct _REMSECURITY_ATTRIBUTES {
+    DWORD nLength;
+    DWORD lpSecurityDescriptor;
+    BOOL bInheritHandle;
+} REMSECURITY_ATTRIBUTES;
+typedef struct _REMSECURITY_ATTRIBUTES *PREMSECURITY_ATTRIBUTES;
+typedef struct _REMSECURITY_ATTRIBUTES *LPREMSECURITY_ATTRIBUTES;
+typedef struct _tagRemBINDINFO {
+    ULONG cbSize;
+    LPWSTR szExtraInfo;
+    DWORD grfBindInfoF;
+    DWORD dwBindVerb;
+    LPWSTR szCustomVerb;
+    DWORD cbstgmedData;
+    DWORD dwOptions;
+    DWORD dwOptionsFlags;
+    DWORD dwCodePage;
+    REMSECURITY_ATTRIBUTES securityAttributes;
+    IID iid;
+    IUnknown *pUnk;
+    DWORD dwReserved;
+} RemBINDINFO;
+typedef struct tagRemFORMATETC {
+    DWORD cfFormat;
+    DWORD ptd;
+    DWORD dwAspect;
+    LONG lindex;
+    DWORD tymed;
+} RemFORMATETC;
+typedef struct tagRemFORMATETC *LPREMFORMATETC;
+typedef enum __WIDL_urlmon_generated_name_00000004 {
+    BSCF_FIRSTDATANOTIFICATION = 0x1,
+    BSCF_INTERMEDIATEDATANOTIFICATION = 0x2,
+    BSCF_LASTDATANOTIFICATION = 0x4,
+    BSCF_DATAFULLYAVAILABLE = 0x8,
+    BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10,
+    BSCF_SKIPDRAINDATAFORFILEURLS = 0x20,
+    BSCF_64BITLENGTHDOWNLOAD = 0x40
+} BSCF;
+typedef enum BINDSTATUS {
+    BINDSTATUS_FINDINGRESOURCE = 1,
+    BINDSTATUS_CONNECTING = 2,
+    BINDSTATUS_REDIRECTING = 3,
+    BINDSTATUS_BEGINDOWNLOADDATA = 4,
+    BINDSTATUS_DOWNLOADINGDATA = 5,
+    BINDSTATUS_ENDDOWNLOADDATA = 6,
+    BINDSTATUS_BEGINDOWNLOADCOMPONENTS = 7,
+    BINDSTATUS_INSTALLINGCOMPONENTS = 8,
+    BINDSTATUS_ENDDOWNLOADCOMPONENTS = 9,
+    BINDSTATUS_USINGCACHEDCOPY = 10,
+    BINDSTATUS_SENDINGREQUEST = 11,
+    BINDSTATUS_CLASSIDAVAILABLE = 12,
+    BINDSTATUS_MIMETYPEAVAILABLE = 13,
+    BINDSTATUS_CACHEFILENAMEAVAILABLE = 14,
+    BINDSTATUS_BEGINSYNCOPERATION = 15,
+    BINDSTATUS_ENDSYNCOPERATION = 16,
+    BINDSTATUS_BEGINUPLOADDATA = 17,
+    BINDSTATUS_UPLOADINGDATA = 18,
+    BINDSTATUS_ENDUPLOADINGDATA = 19,
+    BINDSTATUS_PROTOCOLCLASSID = 20,
+    BINDSTATUS_ENCODING = 21,
+    BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE = 22,
+    BINDSTATUS_CLASSINSTALLLOCATION = 23,
+    BINDSTATUS_DECODING = 24,
+    BINDSTATUS_LOADINGMIMEHANDLER = 25,
+    BINDSTATUS_CONTENTDISPOSITIONATTACH = 26,
+    BINDSTATUS_FILTERREPORTMIMETYPE = 27,
+    BINDSTATUS_CLSIDCANINSTANTIATE = 28,
+    BINDSTATUS_IUNKNOWNAVAILABLE = 29,
+    BINDSTATUS_DIRECTBIND = 30,
+    BINDSTATUS_RAWMIMETYPE = 31,
+    BINDSTATUS_PROXYDETECTING = 32,
+    BINDSTATUS_ACCEPTRANGES = 33,
+    BINDSTATUS_COOKIE_SENT = 34,
+    BINDSTATUS_COMPACT_POLICY_RECEIVED = 35,
+    BINDSTATUS_COOKIE_SUPPRESSED = 36,
+    BINDSTATUS_COOKIE_STATE_UNKNOWN = 37,
+    BINDSTATUS_COOKIE_STATE_ACCEPT = 38,
+    BINDSTATUS_COOKIE_STATE_REJECT = 39,
+    BINDSTATUS_COOKIE_STATE_PROMPT = 40,
+    BINDSTATUS_COOKIE_STATE_LEASH = 41,
+    BINDSTATUS_COOKIE_STATE_DOWNGRADE = 42,
+    BINDSTATUS_POLICY_HREF = 43,
+    BINDSTATUS_P3P_HEADER = 44,
+    BINDSTATUS_SESSION_COOKIE_RECEIVED = 45,
+    BINDSTATUS_PERSISTENT_COOKIE_RECEIVED = 46,
+    BINDSTATUS_SESSION_COOKIES_ALLOWED = 47,
+    BINDSTATUS_CACHECONTROL = 48,
+    BINDSTATUS_CONTENTDISPOSITIONFILENAME = 49,
+    BINDSTATUS_MIMETEXTPLAINMISMATCH = 50,
+    BINDSTATUS_PUBLISHERAVAILABLE = 51,
+    BINDSTATUS_DISPLAYNAMEAVAILABLE = 52
+} BINDSTATUS;
+DEFINE_GUID(IID_IBindStatusCallback, 0x79eac9c1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindStatusCallback : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
+        DWORD dwReserved,
+        IBinding *pib) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPriority(
+        LONG *pnPriority) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnLowResource(
+        DWORD reserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnProgress(
+        ULONG ulProgress,
+        ULONG ulProgressMax,
+        ULONG ulStatusCode,
+        LPCWSTR szStatusText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnStopBinding(
+        HRESULT hresult,
+        LPCWSTR szError) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnDataAvailable(
+        DWORD grfBSCF,
+        DWORD dwSize,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pstgmed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable(
+        REFIID riid,
+        IUnknown *punk) = 0;
+
+};
+#else
+typedef struct IBindStatusCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBindStatusCallback* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBindStatusCallback* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBindStatusCallback* This);
+
+    /*** IBindStatusCallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnStartBinding)(
+        IBindStatusCallback* This,
+        DWORD dwReserved,
+        IBinding *pib);
+
+    HRESULT (STDMETHODCALLTYPE *GetPriority)(
+        IBindStatusCallback* This,
+        LONG *pnPriority);
+
+    HRESULT (STDMETHODCALLTYPE *OnLowResource)(
+        IBindStatusCallback* This,
+        DWORD reserved);
+
+    HRESULT (STDMETHODCALLTYPE *OnProgress)(
+        IBindStatusCallback* This,
+        ULONG ulProgress,
+        ULONG ulProgressMax,
+        ULONG ulStatusCode,
+        LPCWSTR szStatusText);
+
+    HRESULT (STDMETHODCALLTYPE *OnStopBinding)(
+        IBindStatusCallback* This,
+        HRESULT hresult,
+        LPCWSTR szError);
+
+    HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
+        IBindStatusCallback* This,
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo);
+
+    HRESULT (STDMETHODCALLTYPE *OnDataAvailable)(
+        IBindStatusCallback* This,
+        DWORD grfBSCF,
+        DWORD dwSize,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pstgmed);
+
+    HRESULT (STDMETHODCALLTYPE *OnObjectAvailable)(
+        IBindStatusCallback* This,
+        REFIID riid,
+        IUnknown *punk);
+
+    END_INTERFACE
+} IBindStatusCallbackVtbl;
+interface IBindStatusCallback {
+    CONST_VTBL IBindStatusCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindStatusCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindStatusCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindStatusCallback_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindStatusCallback methods ***/
+#define IBindStatusCallback_OnStartBinding(This,dwReserved,pib) (This)->lpVtbl->OnStartBinding(This,dwReserved,pib)
+#define IBindStatusCallback_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#define IBindStatusCallback_OnLowResource(This,reserved) (This)->lpVtbl->OnLowResource(This,reserved)
+#define IBindStatusCallback_OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText) (This)->lpVtbl->OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText)
+#define IBindStatusCallback_OnStopBinding(This,hresult,szError) (This)->lpVtbl->OnStopBinding(This,hresult,szError)
+#define IBindStatusCallback_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
+#define IBindStatusCallback_OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed) (This)->lpVtbl->OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed)
+#define IBindStatusCallback_OnObjectAvailable(This,riid,punk) (This)->lpVtbl->OnObjectAvailable(This,riid,punk)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnStartBinding_Proxy(
+    IBindStatusCallback* This,
+    DWORD dwReserved,
+    IBinding *pib);
+void __RPC_STUB IBindStatusCallback_OnStartBinding_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_GetPriority_Proxy(
+    IBindStatusCallback* This,
+    LONG *pnPriority);
+void __RPC_STUB IBindStatusCallback_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnLowResource_Proxy(
+    IBindStatusCallback* This,
+    DWORD reserved);
+void __RPC_STUB IBindStatusCallback_OnLowResource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnProgress_Proxy(
+    IBindStatusCallback* This,
+    ULONG ulProgress,
+    ULONG ulProgressMax,
+    ULONG ulStatusCode,
+    LPCWSTR szStatusText);
+void __RPC_STUB IBindStatusCallback_OnProgress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnStopBinding_Proxy(
+    IBindStatusCallback* This,
+    HRESULT hresult,
+    LPCWSTR szError);
+void __RPC_STUB IBindStatusCallback_OnStopBinding_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_RemoteGetBindInfo_Proxy(
+    IBindStatusCallback* This,
+    DWORD *grfBINDF,
+    RemBINDINFO *pbindinfo,
+    RemSTGMEDIUM *pstgmed);
+void __RPC_STUB IBindStatusCallback_RemoteGetBindInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_RemoteOnDataAvailable_Proxy(
+    IBindStatusCallback* This,
+    DWORD grfBSCF,
+    DWORD dwSize,
+    RemFORMATETC *pformatetc,
+    RemSTGMEDIUM *pstgmed);
+void __RPC_STUB IBindStatusCallback_RemoteOnDataAvailable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnObjectAvailable_Proxy(
+    IBindStatusCallback* This,
+    REFIID riid,
+    IUnknown *punk);
+void __RPC_STUB IBindStatusCallback_OnObjectAvailable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
+    IBindStatusCallback* This,
+    DWORD *grfBINDF,
+    BINDINFO *pbindinfo);
+HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
+    IBindStatusCallback* This,
+    DWORD *grfBINDF,
+    RemBINDINFO *pbindinfo,
+    RemSTGMEDIUM *pstgmed);
+HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
+    IBindStatusCallback* This,
+    DWORD grfBSCF,
+    DWORD dwSize,
+    FORMATETC *pformatetc,
+    STGMEDIUM *pstgmed);
+HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
+    IBindStatusCallback* This,
+    DWORD grfBSCF,
+    DWORD dwSize,
+    RemFORMATETC *pformatetc,
+    RemSTGMEDIUM *pstgmed);
+
+#endif  /* __IBindStatusCallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBindStatusCallbackEx interface
+ */
+#ifndef __IBindStatusCallbackEx_INTERFACE_DEFINED__
+#define __IBindStatusCallbackEx_INTERFACE_DEFINED__
+
+typedef IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX;
+typedef enum __WIDL_urlmon_generated_name_00000005 {
+    BINDF2_DISABLEBASICOVERHTTP = 0x1,
+    BINDF2_DISABLEAUTOCOOKIEHANDLING = 0x2,
+    BINDF2_READ_DATA_GREATER_THAN_4GB = 0x4,
+    BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID = 0x8,
+    BINDF2_RESERVED_3 = 0x20000000,
+    BINDF2_RESERVED_2 = 0x40000000,
+    BINDF2_RESERVED_1 = 0x80000000
+} BINDF2;
+DEFINE_GUID(IID_IBindStatusCallbackEx, 0xaaa74ef9, 0x8ee7, 0x4659, 0x88,0xd9, 0xf8,0xc5,0x04,0xda,0x73,0xcc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindStatusCallbackEx : public IBindStatusCallback
+{
+    virtual HRESULT STDMETHODCALLTYPE GetBindInfoEx(
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo,
+        DWORD *grfBINDF2,
+        DWORD *pdwReserved) = 0;
+
+};
+#else
+typedef struct IBindStatusCallbackExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBindStatusCallbackEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBindStatusCallbackEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBindStatusCallbackEx* This);
+
+    /*** IBindStatusCallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnStartBinding)(
+        IBindStatusCallbackEx* This,
+        DWORD dwReserved,
+        IBinding *pib);
+
+    HRESULT (STDMETHODCALLTYPE *GetPriority)(
+        IBindStatusCallbackEx* This,
+        LONG *pnPriority);
+
+    HRESULT (STDMETHODCALLTYPE *OnLowResource)(
+        IBindStatusCallbackEx* This,
+        DWORD reserved);
+
+    HRESULT (STDMETHODCALLTYPE *OnProgress)(
+        IBindStatusCallbackEx* This,
+        ULONG ulProgress,
+        ULONG ulProgressMax,
+        ULONG ulStatusCode,
+        LPCWSTR szStatusText);
+
+    HRESULT (STDMETHODCALLTYPE *OnStopBinding)(
+        IBindStatusCallbackEx* This,
+        HRESULT hresult,
+        LPCWSTR szError);
+
+    HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
+        IBindStatusCallbackEx* This,
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo);
+
+    HRESULT (STDMETHODCALLTYPE *OnDataAvailable)(
+        IBindStatusCallbackEx* This,
+        DWORD grfBSCF,
+        DWORD dwSize,
+        FORMATETC *pformatetc,
+        STGMEDIUM *pstgmed);
+
+    HRESULT (STDMETHODCALLTYPE *OnObjectAvailable)(
+        IBindStatusCallbackEx* This,
+        REFIID riid,
+        IUnknown *punk);
+
+    /*** IBindStatusCallbackEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBindInfoEx)(
+        IBindStatusCallbackEx* This,
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo,
+        DWORD *grfBINDF2,
+        DWORD *pdwReserved);
+
+    END_INTERFACE
+} IBindStatusCallbackExVtbl;
+interface IBindStatusCallbackEx {
+    CONST_VTBL IBindStatusCallbackExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindStatusCallbackEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindStatusCallbackEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindStatusCallbackEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindStatusCallback methods ***/
+#define IBindStatusCallbackEx_OnStartBinding(This,dwReserved,pib) (This)->lpVtbl->OnStartBinding(This,dwReserved,pib)
+#define IBindStatusCallbackEx_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#define IBindStatusCallbackEx_OnLowResource(This,reserved) (This)->lpVtbl->OnLowResource(This,reserved)
+#define IBindStatusCallbackEx_OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText) (This)->lpVtbl->OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText)
+#define IBindStatusCallbackEx_OnStopBinding(This,hresult,szError) (This)->lpVtbl->OnStopBinding(This,hresult,szError)
+#define IBindStatusCallbackEx_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
+#define IBindStatusCallbackEx_OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed) (This)->lpVtbl->OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed)
+#define IBindStatusCallbackEx_OnObjectAvailable(This,riid,punk) (This)->lpVtbl->OnObjectAvailable(This,riid,punk)
+/*** IBindStatusCallbackEx methods ***/
+#define IBindStatusCallbackEx_GetBindInfoEx(This,grfBINDF,pbindinfo,grfBINDF2,pdwReserved) (This)->lpVtbl->GetBindInfoEx(This,grfBINDF,pbindinfo,grfBINDF2,pdwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindStatusCallbackEx_RemoteGetBindInfoEx_Proxy(
+    IBindStatusCallbackEx* This,
+    DWORD *grfBINDF,
+    RemBINDINFO *pbindinfo,
+    RemSTGMEDIUM *pstgmed,
+    DWORD *grfBINDF2,
+    DWORD *pdwReserved);
+void __RPC_STUB IBindStatusCallbackEx_RemoteGetBindInfoEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
+    IBindStatusCallbackEx* This,
+    DWORD *grfBINDF,
+    BINDINFO *pbindinfo,
+    DWORD *grfBINDF2,
+    DWORD *pdwReserved);
+HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
+    IBindStatusCallbackEx* This,
+    DWORD *grfBINDF,
+    RemBINDINFO *pbindinfo,
+    RemSTGMEDIUM *pstgmed,
+    DWORD *grfBINDF2,
+    DWORD *pdwReserved);
+
+#endif  /* __IBindStatusCallbackEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAuthenticate interface
+ */
+#ifndef __IAuthenticate_INTERFACE_DEFINED__
+#define __IAuthenticate_INTERFACE_DEFINED__
+
+typedef IAuthenticate *LPAUTHENTICATION;
+DEFINE_GUID(IID_IAuthenticate, 0x79eac9d0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAuthenticate : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Authenticate(
+        HWND *phwnd,
+        LPWSTR *pszUsername,
+        LPWSTR *pszPassword) = 0;
+
+};
+#else
+typedef struct IAuthenticateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAuthenticate* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAuthenticate* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAuthenticate* This);
+
+    /*** IAuthenticate methods ***/
+    HRESULT (STDMETHODCALLTYPE *Authenticate)(
+        IAuthenticate* This,
+        HWND *phwnd,
+        LPWSTR *pszUsername,
+        LPWSTR *pszPassword);
+
+    END_INTERFACE
+} IAuthenticateVtbl;
+interface IAuthenticate {
+    CONST_VTBL IAuthenticateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAuthenticate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAuthenticate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAuthenticate_Release(This) (This)->lpVtbl->Release(This)
+/*** IAuthenticate methods ***/
+#define IAuthenticate_Authenticate(This,phwnd,pszUsername,pszPassword) (This)->lpVtbl->Authenticate(This,phwnd,pszUsername,pszPassword)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAuthenticate_Authenticate_Proxy(
+    IAuthenticate* This,
+    HWND *phwnd,
+    LPWSTR *pszUsername,
+    LPWSTR *pszPassword);
+void __RPC_STUB IAuthenticate_Authenticate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IAuthenticate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IHttpNegotiate interface
+ */
+#ifndef __IHttpNegotiate_INTERFACE_DEFINED__
+#define __IHttpNegotiate_INTERFACE_DEFINED__
+
+typedef IHttpNegotiate *LPHTTPNEGOTIATE;
+DEFINE_GUID(IID_IHttpNegotiate, 0x79eac9d2, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IHttpNegotiate : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE BeginningTransaction(
+        LPCWSTR szURL,
+        LPCWSTR szHeaders,
+        DWORD dwReserved,
+        LPWSTR *pszAdditionalHeaders) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnResponse(
+        DWORD dwResponseCode,
+        LPCWSTR szResponseHeaders,
+        LPCWSTR szRequestHeaders,
+        LPWSTR *pszAdditionalRequestHeaders) = 0;
+
+};
+#else
+typedef struct IHttpNegotiateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IHttpNegotiate* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IHttpNegotiate* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IHttpNegotiate* This);
+
+    /*** IHttpNegotiate methods ***/
+    HRESULT (STDMETHODCALLTYPE *BeginningTransaction)(
+        IHttpNegotiate* This,
+        LPCWSTR szURL,
+        LPCWSTR szHeaders,
+        DWORD dwReserved,
+        LPWSTR *pszAdditionalHeaders);
+
+    HRESULT (STDMETHODCALLTYPE *OnResponse)(
+        IHttpNegotiate* This,
+        DWORD dwResponseCode,
+        LPCWSTR szResponseHeaders,
+        LPCWSTR szRequestHeaders,
+        LPWSTR *pszAdditionalRequestHeaders);
+
+    END_INTERFACE
+} IHttpNegotiateVtbl;
+interface IHttpNegotiate {
+    CONST_VTBL IHttpNegotiateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IHttpNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IHttpNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IHttpNegotiate_Release(This) (This)->lpVtbl->Release(This)
+/*** IHttpNegotiate methods ***/
+#define IHttpNegotiate_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)
+#define IHttpNegotiate_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IHttpNegotiate_BeginningTransaction_Proxy(
+    IHttpNegotiate* This,
+    LPCWSTR szURL,
+    LPCWSTR szHeaders,
+    DWORD dwReserved,
+    LPWSTR *pszAdditionalHeaders);
+void __RPC_STUB IHttpNegotiate_BeginningTransaction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IHttpNegotiate_OnResponse_Proxy(
+    IHttpNegotiate* This,
+    DWORD dwResponseCode,
+    LPCWSTR szResponseHeaders,
+    LPCWSTR szRequestHeaders,
+    LPWSTR *pszAdditionalRequestHeaders);
+void __RPC_STUB IHttpNegotiate_OnResponse_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IHttpNegotiate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IHttpNegotiate2 interface
+ */
+#ifndef __IHttpNegotiate2_INTERFACE_DEFINED__
+#define __IHttpNegotiate2_INTERFACE_DEFINED__
+
+typedef IHttpNegotiate2 *LPHTTPNEGOTIATE2;
+DEFINE_GUID(IID_IHttpNegotiate2, 0x4f9f9fcb, 0xe0f4, 0x48eb, 0xb7,0xab, 0xfa,0x2e,0xa9,0x36,0x5c,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IHttpNegotiate2 : public IHttpNegotiate
+{
+    virtual HRESULT STDMETHODCALLTYPE GetRootSecurityId(
+        BYTE *pbSecurityId,
+        DWORD *pcbSecurityId,
+        DWORD_PTR dwReserved) = 0;
+
+};
+#else
+typedef struct IHttpNegotiate2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IHttpNegotiate2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IHttpNegotiate2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IHttpNegotiate2* This);
+
+    /*** IHttpNegotiate methods ***/
+    HRESULT (STDMETHODCALLTYPE *BeginningTransaction)(
+        IHttpNegotiate2* This,
+        LPCWSTR szURL,
+        LPCWSTR szHeaders,
+        DWORD dwReserved,
+        LPWSTR *pszAdditionalHeaders);
+
+    HRESULT (STDMETHODCALLTYPE *OnResponse)(
+        IHttpNegotiate2* This,
+        DWORD dwResponseCode,
+        LPCWSTR szResponseHeaders,
+        LPCWSTR szRequestHeaders,
+        LPWSTR *pszAdditionalRequestHeaders);
+
+    /*** IHttpNegotiate2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetRootSecurityId)(
+        IHttpNegotiate2* This,
+        BYTE *pbSecurityId,
+        DWORD *pcbSecurityId,
+        DWORD_PTR dwReserved);
+
+    END_INTERFACE
+} IHttpNegotiate2Vtbl;
+interface IHttpNegotiate2 {
+    CONST_VTBL IHttpNegotiate2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IHttpNegotiate2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IHttpNegotiate2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IHttpNegotiate2_Release(This) (This)->lpVtbl->Release(This)
+/*** IHttpNegotiate methods ***/
+#define IHttpNegotiate2_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)
+#define IHttpNegotiate2_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)
+/*** IHttpNegotiate2 methods ***/
+#define IHttpNegotiate2_GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IHttpNegotiate2_GetRootSecurityId_Proxy(
+    IHttpNegotiate2* This,
+    BYTE *pbSecurityId,
+    DWORD *pcbSecurityId,
+    DWORD_PTR dwReserved);
+void __RPC_STUB IHttpNegotiate2_GetRootSecurityId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IHttpNegotiate2_INTERFACE_DEFINED__ */
+
+#define SID_IBindHost IID_IBindHost
+#define SID_SBindHost IID_IBindHost
+/*****************************************************************************
+ * IBindHost interface
+ */
+#ifndef __IBindHost_INTERFACE_DEFINED__
+#define __IBindHost_INTERFACE_DEFINED__
+
+typedef IBindHost *LPBINDHOST;
+DEFINE_GUID(IID_IBindHost, 0xfc4801a1, 0x2ba9, 0x11cf, 0xa2,0x29, 0x00,0xaa,0x00,0x3d,0x73,0x52);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindHost : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateMoniker(
+        LPOLESTR szName,
+        IBindCtx *pBC,
+        IMoniker **ppmk,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MonikerBindToStorage(
+        IMoniker *pMk,
+        IBindCtx *pBC,
+        IBindStatusCallback *pBSC,
+        REFIID riid,
+        void **ppvObj) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MonikerBindToObject(
+        IMoniker *pMk,
+        IBindCtx *pBC,
+        IBindStatusCallback *pBSC,
+        REFIID riid,
+        void **ppvObj) = 0;
+
+};
+#else
+typedef struct IBindHostVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBindHost* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBindHost* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBindHost* This);
+
+    /*** IBindHost methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateMoniker)(
+        IBindHost* This,
+        LPOLESTR szName,
+        IBindCtx *pBC,
+        IMoniker **ppmk,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *MonikerBindToStorage)(
+        IBindHost* This,
+        IMoniker *pMk,
+        IBindCtx *pBC,
+        IBindStatusCallback *pBSC,
+        REFIID riid,
+        void **ppvObj);
+
+    HRESULT (STDMETHODCALLTYPE *MonikerBindToObject)(
+        IBindHost* This,
+        IMoniker *pMk,
+        IBindCtx *pBC,
+        IBindStatusCallback *pBSC,
+        REFIID riid,
+        void **ppvObj);
+
+    END_INTERFACE
+} IBindHostVtbl;
+interface IBindHost {
+    CONST_VTBL IBindHostVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindHost_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindHost_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindHost_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindHost methods ***/
+#define IBindHost_CreateMoniker(This,szName,pBC,ppmk,dwReserved) (This)->lpVtbl->CreateMoniker(This,szName,pBC,ppmk,dwReserved)
+#define IBindHost_MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj)
+#define IBindHost_MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindHost_CreateMoniker_Proxy(
+    IBindHost* This,
+    LPOLESTR szName,
+    IBindCtx *pBC,
+    IMoniker **ppmk,
+    DWORD dwReserved);
+void __RPC_STUB IBindHost_CreateMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindHost_RemoteMonikerBindToStorage_Proxy(
+    IBindHost* This,
+    IMoniker *pMk,
+    IBindCtx *pBC,
+    IBindStatusCallback *pBSC,
+    REFIID riid,
+    IUnknown **ppvObj);
+void __RPC_STUB IBindHost_RemoteMonikerBindToStorage_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindHost_RemoteMonikerBindToObject_Proxy(
+    IBindHost* This,
+    IMoniker *pMk,
+    IBindCtx *pBC,
+    IBindStatusCallback *pBSC,
+    REFIID riid,
+    IUnknown **ppvObj);
+void __RPC_STUB IBindHost_RemoteMonikerBindToObject_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(
+    IBindHost* This,
+    IMoniker *pMk,
+    IBindCtx *pBC,
+    IBindStatusCallback *pBSC,
+    REFIID riid,
+    void **ppvObj);
+HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(
+    IBindHost* This,
+    IMoniker *pMk,
+    IBindCtx *pBC,
+    IBindStatusCallback *pBSC,
+    REFIID riid,
+    IUnknown **ppvObj);
+HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(
+    IBindHost* This,
+    IMoniker *pMk,
+    IBindCtx *pBC,
+    IBindStatusCallback *pBSC,
+    REFIID riid,
+    void **ppvObj);
+HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(
+    IBindHost* This,
+    IMoniker *pMk,
+    IBindCtx *pBC,
+    IBindStatusCallback *pBSC,
+    REFIID riid,
+    IUnknown **ppvObj);
+
+#endif  /* __IBindHost_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWinInetInfo interface
+ */
+#ifndef __IWinInetInfo_INTERFACE_DEFINED__
+#define __IWinInetInfo_INTERFACE_DEFINED__
+
+typedef IWinInetInfo *LPWININETINFO;
+DEFINE_GUID(IID_IWinInetInfo, 0x79eac9d6, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWinInetInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryOption(
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD *pcbBuf) = 0;
+
+};
+#else
+typedef struct IWinInetInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWinInetInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWinInetInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWinInetInfo* This);
+
+    /*** IWinInetInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryOption)(
+        IWinInetInfo* This,
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD *pcbBuf);
+
+    END_INTERFACE
+} IWinInetInfoVtbl;
+interface IWinInetInfo {
+    CONST_VTBL IWinInetInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWinInetInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWinInetInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWinInetInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IWinInetInfo methods ***/
+#define IWinInetInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWinInetInfo_RemoteQueryOption_Proxy(
+    IWinInetInfo* This,
+    DWORD dwOption,
+    BYTE *pBuffer,
+    DWORD *pcbBuf);
+void __RPC_STUB IWinInetInfo_RemoteQueryOption_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(
+    IWinInetInfo* This,
+    DWORD dwOption,
+    LPVOID pBuffer,
+    DWORD *pcbBuf);
+HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(
+    IWinInetInfo* This,
+    DWORD dwOption,
+    BYTE *pBuffer,
+    DWORD *pcbBuf);
+
+#endif  /* __IWinInetInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWinInetHttpInfo interface
+ */
+#ifndef __IWinInetHttpInfo_INTERFACE_DEFINED__
+#define __IWinInetHttpInfo_INTERFACE_DEFINED__
+
+typedef IWinInetHttpInfo *LPWININETHTTPINFO;
+DEFINE_GUID(IID_IWinInetHttpInfo, 0x79eac9d8, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWinInetHttpInfo : public IWinInetInfo
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryInfo(
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD *pcbBuf,
+        DWORD *pdwFlags,
+        DWORD *pdwReserved) = 0;
+
+};
+#else
+typedef struct IWinInetHttpInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWinInetHttpInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWinInetHttpInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWinInetHttpInfo* This);
+
+    /*** IWinInetInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryOption)(
+        IWinInetHttpInfo* This,
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD *pcbBuf);
+
+    /*** IWinInetHttpInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInfo)(
+        IWinInetHttpInfo* This,
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD *pcbBuf,
+        DWORD *pdwFlags,
+        DWORD *pdwReserved);
+
+    END_INTERFACE
+} IWinInetHttpInfoVtbl;
+interface IWinInetHttpInfo {
+    CONST_VTBL IWinInetHttpInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWinInetHttpInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWinInetHttpInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWinInetHttpInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IWinInetInfo methods ***/
+#define IWinInetHttpInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)
+/*** IWinInetHttpInfo methods ***/
+#define IWinInetHttpInfo_QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved) (This)->lpVtbl->QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWinInetHttpInfo_RemoteQueryInfo_Proxy(
+    IWinInetHttpInfo* This,
+    DWORD dwOption,
+    BYTE *pBuffer,
+    DWORD *pcbBuf,
+    DWORD *pdwFlags,
+    DWORD *pdwReserved);
+void __RPC_STUB IWinInetHttpInfo_RemoteQueryInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(
+    IWinInetHttpInfo* This,
+    DWORD dwOption,
+    LPVOID pBuffer,
+    DWORD *pcbBuf,
+    DWORD *pdwFlags,
+    DWORD *pdwReserved);
+HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(
+    IWinInetHttpInfo* This,
+    DWORD dwOption,
+    BYTE *pBuffer,
+    DWORD *pcbBuf,
+    DWORD *pdwFlags,
+    DWORD *pdwReserved);
+
+#endif  /* __IWinInetHttpInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWindowForBindingUI interface
+ */
+#ifndef __IWindowForBindingUI_INTERFACE_DEFINED__
+#define __IWindowForBindingUI_INTERFACE_DEFINED__
+
+typedef IWindowForBindingUI *LPWINDOWFORBINDINGUI;
+DEFINE_GUID(IID_IWindowForBindingUI, 0x79eac9d5, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWindowForBindingUI : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetWindow(
+        REFGUID rguidReason,
+        HWND *phwnd) = 0;
+
+};
+#else
+typedef struct IWindowForBindingUIVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWindowForBindingUI* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWindowForBindingUI* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWindowForBindingUI* This);
+
+    /*** IWindowForBindingUI methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IWindowForBindingUI* This,
+        REFGUID rguidReason,
+        HWND *phwnd);
+
+    END_INTERFACE
+} IWindowForBindingUIVtbl;
+interface IWindowForBindingUI {
+    CONST_VTBL IWindowForBindingUIVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWindowForBindingUI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWindowForBindingUI_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWindowForBindingUI_Release(This) (This)->lpVtbl->Release(This)
+/*** IWindowForBindingUI methods ***/
+#define IWindowForBindingUI_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
+    IWindowForBindingUI* This,
+    REFGUID rguidReason,
+    HWND *phwnd);
+void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWindowForBindingUI_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IHttpSecurity interface
+ */
+#ifndef __IHttpSecurity_INTERFACE_DEFINED__
+#define __IHttpSecurity_INTERFACE_DEFINED__
+
+typedef IHttpSecurity *LPHTTPSECURITY;
+DEFINE_GUID(IID_IHttpSecurity, 0x79eac9d7, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IHttpSecurity : public IWindowForBindingUI
+{
+    virtual HRESULT STDMETHODCALLTYPE OnSecurityProblem(
+        DWORD dwProblem) = 0;
+
+};
+#else
+typedef struct IHttpSecurityVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IHttpSecurity* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IHttpSecurity* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IHttpSecurity* This);
+
+    /*** IWindowForBindingUI methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IHttpSecurity* This,
+        REFGUID rguidReason,
+        HWND *phwnd);
+
+    /*** IHttpSecurity methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnSecurityProblem)(
+        IHttpSecurity* This,
+        DWORD dwProblem);
+
+    END_INTERFACE
+} IHttpSecurityVtbl;
+interface IHttpSecurity {
+    CONST_VTBL IHttpSecurityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IHttpSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IHttpSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IHttpSecurity_Release(This) (This)->lpVtbl->Release(This)
+/*** IWindowForBindingUI methods ***/
+#define IHttpSecurity_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)
+/*** IHttpSecurity methods ***/
+#define IHttpSecurity_OnSecurityProblem(This,dwProblem) (This)->lpVtbl->OnSecurityProblem(This,dwProblem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IHttpSecurity_OnSecurityProblem_Proxy(
+    IHttpSecurity* This,
+    DWORD dwProblem);
+void __RPC_STUB IHttpSecurity_OnSecurityProblem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IHttpSecurity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistMoniker interface
+ */
+#ifndef __IPersistMoniker_INTERFACE_DEFINED__
+#define __IPersistMoniker_INTERFACE_DEFINED__
+
+typedef IPersistMoniker *LPPERSISTMONIKER;
+DEFINE_GUID(IID_IPersistMoniker, 0x79eac9c9, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistMoniker : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClassID(
+        CLSID *pClassID) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Load(
+        BOOL fFullyAvailable,
+        IMoniker *pimkName,
+        LPBC pibc,
+        DWORD grfMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Save(
+        IMoniker *pimkName,
+        LPBC pbc,
+        BOOL fRemember) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
+        IMoniker *pimkName,
+        LPBC pibc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurMoniker(
+        IMoniker **ppimkName) = 0;
+
+};
+#else
+typedef struct IPersistMonikerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistMoniker* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistMoniker* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistMoniker* This);
+
+    /*** IPersistMoniker methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersistMoniker* This,
+        CLSID *pClassID);
+
+    HRESULT (STDMETHODCALLTYPE *IsDirty)(
+        IPersistMoniker* This);
+
+    HRESULT (STDMETHODCALLTYPE *Load)(
+        IPersistMoniker* This,
+        BOOL fFullyAvailable,
+        IMoniker *pimkName,
+        LPBC pibc,
+        DWORD grfMode);
+
+    HRESULT (STDMETHODCALLTYPE *Save)(
+        IPersistMoniker* This,
+        IMoniker *pimkName,
+        LPBC pbc,
+        BOOL fRemember);
+
+    HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
+        IPersistMoniker* This,
+        IMoniker *pimkName,
+        LPBC pibc);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurMoniker)(
+        IPersistMoniker* This,
+        IMoniker **ppimkName);
+
+    END_INTERFACE
+} IPersistMonikerVtbl;
+interface IPersistMoniker {
+    CONST_VTBL IPersistMonikerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistMoniker_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersistMoniker methods ***/
+#define IPersistMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#define IPersistMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistMoniker_Load(This,fFullyAvailable,pimkName,pibc,grfMode) (This)->lpVtbl->Load(This,fFullyAvailable,pimkName,pibc,grfMode)
+#define IPersistMoniker_Save(This,pimkName,pbc,fRemember) (This)->lpVtbl->Save(This,pimkName,pbc,fRemember)
+#define IPersistMoniker_SaveCompleted(This,pimkName,pibc) (This)->lpVtbl->SaveCompleted(This,pimkName,pibc)
+#define IPersistMoniker_GetCurMoniker(This,ppimkName) (This)->lpVtbl->GetCurMoniker(This,ppimkName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistMoniker_GetClassID_Proxy(
+    IPersistMoniker* This,
+    CLSID *pClassID);
+void __RPC_STUB IPersistMoniker_GetClassID_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_IsDirty_Proxy(
+    IPersistMoniker* This);
+void __RPC_STUB IPersistMoniker_IsDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_Load_Proxy(
+    IPersistMoniker* This,
+    BOOL fFullyAvailable,
+    IMoniker *pimkName,
+    LPBC pibc,
+    DWORD grfMode);
+void __RPC_STUB IPersistMoniker_Load_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_Save_Proxy(
+    IPersistMoniker* This,
+    IMoniker *pimkName,
+    LPBC pbc,
+    BOOL fRemember);
+void __RPC_STUB IPersistMoniker_Save_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_SaveCompleted_Proxy(
+    IPersistMoniker* This,
+    IMoniker *pimkName,
+    LPBC pibc);
+void __RPC_STUB IPersistMoniker_SaveCompleted_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_GetCurMoniker_Proxy(
+    IPersistMoniker* This,
+    IMoniker **ppimkName);
+void __RPC_STUB IPersistMoniker_GetCurMoniker_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistMoniker_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMonikerProp interface
+ */
+#ifndef __IMonikerProp_INTERFACE_DEFINED__
+#define __IMonikerProp_INTERFACE_DEFINED__
+
+typedef IMonikerProp *LPMONIKERPROP;
+typedef enum __WIDL_urlmon_generated_name_00000006 {
+    MIMETYPEPROP = 0,
+    USE_SRC_URL = 1,
+    CLASSIDPROP = 2,
+    TRUSTEDDOWNLOADPROP = 3,
+    POPUPLEVELPROP = 4
+} MONIKERPROPERTY;
+DEFINE_GUID(IID_IMonikerProp, 0xa5ca5f7f, 0x1847, 0x4d87, 0x9c,0x5b, 0x91,0x85,0x09,0xf7,0x51,0x1d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMonikerProp : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE PutProperty(
+        MONIKERPROPERTY mkp,
+        LPCWSTR val) = 0;
+
+};
+#else
+typedef struct IMonikerPropVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMonikerProp* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMonikerProp* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMonikerProp* This);
+
+    /*** IMonikerProp methods ***/
+    HRESULT (STDMETHODCALLTYPE *PutProperty)(
+        IMonikerProp* This,
+        MONIKERPROPERTY mkp,
+        LPCWSTR val);
+
+    END_INTERFACE
+} IMonikerPropVtbl;
+interface IMonikerProp {
+    CONST_VTBL IMonikerPropVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMonikerProp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMonikerProp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMonikerProp_Release(This) (This)->lpVtbl->Release(This)
+/*** IMonikerProp methods ***/
+#define IMonikerProp_PutProperty(This,mkp,val) (This)->lpVtbl->PutProperty(This,mkp,val)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMonikerProp_PutProperty_Proxy(
+    IMonikerProp* This,
+    MONIKERPROPERTY mkp,
+    LPCWSTR val);
+void __RPC_STUB IMonikerProp_PutProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMonikerProp_INTERFACE_DEFINED__ */
+
+#ifndef _LPBINDPROTOCOL_DEFINED
+#define _LPBINDPROTOCOL_DEFINED
+/*****************************************************************************
+ * IBindProtocol interface
+ */
+#ifndef __IBindProtocol_INTERFACE_DEFINED__
+#define __IBindProtocol_INTERFACE_DEFINED__
+
+typedef IBindProtocol *LPBINDPROTOCOL;
+DEFINE_GUID(IID_IBindProtocol, 0x79eac9cd, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindProtocol : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateBinding(
+        LPCWSTR szUrl,
+        IBindCtx *pbc,
+        IBinding **ppb) = 0;
+
+};
+#else
+typedef struct IBindProtocolVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBindProtocol* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBindProtocol* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBindProtocol* This);
+
+    /*** IBindProtocol methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateBinding)(
+        IBindProtocol* This,
+        LPCWSTR szUrl,
+        IBindCtx *pbc,
+        IBinding **ppb);
+
+    END_INTERFACE
+} IBindProtocolVtbl;
+interface IBindProtocol {
+    CONST_VTBL IBindProtocolVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindProtocol_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindProtocol methods ***/
+#define IBindProtocol_CreateBinding(This,szUrl,pbc,ppb) (This)->lpVtbl->CreateBinding(This,szUrl,pbc,ppb)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindProtocol_CreateBinding_Proxy(
+    IBindProtocol* This,
+    LPCWSTR szUrl,
+    IBindCtx *pbc,
+    IBinding **ppb);
+void __RPC_STUB IBindProtocol_CreateBinding_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBindProtocol_INTERFACE_DEFINED__ */
+
+#endif /* !defined _LPBINDPROTOCOL_DEFINED */
+/*****************************************************************************
+ * IInternetBindInfo interface
+ */
+#ifndef __IInternetBindInfo_INTERFACE_DEFINED__
+#define __IInternetBindInfo_INTERFACE_DEFINED__
+
+typedef IInternetBindInfo *LPIINTERNETBINDINFO;
+typedef enum tagBINDSTRING {
+    BINDSTRING_HEADERS = 1,
+    BINDSTRING_ACCEPT_MIMES = 2,
+    BINDSTRING_EXTRA_URL = 3,
+    BINDSTRING_LANGUAGE = 4,
+    BINDSTRING_USERNAME = 5,
+    BINDSTRING_PASSWORD = 6,
+    BINDSTRING_UA_PIXELS = 7,
+    BINDSTRING_UA_COLOR = 8,
+    BINDSTRING_OS = 9,
+    BINDSTRING_USER_AGENT = 10,
+    BINDSTRING_ACCEPT_ENCODINGS = 11,
+    BINDSTRING_POST_COOKIE = 12,
+    BINDSTRING_POST_DATA_MIME = 13,
+    BINDSTRING_URL = 14,
+    BINDSTRING_IID = 15,
+    BINDSTRING_FLAG_BIND_TO_OBJECT = 16,
+    BINDSTRING_PTR_BIND_CONTEXT = 17
+} BINDSTRING;
+DEFINE_GUID(IID_IInternetBindInfo, 0x79eac9e1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetBindInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBindString(
+        ULONG ulStringType,
+        LPOLESTR *ppwzStr,
+        ULONG cEl,
+        ULONG *pcElFetched) = 0;
+
+};
+#else
+typedef struct IInternetBindInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetBindInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetBindInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetBindInfo* This);
+
+    /*** IInternetBindInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
+        IInternetBindInfo* This,
+        DWORD *grfBINDF,
+        BINDINFO *pbindinfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetBindString)(
+        IInternetBindInfo* This,
+        ULONG ulStringType,
+        LPOLESTR *ppwzStr,
+        ULONG cEl,
+        ULONG *pcElFetched);
+
+    END_INTERFACE
+} IInternetBindInfoVtbl;
+interface IInternetBindInfo {
+    CONST_VTBL IInternetBindInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetBindInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetBindInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetBindInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetBindInfo methods ***/
+#define IInternetBindInfo_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
+#define IInternetBindInfo_GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched) (This)->lpVtbl->GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetBindInfo_GetBindInfo_Proxy(
+    IInternetBindInfo* This,
+    DWORD *grfBINDF,
+    BINDINFO *pbindinfo);
+void __RPC_STUB IInternetBindInfo_GetBindInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetBindInfo_GetBindString_Proxy(
+    IInternetBindInfo* This,
+    ULONG ulStringType,
+    LPOLESTR *ppwzStr,
+    ULONG cEl,
+    ULONG *pcElFetched);
+void __RPC_STUB IInternetBindInfo_GetBindString_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetBindInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetPriority interface
+ */
+#ifndef __IInternetPriority_INTERFACE_DEFINED__
+#define __IInternetPriority_INTERFACE_DEFINED__
+
+typedef IInternetPriority *LPIINTERNETPRIORITY;
+DEFINE_GUID(IID_IInternetPriority, 0x79eac9eb, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetPriority : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPriority(
+        LONG nPriority) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPriority(
+        LONG *pnPriority) = 0;
+
+};
+#else
+typedef struct IInternetPriorityVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetPriority* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetPriority* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetPriority* This);
+
+    /*** IInternetPriority methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPriority)(
+        IInternetPriority* This,
+        LONG nPriority);
+
+    HRESULT (STDMETHODCALLTYPE *GetPriority)(
+        IInternetPriority* This,
+        LONG *pnPriority);
+
+    END_INTERFACE
+} IInternetPriorityVtbl;
+interface IInternetPriority {
+    CONST_VTBL IInternetPriorityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetPriority_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetPriority_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetPriority_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetPriority methods ***/
+#define IInternetPriority_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)
+#define IInternetPriority_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetPriority_SetPriority_Proxy(
+    IInternetPriority* This,
+    LONG nPriority);
+void __RPC_STUB IInternetPriority_SetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetPriority_GetPriority_Proxy(
+    IInternetPriority* This,
+    LONG *pnPriority);
+void __RPC_STUB IInternetPriority_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetPriority_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolRoot interface
+ */
+#ifndef __IInternetProtocolRoot_INTERFACE_DEFINED__
+#define __IInternetProtocolRoot_INTERFACE_DEFINED__
+
+typedef IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
+typedef enum _tagPI_FLAGS {
+    PI_PARSE_URL = 0x1,
+    PI_FILTER_MODE = 0x2,
+    PI_FORCE_ASYNC = 0x4,
+    PI_USE_WORKERTHREAD = 0x8,
+    PI_MIMEVERIFICATION = 0x10,
+    PI_CLSIDLOOKUP = 0x20,
+    PI_DATAPROGRESS = 0x40,
+    PI_SYNCHRONOUS = 0x80,
+    PI_APARTMENTTHREADED = 0x100,
+    PI_CLASSINSTALL = 0x200,
+    PD_FORCE_SWITCH = 0x10000
+} PI_FLAGS;
+typedef struct _tagPROTOCOLDATA {
+    DWORD grfFlags;
+    DWORD dwState;
+    LPVOID pData;
+    ULONG cbData;
+} PROTOCOLDATA;
+DEFINE_GUID(IID_IInternetProtocolRoot, 0x79eac9e3, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolRoot : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        LPCWSTR szUrl,
+        IInternetProtocolSink *pOIProtSink,
+        IInternetBindInfo *pOIBindInfo,
+        DWORD grfPI,
+        HANDLE_PTR dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Continue(
+        PROTOCOLDATA *pProtocolData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Abort(
+        HRESULT hrReason,
+        DWORD dwOptions) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Terminate(
+        DWORD dwOptions) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Suspend(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Resume(
+        ) = 0;
+
+};
+#else
+typedef struct IInternetProtocolRootVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetProtocolRoot* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetProtocolRoot* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetProtocolRoot* This);
+
+    /*** IInternetProtocolRoot methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IInternetProtocolRoot* This,
+        LPCWSTR szUrl,
+        IInternetProtocolSink *pOIProtSink,
+        IInternetBindInfo *pOIBindInfo,
+        DWORD grfPI,
+        HANDLE_PTR dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *Continue)(
+        IInternetProtocolRoot* This,
+        PROTOCOLDATA *pProtocolData);
+
+    HRESULT (STDMETHODCALLTYPE *Abort)(
+        IInternetProtocolRoot* This,
+        HRESULT hrReason,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *Terminate)(
+        IInternetProtocolRoot* This,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *Suspend)(
+        IInternetProtocolRoot* This);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IInternetProtocolRoot* This);
+
+    END_INTERFACE
+} IInternetProtocolRootVtbl;
+interface IInternetProtocolRoot {
+    CONST_VTBL IInternetProtocolRootVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolRoot_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolRoot_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolRoot_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolRoot methods ***/
+#define IInternetProtocolRoot_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#define IInternetProtocolRoot_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
+#define IInternetProtocolRoot_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
+#define IInternetProtocolRoot_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
+#define IInternetProtocolRoot_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IInternetProtocolRoot_Resume(This) (This)->lpVtbl->Resume(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Start_Proxy(
+    IInternetProtocolRoot* This,
+    LPCWSTR szUrl,
+    IInternetProtocolSink *pOIProtSink,
+    IInternetBindInfo *pOIBindInfo,
+    DWORD grfPI,
+    HANDLE_PTR dwReserved);
+void __RPC_STUB IInternetProtocolRoot_Start_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Continue_Proxy(
+    IInternetProtocolRoot* This,
+    PROTOCOLDATA *pProtocolData);
+void __RPC_STUB IInternetProtocolRoot_Continue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Abort_Proxy(
+    IInternetProtocolRoot* This,
+    HRESULT hrReason,
+    DWORD dwOptions);
+void __RPC_STUB IInternetProtocolRoot_Abort_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Terminate_Proxy(
+    IInternetProtocolRoot* This,
+    DWORD dwOptions);
+void __RPC_STUB IInternetProtocolRoot_Terminate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Suspend_Proxy(
+    IInternetProtocolRoot* This);
+void __RPC_STUB IInternetProtocolRoot_Suspend_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Resume_Proxy(
+    IInternetProtocolRoot* This);
+void __RPC_STUB IInternetProtocolRoot_Resume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetProtocolRoot_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolSink interface
+ */
+#ifndef __IInternetProtocolSink_INTERFACE_DEFINED__
+#define __IInternetProtocolSink_INTERFACE_DEFINED__
+
+typedef IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
+DEFINE_GUID(IID_IInternetProtocolSink, 0x79eac9e5, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolSink : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Switch(
+        PROTOCOLDATA *pProtocolData) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReportProgress(
+        ULONG ulStatusCode,
+        LPCWSTR szStatusText) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReportData(
+        DWORD grfBSCF,
+        ULONG ulProgress,
+        ULONG ulProgressMax) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReportResult(
+        HRESULT hrResult,
+        DWORD dwError,
+        LPCWSTR szResult) = 0;
+
+};
+#else
+typedef struct IInternetProtocolSinkVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetProtocolSink* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetProtocolSink* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetProtocolSink* This);
+
+    /*** IInternetProtocolSink methods ***/
+    HRESULT (STDMETHODCALLTYPE *Switch)(
+        IInternetProtocolSink* This,
+        PROTOCOLDATA *pProtocolData);
+
+    HRESULT (STDMETHODCALLTYPE *ReportProgress)(
+        IInternetProtocolSink* This,
+        ULONG ulStatusCode,
+        LPCWSTR szStatusText);
+
+    HRESULT (STDMETHODCALLTYPE *ReportData)(
+        IInternetProtocolSink* This,
+        DWORD grfBSCF,
+        ULONG ulProgress,
+        ULONG ulProgressMax);
+
+    HRESULT (STDMETHODCALLTYPE *ReportResult)(
+        IInternetProtocolSink* This,
+        HRESULT hrResult,
+        DWORD dwError,
+        LPCWSTR szResult);
+
+    END_INTERFACE
+} IInternetProtocolSinkVtbl;
+interface IInternetProtocolSink {
+    CONST_VTBL IInternetProtocolSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolSink methods ***/
+#define IInternetProtocolSink_Switch(This,pProtocolData) (This)->lpVtbl->Switch(This,pProtocolData)
+#define IInternetProtocolSink_ReportProgress(This,ulStatusCode,szStatusText) (This)->lpVtbl->ReportProgress(This,ulStatusCode,szStatusText)
+#define IInternetProtocolSink_ReportData(This,grfBSCF,ulProgress,ulProgressMax) (This)->lpVtbl->ReportData(This,grfBSCF,ulProgress,ulProgressMax)
+#define IInternetProtocolSink_ReportResult(This,hrResult,dwError,szResult) (This)->lpVtbl->ReportResult(This,hrResult,dwError,szResult)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_Switch_Proxy(
+    IInternetProtocolSink* This,
+    PROTOCOLDATA *pProtocolData);
+void __RPC_STUB IInternetProtocolSink_Switch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportProgress_Proxy(
+    IInternetProtocolSink* This,
+    ULONG ulStatusCode,
+    LPCWSTR szStatusText);
+void __RPC_STUB IInternetProtocolSink_ReportProgress_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportData_Proxy(
+    IInternetProtocolSink* This,
+    DWORD grfBSCF,
+    ULONG ulProgress,
+    ULONG ulProgressMax);
+void __RPC_STUB IInternetProtocolSink_ReportData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportResult_Proxy(
+    IInternetProtocolSink* This,
+    HRESULT hrResult,
+    DWORD dwError,
+    LPCWSTR szResult);
+void __RPC_STUB IInternetProtocolSink_ReportResult_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetProtocolSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocol interface
+ */
+#ifndef __IInternetProtocol_INTERFACE_DEFINED__
+#define __IInternetProtocol_INTERFACE_DEFINED__
+
+typedef IInternetProtocol *LPIINTERNETPROTOCOL;
+DEFINE_GUID(IID_IInternetProtocol, 0x79eac9e4, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocol : public IInternetProtocolRoot
+{
+    virtual HRESULT STDMETHODCALLTYPE Read(
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Seek(
+        LARGE_INTEGER dlibMove,
+        DWORD dwOrigin,
+        ULARGE_INTEGER *plibNewPosition) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRequest(
+        DWORD dwOptions) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRequest(
+        ) = 0;
+
+};
+#else
+typedef struct IInternetProtocolVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetProtocol* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetProtocol* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetProtocol* This);
+
+    /*** IInternetProtocolRoot methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IInternetProtocol* This,
+        LPCWSTR szUrl,
+        IInternetProtocolSink *pOIProtSink,
+        IInternetBindInfo *pOIBindInfo,
+        DWORD grfPI,
+        HANDLE_PTR dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *Continue)(
+        IInternetProtocol* This,
+        PROTOCOLDATA *pProtocolData);
+
+    HRESULT (STDMETHODCALLTYPE *Abort)(
+        IInternetProtocol* This,
+        HRESULT hrReason,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *Terminate)(
+        IInternetProtocol* This,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *Suspend)(
+        IInternetProtocol* This);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IInternetProtocol* This);
+
+    /*** IInternetProtocol methods ***/
+    HRESULT (STDMETHODCALLTYPE *Read)(
+        IInternetProtocol* This,
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead);
+
+    HRESULT (STDMETHODCALLTYPE *Seek)(
+        IInternetProtocol* This,
+        LARGE_INTEGER dlibMove,
+        DWORD dwOrigin,
+        ULARGE_INTEGER *plibNewPosition);
+
+    HRESULT (STDMETHODCALLTYPE *LockRequest)(
+        IInternetProtocol* This,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRequest)(
+        IInternetProtocol* This);
+
+    END_INTERFACE
+} IInternetProtocolVtbl;
+interface IInternetProtocol {
+    CONST_VTBL IInternetProtocolVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocol_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolRoot methods ***/
+#define IInternetProtocol_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#define IInternetProtocol_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
+#define IInternetProtocol_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
+#define IInternetProtocol_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
+#define IInternetProtocol_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IInternetProtocol_Resume(This) (This)->lpVtbl->Resume(This)
+/*** IInternetProtocol methods ***/
+#define IInternetProtocol_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IInternetProtocol_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IInternetProtocol_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)
+#define IInternetProtocol_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocol_Read_Proxy(
+    IInternetProtocol* This,
+    void *pv,
+    ULONG cb,
+    ULONG *pcbRead);
+void __RPC_STUB IInternetProtocol_Read_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocol_Seek_Proxy(
+    IInternetProtocol* This,
+    LARGE_INTEGER dlibMove,
+    DWORD dwOrigin,
+    ULARGE_INTEGER *plibNewPosition);
+void __RPC_STUB IInternetProtocol_Seek_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocol_LockRequest_Proxy(
+    IInternetProtocol* This,
+    DWORD dwOptions);
+void __RPC_STUB IInternetProtocol_LockRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocol_UnlockRequest_Proxy(
+    IInternetProtocol* This);
+void __RPC_STUB IInternetProtocol_UnlockRequest_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetProtocol_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolInfo interface
+ */
+#ifndef __IInternetProtocolInfo_INTERFACE_DEFINED__
+#define __IInternetProtocolInfo_INTERFACE_DEFINED__
+
+typedef IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
+typedef enum _tagPARSEACTION {
+    PARSE_CANONICALIZE = 1,
+    PARSE_FRIENDLY = 2,
+    PARSE_SECURITY_URL = 3,
+    PARSE_ROOTDOCUMENT = 4,
+    PARSE_DOCUMENT = 5,
+    PARSE_ANCHOR = 6,
+    PARSE_ENCODE = 7,
+    PARSE_DECODE = 8,
+    PARSE_PATH_FROM_URL = 9,
+    PARSE_URL_FROM_PATH = 10,
+    PARSE_MIME = 11,
+    PARSE_SERVER = 12,
+    PARSE_SCHEMA = 13,
+    PARSE_SITE = 14,
+    PARSE_DOMAIN = 15,
+    PARSE_LOCATION = 16,
+    PARSE_SECURITY_DOMAIN = 17,
+    PARSE_ESCAPE = 18,
+    PARSE_UNESCAPE = 19
+} PARSEACTION;
+typedef enum _tagPSUACTION {
+    PSU_DEFAULT = 1,
+    PSU_SECURITY_URL_ONLY = 2
+} PSUACTION;
+typedef enum _tagQUERYOPTION {
+    QUERY_EXPIRATION_DATE = 1,
+    QUERY_TIME_OF_LAST_CHANGE = 2,
+    QUERY_CONTENT_ENCODING = 3,
+    QUERY_CONTENT_TYPE = 4,
+    QUERY_REFRESH = 5,
+    QUERY_RECOMBINE = 6,
+    QUERY_CAN_NAVIGATE = 7,
+    QUERY_USES_NETWORK = 8,
+    QUERY_IS_CACHED = 9,
+    QUERY_IS_INSTALLEDENTRY = 10,
+    QUERY_IS_CACHED_OR_MAPPED = 11,
+    QUERY_USES_CACHE = 12,
+    QUERY_IS_SECURE = 13,
+    QUERY_IS_SAFE = 14,
+    QUERY_USES_HISTORYFOLDER = 15
+} QUERYOPTION;
+DEFINE_GUID(IID_IInternetProtocolInfo, 0x79eac9ec, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ParseUrl(
+        LPCWSTR pwzUrl,
+        PARSEACTION ParseAction,
+        DWORD dwParseFlags,
+        LPWSTR pwzResult,
+        DWORD cchResult,
+        DWORD *pcchResult,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CombineUrl(
+        LPCWSTR pwzBaseUrl,
+        LPCWSTR pwzRelativeUrl,
+        DWORD dwCombineFlags,
+        LPWSTR pwzResult,
+        DWORD cchResult,
+        DWORD *pcchResult,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CompareUrl(
+        LPCWSTR pwzUrl1,
+        LPCWSTR pwzUrl2,
+        DWORD dwCompareFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryInfo(
+        LPCWSTR pwzUrl,
+        QUERYOPTION OueryOption,
+        DWORD dwQueryFlags,
+        LPVOID pBuffer,
+        DWORD cbBuffer,
+        DWORD *pcbBuf,
+        DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetProtocolInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetProtocolInfo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetProtocolInfo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetProtocolInfo* This);
+
+    /*** IInternetProtocolInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *ParseUrl)(
+        IInternetProtocolInfo* This,
+        LPCWSTR pwzUrl,
+        PARSEACTION ParseAction,
+        DWORD dwParseFlags,
+        LPWSTR pwzResult,
+        DWORD cchResult,
+        DWORD *pcchResult,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *CombineUrl)(
+        IInternetProtocolInfo* This,
+        LPCWSTR pwzBaseUrl,
+        LPCWSTR pwzRelativeUrl,
+        DWORD dwCombineFlags,
+        LPWSTR pwzResult,
+        DWORD cchResult,
+        DWORD *pcchResult,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *CompareUrl)(
+        IInternetProtocolInfo* This,
+        LPCWSTR pwzUrl1,
+        LPCWSTR pwzUrl2,
+        DWORD dwCompareFlags);
+
+    HRESULT (STDMETHODCALLTYPE *QueryInfo)(
+        IInternetProtocolInfo* This,
+        LPCWSTR pwzUrl,
+        QUERYOPTION OueryOption,
+        DWORD dwQueryFlags,
+        LPVOID pBuffer,
+        DWORD cbBuffer,
+        DWORD *pcbBuf,
+        DWORD dwReserved);
+
+    END_INTERFACE
+} IInternetProtocolInfoVtbl;
+interface IInternetProtocolInfo {
+    CONST_VTBL IInternetProtocolInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolInfo methods ***/
+#define IInternetProtocolInfo_ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved)
+#define IInternetProtocolInfo_CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved)
+#define IInternetProtocolInfo_CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags) (This)->lpVtbl->CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags)
+#define IInternetProtocolInfo_QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved) (This)->lpVtbl->QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_ParseUrl_Proxy(
+    IInternetProtocolInfo* This,
+    LPCWSTR pwzUrl,
+    PARSEACTION ParseAction,
+    DWORD dwParseFlags,
+    LPWSTR pwzResult,
+    DWORD cchResult,
+    DWORD *pcchResult,
+    DWORD dwReserved);
+void __RPC_STUB IInternetProtocolInfo_ParseUrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_CombineUrl_Proxy(
+    IInternetProtocolInfo* This,
+    LPCWSTR pwzBaseUrl,
+    LPCWSTR pwzRelativeUrl,
+    DWORD dwCombineFlags,
+    LPWSTR pwzResult,
+    DWORD cchResult,
+    DWORD *pcchResult,
+    DWORD dwReserved);
+void __RPC_STUB IInternetProtocolInfo_CombineUrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_CompareUrl_Proxy(
+    IInternetProtocolInfo* This,
+    LPCWSTR pwzUrl1,
+    LPCWSTR pwzUrl2,
+    DWORD dwCompareFlags);
+void __RPC_STUB IInternetProtocolInfo_CompareUrl_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_QueryInfo_Proxy(
+    IInternetProtocolInfo* This,
+    LPCWSTR pwzUrl,
+    QUERYOPTION OueryOption,
+    DWORD dwQueryFlags,
+    LPVOID pBuffer,
+    DWORD cbBuffer,
+    DWORD *pcbBuf,
+    DWORD dwReserved);
+void __RPC_STUB IInternetProtocolInfo_QueryInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetProtocolInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetSession interface
+ */
+#ifndef __IInternetSession_INTERFACE_DEFINED__
+#define __IInternetSession_INTERFACE_DEFINED__
+
+typedef IInternetSession *LPIINTERNETSESSION;
+typedef enum _tagOIBDG_FLAGS {
+    OIBDG_APARTMENTTHREADED = 0x100,
+    OIBDG_DATAONLY = 0x1000
+} OIBDG_FLAGS;
+DEFINE_GUID(IID_IInternetSession, 0x79eac9e7, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetSession : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE RegisterNameSpace(
+        IClassFactory *pCF,
+        REFCLSID rclsid,
+        LPCWSTR pwzProtocol,
+        ULONG cPatterns,
+        const LPCWSTR *ppwzPatterns,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnregisterNameSpace(
+        IClassFactory *pCF,
+        LPCWSTR pszProtocol) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterMimeFilter(
+        IClassFactory *pCF,
+        REFCLSID rclsid,
+        LPCWSTR pwzType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnregisterMimeFilter(
+        IClassFactory *pCF,
+        LPCWSTR pwzType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateBinding(
+        LPBC pBC,
+        LPCWSTR szUrl,
+        IUnknown *pUnkOuter,
+        IUnknown **ppUnk,
+        IInternetProtocol **ppOInetProt,
+        DWORD dwOption) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSessionOption(
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD dwBufferLength,
+        DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetSessionVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetSession* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetSession* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetSession* This);
+
+    /*** IInternetSession methods ***/
+    HRESULT (STDMETHODCALLTYPE *RegisterNameSpace)(
+        IInternetSession* This,
+        IClassFactory *pCF,
+        REFCLSID rclsid,
+        LPCWSTR pwzProtocol,
+        ULONG cPatterns,
+        const LPCWSTR *ppwzPatterns,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterNameSpace)(
+        IInternetSession* This,
+        IClassFactory *pCF,
+        LPCWSTR pszProtocol);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterMimeFilter)(
+        IInternetSession* This,
+        IClassFactory *pCF,
+        REFCLSID rclsid,
+        LPCWSTR pwzType);
+
+    HRESULT (STDMETHODCALLTYPE *UnregisterMimeFilter)(
+        IInternetSession* This,
+        IClassFactory *pCF,
+        LPCWSTR pwzType);
+
+    HRESULT (STDMETHODCALLTYPE *CreateBinding)(
+        IInternetSession* This,
+        LPBC pBC,
+        LPCWSTR szUrl,
+        IUnknown *pUnkOuter,
+        IUnknown **ppUnk,
+        IInternetProtocol **ppOInetProt,
+        DWORD dwOption);
+
+    HRESULT (STDMETHODCALLTYPE *SetSessionOption)(
+        IInternetSession* This,
+        DWORD dwOption,
+        LPVOID pBuffer,
+        DWORD dwBufferLength,
+        DWORD dwReserved);
+
+    END_INTERFACE
+} IInternetSessionVtbl;
+interface IInternetSession {
+    CONST_VTBL IInternetSessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetSession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetSession_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetSession methods ***/
+#define IInternetSession_RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved) (This)->lpVtbl->RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved)
+#define IInternetSession_UnregisterNameSpace(This,pCF,pszProtocol) (This)->lpVtbl->UnregisterNameSpace(This,pCF,pszProtocol)
+#define IInternetSession_RegisterMimeFilter(This,pCF,rclsid,pwzType) (This)->lpVtbl->RegisterMimeFilter(This,pCF,rclsid,pwzType)
+#define IInternetSession_UnregisterMimeFilter(This,pCF,pwzType) (This)->lpVtbl->UnregisterMimeFilter(This,pCF,pwzType)
+#define IInternetSession_CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption) (This)->lpVtbl->CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption)
+#define IInternetSession_SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved) (This)->lpVtbl->SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetSession_RegisterNameSpace_Proxy(
+    IInternetSession* This,
+    IClassFactory *pCF,
+    REFCLSID rclsid,
+    LPCWSTR pwzProtocol,
+    ULONG cPatterns,
+    const LPCWSTR *ppwzPatterns,
+    DWORD dwReserved);
+void __RPC_STUB IInternetSession_RegisterNameSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_UnregisterNameSpace_Proxy(
+    IInternetSession* This,
+    IClassFactory *pCF,
+    LPCWSTR pszProtocol);
+void __RPC_STUB IInternetSession_UnregisterNameSpace_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_RegisterMimeFilter_Proxy(
+    IInternetSession* This,
+    IClassFactory *pCF,
+    REFCLSID rclsid,
+    LPCWSTR pwzType);
+void __RPC_STUB IInternetSession_RegisterMimeFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_UnregisterMimeFilter_Proxy(
+    IInternetSession* This,
+    IClassFactory *pCF,
+    LPCWSTR pwzType);
+void __RPC_STUB IInternetSession_UnregisterMimeFilter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_CreateBinding_Proxy(
+    IInternetSession* This,
+    LPBC pBC,
+    LPCWSTR szUrl,
+    IUnknown *pUnkOuter,
+    IUnknown **ppUnk,
+    IInternetProtocol **ppOInetProt,
+    DWORD dwOption);
+void __RPC_STUB IInternetSession_CreateBinding_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_SetSessionOption_Proxy(
+    IInternetSession* This,
+    DWORD dwOption,
+    LPVOID pBuffer,
+    DWORD dwBufferLength,
+    DWORD dwReserved);
+void __RPC_STUB IInternetSession_SetSessionOption_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetSession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetSecurityMgrSite interface
+ */
+#ifndef __IInternetSecurityMgrSite_INTERFACE_DEFINED__
+#define __IInternetSecurityMgrSite_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetSecurityMgrSite, 0x79eac9ed, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetSecurityMgrSite : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetWindow(
+        HWND *phwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnableModeless(
+        BOOL fEnable) = 0;
+
+};
+#else
+typedef struct IInternetSecurityMgrSiteVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetSecurityMgrSite* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetSecurityMgrSite* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetSecurityMgrSite* This);
+
+    /*** IInternetSecurityMgrSite methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IInternetSecurityMgrSite* This,
+        HWND *phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *EnableModeless)(
+        IInternetSecurityMgrSite* This,
+        BOOL fEnable);
+
+    END_INTERFACE
+} IInternetSecurityMgrSiteVtbl;
+interface IInternetSecurityMgrSite {
+    CONST_VTBL IInternetSecurityMgrSiteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetSecurityMgrSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetSecurityMgrSite_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetSecurityMgrSite_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetSecurityMgrSite methods ***/
+#define IInternetSecurityMgrSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IInternetSecurityMgrSite_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetSecurityMgrSite_GetWindow_Proxy(
+    IInternetSecurityMgrSite* This,
+    HWND *phwnd);
+void __RPC_STUB IInternetSecurityMgrSite_GetWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityMgrSite_EnableModeless_Proxy(
+    IInternetSecurityMgrSite* This,
+    BOOL fEnable);
+void __RPC_STUB IInternetSecurityMgrSite_EnableModeless_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetSecurityMgrSite_INTERFACE_DEFINED__ */
+
+#define SID_SInternetSecurityManager IID_IInternetSecurityManager
+/*****************************************************************************
+ * IInternetSecurityManager interface
+ */
+#ifndef __IInternetSecurityManager_INTERFACE_DEFINED__
+#define __IInternetSecurityManager_INTERFACE_DEFINED__
+
+#define MAX_SIZE_SECURITY_ID 512
+typedef enum __WIDL_urlmon_generated_name_00000007 {
+    PUAF_DEFAULT = 0x0,
+    PUAF_NOUI = 0x1,
+    PUAF_ISFILE = 0x2,
+    PUAF_WARN_IF_DENIED = 0x4,
+    PUAF_FORCEUI_FOREGROUND = 0x8,
+    PUAF_CHECK_TIPS = 0x10
+} PUAF;
+typedef enum __WIDL_urlmon_generated_name_00000008 {
+    SZM_CREATE = 0x0,
+    SZM_DELETE = 0x1
+} SZM_FLAGS;
+DEFINE_GUID(IID_IInternetSecurityManager, 0x79eac9ee, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetSecurityManager : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetSecuritySite(
+        IInternetSecurityMgrSite *pSite) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSecuritySite(
+        IInternetSecurityMgrSite **ppSite) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MapUrlToZone(
+        LPCWSTR pwszUrl,
+        DWORD *pdwZone,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
+        LPCWSTR pwszUrl,
+        BYTE *pbSecurityId,
+        DWORD *pcbSecurityId,
+        DWORD_PTR dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
+        LPCWSTR pwszUrl,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwFlags,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
+        LPCWSTR pwszUrl,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetZoneMapping(
+        DWORD dwZone,
+        LPCWSTR lpszPattern,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetZoneMappings(
+        DWORD dwZone,
+        IEnumString **ppenumString,
+        DWORD dwFlags) = 0;
+
+};
+#else
+typedef struct IInternetSecurityManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetSecurityManager* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetSecurityManager* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetSecurityManager* This);
+
+    /*** IInternetSecurityManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetSecuritySite)(
+        IInternetSecurityManager* This,
+        IInternetSecurityMgrSite *pSite);
+
+    HRESULT (STDMETHODCALLTYPE *GetSecuritySite)(
+        IInternetSecurityManager* This,
+        IInternetSecurityMgrSite **ppSite);
+
+    HRESULT (STDMETHODCALLTYPE *MapUrlToZone)(
+        IInternetSecurityManager* This,
+        LPCWSTR pwszUrl,
+        DWORD *pdwZone,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetSecurityId)(
+        IInternetSecurityManager* This,
+        LPCWSTR pwszUrl,
+        BYTE *pbSecurityId,
+        DWORD *pcbSecurityId,
+        DWORD_PTR dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessUrlAction)(
+        IInternetSecurityManager* This,
+        LPCWSTR pwszUrl,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwFlags,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *QueryCustomPolicy)(
+        IInternetSecurityManager* This,
+        LPCWSTR pwszUrl,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneMapping)(
+        IInternetSecurityManager* This,
+        DWORD dwZone,
+        LPCWSTR lpszPattern,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneMappings)(
+        IInternetSecurityManager* This,
+        DWORD dwZone,
+        IEnumString **ppenumString,
+        DWORD dwFlags);
+
+    END_INTERFACE
+} IInternetSecurityManagerVtbl;
+interface IInternetSecurityManager {
+    CONST_VTBL IInternetSecurityManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetSecurityManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetSecurityManager methods ***/
+#define IInternetSecurityManager_SetSecuritySite(This,pSite) (This)->lpVtbl->SetSecuritySite(This,pSite)
+#define IInternetSecurityManager_GetSecuritySite(This,ppSite) (This)->lpVtbl->GetSecuritySite(This,ppSite)
+#define IInternetSecurityManager_MapUrlToZone(This,pwszUrl,pdwZone,dwFlags) (This)->lpVtbl->MapUrlToZone(This,pwszUrl,pdwZone,dwFlags)
+#define IInternetSecurityManager_GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved)
+#define IInternetSecurityManager_ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)
+#define IInternetSecurityManager_QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)
+#define IInternetSecurityManager_SetZoneMapping(This,dwZone,lpszPattern,dwFlags) (This)->lpVtbl->SetZoneMapping(This,dwZone,lpszPattern,dwFlags)
+#define IInternetSecurityManager_GetZoneMappings(This,dwZone,ppenumString,dwFlags) (This)->lpVtbl->GetZoneMappings(This,dwZone,ppenumString,dwFlags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_SetSecuritySite_Proxy(
+    IInternetSecurityManager* This,
+    IInternetSecurityMgrSite *pSite);
+void __RPC_STUB IInternetSecurityManager_SetSecuritySite_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetSecuritySite_Proxy(
+    IInternetSecurityManager* This,
+    IInternetSecurityMgrSite **ppSite);
+void __RPC_STUB IInternetSecurityManager_GetSecuritySite_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_MapUrlToZone_Proxy(
+    IInternetSecurityManager* This,
+    LPCWSTR pwszUrl,
+    DWORD *pdwZone,
+    DWORD dwFlags);
+void __RPC_STUB IInternetSecurityManager_MapUrlToZone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetSecurityId_Proxy(
+    IInternetSecurityManager* This,
+    LPCWSTR pwszUrl,
+    BYTE *pbSecurityId,
+    DWORD *pcbSecurityId,
+    DWORD_PTR dwReserved);
+void __RPC_STUB IInternetSecurityManager_GetSecurityId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_ProcessUrlAction_Proxy(
+    IInternetSecurityManager* This,
+    LPCWSTR pwszUrl,
+    DWORD dwAction,
+    BYTE *pPolicy,
+    DWORD cbPolicy,
+    BYTE *pContext,
+    DWORD cbContext,
+    DWORD dwFlags,
+    DWORD dwReserved);
+void __RPC_STUB IInternetSecurityManager_ProcessUrlAction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_QueryCustomPolicy_Proxy(
+    IInternetSecurityManager* This,
+    LPCWSTR pwszUrl,
+    REFGUID guidKey,
+    BYTE **ppPolicy,
+    DWORD *pcbPolicy,
+    BYTE *pContext,
+    DWORD cbContext,
+    DWORD dwReserved);
+void __RPC_STUB IInternetSecurityManager_QueryCustomPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_SetZoneMapping_Proxy(
+    IInternetSecurityManager* This,
+    DWORD dwZone,
+    LPCWSTR lpszPattern,
+    DWORD dwFlags);
+void __RPC_STUB IInternetSecurityManager_SetZoneMapping_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetZoneMappings_Proxy(
+    IInternetSecurityManager* This,
+    DWORD dwZone,
+    IEnumString **ppenumString,
+    DWORD dwFlags);
+void __RPC_STUB IInternetSecurityManager_GetZoneMappings_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetSecurityManager_INTERFACE_DEFINED__ */
+
+#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager
+/*****************************************************************************
+ * IInternetHostSecurityManager interface
+ */
+#ifndef __IInternetHostSecurityManager_INTERFACE_DEFINED__
+#define __IInternetHostSecurityManager_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetHostSecurityManager, 0x3af280b6, 0xcb3f, 0x11d0, 0x89,0x1e, 0x00,0xc0,0x4f,0xb6,0xbf,0xc4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetHostSecurityManager : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
+        BYTE *pbSecurityId,
+        DWORD *pcbSecurityId,
+        DWORD_PTR dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwFlags,
+        DWORD dwReserved) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetHostSecurityManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetHostSecurityManager* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetHostSecurityManager* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetHostSecurityManager* This);
+
+    /*** IInternetHostSecurityManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSecurityId)(
+        IInternetHostSecurityManager* This,
+        BYTE *pbSecurityId,
+        DWORD *pcbSecurityId,
+        DWORD_PTR dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessUrlAction)(
+        IInternetHostSecurityManager* This,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwFlags,
+        DWORD dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *QueryCustomPolicy)(
+        IInternetHostSecurityManager* This,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        BYTE *pContext,
+        DWORD cbContext,
+        DWORD dwReserved);
+
+    END_INTERFACE
+} IInternetHostSecurityManagerVtbl;
+interface IInternetHostSecurityManager {
+    CONST_VTBL IInternetHostSecurityManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetHostSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetHostSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetHostSecurityManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetHostSecurityManager methods ***/
+#define IInternetHostSecurityManager_GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)
+#define IInternetHostSecurityManager_ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)
+#define IInternetHostSecurityManager_QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_GetSecurityId_Proxy(
+    IInternetHostSecurityManager* This,
+    BYTE *pbSecurityId,
+    DWORD *pcbSecurityId,
+    DWORD_PTR dwReserved);
+void __RPC_STUB IInternetHostSecurityManager_GetSecurityId_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_ProcessUrlAction_Proxy(
+    IInternetHostSecurityManager* This,
+    DWORD dwAction,
+    BYTE *pPolicy,
+    DWORD cbPolicy,
+    BYTE *pContext,
+    DWORD cbContext,
+    DWORD dwFlags,
+    DWORD dwReserved);
+void __RPC_STUB IInternetHostSecurityManager_ProcessUrlAction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_QueryCustomPolicy_Proxy(
+    IInternetHostSecurityManager* This,
+    REFGUID guidKey,
+    BYTE **ppPolicy,
+    DWORD *pcbPolicy,
+    BYTE *pContext,
+    DWORD cbContext,
+    DWORD dwReserved);
+void __RPC_STUB IInternetHostSecurityManager_QueryCustomPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetHostSecurityManager_INTERFACE_DEFINED__ */
+
+#define URLACTION_MIN                        0x00001000
+#define URLACTION_DOWNLOAD_MIN               0x00001000
+#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX    0x00001001
+#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX  0x00001004
+#define URLACTION_DOWNLOAD_CURR_MAX          0x00001004
+#define URLACTION_DOWNLOAD_MAX               0x000011ff
+#define URLACTION_ACTIVEX_MIN                     0x00001200
+#define URLACTION_ACTIVEX_RUN                     0x00001200
+#define URLPOLICY_ACTIVEX_CHECK_LIST              0x00010000
+#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY  0x00001201
+#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY    0x00001202
+#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY  0x00001203
+#define URLACTION_SCRIPT_OVERRIDE_SAFETY          0x00001401
+#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY  0x00001204
+#define URLACTION_ACTIVEX_TREATASUNTRUSTED        0x00001205
+#define URLACTION_ACTIVEX_CURR_MAX                0x00001205
+#define URLACTION_ACTIVEX_MAX                     0x000013ff
+#define URLACTION_SCRIPT_MIN           0x00001400
+#define URLACTION_SCRIPT_RUN           0x00001400
+#define URLACTION_SCRIPT_JAVA_USE      0x00001402
+#define URLACTION_SCRIPT_SAFE_ACTIVEX  0x00001405
+#define URLACTION_CROSS_DOMAIN_DATA    0x00001406
+#define URLACTION_SCRIPT_PASTE         0x00001407
+#define URLACTION_SCRIPT_CURR_MAX      0x00001407
+#define URLACTION_SCRIPT_MAX           0x000015ff
+#define URLACTION_HTML_MIN                0x00001600
+#define URLACTION_HTML_SUBMIT_FORMS       0x00001601
+#define URLACTION_HTML_SUBMIT_FORMS_FROM  0x00001602
+#define URLACTION_HTML_SUBMIT_FORMS_TO    0x00001603
+#define URLACTION_HTML_FONT_DOWNLOAD      0x00001604
+#define URLACTION_HTML_JAVA_RUN           0x00001605
+#define URLACTION_HTML_USERDATA_SAVE      0x00001606
+#define URLACTION_HTML_SUBFRAME_NAVIGATE  0x00001607
+#define URLACTION_HTML_META_REFRESH       0x00001608
+#define URLACTION_HTML_MIXED_CONTENT      0x00001609
+#define URLACTION_HTML_MAX                0x000017ff
+#define URLACTION_SHELL_MIN              0x00001800
+#define URLACTION_SHELL_INSTALL_DTITEMS  0x00001800
+#define URLACTION_SHELL_MOVE_OR_COPY     0x00001802
+#define URLACTION_SHELL_FILE_DOWNLOAD    0x00001803
+#define URLACTION_SHELL_VERB             0x00001804
+#define URLACTION_SHELL_WEBVIEW_VERB     0x00001805
+#define URLACTION_SHELL_CURR_MAX         0x00001805
+#define URLACTION_SHELL_MAX              0x000019ff
+#define URLACTION_NETWORK_MIN                  0x00001a00
+#define URLACTION_CREDENTIALS_USE              0x00001a00
+#define URLACTION_AUTHENTICATE_CLIENT          0x00001a01
+#define URLACTION_COOKIES                      0x00001a02
+#define URLACTION_COOKIES_SESSION              0x00001a03
+#define URLACTION_CLIENT_CERT_PROMPT           0x00001a04
+#define URLACTION_COOKIES_THIRD_PARTY          0x00001a05
+#define URLACTION_COOKIES_SESSION_THIRD_PARTY  0x00001a06
+#define URLACTION_COOKIES_ENABLED              0x00001a10
+#define URLACTION_NETWORK_CURR_MAX             0x00001a10
+#define URLACTION_NETWORK_MAX                  0x00001bff
+#define URLACTION_JAVA_MIN          0x00001c00
+#define URLACTION_JAVA_PERMISSIONS  0x00001c00
+#define URLPOLICY_JAVA_PROHIBIT     0x00000000
+#define URLPOLICY_JAVA_HIGH         0x00010000
+#define URLPOLICY_JAVA_MEDIUM       0x00020000
+#define URLPOLICY_JAVA_LOW          0x00030000
+#define URLPOLICY_JAVA_CUSTOM       0x00800000
+#define URLACTION_JAVA_CURR_MAX     0x00001c00
+#define URLACTION_JAVA_MAX          0x00001cff
+#define URLACTION_INFODELIVERY_MIN                        0x00001d00
+#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS         0x00001d00
+#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS        0x00001d01
+#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS       0x00001d02
+#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS    0x00001d03
+#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS   0x00001d04
+#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS  0x00001d05
+#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING         0x00001d06
+#define URLACTION_INFODELIVERY_CURR_MAX                   0x00001d06
+#define URLACTION_INFODELIVERY_MAX                        0x00001dff
+#define URLACTION_CHANNEL_SOFTDIST_MIN          0x00001e00
+#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS  0x00001e05
+#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT     0x00010000
+#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE     0x00020000
+#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL  0x00030000
+#define URLACTION_CHANNEL_SOFTDIST_MAX          0x00001eff
+#define URLPOLICY_ALLOW     0x00
+#define URLPOLICY_QUERY     0x01
+#define URLPOLICY_DISALLOW  0x03
+#define URLPOLICY_NOTIFY_ON_ALLOW     0x10
+#define URLPOLICY_NOTIFY_ON_DISALLOW  0x20
+#define URLPOLICY_LOG_ON_ALLOW     0x40
+#define URLPOLICY_LOG_ON_DISALLOW  0x80
+#define URLPOLICY_DONTCHECKDLGBOX     0x100
+#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK     0x00000000
+#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER    0x00010000
+#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT  0x00020000
+#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY      0x00030000
+#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK        0x00000000
+#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE  0x00010000
+#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY         0x00030000
+#define URLPOLICY_MASK_PERMISSIONS  0x0f
+#define GetUrlPolicyPermissions(dw)      (dw & URLPOLICY_MASK_PERMISSIONS)
+#define SetUrlPolicyPermissions(dw,dw2)  ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))
+/*****************************************************************************
+ * IInternetZoneManager interface
+ */
+#ifndef __IInternetZoneManager_INTERFACE_DEFINED__
+#define __IInternetZoneManager_INTERFACE_DEFINED__
+
+typedef IInternetZoneManager *LPURLZONEMANAGER;
+typedef enum tagURLZONE {
+    URLZONE_PREDEFINED_MIN = 0,
+    URLZONE_LOCAL_MACHINE = 0,
+    URLZONE_INTRANET = 1,
+    URLZONE_TRUSTED = 2,
+    URLZONE_INTERNET = 3,
+    URLZONE_UNTRUSTED = 4,
+    URLZONE_PREDEFINED_MAX = 999,
+    URLZONE_USER_MIN = 1000,
+    URLZONE_USER_MAX = 10000
+} URLZONE;
+typedef enum tagURLTEMPLATE {
+    URLTEMPLATE_CUSTOM = 0x0,
+    URLTEMPLATE_PREDEFINED_MIN = 0x10000,
+    URLTEMPLATE_LOW = 0x10000,
+    URLTEMPLATE_MEDLOW = 0x10500,
+    URLTEMPLATE_MEDIUM = 0x11000,
+    URLTEMPLATE_MEDHIGH = 0x11500,
+    URLTEMPLATE_HIGH = 0x12000,
+    URLTEMPLATE_PREDEFINED_MAX = 0x20000
+} URLTEMPLATE;
+typedef enum __WIDL_urlmon_generated_name_00000009 {
+    ZAFLAGS_CUSTOM_EDIT = 0x1,
+    ZAFLAGS_ADD_SITES = 0x2,
+    ZAFLAGS_REQUIRE_VERIFICATION = 0x4,
+    ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x8,
+    ZAFLAGS_INCLUDE_INTRANET_SITES = 0x10,
+    ZAFLAGS_NO_UI = 0x20,
+    ZAFLAGS_SUPPORTS_VERIFICATION = 0x40,
+    ZAFLAGS_UNC_AS_INTRANET = 0x80,
+    ZAFLAGS_DETECT_INTRANET = 0x100,
+    ZAFLAGS_USE_LOCKED_ZONES = 0x10000,
+    ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x20000,
+    ZAFLAGS_NO_CACHE = 0x40000
+} ZAFLAGS;
+enum {
+    MAX_ZONE_PATH = 260,
+    MAX_ZONE_DESCRIPTION = 200
+};
+
+typedef struct _ZONEATTRIBUTES {
+    ULONG cbSize;
+    WCHAR szDisplayName[260];
+    WCHAR szDescription[200];
+    WCHAR szIconPath[260];
+    DWORD dwTemplateMinLevel;
+    DWORD dwTemplateRecommended;
+    DWORD dwTemplateCurrentLevel;
+    DWORD dwFlags;
+} ZONEATTRIBUTES;
+typedef struct _ZONEATTRIBUTES *LPZONEATTRIBUTES;
+typedef enum _URLZONEREG {
+    URLZONEREG_DEFAULT = 0,
+    URLZONEREG_HKLM = 1,
+    URLZONEREG_HKCU = 2
+} URLZONEREG;
+DEFINE_GUID(IID_IInternetZoneManager, 0x79eac9ef, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetZoneManager : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetZoneAttributes(
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetZoneAttributes(
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetZoneCustomPolicy(
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        URLZONEREG ulrZoneReg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetZoneCustomPolicy(
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE *ppPolicy,
+        DWORD pcbPolicy,
+        URLZONEREG ulrZoneReg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetZoneActionPolicy(
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetZoneActionPolicy(
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PromptAction(
+        DWORD dwAction,
+        HWND hwndParent,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwPromptFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LogAction(
+        DWORD dwAction,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwLogFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateZoneEnumerator(
+        DWORD *pdwEnum,
+        DWORD *pdwCount,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetZoneAt(
+        DWORD dwEnum,
+        DWORD dwIndex,
+        DWORD *pdwZone) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DestroyZoneEnumerator(
+        DWORD dwEnum) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CopyTemplatePoliciesToZone(
+        DWORD dwTemplate,
+        DWORD dwZone,
+        DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetZoneManagerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetZoneManager* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetZoneManager* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetZoneManager* This);
+
+    /*** IInternetZoneManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
+        IInternetZoneManager* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
+        IInternetZoneManager* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
+        IInternetZoneManager* This,
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        URLZONEREG ulrZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
+        IInternetZoneManager* This,
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE *ppPolicy,
+        DWORD pcbPolicy,
+        URLZONEREG ulrZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
+        IInternetZoneManager* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
+        IInternetZoneManager* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *PromptAction)(
+        IInternetZoneManager* This,
+        DWORD dwAction,
+        HWND hwndParent,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwPromptFlags);
+
+    HRESULT (STDMETHODCALLTYPE *LogAction)(
+        IInternetZoneManager* This,
+        DWORD dwAction,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwLogFlags);
+
+    HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
+        IInternetZoneManager* This,
+        DWORD *pdwEnum,
+        DWORD *pdwCount,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
+        IInternetZoneManager* This,
+        DWORD dwEnum,
+        DWORD dwIndex,
+        DWORD *pdwZone);
+
+    HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
+        IInternetZoneManager* This,
+        DWORD dwEnum);
+
+    HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
+        IInternetZoneManager* This,
+        DWORD dwTemplate,
+        DWORD dwZone,
+        DWORD dwReserved);
+
+    END_INTERFACE
+} IInternetZoneManagerVtbl;
+interface IInternetZoneManager {
+    CONST_VTBL IInternetZoneManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetZoneManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetZoneManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetZoneManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetZoneManager methods ***/
+#define IInternetZoneManager_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManager_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManager_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManager_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManager_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManager_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManager_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
+#define IInternetZoneManager_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
+#define IInternetZoneManager_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
+#define IInternetZoneManager_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
+#define IInternetZoneManager_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
+#define IInternetZoneManager_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneAttributes_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwZone,
+    ZONEATTRIBUTES *pZoneAttributes);
+void __RPC_STUB IInternetZoneManager_GetZoneAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneAttributes_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwZone,
+    ZONEATTRIBUTES *pZoneAttributes);
+void __RPC_STUB IInternetZoneManager_SetZoneAttributes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneCustomPolicy_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwZone,
+    REFGUID guidKey,
+    BYTE **ppPolicy,
+    DWORD *pcbPolicy,
+    URLZONEREG ulrZoneReg);
+void __RPC_STUB IInternetZoneManager_GetZoneCustomPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneCustomPolicy_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwZone,
+    REFGUID guidKey,
+    BYTE *ppPolicy,
+    DWORD pcbPolicy,
+    URLZONEREG ulrZoneReg);
+void __RPC_STUB IInternetZoneManager_SetZoneCustomPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneActionPolicy_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwZone,
+    DWORD dwAction,
+    BYTE *pPolicy,
+    DWORD cbPolicy,
+    URLZONEREG urlZoneReg);
+void __RPC_STUB IInternetZoneManager_GetZoneActionPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneActionPolicy_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwZone,
+    DWORD dwAction,
+    BYTE *pPolicy,
+    DWORD cbPolicy,
+    URLZONEREG urlZoneReg);
+void __RPC_STUB IInternetZoneManager_SetZoneActionPolicy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_PromptAction_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwAction,
+    HWND hwndParent,
+    LPCWSTR pwszUrl,
+    LPCWSTR pwszText,
+    DWORD dwPromptFlags);
+void __RPC_STUB IInternetZoneManager_PromptAction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_LogAction_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwAction,
+    LPCWSTR pwszUrl,
+    LPCWSTR pwszText,
+    DWORD dwLogFlags);
+void __RPC_STUB IInternetZoneManager_LogAction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_CreateZoneEnumerator_Proxy(
+    IInternetZoneManager* This,
+    DWORD *pdwEnum,
+    DWORD *pdwCount,
+    DWORD dwFlags);
+void __RPC_STUB IInternetZoneManager_CreateZoneEnumerator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneAt_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwEnum,
+    DWORD dwIndex,
+    DWORD *pdwZone);
+void __RPC_STUB IInternetZoneManager_GetZoneAt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_DestroyZoneEnumerator_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwEnum);
+void __RPC_STUB IInternetZoneManager_DestroyZoneEnumerator_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy(
+    IInternetZoneManager* This,
+    DWORD dwTemplate,
+    DWORD dwZone,
+    DWORD dwReserved);
+void __RPC_STUB IInternetZoneManager_CopyTemplatePoliciesToZone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetZoneManager_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetZoneManagerEx interface
+ */
+#ifndef __IInternetZoneManagerEx_INTERFACE_DEFINED__
+#define __IInternetZoneManagerEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetZoneManagerEx, 0xa4c23339, 0x8e06, 0x431e, 0x9b,0xf4, 0x7e,0x71,0x1c,0x08,0x56,0x48);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetZoneManagerEx : public IInternetZoneManager
+{
+    virtual HRESULT STDMETHODCALLTYPE GetZoneActionPolicyEx(
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetZoneActionPolicyEx(
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg,
+        DWORD dwFlags) = 0;
+
+};
+#else
+typedef struct IInternetZoneManagerExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetZoneManagerEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetZoneManagerEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetZoneManagerEx* This);
+
+    /*** IInternetZoneManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        URLZONEREG ulrZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE *ppPolicy,
+        DWORD pcbPolicy,
+        URLZONEREG ulrZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *PromptAction)(
+        IInternetZoneManagerEx* This,
+        DWORD dwAction,
+        HWND hwndParent,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwPromptFlags);
+
+    HRESULT (STDMETHODCALLTYPE *LogAction)(
+        IInternetZoneManagerEx* This,
+        DWORD dwAction,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwLogFlags);
+
+    HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
+        IInternetZoneManagerEx* This,
+        DWORD *pdwEnum,
+        DWORD *pdwCount,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
+        IInternetZoneManagerEx* This,
+        DWORD dwEnum,
+        DWORD dwIndex,
+        DWORD *pdwZone);
+
+    HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
+        IInternetZoneManagerEx* This,
+        DWORD dwEnum);
+
+    HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
+        IInternetZoneManagerEx* This,
+        DWORD dwTemplate,
+        DWORD dwZone,
+        DWORD dwReserved);
+
+    /*** IInternetZoneManagerEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicyEx)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicyEx)(
+        IInternetZoneManagerEx* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg,
+        DWORD dwFlags);
+
+    END_INTERFACE
+} IInternetZoneManagerExVtbl;
+interface IInternetZoneManagerEx {
+    CONST_VTBL IInternetZoneManagerExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetZoneManagerEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetZoneManagerEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetZoneManagerEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetZoneManager methods ***/
+#define IInternetZoneManagerEx_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
+#define IInternetZoneManagerEx_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
+#define IInternetZoneManagerEx_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
+#define IInternetZoneManagerEx_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
+#define IInternetZoneManagerEx_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
+#define IInternetZoneManagerEx_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
+/*** IInternetZoneManagerEx methods ***/
+#define IInternetZoneManagerEx_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+#define IInternetZoneManagerEx_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx_GetZoneActionPolicyEx_Proxy(
+    IInternetZoneManagerEx* This,
+    DWORD dwZone,
+    DWORD dwAction,
+    BYTE *pPolicy,
+    DWORD cbPolicy,
+    URLZONEREG urlZoneReg,
+    DWORD dwFlags);
+void __RPC_STUB IInternetZoneManagerEx_GetZoneActionPolicyEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx_SetZoneActionPolicyEx_Proxy(
+    IInternetZoneManagerEx* This,
+    DWORD dwZone,
+    DWORD dwAction,
+    BYTE *pPolicy,
+    DWORD cbPolicy,
+    URLZONEREG urlZoneReg,
+    DWORD dwFlags);
+void __RPC_STUB IInternetZoneManagerEx_SetZoneActionPolicyEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetZoneManagerEx_INTERFACE_DEFINED__ */
+
+#define SECURITY_IE_STATE_GREEN 0
+#define SECURITY_IE_STATE_RED   1
+/*****************************************************************************
+ * IInternetZoneManagerEx2 interface
+ */
+#ifndef __IInternetZoneManagerEx2_INTERFACE_DEFINED__
+#define __IInternetZoneManagerEx2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetZoneManagerEx2, 0xedc17559, 0xdd5d, 0x4846, 0x8e,0xef, 0x8b,0xec,0xba,0x5a,0x4a,0xbf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetZoneManagerEx2 : public IInternetZoneManagerEx
+{
+    virtual HRESULT STDMETHODCALLTYPE GetZoneAttributesEx(
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetZoneSecurityState(
+        DWORD dwZoneIndex,
+        BOOL fRespectPolicy,
+        LPDWORD pdwState,
+        BOOL *pfPolicyEncountered) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIESecurityState(
+        BOOL fRespectPolicy,
+        LPDWORD pdwState,
+        BOOL *pfPolicyEncountered,
+        BOOL fNoCache) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FixInsecureSettings(
+        ) = 0;
+
+};
+#else
+typedef struct IInternetZoneManagerEx2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetZoneManagerEx2* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetZoneManagerEx2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetZoneManagerEx2* This);
+
+    /*** IInternetZoneManager methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE **ppPolicy,
+        DWORD *pcbPolicy,
+        URLZONEREG ulrZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        REFGUID guidKey,
+        BYTE *ppPolicy,
+        DWORD pcbPolicy,
+        URLZONEREG ulrZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg);
+
+    HRESULT (STDMETHODCALLTYPE *PromptAction)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwAction,
+        HWND hwndParent,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwPromptFlags);
+
+    HRESULT (STDMETHODCALLTYPE *LogAction)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwAction,
+        LPCWSTR pwszUrl,
+        LPCWSTR pwszText,
+        DWORD dwLogFlags);
+
+    HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
+        IInternetZoneManagerEx2* This,
+        DWORD *pdwEnum,
+        DWORD *pdwCount,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwEnum,
+        DWORD dwIndex,
+        DWORD *pdwZone);
+
+    HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwEnum);
+
+    HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwTemplate,
+        DWORD dwZone,
+        DWORD dwReserved);
+
+    /*** IInternetZoneManagerEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicyEx)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicyEx)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        DWORD dwAction,
+        BYTE *pPolicy,
+        DWORD cbPolicy,
+        URLZONEREG urlZoneReg,
+        DWORD dwFlags);
+
+    /*** IInternetZoneManagerEx2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetZoneAttributesEx)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZone,
+        ZONEATTRIBUTES *pZoneAttributes,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetZoneSecurityState)(
+        IInternetZoneManagerEx2* This,
+        DWORD dwZoneIndex,
+        BOOL fRespectPolicy,
+        LPDWORD pdwState,
+        BOOL *pfPolicyEncountered);
+
+    HRESULT (STDMETHODCALLTYPE *GetIESecurityState)(
+        IInternetZoneManagerEx2* This,
+        BOOL fRespectPolicy,
+        LPDWORD pdwState,
+        BOOL *pfPolicyEncountered,
+        BOOL fNoCache);
+
+    HRESULT (STDMETHODCALLTYPE *FixInsecureSettings)(
+        IInternetZoneManagerEx2* This);
+
+    END_INTERFACE
+} IInternetZoneManagerEx2Vtbl;
+interface IInternetZoneManagerEx2 {
+    CONST_VTBL IInternetZoneManagerEx2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetZoneManagerEx2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetZoneManagerEx2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetZoneManagerEx2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetZoneManager methods ***/
+#define IInternetZoneManagerEx2_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx2_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx2_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx2_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx2_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx2_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx2_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
+#define IInternetZoneManagerEx2_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
+#define IInternetZoneManagerEx2_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
+#define IInternetZoneManagerEx2_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
+#define IInternetZoneManagerEx2_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
+#define IInternetZoneManagerEx2_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
+/*** IInternetZoneManagerEx methods ***/
+#define IInternetZoneManagerEx2_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+#define IInternetZoneManagerEx2_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+/*** IInternetZoneManagerEx2 methods ***/
+#define IInternetZoneManagerEx2_GetZoneAttributesEx(This,dwZone,pZoneAttributes,dwFlags) (This)->lpVtbl->GetZoneAttributesEx(This,dwZone,pZoneAttributes,dwFlags)
+#define IInternetZoneManagerEx2_GetZoneSecurityState(This,dwZoneIndex,fRespectPolicy,pdwState,pfPolicyEncountered) (This)->lpVtbl->GetZoneSecurityState(This,dwZoneIndex,fRespectPolicy,pdwState,pfPolicyEncountered)
+#define IInternetZoneManagerEx2_GetIESecurityState(This,fRespectPolicy,pdwState,pfPolicyEncountered,fNoCache) (This)->lpVtbl->GetIESecurityState(This,fRespectPolicy,pdwState,pfPolicyEncountered,fNoCache)
+#define IInternetZoneManagerEx2_FixInsecureSettings(This) (This)->lpVtbl->FixInsecureSettings(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetZoneAttributesEx_Proxy(
+    IInternetZoneManagerEx2* This,
+    DWORD dwZone,
+    ZONEATTRIBUTES *pZoneAttributes,
+    DWORD dwFlags);
+void __RPC_STUB IInternetZoneManagerEx2_GetZoneAttributesEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetZoneSecurityState_Proxy(
+    IInternetZoneManagerEx2* This,
+    DWORD dwZoneIndex,
+    BOOL fRespectPolicy,
+    LPDWORD pdwState,
+    BOOL *pfPolicyEncountered);
+void __RPC_STUB IInternetZoneManagerEx2_GetZoneSecurityState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetIESecurityState_Proxy(
+    IInternetZoneManagerEx2* This,
+    BOOL fRespectPolicy,
+    LPDWORD pdwState,
+    BOOL *pfPolicyEncountered,
+    BOOL fNoCache);
+void __RPC_STUB IInternetZoneManagerEx2_GetIESecurityState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_FixInsecureSettings_Proxy(
+    IInternetZoneManagerEx2* This);
+void __RPC_STUB IInternetZoneManagerEx2_FixInsecureSettings_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetZoneManagerEx2_INTERFACE_DEFINED__ */
+
+typedef struct _tagSOFTDISTINFO {
+    ULONG cbSize;
+    DWORD dwFlags;
+    DWORD dwAdState;
+    LPWSTR szTitle;
+    LPWSTR szAbstract;
+    LPWSTR szHREF;
+    DWORD dwInstalledVersionMS;
+    DWORD dwInstalledVersionLS;
+    DWORD dwUpdateVersionMS;
+    DWORD dwUpdateVersionLS;
+    DWORD dwAdvertisedVersionMS;
+    DWORD dwAdvertisedVersionLS;
+    DWORD dwReserved;
+} SOFTDISTINFO;
+typedef struct _tagSOFTDISTINFO *LPSOFTDISTINFO;
+typedef struct _tagCODEBASEHOLD {
+    DWORD cbSize;
+    LPWSTR szDistUnit;
+    LPWSTR szCodeBase;
+    DWORD dwVersionMS;
+    DWORD dwVersionLS;
+    DWORD dwStyle;
+} CODEBASEHOLD;
+typedef struct _tagCODEBASEHOLD *LPCODEBASEHOLD;
+/*****************************************************************************
+ * ISoftDistExt interface
+ */
+#ifndef __ISoftDistExt_INTERFACE_DEFINED__
+#define __ISoftDistExt_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISoftDistExt, 0xb15b8dc1, 0xc7e1, 0x11d0, 0x86,0x80, 0x00,0xaa,0x00,0xbd,0xcb,0x71);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISoftDistExt : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ProcessSoftDist(
+        LPCWSTR szCDFURL,
+        IXMLElement *pSoftDistElement,
+        LPSOFTDISTINFO lpsdi) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFirstCodeBase(
+        LPWSTR *szCodeBase,
+        LPDWORD dwMaxSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNextCodeBase(
+        LPWSTR *szCodeBase,
+        LPDWORD dwMaxSize) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AsyncInstallDistributionUnit(
+        IBindCtx *pbc,
+        LPVOID lpReserved,
+        DWORD flags,
+        LPCODEBASEHOLD lpcbh) = 0;
+
+};
+#else
+typedef struct ISoftDistExtVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISoftDistExt* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISoftDistExt* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISoftDistExt* This);
+
+    /*** ISoftDistExt methods ***/
+    HRESULT (STDMETHODCALLTYPE *ProcessSoftDist)(
+        ISoftDistExt* This,
+        LPCWSTR szCDFURL,
+        IXMLElement *pSoftDistElement,
+        LPSOFTDISTINFO lpsdi);
+
+    HRESULT (STDMETHODCALLTYPE *GetFirstCodeBase)(
+        ISoftDistExt* This,
+        LPWSTR *szCodeBase,
+        LPDWORD dwMaxSize);
+
+    HRESULT (STDMETHODCALLTYPE *GetNextCodeBase)(
+        ISoftDistExt* This,
+        LPWSTR *szCodeBase,
+        LPDWORD dwMaxSize);
+
+    HRESULT (STDMETHODCALLTYPE *AsyncInstallDistributionUnit)(
+        ISoftDistExt* This,
+        IBindCtx *pbc,
+        LPVOID lpReserved,
+        DWORD flags,
+        LPCODEBASEHOLD lpcbh);
+
+    END_INTERFACE
+} ISoftDistExtVtbl;
+interface ISoftDistExt {
+    CONST_VTBL ISoftDistExtVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISoftDistExt_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISoftDistExt_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISoftDistExt_Release(This) (This)->lpVtbl->Release(This)
+/*** ISoftDistExt methods ***/
+#define ISoftDistExt_ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi) (This)->lpVtbl->ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi)
+#define ISoftDistExt_GetFirstCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetFirstCodeBase(This,szCodeBase,dwMaxSize)
+#define ISoftDistExt_GetNextCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetNextCodeBase(This,szCodeBase,dwMaxSize)
+#define ISoftDistExt_AsyncInstallDistributionUnit(This,pbc,lpReserved,flags,lpcbh) (This)->lpVtbl->AsyncInstallDistributionUnit(This,pbc,lpReserved,flags,lpcbh)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISoftDistExt_ProcessSoftDist_Proxy(
+    ISoftDistExt* This,
+    LPCWSTR szCDFURL,
+    IXMLElement *pSoftDistElement,
+    LPSOFTDISTINFO lpsdi);
+void __RPC_STUB ISoftDistExt_ProcessSoftDist_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISoftDistExt_GetFirstCodeBase_Proxy(
+    ISoftDistExt* This,
+    LPWSTR *szCodeBase,
+    LPDWORD dwMaxSize);
+void __RPC_STUB ISoftDistExt_GetFirstCodeBase_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISoftDistExt_GetNextCodeBase_Proxy(
+    ISoftDistExt* This,
+    LPWSTR *szCodeBase,
+    LPDWORD dwMaxSize);
+void __RPC_STUB ISoftDistExt_GetNextCodeBase_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISoftDistExt_AsyncInstallDistributionUnit_Proxy(
+    ISoftDistExt* This,
+    IBindCtx *pbc,
+    LPVOID lpReserved,
+    DWORD flags,
+    LPCODEBASEHOLD lpcbh);
+void __RPC_STUB ISoftDistExt_AsyncInstallDistributionUnit_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ISoftDistExt_INTERFACE_DEFINED__ */
+
+typedef enum _tagINTERNETFEATURELIST {
+    FEATURE_OBJECT_CACHING = 0,
+    FEATURE_ZONE_ELEVATION = 1,
+    FEATURE_MIME_HANDLING = 2,
+    FEATURE_MIME_SNIFFING = 3,
+    FEATURE_WINDOW_RESTRICTIONS = 4,
+    FEATURE_WEBOC_POPUPMANAGEMENT = 5,
+    FEATURE_BEHAVIORS = 6,
+    FEATURE_DISABLE_MK_PROTOCOL = 7,
+    FEATURE_LOCALMACHINE_LOCKDOWN = 8,
+    FEATURE_SECURITYBAND = 9,
+    FEATURE_RESTRICT_ACTIVEXINSTALL = 10,
+    FEATURE_VALIDATE_NAVIGATE_URL = 11,
+    FEATURE_RESTRICT_FILEDOWNLOAD = 12,
+    FEATURE_ADDON_MANAGEMENT = 13,
+    FEATURE_PROTOCOL_LOCKDOWN = 14,
+    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15,
+    FEATURE_SAFE_BINDTOOBJECT = 16,
+    FEATURE_UNC_SAVEDFILECHECK = 17,
+    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18,
+    FEATURE_TABBED_BROWSING = 19,
+    FEATURE_SSLUX = 20,
+    FEATURE_DISABLE_NAVIGATION_SOUNDS = 21,
+    FEATURE_DISABLE_LEGACY_COMPRESSION = 22,
+    FEATURE_FORCE_ADDR_AND_STATUS = 23,
+    FEATURE_XMLHTTP = 24,
+    FEATURE_DISABLE_TELNET_PROTOCOL = 25,
+    FEATURE_FEEDS = 26,
+    FEATURE_BLOCK_INPUT_PROMPTS = 27,
+    FEATURE_DOMSTORAGE = 28,
+    FEATURE_XDOMAINREQUEST = 29,
+    FEATURE_DATAURI = 30,
+    FEATURE_AJAX_CONNECTIONSERVICES = 31,
+    FEATURE_ENTRY_COUNT = 32
+} INTERNETFEATURELIST;
+typedef struct _tagPROTOCOLFILTERDATA {
+    DWORD cbSize;
+    IInternetProtocolSink *pProtocolSink;
+    IInternetProtocol *pProtocol;
+    IUnknown *pUnk;
+    DWORD dwFilterFlags;
+} PROTOCOLFILTERDATA;
+/*****************************************************************************
+ * IUri interface
+ */
+#ifndef __IUri_INTERFACE_DEFINED__
+#define __IUri_INTERFACE_DEFINED__
+
+typedef enum __WIDL_urlmon_generated_name_0000000A {
+    Uri_PROPERTY_ABSOLUTE_URI = 0,
+    Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI,
+    Uri_PROPERTY_AUTHORITY = 1,
+    Uri_PROPERTY_DISPLAY_URI = 2,
+    Uri_PROPERTY_DOMAIN = 3,
+    Uri_PROPERTY_EXTENSION = 4,
+    Uri_PROPERTY_FRAGMENT = 5,
+    Uri_PROPERTY_HOST = 6,
+    Uri_PROPERTY_PASSWORD = 7,
+    Uri_PROPERTY_PATH = 8,
+    Uri_PROPERTY_PATH_AND_QUERY = 9,
+    Uri_PROPERTY_QUERY = 10,
+    Uri_PROPERTY_RAW_URI = 11,
+    Uri_PROPERTY_SCHEME_NAME = 12,
+    Uri_PROPERTY_USER_INFO = 13,
+    Uri_PROPERTY_USER_NAME = 14,
+    Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME,
+    Uri_PROPERTY_HOST_TYPE = 15,
+    Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE,
+    Uri_PROPERTY_PORT = 16,
+    Uri_PROPERTY_SCHEME = 17,
+    Uri_PROPERTY_ZONE = 18,
+    Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE
+} Uri_PROPERTY;
+DEFINE_GUID(IID_IUri, 0xa39ee748, 0x6a27, 0x4817, 0xa6,0xf2, 0x13,0x91,0x4b,0xef,0x58,0x90);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUri : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyBSTR(
+        Uri_PROPERTY uriProp,
+        BSTR *pbstrProperty,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyLength(
+        Uri_PROPERTY uriProp,
+        DWORD *pcchProperty,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPropertyDWORD(
+        Uri_PROPERTY uriProp,
+        DWORD *pdwProperty,
+        DWORD dwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HasProperty(
+        Uri_PROPERTY uriProp,
+        BOOL *pfHasProperty) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAbsoluteUri(
+        BSTR *pbstrAbsoluteUri) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAuthority(
+        BSTR *pbstrAuthority) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayUri(
+        BSTR *pbstrDisplayString) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDomain(
+        BSTR *pbstrDomain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetExtension(
+        BSTR *pbstrExtension) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFragment(
+        BSTR *pbstrFragment) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHost(
+        BSTR *pbstrHost) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPassword(
+        BSTR *pbstrPassword) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPath(
+        BSTR *pbstrPath) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPathAndQuery(
+        BSTR *pbstrPathAndQuery) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetQuery(
+        BSTR *pbstrQuery) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRawUri(
+        BSTR *pbstrRawUri) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSchemeName(
+        BSTR *pbstrSchemeName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserInfo(
+        BSTR *pbstrUserInfo) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetUserName(
+        BSTR *pbstrUserName) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHostType(
+        DWORD *pdwHostType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPort(
+        DWORD *pdwPort) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetScheme(
+        DWORD *pdwScheme) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetZone(
+        DWORD *pdwZone) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetProperties(
+        LPDWORD pdwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsEqual(
+        IUri *pUri,
+        BOOL *pfEqual) = 0;
+
+};
+#else
+typedef struct IUriVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUri* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUri* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUri* This);
+
+    /*** IUri methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPropertyBSTR)(
+        IUri* This,
+        Uri_PROPERTY uriProp,
+        BSTR *pbstrProperty,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyLength)(
+        IUri* This,
+        Uri_PROPERTY uriProp,
+        DWORD *pcchProperty,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPropertyDWORD)(
+        IUri* This,
+        Uri_PROPERTY uriProp,
+        DWORD *pdwProperty,
+        DWORD dwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *HasProperty)(
+        IUri* This,
+        Uri_PROPERTY uriProp,
+        BOOL *pfHasProperty);
+
+    HRESULT (STDMETHODCALLTYPE *GetAbsoluteUri)(
+        IUri* This,
+        BSTR *pbstrAbsoluteUri);
+
+    HRESULT (STDMETHODCALLTYPE *GetAuthority)(
+        IUri* This,
+        BSTR *pbstrAuthority);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayUri)(
+        IUri* This,
+        BSTR *pbstrDisplayString);
+
+    HRESULT (STDMETHODCALLTYPE *GetDomain)(
+        IUri* This,
+        BSTR *pbstrDomain);
+
+    HRESULT (STDMETHODCALLTYPE *GetExtension)(
+        IUri* This,
+        BSTR *pbstrExtension);
+
+    HRESULT (STDMETHODCALLTYPE *GetFragment)(
+        IUri* This,
+        BSTR *pbstrFragment);
+
+    HRESULT (STDMETHODCALLTYPE *GetHost)(
+        IUri* This,
+        BSTR *pbstrHost);
+
+    HRESULT (STDMETHODCALLTYPE *GetPassword)(
+        IUri* This,
+        BSTR *pbstrPassword);
+
+    HRESULT (STDMETHODCALLTYPE *GetPath)(
+        IUri* This,
+        BSTR *pbstrPath);
+
+    HRESULT (STDMETHODCALLTYPE *GetPathAndQuery)(
+        IUri* This,
+        BSTR *pbstrPathAndQuery);
+
+    HRESULT (STDMETHODCALLTYPE *GetQuery)(
+        IUri* This,
+        BSTR *pbstrQuery);
+
+    HRESULT (STDMETHODCALLTYPE *GetRawUri)(
+        IUri* This,
+        BSTR *pbstrRawUri);
+
+    HRESULT (STDMETHODCALLTYPE *GetSchemeName)(
+        IUri* This,
+        BSTR *pbstrSchemeName);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserInfo)(
+        IUri* This,
+        BSTR *pbstrUserInfo);
+
+    HRESULT (STDMETHODCALLTYPE *GetUserName)(
+        IUri* This,
+        BSTR *pbstrUserName);
+
+    HRESULT (STDMETHODCALLTYPE *GetHostType)(
+        IUri* This,
+        DWORD *pdwHostType);
+
+    HRESULT (STDMETHODCALLTYPE *GetPort)(
+        IUri* This,
+        DWORD *pdwPort);
+
+    HRESULT (STDMETHODCALLTYPE *GetScheme)(
+        IUri* This,
+        DWORD *pdwScheme);
+
+    HRESULT (STDMETHODCALLTYPE *GetZone)(
+        IUri* This,
+        DWORD *pdwZone);
+
+    HRESULT (STDMETHODCALLTYPE *GetProperties)(
+        IUri* This,
+        LPDWORD pdwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *IsEqual)(
+        IUri* This,
+        IUri *pUri,
+        BOOL *pfEqual);
+
+    END_INTERFACE
+} IUriVtbl;
+interface IUri {
+    CONST_VTBL IUriVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUri_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUri_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUri_Release(This) (This)->lpVtbl->Release(This)
+/*** IUri methods ***/
+#define IUri_GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags) (This)->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags)
+#define IUri_GetPropertyLength(This,uriProp,pcchProperty,dwFlags) (This)->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags)
+#define IUri_GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags) (This)->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags)
+#define IUri_HasProperty(This,uriProp,pfHasProperty) (This)->lpVtbl->HasProperty(This,uriProp,pfHasProperty)
+#define IUri_GetAbsoluteUri(This,pbstrAbsoluteUri) (This)->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri)
+#define IUri_GetAuthority(This,pbstrAuthority) (This)->lpVtbl->GetAuthority(This,pbstrAuthority)
+#define IUri_GetDisplayUri(This,pbstrDisplayString) (This)->lpVtbl->GetDisplayUri(This,pbstrDisplayString)
+#define IUri_GetDomain(This,pbstrDomain) (This)->lpVtbl->GetDomain(This,pbstrDomain)
+#define IUri_GetExtension(This,pbstrExtension) (This)->lpVtbl->GetExtension(This,pbstrExtension)
+#define IUri_GetFragment(This,pbstrFragment) (This)->lpVtbl->GetFragment(This,pbstrFragment)
+#define IUri_GetHost(This,pbstrHost) (This)->lpVtbl->GetHost(This,pbstrHost)
+#define IUri_GetPassword(This,pbstrPassword) (This)->lpVtbl->GetPassword(This,pbstrPassword)
+#define IUri_GetPath(This,pbstrPath) (This)->lpVtbl->GetPath(This,pbstrPath)
+#define IUri_GetPathAndQuery(This,pbstrPathAndQuery) (This)->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery)
+#define IUri_GetQuery(This,pbstrQuery) (This)->lpVtbl->GetQuery(This,pbstrQuery)
+#define IUri_GetRawUri(This,pbstrRawUri) (This)->lpVtbl->GetRawUri(This,pbstrRawUri)
+#define IUri_GetSchemeName(This,pbstrSchemeName) (This)->lpVtbl->GetSchemeName(This,pbstrSchemeName)
+#define IUri_GetUserInfo(This,pbstrUserInfo) (This)->lpVtbl->GetUserInfo(This,pbstrUserInfo)
+#define IUri_GetUserName(This,pbstrUserName) (This)->lpVtbl->GetUserName(This,pbstrUserName)
+#define IUri_GetHostType(This,pdwHostType) (This)->lpVtbl->GetHostType(This,pdwHostType)
+#define IUri_GetPort(This,pdwPort) (This)->lpVtbl->GetPort(This,pdwPort)
+#define IUri_GetScheme(This,pdwScheme) (This)->lpVtbl->GetScheme(This,pdwScheme)
+#define IUri_GetZone(This,pdwZone) (This)->lpVtbl->GetZone(This,pdwZone)
+#define IUri_GetProperties(This,pdwFlags) (This)->lpVtbl->GetProperties(This,pdwFlags)
+#define IUri_IsEqual(This,pUri,pfEqual) (This)->lpVtbl->IsEqual(This,pUri,pfEqual)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUri_GetPropertyBSTR_Proxy(
+    IUri* This,
+    Uri_PROPERTY uriProp,
+    BSTR *pbstrProperty,
+    DWORD dwFlags);
+void __RPC_STUB IUri_GetPropertyBSTR_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPropertyLength_Proxy(
+    IUri* This,
+    Uri_PROPERTY uriProp,
+    DWORD *pcchProperty,
+    DWORD dwFlags);
+void __RPC_STUB IUri_GetPropertyLength_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPropertyDWORD_Proxy(
+    IUri* This,
+    Uri_PROPERTY uriProp,
+    DWORD *pdwProperty,
+    DWORD dwFlags);
+void __RPC_STUB IUri_GetPropertyDWORD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_HasProperty_Proxy(
+    IUri* This,
+    Uri_PROPERTY uriProp,
+    BOOL *pfHasProperty);
+void __RPC_STUB IUri_HasProperty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetAbsoluteUri_Proxy(
+    IUri* This,
+    BSTR *pbstrAbsoluteUri);
+void __RPC_STUB IUri_GetAbsoluteUri_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetAuthority_Proxy(
+    IUri* This,
+    BSTR *pbstrAuthority);
+void __RPC_STUB IUri_GetAuthority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetDisplayUri_Proxy(
+    IUri* This,
+    BSTR *pbstrDisplayString);
+void __RPC_STUB IUri_GetDisplayUri_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetDomain_Proxy(
+    IUri* This,
+    BSTR *pbstrDomain);
+void __RPC_STUB IUri_GetDomain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetExtension_Proxy(
+    IUri* This,
+    BSTR *pbstrExtension);
+void __RPC_STUB IUri_GetExtension_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetFragment_Proxy(
+    IUri* This,
+    BSTR *pbstrFragment);
+void __RPC_STUB IUri_GetFragment_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetHost_Proxy(
+    IUri* This,
+    BSTR *pbstrHost);
+void __RPC_STUB IUri_GetHost_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPassword_Proxy(
+    IUri* This,
+    BSTR *pbstrPassword);
+void __RPC_STUB IUri_GetPassword_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPath_Proxy(
+    IUri* This,
+    BSTR *pbstrPath);
+void __RPC_STUB IUri_GetPath_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPathAndQuery_Proxy(
+    IUri* This,
+    BSTR *pbstrPathAndQuery);
+void __RPC_STUB IUri_GetPathAndQuery_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetQuery_Proxy(
+    IUri* This,
+    BSTR *pbstrQuery);
+void __RPC_STUB IUri_GetQuery_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetRawUri_Proxy(
+    IUri* This,
+    BSTR *pbstrRawUri);
+void __RPC_STUB IUri_GetRawUri_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetSchemeName_Proxy(
+    IUri* This,
+    BSTR *pbstrSchemeName);
+void __RPC_STUB IUri_GetSchemeName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetUserInfo_Proxy(
+    IUri* This,
+    BSTR *pbstrUserInfo);
+void __RPC_STUB IUri_GetUserInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetUserName_Proxy(
+    IUri* This,
+    BSTR *pbstrUserName);
+void __RPC_STUB IUri_GetUserName_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetHostType_Proxy(
+    IUri* This,
+    DWORD *pdwHostType);
+void __RPC_STUB IUri_GetHostType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPort_Proxy(
+    IUri* This,
+    DWORD *pdwPort);
+void __RPC_STUB IUri_GetPort_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetScheme_Proxy(
+    IUri* This,
+    DWORD *pdwScheme);
+void __RPC_STUB IUri_GetScheme_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetZone_Proxy(
+    IUri* This,
+    DWORD *pdwZone);
+void __RPC_STUB IUri_GetZone_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetProperties_Proxy(
+    IUri* This,
+    LPDWORD pdwFlags);
+void __RPC_STUB IUri_GetProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_IsEqual_Proxy(
+    IUri* This,
+    IUri *pUri,
+    BOOL *pfEqual);
+void __RPC_STUB IUri_IsEqual_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IUri_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUriContainer interface
+ */
+#ifndef __IUriContainer_INTERFACE_DEFINED__
+#define __IUriContainer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUriContainer, 0xa158a630, 0xed6f, 0x45fb, 0xb9,0x87, 0xf6,0x86,0x76,0xf5,0x77,0x52);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUriContainer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetIUri(
+        IUri **ppIUri) = 0;
+
+};
+#else
+typedef struct IUriContainerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IUriContainer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IUriContainer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IUriContainer* This);
+
+    /*** IUriContainer methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIUri)(
+        IUriContainer* This,
+        IUri **ppIUri);
+
+    END_INTERFACE
+} IUriContainerVtbl;
+interface IUriContainer {
+    CONST_VTBL IUriContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUriContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUriContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUriContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IUriContainer methods ***/
+#define IUriContainer_GetIUri(This,ppIUri) (This)->lpVtbl->GetIUri(This,ppIUri)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUriContainer_GetIUri_Proxy(
+    IUriContainer* This,
+    IUri **ppIUri);
+void __RPC_STUB IUriContainer_GetIUri_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IUriContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolEx interface
+ */
+#ifndef __IInternetProtocolEx_INTERFACE_DEFINED__
+#define __IInternetProtocolEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetProtocolEx, 0xc7a98e66, 0x1010, 0x492c, 0xa1,0xc8, 0xc8,0x09,0xe1,0xf7,0x59,0x05);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolEx : public IInternetProtocol
+{
+    virtual HRESULT STDMETHODCALLTYPE StartEx(
+        IUri *pUri,
+        IInternetProtocolSink *pOIProtSink,
+        IInternetBindInfo *pOIBindInfo,
+        DWORD grfPI,
+        HANDLE *dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetProtocolExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IInternetProtocolEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IInternetProtocolEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IInternetProtocolEx* This);
+
+    /*** IInternetProtocolRoot methods ***/
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IInternetProtocolEx* This,
+        LPCWSTR szUrl,
+        IInternetProtocolSink *pOIProtSink,
+        IInternetBindInfo *pOIBindInfo,
+        DWORD grfPI,
+        HANDLE_PTR dwReserved);
+
+    HRESULT (STDMETHODCALLTYPE *Continue)(
+        IInternetProtocolEx* This,
+        PROTOCOLDATA *pProtocolData);
+
+    HRESULT (STDMETHODCALLTYPE *Abort)(
+        IInternetProtocolEx* This,
+        HRESULT hrReason,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *Terminate)(
+        IInternetProtocolEx* This,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *Suspend)(
+        IInternetProtocolEx* This);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IInternetProtocolEx* This);
+
+    /*** IInternetProtocol methods ***/
+    HRESULT (STDMETHODCALLTYPE *Read)(
+        IInternetProtocolEx* This,
+        void *pv,
+        ULONG cb,
+        ULONG *pcbRead);
+
+    HRESULT (STDMETHODCALLTYPE *Seek)(
+        IInternetProtocolEx* This,
+        LARGE_INTEGER dlibMove,
+        DWORD dwOrigin,
+        ULARGE_INTEGER *plibNewPosition);
+
+    HRESULT (STDMETHODCALLTYPE *LockRequest)(
+        IInternetProtocolEx* This,
+        DWORD dwOptions);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRequest)(
+        IInternetProtocolEx* This);
+
+    /*** IInternetProtocolEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *StartEx)(
+        IInternetProtocolEx* This,
+        IUri *pUri,
+        IInternetProtocolSink *pOIProtSink,
+        IInternetBindInfo *pOIBindInfo,
+        DWORD grfPI,
+        HANDLE *dwReserved);
+
+    END_INTERFACE
+} IInternetProtocolExVtbl;
+interface IInternetProtocolEx {
+    CONST_VTBL IInternetProtocolExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolRoot methods ***/
+#define IInternetProtocolEx_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#define IInternetProtocolEx_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
+#define IInternetProtocolEx_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
+#define IInternetProtocolEx_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
+#define IInternetProtocolEx_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IInternetProtocolEx_Resume(This) (This)->lpVtbl->Resume(This)
+/*** IInternetProtocol methods ***/
+#define IInternetProtocolEx_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IInternetProtocolEx_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IInternetProtocolEx_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)
+#define IInternetProtocolEx_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)
+/*** IInternetProtocolEx methods ***/
+#define IInternetProtocolEx_StartEx(This,pUri,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->StartEx(This,pUri,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolEx_StartEx_Proxy(
+    IInternetProtocolEx* This,
+    IUri *pUri,
+    IInternetProtocolSink *pOIProtSink,
+    IInternetBindInfo *pOIBindInfo,
+    DWORD grfPI,
+    HANDLE *dwReserved);
+void __RPC_STUB IInternetProtocolEx_StartEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IInternetProtocolEx_INTERFACE_DEFINED__ */
+
+#define CONFIRMSAFETYACTION_LOADOBJECT  0x00000001
+struct CONFIRMSAFETY {
+    CLSID clsid;
+    IUnknown *pUnk;
+    DWORD dwFlags;
+};
+
+EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;
+DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);
+DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);
+DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
+DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
+DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
+DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);
+DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);
+DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+#define URLMON_OPTION_USERAGENT          0x10000001
+#define URLMON_OPTION_USERAGENT_REFRESH  0x10000002
+#define URLMON_OPTION_URL_ENCODING       0x10000004
+#define MK_S_ASYNCHRONOUS                _HRESULT_TYPEDEF_(0x000401E8)
+#ifndef S_ASYNCHRONOUS
+#define S_ASYNCHRONOUS                   MK_S_ASYNCHRONOUS
+#endif
+#define INET_E_ERROR_FIRST               _HRESULT_TYPEDEF_(0x800C0002)
+#define INET_E_INVALID_URL               _HRESULT_TYPEDEF_(0x800C0002)
+#define INET_E_NO_SESSION                _HRESULT_TYPEDEF_(0x800C0003)
+#define INET_E_CANNOT_CONNECT            _HRESULT_TYPEDEF_(0x800C0004)
+#define INET_E_RESOURCE_NOT_FOUND        _HRESULT_TYPEDEF_(0x800C0005)
+#define INET_E_OBJECT_NOT_FOUND          _HRESULT_TYPEDEF_(0x800C0006)
+#define INET_E_DATA_NOT_AVAILABLE        _HRESULT_TYPEDEF_(0x800C0007)
+#define INET_E_DOWNLOAD_FAILURE          _HRESULT_TYPEDEF_(0x800C0008)
+#define INET_E_AUTHENTICATION_REQUIRED   _HRESULT_TYPEDEF_(0x800C0009)
+#define INET_E_NO_VALID_MEDIA            _HRESULT_TYPEDEF_(0x800C000A)
+#define INET_E_CONNECTION_TIMEOUT        _HRESULT_TYPEDEF_(0x800C000B)
+#define INET_E_INVALID_REQUEST           _HRESULT_TYPEDEF_(0x800C000C)
+#define INET_E_UNKNOWN_PROTOCOL          _HRESULT_TYPEDEF_(0x800C000D)
+#define INET_E_SECURITY_PROBLEM          _HRESULT_TYPEDEF_(0x800C000E)
+#define INET_E_CANNOT_LOAD_DATA          _HRESULT_TYPEDEF_(0x800C000F)
+#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)
+#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)
+#define INET_E_QUERYOPTION_UNKNOWN       _HRESULT_TYPEDEF_(0x800C0013)
+#define INET_E_REDIRECT_FAILED           _HRESULT_TYPEDEF_(0x800C0014)
+#define INET_E_REDIRECT_TO_DIR           _HRESULT_TYPEDEF_(0x800C0015)
+#define INET_E_CANNOT_LOCK_REQUEST       _HRESULT_TYPEDEF_(0x800C0016)
+#define INET_E_ERROR_LAST                INET_E_REDIRECT_TO_DIR
+#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLHANDLER
+HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);
+HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);
+HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);
+HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);
+HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);
+HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);
+HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);
+HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);
+HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);
+HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);
+HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
+HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);
+HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);
+HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
+HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);
+HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);
+HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);
+HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);
+HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);
+HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);
+HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);
+HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);
+HRESULT WINAPI HlinkGoBack(IUnknown*);
+HRESULT WINAPI HlinkGoForward(IUnknown*);
+HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);
+HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);
+HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);
+HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);
+HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);
+HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);
+HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);
+HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);
+HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);
+HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);
+void WINAPI ReleaseBindInfo(BINDINFO*);
+HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);
+HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);
+HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
+#define OInetCombineUrl CoInternetCombineUrl
+#define OInetCompareUrl CoInternetCompareUrl
+#define OInetGetSession CoInternetGetSession
+BOOL WINAPI IsLoggingEnabledA(LPCSTR);
+BOOL WINAPI IsLoggingEnabledW(LPCWSTR);
+#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)
+#define MKSYS_URLMONIKER 6
+#define URL_MK_LEGACY            0
+#define URL_MK_UNIFORM           1
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER STGMEDIUM_UserSize     (ULONG *, ULONG, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserMarshal  (ULONG *, unsigned char *, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
+void            __RPC_USER STGMEDIUM_UserFree     (ULONG *, STGMEDIUM *);
+ULONG           __RPC_USER CLIPFORMAT_UserSize     (ULONG *, ULONG, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserMarshal  (ULONG *, unsigned char *, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
+void            __RPC_USER CLIPFORMAT_UserFree     (ULONG *, CLIPFORMAT *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_URLMON_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl
new file mode 100644
index 0000000..c1f7b5a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl
@@ -0,0 +1,2172 @@
+/*
+ * Copyright (C) 2000 Ulrich Czekalla
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "servprov.idl";
+import "msxml.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetUserName")
+cpp_quote("#undef SetPort")
+cpp_quote("#endif")
+
+interface IInternetProtocolSink;
+interface IUri;
+
+/*****************************************************************************
+ * IInternet interface
+ */
+[
+    object,
+    uuid(79eac9e0-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique),
+    local
+]
+interface IInternet : IUnknown
+{
+    typedef [unique] IInternet *LPIINTERNET;
+}
+
+/*****************************************************************************
+ * IBinding interface
+ */
+[
+    object,
+    uuid(79eac9c0-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IBinding : IUnknown
+{
+    typedef [unique] IBinding *LPBINDING;
+
+    HRESULT Abort();
+    HRESULT Suspend();
+    HRESULT Resume();
+
+    HRESULT SetPriority(
+        [in] LONG nPriority);
+
+    HRESULT GetPriority(
+        [out] LONG * pnPriority);
+
+    [local]
+    HRESULT GetBindResult(
+        [out] CLSID *pclsidProtocol,
+        [out] DWORD *pdwResult,
+        [out] LPOLESTR *pszResult,
+        [in, out] DWORD *pdwReserved);
+
+    [call_as(GetBindResult)]
+    HRESULT RemoteGetBindResult(
+        [out] CLSID *pclsidProtocol,
+        [out] DWORD *pdwResult,
+        [out] LPOLESTR *pszResult,
+        [in] DWORD dwReserved);
+}
+
+
+/*****************************************************************************
+ * IBindStatusCallback interface
+ */
+[
+    object,
+    uuid(79eac9c1-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IBindStatusCallback : IUnknown
+{
+    typedef [unique] IBindStatusCallback *LPBINDSTATUSCALLBACK;
+
+    typedef enum
+    {
+        BINDVERB_GET    = 0x00000000,
+        BINDVERB_POST   = 0x00000001,
+        BINDVERB_PUT    = 0x00000002,
+        BINDVERB_CUSTOM = 0x00000003
+    } BINDVERB;
+
+    typedef enum
+    {
+        BINDINFOF_URLENCODESTGMEDDATA = 0x00000001,
+        BINDINFOF_URLENCODEDEXTRAINFO = 0x00000002
+    } BINDINFOF;
+
+    typedef enum
+    {
+        BINDF_ASYNCHRONOUS = 0x00000001,
+        BINDF_ASYNCSTORAGE = 0x00000002,
+        BINDF_NOPROGRESSIVERENDERING = 0x00000004,
+        BINDF_OFFLINEOPERATION = 0x00000008,
+        BINDF_GETNEWESTVERSION = 0x00000010,
+        BINDF_NOWRITECACHE = 0x00000020,
+        BINDF_NEEDFILE = 0x00000040,
+        BINDF_PULLDATA = 0x00000080,
+        BINDF_IGNORESECURITYPROBLEM = 0x00000100,
+        BINDF_RESYNCHRONIZE = 0x00000200,
+        BINDF_HYPERLINK = 0x00000400,
+        BINDF_NO_UI = 0x00000800,
+        BINDF_SILENTOPERATION = 0x00001000,
+        BINDF_PRAGMA_NO_CACHE = 0x00002000,
+        BINDF_GETCLASSOBJECT = 0x00004000,
+        BINDF_RESERVED_1 = 0x00008000,
+        BINDF_FREE_THREADED = 0x00010000,
+        BINDF_DIRECT_READ = 0x00020000,
+        BINDF_FORMS_SUBMIT = 0x00040000,
+        BINDF_GETFROMCACHE_IF_NET_FAIL = 0x00080000,
+        BINDF_FROMURLMON = 0x00100000,
+        BINDF_FWD_BACK = 0x00200000,
+        BINDF_PREFERDEFAULTHANDLER = 0x00400000,
+        BINDF_ENFORCERESTRICTED = 0x00800000
+    } BINDF;
+
+    typedef enum
+    {
+        URL_ENCODING_NONE         = 0x00000000,
+        URL_ENCODING_ENABLE_UTF8  = 0x10000000,
+        URL_ENCODING_DISABLE_UTF8 = 0x20000000
+    } URL_ENCODING;
+
+    typedef struct _tagBINDINFO
+    {
+        ULONG cbSize;
+        LPWSTR szExtraInfo;
+        STGMEDIUM stgmedData;
+        DWORD grfBindInfoF;
+        DWORD dwBindVerb;
+        LPWSTR szCustomVerb;
+        DWORD cbstgmedData;
+        DWORD dwOptions;
+        DWORD dwOptionsFlags;
+        DWORD dwCodePage;
+        SECURITY_ATTRIBUTES securityAttributes;
+        IID iid;
+        IUnknown *pUnk;
+        DWORD dwReserved;
+    } BINDINFO;
+
+    typedef struct _REMSECURITY_ATTRIBUTES
+    {
+        DWORD nLength;
+        DWORD lpSecurityDescriptor;
+        BOOL bInheritHandle;
+    } REMSECURITY_ATTRIBUTES, *PREMSECURITY_ATTRIBUTES, *LPREMSECURITY_ATTRIBUTES;
+
+    typedef struct _tagRemBINDINFO
+    {
+        ULONG cbSize;
+        LPWSTR szExtraInfo;
+        DWORD grfBindInfoF;
+        DWORD dwBindVerb;
+        LPWSTR szCustomVerb;
+        DWORD cbstgmedData;
+        DWORD dwOptions;
+        DWORD dwOptionsFlags;
+        DWORD dwCodePage;
+        REMSECURITY_ATTRIBUTES securityAttributes;
+        IID iid;
+        IUnknown *pUnk;
+        DWORD dwReserved;
+    } RemBINDINFO;
+
+    typedef struct tagRemFORMATETC
+    {
+        DWORD cfFormat;
+        DWORD ptd;
+        DWORD dwAspect;
+        LONG lindex;
+        DWORD tymed;
+    } RemFORMATETC, *LPREMFORMATETC;
+
+    typedef enum
+    {
+        BSCF_FIRSTDATANOTIFICATION = 0x01,
+        BSCF_INTERMEDIATEDATANOTIFICATION = 0x02,
+        BSCF_LASTDATANOTIFICATION = 0x04,
+        BSCF_DATAFULLYAVAILABLE = 0x08,
+        BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10,
+        BSCF_SKIPDRAINDATAFORFILEURLS = 0x20,
+        BSCF_64BITLENGTHDOWNLOAD = 0x40
+    } BSCF;
+
+    typedef enum BINDSTATUS
+    {
+	BINDSTATUS_FINDINGRESOURCE = 1,
+	BINDSTATUS_CONNECTING,
+	BINDSTATUS_REDIRECTING,
+	BINDSTATUS_BEGINDOWNLOADDATA,
+	BINDSTATUS_DOWNLOADINGDATA,
+	BINDSTATUS_ENDDOWNLOADDATA,
+	BINDSTATUS_BEGINDOWNLOADCOMPONENTS,
+	BINDSTATUS_INSTALLINGCOMPONENTS,
+	BINDSTATUS_ENDDOWNLOADCOMPONENTS,
+	BINDSTATUS_USINGCACHEDCOPY,
+	BINDSTATUS_SENDINGREQUEST,
+	BINDSTATUS_CLASSIDAVAILABLE,
+	BINDSTATUS_MIMETYPEAVAILABLE,
+	BINDSTATUS_CACHEFILENAMEAVAILABLE,
+	BINDSTATUS_BEGINSYNCOPERATION,
+	BINDSTATUS_ENDSYNCOPERATION,
+	BINDSTATUS_BEGINUPLOADDATA,
+	BINDSTATUS_UPLOADINGDATA,
+	BINDSTATUS_ENDUPLOADINGDATA,
+	BINDSTATUS_PROTOCOLCLASSID,
+	BINDSTATUS_ENCODING,
+	BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,
+	BINDSTATUS_CLASSINSTALLLOCATION,
+	BINDSTATUS_DECODING,
+	BINDSTATUS_LOADINGMIMEHANDLER,
+	BINDSTATUS_CONTENTDISPOSITIONATTACH,
+	BINDSTATUS_FILTERREPORTMIMETYPE,
+	BINDSTATUS_CLSIDCANINSTANTIATE,
+	BINDSTATUS_IUNKNOWNAVAILABLE,
+	BINDSTATUS_DIRECTBIND,
+	BINDSTATUS_RAWMIMETYPE,
+	BINDSTATUS_PROXYDETECTING,
+	BINDSTATUS_ACCEPTRANGES,
+        BINDSTATUS_COOKIE_SENT,
+        BINDSTATUS_COMPACT_POLICY_RECEIVED,
+        BINDSTATUS_COOKIE_SUPPRESSED,
+        BINDSTATUS_COOKIE_STATE_UNKNOWN,
+        BINDSTATUS_COOKIE_STATE_ACCEPT,
+        BINDSTATUS_COOKIE_STATE_REJECT,
+        BINDSTATUS_COOKIE_STATE_PROMPT,
+        BINDSTATUS_COOKIE_STATE_LEASH,
+        BINDSTATUS_COOKIE_STATE_DOWNGRADE,
+        BINDSTATUS_POLICY_HREF,
+        BINDSTATUS_P3P_HEADER,
+        BINDSTATUS_SESSION_COOKIE_RECEIVED,
+        BINDSTATUS_PERSISTENT_COOKIE_RECEIVED,
+        BINDSTATUS_SESSION_COOKIES_ALLOWED,
+        BINDSTATUS_CACHECONTROL,
+        BINDSTATUS_CONTENTDISPOSITIONFILENAME,
+        BINDSTATUS_MIMETEXTPLAINMISMATCH,
+        BINDSTATUS_PUBLISHERAVAILABLE,
+        BINDSTATUS_DISPLAYNAMEAVAILABLE
+    } BINDSTATUS;
+
+
+    HRESULT OnStartBinding(
+        [in] DWORD dwReserved,
+        [in] IBinding * pib);
+
+    HRESULT GetPriority(
+        [out] LONG * pnPriority);
+
+    HRESULT OnLowResource(
+        [in] DWORD reserved);
+
+    HRESULT OnProgress(
+        [in] ULONG ulProgress,
+        [in] ULONG ulProgressMax,
+        [in] ULONG ulStatusCode,
+        [in] LPCWSTR szStatusText);
+
+    HRESULT OnStopBinding(
+        [in] HRESULT hresult,
+        [in, unique] LPCWSTR szError);
+
+    [local]
+    HRESULT GetBindInfo(
+        [out] DWORD *grfBINDF,
+        [in, out, unique] BINDINFO * pbindinfo);
+
+    [call_as(GetBindInfo)]
+    HRESULT RemoteGetBindInfo(
+        [out] DWORD *grfBINDF,
+        [in, out, unique] RemBINDINFO * pbindinfo,
+        [in, out, unique] RemSTGMEDIUM* pstgmed);
+
+    [local]
+    HRESULT OnDataAvailable(
+        [in] DWORD grfBSCF,
+        [in] DWORD dwSize,
+        [in] FORMATETC* pformatetc,
+        [in] STGMEDIUM* pstgmed);
+
+    [call_as(OnDataAvailable)]
+    HRESULT RemoteOnDataAvailable(
+        [in] DWORD grfBSCF,
+        [in] DWORD dwSize,
+        [in] RemFORMATETC *pformatetc,
+        [in] RemSTGMEDIUM* pstgmed);
+
+    HRESULT OnObjectAvailable(
+        [in] REFIID riid,
+        [in, iid_is(riid)] IUnknown* punk);
+}
+
+/*****************************************************************************
+ * IBindStatusCallbackEx interface
+ */
+[
+    object,
+    uuid(aaa74ef9-8ee7-4659-88d9-f8c504da73cc),
+    pointer_default(unique)
+]
+interface IBindStatusCallbackEx : IBindStatusCallback
+{
+    typedef [unique] IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX;
+
+    typedef enum {
+        BINDF2_DISABLEBASICOVERHTTP               = 0x00000001,
+        BINDF2_DISABLEAUTOCOOKIEHANDLING          = 0x00000002,
+        BINDF2_READ_DATA_GREATER_THAN_4GB         = 0x00000004,
+        BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID  = 0x00000008,
+        BINDF2_RESERVED_3                         = 0x20000000,
+        BINDF2_RESERVED_2                         = 0x40000000,
+        BINDF2_RESERVED_1                         = 0x80000000,
+    } BINDF2;
+
+    [local]
+    HRESULT GetBindInfoEx(
+            [out] DWORD *grfBINDF,
+            [in, out, unique] BINDINFO *pbindinfo,
+            [out] DWORD *grfBINDF2,
+            [out] DWORD *pdwReserved);
+
+    [call_as(GetBindInfoEx)]
+    HRESULT RemoteGetBindInfoEx(
+            [out] DWORD *grfBINDF,
+            [in, out, unique] RemBINDINFO *pbindinfo,
+            [in, out, unique] RemSTGMEDIUM *pstgmed,
+            [out] DWORD *grfBINDF2,
+            [out] DWORD *pdwReserved);
+}
+
+
+/*****************************************************************************
+ * IAuthenticate interface
+ */
+[
+    object,
+    uuid(79EAC9D0-BAf9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IAuthenticate : IUnknown
+{
+    typedef [unique] IAuthenticate *LPAUTHENTICATION;
+
+    HRESULT Authenticate(
+        [out] HWND* phwnd,
+        [out] LPWSTR *pszUsername,
+        [out] LPWSTR *pszPassword);
+}
+
+/*****************************************************************************
+ * IHttpNegotiate interface
+ */
+[
+    object,
+    uuid(79EAC9D2-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IHttpNegotiate : IUnknown
+{
+    typedef [unique] IHttpNegotiate *LPHTTPNEGOTIATE;
+
+    HRESULT BeginningTransaction(
+        [in] LPCWSTR szURL,
+        [in, unique] LPCWSTR szHeaders,
+        [in] DWORD dwReserved,
+        [out] LPWSTR *pszAdditionalHeaders);
+
+    HRESULT OnResponse(
+        [in] DWORD dwResponseCode,
+        [in, unique] LPCWSTR szResponseHeaders,
+        [in, unique] LPCWSTR szRequestHeaders,
+        [out] LPWSTR *pszAdditionalRequestHeaders);
+}
+
+/*****************************************************************************
+ * IHttpNegotiate2 interface
+ */
+[
+    object,
+    uuid(4F9F9FCB-E0F4-48eb-B7AB-FA2EA9365CB4),
+    pointer_default(unique)
+]
+interface IHttpNegotiate2 : IHttpNegotiate
+{
+    typedef [unique] IHttpNegotiate2 *LPHTTPNEGOTIATE2;
+
+    HRESULT GetRootSecurityId(
+         [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
+         [in, out] DWORD *pcbSecurityId,
+         [in] DWORD_PTR dwReserved);
+}
+
+/*****************************************************************************
+ * IBindHost interface
+ */
+cpp_quote("#define SID_IBindHost IID_IBindHost")
+cpp_quote("#define SID_SBindHost IID_IBindHost")
+[
+    object,
+    uuid(fc4801a1-2ba9-11cf-a229-00aa003d7352),
+    pointer_default(unique)
+]
+interface IBindHost : IUnknown
+{
+    typedef [unique] IBindHost *LPBINDHOST;
+
+    HRESULT CreateMoniker(
+        [in] LPOLESTR szName,
+        [in] IBindCtx *pBC,
+        [out] IMoniker** ppmk,
+        [in] DWORD dwReserved);
+
+    [local]
+    HRESULT MonikerBindToStorage(
+        [in] IMoniker *pMk,
+        [in] IBindCtx *pBC,
+        [in] IBindStatusCallback *pBSC,
+        [in] REFIID riid,
+        [out] void **ppvObj);
+
+    [call_as(MonikerBindToStorage)]
+    HRESULT RemoteMonikerBindToStorage(
+        [in, unique] IMoniker *pMk,
+        [in, unique] IBindCtx *pBC,
+        [in, unique] IBindStatusCallback *pBSC,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown **ppvObj);
+
+    [local]
+    HRESULT MonikerBindToObject(
+        [in] IMoniker *pMk,
+        [in] IBindCtx *pBC,
+        [in] IBindStatusCallback *pBSC,
+        [in] REFIID riid,
+        [out] void **ppvObj);
+
+    [call_as(MonikerBindToObject)]
+    HRESULT RemoteMonikerBindToObject(
+        [in, unique] IMoniker *pMk,
+        [in, unique] IBindCtx *pBC,
+        [in, unique] IBindStatusCallback *pBSC,
+        [in] REFIID riid,
+        [out, iid_is(riid)] IUnknown **ppvObj);
+}
+
+
+/*****************************************************************************
+ * IWinInetInfo interface
+ */
+[
+    object,
+    uuid(79eac9d6-bafa-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IWinInetInfo : IUnknown
+{
+    typedef [unique] IWinInetInfo *LPWININETINFO;
+
+    [local]
+    HRESULT QueryOption(
+        [in] DWORD dwOption,
+        [in, out, size_is(*pcbBuf)] LPVOID pBuffer,
+        [in, out] DWORD *pcbBuf);
+
+    [call_as(QueryOption)]
+    HRESULT RemoteQueryOption(
+        [in] DWORD  dwOption,
+        [in, out, size_is(*pcbBuf)] BYTE *pBuffer,
+        [in, out] DWORD *pcbBuf);
+}
+
+
+
+/*****************************************************************************
+ * IWinInetHttpInfo interface
+ */
+[
+    object,
+    uuid(79eac9d8-bafa-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IWinInetHttpInfo : IWinInetInfo
+{
+    typedef [unique] IWinInetHttpInfo *LPWININETHTTPINFO;
+
+    [local]
+    HRESULT QueryInfo(
+        [in] DWORD dwOption,
+        [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
+        [in, out] DWORD *pcbBuf,
+        [in, out] DWORD *pdwFlags,
+        [in, out] DWORD *pdwReserved);
+
+    [call_as(QueryInfo)]
+    HRESULT RemoteQueryInfo(
+        [in] DWORD dwOption,
+        [in,out,size_is(*pcbBuf)] BYTE *pBuffer,
+        [in, out] DWORD *pcbBuf,
+        [in, out] DWORD *pdwFlags,
+        [in, out] DWORD *pdwReserved);
+}
+
+/*****************************************************************************
+ * IWindowForBindingUI interface
+ */
+[
+    local,
+    object,
+    uuid(79eac9d5-bafa-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IWindowForBindingUI : IUnknown
+{
+    typedef [unique] IWindowForBindingUI *LPWINDOWFORBINDINGUI;
+
+    HRESULT GetWindow(
+        [in] REFGUID rguidReason,
+        [out] HWND *phwnd);
+}
+
+/*****************************************************************************
+ * ICodeInstall interface
+ */
+[
+    local,
+    object,
+    uuid(79eac9d1-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface ICodeInstall : IWindowForBindingUI
+{
+    typedef [unique] ICodeInstall *LPCODEINSTALL;
+
+    typedef enum {
+        CIP_DISK_FULL,
+        CIP_ACCESS_DENIED,
+        CIP_NEWER_VERSION_EXISTS,
+        CIP_OLDER_VERSION_EXISTS,
+        CIP_NAME_CONFLICT,
+        CIP_TRUST_VERIFICATION_COMPONENT_MISSING,
+        CIP_EXE_SELF_REGISTERATION_TIMEOUT,
+        CIP_UNSAFE_TO_ABORT,
+        CIP_NEED_REBOOT,
+        CIP_NEED_REBOOT_UI_PERMISSION
+    } CIP_STATUS;
+
+    HRESULT OnCodeInstallProblem(
+            [in] ULONG ulStatusCode,
+            [in, unique] LPCWSTR szDestination,
+            [in, unique] LPCWSTR szSource,
+            [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IHttpSecurity interface
+ */
+[
+    object,
+    uuid(79eac9d7-bafa-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IHttpSecurity : IWindowForBindingUI
+{
+    typedef [unique] IHttpSecurity *LPHTTPSECURITY;
+
+    HRESULT OnSecurityProblem(
+        [in] DWORD dwProblem);
+}
+
+
+/*****************************************************************************
+ * IPersistMoniker interface
+ */
+[
+    object,
+    uuid(79eac9c9-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IPersistMoniker : IUnknown
+{
+    typedef [unique] IPersistMoniker *LPPERSISTMONIKER;
+
+    HRESULT GetClassID(
+        [out] CLSID *pClassID);
+
+    HRESULT IsDirty();
+
+    HRESULT Load(
+        [in] BOOL fFullyAvailable,
+        [in] IMoniker *pimkName,
+        [in] LPBC pibc,
+        [in] DWORD grfMode);
+
+    HRESULT Save(
+        [in] IMoniker *pimkName,
+        [in] LPBC pbc,
+        [in] BOOL fRemember);
+
+    HRESULT SaveCompleted(
+        [in] IMoniker *pimkName,
+        [in] LPBC pibc);
+
+    HRESULT GetCurMoniker(
+        [out] IMoniker **ppimkName);
+}
+
+/*****************************************************************************
+ * IMonikerProp interface
+ */
+[
+    object,
+    uuid(A5CA5F7F-1847-4D87-9C5B-918509F7511D),
+    pointer_default(unique)
+]
+interface IMonikerProp : IUnknown
+{
+    typedef [unique] IMonikerProp *LPMONIKERPROP;
+
+    typedef enum {
+        MIMETYPEPROP        = 0,
+        USE_SRC_URL         = 1,
+        CLASSIDPROP         = 2,
+        TRUSTEDDOWNLOADPROP = 3,
+        POPUPLEVELPROP      = 4
+    } MONIKERPROPERTY;
+
+    HRESULT PutProperty(
+        [in] MONIKERPROPERTY mkp,
+        [in] LPCWSTR val);
+}
+
+cpp_quote("#ifndef _LPBINDPROTOCOL_DEFINED")
+cpp_quote("#define _LPBINDPROTOCOL_DEFINED")
+
+/*****************************************************************************
+ * IBindProtocol interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9CD-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IBindProtocol : IUnknown
+{
+    typedef [unique] IBindProtocol *LPBINDPROTOCOL;
+
+    HRESULT CreateBinding(
+        [in] LPCWSTR szUrl,
+        [in] IBindCtx *pbc,
+        [out] IBinding **ppb);
+}
+
+cpp_quote("#endif /* !defined _LPBINDPROTOCOL_DEFINED */")
+
+/*****************************************************************************
+ * IInternetBindInfo interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9E1-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IInternetBindInfo : IUnknown
+{
+    typedef [unique] IInternetBindInfo *LPIINTERNETBINDINFO;
+
+    typedef enum tagBINDSTRING
+    {
+        BINDSTRING_HEADERS = 1,
+        BINDSTRING_ACCEPT_MIMES,
+        BINDSTRING_EXTRA_URL,
+        BINDSTRING_LANGUAGE,
+        BINDSTRING_USERNAME,
+        BINDSTRING_PASSWORD,
+        BINDSTRING_UA_PIXELS,
+        BINDSTRING_UA_COLOR,
+        BINDSTRING_OS,
+        BINDSTRING_USER_AGENT,
+        BINDSTRING_ACCEPT_ENCODINGS,
+        BINDSTRING_POST_COOKIE,
+        BINDSTRING_POST_DATA_MIME,
+        BINDSTRING_URL,
+        BINDSTRING_IID,
+        BINDSTRING_FLAG_BIND_TO_OBJECT,
+        BINDSTRING_PTR_BIND_CONTEXT
+    } BINDSTRING;
+
+    HRESULT GetBindInfo(
+        [out] DWORD *grfBINDF,
+        [in, out, unique] BINDINFO *pbindinfo);
+
+    HRESULT GetBindString(
+        [in]      ULONG ulStringType,
+        [in, out] LPOLESTR *ppwzStr,
+        [in]      ULONG cEl,
+        [in, out] ULONG *pcElFetched);
+}
+
+/*****************************************************************************
+ * IInternetPriority interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9EB-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IInternetPriority : IUnknown
+{
+    typedef [unique] IInternetPriority *LPIINTERNETPRIORITY;
+
+    HRESULT SetPriority([in] LONG nPriority);
+    HRESULT GetPriority([out] LONG *pnPriority);
+}
+
+/*****************************************************************************
+ * IInternetProtocolRoot interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9E3-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IInternetProtocolRoot : IUnknown
+{
+    typedef [unique] IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
+
+    typedef enum _tagPI_FLAGS
+    {
+        PI_PARSE_URL         = 0x00000001,
+        PI_FILTER_MODE       = 0x00000002,
+        PI_FORCE_ASYNC       = 0x00000004,
+        PI_USE_WORKERTHREAD  = 0x00000008,
+        PI_MIMEVERIFICATION  = 0x00000010,
+        PI_CLSIDLOOKUP       = 0x00000020,
+        PI_DATAPROGRESS      = 0x00000040,
+        PI_SYNCHRONOUS       = 0x00000080,
+        PI_APARTMENTTHREADED = 0x00000100,
+        PI_CLASSINSTALL      = 0x00000200,
+        PD_FORCE_SWITCH      = 0x00010000
+    } PI_FLAGS;
+
+    typedef struct _tagPROTOCOLDATA
+    {
+        DWORD grfFlags;
+        DWORD dwState;
+        LPVOID pData;
+        ULONG cbData;
+    } PROTOCOLDATA;
+
+    HRESULT Start(
+        [in] LPCWSTR szUrl,
+        [in] IInternetProtocolSink *pOIProtSink,
+        [in] IInternetBindInfo *pOIBindInfo,
+        [in] DWORD grfPI,
+        [in] HANDLE_PTR dwReserved);
+
+    HRESULT Continue(
+        [in] PROTOCOLDATA *pProtocolData);
+
+    HRESULT Abort(
+        [in] HRESULT hrReason,
+        [in] DWORD dwOptions);
+
+    HRESULT Terminate(
+        [in] DWORD dwOptions);
+
+    HRESULT Suspend();
+
+    HRESULT Resume();
+}
+
+/*****************************************************************************
+ * IInternetProtocolSink interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9E5-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IInternetProtocolSink : IUnknown
+{
+    typedef [unique] IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
+
+    HRESULT Switch(
+        [in] PROTOCOLDATA *pProtocolData);
+
+    HRESULT ReportProgress(
+        [in] ULONG ulStatusCode,
+        [in] LPCWSTR szStatusText);
+
+    HRESULT ReportData(
+        [in] DWORD grfBSCF,
+        [in] ULONG ulProgress,
+        [in] ULONG ulProgressMax);
+
+    HRESULT ReportResult(
+        [in] HRESULT hrResult,
+        [in] DWORD dwError,
+        [in] LPCWSTR szResult);
+}
+
+/*****************************************************************************
+ * IInternetProtocol interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9E4-BAF9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IInternetProtocol : IInternetProtocolRoot
+{
+    typedef [unique] IInternetProtocol *LPIINTERNETPROTOCOL;
+
+    HRESULT Read(
+        [in,out, size_is(cb), length_is(*pcbRead)] void *pv,
+        [in]  ULONG cb,
+        [out] ULONG *pcbRead);
+
+    HRESULT Seek(
+        [in]  LARGE_INTEGER dlibMove,
+        [in]  DWORD dwOrigin,
+        [out] ULARGE_INTEGER *plibNewPosition);
+
+    HRESULT LockRequest(
+        [in] DWORD dwOptions);
+
+    HRESULT UnlockRequest();
+}
+
+/*****************************************************************************
+ * IInternetProtocolInfo interface
+ */
+[
+    local,
+    object,
+    uuid(79eac9ec-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IInternetProtocolInfo : IUnknown
+{
+    typedef [unique] IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
+
+    typedef enum _tagPARSEACTION
+    {
+        PARSE_CANONICALIZE = 1,
+        PARSE_FRIENDLY,
+        PARSE_SECURITY_URL,
+        PARSE_ROOTDOCUMENT,
+        PARSE_DOCUMENT,
+        PARSE_ANCHOR,
+        PARSE_ENCODE,
+        PARSE_DECODE,
+        PARSE_PATH_FROM_URL,
+        PARSE_URL_FROM_PATH,
+        PARSE_MIME,
+        PARSE_SERVER,
+        PARSE_SCHEMA,
+        PARSE_SITE,
+        PARSE_DOMAIN,
+        PARSE_LOCATION,
+        PARSE_SECURITY_DOMAIN,
+        PARSE_ESCAPE,
+        PARSE_UNESCAPE
+    } PARSEACTION;
+
+    typedef enum _tagPSUACTION
+    {
+        PSU_DEFAULT = 1,
+        PSU_SECURITY_URL_ONLY
+    } PSUACTION;
+
+    typedef enum _tagQUERYOPTION
+    {
+        QUERY_EXPIRATION_DATE = 1,
+        QUERY_TIME_OF_LAST_CHANGE,
+        QUERY_CONTENT_ENCODING,
+        QUERY_CONTENT_TYPE,
+        QUERY_REFRESH,
+        QUERY_RECOMBINE,
+        QUERY_CAN_NAVIGATE,
+        QUERY_USES_NETWORK,
+        QUERY_IS_CACHED,
+        QUERY_IS_INSTALLEDENTRY,
+        QUERY_IS_CACHED_OR_MAPPED,
+        QUERY_USES_CACHE,
+        QUERY_IS_SECURE,
+        QUERY_IS_SAFE,
+        QUERY_USES_HISTORYFOLDER,
+        QUERY_IS_CACHED_AND_USABLE_OFFLINE
+    } QUERYOPTION;
+
+    HRESULT ParseUrl(
+        [in] LPCWSTR pwzUrl,
+        [in] PARSEACTION ParseAction,
+        [in] DWORD dwParseFlags,
+        [out] LPWSTR pwzResult,
+        [in] DWORD cchResult,
+        [out] DWORD *pcchResult,
+        [in] DWORD dwReserved);
+
+    HRESULT CombineUrl(
+        [in] LPCWSTR pwzBaseUrl,
+        [in] LPCWSTR pwzRelativeUrl,
+        [in] DWORD dwCombineFlags,
+        [out] LPWSTR pwzResult,
+        [in] DWORD cchResult,
+        [out] DWORD *pcchResult,
+        [in] DWORD dwReserved);
+
+    HRESULT CompareUrl(
+        [in] LPCWSTR pwzUrl1,
+        [in] LPCWSTR pwzUrl2,
+        [in] DWORD dwCompareFlags);
+
+    HRESULT QueryInfo(
+        [in] LPCWSTR pwzUrl,
+        [in] QUERYOPTION OueryOption,
+        [in] DWORD dwQueryFlags,
+        [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
+        [in] DWORD cbBuffer,
+        [in, out] DWORD *pcbBuf,
+        [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetSession interface
+ */
+[
+    local,
+    object,
+    uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IInternetSession : IUnknown
+{
+    typedef [unique] IInternetSession *LPIINTERNETSESSION;
+
+    typedef enum _tagOIBDG_FLAGS
+    {
+        OIBDG_APARTMENTTHREADED = 0x0100,
+        OIBDG_DATAONLY          = 0x1000
+    } OIBDG_FLAGS;
+
+    HRESULT RegisterNameSpace(
+        [in] IClassFactory *pCF,
+        [in] REFCLSID rclsid,
+        [in] LPCWSTR pwzProtocol,
+        [in] ULONG cPatterns,
+        [in] const LPCWSTR *ppwzPatterns,
+        [in] DWORD dwReserved);
+
+    HRESULT UnregisterNameSpace(
+        [in] IClassFactory *pCF,
+        [in] LPCWSTR pszProtocol);
+
+    HRESULT RegisterMimeFilter(
+        [in] IClassFactory *pCF,
+        [in] REFCLSID rclsid,
+        [in] LPCWSTR pwzType);
+
+    HRESULT UnregisterMimeFilter(
+        [in] IClassFactory *pCF,
+        [in] LPCWSTR pwzType);
+
+    HRESULT CreateBinding(
+        [in] LPBC pBC,
+        [in] LPCWSTR szUrl,
+        [in] IUnknown *pUnkOuter,
+        [out, unique] IUnknown **ppUnk,
+        [out, unique] IInternetProtocol **ppOInetProt,
+        [in] DWORD dwOption);
+
+    HRESULT SetSessionOption(
+        [in] DWORD dwOption,
+        [in] LPVOID pBuffer,
+        [in] DWORD dwBufferLength,
+        [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetSecurityMgrSite interface
+ */
+[
+    local,
+    object,
+    uuid(79eac9ed-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IInternetSecurityMgrSite : IUnknown
+{
+    HRESULT GetWindow(
+        [out] HWND *phwnd);
+
+    HRESULT EnableModeless(
+        [in] BOOL fEnable);
+}
+
+
+/*****************************************************************************
+ * IInternetSecurityManager interface
+ */
+cpp_quote("#define SID_SInternetSecurityManager IID_IInternetSecurityManager")
+
+[
+    object,
+    uuid(79eac9ee-baf9-11ce-8c82-00aa004ba90b),
+    pointer_default(unique)
+]
+interface IInternetSecurityManager : IUnknown
+{
+    HRESULT SetSecuritySite(
+        [in, unique] IInternetSecurityMgrSite *pSite);
+
+    HRESULT GetSecuritySite(
+        [out] IInternetSecurityMgrSite **ppSite);
+
+    HRESULT MapUrlToZone(
+        [in] LPCWSTR pwszUrl,
+        [out] DWORD *pdwZone,
+        [in] DWORD dwFlags);
+
+cpp_quote("#define MAX_SIZE_SECURITY_ID 512")
+
+    HRESULT GetSecurityId(
+        [in] LPCWSTR pwszUrl,
+        [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
+        [in, out] DWORD *pcbSecurityId,
+        [in] DWORD_PTR dwReserved);
+
+
+    typedef enum {
+        PUAF_DEFAULT                = 0x00,
+        PUAF_NOUI                   = 0x01,
+        PUAF_ISFILE                 = 0x02,
+        PUAF_WARN_IF_DENIED         = 0x04,
+        PUAF_FORCEUI_FOREGROUND     = 0x08,
+        PUAF_CHECK_TIPS             = 0x10
+    } PUAF;
+
+    HRESULT ProcessUrlAction(
+        [in] LPCWSTR pwszUrl,
+        [in] DWORD dwAction,
+        [out, size_is(cbPolicy)] BYTE *pPolicy,
+        [in] DWORD cbPolicy,
+        [in] BYTE *pContext,
+        [in] DWORD cbContext,
+        [in] DWORD dwFlags,
+        [in] DWORD dwReserved);
+
+    HRESULT QueryCustomPolicy(
+        [in] LPCWSTR pwszUrl,
+        [in] REFGUID guidKey,
+        [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,
+        [out] DWORD *pcbPolicy,
+        [in] BYTE *pContext,
+        [in] DWORD cbContext,
+        [in] DWORD dwReserved);
+
+    typedef enum {
+        SZM_CREATE = 0x0,
+        SZM_DELETE = 0x1
+    } SZM_FLAGS;
+
+    HRESULT SetZoneMapping(
+        [in] DWORD dwZone,
+        [in] LPCWSTR lpszPattern,
+        [in] DWORD dwFlags);
+
+    HRESULT GetZoneMappings(
+        [in] DWORD dwZone,
+        [out] IEnumString **ppenumString,
+        [in] DWORD dwFlags);
+}
+
+/*****************************************************************************
+ * IInternetSecurityManagerEx interface
+ */
+cpp_quote("#define SID_SInternetSecurityManagerEx IID_IInternetSecurityManagerEx")
+
+[
+    object,
+    uuid(f164edf1-cc7c-4f0d-9a94-34222625C393),
+    pointer_default(unique)
+]
+interface IInternetSecurityManagerEx : IInternetSecurityManager
+{
+    HRESULT ProcessUrlActionEx(
+        [in] LPCWSTR pwszUrl,
+        [in] DWORD dwAction,
+        [out] BYTE *pPolicy,
+        [in] DWORD cbPolicy,
+        [in] BYTE *pContext,
+        [in] DWORD cbContext,
+        [in] DWORD dwFlags,
+        [in] DWORD dwReserved,
+        [out] DWORD *pdwOutFlags);
+}
+
+/*****************************************************************************
+ * IInternetSecurityManagerEx2 interface
+ */
+cpp_quote("#define SID_SInternetSecurityManagerEx2 IID_IInternetSecurityManagerEx2")
+
+[
+    object,
+    uuid(f1e50292-a795-4117-8e09-2b560a72ac60),
+    pointer_default(unique)
+]
+interface IInternetSecurityManagerEx2 : IInternetSecurityManagerEx
+{
+    HRESULT MapUrlToZoneEx2(
+        [in] IUri *pUri,
+        [out] DWORD *pdwZone,
+        [in] DWORD dwFlags,
+        [out] LPWSTR *ppwszMappedUrl,
+        [out] DWORD *pdwOutFlags);
+
+    HRESULT ProcessUrlActionEx2(
+        [in] IUri *pUri,
+        [in] DWORD dwAction,
+        [out] BYTE *pPolicy,
+        [in] DWORD cbPolicy,
+        [in] BYTE *pContext,
+        [in] DWORD cbContext,
+        [in] DWORD dwFlags,
+        [in] DWORD_PTR dwReserved,
+        [out] DWORD *pdwOutFlags);
+
+    HRESULT GetSecurityIdEx2(
+        [in] IUri *pUri,
+        [out] BYTE *pbSecurityId,
+        [in, out] DWORD *pcbSecurityId,
+        [in] DWORD_PTR dwReserved);
+
+    HRESULT QueryCustomPolicyEx2(
+        [in] IUri *pUri,
+        [in] REFGUID guidKey,
+        [out] BYTE **ppPolicy,
+        [out] DWORD *pcbPolicy,
+        [in] BYTE *pContext,
+        [in] DWORD cbContext,
+        [in] DWORD_PTR dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetHostSecurityManager interface
+ */
+cpp_quote("#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager")
+
+[
+    local,
+    object,
+    uuid(3af280b6-cb3f-11d0-891e-00c04fb6bfc4),
+    pointer_default(unique)
+]
+interface IInternetHostSecurityManager : IUnknown
+{
+    HRESULT GetSecurityId(
+            [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
+            [in, out] DWORD *pcbSecurityId,
+            [in] DWORD_PTR dwReserved);
+
+    HRESULT ProcessUrlAction(
+            [in] DWORD dwAction,
+            [out, size_is(cbPolicy)] BYTE *pPolicy,
+            [in] DWORD cbPolicy,
+            [in] BYTE *pContext,
+            [in] DWORD cbContext,
+            [in] DWORD dwFlags,
+            [in] DWORD dwReserved);
+
+    HRESULT QueryCustomPolicy(
+            [in] REFGUID guidKey,
+            [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,
+            [out] DWORD *pcbPolicy,
+            [in] BYTE *pContext,
+            [in] DWORD cbContext,
+            [in] DWORD dwReserved);
+}
+
+cpp_quote("#define URLACTION_MIN                        0x00001000")
+cpp_quote("#define URLACTION_DOWNLOAD_MIN               0x00001000")
+cpp_quote("#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX    0x00001001")
+cpp_quote("#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX  0x00001004")
+cpp_quote("#define URLACTION_DOWNLOAD_CURR_MAX          0x00001004")
+cpp_quote("#define URLACTION_DOWNLOAD_MAX               0x000011ff")
+
+cpp_quote("#define URLACTION_ACTIVEX_MIN                     0x00001200")
+cpp_quote("#define URLACTION_ACTIVEX_RUN                     0x00001200")
+cpp_quote("#define URLPOLICY_ACTIVEX_CHECK_LIST              0x00010000")
+cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY  0x00001201")
+cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY    0x00001202")
+cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY  0x00001203")
+cpp_quote("#define URLACTION_SCRIPT_OVERRIDE_SAFETY          0x00001401")
+cpp_quote("#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY  0x00001204")
+cpp_quote("#define URLACTION_ACTIVEX_TREATASUNTRUSTED        0x00001205")
+cpp_quote("#define URLACTION_ACTIVEX_CURR_MAX                0x00001205")
+cpp_quote("#define URLACTION_ACTIVEX_MAX                     0x000013ff")
+
+cpp_quote("#define URLACTION_SCRIPT_MIN           0x00001400")
+cpp_quote("#define URLACTION_SCRIPT_RUN           0x00001400")
+cpp_quote("#define URLACTION_SCRIPT_JAVA_USE      0x00001402")
+cpp_quote("#define URLACTION_SCRIPT_SAFE_ACTIVEX  0x00001405")
+cpp_quote("#define URLACTION_CROSS_DOMAIN_DATA    0x00001406")
+cpp_quote("#define URLACTION_SCRIPT_PASTE         0x00001407")
+cpp_quote("#define URLACTION_SCRIPT_CURR_MAX      0x00001407")
+cpp_quote("#define URLACTION_SCRIPT_MAX           0x000015ff")
+
+cpp_quote("#define URLACTION_HTML_MIN                0x00001600")
+cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS       0x00001601")
+cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_FROM  0x00001602")
+cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_TO    0x00001603")
+cpp_quote("#define URLACTION_HTML_FONT_DOWNLOAD      0x00001604")
+cpp_quote("#define URLACTION_HTML_JAVA_RUN           0x00001605")
+cpp_quote("#define URLACTION_HTML_USERDATA_SAVE      0x00001606")
+cpp_quote("#define URLACTION_HTML_SUBFRAME_NAVIGATE  0x00001607")
+cpp_quote("#define URLACTION_HTML_META_REFRESH       0x00001608")
+cpp_quote("#define URLACTION_HTML_MIXED_CONTENT      0x00001609")
+cpp_quote("#define URLACTION_HTML_MAX                0x000017ff")
+
+cpp_quote("#define URLACTION_SHELL_MIN              0x00001800")
+cpp_quote("#define URLACTION_SHELL_INSTALL_DTITEMS  0x00001800")
+cpp_quote("#define URLACTION_SHELL_MOVE_OR_COPY     0x00001802")
+cpp_quote("#define URLACTION_SHELL_FILE_DOWNLOAD    0x00001803")
+cpp_quote("#define URLACTION_SHELL_VERB             0x00001804")
+cpp_quote("#define URLACTION_SHELL_WEBVIEW_VERB     0x00001805")
+cpp_quote("#define URLACTION_SHELL_CURR_MAX         0x00001805")
+cpp_quote("#define URLACTION_SHELL_MAX              0x000019ff")
+
+cpp_quote("#define URLACTION_NETWORK_MIN                  0x00001a00")
+cpp_quote("#define URLACTION_CREDENTIALS_USE              0x00001a00")
+cpp_quote("#define URLACTION_AUTHENTICATE_CLIENT          0x00001a01")
+cpp_quote("#define URLACTION_COOKIES                      0x00001a02")
+cpp_quote("#define URLACTION_COOKIES_SESSION              0x00001a03")
+cpp_quote("#define URLACTION_CLIENT_CERT_PROMPT           0x00001a04")
+cpp_quote("#define URLACTION_COOKIES_THIRD_PARTY          0x00001a05")
+cpp_quote("#define URLACTION_COOKIES_SESSION_THIRD_PARTY  0x00001a06")
+cpp_quote("#define URLACTION_COOKIES_ENABLED              0x00001a10")
+cpp_quote("#define URLACTION_NETWORK_CURR_MAX             0x00001a10")
+cpp_quote("#define URLACTION_NETWORK_MAX                  0x00001bff")
+
+cpp_quote("#define URLACTION_JAVA_MIN          0x00001c00")
+cpp_quote("#define URLACTION_JAVA_PERMISSIONS  0x00001c00")
+cpp_quote("#define URLPOLICY_JAVA_PROHIBIT     0x00000000")
+cpp_quote("#define URLPOLICY_JAVA_HIGH         0x00010000")
+cpp_quote("#define URLPOLICY_JAVA_MEDIUM       0x00020000")
+cpp_quote("#define URLPOLICY_JAVA_LOW          0x00030000")
+cpp_quote("#define URLPOLICY_JAVA_CUSTOM       0x00800000")
+cpp_quote("#define URLACTION_JAVA_CURR_MAX     0x00001c00")
+cpp_quote("#define URLACTION_JAVA_MAX          0x00001cff")
+
+cpp_quote("#define URLACTION_INFODELIVERY_MIN                        0x00001d00")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS         0x00001d00")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS        0x00001d01")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS       0x00001d02")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS    0x00001d03")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS   0x00001d04")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS  0x00001d05")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING         0x00001d06")
+cpp_quote("#define URLACTION_INFODELIVERY_CURR_MAX                   0x00001d06")
+cpp_quote("#define URLACTION_INFODELIVERY_MAX                        0x00001dff")
+
+cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MIN          0x00001e00")
+cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS  0x00001e05")
+cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT     0x00010000")
+cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE     0x00020000")
+cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL  0x00030000")
+cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX          0x00001eff")
+
+cpp_quote("#define URLACTION_BEHAVIOR_MIN           0x00002000")
+cpp_quote("#define URLACTION_BEHAVIOR_RUN           0x00002000")
+cpp_quote("#define URLPOLICY_BEHAVIOR_CHECK_LIST    0x00010000")
+
+cpp_quote("#define URLACTION_FEATURE_MIN                        0x00002100")
+cpp_quote("#define URLACTION_FEATURE_MIME_SNIFFING              0x00002100")
+cpp_quote("#define URLACTION_FEATURE_ZONE_ELEVATION             0x00002101")
+cpp_quote("#define URLACTION_FEATURE_WINDOW_RESTRICTIONS        0x00002102")
+cpp_quote("#define URLACTION_FEATURE_SCRIPT_STATUS_BAR          0x00002103")
+cpp_quote("#define URLACTION_FEATURE_FORCE_ADDR_AND_STATUS      0x00002104")
+cpp_quote("#define URLACTION_FEATURE_BLOCK_INPUT_PROMPTS        0x00002105")
+
+cpp_quote("#define URLPOLICY_ALLOW     0x00")
+cpp_quote("#define URLPOLICY_QUERY     0x01")
+cpp_quote("#define URLPOLICY_DISALLOW  0x03")
+
+cpp_quote("#define URLPOLICY_NOTIFY_ON_ALLOW     0x10")
+cpp_quote("#define URLPOLICY_NOTIFY_ON_DISALLOW  0x20")
+
+cpp_quote("#define URLPOLICY_LOG_ON_ALLOW     0x40")
+cpp_quote("#define URLPOLICY_LOG_ON_DISALLOW  0x80")
+
+cpp_quote("#define URLPOLICY_DONTCHECKDLGBOX     0x100")
+
+cpp_quote("#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK     0x00000000")
+cpp_quote("#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER    0x00010000")
+cpp_quote("#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT  0x00020000")
+cpp_quote("#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY      0x00030000")
+
+cpp_quote("#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK        0x00000000")
+cpp_quote("#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE  0x00010000")
+cpp_quote("#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY         0x00030000")
+
+cpp_quote("#define URLPOLICY_MASK_PERMISSIONS  0x0f")
+cpp_quote("#define GetUrlPolicyPermissions(dw)      (dw & URLPOLICY_MASK_PERMISSIONS)")
+cpp_quote("#define SetUrlPolicyPermissions(dw,dw2)  ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))")
+
+/*****************************************************************************
+ * IInternetZoneManager interface
+ */
+[
+    local,
+    object,
+    uuid(79EAC9EF-BAf9-11CE-8C82-00AA004BA90B),
+    pointer_default(unique)
+]
+interface IInternetZoneManager : IUnknown
+{
+    typedef [unique] IInternetZoneManager* LPURLZONEMANAGER;
+
+    typedef enum tagURLZONE
+    {
+        URLZONE_INVALID         = -1,
+        URLZONE_PREDEFINED_MIN  = 0,
+        URLZONE_LOCAL_MACHINE   = 0,
+        URLZONE_INTRANET        = 1,
+        URLZONE_TRUSTED         = 2,
+        URLZONE_INTERNET        = 3,
+        URLZONE_UNTRUSTED       = 4,
+        URLZONE_PREDEFINED_MAX  = 999,
+        URLZONE_USER_MIN        = 1000,
+        URLZONE_USER_MAX        = 10000,
+    }  URLZONE;
+
+    typedef enum tagURLTEMPLATE
+    {
+        URLTEMPLATE_CUSTOM         = 0x00000,
+        URLTEMPLATE_PREDEFINED_MIN = 0x10000,
+        URLTEMPLATE_LOW            = 0x10000,
+        URLTEMPLATE_MEDLOW         = 0x10500,
+        URLTEMPLATE_MEDIUM         = 0x11000,
+        URLTEMPLATE_MEDHIGH        = 0x11500,
+        URLTEMPLATE_HIGH           = 0x12000,
+        URLTEMPLATE_PREDEFINED_MAX = 0x20000,
+    } URLTEMPLATE ;
+
+    typedef enum {
+        ZAFLAGS_CUSTOM_EDIT              = 0x00000001,
+        ZAFLAGS_ADD_SITES                = 0x00000002,
+        ZAFLAGS_REQUIRE_VERIFICATION     = 0x00000004,
+        ZAFLAGS_INCLUDE_PROXY_OVERRIDE   = 0x00000008,
+        ZAFLAGS_INCLUDE_INTRANET_SITES   = 0x00000010,
+        ZAFLAGS_NO_UI                    = 0x00000020,
+        ZAFLAGS_SUPPORTS_VERIFICATION    = 0x00000040,
+        ZAFLAGS_UNC_AS_INTRANET          = 0x00000080,
+        ZAFLAGS_DETECT_INTRANET          = 0x00000100,
+        ZAFLAGS_USE_LOCKED_ZONES         = 0x00010000,
+        ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x00020000,
+        ZAFLAGS_NO_CACHE                 = 0x00040000,
+    } ZAFLAGS ;
+
+    enum {
+        MAX_ZONE_PATH        = 260,
+        MAX_ZONE_DESCRIPTION = 200
+    };
+
+    typedef struct _ZONEATTRIBUTES {
+        ULONG cbSize;
+        WCHAR szDisplayName[MAX_ZONE_PATH];
+        WCHAR szDescription[MAX_ZONE_DESCRIPTION];
+        WCHAR szIconPath[MAX_ZONE_PATH];
+        DWORD dwTemplateMinLevel;
+        DWORD dwTemplateRecommended;
+        DWORD dwTemplateCurrentLevel;
+        DWORD dwFlags;
+    } ZONEATTRIBUTES, *LPZONEATTRIBUTES;
+
+    typedef enum _URLZONEREG {
+        URLZONEREG_DEFAULT,
+        URLZONEREG_HKLM,
+        URLZONEREG_HKCU
+    } URLZONEREG;
+
+    HRESULT GetZoneAttributes(
+        [in]              DWORD dwZone,
+        [in, out, unique] ZONEATTRIBUTES* pZoneAttributes);
+
+    HRESULT SetZoneAttributes(
+        [in] DWORD dwZone,
+        [in] ZONEATTRIBUTES* pZoneAttributes);
+
+    HRESULT GetZoneCustomPolicy(
+        [in]  DWORD dwZone,
+        [in]  REFGUID guidKey,
+        [out] BYTE **ppPolicy,
+        [out] DWORD* pcbPolicy,
+        [in]  URLZONEREG ulrZoneReg);
+
+    HRESULT SetZoneCustomPolicy(
+        [in] DWORD dwZone,
+        [in] REFGUID guidKey,
+        [in] BYTE *ppPolicy,
+        [in] DWORD pcbPolicy,
+        [in] URLZONEREG ulrZoneReg);
+
+    HRESULT GetZoneActionPolicy(
+        [in]  DWORD dwZone,
+        [in]  DWORD dwAction,
+        [out] BYTE* pPolicy,
+        [in]  DWORD cbPolicy,
+        [in]  URLZONEREG urlZoneReg);
+
+    HRESULT SetZoneActionPolicy(
+        [in] DWORD dwZone,
+        [in] DWORD dwAction,
+        [in] BYTE* pPolicy,
+        [in] DWORD cbPolicy,
+        [in] URLZONEREG urlZoneReg);
+
+    HRESULT PromptAction(
+        [in] DWORD dwAction,
+        [in] HWND hwndParent,
+        [in] LPCWSTR pwszUrl,
+        [in] LPCWSTR pwszText,
+        [in] DWORD dwPromptFlags );
+
+    HRESULT LogAction(
+        [in] DWORD dwAction,
+        [in] LPCWSTR pwszUrl,
+        [in] LPCWSTR pwszText,
+        [in] DWORD dwLogFlags);
+
+    HRESULT CreateZoneEnumerator(
+        [out] DWORD* pdwEnum,
+        [out] DWORD* pdwCount,
+        [in]  DWORD dwFlags);
+
+    HRESULT GetZoneAt(
+        [in]  DWORD dwEnum,
+        [in]  DWORD dwIndex,
+        [out] DWORD* pdwZone);
+
+    HRESULT DestroyZoneEnumerator(
+        [in] DWORD dwEnum);
+
+    HRESULT CopyTemplatePoliciesToZone(
+        [in] DWORD dwTemplate,
+        [in] DWORD dwZone,
+        [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetZoneManagerEx interface
+ */
+[
+    local,
+    object,
+    uuid(A4C23339-8E06-431E-9BF4-7E711C085648),
+    pointer_default(unique)
+]
+interface IInternetZoneManagerEx : IInternetZoneManager
+{
+    HRESULT GetZoneActionPolicyEx(
+        [in]  DWORD dwZone,
+        [in]  DWORD dwAction,
+        [out] BYTE* pPolicy,
+        [in]  DWORD cbPolicy,
+        [in]  URLZONEREG urlZoneReg,
+        [in]  DWORD dwFlags);
+
+    HRESULT SetZoneActionPolicyEx(
+        [in] DWORD dwZone,
+        [in] DWORD dwAction,
+        [in] BYTE* pPolicy,
+        [in] DWORD cbPolicy,
+        [in] URLZONEREG urlZoneReg,
+        [in] DWORD dwFlags);
+
+}
+
+/*****************************************************************************
+ * IInternetZoneManagerEx2 interface
+ */
+
+cpp_quote("#define SECURITY_IE_STATE_GREEN 0")
+cpp_quote("#define SECURITY_IE_STATE_RED   1")
+
+[
+    local,
+    object,
+    uuid(EDC17559-DD5D-4846-8EEF-8BECBA5A4ABF),
+    pointer_default(unique)
+]
+interface IInternetZoneManagerEx2 : IInternetZoneManagerEx
+{
+    HRESULT GetZoneAttributesEx(
+        [in]              DWORD dwZone,
+        [in, out, unique] ZONEATTRIBUTES* pZoneAttributes,
+        [in]              DWORD dwFlags);
+
+    HRESULT GetZoneSecurityState(
+        [in]      DWORD dwZoneIndex,
+        [in]      BOOL fRespectPolicy,
+        [in, out] LPDWORD pdwState,
+        [in, out] BOOL *pfPolicyEncountered);
+
+    HRESULT GetIESecurityState(
+        [in]      BOOL fRespectPolicy,
+        [in, out] LPDWORD pdwState,
+        [in, out] BOOL *pfPolicyEncountered,
+        [in]      BOOL fNoCache);
+
+    HRESULT FixInsecureSettings(void);
+
+}
+
+
+typedef struct _tagSOFTDISTINFO
+{
+    ULONG cbSize;
+    DWORD dwFlags;
+    DWORD dwAdState;
+    LPWSTR szTitle;
+    LPWSTR szAbstract;
+    LPWSTR szHREF;
+    DWORD dwInstalledVersionMS;
+    DWORD dwInstalledVersionLS;
+    DWORD dwUpdateVersionMS;
+    DWORD dwUpdateVersionLS;
+    DWORD dwAdvertisedVersionMS;
+    DWORD dwAdvertisedVersionLS;
+    DWORD dwReserved;
+} SOFTDISTINFO, *LPSOFTDISTINFO;
+
+typedef struct _tagCODEBASEHOLD
+{
+    DWORD cbSize;
+    LPWSTR szDistUnit;
+    LPWSTR szCodeBase;
+    DWORD dwVersionMS;
+    DWORD dwVersionLS;
+    DWORD dwStyle;
+} CODEBASEHOLD, *LPCODEBASEHOLD;
+
+[
+    local,
+    object,
+    uuid(b15b8dc1-c7e1-11d0-8680-00aa00bdcb71),
+    pointer_default(unique)
+]
+interface ISoftDistExt : IUnknown
+{
+    HRESULT ProcessSoftDist(
+        [in] LPCWSTR szCDFURL,
+        [in] IXMLElement *pSoftDistElement,
+        [in, out] LPSOFTDISTINFO lpsdi );
+
+    HRESULT GetFirstCodeBase(
+        [in] LPWSTR *szCodeBase,
+        [in] LPDWORD dwMaxSize );
+
+    HRESULT GetNextCodeBase(
+        [in] LPWSTR *szCodeBase,
+        [in] LPDWORD dwMaxSize );
+
+    HRESULT AsyncInstallDistributionUnit(
+        [in] IBindCtx *pbc,
+        [in] LPVOID lpReserved,
+        [in] DWORD flags,
+        [in] LPCODEBASEHOLD lpcbh);
+}
+
+typedef enum _tagINTERNETFEATURELIST
+{
+    FEATURE_OBJECT_CACHING,
+    FEATURE_ZONE_ELEVATION,
+    FEATURE_MIME_HANDLING,
+    FEATURE_MIME_SNIFFING,
+    FEATURE_WINDOW_RESTRICTIONS,
+    FEATURE_WEBOC_POPUPMANAGEMENT,
+    FEATURE_BEHAVIORS,
+    FEATURE_DISABLE_MK_PROTOCOL,
+    FEATURE_LOCALMACHINE_LOCKDOWN,
+    FEATURE_SECURITYBAND,
+    FEATURE_RESTRICT_ACTIVEXINSTALL,
+    FEATURE_VALIDATE_NAVIGATE_URL,
+    FEATURE_RESTRICT_FILEDOWNLOAD,
+    FEATURE_ADDON_MANAGEMENT,
+    FEATURE_PROTOCOL_LOCKDOWN,
+    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,
+    FEATURE_SAFE_BINDTOOBJECT,
+    FEATURE_UNC_SAVEDFILECHECK,
+    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,
+    FEATURE_TABBED_BROWSING,
+    FEATURE_SSLUX,
+    FEATURE_DISABLE_NAVIGATION_SOUNDS,
+    FEATURE_DISABLE_LEGACY_COMPRESSION,
+    FEATURE_FORCE_ADDR_AND_STATUS,
+    FEATURE_XMLHTTP,
+    FEATURE_DISABLE_TELNET_PROTOCOL,
+    FEATURE_FEEDS,
+    FEATURE_BLOCK_INPUT_PROMPTS,
+    FEATURE_ENTRY_COUNT
+} INTERNETFEATURELIST;
+
+cpp_quote("#define SET_FEATURE_ON_THREAD                0x00000001")
+cpp_quote("#define SET_FEATURE_ON_PROCESS               0x00000002")
+cpp_quote("#define SET_FEATURE_IN_REGISTRY              0x00000004")
+cpp_quote("#define SET_FEATURE_ON_THREAD_LOCALMACHINE   0x00000008")
+cpp_quote("#define SET_FEATURE_ON_THREAD_INTRANET       0x00000010")
+cpp_quote("#define SET_FEATURE_ON_THREAD_TRUSTED        0x00000020")
+cpp_quote("#define SET_FEATURE_ON_THREAD_INTERNET       0x00000040")
+cpp_quote("#define SET_FEATURE_ON_THREAD_RESTRICTED     0x00000080")
+
+cpp_quote("#define GET_FEATURE_FROM_THREAD              0x00000001")
+cpp_quote("#define GET_FEATURE_FROM_PROCESS             0x00000002")
+cpp_quote("#define GET_FEATURE_FROM_REGISTRY            0x00000004")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_LOCALMACHINE 0x00000008")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_INTRANET     0x00000010")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_TRUSTED      0x00000020")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_INTERNET     0x00000040")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_RESTRICTED   0x00000080")
+
+typedef struct _tagPROTOCOLFILTERDATA {
+    DWORD cbSize;
+    IInternetProtocolSink *pProtocolSink;
+    IInternetProtocol *pProtocol;
+    IUnknown *pUnk;
+    DWORD dwFilterFlags;
+} PROTOCOLFILTERDATA;
+
+/*****************************************************************************
+ * IUri interface
+ */
+[
+    object,
+    uuid(a39ee748-6a27-4817-a6f2-13914bef5890),
+    pointer_default(unique)
+]
+interface IUri : IUnknown
+{
+    typedef enum
+    {
+        Uri_PROPERTY_ABSOLUTE_URI = 0,
+        Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI,
+        Uri_PROPERTY_AUTHORITY = 1,
+        Uri_PROPERTY_DISPLAY_URI = 2,
+        Uri_PROPERTY_DOMAIN = 3,
+        Uri_PROPERTY_EXTENSION = 4,
+        Uri_PROPERTY_FRAGMENT = 5,
+        Uri_PROPERTY_HOST = 6,
+        Uri_PROPERTY_PASSWORD = 7,
+        Uri_PROPERTY_PATH = 8,
+        Uri_PROPERTY_PATH_AND_QUERY = 9,
+        Uri_PROPERTY_QUERY = 10,
+        Uri_PROPERTY_RAW_URI = 11,
+        Uri_PROPERTY_SCHEME_NAME = 12,
+        Uri_PROPERTY_USER_INFO = 13,
+        Uri_PROPERTY_USER_NAME = 14,
+        Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME,
+        Uri_PROPERTY_HOST_TYPE = 15,
+        Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE,
+        Uri_PROPERTY_PORT = 16,
+        Uri_PROPERTY_SCHEME = 17,
+        Uri_PROPERTY_ZONE = 18,
+        Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE
+    } Uri_PROPERTY;
+
+    typedef enum
+    {
+        Uri_HOST_UNKNOWN = 0,
+        Uri_HOST_DNS = 1,
+        Uri_HOST_IPV4 = 2,
+        Uri_HOST_IPV6 = 3,
+        Uri_HOST_IDN = 4
+    } Uri_HOST_TYPE;
+
+    HRESULT GetPropertyBSTR(
+        [in]  Uri_PROPERTY uriProp,
+        [out] BSTR *pbstrProperty,
+        [in]  DWORD dwFlags);
+
+    HRESULT GetPropertyLength(
+        [in]  Uri_PROPERTY uriProp,
+        [out] DWORD *pcchProperty,
+        [in]  DWORD dwFlags);
+
+    HRESULT GetPropertyDWORD(
+        [in]  Uri_PROPERTY uriProp,
+        [out] DWORD *pdwProperty,
+        [in]  DWORD dwFlags);
+
+    HRESULT HasProperty(
+        [in] Uri_PROPERTY uriProp,
+        [out] BOOL *pfHasProperty);
+
+    HRESULT GetAbsoluteUri(
+        [out] BSTR *pbstrAbsoluteUri);
+
+    HRESULT GetAuthority(
+        [out] BSTR *pbstrAuthority);
+
+    HRESULT GetDisplayUri(
+        [out] BSTR *pbstrDisplayString);
+
+    HRESULT GetDomain(
+        [out] BSTR *pbstrDomain);
+
+    HRESULT GetExtension(
+        [out] BSTR *pbstrExtension);
+
+    HRESULT GetFragment(
+        [out] BSTR *pbstrFragment);
+
+    HRESULT GetHost(
+        [out] BSTR *pbstrHost);
+
+    HRESULT GetPassword(
+        [out] BSTR *pbstrPassword);
+
+    HRESULT GetPath(
+        [out] BSTR *pbstrPath);
+
+    HRESULT GetPathAndQuery(
+        [out] BSTR *pbstrPathAndQuery);
+
+    HRESULT GetQuery(
+        [out] BSTR *pbstrQuery);
+
+    HRESULT GetRawUri(
+        [out] BSTR *pbstrRawUri);
+
+    HRESULT GetSchemeName(
+        [out] BSTR *pbstrSchemeName);
+
+    HRESULT GetUserInfo(
+        [out] BSTR *pbstrUserInfo);
+
+    HRESULT GetUserName(
+        [out] BSTR *pbstrUserName);
+
+    HRESULT GetHostType(
+        [out] DWORD *pdwHostType);
+
+    HRESULT GetPort(
+        [out] DWORD *pdwPort);
+
+    HRESULT GetScheme(
+        [out] DWORD *pdwScheme);
+
+    HRESULT GetZone(
+        [out] DWORD *pdwZone);
+
+    HRESULT GetProperties(
+        [out] LPDWORD pdwFlags);
+
+    HRESULT IsEqual(
+        [in]  IUri *pUri,
+        [out] BOOL *pfEqual);
+}
+
+cpp_quote("HRESULT WINAPI CreateUri(LPCWSTR,DWORD,DWORD_PTR,IUri**);")
+cpp_quote("HRESULT WINAPI CreateUriWithFragment(LPCWSTR,LPCWSTR,DWORD,DWORD_PTR,IUri**);")
+cpp_quote("HRESULT WINAPI CreateUriFromMultiByteString(LPCSTR,DWORD,DWORD,DWORD,DWORD_PTR,IUri**);")
+
+cpp_quote("#define Uri_HAS_ABSOLUTE_URI    (1 << Uri_PROPERTY_ABSOLUTE_URI)")
+cpp_quote("#define Uri_HAS_AUTHORITY       (1 << Uri_PROPERTY_AUTHORITY)")
+cpp_quote("#define Uri_HAS_DISPLAY_URI     (1 << Uri_PROPERTY_DISPLAY_URI)")
+cpp_quote("#define Uri_HAS_DOMAIN          (1 << Uri_PROPERTY_DOMAIN)")
+cpp_quote("#define Uri_HAS_EXTENSION       (1 << Uri_PROPERTY_EXTENSION)")
+cpp_quote("#define Uri_HAS_FRAGMENT        (1 << Uri_PROPERTY_FRAGMENT)")
+cpp_quote("#define Uri_HAS_HOST            (1 << Uri_PROPERTY_HOST)")
+cpp_quote("#define Uri_HAS_PASSWORD        (1 << Uri_PROPERTY_PASSWORD)")
+cpp_quote("#define Uri_HAS_PATH            (1 << Uri_PROPERTY_PATH)")
+cpp_quote("#define Uri_HAS_QUERY           (1 << Uri_PROPERTY_QUERY)")
+cpp_quote("#define Uri_HAS_RAW_URI         (1 << Uri_PROPERTY_RAW_URI)")
+cpp_quote("#define Uri_HAS_SCHEME_NAME     (1 << Uri_PROPERTY_SCHEME_NAME)")
+cpp_quote("#define Uri_HAS_USER_NAME       (1 << Uri_PROPERTY_USER_NAME)")
+cpp_quote("#define Uri_HAS_PATH_AND_QUERY  (1 << Uri_PROPERTY_PATH_AND_QUERY)")
+cpp_quote("#define Uri_HAS_USER_INFO       (1 << Uri_PROPERTY_USER_INFO)")
+cpp_quote("#define Uri_HAS_HOST_TYPE       (1 << Uri_PROPERTY_HOST_TYPE)")
+cpp_quote("#define Uri_HAS_PORT            (1 << Uri_PROPERTY_PORT)")
+cpp_quote("#define Uri_HAS_SCHEME          (1 << Uri_PROPERTY_SCHEME)")
+cpp_quote("#define Uri_HAS_ZONE            (1 << Uri_PROPERTY_ZONE)")
+
+cpp_quote("#define Uri_CREATE_ALLOW_RELATIVE                  0x0001")
+cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME  0x0002")
+cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME      0x0004")
+cpp_quote("#define Uri_CREATE_NOFRAG                          0x0008")
+cpp_quote("#define Uri_CREATE_NO_CANONICALIZE                 0x0010")
+cpp_quote("#define Uri_CREATE_CANONICALIZE                    0x0100")
+cpp_quote("#define Uri_CREATE_FILE_USE_DOS_PATH               0x0020")
+cpp_quote("#define Uri_CREATE_DECODE_EXTRA_INFO               0x0040")
+cpp_quote("#define Uri_CREATE_NO_DECODE_EXTRA_INFO            0x0080")
+cpp_quote("#define Uri_CREATE_CRACK_UNKNOWN_SCHEMES           0x0200")
+cpp_quote("#define Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES        0x0400")
+cpp_quote("#define Uri_CREATE_PRE_PROCESS_HTML_URI            0x0800")
+cpp_quote("#define Uri_CREATE_NO_PRE_PROCESS_HTML_URI         0x1000")
+cpp_quote("#define Uri_CREATE_IE_SETTINGS                     0x2000")
+cpp_quote("#define Uri_CREATE_NO_IE_SETTINGS                  0x4000")
+cpp_quote("#define Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS  0x8000")
+
+cpp_quote("#define Uri_DISPLAY_NO_FRAGMENT  0x00000001")
+cpp_quote("#define Uri_PUNYCODE_IDN_HOST    0x00000002")
+cpp_quote("#define Uri_DISPLAY_IDN_HOST     0x00000004")
+
+cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8   0x00000001")
+cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_CP                     0x00000002")
+cpp_quote("#define Uri_ENCODING_HOST_IS_IDN                                  0x00000004")
+cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8                 0x00000008")
+cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_CP                   0x00000010")
+cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8   0x00000020")
+cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_CP                     0x00000040")
+cpp_quote("#define Uri_ENCODING_RFC (Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8)")
+
+cpp_quote("#define UriBuilder_USE_ORIGINAL_FLAGS  0x00000001")
+
+/*****************************************************************************
+ * IUriContainer interface
+ */
+[
+    local,
+    object,
+    uuid(a158a630-ed6f-45fb-b987-f68676f57752),
+    pointer_default(unique)
+]
+interface IUriContainer : IUnknown
+{
+    HRESULT GetIUri([out] IUri **ppIUri);
+}
+
+/*****************************************************************************
+ * IUriBuilder interface
+ */
+[
+    local,
+    object,
+    uuid(4221b2e1-8955-46c0-bd5b-de9897565de7),
+    pointer_default(unique)
+]
+interface IUriBuilder: IUnknown
+{
+    HRESULT CreateUriSimple(
+        [in]  DWORD       dwAllowEncodingPropertyMask,
+        [in]  DWORD_PTR   dwReserved,
+        [out] IUri      **ppIUri);
+
+    HRESULT CreateUri(
+        [in]  DWORD       dwCreateFlags,
+        [in]  DWORD       dwAllowEncodingPropertyMask,
+        [in]  DWORD_PTR   dwReserved,
+        [out] IUri      **ppIUri);
+
+    HRESULT CreateUriWithFlags(
+        [in]  DWORD       dwCreateFlags,
+        [in]  DWORD       dwUriBuilderFlags,
+        [in]  DWORD       dwAllowEncodingPropertyMask,
+        [in]  DWORD_PTR   dwReserved,
+        [out] IUri      **ppIUri);
+
+    HRESULT GetIUri(
+        [out] IUri **ppIUri);
+
+    HRESULT SetIUri(
+        [in, unique] IUri *pIUri);
+
+    HRESULT GetFragment(
+        [out] DWORD   *pcchFragment,
+        [out] LPCWSTR *ppwzFragment);
+
+    HRESULT GetHost(
+        [out] DWORD   *pcchHost,
+        [out] LPCWSTR *ppwzHost);
+
+    HRESULT GetPassword(
+        [out] DWORD   *pcchPassword,
+        [out] LPCWSTR *ppwzPassword);
+
+    HRESULT GetPath(
+        [out] DWORD   *pcchPath,
+        [out] LPCWSTR *ppwzPath);
+
+    HRESULT GetPort(
+        [out] BOOL  *pfHasPort,
+        [out] DWORD *pdwPort);
+
+    HRESULT GetQuery(
+        [out] DWORD   *pcchQuery,
+        [out] LPCWSTR *ppwzQuery);
+
+    HRESULT GetSchemeName(
+        [out] DWORD   *pcchSchemeName,
+        [out] LPCWSTR *ppwzSchemeName);
+
+    HRESULT GetUserName(
+        [out] DWORD   *pcchUserName,
+        [out] LPCWSTR *ppwzUserName);
+
+    HRESULT SetFragment(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT SetHost(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT SetPassword(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT SetPath(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT SetPort(
+        [in] BOOL  fHasPort,
+        [in] DWORD dwNewValue);
+
+    HRESULT SetQuery(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT SetSchemeName(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT SetUserName(
+        [in] LPCWSTR pwzNewValue);
+
+    HRESULT RemoveProperties(
+        [in] DWORD dwPropertyMask);
+
+    HRESULT HasBeenModified(
+        [out] BOOL *pfModified);
+};
+
+cpp_quote("HRESULT WINAPI CreateIUriBuilder(IUri*,DWORD,DWORD_PTR,IUriBuilder**);")
+
+/*****************************************************************************
+ * IUriBuilderFactory interface
+ */
+[
+    local,
+    object,
+    uuid(e982ce48-0b96-440c-bc37-0c869b27a29e),
+    pointer_default(unique)
+]
+interface IUriBuilderFactory : IUnknown
+{
+    HRESULT CreateIUriBuilder(
+        [in]  DWORD dwFlags,
+        [in]  DWORD_PTR dwReserved,
+        [out] IUriBuilder **ppIUriBuilder);
+
+    HRESULT CreateInitializedIUriBuilder(
+        [in]  DWORD dwFlags,
+        [in]  DWORD_PTR dwReserved,
+        [out] IUriBuilder **ppIUriBuilder);
+}
+
+/*****************************************************************************
+ * IInternetProtocolEx interface
+ */
+[
+    local,
+    object,
+    uuid(c7a98e66-1010-492c-a1c8-c809e1f75905),
+    pointer_default(unique)
+]
+interface IInternetProtocolEx : IInternetProtocol
+{
+    HRESULT StartEx(
+        [in] IUri *pUri,
+        [in] IInternetProtocolSink *pOIProtSink,
+        [in] IInternetBindInfo *pOIBindInfo,
+        [in] DWORD grfPI,
+        [in] HANDLE *dwReserved);
+}
+
+/*****************************************************************************
+ * IGetBindHandle interface
+ */
+[
+    local,
+    object,
+    uuid(AF0FF408-129D-4b20-91F0-02BD23D88352),
+    pointer_default(unique)
+]
+interface IGetBindHandle : IUnknown
+{
+    typedef [unique] IGetBindHandle *LPGETBINDHANDLE;
+
+    typedef enum {
+        BINDHANDLETYPES_APPCACHE    = 0x00000000,
+        BINDHANDLETYPES_DEPENDENCY  = 0x00000001,
+        BINDHANDLETYPES_COUNT
+    } BINDHANDLETYPES;
+
+    HRESULT GetBindHandle(
+            [in] BINDHANDLETYPES enumRequestedHandle,
+            [out] HANDLE *pRetHandle);
+}
+
+cpp_quote("#define CONFIRMSAFETYACTION_LOADOBJECT  0x00000001")
+
+struct CONFIRMSAFETY
+{
+    CLSID clsid;
+    IUnknown *pUnk;
+    DWORD dwFlags;
+};
+
+cpp_quote("EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;")
+
+cpp_quote("DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);")
+cpp_quote("DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);")
+cpp_quote("DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
+cpp_quote("DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);")
+
+cpp_quote("DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);")
+cpp_quote("DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+
+cpp_quote("#define URLMON_OPTION_USERAGENT          0x10000001")
+cpp_quote("#define URLMON_OPTION_USERAGENT_REFRESH  0x10000002")
+cpp_quote("#define URLMON_OPTION_URL_ENCODING       0x10000004")
+
+cpp_quote("#define MK_S_ASYNCHRONOUS                _HRESULT_TYPEDEF_(0x000401E8)")
+cpp_quote("#ifndef S_ASYNCHRONOUS")
+cpp_quote("#define S_ASYNCHRONOUS                   MK_S_ASYNCHRONOUS")
+cpp_quote("#endif")
+
+cpp_quote("#define INET_E_ERROR_FIRST               _HRESULT_TYPEDEF_(0x800C0002)")
+cpp_quote("#define INET_E_INVALID_URL               _HRESULT_TYPEDEF_(0x800C0002)")
+cpp_quote("#define INET_E_NO_SESSION                _HRESULT_TYPEDEF_(0x800C0003)")
+cpp_quote("#define INET_E_CANNOT_CONNECT            _HRESULT_TYPEDEF_(0x800C0004)")
+cpp_quote("#define INET_E_RESOURCE_NOT_FOUND        _HRESULT_TYPEDEF_(0x800C0005)")
+cpp_quote("#define INET_E_OBJECT_NOT_FOUND          _HRESULT_TYPEDEF_(0x800C0006)")
+cpp_quote("#define INET_E_DATA_NOT_AVAILABLE        _HRESULT_TYPEDEF_(0x800C0007)")
+cpp_quote("#define INET_E_DOWNLOAD_FAILURE          _HRESULT_TYPEDEF_(0x800C0008)")
+cpp_quote("#define INET_E_AUTHENTICATION_REQUIRED   _HRESULT_TYPEDEF_(0x800C0009)")
+cpp_quote("#define INET_E_NO_VALID_MEDIA            _HRESULT_TYPEDEF_(0x800C000A)")
+cpp_quote("#define INET_E_CONNECTION_TIMEOUT        _HRESULT_TYPEDEF_(0x800C000B)")
+cpp_quote("#define INET_E_INVALID_REQUEST           _HRESULT_TYPEDEF_(0x800C000C)")
+cpp_quote("#define INET_E_UNKNOWN_PROTOCOL          _HRESULT_TYPEDEF_(0x800C000D)")
+cpp_quote("#define INET_E_SECURITY_PROBLEM          _HRESULT_TYPEDEF_(0x800C000E)")
+cpp_quote("#define INET_E_CANNOT_LOAD_DATA          _HRESULT_TYPEDEF_(0x800C000F)")
+cpp_quote("#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)")
+cpp_quote("#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)")
+cpp_quote("#define INET_E_USE_DEFAULT_SETTING       _HRESULT_TYPEDEF_(0x800C0012L)")
+cpp_quote("#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLHANDLER")
+cpp_quote("#define INET_E_QUERYOPTION_UNKNOWN       _HRESULT_TYPEDEF_(0x800C0013)")
+cpp_quote("#define INET_E_REDIRECT_FAILED           _HRESULT_TYPEDEF_(0x800C0014)")
+cpp_quote("#define INET_E_REDIRECT_TO_DIR           _HRESULT_TYPEDEF_(0x800C0015)")
+cpp_quote("#define INET_E_CANNOT_LOCK_REQUEST       _HRESULT_TYPEDEF_(0x800C0016)")
+cpp_quote("#define INET_E_USE_EXTENDED_BINDING      _HRESULT_TYPEDEF_(0x800C0017)")
+cpp_quote("#define INET_E_TERMINATED_BIND           _HRESULT_TYPEDEF_(0x800C0018)")
+cpp_quote("#define INET_E_INVALID_CERTIFICATE       _HRESULT_TYPEDEF_(0x800C0019)")
+cpp_quote("#define INET_E_CODE_DOWNLOAD_DECLINED    _HRESULT_TYPEDEF_(0x800C0100)")
+cpp_quote("#define INET_E_RESULT_DISPATCHED         _HRESULT_TYPEDEF_(0x800C0200)")
+cpp_quote("#define INET_E_CANNOT_REPLACE_SFP_FILE   _HRESULT_TYPEDEF_(0x800C0300)")
+cpp_quote("#define INET_E_CODE_INSTALL_SUPPRESSED   _HRESULT_TYPEDEF_(0x800C0400)")
+cpp_quote("#define INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY  _HRESULT_TYPEDEF_(0x800C0500)")
+cpp_quote("#define INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE        _HRESULT_TYPEDEF_(0x800C0501)")
+cpp_quote("#define INET_E_ERROR_LAST                INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE")
+
+cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);")
+cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);")
+cpp_quote("HRESULT WINAPI CreateURLMonikerEx(IMoniker*,LPCWSTR,IMoniker**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateURLMonikerEx2(IMoniker*,IUri*,IMoniker**,DWORD);")
+cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);")
+cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);")
+cpp_quote("HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);")
+cpp_quote("HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);")
+cpp_quote("HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);")
+cpp_quote("HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCombineUrlEx(IUri*,LPCWSTR,DWORD,IUri**,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCombineIUri(IUri*,IUri*,DWORD,IUri**,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetParseIUri(IUri*,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
+cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST,DWORD dwFlags);")
+cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST,DWORD,LPCWSTR,IInternetSecurityManager*);")
+cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri*,IUri**,PSUACTION,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI AsyncInstallDistributionUnit(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPCWSTR,IBindCtx*,LPVOID,DWORD);")
+cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
+cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
+cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
+cpp_quote("HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);")
+cpp_quote("HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);")
+cpp_quote("HRESULT WINAPI HlinkGoBack(IUnknown*);")
+cpp_quote("HRESULT WINAPI HlinkGoForward(IUnknown*);")
+cpp_quote("HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);")
+cpp_quote("HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);")
+cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);")
+cpp_quote("HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);")
+cpp_quote("HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);")
+cpp_quote("HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);")
+cpp_quote("HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);")
+cpp_quote("HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);")
+cpp_quote("HRESULT WINAPI CopyBindInfo(const BINDINFO*,BINDINFO*);")
+cpp_quote("void WINAPI ReleaseBindInfo(BINDINFO*);")
+cpp_quote("HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
+
+cpp_quote("#define OInetCombineUrl CoInternetCombineUrl")
+cpp_quote("#define OInetCompareUrl CoInternetCompareUrl")
+cpp_quote("#define OInetGetSession CoInternetGetSession")
+
+cpp_quote("BOOL WINAPI IsLoggingEnabledA(LPCSTR);")
+cpp_quote("BOOL WINAPI IsLoggingEnabledW(LPCWSTR);")
+cpp_quote("#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)")
+
+cpp_quote("#define MKSYS_URLMONIKER 6")
+cpp_quote("#define URL_MK_LEGACY            0")
+cpp_quote("#define URL_MK_UNIFORM           1")
+cpp_quote("#define URL_MK_NO_CANONICALIZE   2")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h
new file mode 100644
index 0000000..170d557
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_USERENV_H
+#define __WINE_USERENV_H
+
+#include <wbemcli.h>
+#include <profinfo.h>
+
+#define PT_TEMPORARY    0x00000001
+#define PT_ROAMING      0x00000002
+#define PT_MANDATORY    0x00000004
+
+typedef enum _GPO_LINK {
+    GPLinkUnknown = 0,
+    GPLinkMachine,
+    GPLinkSite,
+    GPLinkDomain,
+    GPLinkOrganizationalUnit
+} GPO_LINK, *PGPO_LINK;
+
+typedef struct _GROUP_POLICY_OBJECTA {
+    DWORD dwOptions;
+    DWORD dwVersion;
+    LPSTR lpDSPath;
+    LPSTR lpFileSysPath;
+    LPSTR lpDisplayName;
+    CHAR szGPOName[50];
+    GPO_LINK GPOLink;
+    LPARAM lParam;
+    struct _GROUP_POLICY_OBJECTA *pNext;
+    struct _GROUP_POLICY_OBJECTA *pPrev;
+    LPSTR lpExtensions;
+    LPARAM lParam2;
+    LPSTR lpLink;
+} GROUP_POLICY_OBJECTA, *PGROUP_POLICY_OBJECTA;
+
+typedef struct _GROUP_POLICY_OBJECTW {
+    DWORD dwOptions;
+    DWORD dwVersion;
+    LPWSTR lpDSPath;
+    LPWSTR lpFileSysPath;
+    LPWSTR lpDisplayName;
+    WCHAR szGPOName[50];
+    GPO_LINK GPOLink;
+    LPARAM lParam;
+    struct _GROUP_POLICY_OBJECTW *pNext;
+    struct _GROUP_POLICY_OBJECTW *pPrev;
+    LPWSTR lpExtensions;
+    LPARAM lParam2;
+    LPWSTR lpLink;
+} GROUP_POLICY_OBJECTW, *PGROUP_POLICY_OBJECTW;
+
+DECL_WINELIB_TYPE_AW(GROUP_POLICY_OBJECT)
+DECL_WINELIB_TYPE_AW(PGROUP_POLICY_OBJECT)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI CreateEnvironmentBlock(LPVOID*,HANDLE,BOOL);
+BOOL WINAPI DestroyEnvironmentBlock(LPVOID);
+HANDLE WINAPI EnterCriticalPolicySection(BOOL);
+BOOL WINAPI ExpandEnvironmentStringsForUserA(HANDLE,LPCSTR,LPSTR,DWORD);
+BOOL WINAPI ExpandEnvironmentStringsForUserW(HANDLE,LPCWSTR,LPWSTR,DWORD);
+#define     ExpandEnvironmentStringsForUser WINELIB_NAME_AW(ExpandEnvironmentStringsForUser)
+DWORD WINAPI GetAppliedGPOListW(DWORD,LPCWSTR,PSID,GUID*,PGROUP_POLICY_OBJECTW*);
+DWORD WINAPI GetAppliedGPOListA(DWORD,LPCSTR,PSID,GUID*,PGROUP_POLICY_OBJECTA*);
+#define      GetAppliedGPOList WINELIB_NAME_AW(GetAppliedGPOList)
+BOOL WINAPI GetUserProfileDirectoryA(HANDLE,LPSTR,LPDWORD);
+BOOL WINAPI GetUserProfileDirectoryW(HANDLE,LPWSTR,LPDWORD);
+#define     GetUserProfileDirectory WINELIB_NAME_AW(GetUserProfileDirectory)
+BOOL WINAPI GetProfilesDirectoryA(LPSTR,LPDWORD);
+BOOL WINAPI GetProfilesDirectoryW(LPWSTR,LPDWORD);
+#define     GetProfilesDirectory WINELIB_NAME_AW(GetProfilesDirectory)
+BOOL WINAPI GetAllUsersProfileDirectoryA(LPSTR,LPDWORD);
+BOOL WINAPI GetAllUsersProfileDirectoryW(LPWSTR,LPDWORD);
+#define     GetAllUsersProfileDirectory WINELIB_NAME_AW(GetAllUsersProfileDirectory)
+BOOL WINAPI GetProfileType(DWORD*);
+BOOL WINAPI LeaveCriticalPolicySection(HANDLE);
+BOOL WINAPI LoadUserProfileA(HANDLE,LPPROFILEINFOA);
+BOOL WINAPI LoadUserProfileW(HANDLE,LPPROFILEINFOW);
+#define     LoadUserProfile WINELIB_NAME_AW(LoadUserProfile)
+BOOL WINAPI RegisterGPNotification(HANDLE,BOOL);
+BOOL WINAPI UnloadUserProfile(HANDLE,HANDLE);
+BOOL WINAPI UnregisterGPNotification(HANDLE);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_USERENV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h
new file mode 100644
index 0000000..814932b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2005 Steven Edwards
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __USP10_H
+#define __USP10_H
+
+#include <windows.h>
+/* FIXME: #include <specstrings.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** ScriptStringAnalyse */
+#define  SSA_PASSWORD         0x00000001
+#define  SSA_TAB              0x00000002
+#define  SSA_CLIP             0x00000004
+#define  SSA_FIT              0x00000008
+#define  SSA_DZWG             0x00000010
+#define  SSA_FALLBACK         0x00000020
+#define  SSA_BREAK            0x00000040
+#define  SSA_GLYPHS           0x00000080
+#define  SSA_RTL              0x00000100
+#define  SSA_GCP              0x00000200
+#define  SSA_HOTKEY           0x00000400
+#define  SSA_METAFILE         0x00000800
+#define  SSA_LINK             0x00001000
+#define  SSA_HIDEHOTKEY       0x00002000
+#define  SSA_HOTKEYONLY       0x00002400
+#define  SSA_FULLMEASURE      0x04000000
+#define  SSA_LPKANSIFALLBACK  0x08000000
+#define  SSA_PIDX             0x10000000
+#define  SSA_LAYOUTRTL        0x20000000
+#define  SSA_DONTGLYPH        0x40000000 
+#define  SSA_NOKASHIDA        0x80000000 
+
+/** StringIsComplex */
+#define  SIC_COMPLEX     1
+#define  SIC_ASCIIDIGIT  2
+#define  SIC_NEUTRAL     4
+
+/** ScriptGetCMap */
+#define SGCM_RTL  0x00000001
+
+/** ScriptApplyDigitSubstitution */
+#define SCRIPT_DIGITSUBSTITUTE_CONTEXT      0
+#define SCRIPT_DIGITSUBSTITUTE_NONE         1
+#define SCRIPT_DIGITSUBSTITUTE_NATIONAL     2
+#define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL  3
+
+#define SCRIPT_UNDEFINED  0
+
+#define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200)
+
+typedef enum tag_SCRIPT_JUSTIFY {
+  SCRIPT_JUSTIFY_NONE           = 0,
+  SCRIPT_JUSTIFY_ARABIC_BLANK   = 1,
+  SCRIPT_JUSTIFY_CHARACTER      = 2,
+  SCRIPT_JUSTIFY_RESERVED1      = 3,
+  SCRIPT_JUSTIFY_BLANK          = 4,
+  SCRIPT_JUSTIFY_RESERVED2      = 5,
+  SCRIPT_JUSTIFY_RESERVED3      = 6,
+  SCRIPT_JUSTIFY_ARABIC_NORMAL  = 7,
+  SCRIPT_JUSTIFY_ARABIC_KASHIDA = 8,
+  SCRIPT_JUSTIFY_ARABIC_ALEF    = 9,
+  SCRIPT_JUSTIFY_ARABIC_HA      = 10,
+  SCRIPT_JUSTIFY_ARABIC_RA      = 11,
+  SCRIPT_JUSTIFY_ARABIC_BA      = 12,
+  SCRIPT_JUSTIFY_ARABIC_BARA    = 13,
+  SCRIPT_JUSTIFY_ARABIC_SEEN    = 14,
+  SCRIPT_JUSTIFY_ARABIC_SEEN_M  = 15,
+} SCRIPT_JUSTIFY;
+
+typedef struct tag_SCRIPT_CONTROL {
+  DWORD uDefaultLanguage	:16;
+  DWORD fContextDigits		:1;
+  DWORD fInvertPreBoundDir	:1;
+  DWORD fInvertPostBoundDir	:1;
+  DWORD fLinkStringBefore	:1;
+  DWORD fLinkStringAfter	:1;
+  DWORD fNeutralOverride	:1;
+  DWORD fNumericOverride	:1;
+  DWORD fLegacyBidiClass	:1;
+  DWORD fMergeNeutralItems	:1;
+  DWORD fReserved		:7;
+} SCRIPT_CONTROL;
+
+typedef struct {
+  DWORD langid			:16;
+  DWORD fNumeric		:1;
+  DWORD fComplex		:1;     
+  DWORD fNeedsWordBreaking	:1;     
+  DWORD fNeedsCaretInfo		:1;
+  DWORD bCharSet		:8;
+  DWORD fControl		:1;
+  DWORD fPrivateUseArea		:1;
+  DWORD fNeedsCharacterJustify	:1;
+  DWORD fInvalidGlyph		:1;
+  DWORD fInvalidLogAttr		:1;
+  DWORD fCDM			:1;
+  DWORD fAmbiguousCharSet	:1;
+  DWORD fClusterSizeVaries	:1;
+  DWORD fRejectInvalid		:1;
+} SCRIPT_PROPERTIES;
+
+typedef struct tag_SCRIPT_STATE {
+  WORD uBidiLevel		:5;
+  WORD fOverrideDirection	:1;
+  WORD fInhibitSymSwap		:1;
+  WORD fCharShape		:1;
+  WORD fDigitSubstitute		:1;
+  WORD fInhibitLigate		:1;
+  WORD fDisplayZWG		:1;
+  WORD fArabicNumContext	:1;
+  WORD fGcpClusters		:1;
+  WORD fReserved		:1;
+  WORD fEngineReserved		:2;
+} SCRIPT_STATE;
+
+typedef struct tag_SCRIPT_ANALYSIS {
+  WORD eScript			:10;
+  WORD fRTL			:1;
+  WORD fLayoutRTL		:1;
+  WORD fLinkBefore		:1;
+  WORD fLinkAfter		:1;
+  WORD fLogicalOrder		:1;
+  WORD fNoGlyphIndex		:1;
+  SCRIPT_STATE 	s;
+} SCRIPT_ANALYSIS;
+
+typedef struct tag_SCRIPT_ITEM {
+  int iCharPos;
+  SCRIPT_ANALYSIS a;
+} SCRIPT_ITEM;
+
+typedef struct tag_SCRIPT_DIGITSUBSTITUTE {
+  DWORD NationalDigitLanguage		:16;
+  DWORD TraditionalDigitLanguage	:16;
+  DWORD DigitSubstitute			:8;
+  DWORD dwReserved;
+} SCRIPT_DIGITSUBSTITUTE;
+
+typedef struct tag_SCRIPT_FONTPROPERTIES {
+  int   cBytes;
+  WORD wgBlank;
+  WORD wgDefault;
+  WORD wgInvalid;
+  WORD wgKashida;
+  int iKashidaWidth;
+} SCRIPT_FONTPROPERTIES;
+
+typedef struct tag_SCRIPT_TABDEF {
+  int cTabStops;
+  int iScale;
+  int *pTabStops;
+  int iTabOrigin;
+} SCRIPT_TABDEF;
+
+typedef struct tag_SCRIPT_VISATTR {
+  WORD uJustification   :4;
+  WORD fClusterStart    :1;
+  WORD fDiacritic       :1;
+  WORD fZeroWidth       :1;
+  WORD fReserved        :1;
+  WORD fShapeReserved   :8;
+} SCRIPT_VISATTR;
+
+typedef struct tag_SCRIPT_LOGATTR {
+  BYTE    fSoftBreak      :1;
+  BYTE    fWhiteSpace     :1;
+  BYTE    fCharStop       :1;
+  BYTE    fWordStop       :1;
+  BYTE    fInvalid        :1;
+  BYTE    fReserved       :3;
+} SCRIPT_LOGATTR;
+
+typedef void *SCRIPT_CACHE;
+typedef void *SCRIPT_STRING_ANALYSIS; 
+
+#ifndef LSDEFS_DEFINED
+typedef struct tagGOFFSET {
+  LONG  du;
+  LONG  dv;
+} GOFFSET;
+#endif
+
+typedef ULONG OPENTYPE_TAG;
+
+typedef struct tagOPENTYPE_FEATURE_RECORD
+{
+    OPENTYPE_TAG tagFeature;
+    LONG         lParameter;
+} OPENTYPE_FEATURE_RECORD;
+
+typedef struct tagSCRIPT_GLYPHPROP
+{
+    SCRIPT_VISATTR sva;
+    WORD           reserved;
+} SCRIPT_GLYPHPROP;
+
+typedef struct tagSCRIPT_CHARPROP
+{
+    WORD fCanGlyphAlone  :1;
+    WORD reserved        :15;
+} SCRIPT_CHARPROP;
+
+typedef struct tagTEXTRANGE_PROPERTIES
+{
+    OPENTYPE_FEATURE_RECORD *potfRecords;
+    INT                     cotfRecords;
+} TEXTRANGE_PROPERTIES;
+
+/* Function Declarations */
+
+HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE* psds, 
+                                            SCRIPT_CONTROL* psc, SCRIPT_STATE* pss);
+HRESULT WINAPI ScriptApplyLogicalWidth(const int *piDx, int cChars, int cGlyphs, const WORD *pwLogClust,
+                                       const SCRIPT_VISATTR *psva, const int *piAdvance,
+                                       const SCRIPT_ANALYSIS *psa, ABC *pABC, int *piJustify);
+HRESULT WINAPI ScriptRecordDigitSubstitution(LCID Locale, SCRIPT_DIGITSUBSTITUTE *psds);
+HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItems, 
+                             const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, 
+                             SCRIPT_ITEM *pItems, int *pcItems);
+HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars, int cChars,
+                             DWORD dwFlags, WORD *pwOutGlyphs);
+HRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPROPERTIES *sfp);
+HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD wGlyph, ABC *pABC);
+HRESULT WINAPI ScriptGetLogicalWidths(const SCRIPT_ANALYSIS *psa, int cChars, int cGlyphs,
+                                      const int *piGlyphWidth, const WORD *pwLogClust,
+                                      const SCRIPT_VISATTR *psva, int *piDx);
+HRESULT WINAPI ScriptGetProperties(const SCRIPT_PROPERTIES ***ppSp, int *piNumScripts);
+HRESULT WINAPI ScriptStringAnalyse(HDC hdc, 
+				   const void *pString, 
+				   int cString, 
+				   int cGlyphs,
+				   int iCharset,
+				   DWORD dwFlags,
+				   int iReqWidth,
+				   SCRIPT_CONTROL *psControl,
+				   SCRIPT_STATE *psState,
+				   const int *piDx,
+				   SCRIPT_TABDEF *pTabdef,
+				   const BYTE *pbInClass,
+				   SCRIPT_STRING_ANALYSIS *pssa);
+HRESULT WINAPI ScriptStringValidate(SCRIPT_STRING_ANALYSIS ssa);
+HRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *pssa);
+HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc);
+HRESULT WINAPI ScriptIsComplex(const WCHAR* pwcInChars, int cInChars, DWORD dwFlags);
+HRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *psva, const int *piAdvance, int cGlyphs,
+                             int iDx, int iMinKashida, int *piJustify);
+HRESULT WINAPI ScriptLayout(int cRuns, const BYTE *pbLevel, int *piVisualToLogical, int *piLogicalToVisual);
+HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, int cChars, int cMaxGlyphs,
+                           SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, WORD *pwLogClust, SCRIPT_VISATTR *psva, int *pcGlyphs);
+HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, int cGlyphs, const SCRIPT_VISATTR *psva,
+                           SCRIPT_ANALYSIS *psa, int *piAdvance, GOFFSET *pGoffset, ABC *pABC );
+HRESULT WINAPI ScriptBreak(const WCHAR *pwcChars, int cChars, const SCRIPT_ANALYSIS *psa, SCRIPT_LOGATTR *psla);
+HRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *tmHeight);
+HRESULT WINAPI ScriptCPtoX(int iCP, BOOL fTrailing, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva,
+                           const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piX);
+HRESULT WINAPI ScriptXtoCP(int iX, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva,
+                           const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piCP, int *piTrailing);
+HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrailing, int *pX);
+HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int *piCh , int *piTrailing);
+HRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS ssa, int *piDx);
+HRESULT WINAPI ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS ssa, UINT *puOrder);
+HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc,
+                               int iMinSel, int iMaxSel, BOOL fDisabled);
+HRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UINT fuOptions, const RECT *lprc,
+                             const SCRIPT_ANALYSIS *psa, const WCHAR *pwcReserved, int iReserved, const WORD *pwGlyphs,
+                             int cGlyphs, const int *piAdvance, const int *piJustify, const GOFFSET *pGoffset);
+const int* WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS ssa);
+const SCRIPT_LOGATTR* WINAPI ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS ssa);
+const SIZE* WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS ssa);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __USP10_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h
new file mode 100644
index 0000000..f0b8679
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef OUR_GUID_ENTRY
+#define OUR_GUID_ENTRY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+           DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8);
+#endif
+
+#define MEDIATYPE_NULL       GUID_NULL
+#define MEDIASUBTYPE_NULL    GUID_NULL
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_None,                    0xe436eb8e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIATYPE_Video,                      0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Audio,                      0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Text,                       0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Midi,                       0x7364696d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Stream,                     0xe436eb83, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIATYPE_Interleaved,                0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_File,                       0x656c6966, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_ScriptCommand,              0x73636d64, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_AUXLine21Data,              0x670aea80, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIATYPE_Timecode,                   0x0482dee3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIATYPE_LMRT,                       0x74726c6d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_URL_STREAM,                 0x736c7275, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YVU9,                    0x39555659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Y411,                    0x31313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Y41P,                    0x50313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YUY2,                    0x32595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YVYU,                    0x55595659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_UYVY,                    0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Y211,                    0x31313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YV12,                    0x32315659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AYUV,                    0x56555941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_CLJR,                    0x524a4c43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_IF09,                    0x39304649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_CPLA,                    0x414c5043, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MJPG,                    0x47504a4d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_TVMJ,                    0x4a4d5654, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_WAKE,                    0x454b4157, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_CFCC,                    0x43434643, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_IJPG,                    0x47504a49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Plum,                    0x6d756c50, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVCS,                    0x53435644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVSD,                    0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MDVF,                    0x4656444d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB1,                    0xe436eb78, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB4,                    0xe436eb79, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB8,                    0xe436eb7a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB565,                  0xe436eb7b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB555,                  0xe436eb7c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB24,                   0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32,                   0xe436eb7e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Overlay,                 0xe436eb7f, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Packet,             0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Payload,            0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1AudioPayload,       0x00000050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_MPEG1SystemStream,          0xe436eb82, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1System,             0xe436eb84, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1VideoCD,            0xe436eb85, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Video,              0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Audio,              0xe436eb87, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Avi,                     0xe436eb88, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Asf,                     0x3db80f90, 0x9412, 0x11d1, 0xad, 0xed, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTMovie,                 0xe436eb89, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTRpza,                  0x617a7072, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTSmc,                   0x20636d73, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTRle,                   0x20656c72, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTJpeg,                  0x6765706a, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_PCMAudio_Obsolete,       0xe436eb8a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_PCM,                     0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_WAVE,                    0xe436eb8b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AU,                      0xe436eb8c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AIFF,                    0xe436eb8d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_dvsd,                    0x64737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_dvhd,                    0x64687664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_dvsl,                    0x6c737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_BytePair,         0x6e8d4a22, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_GOPPacket,        0x6e8d4a23, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_VBIRawData,       0x6e8d4a24, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DssVideo,                0xa0af4f81, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DssAudio,                0xa0af4f82, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(MEDIASUBTYPE_VPVideo,                 0x5a9b6a40, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(MEDIASUBTYPE_VPVBI,                   0x5a9b6a41, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IAMCutListElement,                0xcde29520, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)
+OUR_GUID_ENTRY(IID_IAMFileCutListElement,            0xf0947070, 0x276c, 0x11d0, 0x83, 0x16, 0x00, 0x20, 0xaf, 0x11, 0xc0, 0x10)
+OUR_GUID_ENTRY(IID_IAMVideoCutListElement,           0xcde29522, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)
+OUR_GUID_ENTRY(IID_IAMAudioCutListElement,           0xcde29524, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)
+OUR_GUID_ENTRY(CLSID_CutListSource,                  0xa5ea8d20, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_IStandardCutList,                 0xa5ea8d29, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_IFileClip,                        0xa5ea8d2a, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_ICutListGraphBuilder,             0xa5ea8d2c, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CutListGraphBuilder,            0xa5ea8d2f, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_SimpleCutList,                  0xa5ea8d30, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_VideoFileClip,                  0xa5ea8d31, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_AudioFileClip,                  0xa5ea8d32, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CutListCacheMemory,             0xa5ea8d33, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder,            0xbf87b6e0, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder2,           0xbf87b6e1, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_ProtoFilterGraph,               0xe436ebb0, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_SystemClock,                    0xe436ebb1, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_FilterMapper,                   0xe436ebb2, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_FilterGraph,                    0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_FilterGraphNoThread,            0xe436ebb8, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_MPEG1Doc,                       0xe4bbd160, 0x4269, 0x11ce, 0x83, 0x8d, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_FileSource,                     0x701722e0, 0x8ae3, 0x11ce, 0xa8, 0x5c, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)
+OUR_GUID_ENTRY(CLSID_MPEG1PacketPlayer,              0x26c25940, 0x4ca9, 0x11ce, 0xa8, 0x28, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)
+OUR_GUID_ENTRY(CLSID_MPEG1Splitter,                  0x336475d0, 0x942a, 0x11ce, 0xa8, 0x70, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)
+OUR_GUID_ENTRY(CLSID_CMpegVideoCodec,                0xfeb50740, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c)
+OUR_GUID_ENTRY(CLSID_CMpegAudioCodec,                0x4a2286e0, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c)
+OUR_GUID_ENTRY(CLSID_TextRender,                     0xe30629d3, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)
+OUR_GUID_ENTRY(CLSID_InfTee,                         0xf8388a40, 0xd5bb, 0x11d0, 0xbe, 0x5a, 0x00, 0x80, 0xc7, 0x06, 0x56, 0x8e)
+OUR_GUID_ENTRY(CLSID_AviSplitter,                    0x1b544c20, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)
+OUR_GUID_ENTRY(CLSID_AviReader,                      0x1b544c21, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)
+OUR_GUID_ENTRY(CLSID_VfwCapture,                     0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)
+OUR_GUID_ENTRY(CLSID_CaptureProperties,              0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1f)
+OUR_GUID_ENTRY(CLSID_FGControl,                      0xe436ebb4, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_MOVReader,                      0x44584800, 0xf8ee, 0x11ce, 0xb2, 0xd4, 0x00, 0xdd, 0x01, 0x10, 0x1b, 0x85)
+OUR_GUID_ENTRY(CLSID_QuickTimeParser,                0xd51bd5a0, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a)
+OUR_GUID_ENTRY(CLSID_WAVEParser,                     0xd51bd5a1, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a)
+OUR_GUID_ENTRY(CLSID_QTDec,                          0xfdfe9681, 0x74a3, 0x11d0, 0xaf, 0xa7, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_AVIDoc,                         0xd3588ab0, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_AVIDocWriter,                   0xd3588ab1, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_SampleGrabber,                  0xc1f400a0, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)
+OUR_GUID_ENTRY(CLSID_NullRenderer,                   0xc1f400a4, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)
+OUR_GUID_ENTRY(CLSID_VideoRenderer,                  0x70e102b0, 0x5556, 0x11ce, 0x97, 0xc0, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_VideoRendererDefault,           0x6bc1cffa, 0x8fc1, 0x4261, 0xac, 0x22, 0xcf, 0xb4, 0xcc, 0x38, 0xdb, 0x50)
+OUR_GUID_ENTRY(CLSID_Colour,                         0x1643e180, 0x90f5, 0x11ce, 0x97, 0xd5, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_Dither,                         0x1da08500, 0x9edc, 0x11cf, 0xbc, 0x10, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(CLSID_ModexRenderer,                  0x07167665, 0x5011, 0x11cf, 0xbf, 0x33, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_AudioRender,                    0xe30629d1, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)
+OUR_GUID_ENTRY(CLSID_AudioProperties,                0x05589faf, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_DSoundRender,                   0x79376820, 0x07d0, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67)
+OUR_GUID_ENTRY(CLSID_AudioRecord,                    0xe30629d2, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)
+OUR_GUID_ENTRY(CLSID_AudioInputMixerProperties,      0x2ca8ca52, 0x3c3f, 0x11d2, 0xb7, 0x3d, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d)
+OUR_GUID_ENTRY(CLSID_AVIDec,                         0xcf49d4e0, 0x1115, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_AVIDraw,                        0xa888df60, 0x1e90, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9)
+OUR_GUID_ENTRY(CLSID_ACMWrapper,                     0x6a08cf80, 0x0e18, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67)
+OUR_GUID_ENTRY(CLSID_AsyncReader,                    0xe436ebb5, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_URLReader,                      0xe436ebb6, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_PersistMonikerPID,              0xe436ebb7, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_AMovie,                         0x5f2759c0, 0x7685, 0x11cf, 0x8b, 0x23, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60)
+OUR_GUID_ENTRY(CLSID_AVICo,                          0xd76e2820, 0x1563, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9)
+OUR_GUID_ENTRY(CLSID_FileWriter,                     0x8596e5f0, 0x0da5, 0x11d0, 0xbd, 0x21, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AviDest,                        0xe2510970, 0xf137, 0x11ce, 0x8b, 0x67, 0x00, 0xaa, 0x00, 0xa3, 0xf1, 0xa6)
+OUR_GUID_ENTRY(CLSID_AsfMux,                         0xf560ae42, 0x6cdd, 0x11d1, 0xad, 0xe2, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99)
+OUR_GUID_ENTRY(CLSID_AviMuxProptyPage,               0xc647b5c0, 0x157c, 0x11d0, 0xbd, 0x23, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AviMuxProptyPage1,              0x0a9ae910, 0x85c0, 0x11d0, 0xbd, 0x42, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AVIMIDIRender,                  0x07b65360, 0xc445, 0x11ce, 0xaf, 0xde, 0x00, 0xaa, 0x00, 0x6c, 0x14, 0xf4)
+OUR_GUID_ENTRY(CLSID_DVVideoCodec,                   0xb1b77c00, 0xc3e4, 0x11cf, 0xaf, 0x79, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVVideoEnc,                     0x13aa3650, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVSplitter,                     0x4eb31670, 0x9fc6, 0x11cf, 0xaf, 0x6e, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVMux,                          0x129d7e40, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_SeekingPassThru,                0x060af76c, 0x68dd, 0x11d0, 0x8f, 0xc1, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d)
+OUR_GUID_ENTRY(CLSID_Line21Decoder,                  0x6e8d4a20, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(CLSID_OverlayMixer,                   0xcd8743a1, 0x3736, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(CLSID_VBISurfaces,                    0x814b9800, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(CLSID_SystemDeviceEnum,               0x62be5d10, 0x60eb, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CDeviceMoniker,                 0x4315d437, 0x5b8c, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_VideoInputDeviceCategory,       0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CVidCapClassManager,            0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_LegacyAmFilterCategory,         0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CQzFilterClassManager,          0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_VideoCompressorCategory,        0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CIcmCoClassManager,             0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AudioCompressorCategory,        0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CAcmCoClassManager,             0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AudioInputDeviceCategory,       0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CWaveinClassManager,            0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AudioRendererCategory,          0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CWaveOutClassManager,           0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_MidiRendererCategory,           0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b)
+OUR_GUID_ENTRY(CLSID_CMidiOutClassManager,           0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b)
+OUR_GUID_ENTRY(CLSID_TransmitCategory,               0xcc7bfb41, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59)
+OUR_GUID_ENTRY(CLSID_DeviceControlCategory,          0xcc7bfb46, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59)
+OUR_GUID_ENTRY(CLSID_ActiveMovieCategories,          0xda4e3da0, 0xd07d, 0x11d0, 0xbd, 0x50, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_DVDHWDecodersCategory,          0x2721ae20, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00)
+OUR_GUID_ENTRY(CLSID_FilterMapper2,                  0xcda42200, 0xbd88, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_MemoryAllocator,                0x1e651cc0, 0xb199, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45)
+OUR_GUID_ENTRY(CLSID_MediaPropertyBag,               0xcdbd8d00, 0xc193, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_DvdGraphBuilder,                0xfcc152b7, 0xf372, 0x11d0, 0x8e, 0x00, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b)
+OUR_GUID_ENTRY(CLSID_DVDNavigator,                   0x9b8c4620, 0x2c1a, 0x11d0, 0x84, 0x93, 0x00, 0xa0, 0x24, 0x38, 0xad, 0x48)
+OUR_GUID_ENTRY(CLSID_SmartTee,                       0xcc58e280, 0x8aa1, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(FORMAT_None,                          0x0f6417d6, 0xc318, 0x11d0, 0xa4, 0x3f, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)
+OUR_GUID_ENTRY(FORMAT_VideoInfo,                     0x05589f80, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_VideoInfo2,                    0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(FORMAT_WaveFormatEx,                  0x05589f81, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_MPEGVideo,                     0x05589f82, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_MPEGStreams,                   0x05589f83, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_DvInfo,                        0x05589f84, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_DirectDrawProperties,           0x944d4c00, 0xdd52, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_PerformanceProperties,          0x59ce6880, 0xacf8, 0x11cf, 0xb5, 0x6e, 0x00, 0x80, 0xc7, 0xc4, 0xb6, 0x8a)
+OUR_GUID_ENTRY(CLSID_QualityProperties,              0x418afb70, 0xf8b8, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3)
+OUR_GUID_ENTRY(IID_IBaseVideoMixer,                  0x61ded640, 0xe912, 0x11ce, 0xa0, 0x99, 0x00, 0xaa, 0x00, 0x47, 0x9a, 0x58)
+OUR_GUID_ENTRY(IID_IDirectDrawVideo,                 0x36d39eb0, 0xdd75, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(IID_IQualProp,                        0x1bd0ecb0, 0xf8e2, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3)
+OUR_GUID_ENTRY(CLSID_VPObject,                       0xce292861, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPObject,                        0xce292862, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPControl,                       0x25df12c1, 0x3de0, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(CLSID_VPVBIObject,                    0x814b9801, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IVPVBIObject,                     0x814b9802, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IVPConfig,                        0xbc29a660, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPNotify,                        0xc76794a1, 0xd6c5, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPNotify2,                       0xebf47183, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPVBIConfig,                     0xec529b00, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IVPVBINotify,                     0xec529b01, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IMixerPinConfig,                  0x593cdde1, 0x0759, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IMixerPinConfig2,                 0xebf47182, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(CLSID_ModexProperties,                0x0618aa30, 0x6bc4, 0x11cf, 0xbf, 0x36, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(IID_IFullScreenVideo,                 0xdd1d7110, 0x7836, 0x11cf, 0xbf, 0x47, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(IID_IFullScreenVideoEx,               0x53479470, 0xf1dd, 0x11cf, 0xbc, 0x42, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(CLSID_DVDecPropertiesPage,            0x101193c0, 0x0bfe, 0x11d0, 0xaf, 0x91, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVEncPropertiesPage,            0x4150f050, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVMuxPropertyPage,              0x4db880e0, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(IID_IAMDirectSound,                   0x546f4260, 0xd53e, 0x11cf, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_IMpegAudioDecoder,                0xb45dd570, 0x3c77, 0x11d1, 0xab, 0xe1, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75)
+OUR_GUID_ENTRY(IID_IAMLine21Decoder,                 0x6e8d4a21, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(FORMAT_AnalogVideo,                   0x0482dde0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIATYPE_AnalogVideo,                0x0482dde1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_NTSC_M,      0x0482dde2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_B,       0x0482dde5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_D,       0x0482dde6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_G,       0x0482dde7, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_H,       0x0482dde8, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_I,       0x0482dde9, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_M,       0x0482ddea, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N,       0x0482ddeb, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_B,     0x0482ddf0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_D,     0x0482ddf1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_G,     0x0482ddf2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_H,     0x0482ddf3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K,     0x0482ddf4, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K1,    0x0482ddf5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_L,     0x0482ddf6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIATYPE_AnalogAudio,                0x0482dee1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(TIME_FORMAT_NONE,                     0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
+OUR_GUID_ENTRY(TIME_FORMAT_FRAME,                    0x7b785570, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_BYTE,                     0x7b785571, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_SAMPLE,                   0x7b785572, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_FIELD,                    0x7b785573, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_MEDIA_TIME,               0x7b785574, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(AMPROPSETID_Pin,                      0x9b00f101, 0x1567, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(PIN_CATEGORY_CAPTURE,                 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_PREVIEW,                 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_ANALOGVIDEOIN,           0xfb6c4283, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_VBI,                     0xfb6c4284, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT,               0xfb6c4285, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_NABTS,                   0xfb6c4286, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_EDS,                     0xfb6c4287, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_TELETEXT,                0xfb6c4288, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_CC,                      0xfb6c4289, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_STILL,                   0xfb6c428a, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_TIMECODE,                0xfb6c428b, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT_VBI,           0xfb6c428c, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(LOOK_UPSTREAM_ONLY,                   0xac798be0, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(LOOK_DOWNSTREAM_ONLY,                 0xac798be1, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_TVTunerFilterPropertyPage,      0x266eee41, 0x6c63, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(CLSID_CrossbarFilterPropertyPage,     0x71f96461, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_TVAudioFilterPropertyPage,      0x71f96463, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_VideoProcAmpPropertyPage,       0x71f96464, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_CameraControlPropertyPage,      0x71f96465, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_AnalogVideoDecoderPropertyPage, 0x71f96466, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_VideoStreamConfigPropertyPage,  0x71f96467, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_VideoMixingRenderer9,           0x51b4abf3, 0x748f, 0x4e3b, 0xa2, 0x76, 0xc8, 0x28, 0x33, 0x0e, 0x92, 0x6a)
+
+#undef OUR_GUID_ENTRY
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h
new file mode 100644
index 0000000..e496f01
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h
@@ -0,0 +1,217 @@
+/*
+ * Win32 5.1 theme definitions
+ *
+ * Copyright (C) 2003 Kevin Koltzau
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_UXTHEME_H
+#define __WINE_UXTHEME_H
+
+#include <commctrl.h>
+
+typedef HANDLE HTHEME;
+
+HRESULT WINAPI CloseThemeData(HTHEME hTheme);
+HRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*);
+
+#define DTBG_CLIPRECT        0x00000001
+#define DTBG_DRAWSOLID       0x00000002
+#define DTBG_OMITBORDER      0x00000004
+#define DTBG_OMITCONTENT     0x00000008
+#define DTBG_COMPUTINGREGION 0x00000010
+#define DTBG_MIRRORDC        0x00000020
+
+typedef struct _DTBGOPTS {
+    DWORD dwSize;
+    DWORD dwFlags;
+    RECT rcClip;
+} DTBGOPTS, *PDTBGOPTS;
+
+HRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*,
+                                     const DTBGOPTS*);
+HRESULT WINAPI DrawThemeEdge(HTHEME,HDC,int,int,const RECT*,UINT,UINT,
+                             RECT*);
+HRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int);
+HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*);
+
+#define DTT_GRAYED      0x1
+
+HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,
+                             const RECT*);
+
+#define ETDT_DISABLE       0x00000001
+#define ETDT_ENABLE        0x00000002
+#define ETDT_USETABTEXTURE 0x00000004
+#define ETDT_ENABLETAB     (ETDT_ENABLE|ETDT_USETABTEXTURE)
+
+HRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD);
+HRESULT WINAPI EnableTheming(BOOL);
+HRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int);
+
+#define STAP_ALLOW_NONCLIENT    (1<<0)
+#define STAP_ALLOW_CONTROLS     (1<<1)
+#define STAP_ALLOW_WEBCONTENT   (1<<2)
+
+DWORD WINAPI GetThemeAppProperties(void);
+HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME,HDC,int,int,
+                                             const RECT*,RECT*);
+HRESULT WINAPI GetThemeBackgroundExtent(HTHEME,HDC,int,int,const RECT*,RECT*);
+HRESULT WINAPI GetThemeBackgroundRegion(HTHEME,HDC,int,int,const RECT*,HRGN*);
+HRESULT WINAPI GetThemeBool(HTHEME,int,int,int,BOOL*);
+HRESULT WINAPI GetThemeColor(HTHEME,int,int,int,COLORREF*);
+
+#if defined(__GNUC__)
+# define SZ_THDOCPROP_DISPLAYNAME   (const WCHAR []){ 'D','i','s','p','l','a','y','N','a','m','e',0 }
+# define SZ_THDOCPROP_CANONICALNAME (const WCHAR []){ 'T','h','e','m','e','N','a','m','e',0 }
+# define SZ_THDOCPROP_TOOLTIP       (const WCHAR []){ 'T','o','o','l','T','i','p',0 }
+# define SZ_THDOCPROP_AUTHOR        (const WCHAR []){ 'a','u','t','h','o','r',0 }
+#elif defined(_MSC_VER)
+# define SZ_THDOCPROP_DISPLAYNAME   L"DisplayName"
+# define SZ_THDOCPROP_CANONICALNAME L"ThemeName"
+# define SZ_THDOCPROP_TOOLTIP       L"ToolTip"
+# define SZ_THDOCPROP_AUTHOR        L"author"
+#else
+static const WCHAR SZ_THDOCPROP_DISPLAYNAME[] =   { 'D','i','s','p','l','a','y','N','a','m','e',0 };
+static const WCHAR SZ_THDOCPROP_CANONICALNAME[] = { 'T','h','e','m','e','N','a','m','e',0 };
+static const WCHAR SZ_THDOCPROP_TOOLTIP[] =       { 'T','o','o','l','T','i','p',0 };
+static const WCHAR SZ_THDOCPROP_AUTHOR[] =        { 'a','u','t','h','o','r',0 };
+#endif
+
+HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR,LPCWSTR,LPWSTR,int);
+HRESULT WINAPI GetThemeEnumValue(HTHEME,int,int,int,int*);
+HRESULT WINAPI GetThemeFilename(HTHEME,int,int,int,LPWSTR,int);
+HRESULT WINAPI GetThemeFont(HTHEME,HDC,int,int,int,LOGFONTW*);
+HRESULT WINAPI GetThemeInt(HTHEME,int,int,int,int*);
+
+#define MAX_INTLIST_COUNT 10
+typedef struct _INTLIST {
+    int iValueCount;
+    int iValues[MAX_INTLIST_COUNT];
+} INTLIST, *PINTLIST;
+
+HRESULT WINAPI GetThemeIntList(HTHEME,int,int,int,INTLIST*);
+
+typedef struct _MARGINS {
+    int cxLeftWidth;
+    int cxRightWidth;
+    int cyTopHeight;
+    int cyBottomHeight;
+} MARGINS, *PMARGINS;
+
+HRESULT WINAPI GetThemeMargins(HTHEME,HDC,int,int,int,RECT*,MARGINS*);
+HRESULT WINAPI GetThemeMetric(HTHEME,HDC,int,int,int,int*);
+
+typedef enum {
+    TS_MIN,
+    TS_TRUE,
+    TS_DRAW
+} THEMESIZE;
+
+HRESULT WINAPI GetThemePartSize(HTHEME,HDC,int,int,RECT*,THEMESIZE,SIZE*);
+HRESULT WINAPI GetThemePosition(HTHEME,int,int,int,POINT*);
+
+typedef enum {
+    PO_STATE,
+    PO_PART,
+    PO_CLASS,
+    PO_GLOBAL,
+    PO_NOTFOUND
+} PROPERTYORIGIN;
+
+HRESULT WINAPI GetThemePropertyOrigin(HTHEME,int,int,int,PROPERTYORIGIN*);
+HRESULT WINAPI GetThemeRect(HTHEME,int,int,int,RECT*);
+HRESULT WINAPI GetThemeString(HTHEME,int,int,int,LPWSTR,int);
+BOOL WINAPI GetThemeSysBool(HTHEME,int);
+COLORREF WINAPI GetThemeSysColor(HTHEME,int);
+HBRUSH WINAPI GetThemeSysColorBrush(HTHEME,int);
+HRESULT WINAPI GetThemeSysFont(HTHEME,int,LOGFONTW*);
+HRESULT WINAPI GetThemeSysInt(HTHEME,int,int*);
+int WINAPI GetThemeSysSize(HTHEME,int);
+HRESULT WINAPI GetThemeSysString(HTHEME,int,LPWSTR,int);
+HRESULT WINAPI GetThemeTextExtent(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,
+                                  const RECT*,RECT*);
+HRESULT WINAPI GetThemeTextMetrics(HTHEME,HDC,int,int,TEXTMETRICW*);
+HTHEME WINAPI GetWindowTheme(HWND);
+
+#define HTTB_BACKGROUNDSEG          0x0000
+#define HTTB_FIXEDBORDER            0x0002
+#define HTTB_CAPTION                0x0004
+#define HTTB_RESIZINGBORDER_LEFT    0x0010
+#define HTTB_RESIZINGBORDER_TOP     0x0020
+#define HTTB_RESIZINGBORDER_RIGHT   0x0040
+#define HTTB_RESIZINGBORDER_BOTTOM  0x0080
+#define HTTB_RESIZINGBORDER \
+    (HTTB_RESIZINGBORDER_LEFT|HTTB_RESIZINGBORDER_TOP|\
+     HTTB_RESIZINGBORDER_RIGHT|HTTB_RESIZINGBORDER_BOTTOM)
+#define HTTB_SIZINGTEMPLATE         0x0100
+#define HTTB_SYSTEMSIZINGMARGINS    0x0200
+
+#define OTD_FORCE_RECT_SIZING       0x0001
+#define OTD_NONCLIENT               0x0002
+#define OTD_VALIDBITS               (OTD_FORCE_RECT_SIZING | OTD_NONCLIENT)
+
+HRESULT WINAPI HitTestThemeBackground(HTHEME,HDC,int,int,DWORD,const RECT*,
+                                      HRGN,POINT,WORD*);
+BOOL WINAPI IsAppThemed(void);
+BOOL WINAPI IsThemeActive(void);
+BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME,int,int);
+BOOL WINAPI IsThemeDialogTextureEnabled(HWND);
+BOOL WINAPI IsThemePartDefined(HTHEME,int,int);
+HTHEME WINAPI OpenThemeData(HWND,LPCWSTR);
+HTHEME WINAPI OpenThemeDataEx(HWND,LPCWSTR,DWORD);
+void WINAPI SetThemeAppProperties(DWORD);
+HRESULT WINAPI SetWindowTheme(HWND,LPCWSTR,LPCWSTR);
+
+
+/* Double-buffered Drawing API */
+
+typedef HANDLE HPAINTBUFFER;
+
+HRESULT WINAPI BufferedPaintInit(VOID);
+HRESULT WINAPI BufferedPaintUnInit(VOID);
+
+typedef enum _BP_BUFFERFORMAT
+{
+	BPBF_COMPATIBLEBITMAP,
+	BPBF_DIB,
+	BPBF_TOPDOWNDIB,
+	BPBF_TOPDOWNMONODIB
+} BP_BUFFERFORMAT;
+
+typedef struct _BP_PAINTPARAMS
+{
+	DWORD cbSize;
+	DWORD dwFlags;
+	const RECT *prcExclude;
+	const BLENDFUNCTION *pBlendFunction;
+} BP_PAINTPARAMS, *PBP_PAINTPARAMS;
+
+HPAINTBUFFER WINAPI BeginBufferedPaint(HDC, const RECT *, BP_BUFFERFORMAT,
+                                       BP_PAINTPARAMS *,HDC *);
+
+HRESULT WINAPI EndBufferedPaint(HPAINTBUFFER, BOOL);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h
new file mode 100644
index 0000000..18c2dfe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h
@@ -0,0 +1,49 @@
+/*
+ * VDMDBG definitions
+ *
+ * Copyright (C) 2007 James Hawkins
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VDMDBG_H
+#define __WINE_VDMDBG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef BOOL (WINAPI *PROCESSENUMPROC)(DWORD, DWORD, LPARAM);
+typedef BOOL (WINAPI *TASKENUMPROC)(DWORD, WORD, WORD, LPARAM);
+typedef BOOL (WINAPI *TASKENUMPROCEX)(DWORD, WORD, WORD, PSZ, PSZ, LPARAM);
+
+INT WINAPI VDMEnumProcessWOW(PROCESSENUMPROC, LPARAM);
+INT WINAPI VDMEnumTaskWOW(DWORD, TASKENUMPROC, LPARAM);
+INT WINAPI VDMEnumTaskWOWEx(DWORD, TASKENUMPROCEX, LPARAM);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_VDMDBG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h
new file mode 100644
index 0000000..e8457a7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h
@@ -0,0 +1,37 @@
+/* Definitions for the VERsion infolibrary (VER.DLL)
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * 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
+ *
+ * Marked as obsolete:  Albert den Haan (Corel Corp) 1999-04-28
+ * VER.H obsolete, include winver.h instead
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VER_H
+#define __WINE_VER_H
+
+#include <winver.h>
+
+#endif	/* __WINE_VER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h
new file mode 100644
index 0000000..22567ab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h
@@ -0,0 +1,182 @@
+/* Definitions for the VERsion info library (VER.DLL)
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VERRSRC_H
+#define __WINE_VERRSRC_H
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+#  define __MSABI_LONG(x)         x ## l
+# else
+#  define __MSABI_LONG(x)         x
+# endif
+#endif
+
+/* resource ids for different version infos */
+#define	VS_FILE_INFO		RT_VERSION
+#define	VS_VERSION_INFO		1
+#define	VS_USER_DEFINED		100
+
+#define VS_FFI_SIGNATURE        __MSABI_LONG(0xfeef04bd)   /* FileInfo Magic */
+#define VS_FFI_STRUCVERSION     __MSABI_LONG(0x00010000)   /* struc version 1.0 */
+#define VS_FFI_FILEFLAGSMASK    __MSABI_LONG(0x0000003f)   /* valid flags */
+
+/* VS_VERSION.dwFileFlags */
+#define VS_FF_DEBUG             __MSABI_LONG(0x01)
+#define VS_FF_PRERELEASE        __MSABI_LONG(0x02)
+#define VS_FF_PATCHED           __MSABI_LONG(0x04)
+#define VS_FF_PRIVATEBUILD      __MSABI_LONG(0x08)
+#define VS_FF_INFOINFERRED      __MSABI_LONG(0x10)
+#define VS_FF_SPECIALBUILD      __MSABI_LONG(0x20)
+
+/* VS_VERSION.dwFileOS */
+
+/* major os version */
+#define VOS_UNKNOWN             __MSABI_LONG(0x00000000)
+#define VOS_DOS                 __MSABI_LONG(0x00010000)
+#define VOS_OS216               __MSABI_LONG(0x00020000)
+#define VOS_OS232               __MSABI_LONG(0x00030000)
+#define VOS_NT                  __MSABI_LONG(0x00040000)
+#define VOS_WINCE               __MSABI_LONG(0x00050000)
+
+/* minor os version */
+#define VOS__BASE               __MSABI_LONG(0x00000000)
+#define VOS__WINDOWS16          __MSABI_LONG(0x00000001)
+#define VOS__PM16               __MSABI_LONG(0x00000002)
+#define VOS__PM32               __MSABI_LONG(0x00000003)
+#define VOS__WINDOWS32          __MSABI_LONG(0x00000004)
+
+/* possible versions */
+#define	VOS_DOS_WINDOWS16	(VOS_DOS|VOS__WINDOWS16)
+#define	VOS_DOS_WINDOWS32	(VOS_DOS|VOS__WINDOWS32)
+#define	VOS_OS216_PM16		(VOS_OS216|VOS__PM16)
+#define	VOS_OS232_PM32		(VOS_OS232|VOS__PM32)
+#define	VOS_NT_WINDOWS32	(VOS_NT|VOS__WINDOWS32)
+
+/* VS_VERSION.dwFileType */
+#define VFT_UNKNOWN             __MSABI_LONG(0x00000000)
+#define VFT_APP                 __MSABI_LONG(0x00000001)
+#define VFT_DLL                 __MSABI_LONG(0x00000002)
+#define VFT_DRV                 __MSABI_LONG(0x00000003)
+#define VFT_FONT                __MSABI_LONG(0x00000004)
+#define VFT_VXD                 __MSABI_LONG(0x00000005)
+/* ??one type missing??         __MSABI_LONG(0x00000006) -Marcus */
+#define VFT_STATIC_LIB          __MSABI_LONG(0x00000007)
+
+/* VS_VERSION.dwFileSubtype for VFT_DRV */
+#define VFT2_UNKNOWN            __MSABI_LONG(0x00000000)
+#define VFT2_DRV_PRINTER        __MSABI_LONG(0x00000001)
+#define VFT2_DRV_KEYBOARD       __MSABI_LONG(0x00000002)
+#define VFT2_DRV_LANGUAGE       __MSABI_LONG(0x00000003)
+#define VFT2_DRV_DISPLAY        __MSABI_LONG(0x00000004)
+#define VFT2_DRV_MOUSE          __MSABI_LONG(0x00000005)
+#define VFT2_DRV_NETWORK        __MSABI_LONG(0x00000006)
+#define VFT2_DRV_SYSTEM         __MSABI_LONG(0x00000007)
+#define VFT2_DRV_INSTALLABLE    __MSABI_LONG(0x00000008)
+#define VFT2_DRV_SOUND          __MSABI_LONG(0x00000009)
+#define VFT2_DRV_COMM           __MSABI_LONG(0x0000000a)
+#define VFT2_DRV_INPUTMETHOD    __MSABI_LONG(0x0000000b)
+#define VFT2_DRV_VERSIONED_PRINTER __MSABI_LONG(0x0000000c)
+
+/* VS_VERSION.dwFileSubtype for VFT_FONT */
+#define VFT2_FONT_RASTER        __MSABI_LONG(0x00000001)
+#define VFT2_FONT_VECTOR        __MSABI_LONG(0x00000002)
+#define VFT2_FONT_TRUETYPE      __MSABI_LONG(0x00000003)
+
+/* VerFindFile Flags */
+	/* input */
+#define	VFFF_ISSHAREDFILE	0x0001
+
+	/* output (returned) */
+#define	VFF_CURNEDEST		0x0001
+#define	VFF_FILEINUSE		0x0002
+#define	VFF_BUFFTOOSMALL	0x0004
+
+/* VerInstallFile Flags */
+	/* input */
+#define	VIFF_FORCEINSTALL	0x0001
+#define	VIFF_DONTDELETEOLD	0x0002
+
+	/* output (return) */
+#define VIF_TEMPFILE            __MSABI_LONG(0x00000001)
+#define VIF_MISMATCH            __MSABI_LONG(0x00000002)
+#define VIF_SRCOLD              __MSABI_LONG(0x00000004)
+#define VIF_DIFFLANG            __MSABI_LONG(0x00000008)
+#define VIF_DIFFCODEPG          __MSABI_LONG(0x00000010)
+#define VIF_DIFFTYPE            __MSABI_LONG(0x00000020)
+#define VIF_WRITEPROT           __MSABI_LONG(0x00000040)
+#define VIF_FILEINUSE           __MSABI_LONG(0x00000080)
+#define VIF_OUTOFSPACE          __MSABI_LONG(0x00000100)
+#define VIF_ACCESSVIOLATION     __MSABI_LONG(0x00000200)
+#define VIF_SHARINGVIOLATION    __MSABI_LONG(0x00000400)
+#define VIF_CANNOTCREATE        __MSABI_LONG(0x00000800)
+#define VIF_CANNOTDELETE        __MSABI_LONG(0x00001000)
+#define VIF_CANNOTRENAME        __MSABI_LONG(0x00002000)
+#define VIF_CANNOTDELETECUR     __MSABI_LONG(0x00004000)
+#define VIF_OUTOFMEMORY         __MSABI_LONG(0x00008000)
+#define VIF_CANNOTREADSRC       __MSABI_LONG(0x00010000)
+#define VIF_CANNOTREADDST       __MSABI_LONG(0x00020000)
+#define VIF_BUFFTOOSMALL        __MSABI_LONG(0x00040000)
+#define VIF_CANNOTLOADLZ32      __MSABI_LONG(0x00080000)
+#define VIF_CANNOTLOADCABINET   __MSABI_LONG(0x00100000)
+
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define FILE_VER_GET_LOCALISED  0x01
+#define FILE_VER_GET_NEUTRAL    0x02
+#define FILE_VER_GET_PREFETCHED 0x04
+
+typedef struct tagVS_FIXEDFILEINFO {
+	DWORD   dwSignature;
+	DWORD   dwStrucVersion;
+	DWORD   dwFileVersionMS;
+	DWORD   dwFileVersionLS;
+	DWORD   dwProductVersionMS;
+	DWORD   dwProductVersionLS;
+	DWORD   dwFileFlagsMask;
+	DWORD   dwFileFlags;
+	DWORD   dwFileOS;
+	DWORD   dwFileType;
+	DWORD   dwFileSubtype;
+	DWORD   dwFileDateMS;
+	DWORD   dwFileDateLS;
+} VS_FIXEDFILEINFO;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* RC_INVOKED */
+
+#endif /* __WINE_VERRSRC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h
new file mode 100644
index 0000000..9c3ea09
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h
@@ -0,0 +1,1953 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VFW_H
+#define __WINE_VFW_H
+
+#include <mmsystem.h>
+#include <mmreg.h>
+#include <msacm.h>
+
+#define VFWAPI	WINAPI
+#define VFWAPIV	WINAPIV
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+
+typedef HANDLE HDRAWDIB;
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+typedef struct IAVIStream *PAVISTREAM;
+typedef struct IAVIFile *PAVIFILE;
+typedef struct IGetFrame *PGETFRAME;
+typedef struct IAVIEditStream *PAVIEDITSTREAM;
+
+/* Installable Compressor Manager */
+
+#define ICVERSION 0x0104
+
+DECLARE_HANDLE(HIC);
+
+/* error return codes */
+#define	ICERR_OK		0
+#define	ICERR_DONTDRAW		1
+#define	ICERR_NEWPALETTE	2
+#define	ICERR_GOTOKEYFRAME	3
+#define	ICERR_STOPDRAWING	4
+
+#define	ICERR_UNSUPPORTED	-1
+#define	ICERR_BADFORMAT		-2
+#define	ICERR_MEMORY		-3
+#define	ICERR_INTERNAL		-4
+#define	ICERR_BADFLAGS		-5
+#define	ICERR_BADPARAM		-6
+#define	ICERR_BADSIZE		-7
+#define	ICERR_BADHANDLE		-8
+#define	ICERR_CANTUPDATE	-9
+#define	ICERR_ABORT		-10
+#define	ICERR_ERROR		-100
+#define	ICERR_BADBITDEPTH	-200
+#define	ICERR_BADIMAGESIZE	-201
+
+#define	ICERR_CUSTOM		-400
+
+/* ICM Messages */
+#define	ICM_USER		(DRV_USER+0x0000)
+
+/* ICM driver message range */
+#define	ICM_RESERVED_LOW	(DRV_USER+0x1000)
+#define	ICM_RESERVED_HIGH	(DRV_USER+0x2000)
+#define	ICM_RESERVED		ICM_RESERVED_LOW
+
+#define	ICM_GETSTATE		(ICM_RESERVED+0)
+#define	ICM_SETSTATE		(ICM_RESERVED+1)
+#define	ICM_GETINFO		(ICM_RESERVED+2)
+
+#define	ICM_CONFIGURE		(ICM_RESERVED+10)
+#define	ICM_ABOUT		(ICM_RESERVED+11)
+/* */
+
+#define	ICM_GETDEFAULTQUALITY	(ICM_RESERVED+30)
+#define	ICM_GETQUALITY		(ICM_RESERVED+31)
+#define	ICM_SETQUALITY		(ICM_RESERVED+32)
+
+#define	ICM_SET			(ICM_RESERVED+40)
+#define	ICM_GET			(ICM_RESERVED+41)
+
+/* 2 constant FOURCC codes */
+#define ICM_FRAMERATE		mmioFOURCC('F','r','m','R')
+#define ICM_KEYFRAMERATE	mmioFOURCC('K','e','y','R')
+
+#define	ICM_COMPRESS_GET_FORMAT		(ICM_USER+4)
+#define	ICM_COMPRESS_GET_SIZE		(ICM_USER+5)
+#define	ICM_COMPRESS_QUERY		(ICM_USER+6)
+#define	ICM_COMPRESS_BEGIN		(ICM_USER+7)
+#define	ICM_COMPRESS			(ICM_USER+8)
+#define	ICM_COMPRESS_END		(ICM_USER+9)
+
+#define	ICM_DECOMPRESS_GET_FORMAT	(ICM_USER+10)
+#define	ICM_DECOMPRESS_QUERY		(ICM_USER+11)
+#define	ICM_DECOMPRESS_BEGIN		(ICM_USER+12)
+#define	ICM_DECOMPRESS			(ICM_USER+13)
+#define	ICM_DECOMPRESS_END		(ICM_USER+14)
+#define	ICM_DECOMPRESS_SET_PALETTE	(ICM_USER+29)
+#define	ICM_DECOMPRESS_GET_PALETTE	(ICM_USER+30)
+
+#define	ICM_DRAW_QUERY			(ICM_USER+31)
+#define	ICM_DRAW_BEGIN			(ICM_USER+15)
+#define	ICM_DRAW_GET_PALETTE		(ICM_USER+16)
+#define	ICM_DRAW_START			(ICM_USER+18)
+#define	ICM_DRAW_STOP			(ICM_USER+19)
+#define	ICM_DRAW_END			(ICM_USER+21)
+#define	ICM_DRAW_GETTIME		(ICM_USER+32)
+#define	ICM_DRAW			(ICM_USER+33)
+#define	ICM_DRAW_WINDOW			(ICM_USER+34)
+#define	ICM_DRAW_SETTIME		(ICM_USER+35)
+#define	ICM_DRAW_REALIZE		(ICM_USER+36)
+#define	ICM_DRAW_FLUSH			(ICM_USER+37)
+#define	ICM_DRAW_RENDERBUFFER		(ICM_USER+38)
+
+#define	ICM_DRAW_START_PLAY		(ICM_USER+39)
+#define	ICM_DRAW_STOP_PLAY		(ICM_USER+40)
+
+#define	ICM_DRAW_SUGGESTFORMAT		(ICM_USER+50)
+#define	ICM_DRAW_CHANGEPALETTE		(ICM_USER+51)
+
+#define	ICM_GETBUFFERSWANTED		(ICM_USER+41)
+
+#define	ICM_GETDEFAULTKEYFRAMERATE	(ICM_USER+42)
+
+#define	ICM_DECOMPRESSEX_BEGIN		(ICM_USER+60)
+#define	ICM_DECOMPRESSEX_QUERY		(ICM_USER+61)
+#define	ICM_DECOMPRESSEX		(ICM_USER+62)
+#define	ICM_DECOMPRESSEX_END		(ICM_USER+63)
+
+#define	ICM_COMPRESS_FRAMES_INFO	(ICM_USER+70)
+#define	ICM_SET_STATUS_PROC		(ICM_USER+72)
+
+#ifndef comptypeDIB
+#define comptypeDIB  mmioFOURCC('D','I','B',' ')
+#endif
+
+/* structs */
+
+/* NOTE: Only the 16 bit structs are packed. Structs that are packed anyway
+ * have not been changed. If a structure is later extended, you may need to create
+ * two versions of it.
+ */
+
+typedef struct {
+	DWORD	dwSize;		/* 00: size */
+	DWORD	fccType;	/* 04: type 'vidc' usually */
+	DWORD	fccHandler;	/* 08: */
+	DWORD	dwVersion;	/* 0c: version of compman opening you */
+	DWORD	dwFlags;	/* 10: LOWORD is type specific */
+	LRESULT	dwError;	/* 14: */
+	LPVOID	pV1Reserved;	/* 18: */
+	LPVOID	pV2Reserved;	/* 1c: */
+	DWORD	dnDevNode;	/* 20: */
+				/* 24: */
+} ICOPEN,*LPICOPEN;
+
+#define ICCOMPRESS_KEYFRAME     __MSABI_LONG(0x00000001)
+
+typedef struct {
+    DWORD		dwFlags;
+    LPBITMAPINFOHEADER	lpbiOutput;
+    LPVOID		lpOutput;
+    LPBITMAPINFOHEADER	lpbiInput;
+    LPVOID		lpInput;
+    LPDWORD		lpckid;
+    LPDWORD		lpdwFlags;
+    LONG		lFrameNum;
+    DWORD		dwFrameSize;
+    DWORD		dwQuality;
+    LPBITMAPINFOHEADER	lpbiPrev;
+    LPVOID		lpPrev;
+} ICCOMPRESS;
+
+DWORD VFWAPIV ICCompress(
+	HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
+	LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,
+	LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,
+	LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev
+);
+
+#define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) 		\
+	ICSendMessage(							\
+	    hic,ICM_COMPRESS_GET_FORMAT,(DWORD_PTR)(LPVOID)(lpbiInput),	\
+	    (DWORD_PTR)(LPVOID)(lpbiOutput)					\
+	)
+
+#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)
+
+#define ICCompressBegin(hic, lpbiInput, lpbiOutput) 			\
+    ICSendMessage(							\
+    	hic, ICM_COMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput),		\
+	(DWORD_PTR)(LPVOID)(lpbiOutput)					\
+    )
+
+#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) 			\
+    ICSendMessage(							\
+    	hic, ICM_COMPRESS_GET_SIZE, (DWORD_PTR)(LPVOID)(lpbiInput), 	\
+	(DWORD_PTR)(LPVOID)(lpbiOutput)					\
+    )
+
+#define ICCompressQuery(hic, lpbiInput, lpbiOutput)		\
+    ICSendMessage(						\
+    	hic, ICM_COMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput),	\
+	(DWORD_PTR)(LPVOID)(lpbiOutput)				\
+    )
+
+#define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
+
+/* ICCOMPRESSFRAMES.dwFlags */
+#define ICCOMPRESSFRAMES_PADDING        0x00000001
+typedef struct {
+    DWORD               dwFlags;
+    LPBITMAPINFOHEADER  lpbiOutput;
+    LPARAM              lOutput;
+    LPBITMAPINFOHEADER  lpbiInput;
+    LPARAM              lInput;
+    LONG                lStartFrame;
+    LONG                lFrameCount;
+    LONG                lQuality;
+    LONG                lDataRate;
+    LONG                lKeyRate;
+    DWORD               dwRate;
+    DWORD               dwScale;
+    DWORD               dwOverheadPerFrame;
+    DWORD               dwReserved2;
+    LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len);
+    LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);
+} ICCOMPRESSFRAMES;
+
+typedef struct {
+    DWORD		dwFlags;
+    LPARAM		lParam;
+   /* messages for Status callback */
+#define ICSTATUS_START	    0
+#define ICSTATUS_STATUS	    1
+#define ICSTATUS_END	    2
+#define ICSTATUS_ERROR	    3
+#define ICSTATUS_YIELD	    4
+    /* FIXME: some X11 libs define Status as int... */
+    /* LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l); */
+    LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l);
+} ICSETSTATUSPROC;
+
+/* Values for wMode of ICOpen() */
+#define	ICMODE_COMPRESS		1
+#define	ICMODE_DECOMPRESS	2
+#define	ICMODE_FASTDECOMPRESS	3
+#define	ICMODE_QUERY		4
+#define	ICMODE_FASTCOMPRESS	5
+#define	ICMODE_DRAW		8
+
+/* quality flags */
+#define ICQUALITY_LOW       0
+#define ICQUALITY_HIGH      10000
+#define ICQUALITY_DEFAULT   -1
+
+typedef struct {
+	DWORD	dwSize;		/* 00: */
+	DWORD	fccType;	/* 04:compressor type     'vidc' 'audc' */
+	DWORD	fccHandler;	/* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/
+	DWORD	dwFlags;	/* 0c:flags LOWORD is type specific */
+	DWORD	dwVersion;	/* 10:version of the driver */
+	DWORD	dwVersionICM;	/* 14:version of the ICM used */
+	/*
+	 * under Win32, the driver always returns UNICODE strings.
+	 */
+	WCHAR	szName[16];		/* 18:short name */
+	WCHAR	szDescription[128];	/* 38:long name */
+	WCHAR	szDriver[128];		/* 138:driver that contains compressor*/
+					/* 238: */
+} ICINFO;
+
+/* ICINFO.dwFlags */
+#define	VIDCF_QUALITY		0x0001  /* supports quality */
+#define	VIDCF_CRUNCH		0x0002  /* supports crunching to a frame size */
+#define	VIDCF_TEMPORAL		0x0004  /* supports inter-frame compress */
+#define	VIDCF_COMPRESSFRAMES	0x0008  /* wants the compress all frames message */
+#define	VIDCF_DRAW		0x0010  /* supports drawing */
+#define	VIDCF_FASTTEMPORALC	0x0020  /* does not need prev frame on compress */
+#define	VIDCF_FASTTEMPORALD	0x0080  /* does not need prev frame on decompress */
+#define	VIDCF_QUALITYTIME	0x0040  /* supports temporal quality */
+
+#define	VIDCF_FASTTEMPORAL	(VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)
+
+
+/* function shortcuts */
+/* ICM_ABOUT */
+#define ICMF_ABOUT_QUERY         0x00000001
+
+#define ICQueryAbout(hic) \
+	(ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
+
+#define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)(UINT_PTR)(hwnd),0)
+
+/* ICM_CONFIGURE */
+#define ICMF_CONFIGURE_QUERY	0x00000001
+#define ICQueryConfigure(hic) \
+	(ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
+
+#define ICConfigure(hic,hwnd) \
+	ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)(UINT_PTR)(hwnd),0)
+
+/* Decompression stuff */
+#define ICDECOMPRESS_HURRYUP		0x80000000	/* don't draw just buffer (hurry up!) */
+#define ICDECOMPRESS_UPDATE		0x40000000	/* don't draw just update screen */
+#define ICDECOMPRESS_PREROLL		0x20000000	/* this frame is before real start */
+#define ICDECOMPRESS_NULLFRAME		0x10000000	/* repeat last frame */
+#define ICDECOMPRESS_NOTKEYFRAME	0x08000000	/* this frame is not a key frame */
+
+typedef struct {
+    DWORD		dwFlags;	/* flags (from AVI index...) */
+    LPBITMAPINFOHEADER	lpbiInput;	/* BITMAPINFO of compressed data */
+    LPVOID		lpInput;	/* compressed data */
+    LPBITMAPINFOHEADER	lpbiOutput;	/* DIB to decompress to */
+    LPVOID		lpOutput;
+    DWORD		ckid;		/* ckid from AVI file */
+} ICDECOMPRESS;
+
+typedef struct {
+    DWORD		dwFlags;
+    LPBITMAPINFOHEADER	lpbiSrc;
+    LPVOID		lpSrc;
+    LPBITMAPINFOHEADER	lpbiDst;
+    LPVOID		lpDst;
+
+    /* changed for ICM_DECOMPRESSEX */
+    INT			xDst;       /* destination rectangle */
+    INT			yDst;
+    INT			dxDst;
+    INT			dyDst;
+
+    INT			xSrc;       /* source rectangle */
+    INT			ySrc;
+    INT			dxSrc;
+    INT			dySrc;
+} ICDECOMPRESSEX;
+
+DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
+
+#define ICDecompressBegin(hic, lpbiInput, lpbiOutput) 	\
+    ICSendMessage(						\
+    	hic, ICM_DECOMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput),	\
+	(DWORD_PTR)(LPVOID)(lpbiOutput)				\
+    )
+
+#define ICDecompressQuery(hic, lpbiInput, lpbiOutput) 	\
+    ICSendMessage(						\
+    	hic,ICM_DECOMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput),	\
+	(DWORD_PTR) (LPVOID)(lpbiOutput)				\
+    )
+
+#define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput)		\
+    ((LONG)ICSendMessage(						\
+    	hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD_PTR)(LPVOID)(lpbiInput),	\
+	(DWORD_PTR)(LPVOID)(lpbiOutput)					\
+    ))
+
+#define ICDecompressGetFormatSize(hic, lpbi) 				\
+	ICDecompressGetFormat(hic, lpbi, NULL)
+
+#define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput)		\
+    ICSendMessage(							\
+    	hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), 	\
+	(DWORD_PTR)(LPVOID)(lpbiOutput)					\
+    )
+
+#define ICDecompressSetPalette(hic,lpbiPalette)	\
+        ICSendMessage(				\
+		hic,ICM_DECOMPRESS_SET_PALETTE,		\
+		(DWORD_PTR)(LPVOID)(lpbiPalette),0		\
+	)
+
+#define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
+
+LRESULT	VFWAPI	ICSendMessage(HIC hic, UINT msg, DWORD_PTR dw1, DWORD_PTR dw2);
+
+static inline LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags,
+					    LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc,
+					    int xSrc, int ySrc, int dxSrc, int dySrc,
+					    LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst,
+					    int xDst, int yDst, int dxDst, int dyDst)
+{
+    ICDECOMPRESSEX ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lpbiSrc = lpbiSrc;
+    ic.lpSrc = lpSrc;
+    ic.xSrc = xSrc;
+    ic.ySrc = ySrc;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.lpbiDst = lpbiDst;
+    ic.lpDst = lpDst;
+    ic.xDst = xDst;
+    ic.yDst = yDst;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+static inline LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags,
+						 LPBITMAPINFOHEADER lpbiSrc,
+						 LPVOID lpSrc,
+						 int xSrc, int ySrc, int dxSrc, int dySrc,
+						 LPBITMAPINFOHEADER lpbiDst,
+						 LPVOID lpDst,
+						 int xDst,
+						 int yDst,
+						 int dxDst,
+						 int dyDst)
+{
+    ICDECOMPRESSEX ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lpbiSrc = lpbiSrc;
+    ic.lpSrc = lpSrc;
+    ic.xSrc = xSrc;
+    ic.ySrc = ySrc;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.lpbiDst = lpbiDst;
+    ic.lpDst = lpDst;
+    ic.xDst = xDst;
+    ic.yDst = yDst;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD_PTR)&ic, sizeof(ic));
+}
+static inline LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags,
+						 LPBITMAPINFOHEADER lpbiSrc,
+						 LPVOID lpSrc,
+						 int xSrc, int ySrc, int dxSrc, int dySrc,
+						 LPBITMAPINFOHEADER lpbiDst,
+						 LPVOID lpDst,
+						 int xDst,
+						 int yDst,
+						 int dxDst,
+						 int dyDst)
+{
+    ICDECOMPRESSEX ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lpbiSrc = lpbiSrc;
+    ic.lpSrc = lpSrc;
+    ic.xSrc = xSrc;
+    ic.ySrc = ySrc;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.lpbiDst = lpbiDst;
+    ic.lpDst = lpDst;
+    ic.xDst = xDst;
+    ic.yDst = yDst;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+#define ICDecompressExEnd(hic) \
+    ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0)
+
+#define ICDRAW_QUERY        __MSABI_LONG(0x00000001)    /* test for support */
+#define ICDRAW_FULLSCREEN   __MSABI_LONG(0x00000002)    /* draw to full screen */
+#define ICDRAW_HDC          __MSABI_LONG(0x00000004)    /* draw to a HDC/HWND */
+#define ICDRAW_ANIMATE      __MSABI_LONG(0x00000008)    /* expect palette animation */
+#define ICDRAW_CONTINUE     __MSABI_LONG(0x00000010)    /* draw is a continuation of previous draw */
+#define ICDRAW_MEMORYDC     __MSABI_LONG(0x00000020)    /* DC is offscreen, by the way */
+#define ICDRAW_UPDATING     __MSABI_LONG(0x00000040)    /* We're updating, as opposed to playing */
+#define ICDRAW_RENDER       __MSABI_LONG(0x00000080)    /* used to render data not draw it */
+#define ICDRAW_BUFFER       __MSABI_LONG(0x00000100)    /* buffer data offscreen, we will need to update it */
+
+#define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \
+    ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)
+
+#define ICDrawOpen(fccType, fccHandler, lpbiIn) \
+    ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)
+
+HANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
+			      LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality,
+			      LONG* plSize);
+
+HANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
+				LPVOID lpBits, LPBITMAPINFO lpbiOut);
+
+BOOL	VFWAPI	ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);
+BOOL    VFWAPI  ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);
+BOOL    VFWAPI  ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);
+LRESULT	VFWAPI	ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);
+HIC	VFWAPI	ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
+#ifdef WINE_STRICT_PROTOTYPES
+HIC	VFWAPI	ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler);
+#else
+HIC	VFWAPI	ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler);
+#endif
+
+LRESULT VFWAPI	ICClose(HIC hic);
+HIC	VFWAPI	ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
+HIC	VFWAPI	ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);
+
+/* Values for wFlags of ICInstall() */
+#define ICINSTALL_UNICODE       0x8000
+#define ICINSTALL_FUNCTION      0x0001
+#define ICINSTALL_DRIVER        0x0002
+#define ICINSTALL_HDRV          0x0004
+#define ICINSTALL_DRIVERW       0x8002
+
+#define ICGetState(hic, pv, cb) \
+    ICSendMessage(hic, ICM_GETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb))
+#define ICSetState(hic, pv, cb) \
+    ICSendMessage(hic, ICM_SETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb))
+#define ICGetStateSize(hic) \
+    ICGetState(hic, NULL, 0)
+
+static inline DWORD ICGetDefaultQuality(HIC hic)
+{
+   DWORD dwICValue;
+   ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD));
+   return dwICValue;
+}
+
+static inline DWORD ICGetDefaultKeyFrameRate(HIC hic)
+{
+   DWORD dwICValue;
+   ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD));
+   return dwICValue;
+}
+
+#define ICDrawWindow(hic, prc) \
+    ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD_PTR)(LPVOID)(prc), sizeof(RECT))
+
+/* As passed to ICM_DRAW_SUGGESTFORMAT */
+typedef struct {
+	DWORD dwFlags;
+	LPBITMAPINFOHEADER lpbiIn;
+	LPBITMAPINFOHEADER lpbiSuggest;
+	INT dxSrc;
+	INT dySrc;
+	INT dxDst;
+	INT dyDst;
+	HIC hicDecompressor;
+} ICDRAWSUGGEST;
+
+typedef struct {
+    DWORD               dwFlags;
+    int                 iStart;
+    int                 iLen;
+    LPPALETTEENTRY      lppe;
+} ICPALETTE;
+
+DWORD	VFWAPIV	ICDrawBegin(
+        HIC			hic,
+        DWORD			dwFlags,/* flags */
+        HPALETTE		hpal,	/* palette to draw with */
+        HWND			hwnd,	/* window to draw to */
+        HDC			hdc,	/* HDC to draw to */
+        INT			xDst,	/* destination rectangle */
+        INT			yDst,
+        INT			dxDst,
+        INT			dyDst,
+        LPBITMAPINFOHEADER	lpbi,	/* format of frame to draw */
+        INT			xSrc,	/* source rectangle */
+        INT			ySrc,
+        INT			dxSrc,
+        INT			dySrc,
+        DWORD			dwRate,	/* frames/second = (dwRate/dwScale) */
+        DWORD			dwScale
+);
+
+/* as passed to ICM_DRAW_BEGIN */
+typedef struct {
+	DWORD		dwFlags;
+	HPALETTE	hpal;
+	HWND		hwnd;
+	HDC		hdc;
+	INT		xDst;
+	INT		yDst;
+	INT		dxDst;
+	INT		dyDst;
+	LPBITMAPINFOHEADER	lpbi;
+	INT		xSrc;
+	INT		ySrc;
+	INT		dxSrc;
+	INT		dySrc;
+	DWORD		dwRate;
+	DWORD		dwScale;
+} ICDRAWBEGIN;
+
+#define ICDRAW_HURRYUP      __MSABI_LONG(0x80000000)   /* don't draw just buffer (hurry up!) */
+#define ICDRAW_UPDATE       __MSABI_LONG(0x40000000)   /* don't draw just update screen */
+#define ICDRAW_PREROLL      __MSABI_LONG(0x20000000)   /* this frame is before real start */
+#define ICDRAW_NULLFRAME    __MSABI_LONG(0x10000000)   /* repeat last frame */
+#define ICDRAW_NOTKEYFRAME  __MSABI_LONG(0x08000000)   /* this frame is not a key frame */
+
+typedef struct {
+	DWORD	dwFlags;
+	LPVOID	lpFormat;
+	LPVOID	lpData;
+	DWORD	cbData;
+	LONG	lTime;
+} ICDRAW;
+
+DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);
+
+static inline LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn,
+						 LPBITMAPINFOHEADER lpbiOut,
+						 int dxSrc, int dySrc,
+						 int dxDst, int dyDst,
+						 HIC hicDecomp)
+{
+    ICDRAWSUGGEST ic;
+
+    ic.lpbiIn = lpbiIn;
+    ic.lpbiSuggest = lpbiOut;
+    ic.dxSrc = dxSrc;
+    ic.dySrc = dySrc;
+    ic.dxDst = dxDst;
+    ic.dyDst = dyDst;
+    ic.hicDecompressor = hicDecomp;
+    return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+#define ICDrawQuery(hic, lpbiInput) \
+    ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), 0)
+
+#define ICDrawChangePalette(hic, lpbiInput) \
+    ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), 0)
+
+#define ICGetBuffersWanted(hic, lpdwBuffers) \
+    ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD_PTR)(LPVOID)(lpdwBuffers), 0)
+
+#define ICDrawEnd(hic) \
+    ICSendMessage(hic, ICM_DRAW_END, 0, 0)
+
+#define ICDrawStart(hic) \
+    ICSendMessage(hic, ICM_DRAW_START, 0, 0)
+
+#define ICDrawStartPlay(hic, lFrom, lTo) \
+    ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD_PTR)(lFrom), (DWORD_PTR)(lTo))
+
+#define ICDrawStop(hic) \
+    ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)
+
+#define ICDrawStopPlay(hic) \
+    ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0)
+
+#define ICDrawGetTime(hic, lplTime) \
+    ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD_PTR)(LPVOID)(lplTime), 0)
+
+#define ICDrawSetTime(hic, lTime) \
+    ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD_PTR)lTime, 0)
+
+#define ICDrawRealize(hic, hdc, fBackground) \
+    ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD_PTR)(UINT_PTR)(HDC)(hdc), (DWORD_PTR)(BOOL)(fBackground))
+
+#define ICDrawFlush(hic) \
+    ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)
+
+#define ICDrawRenderBuffer(hic) \
+    ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)
+
+static inline LRESULT VFWAPI ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam,
+					     LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG))
+{
+    ICSETSTATUSPROC ic;
+
+    ic.dwFlags = dwFlags;
+    ic.lParam = lParam;
+    /* FIXME: see comment in ICSETSTATUSPROC definition */
+    ic.zStatus = fpfnStatus;
+
+    return ICSendMessage(hic, ICM_SET_STATUS_PROC, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+typedef struct {
+    LONG		cbSize;
+    DWORD		dwFlags;
+    HIC			hic;
+    DWORD               fccType;
+    DWORD               fccHandler;
+    LPBITMAPINFO	lpbiIn;
+    LPBITMAPINFO	lpbiOut;
+    LPVOID		lpBitsOut;
+    LPVOID		lpBitsPrev;
+    LONG		lFrame;
+    LONG		lKey;
+    LONG		lDataRate;
+    LONG		lQ;
+    LONG		lKeyCount;
+    LPVOID		lpState;
+    LONG		cbState;
+} COMPVARS, *PCOMPVARS;
+
+#define ICMF_COMPVARS_VALID	0x00000001
+
+BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData,
+			       PCOMPVARS pc, LPSTR lpszTitle);
+
+#define ICMF_CHOOSE_KEYFRAME		0x0001
+#define ICMF_CHOOSE_DATARATE		0x0002
+#define ICMF_CHOOSE_PREVIEW		0x0004
+#define ICMF_CHOOSE_ALLCOMPRESSORS	0x0008
+
+BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn);
+void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc);
+
+LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits,
+				 BOOL *pfKey, LONG *plSize);
+void VFWAPI ICCompressorFree(PCOMPVARS pc);
+
+/********************* AVIFILE function declarations *************************/
+
+#ifndef mmioFOURCC
+#define mmioFOURCC( ch0, ch1, ch2, ch3 )				\
+	( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |		\
+	( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+#endif
+
+#ifndef aviTWOCC
+#define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
+#endif
+
+typedef WORD TWOCC;
+
+#define ICTYPE_VIDEO		mmioFOURCC('v', 'i', 'd', 'c')
+#define ICTYPE_AUDIO		mmioFOURCC('a', 'u', 'd', 'c')
+
+#define formtypeAVI             mmioFOURCC('A', 'V', 'I', ' ')
+#define listtypeAVIHEADER       mmioFOURCC('h', 'd', 'r', 'l')
+#define ckidAVIMAINHDR          mmioFOURCC('a', 'v', 'i', 'h')
+#define listtypeSTREAMHEADER    mmioFOURCC('s', 't', 'r', 'l')
+#define ckidSTREAMHEADER        mmioFOURCC('s', 't', 'r', 'h')
+#define ckidSTREAMFORMAT        mmioFOURCC('s', 't', 'r', 'f')
+#define ckidSTREAMHANDLERDATA   mmioFOURCC('s', 't', 'r', 'd')
+#define ckidSTREAMNAME		mmioFOURCC('s', 't', 'r', 'n')
+
+#define listtypeAVIMOVIE        mmioFOURCC('m', 'o', 'v', 'i')
+#define listtypeAVIRECORD       mmioFOURCC('r', 'e', 'c', ' ')
+
+#define ckidAVINEWINDEX         mmioFOURCC('i', 'd', 'x', '1')
+
+#define streamtypeANY           0U
+#define streamtypeVIDEO         mmioFOURCC('v', 'i', 'd', 's')
+#define streamtypeAUDIO         mmioFOURCC('a', 'u', 'd', 's')
+#define streamtypeMIDI          mmioFOURCC('m', 'i', 'd', 's')
+#define streamtypeTEXT          mmioFOURCC('t', 'x', 't', 's')
+
+/* Basic chunk types */
+#define cktypeDIBbits           aviTWOCC('d', 'b')
+#define cktypeDIBcompressed     aviTWOCC('d', 'c')
+#define cktypePALchange         aviTWOCC('p', 'c')
+#define cktypeWAVEbytes         aviTWOCC('w', 'b')
+
+/* Chunk id to use for extra chunks for padding. */
+#define ckidAVIPADDING          mmioFOURCC('J', 'U', 'N', 'K')
+
+#define FromHex(n)		(((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0'))
+#define StreamFromFOURCC(fcc)	((WORD)((FromHex(LOBYTE(LOWORD(fcc))) << 4) + \
+					(FromHex(HIBYTE(LOWORD(fcc))))))
+#define TWOCCFromFOURCC(fcc)    HIWORD(fcc)
+#define ToHex(n)		((BYTE)(((n) > 9) ? ((n) - 10 + 'A') : ((n) + '0')))
+#define MAKEAVICKID(tcc, stream) \
+                                MAKELONG((ToHex((stream) & 0x0f) << 8) | \
+			                 (ToHex(((stream) & 0xf0) >> 4)), tcc)
+
+/* AVIFileHdr.dwFlags */
+#define AVIF_HASINDEX		0x00000010	/* Index at end of file? */
+#define AVIF_MUSTUSEINDEX	0x00000020
+#define AVIF_ISINTERLEAVED	0x00000100
+#define AVIF_TRUSTCKTYPE	0x00000800	/* Use CKType to find key frames*/
+#define AVIF_WASCAPTUREFILE	0x00010000
+#define AVIF_COPYRIGHTED	0x00020000
+
+#define AVI_HEADERSIZE	2048
+
+typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT);
+
+typedef struct _MainAVIHeader
+{
+    DWORD	dwMicroSecPerFrame;
+    DWORD	dwMaxBytesPerSec;
+    DWORD	dwPaddingGranularity;
+    DWORD	dwFlags;
+    DWORD	dwTotalFrames;
+    DWORD	dwInitialFrames;
+    DWORD	dwStreams;
+    DWORD	dwSuggestedBufferSize;
+    DWORD	dwWidth;
+    DWORD	dwHeight;
+    DWORD	dwReserved[4];
+} MainAVIHeader;
+
+/* AVIStreamHeader.dwFlags */
+#define AVISF_DISABLED                  0x00000001
+#define AVISF_VIDEO_PALCHANGES          0x00010000
+
+typedef struct {
+    FOURCC	fccType;
+    FOURCC	fccHandler;
+    DWORD	dwFlags;        /* AVISF_* */
+    WORD	wPriority;
+    WORD	wLanguage;
+    DWORD	dwInitialFrames;
+    DWORD	dwScale;
+    DWORD	dwRate; /* dwRate / dwScale == samples/second */
+    DWORD	dwStart;
+    DWORD	dwLength; /* In units above... */
+    DWORD	dwSuggestedBufferSize;
+    DWORD	dwQuality;
+    DWORD	dwSampleSize;
+    struct { SHORT left, top, right, bottom; } rcFrame; /* word.word - word.word in file */
+} AVIStreamHeader;
+
+/* AVIINDEXENTRY.dwFlags */
+#define AVIIF_LIST	0x00000001	/* chunk is a 'LIST' */
+#define AVIIF_TWOCC	0x00000002
+#define AVIIF_KEYFRAME	0x00000010	/* this frame is a key frame. */
+#define AVIIF_FIRSTPART 0x00000020
+#define AVIIF_LASTPART  0x00000040
+#define AVIIF_MIDPART   (AVIIF_LASTPART|AVIIF_FIRSTPART)
+#define AVIIF_NOTIME	0x00000100	/* this frame doesn't take any time */
+#define AVIIF_COMPUSE	0x0FFF0000
+
+typedef struct _AVIINDEXENTRY {
+    DWORD	ckid;
+    DWORD	dwFlags;
+    DWORD	dwChunkOffset;
+    DWORD	dwChunkLength;
+} AVIINDEXENTRY;
+
+typedef struct _AVIPALCHANGE {
+    BYTE		bFirstEntry;
+    BYTE		bNumEntries;
+    WORD		wFlags;		/* pad */
+    PALETTEENTRY	peNew[1];
+} AVIPALCHANGE;
+
+#define AVIIF_KEYFRAME	0x00000010	/* this frame is a key frame. */
+
+#define	AVIGETFRAMEF_BESTDISPLAYFMT	1
+
+typedef struct _AVISTREAMINFOA {
+    DWORD	fccType;
+    DWORD	fccHandler;
+    DWORD	dwFlags;        /* AVIIF_* */
+    DWORD	dwCaps;
+    WORD	wPriority;
+    WORD	wLanguage;
+    DWORD	dwScale;
+    DWORD	dwRate;		/* dwRate / dwScale == samples/second */
+    DWORD	dwStart;
+    DWORD	dwLength;	/* In units above... */
+    DWORD	dwInitialFrames;
+    DWORD	dwSuggestedBufferSize;
+    DWORD	dwQuality;
+    DWORD	dwSampleSize;
+    RECT	rcFrame;
+    DWORD	dwEditCount;
+    DWORD	dwFormatChangeCount;
+    CHAR	szName[64];
+} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;
+
+typedef struct _AVISTREAMINFOW {
+    DWORD	fccType;
+    DWORD	fccHandler;
+    DWORD	dwFlags;
+    DWORD	dwCaps;
+    WORD	wPriority;
+    WORD	wLanguage;
+    DWORD	dwScale;
+    DWORD	dwRate;		/* dwRate / dwScale == samples/second */
+    DWORD	dwStart;
+    DWORD	dwLength;	/* In units above... */
+    DWORD	dwInitialFrames;
+    DWORD	dwSuggestedBufferSize;
+    DWORD	dwQuality;
+    DWORD	dwSampleSize;
+    RECT	rcFrame;
+    DWORD	dwEditCount;
+    DWORD	dwFormatChangeCount;
+    WCHAR	szName[64];
+} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;
+DECL_WINELIB_TYPE_AW(AVISTREAMINFO)
+DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO)
+DECL_WINELIB_TYPE_AW(PAVISTREAMINFO)
+
+#define AVISTREAMINFO_DISABLED		0x00000001
+#define AVISTREAMINFO_FORMATCHANGES	0x00010000
+
+/* AVIFILEINFO.dwFlags */
+#define AVIFILEINFO_HASINDEX		0x00000010
+#define AVIFILEINFO_MUSTUSEINDEX	0x00000020
+#define AVIFILEINFO_ISINTERLEAVED	0x00000100
+#define AVIFILEINFO_TRUSTCKTYPE         0x00000800
+#define AVIFILEINFO_WASCAPTUREFILE	0x00010000
+#define AVIFILEINFO_COPYRIGHTED		0x00020000
+
+/* AVIFILEINFO.dwCaps */
+#define AVIFILECAPS_CANREAD		0x00000001
+#define AVIFILECAPS_CANWRITE		0x00000002
+#define AVIFILECAPS_ALLKEYFRAMES	0x00000010
+#define AVIFILECAPS_NOCOMPRESSION	0x00000020
+
+typedef struct _AVIFILEINFOW {
+    DWORD               dwMaxBytesPerSec;
+    DWORD               dwFlags;
+    DWORD               dwCaps;
+    DWORD               dwStreams;
+    DWORD               dwSuggestedBufferSize;
+    DWORD               dwWidth;
+    DWORD               dwHeight;
+    DWORD               dwScale;
+    DWORD               dwRate;
+    DWORD               dwLength;
+    DWORD               dwEditCount;
+    WCHAR               szFileType[64];
+} AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW;
+typedef struct _AVIFILEINFOA {
+    DWORD               dwMaxBytesPerSec;
+    DWORD               dwFlags;
+    DWORD               dwCaps;
+    DWORD               dwStreams;
+    DWORD               dwSuggestedBufferSize;
+    DWORD               dwWidth;
+    DWORD               dwHeight;
+    DWORD               dwScale;
+    DWORD               dwRate;
+    DWORD               dwLength;
+    DWORD               dwEditCount;
+    CHAR		szFileType[64];
+} AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA;
+DECL_WINELIB_TYPE_AW(AVIFILEINFO)
+DECL_WINELIB_TYPE_AW(PAVIFILEINFO)
+DECL_WINELIB_TYPE_AW(LPAVIFILEINFO)
+
+/* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */
+#define AVICOMPRESSF_INTERLEAVE	0x00000001
+#define AVICOMPRESSF_DATARATE	0x00000002
+#define AVICOMPRESSF_KEYFRAMES	0x00000004
+#define AVICOMPRESSF_VALID	0x00000008
+
+typedef struct {
+    DWORD	fccType;		/* stream type, for consistency */
+    DWORD	fccHandler;		/* compressor */
+    DWORD	dwKeyFrameEvery;	/* keyframe rate */
+    DWORD	dwQuality;		/* compress quality 0-10,000 */
+    DWORD	dwBytesPerSecond;	/* bytes per second */
+    DWORD	dwFlags;		/* flags... see below */
+    LPVOID	lpFormat;		/* save format */
+    DWORD	cbFormat;
+    LPVOID	lpParms;		/* compressor options */
+    DWORD	cbParms;
+    DWORD	dwInterleaveEvery;	/* for non-video streams only */
+} AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;
+
+#define FIND_DIR        __MSABI_LONG(0x0000000F)     /* direction mask */
+#define FIND_NEXT       __MSABI_LONG(0x00000001)     /* search forward */
+#define FIND_PREV       __MSABI_LONG(0x00000004)     /* search backward */
+#define FIND_FROM_START __MSABI_LONG(0x00000008)     /* start at the logical beginning */
+
+#define FIND_TYPE       __MSABI_LONG(0x000000F0)     /* type mask */
+#define FIND_KEY        __MSABI_LONG(0x00000010)     /* find a key frame */
+#define FIND_ANY        __MSABI_LONG(0x00000020)     /* find any (non-empty) sample */
+#define FIND_FORMAT     __MSABI_LONG(0x00000040)     /* find a formatchange */
+
+#define FIND_RET        __MSABI_LONG(0x0000F000)     /* return mask */
+#define FIND_POS        __MSABI_LONG(0x00000000)     /* return logical position */
+#define FIND_LENGTH     __MSABI_LONG(0x00001000)     /* return logical size */
+#define FIND_OFFSET     __MSABI_LONG(0x00002000)     /* return physical position */
+#define FIND_SIZE       __MSABI_LONG(0x00003000)     /* return physical size */
+#define FIND_INDEX      __MSABI_LONG(0x00004000)     /* return physical index position */
+
+#include <ole2.h>
+
+#define DEFINE_AVIGUID(name, l, w1, w2) \
+    DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+DEFINE_AVIGUID(IID_IAVIFile,            0x00020020, 0, 0);
+DEFINE_AVIGUID(IID_IAVIStream,          0x00020021, 0, 0);
+DEFINE_AVIGUID(IID_IAVIStreaming,       0x00020022, 0, 0);
+DEFINE_AVIGUID(IID_IGetFrame,           0x00020023, 0, 0);
+DEFINE_AVIGUID(IID_IAVIEditStream,      0x00020024, 0, 0);
+
+DEFINE_AVIGUID(CLSID_AVISimpleUnMarshal,0x00020009, 0, 0);
+DEFINE_AVIGUID(CLSID_AVIFile,           0x00020000, 0, 0);
+
+/*****************************************************************************
+ * IAVIStream interface
+ */
+#define INTERFACE IAVIStream
+DECLARE_INTERFACE_(IAVIStream,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IAVIStream methods ***/
+    STDMETHOD(Create)(THIS_ LPARAM lParam1, LPARAM lParam2) PURE;
+    STDMETHOD(Info)(THIS_ AVISTREAMINFOW *psi, LONG lSize) PURE;
+    STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos, LONG lFlags) PURE;
+    STDMETHOD(ReadFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG *lpcbFormat) PURE;
+    STDMETHOD(SetFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat) PURE;
+    STDMETHOD(Read)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples) PURE;
+    STDMETHOD(Write)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG *plBytesWritten) PURE;
+    STDMETHOD(Delete)(THIS_ LONG lStart, LONG lSamples) PURE;
+    STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE;
+    STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE;
+    STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW *plInfo, LONG cbInfo) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIStream_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IAVIStream_Release(p)            (p)->lpVtbl->Release(p)
+/*** IAVIStream methods ***/
+#define IAVIStream_Create(p,a,b)          (p)->lpVtbl->Create(p,a,b)
+#define IAVIStream_Info(p,a,b)            (p)->lpVtbl->Info(p,a,b)
+#define IAVIStream_FindSample(p,a,b)      (p)->lpVtbl->FindSample(p,a,b)
+#define IAVIStream_ReadFormat(p,a,b,c)    (p)->lpVtbl->ReadFormat(p,a,b,c)
+#define IAVIStream_SetFormat(p,a,b,c)     (p)->lpVtbl->SetFormat(p,a,b,c)
+#define IAVIStream_Read(p,a,b,c,d,e,f)    (p)->lpVtbl->Read(p,a,b,c,d,e,f)
+#define IAVIStream_Write(p,a,b,c,d,e,f,g) (p)->lpVtbl->Write(p,a,b,c,d,e,f,g)
+#define IAVIStream_Delete(p,a,b)          (p)->lpVtbl->Delete(p,a,b)
+#define IAVIStream_ReadData(p,a,b,c)      (p)->lpVtbl->ReadData(p,a,b,c)
+#define IAVIStream_WriteData(p,a,b,c)     (p)->lpVtbl->WriteData(p,a,b,c)
+#define IAVIStream_SetInfo(p,a,b)         (p)->lpVtbl->SetInfo(p,a,b)
+#endif
+
+#define AVISTREAMREAD_CONVENIENT          (__MSABI_LONG(-1))
+
+ULONG WINAPI AVIStreamAddRef(PAVISTREAM iface);
+ULONG WINAPI AVIStreamRelease(PAVISTREAM iface);
+HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*);
+HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size);
+HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size);
+#define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo)
+LONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags);
+HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize);
+HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize);
+HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
+HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
+HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread);
+HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);
+
+PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
+LPVOID  WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos);
+HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg);
+
+HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler);
+HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams);
+HRESULT WINAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM * ppstream);
+
+HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile,
+				      DWORD fccType, LONG lParam,
+				      UINT mode, CLSID *pclsidHandler);
+HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile,
+				      DWORD fccType, LONG lParam,
+				      UINT mode, CLSID *pclsidHandler);
+#define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile)
+
+LONG WINAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate);
+LONG WINAPI AVIStreamEndStreaming(PAVISTREAM pavi);
+
+HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving);
+HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving);
+#define AVIBuildFilter WINELIB_NAME_AW(AVIBuildFilter)
+
+BOOL WINAPI AVISaveOptions(HWND hWnd,UINT uFlags,INT nStream,
+			   PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *ppOptions);
+HRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions);
+
+HRESULT CDECL AVISaveA(LPCSTR szFile, CLSID *pclsidHandler,
+             AVISAVECALLBACK lpfnCallback, int nStreams,
+             PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...);
+HRESULT CDECL AVISaveW(LPCWSTR szFile, CLSID *pclsidHandler,
+             AVISAVECALLBACK lpfnCallback, int nStreams,
+             PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...);
+#define AVISave WINELIB_NAME_AW(AVISave)
+
+HRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler,
+			 AVISAVECALLBACK lpfnCallback, int nStream,
+			 PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);
+HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler,
+			 AVISAVECALLBACK lpfnCallback, int nStream,
+			 PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);
+#define AVISaveV WINELIB_NAME_AW(AVISaveV)
+
+LONG WINAPI AVIStreamStart(PAVISTREAM iface);
+LONG WINAPI AVIStreamLength(PAVISTREAM iface);
+LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample);
+LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime);
+
+#define AVIFileClose(pavi) \
+    AVIFileRelease(pavi)
+#define AVIStreamClose(pavi) \
+    AVIStreamRelease(pavi);
+#define AVIStreamEnd(pavi) \
+    (AVIStreamStart(pavi) + AVIStreamLength(pavi))
+#define AVIStreamEndTime(pavi) \
+    AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi))
+#define AVIStreamFormatSize(pavi, lPos, plSize) \
+    AVIStreamReadFormat(pavi, lPos, NULL, plSize)
+#define AVIStreamLengthTime(pavi) \
+    AVIStreamSampleToTime(pavi, AVIStreamLength(pavi))
+#define AVIStreamSampleSize(pavi,pos,psize) \
+    AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL)
+#define AVIStreamSampleToSample(pavi1, pavi2, samp2) \
+    AVIStreamTimeToSample(pavi1, AVIStreamSampleToTime(pavi2, samp2))
+#define AVIStreamStartTime(pavi) \
+    AVIStreamSampleToTime(pavi, AVIStreamStart(pavi))
+
+#define AVIStreamNextSample(pavi, pos) \
+    AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_ANY)
+#define AVIStreamPrevSample(pavi, pos) \
+    AVIStreamFindSample(pavi, pos - 1, FIND_PREV | FIND_ANY)
+#define AVIStreamNearestSample(pavi, pos) \
+    AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_ANY)
+#define AVStreamNextKeyFrame(pavi,pos) \
+    AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_KEY)
+#define AVStreamPrevKeyFrame(pavi,pos) \
+    AVIStreamFindSample(pavi, pos - 1, FIND_NEXT | FIND_KEY)
+#define AVIStreamNearestKeyFrame(pavi,pos) \
+    AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_KEY)
+#define AVIStreamIsKeyFrame(pavi, pos) \
+    (AVIStreamNearestKeyFrame(pavi, pos) == pos)
+
+/*****************************************************************************
+ * IAVIStreaming interface
+ */
+#define INTERFACE IAVIStreaming
+DECLARE_INTERFACE_(IAVIStreaming,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IAVIStreaming methods ***/
+    STDMETHOD(Begin)(IAVIStreaming*iface,LONG lStart,LONG lEnd,LONG lRate) PURE;
+    STDMETHOD(End)(IAVIStreaming*iface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIStreaming_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIStreaming_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IAVIStreaming_Release(p)            (p)->lpVtbl->Release(p)
+/*** IAVIStreaming methods ***/
+#define IAVIStreaming_Begin(p,a,b,c)        (p)->lpVtbl->Begin(p,a,b,c)
+#define IAVIStreaming_End(p)                (p)->lpVtbl->End(p)
+#endif
+
+/*****************************************************************************
+ * IAVIEditStream interface
+ */
+#define INTERFACE IAVIEditStream
+DECLARE_INTERFACE_(IAVIEditStream,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IAVIEditStream methods ***/
+    STDMETHOD(Cut)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE;
+    STDMETHOD(Copy)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE;
+    STDMETHOD(Paste)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM pSource,LONG lStart,LONG lEnd) PURE;
+    STDMETHOD(Clone)(IAVIEditStream*iface,PAVISTREAM*ppResult) PURE;
+    STDMETHOD(SetInfo)(IAVIEditStream*iface,LPAVISTREAMINFOW asi, LONG size) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIEditStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIEditStream_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IAVIEditStream_Release(p)            (p)->lpVtbl->Release(p)
+/*** IAVIEditStream methods ***/
+#define IAVIEditStream_Cut(p,a,b,c)	     (p)->lpVtbl->Cut(p,a,b,c)
+#define IAVIEditStream_Copy(p,a,b,c)	     (p)->lpVtbl->Copy(p,a,b,c)
+#define IAVIEditStream_Paste(p,a,b,c,d,e)    (p)->lpVtbl->Paste(p,a,b,c,d,e)
+#define IAVIEditStream_Clone(p,a)	     (p)->lpVtbl->Clone(p,a)
+#define IAVIEditStream_SetInfo(p,a,b)	     (p)->lpVtbl->SetInfo(p,a,b)
+#endif
+
+HRESULT WINAPI CreateEditableStream(PAVISTREAM *ppEditable,PAVISTREAM pSource);
+HRESULT WINAPI EditStreamClone(PAVISTREAM pStream, PAVISTREAM *ppResult);
+HRESULT WINAPI EditStreamCopy(PAVISTREAM pStream, LONG *plStart,
+			      LONG *plLength, PAVISTREAM *ppResult);
+HRESULT WINAPI EditStreamCut(PAVISTREAM pStream, LONG *plStart,
+			     LONG *plLength, PAVISTREAM *ppResult);
+HRESULT WINAPI EditStreamPaste(PAVISTREAM pDest, LONG *plStart, LONG *plLength,
+			       PAVISTREAM pSource, LONG lStart, LONG lEnd);
+
+HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi,
+				  LONG size);
+HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi,
+				  LONG size);
+#define EditStreamSetInfo WINELIB_NAME_AW(EditStreamSetInfo)
+
+HRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, LPCSTR szName);
+HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName);
+#define EditStreamSetName WINELIB_NAME_AW(EditStreamSetName)
+
+/*****************************************************************************
+ * IAVIFile interface
+ */
+/* In Win32 this interface uses UNICODE only */
+#define INTERFACE IAVIFile
+DECLARE_INTERFACE_(IAVIFile,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IAVIFile methods ***/
+    STDMETHOD(Info)(THIS_ AVIFILEINFOW *pfi, LONG lSize) PURE;
+    STDMETHOD(GetStream)(THIS_ PAVISTREAM *ppStream, DWORD fccType, LONG lParam) PURE;
+    STDMETHOD(CreateStream)(THIS_ PAVISTREAM *ppStream, AVISTREAMINFOW *psi) PURE;
+    STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE;
+    STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE;
+    STDMETHOD(EndRecord)(THIS) PURE;
+    STDMETHOD(DeleteStream)(THIS_ DWORD fccType, LONG lParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIFile_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IAVIFile_Release(p)            (p)->lpVtbl->Release(p)
+/*** IAVIFile methods ***/
+#define IAVIFile_Info(p,a,b)         (p)->lpVtbl->Info(p,a,b)
+#define IAVIFile_GetStream(p,a,b,c)  (p)->lpVtbl->GetStream(p,a,b,c)
+#define IAVIFile_CreateStream(p,a,b) (p)->lpVtbl->CreateStream(p,a,b)
+#define IAVIFile_WriteData(p,a,b,c)  (p)->lpVtbl->WriteData(p,a,b,c)
+#define IAVIFile_ReadData(p,a,b,c)   (p)->lpVtbl->ReadData(p,a,b,c)
+#define IAVIFile_EndRecord(p)        (p)->lpVtbl->EndRecord(p)
+#define IAVIFile_DeleteStream(p,a,b) (p)->lpVtbl->DeleteStream(p,a,b)
+#endif
+
+void WINAPI AVIFileInit(void);
+void WINAPI AVIFileExit(void);
+
+HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);
+HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler);
+#define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen)
+
+ULONG   WINAPI AVIFileAddRef(PAVIFILE pfile);
+ULONG   WINAPI AVIFileRelease(PAVIFILE pfile);
+HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize);
+HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize);
+#define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo)
+HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam);
+HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi);
+HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi);
+#define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream)
+HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size);
+HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size);
+HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile);
+
+/*****************************************************************************
+ * IGetFrame interface
+ */
+#define INTERFACE IGetFrame
+DECLARE_INTERFACE_(IGetFrame,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IGetFrame methods ***/
+    STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG lPos) PURE;
+    STDMETHOD(Begin)(THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE;
+    STDMETHOD(End)(THIS) PURE;
+    STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT x, INT y, INT dx, INT dy) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IGetFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IGetFrame_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IGetFrame_Release(p)            (p)->lpVtbl->Release(p)
+/*** IGetFrame methods ***/
+#define IGetFrame_GetFrame(p,a)            (p)->lpVtbl->GetFrame(p,a)
+#define IGetFrame_Begin(p,a,b,c)           (p)->lpVtbl->Begin(p,a,b,c)
+#define IGetFrame_End(p)                   (p)->lpVtbl->End(p)
+#define IGetFrame_SetFormat(p,a,b,c,d,e,f) (p)->lpVtbl->SetFormat(p,a,b,c,d,e,f)
+#endif
+
+HRESULT WINAPI AVIClearClipboard(void);
+HRESULT WINAPI AVIGetFromClipboard(PAVIFILE *ppfile);
+HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile);
+
+#ifdef OFN_READONLY
+BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn);
+BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn);
+#define GetOpenFileNamePreview WINELIB_NAME_AW(GetOpenFileNamePreview)
+BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn);
+BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn);
+#define GetSaveFileNamePreview WINELIB_NAME_AW(GetSaveFileNamePreview)
+#endif
+
+#define AVIERR_OK		0
+#define MAKE_AVIERR(error)	MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error)
+
+#define AVIERR_UNSUPPORTED	MAKE_AVIERR(101)
+#define AVIERR_BADFORMAT	MAKE_AVIERR(102)
+#define AVIERR_MEMORY		MAKE_AVIERR(103)
+#define AVIERR_INTERNAL		MAKE_AVIERR(104)
+#define AVIERR_BADFLAGS		MAKE_AVIERR(105)
+#define AVIERR_BADPARAM		MAKE_AVIERR(106)
+#define AVIERR_BADSIZE		MAKE_AVIERR(107)
+#define AVIERR_BADHANDLE	MAKE_AVIERR(108)
+#define AVIERR_FILEREAD		MAKE_AVIERR(109)
+#define AVIERR_FILEWRITE	MAKE_AVIERR(110)
+#define AVIERR_FILEOPEN		MAKE_AVIERR(111)
+#define AVIERR_COMPRESSOR	MAKE_AVIERR(112)
+#define AVIERR_NOCOMPRESSOR	MAKE_AVIERR(113)
+#define AVIERR_READONLY		MAKE_AVIERR(114)
+#define AVIERR_NODATA		MAKE_AVIERR(115)
+#define AVIERR_BUFFERTOOSMALL	MAKE_AVIERR(116)
+#define AVIERR_CANTCOMPRESS	MAKE_AVIERR(117)
+#define AVIERR_USERABORT	MAKE_AVIERR(198)
+#define AVIERR_ERROR		MAKE_AVIERR(199)
+
+BOOL VFWAPIV MCIWndRegisterClass(void);
+
+HWND VFWAPIV MCIWndCreateA(HWND, HINSTANCE, DWORD, LPCSTR);
+HWND VFWAPIV MCIWndCreateW(HWND, HINSTANCE, DWORD, LPCWSTR);
+#define     MCIWndCreate WINELIB_NAME_AW(MCIWndCreate)
+
+#define MCIWNDOPENF_NEW			0x0001
+
+#define MCIWNDF_NOAUTOSIZEWINDOW	0x0001
+#define MCIWNDF_NOPLAYBAR		0x0002
+#define MCIWNDF_NOAUTOSIZEMOVIE		0x0004
+#define MCIWNDF_NOMENU			0x0008
+#define MCIWNDF_SHOWNAME		0x0010
+#define MCIWNDF_SHOWPOS			0x0020
+#define MCIWNDF_SHOWMODE		0x0040
+#define MCIWNDF_SHOWALL			0x0070
+
+#define MCIWNDF_NOTIFYMODE		0x0100
+#define MCIWNDF_NOTIFYPOS		0x0200
+#define MCIWNDF_NOTIFYSIZE		0x0400
+#define MCIWNDF_NOTIFYERROR		0x1000
+#define MCIWNDF_NOTIFYALL		0x1F00
+
+#define MCIWNDF_NOTIFYANSI		0x0080
+
+#define MCIWNDF_NOTIFYMEDIAA		0x0880
+#define MCIWNDF_NOTIFYMEDIAW		0x0800
+#define MCIWNDF_NOTIFYMEDIA WINELIB_NAME_AW(MCIWNDF_NOTIFYMEDIA)
+
+#define MCIWNDF_RECORD			0x2000
+#define MCIWNDF_NOERRORDLG		0x4000
+#define MCIWNDF_NOOPEN			0x8000
+
+#ifdef __cplusplus
+#define MCIWndSM ::SendMessage
+#else
+#define MCIWndSM SendMessage
+#endif
+
+#define MCIWndCanPlay(hWnd)         (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0)
+#define MCIWndCanRecord(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0)
+#define MCIWndCanSave(hWnd)         (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0)
+#define MCIWndCanWindow(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0)
+#define MCIWndCanEject(hWnd)        (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0)
+#define MCIWndCanConfig(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0)
+#define MCIWndPaletteKick(hWnd)     (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0)
+
+#define MCIWndSave(hWnd,szFile)	    (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile))
+#define MCIWndSaveDialog(hWnd)      MCIWndSave(hWnd,-1)
+
+#define MCIWndNew(hWnd,lp)          (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp))
+
+#define MCIWndRecord(hWnd)          (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0)
+#define MCIWndOpen(hWnd,sz,f)       (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))
+#define MCIWndOpenDialog(hWnd)      MCIWndOpen(hWnd,-1,0)
+#define MCIWndClose(hWnd)           (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0)
+#define MCIWndPlay(hWnd)            (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0)
+#define MCIWndStop(hWnd)            (LONG)MCIWndSM(hWnd,MCI_STOP,0,0)
+#define MCIWndPause(hWnd)           (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0)
+#define MCIWndResume(hWnd)          (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0)
+#define MCIWndSeek(hWnd,lPos)       (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos))
+#define MCIWndEject(hWnd)           (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0)
+
+#define MCIWndHome(hWnd)            MCIWndSeek(hWnd,MCIWND_START)
+#define MCIWndEnd(hWnd)             MCIWndSeek(hWnd,MCIWND_END)
+
+#define MCIWndGetSource(hWnd,prc)   (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPutSource(hWnd,prc)   (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc))
+
+#define MCIWndGetDest(hWnd,prc)     (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPutDest(hWnd,prc)     (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc))
+
+#define MCIWndPlayReverse(hWnd)     (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0)
+#define MCIWndPlayFrom(hWnd,lPos)   (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos))
+#define MCIWndPlayTo(hWnd,lPos)     (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO,  0,(LPARAM)(LONG)(lPos))
+#define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd))
+
+#define MCIWndGetDeviceID(hWnd)     (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0)
+#define MCIWndGetAlias(hWnd)        (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0)
+#define MCIWndGetMode(hWnd,lp,len)  (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetPosition(hWnd)     (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0)
+#define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetStart(hWnd)        (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0)
+#define MCIWndGetLength(hWnd)       (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0)
+#define MCIWndGetEnd(hWnd)          (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0)
+
+#define MCIWndStep(hWnd,n)          (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(LONG)(n))
+
+#define MCIWndDestroy(hWnd)         (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0)
+#define MCIWndSetZoom(hWnd,iZoom)   (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom))
+#define MCIWndGetZoom(hWnd)         (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0)
+#define MCIWndSetVolume(hWnd,iVol)  (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol))
+#define MCIWndGetVolume(hWnd)       (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0)
+#define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed))
+#define MCIWndGetSpeed(hWnd)        (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0)
+#define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndValidateMedia(hWnd)   (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0)
+
+#define MCIWndSetRepeat(hWnd,f)     (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f))
+#define MCIWndGetRepeat(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0)
+
+#define MCIWndUseFrames(hWnd)       MCIWndSetTimeFormat(hWnd,TEXT("frames"))
+#define MCIWndUseTime(hWnd)         MCIWndSetTimeFormat(hWnd,TEXT("ms"))
+
+#define MCIWndSetActiveTimer(hWnd,active)				\
+	(VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,			\
+        (WPARAM)(UINT)(active),0)
+#define MCIWndSetInactiveTimer(hWnd,inactive)				\
+	(VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,			\
+        (WPARAM)(UINT)(inactive),0)
+#define MCIWndSetTimers(hWnd,active,inactive)				\
+	    (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),\
+	    (LPARAM)(UINT)(inactive))
+#define MCIWndGetActiveTimer(hWnd)					\
+        (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0);
+#define MCIWndGetInactiveTimer(hWnd)					\
+        (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0);
+
+#define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0)
+
+#define MCIWndSendString(hWnd,sz)  (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz))
+#define MCIWndReturnString(hWnd,lp,len)  (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+
+#define MCIWndGetPalette(hWnd)      (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0)
+#define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0)
+
+#define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetDevice(hWnd,lp,len)   (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+
+#define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0)
+#define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))
+
+#define MCIWndOpenInterface(hWnd,pUnk)  (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk))
+
+#define MCIWndSetOwner(hWnd,hWndP)  (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0)
+
+#define MCIWNDM_GETDEVICEID	(WM_USER + 100)
+#define MCIWNDM_GETSTART	(WM_USER + 103)
+#define MCIWNDM_GETLENGTH	(WM_USER + 104)
+#define MCIWNDM_GETEND		(WM_USER + 105)
+#define MCIWNDM_EJECT		(WM_USER + 107)
+#define MCIWNDM_SETZOOM		(WM_USER + 108)
+#define MCIWNDM_GETZOOM         (WM_USER + 109)
+#define MCIWNDM_SETVOLUME	(WM_USER + 110)
+#define MCIWNDM_GETVOLUME	(WM_USER + 111)
+#define MCIWNDM_SETSPEED	(WM_USER + 112)
+#define MCIWNDM_GETSPEED	(WM_USER + 113)
+#define MCIWNDM_SETREPEAT	(WM_USER + 114)
+#define MCIWNDM_GETREPEAT	(WM_USER + 115)
+#define MCIWNDM_REALIZE         (WM_USER + 118)
+#define MCIWNDM_VALIDATEMEDIA   (WM_USER + 121)
+#define MCIWNDM_PLAYFROM	(WM_USER + 122)
+#define MCIWNDM_PLAYTO          (WM_USER + 123)
+#define MCIWNDM_GETPALETTE      (WM_USER + 126)
+#define MCIWNDM_SETPALETTE      (WM_USER + 127)
+#define MCIWNDM_SETTIMERS	(WM_USER + 129)
+#define MCIWNDM_SETACTIVETIMER	(WM_USER + 130)
+#define MCIWNDM_SETINACTIVETIMER (WM_USER + 131)
+#define MCIWNDM_GETACTIVETIMER	(WM_USER + 132)
+#define MCIWNDM_GETINACTIVETIMER (WM_USER + 133)
+#define MCIWNDM_CHANGESTYLES	(WM_USER + 135)
+#define MCIWNDM_GETSTYLES	(WM_USER + 136)
+#define MCIWNDM_GETALIAS	(WM_USER + 137)
+#define MCIWNDM_PLAYREVERSE	(WM_USER + 139)
+#define MCIWNDM_GET_SOURCE      (WM_USER + 140)
+#define MCIWNDM_PUT_SOURCE      (WM_USER + 141)
+#define MCIWNDM_GET_DEST        (WM_USER + 142)
+#define MCIWNDM_PUT_DEST        (WM_USER + 143)
+#define MCIWNDM_CAN_PLAY        (WM_USER + 144)
+#define MCIWNDM_CAN_WINDOW      (WM_USER + 145)
+#define MCIWNDM_CAN_RECORD      (WM_USER + 146)
+#define MCIWNDM_CAN_SAVE        (WM_USER + 147)
+#define MCIWNDM_CAN_EJECT       (WM_USER + 148)
+#define MCIWNDM_CAN_CONFIG      (WM_USER + 149)
+#define MCIWNDM_PALETTEKICK     (WM_USER + 150)
+#define MCIWNDM_OPENINTERFACE	(WM_USER + 151)
+#define MCIWNDM_SETOWNER	(WM_USER + 152)
+
+#define MCIWNDM_SENDSTRINGA	(WM_USER + 101)
+#define MCIWNDM_GETPOSITIONA	(WM_USER + 102)
+#define MCIWNDM_GETMODEA	(WM_USER + 106)
+#define MCIWNDM_SETTIMEFORMATA  (WM_USER + 119)
+#define MCIWNDM_GETTIMEFORMATA  (WM_USER + 120)
+#define MCIWNDM_GETFILENAMEA    (WM_USER + 124)
+#define MCIWNDM_GETDEVICEA      (WM_USER + 125)
+#define MCIWNDM_GETERRORA       (WM_USER + 128)
+#define MCIWNDM_NEWA		(WM_USER + 134)
+#define MCIWNDM_RETURNSTRINGA	(WM_USER + 138)
+#define MCIWNDM_OPENA		(WM_USER + 153)
+
+#define MCIWNDM_SENDSTRINGW	(WM_USER + 201)
+#define MCIWNDM_GETPOSITIONW	(WM_USER + 202)
+#define MCIWNDM_GETMODEW	(WM_USER + 206)
+#define MCIWNDM_SETTIMEFORMATW  (WM_USER + 219)
+#define MCIWNDM_GETTIMEFORMATW  (WM_USER + 220)
+#define MCIWNDM_GETFILENAMEW    (WM_USER + 224)
+#define MCIWNDM_GETDEVICEW      (WM_USER + 225)
+#define MCIWNDM_GETERRORW       (WM_USER + 228)
+#define MCIWNDM_NEWW		(WM_USER + 234)
+#define MCIWNDM_RETURNSTRINGW	(WM_USER + 238)
+#define MCIWNDM_OPENW		(WM_USER + 252)
+
+#define MCIWNDM_SENDSTRING	WINELIB_NAME_AW(MCIWNDM_SENDSTRING)
+#define MCIWNDM_GETPOSITION	WINELIB_NAME_AW(MCIWNDM_GETPOSITION)
+#define MCIWNDM_GETMODE		WINELIB_NAME_AW(MCIWNDM_GETMODE)
+#define MCIWNDM_SETTIMEFORMAT	WINELIB_NAME_AW(MCIWNDM_SETTIMEFORMAT)
+#define MCIWNDM_GETTIMEFORMAT	WINELIB_NAME_AW(MCIWNDM_GETTIMEFORMAT)
+#define MCIWNDM_GETFILENAME	WINELIB_NAME_AW(MCIWNDM_GETFILENAME)
+#define MCIWNDM_GETDEVICE	WINELIB_NAME_AW(MCIWNDM_GETDEVICE)
+#define MCIWNDM_GETERROR	WINELIB_NAME_AW(MCIWNDM_GETERROR)
+#define MCIWNDM_NEW		WINELIB_NAME_AW(MCIWNDM_NEW)
+#define MCIWNDM_RETURNSTRING	WINELIB_NAME_AW(MCIWNDM_RETURNSTRING)
+#define MCIWNDM_OPEN		WINELIB_NAME_AW(MCIWNDM_OPEN)
+
+#define MCIWNDM_NOTIFYMODE      (WM_USER + 200)
+#define MCIWNDM_NOTIFYPOS	(WM_USER + 201)
+#define MCIWNDM_NOTIFYSIZE	(WM_USER + 202)
+#define MCIWNDM_NOTIFYMEDIA     (WM_USER + 203)
+#define MCIWNDM_NOTIFYERROR     (WM_USER + 205)
+
+#define MCIWND_START                -1
+#define MCIWND_END                  -2
+
+/********************************************
+ * DrawDib declarations
+ */
+
+typedef struct
+{ 
+    LONG    timeCount; 
+    LONG    timeDraw; 
+    LONG    timeDecompress; 
+    LONG    timeDither; 
+    LONG    timeStretch; 
+    LONG    timeBlt; 
+    LONG    timeSetDIBits; 
+} DRAWDIBTIME, *LPDRAWDIBTIME; 
+
+HDRAWDIB VFWAPI DrawDibOpen( void );
+UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);
+
+BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst,
+			 LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags);
+
+BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst,
+			LPBITMAPINFOHEADER lpbi, LPVOID lpBits,
+			INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags);
+
+/* DrawDibDraw flags */
+
+#define DDF_UPDATE			0x0002
+#define DDF_SAME_HDC			0x0004
+#define DDF_SAME_DRAW			0x0008
+#define DDF_DONTDRAW			0x0010
+#define DDF_ANIMATE			0x0020
+#define DDF_BUFFER			0x0040
+#define DDF_JUSTDRAWIT			0x0080
+#define DDF_FULLSCREEN			0x0100
+#define DDF_BACKGROUNDPAL		0x0200
+#define DDF_NOTKEYFRAME			0x0400
+#define DDF_HURRYUP			0x0800
+#define DDF_HALFTONE			0x1000
+
+#define DDF_PREROLL         		DDF_DONTDRAW
+#define DDF_SAME_DIB        		DDF_SAME_DRAW
+#define DDF_SAME_SIZE       		DDF_SAME_DRAW
+
+BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);
+HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe);
+LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags);
+
+BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate);
+BOOL VFWAPI DrawDibStop(HDRAWDIB hdd);
+#define DrawDibUpdate(hdd, hdc, x, y) \
+        DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE)
+
+BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibClose(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime);
+
+/* display profiling */
+#define PD_CAN_DRAW_DIB         0x0001
+#define PD_CAN_STRETCHDIB       0x0002
+#define PD_STRETCHDIB_1_1_OK    0x0004
+#define PD_STRETCHDIB_1_2_OK    0x0008
+#define PD_STRETCHDIB_1_N_OK    0x0010
+
+DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);
+
+DECLARE_HANDLE(HVIDEO);
+typedef HVIDEO *LPHVIDEO;
+
+DWORD VFWAPI VideoForWindowsVersion(void);
+
+LONG  VFWAPI InitVFW(void);
+LONG  VFWAPI TermVFW(void);
+
+#define DV_ERR_OK            (0)
+#define DV_ERR_BASE          (1)
+#define DV_ERR_NONSPECIFIC   (DV_ERR_BASE)
+#define DV_ERR_BADFORMAT     (DV_ERR_BASE + 1)
+#define DV_ERR_STILLPLAYING  (DV_ERR_BASE + 2)
+#define DV_ERR_UNPREPARED    (DV_ERR_BASE + 3)
+#define DV_ERR_SYNC          (DV_ERR_BASE + 4)
+#define DV_ERR_TOOMANYCHANNELS (DV_ERR_BASE + 5)
+#define DV_ERR_NOTDETECTED   (DV_ERR_BASE + 6)
+#define DV_ERR_BADINSTALL    (DV_ERR_BASE + 7)
+#define DV_ERR_CREATEPALETTE (DV_ERR_BASE + 8)
+#define DV_ERR_SIZEFIELD     (DV_ERR_BASE + 9)
+#define DV_ERR_PARAM1        (DV_ERR_BASE + 10)
+#define DV_ERR_PARAM2        (DV_ERR_BASE + 11)
+#define DV_ERR_CONFIG1       (DV_ERR_BASE + 12)
+#define DV_ERR_CONFIG2       (DV_ERR_BASE + 13)
+#define DV_ERR_FLAGS         (DV_ERR_BASE + 14)
+#define DV_ERR_13            (DV_ERR_BASE + 15)
+
+#define DV_ERR_NOTSUPPORTED  (DV_ERR_BASE + 16)
+#define DV_ERR_NOMEM         (DV_ERR_BASE + 17)
+#define DV_ERR_ALLOCATED     (DV_ERR_BASE + 18)
+#define DV_ERR_BADDEVICEID   (DV_ERR_BASE + 19)
+#define DV_ERR_INVALHANDLE   (DV_ERR_BASE + 20)
+#define DV_ERR_BADERRNUM     (DV_ERR_BASE + 21)
+#define DV_ERR_NO_BUFFERS    (DV_ERR_BASE + 22)
+
+#define DV_ERR_MEM_CONFLICT  (DV_ERR_BASE + 23)
+#define DV_ERR_IO_CONFLICT   (DV_ERR_BASE + 24)
+#define DV_ERR_DMA_CONFLICT  (DV_ERR_BASE + 25)
+#define DV_ERR_INT_CONFLICT  (DV_ERR_BASE + 26)
+#define DV_ERR_PROTECT_ONLY  (DV_ERR_BASE + 27)
+#define DV_ERR_LASTERROR     (DV_ERR_BASE + 27)
+
+#define DV_ERR_USER_MSG      (DV_ERR_BASE + 1000)
+
+#ifndef MM_DRVM_OPEN
+#define MM_DRVM_OPEN       0x3D0
+#define MM_DRVM_CLOSE      0x3D1
+#define MM_DRVM_DATA       0x3D2
+#define MM_DRVM_ERROR      0x3D3
+
+#define DV_VM_OPEN         MM_DRVM_OPEN
+#define DV_VM_CLOSE        MM_DRVM_CLOSE
+#define DV_VM_DATA         MM_DRVM_DATA
+#define DV_VM_ERROR        MM_DRVM_ERROR
+#endif
+
+typedef struct videohdr_tag {
+    LPBYTE      lpData;
+    DWORD       dwBufferLength;
+    DWORD       dwBytesUsed;
+    DWORD       dwTimeCaptured;
+    DWORD_PTR   dwUser;
+    DWORD       dwFlags;
+    DWORD_PTR   dwReserved[4];
+} VIDEOHDR, *PVIDEOHDR, *LPVIDEOHDR;
+
+#define VHDR_DONE       0x00000001
+#define VHDR_PREPARED   0x00000002
+#define VHDR_INQUEUE    0x00000004
+#define VHDR_KEYFRAME   0x00000008
+
+typedef struct channel_caps_tag {
+    DWORD       dwFlags;
+    DWORD       dwSrcRectXMod;
+    DWORD       dwSrcRectYMod;
+    DWORD       dwSrcRectWidthMod;
+    DWORD       dwSrcRectHeightMod;
+    DWORD       dwDstRectXMod;
+    DWORD       dwDstRectYMod;
+    DWORD       dwDstRectWidthMod;
+    DWORD       dwDstRectHeightMod;
+} CHANNEL_CAPS, *PCHANNEL_CAPS, *LPCHANNEL_CAPS;
+
+#define VCAPS_OVERLAY       0x00000001
+#define VCAPS_SRC_CAN_CLIP  0x00000002
+#define VCAPS_DST_CAN_CLIP  0x00000004
+#define VCAPS_CAN_SCALE     0x00000008
+
+#define VIDEO_EXTERNALIN        0x0001
+#define VIDEO_EXTERNALOUT       0x0002
+#define VIDEO_IN                0x0004
+#define VIDEO_OUT               0x0008
+
+#define VIDEO_DLG_QUERY         0x0010
+
+#define VIDEO_CONFIGURE_QUERY   0x8000
+
+#define VIDEO_CONFIGURE_SET     0x1000
+
+#define VIDEO_CONFIGURE_GET     0x2000
+#define VIDEO_CONFIGURE_QUERYSIZE 0x0001
+
+#define VIDEO_CONFIGURE_CURRENT 0x0010
+#define VIDEO_CONFIGURE_NOMINAL 0x0020
+#define VIDEO_CONFIGURE_MIN     0x0040
+#define VIDEO_CONFIGURE_MAX     0x0080
+
+#define DVM_USER                0x4000
+
+#define DVM_CONFIGURE_START     0x1000
+#define DVM_CONFIGURE_END       0x1FFF
+
+#define DVM_PALETTE             (DVM_CONFIGURE_START + 1)
+#define DVM_FORMAT              (DVM_CONFIGURE_START + 2)
+#define DVM_PALETTERGB555       (DVM_CONFIGURE_START + 3)
+#define DVM_SRC_RECT            (DVM_CONFIGURE_START + 4)
+#define DVM_DST_RECT            (DVM_CONFIGURE_START + 5)
+
+#define AVICapSM(hwnd,m,w,l) ((IsWindow(hwnd)) ? SendMessage(hwnd,m,w,l) : 0)
+
+#define WM_CAP_START                    WM_USER
+
+#define WM_CAP_UNICODE_START            WM_USER+100
+
+#define WM_CAP_GET_CAPSTREAMPTR         (WM_CAP_START + 1)
+
+#define WM_CAP_SET_CALLBACK_ERRORW      (WM_CAP_UNICODE_START + 2)
+#define WM_CAP_SET_CALLBACK_STATUSW     (WM_CAP_UNICODE_START + 3)
+#define WM_CAP_SET_CALLBACK_ERRORA      (WM_CAP_START + 2)
+#define WM_CAP_SET_CALLBACK_STATUSA     (WM_CAP_START+ 3)
+
+#define WM_CAP_SET_CALLBACK_ERROR       WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_ERROR)
+#define WM_CAP_SET_CALLBACK_STATUS      WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_STATUS)
+
+#define WM_CAP_SET_CALLBACK_YIELD       (WM_CAP_START +  4)
+#define WM_CAP_SET_CALLBACK_FRAME       (WM_CAP_START +  5)
+#define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START +  6)
+#define WM_CAP_SET_CALLBACK_WAVESTREAM  (WM_CAP_START +  7)
+#define WM_CAP_GET_USER_DATA            (WM_CAP_START +  8)
+#define WM_CAP_SET_USER_DATA            (WM_CAP_START +  9)
+
+#define WM_CAP_DRIVER_CONNECT           (WM_CAP_START +  10)
+#define WM_CAP_DRIVER_DISCONNECT        (WM_CAP_START +  11)
+
+#define WM_CAP_DRIVER_GET_NAMEA         (WM_CAP_START +  12)
+#define WM_CAP_DRIVER_GET_VERSIONA      (WM_CAP_START +  13)
+#define WM_CAP_DRIVER_GET_NAMEW         (WM_CAP_UNICODE_START +  12)
+#define WM_CAP_DRIVER_GET_VERSIONW      (WM_CAP_UNICODE_START +  13)
+
+#define WM_CAP_DRIVER_GET_NAME          WINELIB_NAME_AW(WM_CAP_DRIVER_GET_NAME)
+#define WM_CAP_DRIVER_GET_VERSION       WINELIB_NAME_AW(WM_CAP_DRIVER_GET_VERSION)
+
+#define WM_CAP_DRIVER_GET_CAPS          (WM_CAP_START +  14)
+
+#define WM_CAP_FILE_SET_CAPTURE_FILEA   (WM_CAP_START +  20)
+#define WM_CAP_FILE_GET_CAPTURE_FILEA   (WM_CAP_START +  21)
+#define WM_CAP_FILE_ALLOCATE            (WM_CAP_START +  22)
+#define WM_CAP_FILE_SAVEASA             (WM_CAP_START +  23)
+#define WM_CAP_FILE_SET_INFOCHUNK       (WM_CAP_START +  24)
+#define WM_CAP_FILE_SAVEDIBA            (WM_CAP_START +  25)
+#define WM_CAP_FILE_SET_CAPTURE_FILEW   (WM_CAP_UNICODE_START +  20)
+#define WM_CAP_FILE_GET_CAPTURE_FILEW   (WM_CAP_UNICODE_START +  21)
+#define WM_CAP_FILE_SAVEASW             (WM_CAP_UNICODE_START +  23)
+#define WM_CAP_FILE_SAVEDIBW            (WM_CAP_UNICODE_START +  25)
+
+#define WM_CAP_FILE_SET_CAPTURE_FILE    WINELIB_NAME_AW(WM_CAP_FILE_SET_CAPTURE_FILE)
+#define WM_CAP_FILE_GET_CAPTURE_FILE    WINELIB_NAME_AW(WM_CAP_FILE_GET_CAPTURE_FILE)
+#define WM_CAP_FILE_SAVEAS              WINELIB_NAME_AW(WM_CAP_FILE_SAVEAS)
+#define WM_CAP_FILE_SAVEDIB             WINELIB_NAME_AW(WM_CAP_FILE_SAVEDIB)
+
+#define WM_CAP_EDIT_COPY                (WM_CAP_START +  30)
+
+#define WM_CAP_SET_AUDIOFORMAT          (WM_CAP_START +  35)
+#define WM_CAP_GET_AUDIOFORMAT          (WM_CAP_START +  36)
+
+#define WM_CAP_DLG_VIDEOFORMAT          (WM_CAP_START +  41)
+#define WM_CAP_DLG_VIDEOSOURCE          (WM_CAP_START +  42)
+#define WM_CAP_DLG_VIDEODISPLAY         (WM_CAP_START +  43)
+#define WM_CAP_GET_VIDEOFORMAT          (WM_CAP_START +  44)
+#define WM_CAP_SET_VIDEOFORMAT          (WM_CAP_START +  45)
+#define WM_CAP_DLG_VIDEOCOMPRESSION     (WM_CAP_START +  46)
+
+#define WM_CAP_SET_PREVIEW              (WM_CAP_START +  50)
+#define WM_CAP_SET_OVERLAY              (WM_CAP_START +  51)
+#define WM_CAP_SET_PREVIEWRATE          (WM_CAP_START +  52)
+#define WM_CAP_SET_SCALE                (WM_CAP_START +  53)
+#define WM_CAP_GET_STATUS               (WM_CAP_START +  54)
+#define WM_CAP_SET_SCROLL               (WM_CAP_START +  55)
+
+#define WM_CAP_GRAB_FRAME               (WM_CAP_START +  60)
+#define WM_CAP_GRAB_FRAME_NOSTOP        (WM_CAP_START +  61)
+
+#define WM_CAP_SEQUENCE                 (WM_CAP_START +  62)
+#define WM_CAP_SEQUENCE_NOFILE          (WM_CAP_START +  63)
+#define WM_CAP_SET_SEQUENCE_SETUP       (WM_CAP_START +  64)
+#define WM_CAP_GET_SEQUENCE_SETUP       (WM_CAP_START +  65)
+
+#define WM_CAP_SET_MCI_DEVICEA          (WM_CAP_START +  66)
+#define WM_CAP_GET_MCI_DEVICEA          (WM_CAP_START +  67)
+#define WM_CAP_SET_MCI_DEVICEW          (WM_CAP_UNICODE_START +  66)
+#define WM_CAP_GET_MCI_DEVICEW          (WM_CAP_UNICODE_START +  67)
+
+#define WM_CAP_SET_MCI_DEVICE           WINELIB_NAME_AW(WM_CAP_SET_MCI_DEVICE)
+#define WM_CAP_GET_MCI_DEVICE           WINELIB_NAME_AW(WM_CAP_GET_MCI_DEVICE)
+
+#define WM_CAP_STOP                     (WM_CAP_START +  68)
+#define WM_CAP_ABORT                    (WM_CAP_START +  69)
+
+#define WM_CAP_SINGLE_FRAME_OPEN        (WM_CAP_START +  70)
+#define WM_CAP_SINGLE_FRAME_CLOSE       (WM_CAP_START +  71)
+#define WM_CAP_SINGLE_FRAME             (WM_CAP_START +  72)
+
+#define WM_CAP_PAL_OPENA                (WM_CAP_START +  80)
+#define WM_CAP_PAL_SAVEA                (WM_CAP_START +  81)
+#define WM_CAP_PAL_OPENW                (WM_CAP_UNICODE_START +  80)
+#define WM_CAP_PAL_SAVEW                (WM_CAP_UNICODE_START +  81)
+
+#define WM_CAP_PAL_OPEN                 WINELIB_NAME_AW(WM_CAP_PAL_OPEN)
+#define WM_CAP_PAL_SAVE                 WINELIB_NAME_AW(WM_CAP_PAL_SAVE)
+
+#define WM_CAP_PAL_PASTE                (WM_CAP_START +  82)
+#define WM_CAP_PAL_AUTOCREATE           (WM_CAP_START +  83)
+#define WM_CAP_PAL_MANUALCREATE         (WM_CAP_START +  84)
+
+#define WM_CAP_SET_CALLBACK_CAPCONTROL  (WM_CAP_START +  85)
+
+#define WM_CAP_UNICODE_END              WM_CAP_PAL_SAVEW
+#define WM_CAP_END                      WM_CAP_UNICODE_END
+
+typedef struct tagCapDriverCaps {
+    UINT        wDeviceIndex;
+    BOOL        fHasOverlay;
+    BOOL        fHasDlgVideoSource;
+    BOOL        fHasDlgVideoFormat;
+    BOOL        fHasDlgVideoDisplay;
+    BOOL        fCaptureInitialized;
+    BOOL        fDriverSuppliesPalettes;
+    HANDLE      hVideoIn;
+    HANDLE      hVideoOut;
+    HANDLE      hVideoExtIn;
+    HANDLE      hVideoExtOut;
+} CAPDRIVERCAPS, *PCAPDRIVERCAPS, *LPCAPDRIVERCAPS;
+
+typedef struct tagCapStatus {
+    UINT        uiImageWidth;
+    UINT        uiImageHeight;
+    BOOL        fLiveWindow;
+    BOOL        fOverlayWindow;
+    BOOL        fScale;
+    POINT       ptScroll;
+    BOOL        fUsingDefaultPalette;
+    BOOL        fAudioHardware;
+    BOOL        fCapFileExists;
+    DWORD       dwCurrentVideoFrame;
+    DWORD       dwCurrentVideoFramesDropped;
+    DWORD       dwCurrentWaveSamples;
+    DWORD       dwCurrentTimeElapsedMS;
+    HPALETTE    hPalCurrent;
+    BOOL        fCapturingNow;
+    DWORD       dwReturn;
+    UINT        wNumVideoAllocated;
+    UINT        wNumAudioAllocated;
+} CAPSTATUS, *PCAPSTATUS, *LPCAPSTATUS;
+
+
+typedef struct tagCaptureParms {
+    DWORD       dwRequestMicroSecPerFrame;
+    BOOL        fMakeUserHitOKToCapture;
+    UINT        wPercentDropForError;
+    BOOL        fYield;
+    DWORD       dwIndexSize;
+    UINT        wChunkGranularity;
+    BOOL        fUsingDOSMemory;
+    UINT        wNumVideoRequested;
+    BOOL        fCaptureAudio;
+    UINT        wNumAudioRequested;
+    UINT        vKeyAbort;
+    BOOL        fAbortLeftMouse;
+    BOOL        fAbortRightMouse;
+    BOOL        fLimitEnabled;
+    UINT        wTimeLimit;
+    BOOL        fMCIControl;
+    BOOL        fStepMCIDevice;
+    DWORD       dwMCIStartTime;
+    DWORD       dwMCIStopTime;
+    BOOL        fStepCaptureAt2x;
+    UINT        wStepCaptureAverageFrames;
+    DWORD       dwAudioBufferSize;
+    BOOL        fDisableWriteCache;
+    UINT        AVStreamMaster;
+} CAPTUREPARMS, *PCAPTUREPARMS, *LPCAPTUREPARMS;
+
+typedef LRESULT (CALLBACK* CAPYIELDCALLBACK)  (HWND hWnd);
+typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz);
+typedef LRESULT (CALLBACK* CAPERRORCALLBACKW)  (HWND hWnd, int nID, LPCWSTR lpsz);
+typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz);
+typedef LRESULT (CALLBACK* CAPERRORCALLBACKA)  (HWND hWnd, int nID, LPCSTR lpsz);
+typedef LRESULT (CALLBACK* CAPVIDEOCALLBACK)  (HWND hWnd, LPVIDEOHDR lpVHdr);
+typedef LRESULT (CALLBACK* CAPWAVECALLBACK)   (HWND hWnd, LPWAVEHDR lpWHdr);
+typedef LRESULT (CALLBACK* CAPCONTROLCALLBACK)(HWND hWnd, int nState);
+
+HWND VFWAPI capCreateCaptureWindowA(LPCSTR,DWORD,INT,INT,INT,INT,HWND,INT);
+HWND VFWAPI capCreateCaptureWindowW(LPCWSTR,DWORD,INT,INT,INT,INT,HWND,INT);
+#define     capCreateCaptureWindow WINELIB_NAME_AW(capCreateCaptureWindow)
+BOOL VFWAPI capGetDriverDescriptionA(WORD,LPSTR,INT,LPSTR,INT);
+BOOL VFWAPI capGetDriverDescriptionW(WORD,LPWSTR,INT,LPWSTR,INT);
+#define     capGetDriverDescription WINELIB_NAME_AW(capGetDriverDescription)
+
+#ifdef __cplusplus
+}
+#endif  /* __cplusplus */
+
+#endif /* __WINE_VFW_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h
new file mode 100644
index 0000000..401f427
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define VFW_S_NO_MORE_ITEMS              ((HRESULT)0x00040103)
+#define VFW_S_DUPLICATE_NAME             ((HRESULT)0x0004022D)
+#define VFW_S_STATE_INTERMEDIATE         ((HRESULT)0x00040237)
+#define VFW_S_PARTIAL_RENDER             ((HRESULT)0x00040242)
+#define VFW_S_SOME_DATA_IGNORED          ((HRESULT)0x00040245)
+#define VFW_S_CONNECTIONS_DEFERRED       ((HRESULT)0x00040246)
+#define VFW_S_RESOURCE_NOT_NEEDED        ((HRESULT)0x00040250)
+#define VFW_S_MEDIA_TYPE_IGNORED         ((HRESULT)0x00040254)
+#define VFW_S_VIDEO_NOT_RENDERED         ((HRESULT)0x00040257)
+#define VFW_S_AUDIO_NOT_RENDERED         ((HRESULT)0x00040258)
+#define VFW_S_RPZA                       ((HRESULT)0x0004025A)
+#define VFW_S_ESTIMATED                  ((HRESULT)0x00040260)
+#define VFW_S_RESERVED                   ((HRESULT)0x00040263)
+#define VFW_S_STREAM_OFF                 ((HRESULT)0x00040267)
+#define VFW_S_CANT_CUE                   ((HRESULT)0x00040268)
+#define VFW_S_NO_STOP_TIME               ((HRESULT)0x00040270)
+#define VFW_S_NOPREVIEWPIN               ((HRESULT)0x0004027E)
+#define VFW_S_DVD_NON_ONE_SEQUENTIAL     ((HRESULT)0x00040280)
+#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE ((HRESULT)0x0004028C)
+#define VFW_S_DVD_NOT_ACCURATE           ((HRESULT)0x0004028D)
+#define VFW_E_INVALIDMEDIATYPE           ((HRESULT)0x80040200)
+#define VFW_E_INVALIDSUBTYPE             ((HRESULT)0x80040201)
+#define VFW_E_NEED_OWNER                 ((HRESULT)0x80040202)
+#define VFW_E_ENUM_OUT_OF_SYNC           ((HRESULT)0x80040203)
+#define VFW_E_ALREADY_CONNECTED          ((HRESULT)0x80040204)
+#define VFW_E_FILTER_ACTIVE              ((HRESULT)0x80040205)
+#define VFW_E_NO_TYPES                   ((HRESULT)0x80040206)
+#define VFW_E_NO_ACCEPTABLE_TYPES        ((HRESULT)0x80040207)
+#define VFW_E_INVALID_DIRECTION          ((HRESULT)0x80040208)
+#define VFW_E_NOT_CONNECTED              ((HRESULT)0x80040209)
+#define VFW_E_NO_ALLOCATOR               ((HRESULT)0x8004020A)
+#define VFW_E_RUNTIME_ERROR              ((HRESULT)0x8004020B)
+#define VFW_E_BUFFER_NOTSET              ((HRESULT)0x8004020C)
+#define VFW_E_BUFFER_OVERFLOW            ((HRESULT)0x8004020D)
+#define VFW_E_BADALIGN                   ((HRESULT)0x8004020E)
+#define VFW_E_ALREADY_COMMITTED          ((HRESULT)0x8004020F)
+#define VFW_E_BUFFERS_OUTSTANDING        ((HRESULT)0x80040210)
+#define VFW_E_NOT_COMMITTED              ((HRESULT)0x80040211)
+#define VFW_E_SIZENOTSET                 ((HRESULT)0x80040212)
+#define VFW_E_NO_CLOCK                   ((HRESULT)0x80040213)
+#define VFW_E_NO_SINK                    ((HRESULT)0x80040214)
+#define VFW_E_NO_INTERFACE               ((HRESULT)0x80040215)
+#define VFW_E_NOT_FOUND                  ((HRESULT)0x80040216)
+#define VFW_E_CANNOT_CONNECT             ((HRESULT)0x80040217)
+#define VFW_E_CANNOT_RENDER              ((HRESULT)0x80040218)
+#define VFW_E_CHANGING_FORMAT            ((HRESULT)0x80040219)
+#define VFW_E_NO_COLOR_KEY_SET           ((HRESULT)0x8004021A)
+#define VFW_E_NOT_OVERLAY_CONNECTION     ((HRESULT)0x8004021B)
+#define VFW_E_NOT_SAMPLE_CONNECTION      ((HRESULT)0x8004021C)
+#define VFW_E_PALETTE_SET                ((HRESULT)0x8004021D)
+#define VFW_E_COLOR_KEY_SET              ((HRESULT)0x8004021E)
+#define VFW_E_NO_COLOR_KEY_FOUND         ((HRESULT)0x8004021F)
+#define VFW_E_NO_PALETTE_AVAILABLE       ((HRESULT)0x80040220)
+#define VFW_E_NO_DISPLAY_PALETTE         ((HRESULT)0x80040221)
+#define VFW_E_TOO_MANY_COLORS            ((HRESULT)0x80040222)
+#define VFW_E_STATE_CHANGED              ((HRESULT)0x80040223)
+#define VFW_E_NOT_STOPPED                ((HRESULT)0x80040224)
+#define VFW_E_NOT_PAUSED                 ((HRESULT)0x80040225)
+#define VFW_E_NOT_RUNNING                ((HRESULT)0x80040226)
+#define VFW_E_WRONG_STATE                ((HRESULT)0x80040227)
+#define VFW_E_START_TIME_AFTER_END       ((HRESULT)0x80040228)
+#define VFW_E_INVALID_RECT               ((HRESULT)0x80040229)
+#define VFW_E_TYPE_NOT_ACCEPTED          ((HRESULT)0x8004022A)
+#define VFW_E_SAMPLE_REJECTED            ((HRESULT)0x8004022B)
+#define VFW_E_SAMPLE_REJECTED_EOS        ((HRESULT)0x8004022C)
+#define VFW_E_DUPLICATE_NAME             ((HRESULT)0x8004022D)
+#define VFW_E_TIMEOUT                    ((HRESULT)0x8004022E)
+#define VFW_E_INVALID_FILE_FORMAT        ((HRESULT)0x8004022F)
+#define VFW_E_ENUM_OUT_OF_RANGE          ((HRESULT)0x80040230)
+#define VFW_E_CIRCULAR_GRAPH             ((HRESULT)0x80040231)
+#define VFW_E_NOT_ALLOWED_TO_SAVE        ((HRESULT)0x80040232)
+#define VFW_E_TIME_ALREADY_PASSED        ((HRESULT)0x80040233)
+#define VFW_E_ALREADY_CANCELLED          ((HRESULT)0x80040234)
+#define VFW_E_CORRUPT_GRAPH_FILE         ((HRESULT)0x80040235)
+#define VFW_E_ADVISE_ALREADY_SET         ((HRESULT)0x80040236)
+#define VFW_E_NO_MODEX_AVAILABLE         ((HRESULT)0x80040238)
+#define VFW_E_NO_ADVISE_SET              ((HRESULT)0x80040239)
+#define VFW_E_NO_FULLSCREEN              ((HRESULT)0x8004023A)
+#define VFW_E_IN_FULLSCREEN_MODE         ((HRESULT)0x8004023B)
+#define VFW_E_UNKNOWN_FILE_TYPE          ((HRESULT)0x80040240)
+#define VFW_E_CANNOT_LOAD_SOURCE_FILTER  ((HRESULT)0x80040241)
+#define VFW_E_FILE_TOO_SHORT             ((HRESULT)0x80040243)
+#define VFW_E_INVALID_FILE_VERSION       ((HRESULT)0x80040244)
+#define VFW_E_INVALID_CLSID              ((HRESULT)0x80040247)
+#define VFW_E_INVALID_MEDIA_TYPE         ((HRESULT)0x80040248)
+#define VFW_E_SAMPLE_TIME_NOT_SET        ((HRESULT)0x80040249)
+#define VFW_E_MEDIA_TIME_NOT_SET         ((HRESULT)0x80040251)
+#define VFW_E_NO_TIME_FORMAT_SET         ((HRESULT)0x80040252)
+#define VFW_E_MONO_AUDIO_HW              ((HRESULT)0x80040253)
+#define VFW_E_NO_DECOMPRESSOR            ((HRESULT)0x80040255)
+#define VFW_E_NO_AUDIO_HARDWARE          ((HRESULT)0x80040256)
+#define VFW_E_RPZA                       ((HRESULT)0x80040259)
+#define VFW_E_PROCESSOR_NOT_SUITABLE     ((HRESULT)0x8004025B)
+#define VFW_E_UNSUPPORTED_AUDIO          ((HRESULT)0x8004025C)
+#define VFW_E_UNSUPPORTED_VIDEO          ((HRESULT)0x8004025D)
+#define VFW_E_MPEG_NOT_CONSTRAINED       ((HRESULT)0x8004025E)
+#define VFW_E_NOT_IN_GRAPH               ((HRESULT)0x8004025F)
+#define VFW_E_NO_TIME_FORMAT             ((HRESULT)0x80040261)
+#define VFW_E_READ_ONLY                  ((HRESULT)0x80040262)
+#define VFW_E_BUFFER_UNDERFLOW           ((HRESULT)0x80040264)
+#define VFW_E_UNSUPPORTED_STREAM         ((HRESULT)0x80040265)
+#define VFW_E_NO_TRANSPORT               ((HRESULT)0x80040266)
+#define VFW_E_BAD_VIDEOCD                ((HRESULT)0x80040269)
+#define VFW_E_OUT_OF_VIDEO_MEMORY        ((HRESULT)0x80040271)
+#define VFW_E_VP_NEGOTIATION_FAILED      ((HRESULT)0x80040272)
+#define VFW_E_DDRAW_CAPS_NOT_SUITABLE    ((HRESULT)0x80040273)
+#define VFW_E_NO_VP_HARDWARE             ((HRESULT)0x80040274)
+#define VFW_E_NO_CAPTURE_HARDWARE        ((HRESULT)0x80040275)
+#define VFW_E_DVD_OPERATION_INHIBITED    ((HRESULT)0x80040276)
+#define VFW_E_DVD_INVALIDDOMAIN          ((HRESULT)0x80040277)
+#define VFW_E_DVD_NO_BUTTON              ((HRESULT)0x80040278)
+#define VFW_E_DVD_GRAPHNOTREADY          ((HRESULT)0x80040279)
+#define VFW_E_DVD_RENDERFAIL             ((HRESULT)0x8004027A)
+#define VFW_E_DVD_DECNOTENOUGH           ((HRESULT)0x8004027B)
+#define VFW_E_DDRAW_VERSION_NOT_SUITABLE ((HRESULT)0x8004027C)
+#define VFW_E_COPYPROT_FAILED            ((HRESULT)0x8004027D)
+#define VFW_E_TIME_EXPIRED               ((HRESULT)0x8004027F)
+#define VFW_E_DVD_WRONG_SPEED            ((HRESULT)0x80040281)
+#define VFW_E_DVD_MENU_DOES_NOT_EXIST    ((HRESULT)0x80040282)
+#define VFW_E_DVD_CMD_CANCELLED          ((HRESULT)0x80040283)
+#define VFW_E_DVD_STATE_WRONG_VERSION    ((HRESULT)0x80040284)
+#define VFW_E_DVD_STATE_CORRUPT          ((HRESULT)0x80040285)
+#define VFW_E_DVD_STATE_WRONG_DISC       ((HRESULT)0x80040286)
+#define VFW_E_DVD_INCOMPATIBLE_REGION    ((HRESULT)0x80040287)
+#define VFW_E_DVD_NO_ATTRIBUTES          ((HRESULT)0x80040288)
+#define VFW_E_DVD_NO_GOUP_PGC            ((HRESULT)0x80040289)
+#define VFW_E_DVD_LOW_PARENTAL_LEVEL     ((HRESULT)0x8004028A)
+#define VFW_E_DVD_NOT_IN_KARAOKE_MODE    ((HRESULT)0x8004028B)
+#define VFW_E_FRAME_STEP_UNSUPPORTED     ((HRESULT)0x8004028E)
+#define VFW_E_DVD_STREAM_DISABLED        ((HRESULT)0x8004028F)
+#define VFW_E_DVD_TITLE_UNKNOWN          ((HRESULT)0x80040290)
+#define VFW_E_DVD_INVALID_DISC           ((HRESULT)0x80040291)
+#define VFW_E_DVD_NO_RESUME_INFORMATION  ((HRESULT)0x80040292)
+#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD ((HRESULT)0x80040293)
+#define VFW_E_PIN_ALREADY_BLOCKED        ((HRESULT)0x80040294)
+#define VFW_E_CERTIFICATION_FAILURE      ((HRESULT)0x80040295)
+#define VFW_E_VMR_NOT_IN_MIXER_MODE      ((HRESULT)0x80040296)
+#define VFW_E_VMR_NO_AP_SUPPLIED         ((HRESULT)0x80040297)
+#define VFW_E_VMR_NO_DEINTERLACE_HW      ((HRESULT)0x80040298)
+#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC   ((HRESULT)0x8004029A)
+#define VFW_E_BAD_KEY                    ((HRESULT)0x800403F2)
+
+#ifndef E_PROP_ID_UNSUPPORTED
+#define E_PROP_ID_UNSUPPORTED            ((HRESULT)0x80070490)
+#endif
+#ifndef E_PROP_SET_UNSUPPORTED
+#define E_PROP_SET_UNSUPPORTED           ((HRESULT)0x80070492)
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl
new file mode 100644
index 0000000..acb6c11
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl
@@ -0,0 +1,533 @@
+/*
+ * Copyright 2008 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#if 0")
+interface IDirect3DSurface9;
+interface IDirect3DDevice9;
+typedef LONGLONG REFERENCE_TIME;
+typedef DWORD D3DFORMAT;
+typedef DWORD D3DPOOL;
+typedef HANDLE HMONITOR;
+typedef struct { char dummy; } AM_MEDIA_TYPE;
+typedef struct { char dummy; } D3DCOLOR;
+cpp_quote("#endif")
+
+interface IVMRSurface9;
+interface IVMRSurfaceAllocator9;
+interface IVMRSurfaceAllocatorEx9;
+interface IVMRSurfaceAllocatorNotify9;
+interface IVMRImagePresenter9;
+interface IVMRImagePresenterConfig9;
+interface IVMRMonitorConfig9;
+interface IVMRWindowlessControl9;
+interface IVMRMixerControl9;
+interface IVMRImageCompositor9;
+interface IVMRMixerBitmap9;
+interface IVMRFilterConfig9;
+interface IVMRAspectRatioControl9;
+interface IVMRVideoStreamControl9;
+
+typedef enum _VMR9PresentationFlags
+{
+    VMR9Sample_SyncPoint = 0x1,
+    VMR9Sample_Preroll = 0x2,
+    VMR9Sample_Discontinuity = 0x4,
+    VMR9Sample_TimeValid = 0x8,
+    VMR9Sample_SrcDstRectsValid = 0x10
+} VMR9PresentationFlags;
+
+typedef struct _VMR9PresentationInfo
+{
+    DWORD dwFlags; /* Flags defined above */
+    IDirect3DSurface9 *lpSurf;
+    REFERENCE_TIME rtStart;
+    REFERENCE_TIME rtEnd;
+    SIZE szAspectRatio;
+    RECT rcSrc;
+    RECT rcDst;
+    DWORD dwReserved1;
+    DWORD dwReserved2;
+} VMR9PresentationInfo;
+
+[
+    local,
+    object,
+    uuid(69188c61-12a3-40f0-8ffc-342e7b433fd7),
+    helpstring("IVMRImagePresenter9 interface"),
+    pointer_default(unique)
+]
+interface IVMRImagePresenter9 : IUnknown
+{
+    HRESULT StartPresenting([in] DWORD_PTR id);
+    HRESULT StopPresenting([in] DWORD_PTR id);
+    HRESULT PresentImage([in] DWORD_PTR id, [in] VMR9PresentationInfo *info);
+};
+
+typedef enum _VMR9SurfaceAllocationFlags
+{
+    VMR9AllocFlag_3DRenderTarget = 0x1,
+    VMR9AllocFlag_DXVATarget = 0x2,
+    VMR9AllocFlag_TextureSurface = 0x4,
+    VMR9AllocFlag_OffscreenSurface = 0x8,
+    VMR9AllocFlag_RGBDynamicSwitch = 0x10,
+    VMR9AllocFlag_UsageReserved = 0xe0,
+    VMR9AllocFlag_UsageMask = 0xff,
+} VMR9SurfaceAllocationFlags;
+
+typedef struct _VMR9AllocationInfo
+{
+    DWORD dwFlags; /* Flags defined above */
+    DWORD dwWidth;
+    DWORD dwHeight;
+    D3DFORMAT Format;
+    D3DPOOL Pool;
+    DWORD MinBuffers;
+    SIZE szAspectRatio;
+    SIZE szNativeSize;
+} VMR9AllocationInfo;
+
+[
+    local,
+    object,
+    uuid(8d5148ea-3f5d-46cf-9df1-d1b896eedb1f),
+    helpstring("IVMRSurfaceAllocator9 interface"),
+    pointer_default(unique)
+]
+interface IVMRSurfaceAllocator9 : IUnknown
+{
+    HRESULT InitializeDevice([in] DWORD_PTR id, [in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers);
+    HRESULT TerminateDevice([in] DWORD_PTR id);
+    HRESULT GetSurface([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface);
+    HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify9 *allocnotify);
+};
+
+[
+    local,
+    object,
+    uuid(6de9a68a-a928-4522-bf57-655ae3866456),
+    helpstring("IVMRSurfaceAllocatorEx9 interface"),
+    pointer_default(unique)
+]
+interface IVMRSurfaceAllocatorEx9 : IVMRSurfaceAllocator9
+{
+    HRESULT GetSurfaceEx([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface, [out] RECT *dest);
+};
+
+[
+    local,
+    object,
+    uuid(dca3f5df-bb3a-4d03-bd81-84614bfbfa0c),
+    helpstring("IVMRSurfaceAllocatorNotify9 interface"),
+    pointer_default(unique)
+]
+interface IVMRSurfaceAllocatorNotify9 : IUnknown
+{
+    HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator9 *alloc);
+    HRESULT SetD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);
+    HRESULT ChangeD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);
+    HRESULT AllocateSurfaceHelper([in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers, [out] IDirect3DSurface9 **surface);
+    HRESULT NotifyEvent([in] LONG code, [in] LONG_PTR param1, [in] LONG_PTR param2);
+};
+
+typedef enum _VMR9AspectRatioMode
+{
+    VMR9ARMode_None,
+    VMR9ARMode_LetterBox
+} VMR9AspectRatioMode;
+
+[
+    local,
+    object,
+    uuid(8f537d09-f85e-4414-b23b-502e54c79927),
+    helpstring("IVMRWindowlessControl interface"),
+    pointer_default(unique)
+]
+interface IVMRWindowlessControl9 : IUnknown
+{
+    HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *arwidth, [out] LONG *arheight);
+    HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);
+    HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);
+    HRESULT SetVideoPosition([in] const RECT *source, [in] const RECT *dest);
+    HRESULT GetVideoPosition([out] RECT *source, [out] RECT *dest);
+    HRESULT GetAspectRatioMode([out] DWORD *mode);
+    HRESULT SetAspectRatioMode([in] DWORD mode);
+    HRESULT SetVideoClippingWindow([in] HWND hwnd);
+    HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
+    HRESULT DisplayModeChanged();
+    HRESULT GetCurrentImage([out] BYTE **dib);
+    HRESULT SetBorderColor([in] COLORREF color);
+    HRESULT GetBorderColor([out] COLORREF *color);
+};
+
+typedef enum _VMR9MixerPrefs
+{
+    /* Decimation */
+    MixerPref9_NoDecimation = 0x1,
+    MixerPref9_DecimateOutput = 0x2,
+    MixerPref9_ARAdjustXorY = 0x4,
+    MixerPref9_NonSquareMixing = 0x8,
+    MixerPref9_DecimateMask = 0xf,
+
+    /* Filtering */
+    MixerPref9_BiLinearFiltering = 0x10,
+    MixerPref9_PointFiltering = 0x20,
+    MixerPref9_AnisotropicFiltering = 0x40,
+    MixerPref9_PyramidalQuadFiltering = 0x80,
+    MixerPref9_GaussianQuadFiltering = 0x100,
+    MixerPref9_FilteringReserved = 0xe00,
+    MixerPref9_FilteringMask = 0xff0,
+
+    /* Render target */
+    MixerPref9_RenderTargetRGB = 0x1000,
+    MixerPref9_RenderTargetYUV = 0x2000,
+    MixerPref9_RenderTargetReserved = 0xfc000,
+
+    MixerPref9_DynamicSwitchToBOB = 0x100000,
+    MixerPref9_DynamicDecimateBy2 = 0x200000,
+    MixerPref9_DynamicReserved = 0xc00000,
+    MixerPref9_DynamicMask = 0xf00000,
+} VMR9MixerPrefs;
+
+typedef struct _VMR9NormalizedRect
+{
+    FLOAT left;
+    FLOAT top;
+    FLOAT right;
+    FLOAT bottom;
+} VMR9NormalizedRect;
+
+typedef enum _VMR9ProcAmpControlFlags
+{
+    ProcAmpControl9_Brightness = 0x1,
+    ProcAmpControl9_Contrast = 0x2,
+    ProcAmpControl9_Hue = 0x4,
+    ProcAmpControl9_Saturation = 0x8,
+    ProcAmpControl9_Mask = 0xf
+} VMR9ProcAmpControlFlags;
+
+typedef struct _VMR9ProcAmpControl
+{
+    DWORD dwSize;
+    DWORD dwFlags;
+    FLOAT Brightness;
+    FLOAT Contrast;
+    FLOAT Hue;
+    FLOAT Saturation;
+} VMR9ProcAmpControl;
+
+typedef struct _VMR9ProcAmpControlRange
+{
+    DWORD dwSize;
+    VMR9ProcAmpControlFlags dwProperty;
+    FLOAT MinValue;
+    FLOAT MaxValue;
+    FLOAT DefaultValue;
+    FLOAT StepSize;
+} VMR9ProcAmpControlRange;
+
+[
+    local,
+    object,
+    uuid(1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b),
+    helpstring("IVMRMixerControl9 interface"),
+    pointer_default(unique)
+]
+interface IVMRMixerControl9 : IUnknown
+{
+    HRESULT SetAlpha([in] DWORD streamid, [in] FLOAT alpha);
+    HRESULT GetAlpha([in] DWORD streamid, [out] FLOAT *alpha);
+    HRESULT SetZOrder([in] DWORD streamid, [in] DWORD zorder);
+    HRESULT GetZOrder([in] DWORD streamid, [out] DWORD *zorder);
+    HRESULT SetOutputRect([in] DWORD streamid, [in] const VMR9NormalizedRect *rect);
+    HRESULT GetOutputRect([in] DWORD streamid, [out] VMR9NormalizedRect *rect);
+    HRESULT SetBackgroundClr([in] COLORREF back);
+    HRESULT GetBackgroundClr([out] COLORREF *back);
+    HRESULT SetMixingPrefs([in] DWORD mixingprefs);
+    HRESULT GetMixingPrefs([out] DWORD *mixingprefs);
+    HRESULT SetProcAmpControl([in] DWORD streamid, [in] VMR9ProcAmpControl *control);
+    HRESULT GetProcAmpControl([in] DWORD streamid, [in, out] VMR9ProcAmpControl *control);
+    HRESULT GetProcAmpControlRange([in] DWORD streamid, [in, out] VMR9ProcAmpControlRange *controlrange);
+};
+
+typedef struct _VMR9AlphaBitmap
+{
+    DWORD dwFlags;
+    HDC hdc;
+    IDirect3DSurface9 *pDDS;
+    RECT rSrc;
+    VMR9NormalizedRect *rDest;
+    FLOAT fAlpha;
+    COLORREF clrSrcKey;
+    DWORD dwFilterMode;
+} VMR9AlphaBitmap;
+
+typedef enum _VMR9AlphaBitmapFlags
+{
+    VMR9AlphaBitmap_Disable = 0x1,
+    VMR9AlphaBitmap_hDC = 0x2,
+    VMR9AlphaBitmap_EntireDDS = 0x4,
+    VMR9AlphaBitmap_SrcColorKey = 0x8,
+    VMR9AlphaBitmap_SrcRect = 0x10,
+    VMR9AlphaBitmap_FilterMode = 0x20
+} VMR9AlphaBitmapFlags;
+
+[
+    local,
+    object,
+    uuid(ced175e5-1935-4820-81bd-ff6ad00c9108),
+    helpstring("IVMRMixerBitmap interface"),
+    pointer_default(unique)
+]
+interface IVMRMixerBitmap9 : IUnknown
+{
+    HRESULT SetAlphaBitmap([in] const VMR9AlphaBitmap *bitmap);
+    HRESULT UpdateAlphaBitmapParameters([in] const VMR9AlphaBitmap *bitmap);
+    HRESULT GetAlphaBitmapParameters([out] VMR9AlphaBitmap *bitmap);
+};
+
+[
+    local,
+    object,
+    uuid(dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc),
+    helpstring("IVMRSurface interface"),
+    pointer_default(unique)
+]
+interface IVMRSurface9 : IUnknown
+{
+    HRESULT IsSurfaceLocked();
+    HRESULT LockSurface([out] BYTE **surface);
+    HRESULT UnlockSurface();
+    HRESULT GetSurface([out] IDirect3DSurface9 **surface);
+};
+
+typedef enum _VMR9RenderPrefs
+{
+   RenderPrefs9_DoNotRenderBorder = 0x1,
+   RenderPrefs9_Mask = 0x1
+} VMR9RenderPrefs;
+
+[
+    local,
+    object,
+    uuid(45c15cab-6e22-420a-8043-ae1f0ac02c7d),
+    helpstring("IVMRImagePresenterConfig9 interface"),
+    pointer_default(unique)
+]
+interface IVMRImagePresenterConfig9 : IUnknown
+{
+    HRESULT SetRenderingPrefs([in] DWORD renderflags);
+    HRESULT GetRenderingPrefs([out] DWORD *renderflags);
+};
+
+[
+    local,
+    object,
+    uuid(d0cfe38b-93e7-4772-8957-0400c49a4485),
+    helpstring("IVMRMixerStreamConfig interface"),
+    pointer_default(unique)
+]
+interface IVMRVideoStreamControl9: IUnknown
+{
+    HRESULT SetStreamActiveState([in] BOOL active);
+    HRESULT GetStreamActiveState([out] BOOL *active);
+};
+
+typedef enum _VMR9Mode
+{
+    VMR9Mode_Windowed = 0x1,
+    VMR9Mode_Windowless = 0x2,
+    VMR9Mode_Renderless = 0x4,
+    VMR9Mode_Mask = 0x7
+} VMR9Mode;
+
+[
+    local,
+    object,
+    uuid(5a804648-4f66-4867-9c43-4f5c822cf1b8),
+    helpstring("IVMRFilterConfig9 interface"),
+    pointer_default(unique)
+]
+interface IVMRFilterConfig9 : IUnknown
+{
+    HRESULT SetImageCompositor([in] IVMRImageCompositor9 *compositor);
+    HRESULT SetNumberOfStreams([in] DWORD max);
+    HRESULT GetNumberOfStreams([out] DWORD *max);
+    HRESULT SetRenderingPrefs([in] DWORD renderflags);
+    HRESULT GetRenderingPrefs([out] DWORD *renderflags);
+    HRESULT SetRenderingMode([in] DWORD mode);
+    HRESULT GetRenderingMode([out] DWORD *mode);
+};
+
+[
+    local,
+    object,
+    uuid(00d96c29-bbde-4efc-9901-bb5036392146),
+    helpstring("IVMRAspectRatioControl9 interface"),
+    pointer_default(unique)
+]
+interface IVMRAspectRatioControl9 : IUnknown
+{
+    HRESULT GetAspectRatioMode([out] DWORD *mode);
+    HRESULT SetAspectRatioMode([in] DWORD mode);
+}
+
+#define VMR9DEVICENAMELEN 32
+#define VMR9DEVICEDESCRIPTIONLEN 512
+
+typedef struct _VMR9MonitorInfo
+{
+    UINT uDevID;
+    RECT rcMonitor;
+    HMONITOR hMon;
+    DWORD dwFlags;
+    WCHAR szDevice[VMR9DEVICENAMELEN];
+    WCHAR szDescription[VMR9DEVICEDESCRIPTIONLEN];
+    LARGE_INTEGER liDriverVersion;
+    DWORD dwVendorId;
+    DWORD dwDeviceId;
+    DWORD dwSubSysId;
+    DWORD dwRevision;
+} VMR9MonitorInfo;
+
+[
+    local,
+    object,
+    uuid(46c2e457-8ba0-4eef-b80b-0680f0978749),
+    helpstring("IVMRMonitorConfig9 interface"),
+    pointer_default(unique)
+]
+interface IVMRMonitorConfig9 : IUnknown
+{
+    HRESULT SetMonitor([in] UINT uDev);
+    HRESULT GetMonitor([out] UINT *uDev);
+    HRESULT SetDefaultMonitor([in] UINT uDev);
+    HRESULT GetDefaultMonitor([out] UINT *uDev);
+    HRESULT GetAvailableMonitors([out, size_is(arraysize)] VMR9MonitorInfo *info, [in] DWORD arraysize, [out] DWORD *numdev);
+};
+
+typedef enum _VMR9DeinterlacePrefs
+{
+    DeinterlacePref9_NextBest = 0x1,
+    DeinterlacePref9_BOB = 0x2,
+    DeinterlacePref9_Weave = 0x4,
+    DeinterlacePref9_Mask = 0x7
+} VMR9DeinterlacePrefs;
+
+typedef enum _VMR9DeinterlaceTech
+{
+    DeinterlaceTech9_Unknown = 0,
+    DeinterlaceTech9_BOBLineReplicate = 0x1,
+    DeinterlaceTech9_BOBVerticalStretch = 0x2,
+    DeinterlaceTech9_MedianFiltering = 0x4,
+    DeinterlaceTech9_EdgeFiltering = 0x10,
+    DeinterlaceTech9_FieldAdaptive = 0x20,
+    DeinterlaceTech9_PixelAdaptive = 0x40,
+    DeinterlaceTech9_MotionVectorSteered = 0x80
+} VMR9DeinterlaceTech;
+
+typedef struct _VMR9Frequency
+{
+    DWORD dwNumerator;
+    DWORD dwDenominator;
+} VMR9Frequency;
+
+typedef enum _VMR9_SampleFormat
+{
+    VMR9_SampleReserved = 1,
+    VMR9_SampleProgressiveFrame = 2,
+    VMR9_SampleFieldInterleavedEvenFirst = 3,
+    VMR9_SampleFieldInterleavedOddFirst = 4,
+    VMR9_SampleFieldSingleEven = 5,
+    VMR9_SampleFieldSingleOdd = 6,
+} VMR9_SampleFormat;
+
+typedef struct _VMR9VideoDesc
+{
+    DWORD dwSize;
+    DWORD dwSampleWidth;
+    DWORD dwSampleHeight;
+    VMR9_SampleFormat SampleFormat;
+    DWORD dwFourCC;
+    VMR9Frequency InputSampleFreq;
+    VMR9Frequency OutputFrameFreq;
+} VMR9VideoDesc;
+
+typedef struct _VMR9DeinterlaceCaps {
+    DWORD dwSize;
+    DWORD dwNumPreviousOutputFrames;
+    DWORD dwNumForwardRefSamples;
+    DWORD dwNumBackwardRefSamples;
+    VMR9DeinterlaceTech DeinterlaceTechnology;
+} VMR9DeinterlaceCaps;
+
+[
+    local,
+    object,
+    uuid(a215fb8d-13c2-4f7f-993c-003d6271a459),
+    helpstring("IVMRDeinterlaceControl9 interface"),
+    pointer_default(unique)
+]
+interface IVMRDeinterlaceControl9 : IUnknown
+{
+    HRESULT GetNumberOfDeinterlaceModes([in] VMR9VideoDesc *desc, [in, out] DWORD *nummodes, [out] GUID *modes);
+    HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMR9VideoDesc *desc, [out] VMR9DeinterlaceCaps *caps);
+    HRESULT GetDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);
+    HRESULT SetDeinterlaceMode([in] DWORD streamid, [in] GUID *mode);
+    HRESULT GetDeinterlacePrefs([out] DWORD *prefs);
+    HRESULT SetDeinterlacePrefs([in] DWORD prefs);
+    HRESULT GetActualDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);
+};
+
+typedef struct _VMR9VideoStreamInfo {
+    IDirect3DSurface9 *pddsVideoSurface;
+    DWORD dwWidth;
+    DWORD dwHeight;
+    DWORD dwStrmID;
+    FLOAT fAlpha;
+    VMR9NormalizedRect rNormal;
+    REFERENCE_TIME rtStart;
+    REFERENCE_TIME rtEnd;
+    VMR9_SampleFormat SampleFormat;
+} VMR9VideoStreamInfo;
+
+[
+    local,
+    object,
+    uuid(4a5c89eb-df51-4654-ac2a-e48e02bbabf6),
+    helpstring("IVMRImageCompositor9 interface"),
+    pointer_default(unique)
+]
+interface IVMRImageCompositor9 : IUnknown
+{
+    HRESULT InitCompositionDevice([in] IUnknown *d3ddev);
+    HRESULT TermCompositionDevice([in] IUnknown *d3ddev);
+    HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirect3DSurface9 *d3dtarget, [in] AM_MEDIA_TYPE *mttarget,
+                           [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop, D3DCOLOR back,
+                           [in] VMR9VideoStreamInfo *info, [in] UINT streams);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl
new file mode 100644
index 0000000..0a79f02
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 2008 Maarten Lankhorst
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("#if 0")
+typedef DWORD IDirectDrawSurface7;
+typedef DWORD IDirectDraw7;
+typedef DWORD *LPBITMAPINFOHEADER;
+typedef DWORD *LPDDPIXELFORMAT;
+typedef struct { DWORD dw1, dw2; } DDCOLORKEY;
+cpp_quote("#endif")
+cpp_quote("#include <ddraw.h>")
+
+interface IVMRSurface;
+interface IVMRSurfaceAllocator;
+interface IVMRSurfaceAllocatorNotify;
+interface IVMRImagePresenter;
+interface IVMRImagePresenterNotify;
+interface IVMRWindowlessControl;
+interface IVMRMixerControl;
+interface IVMRMixerBitmap;
+interface IVMRFilterConfig;
+interface IVMRAspectRatioControl;
+interface IVMRDeinterlaceControl;
+interface IVMRMonitorConfig;
+interface IVMRImageCompositor;
+interface IVMRVideoStreamControl;
+
+typedef enum _VMRPresentationFlags
+{
+    VMRSample_SyncPoint = 0x01,
+    VMRSample_Preroll = 0x02,
+    VMRSample_Discontinuity = 0x04,
+    VMRSample_TimeValid = 0x08,
+    VMRSample_SrcDstRectsValid = 0x10
+} VMRPresentationFlags;
+
+typedef struct tagVMRPRESENTATIONINFO
+{
+    DWORD dwFlags;
+    IDirectDrawSurface7 *lpSurf;
+    REFERENCE_TIME rtStart, rtEnd;
+    SIZE szAspectRatio;
+    RECT rcSrc, rcDst;
+    DWORD dwTypeSpecificFlags;
+    DWORD dwInterlaceFlags;
+} VMRPRESENTATIONINFO;
+
+[
+    local,
+    object,
+    uuid(ce704fe7-e71e-41fb-baa2-c4403e1182f5),
+    helpstring("IVMRImagePresenter interface"),
+    pointer_default(unique)
+]
+interface IVMRImagePresenter : IUnknown
+{
+    HRESULT StartPresenting([in] DWORD_PTR id);
+    HRESULT StopPresenting([in] DWORD_PTR id);
+    HRESULT PresentImage([in] DWORD_PTR id, [in] VMRPRESENTATIONINFO *info);
+};
+
+typedef enum _VMRSurfaceAllocationFlags
+{
+    AMAP_PIXELFORMAT_VALID = 0x01,
+    AMAP_3D_TARGET = 0x02,
+    AMAP_ALLOW_SYSMEM = 0x04,
+    AMAP_FORCE_SYSMEM = 0x08,
+    AMAP_DIRECTED_FLIP = 0x10,
+    AMAP_DXVA_TARGET = 0x20
+} VMRSurfaceAllocationFlags;
+
+typedef struct tagVMRALLOCATIONINFO
+{
+    DWORD dwFlags;
+    LPBITMAPINFOHEADER lpHdr;
+    LPDDPIXELFORMAT lpPixFmt;
+    SIZE szAspectRatio;
+    DWORD dwMinBuffers;
+    DWORD dwMaxBuffers;
+    DWORD dwInterlaceFlags;
+    SIZE szNativeSize;
+} VMRALLOCATIONINFO;
+
+[
+    local,
+    object,
+    uuid(31ce832e-4484-458b-8cca-f4d7e3db0b52),
+    helpstring("IVMRSurfaceAllocator interface"),
+    pointer_default(unique)
+]
+interface IVMRSurfaceAllocator : IUnknown
+{
+    HRESULT AllocateSurface([in] DWORD_PTR id, [in] VMRALLOCATIONINFO *allocinfo, [in, out] DWORD *buffers, IDirectDrawSurface7 **surface);
+    HRESULT FreeSurface([in] DWORD_PTR id);
+    HRESULT PrepareSurface([in] DWORD_PTR id, [in] IDirectDrawSurface7 *surface, [in] DWORD dwSurfaceFlags);
+    HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify *notify);
+};
+
+[
+    local,
+    object,
+    uuid(aada05a8-5a4e-4729-af0b-cea27aed51e2),
+    helpstring("IVMRSurfaceAllocatorNotify interface"),
+    pointer_default(unique)
+]
+interface IVMRSurfaceAllocatorNotify : IUnknown
+{
+    HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator *allocator);
+    HRESULT SetDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor);
+    HRESULT ChangeDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor);
+    HRESULT RestoreDDrawSurfaces();
+    HRESULT NotifyEvent([in] LONG EventCode, [in] LONG_PTR p1, [in] LONG_PTR p2);
+    HRESULT SetBorderColor([in] COLORREF border);
+};
+
+typedef enum _VMR_ASPECT_RATIO_MODE
+{
+    VMR_ARMODE_NONE,
+    VMR_ARMODE_LETTER_BOX
+} VMR_ASPECT_RATIO_MODE;
+
+[
+    local,
+    object,
+    uuid(0eb1088c-4dcd-46f0-878f-39dae86a51b7),
+    helpstring("IVMRWindowlessControl interface"),
+    pointer_default(unique)
+]
+interface IVMRWindowlessControl : IUnknown
+{
+    HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *ar_width, [out] LONG *ar_height);
+    HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);
+    HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);
+    HRESULT SetVideoPosition([in] const RECT *src_rect, [in] const RECT *dst_rect);
+    HRESULT GetVideoPosition([out] RECT *src_rect, [out] RECT *dst_rect);
+    HRESULT GetAspectRatioMode([out] DWORD *mode);
+    HRESULT SetAspectRatioMode([in] DWORD mode);
+    HRESULT SetVideoClippingWindow([in] HWND hwnd);
+    HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
+    HRESULT DisplayModeChanged();
+    HRESULT GetCurrentImage([out] BYTE **data);
+    HRESULT SetBorderColor([in] COLORREF border);
+    HRESULT GetBorderColor([out] COLORREF *border);
+    HRESULT SetColorKey([in] COLORREF key);
+    HRESULT GetColorKey([out] COLORREF *key);
+};
+
+typedef enum _VMRMixerPrefs
+{
+    MixerPref_NoDecimation = 0x0001,
+    MixerPref_DecimateOutput = 0x0002,
+    MixerPref_ARAdjustXorY = 0x0004,
+    MixerPref_DecimationReserved = 0x0008,
+    MixerPref_DecimateMask = 0x000f,
+
+    MixerPref_BiLinearFiltering = 0x0010,
+    MixerPref_PointFiltering = 0x0020,
+    MixerPref_FinteringMask = 0x00f0,
+
+    MixerPref_RenderTargetRGB = 0x0100,
+    MixerPref_RenderTargetYUV = 0x1000,
+    MixerPref_RenderTargetYUV420 = 0x0200,
+    MixerPref_RenderTargetYUV422 = 0x0400,
+    MixerPref_RenderTargetYUV444 = 0x0800,
+    MixerPref_RenderTargetReserved = 0xe000,
+    MixerPref_RenderTargetMask = 0xff00,
+
+    MixerPref_DynamicSwitchToBOB = 0x10000,
+    MixerPref_DynamicDecimateBy2 = 0x20000,
+    MixerPref_DynamicReserved = 0xc0000,
+    MixerPref_DynamicMask = 0xf0000
+} VMRMixerPrefs;
+
+typedef struct _NORMALIZEDRECT
+{
+    FLOAT left, top, right, bottom;
+} NORMALIZEDRECT;
+
+[
+    local,
+    object,
+    uuid(1c1a17b0-bed0-415d-974b-dc6696131599),
+    helpstring("IVMRMixerControl interface"),
+    pointer_default(unique)
+]
+interface IVMRMixerControl : IUnknown
+{
+    HRESULT SetAlpha([in] DWORD id, [in] FLOAT alpha);
+    HRESULT GetAlpha([in] DWORD id, [out] FLOAT *alpha);
+    HRESULT SetZOrder([in] DWORD id, [in] DWORD z);
+    HRESULT GetZOrder([in] DWORD id, [out] DWORD *z);
+    HRESULT SetOutputRect([in] DWORD id, [in] const NORMALIZEDRECT *rect);
+    HRESULT SetBackgroundClr([in] COLORREF background);
+    HRESULT GetBackgroundClr([out] COLORREF *background);
+    HRESULT SetMixingPrefs([in] DWORD prefs);
+    HRESULT GetMixingPrefs([out] DWORD *prefs);
+};
+
+typedef struct tagVMRGUID
+{
+    struct _GUID *pGUID, GUID;
+} VMRGUID;
+
+#define VMRDEVICENAMELEN 32
+#define VMRDEVICEDESCRIPTIONLEN 256
+
+typedef struct tagVMRMONITORINFO
+{
+    VMRGUID guid;
+    RECT rcMonitor;
+    HMONITOR hMon;
+    DWORD dwFlags;
+    WCHAR szDevice[VMRDEVICENAMELEN];
+    WCHAR szDescription[VMRDEVICEDESCRIPTIONLEN];
+    LARGE_INTEGER liDriverVersion;
+    DWORD dwVendorId;
+    DWORD dwDeviceId;
+    DWORD dwSubSysId;
+    DWORD dwRevision;
+} VMRMONITORINFO;
+
+[
+    local,
+    object,
+    uuid(9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce),
+    helpstring("IVMRMonitorConfig interface"),
+    pointer_default(unique)
+]
+interface IVMRMonitorConfig : IUnknown
+{
+    HRESULT SetMonitor([in] const VMRGUID *vmrguid);
+    HRESULT GetMonitor([out] VMRGUID *vmrguid);
+    HRESULT SetDefaultMonitor([in] const VMRGUID *vmrguid);
+    HRESULT GetDefaultMonitor([out] VMRGUID *vmrguid);
+    HRESULT GetAvailableMonitors([out, size_is(array_size)] VMRMONITORINFO *info, [in] DWORD array_size, [out] DWORD *retrieved);
+}
+
+typedef enum _VMRRenderPrefs
+{
+    RenderPrefs_RestrictToInitialMonitor = 0x00,
+    RenderPrefs_ForceOffScreen = 0x01,
+    RenderPrefs_ForceOverlays = 0x02,
+    RenderPrefs_AllowOverlays = 0x00,
+    RenderPrefs_AllowOffscreen = 0x00,
+    RenderPrefs_DoNotRenderColorKeyAndBorder = 0x08,
+    RenderPrefs_Reserved = 0x10,
+    RenderPrefs_PreferAGPMemWhenMixing = 0x20,
+    RenderPrefs_Mask = 0x3f
+} VMRRenderPrefs;
+
+typedef enum _VMRMode
+{
+    VMRMode_Windowed = 0x1,
+    VMRMode_Windowless = 0x2,
+    VMRMode_Renderless = 0x4,
+    VMRMode_Mask = 0x7
+} VMRMode;
+
+enum { MAX_NUMBER_OF_STREAMS = 16 };
+
+[
+    local,
+    object,
+    uuid(9e5530c5-7034-48b4-bb46-0b8a6efc8e36),
+    helpstring("IVMRFilterConfig interface"),
+    pointer_default(unique)
+]
+interface IVMRFilterConfig : IUnknown
+{
+    HRESULT SetImageCompositor([in] IVMRImageCompositor *compositor);
+    HRESULT SetNumberOfStreams([in] DWORD streams);
+    HRESULT GetNumberOfStreams([out] DWORD *streams);
+    HRESULT SetRenderingPrefs([in] DWORD prefs);
+    HRESULT GetRenderingPrefs([out] DWORD *prefs);
+    HRESULT SetRenderingMode([in] DWORD mode);
+    HRESULT GetRenderingMode([out] DWORD *mode);
+};
+
+[
+    local,
+    object,
+    uuid(ede80b5c-bad6-4623-b537-65586c9f8dfd),
+    helpstring("IVMRAspectRatioControl interface"),
+    pointer_default(unique)
+]
+interface IVMRAspectRatioControl : IUnknown
+{
+    HRESULT GetAspectRatioMode([out] DWORD *armode);
+    HRESULT SetAspectRatioMode([in] DWORD armode);
+};
+
+typedef enum _VMRDeinterlacePrefs
+{
+    DeinterlacePref_NextBest = 0x1,
+    DeinterlacePref_BOB = 0x2,
+    DeinterlacePref_Weave = 0x4,
+    DeinterlacePref_Mask = 0x7
+} VMRDeinterlacePrefs;
+
+typedef enum _VMRDeinterlaceTech
+{
+    DeinterlaceTech_Unknown = 0x00,
+    DeinterlaceTech_BOBLineReplicate = 0x01,
+    DeinterlaceTech_BOBVerticalStretch = 0x02,
+    DeinterlaceTech_MedianFiltering = 0x04,
+    DeinterlaceTech_EdgeFiltering = 0x08,
+    DeinterlaceTech_FieldAdaptive = 0x10,
+    DeinterlaceTech_PixelAdaptive = 0x20,
+    DeinterlaceTech_MotionVectorSteered = 0x80
+} VMRDeinterlaceTech;
+
+typedef struct _VMRFrequency
+{
+    DWORD dwNumerator, dwDenominator;
+} VMRFrequency;
+
+typedef struct _VMRVideoDesc
+{
+    DWORD dwSize;
+    DWORD dwSampleWidth;
+    DWORD dwSampleHeight;
+    BOOL SingleFieldPerSample;
+    DWORD dwFourCC;
+    VMRFrequency InputSampleFreq;
+    VMRFrequency OutputFrameFreq;
+} VMRVideoDesc;
+
+typedef struct _VMRDeinterlaceCaps
+{
+    DWORD dwSize;
+    DWORD dwNumPreviousOutputFrames;
+    DWORD dwNumForwardRefSamples;
+    DWORD dwNumBackwardRefSamples;
+    VMRDeinterlaceTech DeinterlaceTechnology;
+} VMRDeinterlaceCaps;
+
+[
+    local,
+    object,
+    uuid(bb057577-0db8-4e6a-87a7-1a8c9a505a0f),
+    helpstring("IVMRDeinterlaceControl interface"),
+    pointer_default(unique)
+]
+interface IVMRDeinterlaceControl : IUnknown
+{
+    HRESULT GetNumberOfDeinterlaceModes([in] VMRVideoDesc *desc, [in, out] DWORD *num_modes, [out] GUID *modes);
+    HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMRVideoDesc *desc, [in, out] VMRDeinterlaceCaps *caps);
+    HRESULT GetDeinterlaceMode([in] DWORD id, [out] GUID *mode);
+    HRESULT SetDeinterlaceMode([in] DWORD id, [in] GUID *mode);
+    HRESULT GetDeinterlacePrefs([out] DWORD *prefs);
+    HRESULT SetDeinterlacePrefs([in] DWORD prefs);
+    HRESULT GetActualDeinterlaceMode([in] DWORD id, [out] GUID *mode);
+};
+
+typedef struct _VMRALPHABITMAP
+{
+    DWORD dwFlags;
+    HDC hdc;
+    IDirectDrawSurface7 *pDDS;
+    RECT rSrc;
+    RECT rDest;
+    FLOAT fAlpha;
+    COLORREF clrSrcKey;
+} VMRALPHABITMAP, *PVMRALPHABITMAP;
+
+cpp_quote("#define VMRBITMAP_DISABLE (0x01)")
+cpp_quote("#define VMRBITMAP_HDC (0x02)")
+cpp_quote("#define VMRBITMAP_ENTIREDDS (0x04)")
+cpp_quote("#define VMRBITMAP_SRCCOLORKEY (0x08)")
+cpp_quote("#define VMRBITMAP_SRCRECT (0x10)")
+
+[
+    local,
+    object,
+    uuid(1e673275-0257-40aa-af20-7c608d4a0428),
+    helpstring("IVMRMixerBitmap interface"),
+    pointer_default(unique)
+]
+interface IVMRMixerBitmap : IUnknown
+{
+    HRESULT SetAlphaBitmap([in] const VMRALPHABITMAP *params);
+    HRESULT UpdateAlphaBitmapParameters([in] VMRALPHABITMAP *params);
+    HRESULT GetAlphaBitmapParameters([out] VMRALPHABITMAP *params);
+};
+
+typedef struct _VMRVIDEOSTREAMINFO
+{
+    IDirectDrawSurface7 *pddsVideoSurface;
+    DWORD dwWidth;
+    DWORD dwHeight;
+    DWORD dwStrmID;
+    FLOAT fAlpha;
+    DDCOLORKEY ddClrKey;
+    NORMALIZEDRECT rNormal;
+} VMRVIDEOSTREAMINFO;
+
+[
+    local,
+    object,
+    uuid(7a4fb5af-479f-4074-bb40-ce6722e43c82),
+    helpstring("IVMRImageCompositor interface"),
+    pointer_default(unique)
+]
+interface IVMRImageCompositor : IUnknown
+{
+    HRESULT InitCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget);
+    HRESULT TermCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget);
+    HRESULT SetStreamMediaType([in] DWORD id, [in] AM_MEDIA_TYPE *pmt, [in] BOOL texture);
+    HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget,
+                           [in] AM_MEDIA_TYPE *pmt, [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop,
+                           [in] DWORD backgrnd, [in] VMRVIDEOSTREAMINFO *info, [in] UINT streams);
+};
+
+[
+    local,
+    object,
+    uuid(058d1f11-2a54-4bef-bd54-df706626b727),
+    helpstring("IVMRVideoStreamControl interface"),
+    pointer_default(unique)
+]
+interface IVMRVideoStreamControl : IUnknown
+{
+    HRESULT SetColorKey([in] DDCOLORKEY *key);
+    HRESULT GetColorKey([out] DDCOLORKEY *key);
+    HRESULT SetStreamActiveState([in] BOOL active);
+    HRESULT GetStreamActiveState([out] BOOL *active);
+};
+
+[
+    local,
+    object,
+    uuid(9f3a1c85-8555-49ba-935f-be5b5b29d178),
+    helpstring("IVMRImagePresenterConfig interface"),
+    pointer_default(unique)
+]
+interface IVMRImagePresenterConfig : IUnknown
+{
+    HRESULT SetRenderingPrefs([in] DWORD prefs);
+    HRESULT GetRenderingPrefs([out] DWORD *prefs);
+};
+
+[
+    local,
+    object,
+    uuid(e6f7ce40-4673-44f1-8f77-5499d68cb4ea),
+    helpstring("IVMRImagePresenterExclModeConfig interface"),
+    pointer_default(unique)
+]
+interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
+{
+    HRESULT SetXlcModeDDObjAndPrimarySurface([in] IDirectDraw7 *dddev, [in] IDirectDrawSurface7 *ddsurface);
+    HRESULT GetXlcModeDDObjAndPrimarySurface([out] IDirectDraw7 **dddev, [out] IDirectDrawSurface7 **ddsurface);
+};
+
+[
+    local,
+    object,
+    uuid(aac18c18-e186-46d2-825d-a1f8dc8e395a),
+    helpstring("IVPManager interface"),
+    pointer_default(unique)
+]
+interface IVPManager : IUnknown
+{
+    HRESULT SetVideoPortIndex([in] DWORD index);
+    HRESULT GetVideoPortIndex([out] DWORD *index);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h
new file mode 100644
index 0000000..91a2505
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h
@@ -0,0 +1,1748 @@
+/*
+ * Copyright (C) 2011 Piotr Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __VSSTYLE_H__
+#define __VSSTYLE_H__
+
+
+#define TMTVS_RESERVEDLOW 100000
+#define TMTVS_RESERVEDHIGH 19999
+
+/* AEROWIZARDSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_AEROWIZARDSTYLE (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0}
+#define VSCLASS_AEROWIZARD (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_AEROWIZARDSTYLE L"AEROWIZARDSTYLE"
+#define VSCLASS_AEROWIZARD L"AEROWIZARD"
+#else
+static const WCHAR VSCLASS_AEROWIZARDSTYLE[] = {'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_AEROWIZARD [] = {'A','E','R','O','W','I','Z','A','R','D',0};
+#endif
+
+enum AEROWIZARDPARTS {
+    AW_TITLEBAR = 1,
+    AW_HEADERAREA = 2,
+    AW_CONTENTAREA = 3,
+    AW_COMMANDAREA = 4,
+    AW_BUTTON = 5,
+};
+
+#define AEROWIZARDSTYLEPARTS AEROWIZARDPARTS;
+
+enum TITLEBARSTATES {
+    AW_S_TITLEBAR_ACTIVE = 1,
+    AW_S_TITLEBAR_INACTIVE = 2,
+};
+
+enum HEADERAREASTATES {
+    AW_S_HEADERAREA_NOMARGIN = 1,
+};
+
+enum CONTENTAREASTATES {
+    AW_S_CONTENTAREA_NOMARGIN = 1,
+};
+
+/* BUTTONSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_BUTTONSTYLE (const WCHAR []){'B','U','T','T','O','N','S','T','Y','L','E',0}
+#define VSCLASS_BUTTON (const WCHAR []){'B','U','T','T','O','N',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_BUTTONSTYLE L"BUTTONSTYLE"
+#define VSCLASS_BUTTON L"BUTTON"
+#else
+static const WCHAR VSCLASS_BUTTONSTYLE [] = {'B','U','T','T','O','N','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_BUTTON [] = {'B','U','T','T','O','N',0};
+#endif
+
+enum BUTTONPARTS {
+    BP_PUSHBUTTON = 1,
+    BP_RADIOBUTTON = 2,
+    BP_CHECKBOX = 3,
+    BP_GROUPBOX = 4,
+    BP_USERBUTTON = 5,
+    BP_COMMANDLINK = 6,
+    BP_COMMANDLINKGLYPH = 7,
+};
+
+#define BUTTONSTYLEPARTS BUTTONPARTS;
+
+enum PUSHBUTTONSTATES {
+    PBS_NORMAL = 1,
+    PBS_HOT = 2,
+    PBS_PRESSED = 3,
+    PBS_DISABLED = 4,
+    PBS_DEFAULTED = 5,
+    PBS_DEFAULTED_ANIMATING = 6,
+};
+
+enum RADIOBUTTONSTATES {
+    RBS_UNCHECKEDNORMAL = 1,
+    RBS_UNCHECKEDHOT = 2,
+    RBS_UNCHECKEDPRESSED = 3,
+    RBS_UNCHECKEDDISABLED = 4,
+    RBS_CHECKEDNORMAL = 5,
+    RBS_CHECKEDHOT = 6,
+    RBS_CHECKEDPRESSED = 7,
+    RBS_CHECKEDDISABLED = 8,
+};
+
+enum CHECKBOXSTATES {
+    CBS_UNCHECKEDNORMAL = 1,
+    CBS_UNCHECKEDHOT = 2,
+    CBS_UNCHECKEDPRESSED = 3,
+    CBS_UNCHECKEDDISABLED = 4,
+    CBS_CHECKEDNORMAL = 5,
+    CBS_CHECKEDHOT = 6,
+    CBS_CHECKEDPRESSED = 7,
+    CBS_CHECKEDDISABLED = 8,
+    CBS_MIXEDNORMAL = 9,
+    CBS_MIXEDHOT = 10,
+    CBS_MIXEDPRESSED = 11,
+    CBS_MIXEDDISABLED = 12,
+    CBS_IMPLICITNORMAL = 13,
+    CBS_IMPLICITHOT = 14,
+    CBS_IMPLICITPRESSED = 15,
+    CBS_IMPLICITDISABLED = 16,
+    CBS_EXCLUDEDNORMAL = 17,
+    CBS_EXCLUDEDHOT = 18,
+    CBS_EXCLUDEDPRESSED = 19,
+    CBS_EXCLUDEDDISABLED = 20,
+};
+
+enum GROUPBOXSTATES {
+    GBS_NORMAL = 1,
+    GBS_DISABLED = 2,
+};
+
+enum COMMANDLINKSTATES {
+    CMDLS_NORMAL = 1,
+    CMDLS_HOT = 2,
+    CMDLS_PRESSED = 3,
+    CMDLS_DISABLED = 4,
+    CMDLS_DEFAULTED = 5,
+    CMDLS_DEFAULTED_ANIMATING = 6,
+};
+
+enum COMMANDLINKGLYPHSTATES {
+    CMDLGS_NORMAL = 1,
+    CMDLGS_HOT = 2,
+    CMDLGS_PRESSED = 3,
+    CMDLGS_DISABLED = 4,
+    CMDLGS_DEFAULTED = 5,
+};
+
+/* COMBOBOXSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_COMBOBOXSTYLE (const WCHAR []){'C','O','M','B','O','B','O','X','S','T','Y','L','E',0}
+#define VSCLASS_COMBOBOX (const WCHAR []){'C','O','M','B','O','B','O','X',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_COMBOBOXSTYLE L"COMBOBOXSTYLE"
+#define VSCLASS_COMBOBOX L"COMBOBOX"
+#else
+static const WCHAR VSCLASS_COMBOBOXSTYLE [] = {'C','O','M','B','O','B','O','X','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_COMBOBOX [] = {'C','O','M','B','O','B','O','X',0};
+#endif
+
+enum COMBOBOXPARTS {
+    CP_DROPDOWNBUTTON = 1,
+    CP_BACKGROUND = 2,
+    CP_TRANSPARENTBACKGROUND = 3,
+    CP_BORDER = 4,
+    CP_READONLY = 5,
+    CP_DROPDOWNBUTTONRIGHT = 6,
+    CP_DROPDOWNBUTTONLEFT = 7,
+    CP_CUEBANNER = 8,
+};
+
+#define COMBOBOXSTYLEPARTS COMBOBOXPARTS;
+
+enum COMBOBOXSTYLESTATES {
+    CBXS_NORMAL = 1,
+    CBXS_HOT = 2,
+    CBXS_PRESSED = 3,
+    CBXS_DISABLED = 4,
+};
+
+enum DROPDOWNBUTTONRIGHTSTATES {
+    CBXSR_NORMAL = 1,
+    CBXSR_HOT = 2,
+    CBXSR_PRESSED = 3,
+    CBXSR_DISABLED = 4,
+};
+
+enum DROPDOWNBUTTONLEFTSTATES {
+    CBXSL_NORMAL = 1,
+    CBXSL_HOT = 2,
+    CBXSL_PRESSED = 3,
+    CBXSL_DISABLED = 4,
+};
+
+enum TRANSPARENTBACKGROUNDSTATES {
+    CBTBS_NORMAL = 1,
+    CBTBS_HOT = 2,
+    CBTBS_DISABLED = 3,
+    CBTBS_FOCUSED = 4,
+};
+
+enum BORDERSTATES {
+    CBB_NORMAL = 1,
+    CBB_HOT = 2,
+    CBB_FOCUSED = 3,
+    CBB_DISABLED = 4,
+};
+
+enum READONLYSTATES {
+    CBRO_NORMAL = 1,
+    CBRO_HOT = 2,
+    CBRO_PRESSED = 3,
+    CBRO_DISABLED = 4,
+};
+
+enum CUEBANNERSTATES {
+    CBCB_NORMAL = 1,
+    CBCB_HOT = 2,
+    CBCB_PRESSED = 3,
+    CBCB_DISABLED = 4,
+};
+
+/* COMMUNICATIONSSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_COMMUNICATIONSSTYLE (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0}
+#define VSCLASS_COMMUNICATIONS (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_COMMUNICATIONSSTYLE L"COMMUNICATIONSSTYLE"
+#define VSCLASS_COMMUNICATIONS L"COMMUNICATIONS"
+#else
+static const WCHAR VSCLASS_COMMUNICATIONSSTYLE [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_COMMUNICATIONS [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0};
+#endif
+
+enum COMMUNICATIONSPARTS {
+    CSST_TAB = 1,
+};
+
+#define COMMUNICATIONSSTYLEPARTS COMMUNICATIONSPARTS;
+
+enum TABSTATES {
+    CSTB_NORMAL = 1,
+    CSTB_HOT = 2,
+    CSTB_SELECTED = 3,
+};
+
+/* CONTROLPANELSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_CONTROLPANELSTYLE (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0}
+#define VSCLASS_CONTROLPANEL (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_CONTROLPANELSTYLE L"CONTROLPANELSTYLE"
+#define VSCLASS_CONTROLPANEL L"CONTROLPANEL"
+#else
+static const WCHAR VSCLASS_CONTROLPANELSTYLE [] = {'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_CONTROLPANEL [] = {'C','O','N','T','R','O','L','P','A','N','E','L',0};
+#endif
+
+enum CONTROLPANELPARTS {
+    CPANEL_NAVIGATIONPANE = 1,
+    CPANEL_CONTENTPANE = 2,
+    CPANEL_NAVIGATIONPANELABEL = 3,
+    CPANEL_CONTENTPANELABEL = 4,
+    CPANEL_TITLE = 5,
+    CPANEL_BODYTEXT = 6,
+    CPANEL_HELPLINK = 7,
+    CPANEL_TASKLINK = 8,
+    CPANEL_GROUPTEXT = 9,
+    CPANEL_CONTENTLINK = 10,
+    CPANEL_SECTIONTITLELINK = 11,
+    CPANEL_LARGECOMMANDAREA = 12,
+    CPANEL_SMALLCOMMANDAREA = 13,
+    CPANEL_BUTTON = 14,
+    CPANEL_MESSAGETEXT = 15,
+    CPANEL_NAVIGATIONPANELINE = 16,
+    CPANEL_CONTENTPANELINE = 17,
+    CPANEL_BANNERAREA = 18,
+    CPANEL_BODYTITLE = 19,
+};
+
+#define CONTROLPANELSTYLEPARTS CONTROLPANELPARTS;
+
+enum HELPLINKSTATES {
+    CPHL_NORMAL = 1,
+    CPHL_HOT = 2,
+    CPHL_PRESSED = 3,
+    CPHL_DISABLED = 4,
+};
+
+enum TASKLINKSTATES {
+    CPTL_NORMAL = 1,
+    CPTL_HOT = 2,
+    CPTL_PRESSED = 3,
+    CPTL_DISABLED = 4,
+    CPTL_PAGE = 5,
+};
+
+enum CONTENTLINKSTATES {
+    CPCL_NORMAL = 1,
+    CPCL_HOT = 2,
+    CPCL_PRESSED = 3,
+    CPCL_DISABLED = 4,
+};
+
+enum SECTIONTITLELINKSTATES {
+    CPSTL_NORMAL = 1,
+    CPSTL_HOT = 2,
+};
+
+/* DATEPICKERSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_DATEPICKERSTYLE (const WCHAR []){'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0}
+#define VSCLASS_DATEPICKER (const WCHAR []){'D','A','T','E','P','I','C','K','E','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_DATEPICKERSTYLE L"DATEPICKERSTYLE"
+#define VSCLASS_DATEPICKER L"DATEPICKER"
+#else
+static const WCHAR VSCLASS_DATEPICKERSTYLE[] = {'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_DATEPICKER [] = {'D','A','T','E','P','I','C','K','E','R',0};
+#endif
+
+enum DATEPICKERPARTS {
+    DP_DATETEXT = 1,
+    DP_DATEBORDER = 2,
+    DP_SHOWCALENDARBUTTONRIGHT = 3,
+};
+
+#define DATEPICKERSTYLEPARTS DATEPICKERPARTS;
+
+enum DATETEXTSTATES {
+    DPDT_NORMAL = 1,
+    DPDT_DISABLED = 2,
+    DPDT_SELECTED = 3,
+};
+
+enum DATEBORDERSTATES {
+    DPDB_NORMAL = 1,
+    DPDB_HOT = 2,
+    DPDB_FOCUSED = 3,
+    DPDB_DISABLED = 4,
+};
+
+enum SHOWCALENDARBUTTONRIGHTSTATES {
+    DPSCBR_NORMAL = 1,
+    DPSCBR_HOT = 2,
+    DPSCBR_PRESSED = 3,
+    DPSCBR_DISABLED = 4,
+};
+
+/* DRAGDROPSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_DRAGDROPSTYLE (const WCHAR []){'D','R','A','G','D','R','O','P','S','T','Y','L','E',0}
+#define VSCLASS_DRAGDROP (const WCHAR []){'D','R','A','G','D','R','O','P',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_DRAGDROPSTYLE L"DRAGDROPSTYLE"
+#define VSCLASS_DRAGDROP L"DRAGDROP"
+#else
+static const WCHAR VSCLASS_DRAGDROPSTYLE [] = {'D','R','A','G','D','R','O','P','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_DRAGDROP [] = {'D','R','A','G','D','R','O','P',0};
+#endif
+
+enum DRAGDROPPARTS {
+    DD_COPY = 1,
+    DD_MOVE = 2,
+    DD_UPDATEMETADATA = 3,
+    DD_CREATELINK = 4,
+    DD_WARNING = 5,
+    DD_NONE = 6,
+    DD_IMAGEBG = 7,
+    DD_TEXTBG = 8,
+};
+
+#define DRAGDROPSTYLEPARTS DRAGDROPPARTS;
+
+enum COPYSTATES {
+    DDCOPY_HIGHLIGHT = 1,
+    DDCOPY_NOHIGHLIGHT = 2,
+};
+
+enum MOVESTATES {
+    DDMOVE_HIGHLIGHT = 1,
+    DDMOVE_NOHIGHLIGHT = 2,
+};
+
+enum UPDATEMETADATASTATES {
+    DDUPDATEMETADATA_HIGHLIGHT = 1,
+    DDUPDATEMETADATA_NOHIGHLIGHT = 2,
+};
+
+enum CREATELINKSTATES {
+    DDCREATELINK_HIGHLIGHT = 1,
+    DDCREATELINK_NOHIGHLIGHT = 2,
+};
+
+enum WARNINGSTATES {
+    DDWARNING_HIGHLIGHT = 1,
+    DDWARNING_NOHIGHLIGHT = 2,
+};
+
+enum NONESTATES {
+    DDNONE_HIGHLIGHT = 1,
+    DDNONE_NOHIGHLIGHT = 2,
+};
+
+/* EDITSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_EDITSTYLE (const WCHAR []){'E','D','I','T','S','T','Y','L','E',0}
+#define VSCLASS_EDIT (const WCHAR []){'E','D','I','T',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_EDITSTYLE L"EDITSTYLE"
+#define VSCLASS_EDIT L"EDIT"
+#else
+static const WCHAR VSCLASS_EDITSTYLE [] = {'E','D','I','T','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_EDIT [] = {'E','D','I','T',0};
+#endif
+
+enum EDITPARTS {
+    EP_EDITTEXT = 1,
+    EP_CARET = 2,
+    EP_BACKGROUND = 3,
+    EP_PASSWORD = 4,
+    EP_BACKGROUNDWITHBORDER = 5,
+    EP_EDITBORDER_NOSCROLL = 6,
+    EP_EDITBORDER_HSCROLL = 7,
+    EP_EDITBORDER_VSCROLL = 8,
+    EP_EDITBORDER_HVSCROLL = 9,
+};
+
+#define EDITSTYLEPARTS EDITPARTS;
+
+enum EDITTEXTSTATES {
+    ETS_NORMAL = 1,
+    ETS_HOT = 2,
+    ETS_SELECTED = 3,
+    ETS_DISABLED = 4,
+    ETS_FOCUSED = 5,
+    ETS_READONLY = 6,
+    ETS_ASSIST = 7,
+    ETS_CUEBANNER = 8,
+};
+
+enum BACKGROUNDSTATES {
+    EBS_NORMAL = 1,
+    EBS_HOT = 2,
+    EBS_DISABLED = 3,
+    EBS_FOCUSED = 4,
+    EBS_READONLY = 5,
+    EBS_ASSIST = 6,
+};
+
+enum BACKGROUNDWITHBORDERSTATES {
+    EBWBS_NORMAL = 1,
+    EBWBS_HOT = 2,
+    EBWBS_DISABLED = 3,
+    EBWBS_FOCUSED = 4,
+};
+
+enum EDITBORDER_NOSCROLLSTATES {
+    EPSN_NORMAL = 1,
+    EPSN_HOT = 2,
+    EPSN_FOCUSED = 3,
+    EPSN_DISABLED = 4,
+};
+
+enum EDITBORDER_HSCROLLSTATES {
+    EPSH_NORMAL = 1,
+    EPSH_HOT = 2,
+    EPSH_FOCUSED = 3,
+    EPSH_DISABLED = 4,
+};
+
+enum EDITBORDER_VSCROLLSTATES {
+    EPSV_NORMAL = 1,
+    EPSV_HOT = 2,
+    EPSV_FOCUSED = 3,
+    EPSV_DISABLED = 4,
+};
+
+enum EDITBORDER_HVSCROLLSTATES {
+    EPSHV_NORMAL = 1,
+    EPSHV_HOT = 2,
+    EPSHV_FOCUSED = 3,
+    EPSHV_DISABLED = 4,
+};
+
+/* EXPLORERBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_EXPLORERBARSTYLE (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_EXPLORERBAR (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_EXPLORERBARSTYLE L"EXPLORERBARSTYLE"
+#define VSCLASS_EXPLORERBAR L"EXPLORERBAR"
+#else
+static const WCHAR VSCLASS_EXPLORERBARSTYLE [] = {'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_EXPLORERBAR [] = {'E','X','P','L','O','R','E','R','B','A','R',0};
+#endif
+
+enum EXPLORERBARPARTS {
+    EBP_HEADERBACKGROUND = 1,
+    EBP_HEADERCLOSE = 2,
+    EBP_HEADERPIN = 3,
+    EBP_IEBARMENU = 4,
+    EBP_NORMALGROUPBACKGROUND = 5,
+    EBP_NORMALGROUPCOLLAPSE = 6,
+    EBP_NORMALGROUPEXPAND = 7,
+    EBP_NORMALGROUPHEAD = 8,
+    EBP_SPECIALGROUPBACKGROUND = 9,
+    EBP_SPECIALGROUPCOLLAPSE = 10,
+    EBP_SPECIALGROUPEXPAND = 11,
+    EBP_SPECIALGROUPHEAD = 12,
+};
+
+#define EXPLORERBARSTYLEPARTS EXPLORERBARPARTS;
+
+enum HEADERCLOSESTATES {
+    EBHC_NORMAL = 1,
+    EBHC_HOT = 2,
+    EBHC_PRESSED = 3,
+};
+
+enum HEADERPINSTATES {
+    EBHP_NORMAL = 1,
+    EBHP_HOT = 2,
+    EBHP_PRESSED = 3,
+    EBHP_SELECTEDNORMAL = 4,
+    EBHP_SELECTEDHOT = 5,
+    EBHP_SELECTEDPRESSED = 6,
+};
+
+enum IEBARMENUSTATES {
+    EBM_NORMAL = 1,
+    EBM_HOT = 2,
+    EBM_PRESSED = 3,
+};
+
+enum NORMALGROUPCOLLAPSESTATES {
+    EBNGC_NORMAL = 1,
+    EBNGC_HOT = 2,
+    EBNGC_PRESSED = 3,
+};
+
+enum NORMALGROUPEXPANDSTATES {
+    EBNGE_NORMAL = 1,
+    EBNGE_HOT = 2,
+    EBNGE_PRESSED = 3,
+};
+
+enum SPECIALGROUPCOLLAPSESTATES {
+    EBSGC_NORMAL = 1,
+    EBSGC_HOT = 2,
+    EBSGC_PRESSED = 3,
+};
+
+enum SPECIALGROUPEXPANDSTATES {
+    EBSGE_NORMAL = 1,
+    EBSGE_HOT = 2,
+    EBSGE_PRESSED = 3,
+};
+
+/* FLYOUTSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_FLYOUTSTYLE (const WCHAR []){'F','L','Y','O','U','T','S','T','Y','L','E',0}
+#define VSCLASS_FLYOUT (const WCHAR []){'F','L','Y','O','U','T',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_FLYOUTSTYLE L"FLYOUTSTYLE"
+#define VSCLASS_FLYOUT L"FLYOUT"
+#else
+static const WCHAR VSCLASS_FLYOUTSTYLE [] = {'F','L','Y','O','U','T','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_FLYOUT [] = {'F','L','Y','O','U','T',0};
+#endif
+
+enum FLYOUTPARTS {
+    FLYOUT_HEADER = 1,
+    FLYOUT_BODY = 2,
+    FLYOUT_LABEL = 3,
+    FLYOUT_LINK = 4,
+    FLYOUT_DIVIDER = 5,
+    FLYOUT_WINDOW = 6,
+    FLYOUT_LINKAREA = 7,
+    FLYOUT_LINKHEADER = 8,
+};
+
+#define FLYOUTSTYLEPARTS FLYOUTPARTS;
+
+enum LABELSTATES {
+    FLS_NORMAL = 1,
+    FLS_SELECTED = 2,
+    FLS_EMPHASIZED = 3,
+    FLS_DISABLED = 4,
+};
+
+enum LINKSTATES {
+    FLYOUTLINK_NORMAL = 1,
+    FLYOUTLINK_HOVER = 2,
+};
+
+enum BODYSTATES {
+    FBS_NORMAL = 1,
+    FBS_EMPHASIZED = 2,
+};
+
+enum LINKHEADERSTATES {
+    FLH_NORMAL = 1,
+    FLH_HOVER = 2,
+};
+
+/* HEADERSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_HEADERSTYLE (const WCHAR []){'H','E','A','D','E','R','S','T','Y','L','E',0}
+#define VSCLASS_HEADER (const WCHAR []){'H','E','A','D','E','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_HEADERSTYLE L"HEADERSTYLE"
+#define VSCLASS_HEADER L"HEADER"
+#else
+static const WCHAR VSCLASS_HEADERSTYLE [] = {'H','E','A','D','E','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_HEADER [] = {'H','E','A','D','E','R',0};
+#endif
+
+enum HEADERPARTS {
+    HP_HEADERITEM = 1,
+    HP_HEADERITEMLEFT = 2,
+    HP_HEADERITEMRIGHT = 3,
+    HP_HEADERSORTARROW = 4,
+    HP_HEADERDROPDOWN = 5,
+    HP_HEADERDROPDOWNFILTER = 6,
+    HP_HEADEROVERFLOW = 7,
+};
+
+#define HEADERSTYLEPARTS HEADERPARTS;
+
+enum HEADERSTYLESTATES {
+    HBG_DETAILS = 1,
+    HBG_ICON = 2,
+};
+
+enum HEADERITEMSTATES {
+    HIS_NORMAL = 1,
+    HIS_HOT = 2,
+    HIS_PRESSED = 3,
+    HIS_SORTEDNORMAL = 4,
+    HIS_SORTEDHOT = 5,
+    HIS_SORTEDPRESSED = 6,
+    HIS_ICONNORMAL = 7,
+    HIS_ICONHOT = 8,
+    HIS_ICONPRESSED = 9,
+    HIS_ICONSORTEDNORMAL = 10,
+    HIS_ICONSORTEDHOT = 11,
+    HIS_ICONSORTEDPRESSED = 12,
+};
+
+enum HEADERITEMLEFTSTATES {
+    HILS_NORMAL = 1,
+    HILS_HOT = 2,
+    HILS_PRESSED = 3,
+};
+
+enum HEADERITEMRIGHTSTATES {
+    HIRS_NORMAL = 1,
+    HIRS_HOT = 2,
+    HIRS_PRESSED = 3,
+};
+
+enum HEADERSORTARROWSTATES {
+    HSAS_SORTEDUP = 1,
+    HSAS_SORTEDDOWN = 2,
+};
+
+enum HEADERDROPDOWNSTATES {
+    HDDS_NORMAL = 1,
+    HDDS_SOFTHOT = 2,
+    HDDS_HOT = 3,
+};
+
+enum HEADERDROPDOWNFILTERSTATES {
+    HDDFS_NORMAL = 1,
+    HDDFS_SOFTHOT = 2,
+    HDDFS_HOT = 3,
+};
+
+enum HEADEROVERFLOWSTATES {
+    HOFS_NORMAL = 1,
+    HOFS_HOT = 2,
+};
+
+/* LISTBOXSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_LISTBOXSTYLE (const WCHAR []){'L','I','S','T','B','O','X','S','T','Y','L','E',0}
+#define VSCLASS_LISTBOX (const WCHAR []){'L','I','S','T','B','O','X',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_LISTBOXSTYLE L"LISTBOXSTYLE"
+#define VSCLASS_LISTBOX L"LISTBOX"
+#else
+static const WCHAR VSCLASS_LISTBOXSTYLE [] = {'L','I','S','T','B','O','X','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_LISTBOX[] = {'L','I','S','T','B','O','X',0};
+#endif
+
+enum LISTBOXPARTS {
+    LBCP_BORDER_HSCROLL = 1,
+    LBCP_BORDER_HVSCROLL = 2,
+    LBCP_BORDER_NOSCROLL = 3,
+    LBCP_BORDER_VSCROLL = 4,
+    LBCP_ITEM = 5,
+};
+
+#define LISTBOXSTYLEPARTS LISTBOXPARTS;
+
+enum BORDER_HSCROLLSTATES {
+    LBPSH_NORMAL = 1,
+    LBPSH_FOCUSED = 2,
+    LBPSH_HOT = 3,
+    LBPSH_DISABLED = 4,
+};
+
+enum BORDER_HVSCROLLSTATES {
+    LBPSHV_NORMAL = 1,
+    LBPSHV_FOCUSED = 2,
+    LBPSHV_HOT = 3,
+    LBPSHV_DISABLED = 4,
+};
+
+enum BORDER_NOSCROLLSTATES {
+    LBPSN_NORMAL = 1,
+    LBPSN_FOCUSED = 2,
+    LBPSN_HOT = 3,
+    LBPSN_DISABLED = 4,
+};
+
+enum BORDER_VSCROLLSTATES {
+    LBPSV_NORMAL = 1,
+    LBPSV_FOCUSED = 2,
+    LBPSV_HOT = 3,
+    LBPSV_DISABLED = 4,
+};
+
+enum ITEMSTATES {
+    LBPSI_HOT = 1,
+    LBPSI_HOTSELECTED = 2,
+    LBPSI_SELECTED = 3,
+    LBPSI_SELECTEDNOTFOCUS = 4,
+};
+
+/* LISTVIEWSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_LISTVIEWSTYLE (const WCHAR []){'L','I','S','T','V','I','E','W','S','T','Y','L','E',0}
+#define VSCLASS_LISTVIEW (const WCHAR []){'L','I','S','T','V','I','E','W',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_LISTVIEWSTYLE L"LISTVIEWSTYLE"
+#define VSCLASS_LISTVIEW L"LISTVIEW"
+#else
+static const WCHAR VSCLASS_LISTVIEWSTYLE [] = {'L','I','S','T','V','I','E','W','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_LISTVIEW [] = {'L','I','S','T','V','I','E','W',0};
+#endif
+
+enum LISTVIEWPARTS {
+    LVP_LISTITEM = 1,
+    LVP_LISTGROUP = 2,
+    LVP_LISTDETAIL = 3,
+    LVP_LISTSORTEDDETAIL = 4,
+    LVP_EMPTYTEXT = 5,
+    LVP_GROUPHEADER = 6,
+    LVP_GROUPHEADERLINE = 7,
+    LVP_EXPANDBUTTON = 8,
+    LVP_COLLAPSEBUTTON = 9,
+    LVP_COLUMNDETAIL = 10,
+};
+
+#define LISTVIEWSTYLEPARTS LISTVIEWPARTS;
+
+enum LISTITEMSTATES {
+    LISS_NORMAL = 1,
+    LISS_HOT = 2,
+    LISS_SELECTED = 3,
+    LISS_DISABLED = 4,
+    LISS_SELECTEDNOTFOCUS = 5,
+    LISS_HOTSELECTED = 6,
+};
+
+enum GROUPHEADERSTATES {
+    LVGH_OPEN = 1,
+    LVGH_OPENHOT = 2,
+    LVGH_OPENSELECTED = 3,
+    LVGH_OPENSELECTEDHOT = 4,
+    LVGH_OPENSELECTEDNOTFOCUSED = 5,
+    LVGH_OPENSELECTEDNOTFOCUSEDHOT = 6,
+    LVGH_OPENMIXEDSELECTION = 7,
+    LVGH_OPENMIXEDSELECTIONHOT = 8,
+    LVGH_CLOSE = 9,
+    LVGH_CLOSEHOT = 10,
+    LVGH_CLOSESELECTED = 11,
+    LVGH_CLOSESELECTEDHOT = 12,
+    LVGH_CLOSESELECTEDNOTFOCUSED = 13,
+    LVGH_CLOSESELECTEDNOTFOCUSEDHOT = 14,
+    LVGH_CLOSEMIXEDSELECTION = 15,
+    LVGH_CLOSEMIXEDSELECTIONHOT = 16,
+};
+
+enum GROUPHEADERLINESTATES {
+    LVGHL_OPEN = 1,
+    LVGHL_OPENHOT = 2,
+    LVGHL_OPENSELECTED = 3,
+    LVGHL_OPENSELECTEDHOT = 4,
+    LVGHL_OPENSELECTEDNOTFOCUSED = 5,
+    LVGHL_OPENSELECTEDNOTFOCUSEDHOT = 6,
+    LVGHL_OPENMIXEDSELECTION = 7,
+    LVGHL_OPENMIXEDSELECTIONHOT = 8,
+    LVGHL_CLOSE = 9,
+    LVGHL_CLOSEHOT = 10,
+    LVGHL_CLOSESELECTED = 11,
+    LVGHL_CLOSESELECTEDHOT = 12,
+    LVGHL_CLOSESELECTEDNOTFOCUSED = 13,
+    LVGHL_CLOSESELECTEDNOTFOCUSEDHOT = 14,
+    LVGHL_CLOSEMIXEDSELECTION = 15,
+    LVGHL_CLOSEMIXEDSELECTIONHOT = 16,
+};
+
+enum EXPANDBUTTONSTATES {
+    LVEB_NORMAL = 1,
+    LVEB_HOVER = 2,
+    LVEB_PUSHED = 3,
+};
+
+enum COLLAPSEBUTTONSTATES {
+    LVCB_NORMAL = 1,
+    LVCB_HOVER = 2,
+    LVCB_PUSHED = 3,
+};
+
+/* MENUSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_MENUSTYLE (const WCHAR []){'M','E','N','U','S','T','Y','L','E',0}
+#define VSCLASS_MENU (const WCHAR []){'M','E','N','U',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_MENUSTYLE L"MENUSTYLE"
+#define VSCLASS_MENU L"MENU"
+#else
+static const WCHAR VSCLASS_MENUSTYLE [] = {'M','E','N','U','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_MENU [] = {'M','E','N','U',0};
+#endif
+
+enum MENUPARTS {
+    MENU_MENUITEM_TMSCHEMA = 1,
+    MENU_MENUDROPDOWN_TMSCHEMA = 2,
+    MENU_MENUBARITEM_TMSCHEMA = 3,
+    MENU_MENUBARDROPDOWN_TMSCHEMA = 4,
+    MENU_CHEVRON_TMSCHEMA = 5,
+    MENU_SEPARATOR_TMSCHEMA = 6,
+    MENU_BARBACKGROUND = 7,
+    MENU_BARITEM = 8,
+    MENU_POPUPBACKGROUND = 9,
+    MENU_POPUPBORDERS = 10,
+    MENU_POPUPCHECK = 11,
+    MENU_POPUPCHECKBACKGROUND = 12,
+    MENU_POPUPGUTTER = 13,
+    MENU_POPUPITEM = 14,
+    MENU_POPUPSEPARATOR = 15,
+    MENU_POPUPSUBMENU = 16,
+    MENU_SYSTEMCLOSE = 17,
+    MENU_SYSTEMMAXIMIZE = 18,
+    MENU_SYSTEMMINIMIZE = 19,
+    MENU_SYSTEMRESTORE = 20,
+};
+
+#define MENUSTYLEPARTS MENUPARTS;
+
+enum BARBACKGROUNDSTATES {
+    MB_ACTIVE = 1,
+    MB_INACTIVE = 2,
+};
+
+enum BARITEMSTATES {
+    MBI_NORMAL = 1,
+    MBI_HOT = 2,
+    MBI_PUSHED = 3,
+    MBI_DISABLED = 4,
+    MBI_DISABLEDHOT = 5,
+    MBI_DISABLEDPUSHED = 6,
+};
+
+enum POPUPCHECKSTATES {
+    MC_CHECKMARKNORMAL = 1,
+    MC_CHECKMARKDISABLED = 2,
+    MC_BULLETNORMAL = 3,
+    MC_BULLETDISABLED = 4,
+};
+
+enum POPUPCHECKBACKGROUNDSTATES {
+    MCB_DISABLED = 1,
+    MCB_NORMAL = 2,
+    MCB_BITMAP = 3,
+};
+
+enum POPUPITEMSTATES {
+    MPI_NORMAL = 1,
+    MPI_HOT = 2,
+    MPI_DISABLED = 3,
+    MPI_DISABLEDHOT = 4,
+};
+
+enum POPUPSUBMENUSTATES {
+    MSM_NORMAL = 1,
+    MSM_DISABLED = 2,
+};
+
+enum SYSTEMCLOSESTATES {
+    MSYSC_NORMAL = 1,
+    MSYSC_DISABLED = 2,
+};
+
+enum SYSTEMMAXIMIZESTATES {
+    MSYSMX_NORMAL = 1,
+    MSYSMX_DISABLED = 2,
+};
+
+enum SYSTEMMINIMIZESTATES {
+    MSYSMN_NORMAL = 1,
+    MSYSMN_DISABLED = 2,
+};
+
+enum SYSTEMRESTORESTATES {
+    MSYSR_NORMAL = 1,
+    MSYSR_DISABLED = 2,
+};
+
+/* NAVIGATION class */
+#if defined(__GNUC__)
+#define VSCLASS_NAVIGATION (const WCHAR []){'N','A','V','I','G','A','T','I','O','N',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_NAVIGATION L"NAVIGATION"
+#else
+static const WCHAR VSCLASS_NAVIGATION [] = {'N','A','V','I','G','A','T','I','O','N',0};
+#endif
+
+enum NAVIGATIONPARTS {
+    NAV_BACKBUTTON = 1,
+    NAV_FORWARDBUTTON = 2,
+    NAV_MENUBUTTON = 3,
+};
+
+enum NAV_BACKBUTTONSTATES {
+    NAV_BB_NORMAL = 1,
+    NAV_BB_HOT = 2,
+    NAV_BB_PRESSED = 3,
+    NAV_BB_DISABLED = 4,
+};
+
+enum NAV_FORWARDBUTTONSTATES {
+    NAV_FB_NORMAL = 1,
+    NAV_FB_HOT = 2,
+    NAV_FB_PRESSED = 3,
+    NAV_FB_DISABLED = 4,
+};
+
+enum NAV_MENUBUTTONSTATES {
+    NAV_MB_NORMAL = 1,
+    NAV_MB_HOT = 2,
+    NAV_MB_PRESSED = 3,
+    NAV_MB_DISABLED = 4,
+};
+
+/* PROGRESSSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_PROGRESSSTYLE (const WCHAR []){'P','R','O','G','R','E','S','S','S','T','Y','L','E',0}
+#define VSCLASS_PROGRESS (const WCHAR []){'P','R','O','G','R','E','S','S',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_PROGRESSSTYLE L"PROGRESSSTYLE"
+#define VSCLASS_PROGRESS L"PROGRESS"
+#else
+static const WCHAR VSCLASS_PROGRESSSTYLE [] = {'P','R','O','G','R','E','S','S','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_PROGRESS [] = {'P','R','O','G','R','E','S','S',0};
+#endif
+
+enum PROGRESSPARTS {
+    PP_BAR = 1,
+    PP_BARVERT = 2,
+    PP_CHUNK = 3,
+    PP_CHUNKVERT = 4,
+    PP_FILL = 5,
+    PP_FILLVERT = 6,
+    PP_PULSEOVERLAY = 7,
+    PP_MOVEOVERLAY = 8,
+    PP_PULSEOVERLAYVERT = 9,
+    PP_MOVEOVERLAYVERT = 10,
+    PP_TRANSPARENTBAR = 11,
+    PP_TRANSPARENTBARVERT = 12,
+};
+
+#define PROGRESSSTYLEPARTS PROGRESSPARTS;
+
+enum TRANSPARENTBARSTATES {
+    PBBS_NORMAL = 1,
+    PBBS_PARTIAL = 2,
+};
+
+enum TRANSPARENTBARVERTSTATES {
+    PBBVS_NORMAL = 1,
+    PBBVS_PARTIAL = 2,
+};
+
+enum FILLSTATES {
+    PBFS_NORMAL = 1,
+    PBFS_ERROR = 2,
+    PBFS_PAUSED = 3,
+    PBFS_PARTIAL = 4,
+};
+
+enum FILLVERTSTATES {
+    PBFVS_NORMAL = 1,
+    PBFVS_ERROR = 2,
+    PBFVS_PAUSED = 3,
+    PBFVS_PARTIAL = 4,
+};
+
+/* REBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_REBARSTYLE (const WCHAR []){'R','E','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_REBAR (const WCHAR []){'R','E','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_REBARSTYLE L"REBARSTYLE"
+#define VSCLASS_REBAR L"REBAR"
+#else
+static const WCHAR VSCLASS_REBARSTYLE [] = {'R','E','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_REBAR [] = {'R','E','B','A','R',0};
+#endif
+
+enum REBARPARTS {
+    RP_GRIPPER = 1,
+    RP_GRIPPERVERT = 2,
+    RP_BAND = 3,
+    RP_CHEVRON = 4,
+    RP_CHEVRONVERT = 5,
+    RP_BACKGROUND = 6,
+    RP_SPLITTER = 7,
+    RP_SPLITTERVERT = 8,
+};
+
+#define REBARSTYLEPARTS REBARPARTS;
+
+enum CHEVRONSTATES {
+    CHEVS_NORMAL = 1,
+    CHEVS_HOT = 2,
+    CHEVS_PRESSED = 3,
+};
+
+enum CHEVRONVERTSTATES {
+    CHEVSV_NORMAL = 1,
+    CHEVSV_HOT = 2,
+    CHEVSV_PRESSED = 3,
+};
+
+enum SPLITTERSTATES {
+    SPLITS_NORMAL = 1,
+    SPLITS_HOT = 2,
+    SPLITS_PRESSED = 3,
+};
+
+enum SPLITTERVERTSTATES {
+    SPLITSV_NORMAL = 1,
+    SPLITSV_HOT = 2,
+    SPLITSV_PRESSED = 3,
+};
+
+/* SCROLLBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_SCROLLBARSTYLE (const WCHAR []){'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_SCROLLBAR (const WCHAR []){'S','C','R','O','L','L','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_SCROLLBARSTYLE L"SCROLLBARSTYLE"
+#define VSCLASS_SCROLLBAR L"SCROLLBAR"
+#else
+static const WCHAR VSCLASS_SCROLLBARSTYLE [] = {'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_SCROLLBAR [] = {'S','C','R','O','L','L','B','A','R',0};
+#endif
+
+enum SCROLLBARPARTS {
+    SBP_ARROWBTN = 1,
+    SBP_THUMBBTNHORZ = 2,
+    SBP_THUMBBTNVERT = 3,
+    SBP_LOWERTRACKHORZ = 4,
+    SBP_UPPERTRACKHORZ = 5,
+    SBP_LOWERTRACKVERT = 6,
+    SBP_UPPERTRACKVERT = 7,
+    SBP_GRIPPERHORZ = 8,
+    SBP_GRIPPERVERT = 9,
+    SBP_SIZEBOX = 10,
+};
+
+#define SCROLLBARSTYLEPARTS SCROLLBARPARTS;
+
+enum ARROWBTNSTATES {
+    ABS_UPNORMAL = 1,
+    ABS_UPHOT = 2,
+    ABS_UPPRESSED = 3,
+    ABS_UPDISABLED = 4,
+    ABS_DOWNNORMAL = 5,
+    ABS_DOWNHOT = 6,
+    ABS_DOWNPRESSED = 7,
+    ABS_DOWNDISABLED = 8,
+    ABS_LEFTNORMAL = 9,
+    ABS_LEFTHOT = 10,
+    ABS_LEFTPRESSED = 11,
+    ABS_LEFTDISABLED = 12,
+    ABS_RIGHTNORMAL = 13,
+    ABS_RIGHTHOT = 14,
+    ABS_RIGHTPRESSED = 15,
+    ABS_RIGHTDISABLED = 16,
+    ABS_UPHOVER = 17,
+    ABS_DOWNHOVER = 18,
+    ABS_LEFTHOVER = 19,
+    ABS_RIGHTHOVER = 20,
+};
+
+enum SCROLLBARSTYLESTATES {
+    SCRBS_NORMAL = 1,
+    SCRBS_HOT = 2,
+    SCRBS_PRESSED = 3,
+    SCRBS_DISABLED = 4,
+    SCRBS_HOVER = 5,
+};
+
+enum SIZEBOXSTATES {
+    SZB_RIGHTALIGN = 1,
+    SZB_LEFTALIGN = 2,
+    SZB_TOPRIGHTALIGN = 3,
+    SZB_TOPLEFTALIGN = 4,
+    SZB_HALFBOTTOMRIGHTALIGN = 5,
+    SZB_HALFBOTTOMLEFTALIGN = 6,
+    SZB_HALFTOPRIGHTALIGN = 7,
+    SZB_HALFTOPLEFTALIGN = 8,
+};
+
+/* SPINSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_SPINSTYLE (const WCHAR []){'S','P','I','N','S','T','Y','L','E',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_SPINSTYLE L"SPINSTYLE"
+#else
+static const WCHAR VSCLASS_SPINSTYLE [] = {'S','P','I','N','S','T','Y','L','E',0};
+#endif
+#if defined(__GNUC__)
+#define VSCLASS_SPIN (const WCHAR []){'S','P','I','N',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_SPIN L"SPIN"
+#else
+static const WCHAR VSCLASS_SPIN [] = {'S','P','I','N',0};
+#endif
+
+enum SPINPARTS {
+    SPNP_UP = 1,
+    SPNP_DOWN = 2,
+    SPNP_UPHORZ = 3,
+    SPNP_DOWNHORZ = 4,
+};
+
+#define SPINSTYLEPARTS SPINPARTS;
+
+enum UPSTATES {
+    UPS_NORMAL = 1,
+    UPS_HOT = 2,
+    UPS_PRESSED = 3,
+    UPS_DISABLED = 4,
+};
+
+enum DOWNSTATES {
+    DNS_NORMAL = 1,
+    DNS_HOT = 2,
+    DNS_PRESSED = 3,
+    DNS_DISABLED = 4,
+};
+
+enum UPHORZSTATES {
+    UPHZS_NORMAL = 1,
+    UPHZS_HOT = 2,
+    UPHZS_PRESSED = 3,
+    UPHZS_DISABLED = 4,
+};
+
+enum DOWNHORZSTATES {
+    DNHZS_NORMAL = 1,
+    DNHZS_HOT = 2,
+    DNHZS_PRESSED = 3,
+    DNHZS_DISABLED = 4,
+};
+
+/* STATUSSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_STATUSSTYLE (const WCHAR []){'S','T','A','T','U','S','S','T','Y','L','E',0}
+#define VSCLASS_STATUS (const WCHAR []){'S','T','A','T','U','S',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_STATUSSTYLE L"STATUSSTYLE"
+#define VSCLASS_STATUS L"STATUS"
+#else
+static const WCHAR VSCLASS_STATUSSTYLE [] = {'S','T','A','T','U','S','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_STATUS [] = {'S','T','A','T','U','S',0};
+#endif
+
+enum STATUSPARTS {
+    SP_PANE = 1,
+    SP_GRIPPERPANE = 2,
+    SP_GRIPPER = 3,
+};
+
+#define STATUSSTYLEPARTS STATUSPARTS;
+
+/* TABSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TABSTYLE (const WCHAR []){'T','A','B','S','T','Y','L','E',0}
+#define VSCLASS_TAB (const WCHAR []){'T','A','B',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TABSTYLE L"TABSTYLE"
+#define VSCLASS_TAB L"TAB"
+#else
+static const WCHAR VSCLASS_TABSTYLE [] = {'T','A','B','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TAB [] = {'T','A','B',0};
+#endif
+
+enum TABPARTS {
+    TABP_TABITEM = 1,
+    TABP_TABITEMLEFTEDGE = 2,
+    TABP_TABITEMRIGHTEDGE = 3,
+    TABP_TABITEMBOTHEDGE = 4,
+    TABP_TOPTABITEM = 5,
+    TABP_TOPTABITEMLEFTEDGE = 6,
+    TABP_TOPTABITEMRIGHTEDGE = 7,
+    TABP_TOPTABITEMBOTHEDGE = 8,
+    TABP_PANE = 9,
+    TABP_BODY = 10,
+    TABP_AEROWIZARDBODY = 11,
+};
+
+#define TABSTYLEPARTS TABPARTS;
+
+enum TABITEMSTATES {
+    TIS_NORMAL = 1,
+    TIS_HOT = 2,
+    TIS_SELECTED = 3,
+    TIS_DISABLED = 4,
+    TIS_FOCUSED = 5,
+};
+
+enum TABITEMLEFTEDGESTATES {
+    TILES_NORMAL = 1,
+    TILES_HOT = 2,
+    TILES_SELECTED = 3,
+    TILES_DISABLED = 4,
+    TILES_FOCUSED = 5,
+};
+
+enum TABITEMRIGHTEDGESTATES {
+    TIRES_NORMAL = 1,
+    TIRES_HOT = 2,
+    TIRES_SELECTED = 3,
+    TIRES_DISABLED = 4,
+    TIRES_FOCUSED = 5,
+};
+
+enum TABITEMBOTHEDGESTATES {
+    TIBES_NORMAL = 1,
+    TIBES_HOT = 2,
+    TIBES_SELECTED = 3,
+    TIBES_DISABLED = 4,
+    TIBES_FOCUSED = 5,
+};
+
+enum TOPTABITEMSTATES {
+    TTIS_NORMAL = 1,
+    TTIS_HOT = 2,
+    TTIS_SELECTED = 3,
+    TTIS_DISABLED = 4,
+    TTIS_FOCUSED = 5,
+};
+
+enum TOPTABITEMLEFTEDGESTATES {
+    TTILES_NORMAL = 1,
+    TTILES_HOT = 2,
+    TTILES_SELECTED = 3,
+    TTILES_DISABLED = 4,
+    TTILES_FOCUSED = 5,
+};
+
+enum TOPTABITEMRIGHTEDGESTATES {
+    TTIRES_NORMAL = 1,
+    TTIRES_HOT = 2,
+    TTIRES_SELECTED = 3,
+    TTIRES_DISABLED = 4,
+    TTIRES_FOCUSED = 5,
+};
+
+enum TOPTABITEMBOTHEDGESTATES {
+    TTIBES_NORMAL = 1,
+    TTIBES_HOT = 2,
+    TTIBES_SELECTED = 3,
+    TTIBES_DISABLED = 4,
+    TTIBES_FOCUSED = 5,
+};
+
+/* TASKDIALOGSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TASKDIALOGSTYLE (const WCHAR []){'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0}
+#define VSCLASS_TASKDIALOG (const WCHAR []){'T','A','S','K','D','I','A','L','O','G',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TASKDIALOGSTYLE L"TASKDIALOGSTYLE"
+#define VSCLASS_TASKDIALOG L"TASKDIALOG"
+#else
+static const WCHAR VSCLASS_TASKDIALOGSTYLE[] = {'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TASKDIALOG [] = {'T','A','S','K','D','I','A','L','O','G',0};
+#endif
+
+enum TASKDIALOGPARTS {
+    TDLG_PRIMARYPANEL = 1,
+    TDLG_MAININSTRUCTIONPANE = 2,
+    TDLG_MAINICON = 3,
+    TDLG_CONTENTPANE = 4,
+    TDLG_CONTENTICON = 5,
+    TDLG_EXPANDEDCONTENT = 6,
+    TDLG_COMMANDLINKPANE = 7,
+    TDLG_SECONDARYPANEL = 8,
+    TDLG_CONTROLPANE = 9,
+    TDLG_BUTTONSECTION = 10,
+    TDLG_BUTTONWRAPPER = 11,
+    TDLG_EXPANDOTEXT = 12,
+    TDLG_EXPANDOBUTTON = 13,
+    TDLG_VERIFICATIONTEXT = 14,
+    TDLG_FOOTNOTEPANE = 15,
+    TDLG_FOOTNOTEAREA = 16,
+    TDLG_FOOTNOTESEPARATOR = 17,
+    TDLG_EXPANDEDFOOTERAREA = 18,
+    TDLG_PROGRESSBAR = 19,
+    TDLG_IMAGEALIGNMENT = 20,
+    TDLG_RADIOBUTTONPANE = 21,
+};
+
+#define TASKDIALOGSTYLEPARTS TASKDIALOGPARTS;
+
+enum CONTENTPANESTATES {
+    TDLGCPS_STANDALONE = 1,
+};
+
+enum EXPANDOBUTTONSTATES {
+    TDLGEBS_NORMAL = 1,
+    TDLGEBS_HOVER = 2,
+    TDLGEBS_PRESSED = 3,
+    TDLGEBS_EXPANDEDNORMAL = 4,
+    TDLGEBS_EXPANDEDHOVER = 5,
+    TDLGEBS_EXPANDEDPRESSED = 6,
+};
+
+/* TEXTSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TEXTSTYLE (const WCHAR []){'T','E','X','T','S','T','Y','L','E',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TEXTSTYLE L"TEXTSTYLE"
+#else
+static const WCHAR VSCLASS_TEXTSTYLE [] = {'T','E','X','T','S','T','Y','L','E',0};
+#endif
+
+enum TEXTSTYLEPARTS {
+    TEXT_MAININSTRUCTION = 1,
+    TEXT_INSTRUCTION = 2,
+    TEXT_BODYTITLE = 3,
+    TEXT_BODYTEXT = 4,
+    TEXT_SECONDARYTEXT = 5,
+    TEXT_HYPERLINKTEXT = 6,
+    TEXT_EXPANDED = 7,
+    TEXT_LABEL = 8,
+    TEXT_CONTROLLABEL = 9,
+};
+
+enum HYPERLINKTEXTSTATES {
+    TS_HYPERLINK_NORMAL = 1,
+    TS_HYPERLINK_HOT = 2,
+    TS_HYPERLINK_PRESSED = 3,
+    TS_HYPERLINK_DISABLED = 4,
+};
+
+enum CONTROLLABELSTATES {
+    TS_CONTROLLABEL_NORMAL = 1,
+    TS_CONTROLLABEL_DISABLED = 2,
+};
+
+/* TOOLBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TOOLBARSTYLE (const WCHAR []){'T','O','O','L','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_TOOLBAR (const WCHAR []){'T','O','O','L','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TOOLBARSTYLE L"TOOLBARSTYLE"
+#define VSCLASS_TOOLBAR L"TOOLBAR"
+#else
+static const WCHAR VSCLASS_TOOLBARSTYLE [] = {'T','O','O','L','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TOOLBAR[] = {'T','O','O','L','B','A','R',0};
+#endif
+
+enum TOOLBARPARTS {
+    TP_BUTTON = 1,
+    TP_DROPDOWNBUTTON = 2,
+    TP_SPLITBUTTON = 3,
+    TP_SPLITBUTTONDROPDOWN = 4,
+    TP_SEPARATOR = 5,
+    TP_SEPARATORVERT = 6,
+};
+
+#define TOOLBARSTYLEPARTS TOOLBARPARTS;
+
+enum TOOLBARSTYLESTATES {
+    TS_NORMAL = 1,
+    TS_HOT = 2,
+    TS_PRESSED = 3,
+    TS_DISABLED = 4,
+    TS_CHECKED = 5,
+    TS_HOTCHECKED = 6,
+    TS_NEARHOT = 7,
+    TS_OTHERSIDEHOT = 8,
+};
+
+/* TOOLTIPSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TOOLTIPSTYLE (const WCHAR []){'T','O','O','L','T','I','P','S','T','Y','L','E',0}
+#define VSCLASS_TOOLTIP (const WCHAR []){'T','O','O','L','T','I','P',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TOOLTIPSTYLE L"TOOLTIPSTYLE"
+#define VSCLASS_TOOLTIP L"TOOLTIP"
+#else
+static const WCHAR VSCLASS_TOOLTIPSTYLE [] = {'T','O','O','L','T','I','P','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TOOLTIP[] = {'T','O','O','L','T','I','P',0};
+#endif
+
+enum TOOLTIPPARTS {
+    TTP_STANDARD = 1,
+    TTP_STANDARDTITLE = 2,
+    TTP_BALLOON = 3,
+    TTP_BALLOONTITLE = 4,
+    TTP_CLOSE = 5,
+    TTP_BALLOONSTEM = 6,
+};
+
+#define TOOLTIPSTYLEPARTS TOOLTIPPARTS;
+
+enum CLOSESTATES {
+    TTCS_NORMAL = 1,
+    TTCS_HOT = 2,
+    TTCS_PRESSED = 3,
+};
+
+enum STANDARDSTATES {
+    TTSS_NORMAL = 1,
+    TTSS_LINK = 2,
+};
+
+enum BALLOONSTATES {
+    TTBS_NORMAL = 1,
+    TTBS_LINK = 2,
+};
+
+enum BALLOONSTEMSTATES {
+    TTBSS_POINTINGUPLEFTWALL = 1,
+    TTBSS_POINTINGUPCENTERED = 2,
+    TTBSS_POINTINGUPRIGHTWALL = 3,
+    TTBSS_POINTINGDOWNRIGHTWALL = 4,
+    TTBSS_POINTINGDOWNCENTERED = 5,
+    TTBSS_POINTINGDOWNLEFTWALL = 6,
+};
+
+/* TRACKBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TRACKBARSTYLE (const WCHAR []){'T','R','A','C','K','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_TRACKBAR (const WCHAR []){'T','R','A','C','K','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TRACKBARSTYLE L"TRACKBARSTYLE"
+#define VSCLASS_TRACKBAR L"TRACKBAR"
+#else
+static const WCHAR VSCLASS_TRACKBARSTYLE [] = {'T','R','A','C','K','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TRACKBAR [] = {'T','R','A','C','K','B','A','R',0};
+#endif
+
+enum TRACKBARPARTS {
+    TKP_TRACK = 1,
+    TKP_TRACKVERT = 2,
+    TKP_THUMB = 3,
+    TKP_THUMBBOTTOM = 4,
+    TKP_THUMBTOP = 5,
+    TKP_THUMBVERT = 6,
+    TKP_THUMBLEFT = 7,
+    TKP_THUMBRIGHT = 8,
+    TKP_TICS = 9,
+    TKP_TICSVERT = 10,
+};
+
+#define TRACKBARSTYLEPARTS TRACKBARPARTS;
+
+enum TRACKBARSTYLESTATES {
+    TKS_NORMAL = 1,
+};
+
+enum TRACKSTATES {
+    TRS_NORMAL = 1,
+};
+
+enum TRACKVERTSTATES {
+    TRVS_NORMAL = 1,
+};
+
+enum THUMBSTATES {
+    TUS_NORMAL = 1,
+    TUS_HOT = 2,
+    TUS_PRESSED = 3,
+    TUS_FOCUSED = 4,
+    TUS_DISABLED = 5,
+};
+
+enum THUMBBOTTOMSTATES {
+    TUBS_NORMAL = 1,
+    TUBS_HOT = 2,
+    TUBS_PRESSED = 3,
+    TUBS_FOCUSED = 4,
+    TUBS_DISABLED = 5,
+};
+
+enum THUMBTOPSTATES {
+    TUTS_NORMAL = 1,
+    TUTS_HOT = 2,
+    TUTS_PRESSED = 3,
+    TUTS_FOCUSED = 4,
+    TUTS_DISABLED = 5,
+};
+
+enum THUMBVERTSTATES {
+    TUVS_NORMAL = 1,
+    TUVS_HOT = 2,
+    TUVS_PRESSED = 3,
+    TUVS_FOCUSED = 4,
+    TUVS_DISABLED = 5,
+};
+
+enum THUMBLEFTSTATES {
+    TUVLS_NORMAL = 1,
+    TUVLS_HOT = 2,
+    TUVLS_PRESSED = 3,
+    TUVLS_FOCUSED = 4,
+    TUVLS_DISABLED = 5,
+};
+
+enum THUMBRIGHTSTATES {
+    TUVRS_NORMAL = 1,
+    TUVRS_HOT = 2,
+    TUVRS_PRESSED = 3,
+    TUVRS_FOCUSED = 4,
+    TUVRS_DISABLED = 5,
+};
+
+enum TICSSTATES {
+    TSS_NORMAL = 1,
+};
+
+enum TICSVERTSTATES {
+    TSVS_NORMAL = 1,
+};
+
+/* TREEVIEWSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TREEVIEWSTYLE (const WCHAR []){'T','R','E','E','V','I','E','W','S','T','Y','L','E',0}
+#define VSCLASS_TREEVIEW (const WCHAR []){'T','R','E','E','V','I','E','W',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TREEVIEWSTYLE L"TREEVIEWSTYLE"
+#define VSCLASS_TREEVIEW L"TREEVIEW"
+#else
+static const WCHAR VSCLASS_TREEVIEWSTYLE [] = {'T','R','E','E','V','I','E','W','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TREEVIEW [] = {'T','R','E','E','V','I','E','W',0};
+#endif
+
+enum TREEVIEWPARTS {
+    TVP_TREEITEM = 1,
+    TVP_GLYPH = 2,
+    TVP_BRANCH = 3,
+    TVP_HOTGLYPH = 4,
+};
+
+#define TREEVIEWSTYLEPARTS TREEVIEWPARTS;
+
+enum TREEITEMSTATES {
+    TREIS_NORMAL = 1,
+    TREIS_HOT = 2,
+    TREIS_SELECTED = 3,
+    TREIS_DISABLED = 4,
+    TREIS_SELECTEDNOTFOCUS = 5,
+    TREIS_HOTSELECTED = 6,
+};
+
+enum GLYPHSTATES {
+    GLPS_CLOSED = 1,
+    GLPS_OPENED = 2,
+};
+
+enum HOTGLYPHSTATES {
+    HGLPS_CLOSED = 1,
+    HGLPS_OPENED = 2,
+};
+
+/* WINDOWSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_WINDOWSTYLE (const WCHAR []){'W','I','N','D','O','W','S','T','Y','L','E',0}
+#define VSCLASS_WINDOW (const WCHAR []){'W','I','N','D','O','W',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_WINDOWSTYLE L"WINDOWSTYLE"
+#define VSCLASS_WINDOW L"WINDOW"
+#else
+static const WCHAR VSCLASS_WINDOWSTYLE [] = {'W','I','N','D','O','W','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_WINDOW [] = {'W','I','N','D','O','W',0};
+#endif
+
+enum WINDOWPARTS {
+    WP_CAPTION = 1,
+    WP_SMALLCAPTION = 2,
+    WP_MINCAPTION = 3,
+    WP_SMALLMINCAPTION = 4,
+    WP_MAXCAPTION = 5,
+    WP_SMALLMAXCAPTION = 6,
+    WP_FRAMELEFT = 7,
+    WP_FRAMERIGHT = 8,
+    WP_FRAMEBOTTOM = 9,
+    WP_SMALLFRAMELEFT = 10,
+    WP_SMALLFRAMERIGHT = 11,
+    WP_SMALLFRAMEBOTTOM = 12,
+    WP_SYSBUTTON = 13,
+    WP_MDISYSBUTTON = 14,
+    WP_MINBUTTON = 15,
+    WP_MDIMINBUTTON = 16,
+    WP_MAXBUTTON = 17,
+    WP_CLOSEBUTTON = 18,
+    WP_SMALLCLOSEBUTTON = 19,
+    WP_MDICLOSEBUTTON = 20,
+    WP_RESTOREBUTTON = 21,
+    WP_MDIRESTOREBUTTON = 22,
+    WP_HELPBUTTON = 23,
+    WP_MDIHELPBUTTON = 24,
+    WP_HORZSCROLL = 25,
+    WP_HORZTHUMB = 26,
+    WP_VERTSCROLL = 27,
+    WP_VERTTHUMB = 28,
+    WP_DIALOG = 29,
+    WP_CAPTIONSIZINGTEMPLATE = 30,
+    WP_SMALLCAPTIONSIZINGTEMPLATE = 31,
+    WP_FRAMELEFTSIZINGTEMPLATE = 32,
+    WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33,
+    WP_FRAMERIGHTSIZINGTEMPLATE = 34,
+    WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35,
+    WP_FRAMEBOTTOMSIZINGTEMPLATE = 36,
+    WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37,
+    WP_FRAME = 38,
+};
+
+#define WINDOWSTYLEPARTS WINDOWPARTS;
+
+enum FRAMESTATES {
+    FS_ACTIVE = 1,
+    FS_INACTIVE = 2,
+};
+
+enum CAPTIONSTATES {
+    CS_ACTIVE = 1,
+    CS_INACTIVE = 2,
+    CS_DISABLED = 3,
+};
+
+enum MAXCAPTIONSTATES {
+    MXCS_ACTIVE = 1,
+    MXCS_INACTIVE = 2,
+    MXCS_DISABLED = 3,
+};
+
+enum MINCAPTIONSTATES {
+    MNCS_ACTIVE = 1,
+    MNCS_INACTIVE = 2,
+    MNCS_DISABLED = 3,
+};
+
+enum HORZSCROLLSTATES {
+    HSS_NORMAL = 1,
+    HSS_HOT = 2,
+    HSS_PUSHED = 3,
+    HSS_DISABLED = 4,
+};
+
+enum HORZTHUMBSTATES {
+    HTS_NORMAL = 1,
+    HTS_HOT = 2,
+    HTS_PUSHED = 3,
+    HTS_DISABLED = 4,
+};
+
+enum VERTSCROLLSTATES {
+    VSS_NORMAL = 1,
+    VSS_HOT = 2,
+    VSS_PUSHED = 3,
+    VSS_DISABLED = 4,
+};
+
+enum VERTTHUMBSTATES {
+    VTS_NORMAL = 1,
+    VTS_HOT = 2,
+    VTS_PUSHED = 3,
+    VTS_DISABLED = 4,
+};
+
+enum SYSBUTTONSTATES {
+    SBS_NORMAL = 1,
+    SBS_HOT = 2,
+    SBS_PUSHED = 3,
+    SBS_DISABLED = 4,
+};
+
+enum MINBUTTONSTATES {
+    MINBS_NORMAL = 1,
+    MINBS_HOT = 2,
+    MINBS_PUSHED = 3,
+    MINBS_DISABLED = 4,
+};
+
+enum RESTOREBUTTONSTATES {
+    RBS_NORMAL = 1,
+    RBS_HOT = 2,
+    RBS_PUSHED = 3,
+    RBS_DISABLED = 4,
+};
+
+enum HELPBUTTONSTATES {
+    HBS_NORMAL = 1,
+    HBS_HOT = 2,
+    HBS_PUSHED = 3,
+    HBS_DISABLED = 4,
+};
+
+enum CLOSEBUTTONSTATES {
+    CBS_NORMAL = 1,
+    CBS_HOT = 2,
+    CBS_PUSHED = 3,
+    CBS_DISABLED = 4,
+};
+
+#endif /* __VSSTYLE_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h
new file mode 100644
index 0000000..a76a609
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h
@@ -0,0 +1,687 @@
+/*
+ * Copyright (C) 2011 Piotr Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __VSSYM32_H__
+#define __VSSYM32_H__
+
+#include "vsstyle.h"
+
+
+enum BGTYPE {
+    BT_IMAGEFILE = 0,
+    BT_BORDERFILL = 1,
+    BT_NONE = 2,
+};
+
+enum IMAGELAYOUT {
+    IL_VERTICAL = 0,
+    IL_HORIZONTAL = 1,
+};
+
+enum BORDERTYPE {
+    BT_RECT = 0,
+    BT_ROUNDRECT = 1,
+    BT_ELLIPSE = 2,
+};
+
+enum FILLTYPE {
+    FT_SOLID = 0,
+    FT_VERTGRADIENT = 1,
+    FT_HORZGRADIENT = 2,
+    FT_RADIALGRADIENT = 3,
+    FT_TILEIMAGE = 4,
+};
+
+enum SIZINGTYPE {
+    ST_TRUESIZE = 0,
+    ST_STRETCH = 1,
+    ST_TILE = 2,
+};
+
+enum HALIGN {
+    HA_LEFT = 0,
+    HA_CENTER = 1,
+    HA_RIGHT = 2,
+};
+
+enum CONTENTALIGNMENT {
+    CA_LEFT = 0,
+    CA_CENTER = 1,
+    CA_RIGHT = 2,
+};
+
+enum VALIGN {
+    VA_TOP = 0,
+    VA_CENTER = 1,
+    VA_BOTTOM = 2,
+};
+
+enum OFFSETTYPE {
+    OT_TOPLEFT = 0,
+    OT_TOPRIGHT = 1,
+    OT_TOPMIDDLE = 2,
+    OT_BOTTOMLEFT = 3,
+    OT_BOTTOMRIGHT = 4,
+    OT_BOTTOMMIDDLE = 5,
+    OT_MIDDLELEFT = 6,
+    OT_MIDDLERIGHT = 7,
+    OT_LEFTOFCAPTION = 8,
+    OT_RIGHTOFCAPTION = 9,
+    OT_LEFTOFLASTBUTTON = 10,
+    OT_RIGHTOFLASTBUTTON = 11,
+    OT_ABOVELASTBUTTON = 12,
+    OT_BELOWLASTBUTTON = 13,
+};
+
+enum ICONEFFECT {
+    ICE_NONE = 0,
+    ICE_GLOW = 1,
+    ICE_SHADOW = 2,
+    ICE_PULSE = 3,
+    ICE_ALPHA = 4,
+};
+
+enum TEXTSHADOWTYPE {
+    TST_NONE = 0,
+    TST_SINGLE = 1,
+    TST_CONTINUOUS = 2,
+};
+
+enum GLYPHTYPE {
+    GT_NONE = 0,
+    GT_IMAGEGLYPH = 1,
+    GT_FONTGLYPH = 2,
+};
+
+enum IMAGESELECTTYPE {
+    IST_NONE = 0,
+    IST_SIZE = 1,
+    IST_DPI = 2,
+};
+
+enum TRUESIZESCALINGTYPE {
+    TSST_NONE = 0,
+    TSST_SIZE = 1,
+    TSST_DPI = 2,
+};
+
+enum GLYPHFONTSIZINGTYPE {
+    GFST_NONE = 0,
+    GFST_SIZE = 1,
+    GFST_DPI = 2,
+};
+
+#define TMT_RESERVEDLOW 0
+#define TMT_RESERVEDHIGH 7999
+
+#define TMT_DIBDATA 2
+#define TMT_GLYPHDIBDATA 8
+#define TMT_ENUM 200
+#define TMT_STRING 201
+#define TMT_INT 202
+#define TMT_BOOL 203
+#define TMT_COLOR 204
+#define TMT_MARGINS 205
+#define TMT_FILENAME 206
+#define TMT_SIZE 207
+#define TMT_POSITION 208
+#define TMT_RECT 209
+#define TMT_FONT 210
+#define TMT_INTLIST 211
+#define TMT_HBITMAP 212
+#define TMT_DISKSTREAM 213
+#define TMT_STREAM 214
+#define TMT_BITMAPREF 215
+#define TMT_COLORSCHEMES 401
+#define TMT_SIZES 402
+#define TMT_CHARSET 403
+#define TMT_NAME 600
+#define TMT_DISPLAYNAME 601
+#define TMT_TOOLTIP 602
+#define TMT_COMPANY 603
+#define TMT_AUTHOR 604
+#define TMT_COPYRIGHT 605
+#define TMT_URL 606
+#define TMT_VERSION 607
+#define TMT_DESCRIPTION 608
+#define TMT_FIRST_RCSTRING_NAME TMT_DISPLAYNAME
+#define TMT_LAST_RCSTRING_NAME TMT_DESCRIPTION
+#define TMT_CAPTIONFONT 801
+#define TMT_SMALLCAPTIONFONT 802
+#define TMT_MENUFONT 803
+#define TMT_STATUSFONT 804
+#define TMT_MSGBOXFONT 805
+#define TMT_ICONTITLEFONT 806
+#define TMT_HEADING1FONT 807
+#define TMT_HEADING2FONT 808
+#define TMT_BODYFONT 809
+#define TMT_FIRSTFONT TMT_CAPTIONFONT
+#define TMT_LASTFONT TMT_BODYFONT
+#define TMT_FLATMENUS 1001
+#define TMT_FIRSTBOOL TMT_FLATMENUS
+#define TMT_LASTBOOL TMT_FLATMENUS
+#define TMT_SIZINGBORDERWIDTH 1201
+#define TMT_SCROLLBARWIDTH 1202
+#define TMT_SCROLLBARHEIGHT 1203
+#define TMT_CAPTIONBARWIDTH 1204
+#define TMT_CAPTIONBARHEIGHT 1205
+#define TMT_SMCAPTIONBARWIDTH 1206
+#define TMT_SMCAPTIONBARHEIGHT 1207
+#define TMT_MENUBARWIDTH 1208
+#define TMT_MENUBARHEIGHT 1209
+#define TMT_PADDEDBORDERWIDTH 1210
+#define TMT_FIRSTSIZE TMT_SIZINGBORDERWIDTH
+#define TMT_LASTSIZE TMT_PADDEDBORDERWIDTH
+#define TMT_MINCOLORDEPTH 1301
+#define TMT_FIRSTINT TMT_MINCOLORDEPTH
+#define TMT_LASTINT TMT_MINCOLORDEPTH
+#define TMT_CSSNAME 1401
+#define TMT_XMLNAME 1402
+#define TMT_LASTUPDATED 1403
+#define TMT_ALIAS 1404
+#define TMT_FIRSTSTRING TMT_CSSNAME
+#define TMT_LASTSTRING TMT_ALIAS
+#define TMT_SCROLLBAR 1601
+#define TMT_BACKGROUND 1602
+#define TMT_ACTIVECAPTION 1603
+#define TMT_INACTIVECAPTION 1604
+#define TMT_MENU 1605
+#define TMT_WINDOW 1606
+#define TMT_WINDOWFRAME 1607
+#define TMT_MENUTEXT 1608
+#define TMT_WINDOWTEXT 1609
+#define TMT_CAPTIONTEXT 1610
+#define TMT_ACTIVEBORDER 1611
+#define TMT_INACTIVEBORDER 1612
+#define TMT_APPWORKSPACE 1613
+#define TMT_HIGHLIGHT 1614
+#define TMT_HIGHLIGHTTEXT 1615
+#define TMT_BTNFACE 1616
+#define TMT_BTNSHADOW 1617
+#define TMT_GRAYTEXT 1618
+#define TMT_BTNTEXT 1619
+#define TMT_INACTIVECAPTIONTEXT 1620
+#define TMT_BTNHIGHLIGHT 1621
+#define TMT_DKSHADOW3D 1622
+#define TMT_LIGHT3D 1623
+#define TMT_INFOTEXT 1624
+#define TMT_INFOBK 1625
+#define TMT_BUTTONALTERNATEFACE 1626
+#define TMT_HOTTRACKING 1627
+#define TMT_GRADIENTACTIVECAPTION 1628
+#define TMT_GRADIENTINACTIVECAPTION 1629
+#define TMT_MENUHILIGHT 1630
+#define TMT_MENUBAR 1631
+#define TMT_FIRSTCOLOR TMT_SCROLLBAR
+#define TMT_LASTCOLOR TMT_MENUBAR
+#define TMT_FROMHUE1 1801
+#define TMT_FROMHUE2 1802
+#define TMT_FROMHUE3 1803
+#define TMT_FROMHUE4 1804
+#define TMT_FROMHUE5 1805
+#define TMT_TOHUE1 1806
+#define TMT_TOHUE2 1807
+#define TMT_TOHUE3 1808
+#define TMT_TOHUE4 1809
+#define TMT_TOHUE5 1810
+#define TMT_FROMCOLOR1 2001
+#define TMT_FROMCOLOR2 2002
+#define TMT_FROMCOLOR3 2003
+#define TMT_FROMCOLOR4 2004
+#define TMT_FROMCOLOR5 2005
+#define TMT_TOCOLOR1 2006
+#define TMT_TOCOLOR2 2007
+#define TMT_TOCOLOR3 2008
+#define TMT_TOCOLOR4 2009
+#define TMT_TOCOLOR5 2010
+#define TMT_TRANSPARENT 2201
+#define TMT_AUTOSIZE 2202
+#define TMT_BORDERONLY 2203
+#define TMT_COMPOSITED 2204
+#define TMT_BGFILL 2205
+#define TMT_GLYPHTRANSPARENT 2206
+#define TMT_GLYPHONLY 2207
+#define TMT_ALWAYSSHOWSIZINGBAR 2208
+#define TMT_MIRRORIMAGE 2209
+#define TMT_UNIFORMSIZING 2210
+#define TMT_INTEGRALSIZING 2211
+#define TMT_SOURCEGROW 2212
+#define TMT_SOURCESHRINK 2213
+#define TMT_DRAWBORDERS 2214
+#define TMT_NOETCHEDEFFECT 2215
+#define TMT_TEXTAPPLYOVERLAY 2216
+#define TMT_TEXTGLOW 2217
+#define TMT_TEXTITALIC 2218
+#define TMT_COMPOSITEDOPAQUE 2219
+#define TMT_LOCALIZEDMIRRORIMAGE 2220
+#define TMT_IMAGECOUNT 2401
+#define TMT_ALPHALEVEL 2402
+#define TMT_BORDERSIZE 2403
+#define TMT_ROUNDCORNERWIDTH 2404
+#define TMT_ROUNDCORNERHEIGHT 2405
+#define TMT_GRADIENTRATIO1 2406
+#define TMT_GRADIENTRATIO2 2407
+#define TMT_GRADIENTRATIO3 2408
+#define TMT_GRADIENTRATIO4 2409
+#define TMT_GRADIENTRATIO5 2410
+#define TMT_PROGRESSCHUNKSIZE 2411
+#define TMT_PROGRESSSPACESIZE 2412
+#define TMT_SATURATION 2413
+#define TMT_TEXTBORDERSIZE 2414
+#define TMT_ALPHATHRESHOLD 2415
+#define TMT_WIDTH 2416
+#define TMT_HEIGHT 2417
+#define TMT_GLYPHINDEX 2418
+#define TMT_TRUESIZESTRETCHMARK 2419
+#define TMT_MINDPI1 2420
+#define TMT_MINDPI2 2421
+#define TMT_MINDPI3 2422
+#define TMT_MINDPI4 2423
+#define TMT_MINDPI5 2424
+#define TMT_TEXTGLOWSIZE 2425
+#define TMT_FRAMESPERSECOND 2426
+#define TMT_PIXELSPERFRAME 2427
+#define TMT_ANIMATIONDELAY 2428
+#define TMT_GLOWINTENSITY 2429
+#define TMT_OPACITY 2430
+#define TMT_COLORIZATIONCOLOR 2431
+#define TMT_COLORIZATIONOPACITY 2432
+#define TMT_GLYPHFONT 2601
+#define TMT_IMAGEFILE 3001
+#define TMT_IMAGEFILE1 3002
+#define TMT_IMAGEFILE2 3003
+#define TMT_IMAGEFILE3 3004
+#define TMT_IMAGEFILE4 3005
+#define TMT_IMAGEFILE5 3006
+#define TMT_GLYPHIMAGEFILE 3008
+#define TMT_TEXT 3201
+#define TMT_CLASSICVALUE 3202
+#define TMT_OFFSET 3401
+#define TMT_TEXTSHADOWOFFSET 3402
+#define TMT_MINSIZE 3403
+#define TMT_MINSIZE1 3404
+#define TMT_MINSIZE2 3405
+#define TMT_MINSIZE3 3406
+#define TMT_MINSIZE4 3407
+#define TMT_MINSIZE5 3408
+#define TMT_NORMALSIZE 3409
+#define TMT_SIZINGMARGINS 3601
+#define TMT_CONTENTMARGINS 3602
+#define TMT_CAPTIONMARGINS 3603
+#define TMT_BORDERCOLOR 3801
+#define TMT_FILLCOLOR 3802
+#define TMT_TEXTCOLOR 3803
+#define TMT_EDGELIGHTCOLOR 3804
+#define TMT_EDGEHIGHLIGHTCOLOR 3805
+#define TMT_EDGESHADOWCOLOR 3806
+#define TMT_EDGEDKSHADOWCOLOR 3807
+#define TMT_EDGEFILLCOLOR 3808
+#define TMT_TRANSPARENTCOLOR 3809
+#define TMT_GRADIENTCOLOR1 3810
+#define TMT_GRADIENTCOLOR2 3811
+#define TMT_GRADIENTCOLOR3 3812
+#define TMT_GRADIENTCOLOR4 3813
+#define TMT_GRADIENTCOLOR5 3814
+#define TMT_SHADOWCOLOR 3815
+#define TMT_GLOWCOLOR 3816
+#define TMT_TEXTBORDERCOLOR 3817
+#define TMT_TEXTSHADOWCOLOR 3818
+#define TMT_GLYPHTEXTCOLOR 3819
+#define TMT_GLYPHTRANSPARENTCOLOR 3820
+#define TMT_FILLCOLORHINT 3821
+#define TMT_BORDERCOLORHINT 3822
+#define TMT_ACCENTCOLORHINT 3823
+#define TMT_TEXTCOLORHINT 3824
+#define TMT_HEADING1TEXTCOLOR 3825
+#define TMT_HEADING2TEXTCOLOR 3826
+#define TMT_BODYTEXTCOLOR 3827
+#define TMT_BGTYPE 4001
+#define TMT_BORDERTYPE 4002
+#define TMT_FILLTYPE 4003
+#define TMT_SIZINGTYPE 4004
+#define TMT_HALIGN 4005
+#define TMT_CONTENTALIGNMENT 4006
+#define TMT_VALIGN 4007
+#define TMT_OFFSETTYPE 4008
+#define TMT_ICONEFFECT 4009
+#define TMT_TEXTSHADOWTYPE 4010
+#define TMT_IMAGELAYOUT 4011
+#define TMT_GLYPHTYPE 4012
+#define TMT_IMAGESELECTTYPE 4013
+#define TMT_GLYPHFONTSIZINGTYPE 4014
+#define TMT_TRUESIZESCALINGTYPE 4015
+#define TMT_USERPICTURE 5001
+#define TMT_DEFAULTPANESIZE 5002
+#define TMT_BLENDCOLOR 5003
+#define TMT_CUSTOMSPLITRECT 5004
+#define TMT_ANIMATIONBUTTONRECT 5005
+#define TMT_ANIMATIONDURATION 5006
+#define TMT_TRANSITIONDURATIONS 6000
+#define TMT_SCALEDBACKGROUND 7001
+#define TMT_ATLASIMAGE 8000
+#define TMT_ATLASINPUTIMAGE 8001
+#define TMT_ATLASRECT 8002
+
+/* LINK class */
+#if defined(__GNUC__)
+#define VSCLASS_LINK (const WCHAR []){'L','I','N','K',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_LINK L"LINK"
+#else
+static const WCHAR VSCLASS_LINK[] = {'L','I','N','K',0};
+#endif
+
+enum LINKPARTS {
+    LP_HYPERLINK = 1,
+};
+
+enum HYPERLINKSTATES {
+    HLS_NORMALTEXT = 1,
+    HLS_LINKTEXT = 2,
+};
+
+/* EMPTYMARKUP class */
+#if defined(__GNUC__)
+#define VSCLASS_EMPTYMARKUP (const WCHAR []){'E','M','P','T','Y','M','A','R','K','U','P',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_EMPTYMARKUP L"EMPTYMARKUP"
+#else
+static const WCHAR VSCLASS_EMPTYMARKUP[] = {'E','M','P','T','Y','M','A','R','K','U','P',0};
+#endif
+
+enum EMPTYMARKUPPARTS {
+    EMP_MARKUPTEXT = 1,
+};
+
+enum MARKUPTEXTSTATES {
+    EMT_NORMALTEXT = 1,
+    EMT_LINKTEXT = 2,
+};
+
+/* STATIC class */
+#if defined(__GNUC__)
+#define VSCLASS_STATIC (const WCHAR []){'S','T','A','T','I','C',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_STATIC L"STATIC"
+#else
+static const WCHAR VSCLASS_STATIC[] = {'S','T','A','T','I','C',0};
+#endif
+
+enum STATICPARTS {
+    STAT_TEXT = 1,
+};
+
+/* PAGE class */
+#if defined(__GNUC__)
+#define VSCLASS_PAGE (const WCHAR []){'P','A','G','E',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_PAGE L"PAGE"
+#else
+static const WCHAR VSCLASS_PAGE[] = {'P','A','G','E',0};
+#endif
+
+enum PAGEPARTS {
+    PGRP_UP = 1,
+    PGRP_DOWN = 2,
+    PGRP_UPHORZ = 3,
+    PGRP_DOWNHORZ = 4,
+};
+
+/* MONTHCAL class */
+#if defined(__GNUC__)
+#define VSCLASS_MONTHCAL (const WCHAR []){'M','O','N','T','H','C','A','L',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_MONTHCAL L"MONTHCAL"
+#else
+static const WCHAR VSCLASS_MONTHCAL[] = {'M','O','N','T','H','C','A','L',0};
+#endif
+
+enum MONTHCALPARTS {
+    MC_BACKGROUND = 1,
+    MC_BORDERS = 2,
+    MC_GRIDBACKGROUND = 3,
+    MC_COLHEADERSPLITTER = 4,
+    MC_GRIDCELLBACKGROUND = 5,
+    MC_GRIDCELL = 6,
+    MC_GRIDCELLUPPER = 7,
+    MC_TRAILINGGRIDCELL = 8,
+    MC_TRAILINGGRIDCELLUPPER = 9,
+    MC_NAVNEXT = 10,
+    MC_NAVPREV = 11,
+};
+
+enum GRIDCELLBACKGROUNDSTATES {
+    MCGCB_SELECTED = 1,
+    MCGCB_HOT = 2,
+    MCGCB_SELECTEDHOT = 3,
+    MCGCB_SELECTEDNOTFOCUSED = 4,
+    MCGCB_TODAY = 5,
+};
+
+enum GRIDCELLSTATES {
+    MCGC_HOT = 1,
+    MCGC_HASSTATE = 2,
+    MCGC_HASSTATEHOT = 3,
+    MCGC_TODAY = 4,
+};
+
+enum GRIDCELLUPPERSTATES {
+    MCGCU_HOT = 1,
+    MCGCU_HASSTATE = 2,
+    MCGCU_HASSTATEHOT = 3,
+};
+
+enum TRAILINGGRIDCELLSTATES {
+    MCTGC_HOT = 1,
+    MCTGC_HASSTATE = 2,
+    MCTGC_HASSTATEHOT = 3,
+    MCTGC_TODAY = 4,
+};
+
+enum TRAILINGGRIDCELLUPPERSTATES {
+    MCTGCU_HOT = 1,
+    MCTGCU_HASSTATE = 2,
+    MCTGCU_HASSTATEHOT = 3,
+};
+
+enum NAVNEXTSTATES {
+    MCNN_NORMAL = 1,
+    MCNN_HOT = 2,
+    MCNN_PRESSED = 3,
+    MCNN_DISABLED = 4,
+};
+
+enum NAVPREVSTATES {
+    MCNP_NORMAL = 1,
+    MCNP_HOT = 2,
+    MCNP_PRESSED = 3,
+    MCNP_DISABLED = 4,
+};
+
+/* CLOCK class */
+#if defined(__GNUC__)
+#define VSCLASS_CLOCK (const WCHAR []){'C','L','O','C','K',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_CLOCK L"CLOCK"
+#else
+static const WCHAR VSCLASS_CLOCK[] = {'C','L','O','C','K',0};
+#endif
+
+enum CLOCKPARTS {
+    CLP_TIME = 1,
+};
+
+enum CLOCKSTATES {
+    CLS_NORMAL = 1,
+};
+
+/* TRAYNOTIFY class */
+#if defined(__GNUC__)
+#define VSCLASS_TRAYNOTIFY (const WCHAR []){'T','R','A','Y','N','O','T','I','F','Y',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TRAYNOTIFY L"TRAYNOTIFY"
+#else
+static const WCHAR VSCLASS_TRAYNOTIFY[] = {'T','R','A','Y','N','O','T','I','F','Y',0};
+#endif
+
+enum TRAYNOTIFYPARTS {
+    TNP_BACKGROUND = 1,
+    TNP_ANIMBACKGROUND = 2,
+};
+
+/* TASKBAR class */
+#if defined(__GNUC__)
+#define VSCLASS_TASKBAR (const WCHAR []){'T','A','S','K','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TASKBAR L"TASKBAR"
+#else
+static const WCHAR VSCLASS_TASKBAR[] = {'T','A','S','K','B','A','R',0};
+#endif
+
+enum TASKBARPARTS {
+    TBP_BACKGROUNDBOTTOM = 1,
+    TBP_BACKGROUNDRIGHT = 2,
+    TBP_BACKGROUNDTOP = 3,
+    TBP_BACKGROUNDLEFT = 4,
+    TBP_SIZINGBARBOTTOM = 5,
+    TBP_SIZINGBARRIGHT = 6,
+    TBP_SIZINGBARTOP = 7,
+    TBP_SIZINGBARLEFT = 8,
+};
+
+/* TASKBAND class */
+#if defined(__GNUC__)
+#define VSCLASS_TASKBAND (const WCHAR []){'T','A','S','K','B','A','N','D',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TASKBAND L"TASKBAND"
+#else
+static const WCHAR VSCLASS_TASKBAND[] = {'T','A','S','K','B','A','N','D',0};
+#endif
+
+enum TASKBANDPARTS {
+    TDP_GROUPCOUNT = 1,
+    TDP_FLASHBUTTON = 2,
+    TDP_FLASHBUTTONGROUPMENU = 3,
+};
+
+/* STARTPANEL class */
+#if defined(__GNUC__)
+#define VSCLASS_STARTPANEL (const WCHAR []){'S','T','A','R','T','P','A','N','E','L',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_STARTPANEL L"STARTPANEL"
+#else
+static const WCHAR VSCLASS_STARTPANEL[] = {'S','T','A','R','T','P','A','N','E','L',0};
+#endif
+
+enum STARTPANELPARTS {
+    SPP_USERPANE = 1,
+    SPP_MOREPROGRAMS = 2,
+    SPP_MOREPROGRAMSARROW = 3,
+    SPP_PROGLIST = 4,
+    SPP_PROGLISTSEPARATOR = 5,
+    SPP_PLACESLIST = 6,
+    SPP_PLACESLISTSEPARATOR = 7,
+    SPP_LOGOFF = 8,
+    SPP_LOGOFFBUTTONS = 9,
+    SPP_USERPICTURE = 10,
+    SPP_PREVIEW = 11,
+    SPP_MOREPROGRAMSTAB = 12,
+    SPP_NSCHOST = 13,
+    SPP_SOFTWAREEXPLORER = 14,
+    SPP_OPENBOX = 15,
+    SPP_SEARCHVIEW = 16,
+    SPP_MOREPROGRAMSARROWBACK = 17,
+    SPP_TOPMATCH = 18,
+    SPP_LOGOFFSPLITBUTTONDROPDOWN = 19,
+};
+
+enum MOREPROGRAMSTABSTATES {
+    SPMPT_NORMAL = 1,
+    SPMPT_HOT = 2,
+    SPMPT_SELECTED = 3,
+    SPMPT_DISABLED = 4,
+    SPMPT_FOCUSED = 5,
+};
+
+enum SOFTWAREEXPLORERSTATES {
+    SPSE_NORMAL = 1,
+    SPSE_HOT = 2,
+    SPSE_SELECTED = 3,
+    SPSE_DISABLED = 4,
+    SPSE_FOCUSED = 5,
+};
+
+enum OPENBOXSTATES {
+    SPOB_NORMAL = 1,
+    SPOB_HOT = 2,
+    SPOB_SELECTED = 3,
+    SPOB_DISABLED = 4,
+    SPOB_FOCUSED = 5,
+};
+
+enum MOREPROGRAMSARROWSTATES {
+    SPS_NORMAL = 1,
+    SPS_HOT = 2,
+    SPS_PRESSED = 3,
+};
+
+enum MOREPROGRAMSARROWBACKSTATES {
+    SPSB_NORMAL = 1,
+    SPSB_HOT = 2,
+    SPSB_PRESSED = 3,
+};
+
+enum LOGOFFBUTTONSSTATES {
+    SPLS_NORMAL = 1,
+    SPLS_HOT = 2,
+    SPLS_PRESSED = 3,
+};
+
+/* MENUBAND class */
+#if defined(__GNUC__)
+#define VSCLASS_MENUBAND (const WCHAR []){'M','E','N','U','B','A','N','D',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_MENUBAND L"MENUBAND"
+#else
+static const WCHAR VSCLASS_MENUBAND[] = {'M','E','N','U','B','A','N','D',0};
+#endif
+
+enum MENUBANDPARTS {
+    MDP_NEWAPPBUTTON = 1,
+    MDP_SEPERATOR = 2,
+};
+
+enum MENUBANDSTATES {
+    MDS_NORMAL = 1,
+    MDS_HOT = 2,
+    MDS_PRESSED = 3,
+    MDS_DISABLED = 4,
+    MDS_CHECKED = 5,
+    MDS_HOTCHECKED = 6,
+};
+
+#endif /* __VSSYM32_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl
new file mode 100644
index 0000000..2b50dd8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl
@@ -0,0 +1,671 @@
+/*
+ * Copyright 2009 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("DEFINE_GUID(CLSID_WbemLocator, 0x4590f811,0x1d3A,0x11d0,0x89,0x1f,0x00,0xaa,0x00,0x4b,0x2e,0x24);")
+cpp_quote("DEFINE_GUID(CLSID_WbemStatusCode, 0xeb87e1bd,0x3233,0x11d2,0xae,0xc9,0x00,0xc0,0x4f,0xb6,0x88,0x20);")
+
+import "oaidl.idl";
+import "objidl.idl";
+
+interface IWbemContext;
+interface IWbemServices;
+interface IWbemStatusCodeText;
+interface IWbemCallResult;
+interface IWbemObjectSink;
+interface IWbemClassObject;
+interface IEnumWbemClassObject;
+interface IWbemQualifierSet;
+
+typedef [v1_enum] enum tag_WBEMSTATUS
+{
+    WBEM_NO_ERROR                           = 0,
+    WBEM_S_NO_ERROR                         = 0,
+    WBEM_S_SAME                             = 0,
+    WBEM_S_FALSE                            = 1,
+    WBEM_S_ALREADY_EXISTS                   = 0x40001,
+    WBEM_S_RESET_TO_DEFAULT                 = 0x40002,
+    WBEM_S_DIFFERENT                        = 0x40003,
+    WBEM_S_TIMEDOUT                         = 0x40004,
+    WBEM_S_NO_MORE_DATA                     = 0x40005,
+    WBEM_S_OPERATION_CANCELLED              = 0x40006,
+    WBEM_S_PENDING                          = 0x40007,
+    WBEM_S_DUPLICATE_OBJECTS                = 0x40008,
+    WBEM_S_ACCESS_DENIED                    = 0x40009,
+    WBEM_S_PARTIAL_RESULTS                  = 0x40010,
+    WBEM_S_SOURCE_NOT_AVAILABLE             = 0x40017,
+    WBEM_E_FAILED                           = 0x80041001,
+    WBEM_E_NOT_FOUND                        = 0x80041002,
+    WBEM_E_ACCESS_DENIED                    = 0x80041003,
+    WBEM_E_PROVIDER_FAILURE                 = 0x80041004,
+    WBEM_E_TYPE_MISMATCH                    = 0x80041005,
+    WBEM_E_OUT_OF_MEMORY                    = 0x80041006,
+    WBEM_E_INVALID_CONTEXT                  = 0x80041007,
+    WBEM_E_INVALID_PARAMETER                = 0x80041008,
+    WBEM_E_NOT_AVAILABLE                    = 0x80041009,
+    WBEM_E_CRITICAL_ERROR                   = 0x8004100a,
+    WBEM_E_INVALID_STREAM                   = 0x8004100b,
+    WBEM_E_NOT_SUPPORTED                    = 0x8004100c,
+    WBEM_E_INVALID_SUPERCLASS               = 0x8004100d,
+    WBEM_E_INVALID_NAMESPACE                = 0x8004100e,
+    WBEM_E_INVALID_OBJECT                   = 0x8004100f,
+    WBEM_E_INVALID_CLASS                    = 0x80041010,
+    WBEM_E_PROVIDER_NOT_FOUND               = 0x80041011,
+    WBEM_E_INVALID_PROVIDER_REGISTRATION    = 0x80041012,
+    WBEM_E_PROVIDER_LOAD_FAILURE            = 0x80041013,
+    WBEM_E_INITIALIZATION_FAILURE           = 0x80041014,
+    WBEM_E_TRANSPORT_FAILURE                = 0x80041015,
+    WBEM_E_INVALID_OPERATION                = 0x80041016,
+    WBEM_E_INVALID_QUERY                    = 0x80041017,
+    WBEM_E_INVALID_QUERY_TYPE               = 0x80041018,
+    WBEM_E_ALREADY_EXISTS                   = 0x80041019,
+    WBEM_E_OVERRIDE_NOT_ALLOWED             = 0x8004101a,
+    WBEM_E_PROPAGATED_QUALIFIER             = 0x8004101b,
+    WBEM_E_PROPAGATED_PROPERTY              = 0x8004101c,
+    WBEM_E_UNEXPECTED                       = 0x8004101d,
+    WBEM_E_ILLEGAL_OPERATION                = 0x8004101e,
+    WBEM_E_CANNOT_BE_KEY                    = 0x8004101f,
+    WBEM_E_INCOMPLETE_CLASS                 = 0x80041020,
+    WBEM_E_INVALID_SYNTAX                   = 0x80041021,
+    WBEM_E_NONDECORATED_OBJECT              = 0x80041022,
+    WBEM_E_READ_ONLY                        = 0x80041023,
+    WBEM_E_PROVIDER_NOT_CAPABLE             = 0x80041024,
+    WBEM_E_CLASS_HAS_CHILDREN               = 0x80041025,
+    WBEM_E_CLASS_HAS_INSTANCES              = 0x80041026,
+    WBEM_E_QUERY_NOT_IMPLEMENTED            = 0x80041027,
+    WBEM_E_ILLEGAL_NULL                     = 0x80041028,
+    WBEM_E_INVALID_QUALIFIER_TYPE           = 0x80041029,
+    WBEM_E_INVALID_PROPERTY_TYPE            = 0x8004102a,
+    WBEM_E_VALUE_OUT_OF_RANGE               = 0x8004102b,
+    WBEM_E_CANNOT_BE_SINGLETON              = 0x8004102c,
+    WBEM_E_INVALID_CIM_TYPE                 = 0x8004102d,
+    WBEM_E_INVALID_METHOD                   = 0x8004102e,
+    WBEM_E_INVALID_METHOD_PARAMETERS        = 0x8004102f,
+    WBEM_E_SYSTEM_PROPERTY                  = 0x80041030,
+    WBEM_E_INVALID_PROPERTY                 = 0x80041031,
+    WBEM_E_CALL_CANCELLED                   = 0x80041032,
+    WBEM_E_SHUTTING_DOWN                    = 0x80041033,
+    WBEM_E_PROPAGATED_METHOD                = 0x80041034,
+    WBEM_E_UNSUPPORTED_PARAMETER            = 0x80041035,
+    WBEM_E_MISSING_PARAMETER_ID             = 0x80041036,
+    WBEM_E_INVALID_PARAMETER_ID             = 0x80041037,
+    WBEM_E_NONCONSECUTIVE_PARAMETER_IDS     = 0x80041038,
+    WBEM_E_PARAMETER_ID_ON_RETVAL           = 0x80041039,
+    WBEM_E_INVALID_OBJECT_PATH              = 0x8004103a,
+    WBEM_E_OUT_OF_DISK_SPACE                = 0x8004103b,
+    WBEM_E_BUFFER_TOO_SMALL                 = 0x8004103c,
+    WBEM_E_UNSUPPORTED_PUT_EXTENSION        = 0x8004103d,
+    WBEM_E_UNKNOWN_OBJECT_TYPE              = 0x8004103e,
+    WBEM_E_UNKNOWN_PACKET_TYPE              = 0x8004103f,
+    WBEM_E_MARSHAL_VERSION_MISMATCH         = 0x80041040,
+    WBEM_E_MARSHAL_INVALID_SIGNATURE        = 0x80041041,
+    WBEM_E_INVALID_QUALIFIER                = 0x80041042,
+    WBEM_E_INVALID_DUPLICATE_PARAMETER      = 0x80041043,
+    WBEM_E_TOO_MUCH_DATA                    = 0x80041044,
+    WBEM_E_SERVER_TOO_BUSY                  = 0x80041045,
+    WBEM_E_INVALID_FLAVOR                   = 0x80041046,
+    WBEM_E_CIRCULAR_REFERENCE               = 0x80041047,
+    WBEM_E_UNSUPPORTED_CLASS_UPDATE         = 0x80041048,
+    WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE    = 0x80041049,
+    WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE  = 0x80041050,
+    WBEM_E_TOO_MANY_PROPERTIES              = 0x80041051,
+    WBEM_E_UPDATE_TYPE_MISMATCH             = 0x80041052,
+    WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED      = 0x80041053,
+    WBEM_E_UPDATE_PROPAGATED_METHOD         = 0x80041054,
+    WBEM_E_METHOD_NOT_IMPLEMENTED           = 0x80041055,
+    WBEM_E_METHOD_DISABLED                  = 0x80041056,
+    WBEM_E_REFRESHER_BUSY                   = 0x80041057,
+    WBEM_E_UNPARSABLE_QUERY                 = 0x80041058,
+    WBEM_E_NOT_EVENT_CLASS                  = 0x80041059,
+    WBEM_E_MISSING_GROUP_WITHIN             = 0x8004105a,
+    WBEM_E_MISSING_AGGREGATION_LIST         = 0x8004105b,
+    WBEM_E_PROPERTY_NOT_AN_OBJECT           = 0x8004105c,
+    WBEM_E_AGGREGATING_BY_OBJECT            = 0x8004105d,
+    WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY   = 0x8004105f,
+    WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING   = 0x80041060,
+    WBEM_E_QUEUE_OVERFLOW                   = 0x80041061,
+    WBEM_E_PRIVILEGE_NOT_HELD               = 0x80041062,
+    WBEM_E_INVALID_OPERATOR                 = 0x80041063,
+    WBEM_E_LOCAL_CREDENTIALS                = 0x80041064,
+    WBEM_E_CANNOT_BE_ABSTRACT               = 0x80041065,
+    WBEM_E_AMENDED_OBJECT                   = 0x80041066,
+    WBEM_E_CLIENT_TOO_SLOW                  = 0x80041067,
+    WBEM_E_NULL_SECURITY_DESCRIPTOR         = 0x80041068,
+    WBEM_E_TIMED_OUT                        = 0x80041069,
+    WBEM_E_INVALID_ASSOCIATION              = 0x8004106a,
+    WBEM_E_AMBIGUOUS_OPERATION              = 0x8004106b,
+    WBEM_E_QUOTA_VIOLATION                  = 0x8004106c,
+    WBEM_E_RESERVED_001                     = 0x8004106d,
+    WBEM_E_RESERVED_002                     = 0x8004106e,
+    WBEM_E_UNSUPPORTED_LOCALE               = 0x8004106f,
+    WBEM_E_HANDLE_OUT_OF_DATE               = 0x80041070,
+    WBEM_E_CONNECTION_FAILED                = 0x80041071,
+    WBEM_E_INVALID_HANDLE_REQUEST           = 0x80041072,
+    WBEM_E_PROPERTY_NAME_TOO_WIDE           = 0x80041073,
+    WBEM_E_CLASS_NAME_TOO_WIDE              = 0x80041074,
+    WBEM_E_METHOD_NAME_TOO_WIDE             = 0x80041075,
+    WBEM_E_QUALIFIER_NAME_TOO_WIDE          = 0x80041076,
+    WBEM_E_RERUN_COMMAND                    = 0x80041077,
+    WBEM_E_DATABASE_VER_MISMATCH            = 0x80041078,
+    WBEM_E_VETO_DELETE                      = 0x80041079,
+    WBEM_E_VETO_PUT                         = 0x8004107a,
+    WBEM_E_INVALID_LOCALE                   = 0x80041080,
+    WBEM_E_PROVIDER_SUSPENDED               = 0x80041081,
+    WBEM_E_SYNCHRONIZATION_REQUIRED         = 0x80041082,
+    WBEM_E_NO_SCHEMA                        = 0x80041083,
+    WBEM_E_PROVIDER_ALREADY_REGISTERED      = 0x80041084,
+    WBEM_E_PROVIDER_NOT_REGISTERED          = 0x80041085,
+    WBEM_E_FATAL_TRANSPORT_ERROR            = 0x80041086,
+    WBEM_E_ENCRYPTED_CONNECTION_REQUIRED    = 0x80041087,
+    WBEM_E_PROVIDER_TIMED_OUT               = 0x80041088,
+    WBEM_E_NO_KEY                           = 0x80041089,
+    WBEM_E_PROVIDER_DISABLED                = 0x8004108a
+} WBEMSTATUS;
+
+typedef [v1_enum] enum tag_WBEM_STATUS_TYPE
+{
+    WBEM_STATUS_COMPLETE     = 0,
+    WBEM_STATUS_REQUIREMENTS = 1,
+    WBEM_STATUS_PROGRESS     = 2
+} WBEM_STATUS_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE
+{
+    WBEM_NO_WAIT  = 0,
+    WBEM_INFINITE = 0xffffffff
+} WBEM_TIMEOUT_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_CONDITION_FLAG_TYPE
+{
+    WBEM_FLAG_ALWAYS                    = 0,
+    WBEM_FLAG_ONLY_IF_TRUE              = 0x1,
+    WBEM_FLAG_ONLY_IF_FALSE             = 0x2,
+    WBEM_FLAG_ONLY_IF_IDENTICAL         = 0x3,
+    WBEM_MASK_PRIMARY_CONDITION         = 0x3,
+    WBEM_FLAG_KEYS_ONLY                 = 0x4,
+    WBEM_FLAG_REFS_ONLY                 = 0x8,
+    WBEM_FLAG_LOCAL_ONLY                = 0x10,
+    WBEM_FLAG_PROPAGATED_ONLY           = 0x20,
+    WBEM_FLAG_SYSTEM_ONLY               = 0x30,
+    WBEM_FLAG_NONSYSTEM_ONLY            = 0x40,
+    WBEM_MASK_CONDITION_ORIGIN          = 0x70,
+    WBEM_FLAG_CLASS_OVERRIDES_ONLY      = 0x100,
+    WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200,
+    WBEM_MASK_CLASS_CONDITION           = 0x300
+} WBEM_CONDITION_FLAG_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_FLAVOR_TYPE
+{
+    WBEM_FLAVOR_DONT_PROPAGATE                  = 0,
+    WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE      = 0x1,
+    WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS = 0x2,
+    WBEM_FLAVOR_MASK_PROPAGATION                = 0xf,
+    WBEM_FLAVOR_OVERRIDABLE                     = 0,
+    WBEM_FLAVOR_NOT_OVERRIDABLE                 = 0x10,
+    WBEM_FLAVOR_MASK_PERMISSIONS                = 0x10,
+    WBEM_FLAVOR_ORIGIN_LOCAL                    = 0,
+    WBEM_FLAVOR_ORIGIN_PROPAGATED               = 0x20,
+    WBEM_FLAVOR_ORIGIN_SYSTEM                   = 0x40,
+    WBEM_FLAVOR_MASK_ORIGIN                     = 0x60,
+    WBEM_FLAVOR_NOT_AMENDED                     = 0,
+    WBEM_FLAVOR_AMENDED                         = 0x80,
+    WBEM_FLAVOR_MASK_AMENDED                    = 0x80
+} WBEM_FLAVOR_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_GENUS_TYPE
+{
+    WBEM_GENUS_CLASS = 1,
+    WBEM_GENUS_INSTANCE = 2
+} WBEM_GENUS_TYPE;
+
+typedef [v1_enum] enum tag_CIMTYPE_ENUMERATION
+{
+    CIM_ILLEGAL = 0xfff,
+    CIM_EMPTY   = 0,
+    CIM_SINT16  = 2,
+    CIM_SINT32  = 3,
+    CIM_REAL32  = 4,
+    CIM_REAL64  = 5,
+    CIM_STRING  = 8,
+    CIM_BOOLEAN = 11,
+    CIM_OBJECT  = 13,
+    CIM_SINT8   = 16,
+    CIM_UINT8   = 17,
+    CIM_UINT16  = 18,
+    CIM_UINT32  = 19,
+    CIM_SINT64  = 20,
+    CIM_UINT64  = 21,
+    CIM_DATETIME   = 101,
+    CIM_REFERENCE  = 102,
+    CIM_CHAR16     = 103,
+    CIM_FLAG_ARRAY = 0x2000
+} CIMTYPE_ENUMERATION;
+
+typedef long CIMTYPE;
+
+[
+    object,
+    restricted,
+    local,
+    uuid(dc12a687-737f-11cf-884d-00aa004b2e24),
+    pointer_default(unique)
+]
+interface IWbemLocator : IUnknown
+{
+    HRESULT ConnectServer(
+        [in] const BSTR strNetworkResource,
+        [in] const BSTR strUser,
+        [in] const BSTR strPassword,
+        [in] const BSTR strLocale,
+        [in] LONG lSecurityFlags,
+        [in] const BSTR strAuthority,
+        [in] IWbemContext *pCtx,
+        [out] IWbemServices **ppNamespace);
+};
+
+[
+    object,
+    local,
+    uuid(eb87e1bc-3233-11d2-aec9-00c04fb68820)
+]
+interface IWbemStatusCodeText : IUnknown
+{
+    HRESULT GetErrorCodeText(
+        [in] HRESULT hRes,
+        [in] LCID LocaleId,
+        [in] LONG lFlags,
+        [out] BSTR *MessageText);
+
+    HRESULT GetFacilityCodeText(
+        [in] HRESULT hRes,
+        [in] LCID LocaleId,
+        [in] LONG lFlags,
+        [out] BSTR *MessageText);
+};
+
+[
+    object,
+    restricted,
+    uuid(7c857801-7381-11cf-884d-00aa004b2e24)
+]
+interface IWbemObjectSink : IUnknown
+{
+    HRESULT Indicate(
+        [in] long lObjectCount,
+        [in, size_is(lObjectCount)] IWbemClassObject **apObjArray);
+
+    HRESULT SetStatus(
+        [in] long lFlags,
+        [in] HRESULT hResult,
+        [in] BSTR strParam,
+        [in] IWbemClassObject *pObjParam);
+};
+
+typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE
+{
+    WBEM_FLAG_RETURN_WBEM_COMPLETE      = 0,
+    WBEM_FLAG_BIDIRECTIONAL             = 0,
+    WBEM_FLAG_RETURN_ERROR_OBJECT       = 0,
+    WBEM_FLAG_DONT_SEND_STATUS          = 0,
+    WBEM_FLAG_SEND_ONLY_SELECTED        = 0,
+    WBEM_FLAG_RETURN_IMMEDIATELY        = 0x10,
+    WBEM_FLAG_FORWARD_ONLY              = 0x20,
+    WBEM_FLAG_NO_ERROR_OBJECT           = 0x40,
+    WBEM_FLAG_SEND_STATUS               = 0x80,
+    WBEM_FLAG_ENSURE_LOCATABLE          = 0x100,
+    WBEM_FLAG_DIRECT_READ               = 0x200,
+    WBEM_MASK_RESERVED_FLAGS            = 0x1f000,
+    WBEM_FLAG_USE_AMENDED_QUALIFIERS    = 0x20000,
+    WBEM_FLAG_STRONG_VALIDATION         = 0x100000
+} WBEM_GENERIC_FLAG_TYPE;
+
+[
+    object,
+    restricted,
+    uuid(9556dc99-828c-11cf-a37e-00aa003240c7),
+    pointer_default(unique)
+]
+interface IWbemServices : IUnknown
+{
+    HRESULT OpenNamespace(
+        [in] const BSTR strNamespace,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IWbemServices **ppWorkingNamespace,
+        [out] IWbemCallResult **ppResult);
+
+    HRESULT CancelAsyncCall(
+        [in] IWbemObjectSink *pSink);
+
+    HRESULT QueryObjectSink(
+        [in] long lFlags,
+        [out] IWbemObjectSink **ppResponseHandler);
+
+    HRESULT GetObject(
+        [in] const BSTR strObjectPath,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IWbemClassObject **ppObject,
+        [out] IWbemCallResult **ppCallResult);
+
+    HRESULT GetObjectAsync(
+        [in] const BSTR strObjectPath,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT PutClass(
+        [in] IWbemClassObject *pObject,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IWbemCallResult **ppCallResult);
+
+    HRESULT PutClassAsync(
+        [in] IWbemClassObject *pObject,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT DeleteClass(
+        [in] const BSTR strClass,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IWbemCallResult **ppCallResult);
+
+    HRESULT DeleteClassAsync(
+        [in] const BSTR strClass,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT CreateClassEnum(
+        [in] const BSTR strSuperclass,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IEnumWbemClassObject **ppEnum);
+
+    HRESULT CreateClassEnumAsync(
+        [in] const BSTR strSuperclass,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT PutInstance(
+        [in] IWbemClassObject *pInst,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IWbemCallResult **ppCallResult);
+
+    HRESULT PutInstanceAsync(
+        [in] IWbemClassObject *pInst,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT DeleteInstance(
+        [in] const BSTR strObjectPath,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IWbemCallResult **ppCallResult);
+
+    HRESULT DeleteInstanceAsync(
+        [in] const BSTR strObjectPath,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT CreateInstanceEnum(
+        [in] const BSTR strFilter,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IEnumWbemClassObject **ppEnum);
+
+    HRESULT CreateInstanceEnumAsync(
+        [in] const BSTR strFilter,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT ExecQuery(
+        [in] const BSTR strQueryLanguage,
+        [in] const BSTR strQuery,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IEnumWbemClassObject **ppEnum);
+
+    HRESULT ExecQueryAsync(
+        [in] const BSTR strQueryLanguage,
+        [in] const BSTR strQuery,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT ExecNotificationQuery(
+        [in] const BSTR strQueryLanguage,
+        [in] const BSTR strQuery,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [out] IEnumWbemClassObject **ppEnum);
+
+    HRESULT ExecNotificationQueryAsync(
+        [in] const BSTR strQueryLanguage,
+        [in] const BSTR strQuery,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemObjectSink *pResponseHandler);
+
+    HRESULT ExecMethod(
+        [in] const BSTR strObjectPath,
+        [in] const BSTR strMethodName,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemClassObject *pInParams,
+        [out] IWbemClassObject **ppOutParams,
+        [out] IWbemCallResult **ppCallResult);
+
+    HRESULT ExecMethodAsync(
+        [in] const BSTR strObjectPath,
+        [in] const BSTR strMethodName,
+        [in] long lFlags,
+        [in] IWbemContext *pCtx,
+        [in] IWbemClassObject *pInParams,
+        [in] IWbemObjectSink *pResponseHandler);
+};
+
+[
+    object,
+    restricted,
+    uuid(027947e1-d731-11ce-a357-000000000001)
+]
+interface IEnumWbemClassObject : IUnknown
+{
+    HRESULT Reset();
+
+    HRESULT Next(
+        [in] long lTimeout,
+        [in] ULONG uCount,
+        [out, size_is(uCount), length_is(*puReturned)] IWbemClassObject **apObjects,
+        [out] ULONG *puReturned);
+
+    HRESULT NextAsync(
+        [in] ULONG uCount,
+        [in] IWbemObjectSink *pSink);
+
+    HRESULT Clone(
+        [out] IEnumWbemClassObject **ppEnum);
+
+    HRESULT Skip(
+        [in] long lTimeout,
+        [in] ULONG nCount);
+};
+
+[
+    object,
+    restricted,
+    local,
+    uuid(dc12a681-737f-11cf-884d-00aa004b2e24)
+]
+interface IWbemClassObject : IUnknown
+{
+    HRESULT GetQualifierSet(
+        [out] IWbemQualifierSet **ppQualSet);
+
+    HRESULT Get(
+        [in,string] LPCWSTR wszName,
+        [in] long lFlags,
+        [out] VARIANT *pVal,
+        [out] CIMTYPE *pType,
+        [out] long *plFlavor);
+
+    HRESULT Put(
+        [in,string] LPCWSTR wszName,
+        [in] long lFlags,
+        [in] VARIANT *pVal,
+        [in] CIMTYPE Type);
+
+    HRESULT Delete(
+        [in,string] LPCWSTR wszName);
+
+    HRESULT GetNames(
+        [in,string] LPCWSTR wszQualifierName,
+        [in] long lFlags,
+        [in] VARIANT *pQualifierVal,
+        [out] SAFEARRAY **pNames);
+
+    HRESULT BeginEnumeration(
+        [in] long lEnumFlags);
+
+    HRESULT Next(
+        [in] long lFlags,
+        [out] BSTR *strName,
+        [out] VARIANT *pVal,
+        [out] CIMTYPE *pType,
+        [out] long *plFlavor);
+
+    HRESULT EndEnumeration();
+
+    HRESULT GetPropertyQualifierSet(
+        [in,string] LPCWSTR wszProperty,
+        [out] IWbemQualifierSet **ppQualSet);
+
+    HRESULT Clone(
+        [out] IWbemClassObject **ppCopy);
+
+    HRESULT GetObjectText(
+        [in] long lFlags,
+        [out] BSTR *pstrObjectText);
+
+    HRESULT SpawnDerivedClass(
+        [in] long lFlags,
+        [out] IWbemClassObject **ppNewClass);
+
+    HRESULT SpawnInstance(
+        [in] long lFlags,
+        [out] IWbemClassObject **ppNewInstance);
+
+    HRESULT CompareTo(
+        [in] long lFlags,
+        [in] IWbemClassObject *pCompareTo);
+
+    HRESULT GetPropertyOrigin(
+        [in,string] LPCWSTR wszName,
+        [out] BSTR *pstrClassName);
+
+    HRESULT InheritsFrom(
+        [in] LPCWSTR strAncestor);
+
+    HRESULT GetMethod(
+        [in,string] LPCWSTR wszName,
+        [in] long lFlags,
+        [out] IWbemClassObject **ppInSignature,
+        [out] IWbemClassObject **ppOutSignature);
+
+    HRESULT PutMethod(
+        [in,string] LPCWSTR wszName,
+        [in] long lFlags,
+        [in] IWbemClassObject *pInSignature,
+        [in] IWbemClassObject *pOutSignature);
+
+    HRESULT DeleteMethod(
+        [in,string] LPCWSTR wszName);
+
+    HRESULT BeginMethodEnumeration(
+        [in] long lEnumFlags);
+
+    HRESULT NextMethod(
+        [in] long lFlags,
+        [out] BSTR *pstrName,
+        [out] IWbemClassObject **ppInSignature,
+        [out] IWbemClassObject **ppOutSignature);
+
+    HRESULT EndMethodEnumeration();
+
+    HRESULT GetMethodQualifierSet(
+        [in,string] LPCWSTR wszMethod,
+        [out] IWbemQualifierSet **ppQualSet);
+
+    HRESULT GetMethodOrigin(
+        [in,string] LPCWSTR wszMethodName,
+        [out] BSTR *pstrClassName);
+}
+
+[
+    object,
+    restricted,
+    local,
+    uuid(dc12a680-737f-11cf-884d-00aa004b2e24)
+]
+interface IWbemQualifierSet : IUnknown
+{
+    HRESULT Get(
+        [in,string] LPCWSTR wszName,
+        [in] long lFlags,
+        [out] VARIANT *pVal,
+        [out] long *plFlavor);
+
+    HRESULT Put(
+        [in,string] LPCWSTR wszName,
+        [in] VARIANT *pVal,
+        [in] long lFlavor);
+
+    HRESULT Delete(
+        [in,string] LPCWSTR wszName);
+
+    HRESULT GetNames(
+        [in] long lFlags,
+        [out] SAFEARRAY **pNames);
+
+    HRESULT BeginEnumeration(
+        [in] long lFlags);
+
+    HRESULT Next(
+        [in] long lFlags,
+        [out] BSTR *pstrName,
+        [out] VARIANT *pVal,
+        [out] long *plFlavor);
+
+    HRESULT EndEnumeration();
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl
new file mode 100644
index 0000000..c810dba
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl
@@ -0,0 +1,1130 @@
+/*
+ * Copyright 2013 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "dispex.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    uuid(565783c6-cb41-11d1-8b02-00600806d9b6),
+    helpstring("Microsoft WMI Scripting V1.2 Library"),
+    lcid(0x0000),
+    version(1.2)
+]
+library WbemScripting
+{
+
+importlib("stdole2.tlb");
+
+interface ISWbemEventSource;
+interface ISWbemLocator;
+interface ISWbemMethod;
+interface ISWbemMethodSet;
+interface ISWbemNamedValue;
+interface ISWbemNamedValueSet;
+interface ISWbemObject;
+interface ISWbemObjectPath;
+interface ISWbemObjectSet;
+interface ISWbemPrivilege;
+interface ISWbemPrivilegeSet;
+interface ISWbemProperty;
+interface ISWbemPropertySet;
+interface ISWbemQualifier;
+interface ISWbemQualifierSet;
+interface ISWbemSecurity;
+interface ISWbemServices;
+
+[
+    object,
+    local,
+    uuid(27d54d92-0ebe-11d2-8b22-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemEventSource : IDispatch
+{
+    [ id(1) ]
+    HRESULT NextEvent(
+        [in] long iTimeoutMs,
+        [out, retval] ISWbemObject **objWbemObject);
+
+    [ id(2), propget ]
+    HRESULT Security_(
+        [out, retval] ISWbemSecurity **objWbemSecurity);
+};
+
+[
+    object,
+    local,
+    uuid(76a6415b-cb41-11d1-8b02-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    pointer_default(unique)
+]
+interface ISWbemLocator : IDispatch
+{
+    [ id(1) ]
+    HRESULT ConnectServer(
+        [in] BSTR strServer,
+        [in] BSTR strNamespace,
+        [in] BSTR strUser,
+        [in] BSTR strPassword,
+        [in] BSTR strLocale,
+        [in] BSTR strAuthority,
+        [in] long iSecurityFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemServices **objWbemServices);
+
+    [ id(2), propget ]
+    HRESULT Security_(
+        ISWbemSecurity **objWbemSecurity);
+};
+
+[
+    object,
+    local,
+    uuid(422e8e90-d955-11d1-8b09-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    pointer_default(unique),
+    nonextensible
+]
+interface ISWbemMethod : IDispatch
+{
+    [ id(1), propget ]
+    HRESULT Name(
+        [out, retval] BSTR *strName);
+
+    [ id(2), propget ]
+    HRESULT Origin(
+        [out, retval] BSTR *strOrigin);
+
+    [ id(3), propget ]
+    HRESULT InParameters(
+        [out, retval] ISWbemObject **objWbemInParameters);
+
+    [ id(4), propget ]
+    HRESULT OutParameters(
+        [out, retval] ISWbemObject **objWbemOutParameters);
+
+    [ id(5), propget ]
+    HRESULT Qualifiers_(
+        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
+};
+
+[
+    object,
+    local,
+    uuid(c93ba292-d955-11d1-8b09-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemMethodSet : IDispatch
+{
+    [ id(DISPID_NEWENUM), propget, restricted ]
+    HRESULT _NewEnum(
+        [out, retval] IUnknown **pUnk);
+
+    [ id(DISPID_VALUE) ]
+    HRESULT Item(
+        [in] BSTR strName,
+        [in] long iFlags,
+        [out, retval] ISWbemMethod **objWbemMethod);
+
+    [ id(1), propget ]
+    HRESULT Count(
+        [out, retval] long *iCount);
+};
+
+[
+    object,
+    local,
+    uuid(76a64164-cb41-11d1-8b02-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation
+]
+interface ISWbemNamedValue : IDispatch
+{
+    [ id(DISPID_VALUE), propget ]
+    HRESULT Value(
+        [out, retval] VARIANT *varValue);
+
+    [ id(DISPID_VALUE), propput ]
+    HRESULT Value(
+        [in] VARIANT *varValue);
+
+    [ id(2), propget ]
+    HRESULT Name(
+        [out, retval] BSTR *strName);
+};
+
+[
+    object,
+    local,
+    uuid(cf2376ea-ce8c-11d1-8b05-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation
+]
+interface ISWbemNamedValueSet : IDispatch
+{
+    [ id(DISPID_NEWENUM), propget, restricted ]
+    HRESULT _NewEnum(
+        [out, retval] IUnknown **pUnk);
+
+    [ id(DISPID_VALUE) ]
+    HRESULT Item(
+        [in] BSTR strName,
+        [in] long iFlags,
+        [out, retval] ISWbemNamedValue **objWbemNamedValue);
+
+    [ id(1), propget ]
+    HRESULT Count(
+        [out, retval] long *iCount);
+
+    [ id(2) ]
+    HRESULT Add(
+        [in] BSTR strName,
+        [in] VARIANT *varValue,
+        [in] long iFlags,
+        [out, retval] ISWbemNamedValue **objWbemNamedValue);
+
+    [ id(3) ]
+    HRESULT Remove(
+        [in] BSTR strName,
+        [in] long iFlags);
+
+    [ id(4) ]
+    HRESULT Clone(
+        [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);
+
+    [ id(5) ]
+    HRESULT DeleteAll();
+};
+
+[
+    object,
+    local,
+    uuid(76A6415A-CB41-11d1-8B02-00600806D9B6),
+    dual,
+    hidden,
+    oleautomation
+]
+interface ISWbemObject : IDispatch
+{
+    [ id(1) ]
+    HRESULT Put_(
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectPath **objWbemObjectPath);
+
+    [ id(2) ]
+    HRESULT PutAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id (3) ]
+    HRESULT Delete_(
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet);
+
+    [ id (4) ]
+    HRESULT DeleteAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(5) ]
+    HRESULT Instances_(
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(6) ]
+    HRESULT InstancesAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(7) ]
+    HRESULT Subclasses_(
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(8) ]
+    HRESULT SubclassesAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(9) ]
+    HRESULT Associators_(
+        [in] BSTR strAssocClass,
+        [in] BSTR strResultClass,
+        [in] BSTR strResultRole,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredAssocQualifier,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(10) ]
+    HRESULT AssociatorsAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strAssocClass,
+        [in] BSTR strResultClass,
+        [in] BSTR strResultRole,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredAssocQualifier,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(11) ]
+    HRESULT References_(
+        [in] BSTR strResultClass,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(12) ]
+    HRESULT ReferencesAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strResultClass,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(13) ]
+    HRESULT ExecMethod_(
+        [in] BSTR strMethodName,
+        [in] IDispatch *objWbemInParameters,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObject **objWbemOutParameters);
+
+    [ id(14) ]
+    HRESULT ExecMethodAsync_(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strMethodName,
+        [in] IDispatch *objWbemInParameters,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(15) ]
+    HRESULT Clone_(
+        [out, retval] ISWbemObject **objWbemObject);
+
+    [ id(16) ]
+    HRESULT GetObjectText_(
+        [in] long iFlags,
+        [out, retval] BSTR *strObjectText);
+
+    [ id(17) ]
+    HRESULT SpawnDerivedClass_(
+        [in] long iFlags,
+        [out, retval] ISWbemObject **objWbemObject);
+
+    [ id(18) ]
+    HRESULT SpawnInstance_(
+        [in] long iFlags,
+        [out, retval] ISWbemObject **objWbemObject);
+
+    [ id(19) ]
+    HRESULT CompareTo_(
+        [in] IDispatch *objWbemObject,
+        [in] long iFlags,
+        [out, retval] VARIANT_BOOL *bResult);
+
+    [ id(20), propget ]
+    HRESULT Qualifiers_(
+        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
+
+    [ id(21), propget ]
+    HRESULT Properties_(
+        [out, retval] ISWbemPropertySet **objWbemPropertySet);
+
+    [ id(22), propget ]
+    HRESULT Methods_(
+        [out, retval] ISWbemMethodSet **objWbemMethodSet);
+
+    [ id(23), propget ]
+    HRESULT Derivation_(
+        [out, retval] VARIANT *strClassNameArray);
+
+    [ id(24), propget ]
+    HRESULT Path_(
+        [out, retval] ISWbemObjectPath **objWbemObjectPath);
+
+    [ id(25), propget ]
+    HRESULT Security_(
+        [out, retval] ISWbemSecurity **objWbemSecurity);
+};
+
+[
+    object,
+    local,
+    uuid(5791bc27-ce9c-11d1-97bf-0000f81e849c),
+    dual,
+    hidden,
+    oleautomation,
+    pointer_default(unique)
+]
+interface ISWbemObjectPath : IDispatch
+{
+    [ id(DISPID_VALUE), propget ]
+    HRESULT Path(
+        [out, retval] BSTR *strPath);
+
+    [ id(DISPID_VALUE), propput ]
+    HRESULT Path(
+        [in] BSTR strPath);
+
+    [ id(1), propget ]
+    HRESULT RelPath(
+        [out, retval] BSTR *strRelPath);
+
+    [ id(1), propput ]
+    HRESULT RelPath(
+        [in] BSTR strRelPath);
+
+    [ id(2), propget ]
+    HRESULT Server(
+        [out, retval] BSTR *strServer);
+
+    [ id(2), propput ]
+    HRESULT Server(
+        [in] BSTR strServer);
+
+    [ id(3), propget ]
+    HRESULT Namespace(
+        [out, retval] BSTR *strNamespace);
+
+    [ id(3), propput ]
+    HRESULT Namespace(
+        [in] BSTR strNamespace);
+
+    [ id(4), propget ]
+    HRESULT ParentNamespace(
+        [out, retval] BSTR *strParentNamespace);
+
+    [ id(5), propget ]
+    HRESULT DisplayName(
+        [out, retval] BSTR *strDisplayName);
+
+    [ id(5), propput ]
+    HRESULT DisplayName(
+        [in] BSTR strDisplayName);
+
+    [ id(6), propget ]
+    HRESULT Class(
+        [out, retval] BSTR *strClass);
+
+    [ id(6), propput ]
+    HRESULT Class(
+        [in] BSTR strClass);
+
+    [ id(7), propget ]
+    HRESULT IsClass(
+        [out, retval] VARIANT_BOOL *bIsClass);
+
+    [ id(8) ]
+    HRESULT SetAsClass();
+
+    [ id(9), propget ]
+    HRESULT IsSingleton(
+        [out, retval] VARIANT_BOOL *bIsSingleton);
+
+    [ id(10) ]
+    HRESULT SetAsSingleton();
+
+    [ id(11), propget ]
+    HRESULT Keys(
+        [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);
+
+    [ id(12), propget ]
+    HRESULT Security_(
+        [out, retval] ISWbemSecurity **objWbemSecurity);
+
+    [ id(13), propget ]
+    HRESULT Locale(
+        [out, retval] BSTR *strLocale);
+
+    [ id(13), propput ]
+    HRESULT Locale(
+        [in] BSTR strLocale);
+
+    [ id(14), propget ]
+    HRESULT Authority(
+        [out, retval] BSTR *strAuthority);
+
+    [ id(14), propput ]
+    HRESULT Authority(
+        [in] BSTR strAuthority);
+};
+
+[
+    object,
+    local,
+    uuid(76a6415f-cb41-11d1-8b02-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemObjectSet : IDispatch
+{
+    [ id(DISPID_NEWENUM), propget, restricted ]
+    HRESULT _NewEnum(
+        [out, retval] IUnknown **pUnk);
+
+    [ id(DISPID_VALUE) ]
+    HRESULT Item(
+        [in] BSTR strObjectPath,
+        [in] long iFlags,
+        [out, retval] ISWbemObject **objWbemObject);
+
+    [ id(1), propget ]
+    HRESULT Count(
+        [out, retval] long *iCount);
+
+    [ id(4), propget ]
+    HRESULT Security_(
+        [out, retval] ISWbemSecurity **objWbemSecurity);
+
+    [ id(5) ]
+    HRESULT ItemIndex(
+        [in] long lIndex,
+        [out, retval] ISWbemObject **objWbemObject);
+};
+
+typedef
+[
+    v1_enum,
+    uuid(176d2f70-5af3-11d2-8b4a-00600806d9b6)
+]
+enum WbemPrivilegeEnum
+{
+    wbemPrivilegeCreateToken          = 1,
+    wbemPrivilegePrimaryToken         = 2,
+    wbemPrivilegeLockMemory           = 3,
+    wbemPrivilegeIncreaseQuota        = 4,
+    wbemPrivilegeMachineAccount       = 5,
+    wbemPrivilegeTcb                  = 6,
+    wbemPrivilegeSecurity             = 7,
+    wbemPrivilegeTakeOwnership        = 8,
+    wbemPrivilegeLoadDriver           = 9,
+    wbemPrivilegeSystemProfile        = 10,
+    wbemPrivilegeSystemtime           = 11,
+    wbemPrivilegeProfileSingleProcess = 12,
+    wbemPrivilegeIncreaseBasePriority = 13,
+    wbemPrivilegeCreatePagefile       = 14,
+    wbemPrivilegeCreatePermanent      = 15,
+    wbemPrivilegeBackup               = 16,
+    wbemPrivilegeRestore              = 17,
+    wbemPrivilegeShutdown             = 18,
+    wbemPrivilegeDebug                = 19,
+    wbemPrivilegeAudit                = 20,
+    wbemPrivilegeSystemEnvironment    = 21,
+    wbemPrivilegeChangeNotify         = 22,
+    wbemPrivilegeRemoteShutdown       = 23,
+    wbemPrivilegeUndock               = 24,
+    wbemPrivilegeSyncAgent            = 25,
+    wbemPrivilegeEnableDelegation     = 26,
+    wbemPrivilegeManageVolume         = 27
+} WbemPrivilegeEnum;
+
+[
+    object,
+    local,
+    uuid(26ee67bd-5804-11d2-8b4a-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemPrivilege : IDispatch
+{
+    [ id(DISPID_VALUE), propget ]
+    HRESULT IsEnabled(
+        [out, retval] VARIANT_BOOL *bIsEnabled);
+
+    [ id(DISPID_VALUE), propput ]
+    HRESULT IsEnabled(
+        [in] VARIANT_BOOL bIsEnabled);
+
+    [ id(1), propget ]
+    HRESULT Name(
+        [out, retval] BSTR *strDisplayName);
+
+    [ id(2), propget ]
+    HRESULT DisplayName(
+        [out, retval] BSTR *strDisplayName);
+
+    [ id(3), propget ]
+    HRESULT Identifier(
+        [out, retval] WbemPrivilegeEnum *iPrivilege);
+};
+
+[
+    object,
+    local,
+    uuid(26ee67bf-5804-11d2-8b4a-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemPrivilegeSet : IDispatch
+{
+    [ id(DISPID_NEWENUM), propget, restricted ]
+    HRESULT _NewEnum(
+        [out, retval] IUnknown **pUnk);
+
+    [ id(DISPID_VALUE) ]
+    HRESULT Item(
+        [in] WbemPrivilegeEnum iPrivilege,
+        [out, retval] ISWbemPrivilege **objWbemPrivilege);
+
+    [ id(1), propget ]
+    HRESULT Count(
+        [out, retval] long *iCount);
+
+    [ id(2) ]
+    HRESULT Add(
+        [in] WbemPrivilegeEnum iPrivilege,
+        [in] VARIANT_BOOL bIsEnabled,
+        [out, retval] ISWbemPrivilege **objWbemPrivilege);
+
+    [ id(3) ]
+    HRESULT Remove(
+        [in] WbemPrivilegeEnum iPrivilege);
+
+    [ id(4) ]
+    HRESULT DeleteAll();
+
+    [ id(5) ]
+    HRESULT AddAsString(
+        [in] BSTR strPrivilege,
+        [in] VARIANT_BOOL bIsEnabled,
+        [out, retval] ISWbemPrivilege **objWbemPrivilege);
+};
+
+typedef
+[
+    v1_enum,
+    uuid(4a249b7b-fc9a-11d1-8b1e-00600806d9b6),
+]
+enum WbemCimtypeEnum
+{
+    wbemCimtypeSint16    = 2,
+    wbemCimtypeSint32    = 3,
+    wbemCimtypeReal32    = 4,
+    wbemCimtypeReal64    = 5,
+    wbemCimtypeString    = 8,
+    wbemCimtypeBoolean   = 11,
+    wbemCimtypeObject    = 13,
+    wbemCimtypeSint8     = 16,
+    wbemCimtypeUint8     = 17,
+    wbemCimtypeUint16    = 18,
+    wbemCimtypeUint32    = 19,
+    wbemCimtypeSint64    = 20,
+    wbemCimtypeUint64    = 21,
+    wbemCimtypeDatetime  = 101,
+    wbemCimtypeReference = 102,
+    wbemCimtypeChar16    = 103
+} WbemCimtypeEnum;
+
+[
+    object,
+    local,
+    uuid(1a388f98-d4ba-11d1-8b09-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    pointer_default(unique)
+]
+interface ISWbemProperty : IDispatch
+{
+    [ id(DISPID_VALUE), propget ]
+    HRESULT Value(
+        [out, retval] VARIANT *varValue);
+
+    [ id(DISPID_VALUE), propput ]
+    HRESULT Value(
+        [in] VARIANT *varValue);
+
+    [ id(1), propget ]
+    HRESULT Name(
+        [out, retval] BSTR *strName);
+
+    [ id(2), propget ]
+    HRESULT IsLocal(
+        [out, retval] VARIANT_BOOL *bIsLocal);
+
+    [ id(3), propget ]
+    HRESULT Origin(
+        [out, retval] BSTR *strOrigin);
+
+    [ id(4), propget ]
+    HRESULT CIMType(
+        [out, retval] WbemCimtypeEnum *iCimType);
+
+    [ id(5), propget ]
+    HRESULT Qualifiers_(
+        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
+
+    [ id(6), propget ]
+    HRESULT IsArray(
+        [out, retval] VARIANT_BOOL *bIsArray);
+};
+
+[
+    object,
+    local,
+    uuid(dea0a7b2-d4ba-11d1-8b09-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation
+]
+interface ISWbemPropertySet : IDispatch
+{
+    [ id(DISPID_NEWENUM), propget, restricted ]
+    HRESULT _NewEnum(
+        [out, retval] IUnknown **pUnk);
+
+    [ id(DISPID_VALUE) ]
+    HRESULT Item(
+        [in] BSTR strName,
+        [in] long iFlags,
+        [out, retval] ISWbemProperty **objWbemProperty);
+
+    [ id(1), propget ]
+    HRESULT Count(
+        [out, retval] long *iCount);
+
+    [ id(2) ]
+    HRESULT Add(
+        [in] BSTR strName,
+        [in] WbemCimtypeEnum iCIMType,
+        [in] VARIANT_BOOL bIsArray,
+        [in] long iFlags,
+        [out, retval] ISWbemProperty **objWbemProperty);
+
+    [ id(3) ]
+    HRESULT Remove(
+        [in] BSTR strName,
+        [in] long iFlags);
+};
+
+[
+    object,
+    local,
+    uuid(79b05932-d3b7-11d1-8b06-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible,
+    pointer_default(unique)
+]
+interface ISWbemQualifier : IDispatch
+{
+    [ id(DISPID_VALUE), propget ]
+    HRESULT Value(
+        [out, retval] VARIANT *varValue);
+
+    [ id(DISPID_VALUE), propput ]
+    HRESULT Value(
+        [in] VARIANT *varValue);
+
+    [ id(1), propget ]
+    HRESULT Name(
+        [out, retval] BSTR *strName);
+
+    [ id(2), propget ]
+    HRESULT IsLocal(
+        [out, retval] VARIANT_BOOL *bIsLocal);
+
+    [ id(3), propget ]
+    HRESULT PropagatesToSubclass(
+        [out, retval] VARIANT_BOOL *bPropagatesToSubclass);
+
+    [ id(3), propput ]
+    HRESULT PropagatesToSubclass(
+        [in] VARIANT_BOOL bPropagatesToSubclass);
+
+    [ id(4), propget ]
+    HRESULT PropagatesToInstance(
+        [out, retval] VARIANT_BOOL *bPropagatesToInstance);
+
+    [ id(4), propput ]
+    HRESULT PropagatesToInstance(
+        [in] VARIANT_BOOL bPropagatesToInstance);
+
+    [ id(5), propget ]
+    HRESULT IsOverridable(
+        [out, retval] VARIANT_BOOL *bIsOverridable);
+
+    [ id(5), propput ]
+    HRESULT IsOverridable(
+        [in] VARIANT_BOOL bIsOverridable);
+
+    [ id(6), propget ]
+    HRESULT IsAmended(
+        [out, retval] VARIANT_BOOL *bIsAmended);
+};
+
+[
+    object,
+    local,
+    uuid(9b16ed16-d3df-11d1-8b08-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemQualifierSet : IDispatch
+{
+    [ id(DISPID_NEWENUM), propget, restricted ]
+    HRESULT _NewEnum(
+        [out, retval] IUnknown **pUnk);
+
+    [ id(DISPID_VALUE) ]
+    HRESULT Item(
+        [in] BSTR name,
+        [in] long iFlags,
+        [out, retval] ISWbemQualifier **objWbemQualifier);
+
+    [ id(1), propget ]
+    HRESULT Count(
+        [out, retval] long *iCount);
+
+    [ id(2) ]
+    HRESULT Add(
+        [in] BSTR strName,
+        [in] VARIANT *varVal,
+        [in] VARIANT_BOOL bPropagatesToSubclass,
+        [in] VARIANT_BOOL bPropagatesToInstance,
+        [in] VARIANT_BOOL bIsOverridable,
+        [in] long iFlags,
+        [out, retval] ISWbemQualifier **objWbemQualifier);
+
+    [ id(3) ]
+    HRESULT Remove(
+        [in] BSTR strName,
+        [in] long iFlags);
+};
+
+typedef
+[
+    v1_enum,
+    uuid(b54d66e8-2287-11d2-8b33-00600806d9b6)
+]
+enum WbemImpersonationLevelEnum
+{
+    wbemImpersonationLevelAnonymous   = 1,
+    wbemImpersonationLevelIdentify    = 2,
+    wbemImpersonationLevelImpersonate = 3,
+    wbemImpersonationLevelDelegate    = 4
+} WbemImpersonationLevelEnum;
+
+typedef
+[
+    v1_enum,
+    uuid(b54d66e7-2287-11d2-8b33-00600806d9b6)
+]
+enum WbemAuthenticationLevelEnum
+{
+    wbemAuthenticationLevelDefault      = 0,
+    wbemAuthenticationLevelNone         = 1,
+    wbemAuthenticationLevelConnect      = 2,
+    wbemAuthenticationLevelCall         = 3,
+    wbemAuthenticationLevelPkt          = 4,
+    wbemAuthenticationLevelPktIntegrity = 5,
+    wbemAuthenticationLevelPktPrivacy   = 6
+} WbemAuthenticationLevelEnum;
+
+[
+    object,
+    local,
+    uuid(b54d66e6-2287-11d2-8b33-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    nonextensible
+]
+interface ISWbemSecurity : IDispatch
+{
+    [ id(1), propget ]
+    HRESULT ImpersonationLevel(
+        [out, retval] WbemImpersonationLevelEnum *iImpersonationLevel);
+
+    [ id(1), propput ]
+    HRESULT ImpersonationLevel(
+        [in] WbemImpersonationLevelEnum iImpersonationLevel);
+
+    [ id(2), propget ]
+    HRESULT AuthenticationLevel(
+        [out, retval] WbemAuthenticationLevelEnum *iAuthenticationLevel);
+
+    [ id(2), propput ]
+    HRESULT AuthenticationLevel(
+        [in] WbemAuthenticationLevelEnum iAuthenticationLevel);
+
+    [ id(3), propget ]
+    HRESULT Privileges(
+        [out, retval] ISWbemPrivilegeSet **objWbemPrivilegeSet);
+};
+
+[
+    object,
+    local,
+    uuid(76a6415c-cb41-11d1-8b02-00600806d9b6),
+    dual,
+    hidden,
+    oleautomation,
+    pointer_default(unique)
+]
+interface ISWbemServices : IDispatch
+{
+    [ id(1) ]
+    HRESULT Get(
+        [in] BSTR strObjectPath,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObject **objWbemObject);
+
+    [ id(2) ]
+    HRESULT GetAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strObjectPath,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(3) ]
+    HRESULT Delete(
+        [in] BSTR strObjectPath,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet);
+
+    [ id(4) ]
+    HRESULT DeleteAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strObjectPath,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(5) ]
+    HRESULT InstancesOf(
+        [in] BSTR strClass,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(6) ]
+    HRESULT InstancesOfAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strClass,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(7) ]
+    HRESULT SubclassesOf(
+        [in]  BSTR strSuperclass,
+        [in]  long iFlags,
+        [in]  IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(8) ]
+    HRESULT SubclassesOfAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strSuperclass,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(9) ]
+    HRESULT ExecQuery(
+        [in] BSTR strQuery,
+        [in] BSTR strQueryLanguage,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(10) ]
+    HRESULT ExecQueryAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strQuery,
+        [in] BSTR strQueryLanguage,
+        [in] long lFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(11) ]
+    HRESULT AssociatorsOf(
+        [in] BSTR strObjectPath,
+        [in] BSTR strAssocClass,
+        [in] BSTR strResultClass,
+        [in] BSTR strResultRole,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredAssocQualifier,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(12) ]
+    HRESULT AssociatorsOfAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strObjectPath,
+        [in] BSTR strAssocClass,
+        [in] BSTR strResultClass,
+        [in] BSTR strResultRole,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredAssocQualifier,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(13) ]
+    HRESULT ReferencesTo(
+        [in] BSTR strObjectPath,
+        [in] BSTR strResultClass,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+    [ id(14) ]
+    HRESULT ReferencesToAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strObjectPath,
+        [in] BSTR strResultClass,
+        [in] BSTR strRole,
+        [in] VARIANT_BOOL bClassesOnly,
+        [in] VARIANT_BOOL bSchemaOnly,
+        [in] BSTR strRequiredQualifier,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(15) ]
+    HRESULT ExecNotificationQuery(
+        [in] BSTR strQuery,
+        [in] BSTR strQueryLanguage,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemEventSource **objWbemEventSource);
+
+    [ id(16) ]
+    HRESULT ExecNotificationQueryAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strQuery,
+        [in] BSTR strQueryLanguage,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(17) ]
+    HRESULT ExecMethod(
+        [in] BSTR strObjectPath,
+        [in] BSTR strMethodName,
+        [in] IDispatch *objWbemInParameters,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [out, retval] ISWbemObject **objWbemOutParameters);
+
+    [ id(18) ]
+    HRESULT ExecMethodAsync(
+        [in] IDispatch *objWbemSink,
+        [in] BSTR strObjectPath,
+        [in] BSTR strMethodName,
+        [in] IDispatch *objWbemInParameters,
+        [in] long iFlags,
+        [in] IDispatch *objWbemNamedValueSet,
+        [in] IDispatch *objWbemAsyncContext);
+
+    [ id(19), propget ]
+    HRESULT Security_(
+        [out, retval] ISWbemSecurity **objWbemSecurity);
+};
+
+[
+    threading(apartment),
+    uuid(76a64158-cb41-11d1-8b02-00600806d9b6),
+    progid("WbemScripting.SWbemLocator.1"),
+    vi_progid("WbemScripting.SWbemLocator")
+]
+coclass SWbemLocator
+{
+    interface ISWbemLocator;
+};
+
+}; /* WbemScripting */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl
new file mode 100644
index 0000000..7c59baa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2012 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+    uuid(092df710-7010-11d1-ad90-00c04fd8fdff)
+]
+library WbemProviders_v1
+{
+    [
+        uuid(cb8555cc-9128-11d1-ad9b-00c04fd8fdff)
+    ]
+    coclass WbemAdministrativeLocator { interface IWbemLocator; }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h
new file mode 100644
index 0000000..4083903
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h
@@ -0,0 +1,199 @@
+/*
+ * Windows Error Reporting definitions
+ *
+ * Copyright (C) 2010 Louis Lenders
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WERAPI_H
+#define __WINE_WERAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Only 10 parameter are allowed in WerReportSetParameter */
+#define WER_MAX_PARAM_COUNT 10
+#define WER_P0 0
+#define WER_P1 1
+#define WER_P2 2
+#define WER_P3 3
+#define WER_P4 4
+#define WER_P5 5
+#define WER_P6 6
+#define WER_P7 7
+#define WER_P8 8
+#define WER_P9 9
+
+/* Flags for WerReportSubmit */
+#define WER_SUBMIT_HONOR_RECOVERY           0x0001
+#define WER_SUBMIT_HONOR_RESTART            0x0002
+#define WER_SUBMIT_QUEUE                    0x0004
+#define WER_SUBMIT_SHOW_DEBUG               0x0008
+#define WER_SUBMIT_ADD_REGISTERED_DATA      0x0010
+#define WER_SUBMIT_OUTOFPROCESS             0x0020
+#define WER_SUBMIT_NO_CLOSE_UI              0x0040
+#define WER_SUBMIT_NO_QUEUE                 0x0080
+#define WER_SUBMIT_NO_ARCHIVE               0x0100
+#define WER_SUBMIT_START_MINIMIZED          0x0200
+#define WER_SUBMIT_OUTOFPROCESS_ASYNC       0x0400
+#define WER_SUBMIT_BYPASS_DATA_THROTTLING   0x0800
+#define WER_SUBMIT_ARCHIVE_PARAMETERS_ONLY  0x1000
+#define WER_SUBMIT_REPORT_MACHINE_ID        0x2000
+
+#define WER_MAX_PREFERRED_MODULES           128
+#define WER_MAX_PREFERRED_MODULES_BUFFER    256
+
+/* #### */
+
+typedef HANDLE HREPORT;
+
+typedef enum _WER_CONSENT
+{
+    WerConsentNotAsked = 1,
+    WerConsentApproved,
+    WerConsentDenied,
+    WerConsentAlwaysPrompt,
+    WerConsentMax
+} WER_CONSENT;
+
+typedef enum _WER_FILE_TYPE
+{
+    WerFileTypeMicrodump = 1,
+    WerFileTypeMinidump,
+    WerFileTypeHeapdump,
+    WerFileTypeUserDocument,
+    WerFileTypeOther,
+    WerFileTypeMax
+} WER_FILE_TYPE;
+
+typedef enum _WER_REGISTER_FILE_TYPE
+{
+    WerRegFileTypeUserDocument = 1,
+    WerRegFileTypeOther = 2,
+    WerRegFileTypeMax
+} WER_REGISTER_FILE_TYPE;
+
+typedef struct _WER_REPORT_INFORMATION
+{
+    DWORD   dwSize;
+    HANDLE  hProcess;
+    WCHAR   wzConsentKey[64];
+    WCHAR   wzFriendlyEventName[128];
+    WCHAR   wzApplicationName[128];
+    WCHAR   wzApplicationPath[MAX_PATH];
+    WCHAR   wzDescription[512];
+    HWND    hwndParent;
+} WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION;
+
+
+typedef enum _WER_REPORT_TYPE
+{
+    WerReportNonCritical = 0,
+    WerReportCritical,
+    WerReportApplicationCrash,
+    WerReportApplicationHang,
+    WerReportKernel,
+    WerReportInvalid
+} WER_REPORT_TYPE;
+
+typedef enum _WER_SUBMIT_RESULT
+{
+    WerReportQueued = 1,
+    WerReportUploaded,
+    WerReportDebug,
+    WerReportFailed,
+    WerDisabled,
+    WerReportCancelled,
+    WerDisabledQueue,
+    WerReportAsync,
+    WerCustomAction
+} WER_SUBMIT_RESULT, *PWER_SUBMIT_RESULT;
+
+typedef enum _WER_DUMP_TYPE
+{
+    WerDumpTypeMicroDump = 1,
+    WerDumpTypeMiniDump,
+    WerDumpTypeHeapDump,
+    WerDumpTypeMax
+} WER_DUMP_TYPE;
+
+typedef enum _WER_REPORT_UI
+{
+    WerUIAdditionalDataDlgHeader = 1,
+    WerUIIconFilePath = 2,
+    WerUIConsentDlgHeader = 3,
+    WerUIConsentDlgBody = 4,
+    WerUIOnlineSolutionCheckText = 5,
+    WerUIOfflineSolutionCheckText = 6,
+    WerUICloseText = 7,
+    WerUICloseDlgHeader = 8,
+    WerUICloseDlgBody = 9,
+    WerUICloseDlgButtonText = 10,
+    WerUICustomActionButtonText = 11,
+    WerUIMax
+} WER_REPORT_UI;
+
+/* #### */
+
+typedef struct _WER_DUMP_CUSTOM_OPTIONS
+{
+    DWORD dwSize;
+    DWORD dwMask;
+    DWORD dwDumpFlags;
+    BOOL  bOnlyThisThread;
+    DWORD dwExceptionThreadFlags;
+    DWORD dwOtherThreadFlags;
+    DWORD dwExceptionThreadExFlags;
+    DWORD dwOtherThreadExFlags;
+    DWORD dwPreferredModuleFlags;
+    DWORD dwOtherModuleFlags;
+    WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER];
+
+} WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS;
+
+typedef struct _WER_EXCEPTION_INFORMATION
+{
+    PEXCEPTION_POINTERS pExceptionPointers;
+    BOOL bClientPointers;
+} WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION;
+
+/* #### */
+
+HRESULT WINAPI WerAddExcludedApplication(PCWSTR, BOOL);
+HRESULT WINAPI WerRegisterFile(PCWSTR file, WER_REGISTER_FILE_TYPE regfiletype, DWORD flags);
+HRESULT WINAPI WerRemoveExcludedApplication(PCWSTR, BOOL);
+HRESULT WINAPI WerReportAddFile(HREPORT, PCWSTR, WER_FILE_TYPE, DWORD);
+HRESULT WINAPI WerReportCloseHandle(HREPORT);
+HRESULT WINAPI WerReportCreate(PCWSTR, WER_REPORT_TYPE, PWER_REPORT_INFORMATION, HREPORT*);
+HRESULT WINAPI WerReportSetParameter(HREPORT, DWORD, PCWSTR, PCWSTR);
+HRESULT WINAPI WerReportSetUIOption(HREPORT, WER_REPORT_UI, PCWSTR);
+HRESULT WINAPI WerReportSubmit(HREPORT, WER_CONSENT, DWORD, PWER_SUBMIT_RESULT);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WERAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h
new file mode 100644
index 0000000..347179f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WFEXT_H
+#define __WINE_WFEXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+LONG WINAPI FMExtensionProc(HWND,WORD,LONG);
+LONG WINAPI FMExtensionProcW(HWND,WORD,LONG);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h
new file mode 100644
index 0000000..4541a2f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2009 Damjan Jovanovic
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifdef __WINESRC__
+#error Specify wia_lh.h or wia_xp.h explicitly in Wine
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+#include <wia_lh.h>
+#elif (_WIN32_WINNT >= 0x0501)
+#include <wia_xp.h>
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl
new file mode 100644
index 0000000..50d09da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2009 Damjan Jovanovic
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "propidl.idl";
+
+interface IEnumWIA_DEV_INFO;
+interface IWiaItem;
+interface IWiaEventCallback;
+
+cpp_quote("DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);")
+
+[
+    object,
+    uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811)
+]
+interface IWiaDevMgr : IUnknown
+{
+    HRESULT EnumDeviceInfo(
+        [in] LONG lFlag,
+        [retval, out] IEnumWIA_DEV_INFO **ppIEnum);
+
+    HRESULT CreateDevice(
+        [in] BSTR bstrDeviceID,
+        [out] IWiaItem **ppWiaItemRoot);
+
+    HRESULT SelectDeviceDlg(
+        [in] HWND hwndParent,
+        [in] LONG lDeviceType,
+        [in] LONG lFlags,
+        [in, out] BSTR *pbstrDeviceID,
+        [retval, out] IWiaItem **ppItemRoot);
+
+    HRESULT SelectDeviceDlgID(
+        [in] HWND hwndParent,
+        [in] LONG lDeviceType,
+        [in] LONG lFlags,
+        [retval, out] BSTR *pbstrDeviceID);
+
+    HRESULT GetImageDlg(
+        [in] HWND hwndParent,
+        [in] LONG lDeviceType,
+        [in] LONG lFlags,
+        [in] LONG lIntent,
+        [in] IWiaItem *pItemRoot,
+        [in] BSTR bstrFilename,
+        [in, out] GUID *pguidFormat);
+
+    HRESULT RegisterEventCallbackProgram(
+        [in] LONG lFlags,
+        [in] BSTR bstrDeviceID,
+        [in] const GUID *pEventGUID,
+        [in] BSTR bstrCommandline,
+        [in] BSTR bstrName,
+        [in] BSTR bstrDescription,
+        [in] BSTR bstrIcon);
+
+    HRESULT RegisterEventCallbackInterface(
+        [in] LONG lFlags,
+        [in] BSTR bstrDeviceID,
+        [in] const GUID *pEventGUID,
+        [unique, in] IWiaEventCallback *pIWiaEventCallback,
+        [out] IUnknown **pEventObject);
+
+    HRESULT RegisterEventCallbackCLSID(
+        [in] LONG lFlags,
+        [in] BSTR bstrDeviceID,
+        [in] const GUID *pEventGUID,
+        [unique, in] const GUID *pClsID,
+        [in] BSTR bstrName,
+        [in] BSTR bstrDescription,
+        [in] BSTR bstrIcon);
+
+    HRESULT AddDeviceDlg(
+        [in] HWND hwndParent,
+        [in] LONG lFlags);
+}
+
+[
+    object,
+    uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811)
+]
+interface IEnumWIA_DEV_INFO : IUnknown
+{
+    /* fill in */
+}
+
+[
+    object,
+    uuid(4db1ad10-3391-11d2-9a33-00c04fa36145)
+]
+interface IWiaItem : IUnknown
+{
+    /* FIXME: fill in */
+}
+
+[
+    object,
+    uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e)
+]
+interface IWiaEventCallback : IUnknown
+{
+    HRESULT ImageEventCallback(
+        [in] const GUID *pEventGUID,
+        [in] BSTR bstrEventDescription,
+        [in] BSTR bstrDeviceID,
+        [in] BSTR bstrDeviceDescription,
+        [in] DWORD dwDeviceType,
+        [in] BSTR bstrFullItemName,
+        [in,out] ULONG *pulEventType,
+        [in] ULONG ulReserved);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl
new file mode 100644
index 0000000..50d09da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2009 Damjan Jovanovic
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "propidl.idl";
+
+interface IEnumWIA_DEV_INFO;
+interface IWiaItem;
+interface IWiaEventCallback;
+
+cpp_quote("DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);")
+
+[
+    object,
+    uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811)
+]
+interface IWiaDevMgr : IUnknown
+{
+    HRESULT EnumDeviceInfo(
+        [in] LONG lFlag,
+        [retval, out] IEnumWIA_DEV_INFO **ppIEnum);
+
+    HRESULT CreateDevice(
+        [in] BSTR bstrDeviceID,
+        [out] IWiaItem **ppWiaItemRoot);
+
+    HRESULT SelectDeviceDlg(
+        [in] HWND hwndParent,
+        [in] LONG lDeviceType,
+        [in] LONG lFlags,
+        [in, out] BSTR *pbstrDeviceID,
+        [retval, out] IWiaItem **ppItemRoot);
+
+    HRESULT SelectDeviceDlgID(
+        [in] HWND hwndParent,
+        [in] LONG lDeviceType,
+        [in] LONG lFlags,
+        [retval, out] BSTR *pbstrDeviceID);
+
+    HRESULT GetImageDlg(
+        [in] HWND hwndParent,
+        [in] LONG lDeviceType,
+        [in] LONG lFlags,
+        [in] LONG lIntent,
+        [in] IWiaItem *pItemRoot,
+        [in] BSTR bstrFilename,
+        [in, out] GUID *pguidFormat);
+
+    HRESULT RegisterEventCallbackProgram(
+        [in] LONG lFlags,
+        [in] BSTR bstrDeviceID,
+        [in] const GUID *pEventGUID,
+        [in] BSTR bstrCommandline,
+        [in] BSTR bstrName,
+        [in] BSTR bstrDescription,
+        [in] BSTR bstrIcon);
+
+    HRESULT RegisterEventCallbackInterface(
+        [in] LONG lFlags,
+        [in] BSTR bstrDeviceID,
+        [in] const GUID *pEventGUID,
+        [unique, in] IWiaEventCallback *pIWiaEventCallback,
+        [out] IUnknown **pEventObject);
+
+    HRESULT RegisterEventCallbackCLSID(
+        [in] LONG lFlags,
+        [in] BSTR bstrDeviceID,
+        [in] const GUID *pEventGUID,
+        [unique, in] const GUID *pClsID,
+        [in] BSTR bstrName,
+        [in] BSTR bstrDescription,
+        [in] BSTR bstrIcon);
+
+    HRESULT AddDeviceDlg(
+        [in] HWND hwndParent,
+        [in] LONG lFlags);
+}
+
+[
+    object,
+    uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811)
+]
+interface IEnumWIA_DEV_INFO : IUnknown
+{
+    /* fill in */
+}
+
+[
+    object,
+    uuid(4db1ad10-3391-11d2-9a33-00c04fa36145)
+]
+interface IWiaItem : IUnknown
+{
+    /* FIXME: fill in */
+}
+
+[
+    object,
+    uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e)
+]
+interface IWiaEventCallback : IUnknown
+{
+    HRESULT ImageEventCallback(
+        [in] const GUID *pEventGUID,
+        [in] BSTR bstrEventDescription,
+        [in] BSTR bstrDeviceID,
+        [in] BSTR bstrDeviceDescription,
+        [in] DWORD dwDeviceType,
+        [in] BSTR bstrFullItemName,
+        [in,out] ULONG *pulEventType,
+        [in] ULONG ulReserved);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h
new file mode 100644
index 0000000..c63ad3c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h
@@ -0,0 +1,2825 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINBASE_H
+#define __WINE_WINBASE_H
+
+#include <winerror.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _KERNEL32_
+#define WINBASEAPI
+#else
+#define WINBASEAPI DECLSPEC_IMPORT
+#endif
+
+#ifdef _ADVAPI32_
+#define WINADVAPI
+#else
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+  /* Windows Exit Procedure flag values */
+#define	WEP_FREE_DLL        0
+#define	WEP_SYSTEM_EXIT     1
+
+typedef DWORD (CALLBACK *LPTHREAD_START_ROUTINE)(LPVOID);
+
+typedef VOID (WINAPI *PFIBER_START_ROUTINE)( LPVOID lpFiberParameter );
+typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE;
+
+#define FIBER_FLAG_FLOAT_SWITCH     1
+
+typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
+typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
+typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
+
+typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
+typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
+typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
+
+#define CRITICAL_SECTION_NO_DEBUG_INFO RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO
+
+typedef RTL_SRWLOCK SRWLOCK;
+typedef PRTL_SRWLOCK PSRWLOCK;
+
+#define SRWLOCK_INIT RTL_SRWLOCK_INIT
+
+typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;
+
+#define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT
+#define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED
+typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;
+
+#define EXCEPTION_DEBUG_EVENT       1
+#define CREATE_THREAD_DEBUG_EVENT   2
+#define CREATE_PROCESS_DEBUG_EVENT  3
+#define EXIT_THREAD_DEBUG_EVENT     4
+#define EXIT_PROCESS_DEBUG_EVENT    5
+#define LOAD_DLL_DEBUG_EVENT        6
+#define UNLOAD_DLL_DEBUG_EVENT      7
+#define OUTPUT_DEBUG_STRING_EVENT   8
+#define RIP_EVENT                   9
+
+typedef struct _EXCEPTION_DEBUG_INFO {
+    EXCEPTION_RECORD ExceptionRecord;
+    DWORD dwFirstChance;
+} EXCEPTION_DEBUG_INFO;
+
+typedef struct _CREATE_THREAD_DEBUG_INFO {
+    HANDLE hThread;
+    LPVOID lpThreadLocalBase;
+    LPTHREAD_START_ROUTINE lpStartAddress;
+} CREATE_THREAD_DEBUG_INFO;
+
+typedef struct _CREATE_PROCESS_DEBUG_INFO {
+    HANDLE hFile;
+    HANDLE hProcess;
+    HANDLE hThread;
+    LPVOID lpBaseOfImage;
+    DWORD dwDebugInfoFileOffset;
+    DWORD nDebugInfoSize;
+    LPVOID lpThreadLocalBase;
+    LPTHREAD_START_ROUTINE lpStartAddress;
+    LPVOID lpImageName;
+    WORD fUnicode;
+} CREATE_PROCESS_DEBUG_INFO;
+
+typedef struct _EXIT_THREAD_DEBUG_INFO {
+    DWORD dwExitCode;
+} EXIT_THREAD_DEBUG_INFO;
+
+typedef struct _EXIT_PROCESS_DEBUG_INFO {
+    DWORD dwExitCode;
+} EXIT_PROCESS_DEBUG_INFO;
+
+typedef struct _LOAD_DLL_DEBUG_INFO {
+    HANDLE hFile;
+    LPVOID   lpBaseOfDll;
+    DWORD    dwDebugInfoFileOffset;
+    DWORD    nDebugInfoSize;
+    LPVOID   lpImageName;
+    WORD     fUnicode;
+} LOAD_DLL_DEBUG_INFO;
+
+typedef struct _UNLOAD_DLL_DEBUG_INFO {
+    LPVOID lpBaseOfDll;
+} UNLOAD_DLL_DEBUG_INFO;
+
+typedef struct _OUTPUT_DEBUG_STRING_INFO {
+    LPSTR lpDebugStringData;
+    WORD  fUnicode;
+    WORD  nDebugStringLength;
+} OUTPUT_DEBUG_STRING_INFO;
+
+typedef struct _RIP_INFO {
+    DWORD dwError;
+    DWORD dwType;
+} RIP_INFO;
+
+typedef struct _DEBUG_EVENT {
+    DWORD dwDebugEventCode;
+    DWORD dwProcessId;
+    DWORD dwThreadId;
+    union {
+        EXCEPTION_DEBUG_INFO      Exception;
+        CREATE_THREAD_DEBUG_INFO  CreateThread;
+        CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
+        EXIT_THREAD_DEBUG_INFO    ExitThread;
+        EXIT_PROCESS_DEBUG_INFO   ExitProcess;
+        LOAD_DLL_DEBUG_INFO       LoadDll;
+        UNLOAD_DLL_DEBUG_INFO     UnloadDll;
+        OUTPUT_DEBUG_STRING_INFO  DebugString;
+        RIP_INFO                  RipInfo;
+    } u;
+} DEBUG_EVENT, *LPDEBUG_EVENT;
+
+typedef PCONTEXT LPCONTEXT;
+typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD;
+typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;
+
+typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS);
+typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
+
+#define OFS_MAXPATHNAME 128
+typedef struct _OFSTRUCT
+{
+    BYTE cBytes;
+    BYTE fFixedDisk;
+    WORD nErrCode;
+    WORD Reserved1;
+    WORD Reserved2;
+    CHAR szPathName[OFS_MAXPATHNAME];
+} OFSTRUCT, *POFSTRUCT, *LPOFSTRUCT;
+
+#define OF_READ               0x0000
+#define OF_WRITE              0x0001
+#define OF_READWRITE          0x0002
+#define OF_SHARE_COMPAT       0x0000
+#define OF_SHARE_EXCLUSIVE    0x0010
+#define OF_SHARE_DENY_WRITE   0x0020
+#define OF_SHARE_DENY_READ    0x0030
+#define OF_SHARE_DENY_NONE    0x0040
+#define OF_PARSE              0x0100
+#define OF_DELETE             0x0200
+#define OF_VERIFY             0x0400   /* Used with OF_REOPEN */
+#define OF_SEARCH             0x0400   /* Used without OF_REOPEN */
+#define OF_CANCEL             0x0800
+#define OF_CREATE             0x1000
+#define OF_PROMPT             0x2000
+#define OF_EXIST              0x4000
+#define OF_REOPEN             0x8000
+
+/* SetErrorMode values */
+#define SEM_FAILCRITICALERRORS      0x0001
+#define SEM_NOGPFAULTERRORBOX       0x0002
+#define SEM_NOALIGNMENTFAULTEXCEPT  0x0004
+#define SEM_NOOPENFILEERRORBOX      0x8000
+
+/* CopyFileEx flags */
+#define COPY_FILE_FAIL_IF_EXISTS        0x00000001
+#define COPY_FILE_RESTARTABLE           0x00000002
+#define COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x00000004
+#define COPY_FILE_ALLOW_DECRYPTED_DESTINATION  0x00000008
+#define COPY_FILE_COPY_SYMLINK          0x00000800
+#define COPY_FILE_NO_BUFFERING          0x00001000
+
+/* return values for CopyProgressRoutine */
+#define PROGRESS_CONTINUE   0
+#define PROGRESS_CANCEL     1
+#define PROGRESS_STOP       2
+#define PROGRESS_QUIET      3
+
+/* reason codes for CopyProgressRoutine */
+#define CALLBACK_CHUNK_FINISHED 0
+#define CALLBACK_STREAM_SWITCH  1
+
+/* GetTempFileName() Flags */
+#define TF_FORCEDRIVE	        0x80
+
+#define DRIVE_UNKNOWN              0
+#define DRIVE_NO_ROOT_DIR          1
+#define DRIVE_REMOVABLE            2
+#define DRIVE_FIXED                3
+#define DRIVE_REMOTE               4
+/* Win32 additions */
+#define DRIVE_CDROM                5
+#define DRIVE_RAMDISK              6
+
+#define MAX_COMPUTERNAME_LENGTH    15
+
+/* The security attributes structure */
+typedef struct _SECURITY_ATTRIBUTES
+{
+    DWORD   nLength;
+    LPVOID  lpSecurityDescriptor;
+    BOOL  bInheritHandle;
+} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+
+#ifndef _FILETIME_
+#define _FILETIME_
+/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
+typedef struct _FILETIME
+{
+#ifdef WORDS_BIGENDIAN
+  DWORD  dwHighDateTime;
+  DWORD  dwLowDateTime;
+#else
+  DWORD  dwLowDateTime;
+  DWORD  dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#endif /* _FILETIME_ */
+
+/* Find* structures */
+typedef struct _WIN32_FIND_DATAA
+{
+    DWORD     dwFileAttributes;
+    FILETIME  ftCreationTime;
+    FILETIME  ftLastAccessTime;
+    FILETIME  ftLastWriteTime;
+    DWORD     nFileSizeHigh;
+    DWORD     nFileSizeLow;
+    DWORD     dwReserved0;
+    DWORD     dwReserved1;
+    CHAR      cFileName[260];
+    CHAR      cAlternateFileName[14];
+} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAW
+{
+    DWORD     dwFileAttributes;
+    FILETIME  ftCreationTime;
+    FILETIME  ftLastAccessTime;
+    FILETIME  ftLastWriteTime;
+    DWORD     nFileSizeHigh;
+    DWORD     nFileSizeLow;
+    DWORD     dwReserved0;
+    DWORD     dwReserved1;
+    WCHAR     cFileName[260];
+    WCHAR     cAlternateFileName[14];
+} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
+
+DECL_WINELIB_TYPE_AW(WIN32_FIND_DATA)
+DECL_WINELIB_TYPE_AW(PWIN32_FIND_DATA)
+DECL_WINELIB_TYPE_AW(LPWIN32_FIND_DATA)
+
+typedef enum _FINDEX_INFO_LEVELS
+{
+	FindExInfoStandard,
+	FindExInfoMaxInfoLevel
+} FINDEX_INFO_LEVELS;
+
+typedef enum _FINDEX_SEARCH_OPS
+{
+	FindExSearchNameMatch,
+	FindExSearchLimitToDirectories,
+	FindExSearchLimitToDevices,
+	FindExSearchMaxSearchOp
+} FINDEX_SEARCH_OPS;
+
+typedef struct _PROCESS_HEAP_ENTRY
+{
+    LPVOID lpData;
+    DWORD cbData;
+    BYTE cbOverhead;
+    BYTE iRegionIndex;
+    WORD wFlags;
+    union {
+        struct {
+            HANDLE hMem;
+            DWORD dwReserved[3];
+        } Block;
+        struct {
+            DWORD dwCommittedSize;
+            DWORD dwUnCommittedSize;
+            LPVOID lpFirstBlock;
+            LPVOID lpLastBlock;
+        } Region;
+    } DUMMYUNIONNAME;
+} PROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY;
+
+#define PROCESS_HEAP_REGION                   0x0001
+#define PROCESS_HEAP_UNCOMMITTED_RANGE        0x0002
+#define PROCESS_HEAP_ENTRY_BUSY               0x0004
+#define PROCESS_HEAP_ENTRY_MOVEABLE           0x0010
+#define PROCESS_HEAP_ENTRY_DDESHARE           0x0020
+
+#define INVALID_HANDLE_VALUE     ((HANDLE)~(ULONG_PTR)0)
+#define INVALID_FILE_SIZE        (~0u)
+#define INVALID_SET_FILE_POINTER (~0u)
+#define INVALID_FILE_ATTRIBUTES  (~0u)
+
+#define LOCKFILE_FAIL_IMMEDIATELY   1
+#define LOCKFILE_EXCLUSIVE_LOCK     2
+
+#define FLS_OUT_OF_INDEXES (~0u)
+#define TLS_OUT_OF_INDEXES (~0u)
+
+#define SHUTDOWN_NORETRY 1
+
+/* comm */
+
+#define CBR_110	0xFF10
+#define CBR_300	0xFF11
+#define CBR_600	0xFF12
+#define CBR_1200	0xFF13
+#define CBR_2400	0xFF14
+#define CBR_4800	0xFF15
+#define CBR_9600	0xFF16
+#define CBR_14400	0xFF17
+#define CBR_19200	0xFF18
+#define CBR_38400	0xFF1B
+#define CBR_56000	0xFF1F
+#define CBR_57600       0xFF20
+#define CBR_115200      0xFF21
+#define CBR_128000	0xFF23
+#define CBR_256000	0xFF27
+
+#define NOPARITY	0
+#define ODDPARITY	1
+#define EVENPARITY	2
+#define MARKPARITY	3
+#define SPACEPARITY	4
+#define ONESTOPBIT	0
+#define ONE5STOPBITS	1
+#define TWOSTOPBITS	2
+
+#define IGNORE		0
+#define INFINITE      0xFFFFFFFF
+
+#define CE_RXOVER	0x0001
+#define CE_OVERRUN	0x0002
+#define CE_RXPARITY	0x0004
+#define CE_FRAME	0x0008
+#define CE_BREAK	0x0010
+#define CE_CTSTO	0x0020
+#define CE_DSRTO	0x0040
+#define CE_RLSDTO	0x0080
+#define CE_TXFULL	0x0100
+#define CE_PTO		0x0200
+#define CE_IOE		0x0400
+#define CE_DNS		0x0800
+#define CE_OOP		0x1000
+#define CE_MODE	0x8000
+
+#define IE_BADID	-1
+#define IE_OPEN	-2
+#define IE_NOPEN	-3
+#define IE_MEMORY	-4
+#define IE_DEFAULT	-5
+#define IE_HARDWARE	-10
+#define IE_BYTESIZE	-11
+#define IE_BAUDRATE	-12
+
+#define EV_RXCHAR    0x0001
+#define EV_RXFLAG    0x0002
+#define EV_TXEMPTY   0x0004
+#define EV_CTS       0x0008
+#define EV_DSR       0x0010
+#define EV_RLSD      0x0020
+#define EV_BREAK     0x0040
+#define EV_ERR       0x0080
+#define EV_RING      0x0100
+#define EV_PERR      0x0200
+#define EV_RX80FULL  0x0400
+#define EV_EVENT1    0x0800
+#define EV_EVENT2    0x1000
+
+#define SETXOFF	1
+#define SETXON		2
+#define SETRTS		3
+#define CLRRTS		4
+#define SETDTR		5
+#define CLRDTR		6
+#define RESETDEV	7
+#define SETBREAK	8
+#define CLRBREAK	9
+
+/* Purge functions for Comm Port */
+#define PURGE_TXABORT       0x0001  /* Kill the pending/current writes to the
+				       comm port */
+#define PURGE_RXABORT       0x0002  /*Kill the pending/current reads to
+				     the comm port */
+#define PURGE_TXCLEAR       0x0004  /* Kill the transmit queue if there*/
+#define PURGE_RXCLEAR       0x0008  /* Kill the typeahead buffer if there*/
+
+
+/* Modem Status Flags */
+#define MS_CTS_ON           ((DWORD)0x0010)
+#define MS_DSR_ON           ((DWORD)0x0020)
+#define MS_RING_ON          ((DWORD)0x0040)
+#define MS_RLSD_ON          ((DWORD)0x0080)
+
+#define	RTS_CONTROL_DISABLE	0
+#define	RTS_CONTROL_ENABLE	1
+#define	RTS_CONTROL_HANDSHAKE	2
+#define	RTS_CONTROL_TOGGLE	3
+
+#define	DTR_CONTROL_DISABLE	0
+#define	DTR_CONTROL_ENABLE	1
+#define	DTR_CONTROL_HANDSHAKE	2
+
+
+#define LMEM_FIXED          0
+#define LMEM_MOVEABLE       0x0002
+#define LMEM_NOCOMPACT      0x0010
+#define LMEM_NODISCARD      0x0020
+#define LMEM_ZEROINIT       0x0040
+#define LMEM_MODIFY         0x0080
+#define LMEM_DISCARDABLE    0x0F00
+#define LMEM_DISCARDED      0x4000
+#define LMEM_INVALID_HANDLE 0x8000
+#define LMEM_LOCKCOUNT      0x00FF
+
+#define LPTR (LMEM_FIXED | LMEM_ZEROINIT)
+#define LHND (LMEM_MOVEABLE | LMEM_ZEROINIT)
+
+#define NONZEROLHND         (LMEM_MOVEABLE)
+#define NONZEROLPTR         (LMEM_FIXED)
+
+#define LocalDiscard(h)     (LocalReAlloc((h),0,LMEM_MOVEABLE))
+
+#define GMEM_FIXED          0x0000
+#define GMEM_MOVEABLE       0x0002
+#define GMEM_NOCOMPACT      0x0010
+#define GMEM_NODISCARD      0x0020
+#define GMEM_ZEROINIT       0x0040
+#define GMEM_MODIFY         0x0080
+#define GMEM_DISCARDABLE    0x0100
+#define GMEM_NOT_BANKED     0x1000
+#define GMEM_SHARE          0x2000
+#define GMEM_DDESHARE       0x2000
+#define GMEM_NOTIFY         0x4000
+#define GMEM_LOWER          GMEM_NOT_BANKED
+#define GMEM_DISCARDED      0x4000
+#define GMEM_LOCKCOUNT      0x00ff
+#define GMEM_INVALID_HANDLE 0x8000
+
+#define GHND                (GMEM_MOVEABLE | GMEM_ZEROINIT)
+#define GPTR                (GMEM_FIXED | GMEM_ZEROINIT)
+
+#define GlobalLRUNewest(h)  ((HANDLE)(h))
+#define GlobalLRUOldest(h)  ((HANDLE)(h))
+#define GlobalDiscard(h)    (GlobalReAlloc((h),0,GMEM_MOVEABLE))
+
+#define INVALID_ATOM        ((ATOM)0)
+#define MAXINTATOM          0xc000
+#ifdef WINE_NO_UNICODE_MACROS /* force using a cast */
+#define MAKEINTATOM(atom)   ((ULONG_PTR)((WORD)(atom)))
+#else
+#define MAKEINTATOM(atom)   ((LPTSTR)((ULONG_PTR)((WORD)(atom))))
+#endif
+
+typedef struct tagMEMORYSTATUS
+{
+    DWORD    dwLength;
+    DWORD    dwMemoryLoad;
+    SIZE_T   dwTotalPhys;
+    SIZE_T   dwAvailPhys;
+    SIZE_T   dwTotalPageFile;
+    SIZE_T   dwAvailPageFile;
+    SIZE_T   dwTotalVirtual;
+    SIZE_T   dwAvailVirtual;
+} MEMORYSTATUS, *LPMEMORYSTATUS;
+
+#include <pshpack8.h>
+typedef struct tagMEMORYSTATUSEX {
+  DWORD dwLength;
+  DWORD dwMemoryLoad;
+  DWORDLONG DECLSPEC_ALIGN(8) ullTotalPhys;
+  DWORDLONG DECLSPEC_ALIGN(8) ullAvailPhys;
+  DWORDLONG DECLSPEC_ALIGN(8) ullTotalPageFile;
+  DWORDLONG DECLSPEC_ALIGN(8) ullAvailPageFile;
+  DWORDLONG DECLSPEC_ALIGN(8) ullTotalVirtual;
+  DWORDLONG DECLSPEC_ALIGN(8) ullAvailVirtual;
+  DWORDLONG DECLSPEC_ALIGN(8) ullAvailExtendedVirtual;
+} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
+#include <poppack.h>
+
+typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE {
+    LowMemoryResourceNotification,
+    HighMemoryResourceNotification
+} MEMORY_RESOURCE_NOTIFICATION_TYPE;
+
+#ifndef _SYSTEMTIME_
+#define _SYSTEMTIME_
+typedef struct _SYSTEMTIME{
+        WORD wYear;
+        WORD wMonth;
+        WORD wDayOfWeek;
+        WORD wDay;
+        WORD wHour;
+        WORD wMinute;
+        WORD wSecond;
+        WORD wMilliseconds;
+} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
+#endif /* _SYSTEMTIME_ */
+
+/* The 'overlapped' data structure used by async I/O functions.
+ */
+typedef struct _OVERLAPPED {
+#ifdef WORDS_BIGENDIAN
+        ULONG_PTR InternalHigh;
+        ULONG_PTR Internal;
+#else
+        ULONG_PTR Internal;
+        ULONG_PTR InternalHigh;
+#endif
+        union {
+            struct {
+#ifdef WORDS_BIGENDIAN
+                DWORD OffsetHigh;
+                DWORD Offset;
+#else
+                DWORD Offset;
+                DWORD OffsetHigh;
+#endif
+            } DUMMYSTRUCTNAME;
+            PVOID Pointer;
+        } DUMMYUNIONNAME;
+        HANDLE hEvent;
+} OVERLAPPED, *LPOVERLAPPED;
+
+typedef VOID (CALLBACK *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPOVERLAPPED);
+
+/* Process startup information.
+ */
+
+/* STARTUPINFO.dwFlags */
+#define	STARTF_USESHOWWINDOW	0x00000001
+#define	STARTF_USESIZE		0x00000002
+#define	STARTF_USEPOSITION	0x00000004
+#define	STARTF_USECOUNTCHARS	0x00000008
+#define	STARTF_USEFILLATTRIBUTE	0x00000010
+#define	STARTF_RUNFULLSCREEN	0x00000020
+#define	STARTF_FORCEONFEEDBACK	0x00000040
+#define	STARTF_FORCEOFFFEEDBACK	0x00000080
+#define	STARTF_USESTDHANDLES	0x00000100
+#define	STARTF_USEHOTKEY	0x00000200
+
+typedef struct _STARTUPINFOA{
+        DWORD cb;		/* 00: size of struct */
+        LPSTR lpReserved;	/* 04: */
+        LPSTR lpDesktop;	/* 08: */
+        LPSTR lpTitle;		/* 0c: */
+        DWORD dwX;		/* 10: */
+        DWORD dwY;		/* 14: */
+        DWORD dwXSize;		/* 18: */
+        DWORD dwYSize;		/* 1c: */
+        DWORD dwXCountChars;	/* 20: */
+        DWORD dwYCountChars;	/* 24: */
+        DWORD dwFillAttribute;	/* 28: */
+        DWORD dwFlags;		/* 2c: */
+        WORD wShowWindow;	/* 30: */
+        WORD cbReserved2;	/* 32: */
+        BYTE *lpReserved2;	/* 34: */
+        HANDLE hStdInput;	/* 38: */
+        HANDLE hStdOutput;	/* 3c: */
+        HANDLE hStdError;	/* 40: */
+} STARTUPINFOA, *LPSTARTUPINFOA;
+
+typedef struct _STARTUPINFOW{
+        DWORD cb;
+        LPWSTR lpReserved;
+        LPWSTR lpDesktop;
+        LPWSTR lpTitle;
+        DWORD dwX;
+        DWORD dwY;
+        DWORD dwXSize;
+        DWORD dwYSize;
+        DWORD dwXCountChars;
+        DWORD dwYCountChars;
+        DWORD dwFillAttribute;
+        DWORD dwFlags;
+        WORD wShowWindow;
+        WORD cbReserved2;
+        BYTE *lpReserved2;
+        HANDLE hStdInput;
+        HANDLE hStdOutput;
+        HANDLE hStdError;
+} STARTUPINFOW, *LPSTARTUPINFOW;
+
+DECL_WINELIB_TYPE_AW(STARTUPINFO)
+DECL_WINELIB_TYPE_AW(LPSTARTUPINFO)
+
+typedef struct _PROCESS_INFORMATION{
+	HANDLE	hProcess;
+	HANDLE	hThread;
+	DWORD		dwProcessId;
+	DWORD		dwThreadId;
+} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+
+typedef struct _TIME_DYNAMIC_ZONE_INFORMATION
+{
+    LONG Bias;
+    WCHAR StandardName[32];
+    SYSTEMTIME StandardDate;
+    LONG StandardBias;
+    WCHAR DaylightName[32];
+    SYSTEMTIME DaylightDate;
+    LONG DaylightBias;
+    WCHAR TimeZoneKeyName[128];
+    BOOLEAN DynamicDaylightTimeDisabled;
+} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION;
+
+typedef struct _TIME_ZONE_INFORMATION{
+        LONG Bias;
+        WCHAR StandardName[32];
+        SYSTEMTIME StandardDate;
+        LONG StandardBias;
+        WCHAR DaylightName[32];
+        SYSTEMTIME DaylightDate;
+        LONG DaylightBias;
+} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
+
+#define TIME_ZONE_ID_INVALID	((DWORD)0xFFFFFFFF)
+#define TIME_ZONE_ID_UNKNOWN    0
+#define TIME_ZONE_ID_STANDARD   1
+#define TIME_ZONE_ID_DAYLIGHT   2
+
+/* CreateProcess: dwCreationFlag values
+ */
+#define DEBUG_PROCESS               0x00000001
+#define DEBUG_ONLY_THIS_PROCESS     0x00000002
+#define CREATE_SUSPENDED            0x00000004
+#define DETACHED_PROCESS            0x00000008
+#define CREATE_NEW_CONSOLE          0x00000010
+#define NORMAL_PRIORITY_CLASS       0x00000020
+#define IDLE_PRIORITY_CLASS         0x00000040
+#define HIGH_PRIORITY_CLASS         0x00000080
+#define REALTIME_PRIORITY_CLASS     0x00000100
+#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
+#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
+#define CREATE_NEW_PROCESS_GROUP    0x00000200
+#define CREATE_UNICODE_ENVIRONMENT  0x00000400
+#define CREATE_SEPARATE_WOW_VDM     0x00000800
+#define CREATE_SHARED_WOW_VDM       0x00001000
+#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
+#define CREATE_DEFAULT_ERROR_MODE   0x04000000
+#define CREATE_NO_WINDOW            0x08000000
+#define PROFILE_USER                0x10000000
+#define PROFILE_KERNEL              0x20000000
+#define PROFILE_SERVER              0x40000000
+
+
+/* File object type definitions
+ */
+#define FILE_TYPE_UNKNOWN       0
+#define FILE_TYPE_DISK          1
+#define FILE_TYPE_CHAR          2
+#define FILE_TYPE_PIPE          3
+#define FILE_TYPE_REMOTE        32768
+
+/* File encryption status
+ */
+#define FILE_ENCRYPTABLE         0
+#define FILE_IS_ENCRYPTED        1
+#define FILE_SYSTEM_ATTR         2
+#define FILE_ROOT_DIR            3
+#define FILE_SYSTEM_DIR          4
+#define FILE_UNKNOWN             5
+#define FILE_SYSTEM_NOT_SUPPORT  6
+#define FILE_USER_DISALLOWED     7
+#define FILE_READ_ONLY           8
+#define FILE_DIR_DISALOWED       9
+
+/* File creation flags
+ */
+#define FILE_FLAG_WRITE_THROUGH         0x80000000
+#define FILE_FLAG_OVERLAPPED            0x40000000
+#define FILE_FLAG_NO_BUFFERING          0x20000000
+#define FILE_FLAG_RANDOM_ACCESS         0x10000000
+#define FILE_FLAG_SEQUENTIAL_SCAN       0x08000000
+#define FILE_FLAG_DELETE_ON_CLOSE       0x04000000
+#define FILE_FLAG_BACKUP_SEMANTICS      0x02000000
+#define FILE_FLAG_POSIX_SEMANTICS       0x01000000
+#define FILE_FLAG_OPEN_REPARSE_POINT    0x00200000
+#define FILE_FLAG_OPEN_NO_RECALL        0x00100000
+#define FILE_FLAG_FIRST_PIPE_INSTANCE   0x00080000
+
+#define CREATE_NEW              1
+#define CREATE_ALWAYS           2
+#define OPEN_EXISTING           3
+#define OPEN_ALWAYS             4
+#define TRUNCATE_EXISTING       5
+
+/* Standard handle identifiers
+ */
+#define STD_INPUT_HANDLE        ((DWORD) -10)
+#define STD_OUTPUT_HANDLE       ((DWORD) -11)
+#define STD_ERROR_HANDLE        ((DWORD) -12)
+
+typedef struct _BY_HANDLE_FILE_INFORMATION
+{
+  DWORD dwFileAttributes;
+  FILETIME ftCreationTime;
+  FILETIME ftLastAccessTime;
+  FILETIME ftLastWriteTime;
+  DWORD dwVolumeSerialNumber;
+  DWORD nFileSizeHigh;
+  DWORD nFileSizeLow;
+  DWORD nNumberOfLinks;
+  DWORD nFileIndexHigh;
+  DWORD nFileIndexLow;
+} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION ;
+
+typedef enum _FILE_ID_TYPE {
+    FileIdType,
+    ObjectIdType,
+    ExtendedFileIdType,
+    MaximumFileIdType
+} FILE_ID_TYPE, *PFILE_ID_TYPE;
+
+typedef struct _FILE_ID_DESCRIPTOR {
+    DWORD        dwSize;
+    FILE_ID_TYPE Type;
+    union {
+        LARGE_INTEGER FileId;
+        GUID          ObjectId;
+    } DUMMYUNIONNAME;
+} FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;
+
+typedef enum _FILE_INFO_BY_HANDLE_CLASS {
+    FileBasicInfo,
+    FileStandardInfo,
+    FileNameInfo,
+    FileRenameInfo,
+    FileDispositionInfo,
+    FileAllocationInfo,
+    FileEndOfFileInfo,
+    FileStreamInfo,
+    FileCompressionInfo,
+    FileAttributeTagInfo,
+    FileIdBothDirectoryInfo,
+    FileIdBothDirectoryRestartInfo,
+    FileIoPriorityHintInfo,
+    FileRemoteProtocolInfo,
+    FileFullDirectoryInfo,
+    FileFullDirectoryRestartInfo,
+    FileStorageInfo,
+    FileAlignmentInfo,
+    FileIdInfo,
+    FileIdExtdDirectoryInfo,
+    FileIdExtdDirectoryRestartInfo,
+    MaximumFileInfoByHandlesClass
+} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
+
+typedef struct _FILE_ID_BOTH_DIR_INFO {
+    DWORD         NextEntryOffset;
+    DWORD         FileIndex;
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER EndOfFile;
+    LARGE_INTEGER AllocationSize;
+    DWORD         FileAttributes;
+    DWORD         FileNameLength;
+    DWORD         EaSize;
+    CCHAR         ShortNameLength;
+    WCHAR         ShortName[12];
+    LARGE_INTEGER FileId;
+    WCHAR         FileName[1];
+} FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO;
+
+#define PIPE_ACCESS_INBOUND  1
+#define PIPE_ACCESS_OUTBOUND 2
+#define PIPE_ACCESS_DUPLEX   3
+
+#define PIPE_CLIENT_END       0
+#define PIPE_SERVER_END       1
+#define PIPE_READMODE_BYTE    0
+#define PIPE_READMODE_MESSAGE 2
+#define PIPE_TYPE_BYTE        0
+#define PIPE_TYPE_MESSAGE     4
+
+#define PIPE_WAIT   0
+#define PIPE_NOWAIT 1
+
+#define PIPE_UNLIMITED_INSTANCES 255
+
+#define NMPWAIT_WAIT_FOREVER		0xffffffff
+#define NMPWAIT_NOWAIT			0x00000001
+#define NMPWAIT_USE_DEFAULT_WAIT	0x00000000
+
+/* Security flags for dwFlagsAndAttributes of CreateFile */
+#define SECURITY_ANONYMOUS          (SecurityAnonymous << 16)
+#define SECURITY_IDENTIFICATION     (SecurityIdentification << 16)
+#define SECURITY_IMPERSONATION      (SecurityImpersonation << 16)
+#define SECURITY_DELEGATION         (SecurityDelegation << 16)
+
+#define SECURITY_CONTEXT_TRACKING   0x00040000
+#define SECURITY_EFFECTIVE_ONLY     0x00080000
+
+#define SECURITY_SQOS_PRESENT       0x00100000
+#define SECURITY_VALID_SQOS_FLAGS   0x001f0000
+
+typedef struct _SYSTEM_POWER_STATUS
+{
+  BYTE    ACLineStatus;
+  BYTE    BatteryFlag;
+  BYTE    BatteryLifePercent;
+  BYTE    Reserved1;
+  DWORD   BatteryLifeTime;
+  DWORD   BatteryFullLifeTime;
+} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;
+
+
+typedef struct _SYSTEM_INFO
+{
+    union {
+	DWORD	dwOemId; /* Obsolete field - do not use */
+	struct {
+		WORD wProcessorArchitecture;
+		WORD wReserved;
+	} DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    DWORD	dwPageSize;
+    LPVOID	lpMinimumApplicationAddress;
+    LPVOID	lpMaximumApplicationAddress;
+    DWORD_PTR	dwActiveProcessorMask;
+    DWORD	dwNumberOfProcessors;
+    DWORD	dwProcessorType;
+    DWORD	dwAllocationGranularity;
+    WORD	wProcessorLevel;
+    WORD	wProcessorRevision;
+} SYSTEM_INFO, *LPSYSTEM_INFO;
+
+typedef BOOL (CALLBACK *ENUMRESTYPEPROCA)(HMODULE,LPSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESTYPEPROCW)(HMODULE,LPWSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESNAMEPROCA)(HMODULE,LPCSTR,LPSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESNAMEPROCW)(HMODULE,LPCWSTR,LPWSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESLANGPROCA)(HMODULE,LPCSTR,LPCSTR,WORD,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESLANGPROCW)(HMODULE,LPCWSTR,LPCWSTR,WORD,LONG_PTR);
+
+DECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC)
+DECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC)
+DECL_WINELIB_TYPE_AW(ENUMRESLANGPROC)
+
+/* flags that can be passed to LoadLibraryEx */
+#define DONT_RESOLVE_DLL_REFERENCES         0x00000001
+#define LOAD_LIBRARY_AS_DATAFILE            0x00000002
+#define LOAD_WITH_ALTERED_SEARCH_PATH       0x00000008
+#define LOAD_IGNORE_CODE_AUTHZ_LEVEL        0x00000010
+#define LOAD_LIBRARY_AS_IMAGE_RESOURCE      0x00000020
+#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE  0x00000040
+#define LOAD_LIBRARY_REQUIRE_SIGNED_TARGET  0x00000080
+
+#define GET_MODULE_HANDLE_EX_FLAG_PIN                 1
+#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT  2
+#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS        4
+
+typedef PLDT_ENTRY LPLDT_ENTRY;
+
+typedef enum _GET_FILEEX_INFO_LEVELS {
+    GetFileExInfoStandard
+} GET_FILEEX_INFO_LEVELS;
+
+typedef struct _WIN32_FILE_ATTRIBUTES_DATA {
+    DWORD    dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD    nFileSizeHigh;
+    DWORD    nFileSizeLow;
+} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
+
+/*
+ * This one seems to be a Win32 only definition. It also is defined with
+ * WINAPI instead of CALLBACK in the windows headers.
+ */
+typedef DWORD (CALLBACK *LPPROGRESS_ROUTINE)(LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER,
+                                           LARGE_INTEGER, DWORD, DWORD, HANDLE,
+                                           HANDLE, LPVOID);
+
+typedef DWORD (WINAPI *APPLICATION_RECOVERY_CALLBACK)(PVOID);
+
+typedef enum _COPYFILE2_MESSAGE_TYPE
+{
+    COPYFILE2_CALLBACK_NONE = 0,
+    COPYFILE2_CALLBACK_CHUNK_STARTED,
+    COPYFILE2_CALLBACK_CHUNK_FINISHED,
+    COPYFILE2_CALLBACK_STREAM_STARTED,
+    COPYFILE2_CALLBACK_STREAM_FINISHED,
+    COPYFILE2_CALLBACK_POLL_CONTINUE,
+    COPYFILE2_CALLBACK_ERROR,
+    COPYFILE2_CALLBACK_MAX,
+} COPYFILE2_MESSAGE_TYPE;
+
+typedef enum _COPYFILE2_MESSAGE_ACTION
+{
+    COPYFILE2_PROGRESS_CONTINUE = 0,
+    COPYFILE2_PROGRESS_CANCEL,
+    COPYFILE2_PROGRESS_STOP,
+    COPYFILE2_PROGRESS_QUIET,
+    COPYFILE2_PROGRESS_PAUSE,
+} COPYFILE2_MESSAGE_ACTION;
+
+typedef enum _COPYFILE2_COPY_PHASE
+{
+    COPYFILE2_PHASE_NONE = 0,
+    COPYFILE2_PHASE_PREPARE_SOURCE,
+    COPYFILE2_PHASE_PREPARE_DEST,
+    COPYFILE2_PHASE_READ_SOURCE,
+    COPYFILE2_PHASE_WRITE_DESTINATION,
+    COPYFILE2_PHASE_SERVER_COPY,
+    COPYFILE2_PHASE_NAMEGRAFT_COPY,
+    COPYFILE2_PHASE_MAX,
+} COPYFILE2_COPY_PHASE;
+
+typedef struct COPYFILE2_MESSAGE
+{
+    COPYFILE2_MESSAGE_TYPE Type;
+    DWORD                  dwPadding;
+    union
+    {
+        struct
+        {
+            DWORD          dwStreamNumber;
+            DWORD          dwReserved;
+            HANDLE         hSourceFile;
+            HANDLE         hDestinationFile;
+            ULARGE_INTEGER uliChunkNumber;
+            ULARGE_INTEGER uliChunkSize;
+            ULARGE_INTEGER uliStreamSize;
+            ULARGE_INTEGER uliTotalFileSize;
+        } ChunkStarted;
+        struct
+        {
+            DWORD          dwStreamNumber;
+            DWORD          dwFlags;
+            HANDLE         hSourceFile;
+            HANDLE         hDestinationFile;
+            ULARGE_INTEGER uliChunkNumber;
+            ULARGE_INTEGER uliChunkSize;
+            ULARGE_INTEGER uliStreamSize;
+            ULARGE_INTEGER uliStreamBytesTransferred;
+            ULARGE_INTEGER uliTotalFileSize;
+            ULARGE_INTEGER uliTotalBytesTransferred;
+        } ChunkFinished;
+        struct
+        {
+            DWORD          dwStreamNumber;
+            DWORD          dwReserved;
+            HANDLE         hSourceFile;
+            HANDLE         hDestinationFile;
+            ULARGE_INTEGER uliStreamSize;
+            ULARGE_INTEGER uliTotalFileSize;
+        } StreamStarted;
+        struct
+        {
+            DWORD          dwStreamNumber;
+            DWORD          dwReserved;
+            HANDLE         hSourceFile;
+            HANDLE         hDestinationFile;
+            ULARGE_INTEGER uliStreamSize;
+            ULARGE_INTEGER uliStreamBytesTransferred;
+            ULARGE_INTEGER uliTotalFileSize;
+            ULARGE_INTEGER uliTotalBytesTransferred;
+        } StreamFinished;
+        struct
+        {
+            DWORD dwReserved;
+        } PollContinue;
+        struct
+        {
+            COPYFILE2_COPY_PHASE CopyPhase;
+            DWORD                dwStreamNumber;
+            HRESULT              hrFailure;
+            DWORD                dwReserved;
+            ULARGE_INTEGER       uliChunkNumber;
+            ULARGE_INTEGER       uliStreamSize;
+            ULARGE_INTEGER       uliStreamBytesTransferred;
+            ULARGE_INTEGER       uliTotalFileSize;
+            ULARGE_INTEGER       uliTotalBytesTransferred;
+        } Error;
+    } Info;
+} COPYFILE2_MESSAGE;
+
+typedef COPYFILE2_MESSAGE_ACTION (CALLBACK *PCOPYFILE2_PROGRESS_ROUTINE)(const COPYFILE2_MESSAGE*,PVOID);
+
+typedef struct COPYFILE2_EXTENDED_PARAMETERS
+{
+    DWORD                        dwSize;
+    DWORD                        dwCopyFlags;
+    BOOL                        *pfCancel;
+    PCOPYFILE2_PROGRESS_ROUTINE  pProgressRoutine;
+    PVOID                        pvCallbackContext;
+} COPYFILE2_EXTENDED_PARAMETERS;
+
+#define CREATE_EVENT_MANUAL_RESET 1
+#define CREATE_EVENT_INITIAL_SET  2
+
+#define CREATE_MUTEX_INITIAL_OWNER 1
+
+#define CREATE_WAITABLE_TIMER_MANUAL_RESET 1
+
+#define WAIT_FAILED		0xffffffff
+#define WAIT_OBJECT_0		0
+#define WAIT_ABANDONED		STATUS_ABANDONED_WAIT_0
+#define WAIT_ABANDONED_0	STATUS_ABANDONED_WAIT_0
+#define WAIT_IO_COMPLETION	STATUS_USER_APC
+#define WAIT_TIMEOUT		STATUS_TIMEOUT
+#define STILL_ACTIVE            STATUS_PENDING
+
+#define FILE_BEGIN              0
+#define FILE_CURRENT            1
+#define FILE_END                2
+
+#define FILE_MAP_COPY                   0x00000001
+#define FILE_MAP_WRITE                  0x00000002
+#define FILE_MAP_READ                   0x00000004
+#define FILE_MAP_ALL_ACCESS             0x000f001f
+#define FILE_MAP_EXECUTE                0x00000020
+
+#define MOVEFILE_REPLACE_EXISTING       0x00000001
+#define MOVEFILE_COPY_ALLOWED           0x00000002
+#define MOVEFILE_DELAY_UNTIL_REBOOT     0x00000004
+#define MOVEFILE_WRITE_THROUGH          0x00000008
+
+#define REPLACEFILE_WRITE_THROUGH       0x00000001
+#define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002
+
+#define FS_CASE_SENSITIVE               FILE_CASE_SENSITIVE_SEARCH
+#define FS_CASE_IS_PRESERVED            FILE_CASE_PRESERVED_NAMES
+#define FS_UNICODE_STORED_ON_DISK       FILE_UNICODE_ON_DISK
+#define FS_PERSISTENT_ACLS              FILE_PERSISTENT_ACLS
+#define FS_VOL_IS_COMPRESSED            FILE_VOLUME_IS_COMPRESSED
+#define FS_FILE_COMPRESSION             FILE_FILE_COMPRESSION
+
+#define MUTEX_MODIFY_STATE              MUTANT_QUERY_STATE
+#define MUTEX_ALL_ACCESS                MUTANT_ALL_ACCESS
+
+#define EXCEPTION_ACCESS_VIOLATION          STATUS_ACCESS_VIOLATION
+#define EXCEPTION_DATATYPE_MISALIGNMENT     STATUS_DATATYPE_MISALIGNMENT
+#define EXCEPTION_BREAKPOINT                STATUS_BREAKPOINT
+#define EXCEPTION_SINGLE_STEP               STATUS_SINGLE_STEP
+#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED     STATUS_ARRAY_BOUNDS_EXCEEDED
+#define EXCEPTION_FLT_DENORMAL_OPERAND      STATUS_FLOAT_DENORMAL_OPERAND
+#define EXCEPTION_FLT_DIVIDE_BY_ZERO        STATUS_FLOAT_DIVIDE_BY_ZERO
+#define EXCEPTION_FLT_INEXACT_RESULT        STATUS_FLOAT_INEXACT_RESULT
+#define EXCEPTION_FLT_INVALID_OPERATION     STATUS_FLOAT_INVALID_OPERATION
+#define EXCEPTION_FLT_OVERFLOW              STATUS_FLOAT_OVERFLOW
+#define EXCEPTION_FLT_STACK_CHECK           STATUS_FLOAT_STACK_CHECK
+#define EXCEPTION_FLT_UNDERFLOW             STATUS_FLOAT_UNDERFLOW
+#define EXCEPTION_INT_DIVIDE_BY_ZERO        STATUS_INTEGER_DIVIDE_BY_ZERO
+#define EXCEPTION_INT_OVERFLOW              STATUS_INTEGER_OVERFLOW
+#define EXCEPTION_PRIV_INSTRUCTION          STATUS_PRIVILEGED_INSTRUCTION
+#define EXCEPTION_IN_PAGE_ERROR             STATUS_IN_PAGE_ERROR
+#define EXCEPTION_ILLEGAL_INSTRUCTION       STATUS_ILLEGAL_INSTRUCTION
+#define EXCEPTION_NONCONTINUABLE_EXCEPTION  STATUS_NONCONTINUABLE_EXCEPTION
+#define EXCEPTION_STACK_OVERFLOW            STATUS_STACK_OVERFLOW
+#define EXCEPTION_INVALID_DISPOSITION       STATUS_INVALID_DISPOSITION
+#define EXCEPTION_GUARD_PAGE                STATUS_GUARD_PAGE_VIOLATION
+#define EXCEPTION_INVALID_HANDLE            STATUS_INVALID_HANDLE
+#define CONTROL_C_EXIT                      STATUS_CONTROL_C_EXIT
+
+#define HANDLE_FLAG_INHERIT             0x00000001
+#define HANDLE_FLAG_PROTECT_FROM_CLOSE  0x00000002
+
+#define HINSTANCE_ERROR 32
+
+#define THREAD_PRIORITY_LOWEST          THREAD_BASE_PRIORITY_MIN
+#define THREAD_PRIORITY_BELOW_NORMAL    (THREAD_PRIORITY_LOWEST+1)
+#define THREAD_PRIORITY_NORMAL          0
+#define THREAD_PRIORITY_HIGHEST         THREAD_BASE_PRIORITY_MAX
+#define THREAD_PRIORITY_ABOVE_NORMAL    (THREAD_PRIORITY_HIGHEST-1)
+#define THREAD_PRIORITY_ERROR_RETURN    (0x7fffffff)
+#define THREAD_PRIORITY_TIME_CRITICAL   THREAD_BASE_PRIORITY_LOWRT
+#define THREAD_PRIORITY_IDLE            THREAD_BASE_PRIORITY_IDLE
+
+/* flags to FormatMessage */
+#define	FORMAT_MESSAGE_ALLOCATE_BUFFER	0x00000100
+#define	FORMAT_MESSAGE_IGNORE_INSERTS	0x00000200
+#define	FORMAT_MESSAGE_FROM_STRING	0x00000400
+#define	FORMAT_MESSAGE_FROM_HMODULE	0x00000800
+#define	FORMAT_MESSAGE_FROM_SYSTEM	0x00001000
+#define	FORMAT_MESSAGE_ARGUMENT_ARRAY	0x00002000
+#define	FORMAT_MESSAGE_MAX_WIDTH_MASK	0x000000FF
+
+/* flags to ACTCTX[AW] */
+#define ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID  (0x00000001)
+#define ACTCTX_FLAG_LANGID_VALID                  (0x00000002)
+#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID      (0x00000004)
+#define ACTCTX_FLAG_RESOURCE_NAME_VALID           (0x00000008)
+#define ACTCTX_FLAG_SET_PROCESS_DEFAULT           (0x00000010)
+#define ACTCTX_FLAG_APPLICATION_NAME_VALID        (0x00000020)
+#define ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF         (0x00000040)
+#define ACTCTX_FLAG_HMODULE_VALID                 (0x00000080)
+
+/* flags to DeactiveActCtx */
+#define DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION  (0x00000001)
+
+/* flags to FindActCtxSection{Guid,String[AW]} */
+#define FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX            (0x00000001)
+#define FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS              (0x00000002)
+#define FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA  (0x00000004)
+
+/* flags to QueryActCtxW */
+#define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX  (0x00000004)
+#define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE  (0x00000008)
+#define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS  (0x00000010)
+#define QUERY_ACTCTX_FLAG_NO_ADDREF          (0x80000000)
+
+typedef struct tagACTCTXA {
+    ULONG   cbSize;
+    DWORD   dwFlags;
+    LPCSTR  lpSource;
+    USHORT  wProcessorArchitecture;
+    LANGID  wLangId;
+    LPCSTR  lpAssemblyDirectory;
+    LPCSTR  lpResourceName;
+    LPCSTR  lpApplicationName;
+    HMODULE hModule;
+} ACTCTXA, *PACTCTXA;
+
+typedef struct tagACTCTXW {
+    ULONG   cbSize;
+    DWORD   dwFlags;
+    LPCWSTR lpSource;
+    USHORT  wProcessorArchitecture;
+    LANGID  wLangId;
+    LPCWSTR lpAssemblyDirectory;
+    LPCWSTR lpResourceName;
+    LPCWSTR lpApplicationName;
+    HMODULE hModule;
+} ACTCTXW, *PACTCTXW;
+
+DECL_WINELIB_TYPE_AW(ACTCTX)
+DECL_WINELIB_TYPE_AW(PACTCTX)
+
+typedef const ACTCTXA *PCACTCTXA;
+typedef const ACTCTXW *PCACTCTXW;
+DECL_WINELIB_TYPE_AW(PCACTCTX)
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA_2600 {
+    ULONG  cbSize;
+    ULONG  ulDataFormatVersion;
+    PVOID  lpData;
+    ULONG  ulLength;
+    PVOID  lpSectionGlobalData;
+    ULONG  ulSectionGlobalDataLength;
+    PVOID  lpSectionBase;
+    ULONG  ulSectionTotalLength;
+    HANDLE hActCtx;
+    ULONG  ulAssemblyRosterIndex;
+} ACTCTX_SECTION_KEYED_DATA_2600, *PACTCTX_SECTION_KEYED_DATA_2600;
+typedef const ACTCTX_SECTION_KEYED_DATA_2600 *PCACTCTX_SECTION_KEYED_DATA_2600;
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
+    PVOID lpInformation;
+    PVOID lpSectionBase;
+    ULONG ulSectionLength;
+    PVOID lpSectionGlobalDataBase;
+    ULONG ulSectionGlobalDataLength;
+} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+typedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA {
+    ULONG  cbSize;
+    ULONG  ulDataFormatVersion;
+    PVOID  lpData;
+    ULONG  ulLength;
+    PVOID  lpSectionGlobalData;
+    ULONG  ulSectionGlobalDataLength;
+    PVOID  lpSectionBase;
+    ULONG  ulSectionTotalLength;
+    HANDLE hActCtx;
+    ULONG  ulAssemblyRosterIndex;
+
+    /* Non 2600 extra fields */
+    ULONG ulFlags;
+    ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;
+} ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA;
+typedef const ACTCTX_SECTION_KEYED_DATA *PCACTCTX_SECTION_KEYED_DATA;
+
+typedef struct _ACTIVATION_CONTEXT_BASIC_INFORMATION {
+    HANDLE hActCtx;
+    DWORD  dwFlags;
+} ACTIVATION_CONTEXT_BASIC_INFORMATION, *PACTIVATION_CONTEXT_BASIC_INFORMATION;
+
+typedef BOOL (WINAPI *PQUERYACTCTXW_FUNC)(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *);
+
+typedef struct tagCOMSTAT
+{
+    DWORD fCtsHold : 1;
+    DWORD fDsrHold : 1;
+    DWORD fRlsdHold : 1;
+    DWORD fXoffHold : 1;
+    DWORD fXoffSent : 1;
+    DWORD fEof : 1;
+    DWORD fTxim : 1;
+    DWORD fReserved : 25;
+    DWORD cbInQue;
+    DWORD cbOutQue;
+} COMSTAT, *LPCOMSTAT;
+
+typedef struct tagDCB
+{
+    DWORD DCBlength;
+    DWORD BaudRate;
+    unsigned fBinary               :1;
+    unsigned fParity               :1;
+    unsigned fOutxCtsFlow          :1;
+    unsigned fOutxDsrFlow          :1;
+    unsigned fDtrControl           :2;
+    unsigned fDsrSensitivity       :1;
+    unsigned fTXContinueOnXoff     :1;
+    unsigned fOutX                 :1;
+    unsigned fInX                  :1;
+    unsigned fErrorChar            :1;
+    unsigned fNull                 :1;
+    unsigned fRtsControl           :2;
+    unsigned fAbortOnError         :1;
+    unsigned fDummy2               :17;
+    WORD wReserved;
+    WORD XonLim;
+    WORD XoffLim;
+    BYTE ByteSize;
+    BYTE Parity;
+    BYTE StopBits;
+    char XonChar;
+    char XoffChar;
+    char ErrorChar;
+    char EofChar;
+    char EvtChar;
+    WORD wReserved1;
+} DCB, *LPDCB;
+
+typedef struct tagCOMMCONFIG {
+	DWORD dwSize;
+	WORD  wVersion;
+	WORD  wReserved;
+	DCB   dcb;
+	DWORD dwProviderSubType;
+	DWORD dwProviderOffset;
+	DWORD dwProviderSize;
+	DWORD wcProviderData[1];
+} COMMCONFIG, *LPCOMMCONFIG;
+
+typedef struct tagCOMMPROP {
+	WORD  wPacketLength;
+	WORD  wPacketVersion;
+	DWORD dwServiceMask;
+	DWORD dwReserved1;
+	DWORD dwMaxTxQueue;
+	DWORD dwMaxRxQueue;
+	DWORD dwMaxBaud;
+	DWORD dwProvSubType;
+	DWORD dwProvCapabilities;
+	DWORD dwSettableParams;
+	DWORD dwSettableBaud;
+	WORD  wSettableData;
+	WORD  wSettableStopParity;
+	DWORD dwCurrentTxQueue;
+	DWORD dwCurrentRxQueue;
+	DWORD dwProvSpec1;
+	DWORD dwProvSpec2;
+	WCHAR wcProvChar[1];
+} COMMPROP, *LPCOMMPROP;
+
+#define SP_SERIALCOMM ((DWORD)1)
+
+#define BAUD_075     ((DWORD)0x01)
+#define BAUD_110     ((DWORD)0x02)
+#define BAUD_134_5   ((DWORD)0x04)
+#define BAUD_150     ((DWORD)0x08)
+#define BAUD_300     ((DWORD)0x10)
+#define BAUD_600     ((DWORD)0x20)
+#define BAUD_1200    ((DWORD)0x40)
+#define BAUD_1800    ((DWORD)0x80)
+#define BAUD_2400    ((DWORD)0x100)
+#define BAUD_4800    ((DWORD)0x200)
+#define BAUD_7200    ((DWORD)0x400)
+#define BAUD_9600    ((DWORD)0x800)
+#define BAUD_14400   ((DWORD)0x1000)
+#define BAUD_19200   ((DWORD)0x2000)
+#define BAUD_38400   ((DWORD)0x4000)
+#define BAUD_56K     ((DWORD)0x8000)
+#define BAUD_57600   ((DWORD)0x40000)
+#define BAUD_115200  ((DWORD)0x20000)
+#define BAUD_128K    ((DWORD)0x10000)
+#define BAUD_USER    ((DWORD)0x10000000)
+
+#define PST_FAX            ((DWORD)0x21)
+#define PST_LAT            ((DWORD)0x101)
+#define PST_MODEM          ((DWORD)0x06)
+#define PST_NETWORK_BRIDGE ((DWORD)0x100)
+#define PST_PARALLELPORT   ((DWORD)0x02)
+#define PST_RS232          ((DWORD)0x01)
+#define PST_RS442          ((DWORD)0x03)
+#define PST_RS423          ((DWORD)0x04)
+#define PST_RS449          ((DWORD)0x06)
+#define PST_SCANNER        ((DWORD)0x22)
+#define PST_TCPIP_TELNET   ((DWORD)0x102)
+#define PST_UNSPECIFIED    ((DWORD)0x00)
+#define PST_X25            ((DWORD)0x103)
+
+#define PCF_16BITMODE     ((DWORD)0x200)
+#define PCF_DTRDSR        ((DWORD)0x01)
+#define PCF_INTTIMEOUTS   ((DWORD)0x80)
+#define PCF_PARITY_CHECK  ((DWORD)0x08)
+#define PCF_RLSD          ((DWORD)0x04)
+#define PCF_RTSCTS        ((DWORD)0x02)
+#define PCF_SETXCHAR      ((DWORD)0x20)
+#define PCF_SPECIALCHARS  ((DWORD)0x100)
+#define PCF_TOTALTIMEOUTS ((DWORD)0x40)
+#define PCF_XONXOFF       ((DWORD)0x10)
+
+#define SP_BAUD         ((DWORD)0x02)
+#define SP_DATABITS     ((DWORD)0x04)
+#define SP_HANDSHAKING  ((DWORD)0x10)
+#define SP_PARITY       ((DWORD)0x01)
+#define SP_PARITY_CHECK ((DWORD)0x20)
+#define SP_RLSD         ((DWORD)0x40)
+#define SP_STOPBITS     ((DWORD)0x08)
+
+#define DATABITS_5   ((DWORD)0x01)
+#define DATABITS_6   ((DWORD)0x02)
+#define DATABITS_7   ((DWORD)0x04)
+#define DATABITS_8   ((DWORD)0x08)
+#define DATABITS_16  ((DWORD)0x10)
+#define DATABITS_16X ((DWORD)0x20)
+
+#define STOPBITS_10 ((DWORD)1)
+#define STOPBITS_15 ((DWORD)2)
+#define STOPBITS_20 ((DWORD)4)
+
+#define PARITY_NONE  ((DWORD)0x100)
+#define PARITY_ODD   ((DWORD)0x200)
+#define PARITY_EVEN  ((DWORD)0x400)
+#define PARITY_MARK  ((DWORD)0x800)
+#define PARITY_SPACE ((DWORD)0x1000)
+
+typedef struct tagCOMMTIMEOUTS {
+	DWORD	ReadIntervalTimeout;
+	DWORD	ReadTotalTimeoutMultiplier;
+	DWORD	ReadTotalTimeoutConstant;
+	DWORD	WriteTotalTimeoutMultiplier;
+	DWORD	WriteTotalTimeoutConstant;
+} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
+
+#define GET_TAPE_MEDIA_INFORMATION 0
+#define GET_TAPE_DRIVE_INFORMATION 1
+#define SET_TAPE_MEDIA_INFORMATION 0
+#define SET_TAPE_DRIVE_INFORMATION 1
+
+#define PROCESS_NAME_NATIVE        1
+
+typedef void (CALLBACK *PAPCFUNC)(ULONG_PTR);
+typedef void (CALLBACK *PTIMERAPCROUTINE)(LPVOID,DWORD,DWORD);
+
+typedef enum _COMPUTER_NAME_FORMAT
+{
+	ComputerNameNetBIOS,
+	ComputerNameDnsHostname,
+	ComputerNameDnsDomain,
+	ComputerNameDnsFullyQualified,
+	ComputerNamePhysicalNetBIOS,
+	ComputerNamePhysicalDnsHostname,
+	ComputerNamePhysicalDnsDomain,
+	ComputerNamePhysicalDnsFullyQualified,
+	ComputerNameMax
+} COMPUTER_NAME_FORMAT;
+
+#define HW_PROFILE_GUIDLEN	39
+#define MAX_PROFILE_LEN		80
+
+#define DOCKINFO_UNDOCKED	0x1
+#define DOCKINFO_DOCKED		0x2
+#define DOCKINFO_USER_SUPPLIED	0x4
+#define DOCKINFO_USER_UNDOCKED	(DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED)
+#define DOCKINFO_USER_DOCKED	(DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED)
+
+typedef struct tagHW_PROFILE_INFOA {
+    DWORD dwDockInfo;
+    CHAR  szHwProfileGuid[HW_PROFILE_GUIDLEN];
+    CHAR  szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA;
+
+typedef struct tagHW_PROFILE_INFOW {
+    DWORD dwDockInfo;
+    WCHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
+    WCHAR szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW;
+
+DECL_WINELIB_TYPE_AW(HW_PROFILE_INFO)
+DECL_WINELIB_TYPE_AW(LPHW_PROFILE_INFO)
+
+typedef enum _DEP_SYSTEM_POLICY_TYPE {
+    AlwaysOff = 0,
+    AlwaysOn = 1,
+    OptIn = 2,
+    OptOut = 3
+} DEP_SYSTEM_POLICY_TYPE;
+
+/* Event Logging */
+
+#define EVENTLOG_FULL_INFO          0
+
+typedef struct _EVENTLOG_FULL_INFORMATION {
+    DWORD dwFull;
+} EVENTLOG_FULL_INFORMATION, *LPEVENTLOG_FULL_INFORMATION;
+
+
+/* Stream data structures and defines */
+/*the types of backup data -- WIN32_STREAM_ID.dwStreamId below*/
+#define BACKUP_INVALID        0
+#define BACKUP_DATA           1
+#define BACKUP_EA_DATA        2
+#define BACKUP_SECURITY_DATA  3
+#define BACKUP_ALTERNATE_DATA 4
+#define BACKUP_LINK           5
+#define BACKUP_PROPERTY_DATA  6
+#define BACKUP_OBJECT_ID      7
+#define BACKUP_REPARSE_DATA   8
+#define BACKUP_SPARSE_BLOCK   9
+
+/*flags for WIN32_STREAM_ID.dwStreamAttributes below*/
+#define STREAM_NORMAL_ATTRIBUTE    0
+#define STREAM_MODIFIED_WHEN_READ  1
+#define STREAM_CONTAINS_SECURITY   2
+#define STREAM_CONTAINS_PROPERTIES 4
+#define STREAM_SPARSE_ATTRIBUTE    8
+
+#include <pshpack8.h>
+typedef struct _WIN32_STREAM_ID {
+	DWORD   dwStreamId;
+	DWORD   dwStreamAttributes;
+	LARGE_INTEGER DECLSPEC_ALIGN(8) Size;
+	DWORD   dwStreamNameSize;
+	WCHAR   cStreamName[ANYSIZE_ARRAY];
+} WIN32_STREAM_ID, *LPWIN32_STREAM_ID;
+#include <poppack.h>
+
+
+/* GetBinaryType return values.
+ */
+
+#define SCS_32BIT_BINARY    0
+#define SCS_DOS_BINARY      1
+#define SCS_WOW_BINARY      2
+#define SCS_PIF_BINARY      3
+#define SCS_POSIX_BINARY    4
+#define SCS_OS216_BINARY    5
+#define SCS_64BIT_BINARY    6
+
+/* flags for DefineDosDevice */
+#define DDD_RAW_TARGET_PATH         0x00000001
+#define DDD_REMOVE_DEFINITION       0x00000002
+#define DDD_EXACT_MATCH_ON_REMOVE   0x00000004
+#define DDD_NO_BROADCAST_SYSTEM     0x00000008
+#define DDD_LUID_BROADCAST_DRIVE    0x00000010
+
+#define LOGON_WITH_PROFILE          0x00000001
+#define LOGON_NETCREDENTIALS_ONLY   0x00000002
+#define LOGON_ZERO_PASSWORD_BUFFER  0x80000000
+
+/* one-time initialisation API */
+typedef RTL_RUN_ONCE  INIT_ONCE;
+typedef PRTL_RUN_ONCE PINIT_ONCE;
+typedef PRTL_RUN_ONCE LPINIT_ONCE;
+#define INIT_ONCE_STATIC_INIT       RTL_RUN_ONCE_INIT
+#define INIT_ONCE_CHECK_ONLY        RTL_RUN_ONCE_CHECK_ONLY
+#define INIT_ONCE_ASYNC             RTL_RUN_ONCE_ASYNC
+#define INIT_ONCE_INIT_FAILED       RTL_RUN_ONCE_INIT_FAILED
+/* initialization callback prototype */
+typedef BOOL (WINAPI *PINIT_ONCE_FN)(PINIT_ONCE,PVOID,PVOID*);
+
+WINBASEAPI BOOL        WINAPI ActivateActCtx(HANDLE,ULONG_PTR *);
+WINADVAPI  BOOL        WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
+WINADVAPI  BOOL        WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+WINADVAPI  BOOL        WINAPI AddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
+WINADVAPI  BOOL        WINAPI AddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+WINADVAPI  BOOL        WINAPI AddAce(PACL,DWORD,DWORD,LPVOID,DWORD);
+WINBASEAPI ATOM        WINAPI AddAtomA(LPCSTR);
+WINBASEAPI ATOM        WINAPI AddAtomW(LPCWSTR);
+#define                       AddAtom WINELIB_NAME_AW(AddAtom)
+WINADVAPI  BOOL        WINAPI AddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
+WINADVAPI  BOOL        WINAPI AddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
+WINBASEAPI VOID        WINAPI AddRefActCtx(HANDLE);
+WINBASEAPI PVOID       WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
+WINADVAPI  BOOL        WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD);
+WINADVAPI  BOOL        WINAPI AccessCheck(PSECURITY_DESCRIPTOR,HANDLE,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);
+WINADVAPI  BOOL        WINAPI AccessCheckAndAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);
+WINADVAPI  BOOL        WINAPI AccessCheckAndAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);
+#define                       AccessCheckAndAuditAlarm WINELIB_NAME_AW(AccessCheckAndAuditAlarm)
+WINADVAPI  BOOL        WINAPI AccessCheckByType(PSECURITY_DESCRIPTOR,PSID,HANDLE,DWORD,POBJECT_TYPE_LIST,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);
+WINBASEAPI VOID        WINAPI AcquireSRWLockExclusive(PSRWLOCK);
+WINBASEAPI VOID        WINAPI AcquireSRWLockShared(PSRWLOCK);
+WINADVAPI  BOOL        WINAPI AdjustTokenPrivileges(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+WINADVAPI  BOOL        WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
+WINADVAPI  BOOL        WINAPI AllocateLocallyUniqueId(PLUID);
+WINADVAPI  BOOL        WINAPI AreAllAccessesGranted(DWORD,DWORD);
+WINADVAPI  BOOL        WINAPI AreAnyAccessesGranted(DWORD,DWORD);
+WINBASEAPI BOOL        WINAPI AreFileApisANSI(void);
+WINBASEAPI BOOL        WINAPI AssignProcessToJobObject(HANDLE,HANDLE);
+WINADVAPI  BOOL        WINAPI BackupEventLogA(HANDLE,LPCSTR);
+WINADVAPI  BOOL        WINAPI BackupEventLogW(HANDLE,LPCWSTR);
+#define                       BackupEventLog WINELIB_NAME_AW(BackupEventLog)
+WINBASEAPI BOOL        WINAPI BackupRead(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);
+WINBASEAPI BOOL        WINAPI BackupSeek(HANDLE,DWORD,DWORD,LPDWORD,LPDWORD,LPVOID*);
+WINBASEAPI BOOL        WINAPI BackupWrite(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);
+WINBASEAPI BOOL        WINAPI Beep(DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI BeginUpdateResourceA(LPCSTR,BOOL);
+WINBASEAPI HANDLE      WINAPI BeginUpdateResourceW(LPCWSTR,BOOL);
+#define                       BeginUpdateResource WINELIB_NAME_AW(BeginUpdateResource)
+WINBASEAPI BOOL        WINAPI BindIoCompletionCallback(HANDLE,LPOVERLAPPED_COMPLETION_ROUTINE,ULONG);
+WINBASEAPI BOOL        WINAPI BuildCommDCBA(LPCSTR,LPDCB);
+WINBASEAPI BOOL        WINAPI BuildCommDCBW(LPCWSTR,LPDCB);
+#define                       BuildCommDCB WINELIB_NAME_AW(BuildCommDCB)
+WINBASEAPI BOOL        WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL        WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS);
+#define                       BuildCommDCBAndTimeouts WINELIB_NAME_AW(BuildCommDCBAndTimeouts)
+WINBASEAPI BOOL        WINAPI CallNamedPipeA(LPCSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);
+WINBASEAPI BOOL        WINAPI CallNamedPipeW(LPCWSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);
+#define                       CallNamedPipe WINELIB_NAME_AW(CallNamedPipe)
+WINBASEAPI BOOL        WINAPI CancelIo(HANDLE);
+WINBASEAPI BOOL        WINAPI CancelIoEx(HANDLE,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI CancelTimerQueueTimer(HANDLE,HANDLE);
+WINBASEAPI BOOL        WINAPI CancelWaitableTimer(HANDLE);
+WINBASEAPI BOOL        WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG);
+WINADVAPI  BOOL        WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL);
+WINBASEAPI BOOL        WINAPI ClearCommBreak(HANDLE);
+WINBASEAPI BOOL        WINAPI ClearCommError(HANDLE,LPDWORD,LPCOMSTAT);
+WINADVAPI  BOOL        WINAPI ClearEventLogA(HANDLE,LPCSTR);
+WINADVAPI  BOOL        WINAPI ClearEventLogW(HANDLE,LPCWSTR);
+#define                       ClearEventLog WINELIB_NAME_AW(ClearEventLog)
+WINADVAPI  BOOL        WINAPI CloseEventLog(HANDLE);
+WINBASEAPI BOOL        WINAPI CloseHandle(HANDLE);
+WINBASEAPI BOOL        WINAPI CommConfigDialogA(LPCSTR,HWND,LPCOMMCONFIG);
+WINBASEAPI BOOL        WINAPI CommConfigDialogW(LPCWSTR,HWND,LPCOMMCONFIG);
+#define                       CommConfigDialog WINELIB_NAME_AW(CommConfigDialog)
+WINBASEAPI BOOL        WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI ConvertToGlobalHandle(HANDLE hSrc);
+WINBASEAPI BOOL        WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);
+WINBASEAPI BOOL        WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);
+#define                       CopyFile WINELIB_NAME_AW(CopyFile)
+WINBASEAPI HRESULT     WINAPI CopyFile2(PCWSTR,PCWSTR,COPYFILE2_EXTENDED_PARAMETERS*);
+WINBASEAPI BOOL        WINAPI CopyFileExA(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);
+WINBASEAPI BOOL        WINAPI CopyFileExW(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);
+#define                       CopyFileEx WINELIB_NAME_AW(CopyFileEx)
+WINADVAPI  BOOL        WINAPI CopySid(DWORD,PSID,PSID);
+WINBASEAPI INT         WINAPI CompareFileTime(const FILETIME*,const FILETIME*);
+WINBASEAPI BOOL        WINAPI ConvertFiberToThread(void);
+WINBASEAPI LPVOID      WINAPI ConvertThreadToFiber(LPVOID);
+WINBASEAPI LPVOID      WINAPI ConvertThreadToFiberEx(LPVOID,DWORD);
+WINADVAPI  BOOL        WINAPI ConvertToAutoInheritPrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,PGENERIC_MAPPING);
+WINBASEAPI HANDLE      WINAPI CreateActCtxA(PCACTCTXA);
+WINBASEAPI HANDLE      WINAPI CreateActCtxW(PCACTCTXW);
+#define                       CreateActCtx WINELIB_NAME_AW(CreateActCtx)
+WINBASEAPI BOOL        WINAPI CreateDirectoryA(LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL        WINAPI CreateDirectoryW(LPCWSTR,LPSECURITY_ATTRIBUTES);
+#define                       CreateDirectory WINELIB_NAME_AW(CreateDirectory)
+WINBASEAPI BOOL        WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL        WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
+#define                       CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx)
+WINBASEAPI HANDLE      WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR);
+#define                       CreateEvent WINELIB_NAME_AW(CreateEvent)
+WINBASEAPI HANDLE      WINAPI CreateEventExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI CreateEventExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);
+#define                       CreateEventEx WINELIB_NAME_AW(CreateEventEx)
+WINBASEAPI LPVOID      WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID);
+WINBASEAPI LPVOID      WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID);
+WINBASEAPI HANDLE      WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
+WINBASEAPI HANDLE      WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
+#define                       CreateFile WINELIB_NAME_AW(CreateFile)
+WINBASEAPI HANDLE      WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR);
+WINBASEAPI HANDLE      WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR);
+#define                       CreateFileMapping WINELIB_NAME_AW(CreateFileMapping)
+WINBASEAPI HANDLE      WINAPI CreateIoCompletionPort(HANDLE,HANDLE,ULONG_PTR,DWORD);
+WINBASEAPI HANDLE      WINAPI CreateJobObjectA(LPSECURITY_ATTRIBUTES,LPCSTR);
+WINBASEAPI HANDLE      WINAPI CreateJobObjectW(LPSECURITY_ATTRIBUTES,LPCWSTR);
+#define                       CreateJobObject WINELIB_NAME_AW(CreateJobObject)
+WINBASEAPI HANDLE      WINAPI CreateMailslotA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE      WINAPI CreateMailslotW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+#define                       CreateMailslot WINELIB_NAME_AW(CreateMailslot)
+WINBASEAPI HANDLE      WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE);
+WINBASEAPI HANDLE      WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
+#define                       CreateMutex WINELIB_NAME_AW(CreateMutex)
+WINBASEAPI HANDLE      WINAPI CreateMutexExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI CreateMutexExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);
+#define                       CreateMutexEx WINELIB_NAME_AW(CreateMutexEx)
+WINBASEAPI HANDLE      WINAPI CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE      WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+#define                       CreateNamedPipe WINELIB_NAME_AW(CreateNamedPipe)
+WINBASEAPI BOOL        WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD);
+WINADVAPI  BOOL        WINAPI CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOL,HANDLE,PGENERIC_MAPPING);
+WINBASEAPI BOOL        WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+WINBASEAPI BOOL        WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+#define                       CreateProcess WINELIB_NAME_AW(CreateProcess)
+WINADVAPI  BOOL        WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+WINADVAPI  BOOL        WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+#define                       CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser)
+WINADVAPI  BOOL        WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+WINBASEAPI HANDLE      WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+WINADVAPI  BOOL        WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE);
+WINBASEAPI HANDLE      WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
+WINBASEAPI HANDLE      WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
+#define                       CreateSemaphore WINELIB_NAME_AW(CreateSemaphore)
+WINBASEAPI HANDLE      WINAPI CreateSemaphoreExA(SECURITY_ATTRIBUTES*,LONG,LONG,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI CreateSemaphoreExW(SECURITY_ATTRIBUTES*,LONG,LONG,LPCWSTR,DWORD,DWORD);
+#define                       CreateSemaphoreEx WINELIB_NAME_AW(CreateSemaphoreEx)
+WINBASEAPI DWORD       WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+WINBASEAPI HANDLE      WINAPI CreateTimerQueue(void);
+WINBASEAPI BOOL        WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG);
+WINBASEAPI HANDLE      WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
+#define                       CreateWaitableTimer WINELIB_NAME_AW(CreateWaitableTimer)
+WINBASEAPI HANDLE      WINAPI CreateWaitableTimerExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE      WINAPI CreateWaitableTimerExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);
+#define                       CreateWaitableTimerEx WINELIB_NAME_AW(CreateWaitableTimerEx)
+WINADVAPI  BOOL        WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*);
+WINBASEAPI BOOL        WINAPI DeactivateActCtx(DWORD,ULONG_PTR);
+WINBASEAPI BOOL        WINAPI DebugActiveProcess(DWORD);
+WINBASEAPI BOOL        WINAPI DebugActiveProcessStop(DWORD);
+WINBASEAPI void        WINAPI DebugBreak(void);
+WINBASEAPI BOOL        WINAPI DebugBreakProcess(HANDLE);
+WINBASEAPI BOOL        WINAPI DebugSetProcessKillOnExit(BOOL);
+WINBASEAPI PVOID       WINAPI DecodePointer(PVOID);
+WINADVAPI  BOOL        WINAPI DecryptFileA(LPCSTR,DWORD);
+WINADVAPI  BOOL        WINAPI DecryptFileW(LPCWSTR,DWORD);
+#define                       DecryptFile WINELIB_NAME_AW(DecryptFile)
+WINBASEAPI BOOL        WINAPI DefineDosDeviceA(DWORD,LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI DefineDosDeviceW(DWORD,LPCWSTR,LPCWSTR);
+#define                       DefineDosDevice WINELIB_NAME_AW(DefineDosDevice)
+#define                       DefineHandleTable(w) ((w),TRUE)
+WINADVAPI  BOOL        WINAPI DeleteAce(PACL,DWORD);
+WINBASEAPI ATOM        WINAPI DeleteAtom(ATOM);
+WINBASEAPI void        WINAPI DeleteCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI void        WINAPI DeleteFiber(LPVOID);
+WINBASEAPI BOOL        WINAPI DeleteFileA(LPCSTR);
+WINBASEAPI BOOL        WINAPI DeleteFileW(LPCWSTR);
+#define                       DeleteFile WINELIB_NAME_AW(DeleteFile)
+WINBASEAPI BOOL        WINAPI DeleteTimerQueue(HANDLE);
+WINBASEAPI BOOL        WINAPI DeleteTimerQueueEx(HANDLE,HANDLE);
+WINBASEAPI BOOL        WINAPI DeleteTimerQueueTimer(HANDLE,HANDLE,HANDLE);
+WINBASEAPI BOOL        WINAPI DeleteVolumeMountPointA(LPCSTR);
+WINBASEAPI BOOL        WINAPI DeleteVolumeMountPointW(LPCWSTR);
+#define                       DeleteVolumeMountPoint WINELIB_NAME_AW(DeleteVolumeMountPoint)
+WINADVAPI  BOOL        WINAPI DeregisterEventSource(HANDLE);
+WINADVAPI  BOOL        WINAPI DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR*);
+WINBASEAPI BOOL        WINAPI DeviceIoControl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI DisableThreadLibraryCalls(HMODULE);
+WINBASEAPI BOOL        WINAPI DisconnectNamedPipe(HANDLE);
+WINBASEAPI BOOL        WINAPI DnsHostnameToComputerNameA(LPCSTR,LPSTR,LPDWORD);
+WINBASEAPI BOOL        WINAPI DnsHostnameToComputerNameW(LPCWSTR,LPWSTR,LPDWORD);
+#define                       DnsHostnameToComputerName WINELIB_NAME_AW(DnsHostnameToComputerName)
+WINBASEAPI BOOL        WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME);
+WINBASEAPI BOOL        WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,HANDLE*,DWORD,BOOL,DWORD);
+WINADVAPI  BOOL        WINAPI DuplicateToken(HANDLE,SECURITY_IMPERSONATION_LEVEL,PHANDLE);
+WINADVAPI  BOOL        WINAPI DuplicateTokenEx(HANDLE,DWORD,LPSECURITY_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+WINBASEAPI BOOL        WINAPI EscapeCommFunction(HANDLE,UINT);
+WINBASEAPI PVOID       WINAPI EncodePointer(PVOID);
+WINADVAPI  BOOL        WINAPI EncryptFileA(LPCSTR);
+WINADVAPI  BOOL        WINAPI EncryptFileW(LPCWSTR);
+#define                       EncryptFile WINELIB_NAME_AW(EncryptFile)
+WINBASEAPI BOOL        WINAPI EndUpdateResourceA(HANDLE,BOOL);
+WINBASEAPI BOOL        WINAPI EndUpdateResourceW(HANDLE,BOOL);
+#define                       EndUpdateResource WINELIB_NAME_AW(EndUpdateResource)
+WINBASEAPI void        WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI BOOL        WINAPI EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG_PTR);
+WINBASEAPI BOOL        WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR);
+#define                       EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages)
+WINBASEAPI BOOL        WINAPI EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROCA,LONG_PTR);
+WINBASEAPI BOOL        WINAPI EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROCW,LONG_PTR);
+#define                       EnumResourceNames WINELIB_NAME_AW(EnumResourceNames)
+WINBASEAPI BOOL        WINAPI EnumResourceTypesA(HMODULE,ENUMRESTYPEPROCA,LONG_PTR);
+WINBASEAPI BOOL        WINAPI EnumResourceTypesW(HMODULE,ENUMRESTYPEPROCW,LONG_PTR);
+#define                       EnumResourceTypes WINELIB_NAME_AW(EnumResourceTypes)
+WINADVAPI  BOOL        WINAPI EqualSid(PSID, PSID);
+WINADVAPI  BOOL        WINAPI EqualPrefixSid(PSID,PSID);
+WINBASEAPI DWORD       WINAPI EraseTape(HANDLE,DWORD,BOOL);
+WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitProcess(DWORD);
+WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitThread(DWORD);
+WINBASEAPI DWORD       WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD       WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD);
+#define                       ExpandEnvironmentStrings WINELIB_NAME_AW(ExpandEnvironmentStrings)
+WINBASEAPI void        WINAPI FatalAppExitA(UINT,LPCSTR);
+WINBASEAPI void        WINAPI FatalAppExitW(UINT,LPCWSTR);
+WINBASEAPI void        WINAPI FatalExit(int);
+#define                       FatalAppExit WINELIB_NAME_AW(FatalAppExit)
+WINADVAPI  BOOL        WINAPI FileEncryptionStatusA(LPCSTR,LPDWORD);
+WINADVAPI  BOOL        WINAPI FileEncryptionStatusW(LPCWSTR,LPDWORD);
+#define                       FileEncryptionStatus WINELIB_NAME_AW(FileEncryptionStatus)
+WINBASEAPI BOOL        WINAPI FileTimeToDosDateTime(const FILETIME*,LPWORD,LPWORD);
+WINBASEAPI BOOL        WINAPI FileTimeToLocalFileTime(const FILETIME*,LPFILETIME);
+WINBASEAPI BOOL        WINAPI FileTimeToSystemTime(const FILETIME*,LPSYSTEMTIME);
+WINBASEAPI BOOL        WINAPI FindActCtxSectionStringA(DWORD,const GUID *,ULONG,LPCSTR,PACTCTX_SECTION_KEYED_DATA);
+WINBASEAPI BOOL        WINAPI FindActCtxSectionStringW(DWORD,const GUID *,ULONG,LPCWSTR,PACTCTX_SECTION_KEYED_DATA);
+#define                       FindActCtxSectionString WINELIB_NAME_AW(FindActCtxSectionString)
+WINBASEAPI BOOL        WINAPI FindActCtxSectionGuid(DWORD,const GUID *,ULONG,const GUID *,PACTCTX_SECTION_KEYED_DATA);
+WINBASEAPI ATOM        WINAPI FindAtomA(LPCSTR);
+WINBASEAPI ATOM        WINAPI FindAtomW(LPCWSTR);
+#define                       FindAtom WINELIB_NAME_AW(FindAtom)
+WINBASEAPI BOOL        WINAPI FindClose(HANDLE);
+WINBASEAPI HANDLE      WINAPI FindFirstChangeNotificationA(LPCSTR,BOOL,DWORD);
+WINBASEAPI HANDLE      WINAPI FindFirstChangeNotificationW(LPCWSTR,BOOL,DWORD);
+#define                       FindFirstChangeNotification WINELIB_NAME_AW(FindFirstChangeNotification)
+WINBASEAPI HANDLE      WINAPI FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA);
+WINBASEAPI HANDLE      WINAPI FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW);
+#define                       FindFirstFile WINELIB_NAME_AW(FindFirstFile)
+WINBASEAPI HANDLE      WINAPI FindFirstFileExA(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);
+WINBASEAPI HANDLE      WINAPI FindFirstFileExW(LPCWSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);
+#define                       FindFirstFileEx WINELIB_NAME_AW(FindFirstFileEx)
+WINADVAPI  BOOL        WINAPI FindFirstFreeAce(PACL,LPVOID*);
+WINBASEAPI BOOL        WINAPI FindNextChangeNotification(HANDLE);
+WINBASEAPI BOOL        WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA);
+WINBASEAPI BOOL        WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW);
+#define                       FindNextFile WINELIB_NAME_AW(FindNextFile)
+WINBASEAPI BOOL        WINAPI FindCloseChangeNotification(HANDLE);
+WINBASEAPI HRSRC       WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR);
+WINBASEAPI HRSRC       WINAPI FindResourceW(HMODULE,LPCWSTR,LPCWSTR);
+#define                       FindResource WINELIB_NAME_AW(FindResource)
+WINBASEAPI HRSRC       WINAPI FindResourceExA(HMODULE,LPCSTR,LPCSTR,WORD);
+WINBASEAPI HRSRC       WINAPI FindResourceExW(HMODULE,LPCWSTR,LPCWSTR,WORD);
+#define                       FindResourceEx WINELIB_NAME_AW(FindResourceEx)
+WINBASEAPI HANDLE      WINAPI FindFirstVolumeA(LPSTR,DWORD);
+WINBASEAPI HANDLE      WINAPI FindFirstVolumeW(LPWSTR,DWORD);
+#define                       FindFirstVolume WINELIB_NAME_AW(FindFirstVolume)
+WINBASEAPI HANDLE      WINAPI FindFirstVolumeMountPointA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI HANDLE      WINAPI FindFirstVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);
+#define                       FindFirstVolumeMountPoint WINELIB_NAME_AW(FindFirstVolumeMountPoint)
+WINBASEAPI BOOL        WINAPI FindNextVolumeA(HANDLE,LPSTR,DWORD);
+WINBASEAPI BOOL        WINAPI FindNextVolumeW(HANDLE,LPWSTR,DWORD);
+#define                       FindNextVolume WINELIB_NAME_AW(FindNextVolume)
+WINBASEAPI BOOL        WINAPI FindNextVolumeMountPointA(HANDLE,LPSTR,DWORD);
+WINBASEAPI BOOL        WINAPI FindNextVolumeMountPointW(HANDLE,LPWSTR,DWORD);
+#define                       FindNextVolumeMountPoint WINELIB_NAME_AW(FindNextVolumeMountPoint)
+WINBASEAPI BOOL        WINAPI FindVolumeClose(HANDLE);
+WINBASEAPI BOOL        WINAPI FindVolumeMountPointClose(HANDLE);
+WINBASEAPI DWORD       WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION);
+WINBASEAPI BOOL        WINAPI FlsFree(DWORD);
+WINBASEAPI PVOID       WINAPI FlsGetValue(DWORD);
+WINBASEAPI BOOL        WINAPI FlsSetValue(DWORD,PVOID);
+WINBASEAPI BOOL        WINAPI FlushFileBuffers(HANDLE);
+WINBASEAPI BOOL        WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+WINBASEAPI BOOL        WINAPI FlushViewOfFile(LPCVOID,SIZE_T);
+WINBASEAPI DWORD       WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,__ms_va_list*);
+WINBASEAPI DWORD       WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,__ms_va_list*);
+#define                       FormatMessage WINELIB_NAME_AW(FormatMessage)
+WINBASEAPI BOOL        WINAPI FreeEnvironmentStringsA(LPSTR);
+WINBASEAPI BOOL        WINAPI FreeEnvironmentStringsW(LPWSTR);
+#define                       FreeEnvironmentStrings WINELIB_NAME_AW(FreeEnvironmentStrings)
+WINBASEAPI BOOL        WINAPI FreeLibrary(HMODULE);
+WINBASEAPI VOID DECLSPEC_NORETURN WINAPI FreeLibraryAndExitThread(HINSTANCE,DWORD);
+#define                       FreeModule(handle) FreeLibrary(handle)
+#define                       FreeProcInstance(proc) /*nothing*/
+WINBASEAPI BOOL        WINAPI FreeResource(HGLOBAL);
+WINADVAPI  PVOID       WINAPI FreeSid(PSID);
+WINADVAPI  BOOL        WINAPI GetAce(PACL,DWORD,LPVOID*);
+WINADVAPI  BOOL        WINAPI GetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI UINT        WINAPI GetAtomNameA(ATOM,LPSTR,INT);
+WINBASEAPI UINT        WINAPI GetAtomNameW(ATOM,LPWSTR,INT);
+#define                       GetAtomName WINELIB_NAME_AW(GetAtomName)
+WINBASEAPI BOOL        WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType );
+WINBASEAPI BOOL        WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType );
+#define                       GetBinaryType WINELIB_NAME_AW(GetBinaryType)
+WINBASEAPI BOOL        WINAPI GetCurrentActCtx(HANDLE *);
+WINBASEAPI BOOL        WINAPI GetCommConfig(HANDLE,LPCOMMCONFIG,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetCommMask(HANDLE,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetCommModemStatus(HANDLE,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetCommProperties(HANDLE,LPCOMMPROP);
+WINBASEAPI BOOL        WINAPI GetCommState(HANDLE,LPDCB);
+WINBASEAPI BOOL        WINAPI GetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);
+WINBASEAPI LPSTR       WINAPI GetCommandLineA(void);
+WINBASEAPI LPWSTR      WINAPI GetCommandLineW(void);
+#define                       GetCommandLine WINELIB_NAME_AW(GetCommandLine)
+WINBASEAPI DWORD       WINAPI GetCompressedFileSizeA(LPCSTR,LPDWORD);
+WINBASEAPI DWORD       WINAPI GetCompressedFileSizeW(LPCWSTR,LPDWORD);
+#define                       GetCompressedFileSize WINELIB_NAME_AW(GetCompressedFileSize)
+WINBASEAPI BOOL        WINAPI GetComputerNameA(LPSTR,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetComputerNameW(LPWSTR,LPDWORD);
+#define                       GetComputerName WINELIB_NAME_AW(GetComputerName)
+WINBASEAPI BOOL        WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD);
+#define                       GetComputerNameEx WINELIB_NAME_AW(GetComputerNameEx)
+WINBASEAPI UINT        WINAPI GetCurrentDirectoryA(UINT,LPSTR);
+WINBASEAPI UINT        WINAPI GetCurrentDirectoryW(UINT,LPWSTR);
+#define                       GetCurrentDirectory WINELIB_NAME_AW(GetCurrentDirectory)
+WINADVAPI  BOOL        WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA);
+WINADVAPI  BOOL        WINAPI GetCurrentHwProfileW(LPHW_PROFILE_INFOW);
+#define                       GetCurrentHwProfile WINELIB_NAME_AW(GetCurrentHwProfile)
+WINBASEAPI HANDLE      WINAPI GetCurrentProcess(void);
+WINBASEAPI DWORD       WINAPI GetCurrentProcessorNumber(void);
+WINBASEAPI VOID        WINAPI GetCurrentProcessorNumberEx(PPROCESSOR_NUMBER);
+WINBASEAPI HANDLE      WINAPI GetCurrentThread(void);
+#define                       GetCurrentTime() GetTickCount()
+WINBASEAPI BOOL        WINAPI GetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,LPDWORD);
+#define                       GetDefaultCommConfig WINELIB_NAME_AW(GetDefaultCommConfig)
+WINBASEAPI BOOL        WINAPI GetDevicePowerState(HANDLE,BOOL*);
+WINBASEAPI BOOL        WINAPI GetDiskFreeSpaceA(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetDiskFreeSpaceW(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+#define                       GetDiskFreeSpace WINELIB_NAME_AW(GetDiskFreeSpace)
+WINBASEAPI BOOL        WINAPI GetDiskFreeSpaceExA(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+WINBASEAPI BOOL        WINAPI GetDiskFreeSpaceExW(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+#define                       GetDiskFreeSpaceEx WINELIB_NAME_AW(GetDiskFreeSpaceEx)
+WINBASEAPI DWORD       WINAPI GetDllDirectoryA(DWORD,LPSTR);
+WINBASEAPI DWORD       WINAPI GetDllDirectoryW(DWORD,LPWSTR);
+#define                       GetDllDirectory WINELIB_NAME_AW(GetDllDirectory)
+WINBASEAPI UINT        WINAPI GetDriveTypeA(LPCSTR);
+WINBASEAPI UINT        WINAPI GetDriveTypeW(LPCWSTR);
+#define                       GetDriveType WINELIB_NAME_AW(GetDriveType)
+WINBASEAPI DWORD       WINAPI GetDynamicTimeZoneInformation(PDYNAMIC_TIME_ZONE_INFORMATION);
+WINBASEAPI LPSTR       WINAPI GetEnvironmentStringsA(void);
+WINBASEAPI LPWSTR      WINAPI GetEnvironmentStringsW(void);
+#define                       GetEnvironmentStrings WINELIB_NAME_AW(GetEnvironmentStrings)
+WINBASEAPI DWORD       WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD       WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD);
+#define                       GetEnvironmentVariable WINELIB_NAME_AW(GetEnvironmentVariable)
+WINBASEAPI UINT        WINAPI GetErrorMode(void);
+WINADVAPI  BOOL        WINAPI GetEventLogInformation(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetExitCodeProcess(HANDLE,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetExitCodeThread(HANDLE,LPDWORD);
+WINBASEAPI DWORD       WINAPI GetFileAttributesA(LPCSTR);
+WINBASEAPI DWORD       WINAPI GetFileAttributesW(LPCWSTR);
+#define                       GetFileAttributes WINELIB_NAME_AW(GetFileAttributes)
+WINBASEAPI BOOL        WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
+WINBASEAPI BOOL        WINAPI GetFileAttributesExW(LPCWSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
+#define                       GetFileAttributesEx WINELIB_NAME_AW(GetFileAttributesEx)
+WINBASEAPI BOOL        WINAPI GetFileInformationByHandle(HANDLE,BY_HANDLE_FILE_INFORMATION*);
+WINBASEAPI BOOL        WINAPI GetFileInformationByHandleEx(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD);
+WINADVAPI  BOOL        WINAPI GetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI  BOOL        WINAPI GetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+#define                       GetFileSecurity WINELIB_NAME_AW(GetFileSecurity)
+WINBASEAPI DWORD       WINAPI GetFileSize(HANDLE,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetFileSizeEx(HANDLE,PLARGE_INTEGER);
+WINBASEAPI BOOL        WINAPI GetFileTime(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD       WINAPI GetFileType(HANDLE);
+#define                       GetFreeSpace(w) (__MSABI_LONG(0x100000))
+WINBASEAPI DWORD       WINAPI GetFullPathNameA(LPCSTR,DWORD,LPSTR,LPSTR*);
+WINBASEAPI DWORD       WINAPI GetFullPathNameW(LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+#define                       GetFullPathName WINELIB_NAME_AW(GetFullPathName)
+WINBASEAPI BOOL        WINAPI GetHandleInformation(HANDLE,LPDWORD);
+WINADVAPI  BOOL        WINAPI GetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI  DWORD       WINAPI GetLengthSid(PSID);
+WINBASEAPI VOID        WINAPI GetLocalTime(LPSYSTEMTIME);
+WINBASEAPI DWORD       WINAPI GetLogicalDrives(void);
+WINBASEAPI UINT        WINAPI GetLogicalDriveStringsA(UINT,LPSTR);
+WINBASEAPI UINT        WINAPI GetLogicalDriveStringsW(UINT,LPWSTR);
+#define                       GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
+WINBASEAPI DWORD       WINAPI GetLongPathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD       WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD);
+#define                       GetLongPathName WINELIB_NAME_AW(GetLongPathName)
+WINBASEAPI BOOL        WINAPI GetMailslotInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI DWORD       WINAPI GetModuleFileNameA(HMODULE,LPSTR,DWORD);
+WINBASEAPI DWORD       WINAPI GetModuleFileNameW(HMODULE,LPWSTR,DWORD);
+#define                       GetModuleFileName WINELIB_NAME_AW(GetModuleFileName)
+WINBASEAPI HMODULE     WINAPI GetModuleHandleA(LPCSTR);
+WINBASEAPI HMODULE     WINAPI GetModuleHandleW(LPCWSTR);
+#define                       GetModuleHandle WINELIB_NAME_AW(GetModuleHandle)
+WINBASEAPI BOOL        WINAPI GetModuleHandleExA(DWORD,LPCSTR,HMODULE*);
+WINBASEAPI BOOL        WINAPI GetModuleHandleExW(DWORD,LPCWSTR,HMODULE*);
+#define                       GetModuleHandleEx WINELIB_NAME_AW(GetModuleHandleEx)
+WINBASEAPI BOOL        WINAPI GetNamedPipeHandleStateA(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
+WINBASEAPI BOOL        WINAPI GetNamedPipeHandleStateW(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
+#define                       GetNamedPipeHandleState WINELIB_NAME_AW(GetNamedPipeHandleState)
+WINBASEAPI BOOL        WINAPI GetNamedPipeInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI VOID        WINAPI GetNativeSystemInfo(LPSYSTEM_INFO);
+WINADVAPI  BOOL        WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD);
+WINADVAPI  BOOL        WINAPI GetOldestEventLogRecord(HANDLE,PDWORD);
+WINBASEAPI BOOL        WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,LPDWORD,BOOL);
+WINBASEAPI DWORD       WINAPI GetPriorityClass(HANDLE);
+WINADVAPI  BOOL        WINAPI GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINBASEAPI UINT        WINAPI GetPrivateProfileIntA(LPCSTR,LPCSTR,INT,LPCSTR);
+WINBASEAPI UINT        WINAPI GetPrivateProfileIntW(LPCWSTR,LPCWSTR,INT,LPCWSTR);
+#define                       GetPrivateProfileInt WINELIB_NAME_AW(GetPrivateProfileInt)
+WINBASEAPI INT         WINAPI GetPrivateProfileSectionA(LPCSTR,LPSTR,DWORD,LPCSTR);
+WINBASEAPI INT         WINAPI GetPrivateProfileSectionW(LPCWSTR,LPWSTR,DWORD,LPCWSTR);
+#define                       GetPrivateProfileSection WINELIB_NAME_AW(GetPrivateProfileSection)
+WINBASEAPI DWORD       WINAPI GetPrivateProfileSectionNamesA(LPSTR,DWORD,LPCSTR);
+WINBASEAPI DWORD       WINAPI GetPrivateProfileSectionNamesW(LPWSTR,DWORD,LPCWSTR);
+#define                       GetPrivateProfileSectionNames WINELIB_NAME_AW(GetPrivateProfileSectionNames)
+WINBASEAPI INT         WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT,LPCSTR);
+WINBASEAPI INT         WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT,LPCWSTR);
+#define                       GetPrivateProfileString WINELIB_NAME_AW(GetPrivateProfileString)
+WINBASEAPI BOOL        WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+WINBASEAPI BOOL        WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
+#define                       GetPrivateProfileStruct WINELIB_NAME_AW(GetPrivateProfileStruct)
+WINBASEAPI FARPROC     WINAPI GetProcAddress(HMODULE,LPCSTR);
+WINBASEAPI BOOL        WINAPI GetProcessAffinityMask(HANDLE,PDWORD_PTR,PDWORD_PTR);
+WINBASEAPI BOOL        WINAPI GetLogicalProcessorInformation(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,PDWORD);
+WINBASEAPI BOOL        WINAPI GetLogicalProcessorInformationEx(LOGICAL_PROCESSOR_RELATIONSHIP,PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,PDWORD);
+WINBASEAPI DWORD       WINAPI GetProcessHeaps(DWORD,PHANDLE);
+WINBASEAPI DWORD       WINAPI GetProcessId(HANDLE);
+WINBASEAPI BOOL        WINAPI GetProcessIoCounters(HANDLE,PIO_COUNTERS);
+WINBASEAPI BOOL        WINAPI GetProcessPriorityBoost(HANDLE,PBOOL);
+WINBASEAPI BOOL        WINAPI GetProcessShutdownParameters(LPDWORD,LPDWORD);
+WINBASEAPI BOOL        WINAPI GetProcessTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD       WINAPI GetProcessVersion(DWORD);
+WINBASEAPI BOOL        WINAPI GetProcessWorkingSetSize(HANDLE,PSIZE_T,PSIZE_T);
+WINBASEAPI BOOL        WINAPI GetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD);
+WINBASEAPI UINT        WINAPI GetProfileIntA(LPCSTR,LPCSTR,INT);
+WINBASEAPI UINT        WINAPI GetProfileIntW(LPCWSTR,LPCWSTR,INT);
+#define                       GetProfileInt WINELIB_NAME_AW(GetProfileInt)
+WINBASEAPI INT         WINAPI GetProfileSectionA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI INT         WINAPI GetProfileSectionW(LPCWSTR,LPWSTR,DWORD);
+#define                       GetProfileSection WINELIB_NAME_AW(GetProfileSection)
+WINBASEAPI INT         WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT);
+WINBASEAPI INT         WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT);
+#define                       GetProfileString WINELIB_NAME_AW(GetProfileString)
+WINBASEAPI BOOL        WINAPI GetQueuedCompletionStatus(HANDLE,LPDWORD,PULONG_PTR,LPOVERLAPPED*,DWORD);
+WINADVAPI  BOOL        WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
+WINADVAPI  BOOL        WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);
+WINADVAPI  BOOL        WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);
+WINADVAPI  DWORD       WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);
+WINADVAPI  BOOL        WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);
+WINADVAPI  BOOL        WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);
+WINADVAPI  PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID);
+WINADVAPI  DWORD       WINAPI GetSidLengthRequired(BYTE);
+WINADVAPI  PDWORD      WINAPI GetSidSubAuthority(PSID,DWORD);
+WINADVAPI  PUCHAR      WINAPI GetSidSubAuthorityCount(PSID);
+WINBASEAPI DWORD       WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD       WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
+#define                       GetShortPathName WINELIB_NAME_AW(GetShortPathName)
+WINBASEAPI VOID        WINAPI GetStartupInfoA(LPSTARTUPINFOA);
+WINBASEAPI VOID        WINAPI GetStartupInfoW(LPSTARTUPINFOW);
+#define                       GetStartupInfo WINELIB_NAME_AW(GetStartupInfo)
+WINBASEAPI HANDLE      WINAPI GetStdHandle(DWORD);
+WINBASEAPI UINT        WINAPI GetSystemDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT        WINAPI GetSystemDirectoryW(LPWSTR,UINT);
+#define                       GetSystemDirectory WINELIB_NAME_AW(GetSystemDirectory)
+WINBASEAPI VOID        WINAPI GetSystemInfo(LPSYSTEM_INFO);
+WINBASEAPI BOOL        WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);
+WINBASEAPI BOOL        WINAPI GetSystemRegistryQuota(PDWORD,PDWORD);
+WINBASEAPI VOID        WINAPI GetSystemTime(LPSYSTEMTIME);
+WINBASEAPI BOOL        WINAPI GetSystemTimeAdjustment(PDWORD,PDWORD,PBOOL);
+WINBASEAPI VOID        WINAPI GetSystemTimeAsFileTime(LPFILETIME);
+WINBASEAPI UINT        WINAPI GetSystemWindowsDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT        WINAPI GetSystemWindowsDirectoryW(LPWSTR,UINT);
+#define                       GetSystemWindowsDirectory WINELIB_NAME_AW(GetSystemWindowsDirectory)
+WINBASEAPI UINT        WINAPI GetSystemWow64DirectoryA(LPSTR,UINT);
+WINBASEAPI UINT        WINAPI GetSystemWow64DirectoryW(LPWSTR,UINT);
+#define                       GetSystemWow64Directory WINELIB_NAME_AW(GetSystemWow64Directory)
+WINBASEAPI DWORD       WINAPI GetTapeParameters(HANDLE,DWORD,LPDWORD,LPVOID);
+WINBASEAPI DWORD       WINAPI GetTapePosition(HANDLE,DWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI DWORD       WINAPI GetTapeStatus(HANDLE);
+WINBASEAPI UINT        WINAPI GetTempFileNameA(LPCSTR,LPCSTR,UINT,LPSTR);
+WINBASEAPI UINT        WINAPI GetTempFileNameW(LPCWSTR,LPCWSTR,UINT,LPWSTR);
+#define                       GetTempFileName WINELIB_NAME_AW(GetTempFileName)
+WINBASEAPI DWORD       WINAPI GetTempPathA(DWORD,LPSTR);
+WINBASEAPI DWORD       WINAPI GetTempPathW(DWORD,LPWSTR);
+#define                       GetTempPath WINELIB_NAME_AW(GetTempPath)
+WINBASEAPI DWORD       WINAPI GetThreadId(HANDLE);
+WINBASEAPI BOOL        WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL);
+WINBASEAPI DWORD       WINAPI GetTickCount(void);
+WINBASEAPI ULONGLONG   WINAPI GetTickCount64(void);
+WINBASEAPI DWORD       WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION);
+WINBASEAPI BOOL        WINAPI GetThreadContext(HANDLE,CONTEXT *);
+WINBASEAPI DWORD       WINAPI GetThreadErrorMode(void);
+WINBASEAPI INT         WINAPI GetThreadPriority(HANDLE);
+WINBASEAPI BOOL        WINAPI GetThreadPriorityBoost(HANDLE,PBOOL);
+WINBASEAPI BOOL        WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY);
+WINBASEAPI BOOL        WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);
+WINADVAPI  BOOL        WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD,LPDWORD);
+WINADVAPI  BOOL        WINAPI GetUserNameA(LPSTR,LPDWORD);
+WINADVAPI  BOOL        WINAPI GetUserNameW(LPWSTR,LPDWORD);
+#define                       GetUserName WINELIB_NAME_AW(GetUserName)
+WINBASEAPI DWORD       WINAPI GetVersion(void);
+WINBASEAPI BOOL        WINAPI GetVersionExA(OSVERSIONINFOA*);
+WINBASEAPI BOOL        WINAPI GetVersionExW(OSVERSIONINFOW*);
+#define                       GetVersionEx WINELIB_NAME_AW(GetVersionEx)
+WINBASEAPI BOOL        WINAPI GetVolumeInformationA(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
+WINBASEAPI BOOL        WINAPI GetVolumeInformationW(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
+#define                       GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)
+WINBASEAPI BOOL        WINAPI GetVolumeNameForVolumeMountPointA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI BOOL        WINAPI GetVolumeNameForVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);
+#define                       GetVolumeNameForVolumeMountPoint WINELIB_NAME_AW(GetVolumeNameForVolumeMountPoint)
+WINBASEAPI BOOL        WINAPI GetVolumePathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI BOOL        WINAPI GetVolumePathNameW(LPCWSTR,LPWSTR,DWORD);
+#define                       GetVolumePathName WINELIB_NAME_AW(GetVolumePathName)
+WINBASEAPI BOOL        WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR,LPSTR,DWORD,PDWORD);
+WINBASEAPI BOOL        WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR,LPWSTR,DWORD,PDWORD);
+#define                       GetVolumePathNamesForVolumeName WINELIB_NAME_AW(GetVolumePathNamesForVolumeName)
+WINBASEAPI UINT        WINAPI GetWindowsDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT        WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
+#define                       GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)
+WINBASEAPI UINT        WINAPI GetWriteWatch(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*);
+WINBASEAPI ATOM        WINAPI GlobalAddAtomA(LPCSTR);
+WINBASEAPI ATOM        WINAPI GlobalAddAtomW(LPCWSTR);
+#define                       GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom)
+WINBASEAPI HGLOBAL     WINAPI GlobalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);
+WINBASEAPI SIZE_T      WINAPI GlobalCompact(DWORD);
+WINBASEAPI ATOM        WINAPI GlobalDeleteAtom(ATOM);
+WINBASEAPI ATOM        WINAPI GlobalFindAtomA(LPCSTR);
+WINBASEAPI ATOM        WINAPI GlobalFindAtomW(LPCWSTR);
+#define                       GlobalFindAtom WINELIB_NAME_AW(GlobalFindAtom)
+WINBASEAPI VOID        WINAPI GlobalFix(HGLOBAL);
+WINBASEAPI UINT        WINAPI GlobalFlags(HGLOBAL);
+WINBASEAPI HGLOBAL     WINAPI GlobalFree(HGLOBAL);
+WINBASEAPI UINT        WINAPI GlobalGetAtomNameA(ATOM,LPSTR,INT);
+WINBASEAPI UINT        WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,INT);
+#define                       GlobalGetAtomName WINELIB_NAME_AW(GlobalGetAtomName)
+WINBASEAPI HGLOBAL     WINAPI GlobalHandle(LPCVOID);
+WINBASEAPI LPVOID      WINAPI GlobalLock(HGLOBAL);
+WINBASEAPI VOID        WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
+WINBASEAPI BOOL        WINAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX);
+WINBASEAPI HGLOBAL     WINAPI GlobalReAlloc(HGLOBAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(3);
+WINBASEAPI SIZE_T      WINAPI GlobalSize(HGLOBAL);
+WINBASEAPI VOID        WINAPI GlobalUnfix(HGLOBAL);
+WINBASEAPI BOOL        WINAPI GlobalUnlock(HGLOBAL);
+WINBASEAPI BOOL        WINAPI GlobalUnWire(HGLOBAL);
+WINBASEAPI LPVOID      WINAPI GlobalWire(HGLOBAL);
+#define                       HasOverlappedCompleted(lpOverlapped) ((lpOverlapped)->Internal != STATUS_PENDING)
+WINBASEAPI LPVOID      WINAPI HeapAlloc(HANDLE,DWORD,SIZE_T) __WINE_ALLOC_SIZE(3);
+WINBASEAPI SIZE_T      WINAPI HeapCompact(HANDLE,DWORD);
+WINBASEAPI HANDLE      WINAPI HeapCreate(DWORD,SIZE_T,SIZE_T);
+WINBASEAPI BOOL        WINAPI HeapDestroy(HANDLE);
+WINBASEAPI BOOL        WINAPI HeapFree(HANDLE,DWORD,LPVOID);
+WINBASEAPI BOOL        WINAPI HeapLock(HANDLE);
+WINBASEAPI LPVOID      WINAPI HeapReAlloc(HANDLE,DWORD,LPVOID,SIZE_T) __WINE_ALLOC_SIZE(4);
+WINBASEAPI BOOL        WINAPI HeapQueryInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);
+WINBASEAPI BOOL        WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);
+WINBASEAPI SIZE_T      WINAPI HeapSize(HANDLE,DWORD,LPCVOID);
+WINBASEAPI BOOL        WINAPI HeapUnlock(HANDLE);
+WINBASEAPI BOOL        WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);
+WINBASEAPI BOOL        WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
+WINBASEAPI BOOL        WINAPI InitAtomTable(DWORD);
+WINADVAPI  BOOL        WINAPI InitializeAcl(PACL,DWORD,DWORD);
+WINBASEAPI VOID        WINAPI InitializeConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI void        WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI BOOL        WINAPI InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *,DWORD);
+WINBASEAPI BOOL        WINAPI InitializeCriticalSectionEx(CRITICAL_SECTION *,DWORD,DWORD);
+WINADVAPI  BOOL        WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+WINADVAPI  BOOL        WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+WINBASEAPI VOID        WINAPI InitializeSListHead(PSLIST_HEADER);
+WINBASEAPI VOID        WINAPI InitializeSRWLock(PSRWLOCK);
+WINBASEAPI BOOL        WINAPI InitOnceBeginInitialize(PINIT_ONCE, DWORD, PBOOL, PVOID*);
+WINBASEAPI BOOL        WINAPI InitOnceComplete(PINIT_ONCE, DWORD, PVOID);
+WINBASEAPI BOOL        WINAPI InitOnceExecuteOnce(PINIT_ONCE,PINIT_ONCE_FN,PVOID,PVOID*);
+WINBASEAPI VOID        WINAPI InitOnceInitialize(PINIT_ONCE);
+WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER);
+WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER);
+WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+WINBASEAPI BOOL        WINAPI IsBadCodePtr(FARPROC);
+WINBASEAPI BOOL        WINAPI IsBadHugeReadPtr(LPCVOID,UINT);
+WINBASEAPI BOOL        WINAPI IsBadHugeWritePtr(LPVOID,UINT);
+WINBASEAPI BOOL        WINAPI IsBadReadPtr(LPCVOID,UINT);
+WINBASEAPI BOOL        WINAPI IsBadStringPtrA(LPCSTR,UINT);
+WINBASEAPI BOOL        WINAPI IsBadStringPtrW(LPCWSTR,UINT);
+#define                       IsBadStringPtr WINELIB_NAME_AW(IsBadStringPtr)
+WINBASEAPI BOOL        WINAPI IsBadWritePtr(LPVOID,UINT);
+WINBASEAPI BOOL        WINAPI IsDebuggerPresent(void);
+WINBASEAPI BOOL        WINAPI IsSystemResumeAutomatic(void);
+WINADVAPI  BOOL        WINAPI IsTextUnicode(LPCVOID,INT,LPINT);
+WINADVAPI  BOOL        WINAPI IsTokenRestricted(HANDLE);
+WINADVAPI  BOOL        WINAPI IsValidAcl(PACL);
+WINADVAPI  BOOL        WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+WINADVAPI  BOOL        WINAPI IsValidSid(PSID);
+WINADVAPI  BOOL        WINAPI IsWellKnownSid(PSID,WELL_KNOWN_SID_TYPE);
+WINBASEAPI BOOL        WINAPI IsWow64Process(HANDLE,PBOOL);
+WINADVAPI  BOOL        WINAPI ImpersonateLoggedOnUser(HANDLE);
+WINADVAPI  BOOL        WINAPI ImpersonateNamedPipeClient(HANDLE);
+WINADVAPI  BOOL        WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
+WINBASEAPI BOOL        WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL);
+WINBASEAPI BOOL        WINAPI IsProcessorFeaturePresent(DWORD);
+WINBASEAPI void        WINAPI LeaveCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI HMODULE     WINAPI LoadLibraryA(LPCSTR);
+WINBASEAPI HMODULE     WINAPI LoadLibraryW(LPCWSTR);
+#define                       LoadLibrary WINELIB_NAME_AW(LoadLibrary)
+WINBASEAPI HMODULE     WINAPI LoadLibraryExA(LPCSTR,HANDLE,DWORD);
+WINBASEAPI HMODULE     WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD);
+#define                       LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)
+WINBASEAPI DWORD       WINAPI LoadModule(LPCSTR,LPVOID);
+WINBASEAPI HGLOBAL     WINAPI LoadResource(HMODULE,HRSRC);
+WINBASEAPI HLOCAL      WINAPI LocalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);
+WINBASEAPI SIZE_T      WINAPI LocalCompact(UINT);
+WINBASEAPI UINT        WINAPI LocalFlags(HLOCAL);
+WINBASEAPI HLOCAL      WINAPI LocalFree(HLOCAL);
+WINBASEAPI HLOCAL      WINAPI LocalHandle(LPCVOID);
+WINBASEAPI LPVOID      WINAPI LocalLock(HLOCAL);
+WINBASEAPI HLOCAL      WINAPI LocalReAlloc(HLOCAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(3);
+WINBASEAPI SIZE_T      WINAPI LocalShrink(HGLOBAL,UINT);
+WINBASEAPI SIZE_T      WINAPI LocalSize(HLOCAL);
+WINBASEAPI BOOL        WINAPI LocalUnlock(HLOCAL);
+WINBASEAPI LPVOID      WINAPI LockResource(HGLOBAL);
+#define                       LockSegment(handle) GlobalFix((HANDLE)(handle))
+WINADVAPI  BOOL        WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
+WINADVAPI  BOOL        WINAPI LookupAccountNameW(LPCWSTR,LPCWSTR,PSID,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE);
+#define                       LookupAccountName WINELIB_NAME_AW(LookupAccountName)
+WINADVAPI  BOOL        WINAPI LookupAccountSidA(LPCSTR,PSID,LPSTR,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
+WINADVAPI  BOOL        WINAPI LookupAccountSidW(LPCWSTR,PSID,LPWSTR,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE);
+#define                       LookupAccountSid WINELIB_NAME_AW(LookupAccountSid)
+WINBASEAPI BOOL        WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
+WINBASEAPI BOOL        WINAPI LockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL        WINAPI LockFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED);
+WINADVAPI  BOOL        WINAPI LogonUserA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,PHANDLE);
+WINADVAPI  BOOL        WINAPI LogonUserW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,PHANDLE);
+#define                       LogonUser WINELIB_NAME_AW(LogonUser)
+WINADVAPI  BOOL        WINAPI LookupPrivilegeDisplayNameA(LPCSTR,LPCSTR,LPSTR,LPDWORD,LPDWORD);
+WINADVAPI  BOOL        WINAPI LookupPrivilegeDisplayNameW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,LPDWORD);
+#define                       LookupPrivilegeDisplayName WINELIB_NAME_AW(LookupPrivilegeDisplayName)
+WINADVAPI  BOOL        WINAPI LookupPrivilegeNameA(LPCSTR,PLUID,LPSTR,LPDWORD);
+WINADVAPI  BOOL        WINAPI LookupPrivilegeNameW(LPCWSTR,PLUID,LPWSTR,LPDWORD);
+#define                       LookupPrivilegeName WINELIB_NAME_AW(LookupPrivilegeName)
+WINADVAPI  BOOL        WINAPI LookupPrivilegeValueA(LPCSTR,LPCSTR,PLUID);
+WINADVAPI  BOOL        WINAPI LookupPrivilegeValueW(LPCWSTR,LPCWSTR,PLUID);
+#define                       LookupPrivilegeValue WINELIB_NAME_AW(LookupPrivilegeValue)
+WINADVAPI  BOOL        WINAPI MakeAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD,PACL,LPDWORD,PACL,LPDWORD,PSID,LPDWORD,PSID,LPDWORD);
+WINBASEAPI void        WINAPI MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit);
+#define                       MakeProcInstance(proc,inst) (proc)
+WINADVAPI  BOOL        WINAPI MakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
+WINADVAPI  VOID        WINAPI MapGenericMask(PDWORD,PGENERIC_MAPPING);
+WINBASEAPI HMODULE     WINAPI MapHModuleSL(WORD);
+WINBASEAPI WORD        WINAPI MapHModuleLS(HMODULE);
+WINBASEAPI LPVOID      WINAPI MapViewOfFile(HANDLE,DWORD,DWORD,DWORD,SIZE_T);
+WINBASEAPI LPVOID      WINAPI MapViewOfFileEx(HANDLE,DWORD,DWORD,DWORD,SIZE_T,LPVOID);
+WINBASEAPI BOOL        WINAPI MoveFileA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI MoveFileW(LPCWSTR,LPCWSTR);
+#define                       MoveFile WINELIB_NAME_AW(MoveFile)
+WINBASEAPI BOOL        WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD);
+WINBASEAPI BOOL        WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD);
+#define                       MoveFileEx WINELIB_NAME_AW(MoveFileEx)
+WINBASEAPI BOOL        WINAPI MoveFileWithProgressA(LPCSTR,LPCSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);
+WINBASEAPI BOOL        WINAPI MoveFileWithProgressW(LPCWSTR,LPCWSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);
+#define                       MoveFileWithProgress WINELIB_NAME_AW(MoveFileWithProgress)
+WINBASEAPI INT         WINAPI MulDiv(INT,INT,INT);
+WINBASEAPI BOOL        WINAPI NeedCurrentDirectoryForExePathA(LPCSTR);
+WINBASEAPI BOOL        WINAPI NeedCurrentDirectoryForExePathW(LPCWSTR);
+#define                       NeedCurrentDirectoryForExePath WINELIB_NAME_AW(NeedCurrentDirectoryForExePath)
+WINADVAPI  BOOL        WINAPI NotifyChangeEventLog(HANDLE,HANDLE);
+WINADVAPI  BOOL        WINAPI ObjectCloseAuditAlarmA(LPCSTR,LPVOID,BOOL);
+WINADVAPI  BOOL        WINAPI ObjectCloseAuditAlarmW(LPCWSTR,LPVOID,BOOL);
+#define                       ObjectCloseAuditAlarm WINELIB_NAME_AW(ObjectCloseAuditAlarm)
+WINADVAPI  BOOL        WINAPI ObjectDeleteAuditAlarmA(LPCSTR,LPVOID,BOOL);
+WINADVAPI  BOOL        WINAPI ObjectDeleteAuditAlarmW(LPCWSTR,LPVOID,BOOL);
+#define                       ObjectDeleteAuditAlarm WINELIB_NAME_AW(ObjectDeleteAuditAlarm)
+WINADVAPI  BOOL        WINAPI ObjectOpenAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL);
+WINADVAPI  BOOL        WINAPI ObjectOpenAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL);
+#define                       ObjectOpenAuditAlarm WINELIB_NAME_AW(ObjectOpenAuditAlarm)
+WINADVAPI  BOOL        WINAPI ObjectPrivilegeAuditAlarmA(LPCSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);
+WINADVAPI  BOOL        WINAPI ObjectPrivilegeAuditAlarmW(LPCWSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);
+#define                       ObjectPrivilegeAuditAlarm WINELIB_NAME_AW(ObjectPrivilegeAuditAlarm)
+WINADVAPI  HANDLE      WINAPI OpenBackupEventLogA(LPCSTR,LPCSTR);
+WINADVAPI  HANDLE      WINAPI OpenBackupEventLogW(LPCWSTR,LPCWSTR);
+#define                       OpenBackupEventLog WINELIB_NAME_AW(OpenBackupEventLog)
+WINBASEAPI HANDLE      WINAPI OpenEventA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI OpenEventW(DWORD,BOOL,LPCWSTR);
+#define                       OpenEvent WINELIB_NAME_AW(OpenEvent)
+WINADVAPI  HANDLE      WINAPI OpenEventLogA(LPCSTR,LPCSTR);
+WINADVAPI  HANDLE      WINAPI OpenEventLogW(LPCWSTR,LPCWSTR);
+#define                       OpenEventLog WINELIB_NAME_AW(OpenEventLog)
+WINBASEAPI HFILE       WINAPI OpenFile(LPCSTR,OFSTRUCT*,UINT);
+WINBASEAPI HANDLE      WINAPI OpenFileMappingA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI OpenFileMappingW(DWORD,BOOL,LPCWSTR);
+#define                       OpenFileMapping WINELIB_NAME_AW(OpenFileMapping)
+WINBASEAPI HANDLE      WINAPI OpenJobObjectA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI OpenJobObjectW(DWORD,BOOL,LPCWSTR);
+#define                       OpenJobObject WINELIB_NAME_AW(OpenJobObject)
+WINBASEAPI HANDLE      WINAPI OpenMutexA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI OpenMutexW(DWORD,BOOL,LPCWSTR);
+#define                       OpenMutex WINELIB_NAME_AW(OpenMutex)
+WINBASEAPI HANDLE      WINAPI OpenProcess(DWORD,BOOL,DWORD);
+WINADVAPI  BOOL        WINAPI OpenProcessToken(HANDLE,DWORD,PHANDLE);
+WINBASEAPI HANDLE      WINAPI OpenSemaphoreA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI OpenSemaphoreW(DWORD,BOOL,LPCWSTR);
+#define                       OpenSemaphore WINELIB_NAME_AW(OpenSemaphore)
+WINBASEAPI HANDLE      WINAPI OpenThread(DWORD,BOOL,DWORD);
+WINADVAPI  BOOL        WINAPI OpenThreadToken(HANDLE,DWORD,BOOL,PHANDLE);
+WINBASEAPI HANDLE      WINAPI OpenWaitableTimerA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE      WINAPI OpenWaitableTimerW(DWORD,BOOL,LPCWSTR);
+#define                       OpenWaitableTimer WINELIB_NAME_AW(OpenWaitableTimer)
+WINBASEAPI VOID        WINAPI OutputDebugStringA(LPCSTR);
+WINBASEAPI VOID        WINAPI OutputDebugStringW(LPCWSTR);
+#define                       OutputDebugString WINELIB_NAME_AW(OutputDebugString)
+WINBASEAPI BOOL        WINAPI PeekNamedPipe(HANDLE,PVOID,DWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI BOOL        WINAPI PostQueuedCompletionStatus(HANDLE,DWORD,ULONG_PTR,LPOVERLAPPED);
+WINBASEAPI DWORD       WINAPI PrepareTape(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL        WINAPI ProcessIdToSessionId(DWORD,DWORD*);
+WINADVAPI  BOOL        WINAPI PrivilegeCheck(HANDLE,PPRIVILEGE_SET,LPBOOL);
+WINADVAPI  BOOL        WINAPI PrivilegedServiceAuditAlarmA(LPCSTR,LPCSTR,HANDLE,PPRIVILEGE_SET,BOOL);
+WINADVAPI  BOOL        WINAPI PrivilegedServiceAuditAlarmW(LPCWSTR,LPCWSTR,HANDLE,PPRIVILEGE_SET,BOOL);
+#define                       PrivilegedServiceAuditAlarm WINELIB_NAME_AW(PrivilegedServiceAuditAlarm)
+WINBASEAPI BOOL        WINAPI PulseEvent(HANDLE);
+WINBASEAPI BOOL        WINAPI PurgeComm(HANDLE,DWORD);
+WINBASEAPI BOOL        WINAPI QueryActCtxW(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *);
+WINBASEAPI USHORT      WINAPI QueryDepthSList(PSLIST_HEADER);
+WINBASEAPI DWORD       WINAPI QueryDosDeviceA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD       WINAPI QueryDosDeviceW(LPCWSTR,LPWSTR,DWORD);
+#define                       QueryDosDevice WINELIB_NAME_AW(QueryDosDevice)
+WINBASEAPI BOOL        WINAPI QueryFullProcessImageNameA(HANDLE,DWORD,LPSTR,PDWORD);
+WINBASEAPI BOOL        WINAPI QueryFullProcessImageNameW(HANDLE,DWORD,LPWSTR,PDWORD);
+#define                       QueryFullProcessImageName WINELIB_NAME_AW(QueryFullProcessImageName)
+WINBASEAPI BOOL        WINAPI QueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD,DWORD*);
+WINBASEAPI BOOL        WINAPI QueryMemoryResourceNotification(HANDLE,PBOOL);
+WINBASEAPI BOOL        WINAPI QueryPerformanceCounter(LARGE_INTEGER*);
+WINBASEAPI BOOL        WINAPI QueryPerformanceFrequency(LARGE_INTEGER*);
+WINBASEAPI DWORD       WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR);
+WINBASEAPI BOOL        WINAPI QueueUserWorkItem(LPTHREAD_START_ROUTINE,PVOID,ULONG);
+WINBASEAPI void        WINAPI RaiseException(DWORD,DWORD,DWORD,const ULONG_PTR *);
+WINADVAPI  BOOL        WINAPI ReadEventLogA(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *);
+WINADVAPI  BOOL        WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *);
+#define                       ReadEventLog WINELIB_NAME_AW(ReadEventLog)
+WINBASEAPI BOOL        WINAPI ReadDirectoryChangesW(HANDLE,LPVOID,DWORD,BOOL,DWORD,LPDWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL        WINAPI ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI ReadFileEx(HANDLE,LPVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL        WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,SIZE_T*);
+WINADVAPI  HANDLE      WINAPI RegisterEventSourceA(LPCSTR,LPCSTR);
+WINADVAPI  HANDLE      WINAPI RegisterEventSourceW(LPCWSTR,LPCWSTR);
+#define                       RegisterEventSource WINELIB_NAME_AW(RegisterEventSource)
+WINBASEAPI BOOL        WINAPI RegisterWaitForSingleObject(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);
+WINBASEAPI HANDLE      WINAPI RegisterWaitForSingleObjectEx(HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);
+WINBASEAPI VOID        WINAPI ReleaseActCtx(HANDLE);
+WINBASEAPI BOOL        WINAPI ReleaseMutex(HANDLE);
+WINBASEAPI BOOL        WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG);
+WINBASEAPI VOID        WINAPI ReleaseSRWLockExclusive(PSRWLOCK);
+WINBASEAPI VOID        WINAPI ReleaseSRWLockShared(PSRWLOCK);
+WINBASEAPI ULONG       WINAPI RemoveVectoredExceptionHandler(PVOID);
+WINBASEAPI BOOL        WINAPI ReplaceFileA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPVOID,LPVOID);
+WINBASEAPI BOOL        WINAPI ReplaceFileW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPVOID,LPVOID);
+#define                       ReplaceFile WINELIB_NAME_AW(ReplaceFile)
+WINBASEAPI BOOL        WINAPI RemoveDirectoryA(LPCSTR);
+WINBASEAPI BOOL        WINAPI RemoveDirectoryW(LPCWSTR);
+#define                       RemoveDirectory WINELIB_NAME_AW(RemoveDirectory)
+WINADVAPI  BOOL        WINAPI ReportEventA(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCSTR *,LPVOID);
+WINADVAPI  BOOL        WINAPI ReportEventW(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCWSTR *,LPVOID);
+WINBASEAPI BOOL        WINAPI RequestWakeupLatency(LATENCY_TIME latency);
+#define                       ReportEvent WINELIB_NAME_AW(ReportEvent)
+WINBASEAPI BOOL        WINAPI ResetEvent(HANDLE);
+WINBASEAPI UINT        WINAPI ResetWriteWatch(LPVOID,SIZE_T);
+WINBASEAPI DWORD       WINAPI ResumeThread(HANDLE);
+WINADVAPI  BOOL        WINAPI RevertToSelf(void);
+WINBASEAPI DWORD       WINAPI SearchPathA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*);
+WINBASEAPI DWORD       WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+#define                       SearchPath WINELIB_NAME_AW(SearchPath)
+WINADVAPI  BOOL        WINAPI SetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI BOOL        WINAPI SetCommConfig(HANDLE,LPCOMMCONFIG,DWORD);
+WINBASEAPI BOOL        WINAPI SetCommBreak(HANDLE);
+WINBASEAPI BOOL        WINAPI SetCommMask(HANDLE,DWORD);
+WINBASEAPI BOOL        WINAPI SetCommState(HANDLE,LPDCB);
+WINBASEAPI BOOL        WINAPI SetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL        WINAPI SetComputerNameA(LPCSTR);
+WINBASEAPI BOOL        WINAPI SetComputerNameW(LPCWSTR);
+#define                       SetComputerName WINELIB_NAME_AW(SetComputerName)
+WINBASEAPI BOOL        WINAPI SetComputerNameExA(COMPUTER_NAME_FORMAT,LPCSTR);
+WINBASEAPI BOOL        WINAPI SetComputerNameExW(COMPUTER_NAME_FORMAT,LPCWSTR);
+#define                       SetComputerNameEx WINELIB_NAME_AW(SetComputerNameEx)
+WINBASEAPI DWORD       WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD);
+WINBASEAPI BOOL        WINAPI SetCurrentDirectoryA(LPCSTR);
+WINBASEAPI BOOL        WINAPI SetCurrentDirectoryW(LPCWSTR);
+#define                       SetCurrentDirectory WINELIB_NAME_AW(SetCurrentDirectory)
+WINBASEAPI BOOL        WINAPI SetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,DWORD);
+WINBASEAPI BOOL        WINAPI SetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,DWORD);
+#define                       SetDefaultCommConfig WINELIB_NAME_AW(SetDefaultCommConfig)
+WINBASEAPI BOOL        WINAPI SetDllDirectoryA(LPCSTR);
+WINBASEAPI BOOL        WINAPI SetDllDirectoryW(LPCWSTR);
+#define                       SetDllDirectory WINELIB_NAME_AW(SetDllDirectory)
+WINBASEAPI BOOL        WINAPI SetDynamicTimeZoneInformation(const DYNAMIC_TIME_ZONE_INFORMATION*);
+WINBASEAPI BOOL        WINAPI SetEndOfFile(HANDLE);
+WINBASEAPI BOOL        WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR);
+#define                       SetEnvironmentVariable WINELIB_NAME_AW(SetEnvironmentVariable)
+WINBASEAPI UINT        WINAPI SetErrorMode(UINT);
+WINBASEAPI BOOL        WINAPI SetEvent(HANDLE);
+WINBASEAPI VOID        WINAPI SetFileApisToANSI(void);
+WINBASEAPI VOID        WINAPI SetFileApisToOEM(void);
+WINBASEAPI BOOL        WINAPI SetFileAttributesA(LPCSTR,DWORD);
+WINBASEAPI BOOL        WINAPI SetFileAttributesW(LPCWSTR,DWORD);
+#define                       SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)
+WINBASEAPI DWORD       WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD);
+WINBASEAPI BOOL        WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD);
+WINADVAPI  BOOL        WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI  BOOL        WINAPI SetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+#define                       SetFileSecurity WINELIB_NAME_AW(SetFileSecurity)
+WINBASEAPI BOOL        WINAPI SetFileTime(HANDLE,const FILETIME*,const FILETIME*,const FILETIME*);
+WINBASEAPI BOOL        WINAPI SetFileValidData(HANDLE,LONGLONG);
+WINBASEAPI UINT        WINAPI SetHandleCount(UINT);
+WINBASEAPI BOOL        WINAPI SetHandleInformation(HANDLE,DWORD,DWORD);
+WINBASEAPI BOOL        WINAPI SetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD);
+WINADVAPI  BOOL        WINAPI SetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINBASEAPI BOOL        WINAPI SetLocalTime(const SYSTEMTIME*);
+WINBASEAPI BOOL        WINAPI SetMailslotInfo(HANDLE,DWORD);
+WINBASEAPI BOOL        WINAPI SetNamedPipeHandleState(HANDLE,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI BOOL        WINAPI SetPriorityClass(HANDLE,DWORD);
+WINADVAPI  BOOL        WINAPI SetPrivateObjectSecurity(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,PGENERIC_MAPPING,HANDLE);
+WINBASEAPI BOOL        WINAPI SetProcessAffinityMask(HANDLE,DWORD_PTR);
+WINBASEAPI BOOL        WINAPI SetProcessPriorityBoost(HANDLE,BOOL);
+WINBASEAPI BOOL        WINAPI SetProcessShutdownParameters(DWORD,DWORD);
+WINBASEAPI BOOL        WINAPI SetProcessWorkingSetSize(HANDLE,SIZE_T,SIZE_T);
+WINADVAPI  BOOL        WINAPI SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);
+WINADVAPI  BOOL        WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
+WINADVAPI  BOOL        WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);
+WINADVAPI  BOOL        WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID,BOOL);
+WINADVAPI  BOOL        WINAPI SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
+WINBASEAPI BOOL        WINAPI SetStdHandle(DWORD,HANDLE);
+#define                       SetSwapAreaSize(w) (w)
+WINBASEAPI BOOL        WINAPI SetSystemPowerState(BOOL,BOOL);
+WINBASEAPI BOOL        WINAPI SetSystemTime(const SYSTEMTIME*);
+WINBASEAPI BOOL        WINAPI SetSystemTimeAdjustment(DWORD,BOOL);
+WINBASEAPI DWORD       WINAPI SetTapeParameters(HANDLE,DWORD,LPVOID);
+WINBASEAPI DWORD       WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL);
+WINBASEAPI DWORD_PTR   WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR);
+WINBASEAPI BOOL        WINAPI SetThreadContext(HANDLE,const CONTEXT *);
+WINBASEAPI BOOL        WINAPI SetThreadErrorMode(DWORD,LPDWORD);
+WINBASEAPI DWORD       WINAPI SetThreadExecutionState(EXECUTION_STATE);
+WINBASEAPI DWORD       WINAPI SetThreadIdealProcessor(HANDLE,DWORD);
+WINBASEAPI BOOL        WINAPI SetThreadPriority(HANDLE,INT);
+WINBASEAPI BOOL        WINAPI SetThreadPriorityBoost(HANDLE,BOOL);
+WINADVAPI  BOOL        WINAPI SetThreadToken(PHANDLE,HANDLE);
+WINBASEAPI HANDLE      WINAPI SetTimerQueueTimer(HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,BOOL);
+WINBASEAPI BOOL        WINAPI SetTimeZoneInformation(const TIME_ZONE_INFORMATION *);
+WINADVAPI  BOOL        WINAPI SetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD);
+WINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER);
+WINBASEAPI BOOL        WINAPI SetVolumeLabelA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI SetVolumeLabelW(LPCWSTR,LPCWSTR);
+#define                       SetVolumeLabel WINELIB_NAME_AW(SetVolumeLabel)
+WINBASEAPI BOOL        WINAPI SetVolumeMountPointA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI SetVolumeMountPointW(LPCSTR,LPCSTR);
+#define                       SetVolumeMountPoint WINELIB_NAME_AW(SetVolumeMountPoint)
+WINBASEAPI BOOL        WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,BOOL);
+WINBASEAPI BOOL        WINAPI SetupComm(HANDLE,DWORD,DWORD);
+WINBASEAPI DWORD       WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);
+WINBASEAPI DWORD       WINAPI SizeofResource(HMODULE,HRSRC);
+WINBASEAPI VOID        WINAPI Sleep(DWORD);
+WINBASEAPI BOOL        WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE,PCRITICAL_SECTION,DWORD);
+WINBASEAPI DWORD       WINAPI SleepEx(DWORD,BOOL);
+WINBASEAPI DWORD       WINAPI SuspendThread(HANDLE);
+WINBASEAPI void        WINAPI SwitchToFiber(LPVOID);
+WINBASEAPI BOOL        WINAPI SwitchToThread(void);
+WINBASEAPI BOOL        WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME);
+WINBASEAPI BOOL        WINAPI SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME);
+WINBASEAPI BOOL        WINAPI TerminateJobObject(HANDLE,UINT);
+WINBASEAPI BOOL        WINAPI TerminateProcess(HANDLE,DWORD);
+WINBASEAPI BOOL        WINAPI TerminateThread(HANDLE,DWORD);
+WINBASEAPI DWORD       WINAPI TlsAlloc(void);
+WINBASEAPI BOOL        WINAPI TlsFree(DWORD);
+WINBASEAPI LPVOID      WINAPI TlsGetValue(DWORD);
+WINBASEAPI BOOL        WINAPI TlsSetValue(DWORD,LPVOID);
+WINBASEAPI BOOL        WINAPI TransactNamedPipe(HANDLE,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI TransmitCommChar(HANDLE,CHAR);
+WINBASEAPI BOOL        WINAPI TryAcquireSRWLockExclusive(PSRWLOCK);
+WINBASEAPI BOOL        WINAPI TryAcquireSRWLockShared(PSRWLOCK);
+WINBASEAPI BOOL        WINAPI TryEnterCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI BOOL        WINAPI TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME);
+WINBASEAPI LONG        WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS);
+WINBASEAPI BOOL        WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL        WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED);
+#define                       UnlockSegment(handle) GlobalUnfix((HANDLE)(handle))
+WINBASEAPI BOOL        WINAPI UnmapViewOfFile(LPCVOID);
+WINBASEAPI BOOL        WINAPI UnregisterWait(HANDLE);
+WINBASEAPI BOOL        WINAPI UnregisterWaitEx(HANDLE,HANDLE);
+WINBASEAPI BOOL        WINAPI UpdateResourceA(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD);
+WINBASEAPI BOOL        WINAPI UpdateResourceW(HANDLE,LPCWSTR,LPCWSTR,WORD,LPVOID,DWORD);
+#define                       UpdateResource WINELIB_NAME_AW(UpdateResource)
+WINBASEAPI BOOL        WINAPI VerifyVersionInfoA(LPOSVERSIONINFOEXA,DWORD,DWORDLONG);
+WINBASEAPI BOOL        WINAPI VerifyVersionInfoW(LPOSVERSIONINFOEXW,DWORD,DWORDLONG);
+#define                       VerifyVersionInfo WINELIB_NAME_AW(VerifyVersionInfo)
+WINBASEAPI LPVOID      WINAPI VirtualAlloc(LPVOID,SIZE_T,DWORD,DWORD);
+WINBASEAPI LPVOID      WINAPI VirtualAllocEx(HANDLE,LPVOID,SIZE_T,DWORD,DWORD);
+WINBASEAPI BOOL        WINAPI VirtualFree(LPVOID,SIZE_T,DWORD);
+WINBASEAPI BOOL        WINAPI VirtualFreeEx(HANDLE,LPVOID,SIZE_T,DWORD);
+WINBASEAPI BOOL        WINAPI VirtualLock(LPVOID,SIZE_T);
+WINBASEAPI BOOL        WINAPI VirtualProtect(LPVOID,SIZE_T,DWORD,LPDWORD);
+WINBASEAPI BOOL        WINAPI VirtualProtectEx(HANDLE,LPVOID,SIZE_T,DWORD,LPDWORD);
+WINBASEAPI SIZE_T      WINAPI VirtualQuery(LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T);
+WINBASEAPI SIZE_T      WINAPI VirtualQueryEx(HANDLE,LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T);
+WINBASEAPI BOOL        WINAPI VirtualUnlock(LPVOID,SIZE_T);
+WINBASEAPI DWORD       WINAPI WTSGetActiveConsoleSessionId(void);
+WINBASEAPI BOOL        WINAPI WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD);
+WINBASEAPI DWORD       WINAPI WaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD);
+WINBASEAPI DWORD       WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE*,BOOL,DWORD,BOOL);
+WINBASEAPI DWORD       WINAPI WaitForSingleObject(HANDLE,DWORD);
+WINBASEAPI DWORD       WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL        WINAPI WaitNamedPipeA(LPCSTR,DWORD);
+WINBASEAPI BOOL        WINAPI WaitNamedPipeW(LPCWSTR,DWORD);
+#define                       WaitNamedPipe WINELIB_NAME_AW(WaitNamedPipe)
+WINBASEAPI VOID        WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI VOID        WINAPI WakeConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI UINT        WINAPI WinExec(LPCSTR,UINT);
+WINBASEAPI BOOL        WINAPI Wow64DisableWow64FsRedirection(PVOID*);
+WINBASEAPI BOOLEAN     WINAPI Wow64EnableWow64FsRedirection(BOOLEAN);
+WINBASEAPI BOOL        WINAPI Wow64RevertWow64FsRedirection(PVOID);
+WINBASEAPI BOOL        WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL        WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL        WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define                       WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)
+WINBASEAPI BOOL        WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+#define                       WritePrivateProfileString WINELIB_NAME_AW(WritePrivateProfileString)
+WINBASEAPI BOOL        WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+WINBASEAPI BOOL        WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
+#define                       WritePrivateProfileStruct WINELIB_NAME_AW(WritePrivateProfileStruct)
+WINBASEAPI BOOL        WINAPI WriteProcessMemory(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_T*);
+WINBASEAPI BOOL        WINAPI WriteProfileSectionA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI WriteProfileSectionW(LPCWSTR,LPCWSTR);
+#define                       WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)
+WINBASEAPI BOOL        WINAPI WriteProfileStringA(LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL        WINAPI WriteProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define                       WriteProfileString WINELIB_NAME_AW(WriteProfileString)
+WINBASEAPI DWORD       WINAPI WriteTapemark(HANDLE,DWORD,DWORD,BOOL);
+#define                       Yield()
+WINBASEAPI BOOL        WINAPI ZombifyActCtx(HANDLE);
+
+WINBASEAPI INT         WINAPI lstrcmpA(LPCSTR,LPCSTR);
+WINBASEAPI INT         WINAPI lstrcmpW(LPCWSTR,LPCWSTR);
+WINBASEAPI INT         WINAPI lstrcmpiA(LPCSTR,LPCSTR);
+WINBASEAPI INT         WINAPI lstrcmpiW(LPCWSTR,LPCWSTR);
+
+#if !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING)
+
+WINBASEAPI LPSTR       WINAPI lstrcatA(LPSTR,LPCSTR);
+WINBASEAPI LPWSTR      WINAPI lstrcatW(LPWSTR,LPCWSTR);
+WINBASEAPI LPSTR       WINAPI lstrcpyA(LPSTR,LPCSTR);
+WINBASEAPI LPWSTR      WINAPI lstrcpyW(LPWSTR,LPCWSTR);
+WINBASEAPI LPSTR       WINAPI lstrcpynA(LPSTR,LPCSTR,INT);
+WINBASEAPI LPWSTR      WINAPI lstrcpynW(LPWSTR,LPCWSTR,INT);
+WINBASEAPI INT         WINAPI lstrlenA(LPCSTR);
+WINBASEAPI INT         WINAPI lstrlenW(LPCWSTR);
+
+#else
+
+/* string functions without the exception handler */
+
+static inline LPWSTR WINAPI lstrcpynW( LPWSTR dst, LPCWSTR src, INT n )
+{
+    LPWSTR d = dst;
+    LPCWSTR s = src;
+    UINT count = n;
+
+    while ((count > 1) && *s)
+    {
+        count--;
+        *d++ = *s++;
+    }
+    if (count) *d = 0;
+    return dst;
+}
+
+static inline LPSTR WINAPI lstrcpynA( LPSTR dst, LPCSTR src, INT n )
+{
+    LPSTR d = dst;
+    LPCSTR s = src;
+    UINT count = n;
+
+    while ((count > 1) && *s)
+    {
+        count--;
+        *d++ = *s++;
+    }
+    if (count) *d = 0;
+    return dst;
+}
+
+static inline INT WINAPI lstrlenW( LPCWSTR str )
+{
+    const WCHAR *s = str;
+    while (*s) s++;
+    return s - str;
+}
+
+static inline INT WINAPI lstrlenA( LPCSTR str )
+{
+    return strlen( str );
+}
+
+static inline LPWSTR WINAPI lstrcpyW( LPWSTR dst, LPCWSTR src )
+{
+    WCHAR *p = dst;
+    while ((*p++ = *src++));
+    return dst;
+}
+
+static inline LPSTR WINAPI lstrcpyA( LPSTR dst, LPCSTR src )
+{
+    return strcpy( dst, src );
+}
+
+static inline LPWSTR WINAPI lstrcatW( LPWSTR dst, LPCWSTR src )
+{
+    WCHAR *p = dst;
+    while (*p) p++;
+    while ((*p++ = *src++));
+    return dst;
+}
+
+static inline LPSTR WINAPI lstrcatA( LPSTR dst, LPCSTR src )
+{
+    return strcat( dst, src );
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#undef strncpy
+#define strncpy(d,s,n) error do_not_use_strncpy_use_lstrcpynA_or_memcpy_instead
+
+#endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) */
+
+#define     lstrcat WINELIB_NAME_AW(lstrcat)
+#define     lstrcmp WINELIB_NAME_AW(lstrcmp)
+#define     lstrcmpi WINELIB_NAME_AW(lstrcmpi)
+#define     lstrcpy WINELIB_NAME_AW(lstrcpy)
+#define     lstrcpyn WINELIB_NAME_AW(lstrcpyn)
+#define     lstrlen WINELIB_NAME_AW(lstrlen)
+
+WINBASEAPI LONG        WINAPI _hread(HFILE,LPVOID,LONG);
+WINBASEAPI LONG        WINAPI _hwrite(HFILE,LPCSTR,LONG);
+WINBASEAPI HFILE       WINAPI _lcreat(LPCSTR,INT);
+WINBASEAPI HFILE       WINAPI _lclose(HFILE);
+WINBASEAPI LONG        WINAPI _llseek(HFILE,LONG,INT);
+WINBASEAPI HFILE       WINAPI _lopen(LPCSTR,INT);
+WINBASEAPI UINT        WINAPI _lread(HFILE,LPVOID,UINT);
+WINBASEAPI UINT        WINAPI _lwrite(HFILE,LPCSTR,UINT);
+
+/* compatibility macros */
+#define     FillMemory RtlFillMemory
+#define     MoveMemory RtlMoveMemory
+#define     ZeroMemory RtlZeroMemory
+#define     CopyMemory RtlCopyMemory
+
+/* Wine internal functions */
+
+extern char * CDECL wine_get_unix_file_name( LPCWSTR dos );
+extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );
+
+
+/* Interlocked functions */
+
+#ifdef __i386__
+# if defined(__GNUC__) && !defined(_NTSYSTEM_) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+    LONG ret;
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+    LONG ret;
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+    LONG ret;
+    __asm__ __volatile__( "lock; xaddl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+    return InterlockedExchangeAdd( dest, 1 ) + 1;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+    return InterlockedExchangeAdd( dest, -1 ) - 1;
+}
+
+# else  /* __GNUC__ */
+
+WINBASEAPI LONG WINAPI InterlockedCompareExchange(LONG volatile*,LONG,LONG);
+WINBASEAPI LONG WINAPI InterlockedDecrement(LONG volatile*);
+WINBASEAPI LONG WINAPI InterlockedExchange(LONG volatile*,LONG);
+WINBASEAPI LONG WINAPI InterlockedExchangeAdd(LONG volatile*,LONG);
+WINBASEAPI LONG WINAPI InterlockedIncrement(LONG volatile*);
+
+# endif  /* __GNUC__ */
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+    return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+    return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val );
+}
+
+WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGLONG,LONGLONG);
+
+#elif defined(_MSC_VER)
+
+#pragma intrinsic(_InterlockedCompareExchange)
+#pragma intrinsic(_InterlockedCompareExchangePointer)
+#pragma intrinsic(_InterlockedCompareExchange64)
+#pragma intrinsic(_InterlockedExchange)
+#pragma intrinsic(_InterlockedExchangePointer)
+#pragma intrinsic(_InterlockedExchangeAdd)
+#pragma intrinsic(_InterlockedIncrement)
+#pragma intrinsic(_InterlockedDecrement)
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+    return _InterlockedCompareExchange( dest, xchg, compare );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+    return _InterlockedCompareExchangePointer( dest, xchg, compare );
+}
+
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+{
+    return _InterlockedCompareExchange64( dest, xchg, compare );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+    return _InterlockedExchange( dest, val );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+    return _InterlockedExchangePointer( dest, val );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+    return _InterlockedExchangeAdd( dest, incr );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+    return _InterlockedIncrement( dest );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+    return _InterlockedDecrement( dest );
+}
+
+#elif defined(__GNUC__)
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+    return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+    return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+{
+    return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+    LONG ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+    return ret;
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+    PVOID ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+    return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+    return __sync_fetch_and_add( dest, incr );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+    return __sync_add_and_fetch( dest, 1 );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+    return __sync_add_and_fetch( dest, -1 );
+}
+
+#endif  /* __i386__ */
+
+/* A few optimizations for gcc */
+
+#if defined(__GNUC__) && !defined(__MINGW32__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+
+static FORCEINLINE DWORD WINAPI GetLastError(void)
+{
+    DWORD ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( ".byte 0x65\n\tmovl 0x68,%0" : "=r" (ret) );
+#else
+    __asm__ __volatile__( ".byte 0x64\n\tmovl 0x34,%0" : "=r" (ret) );
+#endif
+    return ret;
+}
+
+static FORCEINLINE DWORD WINAPI GetCurrentProcessId(void)
+{
+    DWORD ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( ".byte 0x65\n\tmovl 0x40,%0" : "=r" (ret) );
+#else
+    __asm__ __volatile__( ".byte 0x64\n\tmovl 0x20,%0" : "=r" (ret) );
+#endif
+    return ret;
+}
+
+static FORCEINLINE DWORD WINAPI GetCurrentThreadId(void)
+{
+    DWORD ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( ".byte 0x65\n\tmovl 0x48,%0" : "=r" (ret) );
+#else
+    __asm__ __volatile__( ".byte 0x64\n\tmovl 0x24,%0" : "=r" (ret) );
+#endif
+    return ret;
+}
+
+static FORCEINLINE void WINAPI SetLastError( DWORD err )
+{
+#ifdef __x86_64__
+    __asm__ __volatile__( ".byte 0x65\n\tmovl %0,0x68" : : "r" (err) : "memory" );
+#else
+    __asm__ __volatile__( ".byte 0x64\n\tmovl %0,0x34" : : "r" (err) : "memory" );
+#endif
+}
+
+static FORCEINLINE HANDLE WINAPI GetProcessHeap(void)
+{
+    HANDLE *pdb;
+#ifdef __x86_64__
+    __asm__ __volatile__( ".byte 0x65\n\tmovq 0x60,%0" : "=r" (pdb) );
+    return pdb[0x30 / sizeof(HANDLE)];  /* get dword at offset 0x30 in pdb */
+#else
+    __asm__ __volatile__( ".byte 0x64\n\tmovl 0x30,%0" : "=r" (pdb) );
+    return pdb[0x18 / sizeof(HANDLE)];  /* get dword at offset 0x18 in pdb */
+#endif
+}
+
+#else  /* __GNUC__ */
+
+WINBASEAPI DWORD       WINAPI GetCurrentProcessId(void);
+WINBASEAPI DWORD       WINAPI GetCurrentThreadId(void);
+WINBASEAPI DWORD       WINAPI GetLastError(void);
+WINBASEAPI HANDLE      WINAPI GetProcessHeap(void);
+WINBASEAPI VOID        WINAPI SetLastError(DWORD);
+
+#endif  /* __GNUC__ */
+
+#ifdef __WINESRC__
+#define GetCurrentProcess() ((HANDLE)~(ULONG_PTR)0)
+#define GetCurrentThread()  ((HANDLE)~(ULONG_PTR)1)
+#endif
+
+/* WinMain(entry point) must be declared in winbase.h. */
+/* If this is not declared, we cannot compile many sources written with C++. */
+int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
+
+#ifdef __WINESRC__
+/* shouldn't be here, but is nice for type checking */
+BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) DECLSPEC_HIDDEN;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINBASE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl
new file mode 100644
index 0000000..db0b917
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl
@@ -0,0 +1,1041 @@
+/*
+ * Copyright 2009 Vincent Povirk 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "propidl.idl";
+import "ocidl.idl";
+
+cpp_quote("#define WINCODEC_SDK_VERSION 0x0236")
+
+#define CODEC_FORCE_DWORD 0x7fffffff
+
+typedef enum WICDecodeOptions {
+    WICDecodeMetadataCacheOnDemand = 0x00000000,
+    WICDecodeMetadataCacheOnLoad = 0x00000001,
+    WICMETADATACACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICDecodeOptions;
+
+typedef enum WICBitmapCreateCacheOption {
+    WICBitmapNoCache = 0x00000000,
+    WICBitmapCacheOnDemand = 0x00000001,
+    WICBitmapCacheOnLoad = 0x00000002,
+    WICBITMAPCREATECACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapCreateCacheOption;
+
+typedef enum WICBitmapAlphaChannelOption {
+    WICBitmapUseAlpha = 0x00000000,
+    WICBitmapUsePremultipliedAlpha = 0x00000001,
+    WICBitmapIgnoreAlpha = 0x00000002,
+    WICBITMAPALPHACHANNELOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapAlphaChannelOption;
+
+typedef enum WICBitmapDecoderCapabilities {
+    WICBitmapDecoderCapabilitySameEncoder = 0x00000001,
+    WICBitmapDecoderCapabilityCanDecodeAllImages = 0x00000002,
+    WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x00000004,
+    WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x00000008,
+    WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x00000010,
+} WICBitmapDecoderCapabilities;
+
+typedef enum WICBitmapDitherType {
+    WICBitmapDitherTypeNone = 0x00000000,
+    WICBitmapDitherTypeSolid = 0x00000000,
+    WICBitmapDitherTypeOrdered4x4 = 0x00000001,
+    WICBitmapDitherTypeOrdered8x8 = 0x00000002,
+    WICBitmapDitherTypeOrdered16x16 = 0x00000003,
+    WICBitmapDitherTypeSpiral4x4 = 0x00000004,
+    WICBitmapDitherTypeSpiral8x8 = 0x00000005,
+    WICBitmapDitherTypeDualSpiral4x4 = 0x00000006,
+    WICBitmapDitherTypeDualSpiral8x8 = 0x00000007,
+    WICBitmapDitherTypeErrorDiffusion = 0x00000008,
+    WICBITMAPDITHERTYPE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapDitherType;
+
+typedef enum WICBitmapEncoderCacheOption {
+    WICBitmapEncoderCacheInMemory = 0x00000000,
+    WICBitmapEncoderCacheTempFile = 0x00000001,
+    WICBitmapEncoderNoCache = 0x00000002,
+    WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapEncoderCacheOption;
+
+typedef enum WICBitmapInterpolationMode {
+    WICBitmapInterpolationModeNearestNeighbor = 0x00000000,
+    WICBitmapInterpolationModeLinear = 0x00000001,
+    WICBitmapInterpolationModeCubic = 0x00000002,
+    WICBitmapInterpolationModeFant = 0x00000003,
+    WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapInterpolationMode;
+
+typedef enum WICBitmapLockFlags {
+    WICBitmapLockRead = 0x00000001,
+    WICBitmapLockWrite = 0x00000002,
+    WICBITMAPLOCKFLAGS_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapLockFlags;
+
+typedef enum WICBitmapPaletteType {
+    WICBitmapPaletteTypeCustom = 0x00000000,
+    WICBitmapPaletteTypeMedianCut = 0x00000001,
+    WICBitmapPaletteTypeFixedBW = 0x00000002,
+    WICBitmapPaletteTypeFixedHalftone8 = 0x00000003,
+    WICBitmapPaletteTypeFixedHalftone27 = 0x00000004,
+    WICBitmapPaletteTypeFixedHalftone64 = 0x00000005,
+    WICBitmapPaletteTypeFixedHalftone125 = 0x00000006,
+    WICBitmapPaletteTypeFixedHalftone216 = 0x00000007,
+    WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216,
+    WICBitmapPaletteTypeFixedHalftone252 = 0x00000008,
+    WICBitmapPaletteTypeFixedHalftone256 = 0x00000009,
+    WICBitmapPaletteTypeFixedGray4 = 0x0000000A,
+    WICBitmapPaletteTypeFixedGray16 = 0x0000000B,
+    WICBitmapPaletteTypeFixedGray256 = 0x0000000C,
+    WICBITMAPPALETTETYPE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapPaletteType;
+
+typedef enum WICBitmapTransformOptions {
+    WICBitmapTransformRotate0 = 0x00000000,
+    WICBitmapTransformRotate90 = 0x00000001,
+    WICBitmapTransformRotate180 = 0x00000002,
+    WICBitmapTransformRotate270 = 0x00000003,
+    WICBitmapTransformFlipHorizontal = 0x00000008,
+    WICBitmapTransformFlipVertical = 0x00000010,
+    WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapTransformOptions;
+
+typedef enum WICColorContextType {
+    WICColorContextUninitialized = 0x00000000,
+    WICColorContextProfile = 0x00000001,
+    WICColorContextExifColorSpace = 0x00000002
+} WICColorContextType;
+
+typedef enum WICComponentType {
+    WICDecoder = 0x00000001,
+    WICEncoder = 0x00000002,
+    WICPixelFormatConverter = 0x00000004,
+    WICMetadataReader = 0x00000008,
+    WICMetadataWriter = 0x00000010,
+    WICPixelFormat = 0x00000020,
+    WICCOMPONENTTYPE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICComponentType;
+
+typedef enum WICComponentSigning {
+    WICComponentSigned = 0x00000001,
+    WICComponentUnsigned = 0x00000002,
+    WICComponentSafe = 0x00000004,
+    WICComponentDisabled = 0x80000000
+} WICComponentSigning;
+
+typedef enum WICComponentEnumerateOptions {
+    WICComponentEnumerateDefault = 0x00000000,
+    WICComponentEnumerateRefresh = 0x00000001,
+    WICComponentEnumerateBuiltInOnly = 0x20000000,
+    WICComponentEnumerateUnsigned = 0x40000000,
+    WICComponentEnumerateDisabled = 0x80000000
+} WICComponentEnumerateOptions;
+
+typedef enum WICPixelFormatNumericRepresentation {
+    WICPixelFormatNumericRepresentationUnspecified = 0x00000000,
+    WICPixelFormatNumericRepresentationIndexed = 0x00000001,
+    WICPixelFormatNumericRepresentationUnsignedInteger = 0x00000002,
+    WICPixelFormatNumericRepresentationSignedInteger = 0x00000003,
+    WICPixelFormatNumericRepresentationFixed = 0x00000004,
+    WICPixelFormatNumericRepresentationFloat = 0x00000005,
+    WICPIXELFORMATNUMERICREPRESENTATION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICPixelFormatNumericRepresentation;
+
+typedef enum WICTiffCompressionOption {
+    WICTiffCompressionDontCare = 0x00000000,
+    WICTiffCompressionNone = 0x00000001,
+    WICTiffCompressionCCITT3 = 0x00000002,
+    WICTiffCompressionCCITT4 = 0x00000003,
+    WICTiffCompressionLZW = 0x00000004,
+    WICTiffCompressionRLE = 0x00000005,
+    WICTiffCompressionZIP = 0x00000006,
+    WICTiffCompressionLZWHDifferencing = 0x00000007,
+    WICTIFFCOMPRESSIONOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICTiffCompressionOption;
+
+typedef GUID WICPixelFormatGUID;
+typedef REFGUID REFWICPixelFormatGUID;
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormatDontCare, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x00);")
+cpp_quote("#define GUID_WICPixelFormatUndefined GUID_WICPixelFormatDontCare")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat1bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x01);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat2bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x02);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat4bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x03);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat8bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x04);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormatBlackWhite, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x05);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat2bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x06);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat4bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x07);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat8bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x08);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0b);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGR555, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x09);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGR565, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0a);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGRA5551, 0x05ec7c2b,0xf1e6,0x4961,0xad,0x46,0xe1,0xcc,0x81,0x0a,0x87,0xd2);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat24bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0c);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat24bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0d);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0e);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0f);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppPBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x10);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat48bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x15);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x16);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x17);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppCMYK, 0x6fddc324,0x4e03,0x4fbe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x1c);")
+
+typedef struct WICRect {
+    INT X;
+    INT Y;
+    INT Width;
+    INT Height;
+} WICRect;
+
+typedef struct WICBitmapPattern {
+    ULARGE_INTEGER Position;
+    ULONG Length;
+    BYTE *Pattern;
+    BYTE *Mask;
+    BOOL EndOfStream;
+} WICBitmapPattern;
+
+typedef UINT32 WICColor;
+
+cpp_quote("#define WINCODEC_ERR_WRONGSTATE 0x88982f04")
+cpp_quote("#define WINCODEC_ERR_VALUEOUTOFRANGE 0x88982f05")
+cpp_quote("#define WINCODEC_ERR_NOTINITIALIZED 0x88982f0c")
+cpp_quote("#define WINCODEC_ERR_ALREADYLOCKED 0x88982f0d")
+cpp_quote("#define WINCODEC_ERR_PROPERTYNOTFOUND 0x88982f40")
+cpp_quote("#define WINCODEC_ERR_CODECNOTHUMBNAIL 0x88982f44")
+cpp_quote("#define WINCODEC_ERR_PALETTEUNAVAILABLE 0x88982f45")
+cpp_quote("#define WINCODEC_ERR_COMPONENTNOTFOUND 0x88982f50")
+cpp_quote("#define WINCODEC_ERR_BADIMAGE 0x88982f60")
+cpp_quote("#define WINCODEC_ERR_FRAMEMISSING 0x88982f62")
+cpp_quote("#define WINCODEC_ERR_BADMETADATAHEADER 0x88982f63")
+cpp_quote("#define WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT 0x88982f80")
+cpp_quote("#define WINCODEC_ERR_UNSUPPORTEDOPERATION 0x88982f81")
+cpp_quote("#define WINCODEC_ERR_INSUFFICIENTBUFFER 0x88982f8c")
+cpp_quote("#define WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE 0x88982f8e")
+cpp_quote("#define WINCODEC_ERR_WIN32ERROR 0x88982f94")
+
+interface IWICPalette;
+
+[
+    object,
+    uuid(3c613a02-34b2-44ea-9a7c-45aea9c6fd6d)
+]
+interface IWICColorContext : IUnknown
+{
+    HRESULT InitializeFromFilename(
+        [in] LPCWSTR wzFilename);
+
+    HRESULT InitializeFromMemory(
+        [in, size_is(cbBufferSize)] const BYTE *pbBuffer,
+        [in] UINT cbBufferSize);
+
+    HRESULT InitializeFromExifColorSpace(
+        [in] UINT value);
+
+    HRESULT GetType(
+        [out] WICColorContextType *pType);
+
+    HRESULT GetProfileBytes(
+        [in] UINT cbBuffer,
+        [in, out, unique, size_is(cbBuffer)] BYTE *pbBuffer,
+        [out] UINT *pcbActual);
+
+    HRESULT GetExifColorSpace(
+        [out] UINT *pValue);
+}
+
+[
+    object,
+    uuid(00000120-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapSource : IUnknown
+{
+    HRESULT GetSize(
+        [out] UINT *puiWidth,
+        [out] UINT *puiHeight);
+
+    HRESULT GetPixelFormat(
+        [out] WICPixelFormatGUID *pPixelFormat);
+
+    HRESULT GetResolution(
+        [out] double *pDpiX,
+        [out] double *pDpiY);
+
+    HRESULT CopyPalette(
+        [in] IWICPalette *pIPalette);
+
+    HRESULT CopyPixels(
+        [in] const WICRect *prc,
+        [in] UINT cbStride,
+        [in] UINT cbBufferSize,
+        [out, size_is(cbBufferSize)] BYTE *pbBuffer);
+}
+
+[
+    object,
+    uuid(00000123-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapLock : IUnknown
+{
+    HRESULT GetSize(
+        [out] UINT *pWidth,
+        [out] UINT *pHeight);
+
+    HRESULT GetStride(
+        [out] UINT *pcbStride);
+
+    HRESULT GetDataPointer(
+        [out] UINT *pcbBufferSize,
+        [out, size_is(,*pcbBufferSize)] BYTE **ppbData);
+
+    HRESULT GetPixelFormat(
+        [out] WICPixelFormatGUID *pPixelFormat);
+}
+
+[
+    object,
+    uuid(5009834f-2d6a-41ce-9e1b-17c5aff7a782)
+]
+interface IWICBitmapFlipRotator : IWICBitmapSource
+{
+    HRESULT Initialize(
+        [in] IWICBitmapSource *pISource,
+        [in] WICBitmapTransformOptions options);
+}
+
+[
+    object,
+    uuid(00000121-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmap : IWICBitmapSource
+{
+    HRESULT Lock(
+        [in] const WICRect *prcLock,
+        [in] DWORD flags,
+        [out] IWICBitmapLock **ppILock);
+
+    HRESULT SetPalette(
+        [in] IWICPalette *pIPalette);
+
+    HRESULT SetResolution(
+        [in] double dpiX,
+        [in] double dpiY);
+}
+
+[
+    object,
+    uuid(00000040-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICPalette : IUnknown
+{
+    HRESULT InitializePredefined(
+        [in] WICBitmapPaletteType ePaletteType,
+        [in] BOOL fAddTransparentColor);
+
+    HRESULT InitializeCustom(
+        [in, size_is(colorCount)] WICColor *pColors,
+        [in] UINT colorCount);
+
+    HRESULT InitializeFromBitmap(
+        [in] IWICBitmapSource *pISurface,
+        [in] UINT colorCount,
+        [in] BOOL fAddTransparentColor);
+
+    HRESULT InitializeFromPalette(
+        [in] IWICPalette *pIPalette);
+
+    HRESULT GetType(
+        [out] WICBitmapPaletteType *pePaletteType);
+
+    HRESULT GetColorCount(
+        [out] UINT *pcCount);
+
+    HRESULT GetColors(
+        [in] UINT colorCount,
+        [out, size_is(colorCount)] WICColor *pColors,
+        [out] UINT *pcActualColors);
+
+    HRESULT IsBlackWhite(
+        [out] BOOL *pfIsBlackWhite);
+
+    HRESULT IsGrayscale(
+        [out] BOOL *pfIsGrayscale);
+
+    HRESULT HasAlpha(
+        [out] BOOL *pfHasAlpha);
+}
+
+[
+    object,
+    uuid(23bc3f0a-698b-4357-886b-f24d50671334)
+]
+interface IWICComponentInfo : IUnknown
+{
+    HRESULT GetComponentType(
+        [out] WICComponentType *pType);
+
+    HRESULT GetCLSID(
+        [out] CLSID *pclsid);
+
+    HRESULT GetSigningStatus(
+        [out] DWORD *pStatus);
+
+    HRESULT GetAuthor(
+        [in] UINT cchAuthor,
+        [in, out, unique, size_is(cchAuthor)] WCHAR *wzAuthor,
+        [out] UINT *pcchActual);
+
+    HRESULT GetVendorGUID(
+        [out] GUID *pguidVendor);
+
+    HRESULT GetVersion(
+        [in] UINT cchVersion,
+        [in, out, unique, size_is(cchVersion)] WCHAR *wzVersion,
+        [out] UINT *pcchActual);
+
+    HRESULT GetSpecVersion(
+        [in] UINT cchSpecVersion,
+        [in, out, unique, size_is(cchSpecVersion)] WCHAR *wzSpecVersion,
+        [out] UINT *pcchActual);
+
+    HRESULT GetFriendlyName(
+        [in] UINT cchFriendlyName,
+        [in, out, unique, size_is(cchFriendlyName)] WCHAR *wzFriendlyName,
+        [out] UINT *pcchActual);
+}
+
+[
+    object,
+    uuid(30989668-e1c9-4597-b395-458eedb808df)
+]
+interface IWICMetadataQueryReader : IUnknown
+{
+    HRESULT GetContainerFormat(
+        [out] GUID *pguidContainerFormat);
+
+    HRESULT GetLocation(
+        [in] UINT cchMaxLength,
+        [in, out, unique, size_is(cchMaxLength)] WCHAR *wzNamespace,
+        [out] UINT *pcchActualLength);
+
+    HRESULT GetMetadataByName(
+        [in] LPCWSTR wzName,
+        [in, out, unique] PROPVARIANT *pvarValue);
+
+    HRESULT GetEnumerator(
+        [out] IEnumString **ppIEnumString);
+}
+
+[
+    object,
+    uuid(a721791a-0def-4d06-bd91-2118bf1db10b)
+]
+interface IWICMetadataQueryWriter : IWICMetadataQueryReader
+{
+    HRESULT SetMetadataByName(
+        [in] LPCWSTR wzName,
+        [in] const PROPVARIANT *pvarValue);
+
+    HRESULT RemoveMetadataByName(
+        [in] LPCWSTR wzName);
+}
+
+[
+    object,
+    uuid(3b16811b-6a43-4ec9-a813-3d930c13b940)
+]
+interface IWICBitmapFrameDecode : IWICBitmapSource
+{
+    HRESULT GetMetadataQueryReader(
+        [out] IWICMetadataQueryReader **ppIMetadataQueryReader);
+
+    HRESULT GetColorContexts(
+        [in] UINT cCount,
+        [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts,
+        [out] UINT *pcActualCount);
+
+    HRESULT GetThumbnail(
+        [out] IWICBitmapSource **ppIThumbnail);
+}
+
+[
+    object,
+    uuid(e8eda601-3d48-431a-ab44-69059be88bbe)
+]
+interface IWICPixelFormatInfo : IWICComponentInfo
+{
+    HRESULT GetFormatGUID(
+        [out] GUID* pFormat);
+
+    HRESULT GetColorContext(
+        [out] IWICColorContext **ppIColorContext);
+
+    HRESULT GetBitsPerPixel(
+        [out] UINT *puiBitsPerPixel);
+
+    HRESULT GetChannelCount(
+        [out] UINT *puiChannelCount);
+
+    HRESULT GetChannelMask(
+        [in] UINT uiChannelIndex,
+        [in] UINT cbMaskBuffer,
+        [in, out, unique, size_is(cbMaskBuffer)] BYTE *pbMaskBuffer,
+        [out] UINT *pcbActual);
+}
+
+[
+    object,
+    uuid(a9db33a2-af5f-43c7-b679-74f5984b5aa4)
+]
+interface IWICPixelFormatInfo2 : IWICPixelFormatInfo
+{
+    HRESULT SupportsTransparency(
+        [out] BOOL *pfSupportsTransparency);
+
+    HRESULT GetNumericRepresentation(
+        [out] WICPixelFormatNumericRepresentation *pNumericRepresentation);
+}
+
+[
+    object,
+    uuid(e87a44c4-b76e-4c47-8b09-298eb12a2714)
+]
+interface IWICBitmapCodecInfo : IWICComponentInfo
+{
+    HRESULT GetContainerFormat(
+        [out] GUID *pguidContainerFormat);
+
+    HRESULT GetPixelFormats(
+        [in] UINT cFormats,
+        [in, out, unique, size_is(cFormats)] GUID *pguidPixelFormats,
+        [out] UINT *pcActual);
+
+    HRESULT GetColorManagementVersion(
+        [in] UINT cchColorManagementVersion,
+        [in, out, unique, size_is(cchColorManagementVersion)] WCHAR *wzColorManagementVersion,
+        [out] UINT *pcchActual);
+
+    HRESULT GetDeviceManufacturer(
+        [in] UINT cchDeviceManufacturer,
+        [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer,
+        [out] UINT *pcchActual);
+
+    HRESULT GetDeviceModels(
+        [in] UINT cchDeviceModels,
+        [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels,
+        [out] UINT *pcchActual);
+
+    HRESULT GetMimeTypes(
+        [in] UINT cchMimeTypes,
+        [in, out, unique, size_is(cchMimeTypes)] WCHAR *wzMimeTypes,
+        [out] UINT *pcchActual);
+
+    HRESULT GetFileExtensions(
+        [in] UINT cchFileExtensions,
+        [in, out, unique, size_is(cchFileExtensions)] WCHAR *wzFileExtensions,
+        [out] UINT *pcchActual);
+
+    HRESULT DoesSupportAnimation(
+        [out] BOOL *pfSupportAnimation);
+
+    HRESULT DoesSupportChromaKey(
+        [out] BOOL *pfSupportChromaKey);
+
+    HRESULT DoesSupportLossless(
+        [out] BOOL *pfSupportLossless);
+
+    HRESULT DoesSupportMultiframe(
+        [out] BOOL *pfSupportMultiframe);
+
+    HRESULT MatchesMimeType(
+        [in] LPCWSTR wzMimeType,
+        [out] BOOL *pfMatches);
+}
+
+interface IWICBitmapDecoder;
+
+[
+    object,
+    uuid(d8cd007f-d08f-4191-9bfc-236ea7f0e4b5)
+]
+interface IWICBitmapDecoderInfo : IWICBitmapCodecInfo
+{
+    [local]
+    HRESULT GetPatterns(
+        [in] UINT cbSizePatterns,
+        [in, out, unique] WICBitmapPattern *pPatterns,
+        [in, out, unique] UINT *pcPatterns,
+        [in, out, unique] UINT *pcbPatternsActual);
+
+    HRESULT MatchesPattern(
+        [in] IStream *pIStream,
+        [out] BOOL *pfMatches);
+
+    HRESULT CreateInstance(
+        [out] IWICBitmapDecoder **ppIBitmapDecoder);
+}
+
+[
+    object,
+    uuid(9edde9e7-8dee-47ea-99df-e6faf2ed44bf)
+]
+interface IWICBitmapDecoder : IUnknown
+{
+    HRESULT QueryCapability(
+        [in] IStream *pIStream,
+        [out] DWORD *pdwCapability);
+
+    HRESULT Initialize(
+        [in] IStream *pIStream,
+        [in] WICDecodeOptions cacheOptions);
+
+    HRESULT GetContainerFormat(
+        [out] GUID *pguidContainerFormat);
+
+    HRESULT GetDecoderInfo(
+        [out] IWICBitmapDecoderInfo **ppIDecoderInfo);
+
+    HRESULT CopyPalette(
+        [in] IWICPalette *pIPalette);
+
+    HRESULT GetMetadataQueryReader(
+        [out] IWICMetadataQueryReader **ppIMetadataQueryReader);
+
+    HRESULT GetPreview(
+        [out] IWICBitmapSource **ppIBitmapSource);
+
+    HRESULT GetColorContexts(
+        [in] UINT cCount,
+        [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts,
+        [out] UINT *pcActualCount);
+
+    HRESULT GetThumbnail(
+        [out] IWICBitmapSource **ppIThumbnail);
+
+    HRESULT GetFrameCount(
+        [out] UINT *pCount);
+
+    HRESULT GetFrame(
+        [in] UINT index,
+        [out] IWICBitmapFrameDecode **ppIBitmapFrame);
+}
+
+[
+    object,
+    uuid(00000105-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapFrameEncode : IUnknown
+{
+    HRESULT Initialize(
+        [in, unique] IPropertyBag2 *pIEncoderOptions);
+
+    HRESULT SetSize(
+        [in] UINT uiWidth,
+        [in] UINT uiHeight);
+
+    HRESULT SetResolution(
+        [in] double dpiX,
+        [in] double dpiY);
+
+    HRESULT SetPixelFormat(
+        [in, out] WICPixelFormatGUID *pPixelFormat);
+
+    HRESULT SetColorContexts(
+        [in] UINT cCount,
+        [in, size_is(cCount)] IWICColorContext **ppIColorContext);
+
+    HRESULT SetPalette(
+        [in] IWICPalette *pIPalette);
+
+    HRESULT SetThumbnail(
+        [in] IWICBitmapSource *pIThumbnail);
+
+    HRESULT WritePixels(
+        [in] UINT lineCount,
+        [in] UINT cbStride,
+        [in] UINT cbBufferSize,
+        [in, size_is(cbBufferSize)] BYTE *pbPixels);
+
+    HRESULT WriteSource(
+        [in] IWICBitmapSource *pIBitmapSource,
+        [in, unique] WICRect *prc);
+
+    HRESULT Commit();
+
+    HRESULT GetMetadataQueryWriter(
+        IWICMetadataQueryWriter **ppIMetadataQueryWriter);
+}
+
+interface IWICBitmapEncoder;
+
+[
+    object,
+    uuid(94c9b4ee-a09f-4f92-8a1e-4a9bce7e76fb)
+]
+interface IWICBitmapEncoderInfo : IWICBitmapCodecInfo
+{
+    HRESULT CreateInstance(
+        [out] IWICBitmapEncoder **ppIBitmapEncoder);
+}
+
+[
+    object,
+    uuid(00000103-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapEncoder : IUnknown
+{
+    HRESULT Initialize(
+        [in] IStream *pIStream,
+        [in] WICBitmapEncoderCacheOption cacheOption);
+
+    HRESULT GetContainerFormat(
+        [out] GUID *pguidContainerFormat);
+
+    HRESULT GetEncoderInfo(
+        [out] IWICBitmapEncoderInfo **ppIEncoderInfo);
+
+    HRESULT SetColorContexts(
+        [in] UINT cCount,
+        [in, size_is(cCount)] IWICColorContext **ppIColorContext);
+
+    HRESULT SetPalette(
+        [in] IWICPalette *pIPalette);
+
+    HRESULT SetThumbnail(
+        [in] IWICBitmapSource *pIThumbnail);
+
+    HRESULT SetPreview(
+        [in] IWICBitmapSource *pIPreview);
+
+    HRESULT CreateNewFrame(
+        [out] IWICBitmapFrameEncode **ppIFrameEncode,
+        [in, out, unique] IPropertyBag2 **ppIEncoderOptions);
+
+    HRESULT Commit();
+
+    HRESULT GetMetadataQueryWriter(
+        [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter);
+}
+
+[
+    object,
+    uuid(00000301-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICFormatConverter : IWICBitmapSource
+{
+    HRESULT Initialize(
+        [in] IWICBitmapSource *pISource,
+        [in] REFWICPixelFormatGUID dstFormat,
+        [in] WICBitmapDitherType dither,
+        [in] IWICPalette *pIPalette,
+        [in] double alphaThresholdPercent,
+        [in] WICBitmapPaletteType paletteTranslate);
+
+    HRESULT CanConvert(
+        [in] REFWICPixelFormatGUID srcPixelFormat,
+        [in] REFWICPixelFormatGUID dstPixelFormat,
+        [out] BOOL *pfCanConvert);
+}
+
+[
+    object,
+    uuid(9f34fb65-13f4-4f15-bc57-3726b5e53d9f)
+]
+interface IWICFormatConverterInfo : IWICComponentInfo
+{
+    HRESULT GetPixelFormats(
+        [in] UINT cFormats,
+        [in, out, size_is(cFormats)] WICPixelFormatGUID *pPixelFormatGUIDs,
+        [out] UINT *pcActual);
+
+    HRESULT CreateInstance(
+        [out] IWICFormatConverter **ppIConverter);
+}
+
+[
+    object,
+    uuid(135ff860-22b7-4ddf-b0f6-218f4f299a43)
+]
+interface IWICStream : IStream
+{
+    HRESULT InitializeFromIStream(
+        [in] IStream *pIStream);
+
+    HRESULT InitializeFromFilename(
+        [in] LPCWSTR wzFileName,
+        [in] DWORD dwAccessMode);
+
+    HRESULT InitializeFromMemory(
+        [in, size_is(cbBufferSize)] BYTE *pbBuffer,
+        [in] DWORD cbBufferSize);
+
+    HRESULT InitializeFromIStreamRegion(
+        [in] IStream *pIStream,
+        [in] ULARGE_INTEGER ulOffset,
+        [in] ULARGE_INTEGER ulMaxSize);
+}
+
+[
+    object,
+    uuid(00000302-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapScaler : IWICBitmapSource
+{
+    HRESULT Initialize(
+        [in] IWICBitmapSource *pISource,
+        [in] UINT uiWidth,
+        [in] UINT uiHeight,
+        [in] WICBitmapInterpolationMode mode);
+}
+
+[
+    object,
+    uuid(e4fbcf03-223d-4e81-9333-d635556dd1b5)
+]
+interface IWICBitmapClipper : IWICBitmapSource
+{
+    HRESULT Initialize(
+        [in] IWICBitmapSource *pISource,
+        [in] const WICRect *prc);
+}
+
+[
+    object,
+    uuid(b66f034f-d0e2-40ab-b436-6de39e321a94)
+]
+interface IWICColorTransform : IWICBitmapSource
+{
+    HRESULT Initialize(
+        [in] IWICBitmapSource *pIBitmapSource,
+        [in] IWICColorContext *pIContextSource,
+        [in] IWICColorContext *pIContextDest,
+        [in] REFWICPixelFormatGUID pixelFmtDest);
+}
+
+[
+    object,
+    uuid(b84e2c09-78c9-4ac4-8bd3-524ae1663a2f)
+]
+interface IWICFastMetadataEncoder : IUnknown
+{
+    HRESULT Commit();
+
+    HRESULT GetMetadataQueryWriter(
+        [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_WICImagingFactory, 0xcacaf262,0x9370,0x4615,0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0x0a);")
+
+[
+    object,
+    uuid(ec5ec8a9-c395-4314-9c77-54d7a935ff70)
+]
+interface IWICImagingFactory : IUnknown
+{
+    HRESULT CreateDecoderFromFilename(
+        [in] LPCWSTR wzFilename,
+        [in, unique] const GUID *pguidVendor,
+        [in] DWORD dwDesiredAccess,
+        [in] WICDecodeOptions metadataOptions,
+        [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+    HRESULT CreateDecoderFromStream(
+        [in] IStream *pIStream,
+        [in, unique] const GUID *pguidVendor,
+        [in] WICDecodeOptions metadataOptions,
+        [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+    HRESULT CreateDecoderFromFileHandle(
+        [in] ULONG_PTR hFile,
+        [in, unique] const GUID *pguidVendor,
+        [in] WICDecodeOptions metadataOptions,
+        [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+    HRESULT CreateComponentInfo(
+        [in] REFCLSID clsidComponent,
+        [out] IWICComponentInfo **ppIInfo);
+
+    HRESULT CreateDecoder(
+        [in] REFGUID guidContainerFormat,
+        [in, unique] const GUID *pguidVendor,
+        [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+    HRESULT CreateEncoder(
+        [in] REFGUID guidContainerFormat,
+        [in, unique] const GUID *pguidVendor,
+        [out, retval] IWICBitmapEncoder **ppIEncoder);
+
+    HRESULT CreatePalette(
+        [out] IWICPalette **ppIPalette);
+
+    HRESULT CreateFormatConverter(
+        [out] IWICFormatConverter **ppIFormatConverter);
+
+    HRESULT CreateBitmapScaler(
+        [out] IWICBitmapScaler **ppIBitmapScaler);
+
+    HRESULT CreateBitmapClipper(
+        [out] IWICBitmapClipper **ppIBitmapClipper);
+
+    HRESULT CreateBitmapFlipRotator(
+        [out] IWICBitmapFlipRotator **ppIBitmapFlipRotator);
+
+    HRESULT CreateStream(
+        [out] IWICStream **ppIWICStream);
+
+    HRESULT CreateColorContext(
+        [out] IWICColorContext **ppIWICColorContext);
+
+    HRESULT CreateColorTransformer(
+        [out] IWICColorTransform **ppIWICColorTransform);
+
+    HRESULT CreateBitmap(
+        [in] UINT uiWidth,
+        [in] UINT uiHeight,
+        [in] REFWICPixelFormatGUID pixelFormat,
+        [in] WICBitmapCreateCacheOption option,
+        [out] IWICBitmap **ppIBitmap);
+
+    HRESULT CreateBitmapFromSource(
+        [in] IWICBitmapSource *piBitmapSource,
+        [in] WICBitmapCreateCacheOption option,
+        [out] IWICBitmap **ppIBitmap);
+
+    HRESULT CreateBitmapFromSourceRect(
+        [in] IWICBitmapSource *piBitmapSource,
+        [in] UINT x,
+        [in] UINT y,
+        [in] UINT width,
+        [in] UINT height,
+        [out] IWICBitmap **ppIBitmap);
+
+    HRESULT CreateBitmapFromMemory(
+        [in] UINT uiWidth,
+        [in] UINT uiHeight,
+        [in] REFWICPixelFormatGUID pixelFormat,
+        [in] UINT cbStride,
+        [in] UINT cbBufferSize,
+        [in, size_is(cbBufferSize)] BYTE *pbBuffer,
+        [out] IWICBitmap **ppIBitmap);
+
+    HRESULT CreateBitmapFromHBITMAP(
+        [in] HBITMAP hBitmap,
+        [in, unique] HPALETTE hPalette,
+        [in] WICBitmapAlphaChannelOption options,
+        [out] IWICBitmap **ppIBitmap);
+
+    HRESULT CreateBitmapFromHICON(
+        [in] HICON hIcon,
+        [out] IWICBitmap **ppIBitmap);
+
+    HRESULT CreateComponentEnumerator(
+        [in] DWORD componentTypes,
+        [in] DWORD options,
+        [out] IEnumUnknown **ppIEnumUnknown);
+
+    HRESULT CreateFastMetadataEncoderFromDecoder(
+        [in] IWICBitmapDecoder *pIDecoder,
+        [out] IWICFastMetadataEncoder **ppIFastEncoder);
+
+    HRESULT CreateFastMetadataEncoderFromFrameDecode(
+        [in] IWICBitmapFrameDecode *pIFrameDecoder,
+        [out] IWICFastMetadataEncoder **ppIFastEncoder);
+
+    HRESULT CreateQueryWriter(
+        [in] REFGUID guidMetadataFormat,
+        [in, unique] const GUID *pguidVendor,
+        [out] IWICMetadataQueryWriter **ppIQueryWriter);
+
+    HRESULT CreateQueryWriterFromReader(
+        [in] IWICMetadataQueryReader *pIQueryReader,
+        [in, unique] const GUID *pguidVendor,
+        [out] IWICMetadataQueryWriter **ppIQueryWriter);
+}
+
+[
+    local,
+    object,
+    uuid(dc2bb46d-3f07-481e-8625-220c4aedbb33)
+]
+interface IWICEnumMetadataItem : IUnknown
+{
+    HRESULT Next(
+        [in] ULONG celt,
+        [in, out, unique, size_is(celt)] PROPVARIANT *rgeltSchema,
+        [in, out, size_is(celt)] PROPVARIANT *rgeltId,
+        [in, out, optional, size_is(celt)] PROPVARIANT *rgeltValue,
+        [out, optional] ULONG *pceltFetched);
+
+    HRESULT Skip(
+        [in] ULONG celt);
+
+    HRESULT Reset();
+
+    HRESULT Clone(
+        [out] IWICEnumMetadataItem **ppIEnumMetadataItem);
+}
+
+cpp_quote("HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICBmpDecoder, 0x6b462062,0x7cbf,0x400d,0x9f,0xdb,0x81,0x3d,0xd1,0x0f,0x27,0x78);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngDecoder, 0x389ea17b,0x5078,0x4cde,0xb6,0xef,0x25,0xc1,0x51,0x75,0xc7,0x51);")
+cpp_quote("DEFINE_GUID(CLSID_WICIcoDecoder, 0xc61bfcdf,0x2e0f,0x4aad,0xa8,0xd7,0xe0,0x6b,0xaf,0xeb,0xcd,0xfe);")
+cpp_quote("DEFINE_GUID(CLSID_WICJpegDecoder, 0x9456a480,0xe88b,0x43ea,0x9e,0x73,0x0b,0x2d,0x9b,0x71,0xb1,0xca);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifDecoder, 0x381dda3c,0x9ce9,0x4834,0xa2,0x3e,0x1f,0x98,0xf8,0xfc,0x52,0xbe);")
+cpp_quote("DEFINE_GUID(CLSID_WICTiffDecoder, 0xb54e85d9,0xfe23,0x499f,0x8b,0x88,0x6a,0xce,0xa7,0x13,0x75,0x2b);")
+cpp_quote("DEFINE_GUID(CLSID_WICWmpDecoder, 0xa26cec36,0x234c,0x4950,0xae,0x16,0xe3,0x4a,0xac,0xe7,0x1d,0x0d);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICBmpEncoder, 0x69be8bb4,0xd66d,0x47c8,0x86,0x5a,0xed,0x15,0x89,0x43,0x37,0x82);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngEncoder, 0x27949969,0x876a,0x41d7,0x94,0x47,0x56,0x8f,0x6a,0x35,0xa4,0xdc);")
+cpp_quote("DEFINE_GUID(CLSID_WICJpegEncoder, 0x1a34f5c1,0x4a5a,0x46dc,0xb6,0x44,0x1f,0x45,0x67,0xe7,0xa6,0x76);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifEncoder, 0x114f5598,0x0b22,0x40a0,0x86,0xa1,0xc8,0x3e,0xa4,0x95,0xad,0xbd);")
+cpp_quote("DEFINE_GUID(CLSID_WICTiffEncoder, 0x0131be10,0x2001,0x4c5f,0xa9,0xb0,0xcc,0x88,0xfa,0xb6,0x4c,0xe8);")
+cpp_quote("DEFINE_GUID(CLSID_WICWmpEncoder, 0xac4ce3cb,0xe1c1,0x44cd,0x82,0x15,0x5a,0x16,0x65,0x50,0x9e,0xc2);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICDefaultFormatConverter, 0x1a3f11dc,0xb514,0x4b17,0x8c,0x5f,0x21,0x54,0x51,0x38,0x52,0xf1);")
+
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatBmp, 0x0af1d87e,0xfcfe,0x4188,0xbd,0xeb,0xa7,0x90,0x64,0x71,0xcb,0xe3);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatPng, 0x1b7cfaf4,0x713f,0x473c,0xbb,0xcd,0x61,0x37,0x42,0x5f,0xae,0xaf);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatIco, 0xa3a860c4,0x338f,0x4c17,0x91,0x9a,0xfb,0xa4,0xb5,0x62,0x8f,0x21);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatJpeg, 0x19e4a5aa,0x5662,0x4fc5,0xa0,0xc0,0x17,0x58,0x02,0x8e,0x10,0x57);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatTiff, 0x163bcc30,0xe2e9,0x4f0b,0x96,0x1d,0xa3,0xe9,0xfd,0xb7,0x88,0xa3);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatGif, 0x1f8a5601,0x7d4d,0x4cbd,0x9c,0x82,0x1b,0xc8,0xd4,0xee,0xb9,0xa5);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatWmp, 0x57a37caa,0x367a,0x4540,0x91,0x6b,0xf1,0x83,0xc5,0x09,0x3a,0x4b);")
+
+cpp_quote("DEFINE_GUID(GUID_VendorMicrosoft, 0xf0e749ca,0xedef,0x4589,0xa7,0x3a,0xee,0x0e,0x62,0x6a,0x2a,0x2b);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICImagingCategories, 0xfae3d380,0xfea4,0x4623,0x8c,0x75,0xc6,0xb6,0x11,0x10,0xb6,0x81);")
+cpp_quote("DEFINE_GUID(CATID_WICBitmapDecoders, 0x7ed96837,0x96f0,0x4812,0xb2,0x11,0xf1,0x3c,0x24,0x11,0x7e,0xd3);")
+cpp_quote("DEFINE_GUID(CATID_WICBitmapEncoders, 0xac757296,0x3522,0x4e11,0x98,0x62,0xc1,0x7b,0xe5,0xa1,0x76,0x7e);")
+cpp_quote("DEFINE_GUID(CATID_WICFormatConverters, 0x7835eae8,0xbf14,0x49d1,0x93,0xce,0x53,0x3a,0x40,0x7b,0x22,0x48);")
+cpp_quote("DEFINE_GUID(CATID_WICMetadataReader, 0x05af94d8,0x7174,0x4cd2,0xbe,0x4a,0x41,0x24,0xb8,0x0e,0xe4,0xb8);")
+cpp_quote("DEFINE_GUID(CATID_WICPixelFormats, 0x2b46e70f,0xcda7,0x473e,0x89,0xf6,0xdc,0x96,0x30,0xa2,0x39,0x0b);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl
new file mode 100644
index 0000000..3700988
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl
@@ -0,0 +1,330 @@
+/*
+ * Copyright 2011 Vincent Povirk 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "wincodec.idl";
+
+typedef enum WICPersistOptions {
+    WICPersistOptionsDefault = 0x00000000,
+    WICPersistOptionsLittleEndian = 0x00000000,
+    WICPersistOptionsBigEndian = 0x00000001,
+    WICPersistOptionsStrictFormat = 0x00000002,
+    WICPersistOptionsNoCacheStream = 0x00000004,
+    WICPersistOptionPreferUTF8 = 0x00000008,
+    WICPersistOptionsMask = 0x0000FFFF
+} WICPersistOptions;
+
+typedef enum WICMetadataCreationOptions {
+    WICMetadataCreationDefault = 0x00000000,
+    WICMetadataCreationAllowUnknown = WICMetadataCreationDefault,
+    WICMetadataCreationFailUnknown = 0x00010000,
+    WICMetadataCreationMask = 0xFFFF0000
+} WICMetadataCreationOptions;
+
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatUnknown, 0xa45e592f,0x9078,0x4a7c,0xad,0xb5,0x4e,0xdc,0x4f,0xd6,0x1b,0x1f);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x90,0x5d,0xdf,0x2b,0x38,0x23,0x8f,0xbc);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktIME, 0x6b00ae2d,0xe24b,0x460a,0x98,0xb6,0x87,0x8b,0xd0,0x30,0x72,0xfd);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatExif, 0x1c3c4f9d,0xb84a,0x467d,0x94,0x93,0x36,0xcf,0xbd,0x59,0xea,0x57);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMP, 0xbb5acc38,0xf216,0x4cec,0xa6,0xc5,0x5f,0x6e,0x73,0x97,0x63,0xa9);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPStruct, 0x22383cf1,0xed17,0x4e2e,0xaf,0x17,0xd8,0x5b,0x8f,0x6b,0x30,0xd0);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatIMD, 0xbd2bb086,0x4d52,0x48dd,0x96,0x77,0xdb,0x48,0x3e,0x85,0xae,0x8f);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatLSD, 0xe256031e,0x6299,0x4929,0xb9,0x8d,0x5a,0xc8,0x84,0xaf,0xba,0x92);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatGCE, 0x2a25cad8,0xdeeb,0x4c69,0xa7,0x88,0x0e,0xc2,0x26,0x6d,0xca,0xfd);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatAPE, 0x2e043dc2,0xc967,0x4e05,0x87,0x5e,0x61,0x8b,0xf6,0x7e,0x85,0xc3);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatGifComment, 0xc4b6e0e0,0xcfb4,0x4ad3,0xab,0x33,0x9a,0xad,0x23,0x55,0xa3,0x4a);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);")
+cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a,0xb6,0x70,0x89,0xe5,0xfa,0xb6,0xfd,0xa7);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);")
+cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);")
+cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataWriter, 0xb1ebfc28,0xc9bd,0x47a2,0x8d,0x33,0xb9,0x48,0x76,0x97,0x77,0xa7);")
+cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataReader, 0xd9403860,0x297f,0x4a49,0xbf,0x9b,0x77,0x89,0x81,0x50,0xa4,0x42);")
+cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataWriter, 0xc9a14cda,0xc339,0x460b,0x90,0x78,0xd4,0xde,0xbc,0xfa,0xbe,0x91);")
+cpp_quote("DEFINE_GUID(CLSID_WICXMPStructMetadataReader, 0x01b90d9a,0x8209,0x47f7,0x9c,0x52,0xe1,0x24,0x4b,0xf5,0x0c,0xed);")
+cpp_quote("DEFINE_GUID(CLSID_WICXMPStructMetadataWriter, 0x22c21f93,0x7ddb,0x411c,0x9b,0x17,0xc5,0xb7,0xbd,0x06,0x4a,0xbc);")
+cpp_quote("DEFINE_GUID(CLSID_WICLSDMetadataReader, 0x41070793,0x59e4,0x479a,0xa1,0xf7,0x95,0x4a,0xdc,0x2e,0xf5,0xfc);")
+cpp_quote("DEFINE_GUID(CLSID_WICLSDMetadataWriter, 0x73c037e7,0xe5d9,0x4954,0x87,0x6a,0x6d,0xa8,0x1d,0x6e,0x57,0x68);")
+cpp_quote("DEFINE_GUID(CLSID_WICIMDMetadataReader, 0x7447a267,0x0015,0x42c8,0xa8,0xf1,0xfb,0x3b,0x94,0xc6,0x83,0x61);")
+cpp_quote("DEFINE_GUID(CLSID_WICIMDMetadataWriter, 0x8c89071f,0x452e,0x4e95,0x96,0x82,0x9d,0x10,0x24,0x62,0x71,0x72);")
+cpp_quote("DEFINE_GUID(CLSID_WICGCEMetadataReader, 0xb92e345d,0xf52d,0x41f3,0xb5,0x62,0x08,0x1b,0xc7,0x72,0xe3,0xb9);")
+cpp_quote("DEFINE_GUID(CLSID_WICGCEMetadataWriter, 0xaf95dc76,0x16b2,0x47f4,0xb3,0xea,0x3c,0x31,0x79,0x66,0x93,0xe7);")
+cpp_quote("DEFINE_GUID(CLSID_WICAPEMetadataReader, 0x1767b93a,0xb021,0x44ea,0x92,0x0f,0x86,0x3c,0x11,0xf4,0xf7,0x68);")
+cpp_quote("DEFINE_GUID(CLSID_WICAPEMetadataWriter, 0xbd6edfca,0x2890,0x482f,0xb2,0x33,0x8d,0x73,0x39,0xa1,0xcf,0x8d);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifCommentMetadataReader, 0x32557d3b,0x69dc,0x4f95,0x83,0x6e,0xf5,0x97,0x2b,0x2f,0x61,0x59);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifCommentMetadataWriter, 0xa02797fc,0xc4ae,0x418c,0xaf,0x95,0xe6,0x37,0xc7,0xea,0xd2,0xa1);")
+
+typedef struct WICMetadataPattern {
+    ULARGE_INTEGER Position;
+    ULONG Length;
+    BYTE *Pattern;
+    BYTE *Mask;
+    ULARGE_INTEGER DataOffset;
+} WICMetadataPattern;
+
+typedef struct WICMetadataHeader {
+    ULARGE_INTEGER Position;
+    ULONG Length;
+    BYTE *Header;
+    ULARGE_INTEGER DataOffset;
+} WICMetadataHeader;
+
+[
+    object,
+    uuid(aba958bf-c672-44d1-8d61-ce6df2e682c2)
+]
+interface IWICMetadataHandlerInfo : IWICComponentInfo
+{
+    HRESULT GetMetadataFormat(
+        [out] GUID *pguidMetadataFormat);
+
+    HRESULT GetContainerFormats(
+        [in] UINT cContainerFormats,
+        [in, out, unique, size_is(cContainerFormats)] GUID *pguidContainerFormats,
+        [out] UINT *pcchActual);
+
+    HRESULT GetDeviceManufacturer(
+        [in] UINT cchDeviceManufacturer,
+        [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer,
+        [out] UINT *pcchActual);
+
+    HRESULT GetDeviceModels(
+        [in] UINT cchDeviceModels,
+        [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels,
+        [out] UINT *pcchActual);
+
+    HRESULT DoesRequireFullStream(
+        [out] BOOL *pfRequiresFullStream);
+
+    HRESULT DoesSupportPadding(
+        [out] BOOL *pfSupportsPadding);
+
+    HRESULT DoesRequireFixedSize(
+        [out] BOOL *pfFixedSize);
+}
+
+[
+    object,
+    uuid(9204fe99-d8fc-4fd5-a001-9536b067a899)
+]
+interface IWICMetadataReader : IUnknown
+{
+    HRESULT GetMetadataFormat(
+        [out] GUID *pguidMetadataFormat);
+
+    HRESULT GetMetadataHandlerInfo(
+        [out] IWICMetadataHandlerInfo **ppIHandler);
+
+    HRESULT GetCount(
+        [out] UINT *pcCount);
+
+    HRESULT GetValueByIndex(
+        [in] UINT nIndex,
+        [in, out, unique] PROPVARIANT *pvarSchema,
+        [in, out, unique] PROPVARIANT *pvarId,
+        [in, out, unique] PROPVARIANT *pvarValue);
+
+    HRESULT GetValue(
+        [in] const PROPVARIANT *pvarSchema,
+        [in] const PROPVARIANT *pvarId,
+        [in, out, unique] PROPVARIANT *pvarValue);
+
+    HRESULT GetEnumerator(
+        [out] IWICEnumMetadataItem **ppIEnumMetadata);
+}
+
+[
+    object,
+    uuid(eebf1f5b-07c1-4447-a3ab-22acaf78a804)
+]
+interface IWICMetadataReaderInfo : IWICMetadataHandlerInfo
+{
+    [local]
+    HRESULT GetPatterns(
+        [in] REFGUID guidContainerFormat,
+        [in] UINT cbSize,
+        [out, unique] WICMetadataPattern *pPattern,
+        [out, unique] UINT *pcCount,
+        [out, unique] UINT *pcbActual);
+
+    HRESULT MatchesPattern(
+        [in] REFGUID guidContainerFormat,
+        [in] IStream *pIStream,
+        [out] BOOL *pfMatches);
+
+    HRESULT CreateInstance(
+        [out] IWICMetadataReader **ppIReader);
+}
+
+[
+    object,
+    uuid(f7836e16-3be0-470b-86bb-160d0aecd7de)
+]
+interface IWICMetadataWriter : IWICMetadataReader
+{
+    HRESULT SetValue(
+        [in, unique] const PROPVARIANT *pvarSchema,
+        [in] const PROPVARIANT *pvarId,
+        [in] const PROPVARIANT *pvarValue);
+
+    HRESULT SetValueByIndex(
+        [in] UINT nIndex,
+        [in, unique] const PROPVARIANT *pvarSchema,
+        [in] const PROPVARIANT *pvarId,
+        [in] const PROPVARIANT *pvarValue);
+
+    HRESULT RemoveValue(
+        [in, unique] const PROPVARIANT *pvarSchema,
+        [in] const PROPVARIANT *pvarId);
+
+    HRESULT RemoveValueByIndex(
+        [in] UINT nIndex);
+}
+
+[
+    object,
+    uuid(b22e3fba-3925-4323-b5c1-9ebfc430f236)
+]
+interface IWICMetadataWriterInfo : IWICMetadataHandlerInfo
+{
+    [local]
+    HRESULT GetHeader(
+        [in] REFGUID guidContainerFormat,
+        [in] UINT cbSize,
+        [out, unique] WICMetadataHeader *pHeader,
+        [out, unique] UINT *pcbActual);
+
+    HRESULT CreateInstance(
+        [out] IWICMetadataWriter **ppIWriter);
+}
+
+[
+    object,
+    uuid(feaa2a8d-b3f3-43e4-b25c-d1de990a1ae1)
+]
+interface IWICMetadataBlockReader : IUnknown
+{
+    HRESULT GetContainerFormat(
+        [out] GUID *pguidContainerFormat);
+
+    HRESULT GetCount(
+        [out] UINT *pcCount);
+
+    HRESULT GetReaderByIndex(
+        [in] UINT nIndex,
+        [out] IWICMetadataReader **ppIMetadataReader);
+
+    HRESULT GetEnumerator(
+        [out] IEnumUnknown **ppIEnumMetadata);
+}
+
+[
+    object,
+    uuid(08fb9676-b444-41e8-8dbe-6a53a542bff1)
+]
+interface IWICMetadataBlockWriter : IWICMetadataBlockReader
+{
+    HRESULT InitializeFromBlockReader(
+        [in] IWICMetadataBlockReader *pIMDBlockReader);
+
+    HRESULT GetWriterByIndex(
+        [in] UINT nIndex,
+        [out] IWICMetadataWriter **ppIMetadataWriter);
+
+    HRESULT AddWriter(
+        [in] IWICMetadataWriter *pIMetadataWriter);
+
+    HRESULT SetWriterByIndex(
+        [in] UINT nIndex,
+        [in] IWICMetadataWriter *pIMetadataWriter);
+
+    HRESULT RemoveWriterByIndex(
+        [in] UINT nIndex);
+}
+
+[
+    object,
+    uuid(00675040-6908-45f8-86a3-49c7dfd6d9ad)
+]
+interface IWICPersistStream : IPersistStream
+{
+    HRESULT LoadEx(
+        [in, unique] IStream *pIStream,
+        [in, unique] const GUID *pguidPreferredVendor,
+        [in] DWORD dwPersistOptions);
+
+    HRESULT SaveEx(
+        [in] IStream *pIStream,
+        [in] DWORD dwPersistOptions,
+        [in] BOOL fClearDirty);
+}
+
+[
+    object,
+    uuid(412d0c3a-9650-44fa-af5b-dd2a06c8e8fb)
+]
+interface IWICComponentFactory : IWICImagingFactory
+{
+    HRESULT CreateMetadataReader(
+        [in] REFGUID guidMetadataFormat,
+        [in, unique] const GUID *pguidVendor,
+        [in] DWORD dwOptions,
+        [in] IStream *pIStream,
+        [out] IWICMetadataReader **ppIReader);
+
+    HRESULT CreateMetadataReaderFromContainer(
+        [in] REFGUID guidMetadataFormat,
+        [in, unique] const GUID *pguidVendor,
+        [in] DWORD dwOptions,
+        [in] IStream *pIStream,
+        [out] IWICMetadataReader **ppIReader);
+
+    HRESULT CreateMetadataWriter(
+        [in] REFGUID guidMetadataFormat,
+        [in, unique] const GUID *pguidVendor,
+        [in] DWORD dwMetadataOptions,
+        [out] IWICMetadataWriter **ppIWriter);
+
+    HRESULT CreateMetadataWriterFromReader(
+        [in] IWICMetadataReader *pIReader,
+        [in, unique] const GUID *pguidVendor,
+        [out] IWICMetadataWriter **ppIWriter);
+
+    HRESULT CreateQueryReaderFromBlockReader(
+        [in] IWICMetadataBlockReader *pIBlockReader,
+        [out] IWICMetadataQueryReader **ppIQueryReader);
+
+    HRESULT CreateQueryWriterFromBlockWriter(
+        [in] IWICMetadataBlockWriter *pIBlockWriter,
+        [out] IWICMetadataQueryWriter **ppIQueryWriter);
+
+    HRESULT CreateEncoderPropertyBag(
+        [in, unique, size_is(cCount)] PROPBAG2 *ppropOptions,
+        [in] UINT cCount,
+        [out] IPropertyBag2 **ppIPropertyBag);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h
new file mode 100644
index 0000000..3a22c03
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINCON_H
+#define __WINE_WINCON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NOGDI
+#include <wingdi.h>
+#endif
+
+/* AttachConsole special pid value */
+#define ATTACH_PARENT_PROCESS ((DWORD) -1)
+
+/* GetConsoleDisplayMode flags */
+#define CONSOLE_FULLSCREEN          1
+#define CONSOLE_FULLSCREEN_HARDWARE 2
+
+/* SetConsoleDisplayMode flags */
+#define CONSOLE_FULLSCREEN_MODE 1
+#define CONSOLE_WINDOWED_MODE   2
+
+/* CONSOLE_SELECTION_INFO.dwFlags */
+#define CONSOLE_NO_SELECTION          0x00
+#define CONSOLE_SELECTION_IN_PROGRESS 0x01
+#define CONSOLE_SELECTION_NOT_EMPTY   0x02
+#define CONSOLE_MOUSE_SELECTION       0x04
+#define CONSOLE_MOUSE_DOWN            0x08
+
+/* handler routine control signal type */
+#define CTRL_C_EVENT        0
+#define CTRL_BREAK_EVENT    1
+#define CTRL_CLOSE_EVENT    2
+#define CTRL_LOGOFF_EVENT   5
+#define CTRL_SHUTDOWN_EVENT 6
+
+/* Console Mode flags */
+#define ENABLE_PROCESSED_INPUT 0x0001
+#define ENABLE_LINE_INPUT      0x0002
+#define ENABLE_ECHO_INPUT      0x0004
+#define ENABLE_WINDOW_INPUT    0x0008
+#define ENABLE_MOUSE_INPUT     0x0010
+#define ENABLE_INSERT_MODE     0x0020
+#define ENABLE_QUICK_EDIT_MODE 0x0040
+#define ENABLE_EXTENDED_FLAGS  0x0080
+#define ENABLE_AUTO_POSITION   0x0100
+
+#define ENABLE_PROCESSED_OUTPUT   0x01
+#define ENABLE_WRAP_AT_EOL_OUTPUT 0x02
+
+
+typedef BOOL (WINAPI *PHANDLER_ROUTINE)(DWORD dwCtrlType);
+
+/* Attributes flags: */
+
+#define FOREGROUND_BLUE            0x0001
+#define FOREGROUND_GREEN           0x0002
+#define FOREGROUND_RED             0x0004
+#define FOREGROUND_INTENSITY       0x0008
+#define BACKGROUND_BLUE            0x0010
+#define BACKGROUND_GREEN           0x0020
+#define BACKGROUND_RED             0x0040
+#define BACKGROUND_INTENSITY       0x0080
+#define COMMON_LVB_LEADING_BYTE    0x0100
+#define COMMON_LVB_TRAILING_BYTE   0x0200
+#define COMMON_LVB_GRID_HORIZONTAL 0x0400
+#define COMMON_LVB_GRID_LVERTICAL  0x0800
+#define COMMON_LVB_GRID_RVERTICAL  0x1000
+#define COMMON_LVB_REVERSE_VIDEO   0x4000
+#define COMMON_LVB_UNDERSCORE      0x8000
+
+/* CONSOLE_HISTORY_INFO.dwFlags */
+#define HISTORY_NO_DUP_FLAG  0x01
+
+typedef struct _CONSOLE_CURSOR_INFO {
+    DWORD	dwSize;   /* Between 1 & 100 for percentage of cell filled */
+    BOOL	bVisible; /* Visibility of cursor */
+} CONSOLE_CURSOR_INFO, *LPCONSOLE_CURSOR_INFO;
+
+typedef struct tagCOORD
+{
+    SHORT X;
+    SHORT Y;
+} COORD, *LPCOORD;
+
+typedef struct tagSMALL_RECT
+{
+    SHORT Left;
+    SHORT Top;
+    SHORT Right;
+    SHORT Bottom;
+} SMALL_RECT,*LPSMALL_RECT;
+
+typedef struct _CONSOLE_FONT_INFO
+{
+    DWORD       nFont;
+    COORD       dwFontSize;
+} CONSOLE_FONT_INFO,*LPCONSOLE_FONT_INFO;
+
+#ifndef NOGDI
+typedef struct _CONSOLE_FONT_INFOEX
+{
+    ULONG       cbSize;
+    DWORD       nFont;
+    COORD       dwFontSize;
+    UINT        FontFamily;
+    UINT        FontWeight;
+    WCHAR       FaceName[LF_FACESIZE];
+} CONSOLE_FONT_INFOEX,*LPCONSOLE_FONT_INFOEX;
+#endif
+
+typedef struct tagCONSOLE_HISTORY_INFO
+{
+    UINT        cbSize;
+    UINT        HistoryBufferSize;
+    UINT        NumberOfHistoryBuffers;
+    DWORD       dwFlags;
+} CONSOLE_HISTORY_INFO,*LPCONSOLE_HISTORY_INFO;
+
+typedef struct _CONSOLE_READCONSOLE_CONTROL
+{
+    ULONG       nLength;
+    ULONG       nInitialChars;
+    ULONG       dwCtrlWakeupMask;
+    ULONG       dwConsoleKeyState;
+} CONSOLE_READCONSOLE_CONTROL,*LPCONSOLE_READCONSOLE_CONTROL;
+
+typedef struct tagCONSOLE_SCREEN_BUFFER_INFO
+{
+    COORD       dwSize;
+    COORD       dwCursorPosition;
+    WORD        wAttributes;
+    SMALL_RECT  srWindow;
+    COORD       dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO,*LPCONSOLE_SCREEN_BUFFER_INFO;
+
+typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX
+{
+    ULONG       cbSize;
+    COORD       dwSize;
+    COORD       dwCursorPosition;
+    WORD        wAttributes;
+    SMALL_RECT  srWindow;
+    COORD       dwMaximumWindowSize;
+    WORD        wPopupAttributes;
+    BOOL        bFullscreenSupported;
+    COLORREF    ColorTable[16];
+} CONSOLE_SCREEN_BUFFER_INFOEX,*LPCONSOLE_SCREEN_BUFFER_INFOEX;
+
+typedef struct _CONSOLE_SELECTION_INFO
+{
+    DWORD       dwFlags;
+    COORD       dwSelectionAnchor;
+    SMALL_RECT  srSelection;
+} CONSOLE_SELECTION_INFO,*LPCONSOLE_SELECTION_INFO;
+
+typedef struct tagCHAR_INFO
+{
+    union
+	{
+	WCHAR UnicodeChar;
+	CHAR AsciiChar;
+	} Char;
+    WORD	Attributes;
+} CHAR_INFO,*LPCHAR_INFO;
+
+typedef struct tagKEY_EVENT_RECORD
+{
+    BOOL	bKeyDown;		/* 04 */
+    WORD	wRepeatCount;		/* 08 */
+    WORD	wVirtualKeyCode;	/* 0A */
+    WORD	wVirtualScanCode;	/* 0C */
+    union				/* 0E */
+	{
+	WCHAR UnicodeChar;		/* 0E */
+	CHAR AsciiChar;			/* 0E */
+	} uChar;
+    DWORD	dwControlKeyState;	/* 10 */
+} KEY_EVENT_RECORD,*LPKEY_EVENT_RECORD;
+
+/* dwControlKeyState bitmask */
+#define	RIGHT_ALT_PRESSED	0x0001
+#define	LEFT_ALT_PRESSED	0x0002
+#define	RIGHT_CTRL_PRESSED	0x0004
+#define	LEFT_CTRL_PRESSED	0x0008
+#define	SHIFT_PRESSED		0x0010
+#define	NUMLOCK_ON		0x0020
+#define	SCROLLLOCK_ON		0x0040
+#define	CAPSLOCK_ON		0x0080
+#define	ENHANCED_KEY		0x0100
+
+typedef struct tagMOUSE_EVENT_RECORD
+{
+    COORD	dwMousePosition;
+    DWORD	dwButtonState;
+    DWORD	dwControlKeyState;
+    DWORD	dwEventFlags;
+} MOUSE_EVENT_RECORD,*LPMOUSE_EVENT_RECORD;
+
+/* MOUSE_EVENT_RECORD.dwButtonState */
+#define FROM_LEFT_1ST_BUTTON_PRESSED    0x0001
+#define RIGHTMOST_BUTTON_PRESSED        0x0002
+#define FROM_LEFT_2ND_BUTTON_PRESSED    0x0004
+#define FROM_LEFT_3RD_BUTTON_PRESSED    0x0008
+#define FROM_LEFT_4TH_BUTTON_PRESSED    0x0010
+
+/* MOUSE_EVENT_RECORD.dwEventFlags */
+#define MOUSE_MOVED                     0x0001
+#define DOUBLE_CLICK                    0x0002
+#define MOUSE_WHEELED                   0x0004
+#define MOUSE_HWHEELED                  0x0008
+
+typedef struct tagWINDOW_BUFFER_SIZE_RECORD
+{
+    COORD	dwSize;
+} WINDOW_BUFFER_SIZE_RECORD,*LPWINDOW_BUFFER_SIZE_RECORD;
+
+typedef struct tagMENU_EVENT_RECORD
+{
+    UINT	dwCommandId; /* perhaps UINT16 ??? */
+} MENU_EVENT_RECORD,*LPMENU_EVENT_RECORD;
+
+typedef struct tagFOCUS_EVENT_RECORD
+{
+    BOOL      bSetFocus; /* perhaps BOOL16 ??? */
+} FOCUS_EVENT_RECORD,*LPFOCUS_EVENT_RECORD;
+
+typedef struct tagINPUT_RECORD
+{
+    WORD		EventType;		/* 00 */
+    union
+	{
+	KEY_EVENT_RECORD KeyEvent;
+	MOUSE_EVENT_RECORD MouseEvent;
+	WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+	MENU_EVENT_RECORD MenuEvent;
+	FOCUS_EVENT_RECORD FocusEvent;
+	} Event;
+} INPUT_RECORD,*PINPUT_RECORD;
+
+/* INPUT_RECORD.wEventType */
+#define KEY_EVENT			0x01
+#define MOUSE_EVENT			0x02
+#define WINDOW_BUFFER_SIZE_EVENT	0x04
+#define MENU_EVENT			0x08
+#define FOCUS_EVENT 			0x10
+
+#define CONSOLE_TEXTMODE_BUFFER  1
+
+#ifdef __i386__
+/* Note: this should return a COORD, but calling convention for returning
+ * structures is different between Windows and gcc on i386. */
+
+WINBASEAPI DWORD WINAPI GetConsoleFontSize(HANDLE, DWORD);
+WINBASEAPI DWORD WINAPI GetLargestConsoleWindowSize(HANDLE);
+
+static inline COORD __wine_GetConsoleFontSize_wrapper(HANDLE h, DWORD d)
+{
+    union {
+      COORD c;
+      DWORD dw;
+    } u;
+    u.dw = GetConsoleFontSize(h, d);
+    return u.c;
+}
+#define GetConsoleFontSize(h, d) __wine_GetConsoleFontSize_wrapper(h, d)
+
+static inline COORD __wine_GetLargestConsoleWindowSize_wrapper(HANDLE h)
+{
+    union {
+      COORD c;
+      DWORD dw;
+    } u;
+    u.dw = GetLargestConsoleWindowSize(h);
+    return u.c;
+}
+#define GetLargestConsoleWindowSize(h) __wine_GetLargestConsoleWindowSize_wrapper(h)
+
+#else  /* __i386__ */
+WINBASEAPI COORD WINAPI GetConsoleFontSize(HANDLE, DWORD);
+WINBASEAPI COORD WINAPI GetLargestConsoleWindowSize(HANDLE);
+#endif  /* __i386__ */
+
+WINBASEAPI BOOL   WINAPI AddConsoleAliasA(LPSTR,LPSTR,LPSTR);
+WINBASEAPI BOOL   WINAPI AddConsoleAliasW(LPWSTR,LPWSTR,LPWSTR);
+#define                  AddConsoleAlias WINELIB_NAME_AW(AddConsoleAlias)
+WINBASEAPI BOOL   WINAPI AllocConsole(VOID);
+WINBASEAPI BOOL   WINAPI AttachConsole(DWORD);
+WINBASEAPI HANDLE WINAPI CreateConsoleScreenBuffer( DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,LPVOID);
+WINBASEAPI BOOL WINAPI   FillConsoleOutputAttribute( HANDLE,WORD,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   FillConsoleOutputCharacterA(HANDLE,CHAR,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   FillConsoleOutputCharacterW(HANDLE,WCHAR,DWORD,COORD,LPDWORD);
+#define                  FillConsoleOutputCharacter WINELIB_NAME_AW(FillConsoleOutputCharacter)
+WINBASEAPI BOOL WINAPI   FlushConsoleInputBuffer( HANDLE);
+WINBASEAPI BOOL WINAPI   FreeConsole(VOID);
+WINBASEAPI BOOL WINAPI   GenerateConsoleCtrlEvent( DWORD,DWORD);
+WINBASEAPI DWORD WINAPI  GetConsoleAliasA(LPSTR,LPSTR,DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI  GetConsoleAliasW(LPWSTR,LPWSTR,DWORD,LPWSTR);
+#define                  GetConsoleAlias WINELIB_NAME_AW(GetConsoleAlias)
+WINBASEAPI DWORD WINAPI  GetConsoleAliasesA(LPSTR,DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI  GetConsoleAliasesW(LPWSTR,DWORD,LPWSTR);
+#define                  GetConsoleAliases WINELIB_NAME_AW(GetConsoleAliases)
+WINBASEAPI DWORD WINAPI  GetConsoleAliasesLengthA(LPSTR);
+WINBASEAPI DWORD WINAPI  GetConsoleAliasesLengthW(LPWSTR);
+#define                  GetConsoleAliasesLength WINELIB_NAME_AW(GetConsoleAliasesLength)
+WINBASEAPI DWORD WINAPI  GetConsoleAliasExesA(LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI  GetConsoleAliasExesW(LPWSTR,DWORD);
+#define                  GetConsoleAliasExes WINELIB_NAME_AW(GetConsoleAliasExes)
+WINBASEAPI DWORD WINAPI  GetConsoleAliasExesLengthA(VOID);
+WINBASEAPI DWORD WINAPI  GetConsoleAliasExesLengthW(VOID);
+#define                  GetConsoleAliasExesLength WINELIB_NAME_AW(GetConsoleAliasExesLength)
+WINBASEAPI UINT WINAPI   GetConsoleCP(VOID);
+WINBASEAPI BOOL WINAPI   GetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO);
+WINBASEAPI BOOL WINAPI   GetConsoleDisplayMode(LPDWORD);
+WINBASEAPI BOOL WINAPI   GetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO);
+WINBASEAPI BOOL WINAPI   GetConsoleInputExeNameA(DWORD,LPSTR);
+WINBASEAPI BOOL WINAPI   GetConsoleInputExeNameW(DWORD,LPWSTR);
+#define                  GetConsoleInputExeName WINELIB_NAME_AW(GetConsoleInputExeName)
+WINBASEAPI BOOL WINAPI   GetConsoleMode( HANDLE,LPDWORD);
+WINBASEAPI DWORD WINAPI  GetConsoleOriginalTitleA(LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI  GetConsoleOriginalTitleW(LPWSTR,DWORD);
+#define                  GetConsoleOriginalTitle WINELIB_NAME_AW(GetConsoleOriginalTitle)
+WINBASEAPI UINT WINAPI   GetConsoleOutputCP(VOID);
+WINBASEAPI DWORD WINAPI  GetConsoleProcessList(LPDWORD,DWORD);
+WINBASEAPI BOOL WINAPI   GetConsoleScreenBufferInfo(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFO);
+WINBASEAPI BOOL WINAPI   GetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX);
+WINBASEAPI DWORD WINAPI  GetConsoleTitleA(LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI  GetConsoleTitleW(LPWSTR,DWORD);
+#define                  GetConsoleTitle WINELIB_NAME_AW(GetConsoleTitle)
+WINBASEAPI HWND WINAPI   GetConsoleWindow(void);
+WINBASEAPI BOOL WINAPI   GetCurrentConsoleFont(HANDLE,BOOL,LPCONSOLE_FONT_INFO);
+WINBASEAPI BOOL WINAPI   GetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX);
+WINBASEAPI BOOL WINAPI   GetNumberOfConsoleInputEvents( HANDLE,LPDWORD);
+WINBASEAPI BOOL WINAPI   GetNumberOfConsoleMouseButtons(LPDWORD);
+WINBASEAPI BOOL WINAPI   PeekConsoleInputA( HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   PeekConsoleInputW( HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+#define                  PeekConsoleInput WINELIB_NAME_AW(PeekConsoleInput)
+WINBASEAPI BOOL WINAPI   ReadConsoleA(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);
+WINBASEAPI BOOL WINAPI   ReadConsoleW(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);
+#define                  ReadConsole WINELIB_NAME_AW(ReadConsole)
+WINBASEAPI BOOL WINAPI   ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+#define                  ReadConsoleInput WINELIB_NAME_AW(ReadConsoleInput)
+WINBASEAPI BOOL WINAPI   ReadConsoleOutputA( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT);
+WINBASEAPI BOOL WINAPI   ReadConsoleOutputW( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT);
+#define                  ReadConsoleOutput WINELIB_NAME_AW(ReadConsoleOutput)
+WINBASEAPI BOOL WINAPI   ReadConsoleOutputAttribute( HANDLE,LPWORD,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   ReadConsoleOutputCharacterW(HANDLE,LPWSTR,DWORD,COORD,LPDWORD);
+#define                  ReadConsoleOutputCharacter WINELIB_NAME_AW(ReadConsoleOutputCharacter)
+WINBASEAPI BOOL WINAPI   ScrollConsoleScreenBufferA( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO);
+WINBASEAPI BOOL WINAPI   ScrollConsoleScreenBufferW( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO);
+#define                  ScrollConsoleScreenBuffer WINELIB_NAME_AW(ScrollConsoleScreenBuffer)
+WINBASEAPI BOOL WINAPI   SetConsoleActiveScreenBuffer( HANDLE);
+WINBASEAPI BOOL WINAPI   SetConsoleCP(UINT);
+WINBASEAPI BOOL WINAPI   SetConsoleCtrlHandler( PHANDLER_ROUTINE,BOOL);
+WINBASEAPI BOOL WINAPI   SetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO);
+WINBASEAPI BOOL WINAPI   SetConsoleCursorPosition(HANDLE,COORD);
+WINBASEAPI BOOL WINAPI   SetConsoleDisplayMode(HANDLE,DWORD,LPCOORD);
+WINBASEAPI BOOL WINAPI   SetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO);
+WINBASEAPI BOOL WINAPI   SetConsoleMode( HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI   SetConsoleOutputCP(UINT);
+WINBASEAPI BOOL WINAPI   SetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX);
+WINBASEAPI BOOL WINAPI   SetConsoleScreenBufferSize(HANDLE,COORD);
+WINBASEAPI BOOL WINAPI   SetConsoleTextAttribute( HANDLE,WORD);
+WINBASEAPI BOOL WINAPI   SetConsoleTitleA(LPCSTR);
+WINBASEAPI BOOL WINAPI   SetConsoleTitleW(LPCWSTR);
+#define                  SetConsoleTitle WINELIB_NAME_AW(SetConsoleTitle)
+WINBASEAPI BOOL WINAPI   SetConsoleWindowInfo( HANDLE,BOOL,LPSMALL_RECT);
+WINBASEAPI BOOL WINAPI   SetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX);
+WINBASEAPI BOOL WINAPI   WriteConsoleA(HANDLE,const void *,DWORD,LPDWORD,void *);
+WINBASEAPI BOOL WINAPI   WriteConsoleW(HANDLE,const void *,DWORD,LPDWORD,void *);
+#define                  WriteConsole WINELIB_NAME_AW(WriteConsole)
+WINBASEAPI BOOL WINAPI   WriteConsoleInputA(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   WriteConsoleInputW(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD);
+#define                  WriteConsoleInput WINELIB_NAME_AW(WriteConsoleInput)
+WINBASEAPI BOOL WINAPI   WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT);
+WINBASEAPI BOOL WINAPI   WriteConsoleOutputW(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT);
+#define                  WriteConsoleOutput WINELIB_NAME_AW(WriteConsoleOutput)
+WINBASEAPI BOOL WINAPI   WriteConsoleOutputAttribute(HANDLE,const WORD *,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   WriteConsoleOutputCharacterA(HANDLE,LPCSTR,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI   WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,LPDWORD);
+#define                  WriteConsoleOutputCharacter WINELIB_NAME_AW(WriteConsoleOutputCharacter)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINCON_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h
new file mode 100644
index 0000000..16798c6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2006 Robert Shearman (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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINCRED_H_
+#define _WINCRED_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _ADVAPI32_
+#define WINADVAPI
+#else
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+#ifndef __SECHANDLE_DEFINED__
+#define __SECHANDLE_DEFINED__
+typedef struct _SecHandle
+{
+    ULONG_PTR dwLower;
+    ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+#endif
+
+#ifndef __WINE_CTXTHANDLE_DEFINED__
+#define __WINE_CTXTHANDLE_DEFINED__
+typedef SecHandle CtxtHandle;
+typedef PSecHandle PCtxtHandle;
+#endif
+
+typedef struct _CREDENTIAL_ATTRIBUTEA
+{
+    LPSTR Keyword;
+    DWORD Flags;
+    DWORD ValueSize;
+    LPBYTE Value;
+} CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;
+
+typedef struct _CREDENTIAL_ATTRIBUTEW
+{
+    LPWSTR Keyword;
+    DWORD Flags;
+    DWORD ValueSize;
+    LPBYTE Value;
+} CREDENTIAL_ATTRIBUTEW, *PCREDENTIAL_ATTRIBUTEW;
+
+DECL_WINELIB_TYPE_AW(CREDENTIAL_ATTRIBUTE)
+DECL_WINELIB_TYPE_AW(PCREDENTIAL_ATTRIBUTE)
+
+typedef struct _CREDENTIALA
+{
+    DWORD Flags;
+    DWORD Type;
+    LPSTR TargetName;
+    LPSTR Comment;
+    FILETIME LastWritten;
+    DWORD CredentialBlobSize;
+    LPBYTE CredentialBlob;
+    DWORD Persist;
+    DWORD AttributeCount;
+    PCREDENTIAL_ATTRIBUTEA Attributes;
+    LPSTR TargetAlias;
+    LPSTR UserName;
+} CREDENTIALA, *PCREDENTIALA;
+
+typedef struct _CREDENTIALW
+{
+    DWORD Flags;
+    DWORD Type;
+    LPWSTR TargetName;
+    LPWSTR Comment;
+    FILETIME LastWritten;
+    DWORD CredentialBlobSize;
+    LPBYTE CredentialBlob;
+    DWORD Persist;
+    DWORD AttributeCount;
+    PCREDENTIAL_ATTRIBUTEW Attributes;
+    LPWSTR TargetAlias;
+    LPWSTR UserName;
+} CREDENTIALW, *PCREDENTIALW;
+
+DECL_WINELIB_TYPE_AW(CREDENTIAL)
+DECL_WINELIB_TYPE_AW(PCREDENTIAL)
+
+typedef struct _CREDENTIAL_TARGET_INFORMATIONA
+{
+    LPSTR TargetName;
+    LPSTR NetbiosServerName;
+    LPSTR DnsServerName;
+    LPSTR NetbiosDomainName;
+    LPSTR DnsDomainName;
+    LPSTR DnsTreeName;
+    LPSTR PackageName;
+    DWORD Flags;
+    DWORD CredTypeCount;
+    LPDWORD CredTypes;
+} CREDENTIAL_TARGET_INFORMATIONA, *PCREDENTIAL_TARGET_INFORMATIONA;
+
+typedef struct _CREDENTIAL_TARGET_INFORMATIONW
+{
+    LPWSTR TargetName;
+    LPWSTR NetbiosServerName;
+    LPWSTR DnsServerName;
+    LPWSTR NetbiosDomainName;
+    LPWSTR DnsDomainName;
+    LPWSTR DnsTreeName;
+    LPWSTR PackageName;
+    DWORD Flags;
+    DWORD CredTypeCount;
+    LPDWORD CredTypes;
+} CREDENTIAL_TARGET_INFORMATIONW, *PCREDENTIAL_TARGET_INFORMATIONW;
+
+DECL_WINELIB_TYPE_AW(CREDENTIAL_TARGET_INFORMATION)
+DECL_WINELIB_TYPE_AW(PCREDENTIAL_TARGET_INFORMATION)
+
+typedef struct _CREDUI_INFOA
+{
+    DWORD cbSize;
+    HWND hwndParent;
+    PCSTR pszMessageText;
+    PCSTR pszCaptionText;
+    HBITMAP hbmBanner;
+} CREDUI_INFOA, *PCREDUI_INFOA;
+
+typedef struct _CREDUI_INFOW
+{
+    DWORD cbSize;
+    HWND hwndParent;
+    PCWSTR pszMessageText;
+    PCWSTR pszCaptionText;
+    HBITMAP hbmBanner;
+} CREDUI_INFOW, *PCREDUI_INFOW;
+
+DECL_WINELIB_TYPE_AW(CREDUI_INFO)
+DECL_WINELIB_TYPE_AW(PCREDUI_INFO)
+
+typedef enum _CRED_MARSHAL_TYPE
+{
+    CertCredential = 1,
+    UsernameTargetCredential,
+    BinaryBlobCredential
+} CRED_MARSHAL_TYPE, *PCRED_MARSHAL_TYPE;
+
+#define CERT_HASH_LENGTH    20
+
+typedef struct _CERT_CREDENTIAL_INFO
+{
+    ULONG cbSize;
+    UCHAR rgbHashOfCert[CERT_HASH_LENGTH];
+} CERT_CREDENTIAL_INFO, *PCERT_CREDENTIAL_INFO;
+
+typedef struct _USERNAME_TARGET_CREDENTIAL_INFO
+{
+    LPWSTR UserName;
+} USERNAME_TARGET_CREDENTIAL_INFO;
+
+typedef struct _BINARY_BLOB_CREDENTIAL_INFO
+{
+    ULONG cbBlob;
+    LPBYTE pbBlob;
+} BINARY_BLOB_CREDENTIAL_INFO, *PBINARY_BLOB_CREDENTIAL_INFO;
+
+#define CRED_MAX_STRING_LENGTH              256
+#define CRED_MAX_USERNAME_LENGTH            513
+#define CRED_MAX_GENERIC_TARGET_NAME_LENGTH 32767
+#define CRED_MAX_DOMAIN_TARGET_NAME_LENGTH  337
+#define CRED_MAX_VALUE_SIZE                 256
+#define CRED_MAX_ATTRIBUTES                 64
+
+#define CRED_MAX_BLOB_SIZE                  512
+
+#define CREDUI_MAX_MESSAGE_LENGTH 32767
+#define CREDUI_MAX_CAPTION_LENGTH 128
+#define CREDUI_MAX_GENERIC_TARGET_LENGTH CRED_MAX_GENERIC_TARGET_NAME_LENGTH
+#define CREDUI_MAX_DOMAIN_TARGET_LENGTH CRED_MAX_DOMAIN_TARGET_LENGTH
+#define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH
+#define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2)
+
+/* flags for CREDENTIAL::Flags */
+#define CRED_FLAGS_PASSWORD_FOR_CERT                0x0001
+#define CRED_FLAGS_PROMPT_NOW                       0x0002
+#define CRED_FLAGS_USERNAME_TARGET                  0x0004
+#define CRED_FLAGS_OWF_CRED_BLOB                    0x0008
+#define CRED_FLAGS_VALID_FLAGS                      0x000f
+
+/* values for CREDENTIAL::Type */
+#define CRED_TYPE_GENERIC                           1
+#define CRED_TYPE_DOMAIN_PASSWORD                   2
+#define CRED_TYPE_DOMAIN_CERTIFICATE                3
+#define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD           4
+#define CRED_TYPE_GENERIC_CERTIFICATE               5
+#define CRED_TYPE_MAXIMUM                           6
+#define CRED_TYPE_MAXIMUM_EX                        (CRED_TYPE_MAXIMUM+1000)
+
+/* values for CREDENTIAL::Persist */
+#define CRED_PERSIST_NONE                           0
+#define CRED_PERSIST_SESSION                        1
+#define CRED_PERSIST_LOCAL_MACHINE                  2
+#define CRED_PERSIST_ENTERPRISE                     3
+
+/* values for CREDENTIAL_TARGET_INFORMATION::Flags */
+#define CRED_TI_SERVER_FORMAT_UNKNOWN               1
+#define CRED_TI_DOMAIN_FORMAT_UNKNOWN               2
+#define CRED_TI_ONLY_PASSWORD_REQUIRED              4
+
+#define CREDUI_FLAGS_INCORRECT_PASSWORD             0x00000001
+#define CREDUI_FLAGS_DO_NOT_PERSIST                 0x00000002
+#define CREDUI_FLAGS_REQUEST_ADMINISTRATOR          0x00000004
+#define CREDUI_FLAGS_EXCLUDE_CERTIFICATES           0x00000008
+#define CREDUI_FLAGS_REQUIRE_CERTIFICATE            0x00000010
+#define CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX            0x00000040
+#define CREDUI_FLAGS_ALWAYS_SHOW_UI                 0x00000080
+#define CREDUI_FLAGS_REQUIRE_SMARTCARD              0x00000100
+#define CREDUI_FLAGS_PASSWORD_ONLY_OK               0x00000200
+#define CREDUI_FLAGS_VALIDATE_USERNAME              0x00000400
+#define CREDUI_FLAGS_COMPLETE_USERNAME              0x00000800
+#define CREDUI_FLAGS_PERSIST                        0x00001000
+#define CREDUI_FLAGS_SERVER_CREDENTIAL              0x00004000
+#define CREDUI_FLAGS_EXPECT_CONFIRMATION            0x00020000
+#define CREDUI_FLAGS_GENERIC_CREDENTIALS            0x00040000
+#define CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS    0x00080000
+#define CREDUI_FLAGS_KEEP_USERNAME                  0x00100000
+
+/* flags for CredWrite and CredWriteDomainCredentials */
+#define CRED_PRESERVE_CREDENTIAL_BLOB               0x00000001
+
+WINADVAPI BOOL  WINAPI CredDeleteA(LPCSTR,DWORD,DWORD);
+WINADVAPI BOOL  WINAPI CredDeleteW(LPCWSTR,DWORD,DWORD);
+#define                CredDelete WINELIB_NAME_AW(CredDelete)
+WINADVAPI BOOL  WINAPI CredEnumerateA(LPCSTR,DWORD,DWORD *,PCREDENTIALA **);
+WINADVAPI BOOL  WINAPI CredEnumerateW(LPCWSTR,DWORD,DWORD *,PCREDENTIALW **);
+#define                CredEnumerate WINELIB_NAME_AW(CredEnumerate)
+WINADVAPI VOID  WINAPI CredFree(PVOID);
+WINADVAPI BOOL  WINAPI CredGetSessionTypes(DWORD,LPDWORD);
+WINADVAPI BOOL  WINAPI CredIsMarshaledCredentialA(LPCSTR);
+WINADVAPI BOOL  WINAPI CredIsMarshaledCredentialW(LPCWSTR);
+#define                CredIsMarshaledCredential WINELIB_NAME_AW(CredIsMarshaledCredential)
+WINADVAPI BOOL  WINAPI CredMarshalCredentialA(CRED_MARSHAL_TYPE,PVOID,LPSTR *);
+WINADVAPI BOOL  WINAPI CredMarshalCredentialW(CRED_MARSHAL_TYPE,PVOID,LPWSTR *);
+#define                CredMarshalCredential WINELIB_NAME_AW(CredMarshalCredential)
+WINADVAPI BOOL  WINAPI CredReadA(LPCSTR,DWORD,DWORD,PCREDENTIALA *);
+WINADVAPI BOOL  WINAPI CredReadW(LPCWSTR,DWORD,DWORD,PCREDENTIALW *);
+#define                CredRead WINELIB_NAME_AW(CredRead)
+WINADVAPI BOOL  WINAPI CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA,DWORD,DWORD *,PCREDENTIALA **);
+WINADVAPI BOOL  WINAPI CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW,DWORD,DWORD *,PCREDENTIALW **);
+#define                CredReadDomainCredentials WINELIB_NAME_AW(CredReadDomainCredentials)
+WINADVAPI BOOL  WINAPI CredRenameA(LPCSTR,LPCSTR,DWORD,DWORD);
+WINADVAPI BOOL  WINAPI CredRenameW(LPCWSTR,LPCWSTR,DWORD,DWORD);
+#define                CredRename WINELIB_NAME_AW(CredRename)
+WINADVAPI BOOL  WINAPI CredUnmarshalCredentialA(LPCSTR,PCRED_MARSHAL_TYPE,PVOID *);
+WINADVAPI BOOL  WINAPI CredUnmarshalCredentialW(LPCWSTR,PCRED_MARSHAL_TYPE,PVOID *);
+#define                CredUnmarshalCredential WINELIB_NAME_AW(CredUnmarshalCredential)
+WINADVAPI BOOL  WINAPI CredWriteA(PCREDENTIALA,DWORD);
+WINADVAPI BOOL  WINAPI CredWriteW(PCREDENTIALW,DWORD);
+#define                CredWrite WINELIB_NAME_AW(CredWrite)
+
+DWORD WINAPI CredUICmdLinePromptForCredentialsW(PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD);
+DWORD WINAPI CredUICmdLinePromptForCredentialsA(PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD);
+#define      CredUICmdLinePromptForCredentials WINELIB_NAME_AW(CredUICmdLinePromptForCredentials)
+DWORD WINAPI CredUIConfirmCredentialsW(PCWSTR,BOOL);
+DWORD WINAPI CredUIConfirmCredentialsA(PCSTR,BOOL);
+#define      CredUIConfirmCredentials WINELIB_NAME_AW(CredUIConfirmCredentials)
+DWORD WINAPI CredUIParseUserNameW(PCWSTR,PWSTR,ULONG,PWSTR,ULONG);
+DWORD WINAPI CredUIParseUserNameA(PCSTR,PSTR,ULONG,PSTR,ULONG);
+#define      CredUIParseUserName WINELIB_NAME_AW(CredUIParseUserName)
+DWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW,PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD);
+DWORD WINAPI CredUIPromptForCredentialsA(PCREDUI_INFOA,PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD);
+#define      CredUIPromptForCredentials WINELIB_NAME_AW(CredUIPromptForCredentials)
+DWORD WINAPI CredUIStoreSSOCredW(PCWSTR,PCWSTR,PCWSTR,BOOL);
+/* Note: no CredUIStoreSSOCredA in PSDK header */
+DWORD WINAPI CredUIReadSSOCredW(PCWSTR,PWSTR*);
+/* Note: no CredUIReadSSOCredA in PSDK header */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINCRED_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h
new file mode 100644
index 0000000..91f3758
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h
@@ -0,0 +1,4589 @@
+/*
+ * Copyright (C) 2002 Travis Michielsen
+ * Copyright (C) 2004-2005 Juan Lang
+ * Copyright (C) 2007 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINCRYPT_H
+#define __WINE_WINCRYPT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bcrypt.h>
+/* FIXME: #include <ncrypt.h> */
+
+#ifdef _ADVAPI32_
+# define WINADVAPI
+#else
+# define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+/* some typedefs for function parameters */
+typedef unsigned int ALG_ID;
+typedef ULONG_PTR HCRYPTPROV;
+typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
+typedef ULONG_PTR HCRYPTPROV_LEGACY;
+typedef ULONG_PTR HCRYPTKEY;
+typedef ULONG_PTR HCRYPTHASH;
+typedef void *HCERTSTORE;
+typedef void *HCRYPTMSG;
+typedef void *HCERTSTOREPROV;
+typedef void *HCRYPTOIDFUNCSET;
+typedef void *HCRYPTOIDFUNCADDR;
+typedef void *HCRYPTDEFAULTCONTEXT;
+
+/* CSP Structs */
+
+typedef struct _PROV_ENUMALGS {
+  ALG_ID aiAlgid;
+  DWORD  dwBitLen;
+  DWORD  dwNameLen;
+  CHAR   szName[20];
+} PROV_ENUMALGS;
+
+typedef struct _PROV_ENUMALGS_EX {
+  ALG_ID aiAlgid;
+  DWORD  dwDefaultLen;
+  DWORD  dwMinLen;
+  DWORD  dwMaxLen;
+  DWORD  dwProtocols;
+  DWORD  dwNameLen;
+  CHAR   szName[20];
+  DWORD  dwLongNameLen;
+  CHAR   szLongName[40];
+} PROV_ENUMALGS_EX;
+
+#define SCHANNEL_MAC_KEY 0
+#define SCHANNEL_ENC_KEY 1
+
+typedef struct _SCHANNEL_ALG {
+  DWORD  dwUse;
+  ALG_ID Algid;
+  DWORD  cBits;
+  DWORD  dwFlags;
+  DWORD  dwReserved;
+} SCHANNEL_ALG, *PSCHANNEL_ALG;
+
+
+#define CRYPT_IPSEC_HMAC_KEY 0x0100
+
+typedef struct _HMAC_INFO {
+  ALG_ID HashAlgid;
+  BYTE*  pbInnerString;
+  DWORD  cbInnerString;
+  BYTE*  pbOuterString;
+  DWORD  cbOuterString;
+} HMAC_INFO, *PHMAC_INFO;
+		
+typedef struct _CRYPTOAPI_BLOB {
+  DWORD    cbData;
+  BYTE*    pbData;
+} CRYPT_INTEGER_BLOB,  *PCRYPT_INTEGER_BLOB,
+  CRYPT_UINT_BLOB,     *PCRYPT_UINT_BLOB,
+  CRYPT_OBJID_BLOB,    *PCRYPT_OBJID_BLOB,
+  CERT_NAME_BLOB,      *PCERT_NAME_BLOB,
+  CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
+  CERT_BLOB,           *PCERT_BLOB,
+  CRL_BLOB,            *PCRL_BLOB,
+  DATA_BLOB,           *PDATA_BLOB,
+  CRYPT_DATA_BLOB,     *PCRYPT_DATA_BLOB,
+  CRYPT_HASH_BLOB,     *PCRYPT_HASH_BLOB,
+  CRYPT_DIGEST_BLOB,   *PCRYPT_DIGEST_BLOB,
+  CRYPT_DER_BLOB,      *PCRYPT_DER_BLOB,
+  CRYPT_ATTR_BLOB,     *PCRYPT_ATTR_BLOB;
+
+typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
+  DWORD   cbSize;
+  DWORD   dwPromptFlags;
+  HWND    hwndApp;
+  LPCWSTR szPrompt;
+} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
+
+typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
+  LPSTR            pszObjId;
+  CRYPT_OBJID_BLOB Parameters;
+} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
+
+typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
+  LPSTR               pszObjId;
+  CRYPT_OBJID_BLOB    Value;
+} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
+
+typedef struct _PUBLICKEYSTRUC {
+    BYTE   bType;
+    BYTE   bVersion;
+    WORD   reserved;
+    ALG_ID aiKeyAlg;
+} BLOBHEADER, PUBLICKEYSTRUC;
+
+typedef struct _RSAPUBKEY {
+    DWORD   magic;
+    DWORD   bitlen;
+    DWORD   pubexp;
+} RSAPUBKEY;
+
+typedef struct _PUBKEY {
+    DWORD   magic;
+    DWORD   bitlen;
+} DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;
+
+typedef struct _DSSSEED {
+    DWORD   counter;
+    BYTE    seed[20];
+} DSSSEED;
+
+typedef struct _PUBKEYVER3 {
+    DWORD   magic;
+    DWORD   bitlenP;
+    DWORD   bitlenQ;
+    DWORD   bitlenJ;
+    DSSSEED DSSSeed;
+} DHPUBKEY_VER3, DSSPUBKEY_VER3;
+
+typedef struct _PRIVKEYVER3 {
+    DWORD   magic;
+    DWORD   bitlenP;
+    DWORD   bitlenQ;
+    DWORD   bitlenJ;
+    DWORD   bitlenX;
+    DSSSEED DSSSeed;
+} DHPRIVKEY_VER3, DSSPRIVKEY_VER3;
+
+typedef struct _KEY_TYPE_SUBTYPE {
+    DWORD   dwKeySpec;
+    GUID    Type;
+    GUID    SubType;
+} KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;
+
+typedef struct _CERT_FORTEZZA_DATA_PROP {
+    unsigned char   SerialNumber[8];
+    int             CertIndex;
+    unsigned char   CertLabel[36];
+} CERT_FORTEZZA_DATA_PROP;
+
+typedef struct _CMS_DH_KEY_INFO {
+    DWORD             dwVersion;
+    ALG_ID            Algid;
+    LPSTR             pszContentEncObjId;
+    CRYPT_DATA_BLOB   PubInfo;
+    void              *pReserved;
+} CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;
+
+typedef struct _CRYPT_BIT_BLOB {
+    DWORD cbData;
+    BYTE  *pbData;
+    DWORD cUnusedBits;
+} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
+
+typedef struct _CRYPT_KEY_PROV_PARAM {
+    DWORD dwParam;
+    BYTE *pbData;
+    DWORD cbData;
+    DWORD dwFlags;
+} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
+
+typedef struct _CRYPT_KEY_PROV_INFO {
+    LPWSTR                pwszContainerName;
+    LPWSTR                pwszProvName;
+    DWORD                 dwProvType;
+    DWORD                 dwFlags;
+    DWORD                 cProvParam;
+    PCRYPT_KEY_PROV_PARAM rgProvParam;
+    DWORD                 dwKeySpec;
+} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
+
+typedef struct _CERT_KEY_CONTEXT {
+    DWORD      cbSize;
+    HCRYPTPROV hCryptProv;
+    DWORD      dwKeySpec;
+} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
+
+typedef struct _CERT_PUBLIC_KEY_INFO {
+    CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+    CRYPT_BIT_BLOB             PublicKey;
+} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
+
+typedef struct _CERT_EXTENSION {
+    LPSTR               pszObjId;
+    BOOL                fCritical;
+    CRYPT_OBJID_BLOB    Value;
+} CERT_EXTENSION, *PCERT_EXTENSION;
+
+typedef struct _CERT_EXTENSIONS {
+    DWORD           cExtension;
+    PCERT_EXTENSION rgExtension;
+} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
+
+typedef struct _CERT_INFO {
+    DWORD                      dwVersion;
+    CRYPT_INTEGER_BLOB         SerialNumber;
+    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+    CERT_NAME_BLOB             Issuer;
+    FILETIME                   NotBefore;
+    FILETIME                   NotAfter;
+    CERT_NAME_BLOB             Subject;
+    CERT_PUBLIC_KEY_INFO       SubjectPublicKeyInfo;
+    CRYPT_BIT_BLOB             IssuerUniqueId;
+    CRYPT_BIT_BLOB             SubjectUniqueId;
+    DWORD                      cExtension;
+    PCERT_EXTENSION            rgExtension;
+} CERT_INFO, *PCERT_INFO;
+
+typedef struct _CERT_RDN_ATTR {
+    LPSTR               pszObjId;
+    DWORD               dwValueType;
+    CERT_RDN_VALUE_BLOB Value;
+} CERT_RDN_ATTR, *PCERT_RDN_ATTR;
+
+typedef struct _CERT_RDN {
+    DWORD          cRDNAttr;
+    PCERT_RDN_ATTR rgRDNAttr;
+} CERT_RDN, *PCERT_RDN;
+
+typedef struct _CERT_NAME_INFO {
+    DWORD     cRDN;
+    PCERT_RDN rgRDN;
+} CERT_NAME_INFO, *PCERT_NAME_INFO;
+
+typedef struct _CERT_NAME_VALUE {
+    DWORD               dwValueType;
+    CERT_RDN_VALUE_BLOB Value;
+} CERT_NAME_VALUE, *PCERT_NAME_VALUE;
+
+typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO {
+    CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;
+    CRYPT_DATA_BLOB            EncryptedPrivateKey;
+} CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO;
+
+typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
+    CRYPT_DATA_BLOB    KeyId;
+    CERT_NAME_BLOB     CertIssuer;
+    CRYPT_INTEGER_BLOB CertSerialNumber;
+} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;
+
+typedef struct _CERT_PRIVATE_KEY_VALIDITY {
+    FILETIME NotBefore;
+    FILETIME NotAfter;
+} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;
+
+typedef struct _CERT_KEY_ATTRIBUTES_INFO {
+    CRYPT_DATA_BLOB            KeyId;
+    CRYPT_BIT_BLOB             IntendedKeyUsage;
+    PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
+} CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
+
+/* byte 0 */
+#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
+#define CERT_NON_REPUDIATION_KEY_USAGE   0x40
+#define CERT_KEY_ENCIPHERMENT_KEY_USAGE  0x20
+#define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
+#define CERT_KEY_AGREEMENT_KEY_USAGE     0x08
+#define CERT_KEY_CERT_SIGN_KEY_USAGE     0x04
+#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE  0x02
+#define CERT_CRL_SIGN_KEY_USAGE          0x02
+#define CERT_ENCIPHER_ONLY_KEY_USAGE     0x01
+/* byte 1 */
+#define CERT_DECIPHER_ONLY_KEY_USAGE     0x80
+
+typedef struct _CERT_POLICY_ID {
+    DWORD  cCertPolicyElementId;
+    LPSTR *rgbszCertPolicyElementId;
+} CERT_POLICY_ID, *PCERT_POLICY_ID;
+
+typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
+    DWORD           cCertPolicyId;
+    PCERT_POLICY_ID rgCertPolicyId;
+    CRYPT_BIT_BLOB  RestrictedKeyUsage;
+} CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO;
+
+typedef struct _CERT_OTHER_NAME {
+    LPSTR            pszObjId;
+    CRYPT_OBJID_BLOB Value;
+} CERT_OTHER_NAME, *PCERT_OTHER_NAME;
+
+typedef struct _CERT_ALT_NAME_ENTRY {
+    DWORD dwAltNameChoice;
+    union {
+        PCERT_OTHER_NAME pOtherName;
+        LPWSTR           pwszRfc822Name;
+        LPWSTR           pwszDNSName;
+        CERT_NAME_BLOB   DirectoryName;
+        LPWSTR           pwszURL;
+        CRYPT_DATA_BLOB  IPAddress;
+        LPSTR            pszRegisteredID;
+    } DUMMYUNIONNAME;
+} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
+
+#define CERT_ALT_NAME_OTHER_NAME     1
+#define CERT_ALT_NAME_RFC822_NAME    2
+#define CERT_ALT_NAME_DNS_NAME       3
+#define CERT_ALT_NAME_X400_ADDRESS   4
+#define CERT_ALT_NAME_DIRECTORY_NAME 5
+#define CERT_ALT_NAME_EDI_PARTY_NAME 6
+#define CERT_ALT_NAME_URL            7
+#define CERT_ALT_NAME_IP_ADDRESS     8
+#define CERT_ALT_NAME_REGISTERED_ID  9
+
+typedef struct _CERT_ALT_NAME_INFO {
+    DWORD                cAltEntry;
+    PCERT_ALT_NAME_ENTRY rgAltEntry;
+} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
+
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK  0xff
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK  0x0000ffff
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
+#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \
+ (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \
+  CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
+#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \
+ ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
+
+typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
+    CRYPT_BIT_BLOB  SubjectType;
+    BOOL            fPathLenConstraint;
+    DWORD           dwPathLenConstraint;
+    DWORD           cSubtreesConstraint;
+    CERT_NAME_BLOB *rgSubtreesConstraint;
+} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
+
+#define CERT_CA_SUBJECT_FLAG         0x80
+#define CERT_END_ENTITY_SUBJECT_FLAG 0x40
+
+typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
+    BOOL  fCA;
+    BOOL  fPathLenConstraint;
+    DWORD dwPathLenConstraint;
+} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
+
+typedef struct _CERT_POLICY_QUALIFIER_INFO {
+    LPSTR            pszPolicyQualifierId;
+    CRYPT_OBJID_BLOB Qualifier;
+} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
+
+typedef struct _CERT_POLICY_INFO {
+    LPSTR                       pszPolicyIdentifier;
+    DWORD                       cPolicyQualifier;
+    CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;
+} CERT_POLICY_INFO, *PCERT_POLICY_INFO;
+
+typedef struct _CERT_POLICIES_INFO {
+    DWORD             cPolicyInfo;
+    CERT_POLICY_INFO *rgPolicyInfo;
+} CERT_POLICIES_INFO, *PCERT_POLICIES_INFO;
+
+typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
+    LPSTR pszOrganization;
+    DWORD cNoticeNumbers;
+    int  *rgNoticeNumbers;
+} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
+ *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
+
+typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
+    CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;
+    LPWSTR                                  pszDisplayText;
+} CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE;
+
+typedef struct _CPS_URLS {
+    LPWSTR                      pszURL;
+    CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;
+    CRYPT_DATA_BLOB            *pDigest;
+} CPS_URLS, *PCPS_URLS;
+
+typedef struct _CERT_POLICY95_QUALIFIER1 {
+    LPWSTR    pszPracticesReference;
+    LPSTR     pszNoticeIdentifier;
+    LPSTR     pszNSINoticeIdentifier;
+    DWORD     cCPSURLs;
+    CPS_URLS *rgCPSURLs;
+} CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1;
+
+typedef struct _CERT_POLICY_MAPPING {
+    LPSTR pszIssuerDomainPolicy;
+    LPSTR pszSubjectDomainPolicy;
+} CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING;
+
+typedef struct _CERT_POLICY_MAPPINGS_INFO {
+    DWORD                cPolicyMapping;
+    PCERT_POLICY_MAPPING rgPolicyMapping;
+} CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO;
+
+typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
+    BOOL  fRequireExplicitPolicy;
+    DWORD dwRequireExplicitPolicySkipCerts;
+    BOOL  fInhibitPolicyMapping;
+    DWORD dwInhibitPolicyMappingSkipCerts;
+} CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;
+
+typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
+    LPSTR           pszObjId;
+    DWORD           cValue;
+    PCRYPT_DER_BLOB rgValue;
+} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
+
+typedef struct _CRYPT_CONTENT_INFO {
+    LPSTR          pszObjId;
+    CRYPT_DER_BLOB Content;
+} CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO;
+
+typedef struct _CRYPT_SEQUENCE_OF_ANY {
+    DWORD           cValue;
+    PCRYPT_DER_BLOB rgValue;
+} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;
+
+typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
+    CRYPT_DATA_BLOB    KeyId;
+    CERT_ALT_NAME_INFO AuthorityCertIssuer;
+    CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
+} CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO;
+
+typedef struct _CERT_ACCESS_DESCRIPTION {
+    LPSTR               pszAccessMethod;
+    CERT_ALT_NAME_ENTRY AccessLocation;
+} CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION;
+
+typedef struct _CERT_AUTHORITY_INFO_ACCESS {
+    DWORD                    cAccDescr;
+    PCERT_ACCESS_DESCRIPTION rgAccDescr;
+} CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS;
+
+typedef struct _CERT_CONTEXT {
+    DWORD      dwCertEncodingType;
+    BYTE       *pbCertEncoded;
+    DWORD      cbCertEncoded;
+    PCERT_INFO pCertInfo;
+    HCERTSTORE hCertStore;
+} CERT_CONTEXT, *PCERT_CONTEXT;
+typedef const CERT_CONTEXT *PCCERT_CONTEXT;
+
+typedef struct _CRL_ENTRY {
+    CRYPT_INTEGER_BLOB SerialNumber;
+    FILETIME           RevocationDate;
+    DWORD              cExtension;
+    PCERT_EXTENSION    rgExtension;
+} CRL_ENTRY, *PCRL_ENTRY;
+
+typedef struct _CRL_INFO {
+    DWORD           dwVersion;
+    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+    CERT_NAME_BLOB  Issuer;
+    FILETIME        ThisUpdate;
+    FILETIME        NextUpdate;
+    DWORD           cCRLEntry;
+    PCRL_ENTRY      rgCRLEntry;
+    DWORD           cExtension;
+    PCERT_EXTENSION rgExtension;
+} CRL_INFO, *PCRL_INFO;
+
+typedef struct _CRL_DIST_POINT_NAME {
+    DWORD dwDistPointNameChoice;
+    union {
+        CERT_ALT_NAME_INFO FullName;
+    } DUMMYUNIONNAME;
+} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;
+
+#define CRL_DIST_POINT_NO_NAME         0
+#define CRL_DIST_POINT_FULL_NAME       1
+#define CRL_DIST_POINT_ISSUER_RDN_NAME 2
+
+typedef struct _CRL_DIST_POINT {
+    CRL_DIST_POINT_NAME DistPointName;
+    CRYPT_BIT_BLOB      ReasonFlags;
+    CERT_ALT_NAME_INFO  CRLIssuer;
+} CRL_DIST_POINT, *PCRL_DIST_POINT;
+
+#define CRL_REASON_UNUSED_FLAG                 0x80
+#define CRL_REASON_KEY_COMPROMISE_FLAG         0x40
+#define CRL_REASON_CA_COMPROMISE_FLAG          0x20
+#define CRL_REASON_AFFILIATION_CHANGED_FLAG    0x10
+#define CRL_REASON_SUPERSEDED_FLAG             0x08
+#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04
+#define CRL_REASON_CERTIFICATE_HOLD_FLAG       0x02
+
+typedef struct _CRL_DIST_POINTS_INFO {
+    DWORD           cDistPoint;
+    PCRL_DIST_POINT rgDistPoint;
+} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;
+
+#define CRL_DIST_POINT_ERR_INDEX_MASK  0x7f
+#define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
+#define GET_CRL_DIST_POINT_ERR_INDEX(x) \
+ (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)
+
+#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000)
+#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \
+ ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)
+
+typedef struct _CROSS_CERT_DIST_POINTS_INFO {
+    DWORD               dwSyncDeltaTime;
+    DWORD               cDistPoint;
+    PCERT_ALT_NAME_INFO rgDistPoint;
+} CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO;
+
+#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK  0xff
+#define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
+#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \
+ (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \
+ CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
+
+typedef struct _CERT_PAIR {
+    CERT_BLOB Forward;
+    CERT_BLOB Reverse;
+} CERT_PAIR, *PCERT_PAIR;
+
+typedef struct _CRL_ISSUING_DIST_POINT {
+    CRL_DIST_POINT_NAME DistPointName;
+    BOOL                fOnlyContainsUserCerts;
+    BOOL                fOnlyContainsCACerts;
+    CRYPT_BIT_BLOB      OnlySomeReasonFlags;
+    BOOL                fIndirectCRL;
+} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;
+
+typedef struct _CERT_GENERAL_SUBTREE {
+    CERT_ALT_NAME_ENTRY Base;
+    DWORD               dwMinimum;
+    BOOL                fMaximum;
+    DWORD               dwMaximum;
+} CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE;
+
+typedef struct _CERT_NAME_CONSTRAINTS_INFO {
+    DWORD                 cPermittedSubtree;
+    PCERT_GENERAL_SUBTREE rgPermittedSubtree;
+    DWORD                 cExcludedSubtree;
+    PCERT_GENERAL_SUBTREE rgExcludedSubtree;
+} CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO;
+
+#define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000)
+#define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT)
+
+typedef struct _CRYPT_ATTRIBUTE {
+    LPSTR            pszObjId;
+    DWORD            cValue;
+    PCRYPT_DATA_BLOB rgValue;
+} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
+
+typedef struct _CRYPT_ATTRIBUTES {
+    DWORD            cAttr;
+    PCRYPT_ATTRIBUTE rgAttr;
+} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
+
+typedef struct _CERT_REQUEST_INFO {
+    DWORD                dwVersion;
+    CERT_NAME_BLOB       Subject;
+    CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+    DWORD                cAttribute;
+    PCRYPT_ATTRIBUTE     rgAttribute;
+} CERT_REQUEST_INFO, *PCERT_REQUEST_INFO;
+
+typedef struct _CERT_KEYGEN_REQUEST_INFO {
+    DWORD                dwVersion;
+    CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+    LPWSTR               pwszChallengeString;
+} CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO;
+
+typedef struct _CERT_SIGNED_CONTENT_INFO {
+    CRYPT_DER_BLOB             ToBeSigned;
+    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+    CRYPT_BIT_BLOB             Signature;
+} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
+
+typedef struct _CRL_CONTEXT {
+    DWORD      dwCertEncodingType;
+    BYTE      *pbCrlEncoded;
+    DWORD      cbCrlEncoded;
+    PCRL_INFO  pCrlInfo;
+    HCERTSTORE hCertStore;
+} CRL_CONTEXT, *PCRL_CONTEXT;
+typedef const CRL_CONTEXT *PCCRL_CONTEXT;
+
+#define SORTED_CTL_EXT_FLAGS_OFFSET                (0*4)
+#define SORTED_CTL_EXT_COUNT_OFFSET                (1*4)
+#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET        (2*4)
+#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET          (3*4)
+
+#define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG    0x1
+
+typedef struct _CERT_DSS_PARAMETERS {
+    CRYPT_UINT_BLOB    p;
+    CRYPT_UINT_BLOB    q;
+    CRYPT_UINT_BLOB    g;
+} CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS;
+
+#define CERT_DSS_R_LEN            20
+#define CERT_DSS_S_LEN            20
+#define CERT_DSS_SIGNATURE_LEN    (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
+
+#define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN    (2 + 2*(2 + 20 +1))
+
+typedef struct _CERT_DH_PARAMETERS {
+    CRYPT_UINT_BLOB    p;
+    CRYPT_UINT_BLOB    g;
+} CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS;
+
+typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
+    CRYPT_BIT_BLOB     seed;
+    DWORD              pgenCounter;
+} CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS;
+
+typedef struct _CERT_X942_DH_PARAMETERS {
+    CRYPT_UINT_BLOB                    p;
+    CRYPT_UINT_BLOB                    g;
+    CRYPT_UINT_BLOB                    q;
+    CRYPT_UINT_BLOB                    j;
+    PCERT_X942_DH_VALIDATION_PARAMS    pValidationParams;
+} CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS;
+
+#define CRYPT_X942_COUNTER_BYTE_LENGTH        4
+#define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH     4
+#define CRYPT_X942_PUB_INFO_BYTE_LENGTH       (512/8)
+
+typedef struct _CRYPT_X942_OTHER_INFO {
+    LPSTR              pszContentEncryptionObjId;
+    BYTE               rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
+    BYTE               rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];
+    CRYPT_DATA_BLOB    PubInfo;
+} CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO;
+
+typedef struct _CRYPT_RC2_CBC_PARAMETERS {
+    DWORD    dwVersion;
+    BOOL     fIV;
+    BYTE     rgbIV[4];
+} CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS;
+
+#define CRYPT_RC2_40BIT_VERSION    160
+#define CRYPT_RC2_56BIT_VERSION    52
+#define CRYPT_RC2_64BIT_VERSION    120
+#define CRYPT_RC2_128BIT_VERSION   58
+
+typedef struct _CRYPT_SMIME_CAPABILITY {
+    LPSTR               pszObjId;
+    CRYPT_OBJID_BLOB    Parameters;
+} CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY;
+
+typedef struct _CRYPT_SMIME_CAPABILITIES {
+    DWORD                   cCapability;
+    PCRYPT_SMIME_CAPABILITY rgCapability;
+} CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES;
+
+typedef struct _VTableProvStruc {
+    DWORD    Version;
+#ifdef WINE_STRICT_PROTOTYPES
+    BOOL     (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*);
+    void     (WINAPI *FuncReturnhWnd)(HWND*);
+#else
+    FARPROC  FuncVerifyImage;
+    FARPROC  FuncReturnhWnd;
+#endif
+    DWORD    dwProvType;
+    BYTE    *pbContextInfo;
+    DWORD    cbContextInfo;
+    LPSTR    pszProvName;
+} VTableProvStruc, *PVTableProvStruc;
+
+typedef struct _CERT_PRIVATE_KEY_INFO {
+    DWORD                      Version;
+    CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+    CRYPT_DER_BLOB             PrivateKey;
+    PCRYPT_ATTRIBUTES          pAttributes;
+} CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO;
+
+typedef struct _CTL_USAGE {
+    DWORD  cUsageIdentifier;
+    LPSTR *rgpszUsageIdentifier;
+} CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
+
+typedef struct _CTL_ENTRY {
+    CRYPT_DATA_BLOB  SubjectIdentifier;
+    DWORD            cAttribute;
+    PCRYPT_ATTRIBUTE rgAttribute;
+} CTL_ENTRY, *PCTL_ENTRY;
+
+typedef struct _CTL_INFO {
+    DWORD                      dwVersion;
+    CTL_USAGE                  SubjectUsage;
+    CRYPT_DATA_BLOB            ListIdentifier;
+    CRYPT_INTEGER_BLOB         SequenceNumber;
+    FILETIME                   ThisUpdate;
+    FILETIME                   NextUpdate;
+    CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
+    DWORD                      cCTLEntry;
+    PCTL_ENTRY                 rgCTLEntry;
+    DWORD                      cExtension;
+    PCERT_EXTENSION            rgExtension;
+} CTL_INFO, *PCTL_INFO;
+
+typedef struct _CTL_CONTEXT {
+    DWORD      dwMsgAndCertEncodingType;
+    BYTE      *pbCtlEncoded;
+    DWORD      cbCtlEncoded;
+    PCTL_INFO  pCtlInfo;
+    HCERTSTORE hCertStore;
+    HCRYPTMSG  hCryptMsg;
+    BYTE      *pbCtlContext;
+    DWORD      cbCtlContext;
+} CTL_CONTEXT, *PCTL_CONTEXT;
+typedef const CTL_CONTEXT *PCCTL_CONTEXT;
+
+typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
+    LPSTR            pszTimeStampAlgorithm;
+    LPSTR            pszContentType;
+    CRYPT_OBJID_BLOB Content;
+    DWORD            cAttribute;
+    PCRYPT_ATTRIBUTE rgAttribute;
+} CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO;
+
+typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
+    LPWSTR pwszName;
+    LPWSTR pwszValue;
+} CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
+
+typedef struct _CMSG_SIGNER_INFO {
+    DWORD                      dwVersion;
+    CERT_NAME_BLOB             Issuer;
+    CRYPT_INTEGER_BLOB         SerialNumber;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+    CRYPT_DATA_BLOB            EncryptedHash;
+    CRYPT_ATTRIBUTES           AuthAttrs;
+    CRYPT_ATTRIBUTES           UnauthAttrs;
+} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
+
+#define CMSG_VERIFY_SIGNER_PUBKEY 1
+#define CMSG_VERIFY_SIGNER_CERT   2
+#define CMSG_VERIFY_SIGNER_CHAIN  3
+#define CMSG_VERIFY_SIGNER_NULL   4
+
+typedef struct _CERT_REVOCATION_CRL_INFO {
+    DWORD         cbSize;
+    PCCRL_CONTEXT pBaseCrlContext;
+    PCCRL_CONTEXT pDeltaCrlContext;
+    PCRL_ENTRY    pCrlEntry;
+    BOOL          fDeltaCrlEntry;
+} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
+
+typedef struct _CERT_REVOCATION_INFO {
+    DWORD                     cbSize;
+    DWORD                     dwRevocationResult;
+    LPCSTR                    pszRevocationOid;
+    LPVOID                    pvOidSpecificInfo;
+    BOOL                      fHasFreshnessTime;
+    DWORD                     dwFreshnessTime;
+    PCERT_REVOCATION_CRL_INFO pCrlInfo;
+} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
+
+typedef struct _CERT_REVOCATION_PARA {
+    DWORD                     cbSize;
+    PCCERT_CONTEXT            pIssuerCert;
+    DWORD                     cCertStore;
+    HCERTSTORE               *rgCertStore;
+    HCERTSTORE                hCrlStore;
+    LPFILETIME                pftTimeToUse;
+#ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
+    DWORD                     dwUrlRetrievalTimeout;
+    BOOL                      fCheckFreshnessTime;
+    DWORD                     dwFreshnessTime;
+    LPFILETIME                pftCurrentTime;
+    PCERT_REVOCATION_CRL_INFO pCrlInfo;
+#endif
+} CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA;
+
+#define CERT_CONTEXT_REVOCATION_TYPE 1
+#define CERT_VERIFY_REV_CHAIN_FLAG                0x00000001
+#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION   0x00000002
+#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004
+
+typedef struct _CTL_VERIFY_USAGE_PARA {
+    DWORD           cbSize;
+    CRYPT_DATA_BLOB ListIdentifier;
+    DWORD           cCtlStore;
+    HCERTSTORE     *rghCtlStore;
+    DWORD           cSignerStore;
+    HCERTSTORE     *rghSignerStore;
+} CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA;
+
+typedef struct _CTL_VERIFY_USAGE_STATUS {
+    DWORD           cbSize;
+    DWORD           dwError;
+    DWORD           dwFlags;
+    PCCTL_CONTEXT  *ppCtl;
+    DWORD           dwCtlEntryIndex;
+    PCCERT_CONTEXT *ppSigner;
+    DWORD           dwSignerIndex;
+} CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS;
+
+#define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1
+#define CERT_VERIFY_TRUSTED_SIGNERS_FLAG    0x2
+#define CERT_VERIFY_NO_TIME_CHECK_FLAG      0x4
+#define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG   0x8
+#define CERT_VERIFY_UPDATED_CTL_FLAG        0x1
+
+typedef struct _CERT_CHAIN {
+    DWORD               cCerts;
+    PCERT_BLOB          certs;
+    CRYPT_KEY_PROV_INFO keyLocatorInfo;
+} CERT_CHAIN, *PCERT_CHAIN;
+
+typedef struct _CERT_REVOCATION_STATUS {
+    DWORD cbSize;
+    DWORD dwIndex;
+    DWORD dwError;
+    DWORD dwReason;
+    BOOL  fHasFreshnessTime;
+    DWORD dwFreshnessTime;
+} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;
+
+typedef struct _CERT_TRUST_LIST_INFO {
+    DWORD         cbSize;
+    PCTL_ENTRY    pCtlEntry;
+    PCCTL_CONTEXT pCtlContext;
+} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
+
+#define CERT_TRUST_NO_ERROR                          0x00000000
+#define CERT_TRUST_IS_NOT_TIME_VALID                 0x00000001
+#define CERT_TRUST_IS_NOT_TIME_NESTED                0x00000002
+#define CERT_TRUST_IS_REVOKED                        0x00000004
+#define CERT_TRUST_IS_NOT_SIGNATURE_VALID            0x00000008
+#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE            0x00000010
+#define CERT_TRUST_IS_UNTRUSTED_ROOT                 0x00000020
+#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN         0x00000040
+#define CERT_TRUST_IS_CYCLIC                         0x00000080
+#define CERT_TRUST_INVALID_EXTENSION                 0x00000100
+#define CERT_TRUST_INVALID_POLICY_CONSTRAINTS        0x00000200
+#define CERT_TRUST_INVALID_BASIC_CONSTRAINTS         0x00000400
+#define CERT_TRUST_INVALID_NAME_CONSTRAINTS          0x00000800
+#define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000
+#define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   0x00002000
+#define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000
+#define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      0x00008000
+#define CERT_TRUST_IS_OFFLINE_REVOCATION             0x01000000
+#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          0x02000000
+#define CERT_TRUST_IS_EXPLICIT_DISTRUST              0x04000000
+#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    0x08000000
+
+#define CERT_TRUST_IS_PARTIAL_CHAIN                  0x00010000
+#define CERT_TRUST_CTL_IS_NOT_TIME_VALID             0x00020000
+#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        0x00040000
+#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        0x00080000
+
+#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER            0x00000001
+#define CERT_TRUST_HAS_KEY_MATCH_ISSUER              0x00000002
+#define CERT_TRUST_HAS_NAME_MATCH_ISSUER             0x00000004
+#define CERT_TRUST_IS_SELF_SIGNED                    0x00000008
+
+#define CERT_TRUST_HAS_PREFERRED_ISSUER              0x00000100
+#define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY         0x00000200
+#define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS        0x00000400
+#define CERT_TRUST_IS_PEER_TRUSTED                   0x00000800
+#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED         0x00001000
+
+#define CERT_TRUST_IS_COMPLEX_CHAIN                  0x00010000
+
+typedef struct _CERT_TRUST_STATUS {
+    DWORD dwErrorStatus;
+    DWORD dwInfoStatus;
+} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
+
+typedef struct _CERT_CHAIN_ELEMENT {
+    DWORD                 cbSize;
+    PCCERT_CONTEXT        pCertContext;
+    CERT_TRUST_STATUS     TrustStatus;
+    PCERT_REVOCATION_INFO pRevocationInfo;
+    PCERT_ENHKEY_USAGE    pIssuanceUsage;
+    PCERT_ENHKEY_USAGE    pApplicationUsage;
+    LPCWSTR               pwszExtendedErrorInfo;
+} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
+
+typedef struct _CERT_SIMPLE_CHAIN {
+    DWORD                 cbSize;
+    CERT_TRUST_STATUS     TrustStatus;
+    DWORD                 cElement;
+    PCERT_CHAIN_ELEMENT  *rgpElement;
+    PCERT_TRUST_LIST_INFO pTrustListInfo;
+    BOOL                  fHasRevocationFreshnessTime;
+    DWORD                 dwRevocationFreshnessTime;
+} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
+
+typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
+typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
+
+struct _CERT_CHAIN_CONTEXT {
+    DWORD                 cbSize;
+    CERT_TRUST_STATUS     TrustStatus;
+    DWORD                 cChain;
+    PCERT_SIMPLE_CHAIN   *rgpChain;
+    DWORD                 cLowerQualityChainContext;
+    PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
+    BOOL                  fHasRevocationFreshnessTime;
+    DWORD                 dwRevocationFreshnessTime;
+};
+
+typedef struct _CERT_CHAIN_POLICY_PARA {
+    DWORD cbSize;
+    DWORD dwFlags;
+    void *pvExtraPolicyPara;
+} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
+
+typedef struct _CERT_CHAIN_POLICY_STATUS {
+    DWORD cbSize;
+    DWORD dwError;
+    LONG  lChainIndex;
+    LONG  lElementIndex;
+    void *pvExtraPolicyStatus;
+} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
+
+#define CERT_CHAIN_POLICY_BASE              ((LPCSTR)1)
+#define CERT_CHAIN_POLICY_AUTHENTICODE      ((LPCSTR)2)
+#define CERT_CHAIN_POLICY_AUTHENTICODE_TS   ((LPCSTR)3)
+#define CERT_CHAIN_POLICY_SSL               ((LPCSTR)4)
+#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5)
+#define CERT_CHAIN_POLICY_NT_AUTH           ((LPCSTR)6)
+#define CERT_CHAIN_POLICY_MICROSOFT_ROOT    ((LPCSTR)7)
+
+#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG            0x00000001
+#define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG        0x00000002
+#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG           0x00000004
+#define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008
+
+#define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \
+ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG )
+
+#define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG                 0x00000010
+#define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG               0x00000020
+#define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG              0x00000040
+#define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG            0x00000080
+
+#define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG           0x00000100
+#define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG    0x00000200
+#define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG            0x00000400
+#define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG          0x00000800
+
+#define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \
+ CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG )
+
+#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG                 0x00001000
+#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000
+#define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG                    0x00004000
+#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG                    0x00008000
+#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG   0x00010000
+
+typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
+    DWORD             cbSize;
+    DWORD             dwRegPolicySettings;
+    PCMSG_SIGNER_INFO pSignerInfo;
+} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,
+ *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
+    DWORD cbSize;
+    BOOL  fCommercial;
+} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,
+ *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
+
+typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
+    DWORD cbSize;
+    DWORD dwRegPolicySettings;
+    BOOL  fCommercial;
+} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,
+ *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+typedef struct _HTTPSPolicyCallbackData {
+    union {
+        DWORD cbStruct;
+        DWORD cbSize;
+    } DUMMYUNIONNAME;
+    DWORD  dwAuthType;
+    DWORD  fdwChecks;
+    WCHAR *pwszServerName;
+} HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData,
+ SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+/* Values for HTTPSPolicyCallbackData's dwAuthType */
+#define AUTHTYPE_CLIENT 1
+#define AUTHTYPE_SERVER 2
+/* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */
+
+#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG         0x80000000
+#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
+
+#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
+
+#define USAGE_MATCH_TYPE_AND 0x00000000
+#define USAGE_MATCH_TYPE_OR  0x00000001
+
+typedef struct _CERT_USAGE_MATCH {
+    DWORD             dwType;
+    CERT_ENHKEY_USAGE Usage;
+} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
+
+typedef struct _CTL_USAGE_MATCH {
+    DWORD     dwType;
+    CTL_USAGE Usage;
+} CTL_USAGE_MATCH, *PCTL_USAGE_MATCH;
+
+#define CERT_CHAIN_REVOCATION_CHECK_END_CERT           0x10000000
+#define CERT_CHAIN_REVOCATION_CHECK_CHAIN              0x20000000
+#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
+#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY         0x80000000
+
+#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT     0x08000000
+
+#define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING     0x00000040
+#define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS       0x00000080
+#define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE       0x00000100
+#define CERT_CHAIN_TIMESTAMP_TIME                      0x00000200
+
+typedef struct _CERT_CHAIN_PARA {
+    DWORD            cbSize;
+    CERT_USAGE_MATCH RequestedUsage;
+#ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
+    CERT_USAGE_MATCH RequestedIssuancePolicy;
+    DWORD            dwUrlRetrievalTimeout;
+    BOOL             fCheckRevocationFreshnessTime;
+    DWORD            dwRevocationFreshnessTime;
+    LPFILETIME       pftCacheResync;
+#endif
+} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
+
+typedef struct _CERT_SYSTEM_STORE_INFO {
+    DWORD cbSize;
+} CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;
+
+typedef struct _CERT_PHYSICAL_STORE_INFO {
+    DWORD           cbSize;
+    LPSTR           pszOpenStoreProvider;
+    DWORD           dwOpenEncodingType;
+    DWORD           dwOpenFlags;
+    CRYPT_DATA_BLOB OpenParameters;
+    DWORD           dwFlags;
+    DWORD           dwPriority;
+} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;
+
+typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
+    union {
+        HKEY  hKeyBase;
+        VOID *pvBase;
+    } DUMMYUNIONNAME;
+    union {
+        void   *pvSystemStore;
+        LPCSTR  pszSystemStore;
+        LPCWSTR pwszSystemStore;
+    } DUMMYUNIONNAME2;
+} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
+
+typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
+ LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
+
+typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,
+ DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved,
+ void *pvArg);
+
+typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,
+ DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo,
+ void *pvReserved, void *pvArg);
+
+/* Encode/decode object */
+typedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
+typedef VOID   (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
+
+typedef struct _CRYPT_ENCODE_PARA {
+    DWORD           cbSize;
+    PFN_CRYPT_ALLOC pfnAlloc;
+    PFN_CRYPT_FREE  pfnFree;
+} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;
+
+typedef struct _CRYPT_DECODE_PARA {
+    DWORD           cbSize;
+    PFN_CRYPT_ALLOC pfnAlloc;
+    PFN_CRYPT_FREE  pfnFree;
+} CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA;
+
+typedef struct _CERT_STORE_PROV_INFO {
+    DWORD             cbSize;
+    DWORD             cStoreProvFunc;
+    void            **rgpvStoreProvFunc;
+    HCERTSTOREPROV    hStoreProv;
+    DWORD             dwStoreProvFlags;
+    HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
+} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
+
+typedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
+ LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore,
+ PCERT_STORE_PROV_INFO pStoreProvInfo);
+
+typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,
+ DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,
+ PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags,
+ PCCERT_CONTEXT *ppProvCertContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,
+ PCCERT_CONTEXT pCertContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags,
+ PCCRL_CONTEXT *ppProvCrlContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,
+ PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags,
+ PCCTL_CONTEXT *ppProvCtlContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,
+ PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(
+ HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,
+ DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
+
+typedef struct _CERT_STORE_PROV_FIND_INFO {
+    DWORD       cbSize;
+    DWORD       dwMsgAndCertEncodingType;
+    DWORD       dwFindFlags;
+    DWORD       dwFindType;
+    const void *pvFindPara;
+} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
+typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,
+ *PCCERT_STORE_PROV_FIND_INFO;
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,
+ PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext,
+ DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext,
+ void *pvStoreProvFindInfo, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
+ DWORD dwFlags, void *pvData, DWORD *pcbData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext,
+ DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(
+ HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext,
+ void *pvStoreProvFindInfo, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
+ DWORD dwFlags, void *pvData, DWORD *pcbData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,
+ PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
+ DWORD dwFlags, void *pvData);
+
+typedef struct _CERT_CREATE_CONTEXT_PARA {
+    DWORD          cbSize;
+    PFN_CRYPT_FREE pfnFree;
+    void          *pvFree;
+} CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA;
+
+typedef struct _CRYPT_OID_FUNC_ENTRY {
+    LPCSTR pszOID;
+    void  *pvFuncAddr;
+} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;
+
+typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,
+ LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[],
+ LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[],
+ const DWORD rgcbValueData[], void *pvArg);
+
+#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff
+
+typedef struct _CRYPT_OID_INFO {
+    DWORD   cbSize;
+    LPCSTR  pszOID;
+    LPCWSTR pwszName;
+    DWORD   dwGroupId;
+    union {
+        DWORD  dwValue;
+        ALG_ID Algid;
+        DWORD  dwLength;
+    } DUMMYUNIONNAME;
+    CRYPT_DATA_BLOB ExtraInfo;
+} CRYPT_OID_INFO, *PCRYPT_OID_INFO;
+typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;
+
+typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,
+ void *pvArg);
+
+typedef struct _CRYPT_SIGN_MESSAGE_PARA {
+    DWORD                      cbSize;
+    DWORD                      dwMsgEncodingType;
+    PCCERT_CONTEXT             pSigningCert;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    void *                     pvHashAuxInfo;
+    DWORD                      cMsgCert;
+    PCCERT_CONTEXT            *rgpMsgCert;
+    DWORD                      cMsgCrl;
+    PCCRL_CONTEXT             *rgpMsgCrl;
+    DWORD                      cAuthAttr;
+    PCRYPT_ATTRIBUTE           rgAuthAttr;
+    DWORD                      cUnauthAttr;
+    PCRYPT_ATTRIBUTE           rgUnauthAttr;
+    DWORD                      dwFlags;
+    DWORD                      dwInnerContentType;
+#ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
+    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+    void *                     pvHashEncryptionAuxInfo;
+#endif
+} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;
+
+#define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG         0x00000001
+#define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002
+#define CRYPT_MESSAGE_KEYID_SIGNER_FLAG             0x00000004
+#define CRYPT_MESSAGE_SILENT_KEYSET_FLAG            0x00000008
+
+typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg,
+ DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);
+
+typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
+    DWORD                            cbSize;
+    DWORD                            dwMsgAndCertEncodingType;
+    HCRYPTPROV_LEGACY                hCryptProv;
+    PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
+    void *                           pvGetArg;
+} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;
+
+typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
+    DWORD                      cbSize;
+    DWORD                      dwMsgEncodingType;
+    HCRYPTPROV_LEGACY          hCryptProv;
+    CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+    void *                     pvEncryptionAuxInfo;
+    DWORD                      dwFlags;
+    DWORD                      dwInnerContentType;
+} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
+
+#define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004
+
+typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
+    DWORD       cbSize;
+    DWORD       dwMsgAndCertEncodingType;
+    DWORD       cCertStore;
+    HCERTSTORE *rghCertStore;
+#ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
+    DWORD       dwFlags;
+#endif
+} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;
+
+typedef struct _CRYPT_HASH_MESSAGE_PARA {
+    DWORD                      cbSize;
+    DWORD                      dwMsgEncodingType;
+    HCRYPTPROV_LEGACY          hCryptProv;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    void *                     pvHashAuxInfo;
+} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
+
+typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
+    DWORD                      cbSize;
+    DWORD                      dwMsgAndCertEncodingType;
+    HCRYPTPROV                 hCryptProv;
+    DWORD                      dwKeySpec;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    void *                     pvHashAuxInfo;
+} CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA;
+
+typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
+    DWORD      cbSize;
+    DWORD      dwMsgEncodingType;
+    HCRYPTPROV_LEGACY hCryptProv;
+} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;
+
+typedef struct _CRYPT_URL_ARRAY {
+    DWORD   cUrl;
+    LPWSTR *rgwszUrl;
+} CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY;
+
+typedef struct _CRYPT_URL_INFO {
+    DWORD  cbSize;
+    DWORD  dwSyncDeltaTime;
+    DWORD  cGroup;
+    DWORD *rgcGroupEntry;
+} CRYPT_URL_INFO, *PCRYPT_URL_INFO;
+
+#define URL_OID_CERTIFICATE_ISSUER                  ((LPCSTR)1)
+#define URL_OID_CERTIFICATE_CRL_DIST_POINT          ((LPCSTR)2)
+#define URL_OID_CTL_ISSUER                          ((LPCSTR)3)
+#define URL_OID_CTL_NEXT_UPDATE                     ((LPCSTR)4)
+#define URL_OID_CRL_ISSUER                          ((LPCSTR)5)
+#define URL_OID_CERTIFICATE_FRESHEST_CRL            ((LPCSTR)6)
+#define URL_OID_CRL_FRESHEST_CRL                    ((LPCSTR)7)
+#define URL_OID_CROSS_CERT_DIST_POINT               ((LPCSTR)8)
+#define URL_OID_CERTIFICATE_OCSP                    ((LPCSTR)9)
+#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10)
+#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11)
+#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS      ((LPCSTR)12)
+
+#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
+
+typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC;
+
+typedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,
+ LPVOID pvParam);
+
+#define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
+#define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL     ((LPCSTR)2)
+
+typedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(
+ void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid,
+ void *pvObject);
+
+typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION
+{
+    PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
+    void                                     *pvCompletion;
+} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
+
+typedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(
+ HCRYPTASYNC hAsyncRetrieve);
+
+typedef struct _CRYPT_BLOB_ARRAY
+{
+    DWORD            cBlob;
+    PCRYPT_DATA_BLOB rgBlob;
+} CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY;
+
+typedef struct _CRYPT_CREDENTIALS {
+    DWORD  cbSize;
+    LPCSTR pszCredentialsOid;
+    LPVOID pvCredentials;
+} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;
+
+#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)
+#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)
+#define CREDENTIAL_OID_PASSWORD_CREDENTIALS \
+ WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_)
+
+typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
+    DWORD cbSize;
+    LPSTR pszUsername;
+    LPSTR pszPassword;
+} CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA;
+
+typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
+    DWORD  cbSize;
+    LPWSTR pszUsername;
+    LPWSTR pszPassword;
+} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;
+#define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS)
+#define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS)
+
+typedef struct _CRYPT_RETRIEVE_AUX_INFO {
+    DWORD     cbSize;
+    FILETIME *pLastSyncTime;
+    DWORD     dwMaxUrlRetrievalByteCount;
+} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;
+
+typedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,
+ PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext);
+
+#define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \
+ "SchemeDllRetrieveEncodedObject"
+#define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \
+ "SchemeDllRetrieveEncodedObjectW"
+/* The signature of SchemeDllRetrieveEncodedObjectW is:
+BOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl,
+ LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout,
+ PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject,
+ void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve,
+ PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+ */
+
+#define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
+/* The signature of ContextDllCreateObjectContext is:
+BOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid,
+ DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt);
+ */
+
+#define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
+#define CONTEXT_OID_CRL         ((LPCSTR)2)
+#define CONTEXT_OID_CTL         ((LPCSTR)3)
+#define CONTEXT_OID_PKCS7       ((LPCSTR)4)
+#define CONTEXT_OID_CAPI2_ANY   ((LPCSTR)5)
+
+#define CRYPT_RETRIEVE_MULTIPLE_OBJECTS      0x00000001
+#define CRYPT_CACHE_ONLY_RETRIEVAL           0x00000002
+#define CRYPT_WIRE_ONLY_RETRIEVAL            0x00000004
+#define CRYPT_DONT_CACHE_RESULT              0x00000008
+#define CRYPT_ASYNC_RETRIEVAL                0x00000010
+#define CRYPT_STICKY_CACHE_RETRIEVAL         0x00001000
+#define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000
+#define CRYPT_OFFLINE_CHECK_RETRIEVAL        0x00004000
+#define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE    0x00008000
+#define CRYPT_LDAP_SIGN_RETRIEVAL            0x00010000
+#define CRYPT_NO_AUTH_RETRIEVAL              0x00020000
+#define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL  0x00040000
+#define CRYPT_AIA_RETRIEVAL                  0x00080000
+
+#define CRYPT_VERIFY_CONTEXT_SIGNATURE      0x00000020
+#define CRYPT_VERIFY_DATA_HASH              0x00000040
+#define CRYPT_KEEP_TIME_VALID               0x00000080
+#define CRYPT_DONT_VERIFY_SIGNATURE         0x00000100
+#define CRYPT_DONT_CHECK_TIME_VALIDITY      0x00000200
+#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400
+#define CRYPT_ACCUMULATIVE_TIMEOUT          0x00000800
+
+typedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg);
+
+typedef struct _CERT_CRL_CONTEXT_PAIR
+{
+    PCCERT_CONTEXT pCertContext;
+    PCCRL_CONTEXT  pCrlContext;
+} CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR;
+typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
+
+#define TIME_VALID_OID_GET_OBJECT_FUNC   "TimeValidDllGetObject"
+
+#define TIME_VALID_OID_GET_CTL                    ((LPCSTR)1)
+#define TIME_VALID_OID_GET_CRL                    ((LPCSTR)2)
+#define TIME_VALID_OID_GET_CRL_FROM_CERT          ((LPCSTR)3)
+#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
+#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL  ((LPCSTR)5)
+
+#define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
+
+#define TIME_VALID_OID_FLUSH_CTL                    ((LPCSTR)1)
+#define TIME_VALID_OID_FLUSH_CRL                    ((LPCSTR)2)
+#define TIME_VALID_OID_FLUSH_CRL_FROM_CERT          ((LPCSTR)3)
+#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
+#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL  ((LPCSTR)5)
+
+/* OID group IDs */
+#define CRYPT_HASH_ALG_OID_GROUP_ID     1
+#define CRYPT_ENCRYPT_ALG_OID_GROUP_ID  2
+#define CRYPT_PUBKEY_ALG_OID_GROUP_ID   3
+#define CRYPT_SIGN_ALG_OID_GROUP_ID     4
+#define CRYPT_RDN_ATTR_OID_GROUP_ID     5
+#define CRYPT_EXT_OR_ATTR_OID_GROUP_ID  6
+#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
+#define CRYPT_POLICY_OID_GROUP_ID       8
+#define CRYPT_TEMPLATE_OID_GROUP_ID     9
+#define CRYPT_LAST_OID_GROUP_ID         9
+
+#define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
+#define CRYPT_LAST_ALG_OID_GROUP_ID  CRYPT_SIGN_ALG_OID_GROUP_ID
+
+#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG  0x1
+#define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
+#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG    0x4
+
+#define CRYPT_OID_INFO_OID_KEY   1
+#define CRYPT_OID_INFO_NAME_KEY  2
+#define CRYPT_OID_INFO_ALGID_KEY 3
+#define CRYPT_OID_INFO_SIGN_KEY  4
+
+/* Algorithm IDs */
+
+#define GET_ALG_CLASS(x)                (x & (7 << 13))
+#define GET_ALG_TYPE(x)                 (x & (15 << 9))
+#define GET_ALG_SID(x)                  (x & (511))
+
+/* Algorithm Classes */
+#define ALG_CLASS_ANY                   (0)
+#define ALG_CLASS_SIGNATURE             (1 << 13)
+#define ALG_CLASS_MSG_ENCRYPT           (2 << 13)
+#define ALG_CLASS_DATA_ENCRYPT          (3 << 13)
+#define ALG_CLASS_HASH                  (4 << 13)
+#define ALG_CLASS_KEY_EXCHANGE          (5 << 13)
+#define ALG_CLASS_ALL                   (7 << 13)
+/* Algorithm types */
+#define ALG_TYPE_ANY                    (0)
+#define ALG_TYPE_DSS                    (1 << 9)
+#define ALG_TYPE_RSA                    (2 << 9)
+#define ALG_TYPE_BLOCK                  (3 << 9)
+#define ALG_TYPE_STREAM                 (4 << 9)
+#define ALG_TYPE_DH                     (5 << 9)
+#define ALG_TYPE_SECURECHANNEL          (6 << 9)
+
+/* SIDs */
+#define ALG_SID_ANY                     (0)
+/* RSA SIDs */
+#define ALG_SID_RSA_ANY                 0
+#define ALG_SID_RSA_PKCS                1
+#define ALG_SID_RSA_MSATWORK            2
+#define ALG_SID_RSA_ENTRUST             3
+#define ALG_SID_RSA_PGP                 4
+/* DSS SIDs */
+#define ALG_SID_DSS_ANY                 0
+#define ALG_SID_DSS_PKCS                1
+#define ALG_SID_DSS_DMS                 2
+
+/* DES SIDs */
+#define ALG_SID_DES                     1
+#define ALG_SID_3DES                    3
+#define ALG_SID_DESX                    4
+#define ALG_SID_IDEA                    5
+#define ALG_SID_CAST                    6
+#define ALG_SID_SAFERSK64               7
+#define ALG_SID_SAFERSK128              8
+#define ALG_SID_3DES_112                9
+#define ALG_SID_CYLINK_MEK             12
+#define ALG_SID_RC5                    13
+#define ALG_SID_AES_128                14
+#define ALG_SID_AES_192                15
+#define ALG_SID_AES_256                16
+#define ALG_SID_AES                    17
+/* Diffie-Hellmans SIDs */
+#define ALG_SID_DH_SANDF                1
+#define ALG_SID_DH_EPHEM                2
+#define ALG_SID_AGREED_KEY_ANY          3
+#define ALG_SID_KEA                     4
+#define ALG_SID_ECDH                    5
+/* RC2 SIDs */
+#define ALG_SID_RC4                     1
+#define ALG_SID_RC2                     2
+#define ALG_SID_SEAL                    2
+/* Hash SIDs */
+#define ALG_SID_MD2                     1
+#define ALG_SID_MD4                     2
+#define ALG_SID_MD5                     3
+#define ALG_SID_SHA                     4
+#define ALG_SID_SHA1                    ALG_SID_SHA
+#define ALG_SID_MAC                     5
+#define ALG_SID_RIPEMD                  6
+#define ALG_SID_RIPEMD160               7
+#define ALG_SID_SSL3SHAMD5              8
+#define ALG_SID_HMAC                    9
+#define ALG_SID_TLS1PRF                10
+#define ALG_SID_HASH_REPLACE_OWF       11
+#define ALG_SID_SHA_256                12
+#define ALG_SID_SHA_384                13
+#define ALG_SID_SHA_512                14
+/* SCHANNEL SIDs */
+#define ALG_SID_SSL3_MASTER             1
+#define ALG_SID_SCHANNEL_MASTER_HASH    2
+#define ALG_SID_SCHANNEL_MAC_KEY        3
+#define ALG_SID_PCT1_MASTER             4
+#define ALG_SID_SSL2_MASTER             5
+#define ALG_SID_TLS1_MASTER             6
+#define ALG_SID_SCHANNEL_ENC_KEY        7
+#define ALG_SID_EXAMPLE                80
+
+/* Algorithm Definitions */
+#define CALG_MD2                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD2)
+#define CALG_MD4                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD4)
+#define CALG_MD5                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD5)
+#define CALG_SHA                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA)
+#define CALG_SHA1 CALG_SHA
+#define CALG_MAC                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MAC)
+#define CALG_SSL3_SHAMD5          (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SSL3SHAMD5)
+#define CALG_HMAC                 (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_HMAC)
+#define CALG_TLS1PRF              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_TLS1PRF)
+#define CALG_HASH_REPLACE_OWF     (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_HASH_REPLACE_OWF)
+#define CALG_SHA_256              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_256)
+#define CALG_SHA_384              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_384)
+#define CALG_SHA_512              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_512)
+#define CALG_RSA_SIGN             (ALG_CLASS_SIGNATURE    | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)
+#define CALG_DSS_SIGN             (ALG_CLASS_SIGNATURE    | ALG_TYPE_DSS           | ALG_SID_DSS_ANY)
+#define CALG_NO_SIGN              (ALG_CLASS_SIGNATURE    | ALG_TYPE_ANY           | ALG_SID_ANY)
+#define CALG_DH_SF                (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_DH_SANDF)
+#define CALG_DH_EPHEM             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_DH_EPHEM)
+#define CALG_ECDH                 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_ECDH)
+#define CALG_RSA_KEYX             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)
+#define CALG_DES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_DES)
+#define CALG_RC2                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_RC2)
+#define CALG_3DES                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_3DES)
+#define CALG_3DES_112             (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_3DES_112)
+#define CALG_AES_128              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_128)
+#define CALG_AES_192              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_192)
+#define CALG_AES_256              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_256)
+#define CALG_AES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES)
+#define CALG_RC4                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_RC4)
+#define CALG_SEAL                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_SEAL)
+#define CALG_RC5                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_RC5)
+#define CALG_SSL3_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)
+#define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)
+#define CALG_SCHANNEL_MAC_KEY     (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
+#define CALG_SCHANNEL_ENC_KEY     (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
+#define CALG_PCT1_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)
+#define CALG_SSL2_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)
+#define CALG_TLS1_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)
+
+
+/* Protocol Flags */
+#define CRYPT_FLAG_PCT1    0x0001
+#define CRYPT_FLAG_SSL2    0x0002
+#define CRYPT_FLAG_SSL3    0x0004
+#define CRYPT_FLAG_TLS1    0x0008
+#define CRYPT_FLAG_IPSEC   0x0010
+#define CRYPT_FLAG_SIGNING 0x0020
+
+/* Provider names */
+#define MS_DEF_PROV_A                            "Microsoft Base Cryptographic Provider v1.0"
+#if defined(__GNUC__)
+# define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
+	'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_PROV_W      L"Microsoft Base Cryptographic Provider v1.0"
+#else
+static const WCHAR MS_DEF_PROV_W[] =             { 'M','i','c','r','o','s','o','f','t',' ',
+	'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
+	'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
+#endif
+#define MS_DEF_PROV                              WINELIB_NAME_AW(MS_DEF_PROV_)
+
+#define MS_ENHANCED_PROV_A                       "Microsoft Enhanced Cryptographic Provider v1.0"
+#if defined(__GNUC__)
+# define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
+	'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
+#elif defined(_MSC_VER)
+# define MS_ENHANCED_PROV_W     L"Microsoft Enhanced Cryptographic Provider v1.0"
+#else
+static const WCHAR MS_ENHANCED_PROV_W[] =        { 'M','i','c','r','o','s','o','f','t',' ',
+	'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
+	'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
+#endif
+#define MS_ENHANCED_PROV                         WINELIB_NAME_AW(MS_ENHANCED_PROV_)
+
+#define MS_STRONG_PROV_A                         "Microsoft Strong Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
+	'P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_STRONG_PROV_W     L"Microsoft Strong Cryptographic Provider"
+#else
+static const WCHAR MS_STRONG_PROV_W[] =          { 'M','i','c','r','o','s','o','f','t',' ',
+	'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
+	'P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_STRONG_PROV                           WINELIB_NAME_AW(MS_STRONG_PROV_)
+
+#define MS_DEF_RSA_SIG_PROV_A                    "Microsoft RSA Signature Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_RSA_SIG_PROV_W      L"Microsoft RSA Signature Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_RSA_SIG_PROV_W[] =     { 'M','i','c','r','o','s','o','f','t',' ',
+	'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_RSA_SIG_PROV                      WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)
+
+#define MS_DEF_RSA_SCHANNEL_PROV_A               "Microsoft RSA SChannel Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_RSA_SCHANNEL_PROV_W     L"Microsoft RSA SChannel Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+	'R','S','A',' ','S','C','h','a','n','n','e','l',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_RSA_SCHANNEL_PROV                 WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)
+
+#define MS_DEF_DSS_PROV_A                        "Microsoft Base DSS Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'B','a','s','e',' ','D','S','S',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_DSS_PROV_W     L"Microsoft Base DSS Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_DSS_PROV_W[] =         { 'M','i','c','r','o','s','o','f','t',' ',
+	'B','a','s','e',' ','D','S','S',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_DSS_PROV                          WINELIB_NAME_AW(MS_DEF_DSS_PROV_)
+
+#define MS_DEF_DSS_DH_PROV_A                     "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \
+	'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_DSS_DH_PROV_W     L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',
+	'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',
+	'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_DSS_DH_PROV                       WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)
+
+#define MS_ENH_DSS_DH_PROV_A                     "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \
+	'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_ENH_DSS_DH_PROV_W     L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
+#else
+static const WCHAR MS_ENH_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',
+	'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',
+	'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_ENH_DSS_DH_PROV                       WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)
+
+#define MS_DEF_DH_SCHANNEL_PROV_A                "Microsoft DH SChannel Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'D','H',' ','S','C','h','a','n','n','e','l',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_DH_SCHANNEL_PROV_W     L"Microsoft DH SChannel Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+	'D','H',' ','S','C','h','a','n','n','e','l',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_DH_SCHANNEL_PROV                  WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)
+
+#define MS_SCARD_PROV_A                          "Microsoft Base Smart Card Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_SCARD_PROV_W     L"Microsoft Base Smart Card Cryptographic Provider"
+#else
+static const WCHAR MS_SCARD_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',
+	'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_SCARD_PROV                            WINELIB_NAME_AW(MS_SCARD_PROV_)
+
+#define MS_ENH_RSA_AES_PROV_A                          "Microsoft Enhanced RSA and AES Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_ENH_RSA_AES_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+	'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_ENH_RSA_AES_PROV_W     L"Microsoft Enhanced RSA and AES Cryptographic Provider"
+#else
+static const WCHAR MS_ENH_RSA_AES_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',
+	'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
+	'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_ENH_RSA_AES_PROV                            WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_)
+
+#define MS_ENH_RSA_AES_PROV_XP_A    "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
+#if defined(__GNUC__)
+# define MS_ENH_RSA_AES_PROV_XP_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+        'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\
+        'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',\
+        '(','P','r','o','t','o','t','y','p','e',')',0 }
+#elif defined(_MSC_VER)
+# define MS_ENH_RSA_AES_PROV_XP_W   L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
+#else
+static const WCHAR MS_ENH_RSA_AES_PROV_XP_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+        'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
+        'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',
+        '(','P','r','o','t','o','t','y','p','e',')',0 };
+#endif
+#define MS_ENH_RSA_AES_PROV_XP                   WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_XP_)
+
+/* Key Specs*/
+#define AT_KEYEXCHANGE          1
+#define AT_SIGNATURE            2
+
+/* Provider Types */
+#define PROV_RSA_FULL             1
+#define PROV_RSA_SIG              2
+#define PROV_DSS                  3
+#define PROV_FORTEZZA             4
+#define PROV_MS_EXCHANGE          5
+#define PROV_SSL                  6
+#define PROV_RSA_SCHANNEL         12
+#define PROV_DSS_DH               13
+#define PROV_EC_ECDSA_SIG         14
+#define PROV_EC_ECNRA_SIG         15
+#define PROV_EC_ECDSA_FULL        16
+#define PROV_EC_ECNRA_FULL        17
+#define PROV_DH_SCHANNEL          18
+#define PROV_SPYRUS_LYNKS         20
+#define PROV_RNG                  21
+#define PROV_INTEL_SEC            22
+#define PROV_REPLACE_OWF          23
+#define PROV_RSA_AES              24
+
+/* FLAGS Section */
+
+#define CRYPT_FIRST             1
+#define CRYPT_NEXT              2
+
+#define CRYPT_IMPL_HARDWARE     1
+#define CRYPT_IMPL_SOFTWARE     2
+#define CRYPT_IMPL_MIXED        3
+#define CRYPT_IMPL_UNKNOWN      4
+
+/* CryptAcquireContext */
+#define CRYPT_VERIFYCONTEXT       0xF0000000
+#define CRYPT_NEWKEYSET           0x00000008
+#define CRYPT_DELETEKEYSET        0x00000010
+#define CRYPT_MACHINE_KEYSET      0x00000020
+#define CRYPT_SILENT              0x00000040
+
+/* Crypt{Get|Set}Provider */
+#define CRYPT_MACHINE_DEFAULT     0x00000001
+#define CRYPT_USER_DEFAULT        0x00000002
+#define CRYPT_DELETE_DEFAULT      0x00000004
+
+/* Crypt{Get/Set}ProvParam */
+#define PP_CLIENT_HWND          1
+#define PP_ENUMALGS             1
+#define PP_ENUMCONTAINERS       2
+#define PP_IMPTYPE              3
+#define PP_NAME                 4
+#define PP_VERSION              5
+#define PP_CONTAINER            6
+#define PP_CHANGE_PASSWORD      7
+#define PP_KEYSET_SEC_DESCR     8
+#define PP_KEY_TYPE_SUBTYPE     10
+#define PP_CONTEXT_INFO         11
+#define PP_KEYEXCHANGE_KEYSIZE  12
+#define PP_SIGNATURE_KEYSIZE    13
+#define PP_KEYEXCHANGE_ALG      14
+#define PP_SIGNATURE_ALG        15
+#define PP_PROVTYPE             16
+#define PP_KEYSTORAGE           17
+#define PP_SYM_KEYSIZE          19
+#define PP_SESSION_KEYSIZE      20
+#define PP_UI_PROMPT            21
+#define PP_ENUMALGS_EX          22
+#define PP_DELETEKEY            24
+#define PP_ENUMMANDROOTS        25
+#define PP_ENUMELECTROOTS       26
+#define PP_KEYSET_TYPE          27
+#define PP_ADMIN_PIN            31
+#define PP_KEYEXCHANGE_PIN      32
+#define PP_SIGNATURE_PIN        33
+#define PP_SIG_KEYSIZE_INC      34
+#define PP_KEYX_KEYSIZE_INC     35
+#define PP_UNIQUE_CONTAINER     36
+#define PP_SGC_INFO             37
+#define PP_USE_HARDWARE_RNG     38
+#define PP_KEYSPEC              39
+#define PP_ENUMEX_SIGNING_PROT  40
+#define PP_CRYPT_COUNT_KEY_USE  41
+#define PP_USER_CERTSTORE       42
+#define PP_SMARTCARD_READER     43
+#define PP_SMARTCARD_GUID       45
+#define PP_ROOT_CERTSTORE       46
+
+/* Values returned by CryptGetProvParam of PP_KEYSTORAGE */
+#define CRYPT_SEC_DESCR         0x00000001
+#define CRYPT_PSTORE            0x00000002
+#define CRYPT_UI_PROMPT         0x00000004
+
+/* Crypt{Get/Set}KeyParam */
+#define KP_IV                   1
+#define KP_SALT                 2
+#define KP_PADDING              3
+#define KP_MODE                 4
+#define KP_MODE_BITS            5
+#define KP_PERMISSIONS          6
+#define KP_ALGID                7
+#define KP_BLOCKLEN             8
+#define KP_KEYLEN               9
+#define KP_SALT_EX              10
+#define KP_P                    11
+#define KP_G                    12
+#define KP_Q                    13
+#define KP_X                    14
+#define KP_Y                    15
+#define KP_RA                   16
+#define KP_RB                   17
+#define KP_INFO                 18
+#define KP_EFFECTIVE_KEYLEN     19
+#define KP_SCHANNEL_ALG         20
+#define KP_CLIENT_RANDOM        21
+#define KP_SERVER_RANDOM        22
+#define KP_RP                   23
+#define KP_PRECOMP_MD5          24
+#define KP_PRECOMP_SHA          25
+#define KP_CERTIFICATE          26
+#define KP_CLEAR_KEY            27
+#define KP_PUB_EX_LEN           28
+#define KP_PUB_EX_VAL           29
+#define KP_KEYVAL               30
+#define KP_ADMIN_PIN            31
+#define KP_KEYEXCHANGE_PIN      32
+#define KP_SIGNATURE_PIN        33
+#define KP_PREHASH              34
+#define KP_ROUNDS               35
+#define KP_OAEP_PARAMS          36
+#define KP_CMS_KEY_INFO         37
+#define KP_CMS_DH_KEY_INFO      38
+#define KP_PUB_PARAMS           39
+#define KP_VERIFY_PARAMS        40
+#define KP_HIGHEST_VERSION      41
+#define KP_GET_USE_COUNT        42
+
+/* Values for KP_PADDING */
+#define PKCS5_PADDING  1
+#define RANDOM_PADDING 2
+#define ZERO_PADDING   3
+
+/* CryptSignHash/CryptVerifySignature */
+#define CRYPT_NOHASHOID         0x00000001
+#define CRYPT_TYPE2_FORMAT      0x00000002
+#define CRYPT_X931_FORMAT       0x00000004
+
+/* Crypt{Get,Set}HashParam */
+#define HP_ALGID                0x0001
+#define HP_HASHVAL              0x0002
+#define HP_HASHSIZE             0x0004
+#define HP_HMAC_INFO            0x0005
+#define HP_TLS1PRF_LABEL        0x0006
+#define HP_TLS1PRF_SEED         0x0007
+
+/* Crypt{Get,Set}KeyParam */
+#define CRYPT_MODE_CBC          1
+#define CRYPT_MODE_ECB          2
+#define CRYPT_MODE_OFB          3
+#define CRYPT_MODE_CFB          4
+
+#define CRYPT_ENCRYPT           0x0001 
+#define CRYPT_DECRYPT           0x0002
+#define CRYPT_EXPORT            0x0004
+#define CRYPT_READ              0x0008
+#define CRYPT_WRITE             0x0010
+#define CRYPT_MAC               0x0020
+#define CRYPT_EXPORT_KEY        0x0040
+#define CRYPT_IMPORT_KEY        0x0080
+#define CRYPT_ARCHIVE           0x0100
+
+/* Crypt*Key */
+#define CRYPT_EXPORTABLE        0x00000001
+#define CRYPT_USER_PROTECTED    0x00000002
+#define CRYPT_CREATE_SALT       0x00000004
+#define CRYPT_UPDATE_KEY        0x00000008
+#define CRYPT_NO_SALT           0x00000010
+#define CRYPT_PREGEN            0x00000040
+#define CRYPT_SERVER            0x00000400
+#define CRYPT_ARCHIVABLE        0x00004000
+
+/* CryptExportKey */
+#define CRYPT_SSL2_FALLBACK     0x00000002
+#define CRYPT_DESTROYKEY        0x00000004
+#define CRYPT_OAEP              0x00000040
+
+/* CryptHashSessionKey */
+#define CRYPT_LITTLE_ENDIAN     0x00000001
+
+/* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */
+#define CRYPTPROTECT_PROMPT_ON_PROTECT    0x0001
+#define CRYPTPROTECT_PROMPT_ON_UNPROTECT  0x0002
+/* Crypt{Protect,Unprotect}Data flags */
+#define CRYPTPROTECT_UI_FORBIDDEN       0x0001
+#define CRYPTPROTECT_LOCAL_MACHINE      0x0004
+#define CRYPTPROTECT_AUDIT              0x0010
+#define CRYPTPROTECT_VERIFY_PROTECTION  0x0040
+
+/* Blob Types */
+#define SIMPLEBLOB              0x1
+#define PUBLICKEYBLOB           0x6
+#define PRIVATEKEYBLOB          0x7
+#define PLAINTEXTKEYBLOB        0x8
+#define OPAQUEKEYBLOB           0x9
+#define PUBLICKEYBLOBEX         0xA
+#define SYMMETRICWRAPKEYBLOB    0xB
+
+#define CUR_BLOB_VERSION        2
+
+/* cert store provider types */
+#define CERT_STORE_PROV_MSG                  ((LPCSTR)1)
+#define CERT_STORE_PROV_MEMORY               ((LPCSTR)2)
+#define CERT_STORE_PROV_FILE                 ((LPCSTR)3)
+#define CERT_STORE_PROV_REG                  ((LPCSTR)4)
+#define CERT_STORE_PROV_PKCS7                ((LPCSTR)5)
+#define CERT_STORE_PROV_SERIALIZED           ((LPCSTR)6)
+#define CERT_STORE_PROV_FILENAME_A           ((LPCSTR)7)
+#define CERT_STORE_PROV_FILENAME_W           ((LPCSTR)8)
+#define CERT_STORE_PROV_SYSTEM_A             ((LPCSTR)9)
+#define CERT_STORE_PROV_SYSTEM_W             ((LPCSTR)10)
+#define CERT_STORE_PROV_SYSTEM               CERT_STORE_PROV_SYSTEM_W
+#define CERT_STORE_PROV_COLLECTION           ((LPCSTR)11)
+#define CERT_STORE_PROV_SYSTEM_REGISTRY_A    ((LPCSTR)12)
+#define CERT_STORE_PROV_SYSTEM_REGISTRY_W    ((LPCSTR)13)
+#define CERT_STORE_PROV_SYSTEM_REGISTRY      CERT_STORE_PROV_SYSTEM_REGISTRY_W
+#define CERT_STORE_PROV_PHYSICAL_W           ((LPCSTR)14)
+#define CERT_STORE_PROV_PHYSICAL             CERT_STORE_PROV_PHYSICAL_W
+#define CERT_STORE_PROV_SMART_CARD_W         ((LPCSTR)15)
+#define CERT_STORE_PROV_SMART_CARD           CERT_STORE_PROV_SMART_CARD_W
+#define CERT_STORE_PROV_LDAP_W               ((LPCSTR)16)
+#define CERT_STORE_PROV_LDAP                 CERT_STORE_PROV_LDAP_W
+
+#define sz_CERT_STORE_PROV_MEMORY            "Memory"
+#define sz_CERT_STORE_PROV_FILENAME_W        "File"
+#define sz_CERT_STORE_PROV_FILENAME          sz_CERT_STORE_PROV_FILENAME_W
+#define sz_CERT_STORE_PROV_SYSTEM_W          "System"
+#define sz_CERT_STORE_PROV_SYSTEM            sz_CERT_STORE_PROV_SYSTEM_W
+#define sz_CERT_STORE_PROV_PKCS7             "PKCS7"
+#define sz_CERT_STORE_PROV_SERIALIZED        "Serialized"
+#define sz_CERT_STORE_PROV_COLLECTION        "Collection"
+#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
+#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY   sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
+#define sz_CERT_STORE_PROV_PHYSICAL_W        "Physical"
+#define sz_CERT_STORE_PROV_PHYSICAL          sz_CERT_STORE_PROV_PHYSICAL_W
+#define sz_CERT_STORE_PROV_SMART_CARD_W      "SmartCard"
+#define sz_CERT_STORE_PROV_SMART_CARD        sz_CERT_STORE_PROV_SMART_CARD_W
+#define sz_CERT_STORE_PROV_LDAP_W            "Ldap"
+#define sz_CERT_STORE_PROV_LDAP              sz_CERT_STORE_PROV_LDAP_W
+
+/* types for CertOpenStore dwEncodingType */
+#define CERT_ENCODING_TYPE_MASK 0x0000ffff
+#define CMSG_ENCODING_TYPE_MASK 0xffff0000
+#define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK)
+#define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK)
+
+#define CRYPT_ASN_ENCODING  0x00000001
+#define CRYPT_NDR_ENCODING  0x00000002
+#define X509_ASN_ENCODING   0x00000001
+#define X509_NDR_ENCODING   0x00000002
+#define PKCS_7_ASN_ENCODING 0x00010000
+#define PKCS_7_NDR_ENCODING 0x00020000
+
+/* system store locations */
+#define CERT_SYSTEM_STORE_LOCATION_MASK  0x00ff0000
+#define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
+
+/* system store location ids */
+/* hkcu */
+#define CERT_SYSTEM_STORE_CURRENT_USER_ID               1
+/* hklm */
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID              2
+/* hklm\Software\Microsoft\Cryptography\Services */
+#define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID            4
+#define CERT_SYSTEM_STORE_SERVICES_ID                   5
+/* HKEY_USERS */
+#define CERT_SYSTEM_STORE_USERS_ID                      6
+/* hkcu\Software\Policies\Microsoft\SystemCertificates */
+#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID  7
+/* hklm\Software\Policies\Microsoft\SystemCertificates */
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
+/* hklm\Software\Microsoft\EnterpriseCertificates */
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID   9
+
+/* system store location values */
+#define CERT_SYSTEM_STORE_CURRENT_USER \
+ (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE \
+ (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_CURRENT_SERVICE \
+ (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_SERVICES \
+ (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_USERS \
+ (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \
+ (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \
+ (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \
+ (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+
+#if defined(__GNUC__)
+#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH (const WCHAR[])\
+ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t',\
+  '\\','S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',\
+  0 }
+#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH (const WCHAR[])\
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
+  'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
+  't','i','f','i','c','a','t','e','s',0 }
+#elif defined(_MSC_VER)
+#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \
+ L"Software\\Microsoft\\SystemCertificates"
+#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \
+ L"Software\\Policies\\Microsoft\\SystemCertificates"
+#else
+static const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] = 
+ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
+  'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 };
+static const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] = 
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
+  'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
+  't','i','f','i','c','a','t','e','s',0 };
+#endif
+
+#if defined(__GNUC__)
+#define CERT_EFSBLOB_REGPATH (const WCHAR[])\
+{'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
+ 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 }
+#define CERT_EFSBLOB_VALUE_NAME (const WCHAR[]) {'E','F','S','B','l','o','b',0 }
+#elif defined(_MSC_VER)
+#define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS"
+#define CERT_EFSBLOB_VALUE_NAME L"EFSBlob"
+#else
+static const WCHAR CERT_EFSBLOB_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
+  'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
+  't','i','f','i','c','a','t','e','s','\\','E','F','S',0 };
+static const CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 };
+#endif
+
+#if defined(__GNUC__)
+#define CERT_PROT_ROOT_FLAGS_REGPATH (const WCHAR[])\
+{'\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o','t',\
+ 's',0 }
+#define CERT_PROT_ROOT_FLAGS_VALUE_NAME (const WCHAR[])\
+{'F','l','a','g','s',0 }
+#elif defined(_MSC_VER)
+#define CERT_PROT_ROOT_FLAGS_REGPATH L"\\Root\\ProtectedRoots"
+#define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags"
+#else
+static const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] =
+ { '\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o',
+   't','s',0 };
+static const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 };
+#endif
+
+#define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG                0x01
+#define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG                 0x02
+#define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG                    0x04
+#define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG                     0x08
+#define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG            0x10
+#define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
+
+#if defined(__GNUC__)
+#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH (const WCHAR[])\
+{'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
+ 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',\
+ 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 }
+#elif defined(_MSC_VER)
+#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \
+ CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
+#else
+static const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
+  'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
+  't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',
+  'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 };
+#endif
+
+#if defined(__GNUC__)
+#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH (const WCHAR[])\
+{'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',\
+ 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',\
+ 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',\
+ 'S','a','f','e','r',0 }
+#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME (const WCHAR[])\
+{'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
+#elif defined(_MSC_VER)
+#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \
+ CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
+#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
+#else
+static const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
+  'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',
+  'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',
+  'S','a','f','e','r',0 };
+static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] =
+ { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
+#endif
+
+#define CERT_TRUST_PUB_ALLOW_END_USER_TRUST         0x00000000
+#define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST    0x00000001
+#define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002
+#define CERT_TRUST_PUB_ALLOW_TRUST_MASK             0x00000003
+#define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG     0x00000100
+#define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG     0x00000200
+
+/* flags for CertOpenStore dwFlags */
+#define CERT_STORE_NO_CRYPT_RELEASE_FLAG            0x00000001
+#define CERT_STORE_SET_LOCALIZED_NAME_FLAG          0x00000002
+#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004
+#define CERT_STORE_DELETE_FLAG                      0x00000010
+#define CERT_STORE_UNSAFE_PHYSICAL_FLAG             0x00000020
+#define CERT_STORE_SHARE_STORE_FLAG                 0x00000040
+#define CERT_STORE_SHARE_CONTEXT_FLAG               0x00000080
+#define CERT_STORE_MANIFOLD_FLAG                    0x00000100
+#define CERT_STORE_ENUM_ARCHIVED_FLAG               0x00000200
+#define CERT_STORE_UPDATE_KEYID_FLAG                0x00000400
+#define CERT_STORE_BACKUP_RESTORE_FLAG              0x00000800
+#define CERT_STORE_MAXIMUM_ALLOWED_FLAG             0x00001000
+#define CERT_STORE_CREATE_NEW_FLAG                  0x00002000
+#define CERT_STORE_OPEN_EXISTING_FLAG               0x00004000
+#define CERT_STORE_READONLY_FLAG                    0x00008000
+
+#define CERT_REGISTRY_STORE_REMOTE_FLAG      0x00010000
+#define CERT_REGISTRY_STORE_SERIALIZED_FLAG  0x00020000
+#define CERT_REGISTRY_STORE_ROAMING_FLAG     0x00040000
+#define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000
+#define CERT_REGISTRY_STORE_LM_GPT_FLAG      0x01000000
+#define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG  0x80000000
+
+#define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000
+
+/* CertCloseStore dwFlags */
+#define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001
+#define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002
+
+/* dwAddDisposition */
+#define CERT_STORE_ADD_NEW                                 1
+#define CERT_STORE_ADD_USE_EXISTING                        2
+#define CERT_STORE_ADD_REPLACE_EXISTING                    3
+#define CERT_STORE_ADD_ALWAYS                              4
+#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
+#define CERT_STORE_ADD_NEWER                               6
+#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            7
+
+/* Installable OID function defs */
+#define CRYPT_OID_OPEN_STORE_PROV_FUNC     "CertDllOpenStoreProv"
+#define CRYPT_OID_ENCODE_OBJECT_FUNC       "CryptDllEncodeObject"
+#define CRYPT_OID_DECODE_OBJECT_FUNC       "CryptDllDecodeObject"
+#define CRYPT_OID_ENCODE_OBJECT_EX_FUNC    "CryptDllEncodeObjectEx"
+#define CRYPT_OID_DECODE_OBJECT_EX_FUNC    "CryptDllDecodeObjectEx"
+#define CRYPT_OID_CREATE_COM_OBJECT_FUNC   "CryptDllCreateComObject"
+#define CRYPT_OID_VERIFY_REVOCATION_FUNC   "CertDllVerifyRevocation"
+#define CRYPT_OID_VERIFY_CTL_USAGE_FUNC    "CertDllVerifyCTLUsage"
+#define CRYPT_OID_FORMAT_OBJECT_FUNC       "CryptDllFormatObject"
+#define CRYPT_OID_FIND_OID_INFO_FUNC       "CryptDllFindOIDInfo"
+#define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
+#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC  "CryptDllExportPublicKeyInfoEx"
+#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC  "CryptDllImportPublicKeyInfoEx"
+#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
+#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
+#define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \
+ "CertDllVerifyCertificateChainPolicy"
+#define URL_OID_GET_OBJECT_URL_FUNC    "UrlDllGetObjectUrl"
+#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
+#define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
+#define CMSG_OID_EXPORT_KEY_TRANS_FUNC        "CryptMsgDllExportKeyTrans"
+#define CMSG_OID_IMPORT_KEY_TRANS_FUNC        "CryptMsgDllImportKeyTrans"
+
+#define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID"
+#define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
+#if defined(__GNUC__)
+# define CRYPT_OID_REG_DLL_VALUE_NAME (const WCHAR []){ 'D','l','l',0 }
+# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME \
+ (const WCHAR []){ 'F','u','n','c','N','a','m','e',0 }
+# define CRYPT_OID_REG_FLAGS_VALUE_NAME \
+ (const WCHAR []){ 'C','r','y','p','t','F','l','a','g','s',0 }
+#elif defined(_MSC_VER)
+# define CRYPT_OID_REG_DLL_VALUE_NAME       L"Dll"
+# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName"
+# define CRYPT_OID_REG_FLAGS_VALUE_NAME     L"CryptFlags"
+#else
+static const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 };
+static const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] =
+ { 'F','u','n','c','N','a','m','e',0 };
+static const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] =
+ { 'C','r','y','p','t','F','l','a','g','s',0 };
+#endif
+#define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
+#define CRYPT_DEFAULT_OID                    "DEFAULT"
+
+#define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
+
+#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG  0x1
+
+#define CRYPT_REGISTER_FIRST_INDEX 0
+#define CRYPT_REGISTER_LAST_INDEX  0xffffffff
+
+/* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */
+#define CERT_STORE_PROV_EXTERNAL_FLAG        0x1
+#define CERT_STORE_PROV_DELETED_FLAG         0x2
+#define CERT_STORE_PROV_NO_PERSIST_FLAG      0x4
+#define CERT_STORE_PROV_SYSTEM_STORE_FLAG    0x8
+#define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
+
+/* function indices */
+#define CERT_STORE_PROV_CLOSE_FUNC             0
+#define CERT_STORE_PROV_READ_CERT_FUNC         1
+#define CERT_STORE_PROV_WRITE_CERT_FUNC        2
+#define CERT_STORE_PROV_DELETE_CERT_FUNC       3
+#define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
+#define CERT_STORE_PROV_READ_CRL_FUNC          5
+#define CERT_STORE_PROV_WRITE_CRL_FUNC         6
+#define CERT_STORE_PROV_DELETE_CRL_FUNC        7
+#define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC  8
+#define CERT_STORE_PROV_READ_CTL_FUNC          9
+#define CERT_STORE_PROV_WRITE_CTL_FUNC         10
+#define CERT_STORE_PROV_DELETE_CTL_FUNC        11
+#define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC  12
+#define CERT_STORE_PROV_CONTROL_FUNC           13
+#define CERT_STORE_PROV_FIND_CERT_FUNC         14
+#define CERT_STORE_PROV_FREE_FIND_CERT_FUNC    15
+#define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16
+#define CERT_STORE_PROV_FIND_CRL_FUNC          17
+#define CERT_STORE_PROV_FREE_FIND_CRL_FUNC     18
+#define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC  19
+#define CERT_STORE_PROV_FIND_CTL_FUNC          20
+#define CERT_STORE_PROV_FREE_FIND_CTL_FUNC     21
+#define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC  22
+
+/* physical store dwFlags, also used by CertAddStoreToCollection as
+ * dwUpdateFlags
+ */
+#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG                  0x1
+#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG                0x2
+#define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG         0x4
+#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
+
+/* dwFlag values for CertEnumPhysicalStore callback */
+#define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
+
+/* predefined store names */
+#if defined(__GNUC__)
+# define CERT_PHYSICAL_STORE_DEFAULT_NAME (const WCHAR[])\
+ {'.','D','e','f','a','u','l','t','0'}
+# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME (const WCHAR[])\
+ {'.','G','r','o','u','p','P','o','l','i','c','y',0}
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME (const WCHAR[])\
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}
+# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME (const WCHAR[])\
+ {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME (const WCHAR[])\
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\
+ 'P','o','l','i','c','y',0}
+# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME (const WCHAR[])\
+ {'.','E','n','t','e','r','p','r','i','s','e',0}
+# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME (const WCHAR[])\
+ {'.','A','u','t','h','R','o','o','t',0}
+#elif defined(_MSC_VER)
+# define CERT_PHYSICAL_STORE_DEFAULT_NAME \
+ L".Default"
+# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \
+ L".GroupPolicy"
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \
+ L".LocalMachine"
+# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \
+ L".UserCertificate"
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \
+ L".LocalMachineGroupPolicy"
+# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \
+ L".Enterprise"
+# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \
+ L".AuthRoot"
+#else
+static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] = 
+ {'.','D','e','f','a','u','l','t','0'};
+static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] =
+ {'.','G','r','o','u','p','P','o','l','i','c','y',0};
+static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] =
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e',0};
+static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] =
+ {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0};
+static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] =
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',
+ 'P','o','l','i','c','y',0};
+static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] =
+ {'.','E','n','t','e','r','p','r','i','s','e',0};
+static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] =
+ {'.','A','u','t','h','R','o','o','t',0};
+#endif
+
+/* cert system store flags */
+#define CERT_SYSTEM_STORE_MASK 0xffff0000
+#define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
+
+/* CertFindChainInStore dwFindType types */
+#define CERT_CHAIN_FIND_BY_ISSUER 1
+
+/* CertSaveStore dwSaveAs values */
+#define CERT_STORE_SAVE_AS_STORE 1
+#define CERT_STORE_SAVE_AS_PKCS7 2
+/* CertSaveStore dwSaveTo values */
+#define CERT_STORE_SAVE_TO_FILE       1
+#define CERT_STORE_SAVE_TO_MEMORY     2
+#define CERT_STORE_SAVE_TO_FILENAME_A 3
+#define CERT_STORE_SAVE_TO_FILENAME_W 4
+#define CERT_STORE_SAVE_TO_FILENAME   CERT_STORE_SAVE_TO_FILENAME_W
+
+/* CERT_INFO versions/flags */
+#define CERT_V1 0
+#define CERT_V2 1
+#define CERT_V3 2
+#define CERT_INFO_VERSION_FLAG                 1
+#define CERT_INFO_SERIAL_NUMBER_FLAG           2
+#define CERT_INFO_SIGNATURE_ALGORITHM_FLAG     3
+#define CERT_INFO_ISSUER_FLAG                  4
+#define CERT_INFO_NOT_BEFORE_FLAG              5
+#define CERT_INFO_NOT_AFTER_FLAG               6
+#define CERT_INFO_SUBJECT_FLAG                 7
+#define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8
+#define CERT_INFO_ISSUER_UNIQUE_ID_FLAG        9
+#define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG       10
+#define CERT_INFO_EXTENSION_FLAG               11
+
+/* CERT_REQUEST_INFO versions */
+#define CERT_REQUEST_V1 0
+
+/* CERT_KEYGEN_REQUEST_INFO versions */
+#define CERT_KEYGEN_REQUEST_V1 0
+
+/* CRL versions */
+#define CRL_V1 0
+#define CRL_V2 1
+
+/* CTL versions */
+#define CTL_V1 0
+
+/* Certificate, CRL, CTL property IDs */
+#define CERT_KEY_PROV_HANDLE_PROP_ID               1
+#define CERT_KEY_PROV_INFO_PROP_ID                 2
+#define CERT_SHA1_HASH_PROP_ID                     3
+#define CERT_HASH_PROP_ID                          CERT_SHA1_HASH_PROP_ID
+#define CERT_MD5_HASH_PROP_ID                      4
+#define CERT_KEY_CONTEXT_PROP_ID                   5
+#define CERT_KEY_SPEC_PROP_ID                      6
+#define CERT_IE30_RESERVED_PROP_ID                 7
+#define CERT_PUBKEY_HASH_RESERVED_PROP_ID          8
+#define CERT_ENHKEY_USAGE_PROP_ID                  9
+#define CERT_CTL_USAGE_PROP_ID                     CERT_ENHKEY_USAGE_PROP_ID
+#define CERT_NEXT_UPDATE_LOCATION_PROP_ID          10
+#define CERT_FRIENDLY_NAME_PROP_ID                 11
+#define CERT_PVK_FILE_PROP_ID                      12
+#define CERT_DESCRIPTION_PROP_ID                   13
+#define CERT_ACCESS_STATE_PROP_ID                  14
+#define CERT_SIGNATURE_HASH_PROP_ID                15
+#define CERT_SMART_CARD_DATA_PROP_ID               16
+#define CERT_EFS_PROP_ID                           17
+#define CERT_FORTEZZA_DATA_PROP                    18
+#define CERT_ARCHIVED_PROP_ID                      19
+#define CERT_KEY_IDENTIFIER_PROP_ID                20
+#define CERT_AUTO_ENROLL_PROP_ID                   21
+#define CERT_PUBKEY_ALG_PARA_PROP_ID               22
+#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID        23
+#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID    24
+#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID   25
+#define CERT_ENROLLMENT_PROP_ID                    26
+#define CERT_DATE_STAMP_PROP_ID                    27
+#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
+#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID         29
+#define CERT_EXTENDED_ERROR_INFO_PROP_ID           30
+/* 31    -- unused?
+   32    -- cert prop id
+   33    -- CRL prop id
+   34    -- CTL prop id
+   35    -- KeyId prop id
+   36-63 -- reserved
+ */
+#define CERT_RENEWAL_PROP_ID                       64
+#define CERT_ARCHIVED_KEY_HASH_PROP_ID             65
+#define CERT_AUTO_ENROLL_RETRY_PROP_ID             66
+#define CERT_AIA_URL_RETRIEVED_PROP_ID             67
+#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID         68
+#define CERT_BACKED_UP_PROP_ID                     69
+#define CERT_OCSP_RESPONSE_PROP_ID                 70
+#define CERT_REQUEST_ORIGINATOR_PROP_ID            71
+#define CERT_SOURCE_LOCATION_PROP_ID               72
+#define CERT_SOURCE_URL_PROP_ID                    73
+#define CERT_NEW_KEY_PROP_ID                       74
+#define CERT_OCSP_CACHE_PREFIX_PROP_ID             75
+#define CERT_SMART_CARD_ROOT_INFO_PROP_ID          76
+#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID          77
+#define CERT_NCRYPT_KEY_HANDLE_PROP_ID             78
+#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79
+#define CERT_SUBJECT_INFO_ACCESS_PROP_ID           80
+#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81
+#define CERT_CA_DISABLE_CRL_PROP_ID                82
+#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID    83
+#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84
+
+#define CERT_FIRST_RESERVED_PROP_ID                85
+#define CERT_LAST_RESERVED_PROP_ID                 0x00007fff
+#define CERT_FIRST_USER_PROP_ID                    0x00008000
+#define CERT_LAST_USER_PROP_ID                     0x0000ffff
+
+#define IS_CERT_HASH_PROP_ID(x) \
+ ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \
+  (x) == CERT_SIGNATURE_HASH_PROP_ID)
+
+#define IS_PUBKEY_HASH_PROP_ID(x) \
+ ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
+  (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID)
+
+#define IS_CHAIN_HASH_PROP_ID(x) \
+ ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
+  (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \
+  (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \
+  (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID)
+
+/* access state flags */
+#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG   0x1
+#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG    0x2
+#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
+
+/* CertSetCertificateContextProperty flags */
+#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG      0x40000000
+#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
+
+/* CERT_RDN attribute dwValueType types */
+#define CERT_RDN_TYPE_MASK 0x000000ff
+#define CERT_RDN_ANY_TYPE         0
+#define CERT_RDN_ENCODED_BLOB     1
+#define CERT_RDN_OCTET_STRING     2
+#define CERT_RDN_NUMERIC_STRING   3
+#define CERT_RDN_PRINTABLE_STRING 4
+#define CERT_RDN_TELETEX_STRING   5
+#define CERT_RDN_T61_STRING       5
+#define CERT_RDN_VIDEOTEX_STRING  6
+#define CERT_RDN_IA5_STRING       7
+#define CERT_RDN_GRAPHIC_STRING   8
+#define CERT_RDN_VISIBLE_STRING   9
+#define CERT_RDN_ISO646_STRING    9
+#define CERT_RDN_GENERAL_STRING   10
+#define CERT_RDN_UNIVERSAL_STRING 11
+#define CERT_RDN_INT4_STRING      11
+#define CERT_RDN_BMP_STRING       12
+#define CERT_RDN_UNICODE_STRING   12
+#define CERT_RDN_UTF8_STRING      13
+
+/* CERT_RDN attribute dwValueType flags */
+#define CERT_RDN_FLAGS_MASK 0xff000000
+#define CERT_RDN_ENABLE_T61_UNICODE_FLAG  0x80000000
+#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG  0x4000000
+#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000
+#define CERT_RDN_DISABLE_IE4_UTF8_FLAG    0x0100000
+
+#define IS_CERT_RDN_CHAR_STRING(x) \
+ (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
+
+/* CertIsRDNAttrsInCertificateName flags */
+#define CERT_UNICODE_IS_RDN_ATTRS_FLAG          0x1
+#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
+
+/* CRL reason codes */
+#define CRL_REASON_UNSPECIFIED            0
+#define CRL_REASON_KEY_COMPROMISE         1
+#define CRL_REASON_CA_COMPROMISE          2
+#define CRL_REASON_AFFILIATION_CHANGED    3
+#define CRL_REASON_SUPERSEDED             4
+#define CRL_REASON_CESSATION_OF_OPERATION 5
+#define CRL_REASON_CERTIFICATE_HOLD       6
+#define CRL_REASON_REMOVE_FROM_CRL        8
+
+/* CertControlStore control types */
+#define CERT_STORE_CTRL_RESYNC        1
+#define CERT_STORE_CTRL_NOTIFY_CHANGE 2
+#define CERT_STORE_CTRL_COMMIT        3
+#define CERT_STORE_CTRL_AUTO_RESYNC   4
+#define CERT_STORE_CTRL_CANCEL_NOTIFY 5
+
+#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
+#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
+
+/* cert store properties */
+#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
+
+/* CertCreateContext flags */
+#define CERT_CREATE_CONTEXT_NOCOPY_FLAG       0x1
+#define CERT_CREATE_CONTEXT_SORTED_FLAG       0x2
+#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
+#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG     0x8
+
+#define CERT_COMPARE_MASK                   0xffff
+#define CERT_COMPARE_SHIFT                  16
+#define CERT_COMPARE_ANY                    0
+#define CERT_COMPARE_SHA1_HASH              1
+#define CERT_COMPARE_HASH                   CERT_COMPARE_SHA1_HASH
+#define CERT_COMPARE_NAME                   2
+#define CERT_COMPARE_ATTR                   3
+#define CERT_COMPARE_MD5_HASH               4
+#define CERT_COMPARE_PROPERTY               5
+#define CERT_COMPARE_PUBLIC_KEY             6
+#define CERT_COMPARE_NAME_STR_A             7
+#define CERT_COMPARE_NAME_STR_W             8
+#define CERT_COMPARE_KEY_SPEC               9
+#define CERT_COMPARE_ENHKEY_USAGE           10
+#define CERT_COMPARE_CTL_USAGE              CERT_COMPARE_ENHKEY_USAGE
+#define CERT_COMPARE_SUBJECT_CERT           11
+#define CERT_COMPARE_ISSUER_OF              12
+#define CERT_COMPARE_EXISTING               13
+#define CERT_COMPARE_SIGNATURE_HASH         14
+#define CERT_COMPARE_KEY_IDENTIFIER         15
+#define CERT_COMPARE_CERT_ID                16
+#define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
+#define CERT_COMPARE_PUBKEY_MD5_HASH        18
+
+/* values of dwFindType for CertFind*InStore */
+#define CERT_FIND_ANY \
+ (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SHA1_HASH \
+ (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_MD5_HASH \
+ (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SIGNATURE_HASH \
+ (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_KEY_IDENTIFIER \
+ (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
+#define CERT_FIND_HASH CERT_FIND_SHA1_HASH
+#define CERT_FIND_PROPERTY \
+ (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
+#define CERT_FIND_PUBLIC_KEY \
+ (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SUBJECT_NAME \
+ (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_SUBJECT_ATTR \
+ (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_ISSUER_NAME \
+ (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_ISSUER_ATTR \
+ (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_SUBJECT_STR_A \
+ (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_SUBJECT_STR_W \
+ (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
+#define CERT_FIND_ISSUER_STR_A \
+ (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_ISSUER_STR_W \
+ (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
+#define CERT_FIND_KEY_SPEC \
+ (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
+#define CERT_FIND_ENHKEY_USAGE \
+ (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
+#define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE
+#define CERT_FIND_SUBJECT_CERT \
+ (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
+#define CERT_FIND_ISSUER_OF \
+ (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
+#define CERT_FIND_EXISTING \
+ (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
+#define CERT_FIND_CERT_ID \
+ (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
+#define CERT_FIND_CROSS_CERT_DIST_POINTS \
+ (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
+#define CERT_FIND_PUBKEY_MD5_HASH \
+ (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
+
+#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  0x1
+#define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG     0x1
+#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  0x2
+#define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     0x2
+#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
+#define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    0x4
+#define CERT_FIND_NO_ENHKEY_USAGE_FLAG        0x8
+#define CERT_FIND_NO_CTL_USAGE_FLAG           0x8
+#define CERT_FIND_OR_ENHKEY_USAGE_FLAG        0x10
+#define CERT_FIND_OR_CTL_USAGE_FLAG           0x10
+#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG     0x20
+#define CERT_FIND_VALID_CTL_USAGE_FLAG        0x20
+
+#define CRL_FIND_ANY        0
+#define CRL_FIND_ISSUED_BY  1
+#define CRL_FIND_EXISTING   2
+#define CRL_FIND_ISSUED_FOR 3
+
+#define CRL_FIND_ISSUED_BY_AKI_FLAG       0x1
+#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
+#define CRL_FIND_ISSUED_BY_DELTA_FLAG     0x4
+#define CRL_FIND_ISSUED_BY_BASE_FLAG      0x8
+
+typedef struct _CRL_FIND_ISSUED_FOR_PARA
+{
+    PCCERT_CONTEXT pSubjectCert;
+    PCCERT_CONTEXT pIssuerCert;
+} CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA;
+
+#define CTL_FIND_ANY       0
+#define CTL_FIND_SHA1_HASH 1
+#define CTL_FIND_MD5_HASH  2
+#define CTL_FIND_USAGE     3
+#define CTL_FIND_SUBJECT   4
+#define CTL_FIND_EXISTING  5
+
+typedef struct _CTL_FIND_USAGE_PARA
+{
+    DWORD           cbSize;
+    CTL_USAGE       SubjectUsage;
+    CRYPT_DATA_BLOB ListIdentifier;
+    PCERT_INFO      pSigner;
+} CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA;
+
+#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff
+#define CTL_FIND_NO_SIGNER_PTR     ((PCERT_INFO)-1)
+#define CTL_FIND_SAME_USAGE_FLAG   0x00000001
+
+typedef struct _CTL_FIND_SUBJECT_PARA
+{
+    DWORD                cbSize;
+    PCTL_FIND_USAGE_PARA pUsagePara;
+    DWORD                dwSubjectType;
+    void                *pvSubject;
+} CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA;
+
+/* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */
+#define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
+
+/* CertAddSerializedElementToStore context types */
+#define CERT_STORE_CERTIFICATE_CONTEXT 1
+#define CERT_STORE_CRL_CONTEXT         2
+#define CERT_STORE_CTL_CONTEXT         3
+#define CERT_STORE_ALL_CONTEXT_FLAG    ~0U
+#define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \
+                                    (1 << CERT_STORE_CERTIFICATE_CONTEXT)
+#define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
+#define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
+
+/* CryptBinaryToString/CryptStringToBinary flags */
+#define CRYPT_STRING_BASE64HEADER        0x00000000
+#define CRYPT_STRING_BASE64              0x00000001
+#define CRYPT_STRING_BINARY              0x00000002
+#define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003
+#define CRYPT_STRING_HEX                 0x00000004
+#define CRYPT_STRING_HEXASCII            0x00000005
+#define CRYPT_STRING_BASE64_ANY          0x00000006
+#define CRYPT_STRING_ANY                 0x00000007
+#define CRYPT_STRING_HEX_ANY             0x00000008
+#define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009
+#define CRYPT_STRING_HEXADDR             0x0000000a
+#define CRYPT_STRING_HEXASCIIADDR        0x0000000b
+#define CRYPT_STRING_NOCRLF              0x40000000
+#define CRYPT_STRING_NOCR                0x80000000
+
+/* OIDs */
+#define szOID_RSA                           "1.2.840.113549"
+#define szOID_PKCS                          "1.2.840.113549.1"
+#define szOID_RSA_HASH                      "1.2.840.113549.2"
+#define szOID_RSA_ENCRYPT                   "1.2.840.113549.3"
+#define szOID_PKCS_1                        "1.2.840.113549.1.1"
+#define szOID_PKCS_2                        "1.2.840.113549.1.2"
+#define szOID_PKCS_3                        "1.2.840.113549.1.3"
+#define szOID_PKCS_4                        "1.2.840.113549.1.4"
+#define szOID_PKCS_5                        "1.2.840.113549.1.5"
+#define szOID_PKCS_6                        "1.2.840.113549.1.6"
+#define szOID_PKCS_7                        "1.2.840.113549.1.7"
+#define szOID_PKCS_8                        "1.2.840.113549.1.8"
+#define szOID_PKCS_9                        "1.2.840.113549.1.9"
+#define szOID_PKCS_10                       "1.2.840.113549.1.10"
+#define szOID_PKCS_11                       "1.2.840.113549.1.12"
+#define szOID_RSA_RSA                       "1.2.840.113549.1.1.1"
+#define CERT_RSA_PUBLIC_KEY_OBJID           szOID_RSA_RSA
+#define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN    szOID_RSA_RSA
+#define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG    szOID_RSA_RSA
+#define szOID_RSA_MD2RSA                    "1.2.840.113549.1.1.2"
+#define szOID_RSA_MD4RSA                    "1.2.840.113549.1.1.3"
+#define szOID_RSA_MD5RSA                    "1.2.840.113549.1.1.4"
+#define szOID_RSA_SHA1RSA                   "1.2.840.113549.1.1.5"
+#define szOID_RSA_SET0AEP_RSA               "1.2.840.113549.1.1.6"
+#define szOID_RSA_SHA256RSA                 "1.2.840.113549.1.1.11"
+#define szOID_RSA_SHA384RSA                 "1.2.840.113549.1.1.12"
+#define szOID_RSA_SHA512RSA                 "1.2.840.113549.1.1.13"
+#define szOID_RSA_DH                        "1.2.840.113549.1.3.1"
+#define szOID_RSA_data                      "1.2.840.113549.1.7.1"
+#define szOID_RSA_signedData                "1.2.840.113549.1.7.2"
+#define szOID_RSA_envelopedData             "1.2.840.113549.1.7.3"
+#define szOID_RSA_signEnvData               "1.2.840.113549.1.7.4"
+#define szOID_RSA_digestedData              "1.2.840.113549.1.7.5"
+#define szOID_RSA_hashedData                "1.2.840.113549.1.7.5"
+#define szOID_RSA_encryptedData             "1.2.840.113549.1.7.6"
+#define szOID_RSA_emailAddr                 "1.2.840.113549.1.9.1"
+#define szOID_RSA_unstructName              "1.2.840.113549.1.9.2"
+#define szOID_RSA_contentType               "1.2.840.113549.1.9.3"
+#define szOID_RSA_messageDigest             "1.2.840.113549.1.9.4"
+#define szOID_RSA_signingTime               "1.2.840.113549.1.9.5"
+#define szOID_RSA_counterSign               "1.2.840.113549.1.9.6"
+#define szOID_RSA_challengePwd              "1.2.840.113549.1.9.7"
+#define szOID_RSA_unstructAddr              "1.2.840.113549.1.9.9"
+#define szOID_RSA_extCertAttrs              "1.2.840.113549.1.9.9"
+#define szOID_RSA_certExtensions            "1.2.840.113549.1.9.14"
+#define szOID_RSA_SMIMECapabilities         "1.2.840.113549.1.9.15"
+#define szOID_RSA_preferSignedData          "1.2.840.113549.1.9.15.1"
+#define szOID_RSA_SMIMEalg                  "1.2.840.113549.1.9.16.3"
+#define szOID_RSA_SMIMEalgESDH              "1.2.840.113549.1.9.16.3.5"
+#define szOID_RSA_SMIMEalgCMS3DESwrap       "1.2.840.113549.1.9.16.3.6"
+#define szOID_RSA_SMIMEalgCMSRC2wrap        "1.2.840.113549.1.9.16.3.7"
+#define szOID_RSA_MD2                       "1.2.840.113549.2.2"
+#define szOID_RSA_MD4                       "1.2.840.113549.2.4"
+#define szOID_RSA_MD5                       "1.2.840.113549.2.5"
+#define szOID_RSA_RC2CBC                    "1.2.840.113549.3.2"
+#define szOID_RSA_RC4                       "1.2.840.113549.3.4"
+#define szOID_RSA_DES_EDE3_CBC              "1.2.840.113549.3.7"
+#define szOID_RSA_RC5_CBCPad                "1.2.840.113549.3.9"
+#define szOID_ANSI_X942                     "1.2.840.10046"
+#define szOID_ANSI_X942_DH                  "1.2.840.10046.2.1"
+#define szOID_X957                          "1.2.840.10040"
+#define szOID_X957_DSA                      "1.2.840.10040.4.1"
+#define szOID_X957_SHA1DSA                  "1.2.840.10040.4.3"
+#define szOID_DS                            "2.5"
+#define szOID_DSALG                         "2.5.8"
+#define szOID_DSALG_CRPT                    "2.5.8.1"
+#define szOID_DSALG_HASH                    "2.5.8.2"
+#define szOID_DSALG_SIGN                    "2.5.8.3"
+#define szOID_DSALG_RSA                     "2.5.8.1.1"
+#define szOID_OIW                           "1.3.14"
+#define szOID_OIWSEC                        "1.3.14.3.2"
+#define szOID_OIWSEC_md4RSA                 "1.3.14.3.2.2"
+#define szOID_OIWSEC_md5RSA                 "1.3.14.3.2.3"
+#define szOID_OIWSEC_md4RSA2                "1.3.14.3.2.4"
+#define szOID_OIWSEC_desECB                 "1.3.14.3.2.6"
+#define szOID_OIWSEC_desCBC                 "1.3.14.3.2.7"
+#define szOID_OIWSEC_desOFB                 "1.3.14.3.2.8"
+#define szOID_OIWSEC_desCFB                 "1.3.14.3.2.9"
+#define szOID_OIWSEC_desMAC                 "1.3.14.3.2.10"
+#define szOID_OIWSEC_rsaSign                "1.3.14.3.2.11"
+#define szOID_OIWSEC_dsa                    "1.3.14.3.2.12"
+#define szOID_OIWSEC_shaDSA                 "1.3.14.3.2.13"
+#define szOID_OIWSEC_mdc2RSA                "1.3.14.3.2.14"
+#define szOID_OIWSEC_shaRSA                 "1.3.14.3.2.15"
+#define szOID_OIWSEC_dhCommMod              "1.3.14.3.2.16"
+#define szOID_OIWSEC_desEDE                 "1.3.14.3.2.17"
+#define szOID_OIWSEC_sha                    "1.3.14.3.2.18"
+#define szOID_OIWSEC_mdc2                   "1.3.14.3.2.19"
+#define szOID_OIWSEC_dsaComm                "1.3.14.3.2.20"
+#define szOID_OIWSEC_dsaCommSHA             "1.3.14.3.2.21"
+#define szOID_OIWSEC_rsaXchg                "1.3.14.3.2.22"
+#define szOID_OIWSEC_keyHashSeal            "1.3.14.3.2.23"
+#define szOID_OIWSEC_md2RSASign             "1.3.14.3.2.24"
+#define szOID_OIWSEC_md5RSASign             "1.3.14.3.2.25"
+#define szOID_OIWSEC_sha1                   "1.3.14.3.2.26"
+#define szOID_OIWSEC_dsaSHA1                "1.3.14.3.2.27"
+#define szOID_OIWSEC_dsaCommSHA1            "1.3.14.3.2.28"
+#define szOID_OIWSEC_sha1RSASign            "1.3.14.3.2.29"
+#define szOID_OIWDIR                        "1.3.14.7.2"
+#define szOID_OIWDIR_CRPT                   "1.3.14.7.2.1"
+#define szOID_OIWDIR_HASH                   "1.3.14.7.2.2"
+#define szOID_OIWDIR_SIGN                   "1.3.14.7.2.3"
+#define szOID_OIWDIR_md2                    "1.3.14.7.2.2.1"
+#define szOID_OIWDIR_md2RSA                 "1.3.14.7.2.3.1"
+#define szOID_INFOSEC                       "2.16.840.1.101.2.1"
+#define szOID_INFOSEC_sdnsSignature         "2.16.840.1.101.2.1.1.1"
+#define szOID_INFOSEC_mosaicSignature       "2.16.840.1.101.2.1.1.2"
+#define szOID_INFOSEC_sdnsConfidentiality   "2.16.840.1.101.2.1.1.3"
+#define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
+#define szOID_INFOSEC_sdnsIntegrity         "2.16.840.1.101.2.1.1.5"
+#define szOID_INFOSEC_mosaicIntegrity       "2.16.840.1.101.2.1.1.6"
+#define szOID_INFOSEC_sdnsTokenProtection   "2.16.840.1.101.2.1.1.7"
+#define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
+#define szOID_INFOSEC_sdnsKeyManagement     "2.16.840.1.101.2.1.1.9"
+#define szOID_INFOSEC_mosaicKeyManagement   "2.16.840.1.101.2.1.1.10"
+#define szOID_INFOSEC_sdnsKMandSig          "2.16.840.1.101.2.1.1.11"
+#define szOID_INFOSEC_mosaicKMandSig        "2.16.840.1.101.2.1.1.12"
+#define szOID_INFOSEC_SuiteASignature       "2.16.840.1.101.2.1.1.13"
+#define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
+#define szOID_INFOSEC_SuiteAIntegrity       "2.16.840.1.101.2.1.1.15"
+#define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
+#define szOID_INFOSEC_SuiteAKeyManagement   "2.16.840.1.101.2.1.1.17"
+#define szOID_INFOSEC_SuiteAKMandSig        "2.16.840.1.101.2.1.1.18"
+#define szOID_INFOSEC_mosaicUpdatedSig      "2.16.840.1.101.2.1.1.19"
+#define szOID_INFOSEC_mosaicKMandUpdSig     "2.16.840.1.101.2.1.1.20"
+#define szOID_INFOSEC_mosaicUpdateInteg     "2.16.840.1.101.2.1.1.21"
+#define szOID_COMMON_NAME                   "2.5.4.3"
+#define szOID_SUR_NAME                      "2.5.4.4"
+#define szOID_DEVICE_SERIAL_NUMBER          "2.5.4.5"
+#define szOID_COUNTRY_NAME                  "2.5.4.6"
+#define szOID_LOCALITY_NAME                 "2.5.4.7"
+#define szOID_STATE_OR_PROVINCE_NAME        "2.5.4.8"
+#define szOID_STREET_ADDRESS                "2.5.4.9"
+#define szOID_ORGANIZATION_NAME             "2.5.4.10"
+#define szOID_ORGANIZATIONAL_UNIT_NAME      "2.5.4.11"
+#define szOID_TITLE                         "2.5.4.12"
+#define szOID_DESCRIPTION                   "2.5.4.13"
+#define szOID_SEARCH_GUIDE                  "2.5.4.14"
+#define szOID_BUSINESS_CATEGORY             "2.5.4.15"
+#define szOID_POSTAL_ADDRESS                "2.5.4.16"
+#define szOID_POSTAL_CODE                   "2.5.4.17"
+#define szOID_POST_OFFICE_BOX               "2.5.4.18"
+#define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
+#define szOID_TELEPHONE_NUMBER              "2.5.4.20"
+#define szOID_TELEX_NUMBER                  "2.5.4.21"
+#define szOID_TELETEXT_TERMINAL_IDENTIFIER  "2.5.4.22"
+#define szOID_FACSIMILE_TELEPHONE_NUMBER    "2.5.4.23"
+#define szOID_X21_ADDRESS                   "2.5.4.24"
+#define szOID_INTERNATIONAL_ISDN_NUMBER     "2.5.4.25"
+#define szOID_REGISTERED_ADDRESS            "2.5.4.26"
+#define szOID_DESTINATION_INDICATOR         "2.5.4.27"
+#define szOID_PREFERRED_DELIVERY_METHOD     "2.5.4.28"
+#define szOID_PRESENTATION_ADDRESS          "2.5.4.29"
+#define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
+#define szOID_MEMBER                        "2.5.4.31"
+#define szOID_OWNER                         "2.5.4.32"
+#define szOID_ROLE_OCCUPANT                 "2.5.4.33"
+#define szOID_SEE_ALSO                      "2.5.4.34"
+#define szOID_USER_PASSWORD                 "2.5.4.35"
+#define szOID_USER_CERTIFICATE              "2.5.4.36"
+#define szOID_CA_CERTIFICATE                "2.5.4.37"
+#define szOID_AUTHORITY_REVOCATION_LIST     "2.5.4.38"
+#define szOID_CERTIFICATE_REVOCATION_LIST   "2.5.4.39"
+#define szOID_CROSS_CERTIFICATE_PAIR        "2.5.4.40"
+#define szOID_GIVEN_NAME                    "2.5.4.42"
+#define szOID_INITIALS                      "2.5.4.43"
+#define szOID_DN_QUALIFIER                  "2.5.4.46"
+#define szOID_AUTHORITY_KEY_IDENTIFIER      "2.5.29.1"
+#define szOID_KEY_ATTRIBUTES                "2.5.29.2"
+#define szOID_CERT_POLICIES_95              "2.5.29.3"
+#define szOID_KEY_USAGE_RESTRICTION         "2.5.29.4"
+#define szOID_LEGACY_POLICY_MAPPINGS        "2.5.29.5"
+#define szOID_SUBJECT_ALT_NAME              "2.5.29.7"
+#define szOID_ISSUER_ALT_NAME               "2.5.29.8"
+#define szOID_SUBJECT_DIR_ATTRS             "2.5.29.9"
+#define szOID_BASIC_CONSTRAINTS             "2.5.29.10"
+#define szOID_SUBJECT_KEY_IDENTIFIER        "2.5.29.14"
+#define szOID_KEY_USAGE                     "2.5.29.15"
+#define szOID_PRIVATEKEY_USAGE_PERIOD       "2.5.29.16"
+#define szOID_SUBJECT_ALT_NAME2             "2.5.29.17"
+#define szOID_ISSUER_ALT_NAME2              "2.5.29.18"
+#define szOID_BASIC_CONSTRAINTS2            "2.5.29.19"
+#define szOID_CRL_NUMBER                    "2.5.29.20"
+#define szOID_CRL_REASON_CODE               "2.5.29.21"
+#define szOID_REASON_CODE_HOLD              "2.5.29.23"
+#define szOID_DELTA_CRL_INDICATOR           "2.5.29.27"
+#define szOID_ISSUING_DIST_POINT            "2.5.29.28"
+#define szOID_NAME_CONSTRAINTS              "2.5.29.30"
+#define szOID_CRL_DIST_POINTS               "2.5.29.31"
+#define szOID_CERT_POLICIES                 "2.5.29.32"
+#define szOID_ANY_CERT_POLICY               "2.5.29.32.0"
+#define szOID_POLICY_MAPPINGS               "2.5.29.33"
+#define szOID_AUTHORITY_KEY_IDENTIFIER2     "2.5.29.35"
+#define szOID_POLICY_CONSTRAINTS            "2.5.29.36"
+#define szOID_ENHANCED_KEY_USAGE            "2.5.29.37"
+#define szOID_FRESHEST_CRL                  "2.5.29.46"
+#define szOID_INHIBIT_ANY_POLICY            "2.5.29.54"
+#define szOID_DOMAIN_COMPONENT              "0.9.2342.19200300.100.1.25"
+#define szOID_PKCS_12_FRIENDLY_NAME_ATTR     "1.2.840.113549.1.9.20"
+#define szOID_PKCS_12_LOCAL_KEY_ID           "1.2.840.113549.1.9.21"
+#define szOID_CERT_EXTENSIONS                "1.3.6.1.4.1.311.2.1.14"
+#define szOID_NEXT_UPDATE_LOCATION           "1.3.6.1.4.1.311.10.2"
+#define szOID_KP_CTL_USAGE_SIGNING           "1.3.6.1.4.1.311.10.3.1"
+#define szOID_KP_TIME_STAMP_SIGNING          "1.3.6.1.4.1.311.10.3.2"
+#ifndef szOID_SERVER_GATED_CRYPTO
+#define szOID_SERVER_GATED_CRYPTO            "1.3.6.1.4.1.311.10.3.3"
+#endif
+#ifndef szOID_SGC_NETSCAPE
+#define szOID_SGC_NETSCAPE                   "2.16.840.1.113730.4.1"
+#endif
+#define szOID_KP_EFS                         "1.3.6.1.4.1.311.10.3.4"
+#define szOID_EFS_RECOVERY                   "1.3.6.1.4.1.311.10.3.4.1"
+#define szOID_WHQL_CRYPTO                    "1.3.6.1.4.1.311.10.3.5"
+#define szOID_NT5_CRYPTO                     "1.3.6.1.4.1.311.10.3.6"
+#define szOID_OEM_WHQL_CRYPTO                "1.3.6.1.4.1.311.10.3.7"
+#define szOID_EMBEDDED_NT_CRYPTO             "1.3.6.1.4.1.311.10.3.8"
+#define szOID_ROOT_LIST_SIGNER               "1.3.6.1.4.1.311.10.3.9"
+#define szOID_KP_QUALIFIED_SUBORDINATION     "1.3.6.1.4.1.311.10.3.10"
+#define szOID_KP_KEY_RECOVERY                "1.3.6.1.4.1.311.10.3.11"
+#define szOID_KP_DOCUMENT_SIGNING            "1.3.6.1.4.1.311.10.3.12"
+#define szOID_KP_LIFETIME_SIGNING            "1.3.6.1.4.1.311.10.3.13"
+#define szOID_KP_MOBILE_DEVICE_SOFTWARE      "1.3.6.1.4.1.311.10.3.14"
+#define szOID_YESNO_TRUST_ATTR               "1.3.6.1.4.1.311.10.4.1"
+#ifndef szOID_DRM
+#define szOID_DRM                            "1.3.6.1.4.1.311.10.5.1"
+#endif
+#ifndef szOID_DRM_INDIVIDUALIZATION
+#define szOID_DRM_INDIVIDUALIZATION          "1.3.6.1.4.1.311.10.5.2"
+#endif
+#ifndef szOID_LICENSES
+#define szOID_LICENSES                       "1.3.6.1.4.1.311.10.6.1"
+#endif
+#ifndef szOID_LICENSE_SERVER
+#define szOID_LICENSE_SERVER                 "1.3.6.1.4.1.311.10.6.2"
+#endif
+#define szOID_REMOVE_CERTIFICATE             "1.3.6.1.4.1.311.10.8.1"
+#define szOID_CROSS_CERT_DIST_POINTS         "1.3.6.1.4.1.311.10.9.1"
+#define szOID_CTL                            "1.3.6.1.4.1.311.10.1"
+#define szOID_SORTED_CTL                     "1.3.6.1.4.1.311.10.1.1"
+#define szOID_ANY_APPLICATION_POLICY         "1.3.6.1.4.1.311.10.12.1"
+#define szOID_RENEWAL_CERTIFICATE            "1.3.6.1.4.1.311.13.1"
+#define szOID_ENROLLMENT_NAME_VALUE_PAIR     "1.3.6.1.4.1.311.13.2.1"
+#define szOID_ENROLLMENT_CSP_PROVIDER        "1.3.6.1.4.1.311.13.2.2"
+#define szOID_OS_VERSION                     "1.3.6.1.4.1.311.13.2.3"
+#define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
+#define szOID_LOCAL_MACHINE_KEYSET           "1.3.6.1.4.1.311.17.2"
+#define szOID_AUTO_ENROLL_CTL_USAGE          "1.3.6.1.4.1.311.20.1"
+#define szOID_ENROLL_CERTTYPE_EXTENSION      "1.3.6.1.4.1.311.20.2"
+#define szOID_ENROLLMENT_AGENT               "1.3.6.1.4.1.311.20.2.1"
+#ifndef szOID_KP_SMARTCARD_LOGON
+#define szOID_KP_SMARTCARD_LOGON             "1.3.6.1.4.1.311.20.2.2"
+#endif
+#ifndef szOID_NT_PRINCIPAL_NAME
+#define szOID_NT_PRINCIPAL_NAME              "1.3.6.1.4.1.311.20.2.3"
+#endif
+#define szOID_CERT_MANIFOLD                  "1.3.6.1.4.1.311.20.3"
+#ifndef szOID_CERTSRV_CA_VERSION
+#define szOID_CERTSRV_CA_VERSION             "1.3.6.1.4.1.311.21.1"
+#endif
+#define szOID_CERTSRV_PREVIOUS_CERT_HASH     "1.3.6.1.4.1.311.21.2"
+#define szOID_CRL_VIRTUAL_BASE               "1.3.6.1.4.1.311.21.3"
+#define szOID_CRL_NEXT_PUBLISH               "1.3.6.1.4.1.311.21.4"
+#define szOID_KP_CA_EXCHANGE                 "1.3.6.1.4.1.311.21.5"
+#define szOID_KP_KEY_RECOVERY_AGENT          "1.3.6.1.4.1.311.21.6"
+#define szOID_CERTIFICATE_TEMPLATE           "1.3.6.1.4.1.311.21.7"
+#define szOID_ENTERPRISE_OID_ROOT            "1.3.6.1.4.1.311.21.8"
+#define szOID_RDN_DUMMY_SIGNER               "1.3.6.1.4.1.311.21.9"
+#define szOID_APPLICATION_CERT_POLICIES      "1.3.6.1.4.1.311.21.10"
+#define szOID_APPLICATION_POLICY_MAPPINGS    "1.3.6.1.4.1.311.21.11"
+#define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
+#define szOID_ARCHIVED_KEY_ATTR              "1.3.6.1.4.1.311.21.13"
+#define szOID_CRL_SELF_CDP                   "1.3.6.1.4.1.311.21.14"
+#define szOID_REQUIRE_CERT_CHAIN_POLICY      "1.3.6.1.4.1.311.21.15"
+#define szOID_ARCHIVED_KEY_CERT_HASH         "1.3.6.1.4.1.311.21.16"
+#define szOID_ISSUED_CERT_HASH               "1.3.6.1.4.1.311.21.17"
+#define szOID_DS_EMAIL_REPLICATION           "1.3.6.1.4.1.311.21.19"
+#define szOID_REQUEST_CLIENT_INFO            "1.3.6.1.4.1.311.21.20"
+#define szOID_ENCRYPTED_KEY_HASH             "1.3.6.1.4.1.311.21.21"
+#define szOID_CERTSRV_CROSSCA_VERSION        "1.3.6.1.4.1.311.21.22"
+#define szOID_KEYID_RDN                      "1.3.6.1.4.1.311.10.7.1"
+#define szOID_PKIX                           "1.3.6.1.5.5.7"
+#define szOID_PKIX_PE                        "1.3.6.1.5.5.7.1"
+#define szOID_AUTHORITY_INFO_ACCESS          "1.3.6.1.5.5.7.1.1"
+#define szOID_PKIX_POLICY_QUALIFIER_CPS      "1.3.6.1.5.5.7.2.1"
+#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
+#define szOID_PKIX_KP                        "1.3.6.1.5.5.7.3"
+#define szOID_PKIX_KP_SERVER_AUTH            "1.3.6.1.5.5.7.3.1"
+#define szOID_PKIX_KP_CLIENT_AUTH            "1.3.6.1.5.5.7.3.2"
+#define szOID_PKIX_KP_CODE_SIGNING           "1.3.6.1.5.5.7.3.3"
+#define szOID_PKIX_KP_EMAIL_PROTECTION       "1.3.6.1.5.5.7.3.4"
+#define szOID_PKIX_KP_IPSEC_END_SYSTEM       "1.3.6.1.5.5.7.3.5"
+#define szOID_PKIX_KP_IPSEC_TUNNEL           "1.3.6.1.5.5.7.3.6"
+#define szOID_PKIX_KP_IPSEC_USER             "1.3.6.1.5.5.7.3.7"
+#define szOID_PKIX_KP_TIMESTAMP_SIGNING      "1.3.6.1.5.5.7.3.8"
+#define szOID_PKIX_NO_SIGNATURE              "1.3.6.1.5.5.7.6.2"
+#define szOID_CMC                            "1.3.6.1.5.5.7.7"
+#define szOID_CMC_STATUS_INFO                "1.3.6.1.5.5.7.7.1"
+#define szOID_CMC_IDENTIFICATION             "1.3.6.1.5.5.7.7.2"
+#define szOID_CMC_IDENTITY_PROOF             "1.3.6.1.5.5.7.7.3"
+#define szOID_CMC_DATA_RETURN                "1.3.6.1.5.5.7.7.4"
+#define szOID_CMC_TRANSACTION_ID             "1.3.6.1.5.5.7.7.5"
+#define szOID_CMC_SENDER_NONCE               "1.3.6.1.5.5.7.7.6"
+#define szOID_CMC_RECIPIENT_NONCE            "1.3.6.1.5.5.7.7.7"
+#define szOID_CMC_ADD_EXTENSIONS             "1.3.6.1.5.5.7.7.8"
+#define szOID_CMC_ENCRYPTED_POP              "1.3.6.1.5.5.7.7.9"
+#define szOID_CMC_DECRYPTED_POP              "1.3.6.1.5.5.7.7.10"
+#define szOID_CMC_LRA_POP_WITNESS            "1.3.6.1.5.5.7.7.11"
+#define szOID_CMC_GET_CERT                   "1.3.6.1.5.5.7.7.15"
+#define szOID_CMC_GET_CRL                    "1.3.6.1.5.5.7.7.16"
+#define szOID_CMC_REVOKE_REQUEST             "1.3.6.1.5.5.7.7.17"
+#define szOID_CMC_REG_INFO                   "1.3.6.1.5.5.7.7.18"
+#define szOID_CMC_RESPONSE_INFO              "1.3.6.1.5.5.7.7.19"
+#define szOID_CMC_QUERY_PENDING              "1.3.6.1.5.5.7.7.21"
+#define szOID_CMC_ID_POP_LINK_RANDOM         "1.3.6.1.5.5.7.7.22"
+#define szOID_CMC_ID_POP_LINK_WITNESS        "1.3.6.1.5.5.7.7.23"
+#define szOID_CT_PKI_DATA                    "1.3.6.1.5.5.7.12.2"
+#define szOID_CT_PKI_RESPONSE                "1.3.6.1.5.5.7.12.3"
+#define szOID_PKIX_ACC_DESCR                 "1.3.6.1.5.5.7.48"
+#define szOID_PKIX_OCSP                      "1.3.6.1.5.5.7.48.1"
+#define szOID_PKIX_CA_ISSUERS                "1.3.6.1.5.5.7.48.2"
+#define szOID_IPSEC_KP_IKE_INTERMEDIATE      "1.3.6.1.5.5.8.2.2"
+
+#ifndef szOID_SERIALIZED
+#define szOID_SERIALIZED                     "1.3.6.1.4.1.311.10.3.3.1"
+#endif
+
+#ifndef szOID_PRODUCT_UPDATE
+#define szOID_PRODUCT_UPDATE                 "1.3.6.1.4.1.311.31.1"
+#endif
+
+#define szOID_NETSCAPE                       "2.16.840.1.113730"
+#define szOID_NETSCAPE_CERT_EXTENSION        "2.16.840.1.113730.1"
+#define szOID_NETSCAPE_CERT_TYPE             "2.16.840.1.113730.1.1"
+#define szOID_NETSCAPE_BASE_URL              "2.16.840.1.113730.1.2"
+#define szOID_NETSCAPE_REVOCATION_URL        "2.16.840.1.113730.1.3"
+#define szOID_NETSCAPE_CA_REVOCATION_URL     "2.16.840.1.113730.1.4"
+#define szOID_NETSCAPE_CERT_RENEWAL_URL      "2.16.840.1.113730.1.7"
+#define szOID_NETSCAPE_CA_POLICY_URL         "2.16.840.1.113730.1.8"
+#define szOID_NETSCAPE_SSL_SERVER_NAME       "2.16.840.1.113730.1.12"
+#define szOID_NETSCAPE_COMMENT               "2.16.840.1.113730.1.13"
+#define szOID_NETSCAPE_DATA_TYPE             "2.16.840.1.113730.2"
+#define szOID_NETSCAPE_CERT_SEQUENCE         "2.16.840.1.113730.2.5"
+
+/* Bits for szOID_NETSCAPE_CERT_TYPE */
+#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
+#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
+#define NETSCAPE_SMIME_CERT_TYPE           0x20
+#define NETSCAPE_SIGN_CERT_TYPE            0x10
+#define NETSCAPE_SSL_CA_CERT_TYPE          0x04
+#define NETSCAPE_SMIME_CA_CERT_TYPE        0x02
+#define NETSCAPE_SIGN_CA_CERT_TYPE         0x01
+
+#define CRYPT_ENCODE_DECODE_NONE             0
+#define X509_CERT                            ((LPCSTR)1)
+#define X509_CERT_TO_BE_SIGNED               ((LPCSTR)2)
+#define X509_CERT_CRL_TO_BE_SIGNED           ((LPCSTR)3)
+#define X509_CERT_REQUEST_TO_BE_SIGNED       ((LPCSTR)4)
+#define X509_EXTENSIONS                      ((LPCSTR)5)
+#define X509_NAME_VALUE                      ((LPCSTR)6)
+#define X509_ANY_STRING                      X509_NAME_VALUE
+#define X509_NAME                            ((LPCSTR)7)
+#define X509_PUBLIC_KEY_INFO                 ((LPCSTR)8)
+#define X509_AUTHORITY_KEY_ID                ((LPCSTR)9)
+#define X509_KEY_ATTRIBUTES                  ((LPCSTR)10)
+#define X509_KEY_USAGE_RESTRICTION           ((LPCSTR)11)
+#define X509_ALTERNATE_NAME                  ((LPCSTR)12)
+#define X509_BASIC_CONSTRAINTS               ((LPCSTR)13)
+#define X509_KEY_USAGE                       ((LPCSTR)14)
+#define X509_BASIC_CONSTRAINTS2              ((LPCSTR)15)
+#define X509_CERT_POLICIES                   ((LPCSTR)16)
+#define PKCS_UTC_TIME                        ((LPCSTR)17)
+#define PKCS_TIME_REQUEST                    ((LPCSTR)18)
+#define RSA_CSP_PUBLICKEYBLOB                ((LPCSTR)19)
+#define X509_UNICODE_NAME                    ((LPCSTR)20)
+#define X509_KEYGEN_REQUEST_TO_BE_SIGNED     ((LPCSTR)21)
+#define PKCS_ATTRIBUTE                       ((LPCSTR)22)
+#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY    ((LPCSTR)23)
+#define X509_UNICODE_NAME_VALUE              ((LPCSTR)24)
+#define X509_UNICODE_ANY_STRING              X509_UNICODE_NAME_VALUE
+#define X509_OCTET_STRING                    ((LPCSTR)25)
+#define X509_BITS                            ((LPCSTR)26)
+#define X509_INTEGER                         ((LPCSTR)27)
+#define X509_MULTI_BYTE_INTEGER              ((LPCSTR)28)
+#define X509_ENUMERATED                      ((LPCSTR)29)
+#define X509_CRL_REASON_CODE                 X509_ENUMERATED
+#define X509_CHOICE_OF_TIME                  ((LPCSTR)30)
+#define X509_AUTHORITY_KEY_ID2               ((LPCSTR)31)
+#define X509_AUTHORITY_INFO_ACCESS           ((LPCSTR)32)
+#define PKCS_CONTENT_INFO                    ((LPCSTR)33)
+#define X509_SEQUENCE_OF_ANY                 ((LPCSTR)34)
+#define X509_CRL_DIST_POINTS                 ((LPCSTR)35)
+#define X509_ENHANCED_KEY_USAGE              ((LPCSTR)36)
+#define PKCS_CTL                             ((LPCSTR)37)
+#define X509_MULTI_BYTE_UINT                 ((LPCSTR)38)
+#define X509_DSS_PUBLICKEY                   X509_MULTI_BYTE_UINT
+#define X509_DSS_PARAMETERS                  ((LPCSTR)39)
+#define X509_DSS_SIGNATURE                   ((LPCSTR)40)
+#define PKCS_RC2_CBC_PARAMETERS              ((LPCSTR)41)
+#define PKCS_SMIME_CAPABILITIES              ((LPCSTR)42)
+#define PKCS_RSA_PRIVATE_KEY                 ((LPCSTR)43)
+#define PKCS_PRIVATE_KEY_INFO                ((LPCSTR)44)
+#define PKCS_ENCRYPTED_PRIVATE_KEY_INFO      ((LPCSTR)45)
+#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46)
+#define X509_DH_PUBLICKEY                    X509_MULTI_BYTE_UINT
+#define X509_DH_PARAMETERS                   ((LPCSTR)47)
+#define PKCS_ATTRIBUTES                      ((LPCSTR)48)
+#define PKCS_SORTED_CTL                      ((LPCSTR)49)
+#define X942_DH_PARAMETERS                   ((LPCSTR)50)
+#define X509_BITS_WITHOUT_TRAILING_ZEROES    ((LPCSTR)51)
+#define X942_OTHER_INFO                      ((LPCSTR)52)
+#define X509_CERT_PAIR                       ((LPCSTR)53)
+#define X509_ISSUING_DIST_POINT              ((LPCSTR)54)
+#define X509_NAME_CONSTRAINTS                ((LPCSTR)55)
+#define X509_POLICY_MAPPINGS                 ((LPCSTR)56)
+#define X509_POLICY_CONSTRAINTS              ((LPCSTR)57)
+#define X509_CROSS_CERT_DIST_POINTS          ((LPCSTR)58)
+#define CMC_DATA                             ((LPCSTR)59)
+#define CMC_RESPONSE                         ((LPCSTR)60)
+#define CMC_STATUS                           ((LPCSTR)61)
+#define CMC_ADD_EXTENSIONS                   ((LPCSTR)62)
+#define CMC_ADD_ATTRIBUTES                   ((LPCSTR)63)
+#define X509_CERTIFICATE_TEMPLATE            ((LPCSTR)64)
+#define PKCS7_SIGNER_INFO                    ((LPCSTR)500)
+#define CMS_SIGNER_INFO                      ((LPCSTR)501)
+
+/* encode/decode flags */
+#define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG           0x00008
+#define CRYPT_ENCODE_ALLOC_FLAG                                0x08000
+#define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
+#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \
+ CERT_RDN_ENABLE_T61_UNICODE_FLAG
+#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \
+ CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
+#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \
+ CERT_RDN_DISABLE_CHECK_TYPE_FLAG
+
+#define CRYPT_DECODE_NOCOPY_FLAG                               0x00001
+#define CRYPT_DECODE_TO_BE_SIGNED_FLAG                         0x00002
+#define CRYPT_DECODE_SHARE_OID_STRING_FLAG                     0x00004
+#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG           0x00008
+#define CRYPT_DECODE_ALLOC_FLAG                                0x08000
+#define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \
+ CERT_RDN_DISABLE_IE4_UTF8_FLAG
+
+#define CERT_STORE_SIGNATURE_FLAG     0x00000001
+#define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002
+#define CERT_STORE_REVOCATION_FLAG    0x00000004
+#define CERT_STORE_NO_CRL_FLAG        0x00010000
+#define CERT_STORE_NO_ISSUER_FLAG     0x00020000
+
+#define CERT_STORE_BASE_CRL_FLAG  0x00000100
+#define CERT_STORE_DELTA_CRL_FLAG 0x00000200
+
+/* subject types for CryptVerifyCertificateSignatureEx */
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL  3
+
+/* issuer types for CryptVerifyCertificateSignatureEx */
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT   2
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN  3
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL   4
+
+#define CRYPT_GET_URL_FROM_PROPERTY         0x00000001
+#define CRYPT_GET_URL_FROM_EXTENSION        0x00000002
+#define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004
+#define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE   0x00000008
+
+/* Certificate name string types and flags */
+#define CERT_SIMPLE_NAME_STR 1
+#define CERT_OID_NAME_STR    2
+#define CERT_X500_NAME_STR   3
+#define CERT_NAME_STR_SEMICOLON_FLAG           0x40000000
+#define CERT_NAME_STR_NO_PLUS_FLAG             0x20000000
+#define CERT_NAME_STR_NO_QUOTING_FLAG          0x10000000
+#define CERT_NAME_STR_CRLF_FLAG                0x08000000
+#define CERT_NAME_STR_COMMA_FLAG               0x04000000
+#define CERT_NAME_STR_REVERSE_FLAG             0x02000000
+#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000
+#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG  0x00020000
+#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG    0x00010000
+
+#define CERT_NAME_EMAIL_TYPE            1
+#define CERT_NAME_RDN_TYPE              2
+#define CERT_NAME_ATTR_TYPE             3
+#define CERT_NAME_SIMPLE_DISPLAY_TYPE   4
+#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
+#define CERT_NAME_DNS_TYPE              6
+#define CERT_NAME_URL_TYPE              7
+#define CERT_NAME_UPN_TYPE              8
+
+#define CERT_NAME_ISSUER_FLAG           0x00000001
+#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000
+
+/* CryptFormatObject flags */
+#define CRYPT_FORMAT_STR_MULTI_LINE 0x0001
+#define CRYPT_FORMAT_STR_NO_HEX     0x0010
+
+#define CRYPT_FORMAT_SIMPLE        0x0001
+#define CRYPT_FORMAT_X509          0x0002
+#define CRYPT_FORMAT_OID           0x0004
+#define CRYPT_FORMAT_RDN_SEMICOLON 0x0100
+#define CRYPT_FORMAT_RDN_CRLF      0x0200
+#define CRYPT_FORMAT_RDN_UNQUOTE   0x0400
+#define CRYPT_FORMAT_RDN_REVERSE   0x0800
+
+#define CRYPT_FORMAT_COMMA     0x1000
+#define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON
+#define CRYPT_FORMAT_CRLF      CRYPT_FORMAT_RDN_CRLF
+
+/* CryptQueryObject types and flags */
+#define CERT_QUERY_OBJECT_FILE 1
+#define CERT_QUERY_OBJECT_BLOB 2
+
+#define CERT_QUERY_CONTENT_CERT               1
+#define CERT_QUERY_CONTENT_CTL                2
+#define CERT_QUERY_CONTENT_CRL                3
+#define CERT_QUERY_CONTENT_SERIALIZED_STORE   4
+#define CERT_QUERY_CONTENT_SERIALIZED_CERT    5
+#define CERT_QUERY_CONTENT_SERIALIZED_CTL     6
+#define CERT_QUERY_CONTENT_SERIALIZED_CRL     7
+#define CERT_QUERY_CONTENT_PKCS7_SIGNED       8
+#define CERT_QUERY_CONTENT_PKCS7_UNSIGNED     9
+#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10
+#define CERT_QUERY_CONTENT_PKCS10             11
+#define CERT_QUERY_CONTENT_PFX                12
+#define CERT_QUERY_CONTENT_CERT_PAIR          13
+
+#define CERT_QUERY_CONTENT_FLAG_CERT      (1 << CERT_QUERY_CONTENT_CERT)
+#define CERT_QUERY_CONTENT_FLAG_CTL       (1 << CERT_QUERY_CONTENT_CTL)
+#define CERT_QUERY_CONTENT_FLAG_CRL       (1 << CERT_QUERY_CONTENT_CRL)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
+#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \
+ (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
+#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \
+ (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
+#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \
+ (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
+#define CERT_QUERY_CONTENT_FLAG_PKCS10    (1 << CERT_QUERY_CONTENT_PKCS10)
+#define CERT_QUERY_CONTENT_FLAG_PFX       (1 << CERT_QUERY_CONTENT_PFX)
+#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
+
+#define CERT_QUERY_CONTENT_FLAG_ALL \
+ CERT_QUERY_CONTENT_FLAG_CERT | \
+ CERT_QUERY_CONTENT_FLAG_CTL | \
+ CERT_QUERY_CONTENT_FLAG_CRL | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \
+ CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \
+ CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \
+ CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \
+ CERT_QUERY_CONTENT_FLAG_PKCS10 | \
+ CERT_QUERY_CONTENT_FLAG_PFX | \
+ CERT_QUERY_CONTENT_FLAG_CERT_PAIR
+
+#define CERT_QUERY_FORMAT_BINARY                1
+#define CERT_QUERY_FORMAT_BASE64_ENCODED        2
+#define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
+
+#define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
+#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \
+ (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
+#define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
+ (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
+
+#define CERT_QUERY_FORMAT_FLAG_ALL \
+ CERT_QUERY_FORMAT_FLAG_BINARY | \
+ CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \
+ CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
+
+#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001
+#define CERT_SET_KEY_CONTEXT_PROP_ID     0x00000001
+
+#define CERT_CREATE_SELFSIGN_NO_SIGN     1
+#define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
+
+/* flags for CryptAcquireCertificatePrivateKey */
+#define CRYPT_ACQUIRE_CACHE_FLAG         0x00000001
+#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002
+#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG   0x00000004
+#define CRYPT_ACQUIRE_SILENT_FLAG        0x00000040
+
+/* flags for CryptFindCertificateKeyProvInfo */
+#define CRYPT_FIND_USER_KEYSET_FLAG    0x00000001
+#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002
+#define CRYPT_FIND_SILENT_KEYSET_FLAG  0x00000040
+
+/* Chain engines and chains */
+typedef HANDLE HCERTCHAINENGINE;
+#define HCCE_CURRENT_USER  ((HCERTCHAINENGINE)NULL)
+#define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1)
+
+#define CERT_CHAIN_CACHE_END_CERT           0x00000001
+#define CERT_CHAIN_THREAD_STORE_SYNC        0x00000002
+#define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004
+#define CERT_CHAIN_USE_LOCAL_MACHINE_STORE  0x00000008
+#define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010
+#define CERT_CHAIN_ENABLE_SHARE_STORE       0x00000020
+
+typedef struct _CERT_CHAIN_ENGINE_CONFIG
+{
+    DWORD       cbSize;
+    HCERTSTORE  hRestrictedRoot;
+    HCERTSTORE  hRestrictedTrust;
+    HCERTSTORE  hRestrictedOther;
+    DWORD       cAdditionalStore;
+    HCERTSTORE *rghAdditionalStore;
+    DWORD       dwFlags;
+    DWORD       dwUrlRetrievalTimeout;
+    DWORD       MaximumCachedCertificates;
+    DWORD       CycleDetectionModulus;
+    HCERTSTORE  hExclusiveRoot;
+    HCERTSTORE  hExclusiveRootTrustedPeople;
+} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
+
+/* message-related definitions */
+
+typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData,
+ DWORD cbData, BOOL fFinal);
+
+#define CMSG_INDEFINITE_LENGTH 0xffffffff
+
+typedef struct _CMSG_STREAM_INFO
+{
+    DWORD cbContent;
+    PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
+    void *pvArg;
+} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;
+
+typedef struct _CERT_ISSUER_SERIAL_NUMBER
+{
+    CERT_NAME_BLOB     Issuer;
+    CRYPT_INTEGER_BLOB SerialNumber;
+} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;
+
+typedef struct _CERT_ID
+{
+    DWORD dwIdChoice;
+    union {
+        CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
+        CRYPT_HASH_BLOB           KeyId;
+        CRYPT_HASH_BLOB           HashId;
+    } DUMMYUNIONNAME;
+} CERT_ID, *PCERT_ID;
+
+#define CERT_ID_ISSUER_SERIAL_NUMBER 1
+#define CERT_ID_KEY_IDENTIFIER       2
+#define CERT_ID_SHA1_HASH            3
+
+#ifndef USE_WC_PREFIX
+#undef CMSG_DATA /* may be defined by sys/socket.h */
+#define CMSG_DATA                 1
+#define CMSG_SIGNED               2
+#define CMSG_ENVELOPED            3
+#define CMSG_SIGNED_AND_ENVELOPED 4
+#define CMSG_HASHED               5
+#define CMSG_ENCRYPTED            6
+
+#define CMSG_ALL_FLAGS                 ~0U
+#define CMSG_DATA_FLAG                 (1 << CMSG_DATA)
+#define CMSG_SIGNED_FLAG               (1 << CMSG_SIGNED)
+#define CMSG_ENVELOPED_FLAG            (1 << CMSG_ENVELOPED)
+#define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)
+#define CMSG_ENCRYPTED_FLAG            (1 << CMSG_ENCRYPTED)
+#else
+#define WC_CMSG_DATA                 1
+#define WC_CMSG_SIGNED               2
+#define WC_CMSG_ENVELOPED            3
+#define WC_CMSG_SIGNED_AND_ENVELOPED 4
+#define WC_CMSG_HASHED               5
+#define WC_CMSG_ENCRYPTED            6
+
+#define WC_CMSG_ALL_FLAGS                 ~0U
+#define WC_CMSG_DATA_FLAG                 (1 << WC_CMSG_DATA)
+#define WC_CMSG_SIGNED_FLAG               (1 << WC_CMSG_SIGNED)
+#define WC_CMSG_ENVELOPED_FLAG            (1 << WC_CMSG_ENVELOPED)
+#define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED)
+#define WC_CMSG_ENCRYPTED_FLAG            (1 << WC_CMSG_ENCRYPTED)
+#endif
+
+typedef struct _CMSG_SIGNER_ENCODE_INFO
+{
+    DWORD                      cbSize;
+    PCERT_INFO                 pCertInfo;
+    HCRYPTPROV                 hCryptProv;
+    DWORD                      dwKeySpec;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    void                      *pvHashAuxInfo;
+    DWORD                      cAuthAttr;
+    PCRYPT_ATTRIBUTE           rgAuthAttr;
+    DWORD                      cUnauthAttr;
+    PCRYPT_ATTRIBUTE           rgUnauthAttr;
+#ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
+    CERT_ID                    SignerId;
+    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+    void                      *pvHashEncryptionAuxInfo;
+#endif
+} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;
+
+typedef struct _CMSG_SIGNED_ENCODE_INFO
+{
+    DWORD                    cbSize;
+    DWORD                    cSigners;
+    PCMSG_SIGNER_ENCODE_INFO rgSigners;
+    DWORD                    cCertEncoded;
+    PCERT_BLOB               rgCertEncoded;
+    DWORD                    cCrlEncoded;
+    PCRL_BLOB                rgCrlEncoded;
+#ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
+    DWORD                    cAttrCertEncoded;
+    PCERT_BLOB               rgAttrCertEncoded;
+#endif
+} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO;
+
+typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
+{
+    DWORD                      cbSize;
+    CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+    void                      *pvKeyEncryptionAuxInfo;
+    HCRYPTPROV_LEGACY          hCryptProv;
+    CRYPT_BIT_BLOB             RecipientPublicKey;
+    CERT_ID                    RecipientId;
+} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
+
+typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO
+{
+    DWORD                       cbSize;
+    CRYPT_BIT_BLOB              RecipientPublicKey;
+    CERT_ID                     RecipientId;
+    FILETIME                    Date;
+    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
+ *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
+
+typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
+{
+    DWORD                      cbSize;
+    CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+    void                      *pvKeyEncryptionAuxInfo;
+    CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
+    void                      *pvKeyWrapAuxInfo;
+    HCRYPTPROV_LEGACY          hCryptProv;
+    DWORD                      dwKeySpec;
+    DWORD                      dwKeyChoice;
+    union {
+        PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
+        PCERT_ID                    pSenderId;
+    } DUMMYUNIONNAME;
+    CRYPT_DATA_BLOB            UserKeyingMaterial;
+    DWORD                      cRecipientEncryptedKeys;
+    PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
+} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
+
+#define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1
+#define CMSG_KEY_AGREE_STATIC_KEY_CHOICE    2
+
+typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
+{
+    DWORD                       cbSize;
+    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
+    void                       *pvKeyEncryptionAuxInfo;
+    HCRYPTPROV                  hCryptProv;
+    DWORD                       dwKeyChoice;
+    union {
+        HCRYPTKEY hKeyEncryptionKey;
+        void     *pvKeyEncryptionKey;
+    } DUMMYUNIONNAME;
+    CRYPT_DATA_BLOB             KeyId;
+    FILETIME                    Date;
+    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
+
+#define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
+
+typedef struct _CMSG_RECIPIENT_ENCODE_INFO
+{
+    DWORD dwRecipientChoice;
+    union {
+        PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
+        PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
+        PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
+    } DUMMYUNIONNAME;
+} CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO;
+
+#define CMSG_KEY_TRANS_RECIPIENT 1
+#define CMSG_KEY_AGREE_RECIPIENT 2
+#define CMSG_MAIL_LIST_RECIPIENT 3
+
+typedef struct _CMSG_ENVELOPED_ENCODE_INFO
+{
+    DWORD                       cbSize;
+    HCRYPTPROV_LEGACY           hCryptProv;
+    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
+    void                       *pvEncryptionAuxInfo;
+    DWORD                       cRecipients;
+    PCERT_INFO                 *rgpRecipientCert;
+#ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS
+    PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
+    DWORD                       cCertEncoded;
+    PCERT_BLOB                  rgCertEncoded;
+    DWORD                       cCrlEncoded;
+    PCRL_BLOB                   rgCrlEncoded;
+    DWORD                       cAttrCertEncoded;
+    PCERT_BLOB                  rgAttrCertEncoded;
+    DWORD                       cUnprotectedAttr;
+    PCRYPT_ATTRIBUTE            rgUnprotectedAttr;
+#endif
+} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;
+
+typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO
+{
+    DWORD                      cbSize;
+    CMSG_SIGNED_ENCODE_INFO    SignedInfo;
+    CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;
+} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,
+ *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
+
+typedef struct _CMSG_HASHED_ENCODE_INFO
+{
+    DWORD                      cbSize;
+    HCRYPTPROV_LEGACY          hCryptProv;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    void                      *pvHashAuxInfo;
+} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO;
+
+typedef struct _CMSG_ENCRYPTED_ENCODE_INFO
+{
+    DWORD                      cbSize;
+    CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+    void                      *pvEncryptionAuxInfo;
+} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO;
+
+#define CMSG_BARE_CONTENT_FLAG             0x00000001
+#define CMSG_LENGTH_ONLY_FLAG              0x00000002
+#define CMSG_DETACHED_FLAG                 0x00000004
+#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008
+#define CMSG_CONTENTS_OCTETS_FLAG          0x00000010
+#define CMSG_MAX_LENGTH_FLAG               0x00000020
+#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040
+#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG    0x00008000
+
+#define CMSG_CTRL_VERIFY_SIGNATURE       1
+#define CMSG_CTRL_DECRYPT                2
+#define CMSG_CTRL_VERIFY_HASH            5
+#define CMSG_CTRL_ADD_SIGNER             6
+#define CMSG_CTRL_DEL_SIGNER             7
+#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
+#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
+#define CMSG_CTRL_ADD_CERT               10
+#define CMSG_CTRL_DEL_CERT               11
+#define CMSG_CTRL_ADD_CRL                12
+#define CMSG_CTRL_DEL_CRL                13
+#define CMSG_CTRL_ADD_ATTR_CERT          14
+#define CMSG_CTRL_DEL_ATTR_CERT          15
+#define CMSG_CTRL_KEY_TRANS_DECRYPT      16
+#define CMSG_CTRL_KEY_AGREE_DECRYPT      17
+#define CMSG_CTRL_MAIL_LIST_DECRYPT      18
+#define CMSG_CTRL_VERIFY_SIGNATURE_EX    19
+#define CMSG_CTRL_ADD_CMS_SIGNER_INFO    20
+
+typedef struct _CMSG_CTRL_DECRYPT_PARA
+{
+    DWORD      cbSize;
+    HCRYPTPROV hCryptProv;
+    DWORD      dwKeySpec;
+    DWORD      dwRecipientIndex;
+} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;
+
+typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
+{
+    DWORD           cbSize;
+    DWORD           dwSignerIndex;
+    CRYPT_DATA_BLOB blob;
+} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,
+ *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
+
+typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA
+{
+    DWORD           cbSize;
+    DWORD           dwSignerIndex;
+    DWORD           dwUnauthAttrIndex;
+} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,
+ *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
+
+typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
+    DWORD      cbSize;
+    HCRYPTPROV hCryptProv;
+    DWORD      dwSignerIndex;
+    DWORD      dwSignerType;
+    void      *pvSigner;
+} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
+
+#define CMSG_VERIFY_SIGNER_PUBKEY 1
+#define CMSG_VERIFY_SIGNER_CERT   2
+#define CMSG_VERIFY_SIGNER_CHAIN  3
+#define CMSG_VERIFY_SIGNER_NULL   4
+
+#define CMSG_TYPE_PARAM                  1
+#define CMSG_CONTENT_PARAM               2
+#define CMSG_BARE_CONTENT_PARAM          3
+#define CMSG_INNER_CONTENT_TYPE_PARAM    4
+#define CMSG_SIGNER_COUNT_PARAM          5
+#define CMSG_SIGNER_INFO_PARAM           6
+#define CMSG_SIGNER_CERT_INFO_PARAM      7
+#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8
+#define CMSG_SIGNER_AUTH_ATTR_PARAM      9
+#define CMSG_SIGNER_UNAUTH_ATTR_PARAM    10
+#define CMSG_CERT_COUNT_PARAM            11
+#define CMSG_CERT_PARAM                  12
+#define CMSG_CRL_COUNT_PARAM             13
+#define CMSG_CRL_PARAM                   14
+#define CMSG_ENVELOPE_ALGORITHM_PARAM    15
+#define CMSG_RECIPIENT_COUNT_PARAM       17
+#define CMSG_RECIPIENT_INDEX_PARAM       18
+#define CMSG_RECIPIENT_INFO_PARAM        19
+#define CMSG_HASH_ALGORITHM_PARAM        20
+#define CMSG_HASH_DATA_PARAM             21
+#define CMSG_COMPUTED_HASH_PARAM         22
+#define CMSG_ENCRYPT_PARAM               26
+#define CMSG_ENCRYPTED_DIGEST            27
+#define CMSG_ENCODED_SIGNER              28
+#define CMSG_ENCODED_MESSAGE             29
+#define CMSG_VERSION_PARAM               30
+#define CMSG_ATTR_CERT_COUNT_PARAM       31
+#define CMSG_ATTR_CERT_PARAM             32
+#define CMSG_CMS_RECIPIENT_COUNT_PARAM   33
+#define CMSG_CMS_RECIPIENT_INDEX_PARAM   34
+#define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35
+#define CMSG_CMS_RECIPIENT_INFO_PARAM    36
+#define CMSG_UNPROTECTED_ATTR_PARAM      37
+#define CMSG_SIGNER_CERT_ID_PARAM        38
+#define CMSG_CMS_SIGNER_INFO_PARAM       39
+
+typedef struct _CMSG_CMS_SIGNER_INFO {
+    DWORD                      dwVersion;
+    CERT_ID                    SignerId;
+    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+    CRYPT_DATA_BLOB            EncryptedHash;
+    CRYPT_ATTRIBUTES           AuthAttrs;
+    CRYPT_ATTRIBUTES           UnauthAttrs;
+} CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO;
+
+typedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR;
+
+#define CMSG_SIGNED_DATA_V1               1
+#define CMSG_SIGNED_DATA_V3               3
+#define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1
+#define CMSG_SIGNED_DATA_CMS_VERSION      CMSG_SIGNED_DATA_V3
+
+#define CMSG_SIGNER_INFO_V1               1
+#define CMSG_SIGNER_INFO_V3               3
+#define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1
+#define CMSG_SIGNER_INFO_CMS_VERSION      CMSG_SIGNER_INFO_V3
+
+#define CMSG_HASHED_DATA_V0               0
+#define CMSG_HASHED_DATA_V2               2
+#define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0
+#define CMSG_HASHED_DATA_CMS_VERSION      CMSG_HASHED_DATA_V2
+
+#define CMSG_ENVELOPED_DATA_V0               0
+#define CMSG_ENVELOPED_DATA_V2               2
+#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0
+#define CMSG_ENVELOPED_DATA_CMS_VERSION      CMSG_ENVELOPED_DATA_V2
+
+typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
+    DWORD                      dwVersion;
+    CERT_ID                    RecipientId;
+    CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+    CRYPT_DATA_BLOB            EncryptedKey;
+} CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO;
+
+typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
+    CERT_ID                     RecipientId;
+    CRYPT_DATA_BLOB             EncryptedKey;
+    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
+
+typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
+    DWORD                               dwVersion;
+    DWORD                               dwOriginatorChoice;
+    union {
+        CERT_ID              OriginatorCertId;
+        CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
+    } DUMMYUNIONNAME;
+    CRYPT_ALGORITHM_IDENTIFIER          UserKeyingMaterial;
+    DWORD                               cRecipientEncryptedKeys;
+    PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;
+} CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO;
+
+#define CMSG_KEY_AGREE_ORIGINATOR_CERT       1
+#define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2
+
+typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
+    DWORD                       dwVersion;
+    CRYPT_DATA_BLOB             KeyId;
+    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
+    CRYPT_DATA_BLOB             EncryptedKey;
+    FILETIME                    Date;
+    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO;
+
+typedef struct _CMSG_CMS_RECIPIENT_INFO {
+    DWORD dwRecipientChoice;
+    union {
+        PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
+        PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
+        PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
+    } DUMMYUNIONNAME;
+} CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO;
+
+#define CMSG_ENVELOPED_RECIPIENT_V0     0
+#define CMSG_ENVELOPED_RECIPIENT_V2     2
+#define CMSG_ENVELOPED_RECIPIENT_V3     3
+#define CMSG_ENVELOPED_RECIPIENT_V4     4
+#define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0
+#define CMSG_KEY_TRANS_CMS_VERSION      CMSG_ENVELOPED_RECIPIENT_V2
+#define CMSG_KEY_AGREE_VERSION          CMSG_ENVELOPED_RECIPIENT_V3
+#define CMSG_MAIL_LIST_VERSION          CMSG_ENVELOPED_RECIPIENT_V4
+
+typedef void * (WINAPI *PFN_CMSG_ALLOC)(size_t cb);
+typedef void   (WINAPI *PFN_CMSG_FREE)(void *pv);
+
+typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
+    DWORD                       cbSize;
+    HCRYPTPROV                  hCryptProv;
+    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
+    void                       *pvEncryptionAuxInfo;
+    DWORD                       cRecipients;
+    PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
+    PFN_CMSG_ALLOC              pfnAlloc;
+    PFN_CMSG_FREE               pfnFree;
+    DWORD                       dwEncryptFlags;
+    HCRYPTKEY                   hContentEncryptKey;
+    DWORD                       dwFlags;
+} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;
+
+typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
+    DWORD                       cbSize;
+    DWORD                       dwRecipientIndex;
+    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;
+    CRYPT_DATA_BLOB             EncryptedKey;
+    DWORD                       dwFlags;
+} CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO;
+
+typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
+    DWORD                          cbSize;
+    HCRYPTPROV                     hCryptProv;
+    DWORD                          dwKeySpec;
+    PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
+    DWORD                          dwRecipientIndex;
+} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
+
+typedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(
+ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags,
+ void *pvReserved);
+
+typedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(
+ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
+ PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,
+ PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,
+ DWORD dwFlags, void *pvReserved);
+
+typedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(
+ PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
+ PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags,
+ void *pvReserved, HCRYPTKEY *phContentEncryptKey);
+
+/* CryptMsgGetAndVerifySigner flags */
+#define CMSG_TRUSTED_SIGNER_FLAG   0x1
+#define CMSG_SIGNER_ONLY_FLAG      0x2
+#define CMSG_USE_SIGNER_INDEX_FLAG 0x4
+
+/* CryptMsgSignCTL flags */
+#define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000
+
+/* CryptMsgEncodeAndSignCTL flags */
+#define CMSG_ENCODED_SORTED_CTL_FLAG               0x1
+#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
+
+/* PFXImportCertStore flags */
+#define CRYPT_USER_KEYSET           0x00001000
+#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
+/* PFXExportCertStore flags */
+#define REPORT_NO_PRIVATE_KEY                 0x00000001
+#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002
+#define EXPORT_PRIVATE_KEYS                   0x00000004
+#define PKCS12_EXPORT_RESERVED_MASK           0xffff0000
+
+/* function declarations */
+/* advapi32.dll */
+WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);
+WINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD);
+#define               CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
+WINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *);
+WINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *);
+WINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *);
+WINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH);
+WINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY);
+WINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *);
+WINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
+WINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
+#define               CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
+WINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
+WINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
+#define               CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
+WINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *);
+WINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *);
+WINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *);
+#define               CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
+WINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, const BYTE *, DWORD, DWORD);
+WINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD);
+WINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, const BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, ULONG_PTR);
+WINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, const BYTE *, DWORD);
+WINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, const BYTE *, DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD);
+#define               CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
+WINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD);
+#define               CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
+WINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, const BYTE *, DWORD);
+WINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *);
+WINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *);
+#define               CryptSignHash WINELIB_NAME_AW(CryptSignHash)
+WINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD);
+WINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD);
+#define               CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
+
+/* crypt32.dll functions */
+LPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1);
+LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2);
+VOID   WINAPI CryptMemFree(LPVOID pv);
+
+BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary,
+ DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
+BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary,
+ DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);
+#define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString)
+
+BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,
+ DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
+ DWORD *pdwSkip, DWORD *pdwFlags);
+BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,
+ DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
+ DWORD *pdwSkip, DWORD *pdwFlags);
+#define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary)
+
+BOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync);
+BOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
+ LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
+BOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
+ LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
+BOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);
+
+BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR);
+BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);
+BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
+                                     LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType,
+                                     BYTE *pbValueData, DWORD *pcbValueData);
+BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
+                                     LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType,
+                                     const BYTE *pbValueData, DWORD cbValueData);
+BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR);
+BOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR);
+BOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
+ LPCSTR pszOID, DWORD dwFlags, void *pvArg,
+ PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
+HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD);
+BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,
+ DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList);
+BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
+ DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,
+ HCRYPTOIDFUNCADDR *phFuncAddr);
+BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
+ DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr,
+ HCRYPTOIDFUNCADDR *phFuncAddr);
+BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,
+ DWORD dwFlags);
+BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,
+ DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry,
+ const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);
+BOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,
+ DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags,
+ void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);
+BOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,
+ DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg,
+ PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
+PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
+ DWORD dwGroupId);
+BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags);
+BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);
+
+LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);
+
+LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);
+DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);
+
+/* cert store functions */
+HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,
+ HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);
+
+HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv,
+ LPCSTR szSubSystemProtocol);
+HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv,
+ LPCWSTR szSubSystemProtocol);
+#define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
+
+PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pPrev);
+
+PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,
+ PCCRL_CONTEXT pPrev);
+
+PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,
+ PCCTL_CONTEXT pPrev);
+
+BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg,
+ PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
+
+BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
+ void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
+
+BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
+ void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
+
+BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
+ LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);
+
+BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
+             DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);
+
+BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
+ HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
+
+void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,
+ HCERTSTORE hSiblingStore);
+
+BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,
+ HCERTCHAINENGINE *phChainEngine);
+
+BOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
+
+VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
+
+BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
+ PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
+ PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,
+ PCCERT_CHAIN_CONTEXT *ppChainContext);
+
+PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(
+ PCCERT_CHAIN_CONTEXT pChainContext);
+
+VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
+
+PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
+
+BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID,
+ PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara,
+ PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
+
+DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,
+ DWORD dwPropId);
+
+BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
+ DWORD dwPropId, void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
+ DWORD dwPropId, DWORD dwFlags, const void *pvData);
+
+DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext,
+ DWORD dwPropId);
+
+BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
+ DWORD dwPropId, void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
+ DWORD dwPropId, DWORD dwFlags, const void *pvData);
+
+DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId);
+
+BOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext,
+ void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier,
+ PCRYPT_DER_BLOB pEncodedAttributes);
+
+BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId, void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId, DWORD dwFlags, const void *pvData);
+
+BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
+ void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,
+ DWORD dwCtrlType, void const *pvCtrlPara);
+
+HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);
+
+BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );
+
+BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );
+
+BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext );
+
+BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext );
+
+BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
+ PCCERT_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore,
+ PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
+ PCCRL_CONTEXT *ppStoreContext );
+
+BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore,
+ PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
+ PCCTL_CONTEXT *ppStoreContext );
+
+BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
+ PCCERT_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,
+ PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
+ PCCRL_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,
+ PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
+ PCCTL_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded,
+ DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
+
+BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName,
+ const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName,
+ const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+#define CertAddEncodedCertificateToSystemStore \
+ WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore)
+
+BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,
+ DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
+
+BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,
+ DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded,
+ DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
+
+BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,
+ const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags,
+ DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext);
+
+BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,
+ PCERT_INFO pCertId1, PCERT_INFO pCertId2);
+BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,
+ PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);
+BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,
+ PCRYPT_INTEGER_BLOB pInt2);
+BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,
+ PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);
+DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,
+ PCERT_PUBLIC_KEY_INFO pPublicKey);
+
+const void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
+ PCERT_CREATE_CONTEXT_PARA pCreatePara);
+
+PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
+ const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+
+PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
+  const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
+
+PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
+ const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
+
+PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,
+ PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags,
+ PCRYPT_KEY_PROV_INFO pKeyProvInfo,
+ PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime,
+ PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);
+
+BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
+
+BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
+
+BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
+
+PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(
+ PCCERT_CONTEXT pCertContext);
+
+PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);
+
+PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);
+
+PCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext );
+
+PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);
+
+PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);
+
+PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext,
+ DWORD *pdwFlags);
+
+PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, PCERT_INFO pCertId);
+
+PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);
+
+BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+
+BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+
+BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+
+BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,
+ PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);
+
+BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags,
+ PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);
+BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,
+ PCERT_ENHKEY_USAGE pUsage);
+BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
+ LPCSTR pszUsageIdentifier);
+BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
+ LPCSTR pszUsageIdentifier);
+BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts,
+ int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);
+
+BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
+BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara,
+ void *pvEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo,
+ DWORD *pcbStructInfo);
+BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
+ PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
+
+BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType,
+ DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType,
+ const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);
+
+BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
+ DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
+ DWORD *pcbComputedHash);
+
+BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
+ DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo,
+ BYTE *pbComputedHash, DWORD *pcbComputedHash);
+
+BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType,
+ const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
+ DWORD *pcbComputedHash);
+
+BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject,
+ DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags,
+ DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType,
+ DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg,
+ const void** ppvContext);
+
+BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned,
+ DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+ const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);
+
+BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,
+ DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+ const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded,
+ PCERT_PUBLIC_KEY_INFO pPublicKey);
+
+BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject,
+ DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved);
+
+PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr,
+ CRYPT_ATTRIBUTE rgAttr[]);
+PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions,
+ CERT_EXTENSION rgExtensions[]);
+PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName);
+
+BOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,
+ PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved,
+ PCRYPT_DER_BLOB pEncodedAttributes);
+
+BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,
+ DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);
+
+BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,
+ PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);
+BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,
+ PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved,
+ PCRL_ENTRY *ppCrlEntry);
+BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,
+ PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);
+
+BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,
+ PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);
+
+LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,
+ PCRL_INFO pCrlInfo);
+LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,
+ PCERT_INFO pCertInfo);
+BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,
+ PCERT_INFO pIssuerInfo);
+
+BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType,
+ void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags,
+ PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
+ PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
+
+BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType,
+ DWORD cContext, PVOID rgpvContext[], DWORD dwFlags,
+ PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);
+
+BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+BOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags,
+ void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,
+ DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);
+BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,
+ DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg,
+ DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);
+
+BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,
+ DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec,
+ BOOL *pfCallerFreeProv);
+
+BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,
+ DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,
+ DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
+ CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
+
+BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr,
+ DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
+ CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
+
+DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType,
+ DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);
+DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,
+ DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);
+#define CertGetNameString WINELIB_NAME_AW(CertGetNameString)
+
+DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
+ LPSTR psz, DWORD csz);
+DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
+ LPWSTR psz, DWORD csz);
+#define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr)
+
+DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
+ DWORD dwStrType, LPSTR psz, DWORD csz);
+DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
+ DWORD dwStrType, LPWSTR psz, DWORD csz);
+#define CertNameToStr WINELIB_NAME_AW(CertNameToStr)
+
+BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,
+ DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
+ LPCSTR *ppszError);
+BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,
+ DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
+ LPCWSTR *ppszError);
+#define CertStrToName WINELIB_NAME_AW(CertStrToName)
+
+DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,
+ DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo,
+ LPSTR pszInnerContentObjID, DWORD cbData);
+
+BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);
+
+BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags,
+ DWORD dwCtrlType, const void *pvCtrlPara);
+
+BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex,
+ DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
+
+BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo,
+ DWORD cbSignerInfo, DWORD cCountersigners,
+ PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature,
+ PDWORD pcbCountersignature);
+
+HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);
+
+BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,
+ PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
+ BYTE *pbEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore,
+ HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner,
+ DWORD *pdwSignerIndex);
+
+BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
+ DWORD dwIndex, void *pvData, DWORD *pcbData);
+
+HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
+ DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo,
+ PCMSG_STREAM_INFO pStreamInfo);
+
+HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags,
+ DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID,
+ PCMSG_STREAM_INFO pStreamInfo);
+
+BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent,
+ DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
+ BYTE *pbEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,
+ DWORD cbData, BOOL fFinal);
+
+BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
+ PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
+ PCERT_INFO pciCountersigner);
+
+BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
+ PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
+ DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
+ BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[],
+ DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
+BOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,
+ const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob,
+ DWORD *pcbSignedBlob);
+
+BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
+ DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,
+ BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert);
+BOOL WINAPI CryptVerifyMessageSignatureWithKey(
+ PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
+ PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob,
+ DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);
+
+BOOL WINAPI CryptVerifyDetachedMessageSignature(
+ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
+ const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned,
+ const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[],
+ PCCERT_CONTEXT *ppSignerCert);
+LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,
+ const BYTE *pbSignedBlob, DWORD cbSignedBlob);
+
+BOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
+ DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[],
+ const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob,
+ DWORD *pcbEncryptedBlob);
+BOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
+ const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
+ DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);
+
+BOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
+ PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert,
+ PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted,
+ DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob,
+ DWORD *pcbSignedAndEncryptedBlob);
+BOOL WINAPI CryptDecryptAndVerifyMessageSignature(
+ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
+ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
+ const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
+ DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
+
+HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,
+ HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob,
+ DWORD cbSignedBlob);
+
+BOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,
+ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
+ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
+ const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType,
+ DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded,
+ DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
+
+BOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,
+ BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[],
+ DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob,
+ BYTE *pbComputedHash, DWORD *pcbComputedHash);
+BOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
+ BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed,
+ DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
+ BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed,
+ const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash,
+ DWORD *pcbComputedHash);
+
+/* PFX functions */
+HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
+ DWORD dwFlags);
+BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
+BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
+ DWORD dwFlags);
+BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
+ LPCWSTR szPassword, void *pvReserved, DWORD dwFlags);
+BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
+ LPCWSTR szPassword, DWORD dwFlags);
+BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
+ DWORD dwFlags);
+
+/* cryptnet.dll functions */
+BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
+
+BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags,
+ PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo,
+ DWORD *pcbUrlInfo, LPVOID pvReserved);
+
+BOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara,
+ PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout,
+ void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved);
+
+BOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara,
+ PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,
+ const void *pvArg, DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid,
+ DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
+ HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
+ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid,
+ DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
+ HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
+ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+#define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl)
+
+/* Not found in crypt32.dll but in softpub.dll */
+HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains,
+ DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName,
+ LPCWSTR pwszPurpose, DWORD dwKeySpec);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h
new file mode 100644
index 0000000..e09584a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h
@@ -0,0 +1,425 @@
+/*
+ * Basic types definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINDEF_
+#define _WINDEF_
+
+#ifndef WINVER
+#define WINVER 0x0500
+#endif
+
+#ifndef NO_STRICT
+# ifndef STRICT
+#  define STRICT
+# endif /* STRICT */
+#endif /* NO_STRICT */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Calling conventions definitions */
+
+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__aarch64__)) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+#ifndef _WIN64
+# if defined(__i386__) && !defined(_X86_)
+#  define _X86_
+# endif
+# if defined(_X86_) && !defined(__i386__)
+#  define __i386__
+# endif
+#endif
+
+#ifndef __stdcall
+# ifdef __i386__
+#  ifdef __GNUC__
+#   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)
+#    define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))
+#   else
+#    define __stdcall __attribute__((__stdcall__))
+#   endif
+#  elif defined(_MSC_VER)
+    /* Nothing needs to be done. __stdcall already exists */
+#  else
+#   error You need to define __stdcall for your compiler
+#  endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+#  define __stdcall __attribute__((ms_abi))
+# else  /* __i386__ */
+#  define __stdcall
+# endif  /* __i386__ */
+#endif /* __stdcall */
+
+#ifndef __cdecl
+# if defined(__i386__) && defined(__GNUC__)
+#   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)
+#   define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
+#  else
+#   define __cdecl __attribute__((__cdecl__))
+#  endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+#  define __cdecl __attribute__((ms_abi))
+# elif !defined(_MSC_VER)
+#  define __cdecl
+# endif
+#endif /* __cdecl */
+
+#ifndef __ms_va_list
+# if defined(__x86_64__) && defined (__GNUC__)
+#  define __ms_va_list __builtin_ms_va_list
+#  define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
+#  define __ms_va_end(list) __builtin_ms_va_end(list)
+# else
+#  define __ms_va_list va_list
+#  define __ms_va_start(list,arg) va_start(list,arg)
+#  define __ms_va_end(list) va_end(list)
+# endif
+#endif
+
+#ifdef __WINESRC__
+#define __ONLY_IN_WINELIB(x)	do_not_use_this_in_wine
+#else
+#define __ONLY_IN_WINELIB(x)	x
+#endif
+
+#ifndef pascal
+#define pascal      __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _pascal
+#define _pascal	    __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _stdcall
+#define _stdcall    __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _fastcall
+#define _fastcall   __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __fastcall
+#define __fastcall  __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __export
+#define __export    __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef cdecl
+#define cdecl       __ONLY_IN_WINELIB(__cdecl)
+#endif
+#ifndef _cdecl
+#define _cdecl      __ONLY_IN_WINELIB(__cdecl)
+#endif
+
+#ifndef near
+#define near        __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef far
+#define far         __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef _near
+#define _near       __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef _far
+#define _far        __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef NEAR
+#define NEAR        __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef FAR
+#define FAR         __ONLY_IN_WINELIB(/* nothing */)
+#endif
+
+#ifndef _MSC_VER
+# ifndef _declspec
+#  define _declspec(x)    __ONLY_IN_WINELIB(/* nothing */)
+# endif
+# ifndef __declspec
+#  define __declspec(x)   __ONLY_IN_WINELIB(/* nothing */)
+# endif
+#endif
+
+#ifdef _MSC_VER
+# define inline __inline
+#endif
+
+#define CALLBACK    __stdcall
+#define WINAPI      __stdcall
+#define APIPRIVATE  __stdcall
+#define PASCAL      __stdcall
+#define CDECL       __cdecl
+#define _CDECL      __cdecl
+#define WINAPIV     __cdecl
+#define APIENTRY    WINAPI
+#define CONST       __ONLY_IN_WINELIB(const)
+
+/* Misc. constants. */
+
+#undef NULL
+#ifdef __cplusplus
+#define NULL  0
+#else
+#define NULL  ((void*)0)
+#endif
+
+#ifdef FALSE
+#undef FALSE
+#endif
+#define FALSE 0
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#define TRUE  1
+
+#ifndef IN
+#define IN
+#endif
+
+#ifndef OUT
+#define OUT
+#endif
+
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+/* Standard data types */
+
+typedef void                                   *LPVOID;
+typedef const void                             *LPCVOID;
+typedef int             BOOL,       *PBOOL,    *LPBOOL;
+typedef unsigned char   BYTE,       *PBYTE,    *LPBYTE;
+typedef unsigned char   UCHAR,      *PUCHAR;
+typedef unsigned short  WORD,       *PWORD,    *LPWORD;
+typedef unsigned short  USHORT,     *PUSHORT;
+typedef int             INT,        *PINT,     *LPINT;
+typedef unsigned int    UINT,       *PUINT;
+typedef float           FLOAT,      *PFLOAT;
+typedef char                        *PSZ;
+#ifdef _MSC_VER
+typedef long                                   *LPLONG;
+typedef unsigned long   DWORD,      *PDWORD,   *LPDWORD;
+typedef unsigned long   ULONG,      *PULONG;
+#else
+typedef int                                    *LPLONG;
+typedef unsigned int    DWORD,      *PDWORD,   *LPDWORD;
+typedef unsigned int    ULONG,      *PULONG;
+#endif
+
+/* Macros to map Winelib names to the correct implementation name */
+/* Note that Winelib is purely Win32.                             */
+
+#ifdef __WINESRC__
+#define WINE_NO_UNICODE_MACROS 1
+#define WINE_STRICT_PROTOTYPES 1
+#endif
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define WINELIB_NAME_AW(func) \
+    func##_must_be_suffixed_with_W_or_A_in_this_context \
+    func##_must_be_suffixed_with_W_or_A_in_this_context
+#else  /* WINE_NO_UNICODE_MACROS */
+# ifdef UNICODE
+#  define WINELIB_NAME_AW(func) func##W
+# else
+#  define WINELIB_NAME_AW(func) func##A
+# endif
+#endif  /* WINE_NO_UNICODE_MACROS */
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_TYPE_AW(type)  /* nothing */
+#else
+# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;
+#endif
+
+#include <winnt.h>
+
+/* Polymorphic types */
+
+typedef UINT_PTR        WPARAM;
+typedef LONG_PTR        LPARAM;
+typedef LONG_PTR        LRESULT;
+
+/* Integer types */
+
+typedef WORD            ATOM;
+typedef DWORD           COLORREF, *LPCOLORREF;
+
+
+/* Handle types */
+
+typedef int HFILE;
+DECLARE_HANDLE(HACCEL);
+DECLARE_HANDLE(HBITMAP);
+DECLARE_HANDLE(HBRUSH);
+DECLARE_HANDLE(HCOLORSPACE);
+DECLARE_HANDLE(HDC);
+DECLARE_HANDLE(HDESK);
+DECLARE_HANDLE(HENHMETAFILE);
+DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HGLRC);
+DECLARE_HANDLE(HHOOK);
+DECLARE_HANDLE(HICON);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HKEY);
+typedef HKEY *PHKEY;
+DECLARE_HANDLE(HKL);
+DECLARE_HANDLE(HMENU);
+DECLARE_HANDLE(HMETAFILE);
+DECLARE_HANDLE(HMONITOR);
+DECLARE_HANDLE(HPALETTE);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HRSRC);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HWINEVENTHOOK);
+DECLARE_HANDLE(HWINSTA);
+DECLARE_HANDLE(HWND);
+
+/* Handle types that must remain interchangeable even with strict on */
+
+typedef HINSTANCE HMODULE;
+typedef HANDLE HGDIOBJ;
+typedef HANDLE HGLOBAL;
+typedef HANDLE HLOCAL;
+typedef HANDLE GLOBALHANDLE;
+typedef HANDLE LOCALHANDLE;
+typedef HICON HCURSOR;
+
+/* Callback function pointers types */
+
+#ifdef WINE_STRICT_PROTOTYPES
+typedef INT_PTR (CALLBACK *FARPROC)(void);
+typedef INT_PTR (CALLBACK *NEARPROC)(void);
+typedef INT_PTR (CALLBACK *PROC)(void);
+#else
+typedef INT_PTR (CALLBACK *FARPROC)();
+typedef INT_PTR (CALLBACK *NEARPROC)();
+typedef INT_PTR (CALLBACK *PROC)();
+#endif
+
+/* Macros to split words and longs. */
+
+#define LOBYTE(w)              ((BYTE)((DWORD_PTR)(w) & 0xFF))
+#define HIBYTE(w)              ((BYTE)((DWORD_PTR)(w) >> 8))
+
+#define LOWORD(l)              ((WORD)((DWORD_PTR)(l) & 0xFFFF))
+#define HIWORD(l)              ((WORD)((DWORD_PTR)(l) >> 16))
+
+#define MAKEWORD(low,high)     ((WORD)(((BYTE)((DWORD_PTR)(low) & 0xFF)) | ((WORD)((BYTE)((DWORD_PTR)(high) & 0xFF))) << 8))
+#define MAKELONG(low,high)     ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))
+
+/* min and max macros */
+#ifndef NOMINMAX
+#ifndef max
+#define max(a,b)   (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a,b)   (((a) < (b)) ? (a) : (b))
+#endif
+#endif  /* NOMINMAX */
+
+#ifdef MAX_PATH /* Work-around for Mingw */ 
+#undef MAX_PATH
+#endif /* MAX_PATH */
+
+#define MAX_PATH        260
+#define HFILE_ERROR     ((HFILE)-1)
+
+/* The SIZE structure */
+typedef struct tagSIZE
+{
+    LONG cx;
+    LONG cy;
+} SIZE, *PSIZE, *LPSIZE;
+
+typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
+
+/* The POINT structure */
+typedef struct tagPOINT
+{
+    LONG  x;
+    LONG  y;
+} POINT, *PPOINT, *LPPOINT;
+
+typedef struct _POINTL
+{
+    LONG x;
+    LONG y;
+} POINTL, *PPOINTL;
+
+/* The POINTS structure */
+
+typedef struct tagPOINTS
+{
+#ifdef WORDS_BIGENDIAN
+    SHORT y;
+    SHORT x;
+#else
+    SHORT x;
+    SHORT y;
+#endif
+} POINTS, *PPOINTS, *LPPOINTS;
+
+typedef struct _FILETIME {
+#ifdef WORDS_BIGENDIAN
+    DWORD  dwHighDateTime;
+    DWORD  dwLowDateTime;
+#else
+    DWORD  dwLowDateTime;
+    DWORD  dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#define _FILETIME_
+
+/* The RECT structure */
+typedef struct tagRECT
+{
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECT, *PRECT, *LPRECT;
+typedef const RECT *LPCRECT;
+
+typedef struct _RECTL
+{
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECTL, *PRECTL, *LPRECTL;
+
+typedef const RECTL *LPCRECTL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDEF_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h
new file mode 100644
index 0000000..f4942d8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h
@@ -0,0 +1,666 @@
+/*
+ * DNS support
+ *
+ * Copyright (C) 2006 Matthew Kehrer
+ * 
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDNS_H
+#define __WINE_WINDNS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DNS_TYPE_ZERO       0x0000
+#define DNS_TYPE_A          0x0001
+#define DNS_TYPE_NS         0x0002
+#define DNS_TYPE_MD         0x0003
+#define DNS_TYPE_MF         0x0004
+#define DNS_TYPE_CNAME      0x0005
+#define DNS_TYPE_SOA        0x0006
+#define DNS_TYPE_MB         0x0007
+#define DNS_TYPE_MG         0x0008
+#define DNS_TYPE_MR         0x0009
+#define DNS_TYPE_NULL       0x000a
+#define DNS_TYPE_WKS        0x000b
+#define DNS_TYPE_PTR        0x000c
+#define DNS_TYPE_HINFO      0x000d
+#define DNS_TYPE_MINFO      0x000e
+#define DNS_TYPE_MX         0x000f
+#define DNS_TYPE_TEXT       0x0010
+#define DNS_TYPE_RP         0x0011
+#define DNS_TYPE_AFSDB      0x0012
+#define DNS_TYPE_X25        0x0013
+#define DNS_TYPE_ISDN       0x0014
+#define DNS_TYPE_RT         0x0015
+#define DNS_TYPE_NSAP       0x0016
+#define DNS_TYPE_NSAPPTR    0x0017
+#define DNS_TYPE_SIG        0x0018
+#define DNS_TYPE_KEY        0x0019
+#define DNS_TYPE_PX         0x001a
+#define DNS_TYPE_GPOS       0x001b
+#define DNS_TYPE_AAAA       0x001c
+#define DNS_TYPE_LOC        0x001d
+#define DNS_TYPE_NXT        0x001e
+#define DNS_TYPE_EID        0x001f
+#define DNS_TYPE_NIMLOC     0x0020
+#define DNS_TYPE_SRV        0x0021
+#define DNS_TYPE_ATMA       0x0022
+#define DNS_TYPE_NAPTR      0x0023
+#define DNS_TYPE_KX         0x0024
+#define DNS_TYPE_CERT       0x0025
+#define DNS_TYPE_A6         0x0026
+#define DNS_TYPE_DNAME      0x0027
+#define DNS_TYPE_SINK       0x0028
+#define DNS_TYPE_OPT        0x0029
+#define DNS_TYPE_UINFO      0x0064
+#define DNS_TYPE_UID        0x0065
+#define DNS_TYPE_GID        0x0066
+#define DNS_TYPE_UNSPEC     0x0067
+#define DNS_TYPE_ADDRS      0x00f8
+#define DNS_TYPE_TKEY       0x00f9
+#define DNS_TYPE_TSIG       0x00fa
+#define DNS_TYPE_IXFR       0x00fb
+#define DNS_TYPE_AXFR       0x00fc
+#define DNS_TYPE_MAILB      0x00fd
+#define DNS_TYPE_MAILA      0x00fe
+#define DNS_TYPE_ALL        0x00ff
+#define DNS_TYPE_ANY        0x00ff
+
+#define DNS_TYPE_WINS       0xff01
+#define DNS_TYPE_WINSR      0xff02
+#define DNS_TYPE_NBSTAT     (DNS_TYPE_WINSR)
+
+#define DNS_QUERY_STANDARD                  0x00000000
+#define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001
+#define DNS_QUERY_USE_TCP_ONLY              0x00000002
+#define DNS_QUERY_NO_RECURSION              0x00000004
+#define DNS_QUERY_BYPASS_CACHE              0x00000008
+#define DNS_QUERY_NO_WIRE_QUERY             0x00000010
+#define DNS_QUERY_NO_LOCAL_NAME             0x00000020
+#define DNS_QUERY_NO_HOSTS_FILE             0x00000040
+#define DNS_QUERY_NO_NETBT                  0x00000080
+#define DNS_QUERY_WIRE_ONLY                 0x00000100
+#define DNS_QUERY_RETURN_MESSAGE            0x00000200
+#define DNS_QUERY_TREAT_AS_FQDN             0x00001000
+#define DNS_QUERY_DONT_RESET_TTL_VALUES     0x00100000
+#define DNS_QUERY_RESERVED                  0xff000000
+
+typedef enum _DNS_NAME_FORMAT
+{
+    DnsNameDomain,
+    DnsNameDomainLabel,
+    DnsNameHostnameFull,
+    DnsNameHostnameLabel,
+    DnsNameWildcard,
+    DnsNameSrvRecord
+} DNS_NAME_FORMAT;
+
+typedef enum _DNS_FREE_TYPE
+{
+    DnsFreeFlat,
+    DnsFreeRecordList,
+    DnsFreeParsedMessageFields
+} DNS_FREE_TYPE;
+
+typedef enum _DNS_CHARSET
+{
+    DnsCharSetUnknown,
+    DnsCharSetUnicode,
+    DnsCharSetUtf8,
+    DnsCharSetAnsi
+} DNS_CHARSET;
+
+typedef enum _DNS_CONFIG_TYPE
+{
+    DnsConfigPrimaryDomainName_W,
+    DnsConfigPrimaryDomainName_A,
+    DnsConfigPrimaryDomainName_UTF8,
+    DnsConfigAdapterDomainName_W,
+    DnsConfigAdapterDomainName_A,
+    DnsConfigAdapterDomainName_UTF8,
+    DnsConfigDnsServerList,
+    DnsConfigSearchList,
+    DnsConfigAdapterInfo,
+    DnsConfigPrimaryHostNameRegistrationEnabled,
+    DnsConfigAdapterHostNameRegistrationEnabled,
+    DnsConfigAddressRegistrationMaxCount,
+    DnsConfigHostName_W,
+    DnsConfigHostName_A,
+    DnsConfigHostName_UTF8,
+    DnsConfigFullHostName_W,
+    DnsConfigFullHostName_A,
+    DnsConfigFullHostName_UTF8
+} DNS_CONFIG_TYPE;
+
+typedef enum _DnsSection
+{
+    DnsSectionQuestion,
+    DnsSectionAnswer,
+    DnsSectionAuthority,
+    DnsSectionAddtional /* Not a typo, as per Microsoft's headers */
+} DNS_SECTION;
+
+typedef LONG DNS_STATUS, *PDNS_STATUS;
+typedef DWORD IP4_ADDRESS, *PIP4_ADDRESS;
+
+typedef struct
+{
+    DWORD IP6Dword[4];
+} IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
+
+#define SIZEOF_IP4_ADDRESS                   4
+#define IP4_ADDRESS_STRING_LENGTH           16
+#define IP6_ADDRESS_STRING_LENGTH           65
+#define DNS_ADDRESS_STRING_LENGTH           IP6_ADDRESS_STRING_LENGTH
+#define IP4_ADDRESS_STRING_BUFFER_LENGTH    IP4_ADDRESS_STRING_LENGTH
+#define IP6_ADDRESS_STRING_BUFFER_LENGTH    IP6_ADDRESS_STRING_LENGTH
+
+typedef struct _IP4_ARRAY
+{
+    DWORD AddrCount;
+    IP4_ADDRESS AddrArray[1];
+} IP4_ARRAY, *PIP4_ARRAY;
+
+typedef struct _DNS_HEADER
+{
+    WORD Xid;
+    BYTE RecursionDesired;
+    BYTE Truncation;
+    BYTE Authoritative;
+    BYTE Opcode;
+    BYTE IsResponse;
+    BYTE ResponseCode;
+    BYTE Reserved;
+    BYTE RecursionAvailable;
+    WORD QuestionCount;
+    WORD AnswerCount;
+    WORD NameServerCount;
+    WORD AdditionalCount;
+} DNS_HEADER, *PDNS_HEADER;
+
+typedef struct _DNS_MESSAGE_BUFFER
+{
+    DNS_HEADER MessageHead;
+    CHAR MessageBody[1];
+} DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
+
+typedef struct
+{
+    IP4_ADDRESS IpAddress;
+} DNS_A_DATA, *PDNS_A_DATA;
+
+typedef struct _DnsRecordFlags
+{
+    DWORD Section :2;
+    DWORD Delete :1;
+    DWORD CharSet :2;
+    DWORD Unused :3;
+    DWORD Reserved :24;
+} DNS_RECORD_FLAGS;
+
+typedef struct
+{
+    PSTR  pNamePrimaryServer;
+    PSTR  pNameAdministrator;
+    DWORD dwSerialNo;
+    DWORD dwRefresh;
+    DWORD dwRetry;
+    DWORD dwExpire;
+    DWORD dwDefaultTtl;
+} DNS_SOA_DATAA, *PDNS_SOA_DATAA;
+
+typedef struct
+{
+    PWSTR pNamePrimaryServer;
+    PWSTR pNameAdministrator;
+    DWORD dwSerialNo;
+    DWORD dwRefresh;
+    DWORD dwRetry;
+    DWORD dwExpire;
+    DWORD dwDefaultTtl;
+} DNS_SOA_DATAW, *PDNS_SOA_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_SOA_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_SOA_DATA)
+
+typedef struct
+{
+    PSTR pNameHost;
+} DNS_PTR_DATAA, *PDNS_PTR_DATAA;
+
+typedef struct
+{
+    PWSTR pNameHost;
+} DNS_PTR_DATAW, *PDNS_PTR_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_PTR_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_PTR_DATA)
+
+typedef struct
+{
+    PSTR pNameMailbox;
+    PSTR pNameErrorsMailbox;
+} DNS_MINFO_DATAA, *PDNS_MINFO_DATAA;
+
+typedef struct
+{
+    PWSTR pNameMailbox;
+    PWSTR pNameErrorsMailbox;
+} DNS_MINFO_DATAW, *PDNS_MINFO_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_MINFO_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_MINFO_DATA)
+
+typedef struct
+{
+    PSTR pNameExchange;
+    WORD wPreference;
+    WORD Pad;
+} DNS_MX_DATAA, *PDNS_MX_DATAA;
+
+typedef struct
+{
+    PWSTR pNameExchange;
+    WORD wPreference;
+    WORD Pad;
+} DNS_MX_DATAW, *PDNS_MX_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_MX_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_MX_DATA)
+
+typedef struct
+{
+    DWORD dwStringCount;
+    PSTR pStringArray[1];
+} DNS_TXT_DATAA, *PDNS_TXT_DATAA;
+
+typedef struct
+{
+    DWORD dwStringCount;
+    PWSTR pStringArray[1];
+} DNS_TXT_DATAW, *PDNS_TXT_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_TXT_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_TXT_DATA)
+
+typedef struct
+{
+    DWORD dwByteCount;
+    BYTE Data[1];
+} DNS_NULL_DATA, *PDNS_NULL_DATA;
+
+typedef struct
+{
+    IP4_ADDRESS IpAddress;
+    UCHAR chProtocol;
+    BYTE BitMask[1];
+} DNS_WKS_DATA, *PDNS_WKS_DATA;
+
+typedef struct
+{
+    DNS_IP6_ADDRESS Ip6Address;
+} DNS_AAAA_DATA, *PDNS_AAAA_DATA;
+
+typedef struct
+{
+    WORD wFlags;
+    BYTE chProtocol;
+    BYTE chAlgorithm;
+    BYTE Key[1];
+} DNS_KEY_DATA, *PDNS_KEY_DATA;
+
+typedef struct
+{
+    WORD wVersion;
+    WORD wSize;
+    WORD wHorPrec;
+    WORD wVerPrec;
+    DWORD dwLatitude;
+    DWORD dwLongitude;
+    DWORD dwAltitude;
+} DNS_LOC_DATA, *PDNS_LOC_DATA;
+
+typedef struct
+{
+    PSTR pNameSigner;
+    WORD wTypeCovered;
+    BYTE chAlgorithm;
+    BYTE chLabelCount;
+    DWORD dwOriginalTtl;
+    DWORD dwExpiration;
+    DWORD dwTimeSigned;
+    WORD wKeyTag;
+    WORD Pad;
+    BYTE Signature[1];
+} DNS_SIG_DATAA, *PDNS_SIG_DATAA;
+
+typedef struct
+{
+    PWSTR pNameSigner;
+    WORD wTypeCovered;
+    BYTE chAlgorithm;
+    BYTE chLabelCount;
+    DWORD dwOriginalTtl;
+    DWORD dwExpiration;
+    DWORD dwTimeSigned;
+    WORD wKeyTag;
+    WORD Pad;
+    BYTE Signature[1];
+} DNS_SIG_DATAW, *PDNS_SIG_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_SIG_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_SIG_DATA)
+
+#define DNS_ATMA_MAX_ADDR_LENGTH 20
+
+typedef struct
+{
+    BYTE AddressType;
+    BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
+} DNS_ATMA_DATA, *PDNS_ATMA_DATA;
+
+typedef struct
+{
+    PSTR pNameNext;
+    WORD wNumTypes;
+    WORD wTypes[1];
+} DNS_NXT_DATAA, *PDNS_NXT_DATAA;
+
+typedef struct
+{
+    PWSTR pNameNext;
+    WORD wNumTypes;
+    WORD wTypes[1];
+} DNS_NXT_DATAW, *PDNS_NXT_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_NXT_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_NXT_DATA)
+
+typedef struct
+{
+    PSTR pNameTarget;
+    WORD wPriority;
+    WORD wWeight;
+    WORD wPort;
+    WORD Pad;
+} DNS_SRV_DATAA, *PDNS_SRV_DATAA;
+
+typedef struct
+{
+    PWSTR pNameTarget;
+    WORD wPriority;
+    WORD wWeight;
+    WORD wPort;
+    WORD Pad;
+} DNS_SRV_DATAW, *PDNS_SRV_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_SRV_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_SRV_DATA)
+
+typedef struct
+{
+    PSTR pNameAlgorithm;
+    PBYTE pAlgorithmPacket;
+    PBYTE pKey;
+    PBYTE pOtherData;
+    DWORD dwCreateTime;
+    DWORD dwExpireTime;
+    WORD wMode;
+    WORD wError;
+    WORD wKeyLength;
+    WORD wOtherLength;
+    UCHAR cAlgNameLength;
+    BOOL bPacketPointers;
+} DNS_TKEY_DATAA, *PDNS_TKEY_DATAA;
+
+typedef struct
+{
+    PWSTR pNameAlgorithm;
+    PBYTE pAlgorithmPacket;
+    PBYTE pKey;
+    PBYTE pOtherData;
+    DWORD dwCreateTime;
+    DWORD dwExpireTime;
+    WORD wMode;
+    WORD wError;
+    WORD wKeyLength;
+    WORD wOtherLength;
+    UCHAR cAlgNameLength;
+    BOOL bPacketPointers;
+} DNS_TKEY_DATAW, *PDNS_TKEY_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_TKEY_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_TKEY_DATA)
+
+typedef struct
+{
+    PSTR pNameAlgorithm;
+    PBYTE pAlgorithmPacket;
+    PBYTE pSignature;
+    PBYTE pOtherData;
+    LONGLONG i64CreateTime;
+    WORD wFudgeTime;
+    WORD wOriginalXid;
+    WORD wError;
+    WORD wSigLength;
+    WORD wOtherLength;
+    UCHAR cAlgNameLength;
+    BOOL bPacketPointers;
+} DNS_TSIG_DATAA, *PDNS_TSIG_DATAA;
+
+typedef struct
+{
+    PWSTR pNameAlgorithm;
+    PBYTE pAlgorithmPacket;
+    PBYTE pSignature;
+    PBYTE pOtherData;
+    LONGLONG i64CreateTime;
+    WORD wFudgeTime;
+    WORD wOriginalXid;
+    WORD wError;
+    WORD wSigLength;
+    WORD wOtherLength;
+    UCHAR cAlgNameLength;
+    BOOL bPacketPointers;
+} DNS_TSIG_DATAW, *PDNS_TSIG_DATAW;
+
+typedef struct
+{
+    DWORD dwMappingFlag;
+    DWORD dwLookupTimeout;
+    DWORD dwCacheTimeout;
+    DWORD cWinsServerCount;
+    IP4_ADDRESS WinsServers[1];
+} DNS_WINS_DATA, *PDNS_WINS_DATA;
+
+typedef struct
+{
+    DWORD dwMappingFlag;
+    DWORD dwLookupTimeout;
+    DWORD dwCacheTimeout;
+    PSTR pNameResultDomain;
+} DNS_WINSR_DATAA, *PDNS_WINSR_DATAA;
+
+typedef struct
+{
+    DWORD dwMappingFlag;
+    DWORD dwLookupTimeout;
+    DWORD dwCacheTimeout;
+    PWSTR pNameResultDomain;
+} DNS_WINSR_DATAW, *PDNS_WINSR_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_WINSR_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_WINSR_DATA)
+
+typedef struct _DnsRecordA
+{
+    struct _DnsRecordA *pNext;
+    PSTR pName;
+    WORD wType;
+    WORD wDataLength;
+    union
+    {
+        DWORD DW;
+        DNS_RECORD_FLAGS S;
+    } Flags;
+    DWORD dwTtl;
+    DWORD dwReserved;
+    union
+    {
+        DNS_A_DATA A;
+        DNS_SOA_DATAA SOA, Soa;
+        DNS_PTR_DATAA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
+        DNS_MINFO_DATAA MINFO, Minfo, RP, Rp;
+        DNS_MX_DATAA MX, Mx, AFSDB, Afsdb, RT, Rt;
+        DNS_TXT_DATAA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
+        DNS_NULL_DATA Null;
+        DNS_WKS_DATA WKS, Wks;
+        DNS_AAAA_DATA AAAA;
+        DNS_KEY_DATA KEY, Key;
+        DNS_SIG_DATAA SIG, Sig;
+        DNS_ATMA_DATA ATMA, Atma;
+        DNS_NXT_DATAA NXT, Nxt;
+        DNS_SRV_DATAA SRV, Srv;
+        DNS_TKEY_DATAA TKEY, Tkey;
+        DNS_TSIG_DATAA TSIG, Tsig;
+        DNS_WINS_DATA WINS, Wins;
+        DNS_WINSR_DATAA WINSR, WinsR, NBSTAT, Nbstat;
+    } Data;
+} DNS_RECORDA, *PDNS_RECORDA;
+
+typedef struct _DnsRecordW
+{
+    struct _DnsRecordW *pNext;
+    PWSTR pName;
+    WORD wType;
+    WORD wDataLength;
+    union
+    {
+        DWORD DW;
+        DNS_RECORD_FLAGS S;
+    } Flags;
+    DWORD dwTtl;
+    DWORD dwReserved;
+    union
+    {
+        DNS_A_DATA A;
+        DNS_SOA_DATAW SOA, Soa;
+        DNS_PTR_DATAW PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
+        DNS_MINFO_DATAW MINFO, Minfo, RP, Rp;
+        DNS_MX_DATAW MX, Mx, AFSDB, Afsdb, RT, Rt;
+        DNS_TXT_DATAW HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
+        DNS_NULL_DATA Null;
+        DNS_WKS_DATA WKS, Wks;
+        DNS_AAAA_DATA AAAA;
+        DNS_KEY_DATA KEY, Key;
+        DNS_SIG_DATAW SIG, Sig;
+        DNS_ATMA_DATA ATMA, Atma;
+        DNS_NXT_DATAW NXT, Nxt;
+        DNS_SRV_DATAW SRV, Srv;
+        DNS_TKEY_DATAW TKEY, Tkey;
+        DNS_TSIG_DATAW TSIG, Tsig;
+        DNS_WINS_DATA WINS, Wins;
+        DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat;
+    } Data;
+} DNS_RECORDW, *PDNS_RECORDW;
+
+#if defined(__WINESRC__) || defined(UNICODE)
+typedef DNS_RECORDW DNS_RECORD;
+typedef PDNS_RECORDW PDNS_RECORD;
+#else
+typedef DNS_RECORDA DNS_RECORD;
+typedef PDNS_RECORDA PDNS_RECORD;
+#endif
+
+typedef struct _DnsRRSet
+{
+    PDNS_RECORD pFirstRR;
+    PDNS_RECORD pLastRR;
+} DNS_RRSET, *PDNS_RRSET;
+
+#define DNS_RRSET_INIT( rrset )                          \
+{                                                        \
+    PDNS_RRSET  _prrset = &(rrset);                      \
+    _prrset->pFirstRR = NULL;                            \
+    _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; \
+}
+
+#define DNS_RRSET_ADD( rrset, pnewRR ) \
+{                                      \
+    PDNS_RRSET  _prrset = &(rrset);    \
+    PDNS_RECORD _prrnew = (pnewRR);    \
+    _prrset->pLastRR->pNext = _prrnew; \
+    _prrset->pLastRR = _prrnew;        \
+}
+
+#define DNS_RRSET_TERMINATE( rrset ) \
+{                                    \
+    PDNS_RRSET  _prrset = &(rrset);  \
+    _prrset->pLastRR->pNext = NULL;  \
+}
+
+DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,PHANDLE);
+DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,PHANDLE);
+#define DnsAcquireContextHandle WINELIB_NAME_AW(DnsAcquireContextHandle_)
+DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDW*);
+DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDA*);
+VOID WINAPI DnsFree(PVOID,DNS_FREE_TYPE);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORDW,PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+#define DnsModifyRecordsInSet WINELIB_NAME_AW(DnsModifyRecordsInSet_)
+BOOL WINAPI DnsNameCompare_A(PCSTR,PCSTR);
+BOOL WINAPI DnsNameCompare_W(PCWSTR,PCWSTR);
+#define DnsNameCompare WINELIB_NAME_AW(DnsNameCompare_)
+DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*);
+DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PVOID,PDNS_RECORDW*,PVOID*);
+DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*);
+#define DnsQuery WINELIB_NAME_AW(DnsQuery_)
+DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PCWSTR,PVOID,PVOID,PDWORD);
+BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
+PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
+VOID WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
+BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
+PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
+PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
+void WINAPI DnsReleaseContextHandle(HANDLE);
+DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+#define DnsReplaceRecordSet WINELIB_NAME_AW(DnsReplaceRecordSet)
+DNS_STATUS WINAPI DnsValidateName_A(PCSTR,DNS_NAME_FORMAT);
+DNS_STATUS WINAPI DnsValidateName_W(PCWSTR, DNS_NAME_FORMAT);
+DNS_STATUS WINAPI DnsValidateName_UTF8(PCSTR,DNS_NAME_FORMAT);
+#define DnsValidateName WINELIB_NAME_AW(DnsValidateName_)
+BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,PDWORD,PCWSTR,WORD,WORD,BOOL);
+BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,PDWORD,PCSTR,WORD,WORD,BOOL);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h
new file mode 100644
index 0000000..1510204
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDOWS_H
+#define __WINE_WINDOWS_H
+
+#if defined(_MSC_VER) && (_MSC_VER >= 800) && !defined(__cplusplus)
+/* TYPE_ALIGNMENT generates this - move it outside the warning push/pop scope. */
+# pragma warning(disable:4116)
+#endif
+
+#ifndef _INC_WINDOWS
+#define _INC_WINDOWS
+
+#if defined(RC_INVOKED) && !defined(NOWINRES)
+#include <winresrc.h>
+#else /* RC_INVOKED && !NOWINRES */
+
+/* All the basic includes */
+#include <excpt.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <wingdi.h>
+#include <winuser.h>
+#include <winnls.h>
+#include <wincon.h>
+#include <winver.h>
+#include <winreg.h>
+#include <winnetwk.h>
+
+/* Not so essential ones */
+#ifndef __WINESRC__
+
+#ifndef WIN32_LEAN_AND_MEAN
+
+#include <cderr.h>
+#include <dde.h>
+#include <ddeml.h>
+#include <dlgs.h>
+#include <lzexpand.h>
+#include <mmsystem.h>
+#include <nb30.h>
+#include <rpc.h>
+#include <shellapi.h>
+#include <winperf.h>
+
+#ifndef WINE_NOWINSOCK
+#include <winsock.h>
+#endif /* WINE_NOWINSOCK */
+
+#ifndef NOCRYPT
+#include <wincrypt.h>
+/* #include <winefs.h> */
+#include <winscard.h>
+#endif /* !NOCRYPT */
+
+#ifndef NOGDI
+#include <winspool.h>
+#ifdef INC_OLE1
+/* #include <ole.h> */
+#else
+#include <ole2.h>
+#endif
+#include <commdlg.h>
+#endif /* !NOGDI */
+
+#endif /* !WIN32_LEAN_AND_MEAN */
+
+/* #include <stralign.h> */
+
+#ifdef INC_OLE2
+#include <ole2.h>
+#endif /* INC_OLE2 */
+
+#ifndef NOSERVICE
+#include <winsvc.h>
+#endif /* !NOSERVICE */
+
+#ifndef NOMCX
+#include <mcx.h>
+#endif /* !NOMCX */
+
+#ifndef NOIMM
+#include <imm.h>
+#endif /* !NOIMM */
+
+#endif  /* __WINESRC__ */
+
+#endif  /* RC_INVOKED && !NOWINRES */
+#endif /* _INC_WINDOWS */
+#endif  /* __WINE_WINDOWS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h
new file mode 100644
index 0000000..fea94e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h
@@ -0,0 +1,1448 @@
+/* Copyright (C) 1999 Corel Corporation (Paul Quinn)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_WINDOWSX
+#define _INC_WINDOWSX
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __WINESRC__
+/* This file contains macros that cause warnings on gcc 4.1, so avoid it. */
+#error Please avoid use of windowsx.h in Wine source code.
+#endif
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else   /* __cplusplus */
+#define SNDMSG SendMessage
+#endif  /* __cplusplus */
+#endif  /* SNDMSG */
+
+#define GET_WPARAM(wp, lp)                      (wp)
+#define GET_LPARAM(wp, lp)                      (lp)
+
+#define GET_X_LPARAM(lp)                        ((int)(short)LOWORD(lp))
+#define GET_Y_LPARAM(lp)                        ((int)(short)HIWORD(lp))
+
+#define GET_EM_LINESCROLL_MPS(vert, horz)       (WPARAM)horz, (LPARAM)vert
+
+#define GET_EM_SETSEL_START(wp, lp)             (INT)(wp)
+#define GET_EM_SETSEL_END(wp, lp)               (lp)
+#define GET_EM_SETSEL_MPS(iStart, iEnd)         (WPARAM)(iStart), (LPARAM)(iEnd)
+
+#define GET_WM_ACTIVATE_STATE(wp, lp)           LOWORD(wp)
+#define GET_WM_ACTIVATE_FMINIMIZED(wp, lp)      (BOOL)HIWORD(wp)
+#define GET_WM_ACTIVATE_HWND(wp, lp)            (HWND)(lp)
+#define GET_WM_ACTIVATE_MPS(s, fmin, hwnd)      (WPARAM)MAKELONG((s), (fmin)), (LPARAM)(hwnd)
+
+#define GET_WM_CHANGECBCHAIN_HWNDNEXT(wp, lp)   (HWND)(lp)
+
+#define GET_WM_CHARTOITEM_CHAR(wp, lp)          (TCHAR)LOWORD(wp)
+#define GET_WM_CHARTOITEM_POS(wp, lp)           HIWORD(wp)
+#define GET_WM_CHARTOITEM_HWND(wp, lp)          (HWND)(lp)
+#define GET_WM_CHARTOITEM_MPS(ch, pos, hwnd)    (WPARAM)MAKELONG((pos), (ch)), (LPARAM)(hwnd)
+
+#define GET_WM_COMMAND_ID(wp, lp)               LOWORD(wp)
+#define GET_WM_COMMAND_HWND(wp, lp)             (HWND)(lp)
+#define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)
+#define GET_WM_COMMAND_MPS(id, hwnd, cmd)       (WPARAM)MAKELONG(id, cmd), (LPARAM)(hwnd)
+
+#define WM_CTLCOLOR                             0x0019
+
+#define GET_WM_CTLCOLOR_HDC(wp, lp, msg)        (HDC)(wp)
+#define GET_WM_CTLCOLOR_HWND(wp, lp, msg)       (HWND)(lp)
+#define GET_WM_CTLCOLOR_TYPE(wp, lp, msg)       (WORD)(msg - WM_CTLCOLORMSGBOX)
+#define GET_WM_CTLCOLOR_MSG(type)               (WORD)(WM_CTLCOLORMSGBOX+(type))
+#define GET_WM_CTLCOLOR_MPS(hdc, hwnd, type)    (WPARAM)(hdc), (LPARAM)(hwnd)
+
+#define GET_WM_HSCROLL_CODE(wp, lp)             LOWORD(wp)
+#define GET_WM_HSCROLL_POS(wp, lp)              HIWORD(wp)
+#define GET_WM_HSCROLL_HWND(wp, lp)             (HWND)(lp)
+#define GET_WM_HSCROLL_MPS(code, pos, hwnd)     (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd)
+
+#define GET_WM_MENUCHAR_CHAR(wp, lp)            (TCHAR)LOWORD(wp)
+#define GET_WM_MENUCHAR_HMENU(wp, lp)           (HMENU)(lp)
+#define GET_WM_MENUCHAR_FMENU(wp, lp)           (BOOL)HIWORD(wp)
+#define GET_WM_MENUCHAR_MPS(ch, hmenu, f)       (WPARAM)MAKELONG(ch, f), (LPARAM)(hmenu)
+
+#define GET_WM_MENUSELECT_CMD(wp, lp)           LOWORD(wp)
+#define GET_WM_MENUSELECT_FLAGS(wp, lp)         (UINT)(int)(short)HIWORD(wp)
+#define GET_WM_MENUSELECT_HMENU(wp, lp)         (HMENU)(lp)
+#define GET_WM_MENUSELECT_MPS(cmd, f, hmenu)    (WPARAM)MAKELONG(cmd, f), (LPARAM)(hmenu)
+
+#define GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wp, lp) (lp == (LPARAM)hwnd)
+#define GET_WM_MDIACTIVATE_HWNDDEACT(wp, lp)    (HWND)(wp)
+#define GET_WM_MDIACTIVATE_HWNDACTIVATE(wp, lp) (HWND)(lp)
+#define GET_WM_MDIACTIVATE_MPS(f, hwndD, hwndA) (WPARAM)(hwndA), 0
+#define GET_WM_MDISETMENU_MPS(hmenuF, hmenuW)   (WPARAM)hmenuF, (LPARAM)hmenuW
+
+#define GET_WM_PARENTNOTIFY_MSG(wp, lp)         LOWORD(wp)
+#define GET_WM_PARENTNOTIFY_ID(wp, lp)          HIWORD(wp)
+#define GET_WM_PARENTNOTIFY_HWNDCHILD(wp, lp)   (HWND)(lp)
+#define GET_WM_PARENTNOTIFY_X(wp, lp)           (int)(short)LOWORD(lp)
+#define GET_WM_PARENTNOTIFY_Y(wp, lp)           (int)(short)HIWORD(lp)
+#define GET_WM_PARENTNOTIFY_MPS(msg, id, hwnd)  (WPARAM)MAKELONG(id, msg), (LPARAM)(hwnd)
+#define GET_WM_PARENTNOTIFY2_MPS(msg, x, y)     (WPARAM)MAKELONG(0, msg), MAKELONG(x, y)
+
+#define GET_WM_VKEYTOITEM_CODE(wp, lp)          (int)(short)LOWORD(wp)
+#define GET_WM_VKEYTOITEM_ITEM(wp, lp)          HIWORD(wp)
+#define GET_WM_VKEYTOITEM_HWND(wp, lp)          (HWND)(lp)
+#define GET_WM_VKEYTOITEM_MPS(code, item, hwnd) (WPARAM)MAKELONG(item, code), (LPARAM)(hwnd)
+
+#define GET_WM_VSCROLL_CODE(wp, lp)             LOWORD(wp)
+#define GET_WM_VSCROLL_POS(wp, lp)              HIWORD(wp)
+#define GET_WM_VSCROLL_HWND(wp, lp)             (HWND)(lp)
+#define GET_WM_VSCROLL_MPS(code, pos, hwnd)     (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd)
+
+/****** KERNEL Macro APIs ******************************************************/
+
+#define GetInstanceModule(hInst)                (HMODULE)(hInst)
+#define GlobalPtrHandle(lp)                     ((HGLOBAL)GlobalHandle(lp))
+#define GlobalLockPtr(lp)                       ((BOOL)GlobalLock(GlobalPtrHandle(lp)))
+#define GlobalUnlockPtr(lp)                     GlobalUnlock(GlobalPtrHandle(lp))
+#define GlobalAllocPtr(flags, cb)               (GlobalLock(GlobalAlloc((flags), (cb))))
+#define GlobalReAllocPtr(lp, cbNew, flags)      (GlobalUnlockPtr(lp), GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) , (cbNew), (flags))))
+#define GlobalFreePtr(lp)                       (GlobalUnlockPtr(lp), (BOOL)(ULONG_PTR)GlobalFree(GlobalPtrHandle(lp)))
+
+/****** USER Macro APIs ******************************************************/
+
+#define     GetWindowInstance(hwnd) ((HMODULE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE))
+
+#define     GetWindowStyle(hwnd)    ((DWORD)GetWindowLong(hwnd, GWL_STYLE))
+#define     GetWindowExStyle(hwnd)  ((DWORD)GetWindowLong(hwnd, GWL_EXSTYLE))
+
+#define     GetWindowOwner(hwnd)    GetWindow(hwnd, GW_OWNER)
+
+#define     GetFirstChild(hwnd)     GetTopWindow(hwnd)
+#define     GetFirstSibling(hwnd)   GetWindow(hwnd, GW_HWNDFIRST)
+#define     GetLastSibling(hwnd)    GetWindow(hwnd, GW_HWNDLAST)
+#define     GetNextSibling(hwnd)    GetWindow(hwnd, GW_HWNDNEXT)
+#define     GetPrevSibling(hwnd)    GetWindow(hwnd, GW_HWNDPREV)
+
+#define     GetWindowID(hwnd)       GetDlgCtrlID(hwnd)
+
+#define     SetWindowRedraw(hwnd, fRedraw)  \
+	        ((void)SendMessage(hwnd, WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L))
+#define     SubclassWindow(hwnd, lpfn)      \
+		((WNDPROC)SetWindowLongPtr((hwnd), GWLP_WNDPROC, (LPARAM)(WNDPROC)(lpfn)))
+
+#define     IsMinimized(hwnd)        IsIconic(hwnd)
+#define     IsMaximized(hwnd)        IsZoomed(hwnd)
+#define     IsRestored(hwnd)    ((GetWindowStyle(hwnd) & (WS_MINIMIZE | WS_MAXIMIZE)) == 0L)
+#define     SetWindowFont(hwnd, hfont, fRedraw) \
+		FORWARD_WM_SETFONT((hwnd), (hfont), (fRedraw), SendMessage)
+
+#define     GetWindowFont(hwnd)      FORWARD_WM_GETFONT((hwnd), SendMessage)
+
+#define     MapWindowRect(hwndFrom, hwndTo, lprc) \
+                MapWindowPoints((hwndFrom), (hwndTo), (POINT *)(lprc), 2)
+
+#define     IsLButtonDown()  (GetKeyState(VK_LBUTTON) < 0)
+#define     IsRButtonDown()  (GetKeyState(VK_RBUTTON) < 0)
+#define     IsMButtonDown()  (GetKeyState(VK_MBUTTON) < 0)
+
+#define     SetDlgMsgResult(hwnd, msg, result) (( \
+        (msg) == WM_CTLCOLORMSGBOX      || \
+        (msg) == WM_CTLCOLOREDIT        || \
+        (msg) == WM_CTLCOLORLISTBOX     || \
+        (msg) == WM_CTLCOLORBTN         || \
+        (msg) == WM_CTLCOLORDLG         || \
+        (msg) == WM_CTLCOLORSCROLLBAR   || \
+        (msg) == WM_CTLCOLORSTATIC      || \
+        (msg) == WM_COMPAREITEM         || \
+        (msg) == WM_VKEYTOITEM          || \
+        (msg) == WM_CHARTOITEM          || \
+        (msg) == WM_QUERYDRAGICON       || \
+        (msg) == WM_INITDIALOG             \
+    ) ? (BOOL)(result) : (SetWindowLongPtr((hwnd), DWLP_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))
+
+#define     DefDlgProcEx(hwnd, msg, wParam, lParam, pfRecursion) \
+    (*(pfRecursion) = TRUE, DefDlgProc(hwnd, msg, wParam, lParam))
+
+#define     CheckDefDlgRecursion(pfRecursion) \
+    if (*(pfRecursion)) { *(pfRecursion) = FALSE; return FALSE; }
+
+#define     SubclassDialog(hwndDlg, lpfn) \
+		((DLGPROC)SetWindowLongPtr(hwndDlg, DWLP_DLGPROC, (LPARAM)(DLGPROC)(lpfn)))
+
+#define     DeletePen(hpen)      DeleteObject((HGDIOBJ)(HPEN)(hpen))
+#define     SelectPen(hdc, hpen)    ((HPEN)SelectObject((hdc), (HGDIOBJ)(HPEN)(hpen)))
+#define     GetStockPen(i)       ((HPEN)GetStockObject(i))
+
+#define     DeleteBrush(hbr)     DeleteObject((HGDIOBJ)(HBRUSH)(hbr))
+#define     SelectBrush(hdc, hbr)   ((HBRUSH)SelectObject((hdc), (HGDIOBJ)(HBRUSH)(hbr)))
+#define     GetStockBrush(i)     ((HBRUSH)GetStockObject(i))
+
+#define     DeleteRgn(hrgn)                         DeleteObject((HGDIOBJ)(HRGN)(hrgn))
+
+#define     CopyRgn(hrgnDst, hrgnSrc)               CombineRgn(hrgnDst, hrgnSrc, 0, RGN_COPY)
+#define     IntersectRgn(hrgnResult, hrgnA, hrgnB)  CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_AND)
+#define     SubtractRgn(hrgnResult, hrgnA, hrgnB)   CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_DIFF)
+#define     UnionRgn(hrgnResult, hrgnA, hrgnB)      CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_OR)
+#define     XorRgn(hrgnResult, hrgnA, hrgnB)        CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_XOR)
+
+#define     DeletePalette(hpal)     DeleteObject((HGDIOBJ)(HPALETTE)(hpal))
+
+#define     DeleteFont(hfont)       DeleteObject((HGDIOBJ)(HFONT)(hfont))
+#define     SelectFont(hdc, hfont)  ((HFONT)SelectObject((hdc), (HGDIOBJ)(HFONT) (hfont)))
+#define     GetStockFont(i)         ((HFONT)GetStockObject(i))
+#define     DeleteBitmap(hbm)       DeleteObject((HGDIOBJ)(HBITMAP)(hbm))
+#define     SelectBitmap(hdc, hbm)  ((HBITMAP)SelectObject((hdc), (HGDIOBJ)(HBITMAP)(hbm)))
+#define     InsetRect(lprc, dx, dy) InflateRect((lprc), -(dx), -(dy))
+
+
+/* Button Message APIs */
+
+#define Button_Enable(hwndCtl, fEnable) \
+	EnableWindow((hwndCtl), (fEnable))
+
+#define Button_GetCheck(hwndCtl) \
+	((int)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L))
+
+#define Button_GetState(hwndCtl) \
+	((int)SendMessage((hwndCtl), BM_GETSTATE, 0L, 0L))
+
+#define Button_GetText(hwndCtl, lpch, cchMax) \
+	GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define Button_GetTextLength(hwndCtl) \
+	GetWindowTextLength(hwndCtl)
+
+#define Button_SetCheck(hwndCtl, check) \
+	((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L))
+
+#define Button_SetState(hwndCtl, state) \
+	((UINT)SendMessage((hwndCtl), BM_SETSTATE, (WPARAM)(int)(state), 0L))
+
+#define Button_SetStyle(hwndCtl, style, fRedraw) \
+	((void)SendMessage((hwndCtl), BM_SETSTYLE, (WPARAM)LOWORD(style), MAKELPARAM((fRedraw) != 0, 0)))
+
+#define Button_SetText(hwndCtl, lpsz) \
+	SetWindowText((hwndCtl), (lpsz))
+
+
+/* ComboBox Message APIs */
+
+#define ComboBox_AddItemData(hwndCtl, data) \
+	((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data)))
+
+#define ComboBox_AddString(hwndCtl, lpsz) \
+	((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ComboBox_DeleteString(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), CB_DELETESTRING, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_Dir(hwndCtl, attrs, lpszFileSpec) \
+	((int)SendMessage((hwndCtl), CB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))
+
+#define ComboBox_Enable(hwndCtl, fEnable) \
+	EnableWindow((hwndCtl), (fEnable))
+
+#define ComboBox_FindItemData(hwndCtl, indexStart, data) \
+	((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
+
+#define ComboBox_FindString(hwndCtl, indexStart, lpszFind) \
+	((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ComboBox_FindStringExact(hwndCtl, indexStart, lpszFind) \
+	((int)SendMessage((hwndCtl), CB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ComboBox_GetCount(hwndCtl) \
+	((int)SendMessage((hwndCtl), CB_GETCOUNT, 0L, 0L))
+
+#define ComboBox_GetCurSel(hwndCtl) \
+	((int)SendMessage((hwndCtl), CB_GETCURSEL, 0L, 0L))
+
+#define ComboBox_GetDroppedControlRect(hwndCtl, lprc) \
+	((void)SendMessage((hwndCtl), CB_GETDROPPEDCONTROLRECT, 0L, (LPARAM)(RECT *)(lprc)))
+
+#define ComboBox_GetDroppedState(hwndCtl) \
+	((BOOL)SendMessage((hwndCtl), CB_GETDROPPEDSTATE, 0L, 0L))
+
+#define ComboBox_GetEditSel(hwndCtl) \
+	((DWORD)SendMessage((hwndCtl), CB_GETEDITSEL, 0L, 0L))
+
+#define ComboBox_GetExtendedUI(hwndCtl) \
+	((UINT)SendMessage((hwndCtl), CB_GETEXTENDEDUI, 0L, 0L))
+
+#define ComboBox_GetItemData(hwndCtl, index) \
+	((LRESULT)SendMessage((hwndCtl), CB_GETITEMDATA, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_GetItemHeight(hwndCtl) \
+	((int)SendMessage((hwndCtl), CB_GETITEMHEIGHT, 0L, 0L))
+
+#define ComboBox_GetLBText(hwndCtl, index, lpszBuffer) \
+	((int)SendMessage((hwndCtl), CB_GETLBTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))
+
+#define ComboBox_GetLBTextLen(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), CB_GETLBTEXTLEN, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_InsertItemData(hwndCtl, index, data) \
+	((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data)))
+
+#define ComboBox_LimitText(hwndCtl, cchLimit) \
+	((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L))
+
+#define ComboBox_GetText(hwndCtl, lpch, cchMax) \
+	GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define ComboBox_GetTextLength(hwndCtl) \
+	GetWindowTextLength(hwndCtl)
+
+#define ComboBox_InsertString(hwndCtl, index, lpsz) \
+	((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ComboBox_LimitText(hwndCtl, cchLimit) \
+	((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L))
+
+#define ComboBox_ResetContent(hwndCtl) \
+	((int)SendMessage((hwndCtl), CB_RESETCONTENT, 0L, 0L))
+
+#define ComboBox_SelectItemData(hwndCtl, indexStart, data) \
+	((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))
+
+#define ComboBox_SelectString(hwndCtl, indexStart, lpszSelect) \
+	((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszSelect)))
+
+#define ComboBox_SetCurSel(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), CB_SETCURSEL, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_SetEditSel(hwndCtl, ichStart, ichEnd) \
+	((int)SendMessage((hwndCtl), CB_SETEDITSEL, 0L, MAKELPARAM((ichStart), (ichEnd))))
+
+#define ComboBox_SetExtendedUI(hwndCtl, flags) \
+	((int)SendMessage((hwndCtl), CB_SETEXTENDEDUI, (WPARAM)(UINT)(flags), 0L))
+
+#define ComboBox_SetItemData(hwndCtl, index, data) \
+	((int)SendMessage((hwndCtl), CB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data)))
+
+#define ComboBox_SetItemHeight(hwndCtl, index, cyItem) \
+	((int)SendMessage((hwndCtl), CB_SETITEMHEIGHT, (WPARAM)(int)(index), (LPARAM)(int)cyItem))
+
+#define ComboBox_SetText(hwndCtl, lpsz) \
+	SetWindowText((hwndCtl), (lpsz))
+
+#define ComboBox_ShowDropdown(hwndCtl, fShow) \
+	((BOOL)SendMessage((hwndCtl), CB_SHOWDROPDOWN, (WPARAM)(BOOL)(fShow), 0L))
+
+
+/* Edit Message APIs */
+
+#define Edit_CanUndo(hwndCtl) \
+	((BOOL)SendMessage((hwndCtl), EM_CANUNDO, 0L, 0L))
+
+#define Edit_EmptyUndoBuffer(hwndCtl) \
+	((void)SendMessage((hwndCtl), EM_EMPTYUNDOBUFFER, 0L, 0L))
+
+#define Edit_Enable(hwndCtl, fEnable) \
+	EnableWindow((hwndCtl), (fEnable))
+
+#define Edit_FmtLines(hwndCtl, fAddEOL) \
+	((BOOL)SendMessage((hwndCtl), EM_FMTLINES, (WPARAM)(BOOL)(fAddEOL), 0L))
+
+#define Edit_GetFirstVisibleLine(hwndCtl) \
+	((int)SendMessage((hwndCtl), EM_GETFIRSTVISIBLELINE, 0L, 0L))
+
+#define Edit_GetHandle(hwndCtl) \
+	((HLOCAL)SendMessage((hwndCtl), EM_GETHANDLE, 0L, 0L))
+
+#define Edit_GetLine(hwndCtl, line, lpch, cchMax) \
+	((*((int *)(lpch)) = (cchMax)), ((int)SendMessage((hwndCtl), EM_GETLINE, (WPARAM)(int)(line), (LPARAM)(LPTSTR)(lpch))))
+
+#define Edit_GetModify(hwndCtl) \
+	((BOOL)SendMessage((hwndCtl), EM_GETMODIFY, 0L, 0L))
+
+#define Edit_GetPasswordChar(hwndCtl) \
+	((TCHAR)SendMessage((hwndCtl), EM_GETPASSWORDCHAR, 0L, 0L))
+
+#define Edit_GetRect(hwndCtl, lprc) \
+	((void)SendMessage((hwndCtl), EM_GETRECT, 0L, (LPARAM)(RECT *)(lprc)))
+
+#define Edit_GetSel(hwndCtl) \
+	((DWORD)SendMessage((hwndCtl), EM_GETSEL, 0L, 0L))
+
+#define Edit_GetText(hwndCtl, lpch, cchMax) \
+	GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define Edit_GetTextLength(hwndCtl) \
+	GetWindowTextLength(hwndCtl)
+
+#define Edit_GetWordBreakProc(hwndCtl) \
+	((EDITWORDBREAKPROC)SendMessage((hwndCtl), EM_GETWORDBREAKPROC, 0L, 0L))
+
+#define Edit_LimitText(hwndCtl, cchMax) \
+	((void)SendMessage((hwndCtl), EM_LIMITTEXT, (WPARAM)(UINT)(cchMax), 0L))
+
+#define Edit_LineFromChar(hwndCtl, ich) \
+	((int)SendMessage((hwndCtl), EM_LINEFROMCHAR, (WPARAM)(int)(ich), 0L))
+
+#define Edit_LineIndex(hwndCtl, line) \
+	((int)SendMessage((hwndCtl), EM_LINEINDEX, (WPARAM)(int)(line), 0L))
+
+#define Edit_GetLineCount(hwndCtl) \
+	((int)SendMessage((hwndCtl), EM_GETLINECOUNT, 0L, 0L))
+
+#define Edit_LineLength(hwndCtl, line) \
+	((int)SendMessage((hwndCtl), EM_LINELENGTH, (WPARAM)(int)(line), 0L))
+
+#define Edit_ReplaceSel(hwndCtl, lpszReplace) \
+	((void)SendMessage((hwndCtl), EM_REPLACESEL, 0L, (LPARAM)(LPCTSTR)(lpszReplace)))
+
+#define Edit_Scroll(hwndCtl, dv, dh) \
+	((void)SendMessage((hwndCtl), EM_LINESCROLL, (WPARAM)(int)(dh), (LPARAM)(int)(dv)))
+
+#define Edit_ScrollCaret(hwndCtl) \
+	((BOOL)SendMessage((hwndCtl), EM_SCROLLCARET, 0, 0L))
+
+#define Edit_SetHandle(hwndCtl, h) \
+	((void)SendMessage((hwndCtl), EM_SETHANDLE, (WPARAM)(UINT)(HLOCAL)(h), 0L))
+
+#define Edit_SetModify(hwndCtl, fModified) \
+	((void)SendMessage((hwndCtl), EM_SETMODIFY, (WPARAM)(UINT)(fModified), 0L))
+
+#define Edit_SetPasswordChar(hwndCtl, ch) \
+	((void)SendMessage((hwndCtl), EM_SETPASSWORDCHAR, (WPARAM)(UINT)(ch), 0L))
+
+#define Edit_SetReadOnly(hwndCtl, fReadOnly) \
+	((BOOL)SendMessage((hwndCtl), EM_SETREADONLY, (WPARAM)(BOOL)(fReadOnly), 0L))
+
+#define Edit_SetRect(hwndCtl, lprc) \
+	((void)SendMessage((hwndCtl), EM_SETRECT, 0L, (LPARAM)(const RECT *)(lprc)))
+
+#define Edit_SetRectNoPaint(hwndCtl, lprc) \
+	((void)SendMessage((hwndCtl), EM_SETRECTNP, 0L, (LPARAM)(const RECT *)(lprc)))
+
+#define Edit_SetSel(hwndCtl, ichStart, ichEnd) \
+	((void)SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd)))
+
+#define Edit_SetTabStops(hwndCtl, cTabs, lpTabs) \
+	((void)SendMessage((hwndCtl), EM_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(const int *)(lpTabs)))
+
+#define Edit_SetText(hwndCtl, lpsz) \
+	SetWindowText((hwndCtl), (lpsz))
+
+#define Edit_SetWordBreakProc(hwndCtl, lpfnWordBreak) \
+	((void)SendMessage((hwndCtl), EM_SETWORDBREAKPROC, 0L, (LPARAM)(EDITWORDBREAKPROC)(lpfnWordBreak)))
+
+#define Edit_Undo(hwndCtl) \
+	((BOOL)SendMessage((hwndCtl), EM_UNDO, 0L, 0L))
+
+
+/* ListBox Message APIs */
+
+#define ListBox_AddItemData(hwndCtl, data) \
+	((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_AddString(hwndCtl, lpsz) \
+	((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ListBox_DeleteString(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), LB_DELETESTRING, (WPARAM)(int)(index), 0L))
+
+#define ListBox_Dir(hwndCtl, attrs, lpszFileSpec) \
+	((int)SendMessage((hwndCtl), LB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))
+
+#define ListBox_Enable(hwndCtl, fEnable) \
+	EnableWindow((hwndCtl), (fEnable))
+
+#define ListBox_FindItemData(hwndCtl, indexStart, data) \
+	((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_FindString(hwndCtl, indexStart, lpszFind) \
+	((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ListBox_FindStringExact(hwndCtl, indexStart, lpszFind) \
+	((int)SendMessage((hwndCtl), LB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ListBox_GetCaretIndex(hwndCtl) \
+	((int)SendMessage((hwndCtl), LB_GETCARETINDEX, 0L, 0L))
+
+#define ListBox_GetCurSel(hwndCtl) \
+	((int)SendMessage((hwndCtl), LB_GETCURSEL, 0L, 0L))
+
+#define ListBox_GetCount(hwndCtl) \
+	((int)SendMessage((hwndCtl), LB_GETCOUNT, 0L, 0L))
+
+#define ListBox_GetHorizontalExtent(hwndCtl) \
+	((int)SendMessage((hwndCtl), LB_GETHORIZONTALEXTENT, 0L, 0L))
+
+#define ListBox_GetItemData(hwndCtl, index) \
+	((LRESULT)SendMessage((hwndCtl), LB_GETITEMDATA, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetItemHeight(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), LB_GETITEMHEIGHT, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetItemRect(hwndCtl, index, lprc) \
+	((int)SendMessage((hwndCtl), LB_GETITEMRECT, (WPARAM)(int)(index), (LPARAM)(RECT *)(lprc)))
+
+#define ListBox_GetSel(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), LB_GETSEL, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetSelCount(hwndCtl) \
+	((int)SendMessage((hwndCtl), LB_GETSELCOUNT, 0L, 0L))
+
+#define ListBox_GetSelItems(hwndCtl, cItems, lpItems) \
+	((int)SendMessage((hwndCtl), LB_GETSELITEMS, (WPARAM)(int)(cItems), (LPARAM)(int *)(lpItems)))
+
+#define ListBox_GetText(hwndCtl, index, lpszBuffer) \
+	((int)SendMessage((hwndCtl), LB_GETTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))
+
+#define ListBox_GetTextLen(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), LB_GETTEXTLEN, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetTopIndex(hwndCtl) \
+	((int)SendMessage((hwndCtl), LB_GETTOPINDEX, 0L, 0L))
+
+#define ListBox_InsertItemData(hwndCtl, index, data) \
+	((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_InsertString(hwndCtl, index, lpsz) \
+	((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ListBox_ResetContent(hwndCtl) \
+	((BOOL)SendMessage((hwndCtl), LB_RESETCONTENT, 0L, 0L))
+
+#define ListBox_SelectItemData(hwndCtl, indexStart, data) \
+	((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_SelectString(hwndCtl, indexStart, lpszFind) \
+	((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ListBox_SelItemRange(hwndCtl, fSelect, first, last) \
+	((int)SendMessage((hwndCtl), LB_SELITEMRANGE, (WPARAM)(BOOL)(fSelect), MAKELPARAM((first), (last))))
+
+#define ListBox_SetCaretIndex(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), LB_SETCARETINDEX, (WPARAM)(int)(index), 0L))
+
+#define ListBox_SetColumnWidth(hwndCtl, cxColumn) \
+	((void)SendMessage((hwndCtl), LB_SETCOLUMNWIDTH, (WPARAM)(int)(cxColumn), 0L))
+
+#define ListBox_SetCurSel(hwndCtl, index) \
+	((int)SendMessage((hwndCtl), LB_SETCURSEL, (WPARAM)(int)(index), 0L))
+
+#define ListBox_SetHorizontalExtent(hwndCtl, cxExtent) \
+	((void)SendMessage((hwndCtl), LB_SETHORIZONTALEXTENT, (WPARAM)(int)(cxExtent), 0L))
+
+#define ListBox_SetItemData(hwndCtl, index, data) \
+	((int)SendMessage((hwndCtl), LB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data)))
+
+#define ListBox_SetItemHeight(hwndCtl, index, cy) \
+	((int)SendMessage((hwndCtl), LB_SETITEMHEIGHT, (WPARAM)(int)(index), MAKELPARAM((cy), 0)))
+
+#define ListBox_SetSel(hwndCtl, fSelect, index) \
+	((int)SendMessage((hwndCtl), LB_SETSEL, (WPARAM)(BOOL)(fSelect), (LPARAM)(UINT)(index)))
+
+#define ListBox_SetTabStops(hwndCtl, cTabs, lpTabs) \
+	((BOOL)SendMessage((hwndCtl), LB_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(int *)(lpTabs)))
+
+#define ListBox_SetTopIndex(hwndCtl, indexTop) \
+	((int)SendMessage((hwndCtl), LB_SETTOPINDEX, (WPARAM)(int)(indexTop), 0L))
+
+
+/* Scrollbar Message APIs */
+
+#define ScrollBar_Enable(hwndCtl, flags) \
+	EnableScrollBar((hwndCtl), SB_CTL, (flags))
+
+#define ScrollBar_GetPos(hwndCtl) \
+	GetScrollPos((hwndCtl), SB_CTL)
+
+#define ScrollBar_GetRange(hwndCtl, lpposMin, lpposMax) \
+	GetScrollRange((hwndCtl), SB_CTL, (lpposMin), (lpposMax))
+
+#define ScrollBar_SetPos(hwndCtl, pos, fRedraw) \
+	SetScrollPos((hwndCtl), SB_CTL, (pos), (fRedraw))
+
+#define ScrollBar_SetRange(hwndCtl, posMin, posMax, fRedraw) \
+	SetScrollRange((hwndCtl), SB_CTL, (posMin), (posMax), (fRedraw))
+
+#define ScrollBar_Show(hwndCtl, fShow) \
+	ShowWindow((hwndCtl), (fShow) ? SW_SHOWNORMAL : SW_HIDE)
+
+
+/* Static Message APIs */
+
+#define Static_Enable(hwndCtl, fEnable) \
+	EnableWindow((hwndCtl), (fEnable))
+
+#define Static_GetIcon(hwndCtl, hIcon) \
+	((HICON)SendMessage((hwndCtl), STM_GETICON, 0L, 0L))
+
+#define Static_GetText(hwndCtl, lpch, cchMax) \
+	GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define Static_GetTextLength(hwndCtl) \
+	GetWindowTextLength(hwndCtl)
+
+#define Static_SetIcon(hwndCtl, hIcon) \
+	((HICON)SendMessage((hwndCtl), STM_SETICON, (WPARAM)(HICON)(hIcon), 0L))
+
+#define Static_SetText(hwndCtl, lpsz) \
+	SetWindowText((hwndCtl), (lpsz))
+
+
+/****** Message crackers ****************************************************/
+
+#define HANDLE_MSG(hwnd, message, fn)    \
+    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
+
+/* void Cls_OnCompacting(HWND hwnd, UINT compactRatio) */
+#define HANDLE_WM_COMPACTING(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam)), 0L)
+#define FORWARD_WM_COMPACTING(hwnd, compactRatio, fn) \
+    (void)(fn)((hwnd), WM_COMPACTING, (WPARAM)(UINT)(compactRatio), 0L)
+
+/* void Cls_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName) */
+#define HANDLE_WM_WININICHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
+#define FORWARD_WM_WININICHANGE(hwnd, lpszSectionName, fn) \
+    (void)(fn)((hwnd), WM_WININICHANGE, 0L, (LPARAM)(LPCTSTR)(lpszSectionName))
+
+/* void Cls_OnSysColorChange(HWND hwnd) */
+#define HANDLE_WM_SYSCOLORCHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_SYSCOLORCHANGE(hwnd, fn) \
+    (void)(fn)((hwnd), WM_SYSCOLORCHANGE, 0L, 0L)
+
+/* BOOL Cls_OnQueryNewPalette(HWND hwnd) */
+#define HANDLE_WM_QUERYNEWPALETTE(hwnd, wParam, lParam, fn) \
+    MAKELRESULT((BOOL)(fn)(hwnd), 0L)
+#define FORWARD_WM_QUERYNEWPALETTE(hwnd, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYNEWPALETTE, 0L, 0L)
+
+/* void Cls_OnPaletteIsChanging(HWND hwnd, HWND hwndPaletteChange) */
+#define HANDLE_WM_PALETTEISCHANGING(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_PALETTEISCHANGING(hwnd, hwndPaletteChange, fn) \
+    (void)(fn)((hwnd), WM_PALETTEISCHANGING, (WPARAM)(HWND)(hwndPaletteChange), 0L)
+
+/* void Cls_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange) */
+#define HANDLE_WM_PALETTECHANGED(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_PALETTECHANGED(hwnd, hwndPaletteChange, fn) \
+    (void)(fn)((hwnd), WM_PALETTECHANGED, (WPARAM)(HWND)(hwndPaletteChange), 0L)
+
+/* void Cls_OnFontChange(HWND hwnd) */
+#define HANDLE_WM_FONTCHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_FONTCHANGE(hwnd, fn) \
+    (void)(fn)((hwnd), WM_FONTCHANGE, 0L, 0L)
+
+/* void Cls_OnSpoolerStatus(HWND hwnd, UINT status, int cJobInQueue) */
+#define HANDLE_WM_SPOOLERSTATUS(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_SPOOLERSTATUS(hwnd, status, cJobInQueue, fn) \
+    (void)(fn)((hwnd), WM_SPOOLERSTATUS, (WPARAM)(status), MAKELPARAM((cJobInQueue), 0))
+
+/* void Cls_OnDevModeChange(HWND hwnd, LPCTSTR lpszDeviceName) */
+#define HANDLE_WM_DEVMODECHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
+#define FORWARD_WM_DEVMODECHANGE(hwnd, lpszDeviceName, fn) \
+    (void)(fn)((hwnd), WM_DEVMODECHANGE, 0L, (LPARAM)(LPCTSTR)(lpszDeviceName))
+
+/* void Cls_OnTimeChange(HWND hwnd) */
+#define HANDLE_WM_TIMECHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_TIMECHANGE(hwnd, fn) \
+    (void)(fn)((hwnd), WM_TIMECHANGE, 0L, 0L)
+
+/* void Cls_OnPower(HWND hwnd, int code) */
+#define HANDLE_WM_POWER(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(wParam)), 0L)
+#define FORWARD_WM_POWER(hwnd, code, fn) \
+    (void)(fn)((hwnd), WM_POWER, (WPARAM)(int)(code), 0L)
+
+/* BOOL Cls_OnQueryEndSession(HWND hwnd) */
+#define HANDLE_WM_QUERYENDSESSION(hwnd, wParam, lParam, fn) \
+    MAKELRESULT((BOOL)(fn)(hwnd), 0L)
+#define FORWARD_WM_QUERYENDSESSION(hwnd, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYENDSESSION, 0L, 0L)
+
+/* void Cls_OnEndSession(HWND hwnd, BOOL fEnding) */
+#define HANDLE_WM_ENDSESSION(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (BOOL)(wParam)), 0L)
+#define FORWARD_WM_ENDSESSION(hwnd, fEnding, fn) \
+    (void)(fn)((hwnd), WM_ENDSESSION, (WPARAM)(BOOL)(fEnding), 0L)
+
+/* void Cls_OnQuit(HWND hwnd, int exitCode) */
+#define HANDLE_WM_QUIT(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(wParam)), 0L)
+#define FORWARD_WM_QUIT(hwnd, exitCode, fn) \
+    (void)(fn)((hwnd), WM_QUIT, (WPARAM)(exitCode), 0L)
+
+/* This message is in Windows 3.1 only */
+/* void Cls_OnSystemError(HWND hwnd, int errCode) */
+#define HANDLE_WM_SYSTEMERROR(hwnd, wParam, lParam, fn) 0L
+#define FORWARD_WM_SYSTEMERROR(hwnd, errCode, fn) 0L
+
+/* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
+#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)
+#define FORWARD_WM_CREATE(hwnd, lpCreateStruct, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_CREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
+
+/* BOOL Cls_OnNCCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
+#define HANDLE_WM_NCCREATE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPCREATESTRUCT)(lParam))
+#define FORWARD_WM_NCCREATE(hwnd, lpCreateStruct, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_NCCREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
+
+/* void Cls_OnDestroy(HWND hwnd) */
+#define HANDLE_WM_DESTROY(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_DESTROY(hwnd, fn) \
+    (void)(fn)((hwnd), WM_DESTROY, 0L, 0L)
+
+/* void Cls_OnNCDestroy(HWND hwnd) */
+#define HANDLE_WM_NCDESTROY(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_NCDESTROY(hwnd, fn) \
+    (void)(fn)((hwnd), WM_NCDESTROY, 0L, 0L)
+
+/* void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status) */
+#define HANDLE_WM_SHOWWINDOW(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (BOOL)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD_WM_SHOWWINDOW(hwnd, fShow, status, fn) \
+    (void)(fn)((hwnd), WM_SHOWWINDOW, (WPARAM)(BOOL)(fShow), (LPARAM)(UINT)(status))
+
+/* void Cls_OnSetRedraw(HWND hwnd, BOOL fRedraw) */
+#define HANDLE_WM_SETREDRAW(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (BOOL)(wParam)), 0L)
+#define FORWARD_WM_SETREDRAW(hwnd, fRedraw, fn) \
+    (void)(fn)((hwnd), WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L)
+
+/* void Cls_OnEnable(HWND hwnd, BOOL fEnable) */
+#define HANDLE_WM_ENABLE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (BOOL)(wParam)), 0L)
+#define FORWARD_WM_ENABLE(hwnd, fEnable, fn) \
+    (void)(fn)((hwnd), WM_ENABLE, (WPARAM)(BOOL)(fEnable), 0L)
+
+/* void Cls_OnSetText(HWND hwnd, LPCTSTR lpszText) */
+#define HANDLE_WM_SETTEXT(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
+#define FORWARD_WM_SETTEXT(hwnd, lpszText, fn) \
+    (void)(fn)((hwnd), WM_SETTEXT, 0L, (LPARAM)(LPCTSTR)(lpszText))
+
+/* INT Cls_OnGetText(HWND hwnd, int cchTextMax, LPTSTR lpszText) */
+#define HANDLE_WM_GETTEXT(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(int)(fn)((hwnd), (int)(wParam), (LPTSTR)(lParam))
+#define FORWARD_WM_GETTEXT(hwnd, cchTextMax, lpszText, fn) \
+    (int)(DWORD)(fn)((hwnd), WM_GETTEXT, (WPARAM)(int)(cchTextMax), (LPARAM)(LPTSTR)(lpszText))
+
+/* INT Cls_OnGetTextLength(HWND hwnd) */
+#define HANDLE_WM_GETTEXTLENGTH(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(int)(fn)(hwnd)
+#define FORWARD_WM_GETTEXTLENGTH(hwnd, fn) \
+    (int)(DWORD)(fn)((hwnd), WM_GETTEXTLENGTH, 0L, 0L)
+
+/* BOOL Cls_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos) */
+#define HANDLE_WM_WINDOWPOSCHANGING(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPWINDOWPOS)(lParam))
+#define FORWARD_WM_WINDOWPOSCHANGING(hwnd, lpwpos, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_WINDOWPOSCHANGING, 0L, (LPARAM)(LPWINDOWPOS)(lpwpos))
+
+/* void Cls_OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos) */
+#define HANDLE_WM_WINDOWPOSCHANGED(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (const LPWINDOWPOS)(lParam)), 0L)
+#define FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, fn) \
+    (void)(fn)((hwnd), WM_WINDOWPOSCHANGED, 0L, (LPARAM)(const LPWINDOWPOS)(lpwpos))
+
+/* void Cls_OnMove(HWND hwnd, int x, int y) */
+#define HANDLE_WM_MOVE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_MOVE(hwnd, x, y, fn) \
+    (void)(fn)((hwnd), WM_MOVE, 0L, MAKELPARAM((x), (y)))
+
+/* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */
+#define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SIZE(hwnd, state, cx, cy, fn) \
+    (void)(fn)((hwnd), WM_SIZE, (WPARAM)(UINT)(state), MAKELPARAM((cx), (cy)))
+
+/* void Cls_OnClose(HWND hwnd) */
+#define HANDLE_WM_CLOSE(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_CLOSE(hwnd, fn) \
+    (void)(fn)((hwnd), WM_CLOSE, 0L, 0L)
+
+/* BOOL Cls_OnQueryOpen(HWND hwnd) */
+#define HANDLE_WM_QUERYOPEN(hwnd, wParam, lParam, fn) \
+    MAKELRESULT((BOOL)(fn)(hwnd), 0L)
+#define FORWARD_WM_QUERYOPEN(hwnd, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYOPEN, 0L, 0L)
+
+/* void Cls_OnPaint(HWND hwnd) */
+#define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_PAINT(hwnd, fn) \
+    (void)(fn)((hwnd), WM_PAINT, 0L, 0L)
+
+/* BOOL Cls_OnEraseBkgnd(HWND hwnd, HDC hdc) */
+#define HANDLE_WM_ERASEBKGND(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))
+#define FORWARD_WM_ERASEBKGND(hwnd, hdc, fn) \
+   (BOOL)(DWORD)(fn)((hwnd), WM_ERASEBKGND, (WPARAM)(HDC)(hdc), 0L)
+
+/* BOOL Cls_OnIconEraseBkgnd(HWND hwnd, HDC hdc) */
+#define HANDLE_WM_ICONERASEBKGND(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))
+#define FORWARD_WM_ICONERASEBKGND(hwnd, hdc, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_ICONERASEBKGND, (WPARAM)(HDC)(hdc), 0L)
+
+/* void Cls_OnNCPaint(HWND hwnd, HRGN hrgn) */
+#define HANDLE_WM_NCPAINT(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HRGN)(wParam)), 0L)
+#define FORWARD_WM_NCPAINT(hwnd, hrgn, fn) \
+    (void)(fn)((hwnd), WM_NCPAINT, (WPARAM)(HRGN)(hrgn), 0L)
+
+/* UINT Cls_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp) */
+#define HANDLE_WM_NCCALCSIZE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(0), (NCCALCSIZE_PARAMS *)(lParam))
+#define FORWARD_WM_NCCALCSIZE(hwnd, fCalcValidRects, lpcsp, fn) \
+    (UINT)(DWORD)(fn)((hwnd), WM_NCCALCSIZE, 0L, (LPARAM)(NCCALCSIZE_PARAMS *)(lpcsp))
+
+/* HICON Cls_OnQueryDragIcon(HWND hwnd) */
+#define HANDLE_WM_QUERYDRAGICON(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(fn)(hwnd)
+#define FORWARD_WM_QUERYDRAGICON(hwnd, fn) \
+    (HICON)(UINT)(DWORD)(fn)((hwnd), WM_QUERYDRAGICON, 0L, 0L)
+
+/* void Cls_OnDropFiles(HWND hwnd, HDROP hdrop) */
+#define HANDLE_WM_DROPFILES(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HDROP)(wParam)), 0L)
+#define FORWARD_WM_DROPFILES(hwnd, hdrop, fn) \
+    (void)(fn)((hwnd), WM_DROPFILES, (WPARAM)(HDROP)(hdrop), 0L)
+
+/* void Cls_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized) */
+#define HANDLE_WM_ACTIVATE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (BOOL)HIWORD(wParam)), 0L)
+#define FORWARD_WM_ACTIVATE(hwnd, state, hwndActDeact, fMinimized, fn) \
+    (void)(fn)((hwnd), WM_ACTIVATE, MAKEWPARAM((state), (fMinimized)), (LPARAM)(HWND)(hwndActDeact))
+
+/* void Cls_OnActivateApp(HWND hwnd, BOOL fActivate, DWORD dwThreadId) */
+#define HANDLE_WM_ACTIVATEAPP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (BOOL)(wParam), (DWORD)(lParam)), 0L)
+#define FORWARD_WM_ACTIVATEAPP(hwnd, fActivate, dwThreadId, fn) \
+    (void)(fn)((hwnd), WM_ACTIVATEAPP, (WPARAM)(BOOL)(fActivate), (LPARAM)(dwThreadId))
+
+/* BOOL Cls_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized) */
+#define HANDLE_WM_NCACTIVATE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (BOOL)(wParam), 0L, 0L)
+#define FORWARD_WM_NCACTIVATE(hwnd, fActive, hwndActDeact, fMinimized, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_NCACTIVATE, (WPARAM)(BOOL)(fActive), 0L)
+
+/* void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus) */
+#define HANDLE_WM_SETFOCUS(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_SETFOCUS(hwnd, hwndOldFocus, fn) \
+    (void)(fn)((hwnd), WM_SETFOCUS, (WPARAM)(HWND)(hwndOldFocus), 0L)
+
+/* void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus) */
+#define HANDLE_WM_KILLFOCUS(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_KILLFOCUS(hwnd, hwndNewFocus, fn) \
+    (void)(fn)((hwnd), WM_KILLFOCUS, (WPARAM)(HWND)(hwndNewFocus), 0L)
+
+/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_KEYDOWN(hwnd, vk, cRepeat, flags, fn) \
+    (void)(fn)((hwnd), WM_KEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_KEYUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_KEYUP(hwnd, vk, cRepeat, flags, fn) \
+    (void)(fn)((hwnd), WM_KEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_CHAR(hwnd, ch, cRepeat, fn) \
+    (void)(fn)((hwnd), WM_CHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))
+
+/* void Cls_OnDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_DEADCHAR(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_DEADCHAR(hwnd, ch, cRepeat, fn) \
+    (void)(fn)((hwnd), WM_DEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))
+
+/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_SYSKEYDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SYSKEYDOWN(hwnd, vk, cRepeat, flags, fn) \
+    (void)(fn)((hwnd), WM_SYSKEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_SYSKEYUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SYSKEYUP(hwnd, vk, cRepeat, flags, fn) \
+    (void)(fn)((hwnd), WM_SYSKEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnSysChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_SYSCHAR(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_SYSCHAR(hwnd, ch, cRepeat, fn) \
+    (void)(fn)((hwnd), WM_SYSCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))
+
+/* void Cls_OnSysDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_SYSDEADCHAR(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_SYSDEADCHAR(hwnd, ch, cRepeat, fn) \
+    (void)(fn)((hwnd), WM_SYSDEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))
+
+/* void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_MOUSEMOVE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_MOUSEMOVE(hwnd, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), WM_MOUSEMOVE, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_LBUTTONDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_LBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), (fDoubleClick) ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_LBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_LBUTTONUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_LBUTTONUP(hwnd, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), WM_LBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_RBUTTONDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_RBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), (fDoubleClick) ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_RBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags) */
+#define HANDLE_WM_RBUTTONUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_RBUTTONUP(hwnd, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), WM_RBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_MBUTTONDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_MBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), (fDoubleClick) ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_MBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnMButtonUp(HWND hwnd, int x, int y, UINT flags) */
+#define HANDLE_WM_MBUTTONUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_MBUTTONUP(hwnd, x, y, keyFlags, fn) \
+    (void)(fn)((hwnd), WM_MBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCMouseMove(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMOUSEMOVE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCMOUSEMOVE(hwnd, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), WM_NCMOUSEMOVE, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCLBUTTONDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCLBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCLBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnNCLButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCLBUTTONUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCLBUTTONUP(hwnd, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), WM_NCLBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCRBUTTONDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCRBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCRBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnNCRButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCRBUTTONUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCRBUTTONUP(hwnd, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), WM_NCRBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMBUTTONDOWN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCMBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnNCMButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMBUTTONUP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCMBUTTONUP(hwnd, x, y, codeHitTest, fn) \
+    (void)(fn)((hwnd), WM_NCMBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* int Cls_OnMouseActivate(HWND hwnd, HWND hwndTopLevel, UINT codeHitTest, UINT msg) */
+#define HANDLE_WM_MOUSEACTIVATE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(int)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))
+#define FORWARD_WM_MOUSEACTIVATE(hwnd, hwndTopLevel, codeHitTest, msg, fn) \
+    (int)(DWORD)(fn)((hwnd), WM_MOUSEACTIVATE, (WPARAM)(HWND)(hwndTopLevel), MAKELPARAM((codeHitTest), (msg)))
+
+/* void Cls_OnCancelMode(HWND hwnd) */
+#define HANDLE_WM_CANCELMODE(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_CANCELMODE(hwnd, fn)  (void)(fn)((hwnd), WM_CANCELMODE, 0L, 0L)
+
+/* void Cls_OnInitMenu(HWND hwnd, HMENU hMenu) */
+#define HANDLE_WM_INITMENU(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HMENU)(wParam)), 0L)
+#define FORWARD_WM_INITMENU(hwnd, hMenu, fn) \
+    (void)(fn)((hwnd), WM_INITMENU, (WPARAM)(HMENU)(hMenu), 0L)
+
+/* void Cls_OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags) */
+#define HANDLE_WM_MENUSELECT(hwnd, wParam, lParam, fn)                  \
+    ((fn)((hwnd), (HMENU)(lParam),  \
+    (HIWORD(wParam) & MF_POPUP) ? 0L : (int)(LOWORD(wParam)),           \
+    (HIWORD(wParam) & MF_POPUP) ? GetSubMenu((HMENU)lParam, LOWORD(wParam)) : 0L, \
+    (UINT)(((short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))), 0L)
+#define FORWARD_WM_MENUSELECT(hwnd, hmenu, item, hmenuPopup, flags, fn) \
+    (void)(fn)((hwnd), WM_MENUSELECT, MAKEWPARAM((item), (flags)), (LPARAM)(HMENU)((hmenu) ? (hmenu) : (hmenuPopup)))
+
+/* DWORD Cls_OnMenuChar(HWND hwnd, UINT ch, UINT flags, HMENU hmenu) */
+#define HANDLE_WM_MENUCHAR(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(LOWORD(wParam)), (UINT)HIWORD(wParam), (HMENU)(lParam))
+#define FORWARD_WM_MENUCHAR(hwnd, ch, flags, hmenu, fn) \
+    (DWORD)(fn)((hwnd), WM_MENUCHAR, MAKEWPARAM(flags, (WORD)(ch)), (LPARAM)(HMENU)(hmenu))
+
+/* void Cls_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
+#define HANDLE_WM_HSCROLL(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L)
+#define FORWARD_WM_HSCROLL(hwnd, hwndCtl, code, pos, fn) \
+    (void)(fn)((hwnd), WM_HSCROLL, MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)), (LPARAM)(UINT)(hwndCtl))
+
+/* void Cls_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
+#define HANDLE_WM_VSCROLL(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)),  (int)(short)HIWORD(wParam)), 0L)
+#define FORWARD_WM_VSCROLL(hwnd, hwndCtl, code, pos, fn) \
+    (void)(fn)((hwnd), WM_VSCROLL, MAKEWPARAM((UINT)(int)(code), (UINT)(int)(pos)), (LPARAM)(HWND)(hwndCtl))
+
+/* void Cls_OnCut(HWND hwnd) */
+#define HANDLE_WM_CUT(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_CUT(hwnd, fn)  (void)(fn)((hwnd), WM_CUT, 0L, 0L)
+
+/* void Cls_OnCopy(HWND hwnd) */
+#define HANDLE_WM_COPY(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_COPY(hwnd, fn)  (void)(fn)((hwnd), WM_COPY, 0L, 0L)
+
+/* void Cls_OnPaste(HWND hwnd) */
+#define HANDLE_WM_PASTE(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_PASTE(hwnd, fn)  (void)(fn)((hwnd), WM_PASTE, 0L, 0L)
+
+/* void Cls_OnClear(HWND hwnd) */
+#define HANDLE_WM_CLEAR(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_CLEAR(hwnd, fn)  (void)(fn)((hwnd), WM_CLEAR, 0L, 0L)
+
+/* void Cls_OnUndo(HWND hwnd) */
+#define HANDLE_WM_UNDO(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_UNDO(hwnd, fn)  (void)(fn)((hwnd), WM_UNDO, 0L, 0L)
+
+/* HANDLE Cls_OnRenderFormat(HWND hwnd, UINT fmt) */
+#define HANDLE_WM_RENDERFORMAT(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HANDLE)(fn)((hwnd), (UINT)(wParam))
+#define FORWARD_WM_RENDERFORMAT(hwnd, fmt, fn) \
+    (HANDLE)(UINT)(DWORD)(fn)((hwnd), WM_RENDERFORMAT, (WPARAM)(UINT)(fmt), 0L)
+
+/* void Cls_OnRenderAllFormats(HWND hwnd) */
+#define HANDLE_WM_RENDERALLFORMATS(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_RENDERALLFORMATS(hwnd, fn)  (void)(fn)((hwnd), WM_RENDERALLFORMATS, 0L, 0L)
+
+/* void Cls_OnDestroyClipboard(HWND hwnd) */
+#define HANDLE_WM_DESTROYCLIPBOARD(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_DESTROYCLIPBOARD(hwnd, fn)  (void)(fn)((hwnd), WM_DESTROYCLIPBOARD, 0L, 0L)
+
+/* void Cls_OnDrawClipboard(HWND hwnd) */
+#define HANDLE_WM_DRAWCLIPBOARD(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)
+#define FORWARD_WM_DRAWCLIPBOARD(hwnd, fn)  (void)(fn)((hwnd), WM_DRAWCLIPBOARD, 0L, 0L)
+
+/* void Cls_OnPaintClipboard(HWND hwnd, HWND hwndCBViewer, const LPPAINTSTRUCT lpPaintStruct) */
+#define HANDLE_WM_PAINTCLIPBOARD(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam), (const LPPAINTSTRUCT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)
+#define FORWARD_WM_PAINTCLIPBOARD(hwnd, hwndCBViewer, lpPaintStruct, fn) \
+    (void)(fn)((hwnd), WM_PAINTCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPPAINTSTRUCT)(lpPaintStruct))
+
+/* void Cls_OnSizeClipboard(HWND hwnd, HWND hwndCBViewer, const LPRECT lprc) */
+#define HANDLE_WM_SIZECLIPBOARD(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam), (const LPRECT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)
+#define FORWARD_WM_SIZECLIPBOARD(hwnd, hwndCBViewer, lprc, fn) \
+    (void)(fn)((hwnd), WM_SIZECLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPRECT)(lprc))
+
+/* void Cls_OnVScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
+#define HANDLE_WM_VSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_VSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \
+    (void)(fn)((hwnd), WM_VSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))
+
+/* void Cls_OnHScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
+#define HANDLE_WM_HSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_HSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \
+    (void)(fn)((hwnd), WM_HSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))
+
+/* void Cls_OnAskCBFormatName(HWND hwnd, int cchMax, LPTSTR rgchName) */
+#define HANDLE_WM_ASKCBFORMATNAME(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(wParam), (LPTSTR)(lParam)), 0L)
+#define FORWARD_WM_ASKCBFORMATNAME(hwnd, cchMax, rgchName, fn) \
+    (void)(fn)((hwnd), WM_ASKCBFORMATNAME, (WPARAM)(int)(cchMax), (LPARAM)(rgchName))
+
+/* void Cls_OnChangeCBChain(HWND hwnd, HWND hwndRemove, HWND hwndNext) */
+#define HANDLE_WM_CHANGECBCHAIN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam), (HWND)(lParam)), 0L)
+#define FORWARD_WM_CHANGECBCHAIN(hwnd, hwndRemove, hwndNext, fn) \
+    (void)(fn)((hwnd), WM_CHANGECBCHAIN, (WPARAM)(HWND)(hwndRemove), (LPARAM)(HWND)(hwndNext))
+
+/* BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg) */
+#define HANDLE_WM_SETCURSOR(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))
+#define FORWARD_WM_SETCURSOR(hwnd, hwndCursor, codeHitTest, msg, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_SETCURSOR, (WPARAM)(HWND)(hwndCursor), MAKELPARAM((codeHitTest), (msg)))
+
+/* void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y) */
+#define HANDLE_WM_SYSCOMMAND(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SYSCOMMAND(hwnd, cmd, x, y, fn) \
+    (void)(fn)((hwnd), WM_SYSCOMMAND, (WPARAM)(UINT)(cmd), MAKELPARAM((x), (y)))
+
+/* HWND Cls_MDICreate(HWND hwnd, const LPMDICREATESTRUCT lpmcs) */
+#define HANDLE_WM_MDICREATE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (LPMDICREATESTRUCT)(lParam))
+#define FORWARD_WM_MDICREATE(hwnd, lpmcs, fn) \
+    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDICREATE, 0L, (LPARAM)(LPMDICREATESTRUCT)(lpmcs))
+
+/* void Cls_MDIDestroy(HWND hwnd, HWND hwndDestroy) */
+#define HANDLE_WM_MDIDESTROY(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIDESTROY(hwnd, hwndDestroy, fn) \
+    (void)(fn)((hwnd), WM_MDIDESTROY, (WPARAM)(hwndDestroy), 0L)
+
+/* NOTE: Usable only by MDI client windows */
+/* void Cls_MDIActivate(HWND hwnd, BOOL fActive, HWND hwndActivate, HWND hwndDeactivate) */
+#define HANDLE_WM_MDIACTIVATE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (BOOL)(lParam == (LPARAM)hwnd), (HWND)(lParam), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIACTIVATE(hwnd, fActive, hwndActivate, hwndDeactivate, fn) \
+    (void)(fn)(hwnd, WM_MDIACTIVATE, (WPARAM)(hwndDeactivate), (LPARAM)(hwndActivate))
+
+/* void Cls_MDIRestore(HWND hwnd, HWND hwndRestore) */
+#define HANDLE_WM_MDIRESTORE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIRESTORE(hwnd, hwndRestore, fn) \
+    (void)(fn)((hwnd), WM_MDIRESTORE, (WPARAM)(hwndRestore), 0L)
+
+/* HWND Cls_MDINext(HWND hwnd, HWND hwndCur, BOOL fPrev) */
+#define HANDLE_WM_MDINEXT(hwnd, wParam, lParam, fn) \
+    (LRESULT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)lParam)
+#define FORWARD_WM_MDINEXT(hwnd, hwndCur, fPrev, fn) \
+    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDINEXT, (WPARAM)(hwndCur), (LPARAM)(fPrev))
+
+/* void Cls_MDIMaximize(HWND hwnd, HWND hwndMaximize) */
+#define HANDLE_WM_MDIMAXIMIZE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIMAXIMIZE(hwnd, hwndMaximize, fn) \
+    (void)(fn)((hwnd), WM_MDIMAXIMIZE, (WPARAM)(hwndMaximize), 0L)
+
+/* BOOL Cls_MDITile(HWND hwnd, UINT cmd) */
+#define HANDLE_WM_MDITILE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))
+#define FORWARD_WM_MDITILE(hwnd, cmd, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_MDITILE, (WPARAM)(cmd), 0L)
+
+/* BOOL Cls_MDICascade(HWND hwnd, UINT cmd) */
+#define HANDLE_WM_MDICASCADE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))
+#define FORWARD_WM_MDICASCADE(hwnd, cmd, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_MDICASCADE, (WPARAM)(cmd), 0L)
+
+/* void Cls_MDIIconArrange(HWND hwnd) */
+#define HANDLE_WM_MDIICONARRANGE(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_MDIICONARRANGE(hwnd, fn) \
+    (void)(fn)((hwnd), WM_MDIICONARRANGE, 0L, 0L)
+
+/* HWND Cls_MDIGetActive(HWND hwnd) */
+#define HANDLE_WM_MDIGETACTIVE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(fn)(hwnd)
+#define FORWARD_WM_MDIGETACTIVE(hwnd, fn) \
+    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDIGETACTIVE, 0L, 0L)
+
+/* HMENU Cls_MDISetMenu(HWND hwnd, BOOL fRefresh, HMENU hmenuFrame, HMENU hmenuWindow) */
+#define HANDLE_WM_MDISETMENU(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(wParam), (HMENU)(wParam), (HMENU)(lParam))
+#define FORWARD_WM_MDISETMENU(hwnd, fRefresh, hmenuFrame, hmenuWindow, fn) \
+    (HMENU)(UINT)(DWORD)(fn)((hwnd), WM_MDISETMENU, (WPARAM)((fRefresh) ? (hmenuFrame) : 0), (LPARAM)(hmenuWindow))
+
+/* void Cls_OnChildActivate(HWND hwnd) */
+#define HANDLE_WM_CHILDACTIVATE(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_CHILDACTIVATE(hwnd, fn) \
+    (void)(fn)((hwnd), WM_CHILDACTIVATE, 0L, 0L)
+
+/* BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) */
+#define HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd), (HWND)(wParam), lParam)
+#define FORWARD_WM_INITDIALOG(hwnd, hwndFocus, lParam, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_INITDIALOG, (WPARAM)(HWND)(hwndFocus), (lParam))
+
+/* HWND Cls_OnNextDlgCtl(HWND hwnd, HWND hwndSetFocus, BOOL fNext) */
+#define HANDLE_WM_NEXTDLGCTL(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)(lParam))
+#define FORWARD_WM_NEXTDLGCTL(hwnd, hwndSetFocus, fNext, fn) \
+    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_NEXTDLGCTL, (WPARAM)(HWND)(hwndSetFocus), (LPARAM)(fNext))
+
+/* void Cls_OnParentNotify(HWND hwnd, UINT msg, HWND hwndChild, int idChild) */
+#define HANDLE_WM_PARENTNOTIFY(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
+#define FORWARD_WM_PARENTNOTIFY(hwnd, msg, hwndChild, idChild, fn) \
+    (void)(fn)((hwnd), WM_PARENTNOTIFY, MAKEWPARAM(msg, idChild), (LPARAM)(hwndChild))
+
+/* void Cls_OnEnterIdle(HWND hwnd, UINT source, HWND hwndSource) */
+#define HANDLE_WM_ENTERIDLE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), (HWND)(lParam)), 0L)
+#define FORWARD_WM_ENTERIDLE(hwnd, source, hwndSource, fn) \
+    (void)(fn)((hwnd), WM_ENTERIDLE, (WPARAM)(UINT)(source), (LPARAM)(HWND)(hwndSource))
+
+/* UINT Cls_OnGetDlgCode(HWND hwnd, LPMSG lpmsg) */
+#define HANDLE_WM_GETDLGCODE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(fn)(hwnd, (LPMSG)(lParam))
+#define FORWARD_WM_GETDLGCODE(hwnd, lpmsg, fn) \
+    (UINT)(DWORD)(fn)((hwnd), WM_GETDLGCODE, (lpmsg ? lpmsg->wParam : 0), (LPARAM)(LPMSG)(lpmsg))
+
+/* HBRUSH Cls_OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type) */
+#define HANDLE_WM_CTLCOLORMSGBOX(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_MSGBOX)
+#define FORWARD_WM_CTLCOLORMSGBOX(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORMSGBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLOREDIT(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_EDIT)
+#define FORWARD_WM_CTLCOLOREDIT(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLOREDIT, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORLISTBOX(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_LISTBOX)
+#define FORWARD_WM_CTLCOLORLISTBOX(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORLISTBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORBTN(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_BTN)
+#define FORWARD_WM_CTLCOLORBTN(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORBTN, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORDLG(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_DLG)
+#define FORWARD_WM_CTLCOLORDLG(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORDLG, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORSCROLLBAR(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_SCROLLBAR)
+#define FORWARD_WM_CTLCOLORSCROLLBAR(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORSTATIC(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_STATIC)
+#define FORWARD_WM_CTLCOLORSTATIC(hwnd, hdc, hwndChild, fn) \
+    (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORSTATIC, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+/* void Cls_OnDeleteItem(HWND hwnd, const DELETEITEMSTRUCT * lpDeleteItem) */
+#define HANDLE_WM_DELETEITEM(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (const DELETEITEMSTRUCT *)(lParam)), 0L)
+#define FORWARD_WM_DELETEITEM(hwnd, lpDeleteItem, fn) \
+    (void)(fn)((hwnd), WM_DELETEITEM, (WPARAM)(((const DELETEITEMSTRUCT *)(lpDeleteItem))->CtlID), (LPARAM)(const DELETEITEMSTRUCT *)(lpDeleteItem))
+
+/* int Cls_OnCompareItem(HWND hwnd, const COMPAREITEMSTRUCT * lpCompareItem) */
+#define HANDLE_WM_COMPAREITEM(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(int)(fn)((hwnd), (const COMPAREITEMSTRUCT *)(lParam))
+#define FORWARD_WM_COMPAREITEM(hwnd, lpCompareItem, fn) \
+    (int)(DWORD)(fn)((hwnd), WM_COMPAREITEM, (WPARAM)(((const COMPAREITEMSTRUCT *)(lpCompareItem))->CtlID), (LPARAM)(const COMPAREITEMSTRUCT *)(lpCompareItem))
+
+/* int Cls_OnVkeyToItem(HWND hwnd, UINT vk, HWND hwndListbox, int iCaret) */
+#define HANDLE_WM_VKEYTOITEM(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))
+#define FORWARD_WM_VKEYTOITEM(hwnd, vk, hwndListBox, iCaret, fn) \
+    (int)(DWORD)(fn)((hwnd), WM_VKEYTOITEM, MAKEWPARAM((vk), (iCaret)), (LPARAM)(hwndListBox))
+
+/* int Cls_OnCharToItem(HWND hwnd, UINT ch, HWND hwndListbox, int iCaret) */
+#define HANDLE_WM_CHARTOITEM(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))
+#define FORWARD_WM_CHARTOITEM(hwnd, ch, hwndListBox, iCaret, fn) \
+    (int)(DWORD)(fn)((hwnd), WM_CHARTOITEM, MAKEWPARAM((UINT)(ch), (UINT)(iCaret)), (LPARAM)(hwndListBox))
+
+/* void Cls_OnQueueSync(HWND hwnd) */
+#define HANDLE_WM_QUEUESYNC(hwnd, wParam, lParam, fn) \
+    ((fn)(hwnd), 0L)
+#define FORWARD_WM_QUEUESYNC(hwnd, fn) \
+    (void)(fn)((hwnd), WM_QUEUESYNC, 0L, 0L)
+/* void Cls_OnCommNotify(HWND hwnd, int cid, UINT flags) */
+#define HANDLE_WM_COMMNOTIFY(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (int)(wParam), (UINT)LOWORD(lParam)), 0L)
+#define FORWARD_WM_COMMNOTIFY(hwnd, cid, flags, fn) \
+    (void)(fn)((hwnd), WM_COMMNOTIFY, (WPARAM)(cid), MAKELPARAM((flags), 0))
+
+/* void Cls_OnDisplayChange(HWND hwnd, UINT bitsPerPixel, UINT cxScreen, UINT cyScreen) */
+#define HANDLE_WM_DISPLAYCHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (UINT)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_DISPLAYCHANGE(hwnd, bitsPerPixel, cxScreen, cyScreen, fn) \
+    (void)(fn)((hwnd), WM_DISPLAYCHANGE, (WPARAM)(UINT)(bitsPerPixel), (LPARAM)MAKELPARAM((UINT)(cxScreen), (UINT)(cyScreen)))
+
+/* BOOL Cls_OnDeviceChange(HWND hwnd, UINT uEvent, DWORD dwEventData) */
+#define HANDLE_WM_DEVICECHANGE(hwnd, wParam, lParam, fn) \
+    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (UINT)(wParam), (DWORD)(wParam))
+#define FORWARD_WM_DEVICECHANGE(hwnd, uEvent, dwEventData, fn) \
+    (BOOL)(DWORD)(fn)((hwnd), WM_DEVICECHANGE, (WPARAM)(UINT)(uEvent), (LPARAM)(DWORD)(dwEventData))
+
+/* void Cls_OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos) */
+#define HANDLE_WM_CONTEXTMENU(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_CONTEXTMENU(hwnd, hwndContext, xPos, yPos, fn) \
+    (void)(fn)((hwnd), WM_CONTEXTMENU, (WPARAM)(HWND)(hwndContext), MAKELPARAM((UINT)(xPos), (UINT)(yPos)))
+
+/* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */
+#define HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, fn) \
+	    ((fn)((hwnd), (MEASUREITEMSTRUCT *)(lParam)), 0L)
+#define FORWARD_WM_MEASUREITEM(hwnd, lpMeasureItem, fn) \
+	    (void)(fn)((hwnd), WM_MEASUREITEM, (WPARAM)(((MEASUREITEMSTRUCT *)lpMeasureItem)->CtlID), (LPARAM)(MEASUREITEMSTRUCT *)(lpMeasureItem))
+
+/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
+#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
+	    ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
+#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
+	    (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))
+
+/* void Cls_OnTimer(HWND hwnd, UINT id) */
+#define HANDLE_WM_TIMER(hwnd, wParam, lParam, fn) ((fn)((hwnd), (UINT)(wParam)), 0L)
+#define FORWARD_WM_TIMER(hwnd, id, fn) (void)(fn)((hwnd), WM_TIMER, (WPARAM)(UINT)(id), 0L)
+
+/* void Cls_OnInitMenuPopup(HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu) */
+#define HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, fn) \
+        ((fn)((hwnd), (HMENU)(wParam), (UINT)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L)
+#define FORWARD_WM_INITMENUPOPUP(hwnd, hMenu, item, fSystemMenu, fn) \
+        (void)(fn)((hwnd), WM_INITMENUPOPUP, (WPARAM)(HMENU)(hMenu), MAKELPARAM((item),(fSystemMenu)))
+
+/* UINT Cls_OnNCHitTest(HWND hwnd, int x, int y) */
+#define HANDLE_WM_NCHITTEST(hwnd, wParam, lParam, fn) \
+	(LRESULT)(DWORD)(UINT)(fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam))
+#define FORWARD_WM_NCHITTEST(hwnd, x, y, fn) \
+	(UINT)(DWORD)(fn)((hwnd), WM_NCHITTEST, 0L, MAKELPARAM((x), (y)))
+
+/* HFONT Cls_OnGetFont(HWND hwnd) */
+#define HANDLE_WM_GETFONT(hwnd, wParam, lParam, fn)  (LRESULT)(DWORD)(UINT)(HFONT)(fn)(hwnd)
+#define FORWARD_WM_GETFONT(hwnd, fn)  (HFONT)(UINT)(DWORD)(fn)((hwnd), WM_GETFONT, 0L, 0L)
+
+/* void Cls_OnSetFont(HWND hwndCtl, HFONT hfont, BOOL fRedraw) */
+#define HANDLE_WM_SETFONT(hwnd, wParam, lParam, fn) \
+	    ((fn)((hwnd), (HFONT)(wParam), (BOOL)(lParam)), 0L)
+#define FORWARD_WM_SETFONT(hwnd, hfont, fRedraw, fn) \
+			 (void)(fn)((hwnd), WM_SETFONT, (WPARAM)(HFONT)(hfont), (LPARAM)(BOOL)(fRedraw))
+
+/* void Cls_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpMinMaxInfo) */
+#define HANDLE_WM_GETMINMAXINFO(hwnd, wParam, lParam, fn) \
+			 ((fn)((hwnd), (LPMINMAXINFO)(lParam)), 0L)
+#define FORWARD_WM_GETMINMAXINFO(hwnd, lpMinMaxInfo, fn) \
+			(void)(fn)((hwnd), WM_GETMINMAXINFO, 0L, (LPARAM)(LPMINMAXINFO)(lpMinMaxInfo))
+
+/* void Cls_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT lpDrawItem) */
+#define HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, fn) \
+	    ((fn)((hwnd), (const DRAWITEMSTRUCT *)(lParam)), 0L)
+#define FORWARD_WM_DRAWITEM(hwnd, lpDrawItem, fn) \
+        (void)(fn)((hwnd), WM_DRAWITEM, (WPARAM)(((const DRAWITEMSTRUCT *)lpDrawItem)->CtlID), (LPARAM)(const DRAWITEMSTRUCT *)(lpDrawItem))
+
+
+/****** C runtime porting macros ****************************************/
+
+#define _ncalloc    calloc
+#define _nexpand    _expand
+#define _ffree      free
+#define _fmalloc    malloc
+#define _fmemccpy   _memccpy
+#define _fmemchr    memchr
+#define _fmemcmp    memcmp
+#define _fmemcpy    memcpy
+#define _fmemicmp   _memicmp
+#define _fmemmove   memmove
+#define _fmemset    memset
+#define _fmsize     _msize
+#define _frealloc   realloc
+#define _fstrcat    strcat
+#define _fstrchr    strchr
+#define _fstrcmp    strcmp
+#define _fstrcpy    strcpy
+#define _fstrcspn   strcspn
+#define _fstrdup    _strdup
+#define _fstricmp   _stricmp
+#define _fstrlen    strlen
+#define _fstrlwr    _strlwr
+#define _fstrncat   strncat
+#define _fstrncmp   strncmp
+#define _fstrncpy   strncpy
+#define _fstrnicmp  _strnicmp
+#define _fstrnset   _strnset
+#define _fstrpbrk   strpbrk
+#define _fstrrchr   strrchr
+#define _fstrrev    _strrev
+#define _fstrset    _strset
+#define _fstrspn    strspn
+#define _fstrstr    strstr
+#define _fstrtok    strtok
+#define _fstrupr    _strupr
+#define _nfree      free
+#define _nmalloc    malloc
+#define _nmsize     _msize
+#define _nrealloc   realloc
+#define _nstrdup    _strdup
+#define hmemcpy     MoveMemory
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl
new file mode 100644
index 0000000..565ae90
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl
@@ -0,0 +1,97 @@
+/*
+ * Common DCE Types
+ *
+ * Copyright 2006 Robert Shearman (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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* pull in GUID type */
+import "wtypes.idl";
+
+typedef unsigned small unsigned8;
+typedef unsigned short unsigned16;
+typedef unsigned long unsigned32;
+typedef small signed8;
+typedef short signed16;
+typedef long signed32;
+typedef unsigned32 boolean32;
+typedef unsigned hyper u_int64;
+typedef unsigned long u_int32;
+typedef unsigned short u_int16;
+typedef unsigned small u_int8;
+
+typedef [ptr] GUID *uuid_p_t;
+
+typedef struct twr_t
+{
+				unsigned32 tower_length;
+	[size_is(tower_length)]	byte tower_octet_string[];
+} twr_t;
+typedef [ptr] twr_t *twr_p_t;
+
+typedef struct ndr_context_handle
+{
+    unsigned32      context_handle_attributes;
+    GUID            context_handle_uuid;
+} ndr_context_handle;
+
+const long  ndr_c_int_big_endian    = 0;
+const long  ndr_c_int_little_endian = 1;
+const long  ndr_c_float_ieee        = 0;
+const long  ndr_c_float_vax         = 1;
+const long  ndr_c_float_cray        = 2;
+const long  ndr_c_float_ibm         = 3;
+const long  ndr_c_char_ascii        = 0;
+const long  ndr_c_char_ebcdic       = 1;
+
+typedef struct
+{
+	unsigned8	int_rep;
+	unsigned8	char_rep;
+	unsigned8	float_rep;
+	byte		reserved;
+} ndr_format_t, *ndr_format_p_t;
+
+typedef struct
+{
+    GUID                    uuid;
+    unsigned16              vers_major;
+    unsigned16              vers_minor;
+} rpc_if_id_t;
+typedef [unique] rpc_if_id_t *rpc_if_id_p_t;
+
+typedef struct
+{
+    unsigned32              count;
+    [size_is(count)]
+    rpc_if_id_p_t           if_id[*];
+} rpc_if_id_vector_t;
+typedef [unique] rpc_if_id_vector_t *rpc_if_id_vector_p_t;
+
+typedef struct
+{
+    unsigned32          count;
+    unsigned32          stats[1];       /* length_is (count) */
+} rpc_stats_vector_t, *rpc_stats_vector_p_t;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h
new file mode 100644
index 0000000..5db641b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h
@@ -0,0 +1,297 @@
+/*
+ * Wine debugging interface
+ *
+ * Copyright 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_DEBUG_H
+#define __WINE_WINE_DEBUG_H
+
+#include <stdarg.h>
+#include <windef.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _GUID;
+
+/*
+ * Internal definitions (do not use these directly)
+ */
+
+enum __wine_debug_class
+{
+    __WINE_DBCL_FIXME,
+    __WINE_DBCL_ERR,
+    __WINE_DBCL_WARN,
+    __WINE_DBCL_TRACE,
+
+    __WINE_DBCL_INIT = 7  /* lazy init flag */
+};
+
+struct __wine_debug_channel
+{
+    unsigned char flags;
+    char name[15];
+};
+
+#ifndef WINE_NO_TRACE_MSGS
+# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE))
+#else
+# define __WINE_GET_DEBUGGING_TRACE(dbch) 0
+#endif
+
+#ifndef WINE_NO_DEBUG_MSGS
+# define __WINE_GET_DEBUGGING_WARN(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_WARN))
+# define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME))
+#else
+# define __WINE_GET_DEBUGGING_WARN(dbch)  0
+# define __WINE_GET_DEBUGGING_FIXME(dbch) 0
+#endif
+
+/* define error macro regardless of what is configured */
+#define __WINE_GET_DEBUGGING_ERR(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_ERR))
+
+#define __WINE_GET_DEBUGGING(dbcl,dbch)  __WINE_GET_DEBUGGING##dbcl(dbch)
+
+#define __WINE_IS_DEBUG_ON(dbcl,dbch) \
+  (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl)))
+
+#ifdef __GNUC__
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+       struct __wine_debug_channel * const __dbch = (dbch); \
+       const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
+       __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(args...) \
+    wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(args...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(args...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(args...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#elif defined(__SUNPRO_C)
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+       struct __wine_debug_channel * const __dbch = (dbch); \
+       const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
+       __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(...) \
+   wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args)
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#else  /* !__GNUC__ && !__SUNPRO_C */
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+    (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \
+     (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
+     (void)0 : (void)wine_dbg_printf
+
+#define __WINE_PRINTF_ATTR(fmt, args)
+
+#endif  /* !__GNUC__ && !__SUNPRO_C */
+
+struct __wine_debug_functions
+{
+    char * (*get_temp_buffer)( size_t n );
+    void   (*release_temp_buffer)( char *buffer, size_t n );
+    const char * (*dbgstr_an)( const char * s, int n );
+    const char * (*dbgstr_wn)( const WCHAR *s, int n );
+    int (*dbg_vprintf)( const char *format, va_list args );
+    int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                     const char *function, const char *format, va_list args );
+};
+
+extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel );
+extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+                                         unsigned char set, unsigned char clear );
+extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+                                      struct __wine_debug_functions *old_funcs, size_t size );
+
+/*
+ * Exported definitions and macros
+ */
+
+/* These functions return a printable version of a string, including
+   quotes.  The string will be valid for some time, but not indefinitely
+   as strings are re-used.  */
+extern const char *wine_dbgstr_an( const char * s, int n );
+extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
+extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+
+extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func,
+                         const char *format, ... ) __WINE_PRINTF_ATTR(4,5);
+
+static inline const char *wine_dbgstr_a( const char *s )
+{
+    return wine_dbgstr_an( s, -1 );
+}
+
+static inline const char *wine_dbgstr_w( const WCHAR *s )
+{
+    return wine_dbgstr_wn( s, -1 );
+}
+
+static inline const char *wine_dbgstr_guid( const GUID *id )
+{
+    if (!id) return "(null)";
+    if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( "<guid-0x%04hx>", (WORD)(ULONG_PTR)id );
+    return wine_dbg_sprintf( "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+                             id->Data1, id->Data2, id->Data3,
+                             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
+                             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
+}
+
+static inline const char *wine_dbgstr_point( const POINT *pt )
+{
+    if (!pt) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)", pt->x, pt->y );
+}
+
+static inline const char *wine_dbgstr_size( const SIZE *size )
+{
+    if (!size) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)", size->cx, size->cy );
+}
+
+static inline const char *wine_dbgstr_rect( const RECT *rect )
+{
+    if (!rect) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)-(%d,%d)", rect->left, rect->top,
+                             rect->right, rect->bottom );
+}
+
+static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
+{
+    if (sizeof(ll) > sizeof(unsigned long) && ll >> 32)
+        return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
+    else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
+}
+
+#ifndef WINE_TRACE
+#define WINE_TRACE                 __WINE_DPRINTF(_TRACE,__wine_dbch___default)
+#define WINE_TRACE_(ch)            __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)
+#endif
+#define WINE_TRACE_ON(ch)          __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)
+
+#ifndef WINE_WARN
+#define WINE_WARN                  __WINE_DPRINTF(_WARN,__wine_dbch___default)
+#define WINE_WARN_(ch)             __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)
+#endif
+#define WINE_WARN_ON(ch)           __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)
+
+#ifndef WINE_FIXME
+#define WINE_FIXME                 __WINE_DPRINTF(_FIXME,__wine_dbch___default)
+#define WINE_FIXME_(ch)            __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)
+#endif
+#define WINE_FIXME_ON(ch)          __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)
+
+#define WINE_ERR                   __WINE_DPRINTF(_ERR,__wine_dbch___default)
+#define WINE_ERR_(ch)              __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)
+#define WINE_ERR_ON(ch)            __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)
+
+#define WINE_DECLARE_DEBUG_CHANNEL(ch) \
+    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }
+#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \
+    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \
+    static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch
+
+#define WINE_DPRINTF               wine_dbg_printf
+#define WINE_MESSAGE               wine_dbg_printf
+
+#ifdef __WINESRC__
+/* Wine uses shorter names that are very likely to conflict with other software */
+
+static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
+static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
+static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); }
+static inline const char *debugstr_a( const char *s )  { return wine_dbgstr_an( s, -1 ); }
+static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+#define TRACE                      WINE_TRACE
+#define TRACE_(ch)                 WINE_TRACE_(ch)
+#define TRACE_ON(ch)               WINE_TRACE_ON(ch)
+
+#define WARN                       WINE_WARN
+#define WARN_(ch)                  WINE_WARN_(ch)
+#define WARN_ON(ch)                WINE_WARN_ON(ch)
+
+#define FIXME                      WINE_FIXME
+#define FIXME_(ch)                 WINE_FIXME_(ch)
+#define FIXME_ON(ch)               WINE_FIXME_ON(ch)
+
+#undef ERR  /* Solaris got an 'ERR' define in <sys/reg.h> */
+#define ERR                        WINE_ERR
+#define ERR_(ch)                   WINE_ERR_(ch)
+#define ERR_ON(ch)                 WINE_ERR_ON(ch)
+
+#define DPRINTF                    WINE_DPRINTF
+#define MESSAGE                    WINE_MESSAGE
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINE_DEBUG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h
new file mode 100644
index 0000000..86903c2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h
@@ -0,0 +1,375 @@
+/*
+ * Copyright 2000 Peter Hunnisett
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DIRECT_PLAY_SP_H
+#define __WINE_DIRECT_PLAY_SP_H
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "dplay.h"
+#include "dplobby.h"
+
+/* GUID for IDirectPlaySP  {0C9F6360-CC61-11cf-ACEC-00AA006886E3} */
+DEFINE_GUID(IID_IDirectPlaySP, 0xc9f6360, 0xcc61, 0x11cf, 0xac, 0xec, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
+typedef struct IDirectPlaySP *LPDIRECTPLAYSP;
+
+
+typedef BOOL (CALLBACK *LPENUMMRUCALLBACK)( LPCVOID lpData,
+                                            DWORD  dwDataSize,
+                                            LPVOID lpContext );
+
+/* For SP. Top 16 bits is dplay, bottom 16 is SP */
+#define DPSP_MAJORVERSION 0x00060000
+#define DPSP_DX5VERSION   0x00050000
+#define DPSP_DX3VERSION   0x00040000
+
+#define DPSP_MAJORVERSIONMASK 0xFFFF0000
+#define DPSP_MINORVERSIONMASK 0x0000FFFF
+
+
+/* Some flags */
+#define DPLAYI_PLAYER_SYSPLAYER      0x00000001
+#define DPLAYI_PLAYER_NAMESRVR       0x00000002
+#define DPLAYI_PLAYER_PLAYERINGROUP  0x00000004
+#define DPLAYI_PLAYER_PLAYERLOCAL    0x00000008
+#define DPLAYI_GROUP_SYSGROUP        0x00000020
+#define DPLAYI_GROUP_DPLAYOWNS       0x00000040
+#define DPLAYI_PLAYER_APPSERVER      0x00000080
+#define DPLAYI_GROUP_HIDDEN          0x00000400
+
+/* Define the COM interface */
+#define INTERFACE IDirectPlaySP
+DECLARE_INTERFACE_(IDirectPlaySP,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectPlaySP methods ***/
+    STDMETHOD(AddMRUEntry)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPCVOID lpData, DWORD dwDataSize, DWORD dwMaxEntries ) PURE;
+    STDMETHOD(CreateAddress)(THIS_ REFGUID guidSP, REFGUID guidDataType, LPCVOID lpData, DWORD dwDataSize, LPVOID lpAddress,LPDWORD lpdwAddressSize) PURE;
+    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, LPCVOID lpAddress, DWORD dwAddressSize, LPVOID lpContext ) PURE;
+    STDMETHOD(EnumMRUEntries)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPENUMMRUCALLBACK lpEnumMRUCallback, LPVOID lpContext ) PURE;
+    STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwPlayerFlags ) PURE;
+    STDMETHOD(GetSPPlayerData)(THIS_ DPID idPlayer, LPVOID *lplpData, LPDWORD lpdwDataSize, DWORD dwFlags ) PURE;
+    STDMETHOD(HandleMessage)(THIS_ LPVOID lpMessageBody, DWORD dwMessageBodySize, LPVOID lpMessageHeader ) PURE;
+    STDMETHOD(SetSPPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE;
+    STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT lpElements, DWORD dwElementCount, LPVOID lpAddress, LPDWORD lpdwAddressSize ) PURE;
+    STDMETHOD(GetSPData)(THIS_ LPVOID *lplpData, LPDWORD dwDataSize, DWORD dwFlags ) PURE;
+    STDMETHOD(SetSPData)(THIS_ LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE;
+    STDMETHOD_(VOID,SendComplete)(THIS_ LPVOID , DWORD  ) PURE;
+};
+#undef INTERFACE
+
+
+/* NOTE: The microsoft provided header file doesn't have these access
+ * functions
+ */
+#if !defined (__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlaySP_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlaySP_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirectPlaySP_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirectPlaySP methods ***/
+#define IDirectPlaySP_AddMRUEntry(p,a,b,c,d,e)     (p)->lpVtbl->AddMRUEntry(p,a,b,c,d,e)
+#define IDirectPlaySP_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)
+#define IDirectPlaySP_EnumAddress(p,a,b,c,d)       (p)->lpVtbl->EnumAddress(p,a,b,c,d)
+#define IDirectPlaySP_EnumMRUEntries(p,a,b,c,d)    (p)->lpVtbl->EnumMRUEntries(p,a,b,c,d)
+#define IDirectPlaySP_GetPlayerFlags(p,a,b)        (p)->lpVtbl->GetPlayerFlags(p,a,b)
+#define IDirectPlaySP_GetSPPlayerData(p,a,b,c,d)   (p)->lpVtbl->GetSPPlayerData(p,a,b,c,d)
+#define IDirectPlaySP_HandleMessage(p,a,b,c)       (p)->lpVtbl->HandleMessage(p,a,b,c)
+#define IDirectPlaySP_SetSPPlayerData(p,a,b,c,d)   (p)->lpVtbl->SetSPPlayerData(p,a,b,c,d)
+#define IDirectPlaySP_CreateCompoundAddress(p,a,b,c,d)  (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)
+#define IDirectPlaySP_GetSPData(p,a,b,c)           (p)->lpVtbl->GetSPData(p,a,b,c)
+#define IDirectPlaySP_SetSPData(p,a,b,c)           (p)->lpVtbl->SetSPData(p,a,b,c)
+#define IDirectPlaySP_SendComplete(p,a,b)          (p)->lpVtbl->SendComplete(p,a,b)
+#endif
+
+/* SP Callback stuff */
+
+typedef struct tagDPSP_ADDPLAYERTOGROUPDATA
+{
+  DPID           idPlayer;
+  DPID           idGroup;
+  IDirectPlaySP* lpISP;
+} DPSP_ADDPLAYERTOGROUPDATA, *LPDPSP_ADDPLAYERTOGROUPDATA;
+
+typedef struct tagDPSP_CLOSEDATA
+{
+  IDirectPlaySP* lpISP;
+} DPSP_CLOSEDATA, *LPDPSP_CLOSEDATA;
+
+typedef struct tagDPSP_CREATEGROUPDATA
+{
+  DPID           idGroup;
+  DWORD          dwFlags;
+  LPVOID         lpSPMessageHeader;
+  IDirectPlaySP* lpISP;
+} DPSP_CREATEGROUPDATA, *LPDPSP_CREATEGROUPDATA;
+
+typedef struct tagDPSP_CREATEPLAYERDATA
+{
+  DPID           idPlayer;
+  DWORD          dwFlags;
+  LPVOID         lpSPMessageHeader;
+  IDirectPlaySP* lpISP;
+} DPSP_CREATEPLAYERDATA, *LPDPSP_CREATEPLAYERDATA;
+
+typedef struct tagDPSP_DELETEGROUPDATA
+{
+  DPID           idGroup;
+  DWORD          dwFlags;
+  IDirectPlaySP* lpISP;
+} DPSP_DELETEGROUPDATA, *LPDPSP_DELETEGROUPDATA;
+
+typedef struct tagDPSP_DELETEPLAYERDATA
+{
+  DPID           idPlayer;
+  DWORD          dwFlags;
+  IDirectPlaySP* lpISP;
+} DPSP_DELETEPLAYERDATA, *LPDPSP_DELETEPLAYERDATA;
+
+typedef struct tagDPSP_ENUMSESSIONSDATA
+{
+  LPVOID         lpMessage;
+  DWORD          dwMessageSize;
+  IDirectPlaySP* lpISP;
+  BOOL           bReturnStatus;
+} DPSP_ENUMSESSIONSDATA, *LPDPSP_ENUMSESSIONSDATA;
+
+typedef struct _DPSP_GETADDRESSDATA
+{
+  DPID           idPlayer;
+  DWORD          dwFlags;
+  LPDPADDRESS    lpAddress;
+  LPDWORD        lpdwAddressSize;
+  IDirectPlaySP* lpISP;
+} DPSP_GETADDRESSDATA, *LPDPSP_GETADDRESSDATA;
+
+typedef struct tagDPSP_GETADDRESSCHOICESDATA
+{
+  LPDPADDRESS    lpAddress;
+  LPDWORD        lpdwAddressSize;
+  IDirectPlaySP* lpISP;
+} DPSP_GETADDRESSCHOICESDATA, *LPDPSP_GETADDRESSCHOICESDATA;
+
+typedef struct tagDPSP_GETCAPSDATA
+{
+  DPID           idPlayer;
+  LPDPCAPS       lpCaps;
+  DWORD          dwFlags;
+  IDirectPlaySP* lpISP;
+} DPSP_GETCAPSDATA, *LPDPSP_GETCAPSDATA;
+
+typedef struct tagDPSP_OPENDATA
+{
+  BOOL           bCreate;
+  LPVOID         lpSPMessageHeader;
+  IDirectPlaySP* lpISP;
+  BOOL           bReturnStatus;
+  DWORD          dwOpenFlags;
+  DWORD          dwSessionFlags;
+} DPSP_OPENDATA, *LPDPSP_OPENDATA;
+
+typedef struct tagDPSP_REMOVEPLAYERFROMGROUPDATA
+{
+  DPID           idPlayer;
+  DPID           idGroup;
+  IDirectPlaySP* lpISP;
+} DPSP_REMOVEPLAYERFROMGROUPDATA, *LPDPSP_REMOVEPLAYERFROMGROUPDATA;
+
+typedef struct tagDPSP_REPLYDATA
+{
+  LPVOID         lpSPMessageHeader;
+  LPVOID         lpMessage;
+  DWORD          dwMessageSize;
+  DPID           idNameServer;
+  IDirectPlaySP* lpISP;
+} DPSP_REPLYDATA, *LPDPSP_REPLYDATA;
+
+typedef struct tagDPSP_SENDDATA
+{
+  DWORD          dwFlags;
+  DPID           idPlayerTo;
+  DPID           idPlayerFrom;
+  LPVOID         lpMessage;
+  DWORD          dwMessageSize;
+  BOOL           bSystemMessage;
+  IDirectPlaySP* lpISP;
+} DPSP_SENDDATA, *LPDPSP_SENDDATA;
+
+typedef struct tagDPSP_SENDTOGROUPDATA
+{
+  DWORD          dwFlags;
+  DPID           idGroupTo;
+  DPID           idPlayerFrom;
+  LPVOID         lpMessage;
+  DWORD          dwMessageSize;
+  IDirectPlaySP* lpISP;
+} DPSP_SENDTOGROUPDATA, *LPDPSP_SENDTOGROUPDATA;
+
+typedef struct tagDPSP_SENDEXDATA
+{
+  IDirectPlaySP* lpISP;
+  DWORD          dwFlags;
+  DPID           idPlayerTo;
+  DPID           idPlayerFrom;
+  LPSGBUFFER     lpSendBuffers;
+  DWORD          cBuffers;
+  DWORD          dwMessageSize;
+  DWORD          dwPriority;
+  DWORD          dwTimeout;
+  LPVOID         lpDPContext;
+  LPDWORD        lpdwSPMsgID;
+  BOOL           bSystemMessage;
+} DPSP_SENDEXDATA, *LPDPSP_SENDEXDATA;
+
+typedef struct tagDPSP_SENDTOGROUPEXDATA
+{
+  IDirectPlaySP* lpISP;
+  DWORD          dwFlags;
+  DPID           idGroupTo;
+  DPID           idPlayerFrom;
+  LPSGBUFFER     lpSendBuffers;
+  DWORD          cBuffers;
+  DWORD          dwMessageSize;
+  DWORD          dwPriority;
+  DWORD          dwTimeout;
+  LPVOID         lpDPContext;
+  LPDWORD        lpdwSPMsgID;
+} DPSP_SENDTOGROUPEXDATA, *LPDPSP_SENDTOGROUPEXDATA;
+
+typedef struct tagDPSP_GETMESSAGEQUEUEDATA
+{
+  IDirectPlaySP* lpISP;
+  DWORD          dwFlags;
+  DPID           idFrom;
+  DPID           idTo;
+  LPDWORD        lpdwNumMsgs;
+  LPDWORD        lpdwNumBytes;
+} DPSP_GETMESSAGEQUEUEDATA, *LPDPSP_GETMESSAGEQUEUEDATA;
+
+#define DPCANCELSEND_PRIORITY 0x00000001
+#define DPCANCELSEND_ALL      0x00000002
+
+typedef struct tagDPSP_CANCELDATA
+{
+  IDirectPlaySP* lpISP;
+  DWORD          dwFlags;
+  LPRGLPVOID     lprglpvSPMsgID;
+  DWORD          cSPMsgID;
+  DWORD          dwMinPriority;
+  DWORD          dwMaxPriority;
+} DPSP_CANCELDATA, *LPDPSP_CANCELDATA;
+
+typedef struct tagDPSP_SHUTDOWNDATA
+{
+  IDirectPlaySP* lpISP;
+} DPSP_SHUTDOWNDATA, *LPDPSP_SHUTDOWNDATA;
+
+
+/* Prototypes returned by SPInit */
+typedef HRESULT (WINAPI *LPDPSP_CREATEPLAYER)(LPDPSP_CREATEPLAYERDATA);
+typedef HRESULT (WINAPI *LPDPSP_DELETEPLAYER)(LPDPSP_DELETEPLAYERDATA);
+typedef HRESULT (WINAPI *LPDPSP_SEND)(LPDPSP_SENDDATA);
+typedef HRESULT (WINAPI *LPDPSP_ENUMSESSIONS)(LPDPSP_ENUMSESSIONSDATA);
+typedef HRESULT (WINAPI *LPDPSP_REPLY)(LPDPSP_REPLYDATA);
+typedef HRESULT (WINAPI *LPDPSP_SHUTDOWN)(void);
+typedef HRESULT (WINAPI *LPDPSP_CREATEGROUP)(LPDPSP_CREATEGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_DELETEGROUP)(LPDPSP_DELETEGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_ADDPLAYERTOGROUP)(LPDPSP_ADDPLAYERTOGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_REMOVEPLAYERFROMGROUP)(LPDPSP_REMOVEPLAYERFROMGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETCAPS)(LPDPSP_GETCAPSDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETADDRESS)(LPDPSP_GETADDRESSDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETADDRESSCHOICES)(LPDPSP_GETADDRESSCHOICESDATA);
+typedef HRESULT (WINAPI *LPDPSP_OPEN)(LPDPSP_OPENDATA);
+typedef HRESULT (WINAPI *LPDPSP_CLOSE)(void);
+typedef HRESULT (WINAPI *LPDPSP_SENDTOGROUP)(LPDPSP_SENDTOGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_SHUTDOWNEX)(LPDPSP_SHUTDOWNDATA);
+typedef HRESULT (WINAPI *LPDPSP_CLOSEEX)(LPDPSP_CLOSEDATA);
+typedef HRESULT (WINAPI *LPDPSP_SENDEX)(LPDPSP_SENDEXDATA);
+typedef HRESULT (WINAPI *LPDPSP_SENDTOGROUPEX)(LPDPSP_SENDTOGROUPEXDATA);
+typedef HRESULT (WINAPI *LPDPSP_CANCEL)(LPDPSP_CANCELDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETMESSAGEQUEUE)(LPDPSP_GETMESSAGEQUEUEDATA);
+
+
+typedef struct tagDPSP_SPCALLBACKS
+{
+    DWORD                        dwSize;
+    DWORD                        dwVersion;
+
+    LPDPSP_ENUMSESSIONS          EnumSessions;          /* Must be provided */
+    LPDPSP_REPLY                 Reply;                 /* Must be provided */
+    LPDPSP_SEND                  Send;                  /* Must be provided */
+    LPDPSP_ADDPLAYERTOGROUP      AddPlayerToGroup;      /* Optional */
+    LPDPSP_CLOSE                 Close;                 /* Optional */
+    LPDPSP_CREATEGROUP           CreateGroup;           /* Optional */
+    LPDPSP_CREATEPLAYER          CreatePlayer;          /* Optional */
+    LPDPSP_DELETEGROUP           DeleteGroup;           /* Optional */
+    LPDPSP_DELETEPLAYER          DeletePlayer;          /* Optional */
+    LPDPSP_GETADDRESS            GetAddress;            /* Optional */
+    LPDPSP_GETCAPS               GetCaps;               /* Optional */
+    LPDPSP_OPEN                  Open;                  /* Optional */
+    LPDPSP_REMOVEPLAYERFROMGROUP RemovePlayerFromGroup; /* Optional */
+    LPDPSP_SENDTOGROUP           SendToGroup;           /* Optional */
+    LPDPSP_SHUTDOWN              Shutdown;              /* Optional */
+
+    LPDPSP_CLOSEEX               CloseEx;               /* Optional */
+    LPDPSP_SHUTDOWNEX            ShutdownEx;            /* Optional */
+    LPDPSP_GETADDRESSCHOICES     GetAddressChoices;     /* Optional */
+
+    LPDPSP_SENDEX                SendEx;                /* Optional */
+    LPDPSP_SENDTOGROUPEX         SendToGroupEx;         /* Optional */
+    LPDPSP_CANCEL                Cancel;                /* Optional */
+    LPDPSP_GETMESSAGEQUEUE       GetMessageQueue;       /* Optional */
+} DPSP_SPCALLBACKS, *LPDPSP_SPCALLBACKS;
+
+typedef struct tagSPINITDATA
+{
+    LPDPSP_SPCALLBACKS  lpCB;
+    IDirectPlaySP*      lpISP;
+    LPWSTR              lpszName;
+    LPGUID              lpGuid;
+    DWORD               dwReserved1;
+    DWORD               dwReserved2;
+    DWORD               dwSPHeaderSize;
+    LPDPADDRESS         lpAddress;
+    DWORD               dwAddressSize;
+    DWORD               dwSPVersion;
+} SPINITDATA, *LPSPINITDATA;
+
+typedef HRESULT (WINAPI *LPDPSP_SPINIT)(LPSPINITDATA);
+
+/* This variable is exported from the DLL at ordinal 6 to be accessed by the
+ * SP directly
+ */
+extern DWORD gdwDPlaySPRefCount;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl
new file mode 100644
index 0000000..099f826
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl
@@ -0,0 +1,131 @@
+/*
+ * Endpoint Mapper
+ *
+ * Copyright 2006 Robert Shearman (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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* FIXME: should be import */
+#include "dcetypes.idl"
+
+cpp_quote("RPC_STATUS WINAPI TowerExplode(")
+cpp_quote("    const twr_t *tower, PRPC_SYNTAX_IDENTIFIER object, PRPC_SYNTAX_IDENTIFIER syntax,")
+cpp_quote("    char **protseq, char **endpoint, char **address);")
+cpp_quote("RPC_STATUS WINAPI TowerConstruct(")
+cpp_quote("    const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax,")
+cpp_quote("    const char *protseq, const char *endpoint, const char *address,")
+cpp_quote("    twr_t **tower);")
+
+[
+    uuid(e1af8308-5d1f-11c9-91a4-08002b14a0fa),
+    version(3.0),
+    pointer_default(ref)
+]
+interface epm
+{
+    const long ept_max_annotation_size = 64;
+
+    typedef struct
+    {
+                    GUID        object;
+                    twr_t      *tower;
+        [string]    char        annotation[ept_max_annotation_size];
+    } ept_entry_t, *ept_entry_p_t;
+
+    typedef [context_handle] void *ept_lookup_handle_t;
+
+    /* Adds entries to an endpoint map */
+    void ept_insert(
+        [in]    handle_t            h,
+        [in]    unsigned32          num_ents,
+        [in, size_is(num_ents)]
+                ept_entry_t         entries[],
+        [in]    boolean32           replace,
+        [out]   error_status_t      *status
+    );
+
+    /* Removes entries from an endpoint map */
+    void ept_delete(
+        [in]    handle_t            h,
+        [in]    unsigned32          num_ents,
+        [in, size_is(num_ents)]
+                ept_entry_t         entries[],
+        [out]   error_status_t      *status
+    );
+
+    /* Lookup entries in an endpoint map */
+    [idempotent]
+    void ept_lookup(
+        [in]        handle_t            h,
+        [in]        unsigned32          inquiry_type,
+        [in]        uuid_p_t            object,
+        [in]        rpc_if_id_p_t       interface_id,
+        [in]        unsigned32          vers_option,
+        [in, out]   ept_lookup_handle_t *entry_handle,
+        [in]        unsigned32          max_ents,
+        [out]       unsigned32          *num_ents,
+        [out, length_is(*num_ents), size_is(max_ents)]
+                    ept_entry_t         entries[],
+        [out]       error_status_t      *status
+    );
+
+    /* Lookup entries in an endpoint map using the given input pattern */
+    [idempotent]
+    void ept_map(
+        [in]        handle_t            h,
+        [in]        uuid_p_t            object,
+        [in]        twr_p_t             map_tower,
+        [in, out]   ept_lookup_handle_t *entry_handle,
+        [in]        unsigned32          max_towers,
+        [out]       unsigned32          *num_towers,
+        [out, length_is(*num_towers), size_is(max_towers)]
+                    twr_p_t             *towers,
+        [out]       error_status_t      *status
+    );
+
+    /* Free the context handle returned by ept_lookup or ept_map */
+    void ept_lookup_handle_free(
+        [in]        handle_t            h,
+        [in, out]   ept_lookup_handle_t *entry_handle,
+        [out]       error_status_t      *status
+    );
+
+    /* Inquires as to the endpoint map's object identifier */
+    [idempotent]
+    void ept_inq_object(
+        [in]        handle_t            h,
+        [out]       GUID                *ept_object,
+        [out]       error_status_t      *status
+    );
+
+    /* Deletes matching entries in the endpoint map */
+    void ept_mgmt_delete(
+        [in]        handle_t            h,
+        [in]        boolean32           object_speced,
+        [in]        uuid_p_t            object,
+        [in]        twr_p_t             tower,
+        [out]       error_status_t      *status
+    );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h
new file mode 100644
index 0000000..82f1323
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h
@@ -0,0 +1,282 @@
+/*
+ * Wine exception handling
+ *
+ * Copyright (c) 1999 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_EXCEPTION_H
+#define __WINE_WINE_EXCEPTION_H
+
+#include <setjmp.h>
+#include <windef.h>
+#include <excpt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The following definitions allow using exceptions in Wine and Winelib code
+ *
+ * They should be used like this:
+ *
+ * __TRY
+ * {
+ *     do some stuff that can raise an exception
+ * }
+ * __EXCEPT(filter_func)
+ * {
+ *     handle the exception here
+ * }
+ * __ENDTRY
+ *
+ * or
+ *
+ * __TRY
+ * {
+ *     do some stuff that can raise an exception
+ * }
+ * __FINALLY(finally_func)
+ *
+ * The filter_func and finally_func functions must be defined like this:
+ *
+ * LONG CALLBACK filter_func( PEXCEPTION_POINTERS __eptr ) { ... }
+ *
+ * void CALLBACK finally_func( BOOL __normal ) { ... }
+ *
+ * The filter function must return one of the EXCEPTION_* code; it can
+ * use GetExceptionInformation() and GetExceptionCode() to retrieve the
+ * exception info.
+ *
+ * Warning: inside a __TRY or __EXCEPT block, 'break' or 'continue' statements
+ *          break out of the current block. You cannot use 'return', 'goto'
+ *          or 'longjmp' to leave a __TRY block, as this will surely crash.
+ *          You can use them to leave a __EXCEPT block though.
+ *
+ * -- AJ
+ */
+
+#ifndef __GNUC__
+#define __attribute__(x) /* nothing */
+#endif
+
+/* Define this if you want to use your compiler built-in __try/__except support.
+ * This is only useful when compiling to a native Windows binary, as the built-in
+ * compiler exceptions will most certainly not work under Winelib.
+ */
+#ifdef USE_COMPILER_EXCEPTIONS
+
+#define __TRY __try
+#define __EXCEPT(func) __except((func)(GetExceptionInformation()))
+#define __FINALLY(func) __finally { (func)(!AbnormalTermination()); }
+#define __ENDTRY /*nothing*/
+#define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+#define __EXCEPT_ALL __except(EXCEPTION_EXECUTE_HANDLER)
+
+#else  /* USE_COMPILER_EXCEPTIONS */
+
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#define sigjmp_buf jmp_buf
+#define sigsetjmp(buf,sigs) setjmp(buf)
+#define siglongjmp(buf,val) longjmp(buf,val)
+#endif
+
+extern void __wine_rtl_unwind( EXCEPTION_REGISTRATION_RECORD* frame, EXCEPTION_RECORD *record,
+                               void (*target)(void) ) DECLSPEC_HIDDEN DECLSPEC_NORETURN;
+extern DWORD __wine_exception_handler( EXCEPTION_RECORD *record,
+                                       EXCEPTION_REGISTRATION_RECORD *frame,
+                                       CONTEXT *context,
+                                       EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+extern DWORD __wine_exception_handler_page_fault( EXCEPTION_RECORD *record,
+                                                  EXCEPTION_REGISTRATION_RECORD *frame,
+                                                  CONTEXT *context,
+                                                  EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+extern DWORD __wine_exception_handler_all( EXCEPTION_RECORD *record,
+                                           EXCEPTION_REGISTRATION_RECORD *frame,
+                                           CONTEXT *context,
+                                           EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+extern DWORD __wine_finally_handler( EXCEPTION_RECORD *record,
+                                     EXCEPTION_REGISTRATION_RECORD *frame,
+                                     CONTEXT *context,
+                                     EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+
+#define __TRY \
+    do { __WINE_FRAME __f; \
+         int __first = 1; \
+         for (;;) if (!__first) \
+         { \
+             do {
+
+#define __EXCEPT(func) \
+             } while(0); \
+             __wine_pop_frame( &__f.frame ); \
+             break; \
+         } else { \
+             __f.frame.Handler = __wine_exception_handler; \
+             __f.u.filter = (func); \
+             if (sigsetjmp( __f.jmp, 0 )) { \
+                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
+                 do {
+
+/* convenience handler for page fault exceptions */
+#define __EXCEPT_PAGE_FAULT \
+             } while(0); \
+             __wine_pop_frame( &__f.frame ); \
+             break; \
+         } else { \
+             __f.frame.Handler = __wine_exception_handler_page_fault; \
+             if (sigsetjmp( __f.jmp, 0 )) { \
+                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
+                 do {
+
+/* convenience handler for all exception */
+#define __EXCEPT_ALL \
+             } while(0); \
+             __wine_pop_frame( &__f.frame ); \
+             break; \
+         } else { \
+             __f.frame.Handler = __wine_exception_handler_all; \
+             if (sigsetjmp( __f.jmp, 0 )) { \
+                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
+                 do {
+
+#define __ENDTRY \
+                 } while (0); \
+                 break; \
+             } \
+             __wine_push_frame( &__f.frame ); \
+             __first = 0; \
+         } \
+    } while (0);
+
+#define __FINALLY(func) \
+             } while(0); \
+             __wine_pop_frame( &__f.frame ); \
+             (func)(1); \
+             break; \
+         } else { \
+             __f.frame.Handler = __wine_finally_handler; \
+             __f.u.finally_func = (func); \
+             __wine_push_frame( &__f.frame ); \
+             __first = 0; \
+         } \
+    } while (0);
+
+
+typedef LONG (CALLBACK *__WINE_FILTER)(PEXCEPTION_POINTERS);
+typedef void (CALLBACK *__WINE_FINALLY)(BOOL);
+
+#define GetExceptionInformation() (__eptr)
+#define GetExceptionCode()        (__eptr->ExceptionRecord->ExceptionCode)
+#define AbnormalTermination()     (!__normal)
+
+typedef struct __tagWINE_FRAME
+{
+    EXCEPTION_REGISTRATION_RECORD frame;
+    union
+    {
+        /* exception data */
+        __WINE_FILTER filter;
+        /* finally data */
+        __WINE_FINALLY finally_func;
+    } u;
+    sigjmp_buf jmp;
+    /* hack to make GetExceptionCode() work in handler */
+    DWORD ExceptionCode;
+    const struct __tagWINE_FRAME *ExceptionRecord;
+} __WINE_FRAME;
+
+#endif /* USE_COMPILER_EXCEPTIONS */
+
+static inline EXCEPTION_REGISTRATION_RECORD *__wine_push_frame( EXCEPTION_REGISTRATION_RECORD *frame )
+{
+#if defined(__GNUC__) && defined(__i386__)
+    EXCEPTION_REGISTRATION_RECORD *prev;
+    __asm__ __volatile__(".byte 0x64\n\tmovl (0),%0"
+                         "\n\tmovl %0,(%1)"
+                         "\n\t.byte 0x64\n\tmovl %1,(0)"
+                         : "=&r" (prev) : "r" (frame) : "memory" );
+    return prev;
+#else
+    NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
+    frame->Prev = teb->ExceptionList;
+    teb->ExceptionList = frame;
+    return frame->Prev;
+#endif
+}
+
+static inline EXCEPTION_REGISTRATION_RECORD *__wine_pop_frame( EXCEPTION_REGISTRATION_RECORD *frame )
+{
+#if defined(__GNUC__) && defined(__i386__)
+    __asm__ __volatile__(".byte 0x64\n\tmovl %0,(0)"
+                         : : "r" (frame->Prev) : "memory" );
+    return frame->Prev;
+
+#else
+    NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
+    teb->ExceptionList = frame->Prev;
+    return frame->Prev;
+#endif
+}
+
+static inline EXCEPTION_REGISTRATION_RECORD *__wine_get_frame(void)
+{
+#if defined(__GNUC__) && defined(__i386__)
+    EXCEPTION_REGISTRATION_RECORD *ret;
+    __asm__ __volatile__(".byte 0x64\n\tmovl (0),%0" : "=r" (ret) );
+    return ret;
+#else
+    NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
+    return teb->ExceptionList;
+#endif
+}
+
+/* Exception handling flags - from OS/2 2.0 exception handling */
+
+/* Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD */
+#define EH_NONCONTINUABLE   0x01
+#define EH_UNWINDING        0x02
+#define EH_EXIT_UNWIND      0x04
+#define EH_STACK_INVALID    0x08
+#define EH_NESTED_CALL      0x10
+#define EH_TARGET_UNWIND    0x20
+
+/* Wine-specific exceptions codes */
+
+#define EXCEPTION_WINE_STUB       0x80000100  /* stub entry point called */
+#define EXCEPTION_WINE_ASSERTION  0x80000101  /* assertion failed */
+
+/* unhandled return status from vm86 mode */
+#define EXCEPTION_VM86_INTx       0x80000110
+#define EXCEPTION_VM86_STI        0x80000111
+#define EXCEPTION_VM86_PICRETURN  0x80000112
+
+extern void __wine_enter_vm86( CONTEXT *context );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINE_EXCEPTION_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h
new file mode 100644
index 0000000..e9f18c7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h
@@ -0,0 +1,291 @@
+/*
+ * Definitions for Wine GDI drivers
+ *
+ * Copyright 2011 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_GDI_DRIVER_H
+#define __WINE_WINE_GDI_DRIVER_H
+
+#include "wine/list.h"
+
+struct gdi_dc_funcs;
+struct opengl_funcs;
+
+typedef struct gdi_physdev
+{
+    const struct gdi_dc_funcs *funcs;
+    struct gdi_physdev        *next;
+    HDC                        hdc;
+} *PHYSDEV;
+
+struct bitblt_coords
+{
+    int  log_x;     /* original position and size, in logical coords */
+    int  log_y;
+    int  log_width;
+    int  log_height;
+    int  x;         /* mapped position and size, in device coords */
+    int  y;
+    int  width;
+    int  height;
+    RECT visrect;   /* rectangle clipped to the visible part, in device coords */
+    DWORD layout;   /* DC layout */
+};
+
+struct gdi_image_bits
+{
+    void   *ptr;       /* pointer to the bits */
+    BOOL    is_copy;   /* whether this is a copy of the bits that can be modified */
+    void  (*free)(struct gdi_image_bits *);  /* callback for freeing the bits */
+    void   *param;     /* extra parameter for callback private use */
+};
+
+struct brush_pattern
+{
+    BITMAPINFO           *info;     /* DIB info */
+    struct gdi_image_bits bits;     /* DIB bits */
+    UINT                  usage;    /* color usage for DIB info */
+};
+
+struct gdi_dc_funcs
+{
+    INT      (*pAbortDoc)(PHYSDEV);
+    BOOL     (*pAbortPath)(PHYSDEV);
+    BOOL     (*pAlphaBlend)(PHYSDEV,struct bitblt_coords*,PHYSDEV,struct bitblt_coords*,BLENDFUNCTION);
+    BOOL     (*pAngleArc)(PHYSDEV,INT,INT,DWORD,FLOAT,FLOAT);
+    BOOL     (*pArc)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pArcTo)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pBeginPath)(PHYSDEV);
+    DWORD    (*pBlendImage)(PHYSDEV,BITMAPINFO*,const struct gdi_image_bits*,struct bitblt_coords*,struct bitblt_coords*,BLENDFUNCTION);
+    BOOL     (*pChord)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pCloseFigure)(PHYSDEV);
+    BOOL     (*pCreateCompatibleDC)(PHYSDEV,PHYSDEV*);
+    BOOL     (*pCreateDC)(PHYSDEV*,LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+    BOOL     (*pDeleteDC)(PHYSDEV);
+    BOOL     (*pDeleteObject)(PHYSDEV,HGDIOBJ);
+    DWORD    (*pDeviceCapabilities)(LPSTR,LPCSTR,LPCSTR,WORD,LPSTR,LPDEVMODEA);
+    BOOL     (*pEllipse)(PHYSDEV,INT,INT,INT,INT);
+    INT      (*pEndDoc)(PHYSDEV);
+    INT      (*pEndPage)(PHYSDEV);
+    BOOL     (*pEndPath)(PHYSDEV);
+    BOOL     (*pEnumFonts)(PHYSDEV,LPLOGFONTW,FONTENUMPROCW,LPARAM);
+    INT      (*pEnumICMProfiles)(PHYSDEV,ICMENUMPROCW,LPARAM);
+    INT      (*pExcludeClipRect)(PHYSDEV,INT,INT,INT,INT);
+    INT      (*pExtDeviceMode)(LPSTR,HWND,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,DWORD);
+    INT      (*pExtEscape)(PHYSDEV,INT,INT,LPCVOID,INT,LPVOID);
+    BOOL     (*pExtFloodFill)(PHYSDEV,INT,INT,COLORREF,UINT);
+    INT      (*pExtSelectClipRgn)(PHYSDEV,HRGN,INT);
+    BOOL     (*pExtTextOut)(PHYSDEV,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);
+    BOOL     (*pFillPath)(PHYSDEV);
+    BOOL     (*pFillRgn)(PHYSDEV,HRGN,HBRUSH);
+    BOOL     (*pFlattenPath)(PHYSDEV);
+    BOOL     (*pFontIsLinked)(PHYSDEV);
+    BOOL     (*pFrameRgn)(PHYSDEV,HRGN,HBRUSH,INT,INT);
+    BOOL     (*pGdiComment)(PHYSDEV,UINT,const BYTE*);
+    BOOL     (*pGdiRealizationInfo)(PHYSDEV,void*);
+    UINT     (*pGetBoundsRect)(PHYSDEV,RECT*,UINT);
+    BOOL     (*pGetCharABCWidths)(PHYSDEV,UINT,UINT,LPABC);
+    BOOL     (*pGetCharABCWidthsI)(PHYSDEV,UINT,UINT,WORD*,LPABC);
+    BOOL     (*pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT);
+    INT      (*pGetDeviceCaps)(PHYSDEV,INT);
+    BOOL     (*pGetDeviceGammaRamp)(PHYSDEV,LPVOID);
+    DWORD    (*pGetFontData)(PHYSDEV,DWORD,DWORD,LPVOID,DWORD);
+    DWORD    (*pGetFontUnicodeRanges)(PHYSDEV,LPGLYPHSET);
+    DWORD    (*pGetGlyphIndices)(PHYSDEV,LPCWSTR,INT,LPWORD,DWORD);
+    DWORD    (*pGetGlyphOutline)(PHYSDEV,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+    BOOL     (*pGetICMProfile)(PHYSDEV,LPDWORD,LPWSTR);
+    DWORD    (*pGetImage)(PHYSDEV,BITMAPINFO*,struct gdi_image_bits*,struct bitblt_coords*);
+    DWORD    (*pGetKerningPairs)(PHYSDEV,DWORD,LPKERNINGPAIR);
+    COLORREF (*pGetNearestColor)(PHYSDEV,COLORREF);
+    UINT     (*pGetOutlineTextMetrics)(PHYSDEV,UINT,LPOUTLINETEXTMETRICW);
+    COLORREF (*pGetPixel)(PHYSDEV,INT,INT);
+    UINT     (*pGetSystemPaletteEntries)(PHYSDEV,UINT,UINT,LPPALETTEENTRY);
+    UINT     (*pGetTextCharsetInfo)(PHYSDEV,LPFONTSIGNATURE,DWORD);
+    BOOL     (*pGetTextExtentExPoint)(PHYSDEV,LPCWSTR,INT,LPINT);
+    BOOL     (*pGetTextExtentExPointI)(PHYSDEV,const WORD*,INT,LPINT);
+    INT      (*pGetTextFace)(PHYSDEV,INT,LPWSTR);
+    BOOL     (*pGetTextMetrics)(PHYSDEV,TEXTMETRICW*);
+    BOOL     (*pGradientFill)(PHYSDEV,TRIVERTEX*,ULONG,void*,ULONG,ULONG);
+    INT      (*pIntersectClipRect)(PHYSDEV,INT,INT,INT,INT);
+    BOOL     (*pInvertRgn)(PHYSDEV,HRGN);
+    BOOL     (*pLineTo)(PHYSDEV,INT,INT);
+    BOOL     (*pModifyWorldTransform)(PHYSDEV,const XFORM*,DWORD);
+    BOOL     (*pMoveTo)(PHYSDEV,INT,INT);
+    INT      (*pOffsetClipRgn)(PHYSDEV,INT,INT);
+    BOOL     (*pOffsetViewportOrgEx)(PHYSDEV,INT,INT,POINT*);
+    BOOL     (*pOffsetWindowOrgEx)(PHYSDEV,INT,INT,POINT*);
+    BOOL     (*pPaintRgn)(PHYSDEV,HRGN);
+    BOOL     (*pPatBlt)(PHYSDEV,struct bitblt_coords*,DWORD);
+    BOOL     (*pPie)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+    BOOL     (*pPolyBezier)(PHYSDEV,const POINT*,DWORD);
+    BOOL     (*pPolyBezierTo)(PHYSDEV,const POINT*,DWORD);
+    BOOL     (*pPolyDraw)(PHYSDEV,const POINT*,const BYTE *,DWORD);
+    BOOL     (*pPolyPolygon)(PHYSDEV,const POINT*,const INT*,UINT);
+    BOOL     (*pPolyPolyline)(PHYSDEV,const POINT*,const DWORD*,DWORD);
+    BOOL     (*pPolygon)(PHYSDEV,const POINT*,INT);
+    BOOL     (*pPolyline)(PHYSDEV,const POINT*,INT);
+    BOOL     (*pPolylineTo)(PHYSDEV,const POINT*,INT);
+    DWORD    (*pPutImage)(PHYSDEV,HRGN,BITMAPINFO*,const struct gdi_image_bits*,struct bitblt_coords*,struct bitblt_coords*,DWORD);
+    UINT     (*pRealizeDefaultPalette)(PHYSDEV);
+    UINT     (*pRealizePalette)(PHYSDEV,HPALETTE,BOOL);
+    BOOL     (*pRectangle)(PHYSDEV,INT,INT,INT,INT);
+    HDC      (*pResetDC)(PHYSDEV,const DEVMODEW*);
+    BOOL     (*pRestoreDC)(PHYSDEV,INT);
+    BOOL     (*pRoundRect)(PHYSDEV,INT,INT,INT,INT,INT,INT);
+    INT      (*pSaveDC)(PHYSDEV);
+    BOOL     (*pScaleViewportExtEx)(PHYSDEV,INT,INT,INT,INT,SIZE*);
+    BOOL     (*pScaleWindowExtEx)(PHYSDEV,INT,INT,INT,INT,SIZE*);
+    HBITMAP  (*pSelectBitmap)(PHYSDEV,HBITMAP);
+    HBRUSH   (*pSelectBrush)(PHYSDEV,HBRUSH,const struct brush_pattern*);
+    BOOL     (*pSelectClipPath)(PHYSDEV,INT);
+    HFONT    (*pSelectFont)(PHYSDEV,HFONT,UINT*);
+    HPALETTE (*pSelectPalette)(PHYSDEV,HPALETTE,BOOL);
+    HPEN     (*pSelectPen)(PHYSDEV,HPEN,const struct brush_pattern*);
+    INT      (*pSetArcDirection)(PHYSDEV,INT);
+    COLORREF (*pSetBkColor)(PHYSDEV,COLORREF);
+    INT      (*pSetBkMode)(PHYSDEV,INT);
+    UINT     (*pSetBoundsRect)(PHYSDEV,RECT*,UINT);
+    COLORREF (*pSetDCBrushColor)(PHYSDEV, COLORREF);
+    COLORREF (*pSetDCPenColor)(PHYSDEV, COLORREF);
+    INT      (*pSetDIBitsToDevice)(PHYSDEV,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,BITMAPINFO*,UINT);
+    VOID     (*pSetDeviceClipping)(PHYSDEV,HRGN);
+    BOOL     (*pSetDeviceGammaRamp)(PHYSDEV,LPVOID);
+    DWORD    (*pSetLayout)(PHYSDEV,DWORD);
+    INT      (*pSetMapMode)(PHYSDEV,INT);
+    DWORD    (*pSetMapperFlags)(PHYSDEV,DWORD);
+    COLORREF (*pSetPixel)(PHYSDEV,INT,INT,COLORREF);
+    INT      (*pSetPolyFillMode)(PHYSDEV,INT);
+    INT      (*pSetROP2)(PHYSDEV,INT);
+    INT      (*pSetRelAbs)(PHYSDEV,INT);
+    INT      (*pSetStretchBltMode)(PHYSDEV,INT);
+    UINT     (*pSetTextAlign)(PHYSDEV,UINT);
+    INT      (*pSetTextCharacterExtra)(PHYSDEV,INT);
+    COLORREF (*pSetTextColor)(PHYSDEV,COLORREF);
+    BOOL     (*pSetTextJustification)(PHYSDEV,INT,INT);
+    BOOL     (*pSetViewportExtEx)(PHYSDEV,INT,INT,SIZE*);
+    BOOL     (*pSetViewportOrgEx)(PHYSDEV,INT,INT,POINT*);
+    BOOL     (*pSetWindowExtEx)(PHYSDEV,INT,INT,SIZE*);
+    BOOL     (*pSetWindowOrgEx)(PHYSDEV,INT,INT,POINT*);
+    BOOL     (*pSetWorldTransform)(PHYSDEV,const XFORM*);
+    INT      (*pStartDoc)(PHYSDEV,const DOCINFOW*);
+    INT      (*pStartPage)(PHYSDEV);
+    BOOL     (*pStretchBlt)(PHYSDEV,struct bitblt_coords*,PHYSDEV,struct bitblt_coords*,DWORD);
+    INT      (*pStretchDIBits)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT,const void*,BITMAPINFO*,UINT,DWORD);
+    BOOL     (*pStrokeAndFillPath)(PHYSDEV);
+    BOOL     (*pStrokePath)(PHYSDEV);
+    BOOL     (*pUnrealizePalette)(HPALETTE);
+    BOOL     (*pWidenPath)(PHYSDEV);
+    struct opengl_funcs * (*wine_get_wgl_driver)(PHYSDEV,UINT);
+
+    /* priority order for the driver on the stack */
+    UINT       priority;
+};
+
+/* increment this when you change the DC function table */
+#define WINE_GDI_DRIVER_VERSION 46
+
+#define GDI_PRIORITY_NULL_DRV        0  /* null driver */
+#define GDI_PRIORITY_FONT_DRV      100  /* any font driver */
+#define GDI_PRIORITY_GRAPHICS_DRV  200  /* any graphics driver */
+#define GDI_PRIORITY_DIB_DRV       300  /* the DIB driver */
+#define GDI_PRIORITY_PATH_DRV      400  /* the path driver */
+
+static inline PHYSDEV get_physdev_entry_point( PHYSDEV dev, size_t offset )
+{
+    while (!((void **)dev->funcs)[offset / sizeof(void *)]) dev = dev->next;
+    return dev;
+}
+
+#define GET_NEXT_PHYSDEV(dev,func) \
+    get_physdev_entry_point( (dev)->next, FIELD_OFFSET(struct gdi_dc_funcs,func))
+
+static inline void push_dc_driver( PHYSDEV *dev, PHYSDEV physdev, const struct gdi_dc_funcs *funcs )
+{
+    while ((*dev)->funcs->priority > funcs->priority) dev = &(*dev)->next;
+    physdev->funcs = funcs;
+    physdev->next = *dev;
+    physdev->hdc = (*dev)->hdc;
+    *dev = physdev;
+}
+
+/* support for window surfaces */
+
+struct window_surface;
+
+struct window_surface_funcs
+{
+    void  (*lock)( struct window_surface *surface );
+    void  (*unlock)( struct window_surface *surface );
+    void* (*get_info)( struct window_surface *surface, BITMAPINFO *info );
+    RECT* (*get_bounds)( struct window_surface *surface );
+    void  (*set_region)( struct window_surface *surface, HRGN region );
+    void  (*flush)( struct window_surface *surface );
+    void  (*destroy)( struct window_surface *surface );
+};
+
+struct window_surface
+{
+    const struct window_surface_funcs *funcs; /* driver-specific implementations  */
+    struct list                        entry; /* entry in global list managed by user32 */
+    LONG                               ref;   /* reference count */
+    RECT                               rect;  /* constant, no locking needed */
+    /* driver-specific fields here */
+};
+
+static inline ULONG window_surface_add_ref( struct window_surface *surface )
+{
+    return InterlockedIncrement( &surface->ref );
+}
+
+static inline ULONG window_surface_release( struct window_surface *surface )
+{
+    ULONG ret = InterlockedDecrement( &surface->ref );
+    if (!ret) surface->funcs->destroy( surface );
+    return ret;
+}
+
+/* the DC hook support is only exported on Win16, the 32-bit version is a Wine extension */
+
+#define DCHC_INVALIDVISRGN      0x0001
+#define DCHC_DELETEDC           0x0002
+#define DCHF_INVALIDATEVISRGN   0x0001
+#define DCHF_VALIDATEVISRGN     0x0002
+#define DCHF_RESETDC            0x0004  /* Wine extension */
+
+typedef BOOL (CALLBACK *DCHOOKPROC)(HDC,WORD,DWORD_PTR,LPARAM);
+
+WINGDIAPI DWORD_PTR WINAPI GetDCHook(HDC,DCHOOKPROC*);
+WINGDIAPI BOOL      WINAPI SetDCHook(HDC,DCHOOKPROC,DWORD_PTR);
+WINGDIAPI WORD      WINAPI SetHookFlags(HDC,WORD);
+
+extern void CDECL __wine_make_gdi_object_system( HGDIOBJ handle, BOOL set );
+extern void CDECL __wine_set_visible_region( HDC hdc, HRGN hrgn, const RECT *vis_rect,
+                                             const RECT *device_rect, struct window_surface *surface );
+extern HMODULE CDECL __wine_get_driver_module( HDC hdc );
+extern struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version );
+
+#endif /* __WINE_WINE_GDI_DRIVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl
new file mode 100644
index 0000000..d8537c6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2007 Robert Shearman 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+cpp_quote("#define IROT_PROTSEQ {'n','c','a','l','r','p','c',0}")
+cpp_quote("#define IROT_ENDPOINT {'i','r','o','t',0}")
+
+typedef struct tagMonikerComparisonData {
+	ULONG ulCntData;
+	[size_is(ulCntData)] BYTE abData[];
+} MonikerComparisonData;
+
+[
+    uuid(7a98c254-6808-11cf-b73b-00aa00b677a8),
+    version(0.2),
+    strict_context_handle
+]
+interface Irot
+{
+	typedef struct tagInterfaceData
+	{
+		ULONG ulCntData;
+		[size_is(ulCntData)] BYTE abData[];
+	} InterfaceData;
+
+	typedef [unique] InterfaceData *PInterfaceData;
+
+	typedef struct tagInterfaceList
+	{
+		ULONG size;
+		[size_is(size)] PInterfaceData interfaces[];
+	} InterfaceList;
+
+	typedef [unique] InterfaceList *PInterfaceList;
+
+	typedef DWORD IrotCookie;
+
+	typedef handle_t IrotHandle;
+	typedef [context_handle] void *IrotContextHandle;
+
+	HRESULT IrotRegister(
+		[in]  IrotHandle h,
+		[in]  const MonikerComparisonData *moniker_data,
+		[in]  const InterfaceData *object,
+		[in]  const InterfaceData *moniker,
+		[in]  const FILETIME *time,
+		[in]  DWORD grfFlags,
+		[out] IrotCookie *cookie,
+		[out] IrotContextHandle *ctxt_handle);
+
+	HRESULT IrotRevoke(
+		[in]  IrotHandle h,
+		[in]  IrotCookie cookie,
+		[in, out] IrotContextHandle *ctxt_handle,
+		[out] PInterfaceData *object,
+		[out] PInterfaceData *moniker);
+
+	HRESULT IrotIsRunning(
+		[in]  IrotHandle h,
+		[in]  const MonikerComparisonData *moniker_data);
+
+	HRESULT IrotGetObject(
+		[in]  IrotHandle h,
+		[in]  const MonikerComparisonData *moniker_data,
+		[out] PInterfaceData *obj,
+		[out] IrotCookie *cookie);
+
+	HRESULT IrotNoteChangeTime(
+		[in]  IrotHandle h,
+		[in]  IrotCookie cookie,
+		[in]  const FILETIME *time);
+
+	HRESULT IrotGetTimeOfLastChange(
+		[in]  IrotHandle h,
+		[in]  const MonikerComparisonData *moniker_data,
+		[out] FILETIME *time);
+
+	HRESULT IrotEnumRunning(
+		[in]  IrotHandle h,
+		[out] PInterfaceList *list);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl
new file mode 100644
index 0000000..7888f1a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+typedef struct _ITS_Control_Data
+{
+    UINT cdwControlData;
+    UINT adwControlData[1];
+
+} ITS_Control_Data, *PITS_Control_Data;
+
+typedef enum ECompactionLev { 
+    COMPACT_DATA = 0,
+    COMPACT_DATA_AND_PATH
+} ECompactionLev;
+
+[
+  object,
+  uuid(88cc31de-27ab-11d0-9df9-00a0c922e6ec),
+  pointer_default(unique)
+]
+interface IITStorage : IUnknown
+{
+    HRESULT StgCreateDocfile(
+        [in] const WCHAR * pwcsName,
+        [in] DWORD grfMode,
+        [in] DWORD reserved,
+        [out] IStorage ** ppstgOpen);
+
+    HRESULT StgCreateDocfileOnILockBytes(
+        [in] ILockBytes * plkbyt,
+        [in] DWORD grfMode,
+        [in] DWORD reserved, 
+        [out] IStorage ** ppstgOpen);
+
+
+    HRESULT StgIsStorageFile(
+        [in] const WCHAR * pwcsName);
+
+    HRESULT StgIsStorageILockBytes(
+        [in] ILockBytes * plkbyt);
+
+    HRESULT StgOpenStorage(
+        [in] const WCHAR * pwcsName,
+        [in] IStorage * pstgPriority,
+        [in] DWORD grfMode,
+        [in] SNB snbExclude,
+        [in] DWORD reserved,
+        [out] IStorage ** ppstgOpen);
+
+    HRESULT StgOpenStorageOnILockBytes(
+        [in] ILockBytes * plkbyt,
+        [in] IStorage * pStgPriority,
+        [in] DWORD grfMode,
+        [in] SNB snbExclude,
+        [in] DWORD reserved,
+        [out] IStorage ** ppstgOpen);
+
+    HRESULT StgSetTimes(
+        [in] WCHAR const * lpszName,
+        [in] FILETIME const * pctime,
+        [in] FILETIME const * patime,
+        [in] FILETIME const * pmtime);
+
+    HRESULT SetControlData(
+        [in] PITS_Control_Data pControlData);
+    
+    HRESULT DefaultControlData(
+        [out] PITS_Control_Data * ppControlData);
+
+    HRESULT Compact(
+        [in] const WCHAR * pwcsName,
+        [in] ECompactionLev iLev);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_ITStorage,0x5d02926a,0x212e,0x11d0,0x9d,0xf9,0x00,0xa0,0xc9,0x22,0xe6,0xec);")
+cpp_quote("DEFINE_GUID(CLSID_MSFSStore,0xd54eee56,0xaaab,0x11d0,0x9e,0x1d,0x00,0xa0,0xc9,0x22,0xe6,0xec);")
+cpp_quote("DEFINE_GUID(CLSID_MSITStore,0x9d148290,0xb9c8,0x11d0,0xa4,0xcc,0x00,0x00,0xf8,0x01,0x49,0xf6);")
+cpp_quote("DEFINE_GUID(CLSID_ITSProtocol,0x9d148291,0xb9c8,0x11d0,0xa4,0xcc,0x00,0x00,0xf8,0x01,0x49,0xf6);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h
new file mode 100644
index 0000000..14f1bbc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h
@@ -0,0 +1,208 @@
+/*
+ * Definitions for the Wine library
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_LIBRARY_H
+#define __WINE_WINE_LIBRARY_H
+
+#include <stdarg.h>
+#include <sys/types.h>
+
+#include <windef.h>
+#include <winbase.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* configuration */
+
+extern const char *wine_get_build_dir(void);
+extern const char *wine_get_config_dir(void);
+extern const char *wine_get_data_dir(void);
+extern const char *wine_get_server_dir(void);
+extern const char *wine_get_user_name(void);
+extern const char *wine_get_version(void);
+extern const char *wine_get_build_id(void);
+extern void wine_init_argv0_path( const char *argv0 );
+extern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var );
+
+/* dll loading */
+
+typedef void (*load_dll_callback_t)( void *, const char * );
+
+extern void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize );
+extern void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize );
+extern int wine_dlclose( void *handle, char *error, size_t errorsize );
+extern void wine_dll_set_callback( load_dll_callback_t load );
+extern void *wine_dll_load( const char *filename, char *error, int errorsize, int *file_exists );
+extern void *wine_dll_load_main_exe( const char *name, char *error, int errorsize,
+                                     int test_only, int *file_exists );
+extern void wine_dll_unload( void *handle );
+extern const char *wine_dll_enum_load_path( unsigned int index );
+extern int wine_dll_get_owner( const char *name, char *buffer, int size, int *file_exists );
+
+extern int __wine_main_argc;
+extern char **__wine_main_argv;
+extern WCHAR **__wine_main_wargv;
+extern void __wine_dll_register( const IMAGE_NT_HEADERS *header, const char *filename );
+extern void wine_init( int argc, char *argv[], char *error, int error_size );
+
+/* portability */
+
+extern void DECLSPEC_NORETURN wine_switch_to_stack( void (*func)(void *), void *arg, void *stack );
+extern int wine_call_on_stack( int (*func)(void *), void *arg, void *stack );
+
+/* memory mappings */
+
+extern void *wine_anon_mmap( void *start, size_t size, int prot, int flags );
+extern void wine_mmap_add_reserved_area( void *addr, size_t size );
+extern void wine_mmap_remove_reserved_area( void *addr, size_t size, int unmap );
+extern int wine_mmap_is_in_reserved_area( void *addr, size_t size );
+extern int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg),
+                                          void *arg, int top_down );
+
+#ifdef __i386__
+
+/* LDT management */
+
+extern void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) );
+extern void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry );
+extern int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry );
+extern int wine_ldt_is_system( unsigned short sel );
+extern void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset );
+extern unsigned short wine_ldt_alloc_entries( int count );
+extern unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount );
+extern void wine_ldt_free_entries( unsigned short sel, int count );
+extern unsigned short wine_ldt_alloc_fs(void);
+extern void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry );
+extern void wine_ldt_free_fs( unsigned short sel );
+
+/* the local copy of the LDT */
+extern struct __wine_ldt_copy
+{
+    void         *base[8192];  /* base address or 0 if entry is free   */
+    unsigned long limit[8192]; /* limit in bytes or 0 if entry is free */
+    unsigned char flags[8192]; /* flags (defined below) */
+} wine_ldt_copy;
+
+#define WINE_LDT_FLAGS_DATA      0x13  /* Data segment */
+#define WINE_LDT_FLAGS_STACK     0x17  /* Stack segment */
+#define WINE_LDT_FLAGS_CODE      0x1b  /* Code segment */
+#define WINE_LDT_FLAGS_TYPE_MASK 0x1f  /* Mask for segment type */
+#define WINE_LDT_FLAGS_32BIT     0x40  /* Segment is 32-bit (code or stack) */
+#define WINE_LDT_FLAGS_ALLOCATED 0x80  /* Segment is allocated (no longer free) */
+
+/* helper functions to manipulate the LDT_ENTRY structure */
+static inline void wine_ldt_set_base( LDT_ENTRY *ent, const void *base )
+{
+    ent->BaseLow               = (WORD)(ULONG_PTR)base;
+    ent->HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16);
+    ent->HighWord.Bits.BaseHi  = (BYTE)((ULONG_PTR)base >> 24);
+}
+static inline void wine_ldt_set_limit( LDT_ENTRY *ent, unsigned int limit )
+{
+    if ((ent->HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12;
+    ent->LimitLow = (WORD)limit;
+    ent->HighWord.Bits.LimitHi = (limit >> 16);
+}
+static inline void *wine_ldt_get_base( const LDT_ENTRY *ent )
+{
+    return (void *)(ent->BaseLow |
+                    (ULONG_PTR)ent->HighWord.Bits.BaseMid << 16 |
+                    (ULONG_PTR)ent->HighWord.Bits.BaseHi << 24);
+}
+static inline unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
+{
+    unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16);
+    if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff;
+    return limit;
+}
+static inline void wine_ldt_set_flags( LDT_ENTRY *ent, unsigned char flags )
+{
+    ent->HighWord.Bits.Dpl         = 3;
+    ent->HighWord.Bits.Pres        = 1;
+    ent->HighWord.Bits.Type        = flags;
+    ent->HighWord.Bits.Sys         = 0;
+    ent->HighWord.Bits.Reserved_0  = 0;
+    ent->HighWord.Bits.Default_Big = (flags & WINE_LDT_FLAGS_32BIT) != 0;
+}
+static inline unsigned char wine_ldt_get_flags( const LDT_ENTRY *ent )
+{
+    unsigned char ret = ent->HighWord.Bits.Type;
+    if (ent->HighWord.Bits.Default_Big) ret |= WINE_LDT_FLAGS_32BIT;
+    return ret;
+}
+static inline int wine_ldt_is_empty( const LDT_ENTRY *ent )
+{
+    const DWORD *dw = (const DWORD *)ent;
+    return (dw[0] | dw[1]) == 0;
+}
+
+/* segment register access */
+
+# if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+#  define __DEFINE_GET_SEG(seg) \
+    static FORCEINLINE unsigned short wine_get_##seg(void) \
+    { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; }
+#  define __DEFINE_SET_SEG(seg) \
+    static FORCEINLINE void wine_set_##seg(int val) \
+    { __asm__("movw %w0,%%" #seg : : "r" (val)); }
+# elif defined(_MSC_VER)
+#  define __DEFINE_GET_SEG(seg) \
+    static inline unsigned short wine_get_##seg(void) \
+    { unsigned short res; __asm { mov res, seg } return res; }
+#  define __DEFINE_SET_SEG(seg) \
+    static inline void wine_set_##seg(unsigned short val) { __asm { mov seg, val } }
+# else  /* __GNUC__ || _MSC_VER */
+#  define __DEFINE_GET_SEG(seg) extern unsigned short wine_get_##seg(void);
+#  define __DEFINE_SET_SEG(seg) extern void wine_set_##seg(unsigned int);
+# endif /* __GNUC__ || _MSC_VER */
+
+__DEFINE_GET_SEG(cs)
+__DEFINE_GET_SEG(ds)
+__DEFINE_GET_SEG(es)
+__DEFINE_GET_SEG(fs)
+__DEFINE_GET_SEG(gs)
+__DEFINE_GET_SEG(ss)
+__DEFINE_SET_SEG(fs)
+__DEFINE_SET_SEG(gs)
+#undef __DEFINE_GET_SEG
+#undef __DEFINE_SET_SEG
+
+#endif  /* __i386__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINE_LIBRARY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h
new file mode 100644
index 0000000..6f7afed
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h
@@ -0,0 +1,243 @@
+/*
+ * Linked lists support
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SERVER_LIST_H
+#define __WINE_SERVER_LIST_H
+
+#include <stddef.h>
+
+struct list
+{
+    struct list *next;
+    struct list *prev;
+};
+
+/* Define a list like so:
+ *
+ *   struct gadget
+ *   {
+ *       struct list  entry;   <-- doesn't have to be the first item in the struct
+ *       int          a, b;
+ *   };
+ *
+ *   static struct list global_gadgets = LIST_INIT( global_gadgets );
+ *
+ * or
+ *
+ *   struct some_global_thing
+ *   {
+ *       struct list gadgets;
+ *   };
+ *
+ *   list_init( &some_global_thing->gadgets );
+ *
+ * Manipulate it like this:
+ *
+ *   list_add_head( &global_gadgets, &new_gadget->entry );
+ *   list_remove( &new_gadget->entry );
+ *   list_add_after( &some_random_gadget->entry, &new_gadget->entry );
+ *
+ * And to iterate over it:
+ *
+ *   struct gadget *gadget;
+ *   LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
+ *   {
+ *       ...
+ *   }
+ *
+ */
+
+/* add an element after the specified one */
+static inline void list_add_after( struct list *elem, struct list *to_add )
+{
+    to_add->next = elem->next;
+    to_add->prev = elem;
+    elem->next->prev = to_add;
+    elem->next = to_add;
+}
+
+/* add an element before the specified one */
+static inline void list_add_before( struct list *elem, struct list *to_add )
+{
+    to_add->next = elem;
+    to_add->prev = elem->prev;
+    elem->prev->next = to_add;
+    elem->prev = to_add;
+}
+
+/* add element at the head of the list */
+static inline void list_add_head( struct list *list, struct list *elem )
+{
+    list_add_after( list, elem );
+}
+
+/* add element at the tail of the list */
+static inline void list_add_tail( struct list *list, struct list *elem )
+{
+    list_add_before( list, elem );
+}
+
+/* remove an element from its list */
+static inline void list_remove( struct list *elem )
+{
+    elem->next->prev = elem->prev;
+    elem->prev->next = elem->next;
+}
+
+/* get the next element */
+static inline struct list *list_next( const struct list *list, const struct list *elem )
+{
+    struct list *ret = elem->next;
+    if (elem->next == list) ret = NULL;
+    return ret;
+}
+
+/* get the previous element */
+static inline struct list *list_prev( const struct list *list, const struct list *elem )
+{
+    struct list *ret = elem->prev;
+    if (elem->prev == list) ret = NULL;
+    return ret;
+}
+
+/* get the first element */
+static inline struct list *list_head( const struct list *list )
+{
+    return list_next( list, list );
+}
+
+/* get the last element */
+static inline struct list *list_tail( const struct list *list )
+{
+    return list_prev( list, list );
+}
+
+/* check if a list is empty */
+static inline int list_empty( const struct list *list )
+{
+    return list->next == list;
+}
+
+/* initialize a list */
+static inline void list_init( struct list *list )
+{
+    list->next = list->prev = list;
+}
+
+/* count the elements of a list */
+static inline unsigned int list_count( const struct list *list )
+{
+    unsigned count = 0;
+    const struct list *ptr;
+    for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
+    return count;
+}
+
+/* move all elements from src to the tail of dst */
+static inline void list_move_tail( struct list *dst, struct list *src )
+{
+    if (list_empty(src)) return;
+
+    dst->prev->next = src->next;
+    src->next->prev = dst->prev;
+    dst->prev = src->prev;
+    src->prev->next = dst;
+    list_init(src);
+}
+
+/* move all elements from src to the head of dst */
+static inline void list_move_head( struct list *dst, struct list *src )
+{
+    if (list_empty(src)) return;
+
+    dst->next->prev = src->prev;
+    src->prev->next = dst->next;
+    dst->next = src->next;
+    src->next->prev = dst;
+    list_init(src);
+}
+
+/* iterate through the list */
+#define LIST_FOR_EACH(cursor,list) \
+    for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
+
+/* iterate through the list, with safety against removal */
+#define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \
+    for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
+         (cursor) != (list); \
+         (cursor) = (cursor2), (cursor2) = (cursor)->next)
+
+/* iterate through the list using a list entry */
+#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \
+    for ((elem) = LIST_ENTRY((list)->next, type, field); \
+         &(elem)->field != (list); \
+         (elem) = LIST_ENTRY((elem)->field.next, type, field))
+
+/* iterate through the list using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
+    for ((cursor) = LIST_ENTRY((list)->next, type, field), \
+         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \
+         &(cursor)->field != (list); \
+         (cursor) = (cursor2), \
+         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field))
+
+/* iterate through the list in reverse order */
+#define LIST_FOR_EACH_REV(cursor,list) \
+    for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
+
+/* iterate through the list in reverse order, with safety against removal */
+#define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
+    for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
+         (cursor) != (list); \
+         (cursor) = (cursor2), (cursor2) = (cursor)->prev)
+
+/* iterate through the list in reverse order using a list entry */
+#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
+    for ((elem) = LIST_ENTRY((list)->prev, type, field); \
+         &(elem)->field != (list); \
+         (elem) = LIST_ENTRY((elem)->field.prev, type, field))
+
+/* iterate through the list in reverse order using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
+    for ((cursor) = LIST_ENTRY((list)->prev, type, field), \
+         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \
+         &(cursor)->field != (list); \
+         (cursor) = (cursor2), \
+         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field))
+
+/* macros for statically initialized lists */
+#undef LIST_INIT
+#define LIST_INIT(list)  { &(list), &(list) }
+
+/* get pointer to object containing list element */
+#undef LIST_ENTRY
+#define LIST_ENTRY(elem, type, field) \
+    ((type *)((char *)(elem) - offsetof(type, field)))
+
+#endif  /* __WINE_SERVER_LIST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h
new file mode 100644
index 0000000..abbe7cd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h
@@ -0,0 +1,822 @@
+/*
+ * MMSYSTEM - Multimedia Wine Extension ... :-)
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_MMSYSTEM16_H
+#define __WINE_WINE_MMSYSTEM16_H
+
+#include <windef.h>
+#include <wine/windef16.h>
+#include <mmddk.h>
+
+#include <pshpack1.h>
+
+typedef UINT16	MMVERSION16;
+typedef UINT16	MCIDEVICEID16;
+typedef	UINT16	MMRESULT16;
+
+typedef struct {
+    UINT16    wType;		/* indicates the contents of the union */
+    union {
+	DWORD ms;		/* milliseconds */
+	DWORD sample;		/* samples */
+	DWORD cb;		/* byte count */
+	struct {		/* SMPTE */
+	    BYTE hour;		/* hours */
+	    BYTE min;		/* minutes */
+	    BYTE sec;		/* seconds */
+	    BYTE frame;		/* frames  */
+	    BYTE fps;		/* frames per second */
+	    BYTE dummy;		/* pad */
+	} smpte;
+	struct {		/* MIDI */
+	    DWORD songptrpos;	/* song pointer position */
+	} midi;
+    } u;
+} MMTIME16,  *LPMMTIME16;
+
+typedef struct {
+    DWORD   dwDCISize;
+    SEGPTR  lpszDCISectionName;
+    SEGPTR  lpszDCIAliasName;
+} DRVCONFIGINFO16, *LPDRVCONFIGINFO16;
+
+/* GetDriverInfo16 references this structure, so this a struct defined
+ * in the Win16 API.
+ * GetDriverInfo has been deprecated in Win32.
+ */
+typedef struct
+{
+    UINT16       length;
+    HDRVR16      hDriver;
+    HINSTANCE16  hModule;
+    CHAR         szAliasName[128];
+} DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16;
+
+LRESULT   WINAPI DefDriverProc16(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
+HDRVR16   WINAPI OpenDriver16(LPCSTR,LPCSTR,LPARAM);
+LRESULT   WINAPI CloseDriver16(HDRVR16,LPARAM,LPARAM);
+LRESULT   WINAPI SendDriverMessage16(HDRVR16,UINT16,LPARAM,LPARAM);
+HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16);
+HDRVR16   WINAPI GetNextDriver16(HDRVR16,DWORD);
+BOOL16    WINAPI GetDriverInfo16(HDRVR16,DRIVERINFOSTRUCT16 *);
+
+typedef void (CALLBACK *LPDRVCALLBACK16) (HDRVR16,UINT16,DWORD,DWORD,DWORD);
+typedef LPDRVCALLBACK16 LPWAVECALLBACK16;
+
+UINT16    WINAPI mmsystemGetVersion16(void);
+BOOL16    WINAPI sndPlaySound16(LPCSTR,UINT16);
+
+typedef struct {
+    WORD	wMid;			/* manufacturer ID */
+    WORD	wPid;			/* product ID */
+    MMVERSION16	vDriverVersion;		/* version of the driver */
+    CHAR	szPname[MAXPNAMELEN];	/* product name (0 terminated string) */
+    DWORD	dwFormats;		/* formats supported */
+    WORD	wChannels;		/* number of sources supported */
+    DWORD	dwSupport;		/* functionality supported by driver */
+} WAVEOUTCAPS16, *LPWAVEOUTCAPS16;
+
+typedef struct {
+    WORD	wMid;			/* manufacturer ID */
+    WORD	wPid;			/* product ID */
+    MMVERSION16	vDriverVersion;		/* version of the driver */
+    CHAR	szPname[MAXPNAMELEN];	/* product name (0 terminated string) */
+    DWORD	dwFormats;		/* formats supported */
+    WORD	wChannels;		/* number of channels supported */
+} WAVEINCAPS16, *LPWAVEINCAPS16;
+
+typedef struct {
+	HWAVE16			hWave;
+	LPWAVEFORMATEX		lpFormat;
+	DWORD			dwCallback;
+	DWORD			dwInstance;
+	UINT16			uMappedDeviceID;
+        DWORD			dnDevNode;
+} WAVEOPENDESC16, *LPWAVEOPENDESC16;
+
+UINT16    WINAPI waveOutGetNumDevs16(void);
+UINT16    WINAPI waveOutGetDevCaps16(UINT16,LPWAVEOUTCAPS16,UINT16);
+UINT16    WINAPI waveOutGetVolume16(UINT16,DWORD*);
+UINT16    WINAPI waveOutSetVolume16(UINT16,DWORD);
+UINT16    WINAPI waveOutGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16    WINAPI waveOutOpen16(HWAVEOUT16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD);
+UINT16    WINAPI waveOutClose16(HWAVEOUT16);
+UINT16    WINAPI waveOutPrepareHeader16(HWAVEOUT16,SEGPTR,UINT16);
+UINT16    WINAPI waveOutUnprepareHeader16(HWAVEOUT16,SEGPTR,UINT16);
+UINT16    WINAPI waveOutWrite16(HWAVEOUT16,SEGPTR,UINT16);
+UINT16    WINAPI waveOutPause16(HWAVEOUT16);
+UINT16    WINAPI waveOutRestart16(HWAVEOUT16);
+UINT16    WINAPI waveOutReset16(HWAVEOUT16);
+UINT16    WINAPI waveOutBreakLoop16(HWAVEOUT16);
+UINT16    WINAPI waveOutGetPosition16(HWAVEOUT16,LPMMTIME16,UINT16);
+UINT16    WINAPI waveOutGetPitch16(HWAVEOUT16,DWORD*);
+UINT16    WINAPI waveOutSetPitch16(HWAVEOUT16,DWORD);
+UINT16    WINAPI waveOutGetPlaybackRate16(HWAVEOUT16,DWORD*);
+UINT16    WINAPI waveOutSetPlaybackRate16(HWAVEOUT16,DWORD);
+UINT16    WINAPI waveOutGetID16(HWAVEOUT16,UINT16*);
+DWORD     WINAPI waveOutMessage16(HWAVEOUT16,UINT16,DWORD,DWORD);
+UINT16    WINAPI waveInGetNumDevs16(void);
+UINT16    WINAPI waveInGetDevCaps16(UINT16,LPWAVEINCAPS16,UINT16);
+UINT16    WINAPI waveInGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16    WINAPI waveInOpen16(HWAVEIN16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD);
+UINT16    WINAPI waveInClose16(HWAVEIN16);
+UINT16    WINAPI waveInPrepareHeader16(HWAVEIN16,SEGPTR,UINT16);
+UINT16    WINAPI waveInUnprepareHeader16(HWAVEIN16,SEGPTR,UINT16);
+UINT16    WINAPI waveInAddBuffer16(HWAVEIN16,SEGPTR,UINT16);
+UINT16    WINAPI waveInStart16(HWAVEIN16);
+UINT16    WINAPI waveInStop16(HWAVEIN16);
+UINT16    WINAPI waveInReset16(HWAVEIN16);
+UINT16    WINAPI waveInGetPosition16(HWAVEIN16,LPMMTIME16,UINT16);
+UINT16    WINAPI waveInGetID16(HWAVEIN16,UINT16*);
+DWORD     WINAPI waveInMessage16(HWAVEIN16,UINT16,DWORD,DWORD);
+
+typedef LPDRVCALLBACK16 LPMIDICALLBACK16;
+
+typedef struct {
+    WORD	wMid;		/* manufacturer ID */
+    WORD	wPid;		/* product ID */
+    MMVERSION16	vDriverVersion;	/* version of the driver */
+    CHAR	szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
+    WORD	wTechnology;	/* type of device */
+    WORD	wVoices;	/* # of voices (internal synth only) */
+    WORD	wNotes;		/* max # of notes (internal synth only) */
+    WORD	wChannelMask;	/* channels used (internal synth only) */
+    DWORD	dwSupport;	/* functionality supported by driver */
+} MIDIOUTCAPS16, *LPMIDIOUTCAPS16;
+
+typedef struct {
+    WORD	wMid;		/* manufacturer ID */
+    WORD	wPid;		/* product ID */
+    MMVERSION16	vDriverVersion;	/* version of the driver */
+    CHAR	szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
+    DWORD	dwSupport;	/* included in win95 and higher */
+} MIDIINCAPS16, *LPMIDIINCAPS16;
+
+typedef struct midihdr16_tag {
+    LPSTR	lpData;		/* pointer to locked data block */
+    DWORD	dwBufferLength;	/* length of data in data block */
+    DWORD	dwBytesRecorded;/* used for input only */
+    DWORD	dwUser;		/* for client's use */
+    DWORD	dwFlags;	/* assorted flags (see defines) */
+    struct midihdr16_tag *lpNext;	/* reserved for driver */
+    DWORD	reserved;	/* reserved for driver */
+} MIDIHDR16, *LPMIDIHDR16;
+
+typedef struct {
+    HMIDI16         hMidi;
+    DWORD           dwCallback;
+    DWORD           dwInstance;
+    UINT16          reserved;
+    DWORD           dnDevNode;
+    DWORD           cIds;
+    MIDIOPENSTRMID  rgIds;
+} MIDIOPENDESC16, *LPMIDIOPENDESC16;
+
+UINT16     WINAPI midiOutGetNumDevs16(void);
+UINT16     WINAPI midiOutGetDevCaps16(UINT16,LPMIDIOUTCAPS16,UINT16);
+UINT16     WINAPI midiOutGetVolume16(UINT16,DWORD*);
+UINT16     WINAPI midiOutSetVolume16(UINT16,DWORD);
+UINT16     WINAPI midiOutGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16     WINAPI midiOutOpen16(HMIDIOUT16*,UINT16,DWORD,DWORD,DWORD);
+UINT16     WINAPI midiOutClose16(HMIDIOUT16);
+UINT16     WINAPI midiOutPrepareHeader16(HMIDIOUT16,SEGPTR,UINT16);
+UINT16     WINAPI midiOutUnprepareHeader16(HMIDIOUT16,SEGPTR,UINT16);
+UINT16     WINAPI midiOutShortMsg16(HMIDIOUT16,DWORD);
+UINT16     WINAPI midiOutLongMsg16(HMIDIOUT16,SEGPTR,UINT16);
+UINT16     WINAPI midiOutReset16(HMIDIOUT16);
+UINT16     WINAPI midiOutCachePatches16(HMIDIOUT16,UINT16,WORD*,UINT16);
+UINT16     WINAPI midiOutCacheDrumPatches16(HMIDIOUT16,UINT16,WORD*,UINT16);
+UINT16     WINAPI midiOutGetID16(HMIDIOUT16,UINT16*);
+DWORD      WINAPI midiOutMessage16(HMIDIOUT16,UINT16,DWORD,DWORD);
+UINT16     WINAPI midiInGetNumDevs16(void);
+UINT16     WINAPI midiInGetDevCaps16(UINT16,LPMIDIINCAPS16,UINT16);
+UINT16     WINAPI midiInGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16     WINAPI midiInOpen16(HMIDIIN16*,UINT16,DWORD,DWORD,DWORD);
+UINT16     WINAPI midiInClose16(HMIDIIN16);
+UINT16     WINAPI midiInPrepareHeader16(HMIDIIN16,SEGPTR,UINT16);
+UINT16     WINAPI midiInUnprepareHeader16(HMIDIIN16,SEGPTR,UINT16);
+UINT16     WINAPI midiInAddBuffer16(HMIDIIN16,SEGPTR,UINT16);
+UINT16     WINAPI midiInStart16(HMIDIIN16);
+UINT16     WINAPI midiInStop16(HMIDIIN16);
+UINT16     WINAPI midiInReset16(HMIDIIN16);
+UINT16     WINAPI midiInGetID16(HMIDIIN16,UINT16*);
+DWORD      WINAPI midiInMessage16(HMIDIIN16,UINT16,DWORD,DWORD);
+MMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hms);
+MMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16*,LPUINT16,DWORD,DWORD,DWORD,DWORD);
+MMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16,LPMIDIHDR16,UINT16);
+MMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16);
+MMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16,LPMMTIME16,UINT16);
+MMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16,LPBYTE,DWORD);
+MMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16);
+MMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16);
+
+typedef struct {
+    WORD	wMid;			/* manufacturer ID */
+    WORD	wPid;			/* product ID */
+    MMVERSION16	vDriverVersion;		/* version of the driver */
+    CHAR	szPname[MAXPNAMELEN];	/* product name (NULL terminated string) */
+    WORD	wTechnology;		/* type of device */
+    DWORD	dwSupport;		/* functionality supported by driver */
+} AUXCAPS16, *LPAUXCAPS16;
+
+typedef void (CALLBACK *LPTIMECALLBACK16)(UINT16,UINT16,DWORD,DWORD,DWORD);
+
+typedef struct {
+    UINT16	wPeriodMin;	/* minimum period supported  */
+    UINT16	wPeriodMax;	/* maximum period supported  */
+} TIMECAPS16,*LPTIMECAPS16;
+
+typedef struct {
+    WORD wMid;                  /* manufacturer ID */
+    WORD wPid;                  /* product ID */
+    char szPname[MAXPNAMELEN];	/* product name (NULL terminated string) */
+    UINT16 wXmin;               /* minimum x position value */
+    UINT16 wXmax;               /* maximum x position value */
+    UINT16 wYmin;               /* minimum y position value */
+    UINT16 wYmax;               /* maximum y position value */
+    UINT16 wZmin;               /* minimum z position value */
+    UINT16 wZmax;               /* maximum z position value */
+    UINT16 wNumButtons;         /* number of buttons */
+    UINT16 wPeriodMin;          /* minimum message period when captured */
+    UINT16 wPeriodMax;          /* maximum message period when captured */
+                                /* win95,nt4 additions: */
+    UINT16 wRmin;		/* minimum r position value */
+    UINT16 wRmax;		/* maximum r position value */
+    UINT16 wUmin;		/* minimum u (5th axis) position value */
+    UINT16 wUmax;		/* maximum u (5th axis) position value */
+    UINT16 wVmin;		/* minimum v (6th axis) position value */
+    UINT16 wVmax;		/* maximum v (6th axis) position value */
+    UINT16 wCaps;		/* joystick capabilities */
+    UINT16 wMaxAxes;		/* maximum number of axes supported */
+    UINT16 wNumAxes;		/* number of axes in use */
+    UINT16 wMaxButtons;		/* maximum number of buttons supported */
+    CHAR szRegKey[MAXPNAMELEN]; /* registry key */
+    CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
+} JOYCAPS16, *LPJOYCAPS16;
+
+typedef struct {
+    UINT16 wXpos;                 /* x position */
+    UINT16 wYpos;                 /* y position */
+    UINT16 wZpos;                 /* z position */
+    UINT16 wButtons;              /* button states */
+} JOYINFO16, *LPJOYINFO16;
+
+typedef struct {
+    WORD         wMid;                  /* manufacturer id */
+    WORD         wPid;                  /* product id */
+    MMVERSION16  vDriverVersion;        /* version of the driver */
+    CHAR         szPname[MAXPNAMELEN];  /* product name */
+    DWORD        fdwSupport;            /* misc. support bits */
+    DWORD        cDestinations;         /* count of destinations */
+} MIXERCAPS16,*LPMIXERCAPS16;
+
+typedef struct tMIXEROPENDESC16
+{
+	HMIXEROBJ16		hmx;
+        LPVOID			pReserved0;
+	DWORD			dwCallback;
+	DWORD			dwInstance;
+} MIXEROPENDESC16, *LPMIXEROPENDESC16;
+
+typedef struct {
+    DWORD	cbStruct;		/* size of MIXERLINE structure */
+    DWORD	dwDestination;		/* zero based destination index */
+    DWORD	dwSource;		/* zero based source index (if source) */
+    DWORD	dwLineID;		/* unique line id for mixer device */
+    DWORD	fdwLine;		/* state/information about line */
+    DWORD	dwUser;			/* driver specific information */
+    DWORD	dwComponentType;	/* component type line connects to */
+    DWORD	cChannels;		/* number of channels line supports */
+    DWORD	cConnections;		/* number of connections [possible] */
+    DWORD	cControls;		/* number of controls at this line */
+    CHAR	szShortName[MIXER_SHORT_NAME_CHARS];
+    CHAR	szName[MIXER_LONG_NAME_CHARS];
+    struct {
+	DWORD	dwType;			/* MIXERLINE_TARGETTYPE_xxxx */
+	DWORD	dwDeviceID;		/* target device ID of device type */
+	WORD	wMid;			/* of target device */
+	WORD	wPid;			/*      " */
+	MMVERSION16	vDriverVersion;	/*      " */
+	CHAR	szPname[MAXPNAMELEN];	/*      " */
+    } Target;
+} MIXERLINE16, *LPMIXERLINE16;
+
+typedef struct {
+    DWORD		cbStruct;           /* size in bytes of MIXERCONTROL */
+    DWORD		dwControlID;        /* unique control id for mixer device */
+    DWORD		dwControlType;      /* MIXERCONTROL_CONTROLTYPE_xxx */
+    DWORD		fdwControl;         /* MIXERCONTROL_CONTROLF_xxx */
+    DWORD		cMultipleItems;     /* if MIXERCONTROL_CONTROLF_MULTIPLE set */
+    CHAR		szShortName[MIXER_SHORT_NAME_CHARS];
+    CHAR		szName[MIXER_LONG_NAME_CHARS];
+    union {
+	struct {
+	    LONG	lMinimum;	/* signed minimum for this control */
+	    LONG	lMaximum;	/* signed maximum for this control */
+	} s;
+	struct {
+	    DWORD	dwMinimum;	/* unsigned minimum for this control */
+	    DWORD	dwMaximum;	/* unsigned maximum for this control */
+	} s1;
+	DWORD       	dwReserved[6];
+    } Bounds;
+    union {
+	DWORD		cSteps;		/* # of steps between min & max */
+	DWORD		cbCustomData;	/* size in bytes of custom data */
+	DWORD		dwReserved[6];	/* !!! needed? we have cbStruct.... */
+    } Metrics;
+} MIXERCONTROL16, *LPMIXERCONTROL16;
+
+typedef struct {
+    DWORD	cbStruct;	/* size in bytes of MIXERLINECONTROLS */
+    DWORD	dwLineID;	/* line id (from MIXERLINE.dwLineID) */
+    union {
+	DWORD	dwControlID;	/* MIXER_GETLINECONTROLSF_ONEBYID */
+	DWORD	dwControlType;	/* MIXER_GETLINECONTROLSF_ONEBYTYPE */
+    } u;
+    DWORD	cControls;	/* count of controls pmxctrl points to */
+    DWORD	cbmxctrl;	/* size in bytes of _one_ MIXERCONTROL */
+    SEGPTR	pamxctrl;	/* pointer to first MIXERCONTROL array */
+} MIXERLINECONTROLS16, *LPMIXERLINECONTROLS16;
+
+typedef struct {
+    DWORD	cbStruct;	/* size in bytes of MIXERCONTROLDETAILS */
+    DWORD	dwControlID;	/* control id to get/set details on */
+    DWORD	cChannels;	/* number of channels in paDetails array */
+    union {
+        HWND16	hwndOwner;	/* for MIXER_SETCONTROLDETAILSF_CUSTOM */
+        DWORD	cMultipleItems;	/* if _MULTIPLE, the number of items per channel */
+    } u;
+    DWORD	cbDetails;	/* size of _one_ details_XX struct */
+    LPVOID	paDetails;	/* pointer to array of details_XX structs */
+} MIXERCONTROLDETAILS16,*LPMIXERCONTROLDETAILS16;
+
+typedef struct {
+    DWORD	dwParam1;
+    DWORD	dwParam2;
+    CHAR	szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXT16,*LPMIXERCONTROLDETAILS_LISTTEXT16;
+
+typedef LRESULT (CALLBACK *LPMMIOPROC16)(LPSTR lpmmioinfo,UINT16 uMessage,
+					 LPARAM lParam1,LPARAM lParam2);
+
+typedef struct {
+        DWORD		dwFlags;	/* general status flags */
+        FOURCC		fccIOProc;	/* pointer to I/O procedure */
+        LPMMIOPROC16	pIOProc;	/* pointer to I/O procedure */
+        UINT16		wErrorRet;	/* place for error to be returned */
+        HTASK16		hTask;		/* alternate local task */
+        /* fields maintained by MMIO functions during buffered I/O */
+        LONG		cchBuffer;	/* size of I/O buffer (or 0L) */
+        HPSTR		pchBuffer;	/* start of I/O buffer (or NULL) */
+        HPSTR		pchNext;	/* pointer to next byte to read/write */
+        HPSTR		pchEndRead;	/* pointer to last valid byte to read */
+        HPSTR		pchEndWrite;	/* pointer to last byte to write */
+        LONG		lBufOffset;	/* disk offset of start of buffer */
+        /* fields maintained by I/O procedure */
+        LONG		lDiskOffset;	/* disk offset of next read or write */
+        DWORD		adwInfo[3];	/* data specific to type of MMIOPROC */
+        /* other fields maintained by MMIO */
+        DWORD		dwReserved1;	/* reserved for MMIO use */
+        DWORD		dwReserved2;	/* reserved for MMIO use */
+        HMMIO16		hmmio;		/* handle to open file */
+} MMIOINFO16, *LPMMIOINFO16;
+
+typedef UINT16 (CALLBACK *YIELDPROC16)(UINT16,DWORD);
+
+UINT16		WINAPI auxGetNumDevs16(void);
+UINT16		WINAPI auxGetDevCaps16 (UINT16,LPAUXCAPS16,UINT16);
+UINT16		WINAPI auxSetVolume16(UINT16,DWORD);
+UINT16		WINAPI auxGetVolume16(UINT16,LPDWORD);
+DWORD		WINAPI auxOutMessage16(UINT16,UINT16,DWORD,DWORD);
+MMRESULT16	WINAPI timeGetSystemTime16(LPMMTIME16,UINT16);
+MMRESULT16	WINAPI timeSetEvent16(UINT16,UINT16,LPTIMECALLBACK16,DWORD,UINT16);
+MMRESULT16	WINAPI timeKillEvent16(UINT16);
+MMRESULT16	WINAPI timeGetDevCaps16(LPTIMECAPS16,UINT16);
+MMRESULT16	WINAPI timeBeginPeriod16(UINT16);
+MMRESULT16	WINAPI timeEndPeriod16(UINT16);
+MMRESULT16	WINAPI joyGetDevCaps16 (UINT16,LPJOYCAPS16,UINT16);
+UINT16		WINAPI joyGetNumDevs16(void);
+MMRESULT16	WINAPI joyGetPos16(UINT16,LPJOYINFO16);
+MMRESULT16	WINAPI joyGetPosEx16(UINT16,LPJOYINFOEX);
+MMRESULT16	WINAPI joyGetThreshold16(UINT16,UINT16*);
+MMRESULT16	WINAPI joyReleaseCapture16(UINT16);
+MMRESULT16	WINAPI joySetCapture16(HWND16,UINT16,UINT16,BOOL16);
+MMRESULT16	WINAPI joySetThreshold16(UINT16,UINT16);
+UINT16		WINAPI mixerGetNumDevs16(void);
+UINT16		WINAPI mixerOpen16(LPHMIXER16,UINT16,DWORD,DWORD,DWORD);
+UINT16		WINAPI mixerClose16(HMIXER16);
+DWORD		WINAPI mixerMessage16(HMIXER16,UINT16,DWORD,DWORD);
+UINT16		WINAPI mixerGetDevCaps16(UINT16,LPMIXERCAPS16,UINT16);
+UINT16		WINAPI mixerGetLineInfo16(HMIXEROBJ16,LPMIXERLINE16,DWORD);
+UINT16		WINAPI mixerGetID16(HMIXEROBJ16,LPUINT16,DWORD);
+UINT16		WINAPI mixerGetLineControls16(HMIXEROBJ16,LPMIXERLINECONTROLS16,DWORD);
+UINT16		WINAPI mixerGetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);
+UINT16		WINAPI mixerSetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);
+LPMMIOPROC16	WINAPI mmioInstallIOProc16(FOURCC,LPMMIOPROC16,DWORD);
+FOURCC 		WINAPI mmioStringToFOURCC16(LPCSTR,UINT16);
+HMMIO16		WINAPI mmioOpen16(LPSTR,MMIOINFO16*,DWORD);
+UINT16 		WINAPI mmioRename16(LPCSTR,LPCSTR,MMIOINFO16*,DWORD);
+MMRESULT16 	WINAPI mmioClose16(HMMIO16,UINT16);
+LONG 		WINAPI mmioRead16(HMMIO16,HPSTR,LONG);
+LONG 		WINAPI mmioWrite16(HMMIO16,HPCSTR,LONG);
+LONG 		WINAPI mmioSeek16(HMMIO16,LONG,INT16);
+MMRESULT16	WINAPI mmioGetInfo16(HMMIO16,MMIOINFO16*,UINT16);
+MMRESULT16 	WINAPI mmioSetInfo16(HMMIO16,const MMIOINFO16*,UINT16);
+UINT16 		WINAPI mmioSetBuffer16(HMMIO16,SEGPTR,LONG,UINT16);
+UINT16 		WINAPI mmioFlush16(HMMIO16,UINT16);
+UINT16 		WINAPI mmioAdvance16(HMMIO16,MMIOINFO16*,UINT16);
+LRESULT		WINAPI mmioSendMessage16(HMMIO16,UINT16,LPARAM,LPARAM);
+UINT16		WINAPI mmioDescend16(HMMIO16,MMCKINFO*,const MMCKINFO*,UINT16);
+UINT16		WINAPI mmioAscend16(HMMIO16,MMCKINFO*,UINT16);
+UINT16		WINAPI mmioCreateChunk16(HMMIO16,MMCKINFO*,UINT16);
+DWORD		WINAPI mciSendCommand16(UINT16,UINT16,DWORD,DWORD);
+DWORD		WINAPI mciSendString16(LPCSTR,LPSTR,UINT16,HWND16);
+UINT16		WINAPI mciGetDeviceID16(LPCSTR);
+UINT16		WINAPI mciGetDeviceIDFromElementID16(DWORD,LPCSTR);
+BOOL16		WINAPI mciGetErrorString16 (DWORD,LPSTR,UINT16);
+BOOL16		WINAPI mciSetYieldProc16(UINT16,YIELDPROC16,DWORD);
+HTASK16		WINAPI mciGetCreatorTask16(UINT16);
+YIELDPROC16	WINAPI mciGetYieldProc16(UINT16,DWORD*);
+DWORD 		WINAPI mciGetDriverData16(UINT16 uDeviceID);
+BOOL16		WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD dwData);
+UINT16		WINAPI mciDriverYield16(UINT16 uDeviceID);
+BOOL16		WINAPI mciDriverNotify16(HWND16 hwndCallback, UINT16 uDeviceID,
+					  UINT16 uStatus);
+UINT16		WINAPI mciLoadCommandResource16(HINSTANCE16 hInstance,
+					 LPCSTR lpResName, UINT16 uType);
+BOOL16		WINAPI mciFreeCommandResource16(UINT16 uTable);
+
+HINSTANCE16	WINAPI mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt);
+void    	WINAPI mmTaskBlock16(HINSTANCE16 hInst);
+LRESULT 	WINAPI mmTaskSignal16(HTASK16 ht);
+void    	WINAPI mmTaskYield16(void);
+LRESULT 	WINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE16 lpHndl,
+					 DWORD dwPmt, DWORD dwFlags);
+void 		WINAPI mmThreadSignal16(HANDLE16 hndl);
+void    	WINAPI mmThreadBlock16(HANDLE16 hndl);
+HANDLE16 	WINAPI mmThreadGetTask16(HANDLE16 hndl);
+BOOL16   	WINAPI mmThreadIsValid16(HANDLE16 hndl);
+BOOL16  	WINAPI mmThreadIsCurrent16(HANDLE16 hndl);
+
+BOOL16		WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev,
+					 WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);
+
+typedef struct {
+    DWORD	dwCallback;
+    WORD	wDeviceID;
+    WORD	wReserved0;
+    SEGPTR	lpstrDeviceType;
+    SEGPTR	lpstrElementName;
+    SEGPTR	lpstrAlias;
+} MCI_OPEN_PARMS16, *LPMCI_OPEN_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpstrReturn;
+    DWORD   dwRetSize;
+} MCI_INFO_PARMS16, *LPMCI_INFO_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    SEGPTR	lpstrReturn;
+    DWORD	dwRetSize;
+    DWORD	dwNumber;
+    WORD	wDeviceType;
+    WORD	wReserved0;
+} MCI_SYSINFO_PARMS16, *LPMCI_SYSINFO_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    UINT16	nVirtKey;
+    WORD	wReserved0;
+    HWND16	hwndBreak;
+    WORD	wReserved1;
+} MCI_BREAK_PARMS16, *LPMCI_BREAK_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    SEGPTR	lpfilename;
+} MCI_LOAD_PARMS16, *LPMCI_LOAD_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    SEGPTR      lpstrSoundName;
+} MCI_SOUND_PARMS16, *LPMCI_SOUND_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    SEGPTR	lpstrCommand;
+} MCI_VD_ESCAPE_PARMS16, *LPMCI_VD_ESCAPE_PARMS16;
+
+typedef struct {
+    UINT16			wDeviceID;		/* device ID */
+    SEGPTR			lpstrParams;		/* parameter string for entry in SYSTEM.INI */
+    UINT16			wCustomCommandTable;	/* custom command table (0xFFFF if none)
+							 * filled in by the driver */
+    UINT16			wType;			/* driver type (filled in by the driver) */
+} MCI_OPEN_DRIVER_PARMS16, *LPMCI_OPEN_DRIVER_PARMS16;
+
+typedef struct {
+    DWORD		dwCallback;
+    MCIDEVICEID16	wDeviceID;
+    WORD		wReserved0;
+    SEGPTR		lpstrDeviceType;
+    SEGPTR		lpstrElementName;
+    SEGPTR		lpstrAlias;
+    DWORD		dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMS16, *LPMCI_WAVE_OPEN_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    DWORD	dwTimeFormat;
+    DWORD	dwAudio;
+    UINT16	wInput;
+    UINT16	wReserved0;
+    UINT16	wOutput;
+    UINT16	wReserved1;
+    UINT16	wFormatTag;
+    UINT16	wReserved2;
+    UINT16	nChannels;
+    UINT16	wReserved3;
+    DWORD	nSamplesPerSec;
+    DWORD	nAvgBytesPerSec;
+    UINT16	nBlockAlign;
+    UINT16	wReserved4;
+    UINT16	wBitsPerSample;
+    UINT16	wReserved5;
+} MCI_WAVE_SET_PARMS16, * LPMCI_WAVE_SET_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    UINT16  wDeviceID;
+    UINT16  wReserved0;
+    SEGPTR  lpstrDeviceType;
+    SEGPTR  lpstrElementName;
+    SEGPTR  lpstrAlias;
+    DWORD   dwStyle;
+    HWND16  hWndParent;
+    UINT16  wReserved1;
+} MCI_ANIM_OPEN_PARMS16, *LPMCI_ANIM_OPEN_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    HWND16	hWnd;
+    WORD	wReserved1;
+    WORD	nCmdShow;
+    WORD	wReserved2;
+    SEGPTR	lpstrText;
+} MCI_ANIM_WINDOW_PARMS16, *LPMCI_ANIM_WINDOW_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+#ifdef MCI_USE_OFFEXT
+    POINT16 ptOffset;
+    POINT16 ptExtent;
+#else   /* ifdef MCI_USE_OFFEXT */
+    RECT16  rc;
+#endif  /* ifdef MCI_USE_OFFEXT */
+} MCI_ANIM_RECT_PARMS16, *LPMCI_ANIM_RECT_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    RECT16  rc;
+    HDC16   hDC;
+} MCI_ANIM_UPDATE_PARMS16, *LPMCI_ANIM_UPDATE_PARMS16;
+
+typedef struct {
+    DWORD		dwCallback;
+    MCIDEVICEID16	wDeviceID;
+    WORD		wReserved0;
+    SEGPTR		lpstrDeviceType;
+    SEGPTR		lpstrElementName;
+    SEGPTR		lpstrAlias;
+    DWORD		dwStyle;
+    HWND16		hWndParent;
+    WORD		wReserved1;
+} MCI_OVLY_OPEN_PARMS16, *LPMCI_OVLY_OPEN_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    HWND16	hWnd;
+    WORD	wReserved1;
+    UINT16	nCmdShow;
+    WORD	wReserved2;
+    SEGPTR	lpstrText;
+} MCI_OVLY_WINDOW_PARMS16, *LPMCI_OVLY_WINDOW_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+#ifdef MCI_USE_OFFEXT
+    POINT16 ptOffset;
+    POINT16 ptExtent;
+#else   /* ifdef MCI_USE_OFFEXT */
+    RECT16  rc;
+#endif  /* ifdef MCI_USE_OFFEXT */
+} MCI_OVLY_RECT_PARMS16, *LPMCI_OVLY_RECT_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpfilename;
+    RECT16  rc;
+} MCI_OVLY_SAVE_PARMS16, *LPMCI_OVLY_SAVE_PARMS16;
+
+typedef struct {
+    DWORD	dwCallback;
+    SEGPTR	lpfilename;
+    RECT16	rc;
+} MCI_OVLY_LOAD_PARMS16, *LPMCI_OVLY_LOAD_PARMS16;
+
+/* from digitalv / 16 bit */
+typedef struct {
+    DWORD   dwCallback;
+    RECT16  rc;
+} MCI_DGV_RECT_PARMS16, *LPMCI_DGV_RECT_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpstrFileName;
+    RECT16  rc;
+} MCI_DGV_CAPTURE_PARMS16, *LPMCI_DGV_CAPTURE_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT16  rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_COPY_PARMS16, *LPMCI_DGV_COPY_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT16  rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_CUT_PARMS16, * LPMCI_DGV_CUT_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT16  rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_DELETE_PARMS16, * LPMCI_DGV_DELETE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_FREEZE_PARMS16, * LPMCI_DGV_FREEZE_PARMS16;
+
+typedef struct  {
+    DWORD   dwCallback;
+    SEGPTR  lpstrReturn;
+    DWORD   dwRetSize;
+    DWORD   dwItem;
+} MCI_DGV_INFO_PARMS16, * LPMCI_DGV_INFO_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpstrReturn;
+    DWORD   dwLength;
+    DWORD   dwNumber;
+    DWORD   dwItem;
+    SEGPTR  lpstrAlgorithm;
+} MCI_DGV_LIST_PARMS16, *LPMCI_DGV_LIST_PARMS16;
+
+typedef MCI_LOAD_PARMS16  MCI_DGV_LOAD_PARMS16 , * LPMCI_DGV_LOAD_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    UINT16  wDeviceID;
+    UINT16  wReserved0;
+    SEGPTR  lpstrDeviceType;
+    SEGPTR  lpstrElementName;
+    SEGPTR  lpstrAlias;
+    DWORD   dwStyle;
+    HWND16  hWndParent;
+    UINT16  wReserved1;
+} MCI_DGV_OPEN_PARMS16, *LPMCI_DGV_OPEN_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwTo;
+    RECT16  rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_PASTE_PARMS16, * LPMCI_DGV_PASTE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_PUT_PARMS16, * LPMCI_DGV_PUT_PARMS16;
+
+typedef struct {
+    DWORD       dwCallback;
+    DWORD       dwItem;
+    SEGPTR      lpstrName;
+    SEGPTR      lpstrAlgorithm;
+    DWORD       dwHandle;
+} MCI_DGV_QUALITY_PARMS16, *LPMCI_DGV_QUALITY_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwFrom;
+    DWORD   dwTo;
+    RECT16  rc;
+    DWORD   dwAudioStream;
+    DWORD   dwVideoStream;
+} MCI_DGV_RECORD_PARMS16, * LPMCI_DGV_RECORD_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpstrPath;
+    DWORD   dwSize;
+} MCI_DGV_RESERVE_PARMS16, *LPMCI_DGV_RESERVE_PARMS16A;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpstrFileName;
+    RECT16  rc;
+} MCI_DGV_RESTORE_PARMS16, *LPMCI_DGV_RESTORE_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    SEGPTR  lpstrFileName;
+    RECT16  rc;
+} MCI_DGV_SAVE_PARMS16, *LPMCI_DGV_SAVE_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwItem;
+    DWORD   dwValue;
+    DWORD   dwOver;
+    SEGPTR  lpstrAlgorithm;
+    SEGPTR  lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMS16, *LPMCI_DGV_SETAUDIO_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwItem;
+    DWORD   dwValue;
+    DWORD   dwOver;
+    SEGPTR  lpstrAlgorithm;
+    SEGPTR  lpstrQuality;
+    DWORD   dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMS16, *LPMCI_DGV_SETVIDEO_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    DWORD   dwReturn;
+    DWORD   dwItem;
+    DWORD   dwTrack;
+    SEGPTR  lpstrDrive;
+    DWORD   dwReference;
+} MCI_DGV_STATUS_PARMS16, *LPMCI_DGV_STATUS_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    RECT16  rc;
+    HDC16   hDC;
+    UINT16  wReserved0;
+} MCI_DGV_UPDATE_PARMS16, * LPMCI_DGV_UPDATE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_UNFREEZE_PARMS16, * LPMCI_DGV_UNFREEZE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_WHERE_PARMS16, * LPMCI_DGV_WHERE_PARMS16;
+
+typedef struct {
+    DWORD   dwCallback;
+    HWND16  hWnd;
+    UINT16  wReserved1;
+    UINT16  nCmdShow;
+    UINT16  wReserved2;
+    SEGPTR  lpstrText;
+} MCI_DGV_WINDOW_PARMS16, *LPMCI_DGV_WINDOW_PARMS16;
+
+#include <poppack.h>
+
+#endif  /* __WINE_WINE_MMSYSTEM16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h
new file mode 100644
index 0000000..6f3593d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h
@@ -0,0 +1,2197 @@
+/*
+ * MS debug information definitions.
+ *
+ * Copyright (C) 1996 Eric Youngdale
+ * Copyright (C) 1999-2000 Ulrich Weigand
+ * Copyright (C) 2004 Eric Pouech
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* MS has stored all its debug information in a set of structures
+ * which has been rather consistent across the years (ie you can grasp
+ * some continuity, and not so many drastic changes).
+ *
+ * A bit of history on the various formats
+ *      MSVC 1.0        PDB v1 (new format for debug info)
+ *      MSVC 2.0        Inclusion in link of debug info (PDB v2)
+ *      MSVC 5.0        Types are 24 bits (instead of 16 for <= 4.x)
+ *      MSVC x.0        PDB (change in internal streams layout)
+ *
+ *      .DBG            Contains COFF, FPO and Codeview info
+ *      .PDB            New format for debug info (information is
+ *                      derived from Codeview information)
+ *      VCx0.PDB        x major MSVC number, stores types, while
+ *                      <project>.PDB stores symbols.
+ *
+ * Debug information can either be found in the debug section of a PE
+ * module (in something close to a .DBG file), or the debug section
+ * can actually refer to an external file, which can be in turn,
+ * either a .DBG or .PDB file.
+ *
+ * Regarding PDB files:
+ * -------------------
+ * They are implemented as a set of internal files (as a small file
+ * system). The file is split into blocks, an internal file is made
+ * of a set of blocks. Internal files are accessed through
+ * numbers. For example,
+ * 1/ is the ROOT (basic information on the file)
+ * 2/ is the Symbol information (global symbols, local variables...)
+ * 3/ is the Type internal file (each the symbols can have type
+ * information associated with it).
+ *
+ * Over the years, three formats existed for the PDB:
+ * - ?? was rather linked to 16 bit code (our support shall be rather
+ *   bad)
+ * - JG: it's the signature embedded in the file header. This format
+ *   has been used in MSVC 2.0 => 5.0.
+ * - DS: it's the signature embedded in the file header. It's the
+ *   current format supported my MS.
+ *
+ * Types internal stream
+ * ---------------------
+ * Types (from the Type internal file) have existed in three flavors
+ * (note that those flavors came as historical evolution, but there
+ * isn't a one to one link between types evolution and PDB formats'
+ * evolutions:
+ * - the first flavor (suffixed by V1 in this file), where the types
+ *   and subtypes are 16 bit entities; and where strings are in Pascal
+ *   format (first char is their length and are not 0 terminated)
+ * - the second flavor (suffixed by V2) differs from first flavor with
+ *   types and subtypes as 32 bit entities. This forced some
+ *   reordering of fields in some types
+ * - the third flavor (suffixed by V3) differs from second flavor with
+ *   strings stored as C strings (ie are 0 terminated, instead of
+ *   length prefixed)
+ * The different flavors can coexist in the same file (is this really
+ * true ??)
+ *
+ * For the evolution of types, the need of the second flavor was the
+ * number of types to be defined (limited to 0xFFFF, including the C
+ * basic types); the need of the third flavor is the increase of
+ * symbol size (to be greater than 256), which was likely needed for
+ * complex C++ types (nested + templates).
+ *
+ * It's somehow difficult to represent the layout of those types on
+ * disk because:
+ * - some integral values are stored as numeric leaf, which size is
+ *   variable depending on its value
+ *
+ * Symbols internal stream
+ * -----------------------
+ * Here also we find three flavors (that we've suffixed with _V1, _V2
+ * and _V3) even if their evolution is closer to the evolution of
+ * types, they are not completely linked together.
+ */
+
+#include "pshpack1.h"
+
+/* ======================================== *
+ *             Type information
+ * ======================================== */
+
+struct p_string
+{
+    unsigned char               namelen;
+    char                        name[1];
+};
+
+union codeview_type
+{
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+    } generic;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               attribute;
+        short int               type;
+    } modifier_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        int                     type;
+        short int               attribute;
+    } modifier_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               attribute;
+        short int               datatype;
+        struct p_string         p_name;
+    } pointer_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned int            datatype;
+        unsigned int            attribute;
+        struct p_string         p_name;
+    } pointer_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               elemtype;
+        short int               idxtype;
+        unsigned short int      arrlen;     /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } array_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned int            elemtype;
+        unsigned int            idxtype;
+        unsigned short int      arrlen;    /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } array_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned int            elemtype;
+        unsigned int            idxtype;
+        unsigned short int      arrlen;    /* numeric leaf */
+#if 0
+        char                    name[1];
+#endif
+    } array_v3;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               n_element;
+        short int               fieldlist;
+        short int               property;
+        short int               derived;
+        short int               vshape;
+        unsigned short int      structlen;  /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } struct_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               n_element;
+        short int               property;
+        unsigned int            fieldlist;
+        unsigned int            derived;
+        unsigned int            vshape;
+        unsigned short int      structlen;  /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } struct_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               n_element;
+        short int               property;
+        unsigned int            fieldlist;
+        unsigned int            derived;
+        unsigned int            vshape;
+        unsigned short int      structlen;  /* numeric leaf */
+#if 0
+        char                    name[1];
+#endif
+    } struct_v3;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               count;
+        short int               fieldlist;
+        short int               property;
+        unsigned short int      un_len;     /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } union_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               count;
+        short int               property;
+        unsigned int            fieldlist;
+        unsigned short int      un_len;     /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } union_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               count;
+        short int               property;
+        unsigned int            fieldlist;
+        unsigned short int      un_len;     /* numeric leaf */
+#if 0
+        char                    name[1];
+#endif
+    } union_v3;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               count;
+        short int               type;
+        short int               fieldlist;
+        short int               property;
+        struct p_string         p_name;
+    } enumeration_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               count;
+        short int               property;
+        unsigned int            type;
+        unsigned int            fieldlist;
+        struct p_string         p_name;
+    } enumeration_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        short int               count;
+        short int               property;
+        unsigned int            type;
+        unsigned int            fieldlist;
+        char                    name[1];
+    } enumeration_v3;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned short int      rvtype;
+        unsigned char           call;
+        unsigned char           reserved;
+        unsigned short int      params;
+        unsigned short int      arglist;
+    } procedure_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned int            rvtype;
+        unsigned char           call;
+        unsigned char           reserved;
+        unsigned short int      params;
+        unsigned int            arglist;
+    } procedure_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned short int      rvtype;
+        unsigned short int      class_type;
+        unsigned short int      this_type;
+        unsigned char           call;
+        unsigned char           reserved;
+        unsigned short int      params;
+        unsigned short int      arglist;
+        unsigned int            this_adjust;
+    } mfunction_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned int            rvtype;
+        unsigned int            class_type;
+        unsigned                this_type;
+        unsigned char           call;
+        unsigned char           reserved;
+        unsigned short          params;
+        unsigned int            arglist;
+        unsigned int            this_adjust;
+    } mfunction_v2;
+};
+
+union codeview_reftype
+{
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+    } generic;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned char           list[1];
+    } fieldlist;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned char           nbits;
+        unsigned char           bitoff;
+        unsigned short          type;
+    } bitfield_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned int            type;
+        unsigned char           nbits;
+        unsigned char           bitoff;
+    } bitfield_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned short          num;
+        unsigned short          args[1];
+    } arglist_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned                num;
+        unsigned                args[1];
+    } arglist_v2;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned short          num;
+        unsigned short          drvdcls[1];
+    } derived_v1;
+
+    struct
+    {
+        unsigned short int      len;
+        short int               id;
+        unsigned                num;
+        unsigned                drvdcls[1];
+    } derived_v2;
+};
+
+union codeview_fieldtype
+{
+    struct
+    {
+        short int		id;
+    } generic;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+        short int		attribute;
+        unsigned short int	offset;     /* numeric leaf */
+    } bclass_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        unsigned short int	offset;     /* numeric leaf */
+    } bclass_v2;
+
+    struct
+    {
+        short int		id;
+        short int		btype;
+        short int		vbtype;
+        short int		attribute;
+        unsigned short int	vbpoff;     /* numeric leaf */
+#if 0
+        unsigned short int	vboff;      /* numeric leaf */
+#endif
+    } vbclass_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        btype;
+        unsigned int	        vbtype;
+        unsigned short int	vbpoff;     /* numeric leaf */
+#if 0
+        unsigned short int	vboff;      /* numeric leaf */
+#endif
+    } vbclass_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned short int	value;     /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } enumerate_v1;
+
+   struct
+    {
+        short int               id;
+        short int               attribute;
+        unsigned short int      value;     /* numeric leaf */
+#if 0
+        char                    name[1];
+#endif
+    } enumerate_v3;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+        struct p_string         p_name;
+    } friendfcn_v1;
+
+    struct
+    {
+        short int		id;
+        short int		_pad0;
+        unsigned int	        type;
+        struct p_string         p_name;
+    } friendfcn_v2;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+        short int		attribute;
+        unsigned short int	offset;    /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } member_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        unsigned short int	offset;    /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } member_v2;
+
+    struct
+    {
+        short int               id;
+        short int               attribute;
+        unsigned int            type;
+        unsigned short int      offset; /* numeric leaf */
+#if 0
+        unsigned char           name[1];
+#endif
+    }
+    member_v3;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+        short int		attribute;
+        struct p_string         p_name;
+    } stmember_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        struct p_string         p_name;
+    } stmember_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        char                    name[1];
+    } stmember_v3;
+
+    struct
+    {
+        short int		id;
+        short int		count;
+        short int		mlist;
+        struct p_string         p_name;
+    } method_v1;
+
+    struct
+    {
+        short int		id;
+        short int		count;
+        unsigned int	        mlist;
+        struct p_string         p_name;
+    } method_v2;
+
+    struct
+    {
+        short int		id;
+        short int		count;
+        unsigned int	        mlist;
+        char                    name[1];
+    } method_v3;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+        struct p_string         p_name;
+    } nesttype_v1;
+
+    struct
+    {
+        short int		id;
+        short int		_pad0;
+        unsigned int	        type;
+        struct p_string         p_name;
+    } nesttype_v2;
+
+    struct
+    {
+        short int		id;
+        short int		_pad0;
+        unsigned int	        type;
+        char                    name[1];
+    } nesttype_v3;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+    } vfunctab_v1;
+
+    struct
+    {
+        short int		id;
+        short int		_pad0;
+        unsigned int	        type;
+    } vfunctab_v2;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+    } friendcls_v1;
+
+    struct
+    {
+        short int		id;
+        short int		_pad0;
+        unsigned int	        type;
+    } friendcls_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        short int		type;
+        struct p_string         p_name;
+    } onemethod_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int 	        type;
+        struct p_string         p_name;
+    } onemethod_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int 	        type;
+        char                    name[1];
+    } onemethod_v3;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        short int		type;
+        unsigned int	        vtab_offset;
+        struct p_string         p_name;
+    } onemethod_virt_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        unsigned int	        vtab_offset;
+        struct p_string         p_name;
+    } onemethod_virt_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        unsigned int	        vtab_offset;
+        char                    name[1];
+    } onemethod_virt_v3;
+
+    struct
+    {
+        short int		id;
+        short int		type;
+        unsigned int	        offset;
+    } vfuncoff_v1;
+
+    struct
+    {
+        short int		id;
+        short int		_pad0;
+        unsigned int	        type;
+        unsigned int	        offset;
+    } vfuncoff_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        short int		type;
+        struct p_string         p_name;
+    } nesttypeex_v1;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        struct p_string         p_name;
+    } nesttypeex_v2;
+
+    struct
+    {
+        short int		id;
+        short int		attribute;
+        unsigned int	        type;
+        struct p_string         p_name;
+    } membermodify_v2;
+
+    struct
+    {
+        short int               id;
+        short int               ref;
+    } index_v1;
+
+    struct
+    {
+        short int               id;
+        short int               unk;
+        unsigned int            ref;
+    } index_v2;
+};
+
+
+/*
+ * This covers the basic datatypes that VC++ seems to be using these days.
+ * 32 bit mode only.  There are additional numbers for the pointers in 16
+ * bit mode.  There are many other types listed in the documents, but these
+ * are apparently not used by the compiler, or represent pointer types
+ * that are not used.
+ *
+ * Official MS documentation says that type (< 0x4000, so 12 bits) is made of:
+ *        +----------+------+------+----------+------+
+ *        |    11    | 10-8 | 7-4  |     3    | 2-0  |
+ *        +----------+------+------+----------+------+
+ *        | reserved | mode | type | reserved | size |
+ *        +----------+------+------+----------+------+
+ * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've
+ * added this basic type... as if bit 3 had been integrated into the size field
+ */
+
+/* the type number of a built-in type is a 16-bit value specified in the following format:
+    bit #   |   11     |   10-8   |   7-4    |    3     |    2-0   |
+    field   | reserved |   mode   |   type   | reserved |   size   |
+
+    where
+        <type> is one of the following types:
+                0x00 Special
+                0x01 Signed integral value
+                0x02 Unsigned integral value
+                0x03 Boolean
+                0x04 Real
+                0x05 Complex
+                0x06 Special2
+                0x07 Real int value
+                0x08 Reserved
+                0x09 Reserved
+                0x0a Reserved
+                0x0b Reserved
+                0x0c Reserved
+                0x0d Reserved
+                0x0e Reserved
+                0x0f Reserved for debugger expression evaluator
+
+        <size> is an enumerated value for each of the types.
+                Type = special
+                    0x00 No type
+                    0x01 Absolute symbol
+                    0x02 Segment
+                    0x03 Void
+                    0x04 Basic 8-byte currency value
+                    0x05 Near Basic string
+                    0x06 Far Basic string
+                    0x07 Untranslated type from previous Microsoft symbol formats
+                Type = signed/unsigned integral and Boolean values
+                    0x00 1 byte
+                    0x01 2 byte
+                    0x02 4 byte
+                    0x03 8 byte
+                    0x04 Reserved
+                    0x05 Reserved
+                    0x06 Reserved
+                    0x07 Reserved
+                Type = real and complex
+                    0x00 32 bit
+                    0x01 64 bit
+                    0x02 80 bit
+                    0x03 128 bit
+                    0x04 48 bit
+                    0x05 Reserved
+                    0x06 Reserved
+                    0x07 Reserved
+                Type = special2
+                    0x00 Bit
+                    0x01 Pascal CHAR
+                Type = Real int
+                    0x00 Char
+                    0x01 Wide character
+                    0x02 2-byte signed integer
+                    0x03 2-byte unsigned integer
+                    0x04 4-byte signed integer
+                    0x05 4-byte unsigned integer
+                    0x06 8-byte signed integer
+                    0x07 8-byte unsigned integer
+
+            <mode> is the pointer mode:
+                0x00 Direct; not a pointer
+                0x01 Near pointer
+                0x02 Far pointer
+                0x03 Huge pointer
+                0x04 32-bit near pointer
+                0x05 32-bit far pointer
+                0x06 64-bit near pointer
+                0x07 Reserved
+*/
+
+/* basic types */
+#define T_NOTYPE            0x0000  /* Notype */
+#define T_ABS               0x0001  /* Abs */
+#define T_SEGMENT           0x0002  /* segment type */
+#define T_VOID              0x0003  /* Void */
+#define T_CURRENCY          0x0004  /* basic 8-byte currency value */
+#define T_NBASICSTR         0x0005  /* near basic string */
+#define T_FBASICSTR         0x0006  /* far basic string */
+#define T_NOTTRANS          0x0007  /* untranslated type record from MS symbol format */
+#define T_HRESULT           0x0008  /* HRESULT - or error code ??? */
+#define T_CHAR              0x0010  /* signed char */
+#define T_SHORT             0x0011  /* short */
+#define T_LONG              0x0012  /* long */
+#define T_QUAD              0x0013  /* long long */
+#define T_UCHAR             0x0020  /* unsigned  char */
+#define T_USHORT            0x0021  /* unsigned short */
+#define T_ULONG             0x0022  /* unsigned long */
+#define T_UQUAD             0x0023  /* unsigned long long */
+#define T_BOOL08            0x0030  /* 8-bit boolean */
+#define T_BOOL16            0x0031  /* 16-bit boolean */
+#define T_BOOL32            0x0032  /* 32-bit boolean */
+#define T_BOOL64            0x0033  /* 64-bit boolean */
+#define T_REAL32            0x0040  /* float */
+#define T_REAL64            0x0041  /* double */
+#define T_REAL80            0x0042  /* 80-bit real */
+#define T_REAL128           0x0043  /* 128-bit real */
+#define T_REAL48            0x0044  /* 48-bit real */
+#define T_CPLX32            0x0050  /* 32-bit complex number */
+#define T_CPLX64            0x0051  /* 64-bit complex number */
+#define T_CPLX80            0x0052  /* 80-bit complex number */
+#define T_CPLX128           0x0053  /* 128-bit complex number */
+#define T_BIT               0x0060  /* bit */
+#define T_PASCHAR           0x0061  /* pascal CHAR */
+#define T_RCHAR             0x0070  /* real char */
+#define T_WCHAR             0x0071  /* wide char */
+#define T_INT2              0x0072  /* real 16-bit signed int */
+#define T_UINT2             0x0073  /* real 16-bit unsigned int */
+#define T_INT4              0x0074  /* int */
+#define T_UINT4             0x0075  /* unsigned int */
+#define T_INT8              0x0076  /* 64-bit signed int */
+#define T_UINT8             0x0077  /* 64-bit unsigned int */
+
+
+/* near pointers to basic types */
+#define T_PVOID             0x0103  /* near pointer to void */
+#define T_PCHAR             0x0110  /* Near pointer to 8-bit signed */
+#define T_PSHORT            0x0111  /* Near pointer to 16-bit signed */
+#define T_PLONG             0x0112  /* Near pointer to 32-bit signed */
+#define T_PQUAD             0x0113  /* Near pointer to 64-bit signed */
+#define T_PUCHAR            0x0120  /* Near pointer to 8-bit unsigned */
+#define T_PUSHORT           0x0121  /* Near pointer to 16-bit unsigned */
+#define T_PULONG            0x0122  /* Near pointer to 32-bit unsigned */
+#define T_PUQUAD            0x0123  /* Near pointer to 64-bit unsigned */
+#define T_PBOOL08           0x0130  /* Near pointer to 8-bit Boolean */
+#define T_PBOOL16           0x0131  /* Near pointer to 16-bit Boolean */
+#define T_PBOOL32           0x0132  /* Near pointer to 32-bit Boolean */
+#define T_PBOOL64           0x0133  /* Near pointer to 64-bit Boolean */
+#define T_PREAL32           0x0140  /* Near pointer to 32-bit real */
+#define T_PREAL64           0x0141  /* Near pointer to 64-bit real */
+#define T_PREAL80           0x0142  /* Near pointer to 80-bit real */
+#define T_PREAL128          0x0143  /* Near pointer to 128-bit real */
+#define T_PREAL48           0x0144  /* Near pointer to 48-bit real */
+#define T_PCPLX32           0x0150  /* Near pointer to 32-bit complex */
+#define T_PCPLX64           0x0151  /* Near pointer to 64-bit complex */
+#define T_PCPLX80           0x0152  /* Near pointer to 80-bit complex */
+#define T_PCPLX128          0x0153  /* Near pointer to 128-bit complex */
+#define T_PRCHAR            0x0170  /* Near pointer to a real char */
+#define T_PWCHAR            0x0171  /* Near pointer to a wide char */
+#define T_PINT2             0x0172  /* Near pointer to 16-bit signed int */
+#define T_PUINT2            0x0173  /* Near pointer to 16-bit unsigned int */
+#define T_PINT4             0x0174  /* Near pointer to 32-bit signed int */
+#define T_PUINT4            0x0175  /* Near pointer to 32-bit unsigned int */
+#define T_PINT8             0x0176  /* Near pointer to 64-bit signed int */
+#define T_PUINT8            0x0177  /* Near pointer to 64-bit unsigned int */
+
+
+/* far pointers to basic types */
+#define T_PFVOID            0x0203  /* Far pointer to void */
+#define T_PFCHAR            0x0210  /* Far pointer to 8-bit signed */
+#define T_PFSHORT           0x0211  /* Far pointer to 16-bit signed */
+#define T_PFLONG            0x0212  /* Far pointer to 32-bit signed */
+#define T_PFQUAD            0x0213  /* Far pointer to 64-bit signed */
+#define T_PFUCHAR           0x0220  /* Far pointer to 8-bit unsigned */
+#define T_PFUSHORT          0x0221  /* Far pointer to 16-bit unsigned */
+#define T_PFULONG           0x0222  /* Far pointer to 32-bit unsigned */
+#define T_PFUQUAD           0x0223  /* Far pointer to 64-bit unsigned */
+#define T_PFBOOL08          0x0230  /* Far pointer to 8-bit Boolean */
+#define T_PFBOOL16          0x0231  /* Far pointer to 16-bit Boolean */
+#define T_PFBOOL32          0x0232  /* Far pointer to 32-bit Boolean */
+#define T_PFBOOL64          0x0233  /* Far pointer to 64-bit Boolean */
+#define T_PFREAL32          0x0240  /* Far pointer to 32-bit real */
+#define T_PFREAL64          0x0241  /* Far pointer to 64-bit real */
+#define T_PFREAL80          0x0242  /* Far pointer to 80-bit real */
+#define T_PFREAL128         0x0243  /* Far pointer to 128-bit real */
+#define T_PFREAL48          0x0244  /* Far pointer to 48-bit real */
+#define T_PFCPLX32          0x0250  /* Far pointer to 32-bit complex */
+#define T_PFCPLX64          0x0251  /* Far pointer to 64-bit complex */
+#define T_PFCPLX80          0x0252  /* Far pointer to 80-bit complex */
+#define T_PFCPLX128         0x0253  /* Far pointer to 128-bit complex */
+#define T_PFRCHAR           0x0270  /* Far pointer to a real char */
+#define T_PFWCHAR           0x0271  /* Far pointer to a wide char */
+#define T_PFINT2            0x0272  /* Far pointer to 16-bit signed int */
+#define T_PFUINT2           0x0273  /* Far pointer to 16-bit unsigned int */
+#define T_PFINT4            0x0274  /* Far pointer to 32-bit signed int */
+#define T_PFUINT4           0x0275  /* Far pointer to 32-bit unsigned int */
+#define T_PFINT8            0x0276  /* Far pointer to 64-bit signed int */
+#define T_PFUINT8           0x0277  /* Far pointer to 64-bit unsigned int */
+
+
+/* huge pointers to basic types */
+#define T_PHVOID            0x0303  /* Huge pointer to void */
+#define T_PHCHAR            0x0310  /* Huge pointer to 8-bit signed */
+#define T_PHSHORT           0x0311  /* Huge pointer to 16-bit signed */
+#define T_PHLONG            0x0312  /* Huge pointer to 32-bit signed */
+#define T_PHQUAD            0x0313  /* Huge pointer to 64-bit signed */
+#define T_PHUCHAR           0x0320  /* Huge pointer to 8-bit unsigned */
+#define T_PHUSHORT          0x0321  /* Huge pointer to 16-bit unsigned */
+#define T_PHULONG           0x0322  /* Huge pointer to 32-bit unsigned */
+#define T_PHUQUAD           0x0323  /* Huge pointer to 64-bit unsigned */
+#define T_PHBOOL08          0x0330  /* Huge pointer to 8-bit Boolean */
+#define T_PHBOOL16          0x0331  /* Huge pointer to 16-bit Boolean */
+#define T_PHBOOL32          0x0332  /* Huge pointer to 32-bit Boolean */
+#define T_PHBOOL64          0x0333  /* Huge pointer to 64-bit Boolean */
+#define T_PHREAL32          0x0340  /* Huge pointer to 32-bit real */
+#define T_PHREAL64          0x0341  /* Huge pointer to 64-bit real */
+#define T_PHREAL80          0x0342  /* Huge pointer to 80-bit real */
+#define T_PHREAL128         0x0343  /* Huge pointer to 128-bit real */
+#define T_PHREAL48          0x0344  /* Huge pointer to 48-bit real */
+#define T_PHCPLX32          0x0350  /* Huge pointer to 32-bit complex */
+#define T_PHCPLX64          0x0351  /* Huge pointer to 64-bit complex */
+#define T_PHCPLX80          0x0352  /* Huge pointer to 80-bit complex */
+#define T_PHCPLX128         0x0353  /* Huge pointer to 128-bit real */
+#define T_PHRCHAR           0x0370  /* Huge pointer to a real char */
+#define T_PHWCHAR           0x0371  /* Huge pointer to a wide char */
+#define T_PHINT2            0x0372  /* Huge pointer to 16-bit signed int */
+#define T_PHUINT2           0x0373  /* Huge pointer to 16-bit unsigned int */
+#define T_PHINT4            0x0374  /* Huge pointer to 32-bit signed int */
+#define T_PHUINT4           0x0375  /* Huge pointer to 32-bit unsigned int */
+#define T_PHINT8            0x0376  /* Huge pointer to 64-bit signed int */
+#define T_PHUINT8           0x0377  /* Huge pointer to 64-bit unsigned int */
+
+
+/* 32-bit near pointers to basic types */
+#define T_32PVOID           0x0403  /* 32-bit near pointer to void */
+#define T_32PHRESULT        0x0408  /* 16:32 near pointer to HRESULT - or error code ??? */
+#define T_32PCHAR           0x0410  /* 16:32 near pointer to 8-bit signed */
+#define T_32PSHORT          0x0411  /* 16:32 near pointer to 16-bit signed */
+#define T_32PLONG           0x0412  /* 16:32 near pointer to 32-bit signed */
+#define T_32PQUAD           0x0413  /* 16:32 near pointer to 64-bit signed */
+#define T_32PUCHAR          0x0420  /* 16:32 near pointer to 8-bit unsigned */
+#define T_32PUSHORT         0x0421  /* 16:32 near pointer to 16-bit unsigned */
+#define T_32PULONG          0x0422  /* 16:32 near pointer to 32-bit unsigned */
+#define T_32PUQUAD          0x0423  /* 16:32 near pointer to 64-bit unsigned */
+#define T_32PBOOL08         0x0430  /* 16:32 near pointer to 8-bit Boolean */
+#define T_32PBOOL16         0x0431  /* 16:32 near pointer to 16-bit Boolean */
+#define T_32PBOOL32         0x0432  /* 16:32 near pointer to 32-bit Boolean */
+#define T_32PBOOL64         0x0433  /* 16:32 near pointer to 64-bit Boolean */
+#define T_32PREAL32         0x0440  /* 16:32 near pointer to 32-bit real */
+#define T_32PREAL64         0x0441  /* 16:32 near pointer to 64-bit real */
+#define T_32PREAL80         0x0442  /* 16:32 near pointer to 80-bit real */
+#define T_32PREAL128        0x0443  /* 16:32 near pointer to 128-bit real */
+#define T_32PREAL48         0x0444  /* 16:32 near pointer to 48-bit real */
+#define T_32PCPLX32         0x0450  /* 16:32 near pointer to 32-bit complex */
+#define T_32PCPLX64         0x0451  /* 16:32 near pointer to 64-bit complex */
+#define T_32PCPLX80         0x0452  /* 16:32 near pointer to 80-bit complex */
+#define T_32PCPLX128        0x0453  /* 16:32 near pointer to 128-bit complex */
+#define T_32PRCHAR          0x0470  /* 16:32 near pointer to a real char */
+#define T_32PWCHAR          0x0471  /* 16:32 near pointer to a wide char */
+#define T_32PINT2           0x0472  /* 16:32 near pointer to 16-bit signed int */
+#define T_32PUINT2          0x0473  /* 16:32 near pointer to 16-bit unsigned int */
+#define T_32PINT4           0x0474  /* 16:32 near pointer to 32-bit signed int */
+#define T_32PUINT4          0x0475  /* 16:32 near pointer to 32-bit unsigned int */
+#define T_32PINT8           0x0476  /* 16:32 near pointer to 64-bit signed int */
+#define T_32PUINT8          0x0477  /* 16:32 near pointer to 64-bit unsigned int */
+
+
+/* 32-bit far pointers to basic types */
+#define T_32PFVOID          0x0503  /* 32-bit far pointer to void */
+#define T_32PFHRESULT       0x0508  /* 16:32 far pointer to HRESULT - or error code ??? */
+#define T_32PFCHAR          0x0510  /* 16:32 far pointer to 8-bit signed */
+#define T_32PFSHORT         0x0511  /* 16:32 far pointer to 16-bit signed */
+#define T_32PFLONG          0x0512  /* 16:32 far pointer to 32-bit signed */
+#define T_32PFQUAD          0x0513  /* 16:32 far pointer to 64-bit signed */
+#define T_32PFUCHAR         0x0520  /* 16:32 far pointer to 8-bit unsigned */
+#define T_32PFUSHORT        0x0521  /* 16:32 far pointer to 16-bit unsigned */
+#define T_32PFULONG         0x0522  /* 16:32 far pointer to 32-bit unsigned */
+#define T_32PFUQUAD         0x0523  /* 16:32 far pointer to 64-bit unsigned */
+#define T_32PFBOOL08        0x0530  /* 16:32 far pointer to 8-bit Boolean */
+#define T_32PFBOOL16        0x0531  /* 16:32 far pointer to 16-bit Boolean */
+#define T_32PFBOOL32        0x0532  /* 16:32 far pointer to 32-bit Boolean */
+#define T_32PFBOOL64        0x0533  /* 16:32 far pointer to 64-bit Boolean */
+#define T_32PFREAL32        0x0540  /* 16:32 far pointer to 32-bit real */
+#define T_32PFREAL64        0x0541  /* 16:32 far pointer to 64-bit real */
+#define T_32PFREAL80        0x0542  /* 16:32 far pointer to 80-bit real */
+#define T_32PFREAL128       0x0543  /* 16:32 far pointer to 128-bit real */
+#define T_32PFREAL48        0x0544  /* 16:32 far pointer to 48-bit real */
+#define T_32PFCPLX32        0x0550  /* 16:32 far pointer to 32-bit complex */
+#define T_32PFCPLX64        0x0551  /* 16:32 far pointer to 64-bit complex */
+#define T_32PFCPLX80        0x0552  /* 16:32 far pointer to 80-bit complex */
+#define T_32PFCPLX128       0x0553  /* 16:32 far pointer to 128-bit complex */
+#define T_32PFRCHAR         0x0570  /* 16:32 far pointer to a real char */
+#define T_32PFWCHAR         0x0571  /* 16:32 far pointer to a wide char */
+#define T_32PFINT2          0x0572  /* 16:32 far pointer to 16-bit signed int */
+#define T_32PFUINT2         0x0573  /* 16:32 far pointer to 16-bit unsigned int */
+#define T_32PFINT4          0x0574  /* 16:32 far pointer to 32-bit signed int */
+#define T_32PFUINT4         0x0575  /* 16:32 far pointer to 32-bit unsigned int */
+#define T_32PFINT8          0x0576  /* 16:32 far pointer to 64-bit signed int */
+#define T_32PFUINT8         0x0577  /* 16:32 far pointer to 64-bit unsigned int */
+
+/* 64-bit near pointers to basic types */
+#define T_64PVOID           0x0603  /* 64-bit near pointer to void */
+#define T_64PHRESULT        0x0608  /* 64 near pointer to HRESULT - or error code ??? */
+#define T_64PCHAR           0x0610  /* 64 near pointer to 8-bit signed */
+#define T_64PSHORT          0x0611  /* 64 near pointer to 16-bit signed */
+#define T_64PLONG           0x0612  /* 64 near pointer to 32-bit signed */
+#define T_64PQUAD           0x0613  /* 64 near pointer to 64-bit signed */
+#define T_64PUCHAR          0x0620  /* 64 near pointer to 8-bit unsigned */
+#define T_64PUSHORT         0x0621  /* 64 near pointer to 16-bit unsigned */
+#define T_64PULONG          0x0622  /* 64 near pointer to 32-bit unsigned */
+#define T_64PUQUAD          0x0623  /* 64 near pointer to 64-bit unsigned */
+#define T_64PBOOL08         0x0630  /* 64 near pointer to 8-bit Boolean */
+#define T_64PBOOL16         0x0631  /* 64 near pointer to 16-bit Boolean */
+#define T_64PBOOL32         0x0632  /* 64 near pointer to 32-bit Boolean */
+#define T_64PBOOL64         0x0633  /* 64 near pointer to 64-bit Boolean */
+#define T_64PREAL32         0x0640  /* 64 near pointer to 32-bit real */
+#define T_64PREAL64         0x0641  /* 64 near pointer to 64-bit real */
+#define T_64PREAL80         0x0642  /* 64 near pointer to 80-bit real */
+#define T_64PREAL128        0x0643  /* 64 near pointer to 128-bit real */
+#define T_64PREAL48         0x0644  /* 64 near pointer to 48-bit real */
+#define T_64PCPLX32         0x0650  /* 64 near pointer to 32-bit complex */
+#define T_64PCPLX64         0x0651  /* 64 near pointer to 64-bit complex */
+#define T_64PCPLX80         0x0652  /* 64 near pointer to 80-bit complex */
+#define T_64PCPLX128        0x0653  /* 64 near pointer to 128-bit complex */
+#define T_64PRCHAR          0x0670  /* 64 near pointer to a real char */
+#define T_64PWCHAR          0x0671  /* 64 near pointer to a wide char */
+#define T_64PINT2           0x0672  /* 64 near pointer to 16-bit signed int */
+#define T_64PUINT2          0x0673  /* 64 near pointer to 16-bit unsigned int */
+#define T_64PINT4           0x0674  /* 64 near pointer to 32-bit signed int */
+#define T_64PUINT4          0x0675  /* 64 near pointer to 32-bit unsigned int */
+#define T_64PINT8           0x0676  /* 64 near pointer to 64-bit signed int */
+#define T_64PUINT8          0x0677  /* 64 near pointer to 64-bit unsigned int */
+
+/* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */
+#define T_MAXPREDEFINEDTYPE 0x0580  /* maximum type index for all built-in types */
+#define T_MAXBASICTYPE      0x0080  /* maximum type index all non-pointer built-in types */
+#define T_BASICTYPE_MASK    0x00ff  /* mask of bits that can potentially identify a non-pointer basic type */
+#define T_BASICTYPE_SHIFT   8       /* shift count to push out the basic type bits from a type number */
+#define T_MODE_MASK         0x0700  /* type mode mask (ptr/non-ptr) */
+#define T_SIZE_MASK         0x0007  /* type size mask (depends on 'type' value) */
+#define T_TYPE_MASK         0x00f0  /* type type mask (data treatment mode) */
+
+/* bit patterns for the <mode> portion of a built-in type number */
+#define T_NEARPTR_BITS      0x0100
+#define T_FARPTR_BITS       0x0200
+#define T_HUGEPTR_BITS      0x0300
+#define T_NEAR32PTR_BITS    0x0400
+#define T_FAR32PTR_BITS     0x0500
+#define T_NEAR64PTR_BITS    0x0600
+
+#define LF_MODIFIER_V1          0x0001
+#define LF_POINTER_V1           0x0002
+#define LF_ARRAY_V1             0x0003
+#define LF_CLASS_V1             0x0004
+#define LF_STRUCTURE_V1         0x0005
+#define LF_UNION_V1             0x0006
+#define LF_ENUM_V1              0x0007
+#define LF_PROCEDURE_V1         0x0008
+#define LF_MFUNCTION_V1         0x0009
+#define LF_VTSHAPE_V1           0x000a
+#define LF_COBOL0_V1            0x000b
+#define LF_COBOL1_V1            0x000c
+#define LF_BARRAY_V1            0x000d
+#define LF_LABEL_V1             0x000e
+#define LF_NULL_V1              0x000f
+#define LF_NOTTRAN_V1           0x0010
+#define LF_DIMARRAY_V1          0x0011
+#define LF_VFTPATH_V1           0x0012
+#define LF_PRECOMP_V1           0x0013
+#define LF_ENDPRECOMP_V1        0x0014
+#define LF_OEM_V1               0x0015
+#define LF_TYPESERVER_V1        0x0016
+
+#define LF_MODIFIER_V2          0x1001     /* variants with new 32-bit type indices (V2) */
+#define LF_POINTER_V2           0x1002
+#define LF_ARRAY_V2             0x1003
+#define LF_CLASS_V2             0x1004
+#define LF_STRUCTURE_V2         0x1005
+#define LF_UNION_V2             0x1006
+#define LF_ENUM_V2              0x1007
+#define LF_PROCEDURE_V2         0x1008
+#define LF_MFUNCTION_V2         0x1009
+#define LF_COBOL0_V2            0x100a
+#define LF_BARRAY_V2            0x100b
+#define LF_DIMARRAY_V2          0x100c
+#define LF_VFTPATH_V2           0x100d
+#define LF_PRECOMP_V2           0x100e
+#define LF_OEM_V2               0x100f
+
+#define LF_SKIP_V1              0x0200
+#define LF_ARGLIST_V1           0x0201
+#define LF_DEFARG_V1            0x0202
+#define LF_LIST_V1              0x0203
+#define LF_FIELDLIST_V1         0x0204
+#define LF_DERIVED_V1           0x0205
+#define LF_BITFIELD_V1          0x0206
+#define LF_METHODLIST_V1        0x0207
+#define LF_DIMCONU_V1           0x0208
+#define LF_DIMCONLU_V1          0x0209
+#define LF_DIMVARU_V1           0x020a
+#define LF_DIMVARLU_V1          0x020b
+#define LF_REFSYM_V1            0x020c
+
+#define LF_SKIP_V2              0x1200    /* variants with new 32-bit type indices (V2) */
+#define LF_ARGLIST_V2           0x1201
+#define LF_DEFARG_V2            0x1202
+#define LF_FIELDLIST_V2         0x1203
+#define LF_DERIVED_V2           0x1204
+#define LF_BITFIELD_V2          0x1205
+#define LF_METHODLIST_V2        0x1206
+#define LF_DIMCONU_V2           0x1207
+#define LF_DIMCONLU_V2          0x1208
+#define LF_DIMVARU_V2           0x1209
+#define LF_DIMVARLU_V2          0x120a
+
+/* Field lists */
+#define LF_BCLASS_V1            0x0400
+#define LF_VBCLASS_V1           0x0401
+#define LF_IVBCLASS_V1          0x0402
+#define LF_ENUMERATE_V1         0x0403
+#define LF_FRIENDFCN_V1         0x0404
+#define LF_INDEX_V1             0x0405
+#define LF_MEMBER_V1            0x0406
+#define LF_STMEMBER_V1          0x0407
+#define LF_METHOD_V1            0x0408
+#define LF_NESTTYPE_V1          0x0409
+#define LF_VFUNCTAB_V1          0x040a
+#define LF_FRIENDCLS_V1         0x040b
+#define LF_ONEMETHOD_V1         0x040c
+#define LF_VFUNCOFF_V1          0x040d
+#define LF_NESTTYPEEX_V1        0x040e
+#define LF_MEMBERMODIFY_V1      0x040f
+
+#define LF_BCLASS_V2            0x1400    /* variants with new 32-bit type indices (V2) */
+#define LF_VBCLASS_V2           0x1401
+#define LF_IVBCLASS_V2          0x1402
+#define LF_FRIENDFCN_V2         0x1403
+#define LF_INDEX_V2             0x1404
+#define LF_MEMBER_V2            0x1405
+#define LF_STMEMBER_V2          0x1406
+#define LF_METHOD_V2            0x1407
+#define LF_NESTTYPE_V2          0x1408
+#define LF_VFUNCTAB_V2          0x1409
+#define LF_FRIENDCLS_V2         0x140a
+#define LF_ONEMETHOD_V2         0x140b
+#define LF_VFUNCOFF_V2          0x140c
+#define LF_NESTTYPEEX_V2        0x140d
+
+#define LF_ENUMERATE_V3         0x1502
+#define LF_ARRAY_V3             0x1503
+#define LF_CLASS_V3             0x1504
+#define LF_STRUCTURE_V3         0x1505
+#define LF_UNION_V3             0x1506
+#define LF_ENUM_V3              0x1507
+#define LF_MEMBER_V3            0x150d
+#define LF_STMEMBER_V3          0x150e
+#define LF_METHOD_V3            0x150f
+#define LF_NESTTYPE_V3          0x1510
+#define LF_ONEMETHOD_V3         0x1511
+
+#define LF_NUMERIC              0x8000    /* numeric leaf types */
+#define LF_CHAR                 0x8000
+#define LF_SHORT                0x8001
+#define LF_USHORT               0x8002
+#define LF_LONG                 0x8003
+#define LF_ULONG                0x8004
+#define LF_REAL32               0x8005
+#define LF_REAL64               0x8006
+#define LF_REAL80               0x8007
+#define LF_REAL128              0x8008
+#define LF_QUADWORD             0x8009
+#define LF_UQUADWORD            0x800a
+#define LF_REAL48               0x800b
+#define LF_COMPLEX32            0x800c
+#define LF_COMPLEX64            0x800d
+#define LF_COMPLEX80            0x800e
+#define LF_COMPLEX128           0x800f
+#define LF_VARSTRING            0x8010
+
+/* ======================================== *
+ *            Symbol information
+ * ======================================== */
+
+union codeview_symbol
+{
+    struct
+    {
+        short int	        len;
+        short int	        id;
+    } generic;
+
+    struct
+    {
+	short int	        len;
+	short int	        id;
+	unsigned int	        offset;
+	unsigned short	        segment;
+	unsigned short	        symtype;
+        struct p_string         p_name;
+    } data_v1;
+
+    struct
+    {
+	short int	        len;
+	short int	        id;
+	unsigned int	        symtype;
+	unsigned int	        offset;
+	unsigned short	        segment;
+        struct p_string         p_name;
+    } data_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        char                    name[1];
+    } data_v3;
+
+    struct
+    {
+	short int	        len;
+	short int	        id;
+	unsigned int	        pparent;
+	unsigned int	        pend;
+	unsigned int	        next;
+	unsigned int	        offset;
+	unsigned short	        segment;
+	unsigned short	        thunk_len;
+	unsigned char	        thtype;
+        struct p_string         p_name;
+    } thunk_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            pparent;
+        unsigned int            pend;
+        unsigned int            next;
+        unsigned int            offset;
+        unsigned short          segment;
+        unsigned short          thunk_len;
+        unsigned char           thtype;
+        char                    name[1];
+    } thunk_v3;
+
+    struct
+    {
+	short int	        len;
+	short int	        id;
+	unsigned int	        pparent;
+	unsigned int	        pend;
+	unsigned int	        next;
+	unsigned int	        proc_len;
+	unsigned int	        debug_start;
+	unsigned int	        debug_end;
+	unsigned int	        offset;
+	unsigned short	        segment;
+	unsigned short	        proctype;
+	unsigned char	        flags;
+        struct p_string         p_name;
+    } proc_v1;
+
+    struct
+    {
+	short int	        len;
+	short int	        id;
+	unsigned int	        pparent;
+	unsigned int	        pend;
+	unsigned int	        next;
+	unsigned int	        proc_len;
+	unsigned int	        debug_start;
+	unsigned int	        debug_end;
+	unsigned int	        proctype;
+	unsigned int	        offset;
+	unsigned short	        segment;
+	unsigned char	        flags;
+        struct p_string         p_name;
+    } proc_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            pparent;
+        unsigned int            pend;
+        unsigned int            next;
+        unsigned int            proc_len;
+        unsigned int            debug_start;
+        unsigned int            debug_end;
+        unsigned int            proctype;
+        unsigned int            offset;
+        unsigned short          segment;
+        unsigned char           flags;
+        char                    name[1];
+    } proc_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        struct p_string         p_name;
+    } public_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        char                    name[1];
+    } public_v3;
+
+    struct
+    {
+	short int	        len;	        /* Total length of this entry */
+	short int	        id;		/* Always S_BPREL_V1 */
+	unsigned int	        offset;	        /* Stack offset relative to BP */
+	unsigned short	        symtype;
+        struct p_string         p_name;
+    } stack_v1;
+
+    struct
+    {
+	short int	        len;	        /* Total length of this entry */
+	short int	        id;		/* Always S_BPREL_V2 */
+	unsigned int	        offset;	        /* Stack offset relative to EBP */
+	unsigned int	        symtype;
+        struct p_string         p_name;
+    } stack_v2;
+
+    struct
+    {
+        short int               len;            /* Total length of this entry */
+        short int               id;             /* Always S_BPREL_V3 */
+        int                     offset;         /* Stack offset relative to BP */
+        unsigned int            symtype;
+        char                    name[1];
+    } stack_v3;
+
+    struct
+    {
+        short int               len;            /* Total length of this entry */
+        short int               id;             /* Always S_BPREL_V3 */
+        int                     offset;         /* Stack offset relative to BP */
+        unsigned int            symtype;
+        unsigned short          reg;
+        char                    name[1];
+    } regrel_v3;
+
+    struct
+    {
+	short int	        len;	        /* Total length of this entry */
+	short int	        id;		/* Always S_REGISTER */
+        unsigned short          type;
+        unsigned short          reg;
+        struct p_string         p_name;
+        /* don't handle register tracking */
+    } register_v1;
+
+    struct
+    {
+	short int	        len;	        /* Total length of this entry */
+	short int	        id;		/* Always S_REGISTER_V2 */
+        unsigned int            type;           /* check whether type & reg are correct */
+        unsigned short          reg;
+        struct p_string         p_name;
+        /* don't handle register tracking */
+    } register_v2;
+
+    struct
+    {
+	short int	        len;	        /* Total length of this entry */
+	short int	        id;		/* Always S_REGISTER_V3 */
+        unsigned int            type;           /* check whether type & reg are correct */
+        unsigned short          reg;
+        char                    name[1];
+        /* don't handle register tracking */
+    } register_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            parent;
+        unsigned int            end;
+        unsigned int            length;
+        unsigned int            offset;
+        unsigned short          segment;
+        struct p_string         p_name;
+    } block_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            parent;
+        unsigned int            end;
+        unsigned int            length;
+        unsigned int            offset;
+        unsigned short          segment;
+        char                    name[1];
+    } block_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            offset;
+        unsigned short          segment;
+        unsigned char           flags;
+        struct p_string         p_name;
+    } label_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            offset;
+        unsigned short          segment;
+        unsigned char           flags;
+        char                    name[1];
+    } label_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned short          type;
+        unsigned short          cvalue;         /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } constant_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned                type;
+        unsigned short          cvalue;         /* numeric leaf */
+#if 0
+        struct p_string         p_name;
+#endif
+    } constant_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned                type;
+        unsigned short          cvalue;
+#if 0
+        char                    name[1];
+#endif
+    } constant_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned short          type;
+        struct p_string         p_name;
+    } udt_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned                type;
+        struct p_string         p_name;
+    } udt_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            type;
+        char                    name[1];
+    } udt_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        char                    signature[4];
+        struct p_string         p_name;
+    } objname_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            unknown;
+        struct p_string         p_name;
+    } compiland_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned                unknown1[4];
+        unsigned short          unknown2;
+        struct p_string         p_name;
+    } compiland_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            unknown;
+        char                    name[1];
+    } compiland_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            offset;
+        unsigned short          segment;
+        unsigned short          symtype;
+        struct p_string         p_name;
+    } thread_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        struct p_string         p_name;
+    } thread_v2;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            symtype;
+        unsigned int            offset;
+        unsigned short          segment;
+        char                    name[1];
+    } thread_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            offset;
+        unsigned short          segment;
+    } ssearch_v1;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            offset;
+        unsigned int            unknown;
+    } security_cookie_v3;
+
+    struct
+    {
+        short int               len;
+        short int               id;
+        unsigned int            sz_frame;       /* size of frame */
+        unsigned int            unknown2;
+        unsigned int            unknown3;
+        unsigned int            sz_saved_regs;  /* size of saved registers from callee */
+        unsigned int            eh_offset;      /* offset for exception handler */
+        unsigned short          eh_sect;        /* section for exception handler */
+        unsigned int            flags;
+    } frame_info_v2;
+};
+
+#define S_COMPILAND_V1  0x0001
+#define S_REGISTER_V1   0x0002
+#define S_CONSTANT_V1   0x0003
+#define S_UDT_V1        0x0004
+#define S_SSEARCH_V1    0x0005
+#define S_END_V1        0x0006
+#define S_SKIP_V1       0x0007
+#define S_CVRESERVE_V1  0x0008
+#define S_OBJNAME_V1    0x0009
+#define S_ENDARG_V1     0x000a
+#define S_COBOLUDT_V1   0x000b
+#define S_MANYREG_V1    0x000c
+#define S_RETURN_V1     0x000d
+#define S_ENTRYTHIS_V1  0x000e
+
+#define S_BPREL_V1      0x0200
+#define S_LDATA_V1      0x0201
+#define S_GDATA_V1      0x0202
+#define S_PUB_V1        0x0203
+#define S_LPROC_V1      0x0204
+#define S_GPROC_V1      0x0205
+#define S_THUNK_V1      0x0206
+#define S_BLOCK_V1      0x0207
+#define S_WITH_V1       0x0208
+#define S_LABEL_V1      0x0209
+#define S_CEXMODEL_V1   0x020a
+#define S_VFTPATH_V1    0x020b
+#define S_REGREL_V1     0x020c
+#define S_LTHREAD_V1    0x020d
+#define S_GTHREAD_V1    0x020e
+
+#define S_PROCREF_V1    0x0400
+#define S_DATAREF_V1    0x0401
+#define S_ALIGN_V1      0x0402
+#define S_LPROCREF_V1   0x0403
+
+#define S_REGISTER_V2   0x1001 /* Variants with new 32-bit type indices */
+#define S_CONSTANT_V2   0x1002
+#define S_UDT_V2        0x1003
+#define S_COBOLUDT_V2   0x1004
+#define S_MANYREG_V2    0x1005
+#define S_BPREL_V2      0x1006
+#define S_LDATA_V2      0x1007
+#define S_GDATA_V2      0x1008
+#define S_PUB_V2        0x1009
+#define S_LPROC_V2      0x100a
+#define S_GPROC_V2      0x100b
+#define S_VFTTABLE_V2   0x100c
+#define S_REGREL_V2     0x100d
+#define S_LTHREAD_V2    0x100e
+#define S_GTHREAD_V2    0x100f
+#define S_FRAMEINFO_V2  0x1012
+#define S_COMPILAND_V2  0x1013
+
+#define S_COMPILAND_V3  0x1101
+#define S_THUNK_V3      0x1102
+#define S_BLOCK_V3      0x1103
+#define S_LABEL_V3      0x1105
+#define S_REGISTER_V3   0x1106
+#define S_CONSTANT_V3   0x1107
+#define S_UDT_V3        0x1108
+#define S_BPREL_V3      0x110B
+#define S_LDATA_V3      0x110C
+#define S_GDATA_V3      0x110D
+#define S_PUB_V3        0x110E
+#define S_LPROC_V3      0x110F
+#define S_GPROC_V3      0x1110
+#define S_REGREL_V3     0x1111
+#define S_LTHREAD_V3    0x1112
+#define S_GTHREAD_V3    0x1113
+#define S_MSTOOL_V3     0x1116  /* compiler command line options and build information */
+#define S_PUB_FUNC1_V3  0x1125  /* didn't get the difference between the two */
+#define S_PUB_FUNC2_V3  0x1127
+#define S_SECTINFO_V3   0x1136
+#define S_SUBSECTINFO_V3 0x1137
+#define S_ENTRYPOINT_V3 0x1138
+#define S_SECUCOOKIE_V3 0x113A
+#define S_MSTOOLINFO_V3 0x113C
+#define S_MSTOOLENV_V3  0x113D
+
+/* ======================================== *
+ *          Line number information
+ * ======================================== */
+
+struct codeview_linetab_block
+{
+    unsigned short              seg;
+    unsigned short              num_lines;
+    unsigned int                offsets[1];     /* in fact num_lines */
+/*  unsigned short              linenos[]; */
+};
+
+struct startend
+{
+    unsigned int	        start;
+    unsigned int	        end;
+};
+
+#define LT2_LINES_BLOCK 0x000000f2
+#define LT2_FILES_BLOCK 0x000000f4
+
+/* there's a new line tab structure from MS Studio 2005 and after
+ * it's made of a list of codeview_linetab2 blocks.
+ * We've only seen (so far) list with a single LT2_FILES_BLOCK and several
+ * LT2_LINES_BLOCK. The LT2_FILES block has been encountered either as first
+ * or last block of the list.
+ * A LT2_FILES contains one or several codeview_linetab2_file:s
+ */
+
+struct codeview_linetab2
+{
+    DWORD       header;
+    DWORD       size_of_block;
+};
+
+static inline const struct codeview_linetab2* codeview_linetab2_next_block(const struct codeview_linetab2* lt2)
+{
+    return (const struct codeview_linetab2*)((const char*)(lt2 + 1) + lt2->size_of_block);
+}
+
+struct codeview_linetab2_file
+{
+    DWORD       offset;         /* offset in string table for filename */
+    WORD        unk;            /* always 0x0110... type of following information ??? */
+    BYTE        md5[16];        /* MD5 signature of file (signature on file's content or name ???) */
+    WORD        pad0;           /* always 0 */
+};
+
+struct codeview_lt2blk_files
+{
+    struct codeview_linetab2            lt2;    /* LT2_FILES */
+    struct codeview_linetab2_file       file[1];
+};
+
+struct codeview_lt2blk_lines
+{
+    struct codeview_linetab2    lt2;            /* LT2_LINE_BLOCK */
+    DWORD                       start;          /* start address of function with line numbers */
+    DWORD                       seg;            /* segment of function with line numbers */
+    DWORD                       size;           /* size of function with line numbers */
+    DWORD                       file_offset;    /* offset for accessing corresponding codeview_linetab2_file */
+    DWORD                       nlines;         /* number of lines in this block */
+    DWORD                       size_lines;     /* number of bytes following for line number information */
+    struct {
+        DWORD   offset;         /* offset (from <seg>:<start>) for line number */
+        DWORD   lineno;         /* the line number (OR:ed with 0x80000000 why ???) */
+    } l[1];                     /* actually array of <nlines> */
+};
+
+/* ======================================== *
+ *            PDB file information
+ * ======================================== */
+
+
+struct PDB_FILE
+{
+    DWORD               size;
+    DWORD               unknown;
+};
+
+struct PDB_JG_HEADER
+{
+    CHAR                ident[40];
+    DWORD               signature;
+    DWORD               block_size;
+    WORD                free_list;
+    WORD                total_alloc;
+    struct PDB_FILE     toc;
+    WORD                toc_block[1];
+};
+
+struct PDB_DS_HEADER
+{
+    char                signature[32];
+    DWORD               block_size;
+    DWORD               unknown1;
+    DWORD               num_pages;
+    DWORD               toc_size;
+    DWORD               unknown2;
+    DWORD               toc_page;
+};
+
+struct PDB_JG_TOC
+{
+    DWORD               num_files;
+    struct PDB_FILE     file[1];
+};
+
+struct PDB_DS_TOC
+{
+    DWORD               num_files;
+    DWORD               file_size[1];
+};
+
+struct PDB_JG_ROOT
+{
+    DWORD               Version;
+    DWORD               TimeDateStamp;
+    DWORD               Age;
+    DWORD               cbNames;
+    CHAR                names[1];
+};
+
+struct PDB_DS_ROOT
+{
+    DWORD               Version;
+    DWORD               TimeDateStamp;
+    DWORD               Age;
+    GUID                guid;
+    DWORD               cbNames;
+    CHAR                names[1];
+};
+
+typedef struct _PDB_TYPES_OLD
+{
+    DWORD       version;
+    WORD        first_index;
+    WORD        last_index;
+    DWORD       type_size;
+    WORD        file;
+    WORD        pad;
+} PDB_TYPES_OLD, *PPDB_TYPES_OLD;
+
+typedef struct _PDB_TYPES
+{
+    DWORD       version;
+    DWORD       type_offset;
+    DWORD       first_index;
+    DWORD       last_index;
+    DWORD       type_size;
+    WORD        file;
+    WORD        pad;
+    DWORD       hash_size;
+    DWORD       hash_base;
+    DWORD       hash_offset;
+    DWORD       hash_len;
+    DWORD       search_offset;
+    DWORD       search_len;
+    DWORD       unknown_offset;
+    DWORD       unknown_len;
+} PDB_TYPES, *PPDB_TYPES;
+
+typedef struct _PDB_SYMBOL_RANGE
+{
+    WORD        segment;
+    WORD        pad1;
+    DWORD       offset;
+    DWORD       size;
+    DWORD       characteristics;
+    WORD        index;
+    WORD        pad2;
+} PDB_SYMBOL_RANGE, *PPDB_SYMBOL_RANGE;
+
+typedef struct _PDB_SYMBOL_RANGE_EX
+{
+    WORD        segment;
+    WORD        pad1;
+    DWORD       offset;
+    DWORD       size;
+    DWORD       characteristics;
+    WORD        index;
+    WORD        pad2;
+    DWORD       timestamp;
+    DWORD       unknown;
+} PDB_SYMBOL_RANGE_EX, *PPDB_SYMBOL_RANGE_EX;
+
+typedef struct _PDB_SYMBOL_FILE
+{
+    DWORD       unknown1;
+    PDB_SYMBOL_RANGE range;
+    WORD        flag;
+    WORD        file;
+    DWORD       symbol_size;
+    DWORD       lineno_size;
+    DWORD       unknown2;
+    DWORD       nSrcFiles;
+    DWORD       attribute;
+    CHAR        filename[1];
+} PDB_SYMBOL_FILE, *PPDB_SYMBOL_FILE;
+
+typedef struct _PDB_SYMBOL_FILE_EX
+{
+    DWORD       unknown1;
+    PDB_SYMBOL_RANGE_EX range;
+    WORD        flag;
+    WORD        file;
+    DWORD       symbol_size;
+    DWORD       lineno_size;
+    DWORD       unknown2;
+    DWORD       nSrcFiles;
+    DWORD       attribute;
+    DWORD       reserved[2];
+    CHAR        filename[1];
+} PDB_SYMBOL_FILE_EX, *PPDB_SYMBOL_FILE_EX;
+
+typedef struct _PDB_SYMBOL_SOURCE
+{
+    WORD        nModules;
+    WORD        nSrcFiles;
+    WORD        table[1];
+} PDB_SYMBOL_SOURCE, *PPDB_SYMBOL_SOURCE;
+
+typedef struct _PDB_SYMBOL_IMPORT
+{
+    DWORD       unknown1;
+    DWORD       unknown2;
+    DWORD       TimeDateStamp;
+    DWORD       Age;
+    CHAR        filename[1];
+} PDB_SYMBOL_IMPORT, *PPDB_SYMBOL_IMPORT;
+
+typedef struct _PDB_SYMBOLS_OLD
+{
+    WORD        hash1_file;
+    WORD        hash2_file;
+    WORD        gsym_file;
+    WORD        pad;
+    DWORD       module_size;
+    DWORD       offset_size;
+    DWORD       hash_size;
+    DWORD       srcmodule_size;
+} PDB_SYMBOLS_OLD, *PPDB_SYMBOLS_OLD;
+
+typedef struct _PDB_SYMBOLS
+{
+    DWORD       signature;
+    DWORD       version;
+    DWORD       unknown;
+    DWORD       hash1_file;
+    DWORD       hash2_file;
+    WORD        gsym_file;
+    WORD        unknown1;
+    DWORD       module_size;
+    DWORD       offset_size;
+    DWORD       hash_size;
+    DWORD       srcmodule_size;
+    DWORD       pdbimport_size;
+    DWORD       resvd0;
+    DWORD       stream_index_size;
+    DWORD       unknown2_size;
+    WORD        resvd3;
+    WORD        machine;
+    DWORD       resvd4;
+} PDB_SYMBOLS, *PPDB_SYMBOLS;
+
+typedef struct
+{
+    WORD        FPO;
+    WORD        unk0;
+    WORD        unk1;
+    WORD        unk2;
+    WORD        unk3;
+    WORD        segments;
+} PDB_STREAM_INDEXES_OLD;
+
+typedef struct
+{
+    WORD        FPO;
+    WORD        unk0;
+    WORD        unk1;
+    WORD        unk2;
+    WORD        unk3;
+    WORD        segments;
+    WORD        unk4;
+    WORD        unk5;
+    WORD        unk6;
+    WORD        FPO_EXT;
+    WORD        unk7;
+} PDB_STREAM_INDEXES;
+
+typedef struct _PDB_FPO_DATA
+{
+    DWORD       start;
+    DWORD       func_size;
+    DWORD       locals_size;
+    DWORD       params_size;
+    DWORD       maxstack_size;
+    DWORD       str_offset;
+    WORD        prolog_size;
+    WORD        savedregs_size;
+#define PDB_FPO_DFL_SEH         0x00000001
+#define PDB_FPO_DFL_EH          0x00000002
+#define PDB_FPO_DFL_IN_BLOCK    0x00000004
+    DWORD       flags;
+} PDB_FPO_DATA;
+
+#include "poppack.h"
+
+/* ----------------------------------------------
+ * Information used for parsing
+ * ---------------------------------------------- */
+
+typedef struct
+{
+    DWORD  from;
+    DWORD  to;
+} OMAP_DATA;
+
+struct msc_debug_info
+{
+    struct module*              module;
+    int			        nsect;
+    const IMAGE_SECTION_HEADER* sectp;
+    int			        nomap;
+    const OMAP_DATA*            omapp;
+    const BYTE*                 root;
+};
+
+/* coff.c */
+extern BOOL coff_process_info(const struct msc_debug_info* msc_dbg);
+
+/* ===================================================
+ * The old CodeView stuff (for NB09 and NB11)
+ * =================================================== */
+
+#define sstModule      0x120
+#define sstTypes       0x121
+#define sstPublic      0x122
+#define sstPublicSym   0x123
+#define sstSymbols     0x124
+#define sstAlignSym    0x125
+#define sstSrcLnSeg    0x126
+#define sstSrcModule   0x127
+#define sstLibraries   0x128
+#define sstGlobalSym   0x129
+#define sstGlobalPub   0x12a
+#define sstGlobalTypes 0x12b
+#define sstMPC         0x12c
+#define sstSegMap      0x12d
+#define sstSegName     0x12e
+#define sstPreComp     0x12f
+#define sstFileIndex   0x133
+#define sstStaticSym   0x134
+
+/* overall structure information */
+typedef struct OMFSignature
+{
+    char        Signature[4];
+    long        filepos;
+} OMFSignature;
+
+typedef struct OMFSignatureRSDS
+{
+    char        Signature[4];
+    GUID        guid;
+    DWORD       age;
+    CHAR        name[1];
+} OMFSignatureRSDS;
+
+typedef struct _CODEVIEW_PDB_DATA
+{
+    char        Signature[4];
+    long        filepos;
+    DWORD       timestamp;
+    DWORD       age;
+    CHAR        name[1];
+} CODEVIEW_PDB_DATA, *PCODEVIEW_PDB_DATA;
+
+typedef struct OMFDirHeader
+{
+    WORD        cbDirHeader;
+    WORD        cbDirEntry;
+    DWORD       cDir;
+    DWORD       lfoNextDir;
+    DWORD       flags;
+} OMFDirHeader;
+
+typedef struct OMFDirEntry
+{
+    WORD        SubSection;
+    WORD        iMod;
+    DWORD       lfo;
+    DWORD       cb;
+} OMFDirEntry;
+
+/* sstModule subsection */
+
+typedef struct OMFSegDesc
+{
+    WORD        Seg;
+    WORD        pad;
+    DWORD       Off;
+    DWORD       cbSeg;
+} OMFSegDesc;
+
+typedef struct OMFModule
+{
+    WORD        ovlNumber;
+    WORD        iLib;
+    WORD        cSeg;
+    char        Style[2];
+/*
+    OMFSegDesc  SegInfo[cSeg];
+    p_string    Name;
+*/
+} OMFModule;
+
+typedef struct OMFGlobalTypes
+{
+    DWORD       flags;
+    DWORD       cTypes;
+/*
+    DWORD       offset[cTypes];
+                types_record[];
+*/
+} OMFGlobalTypes;
+
+/* sstGlobalPub section */
+
+/* Header for symbol table */
+typedef struct OMFSymHash
+{
+    unsigned short  symhash;
+    unsigned short  addrhash;
+    unsigned long   cbSymbol;
+    unsigned long   cbHSym;
+    unsigned long   cbHAddr;
+} OMFSymHash;
+
+/* sstSegMap section */
+
+typedef struct OMFSegMapDesc
+{
+    unsigned short  flags;
+    unsigned short  ovl;
+    unsigned short  group;
+    unsigned short  frame;
+    unsigned short  iSegName;
+    unsigned short  iClassName;
+    unsigned long   offset;
+    unsigned long   cbSeg;
+} OMFSegMapDesc;
+
+typedef struct OMFSegMap
+{
+    unsigned short  cSeg;
+    unsigned short  cSegLog;
+/*    OMFSegMapDesc   rgDesc[0];*/
+} OMFSegMap;
+
+
+/* sstSrcModule section */
+
+typedef struct OMFSourceLine
+{
+    unsigned short  Seg;
+    unsigned short  cLnOff;
+    unsigned long   offset[1];
+    unsigned short  lineNbr[1];
+} OMFSourceLine;
+
+typedef struct OMFSourceFile
+{
+    unsigned short  cSeg;
+    unsigned short  reserved;
+    unsigned long   baseSrcLn[1];
+    unsigned short  cFName;
+    char            Name;
+} OMFSourceFile;
+
+typedef struct OMFSourceModule
+{
+    unsigned short  cFile;
+    unsigned short  cSeg;
+    unsigned long   baseSrcFile[1];
+} OMFSourceModule;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h
new file mode 100644
index 0000000..5f0e119
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h
@@ -0,0 +1,484 @@
+/*
+ * Wine porting definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_PORT_H
+#define __WINE_WINE_PORT_H
+
+#ifndef __WINE_CONFIG_H
+# error You must include config.h to use this header
+#endif
+
+#ifdef __WINE_BASETSD_H
+# error You must include port.h before all other headers
+#endif
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE  /* for pread/pwrite */
+#endif
+#include <fcntl.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+#ifdef HAVE_PROCESS_H
+# include <process.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+
+/****************************************************************
+ * Type definitions
+ */
+
+#if !defined(_MSC_VER) && !defined(__int64)
+#  if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)
+#    define __int64 long
+#  else
+#    define __int64 long long
+#  endif
+#endif
+
+#ifndef HAVE_MODE_T
+typedef int mode_t;
+#endif
+#ifndef HAVE_OFF_T
+typedef long off_t;
+#endif
+#ifndef HAVE_PID_T
+typedef int pid_t;
+#endif
+#ifndef HAVE_SIZE_T
+typedef unsigned int size_t;
+#endif
+#ifndef HAVE_SSIZE_T
+typedef int ssize_t;
+#endif
+#ifndef HAVE_FSBLKCNT_T
+typedef unsigned long fsblkcnt_t;
+#endif
+#ifndef HAVE_FSFILCNT_T
+typedef unsigned long fsfilcnt_t;
+#endif
+
+#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS
+struct statvfs
+{
+    unsigned long f_bsize;
+    unsigned long f_frsize;
+    fsblkcnt_t    f_blocks;
+    fsblkcnt_t    f_bfree;
+    fsblkcnt_t    f_bavail;
+    fsfilcnt_t    f_files;
+    fsfilcnt_t    f_ffree;
+    fsfilcnt_t    f_favail;
+    unsigned long f_fsid;
+    unsigned long f_flag;
+    unsigned long f_namemax;
+};
+#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */
+
+
+/****************************************************************
+ * Macro definitions
+ */
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+#define RTLD_LAZY    0x001
+#define RTLD_NOW     0x002
+#define RTLD_GLOBAL  0x100
+#endif
+
+#ifdef HAVE_ONE_ARG_MKDIR
+#define mkdir(path,mode) mkdir(path)
+#endif
+
+#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)
+#define ftruncate chsize
+#endif
+
+#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)
+#define popen _popen
+#endif
+
+#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)
+#define pclose _pclose
+#endif
+
+#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)
+#define strdup _strdup
+#endif
+
+#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)
+#define snprintf _snprintf
+#endif
+
+#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)
+#define vsnprintf _vsnprintf
+#endif
+
+#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)
+#define strtoll _strtoi64
+#endif
+
+#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)
+#define strtoull _strtoui64
+#endif
+
+#ifndef S_ISLNK
+# define S_ISLNK(mod) (0)
+#endif
+
+#ifndef S_ISSOCK
+# define S_ISSOCK(mod) (0)
+#endif
+
+#ifndef S_ISDIR
+# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)
+#endif
+
+#ifndef S_ISCHR
+# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)
+#endif
+
+#ifndef S_ISFIFO
+# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)
+#endif
+
+#ifndef S_ISREG
+# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)
+#endif
+
+/* So we open files in 64 bit access mode on Linux */
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK 0
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/****************************************************************
+ * Constants
+ */
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#ifndef M_PI_2
+#define M_PI_2 1.570796326794896619
+#endif
+
+#ifndef INFINITY
+static inline float __port_infinity(void)
+{
+    static const unsigned __inf_bytes = 0x7f800000;
+    return *(const float *)&__inf_bytes;
+}
+#define INFINITY __port_infinity()
+#endif
+
+#ifndef NAN
+static inline float __port_nan(void)
+{
+    static const unsigned __nan_bytes = 0x7fc00000;
+    return *(const float *)&__nan_bytes;
+}
+#define NAN __port_nan()
+#endif
+
+
+/****************************************************************
+ * Function definitions (only when using libwine_port)
+ */
+
+#ifndef NO_LIBWINE_PORT
+
+#ifndef HAVE_FSTATVFS
+int fstatvfs( int fd, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_GETOPT_LONG_ONLY
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+struct option;
+
+#ifndef HAVE_STRUCT_OPTION_NAME
+struct option
+{
+    const char *name;
+    int has_arg;
+    int *flag;
+    int val;
+};
+#endif
+
+extern int getopt_long (int ___argc, char *const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind);
+extern int getopt_long_only (int ___argc, char *const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind);
+#endif  /* HAVE_GETOPT_LONG_ONLY */
+
+#ifndef HAVE_FFS
+int ffs( int x );
+#endif
+
+#ifndef HAVE_ISINF
+int isinf(double x);
+#endif
+
+#ifndef HAVE_ISNAN
+int isnan(double x);
+#endif
+
+#ifndef HAVE_LSTAT
+int lstat(const char *file_name, struct stat *buf);
+#endif /* HAVE_LSTAT */
+
+#ifndef HAVE_MEMMOVE
+void *memmove(void *dest, const void *src, size_t len);
+#endif /* !defined(HAVE_MEMMOVE) */
+
+#ifndef HAVE_POLL
+struct pollfd
+{
+    int fd;
+    short events;
+    short revents;
+};
+#define POLLIN   0x01
+#define POLLPRI  0x02
+#define POLLOUT  0x04
+#define POLLERR  0x08
+#define POLLHUP  0x10
+#define POLLNVAL 0x20
+int poll( struct pollfd *fds, unsigned int count, int timeout );
+#endif /* HAVE_POLL */
+
+#ifndef HAVE_PREAD
+ssize_t pread( int fd, void *buf, size_t count, off_t offset );
+#endif /* HAVE_PREAD */
+
+#ifndef HAVE_PWRITE
+ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );
+#endif /* HAVE_PWRITE */
+
+#ifndef HAVE_READLINK
+int readlink( const char *path, char *buf, size_t size );
+#endif /* HAVE_READLINK */
+
+#ifndef HAVE_STATVFS
+int statvfs( const char *path, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_STRNCASECMP
+# ifndef HAVE__STRNICMP
+int strncasecmp(const char *str1, const char *str2, size_t n);
+# else
+# define strncasecmp _strnicmp
+# endif
+#endif /* !defined(HAVE_STRNCASECMP) */
+
+#ifndef HAVE_STRERROR
+const char *strerror(int err);
+#endif /* !defined(HAVE_STRERROR) */
+
+#ifndef HAVE_STRCASECMP
+# ifndef HAVE__STRICMP
+int strcasecmp(const char *str1, const char *str2);
+# else
+# define strcasecmp _stricmp
+# endif
+#endif /* !defined(HAVE_STRCASECMP) */
+
+#ifndef HAVE_SYMLINK
+int symlink(const char *from, const char *to);
+#endif
+
+#ifndef HAVE_USLEEP
+int usleep (unsigned int useconds);
+#endif /* !defined(HAVE_USLEEP) */
+
+#ifdef __i386__
+static inline void *memcpy_unaligned( void *dst, const void *src, size_t size )
+{
+    return memcpy( dst, src, size );
+}
+#else
+extern void *memcpy_unaligned( void *dst, const void *src, size_t size );
+#endif /* __i386__ */
+
+extern int mkstemps(char *template, int suffix_len);
+
+/* Process creation flags */
+#ifndef _P_WAIT
+# define _P_WAIT    0
+# define _P_NOWAIT  1
+# define _P_OVERLAY 2
+# define _P_NOWAITO 3
+# define _P_DETACH  4
+#endif
+#ifndef HAVE__SPAWNVP
+extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]);
+#endif
+
+/* Interlocked functions */
+
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+
+static inline int interlocked_cmpxchg( int *dest, int xchg, int compare )
+{
+    int ret;
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+    return ret;
+}
+
+static inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )
+{
+    void *ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; cmpxchgq %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#else
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#endif
+    return ret;
+}
+
+static inline int interlocked_xchg( int *dest, int val )
+{
+    int ret;
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+    return ret;
+}
+
+static inline void *interlocked_xchg_ptr( void **dest, void *val )
+{
+    void *ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; xchgq %0,(%1)"
+                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+#endif
+    return ret;
+}
+
+static inline int interlocked_xchg_add( int *dest, int incr )
+{
+    int ret;
+    __asm__ __volatile__( "lock; xaddl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+    return ret;
+}
+
+#ifdef __x86_64__
+static inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                                    __int64 xchg_low, __int64 *compare )
+{
+    unsigned char ret;
+    __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
+                          : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
+                            "=a" (compare[0]), "=d" (compare[1])
+                          : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
+                            "c" (xchg_high), "b" (xchg_low) );
+    return ret;
+}
+#endif
+
+#else  /* __GNUC__ */
+
+extern int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern int interlocked_xchg( int *dest, int val );
+extern void *interlocked_xchg_ptr( void **dest, void *val );
+extern int interlocked_xchg_add( int *dest, int incr );
+#if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)
+extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                             __int64 xchg_low, __int64 *compare );
+#endif
+
+#endif  /* __GNUC__ */
+
+#else /* NO_LIBWINE_PORT */
+
+#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable
+
+#define ffs                     __WINE_NOT_PORTABLE(ffs)
+#define fstatvfs                __WINE_NOT_PORTABLE(fstatvfs)
+#define getopt_long             __WINE_NOT_PORTABLE(getopt_long)
+#define getopt_long_only        __WINE_NOT_PORTABLE(getopt_long_only)
+#define interlocked_cmpxchg     __WINE_NOT_PORTABLE(interlocked_cmpxchg)
+#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)
+#define interlocked_xchg        __WINE_NOT_PORTABLE(interlocked_xchg)
+#define interlocked_xchg_ptr    __WINE_NOT_PORTABLE(interlocked_xchg_ptr)
+#define interlocked_xchg_add    __WINE_NOT_PORTABLE(interlocked_xchg_add)
+#define lstat                   __WINE_NOT_PORTABLE(lstat)
+#define memcpy_unaligned        __WINE_NOT_PORTABLE(memcpy_unaligned)
+#undef memmove
+#define memmove                 __WINE_NOT_PORTABLE(memmove)
+#define pread                   __WINE_NOT_PORTABLE(pread)
+#define pwrite                  __WINE_NOT_PORTABLE(pwrite)
+#define spawnvp                 __WINE_NOT_PORTABLE(spawnvp)
+#define statvfs                 __WINE_NOT_PORTABLE(statvfs)
+#define strcasecmp              __WINE_NOT_PORTABLE(strcasecmp)
+#define strerror                __WINE_NOT_PORTABLE(strerror)
+#define strncasecmp             __WINE_NOT_PORTABLE(strncasecmp)
+#define usleep                  __WINE_NOT_PORTABLE(usleep)
+
+#endif /* NO_LIBWINE_PORT */
+
+#endif /* !defined(__WINE_WINE_PORT_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h
new file mode 100644
index 0000000..4488a01
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h
@@ -0,0 +1,351 @@
+/*
+ * Red-black search tree support
+ *
+ * Copyright 2009 Henri Verbeet
+ * Copyright 2009 Andrew Riedi
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_RBTREE_H
+#define __WINE_WINE_RBTREE_H
+
+#define WINE_RB_ENTRY_VALUE(element, type, field) \
+    ((type *)((char *)(element) - offsetof(type, field)))
+
+struct wine_rb_entry
+{
+    struct wine_rb_entry *left;
+    struct wine_rb_entry *right;
+    unsigned int flags;
+};
+
+struct wine_rb_stack
+{
+    struct wine_rb_entry ***entries;
+    size_t count;
+    size_t size;
+};
+
+struct wine_rb_functions
+{
+    void *(*alloc)(size_t size);
+    void *(*realloc)(void *ptr, size_t size);
+    void (*free)(void *ptr);
+    int (*compare)(const void *key, const struct wine_rb_entry *entry);
+};
+
+struct wine_rb_tree
+{
+    const struct wine_rb_functions *functions;
+    struct wine_rb_entry *root;
+    struct wine_rb_stack stack;
+};
+
+typedef void (wine_rb_traverse_func_t)(struct wine_rb_entry *entry, void *context);
+
+#define WINE_RB_FLAG_RED                0x1
+#define WINE_RB_FLAG_STOP               0x2
+#define WINE_RB_FLAG_TRAVERSED_LEFT     0x4
+#define WINE_RB_FLAG_TRAVERSED_RIGHT    0x8
+
+static inline void wine_rb_stack_clear(struct wine_rb_stack *stack)
+{
+    stack->count = 0;
+}
+
+static inline void wine_rb_stack_push(struct wine_rb_stack *stack, struct wine_rb_entry **entry)
+{
+    stack->entries[stack->count++] = entry;
+}
+
+static inline int wine_rb_ensure_stack_size(struct wine_rb_tree *tree, size_t size)
+{
+    struct wine_rb_stack *stack = &tree->stack;
+
+    if (size > stack->size)
+    {
+        size_t new_size = stack->size << 1;
+        struct wine_rb_entry ***new_entries = tree->functions->realloc(stack->entries,
+                new_size * sizeof(*stack->entries));
+
+        if (!new_entries) return -1;
+
+        stack->entries = new_entries;
+        stack->size = new_size;
+    }
+
+    return 0;
+}
+
+static inline int wine_rb_is_red(struct wine_rb_entry *entry)
+{
+    return entry && (entry->flags & WINE_RB_FLAG_RED);
+}
+
+static inline void wine_rb_rotate_left(struct wine_rb_entry **entry)
+{
+    struct wine_rb_entry *e = *entry;
+    struct wine_rb_entry *right = e->right;
+
+    e->right = right->left;
+    right->left = e;
+    right->flags &= ~WINE_RB_FLAG_RED;
+    right->flags |= e->flags & WINE_RB_FLAG_RED;
+    e->flags |= WINE_RB_FLAG_RED;
+    *entry = right;
+}
+
+static inline void wine_rb_rotate_right(struct wine_rb_entry **entry)
+{
+    struct wine_rb_entry *e = *entry;
+    struct wine_rb_entry *left = e->left;
+
+    e->left = left->right;
+    left->right = e;
+    left->flags &= ~WINE_RB_FLAG_RED;
+    left->flags |= e->flags & WINE_RB_FLAG_RED;
+    e->flags |= WINE_RB_FLAG_RED;
+    *entry = left;
+}
+
+static inline void wine_rb_flip_color(struct wine_rb_entry *entry)
+{
+    entry->flags ^= WINE_RB_FLAG_RED;
+    entry->left->flags ^= WINE_RB_FLAG_RED;
+    entry->right->flags ^= WINE_RB_FLAG_RED;
+}
+
+static inline void wine_rb_fixup(struct wine_rb_stack *stack)
+{
+    while (stack->count)
+    {
+        struct wine_rb_entry **entry = stack->entries[stack->count - 1];
+
+        if ((*entry)->flags & WINE_RB_FLAG_STOP)
+        {
+            (*entry)->flags &= ~WINE_RB_FLAG_STOP;
+            return;
+        }
+
+        if (wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->left)) wine_rb_rotate_left(entry);
+        if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->left->left)) wine_rb_rotate_right(entry);
+        if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->right)) wine_rb_flip_color(*entry);
+        --stack->count;
+    }
+}
+
+static inline void wine_rb_move_red_left(struct wine_rb_entry **entry)
+{
+    wine_rb_flip_color(*entry);
+    if (wine_rb_is_red((*entry)->right->left))
+    {
+        wine_rb_rotate_right(&(*entry)->right);
+        wine_rb_rotate_left(entry);
+        wine_rb_flip_color(*entry);
+    }
+}
+
+static inline void wine_rb_move_red_right(struct wine_rb_entry **entry)
+{
+    wine_rb_flip_color(*entry);
+    if (wine_rb_is_red((*entry)->left->left))
+    {
+        wine_rb_rotate_right(entry);
+        wine_rb_flip_color(*entry);
+    }
+}
+
+static inline void wine_rb_postorder(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    struct wine_rb_entry **entry;
+
+    if (!tree->root) return;
+
+    for (entry = &tree->root;;)
+    {
+        struct wine_rb_entry *e = *entry;
+
+        if (e->left && !(e->flags & WINE_RB_FLAG_TRAVERSED_LEFT))
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            e->flags |= WINE_RB_FLAG_TRAVERSED_LEFT;
+            entry = &e->left;
+            continue;
+        }
+
+        if (e->right && !(e->flags & WINE_RB_FLAG_TRAVERSED_RIGHT))
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            e->flags |= WINE_RB_FLAG_TRAVERSED_RIGHT;
+            entry = &e->right;
+            continue;
+        }
+
+        e->flags &= ~(WINE_RB_FLAG_TRAVERSED_LEFT | WINE_RB_FLAG_TRAVERSED_RIGHT);
+        callback(e, context);
+
+        if (!tree->stack.count) break;
+        entry = tree->stack.entries[--tree->stack.count];
+    }
+}
+
+static inline int wine_rb_init(struct wine_rb_tree *tree, const struct wine_rb_functions *functions)
+{
+    tree->functions = functions;
+    tree->root = NULL;
+
+    tree->stack.entries = functions->alloc(16 * sizeof(*tree->stack.entries));
+    if (!tree->stack.entries) return -1;
+    tree->stack.size = 16;
+    tree->stack.count = 0;
+
+    return 0;
+}
+
+static inline void wine_rb_for_each_entry(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    wine_rb_postorder(tree, callback, context);
+}
+
+static inline void wine_rb_destroy(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    /* Note that we use postorder here because the callback will likely free the entry. */
+    if (callback) wine_rb_postorder(tree, callback, context);
+
+    tree->root = NULL;
+    tree->functions->free(tree->stack.entries);
+}
+
+static inline struct wine_rb_entry *wine_rb_get(const struct wine_rb_tree *tree, const void *key)
+{
+    struct wine_rb_entry *entry = tree->root;
+    while (entry)
+    {
+        int c = tree->functions->compare(key, entry);
+        if (!c) return entry;
+        entry = c < 0 ? entry->left : entry->right;
+    }
+    return NULL;
+}
+
+static inline int wine_rb_put(struct wine_rb_tree *tree, const void *key, struct wine_rb_entry *entry)
+{
+    struct wine_rb_entry **parent = &tree->root;
+    size_t black_height = 1;
+
+    while (*parent)
+    {
+        int c;
+
+        if (!wine_rb_is_red(*parent)) ++black_height;
+
+        wine_rb_stack_push(&tree->stack, parent);
+
+        c = tree->functions->compare(key, *parent);
+        if (!c)
+        {
+            wine_rb_stack_clear(&tree->stack);
+            return -1;
+        }
+        else if (c < 0) parent = &(*parent)->left;
+        else parent = &(*parent)->right;
+    }
+
+    /* After insertion, the path length to any node should be <= (black_height + 1) * 2. */
+    if (wine_rb_ensure_stack_size(tree, black_height << 1) == -1)
+    {
+        wine_rb_stack_clear(&tree->stack);
+        return -1;
+    }
+
+    entry->flags = WINE_RB_FLAG_RED;
+    entry->left = NULL;
+    entry->right = NULL;
+    *parent = entry;
+
+    wine_rb_fixup(&tree->stack);
+    tree->root->flags &= ~WINE_RB_FLAG_RED;
+
+    return 0;
+}
+
+static inline void wine_rb_remove(struct wine_rb_tree *tree, const void *key)
+{
+    struct wine_rb_entry **entry = &tree->root;
+
+    while (*entry)
+    {
+        if (tree->functions->compare(key, *entry) < 0)
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            if (!wine_rb_is_red((*entry)->left) && !wine_rb_is_red((*entry)->left->left)) wine_rb_move_red_left(entry);
+            entry = &(*entry)->left;
+        }
+        else
+        {
+            if (wine_rb_is_red((*entry)->left)) wine_rb_rotate_right(entry);
+            if (!tree->functions->compare(key, *entry) && !(*entry)->right)
+            {
+                *entry = NULL;
+                break;
+            }
+            if (!wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->right->left))
+                wine_rb_move_red_right(entry);
+            if (!tree->functions->compare(key, *entry))
+            {
+                struct wine_rb_entry **e = &(*entry)->right;
+                struct wine_rb_entry *m = *e;
+                while (m->left) m = m->left;
+
+                wine_rb_stack_push(&tree->stack, entry);
+                (*entry)->flags |= WINE_RB_FLAG_STOP;
+
+                while ((*e)->left)
+                {
+                    wine_rb_stack_push(&tree->stack, e);
+                    if (!wine_rb_is_red((*e)->left) && !wine_rb_is_red((*e)->left->left)) wine_rb_move_red_left(e);
+                    e = &(*e)->left;
+                }
+                *e = NULL;
+                wine_rb_fixup(&tree->stack);
+
+                *m = **entry;
+                *entry = m;
+
+                break;
+            }
+            else
+            {
+                wine_rb_stack_push(&tree->stack, entry);
+                entry = &(*entry)->right;
+            }
+        }
+    }
+
+    wine_rb_fixup(&tree->stack);
+    if (tree->root) tree->root->flags &= ~WINE_RB_FLAG_RED;
+}
+
+#endif  /* __WINE_WINE_RBTREE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h
new file mode 100644
index 0000000..53dd163
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h
@@ -0,0 +1,205 @@
+/*
+ * RPC format chars, as found by studying MIDL output.
+ * Some, but not all, usage of these are explained on MSDN.
+ */
+
+#ifndef __WINE_RPCFC_H
+#define __WINE_RPCFC_H
+
+/* base types */
+#define RPC_FC_BYTE			0x01
+#define RPC_FC_CHAR			0x02
+#define RPC_FC_SMALL			0x03
+#define RPC_FC_USMALL			0x04
+#define RPC_FC_WCHAR			0x05
+#define RPC_FC_SHORT			0x06
+#define RPC_FC_USHORT			0x07
+#define RPC_FC_LONG			0x08
+#define RPC_FC_ULONG			0x09
+#define RPC_FC_FLOAT			0x0a
+#define RPC_FC_HYPER			0x0b
+#define RPC_FC_DOUBLE			0x0c
+#define RPC_FC_ENUM16			0x0d
+#define RPC_FC_ENUM32			0x0e
+#define RPC_FC_IGNORE			0x0f
+#define RPC_FC_ERROR_STATUS_T		0x10
+
+/* other stuff */
+#define RPC_FC_RP			0x11 /* reference pointer */
+#define RPC_FC_UP			0x12 /* unique pointer */
+#define RPC_FC_OP			0x13 /* unique pointer in object ? */
+#define RPC_FC_FP			0x14 /* full pointer */
+
+#define RPC_FC_STRUCT			0x15 /* simple structure */
+/* FC_STRUCT: align-1, NdrFcShort(size), fields */
+
+#define RPC_FC_PSTRUCT			0x16 /* simple structure w/ pointers */
+/* FC_PTRUCT: align-1, NdrFcShort(size), ptrs, fields */
+
+#define RPC_FC_CSTRUCT			0x17 /* conformant structure */
+
+#define RPC_FC_CPSTRUCT                 0x18 /* conformant structure w/ pointers */
+
+#define RPC_FC_CVSTRUCT                 0x19 /* conformant varying struct */
+
+#define RPC_FC_BOGUS_STRUCT		0x1a /* complex structure */
+
+#define RPC_FC_CARRAY			0x1b /* conformant array */
+/* FC_CARRAY: align-1, NdrFcShort(size), conformance, ptrs, fields */
+#define RPC_FC_CVARRAY			0x1c /* conformant varying array */
+/* FC_CARRAY: align-1, NdrFcShort(size), conformance, variance, ptrs, fields */
+#define RPC_FC_SMFARRAY			0x1d /* small (<64K) fixed array */
+/* FC_SMFARRAY: align-1, NdrFcShort(size), ptrs, fields */
+
+#define RPC_FC_LGFARRAY                 0x1e /* large (>= 64k) fixed array */
+
+#define RPC_FC_SMVARRAY                 0x1f /* small (<64k) varying array */
+
+#define RPC_FC_LGVARRAY                 0x20 /* large (>= 64k) varying array */
+
+#define RPC_FC_BOGUS_ARRAY		0x21 /* complex array */
+
+#define RPC_FC_C_CSTRING		0x22
+#define RPC_FC_C_SSTRING		0x24
+#define RPC_FC_C_WSTRING		0x25
+#define RPC_FC_CSTRING                  0x26
+#define RPC_FC_SSTRING			0x28
+#define RPC_FC_WSTRING                  0x29
+
+#define RPC_FC_ENCAPSULATED_UNION	0x2a
+#define RPC_FC_NON_ENCAPSULATED_UNION	0x2b
+
+#define RPC_FC_BYTE_COUNT_POINTER       0x2c /* [byte_count] ACF attribute */
+
+#define RPC_FC_TRANSMIT_AS              0x2d
+#define RPC_FC_REPRESENT_AS             0x2e
+
+#define RPC_FC_IP			0x2f /* interface pointer */
+/* FC_IP: FC_CONSTANT_IID iid */
+/* FC_IP: FC_PAD correlation */
+
+#define RPC_FC_BIND_CONTEXT		0x30
+
+#define RPC_FC_BIND_GENERIC		0x31
+#define RPC_FC_BIND_PRIMITIVE		0x32
+#define RPC_FC_AUTO_HANDLE		0x33
+#define RPC_FC_CALLBACK_HANDLE		0x34
+
+#define RPC_FC_POINTER			0x36
+
+#define RPC_FC_ALIGNM2			0x37
+#define RPC_FC_ALIGNM4			0x38
+#define RPC_FC_ALIGNM8			0x39
+
+#define RPC_FC_STRUCTPAD1		0x3d
+#define RPC_FC_STRUCTPAD2		0x3e
+#define RPC_FC_STRUCTPAD3		0x3f
+#define RPC_FC_STRUCTPAD4       0x40
+#define RPC_FC_STRUCTPAD5       0x41
+#define RPC_FC_STRUCTPAD6       0x42
+#define RPC_FC_STRUCTPAD7       0x43
+
+#define RPC_FC_STRING_SIZED		0x44
+
+#define RPC_FC_NO_REPEAT		0x46
+#define RPC_FC_FIXED_REPEAT		0x47
+#define RPC_FC_VARIABLE_REPEAT		0x48
+#define RPC_FC_FIXED_OFFSET		0x49
+#define RPC_FC_VARIABLE_OFFSET		0x4a
+
+#define RPC_FC_PP			0x4b /* pointer layout */
+/* FC_PP: FC_PAD layouts */
+/* layouts: FC_NO_REPEAT FC_PAD instance */
+/* instance: NdrFcShort(memofs), NdrFcShort(bufofs), desc */
+
+#define RPC_FC_EMBEDDED_COMPLEX		0x4c
+/* FC_EMBEDDED_COMPLEX: padding, NdrFcShort(typeofs) */
+
+#define RPC_FC_IN_PARAM			0x4d
+/* FC_IN_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_IN_PARAM_BASETYPE	0x4e
+/* FC_IN_PARAM_BASETYPE: basetype */
+#define RPC_FC_IN_PARAM_NO_FREE_INST	0x4f
+#define RPC_FC_IN_OUT_PARAM		0x50
+/* FC_IN_OUT_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_OUT_PARAM		0x51
+/* FC_OUT_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_RETURN_PARAM		0x52
+/* FC_RETURN_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_RETURN_PARAM_BASETYPE	0x53
+/* FC_RETURN_PARAM_BASETYPE: basetype */
+
+#define RPC_FC_DEREFERENCE		0x54
+#define RPC_FC_DIV_2			0x55
+#define RPC_FC_MULT_2			0x56
+#define RPC_FC_ADD_1			0x57
+#define RPC_FC_SUB_1			0x58
+
+#define RPC_FC_CALLBACK			0x59
+
+#define RPC_FC_CONSTANT_IID		0x5a
+/* FC_CONSTANT_IID: NdrFcLong(), NdrFcShort(), NdrFcShort(), 8x () */
+
+#define RPC_FC_END			0x5b
+#define RPC_FC_PAD			0x5c
+
+#define RPC_FC_USER_MARSHAL		0xb4
+
+#define RPC_FC_RANGE			0xb7
+
+#define RPC_FC_INT3264			0xb8
+#define RPC_FC_UINT3264			0xb9
+
+/* FC_RP/UP/OP/FP: flags, NdrFcShort(typeofs)/basetype */
+#define RPC_FC_P_ALLOCALLNODES		0x01
+#define RPC_FC_P_DONTFREE		0x02
+#define RPC_FC_P_ONSTACK		0x04 /* [alloced_on_stack] */
+#define RPC_FC_P_SIMPLEPOINTER		0x08 /* [simple_pointer] */
+#define RPC_FC_P_DEREF			0x10
+
+#define RPC_FC_BIND_EXPLICIT		0x00
+
+/* proc header: oiflags, NdrFcLong(rpcflags), NdrFcShort(procnum), NdrFcShort(stacksiz),
+ *  oi2 header: NdrFcShort(clientbuf), NdrFcShort(servbuf), oi2flags, parmcount
+ * oi2 parameters: NdrFcShort(flags), NdrFcShort(stackofs), NdrFcShort(typeofs)/basetype */
+#define RPC_FC_PROC_OIF_FULLPTR         0x01
+#define RPC_FC_PROC_OIF_RPCSSALLOC      0x02
+#define RPC_FC_PROC_OIF_OBJECT          0x04
+#define RPC_FC_PROC_OIF_RPCFLAGS        0x08
+#define RPC_FC_PROC_OIF_OBJ_V2          0x20
+#define RPC_FC_PROC_OIF_HAS_COMM_OR_FAULT 0x20
+#define RPC_FC_PROC_OIF_NEWINIT         0x40
+
+#define RPC_FC_PROC_PF_MUSTSIZE         0x0001
+#define RPC_FC_PROC_PF_MUSTFREE         0x0002
+#define RPC_FC_PROC_PF_PIPE             0x0004
+#define RPC_FC_PROC_PF_IN               0x0008
+#define RPC_FC_PROC_PF_OUT              0x0010
+#define RPC_FC_PROC_PF_RETURN           0x0020
+#define RPC_FC_PROC_PF_BASETYPE         0x0040
+#define RPC_FC_PROC_PF_BYVAL            0x0080
+#define RPC_FC_PROC_PF_SIMPLEREF        0x0100
+#define RPC_FC_PROC_PF_DONTFREEINST     0x0200
+#define RPC_FC_PROC_PF_SAVEASYNC        0x0400
+#define RPC_FC_PROC_PF_SRVALLOCSIZE     0xe000 /* in 8 byte units */
+
+/* correlation types */
+#define RPC_FC_NORMAL_CONFORMANCE		0x00
+#define RPC_FC_POINTER_CONFORMANCE		0x10
+#define RPC_FC_TOP_LEVEL_CONFORMANCE		0x20
+#define RPC_FC_CONSTANT_CONFORMANCE		0x40
+#define RPC_FC_TOP_LEVEL_MULTID_CONFORMANCE	0x80
+
+/* user marshal flags */
+#define USER_MARSHAL_UNIQUE	0x80
+#define USER_MARSHAL_REF	0x40
+#define USER_MARSHAL_POINTER	0xc0
+#define USER_MARSHAL_IID	0x20
+
+/* context handle flags */
+#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL   0x01
+#define NDR_CONTEXT_HANDLE_SERIALIZE        0x02
+#define NDR_CONTEXT_HANDLE_NO_SERIALIZE     0x04
+#define NDR_STRICT_CONTEXT_HANDLE           0x08
+
+#endif /* __WINE_RPCFC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h
new file mode 100644
index 0000000..88d1aeb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h
@@ -0,0 +1,151 @@
+/*
+ * Definitions for the client side of the Wine server communication
+ *
+ * Copyright (C) 1998 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_SERVER_H
+#define __WINE_WINE_SERVER_H
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winternl.h>
+#include <wine/server_protocol.h>
+
+/* client communication functions */
+
+struct __server_iovec
+{
+    const void  *ptr;
+    data_size_t  size;
+};
+
+#define __SERVER_MAX_DATA 5
+
+struct __server_request_info
+{
+    union
+    {
+        union generic_request req;    /* request structure */
+        union generic_reply   reply;  /* reply structure */
+    } u;
+    unsigned int          data_count; /* count of request data pointers */
+    void                 *reply_data; /* reply data pointer */
+    struct __server_iovec data[__SERVER_MAX_DATA];  /* request variable size data */
+};
+
+extern unsigned int wine_server_call( void *req_ptr );
+extern void CDECL wine_server_send_fd( int fd );
+extern int CDECL wine_server_fd_to_handle( int fd, unsigned int access, unsigned int attributes, HANDLE *handle );
+extern int CDECL wine_server_handle_to_fd( HANDLE handle, unsigned int access, int *unix_fd, unsigned int *options );
+extern void CDECL wine_server_release_fd( HANDLE handle, int unix_fd );
+
+/* do a server call and set the last error code */
+static inline unsigned int wine_server_call_err( void *req_ptr )
+{
+    unsigned int res = wine_server_call( req_ptr );
+    if (res) SetLastError( RtlNtStatusToDosError(res) );
+    return res;
+}
+
+/* get the size of the variable part of the returned reply */
+static inline data_size_t wine_server_reply_size( const void *reply )
+{
+    return ((const struct reply_header *)reply)->reply_size;
+}
+
+/* add some data to be sent along with the request */
+static inline void wine_server_add_data( void *req_ptr, const void *ptr, data_size_t size )
+{
+    struct __server_request_info * const req = req_ptr;
+    if (size)
+    {
+        req->data[req->data_count].ptr = ptr;
+        req->data[req->data_count++].size = size;
+        req->u.req.request_header.request_size += size;
+    }
+}
+
+/* set the pointer and max size for the reply var data */
+static inline void wine_server_set_reply( void *req_ptr, void *ptr, data_size_t max_size )
+{
+    struct __server_request_info * const req = req_ptr;
+    req->reply_data = ptr;
+    req->u.req.request_header.reply_size = max_size;
+}
+
+/* convert an object handle to a server handle */
+static inline obj_handle_t wine_server_obj_handle( HANDLE handle )
+{
+    if ((int)(INT_PTR)handle != (INT_PTR)handle) return 0xfffffff0;  /* some invalid handle */
+    return (INT_PTR)handle;
+}
+
+/* convert a user handle to a server handle */
+static inline user_handle_t wine_server_user_handle( HANDLE handle )
+{
+    return (UINT_PTR)handle;
+}
+
+/* convert a server handle to a generic handle */
+static inline HANDLE wine_server_ptr_handle( obj_handle_t handle )
+{
+    return (HANDLE)(INT_PTR)(int)handle;
+}
+
+/* convert a client pointer to a server client_ptr_t */
+static inline client_ptr_t wine_server_client_ptr( const void *ptr )
+{
+    return (client_ptr_t)(ULONG_PTR)ptr;
+}
+
+/* convert a server client_ptr_t to a real pointer */
+static inline void *wine_server_get_ptr( client_ptr_t ptr )
+{
+    return (void *)(ULONG_PTR)ptr;
+}
+
+
+/* macros for server requests */
+
+#define SERVER_START_REQ(type) \
+    do { \
+        struct __server_request_info __req; \
+        struct type##_request * const req = &__req.u.req.type##_request; \
+        const struct type##_reply * const reply = &__req.u.reply.type##_reply; \
+        memset( &__req.u.req, 0, sizeof(__req.u.req) ); \
+        __req.u.req.request_header.req = REQ_##type; \
+        __req.data_count = 0; \
+        (void)reply; \
+        do
+
+#define SERVER_END_REQ \
+        while(0); \
+    } while(0)
+
+
+#endif  /* __WINE_WINE_SERVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h
new file mode 100644
index 0000000..b98e6d8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h
@@ -0,0 +1,5828 @@
+/*
+ * Wine server protocol definitions
+ *
+ * This file is automatically generated; DO NO EDIT!
+ * Edit server/protocol.def instead and re-run tools/make_requests
+ */
+
+#ifndef __WINE_WINE_SERVER_PROTOCOL_H
+#define __WINE_WINE_SERVER_PROTOCOL_H
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include <windef.h>
+#include <winbase.h>
+
+typedef unsigned int obj_handle_t;
+typedef unsigned int user_handle_t;
+typedef unsigned int atom_t;
+typedef unsigned int process_id_t;
+typedef unsigned int thread_id_t;
+typedef unsigned int data_size_t;
+typedef unsigned int ioctl_code_t;
+typedef unsigned __int64 lparam_t;
+typedef unsigned __int64 apc_param_t;
+typedef unsigned __int64 mem_size_t;
+typedef unsigned __int64 file_pos_t;
+typedef unsigned __int64 client_ptr_t;
+typedef unsigned __int64 affinity_t;
+typedef client_ptr_t mod_handle_t;
+
+struct request_header
+{
+    int          req;
+    data_size_t  request_size;
+    data_size_t  reply_size;
+};
+
+struct reply_header
+{
+    unsigned int error;
+    data_size_t  reply_size;
+};
+
+
+
+struct request_max_size
+{
+    int pad[16];
+};
+
+#define FIRST_USER_HANDLE 0x0020
+#define LAST_USER_HANDLE  0xffef
+
+
+
+typedef union
+{
+    int code;
+    struct
+    {
+        int              code;
+        int              first;
+        unsigned int     exc_code;
+        unsigned int     flags;
+        client_ptr_t     record;
+        client_ptr_t     address;
+        int              nb_params;
+        int              __pad;
+        client_ptr_t     params[15];
+    } exception;
+    struct
+    {
+        int          code;
+        obj_handle_t handle;
+        client_ptr_t teb;
+        client_ptr_t start;
+    } create_thread;
+    struct
+    {
+        int          code;
+        obj_handle_t file;
+        obj_handle_t process;
+        obj_handle_t thread;
+        mod_handle_t base;
+        int          dbg_offset;
+        int          dbg_size;
+        client_ptr_t teb;
+        client_ptr_t start;
+        client_ptr_t name;
+        int          unicode;
+    } create_process;
+    struct
+    {
+        int          code;
+        int          exit_code;
+    } exit;
+    struct
+    {
+        int          code;
+        obj_handle_t handle;
+        mod_handle_t base;
+        int          dbg_offset;
+        int          dbg_size;
+        client_ptr_t name;
+        int          unicode;
+    } load_dll;
+    struct
+    {
+        int          code;
+        int          __pad;
+        mod_handle_t base;
+    } unload_dll;
+    struct
+    {
+        int          code;
+        data_size_t  length;
+        client_ptr_t string;
+    } output_string;
+    struct
+    {
+        int          code;
+        int          error;
+        int          type;
+    } rip_info;
+} debug_event_t;
+
+
+enum cpu_type
+{
+    CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64
+};
+typedef int cpu_type_t;
+
+
+typedef struct
+{
+    cpu_type_t       cpu;
+    unsigned int     flags;
+    union
+    {
+        struct { unsigned int eip, ebp, esp, eflags, cs, ss; } i386_regs;
+        struct { unsigned __int64 rip, rbp, rsp;
+                 unsigned int cs, ss, flags, __pad; } x86_64_regs;
+        struct { unsigned int iar, msr, ctr, lr, dar, dsisr, trap, __pad; } powerpc_regs;
+        struct { unsigned int sp, lr, pc, cpsr; } arm_regs;
+        struct { unsigned __int64 sp, pc, pstate; } arm64_regs;
+    } ctl;
+    union
+    {
+        struct { unsigned int eax, ebx, ecx, edx, esi, edi; } i386_regs;
+        struct { unsigned __int64 rax,rbx, rcx, rdx, rsi, rdi,
+                                  r8, r9, r10, r11, r12, r13, r14, r15; } x86_64_regs;
+        struct { unsigned int gpr[32], cr, xer; } powerpc_regs;
+        struct { unsigned int r[13]; } arm_regs;
+        struct { unsigned __int64 x[31]; } arm64_regs;
+    } integer;
+    union
+    {
+        struct { unsigned int ds, es, fs, gs; } i386_regs;
+        struct { unsigned int ds, es, fs, gs; } x86_64_regs;
+    } seg;
+    union
+    {
+        struct { unsigned int ctrl, status, tag, err_off, err_sel, data_off, data_sel, cr0npx;
+                 unsigned char regs[80]; } i386_regs;
+        struct { struct { unsigned __int64 low, high; } fpregs[32]; } x86_64_regs;
+        struct { double fpr[32], fpscr; } powerpc_regs;
+    } fp;
+    union
+    {
+        struct { unsigned int dr0, dr1, dr2, dr3, dr6, dr7; } i386_regs;
+        struct { unsigned __int64 dr0, dr1, dr2, dr3, dr6, dr7; } x86_64_regs;
+        struct { unsigned int dr[8]; } powerpc_regs;
+    } debug;
+    union
+    {
+        unsigned char i386_regs[512];
+    } ext;
+} context_t;
+
+#define SERVER_CTX_CONTROL            0x01
+#define SERVER_CTX_INTEGER            0x02
+#define SERVER_CTX_SEGMENTS           0x04
+#define SERVER_CTX_FLOATING_POINT     0x08
+#define SERVER_CTX_DEBUG_REGISTERS    0x10
+#define SERVER_CTX_EXTENDED_REGISTERS 0x20
+
+
+struct send_fd
+{
+    thread_id_t tid;
+    int         fd;
+};
+
+
+struct wake_up_reply
+{
+    client_ptr_t cookie;
+    int          signaled;
+    int          __pad;
+};
+
+
+typedef __int64 timeout_t;
+#define TIMEOUT_INFINITE (((timeout_t)0x7fffffff) << 32 | 0xffffffff)
+
+
+typedef struct
+{
+    unsigned int debug_flags;
+    unsigned int console_flags;
+    obj_handle_t console;
+    obj_handle_t hstdin;
+    obj_handle_t hstdout;
+    obj_handle_t hstderr;
+    unsigned int x;
+    unsigned int y;
+    unsigned int xsize;
+    unsigned int ysize;
+    unsigned int xchars;
+    unsigned int ychars;
+    unsigned int attribute;
+    unsigned int flags;
+    unsigned int show;
+    data_size_t  curdir_len;
+    data_size_t  dllpath_len;
+    data_size_t  imagepath_len;
+    data_size_t  cmdline_len;
+    data_size_t  title_len;
+    data_size_t  desktop_len;
+    data_size_t  shellinfo_len;
+    data_size_t  runtime_len;
+
+
+
+
+
+
+
+
+} startup_info_t;
+
+
+typedef struct
+{
+    atom_t         atom;
+    int            string;
+    lparam_t       data;
+} property_data_t;
+
+
+typedef struct
+{
+    int  left;
+    int  top;
+    int  right;
+    int  bottom;
+} rectangle_t;
+
+
+typedef struct
+{
+    obj_handle_t    handle;
+    obj_handle_t    event;
+    client_ptr_t    callback;
+    client_ptr_t    iosb;
+    client_ptr_t    arg;
+    apc_param_t     cvalue;
+} async_data_t;
+
+
+
+struct hardware_msg_data
+{
+    lparam_t        info;
+    int             x;
+    int             y;
+    unsigned int    hw_id;
+    unsigned int    flags;
+    union
+    {
+        int type;
+        struct
+        {
+            int            type;
+            unsigned int   message;
+            unsigned short vkey;
+            unsigned short scan;
+        } kbd;
+        struct
+        {
+            int            type;
+            int            x;
+            int            y;
+            unsigned int   data;
+        } mouse;
+    } rawinput;
+};
+
+struct callback_msg_data
+{
+    client_ptr_t    callback;
+    lparam_t        data;
+    lparam_t        result;
+};
+
+struct winevent_msg_data
+{
+    user_handle_t   hook;
+    thread_id_t     tid;
+    client_ptr_t    hook_proc;
+
+};
+
+typedef union
+{
+    int type;
+    struct
+    {
+        int            type;
+        unsigned short vkey;
+        unsigned short scan;
+        unsigned int   flags;
+        unsigned int   time;
+        lparam_t       info;
+    } kbd;
+    struct
+    {
+        int            type;
+        int            x;
+        int            y;
+        unsigned int   data;
+        unsigned int   flags;
+        unsigned int   time;
+        lparam_t       info;
+    } mouse;
+    struct
+    {
+        int            type;
+        unsigned int   msg;
+        lparam_t       lparam;
+    } hw;
+} hw_input_t;
+
+typedef union
+{
+    unsigned char            bytes[1];
+    struct hardware_msg_data hardware;
+    struct callback_msg_data callback;
+    struct winevent_msg_data winevent;
+} message_data_t;
+
+
+typedef struct
+{
+    WCHAR          ch;
+    unsigned short attr;
+} char_info_t;
+
+
+struct filesystem_event
+{
+    int         action;
+    data_size_t len;
+    char        name[1];
+};
+
+typedef struct
+{
+    unsigned int low_part;
+    int          high_part;
+} luid_t;
+
+#define MAX_ACL_LEN 65535
+
+struct security_descriptor
+{
+    unsigned int control;
+    data_size_t  owner_len;
+    data_size_t  group_len;
+    data_size_t  sacl_len;
+    data_size_t  dacl_len;
+
+
+
+
+};
+
+struct object_attributes
+{
+    obj_handle_t rootdir;
+    data_size_t sd_len;
+    data_size_t name_len;
+
+
+};
+
+struct token_groups
+{
+    unsigned int count;
+
+
+};
+
+enum select_op
+{
+    SELECT_NONE,
+    SELECT_WAIT,
+    SELECT_WAIT_ALL,
+    SELECT_SIGNAL_AND_WAIT,
+    SELECT_KEYED_EVENT_WAIT,
+    SELECT_KEYED_EVENT_RELEASE
+};
+
+typedef union
+{
+    enum select_op op;
+    struct
+    {
+        enum select_op  op;
+        obj_handle_t    handles[MAXIMUM_WAIT_OBJECTS];
+    } wait;
+    struct
+    {
+        enum select_op  op;
+        obj_handle_t    wait;
+        obj_handle_t    signal;
+    } signal_and_wait;
+    struct
+    {
+        enum select_op  op;
+        obj_handle_t    handle;
+        client_ptr_t    key;
+    } keyed_event;
+} select_op_t;
+
+enum apc_type
+{
+    APC_NONE,
+    APC_USER,
+    APC_TIMER,
+    APC_ASYNC_IO,
+    APC_VIRTUAL_ALLOC,
+    APC_VIRTUAL_FREE,
+    APC_VIRTUAL_QUERY,
+    APC_VIRTUAL_PROTECT,
+    APC_VIRTUAL_FLUSH,
+    APC_VIRTUAL_LOCK,
+    APC_VIRTUAL_UNLOCK,
+    APC_MAP_VIEW,
+    APC_UNMAP_VIEW,
+    APC_CREATE_THREAD
+};
+
+typedef union
+{
+    enum apc_type type;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     func;
+        apc_param_t      args[3];
+    } user;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     func;
+        timeout_t        time;
+        client_ptr_t     arg;
+    } timer;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     func;
+        client_ptr_t     user;
+        client_ptr_t     sb;
+    } async_io;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     op_type;
+        client_ptr_t     addr;
+        mem_size_t       size;
+        unsigned int     zero_bits;
+        unsigned int     prot;
+    } virtual_alloc;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     op_type;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_free;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     addr;
+    } virtual_query;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     prot;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_protect;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_flush;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_lock;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_unlock;
+    struct
+    {
+        enum apc_type    type;
+        obj_handle_t     handle;
+        client_ptr_t     addr;
+        mem_size_t       size;
+        file_pos_t       offset;
+        unsigned int     alloc_type;
+        unsigned short   zero_bits;
+        unsigned short   prot;
+    } map_view;
+    struct
+    {
+        enum apc_type    type;
+        int              __pad;
+        client_ptr_t     addr;
+    } unmap_view;
+    struct
+    {
+        enum apc_type    type;
+        int              suspend;
+        client_ptr_t     func;
+        client_ptr_t     arg;
+        mem_size_t       reserve;
+        mem_size_t       commit;
+    } create_thread;
+} apc_call_t;
+
+typedef union
+{
+    enum apc_type type;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     apc;
+        unsigned int     total;
+    } async_io;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_alloc;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_free;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     base;
+        client_ptr_t     alloc_base;
+        mem_size_t       size;
+        unsigned short   state;
+        unsigned short   prot;
+        unsigned short   alloc_prot;
+        unsigned short   alloc_type;
+    } virtual_query;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+        unsigned int     prot;
+    } virtual_protect;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_flush;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_lock;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } virtual_unlock;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        client_ptr_t     addr;
+        mem_size_t       size;
+    } map_view;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+    } unmap_view;
+    struct
+    {
+        enum apc_type    type;
+        unsigned int     status;
+        thread_id_t      tid;
+        obj_handle_t     handle;
+    } create_thread;
+} apc_result_t;
+
+struct rawinput_device
+{
+    unsigned short usage_page;
+    unsigned short usage;
+    unsigned int   flags;
+    user_handle_t  target;
+};
+
+
+
+
+
+struct new_process_request
+{
+    struct request_header __header;
+    int          inherit_all;
+    unsigned int create_flags;
+    int          socket_fd;
+    obj_handle_t exe_file;
+    unsigned int process_access;
+    unsigned int process_attr;
+    unsigned int thread_access;
+    unsigned int thread_attr;
+    data_size_t  info_size;
+    /* VARARG(info,startup_info,info_size); */
+    /* VARARG(env,unicode_str); */
+};
+struct new_process_reply
+{
+    struct reply_header __header;
+    obj_handle_t info;
+    process_id_t pid;
+    obj_handle_t phandle;
+    thread_id_t  tid;
+    obj_handle_t thandle;
+    char __pad_28[4];
+};
+
+
+
+struct get_new_process_info_request
+{
+    struct request_header __header;
+    obj_handle_t info;
+};
+struct get_new_process_info_reply
+{
+    struct reply_header __header;
+    int          success;
+    int          exit_code;
+};
+
+
+
+struct new_thread_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    int          suspend;
+    int          request_fd;
+    char __pad_28[4];
+};
+struct new_thread_reply
+{
+    struct reply_header __header;
+    thread_id_t  tid;
+    obj_handle_t handle;
+};
+
+
+
+struct get_startup_info_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct get_startup_info_reply
+{
+    struct reply_header __header;
+    obj_handle_t exe_file;
+    data_size_t  info_size;
+    /* VARARG(info,startup_info,info_size); */
+    /* VARARG(env,unicode_str); */
+};
+
+
+
+struct init_process_done_request
+{
+    struct request_header __header;
+    int          gui;
+    mod_handle_t module;
+    client_ptr_t ldt_copy;
+    client_ptr_t entry;
+};
+struct init_process_done_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct init_thread_request
+{
+    struct request_header __header;
+    int          unix_pid;
+    int          unix_tid;
+    int          debug_level;
+    client_ptr_t teb;
+    client_ptr_t entry;
+    int          reply_fd;
+    int          wait_fd;
+    cpu_type_t   cpu;
+    char __pad_52[4];
+};
+struct init_thread_reply
+{
+    struct reply_header __header;
+    process_id_t pid;
+    thread_id_t  tid;
+    timeout_t    server_start;
+    data_size_t  info_size;
+    int          version;
+    unsigned int all_cpus;
+    char __pad_36[4];
+};
+
+
+
+struct terminate_process_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          exit_code;
+    char __pad_20[4];
+};
+struct terminate_process_reply
+{
+    struct reply_header __header;
+    int          self;
+    char __pad_12[4];
+};
+
+
+
+struct terminate_thread_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          exit_code;
+    char __pad_20[4];
+};
+struct terminate_thread_reply
+{
+    struct reply_header __header;
+    int          self;
+    int          last;
+};
+
+
+
+struct get_process_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_process_info_reply
+{
+    struct reply_header __header;
+    process_id_t pid;
+    process_id_t ppid;
+    affinity_t   affinity;
+    client_ptr_t peb;
+    timeout_t    start_time;
+    timeout_t    end_time;
+    int          exit_code;
+    int          priority;
+    cpu_type_t   cpu;
+    int          debugger_present;
+};
+
+
+
+struct set_process_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          mask;
+    int          priority;
+    affinity_t   affinity;
+};
+struct set_process_info_reply
+{
+    struct reply_header __header;
+};
+#define SET_PROCESS_INFO_PRIORITY 0x01
+#define SET_PROCESS_INFO_AFFINITY 0x02
+
+
+
+struct get_thread_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    thread_id_t  tid_in;
+    char __pad_20[4];
+};
+struct get_thread_info_reply
+{
+    struct reply_header __header;
+    process_id_t pid;
+    thread_id_t  tid;
+    client_ptr_t teb;
+    affinity_t   affinity;
+    timeout_t    creation_time;
+    timeout_t    exit_time;
+    int          exit_code;
+    int          priority;
+    int          last;
+    char __pad_60[4];
+};
+
+
+
+struct set_thread_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          mask;
+    int          priority;
+    affinity_t   affinity;
+    obj_handle_t token;
+    char __pad_36[4];
+};
+struct set_thread_info_reply
+{
+    struct reply_header __header;
+};
+#define SET_THREAD_INFO_PRIORITY 0x01
+#define SET_THREAD_INFO_AFFINITY 0x02
+#define SET_THREAD_INFO_TOKEN    0x04
+
+
+
+struct get_dll_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    mod_handle_t base_address;
+};
+struct get_dll_info_reply
+{
+    struct reply_header __header;
+    client_ptr_t entry_point;
+    data_size_t  size;
+    data_size_t  filename_len;
+    /* VARARG(filename,unicode_str); */
+};
+
+
+
+struct suspend_thread_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct suspend_thread_reply
+{
+    struct reply_header __header;
+    int          count;
+    char __pad_12[4];
+};
+
+
+
+struct resume_thread_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct resume_thread_reply
+{
+    struct reply_header __header;
+    int          count;
+    char __pad_12[4];
+};
+
+
+
+struct load_dll_request
+{
+    struct request_header __header;
+    obj_handle_t mapping;
+    mod_handle_t base;
+    client_ptr_t name;
+    data_size_t  size;
+    int          dbg_offset;
+    int          dbg_size;
+    /* VARARG(filename,unicode_str); */
+    char __pad_44[4];
+};
+struct load_dll_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct unload_dll_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+    mod_handle_t base;
+};
+struct unload_dll_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct queue_apc_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    apc_call_t   call;
+};
+struct queue_apc_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    int          self;
+};
+
+
+
+struct get_apc_result_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_apc_result_reply
+{
+    struct reply_header __header;
+    apc_result_t result;
+};
+
+
+
+struct close_handle_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct close_handle_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_handle_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          flags;
+    int          mask;
+};
+struct set_handle_info_reply
+{
+    struct reply_header __header;
+    int          old_flags;
+    char __pad_12[4];
+};
+
+
+
+struct dup_handle_request
+{
+    struct request_header __header;
+    obj_handle_t src_process;
+    obj_handle_t src_handle;
+    obj_handle_t dst_process;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int options;
+    char __pad_36[4];
+};
+struct dup_handle_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    int          self;
+    int          closed;
+    char __pad_20[4];
+};
+#define DUP_HANDLE_CLOSE_SOURCE  DUPLICATE_CLOSE_SOURCE
+#define DUP_HANDLE_SAME_ACCESS   DUPLICATE_SAME_ACCESS
+#define DUP_HANDLE_MAKE_GLOBAL   0x80000000
+
+
+
+struct open_process_request
+{
+    struct request_header __header;
+    process_id_t pid;
+    unsigned int access;
+    unsigned int attributes;
+};
+struct open_process_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_thread_request
+{
+    struct request_header __header;
+    thread_id_t  tid;
+    unsigned int access;
+    unsigned int attributes;
+};
+struct open_thread_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct select_request
+{
+    struct request_header __header;
+    int          flags;
+    client_ptr_t cookie;
+    timeout_t    timeout;
+    obj_handle_t prev_apc;
+    /* VARARG(result,apc_result); */
+    /* VARARG(data,select_op); */
+    char __pad_36[4];
+};
+struct select_reply
+{
+    struct reply_header __header;
+    timeout_t    timeout;
+    apc_call_t   call;
+    obj_handle_t apc_handle;
+    char __pad_60[4];
+};
+#define SELECT_ALERTABLE     1
+#define SELECT_INTERRUPTIBLE 2
+
+
+
+struct create_event_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    int          manual_reset;
+    int          initial_state;
+    /* VARARG(objattr,object_attributes); */
+    char __pad_28[4];
+};
+struct create_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+struct event_op_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    int           op;
+    char __pad_20[4];
+};
+struct event_op_reply
+{
+    struct reply_header __header;
+};
+enum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT };
+
+struct query_event_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+};
+struct query_event_reply
+{
+    struct reply_header __header;
+    int          manual_reset;
+    int          state;
+};
+
+
+struct open_event_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct create_keyed_event_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    /* VARARG(objattr,object_attributes); */
+    char __pad_20[4];
+};
+struct create_keyed_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+struct open_keyed_event_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_keyed_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct create_mutex_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    int          owned;
+    /* VARARG(objattr,object_attributes); */
+};
+struct create_mutex_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct release_mutex_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct release_mutex_reply
+{
+    struct reply_header __header;
+    unsigned int prev_count;
+    char __pad_12[4];
+};
+
+
+
+struct open_mutex_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_mutex_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct create_semaphore_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int initial;
+    unsigned int max;
+    /* VARARG(objattr,object_attributes); */
+    char __pad_28[4];
+};
+struct create_semaphore_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct release_semaphore_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    unsigned int count;
+    char __pad_20[4];
+};
+struct release_semaphore_reply
+{
+    struct reply_header __header;
+    unsigned int prev_count;
+    char __pad_12[4];
+};
+
+
+
+struct open_semaphore_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_semaphore_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct create_file_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int sharing;
+    int          create;
+    unsigned int options;
+    unsigned int attrs;
+    /* VARARG(objattr,object_attributes); */
+    /* VARARG(filename,string); */
+    char __pad_36[4];
+};
+struct create_file_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_file_object_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    unsigned int sharing;
+    unsigned int options;
+    /* VARARG(filename,unicode_str); */
+};
+struct open_file_object_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct alloc_file_handle_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    int          fd;
+};
+struct alloc_file_handle_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct get_handle_unix_name_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct get_handle_unix_name_reply
+{
+    struct reply_header __header;
+    data_size_t    name_len;
+    /* VARARG(name,string); */
+    char __pad_12[4];
+};
+
+
+
+struct get_handle_fd_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_handle_fd_reply
+{
+    struct reply_header __header;
+    int          type;
+    int          cacheable;
+    unsigned int access;
+    unsigned int options;
+};
+enum server_fd_type
+{
+    FD_TYPE_INVALID,
+    FD_TYPE_FILE,
+    FD_TYPE_DIR,
+    FD_TYPE_SOCKET,
+    FD_TYPE_SERIAL,
+    FD_TYPE_PIPE,
+    FD_TYPE_MAILSLOT,
+    FD_TYPE_CHAR,
+    FD_TYPE_DEVICE,
+    FD_TYPE_NB_TYPES
+};
+
+
+
+struct flush_file_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct flush_file_reply
+{
+    struct reply_header __header;
+    obj_handle_t event;
+    char __pad_12[4];
+};
+
+
+
+struct lock_file_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    file_pos_t   offset;
+    file_pos_t   count;
+    int          shared;
+    int          wait;
+};
+struct lock_file_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    int          overlapped;
+};
+
+
+
+struct unlock_file_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    file_pos_t   offset;
+    file_pos_t   count;
+};
+struct unlock_file_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct create_socket_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    int          family;
+    int          type;
+    int          protocol;
+    unsigned int flags;
+    char __pad_36[4];
+};
+struct create_socket_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct accept_socket_request
+{
+    struct request_header __header;
+    obj_handle_t lhandle;
+    unsigned int access;
+    unsigned int attributes;
+};
+struct accept_socket_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct accept_into_socket_request
+{
+    struct request_header __header;
+    obj_handle_t lhandle;
+    obj_handle_t ahandle;
+    char __pad_20[4];
+};
+struct accept_into_socket_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_socket_event_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    unsigned int  mask;
+    obj_handle_t  event;
+    user_handle_t window;
+    unsigned int  msg;
+};
+struct set_socket_event_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_socket_event_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          service;
+    obj_handle_t c_event;
+};
+struct get_socket_event_reply
+{
+    struct reply_header __header;
+    unsigned int mask;
+    unsigned int pmask;
+    unsigned int state;
+    /* VARARG(errors,ints); */
+    char __pad_20[4];
+};
+
+
+
+struct get_socket_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_socket_info_reply
+{
+    struct reply_header __header;
+    int family;
+    int type;
+    int protocol;
+    char __pad_20[4];
+};
+
+
+
+struct enable_socket_event_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    unsigned int mask;
+    unsigned int sstate;
+    unsigned int cstate;
+    char __pad_28[4];
+};
+struct enable_socket_event_reply
+{
+    struct reply_header __header;
+};
+
+struct set_socket_deferred_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    obj_handle_t deferred;
+    char __pad_20[4];
+};
+struct set_socket_deferred_reply
+{
+    struct reply_header __header;
+};
+
+
+struct alloc_console_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    process_id_t pid;
+    int          input_fd;
+    char __pad_28[4];
+};
+struct alloc_console_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle_in;
+    obj_handle_t event;
+};
+
+
+
+struct free_console_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct free_console_reply
+{
+    struct reply_header __header;
+};
+
+
+#define CONSOLE_RENDERER_NONE_EVENT        0x00
+#define CONSOLE_RENDERER_TITLE_EVENT       0x01
+#define CONSOLE_RENDERER_ACTIVE_SB_EVENT   0x02
+#define CONSOLE_RENDERER_SB_RESIZE_EVENT   0x03
+#define CONSOLE_RENDERER_UPDATE_EVENT      0x04
+#define CONSOLE_RENDERER_CURSOR_POS_EVENT  0x05
+#define CONSOLE_RENDERER_CURSOR_GEOM_EVENT 0x06
+#define CONSOLE_RENDERER_DISPLAY_EVENT     0x07
+#define CONSOLE_RENDERER_EXIT_EVENT        0x08
+struct console_renderer_event
+{
+    short event;
+    union
+    {
+        struct update
+        {
+            short top;
+            short bottom;
+        } update;
+        struct resize
+        {
+            short width;
+            short height;
+        } resize;
+        struct cursor_pos
+        {
+            short x;
+            short y;
+        } cursor_pos;
+        struct cursor_geom
+        {
+            short visible;
+            short size;
+        } cursor_geom;
+        struct display
+        {
+            short left;
+            short top;
+            short width;
+            short height;
+        } display;
+    } u;
+};
+
+
+struct get_console_renderer_events_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_console_renderer_events_reply
+{
+    struct reply_header __header;
+    /* VARARG(data,bytes); */
+};
+
+
+
+struct open_console_request
+{
+    struct request_header __header;
+    obj_handle_t from;
+
+    unsigned int access;
+    unsigned int attributes;
+    int          share;
+    char __pad_28[4];
+};
+struct open_console_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct get_console_wait_event_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct get_console_wait_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+struct get_console_mode_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_console_mode_reply
+{
+    struct reply_header __header;
+    int          mode;
+    char __pad_12[4];
+};
+
+
+
+struct set_console_mode_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          mode;
+    char __pad_20[4];
+};
+struct set_console_mode_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_console_input_info_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    int           mask;
+    obj_handle_t  active_sb;
+    int           history_mode;
+    int           history_size;
+    int           edition_mode;
+    int           input_cp;
+    int           output_cp;
+    user_handle_t win;
+    /* VARARG(title,unicode_str); */
+};
+struct set_console_input_info_reply
+{
+    struct reply_header __header;
+};
+#define SET_CONSOLE_INPUT_INFO_ACTIVE_SB        0x01
+#define SET_CONSOLE_INPUT_INFO_TITLE            0x02
+#define SET_CONSOLE_INPUT_INFO_HISTORY_MODE     0x04
+#define SET_CONSOLE_INPUT_INFO_HISTORY_SIZE     0x08
+#define SET_CONSOLE_INPUT_INFO_EDITION_MODE     0x10
+#define SET_CONSOLE_INPUT_INFO_INPUT_CODEPAGE   0x20
+#define SET_CONSOLE_INPUT_INFO_OUTPUT_CODEPAGE  0x40
+#define SET_CONSOLE_INPUT_INFO_WIN              0x80
+
+
+
+struct get_console_input_info_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+};
+struct get_console_input_info_reply
+{
+    struct reply_header __header;
+    int           history_mode;
+    int           history_size;
+    int           history_index;
+    int           edition_mode;
+    int           input_cp;
+    int           output_cp;
+    user_handle_t win;
+    /* VARARG(title,unicode_str); */
+    char __pad_36[4];
+};
+
+
+
+struct append_console_input_history_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    /* VARARG(line,unicode_str); */
+};
+struct append_console_input_history_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_console_input_history_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          index;
+    char __pad_20[4];
+};
+struct get_console_input_history_reply
+{
+    struct reply_header __header;
+    int          total;
+    /* VARARG(line,unicode_str); */
+    char __pad_12[4];
+};
+
+
+
+struct create_console_output_request
+{
+    struct request_header __header;
+    obj_handle_t handle_in;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int share;
+    int          fd;
+};
+struct create_console_output_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle_out;
+    char __pad_12[4];
+};
+
+
+
+struct set_console_output_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          mask;
+    short int    cursor_size;
+    short int    cursor_visible;
+    short int    cursor_x;
+    short int    cursor_y;
+    short int    width;
+    short int    height;
+    short int    attr;
+    short int    win_left;
+    short int    win_top;
+    short int    win_right;
+    short int    win_bottom;
+    short int    max_width;
+    short int    max_height;
+    char __pad_46[2];
+};
+struct set_console_output_info_reply
+{
+    struct reply_header __header;
+};
+#define SET_CONSOLE_OUTPUT_INFO_CURSOR_GEOM     0x01
+#define SET_CONSOLE_OUTPUT_INFO_CURSOR_POS      0x02
+#define SET_CONSOLE_OUTPUT_INFO_SIZE            0x04
+#define SET_CONSOLE_OUTPUT_INFO_ATTR            0x08
+#define SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW  0x10
+#define SET_CONSOLE_OUTPUT_INFO_MAX_SIZE        0x20
+
+
+
+struct get_console_output_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_console_output_info_reply
+{
+    struct reply_header __header;
+    short int    cursor_size;
+    short int    cursor_visible;
+    short int    cursor_x;
+    short int    cursor_y;
+    short int    width;
+    short int    height;
+    short int    attr;
+    short int    win_left;
+    short int    win_top;
+    short int    win_right;
+    short int    win_bottom;
+    short int    max_width;
+    short int    max_height;
+    char __pad_34[6];
+};
+
+
+struct write_console_input_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    /* VARARG(rec,input_records); */
+};
+struct write_console_input_reply
+{
+    struct reply_header __header;
+    int          written;
+    char __pad_12[4];
+};
+
+
+
+struct read_console_input_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          flush;
+    char __pad_20[4];
+};
+struct read_console_input_reply
+{
+    struct reply_header __header;
+    int          read;
+    /* VARARG(rec,input_records); */
+    char __pad_12[4];
+};
+
+
+
+struct write_console_output_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          x;
+    int          y;
+    int          mode;
+    int          wrap;
+    /* VARARG(data,bytes); */
+};
+struct write_console_output_reply
+{
+    struct reply_header __header;
+    int          written;
+    int          width;
+    int          height;
+    char __pad_20[4];
+};
+enum char_info_mode
+{
+    CHAR_INFO_MODE_TEXT,
+    CHAR_INFO_MODE_ATTR,
+    CHAR_INFO_MODE_TEXTATTR,
+    CHAR_INFO_MODE_TEXTSTDATTR
+};
+
+
+
+struct fill_console_output_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          x;
+    int          y;
+    int          mode;
+    int          count;
+    int          wrap;
+    char_info_t  data;
+};
+struct fill_console_output_reply
+{
+    struct reply_header __header;
+    int          written;
+    char __pad_12[4];
+};
+
+
+
+struct read_console_output_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          x;
+    int          y;
+    int          mode;
+    int          wrap;
+};
+struct read_console_output_reply
+{
+    struct reply_header __header;
+    int          width;
+    int          height;
+    /* VARARG(data,bytes); */
+};
+
+
+
+struct move_console_output_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    short int    x_src;
+    short int    y_src;
+    short int    x_dst;
+    short int    y_dst;
+    short int    w;
+    short int    h;
+    char __pad_28[4];
+};
+struct move_console_output_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct send_console_signal_request
+{
+    struct request_header __header;
+    int          signal;
+    process_id_t group_id;
+    char __pad_20[4];
+};
+struct send_console_signal_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct read_directory_changes_request
+{
+    struct request_header __header;
+    unsigned int filter;
+    int          subtree;
+    int          want_data;
+    async_data_t async;
+};
+struct read_directory_changes_reply
+{
+    struct reply_header __header;
+};
+
+
+struct read_change_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct read_change_reply
+{
+    struct reply_header __header;
+    /* VARARG(events,filesystem_event); */
+};
+
+
+
+struct create_mapping_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int protect;
+    mem_size_t   size;
+    obj_handle_t file_handle;
+    /* VARARG(objattr,object_attributes); */
+    char __pad_36[4];
+};
+struct create_mapping_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+#define VPROT_READ       0x01
+#define VPROT_WRITE      0x02
+#define VPROT_EXEC       0x04
+#define VPROT_WRITECOPY  0x08
+#define VPROT_GUARD      0x10
+#define VPROT_NOCACHE    0x20
+#define VPROT_COMMITTED  0x40
+#define VPROT_WRITEWATCH 0x80
+
+#define VPROT_IMAGE      0x0100
+#define VPROT_SYSTEM     0x0200
+#define VPROT_VALLOC     0x0400
+#define VPROT_NOEXEC     0x0800
+
+
+
+struct open_mapping_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_mapping_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct get_mapping_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    unsigned int access;
+    char __pad_20[4];
+};
+struct get_mapping_info_reply
+{
+    struct reply_header __header;
+    mem_size_t   size;
+    int          protect;
+    int          header_size;
+    client_ptr_t base;
+    obj_handle_t mapping;
+    obj_handle_t shared_file;
+};
+
+
+
+struct get_mapping_committed_range_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    file_pos_t   offset;
+};
+struct get_mapping_committed_range_reply
+{
+    struct reply_header __header;
+    mem_size_t   size;
+    int          committed;
+    char __pad_20[4];
+};
+
+
+
+struct add_mapping_committed_range_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    file_pos_t   offset;
+    mem_size_t   size;
+};
+struct add_mapping_committed_range_reply
+{
+    struct reply_header __header;
+};
+
+
+#define SNAP_PROCESS    0x00000001
+#define SNAP_THREAD     0x00000002
+
+struct create_snapshot_request
+{
+    struct request_header __header;
+    unsigned int attributes;
+    unsigned int flags;
+    char __pad_20[4];
+};
+struct create_snapshot_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct next_process_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          reset;
+    char __pad_20[4];
+};
+struct next_process_reply
+{
+    struct reply_header __header;
+    int          count;
+    process_id_t pid;
+    process_id_t ppid;
+    int          threads;
+    int          priority;
+    int          handles;
+    int          unix_pid;
+    /* VARARG(filename,unicode_str); */
+    char __pad_36[4];
+};
+
+
+
+struct next_thread_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          reset;
+    char __pad_20[4];
+};
+struct next_thread_reply
+{
+    struct reply_header __header;
+    int          count;
+    process_id_t pid;
+    thread_id_t  tid;
+    int          base_pri;
+    int          delta_pri;
+    char __pad_28[4];
+};
+
+
+
+struct wait_debug_event_request
+{
+    struct request_header __header;
+    int           get_handle;
+};
+struct wait_debug_event_reply
+{
+    struct reply_header __header;
+    process_id_t  pid;
+    thread_id_t   tid;
+    obj_handle_t  wait;
+    /* VARARG(event,debug_event); */
+    char __pad_20[4];
+};
+
+
+
+struct queue_exception_event_request
+{
+    struct request_header __header;
+    int           first;
+    unsigned int  code;
+    unsigned int  flags;
+    client_ptr_t  record;
+    client_ptr_t  address;
+    data_size_t   len;
+    /* VARARG(params,uints64,len); */
+    /* VARARG(context,context); */
+    char __pad_44[4];
+};
+struct queue_exception_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t     handle;
+    char __pad_12[4];
+};
+
+
+
+struct get_exception_status_request
+{
+    struct request_header __header;
+    obj_handle_t     handle;
+};
+struct get_exception_status_reply
+{
+    struct reply_header __header;
+    /* VARARG(context,context); */
+};
+
+
+
+struct output_debug_string_request
+{
+    struct request_header __header;
+    data_size_t   length;
+    client_ptr_t  string;
+};
+struct output_debug_string_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct continue_debug_event_request
+{
+    struct request_header __header;
+    process_id_t pid;
+    thread_id_t  tid;
+    int          status;
+};
+struct continue_debug_event_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct debug_process_request
+{
+    struct request_header __header;
+    process_id_t pid;
+    int          attach;
+    char __pad_20[4];
+};
+struct debug_process_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct debug_break_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct debug_break_reply
+{
+    struct reply_header __header;
+    int          self;
+    char __pad_12[4];
+};
+
+
+
+struct set_debugger_kill_on_exit_request
+{
+    struct request_header __header;
+    int          kill_on_exit;
+};
+struct set_debugger_kill_on_exit_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct read_process_memory_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    client_ptr_t addr;
+};
+struct read_process_memory_reply
+{
+    struct reply_header __header;
+    /* VARARG(data,bytes); */
+};
+
+
+
+struct write_process_memory_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    client_ptr_t addr;
+    /* VARARG(data,bytes); */
+};
+struct write_process_memory_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct create_key_request
+{
+    struct request_header __header;
+    obj_handle_t parent;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int options;
+    data_size_t  namelen;
+    /* VARARG(name,unicode_str,namelen); */
+    /* VARARG(class,unicode_str); */
+};
+struct create_key_reply
+{
+    struct reply_header __header;
+    obj_handle_t hkey;
+    int          created;
+};
+
+
+struct open_key_request
+{
+    struct request_header __header;
+    obj_handle_t parent;
+    unsigned int access;
+    unsigned int attributes;
+    /* VARARG(name,unicode_str); */
+};
+struct open_key_reply
+{
+    struct reply_header __header;
+    obj_handle_t hkey;
+    char __pad_12[4];
+};
+
+
+
+struct delete_key_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+};
+struct delete_key_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct flush_key_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+};
+struct flush_key_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct enum_key_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    int          index;
+    int          info_class;
+};
+struct enum_key_reply
+{
+    struct reply_header __header;
+    int          subkeys;
+    int          max_subkey;
+    int          max_class;
+    int          values;
+    int          max_value;
+    int          max_data;
+    timeout_t    modif;
+    data_size_t  total;
+    data_size_t  namelen;
+    /* VARARG(name,unicode_str,namelen); */
+    /* VARARG(class,unicode_str); */
+};
+
+
+
+struct set_key_value_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    int          type;
+    data_size_t  namelen;
+    /* VARARG(name,unicode_str,namelen); */
+    /* VARARG(data,bytes); */
+};
+struct set_key_value_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_key_value_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    /* VARARG(name,unicode_str); */
+};
+struct get_key_value_reply
+{
+    struct reply_header __header;
+    int          type;
+    data_size_t  total;
+    /* VARARG(data,bytes); */
+};
+
+
+
+struct enum_key_value_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    int          index;
+    int          info_class;
+};
+struct enum_key_value_reply
+{
+    struct reply_header __header;
+    int          type;
+    data_size_t  total;
+    data_size_t  namelen;
+    /* VARARG(name,unicode_str,namelen); */
+    /* VARARG(data,bytes); */
+    char __pad_20[4];
+};
+
+
+
+struct delete_key_value_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    /* VARARG(name,unicode_str); */
+};
+struct delete_key_value_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct load_registry_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    obj_handle_t file;
+    /* VARARG(name,unicode_str); */
+    char __pad_20[4];
+};
+struct load_registry_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct unload_registry_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+};
+struct unload_registry_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct save_registry_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    obj_handle_t file;
+    char __pad_20[4];
+};
+struct save_registry_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_registry_notification_request
+{
+    struct request_header __header;
+    obj_handle_t hkey;
+    obj_handle_t event;
+    int          subtree;
+    unsigned int filter;
+    char __pad_28[4];
+};
+struct set_registry_notification_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct create_timer_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    int          manual;
+    /* VARARG(name,unicode_str); */
+    char __pad_28[4];
+};
+struct create_timer_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_timer_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_timer_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+struct set_timer_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    timeout_t    expire;
+    client_ptr_t callback;
+    client_ptr_t arg;
+    int          period;
+    char __pad_44[4];
+};
+struct set_timer_reply
+{
+    struct reply_header __header;
+    int          signaled;
+    char __pad_12[4];
+};
+
+
+struct cancel_timer_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct cancel_timer_reply
+{
+    struct reply_header __header;
+     int         signaled;
+    char __pad_12[4];
+};
+
+
+struct get_timer_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_timer_info_reply
+{
+    struct reply_header __header;
+    timeout_t    when;
+    int          signaled;
+    char __pad_20[4];
+};
+
+
+
+struct get_thread_context_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    unsigned int flags;
+    int          suspend;
+};
+struct get_thread_context_reply
+{
+    struct reply_header __header;
+    int          self;
+    /* VARARG(context,context); */
+    char __pad_12[4];
+};
+
+
+
+struct set_thread_context_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          suspend;
+    /* VARARG(context,context); */
+    char __pad_20[4];
+};
+struct set_thread_context_reply
+{
+    struct reply_header __header;
+    int          self;
+    char __pad_12[4];
+};
+
+
+
+struct get_selector_entry_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    int           entry;
+    char __pad_20[4];
+};
+struct get_selector_entry_reply
+{
+    struct reply_header __header;
+    unsigned int  base;
+    unsigned int  limit;
+    unsigned char flags;
+    char __pad_17[7];
+};
+
+
+
+struct add_atom_request
+{
+    struct request_header __header;
+    obj_handle_t  table;
+    /* VARARG(name,unicode_str); */
+};
+struct add_atom_reply
+{
+    struct reply_header __header;
+    atom_t        atom;
+    char __pad_12[4];
+};
+
+
+
+struct delete_atom_request
+{
+    struct request_header __header;
+    obj_handle_t  table;
+    atom_t        atom;
+    char __pad_20[4];
+};
+struct delete_atom_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct find_atom_request
+{
+    struct request_header __header;
+    obj_handle_t table;
+    /* VARARG(name,unicode_str); */
+};
+struct find_atom_reply
+{
+    struct reply_header __header;
+    atom_t       atom;
+    char __pad_12[4];
+};
+
+
+
+struct get_atom_information_request
+{
+    struct request_header __header;
+    obj_handle_t table;
+    atom_t       atom;
+    char __pad_20[4];
+};
+struct get_atom_information_reply
+{
+    struct reply_header __header;
+    int          count;
+    int          pinned;
+    data_size_t  total;
+    /* VARARG(name,unicode_str); */
+    char __pad_20[4];
+};
+
+
+
+struct set_atom_information_request
+{
+    struct request_header __header;
+    obj_handle_t table;
+    atom_t       atom;
+    int          pinned;
+};
+struct set_atom_information_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct empty_atom_table_request
+{
+    struct request_header __header;
+    obj_handle_t table;
+    int          if_pinned;
+    char __pad_20[4];
+};
+struct empty_atom_table_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct init_atom_table_request
+{
+    struct request_header __header;
+    int          entries;
+};
+struct init_atom_table_reply
+{
+    struct reply_header __header;
+    obj_handle_t table;
+    char __pad_12[4];
+};
+
+
+
+struct get_msg_queue_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct get_msg_queue_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct set_queue_fd_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct set_queue_fd_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_queue_mask_request
+{
+    struct request_header __header;
+    unsigned int wake_mask;
+    unsigned int changed_mask;
+    int          skip_wait;
+};
+struct set_queue_mask_reply
+{
+    struct reply_header __header;
+    unsigned int wake_bits;
+    unsigned int changed_bits;
+};
+
+
+
+struct get_queue_status_request
+{
+    struct request_header __header;
+    int          clear;
+};
+struct get_queue_status_reply
+{
+    struct reply_header __header;
+    unsigned int wake_bits;
+    unsigned int changed_bits;
+};
+
+
+
+struct get_process_idle_event_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_process_idle_event_reply
+{
+    struct reply_header __header;
+    obj_handle_t event;
+    char __pad_12[4];
+};
+
+
+
+struct send_message_request
+{
+    struct request_header __header;
+    thread_id_t     id;
+    int             type;
+    int             flags;
+    user_handle_t   win;
+    unsigned int    msg;
+    lparam_t        wparam;
+    lparam_t        lparam;
+    timeout_t       timeout;
+    /* VARARG(data,message_data); */
+};
+struct send_message_reply
+{
+    struct reply_header __header;
+};
+
+struct post_quit_message_request
+{
+    struct request_header __header;
+    int             exit_code;
+};
+struct post_quit_message_reply
+{
+    struct reply_header __header;
+};
+
+enum message_type
+{
+    MSG_ASCII,
+    MSG_UNICODE,
+    MSG_NOTIFY,
+    MSG_CALLBACK,
+    MSG_CALLBACK_RESULT,
+    MSG_OTHER_PROCESS,
+    MSG_POSTED,
+    MSG_HARDWARE,
+    MSG_WINEVENT,
+    MSG_HOOK_LL
+};
+#define SEND_MSG_ABORT_IF_HUNG  0x01
+
+
+
+struct send_hardware_message_request
+{
+    struct request_header __header;
+    user_handle_t   win;
+    hw_input_t      input;
+    unsigned int    flags;
+    char __pad_52[4];
+};
+struct send_hardware_message_reply
+{
+    struct reply_header __header;
+    int             wait;
+    int             prev_x;
+    int             prev_y;
+    int             new_x;
+    int             new_y;
+    /* VARARG(keystate,bytes); */
+    char __pad_28[4];
+};
+#define SEND_HWMSG_INJECTED    0x01
+
+
+
+struct get_message_request
+{
+    struct request_header __header;
+    unsigned int    flags;
+    user_handle_t   get_win;
+    unsigned int    get_first;
+    unsigned int    get_last;
+    unsigned int    hw_id;
+    unsigned int    wake_mask;
+    unsigned int    changed_mask;
+};
+struct get_message_reply
+{
+    struct reply_header __header;
+    user_handle_t   win;
+    unsigned int    msg;
+    lparam_t        wparam;
+    lparam_t        lparam;
+    int             type;
+    unsigned int    time;
+    unsigned int    active_hooks;
+    data_size_t     total;
+    /* VARARG(data,message_data); */
+};
+
+
+
+struct reply_message_request
+{
+    struct request_header __header;
+    int             remove;
+    lparam_t        result;
+    /* VARARG(data,bytes); */
+};
+struct reply_message_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct accept_hardware_message_request
+{
+    struct request_header __header;
+    unsigned int    hw_id;
+    int             remove;
+    user_handle_t   new_win;
+};
+struct accept_hardware_message_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_message_reply_request
+{
+    struct request_header __header;
+    int             cancel;
+};
+struct get_message_reply_reply
+{
+    struct reply_header __header;
+    lparam_t        result;
+    /* VARARG(data,bytes); */
+};
+
+
+
+struct set_win_timer_request
+{
+    struct request_header __header;
+    user_handle_t   win;
+    unsigned int    msg;
+    unsigned int    rate;
+    lparam_t        id;
+    lparam_t        lparam;
+};
+struct set_win_timer_reply
+{
+    struct reply_header __header;
+    lparam_t        id;
+};
+
+
+
+struct kill_win_timer_request
+{
+    struct request_header __header;
+    user_handle_t   win;
+    lparam_t        id;
+    unsigned int    msg;
+    char __pad_28[4];
+};
+struct kill_win_timer_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct is_window_hung_request
+{
+    struct request_header __header;
+    user_handle_t   win;
+};
+struct is_window_hung_reply
+{
+    struct reply_header __header;
+    int is_hung;
+    char __pad_12[4];
+};
+
+
+
+struct get_serial_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct get_serial_info_reply
+{
+    struct reply_header __header;
+    unsigned int readinterval;
+    unsigned int readconst;
+    unsigned int readmult;
+    unsigned int writeconst;
+    unsigned int writemult;
+    unsigned int eventmask;
+    unsigned int cookie;
+    char __pad_36[4];
+};
+
+
+
+struct set_serial_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    int          flags;
+    unsigned int readinterval;
+    unsigned int readconst;
+    unsigned int readmult;
+    unsigned int writeconst;
+    unsigned int writemult;
+    unsigned int eventmask;
+    char __pad_44[4];
+};
+struct set_serial_info_reply
+{
+    struct reply_header __header;
+};
+#define SERIALINFO_SET_TIMEOUTS  0x01
+#define SERIALINFO_SET_MASK      0x02
+
+
+
+struct register_async_request
+{
+    struct request_header __header;
+    int          type;
+    async_data_t async;
+    int          count;
+    char __pad_60[4];
+};
+struct register_async_reply
+{
+    struct reply_header __header;
+};
+#define ASYNC_TYPE_READ  0x01
+#define ASYNC_TYPE_WRITE 0x02
+#define ASYNC_TYPE_WAIT  0x03
+
+
+
+struct cancel_async_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    client_ptr_t iosb;
+    int          only_thread;
+    char __pad_28[4];
+};
+struct cancel_async_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct ioctl_request
+{
+    struct request_header __header;
+    ioctl_code_t   code;
+    async_data_t   async;
+    int            blocking;
+    /* VARARG(in_data,bytes); */
+    char __pad_60[4];
+};
+struct ioctl_reply
+{
+    struct reply_header __header;
+    obj_handle_t   wait;
+    unsigned int   options;
+    /* VARARG(out_data,bytes); */
+};
+
+
+
+struct get_ioctl_result_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+    client_ptr_t   user_arg;
+};
+struct get_ioctl_result_reply
+{
+    struct reply_header __header;
+    /* VARARG(out_data,bytes); */
+};
+
+
+
+struct create_named_pipe_request
+{
+    struct request_header __header;
+    unsigned int   access;
+    unsigned int   attributes;
+    obj_handle_t   rootdir;
+    unsigned int   options;
+    unsigned int   sharing;
+    unsigned int   maxinstances;
+    unsigned int   outsize;
+    unsigned int   insize;
+    char __pad_44[4];
+    timeout_t      timeout;
+    unsigned int   flags;
+    /* VARARG(name,unicode_str); */
+    char __pad_60[4];
+};
+struct create_named_pipe_reply
+{
+    struct reply_header __header;
+    obj_handle_t   handle;
+    char __pad_12[4];
+};
+
+
+#define NAMED_PIPE_MESSAGE_STREAM_WRITE 0x0001
+#define NAMED_PIPE_MESSAGE_STREAM_READ  0x0002
+#define NAMED_PIPE_NONBLOCKING_MODE     0x0004
+#define NAMED_PIPE_SERVER_END           0x8000
+
+
+struct get_named_pipe_info_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct get_named_pipe_info_reply
+{
+    struct reply_header __header;
+    unsigned int   flags;
+    unsigned int   sharing;
+    unsigned int   maxinstances;
+    unsigned int   instances;
+    unsigned int   outsize;
+    unsigned int   insize;
+};
+
+
+
+struct create_window_request
+{
+    struct request_header __header;
+    user_handle_t  parent;
+    user_handle_t  owner;
+    atom_t         atom;
+    mod_handle_t   instance;
+    /* VARARG(class,unicode_str); */
+};
+struct create_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  handle;
+    user_handle_t  parent;
+    user_handle_t  owner;
+    int            extra;
+    client_ptr_t   class_ptr;
+};
+
+
+
+struct destroy_window_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct destroy_window_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_desktop_window_request
+{
+    struct request_header __header;
+    int            force;
+};
+struct get_desktop_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  top_window;
+    user_handle_t  msg_window;
+};
+
+
+
+struct set_window_owner_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    user_handle_t  owner;
+    char __pad_20[4];
+};
+struct set_window_owner_reply
+{
+    struct reply_header __header;
+    user_handle_t  full_owner;
+    user_handle_t  prev_owner;
+};
+
+
+
+struct get_window_info_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct get_window_info_reply
+{
+    struct reply_header __header;
+    user_handle_t  full_handle;
+    user_handle_t  last_active;
+    process_id_t   pid;
+    thread_id_t    tid;
+    atom_t         atom;
+    int            is_unicode;
+};
+
+
+
+struct set_window_info_request
+{
+    struct request_header __header;
+    unsigned short flags;
+    short int      is_unicode;
+    user_handle_t  handle;
+    unsigned int   style;
+    unsigned int   ex_style;
+    unsigned int   id;
+    mod_handle_t   instance;
+    lparam_t       user_data;
+    int            extra_offset;
+    data_size_t    extra_size;
+    lparam_t       extra_value;
+};
+struct set_window_info_reply
+{
+    struct reply_header __header;
+    unsigned int   old_style;
+    unsigned int   old_ex_style;
+    mod_handle_t   old_instance;
+    lparam_t       old_user_data;
+    lparam_t       old_extra_value;
+    unsigned int   old_id;
+    char __pad_44[4];
+};
+#define SET_WIN_STYLE     0x01
+#define SET_WIN_EXSTYLE   0x02
+#define SET_WIN_ID        0x04
+#define SET_WIN_INSTANCE  0x08
+#define SET_WIN_USERDATA  0x10
+#define SET_WIN_EXTRA     0x20
+#define SET_WIN_UNICODE   0x40
+
+
+
+struct set_parent_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    user_handle_t  parent;
+    char __pad_20[4];
+};
+struct set_parent_reply
+{
+    struct reply_header __header;
+    user_handle_t  old_parent;
+    user_handle_t  full_parent;
+};
+
+
+
+struct get_window_parents_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct get_window_parents_reply
+{
+    struct reply_header __header;
+    int            count;
+    /* VARARG(parents,user_handles); */
+    char __pad_12[4];
+};
+
+
+
+struct get_window_children_request
+{
+    struct request_header __header;
+    obj_handle_t   desktop;
+    user_handle_t  parent;
+    atom_t         atom;
+    thread_id_t    tid;
+    /* VARARG(class,unicode_str); */
+    char __pad_28[4];
+};
+struct get_window_children_reply
+{
+    struct reply_header __header;
+    int            count;
+    /* VARARG(children,user_handles); */
+    char __pad_12[4];
+};
+
+
+
+struct get_window_children_from_point_request
+{
+    struct request_header __header;
+    user_handle_t  parent;
+    int            x;
+    int            y;
+};
+struct get_window_children_from_point_reply
+{
+    struct reply_header __header;
+    int            count;
+    /* VARARG(children,user_handles); */
+    char __pad_12[4];
+};
+
+
+
+struct get_window_tree_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct get_window_tree_reply
+{
+    struct reply_header __header;
+    user_handle_t  parent;
+    user_handle_t  owner;
+    user_handle_t  next_sibling;
+    user_handle_t  prev_sibling;
+    user_handle_t  first_sibling;
+    user_handle_t  last_sibling;
+    user_handle_t  first_child;
+    user_handle_t  last_child;
+};
+
+
+struct set_window_pos_request
+{
+    struct request_header __header;
+    unsigned short swp_flags;
+    unsigned short paint_flags;
+    user_handle_t  handle;
+    user_handle_t  previous;
+    rectangle_t    window;
+    rectangle_t    client;
+    /* VARARG(valid,rectangles); */
+};
+struct set_window_pos_reply
+{
+    struct reply_header __header;
+    unsigned int   new_style;
+    unsigned int   new_ex_style;
+    user_handle_t  surface_win;
+    char __pad_20[4];
+};
+#define SET_WINPOS_PAINT_SURFACE 0x01
+#define SET_WINPOS_PIXEL_FORMAT  0x02
+
+
+struct get_window_rectangles_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    int            relative;
+    char __pad_20[4];
+};
+struct get_window_rectangles_reply
+{
+    struct reply_header __header;
+    rectangle_t    window;
+    rectangle_t    visible;
+    rectangle_t    client;
+};
+enum coords_relative
+{
+    COORDS_CLIENT,
+    COORDS_WINDOW,
+    COORDS_PARENT,
+    COORDS_SCREEN
+};
+
+
+
+struct get_window_text_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct get_window_text_reply
+{
+    struct reply_header __header;
+    /* VARARG(text,unicode_str); */
+};
+
+
+
+struct set_window_text_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    /* VARARG(text,unicode_str); */
+};
+struct set_window_text_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_windows_offset_request
+{
+    struct request_header __header;
+    user_handle_t  from;
+    user_handle_t  to;
+    char __pad_20[4];
+};
+struct get_windows_offset_reply
+{
+    struct reply_header __header;
+    int            x;
+    int            y;
+    int            mirror;
+    char __pad_20[4];
+};
+
+
+
+struct get_visible_region_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    unsigned int   flags;
+    char __pad_20[4];
+};
+struct get_visible_region_reply
+{
+    struct reply_header __header;
+    user_handle_t  top_win;
+    rectangle_t    top_rect;
+    rectangle_t    win_rect;
+    unsigned int   paint_flags;
+    data_size_t    total_size;
+    /* VARARG(region,rectangles); */
+    char __pad_52[4];
+};
+
+
+
+struct get_surface_region_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+};
+struct get_surface_region_reply
+{
+    struct reply_header __header;
+    rectangle_t    visible_rect;
+    data_size_t    total_size;
+    /* VARARG(region,rectangles); */
+    char __pad_28[4];
+};
+
+
+
+struct get_window_region_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+};
+struct get_window_region_reply
+{
+    struct reply_header __header;
+    data_size_t    total_size;
+    /* VARARG(region,rectangles); */
+    char __pad_12[4];
+};
+
+
+
+struct set_window_region_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    int            redraw;
+    /* VARARG(region,rectangles); */
+    char __pad_20[4];
+};
+struct set_window_region_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_update_region_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    user_handle_t  from_child;
+    unsigned int   flags;
+};
+struct get_update_region_reply
+{
+    struct reply_header __header;
+    user_handle_t  child;
+    unsigned int   flags;
+    data_size_t    total_size;
+    /* VARARG(region,rectangles); */
+    char __pad_20[4];
+};
+#define UPDATE_NONCLIENT       0x01
+#define UPDATE_ERASE           0x02
+#define UPDATE_PAINT           0x04
+#define UPDATE_INTERNALPAINT   0x08
+#define UPDATE_ALLCHILDREN     0x10
+#define UPDATE_NOCHILDREN      0x20
+#define UPDATE_NOREGION        0x40
+#define UPDATE_DELAYED_ERASE   0x80
+
+
+
+struct update_window_zorder_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    rectangle_t    rect;
+};
+struct update_window_zorder_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct redraw_window_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    unsigned int   flags;
+    /* VARARG(region,rectangles); */
+    char __pad_20[4];
+};
+struct redraw_window_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_window_property_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    lparam_t       data;
+    atom_t         atom;
+    /* VARARG(name,unicode_str); */
+    char __pad_28[4];
+};
+struct set_window_property_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct remove_window_property_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    atom_t         atom;
+    /* VARARG(name,unicode_str); */
+    char __pad_20[4];
+};
+struct remove_window_property_reply
+{
+    struct reply_header __header;
+    lparam_t       data;
+};
+
+
+
+struct get_window_property_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    atom_t         atom;
+    /* VARARG(name,unicode_str); */
+    char __pad_20[4];
+};
+struct get_window_property_reply
+{
+    struct reply_header __header;
+    lparam_t       data;
+};
+
+
+
+struct get_window_properties_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+};
+struct get_window_properties_reply
+{
+    struct reply_header __header;
+    int            total;
+    /* VARARG(props,properties); */
+    char __pad_12[4];
+};
+
+
+
+struct create_winstation_request
+{
+    struct request_header __header;
+    unsigned int flags;
+    unsigned int access;
+    unsigned int attributes;
+    /* VARARG(name,unicode_str); */
+};
+struct create_winstation_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_winstation_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    /* VARARG(name,unicode_str); */
+    char __pad_20[4];
+};
+struct open_winstation_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct close_winstation_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct close_winstation_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_process_winstation_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct get_process_winstation_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct set_process_winstation_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct set_process_winstation_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct enum_winstation_request
+{
+    struct request_header __header;
+    unsigned int index;
+};
+struct enum_winstation_reply
+{
+    struct reply_header __header;
+    unsigned int next;
+    /* VARARG(name,unicode_str); */
+    char __pad_12[4];
+};
+
+
+
+struct create_desktop_request
+{
+    struct request_header __header;
+    unsigned int flags;
+    unsigned int access;
+    unsigned int attributes;
+    /* VARARG(name,unicode_str); */
+};
+struct create_desktop_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_desktop_request
+{
+    struct request_header __header;
+    obj_handle_t winsta;
+    unsigned int flags;
+    unsigned int access;
+    unsigned int attributes;
+    /* VARARG(name,unicode_str); */
+    char __pad_28[4];
+};
+struct open_desktop_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct close_desktop_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct close_desktop_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_thread_desktop_request
+{
+    struct request_header __header;
+    thread_id_t  tid;
+};
+struct get_thread_desktop_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct set_thread_desktop_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct set_thread_desktop_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct enum_desktop_request
+{
+    struct request_header __header;
+    obj_handle_t winstation;
+    unsigned int index;
+    char __pad_20[4];
+};
+struct enum_desktop_reply
+{
+    struct reply_header __header;
+    unsigned int next;
+    /* VARARG(name,unicode_str); */
+    char __pad_12[4];
+};
+
+
+
+struct set_user_object_info_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+    unsigned int flags;
+    unsigned int obj_flags;
+};
+struct set_user_object_info_reply
+{
+    struct reply_header __header;
+    int          is_desktop;
+    unsigned int old_obj_flags;
+    /* VARARG(name,unicode_str); */
+};
+#define SET_USER_OBJECT_FLAGS 1
+
+
+
+struct register_hotkey_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    int            id;
+    unsigned int   flags;
+    unsigned int   vkey;
+    char __pad_28[4];
+};
+struct register_hotkey_reply
+{
+    struct reply_header __header;
+    int            replaced;
+    unsigned int   flags;
+    unsigned int   vkey;
+    char __pad_20[4];
+};
+
+
+
+struct unregister_hotkey_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    int            id;
+    char __pad_20[4];
+};
+struct unregister_hotkey_reply
+{
+    struct reply_header __header;
+    unsigned int   flags;
+    unsigned int   vkey;
+};
+
+
+
+struct attach_thread_input_request
+{
+    struct request_header __header;
+    thread_id_t    tid_from;
+    thread_id_t    tid_to;
+    int            attach;
+};
+struct attach_thread_input_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_thread_input_request
+{
+    struct request_header __header;
+    thread_id_t    tid;
+};
+struct get_thread_input_reply
+{
+    struct reply_header __header;
+    user_handle_t  focus;
+    user_handle_t  capture;
+    user_handle_t  active;
+    user_handle_t  foreground;
+    user_handle_t  menu_owner;
+    user_handle_t  move_size;
+    user_handle_t  caret;
+    user_handle_t  cursor;
+    int            show_count;
+    rectangle_t    rect;
+    char __pad_60[4];
+};
+
+
+
+struct get_last_input_time_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct get_last_input_time_reply
+{
+    struct reply_header __header;
+    unsigned int time;
+    char __pad_12[4];
+};
+
+
+
+struct get_key_state_request
+{
+    struct request_header __header;
+    thread_id_t    tid;
+    int            key;
+    char __pad_20[4];
+};
+struct get_key_state_reply
+{
+    struct reply_header __header;
+    unsigned char  state;
+    /* VARARG(keystate,bytes); */
+    char __pad_9[7];
+};
+
+
+struct set_key_state_request
+{
+    struct request_header __header;
+    thread_id_t    tid;
+    int            async;
+    /* VARARG(keystate,bytes); */
+    char __pad_20[4];
+};
+struct set_key_state_reply
+{
+    struct reply_header __header;
+};
+
+
+struct set_foreground_window_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct set_foreground_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  previous;
+    int            send_msg_old;
+    int            send_msg_new;
+    char __pad_20[4];
+};
+
+
+struct set_focus_window_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct set_focus_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  previous;
+    char __pad_12[4];
+};
+
+
+struct set_active_window_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct set_active_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  previous;
+    char __pad_12[4];
+};
+
+
+struct set_capture_window_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    unsigned int   flags;
+    char __pad_20[4];
+};
+struct set_capture_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  previous;
+    user_handle_t  full_handle;
+};
+#define CAPTURE_MENU     0x01
+#define CAPTURE_MOVESIZE 0x02
+
+
+
+struct set_caret_window_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    int            width;
+    int            height;
+};
+struct set_caret_window_reply
+{
+    struct reply_header __header;
+    user_handle_t  previous;
+    rectangle_t    old_rect;
+    int            old_hide;
+    int            old_state;
+    char __pad_36[4];
+};
+
+
+
+struct set_caret_info_request
+{
+    struct request_header __header;
+    unsigned int   flags;
+    user_handle_t  handle;
+    int            x;
+    int            y;
+    int            hide;
+    int            state;
+    char __pad_36[4];
+};
+struct set_caret_info_reply
+{
+    struct reply_header __header;
+    user_handle_t  full_handle;
+    rectangle_t    old_rect;
+    int            old_hide;
+    int            old_state;
+    char __pad_36[4];
+};
+#define SET_CARET_POS        0x01
+#define SET_CARET_HIDE       0x02
+#define SET_CARET_STATE      0x04
+
+
+
+struct set_hook_request
+{
+    struct request_header __header;
+    int            id;
+    process_id_t   pid;
+    thread_id_t    tid;
+    int            event_min;
+    int            event_max;
+    client_ptr_t   proc;
+    int            flags;
+    int            unicode;
+    /* VARARG(module,unicode_str); */
+};
+struct set_hook_reply
+{
+    struct reply_header __header;
+    user_handle_t  handle;
+    unsigned int   active_hooks;
+};
+
+
+
+struct remove_hook_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    client_ptr_t   proc;
+    int            id;
+    char __pad_28[4];
+};
+struct remove_hook_reply
+{
+    struct reply_header __header;
+    unsigned int   active_hooks;
+    char __pad_12[4];
+};
+
+
+
+struct start_hook_chain_request
+{
+    struct request_header __header;
+    int            id;
+    int            event;
+    user_handle_t  window;
+    int            object_id;
+    int            child_id;
+};
+struct start_hook_chain_reply
+{
+    struct reply_header __header;
+    user_handle_t  handle;
+    process_id_t   pid;
+    thread_id_t    tid;
+    int            unicode;
+    client_ptr_t   proc;
+    unsigned int   active_hooks;
+    /* VARARG(module,unicode_str); */
+    char __pad_36[4];
+};
+
+
+
+struct finish_hook_chain_request
+{
+    struct request_header __header;
+    int            id;
+};
+struct finish_hook_chain_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_hook_info_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    int            get_next;
+    int            event;
+    user_handle_t  window;
+    int            object_id;
+    int            child_id;
+    char __pad_36[4];
+};
+struct get_hook_info_reply
+{
+    struct reply_header __header;
+    user_handle_t  handle;
+    int            id;
+    process_id_t   pid;
+    thread_id_t    tid;
+    client_ptr_t   proc;
+    int            unicode;
+    /* VARARG(module,unicode_str); */
+    char __pad_36[4];
+};
+
+
+
+struct create_class_request
+{
+    struct request_header __header;
+    int            local;
+    atom_t         atom;
+    unsigned int   style;
+    mod_handle_t   instance;
+    int            extra;
+    int            win_extra;
+    client_ptr_t   client_ptr;
+    /* VARARG(name,unicode_str); */
+};
+struct create_class_reply
+{
+    struct reply_header __header;
+    atom_t         atom;
+    char __pad_12[4];
+};
+
+
+
+struct destroy_class_request
+{
+    struct request_header __header;
+    atom_t         atom;
+    mod_handle_t   instance;
+    /* VARARG(name,unicode_str); */
+};
+struct destroy_class_reply
+{
+    struct reply_header __header;
+    client_ptr_t   client_ptr;
+};
+
+
+
+struct set_class_info_request
+{
+    struct request_header __header;
+    user_handle_t  window;
+    unsigned int   flags;
+    atom_t         atom;
+    unsigned int   style;
+    int            win_extra;
+    mod_handle_t   instance;
+    int            extra_offset;
+    data_size_t    extra_size;
+    lparam_t       extra_value;
+};
+struct set_class_info_reply
+{
+    struct reply_header __header;
+    atom_t         old_atom;
+    unsigned int   old_style;
+    int            old_extra;
+    int            old_win_extra;
+    mod_handle_t   old_instance;
+    lparam_t       old_extra_value;
+};
+#define SET_CLASS_ATOM      0x0001
+#define SET_CLASS_STYLE     0x0002
+#define SET_CLASS_WINEXTRA  0x0004
+#define SET_CLASS_INSTANCE  0x0008
+#define SET_CLASS_EXTRA     0x0010
+
+
+
+struct set_clipboard_info_request
+{
+    struct request_header __header;
+    unsigned int   flags;
+    user_handle_t  clipboard;
+    user_handle_t  owner;
+    user_handle_t  viewer;
+    unsigned int   seqno;
+};
+struct set_clipboard_info_reply
+{
+    struct reply_header __header;
+    unsigned int   flags;
+    user_handle_t  old_clipboard;
+    user_handle_t  old_owner;
+    user_handle_t  old_viewer;
+    unsigned int   seqno;
+    char __pad_28[4];
+};
+
+#define SET_CB_OPEN      0x001
+#define SET_CB_OWNER     0x002
+#define SET_CB_VIEWER    0x004
+#define SET_CB_SEQNO     0x008
+#define SET_CB_RELOWNER  0x010
+#define SET_CB_CLOSE     0x020
+#define CB_OPEN          0x040
+#define CB_OWNER         0x080
+#define CB_PROCESS       0x100
+
+
+
+struct open_token_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+    unsigned int   access;
+    unsigned int   attributes;
+    unsigned int   flags;
+    char __pad_28[4];
+};
+struct open_token_reply
+{
+    struct reply_header __header;
+    obj_handle_t   token;
+    char __pad_12[4];
+};
+#define OPEN_TOKEN_THREAD   1
+#define OPEN_TOKEN_AS_SELF  2
+
+
+
+struct set_global_windows_request
+{
+    struct request_header __header;
+    unsigned int   flags;
+    user_handle_t  shell_window;
+    user_handle_t  shell_listview;
+    user_handle_t  progman_window;
+    user_handle_t  taskman_window;
+};
+struct set_global_windows_reply
+{
+    struct reply_header __header;
+    user_handle_t  old_shell_window;
+    user_handle_t  old_shell_listview;
+    user_handle_t  old_progman_window;
+    user_handle_t  old_taskman_window;
+};
+#define SET_GLOBAL_SHELL_WINDOWS   0x01
+#define SET_GLOBAL_PROGMAN_WINDOW  0x02
+#define SET_GLOBAL_TASKMAN_WINDOW  0x04
+
+
+struct adjust_token_privileges_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    int           disable_all;
+    int           get_modified_state;
+    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+};
+struct adjust_token_privileges_reply
+{
+    struct reply_header __header;
+    unsigned int  len;
+    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+    char __pad_12[4];
+};
+
+
+struct get_token_privileges_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+};
+struct get_token_privileges_reply
+{
+    struct reply_header __header;
+    unsigned int  len;
+    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+    char __pad_12[4];
+};
+
+
+struct check_token_privileges_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    int           all_required;
+    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+    char __pad_20[4];
+};
+struct check_token_privileges_reply
+{
+    struct reply_header __header;
+    int           has_privileges;
+    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+    char __pad_12[4];
+};
+
+struct duplicate_token_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    unsigned int  access;
+    unsigned int  attributes;
+    int           primary;
+    int           impersonation_level;
+};
+struct duplicate_token_reply
+{
+    struct reply_header __header;
+    obj_handle_t  new_handle;
+    char __pad_12[4];
+};
+
+struct access_check_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+    unsigned int    desired_access;
+    unsigned int    mapping_read;
+    unsigned int    mapping_write;
+    unsigned int    mapping_execute;
+    unsigned int    mapping_all;
+    /* VARARG(sd,security_descriptor); */
+    char __pad_36[4];
+};
+struct access_check_reply
+{
+    struct reply_header __header;
+    unsigned int    access_granted;
+    unsigned int    access_status;
+    unsigned int    privileges_len;
+    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+    char __pad_20[4];
+};
+
+struct get_token_sid_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+    unsigned int    which_sid;
+    char __pad_20[4];
+};
+struct get_token_sid_reply
+{
+    struct reply_header __header;
+    data_size_t     sid_len;
+    /* VARARG(sid,SID); */
+    char __pad_12[4];
+};
+
+struct get_token_groups_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+};
+struct get_token_groups_reply
+{
+    struct reply_header __header;
+    data_size_t     user_len;
+    /* VARARG(user,token_groups); */
+    char __pad_12[4];
+};
+
+struct get_token_default_dacl_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+};
+struct get_token_default_dacl_reply
+{
+    struct reply_header __header;
+    data_size_t     acl_len;
+    /* VARARG(acl,ACL); */
+    char __pad_12[4];
+};
+
+struct set_token_default_dacl_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+    /* VARARG(acl,ACL); */
+};
+struct set_token_default_dacl_reply
+{
+    struct reply_header __header;
+};
+
+struct set_security_object_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+    unsigned int    security_info;
+    /* VARARG(sd,security_descriptor); */
+    char __pad_20[4];
+};
+struct set_security_object_reply
+{
+    struct reply_header __header;
+};
+
+struct get_security_object_request
+{
+    struct request_header __header;
+    obj_handle_t    handle;
+    unsigned int    security_info;
+    char __pad_20[4];
+};
+struct get_security_object_reply
+{
+    struct reply_header __header;
+    unsigned int    sd_len;
+    /* VARARG(sd,security_descriptor); */
+    char __pad_12[4];
+};
+
+
+struct create_mailslot_request
+{
+    struct request_header __header;
+    unsigned int   access;
+    unsigned int   attributes;
+    obj_handle_t   rootdir;
+    timeout_t      read_timeout;
+    unsigned int   max_msgsize;
+    /* VARARG(name,unicode_str); */
+    char __pad_36[4];
+};
+struct create_mailslot_reply
+{
+    struct reply_header __header;
+    obj_handle_t   handle;
+    char __pad_12[4];
+};
+
+
+
+struct set_mailslot_info_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+    timeout_t      read_timeout;
+    unsigned int   flags;
+    char __pad_28[4];
+};
+struct set_mailslot_info_reply
+{
+    struct reply_header __header;
+    timeout_t      read_timeout;
+    unsigned int   max_msgsize;
+    char __pad_20[4];
+};
+#define MAILSLOT_SET_READ_TIMEOUT  1
+
+
+
+struct create_directory_request
+{
+    struct request_header __header;
+    unsigned int   access;
+    unsigned int   attributes;
+    obj_handle_t   rootdir;
+    /* VARARG(directory_name,unicode_str); */
+};
+struct create_directory_reply
+{
+    struct reply_header __header;
+    obj_handle_t   handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_directory_request
+{
+    struct request_header __header;
+    unsigned int   access;
+    unsigned int   attributes;
+    obj_handle_t   rootdir;
+    /* VARARG(directory_name,unicode_str); */
+};
+struct open_directory_reply
+{
+    struct reply_header __header;
+    obj_handle_t   handle;
+    char __pad_12[4];
+};
+
+
+
+struct get_directory_entry_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+    unsigned int   index;
+    char __pad_20[4];
+};
+struct get_directory_entry_reply
+{
+    struct reply_header __header;
+    data_size_t    name_len;
+    /* VARARG(name,unicode_str,name_len); */
+    /* VARARG(type,unicode_str); */
+    char __pad_12[4];
+};
+
+
+
+struct create_symlink_request
+{
+    struct request_header __header;
+    unsigned int   access;
+    unsigned int   attributes;
+    obj_handle_t   rootdir;
+    data_size_t    name_len;
+    /* VARARG(name,unicode_str,name_len); */
+    /* VARARG(target_name,unicode_str); */
+    char __pad_28[4];
+};
+struct create_symlink_reply
+{
+    struct reply_header __header;
+    obj_handle_t   handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_symlink_request
+{
+    struct request_header __header;
+    unsigned int   access;
+    unsigned int   attributes;
+    obj_handle_t   rootdir;
+    /* VARARG(name,unicode_str); */
+};
+struct open_symlink_reply
+{
+    struct reply_header __header;
+    obj_handle_t   handle;
+    char __pad_12[4];
+};
+
+
+
+struct query_symlink_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct query_symlink_reply
+{
+    struct reply_header __header;
+    data_size_t    total;
+    /* VARARG(target_name,unicode_str); */
+    char __pad_12[4];
+};
+
+
+
+struct get_object_info_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct get_object_info_reply
+{
+    struct reply_header __header;
+    unsigned int   access;
+    unsigned int   ref_count;
+    data_size_t    total;
+    /* VARARG(name,unicode_str); */
+    char __pad_20[4];
+};
+
+
+
+struct unlink_object_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct unlink_object_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_token_impersonation_level_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct get_token_impersonation_level_reply
+{
+    struct reply_header __header;
+    int            impersonation_level;
+    char __pad_12[4];
+};
+
+
+struct allocate_locally_unique_id_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct allocate_locally_unique_id_reply
+{
+    struct reply_header __header;
+    luid_t         luid;
+};
+
+
+
+struct create_device_manager_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    char __pad_20[4];
+};
+struct create_device_manager_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct create_device_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    client_ptr_t user_ptr;
+    obj_handle_t manager;
+    /* VARARG(name,unicode_str); */
+    char __pad_36[4];
+};
+struct create_device_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct delete_device_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct delete_device_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_next_device_request_request
+{
+    struct request_header __header;
+    obj_handle_t manager;
+    obj_handle_t prev;
+    unsigned int status;
+    /* VARARG(prev_data,bytes); */
+};
+struct get_next_device_request_reply
+{
+    struct reply_header __header;
+    obj_handle_t next;
+    ioctl_code_t code;
+    client_ptr_t user_ptr;
+    process_id_t client_pid;
+    thread_id_t  client_tid;
+    data_size_t  in_size;
+    data_size_t  out_size;
+    /* VARARG(next_data,bytes); */
+};
+
+
+
+struct make_process_system_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct make_process_system_reply
+{
+    struct reply_header __header;
+    obj_handle_t event;
+    char __pad_12[4];
+};
+
+
+
+struct get_token_statistics_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+};
+struct get_token_statistics_reply
+{
+    struct reply_header __header;
+    luid_t         token_id;
+    luid_t         modified_id;
+    int            primary;
+    int            impersonation_level;
+    int            group_count;
+    int            privilege_count;
+};
+
+
+
+struct create_completion_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    unsigned int concurrent;
+    obj_handle_t rootdir;
+    /* VARARG(filename,string); */
+    char __pad_28[4];
+};
+struct create_completion_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct open_completion_request
+{
+    struct request_header __header;
+    unsigned int access;
+    unsigned int attributes;
+    obj_handle_t rootdir;
+    /* VARARG(filename,string); */
+};
+struct open_completion_reply
+{
+    struct reply_header __header;
+    obj_handle_t handle;
+    char __pad_12[4];
+};
+
+
+
+struct add_completion_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    apc_param_t   ckey;
+    apc_param_t   cvalue;
+    apc_param_t   information;
+    unsigned int  status;
+    char __pad_44[4];
+};
+struct add_completion_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct remove_completion_request
+{
+    struct request_header __header;
+    obj_handle_t handle;
+};
+struct remove_completion_reply
+{
+    struct reply_header __header;
+    apc_param_t   ckey;
+    apc_param_t   cvalue;
+    apc_param_t   information;
+    unsigned int  status;
+    char __pad_36[4];
+};
+
+
+
+struct query_completion_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+};
+struct query_completion_reply
+{
+    struct reply_header __header;
+    unsigned int  depth;
+    char __pad_12[4];
+};
+
+
+
+struct set_completion_info_request
+{
+    struct request_header __header;
+    obj_handle_t  handle;
+    apc_param_t   ckey;
+    obj_handle_t  chandle;
+    char __pad_28[4];
+};
+struct set_completion_info_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct add_fd_completion_request
+{
+    struct request_header __header;
+    obj_handle_t   handle;
+    apc_param_t    cvalue;
+    apc_param_t    information;
+    unsigned int   status;
+    char __pad_36[4];
+};
+struct add_fd_completion_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_window_layered_info_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct get_window_layered_info_reply
+{
+    struct reply_header __header;
+    unsigned int   color_key;
+    unsigned int   alpha;
+    unsigned int   flags;
+    char __pad_20[4];
+};
+
+
+
+struct set_window_layered_info_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+    unsigned int   color_key;
+    unsigned int   alpha;
+    unsigned int   flags;
+    char __pad_28[4];
+};
+struct set_window_layered_info_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct alloc_user_handle_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct alloc_user_handle_reply
+{
+    struct reply_header __header;
+    user_handle_t  handle;
+    char __pad_12[4];
+};
+
+
+
+struct free_user_handle_request
+{
+    struct request_header __header;
+    user_handle_t  handle;
+};
+struct free_user_handle_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct set_cursor_request
+{
+    struct request_header __header;
+    unsigned int   flags;
+    user_handle_t  handle;
+    int            show_count;
+    int            x;
+    int            y;
+    rectangle_t    clip;
+    unsigned int   clip_msg;
+    char __pad_52[4];
+};
+struct set_cursor_reply
+{
+    struct reply_header __header;
+    user_handle_t  prev_handle;
+    int            prev_count;
+    int            prev_x;
+    int            prev_y;
+    int            new_x;
+    int            new_y;
+    rectangle_t    new_clip;
+    unsigned int   last_change;
+    char __pad_52[4];
+};
+#define SET_CURSOR_HANDLE 0x01
+#define SET_CURSOR_COUNT  0x02
+#define SET_CURSOR_POS    0x04
+#define SET_CURSOR_CLIP   0x08
+#define SET_CURSOR_NOCLIP 0x10
+
+
+
+struct update_rawinput_devices_request
+{
+    struct request_header __header;
+    /* VARARG(devices,rawinput_devices); */
+    char __pad_12[4];
+};
+struct update_rawinput_devices_reply
+{
+    struct reply_header __header;
+};
+
+
+
+struct get_suspend_context_request
+{
+    struct request_header __header;
+    char __pad_12[4];
+};
+struct get_suspend_context_reply
+{
+    struct reply_header __header;
+    /* VARARG(context,context); */
+};
+
+
+
+struct set_suspend_context_request
+{
+    struct request_header __header;
+    /* VARARG(context,context); */
+    char __pad_12[4];
+};
+struct set_suspend_context_reply
+{
+    struct reply_header __header;
+};
+
+
+enum request
+{
+    REQ_new_process,
+    REQ_get_new_process_info,
+    REQ_new_thread,
+    REQ_get_startup_info,
+    REQ_init_process_done,
+    REQ_init_thread,
+    REQ_terminate_process,
+    REQ_terminate_thread,
+    REQ_get_process_info,
+    REQ_set_process_info,
+    REQ_get_thread_info,
+    REQ_set_thread_info,
+    REQ_get_dll_info,
+    REQ_suspend_thread,
+    REQ_resume_thread,
+    REQ_load_dll,
+    REQ_unload_dll,
+    REQ_queue_apc,
+    REQ_get_apc_result,
+    REQ_close_handle,
+    REQ_set_handle_info,
+    REQ_dup_handle,
+    REQ_open_process,
+    REQ_open_thread,
+    REQ_select,
+    REQ_create_event,
+    REQ_event_op,
+    REQ_query_event,
+    REQ_open_event,
+    REQ_create_keyed_event,
+    REQ_open_keyed_event,
+    REQ_create_mutex,
+    REQ_release_mutex,
+    REQ_open_mutex,
+    REQ_create_semaphore,
+    REQ_release_semaphore,
+    REQ_open_semaphore,
+    REQ_create_file,
+    REQ_open_file_object,
+    REQ_alloc_file_handle,
+    REQ_get_handle_unix_name,
+    REQ_get_handle_fd,
+    REQ_flush_file,
+    REQ_lock_file,
+    REQ_unlock_file,
+    REQ_create_socket,
+    REQ_accept_socket,
+    REQ_accept_into_socket,
+    REQ_set_socket_event,
+    REQ_get_socket_event,
+    REQ_get_socket_info,
+    REQ_enable_socket_event,
+    REQ_set_socket_deferred,
+    REQ_alloc_console,
+    REQ_free_console,
+    REQ_get_console_renderer_events,
+    REQ_open_console,
+    REQ_get_console_wait_event,
+    REQ_get_console_mode,
+    REQ_set_console_mode,
+    REQ_set_console_input_info,
+    REQ_get_console_input_info,
+    REQ_append_console_input_history,
+    REQ_get_console_input_history,
+    REQ_create_console_output,
+    REQ_set_console_output_info,
+    REQ_get_console_output_info,
+    REQ_write_console_input,
+    REQ_read_console_input,
+    REQ_write_console_output,
+    REQ_fill_console_output,
+    REQ_read_console_output,
+    REQ_move_console_output,
+    REQ_send_console_signal,
+    REQ_read_directory_changes,
+    REQ_read_change,
+    REQ_create_mapping,
+    REQ_open_mapping,
+    REQ_get_mapping_info,
+    REQ_get_mapping_committed_range,
+    REQ_add_mapping_committed_range,
+    REQ_create_snapshot,
+    REQ_next_process,
+    REQ_next_thread,
+    REQ_wait_debug_event,
+    REQ_queue_exception_event,
+    REQ_get_exception_status,
+    REQ_output_debug_string,
+    REQ_continue_debug_event,
+    REQ_debug_process,
+    REQ_debug_break,
+    REQ_set_debugger_kill_on_exit,
+    REQ_read_process_memory,
+    REQ_write_process_memory,
+    REQ_create_key,
+    REQ_open_key,
+    REQ_delete_key,
+    REQ_flush_key,
+    REQ_enum_key,
+    REQ_set_key_value,
+    REQ_get_key_value,
+    REQ_enum_key_value,
+    REQ_delete_key_value,
+    REQ_load_registry,
+    REQ_unload_registry,
+    REQ_save_registry,
+    REQ_set_registry_notification,
+    REQ_create_timer,
+    REQ_open_timer,
+    REQ_set_timer,
+    REQ_cancel_timer,
+    REQ_get_timer_info,
+    REQ_get_thread_context,
+    REQ_set_thread_context,
+    REQ_get_selector_entry,
+    REQ_add_atom,
+    REQ_delete_atom,
+    REQ_find_atom,
+    REQ_get_atom_information,
+    REQ_set_atom_information,
+    REQ_empty_atom_table,
+    REQ_init_atom_table,
+    REQ_get_msg_queue,
+    REQ_set_queue_fd,
+    REQ_set_queue_mask,
+    REQ_get_queue_status,
+    REQ_get_process_idle_event,
+    REQ_send_message,
+    REQ_post_quit_message,
+    REQ_send_hardware_message,
+    REQ_get_message,
+    REQ_reply_message,
+    REQ_accept_hardware_message,
+    REQ_get_message_reply,
+    REQ_set_win_timer,
+    REQ_kill_win_timer,
+    REQ_is_window_hung,
+    REQ_get_serial_info,
+    REQ_set_serial_info,
+    REQ_register_async,
+    REQ_cancel_async,
+    REQ_ioctl,
+    REQ_get_ioctl_result,
+    REQ_create_named_pipe,
+    REQ_get_named_pipe_info,
+    REQ_create_window,
+    REQ_destroy_window,
+    REQ_get_desktop_window,
+    REQ_set_window_owner,
+    REQ_get_window_info,
+    REQ_set_window_info,
+    REQ_set_parent,
+    REQ_get_window_parents,
+    REQ_get_window_children,
+    REQ_get_window_children_from_point,
+    REQ_get_window_tree,
+    REQ_set_window_pos,
+    REQ_get_window_rectangles,
+    REQ_get_window_text,
+    REQ_set_window_text,
+    REQ_get_windows_offset,
+    REQ_get_visible_region,
+    REQ_get_surface_region,
+    REQ_get_window_region,
+    REQ_set_window_region,
+    REQ_get_update_region,
+    REQ_update_window_zorder,
+    REQ_redraw_window,
+    REQ_set_window_property,
+    REQ_remove_window_property,
+    REQ_get_window_property,
+    REQ_get_window_properties,
+    REQ_create_winstation,
+    REQ_open_winstation,
+    REQ_close_winstation,
+    REQ_get_process_winstation,
+    REQ_set_process_winstation,
+    REQ_enum_winstation,
+    REQ_create_desktop,
+    REQ_open_desktop,
+    REQ_close_desktop,
+    REQ_get_thread_desktop,
+    REQ_set_thread_desktop,
+    REQ_enum_desktop,
+    REQ_set_user_object_info,
+    REQ_register_hotkey,
+    REQ_unregister_hotkey,
+    REQ_attach_thread_input,
+    REQ_get_thread_input,
+    REQ_get_last_input_time,
+    REQ_get_key_state,
+    REQ_set_key_state,
+    REQ_set_foreground_window,
+    REQ_set_focus_window,
+    REQ_set_active_window,
+    REQ_set_capture_window,
+    REQ_set_caret_window,
+    REQ_set_caret_info,
+    REQ_set_hook,
+    REQ_remove_hook,
+    REQ_start_hook_chain,
+    REQ_finish_hook_chain,
+    REQ_get_hook_info,
+    REQ_create_class,
+    REQ_destroy_class,
+    REQ_set_class_info,
+    REQ_set_clipboard_info,
+    REQ_open_token,
+    REQ_set_global_windows,
+    REQ_adjust_token_privileges,
+    REQ_get_token_privileges,
+    REQ_check_token_privileges,
+    REQ_duplicate_token,
+    REQ_access_check,
+    REQ_get_token_sid,
+    REQ_get_token_groups,
+    REQ_get_token_default_dacl,
+    REQ_set_token_default_dacl,
+    REQ_set_security_object,
+    REQ_get_security_object,
+    REQ_create_mailslot,
+    REQ_set_mailslot_info,
+    REQ_create_directory,
+    REQ_open_directory,
+    REQ_get_directory_entry,
+    REQ_create_symlink,
+    REQ_open_symlink,
+    REQ_query_symlink,
+    REQ_get_object_info,
+    REQ_unlink_object,
+    REQ_get_token_impersonation_level,
+    REQ_allocate_locally_unique_id,
+    REQ_create_device_manager,
+    REQ_create_device,
+    REQ_delete_device,
+    REQ_get_next_device_request,
+    REQ_make_process_system,
+    REQ_get_token_statistics,
+    REQ_create_completion,
+    REQ_open_completion,
+    REQ_add_completion,
+    REQ_remove_completion,
+    REQ_query_completion,
+    REQ_set_completion_info,
+    REQ_add_fd_completion,
+    REQ_get_window_layered_info,
+    REQ_set_window_layered_info,
+    REQ_alloc_user_handle,
+    REQ_free_user_handle,
+    REQ_set_cursor,
+    REQ_update_rawinput_devices,
+    REQ_get_suspend_context,
+    REQ_set_suspend_context,
+    REQ_NB_REQUESTS
+};
+
+union generic_request
+{
+    struct request_max_size max_size;
+    struct request_header request_header;
+    struct new_process_request new_process_request;
+    struct get_new_process_info_request get_new_process_info_request;
+    struct new_thread_request new_thread_request;
+    struct get_startup_info_request get_startup_info_request;
+    struct init_process_done_request init_process_done_request;
+    struct init_thread_request init_thread_request;
+    struct terminate_process_request terminate_process_request;
+    struct terminate_thread_request terminate_thread_request;
+    struct get_process_info_request get_process_info_request;
+    struct set_process_info_request set_process_info_request;
+    struct get_thread_info_request get_thread_info_request;
+    struct set_thread_info_request set_thread_info_request;
+    struct get_dll_info_request get_dll_info_request;
+    struct suspend_thread_request suspend_thread_request;
+    struct resume_thread_request resume_thread_request;
+    struct load_dll_request load_dll_request;
+    struct unload_dll_request unload_dll_request;
+    struct queue_apc_request queue_apc_request;
+    struct get_apc_result_request get_apc_result_request;
+    struct close_handle_request close_handle_request;
+    struct set_handle_info_request set_handle_info_request;
+    struct dup_handle_request dup_handle_request;
+    struct open_process_request open_process_request;
+    struct open_thread_request open_thread_request;
+    struct select_request select_request;
+    struct create_event_request create_event_request;
+    struct event_op_request event_op_request;
+    struct query_event_request query_event_request;
+    struct open_event_request open_event_request;
+    struct create_keyed_event_request create_keyed_event_request;
+    struct open_keyed_event_request open_keyed_event_request;
+    struct create_mutex_request create_mutex_request;
+    struct release_mutex_request release_mutex_request;
+    struct open_mutex_request open_mutex_request;
+    struct create_semaphore_request create_semaphore_request;
+    struct release_semaphore_request release_semaphore_request;
+    struct open_semaphore_request open_semaphore_request;
+    struct create_file_request create_file_request;
+    struct open_file_object_request open_file_object_request;
+    struct alloc_file_handle_request alloc_file_handle_request;
+    struct get_handle_unix_name_request get_handle_unix_name_request;
+    struct get_handle_fd_request get_handle_fd_request;
+    struct flush_file_request flush_file_request;
+    struct lock_file_request lock_file_request;
+    struct unlock_file_request unlock_file_request;
+    struct create_socket_request create_socket_request;
+    struct accept_socket_request accept_socket_request;
+    struct accept_into_socket_request accept_into_socket_request;
+    struct set_socket_event_request set_socket_event_request;
+    struct get_socket_event_request get_socket_event_request;
+    struct get_socket_info_request get_socket_info_request;
+    struct enable_socket_event_request enable_socket_event_request;
+    struct set_socket_deferred_request set_socket_deferred_request;
+    struct alloc_console_request alloc_console_request;
+    struct free_console_request free_console_request;
+    struct get_console_renderer_events_request get_console_renderer_events_request;
+    struct open_console_request open_console_request;
+    struct get_console_wait_event_request get_console_wait_event_request;
+    struct get_console_mode_request get_console_mode_request;
+    struct set_console_mode_request set_console_mode_request;
+    struct set_console_input_info_request set_console_input_info_request;
+    struct get_console_input_info_request get_console_input_info_request;
+    struct append_console_input_history_request append_console_input_history_request;
+    struct get_console_input_history_request get_console_input_history_request;
+    struct create_console_output_request create_console_output_request;
+    struct set_console_output_info_request set_console_output_info_request;
+    struct get_console_output_info_request get_console_output_info_request;
+    struct write_console_input_request write_console_input_request;
+    struct read_console_input_request read_console_input_request;
+    struct write_console_output_request write_console_output_request;
+    struct fill_console_output_request fill_console_output_request;
+    struct read_console_output_request read_console_output_request;
+    struct move_console_output_request move_console_output_request;
+    struct send_console_signal_request send_console_signal_request;
+    struct read_directory_changes_request read_directory_changes_request;
+    struct read_change_request read_change_request;
+    struct create_mapping_request create_mapping_request;
+    struct open_mapping_request open_mapping_request;
+    struct get_mapping_info_request get_mapping_info_request;
+    struct get_mapping_committed_range_request get_mapping_committed_range_request;
+    struct add_mapping_committed_range_request add_mapping_committed_range_request;
+    struct create_snapshot_request create_snapshot_request;
+    struct next_process_request next_process_request;
+    struct next_thread_request next_thread_request;
+    struct wait_debug_event_request wait_debug_event_request;
+    struct queue_exception_event_request queue_exception_event_request;
+    struct get_exception_status_request get_exception_status_request;
+    struct output_debug_string_request output_debug_string_request;
+    struct continue_debug_event_request continue_debug_event_request;
+    struct debug_process_request debug_process_request;
+    struct debug_break_request debug_break_request;
+    struct set_debugger_kill_on_exit_request set_debugger_kill_on_exit_request;
+    struct read_process_memory_request read_process_memory_request;
+    struct write_process_memory_request write_process_memory_request;
+    struct create_key_request create_key_request;
+    struct open_key_request open_key_request;
+    struct delete_key_request delete_key_request;
+    struct flush_key_request flush_key_request;
+    struct enum_key_request enum_key_request;
+    struct set_key_value_request set_key_value_request;
+    struct get_key_value_request get_key_value_request;
+    struct enum_key_value_request enum_key_value_request;
+    struct delete_key_value_request delete_key_value_request;
+    struct load_registry_request load_registry_request;
+    struct unload_registry_request unload_registry_request;
+    struct save_registry_request save_registry_request;
+    struct set_registry_notification_request set_registry_notification_request;
+    struct create_timer_request create_timer_request;
+    struct open_timer_request open_timer_request;
+    struct set_timer_request set_timer_request;
+    struct cancel_timer_request cancel_timer_request;
+    struct get_timer_info_request get_timer_info_request;
+    struct get_thread_context_request get_thread_context_request;
+    struct set_thread_context_request set_thread_context_request;
+    struct get_selector_entry_request get_selector_entry_request;
+    struct add_atom_request add_atom_request;
+    struct delete_atom_request delete_atom_request;
+    struct find_atom_request find_atom_request;
+    struct get_atom_information_request get_atom_information_request;
+    struct set_atom_information_request set_atom_information_request;
+    struct empty_atom_table_request empty_atom_table_request;
+    struct init_atom_table_request init_atom_table_request;
+    struct get_msg_queue_request get_msg_queue_request;
+    struct set_queue_fd_request set_queue_fd_request;
+    struct set_queue_mask_request set_queue_mask_request;
+    struct get_queue_status_request get_queue_status_request;
+    struct get_process_idle_event_request get_process_idle_event_request;
+    struct send_message_request send_message_request;
+    struct post_quit_message_request post_quit_message_request;
+    struct send_hardware_message_request send_hardware_message_request;
+    struct get_message_request get_message_request;
+    struct reply_message_request reply_message_request;
+    struct accept_hardware_message_request accept_hardware_message_request;
+    struct get_message_reply_request get_message_reply_request;
+    struct set_win_timer_request set_win_timer_request;
+    struct kill_win_timer_request kill_win_timer_request;
+    struct is_window_hung_request is_window_hung_request;
+    struct get_serial_info_request get_serial_info_request;
+    struct set_serial_info_request set_serial_info_request;
+    struct register_async_request register_async_request;
+    struct cancel_async_request cancel_async_request;
+    struct ioctl_request ioctl_request;
+    struct get_ioctl_result_request get_ioctl_result_request;
+    struct create_named_pipe_request create_named_pipe_request;
+    struct get_named_pipe_info_request get_named_pipe_info_request;
+    struct create_window_request create_window_request;
+    struct destroy_window_request destroy_window_request;
+    struct get_desktop_window_request get_desktop_window_request;
+    struct set_window_owner_request set_window_owner_request;
+    struct get_window_info_request get_window_info_request;
+    struct set_window_info_request set_window_info_request;
+    struct set_parent_request set_parent_request;
+    struct get_window_parents_request get_window_parents_request;
+    struct get_window_children_request get_window_children_request;
+    struct get_window_children_from_point_request get_window_children_from_point_request;
+    struct get_window_tree_request get_window_tree_request;
+    struct set_window_pos_request set_window_pos_request;
+    struct get_window_rectangles_request get_window_rectangles_request;
+    struct get_window_text_request get_window_text_request;
+    struct set_window_text_request set_window_text_request;
+    struct get_windows_offset_request get_windows_offset_request;
+    struct get_visible_region_request get_visible_region_request;
+    struct get_surface_region_request get_surface_region_request;
+    struct get_window_region_request get_window_region_request;
+    struct set_window_region_request set_window_region_request;
+    struct get_update_region_request get_update_region_request;
+    struct update_window_zorder_request update_window_zorder_request;
+    struct redraw_window_request redraw_window_request;
+    struct set_window_property_request set_window_property_request;
+    struct remove_window_property_request remove_window_property_request;
+    struct get_window_property_request get_window_property_request;
+    struct get_window_properties_request get_window_properties_request;
+    struct create_winstation_request create_winstation_request;
+    struct open_winstation_request open_winstation_request;
+    struct close_winstation_request close_winstation_request;
+    struct get_process_winstation_request get_process_winstation_request;
+    struct set_process_winstation_request set_process_winstation_request;
+    struct enum_winstation_request enum_winstation_request;
+    struct create_desktop_request create_desktop_request;
+    struct open_desktop_request open_desktop_request;
+    struct close_desktop_request close_desktop_request;
+    struct get_thread_desktop_request get_thread_desktop_request;
+    struct set_thread_desktop_request set_thread_desktop_request;
+    struct enum_desktop_request enum_desktop_request;
+    struct set_user_object_info_request set_user_object_info_request;
+    struct register_hotkey_request register_hotkey_request;
+    struct unregister_hotkey_request unregister_hotkey_request;
+    struct attach_thread_input_request attach_thread_input_request;
+    struct get_thread_input_request get_thread_input_request;
+    struct get_last_input_time_request get_last_input_time_request;
+    struct get_key_state_request get_key_state_request;
+    struct set_key_state_request set_key_state_request;
+    struct set_foreground_window_request set_foreground_window_request;
+    struct set_focus_window_request set_focus_window_request;
+    struct set_active_window_request set_active_window_request;
+    struct set_capture_window_request set_capture_window_request;
+    struct set_caret_window_request set_caret_window_request;
+    struct set_caret_info_request set_caret_info_request;
+    struct set_hook_request set_hook_request;
+    struct remove_hook_request remove_hook_request;
+    struct start_hook_chain_request start_hook_chain_request;
+    struct finish_hook_chain_request finish_hook_chain_request;
+    struct get_hook_info_request get_hook_info_request;
+    struct create_class_request create_class_request;
+    struct destroy_class_request destroy_class_request;
+    struct set_class_info_request set_class_info_request;
+    struct set_clipboard_info_request set_clipboard_info_request;
+    struct open_token_request open_token_request;
+    struct set_global_windows_request set_global_windows_request;
+    struct adjust_token_privileges_request adjust_token_privileges_request;
+    struct get_token_privileges_request get_token_privileges_request;
+    struct check_token_privileges_request check_token_privileges_request;
+    struct duplicate_token_request duplicate_token_request;
+    struct access_check_request access_check_request;
+    struct get_token_sid_request get_token_sid_request;
+    struct get_token_groups_request get_token_groups_request;
+    struct get_token_default_dacl_request get_token_default_dacl_request;
+    struct set_token_default_dacl_request set_token_default_dacl_request;
+    struct set_security_object_request set_security_object_request;
+    struct get_security_object_request get_security_object_request;
+    struct create_mailslot_request create_mailslot_request;
+    struct set_mailslot_info_request set_mailslot_info_request;
+    struct create_directory_request create_directory_request;
+    struct open_directory_request open_directory_request;
+    struct get_directory_entry_request get_directory_entry_request;
+    struct create_symlink_request create_symlink_request;
+    struct open_symlink_request open_symlink_request;
+    struct query_symlink_request query_symlink_request;
+    struct get_object_info_request get_object_info_request;
+    struct unlink_object_request unlink_object_request;
+    struct get_token_impersonation_level_request get_token_impersonation_level_request;
+    struct allocate_locally_unique_id_request allocate_locally_unique_id_request;
+    struct create_device_manager_request create_device_manager_request;
+    struct create_device_request create_device_request;
+    struct delete_device_request delete_device_request;
+    struct get_next_device_request_request get_next_device_request_request;
+    struct make_process_system_request make_process_system_request;
+    struct get_token_statistics_request get_token_statistics_request;
+    struct create_completion_request create_completion_request;
+    struct open_completion_request open_completion_request;
+    struct add_completion_request add_completion_request;
+    struct remove_completion_request remove_completion_request;
+    struct query_completion_request query_completion_request;
+    struct set_completion_info_request set_completion_info_request;
+    struct add_fd_completion_request add_fd_completion_request;
+    struct get_window_layered_info_request get_window_layered_info_request;
+    struct set_window_layered_info_request set_window_layered_info_request;
+    struct alloc_user_handle_request alloc_user_handle_request;
+    struct free_user_handle_request free_user_handle_request;
+    struct set_cursor_request set_cursor_request;
+    struct update_rawinput_devices_request update_rawinput_devices_request;
+    struct get_suspend_context_request get_suspend_context_request;
+    struct set_suspend_context_request set_suspend_context_request;
+};
+union generic_reply
+{
+    struct request_max_size max_size;
+    struct reply_header reply_header;
+    struct new_process_reply new_process_reply;
+    struct get_new_process_info_reply get_new_process_info_reply;
+    struct new_thread_reply new_thread_reply;
+    struct get_startup_info_reply get_startup_info_reply;
+    struct init_process_done_reply init_process_done_reply;
+    struct init_thread_reply init_thread_reply;
+    struct terminate_process_reply terminate_process_reply;
+    struct terminate_thread_reply terminate_thread_reply;
+    struct get_process_info_reply get_process_info_reply;
+    struct set_process_info_reply set_process_info_reply;
+    struct get_thread_info_reply get_thread_info_reply;
+    struct set_thread_info_reply set_thread_info_reply;
+    struct get_dll_info_reply get_dll_info_reply;
+    struct suspend_thread_reply suspend_thread_reply;
+    struct resume_thread_reply resume_thread_reply;
+    struct load_dll_reply load_dll_reply;
+    struct unload_dll_reply unload_dll_reply;
+    struct queue_apc_reply queue_apc_reply;
+    struct get_apc_result_reply get_apc_result_reply;
+    struct close_handle_reply close_handle_reply;
+    struct set_handle_info_reply set_handle_info_reply;
+    struct dup_handle_reply dup_handle_reply;
+    struct open_process_reply open_process_reply;
+    struct open_thread_reply open_thread_reply;
+    struct select_reply select_reply;
+    struct create_event_reply create_event_reply;
+    struct event_op_reply event_op_reply;
+    struct query_event_reply query_event_reply;
+    struct open_event_reply open_event_reply;
+    struct create_keyed_event_reply create_keyed_event_reply;
+    struct open_keyed_event_reply open_keyed_event_reply;
+    struct create_mutex_reply create_mutex_reply;
+    struct release_mutex_reply release_mutex_reply;
+    struct open_mutex_reply open_mutex_reply;
+    struct create_semaphore_reply create_semaphore_reply;
+    struct release_semaphore_reply release_semaphore_reply;
+    struct open_semaphore_reply open_semaphore_reply;
+    struct create_file_reply create_file_reply;
+    struct open_file_object_reply open_file_object_reply;
+    struct alloc_file_handle_reply alloc_file_handle_reply;
+    struct get_handle_unix_name_reply get_handle_unix_name_reply;
+    struct get_handle_fd_reply get_handle_fd_reply;
+    struct flush_file_reply flush_file_reply;
+    struct lock_file_reply lock_file_reply;
+    struct unlock_file_reply unlock_file_reply;
+    struct create_socket_reply create_socket_reply;
+    struct accept_socket_reply accept_socket_reply;
+    struct accept_into_socket_reply accept_into_socket_reply;
+    struct set_socket_event_reply set_socket_event_reply;
+    struct get_socket_event_reply get_socket_event_reply;
+    struct get_socket_info_reply get_socket_info_reply;
+    struct enable_socket_event_reply enable_socket_event_reply;
+    struct set_socket_deferred_reply set_socket_deferred_reply;
+    struct alloc_console_reply alloc_console_reply;
+    struct free_console_reply free_console_reply;
+    struct get_console_renderer_events_reply get_console_renderer_events_reply;
+    struct open_console_reply open_console_reply;
+    struct get_console_wait_event_reply get_console_wait_event_reply;
+    struct get_console_mode_reply get_console_mode_reply;
+    struct set_console_mode_reply set_console_mode_reply;
+    struct set_console_input_info_reply set_console_input_info_reply;
+    struct get_console_input_info_reply get_console_input_info_reply;
+    struct append_console_input_history_reply append_console_input_history_reply;
+    struct get_console_input_history_reply get_console_input_history_reply;
+    struct create_console_output_reply create_console_output_reply;
+    struct set_console_output_info_reply set_console_output_info_reply;
+    struct get_console_output_info_reply get_console_output_info_reply;
+    struct write_console_input_reply write_console_input_reply;
+    struct read_console_input_reply read_console_input_reply;
+    struct write_console_output_reply write_console_output_reply;
+    struct fill_console_output_reply fill_console_output_reply;
+    struct read_console_output_reply read_console_output_reply;
+    struct move_console_output_reply move_console_output_reply;
+    struct send_console_signal_reply send_console_signal_reply;
+    struct read_directory_changes_reply read_directory_changes_reply;
+    struct read_change_reply read_change_reply;
+    struct create_mapping_reply create_mapping_reply;
+    struct open_mapping_reply open_mapping_reply;
+    struct get_mapping_info_reply get_mapping_info_reply;
+    struct get_mapping_committed_range_reply get_mapping_committed_range_reply;
+    struct add_mapping_committed_range_reply add_mapping_committed_range_reply;
+    struct create_snapshot_reply create_snapshot_reply;
+    struct next_process_reply next_process_reply;
+    struct next_thread_reply next_thread_reply;
+    struct wait_debug_event_reply wait_debug_event_reply;
+    struct queue_exception_event_reply queue_exception_event_reply;
+    struct get_exception_status_reply get_exception_status_reply;
+    struct output_debug_string_reply output_debug_string_reply;
+    struct continue_debug_event_reply continue_debug_event_reply;
+    struct debug_process_reply debug_process_reply;
+    struct debug_break_reply debug_break_reply;
+    struct set_debugger_kill_on_exit_reply set_debugger_kill_on_exit_reply;
+    struct read_process_memory_reply read_process_memory_reply;
+    struct write_process_memory_reply write_process_memory_reply;
+    struct create_key_reply create_key_reply;
+    struct open_key_reply open_key_reply;
+    struct delete_key_reply delete_key_reply;
+    struct flush_key_reply flush_key_reply;
+    struct enum_key_reply enum_key_reply;
+    struct set_key_value_reply set_key_value_reply;
+    struct get_key_value_reply get_key_value_reply;
+    struct enum_key_value_reply enum_key_value_reply;
+    struct delete_key_value_reply delete_key_value_reply;
+    struct load_registry_reply load_registry_reply;
+    struct unload_registry_reply unload_registry_reply;
+    struct save_registry_reply save_registry_reply;
+    struct set_registry_notification_reply set_registry_notification_reply;
+    struct create_timer_reply create_timer_reply;
+    struct open_timer_reply open_timer_reply;
+    struct set_timer_reply set_timer_reply;
+    struct cancel_timer_reply cancel_timer_reply;
+    struct get_timer_info_reply get_timer_info_reply;
+    struct get_thread_context_reply get_thread_context_reply;
+    struct set_thread_context_reply set_thread_context_reply;
+    struct get_selector_entry_reply get_selector_entry_reply;
+    struct add_atom_reply add_atom_reply;
+    struct delete_atom_reply delete_atom_reply;
+    struct find_atom_reply find_atom_reply;
+    struct get_atom_information_reply get_atom_information_reply;
+    struct set_atom_information_reply set_atom_information_reply;
+    struct empty_atom_table_reply empty_atom_table_reply;
+    struct init_atom_table_reply init_atom_table_reply;
+    struct get_msg_queue_reply get_msg_queue_reply;
+    struct set_queue_fd_reply set_queue_fd_reply;
+    struct set_queue_mask_reply set_queue_mask_reply;
+    struct get_queue_status_reply get_queue_status_reply;
+    struct get_process_idle_event_reply get_process_idle_event_reply;
+    struct send_message_reply send_message_reply;
+    struct post_quit_message_reply post_quit_message_reply;
+    struct send_hardware_message_reply send_hardware_message_reply;
+    struct get_message_reply get_message_reply;
+    struct reply_message_reply reply_message_reply;
+    struct accept_hardware_message_reply accept_hardware_message_reply;
+    struct get_message_reply_reply get_message_reply_reply;
+    struct set_win_timer_reply set_win_timer_reply;
+    struct kill_win_timer_reply kill_win_timer_reply;
+    struct is_window_hung_reply is_window_hung_reply;
+    struct get_serial_info_reply get_serial_info_reply;
+    struct set_serial_info_reply set_serial_info_reply;
+    struct register_async_reply register_async_reply;
+    struct cancel_async_reply cancel_async_reply;
+    struct ioctl_reply ioctl_reply;
+    struct get_ioctl_result_reply get_ioctl_result_reply;
+    struct create_named_pipe_reply create_named_pipe_reply;
+    struct get_named_pipe_info_reply get_named_pipe_info_reply;
+    struct create_window_reply create_window_reply;
+    struct destroy_window_reply destroy_window_reply;
+    struct get_desktop_window_reply get_desktop_window_reply;
+    struct set_window_owner_reply set_window_owner_reply;
+    struct get_window_info_reply get_window_info_reply;
+    struct set_window_info_reply set_window_info_reply;
+    struct set_parent_reply set_parent_reply;
+    struct get_window_parents_reply get_window_parents_reply;
+    struct get_window_children_reply get_window_children_reply;
+    struct get_window_children_from_point_reply get_window_children_from_point_reply;
+    struct get_window_tree_reply get_window_tree_reply;
+    struct set_window_pos_reply set_window_pos_reply;
+    struct get_window_rectangles_reply get_window_rectangles_reply;
+    struct get_window_text_reply get_window_text_reply;
+    struct set_window_text_reply set_window_text_reply;
+    struct get_windows_offset_reply get_windows_offset_reply;
+    struct get_visible_region_reply get_visible_region_reply;
+    struct get_surface_region_reply get_surface_region_reply;
+    struct get_window_region_reply get_window_region_reply;
+    struct set_window_region_reply set_window_region_reply;
+    struct get_update_region_reply get_update_region_reply;
+    struct update_window_zorder_reply update_window_zorder_reply;
+    struct redraw_window_reply redraw_window_reply;
+    struct set_window_property_reply set_window_property_reply;
+    struct remove_window_property_reply remove_window_property_reply;
+    struct get_window_property_reply get_window_property_reply;
+    struct get_window_properties_reply get_window_properties_reply;
+    struct create_winstation_reply create_winstation_reply;
+    struct open_winstation_reply open_winstation_reply;
+    struct close_winstation_reply close_winstation_reply;
+    struct get_process_winstation_reply get_process_winstation_reply;
+    struct set_process_winstation_reply set_process_winstation_reply;
+    struct enum_winstation_reply enum_winstation_reply;
+    struct create_desktop_reply create_desktop_reply;
+    struct open_desktop_reply open_desktop_reply;
+    struct close_desktop_reply close_desktop_reply;
+    struct get_thread_desktop_reply get_thread_desktop_reply;
+    struct set_thread_desktop_reply set_thread_desktop_reply;
+    struct enum_desktop_reply enum_desktop_reply;
+    struct set_user_object_info_reply set_user_object_info_reply;
+    struct register_hotkey_reply register_hotkey_reply;
+    struct unregister_hotkey_reply unregister_hotkey_reply;
+    struct attach_thread_input_reply attach_thread_input_reply;
+    struct get_thread_input_reply get_thread_input_reply;
+    struct get_last_input_time_reply get_last_input_time_reply;
+    struct get_key_state_reply get_key_state_reply;
+    struct set_key_state_reply set_key_state_reply;
+    struct set_foreground_window_reply set_foreground_window_reply;
+    struct set_focus_window_reply set_focus_window_reply;
+    struct set_active_window_reply set_active_window_reply;
+    struct set_capture_window_reply set_capture_window_reply;
+    struct set_caret_window_reply set_caret_window_reply;
+    struct set_caret_info_reply set_caret_info_reply;
+    struct set_hook_reply set_hook_reply;
+    struct remove_hook_reply remove_hook_reply;
+    struct start_hook_chain_reply start_hook_chain_reply;
+    struct finish_hook_chain_reply finish_hook_chain_reply;
+    struct get_hook_info_reply get_hook_info_reply;
+    struct create_class_reply create_class_reply;
+    struct destroy_class_reply destroy_class_reply;
+    struct set_class_info_reply set_class_info_reply;
+    struct set_clipboard_info_reply set_clipboard_info_reply;
+    struct open_token_reply open_token_reply;
+    struct set_global_windows_reply set_global_windows_reply;
+    struct adjust_token_privileges_reply adjust_token_privileges_reply;
+    struct get_token_privileges_reply get_token_privileges_reply;
+    struct check_token_privileges_reply check_token_privileges_reply;
+    struct duplicate_token_reply duplicate_token_reply;
+    struct access_check_reply access_check_reply;
+    struct get_token_sid_reply get_token_sid_reply;
+    struct get_token_groups_reply get_token_groups_reply;
+    struct get_token_default_dacl_reply get_token_default_dacl_reply;
+    struct set_token_default_dacl_reply set_token_default_dacl_reply;
+    struct set_security_object_reply set_security_object_reply;
+    struct get_security_object_reply get_security_object_reply;
+    struct create_mailslot_reply create_mailslot_reply;
+    struct set_mailslot_info_reply set_mailslot_info_reply;
+    struct create_directory_reply create_directory_reply;
+    struct open_directory_reply open_directory_reply;
+    struct get_directory_entry_reply get_directory_entry_reply;
+    struct create_symlink_reply create_symlink_reply;
+    struct open_symlink_reply open_symlink_reply;
+    struct query_symlink_reply query_symlink_reply;
+    struct get_object_info_reply get_object_info_reply;
+    struct unlink_object_reply unlink_object_reply;
+    struct get_token_impersonation_level_reply get_token_impersonation_level_reply;
+    struct allocate_locally_unique_id_reply allocate_locally_unique_id_reply;
+    struct create_device_manager_reply create_device_manager_reply;
+    struct create_device_reply create_device_reply;
+    struct delete_device_reply delete_device_reply;
+    struct get_next_device_request_reply get_next_device_request_reply;
+    struct make_process_system_reply make_process_system_reply;
+    struct get_token_statistics_reply get_token_statistics_reply;
+    struct create_completion_reply create_completion_reply;
+    struct open_completion_reply open_completion_reply;
+    struct add_completion_reply add_completion_reply;
+    struct remove_completion_reply remove_completion_reply;
+    struct query_completion_reply query_completion_reply;
+    struct set_completion_info_reply set_completion_info_reply;
+    struct add_fd_completion_reply add_fd_completion_reply;
+    struct get_window_layered_info_reply get_window_layered_info_reply;
+    struct set_window_layered_info_reply set_window_layered_info_reply;
+    struct alloc_user_handle_reply alloc_user_handle_reply;
+    struct free_user_handle_reply free_user_handle_reply;
+    struct set_cursor_reply set_cursor_reply;
+    struct update_rawinput_devices_reply update_rawinput_devices_reply;
+    struct get_suspend_context_reply get_suspend_context_reply;
+    struct set_suspend_context_reply set_suspend_context_reply;
+};
+
+#define SERVER_PROTOCOL_VERSION 449
+
+#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h
new file mode 100644
index 0000000..f9928da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h
@@ -0,0 +1,669 @@
+/*
+ * Header file for Wine's strmbase implementation
+ *
+ * Copyright 2003 Robert Shearman
+ * Copyright 2010 Aric Stewart, 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc);
+void WINAPI FreeMediaType(AM_MEDIA_TYPE * pMediaType);
+AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const * pSrc);
+void WINAPI DeleteMediaType(AM_MEDIA_TYPE * pMediaType);
+
+/* Pin functions */
+
+typedef struct BasePin
+{
+	IPin IPin_iface;
+	LONG refCount;
+	LPCRITICAL_SECTION pCritSec;
+	PIN_INFO pinInfo;
+	IPin * pConnectedTo;
+	AM_MEDIA_TYPE mtCurrent;
+	REFERENCE_TIME tStart;
+	REFERENCE_TIME tStop;
+	double dRate;
+
+	const struct BasePinFuncTable* pFuncsTable;
+} BasePin;
+
+typedef HRESULT (WINAPI *BasePin_CheckMediaType)(BasePin *This, const AM_MEDIA_TYPE *pmt);
+typedef HRESULT (WINAPI *BasePin_AttemptConnection)(BasePin *This, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt);
+typedef LONG (WINAPI *BasePin_GetMediaTypeVersion)(BasePin *This);
+typedef HRESULT (WINAPI *BasePin_GetMediaType)(BasePin *This, int iPosition, AM_MEDIA_TYPE *amt);
+
+typedef struct BasePinFuncTable {
+	/* Required for Input Pins*/
+	BasePin_CheckMediaType pfnCheckMediaType;
+	/* Required for Output Pins*/
+	BasePin_AttemptConnection pfnAttemptConnection;
+	/* Required for BasePinImpl_EnumMediaTypes */
+	BasePin_GetMediaTypeVersion pfnGetMediaTypeVersion;
+	BasePin_GetMediaType pfnGetMediaType;
+} BasePinFuncTable;
+
+typedef struct BaseOutputPin
+{
+	/* inheritance C style! */
+	BasePin pin;
+	IMemInputPin * pMemInputPin;
+	IMemAllocator * pAllocator;
+
+	const struct BaseOutputPinFuncTable* pFuncsTable;
+} BaseOutputPin;
+
+typedef HRESULT (WINAPI *BaseOutputPin_DecideBufferSize)(BaseOutputPin *This, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest);
+typedef HRESULT (WINAPI *BaseOutputPin_DecideAllocator)(BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc);
+typedef HRESULT (WINAPI *BaseOutputPin_BreakConnect)(BaseOutputPin * This);
+
+typedef struct BaseOutputPinFuncTable {
+	/* Required for BaseOutputPinImpl_DecideAllocator */
+	BaseOutputPin_DecideBufferSize pfnDecideBufferSize;
+	/* Required for BaseOutputPinImpl_AttemptConnection */
+	BaseOutputPin_DecideAllocator pfnDecideAllocator;
+	BaseOutputPin_BreakConnect pfnBreakConnect;
+} BaseOutputPinFuncTable;
+
+typedef struct BaseInputPin
+{
+	/* inheritance C style! */
+	BasePin pin;
+
+	IMemInputPin IMemInputPin_iface;
+	IMemAllocator * pAllocator;
+	BOOL flushing, end_of_stream;
+	IMemAllocator *preferred_allocator;
+
+	const struct BaseInputPinFuncTable* pFuncsTable;
+} BaseInputPin;
+
+typedef HRESULT (WINAPI *BaseInputPin_Receive)(BaseInputPin *This, IMediaSample *pSample);
+
+typedef struct BaseInputPinFuncTable {
+	/* Optional */
+	BaseInputPin_Receive pfnReceive;
+} BaseInputPinFuncTable;
+
+/* Base Pin */
+HRESULT WINAPI BasePinImpl_GetMediaType(BasePin *This, int iPosition, AM_MEDIA_TYPE *pmt);
+LONG WINAPI BasePinImpl_GetMediaTypeVersion(BasePin *This);
+ULONG WINAPI BasePinImpl_AddRef(IPin * iface);
+HRESULT WINAPI BasePinImpl_Disconnect(IPin * iface);
+HRESULT WINAPI BasePinImpl_ConnectedTo(IPin * iface, IPin ** ppPin);
+HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin * iface, PIN_INFO * pInfo);
+HRESULT WINAPI BasePinImpl_QueryDirection(IPin * iface, PIN_DIRECTION * pPinDir);
+HRESULT WINAPI BasePinImpl_QueryId(IPin * iface, LPWSTR * Id);
+HRESULT WINAPI BasePinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum);
+HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin, ULONG * cPin);
+HRESULT WINAPI BasePinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+/* Base Output Pin */
+HRESULT WINAPI BaseOutputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI BaseOutputPinImpl_Release(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface);
+
+HRESULT WINAPI BaseOutputPinImpl_GetDeliveryBuffer(BaseOutputPin * This, IMediaSample ** ppSample, REFERENCE_TIME * tStart, REFERENCE_TIME * tStop, DWORD dwFlags);
+HRESULT WINAPI BaseOutputPinImpl_Deliver(BaseOutputPin * This, IMediaSample * pSample);
+HRESULT WINAPI BaseOutputPinImpl_BreakConnect(BaseOutputPin * This);
+HRESULT WINAPI BaseOutputPinImpl_Active(BaseOutputPin * This);
+HRESULT WINAPI BaseOutputPinImpl_Inactive(BaseOutputPin * This);
+HRESULT WINAPI BaseOutputPinImpl_InitAllocator(BaseOutputPin *This, IMemAllocator **pMemAlloc);
+HRESULT WINAPI BaseOutputPinImpl_DecideAllocator(BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc);
+HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(BasePin *This, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+
+HRESULT WINAPI BaseOutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, LONG outputpin_size, const PIN_INFO * pPinInfo, const BasePinFuncTable* pBaseFuncsTable, const BaseOutputPinFuncTable* pBaseOutputFuncsTable, LPCRITICAL_SECTION pCritSec, IPin ** ppPin);
+
+/* Base Input Pin */
+HRESULT WINAPI BaseInputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv);
+ULONG   WINAPI BaseInputPinImpl_Release(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_Connect(IPin * iface, IPin * pConnector, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseInputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseInputPinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseInputPinImpl_EndOfStream(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_BeginFlush(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_EndFlush(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+HRESULT BaseInputPin_Construct(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, const BasePinFuncTable* pBaseFuncsTable, const BaseInputPinFuncTable* pBaseInputFuncsTable, LPCRITICAL_SECTION pCritSec, IMemAllocator *, IPin ** ppPin);
+
+typedef struct BaseFilter
+{
+	IBaseFilter IBaseFilter_iface;
+	LONG refCount;
+	CRITICAL_SECTION csFilter;
+
+	FILTER_STATE state;
+	REFERENCE_TIME rtStreamStart;
+	IReferenceClock * pClock;
+	FILTER_INFO filterInfo;
+	CLSID clsid;
+	LONG pinVersion;
+
+	const struct BaseFilterFuncTable* pFuncsTable;
+} BaseFilter;
+
+typedef IPin* (WINAPI *BaseFilter_GetPin)(BaseFilter* iface, int iPosition);
+typedef LONG (WINAPI *BaseFilter_GetPinCount)(BaseFilter* iface);
+typedef LONG (WINAPI *BaseFilter_GetPinVersion)(BaseFilter* iface);
+
+typedef struct BaseFilterFuncTable {
+	/* Required */
+	BaseFilter_GetPin pfnGetPin;
+	BaseFilter_GetPinCount pfnGetPinCount;
+} BaseFilterFuncTable;
+
+HRESULT WINAPI BaseFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI BaseFilterImpl_AddRef(IBaseFilter * iface);
+ULONG WINAPI BaseFilterImpl_Release(IBaseFilter * iface);
+HRESULT WINAPI BaseFilterImpl_GetClassID(IBaseFilter * iface, CLSID * pClsid);
+HRESULT WINAPI BaseFilterImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState );
+HRESULT WINAPI BaseFilterImpl_SetSyncSource(IBaseFilter * iface, IReferenceClock *pClock);
+HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter * iface, IReferenceClock **ppClock);
+HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum);
+HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo);
+HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter * iface, IFilterGraph *pGraph, LPCWSTR pName );
+HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter * iface, LPWSTR *pVendorInfo);
+
+LONG WINAPI BaseFilterImpl_GetPinVersion(BaseFilter* This);
+VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter* This);
+
+HRESULT WINAPI BaseFilter_Init(BaseFilter * This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable* pBaseFuncsTable);
+
+/* Enums */
+HRESULT WINAPI EnumMediaTypes_Construct(BasePin *iface, BasePin_GetMediaType enumFunc, BasePin_GetMediaTypeVersion versionFunc, IEnumMediaTypes ** ppEnum);
+
+HRESULT WINAPI EnumPins_Construct(BaseFilter *base,  BaseFilter_GetPin receive_pin, BaseFilter_GetPinCount receive_pincount, BaseFilter_GetPinVersion receive_version, IEnumPins ** ppEnum);
+
+/* Transform Filter */
+typedef struct TransformFilter
+{
+	BaseFilter filter;
+
+	IPin **ppPins;
+	ULONG npins;
+	AM_MEDIA_TYPE pmt;
+	CRITICAL_SECTION csReceive;
+
+	const struct TransformFilterFuncTable * pFuncsTable;
+	struct QualityControlImpl *qcimpl;
+        /* IMediaSeeking and IMediaPosition are implemented by ISeekingPassThru */
+        IUnknown *seekthru_unk;
+} TransformFilter;
+
+typedef HRESULT (WINAPI *TransformFilter_DecideBufferSize) (TransformFilter *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest);
+typedef HRESULT (WINAPI *TransformFilter_StartStreaming) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_StopStreaming) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_Receive) (TransformFilter* iface, IMediaSample* pIn);
+typedef HRESULT (WINAPI *TransformFilter_CompleteConnect) (TransformFilter *iface, PIN_DIRECTION dir, IPin *pPin);
+typedef HRESULT (WINAPI *TransformFilter_BreakConnect) (TransformFilter *iface, PIN_DIRECTION dir);
+typedef HRESULT (WINAPI *TransformFilter_SetMediaType) (TransformFilter *iface, PIN_DIRECTION dir, const AM_MEDIA_TYPE *pMediaType);
+typedef HRESULT (WINAPI *TransformFilter_CheckInputType) (TransformFilter *iface, const AM_MEDIA_TYPE *pMediaType);
+typedef HRESULT (WINAPI *TransformFilter_EndOfStream) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_BeginFlush) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_EndFlush) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_NewSegment) (TransformFilter *iface,
+REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+typedef HRESULT (WINAPI *TransformFilter_Notify) (TransformFilter *iface, IBaseFilter *sender, Quality qm);
+
+typedef struct TransformFilterFuncTable {
+	/* Required */
+	TransformFilter_DecideBufferSize pfnDecideBufferSize;
+	/* Optional */
+	TransformFilter_StartStreaming pfnStartStreaming;
+	TransformFilter_Receive pfnReceive;
+	TransformFilter_StopStreaming pfnStopStreaming;
+	TransformFilter_CheckInputType pfnCheckInputType;
+	TransformFilter_SetMediaType pfnSetMediaType;
+	TransformFilter_CompleteConnect pfnCompleteConnect;
+	TransformFilter_BreakConnect pfnBreakConnect;
+	TransformFilter_EndOfStream pfnEndOfStream;
+	TransformFilter_BeginFlush pfnBeginFlush;
+	TransformFilter_EndFlush pfnEndFlush;
+	TransformFilter_NewSegment pfnNewSegment;
+	TransformFilter_Notify pfnNotify;
+} TransformFilterFuncTable;
+
+HRESULT WINAPI TransformFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI TransformFilterImpl_Release(IBaseFilter * iface);
+HRESULT WINAPI TransformFilterImpl_Stop(IBaseFilter * iface);
+HRESULT WINAPI TransformFilterImpl_Pause(IBaseFilter * iface);
+HRESULT WINAPI TransformFilterImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart);
+HRESULT WINAPI TransformFilterImpl_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin);
+HRESULT WINAPI TransformFilterImpl_Notify(TransformFilter *iface, IBaseFilter *sender, Quality qm);
+
+HRESULT TransformFilter_Construct( const IBaseFilterVtbl *filterVtbl, LONG filter_size, const CLSID* pClsid, const TransformFilterFuncTable* pFuncsTable, IBaseFilter ** ppTransformFilter);
+
+/* Source Seeking */
+typedef HRESULT (WINAPI *SourceSeeking_ChangeRate)(IMediaSeeking *iface);
+typedef HRESULT (WINAPI *SourceSeeking_ChangeStart)(IMediaSeeking *iface);
+typedef HRESULT (WINAPI *SourceSeeking_ChangeStop)(IMediaSeeking *iface);
+
+typedef struct SourceSeeking
+{
+	IMediaSeeking IMediaSeeking_iface;
+
+	ULONG refCount;
+	SourceSeeking_ChangeStop fnChangeStop;
+	SourceSeeking_ChangeStart fnChangeStart;
+	SourceSeeking_ChangeRate fnChangeRate;
+	DWORD dwCapabilities;
+	double dRate;
+	LONGLONG llCurrent, llStop, llDuration;
+	GUID timeformat;
+	PCRITICAL_SECTION crst;
+} SourceSeeking;
+
+HRESULT SourceSeeking_Init(SourceSeeking *pSeeking, const IMediaSeekingVtbl *Vtbl, SourceSeeking_ChangeStop fnChangeStop, SourceSeeking_ChangeStart fnChangeStart, SourceSeeking_ChangeRate fnChangeRate, PCRITICAL_SECTION crit_sect);
+
+HRESULT WINAPI SourceSeekingImpl_GetCapabilities(IMediaSeeking * iface, DWORD * pCapabilities);
+HRESULT WINAPI SourceSeekingImpl_CheckCapabilities(IMediaSeeking * iface, DWORD * pCapabilities);
+HRESULT WINAPI SourceSeekingImpl_IsFormatSupported(IMediaSeeking * iface, const GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_QueryPreferredFormat(IMediaSeeking * iface, GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_GetTimeFormat(IMediaSeeking * iface, GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_IsUsingTimeFormat(IMediaSeeking * iface, const GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_SetTimeFormat(IMediaSeeking * iface, const GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_GetDuration(IMediaSeeking * iface, LONGLONG * pDuration);
+HRESULT WINAPI SourceSeekingImpl_GetStopPosition(IMediaSeeking * iface, LONGLONG * pStop);
+HRESULT WINAPI SourceSeekingImpl_GetCurrentPosition(IMediaSeeking * iface, LONGLONG * pCurrent);
+HRESULT WINAPI SourceSeekingImpl_ConvertTimeFormat(IMediaSeeking * iface, LONGLONG * pTarget, const GUID * pTargetFormat, LONGLONG Source, const GUID * pSourceFormat);
+HRESULT WINAPI SourceSeekingImpl_SetPositions(IMediaSeeking * iface, LONGLONG * pCurrent, DWORD dwCurrentFlags, LONGLONG * pStop, DWORD dwStopFlags);
+HRESULT WINAPI SourceSeekingImpl_GetPositions(IMediaSeeking * iface, LONGLONG * pCurrent, LONGLONG * pStop);
+HRESULT WINAPI SourceSeekingImpl_GetAvailable(IMediaSeeking * iface, LONGLONG * pEarliest, LONGLONG * pLatest);
+HRESULT WINAPI SourceSeekingImpl_SetRate(IMediaSeeking * iface, double dRate);
+HRESULT WINAPI SourceSeekingImpl_GetRate(IMediaSeeking * iface, double * dRate);
+HRESULT WINAPI SourceSeekingImpl_GetPreroll(IMediaSeeking * iface, LONGLONG * pPreroll);
+
+/* PosPassThru */
+HRESULT WINAPI RendererPosPassThru_RegisterMediaTime(IUnknown *iface, REFERENCE_TIME start);
+HRESULT WINAPI RendererPosPassThru_ResetMediaTime(IUnknown *iface);
+HRESULT WINAPI RendererPosPassThru_EOS(IUnknown *iface);
+
+HRESULT WINAPI CreatePosPassThru(IUnknown* pUnkOuter, BOOL bRenderer, IPin *pPin, IUnknown **ppPassThru);
+HRESULT WINAPI PosPassThru_Construct(IUnknown* pUnkOuter, LPVOID *ppPassThru);
+
+/* Filter Registration */
+
+typedef REGPINTYPES AMOVIESETUP_MEDIATYPE;
+typedef REGFILTERPINS AMOVIESETUP_PIN;
+
+typedef struct AMOVIESETUP_FILTER {
+	const CLSID *clsid;
+	const WCHAR *name;
+	DWORD merit;
+	UINT pins;
+	const AMOVIESETUP_PIN *pPin;
+} AMOVIESETUP_FILTER, *LPAMOVIESETUP_FILTER;
+
+typedef IUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);
+typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid);
+
+typedef struct tagFactoryTemplate {
+	const WCHAR *m_Name;
+	const CLSID *m_ClsID;
+	LPFNNewCOMObject m_lpfnNew;
+	LPFNInitRoutine m_lpfnInit;
+	const AMOVIESETUP_FILTER *m_pAMovieSetup_Filter;
+} FactoryTemplate;
+
+HRESULT WINAPI AMovieDllRegisterServer2(BOOL bRegister);
+HRESULT WINAPI AMovieSetupRegisterFilter2(const AMOVIESETUP_FILTER *pFilter, IFilterMapper2  *pIFM2, BOOL  bRegister);
+
+/* Output Queue */
+typedef struct tagOutputQueue {
+    CRITICAL_SECTION csQueue;
+
+    BaseOutputPin * pInputPin;
+
+    HANDLE hThread;
+    HANDLE hProcessQueue;
+
+    LONG lBatchSize;
+    BOOL bBatchExact;
+    BOOL bTerminate;
+    BOOL bSendAnyway;
+
+    struct list *SampleList;
+
+    const struct OutputQueueFuncTable* pFuncsTable;
+} OutputQueue;
+
+typedef DWORD (WINAPI *OutputQueue_ThreadProc)(OutputQueue *This);
+
+typedef struct OutputQueueFuncTable
+{
+    OutputQueue_ThreadProc pfnThreadProc;
+} OutputQueueFuncTable;
+
+HRESULT WINAPI OutputQueue_Construct( BaseOutputPin *pInputPin, BOOL bAuto,
+    BOOL bQueue, LONG lBatchSize, BOOL bBatchExact, DWORD dwPriority,
+    const OutputQueueFuncTable* pFuncsTable, OutputQueue **ppOutputQueue );
+HRESULT WINAPI OutputQueue_Destroy(OutputQueue *pOutputQueue);
+HRESULT WINAPI OutputQueue_ReceiveMultiple(OutputQueue *pOutputQueue, IMediaSample **ppSamples, LONG nSamples, LONG *nSamplesProcessed);
+HRESULT WINAPI OutputQueue_Receive(OutputQueue *pOutputQueue, IMediaSample *pSample);
+VOID WINAPI OutputQueue_EOS(OutputQueue *pOutputQueue);
+VOID WINAPI OutputQueue_SendAnyway(OutputQueue *pOutputQueue);
+DWORD WINAPI OutputQueueImpl_ThreadProc(OutputQueue *pOutputQueue);
+
+typedef struct tagBaseWindow
+{
+	HWND hWnd;
+	LONG Width;
+	LONG Height;
+	HINSTANCE hInstance;
+	LPWSTR pClassName;
+	DWORD ClassStyles;
+	DWORD WindowStyles;
+	DWORD WindowStylesEx;
+	HDC hDC;
+
+	const struct BaseWindowFuncTable* pFuncsTable;
+} BaseWindow;
+
+typedef LPWSTR (WINAPI *BaseWindow_GetClassWindowStyles)(BaseWindow *This, DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx);
+typedef RECT (WINAPI *BaseWindow_GetDefaultRect)(BaseWindow *This);
+typedef BOOL (WINAPI *BaseWindow_PossiblyEatMessage)(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam);
+typedef LRESULT (WINAPI *BaseWindow_OnReceiveMessage)(BaseWindow *This, HWND hwnd, INT uMsg, WPARAM wParam, LPARAM lParam);
+typedef BOOL (WINAPI *BaseWindow_OnSize)(BaseWindow *This, LONG Height, LONG Width);
+
+typedef struct BaseWindowFuncTable
+{
+	/* Required */
+	BaseWindow_GetClassWindowStyles pfnGetClassWindowStyles;
+	BaseWindow_GetDefaultRect pfnGetDefaultRect;
+	/* Optional, WinProc Related */
+	BaseWindow_OnReceiveMessage pfnOnReceiveMessage;
+	BaseWindow_PossiblyEatMessage pfnPossiblyEatMessage;
+	BaseWindow_OnSize pfnOnSize;
+} BaseWindowFuncTable;
+
+HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable);
+HRESULT WINAPI BaseWindow_Destroy(BaseWindow *pBaseWindow);
+
+HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This);
+HRESULT WINAPI BaseWindowImpl_DoneWithWindow(BaseWindow *This);
+RECT WINAPI BaseWindowImpl_GetDefaultRect(BaseWindow *This);
+LRESULT WINAPI BaseWindowImpl_OnReceiveMessage(BaseWindow *This, HWND hwnd, INT uMsg, WPARAM wParam, LPARAM lParam);
+BOOL WINAPI BaseWindowImpl_OnSize(BaseWindow *This, LONG Height, LONG Width);
+
+typedef struct{
+    ITypeInfo *pTypeInfo;
+} BaseDispatch;
+
+HRESULT WINAPI BaseDispatch_Init(BaseDispatch *This, REFIID riid);
+HRESULT WINAPI BaseDispatch_Destroy(BaseDispatch *This);
+HRESULT WINAPI BaseDispatchImpl_GetIDsOfNames(BaseDispatch *This, REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid);
+HRESULT WINAPI BaseDispatchImpl_GetTypeInfo(BaseDispatch *This, REFIID riid, UINT itinfo, LCID lcid, ITypeInfo **pptinfo);
+HRESULT WINAPI BaseDispatchImpl_GetTypeInfoCount(BaseDispatch *This, UINT *pctinfo);
+
+#ifdef __IVideoWindow_FWD_DEFINED__
+typedef struct tagBaseControlWindow
+{
+	BaseWindow baseWindow;
+	IVideoWindow IVideoWindow_iface;
+	BaseDispatch baseDispatch;
+
+	BOOL AutoShow;
+	HWND hwndDrain;
+	HWND hwndOwner;
+	BaseFilter* pFilter;
+	CRITICAL_SECTION* pInterfaceLock;
+	BasePin*  pPin;
+} BaseControlWindow;
+
+HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const IVideoWindowVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseWindowFuncTable* pFuncsTable);
+HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow);
+
+BOOL WINAPI BaseControlWindowImpl_PossiblyEatMessage(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam);
+HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT*pctinfo);
+HRESULT WINAPI BaseControlWindowImpl_GetTypeInfo(IVideoWindow *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo);
+HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId);
+HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS*pDispParams, VARIANT*pVarResult, EXCEPINFO*pExepInfo, UINT*puArgErr);
+HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption);
+HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *strCaption);
+HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle);
+HRESULT WINAPI BaseControlWindowImpl_get_WindowStyle(IVideoWindow *iface, LONG *WindowStyle);
+HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG WindowStyleEx);
+HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *WindowStyleEx);
+HRESULT WINAPI BaseControlWindowImpl_put_AutoShow(IVideoWindow *iface, LONG AutoShow);
+HRESULT WINAPI BaseControlWindowImpl_get_AutoShow(IVideoWindow *iface, LONG *AutoShow);
+HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG WindowState);
+HRESULT WINAPI BaseControlWindowImpl_get_WindowState(IVideoWindow *iface, LONG *WindowState);
+HRESULT WINAPI BaseControlWindowImpl_put_BackgroundPalette(IVideoWindow *iface, LONG BackgroundPalette);
+HRESULT WINAPI BaseControlWindowImpl_get_BackgroundPalette(IVideoWindow *iface, LONG *pBackgroundPalette);
+HRESULT WINAPI BaseControlWindowImpl_put_Visible(IVideoWindow *iface, LONG Visible);
+HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *pVisible);
+HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG Left);
+HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *pLeft);
+HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG Width);
+HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *pWidth);
+HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG Top);
+HRESULT WINAPI BaseControlWindowImpl_get_Top(IVideoWindow *iface, LONG *pTop);
+
+HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG Height);
+HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND Owner);
+HRESULT WINAPI BaseControlWindowImpl_get_Owner(IVideoWindow *iface, OAHWND *Owner);
+HRESULT WINAPI BaseControlWindowImpl_put_MessageDrain(IVideoWindow *iface, OAHWND Drain);
+HRESULT WINAPI BaseControlWindowImpl_get_MessageDrain(IVideoWindow *iface, OAHWND *Drain);
+HRESULT WINAPI BaseControlWindowImpl_get_BorderColor(IVideoWindow *iface, LONG *Color);
+HRESULT WINAPI BaseControlWindowImpl_put_BorderColor(IVideoWindow *iface, LONG Color);
+HRESULT WINAPI BaseControlWindowImpl_get_FullScreenMode(IVideoWindow *iface, LONG *FullScreenMode);
+HRESULT WINAPI BaseControlWindowImpl_put_FullScreenMode(IVideoWindow *iface, LONG FullScreenMode);
+HRESULT WINAPI BaseControlWindowImpl_SetWindowForeground(IVideoWindow *iface, LONG Focus);
+HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG Left, LONG Top, LONG Width, LONG Height);
+HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_NotifyOwnerMessage(IVideoWindow *iface, OAHWND hwnd, LONG uMsg, LONG_PTR wParam, LONG_PTR lParam);
+HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_GetRestorePosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_HideCursor(IVideoWindow *iface, LONG HideCursor);
+HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden);
+#endif
+
+#ifdef __IBasicVideo_FWD_DEFINED__
+#ifdef __amvideo_h__
+typedef struct tagBaseControlVideo
+{
+	IBasicVideo IBasicVideo_iface;
+	BaseDispatch baseDispatch;
+
+	BaseFilter* pFilter;
+	CRITICAL_SECTION* pInterfaceLock;
+	BasePin*  pPin;
+
+	const struct BaseControlVideoFuncTable* pFuncsTable;
+} BaseControlVideo;
+
+typedef HRESULT (WINAPI *BaseControlVideo_GetSourceRect)(BaseControlVideo* This, RECT *pSourceRect);
+typedef HRESULT (WINAPI *BaseControlVideo_GetStaticImage)(BaseControlVideo* This, LONG *pBufferSize, LONG *pDIBImage);
+typedef HRESULT (WINAPI *BaseControlVideo_GetTargetRect)(BaseControlVideo* This, RECT *pTargetRect);
+typedef VIDEOINFOHEADER* (WINAPI *BaseControlVideo_GetVideoFormat)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_IsDefaultSourceRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_IsDefaultTargetRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultSourceRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultTargetRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_SetSourceRect)(BaseControlVideo* This, RECT *pSourceRect);
+typedef HRESULT (WINAPI *BaseControlVideo_SetTargetRect)(BaseControlVideo* This, RECT *pTargetRect);
+
+typedef struct BaseControlVideoFuncTable {
+	/* Required */
+	BaseControlVideo_GetSourceRect pfnGetSourceRect;
+	BaseControlVideo_GetStaticImage pfnGetStaticImage;
+	BaseControlVideo_GetTargetRect pfnGetTargetRect;
+	BaseControlVideo_GetVideoFormat pfnGetVideoFormat;
+	BaseControlVideo_IsDefaultSourceRect pfnIsDefaultSourceRect;
+	BaseControlVideo_IsDefaultTargetRect pfnIsDefaultTargetRect;
+	BaseControlVideo_SetDefaultSourceRect pfnSetDefaultSourceRect;
+	BaseControlVideo_SetDefaultTargetRect pfnSetDefaultTargetRect;
+	BaseControlVideo_SetSourceRect pfnSetSourceRect;
+	BaseControlVideo_SetTargetRect pfnSetTargetRect;
+} BaseControlVideoFuncTable;
+
+HRESULT WINAPI BaseControlVideo_Init(BaseControlVideo *pControlVideo, const IBasicVideoVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseControlVideoFuncTable* pFuncsTable);
+HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo);
+
+HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT*pctinfo);
+HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo);
+HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId);
+HRESULT WINAPI BaseControlVideoImpl_Invoke(IBasicVideo *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS*pDispParams, VARIANT*pVarResult, EXCEPINFO*pExepInfo, UINT*puArgErr);
+HRESULT WINAPI BaseControlVideoImpl_get_AvgTimePerFrame(IBasicVideo *iface, REFTIME *pAvgTimePerFrame);
+HRESULT WINAPI BaseControlVideoImpl_get_BitRate(IBasicVideo *iface, LONG *pBitRate);
+HRESULT WINAPI BaseControlVideoImpl_get_BitErrorRate(IBasicVideo *iface, LONG *pBitErrorRate);
+HRESULT WINAPI BaseControlVideoImpl_get_VideoWidth(IBasicVideo *iface, LONG *pVideoWidth);
+HRESULT WINAPI BaseControlVideoImpl_get_VideoHeight(IBasicVideo *iface, LONG *pVideoHeight);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceLeft(IBasicVideo *iface, LONG SourceLeft);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceWidth(IBasicVideo *iface, LONG SourceWidth);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceTop(IBasicVideo *iface, LONG SourceTop);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceHeight(IBasicVideo *iface, LONG SourceHeight);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationLeft(IBasicVideo *iface, LONG DestinationLeft);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationWidth(IBasicVideo *iface, LONG DestinationWidth);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationTop(IBasicVideo *iface, LONG DestinationTop);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationHeight(IBasicVideo *iface, LONG DestinationHeight);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight);
+HRESULT WINAPI BaseControlVideoImpl_SetSourcePosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height);
+HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlVideoImpl_SetDefaultSourcePosition(IBasicVideo *iface);
+HRESULT WINAPI BaseControlVideoImpl_SetDestinationPosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height);
+HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlVideoImpl_SetDefaultDestinationPosition(IBasicVideo *iface);
+HRESULT WINAPI BaseControlVideoImpl_GetVideoSize(IBasicVideo *iface, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlVideoImpl_GetVideoPaletteEntries(IBasicVideo *iface, LONG StartIndex, LONG Entries, LONG *pRetrieved, LONG *pPalette);
+HRESULT WINAPI BaseControlVideoImpl_GetCurrentImage(IBasicVideo *iface, LONG *pBufferSize, LONG *pDIBImage);
+HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultSource(IBasicVideo *iface);
+HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultDestination(IBasicVideo *iface);
+#endif
+#endif
+
+/* BaseRenderer Filter */
+typedef struct BaseRendererTag
+{
+	BaseFilter filter;
+
+	BaseInputPin *pInputPin;
+	IUnknown *pPosition;
+	CRITICAL_SECTION csRenderLock;
+	HANDLE evComplete;
+	HANDLE ThreadSignal;
+	HANDLE RenderEvent;
+	IMediaSample *pMediaSample;
+
+	IQualityControl *pQSink;
+	struct QualityControlImpl *qcimpl;
+
+	const struct BaseRendererFuncTable * pFuncsTable;
+} BaseRenderer;
+
+typedef HRESULT (WINAPI *BaseRenderer_CheckMediaType)(BaseRenderer *This, const AM_MEDIA_TYPE *pmt);
+typedef HRESULT (WINAPI *BaseRenderer_DoRenderSample)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnReceiveFirstSample)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnRenderEnd)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnRenderStart)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnStartStreaming)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_OnStopStreaming)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_OnWaitEnd)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_OnWaitStart)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_PrepareRender)(BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_ShouldDrawSampleNow)(BaseRenderer *This, IMediaSample *pMediaSample, REFERENCE_TIME *pStartTime, REFERENCE_TIME *pEndTime);
+typedef HRESULT (WINAPI *BaseRenderer_PrepareReceive)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef HRESULT (WINAPI *BaseRenderer_EndOfStream)(BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_BeginFlush) (BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_EndFlush) (BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_BreakConnect) (BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_CompleteConnect) (BaseRenderer *This, IPin *pReceivePin);
+
+typedef struct BaseRendererFuncTable {
+	/* Required */
+	BaseRenderer_CheckMediaType pfnCheckMediaType;
+	BaseRenderer_DoRenderSample pfnDoRenderSample;
+	/* Optional, Data Handlers */
+	BaseRenderer_OnReceiveFirstSample  pfnOnReceiveFirstSample;
+	BaseRenderer_OnRenderEnd  pfnOnRenderEnd;
+	BaseRenderer_OnRenderStart  pfnOnRenderStart;
+	BaseRenderer_OnStartStreaming  pfnOnStartStreaming;
+	BaseRenderer_OnStopStreaming  pfnOnStopStreaming;
+	BaseRenderer_OnWaitEnd  pfnOnWaitEnd;
+	BaseRenderer_OnWaitStart  pfnOnWaitStart;
+	BaseRenderer_PrepareRender  pfnPrepareRender;
+	BaseRenderer_ShouldDrawSampleNow  pfnShouldDrawSampleNow;
+	BaseRenderer_PrepareReceive pfnPrepareReceive;
+	/* Optional, Input Pin */
+	BaseRenderer_CompleteConnect pfnCompleteConnect;
+	BaseRenderer_BreakConnect pfnBreakConnect;
+	BaseRenderer_EndOfStream pfnEndOfStream;
+	BaseRenderer_BeginFlush pfnBeginFlush;
+	BaseRenderer_EndFlush pfnEndFlush;
+} BaseRendererFuncTable;
+
+HRESULT WINAPI BaseRendererImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
+ULONG   WINAPI BaseRendererImpl_Release(IBaseFilter * iface);
+HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSample);
+HRESULT WINAPI BaseRendererImpl_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin);
+HRESULT WINAPI BaseRendererImpl_Stop(IBaseFilter * iface);
+HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart);
+HRESULT WINAPI BaseRendererImpl_Pause(IBaseFilter * iface);
+HRESULT WINAPI BaseRendererImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *clock);
+HRESULT WINAPI BaseRendererImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState);
+HRESULT WINAPI BaseRendererImpl_EndOfStream(BaseRenderer* iface);
+HRESULT WINAPI BaseRendererImpl_BeginFlush(BaseRenderer* iface);
+HRESULT WINAPI BaseRendererImpl_EndFlush(BaseRenderer* iface);
+HRESULT WINAPI BaseRendererImpl_ClearPendingSample(BaseRenderer *iface);
+
+HRESULT WINAPI BaseRenderer_Init(BaseRenderer *This, const IBaseFilterVtbl *Vtbl, IUnknown *pUnkOuter, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseRendererFuncTable* pBaseFuncsTable);
+
+#ifdef __IBasicAudio_FWD_DEFINED__
+typedef struct tagBasicAudio
+{
+	IBasicAudio IBasicAudio_iface;
+	BaseDispatch baseDispatch;
+} BasicAudio;
+
+HRESULT WINAPI BasicAudio_Init(BasicAudio *This, const IBasicAudioVtbl *Vtbl);
+HRESULT WINAPI BasicAudio_Destroy(BasicAudio *pBasicAudio);
+
+HRESULT WINAPI BasicAudioImpl_GetTypeInfoCount(IBasicAudio *iface, UINT*pctinfo);
+HRESULT WINAPI BasicAudioImpl_GetTypeInfo(IBasicAudio *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+HRESULT WINAPI BasicAudioImpl_GetIDsOfNames(IBasicAudio *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+HRESULT WINAPI BasicAudioImpl_Invoke(IBasicAudio *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr);
+#endif
+
+/* Dll Functions */
+BOOL WINAPI STRMBASE_DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv);
+HRESULT WINAPI STRMBASE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv);
+HRESULT WINAPI STRMBASE_DllCanUnloadNow(void);
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl
new file mode 100644
index 0000000..9b80b45
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl
@@ -0,0 +1,380 @@
+/*
+ * svcctl interface definitions - exported by services.exe to access the
+ * services database
+ *
+ * Copyright 2007 Google (Mikolaj Zalewski)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+/*
+ * some defined for the C code
+ */
+cpp_quote("#include \"winsvc.h\"")
+cpp_quote("#define SVCCTL_TRANSPORT {'n','c','a','c','n','_','n','p',0}")
+cpp_quote("#define SVCCTL_ENDPOINT {'\\\\','p','i','p','e','\\\\','s','v','c','c','t','l',0}")
+
+/* Not the Windows event name - if needed the true one can be found in Inside Windows */
+cpp_quote("#define SVCCTL_STARTED_EVENT {'_','_','w','i','n','e','_','S','v','c','c','t','l','S','t','a','r','t','e','d',0}")
+
+/* Service startup protocol over control pipe - not compatible with Windows */
+enum service_pipe_command
+{
+    WINESERV_STARTINFO = 1,
+    WINESERV_SENDCONTROL = 2
+};
+
+typedef struct service_start_info_t
+{
+    enum service_pipe_command cmd;        /* request code */
+    DWORD                     total_size; /* total request size */
+    DWORD                     name_size;  /* size of name in data buffer */
+    DWORD                     control;    /* control code */
+    WCHAR                     data[1];
+} service_start_info;
+
+[
+    uuid(367abb81-9844-35f1-ad32-98f038001003),
+    version(2.0),
+    pointer_default(unique),
+    endpoint("ncacn_np:[\\pipe\\svcctl]")
+]
+interface svcctl
+{
+    /* handle types */
+    typedef [handle] LPCWSTR MACHINE_HANDLEW;
+    typedef [context_handle] void *SC_RPC_HANDLE;
+    typedef [context_handle] void *SC_RPC_LOCK;
+
+    /* undocumented access rights */
+    cpp_quote("#define SERVICE_SET_STATUS   0x8000")
+
+cpp_quote("#if 0 /* already defined in winsvc.h */")
+typedef struct _QUERY_SERVICE_CONFIGW {
+    DWORD   dwServiceType;
+    DWORD   dwStartType;
+    DWORD   dwErrorControl;
+    [unique] LPWSTR  lpBinaryPathName;
+    [unique] LPWSTR  lpLoadOrderGroup;
+    DWORD   dwTagId;
+    [unique] LPWSTR  lpDependencies;
+    [unique] LPWSTR  lpServiceStartName;
+    [unique] LPWSTR  lpDisplayName;
+} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
+
+typedef struct _SERVICE_STATUS {
+  DWORD dwServiceType;
+  DWORD dwCurrentState;
+  DWORD dwControlsAccepted;
+  DWORD dwWin32ExitCode;
+  DWORD dwServiceSpecificExitCode;
+  DWORD dwCheckPoint;
+  DWORD dwWaitHint;
+} SERVICE_STATUS, *LPSERVICE_STATUS;
+
+typedef enum _SC_STATUS_TYPE {
+  SC_STATUS_PROCESS_INFO      = 0
+} SC_STATUS_TYPE;
+
+typedef struct _SERVICE_DESCRIPTIONW {
+   LPWSTR lpDescription;
+} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
+
+typedef enum _SC_ACTION_TYPE {
+    SC_ACTION_NONE        = 0,
+    SC_ACTION_RESTART     = 1,
+    SC_ACTION_REBOOT      = 2,
+    SC_ACTION_RUN_COMMAND = 3
+} SC_ACTION_TYPE;
+
+typedef struct _SC_ACTION {
+    SC_ACTION_TYPE  Type;
+    DWORD       Delay;
+} SC_ACTION,*LPSC_ACTION;
+
+typedef struct _SERVICE_FAILURE_ACTIONSW {
+    DWORD dwResetPeriod;
+    [unique] LPWSTR lpRebootMsg;
+    [unique] LPWSTR lpCommand;
+    DWORD cActions;
+    [size_is(cActions)] SC_ACTION *lpsaActions;
+} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
+
+typedef struct _SERVICE_PRESHUTDOWN_INFO {
+    DWORD dwPreshutdownTimeout;
+} SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO;
+
+#define SERVICE_CONFIG_DESCRIPTION              1
+#define SERVICE_CONFIG_FAILURE_ACTIONS          2
+#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO  3
+#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG     4
+#define SERVICE_CONFIG_SERVICE_SID_INFO         5
+#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
+#define SERVICE_CONFIG_PRESHUTDOWN_INFO         7
+
+typedef struct _ENUM_SERVICE_STATUSW {
+    LPWSTR          lpServiceName;
+    LPWSTR          lpDisplayName;
+    SERVICE_STATUS  ServiceStatus;
+} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
+
+cpp_quote("#endif")
+
+typedef [switch_type(DWORD)] union
+{
+  [case (SERVICE_CONFIG_DESCRIPTION)] SERVICE_DESCRIPTIONW descr;
+  [case (SERVICE_CONFIG_FAILURE_ACTIONS)] SERVICE_FAILURE_ACTIONSW actions;
+  [case (SERVICE_CONFIG_PRESHUTDOWN_INFO)] SERVICE_PRESHUTDOWN_INFO preshutdown;
+} SERVICE_CONFIG2W;
+
+    /* Compatible with Windows function 0x00 */
+    DWORD svcctl_CloseServiceHandle(
+        [in,out] SC_RPC_HANDLE *handle
+    );
+
+    /* Compatible with Windows function 0x01 */
+    DWORD svcctl_ControlService(
+        [in] SC_RPC_HANDLE hService,
+        [in] DWORD dwControl,
+        [out] SERVICE_STATUS *lpServiceStatus
+    );
+
+    /* Compatible with Windows function 0x02 */
+    DWORD svcctl_DeleteService(
+        [in] SC_RPC_HANDLE hService
+    );
+
+    /* Compatible with Windows function 0x03 */
+    DWORD svcctl_LockServiceDatabase(
+        [in] SC_RPC_HANDLE hSCManager,
+        [out] SC_RPC_LOCK *phLock
+    );
+
+    /* Not compatible with Windows function 0x04 */
+    DWORD svcctl_QueryServiceObjectSecurity(/* FIXME */);
+
+    /* Not compatible with Windows function 0x05 */
+    DWORD svcctl_SetServiceObjectSecurity(/* FIXME */);
+
+    /* Not compatible with Windows function 0x06 */
+    DWORD svcctl_QueryServiceStatus(/* FIXME */);
+
+    /* Compatible with Windows function 0x07 */
+    DWORD svcctl_SetServiceStatus(
+        [in] SC_RPC_HANDLE hServiceStatus,
+        [in] LPSERVICE_STATUS lpServiceStatus
+    );
+
+    /* Compatible with Windows function 0x08 */
+    DWORD svcctl_UnlockServiceDatabase(
+        [in,out] SC_RPC_LOCK *phLock
+    );
+
+    /* Not compatible with Windows function 0x09 */
+    DWORD svcctl_NotifyBootConfigStatus(/* FIXME */);
+
+    /* Not compatible with Windows function 0x0a */
+    DWORD svcctl_SCSetServiceBitsW(/* FIXME */);
+
+    /* Compatible with Windows function 0x0b */
+    DWORD svcctl_ChangeServiceConfigW(
+        [in] SC_RPC_HANDLE hService,
+        [in] DWORD dwServiceType,
+        [in] DWORD dwStartType,
+        [in] DWORD dwErrorControl,
+        [in,unique] LPCWSTR lpBinaryPathName,
+        [in,unique] LPCWSTR lpLoadOrderGroupKey,
+        [in,out,unique] DWORD *lpdwTagId,
+        [in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
+        [in] DWORD dwDependenciesSize,
+        [in,unique] LPCWSTR lpServiceStartName,
+        [in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
+        [in] DWORD dwPasswordSize,
+        [in,unique] LPCWSTR lpDisplayName
+    );
+
+    /* Compatible with Windows function 0x0c */
+    DWORD svcctl_CreateServiceW(
+        [in] SC_RPC_HANDLE hSCManager,
+        [in] LPCWSTR lpServiceName,
+        [in,unique] LPCWSTR lpDisplayName,
+        [in] DWORD dwDesiredAccess,
+        [in] DWORD dwServiceType,
+        [in] DWORD dwStartType,
+        [in] DWORD dwErrorControl,
+        [in] LPCWSTR lpBinaryPathName,
+        [in,unique] LPCWSTR lpLoadOrderGroup,
+        [in,out,unique] DWORD *lpdwTagId,
+        [in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
+        [in] DWORD dwDependenciesSize,
+        [in,unique] LPCWSTR lpServiceStartName,
+        [in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
+        [in] DWORD dwPasswordSize,
+        [out] SC_RPC_HANDLE *phService
+    );
+
+    /* Not compatible with Windows function 0x0d */
+    DWORD svcctl_EnumDependentServicesW(/* FIXME */);
+
+    /* Not compatible with Windows function 0x0e */
+    DWORD svcctl_EnumServicesStatusW(
+        [in] SC_RPC_HANDLE hmngr,
+        [in] DWORD type,
+        [in] DWORD state,
+        [out,size_is(size)] BYTE *buffer,
+        [in] DWORD size,
+        [out] LPDWORD needed,
+        [out] LPDWORD returned
+    );
+
+    /* Compatible with Windows function 0x0f */
+    DWORD svcctl_OpenSCManagerW(
+        [in,unique] MACHINE_HANDLEW MachineName,
+        [in,unique] LPCWSTR DatabaseName,
+        [in] DWORD dwAccessMask,
+        [out] SC_RPC_HANDLE *handle
+    );
+
+    /* Compatible with Windows function 0x10 */
+    DWORD svcctl_OpenServiceW(
+        [in] SC_RPC_HANDLE hSCManager,
+        [in] LPCWSTR lpServiceName,
+        [in] DWORD dwDesiredAccess,
+        [out] SC_RPC_HANDLE *phService
+    );
+
+    /* Windows function 0x11 must be using a different prototype - not compatible */
+    DWORD svcctl_QueryServiceConfigW(
+        [in] SC_RPC_HANDLE hService,
+        [out] QUERY_SERVICE_CONFIGW *config);
+
+    /* Not compatible with Windows function 0x12 */
+    DWORD svcctl_QueryServiceLockStatusW(/* FIXME */);
+
+    /* Untested with Windows function 0x13 */
+    DWORD svcctl_StartServiceW(
+        [in] SC_RPC_HANDLE hService,
+        [in] DWORD dwNumServiceArgs,
+        [in,unique,size_is(dwNumServiceArgs)] LPCWSTR *lpServiceArgVectors
+    );
+
+    /* Compatible with Windows function 0x14 */
+    DWORD svcctl_GetServiceDisplayNameW(
+        [in] SC_RPC_HANDLE hSCManager,
+        [in] LPCWSTR lpServiceName,
+        [out,string,size_is(*cchBufSize+1)] WCHAR lpBuffer[],
+        [in,out] DWORD *cchBufSize);
+
+    /* Compatible with Windows function 0x15 */
+    DWORD svcctl_GetServiceKeyNameW(
+        [in] SC_RPC_HANDLE hSCManager,
+        [in] LPCWSTR lpServiceDisplayName,
+        [out,string,size_is(*cchBufSize+1)] WCHAR lpBuffer[],
+        [in,out] DWORD *cchBufSize);
+
+    /* Not compatible with Windows function 0x16 */
+    DWORD svcctl_SCSetServiceBitsA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x17 */
+    DWORD svcctl_ChangeServiceConfigA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x18 */
+    DWORD svcctl_CreateServiceA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x19 */
+    DWORD svcctl_EnumDependentServicesA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x1a */
+    DWORD svcctl_EnumServicesStatusA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x1b */
+    DWORD svcctl_OpenSCManagerA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x1c */
+    DWORD svcctl_OpenServiceA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x1d */
+    DWORD svcctl_QueryServiceConfigA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x1e */
+    DWORD svcctl_QueryServiceLockStatusA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x1f */
+    DWORD svcctl_StartServiceA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x20 */
+    DWORD svcctl_GetServiceDisplayNameA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x21 */
+    DWORD svcctl_GetServiceKeyNameA(/* FIXME */);
+
+    /* Not compatible with Windows function 0x22 */
+    DWORD svcctl_GetCurrentGroupStateW(/* FIXME */);
+
+    /* Not compatible with Windows function 0x23 */
+    DWORD svcctl_EnumServiceGroupW(/* FIXME */);
+
+    /* Not compatible with Windows function 0x24 */
+    DWORD svcctl_ChangeServiceConfig2A(/* FIXME */);
+
+    /* Untested with Windows function 0x25 */
+    DWORD svcctl_ChangeServiceConfig2W(
+        [in] SC_RPC_HANDLE hService,
+        [in] DWORD InfoLevel,
+        [in,switch_is(InfoLevel)] SERVICE_CONFIG2W *config );
+
+    /* Not compatible with Windows function 0x26 */
+    DWORD svcctl_QueryServiceConfig2A(/* FIXME */);
+
+    /* Untested with Windows function 0x27 */
+    DWORD svcctl_QueryServiceConfig2W(
+        [in] SC_RPC_HANDLE hService,
+        [in] DWORD InfoLevel,
+        [out,size_is(cbBufSize)] BYTE lpBuffer[],
+        [in] DWORD cbBufSize,
+        [out] LPDWORD pcbBytesNeeded
+    );
+
+    /* Untested with Windows function 0x28 */
+    DWORD svcctl_QueryServiceStatusEx(
+        [in] SC_RPC_HANDLE hService,
+        [in] SC_STATUS_TYPE InfoLevel,
+        [out,size_is(cbBufSize)] BYTE *lpBuffer,
+        [in] DWORD cbBufSize,
+        [out] LPDWORD pcbBytesNeeded
+    );
+
+    DWORD svcctl_EnumServicesStatusExW(
+        [in] SC_RPC_HANDLE hmngr,
+        [in] DWORD type,
+        [in] DWORD state,
+        [out,size_is(size)] BYTE *buffer,
+        [in] DWORD size,
+        [out] LPDWORD needed,
+        [out] LPDWORD returned,
+        [in,unique] LPCWSTR group
+    );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h
new file mode 100644
index 0000000..2fac361
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h
@@ -0,0 +1,654 @@
+/*
+ * Definitions for Wine C unit tests.
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_TEST_H
+#define __WINE_WINE_TEST_H
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <windef.h>
+#include <winbase.h>
+
+#ifdef __WINE_CONFIG_H
+#error config.h should not be used in Wine tests
+#endif
+#ifdef __WINE_WINE_LIBRARY_H
+#error wine/library.h should not be used in Wine tests
+#endif
+#ifdef __WINE_WINE_UNICODE_H
+#error wine/unicode.h should not be used in Wine tests
+#endif
+#ifdef __WINE_WINE_DEBUG_H
+#error wine/debug.h should not be used in Wine tests
+#endif
+
+#ifndef INVALID_FILE_ATTRIBUTES
+#define INVALID_FILE_ATTRIBUTES  (~0u)
+#endif
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER (~0u)
+#endif
+
+/* debug level */
+extern int winetest_debug;
+
+/* running in interactive mode? */
+extern int winetest_interactive;
+
+/* current platform */
+extern const char *winetest_platform;
+
+extern void winetest_set_location( const char* file, int line );
+extern void winetest_start_todo( const char* platform );
+extern int winetest_loop_todo(void);
+extern void winetest_end_todo( const char* platform );
+extern int winetest_get_mainargs( char*** pargv );
+extern LONG winetest_get_failures(void);
+extern void winetest_add_failures( LONG new_failures );
+extern void winetest_wait_child_process( HANDLE process );
+
+extern const char *wine_dbgstr_wn( const WCHAR *str, int n );
+static inline const char *wine_dbgstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+/* strcmpW is available for tests compiled under Wine, but not in standalone
+ * builds under Windows, so we reimplement it under a different name. */
+static inline int winetest_strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+    while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+#ifdef STANDALONE
+#define START_TEST(name) \
+  static void func_##name(void); \
+  const struct test winetest_testlist[] = { { #name, func_##name }, { 0, 0 } }; \
+  static void func_##name(void)
+#else
+#define START_TEST(name) void func_##name(void)
+#endif
+
+#if defined(__x86_64__) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT)
+#define __winetest_cdecl __cdecl
+#define __winetest_va_list __builtin_ms_va_list
+#else
+#define __winetest_cdecl
+#define __winetest_va_list va_list
+#endif
+
+extern int broken( int condition );
+extern int winetest_vok( int condition, const char *msg, __winetest_va_list ap );
+extern void winetest_vskip( const char *msg, __winetest_va_list ap );
+
+#ifdef __GNUC__
+
+extern void __winetest_cdecl winetest_ok( int condition, const char *msg, ... ) __attribute__((format (printf,2,3) ));
+extern void __winetest_cdecl winetest_skip( const char *msg, ... ) __attribute__((format (printf,1,2)));
+extern void __winetest_cdecl winetest_win_skip( const char *msg, ... ) __attribute__((format (printf,1,2)));
+extern void __winetest_cdecl winetest_trace( const char *msg, ... ) __attribute__((format (printf,1,2)));
+
+#else /* __GNUC__ */
+
+extern void __winetest_cdecl winetest_ok( int condition, const char *msg, ... );
+extern void __winetest_cdecl winetest_skip( const char *msg, ... );
+extern void __winetest_cdecl winetest_win_skip( const char *msg, ... );
+extern void __winetest_cdecl winetest_trace( const char *msg, ... );
+
+#endif /* __GNUC__ */
+
+#define ok_(file, line)       (winetest_set_location(file, line), 0) ? (void)0 : winetest_ok
+#define skip_(file, line)     (winetest_set_location(file, line), 0) ? (void)0 : winetest_skip
+#define win_skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_win_skip
+#define trace_(file, line)    (winetest_set_location(file, line), 0) ? (void)0 : winetest_trace
+
+#define ok       ok_(__FILE__, __LINE__)
+#define skip     skip_(__FILE__, __LINE__)
+#define win_skip win_skip_(__FILE__, __LINE__)
+#define trace    trace_(__FILE__, __LINE__)
+
+#define todo(platform) for (winetest_start_todo(platform); \
+                            winetest_loop_todo(); \
+                            winetest_end_todo(platform))
+#define todo_wine      todo("wine")
+
+
+#ifdef NONAMELESSUNION
+# define U(x)  (x).u
+# define U1(x) (x).u1
+# define U2(x) (x).u2
+# define U3(x) (x).u3
+# define U4(x) (x).u4
+# define U5(x) (x).u5
+# define U6(x) (x).u6
+# define U7(x) (x).u7
+# define U8(x) (x).u8
+#else
+# define U(x)  (x)
+# define U1(x) (x)
+# define U2(x) (x)
+# define U3(x) (x)
+# define U4(x) (x)
+# define U5(x) (x)
+# define U6(x) (x)
+# define U7(x) (x)
+# define U8(x) (x)
+#endif
+
+#ifdef NONAMELESSSTRUCT
+# define S(x)  (x).s
+# define S1(x) (x).s1
+# define S2(x) (x).s2
+# define S3(x) (x).s3
+# define S4(x) (x).s4
+# define S5(x) (x).s5
+#else
+# define S(x)  (x)
+# define S1(x) (x)
+# define S2(x) (x)
+# define S3(x) (x)
+# define S4(x) (x)
+# define S5(x) (x)
+#endif
+
+
+/************************************************************************/
+/* Below is the implementation of the various functions, to be included
+ * directly into the generated testlist.c file.
+ * It is done that way so that the dlls can build the test routines with
+ * different includes or flags if needed.
+ */
+
+#ifdef STANDALONE
+
+#include <stdio.h>
+#include <excpt.h>
+
+#if defined(__x86_64__) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT)
+# define __winetest_va_start(list,arg) __builtin_ms_va_start(list,arg)
+# define __winetest_va_end(list) __builtin_ms_va_end(list)
+#else
+# define __winetest_va_start(list,arg) va_start(list,arg)
+# define __winetest_va_end(list) va_end(list)
+#endif
+
+struct test
+{
+    const char *name;
+    void (*func)(void);
+};
+
+extern const struct test winetest_testlist[];
+
+/* debug level */
+int winetest_debug = 1;
+
+/* interactive mode? */
+int winetest_interactive = 0;
+
+/* current platform */
+const char *winetest_platform = "windows";
+
+/* report successful tests (BOOL) */
+static int report_success = 0;
+
+/* passing arguments around */
+static int winetest_argc;
+static char** winetest_argv;
+
+static const struct test *current_test; /* test currently being run */
+
+static LONG successes;       /* number of successful tests */
+static LONG failures;        /* number of failures */
+static LONG skipped;         /* number of skipped test chunks */
+static LONG todo_successes;  /* number of successful tests inside todo block */
+static LONG todo_failures;   /* number of failures inside todo block */
+
+/* The following data must be kept track of on a per-thread basis */
+typedef struct
+{
+    const char* current_file;        /* file of current check */
+    int current_line;                /* line of current check */
+    int todo_level;                  /* current todo nesting level */
+    int todo_do_loop;
+    char *str_pos;                   /* position in debug buffer */
+    char strings[2000];              /* buffer for debug strings */
+} tls_data;
+static DWORD tls_index;
+
+static tls_data* get_tls_data(void)
+{
+    tls_data* data;
+    DWORD last_error;
+
+    last_error=GetLastError();
+    data=TlsGetValue(tls_index);
+    if (!data)
+    {
+        data=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(tls_data));
+        data->str_pos = data->strings;
+        TlsSetValue(tls_index,data);
+    }
+    SetLastError(last_error);
+    return data;
+}
+
+/* allocate some tmp space for a string */
+static char *get_temp_buffer( size_t n )
+{
+    tls_data *data = get_tls_data();
+    char *res = data->str_pos;
+
+    if (res + n >= &data->strings[sizeof(data->strings)]) res = data->strings;
+    data->str_pos = res + n;
+    return res;
+}
+
+/* release extra space that we requested in gimme1() */
+static void release_temp_buffer( char *ptr, size_t size )
+{
+    tls_data *data = get_tls_data();
+    data->str_pos = ptr + size;
+}
+
+static void exit_process( int code )
+{
+    fflush( stdout );
+    ExitProcess( code );
+}
+
+
+void winetest_set_location( const char* file, int line )
+{
+    tls_data* data=get_tls_data();
+    data->current_file=strrchr(file,'/');
+    if (data->current_file==NULL)
+        data->current_file=strrchr(file,'\\');
+    if (data->current_file==NULL)
+        data->current_file=file;
+    else
+        data->current_file++;
+    data->current_line=line;
+}
+
+int broken( int condition )
+{
+    return (strcmp(winetest_platform, "windows") == 0) && condition;
+}
+
+/*
+ * Checks condition.
+ * Parameters:
+ *   - condition - condition to check;
+ *   - msg test description;
+ *   - file - test application source code file name of the check
+ *   - line - test application source code file line number of the check
+ * Return:
+ *   0 if condition does not have the expected value, 1 otherwise
+ */
+int winetest_vok( int condition, const char *msg, __winetest_va_list args )
+{
+    tls_data* data=get_tls_data();
+
+    if (data->todo_level)
+    {
+        if (condition)
+        {
+            fprintf( stdout, "%s:%d: Test succeeded inside todo block: ",
+                     data->current_file, data->current_line );
+            vfprintf(stdout, msg, args);
+            InterlockedIncrement(&todo_failures);
+            return 0;
+        }
+        else
+        {
+            if (winetest_debug > 0)
+            {
+                fprintf( stdout, "%s:%d: Test marked todo: ",
+                         data->current_file, data->current_line );
+                vfprintf(stdout, msg, args);
+            }
+            InterlockedIncrement(&todo_successes);
+            return 1;
+        }
+    }
+    else
+    {
+        if (!condition)
+        {
+            fprintf( stdout, "%s:%d: Test failed: ",
+                     data->current_file, data->current_line );
+            vfprintf(stdout, msg, args);
+            InterlockedIncrement(&failures);
+            return 0;
+        }
+        else
+        {
+            if (report_success)
+                fprintf( stdout, "%s:%d: Test succeeded\n",
+                         data->current_file, data->current_line);
+            InterlockedIncrement(&successes);
+            return 1;
+        }
+    }
+}
+
+void __winetest_cdecl winetest_ok( int condition, const char *msg, ... )
+{
+    __winetest_va_list valist;
+
+    __winetest_va_start(valist, msg);
+    winetest_vok(condition, msg, valist);
+    __winetest_va_end(valist);
+}
+
+void __winetest_cdecl winetest_trace( const char *msg, ... )
+{
+    __winetest_va_list valist;
+    tls_data* data=get_tls_data();
+
+    if (winetest_debug > 0)
+    {
+        fprintf( stdout, "%s:%d: ", data->current_file, data->current_line );
+        __winetest_va_start(valist, msg);
+        vfprintf(stdout, msg, valist);
+        __winetest_va_end(valist);
+    }
+}
+
+void winetest_vskip( const char *msg, __winetest_va_list args )
+{
+    tls_data* data=get_tls_data();
+
+    fprintf( stdout, "%s:%d: Tests skipped: ", data->current_file, data->current_line );
+    vfprintf(stdout, msg, args);
+    skipped++;
+}
+
+void __winetest_cdecl winetest_skip( const char *msg, ... )
+{
+    __winetest_va_list valist;
+    __winetest_va_start(valist, msg);
+    winetest_vskip(msg, valist);
+    __winetest_va_end(valist);
+}
+
+void __winetest_cdecl winetest_win_skip( const char *msg, ... )
+{
+    __winetest_va_list valist;
+    __winetest_va_start(valist, msg);
+    if (strcmp(winetest_platform, "windows") == 0)
+        winetest_vskip(msg, valist);
+    else
+        winetest_vok(0, msg, valist);
+    __winetest_va_end(valist);
+}
+
+void winetest_start_todo( const char* platform )
+{
+    tls_data* data=get_tls_data();
+    if (strcmp(winetest_platform,platform)==0)
+        data->todo_level++;
+    data->todo_do_loop=1;
+}
+
+int winetest_loop_todo(void)
+{
+    tls_data* data=get_tls_data();
+    int do_loop=data->todo_do_loop;
+    data->todo_do_loop=0;
+    return do_loop;
+}
+
+void winetest_end_todo( const char* platform )
+{
+    if (strcmp(winetest_platform,platform)==0)
+    {
+        tls_data* data=get_tls_data();
+        data->todo_level--;
+    }
+}
+
+int winetest_get_mainargs( char*** pargv )
+{
+    *pargv = winetest_argv;
+    return winetest_argc;
+}
+
+LONG winetest_get_failures(void)
+{
+    return failures;
+}
+
+void winetest_add_failures( LONG new_failures )
+{
+    while (new_failures-- > 0)
+        InterlockedIncrement( &failures );
+}
+
+void winetest_wait_child_process( HANDLE process )
+{
+    DWORD exit_code = 1;
+
+    if (WaitForSingleObject( process, 30000 ))
+        fprintf( stdout, "%s: child process wait failed\n", current_test->name );
+    else
+        GetExitCodeProcess( process, &exit_code );
+
+    if (exit_code)
+    {
+        if (exit_code > 255)
+        {
+            fprintf( stdout, "%s: exception 0x%08x in child process\n", current_test->name, exit_code );
+            InterlockedIncrement( &failures );
+        }
+        else
+        {
+            fprintf( stdout, "%s: %u failures in child process\n",
+                     current_test->name, exit_code );
+            while (exit_code-- > 0)
+                InterlockedIncrement(&failures);
+        }
+    }
+}
+
+const char *wine_dbgstr_wn( const WCHAR *str, int n )
+{
+    char *dst, *res;
+    size_t size;
+
+    if (!((ULONG_PTR)str >> 16))
+    {
+        if (!str) return "(null)";
+        res = get_temp_buffer( 6 );
+        sprintf( res, "#%04x", LOWORD(str) );
+        return res;
+    }
+    if (n == -1)
+    {
+        const WCHAR *end = str;
+        while (*end) end++;
+        n = end - str;
+    }
+    if (n < 0) n = 0;
+    size = 12 + min( 300, n * 5 );
+    dst = res = get_temp_buffer( size );
+    *dst++ = 'L';
+    *dst++ = '"';
+    while (n-- > 0 && dst <= res + size - 10)
+    {
+        WCHAR c = *str++;
+        switch (c)
+        {
+        case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+        case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+        case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+        case '"':  *dst++ = '\\'; *dst++ = '"'; break;
+        case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+        default:
+            if (c >= ' ' && c <= 126)
+                *dst++ = c;
+            else
+            {
+                *dst++ = '\\';
+                sprintf(dst,"%04x",c);
+                dst+=4;
+            }
+        }
+    }
+    *dst++ = '"';
+    if (n > 0)
+    {
+        *dst++ = '.';
+        *dst++ = '.';
+        *dst++ = '.';
+    }
+    *dst++ = 0;
+    release_temp_buffer( res, dst - res );
+    return res;
+}
+
+/* Find a test by name */
+static const struct test *find_test( const char *name )
+{
+    const struct test *test;
+    const char *p;
+    size_t len;
+
+    if ((p = strrchr( name, '/' ))) name = p + 1;
+    if ((p = strrchr( name, '\\' ))) name = p + 1;
+    len = strlen(name);
+    if (len > 2 && !strcmp( name + len - 2, ".c" )) len -= 2;
+
+    for (test = winetest_testlist; test->name; test++)
+    {
+        if (!strncmp( test->name, name, len ) && !test->name[len]) break;
+    }
+    return test->name ? test : NULL;
+}
+
+
+/* Display list of valid tests */
+static void list_tests(void)
+{
+    const struct test *test;
+
+    fprintf( stdout, "Valid test names:\n" );
+    for (test = winetest_testlist; test->name; test++) fprintf( stdout, "    %s\n", test->name );
+}
+
+
+/* Run a named test, and return exit status */
+static int run_test( const char *name )
+{
+    const struct test *test;
+    int status;
+
+    if (!(test = find_test( name )))
+    {
+        fprintf( stdout, "Fatal: test '%s' does not exist.\n", name );
+        exit_process(1);
+    }
+    successes = failures = todo_successes = todo_failures = 0;
+    tls_index=TlsAlloc();
+    current_test = test;
+    test->func();
+
+    if (winetest_debug)
+    {
+        fprintf( stdout, "%s: %d tests executed (%d marked as todo, %d %s), %d skipped.\n",
+                 test->name, successes + failures + todo_successes + todo_failures,
+                 todo_successes, failures + todo_failures,
+                 (failures + todo_failures != 1) ? "failures" : "failure",
+                 skipped );
+    }
+    status = (failures + todo_failures < 255) ? failures + todo_failures : 255;
+    return status;
+}
+
+
+/* Display usage and exit */
+static void usage( const char *argv0 )
+{
+    fprintf( stdout, "Usage: %s test_name\n\n", argv0 );
+    list_tests();
+    exit_process(1);
+}
+
+/* trap unhandled exceptions */
+static LONG CALLBACK exc_filter( EXCEPTION_POINTERS *ptrs )
+{
+    tls_data *data = get_tls_data();
+
+    if (data->current_file)
+        fprintf( stdout, "%s:%d: this is the last test seen before the exception\n",
+                 data->current_file, data->current_line );
+    fprintf( stdout, "%s: unhandled exception %08x at %p\n", current_test->name,
+             ptrs->ExceptionRecord->ExceptionCode, ptrs->ExceptionRecord->ExceptionAddress );
+    fflush( stdout );
+    return EXCEPTION_EXECUTE_HANDLER;
+}
+
+#ifdef __GNUC__
+void _fpreset(void) {} /* override the mingw fpu init code */
+#endif
+
+/* main function */
+int main( int argc, char **argv )
+{
+    char p[128];
+
+    setvbuf (stdout, NULL, _IONBF, 0);
+
+    winetest_argc = argc;
+    winetest_argv = argv;
+
+    if (GetEnvironmentVariableA( "WINETEST_PLATFORM", p, sizeof(p) )) winetest_platform = strdup(p);
+    if (GetEnvironmentVariableA( "WINETEST_DEBUG", p, sizeof(p) )) winetest_debug = atoi(p);
+    if (GetEnvironmentVariableA( "WINETEST_INTERACTIVE", p, sizeof(p) )) winetest_interactive = atoi(p);
+    if (GetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", p, sizeof(p) )) report_success = atoi(p);
+
+    if (!strcmp( winetest_platform, "windows" )) SetUnhandledExceptionFilter( exc_filter );
+    if (!winetest_interactive) SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX );
+
+    if (!argv[1])
+    {
+        if (winetest_testlist[0].name && !winetest_testlist[1].name)  /* only one test */
+            return run_test( winetest_testlist[0].name );
+        usage( argv[0] );
+    }
+    if (!strcmp( argv[1], "--list" ))
+    {
+        list_tests();
+        return 0;
+    }
+    return run_test(argv[1]);
+}
+
+#endif  /* STANDALONE */
+
+#endif  /* __WINE_WINE_TEST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h
new file mode 100644
index 0000000..4257f15
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h
@@ -0,0 +1,320 @@
+/*
+ * Wine internal Unicode definitions
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_UNICODE_H
+#define __WINE_WINE_UNICODE_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINE_UNICODE_API
+# if defined(_MSC_VER) || defined(__MINGW32__)
+#  define WINE_UNICODE_API DECLSPEC_IMPORT
+# else
+#  define WINE_UNICODE_API
+# endif
+#endif
+
+#ifndef WINE_UNICODE_INLINE
+#define WINE_UNICODE_INLINE static inline
+#endif
+
+/* code page info common to SBCS and DBCS */
+struct cp_info
+{
+    unsigned int          codepage;          /* codepage id */
+    unsigned int          char_size;         /* char size (1 or 2 bytes) */
+    WCHAR                 def_char;          /* default char value (can be double-byte) */
+    WCHAR                 def_unicode_char;  /* default Unicode char value */
+    const char           *name;              /* code page name */
+};
+
+struct sbcs_table
+{
+    struct cp_info        info;
+    const WCHAR          *cp2uni;            /* code page -> Unicode map */
+    const WCHAR          *cp2uni_glyphs;     /* code page -> Unicode map with glyph chars */
+    const unsigned char  *uni2cp_low;        /* Unicode -> code page map */
+    const unsigned short *uni2cp_high;
+};
+
+struct dbcs_table
+{
+    struct cp_info        info;
+    const WCHAR          *cp2uni;            /* code page -> Unicode map */
+    const unsigned char  *cp2uni_leadbytes;
+    const unsigned short *uni2cp_low;        /* Unicode -> code page map */
+    const unsigned short *uni2cp_high;
+    unsigned char         lead_bytes[12];    /* lead bytes ranges */
+};
+
+union cptable
+{
+    struct cp_info    info;
+    struct sbcs_table sbcs;
+    struct dbcs_table dbcs;
+};
+
+extern const union cptable *wine_cp_get_table( unsigned int codepage );
+extern const union cptable *wine_cp_enum_table( unsigned int index );
+
+extern int wine_cp_mbstowcs( const union cptable *table, int flags,
+                             const char *src, int srclen,
+                             WCHAR *dst, int dstlen );
+extern int wine_cp_wcstombs( const union cptable *table, int flags,
+                             const WCHAR *src, int srclen,
+                             char *dst, int dstlen, const char *defchar, int *used );
+extern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+
+extern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 );
+extern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen );
+
+extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );
+extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );
+extern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n );
+extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
+extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern int sprintfW( WCHAR *str, const WCHAR *format, ... );
+extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );
+extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );
+extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );
+
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
+{
+    return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
+}
+
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];
+    return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];
+    return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
+}
+
+/* the character type contains the C1_* flags in the low 12 bits */
+/* and the C2_* type in the high 4 bits */
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const unsigned short wine_wctype_table[];
+    return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_CNTRL;
+}
+
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_PUNCT;
+}
+
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_SPACE;
+}
+
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_DIGIT;
+}
+
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_XDIGIT;
+}
+
+WINE_UNICODE_INLINE int islowerW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_LOWER;
+}
+
+WINE_UNICODE_INLINE int isupperW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_UPPER;
+}
+
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isprintW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+/* some useful string manipulation routines */
+
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )
+{
+    const WCHAR *s = str;
+    while (*s) s++;
+    return s - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
+{
+    WCHAR *p = dst;
+    while ((*p++ = *src++));
+    return dst;
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead
+
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+    while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+{
+    if (n <= 0) return 0;
+    while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
+{
+    strcpyW( dst + strlenW(dst), src );
+    return dst;
+}
+
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+{
+    do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);
+    return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
+{
+    WCHAR *ret = NULL;
+    do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
+{
+    for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;
+    return NULL;
+}
+
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )
+{
+    const WCHAR *ptr;
+    for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
+    return ptr - str;
+}
+
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )
+{
+    const WCHAR *ptr;
+    for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
+    return ptr - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )
+{
+    WCHAR *ret;
+    for (ret = str; *str; str++) *str = tolowerW(*str);
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )
+{
+    WCHAR *ret;
+    for (ret = str; *str; str++) *str = toupperW(*str);
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+    const WCHAR *end;
+    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;
+    return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+    const WCHAR *end;
+    WCHAR *ret = NULL;
+    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;
+    return ret;
+}
+
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str )
+{
+    return strtolW( str, (WCHAR **)0, 10 );
+}
+
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str )
+{
+    return (int)atolW( str );
+}
+
+#undef WINE_UNICODE_INLINE
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINE_UNICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h
new file mode 100644
index 0000000..d3cfc7e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h
@@ -0,0 +1,5081 @@
+/* Automatically generated from http://www.opengl.org/registry/api files; DO NOT EDIT! */
+
+#ifndef __WINE_WGL_H
+#define __WINE_WGL_H
+
+#ifndef GLAPIENTRY
+#define GLAPIENTRY __stdcall
+#endif
+
+typedef unsigned int           GLbitfield;
+typedef unsigned char          GLboolean;
+typedef signed char            GLbyte;
+typedef char                   GLchar;
+typedef char                   GLcharARB;
+typedef double                 GLclampd;
+typedef float                  GLclampf;
+typedef double                 GLdouble;
+typedef unsigned int           GLenum;
+typedef float                  GLfloat;
+typedef unsigned short         GLhalfNV;
+typedef unsigned int           GLhandleARB;
+typedef int                    GLint;
+typedef INT64                  GLint64;
+typedef INT_PTR                GLintptr;
+typedef INT_PTR                GLintptrARB;
+typedef short                  GLshort;
+typedef int                    GLsizei;
+typedef INT_PTR                GLsizeiptr;
+typedef INT_PTR                GLsizeiptrARB;
+typedef const unsigned char *  GLstring;
+typedef struct __GLsync *      GLsync;
+typedef unsigned char          GLubyte;
+typedef unsigned int           GLuint;
+typedef UINT64                 GLuint64;
+typedef unsigned short         GLushort;
+typedef INT_PTR                GLvdpauSurfaceNV;
+typedef void                   GLvoid;
+
+#define GL_1PASS_EXT                                                  0x80A1
+#define GL_1PASS_SGIS                                                 0x80A1
+#define GL_2D                                                         0x0600
+#define GL_2PASS_0_EXT                                                0x80A2
+#define GL_2PASS_0_SGIS                                               0x80A2
+#define GL_2PASS_1_EXT                                                0x80A3
+#define GL_2PASS_1_SGIS                                               0x80A3
+#define GL_2X_BIT_ATI                                                 0x00000001
+#define GL_2_BYTES                                                    0x1407
+#define GL_3D                                                         0x0601
+#define GL_3DC_XY_AMD                                                 0x87FA
+#define GL_3DC_X_AMD                                                  0x87F9
+#define GL_3D_COLOR                                                   0x0602
+#define GL_3D_COLOR_TEXTURE                                           0x0603
+#define GL_3_BYTES                                                    0x1408
+#define GL_422_AVERAGE_EXT                                            0x80CE
+#define GL_422_EXT                                                    0x80CC
+#define GL_422_REV_AVERAGE_EXT                                        0x80CF
+#define GL_422_REV_EXT                                                0x80CD
+#define GL_4D_COLOR_TEXTURE                                           0x0604
+#define GL_4PASS_0_EXT                                                0x80A4
+#define GL_4PASS_0_SGIS                                               0x80A4
+#define GL_4PASS_1_EXT                                                0x80A5
+#define GL_4PASS_1_SGIS                                               0x80A5
+#define GL_4PASS_2_EXT                                                0x80A6
+#define GL_4PASS_2_SGIS                                               0x80A6
+#define GL_4PASS_3_EXT                                                0x80A7
+#define GL_4PASS_3_SGIS                                               0x80A7
+#define GL_4X_BIT_ATI                                                 0x00000002
+#define GL_4_BYTES                                                    0x1409
+#define GL_8X_BIT_ATI                                                 0x00000004
+#define GL_ABGR_EXT                                                   0x8000
+#define GL_ACCUM                                                      0x0100
+#define GL_ACCUM_ADJACENT_PAIRS_NV                                    0x90AD
+#define GL_ACCUM_ALPHA_BITS                                           0x0D5B
+#define GL_ACCUM_BLUE_BITS                                            0x0D5A
+#define GL_ACCUM_BUFFER_BIT                                           0x00000200
+#define GL_ACCUM_CLEAR_VALUE                                          0x0B80
+#define GL_ACCUM_GREEN_BITS                                           0x0D59
+#define GL_ACCUM_RED_BITS                                             0x0D58
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS                              0x92D9
+#define GL_ACTIVE_ATTRIBUTES                                          0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH                                0x8B8A
+#define GL_ACTIVE_PROGRAM                                             0x8259
+#define GL_ACTIVE_PROGRAM_EXT                                         0x8B8D
+#define GL_ACTIVE_RESOURCES                                           0x92F5
+#define GL_ACTIVE_STENCIL_FACE_EXT                                    0x8911
+#define GL_ACTIVE_SUBROUTINES                                         0x8DE5
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH                               0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS                                 0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS                        0x8E47
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH                       0x8E49
+#define GL_ACTIVE_TEXTURE                                             0x84E0
+#define GL_ACTIVE_TEXTURE_ARB                                         0x84E0
+#define GL_ACTIVE_UNIFORMS                                            0x8B86
+#define GL_ACTIVE_UNIFORM_BLOCKS                                      0x8A36
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH                       0x8A35
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH                                  0x8B87
+#define GL_ACTIVE_VARIABLES                                           0x9305
+#define GL_ACTIVE_VARYINGS_NV                                         0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV                               0x8C82
+#define GL_ACTIVE_VERTEX_UNITS_ARB                                    0x86A5
+#define GL_ADD                                                        0x0104
+#define GL_ADD_ATI                                                    0x8963
+#define GL_ADD_BLEND_IMG                                              0x8C09
+#define GL_ADD_SIGNED                                                 0x8574
+#define GL_ADD_SIGNED_ARB                                             0x8574
+#define GL_ADD_SIGNED_EXT                                             0x8574
+#define GL_ADJACENT_PAIRS_NV                                          0x90AE
+#define GL_AFFINE_2D_NV                                               0x9092
+#define GL_AFFINE_3D_NV                                               0x9094
+#define GL_ALIASED_LINE_WIDTH_RANGE                                   0x846E
+#define GL_ALIASED_POINT_SIZE_RANGE                                   0x846D
+#define GL_ALLOW_DRAW_FRG_HINT_PGI                                    0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI                                    0x1A211
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI                                    0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI                                    0x1A20F
+#define GL_ALL_ATTRIB_BITS                                            0xFFFFFFFF
+#define GL_ALL_BARRIER_BITS                                           0xFFFFFFFF
+#define GL_ALL_BARRIER_BITS_EXT                                       0xFFFFFFFF
+#define GL_ALL_COMPLETED_NV                                           0x84F2
+#define GL_ALL_SHADER_BITS                                            0xFFFFFFFF
+#define GL_ALL_SHADER_BITS_EXT                                        0xFFFFFFFF
+#define GL_ALPHA                                                      0x1906
+#define GL_ALPHA12                                                    0x803D
+#define GL_ALPHA12_EXT                                                0x803D
+#define GL_ALPHA16                                                    0x803E
+#define GL_ALPHA16F_ARB                                               0x881C
+#define GL_ALPHA16I_EXT                                               0x8D8A
+#define GL_ALPHA16UI_EXT                                              0x8D78
+#define GL_ALPHA16_EXT                                                0x803E
+#define GL_ALPHA16_SNORM                                              0x9018
+#define GL_ALPHA32F_ARB                                               0x8816
+#define GL_ALPHA32I_EXT                                               0x8D84
+#define GL_ALPHA32UI_EXT                                              0x8D72
+#define GL_ALPHA4                                                     0x803B
+#define GL_ALPHA4_EXT                                                 0x803B
+#define GL_ALPHA8                                                     0x803C
+#define GL_ALPHA8I_EXT                                                0x8D90
+#define GL_ALPHA8UI_EXT                                               0x8D7E
+#define GL_ALPHA8_EXT                                                 0x803C
+#define GL_ALPHA8_SNORM                                               0x9014
+#define GL_ALPHA_BIAS                                                 0x0D1D
+#define GL_ALPHA_BITS                                                 0x0D55
+#define GL_ALPHA_FLOAT16_APPLE                                        0x881C
+#define GL_ALPHA_FLOAT16_ATI                                          0x881C
+#define GL_ALPHA_FLOAT32_APPLE                                        0x8816
+#define GL_ALPHA_FLOAT32_ATI                                          0x8816
+#define GL_ALPHA_INTEGER                                              0x8D97
+#define GL_ALPHA_INTEGER_EXT                                          0x8D97
+#define GL_ALPHA_MAX_CLAMP_INGR                                       0x8567
+#define GL_ALPHA_MAX_SGIX                                             0x8321
+#define GL_ALPHA_MIN_CLAMP_INGR                                       0x8563
+#define GL_ALPHA_MIN_SGIX                                             0x8320
+#define GL_ALPHA_SCALE                                                0x0D1C
+#define GL_ALPHA_SNORM                                                0x9010
+#define GL_ALPHA_TEST                                                 0x0BC0
+#define GL_ALPHA_TEST_FUNC                                            0x0BC1
+#define GL_ALPHA_TEST_FUNC_QCOM                                       0x0BC1
+#define GL_ALPHA_TEST_QCOM                                            0x0BC0
+#define GL_ALPHA_TEST_REF                                             0x0BC2
+#define GL_ALPHA_TEST_REF_QCOM                                        0x0BC2
+#define GL_ALREADY_SIGNALED                                           0x911A
+#define GL_ALREADY_SIGNALED_APPLE                                     0x911A
+#define GL_ALWAYS                                                     0x0207
+#define GL_ALWAYS_FAST_HINT_PGI                                       0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI                                       0x1A20D
+#define GL_AMBIENT                                                    0x1200
+#define GL_AMBIENT_AND_DIFFUSE                                        0x1602
+#define GL_AND                                                        0x1501
+#define GL_AND_INVERTED                                               0x1504
+#define GL_AND_REVERSE                                                0x1502
+#define GL_ANY_SAMPLES_PASSED                                         0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE                            0x8D6A
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT                        0x8D6A
+#define GL_ANY_SAMPLES_PASSED_EXT                                     0x8C2F
+#define GL_ARC_TO_NV                                                  0xFE
+#define GL_ARRAY_BUFFER                                               0x8892
+#define GL_ARRAY_BUFFER_ARB                                           0x8892
+#define GL_ARRAY_BUFFER_BINDING                                       0x8894
+#define GL_ARRAY_BUFFER_BINDING_ARB                                   0x8894
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT                               0x81A9
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT                               0x81A8
+#define GL_ARRAY_OBJECT_BUFFER_ATI                                    0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI                                    0x8767
+#define GL_ARRAY_SIZE                                                 0x92FB
+#define GL_ARRAY_STRIDE                                               0x92FE
+#define GL_ASYNC_DRAW_PIXELS_SGIX                                     0x835D
+#define GL_ASYNC_HISTOGRAM_SGIX                                       0x832C
+#define GL_ASYNC_MARKER_SGIX                                          0x8329
+#define GL_ASYNC_READ_PIXELS_SGIX                                     0x835E
+#define GL_ASYNC_TEX_IMAGE_SGIX                                       0x835C
+#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                                0x8C93
+#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD                            0x87EE
+#define GL_ATC_RGB_AMD                                                0x8C92
+#define GL_ATOMIC_COUNTER_BARRIER_BIT                                 0x00001000
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT                             0x00001000
+#define GL_ATOMIC_COUNTER_BUFFER                                      0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS               0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES        0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING                              0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE                            0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX                                0x9301
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER         0x90ED
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER        0x92CB
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER        0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER    0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER          0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE                                 0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_START                                0x92C2
+#define GL_ATTACHED_SHADERS                                           0x8B85
+#define GL_ATTENUATION_EXT                                            0x834D
+#define GL_ATTRIB_ARRAY_POINTER_NV                                    0x8645
+#define GL_ATTRIB_ARRAY_SIZE_NV                                       0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV                                     0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV                                       0x8625
+#define GL_ATTRIB_STACK_DEPTH                                         0x0BB0
+#define GL_AUTO_GENERATE_MIPMAP                                       0x8295
+#define GL_AUTO_NORMAL                                                0x0D80
+#define GL_AUX0                                                       0x0409
+#define GL_AUX1                                                       0x040A
+#define GL_AUX2                                                       0x040B
+#define GL_AUX3                                                       0x040C
+#define GL_AUX_BUFFERS                                                0x0C00
+#define GL_AUX_DEPTH_STENCIL_APPLE                                    0x8A14
+#define GL_AVERAGE_EXT                                                0x8335
+#define GL_AVERAGE_HP                                                 0x8160
+#define GL_BACK                                                       0x0405
+#define GL_BACK_LEFT                                                  0x0402
+#define GL_BACK_NORMALS_HINT_PGI                                      0x1A223
+#define GL_BACK_PRIMARY_COLOR_NV                                      0x8C77
+#define GL_BACK_RIGHT                                                 0x0403
+#define GL_BACK_SECONDARY_COLOR_NV                                    0x8C78
+#define GL_BEVEL_NV                                                   0x90A6
+#define GL_BGR                                                        0x80E0
+#define GL_BGRA                                                       0x80E1
+#define GL_BGRA_EXT                                                   0x80E1
+#define GL_BGRA_INTEGER                                               0x8D9B
+#define GL_BGRA_INTEGER_EXT                                           0x8D9B
+#define GL_BGR_EXT                                                    0x80E0
+#define GL_BGR_INTEGER                                                0x8D9A
+#define GL_BGR_INTEGER_EXT                                            0x8D9A
+#define GL_BIAS_BIT_ATI                                               0x00000008
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV                               0x8541
+#define GL_BINNING_CONTROL_HINT_QCOM                                  0x8FB0
+#define GL_BINORMAL_ARRAY_EXT                                         0x843A
+#define GL_BINORMAL_ARRAY_POINTER_EXT                                 0x8443
+#define GL_BINORMAL_ARRAY_STRIDE_EXT                                  0x8441
+#define GL_BINORMAL_ARRAY_TYPE_EXT                                    0x8440
+#define GL_BITMAP                                                     0x1A00
+#define GL_BITMAP_TOKEN                                               0x0704
+#define GL_BLEND                                                      0x0BE2
+#define GL_BLEND_COLOR                                                0x8005
+#define GL_BLEND_COLOR_EXT                                            0x8005
+#define GL_BLEND_DST                                                  0x0BE0
+#define GL_BLEND_DST_ALPHA                                            0x80CA
+#define GL_BLEND_DST_ALPHA_EXT                                        0x80CA
+#define GL_BLEND_DST_ALPHA_OES                                        0x80CA
+#define GL_BLEND_DST_RGB                                              0x80C8
+#define GL_BLEND_DST_RGB_EXT                                          0x80C8
+#define GL_BLEND_DST_RGB_OES                                          0x80C8
+#define GL_BLEND_EQUATION                                             0x8009
+#define GL_BLEND_EQUATION_ALPHA                                       0x883D
+#define GL_BLEND_EQUATION_ALPHA_EXT                                   0x883D
+#define GL_BLEND_EQUATION_ALPHA_OES                                   0x883D
+#define GL_BLEND_EQUATION_EXT                                         0x8009
+#define GL_BLEND_EQUATION_OES                                         0x8009
+#define GL_BLEND_EQUATION_RGB                                         0x8009
+#define GL_BLEND_EQUATION_RGB_EXT                                     0x8009
+#define GL_BLEND_EQUATION_RGB_OES                                     0x8009
+#define GL_BLEND_SRC                                                  0x0BE1
+#define GL_BLEND_SRC_ALPHA                                            0x80CB
+#define GL_BLEND_SRC_ALPHA_EXT                                        0x80CB
+#define GL_BLEND_SRC_ALPHA_OES                                        0x80CB
+#define GL_BLEND_SRC_RGB                                              0x80C9
+#define GL_BLEND_SRC_RGB_EXT                                          0x80C9
+#define GL_BLEND_SRC_RGB_OES                                          0x80C9
+#define GL_BLOCK_INDEX                                                0x92FD
+#define GL_BLUE                                                       0x1905
+#define GL_BLUE_BIAS                                                  0x0D1B
+#define GL_BLUE_BITS                                                  0x0D54
+#define GL_BLUE_BIT_ATI                                               0x00000004
+#define GL_BLUE_INTEGER                                               0x8D96
+#define GL_BLUE_INTEGER_EXT                                           0x8D96
+#define GL_BLUE_MAX_CLAMP_INGR                                        0x8566
+#define GL_BLUE_MIN_CLAMP_INGR                                        0x8562
+#define GL_BLUE_SCALE                                                 0x0D1A
+#define GL_BOLD_BIT_NV                                                0x01
+#define GL_BOOL                                                       0x8B56
+#define GL_BOOL_ARB                                                   0x8B56
+#define GL_BOOL_VEC2                                                  0x8B57
+#define GL_BOOL_VEC2_ARB                                              0x8B57
+#define GL_BOOL_VEC3                                                  0x8B58
+#define GL_BOOL_VEC3_ARB                                              0x8B58
+#define GL_BOOL_VEC4                                                  0x8B59
+#define GL_BOOL_VEC4_ARB                                              0x8B59
+#define GL_BOUNDING_BOX_NV                                            0x908D
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV                          0x909C
+#define GL_BUFFER                                                     0x82E0
+#define GL_BUFFER_ACCESS                                              0x88BB
+#define GL_BUFFER_ACCESS_ARB                                          0x88BB
+#define GL_BUFFER_ACCESS_FLAGS                                        0x911F
+#define GL_BUFFER_ACCESS_OES                                          0x88BB
+#define GL_BUFFER_BINDING                                             0x9302
+#define GL_BUFFER_DATA_SIZE                                           0x9303
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE                                0x8A13
+#define GL_BUFFER_GPU_ADDRESS_NV                                      0x8F1D
+#define GL_BUFFER_MAPPED                                              0x88BC
+#define GL_BUFFER_MAPPED_ARB                                          0x88BC
+#define GL_BUFFER_MAPPED_OES                                          0x88BC
+#define GL_BUFFER_MAP_LENGTH                                          0x9120
+#define GL_BUFFER_MAP_OFFSET                                          0x9121
+#define GL_BUFFER_MAP_POINTER                                         0x88BD
+#define GL_BUFFER_MAP_POINTER_ARB                                     0x88BD
+#define GL_BUFFER_MAP_POINTER_OES                                     0x88BD
+#define GL_BUFFER_OBJECT_APPLE                                        0x85B3
+#define GL_BUFFER_OBJECT_EXT                                          0x9151
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE                             0x8A12
+#define GL_BUFFER_SIZE                                                0x8764
+#define GL_BUFFER_SIZE_ARB                                            0x8764
+#define GL_BUFFER_UPDATE_BARRIER_BIT                                  0x00000200
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT                              0x00000200
+#define GL_BUFFER_USAGE                                               0x8765
+#define GL_BUFFER_USAGE_ARB                                           0x8765
+#define GL_BUFFER_VARIABLE                                            0x92E5
+#define GL_BUMP_ENVMAP_ATI                                            0x877B
+#define GL_BUMP_NUM_TEX_UNITS_ATI                                     0x8777
+#define GL_BUMP_ROT_MATRIX_ATI                                        0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI                                   0x8776
+#define GL_BUMP_TARGET_ATI                                            0x877C
+#define GL_BUMP_TEX_UNITS_ATI                                         0x8778
+#define GL_BYTE                                                       0x1400
+#define GL_C3F_V3F                                                    0x2A24
+#define GL_C4F_N3F_V3F                                                0x2A26
+#define GL_C4UB_V2F                                                   0x2A22
+#define GL_C4UB_V3F                                                   0x2A23
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX                                 0x8183
+#define GL_CAVEAT_SUPPORT                                             0x82B8
+#define GL_CCW                                                        0x0901
+#define GL_CIRCULAR_CCW_ARC_TO_NV                                     0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV                                      0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV                                 0xFC
+#define GL_CLAMP                                                      0x2900
+#define GL_CLAMP_FRAGMENT_COLOR                                       0x891B
+#define GL_CLAMP_FRAGMENT_COLOR_ARB                                   0x891B
+#define GL_CLAMP_READ_COLOR                                           0x891C
+#define GL_CLAMP_READ_COLOR_ARB                                       0x891C
+#define GL_CLAMP_TO_BORDER                                            0x812D
+#define GL_CLAMP_TO_BORDER_ARB                                        0x812D
+#define GL_CLAMP_TO_BORDER_SGIS                                       0x812D
+#define GL_CLAMP_TO_EDGE                                              0x812F
+#define GL_CLAMP_TO_EDGE_SGIS                                         0x812F
+#define GL_CLAMP_VERTEX_COLOR                                         0x891A
+#define GL_CLAMP_VERTEX_COLOR_ARB                                     0x891A
+#define GL_CLEAR                                                      0x1500
+#define GL_CLEAR_BUFFER                                               0x82B4
+#define GL_CLIENT_ACTIVE_TEXTURE                                      0x84E1
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB                                  0x84E1
+#define GL_CLIENT_ALL_ATTRIB_BITS                                     0xFFFFFFFF
+#define GL_CLIENT_ATTRIB_STACK_DEPTH                                  0x0BB1
+#define GL_CLIENT_PIXEL_STORE_BIT                                     0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT                                    0x00000002
+#define GL_CLIP_DISTANCE0                                             0x3000
+#define GL_CLIP_DISTANCE1                                             0x3001
+#define GL_CLIP_DISTANCE2                                             0x3002
+#define GL_CLIP_DISTANCE3                                             0x3003
+#define GL_CLIP_DISTANCE4                                             0x3004
+#define GL_CLIP_DISTANCE5                                             0x3005
+#define GL_CLIP_DISTANCE6                                             0x3006
+#define GL_CLIP_DISTANCE7                                             0x3007
+#define GL_CLIP_DISTANCE_NV                                           0x8C7A
+#define GL_CLIP_FAR_HINT_PGI                                          0x1A221
+#define GL_CLIP_NEAR_HINT_PGI                                         0x1A220
+#define GL_CLIP_PLANE0                                                0x3000
+#define GL_CLIP_PLANE1                                                0x3001
+#define GL_CLIP_PLANE2                                                0x3002
+#define GL_CLIP_PLANE3                                                0x3003
+#define GL_CLIP_PLANE4                                                0x3004
+#define GL_CLIP_PLANE5                                                0x3005
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT                              0x80F0
+#define GL_CLOSE_PATH_NV                                              0x00
+#define GL_CMYKA_EXT                                                  0x800D
+#define GL_CMYK_EXT                                                   0x800C
+#define GL_CND0_ATI                                                   0x896B
+#define GL_CND_ATI                                                    0x896A
+#define GL_COEFF                                                      0x0A00
+#define GL_COLOR                                                      0x1800
+#define GL_COLOR3_BIT_PGI                                             0x00010000
+#define GL_COLOR4_BIT_PGI                                             0x00020000
+#define GL_COLOR_ALPHA_PAIRING_ATI                                    0x8975
+#define GL_COLOR_ARRAY                                                0x8076
+#define GL_COLOR_ARRAY_ADDRESS_NV                                     0x8F23
+#define GL_COLOR_ARRAY_BUFFER_BINDING                                 0x8898
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB                             0x8898
+#define GL_COLOR_ARRAY_COUNT_EXT                                      0x8084
+#define GL_COLOR_ARRAY_EXT                                            0x8076
+#define GL_COLOR_ARRAY_LENGTH_NV                                      0x8F2D
+#define GL_COLOR_ARRAY_LIST_IBM                                       103072
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM                                103082
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL                        0x83F7
+#define GL_COLOR_ARRAY_POINTER                                        0x8090
+#define GL_COLOR_ARRAY_POINTER_EXT                                    0x8090
+#define GL_COLOR_ARRAY_SIZE                                           0x8081
+#define GL_COLOR_ARRAY_SIZE_EXT                                       0x8081
+#define GL_COLOR_ARRAY_STRIDE                                         0x8083
+#define GL_COLOR_ARRAY_STRIDE_EXT                                     0x8083
+#define GL_COLOR_ARRAY_TYPE                                           0x8082
+#define GL_COLOR_ARRAY_TYPE_EXT                                       0x8082
+#define GL_COLOR_ATTACHMENT0                                          0x8CE0
+#define GL_COLOR_ATTACHMENT0_EXT                                      0x8CE0
+#define GL_COLOR_ATTACHMENT0_NV                                       0x8CE0
+#define GL_COLOR_ATTACHMENT0_OES                                      0x8CE0
+#define GL_COLOR_ATTACHMENT1                                          0x8CE1
+#define GL_COLOR_ATTACHMENT10                                         0x8CEA
+#define GL_COLOR_ATTACHMENT10_EXT                                     0x8CEA
+#define GL_COLOR_ATTACHMENT10_NV                                      0x8CEA
+#define GL_COLOR_ATTACHMENT11                                         0x8CEB
+#define GL_COLOR_ATTACHMENT11_EXT                                     0x8CEB
+#define GL_COLOR_ATTACHMENT11_NV                                      0x8CEB
+#define GL_COLOR_ATTACHMENT12                                         0x8CEC
+#define GL_COLOR_ATTACHMENT12_EXT                                     0x8CEC
+#define GL_COLOR_ATTACHMENT12_NV                                      0x8CEC
+#define GL_COLOR_ATTACHMENT13                                         0x8CED
+#define GL_COLOR_ATTACHMENT13_EXT                                     0x8CED
+#define GL_COLOR_ATTACHMENT13_NV                                      0x8CED
+#define GL_COLOR_ATTACHMENT14                                         0x8CEE
+#define GL_COLOR_ATTACHMENT14_EXT                                     0x8CEE
+#define GL_COLOR_ATTACHMENT14_NV                                      0x8CEE
+#define GL_COLOR_ATTACHMENT15                                         0x8CEF
+#define GL_COLOR_ATTACHMENT15_EXT                                     0x8CEF
+#define GL_COLOR_ATTACHMENT15_NV                                      0x8CEF
+#define GL_COLOR_ATTACHMENT1_EXT                                      0x8CE1
+#define GL_COLOR_ATTACHMENT1_NV                                       0x8CE1
+#define GL_COLOR_ATTACHMENT2                                          0x8CE2
+#define GL_COLOR_ATTACHMENT2_EXT                                      0x8CE2
+#define GL_COLOR_ATTACHMENT2_NV                                       0x8CE2
+#define GL_COLOR_ATTACHMENT3                                          0x8CE3
+#define GL_COLOR_ATTACHMENT3_EXT                                      0x8CE3
+#define GL_COLOR_ATTACHMENT3_NV                                       0x8CE3
+#define GL_COLOR_ATTACHMENT4                                          0x8CE4
+#define GL_COLOR_ATTACHMENT4_EXT                                      0x8CE4
+#define GL_COLOR_ATTACHMENT4_NV                                       0x8CE4
+#define GL_COLOR_ATTACHMENT5                                          0x8CE5
+#define GL_COLOR_ATTACHMENT5_EXT                                      0x8CE5
+#define GL_COLOR_ATTACHMENT5_NV                                       0x8CE5
+#define GL_COLOR_ATTACHMENT6                                          0x8CE6
+#define GL_COLOR_ATTACHMENT6_EXT                                      0x8CE6
+#define GL_COLOR_ATTACHMENT6_NV                                       0x8CE6
+#define GL_COLOR_ATTACHMENT7                                          0x8CE7
+#define GL_COLOR_ATTACHMENT7_EXT                                      0x8CE7
+#define GL_COLOR_ATTACHMENT7_NV                                       0x8CE7
+#define GL_COLOR_ATTACHMENT8                                          0x8CE8
+#define GL_COLOR_ATTACHMENT8_EXT                                      0x8CE8
+#define GL_COLOR_ATTACHMENT8_NV                                       0x8CE8
+#define GL_COLOR_ATTACHMENT9                                          0x8CE9
+#define GL_COLOR_ATTACHMENT9_EXT                                      0x8CE9
+#define GL_COLOR_ATTACHMENT9_NV                                       0x8CE9
+#define GL_COLOR_ATTACHMENT_EXT                                       0x90F0
+#define GL_COLOR_BUFFER_BIT                                           0x00004000
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI                            0x8835
+#define GL_COLOR_CLEAR_VALUE                                          0x0C22
+#define GL_COLOR_COMPONENTS                                           0x8283
+#define GL_COLOR_ENCODING                                             0x8296
+#define GL_COLOR_EXT                                                  0x1800
+#define GL_COLOR_FLOAT_APPLE                                          0x8A0F
+#define GL_COLOR_INDEX                                                0x1900
+#define GL_COLOR_INDEX12_EXT                                          0x80E6
+#define GL_COLOR_INDEX16_EXT                                          0x80E7
+#define GL_COLOR_INDEX1_EXT                                           0x80E2
+#define GL_COLOR_INDEX2_EXT                                           0x80E3
+#define GL_COLOR_INDEX4_EXT                                           0x80E4
+#define GL_COLOR_INDEX8_EXT                                           0x80E5
+#define GL_COLOR_INDEXES                                              0x1603
+#define GL_COLOR_LOGIC_OP                                             0x0BF2
+#define GL_COLOR_MATERIAL                                             0x0B57
+#define GL_COLOR_MATERIAL_FACE                                        0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER                                   0x0B56
+#define GL_COLOR_MATRIX                                               0x80B1
+#define GL_COLOR_MATRIX_SGI                                           0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH                                   0x80B2
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI                               0x80B2
+#define GL_COLOR_RENDERABLE                                           0x8286
+#define GL_COLOR_SAMPLES_NV                                           0x8E20
+#define GL_COLOR_SUM                                                  0x8458
+#define GL_COLOR_SUM_ARB                                              0x8458
+#define GL_COLOR_SUM_CLAMP_NV                                         0x854F
+#define GL_COLOR_SUM_EXT                                              0x8458
+#define GL_COLOR_TABLE                                                0x80D0
+#define GL_COLOR_TABLE_ALPHA_SIZE                                     0x80DD
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI                                 0x80DD
+#define GL_COLOR_TABLE_BIAS                                           0x80D7
+#define GL_COLOR_TABLE_BIAS_SGI                                       0x80D7
+#define GL_COLOR_TABLE_BLUE_SIZE                                      0x80DC
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI                                  0x80DC
+#define GL_COLOR_TABLE_FORMAT                                         0x80D8
+#define GL_COLOR_TABLE_FORMAT_SGI                                     0x80D8
+#define GL_COLOR_TABLE_GREEN_SIZE                                     0x80DB
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI                                 0x80DB
+#define GL_COLOR_TABLE_INTENSITY_SIZE                                 0x80DF
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI                             0x80DF
+#define GL_COLOR_TABLE_LUMINANCE_SIZE                                 0x80DE
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI                             0x80DE
+#define GL_COLOR_TABLE_RED_SIZE                                       0x80DA
+#define GL_COLOR_TABLE_RED_SIZE_SGI                                   0x80DA
+#define GL_COLOR_TABLE_SCALE                                          0x80D6
+#define GL_COLOR_TABLE_SCALE_SGI                                      0x80D6
+#define GL_COLOR_TABLE_SGI                                            0x80D0
+#define GL_COLOR_TABLE_WIDTH                                          0x80D9
+#define GL_COLOR_TABLE_WIDTH_SGI                                      0x80D9
+#define GL_COLOR_WRITEMASK                                            0x0C23
+#define GL_COMBINE                                                    0x8570
+#define GL_COMBINE4_NV                                                0x8503
+#define GL_COMBINER0_NV                                               0x8550
+#define GL_COMBINER1_NV                                               0x8551
+#define GL_COMBINER2_NV                                               0x8552
+#define GL_COMBINER3_NV                                               0x8553
+#define GL_COMBINER4_NV                                               0x8554
+#define GL_COMBINER5_NV                                               0x8555
+#define GL_COMBINER6_NV                                               0x8556
+#define GL_COMBINER7_NV                                               0x8557
+#define GL_COMBINER_AB_DOT_PRODUCT_NV                                 0x8545
+#define GL_COMBINER_AB_OUTPUT_NV                                      0x854A
+#define GL_COMBINER_BIAS_NV                                           0x8549
+#define GL_COMBINER_CD_DOT_PRODUCT_NV                                 0x8546
+#define GL_COMBINER_CD_OUTPUT_NV                                      0x854B
+#define GL_COMBINER_COMPONENT_USAGE_NV                                0x8544
+#define GL_COMBINER_INPUT_NV                                          0x8542
+#define GL_COMBINER_MAPPING_NV                                        0x8543
+#define GL_COMBINER_MUX_SUM_NV                                        0x8547
+#define GL_COMBINER_SCALE_NV                                          0x8548
+#define GL_COMBINER_SUM_OUTPUT_NV                                     0x854C
+#define GL_COMBINE_ALPHA                                              0x8572
+#define GL_COMBINE_ALPHA_ARB                                          0x8572
+#define GL_COMBINE_ALPHA_EXT                                          0x8572
+#define GL_COMBINE_ARB                                                0x8570
+#define GL_COMBINE_EXT                                                0x8570
+#define GL_COMBINE_RGB                                                0x8571
+#define GL_COMBINE_RGB_ARB                                            0x8571
+#define GL_COMBINE_RGB_EXT                                            0x8571
+#define GL_COMMAND_BARRIER_BIT                                        0x00000040
+#define GL_COMMAND_BARRIER_BIT_EXT                                    0x00000040
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT                           0x884E
+#define GL_COMPARE_REF_TO_TEXTURE                                     0x884E
+#define GL_COMPARE_REF_TO_TEXTURE_EXT                                 0x884E
+#define GL_COMPARE_R_TO_TEXTURE                                       0x884E
+#define GL_COMPARE_R_TO_TEXTURE_ARB                                   0x884E
+#define GL_COMPATIBLE_SUBROUTINES                                     0x8E4B
+#define GL_COMPILE                                                    0x1300
+#define GL_COMPILE_AND_EXECUTE                                        0x1301
+#define GL_COMPILE_STATUS                                             0x8B81
+#define GL_COMPRESSED_ALPHA                                           0x84E9
+#define GL_COMPRESSED_ALPHA_ARB                                       0x84E9
+#define GL_COMPRESSED_INTENSITY                                       0x84EC
+#define GL_COMPRESSED_INTENSITY_ARB                                   0x84EC
+#define GL_COMPRESSED_LUMINANCE                                       0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA                                 0x84EB
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB                             0x84EB
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT                       0x8C72
+#define GL_COMPRESSED_LUMINANCE_ARB                                   0x84EA
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT                             0x8C70
+#define GL_COMPRESSED_R11_EAC                                         0x9270
+#define GL_COMPRESSED_RED                                             0x8225
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT                             0x8DBD
+#define GL_COMPRESSED_RED_RGTC1                                       0x8DBB
+#define GL_COMPRESSED_RED_RGTC1_EXT                                   0x8DBB
+#define GL_COMPRESSED_RG                                              0x8226
+#define GL_COMPRESSED_RG11_EAC                                        0x9272
+#define GL_COMPRESSED_RGB                                             0x84ED
+#define GL_COMPRESSED_RGB8_ETC2                                       0x9274
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2                   0x9276
+#define GL_COMPRESSED_RGBA                                            0x84EE
+#define GL_COMPRESSED_RGBA8_ETC2_EAC                                  0x9278
+#define GL_COMPRESSED_RGBA_ARB                                        0x84EE
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB                             0x8E8C
+#define GL_COMPRESSED_RGBA_FXT1_3DFX                                  0x86B1
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                           0x8C03
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                           0x8C02
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                              0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE                            0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT                              0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE                            0x83F3
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT                              0x83F3
+#define GL_COMPRESSED_RGB_ARB                                         0x84ED
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB                       0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB                     0x8E8F
+#define GL_COMPRESSED_RGB_FXT1_3DFX                                   0x86B0
+#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                            0x8C01
+#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                            0x8C00
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT                               0x83F0
+#define GL_COMPRESSED_RG_RGTC2                                        0x8DBD
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT                0x8C73
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT                      0x8C71
+#define GL_COMPRESSED_SIGNED_R11_EAC                                  0x9271
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT                      0x8DBE
+#define GL_COMPRESSED_SIGNED_RED_RGTC1                                0x8DBC
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT                            0x8DBC
+#define GL_COMPRESSED_SIGNED_RG11_EAC                                 0x9273
+#define GL_COMPRESSED_SIGNED_RG_RGTC2                                 0x8DBE
+#define GL_COMPRESSED_SLUMINANCE                                      0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA                                0x8C4B
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT                            0x8C4B
+#define GL_COMPRESSED_SLUMINANCE_EXT                                  0x8C4A
+#define GL_COMPRESSED_SRGB                                            0x8C48
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC                           0x9279
+#define GL_COMPRESSED_SRGB8_ETC2                                      0x9275
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2                  0x9277
+#define GL_COMPRESSED_SRGB_ALPHA                                      0x8C49
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB                       0x8E8D
+#define GL_COMPRESSED_SRGB_ALPHA_EXT                                  0x8C49
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT                        0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT                        0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT                        0x8C4F
+#define GL_COMPRESSED_SRGB_EXT                                        0x8C48
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT                              0x8C4C
+#define GL_COMPRESSED_TEXTURE_FORMATS                                 0x86A3
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB                             0x86A3
+#define GL_COMPUTE_LOCAL_WORK_SIZE                                    0x8267
+#define GL_COMPUTE_SHADER                                             0x91B9
+#define GL_COMPUTE_SHADER_BIT                                         0x00000020
+#define GL_COMPUTE_SUBROUTINE                                         0x92ED
+#define GL_COMPUTE_SUBROUTINE_UNIFORM                                 0x92F3
+#define GL_COMPUTE_TEXTURE                                            0x82A0
+#define GL_COMP_BIT_ATI                                               0x00000002
+#define GL_CONDITION_SATISFIED                                        0x911C
+#define GL_CONDITION_SATISFIED_APPLE                                  0x911C
+#define GL_CONSERVE_MEMORY_HINT_PGI                                   0x1A1FD
+#define GL_CONSTANT                                                   0x8576
+#define GL_CONSTANT_ALPHA                                             0x8003
+#define GL_CONSTANT_ALPHA_EXT                                         0x8003
+#define GL_CONSTANT_ARB                                               0x8576
+#define GL_CONSTANT_ATTENUATION                                       0x1207
+#define GL_CONSTANT_BORDER                                            0x8151
+#define GL_CONSTANT_BORDER_HP                                         0x8151
+#define GL_CONSTANT_COLOR                                             0x8001
+#define GL_CONSTANT_COLOR0_NV                                         0x852A
+#define GL_CONSTANT_COLOR1_NV                                         0x852B
+#define GL_CONSTANT_COLOR_EXT                                         0x8001
+#define GL_CONSTANT_EXT                                               0x8576
+#define GL_CONST_EYE_NV                                               0x86E5
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT                          0x00000002
+#define GL_CONTEXT_CORE_PROFILE_BIT                                   0x00000001
+#define GL_CONTEXT_FLAGS                                              0x821E
+#define GL_CONTEXT_FLAG_DEBUG_BIT                                     0x00000002
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT                        0x0001
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB                         0x00000004
+#define GL_CONTEXT_PROFILE_MASK                                       0x9126
+#define GL_CONTINUOUS_AMD                                             0x9007
+#define GL_CONVEX_HULL_NV                                             0x908B
+#define GL_CONVOLUTION_1D                                             0x8010
+#define GL_CONVOLUTION_1D_EXT                                         0x8010
+#define GL_CONVOLUTION_2D                                             0x8011
+#define GL_CONVOLUTION_2D_EXT                                         0x8011
+#define GL_CONVOLUTION_BORDER_COLOR                                   0x8154
+#define GL_CONVOLUTION_BORDER_COLOR_HP                                0x8154
+#define GL_CONVOLUTION_BORDER_MODE                                    0x8013
+#define GL_CONVOLUTION_BORDER_MODE_EXT                                0x8013
+#define GL_CONVOLUTION_FILTER_BIAS                                    0x8015
+#define GL_CONVOLUTION_FILTER_BIAS_EXT                                0x8015
+#define GL_CONVOLUTION_FILTER_SCALE                                   0x8014
+#define GL_CONVOLUTION_FILTER_SCALE_EXT                               0x8014
+#define GL_CONVOLUTION_FORMAT                                         0x8017
+#define GL_CONVOLUTION_FORMAT_EXT                                     0x8017
+#define GL_CONVOLUTION_HEIGHT                                         0x8019
+#define GL_CONVOLUTION_HEIGHT_EXT                                     0x8019
+#define GL_CONVOLUTION_HINT_SGIX                                      0x8316
+#define GL_CONVOLUTION_WIDTH                                          0x8018
+#define GL_CONVOLUTION_WIDTH_EXT                                      0x8018
+#define GL_CON_0_ATI                                                  0x8941
+#define GL_CON_10_ATI                                                 0x894B
+#define GL_CON_11_ATI                                                 0x894C
+#define GL_CON_12_ATI                                                 0x894D
+#define GL_CON_13_ATI                                                 0x894E
+#define GL_CON_14_ATI                                                 0x894F
+#define GL_CON_15_ATI                                                 0x8950
+#define GL_CON_16_ATI                                                 0x8951
+#define GL_CON_17_ATI                                                 0x8952
+#define GL_CON_18_ATI                                                 0x8953
+#define GL_CON_19_ATI                                                 0x8954
+#define GL_CON_1_ATI                                                  0x8942
+#define GL_CON_20_ATI                                                 0x8955
+#define GL_CON_21_ATI                                                 0x8956
+#define GL_CON_22_ATI                                                 0x8957
+#define GL_CON_23_ATI                                                 0x8958
+#define GL_CON_24_ATI                                                 0x8959
+#define GL_CON_25_ATI                                                 0x895A
+#define GL_CON_26_ATI                                                 0x895B
+#define GL_CON_27_ATI                                                 0x895C
+#define GL_CON_28_ATI                                                 0x895D
+#define GL_CON_29_ATI                                                 0x895E
+#define GL_CON_2_ATI                                                  0x8943
+#define GL_CON_30_ATI                                                 0x895F
+#define GL_CON_31_ATI                                                 0x8960
+#define GL_CON_3_ATI                                                  0x8944
+#define GL_CON_4_ATI                                                  0x8945
+#define GL_CON_5_ATI                                                  0x8946
+#define GL_CON_6_ATI                                                  0x8947
+#define GL_CON_7_ATI                                                  0x8948
+#define GL_CON_8_ATI                                                  0x8949
+#define GL_CON_9_ATI                                                  0x894A
+#define GL_COORD_REPLACE                                              0x8862
+#define GL_COORD_REPLACE_ARB                                          0x8862
+#define GL_COORD_REPLACE_NV                                           0x8862
+#define GL_COPY                                                       0x1503
+#define GL_COPY_INVERTED                                              0x150C
+#define GL_COPY_PIXEL_TOKEN                                           0x0706
+#define GL_COPY_READ_BUFFER_BINDING                                   0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING                                  0x8F37
+#define GL_COUNTER_RANGE_AMD                                          0x8BC1
+#define GL_COUNTER_TYPE_AMD                                           0x8BC0
+#define GL_COUNT_DOWN_NV                                              0x9089
+#define GL_COUNT_UP_NV                                                0x9088
+#define GL_COVERAGE_ALL_FRAGMENTS_NV                                  0x8ED5
+#define GL_COVERAGE_ATTACHMENT_NV                                     0x8ED2
+#define GL_COVERAGE_AUTOMATIC_NV                                      0x8ED7
+#define GL_COVERAGE_BUFFERS_NV                                        0x8ED3
+#define GL_COVERAGE_BUFFER_BIT_NV                                     0x00008000
+#define GL_COVERAGE_COMPONENT4_NV                                     0x8ED1
+#define GL_COVERAGE_COMPONENT_NV                                      0x8ED0
+#define GL_COVERAGE_EDGE_FRAGMENTS_NV                                 0x8ED6
+#define GL_COVERAGE_SAMPLES_NV                                        0x80A9
+#define GL_CPU_OPTIMIZED_QCOM                                         0x8FB1
+#define GL_CUBIC_CURVE_TO_NV                                          0x0C
+#define GL_CUBIC_EXT                                                  0x8334
+#define GL_CUBIC_HP                                                   0x815F
+#define GL_CULL_FACE                                                  0x0B44
+#define GL_CULL_FACE_MODE                                             0x0B45
+#define GL_CULL_FRAGMENT_NV                                           0x86E7
+#define GL_CULL_MODES_NV                                              0x86E0
+#define GL_CULL_VERTEX_EXT                                            0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT                               0x81AB
+#define GL_CULL_VERTEX_IBM                                            103050
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT                            0x81AC
+#define GL_CURRENT_ATTRIB_NV                                          0x8626
+#define GL_CURRENT_BINORMAL_EXT                                       0x843C
+#define GL_CURRENT_BIT                                                0x00000001
+#define GL_CURRENT_COLOR                                              0x0B00
+#define GL_CURRENT_FOG_COORD                                          0x8453
+#define GL_CURRENT_FOG_COORDINATE                                     0x8453
+#define GL_CURRENT_FOG_COORDINATE_EXT                                 0x8453
+#define GL_CURRENT_INDEX                                              0x0B01
+#define GL_CURRENT_MATRIX_ARB                                         0x8641
+#define GL_CURRENT_MATRIX_INDEX_ARB                                   0x8845
+#define GL_CURRENT_MATRIX_NV                                          0x8641
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB                             0x8640
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV                              0x8640
+#define GL_CURRENT_NORMAL                                             0x0B02
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV                              0x8865
+#define GL_CURRENT_PALETTE_MATRIX_ARB                                 0x8843
+#define GL_CURRENT_PALETTE_MATRIX_OES                                 0x8843
+#define GL_CURRENT_PROGRAM                                            0x8B8D
+#define GL_CURRENT_QUERY                                              0x8865
+#define GL_CURRENT_QUERY_ARB                                          0x8865
+#define GL_CURRENT_QUERY_EXT                                          0x8865
+#define GL_CURRENT_RASTER_COLOR                                       0x0B04
+#define GL_CURRENT_RASTER_DISTANCE                                    0x0B09
+#define GL_CURRENT_RASTER_INDEX                                       0x0B05
+#define GL_CURRENT_RASTER_NORMAL_SGIX                                 0x8406
+#define GL_CURRENT_RASTER_POSITION                                    0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID                              0x0B08
+#define GL_CURRENT_RASTER_SECONDARY_COLOR                             0x845F
+#define GL_CURRENT_RASTER_TEXTURE_COORDS                              0x0B06
+#define GL_CURRENT_SECONDARY_COLOR                                    0x8459
+#define GL_CURRENT_SECONDARY_COLOR_EXT                                0x8459
+#define GL_CURRENT_TANGENT_EXT                                        0x843B
+#define GL_CURRENT_TEXTURE_COORDS                                     0x0B03
+#define GL_CURRENT_TIME_NV                                            0x8E28
+#define GL_CURRENT_VERTEX_ATTRIB                                      0x8626
+#define GL_CURRENT_VERTEX_ATTRIB_ARB                                  0x8626
+#define GL_CURRENT_VERTEX_EXT                                         0x87E2
+#define GL_CURRENT_VERTEX_WEIGHT_EXT                                  0x850B
+#define GL_CURRENT_WEIGHT_ARB                                         0x86A8
+#define GL_CW                                                         0x0900
+#define GL_DATA_BUFFER_AMD                                            0x9151
+#define GL_DEBUG_ASSERT_MESA                                          0x875B
+#define GL_DEBUG_CALLBACK_FUNCTION                                    0x8244
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB                                0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM                                  0x8245
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB                              0x8245
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD                               0x9149
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD                             0x914F
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD                             0x914B
+#define GL_DEBUG_CATEGORY_OTHER_AMD                                   0x9150
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD                             0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD                         0x914E
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD                      0x914C
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD                           0x914A
+#define GL_DEBUG_GROUP_STACK_DEPTH                                    0x826D
+#define GL_DEBUG_LOGGED_MESSAGES                                      0x9145
+#define GL_DEBUG_LOGGED_MESSAGES_AMD                                  0x9145
+#define GL_DEBUG_LOGGED_MESSAGES_ARB                                  0x9145
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH                           0x8243
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB                       0x8243
+#define GL_DEBUG_OBJECT_MESA                                          0x8759
+#define GL_DEBUG_OUTPUT                                               0x92E0
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS                                   0x8242
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB                               0x8242
+#define GL_DEBUG_PRINT_MESA                                           0x875A
+#define GL_DEBUG_SEVERITY_HIGH                                        0x9146
+#define GL_DEBUG_SEVERITY_HIGH_AMD                                    0x9146
+#define GL_DEBUG_SEVERITY_HIGH_ARB                                    0x9146
+#define GL_DEBUG_SEVERITY_LOW                                         0x9148
+#define GL_DEBUG_SEVERITY_LOW_AMD                                     0x9148
+#define GL_DEBUG_SEVERITY_LOW_ARB                                     0x9148
+#define GL_DEBUG_SEVERITY_MEDIUM                                      0x9147
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD                                  0x9147
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB                                  0x9147
+#define GL_DEBUG_SEVERITY_NOTIFICATION                                0x826B
+#define GL_DEBUG_SOURCE_API                                           0x8246
+#define GL_DEBUG_SOURCE_API_ARB                                       0x8246
+#define GL_DEBUG_SOURCE_APPLICATION                                   0x824A
+#define GL_DEBUG_SOURCE_APPLICATION_ARB                               0x824A
+#define GL_DEBUG_SOURCE_OTHER                                         0x824B
+#define GL_DEBUG_SOURCE_OTHER_ARB                                     0x824B
+#define GL_DEBUG_SOURCE_SHADER_COMPILER                               0x8248
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB                           0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY                                   0x8249
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB                               0x8249
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM                                 0x8247
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB                             0x8247
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR                             0x824D
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB                         0x824D
+#define GL_DEBUG_TYPE_ERROR                                           0x824C
+#define GL_DEBUG_TYPE_ERROR_ARB                                       0x824C
+#define GL_DEBUG_TYPE_MARKER                                          0x8268
+#define GL_DEBUG_TYPE_OTHER                                           0x8251
+#define GL_DEBUG_TYPE_OTHER_ARB                                       0x8251
+#define GL_DEBUG_TYPE_PERFORMANCE                                     0x8250
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB                                 0x8250
+#define GL_DEBUG_TYPE_POP_GROUP                                       0x826A
+#define GL_DEBUG_TYPE_PORTABILITY                                     0x824F
+#define GL_DEBUG_TYPE_PORTABILITY_ARB                                 0x824F
+#define GL_DEBUG_TYPE_PUSH_GROUP                                      0x8269
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR                              0x824E
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB                          0x824E
+#define GL_DECAL                                                      0x2101
+#define GL_DECODE_EXT                                                 0x8A49
+#define GL_DECR                                                       0x1E03
+#define GL_DECR_WRAP                                                  0x8508
+#define GL_DECR_WRAP_EXT                                              0x8508
+#define GL_DECR_WRAP_OES                                              0x8508
+#define GL_DEFORMATIONS_MASK_SGIX                                     0x8196
+#define GL_DELETE_STATUS                                              0x8B80
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV                                 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV                                 0x86EA
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV                               0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV                                0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV                          0x885A
+#define GL_DEPTH                                                      0x1801
+#define GL_DEPTH24_STENCIL8                                           0x88F0
+#define GL_DEPTH24_STENCIL8_EXT                                       0x88F0
+#define GL_DEPTH24_STENCIL8_OES                                       0x88F0
+#define GL_DEPTH32F_STENCIL8                                          0x8CAD
+#define GL_DEPTH32F_STENCIL8_NV                                       0x8DAC
+#define GL_DEPTH_ATTACHMENT                                           0x8D00
+#define GL_DEPTH_ATTACHMENT_EXT                                       0x8D00
+#define GL_DEPTH_ATTACHMENT_OES                                       0x8D00
+#define GL_DEPTH_BIAS                                                 0x0D1F
+#define GL_DEPTH_BITS                                                 0x0D56
+#define GL_DEPTH_BOUNDS_EXT                                           0x8891
+#define GL_DEPTH_BOUNDS_TEST_EXT                                      0x8890
+#define GL_DEPTH_BUFFER_BIT                                           0x00000100
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV                                 0x8DAF
+#define GL_DEPTH_CLAMP                                                0x864F
+#define GL_DEPTH_CLAMP_FAR_AMD                                        0x901F
+#define GL_DEPTH_CLAMP_NEAR_AMD                                       0x901E
+#define GL_DEPTH_CLAMP_NV                                             0x864F
+#define GL_DEPTH_CLEAR_VALUE                                          0x0B73
+#define GL_DEPTH_COMPONENT                                            0x1902
+#define GL_DEPTH_COMPONENT16                                          0x81A5
+#define GL_DEPTH_COMPONENT16_ARB                                      0x81A5
+#define GL_DEPTH_COMPONENT16_NONLINEAR_NV                             0x8E2C
+#define GL_DEPTH_COMPONENT16_OES                                      0x81A5
+#define GL_DEPTH_COMPONENT16_SGIX                                     0x81A5
+#define GL_DEPTH_COMPONENT24                                          0x81A6
+#define GL_DEPTH_COMPONENT24_ARB                                      0x81A6
+#define GL_DEPTH_COMPONENT24_OES                                      0x81A6
+#define GL_DEPTH_COMPONENT24_SGIX                                     0x81A6
+#define GL_DEPTH_COMPONENT32                                          0x81A7
+#define GL_DEPTH_COMPONENT32F                                         0x8CAC
+#define GL_DEPTH_COMPONENT32F_NV                                      0x8DAB
+#define GL_DEPTH_COMPONENT32_ARB                                      0x81A7
+#define GL_DEPTH_COMPONENT32_OES                                      0x81A7
+#define GL_DEPTH_COMPONENT32_SGIX                                     0x81A7
+#define GL_DEPTH_COMPONENTS                                           0x8284
+#define GL_DEPTH_EXT                                                  0x1801
+#define GL_DEPTH_FUNC                                                 0x0B74
+#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX                        0x8311
+#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX                             0x8312
+#define GL_DEPTH_PASS_INSTRUMENT_SGIX                                 0x8310
+#define GL_DEPTH_RANGE                                                0x0B70
+#define GL_DEPTH_RENDERABLE                                           0x8287
+#define GL_DEPTH_SCALE                                                0x0D1E
+#define GL_DEPTH_STENCIL                                              0x84F9
+#define GL_DEPTH_STENCIL_ATTACHMENT                                   0x821A
+#define GL_DEPTH_STENCIL_EXT                                          0x84F9
+#define GL_DEPTH_STENCIL_MESA                                         0x8750
+#define GL_DEPTH_STENCIL_NV                                           0x84F9
+#define GL_DEPTH_STENCIL_OES                                          0x84F9
+#define GL_DEPTH_STENCIL_TEXTURE_MODE                                 0x90EA
+#define GL_DEPTH_STENCIL_TO_BGRA_NV                                   0x886F
+#define GL_DEPTH_STENCIL_TO_RGBA_NV                                   0x886E
+#define GL_DEPTH_TEST                                                 0x0B71
+#define GL_DEPTH_TEXTURE_MODE                                         0x884B
+#define GL_DEPTH_TEXTURE_MODE_ARB                                     0x884B
+#define GL_DEPTH_WRITEMASK                                            0x0B72
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS                             0x8096
+#define GL_DETAIL_TEXTURE_2D_SGIS                                     0x8095
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS                            0x809C
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS                                  0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS                                   0x809B
+#define GL_DIFFUSE                                                    0x1201
+#define GL_DISCARD_ATI                                                0x8763
+#define GL_DISCARD_NV                                                 0x8530
+#define GL_DISCRETE_AMD                                               0x9006
+#define GL_DISPATCH_INDIRECT_BUFFER                                   0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING                           0x90EF
+#define GL_DISPLAY_LIST                                               0x82E7
+#define GL_DISTANCE_ATTENUATION_EXT                                   0x8129
+#define GL_DISTANCE_ATTENUATION_SGIS                                  0x8129
+#define GL_DITHER                                                     0x0BD0
+#define GL_DOMAIN                                                     0x0A02
+#define GL_DONT_CARE                                                  0x1100
+#define GL_DOT2_ADD_ATI                                               0x896C
+#define GL_DOT3_ATI                                                   0x8966
+#define GL_DOT3_RGB                                                   0x86AE
+#define GL_DOT3_RGBA                                                  0x86AF
+#define GL_DOT3_RGBA_ARB                                              0x86AF
+#define GL_DOT3_RGBA_EXT                                              0x8741
+#define GL_DOT3_RGBA_IMG                                              0x86AF
+#define GL_DOT3_RGB_ARB                                               0x86AE
+#define GL_DOT3_RGB_EXT                                               0x8740
+#define GL_DOT4_ATI                                                   0x8967
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV                        0x885D
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV                  0x86F3
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV                               0x86ED
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV                            0x86F1
+#define GL_DOT_PRODUCT_NV                                             0x86EC
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV                                0x885B
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV                            0x86F2
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV                                  0x885C
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV                                  0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV                                  0x86EF
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV                            0x86F0
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV                           0x864E
+#define GL_DOUBLE                                                     0x140A
+#define GL_DOUBLEBUFFER                                               0x0C32
+#define GL_DOUBLE_EXT                                                 0x140A
+#define GL_DOUBLE_MAT2                                                0x8F46
+#define GL_DOUBLE_MAT2_EXT                                            0x8F46
+#define GL_DOUBLE_MAT3                                                0x8F47
+#define GL_DOUBLE_MAT3_EXT                                            0x8F47
+#define GL_DOUBLE_MAT4                                                0x8F48
+#define GL_DOUBLE_MAT4_EXT                                            0x8F48
+#define GL_DOUBLE_VEC2                                                0x8FFC
+#define GL_DOUBLE_VEC2_EXT                                            0x8FFC
+#define GL_DOUBLE_VEC3                                                0x8FFD
+#define GL_DOUBLE_VEC3_EXT                                            0x8FFD
+#define GL_DOUBLE_VEC4                                                0x8FFE
+#define GL_DOUBLE_VEC4_EXT                                            0x8FFE
+#define GL_DRAW_BUFFER                                                0x0C01
+#define GL_DRAW_BUFFER0                                               0x8825
+#define GL_DRAW_BUFFER0_ARB                                           0x8825
+#define GL_DRAW_BUFFER0_ATI                                           0x8825
+#define GL_DRAW_BUFFER0_NV                                            0x8825
+#define GL_DRAW_BUFFER1                                               0x8826
+#define GL_DRAW_BUFFER10                                              0x882F
+#define GL_DRAW_BUFFER10_ARB                                          0x882F
+#define GL_DRAW_BUFFER10_ATI                                          0x882F
+#define GL_DRAW_BUFFER10_NV                                           0x882F
+#define GL_DRAW_BUFFER11                                              0x8830
+#define GL_DRAW_BUFFER11_ARB                                          0x8830
+#define GL_DRAW_BUFFER11_ATI                                          0x8830
+#define GL_DRAW_BUFFER11_NV                                           0x8830
+#define GL_DRAW_BUFFER12                                              0x8831
+#define GL_DRAW_BUFFER12_ARB                                          0x8831
+#define GL_DRAW_BUFFER12_ATI                                          0x8831
+#define GL_DRAW_BUFFER12_NV                                           0x8831
+#define GL_DRAW_BUFFER13                                              0x8832
+#define GL_DRAW_BUFFER13_ARB                                          0x8832
+#define GL_DRAW_BUFFER13_ATI                                          0x8832
+#define GL_DRAW_BUFFER13_NV                                           0x8832
+#define GL_DRAW_BUFFER14                                              0x8833
+#define GL_DRAW_BUFFER14_ARB                                          0x8833
+#define GL_DRAW_BUFFER14_ATI                                          0x8833
+#define GL_DRAW_BUFFER14_NV                                           0x8833
+#define GL_DRAW_BUFFER15                                              0x8834
+#define GL_DRAW_BUFFER15_ARB                                          0x8834
+#define GL_DRAW_BUFFER15_ATI                                          0x8834
+#define GL_DRAW_BUFFER15_NV                                           0x8834
+#define GL_DRAW_BUFFER1_ARB                                           0x8826
+#define GL_DRAW_BUFFER1_ATI                                           0x8826
+#define GL_DRAW_BUFFER1_NV                                            0x8826
+#define GL_DRAW_BUFFER2                                               0x8827
+#define GL_DRAW_BUFFER2_ARB                                           0x8827
+#define GL_DRAW_BUFFER2_ATI                                           0x8827
+#define GL_DRAW_BUFFER2_NV                                            0x8827
+#define GL_DRAW_BUFFER3                                               0x8828
+#define GL_DRAW_BUFFER3_ARB                                           0x8828
+#define GL_DRAW_BUFFER3_ATI                                           0x8828
+#define GL_DRAW_BUFFER3_NV                                            0x8828
+#define GL_DRAW_BUFFER4                                               0x8829
+#define GL_DRAW_BUFFER4_ARB                                           0x8829
+#define GL_DRAW_BUFFER4_ATI                                           0x8829
+#define GL_DRAW_BUFFER4_NV                                            0x8829
+#define GL_DRAW_BUFFER5                                               0x882A
+#define GL_DRAW_BUFFER5_ARB                                           0x882A
+#define GL_DRAW_BUFFER5_ATI                                           0x882A
+#define GL_DRAW_BUFFER5_NV                                            0x882A
+#define GL_DRAW_BUFFER6                                               0x882B
+#define GL_DRAW_BUFFER6_ARB                                           0x882B
+#define GL_DRAW_BUFFER6_ATI                                           0x882B
+#define GL_DRAW_BUFFER6_NV                                            0x882B
+#define GL_DRAW_BUFFER7                                               0x882C
+#define GL_DRAW_BUFFER7_ARB                                           0x882C
+#define GL_DRAW_BUFFER7_ATI                                           0x882C
+#define GL_DRAW_BUFFER7_NV                                            0x882C
+#define GL_DRAW_BUFFER8                                               0x882D
+#define GL_DRAW_BUFFER8_ARB                                           0x882D
+#define GL_DRAW_BUFFER8_ATI                                           0x882D
+#define GL_DRAW_BUFFER8_NV                                            0x882D
+#define GL_DRAW_BUFFER9                                               0x882E
+#define GL_DRAW_BUFFER9_ARB                                           0x882E
+#define GL_DRAW_BUFFER9_ATI                                           0x882E
+#define GL_DRAW_BUFFER9_NV                                            0x882E
+#define GL_DRAW_BUFFER_EXT                                            0x0C01
+#define GL_DRAW_FRAMEBUFFER                                           0x8CA9
+#define GL_DRAW_FRAMEBUFFER_ANGLE                                     0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING                                   0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT                               0x8CA6
+#define GL_DRAW_FRAMEBUFFER_EXT                                       0x8CA9
+#define GL_DRAW_INDIRECT_ADDRESS_NV                                   0x8F41
+#define GL_DRAW_INDIRECT_BUFFER                                       0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING                               0x8F43
+#define GL_DRAW_INDIRECT_LENGTH_NV                                    0x8F42
+#define GL_DRAW_INDIRECT_UNIFIED_NV                                   0x8F40
+#define GL_DRAW_PIXELS_APPLE                                          0x8A0A
+#define GL_DRAW_PIXEL_TOKEN                                           0x0705
+#define GL_DSDT8_MAG8_INTENSITY8_NV                                   0x870B
+#define GL_DSDT8_MAG8_NV                                              0x870A
+#define GL_DSDT8_NV                                                   0x8709
+#define GL_DSDT_MAG_INTENSITY_NV                                      0x86DC
+#define GL_DSDT_MAG_NV                                                0x86F6
+#define GL_DSDT_MAG_VIB_NV                                            0x86F7
+#define GL_DSDT_NV                                                    0x86F5
+#define GL_DST_ALPHA                                                  0x0304
+#define GL_DST_COLOR                                                  0x0306
+#define GL_DS_BIAS_NV                                                 0x8716
+#define GL_DS_SCALE_NV                                                0x8710
+#define GL_DT_BIAS_NV                                                 0x8717
+#define GL_DT_SCALE_NV                                                0x8711
+#define GL_DU8DV8_ATI                                                 0x877A
+#define GL_DUAL_ALPHA12_SGIS                                          0x8112
+#define GL_DUAL_ALPHA16_SGIS                                          0x8113
+#define GL_DUAL_ALPHA4_SGIS                                           0x8110
+#define GL_DUAL_ALPHA8_SGIS                                           0x8111
+#define GL_DUAL_INTENSITY12_SGIS                                      0x811A
+#define GL_DUAL_INTENSITY16_SGIS                                      0x811B
+#define GL_DUAL_INTENSITY4_SGIS                                       0x8118
+#define GL_DUAL_INTENSITY8_SGIS                                       0x8119
+#define GL_DUAL_LUMINANCE12_SGIS                                      0x8116
+#define GL_DUAL_LUMINANCE16_SGIS                                      0x8117
+#define GL_DUAL_LUMINANCE4_SGIS                                       0x8114
+#define GL_DUAL_LUMINANCE8_SGIS                                       0x8115
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS                                 0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS                                 0x811D
+#define GL_DUAL_TEXTURE_SELECT_SGIS                                   0x8124
+#define GL_DUDV_ATI                                                   0x8779
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV                                0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV                                 0xF4
+#define GL_DYNAMIC_ATI                                                0x8761
+#define GL_DYNAMIC_COPY                                               0x88EA
+#define GL_DYNAMIC_COPY_ARB                                           0x88EA
+#define GL_DYNAMIC_DRAW                                               0x88E8
+#define GL_DYNAMIC_DRAW_ARB                                           0x88E8
+#define GL_DYNAMIC_READ                                               0x88E9
+#define GL_DYNAMIC_READ_ARB                                           0x88E9
+#define GL_EDGEFLAG_BIT_PGI                                           0x00040000
+#define GL_EDGE_FLAG                                                  0x0B43
+#define GL_EDGE_FLAG_ARRAY                                            0x8079
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV                                 0x8F26
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING                             0x889B
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB                         0x889B
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT                                  0x808D
+#define GL_EDGE_FLAG_ARRAY_EXT                                        0x8079
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV                                  0x8F30
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM                                   103075
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM                            103085
+#define GL_EDGE_FLAG_ARRAY_POINTER                                    0x8093
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT                                0x8093
+#define GL_EDGE_FLAG_ARRAY_STRIDE                                     0x808C
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT                                 0x808C
+#define GL_EIGHTH_BIT_ATI                                             0x00000020
+#define GL_ELEMENT_ARRAY_ADDRESS_NV                                   0x8F29
+#define GL_ELEMENT_ARRAY_APPLE                                        0x8A0C
+#define GL_ELEMENT_ARRAY_ATI                                          0x8768
+#define GL_ELEMENT_ARRAY_BARRIER_BIT                                  0x00000002
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT                              0x00000002
+#define GL_ELEMENT_ARRAY_BUFFER                                       0x8893
+#define GL_ELEMENT_ARRAY_BUFFER_ARB                                   0x8893
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING                               0x8895
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB                           0x8895
+#define GL_ELEMENT_ARRAY_LENGTH_NV                                    0x8F33
+#define GL_ELEMENT_ARRAY_POINTER_APPLE                                0x8A0E
+#define GL_ELEMENT_ARRAY_POINTER_ATI                                  0x876A
+#define GL_ELEMENT_ARRAY_TYPE_APPLE                                   0x8A0D
+#define GL_ELEMENT_ARRAY_TYPE_ATI                                     0x8769
+#define GL_ELEMENT_ARRAY_UNIFIED_NV                                   0x8F1F
+#define GL_EMBOSS_CONSTANT_NV                                         0x855E
+#define GL_EMBOSS_LIGHT_NV                                            0x855D
+#define GL_EMBOSS_MAP_NV                                              0x855F
+#define GL_EMISSION                                                   0x1600
+#define GL_ENABLE_BIT                                                 0x00002000
+#define GL_EQUAL                                                      0x0202
+#define GL_EQUIV                                                      0x1509
+#define GL_ETC1_RGB8_OES                                              0x8D64
+#define GL_EVAL_2D_NV                                                 0x86C0
+#define GL_EVAL_BIT                                                   0x00010000
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV                            0x86C5
+#define GL_EVAL_TRIANGULAR_2D_NV                                      0x86C1
+#define GL_EVAL_VERTEX_ATRRIB0_NV                                     0x86C6
+#define GL_EVAL_VERTEX_ATRRIB10_NV                                    0x86D0
+#define GL_EVAL_VERTEX_ATRRIB11_NV                                    0x86D1
+#define GL_EVAL_VERTEX_ATRRIB12_NV                                    0x86D2
+#define GL_EVAL_VERTEX_ATRRIB13_NV                                    0x86D3
+#define GL_EVAL_VERTEX_ATRRIB14_NV                                    0x86D4
+#define GL_EVAL_VERTEX_ATRRIB15_NV                                    0x86D5
+#define GL_EVAL_VERTEX_ATRRIB1_NV                                     0x86C7
+#define GL_EVAL_VERTEX_ATRRIB2_NV                                     0x86C8
+#define GL_EVAL_VERTEX_ATRRIB3_NV                                     0x86C9
+#define GL_EVAL_VERTEX_ATRRIB4_NV                                     0x86CA
+#define GL_EVAL_VERTEX_ATRRIB5_NV                                     0x86CB
+#define GL_EVAL_VERTEX_ATRRIB6_NV                                     0x86CC
+#define GL_EVAL_VERTEX_ATRRIB7_NV                                     0x86CD
+#define GL_EVAL_VERTEX_ATRRIB8_NV                                     0x86CE
+#define GL_EVAL_VERTEX_ATRRIB9_NV                                     0x86CF
+#define GL_EVAL_VERTEX_ATTRIB0_NV                                     0x86C6
+#define GL_EVAL_VERTEX_ATTRIB10_NV                                    0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV                                    0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV                                    0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV                                    0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV                                    0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV                                    0x86D5
+#define GL_EVAL_VERTEX_ATTRIB1_NV                                     0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV                                     0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV                                     0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV                                     0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV                                     0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV                                     0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV                                     0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV                                     0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV                                     0x86CF
+#define GL_EXP                                                        0x0800
+#define GL_EXP2                                                       0x0801
+#define GL_EXPAND_NEGATE_NV                                           0x8539
+#define GL_EXPAND_NORMAL_NV                                           0x8538
+#define GL_EXTENSIONS                                                 0x1F03
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD                         0x9160
+#define GL_EYE_DISTANCE_TO_LINE_SGIS                                  0x81F2
+#define GL_EYE_DISTANCE_TO_POINT_SGIS                                 0x81F0
+#define GL_EYE_LINEAR                                                 0x2400
+#define GL_EYE_LINE_SGIS                                              0x81F6
+#define GL_EYE_PLANE                                                  0x2502
+#define GL_EYE_PLANE_ABSOLUTE_NV                                      0x855C
+#define GL_EYE_POINT_SGIS                                             0x81F4
+#define GL_EYE_RADIAL_NV                                              0x855B
+#define GL_E_TIMES_F_NV                                               0x8531
+#define GL_FACTOR_ALPHA_MODULATE_IMG                                  0x8C07
+#define GL_FACTOR_MAX_AMD                                             0x901D
+#define GL_FACTOR_MIN_AMD                                             0x901C
+#define GL_FAILURE_NV                                                 0x9030
+#define GL_FALSE                                                      0
+#define GL_FASTEST                                                    0x1101
+#define GL_FEEDBACK                                                   0x1C01
+#define GL_FEEDBACK_BUFFER_POINTER                                    0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE                                       0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE                                       0x0DF2
+#define GL_FENCE_APPLE                                                0x8A0B
+#define GL_FENCE_CONDITION_NV                                         0x84F4
+#define GL_FENCE_STATUS_NV                                            0x84F3
+#define GL_FIELDS_NV                                                  0x8E27
+#define GL_FIELD_LOWER_NV                                             0x9023
+#define GL_FIELD_UPPER_NV                                             0x9022
+#define GL_FILE_NAME_NV                                               0x9074
+#define GL_FILL                                                       0x1B02
+#define GL_FILTER                                                     0x829A
+#define GL_FILTER4_SGIS                                               0x8146
+#define GL_FIRST_TO_REST_NV                                           0x90AF
+#define GL_FIRST_VERTEX_CONVENTION                                    0x8E4D
+#define GL_FIRST_VERTEX_CONVENTION_EXT                                0x8E4D
+#define GL_FIXED                                                      0x140C
+#define GL_FIXED_OES                                                  0x140C
+#define GL_FIXED_ONLY                                                 0x891D
+#define GL_FIXED_ONLY_ARB                                             0x891D
+#define GL_FLAT                                                       0x1D00
+#define GL_FLOAT                                                      0x1406
+#define GL_FLOAT16_NV                                                 0x8FF8
+#define GL_FLOAT16_VEC2_NV                                            0x8FF9
+#define GL_FLOAT16_VEC3_NV                                            0x8FFA
+#define GL_FLOAT16_VEC4_NV                                            0x8FFB
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV                             0x8DAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV                          0x8DAD
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV                                 0x888D
+#define GL_FLOAT_MAT2                                                 0x8B5A
+#define GL_FLOAT_MAT2_ARB                                             0x8B5A
+#define GL_FLOAT_MAT3                                                 0x8B5B
+#define GL_FLOAT_MAT3_ARB                                             0x8B5B
+#define GL_FLOAT_MAT4                                                 0x8B5C
+#define GL_FLOAT_MAT4_ARB                                             0x8B5C
+#define GL_FLOAT_R16_NV                                               0x8884
+#define GL_FLOAT_R32_NV                                               0x8885
+#define GL_FLOAT_RG16_NV                                              0x8886
+#define GL_FLOAT_RG32_NV                                              0x8887
+#define GL_FLOAT_RGB16_NV                                             0x8888
+#define GL_FLOAT_RGB32_NV                                             0x8889
+#define GL_FLOAT_RGBA16_NV                                            0x888A
+#define GL_FLOAT_RGBA32_NV                                            0x888B
+#define GL_FLOAT_RGBA_MODE_NV                                         0x888E
+#define GL_FLOAT_RGBA_NV                                              0x8883
+#define GL_FLOAT_RGB_NV                                               0x8882
+#define GL_FLOAT_RG_NV                                                0x8881
+#define GL_FLOAT_R_NV                                                 0x8880
+#define GL_FLOAT_VEC2                                                 0x8B50
+#define GL_FLOAT_VEC2_ARB                                             0x8B50
+#define GL_FLOAT_VEC3                                                 0x8B51
+#define GL_FLOAT_VEC3_ARB                                             0x8B51
+#define GL_FLOAT_VEC4                                                 0x8B52
+#define GL_FLOAT_VEC4_ARB                                             0x8B52
+#define GL_FOG                                                        0x0B60
+#define GL_FOG_BIT                                                    0x00000080
+#define GL_FOG_COLOR                                                  0x0B66
+#define GL_FOG_COORD                                                  0x8451
+#define GL_FOG_COORDINATE                                             0x8451
+#define GL_FOG_COORDINATE_ARRAY                                       0x8457
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING                        0x889D
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB                    0x889D
+#define GL_FOG_COORDINATE_ARRAY_EXT                                   0x8457
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM                              103076
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM                       103086
+#define GL_FOG_COORDINATE_ARRAY_POINTER                               0x8456
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT                           0x8456
+#define GL_FOG_COORDINATE_ARRAY_STRIDE                                0x8455
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT                            0x8455
+#define GL_FOG_COORDINATE_ARRAY_TYPE                                  0x8454
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT                              0x8454
+#define GL_FOG_COORDINATE_EXT                                         0x8451
+#define GL_FOG_COORDINATE_SOURCE                                      0x8450
+#define GL_FOG_COORDINATE_SOURCE_EXT                                  0x8450
+#define GL_FOG_COORD_ARRAY                                            0x8457
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV                                 0x8F28
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING                             0x889D
+#define GL_FOG_COORD_ARRAY_LENGTH_NV                                  0x8F32
+#define GL_FOG_COORD_ARRAY_POINTER                                    0x8456
+#define GL_FOG_COORD_ARRAY_STRIDE                                     0x8455
+#define GL_FOG_COORD_ARRAY_TYPE                                       0x8454
+#define GL_FOG_COORD_SRC                                              0x8450
+#define GL_FOG_DENSITY                                                0x0B62
+#define GL_FOG_DISTANCE_MODE_NV                                       0x855A
+#define GL_FOG_END                                                    0x0B64
+#define GL_FOG_FACTOR_TO_ALPHA_SGIX                                   0x836F
+#define GL_FOG_FUNC_POINTS_SGIS                                       0x812B
+#define GL_FOG_FUNC_SGIS                                              0x812A
+#define GL_FOG_GEN_MODE_NV                                            0x855A
+#define GL_FOG_HINT                                                   0x0C54
+#define GL_FOG_INDEX                                                  0x0B61
+#define GL_FOG_MODE                                                   0x0B65
+#define GL_FOG_OFFSET_SGIX                                            0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX                                      0x8199
+#define GL_FOG_SCALE_SGIX                                             0x81FC
+#define GL_FOG_SCALE_VALUE_SGIX                                       0x81FD
+#define GL_FOG_SPECULAR_TEXTURE_WIN                                   0x80EC
+#define GL_FOG_START                                                  0x0B63
+#define GL_FONT_ASCENDER_NV                                           0x00200000
+#define GL_FONT_DESCENDER_NV                                          0x00400000
+#define GL_FONT_HAS_KERNING_NV                                        0x10000000
+#define GL_FONT_HEIGHT_NV                                             0x00800000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_NV                                 0x02000000
+#define GL_FONT_MAX_ADVANCE_WIDTH_NV                                  0x01000000
+#define GL_FONT_UNDERLINE_POSITION_NV                                 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_NV                                0x08000000
+#define GL_FONT_UNITS_PER_EM_NV                                       0x00100000
+#define GL_FONT_X_MAX_BOUNDS_NV                                       0x00040000
+#define GL_FONT_X_MIN_BOUNDS_NV                                       0x00010000
+#define GL_FONT_Y_MAX_BOUNDS_NV                                       0x00080000
+#define GL_FONT_Y_MIN_BOUNDS_NV                                       0x00020000
+#define GL_FORCE_BLUE_TO_ONE_NV                                       0x8860
+#define GL_FORMAT_SUBSAMPLE_244_244_OML                               0x8983
+#define GL_FORMAT_SUBSAMPLE_24_24_OML                                 0x8982
+#define GL_FRACTIONAL_EVEN                                            0x8E7C
+#define GL_FRACTIONAL_ODD                                             0x8E7B
+#define GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX                         0x8314
+#define GL_FRAGMENTS_INSTRUMENT_MAX_SGIX                              0x8315
+#define GL_FRAGMENTS_INSTRUMENT_SGIX                                  0x8313
+#define GL_FRAGMENT_ALPHA_MODULATE_IMG                                0x8C08
+#define GL_FRAGMENT_COLOR_EXT                                         0x834C
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX                          0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX                     0x8403
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX                               0x8401
+#define GL_FRAGMENT_DEPTH                                             0x8452
+#define GL_FRAGMENT_DEPTH_EXT                                         0x8452
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS                         0x8E5D
+#define GL_FRAGMENT_LIGHT0_SGIX                                       0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX                                       0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX                                       0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX                                       0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX                                       0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX                                       0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX                                       0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX                                       0x8413
+#define GL_FRAGMENT_LIGHTING_SGIX                                     0x8400
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX                          0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX                     0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX             0x840B
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX                         0x8409
+#define GL_FRAGMENT_MATERIAL_EXT                                      0x8349
+#define GL_FRAGMENT_NORMAL_EXT                                        0x834A
+#define GL_FRAGMENT_PROGRAM_ARB                                       0x8804
+#define GL_FRAGMENT_PROGRAM_BINDING_NV                                0x8873
+#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA                        0x8BB3
+#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA                        0x8BB2
+#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA                             0x8BB1
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV              0x8E5D
+#define GL_FRAGMENT_PROGRAM_NV                                        0x8870
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV                       0x8DA4
+#define GL_FRAGMENT_PROGRAM_POSITION_MESA                             0x8BB0
+#define GL_FRAGMENT_SHADER                                            0x8B30
+#define GL_FRAGMENT_SHADER_ARB                                        0x8B30
+#define GL_FRAGMENT_SHADER_ATI                                        0x8920
+#define GL_FRAGMENT_SHADER_BIT                                        0x00000002
+#define GL_FRAGMENT_SHADER_BIT_EXT                                    0x00000002
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT                            0x8B8B
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB                        0x8B8B
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES                        0x8B8B
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT                       0x8A52
+#define GL_FRAGMENT_SUBROUTINE                                        0x92EC
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM                                0x92F2
+#define GL_FRAGMENT_TEXTURE                                           0x829F
+#define GL_FRAMEBUFFER                                                0x8D40
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE                          0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE                               0x93A3
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE                           0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING                      0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE                      0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT                  0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE                          0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE                          0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED                             0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB                         0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT                         0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME                         0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT                     0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES                     0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE                         0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT                     0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES                     0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE                            0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE                        0x8217
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT              0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES              0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE               0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT           0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES           0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER                       0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT                   0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL                       0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT                   0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES                   0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT                 0x8D6C
+#define GL_FRAMEBUFFER_BARRIER_BIT                                    0x00000400
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT                                0x00000400
+#define GL_FRAMEBUFFER_BINDING                                        0x8CA6
+#define GL_FRAMEBUFFER_BINDING_ANGLE                                  0x8CA6
+#define GL_FRAMEBUFFER_BINDING_EXT                                    0x8CA6
+#define GL_FRAMEBUFFER_BINDING_OES                                    0x8CA6
+#define GL_FRAMEBUFFER_BLEND                                          0x828B
+#define GL_FRAMEBUFFER_COMPLETE                                       0x8CD5
+#define GL_FRAMEBUFFER_COMPLETE_EXT                                   0x8CD5
+#define GL_FRAMEBUFFER_COMPLETE_OES                                   0x8CD5
+#define GL_FRAMEBUFFER_DEFAULT                                        0x8218
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS                 0x9314
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT                                 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS                                 0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES                                0x9313
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH                                  0x9310
+#define GL_FRAMEBUFFER_EXT                                            0x8D40
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT                          0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT                      0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES                      0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT                      0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES                      0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER                         0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT                     0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES                     0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT                         0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES                         0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB                     0x8DA9
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT                     0x8DA9
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS                       0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB                   0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT                   0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT                  0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT              0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES              0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE                         0x8D56
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE                   0x8D56
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT                     0x8D56
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG                     0x9134
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER                         0x8CDC
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT                     0x8CDC
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES                     0x8CDC
+#define GL_FRAMEBUFFER_OES                                            0x8D40
+#define GL_FRAMEBUFFER_RENDERABLE                                     0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED                             0x828A
+#define GL_FRAMEBUFFER_SRGB                                           0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT                               0x8DBA
+#define GL_FRAMEBUFFER_SRGB_EXT                                       0x8DB9
+#define GL_FRAMEBUFFER_UNDEFINED                                      0x8219
+#define GL_FRAMEBUFFER_UNDEFINED_OES                                  0x8219
+#define GL_FRAMEBUFFER_UNSUPPORTED                                    0x8CDD
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT                                0x8CDD
+#define GL_FRAMEBUFFER_UNSUPPORTED_OES                                0x8CDD
+#define GL_FRAMEZOOM_FACTOR_SGIX                                      0x818C
+#define GL_FRAMEZOOM_SGIX                                             0x818B
+#define GL_FRAME_NV                                                   0x8E26
+#define GL_FRONT                                                      0x0404
+#define GL_FRONT_AND_BACK                                             0x0408
+#define GL_FRONT_FACE                                                 0x0B46
+#define GL_FRONT_LEFT                                                 0x0400
+#define GL_FRONT_RIGHT                                                0x0401
+#define GL_FULL_RANGE_EXT                                             0x87E1
+#define GL_FULL_STIPPLE_HINT_PGI                                      0x1A219
+#define GL_FULL_SUPPORT                                               0x82B7
+#define GL_FUNC_ADD                                                   0x8006
+#define GL_FUNC_ADD_EXT                                               0x8006
+#define GL_FUNC_ADD_OES                                               0x8006
+#define GL_FUNC_REVERSE_SUBTRACT                                      0x800B
+#define GL_FUNC_REVERSE_SUBTRACT_EXT                                  0x800B
+#define GL_FUNC_REVERSE_SUBTRACT_OES                                  0x800B
+#define GL_FUNC_SUBTRACT                                              0x800A
+#define GL_FUNC_SUBTRACT_EXT                                          0x800A
+#define GL_FUNC_SUBTRACT_OES                                          0x800A
+#define GL_GCCSO_SHADER_BINARY_FJ                                     0x9260
+#define GL_GENERATE_MIPMAP                                            0x8191
+#define GL_GENERATE_MIPMAP_HINT                                       0x8192
+#define GL_GENERATE_MIPMAP_HINT_SGIS                                  0x8192
+#define GL_GENERATE_MIPMAP_SGIS                                       0x8191
+#define GL_GENERIC_ATTRIB_NV                                          0x8C7D
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX                              0x00000002
+#define GL_GEOMETRY_DEFORMATION_SGIX                                  0x8194
+#define GL_GEOMETRY_INPUT_TYPE                                        0x8917
+#define GL_GEOMETRY_INPUT_TYPE_ARB                                    0x8DDB
+#define GL_GEOMETRY_INPUT_TYPE_EXT                                    0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE                                       0x8918
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB                                   0x8DDC
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT                                   0x8DDC
+#define GL_GEOMETRY_PROGRAM_NV                                        0x8C26
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV                       0x8DA3
+#define GL_GEOMETRY_SHADER                                            0x8DD9
+#define GL_GEOMETRY_SHADER_ARB                                        0x8DD9
+#define GL_GEOMETRY_SHADER_BIT                                        0x00000004
+#define GL_GEOMETRY_SHADER_EXT                                        0x8DD9
+#define GL_GEOMETRY_SHADER_INVOCATIONS                                0x887F
+#define GL_GEOMETRY_SUBROUTINE                                        0x92EB
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM                                0x92F1
+#define GL_GEOMETRY_TEXTURE                                           0x829E
+#define GL_GEOMETRY_VERTICES_OUT                                      0x8916
+#define GL_GEOMETRY_VERTICES_OUT_ARB                                  0x8DDA
+#define GL_GEOMETRY_VERTICES_OUT_EXT                                  0x8DDA
+#define GL_GEQUAL                                                     0x0206
+#define GL_GET_TEXTURE_IMAGE_FORMAT                                   0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE                                     0x8292
+#define GL_GLOBAL_ALPHA_FACTOR_SUN                                    0x81DA
+#define GL_GLOBAL_ALPHA_SUN                                           0x81D9
+#define GL_GLYPH_HAS_KERNING_NV                                       0x100
+#define GL_GLYPH_HEIGHT_BIT_NV                                        0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV                    0x10
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV                          0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV                          0x08
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV                      0x80
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV                            0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV                            0x40
+#define GL_GLYPH_WIDTH_BIT_NV                                         0x01
+#define GL_GPU_ADDRESS_NV                                             0x8F34
+#define GL_GPU_OPTIMIZED_QCOM                                         0x8FB2
+#define GL_GREATER                                                    0x0204
+#define GL_GREEN                                                      0x1904
+#define GL_GREEN_BIAS                                                 0x0D19
+#define GL_GREEN_BITS                                                 0x0D53
+#define GL_GREEN_BIT_ATI                                              0x00000002
+#define GL_GREEN_INTEGER                                              0x8D95
+#define GL_GREEN_INTEGER_EXT                                          0x8D95
+#define GL_GREEN_MAX_CLAMP_INGR                                       0x8565
+#define GL_GREEN_MIN_CLAMP_INGR                                       0x8561
+#define GL_GREEN_SCALE                                                0x0D18
+#define GL_GUILTY_CONTEXT_RESET_ARB                                   0x8253
+#define GL_HALF_APPLE                                                 0x140B
+#define GL_HALF_BIAS_NEGATE_NV                                        0x853B
+#define GL_HALF_BIAS_NORMAL_NV                                        0x853A
+#define GL_HALF_BIT_ATI                                               0x00000008
+#define GL_HALF_FLOAT                                                 0x140B
+#define GL_HALF_FLOAT_ARB                                             0x140B
+#define GL_HALF_FLOAT_NV                                              0x140B
+#define GL_HALF_FLOAT_OES                                             0x8D61
+#define GL_HIGH_FLOAT                                                 0x8DF2
+#define GL_HIGH_INT                                                   0x8DF5
+#define GL_HILO16_NV                                                  0x86F8
+#define GL_HILO8_NV                                                   0x885E
+#define GL_HILO_NV                                                    0x86F4
+#define GL_HINT_BIT                                                   0x00008000
+#define GL_HISTOGRAM                                                  0x8024
+#define GL_HISTOGRAM_ALPHA_SIZE                                       0x802B
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT                                   0x802B
+#define GL_HISTOGRAM_BLUE_SIZE                                        0x802A
+#define GL_HISTOGRAM_BLUE_SIZE_EXT                                    0x802A
+#define GL_HISTOGRAM_EXT                                              0x8024
+#define GL_HISTOGRAM_FORMAT                                           0x8027
+#define GL_HISTOGRAM_FORMAT_EXT                                       0x8027
+#define GL_HISTOGRAM_GREEN_SIZE                                       0x8029
+#define GL_HISTOGRAM_GREEN_SIZE_EXT                                   0x8029
+#define GL_HISTOGRAM_LUMINANCE_SIZE                                   0x802C
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT                               0x802C
+#define GL_HISTOGRAM_RED_SIZE                                         0x8028
+#define GL_HISTOGRAM_RED_SIZE_EXT                                     0x8028
+#define GL_HISTOGRAM_SINK                                             0x802D
+#define GL_HISTOGRAM_SINK_EXT                                         0x802D
+#define GL_HISTOGRAM_WIDTH                                            0x8026
+#define GL_HISTOGRAM_WIDTH_EXT                                        0x8026
+#define GL_HI_BIAS_NV                                                 0x8714
+#define GL_HI_SCALE_NV                                                0x870E
+#define GL_HORIZONTAL_LINE_TO_NV                                      0x06
+#define GL_IDENTITY_NV                                                0x862A
+#define GL_IGNORE_BORDER_HP                                           0x8150
+#define GL_IMAGE_1D                                                   0x904C
+#define GL_IMAGE_1D_ARRAY                                             0x9052
+#define GL_IMAGE_1D_ARRAY_EXT                                         0x9052
+#define GL_IMAGE_1D_EXT                                               0x904C
+#define GL_IMAGE_2D                                                   0x904D
+#define GL_IMAGE_2D_ARRAY                                             0x9053
+#define GL_IMAGE_2D_ARRAY_EXT                                         0x9053
+#define GL_IMAGE_2D_EXT                                               0x904D
+#define GL_IMAGE_2D_MULTISAMPLE                                       0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY                                 0x9056
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT                             0x9056
+#define GL_IMAGE_2D_MULTISAMPLE_EXT                                   0x9055
+#define GL_IMAGE_2D_RECT                                              0x904F
+#define GL_IMAGE_2D_RECT_EXT                                          0x904F
+#define GL_IMAGE_3D                                                   0x904E
+#define GL_IMAGE_3D_EXT                                               0x904E
+#define GL_IMAGE_BINDING_ACCESS                                       0x8F3E
+#define GL_IMAGE_BINDING_ACCESS_EXT                                   0x8F3E
+#define GL_IMAGE_BINDING_FORMAT                                       0x906E
+#define GL_IMAGE_BINDING_FORMAT_EXT                                   0x906E
+#define GL_IMAGE_BINDING_LAYER                                        0x8F3D
+#define GL_IMAGE_BINDING_LAYERED                                      0x8F3C
+#define GL_IMAGE_BINDING_LAYERED_EXT                                  0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT                                    0x8F3D
+#define GL_IMAGE_BINDING_LEVEL                                        0x8F3B
+#define GL_IMAGE_BINDING_LEVEL_EXT                                    0x8F3B
+#define GL_IMAGE_BINDING_NAME                                         0x8F3A
+#define GL_IMAGE_BINDING_NAME_EXT                                     0x8F3A
+#define GL_IMAGE_BUFFER                                               0x9051
+#define GL_IMAGE_BUFFER_EXT                                           0x9051
+#define GL_IMAGE_CLASS_10_10_10_2                                     0x82C3
+#define GL_IMAGE_CLASS_11_11_10                                       0x82C2
+#define GL_IMAGE_CLASS_1_X_16                                         0x82BE
+#define GL_IMAGE_CLASS_1_X_32                                         0x82BB
+#define GL_IMAGE_CLASS_1_X_8                                          0x82C1
+#define GL_IMAGE_CLASS_2_X_16                                         0x82BD
+#define GL_IMAGE_CLASS_2_X_32                                         0x82BA
+#define GL_IMAGE_CLASS_2_X_8                                          0x82C0
+#define GL_IMAGE_CLASS_4_X_16                                         0x82BC
+#define GL_IMAGE_CLASS_4_X_32                                         0x82B9
+#define GL_IMAGE_CLASS_4_X_8                                          0x82BF
+#define GL_IMAGE_COMPATIBILITY_CLASS                                  0x82A8
+#define GL_IMAGE_CUBE                                                 0x9050
+#define GL_IMAGE_CUBE_EXT                                             0x9050
+#define GL_IMAGE_CUBE_MAP_ARRAY                                       0x9054
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT                                   0x9054
+#define GL_IMAGE_CUBIC_WEIGHT_HP                                      0x815E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS                        0x90C9
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE                         0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE                            0x90C7
+#define GL_IMAGE_MAG_FILTER_HP                                        0x815C
+#define GL_IMAGE_MIN_FILTER_HP                                        0x815D
+#define GL_IMAGE_PIXEL_FORMAT                                         0x82A9
+#define GL_IMAGE_PIXEL_TYPE                                           0x82AA
+#define GL_IMAGE_ROTATE_ANGLE_HP                                      0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP                                   0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP                                   0x815B
+#define GL_IMAGE_SCALE_X_HP                                           0x8155
+#define GL_IMAGE_SCALE_Y_HP                                           0x8156
+#define GL_IMAGE_TEXEL_SIZE                                           0x82A7
+#define GL_IMAGE_TRANSFORM_2D_HP                                      0x8161
+#define GL_IMAGE_TRANSLATE_X_HP                                       0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP                                       0x8158
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT                           0x8B9B
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES                       0x8B9B
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE                             0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES                         0x8B9A
+#define GL_INCR                                                       0x1E02
+#define GL_INCR_WRAP                                                  0x8507
+#define GL_INCR_WRAP_EXT                                              0x8507
+#define GL_INCR_WRAP_OES                                              0x8507
+#define GL_INDEX                                                      0x8222
+#define GL_INDEX_ARRAY                                                0x8077
+#define GL_INDEX_ARRAY_ADDRESS_NV                                     0x8F24
+#define GL_INDEX_ARRAY_BUFFER_BINDING                                 0x8899
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB                             0x8899
+#define GL_INDEX_ARRAY_COUNT_EXT                                      0x8087
+#define GL_INDEX_ARRAY_EXT                                            0x8077
+#define GL_INDEX_ARRAY_LENGTH_NV                                      0x8F2E
+#define GL_INDEX_ARRAY_LIST_IBM                                       103073
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM                                103083
+#define GL_INDEX_ARRAY_POINTER                                        0x8091
+#define GL_INDEX_ARRAY_POINTER_EXT                                    0x8091
+#define GL_INDEX_ARRAY_STRIDE                                         0x8086
+#define GL_INDEX_ARRAY_STRIDE_EXT                                     0x8086
+#define GL_INDEX_ARRAY_TYPE                                           0x8085
+#define GL_INDEX_ARRAY_TYPE_EXT                                       0x8085
+#define GL_INDEX_BITS                                                 0x0D51
+#define GL_INDEX_BIT_PGI                                              0x00080000
+#define GL_INDEX_CLEAR_VALUE                                          0x0C20
+#define GL_INDEX_LOGIC_OP                                             0x0BF1
+#define GL_INDEX_MATERIAL_EXT                                         0x81B8
+#define GL_INDEX_MATERIAL_FACE_EXT                                    0x81BA
+#define GL_INDEX_MATERIAL_PARAMETER_EXT                               0x81B9
+#define GL_INDEX_MODE                                                 0x0C30
+#define GL_INDEX_OFFSET                                               0x0D13
+#define GL_INDEX_SHIFT                                                0x0D12
+#define GL_INDEX_TEST_EXT                                             0x81B5
+#define GL_INDEX_TEST_FUNC_EXT                                        0x81B6
+#define GL_INDEX_TEST_REF_EXT                                         0x81B7
+#define GL_INDEX_WRITEMASK                                            0x0C21
+#define GL_INFO_LOG_LENGTH                                            0x8B84
+#define GL_INNOCENT_CONTEXT_RESET_ARB                                 0x8254
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX                             0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX                               0x8181
+#define GL_INT                                                        0x1404
+#define GL_INT16_NV                                                   0x8FE4
+#define GL_INT16_VEC2_NV                                              0x8FE5
+#define GL_INT16_VEC3_NV                                              0x8FE6
+#define GL_INT16_VEC4_NV                                              0x8FE7
+#define GL_INT64_NV                                                   0x140E
+#define GL_INT64_VEC2_NV                                              0x8FE9
+#define GL_INT64_VEC3_NV                                              0x8FEA
+#define GL_INT64_VEC4_NV                                              0x8FEB
+#define GL_INT8_NV                                                    0x8FE0
+#define GL_INT8_VEC2_NV                                               0x8FE1
+#define GL_INT8_VEC3_NV                                               0x8FE2
+#define GL_INT8_VEC4_NV                                               0x8FE3
+#define GL_INTENSITY                                                  0x8049
+#define GL_INTENSITY12                                                0x804C
+#define GL_INTENSITY12_EXT                                            0x804C
+#define GL_INTENSITY16                                                0x804D
+#define GL_INTENSITY16F_ARB                                           0x881D
+#define GL_INTENSITY16I_EXT                                           0x8D8B
+#define GL_INTENSITY16UI_EXT                                          0x8D79
+#define GL_INTENSITY16_EXT                                            0x804D
+#define GL_INTENSITY16_SNORM                                          0x901B
+#define GL_INTENSITY32F_ARB                                           0x8817
+#define GL_INTENSITY32I_EXT                                           0x8D85
+#define GL_INTENSITY32UI_EXT                                          0x8D73
+#define GL_INTENSITY4                                                 0x804A
+#define GL_INTENSITY4_EXT                                             0x804A
+#define GL_INTENSITY8                                                 0x804B
+#define GL_INTENSITY8I_EXT                                            0x8D91
+#define GL_INTENSITY8UI_EXT                                           0x8D7F
+#define GL_INTENSITY8_EXT                                             0x804B
+#define GL_INTENSITY8_SNORM                                           0x9017
+#define GL_INTENSITY_EXT                                              0x8049
+#define GL_INTENSITY_FLOAT16_APPLE                                    0x881D
+#define GL_INTENSITY_FLOAT16_ATI                                      0x881D
+#define GL_INTENSITY_FLOAT32_APPLE                                    0x8817
+#define GL_INTENSITY_FLOAT32_ATI                                      0x8817
+#define GL_INTENSITY_SNORM                                            0x9013
+#define GL_INTERLACE_OML                                              0x8980
+#define GL_INTERLACE_READ_INGR                                        0x8568
+#define GL_INTERLACE_READ_OML                                         0x8981
+#define GL_INTERLACE_SGIX                                             0x8094
+#define GL_INTERLEAVED_ATTRIBS                                        0x8C8C
+#define GL_INTERLEAVED_ATTRIBS_EXT                                    0x8C8C
+#define GL_INTERLEAVED_ATTRIBS_NV                                     0x8C8C
+#define GL_INTERNALFORMAT_ALPHA_SIZE                                  0x8274
+#define GL_INTERNALFORMAT_ALPHA_TYPE                                  0x827B
+#define GL_INTERNALFORMAT_BLUE_SIZE                                   0x8273
+#define GL_INTERNALFORMAT_BLUE_TYPE                                   0x827A
+#define GL_INTERNALFORMAT_DEPTH_SIZE                                  0x8275
+#define GL_INTERNALFORMAT_DEPTH_TYPE                                  0x827C
+#define GL_INTERNALFORMAT_GREEN_SIZE                                  0x8272
+#define GL_INTERNALFORMAT_GREEN_TYPE                                  0x8279
+#define GL_INTERNALFORMAT_PREFERRED                                   0x8270
+#define GL_INTERNALFORMAT_RED_SIZE                                    0x8271
+#define GL_INTERNALFORMAT_RED_TYPE                                    0x8278
+#define GL_INTERNALFORMAT_SHARED_SIZE                                 0x8277
+#define GL_INTERNALFORMAT_STENCIL_SIZE                                0x8276
+#define GL_INTERNALFORMAT_STENCIL_TYPE                                0x827D
+#define GL_INTERNALFORMAT_SUPPORTED                                   0x826F
+#define GL_INTERPOLATE                                                0x8575
+#define GL_INTERPOLATE_ARB                                            0x8575
+#define GL_INTERPOLATE_EXT                                            0x8575
+#define GL_INT_10_10_10_2_OES                                         0x8DF7
+#define GL_INT_2_10_10_10_REV                                         0x8D9F
+#define GL_INT_IMAGE_1D                                               0x9057
+#define GL_INT_IMAGE_1D_ARRAY                                         0x905D
+#define GL_INT_IMAGE_1D_ARRAY_EXT                                     0x905D
+#define GL_INT_IMAGE_1D_EXT                                           0x9057
+#define GL_INT_IMAGE_2D                                               0x9058
+#define GL_INT_IMAGE_2D_ARRAY                                         0x905E
+#define GL_INT_IMAGE_2D_ARRAY_EXT                                     0x905E
+#define GL_INT_IMAGE_2D_EXT                                           0x9058
+#define GL_INT_IMAGE_2D_MULTISAMPLE                                   0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY                             0x9061
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT                         0x9061
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT                               0x9060
+#define GL_INT_IMAGE_2D_RECT                                          0x905A
+#define GL_INT_IMAGE_2D_RECT_EXT                                      0x905A
+#define GL_INT_IMAGE_3D                                               0x9059
+#define GL_INT_IMAGE_3D_EXT                                           0x9059
+#define GL_INT_IMAGE_BUFFER                                           0x905C
+#define GL_INT_IMAGE_BUFFER_EXT                                       0x905C
+#define GL_INT_IMAGE_CUBE                                             0x905B
+#define GL_INT_IMAGE_CUBE_EXT                                         0x905B
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY                                   0x905F
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT                               0x905F
+#define GL_INT_SAMPLER_1D                                             0x8DC9
+#define GL_INT_SAMPLER_1D_ARRAY                                       0x8DCE
+#define GL_INT_SAMPLER_1D_ARRAY_EXT                                   0x8DCE
+#define GL_INT_SAMPLER_1D_EXT                                         0x8DC9
+#define GL_INT_SAMPLER_2D                                             0x8DCA
+#define GL_INT_SAMPLER_2D_ARRAY                                       0x8DCF
+#define GL_INT_SAMPLER_2D_ARRAY_EXT                                   0x8DCF
+#define GL_INT_SAMPLER_2D_EXT                                         0x8DCA
+#define GL_INT_SAMPLER_2D_MULTISAMPLE                                 0x9109
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY                           0x910C
+#define GL_INT_SAMPLER_2D_RECT                                        0x8DCD
+#define GL_INT_SAMPLER_2D_RECT_EXT                                    0x8DCD
+#define GL_INT_SAMPLER_3D                                             0x8DCB
+#define GL_INT_SAMPLER_3D_EXT                                         0x8DCB
+#define GL_INT_SAMPLER_BUFFER                                         0x8DD0
+#define GL_INT_SAMPLER_BUFFER_AMD                                     0x9002
+#define GL_INT_SAMPLER_BUFFER_EXT                                     0x8DD0
+#define GL_INT_SAMPLER_CUBE                                           0x8DCC
+#define GL_INT_SAMPLER_CUBE_EXT                                       0x8DCC
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY                                 0x900E
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB                             0x900E
+#define GL_INT_SAMPLER_RENDERBUFFER_NV                                0x8E57
+#define GL_INT_VEC2                                                   0x8B53
+#define GL_INT_VEC2_ARB                                               0x8B53
+#define GL_INT_VEC3                                                   0x8B54
+#define GL_INT_VEC3_ARB                                               0x8B54
+#define GL_INT_VEC4                                                   0x8B55
+#define GL_INT_VEC4_ARB                                               0x8B55
+#define GL_INVALID_ENUM                                               0x0500
+#define GL_INVALID_FRAMEBUFFER_OPERATION                              0x0506
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT                          0x0506
+#define GL_INVALID_FRAMEBUFFER_OPERATION_OES                          0x0506
+#define GL_INVALID_INDEX                                              0xFFFFFFFFu
+#define GL_INVALID_OPERATION                                          0x0502
+#define GL_INVALID_VALUE                                              0x0501
+#define GL_INVARIANT_DATATYPE_EXT                                     0x87EB
+#define GL_INVARIANT_EXT                                              0x87C2
+#define GL_INVARIANT_VALUE_EXT                                        0x87EA
+#define GL_INVERSE_NV                                                 0x862B
+#define GL_INVERSE_TRANSPOSE_NV                                       0x862D
+#define GL_INVERT                                                     0x150A
+#define GL_INVERTED_SCREEN_W_REND                                     0x8491
+#define GL_IR_INSTRUMENT1_SGIX                                        0x817F
+#define GL_ISOLINES                                                   0x8E7A
+#define GL_IS_PER_PATCH                                               0x92E7
+#define GL_IS_ROW_MAJOR                                               0x9300
+#define GL_ITALIC_BIT_NV                                              0x02
+#define GL_IUI_N3F_V2F_EXT                                            0x81AF
+#define GL_IUI_N3F_V3F_EXT                                            0x81B0
+#define GL_IUI_V2F_EXT                                                0x81AD
+#define GL_IUI_V3F_EXT                                                0x81AE
+#define GL_KEEP                                                       0x1E00
+#define GL_LARGE_CCW_ARC_TO_NV                                        0x16
+#define GL_LARGE_CW_ARC_TO_NV                                         0x18
+#define GL_LAST_VERTEX_CONVENTION                                     0x8E4E
+#define GL_LAST_VERTEX_CONVENTION_EXT                                 0x8E4E
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV                               0x9027
+#define GL_LAYER_NV                                                   0x8DAA
+#define GL_LAYER_PROVOKING_VERTEX                                     0x825E
+#define GL_LEFT                                                       0x0406
+#define GL_LEQUAL                                                     0x0203
+#define GL_LERP_ATI                                                   0x8969
+#define GL_LESS                                                       0x0201
+#define GL_LIGHT0                                                     0x4000
+#define GL_LIGHT1                                                     0x4001
+#define GL_LIGHT2                                                     0x4002
+#define GL_LIGHT3                                                     0x4003
+#define GL_LIGHT4                                                     0x4004
+#define GL_LIGHT5                                                     0x4005
+#define GL_LIGHT6                                                     0x4006
+#define GL_LIGHT7                                                     0x4007
+#define GL_LIGHTING                                                   0x0B50
+#define GL_LIGHTING_BIT                                               0x00000040
+#define GL_LIGHT_ENV_MODE_SGIX                                        0x8407
+#define GL_LIGHT_MODEL_AMBIENT                                        0x0B53
+#define GL_LIGHT_MODEL_COLOR_CONTROL                                  0x81F8
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT                              0x81F8
+#define GL_LIGHT_MODEL_LOCAL_VIEWER                                   0x0B51
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE                          0x85B0
+#define GL_LIGHT_MODEL_TWO_SIDE                                       0x0B52
+#define GL_LINE                                                       0x1B01
+#define GL_LINEAR                                                     0x2601
+#define GL_LINEAR_ATTENUATION                                         0x1208
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX                                 0x8170
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX                                0x844F
+#define GL_LINEAR_DETAIL_ALPHA_SGIS                                   0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS                                   0x8099
+#define GL_LINEAR_DETAIL_SGIS                                         0x8097
+#define GL_LINEAR_MIPMAP_LINEAR                                       0x2703
+#define GL_LINEAR_MIPMAP_NEAREST                                      0x2701
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS                                  0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS                                  0x80AF
+#define GL_LINEAR_SHARPEN_SGIS                                        0x80AD
+#define GL_LINES                                                      0x0001
+#define GL_LINES_ADJACENCY                                            0x000A
+#define GL_LINES_ADJACENCY_ARB                                        0x000A
+#define GL_LINES_ADJACENCY_EXT                                        0x000A
+#define GL_LINE_BIT                                                   0x00000004
+#define GL_LINE_LOOP                                                  0x0002
+#define GL_LINE_QUALITY_HINT_SGIX                                     0x835B
+#define GL_LINE_RESET_TOKEN                                           0x0707
+#define GL_LINE_SMOOTH                                                0x0B20
+#define GL_LINE_SMOOTH_HINT                                           0x0C52
+#define GL_LINE_STIPPLE                                               0x0B24
+#define GL_LINE_STIPPLE_PATTERN                                       0x0B25
+#define GL_LINE_STIPPLE_REPEAT                                        0x0B26
+#define GL_LINE_STRIP                                                 0x0003
+#define GL_LINE_STRIP_ADJACENCY                                       0x000B
+#define GL_LINE_STRIP_ADJACENCY_ARB                                   0x000B
+#define GL_LINE_STRIP_ADJACENCY_EXT                                   0x000B
+#define GL_LINE_TOKEN                                                 0x0702
+#define GL_LINE_TO_NV                                                 0x04
+#define GL_LINE_WIDTH                                                 0x0B21
+#define GL_LINE_WIDTH_GRANULARITY                                     0x0B23
+#define GL_LINE_WIDTH_RANGE                                           0x0B22
+#define GL_LINK_STATUS                                                0x8B82
+#define GL_LIST_BASE                                                  0x0B32
+#define GL_LIST_BIT                                                   0x00020000
+#define GL_LIST_INDEX                                                 0x0B33
+#define GL_LIST_MODE                                                  0x0B30
+#define GL_LIST_PRIORITY_SGIX                                         0x8182
+#define GL_LOAD                                                       0x0101
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT                                0x87ED
+#define GL_LOCAL_CONSTANT_EXT                                         0x87C3
+#define GL_LOCAL_CONSTANT_VALUE_EXT                                   0x87EC
+#define GL_LOCAL_EXT                                                  0x87C4
+#define GL_LOCATION                                                   0x930E
+#define GL_LOCATION_INDEX                                             0x930F
+#define GL_LOGIC_OP                                                   0x0BF1
+#define GL_LOGIC_OP_MODE                                              0x0BF0
+#define GL_LOSE_CONTEXT_ON_RESET_ARB                                  0x8252
+#define GL_LOWER_LEFT                                                 0x8CA1
+#define GL_LOW_FLOAT                                                  0x8DF0
+#define GL_LOW_INT                                                    0x8DF3
+#define GL_LO_BIAS_NV                                                 0x8715
+#define GL_LO_SCALE_NV                                                0x870F
+#define GL_LUMINANCE                                                  0x1909
+#define GL_LUMINANCE12                                                0x8041
+#define GL_LUMINANCE12_ALPHA12                                        0x8047
+#define GL_LUMINANCE12_ALPHA12_EXT                                    0x8047
+#define GL_LUMINANCE12_ALPHA4                                         0x8046
+#define GL_LUMINANCE12_ALPHA4_EXT                                     0x8046
+#define GL_LUMINANCE12_EXT                                            0x8041
+#define GL_LUMINANCE16                                                0x8042
+#define GL_LUMINANCE16F_ARB                                           0x881E
+#define GL_LUMINANCE16I_EXT                                           0x8D8C
+#define GL_LUMINANCE16UI_EXT                                          0x8D7A
+#define GL_LUMINANCE16_ALPHA16                                        0x8048
+#define GL_LUMINANCE16_ALPHA16_EXT                                    0x8048
+#define GL_LUMINANCE16_ALPHA16_SNORM                                  0x901A
+#define GL_LUMINANCE16_EXT                                            0x8042
+#define GL_LUMINANCE16_SNORM                                          0x9019
+#define GL_LUMINANCE32F_ARB                                           0x8818
+#define GL_LUMINANCE32I_EXT                                           0x8D86
+#define GL_LUMINANCE32UI_EXT                                          0x8D74
+#define GL_LUMINANCE4                                                 0x803F
+#define GL_LUMINANCE4_ALPHA4                                          0x8043
+#define GL_LUMINANCE4_ALPHA4_EXT                                      0x8043
+#define GL_LUMINANCE4_EXT                                             0x803F
+#define GL_LUMINANCE6_ALPHA2                                          0x8044
+#define GL_LUMINANCE6_ALPHA2_EXT                                      0x8044
+#define GL_LUMINANCE8                                                 0x8040
+#define GL_LUMINANCE8I_EXT                                            0x8D92
+#define GL_LUMINANCE8UI_EXT                                           0x8D80
+#define GL_LUMINANCE8_ALPHA8                                          0x8045
+#define GL_LUMINANCE8_ALPHA8_EXT                                      0x8045
+#define GL_LUMINANCE8_ALPHA8_SNORM                                    0x9016
+#define GL_LUMINANCE8_EXT                                             0x8040
+#define GL_LUMINANCE8_SNORM                                           0x9015
+#define GL_LUMINANCE_ALPHA                                            0x190A
+#define GL_LUMINANCE_ALPHA16F_ARB                                     0x881F
+#define GL_LUMINANCE_ALPHA16I_EXT                                     0x8D8D
+#define GL_LUMINANCE_ALPHA16UI_EXT                                    0x8D7B
+#define GL_LUMINANCE_ALPHA32F_ARB                                     0x8819
+#define GL_LUMINANCE_ALPHA32I_EXT                                     0x8D87
+#define GL_LUMINANCE_ALPHA32UI_EXT                                    0x8D75
+#define GL_LUMINANCE_ALPHA8I_EXT                                      0x8D93
+#define GL_LUMINANCE_ALPHA8UI_EXT                                     0x8D81
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE                              0x881F
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI                                0x881F
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE                              0x8819
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI                                0x8819
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT                                0x8D9D
+#define GL_LUMINANCE_ALPHA_SNORM                                      0x9012
+#define GL_LUMINANCE_FLOAT16_APPLE                                    0x881E
+#define GL_LUMINANCE_FLOAT16_ATI                                      0x881E
+#define GL_LUMINANCE_FLOAT32_APPLE                                    0x8818
+#define GL_LUMINANCE_FLOAT32_ATI                                      0x8818
+#define GL_LUMINANCE_INTEGER_EXT                                      0x8D9C
+#define GL_LUMINANCE_SNORM                                            0x9011
+#define GL_MAD_ATI                                                    0x8968
+#define GL_MAGNITUDE_BIAS_NV                                          0x8718
+#define GL_MAGNITUDE_SCALE_NV                                         0x8712
+#define GL_MAJOR_VERSION                                              0x821B
+#define GL_MALI_SHADER_BINARY_ARM                                     0x8F60
+#define GL_MANUAL_GENERATE_MIPMAP                                     0x8294
+#define GL_MAP1_BINORMAL_EXT                                          0x8446
+#define GL_MAP1_COLOR_4                                               0x0D90
+#define GL_MAP1_GRID_DOMAIN                                           0x0DD0
+#define GL_MAP1_GRID_SEGMENTS                                         0x0DD1
+#define GL_MAP1_INDEX                                                 0x0D91
+#define GL_MAP1_NORMAL                                                0x0D92
+#define GL_MAP1_TANGENT_EXT                                           0x8444
+#define GL_MAP1_TEXTURE_COORD_1                                       0x0D93
+#define GL_MAP1_TEXTURE_COORD_2                                       0x0D94
+#define GL_MAP1_TEXTURE_COORD_3                                       0x0D95
+#define GL_MAP1_TEXTURE_COORD_4                                       0x0D96
+#define GL_MAP1_VERTEX_3                                              0x0D97
+#define GL_MAP1_VERTEX_4                                              0x0D98
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV                                   0x8660
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV                                  0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV                                  0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV                                  0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV                                  0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV                                  0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV                                  0x866F
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV                                   0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV                                   0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV                                   0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV                                   0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV                                   0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV                                   0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV                                   0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV                                   0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV                                   0x8669
+#define GL_MAP2_BINORMAL_EXT                                          0x8447
+#define GL_MAP2_COLOR_4                                               0x0DB0
+#define GL_MAP2_GRID_DOMAIN                                           0x0DD2
+#define GL_MAP2_GRID_SEGMENTS                                         0x0DD3
+#define GL_MAP2_INDEX                                                 0x0DB1
+#define GL_MAP2_NORMAL                                                0x0DB2
+#define GL_MAP2_TANGENT_EXT                                           0x8445
+#define GL_MAP2_TEXTURE_COORD_1                                       0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2                                       0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3                                       0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4                                       0x0DB6
+#define GL_MAP2_VERTEX_3                                              0x0DB7
+#define GL_MAP2_VERTEX_4                                              0x0DB8
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV                                   0x8670
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV                                  0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV                                  0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV                                  0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV                                  0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV                                  0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV                                  0x867F
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV                                   0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV                                   0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV                                   0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV                                   0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV                                   0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV                                   0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV                                   0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV                                   0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV                                   0x8679
+#define GL_MAP_ATTRIB_U_ORDER_NV                                      0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV                                      0x86C4
+#define GL_MAP_COLOR                                                  0x0D10
+#define GL_MAP_FLUSH_EXPLICIT_BIT                                     0x0010
+#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT                                 0x0010
+#define GL_MAP_INVALIDATE_BUFFER_BIT                                  0x0008
+#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT                              0x0008
+#define GL_MAP_INVALIDATE_RANGE_BIT                                   0x0004
+#define GL_MAP_INVALIDATE_RANGE_BIT_EXT                               0x0004
+#define GL_MAP_READ_BIT                                               0x0001
+#define GL_MAP_READ_BIT_EXT                                           0x0001
+#define GL_MAP_STENCIL                                                0x0D11
+#define GL_MAP_TESSELLATION_NV                                        0x86C2
+#define GL_MAP_UNSYNCHRONIZED_BIT                                     0x0020
+#define GL_MAP_UNSYNCHRONIZED_BIT_EXT                                 0x0020
+#define GL_MAP_WRITE_BIT                                              0x0002
+#define GL_MAP_WRITE_BIT_EXT                                          0x0002
+#define GL_MATERIAL_SIDE_HINT_PGI                                     0x1A22C
+#define GL_MATRIX0_ARB                                                0x88C0
+#define GL_MATRIX0_NV                                                 0x8630
+#define GL_MATRIX10_ARB                                               0x88CA
+#define GL_MATRIX11_ARB                                               0x88CB
+#define GL_MATRIX12_ARB                                               0x88CC
+#define GL_MATRIX13_ARB                                               0x88CD
+#define GL_MATRIX14_ARB                                               0x88CE
+#define GL_MATRIX15_ARB                                               0x88CF
+#define GL_MATRIX16_ARB                                               0x88D0
+#define GL_MATRIX17_ARB                                               0x88D1
+#define GL_MATRIX18_ARB                                               0x88D2
+#define GL_MATRIX19_ARB                                               0x88D3
+#define GL_MATRIX1_ARB                                                0x88C1
+#define GL_MATRIX1_NV                                                 0x8631
+#define GL_MATRIX20_ARB                                               0x88D4
+#define GL_MATRIX21_ARB                                               0x88D5
+#define GL_MATRIX22_ARB                                               0x88D6
+#define GL_MATRIX23_ARB                                               0x88D7
+#define GL_MATRIX24_ARB                                               0x88D8
+#define GL_MATRIX25_ARB                                               0x88D9
+#define GL_MATRIX26_ARB                                               0x88DA
+#define GL_MATRIX27_ARB                                               0x88DB
+#define GL_MATRIX28_ARB                                               0x88DC
+#define GL_MATRIX29_ARB                                               0x88DD
+#define GL_MATRIX2_ARB                                                0x88C2
+#define GL_MATRIX2_NV                                                 0x8632
+#define GL_MATRIX30_ARB                                               0x88DE
+#define GL_MATRIX31_ARB                                               0x88DF
+#define GL_MATRIX3_ARB                                                0x88C3
+#define GL_MATRIX3_NV                                                 0x8633
+#define GL_MATRIX4_ARB                                                0x88C4
+#define GL_MATRIX4_NV                                                 0x8634
+#define GL_MATRIX5_ARB                                                0x88C5
+#define GL_MATRIX5_NV                                                 0x8635
+#define GL_MATRIX6_ARB                                                0x88C6
+#define GL_MATRIX6_NV                                                 0x8636
+#define GL_MATRIX7_ARB                                                0x88C7
+#define GL_MATRIX7_NV                                                 0x8637
+#define GL_MATRIX8_ARB                                                0x88C8
+#define GL_MATRIX9_ARB                                                0x88C9
+#define GL_MATRIX_EXT                                                 0x87C0
+#define GL_MATRIX_INDEX_ARRAY_ARB                                     0x8844
+#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES                      0x8B9E
+#define GL_MATRIX_INDEX_ARRAY_OES                                     0x8844
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB                             0x8849
+#define GL_MATRIX_INDEX_ARRAY_POINTER_OES                             0x8849
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB                                0x8846
+#define GL_MATRIX_INDEX_ARRAY_SIZE_OES                                0x8846
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB                              0x8848
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES                              0x8848
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB                                0x8847
+#define GL_MATRIX_INDEX_ARRAY_TYPE_OES                                0x8847
+#define GL_MATRIX_MODE                                                0x0BA0
+#define GL_MATRIX_PALETTE_ARB                                         0x8840
+#define GL_MATRIX_PALETTE_OES                                         0x8840
+#define GL_MATRIX_STRIDE                                              0x92FF
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI                            0x00200000
+#define GL_MAT_AMBIENT_BIT_PGI                                        0x00100000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI                                  0x01000000
+#define GL_MAT_DIFFUSE_BIT_PGI                                        0x00400000
+#define GL_MAT_EMISSION_BIT_PGI                                       0x00800000
+#define GL_MAT_SHININESS_BIT_PGI                                      0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI                                       0x04000000
+#define GL_MAX                                                        0x8008
+#define GL_MAX_3D_TEXTURE_SIZE                                        0x8073
+#define GL_MAX_3D_TEXTURE_SIZE_EXT                                    0x8073
+#define GL_MAX_3D_TEXTURE_SIZE_OES                                    0x8073
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS                                   0x8138
+#define GL_MAX_ACTIVE_LIGHTS_SGIX                                     0x8405
+#define GL_MAX_ARRAY_TEXTURE_LAYERS                                   0x88FF
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT                               0x88FF
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX                                 0x8360
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX                                   0x832D
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX                                 0x8361
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX                                   0x835F
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS                         0x92DC
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE                             0x92D8
+#define GL_MAX_ATTRIB_STACK_DEPTH                                     0x0D35
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT                              0x8DED
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH                              0x0D3B
+#define GL_MAX_CLIPMAP_DEPTH_SGIX                                     0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX                             0x8178
+#define GL_MAX_CLIP_DISTANCES                                         0x0D32
+#define GL_MAX_CLIP_PLANES                                            0x0D32
+#define GL_MAX_COLOR_ATTACHMENTS                                      0x8CDF
+#define GL_MAX_COLOR_ATTACHMENTS_EXT                                  0x8CDF
+#define GL_MAX_COLOR_ATTACHMENTS_NV                                   0x8CDF
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH                               0x80B3
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI                           0x80B3
+#define GL_MAX_COLOR_TEXTURE_SAMPLES                                  0x910E
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS                               0x92D7
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS                        0x92D1
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS                    0x8266
+#define GL_MAX_COMBINED_DIMENSIONS                                    0x8282
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS                   0x8A33
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS                   0x8A32
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS                                0x90CF
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS              0x8F39
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT          0x8F39
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS                         0x90DC
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS               0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS            0x8E1F
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS                           0x8B4D
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB                       0x8B4D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS                                0x8A2E
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS                     0x8A31
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS                                0x8265
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS                         0x8264
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS                                 0x91BD
+#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS                              0x90EB
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS                          0x90DB
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE                             0x8262
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS                            0x91BC
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS                                 0x91BB
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS                             0x8263
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT                               0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE                                0x91BF
+#define GL_MAX_CONVOLUTION_HEIGHT                                     0x801B
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT                                 0x801B
+#define GL_MAX_CONVOLUTION_WIDTH                                      0x801A
+#define GL_MAX_CONVOLUTION_WIDTH_EXT                                  0x801A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE                                  0x851C
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB                              0x851C
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT                              0x851C
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES                              0x851C
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH                                0x826C
+#define GL_MAX_DEBUG_LOGGED_MESSAGES                                  0x9144
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD                              0x9144
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB                              0x9144
+#define GL_MAX_DEBUG_MESSAGE_LENGTH                                   0x9143
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD                               0x9143
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB                               0x9143
+#define GL_MAX_DEFORMATION_ORDER_SGIX                                 0x8197
+#define GL_MAX_DEPTH                                                  0x8280
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES                                  0x910F
+#define GL_MAX_DRAW_BUFFERS                                           0x8824
+#define GL_MAX_DRAW_BUFFERS_ARB                                       0x8824
+#define GL_MAX_DRAW_BUFFERS_ATI                                       0x8824
+#define GL_MAX_DRAW_BUFFERS_NV                                        0x8824
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS                               0x88FC
+#define GL_MAX_ELEMENTS_INDICES                                       0x80E9
+#define GL_MAX_ELEMENTS_INDICES_EXT                                   0x80E9
+#define GL_MAX_ELEMENTS_VERTICES                                      0x80E8
+#define GL_MAX_ELEMENTS_VERTICES_EXT                                  0x80E8
+#define GL_MAX_ELEMENT_INDEX                                          0x8D6B
+#define GL_MAX_EVAL_ORDER                                             0x0D30
+#define GL_MAX_EXT                                                    0x8008
+#define GL_MAX_FOG_FUNC_POINTS_SGIS                                   0x812C
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS                               0x92D6
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS                        0x92D0
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT                         0x8DE3
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS                                0x90CE
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS                              0x9125
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET                          0x8E5C
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV                       0x8E5C
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX                                   0x8404
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV                   0x8868
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS                         0x90DA
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS                                0x8A2D
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS                            0x8B49
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB                        0x8B49
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS                               0x8DFD
+#define GL_MAX_FRAMEBUFFER_HEIGHT                                     0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS                                     0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES                                    0x9318
+#define GL_MAX_FRAMEBUFFER_WIDTH                                      0x9315
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX                                  0x818D
+#define GL_MAX_GENERAL_COMBINERS_NV                                   0x854D
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS                               0x92D5
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS                        0x92CF
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT                         0x8DE4
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS                                0x90CD
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS                              0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS                             0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES                               0x8DE0
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB                           0x8DE0
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT                           0x8DE0
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV                        0x8E5A
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS                            0x8E5A
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS                         0x90D7
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS                           0x8C29
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB                       0x8C29
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT                       0x8C29
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS                       0x8DE1
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB                   0x8DE1
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT                   0x8DE1
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS                                0x8A2C
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS                            0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB                        0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT                        0x8DDF
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB                        0x8DDD
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT                        0x8DDD
+#define GL_MAX_HEIGHT                                                 0x827F
+#define GL_MAX_IMAGE_SAMPLES                                          0x906D
+#define GL_MAX_IMAGE_SAMPLES_EXT                                      0x906D
+#define GL_MAX_IMAGE_UNITS                                            0x8F38
+#define GL_MAX_IMAGE_UNITS_EXT                                        0x8F38
+#define GL_MAX_INTEGER_SAMPLES                                        0x9110
+#define GL_MAX_LABEL_LENGTH                                           0x82E8
+#define GL_MAX_LAYERS                                                 0x8281
+#define GL_MAX_LIGHTS                                                 0x0D31
+#define GL_MAX_LIST_NESTING                                           0x0B31
+#define GL_MAX_MAP_TESSELLATION_NV                                    0x86D6
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB                         0x8841
+#define GL_MAX_MODELVIEW_STACK_DEPTH                                  0x0D36
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV                          0x8E11
+#define GL_MAX_MULTIVIEW_BUFFERS_EXT                                  0x90F2
+#define GL_MAX_NAME_LENGTH                                            0x92F6
+#define GL_MAX_NAME_STACK_DEPTH                                       0x0D37
+#define GL_MAX_NUM_ACTIVE_VARIABLES                                   0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES                             0x92F8
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT               0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT                 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT                     0x87CE
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT            0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT                   0x87CB
+#define GL_MAX_PALETTE_MATRICES_ARB                                   0x8842
+#define GL_MAX_PALETTE_MATRICES_OES                                   0x8842
+#define GL_MAX_PATCH_VERTICES                                         0x8E7D
+#define GL_MAX_PIXEL_MAP_TABLE                                        0x0D34
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT                     0x8337
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI                     0x87F1
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB                          0x88B1
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB                           0x880B
+#define GL_MAX_PROGRAM_ATTRIBS_ARB                                    0x88AD
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV                           0x8908
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV                                  0x88F5
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB                             0x88B5
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV                           0x88F4
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV                             0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV                             0x8DA6
+#define GL_MAX_PROGRAM_IF_DEPTH_NV                                    0x88F6
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB                               0x88A1
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB                           0x88B4
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV                                  0x88F8
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV                                  0x88F7
+#define GL_MAX_PROGRAM_MATRICES_ARB                                   0x862F
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB                         0x862E
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB                   0x88B3
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB                    0x880E
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB                             0x88AF
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB                        0x88A3
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB                          0x88AB
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB                         0x88A7
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB                    0x8810
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB                    0x880F
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV                             0x8C27
+#define GL_MAX_PROGRAM_PARAMETERS_ARB                                 0x88A9
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV                   0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV                       0x8DA1
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV                               0x86D8
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV                           0x8909
+#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV                              0x8F45
+#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV                       0x8F44
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB                                0x88A5
+#define GL_MAX_PROGRAM_TEXEL_OFFSET                                   0x8905
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV                                0x8905
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS                      0x8F9F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB                  0x8F9F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET                          0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB                      0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV                       0x8E5F
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB                           0x880D
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB                           0x880C
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV                     0x8C28
+#define GL_MAX_PROJECTION_STACK_DEPTH                                 0x0D38
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV                                 0x86D7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE                                 0x84F8
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB                             0x84F8
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV                              0x84F8
+#define GL_MAX_RENDERBUFFER_SIZE                                      0x84E8
+#define GL_MAX_RENDERBUFFER_SIZE_EXT                                  0x84E8
+#define GL_MAX_RENDERBUFFER_SIZE_OES                                  0x84E8
+#define GL_MAX_SAMPLES                                                0x8D57
+#define GL_MAX_SAMPLES_ANGLE                                          0x8D57
+#define GL_MAX_SAMPLES_EXT                                            0x8D57
+#define GL_MAX_SAMPLES_IMG                                            0x9135
+#define GL_MAX_SAMPLE_MASK_WORDS                                      0x8E59
+#define GL_MAX_SAMPLE_MASK_WORDS_NV                                   0x8E59
+#define GL_MAX_SERVER_WAIT_TIMEOUT                                    0x9111
+#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE                              0x9111
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV                               0x8F35
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE                              0x90DE
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS                         0x90DD
+#define GL_MAX_SHININESS_NV                                           0x8504
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD                             0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS                            0x919A
+#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD                                0x9198
+#define GL_MAX_SPOT_EXPONENT_NV                                       0x8505
+#define GL_MAX_SUBROUTINES                                            0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS                           0x8DE8
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS                           0x92D3
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS                    0x92CD
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS                            0x90CB
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS                          0x886C
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS                         0x8E83
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS                     0x90D8
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS                       0x8E81
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS                   0x8E85
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS                            0x8E89
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS                        0x8E7F
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS                        0x92D4
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS                 0x92CE
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS                         0x90CC
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS                       0x886D
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS                      0x8E86
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS                  0x90D9
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS                    0x8E82
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS                         0x8E8A
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS                     0x8E80
+#define GL_MAX_TESS_GEN_LEVEL                                         0x8E7E
+#define GL_MAX_TESS_PATCH_COMPONENTS                                  0x8E84
+#define GL_MAX_TEXTURE_BUFFER_SIZE                                    0x8C2B
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB                                0x8C2B
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT                                0x8C2B
+#define GL_MAX_TEXTURE_COORDS                                         0x8871
+#define GL_MAX_TEXTURE_COORDS_ARB                                     0x8871
+#define GL_MAX_TEXTURE_COORDS_NV                                      0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS                                    0x8872
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB                                0x8872
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV                                 0x8872
+#define GL_MAX_TEXTURE_LOD_BIAS                                       0x84FD
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT                                   0x84FD
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                             0x84FF
+#define GL_MAX_TEXTURE_SIZE                                           0x0D33
+#define GL_MAX_TEXTURE_STACK_DEPTH                                    0x0D39
+#define GL_MAX_TEXTURE_UNITS                                          0x84E2
+#define GL_MAX_TEXTURE_UNITS_ARB                                      0x84E2
+#define GL_MAX_TRACK_MATRICES_NV                                      0x862F
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV                            0x862E
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS                             0x8E70
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS              0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT          0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV           0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS                    0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT                0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV                 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS                 0x8C80
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT             0x8C80
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV              0x8C80
+#define GL_MAX_UNIFORM_BLOCK_SIZE                                     0x8A30
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS                                0x8A2F
+#define GL_MAX_UNIFORM_LOCATIONS                                      0x826E
+#define GL_MAX_VARYING_COMPONENTS                                     0x8B4B
+#define GL_MAX_VARYING_COMPONENTS_EXT                                 0x8B4B
+#define GL_MAX_VARYING_FLOATS                                         0x8B4B
+#define GL_MAX_VARYING_FLOATS_ARB                                     0x8B4B
+#define GL_MAX_VARYING_VECTORS                                        0x8DFC
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV                          0x8520
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS                                 0x92D2
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS                          0x92CC
+#define GL_MAX_VERTEX_ATTRIBS                                         0x8869
+#define GL_MAX_VERTEX_ATTRIBS_ARB                                     0x8869
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS                                 0x82DA
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET                          0x82D9
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT                           0x8DE2
+#define GL_MAX_VERTEX_HINT_PGI                                        0x1A22D
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS                                  0x90CA
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS                               0x9122
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT                         0x87C5
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT                           0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT                               0x87C9
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT                      0x87C8
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS                           0x90D6
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT                             0x87C6
+#define GL_MAX_VERTEX_STREAMS                                         0x8E71
+#define GL_MAX_VERTEX_STREAMS_ATI                                     0x876B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS                             0x8B4C
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB                         0x8B4C
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS                                  0x8A2B
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS                              0x8B4A
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB                          0x8B4A
+#define GL_MAX_VERTEX_UNIFORM_VECTORS                                 0x8DFB
+#define GL_MAX_VERTEX_UNITS_ARB                                       0x86A4
+#define GL_MAX_VERTEX_UNITS_OES                                       0x86A4
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB                          0x8DDE
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT                          0x8DDE
+#define GL_MAX_VIEWPORTS                                              0x825B
+#define GL_MAX_VIEWPORT_DIMS                                          0x0D3A
+#define GL_MAX_WIDTH                                                  0x827E
+#define GL_MEDIUM_FLOAT                                               0x8DF1
+#define GL_MEDIUM_INT                                                 0x8DF4
+#define GL_MIN                                                        0x8007
+#define GL_MINMAX                                                     0x802E
+#define GL_MINMAX_EXT                                                 0x802E
+#define GL_MINMAX_FORMAT                                              0x802F
+#define GL_MINMAX_FORMAT_EXT                                          0x802F
+#define GL_MINMAX_SINK                                                0x8030
+#define GL_MINMAX_SINK_EXT                                            0x8030
+#define GL_MINOR_VERSION                                              0x821C
+#define GL_MIN_EXT                                                    0x8007
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET                          0x8E5B
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV                       0x8E5B
+#define GL_MIN_LOD_WARNING_AMD                                        0x919C
+#define GL_MIN_MAP_BUFFER_ALIGNMENT                                   0x90BC
+#define GL_MIN_PROGRAM_TEXEL_OFFSET                                   0x8904
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV                                0x8904
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET                          0x8E5E
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB                      0x8E5E
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV                       0x8E5E
+#define GL_MIN_SAMPLE_SHADING_VALUE                                   0x8C37
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB                               0x8C37
+#define GL_MIN_SPARSE_LEVEL_AMD                                       0x919B
+#define GL_MIPMAP                                                     0x8293
+#define GL_MIRRORED_REPEAT                                            0x8370
+#define GL_MIRRORED_REPEAT_ARB                                        0x8370
+#define GL_MIRRORED_REPEAT_IBM                                        0x8370
+#define GL_MIRRORED_REPEAT_OES                                        0x8370
+#define GL_MIRROR_CLAMP_ATI                                           0x8742
+#define GL_MIRROR_CLAMP_EXT                                           0x8742
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT                                 0x8912
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI                                   0x8743
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT                                   0x8743
+#define GL_MITER_REVERT_NV                                            0x90A7
+#define GL_MITER_TRUNCATE_NV                                          0x90A8
+#define GL_MODELVIEW                                                  0x1700
+#define GL_MODELVIEW0_ARB                                             0x1700
+#define GL_MODELVIEW10_ARB                                            0x872A
+#define GL_MODELVIEW11_ARB                                            0x872B
+#define GL_MODELVIEW12_ARB                                            0x872C
+#define GL_MODELVIEW13_ARB                                            0x872D
+#define GL_MODELVIEW14_ARB                                            0x872E
+#define GL_MODELVIEW15_ARB                                            0x872F
+#define GL_MODELVIEW16_ARB                                            0x8730
+#define GL_MODELVIEW17_ARB                                            0x8731
+#define GL_MODELVIEW18_ARB                                            0x8732
+#define GL_MODELVIEW19_ARB                                            0x8733
+#define GL_MODELVIEW1_ARB                                             0x850A
+#define GL_MODELVIEW1_EXT                                             0x850A
+#define GL_MODELVIEW1_MATRIX_EXT                                      0x8506
+#define GL_MODELVIEW1_STACK_DEPTH_EXT                                 0x8502
+#define GL_MODELVIEW20_ARB                                            0x8734
+#define GL_MODELVIEW21_ARB                                            0x8735
+#define GL_MODELVIEW22_ARB                                            0x8736
+#define GL_MODELVIEW23_ARB                                            0x8737
+#define GL_MODELVIEW24_ARB                                            0x8738
+#define GL_MODELVIEW25_ARB                                            0x8739
+#define GL_MODELVIEW26_ARB                                            0x873A
+#define GL_MODELVIEW27_ARB                                            0x873B
+#define GL_MODELVIEW28_ARB                                            0x873C
+#define GL_MODELVIEW29_ARB                                            0x873D
+#define GL_MODELVIEW2_ARB                                             0x8722
+#define GL_MODELVIEW30_ARB                                            0x873E
+#define GL_MODELVIEW31_ARB                                            0x873F
+#define GL_MODELVIEW3_ARB                                             0x8723
+#define GL_MODELVIEW4_ARB                                             0x8724
+#define GL_MODELVIEW5_ARB                                             0x8725
+#define GL_MODELVIEW6_ARB                                             0x8726
+#define GL_MODELVIEW7_ARB                                             0x8727
+#define GL_MODELVIEW8_ARB                                             0x8728
+#define GL_MODELVIEW9_ARB                                             0x8729
+#define GL_MODELVIEW_MATRIX                                           0x0BA6
+#define GL_MODELVIEW_MATRIX1_EXT                                      0x8506
+#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES                     0x898D
+#define GL_MODELVIEW_PROJECTION_NV                                    0x8629
+#define GL_MODELVIEW_STACK_DEPTH                                      0x0BA3
+#define GL_MODULATE                                                   0x2100
+#define GL_MODULATE_ADD_ATI                                           0x8744
+#define GL_MODULATE_COLOR_IMG                                         0x8C04
+#define GL_MODULATE_SIGNED_ADD_ATI                                    0x8745
+#define GL_MODULATE_SUBTRACT_ATI                                      0x8746
+#define GL_MOVE_TO_CONTINUES_NV                                       0x90B6
+#define GL_MOVE_TO_NV                                                 0x02
+#define GL_MOVE_TO_RESETS_NV                                          0x90B5
+#define GL_MOV_ATI                                                    0x8961
+#define GL_MULT                                                       0x0103
+#define GL_MULTISAMPLE                                                0x809D
+#define GL_MULTISAMPLE_3DFX                                           0x86B2
+#define GL_MULTISAMPLE_ARB                                            0x809D
+#define GL_MULTISAMPLE_BIT                                            0x20000000
+#define GL_MULTISAMPLE_BIT_3DFX                                       0x20000000
+#define GL_MULTISAMPLE_BIT_ARB                                        0x20000000
+#define GL_MULTISAMPLE_BIT_EXT                                        0x20000000
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV                              0x8E12
+#define GL_MULTISAMPLE_EXT                                            0x809D
+#define GL_MULTISAMPLE_FILTER_HINT_NV                                 0x8534
+#define GL_MULTISAMPLE_SGIS                                           0x809D
+#define GL_MULTIVIEW_EXT                                              0x90F1
+#define GL_MULTI_HULLS_NV                                             0x908C
+#define GL_MUL_ATI                                                    0x8964
+#define GL_MVP_MATRIX_EXT                                             0x87E3
+#define GL_N3F_V3F                                                    0x2A25
+#define GL_NAMED_STRING_LENGTH_ARB                                    0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB                                      0x8DEA
+#define GL_NAME_LENGTH                                                0x92F9
+#define GL_NAME_STACK_DEPTH                                           0x0D70
+#define GL_NAND                                                       0x150E
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI                             0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI                               0x1A204
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI                                 0x1A202
+#define GL_NEAREST                                                    0x2600
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX                                0x844E
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX                               0x844D
+#define GL_NEAREST_MIPMAP_LINEAR                                      0x2702
+#define GL_NEAREST_MIPMAP_NEAREST                                     0x2700
+#define GL_NEGATE_BIT_ATI                                             0x00000004
+#define GL_NEGATIVE_ONE_EXT                                           0x87DF
+#define GL_NEGATIVE_W_EXT                                             0x87DC
+#define GL_NEGATIVE_X_EXT                                             0x87D9
+#define GL_NEGATIVE_Y_EXT                                             0x87DA
+#define GL_NEGATIVE_Z_EXT                                             0x87DB
+#define GL_NEVER                                                      0x0200
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV                        0x9025
+#define GL_NICEST                                                     0x1102
+#define GL_NONE                                                       0
+#define GL_NOOP                                                       0x1505
+#define GL_NOR                                                        0x1508
+#define GL_NORMALIZE                                                  0x0BA1
+#define GL_NORMALIZED_RANGE_EXT                                       0x87E0
+#define GL_NORMAL_ARRAY                                               0x8075
+#define GL_NORMAL_ARRAY_ADDRESS_NV                                    0x8F22
+#define GL_NORMAL_ARRAY_BUFFER_BINDING                                0x8897
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB                            0x8897
+#define GL_NORMAL_ARRAY_COUNT_EXT                                     0x8080
+#define GL_NORMAL_ARRAY_EXT                                           0x8075
+#define GL_NORMAL_ARRAY_LENGTH_NV                                     0x8F2C
+#define GL_NORMAL_ARRAY_LIST_IBM                                      103071
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM                               103081
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL                       0x83F6
+#define GL_NORMAL_ARRAY_POINTER                                       0x808F
+#define GL_NORMAL_ARRAY_POINTER_EXT                                   0x808F
+#define GL_NORMAL_ARRAY_STRIDE                                        0x807F
+#define GL_NORMAL_ARRAY_STRIDE_EXT                                    0x807F
+#define GL_NORMAL_ARRAY_TYPE                                          0x807E
+#define GL_NORMAL_ARRAY_TYPE_EXT                                      0x807E
+#define GL_NORMAL_BIT_PGI                                             0x08000000
+#define GL_NORMAL_MAP                                                 0x8511
+#define GL_NORMAL_MAP_ARB                                             0x8511
+#define GL_NORMAL_MAP_EXT                                             0x8511
+#define GL_NORMAL_MAP_NV                                              0x8511
+#define GL_NORMAL_MAP_OES                                             0x8511
+#define GL_NOTEQUAL                                                   0x0205
+#define GL_NO_ERROR                                                   0
+#define GL_NO_RESET_NOTIFICATION_ARB                                  0x8261
+#define GL_NUM_ACTIVE_VARIABLES                                       0x9304
+#define GL_NUM_COMPATIBLE_SUBROUTINES                                 0x8E4A
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS                             0x86A2
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB                         0x86A2
+#define GL_NUM_EXTENSIONS                                             0x821D
+#define GL_NUM_FILL_STREAMS_NV                                        0x8E29
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI                                 0x896F
+#define GL_NUM_FRAGMENT_REGISTERS_ATI                                 0x896E
+#define GL_NUM_GENERAL_COMBINERS_NV                                   0x854E
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI                      0x8973
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI                              0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI                                 0x8972
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI                                0x8974
+#define GL_NUM_PASSES_ATI                                             0x8970
+#define GL_NUM_PROGRAM_BINARY_FORMATS                                 0x87FE
+#define GL_NUM_PROGRAM_BINARY_FORMATS_OES                             0x87FE
+#define GL_NUM_SAMPLE_COUNTS                                          0x9380
+#define GL_NUM_SHADER_BINARY_FORMATS                                  0x8DF9
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS                              0x82E9
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV                               0x9024
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB                               0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB                     0x8B8A
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB                                 0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB                       0x8B87
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB                                0x8B85
+#define GL_OBJECT_BUFFER_SIZE_ATI                                     0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI                                    0x8765
+#define GL_OBJECT_COMPILE_STATUS_ARB                                  0x8B81
+#define GL_OBJECT_DELETE_STATUS_ARB                                   0x8B80
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS                               0x81F3
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS                              0x81F1
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB                                 0x8B84
+#define GL_OBJECT_LINEAR                                              0x2401
+#define GL_OBJECT_LINE_SGIS                                           0x81F7
+#define GL_OBJECT_LINK_STATUS_ARB                                     0x8B82
+#define GL_OBJECT_PLANE                                               0x2501
+#define GL_OBJECT_POINT_SGIS                                          0x81F5
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB                            0x8B88
+#define GL_OBJECT_SUBTYPE_ARB                                         0x8B4F
+#define GL_OBJECT_TYPE                                                0x9112
+#define GL_OBJECT_TYPE_APPLE                                          0x9112
+#define GL_OBJECT_TYPE_ARB                                            0x8B4E
+#define GL_OBJECT_VALIDATE_STATUS_ARB                                 0x8B83
+#define GL_OCCLUSION_TEST_HP                                          0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP                                   0x8166
+#define GL_OFFSET                                                     0x92FC
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV                       0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV                0x8857
+#define GL_OFFSET_HILO_TEXTURE_2D_NV                                  0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV                           0x8855
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV                            0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV                      0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV                     0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV               0x8853
+#define GL_OFFSET_TEXTURE_2D_NV                                       0x86E8
+#define GL_OFFSET_TEXTURE_BIAS_NV                                     0x86E3
+#define GL_OFFSET_TEXTURE_MATRIX_NV                                   0x86E1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV                                0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV                          0x864D
+#define GL_OFFSET_TEXTURE_SCALE_NV                                    0x86E2
+#define GL_ONE                                                        1
+#define GL_ONE_EXT                                                    0x87DE
+#define GL_ONE_MINUS_CONSTANT_ALPHA                                   0x8004
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT                               0x8004
+#define GL_ONE_MINUS_CONSTANT_COLOR                                   0x8002
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT                               0x8002
+#define GL_ONE_MINUS_DST_ALPHA                                        0x0305
+#define GL_ONE_MINUS_DST_COLOR                                        0x0307
+#define GL_ONE_MINUS_SRC1_ALPHA                                       0x88FB
+#define GL_ONE_MINUS_SRC1_COLOR                                       0x88FA
+#define GL_ONE_MINUS_SRC_ALPHA                                        0x0303
+#define GL_ONE_MINUS_SRC_COLOR                                        0x0301
+#define GL_OPERAND0_ALPHA                                             0x8598
+#define GL_OPERAND0_ALPHA_ARB                                         0x8598
+#define GL_OPERAND0_ALPHA_EXT                                         0x8598
+#define GL_OPERAND0_RGB                                               0x8590
+#define GL_OPERAND0_RGB_ARB                                           0x8590
+#define GL_OPERAND0_RGB_EXT                                           0x8590
+#define GL_OPERAND1_ALPHA                                             0x8599
+#define GL_OPERAND1_ALPHA_ARB                                         0x8599
+#define GL_OPERAND1_ALPHA_EXT                                         0x8599
+#define GL_OPERAND1_RGB                                               0x8591
+#define GL_OPERAND1_RGB_ARB                                           0x8591
+#define GL_OPERAND1_RGB_EXT                                           0x8591
+#define GL_OPERAND2_ALPHA                                             0x859A
+#define GL_OPERAND2_ALPHA_ARB                                         0x859A
+#define GL_OPERAND2_ALPHA_EXT                                         0x859A
+#define GL_OPERAND2_RGB                                               0x8592
+#define GL_OPERAND2_RGB_ARB                                           0x8592
+#define GL_OPERAND2_RGB_EXT                                           0x8592
+#define GL_OPERAND3_ALPHA_NV                                          0x859B
+#define GL_OPERAND3_RGB_NV                                            0x8593
+#define GL_OP_ADD_EXT                                                 0x8787
+#define GL_OP_CLAMP_EXT                                               0x878E
+#define GL_OP_CROSS_PRODUCT_EXT                                       0x8797
+#define GL_OP_DOT3_EXT                                                0x8784
+#define GL_OP_DOT4_EXT                                                0x8785
+#define GL_OP_EXP_BASE_2_EXT                                          0x8791
+#define GL_OP_FLOOR_EXT                                               0x878F
+#define GL_OP_FRAC_EXT                                                0x8789
+#define GL_OP_INDEX_EXT                                               0x8782
+#define GL_OP_LOG_BASE_2_EXT                                          0x8792
+#define GL_OP_MADD_EXT                                                0x8788
+#define GL_OP_MAX_EXT                                                 0x878A
+#define GL_OP_MIN_EXT                                                 0x878B
+#define GL_OP_MOV_EXT                                                 0x8799
+#define GL_OP_MULTIPLY_MATRIX_EXT                                     0x8798
+#define GL_OP_MUL_EXT                                                 0x8786
+#define GL_OP_NEGATE_EXT                                              0x8783
+#define GL_OP_POWER_EXT                                               0x8793
+#define GL_OP_RECIP_EXT                                               0x8794
+#define GL_OP_RECIP_SQRT_EXT                                          0x8795
+#define GL_OP_ROUND_EXT                                               0x8790
+#define GL_OP_SET_GE_EXT                                              0x878C
+#define GL_OP_SET_LT_EXT                                              0x878D
+#define GL_OP_SUB_EXT                                                 0x8796
+#define GL_OR                                                         0x1507
+#define GL_ORDER                                                      0x0A01
+#define GL_OR_INVERTED                                                0x150D
+#define GL_OR_REVERSE                                                 0x150B
+#define GL_OUTPUT_COLOR0_EXT                                          0x879B
+#define GL_OUTPUT_COLOR1_EXT                                          0x879C
+#define GL_OUTPUT_FOG_EXT                                             0x87BD
+#define GL_OUTPUT_TEXTURE_COORD0_EXT                                  0x879D
+#define GL_OUTPUT_TEXTURE_COORD10_EXT                                 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT                                 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT                                 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT                                 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT                                 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT                                 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT                                 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT                                 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT                                 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT                                 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD1_EXT                                  0x879E
+#define GL_OUTPUT_TEXTURE_COORD20_EXT                                 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT                                 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT                                 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT                                 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT                                 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT                                 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT                                 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT                                 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT                                 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT                                 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD2_EXT                                  0x879F
+#define GL_OUTPUT_TEXTURE_COORD30_EXT                                 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT                                 0x87BC
+#define GL_OUTPUT_TEXTURE_COORD3_EXT                                  0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT                                  0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT                                  0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT                                  0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT                                  0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT                                  0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT                                  0x87A6
+#define GL_OUTPUT_VERTEX_EXT                                          0x879A
+#define GL_OUT_OF_MEMORY                                              0x0505
+#define GL_PACK_ALIGNMENT                                             0x0D05
+#define GL_PACK_CMYK_HINT_EXT                                         0x800E
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH                                0x912D
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT                               0x912C
+#define GL_PACK_COMPRESSED_BLOCK_SIZE                                 0x912E
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH                                0x912B
+#define GL_PACK_COMPRESSED_SIZE_SGIX                                  0x831C
+#define GL_PACK_IMAGE_DEPTH_SGIS                                      0x8131
+#define GL_PACK_IMAGE_HEIGHT                                          0x806C
+#define GL_PACK_IMAGE_HEIGHT_EXT                                      0x806C
+#define GL_PACK_INVERT_MESA                                           0x8758
+#define GL_PACK_LSB_FIRST                                             0x0D01
+#define GL_PACK_MAX_COMPRESSED_SIZE_SGIX                              0x831B
+#define GL_PACK_RESAMPLE_OML                                          0x8984
+#define GL_PACK_RESAMPLE_SGIX                                         0x842C
+#define GL_PACK_REVERSE_ROW_ORDER_ANGLE                               0x93A4
+#define GL_PACK_ROW_BYTES_APPLE                                       0x8A15
+#define GL_PACK_ROW_LENGTH                                            0x0D02
+#define GL_PACK_SKIP_IMAGES                                           0x806B
+#define GL_PACK_SKIP_IMAGES_EXT                                       0x806B
+#define GL_PACK_SKIP_PIXELS                                           0x0D04
+#define GL_PACK_SKIP_ROWS                                             0x0D03
+#define GL_PACK_SKIP_VOLUMES_SGIS                                     0x8130
+#define GL_PACK_SUBSAMPLE_RATE_SGIX                                   0x85A0
+#define GL_PACK_SWAP_BYTES                                            0x0D00
+#define GL_PALETTE4_R5_G6_B5_OES                                      0x8B92
+#define GL_PALETTE4_RGB5_A1_OES                                       0x8B94
+#define GL_PALETTE4_RGB8_OES                                          0x8B90
+#define GL_PALETTE4_RGBA4_OES                                         0x8B93
+#define GL_PALETTE4_RGBA8_OES                                         0x8B91
+#define GL_PALETTE8_R5_G6_B5_OES                                      0x8B97
+#define GL_PALETTE8_RGB5_A1_OES                                       0x8B99
+#define GL_PALETTE8_RGB8_OES                                          0x8B95
+#define GL_PALETTE8_RGBA4_OES                                         0x8B98
+#define GL_PALETTE8_RGBA8_OES                                         0x8B96
+#define GL_PARALLEL_ARRAYS_INTEL                                      0x83F4
+#define GL_PARTIAL_SUCCESS_NV                                         0x902E
+#define GL_PASS_THROUGH_NV                                            0x86E6
+#define GL_PASS_THROUGH_TOKEN                                         0x0700
+#define GL_PATCHES                                                    0x000E
+#define GL_PATCH_DEFAULT_INNER_LEVEL                                  0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL                                  0x8E74
+#define GL_PATCH_VERTICES                                             0x8E72
+#define GL_PATH_CLIENT_LENGTH_NV                                      0x907F
+#define GL_PATH_COMMAND_COUNT_NV                                      0x909D
+#define GL_PATH_COMPUTED_LENGTH_NV                                    0x90A0
+#define GL_PATH_COORD_COUNT_NV                                        0x909E
+#define GL_PATH_COVER_DEPTH_FUNC_NV                                   0x90BF
+#define GL_PATH_DASH_ARRAY_COUNT_NV                                   0x909F
+#define GL_PATH_DASH_CAPS_NV                                          0x907B
+#define GL_PATH_DASH_OFFSET_NV                                        0x907E
+#define GL_PATH_DASH_OFFSET_RESET_NV                                  0x90B4
+#define GL_PATH_END_CAPS_NV                                           0x9076
+#define GL_PATH_ERROR_POSITION_NV                                     0x90AB
+#define GL_PATH_FILL_BOUNDING_BOX_NV                                  0x90A1
+#define GL_PATH_FILL_COVER_MODE_NV                                    0x9082
+#define GL_PATH_FILL_MASK_NV                                          0x9081
+#define GL_PATH_FILL_MODE_NV                                          0x9080
+#define GL_PATH_FOG_GEN_MODE_NV                                       0x90AC
+#define GL_PATH_FORMAT_PS_NV                                          0x9071
+#define GL_PATH_FORMAT_SVG_NV                                         0x9070
+#define GL_PATH_GEN_COEFF_NV                                          0x90B1
+#define GL_PATH_GEN_COLOR_FORMAT_NV                                   0x90B2
+#define GL_PATH_GEN_COMPONENTS_NV                                     0x90B3
+#define GL_PATH_GEN_MODE_NV                                           0x90B0
+#define GL_PATH_INITIAL_DASH_CAP_NV                                   0x907C
+#define GL_PATH_INITIAL_END_CAP_NV                                    0x9077
+#define GL_PATH_JOIN_STYLE_NV                                         0x9079
+#define GL_PATH_MITER_LIMIT_NV                                        0x907A
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV                                0x908A
+#define GL_PATH_SAMPLE_QUALITY_NV                                     0x9085
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV                        0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV                         0x90BE
+#define GL_PATH_STENCIL_FUNC_NV                                       0x90B7
+#define GL_PATH_STENCIL_REF_NV                                        0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV                                 0x90B9
+#define GL_PATH_STROKE_BOUNDING_BOX_NV                                0x90A2
+#define GL_PATH_STROKE_BOUND_NV                                       0x9086
+#define GL_PATH_STROKE_COVER_MODE_NV                                  0x9083
+#define GL_PATH_STROKE_MASK_NV                                        0x9084
+#define GL_PATH_STROKE_OVERSAMPLE_COUNT_NV                            0x9087
+#define GL_PATH_STROKE_WIDTH_NV                                       0x9075
+#define GL_PATH_TERMINAL_DASH_CAP_NV                                  0x907D
+#define GL_PATH_TERMINAL_END_CAP_NV                                   0x9078
+#define GL_PERCENTAGE_AMD                                             0x8BC3
+#define GL_PERFMON_GLOBAL_MODE_QCOM                                   0x8FA0
+#define GL_PERFMON_RESULT_AMD                                         0x8BC6
+#define GL_PERFMON_RESULT_AVAILABLE_AMD                               0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD                                    0x8BC5
+#define GL_PERFORMANCE_MONITOR_AMD                                    0x9152
+#define GL_PERSPECTIVE_CORRECTION_HINT                                0x0C50
+#define GL_PERTURB_EXT                                                0x85AE
+#define GL_PER_STAGE_CONSTANTS_NV                                     0x8535
+#define GL_PHONG_HINT_WIN                                             0x80EB
+#define GL_PHONG_WIN                                                  0x80EA
+#define GL_PIXEL_BUFFER_BARRIER_BIT                                   0x00000080
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT                               0x00000080
+#define GL_PIXEL_COUNTER_BITS_NV                                      0x8864
+#define GL_PIXEL_COUNT_AVAILABLE_NV                                   0x8867
+#define GL_PIXEL_COUNT_NV                                             0x8866
+#define GL_PIXEL_CUBIC_WEIGHT_EXT                                     0x8333
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS                           0x8355
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS                             0x8354
+#define GL_PIXEL_GROUP_COLOR_SGIS                                     0x8356
+#define GL_PIXEL_MAG_FILTER_EXT                                       0x8331
+#define GL_PIXEL_MAP_A_TO_A                                           0x0C79
+#define GL_PIXEL_MAP_A_TO_A_SIZE                                      0x0CB9
+#define GL_PIXEL_MAP_B_TO_B                                           0x0C78
+#define GL_PIXEL_MAP_B_TO_B_SIZE                                      0x0CB8
+#define GL_PIXEL_MAP_G_TO_G                                           0x0C77
+#define GL_PIXEL_MAP_G_TO_G_SIZE                                      0x0CB7
+#define GL_PIXEL_MAP_I_TO_A                                           0x0C75
+#define GL_PIXEL_MAP_I_TO_A_SIZE                                      0x0CB5
+#define GL_PIXEL_MAP_I_TO_B                                           0x0C74
+#define GL_PIXEL_MAP_I_TO_B_SIZE                                      0x0CB4
+#define GL_PIXEL_MAP_I_TO_G                                           0x0C73
+#define GL_PIXEL_MAP_I_TO_G_SIZE                                      0x0CB3
+#define GL_PIXEL_MAP_I_TO_I                                           0x0C70
+#define GL_PIXEL_MAP_I_TO_I_SIZE                                      0x0CB0
+#define GL_PIXEL_MAP_I_TO_R                                           0x0C72
+#define GL_PIXEL_MAP_I_TO_R_SIZE                                      0x0CB2
+#define GL_PIXEL_MAP_R_TO_R                                           0x0C76
+#define GL_PIXEL_MAP_R_TO_R_SIZE                                      0x0CB6
+#define GL_PIXEL_MAP_S_TO_S                                           0x0C71
+#define GL_PIXEL_MAP_S_TO_S_SIZE                                      0x0CB1
+#define GL_PIXEL_MIN_FILTER_EXT                                       0x8332
+#define GL_PIXEL_MODE_BIT                                             0x00000020
+#define GL_PIXEL_PACK_BUFFER                                          0x88EB
+#define GL_PIXEL_PACK_BUFFER_ARB                                      0x88EB
+#define GL_PIXEL_PACK_BUFFER_BINDING                                  0x88ED
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB                              0x88ED
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT                              0x88ED
+#define GL_PIXEL_PACK_BUFFER_EXT                                      0x88EB
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX                                  0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX                                  0x85A4
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX                                  0x85A2
+#define GL_PIXEL_TEXTURE_SGIS                                         0x8353
+#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX                                0x8189
+#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX                                0x818A
+#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX                        0x8188
+#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX                           0x8187
+#define GL_PIXEL_TEX_GEN_MODE_SGIX                                    0x832B
+#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX                               0x8184
+#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX                                 0x8186
+#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX                                 0x8185
+#define GL_PIXEL_TEX_GEN_SGIX                                         0x8139
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX                             0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX                            0x813F
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX                                 0x8145
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX                                 0x8144
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX                                0x8143
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX                                 0x8142
+#define GL_PIXEL_TILE_HEIGHT_SGIX                                     0x8141
+#define GL_PIXEL_TILE_WIDTH_SGIX                                      0x8140
+#define GL_PIXEL_TRANSFORM_2D_EXT                                     0x8330
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT                              0x8338
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT                         0x8336
+#define GL_PIXEL_UNPACK_BUFFER                                        0x88EC
+#define GL_PIXEL_UNPACK_BUFFER_ARB                                    0x88EC
+#define GL_PIXEL_UNPACK_BUFFER_BINDING                                0x88EF
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB                            0x88EF
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT                            0x88EF
+#define GL_PIXEL_UNPACK_BUFFER_EXT                                    0x88EC
+#define GL_PN_TRIANGLES_ATI                                           0x87F0
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI                               0x87F3
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI                        0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI                     0x87F8
+#define GL_PN_TRIANGLES_POINT_MODE_ATI                                0x87F2
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI                          0x87F6
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI                         0x87F5
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI                         0x87F4
+#define GL_POINT                                                      0x1B00
+#define GL_POINTS                                                     0x0000
+#define GL_POINT_BIT                                                  0x00000002
+#define GL_POINT_DISTANCE_ATTENUATION                                 0x8129
+#define GL_POINT_DISTANCE_ATTENUATION_ARB                             0x8129
+#define GL_POINT_FADE_THRESHOLD_SIZE                                  0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB                              0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT                              0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS                             0x8128
+#define GL_POINT_SIZE                                                 0x0B11
+#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES                        0x8B9F
+#define GL_POINT_SIZE_ARRAY_OES                                       0x8B9C
+#define GL_POINT_SIZE_ARRAY_POINTER_OES                               0x898C
+#define GL_POINT_SIZE_ARRAY_STRIDE_OES                                0x898B
+#define GL_POINT_SIZE_ARRAY_TYPE_OES                                  0x898A
+#define GL_POINT_SIZE_GRANULARITY                                     0x0B13
+#define GL_POINT_SIZE_MAX                                             0x8127
+#define GL_POINT_SIZE_MAX_ARB                                         0x8127
+#define GL_POINT_SIZE_MAX_EXT                                         0x8127
+#define GL_POINT_SIZE_MAX_SGIS                                        0x8127
+#define GL_POINT_SIZE_MIN                                             0x8126
+#define GL_POINT_SIZE_MIN_ARB                                         0x8126
+#define GL_POINT_SIZE_MIN_EXT                                         0x8126
+#define GL_POINT_SIZE_MIN_SGIS                                        0x8126
+#define GL_POINT_SIZE_RANGE                                           0x0B12
+#define GL_POINT_SMOOTH                                               0x0B10
+#define GL_POINT_SMOOTH_HINT                                          0x0C51
+#define GL_POINT_SPRITE                                               0x8861
+#define GL_POINT_SPRITE_ARB                                           0x8861
+#define GL_POINT_SPRITE_COORD_ORIGIN                                  0x8CA0
+#define GL_POINT_SPRITE_NV                                            0x8861
+#define GL_POINT_SPRITE_R_MODE_NV                                     0x8863
+#define GL_POINT_TOKEN                                                0x0701
+#define GL_POLYGON                                                    0x0009
+#define GL_POLYGON_BIT                                                0x00000008
+#define GL_POLYGON_MODE                                               0x0B40
+#define GL_POLYGON_OFFSET_BIAS_EXT                                    0x8039
+#define GL_POLYGON_OFFSET_EXT                                         0x8037
+#define GL_POLYGON_OFFSET_FACTOR                                      0x8038
+#define GL_POLYGON_OFFSET_FACTOR_EXT                                  0x8038
+#define GL_POLYGON_OFFSET_FILL                                        0x8037
+#define GL_POLYGON_OFFSET_LINE                                        0x2A02
+#define GL_POLYGON_OFFSET_POINT                                       0x2A01
+#define GL_POLYGON_OFFSET_UNITS                                       0x2A00
+#define GL_POLYGON_SMOOTH                                             0x0B41
+#define GL_POLYGON_SMOOTH_HINT                                        0x0C53
+#define GL_POLYGON_STIPPLE                                            0x0B42
+#define GL_POLYGON_STIPPLE_BIT                                        0x00000010
+#define GL_POLYGON_TOKEN                                              0x0703
+#define GL_POSITION                                                   0x1203
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS                               0x80BB
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI                           0x80BB
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE                              0x80B7
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI                          0x80B7
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS                                0x80BA
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI                            0x80BA
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE                               0x80B6
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI                           0x80B6
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE                              0x80D2
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI                          0x80D2
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS                               0x80B9
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI                           0x80B9
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE                              0x80B5
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI                          0x80B5
+#define GL_POST_COLOR_MATRIX_RED_BIAS                                 0x80B8
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI                             0x80B8
+#define GL_POST_COLOR_MATRIX_RED_SCALE                                0x80B4
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI                            0x80B4
+#define GL_POST_CONVOLUTION_ALPHA_BIAS                                0x8023
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT                            0x8023
+#define GL_POST_CONVOLUTION_ALPHA_SCALE                               0x801F
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT                           0x801F
+#define GL_POST_CONVOLUTION_BLUE_BIAS                                 0x8022
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT                             0x8022
+#define GL_POST_CONVOLUTION_BLUE_SCALE                                0x801E
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT                            0x801E
+#define GL_POST_CONVOLUTION_COLOR_TABLE                               0x80D1
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI                           0x80D1
+#define GL_POST_CONVOLUTION_GREEN_BIAS                                0x8021
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT                            0x8021
+#define GL_POST_CONVOLUTION_GREEN_SCALE                               0x801D
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT                           0x801D
+#define GL_POST_CONVOLUTION_RED_BIAS                                  0x8020
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT                              0x8020
+#define GL_POST_CONVOLUTION_RED_SCALE                                 0x801C
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT                             0x801C
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP                        0x8162
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX                        0x817B
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX                              0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX                       0x817C
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX                             0x817A
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI                               0x1A1F8
+#define GL_PRESENT_DURATION_NV                                        0x8E2B
+#define GL_PRESENT_TIME_NV                                            0x8E2A
+#define GL_PRESERVE_ATI                                               0x8762
+#define GL_PREVIOUS                                                   0x8578
+#define GL_PREVIOUS_ARB                                               0x8578
+#define GL_PREVIOUS_EXT                                               0x8578
+#define GL_PREVIOUS_TEXTURE_INPUT_NV                                  0x86E4
+#define GL_PRIMARY_COLOR                                              0x8577
+#define GL_PRIMARY_COLOR_ARB                                          0x8577
+#define GL_PRIMARY_COLOR_EXT                                          0x8577
+#define GL_PRIMARY_COLOR_NV                                           0x852C
+#define GL_PRIMITIVES_GENERATED                                       0x8C87
+#define GL_PRIMITIVES_GENERATED_EXT                                   0x8C87
+#define GL_PRIMITIVES_GENERATED_NV                                    0x8C87
+#define GL_PRIMITIVE_ID_NV                                            0x8C7C
+#define GL_PRIMITIVE_RESTART                                          0x8F9D
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX                              0x8D69
+#define GL_PRIMITIVE_RESTART_INDEX                                    0x8F9E
+#define GL_PRIMITIVE_RESTART_INDEX_NV                                 0x8559
+#define GL_PRIMITIVE_RESTART_NV                                       0x8558
+#define GL_PROGRAM                                                    0x82E2
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB                              0x88B0
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB                               0x8805
+#define GL_PROGRAM_ATTRIBS_ARB                                        0x88AC
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV                               0x8906
+#define GL_PROGRAM_BINARY_FORMATS                                     0x87FF
+#define GL_PROGRAM_BINARY_FORMATS_OES                                 0x87FF
+#define GL_PROGRAM_BINARY_LENGTH                                      0x8741
+#define GL_PROGRAM_BINARY_LENGTH_OES                                  0x8741
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT                            0x8257
+#define GL_PROGRAM_BINDING_ARB                                        0x8677
+#define GL_PROGRAM_ERROR_POSITION_ARB                                 0x864B
+#define GL_PROGRAM_ERROR_POSITION_NV                                  0x864B
+#define GL_PROGRAM_ERROR_STRING_ARB                                   0x8874
+#define GL_PROGRAM_ERROR_STRING_NV                                    0x8874
+#define GL_PROGRAM_FORMAT_ARB                                         0x8876
+#define GL_PROGRAM_FORMAT_ASCII_ARB                                   0x8875
+#define GL_PROGRAM_INPUT                                              0x92E3
+#define GL_PROGRAM_INSTRUCTIONS_ARB                                   0x88A0
+#define GL_PROGRAM_LENGTH_ARB                                         0x8627
+#define GL_PROGRAM_LENGTH_NV                                          0x8627
+#define GL_PROGRAM_MATRIX_EXT                                         0x8E2D
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT                             0x8E2F
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB                       0x88B2
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB                        0x8808
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB                                 0x88AE
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB                            0x88A2
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB                              0x88AA
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB                             0x88A6
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB                        0x880A
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB                        0x8809
+#define GL_PROGRAM_OBJECT_ARB                                         0x8B40
+#define GL_PROGRAM_OBJECT_EXT                                         0x8B40
+#define GL_PROGRAM_OUTPUT                                             0x92E4
+#define GL_PROGRAM_PARAMETERS_ARB                                     0x88A8
+#define GL_PROGRAM_PARAMETER_NV                                       0x8644
+#define GL_PROGRAM_PIPELINE                                           0x82E4
+#define GL_PROGRAM_PIPELINE_BINDING                                   0x825A
+#define GL_PROGRAM_PIPELINE_BINDING_EXT                               0x825A
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT                                0x8A4F
+#define GL_PROGRAM_POINT_SIZE                                         0x8642
+#define GL_PROGRAM_POINT_SIZE_ARB                                     0x8642
+#define GL_PROGRAM_POINT_SIZE_EXT                                     0x8642
+#define GL_PROGRAM_RESIDENT_NV                                        0x8647
+#define GL_PROGRAM_RESULT_COMPONENTS_NV                               0x8907
+#define GL_PROGRAM_SEPARABLE                                          0x8258
+#define GL_PROGRAM_SEPARABLE_EXT                                      0x8258
+#define GL_PROGRAM_STRING_ARB                                         0x8628
+#define GL_PROGRAM_STRING_NV                                          0x8628
+#define GL_PROGRAM_TARGET_NV                                          0x8646
+#define GL_PROGRAM_TEMPORARIES_ARB                                    0x88A4
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB                               0x8807
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB                               0x8806
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB                            0x88B6
+#define GL_PROJECTION                                                 0x1701
+#define GL_PROJECTION_MATRIX                                          0x0BA7
+#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES                    0x898E
+#define GL_PROJECTION_STACK_DEPTH                                     0x0BA4
+#define GL_PROJECTIVE_2D_NV                                           0x9093
+#define GL_PROJECTIVE_3D_NV                                           0x9095
+#define GL_PROVOKING_VERTEX                                           0x8E4F
+#define GL_PROVOKING_VERTEX_EXT                                       0x8E4F
+#define GL_PROXY_COLOR_TABLE                                          0x80D3
+#define GL_PROXY_COLOR_TABLE_SGI                                      0x80D3
+#define GL_PROXY_HISTOGRAM                                            0x8025
+#define GL_PROXY_HISTOGRAM_EXT                                        0x8025
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE                        0x80D5
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI                    0x80D5
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE                         0x80D4
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI                     0x80D4
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP                  0x8163
+#define GL_PROXY_TEXTURE_1D                                           0x8063
+#define GL_PROXY_TEXTURE_1D_ARRAY                                     0x8C19
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT                                 0x8C19
+#define GL_PROXY_TEXTURE_1D_EXT                                       0x8063
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX                               0x875B
+#define GL_PROXY_TEXTURE_2D                                           0x8064
+#define GL_PROXY_TEXTURE_2D_ARRAY                                     0x8C1B
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT                                 0x8C1B
+#define GL_PROXY_TEXTURE_2D_EXT                                       0x8064
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE                               0x9101
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY                         0x9103
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX                               0x875C
+#define GL_PROXY_TEXTURE_3D                                           0x8070
+#define GL_PROXY_TEXTURE_3D_EXT                                       0x8070
+#define GL_PROXY_TEXTURE_4D_SGIS                                      0x8135
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI                              0x80BD
+#define GL_PROXY_TEXTURE_CUBE_MAP                                     0x851B
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB                                 0x851B
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY                               0x900B
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB                           0x900B
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT                                 0x851B
+#define GL_PROXY_TEXTURE_RECTANGLE                                    0x84F7
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB                                0x84F7
+#define GL_PROXY_TEXTURE_RECTANGLE_NV                                 0x84F7
+#define GL_PURGEABLE_APPLE                                            0x8A1D
+#define GL_Q                                                          0x2003
+#define GL_QUADRATIC_ATTENUATION                                      0x1209
+#define GL_QUADRATIC_CURVE_TO_NV                                      0x0A
+#define GL_QUADS                                                      0x0007
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION                   0x8E4C
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT               0x8E4C
+#define GL_QUAD_ALPHA4_SGIS                                           0x811E
+#define GL_QUAD_ALPHA8_SGIS                                           0x811F
+#define GL_QUAD_INTENSITY4_SGIS                                       0x8122
+#define GL_QUAD_INTENSITY8_SGIS                                       0x8123
+#define GL_QUAD_LUMINANCE4_SGIS                                       0x8120
+#define GL_QUAD_LUMINANCE8_SGIS                                       0x8121
+#define GL_QUAD_MESH_SUN                                              0x8614
+#define GL_QUAD_STRIP                                                 0x0008
+#define GL_QUAD_TEXTURE_SELECT_SGIS                                   0x8125
+#define GL_QUARTER_BIT_ATI                                            0x00000010
+#define GL_QUERY                                                      0x82E3
+#define GL_QUERY_BUFFER_AMD                                           0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD                                   0x9193
+#define GL_QUERY_BY_REGION_NO_WAIT                                    0x8E16
+#define GL_QUERY_BY_REGION_NO_WAIT_NV                                 0x8E16
+#define GL_QUERY_BY_REGION_WAIT                                       0x8E15
+#define GL_QUERY_BY_REGION_WAIT_NV                                    0x8E15
+#define GL_QUERY_COUNTER_BITS                                         0x8864
+#define GL_QUERY_COUNTER_BITS_ARB                                     0x8864
+#define GL_QUERY_NO_WAIT                                              0x8E14
+#define GL_QUERY_NO_WAIT_NV                                           0x8E14
+#define GL_QUERY_OBJECT_AMD                                           0x9153
+#define GL_QUERY_OBJECT_EXT                                           0x9153
+#define GL_QUERY_RESULT                                               0x8866
+#define GL_QUERY_RESULT_ARB                                           0x8866
+#define GL_QUERY_RESULT_AVAILABLE                                     0x8867
+#define GL_QUERY_RESULT_AVAILABLE_ARB                                 0x8867
+#define GL_QUERY_RESULT_AVAILABLE_EXT                                 0x8867
+#define GL_QUERY_RESULT_EXT                                           0x8866
+#define GL_QUERY_RESULT_NO_WAIT_AMD                                   0x9194
+#define GL_QUERY_WAIT                                                 0x8E13
+#define GL_QUERY_WAIT_NV                                              0x8E13
+#define GL_R                                                          0x2002
+#define GL_R11F_G11F_B10F                                             0x8C3A
+#define GL_R11F_G11F_B10F_EXT                                         0x8C3A
+#define GL_R16                                                        0x822A
+#define GL_R16F                                                       0x822D
+#define GL_R16F_EXT                                                   0x822D
+#define GL_R16I                                                       0x8233
+#define GL_R16UI                                                      0x8234
+#define GL_R16_SNORM                                                  0x8F98
+#define GL_R1UI_C3F_V3F_SUN                                           0x85C6
+#define GL_R1UI_C4F_N3F_V3F_SUN                                       0x85C8
+#define GL_R1UI_C4UB_V3F_SUN                                          0x85C5
+#define GL_R1UI_N3F_V3F_SUN                                           0x85C7
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN                                   0x85CB
+#define GL_R1UI_T2F_N3F_V3F_SUN                                       0x85CA
+#define GL_R1UI_T2F_V3F_SUN                                           0x85C9
+#define GL_R1UI_V3F_SUN                                               0x85C4
+#define GL_R32F                                                       0x822E
+#define GL_R32I                                                       0x8235
+#define GL_R32UI                                                      0x8236
+#define GL_R3_G3_B2                                                   0x2A10
+#define GL_R8                                                         0x8229
+#define GL_R8I                                                        0x8231
+#define GL_R8UI                                                       0x8232
+#define GL_R8_EXT                                                     0x8229
+#define GL_R8_SNORM                                                   0x8F94
+#define GL_RASTERIZER_DISCARD                                         0x8C89
+#define GL_RASTERIZER_DISCARD_EXT                                     0x8C89
+#define GL_RASTERIZER_DISCARD_NV                                      0x8C89
+#define GL_RASTER_POSITION_UNCLIPPED_IBM                              0x19262
+#define GL_READ_BUFFER                                                0x0C02
+#define GL_READ_BUFFER_EXT                                            0x0C02
+#define GL_READ_BUFFER_NV                                             0x0C02
+#define GL_READ_FRAMEBUFFER                                           0x8CA8
+#define GL_READ_FRAMEBUFFER_ANGLE                                     0x8CA8
+#define GL_READ_FRAMEBUFFER_BINDING                                   0x8CAA
+#define GL_READ_FRAMEBUFFER_BINDING_EXT                               0x8CAA
+#define GL_READ_FRAMEBUFFER_EXT                                       0x8CA8
+#define GL_READ_ONLY                                                  0x88B8
+#define GL_READ_ONLY_ARB                                              0x88B8
+#define GL_READ_PIXELS                                                0x828C
+#define GL_READ_PIXELS_FORMAT                                         0x828D
+#define GL_READ_PIXELS_TYPE                                           0x828E
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV                            0x887B
+#define GL_READ_PIXEL_DATA_RANGE_NV                                   0x8879
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV                           0x887D
+#define GL_READ_WRITE                                                 0x88BA
+#define GL_READ_WRITE_ARB                                             0x88BA
+#define GL_RECIP_ADD_SIGNED_ALPHA_IMG                                 0x8C05
+#define GL_RECLAIM_MEMORY_HINT_PGI                                    0x1A1FE
+#define GL_RECT_NV                                                    0xF6
+#define GL_RED                                                        0x1903
+#define GL_REDUCE                                                     0x8016
+#define GL_REDUCE_EXT                                                 0x8016
+#define GL_RED_BIAS                                                   0x0D15
+#define GL_RED_BITS                                                   0x0D52
+#define GL_RED_BIT_ATI                                                0x00000001
+#define GL_RED_EXT                                                    0x1903
+#define GL_RED_INTEGER                                                0x8D94
+#define GL_RED_INTEGER_EXT                                            0x8D94
+#define GL_RED_MAX_CLAMP_INGR                                         0x8564
+#define GL_RED_MIN_CLAMP_INGR                                         0x8560
+#define GL_RED_SCALE                                                  0x0D14
+#define GL_RED_SNORM                                                  0x8F90
+#define GL_REFERENCED_BY_COMPUTE_SHADER                               0x930B
+#define GL_REFERENCED_BY_FRAGMENT_SHADER                              0x930A
+#define GL_REFERENCED_BY_GEOMETRY_SHADER                              0x9309
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER                          0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER                       0x9308
+#define GL_REFERENCED_BY_VERTEX_SHADER                                0x9306
+#define GL_REFERENCE_PLANE_EQUATION_SGIX                              0x817E
+#define GL_REFERENCE_PLANE_SGIX                                       0x817D
+#define GL_REFLECTION_MAP                                             0x8512
+#define GL_REFLECTION_MAP_ARB                                         0x8512
+#define GL_REFLECTION_MAP_EXT                                         0x8512
+#define GL_REFLECTION_MAP_NV                                          0x8512
+#define GL_REFLECTION_MAP_OES                                         0x8512
+#define GL_REGISTER_COMBINERS_NV                                      0x8522
+#define GL_REG_0_ATI                                                  0x8921
+#define GL_REG_10_ATI                                                 0x892B
+#define GL_REG_11_ATI                                                 0x892C
+#define GL_REG_12_ATI                                                 0x892D
+#define GL_REG_13_ATI                                                 0x892E
+#define GL_REG_14_ATI                                                 0x892F
+#define GL_REG_15_ATI                                                 0x8930
+#define GL_REG_16_ATI                                                 0x8931
+#define GL_REG_17_ATI                                                 0x8932
+#define GL_REG_18_ATI                                                 0x8933
+#define GL_REG_19_ATI                                                 0x8934
+#define GL_REG_1_ATI                                                  0x8922
+#define GL_REG_20_ATI                                                 0x8935
+#define GL_REG_21_ATI                                                 0x8936
+#define GL_REG_22_ATI                                                 0x8937
+#define GL_REG_23_ATI                                                 0x8938
+#define GL_REG_24_ATI                                                 0x8939
+#define GL_REG_25_ATI                                                 0x893A
+#define GL_REG_26_ATI                                                 0x893B
+#define GL_REG_27_ATI                                                 0x893C
+#define GL_REG_28_ATI                                                 0x893D
+#define GL_REG_29_ATI                                                 0x893E
+#define GL_REG_2_ATI                                                  0x8923
+#define GL_REG_30_ATI                                                 0x893F
+#define GL_REG_31_ATI                                                 0x8940
+#define GL_REG_3_ATI                                                  0x8924
+#define GL_REG_4_ATI                                                  0x8925
+#define GL_REG_5_ATI                                                  0x8926
+#define GL_REG_6_ATI                                                  0x8927
+#define GL_REG_7_ATI                                                  0x8928
+#define GL_REG_8_ATI                                                  0x8929
+#define GL_REG_9_ATI                                                  0x892A
+#define GL_RELATIVE_ARC_TO_NV                                         0xFF
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV                                 0x0D
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV                             0x07
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV                               0x17
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV                                0x19
+#define GL_RELATIVE_LINE_TO_NV                                        0x05
+#define GL_RELATIVE_MOVE_TO_NV                                        0x03
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV                             0x0B
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV                               0x13
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV                                0x15
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV                          0x11
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV                      0x0F
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV                               0x09
+#define GL_RELEASED_APPLE                                             0x8A19
+#define GL_RENDER                                                     0x1C00
+#define GL_RENDERBUFFER                                               0x8D41
+#define GL_RENDERBUFFER_ALPHA_SIZE                                    0x8D53
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT                                0x8D53
+#define GL_RENDERBUFFER_ALPHA_SIZE_OES                                0x8D53
+#define GL_RENDERBUFFER_BINDING                                       0x8CA7
+#define GL_RENDERBUFFER_BINDING_ANGLE                                 0x8CA7
+#define GL_RENDERBUFFER_BINDING_EXT                                   0x8CA7
+#define GL_RENDERBUFFER_BINDING_OES                                   0x8CA7
+#define GL_RENDERBUFFER_BLUE_SIZE                                     0x8D52
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT                                 0x8D52
+#define GL_RENDERBUFFER_BLUE_SIZE_OES                                 0x8D52
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV                              0x8E10
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV                           0x8CAB
+#define GL_RENDERBUFFER_DEPTH_SIZE                                    0x8D54
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT                                0x8D54
+#define GL_RENDERBUFFER_DEPTH_SIZE_OES                                0x8D54
+#define GL_RENDERBUFFER_EXT                                           0x8D41
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI                               0x87FD
+#define GL_RENDERBUFFER_GREEN_SIZE                                    0x8D51
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT                                0x8D51
+#define GL_RENDERBUFFER_GREEN_SIZE_OES                                0x8D51
+#define GL_RENDERBUFFER_HEIGHT                                        0x8D43
+#define GL_RENDERBUFFER_HEIGHT_EXT                                    0x8D43
+#define GL_RENDERBUFFER_HEIGHT_OES                                    0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT                               0x8D44
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT                           0x8D44
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES                           0x8D44
+#define GL_RENDERBUFFER_OES                                           0x8D41
+#define GL_RENDERBUFFER_RED_SIZE                                      0x8D50
+#define GL_RENDERBUFFER_RED_SIZE_EXT                                  0x8D50
+#define GL_RENDERBUFFER_RED_SIZE_OES                                  0x8D50
+#define GL_RENDERBUFFER_SAMPLES                                       0x8CAB
+#define GL_RENDERBUFFER_SAMPLES_ANGLE                                 0x8CAB
+#define GL_RENDERBUFFER_SAMPLES_EXT                                   0x8CAB
+#define GL_RENDERBUFFER_SAMPLES_IMG                                   0x9133
+#define GL_RENDERBUFFER_STENCIL_SIZE                                  0x8D55
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT                              0x8D55
+#define GL_RENDERBUFFER_STENCIL_SIZE_OES                              0x8D55
+#define GL_RENDERBUFFER_WIDTH                                         0x8D42
+#define GL_RENDERBUFFER_WIDTH_EXT                                     0x8D42
+#define GL_RENDERBUFFER_WIDTH_OES                                     0x8D42
+#define GL_RENDERER                                                   0x1F01
+#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM                          0x8FB3
+#define GL_RENDER_MODE                                                0x0C40
+#define GL_REPEAT                                                     0x2901
+#define GL_REPLACE                                                    0x1E01
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN                         0x85C3
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN                          0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_SUN                                 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN                            0x85C1
+#define GL_REPLACEMENT_CODE_SUN                                       0x81D8
+#define GL_REPLACE_EXT                                                0x8062
+#define GL_REPLACE_MIDDLE_SUN                                         0x0002
+#define GL_REPLACE_OLDEST_SUN                                         0x0003
+#define GL_REPLACE_VALUE_AMD                                          0x874B
+#define GL_REPLICATE_BORDER                                           0x8153
+#define GL_REPLICATE_BORDER_HP                                        0x8153
+#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES                           0x8D68
+#define GL_RESAMPLE_AVERAGE_OML                                       0x8988
+#define GL_RESAMPLE_DECIMATE_OML                                      0x8989
+#define GL_RESAMPLE_DECIMATE_SGIX                                     0x8430
+#define GL_RESAMPLE_REPLICATE_OML                                     0x8986
+#define GL_RESAMPLE_REPLICATE_SGIX                                    0x842E
+#define GL_RESAMPLE_ZERO_FILL_OML                                     0x8987
+#define GL_RESAMPLE_ZERO_FILL_SGIX                                    0x842F
+#define GL_RESCALE_NORMAL                                             0x803A
+#define GL_RESCALE_NORMAL_EXT                                         0x803A
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB                            0x8256
+#define GL_RESTART_PATH_NV                                            0xF0
+#define GL_RESTART_SUN                                                0x0001
+#define GL_RETAINED_APPLE                                             0x8A1B
+#define GL_RETURN                                                     0x0102
+#define GL_RG                                                         0x8227
+#define GL_RG16                                                       0x822C
+#define GL_RG16F                                                      0x822F
+#define GL_RG16F_EXT                                                  0x822F
+#define GL_RG16I                                                      0x8239
+#define GL_RG16UI                                                     0x823A
+#define GL_RG16_SNORM                                                 0x8F99
+#define GL_RG32F                                                      0x8230
+#define GL_RG32I                                                      0x823B
+#define GL_RG32UI                                                     0x823C
+#define GL_RG8                                                        0x822B
+#define GL_RG8I                                                       0x8237
+#define GL_RG8UI                                                      0x8238
+#define GL_RG8_EXT                                                    0x822B
+#define GL_RG8_SNORM                                                  0x8F95
+#define GL_RGB                                                        0x1907
+#define GL_RGB10                                                      0x8052
+#define GL_RGB10_A2                                                   0x8059
+#define GL_RGB10_A2UI                                                 0x906F
+#define GL_RGB10_A2_EXT                                               0x8059
+#define GL_RGB10_EXT                                                  0x8052
+#define GL_RGB12                                                      0x8053
+#define GL_RGB12_EXT                                                  0x8053
+#define GL_RGB16                                                      0x8054
+#define GL_RGB16F                                                     0x881B
+#define GL_RGB16F_ARB                                                 0x881B
+#define GL_RGB16F_EXT                                                 0x881B
+#define GL_RGB16I                                                     0x8D89
+#define GL_RGB16I_EXT                                                 0x8D89
+#define GL_RGB16UI                                                    0x8D77
+#define GL_RGB16UI_EXT                                                0x8D77
+#define GL_RGB16_EXT                                                  0x8054
+#define GL_RGB16_SNORM                                                0x8F9A
+#define GL_RGB2_EXT                                                   0x804E
+#define GL_RGB32F                                                     0x8815
+#define GL_RGB32F_ARB                                                 0x8815
+#define GL_RGB32I                                                     0x8D83
+#define GL_RGB32I_EXT                                                 0x8D83
+#define GL_RGB32UI                                                    0x8D71
+#define GL_RGB32UI_EXT                                                0x8D71
+#define GL_RGB4                                                       0x804F
+#define GL_RGB4_EXT                                                   0x804F
+#define GL_RGB4_S3TC                                                  0x83A1
+#define GL_RGB5                                                       0x8050
+#define GL_RGB565                                                     0x8D62
+#define GL_RGB565_OES                                                 0x8D62
+#define GL_RGB5_A1                                                    0x8057
+#define GL_RGB5_A1_EXT                                                0x8057
+#define GL_RGB5_A1_OES                                                0x8057
+#define GL_RGB5_EXT                                                   0x8050
+#define GL_RGB8                                                       0x8051
+#define GL_RGB8I                                                      0x8D8F
+#define GL_RGB8I_EXT                                                  0x8D8F
+#define GL_RGB8UI                                                     0x8D7D
+#define GL_RGB8UI_EXT                                                 0x8D7D
+#define GL_RGB8_EXT                                                   0x8051
+#define GL_RGB8_SNORM                                                 0x8F96
+#define GL_RGB9_E5                                                    0x8C3D
+#define GL_RGB9_E5_EXT                                                0x8C3D
+#define GL_RGBA                                                       0x1908
+#define GL_RGBA12                                                     0x805A
+#define GL_RGBA12_EXT                                                 0x805A
+#define GL_RGBA16                                                     0x805B
+#define GL_RGBA16F                                                    0x881A
+#define GL_RGBA16F_ARB                                                0x881A
+#define GL_RGBA16F_EXT                                                0x881A
+#define GL_RGBA16I                                                    0x8D88
+#define GL_RGBA16I_EXT                                                0x8D88
+#define GL_RGBA16UI                                                   0x8D76
+#define GL_RGBA16UI_EXT                                               0x8D76
+#define GL_RGBA16_EXT                                                 0x805B
+#define GL_RGBA16_SNORM                                               0x8F9B
+#define GL_RGBA2                                                      0x8055
+#define GL_RGBA2_EXT                                                  0x8055
+#define GL_RGBA32F                                                    0x8814
+#define GL_RGBA32F_ARB                                                0x8814
+#define GL_RGBA32I                                                    0x8D82
+#define GL_RGBA32I_EXT                                                0x8D82
+#define GL_RGBA32UI                                                   0x8D70
+#define GL_RGBA32UI_EXT                                               0x8D70
+#define GL_RGBA4                                                      0x8056
+#define GL_RGBA4_DXT5_S3TC                                            0x83A5
+#define GL_RGBA4_EXT                                                  0x8056
+#define GL_RGBA4_OES                                                  0x8056
+#define GL_RGBA4_S3TC                                                 0x83A3
+#define GL_RGBA8                                                      0x8058
+#define GL_RGBA8I                                                     0x8D8E
+#define GL_RGBA8I_EXT                                                 0x8D8E
+#define GL_RGBA8UI                                                    0x8D7C
+#define GL_RGBA8UI_EXT                                                0x8D7C
+#define GL_RGBA8_EXT                                                  0x8058
+#define GL_RGBA8_SNORM                                                0x8F97
+#define GL_RGBA_DXT5_S3TC                                             0x83A4
+#define GL_RGBA_FLOAT16_APPLE                                         0x881A
+#define GL_RGBA_FLOAT16_ATI                                           0x881A
+#define GL_RGBA_FLOAT32_APPLE                                         0x8814
+#define GL_RGBA_FLOAT32_ATI                                           0x8814
+#define GL_RGBA_FLOAT_MODE_ARB                                        0x8820
+#define GL_RGBA_FLOAT_MODE_ATI                                        0x8820
+#define GL_RGBA_INTEGER                                               0x8D99
+#define GL_RGBA_INTEGER_EXT                                           0x8D99
+#define GL_RGBA_INTEGER_MODE_EXT                                      0x8D9E
+#define GL_RGBA_MODE                                                  0x0C31
+#define GL_RGBA_S3TC                                                  0x83A2
+#define GL_RGBA_SIGNED_COMPONENTS_EXT                                 0x8C3C
+#define GL_RGBA_SNORM                                                 0x8F93
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV                       0x86D9
+#define GL_RGB_422_APPLE                                              0x8A1F
+#define GL_RGB_FLOAT16_APPLE                                          0x881B
+#define GL_RGB_FLOAT16_ATI                                            0x881B
+#define GL_RGB_FLOAT32_APPLE                                          0x8815
+#define GL_RGB_FLOAT32_ATI                                            0x8815
+#define GL_RGB_INTEGER                                                0x8D98
+#define GL_RGB_INTEGER_EXT                                            0x8D98
+#define GL_RGB_S3TC                                                   0x83A0
+#define GL_RGB_SCALE                                                  0x8573
+#define GL_RGB_SCALE_ARB                                              0x8573
+#define GL_RGB_SCALE_EXT                                              0x8573
+#define GL_RGB_SNORM                                                  0x8F92
+#define GL_RG_EXT                                                     0x8227
+#define GL_RG_INTEGER                                                 0x8228
+#define GL_RG_SNORM                                                   0x8F91
+#define GL_RIGHT                                                      0x0407
+#define GL_ROUND_NV                                                   0x90A4
+#define GL_S                                                          0x2000
+#define GL_SAMPLER                                                    0x82E6
+#define GL_SAMPLER_1D                                                 0x8B5D
+#define GL_SAMPLER_1D_ARB                                             0x8B5D
+#define GL_SAMPLER_1D_ARRAY                                           0x8DC0
+#define GL_SAMPLER_1D_ARRAY_EXT                                       0x8DC0
+#define GL_SAMPLER_1D_ARRAY_SHADOW                                    0x8DC3
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT                                0x8DC3
+#define GL_SAMPLER_1D_SHADOW                                          0x8B61
+#define GL_SAMPLER_1D_SHADOW_ARB                                      0x8B61
+#define GL_SAMPLER_2D                                                 0x8B5E
+#define GL_SAMPLER_2D_ARB                                             0x8B5E
+#define GL_SAMPLER_2D_ARRAY                                           0x8DC1
+#define GL_SAMPLER_2D_ARRAY_EXT                                       0x8DC1
+#define GL_SAMPLER_2D_ARRAY_SHADOW                                    0x8DC4
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT                                0x8DC4
+#define GL_SAMPLER_2D_MULTISAMPLE                                     0x9108
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY                               0x910B
+#define GL_SAMPLER_2D_RECT                                            0x8B63
+#define GL_SAMPLER_2D_RECT_ARB                                        0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW                                     0x8B64
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB                                 0x8B64
+#define GL_SAMPLER_2D_SHADOW                                          0x8B62
+#define GL_SAMPLER_2D_SHADOW_ARB                                      0x8B62
+#define GL_SAMPLER_2D_SHADOW_EXT                                      0x8B62
+#define GL_SAMPLER_3D                                                 0x8B5F
+#define GL_SAMPLER_3D_ARB                                             0x8B5F
+#define GL_SAMPLER_3D_OES                                             0x8B5F
+#define GL_SAMPLER_BINDING                                            0x8919
+#define GL_SAMPLER_BUFFER                                             0x8DC2
+#define GL_SAMPLER_BUFFER_AMD                                         0x9001
+#define GL_SAMPLER_BUFFER_EXT                                         0x8DC2
+#define GL_SAMPLER_CUBE                                               0x8B60
+#define GL_SAMPLER_CUBE_ARB                                           0x8B60
+#define GL_SAMPLER_CUBE_MAP_ARRAY                                     0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB                                 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW                              0x900D
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB                          0x900D
+#define GL_SAMPLER_CUBE_SHADOW                                        0x8DC5
+#define GL_SAMPLER_CUBE_SHADOW_EXT                                    0x8DC5
+#define GL_SAMPLER_EXTERNAL_OES                                       0x8D66
+#define GL_SAMPLER_OBJECT_AMD                                         0x9155
+#define GL_SAMPLER_RENDERBUFFER_NV                                    0x8E56
+#define GL_SAMPLES                                                    0x80A9
+#define GL_SAMPLES_3DFX                                               0x86B4
+#define GL_SAMPLES_ARB                                                0x80A9
+#define GL_SAMPLES_EXT                                                0x80A9
+#define GL_SAMPLES_PASSED                                             0x8914
+#define GL_SAMPLES_PASSED_ARB                                         0x8914
+#define GL_SAMPLES_SGIS                                               0x80A9
+#define GL_SAMPLE_ALPHA_TO_COVERAGE                                   0x809E
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB                               0x809E
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT                                   0x809E
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS                                  0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE                                        0x809F
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB                                    0x809F
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT                                    0x809F
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS                                   0x809F
+#define GL_SAMPLE_BUFFERS                                             0x80A8
+#define GL_SAMPLE_BUFFERS_3DFX                                        0x86B3
+#define GL_SAMPLE_BUFFERS_ARB                                         0x80A8
+#define GL_SAMPLE_BUFFERS_EXT                                         0x80A8
+#define GL_SAMPLE_BUFFERS_SGIS                                        0x80A8
+#define GL_SAMPLE_COVERAGE                                            0x80A0
+#define GL_SAMPLE_COVERAGE_ARB                                        0x80A0
+#define GL_SAMPLE_COVERAGE_INVERT                                     0x80AB
+#define GL_SAMPLE_COVERAGE_INVERT_ARB                                 0x80AB
+#define GL_SAMPLE_COVERAGE_VALUE                                      0x80AA
+#define GL_SAMPLE_COVERAGE_VALUE_ARB                                  0x80AA
+#define GL_SAMPLE_MASK                                                0x8E51
+#define GL_SAMPLE_MASK_EXT                                            0x80A0
+#define GL_SAMPLE_MASK_INVERT_EXT                                     0x80AB
+#define GL_SAMPLE_MASK_INVERT_SGIS                                    0x80AB
+#define GL_SAMPLE_MASK_NV                                             0x8E51
+#define GL_SAMPLE_MASK_SGIS                                           0x80A0
+#define GL_SAMPLE_MASK_VALUE                                          0x8E52
+#define GL_SAMPLE_MASK_VALUE_EXT                                      0x80AA
+#define GL_SAMPLE_MASK_VALUE_NV                                       0x8E52
+#define GL_SAMPLE_MASK_VALUE_SGIS                                     0x80AA
+#define GL_SAMPLE_PATTERN_EXT                                         0x80AC
+#define GL_SAMPLE_PATTERN_SGIS                                        0x80AC
+#define GL_SAMPLE_POSITION                                            0x8E50
+#define GL_SAMPLE_POSITION_NV                                         0x8E50
+#define GL_SAMPLE_SHADING                                             0x8C36
+#define GL_SAMPLE_SHADING_ARB                                         0x8C36
+#define GL_SATURATE_BIT_ATI                                           0x00000040
+#define GL_SCALAR_EXT                                                 0x87BE
+#define GL_SCALEBIAS_HINT_SGIX                                        0x8322
+#define GL_SCALED_RESOLVE_FASTEST_EXT                                 0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT                                  0x90BB
+#define GL_SCALE_BY_FOUR_NV                                           0x853F
+#define GL_SCALE_BY_ONE_HALF_NV                                       0x8540
+#define GL_SCALE_BY_TWO_NV                                            0x853E
+#define GL_SCISSOR_BIT                                                0x00080000
+#define GL_SCISSOR_BOX                                                0x0C10
+#define GL_SCISSOR_TEST                                               0x0C11
+#define GL_SCREEN_COORDINATES_REND                                    0x8490
+#define GL_SECONDARY_COLOR_ARRAY                                      0x845E
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV                           0x8F27
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING                       0x889C
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB                   0x889C
+#define GL_SECONDARY_COLOR_ARRAY_EXT                                  0x845E
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV                            0x8F31
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM                             103077
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM                      103087
+#define GL_SECONDARY_COLOR_ARRAY_POINTER                              0x845D
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT                          0x845D
+#define GL_SECONDARY_COLOR_ARRAY_SIZE                                 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT                             0x845A
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE                               0x845C
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT                           0x845C
+#define GL_SECONDARY_COLOR_ARRAY_TYPE                                 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT                             0x845B
+#define GL_SECONDARY_COLOR_NV                                         0x852D
+#define GL_SECONDARY_INTERPOLATOR_ATI                                 0x896D
+#define GL_SELECT                                                     0x1C02
+#define GL_SELECTION_BUFFER_POINTER                                   0x0DF3
+#define GL_SELECTION_BUFFER_SIZE                                      0x0DF4
+#define GL_SEPARABLE_2D                                               0x8012
+#define GL_SEPARABLE_2D_EXT                                           0x8012
+#define GL_SEPARATE_ATTRIBS                                           0x8C8D
+#define GL_SEPARATE_ATTRIBS_EXT                                       0x8C8D
+#define GL_SEPARATE_ATTRIBS_NV                                        0x8C8D
+#define GL_SEPARATE_SPECULAR_COLOR                                    0x81FA
+#define GL_SEPARATE_SPECULAR_COLOR_EXT                                0x81FA
+#define GL_SET                                                        0x150F
+#define GL_SET_AMD                                                    0x874A
+#define GL_SGX_BINARY_IMG                                             0x8C0A
+#define GL_SGX_PROGRAM_BINARY_IMG                                     0x9130
+#define GL_SHADER                                                     0x82E1
+#define GL_SHADER_BINARY_DMP                                          0x9250
+#define GL_SHADER_BINARY_FORMATS                                      0x8DF8
+#define GL_SHADER_BINARY_VIV                                          0x8FC4
+#define GL_SHADER_COMPILER                                            0x8DFA
+#define GL_SHADER_CONSISTENT_NV                                       0x86DD
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV                        0x00000010
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT                            0x00000020
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT                        0x00000020
+#define GL_SHADER_IMAGE_ATOMIC                                        0x82A6
+#define GL_SHADER_IMAGE_LOAD                                          0x82A4
+#define GL_SHADER_IMAGE_STORE                                         0x82A5
+#define GL_SHADER_INCLUDE_ARB                                         0x8DAE
+#define GL_SHADER_OBJECT_ARB                                          0x8B48
+#define GL_SHADER_OBJECT_EXT                                          0x8B48
+#define GL_SHADER_OPERATION_NV                                        0x86DF
+#define GL_SHADER_SOURCE_LENGTH                                       0x8B88
+#define GL_SHADER_STORAGE_BARRIER_BIT                                 0x2000
+#define GL_SHADER_STORAGE_BLOCK                                       0x92E6
+#define GL_SHADER_STORAGE_BUFFER                                      0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING                              0x90D3
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT                     0x90DF
+#define GL_SHADER_STORAGE_BUFFER_SIZE                                 0x90D5
+#define GL_SHADER_STORAGE_BUFFER_START                                0x90D4
+#define GL_SHADER_TYPE                                                0x8B4F
+#define GL_SHADE_MODEL                                                0x0B54
+#define GL_SHADING_LANGUAGE_VERSION                                   0x8B8C
+#define GL_SHADING_LANGUAGE_VERSION_ARB                               0x8B8C
+#define GL_SHADOW_AMBIENT_SGIX                                        0x80BF
+#define GL_SHADOW_ATTENUATION_EXT                                     0x834E
+#define GL_SHARED_TEXTURE_PALETTE_EXT                                 0x81FB
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS                           0x80B0
+#define GL_SHININESS                                                  0x1601
+#define GL_SHORT                                                      0x1402
+#define GL_SIGNALED                                                   0x9119
+#define GL_SIGNALED_APPLE                                             0x9119
+#define GL_SIGNED_ALPHA8_NV                                           0x8706
+#define GL_SIGNED_ALPHA_NV                                            0x8705
+#define GL_SIGNED_HILO16_NV                                           0x86FA
+#define GL_SIGNED_HILO8_NV                                            0x885F
+#define GL_SIGNED_HILO_NV                                             0x86F9
+#define GL_SIGNED_IDENTITY_NV                                         0x853C
+#define GL_SIGNED_INTENSITY8_NV                                       0x8708
+#define GL_SIGNED_INTENSITY_NV                                        0x8707
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV                                0x8704
+#define GL_SIGNED_LUMINANCE8_NV                                       0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV                                  0x8703
+#define GL_SIGNED_LUMINANCE_NV                                        0x8701
+#define GL_SIGNED_NEGATE_NV                                           0x853D
+#define GL_SIGNED_NORMALIZED                                          0x8F9C
+#define GL_SIGNED_RGB8_NV                                             0x86FF
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV                             0x870D
+#define GL_SIGNED_RGBA8_NV                                            0x86FC
+#define GL_SIGNED_RGBA_NV                                             0x86FB
+#define GL_SIGNED_RGB_NV                                              0x86FE
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV                               0x870C
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST                        0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE                       0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST                      0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE                     0x82AF
+#define GL_SINGLE_COLOR                                               0x81F9
+#define GL_SINGLE_COLOR_EXT                                           0x81F9
+#define GL_SKIP_DECODE_EXT                                            0x8A4A
+#define GL_SKIP_MISSING_GLYPH_NV                                      0x90A9
+#define GL_SLICE_ACCUM_SUN                                            0x85CC
+#define GL_SLIM10U_SGIX                                               0x831E
+#define GL_SLIM12S_SGIX                                               0x831F
+#define GL_SLIM8U_SGIX                                                0x831D
+#define GL_SLUMINANCE                                                 0x8C46
+#define GL_SLUMINANCE8                                                0x8C47
+#define GL_SLUMINANCE8_ALPHA8                                         0x8C45
+#define GL_SLUMINANCE8_ALPHA8_EXT                                     0x8C45
+#define GL_SLUMINANCE8_EXT                                            0x8C47
+#define GL_SLUMINANCE_ALPHA                                           0x8C44
+#define GL_SLUMINANCE_ALPHA_EXT                                       0x8C44
+#define GL_SLUMINANCE_EXT                                             0x8C46
+#define GL_SMALL_CCW_ARC_TO_NV                                        0x12
+#define GL_SMALL_CW_ARC_TO_NV                                         0x14
+#define GL_SMOOTH                                                     0x1D01
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV                                   0x10
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY                              0x0B23
+#define GL_SMOOTH_LINE_WIDTH_RANGE                                    0x0B22
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY                              0x0B13
+#define GL_SMOOTH_POINT_SIZE_RANGE                                    0x0B12
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV                               0x0E
+#define GL_SOURCE0_ALPHA                                              0x8588
+#define GL_SOURCE0_ALPHA_ARB                                          0x8588
+#define GL_SOURCE0_ALPHA_EXT                                          0x8588
+#define GL_SOURCE0_RGB                                                0x8580
+#define GL_SOURCE0_RGB_ARB                                            0x8580
+#define GL_SOURCE0_RGB_EXT                                            0x8580
+#define GL_SOURCE1_ALPHA                                              0x8589
+#define GL_SOURCE1_ALPHA_ARB                                          0x8589
+#define GL_SOURCE1_ALPHA_EXT                                          0x8589
+#define GL_SOURCE1_RGB                                                0x8581
+#define GL_SOURCE1_RGB_ARB                                            0x8581
+#define GL_SOURCE1_RGB_EXT                                            0x8581
+#define GL_SOURCE2_ALPHA                                              0x858A
+#define GL_SOURCE2_ALPHA_ARB                                          0x858A
+#define GL_SOURCE2_ALPHA_EXT                                          0x858A
+#define GL_SOURCE2_RGB                                                0x8582
+#define GL_SOURCE2_RGB_ARB                                            0x8582
+#define GL_SOURCE2_RGB_EXT                                            0x8582
+#define GL_SOURCE3_ALPHA_NV                                           0x858B
+#define GL_SOURCE3_RGB_NV                                             0x8583
+#define GL_SPARE0_NV                                                  0x852E
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV                             0x8532
+#define GL_SPARE1_NV                                                  0x852F
+#define GL_SPECULAR                                                   0x1202
+#define GL_SPHERE_MAP                                                 0x2402
+#define GL_SPOT_CUTOFF                                                0x1206
+#define GL_SPOT_DIRECTION                                             0x1204
+#define GL_SPOT_EXPONENT                                              0x1205
+#define GL_SPRITE_AXIAL_SGIX                                          0x814C
+#define GL_SPRITE_AXIS_SGIX                                           0x814A
+#define GL_SPRITE_EYE_ALIGNED_SGIX                                    0x814E
+#define GL_SPRITE_MODE_SGIX                                           0x8149
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX                                 0x814D
+#define GL_SPRITE_SGIX                                                0x8148
+#define GL_SPRITE_TRANSLATION_SGIX                                    0x814B
+#define GL_SQUARE_NV                                                  0x90A3
+#define GL_SRC0_ALPHA                                                 0x8588
+#define GL_SRC0_RGB                                                   0x8580
+#define GL_SRC1_ALPHA                                                 0x8589
+#define GL_SRC1_COLOR                                                 0x88F9
+#define GL_SRC1_RGB                                                   0x8581
+#define GL_SRC2_ALPHA                                                 0x858A
+#define GL_SRC2_RGB                                                   0x8582
+#define GL_SRC_ALPHA                                                  0x0302
+#define GL_SRC_ALPHA_SATURATE                                         0x0308
+#define GL_SRC_COLOR                                                  0x0300
+#define GL_SRGB                                                       0x8C40
+#define GL_SRGB8                                                      0x8C41
+#define GL_SRGB8_ALPHA8                                               0x8C43
+#define GL_SRGB8_ALPHA8_EXT                                           0x8C43
+#define GL_SRGB8_EXT                                                  0x8C41
+#define GL_SRGB_ALPHA                                                 0x8C42
+#define GL_SRGB_ALPHA_EXT                                             0x8C42
+#define GL_SRGB_DECODE_ARB                                            0x8299
+#define GL_SRGB_EXT                                                   0x8C40
+#define GL_SRGB_READ                                                  0x8297
+#define GL_SRGB_WRITE                                                 0x8298
+#define GL_STACK_OVERFLOW                                             0x0503
+#define GL_STACK_UNDERFLOW                                            0x0504
+#define GL_STANDARD_FONT_NAME_NV                                      0x9072
+#define GL_STATE_RESTORE                                              0x8BDC
+#define GL_STATIC_ATI                                                 0x8760
+#define GL_STATIC_COPY                                                0x88E6
+#define GL_STATIC_COPY_ARB                                            0x88E6
+#define GL_STATIC_DRAW                                                0x88E4
+#define GL_STATIC_DRAW_ARB                                            0x88E4
+#define GL_STATIC_READ                                                0x88E5
+#define GL_STATIC_READ_ARB                                            0x88E5
+#define GL_STENCIL                                                    0x1802
+#define GL_STENCIL_ATTACHMENT                                         0x8D20
+#define GL_STENCIL_ATTACHMENT_EXT                                     0x8D20
+#define GL_STENCIL_ATTACHMENT_OES                                     0x8D20
+#define GL_STENCIL_BACK_FAIL                                          0x8801
+#define GL_STENCIL_BACK_FAIL_ATI                                      0x8801
+#define GL_STENCIL_BACK_FUNC                                          0x8800
+#define GL_STENCIL_BACK_FUNC_ATI                                      0x8800
+#define GL_STENCIL_BACK_OP_VALUE_AMD                                  0x874D
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL                               0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI                           0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS                               0x8803
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI                           0x8803
+#define GL_STENCIL_BACK_REF                                           0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK                                    0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK                                     0x8CA5
+#define GL_STENCIL_BITS                                               0x0D57
+#define GL_STENCIL_BUFFER_BIT                                         0x00000400
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT                                0x88F3
+#define GL_STENCIL_CLEAR_VALUE                                        0x0B91
+#define GL_STENCIL_COMPONENTS                                         0x8285
+#define GL_STENCIL_EXT                                                0x1802
+#define GL_STENCIL_FAIL                                               0x0B94
+#define GL_STENCIL_FUNC                                               0x0B92
+#define GL_STENCIL_INDEX                                              0x1901
+#define GL_STENCIL_INDEX1                                             0x8D46
+#define GL_STENCIL_INDEX16                                            0x8D49
+#define GL_STENCIL_INDEX16_EXT                                        0x8D49
+#define GL_STENCIL_INDEX1_EXT                                         0x8D46
+#define GL_STENCIL_INDEX1_OES                                         0x8D46
+#define GL_STENCIL_INDEX4                                             0x8D47
+#define GL_STENCIL_INDEX4_EXT                                         0x8D47
+#define GL_STENCIL_INDEX4_OES                                         0x8D47
+#define GL_STENCIL_INDEX8                                             0x8D48
+#define GL_STENCIL_INDEX8_EXT                                         0x8D48
+#define GL_STENCIL_INDEX8_OES                                         0x8D48
+#define GL_STENCIL_OP_VALUE_AMD                                       0x874C
+#define GL_STENCIL_PASS_DEPTH_FAIL                                    0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS                                    0x0B96
+#define GL_STENCIL_REF                                                0x0B97
+#define GL_STENCIL_RENDERABLE                                         0x8288
+#define GL_STENCIL_TAG_BITS_EXT                                       0x88F2
+#define GL_STENCIL_TEST                                               0x0B90
+#define GL_STENCIL_TEST_TWO_SIDE_EXT                                  0x8910
+#define GL_STENCIL_VALUE_MASK                                         0x0B93
+#define GL_STENCIL_WRITEMASK                                          0x0B98
+#define GL_STEREO                                                     0x0C33
+#define GL_STORAGE_CACHED_APPLE                                       0x85BE
+#define GL_STORAGE_CLIENT_APPLE                                       0x85B4
+#define GL_STORAGE_PRIVATE_APPLE                                      0x85BD
+#define GL_STORAGE_SHARED_APPLE                                       0x85BF
+#define GL_STREAM_COPY                                                0x88E2
+#define GL_STREAM_COPY_ARB                                            0x88E2
+#define GL_STREAM_DRAW                                                0x88E0
+#define GL_STREAM_DRAW_ARB                                            0x88E0
+#define GL_STREAM_READ                                                0x88E1
+#define GL_STREAM_READ_ARB                                            0x88E1
+#define GL_STRICT_DEPTHFUNC_HINT_PGI                                  0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI                                   0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI                                    0x1A218
+#define GL_SUBPIXEL_BITS                                              0x0D50
+#define GL_SUBSAMPLE_DISTANCE_AMD                                     0x883F
+#define GL_SUBTRACT                                                   0x84E7
+#define GL_SUBTRACT_ARB                                               0x84E7
+#define GL_SUB_ATI                                                    0x8965
+#define GL_SUCCESS_NV                                                 0x902F
+#define GL_SURFACE_MAPPED_NV                                          0x8700
+#define GL_SURFACE_REGISTERED_NV                                      0x86FD
+#define GL_SURFACE_STATE_NV                                           0x86EB
+#define GL_SWIZZLE_STQ_ATI                                            0x8977
+#define GL_SWIZZLE_STQ_DQ_ATI                                         0x8979
+#define GL_SWIZZLE_STRQ_ATI                                           0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI                                        0x897B
+#define GL_SWIZZLE_STR_ATI                                            0x8976
+#define GL_SWIZZLE_STR_DR_ATI                                         0x8978
+#define GL_SYNC_CL_EVENT_ARB                                          0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB                                 0x8241
+#define GL_SYNC_CONDITION                                             0x9113
+#define GL_SYNC_CONDITION_APPLE                                       0x9113
+#define GL_SYNC_FENCE                                                 0x9116
+#define GL_SYNC_FENCE_APPLE                                           0x9116
+#define GL_SYNC_FLAGS                                                 0x9115
+#define GL_SYNC_FLAGS_APPLE                                           0x9115
+#define GL_SYNC_FLUSH_COMMANDS_BIT                                    0x00000001
+#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE                              0x00000001
+#define GL_SYNC_GPU_COMMANDS_COMPLETE                                 0x9117
+#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE                           0x9117
+#define GL_SYNC_OBJECT_APPLE                                          0x8A53
+#define GL_SYNC_STATUS                                                0x9114
+#define GL_SYNC_STATUS_APPLE                                          0x9114
+#define GL_SYNC_X11_FENCE_EXT                                         0x90E1
+#define GL_SYSTEM_FONT_NAME_NV                                        0x9073
+#define GL_T                                                          0x2001
+#define GL_T2F_C3F_V3F                                                0x2A2A
+#define GL_T2F_C4F_N3F_V3F                                            0x2A2C
+#define GL_T2F_C4UB_V3F                                               0x2A29
+#define GL_T2F_IUI_N3F_V2F_EXT                                        0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT                                        0x81B4
+#define GL_T2F_IUI_V2F_EXT                                            0x81B1
+#define GL_T2F_IUI_V3F_EXT                                            0x81B2
+#define GL_T2F_N3F_V3F                                                0x2A2B
+#define GL_T2F_V3F                                                    0x2A27
+#define GL_T4F_C4F_N3F_V4F                                            0x2A2D
+#define GL_T4F_V4F                                                    0x2A28
+#define GL_TABLE_TOO_LARGE                                            0x8031
+#define GL_TABLE_TOO_LARGE_EXT                                        0x8031
+#define GL_TANGENT_ARRAY_EXT                                          0x8439
+#define GL_TANGENT_ARRAY_POINTER_EXT                                  0x8442
+#define GL_TANGENT_ARRAY_STRIDE_EXT                                   0x843F
+#define GL_TANGENT_ARRAY_TYPE_EXT                                     0x843E
+#define GL_TESSELLATION_FACTOR_AMD                                    0x9005
+#define GL_TESSELLATION_MODE_AMD                                      0x9004
+#define GL_TESS_CONTROL_OUTPUT_VERTICES                               0x8E75
+#define GL_TESS_CONTROL_PROGRAM_NV                                    0x891E
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV                   0x8C74
+#define GL_TESS_CONTROL_SHADER                                        0x8E88
+#define GL_TESS_CONTROL_SHADER_BIT                                    0x00000008
+#define GL_TESS_CONTROL_SUBROUTINE                                    0x92E9
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM                            0x92EF
+#define GL_TESS_CONTROL_TEXTURE                                       0x829C
+#define GL_TESS_EVALUATION_PROGRAM_NV                                 0x891F
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV                0x8C75
+#define GL_TESS_EVALUATION_SHADER                                     0x8E87
+#define GL_TESS_EVALUATION_SHADER_BIT                                 0x00000010
+#define GL_TESS_EVALUATION_SUBROUTINE                                 0x92EA
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM                         0x92F0
+#define GL_TESS_EVALUATION_TEXTURE                                    0x829D
+#define GL_TESS_GEN_MODE                                              0x8E76
+#define GL_TESS_GEN_POINT_MODE                                        0x8E79
+#define GL_TESS_GEN_SPACING                                           0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER                                      0x8E78
+#define GL_TEXCOORD1_BIT_PGI                                          0x10000000
+#define GL_TEXCOORD2_BIT_PGI                                          0x20000000
+#define GL_TEXCOORD3_BIT_PGI                                          0x40000000
+#define GL_TEXCOORD4_BIT_PGI                                          0x80000000
+#define GL_TEXTURE                                                    0x1702
+#define GL_TEXTURE0                                                   0x84C0
+#define GL_TEXTURE0_ARB                                               0x84C0
+#define GL_TEXTURE1                                                   0x84C1
+#define GL_TEXTURE10                                                  0x84CA
+#define GL_TEXTURE10_ARB                                              0x84CA
+#define GL_TEXTURE11                                                  0x84CB
+#define GL_TEXTURE11_ARB                                              0x84CB
+#define GL_TEXTURE12                                                  0x84CC
+#define GL_TEXTURE12_ARB                                              0x84CC
+#define GL_TEXTURE13                                                  0x84CD
+#define GL_TEXTURE13_ARB                                              0x84CD
+#define GL_TEXTURE14                                                  0x84CE
+#define GL_TEXTURE14_ARB                                              0x84CE
+#define GL_TEXTURE15                                                  0x84CF
+#define GL_TEXTURE15_ARB                                              0x84CF
+#define GL_TEXTURE16                                                  0x84D0
+#define GL_TEXTURE16_ARB                                              0x84D0
+#define GL_TEXTURE17                                                  0x84D1
+#define GL_TEXTURE17_ARB                                              0x84D1
+#define GL_TEXTURE18                                                  0x84D2
+#define GL_TEXTURE18_ARB                                              0x84D2
+#define GL_TEXTURE19                                                  0x84D3
+#define GL_TEXTURE19_ARB                                              0x84D3
+#define GL_TEXTURE1_ARB                                               0x84C1
+#define GL_TEXTURE2                                                   0x84C2
+#define GL_TEXTURE20                                                  0x84D4
+#define GL_TEXTURE20_ARB                                              0x84D4
+#define GL_TEXTURE21                                                  0x84D5
+#define GL_TEXTURE21_ARB                                              0x84D5
+#define GL_TEXTURE22                                                  0x84D6
+#define GL_TEXTURE22_ARB                                              0x84D6
+#define GL_TEXTURE23                                                  0x84D7
+#define GL_TEXTURE23_ARB                                              0x84D7
+#define GL_TEXTURE24                                                  0x84D8
+#define GL_TEXTURE24_ARB                                              0x84D8
+#define GL_TEXTURE25                                                  0x84D9
+#define GL_TEXTURE25_ARB                                              0x84D9
+#define GL_TEXTURE26                                                  0x84DA
+#define GL_TEXTURE26_ARB                                              0x84DA
+#define GL_TEXTURE27                                                  0x84DB
+#define GL_TEXTURE27_ARB                                              0x84DB
+#define GL_TEXTURE28                                                  0x84DC
+#define GL_TEXTURE28_ARB                                              0x84DC
+#define GL_TEXTURE29                                                  0x84DD
+#define GL_TEXTURE29_ARB                                              0x84DD
+#define GL_TEXTURE2_ARB                                               0x84C2
+#define GL_TEXTURE3                                                   0x84C3
+#define GL_TEXTURE30                                                  0x84DE
+#define GL_TEXTURE30_ARB                                              0x84DE
+#define GL_TEXTURE31                                                  0x84DF
+#define GL_TEXTURE31_ARB                                              0x84DF
+#define GL_TEXTURE3_ARB                                               0x84C3
+#define GL_TEXTURE4                                                   0x84C4
+#define GL_TEXTURE4_ARB                                               0x84C4
+#define GL_TEXTURE5                                                   0x84C5
+#define GL_TEXTURE5_ARB                                               0x84C5
+#define GL_TEXTURE6                                                   0x84C6
+#define GL_TEXTURE6_ARB                                               0x84C6
+#define GL_TEXTURE7                                                   0x84C7
+#define GL_TEXTURE7_ARB                                               0x84C7
+#define GL_TEXTURE8                                                   0x84C8
+#define GL_TEXTURE8_ARB                                               0x84C8
+#define GL_TEXTURE9                                                   0x84C9
+#define GL_TEXTURE9_ARB                                               0x84C9
+#define GL_TEXTURE_1D                                                 0x0DE0
+#define GL_TEXTURE_1D_ARRAY                                           0x8C18
+#define GL_TEXTURE_1D_ARRAY_EXT                                       0x8C18
+#define GL_TEXTURE_1D_BINDING_EXT                                     0x8068
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX                             0x875D
+#define GL_TEXTURE_1D_STACK_MESAX                                     0x8759
+#define GL_TEXTURE_2D                                                 0x0DE1
+#define GL_TEXTURE_2D_ARRAY                                           0x8C1A
+#define GL_TEXTURE_2D_ARRAY_EXT                                       0x8C1A
+#define GL_TEXTURE_2D_BINDING_EXT                                     0x8069
+#define GL_TEXTURE_2D_MULTISAMPLE                                     0x9100
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY                               0x9102
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX                             0x875E
+#define GL_TEXTURE_2D_STACK_MESAX                                     0x875A
+#define GL_TEXTURE_3D                                                 0x806F
+#define GL_TEXTURE_3D_BINDING_EXT                                     0x806A
+#define GL_TEXTURE_3D_BINDING_OES                                     0x806A
+#define GL_TEXTURE_3D_EXT                                             0x806F
+#define GL_TEXTURE_3D_OES                                             0x806F
+#define GL_TEXTURE_4DSIZE_SGIS                                        0x8136
+#define GL_TEXTURE_4D_BINDING_SGIS                                    0x814F
+#define GL_TEXTURE_4D_SGIS                                            0x8134
+#define GL_TEXTURE_ALPHA_MODULATE_IMG                                 0x8C06
+#define GL_TEXTURE_ALPHA_SIZE                                         0x805F
+#define GL_TEXTURE_ALPHA_SIZE_EXT                                     0x805F
+#define GL_TEXTURE_ALPHA_TYPE                                         0x8C13
+#define GL_TEXTURE_ALPHA_TYPE_ARB                                     0x8C13
+#define GL_TEXTURE_APPLICATION_MODE_EXT                               0x834F
+#define GL_TEXTURE_BASE_LEVEL                                         0x813C
+#define GL_TEXTURE_BASE_LEVEL_SGIS                                    0x813C
+#define GL_TEXTURE_BINDING_1D                                         0x8068
+#define GL_TEXTURE_BINDING_1D_ARRAY                                   0x8C1C
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT                               0x8C1C
+#define GL_TEXTURE_BINDING_2D                                         0x8069
+#define GL_TEXTURE_BINDING_2D_ARRAY                                   0x8C1D
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT                               0x8C1D
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE                             0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY                       0x9105
+#define GL_TEXTURE_BINDING_3D                                         0x806A
+#define GL_TEXTURE_BINDING_BUFFER                                     0x8C2C
+#define GL_TEXTURE_BINDING_BUFFER_ARB                                 0x8C2C
+#define GL_TEXTURE_BINDING_BUFFER_EXT                                 0x8C2C
+#define GL_TEXTURE_BINDING_CUBE_MAP                                   0x8514
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB                               0x8514
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY                             0x900A
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB                         0x900A
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT                               0x8514
+#define GL_TEXTURE_BINDING_CUBE_MAP_OES                               0x8514
+#define GL_TEXTURE_BINDING_EXTERNAL_OES                               0x8D67
+#define GL_TEXTURE_BINDING_RECTANGLE                                  0x84F6
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB                              0x84F6
+#define GL_TEXTURE_BINDING_RECTANGLE_NV                               0x84F6
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV                            0x8E53
+#define GL_TEXTURE_BIT                                                0x00040000
+#define GL_TEXTURE_BLUE_SIZE                                          0x805E
+#define GL_TEXTURE_BLUE_SIZE_EXT                                      0x805E
+#define GL_TEXTURE_BLUE_TYPE                                          0x8C12
+#define GL_TEXTURE_BLUE_TYPE_ARB                                      0x8C12
+#define GL_TEXTURE_BORDER                                             0x1005
+#define GL_TEXTURE_BORDER_COLOR                                       0x1004
+#define GL_TEXTURE_BORDER_VALUES_NV                                   0x871A
+#define GL_TEXTURE_BUFFER                                             0x8C2A
+#define GL_TEXTURE_BUFFER_ARB                                         0x8C2A
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING                          0x8C2D
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB                      0x8C2D
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT                      0x8C2D
+#define GL_TEXTURE_BUFFER_EXT                                         0x8C2A
+#define GL_TEXTURE_BUFFER_FORMAT_ARB                                  0x8C2E
+#define GL_TEXTURE_BUFFER_FORMAT_EXT                                  0x8C2E
+#define GL_TEXTURE_BUFFER_OFFSET                                      0x919D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT                            0x919F
+#define GL_TEXTURE_BUFFER_SIZE                                        0x919E
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX                                0x8171
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX                                 0x8176
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX                                 0x8172
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX                            0x8175
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX                                0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX                         0x8174
+#define GL_TEXTURE_COLOR_SAMPLES_NV                                   0x9046
+#define GL_TEXTURE_COLOR_TABLE_SGI                                    0x80BC
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS                               0x81EF
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB                             0x80BF
+#define GL_TEXTURE_COMPARE_FUNC                                       0x884D
+#define GL_TEXTURE_COMPARE_FUNC_ARB                                   0x884D
+#define GL_TEXTURE_COMPARE_FUNC_EXT                                   0x884D
+#define GL_TEXTURE_COMPARE_MODE                                       0x884C
+#define GL_TEXTURE_COMPARE_MODE_ARB                                   0x884C
+#define GL_TEXTURE_COMPARE_MODE_EXT                                   0x884C
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX                              0x819B
+#define GL_TEXTURE_COMPARE_SGIX                                       0x819A
+#define GL_TEXTURE_COMPONENTS                                         0x1003
+#define GL_TEXTURE_COMPRESSED                                         0x86A1
+#define GL_TEXTURE_COMPRESSED_ARB                                     0x86A1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT                            0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE                              0x82B3
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH                             0x82B1
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE                              0x86A0
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB                          0x86A0
+#define GL_TEXTURE_COMPRESSION_HINT                                   0x84EF
+#define GL_TEXTURE_COMPRESSION_HINT_ARB                               0x84EF
+#define GL_TEXTURE_CONSTANT_DATA_SUNX                                 0x81D6
+#define GL_TEXTURE_COORD_ARRAY                                        0x8078
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV                             0x8F25
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING                         0x889A
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB                     0x889A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT                              0x808B
+#define GL_TEXTURE_COORD_ARRAY_EXT                                    0x8078
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV                              0x8F2F
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM                               103074
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM                        103084
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL                0x83F8
+#define GL_TEXTURE_COORD_ARRAY_POINTER                                0x8092
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT                            0x8092
+#define GL_TEXTURE_COORD_ARRAY_SIZE                                   0x8088
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT                               0x8088
+#define GL_TEXTURE_COORD_ARRAY_STRIDE                                 0x808A
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT                             0x808A
+#define GL_TEXTURE_COORD_ARRAY_TYPE                                   0x8089
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT                               0x8089
+#define GL_TEXTURE_COORD_NV                                           0x8C79
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV                                0x9045
+#define GL_TEXTURE_CROP_RECT_OES                                      0x8B9D
+#define GL_TEXTURE_CUBE_MAP                                           0x8513
+#define GL_TEXTURE_CUBE_MAP_ARB                                       0x8513
+#define GL_TEXTURE_CUBE_MAP_ARRAY                                     0x9009
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB                                 0x9009
+#define GL_TEXTURE_CUBE_MAP_EXT                                       0x8513
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X                                0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB                            0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT                            0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES                            0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y                                0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB                            0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT                            0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES                            0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z                                0x851A
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB                            0x851A
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT                            0x851A
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES                            0x851A
+#define GL_TEXTURE_CUBE_MAP_OES                                       0x8513
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X                                0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB                            0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT                            0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES                            0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y                                0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB                            0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT                            0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES                            0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z                                0x8519
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB                            0x8519
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT                            0x8519
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES                            0x8519
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS                                  0x884F
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX                               0x00000001
+#define GL_TEXTURE_DEFORMATION_SGIX                                   0x8195
+#define GL_TEXTURE_DEPTH                                              0x8071
+#define GL_TEXTURE_DEPTH_EXT                                          0x8071
+#define GL_TEXTURE_DEPTH_QCOM                                         0x8BD4
+#define GL_TEXTURE_DEPTH_SIZE                                         0x884A
+#define GL_TEXTURE_DEPTH_SIZE_ARB                                     0x884A
+#define GL_TEXTURE_DEPTH_TYPE                                         0x8C16
+#define GL_TEXTURE_DEPTH_TYPE_ARB                                     0x8C16
+#define GL_TEXTURE_DS_SIZE_NV                                         0x871D
+#define GL_TEXTURE_DT_SIZE_NV                                         0x871E
+#define GL_TEXTURE_ENV                                                0x2300
+#define GL_TEXTURE_ENV_BIAS_SGIX                                      0x80BE
+#define GL_TEXTURE_ENV_COLOR                                          0x2201
+#define GL_TEXTURE_ENV_MODE                                           0x2200
+#define GL_TEXTURE_EXTERNAL_OES                                       0x8D65
+#define GL_TEXTURE_FETCH_BARRIER_BIT                                  0x00000008
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT                              0x00000008
+#define GL_TEXTURE_FILTER4_SIZE_SGIS                                  0x8147
+#define GL_TEXTURE_FILTER_CONTROL                                     0x8500
+#define GL_TEXTURE_FILTER_CONTROL_EXT                                 0x8500
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS                             0x9107
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV                                0x888C
+#define GL_TEXTURE_FORMAT_QCOM                                        0x8BD6
+#define GL_TEXTURE_FREE_MEMORY_ATI                                    0x87FC
+#define GL_TEXTURE_GATHER                                             0x82A2
+#define GL_TEXTURE_GATHER_SHADOW                                      0x82A3
+#define GL_TEXTURE_GEN_MODE                                           0x2500
+#define GL_TEXTURE_GEN_Q                                              0x0C63
+#define GL_TEXTURE_GEN_R                                              0x0C62
+#define GL_TEXTURE_GEN_S                                              0x0C60
+#define GL_TEXTURE_GEN_STR_OES                                        0x8D60
+#define GL_TEXTURE_GEN_T                                              0x0C61
+#define GL_TEXTURE_GEQUAL_R_SGIX                                      0x819D
+#define GL_TEXTURE_GREEN_SIZE                                         0x805D
+#define GL_TEXTURE_GREEN_SIZE_EXT                                     0x805D
+#define GL_TEXTURE_GREEN_TYPE                                         0x8C11
+#define GL_TEXTURE_GREEN_TYPE_ARB                                     0x8C11
+#define GL_TEXTURE_HEIGHT                                             0x1001
+#define GL_TEXTURE_HEIGHT_QCOM                                        0x8BD3
+#define GL_TEXTURE_HI_SIZE_NV                                         0x871B
+#define GL_TEXTURE_IMAGE_FORMAT                                       0x828F
+#define GL_TEXTURE_IMAGE_TYPE                                         0x8290
+#define GL_TEXTURE_IMAGE_VALID_QCOM                                   0x8BD8
+#define GL_TEXTURE_IMMUTABLE_FORMAT                                   0x912F
+#define GL_TEXTURE_IMMUTABLE_LEVELS                                   0x82DF
+#define GL_TEXTURE_INDEX_SIZE_EXT                                     0x80ED
+#define GL_TEXTURE_INTENSITY_SIZE                                     0x8061
+#define GL_TEXTURE_INTENSITY_SIZE_EXT                                 0x8061
+#define GL_TEXTURE_INTENSITY_TYPE                                     0x8C15
+#define GL_TEXTURE_INTENSITY_TYPE_ARB                                 0x8C15
+#define GL_TEXTURE_INTERNAL_FORMAT                                    0x1003
+#define GL_TEXTURE_INTERNAL_FORMAT_QCOM                               0x8BD5
+#define GL_TEXTURE_LEQUAL_R_SGIX                                      0x819C
+#define GL_TEXTURE_LIGHTING_MODE_HP                                   0x8167
+#define GL_TEXTURE_LIGHT_EXT                                          0x8350
+#define GL_TEXTURE_LOD_BIAS                                           0x8501
+#define GL_TEXTURE_LOD_BIAS_EXT                                       0x8501
+#define GL_TEXTURE_LOD_BIAS_R_SGIX                                    0x8190
+#define GL_TEXTURE_LOD_BIAS_S_SGIX                                    0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX                                    0x818F
+#define GL_TEXTURE_LO_SIZE_NV                                         0x871C
+#define GL_TEXTURE_LUMINANCE_SIZE                                     0x8060
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT                                 0x8060
+#define GL_TEXTURE_LUMINANCE_TYPE                                     0x8C14
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB                                 0x8C14
+#define GL_TEXTURE_MAG_FILTER                                         0x2800
+#define GL_TEXTURE_MAG_SIZE_NV                                        0x871F
+#define GL_TEXTURE_MATERIAL_FACE_EXT                                  0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT                             0x8352
+#define GL_TEXTURE_MATRIX                                             0x0BA8
+#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES                       0x898F
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT                                 0x84FE
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX                                   0x836B
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX                                   0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX                                   0x836A
+#define GL_TEXTURE_MAX_LEVEL                                          0x813D
+#define GL_TEXTURE_MAX_LEVEL_SGIS                                     0x813D
+#define GL_TEXTURE_MAX_LOD                                            0x813B
+#define GL_TEXTURE_MAX_LOD_SGIS                                       0x813B
+#define GL_TEXTURE_MIN_FILTER                                         0x2801
+#define GL_TEXTURE_MIN_LOD                                            0x813A
+#define GL_TEXTURE_MIN_LOD_SGIS                                       0x813A
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX                             0x812E
+#define GL_TEXTURE_NORMAL_EXT                                         0x85AF
+#define GL_TEXTURE_NUM_LEVELS_QCOM                                    0x8BD9
+#define GL_TEXTURE_OBJECT_VALID_QCOM                                  0x8BDB
+#define GL_TEXTURE_POST_SPECULAR_HP                                   0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP                                    0x8169
+#define GL_TEXTURE_PRIORITY                                           0x8066
+#define GL_TEXTURE_PRIORITY_EXT                                       0x8066
+#define GL_TEXTURE_RANGE_LENGTH_APPLE                                 0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE                                0x85B8
+#define GL_TEXTURE_RECTANGLE                                          0x84F5
+#define GL_TEXTURE_RECTANGLE_ARB                                      0x84F5
+#define GL_TEXTURE_RECTANGLE_NV                                       0x84F5
+#define GL_TEXTURE_RED_SIZE                                           0x805C
+#define GL_TEXTURE_RED_SIZE_EXT                                       0x805C
+#define GL_TEXTURE_RED_TYPE                                           0x8C10
+#define GL_TEXTURE_RED_TYPE_ARB                                       0x8C10
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV                 0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV                                    0x8E55
+#define GL_TEXTURE_RESIDENT                                           0x8067
+#define GL_TEXTURE_RESIDENT_EXT                                       0x8067
+#define GL_TEXTURE_SAMPLES                                            0x9106
+#define GL_TEXTURE_SAMPLES_IMG                                        0x9136
+#define GL_TEXTURE_SHADER_NV                                          0x86DE
+#define GL_TEXTURE_SHADOW                                             0x82A1
+#define GL_TEXTURE_SHARED_SIZE                                        0x8C3F
+#define GL_TEXTURE_SHARED_SIZE_EXT                                    0x8C3F
+#define GL_TEXTURE_SRGB_DECODE_EXT                                    0x8A48
+#define GL_TEXTURE_STACK_DEPTH                                        0x0BA5
+#define GL_TEXTURE_STENCIL_SIZE                                       0x88F1
+#define GL_TEXTURE_STENCIL_SIZE_EXT                                   0x88F1
+#define GL_TEXTURE_STORAGE_HINT_APPLE                                 0x85BC
+#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD                             0x00000001
+#define GL_TEXTURE_SWIZZLE_A                                          0x8E45
+#define GL_TEXTURE_SWIZZLE_A_EXT                                      0x8E45
+#define GL_TEXTURE_SWIZZLE_B                                          0x8E44
+#define GL_TEXTURE_SWIZZLE_B_EXT                                      0x8E44
+#define GL_TEXTURE_SWIZZLE_G                                          0x8E43
+#define GL_TEXTURE_SWIZZLE_G_EXT                                      0x8E43
+#define GL_TEXTURE_SWIZZLE_R                                          0x8E42
+#define GL_TEXTURE_SWIZZLE_RGBA                                       0x8E46
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT                                   0x8E46
+#define GL_TEXTURE_SWIZZLE_R_EXT                                      0x8E42
+#define GL_TEXTURE_TARGET_QCOM                                        0x8BDA
+#define GL_TEXTURE_TOO_LARGE_EXT                                      0x8065
+#define GL_TEXTURE_TYPE_QCOM                                          0x8BD7
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV                             0x888F
+#define GL_TEXTURE_UPDATE_BARRIER_BIT                                 0x00000100
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT                             0x00000100
+#define GL_TEXTURE_USAGE_ANGLE                                        0x93A2
+#define GL_TEXTURE_VIEW                                               0x82B5
+#define GL_TEXTURE_VIEW_MIN_LAYER                                     0x82DD
+#define GL_TEXTURE_VIEW_MIN_LEVEL                                     0x82DB
+#define GL_TEXTURE_VIEW_NUM_LAYERS                                    0x82DE
+#define GL_TEXTURE_VIEW_NUM_LEVELS                                    0x82DC
+#define GL_TEXTURE_WIDTH                                              0x1000
+#define GL_TEXTURE_WIDTH_QCOM                                         0x8BD2
+#define GL_TEXTURE_WRAP_Q_SGIS                                        0x8137
+#define GL_TEXTURE_WRAP_R                                             0x8072
+#define GL_TEXTURE_WRAP_R_EXT                                         0x8072
+#define GL_TEXTURE_WRAP_R_OES                                         0x8072
+#define GL_TEXTURE_WRAP_S                                             0x2802
+#define GL_TEXTURE_WRAP_T                                             0x2803
+#define GL_TEXT_FRAGMENT_SHADER_ATI                                   0x8200
+#define GL_TIMEOUT_EXPIRED                                            0x911B
+#define GL_TIMEOUT_EXPIRED_APPLE                                      0x911B
+#define GL_TIMEOUT_IGNORED                                            0xFFFFFFFFFFFFFFFFull
+#define GL_TIMEOUT_IGNORED_APPLE                                      0xFFFFFFFFFFFFFFFFull
+#define GL_TIMESTAMP                                                  0x8E28
+#define GL_TIME_ELAPSED                                               0x88BF
+#define GL_TIME_ELAPSED_EXT                                           0x88BF
+#define GL_TOP_LEVEL_ARRAY_SIZE                                       0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE                                     0x930D
+#define GL_TRACE_ALL_BITS_MESA                                        0xFFFF
+#define GL_TRACE_ARRAYS_BIT_MESA                                      0x0004
+#define GL_TRACE_ERRORS_BIT_MESA                                      0x0020
+#define GL_TRACE_MASK_MESA                                            0x8755
+#define GL_TRACE_NAME_MESA                                            0x8756
+#define GL_TRACE_OPERATIONS_BIT_MESA                                  0x0001
+#define GL_TRACE_PIXELS_BIT_MESA                                      0x0010
+#define GL_TRACE_PRIMITIVES_BIT_MESA                                  0x0002
+#define GL_TRACE_TEXTURES_BIT_MESA                                    0x0008
+#define GL_TRACK_MATRIX_NV                                            0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV                                  0x8649
+#define GL_TRANSFORM_BIT                                              0x00001000
+#define GL_TRANSFORM_FEEDBACK                                         0x8E22
+#define GL_TRANSFORM_FEEDBACK_ACTIVE                                  0x8E24
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV                              0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT                             0x00000800
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT                         0x00000800
+#define GL_TRANSFORM_FEEDBACK_BINDING                                 0x8E25
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV                              0x8E25
+#define GL_TRANSFORM_FEEDBACK_BUFFER                                  0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV                        0x8E24
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING                          0x8C8F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT                      0x8C8F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV                       0x8C8F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT                              0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE                             0x8C7F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT                         0x8C7F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV                          0x8C7F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV                               0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV                        0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE                             0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT                         0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV                          0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START                            0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT                        0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV                         0x8C84
+#define GL_TRANSFORM_FEEDBACK_NV                                      0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED                                  0x8E23
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN                      0x8C88
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT                  0x8C88
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV                   0x8C88
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV                               0x8C86
+#define GL_TRANSFORM_FEEDBACK_VARYING                                 0x92F4
+#define GL_TRANSFORM_FEEDBACK_VARYINGS                                0x8C83
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT                            0x8C83
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV                             0x8C83
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH                      0x8C76
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT                  0x8C76
+#define GL_TRANSFORM_HINT_APPLE                                       0x85B1
+#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE                      0x93A0
+#define GL_TRANSLATE_2D_NV                                            0x9090
+#define GL_TRANSLATE_3D_NV                                            0x9091
+#define GL_TRANSLATE_X_NV                                             0x908E
+#define GL_TRANSLATE_Y_NV                                             0x908F
+#define GL_TRANSPOSE_AFFINE_2D_NV                                     0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV                                     0x9098
+#define GL_TRANSPOSE_COLOR_MATRIX                                     0x84E6
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB                                 0x84E6
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB                               0x88B7
+#define GL_TRANSPOSE_MODELVIEW_MATRIX                                 0x84E3
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB                             0x84E3
+#define GL_TRANSPOSE_NV                                               0x862C
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT                               0x8E2E
+#define GL_TRANSPOSE_PROJECTION_MATRIX                                0x84E4
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB                            0x84E4
+#define GL_TRANSPOSE_PROJECTIVE_2D_NV                                 0x9097
+#define GL_TRANSPOSE_PROJECTIVE_3D_NV                                 0x9099
+#define GL_TRANSPOSE_TEXTURE_MATRIX                                   0x84E5
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB                               0x84E5
+#define GL_TRIANGLES                                                  0x0004
+#define GL_TRIANGLES_ADJACENCY                                        0x000C
+#define GL_TRIANGLES_ADJACENCY_ARB                                    0x000C
+#define GL_TRIANGLES_ADJACENCY_EXT                                    0x000C
+#define GL_TRIANGLE_FAN                                               0x0006
+#define GL_TRIANGLE_LIST_SUN                                          0x81D7
+#define GL_TRIANGLE_MESH_SUN                                          0x8615
+#define GL_TRIANGLE_STRIP                                             0x0005
+#define GL_TRIANGLE_STRIP_ADJACENCY                                   0x000D
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB                               0x000D
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT                               0x000D
+#define GL_TRIANGULAR_NV                                              0x90A5
+#define GL_TRUE                                                       1
+#define GL_TYPE                                                       0x92FA
+#define GL_TYPE_RGBA_FLOAT_ATI                                        0x8820
+#define GL_UNDEFINED_APPLE                                            0x8A1C
+#define GL_UNDEFINED_VERTEX                                           0x8260
+#define GL_UNIFORM                                                    0x92E1
+#define GL_UNIFORM_ARRAY_STRIDE                                       0x8A3C
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX                        0x92DA
+#define GL_UNIFORM_BARRIER_BIT                                        0x00000004
+#define GL_UNIFORM_BARRIER_BIT_EXT                                    0x00000004
+#define GL_UNIFORM_BLOCK                                              0x92E2
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS                              0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES                       0x8A43
+#define GL_UNIFORM_BLOCK_BINDING                                      0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE                                    0x8A40
+#define GL_UNIFORM_BLOCK_INDEX                                        0x8A3A
+#define GL_UNIFORM_BLOCK_NAME_LENGTH                                  0x8A41
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER                 0x90EC
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER                0x8A46
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER                0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER            0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER         0x84F1
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER                  0x8A44
+#define GL_UNIFORM_BUFFER                                             0x8A11
+#define GL_UNIFORM_BUFFER_BINDING                                     0x8A28
+#define GL_UNIFORM_BUFFER_BINDING_EXT                                 0x8DEF
+#define GL_UNIFORM_BUFFER_EXT                                         0x8DEE
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT                            0x8A34
+#define GL_UNIFORM_BUFFER_SIZE                                        0x8A2A
+#define GL_UNIFORM_BUFFER_START                                       0x8A29
+#define GL_UNIFORM_IS_ROW_MAJOR                                       0x8A3E
+#define GL_UNIFORM_MATRIX_STRIDE                                      0x8A3D
+#define GL_UNIFORM_NAME_LENGTH                                        0x8A39
+#define GL_UNIFORM_OFFSET                                             0x8A3B
+#define GL_UNIFORM_SIZE                                               0x8A38
+#define GL_UNIFORM_TYPE                                               0x8A37
+#define GL_UNKNOWN_CONTEXT_RESET_ARB                                  0x8255
+#define GL_UNPACK_ALIGNMENT                                           0x0CF5
+#define GL_UNPACK_CLIENT_STORAGE_APPLE                                0x85B2
+#define GL_UNPACK_CMYK_HINT_EXT                                       0x800F
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH                              0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT                             0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE                               0x912A
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH                              0x9127
+#define GL_UNPACK_COMPRESSED_SIZE_SGIX                                0x831A
+#define GL_UNPACK_CONSTANT_DATA_SUNX                                  0x81D5
+#define GL_UNPACK_IMAGE_DEPTH_SGIS                                    0x8133
+#define GL_UNPACK_IMAGE_HEIGHT                                        0x806E
+#define GL_UNPACK_IMAGE_HEIGHT_EXT                                    0x806E
+#define GL_UNPACK_LSB_FIRST                                           0x0CF1
+#define GL_UNPACK_RESAMPLE_OML                                        0x8985
+#define GL_UNPACK_RESAMPLE_SGIX                                       0x842D
+#define GL_UNPACK_ROW_BYTES_APPLE                                     0x8A16
+#define GL_UNPACK_ROW_LENGTH                                          0x0CF2
+#define GL_UNPACK_SKIP_IMAGES                                         0x806D
+#define GL_UNPACK_SKIP_IMAGES_EXT                                     0x806D
+#define GL_UNPACK_SKIP_PIXELS                                         0x0CF4
+#define GL_UNPACK_SKIP_ROWS                                           0x0CF3
+#define GL_UNPACK_SKIP_VOLUMES_SGIS                                   0x8132
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX                                 0x85A1
+#define GL_UNPACK_SWAP_BYTES                                          0x0CF0
+#define GL_UNSIGNALED                                                 0x9118
+#define GL_UNSIGNALED_APPLE                                           0x9118
+#define GL_UNSIGNED_BYTE                                              0x1401
+#define GL_UNSIGNED_BYTE_2_3_3_REV                                    0x8362
+#define GL_UNSIGNED_BYTE_2_3_3_REV_EXT                                0x8362
+#define GL_UNSIGNED_BYTE_3_3_2                                        0x8032
+#define GL_UNSIGNED_BYTE_3_3_2_EXT                                    0x8032
+#define GL_UNSIGNED_IDENTITY_NV                                       0x8536
+#define GL_UNSIGNED_INT                                               0x1405
+#define GL_UNSIGNED_INT16_NV                                          0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV                                     0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV                                     0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV                                     0x8FF3
+#define GL_UNSIGNED_INT64_AMD                                         0x8BC2
+#define GL_UNSIGNED_INT64_NV                                          0x140F
+#define GL_UNSIGNED_INT64_VEC2_NV                                     0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV                                     0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV                                     0x8FF7
+#define GL_UNSIGNED_INT8_NV                                           0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV                                      0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV                                      0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV                                      0x8FEF
+#define GL_UNSIGNED_INT_10F_11F_11F_REV                               0x8C3B
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT                           0x8C3B
+#define GL_UNSIGNED_INT_10_10_10_2                                    0x8036
+#define GL_UNSIGNED_INT_10_10_10_2_EXT                                0x8036
+#define GL_UNSIGNED_INT_10_10_10_2_OES                                0x8DF6
+#define GL_UNSIGNED_INT_24_8                                          0x84FA
+#define GL_UNSIGNED_INT_24_8_EXT                                      0x84FA
+#define GL_UNSIGNED_INT_24_8_MESA                                     0x8751
+#define GL_UNSIGNED_INT_24_8_NV                                       0x84FA
+#define GL_UNSIGNED_INT_24_8_OES                                      0x84FA
+#define GL_UNSIGNED_INT_2_10_10_10_REV                                0x8368
+#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT                            0x8368
+#define GL_UNSIGNED_INT_5_9_9_9_REV                                   0x8C3E
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT                               0x8C3E
+#define GL_UNSIGNED_INT_8_24_REV_MESA                                 0x8752
+#define GL_UNSIGNED_INT_8_8_8_8                                       0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_EXT                                   0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_REV                                   0x8367
+#define GL_UNSIGNED_INT_8_8_8_8_REV_EXT                               0x8367
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV                              0x86DB
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER                                0x92DB
+#define GL_UNSIGNED_INT_IMAGE_1D                                      0x9062
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY                                0x9068
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT                            0x9068
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT                                  0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D                                      0x9063
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY                                0x9069
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT                            0x9069
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT                                  0x9063
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE                          0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY                    0x906C
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT                0x906C
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT                      0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT                                 0x9065
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT                             0x9065
+#define GL_UNSIGNED_INT_IMAGE_3D                                      0x9064
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT                                  0x9064
+#define GL_UNSIGNED_INT_IMAGE_BUFFER                                  0x9067
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT                              0x9067
+#define GL_UNSIGNED_INT_IMAGE_CUBE                                    0x9066
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT                                0x9066
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY                          0x906A
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT                      0x906A
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV                                  0x86DA
+#define GL_UNSIGNED_INT_SAMPLER_1D                                    0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY                              0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT                          0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT                                0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D                                    0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY                              0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT                          0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT                                0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE                        0x910A
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY                  0x910D
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT                               0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT                           0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_3D                                    0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT                                0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER                                0x8DD8
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD                            0x9003
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT                            0x8DD8
+#define GL_UNSIGNED_INT_SAMPLER_CUBE                                  0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT                              0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY                        0x900F
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB                    0x900F
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV                       0x8E58
+#define GL_UNSIGNED_INT_VEC2                                          0x8DC6
+#define GL_UNSIGNED_INT_VEC2_EXT                                      0x8DC6
+#define GL_UNSIGNED_INT_VEC3                                          0x8DC7
+#define GL_UNSIGNED_INT_VEC3_EXT                                      0x8DC7
+#define GL_UNSIGNED_INT_VEC4                                          0x8DC8
+#define GL_UNSIGNED_INT_VEC4_EXT                                      0x8DC8
+#define GL_UNSIGNED_INVERT_NV                                         0x8537
+#define GL_UNSIGNED_NEGATE_NV                                         0x853D
+#define GL_UNSIGNED_NORMALIZED                                        0x8C17
+#define GL_UNSIGNED_NORMALIZED_ARB                                    0x8C17
+#define GL_UNSIGNED_NORMALIZED_EXT                                    0x8C17
+#define GL_UNSIGNED_SHORT                                             0x1403
+#define GL_UNSIGNED_SHORT_15_1_MESA                                   0x8753
+#define GL_UNSIGNED_SHORT_1_15_REV_MESA                               0x8754
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV                                 0x8366
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT                             0x8366
+#define GL_UNSIGNED_SHORT_4_4_4_4                                     0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT                                 0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV                                 0x8365
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT                             0x8365
+#define GL_UNSIGNED_SHORT_5_5_5_1                                     0x8034
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT                                 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5                                       0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_EXT                                   0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV                                   0x8364
+#define GL_UNSIGNED_SHORT_5_6_5_REV_EXT                               0x8364
+#define GL_UNSIGNED_SHORT_8_8_APPLE                                   0x85BA
+#define GL_UNSIGNED_SHORT_8_8_MESA                                    0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE                               0x85BB
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA                                0x85BB
+#define GL_UPPER_LEFT                                                 0x8CA2
+#define GL_USE_MISSING_GLYPH_NV                                       0x90AA
+#define GL_UTF16_NV                                                   0x909B
+#define GL_UTF8_NV                                                    0x909A
+#define GL_V2F                                                        0x2A20
+#define GL_V3F                                                        0x2A21
+#define GL_VALIDATE_STATUS                                            0x8B83
+#define GL_VARIABLE_A_NV                                              0x8523
+#define GL_VARIABLE_B_NV                                              0x8524
+#define GL_VARIABLE_C_NV                                              0x8525
+#define GL_VARIABLE_D_NV                                              0x8526
+#define GL_VARIABLE_E_NV                                              0x8527
+#define GL_VARIABLE_F_NV                                              0x8528
+#define GL_VARIABLE_G_NV                                              0x8529
+#define GL_VARIANT_ARRAY_EXT                                          0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT                                  0x87E9
+#define GL_VARIANT_ARRAY_STRIDE_EXT                                   0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT                                     0x87E7
+#define GL_VARIANT_DATATYPE_EXT                                       0x87E5
+#define GL_VARIANT_EXT                                                0x87C1
+#define GL_VARIANT_VALUE_EXT                                          0x87E4
+#define GL_VBO_FREE_MEMORY_ATI                                        0x87FB
+#define GL_VECTOR_EXT                                                 0x87BF
+#define GL_VENDOR                                                     0x1F00
+#define GL_VERSION                                                    0x1F02
+#define GL_VERSION_1_1                                                1
+#define GL_VERSION_1_2                                                1
+#define GL_VERSION_1_3                                                1
+#define GL_VERSION_1_4                                                1
+#define GL_VERSION_1_5                                                1
+#define GL_VERSION_2_0                                                1
+#define GL_VERSION_2_1                                                1
+#define GL_VERSION_3_0                                                1
+#define GL_VERSION_3_1                                                1
+#define GL_VERSION_3_2                                                1
+#define GL_VERTEX23_BIT_PGI                                           0x00000004
+#define GL_VERTEX4_BIT_PGI                                            0x00000008
+#define GL_VERTEX_ARRAY                                               0x8074
+#define GL_VERTEX_ARRAY_ADDRESS_NV                                    0x8F21
+#define GL_VERTEX_ARRAY_BINDING                                       0x85B5
+#define GL_VERTEX_ARRAY_BINDING_APPLE                                 0x85B5
+#define GL_VERTEX_ARRAY_BUFFER_BINDING                                0x8896
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB                            0x8896
+#define GL_VERTEX_ARRAY_COUNT_EXT                                     0x807D
+#define GL_VERTEX_ARRAY_EXT                                           0x8074
+#define GL_VERTEX_ARRAY_LENGTH_NV                                     0x8F2B
+#define GL_VERTEX_ARRAY_LIST_IBM                                      103070
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM                               103080
+#define GL_VERTEX_ARRAY_OBJECT_AMD                                    0x9154
+#define GL_VERTEX_ARRAY_OBJECT_EXT                                    0x9154
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL                       0x83F5
+#define GL_VERTEX_ARRAY_POINTER                                       0x808E
+#define GL_VERTEX_ARRAY_POINTER_EXT                                   0x808E
+#define GL_VERTEX_ARRAY_RANGE_APPLE                                   0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE                            0x851E
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV                               0x851E
+#define GL_VERTEX_ARRAY_RANGE_NV                                      0x851D
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE                           0x8521
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV                              0x8521
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV                                0x851F
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV                        0x8533
+#define GL_VERTEX_ARRAY_SIZE                                          0x807A
+#define GL_VERTEX_ARRAY_SIZE_EXT                                      0x807A
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE                            0x851F
+#define GL_VERTEX_ARRAY_STRIDE                                        0x807C
+#define GL_VERTEX_ARRAY_STRIDE_EXT                                    0x807C
+#define GL_VERTEX_ARRAY_TYPE                                          0x807B
+#define GL_VERTEX_ARRAY_TYPE_EXT                                      0x807B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV                                    0x8650
+#define GL_VERTEX_ATTRIB_ARRAY10_NV                                   0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV                                   0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV                                   0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV                                   0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV                                   0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV                                   0x865F
+#define GL_VERTEX_ATTRIB_ARRAY1_NV                                    0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV                                    0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV                                    0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV                                    0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV                                    0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV                                    0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV                                    0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV                                    0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV                                    0x8659
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV                             0x8F20
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT                            0x00000001
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT                        0x00000001
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING                         0x889F
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB                     0x889F
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR                                0x88FE
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE                          0x88FE
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB                            0x88FE
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED                                0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB                            0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER                                0x88FD
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV                             0x88FD
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV                              0x8F2A
+#define GL_VERTEX_ATTRIB_ARRAY_LONG                                   0x874E
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED                             0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB                         0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER                                0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB                            0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE                                   0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB                               0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE                                 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB                             0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE                                   0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB                               0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV                             0x8F1E
+#define GL_VERTEX_ATTRIB_BINDING                                      0x82D4
+#define GL_VERTEX_ATTRIB_MAP1_APPLE                                   0x8A00
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE                             0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE                            0x8A05
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE                             0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE                              0x8A02
+#define GL_VERTEX_ATTRIB_MAP2_APPLE                                   0x8A01
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE                             0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE                            0x8A09
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE                             0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE                              0x8A06
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET                              0x82D5
+#define GL_VERTEX_BINDING_DIVISOR                                     0x82D6
+#define GL_VERTEX_BINDING_OFFSET                                      0x82D7
+#define GL_VERTEX_BINDING_STRIDE                                      0x82D8
+#define GL_VERTEX_BLEND_ARB                                           0x86A7
+#define GL_VERTEX_CONSISTENT_HINT_PGI                                 0x1A22B
+#define GL_VERTEX_DATA_HINT_PGI                                       0x1A22A
+#define GL_VERTEX_ID_NV                                               0x8C7B
+#define GL_VERTEX_PRECLIP_HINT_SGIX                                   0x83EF
+#define GL_VERTEX_PRECLIP_SGIX                                        0x83EE
+#define GL_VERTEX_PROGRAM_ARB                                         0x8620
+#define GL_VERTEX_PROGRAM_BINDING_NV                                  0x864A
+#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA                          0x8BB7
+#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA                          0x8BB6
+#define GL_VERTEX_PROGRAM_CALLBACK_MESA                               0x8BB4
+#define GL_VERTEX_PROGRAM_NV                                          0x8620
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV                         0x8DA2
+#define GL_VERTEX_PROGRAM_POINT_SIZE                                  0x8642
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB                              0x8642
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV                               0x8642
+#define GL_VERTEX_PROGRAM_POSITION_MESA                               0x8BB4
+#define GL_VERTEX_PROGRAM_TWO_SIDE                                    0x8643
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB                                0x8643
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV                                 0x8643
+#define GL_VERTEX_SHADER                                              0x8B31
+#define GL_VERTEX_SHADER_ARB                                          0x8B31
+#define GL_VERTEX_SHADER_BINDING_EXT                                  0x8781
+#define GL_VERTEX_SHADER_BIT                                          0x00000001
+#define GL_VERTEX_SHADER_BIT_EXT                                      0x00000001
+#define GL_VERTEX_SHADER_EXT                                          0x8780
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT                             0x87CF
+#define GL_VERTEX_SHADER_INVARIANTS_EXT                               0x87D1
+#define GL_VERTEX_SHADER_LOCALS_EXT                                   0x87D3
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT                          0x87D2
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT                                0x87D4
+#define GL_VERTEX_SHADER_VARIANTS_EXT                                 0x87D0
+#define GL_VERTEX_SOURCE_ATI                                          0x8774
+#define GL_VERTEX_STATE_PROGRAM_NV                                    0x8621
+#define GL_VERTEX_STREAM0_ATI                                         0x876C
+#define GL_VERTEX_STREAM1_ATI                                         0x876D
+#define GL_VERTEX_STREAM2_ATI                                         0x876E
+#define GL_VERTEX_STREAM3_ATI                                         0x876F
+#define GL_VERTEX_STREAM4_ATI                                         0x8770
+#define GL_VERTEX_STREAM5_ATI                                         0x8771
+#define GL_VERTEX_STREAM6_ATI                                         0x8772
+#define GL_VERTEX_STREAM7_ATI                                         0x8773
+#define GL_VERTEX_SUBROUTINE                                          0x92E8
+#define GL_VERTEX_SUBROUTINE_UNIFORM                                  0x92EE
+#define GL_VERTEX_TEXTURE                                             0x829B
+#define GL_VERTEX_WEIGHTING_EXT                                       0x8509
+#define GL_VERTEX_WEIGHT_ARRAY_EXT                                    0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT                            0x8510
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT                               0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT                             0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT                               0x850E
+#define GL_VERTICAL_LINE_TO_NV                                        0x08
+#define GL_VIBRANCE_BIAS_NV                                           0x8719
+#define GL_VIBRANCE_SCALE_NV                                          0x8713
+#define GL_VIDEO_BUFFER_BINDING_NV                                    0x9021
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV                            0x902D
+#define GL_VIDEO_BUFFER_NV                                            0x9020
+#define GL_VIDEO_BUFFER_PITCH_NV                                      0x9028
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV                        0x903B
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV                        0x903A
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV                              0x9039
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV                               0x9038
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV                            0x903C
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV                          0x9026
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV                           0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV                              0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV                              0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV                           0x902C
+#define GL_VIEWPORT                                                   0x0BA2
+#define GL_VIEWPORT_BIT                                               0x00000800
+#define GL_VIEWPORT_BOUNDS_RANGE                                      0x825D
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX                            0x825F
+#define GL_VIEWPORT_SUBPIXEL_BITS                                     0x825C
+#define GL_VIEW_CLASS_128_BITS                                        0x82C4
+#define GL_VIEW_CLASS_16_BITS                                         0x82CA
+#define GL_VIEW_CLASS_24_BITS                                         0x82C9
+#define GL_VIEW_CLASS_32_BITS                                         0x82C8
+#define GL_VIEW_CLASS_48_BITS                                         0x82C7
+#define GL_VIEW_CLASS_64_BITS                                         0x82C6
+#define GL_VIEW_CLASS_8_BITS                                          0x82CB
+#define GL_VIEW_CLASS_96_BITS                                         0x82C5
+#define GL_VIEW_CLASS_BPTC_FLOAT                                      0x82D3
+#define GL_VIEW_CLASS_BPTC_UNORM                                      0x82D2
+#define GL_VIEW_CLASS_RGTC1_RED                                       0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG                                        0x82D1
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB                                   0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA                                  0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA                                  0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA                                  0x82CF
+#define GL_VIEW_COMPATIBILITY_CLASS                                   0x82B6
+#define GL_VIRTUAL_PAGE_SIZE_X_AMD                                    0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_AMD                                    0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_AMD                                    0x9197
+#define GL_VOLATILE_APPLE                                             0x8A1A
+#define GL_WAIT_FAILED                                                0x911D
+#define GL_WAIT_FAILED_APPLE                                          0x911D
+#define GL_WEIGHT_ARRAY_ARB                                           0x86AD
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING                                0x889E
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB                            0x889E
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES                            0x889E
+#define GL_WEIGHT_ARRAY_OES                                           0x86AD
+#define GL_WEIGHT_ARRAY_POINTER_ARB                                   0x86AC
+#define GL_WEIGHT_ARRAY_POINTER_OES                                   0x86AC
+#define GL_WEIGHT_ARRAY_SIZE_ARB                                      0x86AB
+#define GL_WEIGHT_ARRAY_SIZE_OES                                      0x86AB
+#define GL_WEIGHT_ARRAY_STRIDE_ARB                                    0x86AA
+#define GL_WEIGHT_ARRAY_STRIDE_OES                                    0x86AA
+#define GL_WEIGHT_ARRAY_TYPE_ARB                                      0x86A9
+#define GL_WEIGHT_ARRAY_TYPE_OES                                      0x86A9
+#define GL_WEIGHT_SUM_UNITY_ARB                                       0x86A6
+#define GL_WIDE_LINE_HINT_PGI                                         0x1A222
+#define GL_WRAP_BORDER_SUN                                            0x81D4
+#define GL_WRITEONLY_RENDERING_QCOM                                   0x8823
+#define GL_WRITE_DISCARD_NV                                           0x88BE
+#define GL_WRITE_ONLY                                                 0x88B9
+#define GL_WRITE_ONLY_ARB                                             0x88B9
+#define GL_WRITE_ONLY_OES                                             0x88B9
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV                           0x887A
+#define GL_WRITE_PIXEL_DATA_RANGE_NV                                  0x8878
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV                          0x887C
+#define GL_W_EXT                                                      0x87D8
+#define GL_XOR                                                        0x1506
+#define GL_X_EXT                                                      0x87D5
+#define GL_YCBAYCR8A_4224_NV                                          0x9032
+#define GL_YCBCR_422_APPLE                                            0x85B9
+#define GL_YCBCR_MESA                                                 0x8757
+#define GL_YCBYCR8_422_NV                                             0x9031
+#define GL_YCRCBA_SGIX                                                0x8319
+#define GL_YCRCB_422_SGIX                                             0x81BB
+#define GL_YCRCB_444_SGIX                                             0x81BC
+#define GL_YCRCB_SGIX                                                 0x8318
+#define GL_Y_EXT                                                      0x87D6
+#define GL_Z400_BINARY_AMD                                            0x8740
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV                   0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV                                   0x9037
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV                              0x9035
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV                   0x9034
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV                              0x9033
+#define GL_ZERO                                                       0
+#define GL_ZERO_EXT                                                   0x87DD
+#define GL_ZOOM_X                                                     0x0D16
+#define GL_ZOOM_Y                                                     0x0D17
+#define GL_Z_EXT                                                      0x87D7
+
+void       GLAPIENTRY glAccum(GLenum,GLfloat);
+void       GLAPIENTRY glAlphaFunc(GLenum,GLfloat);
+GLboolean  GLAPIENTRY glAreTexturesResident(GLsizei,const GLuint*,GLboolean*);
+void       GLAPIENTRY glArrayElement(GLint);
+void       GLAPIENTRY glBegin(GLenum);
+void       GLAPIENTRY glBindTexture(GLenum,GLuint);
+void       GLAPIENTRY glBitmap(GLsizei,GLsizei,GLfloat,GLfloat,GLfloat,GLfloat,const GLubyte*);
+void       GLAPIENTRY glBlendFunc(GLenum,GLenum);
+void       GLAPIENTRY glCallList(GLuint);
+void       GLAPIENTRY glCallLists(GLsizei,GLenum,const GLvoid*);
+void       GLAPIENTRY glClear(GLbitfield);
+void       GLAPIENTRY glClearAccum(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glClearColor(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glClearDepth(GLdouble);
+void       GLAPIENTRY glClearIndex(GLfloat);
+void       GLAPIENTRY glClearStencil(GLint);
+void       GLAPIENTRY glClipPlane(GLenum,const GLdouble*);
+void       GLAPIENTRY glColor3b(GLbyte,GLbyte,GLbyte);
+void       GLAPIENTRY glColor3bv(const GLbyte*);
+void       GLAPIENTRY glColor3d(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glColor3dv(const GLdouble*);
+void       GLAPIENTRY glColor3f(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glColor3fv(const GLfloat*);
+void       GLAPIENTRY glColor3i(GLint,GLint,GLint);
+void       GLAPIENTRY glColor3iv(const GLint*);
+void       GLAPIENTRY glColor3s(GLshort,GLshort,GLshort);
+void       GLAPIENTRY glColor3sv(const GLshort*);
+void       GLAPIENTRY glColor3ub(GLubyte,GLubyte,GLubyte);
+void       GLAPIENTRY glColor3ubv(const GLubyte*);
+void       GLAPIENTRY glColor3ui(GLuint,GLuint,GLuint);
+void       GLAPIENTRY glColor3uiv(const GLuint*);
+void       GLAPIENTRY glColor3us(GLushort,GLushort,GLushort);
+void       GLAPIENTRY glColor3usv(const GLushort*);
+void       GLAPIENTRY glColor4b(GLbyte,GLbyte,GLbyte,GLbyte);
+void       GLAPIENTRY glColor4bv(const GLbyte*);
+void       GLAPIENTRY glColor4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glColor4dv(const GLdouble*);
+void       GLAPIENTRY glColor4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glColor4fv(const GLfloat*);
+void       GLAPIENTRY glColor4i(GLint,GLint,GLint,GLint);
+void       GLAPIENTRY glColor4iv(const GLint*);
+void       GLAPIENTRY glColor4s(GLshort,GLshort,GLshort,GLshort);
+void       GLAPIENTRY glColor4sv(const GLshort*);
+void       GLAPIENTRY glColor4ub(GLubyte,GLubyte,GLubyte,GLubyte);
+void       GLAPIENTRY glColor4ubv(const GLubyte*);
+void       GLAPIENTRY glColor4ui(GLuint,GLuint,GLuint,GLuint);
+void       GLAPIENTRY glColor4uiv(const GLuint*);
+void       GLAPIENTRY glColor4us(GLushort,GLushort,GLushort,GLushort);
+void       GLAPIENTRY glColor4usv(const GLushort*);
+void       GLAPIENTRY glColorMask(GLboolean,GLboolean,GLboolean,GLboolean);
+void       GLAPIENTRY glColorMaterial(GLenum,GLenum);
+void       GLAPIENTRY glColorPointer(GLint,GLenum,GLsizei,const GLvoid*);
+void       GLAPIENTRY glCopyPixels(GLint,GLint,GLsizei,GLsizei,GLenum);
+void       GLAPIENTRY glCopyTexImage1D(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+void       GLAPIENTRY glCopyTexImage2D(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+void       GLAPIENTRY glCopyTexSubImage1D(GLenum,GLint,GLint,GLint,GLint,GLsizei);
+void       GLAPIENTRY glCopyTexSubImage2D(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+void       GLAPIENTRY glCullFace(GLenum);
+GLint      GLAPIENTRY glDebugEntry(GLint,GLint);
+void       GLAPIENTRY glDeleteLists(GLuint,GLsizei);
+void       GLAPIENTRY glDeleteTextures(GLsizei,const GLuint*);
+void       GLAPIENTRY glDepthFunc(GLenum);
+void       GLAPIENTRY glDepthMask(GLboolean);
+void       GLAPIENTRY glDepthRange(GLdouble,GLdouble);
+void       GLAPIENTRY glDisable(GLenum);
+void       GLAPIENTRY glDisableClientState(GLenum);
+void       GLAPIENTRY glDrawArrays(GLenum,GLint,GLsizei);
+void       GLAPIENTRY glDrawBuffer(GLenum);
+void       GLAPIENTRY glDrawElements(GLenum,GLsizei,GLenum,const GLvoid*);
+void       GLAPIENTRY glDrawPixels(GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+void       GLAPIENTRY glEdgeFlag(GLboolean);
+void       GLAPIENTRY glEdgeFlagPointer(GLsizei,const GLvoid*);
+void       GLAPIENTRY glEdgeFlagv(const GLboolean*);
+void       GLAPIENTRY glEnable(GLenum);
+void       GLAPIENTRY glEnableClientState(GLenum);
+void       GLAPIENTRY glEnd(void);
+void       GLAPIENTRY glEndList(void);
+void       GLAPIENTRY glEvalCoord1d(GLdouble);
+void       GLAPIENTRY glEvalCoord1dv(const GLdouble*);
+void       GLAPIENTRY glEvalCoord1f(GLfloat);
+void       GLAPIENTRY glEvalCoord1fv(const GLfloat*);
+void       GLAPIENTRY glEvalCoord2d(GLdouble,GLdouble);
+void       GLAPIENTRY glEvalCoord2dv(const GLdouble*);
+void       GLAPIENTRY glEvalCoord2f(GLfloat,GLfloat);
+void       GLAPIENTRY glEvalCoord2fv(const GLfloat*);
+void       GLAPIENTRY glEvalMesh1(GLenum,GLint,GLint);
+void       GLAPIENTRY glEvalMesh2(GLenum,GLint,GLint,GLint,GLint);
+void       GLAPIENTRY glEvalPoint1(GLint);
+void       GLAPIENTRY glEvalPoint2(GLint,GLint);
+void       GLAPIENTRY glFeedbackBuffer(GLsizei,GLenum,GLfloat*);
+void       GLAPIENTRY glFinish(void);
+void       GLAPIENTRY glFlush(void);
+void       GLAPIENTRY glFogf(GLenum,GLfloat);
+void       GLAPIENTRY glFogfv(GLenum,const GLfloat*);
+void       GLAPIENTRY glFogi(GLenum,GLint);
+void       GLAPIENTRY glFogiv(GLenum,const GLint*);
+void       GLAPIENTRY glFrontFace(GLenum);
+void       GLAPIENTRY glFrustum(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+GLuint     GLAPIENTRY glGenLists(GLsizei);
+void       GLAPIENTRY glGenTextures(GLsizei,GLuint*);
+void       GLAPIENTRY glGetBooleanv(GLenum,GLboolean*);
+void       GLAPIENTRY glGetClipPlane(GLenum,GLdouble*);
+void       GLAPIENTRY glGetDoublev(GLenum,GLdouble*);
+GLenum     GLAPIENTRY glGetError(void);
+void       GLAPIENTRY glGetFloatv(GLenum,GLfloat*);
+void       GLAPIENTRY glGetIntegerv(GLenum,GLint*);
+void       GLAPIENTRY glGetLightfv(GLenum,GLenum,GLfloat*);
+void       GLAPIENTRY glGetLightiv(GLenum,GLenum,GLint*);
+void       GLAPIENTRY glGetMapdv(GLenum,GLenum,GLdouble*);
+void       GLAPIENTRY glGetMapfv(GLenum,GLenum,GLfloat*);
+void       GLAPIENTRY glGetMapiv(GLenum,GLenum,GLint*);
+void       GLAPIENTRY glGetMaterialfv(GLenum,GLenum,GLfloat*);
+void       GLAPIENTRY glGetMaterialiv(GLenum,GLenum,GLint*);
+void       GLAPIENTRY glGetPixelMapfv(GLenum,GLfloat*);
+void       GLAPIENTRY glGetPixelMapuiv(GLenum,GLuint*);
+void       GLAPIENTRY glGetPixelMapusv(GLenum,GLushort*);
+void       GLAPIENTRY glGetPointerv(GLenum,GLvoid**);
+void       GLAPIENTRY glGetPolygonStipple(GLubyte*);
+const GLubyte * GLAPIENTRY glGetString(GLenum);
+void       GLAPIENTRY glGetTexEnvfv(GLenum,GLenum,GLfloat*);
+void       GLAPIENTRY glGetTexEnviv(GLenum,GLenum,GLint*);
+void       GLAPIENTRY glGetTexGendv(GLenum,GLenum,GLdouble*);
+void       GLAPIENTRY glGetTexGenfv(GLenum,GLenum,GLfloat*);
+void       GLAPIENTRY glGetTexGeniv(GLenum,GLenum,GLint*);
+void       GLAPIENTRY glGetTexImage(GLenum,GLint,GLenum,GLenum,GLvoid*);
+void       GLAPIENTRY glGetTexLevelParameterfv(GLenum,GLint,GLenum,GLfloat*);
+void       GLAPIENTRY glGetTexLevelParameteriv(GLenum,GLint,GLenum,GLint*);
+void       GLAPIENTRY glGetTexParameterfv(GLenum,GLenum,GLfloat*);
+void       GLAPIENTRY glGetTexParameteriv(GLenum,GLenum,GLint*);
+void       GLAPIENTRY glHint(GLenum,GLenum);
+void       GLAPIENTRY glIndexMask(GLuint);
+void       GLAPIENTRY glIndexPointer(GLenum,GLsizei,const GLvoid*);
+void       GLAPIENTRY glIndexd(GLdouble);
+void       GLAPIENTRY glIndexdv(const GLdouble*);
+void       GLAPIENTRY glIndexf(GLfloat);
+void       GLAPIENTRY glIndexfv(const GLfloat*);
+void       GLAPIENTRY glIndexi(GLint);
+void       GLAPIENTRY glIndexiv(const GLint*);
+void       GLAPIENTRY glIndexs(GLshort);
+void       GLAPIENTRY glIndexsv(const GLshort*);
+void       GLAPIENTRY glIndexub(GLubyte);
+void       GLAPIENTRY glIndexubv(const GLubyte*);
+void       GLAPIENTRY glInitNames(void);
+void       GLAPIENTRY glInterleavedArrays(GLenum,GLsizei,const GLvoid*);
+GLboolean  GLAPIENTRY glIsEnabled(GLenum);
+GLboolean  GLAPIENTRY glIsList(GLuint);
+GLboolean  GLAPIENTRY glIsTexture(GLuint);
+void       GLAPIENTRY glLightModelf(GLenum,GLfloat);
+void       GLAPIENTRY glLightModelfv(GLenum,const GLfloat*);
+void       GLAPIENTRY glLightModeli(GLenum,GLint);
+void       GLAPIENTRY glLightModeliv(GLenum,const GLint*);
+void       GLAPIENTRY glLightf(GLenum,GLenum,GLfloat);
+void       GLAPIENTRY glLightfv(GLenum,GLenum,const GLfloat*);
+void       GLAPIENTRY glLighti(GLenum,GLenum,GLint);
+void       GLAPIENTRY glLightiv(GLenum,GLenum,const GLint*);
+void       GLAPIENTRY glLineStipple(GLint,GLushort);
+void       GLAPIENTRY glLineWidth(GLfloat);
+void       GLAPIENTRY glListBase(GLuint);
+void       GLAPIENTRY glLoadIdentity(void);
+void       GLAPIENTRY glLoadMatrixd(const GLdouble*);
+void       GLAPIENTRY glLoadMatrixf(const GLfloat*);
+void       GLAPIENTRY glLoadName(GLuint);
+void       GLAPIENTRY glLogicOp(GLenum);
+void       GLAPIENTRY glMap1d(GLenum,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+void       GLAPIENTRY glMap1f(GLenum,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+void       GLAPIENTRY glMap2d(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+void       GLAPIENTRY glMap2f(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+void       GLAPIENTRY glMapGrid1d(GLint,GLdouble,GLdouble);
+void       GLAPIENTRY glMapGrid1f(GLint,GLfloat,GLfloat);
+void       GLAPIENTRY glMapGrid2d(GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble);
+void       GLAPIENTRY glMapGrid2f(GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat);
+void       GLAPIENTRY glMaterialf(GLenum,GLenum,GLfloat);
+void       GLAPIENTRY glMaterialfv(GLenum,GLenum,const GLfloat*);
+void       GLAPIENTRY glMateriali(GLenum,GLenum,GLint);
+void       GLAPIENTRY glMaterialiv(GLenum,GLenum,const GLint*);
+void       GLAPIENTRY glMatrixMode(GLenum);
+void       GLAPIENTRY glMultMatrixd(const GLdouble*);
+void       GLAPIENTRY glMultMatrixf(const GLfloat*);
+void       GLAPIENTRY glNewList(GLuint,GLenum);
+void       GLAPIENTRY glNormal3b(GLbyte,GLbyte,GLbyte);
+void       GLAPIENTRY glNormal3bv(const GLbyte*);
+void       GLAPIENTRY glNormal3d(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glNormal3dv(const GLdouble*);
+void       GLAPIENTRY glNormal3f(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glNormal3fv(const GLfloat*);
+void       GLAPIENTRY glNormal3i(GLint,GLint,GLint);
+void       GLAPIENTRY glNormal3iv(const GLint*);
+void       GLAPIENTRY glNormal3s(GLshort,GLshort,GLshort);
+void       GLAPIENTRY glNormal3sv(const GLshort*);
+void       GLAPIENTRY glNormalPointer(GLenum,GLsizei,const GLvoid*);
+void       GLAPIENTRY glOrtho(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glPassThrough(GLfloat);
+void       GLAPIENTRY glPixelMapfv(GLenum,GLint,const GLfloat*);
+void       GLAPIENTRY glPixelMapuiv(GLenum,GLint,const GLuint*);
+void       GLAPIENTRY glPixelMapusv(GLenum,GLint,const GLushort*);
+void       GLAPIENTRY glPixelStoref(GLenum,GLfloat);
+void       GLAPIENTRY glPixelStorei(GLenum,GLint);
+void       GLAPIENTRY glPixelTransferf(GLenum,GLfloat);
+void       GLAPIENTRY glPixelTransferi(GLenum,GLint);
+void       GLAPIENTRY glPixelZoom(GLfloat,GLfloat);
+void       GLAPIENTRY glPointSize(GLfloat);
+void       GLAPIENTRY glPolygonMode(GLenum,GLenum);
+void       GLAPIENTRY glPolygonOffset(GLfloat,GLfloat);
+void       GLAPIENTRY glPolygonStipple(const GLubyte*);
+void       GLAPIENTRY glPopAttrib(void);
+void       GLAPIENTRY glPopClientAttrib(void);
+void       GLAPIENTRY glPopMatrix(void);
+void       GLAPIENTRY glPopName(void);
+void       GLAPIENTRY glPrioritizeTextures(GLsizei,const GLuint*,const GLfloat*);
+void       GLAPIENTRY glPushAttrib(GLbitfield);
+void       GLAPIENTRY glPushClientAttrib(GLbitfield);
+void       GLAPIENTRY glPushMatrix(void);
+void       GLAPIENTRY glPushName(GLuint);
+void       GLAPIENTRY glRasterPos2d(GLdouble,GLdouble);
+void       GLAPIENTRY glRasterPos2dv(const GLdouble*);
+void       GLAPIENTRY glRasterPos2f(GLfloat,GLfloat);
+void       GLAPIENTRY glRasterPos2fv(const GLfloat*);
+void       GLAPIENTRY glRasterPos2i(GLint,GLint);
+void       GLAPIENTRY glRasterPos2iv(const GLint*);
+void       GLAPIENTRY glRasterPos2s(GLshort,GLshort);
+void       GLAPIENTRY glRasterPos2sv(const GLshort*);
+void       GLAPIENTRY glRasterPos3d(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glRasterPos3dv(const GLdouble*);
+void       GLAPIENTRY glRasterPos3f(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glRasterPos3fv(const GLfloat*);
+void       GLAPIENTRY glRasterPos3i(GLint,GLint,GLint);
+void       GLAPIENTRY glRasterPos3iv(const GLint*);
+void       GLAPIENTRY glRasterPos3s(GLshort,GLshort,GLshort);
+void       GLAPIENTRY glRasterPos3sv(const GLshort*);
+void       GLAPIENTRY glRasterPos4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glRasterPos4dv(const GLdouble*);
+void       GLAPIENTRY glRasterPos4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glRasterPos4fv(const GLfloat*);
+void       GLAPIENTRY glRasterPos4i(GLint,GLint,GLint,GLint);
+void       GLAPIENTRY glRasterPos4iv(const GLint*);
+void       GLAPIENTRY glRasterPos4s(GLshort,GLshort,GLshort,GLshort);
+void       GLAPIENTRY glRasterPos4sv(const GLshort*);
+void       GLAPIENTRY glReadBuffer(GLenum);
+void       GLAPIENTRY glReadPixels(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*);
+void       GLAPIENTRY glRectd(GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glRectdv(const GLdouble*,const GLdouble*);
+void       GLAPIENTRY glRectf(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glRectfv(const GLfloat*,const GLfloat*);
+void       GLAPIENTRY glRecti(GLint,GLint,GLint,GLint);
+void       GLAPIENTRY glRectiv(const GLint*,const GLint*);
+void       GLAPIENTRY glRects(GLshort,GLshort,GLshort,GLshort);
+void       GLAPIENTRY glRectsv(const GLshort*,const GLshort*);
+GLint      GLAPIENTRY glRenderMode(GLenum);
+void       GLAPIENTRY glRotated(GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glRotatef(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glScaled(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glScalef(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glScissor(GLint,GLint,GLsizei,GLsizei);
+void       GLAPIENTRY glSelectBuffer(GLsizei,GLuint*);
+void       GLAPIENTRY glShadeModel(GLenum);
+void       GLAPIENTRY glStencilFunc(GLenum,GLint,GLuint);
+void       GLAPIENTRY glStencilMask(GLuint);
+void       GLAPIENTRY glStencilOp(GLenum,GLenum,GLenum);
+void       GLAPIENTRY glTexCoord1d(GLdouble);
+void       GLAPIENTRY glTexCoord1dv(const GLdouble*);
+void       GLAPIENTRY glTexCoord1f(GLfloat);
+void       GLAPIENTRY glTexCoord1fv(const GLfloat*);
+void       GLAPIENTRY glTexCoord1i(GLint);
+void       GLAPIENTRY glTexCoord1iv(const GLint*);
+void       GLAPIENTRY glTexCoord1s(GLshort);
+void       GLAPIENTRY glTexCoord1sv(const GLshort*);
+void       GLAPIENTRY glTexCoord2d(GLdouble,GLdouble);
+void       GLAPIENTRY glTexCoord2dv(const GLdouble*);
+void       GLAPIENTRY glTexCoord2f(GLfloat,GLfloat);
+void       GLAPIENTRY glTexCoord2fv(const GLfloat*);
+void       GLAPIENTRY glTexCoord2i(GLint,GLint);
+void       GLAPIENTRY glTexCoord2iv(const GLint*);
+void       GLAPIENTRY glTexCoord2s(GLshort,GLshort);
+void       GLAPIENTRY glTexCoord2sv(const GLshort*);
+void       GLAPIENTRY glTexCoord3d(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glTexCoord3dv(const GLdouble*);
+void       GLAPIENTRY glTexCoord3f(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glTexCoord3fv(const GLfloat*);
+void       GLAPIENTRY glTexCoord3i(GLint,GLint,GLint);
+void       GLAPIENTRY glTexCoord3iv(const GLint*);
+void       GLAPIENTRY glTexCoord3s(GLshort,GLshort,GLshort);
+void       GLAPIENTRY glTexCoord3sv(const GLshort*);
+void       GLAPIENTRY glTexCoord4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glTexCoord4dv(const GLdouble*);
+void       GLAPIENTRY glTexCoord4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glTexCoord4fv(const GLfloat*);
+void       GLAPIENTRY glTexCoord4i(GLint,GLint,GLint,GLint);
+void       GLAPIENTRY glTexCoord4iv(const GLint*);
+void       GLAPIENTRY glTexCoord4s(GLshort,GLshort,GLshort,GLshort);
+void       GLAPIENTRY glTexCoord4sv(const GLshort*);
+void       GLAPIENTRY glTexCoordPointer(GLint,GLenum,GLsizei,const GLvoid*);
+void       GLAPIENTRY glTexEnvf(GLenum,GLenum,GLfloat);
+void       GLAPIENTRY glTexEnvfv(GLenum,GLenum,const GLfloat*);
+void       GLAPIENTRY glTexEnvi(GLenum,GLenum,GLint);
+void       GLAPIENTRY glTexEnviv(GLenum,GLenum,const GLint*);
+void       GLAPIENTRY glTexGend(GLenum,GLenum,GLdouble);
+void       GLAPIENTRY glTexGendv(GLenum,GLenum,const GLdouble*);
+void       GLAPIENTRY glTexGenf(GLenum,GLenum,GLfloat);
+void       GLAPIENTRY glTexGenfv(GLenum,GLenum,const GLfloat*);
+void       GLAPIENTRY glTexGeni(GLenum,GLenum,GLint);
+void       GLAPIENTRY glTexGeniv(GLenum,GLenum,const GLint*);
+void       GLAPIENTRY glTexImage1D(GLenum,GLint,GLint,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+void       GLAPIENTRY glTexImage2D(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+void       GLAPIENTRY glTexParameterf(GLenum,GLenum,GLfloat);
+void       GLAPIENTRY glTexParameterfv(GLenum,GLenum,const GLfloat*);
+void       GLAPIENTRY glTexParameteri(GLenum,GLenum,GLint);
+void       GLAPIENTRY glTexParameteriv(GLenum,GLenum,const GLint*);
+void       GLAPIENTRY glTexSubImage1D(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+void       GLAPIENTRY glTexSubImage2D(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+void       GLAPIENTRY glTranslated(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glTranslatef(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glVertex2d(GLdouble,GLdouble);
+void       GLAPIENTRY glVertex2dv(const GLdouble*);
+void       GLAPIENTRY glVertex2f(GLfloat,GLfloat);
+void       GLAPIENTRY glVertex2fv(const GLfloat*);
+void       GLAPIENTRY glVertex2i(GLint,GLint);
+void       GLAPIENTRY glVertex2iv(const GLint*);
+void       GLAPIENTRY glVertex2s(GLshort,GLshort);
+void       GLAPIENTRY glVertex2sv(const GLshort*);
+void       GLAPIENTRY glVertex3d(GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glVertex3dv(const GLdouble*);
+void       GLAPIENTRY glVertex3f(GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glVertex3fv(const GLfloat*);
+void       GLAPIENTRY glVertex3i(GLint,GLint,GLint);
+void       GLAPIENTRY glVertex3iv(const GLint*);
+void       GLAPIENTRY glVertex3s(GLshort,GLshort,GLshort);
+void       GLAPIENTRY glVertex3sv(const GLshort*);
+void       GLAPIENTRY glVertex4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void       GLAPIENTRY glVertex4dv(const GLdouble*);
+void       GLAPIENTRY glVertex4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void       GLAPIENTRY glVertex4fv(const GLfloat*);
+void       GLAPIENTRY glVertex4i(GLint,GLint,GLint,GLint);
+void       GLAPIENTRY glVertex4iv(const GLint*);
+void       GLAPIENTRY glVertex4s(GLshort,GLshort,GLshort,GLshort);
+void       GLAPIENTRY glVertex4sv(const GLshort*);
+void       GLAPIENTRY glVertexPointer(GLint,GLenum,GLsizei,const GLvoid*);
+void       GLAPIENTRY glViewport(GLint,GLint,GLsizei,GLsizei);
+
+#endif /* __WINE_WGL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h
new file mode 100644
index 0000000..8d23501
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h
@@ -0,0 +1,2862 @@
+/* Automatically generated from http://www.opengl.org/registry/api files; DO NOT EDIT! */
+
+#ifndef __WINE_WGL_DRIVER_H
+#define __WINE_WGL_DRIVER_H
+
+#ifndef WINE_GLAPI
+#define WINE_GLAPI
+#endif
+
+#define WINE_WGL_DRIVER_VERSION 10
+
+struct wgl_context;
+struct wgl_pbuffer;
+
+struct opengl_funcs
+{
+    struct
+    {
+        BOOL       (WINE_GLAPI *p_wglCopyContext)(struct wgl_context *,struct wgl_context *,UINT);
+        struct wgl_context * (WINE_GLAPI *p_wglCreateContext)(HDC);
+        void       (WINE_GLAPI *p_wglDeleteContext)(struct wgl_context *);
+        INT        (WINE_GLAPI *p_wglDescribePixelFormat)(HDC,INT,UINT,PIXELFORMATDESCRIPTOR *);
+        INT        (WINE_GLAPI *p_wglGetPixelFormat)(HDC);
+        PROC       (WINE_GLAPI *p_wglGetProcAddress)(LPCSTR);
+        BOOL       (WINE_GLAPI *p_wglMakeCurrent)(HDC,struct wgl_context *);
+        BOOL       (WINE_GLAPI *p_wglSetPixelFormat)(HDC,INT,const PIXELFORMATDESCRIPTOR *);
+        BOOL       (WINE_GLAPI *p_wglShareLists)(struct wgl_context *,struct wgl_context *);
+        BOOL       (WINE_GLAPI *p_wglSwapBuffers)(HDC);
+    } wgl;
+
+    struct
+    {
+        void       (WINE_GLAPI *p_glAccum)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glAlphaFunc)(GLenum,GLfloat);
+        GLboolean  (WINE_GLAPI *p_glAreTexturesResident)(GLsizei,const GLuint*,GLboolean*);
+        void       (WINE_GLAPI *p_glArrayElement)(GLint);
+        void       (WINE_GLAPI *p_glBegin)(GLenum);
+        void       (WINE_GLAPI *p_glBindTexture)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBitmap)(GLsizei,GLsizei,GLfloat,GLfloat,GLfloat,GLfloat,const GLubyte*);
+        void       (WINE_GLAPI *p_glBlendFunc)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glCallList)(GLuint);
+        void       (WINE_GLAPI *p_glCallLists)(GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glClear)(GLbitfield);
+        void       (WINE_GLAPI *p_glClearAccum)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glClearColor)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glClearDepth)(GLdouble);
+        void       (WINE_GLAPI *p_glClearIndex)(GLfloat);
+        void       (WINE_GLAPI *p_glClearStencil)(GLint);
+        void       (WINE_GLAPI *p_glClipPlane)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glColor3b)(GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glColor3bv)(const GLbyte*);
+        void       (WINE_GLAPI *p_glColor3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glColor3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glColor3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glColor3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glColor3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glColor3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glColor3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glColor3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glColor3ub)(GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glColor3ubv)(const GLubyte*);
+        void       (WINE_GLAPI *p_glColor3ui)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glColor3uiv)(const GLuint*);
+        void       (WINE_GLAPI *p_glColor3us)(GLushort,GLushort,GLushort);
+        void       (WINE_GLAPI *p_glColor3usv)(const GLushort*);
+        void       (WINE_GLAPI *p_glColor4b)(GLbyte,GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glColor4bv)(const GLbyte*);
+        void       (WINE_GLAPI *p_glColor4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glColor4dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glColor4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glColor4fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glColor4i)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glColor4iv)(const GLint*);
+        void       (WINE_GLAPI *p_glColor4s)(GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glColor4sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glColor4ub)(GLubyte,GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glColor4ubv)(const GLubyte*);
+        void       (WINE_GLAPI *p_glColor4ui)(GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glColor4uiv)(const GLuint*);
+        void       (WINE_GLAPI *p_glColor4us)(GLushort,GLushort,GLushort,GLushort);
+        void       (WINE_GLAPI *p_glColor4usv)(const GLushort*);
+        void       (WINE_GLAPI *p_glColorMask)(GLboolean,GLboolean,GLboolean,GLboolean);
+        void       (WINE_GLAPI *p_glColorMaterial)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glColorPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCopyPixels)(GLint,GLint,GLsizei,GLsizei,GLenum);
+        void       (WINE_GLAPI *p_glCopyTexImage1D)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyTexImage2D)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyTexSubImage1D)(GLenum,GLint,GLint,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTexSubImage2D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCullFace)(GLenum);
+        void       (WINE_GLAPI *p_glDeleteLists)(GLuint,GLsizei);
+        void       (WINE_GLAPI *p_glDeleteTextures)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDepthFunc)(GLenum);
+        void       (WINE_GLAPI *p_glDepthMask)(GLboolean);
+        void       (WINE_GLAPI *p_glDepthRange)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glDisable)(GLenum);
+        void       (WINE_GLAPI *p_glDisableClientState)(GLenum);
+        void       (WINE_GLAPI *p_glDrawArrays)(GLenum,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glDrawBuffer)(GLenum);
+        void       (WINE_GLAPI *p_glDrawElements)(GLenum,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glDrawPixels)(GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glEdgeFlag)(GLboolean);
+        void       (WINE_GLAPI *p_glEdgeFlagPointer)(GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glEdgeFlagv)(const GLboolean*);
+        void       (WINE_GLAPI *p_glEnable)(GLenum);
+        void       (WINE_GLAPI *p_glEnableClientState)(GLenum);
+        void       (WINE_GLAPI *p_glEnd)(void);
+        void       (WINE_GLAPI *p_glEndList)(void);
+        void       (WINE_GLAPI *p_glEvalCoord1d)(GLdouble);
+        void       (WINE_GLAPI *p_glEvalCoord1dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glEvalCoord1f)(GLfloat);
+        void       (WINE_GLAPI *p_glEvalCoord1fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glEvalCoord2d)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glEvalCoord2dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glEvalCoord2f)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glEvalCoord2fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glEvalMesh1)(GLenum,GLint,GLint);
+        void       (WINE_GLAPI *p_glEvalMesh2)(GLenum,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glEvalPoint1)(GLint);
+        void       (WINE_GLAPI *p_glEvalPoint2)(GLint,GLint);
+        void       (WINE_GLAPI *p_glFeedbackBuffer)(GLsizei,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glFinish)(void);
+        void       (WINE_GLAPI *p_glFlush)(void);
+        void       (WINE_GLAPI *p_glFogf)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glFogfv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glFogi)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glFogiv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glFrontFace)(GLenum);
+        void       (WINE_GLAPI *p_glFrustum)(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+        GLuint     (WINE_GLAPI *p_glGenLists)(GLsizei);
+        void       (WINE_GLAPI *p_glGenTextures)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGetBooleanv)(GLenum,GLboolean*);
+        void       (WINE_GLAPI *p_glGetClipPlane)(GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetDoublev)(GLenum,GLdouble*);
+        GLenum     (WINE_GLAPI *p_glGetError)(void);
+        void       (WINE_GLAPI *p_glGetFloatv)(GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetIntegerv)(GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetLightfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetLightiv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMapdv)(GLenum,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetMapfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMapiv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMaterialfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMaterialiv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetPixelMapfv)(GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPixelMapuiv)(GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetPixelMapusv)(GLenum,GLushort*);
+        void       (WINE_GLAPI *p_glGetPointerv)(GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetPolygonStipple)(GLubyte*);
+        const GLubyte * (WINE_GLAPI *p_glGetString)(GLenum);
+        void       (WINE_GLAPI *p_glGetTexEnvfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTexEnviv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTexGendv)(GLenum,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetTexGenfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTexGeniv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTexImage)(GLenum,GLint,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetTexLevelParameterfv)(GLenum,GLint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTexLevelParameteriv)(GLenum,GLint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTexParameterfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTexParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glHint)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glIndexMask)(GLuint);
+        void       (WINE_GLAPI *p_glIndexPointer)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glIndexd)(GLdouble);
+        void       (WINE_GLAPI *p_glIndexdv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glIndexf)(GLfloat);
+        void       (WINE_GLAPI *p_glIndexfv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glIndexi)(GLint);
+        void       (WINE_GLAPI *p_glIndexiv)(const GLint*);
+        void       (WINE_GLAPI *p_glIndexs)(GLshort);
+        void       (WINE_GLAPI *p_glIndexsv)(const GLshort*);
+        void       (WINE_GLAPI *p_glIndexub)(GLubyte);
+        void       (WINE_GLAPI *p_glIndexubv)(const GLubyte*);
+        void       (WINE_GLAPI *p_glInitNames)(void);
+        void       (WINE_GLAPI *p_glInterleavedArrays)(GLenum,GLsizei,const GLvoid*);
+        GLboolean  (WINE_GLAPI *p_glIsEnabled)(GLenum);
+        GLboolean  (WINE_GLAPI *p_glIsList)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsTexture)(GLuint);
+        void       (WINE_GLAPI *p_glLightModelf)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glLightModelfv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glLightModeli)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glLightModeliv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glLightf)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glLightfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glLighti)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glLightiv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glLineStipple)(GLint,GLushort);
+        void       (WINE_GLAPI *p_glLineWidth)(GLfloat);
+        void       (WINE_GLAPI *p_glListBase)(GLuint);
+        void       (WINE_GLAPI *p_glLoadIdentity)(void);
+        void       (WINE_GLAPI *p_glLoadMatrixd)(const GLdouble*);
+        void       (WINE_GLAPI *p_glLoadMatrixf)(const GLfloat*);
+        void       (WINE_GLAPI *p_glLoadName)(GLuint);
+        void       (WINE_GLAPI *p_glLogicOp)(GLenum);
+        void       (WINE_GLAPI *p_glMap1d)(GLenum,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+        void       (WINE_GLAPI *p_glMap1f)(GLenum,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glMap2d)(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+        void       (WINE_GLAPI *p_glMap2f)(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glMapGrid1d)(GLint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMapGrid1f)(GLint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMapGrid2d)(GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMapGrid2f)(GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMaterialf)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMaterialfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMateriali)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glMaterialiv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMatrixMode)(GLenum);
+        void       (WINE_GLAPI *p_glMultMatrixd)(const GLdouble*);
+        void       (WINE_GLAPI *p_glMultMatrixf)(const GLfloat*);
+        void       (WINE_GLAPI *p_glNewList)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glNormal3b)(GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glNormal3bv)(const GLbyte*);
+        void       (WINE_GLAPI *p_glNormal3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glNormal3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glNormal3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glNormal3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glNormal3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glNormal3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glNormal3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glNormal3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glNormalPointer)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glOrtho)(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glPassThrough)(GLfloat);
+        void       (WINE_GLAPI *p_glPixelMapfv)(GLenum,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glPixelMapuiv)(GLenum,GLint,const GLuint*);
+        void       (WINE_GLAPI *p_glPixelMapusv)(GLenum,GLint,const GLushort*);
+        void       (WINE_GLAPI *p_glPixelStoref)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPixelStorei)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPixelTransferf)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPixelTransferi)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPixelZoom)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glPointSize)(GLfloat);
+        void       (WINE_GLAPI *p_glPolygonMode)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glPolygonOffset)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glPolygonStipple)(const GLubyte*);
+        void       (WINE_GLAPI *p_glPopAttrib)(void);
+        void       (WINE_GLAPI *p_glPopClientAttrib)(void);
+        void       (WINE_GLAPI *p_glPopMatrix)(void);
+        void       (WINE_GLAPI *p_glPopName)(void);
+        void       (WINE_GLAPI *p_glPrioritizeTextures)(GLsizei,const GLuint*,const GLfloat*);
+        void       (WINE_GLAPI *p_glPushAttrib)(GLbitfield);
+        void       (WINE_GLAPI *p_glPushClientAttrib)(GLbitfield);
+        void       (WINE_GLAPI *p_glPushMatrix)(void);
+        void       (WINE_GLAPI *p_glPushName)(GLuint);
+        void       (WINE_GLAPI *p_glRasterPos2d)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glRasterPos2dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glRasterPos2f)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glRasterPos2fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glRasterPos2i)(GLint,GLint);
+        void       (WINE_GLAPI *p_glRasterPos2iv)(const GLint*);
+        void       (WINE_GLAPI *p_glRasterPos2s)(GLshort,GLshort);
+        void       (WINE_GLAPI *p_glRasterPos2sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glRasterPos3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glRasterPos3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glRasterPos3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glRasterPos3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glRasterPos3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glRasterPos3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glRasterPos3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glRasterPos3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glRasterPos4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glRasterPos4dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glRasterPos4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glRasterPos4fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glRasterPos4i)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glRasterPos4iv)(const GLint*);
+        void       (WINE_GLAPI *p_glRasterPos4s)(GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glRasterPos4sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glReadBuffer)(GLenum);
+        void       (WINE_GLAPI *p_glReadPixels)(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glRectd)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glRectdv)(const GLdouble*,const GLdouble*);
+        void       (WINE_GLAPI *p_glRectf)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glRectfv)(const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glRecti)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glRectiv)(const GLint*,const GLint*);
+        void       (WINE_GLAPI *p_glRects)(GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glRectsv)(const GLshort*,const GLshort*);
+        GLint      (WINE_GLAPI *p_glRenderMode)(GLenum);
+        void       (WINE_GLAPI *p_glRotated)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glRotatef)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glScaled)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glScalef)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glScissor)(GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glSelectBuffer)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glShadeModel)(GLenum);
+        void       (WINE_GLAPI *p_glStencilFunc)(GLenum,GLint,GLuint);
+        void       (WINE_GLAPI *p_glStencilMask)(GLuint);
+        void       (WINE_GLAPI *p_glStencilOp)(GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glTexCoord1d)(GLdouble);
+        void       (WINE_GLAPI *p_glTexCoord1dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glTexCoord1f)(GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord1fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord1i)(GLint);
+        void       (WINE_GLAPI *p_glTexCoord1iv)(const GLint*);
+        void       (WINE_GLAPI *p_glTexCoord1s)(GLshort);
+        void       (WINE_GLAPI *p_glTexCoord1sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glTexCoord2d)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glTexCoord2dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glTexCoord2f)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord2fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord2i)(GLint,GLint);
+        void       (WINE_GLAPI *p_glTexCoord2iv)(const GLint*);
+        void       (WINE_GLAPI *p_glTexCoord2s)(GLshort,GLshort);
+        void       (WINE_GLAPI *p_glTexCoord2sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glTexCoord3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glTexCoord3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glTexCoord3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glTexCoord3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glTexCoord3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glTexCoord3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glTexCoord4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glTexCoord4dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glTexCoord4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord4fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord4i)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glTexCoord4iv)(const GLint*);
+        void       (WINE_GLAPI *p_glTexCoord4s)(GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glTexCoord4sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glTexCoordPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexEnvf)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glTexEnvfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexEnvi)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glTexEnviv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTexGend)(GLenum,GLenum,GLdouble);
+        void       (WINE_GLAPI *p_glTexGendv)(GLenum,GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glTexGenf)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glTexGenfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexGeni)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glTexGeniv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTexImage1D)(GLenum,GLint,GLint,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexImage2D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexParameterf)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glTexParameterfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexParameteri)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glTexParameteriv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTexSubImage1D)(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexSubImage2D)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTranslated)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glTranslatef)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertex2d)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertex2dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glVertex2f)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertex2fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glVertex2i)(GLint,GLint);
+        void       (WINE_GLAPI *p_glVertex2iv)(const GLint*);
+        void       (WINE_GLAPI *p_glVertex2s)(GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertex2sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glVertex3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertex3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glVertex3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertex3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glVertex3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertex3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glVertex3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertex3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glVertex4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertex4dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glVertex4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertex4fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glVertex4i)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertex4iv)(const GLint*);
+        void       (WINE_GLAPI *p_glVertex4s)(GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertex4sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glVertexPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glViewport)(GLint,GLint,GLsizei,GLsizei);
+    } gl;
+
+    struct
+    {
+        void       (WINE_GLAPI *p_glActiveProgramEXT)(GLuint);
+        void       (WINE_GLAPI *p_glActiveShaderProgram)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glActiveStencilFaceEXT)(GLenum);
+        void       (WINE_GLAPI *p_glActiveTexture)(GLenum);
+        void       (WINE_GLAPI *p_glActiveTextureARB)(GLenum);
+        void       (WINE_GLAPI *p_glActiveVaryingNV)(GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glAlphaFragmentOp1ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glAlphaFragmentOp2ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glAlphaFragmentOp3ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glApplyTextureEXT)(GLenum);
+        GLboolean  (WINE_GLAPI *p_glAreProgramsResidentNV)(GLsizei,const GLuint*,GLboolean*);
+        GLboolean  (WINE_GLAPI *p_glAreTexturesResidentEXT)(GLsizei,const GLuint*,GLboolean*);
+        void       (WINE_GLAPI *p_glArrayElementEXT)(GLint);
+        void       (WINE_GLAPI *p_glArrayObjectATI)(GLenum,GLint,GLenum,GLsizei,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glAsyncMarkerSGIX)(GLuint);
+        void       (WINE_GLAPI *p_glAttachObjectARB)(GLhandleARB,GLhandleARB);
+        void       (WINE_GLAPI *p_glAttachShader)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glBeginConditionalRender)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glBeginConditionalRenderNV)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glBeginFragmentShaderATI)(void);
+        void       (WINE_GLAPI *p_glBeginOcclusionQueryNV)(GLuint);
+        void       (WINE_GLAPI *p_glBeginPerfMonitorAMD)(GLuint);
+        void       (WINE_GLAPI *p_glBeginQuery)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBeginQueryARB)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBeginQueryIndexed)(GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glBeginTransformFeedback)(GLenum);
+        void       (WINE_GLAPI *p_glBeginTransformFeedbackEXT)(GLenum);
+        void       (WINE_GLAPI *p_glBeginTransformFeedbackNV)(GLenum);
+        void       (WINE_GLAPI *p_glBeginVertexShaderEXT)(void);
+        void       (WINE_GLAPI *p_glBeginVideoCaptureNV)(GLuint);
+        void       (WINE_GLAPI *p_glBindAttribLocation)(GLuint,GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glBindAttribLocationARB)(GLhandleARB,GLuint,const GLcharARB*);
+        void       (WINE_GLAPI *p_glBindBuffer)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindBufferARB)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindBufferBase)(GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glBindBufferBaseEXT)(GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glBindBufferBaseNV)(GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glBindBufferOffsetEXT)(GLenum,GLuint,GLuint,GLintptr);
+        void       (WINE_GLAPI *p_glBindBufferOffsetNV)(GLenum,GLuint,GLuint,GLintptr);
+        void       (WINE_GLAPI *p_glBindBufferRange)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glBindBufferRangeEXT)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glBindBufferRangeNV)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glBindFragDataLocation)(GLuint,GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glBindFragDataLocationEXT)(GLuint,GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glBindFragDataLocationIndexed)(GLuint,GLuint,GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glBindFragmentShaderATI)(GLuint);
+        void       (WINE_GLAPI *p_glBindFramebuffer)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindFramebufferEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindImageTexture)(GLuint,GLuint,GLint,GLboolean,GLint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBindImageTextureEXT)(GLuint,GLuint,GLint,GLboolean,GLint,GLenum,GLint);
+        GLuint     (WINE_GLAPI *p_glBindLightParameterEXT)(GLenum,GLenum);
+        GLuint     (WINE_GLAPI *p_glBindMaterialParameterEXT)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBindMultiTextureEXT)(GLenum,GLenum,GLuint);
+        GLuint     (WINE_GLAPI *p_glBindParameterEXT)(GLenum);
+        void       (WINE_GLAPI *p_glBindProgramARB)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindProgramNV)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindProgramPipeline)(GLuint);
+        void       (WINE_GLAPI *p_glBindRenderbuffer)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindRenderbufferEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindSampler)(GLuint,GLuint);
+        GLuint     (WINE_GLAPI *p_glBindTexGenParameterEXT)(GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBindTextureEXT)(GLenum,GLuint);
+        GLuint     (WINE_GLAPI *p_glBindTextureUnitParameterEXT)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBindTransformFeedback)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindTransformFeedbackNV)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBindVertexArray)(GLuint);
+        void       (WINE_GLAPI *p_glBindVertexArrayAPPLE)(GLuint);
+        void       (WINE_GLAPI *p_glBindVertexBuffer)(GLuint,GLuint,GLintptr,GLsizei);
+        void       (WINE_GLAPI *p_glBindVertexShaderEXT)(GLuint);
+        void       (WINE_GLAPI *p_glBindVideoCaptureStreamBufferNV)(GLuint,GLuint,GLenum,GLintptrARB);
+        void       (WINE_GLAPI *p_glBindVideoCaptureStreamTextureNV)(GLuint,GLuint,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glBinormal3bEXT)(GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glBinormal3bvEXT)(const GLbyte*);
+        void       (WINE_GLAPI *p_glBinormal3dEXT)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glBinormal3dvEXT)(const GLdouble*);
+        void       (WINE_GLAPI *p_glBinormal3fEXT)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glBinormal3fvEXT)(const GLfloat*);
+        void       (WINE_GLAPI *p_glBinormal3iEXT)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glBinormal3ivEXT)(const GLint*);
+        void       (WINE_GLAPI *p_glBinormal3sEXT)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glBinormal3svEXT)(const GLshort*);
+        void       (WINE_GLAPI *p_glBinormalPointerEXT)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glBlendColor)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glBlendColorEXT)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glBlendEquation)(GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationEXT)(GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationIndexedAMD)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationSeparate)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationSeparateEXT)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationSeparateIndexedAMD)(GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationSeparatei)(GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationSeparateiARB)(GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationi)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glBlendEquationiARB)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncIndexedAMD)(GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncSeparate)(GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncSeparateEXT)(GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncSeparateINGR)(GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncSeparateIndexedAMD)(GLuint,GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncSeparatei)(GLuint,GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFuncSeparateiARB)(GLuint,GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFunci)(GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlendFunciARB)(GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glBlitFramebuffer)(GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum);
+        void       (WINE_GLAPI *p_glBlitFramebufferEXT)(GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum);
+        void       (WINE_GLAPI *p_glBufferAddressRangeNV)(GLenum,GLuint,UINT64,GLsizeiptr);
+        void       (WINE_GLAPI *p_glBufferData)(GLenum,GLsizeiptr,const GLvoid*,GLenum);
+        void       (WINE_GLAPI *p_glBufferDataARB)(GLenum,GLsizeiptrARB,const GLvoid*,GLenum);
+        void       (WINE_GLAPI *p_glBufferParameteriAPPLE)(GLenum,GLenum,GLint);
+        GLuint     (WINE_GLAPI *p_glBufferRegionEnabled)(void);
+        void       (WINE_GLAPI *p_glBufferSubData)(GLenum,GLintptr,GLsizeiptr,const GLvoid*);
+        void       (WINE_GLAPI *p_glBufferSubDataARB)(GLenum,GLintptrARB,GLsizeiptrARB,const GLvoid*);
+        GLenum     (WINE_GLAPI *p_glCheckFramebufferStatus)(GLenum);
+        GLenum     (WINE_GLAPI *p_glCheckFramebufferStatusEXT)(GLenum);
+        GLenum     (WINE_GLAPI *p_glCheckNamedFramebufferStatusEXT)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glClampColor)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glClampColorARB)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glClearBufferData)(GLenum,GLenum,GLenum,GLenum,const void*);
+        void       (WINE_GLAPI *p_glClearBufferSubData)(GLenum,GLenum,GLintptr,GLsizeiptr,GLenum,GLenum,const void*);
+        void       (WINE_GLAPI *p_glClearBufferfi)(GLenum,GLint,GLfloat,GLint);
+        void       (WINE_GLAPI *p_glClearBufferfv)(GLenum,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glClearBufferiv)(GLenum,GLint,const GLint*);
+        void       (WINE_GLAPI *p_glClearBufferuiv)(GLenum,GLint,const GLuint*);
+        void       (WINE_GLAPI *p_glClearColorIiEXT)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glClearColorIuiEXT)(GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glClearDepthdNV)(GLdouble);
+        void       (WINE_GLAPI *p_glClearDepthf)(GLfloat);
+        void       (WINE_GLAPI *p_glClearNamedBufferDataEXT)(GLuint,GLenum,GLenum,GLenum,const void*);
+        void       (WINE_GLAPI *p_glClearNamedBufferSubDataEXT)(GLuint,GLenum,GLenum,GLenum,GLsizeiptr,GLsizeiptr,const void*);
+        void       (WINE_GLAPI *p_glClientActiveTexture)(GLenum);
+        void       (WINE_GLAPI *p_glClientActiveTextureARB)(GLenum);
+        void       (WINE_GLAPI *p_glClientActiveVertexStreamATI)(GLenum);
+        void       (WINE_GLAPI *p_glClientAttribDefaultEXT)(GLbitfield);
+        GLenum     (WINE_GLAPI *p_glClientWaitSync)(GLvoid*,GLbitfield,UINT64);
+        void       (WINE_GLAPI *p_glColor3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glColor3fVertex3fvSUN)(const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glColor3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glColor3hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glColor4fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glColor4fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glColor4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glColor4hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glColor4ubVertex2fSUN)(GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glColor4ubVertex2fvSUN)(const GLubyte*,const GLfloat*);
+        void       (WINE_GLAPI *p_glColor4ubVertex3fSUN)(GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glColor4ubVertex3fvSUN)(const GLubyte*,const GLfloat*);
+        void       (WINE_GLAPI *p_glColorFormatNV)(GLint,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glColorFragmentOp1ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glColorFragmentOp2ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glColorFragmentOp3ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glColorMaskIndexedEXT)(GLuint,GLboolean,GLboolean,GLboolean,GLboolean);
+        void       (WINE_GLAPI *p_glColorMaski)(GLuint,GLboolean,GLboolean,GLboolean,GLboolean);
+        void       (WINE_GLAPI *p_glColorP3ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glColorP3uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glColorP4ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glColorP4uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glColorPointerEXT)(GLint,GLenum,GLsizei,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glColorPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glColorPointervINTEL)(GLint,GLenum,const GLvoid**);
+        void       (WINE_GLAPI *p_glColorSubTable)(GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glColorSubTableEXT)(GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glColorTable)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glColorTableEXT)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glColorTableParameterfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glColorTableParameterfvSGI)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glColorTableParameteriv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glColorTableParameterivSGI)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glColorTableSGI)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glCombinerInputNV)(GLenum,GLenum,GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glCombinerOutputNV)(GLenum,GLenum,GLenum,GLenum,GLenum,GLenum,GLenum,GLboolean,GLboolean,GLboolean);
+        void       (WINE_GLAPI *p_glCombinerParameterfNV)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glCombinerParameterfvNV)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glCombinerParameteriNV)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glCombinerParameterivNV)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glCombinerStageParameterfvNV)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glCompileShader)(GLuint);
+        void       (WINE_GLAPI *p_glCompileShaderARB)(GLhandleARB);
+        void       (WINE_GLAPI *p_glCompileShaderIncludeARB)(GLuint,GLsizei,const GLchar**,const GLint*);
+        void       (WINE_GLAPI *p_glCompressedMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedMultiTexImage3DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexImage1D)(GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexImage1DARB)(GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexImage2D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexImage2DARB)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexImage3D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexImage3DARB)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexSubImage1D)(GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexSubImage1DARB)(GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexSubImage2D)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexSubImage2DARB)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTexSubImage3DARB)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTextureImage3DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glCompressedTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glConvolutionFilter1D)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glConvolutionFilter1DEXT)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glConvolutionFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glConvolutionFilter2DEXT)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glConvolutionParameterf)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glConvolutionParameterfEXT)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glConvolutionParameterfv)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glConvolutionParameterfvEXT)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glConvolutionParameteri)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glConvolutionParameteriEXT)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glConvolutionParameteriv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glConvolutionParameterivEXT)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glCopyBufferSubData)(GLenum,GLenum,GLintptr,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glCopyColorSubTable)(GLenum,GLsizei,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyColorSubTableEXT)(GLenum,GLsizei,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyColorTable)(GLenum,GLenum,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyColorTableSGI)(GLenum,GLenum,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyConvolutionFilter1D)(GLenum,GLenum,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyConvolutionFilter1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyConvolutionFilter2D)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyConvolutionFilter2DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyImageSubData)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyImageSubDataNV)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyPathNV)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glCopyTexImage1DEXT)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyTexImage2DEXT)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyTexSubImage1DEXT)(GLenum,GLint,GLint,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTexSubImage2DEXT)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTexSubImage3DEXT)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glCopyTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCopyTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glCoverFillPathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glCoverFillPathNV)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glCoverStrokePathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glCoverStrokePathNV)(GLuint,GLenum);
+        GLuint     (WINE_GLAPI *p_glCreateProgram)(void);
+        GLhandleARB (WINE_GLAPI *p_glCreateProgramObjectARB)(void);
+        GLuint     (WINE_GLAPI *p_glCreateShader)(GLenum);
+        GLhandleARB (WINE_GLAPI *p_glCreateShaderObjectARB)(GLenum);
+        GLuint     (WINE_GLAPI *p_glCreateShaderProgramEXT)(GLenum,const GLchar*);
+        GLuint     (WINE_GLAPI *p_glCreateShaderProgramv)(GLenum,GLsizei,const GLchar* const*);
+        GLvoid*    (WINE_GLAPI *p_glCreateSyncFromCLeventARB)(void *,void *,GLbitfield);
+        void       (WINE_GLAPI *p_glCullParameterdvEXT)(GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glCullParameterfvEXT)(GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glCurrentPaletteMatrixARB)(GLint);
+        void       (WINE_GLAPI *p_glDebugMessageCallback)(void *,const void*);
+        void       (WINE_GLAPI *p_glDebugMessageCallbackAMD)(void *,GLvoid*);
+        void       (WINE_GLAPI *p_glDebugMessageCallbackARB)(void *,const GLvoid*);
+        void       (WINE_GLAPI *p_glDebugMessageControl)(GLenum,GLenum,GLenum,GLsizei,const GLuint*,GLboolean);
+        void       (WINE_GLAPI *p_glDebugMessageControlARB)(GLenum,GLenum,GLenum,GLsizei,const GLuint*,GLboolean);
+        void       (WINE_GLAPI *p_glDebugMessageEnableAMD)(GLenum,GLenum,GLsizei,const GLuint*,GLboolean);
+        void       (WINE_GLAPI *p_glDebugMessageInsert)(GLenum,GLenum,GLuint,GLenum,GLsizei,const GLchar*);
+        void       (WINE_GLAPI *p_glDebugMessageInsertAMD)(GLenum,GLenum,GLuint,GLsizei,const GLchar*);
+        void       (WINE_GLAPI *p_glDebugMessageInsertARB)(GLenum,GLenum,GLuint,GLenum,GLsizei,const GLchar*);
+        void       (WINE_GLAPI *p_glDeformSGIX)(GLbitfield);
+        void       (WINE_GLAPI *p_glDeformationMap3dSGIX)(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+        void       (WINE_GLAPI *p_glDeformationMap3fSGIX)(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glDeleteAsyncMarkersSGIX)(GLuint,GLsizei);
+        void       (WINE_GLAPI *p_glDeleteBufferRegion)(GLenum);
+        void       (WINE_GLAPI *p_glDeleteBuffers)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteBuffersARB)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteFencesAPPLE)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteFencesNV)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteFragmentShaderATI)(GLuint);
+        void       (WINE_GLAPI *p_glDeleteFramebuffers)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteFramebuffersEXT)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteNamedStringARB)(GLint,const GLchar*);
+        void       (WINE_GLAPI *p_glDeleteNamesAMD)(GLenum,GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteObjectARB)(GLhandleARB);
+        void       (WINE_GLAPI *p_glDeleteObjectBufferATI)(GLuint);
+        void       (WINE_GLAPI *p_glDeleteOcclusionQueriesNV)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeletePathsNV)(GLuint,GLsizei);
+        void       (WINE_GLAPI *p_glDeletePerfMonitorsAMD)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glDeleteProgram)(GLuint);
+        void       (WINE_GLAPI *p_glDeleteProgramPipelines)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteProgramsARB)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteProgramsNV)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteQueries)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteQueriesARB)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteRenderbuffers)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteRenderbuffersEXT)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteSamplers)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteShader)(GLuint);
+        void       (WINE_GLAPI *p_glDeleteSync)(GLvoid*);
+        void       (WINE_GLAPI *p_glDeleteTexturesEXT)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteTransformFeedbacks)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteTransformFeedbacksNV)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteVertexArrays)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteVertexArraysAPPLE)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glDeleteVertexShaderEXT)(GLuint);
+        void       (WINE_GLAPI *p_glDepthBoundsEXT)(GLclampd,GLclampd);
+        void       (WINE_GLAPI *p_glDepthBoundsdNV)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glDepthRangeArrayv)(GLuint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glDepthRangeIndexed)(GLuint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glDepthRangedNV)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glDepthRangef)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glDetachObjectARB)(GLhandleARB,GLhandleARB);
+        void       (WINE_GLAPI *p_glDetachShader)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glDetailTexFuncSGIS)(GLenum,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glDisableClientStateIndexedEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glDisableIndexedEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glDisableVariantClientStateEXT)(GLuint);
+        void       (WINE_GLAPI *p_glDisableVertexAttribAPPLE)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glDisableVertexAttribArray)(GLuint);
+        void       (WINE_GLAPI *p_glDisableVertexAttribArrayARB)(GLuint);
+        void       (WINE_GLAPI *p_glDisablei)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glDispatchCompute)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glDispatchComputeIndirect)(GLintptr);
+        void       (WINE_GLAPI *p_glDrawArraysEXT)(GLenum,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glDrawArraysIndirect)(GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glDrawArraysInstanced)(GLenum,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glDrawArraysInstancedARB)(GLenum,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glDrawArraysInstancedBaseInstance)(GLenum,GLint,GLsizei,GLsizei,GLuint);
+        void       (WINE_GLAPI *p_glDrawArraysInstancedEXT)(GLenum,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glDrawBufferRegion)(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLint);
+        void       (WINE_GLAPI *p_glDrawBuffers)(GLsizei,const GLenum*);
+        void       (WINE_GLAPI *p_glDrawBuffersARB)(GLsizei,const GLenum*);
+        void       (WINE_GLAPI *p_glDrawBuffersATI)(GLsizei,const GLenum*);
+        void       (WINE_GLAPI *p_glDrawElementArrayAPPLE)(GLenum,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glDrawElementArrayATI)(GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glDrawElementsBaseVertex)(GLenum,GLsizei,GLenum,const GLvoid*,GLint);
+        void       (WINE_GLAPI *p_glDrawElementsIndirect)(GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glDrawElementsInstanced)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei);
+        void       (WINE_GLAPI *p_glDrawElementsInstancedARB)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei);
+        void       (WINE_GLAPI *p_glDrawElementsInstancedBaseInstance)(GLenum,GLsizei,GLenum,const void*,GLsizei,GLuint);
+        void       (WINE_GLAPI *p_glDrawElementsInstancedBaseVertex)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glDrawElementsInstancedBaseVertexBaseInstance)(GLenum,GLsizei,GLenum,const void*,GLsizei,GLint,GLuint);
+        void       (WINE_GLAPI *p_glDrawElementsInstancedEXT)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei);
+        void       (WINE_GLAPI *p_glDrawMeshArraysSUN)(GLenum,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glDrawRangeElementArrayAPPLE)(GLenum,GLuint,GLuint,GLint,GLsizei);
+        void       (WINE_GLAPI *p_glDrawRangeElementArrayATI)(GLenum,GLuint,GLuint,GLsizei);
+        void       (WINE_GLAPI *p_glDrawRangeElements)(GLenum,GLuint,GLuint,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glDrawRangeElementsBaseVertex)(GLenum,GLuint,GLuint,GLsizei,GLenum,const GLvoid*,GLint);
+        void       (WINE_GLAPI *p_glDrawRangeElementsEXT)(GLenum,GLuint,GLuint,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glDrawTransformFeedback)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glDrawTransformFeedbackInstanced)(GLenum,GLuint,GLsizei);
+        void       (WINE_GLAPI *p_glDrawTransformFeedbackNV)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glDrawTransformFeedbackStream)(GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glDrawTransformFeedbackStreamInstanced)(GLenum,GLuint,GLuint,GLsizei);
+        void       (WINE_GLAPI *p_glEdgeFlagFormatNV)(GLsizei);
+        void       (WINE_GLAPI *p_glEdgeFlagPointerEXT)(GLsizei,GLsizei,const GLboolean*);
+        void       (WINE_GLAPI *p_glEdgeFlagPointerListIBM)(GLint,const GLboolean**,GLint);
+        void       (WINE_GLAPI *p_glElementPointerAPPLE)(GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glElementPointerATI)(GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glEnableClientStateIndexedEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glEnableIndexedEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glEnableVariantClientStateEXT)(GLuint);
+        void       (WINE_GLAPI *p_glEnableVertexAttribAPPLE)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glEnableVertexAttribArray)(GLuint);
+        void       (WINE_GLAPI *p_glEnableVertexAttribArrayARB)(GLuint);
+        void       (WINE_GLAPI *p_glEnablei)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glEndConditionalRender)(void);
+        void       (WINE_GLAPI *p_glEndConditionalRenderNV)(void);
+        void       (WINE_GLAPI *p_glEndFragmentShaderATI)(void);
+        void       (WINE_GLAPI *p_glEndOcclusionQueryNV)(void);
+        void       (WINE_GLAPI *p_glEndPerfMonitorAMD)(GLuint);
+        void       (WINE_GLAPI *p_glEndQuery)(GLenum);
+        void       (WINE_GLAPI *p_glEndQueryARB)(GLenum);
+        void       (WINE_GLAPI *p_glEndQueryIndexed)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glEndTransformFeedback)(void);
+        void       (WINE_GLAPI *p_glEndTransformFeedbackEXT)(void);
+        void       (WINE_GLAPI *p_glEndTransformFeedbackNV)(void);
+        void       (WINE_GLAPI *p_glEndVertexShaderEXT)(void);
+        void       (WINE_GLAPI *p_glEndVideoCaptureNV)(GLuint);
+        void       (WINE_GLAPI *p_glEvalMapsNV)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glExecuteProgramNV)(GLenum,GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glExtractComponentEXT)(GLuint,GLuint,GLuint);
+        GLvoid*    (WINE_GLAPI *p_glFenceSync)(GLenum,GLbitfield);
+        void       (WINE_GLAPI *p_glFinalCombinerInputNV)(GLenum,GLenum,GLenum,GLenum);
+        GLint      (WINE_GLAPI *p_glFinishAsyncSGIX)(GLuint*);
+        void       (WINE_GLAPI *p_glFinishFenceAPPLE)(GLuint);
+        void       (WINE_GLAPI *p_glFinishFenceNV)(GLuint);
+        void       (WINE_GLAPI *p_glFinishObjectAPPLE)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glFinishTextureSUNX)(void);
+        void       (WINE_GLAPI *p_glFlushMappedBufferRange)(GLenum,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glFlushMappedBufferRangeAPPLE)(GLenum,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glFlushMappedNamedBufferRangeEXT)(GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glFlushPixelDataRangeNV)(GLenum);
+        void       (WINE_GLAPI *p_glFlushRasterSGIX)(void);
+        void       (WINE_GLAPI *p_glFlushVertexArrayRangeAPPLE)(GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glFlushVertexArrayRangeNV)(void);
+        void       (WINE_GLAPI *p_glFogCoordFormatNV)(GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glFogCoordPointer)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glFogCoordPointerEXT)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glFogCoordPointerListIBM)(GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glFogCoordd)(GLdouble);
+        void       (WINE_GLAPI *p_glFogCoorddEXT)(GLdouble);
+        void       (WINE_GLAPI *p_glFogCoorddv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glFogCoorddvEXT)(const GLdouble*);
+        void       (WINE_GLAPI *p_glFogCoordf)(GLfloat);
+        void       (WINE_GLAPI *p_glFogCoordfEXT)(GLfloat);
+        void       (WINE_GLAPI *p_glFogCoordfv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glFogCoordfvEXT)(const GLfloat*);
+        void       (WINE_GLAPI *p_glFogCoordhNV)(GLhalfNV);
+        void       (WINE_GLAPI *p_glFogCoordhvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glFogFuncSGIS)(GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glFragmentColorMaterialSGIX)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glFragmentLightModelfSGIX)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glFragmentLightModelfvSGIX)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glFragmentLightModeliSGIX)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glFragmentLightModelivSGIX)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glFragmentLightfSGIX)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glFragmentLightfvSGIX)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glFragmentLightiSGIX)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glFragmentLightivSGIX)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glFragmentMaterialfSGIX)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glFragmentMaterialfvSGIX)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glFragmentMaterialiSGIX)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glFragmentMaterialivSGIX)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glFrameTerminatorGREMEDY)(void);
+        void       (WINE_GLAPI *p_glFrameZoomSGIX)(GLint);
+        void       (WINE_GLAPI *p_glFramebufferDrawBufferEXT)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glFramebufferDrawBuffersEXT)(GLuint,GLsizei,const GLenum*);
+        void       (WINE_GLAPI *p_glFramebufferParameteri)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glFramebufferReadBufferEXT)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glFramebufferRenderbuffer)(GLenum,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glFramebufferRenderbufferEXT)(GLenum,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glFramebufferTexture)(GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTexture1D)(GLenum,GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTexture1DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTexture2D)(GLenum,GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTexture2DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTexture3D)(GLenum,GLenum,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTexture3DEXT)(GLenum,GLenum,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTextureARB)(GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTextureEXT)(GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTextureFaceARB)(GLenum,GLenum,GLuint,GLint,GLenum);
+        void       (WINE_GLAPI *p_glFramebufferTextureFaceEXT)(GLenum,GLenum,GLuint,GLint,GLenum);
+        void       (WINE_GLAPI *p_glFramebufferTextureLayer)(GLenum,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTextureLayerARB)(GLenum,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glFramebufferTextureLayerEXT)(GLenum,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glFreeObjectBufferATI)(GLuint);
+        GLuint     (WINE_GLAPI *p_glGenAsyncMarkersSGIX)(GLsizei);
+        void       (WINE_GLAPI *p_glGenBuffers)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenBuffersARB)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenFencesAPPLE)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenFencesNV)(GLsizei,GLuint*);
+        GLuint     (WINE_GLAPI *p_glGenFragmentShadersATI)(GLuint);
+        void       (WINE_GLAPI *p_glGenFramebuffers)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenFramebuffersEXT)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenNamesAMD)(GLenum,GLuint,GLuint*);
+        void       (WINE_GLAPI *p_glGenOcclusionQueriesNV)(GLsizei,GLuint*);
+        GLuint     (WINE_GLAPI *p_glGenPathsNV)(GLsizei);
+        void       (WINE_GLAPI *p_glGenPerfMonitorsAMD)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenProgramPipelines)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenProgramsARB)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenProgramsNV)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenQueries)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenQueriesARB)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenRenderbuffers)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenRenderbuffersEXT)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenSamplers)(GLsizei,GLuint*);
+        GLuint     (WINE_GLAPI *p_glGenSymbolsEXT)(GLenum,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glGenTexturesEXT)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenTransformFeedbacks)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenTransformFeedbacksNV)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenVertexArrays)(GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGenVertexArraysAPPLE)(GLsizei,GLuint*);
+        GLuint     (WINE_GLAPI *p_glGenVertexShadersEXT)(GLuint);
+        void       (WINE_GLAPI *p_glGenerateMipmap)(GLenum);
+        void       (WINE_GLAPI *p_glGenerateMipmapEXT)(GLenum);
+        void       (WINE_GLAPI *p_glGenerateMultiTexMipmapEXT)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glGenerateTextureMipmapEXT)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glGetActiveAtomicCounterBufferiv)(GLuint,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetActiveAttrib)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
+        void       (WINE_GLAPI *p_glGetActiveAttribARB)(GLhandleARB,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLcharARB*);
+        void       (WINE_GLAPI *p_glGetActiveSubroutineName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetActiveSubroutineUniformName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetActiveSubroutineUniformiv)(GLuint,GLenum,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetActiveUniform)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
+        void       (WINE_GLAPI *p_glGetActiveUniformARB)(GLhandleARB,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLcharARB*);
+        void       (WINE_GLAPI *p_glGetActiveUniformBlockName)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetActiveUniformBlockiv)(GLuint,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetActiveUniformName)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetActiveUniformsiv)(GLuint,GLsizei,const GLuint*,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetActiveVaryingNV)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*);
+        void       (WINE_GLAPI *p_glGetArrayObjectfvATI)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetArrayObjectivATI)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetAttachedObjectsARB)(GLhandleARB,GLsizei,GLsizei*,GLhandleARB*);
+        void       (WINE_GLAPI *p_glGetAttachedShaders)(GLuint,GLsizei,GLsizei*,GLuint*);
+        GLint      (WINE_GLAPI *p_glGetAttribLocation)(GLuint,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetAttribLocationARB)(GLhandleARB,const GLcharARB*);
+        void       (WINE_GLAPI *p_glGetBooleanIndexedvEXT)(GLenum,GLuint,GLboolean*);
+        void       (WINE_GLAPI *p_glGetBooleani_v)(GLenum,GLuint,GLboolean*);
+        void       (WINE_GLAPI *p_glGetBufferParameteri64v)(GLenum,GLenum,INT64*);
+        void       (WINE_GLAPI *p_glGetBufferParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetBufferParameterivARB)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetBufferParameterui64vNV)(GLenum,GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetBufferPointerv)(GLenum,GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetBufferPointervARB)(GLenum,GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid*);
+        void       (WINE_GLAPI *p_glGetBufferSubDataARB)(GLenum,GLintptrARB,GLsizeiptrARB,GLvoid*);
+        void       (WINE_GLAPI *p_glGetColorTable)(GLenum,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetColorTableEXT)(GLenum,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetColorTableParameterfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetColorTableParameterfvEXT)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetColorTableParameterfvSGI)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetColorTableParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetColorTableParameterivEXT)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetColorTableParameterivSGI)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetColorTableSGI)(GLenum,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetCombinerInputParameterfvNV)(GLenum,GLenum,GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetCombinerInputParameterivNV)(GLenum,GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetCombinerOutputParameterfvNV)(GLenum,GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetCombinerOutputParameterivNV)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetCombinerStageParameterfvNV)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetCompressedMultiTexImageEXT)(GLenum,GLenum,GLint,GLvoid*);
+        void       (WINE_GLAPI *p_glGetCompressedTexImage)(GLenum,GLint,GLvoid*);
+        void       (WINE_GLAPI *p_glGetCompressedTexImageARB)(GLenum,GLint,GLvoid*);
+        void       (WINE_GLAPI *p_glGetCompressedTextureImageEXT)(GLuint,GLenum,GLint,GLvoid*);
+        void       (WINE_GLAPI *p_glGetConvolutionFilter)(GLenum,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetConvolutionFilterEXT)(GLenum,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetConvolutionParameterfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetConvolutionParameterfvEXT)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetConvolutionParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetConvolutionParameterivEXT)(GLenum,GLenum,GLint*);
+        GLuint     (WINE_GLAPI *p_glGetDebugMessageLog)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*);
+        GLuint     (WINE_GLAPI *p_glGetDebugMessageLogAMD)(GLuint,GLsizei,GLenum*,GLuint*,GLuint*,GLsizei*,GLchar*);
+        GLuint     (WINE_GLAPI *p_glGetDebugMessageLogARB)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetDetailTexFuncSGIS)(GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetDoubleIndexedvEXT)(GLenum,GLuint,GLdouble*);
+        void       (WINE_GLAPI *p_glGetDoublei_v)(GLenum,GLuint,GLdouble*);
+        void       (WINE_GLAPI *p_glGetFenceivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFinalCombinerInputParameterfvNV)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetFinalCombinerInputParameterivNV)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFloatIndexedvEXT)(GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetFloati_v)(GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetFogFuncSGIS)(GLfloat*);
+        GLint      (WINE_GLAPI *p_glGetFragDataIndex)(GLuint,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetFragDataLocation)(GLuint,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetFragDataLocationEXT)(GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glGetFragmentLightfvSGIX)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetFragmentLightivSGIX)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFragmentMaterialfvSGIX)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetFragmentMaterialivSGIX)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFramebufferAttachmentParameteriv)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFramebufferAttachmentParameterivEXT)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFramebufferParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetFramebufferParameterivEXT)(GLuint,GLenum,GLint*);
+        GLenum     (WINE_GLAPI *p_glGetGraphicsResetStatusARB)(void);
+        GLhandleARB (WINE_GLAPI *p_glGetHandleARB)(GLenum);
+        void       (WINE_GLAPI *p_glGetHistogram)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetHistogramEXT)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetHistogramParameterfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetHistogramParameterfvEXT)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetHistogramParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetHistogramParameterivEXT)(GLenum,GLenum,GLint*);
+        UINT64     (WINE_GLAPI *p_glGetImageHandleNV)(GLuint,GLint,GLboolean,GLint,GLenum);
+        void       (WINE_GLAPI *p_glGetImageTransformParameterfvHP)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetImageTransformParameterivHP)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetInfoLogARB)(GLhandleARB,GLsizei,GLsizei*,GLcharARB*);
+        GLint      (WINE_GLAPI *p_glGetInstrumentsSGIX)(void);
+        void       (WINE_GLAPI *p_glGetInteger64i_v)(GLenum,GLuint,INT64*);
+        void       (WINE_GLAPI *p_glGetInteger64v)(GLenum,INT64*);
+        void       (WINE_GLAPI *p_glGetIntegerIndexedvEXT)(GLenum,GLuint,GLint*);
+        void       (WINE_GLAPI *p_glGetIntegeri_v)(GLenum,GLuint,GLint*);
+        void       (WINE_GLAPI *p_glGetIntegerui64i_vNV)(GLenum,GLuint,UINT64*);
+        void       (WINE_GLAPI *p_glGetIntegerui64vNV)(GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetInternalformati64v)(GLenum,GLenum,GLenum,GLsizei,INT64*);
+        void       (WINE_GLAPI *p_glGetInternalformativ)(GLenum,GLenum,GLenum,GLsizei,GLint*);
+        void       (WINE_GLAPI *p_glGetInvariantBooleanvEXT)(GLuint,GLenum,GLboolean*);
+        void       (WINE_GLAPI *p_glGetInvariantFloatvEXT)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetInvariantIntegervEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetListParameterfvSGIX)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetListParameterivSGIX)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetLocalConstantBooleanvEXT)(GLuint,GLenum,GLboolean*);
+        void       (WINE_GLAPI *p_glGetLocalConstantFloatvEXT)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetLocalConstantIntegervEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMapAttribParameterfvNV)(GLenum,GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMapAttribParameterivNV)(GLenum,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMapControlPointsNV)(GLenum,GLuint,GLenum,GLsizei,GLsizei,GLboolean,GLvoid*);
+        void       (WINE_GLAPI *p_glGetMapParameterfvNV)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMapParameterivNV)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMinmax)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetMinmaxEXT)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetMinmaxParameterfv)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMinmaxParameterfvEXT)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMinmaxParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMinmaxParameterivEXT)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMultiTexEnvfvEXT)(GLenum,GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMultiTexEnvivEXT)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMultiTexGendvEXT)(GLenum,GLenum,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetMultiTexGenfvEXT)(GLenum,GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMultiTexGenivEXT)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMultiTexImageEXT)(GLenum,GLenum,GLint,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetMultiTexLevelParameterfvEXT)(GLenum,GLenum,GLint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMultiTexLevelParameterivEXT)(GLenum,GLenum,GLint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMultiTexParameterIivEXT)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMultiTexParameterIuivEXT)(GLenum,GLenum,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetMultiTexParameterfvEXT)(GLenum,GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMultiTexParameterivEXT)(GLenum,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetMultisamplefv)(GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetMultisamplefvNV)(GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetNamedBufferParameterivEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetNamedBufferParameterui64vNV)(GLuint,GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetNamedBufferPointervEXT)(GLuint,GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetNamedBufferSubDataEXT)(GLuint,GLintptr,GLsizeiptr,GLvoid*);
+        void       (WINE_GLAPI *p_glGetNamedFramebufferAttachmentParameterivEXT)(GLuint,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetNamedFramebufferParameterivEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetNamedProgramLocalParameterIivEXT)(GLuint,GLenum,GLuint,GLint*);
+        void       (WINE_GLAPI *p_glGetNamedProgramLocalParameterIuivEXT)(GLuint,GLenum,GLuint,GLuint*);
+        void       (WINE_GLAPI *p_glGetNamedProgramLocalParameterdvEXT)(GLuint,GLenum,GLuint,GLdouble*);
+        void       (WINE_GLAPI *p_glGetNamedProgramLocalParameterfvEXT)(GLuint,GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetNamedProgramStringEXT)(GLuint,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetNamedProgramivEXT)(GLuint,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetNamedRenderbufferParameterivEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetNamedStringARB)(GLint,const GLchar*,GLsizei,GLint*,GLchar*);
+        void       (WINE_GLAPI *p_glGetNamedStringivARB)(GLint,const GLchar*,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetObjectBufferfvATI)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetObjectBufferivATI)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetObjectLabel)(GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetObjectParameterfvARB)(GLhandleARB,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetObjectParameterivAPPLE)(GLenum,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetObjectParameterivARB)(GLhandleARB,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetObjectPtrLabel)(const void*,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetOcclusionQueryivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetOcclusionQueryuivNV)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetPathColorGenfvNV)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathColorGenivNV)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetPathCommandsNV)(GLuint,GLubyte*);
+        void       (WINE_GLAPI *p_glGetPathCoordsNV)(GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathDashArrayNV)(GLuint,GLfloat*);
+        GLfloat    (WINE_GLAPI *p_glGetPathLengthNV)(GLuint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glGetPathMetricRangeNV)(GLbitfield,GLuint,GLsizei,GLsizei,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathMetricsNV)(GLbitfield,GLsizei,GLenum,const GLvoid*,GLuint,GLsizei,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathParameterfvNV)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathParameterivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetPathSpacingNV)(GLenum,GLsizei,GLenum,const GLvoid*,GLuint,GLfloat,GLfloat,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathTexGenfvNV)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPathTexGenivNV)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetPerfMonitorCounterDataAMD)(GLuint,GLenum,GLsizei,GLuint*,GLint*);
+        void       (WINE_GLAPI *p_glGetPerfMonitorCounterInfoAMD)(GLuint,GLuint,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetPerfMonitorCounterStringAMD)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetPerfMonitorCountersAMD)(GLuint,GLint*,GLint*,GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGetPerfMonitorGroupStringAMD)(GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetPerfMonitorGroupsAMD)(GLint*,GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGetPixelTexGenParameterfvSGIS)(GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPixelTexGenParameterivSGIS)(GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetPixelTransformParameterfvEXT)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetPixelTransformParameterivEXT)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetPointerIndexedvEXT)(GLenum,GLuint,GLvoid**);
+        void       (WINE_GLAPI *p_glGetPointervEXT)(GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetProgramBinary)(GLuint,GLsizei,GLsizei*,GLenum*,GLvoid*);
+        void       (WINE_GLAPI *p_glGetProgramEnvParameterIivNV)(GLenum,GLuint,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramEnvParameterIuivNV)(GLenum,GLuint,GLuint*);
+        void       (WINE_GLAPI *p_glGetProgramEnvParameterdvARB)(GLenum,GLuint,GLdouble*);
+        void       (WINE_GLAPI *p_glGetProgramEnvParameterfvARB)(GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetProgramInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetProgramInterfaceiv)(GLuint,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramLocalParameterIivNV)(GLenum,GLuint,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramLocalParameterIuivNV)(GLenum,GLuint,GLuint*);
+        void       (WINE_GLAPI *p_glGetProgramLocalParameterdvARB)(GLenum,GLuint,GLdouble*);
+        void       (WINE_GLAPI *p_glGetProgramLocalParameterfvARB)(GLenum,GLuint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetProgramNamedParameterdvNV)(GLuint,GLsizei,const GLubyte*,GLdouble*);
+        void       (WINE_GLAPI *p_glGetProgramNamedParameterfvNV)(GLuint,GLsizei,const GLubyte*,GLfloat*);
+        void       (WINE_GLAPI *p_glGetProgramParameterdvNV)(GLenum,GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetProgramParameterfvNV)(GLenum,GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetProgramPipelineInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetProgramPipelineiv)(GLuint,GLenum,GLint*);
+        GLuint     (WINE_GLAPI *p_glGetProgramResourceIndex)(GLuint,GLenum,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetProgramResourceLocation)(GLuint,GLenum,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetProgramResourceLocationIndex)(GLuint,GLenum,const GLchar*);
+        void       (WINE_GLAPI *p_glGetProgramResourceName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetProgramResourceiv)(GLuint,GLenum,GLuint,GLsizei,const GLenum*,GLsizei,GLsizei*,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramStageiv)(GLuint,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramStringARB)(GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetProgramStringNV)(GLuint,GLenum,GLubyte*);
+        void       (WINE_GLAPI *p_glGetProgramSubroutineParameteruivNV)(GLenum,GLuint,GLuint*);
+        void       (WINE_GLAPI *p_glGetProgramiv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramivARB)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetProgramivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetQueryIndexediv)(GLenum,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetQueryObjecti64v)(GLuint,GLenum,INT64*);
+        void       (WINE_GLAPI *p_glGetQueryObjecti64vEXT)(GLuint,GLenum,INT64*);
+        void       (WINE_GLAPI *p_glGetQueryObjectiv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetQueryObjectivARB)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetQueryObjectui64v)(GLuint,GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetQueryObjectui64vEXT)(GLuint,GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetQueryObjectuiv)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetQueryObjectuivARB)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetQueryiv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetQueryivARB)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetRenderbufferParameteriv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetRenderbufferParameterivEXT)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetSamplerParameterIiv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetSamplerParameterIuiv)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetSamplerParameterfv)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetSamplerParameteriv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetSeparableFilter)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*);
+        void       (WINE_GLAPI *p_glGetSeparableFilterEXT)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*);
+        void       (WINE_GLAPI *p_glGetShaderInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetShaderPrecisionFormat)(GLenum,GLenum,GLint*,GLint*);
+        void       (WINE_GLAPI *p_glGetShaderSource)(GLuint,GLsizei,GLsizei*,GLchar*);
+        void       (WINE_GLAPI *p_glGetShaderSourceARB)(GLhandleARB,GLsizei,GLsizei*,GLcharARB*);
+        void       (WINE_GLAPI *p_glGetShaderiv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetSharpenTexFuncSGIS)(GLenum,GLfloat*);
+        const GLubyte * (WINE_GLAPI *p_glGetStringi)(GLenum,GLuint);
+        GLuint     (WINE_GLAPI *p_glGetSubroutineIndex)(GLuint,GLenum,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetSubroutineUniformLocation)(GLuint,GLenum,const GLchar*);
+        void       (WINE_GLAPI *p_glGetSynciv)(GLvoid*,GLenum,GLsizei,GLsizei*,GLint*);
+        void       (WINE_GLAPI *p_glGetTexBumpParameterfvATI)(GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTexBumpParameterivATI)(GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTexFilterFuncSGIS)(GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTexParameterIiv)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTexParameterIivEXT)(GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTexParameterIuiv)(GLenum,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetTexParameterIuivEXT)(GLenum,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetTexParameterPointervAPPLE)(GLenum,GLenum,GLvoid**);
+        UINT64     (WINE_GLAPI *p_glGetTextureHandleNV)(GLuint);
+        void       (WINE_GLAPI *p_glGetTextureImageEXT)(GLuint,GLenum,GLint,GLenum,GLenum,GLvoid*);
+        void       (WINE_GLAPI *p_glGetTextureLevelParameterfvEXT)(GLuint,GLenum,GLint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTextureLevelParameterivEXT)(GLuint,GLenum,GLint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTextureParameterIivEXT)(GLuint,GLenum,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTextureParameterIuivEXT)(GLuint,GLenum,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetTextureParameterfvEXT)(GLuint,GLenum,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetTextureParameterivEXT)(GLuint,GLenum,GLenum,GLint*);
+        UINT64     (WINE_GLAPI *p_glGetTextureSamplerHandleNV)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glGetTrackMatrixivNV)(GLenum,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetTransformFeedbackVarying)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*);
+        void       (WINE_GLAPI *p_glGetTransformFeedbackVaryingEXT)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*);
+        void       (WINE_GLAPI *p_glGetTransformFeedbackVaryingNV)(GLuint,GLuint,GLint*);
+        GLuint     (WINE_GLAPI *p_glGetUniformBlockIndex)(GLuint,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetUniformBufferSizeEXT)(GLuint,GLint);
+        void       (WINE_GLAPI *p_glGetUniformIndices)(GLuint,GLsizei,const GLchar* const*,GLuint*);
+        GLint      (WINE_GLAPI *p_glGetUniformLocation)(GLuint,const GLchar*);
+        GLint      (WINE_GLAPI *p_glGetUniformLocationARB)(GLhandleARB,const GLcharARB*);
+        GLintptr   (WINE_GLAPI *p_glGetUniformOffsetEXT)(GLuint,GLint);
+        void       (WINE_GLAPI *p_glGetUniformSubroutineuiv)(GLenum,GLint,GLuint*);
+        void       (WINE_GLAPI *p_glGetUniformdv)(GLuint,GLint,GLdouble*);
+        void       (WINE_GLAPI *p_glGetUniformfv)(GLuint,GLint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetUniformfvARB)(GLhandleARB,GLint,GLfloat*);
+        void       (WINE_GLAPI *p_glGetUniformi64vNV)(GLuint,GLint,INT64*);
+        void       (WINE_GLAPI *p_glGetUniformiv)(GLuint,GLint,GLint*);
+        void       (WINE_GLAPI *p_glGetUniformivARB)(GLhandleARB,GLint,GLint*);
+        void       (WINE_GLAPI *p_glGetUniformui64vNV)(GLuint,GLint,UINT64*);
+        void       (WINE_GLAPI *p_glGetUniformuiv)(GLuint,GLint,GLuint*);
+        void       (WINE_GLAPI *p_glGetUniformuivEXT)(GLuint,GLint,GLuint*);
+        void       (WINE_GLAPI *p_glGetVariantArrayObjectfvATI)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVariantArrayObjectivATI)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVariantBooleanvEXT)(GLuint,GLenum,GLboolean*);
+        void       (WINE_GLAPI *p_glGetVariantFloatvEXT)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVariantIntegervEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVariantPointervEXT)(GLuint,GLenum,GLvoid**);
+        GLint      (WINE_GLAPI *p_glGetVaryingLocationNV)(GLuint,const GLchar*);
+        void       (WINE_GLAPI *p_glGetVertexAttribArrayObjectfvATI)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVertexAttribArrayObjectivATI)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribIiv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribIivEXT)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribIuiv)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribIuivEXT)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribLdv)(GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetVertexAttribLdvEXT)(GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetVertexAttribLi64vNV)(GLuint,GLenum,INT64*);
+        void       (WINE_GLAPI *p_glGetVertexAttribLui64vNV)(GLuint,GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetVertexAttribPointerv)(GLuint,GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetVertexAttribPointervARB)(GLuint,GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetVertexAttribPointervNV)(GLuint,GLenum,GLvoid**);
+        void       (WINE_GLAPI *p_glGetVertexAttribdv)(GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetVertexAttribdvARB)(GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetVertexAttribdvNV)(GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetVertexAttribfv)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVertexAttribfvARB)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVertexAttribfvNV)(GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVertexAttribiv)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribivARB)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVertexAttribivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVideoCaptureStreamdvNV)(GLuint,GLuint,GLenum,GLdouble*);
+        void       (WINE_GLAPI *p_glGetVideoCaptureStreamfvNV)(GLuint,GLuint,GLenum,GLfloat*);
+        void       (WINE_GLAPI *p_glGetVideoCaptureStreamivNV)(GLuint,GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVideoCaptureivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVideoi64vNV)(GLuint,GLenum,INT64*);
+        void       (WINE_GLAPI *p_glGetVideoivNV)(GLuint,GLenum,GLint*);
+        void       (WINE_GLAPI *p_glGetVideoui64vNV)(GLuint,GLenum,UINT64*);
+        void       (WINE_GLAPI *p_glGetVideouivNV)(GLuint,GLenum,GLuint*);
+        void       (WINE_GLAPI *p_glGetnColorTableARB)(GLenum,GLenum,GLenum,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnCompressedTexImageARB)(GLenum,GLint,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnConvolutionFilterARB)(GLenum,GLenum,GLenum,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnHistogramARB)(GLenum,GLboolean,GLenum,GLenum,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnMapdvARB)(GLenum,GLenum,GLsizei,GLdouble*);
+        void       (WINE_GLAPI *p_glGetnMapfvARB)(GLenum,GLenum,GLsizei,GLfloat*);
+        void       (WINE_GLAPI *p_glGetnMapivARB)(GLenum,GLenum,GLsizei,GLint*);
+        void       (WINE_GLAPI *p_glGetnMinmaxARB)(GLenum,GLboolean,GLenum,GLenum,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnPixelMapfvARB)(GLenum,GLsizei,GLfloat*);
+        void       (WINE_GLAPI *p_glGetnPixelMapuivARB)(GLenum,GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGetnPixelMapusvARB)(GLenum,GLsizei,GLushort*);
+        void       (WINE_GLAPI *p_glGetnPolygonStippleARB)(GLsizei,GLubyte*);
+        void       (WINE_GLAPI *p_glGetnSeparableFilterARB)(GLenum,GLenum,GLenum,GLsizei,GLvoid*,GLsizei,GLvoid*,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnTexImageARB)(GLenum,GLint,GLenum,GLenum,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glGetnUniformdvARB)(GLuint,GLint,GLsizei,GLdouble*);
+        void       (WINE_GLAPI *p_glGetnUniformfvARB)(GLuint,GLint,GLsizei,GLfloat*);
+        void       (WINE_GLAPI *p_glGetnUniformivARB)(GLuint,GLint,GLsizei,GLint*);
+        void       (WINE_GLAPI *p_glGetnUniformuivARB)(GLuint,GLint,GLsizei,GLuint*);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactorbSUN)(GLbyte);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactordSUN)(GLdouble);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactorfSUN)(GLfloat);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactoriSUN)(GLint);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactorsSUN)(GLshort);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactorubSUN)(GLubyte);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactoruiSUN)(GLuint);
+        void       (WINE_GLAPI *p_glGlobalAlphaFactorusSUN)(GLushort);
+        void       (WINE_GLAPI *p_glHintPGI)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glHistogram)(GLenum,GLsizei,GLenum,GLboolean);
+        void       (WINE_GLAPI *p_glHistogramEXT)(GLenum,GLsizei,GLenum,GLboolean);
+        void       (WINE_GLAPI *p_glIglooInterfaceSGIX)(GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glImageTransformParameterfHP)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glImageTransformParameterfvHP)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glImageTransformParameteriHP)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glImageTransformParameterivHP)(GLenum,GLenum,const GLint*);
+        GLvoid*    (WINE_GLAPI *p_glImportSyncEXT)(GLenum,GLintptr,GLbitfield);
+        void       (WINE_GLAPI *p_glIndexFormatNV)(GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glIndexFuncEXT)(GLenum,GLclampf);
+        void       (WINE_GLAPI *p_glIndexMaterialEXT)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glIndexPointerEXT)(GLenum,GLsizei,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glIndexPointerListIBM)(GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glInsertComponentEXT)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glInstrumentsBufferSGIX)(GLsizei,GLint*);
+        void       (WINE_GLAPI *p_glInterpolatePathsNV)(GLuint,GLuint,GLuint,GLfloat);
+        void       (WINE_GLAPI *p_glInvalidateBufferData)(GLuint);
+        void       (WINE_GLAPI *p_glInvalidateBufferSubData)(GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glInvalidateFramebuffer)(GLenum,GLsizei,const GLenum*);
+        void       (WINE_GLAPI *p_glInvalidateSubFramebuffer)(GLenum,GLsizei,const GLenum*,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glInvalidateTexImage)(GLuint,GLint);
+        void       (WINE_GLAPI *p_glInvalidateTexSubImage)(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei);
+        GLboolean  (WINE_GLAPI *p_glIsAsyncMarkerSGIX)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsBuffer)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsBufferARB)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsBufferResidentNV)(GLenum);
+        GLboolean  (WINE_GLAPI *p_glIsEnabledIndexedEXT)(GLenum,GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsEnabledi)(GLenum,GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsFenceAPPLE)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsFenceNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsFramebuffer)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsFramebufferEXT)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsImageHandleResidentNV)(UINT64);
+        GLboolean  (WINE_GLAPI *p_glIsNameAMD)(GLenum,GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsNamedBufferResidentNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsNamedStringARB)(GLint,const GLchar*);
+        GLboolean  (WINE_GLAPI *p_glIsObjectBufferATI)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsOcclusionQueryNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsPathNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsPointInFillPathNV)(GLuint,GLuint,GLfloat,GLfloat);
+        GLboolean  (WINE_GLAPI *p_glIsPointInStrokePathNV)(GLuint,GLfloat,GLfloat);
+        GLboolean  (WINE_GLAPI *p_glIsProgram)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsProgramARB)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsProgramNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsProgramPipeline)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsQuery)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsQueryARB)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsRenderbuffer)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsRenderbufferEXT)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsSampler)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsShader)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsSync)(GLvoid*);
+        GLboolean  (WINE_GLAPI *p_glIsTextureEXT)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsTextureHandleResidentNV)(UINT64);
+        GLboolean  (WINE_GLAPI *p_glIsTransformFeedback)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsTransformFeedbackNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsVariantEnabledEXT)(GLuint,GLenum);
+        GLboolean  (WINE_GLAPI *p_glIsVertexArray)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsVertexArrayAPPLE)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glIsVertexAttribEnabledAPPLE)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glLightEnviSGIX)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glLinkProgram)(GLuint);
+        void       (WINE_GLAPI *p_glLinkProgramARB)(GLhandleARB);
+        void       (WINE_GLAPI *p_glListParameterfSGIX)(GLuint,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glListParameterfvSGIX)(GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glListParameteriSGIX)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glListParameterivSGIX)(GLuint,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glLoadIdentityDeformationMapSGIX)(GLbitfield);
+        void       (WINE_GLAPI *p_glLoadProgramNV)(GLenum,GLuint,GLsizei,const GLubyte*);
+        void       (WINE_GLAPI *p_glLoadTransposeMatrixd)(const GLdouble*);
+        void       (WINE_GLAPI *p_glLoadTransposeMatrixdARB)(const GLdouble*);
+        void       (WINE_GLAPI *p_glLoadTransposeMatrixf)(const GLfloat*);
+        void       (WINE_GLAPI *p_glLoadTransposeMatrixfARB)(const GLfloat*);
+        void       (WINE_GLAPI *p_glLockArraysEXT)(GLint,GLsizei);
+        void       (WINE_GLAPI *p_glMTexCoord2fSGIS)(GLenum,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMTexCoord2fvSGIS)(GLenum,GLfloat *);
+        void       (WINE_GLAPI *p_glMakeBufferNonResidentNV)(GLenum);
+        void       (WINE_GLAPI *p_glMakeBufferResidentNV)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glMakeImageHandleNonResidentNV)(UINT64);
+        void       (WINE_GLAPI *p_glMakeImageHandleResidentNV)(UINT64,GLenum);
+        void       (WINE_GLAPI *p_glMakeNamedBufferNonResidentNV)(GLuint);
+        void       (WINE_GLAPI *p_glMakeNamedBufferResidentNV)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glMakeTextureHandleNonResidentNV)(UINT64);
+        void       (WINE_GLAPI *p_glMakeTextureHandleResidentNV)(UINT64);
+        GLvoid*    (WINE_GLAPI *p_glMapBuffer)(GLenum,GLenum);
+        GLvoid*    (WINE_GLAPI *p_glMapBufferARB)(GLenum,GLenum);
+        GLvoid*    (WINE_GLAPI *p_glMapBufferRange)(GLenum,GLintptr,GLsizeiptr,GLbitfield);
+        void       (WINE_GLAPI *p_glMapControlPointsNV)(GLenum,GLuint,GLenum,GLsizei,GLsizei,GLint,GLint,GLboolean,const GLvoid*);
+        GLvoid*    (WINE_GLAPI *p_glMapNamedBufferEXT)(GLuint,GLenum);
+        GLvoid*    (WINE_GLAPI *p_glMapNamedBufferRangeEXT)(GLuint,GLintptr,GLsizeiptr,GLbitfield);
+        GLvoid*    (WINE_GLAPI *p_glMapObjectBufferATI)(GLuint);
+        void       (WINE_GLAPI *p_glMapParameterfvNV)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMapParameterivNV)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMapVertexAttrib1dAPPLE)(GLuint,GLuint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+        void       (WINE_GLAPI *p_glMapVertexAttrib1fAPPLE)(GLuint,GLuint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glMapVertexAttrib2dAPPLE)(GLuint,GLuint,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+        void       (WINE_GLAPI *p_glMapVertexAttrib2fAPPLE)(GLuint,GLuint,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glMatrixFrustumEXT)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMatrixIndexPointerARB)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glMatrixIndexubvARB)(GLint,const GLubyte*);
+        void       (WINE_GLAPI *p_glMatrixIndexuivARB)(GLint,const GLuint*);
+        void       (WINE_GLAPI *p_glMatrixIndexusvARB)(GLint,const GLushort*);
+        void       (WINE_GLAPI *p_glMatrixLoadIdentityEXT)(GLenum);
+        void       (WINE_GLAPI *p_glMatrixLoadTransposedEXT)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMatrixLoadTransposefEXT)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMatrixLoaddEXT)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMatrixLoadfEXT)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMatrixMultTransposedEXT)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMatrixMultTransposefEXT)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMatrixMultdEXT)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMatrixMultfEXT)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMatrixOrthoEXT)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMatrixPopEXT)(GLenum);
+        void       (WINE_GLAPI *p_glMatrixPushEXT)(GLenum);
+        void       (WINE_GLAPI *p_glMatrixRotatedEXT)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMatrixRotatefEXT)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMatrixScaledEXT)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMatrixScalefEXT)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMatrixTranslatedEXT)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMatrixTranslatefEXT)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMemoryBarrier)(GLbitfield);
+        void       (WINE_GLAPI *p_glMemoryBarrierEXT)(GLbitfield);
+        void       (WINE_GLAPI *p_glMinSampleShading)(GLfloat);
+        void       (WINE_GLAPI *p_glMinSampleShadingARB)(GLfloat);
+        void       (WINE_GLAPI *p_glMinmax)(GLenum,GLenum,GLboolean);
+        void       (WINE_GLAPI *p_glMinmaxEXT)(GLenum,GLenum,GLboolean);
+        void       (WINE_GLAPI *p_glMultTransposeMatrixd)(const GLdouble*);
+        void       (WINE_GLAPI *p_glMultTransposeMatrixdARB)(const GLdouble*);
+        void       (WINE_GLAPI *p_glMultTransposeMatrixf)(const GLfloat*);
+        void       (WINE_GLAPI *p_glMultTransposeMatrixfARB)(const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiDrawArrays)(GLenum,const GLint*,const GLsizei*,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawArraysEXT)(GLenum,const GLint*,const GLsizei*,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawArraysIndirect)(GLenum,const void*,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawArraysIndirectAMD)(GLenum,const GLvoid*,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawElementArrayAPPLE)(GLenum,const GLint*,const GLsizei*,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawElements)(GLenum,const GLsizei*,GLenum,const GLvoid* const*,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawElementsBaseVertex)(GLenum,const GLsizei*,GLenum,const GLvoid* const*,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glMultiDrawElementsEXT)(GLenum,const GLsizei*,GLenum,const GLvoid**,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawElementsIndirect)(GLenum,GLenum,const void*,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawElementsIndirectAMD)(GLenum,GLenum,const GLvoid*,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glMultiDrawRangeElementArrayAPPLE)(GLenum,GLuint,GLuint,const GLint*,const GLsizei*,GLsizei);
+        void       (WINE_GLAPI *p_glMultiModeDrawArraysIBM)(const GLenum*,const GLint*,const GLsizei*,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glMultiModeDrawElementsIBM)(const GLenum*,const GLsizei*,GLenum,const GLvoid* const*,GLsizei,GLint);
+        void       (WINE_GLAPI *p_glMultiTexBufferEXT)(GLenum,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glMultiTexCoord1d)(GLenum,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord1dARB)(GLenum,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord1dSGIS)(GLenum,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord1dv)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1dvARB)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1dvSGIS)(GLenum,GLdouble *);
+        void       (WINE_GLAPI *p_glMultiTexCoord1f)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord1fARB)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord1fSGIS)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord1fv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1fvARB)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1fvSGIS)(GLenum,const GLfloat *);
+        void       (WINE_GLAPI *p_glMultiTexCoord1hNV)(GLenum,GLhalfNV);
+        void       (WINE_GLAPI *p_glMultiTexCoord1hvNV)(GLenum,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1i)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord1iARB)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord1iSGIS)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord1iv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1ivARB)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1ivSGIS)(GLenum,GLint *);
+        void       (WINE_GLAPI *p_glMultiTexCoord1s)(GLenum,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord1sARB)(GLenum,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord1sSGIS)(GLenum,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord1sv)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1svARB)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord1svSGIS)(GLenum,GLshort *);
+        void       (WINE_GLAPI *p_glMultiTexCoord2d)(GLenum,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord2dARB)(GLenum,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord2dSGIS)(GLenum,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord2dv)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2dvARB)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2dvSGIS)(GLenum,GLdouble *);
+        void       (WINE_GLAPI *p_glMultiTexCoord2f)(GLenum,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord2fARB)(GLenum,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord2fSGIS)(GLenum,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord2fv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2fvARB)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2fvSGIS)(GLenum,GLfloat *);
+        void       (WINE_GLAPI *p_glMultiTexCoord2hNV)(GLenum,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glMultiTexCoord2hvNV)(GLenum,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2i)(GLenum,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord2iARB)(GLenum,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord2iSGIS)(GLenum,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord2iv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2ivARB)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2ivSGIS)(GLenum,GLint *);
+        void       (WINE_GLAPI *p_glMultiTexCoord2s)(GLenum,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord2sARB)(GLenum,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord2sSGIS)(GLenum,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord2sv)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2svARB)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord2svSGIS)(GLenum,GLshort *);
+        void       (WINE_GLAPI *p_glMultiTexCoord3d)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord3dARB)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord3dSGIS)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord3dv)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3dvARB)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3dvSGIS)(GLenum,GLdouble *);
+        void       (WINE_GLAPI *p_glMultiTexCoord3f)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord3fARB)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord3fSGIS)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord3fv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3fvARB)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3fvSGIS)(GLenum,GLfloat *);
+        void       (WINE_GLAPI *p_glMultiTexCoord3hNV)(GLenum,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glMultiTexCoord3hvNV)(GLenum,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3i)(GLenum,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord3iARB)(GLenum,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord3iSGIS)(GLenum,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord3iv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3ivARB)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3ivSGIS)(GLenum,GLint *);
+        void       (WINE_GLAPI *p_glMultiTexCoord3s)(GLenum,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord3sARB)(GLenum,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord3sSGIS)(GLenum,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord3sv)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3svARB)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord3svSGIS)(GLenum,GLshort *);
+        void       (WINE_GLAPI *p_glMultiTexCoord4d)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord4dARB)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord4dSGIS)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexCoord4dv)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4dvARB)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4dvSGIS)(GLenum,GLdouble *);
+        void       (WINE_GLAPI *p_glMultiTexCoord4f)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord4fARB)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord4fSGIS)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexCoord4fv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4fvARB)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4fvSGIS)(GLenum,GLfloat *);
+        void       (WINE_GLAPI *p_glMultiTexCoord4hNV)(GLenum,GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glMultiTexCoord4hvNV)(GLenum,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4i)(GLenum,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord4iARB)(GLenum,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord4iSGIS)(GLenum,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glMultiTexCoord4iv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4ivARB)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4ivSGIS)(GLenum,GLint *);
+        void       (WINE_GLAPI *p_glMultiTexCoord4s)(GLenum,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord4sARB)(GLenum,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord4sSGIS)(GLenum,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glMultiTexCoord4sv)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4svARB)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glMultiTexCoord4svSGIS)(GLenum,GLshort *);
+        void       (WINE_GLAPI *p_glMultiTexCoordP1ui)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glMultiTexCoordP1uiv)(GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glMultiTexCoordP2ui)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glMultiTexCoordP2uiv)(GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glMultiTexCoordP3ui)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glMultiTexCoordP3uiv)(GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glMultiTexCoordP4ui)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glMultiTexCoordP4uiv)(GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glMultiTexCoordPointerEXT)(GLenum,GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glMultiTexCoordPointerSGIS)(GLenum,GLint,GLenum,GLsizei,GLvoid *);
+        void       (WINE_GLAPI *p_glMultiTexEnvfEXT)(GLenum,GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexEnvfvEXT)(GLenum,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexEnviEXT)(GLenum,GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glMultiTexEnvivEXT)(GLenum,GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexGendEXT)(GLenum,GLenum,GLenum,GLdouble);
+        void       (WINE_GLAPI *p_glMultiTexGendvEXT)(GLenum,GLenum,GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glMultiTexGenfEXT)(GLenum,GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexGenfvEXT)(GLenum,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexGeniEXT)(GLenum,GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glMultiTexGenivEXT)(GLenum,GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glMultiTexImage3DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glMultiTexParameterIivEXT)(GLenum,GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexParameterIuivEXT)(GLenum,GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glMultiTexParameterfEXT)(GLenum,GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glMultiTexParameterfvEXT)(GLenum,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glMultiTexParameteriEXT)(GLenum,GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glMultiTexParameterivEXT)(GLenum,GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glMultiTexRenderbufferEXT)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glNamedBufferDataEXT)(GLuint,GLsizeiptr,const GLvoid*,GLenum);
+        void       (WINE_GLAPI *p_glNamedBufferSubDataEXT)(GLuint,GLintptr,GLsizeiptr,const GLvoid*);
+        void       (WINE_GLAPI *p_glNamedCopyBufferSubDataEXT)(GLuint,GLuint,GLintptr,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glNamedFramebufferParameteriEXT)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glNamedFramebufferRenderbufferEXT)(GLuint,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glNamedFramebufferTexture1DEXT)(GLuint,GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glNamedFramebufferTexture2DEXT)(GLuint,GLenum,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glNamedFramebufferTexture3DEXT)(GLuint,GLenum,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glNamedFramebufferTextureEXT)(GLuint,GLenum,GLuint,GLint);
+        void       (WINE_GLAPI *p_glNamedFramebufferTextureFaceEXT)(GLuint,GLenum,GLuint,GLint,GLenum);
+        void       (WINE_GLAPI *p_glNamedFramebufferTextureLayerEXT)(GLuint,GLenum,GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameter4dEXT)(GLuint,GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameter4dvEXT)(GLuint,GLenum,GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameter4fEXT)(GLuint,GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameter4fvEXT)(GLuint,GLenum,GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameterI4iEXT)(GLuint,GLenum,GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameterI4ivEXT)(GLuint,GLenum,GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameterI4uiEXT)(GLuint,GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameterI4uivEXT)(GLuint,GLenum,GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParameters4fvEXT)(GLuint,GLenum,GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParametersI4ivEXT)(GLuint,GLenum,GLuint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glNamedProgramLocalParametersI4uivEXT)(GLuint,GLenum,GLuint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glNamedProgramStringEXT)(GLuint,GLenum,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glNamedRenderbufferStorageEXT)(GLuint,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glNamedRenderbufferStorageMultisampleCoverageEXT)(GLuint,GLsizei,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glNamedRenderbufferStorageMultisampleEXT)(GLuint,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glNamedStringARB)(GLenum,GLint,const GLchar*,GLint,const GLchar*);
+        GLuint     (WINE_GLAPI *p_glNewBufferRegion)(GLenum);
+        GLuint     (WINE_GLAPI *p_glNewObjectBufferATI)(GLsizei,const GLvoid*,GLenum);
+        void       (WINE_GLAPI *p_glNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glNormal3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glNormal3hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glNormalFormatNV)(GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glNormalP3ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glNormalP3uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glNormalPointerEXT)(GLenum,GLsizei,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glNormalPointerListIBM)(GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glNormalPointervINTEL)(GLenum,const GLvoid**);
+        void       (WINE_GLAPI *p_glNormalStream3bATI)(GLenum,GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glNormalStream3bvATI)(GLenum,const GLbyte*);
+        void       (WINE_GLAPI *p_glNormalStream3dATI)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glNormalStream3dvATI)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glNormalStream3fATI)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glNormalStream3fvATI)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glNormalStream3iATI)(GLenum,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glNormalStream3ivATI)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glNormalStream3sATI)(GLenum,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glNormalStream3svATI)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glObjectLabel)(GLenum,GLuint,GLsizei,const GLchar*);
+        void       (WINE_GLAPI *p_glObjectPtrLabel)(const void*,GLsizei,const GLchar*);
+        GLenum     (WINE_GLAPI *p_glObjectPurgeableAPPLE)(GLenum,GLuint,GLenum);
+        GLenum     (WINE_GLAPI *p_glObjectUnpurgeableAPPLE)(GLenum,GLuint,GLenum);
+        void       (WINE_GLAPI *p_glPNTrianglesfATI)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPNTrianglesiATI)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPassTexCoordATI)(GLuint,GLuint,GLenum);
+        void       (WINE_GLAPI *p_glPatchParameterfv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPatchParameteri)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPathColorGenNV)(GLenum,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPathCommandsNV)(GLuint,GLsizei,const GLubyte*,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glPathCoordsNV)(GLuint,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glPathCoverDepthFuncNV)(GLenum);
+        void       (WINE_GLAPI *p_glPathDashArrayNV)(GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glPathFogGenNV)(GLenum);
+        void       (WINE_GLAPI *p_glPathGlyphRangeNV)(GLuint,GLenum,const GLvoid*,GLbitfield,GLuint,GLsizei,GLenum,GLuint,GLfloat);
+        void       (WINE_GLAPI *p_glPathGlyphsNV)(GLuint,GLenum,const GLvoid*,GLbitfield,GLsizei,GLenum,const GLvoid*,GLenum,GLuint,GLfloat);
+        void       (WINE_GLAPI *p_glPathParameterfNV)(GLuint,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPathParameterfvNV)(GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPathParameteriNV)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glPathParameterivNV)(GLuint,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glPathStencilDepthOffsetNV)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glPathStencilFuncNV)(GLenum,GLint,GLuint);
+        void       (WINE_GLAPI *p_glPathStringNV)(GLuint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glPathSubCommandsNV)(GLuint,GLsizei,GLsizei,GLsizei,const GLubyte*,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glPathSubCoordsNV)(GLuint,GLsizei,GLsizei,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glPathTexGenNV)(GLenum,GLenum,GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glPauseTransformFeedback)(void);
+        void       (WINE_GLAPI *p_glPauseTransformFeedbackNV)(void);
+        void       (WINE_GLAPI *p_glPixelDataRangeNV)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glPixelTexGenParameterfSGIS)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPixelTexGenParameterfvSGIS)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPixelTexGenParameteriSGIS)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPixelTexGenParameterivSGIS)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glPixelTexGenSGIX)(GLenum);
+        void       (WINE_GLAPI *p_glPixelTransformParameterfEXT)(GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPixelTransformParameterfvEXT)(GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPixelTransformParameteriEXT)(GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glPixelTransformParameterivEXT)(GLenum,GLenum,const GLint*);
+        GLboolean  (WINE_GLAPI *p_glPointAlongPathNV)(GLuint,GLsizei,GLsizei,GLfloat,GLfloat*,GLfloat*,GLfloat*,GLfloat*);
+        void       (WINE_GLAPI *p_glPointParameterf)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPointParameterfARB)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPointParameterfEXT)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPointParameterfSGIS)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glPointParameterfv)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPointParameterfvARB)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPointParameterfvEXT)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPointParameterfvSGIS)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glPointParameteri)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPointParameteriNV)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glPointParameteriv)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glPointParameterivNV)(GLenum,const GLint*);
+        GLint      (WINE_GLAPI *p_glPollAsyncSGIX)(GLuint*);
+        GLint      (WINE_GLAPI *p_glPollInstrumentsSGIX)(GLint*);
+        void       (WINE_GLAPI *p_glPolygonOffsetEXT)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glPopDebugGroup)(void);
+        void       (WINE_GLAPI *p_glPresentFrameDualFillNV)(GLuint,UINT64,GLuint,GLuint,GLenum,GLenum,GLuint,GLenum,GLuint,GLenum,GLuint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glPresentFrameKeyedNV)(GLuint,UINT64,GLuint,GLuint,GLenum,GLenum,GLuint,GLuint,GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glPrimitiveRestartIndex)(GLuint);
+        void       (WINE_GLAPI *p_glPrimitiveRestartIndexNV)(GLuint);
+        void       (WINE_GLAPI *p_glPrimitiveRestartNV)(void);
+        void       (WINE_GLAPI *p_glPrioritizeTexturesEXT)(GLsizei,const GLuint*,const GLclampf*);
+        void       (WINE_GLAPI *p_glProgramBinary)(GLuint,GLenum,const GLvoid*,GLsizei);
+        void       (WINE_GLAPI *p_glProgramBufferParametersIivNV)(GLenum,GLuint,GLuint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramBufferParametersIuivNV)(GLenum,GLuint,GLuint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramBufferParametersfvNV)(GLenum,GLuint,GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramEnvParameter4dARB)(GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramEnvParameter4dvARB)(GLenum,GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramEnvParameter4fARB)(GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramEnvParameter4fvARB)(GLenum,GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramEnvParameterI4iNV)(GLenum,GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramEnvParameterI4ivNV)(GLenum,GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glProgramEnvParameterI4uiNV)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramEnvParameterI4uivNV)(GLenum,GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramEnvParameters4fvEXT)(GLenum,GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramEnvParametersI4ivNV)(GLenum,GLuint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramEnvParametersI4uivNV)(GLenum,GLuint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramLocalParameter4dARB)(GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramLocalParameter4dvARB)(GLenum,GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramLocalParameter4fARB)(GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramLocalParameter4fvARB)(GLenum,GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramLocalParameterI4iNV)(GLenum,GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramLocalParameterI4ivNV)(GLenum,GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glProgramLocalParameterI4uiNV)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramLocalParameterI4uivNV)(GLenum,GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramLocalParameters4fvEXT)(GLenum,GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramLocalParametersI4ivNV)(GLenum,GLuint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramLocalParametersI4uivNV)(GLenum,GLuint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramNamedParameter4dNV)(GLuint,GLsizei,const GLubyte*,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramNamedParameter4dvNV)(GLuint,GLsizei,const GLubyte*,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramNamedParameter4fNV)(GLuint,GLsizei,const GLubyte*,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramNamedParameter4fvNV)(GLuint,GLsizei,const GLubyte*,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramParameter4dNV)(GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramParameter4dvNV)(GLenum,GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramParameter4fNV)(GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramParameter4fvNV)(GLenum,GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramParameteri)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glProgramParameteriARB)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glProgramParameteriEXT)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glProgramParameters4dvNV)(GLenum,GLuint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramParameters4fvNV)(GLenum,GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramStringARB)(GLenum,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glProgramSubroutineParametersuivNV)(GLenum,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform1d)(GLuint,GLint,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform1dEXT)(GLuint,GLint,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform1dv)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform1dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform1f)(GLuint,GLint,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform1fEXT)(GLuint,GLint,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform1fv)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform1fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform1i)(GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform1i64NV)(GLuint,GLint,INT64);
+        void       (WINE_GLAPI *p_glProgramUniform1i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glProgramUniform1iEXT)(GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform1iv)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform1ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform1ui)(GLuint,GLint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform1ui64NV)(GLuint,GLint,UINT64);
+        void       (WINE_GLAPI *p_glProgramUniform1ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glProgramUniform1uiEXT)(GLuint,GLint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform1uiv)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform1uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform2d)(GLuint,GLint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform2dEXT)(GLuint,GLint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform2dv)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform2dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform2f)(GLuint,GLint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform2fEXT)(GLuint,GLint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform2fv)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform2fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform2i)(GLuint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform2i64NV)(GLuint,GLint,INT64,INT64);
+        void       (WINE_GLAPI *p_glProgramUniform2i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glProgramUniform2iEXT)(GLuint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform2iv)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform2ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform2ui)(GLuint,GLint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform2ui64NV)(GLuint,GLint,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glProgramUniform2ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glProgramUniform2uiEXT)(GLuint,GLint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform2uiv)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform2uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform3d)(GLuint,GLint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform3dEXT)(GLuint,GLint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform3dv)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform3dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform3f)(GLuint,GLint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform3fEXT)(GLuint,GLint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform3fv)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform3fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform3i)(GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform3i64NV)(GLuint,GLint,INT64,INT64,INT64);
+        void       (WINE_GLAPI *p_glProgramUniform3i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glProgramUniform3iEXT)(GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform3iv)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform3ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform3ui)(GLuint,GLint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform3ui64NV)(GLuint,GLint,UINT64,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glProgramUniform3ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glProgramUniform3uiEXT)(GLuint,GLint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform3uiv)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform3uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform4d)(GLuint,GLint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform4dEXT)(GLuint,GLint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glProgramUniform4dv)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform4dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniform4f)(GLuint,GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform4fEXT)(GLuint,GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glProgramUniform4fv)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform4fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniform4i)(GLuint,GLint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform4i64NV)(GLuint,GLint,INT64,INT64,INT64,INT64);
+        void       (WINE_GLAPI *p_glProgramUniform4i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glProgramUniform4iEXT)(GLuint,GLint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glProgramUniform4iv)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform4ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glProgramUniform4ui)(GLuint,GLint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform4ui64NV)(GLuint,GLint,UINT64,UINT64,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glProgramUniform4ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glProgramUniform4uiEXT)(GLuint,GLint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glProgramUniform4uiv)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniform4uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glProgramUniformHandleui64NV)(GLuint,GLint,UINT64);
+        void       (WINE_GLAPI *p_glProgramUniformHandleui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x3dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x3dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x3fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x3fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x4dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x4dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x4fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix2x4fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x2dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x2dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x2fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x2fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x4dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x4dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x4fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix3x4fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x2dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x2dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x2fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x2fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x3dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x3dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x3fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformMatrix4x3fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glProgramUniformui64NV)(GLuint,GLint,UINT64);
+        void       (WINE_GLAPI *p_glProgramUniformui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glProgramVertexLimitNV)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glProvokingVertex)(GLenum);
+        void       (WINE_GLAPI *p_glProvokingVertexEXT)(GLenum);
+        void       (WINE_GLAPI *p_glPushClientAttribDefaultEXT)(GLbitfield);
+        void       (WINE_GLAPI *p_glPushDebugGroup)(GLenum,GLuint,GLsizei,const GLchar*);
+        void       (WINE_GLAPI *p_glQueryCounter)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glReadBufferRegion)(GLenum,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glReadInstrumentsSGIX)(GLint);
+        void       (WINE_GLAPI *p_glReadnPixelsARB)(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glReferencePlaneSGIX)(const GLdouble*);
+        void       (WINE_GLAPI *p_glReleaseShaderCompiler)(void);
+        void       (WINE_GLAPI *p_glRenderbufferStorage)(GLenum,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glRenderbufferStorageEXT)(GLenum,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glRenderbufferStorageMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glRenderbufferStorageMultisampleCoverageNV)(GLenum,GLsizei,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glRenderbufferStorageMultisampleEXT)(GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glReplacementCodePointerSUN)(GLenum,GLsizei,const GLvoid**);
+        void       (WINE_GLAPI *p_glReplacementCodeubSUN)(GLubyte);
+        void       (WINE_GLAPI *p_glReplacementCodeubvSUN)(const GLubyte*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiColor3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiColor3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiColor4fNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiColor4fNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiColor4ubVertex3fSUN)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiColor4ubVertex3fvSUN)(const GLuint*,const GLubyte*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiSUN)(GLuint);
+        void       (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuiVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glReplacementCodeuiVertex3fvSUN)(const GLuint*,const GLfloat*);
+        void       (WINE_GLAPI *p_glReplacementCodeuivSUN)(const GLuint*);
+        void       (WINE_GLAPI *p_glReplacementCodeusSUN)(GLushort);
+        void       (WINE_GLAPI *p_glReplacementCodeusvSUN)(const GLushort*);
+        void       (WINE_GLAPI *p_glRequestResidentProgramsNV)(GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glResetHistogram)(GLenum);
+        void       (WINE_GLAPI *p_glResetHistogramEXT)(GLenum);
+        void       (WINE_GLAPI *p_glResetMinmax)(GLenum);
+        void       (WINE_GLAPI *p_glResetMinmaxEXT)(GLenum);
+        void       (WINE_GLAPI *p_glResizeBuffersMESA)(void);
+        void       (WINE_GLAPI *p_glResumeTransformFeedback)(void);
+        void       (WINE_GLAPI *p_glResumeTransformFeedbackNV)(void);
+        void       (WINE_GLAPI *p_glSampleCoverage)(GLfloat,GLboolean);
+        void       (WINE_GLAPI *p_glSampleCoverageARB)(GLfloat,GLboolean);
+        void       (WINE_GLAPI *p_glSampleMapATI)(GLuint,GLuint,GLenum);
+        void       (WINE_GLAPI *p_glSampleMaskEXT)(GLclampf,GLboolean);
+        void       (WINE_GLAPI *p_glSampleMaskIndexedNV)(GLuint,GLbitfield);
+        void       (WINE_GLAPI *p_glSampleMaskSGIS)(GLclampf,GLboolean);
+        void       (WINE_GLAPI *p_glSampleMaski)(GLuint,GLbitfield);
+        void       (WINE_GLAPI *p_glSamplePatternEXT)(GLenum);
+        void       (WINE_GLAPI *p_glSamplePatternSGIS)(GLenum);
+        void       (WINE_GLAPI *p_glSamplerParameterIiv)(GLuint,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glSamplerParameterIuiv)(GLuint,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glSamplerParameterf)(GLuint,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glSamplerParameterfv)(GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glSamplerParameteri)(GLuint,GLenum,GLint);
+        void       (WINE_GLAPI *p_glSamplerParameteriv)(GLuint,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glScissorArrayv)(GLuint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glScissorIndexed)(GLuint,GLint,GLint,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glScissorIndexedv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glSecondaryColor3b)(GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glSecondaryColor3bEXT)(GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glSecondaryColor3bv)(const GLbyte*);
+        void       (WINE_GLAPI *p_glSecondaryColor3bvEXT)(const GLbyte*);
+        void       (WINE_GLAPI *p_glSecondaryColor3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glSecondaryColor3dEXT)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glSecondaryColor3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glSecondaryColor3dvEXT)(const GLdouble*);
+        void       (WINE_GLAPI *p_glSecondaryColor3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glSecondaryColor3fEXT)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glSecondaryColor3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glSecondaryColor3fvEXT)(const GLfloat*);
+        void       (WINE_GLAPI *p_glSecondaryColor3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glSecondaryColor3hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glSecondaryColor3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glSecondaryColor3iEXT)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glSecondaryColor3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glSecondaryColor3ivEXT)(const GLint*);
+        void       (WINE_GLAPI *p_glSecondaryColor3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glSecondaryColor3sEXT)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glSecondaryColor3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glSecondaryColor3svEXT)(const GLshort*);
+        void       (WINE_GLAPI *p_glSecondaryColor3ub)(GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glSecondaryColor3ubEXT)(GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glSecondaryColor3ubv)(const GLubyte*);
+        void       (WINE_GLAPI *p_glSecondaryColor3ubvEXT)(const GLubyte*);
+        void       (WINE_GLAPI *p_glSecondaryColor3ui)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glSecondaryColor3uiEXT)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glSecondaryColor3uiv)(const GLuint*);
+        void       (WINE_GLAPI *p_glSecondaryColor3uivEXT)(const GLuint*);
+        void       (WINE_GLAPI *p_glSecondaryColor3us)(GLushort,GLushort,GLushort);
+        void       (WINE_GLAPI *p_glSecondaryColor3usEXT)(GLushort,GLushort,GLushort);
+        void       (WINE_GLAPI *p_glSecondaryColor3usv)(const GLushort*);
+        void       (WINE_GLAPI *p_glSecondaryColor3usvEXT)(const GLushort*);
+        void       (WINE_GLAPI *p_glSecondaryColorFormatNV)(GLint,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glSecondaryColorP3ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glSecondaryColorP3uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glSecondaryColorPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glSecondaryColorPointerEXT)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glSecondaryColorPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glSelectPerfMonitorCountersAMD)(GLuint,GLboolean,GLuint,GLint,GLuint*);
+        void       (WINE_GLAPI *p_glSelectTextureCoordSetSGIS)(GLenum);
+        void       (WINE_GLAPI *p_glSelectTextureSGIS)(GLenum);
+        void       (WINE_GLAPI *p_glSeparableFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*,const GLvoid*);
+        void       (WINE_GLAPI *p_glSeparableFilter2DEXT)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*,const GLvoid*);
+        void       (WINE_GLAPI *p_glSetFenceAPPLE)(GLuint);
+        void       (WINE_GLAPI *p_glSetFenceNV)(GLuint,GLenum);
+        void       (WINE_GLAPI *p_glSetFragmentShaderConstantATI)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glSetInvariantEXT)(GLuint,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glSetLocalConstantEXT)(GLuint,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glSetMultisamplefvAMD)(GLenum,GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glShaderBinary)(GLsizei,const GLuint*,GLenum,const GLvoid*,GLsizei);
+        void       (WINE_GLAPI *p_glShaderOp1EXT)(GLenum,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glShaderOp2EXT)(GLenum,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glShaderOp3EXT)(GLenum,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glShaderSource)(GLuint,GLsizei,const GLchar* const*,const GLint*);
+        void       (WINE_GLAPI *p_glShaderSourceARB)(GLhandleARB,GLsizei,const GLcharARB**,const GLint*);
+        void       (WINE_GLAPI *p_glShaderStorageBlockBinding)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glSharpenTexFuncSGIS)(GLenum,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glSpriteParameterfSGIX)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glSpriteParameterfvSGIX)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glSpriteParameteriSGIX)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glSpriteParameterivSGIX)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glStartInstrumentsSGIX)(void);
+        void       (WINE_GLAPI *p_glStencilClearTagEXT)(GLsizei,GLuint);
+        void       (WINE_GLAPI *p_glStencilFillPathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glStencilFillPathNV)(GLuint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glStencilFuncSeparate)(GLenum,GLenum,GLint,GLuint);
+        void       (WINE_GLAPI *p_glStencilFuncSeparateATI)(GLenum,GLenum,GLint,GLuint);
+        void       (WINE_GLAPI *p_glStencilMaskSeparate)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glStencilOpSeparate)(GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glStencilOpSeparateATI)(GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glStencilOpValueAMD)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glStencilStrokePathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLint,GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glStencilStrokePathNV)(GLuint,GLint,GLuint);
+        void       (WINE_GLAPI *p_glStopInstrumentsSGIX)(GLint);
+        void       (WINE_GLAPI *p_glStringMarkerGREMEDY)(GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glSwizzleEXT)(GLuint,GLuint,GLenum,GLenum,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glTagSampleBufferSGIX)(void);
+        void       (WINE_GLAPI *p_glTangent3bEXT)(GLbyte,GLbyte,GLbyte);
+        void       (WINE_GLAPI *p_glTangent3bvEXT)(const GLbyte*);
+        void       (WINE_GLAPI *p_glTangent3dEXT)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glTangent3dvEXT)(const GLdouble*);
+        void       (WINE_GLAPI *p_glTangent3fEXT)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTangent3fvEXT)(const GLfloat*);
+        void       (WINE_GLAPI *p_glTangent3iEXT)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glTangent3ivEXT)(const GLint*);
+        void       (WINE_GLAPI *p_glTangent3sEXT)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glTangent3svEXT)(const GLshort*);
+        void       (WINE_GLAPI *p_glTangentPointerEXT)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glTbufferMask3DFX)(GLuint);
+        void       (WINE_GLAPI *p_glTessellationFactorAMD)(GLfloat);
+        void       (WINE_GLAPI *p_glTessellationModeAMD)(GLenum);
+        GLboolean  (WINE_GLAPI *p_glTestFenceAPPLE)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glTestFenceNV)(GLuint);
+        GLboolean  (WINE_GLAPI *p_glTestObjectAPPLE)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexBuffer)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexBufferARB)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexBufferEXT)(GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexBufferRange)(GLenum,GLenum,GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glTexBumpParameterfvATI)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexBumpParameterivATI)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTexCoord1hNV)(GLhalfNV);
+        void       (WINE_GLAPI *p_glTexCoord1hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glTexCoord2fColor3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord2fColor3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord2fColor4fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord2fColor4ubVertex3fSUN)(GLfloat,GLfloat,GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord2fColor4ubVertex3fvSUN)(const GLfloat*,const GLubyte*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord2fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord2fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord2fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord2fVertex3fvSUN)(const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord2hNV)(GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glTexCoord2hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glTexCoord3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glTexCoord3hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glTexCoord4fColor4fNormal3fVertex4fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord4fColor4fNormal3fVertex4fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord4fVertex4fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glTexCoord4fVertex4fvSUN)(const GLfloat*,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexCoord4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glTexCoord4hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glTexCoordFormatNV)(GLint,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glTexCoordP1ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexCoordP1uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTexCoordP2ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexCoordP2uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTexCoordP3ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexCoordP3uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTexCoordP4ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexCoordP4uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTexCoordPointerEXT)(GLint,GLenum,GLsizei,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexCoordPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glTexCoordPointervINTEL)(GLint,GLenum,const GLvoid**);
+        void       (WINE_GLAPI *p_glTexFilterFuncSGIS)(GLenum,GLenum,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glTexImage2DMultisample)(GLenum,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTexImage2DMultisampleCoverageNV)(GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTexImage3D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexImage3DEXT)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexImage3DMultisample)(GLenum,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTexImage3DMultisampleCoverageNV)(GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTexImage4DSGIS)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexParameterIiv)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTexParameterIivEXT)(GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTexParameterIuiv)(GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTexParameterIuivEXT)(GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTexRenderbufferNV)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTexStorage1D)(GLenum,GLsizei,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glTexStorage2D)(GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glTexStorage2DMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTexStorage3D)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glTexStorage3DMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTexStorageSparseAMD)(GLenum,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLbitfield);
+        void       (WINE_GLAPI *p_glTexSubImage1DEXT)(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexSubImage2DEXT)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexSubImage3DEXT)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTexSubImage4DSGIS)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureBarrierNV)(void);
+        void       (WINE_GLAPI *p_glTextureBufferEXT)(GLuint,GLenum,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTextureBufferRangeEXT)(GLuint,GLenum,GLenum,GLuint,GLintptr,GLsizeiptr);
+        void       (WINE_GLAPI *p_glTextureColorMaskSGIS)(GLboolean,GLboolean,GLboolean,GLboolean);
+        void       (WINE_GLAPI *p_glTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureImage2DMultisampleCoverageNV)(GLuint,GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTextureImage2DMultisampleNV)(GLuint,GLenum,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTextureImage3DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureImage3DMultisampleCoverageNV)(GLuint,GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTextureImage3DMultisampleNV)(GLuint,GLenum,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTextureLightEXT)(GLenum);
+        void       (WINE_GLAPI *p_glTextureMaterialEXT)(GLenum,GLenum);
+        void       (WINE_GLAPI *p_glTextureNormalEXT)(GLenum);
+        void       (WINE_GLAPI *p_glTextureParameterIivEXT)(GLuint,GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTextureParameterIuivEXT)(GLuint,GLenum,GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glTextureParameterfEXT)(GLuint,GLenum,GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glTextureParameterfvEXT)(GLuint,GLenum,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glTextureParameteriEXT)(GLuint,GLenum,GLenum,GLint);
+        void       (WINE_GLAPI *p_glTextureParameterivEXT)(GLuint,GLenum,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glTextureRangeAPPLE)(GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureRenderbufferEXT)(GLuint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glTextureStorage1DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glTextureStorage2DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glTextureStorage2DMultisampleEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTextureStorage3DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei);
+        void       (WINE_GLAPI *p_glTextureStorage3DMultisampleEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean);
+        void       (WINE_GLAPI *p_glTextureStorageSparseAMD)(GLuint,GLenum,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLbitfield);
+        void       (WINE_GLAPI *p_glTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+        void       (WINE_GLAPI *p_glTextureView)(GLuint,GLenum,GLuint,GLenum,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glTrackMatrixNV)(GLenum,GLuint,GLenum,GLenum);
+        void       (WINE_GLAPI *p_glTransformFeedbackAttribsNV)(GLuint,const GLint*,GLenum);
+        void       (WINE_GLAPI *p_glTransformFeedbackStreamAttribsNV)(GLsizei,const GLint*,GLsizei,const GLint*,GLenum);
+        void       (WINE_GLAPI *p_glTransformFeedbackVaryings)(GLuint,GLsizei,const GLchar* const*,GLenum);
+        void       (WINE_GLAPI *p_glTransformFeedbackVaryingsEXT)(GLuint,GLsizei,const GLchar**,GLenum);
+        void       (WINE_GLAPI *p_glTransformFeedbackVaryingsNV)(GLuint,GLsizei,const GLint*,GLenum);
+        void       (WINE_GLAPI *p_glTransformPathNV)(GLuint,GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform1d)(GLint,GLdouble);
+        void       (WINE_GLAPI *p_glUniform1dv)(GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniform1f)(GLint,GLfloat);
+        void       (WINE_GLAPI *p_glUniform1fARB)(GLint,GLfloat);
+        void       (WINE_GLAPI *p_glUniform1fv)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform1fvARB)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform1i)(GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform1i64NV)(GLint,INT64);
+        void       (WINE_GLAPI *p_glUniform1i64vNV)(GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glUniform1iARB)(GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform1iv)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform1ivARB)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform1ui)(GLint,GLuint);
+        void       (WINE_GLAPI *p_glUniform1ui64NV)(GLint,UINT64);
+        void       (WINE_GLAPI *p_glUniform1ui64vNV)(GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glUniform1uiEXT)(GLint,GLuint);
+        void       (WINE_GLAPI *p_glUniform1uiv)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform1uivEXT)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform2d)(GLint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glUniform2dv)(GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniform2f)(GLint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glUniform2fARB)(GLint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glUniform2fv)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform2fvARB)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform2i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform2i64NV)(GLint,INT64,INT64);
+        void       (WINE_GLAPI *p_glUniform2i64vNV)(GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glUniform2iARB)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform2iv)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform2ivARB)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform2ui)(GLint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniform2ui64NV)(GLint,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glUniform2ui64vNV)(GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glUniform2uiEXT)(GLint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniform2uiv)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform2uivEXT)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform3d)(GLint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glUniform3dv)(GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniform3f)(GLint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glUniform3fARB)(GLint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glUniform3fv)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform3fvARB)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform3i)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform3i64NV)(GLint,INT64,INT64,INT64);
+        void       (WINE_GLAPI *p_glUniform3i64vNV)(GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glUniform3iARB)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform3iv)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform3ivARB)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform3ui)(GLint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniform3ui64NV)(GLint,UINT64,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glUniform3ui64vNV)(GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glUniform3uiEXT)(GLint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniform3uiv)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform3uivEXT)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform4d)(GLint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glUniform4dv)(GLint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniform4f)(GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glUniform4fARB)(GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glUniform4fv)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform4fvARB)(GLint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniform4i)(GLint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform4i64NV)(GLint,INT64,INT64,INT64,INT64);
+        void       (WINE_GLAPI *p_glUniform4i64vNV)(GLint,GLsizei,const INT64*);
+        void       (WINE_GLAPI *p_glUniform4iARB)(GLint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glUniform4iv)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform4ivARB)(GLint,GLsizei,const GLint*);
+        void       (WINE_GLAPI *p_glUniform4ui)(GLint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniform4ui64NV)(GLint,UINT64,UINT64,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glUniform4ui64vNV)(GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glUniform4uiEXT)(GLint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniform4uiv)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniform4uivEXT)(GLint,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniformBlockBinding)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glUniformBufferEXT)(GLuint,GLint,GLuint);
+        void       (WINE_GLAPI *p_glUniformHandleui64NV)(GLint,UINT64);
+        void       (WINE_GLAPI *p_glUniformHandleui64vNV)(GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glUniformMatrix2dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix2fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix2fvARB)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix2x3dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix2x3fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix2x4dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix2x4fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix3dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix3fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix3fvARB)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix3x2dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix3x2fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix3x4dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix3x4fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix4dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix4fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix4fvARB)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix4x2dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix4x2fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformMatrix4x3dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+        void       (WINE_GLAPI *p_glUniformMatrix4x3fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+        void       (WINE_GLAPI *p_glUniformSubroutinesuiv)(GLenum,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glUniformui64NV)(GLint,UINT64);
+        void       (WINE_GLAPI *p_glUniformui64vNV)(GLint,GLsizei,const UINT64*);
+        void       (WINE_GLAPI *p_glUnlockArraysEXT)(void);
+        GLboolean  (WINE_GLAPI *p_glUnmapBuffer)(GLenum);
+        GLboolean  (WINE_GLAPI *p_glUnmapBufferARB)(GLenum);
+        GLboolean  (WINE_GLAPI *p_glUnmapNamedBufferEXT)(GLuint);
+        void       (WINE_GLAPI *p_glUnmapObjectBufferATI)(GLuint);
+        void       (WINE_GLAPI *p_glUpdateObjectBufferATI)(GLuint,GLuint,GLsizei,const GLvoid*,GLenum);
+        void       (WINE_GLAPI *p_glUseProgram)(GLuint);
+        void       (WINE_GLAPI *p_glUseProgramObjectARB)(GLhandleARB);
+        void       (WINE_GLAPI *p_glUseProgramStages)(GLuint,GLbitfield,GLuint);
+        void       (WINE_GLAPI *p_glUseShaderProgramEXT)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVDPAUFiniNV)(void);
+        void       (WINE_GLAPI *p_glVDPAUGetSurfaceivNV)(GLvdpauSurfaceNV,GLenum,GLsizei,GLsizei*,GLint*);
+        void       (WINE_GLAPI *p_glVDPAUInitNV)(const GLvoid*,const GLvoid*);
+        void       (WINE_GLAPI *p_glVDPAUIsSurfaceNV)(GLvdpauSurfaceNV);
+        void       (WINE_GLAPI *p_glVDPAUMapSurfacesNV)(GLsizei,const GLvdpauSurfaceNV*);
+        GLvdpauSurfaceNV (WINE_GLAPI *p_glVDPAURegisterOutputSurfaceNV)(GLvoid*,GLenum,GLsizei,const GLuint*);
+        GLvdpauSurfaceNV (WINE_GLAPI *p_glVDPAURegisterVideoSurfaceNV)(const GLvoid*,GLenum,GLsizei,const GLuint*);
+        void       (WINE_GLAPI *p_glVDPAUSurfaceAccessNV)(GLvdpauSurfaceNV,GLenum);
+        void       (WINE_GLAPI *p_glVDPAUUnmapSurfacesNV)(GLsizei,const GLvdpauSurfaceNV*);
+        void       (WINE_GLAPI *p_glVDPAUUnregisterSurfaceNV)(GLvdpauSurfaceNV);
+        void       (WINE_GLAPI *p_glValidateProgram)(GLuint);
+        void       (WINE_GLAPI *p_glValidateProgramARB)(GLhandleARB);
+        void       (WINE_GLAPI *p_glValidateProgramPipeline)(GLuint);
+        void       (WINE_GLAPI *p_glVariantArrayObjectATI)(GLuint,GLenum,GLsizei,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVariantPointerEXT)(GLuint,GLenum,GLuint,const GLvoid*);
+        void       (WINE_GLAPI *p_glVariantbvEXT)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVariantdvEXT)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVariantfvEXT)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVariantivEXT)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVariantsvEXT)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVariantubvEXT)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVariantuivEXT)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVariantusvEXT)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertex2hNV)(GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertex2hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertex3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertex3hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertex4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertex4hvNV)(const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexArrayBindVertexBufferEXT)(GLuint,GLuint,GLuint,GLintptr,GLsizei);
+        void       (WINE_GLAPI *p_glVertexArrayParameteriAPPLE)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glVertexArrayRangeAPPLE)(GLsizei,GLvoid*);
+        void       (WINE_GLAPI *p_glVertexArrayRangeNV)(GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexArrayVertexAttribBindingEXT)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexArrayVertexAttribFormatEXT)(GLuint,GLuint,GLint,GLenum,GLboolean,GLuint);
+        void       (WINE_GLAPI *p_glVertexArrayVertexAttribIFormatEXT)(GLuint,GLuint,GLint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexArrayVertexAttribLFormatEXT)(GLuint,GLuint,GLint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexArrayVertexAttribLOffsetEXT)(GLuint,GLuint,GLuint,GLint,GLenum,GLsizei,GLintptr);
+        void       (WINE_GLAPI *p_glVertexArrayVertexBindingDivisorEXT)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttrib1d)(GLuint,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib1dARB)(GLuint,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib1dNV)(GLuint,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib1dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib1dvARB)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib1dvNV)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib1f)(GLuint,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib1fARB)(GLuint,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib1fNV)(GLuint,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib1fv)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib1fvARB)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib1fvNV)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib1hNV)(GLuint,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertexAttrib1hvNV)(GLuint,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttrib1s)(GLuint,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib1sARB)(GLuint,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib1sNV)(GLuint,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib1sv)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib1svARB)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib1svNV)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib2d)(GLuint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib2dARB)(GLuint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib2dNV)(GLuint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib2dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib2dvARB)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib2dvNV)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib2f)(GLuint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib2fARB)(GLuint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib2fNV)(GLuint,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib2fv)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib2fvARB)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib2fvNV)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib2hNV)(GLuint,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertexAttrib2hvNV)(GLuint,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttrib2s)(GLuint,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib2sARB)(GLuint,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib2sNV)(GLuint,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib2sv)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib2svARB)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib2svNV)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib3d)(GLuint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib3dARB)(GLuint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib3dNV)(GLuint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib3dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib3dvARB)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib3dvNV)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib3f)(GLuint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib3fARB)(GLuint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib3fNV)(GLuint,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib3fv)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib3fvARB)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib3fvNV)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib3hNV)(GLuint,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertexAttrib3hvNV)(GLuint,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttrib3s)(GLuint,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib3sARB)(GLuint,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib3sNV)(GLuint,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib3sv)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib3svARB)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib3svNV)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4Nbv)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4NbvARB)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4Niv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4NivARB)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4Nsv)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4NsvARB)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4Nub)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glVertexAttrib4NubARB)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glVertexAttrib4Nubv)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4NubvARB)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4Nuiv)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4NuivARB)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4Nusv)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4NusvARB)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4bv)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4bvARB)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4d)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib4dARB)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib4dNV)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttrib4dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib4dvARB)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib4dvNV)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttrib4f)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib4fARB)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib4fNV)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexAttrib4fv)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib4fvARB)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib4fvNV)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttrib4hNV)(GLuint,GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+        void       (WINE_GLAPI *p_glVertexAttrib4hvNV)(GLuint,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttrib4iv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4ivARB)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4s)(GLuint,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib4sARB)(GLuint,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib4sNV)(GLuint,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexAttrib4sv)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4svARB)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4svNV)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4ubNV)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
+        void       (WINE_GLAPI *p_glVertexAttrib4ubv)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4ubvARB)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4ubvNV)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttrib4uiv)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4uivARB)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttrib4usv)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertexAttrib4usvARB)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertexAttribArrayObjectATI)(GLuint,GLint,GLenum,GLboolean,GLsizei,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribBinding)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribDivisor)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribDivisorARB)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribFormat)(GLuint,GLint,GLenum,GLboolean,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribFormatNV)(GLuint,GLint,GLenum,GLboolean,GLsizei);
+        void       (WINE_GLAPI *p_glVertexAttribI1i)(GLuint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI1iEXT)(GLuint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI1iv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI1ivEXT)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI1ui)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI1uiEXT)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI1uiv)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI1uivEXT)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI2i)(GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI2iEXT)(GLuint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI2iv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI2ivEXT)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI2ui)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI2uiEXT)(GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI2uiv)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI2uivEXT)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI3i)(GLuint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI3iEXT)(GLuint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI3iv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI3ivEXT)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI3ui)(GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI3uiEXT)(GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI3uiv)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI3uivEXT)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI4bv)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVertexAttribI4bvEXT)(GLuint,const GLbyte*);
+        void       (WINE_GLAPI *p_glVertexAttribI4i)(GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI4iEXT)(GLuint,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexAttribI4iv)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI4ivEXT)(GLuint,const GLint*);
+        void       (WINE_GLAPI *p_glVertexAttribI4sv)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttribI4svEXT)(GLuint,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttribI4ubv)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttribI4ubvEXT)(GLuint,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexAttribI4ui)(GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI4uiEXT)(GLuint,GLuint,GLuint,GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribI4uiv)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI4uivEXT)(GLuint,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribI4usv)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertexAttribI4usvEXT)(GLuint,const GLushort*);
+        void       (WINE_GLAPI *p_glVertexAttribIFormat)(GLuint,GLint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribIFormatNV)(GLuint,GLint,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glVertexAttribIPointer)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribIPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribL1d)(GLuint,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL1dEXT)(GLuint,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL1dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL1dvEXT)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL1i64NV)(GLuint,INT64);
+        void       (WINE_GLAPI *p_glVertexAttribL1i64vNV)(GLuint,const INT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL1ui64NV)(GLuint,UINT64);
+        void       (WINE_GLAPI *p_glVertexAttribL1ui64vNV)(GLuint,const UINT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL2d)(GLuint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL2dEXT)(GLuint,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL2dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL2dvEXT)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL2i64NV)(GLuint,INT64,INT64);
+        void       (WINE_GLAPI *p_glVertexAttribL2i64vNV)(GLuint,const INT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL2ui64NV)(GLuint,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glVertexAttribL2ui64vNV)(GLuint,const UINT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL3d)(GLuint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL3dEXT)(GLuint,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL3dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL3dvEXT)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL3i64NV)(GLuint,INT64,INT64,INT64);
+        void       (WINE_GLAPI *p_glVertexAttribL3i64vNV)(GLuint,const INT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL3ui64NV)(GLuint,UINT64,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glVertexAttribL3ui64vNV)(GLuint,const UINT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL4d)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL4dEXT)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexAttribL4dv)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL4dvEXT)(GLuint,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribL4i64NV)(GLuint,INT64,INT64,INT64,INT64);
+        void       (WINE_GLAPI *p_glVertexAttribL4i64vNV)(GLuint,const INT64*);
+        void       (WINE_GLAPI *p_glVertexAttribL4ui64NV)(GLuint,UINT64,UINT64,UINT64,UINT64);
+        void       (WINE_GLAPI *p_glVertexAttribL4ui64vNV)(GLuint,const UINT64*);
+        void       (WINE_GLAPI *p_glVertexAttribLFormat)(GLuint,GLint,GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribLFormatNV)(GLuint,GLint,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glVertexAttribLPointer)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribLPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribP1ui)(GLuint,GLenum,GLboolean,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribP1uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribP2ui)(GLuint,GLenum,GLboolean,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribP2uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribP3ui)(GLuint,GLenum,GLboolean,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribP3uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribP4ui)(GLuint,GLenum,GLboolean,GLuint);
+        void       (WINE_GLAPI *p_glVertexAttribP4uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexAttribPointer)(GLuint,GLint,GLenum,GLboolean,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribPointerARB)(GLuint,GLint,GLenum,GLboolean,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribPointerNV)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexAttribs1dvNV)(GLuint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribs1fvNV)(GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttribs1hvNV)(GLuint,GLsizei,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttribs1svNV)(GLuint,GLsizei,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttribs2dvNV)(GLuint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribs2fvNV)(GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttribs2hvNV)(GLuint,GLsizei,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttribs2svNV)(GLuint,GLsizei,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttribs3dvNV)(GLuint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribs3fvNV)(GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttribs3hvNV)(GLuint,GLsizei,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttribs3svNV)(GLuint,GLsizei,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttribs4dvNV)(GLuint,GLsizei,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexAttribs4fvNV)(GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexAttribs4hvNV)(GLuint,GLsizei,const GLhalfNV*);
+        void       (WINE_GLAPI *p_glVertexAttribs4svNV)(GLuint,GLsizei,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexAttribs4ubvNV)(GLuint,GLsizei,const GLubyte*);
+        void       (WINE_GLAPI *p_glVertexBindingDivisor)(GLuint,GLuint);
+        void       (WINE_GLAPI *p_glVertexBlendARB)(GLint);
+        void       (WINE_GLAPI *p_glVertexBlendEnvfATI)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glVertexBlendEnviATI)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glVertexFormatNV)(GLint,GLenum,GLsizei);
+        void       (WINE_GLAPI *p_glVertexP2ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexP2uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexP3ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexP3uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexP4ui)(GLenum,GLuint);
+        void       (WINE_GLAPI *p_glVertexP4uiv)(GLenum,const GLuint*);
+        void       (WINE_GLAPI *p_glVertexPointerEXT)(GLint,GLenum,GLsizei,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+        void       (WINE_GLAPI *p_glVertexPointervINTEL)(GLint,GLenum,const GLvoid**);
+        void       (WINE_GLAPI *p_glVertexStream1dATI)(GLenum,GLdouble);
+        void       (WINE_GLAPI *p_glVertexStream1dvATI)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexStream1fATI)(GLenum,GLfloat);
+        void       (WINE_GLAPI *p_glVertexStream1fvATI)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexStream1iATI)(GLenum,GLint);
+        void       (WINE_GLAPI *p_glVertexStream1ivATI)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glVertexStream1sATI)(GLenum,GLshort);
+        void       (WINE_GLAPI *p_glVertexStream1svATI)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexStream2dATI)(GLenum,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexStream2dvATI)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexStream2fATI)(GLenum,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexStream2fvATI)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexStream2iATI)(GLenum,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexStream2ivATI)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glVertexStream2sATI)(GLenum,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexStream2svATI)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexStream3dATI)(GLenum,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexStream3dvATI)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexStream3fATI)(GLenum,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexStream3fvATI)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexStream3iATI)(GLenum,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexStream3ivATI)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glVertexStream3sATI)(GLenum,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexStream3svATI)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexStream4dATI)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glVertexStream4dvATI)(GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glVertexStream4fATI)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glVertexStream4fvATI)(GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexStream4iATI)(GLenum,GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glVertexStream4ivATI)(GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glVertexStream4sATI)(GLenum,GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glVertexStream4svATI)(GLenum,const GLshort*);
+        void       (WINE_GLAPI *p_glVertexWeightPointerEXT)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glVertexWeightfEXT)(GLfloat);
+        void       (WINE_GLAPI *p_glVertexWeightfvEXT)(const GLfloat*);
+        void       (WINE_GLAPI *p_glVertexWeighthNV)(GLhalfNV);
+        void       (WINE_GLAPI *p_glVertexWeighthvNV)(const GLhalfNV*);
+        GLenum     (WINE_GLAPI *p_glVideoCaptureNV)(GLuint,GLuint*,UINT64*);
+        void       (WINE_GLAPI *p_glVideoCaptureStreamParameterdvNV)(GLuint,GLuint,GLenum,const GLdouble*);
+        void       (WINE_GLAPI *p_glVideoCaptureStreamParameterfvNV)(GLuint,GLuint,GLenum,const GLfloat*);
+        void       (WINE_GLAPI *p_glVideoCaptureStreamParameterivNV)(GLuint,GLuint,GLenum,const GLint*);
+        void       (WINE_GLAPI *p_glViewportArrayv)(GLuint,GLsizei,const GLfloat*);
+        void       (WINE_GLAPI *p_glViewportIndexedf)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glViewportIndexedfv)(GLuint,const GLfloat*);
+        void       (WINE_GLAPI *p_glWaitSync)(GLvoid*,GLbitfield,UINT64);
+        void       (WINE_GLAPI *p_glWeightPathsNV)(GLuint,GLsizei,const GLuint*,const GLfloat*);
+        void       (WINE_GLAPI *p_glWeightPointerARB)(GLint,GLenum,GLsizei,const GLvoid*);
+        void       (WINE_GLAPI *p_glWeightbvARB)(GLint,const GLbyte*);
+        void       (WINE_GLAPI *p_glWeightdvARB)(GLint,const GLdouble*);
+        void       (WINE_GLAPI *p_glWeightfvARB)(GLint,const GLfloat*);
+        void       (WINE_GLAPI *p_glWeightivARB)(GLint,const GLint*);
+        void       (WINE_GLAPI *p_glWeightsvARB)(GLint,const GLshort*);
+        void       (WINE_GLAPI *p_glWeightubvARB)(GLint,const GLubyte*);
+        void       (WINE_GLAPI *p_glWeightuivARB)(GLint,const GLuint*);
+        void       (WINE_GLAPI *p_glWeightusvARB)(GLint,const GLushort*);
+        void       (WINE_GLAPI *p_glWindowPos2d)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos2dARB)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos2dMESA)(GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos2dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos2dvARB)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos2dvMESA)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos2f)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos2fARB)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos2fMESA)(GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos2fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos2fvARB)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos2fvMESA)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos2i)(GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos2iARB)(GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos2iMESA)(GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos2iv)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos2ivARB)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos2ivMESA)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos2s)(GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos2sARB)(GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos2sMESA)(GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos2sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glWindowPos2svARB)(const GLshort*);
+        void       (WINE_GLAPI *p_glWindowPos2svMESA)(const GLshort*);
+        void       (WINE_GLAPI *p_glWindowPos3d)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos3dARB)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos3dMESA)(GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos3dv)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos3dvARB)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos3dvMESA)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos3f)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos3fARB)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos3fMESA)(GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos3fv)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos3fvARB)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos3fvMESA)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos3i)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos3iARB)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos3iMESA)(GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos3iv)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos3ivARB)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos3ivMESA)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos3s)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos3sARB)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos3sMESA)(GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos3sv)(const GLshort*);
+        void       (WINE_GLAPI *p_glWindowPos3svARB)(const GLshort*);
+        void       (WINE_GLAPI *p_glWindowPos3svMESA)(const GLshort*);
+        void       (WINE_GLAPI *p_glWindowPos4dMESA)(GLdouble,GLdouble,GLdouble,GLdouble);
+        void       (WINE_GLAPI *p_glWindowPos4dvMESA)(const GLdouble*);
+        void       (WINE_GLAPI *p_glWindowPos4fMESA)(GLfloat,GLfloat,GLfloat,GLfloat);
+        void       (WINE_GLAPI *p_glWindowPos4fvMESA)(const GLfloat*);
+        void       (WINE_GLAPI *p_glWindowPos4iMESA)(GLint,GLint,GLint,GLint);
+        void       (WINE_GLAPI *p_glWindowPos4ivMESA)(const GLint*);
+        void       (WINE_GLAPI *p_glWindowPos4sMESA)(GLshort,GLshort,GLshort,GLshort);
+        void       (WINE_GLAPI *p_glWindowPos4svMESA)(const GLshort*);
+        void       (WINE_GLAPI *p_glWriteMaskEXT)(GLuint,GLuint,GLenum,GLenum,GLenum,GLenum);
+        GLvoid*    (WINE_GLAPI *p_wglAllocateMemoryNV)(GLsizei,GLfloat,GLfloat,GLfloat);
+        BOOL       (WINE_GLAPI *p_wglBindTexImageARB)(struct wgl_pbuffer *,int);
+        BOOL       (WINE_GLAPI *p_wglChoosePixelFormatARB)(HDC,const int*,const FLOAT*,UINT,int*,UINT*);
+        struct wgl_context * (WINE_GLAPI *p_wglCreateContextAttribsARB)(HDC,struct wgl_context *,const int*);
+        struct wgl_pbuffer * (WINE_GLAPI *p_wglCreatePbufferARB)(HDC,int,int,int,const int*);
+        BOOL       (WINE_GLAPI *p_wglDestroyPbufferARB)(struct wgl_pbuffer *);
+        void       (WINE_GLAPI *p_wglFreeMemoryNV)(void*);
+        HDC        (WINE_GLAPI *p_wglGetCurrentReadDCARB)(void);
+        const GLubyte * (WINE_GLAPI *p_wglGetExtensionsStringARB)(HDC);
+        const GLubyte * (WINE_GLAPI *p_wglGetExtensionsStringEXT)(void);
+        HDC        (WINE_GLAPI *p_wglGetPbufferDCARB)(struct wgl_pbuffer *);
+        BOOL       (WINE_GLAPI *p_wglGetPixelFormatAttribfvARB)(HDC,int,int,UINT,const int*,FLOAT*);
+        BOOL       (WINE_GLAPI *p_wglGetPixelFormatAttribivARB)(HDC,int,int,UINT,const int*,int*);
+        int        (WINE_GLAPI *p_wglGetSwapIntervalEXT)(void);
+        BOOL       (WINE_GLAPI *p_wglMakeContextCurrentARB)(HDC,HDC,struct wgl_context *);
+        BOOL       (WINE_GLAPI *p_wglQueryPbufferARB)(struct wgl_pbuffer *,int,int*);
+        int        (WINE_GLAPI *p_wglReleasePbufferDCARB)(struct wgl_pbuffer *,HDC);
+        BOOL       (WINE_GLAPI *p_wglReleaseTexImageARB)(struct wgl_pbuffer *,int);
+        BOOL       (WINE_GLAPI *p_wglSetPbufferAttribARB)(struct wgl_pbuffer *,const int*);
+        BOOL       (WINE_GLAPI *p_wglSetPixelFormatWINE)(HDC,int);
+        BOOL       (WINE_GLAPI *p_wglSwapIntervalEXT)(int);
+    } ext;
+};
+
+#define ALL_WGL_FUNCS \
+    USE_GL_FUNC(glAccum) \
+    USE_GL_FUNC(glAlphaFunc) \
+    USE_GL_FUNC(glAreTexturesResident) \
+    USE_GL_FUNC(glArrayElement) \
+    USE_GL_FUNC(glBegin) \
+    USE_GL_FUNC(glBindTexture) \
+    USE_GL_FUNC(glBitmap) \
+    USE_GL_FUNC(glBlendFunc) \
+    USE_GL_FUNC(glCallList) \
+    USE_GL_FUNC(glCallLists) \
+    USE_GL_FUNC(glClear) \
+    USE_GL_FUNC(glClearAccum) \
+    USE_GL_FUNC(glClearColor) \
+    USE_GL_FUNC(glClearDepth) \
+    USE_GL_FUNC(glClearIndex) \
+    USE_GL_FUNC(glClearStencil) \
+    USE_GL_FUNC(glClipPlane) \
+    USE_GL_FUNC(glColor3b) \
+    USE_GL_FUNC(glColor3bv) \
+    USE_GL_FUNC(glColor3d) \
+    USE_GL_FUNC(glColor3dv) \
+    USE_GL_FUNC(glColor3f) \
+    USE_GL_FUNC(glColor3fv) \
+    USE_GL_FUNC(glColor3i) \
+    USE_GL_FUNC(glColor3iv) \
+    USE_GL_FUNC(glColor3s) \
+    USE_GL_FUNC(glColor3sv) \
+    USE_GL_FUNC(glColor3ub) \
+    USE_GL_FUNC(glColor3ubv) \
+    USE_GL_FUNC(glColor3ui) \
+    USE_GL_FUNC(glColor3uiv) \
+    USE_GL_FUNC(glColor3us) \
+    USE_GL_FUNC(glColor3usv) \
+    USE_GL_FUNC(glColor4b) \
+    USE_GL_FUNC(glColor4bv) \
+    USE_GL_FUNC(glColor4d) \
+    USE_GL_FUNC(glColor4dv) \
+    USE_GL_FUNC(glColor4f) \
+    USE_GL_FUNC(glColor4fv) \
+    USE_GL_FUNC(glColor4i) \
+    USE_GL_FUNC(glColor4iv) \
+    USE_GL_FUNC(glColor4s) \
+    USE_GL_FUNC(glColor4sv) \
+    USE_GL_FUNC(glColor4ub) \
+    USE_GL_FUNC(glColor4ubv) \
+    USE_GL_FUNC(glColor4ui) \
+    USE_GL_FUNC(glColor4uiv) \
+    USE_GL_FUNC(glColor4us) \
+    USE_GL_FUNC(glColor4usv) \
+    USE_GL_FUNC(glColorMask) \
+    USE_GL_FUNC(glColorMaterial) \
+    USE_GL_FUNC(glColorPointer) \
+    USE_GL_FUNC(glCopyPixels) \
+    USE_GL_FUNC(glCopyTexImage1D) \
+    USE_GL_FUNC(glCopyTexImage2D) \
+    USE_GL_FUNC(glCopyTexSubImage1D) \
+    USE_GL_FUNC(glCopyTexSubImage2D) \
+    USE_GL_FUNC(glCullFace) \
+    USE_GL_FUNC(glDeleteLists) \
+    USE_GL_FUNC(glDeleteTextures) \
+    USE_GL_FUNC(glDepthFunc) \
+    USE_GL_FUNC(glDepthMask) \
+    USE_GL_FUNC(glDepthRange) \
+    USE_GL_FUNC(glDisable) \
+    USE_GL_FUNC(glDisableClientState) \
+    USE_GL_FUNC(glDrawArrays) \
+    USE_GL_FUNC(glDrawBuffer) \
+    USE_GL_FUNC(glDrawElements) \
+    USE_GL_FUNC(glDrawPixels) \
+    USE_GL_FUNC(glEdgeFlag) \
+    USE_GL_FUNC(glEdgeFlagPointer) \
+    USE_GL_FUNC(glEdgeFlagv) \
+    USE_GL_FUNC(glEnable) \
+    USE_GL_FUNC(glEnableClientState) \
+    USE_GL_FUNC(glEnd) \
+    USE_GL_FUNC(glEndList) \
+    USE_GL_FUNC(glEvalCoord1d) \
+    USE_GL_FUNC(glEvalCoord1dv) \
+    USE_GL_FUNC(glEvalCoord1f) \
+    USE_GL_FUNC(glEvalCoord1fv) \
+    USE_GL_FUNC(glEvalCoord2d) \
+    USE_GL_FUNC(glEvalCoord2dv) \
+    USE_GL_FUNC(glEvalCoord2f) \
+    USE_GL_FUNC(glEvalCoord2fv) \
+    USE_GL_FUNC(glEvalMesh1) \
+    USE_GL_FUNC(glEvalMesh2) \
+    USE_GL_FUNC(glEvalPoint1) \
+    USE_GL_FUNC(glEvalPoint2) \
+    USE_GL_FUNC(glFeedbackBuffer) \
+    USE_GL_FUNC(glFinish) \
+    USE_GL_FUNC(glFlush) \
+    USE_GL_FUNC(glFogf) \
+    USE_GL_FUNC(glFogfv) \
+    USE_GL_FUNC(glFogi) \
+    USE_GL_FUNC(glFogiv) \
+    USE_GL_FUNC(glFrontFace) \
+    USE_GL_FUNC(glFrustum) \
+    USE_GL_FUNC(glGenLists) \
+    USE_GL_FUNC(glGenTextures) \
+    USE_GL_FUNC(glGetBooleanv) \
+    USE_GL_FUNC(glGetClipPlane) \
+    USE_GL_FUNC(glGetDoublev) \
+    USE_GL_FUNC(glGetError) \
+    USE_GL_FUNC(glGetFloatv) \
+    USE_GL_FUNC(glGetIntegerv) \
+    USE_GL_FUNC(glGetLightfv) \
+    USE_GL_FUNC(glGetLightiv) \
+    USE_GL_FUNC(glGetMapdv) \
+    USE_GL_FUNC(glGetMapfv) \
+    USE_GL_FUNC(glGetMapiv) \
+    USE_GL_FUNC(glGetMaterialfv) \
+    USE_GL_FUNC(glGetMaterialiv) \
+    USE_GL_FUNC(glGetPixelMapfv) \
+    USE_GL_FUNC(glGetPixelMapuiv) \
+    USE_GL_FUNC(glGetPixelMapusv) \
+    USE_GL_FUNC(glGetPointerv) \
+    USE_GL_FUNC(glGetPolygonStipple) \
+    USE_GL_FUNC(glGetString) \
+    USE_GL_FUNC(glGetTexEnvfv) \
+    USE_GL_FUNC(glGetTexEnviv) \
+    USE_GL_FUNC(glGetTexGendv) \
+    USE_GL_FUNC(glGetTexGenfv) \
+    USE_GL_FUNC(glGetTexGeniv) \
+    USE_GL_FUNC(glGetTexImage) \
+    USE_GL_FUNC(glGetTexLevelParameterfv) \
+    USE_GL_FUNC(glGetTexLevelParameteriv) \
+    USE_GL_FUNC(glGetTexParameterfv) \
+    USE_GL_FUNC(glGetTexParameteriv) \
+    USE_GL_FUNC(glHint) \
+    USE_GL_FUNC(glIndexMask) \
+    USE_GL_FUNC(glIndexPointer) \
+    USE_GL_FUNC(glIndexd) \
+    USE_GL_FUNC(glIndexdv) \
+    USE_GL_FUNC(glIndexf) \
+    USE_GL_FUNC(glIndexfv) \
+    USE_GL_FUNC(glIndexi) \
+    USE_GL_FUNC(glIndexiv) \
+    USE_GL_FUNC(glIndexs) \
+    USE_GL_FUNC(glIndexsv) \
+    USE_GL_FUNC(glIndexub) \
+    USE_GL_FUNC(glIndexubv) \
+    USE_GL_FUNC(glInitNames) \
+    USE_GL_FUNC(glInterleavedArrays) \
+    USE_GL_FUNC(glIsEnabled) \
+    USE_GL_FUNC(glIsList) \
+    USE_GL_FUNC(glIsTexture) \
+    USE_GL_FUNC(glLightModelf) \
+    USE_GL_FUNC(glLightModelfv) \
+    USE_GL_FUNC(glLightModeli) \
+    USE_GL_FUNC(glLightModeliv) \
+    USE_GL_FUNC(glLightf) \
+    USE_GL_FUNC(glLightfv) \
+    USE_GL_FUNC(glLighti) \
+    USE_GL_FUNC(glLightiv) \
+    USE_GL_FUNC(glLineStipple) \
+    USE_GL_FUNC(glLineWidth) \
+    USE_GL_FUNC(glListBase) \
+    USE_GL_FUNC(glLoadIdentity) \
+    USE_GL_FUNC(glLoadMatrixd) \
+    USE_GL_FUNC(glLoadMatrixf) \
+    USE_GL_FUNC(glLoadName) \
+    USE_GL_FUNC(glLogicOp) \
+    USE_GL_FUNC(glMap1d) \
+    USE_GL_FUNC(glMap1f) \
+    USE_GL_FUNC(glMap2d) \
+    USE_GL_FUNC(glMap2f) \
+    USE_GL_FUNC(glMapGrid1d) \
+    USE_GL_FUNC(glMapGrid1f) \
+    USE_GL_FUNC(glMapGrid2d) \
+    USE_GL_FUNC(glMapGrid2f) \
+    USE_GL_FUNC(glMaterialf) \
+    USE_GL_FUNC(glMaterialfv) \
+    USE_GL_FUNC(glMateriali) \
+    USE_GL_FUNC(glMaterialiv) \
+    USE_GL_FUNC(glMatrixMode) \
+    USE_GL_FUNC(glMultMatrixd) \
+    USE_GL_FUNC(glMultMatrixf) \
+    USE_GL_FUNC(glNewList) \
+    USE_GL_FUNC(glNormal3b) \
+    USE_GL_FUNC(glNormal3bv) \
+    USE_GL_FUNC(glNormal3d) \
+    USE_GL_FUNC(glNormal3dv) \
+    USE_GL_FUNC(glNormal3f) \
+    USE_GL_FUNC(glNormal3fv) \
+    USE_GL_FUNC(glNormal3i) \
+    USE_GL_FUNC(glNormal3iv) \
+    USE_GL_FUNC(glNormal3s) \
+    USE_GL_FUNC(glNormal3sv) \
+    USE_GL_FUNC(glNormalPointer) \
+    USE_GL_FUNC(glOrtho) \
+    USE_GL_FUNC(glPassThrough) \
+    USE_GL_FUNC(glPixelMapfv) \
+    USE_GL_FUNC(glPixelMapuiv) \
+    USE_GL_FUNC(glPixelMapusv) \
+    USE_GL_FUNC(glPixelStoref) \
+    USE_GL_FUNC(glPixelStorei) \
+    USE_GL_FUNC(glPixelTransferf) \
+    USE_GL_FUNC(glPixelTransferi) \
+    USE_GL_FUNC(glPixelZoom) \
+    USE_GL_FUNC(glPointSize) \
+    USE_GL_FUNC(glPolygonMode) \
+    USE_GL_FUNC(glPolygonOffset) \
+    USE_GL_FUNC(glPolygonStipple) \
+    USE_GL_FUNC(glPopAttrib) \
+    USE_GL_FUNC(glPopClientAttrib) \
+    USE_GL_FUNC(glPopMatrix) \
+    USE_GL_FUNC(glPopName) \
+    USE_GL_FUNC(glPrioritizeTextures) \
+    USE_GL_FUNC(glPushAttrib) \
+    USE_GL_FUNC(glPushClientAttrib) \
+    USE_GL_FUNC(glPushMatrix) \
+    USE_GL_FUNC(glPushName) \
+    USE_GL_FUNC(glRasterPos2d) \
+    USE_GL_FUNC(glRasterPos2dv) \
+    USE_GL_FUNC(glRasterPos2f) \
+    USE_GL_FUNC(glRasterPos2fv) \
+    USE_GL_FUNC(glRasterPos2i) \
+    USE_GL_FUNC(glRasterPos2iv) \
+    USE_GL_FUNC(glRasterPos2s) \
+    USE_GL_FUNC(glRasterPos2sv) \
+    USE_GL_FUNC(glRasterPos3d) \
+    USE_GL_FUNC(glRasterPos3dv) \
+    USE_GL_FUNC(glRasterPos3f) \
+    USE_GL_FUNC(glRasterPos3fv) \
+    USE_GL_FUNC(glRasterPos3i) \
+    USE_GL_FUNC(glRasterPos3iv) \
+    USE_GL_FUNC(glRasterPos3s) \
+    USE_GL_FUNC(glRasterPos3sv) \
+    USE_GL_FUNC(glRasterPos4d) \
+    USE_GL_FUNC(glRasterPos4dv) \
+    USE_GL_FUNC(glRasterPos4f) \
+    USE_GL_FUNC(glRasterPos4fv) \
+    USE_GL_FUNC(glRasterPos4i) \
+    USE_GL_FUNC(glRasterPos4iv) \
+    USE_GL_FUNC(glRasterPos4s) \
+    USE_GL_FUNC(glRasterPos4sv) \
+    USE_GL_FUNC(glReadBuffer) \
+    USE_GL_FUNC(glReadPixels) \
+    USE_GL_FUNC(glRectd) \
+    USE_GL_FUNC(glRectdv) \
+    USE_GL_FUNC(glRectf) \
+    USE_GL_FUNC(glRectfv) \
+    USE_GL_FUNC(glRecti) \
+    USE_GL_FUNC(glRectiv) \
+    USE_GL_FUNC(glRects) \
+    USE_GL_FUNC(glRectsv) \
+    USE_GL_FUNC(glRenderMode) \
+    USE_GL_FUNC(glRotated) \
+    USE_GL_FUNC(glRotatef) \
+    USE_GL_FUNC(glScaled) \
+    USE_GL_FUNC(glScalef) \
+    USE_GL_FUNC(glScissor) \
+    USE_GL_FUNC(glSelectBuffer) \
+    USE_GL_FUNC(glShadeModel) \
+    USE_GL_FUNC(glStencilFunc) \
+    USE_GL_FUNC(glStencilMask) \
+    USE_GL_FUNC(glStencilOp) \
+    USE_GL_FUNC(glTexCoord1d) \
+    USE_GL_FUNC(glTexCoord1dv) \
+    USE_GL_FUNC(glTexCoord1f) \
+    USE_GL_FUNC(glTexCoord1fv) \
+    USE_GL_FUNC(glTexCoord1i) \
+    USE_GL_FUNC(glTexCoord1iv) \
+    USE_GL_FUNC(glTexCoord1s) \
+    USE_GL_FUNC(glTexCoord1sv) \
+    USE_GL_FUNC(glTexCoord2d) \
+    USE_GL_FUNC(glTexCoord2dv) \
+    USE_GL_FUNC(glTexCoord2f) \
+    USE_GL_FUNC(glTexCoord2fv) \
+    USE_GL_FUNC(glTexCoord2i) \
+    USE_GL_FUNC(glTexCoord2iv) \
+    USE_GL_FUNC(glTexCoord2s) \
+    USE_GL_FUNC(glTexCoord2sv) \
+    USE_GL_FUNC(glTexCoord3d) \
+    USE_GL_FUNC(glTexCoord3dv) \
+    USE_GL_FUNC(glTexCoord3f) \
+    USE_GL_FUNC(glTexCoord3fv) \
+    USE_GL_FUNC(glTexCoord3i) \
+    USE_GL_FUNC(glTexCoord3iv) \
+    USE_GL_FUNC(glTexCoord3s) \
+    USE_GL_FUNC(glTexCoord3sv) \
+    USE_GL_FUNC(glTexCoord4d) \
+    USE_GL_FUNC(glTexCoord4dv) \
+    USE_GL_FUNC(glTexCoord4f) \
+    USE_GL_FUNC(glTexCoord4fv) \
+    USE_GL_FUNC(glTexCoord4i) \
+    USE_GL_FUNC(glTexCoord4iv) \
+    USE_GL_FUNC(glTexCoord4s) \
+    USE_GL_FUNC(glTexCoord4sv) \
+    USE_GL_FUNC(glTexCoordPointer) \
+    USE_GL_FUNC(glTexEnvf) \
+    USE_GL_FUNC(glTexEnvfv) \
+    USE_GL_FUNC(glTexEnvi) \
+    USE_GL_FUNC(glTexEnviv) \
+    USE_GL_FUNC(glTexGend) \
+    USE_GL_FUNC(glTexGendv) \
+    USE_GL_FUNC(glTexGenf) \
+    USE_GL_FUNC(glTexGenfv) \
+    USE_GL_FUNC(glTexGeni) \
+    USE_GL_FUNC(glTexGeniv) \
+    USE_GL_FUNC(glTexImage1D) \
+    USE_GL_FUNC(glTexImage2D) \
+    USE_GL_FUNC(glTexParameterf) \
+    USE_GL_FUNC(glTexParameterfv) \
+    USE_GL_FUNC(glTexParameteri) \
+    USE_GL_FUNC(glTexParameteriv) \
+    USE_GL_FUNC(glTexSubImage1D) \
+    USE_GL_FUNC(glTexSubImage2D) \
+    USE_GL_FUNC(glTranslated) \
+    USE_GL_FUNC(glTranslatef) \
+    USE_GL_FUNC(glVertex2d) \
+    USE_GL_FUNC(glVertex2dv) \
+    USE_GL_FUNC(glVertex2f) \
+    USE_GL_FUNC(glVertex2fv) \
+    USE_GL_FUNC(glVertex2i) \
+    USE_GL_FUNC(glVertex2iv) \
+    USE_GL_FUNC(glVertex2s) \
+    USE_GL_FUNC(glVertex2sv) \
+    USE_GL_FUNC(glVertex3d) \
+    USE_GL_FUNC(glVertex3dv) \
+    USE_GL_FUNC(glVertex3f) \
+    USE_GL_FUNC(glVertex3fv) \
+    USE_GL_FUNC(glVertex3i) \
+    USE_GL_FUNC(glVertex3iv) \
+    USE_GL_FUNC(glVertex3s) \
+    USE_GL_FUNC(glVertex3sv) \
+    USE_GL_FUNC(glVertex4d) \
+    USE_GL_FUNC(glVertex4dv) \
+    USE_GL_FUNC(glVertex4f) \
+    USE_GL_FUNC(glVertex4fv) \
+    USE_GL_FUNC(glVertex4i) \
+    USE_GL_FUNC(glVertex4iv) \
+    USE_GL_FUNC(glVertex4s) \
+    USE_GL_FUNC(glVertex4sv) \
+    USE_GL_FUNC(glVertexPointer) \
+    USE_GL_FUNC(glViewport)
+
+extern struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version );
+extern BOOL CDECL __wine_set_pixel_format( HWND hwnd, int format );
+
+#endif /* __WINE_WGL_DRIVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h
new file mode 100644
index 0000000..76c42c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h
@@ -0,0 +1,943 @@
+#ifndef __wglext_h_
+#define __wglext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2007-2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number */
+/* wglext.h last updated 2012/01/04 */
+/* Current version at http://www.opengl.org/registry/ */
+#define WGL_WGLEXT_VERSION 24
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB  0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB       0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB     0x00000008
+#endif
+
+#ifndef WGL_ARB_multisample
+#define WGL_SAMPLE_BUFFERS_ARB         0x2041
+#define WGL_SAMPLES_ARB                0x2042
+#endif
+
+#ifndef WGL_ARB_extensions_string
+#endif
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_NUMBER_PIXEL_FORMATS_ARB   0x2000
+#define WGL_DRAW_TO_WINDOW_ARB         0x2001
+#define WGL_DRAW_TO_BITMAP_ARB         0x2002
+#define WGL_ACCELERATION_ARB           0x2003
+#define WGL_NEED_PALETTE_ARB           0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB    0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB     0x2006
+#define WGL_SWAP_METHOD_ARB            0x2007
+#define WGL_NUMBER_OVERLAYS_ARB        0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB       0x2009
+#define WGL_TRANSPARENT_ARB            0x200A
+#define WGL_TRANSPARENT_RED_VALUE_ARB  0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+#define WGL_SHARE_DEPTH_ARB            0x200C
+#define WGL_SHARE_STENCIL_ARB          0x200D
+#define WGL_SHARE_ACCUM_ARB            0x200E
+#define WGL_SUPPORT_GDI_ARB            0x200F
+#define WGL_SUPPORT_OPENGL_ARB         0x2010
+#define WGL_DOUBLE_BUFFER_ARB          0x2011
+#define WGL_STEREO_ARB                 0x2012
+#define WGL_PIXEL_TYPE_ARB             0x2013
+#define WGL_COLOR_BITS_ARB             0x2014
+#define WGL_RED_BITS_ARB               0x2015
+#define WGL_RED_SHIFT_ARB              0x2016
+#define WGL_GREEN_BITS_ARB             0x2017
+#define WGL_GREEN_SHIFT_ARB            0x2018
+#define WGL_BLUE_BITS_ARB              0x2019
+#define WGL_BLUE_SHIFT_ARB             0x201A
+#define WGL_ALPHA_BITS_ARB             0x201B
+#define WGL_ALPHA_SHIFT_ARB            0x201C
+#define WGL_ACCUM_BITS_ARB             0x201D
+#define WGL_ACCUM_RED_BITS_ARB         0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB       0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB        0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB       0x2021
+#define WGL_DEPTH_BITS_ARB             0x2022
+#define WGL_STENCIL_BITS_ARB           0x2023
+#define WGL_AUX_BUFFERS_ARB            0x2024
+#define WGL_NO_ACCELERATION_ARB        0x2025
+#define WGL_GENERIC_ACCELERATION_ARB   0x2026
+#define WGL_FULL_ACCELERATION_ARB      0x2027
+#define WGL_SWAP_EXCHANGE_ARB          0x2028
+#define WGL_SWAP_COPY_ARB              0x2029
+#define WGL_SWAP_UNDEFINED_ARB         0x202A
+#define WGL_TYPE_RGBA_ARB              0x202B
+#define WGL_TYPE_COLORINDEX_ARB        0x202C
+#endif
+
+#ifndef WGL_ARB_make_current_read
+#define ERROR_INVALID_PIXEL_TYPE_ARB   0x2043
+#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+#endif
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_DRAW_TO_PBUFFER_ARB        0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB     0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB      0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB     0x2030
+#define WGL_PBUFFER_LARGEST_ARB        0x2033
+#define WGL_PBUFFER_WIDTH_ARB          0x2034
+#define WGL_PBUFFER_HEIGHT_ARB         0x2035
+#define WGL_PBUFFER_LOST_ARB           0x2036
+#endif
+
+#ifndef WGL_ARB_render_texture
+#define WGL_BIND_TO_TEXTURE_RGB_ARB    0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB   0x2071
+#define WGL_TEXTURE_FORMAT_ARB         0x2072
+#define WGL_TEXTURE_TARGET_ARB         0x2073
+#define WGL_MIPMAP_TEXTURE_ARB         0x2074
+#define WGL_TEXTURE_RGB_ARB            0x2075
+#define WGL_TEXTURE_RGBA_ARB           0x2076
+#define WGL_NO_TEXTURE_ARB             0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB       0x2078
+#define WGL_TEXTURE_1D_ARB             0x2079
+#define WGL_TEXTURE_2D_ARB             0x207A
+#define WGL_MIPMAP_LEVEL_ARB           0x207B
+#define WGL_CUBE_MAP_FACE_ARB          0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB             0x2083
+#define WGL_FRONT_RIGHT_ARB            0x2084
+#define WGL_BACK_LEFT_ARB              0x2085
+#define WGL_BACK_RIGHT_ARB             0x2086
+#define WGL_AUX0_ARB                   0x2087
+#define WGL_AUX1_ARB                   0x2088
+#define WGL_AUX2_ARB                   0x2089
+#define WGL_AUX3_ARB                   0x208A
+#define WGL_AUX4_ARB                   0x208B
+#define WGL_AUX5_ARB                   0x208C
+#define WGL_AUX6_ARB                   0x208D
+#define WGL_AUX7_ARB                   0x208E
+#define WGL_AUX8_ARB                   0x208F
+#define WGL_AUX9_ARB                   0x2090
+#endif
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_TYPE_RGBA_FLOAT_ARB        0x21A0
+#endif
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
+#endif
+
+#ifndef WGL_ARB_create_context
+#define WGL_CONTEXT_DEBUG_BIT_ARB      0x00000001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB  0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB  0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB    0x2093
+#define WGL_CONTEXT_FLAGS_ARB          0x2094
+#define ERROR_INVALID_VERSION_ARB      0x2095
+#endif
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_CONTEXT_PROFILE_MASK_ARB   0x9126
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define ERROR_INVALID_PROFILE_ARB      0x2096
+#endif
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB  0x8252
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB  0x8261
+#endif
+
+#ifndef WGL_EXT_make_current_read
+#define ERROR_INVALID_PIXEL_TYPE_EXT   0x2043
+#endif
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_NUMBER_PIXEL_FORMATS_EXT   0x2000
+#define WGL_DRAW_TO_WINDOW_EXT         0x2001
+#define WGL_DRAW_TO_BITMAP_EXT         0x2002
+#define WGL_ACCELERATION_EXT           0x2003
+#define WGL_NEED_PALETTE_EXT           0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT    0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT     0x2006
+#define WGL_SWAP_METHOD_EXT            0x2007
+#define WGL_NUMBER_OVERLAYS_EXT        0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT       0x2009
+#define WGL_TRANSPARENT_EXT            0x200A
+#define WGL_TRANSPARENT_VALUE_EXT      0x200B
+#define WGL_SHARE_DEPTH_EXT            0x200C
+#define WGL_SHARE_STENCIL_EXT          0x200D
+#define WGL_SHARE_ACCUM_EXT            0x200E
+#define WGL_SUPPORT_GDI_EXT            0x200F
+#define WGL_SUPPORT_OPENGL_EXT         0x2010
+#define WGL_DOUBLE_BUFFER_EXT          0x2011
+#define WGL_STEREO_EXT                 0x2012
+#define WGL_PIXEL_TYPE_EXT             0x2013
+#define WGL_COLOR_BITS_EXT             0x2014
+#define WGL_RED_BITS_EXT               0x2015
+#define WGL_RED_SHIFT_EXT              0x2016
+#define WGL_GREEN_BITS_EXT             0x2017
+#define WGL_GREEN_SHIFT_EXT            0x2018
+#define WGL_BLUE_BITS_EXT              0x2019
+#define WGL_BLUE_SHIFT_EXT             0x201A
+#define WGL_ALPHA_BITS_EXT             0x201B
+#define WGL_ALPHA_SHIFT_EXT            0x201C
+#define WGL_ACCUM_BITS_EXT             0x201D
+#define WGL_ACCUM_RED_BITS_EXT         0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT       0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT        0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT       0x2021
+#define WGL_DEPTH_BITS_EXT             0x2022
+#define WGL_STENCIL_BITS_EXT           0x2023
+#define WGL_AUX_BUFFERS_EXT            0x2024
+#define WGL_NO_ACCELERATION_EXT        0x2025
+#define WGL_GENERIC_ACCELERATION_EXT   0x2026
+#define WGL_FULL_ACCELERATION_EXT      0x2027
+#define WGL_SWAP_EXCHANGE_EXT          0x2028
+#define WGL_SWAP_COPY_EXT              0x2029
+#define WGL_SWAP_UNDEFINED_EXT         0x202A
+#define WGL_TYPE_RGBA_EXT              0x202B
+#define WGL_TYPE_COLORINDEX_EXT        0x202C
+#endif
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_DRAW_TO_PBUFFER_EXT        0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT     0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT      0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT     0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT  0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
+#define WGL_PBUFFER_LARGEST_EXT        0x2033
+#define WGL_PBUFFER_WIDTH_EXT          0x2034
+#define WGL_PBUFFER_HEIGHT_EXT         0x2035
+#endif
+
+#ifndef WGL_EXT_depth_float
+#define WGL_DEPTH_FLOAT_EXT            0x2040
+#endif
+
+#ifndef WGL_3DFX_multisample
+#define WGL_SAMPLE_BUFFERS_3DFX        0x2060
+#define WGL_SAMPLES_3DFX               0x2061
+#endif
+
+#ifndef WGL_EXT_multisample
+#define WGL_SAMPLE_BUFFERS_EXT         0x2041
+#define WGL_SAMPLES_EXT                0x2042
+#endif
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+#endif
+
+#ifndef WGL_I3D_gamma
+#define WGL_GAMMA_TABLE_SIZE_I3D       0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D  0x204F
+#endif
+
+#ifndef WGL_I3D_genlock
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+#endif
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D      0x00000002
+#endif
+
+#ifndef WGL_I3D_swap_frame_lock
+#endif
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV   0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV    0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV         0x20A7
+#endif
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV       0x20A2
+#endif
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_TYPE_RGBA_FLOAT_ATI        0x21A0
+#endif
+
+#ifndef WGL_NV_float_buffer
+#define WGL_FLOAT_COMPONENTS_NV        0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV         0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV        0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV       0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV      0x20B8
+#endif
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_STEREO_EMITTER_ENABLE_3DL  0x2055
+#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
+#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
+#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
+#endif
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
+#endif
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
+#endif
+
+#ifndef WGL_NV_present_video
+#define WGL_NUM_VIDEO_SLOTS_NV         0x20F0
+#endif
+
+#ifndef WGL_NV_video_out
+#define WGL_BIND_TO_VIDEO_RGB_NV       0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV      0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV         0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV         0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV         0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define WGL_VIDEO_OUT_FRAME            0x20C8
+#define WGL_VIDEO_OUT_FIELD_1          0x20C9
+#define WGL_VIDEO_OUT_FIELD_2          0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
+#endif
+
+#ifndef WGL_NV_swap_group
+#endif
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
+#endif
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_GPU_VENDOR_AMD             0x1F00
+#define WGL_GPU_RENDERER_STRING_AMD    0x1F01
+#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define WGL_GPU_RAM_AMD                0x21A3
+#define WGL_GPU_CLOCK_AMD              0x21A4
+#define WGL_GPU_NUM_PIPES_AMD          0x21A5
+#define WGL_GPU_NUM_SIMD_AMD           0x21A6
+#define WGL_GPU_NUM_RB_AMD             0x21A7
+#define WGL_GPU_NUM_SPI_AMD            0x21A8
+#endif
+
+#ifndef WGL_NV_video_capture
+#define WGL_UNIQUE_ID_NV               0x20CE
+#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+#endif
+
+#ifndef WGL_NV_copy_image
+#endif
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_COVERAGE_SAMPLES_NV        0x2042
+#define WGL_COLOR_SAMPLES_NV           0x20B9
+#endif
+
+#ifndef WGL_EXT_create_context_es2_profile
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+#endif
+
+#ifndef WGL_NV_DX_interop
+#define WGL_ACCESS_READ_ONLY_NV        0x00000000
+#define WGL_ACCESS_READ_WRITE_NV       0x00000001
+#define WGL_ACCESS_WRITE_DISCARD_NV    0x00000002
+#endif
+
+#ifndef WGL_NV_DX_interop2
+#endif
+
+#ifndef WGL_EXT_swap_control_tear
+#endif
+
+
+/*************************************************************/
+
+#ifndef WGL_ARB_pbuffer
+DECLARE_HANDLE(HPBUFFERARB);
+#endif
+#ifndef WGL_EXT_pbuffer
+DECLARE_HANDLE(HPBUFFEREXT);
+#endif
+#ifndef WGL_NV_present_video
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+#endif
+#ifndef WGL_NV_video_output
+DECLARE_HANDLE(HPVIDEODEV);
+#endif
+#ifndef WGL_NV_gpu_affinity
+DECLARE_HANDLE(HPGPUNV);
+DECLARE_HANDLE(HGPUNV);
+
+typedef struct _GPU_DEVICE {
+    DWORD  cb;
+    CHAR   DeviceName[32];
+    CHAR   DeviceString[128];
+    DWORD  Flags;
+    RECT   rcVirtualScreen;
+} GPU_DEVICE, *PGPU_DEVICE;
+#endif
+#ifndef WGL_NV_video_capture
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+#endif
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);
+extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);
+extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);
+extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#endif
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern const char * WINAPI wglGetExtensionsStringARB (HDC hdc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+#endif
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+extern BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+extern HDC WINAPI wglGetCurrentReadDCARB (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
+#endif
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);
+extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);
+extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);
+extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#endif
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef WGL_ARB_create_context
+#define WGL_ARB_create_context 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_ARB_create_context_profile 1
+#endif
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_ARB_create_context_robustness 1
+#endif
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);
+extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);
+extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);
+extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+#endif
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern const char * WINAPI wglGetExtensionsStringEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+extern HDC WINAPI wglGetCurrentReadDCEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);
+extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);
+extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);
+extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+extern BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglSwapIntervalEXT (int interval);
+extern int WINAPI wglGetSwapIntervalEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+#endif
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern void* WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+extern void WINAPI wglFreeMemoryNV (void *pointer);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+#endif
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+#endif
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+#endif
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+extern BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);
+extern INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+extern BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+extern BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);
+extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+#endif
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);
+extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+extern BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+extern BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnableGenlockI3D (HDC hDC);
+extern BOOL WINAPI wglDisableGenlockI3D (HDC hDC);
+extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);
+extern BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);
+extern BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);
+extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);
+extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);
+extern BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);
+extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);
+extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);
+extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);
+extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);
+extern BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);
+extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnableFrameLockI3D (void);
+extern BOOL WINAPI wglDisableFrameLockI3D (void);
+extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);
+extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
+#endif
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetFrameUsageI3D (float *pUsage);
+extern BOOL WINAPI wglBeginFrameTrackingI3D (void);
+extern BOOL WINAPI wglEndFrameTrackingI3D (void);
+extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+#endif
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+#endif
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_3DL_stereo_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
+#endif
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_EXT_pixel_format_packed_float 1
+#endif
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef WGL_NV_present_video
+#define WGL_NV_present_video 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+extern BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+extern BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_NV_video_output
+#define WGL_NV_video_output 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+extern BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);
+extern BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+extern BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);
+extern BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+extern BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+
+#ifndef WGL_NV_swap_group
+#define WGL_NV_swap_group 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);
+extern BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);
+extern BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);
+extern BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+extern BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);
+extern BOOL WINAPI wglResetFrameCountNV (HDC hDC);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);
+typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+#endif
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_NV_gpu_affinity 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);
+extern BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+extern HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);
+extern BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+extern BOOL WINAPI wglDeleteDCNV (HDC hdc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
+typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
+#endif
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_AMD_gpu_association 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);
+extern INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data);
+extern UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);
+extern HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);
+extern HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);
+extern BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);
+extern BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);
+extern HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);
+extern VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);
+typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data);
+typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);
+typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
+typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+
+#ifndef WGL_NV_video_capture
+#define WGL_NV_video_capture 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+extern UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+extern BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+extern BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+extern BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif
+
+#ifndef WGL_NV_copy_image
+#define WGL_NV_copy_image 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_NV_multisample_coverage 1
+#endif
+
+#ifndef WGL_NV_DX_interop
+#define WGL_NV_DX_interop 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle);
+extern HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice);
+extern BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice);
+extern HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+extern BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject);
+extern BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access);
+extern BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+extern BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle);
+typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice);
+typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);
+typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);
+typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif
+
+#ifndef WGL_NV_DX_interop2
+#define WGL_NV_DX_interop2 1
+#endif
+
+#ifndef WGL_EXT_swap_control_tear
+#define WGL_EXT_swap_control_tear 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h
new file mode 100644
index 0000000..27fb359
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h
@@ -0,0 +1,152 @@
+/*
+ * This file should be source compatible with the Adaptec winaspi.h
+ * All DOS ASPI structures are the same as WINASPI
+ *
+ * Copyright (C) 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINASPI_H__
+#define __WINASPI_H__
+
+/* Include base aspi defs */
+#include <wnaspi32.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* #ifdef __cplusplus */
+
+/* WINE SCSI Stuff */
+#define ASPI_DOS        1
+#define ASPI_WIN16      2
+
+#include <pshpack1.h>
+
+/* SRB HA_INQUIRY */
+
+typedef struct tagSRB16_HaInquiry {
+  BYTE	SRB_Cmd;
+  BYTE	SRB_Status;
+  BYTE	SRB_HaId;
+  BYTE	SRB_Flags;
+  WORD	SRB_55AASignature;
+  WORD	SRB_ExtBufferSize;
+  BYTE	HA_Count;
+  BYTE	HA_SCSI_ID;
+  BYTE	HA_ManagerId[16];
+  BYTE	HA_Identifier[16];
+  BYTE	HA_Unique[16];
+  BYTE	HA_ExtBuffer[4];
+} SRB_HaInquiry16, *PSRB_HaInquiry16, *LPSRB_HaInquiry16;
+
+typedef struct tagSRB16_GDEVBlock {
+  BYTE        SRB_Cmd;            /* ASPI command code = SC_GET_DEV_TYPE */
+  BYTE        SRB_Status;         /* ASPI command status byte */
+  BYTE        SRB_HaId;           /* ASPI host adapter number */
+  BYTE        SRB_Flags;          /* ASPI request flags */
+  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */
+  BYTE        SRB_Target;         /* Target's SCSI ID */
+  BYTE        SRB_Lun;            /* Target's LUN number */
+  BYTE        SRB_DeviceType;     /* Target's peripheral device type */
+} SRB_GDEVBlock16, *PSRB_GDEVBlock16, *LPSRB_GDEVBlock16;
+
+
+typedef struct tagSRB16_ExecSCSICmd {
+  BYTE        SRB_Cmd;                /* ASPI command code	      (W)  */
+  BYTE        SRB_Status;             /* ASPI command status byte     (R)  */
+  BYTE        SRB_HaId;               /* ASPI host adapter number     (W)  */
+  BYTE        SRB_Flags;              /* ASPI request flags	      (W)  */
+  DWORD       SRB_Hdr_Rsvd;           /* Reserved, MUST = 0	      (-)  */
+  BYTE        SRB_Target;             /* Target's SCSI ID	      (W)  */
+  BYTE        SRB_Lun;                /* Target's LUN number	      (W)  */
+  DWORD       SRB_BufLen;             /* Data Allocation LengthPG     (W/R)*/
+  BYTE        SRB_SenseLen;           /* Sense Allocation Length      (W)  */
+  SEGPTR      SRB_BufPointer;         /* Data Buffer Pointer	      (W)  */
+  DWORD       SRB_Rsvd1;              /* Reserved, MUST = 0	      (-/W)*/
+  BYTE        SRB_CDBLen;             /* CDB Length = 6		      (W)  */
+  BYTE        SRB_HaStat;             /* Host Adapter Status	      (R)  */
+  BYTE        SRB_TargStat;           /* Target Status		      (R)  */
+  FARPROC16   SRB_PostProc;	      /* Post routine		      (W)  */
+  BYTE        SRB_Rsvd2[34];          /* Reserved, MUST = 0                */
+  BYTE		CDBByte[1];	      /* SCSI CBD - variable length   (W)  */
+  /* variable example for 6 byte cbd
+   * BYTE        CDBByte[6];             * SCSI CDB                    (W) *
+   * BYTE        SenseArea6[SENSE_LEN];  * Request Sense buffer 	(R) *
+   */
+} SRB_ExecSCSICmd16, *PSRB_ExecSCSICmd16, *LPSRB_ExecSCSICmd16;
+
+typedef struct tagSRB16_Abort {
+  BYTE        SRB_Cmd;            /* ASPI command code = SC_ABORT_SRB */
+  BYTE        SRB_Status;         /* ASPI command status byte */
+  BYTE        SRB_HaId;           /* ASPI host adapter number */
+  BYTE        SRB_Flags;          /* ASPI request flags */
+  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */
+  SEGPTR      SRB_ToAbort;        /* Pointer to SRB to abort */
+} SRB_Abort16, *PSRB_Abort16, *LPSRB_Abort16;
+
+
+typedef struct tagSRB16_BusDeviceReset {
+  BYTE        SRB_Cmd;            /* ASPI command code = SC_RESET_DEV */
+  BYTE        SRB_Status;         /* ASPI command status byte */
+  BYTE        SRB_HaId;           /* ASPI host adapter number */
+  BYTE        SRB_Flags;          /* ASPI request flags */
+  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */
+  BYTE        SRB_Target;         /* Target's SCSI ID */
+  BYTE        SRB_Lun;            /* Target's LUN number */
+  BYTE        SRB_ResetRsvd1[14]; /* Reserved, MUST = 0 */
+  BYTE        SRB_HaStat;         /* Host Adapter Status */
+  BYTE        SRB_TargStat;       /* Target Status */
+  FARPROC16   SRB_PostProc;       /* Post routine */
+  BYTE        SRB_ResetRsvd2[34]; /* Reserved, MUST = 0 */
+} SRB_BusDeviceReset16, *PSRB_BusDeviceReset16, *LPSRB_BusDeviceReset16;
+
+
+typedef struct tagSRB16_Common {
+  BYTE        SRB_Cmd;            /* ASPI command code = SC_ABORT_SRB */
+  BYTE        SRB_Status;         /* ASPI command status byte */
+  BYTE        SRB_HaId;           /* ASPI host adapter number */
+  BYTE        SRB_Flags;          /* ASPI request flags */
+  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */
+} SRB_Common16, *PSRB_Common16, *LPSRB_Common16;
+
+typedef union tagSRB16 {
+    SRB_Common16          common;
+    SRB_HaInquiry16       inquiry;
+    SRB_ExecSCSICmd16     cmd;
+    SRB_Abort16           abort;
+    SRB_BusDeviceReset16  reset;
+    SRB_GDEVBlock16       devtype;
+} SRB16, *LPSRB16;
+
+#include <poppack.h>
+
+extern WORD WINAPI SendASPICommand16(SEGPTR);
+extern WORD WINAPI GetASPISupportInfo16(void);
+
+#ifdef __cplusplus
+}
+#endif /* #ifdef __cplusplus */
+
+#endif /* __WINE_WINASPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h
new file mode 100644
index 0000000..c1e4066
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h
@@ -0,0 +1,572 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_WINBASE16_H
+#define __WINE_WINE_WINBASE16_H
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+#include <wine/windef16.h>
+#include <wine/library.h>
+
+#include <pshpack1.h>
+
+/* Process database (i.e. a normal DOS PSP) */
+typedef struct
+{
+    WORD      int20;            /* 00 int 20h instruction */
+    WORD      nextParagraph;    /* 02 Segment of next paragraph */
+    BYTE      reserved1;
+    BYTE      dispatcher[5];    /* 05 Long call to DOS */
+    FARPROC16 savedint22;       /* 0a Saved int 22h handler */
+    FARPROC16 savedint23;       /* 0e Saved int 23h handler */
+    FARPROC16 savedint24;       /* 12 Saved int 24h handler */
+    WORD      parentPSP;        /* 16 Selector of parent PSP */
+    BYTE      fileHandles[20];  /* 18 Open file handles */
+    HANDLE16  environment;      /* 2c Selector of environment */
+    DWORD     saveStack;        /* 2e SS:SP on last int21 call */
+    WORD      nbFiles;          /* 32 Number of file handles */
+    SEGPTR    fileHandlesPtr;   /* 34 Pointer to file handle table */
+    HANDLE16  hFileHandles;     /* 38 Handle to fileHandlesPtr */
+    WORD      reserved3[17];
+    BYTE      fcb1[16];         /* 5c First FCB */
+    BYTE      fcb2[20];         /* 6c Second FCB */
+    BYTE      cmdLine[128];     /* 80 Command-line (first byte is len)*/
+    BYTE      padding[16];      /* Some apps access beyond the end of the cmd line */
+} PDB16;
+
+/* Task database. See 'Windows Internals' p. 226.
+ * Note that 16-bit OLE 2 libs like to read it directly
+ * so we have to keep entry offsets as they are.
+ */
+typedef struct _TDB
+{
+    HTASK16   hNext;              /* 00 Selector of next TDB */
+    DWORD     ss_sp;              /* 02 Stack pointer of task */
+    WORD      nEvents;            /* 06 Events for this task */
+    INT16     priority;           /* 08 Task priority, -32..15 */
+    WORD      unused1;            /* 0a */
+    HTASK16   hSelf;              /* 0c Selector of this TDB */
+    HANDLE16  hPrevInstance;      /* 0e Previous instance of module */
+    DWORD     unused2;            /* 10 */
+    WORD      ctrlword8087;       /* 14 80x87 control word */
+    WORD      flags;              /* 16 Task flags */
+    UINT16    error_mode;         /* 18 Error mode (see SetErrorMode)*/
+    WORD      version;            /* 1a Expected Windows version */
+    HANDLE16  hInstance;          /* 1c Instance handle for task */
+    HMODULE16 hModule;            /* 1e Module handle */
+    HQUEUE16  hQueue;             /* 20 Selector of task queue */
+    HTASK16   hParent;            /* 22 Selector of TDB of parent */
+    WORD      signal_flags;       /* 24 Flags for signal handler */
+    FARPROC16 sighandler;         /* 26 Signal handler */
+    FARPROC16 userhandler;        /* 2a USER signal handler */
+    FARPROC16 discardhandler;     /* 2e Handler for GlobalNotify() */
+    FARPROC16 int0;               /* 32 int 0 (divide by 0) handler */
+    FARPROC16 int2;               /* 36 int 2 (NMI) handler */
+    FARPROC16 int4;               /* 3a int 4 (INTO) handler */
+    FARPROC16 int6;               /* 3e int 6 (invalid opc) handler */
+    FARPROC16 int7;               /* 42 int 7 (coprocessor) handler */
+    FARPROC16 int3e;              /* 46 int 3e (80x87 emu) handler */
+    FARPROC16 int75;              /* 4a int 75 (80x87 error) handler */
+    DWORD     compat_flags;       /* 4e Compatibility flags */
+    BYTE      unused4[2];         /* 52 */
+    struct _TEB *teb;             /* 54 Pointer to thread database */
+    BYTE      unused5[8];         /* 58 */
+    HANDLE16  hPDB;               /* 60 Selector of PDB (i.e. PSP) */
+    SEGPTR    dta;                /* 62 Current DTA */
+    BYTE      curdrive;           /* 66 Current drive */
+    CHAR      curdir[65];         /* 67 Current directory */
+    WORD      nCmdShow;           /* a8 cmdShow parameter to WinMain */
+    HTASK16   hYieldTo;           /* aa Next task to schedule */
+    DWORD     dlls_to_init;       /* ac Ptr to DLLs to initialize */
+    HANDLE16  hCSAlias;           /* b0 Code segment for this TDB */
+    WORD      thunks[8*4];        /* b2 Make proc instance thunks */
+    CHAR      module_name[8];     /* f2 Module name for task */
+    WORD      magic;              /* fa TDB signature */
+    HANDLE    hEvent;             /* fc scheduler event handle */
+    PDB16     pdb;                /* 100 PDB for this task */
+} TDB;
+
+/* TDB flags */
+#define TDBF_WINOLDAP   0x0001
+#define TDBF_OS2APP     0x0008
+#define TDBF_WIN32      0x0010
+
+/* Windows 3.1 USER signals */
+#define USIG16_TERMINATION      0x0020
+#define USIG16_DLL_LOAD         0x0040
+#define USIG16_DLL_UNLOAD       0x0080
+#define USIG16_GPF              0x0666
+
+typedef struct _SEGINFO {
+    UINT16    offSegment;
+    UINT16    cbSegment;
+    UINT16    flags;
+    UINT16    cbAlloc;
+    HGLOBAL16 h;
+    UINT16    alignShift;
+    UINT16    reserved[2];
+} SEGINFO;
+
+/* GetWinFlags */
+
+#define WF_PMODE 	0x0001
+#define WF_CPU286 	0x0002
+#define	WF_CPU386	0x0004
+#define	WF_CPU486 	0x0008
+#define	WF_STANDARD	0x0010
+#define	WF_WIN286 	0x0010
+#define	WF_ENHANCED	0x0020
+#define	WF_WIN386	0x0020
+#define	WF_CPU086	0x0040
+#define	WF_CPU186	0x0080
+#define	WF_LARGEFRAME	0x0100
+#define	WF_SMALLFRAME	0x0200
+#define	WF_80x87	0x0400
+#define	WF_PAGING	0x0800
+#define	WF_HASCPUID     0x2000
+#define	WF_WIN32WOW     0x4000	/* undoc */
+#define	WF_WLO          0x8000
+
+/* Parameters for LoadModule() */
+typedef struct
+{
+    HGLOBAL16 hEnvironment; /* Environment segment */
+    SEGPTR    cmdLine;      /* Command-line */
+    SEGPTR    showCmd;      /* Code for ShowWindow() */
+    SEGPTR    reserved;
+} LOADPARAMS16;
+
+/* Debugging support (DEBUG SYSTEM ONLY) */
+typedef struct
+{
+    WORD    flags;
+    DWORD   dwOptions;
+    DWORD   dwFilter;
+    CHAR    achAllocModule[8];
+    DWORD   dwAllocBreak;
+    DWORD   dwAllocCount;
+} WINDEBUGINFO16, *LPWINDEBUGINFO16;
+
+/* definitions specific to Wine 16-bit relaying support */
+
+/* 32-bit stack layout after __wine_call_to_16() */
+typedef struct _STACK32FRAME
+{
+    DWORD   restore_addr;   /* 00 return address for restoring code selector */
+    DWORD   codeselector;   /* 04 code selector to restore */
+    EXCEPTION_REGISTRATION_RECORD frame;  /* 08 Exception frame */
+    SEGPTR  frame16;        /* 10 16-bit frame from last CallFrom16() */
+    DWORD   edi;            /* 14 saved registers */
+    DWORD   esi;            /* 18 */
+    DWORD   ebx;            /* 1c */
+    DWORD   ebp;            /* 20 saved 32-bit frame pointer */
+    DWORD   retaddr;        /* 24 return address */
+    DWORD   target;         /* 28 target address / CONTEXT86 pointer */
+    DWORD   nb_args;        /* 2c number of 16-bit argument bytes */
+} STACK32FRAME;
+
+/* 16-bit stack layout after __wine_call_from_16() */
+typedef struct _STACK16FRAME
+{
+    STACK32FRAME *frame32;        /* 00 32-bit frame from last CallTo16() */
+    DWORD         edx;            /* 04 saved registers */
+    DWORD         ecx;            /* 08 */
+    DWORD         ebp;            /* 0c */
+    WORD          ds;             /* 10 */
+    WORD          es;             /* 12 */
+    WORD          fs;             /* 14 */
+    WORD          gs;             /* 16 */
+    DWORD         callfrom_ip;    /* 18 callfrom tail IP */
+    DWORD         module_cs;      /* 1c module code segment */
+    DWORD         relay;          /* 20 relay function address */
+    WORD          entry_ip;       /* 22 entry point IP */
+    DWORD         entry_point;    /* 26 API entry point to call, reused as mutex count */
+    WORD          bp;             /* 2a 16-bit stack frame chain */
+    WORD          ip;             /* 2c return address */
+    WORD          cs;             /* 2e */
+} STACK16FRAME;
+
+/* argument type flags for relay debugging */
+enum arg_types
+{
+    ARG_NONE = 0, /* indicates end of arg list */
+    ARG_WORD,     /* unsigned word */
+    ARG_SWORD,    /* signed word */
+    ARG_LONG,     /* long or segmented pointer */
+    ARG_PTR,      /* linear pointer */
+    ARG_STR,      /* linear pointer to null-terminated string */
+    ARG_SEGSTR,   /* segmented pointer to null-terminated string */
+    ARG_VARARG    /* start of varargs */
+};
+
+#define INVALID_HANDLE_VALUE16  ((HANDLE16) -1)
+#define INFINITE16      0xFFFF
+
+typedef struct {
+        DWORD dwOSVersionInfoSize;
+        DWORD dwMajorVersion;
+        DWORD dwMinorVersion;
+        DWORD dwBuildNumber;
+        DWORD dwPlatformId;
+        CHAR szCSDVersion[128];
+} OSVERSIONINFO16;
+
+
+/*
+ * NE Header FORMAT FLAGS
+ */
+#define NE_FFLAGS_SINGLEDATA    0x0001
+#define NE_FFLAGS_MULTIPLEDATA  0x0002
+#define NE_FFLAGS_WIN32         0x0010
+#define NE_FFLAGS_BUILTIN       0x0020  /* Wine built-in module */
+#define NE_FFLAGS_FRAMEBUF      0x0100  /* OS/2 fullscreen app */
+#define NE_FFLAGS_CONSOLE       0x0200  /* OS/2 console app */
+#define NE_FFLAGS_GUI           0x0300  /* right, (NE_FFLAGS_FRAMEBUF | NE_FFLAGS_CONSOLE) */
+#define NE_FFLAGS_SELFLOAD      0x0800
+#define NE_FFLAGS_LINKERROR     0x2000
+#define NE_FFLAGS_CALLWEP       0x4000
+#define NE_FFLAGS_LIBMODULE     0x8000
+
+/*
+ * NE Header OPERATING SYSTEM
+ */
+#define NE_OSFLAGS_UNKNOWN      0x00
+#define NE_OSFLAGS_OS2          0x01
+#define NE_OSFLAGS_WINDOWS      0x02
+
+/*
+ * NE Header ADDITIONAL FLAGS
+ */
+#define NE_AFLAGS_WIN2_PROTMODE 0x02
+#define NE_AFLAGS_WIN2_PROFONTS 0x04
+#define NE_AFLAGS_FASTLOAD      0x08
+
+/*
+ * Segment Flags
+ */
+#define NE_SEGFLAGS_DATA        0x0001
+#define NE_SEGFLAGS_ALLOCATED   0x0002
+#define NE_SEGFLAGS_LOADED      0x0004
+#define NE_SEGFLAGS_ITERATED    0x0008
+#define NE_SEGFLAGS_MOVEABLE    0x0010
+#define NE_SEGFLAGS_SHAREABLE   0x0020
+#define NE_SEGFLAGS_PRELOAD     0x0040
+#define NE_SEGFLAGS_EXECUTEONLY 0x0080
+#define NE_SEGFLAGS_READONLY    0x0080
+#define NE_SEGFLAGS_RELOC_DATA  0x0100
+#define NE_SEGFLAGS_SELFLOAD    0x0800
+#define NE_SEGFLAGS_DISCARDABLE 0x1000
+#define NE_SEGFLAGS_32BIT       0x2000
+
+/*
+ * Resource table structures.
+ */
+typedef struct
+{
+    WORD     offset;
+    WORD     length;
+    WORD     flags;
+    WORD     id;
+    HANDLE16 handle;
+    WORD     usage;
+} NE_NAMEINFO;
+
+typedef struct
+{
+    WORD        type_id;   /* Type identifier */
+    WORD        count;     /* Number of resources of this type */
+    FARPROC16   resloader; /* SetResourceHandler() */
+    /*
+     * Name info array.
+     */
+} NE_TYPEINFO;
+
+#define NE_RSCTYPE_CURSOR             0x8001
+#define NE_RSCTYPE_BITMAP             0x8002
+#define NE_RSCTYPE_ICON               0x8003
+#define NE_RSCTYPE_MENU               0x8004
+#define NE_RSCTYPE_DIALOG             0x8005
+#define NE_RSCTYPE_STRING             0x8006
+#define NE_RSCTYPE_FONTDIR            0x8007
+#define NE_RSCTYPE_FONT               0x8008
+#define NE_RSCTYPE_ACCELERATOR        0x8009
+#define NE_RSCTYPE_RCDATA             0x800a
+#define NE_RSCTYPE_GROUP_CURSOR       0x800c
+#define NE_RSCTYPE_GROUP_ICON         0x800e
+#define NE_RSCTYPE_SCALABLE_FONTPATH  0x80cc   /* Resource found in .fot files */
+
+#include <poppack.h>
+
+#define __AHSHIFT  3  /* don't change! */
+#define __AHINCR   (1 << __AHSHIFT)
+
+/* undocumented functions */
+
+typedef struct tagSYSLEVEL
+{
+    CRITICAL_SECTION crst;
+    INT              level;
+} SYSLEVEL;
+
+/* [GS]etProcessDword offsets */
+#define  GPD_APP_COMPAT_FLAGS    (-56)
+#define  GPD_LOAD_DONE_EVENT     (-52)
+#define  GPD_HINSTANCE16         (-48)
+#define  GPD_WINDOWS_VERSION     (-44)
+#define  GPD_THDB                (-40)
+#define  GPD_PDB                 (-36)
+#define  GPD_STARTF_SHELLDATA    (-32)
+#define  GPD_STARTF_HOTKEY       (-28)
+#define  GPD_STARTF_SHOWWINDOW   (-24)
+#define  GPD_STARTF_SIZE         (-20)
+#define  GPD_STARTF_POSITION     (-16)
+#define  GPD_STARTF_FLAGS        (-12)
+#define  GPD_PARENT              (- 8)
+#define  GPD_FLAGS               (- 4)
+#define  GPD_USERDATA            (  0)
+
+WORD        WINAPI AllocCStoDSAlias16(WORD);
+WORD        WINAPI AllocDStoCSAlias16(WORD);
+HGLOBAL16   WINAPI AllocResource16(HINSTANCE16,HRSRC16,DWORD);
+WORD        WINAPI AllocSelector16(WORD);
+WORD        WINAPI AllocSelectorArray16(WORD);
+VOID        WINAPI DirectedYield16(HTASK16);
+HGLOBAL16   WINAPI DirectResAlloc16(HINSTANCE16,WORD,UINT16);
+void        WINAPI DisposeLZ32Handle(HANDLE);
+HANDLE      WINAPI DosFileHandleToWin32Handle(HFILE);
+HANDLE16    WINAPI FarGetOwner16(HGLOBAL16);
+VOID        WINAPI FarSetOwner16(HGLOBAL16,HANDLE16);
+FARPROC16   WINAPI FileCDR16(FARPROC16);
+WORD        WINAPI FreeSelector16(WORD);
+HANDLE16    WINAPI GetAtomHandle16(ATOM);
+HANDLE16    WINAPI GetCodeHandle16(FARPROC16);
+BOOL16      WINAPI GetCodeInfo16(FARPROC16,SEGINFO*);
+DWORD       WINAPI GetCurrentPDB16(void);
+HTASK16     WINAPI GetCurrentTask(void);
+SEGPTR      WINAPI GetDOSEnvironment16(void);
+HMODULE16   WINAPI GetExePtr(HANDLE16);
+WORD        WINAPI GetExeVersion16(void);
+WORD        WINAPI GetExpWinVer16(HMODULE16);
+HQUEUE16    WINAPI GetFastQueue16(void);
+DWORD       WINAPI GetHeapSpaces16(HMODULE16);
+INT16       WINAPI GetInstanceData16(HINSTANCE16,WORD,INT16);
+BOOL16      WINAPI GetModuleName16(HINSTANCE16,LPSTR,INT16);
+INT16       WINAPI GetModuleUsage16(HINSTANCE16);
+UINT16      WINAPI GetNumTasks16(void);
+VOID        WINAPI GetpWin16Lock(SYSLEVEL**);
+SEGPTR      WINAPI GetpWin16Lock16(void);
+DWORD       WINAPI GetProcessDword(DWORD,INT);
+DWORD       WINAPI GetSelectorLimit16(WORD);
+FARPROC16   WINAPI GetSetKernelDOSProc16(FARPROC16 DosProc);
+HINSTANCE16 WINAPI GetTaskDS16(void);
+HQUEUE16    WINAPI GetTaskQueue16(HTASK16);
+HQUEUE16    WINAPI GetThreadQueue16(DWORD);
+DWORD       WINAPI GetWinFlags16(void);
+DWORD       WINAPI GlobalDOSAlloc16(DWORD);
+WORD        WINAPI GlobalDOSFree16(WORD);
+void        WINAPI GlobalFreeAll16(HGLOBAL16);
+DWORD       WINAPI GlobalHandleNoRIP16(WORD);
+WORD        WINAPI GlobalHandleToSel16(HGLOBAL16);
+HGLOBAL16   WINAPI GlobalLRUNewest16(HGLOBAL16);
+HGLOBAL16   WINAPI GlobalLRUOldest16(HGLOBAL16);
+VOID        WINAPI GlobalNotify16(FARPROC16);
+WORD        WINAPI GlobalPageLock16(HGLOBAL16);
+WORD        WINAPI GlobalPageUnlock16(HGLOBAL16);
+SEGPTR      WINAPI HasGPHandler16(SEGPTR);
+BOOL16      WINAPI IsSharedSelector16(HANDLE16);
+BOOL16      WINAPI IsTask16(HTASK16);
+HTASK16     WINAPI IsTaskLocked16(void);
+VOID        WINAPI LogError16(UINT16, LPVOID);
+VOID        WINAPI LogParamError16(UINT16,FARPROC16,LPVOID);
+WORD        WINAPI LocalCountFree16(void);
+WORD        WINAPI LocalHandleDelta16(WORD);
+WORD        WINAPI LocalHeapSize16(void);
+BOOL16      WINAPI LocalInit16(HANDLE16,WORD,WORD);
+FARPROC16   WINAPI LocalNotify16(FARPROC16);
+HTASK16     WINAPI LockCurrentTask16(BOOL16);
+DWORD       WINAPI MapLS(LPCVOID);
+LPVOID      WINAPI MapSL(DWORD);
+VOID        WINAPI OldYield16(void);
+VOID        WINAPI WIN32_OldYield16(void);
+VOID        WINAPI PostEvent16(HTASK16);
+WORD        WINAPI PrestoChangoSelector16(WORD,WORD);
+VOID        WINAPI ReleaseThunkLock(DWORD*);
+VOID        WINAPI RestoreThunkLock(DWORD);
+WORD        WINAPI SelectorAccessRights16(WORD,WORD,WORD);
+void        WINAPI SetFastQueue16(DWORD,HQUEUE16);
+VOID        WINAPI SetPriority16(HTASK16,INT16);
+FARPROC16   WINAPI SetResourceHandler16(HINSTANCE16,LPCSTR,FARPROC16);
+WORD        WINAPI SetSelectorLimit16(WORD,DWORD);
+HQUEUE16    WINAPI SetTaskQueue16(HTASK16,HQUEUE16);
+HQUEUE16    WINAPI SetThreadQueue16(DWORD,HQUEUE16);
+VOID        WINAPI SwitchStackTo16(WORD,WORD,WORD);
+VOID        WINAPI UnMapLS(DWORD);
+BOOL16      WINAPI WaitEvent16(HTASK16);
+HFILE       WINAPI Win32HandleToDosFileHandle(HANDLE);
+VOID        WINAPI WriteOutProfiles16(void);
+VOID        WINAPI hmemcpy16(LPVOID,LPCVOID,LONG);
+VOID        WINAPI _CheckNotSysLevel(SYSLEVEL *lock);
+DWORD       WINAPI _ConfirmSysLevel(SYSLEVEL*);
+DWORD       WINAPI _ConfirmWin16Lock(void);
+VOID        WINAPI _CreateSysLevel(SYSLEVEL*,INT);
+VOID        WINAPI _EnterSysLevel(SYSLEVEL*);
+VOID        WINAPI _EnterWin16Lock(void);
+VOID        WINAPI _LeaveSysLevel(SYSLEVEL*);
+VOID        WINAPI _LeaveWin16Lock(void);
+
+
+INT16       WINAPI AccessResource16(HINSTANCE16,HRSRC16);
+ATOM        WINAPI AddAtom16(LPCSTR);
+UINT16      WINAPI CompareString16(DWORD,DWORD,LPCSTR,DWORD,LPCSTR,DWORD);
+BOOL16      WINAPI CreateDirectory16(LPCSTR,LPVOID);
+BOOL16      WINAPI DefineHandleTable16(WORD);
+ATOM        WINAPI DeleteAtom16(ATOM);
+BOOL16      WINAPI DeleteFile16(LPCSTR);
+void        WINAPI ExitKernel16(void);
+void        WINAPI FatalAppExit16(UINT16,LPCSTR);
+ATOM        WINAPI FindAtom16(LPCSTR);
+BOOL16      WINAPI FindClose16(HANDLE16);
+VOID        WINAPI FreeLibrary16(HINSTANCE16);
+HANDLE16    WINAPI FindFirstFile16(LPCSTR,LPWIN32_FIND_DATAA);
+BOOL16      WINAPI FindNextFile16(HANDLE16,LPWIN32_FIND_DATAA);
+HRSRC16     WINAPI FindResource16(HINSTANCE16,LPCSTR,LPCSTR);
+BOOL16      WINAPI FreeModule16(HMODULE16);
+void        WINAPI FreeProcInstance16(FARPROC16);
+BOOL16      WINAPI FreeResource16(HGLOBAL16);
+UINT16      WINAPI GetAtomName16(ATOM,LPSTR,INT16);
+UINT16      WINAPI GetCurrentDirectory16(UINT16,LPSTR);
+BOOL16      WINAPI GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+UINT16      WINAPI GetDriveType16(UINT16); /* yes, the arguments differ */
+INT16       WINAPI GetLocaleInfo16(LCID,LCTYPE,LPSTR,INT16);
+DWORD       WINAPI GetFileAttributes16(LPCSTR);
+DWORD       WINAPI GetFreeSpace16(UINT16);
+INT16       WINAPI GetModuleFileName16(HINSTANCE16,LPSTR,INT16);
+HMODULE16   WINAPI GetModuleHandle16(LPCSTR);
+UINT16      WINAPI GetPrivateProfileInt16(LPCSTR,LPCSTR,INT16,LPCSTR);
+INT16       WINAPI GetPrivateProfileSection16(LPCSTR,LPSTR,UINT16,LPCSTR);
+WORD        WINAPI GetPrivateProfileSectionNames16(LPSTR,UINT16,LPCSTR);
+INT16       WINAPI GetPrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16,LPCSTR);
+BOOL16      WINAPI GetPrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);
+FARPROC16   WINAPI GetProcAddress16(HMODULE16,LPCSTR);
+UINT16      WINAPI GetProfileInt16(LPCSTR,LPCSTR,INT16);
+INT16       WINAPI GetProfileSection16(LPCSTR,LPSTR,UINT16);
+WORD        WINAPI GetProfileSectionNames16(LPSTR,WORD);
+INT16       WINAPI GetProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16);
+DWORD       WINAPI GetSelectorBase(WORD);
+BOOL16      WINAPI GetStringType16(LCID,DWORD,LPCSTR,INT16,LPWORD);
+UINT16      WINAPI GetSystemDirectory16(LPSTR,UINT16);
+UINT16      WINAPI GetTempFileName16(BYTE,LPCSTR,UINT16,LPSTR);
+DWORD       WINAPI GetVersion16(void);
+BOOL16      WINAPI GetVersionEx16(OSVERSIONINFO16*);
+BOOL16      WINAPI GetWinDebugInfo16(LPWINDEBUGINFO16,UINT16);
+UINT16      WINAPI GetWindowsDirectory16(LPSTR,UINT16);
+HGLOBAL16   WINAPI GlobalAlloc16(UINT16,DWORD);
+DWORD       WINAPI GlobalCompact16(DWORD);
+LPVOID      WINAPI GlobalLock16(HGLOBAL16);
+WORD        WINAPI GlobalFix16(HGLOBAL16);
+UINT16      WINAPI GlobalFlags16(HGLOBAL16);
+HGLOBAL16   WINAPI GlobalFree16(HGLOBAL16);
+DWORD       WINAPI GlobalHandle16(WORD);
+HGLOBAL16   WINAPI GlobalReAlloc16(HGLOBAL16,DWORD,UINT16);
+DWORD       WINAPI GlobalSize16(HGLOBAL16);
+VOID        WINAPI GlobalUnfix16(HGLOBAL16);
+BOOL16      WINAPI GlobalUnlock16(HGLOBAL16);
+BOOL16      WINAPI GlobalUnWire16(HGLOBAL16);
+SEGPTR      WINAPI GlobalWire16(HGLOBAL16);
+WORD        WINAPI InitAtomTable16(WORD);
+void        WINAPI InitTask16(CONTEXT*);
+BOOL16      WINAPI IsBadCodePtr16(SEGPTR);
+BOOL16      WINAPI IsBadHugeReadPtr16(SEGPTR,DWORD);
+BOOL16      WINAPI IsBadHugeWritePtr16(SEGPTR,DWORD);
+BOOL16      WINAPI IsBadReadPtr16(SEGPTR,UINT16);
+BOOL16      WINAPI IsBadStringPtr16(SEGPTR,UINT16);
+BOOL16      WINAPI IsBadWritePtr16(SEGPTR,UINT16);
+BOOL16      WINAPI IsDBCSLeadByte16(BYTE);
+HINSTANCE16 WINAPI LoadLibrary16(LPCSTR);
+HINSTANCE16 WINAPI LoadModule16(LPCSTR,LPVOID);
+HGLOBAL16   WINAPI LoadResource16(HINSTANCE16,HRSRC16);
+HLOCAL16    WINAPI LocalAlloc16(UINT16,WORD);
+UINT16      WINAPI LocalCompact16(UINT16);
+UINT16      WINAPI LocalFlags16(HLOCAL16);
+HLOCAL16    WINAPI LocalFree16(HLOCAL16);
+HLOCAL16    WINAPI LocalHandle16(WORD);
+SEGPTR      WINAPI LocalLock16(HLOCAL16);
+HLOCAL16    WINAPI LocalReAlloc16(HLOCAL16,WORD,UINT16);
+UINT16      WINAPI LocalShrink16(HGLOBAL16,UINT16);
+UINT16      WINAPI LocalSize16(HLOCAL16);
+BOOL16      WINAPI LocalUnlock16(HLOCAL16);
+LPVOID      WINAPI LockResource16(HGLOBAL16);
+HGLOBAL16   WINAPI LockSegment16(HGLOBAL16);
+FARPROC16   WINAPI MakeProcInstance16(FARPROC16,HANDLE16);
+HFILE16     WINAPI OpenFile16(LPCSTR,OFSTRUCT*,UINT16);
+DWORD       WINAPI RegCloseKey16(HKEY);
+DWORD       WINAPI RegCreateKey16(HKEY,LPCSTR,PHKEY);
+DWORD       WINAPI RegDeleteKey16(HKEY,LPCSTR);
+DWORD       WINAPI RegDeleteValue16(HKEY,LPSTR);
+DWORD       WINAPI RegEnumKey16(HKEY,DWORD,LPSTR,DWORD);
+DWORD       WINAPI RegEnumValue16(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD       WINAPI RegOpenKey16(HKEY,LPCSTR,PHKEY);
+DWORD       WINAPI RegQueryValue16(HKEY,LPCSTR,LPSTR,LPDWORD);
+DWORD       WINAPI RegQueryValueEx16(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD       WINAPI RegSetValue16(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
+DWORD       WINAPI RegSetValueEx16(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);
+BOOL16      WINAPI RemoveDirectory16(LPCSTR);
+BOOL16      WINAPI SetCurrentDirectory16(LPCSTR);
+UINT16      WINAPI SetErrorMode16(UINT16);
+BOOL16      WINAPI SetFileAttributes16(LPCSTR,DWORD);
+UINT16      WINAPI SetHandleCount16(UINT16);
+WORD        WINAPI SetSelectorBase(WORD,DWORD);
+LONG        WINAPI SetSwapAreaSize16(WORD);
+BOOL16      WINAPI SetWinDebugInfo16(LPWINDEBUGINFO16);
+DWORD       WINAPI SizeofResource16(HMODULE16,HRSRC16);
+void        WINAPI UnlockSegment16(HGLOBAL16);
+BOOL16      WINAPI WritePrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL16      WINAPI WriteProfileString16(LPCSTR,LPCSTR,LPCSTR);
+/* Yield16 will only be available from kernel module, use WOWYield instead */
+VOID        WINAPI Yield16(void);
+SEGPTR      WINAPI lstrcat16(SEGPTR,LPCSTR);
+SEGPTR      WINAPI lstrcatn16(SEGPTR,LPCSTR,INT16);
+SEGPTR      WINAPI lstrcpy16(SEGPTR,LPCSTR);
+SEGPTR      WINAPI lstrcpyn16(SEGPTR,LPCSTR,INT16);
+INT16       WINAPI lstrlen16(LPCSTR);
+HINSTANCE16 WINAPI WinExec16(LPCSTR,UINT16);
+LONG        WINAPI _hread16(HFILE16,LPVOID,LONG);
+LONG        WINAPI _hwrite16(HFILE16,LPCSTR,LONG);
+HFILE16     WINAPI _lcreat16(LPCSTR,INT16);
+HFILE16     WINAPI _lclose16(HFILE16);
+LONG        WINAPI _llseek16(HFILE16,LONG,INT16);
+HFILE16     WINAPI _lopen16(LPCSTR,INT16);
+UINT16      WINAPI _lread16(HFILE16,LPVOID,UINT16);
+UINT16      WINAPI _lwrite16(HFILE16,LPCSTR,UINT16);
+BOOL16      WINAPI WritePrivateProfileSection16(LPCSTR,LPCSTR,LPCSTR);
+BOOL16      WINAPI WritePrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);
+BOOL16      WINAPI WriteProfileSection16(LPCSTR,LPCSTR);
+
+#endif /* __WINE_WINE_WINBASE16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h
new file mode 100644
index 0000000..60cf282
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h
@@ -0,0 +1,178 @@
+/*
+ * Basic type definitions for 16 bit variations on Windows types.
+ * These types are provided mostly to insure compatibility with
+ * 16 bit windows code.
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDEF16_H
+#define __WINE_WINDEF16_H
+
+#ifndef RC_INVOKED
+#include <stdarg.h>
+#endif
+#include <windef.h>
+#include <winbase.h>
+
+/* Standard data types */
+
+typedef unsigned short  BOOL16;
+typedef DWORD           SEGPTR;
+
+typedef UINT16          HANDLE16;
+typedef HANDLE16       *LPHANDLE16;
+
+typedef UINT16          WPARAM16;
+typedef INT16          *LPINT16;
+typedef UINT16         *LPUINT16;
+
+typedef WORD            CATCHBUF[9];
+typedef WORD           *LPCATCHBUF;
+
+#define MAKESEGPTR(seg,off) ((SEGPTR)MAKELONG(off,seg))
+#define SELECTOROF(ptr)     (HIWORD(ptr))
+#define OFFSETOF(ptr)       (LOWORD(ptr))
+
+typedef WORD *VA_LIST16;
+
+#define __VA_ROUNDED16(type) \
+    ((sizeof(type) + sizeof(WORD) - 1) / sizeof(WORD) * sizeof(WORD))
+#define VA_ARG16(list,type) \
+    (((list) = (VA_LIST16)((char *)(list) + __VA_ROUNDED16(type))), \
+     *((type *)(void *)((char *)(list) - __VA_ROUNDED16(type))))
+
+#define HFILE_ERROR16   ((HFILE16)-1)
+
+#define DECLARE_HANDLE16(a) \
+	typedef HANDLE16 a##16; \
+	typedef a##16 *P##a##16; \
+	typedef a##16 *NP##a##16; \
+	typedef a##16 *LP##a##16
+
+DECLARE_HANDLE16(HACMDRIVERID);
+DECLARE_HANDLE16(HACMDRIVER);
+DECLARE_HANDLE16(HACMOBJ);
+DECLARE_HANDLE16(HACMSTREAM);
+DECLARE_HANDLE16(HMETAFILEPICT);
+
+DECLARE_HANDLE16(HACCEL);
+DECLARE_HANDLE16(HBITMAP);
+DECLARE_HANDLE16(HBRUSH);
+DECLARE_HANDLE16(HCOLORSPACE);
+DECLARE_HANDLE16(HCURSOR);
+DECLARE_HANDLE16(HDC);
+DECLARE_HANDLE16(HDROP);
+DECLARE_HANDLE16(HDRVR);
+DECLARE_HANDLE16(HDWP);
+DECLARE_HANDLE16(HENHMETAFILE);
+DECLARE_HANDLE16(HFILE);
+DECLARE_HANDLE16(HFONT);
+DECLARE_HANDLE16(HICON);
+DECLARE_HANDLE16(HINSTANCE);
+DECLARE_HANDLE16(HKEY);
+DECLARE_HANDLE16(HMENU);
+DECLARE_HANDLE16(HMETAFILE);
+DECLARE_HANDLE16(HMIDI);
+DECLARE_HANDLE16(HMIDIIN);
+DECLARE_HANDLE16(HMIDIOUT);
+DECLARE_HANDLE16(HMIDISTRM);
+DECLARE_HANDLE16(HMIXER);
+DECLARE_HANDLE16(HMIXEROBJ);
+DECLARE_HANDLE16(HMMIO);
+DECLARE_HANDLE16(HPALETTE);
+DECLARE_HANDLE16(HPEN);
+DECLARE_HANDLE16(HQUEUE);
+DECLARE_HANDLE16(HRGN);
+DECLARE_HANDLE16(HRSRC);
+DECLARE_HANDLE16(HTASK);
+DECLARE_HANDLE16(HWAVE);
+DECLARE_HANDLE16(HWAVEIN);
+DECLARE_HANDLE16(HWAVEOUT);
+DECLARE_HANDLE16(HWINSTA);
+DECLARE_HANDLE16(HDESK);
+DECLARE_HANDLE16(HWND);
+DECLARE_HANDLE16(HKL);
+DECLARE_HANDLE16(HIC);
+DECLARE_HANDLE16(HRASCONN);
+#undef DECLARE_HANDLE16
+
+typedef HINSTANCE16 HMODULE16;
+typedef HANDLE16 HGDIOBJ16;
+typedef HANDLE16 HGLOBAL16;
+typedef HANDLE16 HLOCAL16;
+
+#include <pshpack1.h>
+
+/* The SIZE structure */
+
+typedef struct
+{
+    INT16  cx;
+    INT16  cy;
+} SIZE16, *PSIZE16, *LPSIZE16;
+
+/* The POINT structure */
+
+typedef struct
+{
+    INT16  x;
+    INT16  y;
+} POINT16, *PPOINT16, *LPPOINT16;
+
+/* The RECT structure */
+
+typedef struct
+{
+    INT16  left;
+    INT16  top;
+    INT16  right;
+    INT16  bottom;
+} RECT16, *LPRECT16;
+
+#include <poppack.h>
+
+/* Callback function pointers types */
+
+typedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
+typedef BOOL16  (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
+typedef INT16   (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
+typedef BOOL16  (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
+typedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM);
+typedef BOOL16  (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
+typedef VOID    (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
+typedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM);
+typedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
+
+#ifdef WINE_STRICT_PROTOTYPES
+typedef LRESULT (CALLBACK *FARPROC16)(void);
+typedef INT16   (CALLBACK *PROC16)(void);
+#else
+typedef LRESULT (CALLBACK *FARPROC16)();
+typedef INT16   (CALLBACK *PROC16)();
+#endif
+
+#endif /* __WINE_WINDEF16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc
new file mode 100644
index 0000000..1baa8b6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2001 Dmitry Timoshkov
+ * Copyright 2004 Ivan Leo Puoti
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "winresrc.h"
+
+/*
+Assign WINE_FILEVERSION and WINE_FILEVERSION_STR high enough number
+to make sure that programs, relying on the version numbers, will
+never complain.
+*/
+
+#ifndef WINE_FILEVERSION_MAJOR
+#define WINE_FILEVERSION_MAJOR 10
+#endif
+
+#ifndef WINE_FILEVERSION_MINOR
+#define WINE_FILEVERSION_MINOR 0
+#endif
+
+#ifndef WINE_FILEVERSION_BUILD
+#define WINE_FILEVERSION_BUILD 0
+#endif
+
+#ifndef WINE_FILEVERSION_PLATFORMID
+#define WINE_FILEVERSION_PLATFORMID 0
+#endif
+
+#ifndef WINE_FILEVERSION
+#define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,\
+                         WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID
+#endif
+
+#define WINE_VER_STRINGIZE2(x) #x
+#define WINE_VER_STRINGIZE(x) WINE_VER_STRINGIZE2(x)
+
+#ifndef WINE_FILEVERSION_STR
+#define WINE_FILEVERSION_STR WINE_VER_STRINGIZE(WINE_FILEVERSION_MAJOR.WINE_FILEVERSION_MINOR.WINE_FILEVERSION_BUILD.WINE_FILEVERSION_PLATFORMID)
+#endif
+
+#ifndef WINE_FILEDESCRIPTION_STR
+#define WINE_FILEDESCRIPTION_STR "Wine core dll"
+#endif
+
+#ifndef WINE_FILENAME
+#define WINE_FILENAME ""
+#endif
+
+#ifndef WINE_FILENAME_STR
+#define WINE_FILENAME_STR ""
+#endif
+
+#ifndef WINE_FILETYPE
+#define WINE_FILETYPE VFT_DLL
+#endif
+
+#ifndef WINE_FILESUBTYPE
+#define WINE_FILESUBTYPE VFT2_UNKNOWN
+#endif
+
+#ifndef WINE_PRODUCTVERSION
+#define WINE_PRODUCTVERSION 1,0,0,0
+#endif
+
+#ifndef WINE_PRODUCTVERSION_STR
+#define WINE_PRODUCTVERSION_STR "1.0"
+#endif
+
+#ifndef WINE_PRODUCTNAME_STR
+#define WINE_PRODUCTNAME_STR "Wine"
+#endif
+
+#ifndef WINE_EXTRAVALUES
+#define WINE_EXTRAVALUES
+#endif
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION    WINE_FILEVERSION
+PRODUCTVERSION WINE_PRODUCTVERSION
+FILEFLAGSMASK  63
+FILEFLAGS      0
+FILEOS         VOS_UNKNOWN
+FILETYPE       WINE_FILETYPE
+FILESUBTYPE    WINE_FILESUBTYPE
+{
+    BLOCK "StringFileInfo"
+    {
+	BLOCK "040904E4" /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
+	{
+	    VALUE "CompanyName", "Microsoft Corporation"  /* GameGuard depends on this */
+	    VALUE "FileDescription", WINE_FILEDESCRIPTION_STR
+	    VALUE "FileVersion", WINE_FILEVERSION_STR
+	    VALUE "InternalName", WINE_FILENAME
+	    VALUE "LegalCopyright", "Copyright (c) 1993-2013 the Wine project authors (see the file AUTHORS for a complete list)"
+	    VALUE "OriginalFilename", WINE_FILENAME_STR
+	    VALUE "ProductName", WINE_PRODUCTNAME_STR
+	    VALUE "ProductVersion", WINE_PRODUCTVERSION_STR
+	    WINE_EXTRAVALUES
+	}
+    }
+    BLOCK "VarFileInfo"
+    {
+	VALUE "Translation", 0x0409, 0x04E4 /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h
new file mode 100644
index 0000000..3c4681c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h
@@ -0,0 +1,9726 @@
+/*** Autogenerated by WIDL 1.1.43 from ../../include/wine/wined3d.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WINED3D_H
+#define __WIDL_WINED3D_H
+
+#ifdef VBOX_WITH_WDDM
+#include "../../../vbox/VBoxWineEx.h"
+#endif
+
+# undef DECLSPEC_HIDDEN
+# define DECLSPEC_HIDDEN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IWineD3DDeviceParent_FWD_DEFINED__
+#define __IWineD3DDeviceParent_FWD_DEFINED__
+typedef interface IWineD3DDeviceParent IWineD3DDeviceParent;
+#endif
+
+#ifndef __IWineD3DBase_FWD_DEFINED__
+#define __IWineD3DBase_FWD_DEFINED__
+typedef interface IWineD3DBase IWineD3DBase;
+#endif
+
+#ifndef __IWineD3D_FWD_DEFINED__
+#define __IWineD3D_FWD_DEFINED__
+typedef interface IWineD3D IWineD3D;
+#endif
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DRendertargetView_FWD_DEFINED__
+#define __IWineD3DRendertargetView_FWD_DEFINED__
+typedef interface IWineD3DRendertargetView IWineD3DRendertargetView;
+#endif
+
+#ifndef __IWineD3DPalette_FWD_DEFINED__
+#define __IWineD3DPalette_FWD_DEFINED__
+typedef interface IWineD3DPalette IWineD3DPalette;
+#endif
+
+#ifndef __IWineD3DClipper_FWD_DEFINED__
+#define __IWineD3DClipper_FWD_DEFINED__
+typedef interface IWineD3DClipper IWineD3DClipper;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DBaseTexture_FWD_DEFINED__
+#define __IWineD3DBaseTexture_FWD_DEFINED__
+typedef interface IWineD3DBaseTexture IWineD3DBaseTexture;
+#endif
+
+#ifndef __IWineD3DTexture_FWD_DEFINED__
+#define __IWineD3DTexture_FWD_DEFINED__
+typedef interface IWineD3DTexture IWineD3DTexture;
+#endif
+
+#ifndef __IWineD3DCubeTexture_FWD_DEFINED__
+#define __IWineD3DCubeTexture_FWD_DEFINED__
+typedef interface IWineD3DCubeTexture IWineD3DCubeTexture;
+#endif
+
+#ifndef __IWineD3DVolumeTexture_FWD_DEFINED__
+#define __IWineD3DVolumeTexture_FWD_DEFINED__
+typedef interface IWineD3DVolumeTexture IWineD3DVolumeTexture;
+#endif
+
+#ifndef __IWineD3DVertexDeclaration_FWD_DEFINED__
+#define __IWineD3DVertexDeclaration_FWD_DEFINED__
+typedef interface IWineD3DVertexDeclaration IWineD3DVertexDeclaration;
+#endif
+
+#ifndef __IWineD3DStateBlock_FWD_DEFINED__
+#define __IWineD3DStateBlock_FWD_DEFINED__
+typedef interface IWineD3DStateBlock IWineD3DStateBlock;
+#endif
+
+#ifndef __IWineD3DQuery_FWD_DEFINED__
+#define __IWineD3DQuery_FWD_DEFINED__
+typedef interface IWineD3DQuery IWineD3DQuery;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DBuffer_FWD_DEFINED__
+#define __IWineD3DBuffer_FWD_DEFINED__
+typedef interface IWineD3DBuffer IWineD3DBuffer;
+#endif
+
+#ifndef __IWineD3DBaseShader_FWD_DEFINED__
+#define __IWineD3DBaseShader_FWD_DEFINED__
+typedef interface IWineD3DBaseShader IWineD3DBaseShader;
+#endif
+
+#ifndef __IWineD3DVertexShader_FWD_DEFINED__
+#define __IWineD3DVertexShader_FWD_DEFINED__
+typedef interface IWineD3DVertexShader IWineD3DVertexShader;
+#endif
+
+#ifndef __IWineD3DGeometryShader_FWD_DEFINED__
+#define __IWineD3DGeometryShader_FWD_DEFINED__
+typedef interface IWineD3DGeometryShader IWineD3DGeometryShader;
+#endif
+
+#ifndef __IWineD3DPixelShader_FWD_DEFINED__
+#define __IWineD3DPixelShader_FWD_DEFINED__
+typedef interface IWineD3DPixelShader IWineD3DPixelShader;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+
+#if 0
+typedef HANDLE HMONITOR;
+typedef struct _RGNDATAHEADER {
+    DWORD dwSize;
+    DWORD iType;
+    DWORD nCount;
+    DWORD nRgnSize;
+    RECT rcBound;
+} RGNDATAHEADER;
+typedef struct _RGNDATA {
+    RGNDATAHEADER rdh;
+    char Buffer[1];
+} RGNDATA;
+typedef struct _LUID {
+    DWORD LowPart;
+    LONG HighPart;
+} LUID;
+typedef struct _LUID *PLUID;
+#endif
+#define WINED3D_OK                                  S_OK
+#define _FACWINED3D (0x876)
+
+#define MAKE_WINED3DSTATUS(code)                    MAKE_HRESULT(0, _FACWINED3D, code)
+#define WINED3DOK_NOAUTOGEN                         MAKE_WINED3DSTATUS(2159)
+#define MAKE_WINED3DHRESULT(code)                   MAKE_HRESULT(1, _FACWINED3D, code)
+#define WINED3DERR_WRONGTEXTUREFORMAT               MAKE_WINED3DHRESULT(2072)
+#define WINED3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_WINED3DHRESULT(2073)
+#define WINED3DERR_UNSUPPORTEDCOLORARG              MAKE_WINED3DHRESULT(2074)
+#define WINED3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_WINED3DHRESULT(2075)
+#define WINED3DERR_UNSUPPORTEDALPHAARG              MAKE_WINED3DHRESULT(2076)
+#define WINED3DERR_TOOMANYOPERATIONS                MAKE_WINED3DHRESULT(2077)
+#define WINED3DERR_CONFLICTINGTEXTUREFILTER         MAKE_WINED3DHRESULT(2078)
+#define WINED3DERR_UNSUPPORTEDFACTORVALUE           MAKE_WINED3DHRESULT(2079)
+#define WINED3DERR_CONFLICTINGRENDERSTATE           MAKE_WINED3DHRESULT(2081)
+#define WINED3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_WINED3DHRESULT(2082)
+#define WINED3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_WINED3DHRESULT(2086)
+#define WINED3DERR_DRIVERINTERNALERROR              MAKE_WINED3DHRESULT(2087)
+#define WINED3DERR_NOTFOUND                         MAKE_WINED3DHRESULT(2150)
+#define WINED3DERR_MOREDATA                         MAKE_WINED3DHRESULT(2151)
+#define WINED3DERR_DEVICELOST                       MAKE_WINED3DHRESULT(2152)
+#define WINED3DERR_DEVICENOTRESET                   MAKE_WINED3DHRESULT(2153)
+#define WINED3DERR_NOTAVAILABLE                     MAKE_WINED3DHRESULT(2154)
+#define WINED3DERR_OUTOFVIDEOMEMORY                 MAKE_WINED3DHRESULT(380)
+#define WINED3DERR_INVALIDDEVICE                    MAKE_WINED3DHRESULT(2155)
+#define WINED3DERR_INVALIDCALL                      MAKE_WINED3DHRESULT(2156)
+#define WINED3DERR_DRIVERINVALIDCALL                MAKE_WINED3DHRESULT(2157)
+#define WINED3DERR_WASSTILLDRAWING                  MAKE_WINED3DHRESULT(540)
+#define WINEDDERR_NOTAOVERLAYSURFACE                MAKE_WINED3DHRESULT(580)
+#define WINEDDERR_NOTLOCKED                         MAKE_WINED3DHRESULT(584)
+#define WINEDDERR_NODC                              MAKE_WINED3DHRESULT(586)
+#define WINEDDERR_DCALREADYCREATED                  MAKE_WINED3DHRESULT(620)
+#define WINEDDERR_NOTFLIPPABLE                      MAKE_WINED3DHRESULT(582)
+#define WINEDDERR_SURFACEBUSY                       MAKE_WINED3DHRESULT(430)
+#define WINEDDERR_INVALIDRECT                       MAKE_WINED3DHRESULT(150)
+#define WINEDDERR_NOCLIPLIST                        MAKE_WINED3DHRESULT(205)
+#define WINEDDERR_OVERLAYNOTVISIBLE                 MAKE_WINED3DHRESULT(577)
+typedef DWORD WINED3DCOLOR;
+typedef enum _WINED3DLIGHTTYPE {
+    WINED3DLIGHT_POINT = 1,
+    WINED3DLIGHT_SPOT = 2,
+    WINED3DLIGHT_DIRECTIONAL = 3,
+    WINED3DLIGHT_PARALLELPOINT = 4,
+    WINED3DLIGHT_GLSPOT = 5,
+    WINED3DLIGHT_FORCE_DWORD = 0x7fffffff
+} WINED3DLIGHTTYPE;
+typedef enum _WINED3DPRIMITIVETYPE {
+    WINED3DPT_UNDEFINED = 0,
+    WINED3DPT_POINTLIST = 1,
+    WINED3DPT_LINELIST = 2,
+    WINED3DPT_LINESTRIP = 3,
+    WINED3DPT_TRIANGLELIST = 4,
+    WINED3DPT_TRIANGLESTRIP = 5,
+    WINED3DPT_TRIANGLEFAN = 6,
+    WINED3DPT_LINELIST_ADJ = 10,
+    WINED3DPT_LINESTRIP_ADJ = 11,
+    WINED3DPT_TRIANGLELIST_ADJ = 12,
+    WINED3DPT_TRIANGLESTRIP_ADJ = 13,
+    WINED3DPT_FORCE_DWORD = 0x7fffffff
+} WINED3DPRIMITIVETYPE;
+typedef enum _WINED3DDEVTYPE {
+    WINED3DDEVTYPE_HAL = 1,
+    WINED3DDEVTYPE_REF = 2,
+    WINED3DDEVTYPE_SW = 3,
+    WINED3DDEVTYPE_NULLREF = 4,
+    WINED3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} WINED3DDEVTYPE;
+typedef enum _WINED3DDEGREETYPE {
+    WINED3DDEGREE_LINEAR = 1,
+    WINED3DDEGREE_QUADRATIC = 2,
+    WINED3DDEGREE_CUBIC = 3,
+    WINED3DDEGREE_QUINTIC = 5,
+    WINED3DDEGREE_FORCE_DWORD = 0x7fffffff
+} WINED3DDEGREETYPE;
+typedef enum _WINED3DFORMAT {
+    WINED3DFMT_UNKNOWN = 0,
+    WINED3DFMT_B8G8R8_UNORM = 1,
+    WINED3DFMT_B5G5R5X1_UNORM = 2,
+    WINED3DFMT_B4G4R4A4_UNORM = 3,
+    WINED3DFMT_B2G3R3_UNORM = 4,
+    WINED3DFMT_B2G3R3A8_UNORM = 5,
+    WINED3DFMT_B4G4R4X4_UNORM = 6,
+    WINED3DFMT_R8G8B8X8_UNORM = 7,
+    WINED3DFMT_B10G10R10A2_UNORM = 8,
+    WINED3DFMT_P8_UINT_A8_UNORM = 9,
+    WINED3DFMT_P8_UINT = 10,
+    WINED3DFMT_L8_UNORM = 11,
+    WINED3DFMT_L8A8_UNORM = 12,
+    WINED3DFMT_L4A4_UNORM = 13,
+    WINED3DFMT_R5G5_SNORM_L6_UNORM = 14,
+    WINED3DFMT_R8G8_SNORM_L8X8_UNORM = 15,
+    WINED3DFMT_R10G11B11_SNORM = 16,
+    WINED3DFMT_R10G10B10_SNORM_A2_UNORM = 17,
+    WINED3DFMT_D16_LOCKABLE = 18,
+    WINED3DFMT_D32_UNORM = 19,
+    WINED3DFMT_S1_UINT_D15_UNORM = 20,
+    WINED3DFMT_X8D24_UNORM = 21,
+    WINED3DFMT_S4X4_UINT_D24_UNORM = 22,
+    WINED3DFMT_L16_UNORM = 23,
+    WINED3DFMT_S8_UINT_D24_FLOAT = 24,
+    WINED3DFMT_VERTEXDATA = 25,
+    WINED3DFMT_R8G8_SNORM_Cx = 26,
+    WINED3DFMT_R32G32B32A32_TYPELESS = 27,
+    WINED3DFMT_R32G32B32A32_FLOAT = 28,
+    WINED3DFMT_R32G32B32A32_UINT = 29,
+    WINED3DFMT_R32G32B32A32_SINT = 30,
+    WINED3DFMT_R32G32B32_TYPELESS = 31,
+    WINED3DFMT_R32G32B32_FLOAT = 32,
+    WINED3DFMT_R32G32B32_UINT = 33,
+    WINED3DFMT_R32G32B32_SINT = 34,
+    WINED3DFMT_R16G16B16A16_TYPELESS = 35,
+    WINED3DFMT_R16G16B16A16_FLOAT = 36,
+    WINED3DFMT_R16G16B16A16_UNORM = 37,
+    WINED3DFMT_R16G16B16A16_UINT = 38,
+    WINED3DFMT_R16G16B16A16_SNORM = 39,
+    WINED3DFMT_R16G16B16A16_SINT = 40,
+    WINED3DFMT_R32G32_TYPELESS = 41,
+    WINED3DFMT_R32G32_FLOAT = 42,
+    WINED3DFMT_R32G32_UINT = 43,
+    WINED3DFMT_R32G32_SINT = 44,
+    WINED3DFMT_R32G8X24_TYPELESS = 45,
+    WINED3DFMT_D32_FLOAT_S8X24_UINT = 46,
+    WINED3DFMT_R32_FLOAT_X8X24_TYPELESS = 47,
+    WINED3DFMT_X32_TYPELESS_G8X24_UINT = 48,
+    WINED3DFMT_R10G10B10A2_TYPELESS = 49,
+    WINED3DFMT_R10G10B10A2_UNORM = 50,
+    WINED3DFMT_R10G10B10A2_UINT = 51,
+    WINED3DFMT_R10G10B10A2_SNORM = 52,
+    WINED3DFMT_R11G11B10_FLOAT = 53,
+    WINED3DFMT_R8G8B8A8_TYPELESS = 54,
+    WINED3DFMT_R8G8B8A8_UNORM = 55,
+    WINED3DFMT_R8G8B8A8_UNORM_SRGB = 56,
+    WINED3DFMT_R8G8B8A8_UINT = 57,
+    WINED3DFMT_R8G8B8A8_SNORM = 58,
+    WINED3DFMT_R8G8B8A8_SINT = 59,
+    WINED3DFMT_R16G16_TYPELESS = 60,
+    WINED3DFMT_R16G16_FLOAT = 61,
+    WINED3DFMT_R16G16_UNORM = 62,
+    WINED3DFMT_R16G16_UINT = 63,
+    WINED3DFMT_R16G16_SNORM = 64,
+    WINED3DFMT_R16G16_SINT = 65,
+    WINED3DFMT_R32_TYPELESS = 66,
+    WINED3DFMT_D32_FLOAT = 67,
+    WINED3DFMT_R32_FLOAT = 68,
+    WINED3DFMT_R32_UINT = 69,
+    WINED3DFMT_R32_SINT = 70,
+    WINED3DFMT_R24G8_TYPELESS = 71,
+    WINED3DFMT_D24_UNORM_S8_UINT = 72,
+    WINED3DFMT_R24_UNORM_X8_TYPELESS = 73,
+    WINED3DFMT_X24_TYPELESS_G8_UINT = 74,
+    WINED3DFMT_R8G8_TYPELESS = 75,
+    WINED3DFMT_R8G8_UNORM = 76,
+    WINED3DFMT_R8G8_UINT = 77,
+    WINED3DFMT_R8G8_SNORM = 78,
+    WINED3DFMT_R8G8_SINT = 79,
+    WINED3DFMT_R16_TYPELESS = 80,
+    WINED3DFMT_R16_FLOAT = 81,
+    WINED3DFMT_D16_UNORM = 82,
+    WINED3DFMT_R16_UNORM = 83,
+    WINED3DFMT_R16_UINT = 84,
+    WINED3DFMT_R16_SNORM = 85,
+    WINED3DFMT_R16_SINT = 86,
+    WINED3DFMT_R8_TYPELESS = 87,
+    WINED3DFMT_R8_UNORM = 88,
+    WINED3DFMT_R8_UINT = 89,
+    WINED3DFMT_R8_SNORM = 90,
+    WINED3DFMT_R8_SINT = 91,
+    WINED3DFMT_A8_UNORM = 92,
+    WINED3DFMT_R1_UNORM = 93,
+    WINED3DFMT_R9G9B9E5_SHAREDEXP = 94,
+    WINED3DFMT_R8G8_B8G8_UNORM = 95,
+    WINED3DFMT_G8R8_G8B8_UNORM = 96,
+    WINED3DFMT_BC1_TYPELESS = 97,
+    WINED3DFMT_BC1_UNORM = 98,
+    WINED3DFMT_BC1_UNORM_SRGB = 99,
+    WINED3DFMT_BC2_TYPELESS = 100,
+    WINED3DFMT_BC2_UNORM = 101,
+    WINED3DFMT_BC2_UNORM_SRGB = 102,
+    WINED3DFMT_BC3_TYPELESS = 103,
+    WINED3DFMT_BC3_UNORM = 104,
+    WINED3DFMT_BC3_UNORM_SRGB = 105,
+    WINED3DFMT_BC4_TYPELESS = 106,
+    WINED3DFMT_BC4_UNORM = 107,
+    WINED3DFMT_BC4_SNORM = 108,
+    WINED3DFMT_BC5_TYPELESS = 109,
+    WINED3DFMT_BC5_UNORM = 110,
+    WINED3DFMT_BC5_SNORM = 111,
+    WINED3DFMT_B5G6R5_UNORM = 112,
+    WINED3DFMT_B5G5R5A1_UNORM = 113,
+    WINED3DFMT_B8G8R8A8_UNORM = 114,
+    WINED3DFMT_B8G8R8X8_UNORM = 115,
+    WINED3DFMT_UYVY = (((ULONG)(unsigned char)'U' | ((ULONG)(unsigned char)'Y' << 8)) | ((ULONG)(unsigned char)'V' << 16)) | ((ULONG)(unsigned char)'Y' << 24),
+    WINED3DFMT_YUY2 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'U' << 8)) | ((ULONG)(unsigned char)'Y' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_YV12 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'1' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_DXT1 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+    WINED3DFMT_DXT2 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_DXT3 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'3' << 24),
+    WINED3DFMT_DXT4 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'4' << 24),
+    WINED3DFMT_DXT5 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'5' << 24),
+    WINED3DFMT_MULTI2_ARGB8 = (((ULONG)(unsigned char)'M' | ((ULONG)(unsigned char)'E' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+    WINED3DFMT_G8R8_G8B8 = (((ULONG)(unsigned char)'G' | ((ULONG)(unsigned char)'R' << 8)) | ((ULONG)(unsigned char)'G' << 16)) | ((ULONG)(unsigned char)'B' << 24),
+    WINED3DFMT_R8G8_B8G8 = (((ULONG)(unsigned char)'R' | ((ULONG)(unsigned char)'G' << 8)) | ((ULONG)(unsigned char)'B' << 16)) | ((ULONG)(unsigned char)'G' << 24),
+    WINED3DFMT_ATI2N = (((ULONG)(unsigned char)'A' | ((ULONG)(unsigned char)'T' << 8)) | ((ULONG)(unsigned char)'I' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_INST = (((ULONG)(unsigned char)'I' | ((ULONG)(unsigned char)'N' << 8)) | ((ULONG)(unsigned char)'S' << 16)) | ((ULONG)(unsigned char)'T' << 24),
+    WINED3DFMT_NVHU = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'U' << 24),
+    WINED3DFMT_NVHS = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'S' << 24),
+    WINED3DFMT_FORCE_DWORD = 0xffffffff
+} WINED3DFORMAT;
+typedef enum _WINED3DRENDERSTATETYPE {
+    WINED3DRS_ANTIALIAS = 2,
+    WINED3DRS_TEXTUREPERSPECTIVE = 4,
+    WINED3DRS_WRAPU = 5,
+    WINED3DRS_WRAPV = 6,
+    WINED3DRS_ZENABLE = 7,
+    WINED3DRS_FILLMODE = 8,
+    WINED3DRS_SHADEMODE = 9,
+    WINED3DRS_LINEPATTERN = 10,
+    WINED3DRS_MONOENABLE = 11,
+    WINED3DRS_ROP2 = 12,
+    WINED3DRS_PLANEMASK = 13,
+    WINED3DRS_ZWRITEENABLE = 14,
+    WINED3DRS_ALPHATESTENABLE = 15,
+    WINED3DRS_LASTPIXEL = 16,
+    WINED3DRS_SRCBLEND = 19,
+    WINED3DRS_DESTBLEND = 20,
+    WINED3DRS_CULLMODE = 22,
+    WINED3DRS_ZFUNC = 23,
+    WINED3DRS_ALPHAREF = 24,
+    WINED3DRS_ALPHAFUNC = 25,
+    WINED3DRS_DITHERENABLE = 26,
+    WINED3DRS_ALPHABLENDENABLE = 27,
+    WINED3DRS_FOGENABLE = 28,
+    WINED3DRS_SPECULARENABLE = 29,
+    WINED3DRS_ZVISIBLE = 30,
+    WINED3DRS_SUBPIXEL = 31,
+    WINED3DRS_SUBPIXELX = 32,
+    WINED3DRS_STIPPLEDALPHA = 33,
+    WINED3DRS_FOGCOLOR = 34,
+    WINED3DRS_FOGTABLEMODE = 35,
+    WINED3DRS_FOGSTART = 36,
+    WINED3DRS_FOGEND = 37,
+    WINED3DRS_FOGDENSITY = 38,
+    WINED3DRS_STIPPLEENABLE = 39,
+    WINED3DRS_EDGEANTIALIAS = 40,
+    WINED3DRS_COLORKEYENABLE = 41,
+    WINED3DRS_MIPMAPLODBIAS = 46,
+    WINED3DRS_ZBIAS = 47,
+    WINED3DRS_RANGEFOGENABLE = 48,
+    WINED3DRS_ANISOTROPY = 49,
+    WINED3DRS_FLUSHBATCH = 50,
+    WINED3DRS_TRANSLUCENTSORTINDEPENDENT = 51,
+    WINED3DRS_STENCILENABLE = 52,
+    WINED3DRS_STENCILFAIL = 53,
+    WINED3DRS_STENCILZFAIL = 54,
+    WINED3DRS_STENCILPASS = 55,
+    WINED3DRS_STENCILFUNC = 56,
+    WINED3DRS_STENCILREF = 57,
+    WINED3DRS_STENCILMASK = 58,
+    WINED3DRS_STENCILWRITEMASK = 59,
+    WINED3DRS_TEXTUREFACTOR = 60,
+    WINED3DRS_WRAP0 = 128,
+    WINED3DRS_WRAP1 = 129,
+    WINED3DRS_WRAP2 = 130,
+    WINED3DRS_WRAP3 = 131,
+    WINED3DRS_WRAP4 = 132,
+    WINED3DRS_WRAP5 = 133,
+    WINED3DRS_WRAP6 = 134,
+    WINED3DRS_WRAP7 = 135,
+    WINED3DRS_CLIPPING = 136,
+    WINED3DRS_LIGHTING = 137,
+    WINED3DRS_EXTENTS = 138,
+    WINED3DRS_AMBIENT = 139,
+    WINED3DRS_FOGVERTEXMODE = 140,
+    WINED3DRS_COLORVERTEX = 141,
+    WINED3DRS_LOCALVIEWER = 142,
+    WINED3DRS_NORMALIZENORMALS = 143,
+    WINED3DRS_COLORKEYBLENDENABLE = 144,
+    WINED3DRS_DIFFUSEMATERIALSOURCE = 145,
+    WINED3DRS_SPECULARMATERIALSOURCE = 146,
+    WINED3DRS_AMBIENTMATERIALSOURCE = 147,
+    WINED3DRS_EMISSIVEMATERIALSOURCE = 148,
+    WINED3DRS_VERTEXBLEND = 151,
+    WINED3DRS_CLIPPLANEENABLE = 152,
+    WINED3DRS_SOFTWAREVERTEXPROCESSING = 153,
+    WINED3DRS_POINTSIZE = 154,
+    WINED3DRS_POINTSIZE_MIN = 155,
+    WINED3DRS_POINTSPRITEENABLE = 156,
+    WINED3DRS_POINTSCALEENABLE = 157,
+    WINED3DRS_POINTSCALE_A = 158,
+    WINED3DRS_POINTSCALE_B = 159,
+    WINED3DRS_POINTSCALE_C = 160,
+    WINED3DRS_MULTISAMPLEANTIALIAS = 161,
+    WINED3DRS_MULTISAMPLEMASK = 162,
+    WINED3DRS_PATCHEDGESTYLE = 163,
+    WINED3DRS_PATCHSEGMENTS = 164,
+    WINED3DRS_DEBUGMONITORTOKEN = 165,
+    WINED3DRS_POINTSIZE_MAX = 166,
+    WINED3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+    WINED3DRS_COLORWRITEENABLE = 168,
+    WINED3DRS_TWEENFACTOR = 170,
+    WINED3DRS_BLENDOP = 171,
+    WINED3DRS_POSITIONDEGREE = 172,
+    WINED3DRS_NORMALDEGREE = 173,
+    WINED3DRS_SCISSORTESTENABLE = 174,
+    WINED3DRS_SLOPESCALEDEPTHBIAS = 175,
+    WINED3DRS_ANTIALIASEDLINEENABLE = 176,
+    WINED3DRS_MINTESSELLATIONLEVEL = 178,
+    WINED3DRS_MAXTESSELLATIONLEVEL = 179,
+    WINED3DRS_ADAPTIVETESS_X = 180,
+    WINED3DRS_ADAPTIVETESS_Y = 181,
+    WINED3DRS_ADAPTIVETESS_Z = 182,
+    WINED3DRS_ADAPTIVETESS_W = 183,
+    WINED3DRS_ENABLEADAPTIVETESSELLATION = 184,
+    WINED3DRS_TWOSIDEDSTENCILMODE = 185,
+    WINED3DRS_CCW_STENCILFAIL = 186,
+    WINED3DRS_CCW_STENCILZFAIL = 187,
+    WINED3DRS_CCW_STENCILPASS = 188,
+    WINED3DRS_CCW_STENCILFUNC = 189,
+    WINED3DRS_COLORWRITEENABLE1 = 190,
+    WINED3DRS_COLORWRITEENABLE2 = 191,
+    WINED3DRS_COLORWRITEENABLE3 = 192,
+    WINED3DRS_BLENDFACTOR = 193,
+    WINED3DRS_SRGBWRITEENABLE = 194,
+    WINED3DRS_DEPTHBIAS = 195,
+    WINED3DRS_WRAP8 = 198,
+    WINED3DRS_WRAP9 = 199,
+    WINED3DRS_WRAP10 = 200,
+    WINED3DRS_WRAP11 = 201,
+    WINED3DRS_WRAP12 = 202,
+    WINED3DRS_WRAP13 = 203,
+    WINED3DRS_WRAP14 = 204,
+    WINED3DRS_WRAP15 = 205,
+    WINED3DRS_SEPARATEALPHABLENDENABLE = 206,
+    WINED3DRS_SRCBLENDALPHA = 207,
+    WINED3DRS_DESTBLENDALPHA = 208,
+    WINED3DRS_BLENDOPALPHA = 209,
+    WINED3DRS_FORCE_DWORD = 0x7fffffff
+} WINED3DRENDERSTATETYPE;
+#define WINEHIGHEST_RENDER_STATE (WINED3DRS_BLENDOPALPHA)
+
+typedef enum _WINED3DBLEND {
+    WINED3DBLEND_ZERO = 1,
+    WINED3DBLEND_ONE = 2,
+    WINED3DBLEND_SRCCOLOR = 3,
+    WINED3DBLEND_INVSRCCOLOR = 4,
+    WINED3DBLEND_SRCALPHA = 5,
+    WINED3DBLEND_INVSRCALPHA = 6,
+    WINED3DBLEND_DESTALPHA = 7,
+    WINED3DBLEND_INVDESTALPHA = 8,
+    WINED3DBLEND_DESTCOLOR = 9,
+    WINED3DBLEND_INVDESTCOLOR = 10,
+    WINED3DBLEND_SRCALPHASAT = 11,
+    WINED3DBLEND_BOTHSRCALPHA = 12,
+    WINED3DBLEND_BOTHINVSRCALPHA = 13,
+    WINED3DBLEND_BLENDFACTOR = 14,
+    WINED3DBLEND_INVBLENDFACTOR = 15,
+    WINED3DBLEND_FORCE_DWORD = 0x7fffffff
+} WINED3DBLEND;
+typedef enum _WINED3DBLENDOP {
+    WINED3DBLENDOP_ADD = 1,
+    WINED3DBLENDOP_SUBTRACT = 2,
+    WINED3DBLENDOP_REVSUBTRACT = 3,
+    WINED3DBLENDOP_MIN = 4,
+    WINED3DBLENDOP_MAX = 5,
+    WINED3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} WINED3DBLENDOP;
+typedef enum _WINED3DVERTEXBLENDFLAGS {
+    WINED3DVBF_DISABLE = 0,
+    WINED3DVBF_1WEIGHTS = 1,
+    WINED3DVBF_2WEIGHTS = 2,
+    WINED3DVBF_3WEIGHTS = 3,
+    WINED3DVBF_TWEENING = 255,
+    WINED3DVBF_0WEIGHTS = 256
+} WINED3DVERTEXBLENDFLAGS;
+typedef enum _WINED3DCMPFUNC {
+    WINED3DCMP_NEVER = 1,
+    WINED3DCMP_LESS = 2,
+    WINED3DCMP_EQUAL = 3,
+    WINED3DCMP_LESSEQUAL = 4,
+    WINED3DCMP_GREATER = 5,
+    WINED3DCMP_NOTEQUAL = 6,
+    WINED3DCMP_GREATEREQUAL = 7,
+    WINED3DCMP_ALWAYS = 8,
+    WINED3DCMP_FORCE_DWORD = 0x7fffffff
+} WINED3DCMPFUNC;
+typedef enum _WINED3DZBUFFERTYPE {
+    WINED3DZB_FALSE = 0,
+    WINED3DZB_TRUE = 1,
+    WINED3DZB_USEW = 2,
+    WINED3DZB_FORCE_DWORD = 0x7fffffff
+} WINED3DZBUFFERTYPE;
+typedef enum _WINED3DFOGMODE {
+    WINED3DFOG_NONE = 0,
+    WINED3DFOG_EXP = 1,
+    WINED3DFOG_EXP2 = 2,
+    WINED3DFOG_LINEAR = 3,
+    WINED3DFOG_FORCE_DWORD = 0x7fffffff
+} WINED3DFOGMODE;
+typedef enum _WINED3DSHADEMODE {
+    WINED3DSHADE_FLAT = 1,
+    WINED3DSHADE_GOURAUD = 2,
+    WINED3DSHADE_PHONG = 3,
+    WINED3DSHADE_FORCE_DWORD = 0x7fffffff
+} WINED3DSHADEMODE;
+typedef enum _WINED3DFILLMODE {
+    WINED3DFILL_POINT = 1,
+    WINED3DFILL_WIREFRAME = 2,
+    WINED3DFILL_SOLID = 3,
+    WINED3DFILL_FORCE_DWORD = 0x7fffffff
+} WINED3DFILLMODE;
+typedef enum _WINED3DCULL {
+    WINED3DCULL_NONE = 1,
+    WINED3DCULL_CW = 2,
+    WINED3DCULL_CCW = 3,
+    WINED3DCULL_FORCE_DWORD = 0x7fffffff
+} WINED3DCULL;
+typedef enum _WINED3DSTENCILOP {
+    WINED3DSTENCILOP_KEEP = 1,
+    WINED3DSTENCILOP_ZERO = 2,
+    WINED3DSTENCILOP_REPLACE = 3,
+    WINED3DSTENCILOP_INCRSAT = 4,
+    WINED3DSTENCILOP_DECRSAT = 5,
+    WINED3DSTENCILOP_INVERT = 6,
+    WINED3DSTENCILOP_INCR = 7,
+    WINED3DSTENCILOP_DECR = 8,
+    WINED3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} WINED3DSTENCILOP;
+typedef enum _WINED3DMATERIALCOLORSOURCE {
+    WINED3DMCS_MATERIAL = 0,
+    WINED3DMCS_COLOR1 = 1,
+    WINED3DMCS_COLOR2 = 2,
+    WINED3DMCS_FORCE_DWORD = 0x7fffffff
+} WINED3DMATERIALCOLORSOURCE;
+typedef enum _WINED3DPATCHEDGESTYLE {
+    WINED3DPATCHEDGE_DISCRETE = 0,
+    WINED3DPATCHEDGE_CONTINUOUS = 1,
+    WINED3DPATCHEDGE_FORCE_DWORD = 0x7fffffff
+} WINED3DPATCHEDGESTYLE;
+typedef enum _WINED3DBACKBUFFER_TYPE {
+    WINED3DBACKBUFFER_TYPE_MONO = 0,
+    WINED3DBACKBUFFER_TYPE_LEFT = 1,
+    WINED3DBACKBUFFER_TYPE_RIGHT = 2,
+    WINED3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DBACKBUFFER_TYPE;
+typedef enum _WINED3DSWAPEFFECT {
+    WINED3DSWAPEFFECT_DISCARD = 1,
+    WINED3DSWAPEFFECT_FLIP = 2,
+    WINED3DSWAPEFFECT_COPY = 3,
+    WINED3DSWAPEFFECT_COPY_VSYNC = 4,
+    WINED3DSWAPEFFECT_FORCE_DWORD = 0xffffffff
+} WINED3DSWAPEFFECT;
+typedef enum _WINED3DSAMPLERSTATETYPE {
+    WINED3DSAMP_ADDRESSU = 1,
+    WINED3DSAMP_ADDRESSV = 2,
+    WINED3DSAMP_ADDRESSW = 3,
+    WINED3DSAMP_BORDERCOLOR = 4,
+    WINED3DSAMP_MAGFILTER = 5,
+    WINED3DSAMP_MINFILTER = 6,
+    WINED3DSAMP_MIPFILTER = 7,
+    WINED3DSAMP_MIPMAPLODBIAS = 8,
+    WINED3DSAMP_MAXMIPLEVEL = 9,
+    WINED3DSAMP_MAXANISOTROPY = 10,
+    WINED3DSAMP_SRGBTEXTURE = 11,
+    WINED3DSAMP_ELEMENTINDEX = 12,
+    WINED3DSAMP_DMAPOFFSET = 13,
+    WINED3DSAMP_FORCE_DWORD = 0x7fffffff
+} WINED3DSAMPLERSTATETYPE;
+#define WINED3D_HIGHEST_SAMPLER_STATE (WINED3DSAMP_DMAPOFFSET)
+
+typedef enum _WINED3DMULTISAMPLE_TYPE {
+    WINED3DMULTISAMPLE_NONE = 0,
+    WINED3DMULTISAMPLE_NONMASKABLE = 1,
+    WINED3DMULTISAMPLE_2_SAMPLES = 2,
+    WINED3DMULTISAMPLE_3_SAMPLES = 3,
+    WINED3DMULTISAMPLE_4_SAMPLES = 4,
+    WINED3DMULTISAMPLE_5_SAMPLES = 5,
+    WINED3DMULTISAMPLE_6_SAMPLES = 6,
+    WINED3DMULTISAMPLE_7_SAMPLES = 7,
+    WINED3DMULTISAMPLE_8_SAMPLES = 8,
+    WINED3DMULTISAMPLE_9_SAMPLES = 9,
+    WINED3DMULTISAMPLE_10_SAMPLES = 10,
+    WINED3DMULTISAMPLE_11_SAMPLES = 11,
+    WINED3DMULTISAMPLE_12_SAMPLES = 12,
+    WINED3DMULTISAMPLE_13_SAMPLES = 13,
+    WINED3DMULTISAMPLE_14_SAMPLES = 14,
+    WINED3DMULTISAMPLE_15_SAMPLES = 15,
+    WINED3DMULTISAMPLE_16_SAMPLES = 16,
+    WINED3DMULTISAMPLE_FORCE_DWORD = 0xffffffff
+} WINED3DMULTISAMPLE_TYPE;
+typedef enum _WINED3DTEXTURESTAGESTATETYPE {
+    WINED3DTSS_COLOROP = 0,
+    WINED3DTSS_COLORARG1 = 1,
+    WINED3DTSS_COLORARG2 = 2,
+    WINED3DTSS_ALPHAOP = 3,
+    WINED3DTSS_ALPHAARG1 = 4,
+    WINED3DTSS_ALPHAARG2 = 5,
+    WINED3DTSS_BUMPENVMAT00 = 6,
+    WINED3DTSS_BUMPENVMAT01 = 7,
+    WINED3DTSS_BUMPENVMAT10 = 8,
+    WINED3DTSS_BUMPENVMAT11 = 9,
+    WINED3DTSS_TEXCOORDINDEX = 10,
+    WINED3DTSS_BUMPENVLSCALE = 11,
+    WINED3DTSS_BUMPENVLOFFSET = 12,
+    WINED3DTSS_TEXTURETRANSFORMFLAGS = 13,
+    WINED3DTSS_COLORARG0 = 14,
+    WINED3DTSS_ALPHAARG0 = 15,
+    WINED3DTSS_RESULTARG = 16,
+    WINED3DTSS_CONSTANT = 17,
+    WINED3DTSS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURESTAGESTATETYPE;
+#define WINED3D_HIGHEST_TEXTURE_STATE (WINED3DTSS_CONSTANT)
+
+typedef enum _WINED3DTEXTURETRANSFORMFLAGS {
+    WINED3DTTFF_DISABLE = 0,
+    WINED3DTTFF_COUNT1 = 1,
+    WINED3DTTFF_COUNT2 = 2,
+    WINED3DTTFF_COUNT3 = 3,
+    WINED3DTTFF_COUNT4 = 4,
+    WINED3DTTFF_PROJECTED = 256,
+    WINED3DTTFF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURETRANSFORMFLAGS;
+typedef enum _WINED3DTEXTUREOP {
+    WINED3DTOP_DISABLE = 1,
+    WINED3DTOP_SELECTARG1 = 2,
+    WINED3DTOP_SELECTARG2 = 3,
+    WINED3DTOP_MODULATE = 4,
+    WINED3DTOP_MODULATE2X = 5,
+    WINED3DTOP_MODULATE4X = 6,
+    WINED3DTOP_ADD = 7,
+    WINED3DTOP_ADDSIGNED = 8,
+    WINED3DTOP_ADDSIGNED2X = 9,
+    WINED3DTOP_SUBTRACT = 10,
+    WINED3DTOP_ADDSMOOTH = 11,
+    WINED3DTOP_BLENDDIFFUSEALPHA = 12,
+    WINED3DTOP_BLENDTEXTUREALPHA = 13,
+    WINED3DTOP_BLENDFACTORALPHA = 14,
+    WINED3DTOP_BLENDTEXTUREALPHAPM = 15,
+    WINED3DTOP_BLENDCURRENTALPHA = 16,
+    WINED3DTOP_PREMODULATE = 17,
+    WINED3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+    WINED3DTOP_MODULATECOLOR_ADDALPHA = 19,
+    WINED3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+    WINED3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+    WINED3DTOP_BUMPENVMAP = 22,
+    WINED3DTOP_BUMPENVMAPLUMINANCE = 23,
+    WINED3DTOP_DOTPRODUCT3 = 24,
+    WINED3DTOP_MULTIPLYADD = 25,
+    WINED3DTOP_LERP = 26,
+    WINED3DTOP_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREOP;
+typedef enum _WINED3DTEXTUREADDRESS {
+    WINED3DTADDRESS_WRAP = 1,
+    WINED3DTADDRESS_MIRROR = 2,
+    WINED3DTADDRESS_CLAMP = 3,
+    WINED3DTADDRESS_BORDER = 4,
+    WINED3DTADDRESS_MIRRORONCE = 5,
+    WINED3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREADDRESS;
+typedef enum _WINED3DTRANSFORMSTATETYPE {
+    WINED3DTS_VIEW = 2,
+    WINED3DTS_PROJECTION = 3,
+    WINED3DTS_TEXTURE0 = 16,
+    WINED3DTS_TEXTURE1 = 17,
+    WINED3DTS_TEXTURE2 = 18,
+    WINED3DTS_TEXTURE3 = 19,
+    WINED3DTS_TEXTURE4 = 20,
+    WINED3DTS_TEXTURE5 = 21,
+    WINED3DTS_TEXTURE6 = 22,
+    WINED3DTS_TEXTURE7 = 23,
+    WINED3DTS_WORLD = 256,
+    WINED3DTS_WORLD1 = 257,
+    WINED3DTS_WORLD2 = 258,
+    WINED3DTS_WORLD3 = 259,
+    WINED3DTS_FORCE_DWORD = 0x7fffffff
+} WINED3DTRANSFORMSTATETYPE;
+#define WINED3DTS_WORLDMATRIX(index) (WINED3DTRANSFORMSTATETYPE)(index + 256)
+typedef enum _WINED3DBASISTYPE {
+    WINED3DBASIS_BEZIER = 0,
+    WINED3DBASIS_BSPLINE = 1,
+    WINED3DBASIS_INTERPOLATE = 2,
+    WINED3DBASIS_FORCE_DWORD = 0x7fffffff
+} WINED3DBASISTYPE;
+typedef enum _WINED3DCUBEMAP_FACES {
+    WINED3DCUBEMAP_FACE_POSITIVE_X = 0,
+    WINED3DCUBEMAP_FACE_NEGATIVE_X = 1,
+    WINED3DCUBEMAP_FACE_POSITIVE_Y = 2,
+    WINED3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+    WINED3DCUBEMAP_FACE_POSITIVE_Z = 4,
+    WINED3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+    WINED3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} WINED3DCUBEMAP_FACES;
+typedef enum _WINED3DTEXTUREFILTERTYPE {
+    WINED3DTEXF_NONE = 0,
+    WINED3DTEXF_POINT = 1,
+    WINED3DTEXF_LINEAR = 2,
+    WINED3DTEXF_ANISOTROPIC = 3,
+    WINED3DTEXF_FLATCUBIC = 4,
+    WINED3DTEXF_GAUSSIANCUBIC = 5,
+    WINED3DTEXF_PYRAMIDALQUAD = 6,
+    WINED3DTEXF_GAUSSIANQUAD = 7,
+    WINED3DTEXF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREFILTERTYPE;
+typedef enum _WINED3DRESOURCETYPE {
+    WINED3DRTYPE_SURFACE = 1,
+    WINED3DRTYPE_VOLUME = 2,
+    WINED3DRTYPE_TEXTURE = 3,
+    WINED3DRTYPE_VOLUMETEXTURE = 4,
+    WINED3DRTYPE_CUBETEXTURE = 5,
+    WINED3DRTYPE_BUFFER = 6,
+    WINED3DRTYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DRESOURCETYPE;
+#define WINED3DRTYPECOUNT (WINED3DRTYPE_BUFFER + 1)
+
+typedef enum _WINED3DPOOL {
+    WINED3DPOOL_DEFAULT = 0,
+    WINED3DPOOL_MANAGED = 1,
+    WINED3DPOOL_SYSTEMMEM = 2,
+    WINED3DPOOL_SCRATCH = 3,
+    WINED3DPOOL_FORCE_DWORD = 0x7fffffff
+} WINED3DPOOL;
+typedef enum _WINED3DQUERYTYPE {
+    WINED3DQUERYTYPE_VCACHE = 4,
+    WINED3DQUERYTYPE_RESOURCEMANAGER = 5,
+    WINED3DQUERYTYPE_VERTEXSTATS = 6,
+    WINED3DQUERYTYPE_EVENT = 8,
+    WINED3DQUERYTYPE_OCCLUSION = 9,
+    WINED3DQUERYTYPE_TIMESTAMP = 10,
+    WINED3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+    WINED3DQUERYTYPE_TIMESTAMPFREQ = 12,
+    WINED3DQUERYTYPE_PIPELINETIMINGS = 13,
+    WINED3DQUERYTYPE_INTERFACETIMINGS = 14,
+    WINED3DQUERYTYPE_VERTEXTIMINGS = 15,
+    WINED3DQUERYTYPE_PIXELTIMINGS = 16,
+    WINED3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+    WINED3DQUERYTYPE_CACHEUTILIZATION = 18
+} WINED3DQUERYTYPE;
+#define WINED3DISSUE_BEGIN (1 << 1)
+
+#define WINED3DISSUE_END (1 << 0)
+
+#define WINED3DGETDATA_FLUSH (1 << 0)
+
+typedef enum _WINED3DSTATEBLOCKTYPE {
+    WINED3DSBT_INIT = 0,
+    WINED3DSBT_ALL = 1,
+    WINED3DSBT_PIXELSTATE = 2,
+    WINED3DSBT_VERTEXSTATE = 3,
+    WINED3DSBT_RECORDED = 4,
+    WINED3DSBT_FORCE_DWORD = 0xffffffff
+} WINED3DSTATEBLOCKTYPE;
+typedef enum _WINED3DDECLMETHOD {
+    WINED3DDECLMETHOD_DEFAULT = 0,
+    WINED3DDECLMETHOD_PARTIALU = 1,
+    WINED3DDECLMETHOD_PARTIALV = 2,
+    WINED3DDECLMETHOD_CROSSUV = 3,
+    WINED3DDECLMETHOD_UV = 4,
+    WINED3DDECLMETHOD_LOOKUP = 5,
+    WINED3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} WINED3DDECLMETHOD;
+typedef enum _WINED3DDECLUSAGE {
+    WINED3DDECLUSAGE_POSITION = 0,
+    WINED3DDECLUSAGE_BLENDWEIGHT = 1,
+    WINED3DDECLUSAGE_BLENDINDICES = 2,
+    WINED3DDECLUSAGE_NORMAL = 3,
+    WINED3DDECLUSAGE_PSIZE = 4,
+    WINED3DDECLUSAGE_TEXCOORD = 5,
+    WINED3DDECLUSAGE_TANGENT = 6,
+    WINED3DDECLUSAGE_BINORMAL = 7,
+    WINED3DDECLUSAGE_TESSFACTOR = 8,
+    WINED3DDECLUSAGE_POSITIONT = 9,
+    WINED3DDECLUSAGE_COLOR = 10,
+    WINED3DDECLUSAGE_FOG = 11,
+    WINED3DDECLUSAGE_DEPTH = 12,
+    WINED3DDECLUSAGE_SAMPLE = 13
+} WINED3DDECLUSAGE;
+typedef enum _WINED3DSURFTYPE {
+    SURFACE_UNKNOWN = 0,
+    SURFACE_OPENGL = 1,
+    SURFACE_GDI = 2
+} WINED3DSURFTYPE;
+enum wined3d_sysval_semantic {
+    WINED3D_SV_DEPTH = 0xffffffff,
+    WINED3D_SV_TARGET0 = 0,
+    WINED3D_SV_TARGET1 = 1,
+    WINED3D_SV_TARGET2 = 2,
+    WINED3D_SV_TARGET3 = 3,
+    WINED3D_SV_TARGET4 = 4,
+    WINED3D_SV_TARGET5 = 5,
+    WINED3D_SV_TARGET6 = 6,
+    WINED3D_SV_TARGET7 = 7
+};
+
+#define WINED3DCOLORWRITEENABLE_RED (1 << 0)
+
+#define WINED3DCOLORWRITEENABLE_GREEN (1 << 1)
+
+#define WINED3DCOLORWRITEENABLE_BLUE (1 << 2)
+
+#define WINED3DCOLORWRITEENABLE_ALPHA (1 << 3)
+
+#define WINED3DADAPTER_DEFAULT (0)
+
+#define WINED3DENUM_NO_WHQL_LEVEL (2)
+
+#define WINED3DPRESENT_BACK_BUFFER_MAX (3)
+
+#define WINED3DTSS_TCI_PASSTHRU (0x0)
+
+#define WINED3DTSS_TCI_CAMERASPACENORMAL (0x10000)
+
+#define WINED3DTSS_TCI_CAMERASPACEPOSITION (0x20000)
+
+#define WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR (0x30000)
+
+#define WINED3DTSS_TCI_SPHEREMAP (0x40000)
+
+#define WINED3DTA_SELECTMASK (0xf)
+
+#define WINED3DTA_DIFFUSE (0x0)
+
+#define WINED3DTA_CURRENT (0x1)
+
+#define WINED3DTA_TEXTURE (0x2)
+
+#define WINED3DTA_TFACTOR (0x3)
+
+#define WINED3DTA_SPECULAR (0x4)
+
+#define WINED3DTA_TEMP (0x5)
+
+#define WINED3DTA_CONSTANT (0x6)
+
+#define WINED3DTA_COMPLEMENT (0x10)
+
+#define WINED3DTA_ALPHAREPLICATE (0x20)
+
+#define WINED3DPRESENTFLAG_LOCKABLE_BACKBUFFER (0x1)
+
+#define WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL (0x2)
+
+#define WINED3DPRESENTFLAG_DEVICECLIP (0x4)
+
+#define WINED3DPRESENTFLAG_VIDEO (0x10)
+
+#define WINED3DPRESENTFLAG_NOAUTOROTATE (0x20)
+
+#define WINED3DPRESENTFLAG_UNPRUNEDMODE (0x40)
+
+#define WINED3DDP_MAXTEXCOORD (8)
+
+#define WINED3DUSAGE_RENDERTARGET (0x1)
+
+#define WINED3DUSAGE_DEPTHSTENCIL (0x2)
+
+#define WINED3DUSAGE_WRITEONLY (0x8)
+
+#define WINED3DUSAGE_SOFTWAREPROCESSING (0x10)
+
+#define WINED3DUSAGE_DONOTCLIP (0x20)
+
+#define WINED3DUSAGE_POINTS (0x40)
+
+#define WINED3DUSAGE_RTPATCHES (0x80)
+
+#define WINED3DUSAGE_NPATCHES (0x100)
+
+#define WINED3DUSAGE_DYNAMIC (0x200)
+
+#define WINED3DUSAGE_AUTOGENMIPMAP (0x400)
+
+#define WINED3DUSAGE_DMAP (0x4000)
+
+#define WINED3DUSAGE_MASK (0x4fff)
+
+#define WINED3DUSAGE_STATICDECL (0x40000000)
+
+#define WINED3DUSAGE_OVERLAY (0x80000000)
+
+#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP (0x8000)
+
+#define WINED3DUSAGE_QUERY_FILTER (0x20000)
+
+#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x80000)
+
+#define WINED3DUSAGE_QUERY_SRGBREAD (0x10000)
+
+#define WINED3DUSAGE_QUERY_SRGBWRITE (0x40000)
+
+#define WINED3DUSAGE_QUERY_VERTEXTEXTURE (0x100000)
+
+#define WINED3DUSAGE_QUERY_WRAPANDMIP (0x200000)
+
+#define WINED3DUSAGE_QUERY_MASK (0x3f8000)
+
+#define WINED3DLOCK_READONLY (0x10)
+
+#define WINED3DLOCK_NOSYSLOCK (0x800)
+
+#define WINED3DLOCK_NOOVERWRITE (0x1000)
+
+#define WINED3DLOCK_DISCARD (0x2000)
+
+#define WINED3DLOCK_DONOTWAIT (0x4000)
+
+#define WINED3DLOCK_NO_DIRTY_UPDATE (0x8000)
+
+#define WINED3DPRESENT_RATE_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_ONE (0x1)
+
+#define WINED3DPRESENT_INTERVAL_TWO (0x2)
+
+#define WINED3DPRESENT_INTERVAL_THREE (0x4)
+
+#define WINED3DPRESENT_INTERVAL_FOUR (0x8)
+
+#define WINED3DPRESENT_INTERVAL_IMMEDIATE (0x80000000)
+
+#define WINED3DMAXUSERCLIPPLANES (32)
+
+#define WINED3DCLIPPLANE0 (1 << 0)
+
+#define WINED3DCLIPPLANE1 (1 << 1)
+
+#define WINED3DCLIPPLANE2 (1 << 2)
+
+#define WINED3DCLIPPLANE3 (1 << 3)
+
+#define WINED3DCLIPPLANE4 (1 << 4)
+
+#define WINED3DCLIPPLANE5 (1 << 5)
+
+#define WINED3DFVF_RESERVED0 (0x1)
+
+#define WINED3DFVF_POSITION_MASK (0x400e)
+
+#define WINED3DFVF_XYZ (0x2)
+
+#define WINED3DFVF_XYZRHW (0x4)
+
+#define WINED3DFVF_XYZB1 (0x6)
+
+#define WINED3DFVF_XYZB2 (0x8)
+
+#define WINED3DFVF_XYZB3 (0xa)
+
+#define WINED3DFVF_XYZB4 (0xc)
+
+#define WINED3DFVF_XYZB5 (0xe)
+
+#define WINED3DFVF_XYZW (0x4002)
+
+#define WINED3DFVF_NORMAL (0x10)
+
+#define WINED3DFVF_PSIZE (0x20)
+
+#define WINED3DFVF_DIFFUSE (0x40)
+
+#define WINED3DFVF_SPECULAR (0x80)
+
+#define WINED3DFVF_TEXCOUNT_MASK (0xf00)
+
+#define WINED3DFVF_TEXCOUNT_SHIFT (8)
+
+#define WINED3DFVF_TEX0 (0x0)
+
+#define WINED3DFVF_TEX1 (0x100)
+
+#define WINED3DFVF_TEX2 (0x200)
+
+#define WINED3DFVF_TEX3 (0x300)
+
+#define WINED3DFVF_TEX4 (0x400)
+
+#define WINED3DFVF_TEX5 (0x500)
+
+#define WINED3DFVF_TEX6 (0x600)
+
+#define WINED3DFVF_TEX7 (0x700)
+
+#define WINED3DFVF_TEX8 (0x800)
+
+#define WINED3DFVF_LASTBETA_UBYTE4 (0x1000)
+
+#define WINED3DFVF_LASTBETA_D3DCOLOR (0x8000)
+
+#define WINED3DFVF_RESERVED2 (0x6000)
+
+#define WINED3DFVF_TEXTUREFORMAT1 (3)
+
+#define WINED3DFVF_TEXTUREFORMAT2 (0)
+
+#define WINED3DFVF_TEXTUREFORMAT3 (1)
+
+#define WINED3DFVF_TEXTUREFORMAT4 (2)
+
+#define WINED3DFVF_TEXCOORDSIZE1(CoordIndex) (WINED3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE2(CoordIndex) (WINED3DFVF_TEXTUREFORMAT2)
+#define WINED3DFVF_TEXCOORDSIZE3(CoordIndex) (WINED3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE4(CoordIndex) (WINED3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define WINED3DCLEAR_TARGET (0x1)
+
+#define WINED3DCLEAR_ZBUFFER (0x2)
+
+#define WINED3DCLEAR_STENCIL (0x4)
+
+#define WINED3DSTREAMSOURCE_INDEXEDDATA (1 << 30)
+
+#define WINED3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define WINED3DSPD_IUNKNOWN (0x1)
+
+#define WINED3DCREATE_FPU_PRESERVE (0x2)
+
+#define WINED3DCREATE_PUREDEVICE (0x10)
+
+#define WINED3DCREATE_SOFTWARE_VERTEXPROCESSING (0x20)
+
+#define WINED3DCREATE_HARDWARE_VERTEXPROCESSING (0x40)
+
+#define WINED3DCREATE_MIXED_VERTEXPROCESSING (0x80)
+
+#define WINED3DCREATE_DISABLE_DRIVER_MANAGEMENT (0x100)
+
+#define WINED3DCREATE_ADAPTERGROUP_DEVICE (0x200)
+
+#define WINED3DDMAPSAMPLER (0x100)
+
+#define WINED3DVERTEXTEXTURESAMPLER0 (WINED3DDMAPSAMPLER + 1)
+
+#define WINED3DVERTEXTEXTURESAMPLER1 (WINED3DDMAPSAMPLER + 2)
+
+#define WINED3DVERTEXTEXTURESAMPLER2 (WINED3DDMAPSAMPLER + 3)
+
+#define WINED3DVERTEXTEXTURESAMPLER3 (WINED3DDMAPSAMPLER + 4)
+
+#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD (0x20)
+
+#define WINED3DCAPS3_LINEAR_TO_SRGB_PRESENTATION (0x80)
+
+#define WINED3DCAPS3_COPY_TO_VIDMEM (0x100)
+
+#define WINED3DCAPS3_COPY_TO_SYSTEMMEM (0x200)
+
+#define WINED3DCAPS3_RESERVED (0x8000001f)
+
+#define WINED3DDEVCAPS2_STREAMOFFSET (0x1)
+
+#define WINED3DDEVCAPS2_DMAPNPATCH (0x2)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSRTPATCH (0x4)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSNPATCH (0x8)
+
+#define WINED3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (0x10)
+
+#define WINED3DDEVCAPS2_PRESAMPLEDDMAPNPATCH (0x20)
+
+#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET (0x40)
+
+#define WINED3DDTCAPS_UBYTE4 (0x1)
+
+#define WINED3DDTCAPS_UBYTE4N (0x2)
+
+#define WINED3DDTCAPS_SHORT2N (0x4)
+
+#define WINED3DDTCAPS_SHORT4N (0x8)
+
+#define WINED3DDTCAPS_USHORT2N (0x10)
+
+#define WINED3DDTCAPS_USHORT4N (0x20)
+
+#define WINED3DDTCAPS_UDEC3 (0x40)
+
+#define WINED3DDTCAPS_DEC3N (0x80)
+
+#define WINED3DDTCAPS_FLOAT16_2 (0x100)
+
+#define WINED3DDTCAPS_FLOAT16_4 (0x200)
+
+#define WINED3DFVFCAPS_TEXCOORDCOUNTMASK (0xffff)
+
+#define WINED3DFVFCAPS_DONOTSTRIPELEMENTS (0x80000)
+
+#define WINED3DFVFCAPS_PSIZE (0x100000)
+
+#define WINED3DLINECAPS_TEXTURE (0x1)
+
+#define WINED3DLINECAPS_ZTEST (0x2)
+
+#define WINED3DLINECAPS_BLEND (0x4)
+
+#define WINED3DLINECAPS_ALPHACMP (0x8)
+
+#define WINED3DLINECAPS_FOG (0x10)
+
+#define WINED3DLINECAPS_ANTIALIAS (0x20)
+
+#define WINED3DMAX30SHADERINSTRUCTIONS (32768)
+
+#define WINED3DMIN30SHADERINSTRUCTIONS (512)
+
+#define WINED3DPBLENDCAPS_ZERO (0x1)
+
+#define WINED3DPBLENDCAPS_ONE (0x2)
+
+#define WINED3DPBLENDCAPS_SRCCOLOR (0x4)
+
+#define WINED3DPBLENDCAPS_INVSRCCOLOR (0x8)
+
+#define WINED3DPBLENDCAPS_SRCALPHA (0x10)
+
+#define WINED3DPBLENDCAPS_INVSRCALPHA (0x20)
+
+#define WINED3DPBLENDCAPS_DESTALPHA (0x40)
+
+#define WINED3DPBLENDCAPS_INVDESTALPHA (0x80)
+
+#define WINED3DPBLENDCAPS_DESTCOLOR (0x100)
+
+#define WINED3DPBLENDCAPS_INVDESTCOLOR (0x200)
+
+#define WINED3DPBLENDCAPS_SRCALPHASAT (0x400)
+
+#define WINED3DPBLENDCAPS_BOTHSRCALPHA (0x800)
+
+#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA (0x1000)
+
+#define WINED3DPBLENDCAPS_BLENDFACTOR (0x2000)
+
+#define WINED3DPCMPCAPS_NEVER (0x1)
+
+#define WINED3DPCMPCAPS_LESS (0x2)
+
+#define WINED3DPCMPCAPS_EQUAL (0x4)
+
+#define WINED3DPCMPCAPS_LESSEQUAL (0x8)
+
+#define WINED3DPCMPCAPS_GREATER (0x10)
+
+#define WINED3DPCMPCAPS_NOTEQUAL (0x20)
+
+#define WINED3DPCMPCAPS_GREATEREQUAL (0x40)
+
+#define WINED3DPCMPCAPS_ALWAYS (0x80)
+
+#define WINED3DPMISCCAPS_MASKZ (0x2)
+
+#define WINED3DPMISCCAPS_LINEPATTERNREP (0x4)
+
+#define WINED3DPMISCCAPS_CULLNONE (0x10)
+
+#define WINED3DPMISCCAPS_CULLCW (0x20)
+
+#define WINED3DPMISCCAPS_CULLCCW (0x40)
+
+#define WINED3DPMISCCAPS_COLORWRITEENABLE (0x80)
+
+#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS (0x100)
+
+#define WINED3DPMISCCAPS_CLIPTLVERTS (0x200)
+
+#define WINED3DPMISCCAPS_TSSARGTEMP (0x400)
+
+#define WINED3DPMISCCAPS_BLENDOP (0x800)
+
+#define WINED3DPMISCCAPS_NULLREFERENCE (0x1000)
+
+#define WINED3DPMISCCAPS_INDEPENDENTWRITEMASKS (0x4000)
+
+#define WINED3DPMISCCAPS_PERSTAGECONSTANT (0x8000)
+
+#define WINED3DPMISCCAPS_FOGANDSPECULARALPHA (0x10000)
+
+#define WINED3DPMISCCAPS_SEPARATEALPHABLEND (0x20000)
+
+#define WINED3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS (0x40000)
+
+#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING (0x80000)
+
+#define WINED3DPMISCCAPS_FOGVERTEXCLAMPED (0x100000)
+
+#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMTEMPS (32)
+
+#define WINED3DPS20_MIN_NUMTEMPS (12)
+
+#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS (512)
+
+#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS (96)
+
+#define WINED3DPS20CAPS_ARBITRARYSWIZZLE (0x1)
+
+#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS (0x2)
+
+#define WINED3DPS20CAPS_PREDICATION (0x4)
+
+#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT (0x8)
+
+#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (0x10)
+
+#define WINED3DPTADDRESSCAPS_WRAP (0x1)
+
+#define WINED3DPTADDRESSCAPS_MIRROR (0x2)
+
+#define WINED3DPTADDRESSCAPS_CLAMP (0x4)
+
+#define WINED3DPTADDRESSCAPS_BORDER (0x8)
+
+#define WINED3DPTADDRESSCAPS_INDEPENDENTUV (0x10)
+
+#define WINED3DPTADDRESSCAPS_MIRRORONCE (0x20)
+
+#define WINED3DSTENCILCAPS_KEEP (0x1)
+
+#define WINED3DSTENCILCAPS_ZERO (0x2)
+
+#define WINED3DSTENCILCAPS_REPLACE (0x4)
+
+#define WINED3DSTENCILCAPS_INCRSAT (0x8)
+
+#define WINED3DSTENCILCAPS_DECRSAT (0x10)
+
+#define WINED3DSTENCILCAPS_INVERT (0x20)
+
+#define WINED3DSTENCILCAPS_INCR (0x40)
+
+#define WINED3DSTENCILCAPS_DECR (0x80)
+
+#define WINED3DSTENCILCAPS_TWOSIDED (0x100)
+
+#define WINED3DTEXOPCAPS_DISABLE (0x1)
+
+#define WINED3DTEXOPCAPS_SELECTARG1 (0x2)
+
+#define WINED3DTEXOPCAPS_SELECTARG2 (0x4)
+
+#define WINED3DTEXOPCAPS_MODULATE (0x8)
+
+#define WINED3DTEXOPCAPS_MODULATE2X (0x10)
+
+#define WINED3DTEXOPCAPS_MODULATE4X (0x20)
+
+#define WINED3DTEXOPCAPS_ADD (0x40)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED (0x80)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED2X (0x100)
+
+#define WINED3DTEXOPCAPS_SUBTRACT (0x200)
+
+#define WINED3DTEXOPCAPS_ADDSMOOTH (0x400)
+
+#define WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA (0x800)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHA (0x1000)
+
+#define WINED3DTEXOPCAPS_BLENDFACTORALPHA (0x2000)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM (0x4000)
+
+#define WINED3DTEXOPCAPS_BLENDCURRENTALPHA (0x8000)
+
+#define WINED3DTEXOPCAPS_PREMODULATE (0x10000)
+
+#define WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR (0x20000)
+
+#define WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA (0x40000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR (0x80000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA (0x100000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAP (0x200000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE (0x400000)
+
+#define WINED3DTEXOPCAPS_DOTPRODUCT3 (0x800000)
+
+#define WINED3DTEXOPCAPS_MULTIPLYADD (0x1000000)
+
+#define WINED3DTEXOPCAPS_LERP (0x2000000)
+
+#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DVS20_MAX_NUMTEMPS (32)
+
+#define WINED3DVS20_MIN_NUMTEMPS (12)
+
+#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DVS20_MIN_STATICFLOWCONTROLDEPTH (1)
+
+#define WINED3DVS20CAPS_PREDICATION (0x1)
+
+#define WINED3DCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINED3DCAPS2_FULLSCREENGAMMA (0x20000)
+
+#define WINED3DCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINED3DCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINED3DCAPS2_RESERVED (0x2000000)
+
+#define WINED3DCAPS2_CANMANAGERESOURCE (0x10000000)
+
+#define WINED3DCAPS2_DYNAMICTEXTURES (0x20000000)
+
+#define WINED3DCAPS2_CANAUTOGENMIPMAP (0x40000000)
+
+#define WINED3DPRASTERCAPS_DITHER (0x1)
+
+#define WINED3DPRASTERCAPS_ROP2 (0x2)
+
+#define WINED3DPRASTERCAPS_XOR (0x4)
+
+#define WINED3DPRASTERCAPS_PAT (0x8)
+
+#define WINED3DPRASTERCAPS_ZTEST (0x10)
+
+#define WINED3DPRASTERCAPS_SUBPIXEL (0x20)
+
+#define WINED3DPRASTERCAPS_SUBPIXELX (0x40)
+
+#define WINED3DPRASTERCAPS_FOGVERTEX (0x80)
+
+#define WINED3DPRASTERCAPS_FOGTABLE (0x100)
+
+#define WINED3DPRASTERCAPS_STIPPLE (0x200)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTDEPENDENT (0x400)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT (0x800)
+
+#define WINED3DPRASTERCAPS_ANTIALIASEDGES (0x1000)
+
+#define WINED3DPRASTERCAPS_MIPMAPLODBIAS (0x2000)
+
+#define WINED3DPRASTERCAPS_ZBIAS (0x4000)
+
+#define WINED3DPRASTERCAPS_ZBUFFERLESSHSR (0x8000)
+
+#define WINED3DPRASTERCAPS_FOGRANGE (0x10000)
+
+#define WINED3DPRASTERCAPS_ANISOTROPY (0x20000)
+
+#define WINED3DPRASTERCAPS_WBUFFER (0x40000)
+
+#define WINED3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT (0x80000)
+
+#define WINED3DPRASTERCAPS_WFOG (0x100000)
+
+#define WINED3DPRASTERCAPS_ZFOG (0x200000)
+
+#define WINED3DPRASTERCAPS_COLORPERSPECTIVE (0x400000)
+
+#define WINED3DPRASTERCAPS_SCISSORTEST (0x1000000)
+
+#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS (0x2000000)
+
+#define WINED3DPRASTERCAPS_DEPTHBIAS (0x4000000)
+
+#define WINED3DPRASTERCAPS_MULTISAMPLE_TOGGLE (0x8000000)
+
+#define WINED3DPSHADECAPS_COLORFLATMONO (0x1)
+
+#define WINED3DPSHADECAPS_COLORFLATRGB (0x2)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDMONO (0x4)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDRGB (0x8)
+
+#define WINED3DPSHADECAPS_COLORPHONGMONO (0x10)
+
+#define WINED3DPSHADECAPS_COLORPHONGRGB (0x20)
+
+#define WINED3DPSHADECAPS_SPECULARFLATMONO (0x40)
+
+#define WINED3DPSHADECAPS_SPECULARFLATRGB (0x80)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDMONO (0x100)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB (0x200)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGMONO (0x400)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGRGB (0x800)
+
+#define WINED3DPSHADECAPS_ALPHAFLATBLEND (0x1000)
+
+#define WINED3DPSHADECAPS_ALPHAFLATSTIPPLED (0x2000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND (0x4000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDSTIPPLED (0x8000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGBLEND (0x10000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGSTIPPLED (0x20000)
+
+#define WINED3DPSHADECAPS_FOGFLAT (0x40000)
+
+#define WINED3DPSHADECAPS_FOGGOURAUD (0x80000)
+
+#define WINED3DPSHADECAPS_FOGPHONG (0x100000)
+
+#define WINED3DPTEXTURECAPS_PERSPECTIVE (0x1)
+
+#define WINED3DPTEXTURECAPS_POW2 (0x2)
+
+#define WINED3DPTEXTURECAPS_ALPHA (0x4)
+
+#define WINED3DPTEXTURECAPS_TRANSPARENCY (0x8)
+
+#define WINED3DPTEXTURECAPS_BORDER (0x10)
+
+#define WINED3DPTEXTURECAPS_SQUAREONLY (0x20)
+
+#define WINED3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE (0x40)
+
+#define WINED3DPTEXTURECAPS_ALPHAPALETTE (0x80)
+
+#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL (0x100)
+
+#define WINED3DPTEXTURECAPS_PROJECTED (0x400)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP (0x800)
+
+#define WINED3DPTEXTURECAPS_COLORKEYBLEND (0x1000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP (0x2000)
+
+#define WINED3DPTEXTURECAPS_MIPMAP (0x4000)
+
+#define WINED3DPTEXTURECAPS_MIPVOLUMEMAP (0x8000)
+
+#define WINED3DPTEXTURECAPS_MIPCUBEMAP (0x10000)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP_POW2 (0x20000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP_POW2 (0x40000)
+
+#define WINED3DPTEXTURECAPS_NOPROJECTEDBUMPENV (0x200000)
+
+#define WINED3DPTFILTERCAPS_NEAREST (0x1)
+
+#define WINED3DPTFILTERCAPS_LINEAR (0x2)
+
+#define WINED3DPTFILTERCAPS_MIPNEAREST (0x4)
+
+#define WINED3DPTFILTERCAPS_MIPLINEAR (0x8)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST (0x10)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR (0x20)
+
+#define WINED3DPTFILTERCAPS_MINFPOINT (0x100)
+
+#define WINED3DPTFILTERCAPS_MINFLINEAR (0x200)
+
+#define WINED3DPTFILTERCAPS_MINFANISOTROPIC (0x400)
+
+#define WINED3DPTFILTERCAPS_MIPFPOINT (0x10000)
+
+#define WINED3DPTFILTERCAPS_MIPFLINEAR (0x20000)
+
+#define WINED3DPTFILTERCAPS_MAGFPOINT (0x1000000)
+
+#define WINED3DPTFILTERCAPS_MAGFLINEAR (0x2000000)
+
+#define WINED3DPTFILTERCAPS_MAGFANISOTROPIC (0x4000000)
+
+#define WINED3DPTFILTERCAPS_MAGFPYRAMIDALQUAD (0x8000000)
+
+#define WINED3DPTFILTERCAPS_MAGFGAUSSIANQUAD (0x10000000)
+
+#define WINED3DVTXPCAPS_TEXGEN (0x1)
+
+#define WINED3DVTXPCAPS_MATERIALSOURCE7 (0x2)
+
+#define WINED3DVTXPCAPS_VERTEXFOG (0x4)
+
+#define WINED3DVTXPCAPS_DIRECTIONALLIGHTS (0x8)
+
+#define WINED3DVTXPCAPS_POSITIONALLIGHTS (0x10)
+
+#define WINED3DVTXPCAPS_LOCALVIEWER (0x20)
+
+#define WINED3DVTXPCAPS_TWEENING (0x40)
+
+#define WINED3DVTXPCAPS_TEXGEN_SPHEREMAP (0x100)
+
+#define WINED3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER (0x200)
+
+#define WINED3DCURSORCAPS_COLOR (0x1)
+
+#define WINED3DCURSORCAPS_LOWRES (0x2)
+
+#define WINED3DDEVCAPS_FLOATTLVERTEX (0x1)
+
+#define WINED3DDEVCAPS_SORTINCREASINGZ (0x2)
+
+#define WINED3DDEVCAPS_SORTDECREASINGZ (0x4)
+
+#define WINED3DDEVCAPS_SORTEXACT (0x8)
+
+#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY (0x10)
+
+#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY (0x20)
+
+#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY (0x40)
+
+#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY (0x80)
+
+#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY (0x100)
+
+#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY (0x200)
+
+#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX (0x400)
+
+#define WINED3DDEVCAPS_CANRENDERAFTERFLIP (0x800)
+
+#define WINED3DDEVCAPS_TEXTURENONLOCALVIDMEM (0x1000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2 (0x2000)
+
+#define WINED3DDEVCAPS_SEPARATETEXTUREMEMORIES (0x4000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX (0x8000)
+
+#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT (0x10000)
+
+#define WINED3DDEVCAPS_CANBLTSYSTONONLOCAL (0x20000)
+
+#define WINED3DDEVCAPS_HWRASTERIZATION (0x80000)
+
+#define WINED3DDEVCAPS_PUREDEVICE (0x100000)
+
+#define WINED3DDEVCAPS_QUINTICRTPATCHES (0x200000)
+
+#define WINED3DDEVCAPS_RTPATCHES (0x400000)
+
+#define WINED3DDEVCAPS_RTPATCHHANDLEZERO (0x800000)
+
+#define WINED3DDEVCAPS_NPATCHES (0x1000000)
+
+#define WINEDDBLTFX_ARITHSTRETCHY (0x1)
+
+#define WINEDDBLTFX_MIRRORLEFTRIGHT (0x2)
+
+#define WINEDDBLTFX_MIRRORUPDOWN (0x4)
+
+#define WINEDDBLTFX_NOTEARING (0x8)
+
+#define WINEDDBLTFX_ROTATE180 (0x10)
+
+#define WINEDDBLTFX_ROTATE270 (0x20)
+
+#define WINEDDBLTFX_ROTATE90 (0x40)
+
+#define WINEDDBLTFX_ZBUFFERRANGE (0x80)
+
+#define WINEDDBLTFX_ZBUFFERBASEDEST (0x100)
+
+#define WINEDDBLT_ALPHADEST (0x1)
+
+#define WINEDDBLT_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDBLT_ALPHADESTNEG (0x4)
+
+#define WINEDDBLT_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDBLT_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDBLT_ALPHASRC (0x20)
+
+#define WINEDDBLT_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDBLT_ALPHASRCNEG (0x80)
+
+#define WINEDDBLT_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDBLT_ASYNC (0x200)
+
+#define WINEDDBLT_COLORFILL (0x400)
+
+#define WINEDDBLT_DDFX (0x800)
+
+#define WINEDDBLT_DDROPS (0x1000)
+
+#define WINEDDBLT_KEYDEST (0x2000)
+
+#define WINEDDBLT_KEYDESTOVERRIDE (0x4000)
+
+#define WINEDDBLT_KEYSRC (0x8000)
+
+#define WINEDDBLT_KEYSRCOVERRIDE (0x10000)
+
+#define WINEDDBLT_ROP (0x20000)
+
+#define WINEDDBLT_ROTATIONANGLE (0x40000)
+
+#define WINEDDBLT_ZBUFFER (0x80000)
+
+#define WINEDDBLT_ZBUFFERDESTCONSTOVERRIDE (0x100000)
+
+#define WINEDDBLT_ZBUFFERDESTOVERRIDE (0x200000)
+
+#define WINEDDBLT_ZBUFFERSRCCONSTOVERRIDE (0x400000)
+
+#define WINEDDBLT_ZBUFFERSRCOVERRIDE (0x800000)
+
+#define WINEDDBLT_WAIT (0x1000000)
+
+#define WINEDDBLT_DEPTHFILL (0x2000000)
+
+#define WINEDDBLT_DONOTWAIT (0x8000000)
+
+#define WINEDDBLTFAST_NOCOLORKEY (0x0)
+
+#define WINEDDBLTFAST_SRCCOLORKEY (0x1)
+
+#define WINEDDBLTFAST_DESTCOLORKEY (0x2)
+
+#define WINEDDBLTFAST_WAIT (0x10)
+
+#define WINEDDBLTFAST_DONOTWAIT (0x20)
+
+#define WINEDDSD_CAPS (0x1)
+
+#define WINEDDSD_HEIGHT (0x2)
+
+#define WINEDDSD_WIDTH (0x4)
+
+#define WINEDDSD_PITCH (0x8)
+
+#define WINEDDSD_BACKBUFFERCOUNT (0x20)
+
+#define WINEDDSD_ZBUFFERBITDEPTH (0x40)
+
+#define WINEDDSD_ALPHABITDEPTH (0x80)
+
+#define WINEDDSD_LPSURFACE (0x800)
+
+#define WINEDDSD_PIXELFORMAT (0x1000)
+
+#define WINEDDSD_CKDESTOVERLAY (0x2000)
+
+#define WINEDDSD_CKDESTBLT (0x4000)
+
+#define WINEDDSD_CKSRCOVERLAY (0x8000)
+
+#define WINEDDSD_CKSRCBLT (0x10000)
+
+#define WINEDDSD_MIPMAPCOUNT (0x20000)
+
+#define WINEDDSD_REFRESHRATE (0x40000)
+
+#define WINEDDSD_LINEARSIZE (0x80000)
+
+#define WINEDDSD_TEXTURESTAGE (0x100000)
+
+#define WINEDDSD_FVF (0x200000)
+
+#define WINEDDSD_SRCVBHANDLE (0x400000)
+
+#define WINEDDSD_ALL (0x7ff9ee)
+
+#define WINEDDCKEY_COLORSPACE (0x1)
+
+#define WINEDDCKEY_DESTBLT (0x2)
+
+#define WINEDDCKEY_DESTOVERLAY (0x4)
+
+#define WINEDDCKEY_SRCBLT (0x8)
+
+#define WINEDDCKEY_SRCOVERLAY (0x10)
+
+#define WINEDDGBS_CANBLT (0x1)
+
+#define WINEDDGBS_ISBLTDONE (0x2)
+
+#define WINEDDGFS_CANFLIP (0x1)
+
+#define WINEDDGFS_ISFLIPDONE (0x2)
+
+#define WINEDDFLIP_WAIT (0x1)
+
+#define WINEDDFLIP_EVEN (0x2)
+
+#define WINEDDFLIP_ODD (0x4)
+
+#define WINEDDFLIP_NOVSYNC (0x8)
+
+#define WINEDDFLIP_STEREO (0x10)
+
+#define WINEDDFLIP_DONOTWAIT (0x20)
+
+#define WINEDDFLIP_INTERVAL2 (0x2000000)
+
+#define WINEDDFLIP_INTERVAL3 (0x3000000)
+
+#define WINEDDFLIP_INTERVAL4 (0x4000000)
+
+#define WINEDDOVER_ALPHADEST (0x1)
+
+#define WINEDDOVER_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDOVER_ALPHADESTNEG (0x4)
+
+#define WINEDDOVER_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDOVER_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDOVER_ALPHASRC (0x20)
+
+#define WINEDDOVER_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDOVER_ALPHASRCNEG (0x80)
+
+#define WINEDDOVER_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDOVER_HIDE (0x200)
+
+#define WINEDDOVER_KEYDEST (0x400)
+
+#define WINEDDOVER_KEYDESTOVERRIDE (0x800)
+
+#define WINEDDOVER_KEYSRC (0x1000)
+
+#define WINEDDOVER_KEYSRCOVERRIDE (0x2000)
+
+#define WINEDDOVER_SHOW (0x4000)
+
+#define WINEDDOVER_ADDDIRTYRECT (0x8000)
+
+#define WINEDDOVER_REFRESHDIRTYRECTS (0x10000)
+
+#define WINEDDOVER_REFRESHALL (0x20000)
+
+#define WINEDDOVER_DDFX (0x80000)
+
+#define WINEDDOVER_AUTOFLIP (0x100000)
+
+#define WINEDDOVER_BOB (0x200000)
+
+#define WINEDDOVER_OVERRIDEBOBWEAVE (0x400000)
+
+#define WINEDDOVER_INTERLEAVED (0x800000)
+
+#define WINEDDSCAPS_RESERVED1 (0x1)
+
+#define WINEDDSCAPS_ALPHA (0x2)
+
+#define WINEDDSCAPS_BACKBUFFER (0x4)
+
+#define WINEDDSCAPS_COMPLEX (0x8)
+
+#define WINEDDSCAPS_FLIP (0x10)
+
+#define WINEDDSCAPS_FRONTBUFFER (0x20)
+
+#define WINEDDSCAPS_OFFSCREENPLAIN (0x40)
+
+#define WINEDDSCAPS_OVERLAY (0x80)
+
+#define WINEDDSCAPS_PALETTE (0x100)
+
+#define WINEDDSCAPS_PRIMARYSURFACE (0x200)
+
+#define WINEDDSCAPS_PRIMARYSURFACELEFT (0x400)
+
+#define WINEDDSCAPS_SYSTEMMEMORY (0x800)
+
+#define WINEDDSCAPS_TEXTURE (0x1000)
+
+#define WINEDDSCAPS_3DDEVICE (0x2000)
+
+#define WINEDDSCAPS_VIDEOMEMORY (0x4000)
+
+#define WINEDDSCAPS_VISIBLE (0x8000)
+
+#define WINEDDSCAPS_WRITEONLY (0x10000)
+
+#define WINEDDSCAPS_ZBUFFER (0x20000)
+
+#define WINEDDSCAPS_OWNDC (0x40000)
+
+#define WINEDDSCAPS_LIVEVIDEO (0x80000)
+
+#define WINEDDSCAPS_HWCODEC (0x100000)
+
+#define WINEDDSCAPS_MODEX (0x200000)
+
+#define WINEDDSCAPS_MIPMAP (0x400000)
+
+#define WINEDDSCAPS_RESERVED2 (0x800000)
+
+#define WINEDDSCAPS_ALLOCONLOAD (0x4000000)
+
+#define WINEDDSCAPS_VIDEOPORT (0x8000000)
+
+#define WINEDDSCAPS_LOCALVIDMEM (0x10000000)
+
+#define WINEDDSCAPS_NONLOCALVIDMEM (0x20000000)
+
+#define WINEDDSCAPS_STANDARDVGAMODE (0x40000000)
+
+#define WINEDDSCAPS_OPTIMIZED (0x80000000)
+
+#define WINEDDCKEYCAPS_DESTBLT (0x1)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACE (0x2)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACEYUV (0x4)
+
+#define WINEDDCKEYCAPS_DESTBLTYUV (0x8)
+
+#define WINEDDCKEYCAPS_DESTOVERLAY (0x10)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACE (0x20)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACEYUV (0x40)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYONEACTIVE (0x80)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYYUV (0x100)
+
+#define WINEDDCKEYCAPS_SRCBLT (0x200)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACE (0x400)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACEYUV (0x800)
+
+#define WINEDDCKEYCAPS_SRCBLTYUV (0x1000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAY (0x2000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACE (0x4000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACEYUV (0x8000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYONEACTIVE (0x10000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYYUV (0x20000)
+
+#define WINEDDCKEYCAPS_NOCOSTOVERLAY (0x40000)
+
+#define WINEDDFXCAPS_BLTALPHA (0x1)
+
+#define WINEDDFXCAPS_OVERLAYALPHA (0x4)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHYN (0x10)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHY (0x20)
+
+#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT (0x40)
+
+#define WINEDDFXCAPS_BLTMIRRORUPDOWN (0x80)
+
+#define WINEDDFXCAPS_BLTROTATION (0x100)
+
+#define WINEDDFXCAPS_BLTROTATION90 (0x200)
+
+#define WINEDDFXCAPS_BLTSHRINKX (0x400)
+
+#define WINEDDFXCAPS_BLTSHRINKXN (0x800)
+
+#define WINEDDFXCAPS_BLTSHRINKY (0x1000)
+
+#define WINEDDFXCAPS_BLTSHRINKYN (0x2000)
+
+#define WINEDDFXCAPS_BLTSTRETCHX (0x4000)
+
+#define WINEDDFXCAPS_BLTSTRETCHXN (0x8000)
+
+#define WINEDDFXCAPS_BLTSTRETCHY (0x10000)
+
+#define WINEDDFXCAPS_BLTSTRETCHYN (0x20000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHY (0x40000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHYN (0x8)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKX (0x80000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKXN (0x100000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKY (0x200000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKYN (0x400000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHX (0x800000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHXN (0x1000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHY (0x2000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHYN (0x4000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORLEFTRIGHT (0x8000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORUPDOWN (0x10000000)
+
+#define WINEDDCAPS_3D (0x1)
+
+#define WINEDDCAPS_ALIGNBOUNDARYDEST (0x2)
+
+#define WINEDDCAPS_ALIGNSIZEDEST (0x4)
+
+#define WINEDDCAPS_ALIGNBOUNDARYSRC (0x8)
+
+#define WINEDDCAPS_ALIGNSIZESRC (0x10)
+
+#define WINEDDCAPS_ALIGNSTRIDE (0x20)
+
+#define WINEDDCAPS_BLT (0x40)
+
+#define WINEDDCAPS_BLTQUEUE (0x80)
+
+#define WINEDDCAPS_BLTFOURCC (0x100)
+
+#define WINEDDCAPS_BLTSTRETCH (0x200)
+
+#define WINEDDCAPS_GDI (0x400)
+
+#define WINEDDCAPS_OVERLAY (0x800)
+
+#define WINEDDCAPS_OVERLAYCANTCLIP (0x1000)
+
+#define WINEDDCAPS_OVERLAYFOURCC (0x2000)
+
+#define WINEDDCAPS_OVERLAYSTRETCH (0x4000)
+
+#define WINEDDCAPS_PALETTE (0x8000)
+
+#define WINEDDCAPS_PALETTEVSYNC (0x10000)
+
+#define WINEDDCAPS_READSCANLINE (0x20000)
+
+#define WINEDDCAPS_STEREOVIEW (0x40000)
+
+#define WINEDDCAPS_VBI (0x80000)
+
+#define WINEDDCAPS_ZBLTS (0x100000)
+
+#define WINEDDCAPS_ZOVERLAYS (0x200000)
+
+#define WINEDDCAPS_COLORKEY (0x400000)
+
+#define WINEDDCAPS_ALPHA (0x800000)
+
+#define WINEDDCAPS_COLORKEYHWASSIST (0x1000000)
+
+#define WINEDDCAPS_NOHARDWARE (0x2000000)
+
+#define WINEDDCAPS_BLTCOLORFILL (0x4000000)
+
+#define WINEDDCAPS_BANKSWITCHED (0x8000000)
+
+#define WINEDDCAPS_BLTDEPTHFILL (0x10000000)
+
+#define WINEDDCAPS_CANCLIP (0x20000000)
+
+#define WINEDDCAPS_CANCLIPSTRETCHED (0x40000000)
+
+#define WINEDDCAPS_CANBLTSYSMEM (0x80000000)
+
+#define WINEDDCAPS2_CERTIFIED (0x1)
+
+#define WINEDDCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINEDDCAPS2_VIDEOPORT (0x4)
+
+#define WINEDDCAPS2_AUTOFLIPOVERLAY (0x8)
+
+#define WINEDDCAPS2_CANBOBINTERLEAVED (0x10)
+
+#define WINEDDCAPS2_CANBOBNONINTERLEAVED (0x20)
+
+#define WINEDDCAPS2_COLORCONTROLOVERLAY (0x40)
+
+#define WINEDDCAPS2_COLORCONTROLPRIMARY (0x80)
+
+#define WINEDDCAPS2_CANDROPZ16BIT (0x100)
+
+#define WINEDDCAPS2_NONLOCALVIDMEM (0x200)
+
+#define WINEDDCAPS2_NONLOCALVIDMEMCAPS (0x400)
+
+#define WINEDDCAPS2_NOPAGELOCKREQUIRED (0x800)
+
+#define WINEDDCAPS2_WIDESURFACES (0x1000)
+
+#define WINEDDCAPS2_CANFLIPODDEVEN (0x2000)
+
+#define WINEDDCAPS2_CANBOBHARDWARE (0x4000)
+
+#define WINEDDCAPS2_COPYFOURCC (0x8000)
+
+#define WINEDDCAPS2_PRIMARYGAMMA (0x20000)
+
+#define WINEDDCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINEDDCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINEDDCAPS2_FLIPINTERVAL (0x200000)
+
+#define WINEDDCAPS2_FLIPNOVSYNC (0x400000)
+
+#define WINEDDCAPS2_CANMANAGETEXTURE (0x800000)
+
+#define WINEDDCAPS2_TEXMANINNONLOCALVIDMEM (0x1000000)
+
+#define WINEDDCAPS2_STEREO (0x2000000)
+
+#define WINEDDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL (0x4000000)
+
+#define WINEDDPCAPS_4BIT (0x1)
+
+#define WINEDDPCAPS_8BITENTRIES (0x2)
+
+#define WINEDDPCAPS_8BIT (0x4)
+
+#define WINEDDPCAPS_INITIALIZE (0x8)
+
+#define WINEDDPCAPS_PRIMARYSURFACE (0x10)
+
+#define WINEDDPCAPS_PRIMARYSURFACELEFT (0x20)
+
+#define WINEDDPCAPS_ALLOW256 (0x40)
+
+#define WINEDDPCAPS_VSYNC (0x80)
+
+#define WINEDDPCAPS_1BIT (0x100)
+
+#define WINEDDPCAPS_2BIT (0x200)
+
+#define WINEDDPCAPS_ALPHA (0x400)
+
+typedef struct _WINED3DDISPLAYMODE {
+    UINT Width;
+    UINT Height;
+    UINT RefreshRate;
+    WINED3DFORMAT Format;
+} WINED3DDISPLAYMODE;
+typedef enum _WINED3DSCANLINEORDERING {
+  WINED3DSCANLINEORDERING_UNKNOWN    = 0,
+  WINED3DSCANLINEORDERING_PROGRESSIVE   = 1,
+  WINED3DSCANLINEORDERING_INTERLACED    = 2
+} WINED3DSCANLINEORDERING;
+typedef struct _WINED3DDISPLAYMODEEX {
+    UINT Size;
+    UINT Width;
+    UINT Height;
+    UINT RefreshRate;
+    WINED3DFORMAT Format;
+    WINED3DSCANLINEORDERING ScanLineOrdering;
+} WINED3DDISPLAYMODEEX;
+typedef enum _WINED3DDISPLAYROTATION {
+  WINED3DDISPLAYROTATION_IDENTITY   = 1,
+  WINED3DDISPLAYROTATION_90         = 2,
+  WINED3DDISPLAYROTATION_180        = 3,
+  WINED3DDISPLAYROTATION_270        = 4
+} WINED3DDISPLAYROTATION;
+typedef struct _WINED3DCOLORVALUE {
+    float r;
+    float g;
+    float b;
+    float a;
+} WINED3DCOLORVALUE;
+typedef struct _WINED3DVECTOR {
+    float x;
+    float y;
+    float z;
+} WINED3DVECTOR;
+typedef struct _WINED3DMATRIX {
+    union {
+        struct {
+            float _11;
+            float _12;
+            float _13;
+            float _14;
+            float _21;
+            float _22;
+            float _23;
+            float _24;
+            float _31;
+            float _32;
+            float _33;
+            float _34;
+            float _41;
+            float _42;
+            float _43;
+            float _44;
+        } s;
+        float m[4][4];
+    } u;
+} WINED3DMATRIX;
+typedef struct _WINED3DRECT {
+    LONG x1;
+    LONG y1;
+    LONG x2;
+    LONG y2;
+} WINED3DRECT;
+typedef struct _WINED3DLIGHT {
+    WINED3DLIGHTTYPE Type;
+    WINED3DCOLORVALUE Diffuse;
+    WINED3DCOLORVALUE Specular;
+    WINED3DCOLORVALUE Ambient;
+    WINED3DVECTOR Position;
+    WINED3DVECTOR Direction;
+    float Range;
+    float Falloff;
+    float Attenuation0;
+    float Attenuation1;
+    float Attenuation2;
+    float Theta;
+    float Phi;
+} WINED3DLIGHT;
+typedef struct _WINED3DMATERIAL {
+    WINED3DCOLORVALUE Diffuse;
+    WINED3DCOLORVALUE Ambient;
+    WINED3DCOLORVALUE Specular;
+    WINED3DCOLORVALUE Emissive;
+    float Power;
+} WINED3DMATERIAL;
+typedef struct _WINED3DVIEWPORT {
+    DWORD X;
+    DWORD Y;
+    DWORD Width;
+    DWORD Height;
+    float MinZ;
+    float MaxZ;
+} WINED3DVIEWPORT;
+typedef struct _WINED3DGAMMARAMP {
+    WORD red[256];
+    WORD green[256];
+    WORD blue[256];
+} WINED3DGAMMARAMP;
+typedef struct _WINED3DLINEPATTERN {
+    WORD wRepeatFactor;
+    WORD wLinePattern;
+} WINED3DLINEPATTERN;
+typedef struct _WINEDD3DRECTPATCH_INFO {
+    UINT StartVertexOffsetWidth;
+    UINT StartVertexOffsetHeight;
+    UINT Width;
+    UINT Height;
+    UINT Stride;
+    WINED3DBASISTYPE Basis;
+    WINED3DDEGREETYPE Degree;
+} WINED3DRECTPATCH_INFO;
+typedef struct _WINED3DTRIPATCH_INFO {
+    UINT StartVertexOffset;
+    UINT NumVertices;
+    WINED3DBASISTYPE Basis;
+    WINED3DDEGREETYPE Degree;
+} WINED3DTRIPATCH_INFO;
+typedef struct _WINED3DADAPTER_IDENTIFIER {
+    char *driver;
+    UINT driver_size;
+    char *description;
+    UINT description_size;
+    char *device_name;
+    UINT device_name_size;
+    LARGE_INTEGER driver_version;
+    DWORD vendor_id;
+    DWORD device_id;
+    DWORD subsystem_id;
+    DWORD revision;
+    GUID device_identifier;
+    DWORD whql_level;
+    LUID adapter_luid;
+    SIZE_T video_memory;
+} WINED3DADAPTER_IDENTIFIER;
+typedef struct _WINED3DPRESENT_PARAMETERS {
+    UINT BackBufferWidth;
+    UINT BackBufferHeight;
+    WINED3DFORMAT BackBufferFormat;
+    UINT BackBufferCount;
+    WINED3DMULTISAMPLE_TYPE MultiSampleType;
+    DWORD MultiSampleQuality;
+    WINED3DSWAPEFFECT SwapEffect;
+    HWND hDeviceWindow;
+    BOOL Windowed;
+    BOOL EnableAutoDepthStencil;
+    WINED3DFORMAT AutoDepthStencilFormat;
+    DWORD Flags;
+    UINT FullScreen_RefreshRateInHz;
+    UINT PresentationInterval;
+    BOOL AutoRestoreDisplayMode;
+#ifdef VBOX_WITH_WDDM
+    struct VBOXUHGSMI *pHgsmi;
+#endif
+} WINED3DPRESENT_PARAMETERS;
+typedef struct _WINED3DSURFACE_DESC {
+    WINED3DFORMAT format;
+    WINED3DRESOURCETYPE resource_type;
+    DWORD usage;
+    WINED3DPOOL pool;
+    UINT size;
+    WINED3DMULTISAMPLE_TYPE multisample_type;
+    DWORD multisample_quality;
+    UINT width;
+    UINT height;
+} WINED3DSURFACE_DESC;
+typedef struct _WINED3DVOLUME_DESC {
+    WINED3DFORMAT Format;
+    WINED3DRESOURCETYPE Type;
+    DWORD Usage;
+    WINED3DPOOL Pool;
+    UINT Size;
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+} WINED3DVOLUME_DESC;
+typedef struct _WINED3DCLIPSTATUS {
+    DWORD ClipUnion;
+    DWORD ClipIntersection;
+} WINED3DCLIPSTATUS;
+typedef struct _WINED3DVERTEXELEMENT {
+    WINED3DFORMAT format;
+    WORD input_slot;
+    WORD offset;
+    UINT output_slot;
+    BYTE method;
+    BYTE usage;
+    BYTE usage_idx;
+} WINED3DVERTEXELEMENT;
+typedef struct _WINED3DDEVICE_CREATION_PARAMETERS {
+    UINT AdapterOrdinal;
+    WINED3DDEVTYPE DeviceType;
+    HWND hFocusWindow;
+    DWORD BehaviorFlags;
+} WINED3DDEVICE_CREATION_PARAMETERS;
+typedef struct _WINED3DDEVINFO_BANDWIDTHTIMINGS {
+    float MaxBandwidthUtilized;
+    float FrontEndUploadMemoryUtilizedPercent;
+    float VertexRateUtilizedPercent;
+    float TriangleSetupRateUtilizedPercent;
+    float FillRateUtilizedPercent;
+} WINED3DDEVINFO_BANDWIDTHTIMINGS;
+typedef struct _WINED3DDEVINFO_CACHEUTILIZATION {
+    float TextureCacheHitRate;
+    float PostTransformVertexCacheHitRate;
+} WINED3DDEVINFO_CACHEUTILIZATION;
+typedef struct _WINED3DDEVINFO_INTERFACETIMINGS {
+    float WaitingForGPUToUseApplicationResourceTimePercent;
+    float WaitingForGPUToAcceptMoreCommandsTimePercent;
+    float WaitingForGPUToStayWithinLatencyTimePercent;
+    float WaitingForGPUExclusiveResourceTimePercent;
+    float WaitingForGPUOtherTimePercent;
+} WINED3DDEVINFO_INTERFACETIMINGS;
+typedef struct _WINED3DDEVINFO_PIPELINETIMINGS {
+    float VertexProcessingTimePercent;
+    float PixelProcessingTimePercent;
+    float OtherGPUProcessingTimePercent;
+    float GPUIdleTimePercent;
+} WINED3DDEVINFO_PIPELINETIMINGS;
+typedef struct _WINED3DDEVINFO_STAGETIMINGS {
+    float MemoryProcessingPercent;
+    float ComputationProcessingPercent;
+} WINED3DDEVINFO_STAGETIMINGS;
+typedef struct _WINED3DRASTER_STATUS {
+    BOOL InVBlank;
+    UINT ScanLine;
+} WINED3DRASTER_STATUS;
+typedef struct WINED3DRESOURCESTATS {
+    BOOL bThrashing;
+    DWORD ApproxBytesDownloaded;
+    DWORD NumEvicts;
+    DWORD NumVidCreates;
+    DWORD LastPri;
+    DWORD NumUsed;
+    DWORD NumUsedInVidMem;
+    DWORD WorkingSet;
+    DWORD WorkingSetBytes;
+    DWORD TotalManaged;
+    DWORD TotalBytes;
+} WINED3DRESOURCESTATS;
+typedef struct _WINED3DDEVINFO_RESOURCEMANAGER {
+    WINED3DRESOURCESTATS stats[7];
+} WINED3DDEVINFO_RESOURCEMANAGER;
+typedef struct _WINED3DDEVINFO_VERTEXSTATS {
+    DWORD NumRenderedTriangles;
+    DWORD NumExtraClippingTriangles;
+} WINED3DDEVINFO_VERTEXSTATS;
+typedef struct _WINED3DLOCKED_RECT {
+    INT Pitch;
+    void *pBits;
+} WINED3DLOCKED_RECT;
+typedef struct _WINED3DLOCKED_BOX {
+    INT RowPitch;
+    INT SlicePitch;
+    void *pBits;
+} WINED3DLOCKED_BOX;
+typedef struct _WINED3DBOX {
+    UINT Left;
+    UINT Top;
+    UINT Right;
+    UINT Bottom;
+    UINT Front;
+    UINT Back;
+} WINED3DBOX;
+typedef struct WINED3DDEVINFO_VCACHE {
+    DWORD Pattern;
+    DWORD OptMethod;
+    DWORD CacheSize;
+    DWORD MagicNumber;
+} WINED3DDEVINFO_VCACHE;
+typedef struct _WINED3DBUFFER_DESC {
+    WINED3DRESOURCETYPE Type;
+    DWORD Usage;
+    WINED3DPOOL Pool;
+    UINT Size;
+} WINED3DBUFFER_DESC;
+typedef struct WineDirect3DStridedData {
+    WINED3DFORMAT format;
+    const BYTE *lpData;
+    DWORD dwStride;
+} WineDirect3DStridedData;
+typedef struct WineDirect3DVertexStridedData {
+    WineDirect3DStridedData position;
+    WineDirect3DStridedData normal;
+    WineDirect3DStridedData diffuse;
+    WineDirect3DStridedData specular;
+    WineDirect3DStridedData texCoords[8];
+    BOOL position_transformed;
+} WineDirect3DVertexStridedData;
+typedef struct _WINED3DVSHADERCAPS2_0 {
+    DWORD Caps;
+    INT DynamicFlowControlDepth;
+    INT NumTemps;
+    INT StaticFlowControlDepth;
+} WINED3DVSHADERCAPS2_0;
+typedef struct _WINED3DPSHADERCAPS2_0 {
+    DWORD Caps;
+    INT DynamicFlowControlDepth;
+    INT NumTemps;
+    INT StaticFlowControlDepth;
+    INT NumInstructionSlots;
+} WINED3DPSHADERCAPS2_0;
+typedef struct _WINEDDCAPS {
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD CKeyCaps;
+    DWORD FXCaps;
+    DWORD FXAlphaCaps;
+    DWORD PalCaps;
+    DWORD SVCaps;
+    DWORD SVBCaps;
+    DWORD SVBCKeyCaps;
+    DWORD SVBFXCaps;
+    DWORD VSBCaps;
+    DWORD VSBCKeyCaps;
+    DWORD VSBFXCaps;
+    DWORD SSBCaps;
+    DWORD SSBCKeyCaps;
+    DWORD SSBFXCaps;
+    DWORD ddsCaps;
+    DWORD StrideAlign;
+} WINEDDCAPS;
+typedef struct _WINED3DCAPS {
+    WINED3DDEVTYPE DeviceType;
+    UINT AdapterOrdinal;
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD Caps3;
+    DWORD PresentationIntervals;
+    DWORD CursorCaps;
+    DWORD DevCaps;
+    DWORD PrimitiveMiscCaps;
+    DWORD RasterCaps;
+    DWORD ZCmpCaps;
+    DWORD SrcBlendCaps;
+    DWORD DestBlendCaps;
+    DWORD AlphaCmpCaps;
+    DWORD ShadeCaps;
+    DWORD TextureCaps;
+    DWORD TextureFilterCaps;
+    DWORD CubeTextureFilterCaps;
+    DWORD VolumeTextureFilterCaps;
+    DWORD TextureAddressCaps;
+    DWORD VolumeTextureAddressCaps;
+    DWORD LineCaps;
+    DWORD MaxTextureWidth;
+    DWORD MaxTextureHeight;
+    DWORD MaxVolumeExtent;
+    DWORD MaxTextureRepeat;
+    DWORD MaxTextureAspectRatio;
+    DWORD MaxAnisotropy;
+    float MaxVertexW;
+    float GuardBandLeft;
+    float GuardBandTop;
+    float GuardBandRight;
+    float GuardBandBottom;
+    float ExtentsAdjust;
+    DWORD StencilCaps;
+    DWORD FVFCaps;
+    DWORD TextureOpCaps;
+    DWORD MaxTextureBlendStages;
+    DWORD MaxSimultaneousTextures;
+    DWORD VertexProcessingCaps;
+    DWORD MaxActiveLights;
+    DWORD MaxUserClipPlanes;
+    DWORD MaxVertexBlendMatrices;
+    DWORD MaxVertexBlendMatrixIndex;
+    float MaxPointSize;
+    DWORD MaxPrimitiveCount;
+    DWORD MaxVertexIndex;
+    DWORD MaxStreams;
+    DWORD MaxStreamStride;
+    DWORD VertexShaderVersion;
+    DWORD MaxVertexShaderConst;
+    DWORD PixelShaderVersion;
+    float PixelShader1xMaxValue;
+    DWORD DevCaps2;
+    float MaxNpatchTessellationLevel;
+    DWORD Reserved5;
+    UINT MasterAdapterOrdinal;
+    UINT AdapterOrdinalInGroup;
+    UINT NumberOfAdaptersInGroup;
+    DWORD DeclTypes;
+    DWORD NumSimultaneousRTs;
+    DWORD StretchRectFilterCaps;
+    WINED3DVSHADERCAPS2_0 VS20Caps;
+    WINED3DPSHADERCAPS2_0 PS20Caps;
+    DWORD VertexTextureFilterCaps;
+    DWORD MaxVShaderInstructionsExecuted;
+    DWORD MaxPShaderInstructionsExecuted;
+    DWORD MaxVertexShader30InstructionSlots;
+    DWORD MaxPixelShader30InstructionSlots;
+    DWORD Reserved2;
+    DWORD Reserved3;
+    WINEDDCAPS DirectDrawCaps;
+} WINED3DCAPS;
+typedef struct _WINEDDCOLORKEY {
+    DWORD dwColorSpaceLowValue;
+    DWORD dwColorSpaceHighValue;
+} WINEDDCOLORKEY;
+typedef struct _WINEDDCOLORKEY *LPWINEDDCOLORKEY;
+typedef struct _WINEDDBLTFX {
+    DWORD dwSize;
+    DWORD dwDDFX;
+    DWORD dwROP;
+    DWORD dwDDROP;
+    DWORD dwRotationAngle;
+    DWORD dwZBufferOpCode;
+    DWORD dwZBufferLow;
+    DWORD dwZBufferHigh;
+    DWORD dwZBufferBaseDest;
+    DWORD dwZDestConstBitDepth;
+    union {
+        DWORD dwZDestConst;
+        struct IWineD3DSurface *lpDDSZBufferDest;
+    } DUMMYUNIONNAME1;
+    DWORD dwZSrcConstBitDepth;
+    union {
+        DWORD dwZSrcConst;
+        struct IWineD3DSurface *lpDDSZBufferSrc;
+    } DUMMYUNIONNAME2;
+    DWORD dwAlphaEdgeBlendBitDepth;
+    DWORD dwAlphaEdgeBlend;
+    DWORD dwReserved;
+    DWORD dwAlphaDestConstBitDepth;
+    union {
+        DWORD dwAlphaDestConst;
+        struct IWineD3DSurface *lpDDSAlphaDest;
+    } DUMMYUNIONNAME3;
+    DWORD dwAlphaSrcConstBitDepth;
+    union {
+        DWORD dwAlphaSrcConst;
+        struct IWineD3DSurface *lpDDSAlphaSrc;
+    } DUMMYUNIONNAME4;
+    union {
+        DWORD dwFillColor;
+        DWORD dwFillDepth;
+        DWORD dwFillPixel;
+        struct IWineD3DSurface *lpDDSPattern;
+    } DUMMYUNIONNAME5;
+    WINEDDCOLORKEY ddckDestColorkey;
+    WINEDDCOLORKEY ddckSrcColorkey;
+} WINEDDBLTFX;
+typedef struct _WINEDDBLTFX *LPWINEDDBLTFX;
+typedef struct _WINEDDOVERLAYFX {
+    DWORD dwSize;
+    DWORD dwAlphaEdgeBlendBitDepth;
+    DWORD dwAlphaEdgeBlend;
+    DWORD dwReserved;
+    DWORD dwAlphaDestConstBitDepth;
+    union {
+        DWORD dwAlphaDestConst;
+        struct IWineD3DSurface *lpDDSAlphaDest;
+    } DUMMYUNIONNAME1;
+    DWORD dwAlphaSrcConstBitDepth;
+    union {
+        DWORD dwAlphaSrcConst;
+        struct IWineD3DSurface *lpDDSAlphaSrc;
+    } DUMMYUNIONNAME2;
+    WINEDDCOLORKEY dckDestColorkey;
+    WINEDDCOLORKEY dckSrcColorkey;
+    DWORD dwDDFX;
+    DWORD dwFlags;
+} WINEDDOVERLAYFX;
+struct wined3d_buffer_desc {
+    UINT byte_width;
+    DWORD usage;
+    UINT bind_flags;
+    UINT cpu_access_flags;
+    UINT misc_flags;
+};
+
+struct wined3d_shader_signature_element {
+    const char *semantic_name;
+    UINT semantic_idx;
+    enum wined3d_sysval_semantic sysval_semantic;
+    DWORD component_type;
+    UINT register_idx;
+    DWORD mask;
+};
+
+struct wined3d_shader_signature {
+    UINT element_count;
+    struct wined3d_shader_signature_element *elements;
+    char *string_data;
+};
+
+struct wined3d_parent_ops {
+    void (STDMETHODCALLTYPE *wined3d_object_destroyed)(void *parent);
+};
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDeviceParent interface
+ */
+#ifndef __IWineD3DDeviceParent_INTERFACE_DEFINED__
+#define __IWineD3DDeviceParent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDeviceParent, 0xaeb62dfc, 0xbdcb, 0x4f02, 0x95,0x19, 0x1e,0xee,0xa0,0x0c,0x15,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDeviceParent : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE WineD3DDeviceCreated(
+        IWineD3DDevice *device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        DWORD usage,
+        WINED3DPOOL pool,
+        UINT level,
+        WINED3DCUBEMAP_FACES face,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRenderTarget(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL lockable,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilSurface(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL discard,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        UINT depth,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        DWORD usage,
+        IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain) = 0;
+
+};
+#else
+typedef struct IWineD3DDeviceParentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DDeviceParent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DDeviceParent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DDeviceParent* This);
+
+    /*** IWineD3DDeviceParent methods ***/
+    void (STDMETHODCALLTYPE *WineD3DDeviceCreated)(
+        IWineD3DDeviceParent* This,
+        IWineD3DDevice *device);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        DWORD usage,
+        WINED3DPOOL pool,
+        UINT level,
+        WINED3DCUBEMAP_FACES face,
+        IWineD3DSurface **surface
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderTarget)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL lockable,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDepthStencilSurface)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL discard,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        UINT depth,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        DWORD usage,
+        IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+        IWineD3DDeviceParent* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain);
+
+    END_INTERFACE
+} IWineD3DDeviceParentVtbl;
+interface IWineD3DDeviceParent {
+    CONST_VTBL IWineD3DDeviceParentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDeviceParent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDeviceParent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDeviceParent_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DDeviceParent methods ***/
+#define IWineD3DDeviceParent_WineD3DDeviceCreated(This,device) (This)->lpVtbl->WineD3DDeviceCreated(This,device)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface)
+#endif
+#define IWineD3DDeviceParent_CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface) (This)->lpVtbl->CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface)
+#define IWineD3DDeviceParent_CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface) (This)->lpVtbl->CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume)
+#endif
+#define IWineD3DDeviceParent_CreateSwapChain(This,present_parameters,swapchain) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DDeviceParent_WineD3DDeviceCreated_Proxy(
+    IWineD3DDeviceParent* This,
+    IWineD3DDevice *device);
+void __RPC_STUB IWineD3DDeviceParent_WineD3DDeviceCreated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSurface_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    DWORD usage,
+    WINED3DPOOL pool,
+    UINT level,
+    WINED3DCUBEMAP_FACES face,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateRenderTarget_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    BOOL lockable,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateDepthStencilSurface_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    BOOL discard,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateVolume_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    UINT depth,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    DWORD usage,
+    IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DDeviceParent_CreateVolume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSwapChain_Proxy(
+    IWineD3DDeviceParent* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters,
+    IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDeviceParent_CreateSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DDeviceParent_INTERFACE_DEFINED__ */
+
+typedef ULONG (STDMETHODCALLTYPE *D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
+typedef HRESULT (STDMETHODCALLTYPE *D3DCB_ENUMRESOURCES)(IWineD3DResource *resource,void *pData);
+/*****************************************************************************
+ * IWineD3DBase interface
+ */
+#ifndef __IWineD3DBase_INTERFACE_DEFINED__
+#define __IWineD3DBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBase, 0x46799311, 0x8e0e, 0x40ce, 0xb2,0xec, 0xdd,0xb9,0x9f,0x18,0xfc,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBase : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetParent(
+        IUnknown **parent) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBase* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBase* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBase* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBase* This,
+        IUnknown **parent);
+
+    END_INTERFACE
+} IWineD3DBaseVtbl;
+interface IWineD3DBase {
+    CONST_VTBL IWineD3DBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBase_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBase_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBase_GetParent_Proxy(
+    IWineD3DBase* This,
+    IUnknown **parent);
+void __RPC_STUB IWineD3DBase_GetParent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3D interface
+ */
+#ifndef __IWineD3D_INTERFACE_DEFINED__
+#define __IWineD3D_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3D, 0x108f9c44, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3D : public IWineD3DBase
+{
+    virtual UINT STDMETHODCALLTYPE GetAdapterCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterSoftwareDevice(
+        void *pInitializeFunction) = 0;
+
+    virtual HMONITOR STDMETHODCALLTYPE GetAdapterMonitor(
+        UINT adapter_idx) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetAdapterModeCount(
+        UINT adapter_idx,
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAdapterModes(
+        UINT adapter_idx,
+        WINED3DFORMAT format,
+        UINT mode_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayMode(
+        UINT adapter_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayModeEx(
+        UINT adapter_idx,
+        WINED3DDISPLAYMODEEX *mode,
+        WINED3DDISPLAYROTATION *rotation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterIdentifier(
+        UINT adapter_idx,
+        DWORD flags,
+        WINED3DADAPTER_IDENTIFIER *identifier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceMultiSampleType(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT surface_format,
+        BOOL windowed,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD *quality_levels) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDepthStencilMatch(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        WINED3DFORMAT render_target_format,
+        WINED3DFORMAT depth_stencil_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceType(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT display_format,
+        WINED3DFORMAT backbuffer_format,
+        BOOL windowed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormat(
+        UINT adaper_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        DWORD usage,
+        WINED3DRESOURCETYPE resource_type,
+        WINED3DFORMAT check_format,
+        WINED3DSURFTYPE surface_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormatConversion(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT source_format,
+        WINED3DFORMAT target_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DCAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        HWND focus_window,
+        DWORD behaviour_flags,
+        IUnknown *parent,
+        IWineD3DDeviceParent *device_parent,
+        IWineD3DDevice **device) = 0;
+
+};
+#else
+typedef struct IWineD3DVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3D* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3D* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3D* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3D* This,
+        IUnknown **parent);
+
+    /*** IWineD3D methods ***/
+    UINT (STDMETHODCALLTYPE *GetAdapterCount)(
+        IWineD3D* This);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterSoftwareDevice)(
+        IWineD3D* This,
+        void *pInitializeFunction);
+
+    HMONITOR (STDMETHODCALLTYPE *GetAdapterMonitor)(
+        IWineD3D* This,
+        UINT adapter_idx);
+
+    UINT (STDMETHODCALLTYPE *GetAdapterModeCount)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAdapterModes)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DFORMAT format,
+        UINT mode_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayMode)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayModeEx)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDISPLAYMODEEX *mode,
+        WINED3DDISPLAYROTATION *rotation);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterIdentifier)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        DWORD flags,
+        WINED3DADAPTER_IDENTIFIER *identifier);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceMultiSampleType)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT surface_format,
+        BOOL windowed,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD *quality_levels);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDepthStencilMatch)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        WINED3DFORMAT render_target_format,
+        WINED3DFORMAT depth_stencil_format);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceType)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT display_format,
+        WINED3DFORMAT backbuffer_format,
+        BOOL windowed);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceFormat)(
+        IWineD3D* This,
+        UINT adaper_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        DWORD usage,
+        WINED3DRESOURCETYPE resource_type,
+        WINED3DFORMAT check_format,
+        WINED3DSURFTYPE surface_type);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceFormatConversion)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT source_format,
+        WINED3DFORMAT target_format);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DCAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        HWND focus_window,
+        DWORD behaviour_flags,
+        IUnknown *parent,
+        IWineD3DDeviceParent *device_parent,
+        IWineD3DDevice **device);
+
+    END_INTERFACE
+} IWineD3DVtbl;
+interface IWineD3D {
+    CONST_VTBL IWineD3DVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3D_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3D_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3D_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3D_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3D methods ***/
+#define IWineD3D_GetAdapterCount(This) (This)->lpVtbl->GetAdapterCount(This)
+#define IWineD3D_RegisterSoftwareDevice(This,pInitializeFunction) (This)->lpVtbl->RegisterSoftwareDevice(This,pInitializeFunction)
+#define IWineD3D_GetAdapterMonitor(This,adapter_idx) (This)->lpVtbl->GetAdapterMonitor(This,adapter_idx)
+#define IWineD3D_GetAdapterModeCount(This,adapter_idx,format) (This)->lpVtbl->GetAdapterModeCount(This,adapter_idx,format)
+#define IWineD3D_EnumAdapterModes(This,adapter_idx,format,mode_idx,mode) (This)->lpVtbl->EnumAdapterModes(This,adapter_idx,format,mode_idx,mode)
+#define IWineD3D_GetAdapterDisplayMode(This,adapter_idx,mode) (This)->lpVtbl->GetAdapterDisplayMode(This,adapter_idx,mode)
+#define IWineD3D_GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation) (This)->lpVtbl->GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation)
+#define IWineD3D_GetAdapterIdentifier(This,adapter_idx,flags,identifier) (This)->lpVtbl->GetAdapterIdentifier(This,adapter_idx,flags,identifier)
+#define IWineD3D_CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels) (This)->lpVtbl->CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels)
+#define IWineD3D_CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format) (This)->lpVtbl->CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format)
+#define IWineD3D_CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed) (This)->lpVtbl->CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed)
+#define IWineD3D_CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type) (This)->lpVtbl->CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type)
+#define IWineD3D_CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format) (This)->lpVtbl->CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format)
+#define IWineD3D_GetDeviceCaps(This,adapter_idx,device_type,caps) (This)->lpVtbl->GetDeviceCaps(This,adapter_idx,device_type,caps)
+#define IWineD3D_CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device) (This)->lpVtbl->CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device)
+#endif
+
+#endif
+
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterCount_Proxy(
+    IWineD3D* This);
+void __RPC_STUB IWineD3D_GetAdapterCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_RegisterSoftwareDevice_Proxy(
+    IWineD3D* This,
+    void *pInitializeFunction);
+void __RPC_STUB IWineD3D_RegisterSoftwareDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HMONITOR STDMETHODCALLTYPE IWineD3D_GetAdapterMonitor_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx);
+void __RPC_STUB IWineD3D_GetAdapterMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterModeCount_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3D_GetAdapterModeCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_EnumAdapterModes_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DFORMAT format,
+    UINT mode_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_EnumAdapterModes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayMode_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_GetAdapterDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayModeEx_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDISPLAYMODEEX *mode,
+    WINED3DDISPLAYROTATION *rotation);
+void __RPC_STUB IWineD3D_GetAdapterDisplayModeEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterIdentifier_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    DWORD flags,
+    WINED3DADAPTER_IDENTIFIER *identifier);
+void __RPC_STUB IWineD3D_GetAdapterIdentifier_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceMultiSampleType_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT surface_format,
+    BOOL windowed,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD *quality_levels);
+void __RPC_STUB IWineD3D_CheckDeviceMultiSampleType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDepthStencilMatch_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT adapter_format,
+    WINED3DFORMAT render_target_format,
+    WINED3DFORMAT depth_stencil_format);
+void __RPC_STUB IWineD3D_CheckDepthStencilMatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceType_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT display_format,
+    WINED3DFORMAT backbuffer_format,
+    BOOL windowed);
+void __RPC_STUB IWineD3D_CheckDeviceType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormat_Proxy(
+    IWineD3D* This,
+    UINT adaper_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT adapter_format,
+    DWORD usage,
+    WINED3DRESOURCETYPE resource_type,
+    WINED3DFORMAT check_format,
+    WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3D_CheckDeviceFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormatConversion_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT source_format,
+    WINED3DFORMAT target_format);
+void __RPC_STUB IWineD3D_CheckDeviceFormatConversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetDeviceCaps_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DCAPS *caps);
+void __RPC_STUB IWineD3D_GetDeviceCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CreateDevice_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    HWND focus_window,
+    DWORD behaviour_flags,
+    IUnknown *parent,
+    IWineD3DDeviceParent *device_parent,
+    IWineD3DDevice **device);
+void __RPC_STUB IWineD3D_CreateDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3D_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DResource interface
+ */
+#ifndef __IWineD3DResource_INTERFACE_DEFINED__
+#define __IWineD3DResource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DResource, 0x1f3bfb34, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DResource : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
+        REFGUID guid,
+        void *data,
+        DWORD *data_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FreePrivateData(
+        REFGUID guid) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE SetPriority(
+        DWORD new_priority) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetPriority(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE PreLoad(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE UnLoad(
+        ) = 0;
+
+    virtual WINED3DRESOURCETYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DResourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DResource* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DResource* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DResource* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DResource* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DResource* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DResource* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DResource* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DResource* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DResource* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    END_INTERFACE
+} IWineD3DResourceVtbl;
+interface IWineD3DResource {
+    CONST_VTBL IWineD3DResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DResource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DResource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DResource_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DResource_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DResource_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DResource_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DResource_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DResource_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DResource_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DResource_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DResource_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DResource_GetType(This) (This)->lpVtbl->GetType(This)
+# ifdef VBOX_WITH_WDDM
+#  define IWineD3DResource_SetShRcState(This, enmState) (This)->lpVtbl->SetShRcState(This, enmState)
+# endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DResource_SetPrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid,
+    const void *data,
+    DWORD data_size,
+    DWORD flags);
+void __RPC_STUB IWineD3DResource_SetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_GetPrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid,
+    void *data,
+    DWORD *data_size);
+void __RPC_STUB IWineD3DResource_GetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_FreePrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid);
+void __RPC_STUB IWineD3DResource_FreePrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_SetPriority_Proxy(
+    IWineD3DResource* This,
+    DWORD new_priority);
+void __RPC_STUB IWineD3DResource_SetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_GetPriority_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_PreLoad_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_PreLoad_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_UnLoad_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_UnLoad_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DRESOURCETYPE STDMETHODCALLTYPE IWineD3DResource_GetType_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DResource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DRendertargetView interface
+ */
+#ifndef __IWineD3DRendertargetView_INTERFACE_DEFINED__
+#define __IWineD3DRendertargetView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DRendertargetView, 0xf7d8abf4, 0xfb93, 0x43e4, 0x9c,0x96, 0x46,0x18,0xcf,0x9b,0x3c,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DRendertargetView : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetResource(
+        IWineD3DResource **resource) = 0;
+
+};
+#else
+typedef struct IWineD3DRendertargetViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DRendertargetView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DRendertargetView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DRendertargetView* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DRendertargetView* This,
+        IUnknown **parent);
+
+    /*** IWineD3DRendertargetView methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetResource)(
+        IWineD3DRendertargetView* This,
+        IWineD3DResource **resource);
+
+    END_INTERFACE
+} IWineD3DRendertargetViewVtbl;
+interface IWineD3DRendertargetView {
+    CONST_VTBL IWineD3DRendertargetViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DRendertargetView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DRendertargetView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DRendertargetView_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DRendertargetView_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DRendertargetView methods ***/
+#define IWineD3DRendertargetView_GetResource(This,resource) (This)->lpVtbl->GetResource(This,resource)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DRendertargetView_GetResource_Proxy(
+    IWineD3DRendertargetView* This,
+    IWineD3DResource **resource);
+void __RPC_STUB IWineD3DRendertargetView_GetResource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DRendertargetView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPalette interface
+ */
+#ifndef __IWineD3DPalette_INTERFACE_DEFINED__
+#define __IWineD3DPalette_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPalette, 0xf756720c, 0x32b9, 0x4439, 0xb5,0xa3, 0x1d,0x6c,0x97,0x03,0x7d,0x9e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPalette : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetEntries(
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCaps(
+        DWORD *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEntries(
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        const PALETTEENTRY *entries) = 0;
+
+};
+#else
+typedef struct IWineD3DPaletteVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DPalette* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DPalette* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DPalette* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DPalette* This,
+        IUnknown **parent);
+
+    /*** IWineD3DPalette methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEntries)(
+        IWineD3DPalette* This,
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *GetCaps)(
+        IWineD3DPalette* This,
+        DWORD *caps);
+
+    HRESULT (STDMETHODCALLTYPE *SetEntries)(
+        IWineD3DPalette* This,
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        const PALETTEENTRY *entries);
+
+    END_INTERFACE
+} IWineD3DPaletteVtbl;
+interface IWineD3DPalette {
+    CONST_VTBL IWineD3DPaletteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPalette_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPalette_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPalette_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPalette_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DPalette methods ***/
+#define IWineD3DPalette_GetEntries(This,flags,start,count,entries) (This)->lpVtbl->GetEntries(This,flags,start,count,entries)
+#define IWineD3DPalette_GetCaps(This,caps) (This)->lpVtbl->GetCaps(This,caps)
+#define IWineD3DPalette_SetEntries(This,flags,start,count,entries) (This)->lpVtbl->SetEntries(This,flags,start,count,entries)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetEntries_Proxy(
+    IWineD3DPalette* This,
+    DWORD flags,
+    DWORD start,
+    DWORD count,
+    PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_GetEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetCaps_Proxy(
+    IWineD3DPalette* This,
+    DWORD *caps);
+void __RPC_STUB IWineD3DPalette_GetCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_SetEntries_Proxy(
+    IWineD3DPalette* This,
+    DWORD flags,
+    DWORD start,
+    DWORD count,
+    const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_SetEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DPalette_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DClipper interface
+ */
+#ifndef __IWineD3DClipper_INTERFACE_DEFINED__
+#define __IWineD3DClipper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DClipper, 0x8f2bceb1, 0xd338, 0x488c, 0xab,0x7f, 0x0e,0xc9,0x80,0xbf,0x5d,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DClipper : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClipList(
+        const RECT *rect,
+        RGNDATA *clip_list,
+        DWORD *clip_list_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHWnd(
+        HWND *hwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsClipListChanged(
+        BOOL *changed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipList(
+        const RGNDATA *clip_list,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHWnd(
+        DWORD flags,
+        HWND hwnd) = 0;
+
+};
+#else
+typedef struct IWineD3DClipperVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DClipper* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DClipper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DClipper* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DClipper* This,
+        IUnknown **parent);
+
+    /*** IWineD3DClipper methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClipList)(
+        IWineD3DClipper* This,
+        const RECT *rect,
+        RGNDATA *clip_list,
+        DWORD *clip_list_size);
+
+    HRESULT (STDMETHODCALLTYPE *GetHWnd)(
+        IWineD3DClipper* This,
+        HWND *hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *IsClipListChanged)(
+        IWineD3DClipper* This,
+        BOOL *changed);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipList)(
+        IWineD3DClipper* This,
+        const RGNDATA *clip_list,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetHWnd)(
+        IWineD3DClipper* This,
+        DWORD flags,
+        HWND hwnd);
+
+    END_INTERFACE
+} IWineD3DClipperVtbl;
+interface IWineD3DClipper {
+    CONST_VTBL IWineD3DClipperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DClipper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DClipper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DClipper_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DClipper_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DClipper methods ***/
+#define IWineD3DClipper_GetClipList(This,rect,clip_list,clip_list_size) (This)->lpVtbl->GetClipList(This,rect,clip_list,clip_list_size)
+#define IWineD3DClipper_GetHWnd(This,hwnd) (This)->lpVtbl->GetHWnd(This,hwnd)
+#define IWineD3DClipper_IsClipListChanged(This,changed) (This)->lpVtbl->IsClipListChanged(This,changed)
+#define IWineD3DClipper_SetClipList(This,clip_list,flags) (This)->lpVtbl->SetClipList(This,clip_list,flags)
+#define IWineD3DClipper_SetHWnd(This,flags,hwnd) (This)->lpVtbl->SetHWnd(This,flags,hwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetClipList_Proxy(
+    IWineD3DClipper* This,
+    const RECT *rect,
+    RGNDATA *clip_list,
+    DWORD *clip_list_size);
+void __RPC_STUB IWineD3DClipper_GetClipList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetHWnd_Proxy(
+    IWineD3DClipper* This,
+    HWND *hwnd);
+void __RPC_STUB IWineD3DClipper_GetHWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_IsClipListChanged_Proxy(
+    IWineD3DClipper* This,
+    BOOL *changed);
+void __RPC_STUB IWineD3DClipper_IsClipListChanged_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetClipList_Proxy(
+    IWineD3DClipper* This,
+    const RGNDATA *clip_list,
+    DWORD flags);
+void __RPC_STUB IWineD3DClipper_SetClipList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetHWnd_Proxy(
+    IWineD3DClipper* This,
+    DWORD flags,
+    HWND hwnd);
+void __RPC_STUB IWineD3DClipper_SetHWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DClipper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSurface interface
+ */
+#ifndef __IWineD3DSurface_INTERFACE_DEFINED__
+#define __IWineD3DSurface_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSurface, 0x37cd5526, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSurface : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        REFIID riid,
+        void **container) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDC(
+        HDC *dc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
+        HDC dc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flip(
+        IWineD3DSurface *override,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Blt(
+        const RECT *dst_rect,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD flags,
+        const WINEDDBLTFX *blt_fx,
+        WINED3DTEXTUREFILTERTYPE filter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBltStatus(
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlipStatus(
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsLost(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Restore(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BltFast(
+        DWORD dst_x,
+        DWORD dst_y,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD trans) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPalette(
+        IWineD3DPalette **palette) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPalette(
+        IWineD3DPalette *palette) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RealizePalette(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetColorKey(
+        DWORD flags,
+        const WINEDDCOLORKEY *color_key) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetPitch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMem(
+        void *mem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOverlayPosition(
+        LONG x,
+        LONG y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOverlayPosition(
+        LONG *x,
+        LONG *y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateOverlayZOrder(
+        DWORD flags,
+        IWineD3DSurface *ref) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateOverlay(
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const RECT *dst_rect,
+        DWORD flags,
+        const WINEDDOVERLAYFX *fx) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipper(
+        IWineD3DClipper *clipper) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipper(
+        IWineD3DClipper **clipper) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+        BOOL srgb_mode) = 0;
+
+    virtual void STDMETHODCALLTYPE BindTexture(
+        BOOL srgb) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveSnapshot(
+        const char *filename) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainer(
+        IWineD3DBase *container) = 0;
+
+    virtual const void * STDMETHODCALLTYPE GetData(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFormat(
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PrivateSetup(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE ModifyLocation(
+        DWORD location,
+        BOOL persistent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadLocation(
+        DWORD location,
+        const RECT *rect) = 0;
+
+    virtual WINED3DSURFTYPE STDMETHODCALLTYPE GetImplType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawOverlay(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DSurfaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DSurface* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DSurface* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DSurface* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DSurface* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DSurface* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DSurface* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DSurface* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DSurface methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IWineD3DSurface* This,
+        REFIID riid,
+        void **container);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DSurface* This,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DSurface* This,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDC)(
+        IWineD3DSurface* This,
+        HDC *dc);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseDC)(
+        IWineD3DSurface* This,
+        HDC dc);
+
+    HRESULT (STDMETHODCALLTYPE *Flip)(
+        IWineD3DSurface* This,
+        IWineD3DSurface *override,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *Blt)(
+        IWineD3DSurface* This,
+        const RECT *dst_rect,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD flags,
+        const WINEDDBLTFX *blt_fx,
+        WINED3DTEXTUREFILTERTYPE filter);
+
+    HRESULT (STDMETHODCALLTYPE *GetBltStatus)(
+        IWineD3DSurface* This,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlipStatus)(
+        IWineD3DSurface* This,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *IsLost)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *Restore)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *BltFast)(
+        IWineD3DSurface* This,
+        DWORD dst_x,
+        DWORD dst_y,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD trans);
+
+    HRESULT (STDMETHODCALLTYPE *GetPalette)(
+        IWineD3DSurface* This,
+        IWineD3DPalette **palette);
+
+    HRESULT (STDMETHODCALLTYPE *SetPalette)(
+        IWineD3DSurface* This,
+        IWineD3DPalette *palette);
+
+    HRESULT (STDMETHODCALLTYPE *RealizePalette)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetColorKey)(
+        IWineD3DSurface* This,
+        DWORD flags,
+        const WINEDDCOLORKEY *color_key);
+
+    DWORD (STDMETHODCALLTYPE *GetPitch)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetMem)(
+        IWineD3DSurface* This,
+        void *mem);
+
+    HRESULT (STDMETHODCALLTYPE *SetOverlayPosition)(
+        IWineD3DSurface* This,
+        LONG x,
+        LONG y);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverlayPosition)(
+        IWineD3DSurface* This,
+        LONG *x,
+        LONG *y);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateOverlayZOrder)(
+        IWineD3DSurface* This,
+        DWORD flags,
+        IWineD3DSurface *ref);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateOverlay)(
+        IWineD3DSurface* This,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const RECT *dst_rect,
+        DWORD flags,
+        const WINEDDOVERLAYFX *fx);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipper)(
+        IWineD3DSurface* This,
+        IWineD3DClipper *clipper);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipper)(
+        IWineD3DSurface* This,
+        IWineD3DClipper **clipper);
+
+    HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+        IWineD3DSurface* This,
+        BOOL srgb_mode);
+
+    void (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DSurface* This,
+        BOOL srgb);
+
+    HRESULT (STDMETHODCALLTYPE *SaveSnapshot)(
+        IWineD3DSurface* This,
+        const char *filename);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainer)(
+        IWineD3DSurface* This,
+        IWineD3DBase *container);
+
+    const void * (STDMETHODCALLTYPE *GetData)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFormat)(
+        IWineD3DSurface* This,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *PrivateSetup)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *ModifyLocation)(
+        IWineD3DSurface* This,
+        DWORD location,
+        BOOL persistent);
+
+    HRESULT (STDMETHODCALLTYPE *LoadLocation)(
+        IWineD3DSurface* This,
+        DWORD location,
+        const RECT *rect);
+
+    WINED3DSURFTYPE (STDMETHODCALLTYPE *GetImplType)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *DrawOverlay)(
+        IWineD3DSurface* This);
+
+    END_INTERFACE
+} IWineD3DSurfaceVtbl;
+interface IWineD3DSurface {
+    CONST_VTBL IWineD3DSurfaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSurface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSurface_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSurface_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSurface_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DSurface_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DSurface_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DSurface_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DSurface_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DSurface_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DSurface_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DSurface_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DSurface_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DSurface methods ***/
+#define IWineD3DSurface_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DSurface_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DSurface_LockRect(This,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,locked_rect,rect,flags)
+#define IWineD3DSurface_UnlockRect(This) (This)->lpVtbl->UnlockRect(This)
+#define IWineD3DSurface_GetDC(This,dc) (This)->lpVtbl->GetDC(This,dc)
+#define IWineD3DSurface_ReleaseDC(This,dc) (This)->lpVtbl->ReleaseDC(This,dc)
+#define IWineD3DSurface_Flip(This,override,flags) (This)->lpVtbl->Flip(This,override,flags)
+#define IWineD3DSurface_Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter) (This)->lpVtbl->Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter)
+#define IWineD3DSurface_GetBltStatus(This,flags) (This)->lpVtbl->GetBltStatus(This,flags)
+#define IWineD3DSurface_GetFlipStatus(This,flags) (This)->lpVtbl->GetFlipStatus(This,flags)
+#define IWineD3DSurface_IsLost(This) (This)->lpVtbl->IsLost(This)
+#define IWineD3DSurface_Restore(This) (This)->lpVtbl->Restore(This)
+#define IWineD3DSurface_BltFast(This,dst_x,dst_y,src_surface,src_rect,trans) (This)->lpVtbl->BltFast(This,dst_x,dst_y,src_surface,src_rect,trans)
+#define IWineD3DSurface_GetPalette(This,palette) (This)->lpVtbl->GetPalette(This,palette)
+#define IWineD3DSurface_SetPalette(This,palette) (This)->lpVtbl->SetPalette(This,palette)
+#define IWineD3DSurface_RealizePalette(This) (This)->lpVtbl->RealizePalette(This)
+#define IWineD3DSurface_SetColorKey(This,flags,color_key) (This)->lpVtbl->SetColorKey(This,flags,color_key)
+#define IWineD3DSurface_GetPitch(This) (This)->lpVtbl->GetPitch(This)
+#define IWineD3DSurface_SetMem(This,mem) (This)->lpVtbl->SetMem(This,mem)
+#define IWineD3DSurface_SetOverlayPosition(This,x,y) (This)->lpVtbl->SetOverlayPosition(This,x,y)
+#define IWineD3DSurface_GetOverlayPosition(This,x,y) (This)->lpVtbl->GetOverlayPosition(This,x,y)
+#define IWineD3DSurface_UpdateOverlayZOrder(This,flags,ref) (This)->lpVtbl->UpdateOverlayZOrder(This,flags,ref)
+#define IWineD3DSurface_UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx) (This)->lpVtbl->UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx)
+#define IWineD3DSurface_SetClipper(This,clipper) (This)->lpVtbl->SetClipper(This,clipper)
+#define IWineD3DSurface_GetClipper(This,clipper) (This)->lpVtbl->GetClipper(This,clipper)
+#define IWineD3DSurface_LoadTexture(This,srgb_mode) (This)->lpVtbl->LoadTexture(This,srgb_mode)
+#define IWineD3DSurface_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DSurface_SaveSnapshot(This,filename) (This)->lpVtbl->SaveSnapshot(This,filename)
+#define IWineD3DSurface_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#define IWineD3DSurface_GetData(This) (This)->lpVtbl->GetData(This)
+#define IWineD3DSurface_SetFormat(This,format) (This)->lpVtbl->SetFormat(This,format)
+#define IWineD3DSurface_PrivateSetup(This) (This)->lpVtbl->PrivateSetup(This)
+#define IWineD3DSurface_ModifyLocation(This,location,persistent) (This)->lpVtbl->ModifyLocation(This,location,persistent)
+#define IWineD3DSurface_LoadLocation(This,location,rect) (This)->lpVtbl->LoadLocation(This,location,rect)
+#define IWineD3DSurface_GetImplType(This) (This)->lpVtbl->GetImplType(This)
+#define IWineD3DSurface_DrawOverlay(This) (This)->lpVtbl->DrawOverlay(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetContainer_Proxy(
+    IWineD3DSurface* This,
+    REFIID riid,
+    void **container);
+void __RPC_STUB IWineD3DSurface_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDesc_Proxy(
+    IWineD3DSurface* This,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DSurface_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LockRect_Proxy(
+    IWineD3DSurface* This,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UnlockRect_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDC_Proxy(
+    IWineD3DSurface* This,
+    HDC *dc);
+void __RPC_STUB IWineD3DSurface_GetDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_ReleaseDC_Proxy(
+    IWineD3DSurface* This,
+    HDC dc);
+void __RPC_STUB IWineD3DSurface_ReleaseDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Flip_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DSurface *override,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_Flip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Blt_Proxy(
+    IWineD3DSurface* This,
+    const RECT *dst_rect,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    DWORD flags,
+    const WINEDDBLTFX *blt_fx,
+    WINED3DTEXTUREFILTERTYPE filter);
+void __RPC_STUB IWineD3DSurface_Blt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetBltStatus_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetBltStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetFlipStatus_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetFlipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_IsLost_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_IsLost_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Restore_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_Restore_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_BltFast_Proxy(
+    IWineD3DSurface* This,
+    DWORD dst_x,
+    DWORD dst_y,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    DWORD trans);
+void __RPC_STUB IWineD3DSurface_BltFast_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetPalette_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DPalette **palette);
+void __RPC_STUB IWineD3DSurface_GetPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetPalette_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DPalette *palette);
+void __RPC_STUB IWineD3DSurface_SetPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_RealizePalette_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_RealizePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetColorKey_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags,
+    const WINEDDCOLORKEY *color_key);
+void __RPC_STUB IWineD3DSurface_SetColorKey_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DSurface_GetPitch_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetPitch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetMem_Proxy(
+    IWineD3DSurface* This,
+    void *mem);
+void __RPC_STUB IWineD3DSurface_SetMem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetOverlayPosition_Proxy(
+    IWineD3DSurface* This,
+    LONG x,
+    LONG y);
+void __RPC_STUB IWineD3DSurface_SetOverlayPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetOverlayPosition_Proxy(
+    IWineD3DSurface* This,
+    LONG *x,
+    LONG *y);
+void __RPC_STUB IWineD3DSurface_GetOverlayPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlayZOrder_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags,
+    IWineD3DSurface *ref);
+void __RPC_STUB IWineD3DSurface_UpdateOverlayZOrder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlay_Proxy(
+    IWineD3DSurface* This,
+    const RECT *src_rect,
+    IWineD3DSurface *dst_surface,
+    const RECT *dst_rect,
+    DWORD flags,
+    const WINEDDOVERLAYFX *fx);
+void __RPC_STUB IWineD3DSurface_UpdateOverlay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetClipper_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DClipper *clipper);
+void __RPC_STUB IWineD3DSurface_SetClipper_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetClipper_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DClipper **clipper);
+void __RPC_STUB IWineD3DSurface_GetClipper_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadTexture_Proxy(
+    IWineD3DSurface* This,
+    BOOL srgb_mode);
+void __RPC_STUB IWineD3DSurface_LoadTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_BindTexture_Proxy(
+    IWineD3DSurface* This,
+    BOOL srgb);
+void __RPC_STUB IWineD3DSurface_BindTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SaveSnapshot_Proxy(
+    IWineD3DSurface* This,
+    const char *filename);
+void __RPC_STUB IWineD3DSurface_SaveSnapshot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetContainer_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DBase *container);
+void __RPC_STUB IWineD3DSurface_SetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+const void * STDMETHODCALLTYPE IWineD3DSurface_GetData_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetFormat_Proxy(
+    IWineD3DSurface* This,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3DSurface_SetFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_PrivateSetup_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_PrivateSetup_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_ModifyLocation_Proxy(
+    IWineD3DSurface* This,
+    DWORD location,
+    BOOL persistent);
+void __RPC_STUB IWineD3DSurface_ModifyLocation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadLocation_Proxy(
+    IWineD3DSurface* This,
+    DWORD location,
+    const RECT *rect);
+void __RPC_STUB IWineD3DSurface_LoadLocation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DSURFTYPE STDMETHODCALLTYPE IWineD3DSurface_GetImplType_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetImplType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_DrawOverlay_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_DrawOverlay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DSurface_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolume interface
+ */
+#ifndef __IWineD3DVolume_INTERFACE_DEFINED__
+#define __IWineD3DVolume_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolume, 0x24769ed8, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolume : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        REFIID riid,
+        void **container) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DVOLUME_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockBox(
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+        int gl_level,
+        BOOL srgb_mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainer(
+        IWineD3DBase *container) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVolume* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVolume* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVolume* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVolume* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DVolume* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DVolume* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DVolume* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DVolume* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DVolume* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DVolume methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IWineD3DVolume* This,
+        REFIID riid,
+        void **container);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DVolume* This,
+        WINED3DVOLUME_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *LockBox)(
+        IWineD3DVolume* This,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+        IWineD3DVolume* This);
+
+    HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+        IWineD3DVolume* This,
+        int gl_level,
+        BOOL srgb_mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainer)(
+        IWineD3DVolume* This,
+        IWineD3DBase *container);
+
+    END_INTERFACE
+} IWineD3DVolumeVtbl;
+interface IWineD3DVolume {
+    CONST_VTBL IWineD3DVolumeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolume_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolume_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolume_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolume_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolume_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolume_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolume_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolume_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolume_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolume_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DVolume methods ***/
+#define IWineD3DVolume_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DVolume_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DVolume_LockBox(This,locked_box,box,flags) (This)->lpVtbl->LockBox(This,locked_box,box,flags)
+#define IWineD3DVolume_UnlockBox(This) (This)->lpVtbl->UnlockBox(This)
+#define IWineD3DVolume_LoadTexture(This,gl_level,srgb_mode) (This)->lpVtbl->LoadTexture(This,gl_level,srgb_mode)
+#define IWineD3DVolume_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetContainer_Proxy(
+    IWineD3DVolume* This,
+    REFIID riid,
+    void **container);
+void __RPC_STUB IWineD3DVolume_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetDesc_Proxy(
+    IWineD3DVolume* This,
+    WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolume_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LockBox_Proxy(
+    IWineD3DVolume* This,
+    WINED3DLOCKED_BOX *locked_box,
+    const WINED3DBOX *box,
+    DWORD flags);
+void __RPC_STUB IWineD3DVolume_LockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_UnlockBox_Proxy(
+    IWineD3DVolume* This);
+void __RPC_STUB IWineD3DVolume_UnlockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LoadTexture_Proxy(
+    IWineD3DVolume* This,
+    int gl_level,
+    BOOL srgb_mode);
+void __RPC_STUB IWineD3DVolume_LoadTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_SetContainer_Proxy(
+    IWineD3DVolume* This,
+    IWineD3DBase *container);
+void __RPC_STUB IWineD3DVolume_SetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVolume_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseTexture interface
+ */
+#ifndef __IWineD3DBaseTexture_INTERFACE_DEFINED__
+#define __IWineD3DBaseTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseTexture, 0x3c2aebf6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseTexture : public IWineD3DResource
+{
+    virtual DWORD STDMETHODCALLTYPE SetLOD(
+        DWORD new_lod) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetLOD(
+        ) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetLevelCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAutoGenFilterType(
+        WINED3DTEXTUREFILTERTYPE filter_type) = 0;
+
+    virtual WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE GetAutoGenFilterType(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE GenerateMipSubLevels(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE SetDirty(
+        BOOL dirty) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE GetDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindTexture(
+        BOOL srgb) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetTextureDimensions(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE IsCondNP2(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBaseTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBaseTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBaseTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBaseTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DBaseTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DBaseTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DBaseTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DBaseTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DBaseTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DBaseTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DBaseTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DBaseTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DBaseTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DBaseTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DBaseTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DBaseTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DBaseTexture* This);
+
+    END_INTERFACE
+} IWineD3DBaseTextureVtbl;
+interface IWineD3DBaseTexture {
+    CONST_VTBL IWineD3DBaseTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBaseTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBaseTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBaseTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBaseTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBaseTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBaseTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBaseTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBaseTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DBaseTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DBaseTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DBaseTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DBaseTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DBaseTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DBaseTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DBaseTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DBaseTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DBaseTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DBaseTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DBaseTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_SetLOD_Proxy(
+    IWineD3DBaseTexture* This,
+    DWORD new_lod);
+void __RPC_STUB IWineD3DBaseTexture_SetLOD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLOD_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLOD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLevelCount_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLevelCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_SetAutoGenFilterType_Proxy(
+    IWineD3DBaseTexture* This,
+    WINED3DTEXTUREFILTERTYPE filter_type);
+void __RPC_STUB IWineD3DBaseTexture_SetAutoGenFilterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE IWineD3DBaseTexture_GetAutoGenFilterType_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetAutoGenFilterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DBaseTexture_GenerateMipSubLevels_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GenerateMipSubLevels_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_SetDirty_Proxy(
+    IWineD3DBaseTexture* This,
+    BOOL dirty);
+void __RPC_STUB IWineD3DBaseTexture_SetDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_GetDirty_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_BindTexture_Proxy(
+    IWineD3DBaseTexture* This,
+    BOOL srgb);
+void __RPC_STUB IWineD3DBaseTexture_BindTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DBaseTexture_GetTextureDimensions_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetTextureDimensions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_IsCondNP2_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_IsCondNP2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBaseTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DTexture interface
+ */
+#ifndef __IWineD3DTexture_INTERFACE_DEFINED__
+#define __IWineD3DTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DTexture, 0x3e72cc1c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceLevel(
+        UINT level,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+        const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DTexture* This);
+
+    /*** IWineD3DTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DTexture* This,
+        UINT level,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceLevel)(
+        IWineD3DTexture* This,
+        UINT level,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DTexture* This,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DTexture* This,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+        IWineD3DTexture* This,
+        const RECT *dirty_rect);
+
+    END_INTERFACE
+} IWineD3DTextureVtbl;
+interface IWineD3DTexture {
+    CONST_VTBL IWineD3DTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DTexture methods ***/
+#define IWineD3DTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DTexture_GetSurfaceLevel(This,level,surface) (This)->lpVtbl->GetSurfaceLevel(This,level,surface)
+#define IWineD3DTexture_LockRect(This,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,level,locked_rect,rect,flags)
+#define IWineD3DTexture_UnlockRect(This,level) (This)->lpVtbl->UnlockRect(This,level)
+#define IWineD3DTexture_AddDirtyRect(This,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetLevelDesc_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetSurfaceLevel_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DTexture_GetSurfaceLevel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_LockRect_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DTexture_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_UnlockRect_Proxy(
+    IWineD3DTexture* This,
+    UINT level);
+void __RPC_STUB IWineD3DTexture_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_AddDirtyRect_Proxy(
+    IWineD3DTexture* This,
+    const RECT *dirty_rect);
+void __RPC_STUB IWineD3DTexture_AddDirtyRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DCubeTexture interface
+ */
+#ifndef __IWineD3DCubeTexture_INTERFACE_DEFINED__
+#define __IWineD3DCubeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DCubeTexture, 0x41752900, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DCubeTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCubeMapSurface(
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        WINED3DCUBEMAP_FACES face,
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+        WINED3DCUBEMAP_FACES face,
+        const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DCubeTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DCubeTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DCubeTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DCubeTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DCubeTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DCubeTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DCubeTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DCubeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DCubeTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DCubeTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DCubeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DCubeTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DCubeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DCubeTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DCubeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DCubeTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DCubeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DCubeTexture* This);
+
+    /*** IWineD3DCubeTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DCubeTexture* This,
+        UINT level,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetCubeMapSurface)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        const RECT *dirty_rect);
+
+    END_INTERFACE
+} IWineD3DCubeTextureVtbl;
+interface IWineD3DCubeTexture {
+    CONST_VTBL IWineD3DCubeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DCubeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DCubeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DCubeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DCubeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DCubeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DCubeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DCubeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DCubeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DCubeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DCubeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DCubeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DCubeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DCubeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DCubeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DCubeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DCubeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DCubeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DCubeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DCubeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DCubeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DCubeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DCubeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DCubeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DCubeTexture methods ***/
+#define IWineD3DCubeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DCubeTexture_GetCubeMapSurface(This,face,level,surface) (This)->lpVtbl->GetCubeMapSurface(This,face,level,surface)
+#define IWineD3DCubeTexture_LockRect(This,face,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,face,level,locked_rect,rect,flags)
+#define IWineD3DCubeTexture_UnlockRect(This,face,level) (This)->lpVtbl->UnlockRect(This,face,level)
+#define IWineD3DCubeTexture_AddDirtyRect(This,face,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,face,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetLevelDesc_Proxy(
+    IWineD3DCubeTexture* This,
+    UINT level,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DCubeTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetCubeMapSurface_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DCubeTexture_GetCubeMapSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_LockRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DCubeTexture_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_UnlockRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level);
+void __RPC_STUB IWineD3DCubeTexture_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_AddDirtyRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    const RECT *dirty_rect);
+void __RPC_STUB IWineD3DCubeTexture_AddDirtyRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DCubeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture interface
+ */
+#ifndef __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+#define __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolumeTexture, 0x7b39470c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolumeTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DVOLUME_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVolumeLevel(
+        UINT level,
+        IWineD3DVolume **volume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockBox(
+        UINT level,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyBox(
+        const WINED3DBOX *dirty_box) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVolumeTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVolumeTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVolumeTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVolumeTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DVolumeTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DVolumeTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DVolumeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DVolumeTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DVolumeTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DVolumeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DVolumeTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DVolumeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DVolumeTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DVolumeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DVolumeTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DVolumeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DVolumeTexture* This);
+
+    /*** IWineD3DVolumeTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        WINED3DVOLUME_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        IWineD3DVolume **volume);
+
+    HRESULT (STDMETHODCALLTYPE *LockBox)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+        IWineD3DVolumeTexture* This,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyBox)(
+        IWineD3DVolumeTexture* This,
+        const WINED3DBOX *dirty_box);
+
+    END_INTERFACE
+} IWineD3DVolumeTextureVtbl;
+interface IWineD3DVolumeTexture {
+    CONST_VTBL IWineD3DVolumeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolumeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolumeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolumeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolumeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolumeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolumeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolumeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolumeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolumeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolumeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolumeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolumeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DVolumeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DVolumeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DVolumeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DVolumeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DVolumeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DVolumeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DVolumeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DVolumeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DVolumeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DVolumeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DVolumeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DVolumeTexture methods ***/
+#define IWineD3DVolumeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DVolumeTexture_GetVolumeLevel(This,level,volume) (This)->lpVtbl->GetVolumeLevel(This,level,volume)
+#define IWineD3DVolumeTexture_LockBox(This,level,locked_box,box,flags) (This)->lpVtbl->LockBox(This,level,locked_box,box,flags)
+#define IWineD3DVolumeTexture_UnlockBox(This,level) (This)->lpVtbl->UnlockBox(This,level)
+#define IWineD3DVolumeTexture_AddDirtyBox(This,dirty_box) (This)->lpVtbl->AddDirtyBox(This,dirty_box)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetLevelDesc_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolumeTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetVolumeLevel_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DVolumeTexture_GetVolumeLevel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_LockBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    WINED3DLOCKED_BOX *locked_box,
+    const WINED3DBOX *box,
+    DWORD flags);
+void __RPC_STUB IWineD3DVolumeTexture_LockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_UnlockBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level);
+void __RPC_STUB IWineD3DVolumeTexture_UnlockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_AddDirtyBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    const WINED3DBOX *dirty_box);
+void __RPC_STUB IWineD3DVolumeTexture_AddDirtyBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVolumeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration interface
+ */
+#ifndef __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+#define __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexDeclaration, 0x7cd55be6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexDeclaration : public IWineD3DBase
+{
+};
+#else
+typedef struct IWineD3DVertexDeclarationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVertexDeclaration* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVertexDeclaration* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVertexDeclaration* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVertexDeclaration* This,
+        IUnknown **parent);
+
+    END_INTERFACE
+} IWineD3DVertexDeclarationVtbl;
+interface IWineD3DVertexDeclaration {
+    CONST_VTBL IWineD3DVertexDeclarationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexDeclaration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexDeclaration_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexDeclaration_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexDeclaration_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DVertexDeclaration_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DStateBlock interface
+ */
+#ifndef __IWineD3DStateBlock_INTERFACE_DEFINED__
+#define __IWineD3DStateBlock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DStateBlock, 0x83b073ce, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DStateBlock : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Capture(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Apply(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitStartupStateBlock(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DStateBlockVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DStateBlock* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DStateBlock* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DStateBlock* This);
+
+    /*** IWineD3DStateBlock methods ***/
+    HRESULT (STDMETHODCALLTYPE *Capture)(
+        IWineD3DStateBlock* This);
+
+    HRESULT (STDMETHODCALLTYPE *Apply)(
+        IWineD3DStateBlock* This);
+
+    HRESULT (STDMETHODCALLTYPE *InitStartupStateBlock)(
+        IWineD3DStateBlock* This);
+
+    END_INTERFACE
+} IWineD3DStateBlockVtbl;
+interface IWineD3DStateBlock {
+    CONST_VTBL IWineD3DStateBlockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DStateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DStateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DStateBlock_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DStateBlock methods ***/
+#define IWineD3DStateBlock_Capture(This) (This)->lpVtbl->Capture(This)
+#define IWineD3DStateBlock_Apply(This) (This)->lpVtbl->Apply(This)
+#define IWineD3DStateBlock_InitStartupStateBlock(This) (This)->lpVtbl->InitStartupStateBlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Capture_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Capture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Apply_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Apply_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_InitStartupStateBlock_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_InitStartupStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DStateBlock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DQuery interface
+ */
+#ifndef __IWineD3DQuery_INTERFACE_DEFINED__
+#define __IWineD3DQuery_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DQuery, 0x905ddbac, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DQuery : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetData(
+        void *data,
+        DWORD data_size,
+        DWORD flags) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetDataSize(
+        ) = 0;
+
+    virtual WINED3DQUERYTYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Issue(
+        DWORD flags) = 0;
+
+};
+#else
+typedef struct IWineD3DQueryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DQuery* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DQuery* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DQuery* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DQuery* This,
+        IUnknown **parent);
+
+    /*** IWineD3DQuery methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IWineD3DQuery* This,
+        void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    DWORD (STDMETHODCALLTYPE *GetDataSize)(
+        IWineD3DQuery* This);
+
+    WINED3DQUERYTYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DQuery* This);
+
+    HRESULT (STDMETHODCALLTYPE *Issue)(
+        IWineD3DQuery* This,
+        DWORD flags);
+
+    END_INTERFACE
+} IWineD3DQueryVtbl;
+interface IWineD3DQuery {
+    CONST_VTBL IWineD3DQueryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DQuery_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DQuery_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DQuery methods ***/
+#define IWineD3DQuery_GetData(This,data,data_size,flags) (This)->lpVtbl->GetData(This,data,data_size,flags)
+#define IWineD3DQuery_GetDataSize(This) (This)->lpVtbl->GetDataSize(This)
+#define IWineD3DQuery_GetType(This) (This)->lpVtbl->GetType(This)
+#define IWineD3DQuery_Issue(This,flags) (This)->lpVtbl->Issue(This,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_GetData_Proxy(
+    IWineD3DQuery* This,
+    void *data,
+    DWORD data_size,
+    DWORD flags);
+void __RPC_STUB IWineD3DQuery_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DQuery_GetDataSize_Proxy(
+    IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetDataSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DQUERYTYPE STDMETHODCALLTYPE IWineD3DQuery_GetType_Proxy(
+    IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_Issue_Proxy(
+    IWineD3DQuery* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DQuery_Issue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DQuery_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSwapChain interface
+ */
+#ifndef __IWineD3DSwapChain_INTERFACE_DEFINED__
+#define __IWineD3DSwapChain_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSwapChain, 0x34d01b10, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSwapChain : public IWineD3DBase
+{
+    virtual void STDMETHODCALLTYPE Destroy(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDevice(
+        IWineD3DDevice **device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Present(
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDestWindowOverride(
+        HWND window) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+        IWineD3DSurface *dst_surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+        WINED3DRASTER_STATUS *raster_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPresentParameters(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGammaRamp(
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGammaRamp(
+        WINED3DGAMMARAMP *ramp) = 0;
+
+};
+#else
+typedef struct IWineD3DSwapChainVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DSwapChain* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DSwapChain* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DSwapChain* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DSwapChain* This,
+        IUnknown **parent);
+
+    /*** IWineD3DSwapChain methods ***/
+    void (STDMETHODCALLTYPE *Destroy)(
+        IWineD3DSwapChain* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        IWineD3DSwapChain* This,
+        IWineD3DDevice **device);
+
+    HRESULT (STDMETHODCALLTYPE *Present)(
+        IWineD3DSwapChain* This,
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetDestWindowOverride)(
+        IWineD3DSwapChain* This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+        IWineD3DSwapChain* This,
+        IWineD3DSurface *dst_surface);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+        IWineD3DSwapChain* This,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+        IWineD3DSwapChain* This,
+        WINED3DRASTER_STATUS *raster_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+        IWineD3DSwapChain* This,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPresentParameters)(
+        IWineD3DSwapChain* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetGammaRamp)(
+        IWineD3DSwapChain* This,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp);
+
+    HRESULT (STDMETHODCALLTYPE *GetGammaRamp)(
+        IWineD3DSwapChain* This,
+        WINED3DGAMMARAMP *ramp);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IWineD3DSwapChain* This);
+
+    HRESULT (STDMETHODCALLTYPE *PresentRt)(
+        IWineD3DSwapChain* This,
+        IWineD3DSurface* surf);
+#endif
+    END_INTERFACE
+} IWineD3DSwapChainVtbl;
+interface IWineD3DSwapChain {
+    CONST_VTBL IWineD3DSwapChainVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSwapChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSwapChain_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSwapChain_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSwapChain_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DSwapChain methods ***/
+#define IWineD3DSwapChain_Destroy(This) (This)->lpVtbl->Destroy(This)
+#define IWineD3DSwapChain_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#define IWineD3DSwapChain_Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags)
+#define IWineD3DSwapChain_SetDestWindowOverride(This,window) (This)->lpVtbl->SetDestWindowOverride(This,window)
+#define IWineD3DSwapChain_GetFrontBufferData(This,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,dst_surface)
+#define IWineD3DSwapChain_GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DSwapChain_GetRasterStatus(This,raster_status) (This)->lpVtbl->GetRasterStatus(This,raster_status)
+#define IWineD3DSwapChain_GetDisplayMode(This,mode) (This)->lpVtbl->GetDisplayMode(This,mode)
+#define IWineD3DSwapChain_GetPresentParameters(This,present_parameters) (This)->lpVtbl->GetPresentParameters(This,present_parameters)
+#define IWineD3DSwapChain_SetGammaRamp(This,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,flags,ramp)
+#define IWineD3DSwapChain_GetGammaRamp(This,ramp) (This)->lpVtbl->GetGammaRamp(This,ramp)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DSwapChain_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DSwapChain_PresentRt(This,surf) (This)->lpVtbl->PresentRt(This,surf)
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DSwapChain_Destroy_Proxy(
+    IWineD3DSwapChain* This);
+void __RPC_STUB IWineD3DSwapChain_Destroy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDevice_Proxy(
+    IWineD3DSwapChain* This,
+    IWineD3DDevice **device);
+void __RPC_STUB IWineD3DSwapChain_GetDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_Present_Proxy(
+    IWineD3DSwapChain* This,
+    const RECT *src_rect,
+    const RECT *dst_rect,
+    HWND dst_window_override,
+    const RGNDATA *dirty_region,
+    DWORD flags);
+void __RPC_STUB IWineD3DSwapChain_Present_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetDestWindowOverride_Proxy(
+    IWineD3DSwapChain* This,
+    HWND window);
+void __RPC_STUB IWineD3DSwapChain_SetDestWindowOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetFrontBufferData_Proxy(
+    IWineD3DSwapChain* This,
+    IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DSwapChain_GetFrontBufferData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetBackBuffer_Proxy(
+    IWineD3DSwapChain* This,
+    UINT backbuffer_idx,
+    WINED3DBACKBUFFER_TYPE backbuffer_type,
+    IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DSwapChain_GetBackBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetRasterStatus_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DSwapChain_GetRasterStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDisplayMode_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DSwapChain_GetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetPresentParameters_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DSwapChain_GetPresentParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetGammaRamp_Proxy(
+    IWineD3DSwapChain* This,
+    DWORD flags,
+    const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_SetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetGammaRamp_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_GetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DSwapChain_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBuffer interface
+ */
+#ifndef __IWineD3DBuffer_INTERFACE_DEFINED__
+#define __IWineD3DBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBuffer, 0xb3f028e8, 0x1a40, 0x4ab3, 0x92,0x92, 0x5b,0xf6,0xcf,0xd8,0x02,0x09);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBuffer : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE Map(
+        UINT offset,
+        UINT size,
+        BYTE **data,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unmap(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DBUFFER_DESC *desc) = 0;
+
+};
+#else
+typedef struct IWineD3DBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBuffer* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBuffer* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DBuffer* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DBuffer* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DBuffer* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DBuffer* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DBuffer* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Map)(
+        IWineD3DBuffer* This,
+        UINT offset,
+        UINT size,
+        BYTE **data,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *Unmap)(
+        IWineD3DBuffer* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DBuffer* This,
+        WINED3DBUFFER_DESC *desc);
+
+    END_INTERFACE
+} IWineD3DBufferVtbl;
+interface IWineD3DBuffer {
+    CONST_VTBL IWineD3DBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBuffer_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBuffer_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBuffer_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBuffer_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBuffer_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBuffer_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBuffer_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBuffer_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBuffer_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBuffer methods ***/
+#define IWineD3DBuffer_Map(This,offset,size,data,flags) (This)->lpVtbl->Map(This,offset,size,data,flags)
+#define IWineD3DBuffer_Unmap(This) (This)->lpVtbl->Unmap(This)
+#define IWineD3DBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Map_Proxy(
+    IWineD3DBuffer* This,
+    UINT offset,
+    UINT size,
+    BYTE **data,
+    DWORD flags);
+void __RPC_STUB IWineD3DBuffer_Map_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Unmap_Proxy(
+    IWineD3DBuffer* This);
+void __RPC_STUB IWineD3DBuffer_Unmap_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_GetDesc_Proxy(
+    IWineD3DBuffer* This,
+    WINED3DBUFFER_DESC *desc);
+void __RPC_STUB IWineD3DBuffer_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseShader interface
+ */
+#ifndef __IWineD3DBaseShader_INTERFACE_DEFINED__
+#define __IWineD3DBaseShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseShader, 0xeac93065, 0xa4df, 0x446f, 0x86,0xa1, 0x9e,0xf2,0xbc,0xa4,0x0a,0x3c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseShader : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFunction(
+        void *data,
+        UINT *data_size) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBaseShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBaseShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBaseShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBaseShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DBaseShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DBaseShaderVtbl;
+interface IWineD3DBaseShader {
+    CONST_VTBL IWineD3DBaseShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DBaseShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBaseShader_GetFunction_Proxy(
+    IWineD3DBaseShader* This,
+    void *data,
+    UINT *data_size);
+void __RPC_STUB IWineD3DBaseShader_GetFunction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBaseShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexShader interface
+ */
+#ifndef __IWineD3DVertexShader_INTERFACE_DEFINED__
+#define __IWineD3DVertexShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexShader, 0x7f7a2b60, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexShader : public IWineD3DBaseShader
+{
+    virtual HRESULT STDMETHODCALLTYPE SetLocalConstantsF(
+        UINT start_idx,
+        const float *src_data,
+        UINT vector4f_count) = 0;
+
+};
+#else
+typedef struct IWineD3DVertexShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVertexShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVertexShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVertexShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVertexShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DVertexShader* This,
+        void *data,
+        UINT *data_size);
+
+    /*** IWineD3DVertexShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetLocalConstantsF)(
+        IWineD3DVertexShader* This,
+        UINT start_idx,
+        const float *src_data,
+        UINT vector4f_count);
+
+    END_INTERFACE
+} IWineD3DVertexShaderVtbl;
+interface IWineD3DVertexShader {
+    CONST_VTBL IWineD3DVertexShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DVertexShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+/*** IWineD3DVertexShader methods ***/
+#define IWineD3DVertexShader_SetLocalConstantsF(This,start_idx,src_data,vector4f_count) (This)->lpVtbl->SetLocalConstantsF(This,start_idx,src_data,vector4f_count)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVertexShader_SetLocalConstantsF_Proxy(
+    IWineD3DVertexShader* This,
+    UINT start_idx,
+    const float *src_data,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DVertexShader_SetLocalConstantsF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVertexShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DGeometryShader interface
+ */
+#ifndef __IWineD3DGeometryShader_INTERFACE_DEFINED__
+#define __IWineD3DGeometryShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DGeometryShader, 0x8276c113, 0x388b, 0x49d1, 0xad,0x8b, 0xc9,0xdd,0x8b,0xcb,0xab,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DGeometryShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DGeometryShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DGeometryShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DGeometryShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DGeometryShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DGeometryShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DGeometryShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DGeometryShaderVtbl;
+interface IWineD3DGeometryShader {
+    CONST_VTBL IWineD3DGeometryShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DGeometryShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DGeometryShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DGeometryShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DGeometryShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DGeometryShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DGeometryShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPixelShader interface
+ */
+#ifndef __IWineD3DPixelShader_INTERFACE_DEFINED__
+#define __IWineD3DPixelShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPixelShader, 0x818503da, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPixelShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DPixelShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DPixelShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DPixelShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DPixelShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DPixelShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DPixelShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DPixelShaderVtbl;
+interface IWineD3DPixelShader {
+    CONST_VTBL IWineD3DPixelShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPixelShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPixelShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPixelShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPixelShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DPixelShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DPixelShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DDevice interface
+ */
+#ifndef __IWineD3DDevice_INTERFACE_DEFINED__
+#define __IWineD3DDevice_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDevice, 0x6d10a2ce, 0x09d0, 0x4a53, 0xa4,0x27, 0x11,0x38,0x8f,0x9f,0x8c,0xa5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDevice : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateBuffer(
+        struct wined3d_buffer_desc *desc,
+        const void *data,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        IWineD3DBuffer **buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexBuffer(
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **vertex_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateIndexBuffer(
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **index_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStateBlock(
+        WINED3DSTATEBLOCKTYPE type,
+        IWineD3DStateBlock **stateblock,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        BOOL lockable,
+        BOOL discard,
+        UINT level,
+        IWineD3DSurface **surface,
+        DWORD usage,
+        WINED3DPOOL pool,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        WINED3DSURFTYPE surface_type,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRendertargetView(
+        IWineD3DResource *resource,
+        IUnknown *parent,
+        IWineD3DRendertargetView **rendertarget_view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTexture(
+        UINT width,
+        UINT height,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolumeTexture(
+        UINT width,
+        UINT height,
+        UINT depth,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolumeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pavClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+        UINT width,
+        UINT height,
+        UINT depth,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolume **volume,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCubeTexture(
+        UINT edge_length,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DCubeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateQuery(
+        WINED3DQUERYTYPE type,
+        IWineD3DQuery **query,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain,
+        IUnknown *parent,
+        WINED3DSURFTYPE surface_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclaration(
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        const WINED3DVERTEXELEMENT *elements,
+        UINT element_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclarationFromFVF(
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        DWORD fvf) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexShader(
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DVertexShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader(
+        const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DGeometryShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePixelShader(
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DPixelShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePalette(
+        DWORD flags,
+        const PALETTEENTRY *palette_entry,
+        IWineD3DPalette **palette,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Init3D(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitGDI(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Uninit3D(
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UninitGDI(
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+    virtual void STDMETHODCALLTYPE SetMultithreaded(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EvictManagedResources(
+        ) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetAvailableTextureMem(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+        UINT swapchain_idx,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+        WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+        WINED3DCAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDirect3D(
+        IWineD3D **d3d) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+        UINT swapchain_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDisplayMode(
+        UINT swapchain_idx,
+        const WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetNumberOfSwapChains(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+        UINT swapchain_idx,
+        WINED3DRASTER_STATUS *raster_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSwapChain(
+        UINT swapchain_idx,
+        IWineD3DSwapChain **swapchain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDialogBoxMode(
+        BOOL enable_dialogs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCursorProperties(
+        UINT x_hotspot,
+        UINT y_hotspot,
+        IWineD3DSurface *cursor_surface) = 0;
+
+    virtual void STDMETHODCALLTYPE SetCursorPosition(
+        int x_screen_space,
+        int y_screen_space,
+        DWORD flags) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE ShowCursor(
+        BOOL show) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipPlane(
+        DWORD plane_idx,
+        const float *plane) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipPlane(
+        DWORD plane_idx,
+        float *plane) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipStatus(
+        const WINED3DCLIPSTATUS *clip_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipStatus(
+        WINED3DCLIPSTATUS *clip_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCurrentTexturePalette(
+        UINT palette_number) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentTexturePalette(
+        UINT *palette_number) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDepthStencilSurface(
+        IWineD3DSurface *depth_stencil) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDepthStencilSurface(
+        IWineD3DSurface **depth_stencil) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGammaRamp(
+        UINT swapchain_idx,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual void STDMETHODCALLTYPE GetGammaRamp(
+        UINT swapchain_idx,
+        WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIndexBuffer(
+        IWineD3DBuffer *index_buffer,
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexBuffer(
+        IWineD3DBuffer **index_buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBaseVertexIndex(
+        INT base_index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBaseVertexIndex(
+        INT *base_index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLight(
+        DWORD light_idx,
+        const WINED3DLIGHT *light) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLight(
+        DWORD light_idx,
+        WINED3DLIGHT *light) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLightEnable(
+        DWORD light_idx,
+        BOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLightEnable(
+        DWORD light_idx,
+        BOOL *enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMaterial(
+        const WINED3DMATERIAL *material) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaterial(
+        WINED3DMATERIAL *material) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetNPatchMode(
+        float segments) = 0;
+
+    virtual float STDMETHODCALLTYPE GetNPatchMode(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPaletteEntries(
+        UINT palette_number,
+        const PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPaletteEntries(
+        UINT palette_number,
+        PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShader(
+        IWineD3DPixelShader *shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShader(
+        IWineD3DPixelShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantB(
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantB(
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantI(
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantI(
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantF(
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantF(
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderState(
+        WINED3DRENDERSTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderState(
+        WINED3DRENDERSTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderTarget(
+        DWORD render_target_idx,
+        IWineD3DSurface *render_target,
+        BOOL set_viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderTarget(
+        DWORD render_target_idx,
+        IWineD3DSurface **render_target) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrontBackBuffers(
+        IWineD3DSurface *front,
+        IWineD3DSurface *back) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSamplerState(
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSamplerState(
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetScissorRect(
+        const RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetScissorRect(
+        RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSoftwareVertexProcessing(
+        BOOL software) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE GetSoftwareVertexProcessing(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSource(
+        UINT stream_idx,
+        IWineD3DBuffer *buffer,
+        UINT offset,
+        UINT stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSource(
+        UINT stream_idx,
+        IWineD3DBuffer **buffer,
+        UINT *offset,
+        UINT *stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSourceFreq(
+        UINT stream_idx,
+        UINT divider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSourceFreq(
+        UINT stream_idx,
+        UINT *divider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTexture(
+        DWORD stage,
+        IWineD3DBaseTexture *texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTexture(
+        DWORD stage,
+        IWineD3DBaseTexture **texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTextureStageState(
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextureStageState(
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexDeclaration(
+        IWineD3DVertexDeclaration *declaration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexDeclaration(
+        IWineD3DVertexDeclaration **declaration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShader(
+        IWineD3DVertexShader *shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShader(
+        IWineD3DVertexShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantB(
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantB(
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantI(
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantI(
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantF(
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantF(
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewport(
+        const WINED3DVIEWPORT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetViewport(
+        WINED3DVIEWPORT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MultiplyTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ValidateDevice(
+        DWORD *num_passes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessVertices(
+        UINT src_start_idx,
+        UINT dst_idx,
+        UINT vertex_count,
+        IWineD3DBuffer *dest_buffer,
+        IWineD3DVertexDeclaration *declaration,
+        DWORD flags,
+        DWORD DestFVF) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginStateBlock(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndStateBlock(
+        IWineD3DStateBlock **stateblock) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginScene(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndScene(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Present(
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        DWORD rect_count,
+        const WINED3DRECT *rects,
+        DWORD flags,
+        WINED3DCOLOR color,
+        float z,
+        DWORD stencil) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearRendertargetView(
+        IWineD3DRendertargetView *rendertarget_view,
+        const float color[4]) = 0;
+
+    virtual void STDMETHODCALLTYPE SetPrimitiveType(
+        WINED3DPRIMITIVETYPE primitive_topology) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPrimitiveType(
+        WINED3DPRIMITIVETYPE *primitive_topology) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitive(
+        UINT start_vertex,
+        UINT vertex_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitive(
+        UINT start_idx,
+        UINT index_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveUP(
+        UINT vertex_count,
+        const void *stream_data,
+        UINT stream_stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveUP(
+        UINT index_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format,
+        const void *stream_data,
+        UINT stream_stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveStrided(
+        UINT vertex_count,
+        const WineDirect3DVertexStridedData *strided_data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveStrided(
+        UINT index_count,
+        const WineDirect3DVertexStridedData *strided_data,
+        UINT vertex_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawRectPatch(
+        UINT handle,
+        const float *num_segs,
+        const WINED3DRECTPATCH_INFO *rect_patch_info) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawTriPatch(
+        UINT handle,
+        const float *num_segs,
+        const WINED3DTRIPATCH_INFO *tri_patch_info) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeletePatch(
+        UINT handle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ColorFill(
+        IWineD3DSurface *surface,
+        const WINED3DRECT *rect,
+        WINED3DCOLOR color) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateTexture(
+        IWineD3DBaseTexture *src_texture,
+        IWineD3DBaseTexture *dst_texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateSurface(
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const POINT *dst_point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+        UINT swapchain_idx,
+        IWineD3DSurface *dst_surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumResources(
+        HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+        void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceFromDC(
+        HDC dc,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AcquireFocusWindow(
+        HWND window) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseFocusWindow(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddSwapChain(
+        IWineD3DSwapChain *swapchain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveSwapChain(
+        IWineD3DSwapChain *swapchain) = 0;
+
+#ifdef VBOX_WITH_WDDM
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VolBlt(IWineD3DDevice *iface,
+            IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+            const WINED3DBOX *pSrcBoxArg,
+            const VBOXPOINT3D *pDstPoin3D
+            ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VolTexBlt(IWineD3DDevice *iface,
+            IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+            const WINED3DBOX *pSrcBoxArg,
+            const VBOXPOINT3D *pDstPoin3D
+            ) = 0;
+#endif
+};
+#else
+typedef struct IWineD3DDeviceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DDevice* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DDevice* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DDevice* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DDevice* This,
+        IUnknown **parent);
+
+    /*** IWineD3DDevice methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateBuffer)(
+        IWineD3DDevice* This,
+        struct wined3d_buffer_desc *desc,
+        const void *data,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        IWineD3DBuffer **buffer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexBuffer)(
+        IWineD3DDevice* This,
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **vertex_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateIndexBuffer)(
+        IWineD3DDevice* This,
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **index_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStateBlock)(
+        IWineD3DDevice* This,
+        WINED3DSTATEBLOCKTYPE type,
+        IWineD3DStateBlock **stateblock,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        BOOL lockable,
+        BOOL discard,
+        UINT level,
+        IWineD3DSurface **surface,
+        DWORD usage,
+        WINED3DPOOL pool,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        WINED3DSURFTYPE surface_type,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateRendertargetView)(
+        IWineD3DDevice* This,
+        IWineD3DResource *resource,
+        IUnknown *parent,
+        IWineD3DRendertargetView **rendertarget_view);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTexture)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolumeTexture)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT depth,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolumeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT depth,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolume **volume,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateCubeTexture)(
+        IWineD3DDevice* This,
+        UINT edge_length,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DCubeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateQuery)(
+        IWineD3DDevice* This,
+        WINED3DQUERYTYPE type,
+        IWineD3DQuery **query,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain,
+        IUnknown *parent,
+        WINED3DSURFTYPE surface_type);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        const WINED3DVERTEXELEMENT *elements,
+        UINT element_count);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexDeclarationFromFVF)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        DWORD fvf);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexShader)(
+        IWineD3DDevice* This,
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DVertexShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGeometryShader)(
+        IWineD3DDevice* This,
+        const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DGeometryShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePixelShader)(
+        IWineD3DDevice* This,
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DPixelShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePalette)(
+        IWineD3DDevice* This,
+        DWORD flags,
+        const PALETTEENTRY *palette_entry,
+        IWineD3DPalette **palette,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *Init3D)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *InitGDI)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *Uninit3D)(
+        IWineD3DDevice* This,
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+    HRESULT (STDMETHODCALLTYPE *UninitGDI)(
+        IWineD3DDevice* This,
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+    void (STDMETHODCALLTYPE *SetMultithreaded)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EvictManagedResources)(
+        IWineD3DDevice* This);
+
+    UINT (STDMETHODCALLTYPE *GetAvailableTextureMem)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+        IWineD3DDevice* This,
+        WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+        IWineD3DDevice* This,
+        WINED3DCAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *GetDirect3D)(
+        IWineD3DDevice* This,
+        IWineD3D **d3d);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetDisplayMode)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        const WINED3DDISPLAYMODE *mode);
+
+    UINT (STDMETHODCALLTYPE *GetNumberOfSwapChains)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DRASTER_STATUS *raster_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetSwapChain)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        IWineD3DSwapChain **swapchain);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetDialogBoxMode)(
+        IWineD3DDevice* This,
+        BOOL enable_dialogs);
+
+    HRESULT (STDMETHODCALLTYPE *SetCursorProperties)(
+        IWineD3DDevice* This,
+        UINT x_hotspot,
+        UINT y_hotspot,
+        IWineD3DSurface *cursor_surface);
+
+    void (STDMETHODCALLTYPE *SetCursorPosition)(
+        IWineD3DDevice* This,
+        int x_screen_space,
+        int y_screen_space,
+        DWORD flags);
+
+    BOOL (STDMETHODCALLTYPE *ShowCursor)(
+        IWineD3DDevice* This,
+        BOOL show);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipPlane)(
+        IWineD3DDevice* This,
+        DWORD plane_idx,
+        const float *plane);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipPlane)(
+        IWineD3DDevice* This,
+        DWORD plane_idx,
+        float *plane);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipStatus)(
+        IWineD3DDevice* This,
+        const WINED3DCLIPSTATUS *clip_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipStatus)(
+        IWineD3DDevice* This,
+        WINED3DCLIPSTATUS *clip_status);
+
+    HRESULT (STDMETHODCALLTYPE *SetCurrentTexturePalette)(
+        IWineD3DDevice* This,
+        UINT palette_number);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTexturePalette)(
+        IWineD3DDevice* This,
+        UINT *palette_number);
+
+    HRESULT (STDMETHODCALLTYPE *SetDepthStencilSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *depth_stencil);
+
+    HRESULT (STDMETHODCALLTYPE *GetDepthStencilSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface **depth_stencil);
+
+    void (STDMETHODCALLTYPE *SetGammaRamp)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp);
+
+    void (STDMETHODCALLTYPE *GetGammaRamp)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DGAMMARAMP *ramp);
+
+    HRESULT (STDMETHODCALLTYPE *SetIndexBuffer)(
+        IWineD3DDevice* This,
+        IWineD3DBuffer *index_buffer,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexBuffer)(
+        IWineD3DDevice* This,
+        IWineD3DBuffer **index_buffer);
+
+    HRESULT (STDMETHODCALLTYPE *SetBaseVertexIndex)(
+        IWineD3DDevice* This,
+        INT base_index);
+
+    HRESULT (STDMETHODCALLTYPE *GetBaseVertexIndex)(
+        IWineD3DDevice* This,
+        INT *base_index);
+
+    HRESULT (STDMETHODCALLTYPE *SetLight)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        const WINED3DLIGHT *light);
+
+    HRESULT (STDMETHODCALLTYPE *GetLight)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        WINED3DLIGHT *light);
+
+    HRESULT (STDMETHODCALLTYPE *SetLightEnable)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        BOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *GetLightEnable)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        BOOL *enable);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaterial)(
+        IWineD3DDevice* This,
+        const WINED3DMATERIAL *material);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaterial)(
+        IWineD3DDevice* This,
+        WINED3DMATERIAL *material);
+
+    HRESULT (STDMETHODCALLTYPE *SetNPatchMode)(
+        IWineD3DDevice* This,
+        float segments);
+
+    float (STDMETHODCALLTYPE *GetNPatchMode)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPaletteEntries)(
+        IWineD3DDevice* This,
+        UINT palette_number,
+        const PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IWineD3DDevice* This,
+        UINT palette_number,
+        PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShader)(
+        IWineD3DDevice* This,
+        IWineD3DPixelShader *shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShader)(
+        IWineD3DDevice* This,
+        IWineD3DPixelShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderState)(
+        IWineD3DDevice* This,
+        WINED3DRENDERSTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderState)(
+        IWineD3DDevice* This,
+        WINED3DRENDERSTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderTarget)(
+        IWineD3DDevice* This,
+        DWORD render_target_idx,
+        IWineD3DSurface *render_target,
+        BOOL set_viewport);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderTarget)(
+        IWineD3DDevice* This,
+        DWORD render_target_idx,
+        IWineD3DSurface **render_target);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrontBackBuffers)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *front,
+        IWineD3DSurface *back);
+
+    HRESULT (STDMETHODCALLTYPE *SetSamplerState)(
+        IWineD3DDevice* This,
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetSamplerState)(
+        IWineD3DDevice* This,
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetScissorRect)(
+        IWineD3DDevice* This,
+        const RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *GetScissorRect)(
+        IWineD3DDevice* This,
+        RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *SetSoftwareVertexProcessing)(
+        IWineD3DDevice* This,
+        BOOL software);
+
+    BOOL (STDMETHODCALLTYPE *GetSoftwareVertexProcessing)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSource)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        IWineD3DBuffer *buffer,
+        UINT offset,
+        UINT stride);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSource)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        IWineD3DBuffer **buffer,
+        UINT *offset,
+        UINT *stride);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSourceFreq)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        UINT divider);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSourceFreq)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        UINT *divider);
+
+    HRESULT (STDMETHODCALLTYPE *SetTexture)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        IWineD3DBaseTexture *texture);
+
+    HRESULT (STDMETHODCALLTYPE *GetTexture)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        IWineD3DBaseTexture **texture);
+
+    HRESULT (STDMETHODCALLTYPE *SetTextureStageState)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextureStageState)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *GetTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration *declaration);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShader)(
+        IWineD3DDevice* This,
+        IWineD3DVertexShader *shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShader)(
+        IWineD3DDevice* This,
+        IWineD3DVertexShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewport)(
+        IWineD3DDevice* This,
+        const WINED3DVIEWPORT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *GetViewport)(
+        IWineD3DDevice* This,
+        WINED3DVIEWPORT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *MultiplyTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *ValidateDevice)(
+        IWineD3DDevice* This,
+        DWORD *num_passes);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessVertices)(
+        IWineD3DDevice* This,
+        UINT src_start_idx,
+        UINT dst_idx,
+        UINT vertex_count,
+        IWineD3DBuffer *dest_buffer,
+        IWineD3DVertexDeclaration *declaration,
+        DWORD flags,
+        DWORD DestFVF);
+
+    HRESULT (STDMETHODCALLTYPE *BeginStateBlock)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndStateBlock)(
+        IWineD3DDevice* This,
+        IWineD3DStateBlock **stateblock);
+
+    HRESULT (STDMETHODCALLTYPE *BeginScene)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndScene)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *Present)(
+        IWineD3DDevice* This,
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IWineD3DDevice* This,
+        DWORD rect_count,
+        const WINED3DRECT *rects,
+        DWORD flags,
+        WINED3DCOLOR color,
+        float z,
+        DWORD stencil);
+
+    void (STDMETHODCALLTYPE *ClearRendertargetView)(
+        IWineD3DDevice* This,
+        IWineD3DRendertargetView *rendertarget_view,
+        const float color[4]);
+
+    void (STDMETHODCALLTYPE *SetPrimitiveType)(
+        IWineD3DDevice* This,
+        WINED3DPRIMITIVETYPE primitive_topology);
+
+    void (STDMETHODCALLTYPE *GetPrimitiveType)(
+        IWineD3DDevice* This,
+        WINED3DPRIMITIVETYPE *primitive_topology);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitive)(
+        IWineD3DDevice* This,
+        UINT start_vertex,
+        UINT vertex_count);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitive)(
+        IWineD3DDevice* This,
+        UINT start_idx,
+        UINT index_count);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitiveUP)(
+        IWineD3DDevice* This,
+        UINT vertex_count,
+        const void *stream_data,
+        UINT stream_stride);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveUP)(
+        IWineD3DDevice* This,
+        UINT index_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format,
+        const void *stream_data,
+        UINT stream_stride);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitiveStrided)(
+        IWineD3DDevice* This,
+        UINT vertex_count,
+        const WineDirect3DVertexStridedData *strided_data);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveStrided)(
+        IWineD3DDevice* This,
+        UINT index_count,
+        const WineDirect3DVertexStridedData *strided_data,
+        UINT vertex_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format);
+
+    HRESULT (STDMETHODCALLTYPE *DrawRectPatch)(
+        IWineD3DDevice* This,
+        UINT handle,
+        const float *num_segs,
+        const WINED3DRECTPATCH_INFO *rect_patch_info);
+
+    HRESULT (STDMETHODCALLTYPE *DrawTriPatch)(
+        IWineD3DDevice* This,
+        UINT handle,
+        const float *num_segs,
+        const WINED3DTRIPATCH_INFO *tri_patch_info);
+
+    HRESULT (STDMETHODCALLTYPE *DeletePatch)(
+        IWineD3DDevice* This,
+        UINT handle);
+
+    HRESULT (STDMETHODCALLTYPE *ColorFill)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *surface,
+        const WINED3DRECT *rect,
+        WINED3DCOLOR color);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateTexture)(
+        IWineD3DDevice* This,
+        IWineD3DBaseTexture *src_texture,
+        IWineD3DBaseTexture *dst_texture);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const POINT *dst_point);
+
+    HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        IWineD3DSurface *dst_surface);
+
+    HRESULT (STDMETHODCALLTYPE *EnumResources)(
+        IWineD3DDevice* This,
+        HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceFromDC)(
+        IWineD3DDevice* This,
+        HDC dc,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *AcquireFocusWindow)(
+        IWineD3DDevice* This,
+        HWND window);
+
+    void (STDMETHODCALLTYPE *ReleaseFocusWindow)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *AddSwapChain)(
+        IWineD3DDevice* This,
+        IWineD3DSwapChain *swapchain);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveSwapChain)(
+        IWineD3DDevice* This,
+        IWineD3DSwapChain *swapchain);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *VolBlt)(IWineD3DDevice *iface,
+            IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+            const WINED3DBOX *pSrcBoxArg,
+            const struct VBOXPOINT3D *pDstPoin3D
+            );
+
+    HRESULT (STDMETHODCALLTYPE *VolTexBlt)(IWineD3DDevice *iface,
+            IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+            const WINED3DBOX *pSrcBoxArg,
+            const struct VBOXPOINT3D *pDstPoin3D
+            );
+
+    HRESULT (STDMETHODCALLTYPE *FlushToHost)(
+            IWineD3DDevice *iface);
+
+    HRESULT (STDMETHODCALLTYPE *Finish)(
+        IWineD3DDevice* This);
+#endif
+
+    END_INTERFACE
+} IWineD3DDeviceVtbl;
+interface IWineD3DDevice {
+    CONST_VTBL IWineD3DDeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDevice_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DDevice_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DDevice methods ***/
+#define IWineD3DDevice_CreateBuffer(This,desc,data,parent,parent_ops,buffer) (This)->lpVtbl->CreateBuffer(This,desc,data,parent,parent_ops,buffer)
+#define IWineD3DDevice_CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops) (This)->lpVtbl->CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops) (This)->lpVtbl->CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateStateBlock(This,type,stateblock,parent) (This)->lpVtbl->CreateStateBlock(This,type,stateblock,parent)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateRendertargetView(This,resource,parent,rendertarget_view) (This)->lpVtbl->CreateRendertargetView(This,resource,parent,rendertarget_view)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateQuery(This,type,query,parent) (This)->lpVtbl->CreateQuery(This,type,query,parent)
+#define IWineD3DDevice_CreateSwapChain(This,present_parameters,swapchain,parent,surface_type) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain,parent,surface_type)
+#define IWineD3DDevice_CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count) (This)->lpVtbl->CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count)
+#define IWineD3DDevice_CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf) (This)->lpVtbl->CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf)
+#define IWineD3DDevice_CreateVertexShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateVertexShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePixelShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreatePixelShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePalette(This,flags,palette_entry,palette,parent) (This)->lpVtbl->CreatePalette(This,flags,palette_entry,palette,parent)
+#define IWineD3DDevice_Init3D(This,present_parameters) (This)->lpVtbl->Init3D(This,present_parameters)
+#define IWineD3DDevice_InitGDI(This,present_parameters) (This)->lpVtbl->InitGDI(This,present_parameters)
+#define IWineD3DDevice_Uninit3D(This,destroy_swapchain_callback) (This)->lpVtbl->Uninit3D(This,destroy_swapchain_callback)
+#define IWineD3DDevice_UninitGDI(This,destroy_swapchain_callback) (This)->lpVtbl->UninitGDI(This,destroy_swapchain_callback)
+#define IWineD3DDevice_SetMultithreaded(This) (This)->lpVtbl->SetMultithreaded(This)
+#define IWineD3DDevice_EvictManagedResources(This) (This)->lpVtbl->EvictManagedResources(This)
+#define IWineD3DDevice_GetAvailableTextureMem(This) (This)->lpVtbl->GetAvailableTextureMem(This)
+#define IWineD3DDevice_GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DDevice_GetCreationParameters(This,creation_parameters) (This)->lpVtbl->GetCreationParameters(This,creation_parameters)
+#define IWineD3DDevice_GetDeviceCaps(This,caps) (This)->lpVtbl->GetDeviceCaps(This,caps)
+#define IWineD3DDevice_GetDirect3D(This,d3d) (This)->lpVtbl->GetDirect3D(This,d3d)
+#define IWineD3DDevice_GetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->GetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_SetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->SetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_GetNumberOfSwapChains(This) (This)->lpVtbl->GetNumberOfSwapChains(This)
+#define IWineD3DDevice_GetRasterStatus(This,swapchain_idx,raster_status) (This)->lpVtbl->GetRasterStatus(This,swapchain_idx,raster_status)
+#define IWineD3DDevice_GetSwapChain(This,swapchain_idx,swapchain) (This)->lpVtbl->GetSwapChain(This,swapchain_idx,swapchain)
+#define IWineD3DDevice_Reset(This,present_parameters) (This)->lpVtbl->Reset(This,present_parameters)
+#define IWineD3DDevice_SetDialogBoxMode(This,enable_dialogs) (This)->lpVtbl->SetDialogBoxMode(This,enable_dialogs)
+#define IWineD3DDevice_SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface) (This)->lpVtbl->SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface)
+#define IWineD3DDevice_SetCursorPosition(This,x_screen_space,y_screen_space,flags) (This)->lpVtbl->SetCursorPosition(This,x_screen_space,y_screen_space,flags)
+#define IWineD3DDevice_ShowCursor(This,show) (This)->lpVtbl->ShowCursor(This,show)
+#define IWineD3DDevice_SetClipPlane(This,plane_idx,plane) (This)->lpVtbl->SetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_GetClipPlane(This,plane_idx,plane) (This)->lpVtbl->GetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_SetClipStatus(This,clip_status) (This)->lpVtbl->SetClipStatus(This,clip_status)
+#define IWineD3DDevice_GetClipStatus(This,clip_status) (This)->lpVtbl->GetClipStatus(This,clip_status)
+#define IWineD3DDevice_SetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->SetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_GetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->GetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_SetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->SetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_GetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->GetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_SetGammaRamp(This,swapchain_idx,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,swapchain_idx,flags,ramp)
+#define IWineD3DDevice_GetGammaRamp(This,swapchain_idx,ramp) (This)->lpVtbl->GetGammaRamp(This,swapchain_idx,ramp)
+#define IWineD3DDevice_SetIndexBuffer(This,index_buffer,format) (This)->lpVtbl->SetIndexBuffer(This,index_buffer,format)
+#define IWineD3DDevice_GetIndexBuffer(This,index_buffer) (This)->lpVtbl->GetIndexBuffer(This,index_buffer)
+#define IWineD3DDevice_SetBaseVertexIndex(This,base_index) (This)->lpVtbl->SetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_GetBaseVertexIndex(This,base_index) (This)->lpVtbl->GetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_SetLight(This,light_idx,light) (This)->lpVtbl->SetLight(This,light_idx,light)
+#define IWineD3DDevice_GetLight(This,light_idx,light) (This)->lpVtbl->GetLight(This,light_idx,light)
+#define IWineD3DDevice_SetLightEnable(This,light_idx,enable) (This)->lpVtbl->SetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_GetLightEnable(This,light_idx,enable) (This)->lpVtbl->GetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_SetMaterial(This,material) (This)->lpVtbl->SetMaterial(This,material)
+#define IWineD3DDevice_GetMaterial(This,material) (This)->lpVtbl->GetMaterial(This,material)
+#define IWineD3DDevice_SetNPatchMode(This,segments) (This)->lpVtbl->SetNPatchMode(This,segments)
+#define IWineD3DDevice_GetNPatchMode(This) (This)->lpVtbl->GetNPatchMode(This)
+#define IWineD3DDevice_SetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->SetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_GetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_SetPixelShader(This,shader) (This)->lpVtbl->SetPixelShader(This,shader)
+#define IWineD3DDevice_GetPixelShader(This,shader) (This)->lpVtbl->GetPixelShader(This,shader)
+#define IWineD3DDevice_SetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetRenderState(This,state,value) (This)->lpVtbl->SetRenderState(This,state,value)
+#define IWineD3DDevice_GetRenderState(This,state,value) (This)->lpVtbl->GetRenderState(This,state,value)
+#define IWineD3DDevice_SetRenderTarget(This,render_target_idx,render_target,set_viewport) (This)->lpVtbl->SetRenderTarget(This,render_target_idx,render_target,set_viewport)
+#define IWineD3DDevice_GetRenderTarget(This,render_target_idx,render_target) (This)->lpVtbl->GetRenderTarget(This,render_target_idx,render_target)
+#define IWineD3DDevice_SetFrontBackBuffers(This,front,back) (This)->lpVtbl->SetFrontBackBuffers(This,front,back)
+#define IWineD3DDevice_SetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->SetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_GetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->GetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_SetScissorRect(This,rect) (This)->lpVtbl->SetScissorRect(This,rect)
+#define IWineD3DDevice_GetScissorRect(This,rect) (This)->lpVtbl->GetScissorRect(This,rect)
+#define IWineD3DDevice_SetSoftwareVertexProcessing(This,software) (This)->lpVtbl->SetSoftwareVertexProcessing(This,software)
+#define IWineD3DDevice_GetSoftwareVertexProcessing(This) (This)->lpVtbl->GetSoftwareVertexProcessing(This)
+#define IWineD3DDevice_SetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->SetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_GetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->GetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_SetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->SetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_GetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->GetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_SetTexture(This,stage,texture) (This)->lpVtbl->SetTexture(This,stage,texture)
+#define IWineD3DDevice_GetTexture(This,stage,texture) (This)->lpVtbl->GetTexture(This,stage,texture)
+#define IWineD3DDevice_SetTextureStageState(This,stage,state,value) (This)->lpVtbl->SetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_GetTextureStageState(This,stage,state,value) (This)->lpVtbl->GetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_SetTransform(This,state,matrix) (This)->lpVtbl->SetTransform(This,state,matrix)
+#define IWineD3DDevice_GetTransform(This,state,matrix) (This)->lpVtbl->GetTransform(This,state,matrix)
+#define IWineD3DDevice_SetVertexDeclaration(This,declaration) (This)->lpVtbl->SetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_GetVertexDeclaration(This,declaration) (This)->lpVtbl->GetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_SetVertexShader(This,shader) (This)->lpVtbl->SetVertexShader(This,shader)
+#define IWineD3DDevice_GetVertexShader(This,shader) (This)->lpVtbl->GetVertexShader(This,shader)
+#define IWineD3DDevice_SetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetViewport(This,viewport) (This)->lpVtbl->SetViewport(This,viewport)
+#define IWineD3DDevice_GetViewport(This,viewport) (This)->lpVtbl->GetViewport(This,viewport)
+#define IWineD3DDevice_MultiplyTransform(This,state,matrix) (This)->lpVtbl->MultiplyTransform(This,state,matrix)
+#define IWineD3DDevice_ValidateDevice(This,num_passes) (This)->lpVtbl->ValidateDevice(This,num_passes)
+#define IWineD3DDevice_ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF) (This)->lpVtbl->ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF)
+#define IWineD3DDevice_BeginStateBlock(This) (This)->lpVtbl->BeginStateBlock(This)
+#define IWineD3DDevice_EndStateBlock(This,stateblock) (This)->lpVtbl->EndStateBlock(This,stateblock)
+#define IWineD3DDevice_BeginScene(This) (This)->lpVtbl->BeginScene(This)
+#define IWineD3DDevice_EndScene(This) (This)->lpVtbl->EndScene(This)
+#define IWineD3DDevice_Present(This,src_rect,dst_rect,dst_window_override,dirty_region) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region)
+#define IWineD3DDevice_Clear(This,rect_count,rects,flags,color,z,stencil) (This)->lpVtbl->Clear(This,rect_count,rects,flags,color,z,stencil)
+#define IWineD3DDevice_ClearRendertargetView(This,rendertarget_view,color) (This)->lpVtbl->ClearRendertargetView(This,rendertarget_view,color)
+#define IWineD3DDevice_SetPrimitiveType(This,primitive_topology) (This)->lpVtbl->SetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_GetPrimitiveType(This,primitive_topology) (This)->lpVtbl->GetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_DrawPrimitive(This,start_vertex,vertex_count) (This)->lpVtbl->DrawPrimitive(This,start_vertex,vertex_count)
+#define IWineD3DDevice_DrawIndexedPrimitive(This,start_idx,index_count) (This)->lpVtbl->DrawIndexedPrimitive(This,start_idx,index_count)
+#define IWineD3DDevice_DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride) (This)->lpVtbl->DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride)
+#define IWineD3DDevice_DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride) (This)->lpVtbl->DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride)
+#define IWineD3DDevice_DrawPrimitiveStrided(This,vertex_count,strided_data) (This)->lpVtbl->DrawPrimitiveStrided(This,vertex_count,strided_data)
+#define IWineD3DDevice_DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format) (This)->lpVtbl->DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format)
+#define IWineD3DDevice_DrawRectPatch(This,handle,num_segs,rect_patch_info) (This)->lpVtbl->DrawRectPatch(This,handle,num_segs,rect_patch_info)
+#define IWineD3DDevice_DrawTriPatch(This,handle,num_segs,tri_patch_info) (This)->lpVtbl->DrawTriPatch(This,handle,num_segs,tri_patch_info)
+#define IWineD3DDevice_DeletePatch(This,handle) (This)->lpVtbl->DeletePatch(This,handle)
+#define IWineD3DDevice_ColorFill(This,surface,rect,color) (This)->lpVtbl->ColorFill(This,surface,rect,color)
+#define IWineD3DDevice_UpdateTexture(This,src_texture,dst_texture) (This)->lpVtbl->UpdateTexture(This,src_texture,dst_texture)
+#define IWineD3DDevice_UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point) (This)->lpVtbl->UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point)
+#define IWineD3DDevice_GetFrontBufferData(This,swapchain_idx,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,swapchain_idx,dst_surface)
+#define IWineD3DDevice_EnumResources(This,callback,data) (This)->lpVtbl->EnumResources(This,callback,data)
+#define IWineD3DDevice_GetSurfaceFromDC(This,dc,surface) (This)->lpVtbl->GetSurfaceFromDC(This,dc,surface)
+#define IWineD3DDevice_AcquireFocusWindow(This,window) (This)->lpVtbl->AcquireFocusWindow(This,window)
+#define IWineD3DDevice_ReleaseFocusWindow(This) (This)->lpVtbl->ReleaseFocusWindow(This)
+#define IWineD3DDevice_AddSwapChain(This,swapchain) (This)->lpVtbl->AddSwapChain(This,swapchain)
+#define IWineD3DDevice_RemoveSwapChain(This,swapchain) (This)->lpVtbl->RemoveSwapChain(This,swapchain)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DDevice_VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_FlushToHost(This) (This)->lpVtbl->FlushToHost(This)
+#define IWineD3DDevice_Finish(This) (This)->lpVtbl->Finish(This)
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateBuffer_Proxy(
+    IWineD3DDevice* This,
+    struct wined3d_buffer_desc *desc,
+    const void *data,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    IWineD3DBuffer **buffer);
+void __RPC_STUB IWineD3DDevice_CreateBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT length,
+    DWORD usage,
+    WINED3DPOOL pool,
+    IWineD3DBuffer **vertex_buffer,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT length,
+    DWORD usage,
+    WINED3DPOOL pool,
+    IWineD3DBuffer **index_buffer,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateStateBlock_Proxy(
+    IWineD3DDevice* This,
+    WINED3DSTATEBLOCKTYPE type,
+    IWineD3DStateBlock **stateblock,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSurface_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    BOOL lockable,
+    BOOL discard,
+    UINT level,
+    IWineD3DSurface **surface,
+    DWORD usage,
+    WINED3DPOOL pool,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    WINED3DSURFTYPE surface_type,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateRendertargetView_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DResource *resource,
+    IUnknown *parent,
+    IWineD3DRendertargetView **rendertarget_view);
+void __RPC_STUB IWineD3DDevice_CreateRendertargetView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolumeTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT depth,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DVolumeTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolumeTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolume_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT depth,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DVolume **volume,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateCubeTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT edge_length,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DCubeTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateCubeTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateQuery_Proxy(
+    IWineD3DDevice* This,
+    WINED3DQUERYTYPE type,
+    IWineD3DQuery **query,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateQuery_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSwapChain_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters,
+    IWineD3DSwapChain **swapchain,
+    IUnknown *parent,
+    WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3DDevice_CreateSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    const WINED3DVERTEXELEMENT *elements,
+    UINT element_count);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclarationFromFVF_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    DWORD fvf);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclarationFromFVF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *function,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DVertexShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateGeometryShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *byte_code,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DGeometryShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateGeometryShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePixelShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *function,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DPixelShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreatePixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePalette_Proxy(
+    IWineD3DDevice* This,
+    DWORD flags,
+    const PALETTEENTRY *palette_entry,
+    IWineD3DPalette **palette,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreatePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Init3D_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Init3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_InitGDI_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_InitGDI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Uninit3D_Proxy(
+    IWineD3DDevice* This,
+    ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_Uninit3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UninitGDI_Proxy(
+    IWineD3DDevice* This,
+    ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_UninitGDI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetMultithreaded_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_SetMultithreaded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EvictManagedResources_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EvictManagedResources_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetAvailableTextureMem_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetAvailableTextureMem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBackBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    UINT backbuffer_idx,
+    WINED3DBACKBUFFER_TYPE backbuffer_type,
+    IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DDevice_GetBackBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCreationParameters_Proxy(
+    IWineD3DDevice* This,
+    WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+void __RPC_STUB IWineD3DDevice_GetCreationParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDeviceCaps_Proxy(
+    IWineD3DDevice* This,
+    WINED3DCAPS *caps);
+void __RPC_STUB IWineD3DDevice_GetDeviceCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDirect3D_Proxy(
+    IWineD3DDevice* This,
+    IWineD3D **d3d);
+void __RPC_STUB IWineD3DDevice_GetDirect3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDisplayMode_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_GetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDisplayMode_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    const WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_SetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetNumberOfSwapChains_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNumberOfSwapChains_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRasterStatus_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DDevice_GetRasterStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSwapChain_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDevice_GetSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Reset_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDialogBoxMode_Proxy(
+    IWineD3DDevice* This,
+    BOOL enable_dialogs);
+void __RPC_STUB IWineD3DDevice_SetDialogBoxMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCursorProperties_Proxy(
+    IWineD3DDevice* This,
+    UINT x_hotspot,
+    UINT y_hotspot,
+    IWineD3DSurface *cursor_surface);
+void __RPC_STUB IWineD3DDevice_SetCursorProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetCursorPosition_Proxy(
+    IWineD3DDevice* This,
+    int x_screen_space,
+    int y_screen_space,
+    DWORD flags);
+void __RPC_STUB IWineD3DDevice_SetCursorPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_ShowCursor_Proxy(
+    IWineD3DDevice* This,
+    BOOL show);
+void __RPC_STUB IWineD3DDevice_ShowCursor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipPlane_Proxy(
+    IWineD3DDevice* This,
+    DWORD plane_idx,
+    const float *plane);
+void __RPC_STUB IWineD3DDevice_SetClipPlane_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipPlane_Proxy(
+    IWineD3DDevice* This,
+    DWORD plane_idx,
+    float *plane);
+void __RPC_STUB IWineD3DDevice_GetClipPlane_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipStatus_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_SetClipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipStatus_Proxy(
+    IWineD3DDevice* This,
+    WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_GetClipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCurrentTexturePalette_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number);
+void __RPC_STUB IWineD3DDevice_SetCurrentTexturePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCurrentTexturePalette_Proxy(
+    IWineD3DDevice* This,
+    UINT *palette_number);
+void __RPC_STUB IWineD3DDevice_GetCurrentTexturePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDepthStencilSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *depth_stencil);
+void __RPC_STUB IWineD3DDevice_SetDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDepthStencilSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface **depth_stencil);
+void __RPC_STUB IWineD3DDevice_GetDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetGammaRamp_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    DWORD flags,
+    const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_SetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetGammaRamp_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_GetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBuffer *index_buffer,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3DDevice_SetIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBuffer **index_buffer);
+void __RPC_STUB IWineD3DDevice_GetIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetBaseVertexIndex_Proxy(
+    IWineD3DDevice* This,
+    INT base_index);
+void __RPC_STUB IWineD3DDevice_SetBaseVertexIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBaseVertexIndex_Proxy(
+    IWineD3DDevice* This,
+    INT *base_index);
+void __RPC_STUB IWineD3DDevice_GetBaseVertexIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLight_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    const WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_SetLight_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLight_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_GetLight_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLightEnable_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    BOOL enable);
+void __RPC_STUB IWineD3DDevice_SetLightEnable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLightEnable_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    BOOL *enable);
+void __RPC_STUB IWineD3DDevice_GetLightEnable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetMaterial_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_SetMaterial_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetMaterial_Proxy(
+    IWineD3DDevice* This,
+    WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_GetMaterial_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetNPatchMode_Proxy(
+    IWineD3DDevice* This,
+    float segments);
+void __RPC_STUB IWineD3DDevice_SetNPatchMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+float STDMETHODCALLTYPE IWineD3DDevice_GetNPatchMode_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNPatchMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPaletteEntries_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number,
+    const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_SetPaletteEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPaletteEntries_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number,
+    PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_GetPaletteEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DPixelShader *shader);
+void __RPC_STUB IWineD3DDevice_SetPixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DPixelShader **shader);
+void __RPC_STUB IWineD3DDevice_GetPixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderState_Proxy(
+    IWineD3DDevice* This,
+    WINED3DRENDERSTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetRenderState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderState_Proxy(
+    IWineD3DDevice* This,
+    WINED3DRENDERSTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetRenderState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderTarget_Proxy(
+    IWineD3DDevice* This,
+    DWORD render_target_idx,
+    IWineD3DSurface *render_target,
+    BOOL set_viewport);
+void __RPC_STUB IWineD3DDevice_SetRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderTarget_Proxy(
+    IWineD3DDevice* This,
+    DWORD render_target_idx,
+    IWineD3DSurface **render_target);
+void __RPC_STUB IWineD3DDevice_GetRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetFrontBackBuffers_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *front,
+    IWineD3DSurface *back);
+void __RPC_STUB IWineD3DDevice_SetFrontBackBuffers_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSamplerState_Proxy(
+    IWineD3DDevice* This,
+    DWORD sampler_idx,
+    WINED3DSAMPLERSTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetSamplerState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSamplerState_Proxy(
+    IWineD3DDevice* This,
+    DWORD sampler_idx,
+    WINED3DSAMPLERSTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetSamplerState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetScissorRect_Proxy(
+    IWineD3DDevice* This,
+    const RECT *rect);
+void __RPC_STUB IWineD3DDevice_SetScissorRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetScissorRect_Proxy(
+    IWineD3DDevice* This,
+    RECT *rect);
+void __RPC_STUB IWineD3DDevice_GetScissorRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSoftwareVertexProcessing_Proxy(
+    IWineD3DDevice* This,
+    BOOL software);
+void __RPC_STUB IWineD3DDevice_SetSoftwareVertexProcessing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_GetSoftwareVertexProcessing_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetSoftwareVertexProcessing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSource_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    IWineD3DBuffer *buffer,
+    UINT offset,
+    UINT stride);
+void __RPC_STUB IWineD3DDevice_SetStreamSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSource_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    IWineD3DBuffer **buffer,
+    UINT *offset,
+    UINT *stride);
+void __RPC_STUB IWineD3DDevice_GetStreamSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSourceFreq_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    UINT divider);
+void __RPC_STUB IWineD3DDevice_SetStreamSourceFreq_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSourceFreq_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    UINT *divider);
+void __RPC_STUB IWineD3DDevice_GetStreamSourceFreq_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTexture_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    IWineD3DBaseTexture *texture);
+void __RPC_STUB IWineD3DDevice_SetTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTexture_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    IWineD3DBaseTexture **texture);
+void __RPC_STUB IWineD3DDevice_GetTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTextureStageState_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    WINED3DTEXTURESTAGESTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetTextureStageState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTextureStageState_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    WINED3DTEXTURESTAGESTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetTextureStageState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_SetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_GetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration *declaration);
+void __RPC_STUB IWineD3DDevice_SetVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration);
+void __RPC_STUB IWineD3DDevice_GetVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexShader *shader);
+void __RPC_STUB IWineD3DDevice_SetVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexShader **shader);
+void __RPC_STUB IWineD3DDevice_GetVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetViewport_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_SetViewport_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetViewport_Proxy(
+    IWineD3DDevice* This,
+    WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_GetViewport_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_MultiplyTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_MultiplyTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ValidateDevice_Proxy(
+    IWineD3DDevice* This,
+    DWORD *num_passes);
+void __RPC_STUB IWineD3DDevice_ValidateDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ProcessVertices_Proxy(
+    IWineD3DDevice* This,
+    UINT src_start_idx,
+    UINT dst_idx,
+    UINT vertex_count,
+    IWineD3DBuffer *dest_buffer,
+    IWineD3DVertexDeclaration *declaration,
+    DWORD flags,
+    DWORD DestFVF);
+void __RPC_STUB IWineD3DDevice_ProcessVertices_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginStateBlock_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndStateBlock_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DStateBlock **stateblock);
+void __RPC_STUB IWineD3DDevice_EndStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginScene_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginScene_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndScene_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EndScene_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Present_Proxy(
+    IWineD3DDevice* This,
+    const RECT *src_rect,
+    const RECT *dst_rect,
+    HWND dst_window_override,
+    const RGNDATA *dirty_region);
+void __RPC_STUB IWineD3DDevice_Present_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Clear_Proxy(
+    IWineD3DDevice* This,
+    DWORD rect_count,
+    const WINED3DRECT *rects,
+    DWORD flags,
+    WINED3DCOLOR color,
+    float z,
+    DWORD stencil);
+void __RPC_STUB IWineD3DDevice_Clear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ClearRendertargetView_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DRendertargetView *rendertarget_view,
+    const float color[4]);
+void __RPC_STUB IWineD3DDevice_ClearRendertargetView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetPrimitiveType_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRIMITIVETYPE primitive_topology);
+void __RPC_STUB IWineD3DDevice_SetPrimitiveType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetPrimitiveType_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRIMITIVETYPE *primitive_topology);
+void __RPC_STUB IWineD3DDevice_GetPrimitiveType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitive_Proxy(
+    IWineD3DDevice* This,
+    UINT start_vertex,
+    UINT vertex_count);
+void __RPC_STUB IWineD3DDevice_DrawPrimitive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitive_Proxy(
+    IWineD3DDevice* This,
+    UINT start_idx,
+    UINT index_count);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveUP_Proxy(
+    IWineD3DDevice* This,
+    UINT vertex_count,
+    const void *stream_data,
+    UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveUP_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveUP_Proxy(
+    IWineD3DDevice* This,
+    UINT index_count,
+    const void *index_data,
+    WINED3DFORMAT index_data_format,
+    const void *stream_data,
+    UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveUP_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveStrided_Proxy(
+    IWineD3DDevice* This,
+    UINT vertex_count,
+    const WineDirect3DVertexStridedData *strided_data);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveStrided_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveStrided_Proxy(
+    IWineD3DDevice* This,
+    UINT index_count,
+    const WineDirect3DVertexStridedData *strided_data,
+    UINT vertex_count,
+    const void *index_data,
+    WINED3DFORMAT index_data_format);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveStrided_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawRectPatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle,
+    const float *num_segs,
+    const WINED3DRECTPATCH_INFO *rect_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawRectPatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawTriPatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle,
+    const float *num_segs,
+    const WINED3DTRIPATCH_INFO *tri_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawTriPatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DeletePatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle);
+void __RPC_STUB IWineD3DDevice_DeletePatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ColorFill_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *surface,
+    const WINED3DRECT *rect,
+    WINED3DCOLOR color);
+void __RPC_STUB IWineD3DDevice_ColorFill_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateTexture_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBaseTexture *src_texture,
+    IWineD3DBaseTexture *dst_texture);
+void __RPC_STUB IWineD3DDevice_UpdateTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    IWineD3DSurface *dst_surface,
+    const POINT *dst_point);
+void __RPC_STUB IWineD3DDevice_UpdateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetFrontBufferData_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DDevice_GetFrontBufferData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EnumResources_Proxy(
+    IWineD3DDevice* This,
+    HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+    void *data);
+void __RPC_STUB IWineD3DDevice_EnumResources_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSurfaceFromDC_Proxy(
+    IWineD3DDevice* This,
+    HDC dc,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDevice_GetSurfaceFromDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_AcquireFocusWindow_Proxy(
+    IWineD3DDevice* This,
+    HWND window);
+void __RPC_STUB IWineD3DDevice_AcquireFocusWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ReleaseFocusWindow_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_ReleaseFocusWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DDevice_INTERFACE_DEFINED__ */
+
+IWineD3D * STDMETHODCALLTYPE  WineDirect3DCreate(UINT dxVersion,IUnknown *parent);
+
+IWineD3DClipper * STDMETHODCALLTYPE  WineDirect3DCreateClipper(IUnknown *parent);
+
+#ifdef VBOX_WINE_NO_LOCK
+#define wined3d_mutex_lock() do {} while (0)
+#define wined3d_mutex_unlock() do {} while (0)
+#else
+void STDMETHODCALLTYPE  wined3d_mutex_lock(void);
+
+void STDMETHODCALLTYPE  wined3d_mutex_unlock(void);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WINED3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl
new file mode 100644
index 0000000..19483ac
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2008-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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "dxgi.idl";
+
+[
+    object,
+    local,
+    uuid(a07ad9ab-fb01-4574-8bfb-0a70a7373f04)
+]
+interface IWineDXGIFactory : IDXGIFactory
+{
+    struct wined3d *get_wined3d();
+}
+
+[
+    object,
+    local,
+    uuid(ab1de34c-2963-4ffd-8493-40f580e510e5)
+]
+interface IWineDXGIAdapter : IDXGIAdapter
+{
+    UINT get_ordinal();
+}
+
+[
+    object,
+    local,
+    uuid(3e1ff30b-c951-48c3-b010-0fb49f3dca71)
+]
+interface IWineDXGIDevice : IDXGIDevice
+{
+    struct wined3d_device *get_wined3d_device();
+    HRESULT create_surface(
+        [in] const DXGI_SURFACE_DESC *desc,
+        [in] DXGI_USAGE usage,
+        [in] const DXGI_SHARED_RESOURCE *shared_resource,
+        [in] IUnknown *outer,
+        [out] void **surface
+    );
+    HRESULT create_swapchain(
+        [in] struct wined3d_swapchain_desc *desc,
+        [out] struct wined3d_swapchain **wined3d_swapchain
+    );
+}
+
+[
+    object,
+    local,
+    uuid(f2b918f3-603f-430a-9ccd-55872b6e85df)
+]
+interface IWineDXGIDeviceParent : IUnknown
+{
+    struct wined3d_device_parent *get_wined3d_device_parent();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h
new file mode 100644
index 0000000..3cf666d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h
@@ -0,0 +1,629 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_WINGDI16_H
+#define __WINE_WINE_WINGDI16_H
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <wingdi.h>
+#include <wine/winbase16.h>
+
+#include <pshpack1.h>
+
+typedef HANDLE16 HPQ16;
+typedef HANDLE16 HPJOB16;
+
+typedef struct
+{
+    WORD   wFirst;
+    WORD   wSecond;
+    INT16  iKernAmount;
+} KERNINGPAIR16, *LPKERNINGPAIR16;
+
+typedef struct
+{
+    INT16  bmType;
+    INT16  bmWidth;
+    INT16  bmHeight;
+    INT16  bmWidthBytes;
+    BYTE   bmPlanes;
+    BYTE   bmBitsPixel;
+    SEGPTR bmBits;
+} BITMAP16, *LPBITMAP16;
+
+typedef struct
+{
+    UINT16     lbStyle;
+    COLORREF   lbColor;
+    INT16      lbHatch;
+} LOGBRUSH16, *LPLOGBRUSH16;
+
+typedef struct
+{
+    INT16  lfHeight;
+    INT16  lfWidth;
+    INT16  lfEscapement;
+    INT16  lfOrientation;
+    INT16  lfWeight;
+    BYTE   lfItalic;
+    BYTE   lfUnderline;
+    BYTE   lfStrikeOut;
+    BYTE   lfCharSet;
+    BYTE   lfOutPrecision;
+    BYTE   lfClipPrecision;
+    BYTE   lfQuality;
+    BYTE   lfPitchAndFamily;
+    CHAR   lfFaceName[LF_FACESIZE];
+} LOGFONT16, *LPLOGFONT16;
+
+typedef struct
+{
+  LOGFONT16  elfLogFont;
+  BYTE       elfFullName[LF_FULLFACESIZE];
+  BYTE       elfStyle[LF_FACESIZE];
+} ENUMLOGFONT16, *LPENUMLOGFONT16;
+
+typedef struct
+{
+  LOGFONT16  elfLogFont;
+  BYTE       elfFullName[LF_FULLFACESIZE];
+  BYTE       elfStyle[LF_FACESIZE];
+  BYTE       elfScript[LF_FACESIZE];
+} ENUMLOGFONTEX16, *LPENUMLOGFONTEX16;
+
+typedef struct
+{
+    INT16  txfHeight;
+    INT16  txfWidth;
+    INT16  txfEscapement;
+    INT16  txfOrientation;
+    INT16  txfWeight;
+    CHAR   txfItalic;
+    CHAR   txfUnderline;
+    CHAR   txfStrikeOut;
+    CHAR   txfOutPrecision;
+    CHAR   txfClipPrecision;
+    INT16  txfAccelerator;
+    INT16  txfOverhang;
+} TEXTXFORM16, *LPTEXTXFORM16;
+
+typedef struct
+{
+    INT16 dfType;
+    INT16 dfPoints;
+    INT16 dfVertRes;
+    INT16 dfHorizRes;
+    INT16 dfAscent;
+    INT16 dfInternalLeading;
+    INT16 dfExternalLeading;
+    CHAR  dfItalic;
+    CHAR  dfUnderline;
+    CHAR  dfStrikeOut;
+    INT16 dfWeight;
+    BYTE  dfCharSet;
+    INT16 dfPixWidth;
+    INT16 dfPixHeight;
+    CHAR  dfPitchAndFamily;
+    INT16 dfAvgWidth;
+    INT16 dfMaxWidth;
+    CHAR  dfFirstChar;
+    CHAR  dfLastChar;
+    CHAR  dfDefaultChar;
+    CHAR  dfBreakChar;
+    INT16 dfWidthBytes;
+    LONG  dfDevice;
+    LONG  dfFace;
+    LONG  dfBitsPointer;
+    LONG  dfBitsOffset;
+    CHAR  dfReserved;
+    /* Fields, introduced for Windows 3.x fonts */
+    LONG  dfFlags;
+    INT16 dfAspace;
+    INT16 dfBspace;
+    INT16 dfCspace;
+    LONG  dfColorPointer;
+    LONG  dfReserved1[4];
+} FONTINFO16, *LPFONTINFO16;
+
+typedef struct {
+    WORD   dfVersion;
+    DWORD  dfSize;
+    CHAR   dfCopyright[60];
+    WORD   dfType;
+    WORD   dfPoints;
+    WORD   dfVertRes;
+    WORD   dfHorizRes;
+    WORD   dfAscent;
+    WORD   dfInternalLeading;
+    WORD   dfExternalLeading;
+    BYTE   dfItalic;
+    BYTE   dfUnderline;
+    BYTE   dfStrikeOut;
+    WORD   dfWeight;
+    BYTE   dfCharSet;
+    WORD   dfPixWidth;
+    WORD   dfPixHeight;
+    BYTE   dfPitchAndFamily;
+    WORD   dfAvgWidth;
+    WORD   dfMaxWidth;
+    BYTE   dfFirstChar;
+    BYTE   dfLastChar;
+    BYTE   dfDefaultChar;
+    BYTE   dfBreakChar;
+    WORD   dfWidthBytes;
+    DWORD  dfDevice;
+    DWORD  dfFace;
+    DWORD  dfReserved;
+    CHAR   szDeviceName[60]; /* FIXME: length unknown */
+    CHAR   szFaceName[60];   /* ditto */
+} FONTDIR16, *LPFONTDIR16;
+
+typedef struct
+{
+    INT16     tmHeight;
+    INT16     tmAscent;
+    INT16     tmDescent;
+    INT16     tmInternalLeading;
+    INT16     tmExternalLeading;
+    INT16     tmAveCharWidth;
+    INT16     tmMaxCharWidth;
+    INT16     tmWeight;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmFirstChar;
+    BYTE      tmLastChar;
+    BYTE      tmDefaultChar;
+    BYTE      tmBreakChar;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+    INT16     tmOverhang;
+    INT16     tmDigitizedAspectX;
+    INT16     tmDigitizedAspectY;
+} TEXTMETRIC16, *LPTEXTMETRIC16;
+
+typedef struct _OUTLINETEXTMETRIC16
+{
+    UINT16          otmSize;
+    TEXTMETRIC16    otmTextMetrics;
+    BYTE            otmFiller;
+    PANOSE          otmPanoseNumber;
+    UINT16          otmfsSelection;
+    UINT16          otmfsType;
+    INT16           otmsCharSlopeRise;
+    INT16           otmsCharSlopeRun;
+    INT16           otmItalicAngle;
+    UINT16          otmEMSquare;
+    INT16           otmAscent;
+    INT16           otmDescent;
+    UINT16          otmLineGap;
+    UINT16          otmsCapEmHeight;
+    UINT16          otmsXHeight;
+    RECT16          otmrcFontBox;
+    INT16           otmMacAscent;
+    INT16           otmMacDescent;
+    UINT16          otmMacLineGap;
+    UINT16          otmusMinimumPPEM;
+    POINT16         otmptSubscriptSize;
+    POINT16         otmptSubscriptOffset;
+    POINT16         otmptSuperscriptSize;
+    POINT16         otmptSuperscriptOffset;
+    UINT16          otmsStrikeoutSize;
+    INT16           otmsStrikeoutPosition;
+    INT16           otmsUnderscoreSize;
+    INT           otmsUnderscorePosition;
+    LPSTR           otmpFamilyName;
+    LPSTR           otmpFaceName;
+    LPSTR           otmpStyleName;
+    LPSTR           otmpFullName;
+} OUTLINETEXTMETRIC16,*LPOUTLINETEXTMETRIC16;
+
+typedef struct
+{
+    INT16     tmHeight;
+    INT16     tmAscent;
+    INT16     tmDescent;
+    INT16     tmInternalLeading;
+    INT16     tmExternalLeading;
+    INT16     tmAveCharWidth;
+    INT16     tmMaxCharWidth;
+    INT16     tmWeight;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmFirstChar;
+    BYTE      tmLastChar;
+    BYTE      tmDefaultChar;
+    BYTE      tmBreakChar;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+    INT16     tmOverhang;
+    INT16     tmDigitizedAspectX;
+    INT16     tmDigitizedAspectY;
+    DWORD     ntmFlags;
+    UINT16    ntmSizeEM;
+    UINT16    ntmCellHeight;
+    UINT16    ntmAvgWidth;
+} NEWTEXTMETRIC16,*LPNEWTEXTMETRIC16;
+
+typedef struct
+{
+    NEWTEXTMETRIC16	ntmTm;
+    FONTSIGNATURE       ntmFontSig;
+} NEWTEXTMETRICEX16,*LPNEWTEXTMETRICEX16;
+
+typedef INT16 (CALLBACK *FONTENUMPROC16)(SEGPTR,SEGPTR,UINT16,LPARAM);
+typedef VOID  (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM);
+typedef INT16 (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM);
+
+
+typedef struct
+{
+    UINT16	gmBlackBoxX;
+    UINT16	gmBlackBoxY;
+    POINT16	gmptGlyphOrigin;
+    INT16	gmCellIncX;
+    INT16	gmCellIncY;
+} GLYPHMETRICS16, *LPGLYPHMETRICS16;
+
+typedef struct
+{
+    INT16   abcA;
+    UINT16  abcB;
+    INT16   abcC;
+} ABC16, *LPABC16;
+
+typedef struct
+{
+    UINT16   lopnStyle;
+    POINT16  lopnWidth;
+    COLORREF lopnColor;
+} LOGPEN16, *LPLOGPEN16;
+
+typedef struct
+{
+    HGDIOBJ16 objectHandle[1];
+} HANDLETABLE16, *LPHANDLETABLE16;
+
+typedef struct
+{
+    INT16        mm;
+    INT16        xExt;
+    INT16        yExt;
+    HMETAFILE16  hMF;
+} METAFILEPICT16, *LPMETAFILEPICT16;
+
+typedef INT16 (CALLBACK *MFENUMPROC16)(HDC16,HANDLETABLE16*,METARECORD*,
+                                       INT16,LPARAM);
+typedef struct
+{
+    INT16    cbSize;
+    SEGPTR   lpszDocName;
+    SEGPTR   lpszOutput;
+    SEGPTR   lpszDatatype;
+    DWORD    fwType;
+} DOCINFO16, *LPDOCINFO16;
+
+typedef BOOL16 (CALLBACK *ABORTPROC16)(HDC16, INT16);
+
+#define INT_PD_DEFAULT_DEVMODE  1
+#define INT_PD_DEFAULT_MODEL    2
+
+/* Escape: CLIP_TO_PATH modes */
+#define CLIP_SAVE 0
+#define CLIP_RESTORE 1
+#define CLIP_INCLUSIVE 2
+#define CLIP_EXCLUSIVE 3
+
+/* Escape: END_PATH info */
+struct PATH_INFO {
+    short RenderMode;
+    BYTE FillMode;
+    BYTE BkMode;
+    LOGPEN16 Pen;
+    LOGBRUSH16 Brush;
+    DWORD BkColor;
+};
+
+/* RenderMode */
+#define RENDERMODE_NO_DISPLAY 0
+#define RENDERMODE_OPEN 1
+#define RENDERMODE_CLOSED 2
+
+/* For DRAWPATTERNRECT Escape, 16bit mode */
+typedef struct _DRAWPATRECT16
+{
+    POINT16	ptPosition;
+    POINT16	ptSize;
+    WORD	wStyle;
+    WORD	wPattern;
+} DRAWPATRECT16, *PDRAWPATRECT16;
+
+#include <poppack.h>
+
+
+INT16       WINAPI AbortDoc16(HDC16);
+BOOL16      WINAPI AbortPath16(HDC16);
+INT16       WINAPI AddFontResource16(LPCSTR);
+void        WINAPI AnimatePalette16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);
+BOOL16      WINAPI Arc16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI BeginPath16(HDC16);
+BOOL16      WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD);
+BOOL16      WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI CloseFigure16(HDC16);
+INT16       WINAPI CloseJob16(HPJOB16);
+HMETAFILE16 WINAPI CloseMetaFile16(HDC16);
+INT16       WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16);
+HMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR);
+HBITMAP16   WINAPI CreateBitmap16(INT16,INT16,UINT16,UINT16,LPCVOID);
+HBITMAP16   WINAPI CreateBitmapIndirect16(const BITMAP16*);
+HBRUSH16    WINAPI CreateBrushIndirect16(const LOGBRUSH16*);
+HBITMAP16   WINAPI CreateCompatibleBitmap16(HDC16,INT16,INT16);
+HDC16       WINAPI CreateCompatibleDC16(HDC16);
+HDC16       WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HBITMAP16   WINAPI CreateDIBitmap16(HDC16,const BITMAPINFOHEADER*,DWORD,
+                                    LPCVOID,const BITMAPINFO*,UINT16);
+HBRUSH16    WINAPI CreateDIBPatternBrush16(HGLOBAL16,UINT16);
+HBITMAP16   WINAPI CreateDIBSection16 (HDC16, const BITMAPINFO *, UINT16,
+				       SEGPTR *, HANDLE, DWORD offset);
+HBITMAP16   WINAPI CreateDiscardableBitmap16(HDC16,INT16,INT16);
+HRGN16      WINAPI CreateEllipticRgn16(INT16,INT16,INT16,INT16);
+HRGN16      WINAPI CreateEllipticRgnIndirect16(const RECT16 *);
+HFONT16     WINAPI CreateFont16(INT16,INT16,INT16,INT16,INT16,BYTE,BYTE,BYTE,
+                                BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR);
+HFONT16     WINAPI CreateFontIndirect16(const LOGFONT16*);
+HPALETTE16  WINAPI CreateHalftonePalette16(HDC16);
+HBRUSH16    WINAPI CreateHatchBrush16(INT16,COLORREF);
+HDC16       WINAPI CreateIC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HDC16       WINAPI CreateMetaFile16(LPCSTR);
+HPALETTE16  WINAPI CreatePalette16(const LOGPALETTE*);
+HBRUSH16    WINAPI CreatePatternBrush16(HBITMAP16);
+HPEN16      WINAPI CreatePen16(INT16,INT16,COLORREF);
+HPEN16      WINAPI CreatePenIndirect16(const LOGPEN16*);
+HRGN16      WINAPI CreatePolyPolygonRgn16(const POINT16*,const INT16*,INT16,INT16);
+HRGN16      WINAPI CreatePolygonRgn16(const POINT16*,INT16,INT16);
+HRGN16      WINAPI CreateRectRgn16(INT16,INT16,INT16,INT16);
+HRGN16      WINAPI CreateRectRgnIndirect16(const RECT16*);
+HRGN16      WINAPI CreateRoundRectRgn16(INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR);
+HBRUSH16    WINAPI CreateSolidBrush16(COLORREF);
+VOID        WINAPI Death16(HDC16);
+BOOL16      WINAPI DeleteDC16(HDC16);
+INT16       WINAPI DeleteJob16(HPJOB16,INT16);
+BOOL16      WINAPI DeleteMetaFile16(HMETAFILE16);
+BOOL16      WINAPI DeleteObject16(HGDIOBJ16);
+BOOL16      WINAPI DPtoLP16(HDC16,LPPOINT16,INT16);
+DWORD       WINAPI DrvGetPrinterData16(LPSTR,LPSTR,LPDWORD,LPBYTE,int cbData,LPDWORD);
+DWORD       WINAPI DrvSetPrinterData16(LPSTR,LPSTR,DWORD,LPBYTE,DWORD);
+BOOL16      WINAPI Ellipse16(HDC16,INT16,INT16,INT16,INT16);
+INT16       WINAPI EndDoc16(HDC16);
+INT16       WINAPI EndPage16(HDC16);
+BOOL16      WINAPI EndPath16(HDC16);
+INT16       WINAPI EndSpoolPage16(HPJOB16);
+INT16       WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
+INT16       WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROC16,LPARAM,DWORD);
+INT16       WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
+BOOL16      WINAPI EnumMetaFile16(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM);
+INT16       WINAPI EnumObjects16(HDC16,INT16,GOBJENUMPROC16,LPARAM);
+BOOL16      WINAPI EqualRgn16(HRGN16,HRGN16);
+INT16       WINAPI Escape16(HDC16,INT16,INT16,SEGPTR,LPVOID);
+INT16       WINAPI ExcludeClipRect16(HDC16,INT16,INT16,INT16,INT16);
+INT16       WINAPI ExcludeVisRect16(HDC16,INT16,INT16,INT16,INT16);
+HPEN16      WINAPI ExtCreatePen16(DWORD,DWORD,const LOGBRUSH16*,DWORD,const DWORD*);
+BOOL16      WINAPI ExtFloodFill16(HDC16,INT16,INT16,COLORREF,UINT16);
+BOOL16      WINAPI ExtTextOut16(HDC16,INT16,INT16,UINT16,const RECT16*,
+                                LPCSTR,UINT16,const INT16*);
+BOOL16      WINAPI FastWindowFrame16(HDC16,const RECT16*,INT16,INT16,DWORD);
+BOOL16      WINAPI FillPath16(HDC16);
+BOOL16      WINAPI FillRgn16(HDC16,HRGN16,HBRUSH16);
+BOOL16      WINAPI FlattenPath16(HDC16);
+BOOL16      WINAPI FloodFill16(HDC16,INT16,INT16,COLORREF);
+BOOL16      WINAPI FrameRgn16(HDC16,HRGN16,HBRUSH16,INT16,INT16);
+UINT16      WINAPI GDIRealizePalette16(HDC16);
+DWORD       WINAPI GdiSeeGdiDo16(WORD,WORD,WORD,WORD);
+HPALETTE16  WINAPI GDISelectPalette16(HDC16,HPALETTE16,WORD);
+INT16       WINAPI GetArcDirection16(HDC16);
+BOOL16      WINAPI GetAspectRatioFilterEx16(HDC16,LPSIZE16);
+LONG        WINAPI GetBitmapBits16(HBITMAP16,LONG,LPVOID);
+DWORD       WINAPI GetBitmapDimension16(HBITMAP16);
+BOOL16      WINAPI GetBitmapDimensionEx16(HBITMAP16,LPSIZE16);
+DWORD       WINAPI GetBrushOrg16(HDC16);
+BOOL16      WINAPI GetBrushOrgEx16(HDC16,LPPOINT16);
+COLORREF    WINAPI GetBkColor16(HDC16);
+INT16       WINAPI GetBkMode16(HDC16);
+UINT16      WINAPI GetBoundsRect16(HDC16,LPRECT16,UINT16);
+BOOL16      WINAPI GetCharABCWidths16(HDC16,UINT16,UINT16,LPABC16);
+BOOL16      WINAPI GetCharWidth16(HDC16,UINT16,UINT16,LPINT16);
+INT16       WINAPI GetClipBox16(HDC16,LPRECT16);
+HRGN16      WINAPI GetClipRgn16(HDC16);
+HFONT16     WINAPI GetCurLogFont16(HDC16);
+DWORD       WINAPI GetCurrentPosition16(HDC16);
+BOOL16      WINAPI GetCurrentPositionEx16(HDC16,LPPOINT16);
+DWORD       WINAPI GetDCHook16(HDC16,FARPROC16*);
+DWORD       WINAPI GetDCOrg16(HDC16);
+HDC16       WINAPI GetDCState16(HDC16);
+INT16       WINAPI GetDeviceCaps16(HDC16,INT16);
+UINT16      WINAPI GetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);
+INT16       WINAPI GetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPVOID,LPBITMAPINFO,UINT16);
+INT16       WINAPI GetEnvironment16(LPCSTR,LPDEVMODEA,UINT16);
+DWORD       WINAPI GetFontData16(HDC16,DWORD,DWORD,LPVOID,DWORD);
+DWORD       WINAPI GetFontLanguageInfo16(HDC16);
+DWORD       WINAPI GetGlyphOutline16(HDC16,UINT16,UINT16,LPGLYPHMETRICS16,DWORD,LPVOID,const MAT2*);
+INT16       WINAPI GetKerningPairs16(HDC16,INT16,LPKERNINGPAIR16);
+INT16       WINAPI GetMapMode16(HDC16);
+HMETAFILE16 WINAPI GetMetaFile16(LPCSTR);
+HGLOBAL16   WINAPI GetMetaFileBits16(HMETAFILE16);
+DWORD       WINAPI GetNearestColor16(HDC16,DWORD);
+UINT16      WINAPI GetNearestPaletteIndex16(HPALETTE16,COLORREF);
+INT16       WINAPI GetObject16(HANDLE16,INT16,LPVOID);
+UINT16      WINAPI GetOutlineTextMetrics16(HDC16,UINT16,LPOUTLINETEXTMETRIC16);
+UINT16      WINAPI GetPaletteEntries16(HPALETTE16,UINT16,UINT16,LPPALETTEENTRY);
+INT16       WINAPI GetPath16(HDC16,LPPOINT16,LPBYTE,INT16);
+COLORREF    WINAPI GetPixel16(HDC16,INT16,INT16);
+INT16       WINAPI GetPolyFillMode16(HDC16);
+BOOL16      WINAPI GetRasterizerCaps16(LPRASTERIZER_STATUS,UINT16);
+DWORD       WINAPI GetRegionData16(HRGN16,DWORD,LPRGNDATA);
+INT16       WINAPI GetRelAbs16(HDC16);
+INT16       WINAPI GetRgnBox16(HRGN16,LPRECT16);
+INT16       WINAPI GetROP216(HDC16);
+DWORD       WINAPI GetSpoolJob16(int,LONG);
+HGDIOBJ16   WINAPI GetStockObject16(INT16);
+INT16       WINAPI GetStretchBltMode16(HDC16);
+UINT16      WINAPI GetSystemPaletteEntries16(HDC16,UINT16,UINT16,LPPALETTEENTRY);
+UINT16      WINAPI GetSystemPaletteUse16(HDC16);
+UINT16      WINAPI GetTextAlign16(HDC16);
+INT16       WINAPI GetTextCharacterExtra16(HDC16);
+UINT16      WINAPI GetTextCharset16(HDC16);
+COLORREF    WINAPI GetTextColor16(HDC16);
+DWORD       WINAPI GetTextExtent16(HDC16,LPCSTR,INT16);
+BOOL16      WINAPI GetTextExtentPoint16(HDC16,LPCSTR,INT16,LPSIZE16);
+INT16       WINAPI GetTextFace16(HDC16,INT16,LPSTR);
+BOOL16      WINAPI GetTextMetrics16(HDC16,LPTEXTMETRIC16);
+DWORD       WINAPI GetViewportExt16(HDC16);
+BOOL16      WINAPI GetViewportExtEx16(HDC16,LPSIZE16);
+BOOL16      WINAPI GetViewportOrgEx16(HDC16,LPPOINT16);
+DWORD       WINAPI GetViewportOrg16(HDC16);
+DWORD       WINAPI GetWindowExt16(HDC16);
+DWORD       WINAPI GetWindowOrg16(HDC16);
+BOOL16      WINAPI GetWindowExtEx16(HDC16,LPSIZE16);
+BOOL16      WINAPI GetWindowOrgEx16(HDC16,LPPOINT16);
+HRGN16      WINAPI InquireVisRgn16(HDC16);
+INT16       WINAPI IntersectClipRect16(HDC16,INT16,INT16,INT16,INT16);
+INT16       WINAPI IntersectVisRect16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI InvertRgn16(HDC16,HRGN16);
+BOOL16      WINAPI IsDCCurrentPalette16(HDC16);
+BOOL16      WINAPI IsGDIObject16(HGDIOBJ16);
+BOOL16      WINAPI IsValidMetaFile16(HMETAFILE16);
+VOID        WINAPI LineDDA16(INT16,INT16,INT16,INT16,LINEDDAPROC16,LPARAM);
+BOOL16      WINAPI LineTo16(HDC16,INT16,INT16);
+BOOL16      WINAPI LPtoDP16(HDC16,LPPOINT16,INT16);
+DWORD       WINAPI MoveTo16(HDC16,INT16,INT16);
+BOOL16      WINAPI MoveToEx16(HDC16,INT16,INT16,LPPOINT16);
+INT16       WINAPI MulDiv16(INT16,INT16,INT16);
+INT16       WINAPI OffsetClipRgn16(HDC16,INT16,INT16);
+INT16       WINAPI OffsetRgn16(HRGN16,INT16,INT16);
+DWORD       WINAPI OffsetViewportOrg16(HDC16,INT16,INT16);
+BOOL16      WINAPI OffsetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+INT16       WINAPI OffsetVisRgn16(HDC16,INT16,INT16);
+DWORD       WINAPI OffsetWindowOrg16(HDC16,INT16,INT16);
+BOOL16      WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+HANDLE16    WINAPI OpenJob16(LPCSTR,LPCSTR,HDC16);
+BOOL16      WINAPI PaintRgn16(HDC16,HRGN16);
+BOOL16      WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD);
+HRGN16      WINAPI PathToRegion16(HDC16);
+BOOL16      WINAPI Pie16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI PlayMetaFile16(HDC16,HMETAFILE16);
+VOID        WINAPI PlayMetaFileRecord16(HDC16,LPHANDLETABLE16,LPMETARECORD,UINT16);
+BOOL16      WINAPI PolyBezier16(HDC16,const POINT16*,INT16);
+BOOL16      WINAPI PolyBezierTo16(HDC16,const POINT16*,INT16);
+BOOL16      WINAPI PolyPolygon16(HDC16,const POINT16*,const INT16*,UINT16);
+BOOL16      WINAPI Polygon16(HDC16,const POINT16*,INT16);
+BOOL16      WINAPI Polyline16(HDC16,const POINT16*,INT16);
+BOOL16      WINAPI PtInRegion16(HRGN16,INT16,INT16);
+BOOL16      WINAPI PtVisible16(HDC16,INT16,INT16);
+BOOL16      WINAPI QueryAbort16(HDC16,INT16);
+UINT16      WINAPI RealizeDefaultPalette16(HDC16);
+BOOL16      WINAPI Rectangle16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI RectInRegion16(HRGN16,const RECT16 *);
+BOOL16      WINAPI RectVisible16(HDC16,const RECT16*);
+BOOL16      WINAPI RemoveFontResource16(LPCSTR);
+HDC16       WINAPI ResetDC16(HDC16,const DEVMODEA *);
+BOOL16      WINAPI ResizePalette16(HPALETTE16,UINT16);
+BOOL16      WINAPI RestoreDC16(HDC16,INT16);
+INT16       WINAPI RestoreVisRgn16(HDC16);
+VOID        WINAPI Resurrection16(HDC16,WORD,WORD,WORD,WORD,WORD,WORD);
+BOOL16      WINAPI RoundRect16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16);
+INT16       WINAPI SaveDC16(HDC16);
+HRGN16      WINAPI SaveVisRgn16(HDC16);
+DWORD       WINAPI ScaleViewportExt16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI ScaleViewportExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);
+DWORD       WINAPI ScaleWindowExt16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16      WINAPI ScaleWindowExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);
+BOOL16      WINAPI SelectClipPath16(HDC16,INT16);
+INT16       WINAPI SelectClipRgn16(HDC16,HRGN16);
+HGDIOBJ16   WINAPI SelectObject16(HDC16,HGDIOBJ16);
+INT16       WINAPI SelectVisRgn16(HDC16,HRGN16);
+INT16       WINAPI SetAbortProc16(HDC16,ABORTPROC16);
+INT16       WINAPI SetArcDirection16(HDC16,INT16);
+LONG        WINAPI SetBitmapBits16(HBITMAP16,LONG,LPCVOID);
+DWORD       WINAPI SetBitmapDimension16(HBITMAP16,INT16,INT16);
+BOOL16      WINAPI SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16);
+COLORREF    WINAPI SetBkColor16(HDC16,COLORREF);
+INT16       WINAPI SetBkMode16(HDC16,INT16);
+UINT16      WINAPI SetBoundsRect16(HDC16,const RECT16*,UINT16);
+DWORD       WINAPI SetBrushOrg16(HDC16,INT16,INT16);
+BOOL16      WINAPI SetDCHook16(HDC16,FARPROC16,DWORD);
+DWORD       WINAPI SetDCOrg16(HDC16,INT16,INT16);
+VOID        WINAPI SetDCState16(HDC16,HDC16);
+UINT16      WINAPI SetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);
+INT16       WINAPI SetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);
+INT16       WINAPI SetDIBitsToDevice16(HDC16,INT16,INT16,INT16,INT16,INT16,
+                         INT16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);
+INT16       WINAPI SetEnvironment16(LPCSTR,LPDEVMODEA,UINT16);
+WORD        WINAPI SetHookFlags16(HDC16,WORD);
+INT16       WINAPI SetMapMode16(HDC16,INT16);
+DWORD       WINAPI SetMapperFlags16(HDC16,DWORD);
+HMETAFILE16 WINAPI SetMetaFileBits16(HGLOBAL16);
+UINT16      WINAPI SetPaletteEntries16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);
+COLORREF    WINAPI SetPixel16(HDC16,INT16,INT16,COLORREF);
+INT16       WINAPI SetPolyFillMode16(HDC16,INT16);
+VOID        WINAPI SetRectRgn16(HRGN16,INT16,INT16,INT16,INT16);
+INT16       WINAPI SetRelAbs16(HDC16,INT16);
+INT16       WINAPI SetROP216(HDC16,INT16);
+INT16       WINAPI SetStretchBltMode16(HDC16,INT16);
+UINT16      WINAPI SetSystemPaletteUse16(HDC16,UINT16);
+UINT16      WINAPI SetTextAlign16(HDC16,UINT16);
+INT16       WINAPI SetTextCharacterExtra16(HDC16,INT16);
+COLORREF    WINAPI SetTextColor16(HDC16,COLORREF);
+INT16       WINAPI SetTextJustification16(HDC16,INT16,INT16);
+DWORD       WINAPI SetViewportExt16(HDC16,INT16,INT16);
+BOOL16      WINAPI SetViewportExtEx16(HDC16,INT16,INT16,LPSIZE16);
+DWORD       WINAPI SetViewportOrg16(HDC16,INT16,INT16);
+BOOL16      WINAPI SetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+DWORD       WINAPI SetWindowExt16(HDC16,INT16,INT16);
+BOOL16      WINAPI SetWindowExtEx16(HDC16,INT16,INT16,LPSIZE16);
+DWORD       WINAPI SetWindowOrg16(HDC16,INT16,INT16);
+BOOL16      WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+INT16       WINAPI StartDoc16(HDC16,const DOCINFO16*);
+INT16       WINAPI StartPage16(HDC16);
+INT16       WINAPI StartSpoolPage16(HPJOB16);
+BOOL16      WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,
+                                INT16,INT16,INT16,DWORD);
+INT16       WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,
+                       INT16,INT16,const VOID*,const BITMAPINFO*,UINT16,DWORD);
+BOOL16      WINAPI StrokeAndFillPath16(HDC16);
+BOOL16      WINAPI StrokePath16(HDC16);
+BOOL16      WINAPI TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);
+BOOL16      WINAPI UnrealizeObject16(HGDIOBJ16);
+INT16       WINAPI UpdateColors16(HDC16);
+BOOL16      WINAPI WidenPath16(HDC16);
+INT16       WINAPI WriteDialog16(HPJOB16,LPSTR,INT16);
+INT16       WINAPI WriteSpool16(HPJOB16,LPSTR,INT16);
+
+#endif /* __WINE_WINE_WINGDI16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h
new file mode 100644
index 0000000..5513609
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h
@@ -0,0 +1,297 @@
+/*
+ * Definitions for windows network service
+ *
+ * Copyright 1997 Andreas Mohr
+ * Copyright 1999 Ulrich Weigand
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINNET16_H
+#define __WINE_WINNET16_H
+
+#include <windef.h>
+#include <wine/windef16.h>
+
+#include <pshpack1.h>
+
+/*
+ * Remote printing
+ */
+
+typedef struct
+{
+    WORD    pqName;
+    WORD    pqComment;
+    WORD    pqStatus;
+    WORD    pqJobcount;
+    WORD    pqPrinters;
+
+} QUEUESTRUCT16, *LPQUEUESTRUCT16;
+
+#define WNPRQ_ACTIVE    0x0
+#define WNPRQ_PAUSE     0x1
+#define WNPRQ_ERROR     0x2
+#define WNPRQ_PENDING   0x3
+#define WNPRQ_PROBLEM   0x4
+
+typedef struct
+{
+    WORD    pjId;
+    WORD    pjUsername;
+    WORD    pjParms;
+    WORD    pjPosition;
+    WORD    pjStatus;
+    DWORD   pjSubmitted;
+    DWORD   pjSize;
+    WORD    pjCopies;
+    WORD    pjComment;
+
+} JOBSTRUCT16, *LPJOBSTRUCT16;
+
+#include <poppack.h>
+
+#define WNPRJ_QSTATUS           0x0007
+#define WNPRJ_DEVSTATUS         0x0FF8
+
+#define WNPRJ_QS_QUEUED         0x0000
+#define WNPRJ_QS_PAUSED         0x0001
+#define WNPRJ_QS_SPOOLING       0x0002
+#define WNPRJ_QS_PRINTING       0x0003
+
+#define WNPRJ_DS_COMPLETE       0x0008
+#define WNPRJ_DS_INTERV         0x0010
+#define WNPRJ_DS_ERROR          0x0020
+#define WNPRJ_DS_DESTOFFLINE    0x0040
+#define WNPRJ_DS_DESTPAUSED     0x0080
+#define WNPRJ_DS_NOTIFY         0x0100
+#define WNPRJ_DS_DESTNOPAPER    0x0200
+#define WNPRJ_DS_DESTFORMCHG    0x0400
+#define WNPRJ_DS_DESTCRTCHG     0x0800
+#define WNPRJ_DS_DESTPENCHG     0x1000
+
+#define SP_QUEUECHANGED         0x0500
+
+#define WNJ_NULL_JOBID  0
+
+WORD WINAPI WNetOpenJob16(LPSTR,LPSTR,WORD,LPINT16);
+WORD WINAPI WNetCloseJob16(WORD,LPINT16,LPSTR);
+WORD WINAPI WNetWriteJob16(HANDLE16,LPSTR,LPINT16);
+WORD WINAPI WNetAbortJob16(LPSTR,WORD);
+WORD WINAPI WNetHoldJob16(LPSTR,WORD);
+WORD WINAPI WNetReleaseJob16(LPSTR,WORD);
+WORD WINAPI WNetCancelJob16(LPSTR,WORD);
+WORD WINAPI WNetSetJobCopies16(LPSTR,WORD,WORD);
+
+WORD WINAPI WNetWatchQueue16(HWND16,LPSTR,LPSTR,WORD);
+WORD WINAPI WNetUnwatchQueue16(LPSTR);
+WORD WINAPI WNetLockQueueData16(LPSTR,LPSTR,LPQUEUESTRUCT16 *);
+WORD WINAPI WNetUnlockQueueData16(LPSTR);
+
+
+/*
+ * Connections
+ */
+
+WORD WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR);
+WORD WINAPI WNetCancelConnection16(LPSTR,BOOL16);
+WORD WINAPI WNetGetConnection16(LPSTR,LPSTR,UINT16 *);
+WORD WINAPI WNetRestoreConnection16(HWND16,LPSTR);
+
+/*
+ * Capabilities
+ */
+
+WORD WINAPI WNetGetCaps16(WORD);
+
+#define WNNC16_SPEC_VERSION                       0x01
+#define WNNC16_NET_TYPE                           0x02
+#define WNNC16_DRIVER_VERSION                     0x03
+#define WNNC16_USER                               0x04
+#define WNNC16_CONNECTION                         0x06
+#define WNNC16_PRINTING                           0x07
+#define WNNC16_DIALOG                             0x08
+#define WNNC16_ADMIN                              0x09
+#define WNNC16_ERROR                              0x0a
+#define WNNC16_PRINTMGREXT                        0x0b
+
+#define WNNC16_NET_NONE                           0x0
+#define WNNC16_NET_MSNet                          0x1
+#define WNNC16_NET_LanMan                         0x2
+#define WNNC16_NET_NetWare                        0x3
+#define WNNC16_NET_Vines                          0x4
+#define WNNC16_NET_10NET                          0x5
+#define WNNC16_NET_Locus                          0x6
+#define WNNC16_NET_SUN_PC_NFS                     0x7
+#define WNNC16_NET_LANstep                        0x8
+#define WNNC16_NET_9TILES                         0x9
+#define WNNC16_NET_LANtastic                      0xa
+#define WNNC16_NET_AS400                          0xb
+#define WNNC16_NET_FTP_NFS                        0xc
+#define WNNC16_NET_PATHWORKS                      0xd
+#define WNNC16_NET_LifeNet                        0xe
+#define WNNC16_NET_POWERLan                       0xf
+#define WNNC16_NET_MultiNet                       0x8000
+
+#define WNNC16_SUBNET_NONE                        0x00
+#define WNNC16_SUBNET_MSNet                       0x01
+#define WNNC16_SUBNET_LanMan                      0x02
+#define WNNC16_SUBNET_WinWorkgroups               0x04
+#define WNNC16_SUBNET_NetWare                     0x08
+#define WNNC16_SUBNET_Vines                       0x10
+#define WNNC16_SUBNET_Other                       0x80
+
+#define WNNC16_CON_AddConnection                  0x0001
+#define WNNC16_CON_CancelConnection               0x0002
+#define WNNC16_CON_GetConnections                 0x0004
+#define WNNC16_CON_AutoConnect                    0x0008
+#define WNNC16_CON_BrowseDialog                   0x0010
+#define WNNC16_CON_RestoreConnection              0x0020
+
+#define WNNC16_PRT_OpenJob                        0x0002
+#define WNNC16_PRT_CloseJob                       0x0004
+#define WNNC16_PRT_HoldJob                        0x0010
+#define WNNC16_PRT_ReleaseJob                     0x0020
+#define WNNC16_PRT_CancelJob                      0x0040
+#define WNNC16_PRT_SetJobCopies                   0x0080
+#define WNNC16_PRT_WatchQueue                     0x0100
+#define WNNC16_PRT_UnwatchQueue                   0x0200
+#define WNNC16_PRT_LockQueueData                  0x0400
+#define WNNC16_PRT_UnlockQueueData                0x0800
+#define WNNC16_PRT_ChangeMsg                      0x1000
+#define WNNC16_PRT_AbortJob                       0x2000
+#define WNNC16_PRT_NoArbitraryLock                0x4000
+#define WNNC16_PRT_WriteJob                       0x8000
+
+#define WNNC16_DLG_DeviceMode                     0x0001
+#define WNNC16_DLG_BrowseDialog                   0x0002
+#define WNNC16_DLG_ConnectDialog                  0x0004
+#define WNNC16_DLG_DisconnectDialog               0x0008
+#define WNNC16_DLG_ViewQueueDialog                0x0010
+#define WNNC16_DLG_PropertyDialog                 0x0020
+#define WNNC16_DLG_ConnectionDialog               0x0040
+#define WNNC16_DLG_PrinterConnectDialog           0x0080
+#define WNNC16_DLG_SharesDialog                   0x0100
+#define WNNC16_DLG_ShareAsDialog                  0x0200
+
+#define WNNC16_ADM_GetDirectoryType               0x0001
+#define WNNC16_ADM_DirectoryNotify                0x0002
+#define WNNC16_ADM_LongNames                      0x0004
+#define WNNC16_ADM_SetDefaultDrive                0x0008
+
+#define WNNC16_ERR_GetError                       0x0001
+#define WNNC16_ERR_GetErrorText                   0x0002
+
+
+/*
+ * Get User
+ */
+
+WORD WINAPI WNetGetUser16(LPSTR,LPINT16);
+
+
+/*
+ * Browsing
+ */
+
+#define WNBD_CONN_UNKNOWN       0x0
+#define WNBD_CONN_DISKTREE      0x1
+#define WNBD_CONN_PRINTQ        0x3
+#define WNBD_MAX_LENGTH         0x80
+
+#define WNTYPE_DRIVE            1
+#define WNTYPE_FILE             2
+#define WNTYPE_PRINTER          3
+#define WNTYPE_COMM             4
+
+#define WNPS_FILE               0
+#define WNPS_DIR                1
+#define WNPS_MULT               2
+
+WORD WINAPI WNetDeviceMode16(HWND16);
+WORD WINAPI WNetBrowseDialog16(HWND16,WORD,LPSTR);
+WORD WINAPI WNetConnectDialog16(HWND16,WORD);
+WORD WINAPI WNetDisconnectDialog16(HWND16,WORD);
+WORD WINAPI WNetConnectionDialog16(HWND16,WORD);
+WORD WINAPI WNetViewQueueDialog16(HWND16,LPSTR);
+WORD WINAPI WNetPropertyDialog16(HWND16,WORD,WORD,LPSTR,WORD);
+WORD WINAPI WNetGetPropertyText16(WORD,WORD,LPSTR,LPSTR,WORD,WORD);
+
+
+/*
+ * Admin
+ */
+
+#define WNDT_NORMAL   0
+#define WNDT_NETWORK  1
+
+#define WNDN_MKDIR    1
+#define WNDN_RMDIR    2
+#define WNDN_MVDIR    3
+
+WORD WINAPI WNetGetDirectoryType16(LPSTR,LPINT16);
+WORD WINAPI WNetDirectoryNotify16(HWND16,LPSTR,WORD);
+
+
+/*
+ * Status codes
+ */
+
+WORD WINAPI WNetGetError16(LPINT16);
+WORD WINAPI WNetGetErrorText16(WORD,LPSTR,LPINT16);
+WORD WINAPI WNetErrorText16(WORD,LPSTR,WORD);
+
+#define WN16_SUCCESS                      0x0000
+#define WN16_NOT_SUPPORTED                0x0001
+#define WN16_NET_ERROR                    0x0002
+#define WN16_MORE_DATA                    0x0003
+#define WN16_BAD_POINTER                  0x0004
+#define WN16_BAD_VALUE                    0x0005
+#define WN16_BAD_PASSWORD                 0x0006
+#define WN16_ACCESS_DENIED                0x0007
+#define WN16_FUNCTION_BUSY                0x0008
+#define WN16_WINDOWS_ERROR                0x0009
+#define WN16_BAD_USER                     0x000A
+#define WN16_OUT_OF_MEMORY                0x000B
+#define WN16_CANCEL                       0x000C
+#define WN16_CONTINUE                     0x000D
+#define WN16_NOT_CONNECTED                0x0030
+#define WN16_OPEN_FILES                   0x0031
+#define WN16_BAD_NETNAME                  0x0032
+#define WN16_BAD_LOCALNAME                0x0033
+#define WN16_ALREADY_CONNECTED            0x0034
+#define WN16_DEVICE_ERROR                 0x0035
+#define WN16_CONNECTION_CLOSED            0x0036
+#define WN16_BAD_JOBID                    0x0040
+#define WN16_JOB_NOT_FOUND                0x0041
+#define WN16_JOB_NOT_HELD                 0x0042
+#define WN16_BAD_QUEUE                    0x0043
+#define WN16_BAD_FILE_HANDLE              0x0044
+#define WN16_CANT_SET_COPIES              0x0045
+#define WN16_ALREADY_LOCKED               0x0046
+#define WN16_NO_ERROR                     0x0050
+
+
+
+#endif /* __WINE_WINNET16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h
new file mode 100644
index 0000000..85a9451
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h
@@ -0,0 +1,966 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_WINUSER16_H
+#define __WINE_WINE_WINUSER16_H
+
+#include <wine/wingdi16.h> /* wingdi.h needed for COLORREF */
+#include <winuser.h> /* winuser.h needed for MSGBOXCALLBACK */
+
+#include <pshpack1.h>
+
+typedef struct tagCOMSTAT16
+{
+    BYTE   status;
+    UINT16 cbInQue;
+    UINT16 cbOutQue;
+} COMSTAT16,*LPCOMSTAT16;
+
+typedef struct tagDCB16
+{
+    BYTE   Id;
+    UINT16 BaudRate;
+    BYTE   ByteSize;
+    BYTE   Parity;
+    BYTE   StopBits;
+    UINT16 RlsTimeout;
+    UINT16 CtsTimeout;
+    UINT16 DsrTimeout;
+
+    unsigned fBinary        :1;
+    unsigned fRtsDisable    :1;
+    unsigned fParity        :1;
+    unsigned fOutxCtsFlow   :1;
+    unsigned fOutxDsrFlow   :1;
+    unsigned fDummy         :2;
+    unsigned fDtrDisable    :1;
+
+    unsigned fOutX          :1;
+    unsigned fInX           :1;
+    unsigned fPeChar        :1;
+    unsigned fNull          :1;
+    unsigned fChEvt         :1;
+    unsigned fDtrflow       :1;
+    unsigned fRtsflow       :1;
+    unsigned fDummy2        :1;
+
+    CHAR   XonChar;
+    CHAR   XoffChar;
+    UINT16 XonLim;
+    UINT16 XoffLim;
+    CHAR   PeChar;
+    CHAR   EofChar;
+    CHAR   EvtChar;
+    UINT16 TxDelay;
+} DCB16, *LPDCB16;
+
+
+typedef struct
+{
+   LPARAM   lParam;
+   WPARAM16 wParam;
+   UINT16   message;
+   HWND16   hwnd;
+} CWPSTRUCT16, *LPCWPSTRUCT16;
+
+typedef struct
+{
+  LRESULT       lResult;
+  LPARAM        lParam;
+  WPARAM16      wParam;
+  DWORD         message;
+  HWND16        hwnd;
+} CWPRETSTRUCT16, *LPCWPRETSTRUCT16;
+
+  /* SetWindowPlacement() struct */
+typedef struct
+{
+    UINT16   length;
+    UINT16   flags;
+    UINT16   showCmd;
+    POINT16  ptMinPosition;
+    POINT16  ptMaxPosition;
+    RECT16   rcNormalPosition;
+} WINDOWPLACEMENT16, *LPWINDOWPLACEMENT16;
+
+/****** Window classes ******/
+
+typedef struct
+{
+    UINT16      style;
+    WNDPROC16   lpfnWndProc;
+    INT16       cbClsExtra;
+    INT16       cbWndExtra;
+    HANDLE16    hInstance;
+    HICON16     hIcon;
+    HCURSOR16   hCursor;
+    HBRUSH16    hbrBackground;
+    SEGPTR      lpszMenuName;
+    SEGPTR      lpszClassName;
+} WNDCLASS16, *LPWNDCLASS16;
+
+typedef struct
+{
+    UINT      cbSize;
+    UINT      style;
+    WNDPROC16   lpfnWndProc;
+    INT16       cbClsExtra;
+    INT16       cbWndExtra;
+    HANDLE16    hInstance;
+    HICON16     hIcon;
+    HCURSOR16   hCursor;
+    HBRUSH16    hbrBackground;
+    SEGPTR      lpszMenuName;
+    SEGPTR      lpszClassName;
+    HICON16     hIconSm;
+} WNDCLASSEX16, *LPWNDCLASSEX16;
+
+typedef struct
+{
+    HWND16    hwnd;
+    UINT16    message;
+    WPARAM16  wParam;
+    LPARAM    lParam;
+    DWORD     time;
+    POINT16   pt;
+} MSG16, *LPMSG16;
+
+typedef struct
+{
+    MSG16 msg;
+    WORD wParamHigh;
+} MSG32_16, *LPMSG16_32;
+
+/* Cursors / Icons */
+
+typedef struct tagCURSORICONINFO
+{
+    POINT16 ptHotSpot;
+    WORD    nWidth;
+    WORD    nHeight;
+    WORD    nWidthBytes;
+    BYTE    bPlanes;
+    BYTE    bBitsPerPixel;
+} CURSORICONINFO;
+
+typedef struct {
+	BOOL16		fIcon;
+	WORD		xHotspot;
+	WORD		yHotspot;
+	HBITMAP16	hbmMask;
+	HBITMAP16	hbmColor;
+} ICONINFO16,*LPICONINFO16;
+
+typedef struct
+{
+    BYTE   fVirt;
+    WORD   key;
+    WORD   cmd;
+} ACCEL16, *LPACCEL16;
+
+/* FIXME: not sure this one is correct */
+typedef struct {
+  UINT16    cbSize;
+  UINT16    fMask;
+  UINT16    fType;
+  UINT16    fState;
+  UINT16    wID;
+  HMENU16   hSubMenu;
+  HBITMAP16 hbmpChecked;
+  HBITMAP16 hbmpUnchecked;
+  DWORD     dwItemData;
+  SEGPTR    dwTypeData;
+  UINT16    cch;
+} MENUITEMINFO16, *LPMENUITEMINFO16;
+
+/* DrawState defines ... */
+typedef BOOL16 (CALLBACK *DRAWSTATEPROC16)(HDC16,LPARAM,WPARAM16,INT16,INT16);
+
+/* Listbox messages */
+#define LB_ADDSTRING16           (WM_USER+1)
+#define LB_INSERTSTRING16        (WM_USER+2)
+#define LB_DELETESTRING16        (WM_USER+3)
+#define LB_SELITEMRANGEEX16      (WM_USER+4)
+#define LB_RESETCONTENT16        (WM_USER+5)
+#define LB_SETSEL16              (WM_USER+6)
+#define LB_SETCURSEL16           (WM_USER+7)
+#define LB_GETSEL16              (WM_USER+8)
+#define LB_GETCURSEL16           (WM_USER+9)
+#define LB_GETTEXT16             (WM_USER+10)
+#define LB_GETTEXTLEN16          (WM_USER+11)
+#define LB_GETCOUNT16            (WM_USER+12)
+#define LB_SELECTSTRING16        (WM_USER+13)
+#define LB_DIR16                 (WM_USER+14)
+#define LB_GETTOPINDEX16         (WM_USER+15)
+#define LB_FINDSTRING16          (WM_USER+16)
+#define LB_GETSELCOUNT16         (WM_USER+17)
+#define LB_GETSELITEMS16         (WM_USER+18)
+#define LB_SETTABSTOPS16         (WM_USER+19)
+#define LB_GETHORIZONTALEXTENT16 (WM_USER+20)
+#define LB_SETHORIZONTALEXTENT16 (WM_USER+21)
+#define LB_SETCOLUMNWIDTH16      (WM_USER+22)
+#define LB_ADDFILE16             (WM_USER+23)
+#define LB_SETTOPINDEX16         (WM_USER+24)
+#define LB_GETITEMRECT16         (WM_USER+25)
+#define LB_GETITEMDATA16         (WM_USER+26)
+#define LB_SETITEMDATA16         (WM_USER+27)
+#define LB_SELITEMRANGE16        (WM_USER+28)
+#define LB_SETANCHORINDEX16      (WM_USER+29)
+#define LB_GETANCHORINDEX16      (WM_USER+30)
+#define LB_SETCARETINDEX16       (WM_USER+31)
+#define LB_GETCARETINDEX16       (WM_USER+32)
+#define LB_SETITEMHEIGHT16       (WM_USER+33)
+#define LB_GETITEMHEIGHT16       (WM_USER+34)
+#define LB_FINDSTRINGEXACT16     (WM_USER+35)
+#define LB_CARETON16             (WM_USER+36)
+#define LB_CARETOFF16            (WM_USER+37)
+
+/* Combo box messages */
+#define CB_GETEDITSEL16            (WM_USER+0)
+#define CB_LIMITTEXT16             (WM_USER+1)
+#define CB_SETEDITSEL16            (WM_USER+2)
+#define CB_ADDSTRING16             (WM_USER+3)
+#define CB_DELETESTRING16          (WM_USER+4)
+#define CB_DIR16                   (WM_USER+5)
+#define CB_GETCOUNT16              (WM_USER+6)
+#define CB_GETCURSEL16             (WM_USER+7)
+#define CB_GETLBTEXT16             (WM_USER+8)
+#define CB_GETLBTEXTLEN16          (WM_USER+9)
+#define CB_INSERTSTRING16          (WM_USER+10)
+#define CB_RESETCONTENT16          (WM_USER+11)
+#define CB_FINDSTRING16            (WM_USER+12)
+#define CB_SELECTSTRING16          (WM_USER+13)
+#define CB_SETCURSEL16             (WM_USER+14)
+#define CB_SHOWDROPDOWN16          (WM_USER+15)
+#define CB_GETITEMDATA16           (WM_USER+16)
+#define CB_SETITEMDATA16           (WM_USER+17)
+#define CB_GETDROPPEDCONTROLRECT16 (WM_USER+18)
+#define CB_SETITEMHEIGHT16         (WM_USER+19)
+#define CB_GETITEMHEIGHT16         (WM_USER+20)
+#define CB_SETEXTENDEDUI16         (WM_USER+21)
+#define CB_GETEXTENDEDUI16         (WM_USER+22)
+#define CB_GETDROPPEDSTATE16       (WM_USER+23)
+#define CB_FINDSTRINGEXACT16       (WM_USER+24)
+
+typedef struct /* not sure if the 16bit version is correct */
+{
+    UINT	cbSize;
+    HWND16	hwndOwner;
+    HINSTANCE16	hInstance;
+    SEGPTR	lpszText;
+    SEGPTR	lpszCaption;
+    DWORD	dwStyle;
+    SEGPTR	lpszIcon;
+    DWORD	dwContextHelpId;
+    MSGBOXCALLBACK	lpfnMsgBoxCallback;
+    DWORD	dwLanguageId;
+} MSGBOXPARAMS16,*LPMSGBOXPARAMS16;
+
+  /* Windows */
+
+typedef struct
+{
+    SEGPTR      lpCreateParams;
+    HINSTANCE16 hInstance;
+    HMENU16     hMenu;
+    HWND16      hwndParent;
+    INT16       cy;
+    INT16       cx;
+    INT16       y;
+    INT16       x;
+    LONG        style;
+    SEGPTR      lpszName;
+    SEGPTR      lpszClass;
+    DWORD       dwExStyle;
+} CREATESTRUCT16, *LPCREATESTRUCT16;
+
+typedef struct
+{
+    HDC16   hdc;
+    BOOL16  fErase;
+    RECT16  rcPaint;
+    BOOL16  fRestore;
+    BOOL16  fIncUpdate;
+    BYTE    rgbReserved[16];
+} PAINTSTRUCT16, *LPPAINTSTRUCT16;
+
+typedef struct
+{
+    HMENU16   hWindowMenu;
+    UINT16    idFirstChild;
+} CLIENTCREATESTRUCT16, *LPCLIENTCREATESTRUCT16;
+
+typedef struct
+{
+    SEGPTR       szClass;
+    SEGPTR       szTitle;
+    HINSTANCE16  hOwner;
+    INT16        x;
+    INT16        y;
+    INT16        cx;
+    INT16        cy;
+    DWORD        style;
+    LPARAM       lParam;
+} MDICREATESTRUCT16, *LPMDICREATESTRUCT16;
+
+  /* WM_GETMINMAXINFO struct */
+typedef struct
+{
+    POINT16   ptReserved;
+    POINT16   ptMaxSize;
+    POINT16   ptMaxPosition;
+    POINT16   ptMinTrackSize;
+    POINT16   ptMaxTrackSize;
+} MINMAXINFO16;
+
+  /* WM_WINDOWPOSCHANGING/CHANGED struct */
+typedef struct tagWINDOWPOS16
+{
+    HWND16  hwnd;
+    HWND16  hwndInsertAfter;
+    INT16   x;
+    INT16   y;
+    INT16   cx;
+    INT16   cy;
+    UINT16  flags;
+} WINDOWPOS16, *LPWINDOWPOS16;
+
+  /* WM_NCCALCSIZE parameter structure */
+typedef struct
+{
+    RECT16  rgrc[3];
+    SEGPTR  lppos;
+} NCCALCSIZE_PARAMS16, *LPNCCALCSIZE_PARAMS16;
+
+typedef struct {
+	UINT16		cbSize;
+	INT16		iBorderWidth;
+	INT16		iScrollWidth;
+	INT16		iScrollHeight;
+	INT16		iCaptionWidth;
+	INT16		iCaptionHeight;
+	LOGFONT16	lfCaptionFont;
+	INT16		iSmCaptionWidth;
+	INT16		iSmCaptionHeight;
+	LOGFONT16	lfSmCaptionFont;
+	INT16		iMenuWidth;
+	INT16		iMenuHeight;
+	LOGFONT16	lfMenuFont;
+	LOGFONT16	lfStatusFont;
+	LOGFONT16	lfMessageFont;
+} NONCLIENTMETRICS16,*LPNONCLIENTMETRICS16;
+
+  /* Journalling hook structure */
+
+typedef struct
+{
+    UINT16  message;
+    UINT16  paramL;
+    UINT16  paramH;
+    DWORD   time;
+} EVENTMSG16, *LPEVENTMSG16;
+
+  /* Mouse hook structure */
+
+typedef struct
+{
+    POINT16 pt;
+    HWND16  hwnd;
+    UINT16  wHitTestCode;
+    DWORD   dwExtraInfo;
+} MOUSEHOOKSTRUCT16, *LPMOUSEHOOKSTRUCT16;
+
+  /* Hardware hook structure */
+
+typedef struct
+{
+    HWND16    hWnd;
+    UINT16    wMessage;
+    WPARAM16  wParam;
+    LPARAM    lParam;
+} HARDWAREHOOKSTRUCT16, *LPHARDWAREHOOKSTRUCT16;
+
+/* Scrollbar messages */
+#define SBM_SETPOS16             (WM_USER+0)
+#define SBM_GETPOS16             (WM_USER+1)
+#define SBM_SETRANGE16           (WM_USER+2)
+#define SBM_GETRANGE16           (WM_USER+3)
+#define SBM_ENABLE_ARROWS16      (WM_USER+4)
+
+  /* CBT hook structures */
+
+typedef struct
+{
+    CREATESTRUCT16  *lpcs;
+    HWND16           hwndInsertAfter;
+} CBT_CREATEWND16, *LPCBT_CREATEWND16;
+
+typedef struct
+{
+    BOOL16    fMouse;
+    HWND16    hWndActive;
+} CBTACTIVATESTRUCT16, *LPCBTACTIVATESTRUCT16;
+
+  /* Debug hook structure */
+
+typedef struct
+{
+    HMODULE16   hModuleHook;
+    LPARAM      reserved;
+    LPARAM      lParam;
+    WPARAM16    wParam;
+    INT16       code;
+} DEBUGHOOKINFO16, *LPDEBUGHOOKINFO16;
+
+#define GETMAXLPT	8
+#define GETMAXCOM	9
+#define GETBASEIRQ	10
+
+/* GetFreeSystemResources() parameters */
+
+#define GFSR_SYSTEMRESOURCES   0x0000
+#define GFSR_GDIRESOURCES      0x0001
+#define GFSR_USERRESOURCES     0x0002
+
+/* CreateWindow() coordinates */
+#define CW_USEDEFAULT16 ((INT16)0x8000)
+
+/* Win16 button control messages */
+#define BM_GETCHECK16          (WM_USER+0)
+#define BM_SETCHECK16          (WM_USER+1)
+#define BM_GETSTATE16          (WM_USER+2)
+#define BM_SETSTATE16          (WM_USER+3)
+#define BM_SETSTYLE16          (WM_USER+4)
+
+/* Static Control Messages */
+#define STM_SETICON16       (WM_USER+0)
+#define STM_GETICON16       (WM_USER+1)
+
+/* Edit control messages */
+#define EM_GETSEL16                (WM_USER+0)
+#define EM_SETSEL16                (WM_USER+1)
+#define EM_GETRECT16               (WM_USER+2)
+#define EM_SETRECT16               (WM_USER+3)
+#define EM_SETRECTNP16             (WM_USER+4)
+#define EM_SCROLL16                (WM_USER+5)
+#define EM_LINESCROLL16            (WM_USER+6)
+#define EM_SCROLLCARET16           (WM_USER+7)
+#define EM_GETMODIFY16             (WM_USER+8)
+#define EM_SETMODIFY16             (WM_USER+9)
+#define EM_GETLINECOUNT16          (WM_USER+10)
+#define EM_LINEINDEX16             (WM_USER+11)
+#define EM_SETHANDLE16             (WM_USER+12)
+#define EM_GETHANDLE16             (WM_USER+13)
+#define EM_GETTHUMB16              (WM_USER+14)
+#define EM_LINELENGTH16            (WM_USER+17)
+#define EM_REPLACESEL16            (WM_USER+18)
+#define EM_GETLINE16               (WM_USER+20)
+#define EM_LIMITTEXT16             (WM_USER+21)
+#define EM_CANUNDO16               (WM_USER+22)
+#define EM_UNDO16                  (WM_USER+23)
+#define EM_FMTLINES16              (WM_USER+24)
+#define EM_LINEFROMCHAR16          (WM_USER+25)
+#define EM_SETTABSTOPS16           (WM_USER+27)
+#define EM_SETPASSWORDCHAR16       (WM_USER+28)
+#define EM_EMPTYUNDOBUFFER16       (WM_USER+29)
+#define EM_GETFIRSTVISIBLELINE16   (WM_USER+30)
+#define EM_SETREADONLY16           (WM_USER+31)
+#define EM_SETWORDBREAKPROC16      (WM_USER+32)
+#define EM_GETWORDBREAKPROC16      (WM_USER+33)
+#define EM_GETPASSWORDCHAR16       (WM_USER+34)
+
+typedef struct
+{
+    UINT16      CtlType;
+    UINT16      CtlID;
+    UINT16      itemID;
+    UINT16      itemAction;
+    UINT16      itemState;
+    HWND16      hwndItem;
+    HDC16       hDC;
+    RECT16      rcItem;
+    DWORD       itemData;
+} DRAWITEMSTRUCT16, *PDRAWITEMSTRUCT16, *LPDRAWITEMSTRUCT16;
+
+typedef struct
+{
+    UINT16      CtlType;
+    UINT16      CtlID;
+    UINT16      itemID;
+    UINT16      itemWidth;
+    UINT16      itemHeight;
+    DWORD       itemData;
+} MEASUREITEMSTRUCT16, *PMEASUREITEMSTRUCT16, *LPMEASUREITEMSTRUCT16;
+
+typedef struct
+{
+    UINT16     CtlType;
+    UINT16     CtlID;
+    UINT16     itemID;
+    HWND16     hwndItem;
+    DWORD      itemData;
+} DELETEITEMSTRUCT16, *LPDELETEITEMSTRUCT16;
+
+typedef struct
+{
+    UINT16      CtlType;
+    UINT16      CtlID;
+    HWND16      hwndItem;
+    UINT16      itemID1;
+    DWORD       itemData1;
+    UINT16      itemID2;
+    DWORD       itemData2;
+} COMPAREITEMSTRUCT16, *LPCOMPAREITEMSTRUCT16;
+
+/* DragObject stuff */
+
+typedef struct
+{
+    HWND16     hWnd;
+    HANDLE16   hScope;
+    WORD       wFlags;
+    HANDLE16   hList;
+    HANDLE16   hOfStruct;
+    POINT16    pt;
+    LONG       l;
+} DRAGINFO16, *LPDRAGINFO16;
+
+/* undocumented */
+typedef struct tagCOPYDATASTRUCT16 {
+    DWORD dwData;
+    DWORD cbData;
+    SEGPTR lpData;
+} COPYDATASTRUCT16, *PCOPYDATASTRUCT16;
+
+#define DRAGOBJ_PROGRAM    0x0001
+#define DRAGOBJ_DATA       0x0002
+#define DRAGOBJ_DIRECTORY  0x0004
+#define DRAGOBJ_MULTIPLE   0x0008
+#define DRAGOBJ_EXTERNAL   0x8000
+
+#define DRAG_PRINT 0x544E5250
+#define DRAG_FILE  0x454C4946
+
+#include <poppack.h>
+
+/* WM_COMMNOTIFY flags */
+#define CN_RECEIVE	0x0001
+#define CN_TRANSMIT	0x0002
+#define CN_EVENT	0x0004
+
+BOOL16      WINAPI CheckMenuRadioItem16(HMENU16,UINT16,UINT16,UINT16,UINT16);
+HICON16     WINAPI CopyImage16(HANDLE16,UINT16,INT16,INT16,UINT16);
+HICON16     WINAPI CreateIconFromResource16(LPBYTE,UINT16,BOOL16,DWORD);
+BOOL16      WINAPI EnumChildWindows16(HWND16,WNDENUMPROC16,LPARAM);
+INT16       WINAPI EnumProps16(HWND16,PROPENUMPROC16);
+BOOL16      WINAPI EnumWindows16(WNDENUMPROC16,LPARAM);
+DWORD       WINAPI GetAppCompatFlags16(HTASK16);
+INT16       WINAPI GetKBCodePage16(void);
+INT16       WINAPI GetKeyboardType16(INT16);
+INT16       WINAPI GetKeyNameText16(LONG,LPSTR,INT16);
+INT16       WINAPI GetWindowRgn16(HWND16,HRGN16);
+BOOL16      WINAPI IsWindow16(HWND16);
+INT16       WINAPI LookupIconIdFromDirectory16(LPBYTE,BOOL16);
+UINT16      WINAPI MapVirtualKey16(UINT16,UINT16);
+FARPROC16   WINAPI SetWindowsHook16(INT16,HOOKPROC16);
+HHOOK       WINAPI SetWindowsHookEx16(INT16,HOOKPROC16,HINSTANCE16,HTASK16);
+BOOL16      WINAPI UnhookWindowsHook16(INT16,HOOKPROC16);
+BOOL16      WINAPI UnhookWindowsHookEx16(HHOOK);
+VOID        WINAPI CalcChildScroll16(HWND16,WORD);
+VOID        WINAPI CascadeChildWindows16(HWND16,WORD);
+INT16       WINAPI CloseComm16(INT16);
+HGLOBAL16   WINAPI CreateCursorIconIndirect16(HINSTANCE16,CURSORICONINFO*,
+                                            LPCVOID,LPCVOID);
+BOOL16      WINAPI DCHook16(HDC16,WORD,DWORD,LPARAM);
+BOOL16      WINAPI DlgDirSelect16(HWND16,LPSTR,INT16);
+BOOL16      WINAPI DlgDirSelectComboBox16(HWND16,LPSTR,INT16);
+DWORD       WINAPI DumpIcon16(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
+BOOL16      WINAPI EnableCommNotification16(INT16,HWND16,INT16,INT16);
+BOOL16      WINAPI EnableHardwareInput16(BOOL16);
+VOID        WINAPI FillWindow16(HWND16,HWND16,HDC16,HBRUSH16);
+INT16       WINAPI FlushComm16(INT16,INT16);
+UINT16      WINAPI GetCommEventMask16(INT16,UINT16);
+HBRUSH16    WINAPI GetControlBrush16(HWND16,HDC16,UINT16);
+HWND16      WINAPI GetDesktopHwnd16(void);
+WORD        WINAPI GetIconID16(HGLOBAL16,DWORD);
+FARPROC16   WINAPI GetMouseEventProc16(void);
+INT16       WINAPI InitApp16(HINSTANCE16);
+BOOL16      WINAPI IsUserIdle16(void);
+HGLOBAL16   WINAPI LoadCursorIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16   WINAPI LoadDIBCursorHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16   WINAPI LoadDIBIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HICON16     WINAPI LoadIconHandler16(HGLOBAL16,BOOL16);
+HMENU16     WINAPI LookupMenuHandle16(HMENU16,INT16);
+INT16       WINAPI OpenComm16(LPCSTR,UINT16,UINT16);
+VOID        WINAPI PaintRect16(HWND16,HWND16,HDC16,HBRUSH16,const RECT16*);
+INT16       WINAPI ReadComm16(INT16,LPSTR,INT16);
+SEGPTR      WINAPI SetCommEventMask16(INT16,UINT16);
+BOOL16      WINAPI SetDeskPattern(void);
+VOID        WINAPI TileChildWindows16(HWND16,WORD);
+INT16       WINAPI UngetCommChar16(INT16,CHAR);
+VOID        WINAPI UserYield16(void);
+INT16       WINAPI WriteComm16(INT16,LPSTR,INT16);
+BOOL16      WINAPI AdjustWindowRect16(LPRECT16,DWORD,BOOL16);
+BOOL16      WINAPI AdjustWindowRectEx16(LPRECT16,DWORD,BOOL16,DWORD);
+SEGPTR      WINAPI AnsiLower16(SEGPTR);
+UINT16      WINAPI AnsiLowerBuff16(LPSTR,UINT16);
+SEGPTR      WINAPI AnsiNext16(SEGPTR);
+SEGPTR      WINAPI AnsiPrev16(LPCSTR,SEGPTR);
+SEGPTR      WINAPI AnsiUpper16(SEGPTR);
+UINT16      WINAPI AnsiUpperBuff16(LPSTR,UINT16);
+BOOL16      WINAPI AnyPopup16(void);
+BOOL16      WINAPI AppendMenu16(HMENU16,UINT16,UINT16,SEGPTR);
+UINT16      WINAPI ArrangeIconicWindows16(HWND16);
+HDWP16      WINAPI BeginDeferWindowPos16(INT16);
+HDC16       WINAPI BeginPaint16(HWND16,LPPAINTSTRUCT16);
+BOOL16      WINAPI BringWindowToTop16(HWND16);
+BOOL16      WINAPI CallMsgFilter16(MSG16*,INT16);
+BOOL16      WINAPI CallMsgFilter32_16(MSG32_16*,INT16,BOOL16);
+LRESULT     WINAPI CallNextHookEx16(HHOOK,INT16,WPARAM16,LPARAM);
+LRESULT     WINAPI CallWindowProc16(WNDPROC16,HWND16,UINT16,WPARAM16,LPARAM);
+BOOL16      WINAPI ChangeClipboardChain16(HWND16,HWND16);
+BOOL16      WINAPI ChangeMenu16(HMENU16,UINT16,SEGPTR,UINT16,UINT16);
+BOOL16      WINAPI CheckDlgButton16(HWND16,INT16,UINT16);
+BOOL16      WINAPI CheckMenuItem16(HMENU16,UINT16,UINT16);
+BOOL16      WINAPI CheckRadioButton16(HWND16,UINT16,UINT16,UINT16);
+HWND16      WINAPI ChildWindowFromPoint16(HWND16,POINT16);
+HWND16      WINAPI ChildWindowFromPointEx16(HWND16,POINT16,UINT16);
+INT16       WINAPI ClearCommBreak16(INT16);
+VOID        WINAPI ClientToScreen16(HWND16,LPPOINT16);
+BOOL16      WINAPI ClipCursor16(const RECT16*);
+BOOL16      WINAPI CloseClipboard16(void);
+BOOL16      WINAPI CloseWindow16(HWND16);
+void        WINAPI ControlPanelInfo16(INT16, WORD, LPSTR);
+HCURSOR16   WINAPI CopyCursor16(HINSTANCE16,HCURSOR16);
+HICON16     WINAPI CopyIcon16(HINSTANCE16,HICON16);
+BOOL16      WINAPI CopyRect16(RECT16*,const RECT16*);
+INT16       WINAPI CountClipboardFormats16(void);
+VOID        WINAPI CreateCaret16(HWND16,HBITMAP16,INT16,INT16);
+HCURSOR16   WINAPI CreateCursor16(HINSTANCE16,INT16,INT16,INT16,INT16,LPCVOID,LPCVOID);
+HWND16      WINAPI CreateDialog16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16);
+HWND16      WINAPI CreateDialogIndirect16(HINSTANCE16,LPCVOID,HWND16,DLGPROC16);
+HWND16      WINAPI CreateDialogIndirectParam16(HINSTANCE16,LPCVOID,HWND16,
+                                               DLGPROC16,LPARAM);
+HWND16      WINAPI CreateDialogParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM);
+HICON16     WINAPI CreateIcon16(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID);
+HICON16     WINAPI CreateIconFromResourceEx16(LPBYTE,UINT16,BOOL16,DWORD,INT16,INT16,UINT16);
+HMENU16     WINAPI CreateMenu16(void);
+HMENU16     WINAPI CreatePopupMenu16(void);
+HWND16      WINAPI CreateWindow16(LPCSTR,LPCSTR,DWORD,INT16,INT16,INT16,INT16,
+                                  HWND16,HMENU16,HINSTANCE16,LPVOID);
+HWND16      WINAPI CreateWindowEx16(DWORD,LPCSTR,LPCSTR,DWORD,INT16,INT16,
+                                INT16,INT16,HWND16,HMENU16,HINSTANCE16,LPVOID);
+LRESULT     WINAPI DefDlgProc16(HWND16,UINT16,WPARAM16,LPARAM);
+HDWP16      WINAPI DeferWindowPos16(HDWP16,HWND16,HWND16,INT16,INT16,INT16,INT16,UINT16);
+LRESULT     WINAPI DefFrameProc16(HWND16,HWND16,UINT16,WPARAM16,LPARAM);
+LRESULT     WINAPI DefHookProc16(INT16,WPARAM16,LPARAM,HHOOK*);
+LRESULT     WINAPI DefMDIChildProc16(HWND16,UINT16,WPARAM16,LPARAM);
+LRESULT     WINAPI DefWindowProc16(HWND16,UINT16,WPARAM16,LPARAM);
+BOOL16      WINAPI DeleteMenu16(HMENU16,UINT16,UINT16);
+VOID        WINAPI DestroyCaret16(void);
+BOOL16      WINAPI DestroyCursor16(HCURSOR16);
+BOOL16      WINAPI DestroyIcon16(HICON16);
+BOOL16      WINAPI DestroyMenu16(HMENU16);
+BOOL16      WINAPI DestroyWindow16(HWND16);
+INT16       WINAPI DialogBox16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16);
+INT16       WINAPI DialogBoxIndirect16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16);
+INT16       WINAPI DialogBoxIndirectParam16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16,LPARAM);
+INT16       WINAPI DialogBoxParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM);
+LONG        WINAPI DispatchMessage16(const MSG16*);
+LONG        WINAPI DispatchMessage32_16(const MSG32_16*,BOOL16);
+INT16       WINAPI DlgDirList16(HWND16,LPSTR,INT16,INT16,UINT16);
+INT16       WINAPI DlgDirListComboBox16(HWND16,LPSTR,INT16,INT16,UINT16);
+BOOL16      WINAPI DlgDirSelectComboBoxEx16(HWND16,LPSTR,INT16,INT16);
+BOOL16      WINAPI DlgDirSelectEx16(HWND16,LPSTR,INT16,INT16);
+BOOL16      WINAPI DragDetect16(HWND16,POINT16);
+DWORD       WINAPI DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16);
+BOOL16      WINAPI DrawAnimatedRects16(HWND16,INT16,const RECT16*,const RECT16*);
+BOOL16      WINAPI DrawCaption16(HWND16,HDC16,const RECT16*,UINT16);
+BOOL16      WINAPI DrawCaptionTemp16(HWND16,HDC16, const RECT16*,HFONT16,HICON16,LPCSTR,UINT16);
+BOOL16      WINAPI DrawEdge16(HDC16,LPRECT16,UINT16,UINT16);
+void        WINAPI DrawFocusRect16(HDC16,const RECT16*);
+BOOL16      WINAPI DrawFrameControl16(HDC16,LPRECT16,UINT16,UINT16);
+BOOL16      WINAPI DrawIcon16(HDC16,INT16,INT16,HICON16);
+BOOL16      WINAPI DrawIconEx16(HDC16,INT16,INT16,HICON16,INT16,INT16,
+				UINT16,HBRUSH16,UINT16);
+VOID        WINAPI DrawMenuBar16(HWND16);
+INT16       WINAPI DrawText16(HDC16,LPCSTR,INT16,LPRECT16,UINT16);
+BOOL16      WINAPI EmptyClipboard16(void);
+BOOL16      WINAPI EnableMenuItem16(HMENU16,UINT16,UINT16);
+BOOL16      WINAPI EnableScrollBar16(HWND16,INT16,UINT16);
+BOOL16      WINAPI EnableWindow16(HWND16,BOOL16);
+BOOL16      WINAPI EndDeferWindowPos16(HDWP16);
+BOOL16      WINAPI EndDialog16(HWND16,INT16);
+BOOL16      WINAPI EndPaint16(HWND16,const PAINTSTRUCT16*);
+UINT16      WINAPI EnumClipboardFormats16(UINT16);
+BOOL16      WINAPI EqualRect16(const RECT16*,const RECT16*);
+LONG        WINAPI EscapeCommFunction16(UINT16,UINT16);
+INT16       WINAPI ExcludeUpdateRgn16(HDC16,HWND16);
+BOOL16      WINAPI ExitWindows16(DWORD,UINT16);
+INT16       WINAPI FillRect16(HDC16,const RECT16*,HBRUSH16);
+HWND16      WINAPI FindWindow16(LPCSTR,LPCSTR);
+HWND16      WINAPI FindWindowEx16(HWND16,HWND16,LPCSTR,LPCSTR);
+BOOL16      WINAPI FlashWindow16(HWND16,BOOL16);
+DWORD       WINAPI FormatMessage16(DWORD,SEGPTR,WORD,WORD,LPSTR,WORD,LPDWORD);
+INT16       WINAPI FrameRect16(HDC16,const RECT16*,HBRUSH16);
+HWND16      WINAPI GetActiveWindow16(void);
+INT16       WINAPI GetAsyncKeyState16(INT16);
+HWND16      WINAPI GetCapture16(void);
+UINT16      WINAPI GetCaretBlinkTime16(void);
+VOID        WINAPI GetCaretPos16(LPPOINT16);
+BOOL16      WINAPI GetClassInfo16(HINSTANCE16,SEGPTR,WNDCLASS16 *);
+BOOL16      WINAPI GetClassInfoEx16(HINSTANCE16,SEGPTR,WNDCLASSEX16 *);
+LONG        WINAPI GetClassLong16(HWND16,INT16);
+INT16       WINAPI GetClassName16(HWND16,LPSTR,INT16);
+WORD        WINAPI GetClassWord16(HWND16,INT16);
+void        WINAPI GetClientRect16(HWND16,LPRECT16);
+HANDLE16    WINAPI GetClipboardData16(UINT16);
+INT16       WINAPI GetClipboardFormatName16(UINT16,LPSTR,INT16);
+HWND16      WINAPI GetClipboardOwner16(void);
+HWND16      WINAPI GetClipboardViewer16(void);
+void        WINAPI GetClipCursor16(LPRECT16);
+DWORD       WINAPI GetCurrentTime16(void);
+HCURSOR16   WINAPI GetCursor16(void);
+BOOL16      WINAPI GetCursorPos16(LPPOINT16);
+HDC16       WINAPI GetDC16(HWND16);
+HDC16       WINAPI GetDCEx16(HWND16,HRGN16,DWORD);
+HWND16      WINAPI GetDesktopWindow16(void);
+INT16       WINAPI GetDlgCtrlID16(HWND16);
+HWND16      WINAPI GetDlgItem16(HWND16,INT16);
+UINT16      WINAPI GetDlgItemInt16(HWND16,INT16,BOOL16*,BOOL16);
+INT16       WINAPI GetDlgItemText16(HWND16,INT16,SEGPTR,UINT16);
+UINT16      WINAPI GetDoubleClickTime16(void);
+HWND16      WINAPI GetFocus16(void);
+HWND16      WINAPI GetForegroundWindow16(void);
+BOOL16      WINAPI GetIconInfo16(HICON16,LPICONINFO16);
+BOOL16      WINAPI GetInputState16(void);
+UINT16      WINAPI GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16);
+INT16       WINAPI GetKeyboardLayoutName16(LPSTR);
+INT16       WINAPI GetKeyState16(INT16);
+HWND16      WINAPI GetLastActivePopup16(HWND16);
+HMENU16     WINAPI GetMenu16(HWND16);
+DWORD       WINAPI GetMenuContextHelpId16(HMENU16);
+INT16       WINAPI GetMenuItemCount16(HMENU16);
+UINT16      WINAPI GetMenuItemID16(HMENU16,INT16);
+BOOL16      WINAPI GetMenuItemRect16(HWND16,HMENU16,UINT16,LPRECT16);
+UINT16      WINAPI GetMenuState16(HMENU16,UINT16,UINT16);
+INT16       WINAPI GetMenuString16(HMENU16,UINT16,LPSTR,INT16,UINT16);
+BOOL16      WINAPI GetMessage16(MSG16*,HWND16,UINT16,UINT16);
+BOOL16      WINAPI GetMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,BOOL16);
+HWND16      WINAPI GetNextDlgGroupItem16(HWND16,HWND16,BOOL16);
+HWND16      WINAPI GetNextDlgTabItem16(HWND16,HWND16,BOOL16);
+HWND16      WINAPI GetNextWindow16(HWND16,WORD);
+HWND16      WINAPI GetOpenClipboardWindow16(void);
+HWND16      WINAPI GetParent16(HWND16);
+INT16       WINAPI GetPriorityClipboardFormat16(UINT16*,INT16);
+HANDLE16    WINAPI GetProp16(HWND16,LPCSTR);
+DWORD       WINAPI GetQueueStatus16(UINT16);
+BOOL16      WINAPI GetScrollInfo16(HWND16,INT16,LPSCROLLINFO);
+INT16       WINAPI GetScrollPos16(HWND16,INT16);
+BOOL16      WINAPI GetScrollRange16(HWND16,INT16,LPINT16,LPINT16);
+HWND16      WINAPI GetShellWindow16(void);
+HMENU16     WINAPI GetSubMenu16(HMENU16,INT16);
+COLORREF    WINAPI GetSysColor16(INT16);
+HBRUSH16    WINAPI GetSysColorBrush16(INT16);
+HWND16      WINAPI GetSysModalWindow16(void);
+HMENU16     WINAPI GetSystemMenu16(HWND16,BOOL16);
+INT16       WINAPI GetSystemMetrics16(INT16);
+DWORD       WINAPI GetTabbedTextExtent16(HDC16,LPCSTR,INT16,INT16,const INT16*);
+HWND16      WINAPI GetTopWindow16(HWND16);
+BOOL16      WINAPI GetUpdateRect16(HWND16,LPRECT16,BOOL16);
+INT16       WINAPI GetUpdateRgn16(HWND16,HRGN16,BOOL16);
+HWND16      WINAPI GetWindow16(HWND16,WORD);
+HDC16       WINAPI GetWindowDC16(HWND16);
+LONG        WINAPI GetWindowLong16(HWND16,INT16);
+BOOL16      WINAPI GetWindowPlacement16(HWND16,LPWINDOWPLACEMENT16);
+void        WINAPI GetWindowRect16(HWND16,LPRECT16);
+HTASK16     WINAPI GetWindowTask16(HWND16);
+INT16       WINAPI GetWindowText16(HWND16,SEGPTR,INT16);
+INT16       WINAPI GetWindowTextLength16(HWND16);
+WORD        WINAPI GetWindowWord16(HWND16,INT16);
+ATOM        WINAPI GlobalAddAtom16(LPCSTR);
+ATOM        WINAPI GlobalDeleteAtom16(ATOM);
+ATOM        WINAPI GlobalFindAtom16(LPCSTR);
+UINT16      WINAPI GlobalGetAtomName16(ATOM,LPSTR,INT16);
+VOID        WINAPI HideCaret16(HWND16);
+BOOL16      WINAPI HiliteMenuItem16(HWND16,HMENU16,UINT16,UINT16);
+DWORD       WINAPI IconSize16(void);
+void        WINAPI InflateRect16(LPRECT16,INT16,INT16);
+HQUEUE16    WINAPI InitThreadInput16(WORD,WORD);
+BOOL16      WINAPI InSendMessage16(void);
+BOOL16      WINAPI InsertMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);
+BOOL16      WINAPI InsertMenuItem16(HMENU16,UINT16,BOOL16,const MENUITEMINFO16*);
+BOOL16      WINAPI IntersectRect16(LPRECT16,const RECT16*,const RECT16*);
+void        WINAPI InvalidateRect16(HWND16,const RECT16*,BOOL16);
+void        WINAPI InvalidateRgn16(HWND16,HRGN16,BOOL16);
+void        WINAPI InvertRect16(HDC16,const RECT16*);
+BOOL16      WINAPI IsCharAlpha16(CHAR);
+BOOL16      WINAPI IsCharAlphaNumeric16(CHAR);
+BOOL16      WINAPI IsCharLower16(CHAR);
+BOOL16      WINAPI IsCharUpper16(CHAR);
+BOOL16      WINAPI IsChild16(HWND16,HWND16);
+BOOL16      WINAPI IsClipboardFormatAvailable16(UINT16);
+UINT16      WINAPI IsDlgButtonChecked16(HWND16,UINT16);
+BOOL16      WINAPI IsIconic16(HWND16);
+BOOL16      WINAPI IsMenu16(HMENU16);
+BOOL16      WINAPI IsRectEmpty16(const RECT16*);
+BOOL16      WINAPI IsWindowEnabled16(HWND16);
+BOOL16      WINAPI IsWindowVisible16(HWND16);
+BOOL16      WINAPI IsZoomed16(HWND16);
+BOOL16      WINAPI KillSystemTimer16(HWND16,UINT16);
+BOOL16      WINAPI KillTimer16(HWND16,UINT16);
+HBITMAP16   WINAPI LoadBitmap16(HANDLE16,LPCSTR);
+HCURSOR16   WINAPI LoadCursor16(HINSTANCE16,LPCSTR);
+HICON16     WINAPI LoadIcon16(HINSTANCE16,LPCSTR);
+HANDLE16    WINAPI LoadImage16(HINSTANCE16,LPCSTR,UINT16,INT16,INT16,UINT16);
+HMENU16     WINAPI LoadMenu16(HINSTANCE16,LPCSTR);
+HMENU16     WINAPI LoadMenuIndirect16(LPCVOID);
+INT16       WINAPI LoadString16(HINSTANCE16,UINT16,LPSTR,INT16);
+BOOL16      WINAPI LockWindowUpdate16(HWND16);
+INT16       WINAPI LookupIconIdFromDirectoryEx16(LPBYTE,BOOL16,INT16,INT16,UINT16);
+void        WINAPI MapDialogRect16(HWND16,LPRECT16);
+void        WINAPI MapWindowPoints16(HWND16,HWND16,LPPOINT16,UINT16);
+VOID        WINAPI MessageBeep16(UINT16);
+INT16       WINAPI MessageBox16(HWND16,LPCSTR,LPCSTR,UINT16);
+INT16       WINAPI MessageBoxIndirect16(LPMSGBOXPARAMS16);
+BOOL16      WINAPI ModifyMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);
+BOOL16      WINAPI MoveWindow16(HWND16,INT16,INT16,INT16,INT16,BOOL16);
+void        WINAPI OffsetRect16(LPRECT16,INT16,INT16);
+BOOL16      WINAPI OpenClipboard16(HWND16);
+BOOL16      WINAPI OpenIcon16(HWND16);
+BOOL16      WINAPI PeekMessage16(MSG16*,HWND16,UINT16,UINT16,UINT16);
+BOOL16      WINAPI PeekMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,UINT16,BOOL16);
+BOOL16      WINAPI PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM);
+BOOL16      WINAPI PostMessage16(HWND16,UINT16,WPARAM16,LPARAM);
+void        WINAPI PostQuitMessage16(INT16);
+BOOL16      WINAPI PtInRect16(const RECT16*,POINT16);
+UINT16      WINAPI RealizePalette16(HDC16);
+BOOL16      WINAPI RedrawWindow16(HWND16,const RECT16*,HRGN16,UINT16);
+ATOM        WINAPI RegisterClass16(const WNDCLASS16*);
+ATOM        WINAPI RegisterClassEx16(const WNDCLASSEX16*);
+UINT16      WINAPI RegisterClipboardFormat16(LPCSTR);
+BOOL        WINAPI RegisterShellHook16(HWND16,UINT16);
+INT16       WINAPI ReleaseDC16(HWND16,HDC16);
+BOOL16      WINAPI RemoveMenu16(HMENU16,UINT16,UINT16);
+HANDLE16    WINAPI RemoveProp16(HWND16,LPCSTR);
+VOID        WINAPI ReplyMessage16(LRESULT);
+void        WINAPI ScreenToClient16(HWND16,LPPOINT16);
+VOID        WINAPI ScrollChildren16(HWND16,UINT16,WPARAM16,LPARAM);
+BOOL16      WINAPI ScrollDC16(HDC16,INT16,INT16,const RECT16*,const RECT16*,
+                      HRGN16,LPRECT16);
+void        WINAPI ScrollWindow16(HWND16,INT16,INT16,const RECT16*,const RECT16*);
+INT16       WINAPI ScrollWindowEx16(HWND16,INT16,INT16,const RECT16*,
+                                    const RECT16*,HRGN16,LPRECT16,UINT16);
+HPALETTE16  WINAPI SelectPalette16(HDC16,HPALETTE16,BOOL16);
+LRESULT     WINAPI SendDlgItemMessage16(HWND16,INT16,UINT16,WPARAM16,LPARAM);
+LRESULT     WINAPI SendMessage16(HWND16,UINT16,WPARAM16,LPARAM);
+HWND16      WINAPI SetActiveWindow16(HWND16);
+HWND16      WINAPI SetCapture16(HWND16);
+VOID        WINAPI SetCaretBlinkTime16(UINT16);
+VOID        WINAPI SetCaretPos16(INT16,INT16);
+LONG        WINAPI SetClassLong16(HWND16,INT16,LONG);
+WORD        WINAPI SetClassWord16(HWND16,INT16,WORD);
+HANDLE16    WINAPI SetClipboardData16(UINT16,HANDLE16);
+HWND16      WINAPI SetClipboardViewer16(HWND16);
+INT16       WINAPI SetCommBreak16(INT16);
+HCURSOR16   WINAPI SetCursor16(HCURSOR16);
+void        WINAPI SetCursorPos16(INT16,INT16);
+BOOL16      WINAPI SetDeskWallPaper16(LPCSTR);
+void        WINAPI SetDlgItemInt16(HWND16,INT16,UINT16,BOOL16);
+void        WINAPI SetDlgItemText16(HWND16,INT16,SEGPTR);
+VOID        WINAPI SetDoubleClickTime16(UINT16);
+HWND16      WINAPI SetFocus16(HWND16);
+BOOL16      WINAPI SetForegroundWindow16(HWND16);
+void        WINAPI SetInternalWindowPos16(HWND16,UINT16,LPRECT16,LPPOINT16);
+BOOL16      WINAPI SetMenu16(HWND16,HMENU16);
+BOOL16      WINAPI SetMenuContextHelpId16(HMENU16,DWORD);
+BOOL16      WINAPI SetMenuItemBitmaps16(HMENU16,UINT16,UINT16,HBITMAP16,HBITMAP16);
+BOOL16      WINAPI SetMessageQueue16(INT16);
+HWND16      WINAPI SetParent16(HWND16,HWND16);
+BOOL16      WINAPI SetProp16(HWND16,LPCSTR,HANDLE16);
+void        WINAPI SetRect16(LPRECT16,INT16,INT16,INT16,INT16);
+void        WINAPI SetRectEmpty16(LPRECT16);
+INT16       WINAPI SetScrollInfo16(HWND16,INT16,const SCROLLINFO*,BOOL16);
+INT16       WINAPI SetScrollPos16(HWND16,INT16,INT16,BOOL16);
+void        WINAPI SetScrollRange16(HWND16,INT16,INT16,INT16,BOOL16);
+VOID        WINAPI SetSysColors16(INT16,const INT16*,const COLORREF*);
+HWND16      WINAPI SetSysModalWindow16(HWND16);
+BOOL16      WINAPI SetSystemMenu16(HWND16,HMENU16);
+UINT16      WINAPI SetSystemTimer16(HWND16,UINT16,UINT16,TIMERPROC16);
+UINT16      WINAPI SetTimer16(HWND16,UINT16,UINT16,TIMERPROC16);
+LONG        WINAPI SetWindowLong16(HWND16,INT16,LONG);
+BOOL16      WINAPI SetWindowPlacement16(HWND16,const WINDOWPLACEMENT16*);
+BOOL16      WINAPI SetWindowPos16(HWND16,HWND16,INT16,INT16,INT16,INT16,WORD);
+INT16       WINAPI SetWindowRgn16(HWND16,HRGN16,BOOL16);
+BOOL16      WINAPI SetWindowText16(HWND16,SEGPTR);
+WORD        WINAPI SetWindowWord16(HWND16,INT16,WORD);
+VOID        WINAPI ShowCaret16(HWND16);
+INT16       WINAPI ShowCursor16(BOOL16);
+void        WINAPI ShowScrollBar16(HWND16,INT16,BOOL16);
+VOID        WINAPI ShowOwnedPopups16(HWND16,BOOL16);
+BOOL16      WINAPI ShowWindow16(HWND16,INT16);
+BOOL16      WINAPI SubtractRect16(LPRECT16,const RECT16*,const RECT16*);
+BOOL16      WINAPI SwapMouseButton16(BOOL16);
+VOID        WINAPI SwitchToThisWindow16(HWND16,BOOL16);
+BOOL16      WINAPI SystemParametersInfo16(UINT16,UINT16,LPVOID,UINT16);
+LONG        WINAPI TabbedTextOut16(HDC16,INT16,INT16,LPCSTR,INT16,INT16,const INT16*,INT16);
+BOOL16      WINAPI TrackPopupMenu16(HMENU16,UINT16,INT16,INT16,INT16,HWND16,const RECT16*);
+INT16       WINAPI TranslateAccelerator16(HWND16,HACCEL16,LPMSG16);
+BOOL16      WINAPI TranslateMDISysAccel16(HWND16,LPMSG16);
+BOOL16      WINAPI TranslateMessage16(const MSG16*);
+BOOL16      WINAPI TranslateMessage32_16(const MSG32_16*,BOOL16);
+INT16       WINAPI TransmitCommChar16(INT16,CHAR);
+BOOL16      WINAPI UnionRect16(LPRECT16,const RECT16*,const RECT16*);
+BOOL16      WINAPI UnregisterClass16(LPCSTR,HINSTANCE16);
+VOID        WINAPI UpdateWindow16(HWND16);
+VOID        WINAPI ValidateRect16(HWND16,const RECT16*);
+VOID        WINAPI ValidateRgn16(HWND16,HRGN16);
+HWND16      WINAPI WindowFromDC16(HDC16);
+HWND16      WINAPI WindowFromPoint16(POINT16);
+BOOL16      WINAPI WinHelp16(HWND16,LPCSTR,UINT16,DWORD);
+WORD        WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR);
+INT16       WINAPI wvsprintf16(LPSTR,LPCSTR,VA_LIST16);
+BOOL16      WINAPI DrawState16A(HDC16,HBRUSH16,DRAWSTATEPROC16,LPARAM,WPARAM16,INT16,INT16,INT16,INT16,UINT16);
+BOOL16      WINAPI IsDialogMessage16(HWND16,MSG16*);
+INT16       WINAPI GetCommError16(INT16,LPCOMSTAT16);
+INT16       WINAPI BuildCommDCB16(LPCSTR,LPDCB16);
+INT16       WINAPI GetCommState16(INT16,LPDCB16);
+INT16       WINAPI SetCommState16(LPDCB16);
+INT16       WINAPI lstrcmp16(LPCSTR,LPCSTR);
+INT16       WINAPI lstrcmpi16(LPCSTR,LPCSTR);
+
+/* undocumented functions */
+
+void        WINAPI ConvertDialog32To16(LPCVOID,DWORD,LPVOID);
+BOOL16      WINAPI EnumTaskWindows16(HTASK16,WNDENUMPROC16,LPARAM);
+BOOL16      WINAPI GrayString16(HDC16,HBRUSH16,GRAYSTRINGPROC16,LPARAM,
+                                INT16,INT16,INT16,INT16,INT16);
+DWORD       WINAPI GetFileResourceSize16(LPCSTR,LPCSTR,LPCSTR,LPDWORD);
+DWORD       WINAPI GetFileResource16(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,LPVOID);
+FARPROC16   WINAPI SetTaskSignalProc(HTASK16,FARPROC16);
+
+#endif /* __WINE_WINE_WINUSER16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h
new file mode 100644
index 0000000..f9cfab9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h
@@ -0,0 +1,71 @@
+/*
+ * Exported functions of the Wine preprocessor
+ *
+ * Copyright 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WPP_H
+#define __WINE_WPP_H
+
+#include <stdio.h>
+#include <stdarg.h>
+
+struct wpp_callbacks
+{
+    /* I/O callbacks */
+
+    /* Looks for a file to include, returning the path where it is found */
+    /* The type param is true for local (#include "filename.h") includes */
+    /* parent_name is the directory of the parent source file, includepath
+     * is an array of additional include paths */
+    char *(*lookup)( const char *filename, int type, const char *parent_name,
+                     char **include_path, int include_path_count );
+    /* Opens an include file */
+    void *(*open)( const char *filename, int type );
+    /* Closes a previously opened file */
+    void (*close)( void *file );
+    /* Reads buffer from the input */
+    int (*read)( void *file, char *buffer, unsigned int len );
+    /* Writes buffer to the output */
+    void (*write)( const char *buffer, unsigned int len );
+
+    /* Error callbacks */
+    void (*error)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );
+    void (*warning)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );
+};
+
+/* Return value == 0 means successful execution */
+extern int wpp_add_define( const char *name, const char *value );
+extern void wpp_del_define( const char *name );
+extern int wpp_add_cmdline_define( const char *value );
+extern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug );
+extern void wpp_set_pedantic( int on );
+extern int wpp_add_include_path( const char *path );
+extern char *wpp_find_include( const char *name, const char *parent_name );
+extern int wpp_parse( const char *input, FILE *output );
+extern void wpp_set_callbacks( const struct wpp_callbacks *callbacks );
+
+#endif  /* __WINE_WPP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h
new file mode 100644
index 0000000..26cdbd2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h
@@ -0,0 +1,2952 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINERROR_H
+#define __WINE_WINERROR_H
+
+#define FACILITY_NULL                         0
+#define FACILITY_RPC                          1
+#define FACILITY_DISPATCH                     2
+#define FACILITY_STORAGE                      3
+#define FACILITY_ITF                          4
+#define FACILITY_WIN32                        7
+#define FACILITY_WINDOWS                      8
+#define FACILITY_SSPI                         9
+#define FACILITY_SECURITY                     FACILITY_SSPI
+#define FACILITY_CONTROL                     10
+#define FACILITY_CERT                        11
+#define FACILITY_INTERNET                    12
+#define FACILITY_MEDIASERVER                 13
+#define FACILITY_MSMQ                        14
+#define FACILITY_SETUPAPI                    15
+#define FACILITY_SCARD                       16
+#define FACILITY_COMPLUS                     17
+#define FACILITY_AAF                         18
+#define FACILITY_URT                         19
+#define FACILITY_ACS                         20
+#define FACILITY_DPLAY                       21
+#define FACILITY_UMI                         22
+#define FACILITY_SXS                         23
+#define FACILITY_WINDOWS_CE                  24
+#define FACILITY_HTTP                        25
+#define FACILITY_COMMONLOG                   26
+#define FACILITY_USERMODE_FILTER_MANAGER     31
+#define FACILITY_BACKGROUNDCOPY              32
+#define FACILITY_CONFIGURATION               33
+#define FACILITY_STATE_MANAGEMENT            34
+#define FACILITY_METADIRECTORY               35
+#define FACILITY_WINDOWSUPDATE               36
+#define FACILITY_DIRECTORYSERVICE            37
+#define FACILITY_GRAPHICS                    38
+#define FACILITY_SHELL                       39
+#define FACILITY_TPM_SERVICES                40
+#define FACILITY_TPM_SOFTWARE                41
+#define FACILITY_PLA                         48
+#define FACILITY_FVE                         49
+#define FACILITY_WINDOWS_DEFENDER            80
+
+#define SEVERITY_SUCCESS    0
+#define SEVERITY_ERROR      1
+
+
+#define MAKE_HRESULT(sev,fac,code) \
+    ((HRESULT) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) )
+#define MAKE_SCODE(sev,fac,code) \
+        ((SCODE) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) )
+#define SUCCEEDED(stat) ((HRESULT)(stat)>=0)
+#define FAILED(stat) ((HRESULT)(stat)<0)
+#define IS_ERROR(stat) (((unsigned int)(stat)>>31) == SEVERITY_ERROR)
+
+#define HRESULT_CODE(hr) ((hr) & 0xFFFF)
+#define SCODE_CODE(sc)   ((sc) & 0xFFFF)
+
+#define HRESULT_FACILITY(hr)  (((hr) >> 16) & 0x1FFF)
+#define SCODE_FACILITY(sc)  (((sc) >> 16) & 0x1FFF)
+
+#define HRESULT_SEVERITY(hr)    (((hr) >> 31) & 0x1)
+#define SCODE_SEVERITY(sc)      (((sc) >> 31) & 0x1)
+
+#define __HRESULT_FROM_WIN32(x)   ((HRESULT)(x) > 0 ? ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)(x) )
+#ifndef _HRESULT_DEFINED
+#define _HRESULT_DEFINED
+# ifdef _MSC_VER
+typedef long            HRESULT;
+# else
+typedef int             HRESULT;
+# endif
+#endif
+static inline HRESULT HRESULT_FROM_WIN32(unsigned int x)
+{
+    return (HRESULT)x > 0 ? ((HRESULT) ((x & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)x;
+}
+#define FACILITY_NT_BIT         0x10000000
+#define HRESULT_FROM_NT(x)      ((HRESULT) ((x) | FACILITY_NT_BIT))
+
+/* SCODE <-> HRESULT functions */
+/* This macros is obsolete and should not be used in new apps. */
+#define GetScode(hr)         ((SCODE)(hr))
+/* This macros is obsolete and should not be used in new apps. */
+#define ResultFromScode(sc)  ((HRESULT)(sc))
+
+#define NO_ERROR                                           0
+#define ERROR_SUCCESS                                      0
+#define ERROR_INVALID_FUNCTION                             1
+#define ERROR_FILE_NOT_FOUND                               2
+#define ERROR_PATH_NOT_FOUND                               3
+#define ERROR_TOO_MANY_OPEN_FILES                          4
+#define ERROR_ACCESS_DENIED                                5
+#define ERROR_INVALID_HANDLE                               6
+#define ERROR_ARENA_TRASHED                                7
+#define ERROR_NOT_ENOUGH_MEMORY                            8
+#define ERROR_INVALID_BLOCK                                9
+#define ERROR_BAD_ENVIRONMENT                              10
+#define ERROR_BAD_FORMAT                                   11
+#define ERROR_INVALID_ACCESS                               12
+#define ERROR_INVALID_DATA                                 13
+#define ERROR_OUTOFMEMORY                                  14
+#define ERROR_INVALID_DRIVE                                15
+#define ERROR_CURRENT_DIRECTORY                            16
+#define ERROR_NOT_SAME_DEVICE                              17
+#define ERROR_NO_MORE_FILES                                18
+#define ERROR_WRITE_PROTECT                                19
+#define ERROR_BAD_UNIT                                     20
+#define ERROR_NOT_READY                                    21
+#define ERROR_BAD_COMMAND                                  22
+#define ERROR_CRC                                          23
+#define ERROR_BAD_LENGTH                                   24
+#define ERROR_SEEK                                         25
+#define ERROR_NOT_DOS_DISK                                 26
+#define ERROR_SECTOR_NOT_FOUND                             27
+#define ERROR_OUT_OF_PAPER                                 28
+#define ERROR_WRITE_FAULT                                  29
+#define ERROR_READ_FAULT                                   30
+#define ERROR_GEN_FAILURE                                  31
+#define ERROR_SHARING_VIOLATION                            32
+#define ERROR_LOCK_VIOLATION                               33
+#define ERROR_WRONG_DISK                                   34
+#define ERROR_FCB_UNAVAILABLE                              35
+#define ERROR_SHARING_BUFFER_EXCEEDED                      36
+#define ERROR_HANDLE_EOF                                   38
+#define ERROR_HANDLE_DISK_FULL                             39
+#define ERROR_NOT_SUPPORTED                                50
+#define ERROR_REM_NOT_LIST                                 51
+#define ERROR_DUP_NAME                                     52
+#define ERROR_BAD_NETPATH                                  53
+#define ERROR_NETWORK_BUSY                                 54
+#define ERROR_DEV_NOT_EXIST                                55
+#define ERROR_TOO_MANY_CMDS                                56
+#define ERROR_ADAP_HDW_ERR                                 57
+#define ERROR_BAD_NET_RESP                                 58
+#define ERROR_UNEXP_NET_ERR                                59
+#define ERROR_BAD_REM_ADAP                                 60
+#define ERROR_PRINTQ_FULL                                  61
+#define ERROR_NO_SPOOL_SPACE                               62
+#define ERROR_PRINT_CANCELLED                              63
+#define ERROR_NETNAME_DELETED                              64
+#define ERROR_NETWORK_ACCESS_DENIED                        65
+#define ERROR_BAD_DEV_TYPE                                 66
+#define ERROR_BAD_NET_NAME                                 67
+#define ERROR_TOO_MANY_NAMES                               68
+#define ERROR_TOO_MANY_SESS                                69
+#define ERROR_SHARING_PAUSED                               70
+#define ERROR_REQ_NOT_ACCEP                                71
+#define ERROR_REDIR_PAUSED                                 72
+#define ERROR_FILE_EXISTS                                  80
+#define ERROR_CANNOT_MAKE                                  82
+#define ERROR_FAIL_I24                                     83
+#define ERROR_OUT_OF_STRUCTURES                            84
+#define ERROR_ALREADY_ASSIGNED                             85
+#define ERROR_INVALID_PASSWORD                             86
+#define ERROR_INVALID_PARAMETER                            87
+#define ERROR_NET_WRITE_FAULT                              88
+#define ERROR_NO_PROC_SLOTS                                89
+#define ERROR_TOO_MANY_SEMAPHORES                          100
+#define ERROR_EXCL_SEM_ALREADY_OWNED                       101
+#define ERROR_SEM_IS_SET                                   102
+#define ERROR_TOO_MANY_SEM_REQUESTS                        103
+#define ERROR_INVALID_AT_INTERRUPT_TIME                    104
+#define ERROR_SEM_OWNER_DIED                               105
+#define ERROR_SEM_USER_LIMIT                               106
+#define ERROR_DISK_CHANGE                                  107
+#define ERROR_DRIVE_LOCKED                                 108
+#define ERROR_BROKEN_PIPE                                  109
+#define ERROR_OPEN_FAILED                                  110
+#define ERROR_BUFFER_OVERFLOW                              111
+#define ERROR_DISK_FULL                                    112
+#define ERROR_NO_MORE_SEARCH_HANDLES                       113
+#define ERROR_INVALID_TARGET_HANDLE                        114
+#define ERROR_INVALID_CATEGORY                             117
+#define ERROR_INVALID_VERIFY_SWITCH                        118
+#define ERROR_BAD_DRIVER_LEVEL                             119
+#define ERROR_CALL_NOT_IMPLEMENTED                         120
+#define ERROR_SEM_TIMEOUT                                  121
+#define ERROR_INSUFFICIENT_BUFFER                          122
+#define ERROR_INVALID_NAME                                 123
+#define ERROR_INVALID_LEVEL                                124
+#define ERROR_NO_VOLUME_LABEL                              125
+#define ERROR_MOD_NOT_FOUND                                126
+#define ERROR_PROC_NOT_FOUND                               127
+#define ERROR_WAIT_NO_CHILDREN                             128
+#define ERROR_CHILD_NOT_COMPLETE                           129
+#define ERROR_DIRECT_ACCESS_HANDLE                         130
+#define ERROR_NEGATIVE_SEEK                                131
+#define ERROR_SEEK_ON_DEVICE                               132
+#define ERROR_IS_JOIN_TARGET                               133
+#define ERROR_IS_JOINED                                    134
+#define ERROR_IS_SUBSTED                                   135
+#define ERROR_NOT_JOINED                                   136
+#define ERROR_NOT_SUBSTED                                  137
+#define ERROR_JOIN_TO_JOIN                                 138
+#define ERROR_SUBST_TO_SUBST                               139
+#define ERROR_JOIN_TO_SUBST                                140
+#define ERROR_SUBST_TO_JOIN                                141
+#define ERROR_BUSY_DRIVE                                   142
+#define ERROR_SAME_DRIVE                                   143
+#define ERROR_DIR_NOT_ROOT                                 144
+#define ERROR_DIR_NOT_EMPTY                                145
+#define ERROR_IS_SUBST_PATH                                146
+#define ERROR_IS_JOIN_PATH                                 147
+#define ERROR_PATH_BUSY                                    148
+#define ERROR_IS_SUBST_TARGET                              149
+#define ERROR_SYSTEM_TRACE                                 150
+#define ERROR_INVALID_EVENT_COUNT                          151
+#define ERROR_TOO_MANY_MUXWAITERS                          152
+#define ERROR_INVALID_LIST_FORMAT                          153
+#define ERROR_LABEL_TOO_LONG                               154
+#define ERROR_TOO_MANY_TCBS                                155
+#define ERROR_SIGNAL_REFUSED                               156
+#define ERROR_DISCARDED                                    157
+#define ERROR_NOT_LOCKED                                   158
+#define ERROR_BAD_THREADID_ADDR                            159
+#define ERROR_BAD_ARGUMENTS                                160
+#define ERROR_BAD_PATHNAME                                 161
+#define ERROR_SIGNAL_PENDING                               162
+#define ERROR_MAX_THRDS_REACHED                            164
+#define ERROR_LOCK_FAILED                                  167
+#define ERROR_BUSY                                         170
+#define ERROR_CANCEL_VIOLATION                             173
+#define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED                   174
+#define ERROR_INVALID_SEGMENT_NUMBER                       180
+#define ERROR_INVALID_ORDINAL                              182
+#define ERROR_ALREADY_EXISTS                               183
+#define ERROR_INVALID_FLAG_NUMBER                          186
+#define ERROR_SEM_NOT_FOUND                                187
+#define ERROR_INVALID_STARTING_CODESEG                     188
+#define ERROR_INVALID_STACKSEG                             189
+#define ERROR_INVALID_MODULETYPE                           190
+#define ERROR_INVALID_EXE_SIGNATURE                        191
+#define ERROR_EXE_MARKED_INVALID                           192
+#define ERROR_BAD_EXE_FORMAT                               193
+#define ERROR_ITERATED_DATA_EXCEEDS_64k                    194
+#define ERROR_INVALID_MINALLOCSIZE                         195
+#define ERROR_DYNLINK_FROM_INVALID_RING                    196
+#define ERROR_IOPL_NOT_ENABLED                             197
+#define ERROR_INVALID_SEGDPL                               198
+#define ERROR_AUTODATASEG_EXCEEDS_64k                      199
+#define ERROR_RING2SEG_MUST_BE_MOVABLE                     200
+#define ERROR_RELOC_CHAIN_XEEDS_SEGLIM                     201
+#define ERROR_INFLOOP_IN_RELOC_CHAIN                       202
+#define ERROR_ENVVAR_NOT_FOUND                             203
+#define ERROR_NO_SIGNAL_SENT                               205
+#define ERROR_FILENAME_EXCED_RANGE                         206
+#define ERROR_RING2_STACK_IN_USE                           207
+#define ERROR_META_EXPANSION_TOO_LONG                      208
+#define ERROR_INVALID_SIGNAL_NUMBER                        209
+#define ERROR_THREAD_1_INACTIVE                            210
+#define ERROR_LOCKED                                       212
+#define ERROR_TOO_MANY_MODULES                             214
+#define ERROR_NESTING_NOT_ALLOWED                          215
+#define ERROR_EXE_MACHINE_TYPE_MISMATCH                    216
+#define ERROR_BAD_PIPE                                     230
+#define ERROR_PIPE_BUSY                                    231
+#define ERROR_NO_DATA                                      232
+#define ERROR_PIPE_NOT_CONNECTED                           233
+#define ERROR_MORE_DATA                                    234
+#define ERROR_VC_DISCONNECTED                              240
+#define ERROR_INVALID_EA_NAME                              254
+#define ERROR_EA_LIST_INCONSISTENT                         255
+#define ERROR_NO_MORE_ITEMS                                259
+#define ERROR_CANNOT_COPY                                  266
+#define ERROR_DIRECTORY                                    267
+#define ERROR_EAS_DIDNT_FIT                                275
+#define ERROR_EA_FILE_CORRUPT                              276
+#define ERROR_EA_TABLE_FULL                                277
+#define ERROR_INVALID_EA_HANDLE                            278
+#define ERROR_EAS_NOT_SUPPORTED                            282
+#define ERROR_NOT_OWNER                                    288
+#define ERROR_TOO_MANY_POSTS                               298
+#define ERROR_PARTIAL_COPY                                 299
+#define ERROR_OPLOCK_NOT_GRANTED                           300
+#define ERROR_INVALID_OPLOCK_PROTOCOL                      301
+#define ERROR_DISK_TOO_FRAGMENTED                          302
+#define ERROR_MR_MID_NOT_FOUND                             317
+#define ERROR_SCOPE_NOT_FOUND                              318
+#define ERROR_FAIL_NOACTION_REBOOT                         350
+#define ERROR_FAIL_SHUTDOWN                                351
+#define ERROR_FAIL_RESTART                                 352
+#define ERROR_MAX_SESSIONS_REACHED                         353
+#define ERROR_INVALID_ADDRESS                              487
+#define ERROR_USER_PROFILE_LOAD                            500
+#define ERROR_ARITHMETIC_OVERFLOW                          534
+#define ERROR_PIPE_CONNECTED                               535
+#define ERROR_PIPE_LISTENING                               536
+#define ERROR_INVALID_LDT_SIZE                             561
+#define ERROR_INVALID_LDT_OFFSET                           563
+#define ERROR_INVALID_LDT_DESCRIPTOR                       564
+#define ERROR_TOO_MANY_THREADS                             565
+#define ERROR_THREAD_NOT_IN_PROCESS                        566
+#define ERROR_PAGEFILE_QUOTA_EXCEEDED                      567
+#define ERROR_LOGON_SERVER_CONFLICT                        568
+#define ERROR_SYNCHRONIZATION_REQUIRED                     569
+#define ERROR_NET_OPEN_FAILED                              570
+#define ERROR_IO_PRIVILEGE_FAILED                          571
+#define ERROR_CONTROL_C_EXIT                               572
+#define ERROR_MISSING_SYSTEMFILE                           573
+#define ERROR_UNHANDLED_EXCEPTION                          574
+#define ERROR_APP_INIT_FAILURE                             575
+#define ERROR_PAGEFILE_CREATE_FAILED                       576
+#define ERROR_INVALID_IMAGE_HASH                           577
+#define ERROR_NO_PAGEFILE                                  578
+#define ERROR_ILLEGAL_FLOAT_CONTEXT                        579
+#define ERROR_NO_EVENT_PAIR                                580
+#define ERROR_DOMAIN_CTRLR_CONFIG_ERROR                    581
+#define ERROR_ILLEGAL_CHARACTER                            582
+#define ERROR_UNDEFINED_CHARACTER                          583
+#define ERROR_FLOPPY_VOLUME                                584
+#define ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT             585
+#define ERROR_BACKUP_CONTROLLER                            586
+#define ERROR_MUTANT_LIMIT_EXCEEDED                        587
+#define ERROR_FS_DRIVER_REQUIRED                           588
+#define ERROR_CANNOT_LOAD_REGISTRY_FILE                    589
+#define ERROR_DEBUG_ATTACH_FAILED                          590
+#define ERROR_SYSTEM_PROCESS_TERMINATED                    591
+#define ERROR_DATA_NOT_ACCEPTED                            592
+#define ERROR_VDM_HARD_ERROR                               593
+#define ERROR_DRIVER_CANCEL_TIMEOUT                        594
+#define ERROR_REPLY_MESSAGE_MISMATCH                       595
+#define ERROR_LOST_WRITEBEHIND_DATA                        596
+#define ERROR_CLIENT_SERVER_PARAMETERS_INVALID             597
+#define ERROR_NOT_TINY_STREAM                              598
+#define ERROR_STACK_OVERFLOW_READ                          599
+#define ERROR_CONVERT_TO_LARGE                             600
+#define ERROR_FOUND_OUT_OF_SCOPE                           601
+#define ERROR_ALLOCATE_BUCKET                              602
+#define ERROR_MARSHALL_OVERFLOW                            603
+#define ERROR_INVALID_VARIANT                              604
+#define ERROR_BAD_COMPRESSION_BUFFER                       605
+#define ERROR_AUDIT_FAILED                                 606
+#define ERROR_TIMER_RESOLUTION_NOT_SET                     607
+#define ERROR_INSUFFICIENT_LOGON_INFO                      608
+#define ERROR_BAD_DLL_ENTRYPOINT                           609
+#define ERROR_BAD_SERVICE_ENTRYPOINT                       610
+#define ERROR_IP_ADDRESS_CONFLICT1                         611
+#define ERROR_IP_ADDRESS_CONFLICT2                         612
+#define ERROR_REGISTRY_QUOTA_LIMIT                         613
+#define ERROR_NO_CALLBACK_ACTIVE                           614
+#define ERROR_PWD_TOO_SHORT                                615
+#define ERROR_PWD_TOO_RECENT                               616
+#define ERROR_PWD_HISTORY_CONFLICT                         617
+#define ERROR_UNSUPPORTED_COMPRESSION                      618
+#define ERROR_INVALID_HW_PROFILE                           619
+#define ERROR_INVALID_PLUGPLAY_DEVICE_PATH                 620
+#define ERROR_QUOTA_LIST_INCONSISTENT                      621
+#define ERROR_EVALUATION_EXPIRATION                        622
+#define ERROR_ILLEGAL_DLL_RELOCATION                       623
+#define ERROR_DLL_INIT_FAILED_LOGOFF                       624
+#define ERROR_VALIDATE_CONTINUE                            625
+#define ERROR_NO_MORE_MATCHES                              626
+#define ERROR_RANGE_LIST_CONFLICT                          627
+#define ERROR_SERVER_SID_MISMATCH                          628
+#define ERROR_CANT_ENABLE_DENY_ONLY                        629
+#define ERROR_FLOAT_MULTIPLE_FAULTS                        630
+#define ERROR_FLOAT_MULTIPLE_TRAPS                         631
+#define ERROR_NOINTERFACE                                  632
+#define ERROR_DRIVER_FAILED_SLEEP                          633
+#define ERROR_CORRUPT_SYSTEM_FILE                          634
+#define ERROR_COMMITMENT_MINIMUM                           635
+#define ERROR_PNP_RESTART_ENUMERATION                      636
+#define ERROR_SYSTEM_IMAGE_BAD_SIGNATURE                   637
+#define ERROR_PNP_REBOOT_REQUIRED                          638
+#define ERROR_INSUFFICIENT_POWER                           639
+#define ERROR_MULTIPLE_FAULT_VIOLATION                     640
+#define ERROR_SYSTEM_SHUTDOWN                              641
+#define ERROR_PORT_NOT_SET                                 642
+#define ERROR_DS_VERSION_CHECK_FAILURE                     643
+#define ERROR_RANGE_NOT_FOUND                              644
+#define ERROR_NOT_SAFE_MODE_DRIVER                         646
+#define ERROR_FAILED_DRIVER_ENTRY                          647
+#define ERROR_DEVICE_ENUMERATION_ERROR                     648
+#define ERROR_MOUNT_POINT_NOT_RESOLVED                     649
+#define ERROR_INVALID_DEVICE_OBJECT_PARAMETER              650
+#define ERROR_MCA_OCCURED                                  651
+#define ERROR_DRIVER_DATABASE_ERROR                        652
+#define ERROR_SYSTEM_HIVE_TOO_LARGE                        653
+#define ERROR_DRIVER_FAILED_PRIOR_UNLOAD                   654
+#define ERROR_VOLSNAP_PREPARE_HIBERNATE                    655
+#define ERROR_HIBERNATION_FAILURE                          656
+#define ERROR_FILE_SYSTEM_LIMITATION                       665
+#define ERROR_ASSERTION_FAILURE                            668
+#define ERROR_ACPI_ERROR                                   669
+#define ERROR_WOW_ASSERTION                                670
+#define ERROR_PNP_BAD_MPS_TABLE                            671
+#define ERROR_PNP_TRANSLATION_FAILED                       672
+#define ERROR_PNP_IRQ_TRANSLATION_FAILED                   673
+#define ERROR_PNP_INVALID_ID                               674
+#define ERROR_WAKE_SYSTEM_DEBUGGER                         675
+#define ERROR_HANDLES_CLOSED                               676
+#define ERROR_EXTRANEOUS_INFORMATION                       677
+#define ERROR_RXACT_COMMIT_NECESSARY                       678
+#define ERROR_MEDIA_CHECK                                  679
+#define ERROR_GUID_SUBSTITUTION_MADE                       680
+#define ERROR_STOPPED_ON_SYMLINK                           681
+#define ERROR_LONGJUMP                                     682
+#define ERROR_PLUGPLAY_QUERY_VETOED                        683
+#define ERROR_UNWIND_CONSOLIDATE                           684
+#define ERROR_REGISTRY_HIVE_RECOVERED                      685
+#define ERROR_DLL_MIGHT_BE_INSECURE                        686
+#define ERROR_DLL_MIGHT_BE_INCOMPATIBLE                    687
+#define ERROR_DBG_EXCEPTION_NOT_HANDLED                    688
+#define ERROR_DBG_REPLY_LATER                              689
+#define ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE                 690
+#define ERROR_DBG_TERMINATE_THREAD                         691
+#define ERROR_DBG_TERMINATE_PROCESS                        692
+#define ERROR_DBG_CONTROL_C                                693
+#define ERROR_DBG_PRINTEXCEPTION_C                         694
+#define ERROR_DBG_RIPEXCEPTION                             695
+#define ERROR_DBG_CONTROL_BREAK                            696
+#define ERROR_DBG_COMMAND_EXCEPTION                        697
+#define ERROR_OBJECT_NAME_EXISTS                           698
+#define ERROR_THREAD_WAS_SUSPENDED                         699
+#define ERROR_IMAGE_NOT_AT_BASE                            700
+#define ERROR_RXACT_STATE_CREATED                          701
+#define ERROR_SEGMENT_NOTIFICATION                         702
+#define ERROR_BAD_CURRENT_DIRECTORY                        703
+#define ERROR_FT_READ_RECOVERY_FROM_BACKUP                 704
+#define ERROR_FT_WRITE_RECOVERY                            705
+#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH                  706
+#define ERROR_RECEIVE_PARTIAL                              707
+#define ERROR_RECEIVE_EXPEDITED                            708
+#define ERROR_RECEIVE_PARTIAL_EXPEDITED                    709
+#define ERROR_EVENT_DONE                                   710
+#define ERROR_EVENT_PENDING                                711
+#define ERROR_CHECKING_FILE_SYSTEM                         712
+#define ERROR_FATAL_APP_EXIT                               713
+#define ERROR_PREDEFINED_HANDLE                            714
+#define ERROR_WAS_UNLOCKED                                 715
+#define ERROR_SERVICE_NOTIFICATION                         716
+#define ERROR_WAS_LOCKED                                   717
+#define ERROR_LOG_HARD_ERROR                               718
+#define ERROR_ALREADY_WIN32                                719
+#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE              720
+#define ERROR_NO_YIELD_PERFORMED                           721
+#define ERROR_TIMER_RESUME_IGNORED                         722
+#define ERROR_ARBITRATION_UNHANDLED                        723
+#define ERROR_CARDBUS_NOT_SUPPORTED                        724
+#define ERROR_MP_PROCESSOR_MISMATCH                        725
+#define ERROR_HIBERNATED                                   726
+#define ERROR_RESUME_HIBERNATION                           727
+#define ERROR_FIRMWARE_UPDATED                             728
+#define ERROR_DRIVERS_LEAKING_LOCKED_PAGES                 729
+#define ERROR_WAKE_SYSTEM                                  730
+#define ERROR_ABANDONED_WAIT_0                             735
+#define ERROR_ELEVATION_REQUIRED                           740
+#define ERROR_REPARSE                                      741
+#define ERROR_OPLOCK_BREAK_IN_PROGRESS                     742
+#define ERROR_VOLUME_MOUNTED                               743
+#define ERROR_RXACT_COMMITTED                              744
+#define ERROR_NOTIFY_CLEANUP                               745
+#define ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED             746
+#define ERROR_PAGE_FAULT_TRANSITION                        747
+#define ERROR_PAGE_FAULT_DEMAND_ZERO                       748
+#define ERROR_PAGE_FAULT_COPY_ON_WRITE                     749
+#define ERROR_PAGE_FAULT_GUARD_PAGE                        750
+#define ERROR_PAGE_FAULT_PAGING_FILE                       751
+#define ERROR_CACHE_PAGE_LOCKED                            752
+#define ERROR_CRASH_DUMP                                   753
+#define ERROR_BUFFER_ALL_ZEROS                             754
+#define ERROR_REPARSE_OBJECT                               755
+#define ERROR_RESOURCE_REQUIREMENTS_CHANGED                756
+#define ERROR_TRANSLATION_COMPLETE                         757
+#define ERROR_NOTHING_TO_TERMINATE                         758
+#define ERROR_PROCESS_NOT_IN_JOB                           759
+#define ERROR_PROCESS_IN_JOB                               760
+#define ERROR_VOLSNAP_HIBERNATE_READY                      761
+#define ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY           762
+#define ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED           763
+#define ERROR_INTERRUPT_STILL_CONNECTED                    764
+#define ERROR_WAIT_FOR_OPLOCK                              765
+#define ERROR_DBG_EXCEPTION_HANDLED                        766
+#define ERROR_DBG_CONTINUE                                 767
+#define ERROR_CALLBACK_POP_STACK                           768
+#define ERROR_COMPRESSION_DISABLED                         769
+#define ERROR_CANTFETCHBACKWARDS                           770
+#define ERROR_CANTSCROLLBACKWARDS                          771
+#define ERROR_ROWSNOTRELEASED                              772
+#define ERROR_BAD_ACCESSOR_FLAGS                           773
+#define ERROR_ERRORS_ENCOUNTERED                           774
+#define ERROR_NOT_CAPABLE                                  775
+#define ERROR_REQUEST_OUT_OF_SEQUENCE                      776
+#define ERROR_VERSION_PARSE_ERROR                          777
+#define ERROR_BADSTARTPOSITION                             778
+#define ERROR_MEMORY_HARDWARE                              779
+#define ERROR_DISK_REPAIR_DISABLED                         780
+#define ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE 781
+#define ERROR_SYSTEM_POWERSTATE_TRANSITION                 782
+#define ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION         783
+#define ERROR_MCA_EXCEPTION                                784
+#define ERROR_ACCESS_AUDIT_BY_POLICY                       785
+#define ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY        786
+#define ERROR_ABANDON_HIBERFILE                            787
+#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED   788
+#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR   789
+#define ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR       790
+#define ERROR_EA_ACCESS_DENIED                             994
+#define ERROR_OPERATION_ABORTED                            995
+#define ERROR_IO_INCOMPLETE                                996
+#define ERROR_IO_PENDING                                   997
+#define ERROR_NOACCESS                                     998
+#define ERROR_SWAPERROR                                    999
+#define ERROR_STACK_OVERFLOW                               1001
+#define ERROR_INVALID_MESSAGE                              1002
+#define ERROR_CAN_NOT_COMPLETE                             1003
+#define ERROR_INVALID_FLAGS                                1004
+#define ERROR_UNRECOGNIZED_VOLUME                          1005
+#define ERROR_FILE_INVALID                                 1006
+#define ERROR_FULLSCREEN_MODE                              1007
+#define ERROR_NO_TOKEN                                     1008
+#define ERROR_BADDB                                        1009
+#define ERROR_BADKEY                                       1010
+#define ERROR_CANTOPEN                                     1011
+#define ERROR_CANTREAD                                     1012
+#define ERROR_CANTWRITE                                    1013
+#define ERROR_REGISTRY_RECOVERED                           1014
+#define ERROR_REGISTRY_CORRUPT                             1015
+#define ERROR_REGISTRY_IO_FAILED                           1016
+#define ERROR_NOT_REGISTRY_FILE                            1017
+#define ERROR_KEY_DELETED                                  1018
+#define ERROR_NO_LOG_SPACE                                 1019
+#define ERROR_KEY_HAS_CHILDREN                             1020
+#define ERROR_CHILD_MUST_BE_VOLATILE                       1021
+#define ERROR_NOTIFY_ENUM_DIR                              1022
+#define ERROR_DEPENDENT_SERVICES_RUNNING                   1051
+#define ERROR_INVALID_SERVICE_CONTROL                      1052
+#define ERROR_SERVICE_REQUEST_TIMEOUT                      1053
+#define ERROR_SERVICE_NO_THREAD                            1054
+#define ERROR_SERVICE_DATABASE_LOCKED                      1055
+#define ERROR_SERVICE_ALREADY_RUNNING                      1056
+#define ERROR_INVALID_SERVICE_ACCOUNT                      1057
+#define ERROR_SERVICE_DISABLED                             1058
+#define ERROR_CIRCULAR_DEPENDENCY                          1059
+#define ERROR_SERVICE_DOES_NOT_EXIST                       1060
+#define ERROR_SERVICE_CANNOT_ACCEPT_CTRL                   1061
+#define ERROR_SERVICE_NOT_ACTIVE                           1062
+#define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT            1063
+#define ERROR_EXCEPTION_IN_SERVICE                         1064
+#define ERROR_DATABASE_DOES_NOT_EXIST                      1065
+#define ERROR_SERVICE_SPECIFIC_ERROR                       1066
+#define ERROR_PROCESS_ABORTED                              1067
+#define ERROR_SERVICE_DEPENDENCY_FAIL                      1068
+#define ERROR_SERVICE_LOGON_FAILED                         1069
+#define ERROR_SERVICE_START_HANG                           1070
+#define ERROR_INVALID_SERVICE_LOCK                         1071
+#define ERROR_SERVICE_MARKED_FOR_DELETE                    1072
+#define ERROR_SERVICE_EXISTS                               1073
+#define ERROR_ALREADY_RUNNING_LKG                          1074
+#define ERROR_SERVICE_DEPENDENCY_DELETED                   1075
+#define ERROR_BOOT_ALREADY_ACCEPTED                        1076
+#define ERROR_SERVICE_NEVER_STARTED                        1077
+#define ERROR_DUPLICATE_SERVICE_NAME                       1078
+#define ERROR_DIFFERENT_SERVICE_ACCOUNT                    1079
+#define ERROR_CANNOT_DETECT_DRIVER_FAILURE                 1080
+#define ERROR_CANNOT_DETECT_PROCESS_ABORT                  1081
+#define ERROR_NO_RECOVERY_PROGRAM                          1082
+#define ERROR_SERVICE_NOT_IN_EXE                           1083
+#define ERROR_END_OF_MEDIA                                 1100
+#define ERROR_FILEMARK_DETECTED                            1101
+#define ERROR_BEGINNING_OF_MEDIA                           1102
+#define ERROR_SETMARK_DETECTED                             1103
+#define ERROR_NO_DATA_DETECTED                             1104
+#define ERROR_PARTITION_FAILURE                            1105
+#define ERROR_INVALID_BLOCK_LENGTH                         1106
+#define ERROR_DEVICE_NOT_PARTITIONED                       1107
+#define ERROR_UNABLE_TO_LOCK_MEDIA                         1108
+#define ERROR_UNABLE_TO_UNLOAD_MEDIA                       1109
+#define ERROR_MEDIA_CHANGED                                1110
+#define ERROR_BUS_RESET                                    1111
+#define ERROR_NO_MEDIA_IN_DRIVE                            1112
+#define ERROR_NO_UNICODE_TRANSLATION                       1113
+#define ERROR_DLL_INIT_FAILED                              1114
+#define ERROR_SHUTDOWN_IN_PROGRESS                         1115
+#define ERROR_NO_SHUTDOWN_IN_PROGRESS                      1116
+#define ERROR_IO_DEVICE                                    1117
+#define ERROR_SERIAL_NO_DEVICE                             1118
+#define ERROR_IRQ_BUSY                                     1119
+#define ERROR_MORE_WRITES                                  1120
+#define ERROR_COUNTER_TIMEOUT                              1121
+#define ERROR_FLOPPY_ID_MARK_NOT_FOUND                     1122
+#define ERROR_FLOPPY_WRONG_CYLINDER                        1123
+#define ERROR_FLOPPY_UNKNOWN_ERROR                         1124
+#define ERROR_FLOPPY_BAD_REGISTERS                         1125
+#define ERROR_DISK_RECALIBRATE_FAILED                      1126
+#define ERROR_DISK_OPERATION_FAILED                        1127
+#define ERROR_DISK_RESET_FAILED                            1128
+#define ERROR_EOM_OVERFLOW                                 1129
+#define ERROR_NOT_ENOUGH_SERVER_MEMORY                     1130
+#define ERROR_POSSIBLE_DEADLOCK                            1131
+#define ERROR_MAPPED_ALIGNMENT                             1132
+#define ERROR_SET_POWER_STATE_VETOED                       1140
+#define ERROR_SET_POWER_STATE_FAILED                       1141
+#define ERROR_TOO_MANY_LINKS                               1142
+#define ERROR_OLD_WIN_VERSION                              1150
+#define ERROR_APP_WRONG_OS                                 1151
+#define ERROR_SINGLE_INSTANCE_APP                          1152
+#define ERROR_RMODE_APP                                    1153
+#define ERROR_INVALID_DLL                                  1154
+#define ERROR_NO_ASSOCIATION                               1155
+#define ERROR_DDE_FAIL                                     1156
+#define ERROR_DLL_NOT_FOUND                                1157
+#define ERROR_NO_MORE_USER_HANDLES                         1158
+#define ERROR_MESSAGE_SYNC_ONLY                            1159
+#define ERROR_SOURCE_ELEMENT_EMPTY                         1160
+#define ERROR_DESTINATION_ELEMENT_FULL                     1161
+#define ERROR_ILLEGAL_ELEMENT_ADDRESS                      1162
+#define ERROR_MAGAZINE_NOT_PRESENT                         1163
+#define ERROR_DEVICE_REINITIALIZATION_NEEDED               1164
+#define ERROR_DEVICE_REQUIRES_CLEANING                     1165
+#define ERROR_DEVICE_DOOR_OPEN                             1166
+#define ERROR_DEVICE_NOT_CONNECTED                         1167
+#define ERROR_NOT_FOUND                                    1168
+#define ERROR_NO_MATCH                                     1169
+#define ERROR_SET_NOT_FOUND                                1170
+#define ERROR_POINT_NOT_FOUND                              1171
+#define ERROR_NO_TRACKING_SERVICE                          1172
+#define ERROR_NO_VOLUME_ID                                 1173
+#define ERROR_UNABLE_TO_REMOVE_REPLACED                    1175
+#define ERROR_UNABLE_TO_MOVE_REPLACEMENT                   1176
+#define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2                 1177
+#define ERROR_JOURNAL_DELETE_IN_PROGRESS                   1178
+#define ERROR_JOURNAL_NOT_ACTIVE                           1179
+#define ERROR_POTENTIAL_FILE_FOUND                         1180
+#define ERROR_JOURNAL_ENTRY_DELETED                        1181
+#define ERROR_BAD_DEVICE                                   1200
+#define ERROR_CONNECTION_UNAVAIL                           1201
+#define ERROR_DEVICE_ALREADY_REMEMBERED                    1202
+#define ERROR_NO_NET_OR_BAD_PATH                           1203
+#define ERROR_BAD_PROVIDER                                 1204
+#define ERROR_CANNOT_OPEN_PROFILE                          1205
+#define ERROR_BAD_PROFILE                                  1206
+#define ERROR_NOT_CONTAINER                                1207
+#define ERROR_EXTENDED_ERROR                               1208
+#define ERROR_INVALID_GROUPNAME                            1209
+#define ERROR_INVALID_COMPUTERNAME                         1210
+#define ERROR_INVALID_EVENTNAME                            1211
+#define ERROR_INVALID_DOMAINNAME                           1212
+#define ERROR_INVALID_SERVICENAME                          1213
+#define ERROR_INVALID_NETNAME                              1214
+#define ERROR_INVALID_SHARENAME                            1215
+#define ERROR_INVALID_PASSWORDNAME                         1216
+#define ERROR_INVALID_MESSAGENAME                          1217
+#define ERROR_INVALID_MESSAGEDEST                          1218
+#define ERROR_SESSION_CREDENTIAL_CONFLICT                  1219
+#define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED                1220
+#define ERROR_DUP_DOMAINNAME                               1221
+#define ERROR_NO_NETWORK                                   1222
+#define ERROR_CANCELLED                                    1223
+#define ERROR_USER_MAPPED_FILE                             1224
+#define ERROR_CONNECTION_REFUSED                           1225
+#define ERROR_GRACEFUL_DISCONNECT                          1226
+#define ERROR_ADDRESS_ALREADY_ASSOCIATED                   1227
+#define ERROR_ADDRESS_NOT_ASSOCIATED                       1228
+#define ERROR_CONNECTION_INVALID                           1229
+#define ERROR_CONNECTION_ACTIVE                            1230
+#define ERROR_NETWORK_UNREACHABLE                          1231
+#define ERROR_HOST_UNREACHABLE                             1232
+#define ERROR_PROTOCOL_UNREACHABLE                         1233
+#define ERROR_PORT_UNREACHABLE                             1234
+#define ERROR_REQUEST_ABORTED                              1235
+#define ERROR_CONNECTION_ABORTED                           1236
+#define ERROR_RETRY                                        1237
+#define ERROR_CONNECTION_COUNT_LIMIT                       1238
+#define ERROR_LOGIN_TIME_RESTRICTION                       1239
+#define ERROR_LOGIN_WKSTA_RESTRICTION                      1240
+#define ERROR_INCORRECT_ADDRESS                            1241
+#define ERROR_ALREADY_REGISTERED                           1242
+#define ERROR_SERVICE_NOT_FOUND                            1243
+#define ERROR_NOT_AUTHENTICATED                            1244
+#define ERROR_NOT_LOGGED_ON                                1245
+#define ERROR_CONTINUE                                     1246
+#define ERROR_ALREADY_INITIALIZED                          1247
+#define ERROR_NO_MORE_DEVICES                              1248
+#define ERROR_NO_SUCH_SITE                                 1249
+#define ERROR_DOMAIN_CONTROLLER_EXISTS                     1250
+#define ERROR_ONLY_IF_CONNECTED                            1251
+#define ERROR_OVERRIDE_NOCHANGES                           1252
+#define ERROR_BAD_USER_PROFILE                             1253
+#define ERROR_NOT_SUPPORTED_ON_SBS                         1254
+#define ERROR_SERVER_SHUTDOWN_IN_PROGRESS                  1255
+#define ERROR_HOST_DOWN                                    1256
+#define ERROR_ACCESS_DISABLED_BY_POLICY                    1260
+#define ERROR_REG_NAT_CONSUMPTION                          1261
+#define ERROR_PKINIT_FAILURE                               1263
+#define ERROR_SMARTCARD_SUBSYSTEM_FAILURE                  1264
+#define ERROR_DOWNGRADE_DETECTED                           1265
+#define ERROR_MACHINE_LOCKED                               1271
+#define ERROR_CALLBACK_SUPPLIED_INVALID_DATA               1273
+#define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED             1274
+#define ERROR_DRIVER_BLOCKED                               1275
+#define ERROR_INVALID_IMPORT_OF_NON_DLL                    1276
+#define ERROR_NOT_ALL_ASSIGNED                             1300
+#define ERROR_SOME_NOT_MAPPED                              1301
+#define ERROR_NO_QUOTAS_FOR_ACCOUNT                        1302
+#define ERROR_LOCAL_USER_SESSION_KEY                       1303
+#define ERROR_NULL_LM_PASSWORD                             1304
+#define ERROR_UNKNOWN_REVISION                             1305
+#define ERROR_REVISION_MISMATCH                            1306
+#define ERROR_INVALID_OWNER                                1307
+#define ERROR_INVALID_PRIMARY_GROUP                        1308
+#define ERROR_NO_IMPERSONATION_TOKEN                       1309
+#define ERROR_CANT_DISABLE_MANDATORY                       1310
+#define ERROR_NO_LOGON_SERVERS                             1311
+#define ERROR_NO_SUCH_LOGON_SESSION                        1312
+#define ERROR_NO_SUCH_PRIVILEGE                            1313
+#define ERROR_PRIVILEGE_NOT_HELD                           1314
+#define ERROR_INVALID_ACCOUNT_NAME                         1315
+#define ERROR_USER_EXISTS                                  1316
+#define ERROR_NO_SUCH_USER                                 1317
+#define ERROR_GROUP_EXISTS                                 1318
+#define ERROR_NO_SUCH_GROUP                                1319
+#define ERROR_MEMBER_IN_GROUP                              1320
+#define ERROR_MEMBER_NOT_IN_GROUP                          1321
+#define ERROR_LAST_ADMIN                                   1322
+#define ERROR_WRONG_PASSWORD                               1323
+#define ERROR_ILL_FORMED_PASSWORD                          1324
+#define ERROR_PASSWORD_RESTRICTION                         1325
+#define ERROR_LOGON_FAILURE                                1326
+#define ERROR_ACCOUNT_RESTRICTION                          1327
+#define ERROR_INVALID_LOGON_HOURS                          1328
+#define ERROR_INVALID_WORKSTATION                          1329
+#define ERROR_PASSWORD_EXPIRED                             1330
+#define ERROR_ACCOUNT_DISABLED                             1331
+#define ERROR_NONE_MAPPED                                  1332
+#define ERROR_TOO_MANY_LUIDS_REQUESTED                     1333
+#define ERROR_LUIDS_EXHAUSTED                              1334
+#define ERROR_INVALID_SUB_AUTHORITY                        1335
+#define ERROR_INVALID_ACL                                  1336
+#define ERROR_INVALID_SID                                  1337
+#define ERROR_INVALID_SECURITY_DESCR                       1338
+#define ERROR_BAD_INHERITANCE_ACL                          1340
+#define ERROR_SERVER_DISABLED                              1341
+#define ERROR_SERVER_NOT_DISABLED                          1342
+#define ERROR_INVALID_ID_AUTHORITY                         1343
+#define ERROR_ALLOTTED_SPACE_EXCEEDED                      1344
+#define ERROR_INVALID_GROUP_ATTRIBUTES                     1345
+#define ERROR_BAD_IMPERSONATION_LEVEL                      1346
+#define ERROR_CANT_OPEN_ANONYMOUS                          1347
+#define ERROR_BAD_VALIDATION_CLASS                         1348
+#define ERROR_BAD_TOKEN_TYPE                               1349
+#define ERROR_NO_SECURITY_ON_OBJECT                        1350
+#define ERROR_CANT_ACCESS_DOMAIN_INFO                      1351
+#define ERROR_INVALID_SERVER_STATE                         1352
+#define ERROR_INVALID_DOMAIN_STATE                         1353
+#define ERROR_INVALID_DOMAIN_ROLE                          1354
+#define ERROR_NO_SUCH_DOMAIN                               1355
+#define ERROR_DOMAIN_EXISTS                                1356
+#define ERROR_DOMAIN_LIMIT_EXCEEDED                        1357
+#define ERROR_INTERNAL_DB_CORRUPTION                       1358
+#define ERROR_INTERNAL_ERROR                               1359
+#define ERROR_GENERIC_NOT_MAPPED                           1360
+#define ERROR_BAD_DESCRIPTOR_FORMAT                        1361
+#define ERROR_NOT_LOGON_PROCESS                            1362
+#define ERROR_LOGON_SESSION_EXISTS                         1363
+#define ERROR_NO_SUCH_PACKAGE                              1364
+#define ERROR_BAD_LOGON_SESSION_STATE                      1365
+#define ERROR_LOGON_SESSION_COLLISION                      1366
+#define ERROR_INVALID_LOGON_TYPE                           1367
+#define ERROR_CANNOT_IMPERSONATE                           1368
+#define ERROR_RXACT_INVALID_STATE                          1369
+#define ERROR_RXACT_COMMIT_FAILURE                         1370
+#define ERROR_SPECIAL_ACCOUNT                              1371
+#define ERROR_SPECIAL_GROUP                                1372
+#define ERROR_SPECIAL_USER                                 1373
+#define ERROR_MEMBERS_PRIMARY_GROUP                        1374
+#define ERROR_TOKEN_ALREADY_IN_USE                         1375
+#define ERROR_NO_SUCH_ALIAS                                1376
+#define ERROR_MEMBER_NOT_IN_ALIAS                          1377
+#define ERROR_MEMBER_IN_ALIAS                              1378
+#define ERROR_ALIAS_EXISTS                                 1379
+#define ERROR_LOGON_NOT_GRANTED                            1380
+#define ERROR_TOO_MANY_SECRETS                             1381
+#define ERROR_SECRET_TOO_LONG                              1382
+#define ERROR_INTERNAL_DB_ERROR                            1383
+#define ERROR_TOO_MANY_CONTEXT_IDS                         1384
+#define ERROR_LOGON_TYPE_NOT_GRANTED                       1385
+#define ERROR_NT_CROSS_ENCRYPTION_REQUIRED                 1386
+#define ERROR_NO_SUCH_MEMBER                               1387
+#define ERROR_INVALID_MEMBER                               1388
+#define ERROR_TOO_MANY_SIDS                                1389
+#define ERROR_LM_CROSS_ENCRYPTION_REQUIRED                 1390
+#define ERROR_NO_INHERITANCE                               1391
+#define ERROR_FILE_CORRUPT                                 1392
+#define ERROR_DISK_CORRUPT                                 1393
+#define ERROR_NO_USER_SESSION_KEY                          1394
+#define ERROR_LICENSE_QUOTA_EXCEEDED                       1395
+#define ERROR_WRONG_TARGET_NAME                            1396
+#define ERROR_MUTUAL_AUTH_FAILED                           1397
+#define ERROR_TIME_SKEW                                    1398
+#define ERROR_CURRENT_DOMAIN_NOT_ALLOWED                   1399
+#define ERROR_INVALID_WINDOW_HANDLE                        1400
+#define ERROR_INVALID_MENU_HANDLE                          1401
+#define ERROR_INVALID_CURSOR_HANDLE                        1402
+#define ERROR_INVALID_ACCEL_HANDLE                         1403
+#define ERROR_INVALID_HOOK_HANDLE                          1404
+#define ERROR_INVALID_DWP_HANDLE                           1405
+#define ERROR_TLW_WITH_WSCHILD                             1406
+#define ERROR_CANNOT_FIND_WND_CLASS                        1407
+#define ERROR_WINDOW_OF_OTHER_THREAD                       1408
+#define ERROR_HOTKEY_ALREADY_REGISTERED                    1409
+#define ERROR_CLASS_ALREADY_EXISTS                         1410
+#define ERROR_CLASS_DOES_NOT_EXIST                         1411
+#define ERROR_CLASS_HAS_WINDOWS                            1412
+#define ERROR_INVALID_INDEX                                1413
+#define ERROR_INVALID_ICON_HANDLE                          1414
+#define ERROR_PRIVATE_DIALOG_INDEX                         1415
+#define ERROR_LISTBOX_ID_NOT_FOUND                         1416
+#define ERROR_NO_WILDCARD_CHARACTERS                       1417
+#define ERROR_CLIPBOARD_NOT_OPEN                           1418
+#define ERROR_HOTKEY_NOT_REGISTERED                        1419
+#define ERROR_WINDOW_NOT_DIALOG                            1420
+#define ERROR_CONTROL_ID_NOT_FOUND                         1421
+#define ERROR_INVALID_COMBOBOX_MESSAGE                     1422
+#define ERROR_WINDOW_NOT_COMBOBOX                          1423
+#define ERROR_INVALID_EDIT_HEIGHT                          1424
+#define ERROR_DC_NOT_FOUND                                 1425
+#define ERROR_INVALID_HOOK_FILTER                          1426
+#define ERROR_INVALID_FILTER_PROC                          1427
+#define ERROR_HOOK_NEEDS_HMOD                              1428
+#define ERROR_GLOBAL_ONLY_HOOK                             1429
+#define ERROR_JOURNAL_HOOK_SET                             1430
+#define ERROR_HOOK_NOT_INSTALLED                           1431
+#define ERROR_INVALID_LB_MESSAGE                           1432
+#define ERROR_SETCOUNT_ON_BAD_LB                           1433
+#define ERROR_LB_WITHOUT_TABSTOPS                          1434
+#define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD               1435
+#define ERROR_CHILD_WINDOW_MENU                            1436
+#define ERROR_NO_SYSTEM_MENU                               1437
+#define ERROR_INVALID_MSGBOX_STYLE                         1438
+#define ERROR_INVALID_SPI_VALUE                            1439
+#define ERROR_SCREEN_ALREADY_LOCKED                        1440
+#define ERROR_HWNDS_HAVE_DIFF_PARENT                       1441
+#define ERROR_NOT_CHILD_WINDOW                             1442
+#define ERROR_INVALID_GW_COMMAND                           1443
+#define ERROR_INVALID_THREAD_ID                            1444
+#define ERROR_NON_MDICHILD_WINDOW                          1445
+#define ERROR_POPUP_ALREADY_ACTIVE                         1446
+#define ERROR_NO_SCROLLBARS                                1447
+#define ERROR_INVALID_SCROLLBAR_RANGE                      1448
+#define ERROR_INVALID_SHOWWIN_COMMAND                      1449
+#define ERROR_NO_SYSTEM_RESOURCES                          1450
+#define ERROR_NONPAGED_SYSTEM_RESOURCES                    1451
+#define ERROR_PAGED_SYSTEM_RESOURCES                       1452
+#define ERROR_WORKING_SET_QUOTA                            1453
+#define ERROR_PAGEFILE_QUOTA                               1454
+#define ERROR_COMMITMENT_LIMIT                             1455
+#define ERROR_MENU_ITEM_NOT_FOUND                          1456
+#define ERROR_INVALID_KEYBOARD_HANDLE                      1457
+#define ERROR_HOOK_TYPE_NOT_ALLOWED                        1458
+#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION           1459
+#define ERROR_TIMEOUT                                      1460
+#define ERROR_INVALID_MONITOR_HANDLE                       1461
+#define ERROR_INCORRECT_SIZE                               1462
+#define ERROR_SYMLINK_CLASS_DISABLED                       1463
+#define ERROR_SYMLINK_NOT_SUPPORTED                        1464
+#define ERROR_XML_PARSE_ERROR                              1465
+#define ERROR_XMLDSIG_ERROR                                1466
+#define ERROR_RESTART_APPLICATION                          1467
+#define ERROR_WRONG_COMPARTMENT                            1468
+#define ERROR_AUTHIP_FAILURE                               1469
+#define ERROR_NO_NVRAM_RESOURCES                           1470
+#define ERROR_EVENTLOG_FILE_CORRUPT                        1500
+#define ERROR_EVENTLOG_CANT_START                          1501
+#define ERROR_LOG_FILE_FULL                                1502
+#define ERROR_EVENTLOG_FILE_CHANGED                        1503
+#define ERROR_INVALID_TASK_NAME                            1550
+#define ERROR_INVALID_TASK_INDEX                           1551
+#define ERROR_THREAD_ALREADY_IN_TASK                       1552
+#define ERROR_INSTALL_SERVICE_FAILURE                      1601
+#define ERROR_INSTALL_USEREXIT                             1602
+#define ERROR_INSTALL_FAILURE                              1603
+#define ERROR_INSTALL_SUSPEND                              1604
+#define ERROR_UNKNOWN_PRODUCT                              1605
+#define ERROR_UNKNOWN_FEATURE                              1606
+#define ERROR_UNKNOWN_COMPONENT                            1607
+#define ERROR_UNKNOWN_PROPERTY                             1608
+#define ERROR_INVALID_HANDLE_STATE                         1609
+#define ERROR_BAD_CONFIGURATION                            1610
+#define ERROR_INDEX_ABSENT                                 1611
+#define ERROR_INSTALL_SOURCE_ABSENT                        1612
+#define ERROR_INSTALL_PACKAGE_VERSION                      1613
+#define ERROR_PRODUCT_UNINSTALLED                          1614
+#define ERROR_BAD_QUERY_SYNTAX                             1615
+#define ERROR_INVALID_FIELD                                1616
+#define ERROR_DEVICE_REMOVED                               1617
+#define ERROR_INSTALL_ALREADY_RUNNING                      1618
+#define ERROR_INSTALL_PACKAGE_OPEN_FAILED                  1619
+#define ERROR_INSTALL_PACKAGE_INVALID                      1620
+#define ERROR_INSTALL_UI_FAILURE                           1621
+#define ERROR_INSTALL_LOG_FAILURE                          1622
+#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED                 1623
+#define ERROR_INSTALL_TRANSFORM_FAILURE                    1624
+#define ERROR_INSTALL_PACKAGE_REJECTED                     1625
+#define ERROR_FUNCTION_NOT_CALLED                          1626
+#define ERROR_FUNCTION_FAILED                              1627
+#define ERROR_INVALID_TABLE                                1628
+#define ERROR_DATATYPE_MISMATCH                            1629
+#define ERROR_UNSUPPORTED_TYPE                             1630
+#define ERROR_CREATE_FAILED                                1631
+#define ERROR_INSTALL_TEMP_UNWRITABLE                      1632
+#define ERROR_INSTALL_PLATFORM_UNSUPPORTED                 1633
+#define ERROR_INSTALL_NOTUSED                              1634
+#define ERROR_PATCH_PACKAGE_OPEN_FAILED                    1635
+#define ERROR_PATCH_PACKAGE_INVALID                        1636
+#define ERROR_PATCH_PACKAGE_UNSUPPORTED                    1637
+#define ERROR_PRODUCT_VERSION                              1638
+#define ERROR_INVALID_COMMAND_LINE                         1639
+#define ERROR_INSTALL_REMOTE_DISALLOWED                    1640
+#define ERROR_SUCCESS_REBOOT_INITIATED                     1641
+#define ERROR_PATCH_TARGET_NOT_FOUND                       1642
+#define ERROR_PATCH_PACKAGE_REJECTED                       1643
+#define ERROR_INSTALL_TRANSFORM_REJECTED                   1644
+#define ERROR_INSTALL_REMOTE_PROHIBITED                    1645
+#define ERROR_PATCH_REMOVAL_UNSUPPORTED                    1646
+#define ERROR_UNKNOWN_PATCH                                1647
+#define ERROR_PATCH_NO_SEQUENCE                            1648
+#define ERROR_PATCH_REMOVAL_DISALLOWED                     1649
+#define ERROR_INVALID_PATCH_XML                            1650
+#define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT             1651
+#define ERROR_INSTALL_SERVICE_SAFEBOOT                     1652
+#define RPC_S_INVALID_STRING_BINDING                       1700
+#define RPC_S_WRONG_KIND_OF_BINDING                        1701
+#define RPC_S_INVALID_BINDING                              1702
+#define RPC_S_PROTSEQ_NOT_SUPPORTED                        1703
+#define RPC_S_INVALID_RPC_PROTSEQ                          1704
+#define RPC_S_INVALID_STRING_UUID                          1705
+#define RPC_S_INVALID_ENDPOINT_FORMAT                      1706
+#define RPC_S_INVALID_NET_ADDR                             1707
+#define RPC_S_NO_ENDPOINT_FOUND                            1708
+#define RPC_S_INVALID_TIMEOUT                              1709
+#define RPC_S_OBJECT_NOT_FOUND                             1710
+#define RPC_S_ALREADY_REGISTERED                           1711
+#define RPC_S_TYPE_ALREADY_REGISTERED                      1712
+#define RPC_S_ALREADY_LISTENING                            1713
+#define RPC_S_NO_PROTSEQS_REGISTERED                       1714
+#define RPC_S_NOT_LISTENING                                1715
+#define RPC_S_UNKNOWN_MGR_TYPE                             1716
+#define RPC_S_UNKNOWN_IF                                   1717
+#define RPC_S_NO_BINDINGS                                  1718
+#define RPC_S_NO_PROTSEQS                                  1719
+#define RPC_S_CANT_CREATE_ENDPOINT                         1720
+#define RPC_S_OUT_OF_RESOURCES                             1721
+#define RPC_S_SERVER_UNAVAILABLE                           1722
+#define RPC_S_SERVER_TOO_BUSY                              1723
+#define RPC_S_INVALID_NETWORK_OPTIONS                      1724
+#define RPC_S_NO_CALL_ACTIVE                               1725
+#define RPC_S_CALL_FAILED                                  1726
+#define RPC_S_CALL_FAILED_DNE                              1727
+#define RPC_S_PROTOCOL_ERROR                               1728
+#define RPC_S_UNSUPPORTED_TRANS_SYN                        1730
+#define RPC_S_UNSUPPORTED_TYPE                             1732
+#define RPC_S_INVALID_TAG                                  1733
+#define RPC_S_INVALID_BOUND                                1734
+#define RPC_S_NO_ENTRY_NAME                                1735
+#define RPC_S_INVALID_NAME_SYNTAX                          1736
+#define RPC_S_UNSUPPORTED_NAME_SYNTAX                      1737
+#define RPC_S_UUID_NO_ADDRESS                              1739
+#define RPC_S_DUPLICATE_ENDPOINT                           1740
+#define RPC_S_UNKNOWN_AUTHN_TYPE                           1741
+#define RPC_S_MAX_CALLS_TOO_SMALL                          1742
+#define RPC_S_STRING_TOO_LONG                              1743
+#define RPC_S_PROTSEQ_NOT_FOUND                            1744
+#define RPC_S_PROCNUM_OUT_OF_RANGE                         1745
+#define RPC_S_BINDING_HAS_NO_AUTH                          1746
+#define RPC_S_UNKNOWN_AUTHN_SERVICE                        1747
+#define RPC_S_UNKNOWN_AUTHN_LEVEL                          1748
+#define RPC_S_INVALID_AUTH_IDENTITY                        1749
+#define RPC_S_UNKNOWN_AUTHZ_SERVICE                        1750
+#define EPT_S_INVALID_ENTRY                                1751
+#define EPT_S_CANT_PERFORM_OP                              1752
+#define EPT_S_NOT_REGISTERED                               1753
+#define RPC_S_NOTHING_TO_EXPORT                            1754
+#define RPC_S_INCOMPLETE_NAME                              1755
+#define RPC_S_INVALID_VERS_OPTION                          1756
+#define RPC_S_NO_MORE_MEMBERS                              1757
+#define RPC_S_NOT_ALL_OBJS_UNEXPORTED                      1758
+#define RPC_S_INTERFACE_NOT_FOUND                          1759
+#define RPC_S_ENTRY_ALREADY_EXISTS                         1760
+#define RPC_S_ENTRY_NOT_FOUND                              1761
+#define RPC_S_NAME_SERVICE_UNAVAILABLE                     1762
+#define RPC_S_INVALID_NAF_ID                               1763
+#define RPC_S_CANNOT_SUPPORT                               1764
+#define RPC_S_NO_CONTEXT_AVAILABLE                         1765
+#define RPC_S_INTERNAL_ERROR                               1766
+#define RPC_S_ZERO_DIVIDE                                  1767
+#define RPC_S_ADDRESS_ERROR                                1768
+#define RPC_S_FP_DIV_ZERO                                  1769
+#define RPC_S_FP_UNDERFLOW                                 1770
+#define RPC_S_FP_OVERFLOW                                  1771
+#define RPC_X_NO_MORE_ENTRIES                              1772
+#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL                      1773
+#define RPC_X_SS_CHAR_TRANS_SHORT_FILE                     1774
+#define RPC_X_SS_IN_NULL_CONTEXT                           1775
+#define RPC_X_SS_CONTEXT_DAMAGED                           1777
+#define RPC_X_SS_HANDLES_MISMATCH                          1778
+#define RPC_X_SS_CANNOT_GET_CALL_HANDLE                    1779
+#define RPC_X_NULL_REF_POINTER                             1780
+#define RPC_X_ENUM_VALUE_OUT_OF_RANGE                      1781
+#define RPC_X_BYTE_COUNT_TOO_SMALL                         1782
+#define RPC_X_BAD_STUB_DATA                                1783
+#define ERROR_INVALID_USER_BUFFER                          1784
+#define ERROR_UNRECOGNIZED_MEDIA                           1785
+#define ERROR_NO_TRUST_LSA_SECRET                          1786
+#define ERROR_NO_TRUST_SAM_ACCOUNT                         1787
+#define ERROR_TRUSTED_DOMAIN_FAILURE                       1788
+#define ERROR_TRUSTED_RELATIONSHIP_FAILURE                 1789
+#define ERROR_TRUST_FAILURE                                1790
+#define RPC_S_CALL_IN_PROGRESS                             1791
+#define ERROR_NETLOGON_NOT_STARTED                         1792
+#define ERROR_ACCOUNT_EXPIRED                              1793
+#define ERROR_REDIRECTOR_HAS_OPEN_HANDLES                  1794
+#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED             1795
+#define ERROR_UNKNOWN_PORT                                 1796
+#define ERROR_UNKNOWN_PRINTER_DRIVER                       1797
+#define ERROR_UNKNOWN_PRINTPROCESSOR                       1798
+#define ERROR_INVALID_SEPARATOR_FILE                       1799
+#define ERROR_INVALID_PRIORITY                             1800
+#define ERROR_INVALID_PRINTER_NAME                         1801
+#define ERROR_PRINTER_ALREADY_EXISTS                       1802
+#define ERROR_INVALID_PRINTER_COMMAND                      1803
+#define ERROR_INVALID_DATATYPE                             1804
+#define ERROR_INVALID_ENVIRONMENT                          1805
+#define RPC_S_NO_MORE_BINDINGS                             1806
+#define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT            1807
+#define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT            1808
+#define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT                 1809
+#define ERROR_DOMAIN_TRUST_INCONSISTENT                    1810
+#define ERROR_SERVER_HAS_OPEN_HANDLES                      1811
+#define ERROR_RESOURCE_DATA_NOT_FOUND                      1812
+#define ERROR_RESOURCE_TYPE_NOT_FOUND                      1813
+#define ERROR_RESOURCE_NAME_NOT_FOUND                      1814
+#define ERROR_RESOURCE_LANG_NOT_FOUND                      1815
+#define ERROR_NOT_ENOUGH_QUOTA                             1816
+#define RPC_S_NO_INTERFACES                                1817
+#define RPC_S_CALL_CANCELLED                               1818
+#define RPC_S_BINDING_INCOMPLETE                           1819
+#define RPC_S_COMM_FAILURE                                 1820
+#define RPC_S_UNSUPPORTED_AUTHN_LEVEL                      1821
+#define RPC_S_NO_PRINC_NAME                                1822
+#define RPC_S_NOT_RPC_ERROR                                1823
+#define RPC_S_UUID_LOCAL_ONLY                              1824
+#define RPC_S_SEC_PKG_ERROR                                1825
+#define RPC_S_NOT_CANCELLED                                1826
+#define RPC_X_INVALID_ES_ACTION                            1827
+#define RPC_X_WRONG_ES_VERSION                             1828
+#define RPC_X_WRONG_STUB_VERSION                           1829
+#define RPC_X_INVALID_PIPE_OBJECT                          1830
+#define RPC_X_WRONG_PIPE_ORDER                             1831
+#define RPC_X_WRONG_PIPE_VERSION                           1832
+#define RPC_S_GROUP_MEMBER_NOT_FOUND                       1898
+#define EPT_S_CANT_CREATE                                  1899
+#define RPC_S_INVALID_OBJECT                               1900
+#define ERROR_INVALID_TIME                                 1901
+#define ERROR_INVALID_FORM_NAME                            1902
+#define ERROR_INVALID_FORM_SIZE                            1903
+#define ERROR_ALREADY_WAITING                              1904
+#define ERROR_PRINTER_DELETED                              1905
+#define ERROR_INVALID_PRINTER_STATE                        1906
+#define ERROR_PASSWORD_MUST_CHANGE                         1907
+#define ERROR_DOMAIN_CONTROLLER_NOT_FOUND                  1908
+#define ERROR_ACCOUNT_LOCKED_OUT                           1909
+#define OR_INVALID_OXID                                    1910
+#define OR_INVALID_OID                                     1911
+#define OR_INVALID_SET                                     1912
+#define RPC_S_SEND_INCOMPLETE                              1913
+#define RPC_S_INVALID_ASYNC_HANDLE                         1914
+#define RPC_S_INVALID_ASYNC_CALL                           1915
+#define RPC_X_PIPE_CLOSED                                  1916
+#define RPC_X_PIPE_DISCIPLINE_ERROR                        1917
+#define RPC_X_PIPE_EMPTY                                   1918
+#define ERROR_NO_SITENAME                                  1919
+#define ERROR_CANT_ACCESS_FILE                             1920
+#define ERROR_CANT_RESOLVE_FILENAME                        1921
+#define RPC_S_ENTRY_TYPE_MISMATCH                          1922
+#define RPC_S_NOT_ALL_OBJS_EXPORTED                        1923
+#define RPC_S_INTERFACE_NOT_EXPORTED                       1924
+#define RPC_S_PROFILE_NOT_ADDED                            1925
+#define RPC_S_PRF_ELT_NOT_ADDED                            1926
+#define RPC_S_PRF_ELT_NOT_REMOVED                          1927
+#define RPC_S_GRP_ELT_NOT_ADDED                            1928
+#define RPC_S_GRP_ELT_NOT_REMOVED                          1929
+#define ERROR_KM_DRIVER_BLOCKED                            1930
+#define ERROR_CONTEXT_EXPIRED                              1931
+#define ERROR_PER_USER_TRUST_QUOTA_EXCEEDED                1932
+#define ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED                1933
+#define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED             1934
+#define ERROR_AUTHENTICATION_FIREWALL_FAILED               1935
+#define ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED             1936
+#define ERROR_INVALID_PIXEL_FORMAT                         2000
+#define ERROR_BAD_DRIVER                                   2001
+#define ERROR_INVALID_WINDOW_STYLE                         2002
+#define ERROR_METAFILE_NOT_SUPPORTED                       2003
+#define ERROR_TRANSFORM_NOT_SUPPORTED                      2004
+#define ERROR_CLIPPING_NOT_SUPPORTED                       2005
+#define ERROR_INVALID_CMM                                  2010
+#define ERROR_INVALID_PROFILE                              2011
+#define ERROR_TAG_NOT_FOUND                                2012
+#define ERROR_TAG_NOT_PRESENT                              2013
+#define ERROR_DUPLICATE_TAG                                2014
+#define ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE           2015
+#define ERROR_PROFILE_NOT_FOUND                            2016
+#define ERROR_INVALID_COLORSPACE                           2017
+#define ERROR_ICM_NOT_ENABLED                              2018
+#define ERROR_DELETING_ICM_XFORM                           2019
+#define ERROR_INVALID_TRANSFORM                            2020
+#define ERROR_COLORSPACE_MISMATCH                          2021
+#define ERROR_INVALID_COLORINDEX                           2022
+#define ERROR_CONNECTED_OTHER_PASSWORD                     2108
+#define ERROR_BAD_USERNAME                                 2202
+#define ERROR_NOT_CONNECTED                                2250
+#define ERROR_OPEN_FILES                                   2401
+#define ERROR_ACTIVE_CONNECTIONS                           2402
+#define ERROR_DEVICE_IN_USE                                2404
+#define ERROR_UNKNOWN_PRINT_MONITOR                        3000
+#define ERROR_PRINTER_DRIVER_IN_USE                        3001
+#define ERROR_SPOOL_FILE_NOT_FOUND                         3002
+#define ERROR_SPL_NO_STARTDOC                              3003
+#define ERROR_SPL_NO_ADDJOB                                3004
+#define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED            3005
+#define ERROR_PRINT_MONITOR_ALREADY_INSTALLED              3006
+#define ERROR_INVALID_PRINT_MONITOR                        3007
+#define ERROR_PRINT_MONITOR_IN_USE                         3008
+#define ERROR_PRINTER_HAS_JOBS_QUEUED                      3009
+#define ERROR_SUCCESS_REBOOT_REQUIRED                      3010
+#define ERROR_SUCCESS_RESTART_REQUIRED                     3011
+#define ERROR_PRINTER_NOT_FOUND                            3012
+#define ERROR_PRINTER_DRIVER_WARNED                        3013
+#define ERROR_PRINTER_DRIVER_BLOCKED                       3014
+#define ERROR_REQUEST_PAUSED                               3050
+#define ERROR_WINS_INTERNAL                                4000
+#define ERROR_CAN_NOT_DEL_LOCAL_WINS                       4001
+#define ERROR_STATIC_INIT                                  4002
+#define ERROR_INC_BACKUP                                   4003
+#define ERROR_FULL_BACKUP                                  4004
+#define ERROR_REC_NON_EXISTENT                             4005
+#define ERROR_RPL_NOT_ALLOWED                              4006
+#define ERROR_DHCP_ADDRESS_CONFLICT                        4100
+#define ERROR_WMI_GUID_NOT_FOUND                           4200
+#define ERROR_WMI_INSTANCE_NOT_FOUND                       4201
+#define ERROR_WMI_ITEMID_NOT_FOUND                         4202
+#define ERROR_WMI_TRY_AGAIN                                4203
+#define ERROR_WMI_DP_NOT_FOUND                             4204
+#define ERROR_WMI_UNRESOLVED_INSTANCE_REF                  4205
+#define ERROR_WMI_ALREADY_ENABLED                          4206
+#define ERROR_WMI_GUID_DISCONNECTED                        4207
+#define ERROR_WMI_SERVER_UNAVAILABLE                       4208
+#define ERROR_WMI_DP_FAILED                                4209
+#define ERROR_WMI_INVALID_MOF                              4210
+#define ERROR_WMI_INVALID_REGINFO                          4211
+#define ERROR_WMI_ALREADY_DISABLED                         4212
+#define ERROR_WMI_READ_ONLY                                4213
+#define ERROR_WMI_SET_FAILURE                              4214
+#define ERROR_INVALID_MEDIA                                4300
+#define ERROR_INVALID_LIBRARY                              4301
+#define ERROR_INVALID_MEDIA_POOL                           4302
+#define ERROR_DRIVE_MEDIA_MISMATCH                         4303
+#define ERROR_MEDIA_OFFLINE                                4304
+#define ERROR_LIBRARY_OFFLINE                              4305
+#define ERROR_EMPTY                                        4306
+#define ERROR_NOT_EMPTY                                    4307
+#define ERROR_MEDIA_UNAVAILABLE                            4308
+#define ERROR_RESOURCE_DISABLED                            4309
+#define ERROR_INVALID_CLEANER                              4310
+#define ERROR_UNABLE_TO_CLEAN                              4311
+#define ERROR_OBJECT_NOT_FOUND                             4312
+#define ERROR_DATABASE_FAILURE                             4313
+#define ERROR_DATABASE_FULL                                4314
+#define ERROR_MEDIA_INCOMPATIBLE                           4315
+#define ERROR_RESOURCE_NOT_PRESENT                         4316
+#define ERROR_INVALID_OPERATION                            4317
+#define ERROR_MEDIA_NOT_AVAILABLE                          4318
+#define ERROR_DEVICE_NOT_AVAILABLE                         4319
+#define ERROR_REQUEST_REFUSED                              4320
+#define ERROR_INVALID_DRIVE_OBJECT                         4321
+#define ERROR_LIBRARY_FULL                                 4322
+#define ERROR_MEDIUM_NOT_ACCESSIBLE                        4323
+#define ERROR_UNABLE_TO_LOAD_MEDIUM                        4324
+#define ERROR_UNABLE_TO_INVENTORY_DRIVE                    4325
+#define ERROR_UNABLE_TO_INVENTORY_SLOT                     4326
+#define ERROR_UNABLE_TO_INVENTORY_TRANSPORT                4327
+#define ERROR_TRANSPORT_FULL                               4328
+#define ERROR_CONTROLLING_IEPORT                           4329
+#define ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA                4330
+#define ERROR_CLEANER_SLOT_SET                             4331
+#define ERROR_CLEANER_SLOT_NOT_SET                         4332
+#define ERROR_CLEANER_CARTRIDGE_SPENT                      4333
+#define ERROR_UNEXPECTED_OMID                              4334
+#define ERROR_CANT_DELETE_LAST_ITEM                        4335
+#define ERROR_MESSAGE_EXCEEDS_MAX_SIZE                     4336
+#define ERROR_VOLUME_CONTAINS_SYS_FILES                    4337
+#define ERROR_INDIGENOUS_TYPE                              4338
+#define ERROR_NO_SUPPORTING_DRIVES                         4339
+#define ERROR_CLEANER_CARTRIDGE_INSTALLED                  4340
+#define ERROR_FILE_OFFLINE                                 4350
+#define ERROR_REMOTE_STORAGE_NOT_ACTIVE                    4351
+#define ERROR_REMOTE_STORAGE_MEDIA_ERROR                   4352
+#define ERROR_NOT_A_REPARSE_POINT                          4390
+#define ERROR_REPARSE_ATTRIBUTE_CONFLICT                   4391
+#define ERROR_INVALID_REPARSE_DATA                         4392
+#define ERROR_REPARSE_TAG_INVALID                          4393
+#define ERROR_REPARSE_TAG_MISMATCH                         4394
+#define ERROR_VOLUME_NOT_SIS_ENABLED                       4500
+#define ERROR_DEPENDENT_RESOURCE_EXISTS                    5001
+#define ERROR_DEPENDENCY_NOT_FOUND                         5002
+#define ERROR_DEPENDENCY_ALREADY_EXISTS                    5003
+#define ERROR_RESOURCE_NOT_ONLINE                          5004
+#define ERROR_HOST_NODE_NOT_AVAILABLE                      5005
+#define ERROR_RESOURCE_NOT_AVAILABLE                       5006
+#define ERROR_RESOURCE_NOT_FOUND                           5007
+#define ERROR_SHUTDOWN_CLUSTER                             5008
+#define ERROR_CANT_EVICT_ACTIVE_NODE                       5009
+#define ERROR_OBJECT_ALREADY_EXISTS                        5010
+#define ERROR_OBJECT_IN_LIST                               5011
+#define ERROR_GROUP_NOT_AVAILABLE                          5012
+#define ERROR_GROUP_NOT_FOUND                              5013
+#define ERROR_GROUP_NOT_ONLINE                             5014
+#define ERROR_HOST_NODE_NOT_RESOURCE_OWNER                 5015
+#define ERROR_HOST_NODE_NOT_GROUP_OWNER                    5016
+#define ERROR_RESMON_CREATE_FAILED                         5017
+#define ERROR_RESMON_ONLINE_FAILED                         5018
+#define ERROR_RESOURCE_ONLINE                              5019
+#define ERROR_QUORUM_RESOURCE                              5020
+#define ERROR_NOT_QUORUM_CAPABLE                           5021
+#define ERROR_CLUSTER_SHUTTING_DOWN                        5022
+#define ERROR_INVALID_STATE                                5023
+#define ERROR_RESOURCE_PROPERTIES_STORED                   5024
+#define ERROR_NOT_QUORUM_CLASS                             5025
+#define ERROR_CORE_RESOURCE                                5026
+#define ERROR_QUORUM_RESOURCE_ONLINE_FAILED                5027
+#define ERROR_QUORUMLOG_OPEN_FAILED                        5028
+#define ERROR_CLUSTERLOG_CORRUPT                           5029
+#define ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE            5030
+#define ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE                   5031
+#define ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND                5032
+#define ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE                  5033
+#define ERROR_QUORUM_OWNER_ALIVE                           5034
+#define ERROR_NETWORK_NOT_AVAILABLE                        5035
+#define ERROR_NODE_NOT_AVAILABLE                           5036
+#define ERROR_ALL_NODES_NOT_AVAILABLE                      5037
+#define ERROR_RESOURCE_FAILED                              5038
+#define ERROR_CLUSTER_INVALID_NODE                         5039
+#define ERROR_CLUSTER_NODE_EXISTS                          5040
+#define ERROR_CLUSTER_JOIN_IN_PROGRESS                     5041
+#define ERROR_CLUSTER_NODE_NOT_FOUND                       5042
+#define ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND                 5043
+#define ERROR_CLUSTER_NETWORK_EXISTS                       5044
+#define ERROR_CLUSTER_NETWORK_NOT_FOUND                    5045
+#define ERROR_CLUSTER_NETINTERFACE_EXISTS                  5046
+#define ERROR_CLUSTER_NETINTERFACE_NOT_FOUND               5047
+#define ERROR_CLUSTER_INVALID_REQUEST                      5048
+#define ERROR_CLUSTER_INVALID_NETWORK_PROVIDER             5049
+#define ERROR_CLUSTER_NODE_DOWN                            5050
+#define ERROR_CLUSTER_NODE_UNREACHABLE                     5051
+#define ERROR_CLUSTER_NODE_NOT_MEMBER                      5052
+#define ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS                 5053
+#define ERROR_CLUSTER_INVALID_NETWORK                      5054
+#define ERROR_CLUSTER_NODE_UP                              5056
+#define ERROR_CLUSTER_IPADDR_IN_USE                        5057
+#define ERROR_CLUSTER_NODE_NOT_PAUSED                      5058
+#define ERROR_CLUSTER_NO_SECURITY_CONTEXT                  5059
+#define ERROR_CLUSTER_NETWORK_NOT_INTERNAL                 5060
+#define ERROR_CLUSTER_NODE_ALREADY_UP                      5061
+#define ERROR_CLUSTER_NODE_ALREADY_DOWN                    5062
+#define ERROR_CLUSTER_NETWORK_ALREADY_ONLINE               5063
+#define ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE              5064
+#define ERROR_CLUSTER_NODE_ALREADY_MEMBER                  5065
+#define ERROR_CLUSTER_LAST_INTERNAL_NETWORK                5066
+#define ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS               5067
+#define ERROR_INVALID_OPERATION_ON_QUORUM                  5068
+#define ERROR_DEPENDENCY_NOT_ALLOWED                       5069
+#define ERROR_CLUSTER_NODE_PAUSED                          5070
+#define ERROR_NODE_CANT_HOST_RESOURCE                      5071
+#define ERROR_CLUSTER_NODE_NOT_READY                       5072
+#define ERROR_CLUSTER_NODE_SHUTTING_DOWN                   5073
+#define ERROR_CLUSTER_JOIN_ABORTED                         5074
+#define ERROR_CLUSTER_INCOMPATIBLE_VERSIONS                5075
+#define ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED         5076
+#define ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED                5077
+#define ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND              5078
+#define ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED                5079
+#define ERROR_CLUSTER_RESNAME_NOT_FOUND                    5080
+#define ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED           5081
+#define ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST                5082
+#define ERROR_CLUSTER_DATABASE_SEQMISMATCH                 5083
+#define ERROR_RESMON_INVALID_STATE                         5084
+#define ERROR_CLUSTER_GUM_NOT_LOCKER                       5085
+#define ERROR_QUORUM_DISK_NOT_FOUND                        5086
+#define ERROR_DATABASE_BACKUP_CORRUPT                      5087
+#define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT            5088
+#define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE               5089
+#define ERROR_ENCRYPTION_FAILED                            6000
+#define ERROR_DECRYPTION_FAILED                            6001
+#define ERROR_FILE_ENCRYPTED                               6002
+#define ERROR_NO_RECOVERY_POLICY                           6003
+#define ERROR_NO_EFS                                       6004
+#define ERROR_WRONG_EFS                                    6005
+#define ERROR_NO_USER_KEYS                                 6006
+#define ERROR_FILE_NOT_ENCRYPTED                           6007
+#define ERROR_NOT_EXPORT_FORMAT                            6008
+#define ERROR_FILE_READ_ONLY                               6009
+#define ERROR_DIR_EFS_DISALLOWED                           6010
+#define ERROR_EFS_SERVER_NOT_TRUSTED                       6011
+#define ERROR_EFS_ALG_BLOB_TOO_BIG                         6013
+#define ERROR_NO_BROWSER_SERVERS_FOUND                     6118
+#define SCHED_E_SERVICE_NOT_LOCALSYSTEM                    6200
+#define ERROR_CTX_WINSTATION_NAME_INVALID                  7001
+#define ERROR_CTX_INVALID_PD                               7002
+#define ERROR_CTX_PD_NOT_FOUND                             7003
+#define ERROR_CTX_WD_NOT_FOUND                             7004
+#define ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY               7005
+#define ERROR_CTX_SERVICE_NAME_COLLISION                   7006
+#define ERROR_CTX_CLOSE_PENDING                            7007
+#define ERROR_CTX_NO_OUTBUF                                7008
+#define ERROR_CTX_MODEM_INF_NOT_FOUND                      7009
+#define ERROR_CTX_INVALID_MODEMNAME                        7010
+#define ERROR_CTX_MODEM_RESPONSE_ERROR                     7011
+#define ERROR_CTX_MODEM_RESPONSE_TIMEOUT                   7012
+#define ERROR_CTX_MODEM_RESPONSE_NO_CARRIER                7013
+#define ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE               7014
+#define ERROR_CTX_MODEM_RESPONSE_BUSY                      7015
+#define ERROR_CTX_MODEM_RESPONSE_VOICE                     7016
+#define ERROR_CTX_TD_ERROR                                 7017
+#define ERROR_CTX_WINSTATION_NOT_FOUND                     7022
+#define ERROR_CTX_WINSTATION_ALREADY_EXISTS                7023
+#define ERROR_CTX_WINSTATION_BUSY                          7024
+#define ERROR_CTX_BAD_VIDEO_MODE                           7025
+#define ERROR_CTX_GRAPHICS_INVALID                         7035
+#define ERROR_CTX_LOGON_DISABLED                           7037
+#define ERROR_CTX_NOT_CONSOLE                              7038
+#define ERROR_CTX_CLIENT_QUERY_TIMEOUT                     7040
+#define ERROR_CTX_CONSOLE_DISCONNECT                       7041
+#define ERROR_CTX_CONSOLE_CONNECT                          7042
+#define ERROR_CTX_SHADOW_DENIED                            7044
+#define ERROR_CTX_WINSTATION_ACCESS_DENIED                 7045
+#define ERROR_CTX_INVALID_WD                               7049
+#define ERROR_CTX_SHADOW_INVALID                           7050
+#define ERROR_CTX_SHADOW_DISABLED                          7051
+#define ERROR_CTX_CLIENT_LICENSE_IN_USE                    7052
+#define ERROR_CTX_CLIENT_LICENSE_NOT_SET                   7053
+#define ERROR_CTX_LICENSE_NOT_AVAILABLE                    7054
+#define ERROR_CTX_LICENSE_CLIENT_INVALID                   7055
+#define ERROR_CTX_LICENSE_EXPIRED                          7056
+#define ERROR_CTX_SHADOW_NOT_RUNNING                       7057
+#define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE              7058
+#define FRS_ERR_INVALID_API_SEQUENCE                       8001
+#define FRS_ERR_STARTING_SERVICE                           8002
+#define FRS_ERR_STOPPING_SERVICE                           8003
+#define FRS_ERR_INTERNAL_API                               8004
+#define FRS_ERR_INTERNAL                                   8005
+#define FRS_ERR_SERVICE_COMM                               8006
+#define FRS_ERR_INSUFFICIENT_PRIV                          8007
+#define FRS_ERR_AUTHENTICATION                             8008
+#define FRS_ERR_PARENT_INSUFFICIENT_PRIV                   8009
+#define FRS_ERR_PARENT_AUTHENTICATION                      8010
+#define FRS_ERR_CHILD_TO_PARENT_COMM                       8011
+#define FRS_ERR_PARENT_TO_CHILD_COMM                       8012
+#define FRS_ERR_SYSVOL_POPULATE                            8013
+#define FRS_ERR_SYSVOL_POPULATE_TIMEOUT                    8014
+#define FRS_ERR_SYSVOL_IS_BUSY                             8015
+#define FRS_ERR_SYSVOL_DEMOTE                              8016
+#define FRS_ERR_INVALID_SERVICE_PARAMETER                  8017
+#define ERROR_DS_NOT_INSTALLED                             8200
+#define ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY              8201
+#define ERROR_DS_NO_ATTRIBUTE_OR_VALUE                     8202
+#define ERROR_DS_INVALID_ATTRIBUTE_SYNTAX                  8203
+#define ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED                  8204
+#define ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS                 8205
+#define ERROR_DS_BUSY                                      8206
+#define ERROR_DS_UNAVAILABLE                               8207
+#define ERROR_DS_NO_RIDS_ALLOCATED                         8208
+#define ERROR_DS_NO_MORE_RIDS                              8209
+#define ERROR_DS_INCORRECT_ROLE_OWNER                      8210
+#define ERROR_DS_RIDMGR_INIT_ERROR                         8211
+#define ERROR_DS_OBJ_CLASS_VIOLATION                       8212
+#define ERROR_DS_CANT_ON_NON_LEAF                          8213
+#define ERROR_DS_CANT_ON_RDN                               8214
+#define ERROR_DS_CANT_MOD_OBJ_CLASS                        8215
+#define ERROR_DS_CROSS_DOM_MOVE_ERROR                      8216
+#define ERROR_DS_GC_NOT_AVAILABLE                          8217
+#define ERROR_SHARED_POLICY                                8218
+#define ERROR_POLICY_OBJECT_NOT_FOUND                      8219
+#define ERROR_POLICY_ONLY_IN_DS                            8220
+#define ERROR_PROMOTION_ACTIVE                             8221
+#define ERROR_NO_PROMOTION_ACTIVE                          8222
+#define ERROR_DS_OPERATIONS_ERROR                          8224
+#define ERROR_DS_PROTOCOL_ERROR                            8225
+#define ERROR_DS_TIMELIMIT_EXCEEDED                        8226
+#define ERROR_DS_SIZELIMIT_EXCEEDED                        8227
+#define ERROR_DS_ADMIN_LIMIT_EXCEEDED                      8228
+#define ERROR_DS_COMPARE_FALSE                             8229
+#define ERROR_DS_COMPARE_TRUE                              8230
+#define ERROR_DS_AUTH_METHOD_NOT_SUPPORTED                 8231
+#define ERROR_DS_STRONG_AUTH_REQUIRED                      8232
+#define ERROR_DS_INAPPROPRIATE_AUTH                        8233
+#define ERROR_DS_AUTH_UNKNOWN                              8234
+#define ERROR_DS_REFERRAL                                  8235
+#define ERROR_DS_UNAVAILABLE_CRIT_EXTENSION                8236
+#define ERROR_DS_CONFIDENTIALITY_REQUIRED                  8237
+#define ERROR_DS_INAPPROPRIATE_MATCHING                    8238
+#define ERROR_DS_CONSTRAINT_VIOLATION                      8239
+#define ERROR_DS_NO_SUCH_OBJECT                            8240
+#define ERROR_DS_ALIAS_PROBLEM                             8241
+#define ERROR_DS_INVALID_DN_SYNTAX                         8242
+#define ERROR_DS_IS_LEAF                                   8243
+#define ERROR_DS_ALIAS_DEREF_PROBLEM                       8244
+#define ERROR_DS_UNWILLING_TO_PERFORM                      8245
+#define ERROR_DS_LOOP_DETECT                               8246
+#define ERROR_DS_NAMING_VIOLATION                          8247
+#define ERROR_DS_OBJECT_RESULTS_TOO_LARGE                  8248
+#define ERROR_DS_AFFECTS_MULTIPLE_DSAS                     8249
+#define ERROR_DS_SERVER_DOWN                               8250
+#define ERROR_DS_LOCAL_ERROR                               8251
+#define ERROR_DS_ENCODING_ERROR                            8252
+#define ERROR_DS_DECODING_ERROR                            8253
+#define ERROR_DS_FILTER_UNKNOWN                            8254
+#define ERROR_DS_PARAM_ERROR                               8255
+#define ERROR_DS_NOT_SUPPORTED                             8256
+#define ERROR_DS_NO_RESULTS_RETURNED                       8257
+#define ERROR_DS_CONTROL_NOT_FOUND                         8258
+#define ERROR_DS_CLIENT_LOOP                               8259
+#define ERROR_DS_REFERRAL_LIMIT_EXCEEDED                   8260
+#define ERROR_DS_ROOT_MUST_BE_NC                           8301
+#define ERROR_DS_ADD_REPLICA_INHIBITED                     8302
+#define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA                     8303
+#define ERROR_DS_MAX_OBJ_SIZE_EXCEEDED                     8304
+#define ERROR_DS_OBJ_STRING_NAME_EXISTS                    8305
+#define ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA                  8306
+#define ERROR_DS_RDN_DOESNT_MATCH_SCHEMA                   8307
+#define ERROR_DS_NO_REQUESTED_ATTS_FOUND                   8308
+#define ERROR_DS_USER_BUFFER_TO_SMALL                      8309
+#define ERROR_DS_ATT_IS_NOT_ON_OBJ                         8310
+#define ERROR_DS_ILLEGAL_MOD_OPERATION                     8311
+#define ERROR_DS_OBJ_TOO_LARGE                             8312
+#define ERROR_DS_BAD_INSTANCE_TYPE                         8313
+#define ERROR_DS_MASTERDSA_REQUIRED                        8314
+#define ERROR_DS_OBJECT_CLASS_REQUIRED                     8315
+#define ERROR_DS_MISSING_REQUIRED_ATT                      8316
+#define ERROR_DS_ATT_NOT_DEF_FOR_CLASS                     8317
+#define ERROR_DS_ATT_ALREADY_EXISTS                        8318
+#define ERROR_DS_CANT_ADD_ATT_VALUES                       8320
+#define ERROR_DS_SINGLE_VALUE_CONSTRAINT                   8321
+#define ERROR_DS_RANGE_CONSTRAINT                          8322
+#define ERROR_DS_ATT_VAL_ALREADY_EXISTS                    8323
+#define ERROR_DS_CANT_REM_MISSING_ATT                      8324
+#define ERROR_DS_CANT_REM_MISSING_ATT_VAL                  8325
+#define ERROR_DS_ROOT_CANT_BE_SUBREF                       8326
+#define ERROR_DS_NO_CHAINING                               8327
+#define ERROR_DS_NO_CHAINED_EVAL                           8328
+#define ERROR_DS_NO_PARENT_OBJECT                          8329
+#define ERROR_DS_PARENT_IS_AN_ALIAS                        8330
+#define ERROR_DS_CANT_MIX_MASTER_AND_REPS                  8331
+#define ERROR_DS_CHILDREN_EXIST                            8332
+#define ERROR_DS_OBJ_NOT_FOUND                             8333
+#define ERROR_DS_ALIASED_OBJ_MISSING                       8334
+#define ERROR_DS_BAD_NAME_SYNTAX                           8335
+#define ERROR_DS_ALIAS_POINTS_TO_ALIAS                     8336
+#define ERROR_DS_CANT_DEREF_ALIAS                          8337
+#define ERROR_DS_OUT_OF_SCOPE                              8338
+#define ERROR_DS_CANT_DELETE_DSA_OBJ                       8340
+#define ERROR_DS_GENERIC_ERROR                             8341
+#define ERROR_DS_DSA_MUST_BE_INT_MASTER                    8342
+#define ERROR_DS_CLASS_NOT_DSA                             8343
+#define ERROR_DS_INSUFF_ACCESS_RIGHTS                      8344
+#define ERROR_DS_ILLEGAL_SUPERIOR                          8345
+#define ERROR_DS_ATTRIBUTE_OWNED_BY_SAM                    8346
+#define ERROR_DS_NAME_TOO_MANY_PARTS                       8347
+#define ERROR_DS_NAME_TOO_LONG                             8348
+#define ERROR_DS_NAME_VALUE_TOO_LONG                       8349
+#define ERROR_DS_NAME_UNPARSEABLE                          8350
+#define ERROR_DS_NAME_TYPE_UNKNOWN                         8351
+#define ERROR_DS_NOT_AN_OBJECT                             8352
+#define ERROR_DS_SEC_DESC_TOO_SHORT                        8353
+#define ERROR_DS_SEC_DESC_INVALID                          8354
+#define ERROR_DS_NO_DELETED_NAME                           8355
+#define ERROR_DS_SUBREF_MUST_HAVE_PARENT                   8356
+#define ERROR_DS_NCNAME_MUST_BE_NC                         8357
+#define ERROR_DS_CANT_ADD_SYSTEM_ONLY                      8358
+#define ERROR_DS_CLASS_MUST_BE_CONCRETE                    8359
+#define ERROR_DS_INVALID_DMD                               8360
+#define ERROR_DS_OBJ_GUID_EXISTS                           8361
+#define ERROR_DS_NOT_ON_BACKLINK                           8362
+#define ERROR_DS_NO_CROSSREF_FOR_NC                        8363
+#define ERROR_DS_SHUTTING_DOWN                             8364
+#define ERROR_DS_UNKNOWN_OPERATION                         8365
+#define ERROR_DS_INVALID_ROLE_OWNER                        8366
+#define ERROR_DS_COULDNT_CONTACT_FSMO                      8367
+#define ERROR_DS_CROSS_NC_DN_RENAME                        8368
+#define ERROR_DS_CANT_MOD_SYSTEM_ONLY                      8369
+#define ERROR_DS_REPLICATOR_ONLY                           8370
+#define ERROR_DS_OBJ_CLASS_NOT_DEFINED                     8371
+#define ERROR_DS_OBJ_CLASS_NOT_SUBCLASS                    8372
+#define ERROR_DS_NAME_REFERENCE_INVALID                    8373
+#define ERROR_DS_CROSS_REF_EXISTS                          8374
+#define ERROR_DS_CANT_DEL_MASTER_CROSSREF                  8375
+#define ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD                8376
+#define ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX                 8377
+#define ERROR_DS_DUP_RDN                                   8378
+#define ERROR_DS_DUP_OID                                   8379
+#define ERROR_DS_DUP_MAPI_ID                               8380
+#define ERROR_DS_DUP_SCHEMA_ID_GUID                        8381
+#define ERROR_DS_DUP_LDAP_DISPLAY_NAME                     8382
+#define ERROR_DS_SEMANTIC_ATT_TEST                         8383
+#define ERROR_DS_SYNTAX_MISMATCH                           8384
+#define ERROR_DS_EXISTS_IN_MUST_HAVE                       8385
+#define ERROR_DS_EXISTS_IN_MAY_HAVE                        8386
+#define ERROR_DS_NONEXISTENT_MAY_HAVE                      8387
+#define ERROR_DS_NONEXISTENT_MUST_HAVE                     8388
+#define ERROR_DS_AUX_CLS_TEST_FAIL                         8389
+#define ERROR_DS_NONEXISTENT_POSS_SUP                      8390
+#define ERROR_DS_SUB_CLS_TEST_FAIL                         8391
+#define ERROR_DS_BAD_RDN_ATT_ID_SYNTAX                     8392
+#define ERROR_DS_EXISTS_IN_AUX_CLS                         8393
+#define ERROR_DS_EXISTS_IN_SUB_CLS                         8394
+#define ERROR_DS_EXISTS_IN_POSS_SUP                        8395
+#define ERROR_DS_RECALCSCHEMA_FAILED                       8396
+#define ERROR_DS_TREE_DELETE_NOT_FINISHED                  8397
+#define ERROR_DS_CANT_DELETE                               8398
+#define ERROR_DS_ATT_SCHEMA_REQ_ID                         8399
+#define ERROR_DS_BAD_ATT_SCHEMA_SYNTAX                     8400
+#define ERROR_DS_CANT_CACHE_ATT                            8401
+#define ERROR_DS_CANT_CACHE_CLASS                          8402
+#define ERROR_DS_CANT_REMOVE_ATT_CACHE                     8403
+#define ERROR_DS_CANT_REMOVE_CLASS_CACHE                   8404
+#define ERROR_DS_CANT_RETRIEVE_DN                          8405
+#define ERROR_DS_MISSING_SUPREF                            8406
+#define ERROR_DS_CANT_RETRIEVE_INSTANCE                    8407
+#define ERROR_DS_CODE_INCONSISTENCY                        8408
+#define ERROR_DS_DATABASE_ERROR                            8409
+#define ERROR_DS_GOVERNSID_MISSING                         8410
+#define ERROR_DS_MISSING_EXPECTED_ATT                      8411
+#define ERROR_DS_NCNAME_MISSING_CR_REF                     8412
+#define ERROR_DS_SECURITY_CHECKING_ERROR                   8413
+#define ERROR_DS_SCHEMA_NOT_LOADED                         8414
+#define ERROR_DS_SCHEMA_ALLOC_FAILED                       8415
+#define ERROR_DS_ATT_SCHEMA_REQ_SYNTAX                     8416
+#define ERROR_DS_GCVERIFY_ERROR                            8417
+#define ERROR_DS_DRA_SCHEMA_MISMATCH                       8418
+#define ERROR_DS_CANT_FIND_DSA_OBJ                         8419
+#define ERROR_DS_CANT_FIND_EXPECTED_NC                     8420
+#define ERROR_DS_CANT_FIND_NC_IN_CACHE                     8421
+#define ERROR_DS_CANT_RETRIEVE_CHILD                       8422
+#define ERROR_DS_SECURITY_ILLEGAL_MODIFY                   8423
+#define ERROR_DS_CANT_REPLACE_HIDDEN_REC                   8424
+#define ERROR_DS_BAD_HIERARCHY_FILE                        8425
+#define ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED              8426
+#define ERROR_DS_CONFIG_PARAM_MISSING                      8427
+#define ERROR_DS_COUNTING_AB_INDICES_FAILED                8428
+#define ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED             8429
+#define ERROR_DS_INTERNAL_FAILURE                          8430
+#define ERROR_DS_UNKNOWN_ERROR                             8431
+#define ERROR_DS_ROOT_REQUIRES_CLASS_TOP                   8432
+#define ERROR_DS_REFUSING_FSMO_ROLES                       8433
+#define ERROR_DS_MISSING_FSMO_SETTINGS                     8434
+#define ERROR_DS_UNABLE_TO_SURRENDER_ROLES                 8435
+#define ERROR_DS_DRA_GENERIC                               8436
+#define ERROR_DS_DRA_INVALID_PARAMETER                     8437
+#define ERROR_DS_DRA_BUSY                                  8438
+#define ERROR_DS_DRA_BAD_DN                                8439
+#define ERROR_DS_DRA_BAD_NC                                8440
+#define ERROR_DS_DRA_DN_EXISTS                             8441
+#define ERROR_DS_DRA_INTERNAL_ERROR                        8442
+#define ERROR_DS_DRA_INCONSISTENT_DIT                      8443
+#define ERROR_DS_DRA_CONNECTION_FAILED                     8444
+#define ERROR_DS_DRA_BAD_INSTANCE_TYPE                     8445
+#define ERROR_DS_DRA_OUT_OF_MEM                            8446
+#define ERROR_DS_DRA_MAIL_PROBLEM                          8447
+#define ERROR_DS_DRA_REF_ALREADY_EXISTS                    8448
+#define ERROR_DS_DRA_REF_NOT_FOUND                         8449
+#define ERROR_DS_DRA_OBJ_IS_REP_SOURCE                     8450
+#define ERROR_DS_DRA_DB_ERROR                              8451
+#define ERROR_DS_DRA_NO_REPLICA                            8452
+#define ERROR_DS_DRA_ACCESS_DENIED                         8453
+#define ERROR_DS_DRA_NOT_SUPPORTED                         8454
+#define ERROR_DS_DRA_RPC_CANCELLED                         8455
+#define ERROR_DS_DRA_SOURCE_DISABLED                       8456
+#define ERROR_DS_DRA_SINK_DISABLED                         8457
+#define ERROR_DS_DRA_NAME_COLLISION                        8458
+#define ERROR_DS_DRA_SOURCE_REINSTALLED                    8459
+#define ERROR_DS_DRA_MISSING_PARENT                        8460
+#define ERROR_DS_DRA_PREEMPTED                             8461
+#define ERROR_DS_DRA_ABANDON_SYNC                          8462
+#define ERROR_DS_DRA_SHUTDOWN                              8463
+#define ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET              8464
+#define ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA             8465
+#define ERROR_DS_DRA_EXTN_CONNECTION_FAILED                8466
+#define ERROR_DS_INSTALL_SCHEMA_MISMATCH                   8467
+#define ERROR_DS_DUP_LINK_ID                               8468
+#define ERROR_DS_NAME_ERROR_RESOLVING                      8469
+#define ERROR_DS_NAME_ERROR_NOT_FOUND                      8470
+#define ERROR_DS_NAME_ERROR_NOT_UNIQUE                     8471
+#define ERROR_DS_NAME_ERROR_NO_MAPPING                     8472
+#define ERROR_DS_NAME_ERROR_DOMAIN_ONLY                    8473
+#define ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING         8474
+#define ERROR_DS_CONSTRUCTED_ATT_MOD                       8475
+#define ERROR_DS_WRONG_OM_OBJ_CLASS                        8476
+#define ERROR_DS_DRA_REPL_PENDING                          8477
+#define ERROR_DS_DS_REQUIRED                               8478
+#define ERROR_DS_INVALID_LDAP_DISPLAY_NAME                 8479
+#define ERROR_DS_NON_BASE_SEARCH                           8480
+#define ERROR_DS_CANT_RETRIEVE_ATTS                        8481
+#define ERROR_DS_BACKLINK_WITHOUT_LINK                     8482
+#define ERROR_DS_EPOCH_MISMATCH                            8483
+#define ERROR_DS_SRC_NAME_MISMATCH                         8484
+#define ERROR_DS_SRC_AND_DST_NC_IDENTICAL                  8485
+#define ERROR_DS_DST_NC_MISMATCH                           8486
+#define ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC                8487
+#define ERROR_DS_SRC_GUID_MISMATCH                         8488
+#define ERROR_DS_CANT_MOVE_DELETED_OBJECT                  8489
+#define ERROR_DS_PDC_OPERATION_IN_PROGRESS                 8490
+#define ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD                 8491
+#define ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION               8492
+#define ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS           8493
+#define ERROR_DS_NC_MUST_HAVE_NC_PARENT                    8494
+#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE                 8495
+#define ERROR_DS_DST_DOMAIN_NOT_NATIVE                     8496
+#define ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER          8497
+#define ERROR_DS_CANT_MOVE_ACCOUNT_GROUP                   8498
+#define ERROR_DS_CANT_MOVE_RESOURCE_GROUP                  8499
+#define ERROR_DS_INVALID_SEARCH_FLAG                       8500
+#define ERROR_DS_NO_TREE_DELETE_ABOVE_NC                   8501
+#define ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE              8502
+#define ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE  8503
+#define ERROR_DS_SAM_INIT_FAILURE                          8504
+#define ERROR_DS_SENSITIVE_GROUP_VIOLATION                 8505
+#define ERROR_DS_CANT_MOD_PRIMARYGROUPID                   8506
+#define ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD                   8507
+#define ERROR_DS_NONSAFE_SCHEMA_CHANGE                     8508
+#define ERROR_DS_SCHEMA_UPDATE_DISALLOWED                  8509
+#define ERROR_DS_CANT_CREATE_UNDER_SCHEMA                  8510
+#define ERROR_DS_INSTALL_NO_SRC_SCH_VERSION                8511
+#define ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE         8512
+#define ERROR_DS_INVALID_GROUP_TYPE                        8513
+#define ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN        8514
+#define ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN         8515
+#define ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER             8516
+#define ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER         8517
+#define ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER          8518
+#define ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER       8519
+#define ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER  8520
+#define ERROR_DS_HAVE_PRIMARY_MEMBERS                      8521
+#define ERROR_DS_STRING_SD_CONVERSION_FAILED               8522
+#define ERROR_DS_NAMING_MASTER_GC                          8523
+#define ERROR_DS_LOOKUP_FAILURE                            8524
+#define ERROR_DS_COULDNT_UPDATE_SPNS                       8525
+#define ERROR_DS_CANT_RETRIEVE_SD                          8526
+#define ERROR_DS_KEY_NOT_UNIQUE                            8527
+#define ERROR_DS_WRONG_LINKED_ATT_SYNTAX                   8528
+#define ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD                 8529
+#define ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY                   8530
+#define ERROR_DS_CANT_START                                8531
+#define ERROR_DS_INIT_FAILURE                              8532
+#define ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION              8533
+#define ERROR_DS_SOURCE_DOMAIN_IN_FOREST                   8534
+#define ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST          8535
+#define ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED          8536
+#define ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN               8537
+#define ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER                 8538
+#define ERROR_DS_SRC_SID_EXISTS_IN_FOREST                  8539
+#define ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH         8540
+#define ERROR_SAM_INIT_FAILURE                             8541
+#define ERROR_DS_DRA_SCHEMA_INFO_SHIP                      8542
+#define ERROR_DS_DRA_SCHEMA_CONFLICT                       8543
+#define ERROR_DS_DRA_EARLIER_SCHEMA_CONLICT                8544
+#define ERROR_DS_DRA_OBJ_NC_MISMATCH                       8545
+#define ERROR_DS_NC_STILL_HAS_DSAS                         8546
+#define ERROR_DS_GC_REQUIRED                               8547
+#define ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY                8548
+#define ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS                8549
+#define ERROR_DS_CANT_ADD_TO_GC                            8550
+#define ERROR_DS_NO_CHECKPOINT_WITH_PDC                    8551
+#define ERROR_DS_SOURCE_AUDITING_NOT_ENABLED               8552
+#define ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC               8553
+#define ERROR_DS_INVALID_NAME_FOR_SPN                      8554
+#define ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS              8555
+#define ERROR_DS_UNICODEPWD_NOT_IN_QUOTES                  8556
+#define ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED            8557
+#define ERROR_DS_MUST_BE_RUN_ON_DST_DC                     8558
+#define ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER             8559
+#define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ             8560
+#define ERROR_DS_INIT_FAILURE_CONSOLE                      8561
+#define ERROR_DS_SAM_INIT_FAILURE_CONSOLE                  8562
+#define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4            8572
+#define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER             8578
+#define DNS_ERROR_RCODE_FORMAT_ERROR                       9001
+#define DNS_ERROR_RCODE_SERVER_FAILURE                     9002
+#define DNS_ERROR_RCODE_NAME_ERROR                         9003
+#define DNS_ERROR_RCODE_NOT_IMPLEMENTED                    9004
+#define DNS_ERROR_RCODE_REFUSED                            9005
+#define DNS_ERROR_RCODE_YXDOMAIN                           9006
+#define DNS_ERROR_RCODE_YXRRSET                            9007
+#define DNS_ERROR_RCODE_NXRRSET                            9008
+#define DNS_ERROR_RCODE_NOTAUTH                            9009
+#define DNS_ERROR_RCODE_NOTZONE                            9010
+#define DNS_ERROR_RCODE_BADSIG                             9016
+#define DNS_ERROR_RCODE_BADKEY                             9017
+#define DNS_ERROR_RCODE_BADTIME                            9018
+#define DNS_INFO_NO_RECORDS                                9501
+#define DNS_ERROR_BAD_PACKET                               9502
+#define DNS_ERROR_NO_PACKET                                9503
+#define DNS_ERROR_RCODE                                    9504
+#define DNS_ERROR_UNSECURE_PACKET                          9505
+#define DNS_ERROR_INVALID_TYPE                             9551
+#define DNS_ERROR_INVALID_IP_ADDRESS                       9552
+#define DNS_ERROR_INVALID_PROPERTY                         9553
+#define DNS_ERROR_TRY_AGAIN_LATER                          9554
+#define DNS_ERROR_NOT_UNIQUE                               9555
+#define DNS_ERROR_NON_RFC_NAME                             9556
+#define DNS_STATUS_FQDN                                    9557
+#define DNS_STATUS_DOTTED_NAME                             9558
+#define DNS_STATUS_SINGLE_PART_NAME                        9559
+#define DNS_ERROR_INVALID_NAME_CHAR                        9560
+#define DNS_ERROR_NUMERIC_NAME                             9561
+#define DNS_ERROR_ZONE_DOES_NOT_EXIST                      9601
+#define DNS_ERROR_NO_ZONE_INFO                             9602
+#define DNS_ERROR_INVALID_ZONE_OPERATION                   9603
+#define DNS_ERROR_ZONE_CONFIGURATION_ERROR                 9604
+#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD                   9605
+#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS                   9606
+#define DNS_ERROR_ZONE_LOCKED                              9607
+#define DNS_ERROR_ZONE_CREATION_FAILED                     9608
+#define DNS_ERROR_ZONE_ALREADY_EXISTS                      9609
+#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS                  9610
+#define DNS_ERROR_INVALID_ZONE_TYPE                        9611
+#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP             9612
+#define DNS_ERROR_ZONE_NOT_SECONDARY                       9613
+#define DNS_ERROR_NEED_SECONDARY_ADDRESSES                 9614
+#define DNS_ERROR_WINS_INIT_FAILED                         9615
+#define DNS_ERROR_NEED_WINS_SERVERS                        9616
+#define DNS_ERROR_NBSTAT_INIT_FAILED                       9617
+#define DNS_ERROR_SOA_DELETE_INVALID                       9618
+#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE                9651
+#define DNS_ERROR_INVALID_DATAFILE_NAME                    9652
+#define DNS_ERROR_DATAFILE_OPEN_FAILURE                    9653
+#define DNS_ERROR_FILE_WRITEBACK_FAILED                    9654
+#define DNS_ERROR_DATAFILE_PARSING                         9655
+#define DNS_ERROR_RECORD_DOES_NOT_EXIST                    9701
+#define DNS_ERROR_RECORD_FORMAT                            9702
+#define DNS_ERROR_NODE_CREATION_FAILED                     9703
+#define DNS_ERROR_UNKNOWN_RECORD_TYPE                      9704
+#define DNS_ERROR_RECORD_TIMED_OUT                         9705
+#define DNS_ERROR_NAME_NOT_IN_ZONE                         9706
+#define DNS_ERROR_CNAME_LOOP                               9707
+#define DNS_ERROR_NODE_IS_CNAME                            9708
+#define DNS_ERROR_CNAME_COLLISION                          9709
+#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT                 9710
+#define DNS_ERROR_RECORD_ALREADY_EXISTS                    9711
+#define DNS_ERROR_SECONDARY_DATA                           9712
+#define DNS_ERROR_NO_CREATE_CACHE_DATA                     9713
+#define DNS_ERROR_NAME_DOES_NOT_EXIST                      9714
+#define DNS_WARNING_PTR_CREATE_FAILED                      9715
+#define DNS_WARNING_DOMAIN_UNDELETED                       9716
+#define DNS_ERROR_DS_UNAVAILABLE                           9717
+#define DNS_ERROR_DS_ZONE_ALREADY_EXISTS                   9718
+#define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE                   9719
+#define DNS_INFO_AXFR_COMPLETE                             9751
+#define DNS_ERROR_AXFR                                     9752
+#define DNS_INFO_ADDED_LOCAL_WINS                          9753
+#define DNS_STATUS_CONTINUE_NEEDED                         9801
+#define DNS_ERROR_NO_TCPIP                                 9851
+#define DNS_ERROR_NO_DNS_SERVERS                           9852
+
+/*
+ * Also defined in winsock.h.
+ *
+ * All Windows Sockets error constants are biased by WSABASEERR from
+ * the "normal"
+ */
+#define WSABASEERR                 10000
+/*
+ * Windows Sockets definitions of regular Microsoft C error constants
+ */
+#define WSAEINTR                   (WSABASEERR+4)
+#define WSAEBADF                   (WSABASEERR+9)
+#define WSAEACCES                  (WSABASEERR+13)
+#define WSAEFAULT                  (WSABASEERR+14)
+#define WSAEINVAL                  (WSABASEERR+22)
+#define WSAEMFILE                  (WSABASEERR+24)
+
+/*
+ * Windows Sockets definitions of regular Berkeley error constants
+ */
+#define WSAEWOULDBLOCK             (WSABASEERR+35)
+#define WSAEINPROGRESS             (WSABASEERR+36)
+#define WSAEALREADY                (WSABASEERR+37)
+#define WSAENOTSOCK                (WSABASEERR+38)
+#define WSAEDESTADDRREQ            (WSABASEERR+39)
+#define WSAEMSGSIZE                (WSABASEERR+40)
+#define WSAEPROTOTYPE              (WSABASEERR+41)
+#define WSAENOPROTOOPT             (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT         (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT         (WSABASEERR+44)
+#define WSAEOPNOTSUPP              (WSABASEERR+45)
+#define WSAEPFNOSUPPORT            (WSABASEERR+46)
+#define WSAEAFNOSUPPORT            (WSABASEERR+47)
+#define WSAEADDRINUSE              (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL           (WSABASEERR+49)
+#define WSAENETDOWN                (WSABASEERR+50)
+#define WSAENETUNREACH             (WSABASEERR+51)
+#define WSAENETRESET               (WSABASEERR+52)
+#define WSAECONNABORTED            (WSABASEERR+53)
+#define WSAECONNRESET              (WSABASEERR+54)
+#define WSAENOBUFS                 (WSABASEERR+55)
+#define WSAEISCONN                 (WSABASEERR+56)
+#define WSAENOTCONN                (WSABASEERR+57)
+#define WSAESHUTDOWN               (WSABASEERR+58)
+#define WSAETOOMANYREFS            (WSABASEERR+59)
+#define WSAETIMEDOUT               (WSABASEERR+60)
+#define WSAECONNREFUSED            (WSABASEERR+61)
+#define WSAELOOP                   (WSABASEERR+62)
+#define WSAENAMETOOLONG            (WSABASEERR+63)
+#define WSAEHOSTDOWN               (WSABASEERR+64)
+#define WSAEHOSTUNREACH            (WSABASEERR+65)
+#define WSAENOTEMPTY               (WSABASEERR+66)
+#define WSAEPROCLIM                (WSABASEERR+67)
+#define WSAEUSERS                  (WSABASEERR+68)
+#define WSAEDQUOT                  (WSABASEERR+69)
+#define WSAESTALE                  (WSABASEERR+70)
+#define WSAEREMOTE                 (WSABASEERR+71)
+
+/*
+ * Extended Windows Sockets error constant definitions
+ */
+#define WSASYSNOTREADY             (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED         (WSABASEERR+92)
+#define WSANOTINITIALISED          (WSABASEERR+93)
+#define WSAEDISCON                 (WSABASEERR+101)
+#define WSAENOMORE                 (WSABASEERR+102)
+#define WSAECANCELLED              (WSABASEERR+103)
+#define WSAEINVALIDPROCTABLE       (WSABASEERR+104)
+#define WSAEINVALIDPROVIDER        (WSABASEERR+105)
+#define WSAEPROVIDERFAILEDINIT     (WSABASEERR+106)
+#define WSASYSCALLFAILURE          (WSABASEERR+107)
+#define WSASERVICE_NOT_FOUND       (WSABASEERR+108)
+#define WSATYPE_NOT_FOUND          (WSABASEERR+109)
+#define WSA_E_NO_MORE              (WSABASEERR+110)
+#define WSA_E_CANCELLED            (WSABASEERR+111)
+#define WSAEREFUSED                (WSABASEERR+112)
+
+
+#define ERROR_SXS_SECTION_NOT_FOUND                        14000
+#define ERROR_SXS_CANT_GEN_ACTCTX                          14001
+#define ERROR_SXS_INVALID_ACTCTXDATA_FORMAT                14002
+#define ERROR_SXS_ASSEMBLY_NOT_FOUND                       14003
+#define ERROR_SXS_MANIFEST_FORMAT_ERROR                    14004
+#define ERROR_SXS_MANIFEST_PARSE_ERROR                     14005
+#define ERROR_SXS_ACTIVATION_CONTEXT_DISABLED              14006
+#define ERROR_SXS_KEY_NOT_FOUND                            14007
+#define ERROR_SXS_VERSION_CONFLICT                         14008
+#define ERROR_SXS_WRONG_SECTION_TYPE                       14009
+#define ERROR_SXS_THREAD_QUERIES_DISABLED                  14010
+#define ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET              14011
+#define ERROR_SXS_UNKNOWN_ENCODING_GROUP                   14012
+#define ERROR_SXS_UNKNOWN_ENCODING                         14013
+#define ERROR_SXS_INVALID_XML_NAMESPACE_URI                14014
+#define ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED   14015
+#define ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED   14016
+#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE      14017
+#define ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE       14018
+#define ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE       14019
+#define ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT    14020
+#define ERROR_SXS_DUPLICATE_DLL_NAME                       14021
+#define ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME               14022
+#define ERROR_SXS_DUPLICATE_CLSID                          14023
+#define ERROR_SXS_DUPLICATE_IID                            14024
+#define ERROR_SXS_DUPLICATE_TLBID                          14025
+#define ERROR_SXS_DUPLICATE_PROGID                         14026
+#define ERROR_SXS_DUPLICATE_ASSEMBLY_NAME                  14027
+#define ERROR_SXS_FILE_HASH_MISMATCH                       14028
+#define ERROR_SXS_POLICY_PARSE_ERROR                       14029
+#define ERROR_SXS_PROTECTION_RECOVERY_FAILED               14074
+#define ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT          14075
+#define ERROR_SXS_PROTECTION_CATALOG_NOT_VALID             14076
+#define ERROR_SXS_UNTRANSLATABLE_HRESULT                   14077
+#define ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING          14078
+#define ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE      14079
+#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 14080
+#define ERROR_SXS_ASSEMBLY_MISSING                         14081
+#define ERROR_SXS_CORRUPT_ACTIVATION_STACK                 14082
+#define ERROR_SXS_CORRUPTION                               14083
+#define ERROR_SXS_EARLY_DEACTIVATION                       14084
+#define ERROR_SXS_INVALID_DEACTIVATION                     14085
+#define ERROR_SXS_MULTIPLE_DEACTIVATION                    14086
+#define ERROR_SXS_PROCESS_TERMINATION_REQUESTED            14087
+#define ERROR_SXS_RELEASE_ACTIVATION_CONTEXT               14088
+#define ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY  14089
+#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE         14090
+#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME          14091
+#define ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE             14092
+#define ERROR_SXS_IDENTITY_PARSE_ERROR                     14093
+#define ERROR_SXS_IDENTITY_PARSE_ERROR                     14093
+#define ERROR_MALFORMED_SUBSTITUTION_STRING                14094
+#define ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN               14095
+#define ERROR_UNMAPPED_SUBSTITUTION_STRING                 14096
+#define ERROR_SXS_ASSEMBLY_NOT_LOCKED                      14097
+#define ERROR_SXS_COMPONENT_STORE_CORRUPT                  14098
+#define ERROR_ADVANCED_INSTALLER_FAILED                    14099
+#define ERROR_XML_ENCODING_MISMATCH                        14100
+#define ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT     14101
+#define ERROR_SXS_IDENTITIES_DIFFERENT                     14102
+#define ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT             14103
+#define ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY                14104
+#define ERROR_SXS_MANIFEST_TOO_BIG                         14105
+#define ERROR_SXS_SETTING_NOT_REGISTERED                   14106
+#define ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE           14107
+#define ERROR_SMI_PRIMITIVE_INSTALLER_FAILED               14108
+#define ERROR_GENERIC_COMMAND_FAILED                       14109
+#define ERROR_SXS_FILE_HASH_MISSING                        14110
+#define ERROR_MUI_FILE_NOT_FOUND                           15100
+#define ERROR_MUI_INVALID_FILE                             15101
+#define ERROR_MUI_INVALID_RC_CONFIG                        15102
+#define ERROR_MUI_INVALID_LOCALE_NAME                      15103
+#define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME            15104
+#define ERROR_MUI_FILE_NOT_LOADED                          15105
+#define ERROR_RESOURCE_ENUM_USER_STOP                      15106
+#define ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED        15107
+#define ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME         15108
+#define ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE   15110
+#define ERROR_MRM_INVALID_PRICONFIG                        15111
+#define ERROR_MRM_INVALID_FILE_TYPE                        15112
+#define ERROR_MRM_UNKNOWN_QUALIFIER                        15113
+#define ERROR_MRM_INVALID_QUALIFIER_VALUE                  15114
+#define ERROR_MRM_NO_CANDIDATE                             15115
+#define ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE            15116
+#define ERROR_MRM_RESOURCE_TYPE_MISMATCH                   15117
+#define ERROR_MRM_DUPLICATE_MAP_NAME                       15118
+#define ERROR_MRM_DUPLICATE_ENTRY                          15119
+#define ERROR_MRM_INVALID_RESOURCE_IDENTIFIER              15120
+#define ERROR_MRM_FILEPATH_TOO_LONG                        15121
+#define ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE               15122
+#define ERROR_MRM_INVALID_PRI_FILE                         15126
+#define ERROR_MRM_NAMED_RESOURCE_NOT_FOUND                 15127
+#define ERROR_MRM_MAP_NOT_FOUND                            15135
+#define ERROR_MRM_UNSUPPORTED_PROFILE_TYPE                 15136
+#define ERROR_MRM_INVALID_QUALIFIER_OPERATOR               15137
+#define ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE            15138
+#define ERROR_MRM_AUTOMERGE_ENABLED                        15139
+#define ERROR_MRM_TOO_MANY_RESOURCES                       15140
+#define ERROR_MCA_INVALID_CAPABILITIES_STRING              15200
+#define ERROR_MCA_INVALID_VCP_VERSION                      15201
+#define ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION      15202
+#define ERROR_MCA_MCCS_VERSION_MISMATCH                    15203
+#define ERROR_MCA_UNSUPPORTED_MCCS_VERSION                 15204
+#define ERROR_MCA_INTERNAL_ERROR                           15205
+#define ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED         15206
+#define ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE            15207
+#define ERROR_AMBIGUOUS_SYSTEM_DEVICE                      15250
+#define ERROR_SYSTEM_DEVICE_NOT_FOUND                      15299
+#define ERROR_HASH_NOT_SUPPORTED                           15300
+#define ERROR_HASH_NOT_PRESENT                             15301
+#define ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED         15321
+#define ERROR_GPIO_CLIENT_INFORMATION_INVALID              15322
+#define ERROR_GPIO_VERSION_NOT_SUPPORTED                   15323
+#define ERROR_GPIO_INVALID_REGISTRATION_PACKET             15324
+#define ERROR_GPIO_OPERATION_DENIED                        15325
+#define ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE               15326
+#define ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED              15327
+#define ERROR_CANNOT_SWITCH_RUNLEVEL                       15400
+#define ERROR_INVALID_RUNLEVEL_SETTING                     15401
+#define ERROR_RUNLEVEL_SWITCH_TIMEOUT                      15402
+#define ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT                15403
+#define ERROR_RUNLEVEL_SWITCH_IN_PROGRESS                  15404
+#define ERROR_SERVICES_FAILED_AUTOSTART                    15405
+#define ERROR_COM_TASK_STOP_PENDING                        15501
+#define ERROR_INSTALL_OPEN_PACKAGE_FAILED                  15600
+#define ERROR_INSTALL_PACKAGE_NOT_FOUND                    15601
+#define ERROR_INSTALL_INVALID_PACKAGE                      15602
+#define ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED            15603
+#define ERROR_INSTALL_OUT_OF_DISK_SPACE                    15604
+#define ERROR_INSTALL_NETWORK_FAILURE                      15605
+#define ERROR_INSTALL_REGISTRATION_FAILURE                 15606
+#define ERROR_INSTALL_DEREGISTRATION_FAILURE               15607
+#define ERROR_INSTALL_CANCEL                               15608
+#define ERROR_INSTALL_FAILED                               15609
+#define ERROR_REMOVE_FAILED                                15610
+#define ERROR_PACKAGE_ALREADY_EXISTS                       15611
+#define ERROR_NEEDS_REMEDIATION                            15612
+#define ERROR_INSTALL_PREREQUISITE_FAILED                  15613
+#define ERROR_PACKAGE_REPOSITORY_CORRUPTED                 15614
+#define ERROR_INSTALL_POLICY_FAILURE                       15615
+#define ERROR_PACKAGE_UPDATING                             15616
+#define ERROR_DEPLOYMENT_BLOCKED_BY_POLICY                 15617
+#define ERROR_PACKAGES_IN_USE                              15618
+#define ERROR_RECOVERY_FILE_CORRUPT                        15619
+#define ERROR_INVALID_STAGED_SIGNATURE                     15620
+#define ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED 15621
+#define ERROR_INSTALL_PACKAGE_DOWNGRADE                    15622
+#define ERROR_SYSTEM_NEEDS_REMEDIATION                     15623
+#define ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN              15624
+#define ERROR_RESILIENCY_FILE_CORRUPT                      15625
+#define ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING         15626
+#define APPMODEL_ERROR_NO_PACKAGE                          15700
+#define APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT             15701
+#define APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT            15702
+#define APPMODEL_ERROR_NO_APPLICATION                      15703
+
+/* HRESULT values for OLE, SHELL and other Interface stuff */
+/* the codes 4000-40ff are reserved for OLE */
+#undef NOERROR  /* arpa/nameser_compat.h defines this */
+
+#define E_NOT_SUFFICIENT_BUFFER                            HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
+
+#ifdef RC_INVOKED
+#define _HRESULT_TYPEDEF_(x) (x)
+#else
+#define _HRESULT_TYPEDEF_(x) ((HRESULT)x)
+#endif
+
+#define NOERROR                                            _HRESULT_TYPEDEF_(0)
+#define S_OK                                               _HRESULT_TYPEDEF_(0)
+#define SEC_E_OK                                           _HRESULT_TYPEDEF_(0)
+#define S_FALSE                                            _HRESULT_TYPEDEF_(1)
+
+#define E_PENDING                                          _HRESULT_TYPEDEF_(0x8000000A)
+
+
+#define E_NOTIMPL                                          _HRESULT_TYPEDEF_(0x80004001)
+#define E_NOINTERFACE                                      _HRESULT_TYPEDEF_(0x80004002)
+#define E_POINTER                                          _HRESULT_TYPEDEF_(0x80004003)
+#define E_ABORT                                            _HRESULT_TYPEDEF_(0x80004004)
+#define E_FAIL                                             _HRESULT_TYPEDEF_(0x80004005)
+
+
+#define CO_E_INIT_TLS                                      _HRESULT_TYPEDEF_(0x80004006)
+#define CO_E_INIT_SHARED_ALLOCATOR                         _HRESULT_TYPEDEF_(0x80004007)
+#define CO_E_INIT_MEMORY_ALLOCATOR                         _HRESULT_TYPEDEF_(0x80004008)
+#define CO_E_INIT_CLASS_CACHE                              _HRESULT_TYPEDEF_(0x80004009)
+#define CO_E_INIT_RPC_CHANNEL                              _HRESULT_TYPEDEF_(0x8000400A)
+#define CO_E_INIT_TLS_SET_CHANNEL_CONTROL                  _HRESULT_TYPEDEF_(0x8000400B)
+#define CO_E_INIT_TLS_CHANNEL_CONTROL                      _HRESULT_TYPEDEF_(0x8000400C)
+#define CO_E_INIT_UNACCEPTED_USER_ALLOCATOR                _HRESULT_TYPEDEF_(0x8000400D)
+#define CO_E_INIT_SCM_MUTEX_EXISTS                         _HRESULT_TYPEDEF_(0x8000400E)
+#define CO_E_INIT_SCM_FILE_MAPPING_EXISTS                  _HRESULT_TYPEDEF_(0x8000400F)
+#define CO_E_INIT_SCM_MAP_VIEW_OF_FILE                     _HRESULT_TYPEDEF_(0x80004010)
+#define CO_E_INIT_SCM_EXEC_FAILURE                         _HRESULT_TYPEDEF_(0x80004011)
+#define CO_E_INIT_ONLY_SINGLE_THREADED                     _HRESULT_TYPEDEF_(0x80004012)
+#define CO_E_CANT_REMOTE                                   _HRESULT_TYPEDEF_(0x80004013)
+#define CO_E_BAD_SERVER_NAME                               _HRESULT_TYPEDEF_(0x80004014)
+#define CO_E_WRONG_SERVER_IDENTITY                         _HRESULT_TYPEDEF_(0x80004015)
+#define CO_E_OLE1DDE_DISABLED                              _HRESULT_TYPEDEF_(0x80004016)
+#define CO_E_RUNAS_SYNTAX                                  _HRESULT_TYPEDEF_(0x80004017)
+#define CO_E_CREATEPROCESS_FAILURE                         _HRESULT_TYPEDEF_(0x80004018)
+#define CO_E_RUNAS_CREATEPROCESS_FAILURE                   _HRESULT_TYPEDEF_(0x80004019)
+#define CO_E_RUNAS_LOGON_FAILURE                           _HRESULT_TYPEDEF_(0x8000401A)
+#define CO_E_LAUNCH_PERMISSION_DENIED                      _HRESULT_TYPEDEF_(0x8000401B)
+#define CO_E_START_SERVICE_FAILURE                         _HRESULT_TYPEDEF_(0x8000401C)
+#define CO_E_REMOTE_COMMUNICATION_FAILURE                  _HRESULT_TYPEDEF_(0x8000401D)
+#define CO_E_SERVER_START_TIMEOUT                          _HRESULT_TYPEDEF_(0x8000401E)
+#define CO_E_CLSREG_INCONSISTENT                           _HRESULT_TYPEDEF_(0x8000401F)
+#define CO_E_IIDREG_INCONSISTENT                           _HRESULT_TYPEDEF_(0x80004020)
+#define CO_E_NOT_SUPPORTED                                 _HRESULT_TYPEDEF_(0x80004021)
+#define CO_E_RELOAD_DLL                                    _HRESULT_TYPEDEF_(0x80004022)
+#define CO_E_MSI_ERROR                                     _HRESULT_TYPEDEF_(0x80004023)
+#define CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT      _HRESULT_TYPEDEF_(0x80004024)
+#define CO_E_SERVER_PAUSED                                 _HRESULT_TYPEDEF_(0x80004025)
+#define CO_E_SERVER_NOT_PAUSED                             _HRESULT_TYPEDEF_(0x80004026)
+#define CO_E_CLASS_DISABLED                                _HRESULT_TYPEDEF_(0x80004027)
+#define CO_E_CLRNOTAVAILABLE                               _HRESULT_TYPEDEF_(0x80004028)
+#define CO_E_ASYNC_WORK_REJECTED                           _HRESULT_TYPEDEF_(0x80004029)
+#define CO_E_SERVER_INIT_TIMEOUT                           _HRESULT_TYPEDEF_(0x8000402A)
+#define CO_E_NO_SECCTX_IN_ACTIVATE                         _HRESULT_TYPEDEF_(0x8000402B)
+#define CO_E_TRACKER_CONFIG                                _HRESULT_TYPEDEF_(0x80004030)
+#define CO_E_THREADPOOL_CONFIG                             _HRESULT_TYPEDEF_(0x80004031)
+#define CO_E_SXS_CONFIG                                    _HRESULT_TYPEDEF_(0x80004032)
+#define CO_E_MALFORMED_SPN                                 _HRESULT_TYPEDEF_(0x80004033)
+
+#define E_UNEXPECTED                                       _HRESULT_TYPEDEF_(0x8000FFFF)
+
+#define RPC_E_CALL_REJECTED                                _HRESULT_TYPEDEF_(0x80010001)
+#define RPC_E_CALL_CANCELED                                _HRESULT_TYPEDEF_(0x80010002)
+#define RPC_E_CANTPOST_INSENDCALL                          _HRESULT_TYPEDEF_(0x80010003)
+#define RPC_E_CANTCALLOUT_INASYNCCALL                      _HRESULT_TYPEDEF_(0x80010004)
+#define RPC_E_CANTCALLOUT_INEXTERNALCALL                   _HRESULT_TYPEDEF_(0x80010005)
+#define RPC_E_CONNECTION_TERMINATED                        _HRESULT_TYPEDEF_(0x80010006)
+#define RPC_E_SERVER_DIED                                  _HRESULT_TYPEDEF_(0x80010007)
+#define RPC_E_CLIENT_DIED                                  _HRESULT_TYPEDEF_(0x80010008)
+#define RPC_E_INVALID_DATAPACKET                           _HRESULT_TYPEDEF_(0x80010009)
+#define RPC_E_CANTTRANSMIT_CALL                            _HRESULT_TYPEDEF_(0x8001000A)
+#define RPC_E_CLIENT_CANTMARSHAL_DATA                      _HRESULT_TYPEDEF_(0x8001000B)
+#define RPC_E_CLIENT_CANTUNMARSHAL_DATA                    _HRESULT_TYPEDEF_(0x8001000C)
+#define RPC_E_SERVER_CANTMARSHAL_DATA                      _HRESULT_TYPEDEF_(0x8001000D)
+#define RPC_E_SERVER_CANTUNMARSHAL_DATA                    _HRESULT_TYPEDEF_(0x8001000E)
+#define RPC_E_INVALID_DATA                                 _HRESULT_TYPEDEF_(0x8001000F)
+#define RPC_E_INVALID_PARAMETER                            _HRESULT_TYPEDEF_(0x80010010)
+#define RPC_E_CANTCALLOUT_AGAIN                            _HRESULT_TYPEDEF_(0x80010011)
+#define RPC_E_SERVER_DIED_DNE                              _HRESULT_TYPEDEF_(0x80010012)
+#define RPC_E_SYS_CALL_FAILED                              _HRESULT_TYPEDEF_(0x80010100)
+#define RPC_E_OUT_OF_RESOURCES                             _HRESULT_TYPEDEF_(0x80010101)
+#define RPC_E_ATTEMPTED_MULTITHREAD                        _HRESULT_TYPEDEF_(0x80010102)
+#define RPC_E_NOT_REGISTERED                               _HRESULT_TYPEDEF_(0x80010103)
+#define RPC_E_FAULT                                        _HRESULT_TYPEDEF_(0x80010104)
+#define RPC_E_SERVERFAULT                                  _HRESULT_TYPEDEF_(0x80010105)
+#define RPC_E_CHANGED_MODE                                 _HRESULT_TYPEDEF_(0x80010106)
+#define RPC_E_INVALIDMETHOD                                _HRESULT_TYPEDEF_(0x80010107)
+#define RPC_E_DISCONNECTED                                 _HRESULT_TYPEDEF_(0x80010108)
+#define RPC_E_RETRY                                        _HRESULT_TYPEDEF_(0x80010109)
+#define RPC_E_SERVERCALL_RETRYLATER                        _HRESULT_TYPEDEF_(0x8001010A)
+#define RPC_E_SERVERCALL_REJECTED                          _HRESULT_TYPEDEF_(0x8001010B)
+#define RPC_E_INVALID_CALLDATA                             _HRESULT_TYPEDEF_(0x8001010C)
+#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL                  _HRESULT_TYPEDEF_(0x8001010D)
+#define RPC_E_WRONG_THREAD                                 _HRESULT_TYPEDEF_(0x8001010E)
+#define RPC_E_THREAD_NOT_INIT                              _HRESULT_TYPEDEF_(0x8001010F)
+#define RPC_E_VERSION_MISMATCH                             _HRESULT_TYPEDEF_(0x80010110)
+#define RPC_E_INVALID_HEADER                               _HRESULT_TYPEDEF_(0x80010111)
+#define RPC_E_INVALID_EXTENSION                            _HRESULT_TYPEDEF_(0x80010112)
+#define RPC_E_INVALID_IPID                                 _HRESULT_TYPEDEF_(0x80010113)
+#define RPC_E_INVALID_OBJECT                               _HRESULT_TYPEDEF_(0x80010114)
+#define RPC_S_CALLPENDING                                  _HRESULT_TYPEDEF_(0x80010115)
+#define RPC_S_WAITONTIMER                                  _HRESULT_TYPEDEF_(0x80010116)
+#define RPC_E_CALL_COMPLETE                                _HRESULT_TYPEDEF_(0x80010117)
+#define RPC_E_UNSECURE_CALL                                _HRESULT_TYPEDEF_(0x80010118)
+#define RPC_E_TOO_LATE                                     _HRESULT_TYPEDEF_(0x80010119)
+#define RPC_E_NO_GOOD_SECURITY_PACKAGES                    _HRESULT_TYPEDEF_(0x8001011A)
+#define RPC_E_ACCESS_DENIED                                _HRESULT_TYPEDEF_(0x8001011B)
+#define RPC_E_REMOTE_DISABLED                              _HRESULT_TYPEDEF_(0x8001011C)
+#define RPC_E_INVALID_OBJREF                               _HRESULT_TYPEDEF_(0x8001011D)
+#define RPC_E_NO_CONTEXT                                   _HRESULT_TYPEDEF_(0x8001011E)
+#define RPC_E_TIMEOUT                                      _HRESULT_TYPEDEF_(0x8001011F)
+#define RPC_E_NO_SYNC                                      _HRESULT_TYPEDEF_(0x80010120)
+#define RPC_E_UNEXPECTED                                   _HRESULT_TYPEDEF_(0x8001FFFF)
+
+#define DISP_E_UNKNOWNINTERFACE                            _HRESULT_TYPEDEF_(0x80020001)
+#define DISP_E_MEMBERNOTFOUND                              _HRESULT_TYPEDEF_(0x80020003)
+#define DISP_E_PARAMNOTFOUND                               _HRESULT_TYPEDEF_(0x80020004)
+#define DISP_E_TYPEMISMATCH                                _HRESULT_TYPEDEF_(0x80020005)
+#define DISP_E_UNKNOWNNAME                                 _HRESULT_TYPEDEF_(0x80020006)
+#define DISP_E_NONAMEDARGS                                 _HRESULT_TYPEDEF_(0x80020007)
+#define DISP_E_BADVARTYPE                                  _HRESULT_TYPEDEF_(0x80020008)
+#define DISP_E_EXCEPTION                                   _HRESULT_TYPEDEF_(0x80020009)
+#define DISP_E_OVERFLOW                                    _HRESULT_TYPEDEF_(0x8002000A)
+#define DISP_E_BADINDEX                                    _HRESULT_TYPEDEF_(0x8002000B)
+#define DISP_E_UNKNOWNLCID                                 _HRESULT_TYPEDEF_(0x8002000C)
+#define DISP_E_ARRAYISLOCKED                               _HRESULT_TYPEDEF_(0x8002000D)
+#define DISP_E_BADPARAMCOUNT                               _HRESULT_TYPEDEF_(0x8002000E)
+#define DISP_E_PARAMNOTOPTIONAL                            _HRESULT_TYPEDEF_(0x8002000F)
+#define DISP_E_BADCALLEE                                   _HRESULT_TYPEDEF_(0x80020010)
+#define DISP_E_NOTACOLLECTION                              _HRESULT_TYPEDEF_(0x80020011)
+#define DISP_E_DIVBYZERO                                   _HRESULT_TYPEDEF_(0x80020012)
+
+#define TYPE_E_BUFFERTOOSMALL                              _HRESULT_TYPEDEF_(0x80028016)
+#define TYPE_E_FIELDNOTFOUND                               _HRESULT_TYPEDEF_(0x80028017)
+#define TYPE_E_INVDATAREAD                                 _HRESULT_TYPEDEF_(0x80028018)
+#define TYPE_E_UNSUPFORMAT                                 _HRESULT_TYPEDEF_(0x80028019)
+#define TYPE_E_REGISTRYACCESS                              _HRESULT_TYPEDEF_(0x8002801C)
+#define TYPE_E_LIBNOTREGISTERED                            _HRESULT_TYPEDEF_(0x8002801D)
+#define TYPE_E_UNDEFINEDTYPE                               _HRESULT_TYPEDEF_(0x80028027)
+#define TYPE_E_QUALIFIEDNAMEDISALLOWED                     _HRESULT_TYPEDEF_(0x80028028)
+#define TYPE_E_INVALIDSTATE                                _HRESULT_TYPEDEF_(0x80028029)
+#define TYPE_E_WRONGTYPEKIND                               _HRESULT_TYPEDEF_(0x8002802A)
+#define TYPE_E_ELEMENTNOTFOUND                             _HRESULT_TYPEDEF_(0x8002802B)
+#define TYPE_E_AMBIGUOUSNAME                               _HRESULT_TYPEDEF_(0x8002802C)
+#define TYPE_E_NAMECONFLICT                                _HRESULT_TYPEDEF_(0x8002802D)
+#define TYPE_E_UNKNOWNLCID                                 _HRESULT_TYPEDEF_(0x8002802E)
+#define TYPE_E_DLLFUNCTIONNOTFOUND                         _HRESULT_TYPEDEF_(0x8002802F)
+#define TYPE_E_BADMODULEKIND                               _HRESULT_TYPEDEF_(0x800288BD)
+#define TYPE_E_SIZETOOBIG                                  _HRESULT_TYPEDEF_(0x800288C5)
+#define TYPE_E_DUPLICATEID                                 _HRESULT_TYPEDEF_(0x800288C6)
+#define TYPE_E_INVALIDID                                   _HRESULT_TYPEDEF_(0x800288CF)
+#define TYPE_E_TYPEMISMATCH                                _HRESULT_TYPEDEF_(0x80028CA0)
+#define TYPE_E_OUTOFBOUNDS                                 _HRESULT_TYPEDEF_(0x80028CA1)
+#define TYPE_E_IOERROR                                     _HRESULT_TYPEDEF_(0x80028CA2)
+#define TYPE_E_CANTCREATETMPFILE                           _HRESULT_TYPEDEF_(0x80028CA3)
+#define TYPE_E_CANTLOADLIBRARY                             _HRESULT_TYPEDEF_(0x80029C4A)
+#define TYPE_E_INCONSISTENTPROPFUNCS                       _HRESULT_TYPEDEF_(0x80029C83)
+#define TYPE_E_CIRCULARTYPE                                _HRESULT_TYPEDEF_(0x80029C84)
+
+#define STG_S_CONVERTED                                    _HRESULT_TYPEDEF_(0x00030200)
+#define STG_S_BLOCK                                        _HRESULT_TYPEDEF_(0x00030201)
+#define STG_S_RETRYNOW                                     _HRESULT_TYPEDEF_(0x00030202)
+#define STG_S_MONITORING                                   _HRESULT_TYPEDEF_(0x00030203)
+#define STG_S_MULTIPLEOPENS                                _HRESULT_TYPEDEF_(0x00030204)
+#define STG_S_CONSOLIDATIONFAILED                          _HRESULT_TYPEDEF_(0x00030205)
+#define STG_S_CANNOTCONSOLIDATE                            _HRESULT_TYPEDEF_(0x00030206)
+
+#define STG_E_INVALIDFUNCTION                              _HRESULT_TYPEDEF_(0x80030001)
+#define STG_E_FILENOTFOUND                                 _HRESULT_TYPEDEF_(0x80030002)
+#define STG_E_PATHNOTFOUND                                 _HRESULT_TYPEDEF_(0x80030003)
+#define STG_E_TOOMANYOPENFILES                             _HRESULT_TYPEDEF_(0x80030004)
+#define STG_E_ACCESSDENIED                                 _HRESULT_TYPEDEF_(0x80030005)
+#define STG_E_INVALIDHANDLE                                _HRESULT_TYPEDEF_(0x80030006)
+#define STG_E_INSUFFICIENTMEMORY                           _HRESULT_TYPEDEF_(0x80030008)
+#define STG_E_INVALIDPOINTER                               _HRESULT_TYPEDEF_(0x80030009)
+#define STG_E_NOMOREFILES                                  _HRESULT_TYPEDEF_(0x80030012)
+#define STG_E_DISKISWRITEPROTECTED                         _HRESULT_TYPEDEF_(0x80030013)
+#define STG_E_SEEKERROR                                    _HRESULT_TYPEDEF_(0x80030019)
+#define STG_E_WRITEFAULT                                   _HRESULT_TYPEDEF_(0x8003001D)
+#define STG_E_READFAULT                                    _HRESULT_TYPEDEF_(0x8003001E)
+#define STG_E_SHAREVIOLATION                               _HRESULT_TYPEDEF_(0x80030020)
+#define STG_E_LOCKVIOLATION                                _HRESULT_TYPEDEF_(0x80030021)
+#define STG_E_FILEALREADYEXISTS                            _HRESULT_TYPEDEF_(0x80030050)
+#define STG_E_INVALIDPARAMETER                             _HRESULT_TYPEDEF_(0x80030057)
+#define STG_E_MEDIUMFULL                                   _HRESULT_TYPEDEF_(0x80030070)
+#define STG_E_ABNORMALAPIEXIT                              _HRESULT_TYPEDEF_(0x800300FA)
+#define STG_E_INVALIDHEADER                                _HRESULT_TYPEDEF_(0x800300FB)
+#define STG_E_INVALIDNAME                                  _HRESULT_TYPEDEF_(0x800300FC)
+#define STG_E_UNKNOWN                                      _HRESULT_TYPEDEF_(0x800300FD)
+#define STG_E_UNIMPLEMENTEDFUNCTION                        _HRESULT_TYPEDEF_(0x800300FE)
+#define STG_E_INVALIDFLAG                                  _HRESULT_TYPEDEF_(0x800300FF)
+#define STG_E_INUSE                                        _HRESULT_TYPEDEF_(0x80030100)
+#define STG_E_NOTCURRENT                                   _HRESULT_TYPEDEF_(0x80030101)
+#define STG_E_REVERTED                                     _HRESULT_TYPEDEF_(0x80030102)
+#define STG_E_CANTSAVE                                     _HRESULT_TYPEDEF_(0x80030103)
+#define STG_E_OLDFORMAT                                    _HRESULT_TYPEDEF_(0x80030104)
+#define STG_E_OLDDLL                                       _HRESULT_TYPEDEF_(0x80030105)
+#define STG_E_SHAREREQUIRED                                _HRESULT_TYPEDEF_(0x80030106)
+#define STG_E_NOTFILEBASEDSTORAGE                          _HRESULT_TYPEDEF_(0x80030107)
+#define STG_E_EXTANTMARSHALLINGS                           _HRESULT_TYPEDEF_(0x80030108)
+#define STG_E_DOCFILECORRUPT                               _HRESULT_TYPEDEF_(0x80030109)
+
+#define STG_E_STATUS_COPY_PROTECTION_FAILURE               _HRESULT_TYPEDEF_(0x80030305)
+#define STG_E_CSS_AUTHENTICATION_FAILURE                   _HRESULT_TYPEDEF_(0x80030306)
+#define STG_E_CSS_KEY_NOT_PRESENT                          _HRESULT_TYPEDEF_(0x80030307)
+#define STG_E_CSS_KEY_NOT_ESTABLISHED                      _HRESULT_TYPEDEF_(0x80030308)
+#define STG_E_CSS_SCRAMBLED_SECTOR                         _HRESULT_TYPEDEF_(0x80030309)
+#define STG_E_CSS_REGION_MISMATCH                          _HRESULT_TYPEDEF_(0x8003030A)
+#define STG_E_RESETS_EXHAUSTED                             _HRESULT_TYPEDEF_(0x8003030B)
+
+#define OLE_S_FIRST                                        _HRESULT_TYPEDEF_(0x00040000)
+#define OLE_S_USEREG                                       _HRESULT_TYPEDEF_(0x00040000)
+#define OLE_S_STATIC                                       _HRESULT_TYPEDEF_(0x00040001)
+#define OLE_S_MAC_CLIPFORMAT                               _HRESULT_TYPEDEF_(0x00040002)
+#define OLE_S_LAST                                         _HRESULT_TYPEDEF_(0x000400FF)
+
+#define OLE_E_FIRST                                        _HRESULT_TYPEDEF_(0x80040000)
+#define OLE_E_OLEVERB                                      _HRESULT_TYPEDEF_(0x80040000)
+#define OLE_E_ADVF                                         _HRESULT_TYPEDEF_(0x80040001)
+#define OLE_E_ENUM_NOMORE                                  _HRESULT_TYPEDEF_(0x80040002)
+#define OLE_E_ADVISENOTSUPPORTED                           _HRESULT_TYPEDEF_(0x80040003)
+#define OLE_E_NOCONNECTION                                 _HRESULT_TYPEDEF_(0x80040004)
+#define OLE_E_NOTRUNNING                                   _HRESULT_TYPEDEF_(0x80040005)
+#define OLE_E_NOCACHE                                      _HRESULT_TYPEDEF_(0x80040006)
+#define OLE_E_BLANK                                        _HRESULT_TYPEDEF_(0x80040007)
+#define OLE_E_CLASSDIFF                                    _HRESULT_TYPEDEF_(0x80040008)
+#define OLE_E_CANT_GETMONIKER                              _HRESULT_TYPEDEF_(0x80040009)
+#define OLE_E_CANT_BINDTOSOURCE                            _HRESULT_TYPEDEF_(0x8004000A)
+#define OLE_E_STATIC                                       _HRESULT_TYPEDEF_(0x8004000B)
+#define OLE_E_PROMPTSAVECANCELLED                          _HRESULT_TYPEDEF_(0x8004000C)
+#define OLE_E_INVALIDRECT                                  _HRESULT_TYPEDEF_(0x8004000D)
+#define OLE_E_WRONGCOMPOBJ                                 _HRESULT_TYPEDEF_(0x8004000E)
+#define OLE_E_INVALIDHWND                                  _HRESULT_TYPEDEF_(0x8004000F)
+#define OLE_E_NOT_INPLACEACTIVE                            _HRESULT_TYPEDEF_(0x80040010)
+#define OLE_E_CANTCONVERT                                  _HRESULT_TYPEDEF_(0x80040011)
+#define OLE_E_NOSTORAGE                                    _HRESULT_TYPEDEF_(0x80040012)
+#define DV_E_FORMATETC                                     _HRESULT_TYPEDEF_(0x80040064)
+#define DV_E_DVTARGETDEVICE                                _HRESULT_TYPEDEF_(0x80040065)
+#define DV_E_STGMEDIUM                                     _HRESULT_TYPEDEF_(0x80040066)
+#define DV_E_STATDATA                                      _HRESULT_TYPEDEF_(0x80040067)
+#define DV_E_LINDEX                                        _HRESULT_TYPEDEF_(0x80040068)
+#define DV_E_TYMED                                         _HRESULT_TYPEDEF_(0x80040069)
+#define DV_E_CLIPFORMAT                                    _HRESULT_TYPEDEF_(0x8004006A)
+#define DV_E_DVASPECT                                      _HRESULT_TYPEDEF_(0x8004006B)
+#define DV_E_DVTARGETDEVICE_SIZE                           _HRESULT_TYPEDEF_(0x8004006C)
+#define DV_E_NOIVIEWOBJECT                                 _HRESULT_TYPEDEF_(0x8004006D)
+#define OLE_E_LAST                                         _HRESULT_TYPEDEF_(0x800400FF)
+
+#define DRAGDROP_S_FIRST                                   _HRESULT_TYPEDEF_(0x00040100)
+#define DRAGDROP_S_DROP                                    _HRESULT_TYPEDEF_(0x00040100)
+#define DRAGDROP_S_CANCEL                                  _HRESULT_TYPEDEF_(0x00040101)
+#define DRAGDROP_S_USEDEFAULTCURSORS                       _HRESULT_TYPEDEF_(0x00040102)
+#define DRAGDROP_S_LAST                                    _HRESULT_TYPEDEF_(0x0004010F)
+
+#define DRAGDROP_E_FIRST                                   _HRESULT_TYPEDEF_(0x80040100)
+#define DRAGDROP_E_NOTREGISTERED                           _HRESULT_TYPEDEF_(0x80040100)
+#define DRAGDROP_E_ALREADYREGISTERED                       _HRESULT_TYPEDEF_(0x80040101)
+#define DRAGDROP_E_INVALIDHWND                             _HRESULT_TYPEDEF_(0x80040102)
+#define DRAGDROP_E_LAST                                    _HRESULT_TYPEDEF_(0x8004010F)
+
+
+#define CLASSFACTORY_S_FIRST                               _HRESULT_TYPEDEF_(0x00040110)
+#define CLASSFACTORY_S_LAST                                _HRESULT_TYPEDEF_(0x0004011F)
+
+#define CLASSFACTORY_E_FIRST                               _HRESULT_TYPEDEF_(0x80040110)
+#define CLASS_E_NOAGGREGATION                              _HRESULT_TYPEDEF_(0x80040110)
+#define CLASS_E_CLASSNOTAVAILABLE                          _HRESULT_TYPEDEF_(0x80040111)
+#define CLASS_E_NOTLICENSED                                _HRESULT_TYPEDEF_(0x80040112)
+#define CLASSFACTORY_E_LAST                                _HRESULT_TYPEDEF_(0x8004011F)
+
+#define MARSHAL_S_FIRST                                    _HRESULT_TYPEDEF_(0x00040120)
+#define MARSHAL_S_LAST                                     _HRESULT_TYPEDEF_(0x0004012F)
+
+#define MARSHAL_E_FIRST                                    _HRESULT_TYPEDEF_(0x80040120)
+#define MARSHAL_E_LAST                                     _HRESULT_TYPEDEF_(0x8004012F)
+
+#define DATA_S_FIRST                                       _HRESULT_TYPEDEF_(0x00040130)
+#define DATA_S_SAMEFORMATETC                               _HRESULT_TYPEDEF_(0x00040130)
+#define DATA_S_LAST                                        _HRESULT_TYPEDEF_(0x0004013F)
+
+#define DATA_E_FIRST                                       _HRESULT_TYPEDEF_(0x80040130)
+#define DATA_E_LAST                                        _HRESULT_TYPEDEF_(0x8004013F)
+
+#define VIEW_S_FIRST                                       _HRESULT_TYPEDEF_(0x00040140)
+#define VIEW_S_ALREADY_FROZEN                              _HRESULT_TYPEDEF_(0x00040140)
+#define VIEW_S_LAST                                        _HRESULT_TYPEDEF_(0x0004014F)
+
+#define VIEW_E_FIRST                                       _HRESULT_TYPEDEF_(0x80040140)
+#define VIEW_E_DRAW                                        _HRESULT_TYPEDEF_(0x80040140)
+#define VIEW_E_LAST                                        _HRESULT_TYPEDEF_(0x8004014F)
+
+#define REGDB_S_FIRST                                      _HRESULT_TYPEDEF_(0x00040150)
+#define REGDB_S_LAST                                       _HRESULT_TYPEDEF_(0x0004015F)
+
+#define REGDB_E_FIRST                                      _HRESULT_TYPEDEF_(0x80040150)
+#define REGDB_E_READREGDB                                  _HRESULT_TYPEDEF_(0x80040150)
+#define REGDB_E_WRITEREGDB                                 _HRESULT_TYPEDEF_(0x80040151)
+#define REGDB_E_KEYMISSING                                 _HRESULT_TYPEDEF_(0x80040152)
+#define REGDB_E_INVALIDVALUE                               _HRESULT_TYPEDEF_(0x80040153)
+#define REGDB_E_CLASSNOTREG                                _HRESULT_TYPEDEF_(0x80040154)
+#define REGDB_E_IIDNOTREG                                  _HRESULT_TYPEDEF_(0x80040155)
+#define REGDB_E_LAST                                       _HRESULT_TYPEDEF_(0x8004015F)
+
+#define CAT_E_FIRST                                        _HRESULT_TYPEDEF_(0x80040160)
+#define CAT_E_CATIDNOEXIST                                 _HRESULT_TYPEDEF_(0x80040160)
+#define CAT_E_NODESCRIPTION                                _HRESULT_TYPEDEF_(0x80040161)
+#define CAT_E_LAST                                         _HRESULT_TYPEDEF_(0x80040161)
+
+#define CACHE_S_FIRST                                      _HRESULT_TYPEDEF_(0x00040170)
+#define CACHE_S_FORMATETC_NOTSUPPORTED                     _HRESULT_TYPEDEF_(0x00040170)
+#define CACHE_S_SAMECACHE                                  _HRESULT_TYPEDEF_(0x00040171)
+#define CACHE_S_SOMECACHES_NOTUPDATED                      _HRESULT_TYPEDEF_(0x00040172)
+#define CACHE_S_LAST                                       _HRESULT_TYPEDEF_(0x0004017F)
+
+#define CACHE_E_FIRST                                      _HRESULT_TYPEDEF_(0x80040170)
+#define CACHE_E_NOCACHE_UPDATED                            _HRESULT_TYPEDEF_(0x80040170)
+#define CACHE_E_LAST                                       _HRESULT_TYPEDEF_(0x8004017F)
+
+#define OLEOBJ_S_FIRST                                     _HRESULT_TYPEDEF_(0x00040180)
+#define OLEOBJ_S_INVALIDVERB                               _HRESULT_TYPEDEF_(0x00040180)
+#define OLEOBJ_S_CANNOT_DOVERB_NOW                         _HRESULT_TYPEDEF_(0x00040181)
+#define OLEOBJ_S_INVALIDHWND                               _HRESULT_TYPEDEF_(0x00040182)
+#define OLEOBJ_S_LAST                                      _HRESULT_TYPEDEF_(0x0004018F)
+
+#define OLEOBJ_E_FIRST                                     _HRESULT_TYPEDEF_(0x80040180)
+#define OLEOBJ_E_NOVERBS                                   _HRESULT_TYPEDEF_(0x80040180)
+#define OLEOBJ_E_INVALIDVERB                               _HRESULT_TYPEDEF_(0x80040181)
+#define OLEOBJ_E_LAST                                      _HRESULT_TYPEDEF_(0x8004018F)
+
+#define CLIENTSITE_S_FIRST                                 _HRESULT_TYPEDEF_(0x00040190)
+#define CLIENTSITE_S_LAST                                  _HRESULT_TYPEDEF_(0x0004019F)
+
+#define CLIENTSITE_E_FIRST                                 _HRESULT_TYPEDEF_(0x80040190)
+#define CLIENTSITE_E_LAST                                  _HRESULT_TYPEDEF_(0x8004019F)
+
+#define INPLACE_S_FIRST                                    _HRESULT_TYPEDEF_(0x000401A0)
+#define INPLACE_S_TRUNCATED                                _HRESULT_TYPEDEF_(0x000401A0)
+#define INPLACE_S_LAST                                     _HRESULT_TYPEDEF_(0x000401AF)
+
+#define INPLACE_E_FIRST                                    _HRESULT_TYPEDEF_(0x800401A0)
+#define INPLACE_E_NOTUNDOABLE                              _HRESULT_TYPEDEF_(0x800401A0)
+#define INPLACE_E_NOTOOLSPACE                              _HRESULT_TYPEDEF_(0x800401A1)
+#define INPLACE_E_LAST                                     _HRESULT_TYPEDEF_(0x800401AF)
+
+#define ENUM_S_FIRST                                       _HRESULT_TYPEDEF_(0x000401B0)
+#define ENUM_S_LAST                                        _HRESULT_TYPEDEF_(0x000401BF)
+
+#define ENUM_E_FIRST                                       _HRESULT_TYPEDEF_(0x800401B0)
+#define ENUM_E_LAST                                        _HRESULT_TYPEDEF_(0x800401BF)
+
+#define CONVERT10_S_FIRST                                  _HRESULT_TYPEDEF_(0x000401C0)
+#define CONVERT10_S_NO_PRESENTATION                        _HRESULT_TYPEDEF_(0x000401C0)
+#define CONVERT10_S_LAST                                   _HRESULT_TYPEDEF_(0x000401CF)
+
+#define CONVERT10_E_FIRST                                  _HRESULT_TYPEDEF_(0x800401C0)
+#define CONVERT10_E_OLESTREAM_GET                          _HRESULT_TYPEDEF_(0x800401C0)
+#define CONVERT10_E_OLESTREAM_PUT                          _HRESULT_TYPEDEF_(0x800401C1)
+#define CONVERT10_E_OLESTREAM_FMT                          _HRESULT_TYPEDEF_(0x800401C2)
+#define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB                _HRESULT_TYPEDEF_(0x800401C3)
+#define CONVERT10_E_STG_FMT                                _HRESULT_TYPEDEF_(0x800401C4)
+#define CONVERT10_E_STG_NO_STD_STREAM                      _HRESULT_TYPEDEF_(0x800401C5)
+#define CONVERT10_E_STG_DIB_TO_BITMAP                      _HRESULT_TYPEDEF_(0x800401C6)
+#define CONVERT10_E_LAST                                   _HRESULT_TYPEDEF_(0x800401CF)
+
+#define CLIPBRD_S_FIRST                                    _HRESULT_TYPEDEF_(0x000401D0)
+#define CLIPBRD_S_LAST                                     _HRESULT_TYPEDEF_(0x000401DF)
+
+#define CLIPBRD_E_FIRST                                    _HRESULT_TYPEDEF_(0x800401D0)
+#define CLIPBRD_E_LAST                                     _HRESULT_TYPEDEF_(0x800401DF)
+#define CLIPBRD_E_CANT_OPEN                                _HRESULT_TYPEDEF_(0x800401D0)
+#define CLIPBRD_E_CANT_EMPTY                               _HRESULT_TYPEDEF_(0x800401D1)
+#define CLIPBRD_E_CANT_SET                                 _HRESULT_TYPEDEF_(0x800401D2)
+#define CLIPBRD_E_BAD_DATA                                 _HRESULT_TYPEDEF_(0x800401D3)
+#define CLIPBRD_E_CANT_CLOSE                               _HRESULT_TYPEDEF_(0x800401D4)
+
+#define MK_S_FIRST                                         _HRESULT_TYPEDEF_(0x000401E0)
+#define MK_S_REDUCED_TO_SELF                               _HRESULT_TYPEDEF_(0x000401E2)
+#define MK_S_ME                                            _HRESULT_TYPEDEF_(0x000401E4)
+#define MK_S_HIM                                           _HRESULT_TYPEDEF_(0x000401E5)
+#define MK_S_US                                            _HRESULT_TYPEDEF_(0x000401E6)
+#define MK_S_MONIKERALREADYREGISTERED                      _HRESULT_TYPEDEF_(0x000401E7)
+#define MK_S_LAST                                          _HRESULT_TYPEDEF_(0x000401EF)
+
+#define MK_E_FIRST                                         _HRESULT_TYPEDEF_(0x800401E0)
+#define MK_E_CONNECTMANUALLY                               _HRESULT_TYPEDEF_(0x800401E0)
+#define MK_E_EXCEEDEDDEADLINE                              _HRESULT_TYPEDEF_(0x800401E1)
+#define MK_E_NEEDGENERIC                                   _HRESULT_TYPEDEF_(0x800401E2)
+#define MK_E_UNAVAILABLE                                   _HRESULT_TYPEDEF_(0x800401E3)
+#define MK_E_SYNTAX                                        _HRESULT_TYPEDEF_(0x800401E4)
+#define MK_E_NOOBJECT                                      _HRESULT_TYPEDEF_(0x800401E5)
+#define MK_E_INVALIDEXTENSION                              _HRESULT_TYPEDEF_(0x800401E6)
+#define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED             _HRESULT_TYPEDEF_(0x800401E7)
+#define MK_E_NOTBINDABLE                                   _HRESULT_TYPEDEF_(0x800401E8)
+#define MK_E_NOTBOUND                                      _HRESULT_TYPEDEF_(0x800401E9)
+#define MK_E_CANTOPENFILE                                  _HRESULT_TYPEDEF_(0x800401EA)
+#define MK_E_MUSTBOTHERUSER                                _HRESULT_TYPEDEF_(0x800401EB)
+#define MK_E_NOINVERSE                                     _HRESULT_TYPEDEF_(0x800401EC)
+#define MK_E_NOSTORAGE                                     _HRESULT_TYPEDEF_(0x800401ED)
+#define MK_E_NOPREFIX                                      _HRESULT_TYPEDEF_(0x800401EE)
+#define MK_E_ENUMERATION_FAILED                            _HRESULT_TYPEDEF_(0x800401EF)
+#define MK_E_LAST                                          _HRESULT_TYPEDEF_(0x800401EF)
+
+#define CO_S_FIRST                                         _HRESULT_TYPEDEF_(0x000401F0)
+#define CO_S_LAST                                          _HRESULT_TYPEDEF_(0x000401FF)
+
+#define CO_E_FIRST                                         _HRESULT_TYPEDEF_(0x800401F0)
+#define CO_E_NOTINITIALIZED                                _HRESULT_TYPEDEF_(0x800401F0)
+#define CO_E_ALREADYINITIALIZED                            _HRESULT_TYPEDEF_(0x800401F1)
+#define CO_E_CANTDETERMINECLASS                            _HRESULT_TYPEDEF_(0x800401F2)
+#define CO_E_CLASSSTRING                                   _HRESULT_TYPEDEF_(0x800401F3)
+#define CO_E_IIDSTRING                                     _HRESULT_TYPEDEF_(0x800401F4)
+#define CO_E_APPNOTFOUND                                   _HRESULT_TYPEDEF_(0x800401F5)
+#define CO_E_APPSINGLEUSE                                  _HRESULT_TYPEDEF_(0x800401F6)
+#define CO_E_ERRORINAPP                                    _HRESULT_TYPEDEF_(0x800401F7)
+#define CO_E_DLLNOTFOUND                                   _HRESULT_TYPEDEF_(0x800401F8)
+#define CO_E_ERRORINDLL                                    _HRESULT_TYPEDEF_(0x800401F9)
+#define CO_E_WRONGOSFORAPP                                 _HRESULT_TYPEDEF_(0x800401FA)
+#define CO_E_OBJNOTREG                                     _HRESULT_TYPEDEF_(0x800401FB)
+#define CO_E_OBJISREG                                      _HRESULT_TYPEDEF_(0x800401FC)
+#define CO_E_OBJNOTCONNECTED                               _HRESULT_TYPEDEF_(0x800401FD)
+#define CO_E_APPDIDNTREG                                   _HRESULT_TYPEDEF_(0x800401FE)
+#define CO_E_RELEASED                                      _HRESULT_TYPEDEF_(0x800401FF)
+#define CO_E_LAST                                          _HRESULT_TYPEDEF_(0x800401FF)
+#define CO_E_FAILEDTOIMPERSONATE                           _HRESULT_TYPEDEF_(0x80040200)
+#define CO_E_FAILEDTOGETSECCTX                             _HRESULT_TYPEDEF_(0x80040201)
+#define CO_E_FAILEDTOOPENTHREADTOKEN                       _HRESULT_TYPEDEF_(0x80040202)
+#define CO_E_FAILEDTOGETTOKENINFO                          _HRESULT_TYPEDEF_(0x80040203)
+#define CO_E_TRUSTEEDOESNTMATCHCLIENT                      _HRESULT_TYPEDEF_(0x80040204)
+#define CO_E_FAILEDTOQUERYCLIENTBLANKET                    _HRESULT_TYPEDEF_(0x80040205)
+#define CO_E_FAILEDTOSETDACL                               _HRESULT_TYPEDEF_(0x80040206)
+#define CO_E_ACCESSCHECKFAILED                             _HRESULT_TYPEDEF_(0x80040207)
+#define CO_E_NETACCESSAPIFAILED                            _HRESULT_TYPEDEF_(0x80040208)
+#define CO_E_WRONGTRUSTEENAMESYNTAX                        _HRESULT_TYPEDEF_(0x80040209)
+#define CO_E_INVALIDSID                                    _HRESULT_TYPEDEF_(0x8004020A)
+#define CO_E_CONVERSIONFAILED                              _HRESULT_TYPEDEF_(0x8004020B)
+#define CO_E_NOMATCHINGSIDFOUND                            _HRESULT_TYPEDEF_(0x8004020C)
+#define CO_E_LOOKUPACCSIDFAILED                            _HRESULT_TYPEDEF_(0x8004020D)
+#define CO_E_NOMATCHINGNAMEFOUND                           _HRESULT_TYPEDEF_(0x8004020E)
+#define CO_E_LOOKUPACCNAMEFAILED                           _HRESULT_TYPEDEF_(0x8004020F)
+#define CO_E_SETSERLHNDLFAILED                             _HRESULT_TYPEDEF_(0x80040210)
+#define CO_E_FAILEDTOGETWINDIR                             _HRESULT_TYPEDEF_(0x80040211)
+#define CO_E_PATHTOOLONG                                   _HRESULT_TYPEDEF_(0x80040212)
+#define CO_E_FAILEDTOGENUUID                               _HRESULT_TYPEDEF_(0x80040213)
+#define CO_E_FAILEDTOCREATEFILE                            _HRESULT_TYPEDEF_(0x80040214)
+#define CO_E_FAILEDTOCLOSEHANDLE                           _HRESULT_TYPEDEF_(0x80040215)
+#define CO_E_EXCEEDSYSACLLIMIT                             _HRESULT_TYPEDEF_(0x80040216)
+#define CO_E_ACESINWRONGORDER                              _HRESULT_TYPEDEF_(0x80040217)
+#define CO_E_INCOMPATIBLESTREAMVERSION                     _HRESULT_TYPEDEF_(0x80040218)
+#define CO_E_FAILEDTOOPENPROCESSTOKEN                      _HRESULT_TYPEDEF_(0x80040219)
+#define CO_E_DECODEFAILED                                  _HRESULT_TYPEDEF_(0x8004021A)
+#define CO_E_ACNOTINITIALIZED                              _HRESULT_TYPEDEF_(0x8004021B)
+
+/* Task Scheduler Service Error Codes */
+#define SCHED_S_TASK_READY                                 _HRESULT_TYPEDEF_(0x00041300)
+#define SCHED_S_TASK_RUNNING                               _HRESULT_TYPEDEF_(0x00041301)
+#define SCHED_S_TASK_DISABLED                              _HRESULT_TYPEDEF_(0x00041302)
+#define SCHED_S_TASK_HAS_NOT_RUN                           _HRESULT_TYPEDEF_(0x00041303)
+#define SCHED_S_TASK_NO_MORE_RUNS                          _HRESULT_TYPEDEF_(0x00041304)
+#define SCHED_S_TASK_NOT_SCHEDULED                         _HRESULT_TYPEDEF_(0x00041305)
+#define SCHED_S_TASK_TERMINATED                            _HRESULT_TYPEDEF_(0x00041306)
+#define SCHED_S_TASK_NO_VALID_TRIGGERS                     _HRESULT_TYPEDEF_(0x00041307)
+#define SCHED_S_EVENT_TRIGGER                              _HRESULT_TYPEDEF_(0x00041308)
+#define SCHED_E_TRIGGER_NOT_FOUND                          _HRESULT_TYPEDEF_(0x80041309)
+#define SCHED_E_TASK_NOT_READY                             _HRESULT_TYPEDEF_(0x8004130A)
+#define SCHED_E_TASK_NOT_RUNNING                           _HRESULT_TYPEDEF_(0x8004130B)
+#define SCHED_E_SERVICE_NOT_INSTALLED                      _HRESULT_TYPEDEF_(0x8004130C)
+#define SCHED_E_CANNOT_OPEN_TASK                           _HRESULT_TYPEDEF_(0x8004130D)
+#define SCHED_E_INVALID_TASK                               _HRESULT_TYPEDEF_(0x8004130E)
+#define SCHED_E_ACCOUNT_INFORMATION_NOT_SET                _HRESULT_TYPEDEF_(0x8004130F)
+#define SCHED_E_ACCOUNT_NAME_NOT_FOUND                     _HRESULT_TYPEDEF_(0x80041310)
+#define SCHED_E_ACCOUNT_DBASE_CORRUPT                      _HRESULT_TYPEDEF_(0x80041311)
+#define SCHED_E_NO_SECURITY_SERVICES                       _HRESULT_TYPEDEF_(0x80041312)
+#define SCHED_E_UNKNOWN_OBJECT_VERSION                     _HRESULT_TYPEDEF_(0x80041313)
+#define SCHED_E_UNSUPPORTED_ACCOUNT_OPTION                 _HRESULT_TYPEDEF_(0x80041314)
+#define SCHED_E_SERVICE_NOT_RUNNING                        _HRESULT_TYPEDEF_(0x80041315)
+#define SCHED_E_UNEXPECTEDNODE                             _HRESULT_TYPEDEF_(0x80041316)
+#define SCHED_E_NAMESPACE                                  _HRESULT_TYPEDEF_(0x80041317)
+#define SCHED_E_INVALIDVALUE                               _HRESULT_TYPEDEF_(0x80041318)
+#define SCHED_E_MISSINGNODE                                _HRESULT_TYPEDEF_(0x80041319)
+#define SCHED_E_MALFORMEDXML                               _HRESULT_TYPEDEF_(0x8004131A)
+#define SCHED_S_SOME_TRIGGERS_FAILED                       _HRESULT_TYPEDEF_(0x0004131B)
+#define SCHED_S_BATCH_LOGON_PROBLEM                        _HRESULT_TYPEDEF_(0x0004131C)
+#define SCHED_E_TOO_MANY_NODES                             _HRESULT_TYPEDEF_(0x8004131D)
+#define SCHED_E_PAST_END_BOUNDARY                          _HRESULT_TYPEDEF_(0x8004131E)
+#define SCHED_E_ALREADY_RUNNING                            _HRESULT_TYPEDEF_(0x8004131F)
+#define SCHED_E_USER_NOT_LOGGED_ON                         _HRESULT_TYPEDEF_(0x80041320)
+#define SCHED_E_INVALID_TASK_HASH                          _HRESULT_TYPEDEF_(0x80041321)
+#define SCHED_E_SERVICE_NOT_AVAILABLE                      _HRESULT_TYPEDEF_(0x80041322)
+#define SCHED_E_SERVICE_TOO_BUSY                           _HRESULT_TYPEDEF_(0x80041323)
+#define SCHED_E_TASK_ATTEMPTED                             _HRESULT_TYPEDEF_(0x80041324)
+#define SCHED_S_TASK_QUEUED                                _HRESULT_TYPEDEF_(0x00041325)
+#define SCHED_E_TASK_DISABLED                              _HRESULT_TYPEDEF_(0x80041326)
+#define SCHED_E_TASK_NOT_V1_COMPAT                         _HRESULT_TYPEDEF_(0x80041327)
+#define SCHED_E_START_ON_DEMAND                            _HRESULT_TYPEDEF_(0x80041328)
+
+#define E_ACCESSDENIED                                     _HRESULT_TYPEDEF_(0x80070005)
+#define E_HANDLE                                           _HRESULT_TYPEDEF_(0x80070006)
+#define E_OUTOFMEMORY                                      _HRESULT_TYPEDEF_(0x8007000E)
+#define E_INVALIDARG                                       _HRESULT_TYPEDEF_(0x80070057)
+
+#define CO_S_NOTALLINTERFACES                              _HRESULT_TYPEDEF_(0x00080012)
+
+#define CO_E_CLASS_CREATE_FAILED                           _HRESULT_TYPEDEF_(0x80080001)
+#define CO_E_SCM_ERROR                                     _HRESULT_TYPEDEF_(0x80080002)
+#define CO_E_SCM_RPC_FAILURE                               _HRESULT_TYPEDEF_(0x80080003)
+#define CO_E_BAD_PATH                                      _HRESULT_TYPEDEF_(0x80080004)
+#define CO_E_SERVER_EXEC_FAILURE                           _HRESULT_TYPEDEF_(0x80080005)
+#define CO_E_OBJSRV_RPC_FAILURE                            _HRESULT_TYPEDEF_(0x80080006)
+#define MK_E_NO_NORMALIZED                                 _HRESULT_TYPEDEF_(0x80080007)
+#define CO_E_SERVER_STOPPING                               _HRESULT_TYPEDEF_(0x80080008)
+#define MEM_E_INVALID_ROOT                                 _HRESULT_TYPEDEF_(0x80080009)
+#define MEM_E_INVALID_LINK                                 _HRESULT_TYPEDEF_(0x80080010)
+#define MEM_E_INVALID_SIZE                                 _HRESULT_TYPEDEF_(0x80080011)
+
+/*Cryptographic Error Codes */
+#define NTE_BAD_UID                                        _HRESULT_TYPEDEF_(0x80090001)
+#define NTE_BAD_HASH                                       _HRESULT_TYPEDEF_(0x80090002)
+#define NTE_BAD_KEY                                        _HRESULT_TYPEDEF_(0x80090003)
+#define NTE_BAD_LEN                                        _HRESULT_TYPEDEF_(0x80090004)
+#define NTE_BAD_DATA                                       _HRESULT_TYPEDEF_(0x80090005)
+#define NTE_BAD_SIGNATURE                                  _HRESULT_TYPEDEF_(0x80090006)
+#define NTE_BAD_VER                                        _HRESULT_TYPEDEF_(0x80090007)
+#define NTE_BAD_ALGID                                      _HRESULT_TYPEDEF_(0x80090008)
+#define NTE_BAD_FLAGS                                      _HRESULT_TYPEDEF_(0x80090009)
+#define NTE_BAD_TYPE                                       _HRESULT_TYPEDEF_(0x8009000A)
+#define NTE_BAD_KEY_STATE                                  _HRESULT_TYPEDEF_(0x8009000B)
+#define NTE_BAD_HASH_STATE                                 _HRESULT_TYPEDEF_(0x8009000C)
+#define NTE_NO_KEY                                         _HRESULT_TYPEDEF_(0x8009000D)
+#define NTE_NO_MEMORY                                      _HRESULT_TYPEDEF_(0x8009000E)
+#define NTE_EXISTS                                         _HRESULT_TYPEDEF_(0x8009000F)
+#define NTE_PERM                                           _HRESULT_TYPEDEF_(0x80090010)
+#define NTE_NOT_FOUND                                      _HRESULT_TYPEDEF_(0x80090011)
+#define NTE_DOUBLE_ENCRYPT                                 _HRESULT_TYPEDEF_(0x80090012)
+#define NTE_BAD_PROVIDER                                   _HRESULT_TYPEDEF_(0x80090013)
+#define NTE_BAD_PROV_TYPE                                  _HRESULT_TYPEDEF_(0x80090014)
+#define NTE_BAD_PUBLIC_KEY                                 _HRESULT_TYPEDEF_(0x80090015)
+#define NTE_BAD_KEYSET                                     _HRESULT_TYPEDEF_(0x80090016)
+#define NTE_PROV_TYPE_NOT_DEF                              _HRESULT_TYPEDEF_(0x80090017)
+#define NTE_PROV_TYPE_ENTRY_BAD                            _HRESULT_TYPEDEF_(0x80090018)
+#define NTE_KEYSET_NOT_DEF                                 _HRESULT_TYPEDEF_(0x80090019)
+#define NTE_KEYSET_ENTRY_BAD                               _HRESULT_TYPEDEF_(0x8009001A)
+#define NTE_PROV_TYPE_NO_MATCH                             _HRESULT_TYPEDEF_(0x8009001B)
+#define NTE_SIGNATURE_FILE_BAD                             _HRESULT_TYPEDEF_(0x8009001C)
+#define NTE_PROVIDER_DLL_FAIL                              _HRESULT_TYPEDEF_(0x8009001D)
+#define NTE_PROV_DLL_NOT_FOUND                             _HRESULT_TYPEDEF_(0x8009001E)
+#define NTE_BAD_KEYSET_PARAM                               _HRESULT_TYPEDEF_(0x8009001F)
+#define NTE_FAIL                                           _HRESULT_TYPEDEF_(0x80090020)
+#define NTE_SYS_ERR                                        _HRESULT_TYPEDEF_(0x80090021)
+#define NTE_SILENT_CONTEXT                                 _HRESULT_TYPEDEF_(0x80090022)
+#define NTE_TOKEN_KEYSET_STORAGE_FULL                      _HRESULT_TYPEDEF_(0x80090023)
+#define NTE_TEMPORARY_PROFILE                              _HRESULT_TYPEDEF_(0x80090024)
+#define NTE_FIXEDPARAMETER                                 _HRESULT_TYPEDEF_(0x80090025)
+#define NTE_OP_OK                                          _HRESULT_TYPEDEF_(0)
+
+#define SEC_E_INSUFFICIENT_MEMORY                          _HRESULT_TYPEDEF_(0x80090300)
+#define SEC_E_INVALID_HANDLE                               _HRESULT_TYPEDEF_(0x80090301)
+#define SEC_E_UNSUPPORTED_FUNCTION                         _HRESULT_TYPEDEF_(0x80090302)
+#define SEC_E_TARGET_UNKNOWN                               _HRESULT_TYPEDEF_(0x80090303)
+#define SEC_E_INTERNAL_ERROR                               _HRESULT_TYPEDEF_(0x80090304)
+#define SEC_E_SECPKG_NOT_FOUND                             _HRESULT_TYPEDEF_(0x80090305)
+#define SEC_E_NOT_OWNER                                    _HRESULT_TYPEDEF_(0x80090306)
+#define SEC_E_CANNOT_INSTALL                               _HRESULT_TYPEDEF_(0x80090307)
+#define SEC_E_INVALID_TOKEN                                _HRESULT_TYPEDEF_(0x80090308)
+#define SEC_E_CANNOT_PACK                                  _HRESULT_TYPEDEF_(0x80090309)
+#define SEC_E_QOP_NOT_SUPPORTED                            _HRESULT_TYPEDEF_(0x8009030A)
+#define SEC_E_NO_IMPERSONATION                             _HRESULT_TYPEDEF_(0x8009030B)
+#define SEC_E_LOGON_DENIED                                 _HRESULT_TYPEDEF_(0x8009030C)
+#define SEC_E_UNKNOWN_CREDENTIALS                          _HRESULT_TYPEDEF_(0x8009030D)
+#define SEC_E_NO_CREDENTIALS                               _HRESULT_TYPEDEF_(0x8009030E)
+#define SEC_E_MESSAGE_ALTERED                              _HRESULT_TYPEDEF_(0x8009030F)
+#define SEC_E_OUT_OF_SEQUENCE                              _HRESULT_TYPEDEF_(0x80090310)
+#define SEC_E_NO_AUTHENTICATING_AUTHORITY                  _HRESULT_TYPEDEF_(0x80090311)
+#define SEC_I_CONTINUE_NEEDED                              _HRESULT_TYPEDEF_(0x00090312)
+#define SEC_I_COMPLETE_NEEDED                              _HRESULT_TYPEDEF_(0x00090313)
+#define SEC_I_COMPLETE_AND_CONTINUE                        _HRESULT_TYPEDEF_(0x00090314)
+#define SEC_I_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x00090317)
+#define SEC_E_BAD_PKGID                                    _HRESULT_TYPEDEF_(0x80090316)
+#define SEC_E_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x80090317)
+#define SEC_E_INCOMPLETE_MESSAGE                           _HRESULT_TYPEDEF_(0x80090318)
+#define SEC_E_INCOMPLETE_CREDENTIALS                       _HRESULT_TYPEDEF_(0x80090320)
+#define SEC_E_BUFFER_TOO_SMALL                             _HRESULT_TYPEDEF_(0x80090321)
+#define SEC_E_WRONG_PRINCIPAL                              _HRESULT_TYPEDEF_(0x80090322)
+#define SEC_E_TIME_SKEW                                    _HRESULT_TYPEDEF_(0x80090324)
+#define SEC_E_UNTRUSTED_ROOT                               _HRESULT_TYPEDEF_(0x80090325)
+#define SEC_E_ILLEGAL_MESSAGE                              _HRESULT_TYPEDEF_(0x80090326)
+#define SEC_E_CERT_UNKNOWN                                 _HRESULT_TYPEDEF_(0x80090327)
+#define SEC_E_CERT_EXPIRED                                 _HRESULT_TYPEDEF_(0x80090328)
+#define SEC_E_ENCRYPT_FAILURE                              _HRESULT_TYPEDEF_(0x80090329)
+#define SEC_E_DECRYPT_FAILURE                              _HRESULT_TYPEDEF_(0x80090330)
+#define SEC_E_ALGORITHM_MISMATCH                           _HRESULT_TYPEDEF_(0x80090331)
+#define SEC_E_SECURITY_QOS_FAILED                          _HRESULT_TYPEDEF_(0x80090332)
+#define SEC_E_UNFINISHED_CONTEXT_DELETED                   _HRESULT_TYPEDEF_(0x80090333)
+#define SEC_E_NO_TGT_REPLY                                 _HRESULT_TYPEDEF_(0x80090334)
+#define SEC_E_NO_IP_ADDRESSES                              _HRESULT_TYPEDEF_(0x80090335)
+#define SEC_E_WRONG_CREDENTIAL_HANDLE                      _HRESULT_TYPEDEF_(0x80090336)
+#define SEC_E_CRYPTO_SYSTEM_INVALID                        _HRESULT_TYPEDEF_(0x80090337)
+#define SEC_E_MAX_REFERRALS_EXCEEDED                       _HRESULT_TYPEDEF_(0x80090338)
+#define SEC_E_MUST_BE_KDC                                  _HRESULT_TYPEDEF_(0x80090339)
+#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED                  _HRESULT_TYPEDEF_(0x8009033A)
+#define SEC_E_TOO_MANY_PRINCIPALS                          _HRESULT_TYPEDEF_(0x8009033B)
+#define SEC_E_NO_PA_DATA                                   _HRESULT_TYPEDEF_(0x8009033C)
+#define SEC_E_PKINIT_NAME_MISMATCH                         _HRESULT_TYPEDEF_(0x8009033D)
+#define SEC_E_SMARTCARD_LOGON_REQUIRED                     _HRESULT_TYPEDEF_(0x8009033E)
+#define SEC_E_SHUTDOWN_IN_PROGRESS                         _HRESULT_TYPEDEF_(0x8009033F)
+#define SEC_E_KDC_INVALID_REQUEST                          _HRESULT_TYPEDEF_(0x80090340)
+#define SEC_E_KDC_UNABLE_TO_REFER                          _HRESULT_TYPEDEF_(0x80090341)
+#define SEC_E_KDC_UNKNOWN_ETYPE                            _HRESULT_TYPEDEF_(0x80090342)
+#define SEC_E_UNSUPPORTED_PREAUTH                          _HRESULT_TYPEDEF_(0x80090343)
+#define SEC_E_DELEGATION_REQUIRED                          _HRESULT_TYPEDEF_(0x80090345)
+#define SEC_E_BAD_BINDINGS                                 _HRESULT_TYPEDEF_(0x80090346)
+#define SEC_E_MULTIPLE_ACCOUNTS                            _HRESULT_TYPEDEF_(0x80090347)
+#define SEC_E_NO_KERB_KEY                                  _HRESULT_TYPEDEF_(0x80090348)
+#define SEC_E_CERT_WRONG_USAGE                             _HRESULT_TYPEDEF_(0x80090349)
+#define SEC_E_DOWNGRADE_DETECTED                           _HRESULT_TYPEDEF_(0x80090350)
+#define SEC_E_SMARTCARD_CERT_REVOKED                       _HRESULT_TYPEDEF_(0x80090351)
+#define SEC_E_ISSUING_CA_UNTRUSTED                         _HRESULT_TYPEDEF_(0x80090352)
+#define SEC_E_REVOCATION_OFFLINE_C                         _HRESULT_TYPEDEF_(0x80090353)
+#define SEC_E_PKINIT_CLIENT_FAILURE                        _HRESULT_TYPEDEF_(0x80090354)
+#define SEC_E_SMARTCARD_CERT_EXPIRED                       _HRESULT_TYPEDEF_(0x80090355)
+#define SEC_E_NO_S4U_PROT_SUPPORT                          _HRESULT_TYPEDEF_(0x80090356)
+#define SEC_E_CROSSREALM_DELEGATION_FAILURE                _HRESULT_TYPEDEF_(0x80090357)
+#define SEC_E_REVOCATION_OFFLINE_KDC                       _HRESULT_TYPEDEF_(0x80090358)
+#define SEC_E_ISSUING_CA_UNTRUSTED_KDC                     _HRESULT_TYPEDEF_(0x80090359)
+#define SEC_E_KDC_CERT_EXPIRED                             _HRESULT_TYPEDEF_(0x8009035A)
+#define SEC_E_KDC_CERT_REVOKED                             _HRESULT_TYPEDEF_(0x8009035B)
+
+#define CRYPT_E_MSG_ERROR                                  _HRESULT_TYPEDEF_(0x80091001)
+#define CRYPT_E_UNKNOWN_ALGO                               _HRESULT_TYPEDEF_(0x80091002)
+#define CRYPT_E_OID_FORMAT                                 _HRESULT_TYPEDEF_(0x80091003)
+#define CRYPT_E_INVALID_MSG_TYPE                           _HRESULT_TYPEDEF_(0x80091004)
+#define CRYPT_E_UNEXPECTED_ENCODING                        _HRESULT_TYPEDEF_(0x80091005)
+#define CRYPT_E_AUTH_ATTR_MISSING                          _HRESULT_TYPEDEF_(0x80091006)
+#define CRYPT_E_HASH_VALUE                                 _HRESULT_TYPEDEF_(0x80091007)
+#define CRYPT_E_INVALID_INDEX                              _HRESULT_TYPEDEF_(0x80091008)
+#define CRYPT_E_ALREADY_DECRYPTED                          _HRESULT_TYPEDEF_(0x80091009)
+#define CRYPT_E_NOT_DECRYPTED                              _HRESULT_TYPEDEF_(0x8009100A)
+#define CRYPT_E_RECIPIENT_NOT_FOUND                        _HRESULT_TYPEDEF_(0x8009100B)
+#define CRYPT_E_CONTROL_TYPE                               _HRESULT_TYPEDEF_(0x8009100C)
+#define CRYPT_E_ISSUER_SERIALNUMBER                        _HRESULT_TYPEDEF_(0x8009100D)
+#define CRYPT_E_SIGNER_NOT_FOUND                           _HRESULT_TYPEDEF_(0x8009100E)
+#define CRYPT_E_ATTRIBUTES_MISSING                         _HRESULT_TYPEDEF_(0x8009100F)
+#define CRYPT_E_STREAM_MSG_NOT_READY                       _HRESULT_TYPEDEF_(0x80091010)
+#define CRYPT_E_STREAM_INSUFFICIENT_DATA                   _HRESULT_TYPEDEF_(0x80091011)
+#define CRYPT_I_NEW_PROTECTION_REQUIRED                    _HRESULT_TYPEDEF_(0x80091012)
+
+#define CRYPT_E_BAD_LEN                                    _HRESULT_TYPEDEF_(0x80092001)
+#define CRYPT_E_BAD_ENCODE                                 _HRESULT_TYPEDEF_(0x80092002)
+#define CRYPT_E_FILE_ERROR                                 _HRESULT_TYPEDEF_(0x80092003)
+#define CRYPT_E_NOT_FOUND                                  _HRESULT_TYPEDEF_(0x80092004)
+#define CRYPT_E_EXISTS                                     _HRESULT_TYPEDEF_(0x80092005)
+#define CRYPT_E_NO_PROVIDER                                _HRESULT_TYPEDEF_(0x80092006)
+#define CRYPT_E_SELF_SIGNED                                _HRESULT_TYPEDEF_(0x80092007)
+#define CRYPT_E_DELETED_PREV                               _HRESULT_TYPEDEF_(0x80092008)
+#define CRYPT_E_NO_MATCH                                   _HRESULT_TYPEDEF_(0x80092009)
+#define CRYPT_E_UNEXPECTED_MSG_TYPE                        _HRESULT_TYPEDEF_(0x8009200A)
+#define CRYPT_E_NO_KEY_PROPERTY                            _HRESULT_TYPEDEF_(0x8009200B)
+#define CRYPT_E_NO_DECRYPT_CERT                            _HRESULT_TYPEDEF_(0x8009200C)
+#define CRYPT_E_BAD_MSG                                    _HRESULT_TYPEDEF_(0x8009200D)
+#define CRYPT_E_NO_SIGNER                                  _HRESULT_TYPEDEF_(0x8009200E)
+#define CRYPT_E_PENDING_CLOSE                              _HRESULT_TYPEDEF_(0x8009200F)
+#define CRYPT_E_REVOKED                                    _HRESULT_TYPEDEF_(0x80092010)
+#define CRYPT_E_NO_REVOCATION_DLL                          _HRESULT_TYPEDEF_(0x80092011)
+#define CRYPT_E_NO_REVOCATION_CHECK                        _HRESULT_TYPEDEF_(0x80092012)
+#define CRYPT_E_REVOCATION_OFFLINE                         _HRESULT_TYPEDEF_(0x80092013)
+#define CRYPT_E_NOT_IN_REVOCATION_DATABASE                 _HRESULT_TYPEDEF_(0x80092014)
+#define CRYPT_E_INVALID_NUMERIC_STRING                     _HRESULT_TYPEDEF_(0x80092020)
+#define CRYPT_E_INVALID_PRINTABLE_STRING                   _HRESULT_TYPEDEF_(0x80092021)
+#define CRYPT_E_INVALID_IA5_STRING                         _HRESULT_TYPEDEF_(0x80092022)
+#define CRYPT_E_INVALID_X500_STRING                        _HRESULT_TYPEDEF_(0x80092023)
+#define CRYPT_E_NOT_CHAR_STRING                            _HRESULT_TYPEDEF_(0x80092024)
+#define CRYPT_E_FILERESIZED                                _HRESULT_TYPEDEF_(0x80092025)
+#define CRYPT_E_SECURITY_SETTINGS                          _HRESULT_TYPEDEF_(0x80092026)
+#define CRYPT_E_NO_VERIFY_USAGE_DLL                        _HRESULT_TYPEDEF_(0x80092027)
+#define CRYPT_E_NO_VERIFY_USAGE_CHECK                      _HRESULT_TYPEDEF_(0x80092028)
+#define CRYPT_E_VERIFY_USAGE_OFFLINE                       _HRESULT_TYPEDEF_(0x80092029)
+#define CRYPT_E_NOT_IN_CTL                                 _HRESULT_TYPEDEF_(0x8009202A)
+#define CRYPT_E_NO_TRUSTED_SIGNER                          _HRESULT_TYPEDEF_(0x8009202B)
+#define CRYPT_E_MISSING_PUBKEY_PARA                        _HRESULT_TYPEDEF_(0x8009202C)
+#define CRYPT_E_OSS_ERROR                                  _HRESULT_TYPEDEF_(0x80093000)
+#define OSS_MORE_BUF                                       _HRESULT_TYPEDEF_(0x80093001)
+#define OSS_NEGATIVE_UINTEGER                              _HRESULT_TYPEDEF_(0x80093002)
+#define OSS_PDU_RANGE                                      _HRESULT_TYPEDEF_(0x80093003)
+#define OSS_MORE_INPUT                                     _HRESULT_TYPEDEF_(0x80093004)
+#define OSS_DATA_ERROR                                     _HRESULT_TYPEDEF_(0x80093005)
+#define OSS_BAD_ARG                                        _HRESULT_TYPEDEF_(0x80093006)
+#define OSS_BAD_VERSION                                    _HRESULT_TYPEDEF_(0x80093007)
+#define OSS_OUT_MEMORY                                     _HRESULT_TYPEDEF_(0x80093008)
+#define OSS_PDU_MISMATCH                                   _HRESULT_TYPEDEF_(0x80093009)
+#define OSS_LIMITED                                        _HRESULT_TYPEDEF_(0x8009300A)
+#define OSS_BAD_PTR                                        _HRESULT_TYPEDEF_(0x8009300B)
+#define OSS_BAD_TIME                                       _HRESULT_TYPEDEF_(0x8009300C)
+#define OSS_INDEFINITE_NOT_SUPPORTED                       _HRESULT_TYPEDEF_(0x8009300D)
+#define OSS_MEM_ERROR                                      _HRESULT_TYPEDEF_(0x8009300E)
+#define OSS_BAD_TABLE                                      _HRESULT_TYPEDEF_(0x8009300F)
+#define OSS_TOO_LONG                                       _HRESULT_TYPEDEF_(0x80093010)
+#define OSS_CONSTRAINT_VIOLATED                            _HRESULT_TYPEDEF_(0x80093011)
+#define OSS_FATAL_ERROR                                    _HRESULT_TYPEDEF_(0x80093012)
+#define OSS_ACCESS_SERIALIZATION_ERROR                     _HRESULT_TYPEDEF_(0x80093013)
+#define OSS_NULL_TBL                                       _HRESULT_TYPEDEF_(0x80093014)
+#define OSS_NULL_FCN                                       _HRESULT_TYPEDEF_(0x80093015)
+#define OSS_BAD_ENCRULES                                   _HRESULT_TYPEDEF_(0x80093016)
+#define OSS_UNAVAIL_ENCRULES                               _HRESULT_TYPEDEF_(0x80093017)
+#define OSS_CANT_OPEN_TRACE_WINDOW                         _HRESULT_TYPEDEF_(0x80093018)
+#define OSS_UNIMPLEMENTED                                  _HRESULT_TYPEDEF_(0x80093019)
+#define OSS_OID_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x8009301A)
+#define OSS_CANT_OPEN_TRACE_FILE                           _HRESULT_TYPEDEF_(0x8009301B)
+#define OSS_TRACE_FILE_ALREADY_OPEN                        _HRESULT_TYPEDEF_(0x8009301C)
+#define OSS_TABLE_MISMATCH                                 _HRESULT_TYPEDEF_(0x8009301D)
+#define OSS_TYPE_NOT_SUPPORTED                             _HRESULT_TYPEDEF_(0x8009301E)
+#define OSS_REAL_DLL_NOT_LINKED                            _HRESULT_TYPEDEF_(0x8009301F)
+#define OSS_REAL_CODE_NOT_LINKED                           _HRESULT_TYPEDEF_(0x80093020)
+#define OSS_OUT_OF_RANGE                                   _HRESULT_TYPEDEF_(0x80093021)
+#define OSS_COPIER_DLL_NOT_LINKED                          _HRESULT_TYPEDEF_(0x80093022)
+#define OSS_CONSTRAINT_DLL_NOT_LINKED                      _HRESULT_TYPEDEF_(0x80093023)
+#define OSS_COMPARATOR_DLL_NOT_LINKED                      _HRESULT_TYPEDEF_(0x80093024)
+#define OSS_COMPARATOR_CODE_NOT_LINKED                     _HRESULT_TYPEDEF_(0x80093025)
+#define OSS_MEM_MGR_DLL_NOT_LINKED                         _HRESULT_TYPEDEF_(0x80093026)
+#define OSS_PDV_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x80093027)
+#define OSS_PDV_CODE_NOT_LINKED                            _HRESULT_TYPEDEF_(0x80093028)
+#define OSS_API_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x80093029)
+#define OSS_BERDER_DLL_NOT_LINKED                          _HRESULT_TYPEDEF_(0x8009302A)
+#define OSS_PER_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x8009302B)
+#define OSS_OPEN_TYPE_ERROR                                _HRESULT_TYPEDEF_(0x8009302C)
+#define OSS_MUTEX_NOT_CREATED                              _HRESULT_TYPEDEF_(0x8009302D)
+#define OSS_CANT_CLOSE_TRACE_FILE                          _HRESULT_TYPEDEF_(0x8009302E)
+#define CRYPT_E_ASN1_ERROR                                 _HRESULT_TYPEDEF_(0x80093100)
+#define CRYPT_E_ASN1_INTERNAL                              _HRESULT_TYPEDEF_(0x80093101)
+#define CRYPT_E_ASN1_EOD                                   _HRESULT_TYPEDEF_(0x80093102)
+#define CRYPT_E_ASN1_CORRUPT                               _HRESULT_TYPEDEF_(0x80093103)
+#define CRYPT_E_ASN1_LARGE                                 _HRESULT_TYPEDEF_(0x80093104)
+#define CRYPT_E_ASN1_CONSTRAINT                            _HRESULT_TYPEDEF_(0x80093105)
+#define CRYPT_E_ASN1_MEMORY                                _HRESULT_TYPEDEF_(0x80093106)
+#define CRYPT_E_ASN1_OVERFLOW                              _HRESULT_TYPEDEF_(0x80093107)
+#define CRYPT_E_ASN1_BADPDU                                _HRESULT_TYPEDEF_(0x80093108)
+#define CRYPT_E_ASN1_BADARGS                               _HRESULT_TYPEDEF_(0x80093109)
+#define CRYPT_E_ASN1_BADREAL                               _HRESULT_TYPEDEF_(0x8009310A)
+#define CRYPT_E_ASN1_BADTAG                                _HRESULT_TYPEDEF_(0x8009310B)
+#define CRYPT_E_ASN1_CHOICE                                _HRESULT_TYPEDEF_(0x8009310C)
+#define CRYPT_E_ASN1_RULE                                  _HRESULT_TYPEDEF_(0x8009310D)
+#define CRYPT_E_ASN1_UTF8                                  _HRESULT_TYPEDEF_(0x8009310E)
+#define CRYPT_E_ASN1_PDU_TYPE                              _HRESULT_TYPEDEF_(0x80093133)
+#define CRYPT_E_ASN1_NYI                                   _HRESULT_TYPEDEF_(0x80093134)
+#define CRYPT_E_ASN1_EXTENDED                              _HRESULT_TYPEDEF_(0x80093201)
+#define CRYPT_E_ASN1_NOEOD                                 _HRESULT_TYPEDEF_(0x80093202)
+
+#define TRUST_E_SYSTEM_ERROR                               _HRESULT_TYPEDEF_(0x80096001)
+#define TRUST_E_NO_SIGNER_CERT                             _HRESULT_TYPEDEF_(0x80096002)
+#define TRUST_E_COUNTER_SIGNER                             _HRESULT_TYPEDEF_(0x80096003)
+#define TRUST_E_CERT_SIGNATURE                             _HRESULT_TYPEDEF_(0x80096004)
+#define TRUST_E_TIME_STAMP                                 _HRESULT_TYPEDEF_(0x80096005)
+#define TRUST_E_BAD_DIGEST                                 _HRESULT_TYPEDEF_(0x80096010)
+#define TRUST_E_BASIC_CONSTRAINTS                          _HRESULT_TYPEDEF_(0x80096019)
+#define TRUST_E_FINANCIAL_CRITERIA                         _HRESULT_TYPEDEF_(0x8009601E)
+#define TRUST_E_PROVIDER_UNKNOWN                           _HRESULT_TYPEDEF_(0x800B0001)
+#define TRUST_E_ACTION_UNKNOWN                             _HRESULT_TYPEDEF_(0x800B0002)
+#define TRUST_E_SUBJECT_FORM_UNKNOWN                       _HRESULT_TYPEDEF_(0x800B0003)
+#define TRUST_E_SUBJECT_NOT_TRUSTED                        _HRESULT_TYPEDEF_(0x800B0004)
+#define TRUST_E_NOSIGNATURE                                _HRESULT_TYPEDEF_(0x800B0100)
+#define CERT_E_EXPIRED                                     _HRESULT_TYPEDEF_(0x800B0101)
+#define CERT_E_VALIDITYPERIODNESTING                       _HRESULT_TYPEDEF_(0x800B0102)
+#define CERT_E_ROLE                                        _HRESULT_TYPEDEF_(0x800B0103)
+#define CERT_E_PATHLENCONST                                _HRESULT_TYPEDEF_(0x800B0104)
+#define CERT_E_CRITICAL                                    _HRESULT_TYPEDEF_(0x800B0105)
+#define CERT_E_PURPOSE                                     _HRESULT_TYPEDEF_(0x800B0106)
+#define CERT_E_ISSUERCHAINING                              _HRESULT_TYPEDEF_(0x800B0107)
+#define CERT_E_MALFORMED                                   _HRESULT_TYPEDEF_(0x800B0108)
+#define CERT_E_UNTRUSTEDROOT                               _HRESULT_TYPEDEF_(0x800B0109)
+#define CERT_E_CHAINING                                    _HRESULT_TYPEDEF_(0x800B010A)
+#define TRUST_E_FAIL                                       _HRESULT_TYPEDEF_(0x800B010B)
+#define CERT_E_REVOKED                                     _HRESULT_TYPEDEF_(0x800B010C)
+#define CERT_E_UNTRUSTEDTESTROOT                           _HRESULT_TYPEDEF_(0x800B010D)
+#define CERT_E_REVOCATION_FAILURE                          _HRESULT_TYPEDEF_(0x800B010E)
+#define CERT_E_CN_NO_MATCH                                 _HRESULT_TYPEDEF_(0x800B010F)
+#define CERT_E_WRONG_USAGE                                 _HRESULT_TYPEDEF_(0x800B0110)
+#define TRUST_E_EXPLICIT_DISTRUST                          _HRESULT_TYPEDEF_(0x800B0111)
+#define CERT_E_UNTRUSTEDCA                                 _HRESULT_TYPEDEF_(0x800B0112)
+#define CERT_E_INVALID_POLICY                              _HRESULT_TYPEDEF_(0x800B0113)
+#define CERT_E_INVALID_NAME                                _HRESULT_TYPEDEF_(0x800B0114)
+
+#define SPAPI_E_EXPECTED_SECTION_NAME                      _HRESULT_TYPEDEF_(0x800F0000)
+#define SPAPI_E_BAD_SECTION_NAME_LINE                      _HRESULT_TYPEDEF_(0x800F0001)
+#define SPAPI_E_SECTION_NAME_TOO_LONG                      _HRESULT_TYPEDEF_(0x800F0002)
+#define SPAPI_E_GENERAL_SYNTAX                             _HRESULT_TYPEDEF_(0x800F0003)
+#define SPAPI_E_WRONG_INF_STYLE                            _HRESULT_TYPEDEF_(0x800F0100)
+#define SPAPI_E_SECTION_NOT_FOUND                          _HRESULT_TYPEDEF_(0x800F0101)
+#define SPAPI_E_LINE_NOT_FOUND                             _HRESULT_TYPEDEF_(0x800F0102)
+#define SPAPI_E_NO_BACKUP                                  _HRESULT_TYPEDEF_(0x800F0103)
+#define SPAPI_E_NO_ASSOCIATED_CLASS                        _HRESULT_TYPEDEF_(0x800F0200)
+#define SPAPI_E_CLASS_MISMATCH                             _HRESULT_TYPEDEF_(0x800F0201)
+#define SPAPI_E_DUPLICATE_FOUND                            _HRESULT_TYPEDEF_(0x800F0202)
+#define SPAPI_E_NO_DRIVER_SELECTED                         _HRESULT_TYPEDEF_(0x800F0203)
+#define SPAPI_E_KEY_DOES_NOT_EXIST                         _HRESULT_TYPEDEF_(0x800F0204)
+#define SPAPI_E_INVALID_DEVINST_NAME                       _HRESULT_TYPEDEF_(0x800F0205)
+#define SPAPI_E_INVALID_CLASS                              _HRESULT_TYPEDEF_(0x800F0206)
+#define SPAPI_E_DEVINST_ALREADY_EXISTS                     _HRESULT_TYPEDEF_(0x800F0207)
+#define SPAPI_E_DEVINFO_NOT_REGISTERED                     _HRESULT_TYPEDEF_(0x800F0208)
+#define SPAPI_E_INVALID_REG_PROPERTY                       _HRESULT_TYPEDEF_(0x800F0209)
+#define SPAPI_E_NO_INF                                     _HRESULT_TYPEDEF_(0x800F020A)
+#define SPAPI_E_NO_SUCH_DEVINST                            _HRESULT_TYPEDEF_(0x800F020B)
+#define SPAPI_E_CANT_LOAD_CLASS_ICON                       _HRESULT_TYPEDEF_(0x800F020C)
+#define SPAPI_E_INVALID_CLASS_INSTALLER                    _HRESULT_TYPEDEF_(0x800F020D)
+#define SPAPI_E_DI_DO_DEFAULT                              _HRESULT_TYPEDEF_(0x800F020E)
+#define SPAPI_E_DI_NOFILECOPY                              _HRESULT_TYPEDEF_(0x800F020F)
+#define SPAPI_E_INVALID_HWPROFILE                          _HRESULT_TYPEDEF_(0x800F0210)
+#define SPAPI_E_NO_DEVICE_SELECTED                         _HRESULT_TYPEDEF_(0x800F0211)
+#define SPAPI_E_DEVINFO_LIST_LOCKED                        _HRESULT_TYPEDEF_(0x800F0212)
+#define SPAPI_E_DEVINFO_DATA_LOCKED                        _HRESULT_TYPEDEF_(0x800F0213)
+#define SPAPI_E_DI_BAD_PATH                                _HRESULT_TYPEDEF_(0x800F0214)
+#define SPAPI_E_NO_CLASSINSTALL_PARAMS                     _HRESULT_TYPEDEF_(0x800F0215)
+#define SPAPI_E_FILEQUEUE_LOCKED                           _HRESULT_TYPEDEF_(0x800F0216)
+#define SPAPI_E_BAD_SERVICE_INSTALLSECT                    _HRESULT_TYPEDEF_(0x800F0217)
+#define SPAPI_E_NO_CLASS_DRIVER_LIST                       _HRESULT_TYPEDEF_(0x800F0218)
+#define SPAPI_E_NO_ASSOCIATED_SERVICE                      _HRESULT_TYPEDEF_(0x800F0219)
+#define SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE                _HRESULT_TYPEDEF_(0x800F021A)
+#define SPAPI_E_DEVICE_INTERFACE_ACTIVE                    _HRESULT_TYPEDEF_(0x800F021B)
+#define SPAPI_E_DEVICE_INTERFACE_REMOVED                   _HRESULT_TYPEDEF_(0x800F021C)
+#define SPAPI_E_BAD_INTERFACE_INSTALLSECT                  _HRESULT_TYPEDEF_(0x800F021D)
+#define SPAPI_E_NO_SUCH_INTERFACE_CLASS                    _HRESULT_TYPEDEF_(0x800F021E)
+#define SPAPI_E_INVALID_REFERENCE_STRING                   _HRESULT_TYPEDEF_(0x800F021F)
+#define SPAPI_E_INVALID_MACHINENAME                        _HRESULT_TYPEDEF_(0x800F0220)
+#define SPAPI_E_REMOTE_COMM_FAILURE                        _HRESULT_TYPEDEF_(0x800F0221)
+#define SPAPI_E_MACHINE_UNAVAILABLE                        _HRESULT_TYPEDEF_(0x800F0222)
+#define SPAPI_E_NO_CONFIGMGR_SERVICES                      _HRESULT_TYPEDEF_(0x800F0223)
+#define SPAPI_E_INVALID_PROPPAGE_PROVIDER                  _HRESULT_TYPEDEF_(0x800F0224)
+#define SPAPI_E_NO_SUCH_DEVICE_INTERFACE                   _HRESULT_TYPEDEF_(0x800F0225)
+#define SPAPI_E_DI_POSTPROCESSING_REQUIRED                 _HRESULT_TYPEDEF_(0x800F0226)
+#define SPAPI_E_INVALID_COINSTALLER                        _HRESULT_TYPEDEF_(0x800F0227)
+#define SPAPI_E_NO_COMPAT_DRIVERS                          _HRESULT_TYPEDEF_(0x800F0228)
+#define SPAPI_E_NO_DEVICE_ICON                             _HRESULT_TYPEDEF_(0x800F0229)
+#define SPAPI_E_INVALID_INF_LOGCONFIG                      _HRESULT_TYPEDEF_(0x800F022A)
+#define SPAPI_E_DI_DONT_INSTALL                            _HRESULT_TYPEDEF_(0x800F022B)
+#define SPAPI_E_INVALID_FILTER_DRIVER                      _HRESULT_TYPEDEF_(0x800F022C)
+#define SPAPI_E_NON_WINDOWS_NT_DRIVER                      _HRESULT_TYPEDEF_(0x800F022D)
+#define SPAPI_E_NON_WINDOWS_DRIVER                         _HRESULT_TYPEDEF_(0x800F022E)
+#define SPAPI_E_NO_CATALOG_FOR_OEM_INF                     _HRESULT_TYPEDEF_(0x800F022F)
+#define SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE                 _HRESULT_TYPEDEF_(0x800F0230)
+#define SPAPI_E_NOT_DISABLEABLE                            _HRESULT_TYPEDEF_(0x800F0231)
+#define SPAPI_E_CANT_REMOVE_DEVINST                        _HRESULT_TYPEDEF_(0x800F0232)
+#define SPAPI_E_INVALID_TARGET                             _HRESULT_TYPEDEF_(0x800F0233)
+#define SPAPI_E_DRIVER_NONNATIVE                           _HRESULT_TYPEDEF_(0x800F0234)
+#define SPAPI_E_IN_WOW64                                   _HRESULT_TYPEDEF_(0x800F0235)
+#define SPAPI_E_SET_SYSTEM_RESTORE_POINT                   _HRESULT_TYPEDEF_(0x800F0236)
+#define SPAPI_E_INCORRECTLY_COPIED_INF                     _HRESULT_TYPEDEF_(0x800F0237)
+#define SPAPI_E_SCE_DISABLED                               _HRESULT_TYPEDEF_(0x800F0238)
+#define SPAPI_E_ERROR_NOT_INSTALLED                        _HRESULT_TYPEDEF_(0x800F1000)
+
+/* Smart card management error codes */
+#define SCARD_S_SUCCESS                                    NO_ERROR
+#define SCARD_F_INTERNAL_ERROR                             _HRESULT_TYPEDEF_(0x80100001)
+#define SCARD_E_CANCELLED                                  _HRESULT_TYPEDEF_(0x80100002)
+#define SCARD_E_INVALID_HANDLE                             _HRESULT_TYPEDEF_(0x80100003)
+#define SCARD_E_INVALID_PARAMETER                          _HRESULT_TYPEDEF_(0x80100004)
+#define SCARD_E_INVALID_TARGET                             _HRESULT_TYPEDEF_(0x80100005)
+#define SCARD_E_NO_MEMORY                                  _HRESULT_TYPEDEF_(0x80100006)
+#define SCARD_F_WAITED_TOO_LONG                            _HRESULT_TYPEDEF_(0x80100007)
+#define SCARD_E_INSUFFICIENT_BUFFER                        _HRESULT_TYPEDEF_(0x80100008)
+#define SCARD_E_UNKNOWN_READER                             _HRESULT_TYPEDEF_(0x80100009)
+#define SCARD_E_TIMEOUT                                    _HRESULT_TYPEDEF_(0x8010000A)
+#define SCARD_E_SHARING_VIOLATION                          _HRESULT_TYPEDEF_(0x8010000B)
+#define SCARD_E_NO_SMARTCARD                               _HRESULT_TYPEDEF_(0x8010000C)
+#define SCARD_E_UNKNOWN_CARD                               _HRESULT_TYPEDEF_(0x8010000D)
+#define SCARD_E_CANT_DISPOSE                               _HRESULT_TYPEDEF_(0x8010000E)
+#define SCARD_E_PROTO_MISMATCH                             _HRESULT_TYPEDEF_(0x8010000F)
+#define SCARD_E_NOT_READY                                  _HRESULT_TYPEDEF_(0x80100010)
+#define SCARD_E_INVALID_VALUE                              _HRESULT_TYPEDEF_(0x80100011)
+#define SCARD_E_SYSTEM_CANCELLED                           _HRESULT_TYPEDEF_(0x80100012)
+#define SCARD_F_COMM_ERROR                                 _HRESULT_TYPEDEF_(0x80100013)
+#define SCARD_F_UNKNOWN_ERROR                              _HRESULT_TYPEDEF_(0x80100014)
+#define SCARD_E_INVALID_ATR                                _HRESULT_TYPEDEF_(0x80100015)
+#define SCARD_E_NOT_TRANSACTED                             _HRESULT_TYPEDEF_(0x80100016)
+#define SCARD_E_READER_UNAVAILABLE                         _HRESULT_TYPEDEF_(0x80100017)
+#define SCARD_P_SHUTDOWN                                   _HRESULT_TYPEDEF_(0x80100018)
+#define SCARD_E_PCI_TOO_SMALL                              _HRESULT_TYPEDEF_(0x80100019)
+#define SCARD_E_READER_UNSUPPORTED                         _HRESULT_TYPEDEF_(0x8010001A)
+#define SCARD_E_DUPLICATE_READER                           _HRESULT_TYPEDEF_(0x8010001B)
+#define SCARD_E_CARD_UNSUPPORTED                           _HRESULT_TYPEDEF_(0x8010001C)
+#define SCARD_E_NO_SERVICE                                 _HRESULT_TYPEDEF_(0x8010001D)
+#define SCARD_E_SERVICE_STOPPED                            _HRESULT_TYPEDEF_(0x8010001E)
+#define SCARD_E_UNEXPECTED                                 _HRESULT_TYPEDEF_(0x8010001F)
+#define SCARD_E_ICC_INSTALLATION                           _HRESULT_TYPEDEF_(0x80100020)
+#define SCARD_E_ICC_CREATEORDER                            _HRESULT_TYPEDEF_(0x80100021)
+#define SCARD_E_UNSUPPORTED_FEATURE                        _HRESULT_TYPEDEF_(0x80100022)
+#define SCARD_E_DIR_NOT_FOUND                              _HRESULT_TYPEDEF_(0x80100023)
+#define SCARD_E_FILE_NOT_FOUND                             _HRESULT_TYPEDEF_(0x80100024)
+#define SCARD_E_NO_DIR                                     _HRESULT_TYPEDEF_(0x80100025)
+#define SCARD_E_NO_FILE                                    _HRESULT_TYPEDEF_(0x80100026)
+#define SCARD_E_NO_ACCESS                                  _HRESULT_TYPEDEF_(0x80100027)
+#define SCARD_E_WRITE_TOO_MANY                             _HRESULT_TYPEDEF_(0x80100028)
+#define SCARD_E_BAD_SEEK                                   _HRESULT_TYPEDEF_(0x80100029)
+#define SCARD_E_INVALID_CHV                                _HRESULT_TYPEDEF_(0x8010002A)
+#define SCARD_E_UNKNOWN_RES_MNG                            _HRESULT_TYPEDEF_(0x8010002B)
+#define SCARD_E_NO_SUCH_CERTIFICATE                        _HRESULT_TYPEDEF_(0x8010002C)
+#define SCARD_E_CERTIFICATE_UNAVAILABLE                    _HRESULT_TYPEDEF_(0x8010002D)
+#define SCARD_E_NO_READERS_AVAILABLE                       _HRESULT_TYPEDEF_(0x8010002E)
+#define SCARD_E_COMM_DATA_LOST                             _HRESULT_TYPEDEF_(0x8010002F)
+#define SCARD_E_NO_KEY_CONTAINER                           _HRESULT_TYPEDEF_(0x80100030)
+#define SCARD_E_SERVER_TOO_BUSY                            _HRESULT_TYPEDEF_(0x80100031)
+#define SCARD_W_UNSUPPORTED_CARD                           _HRESULT_TYPEDEF_(0x80100065)
+#define SCARD_W_UNRESPONSIVE_CARD                          _HRESULT_TYPEDEF_(0x80100066)
+#define SCARD_W_UNPOWERED_CARD                             _HRESULT_TYPEDEF_(0x80100067)
+#define SCARD_W_RESET_CARD                                 _HRESULT_TYPEDEF_(0x80100068)
+#define SCARD_W_REMOVED_CARD                               _HRESULT_TYPEDEF_(0x80100069)
+#define SCARD_W_SECURITY_VIOLATION                         _HRESULT_TYPEDEF_(0x8010006A)
+#define SCARD_W_WRONG_CHV                                  _HRESULT_TYPEDEF_(0x8010006B)
+#define SCARD_W_CHV_BLOCKED                                _HRESULT_TYPEDEF_(0x8010006C)
+#define SCARD_W_EOF                                        _HRESULT_TYPEDEF_(0x8010006D)
+#define SCARD_W_CANCELLED_BY_USER                          _HRESULT_TYPEDEF_(0x8010006E)
+#define SCARD_W_CARD_NOT_AUTHENTICATED                     _HRESULT_TYPEDEF_(0x8010006F)
+#define SCARD_W_CACHE_ITEM_NOT_FOUND                       _HRESULT_TYPEDEF_(0x80100070)
+#define SCARD_W_CACHE_ITEM_STALE                           _HRESULT_TYPEDEF_(0x80100071)
+#define SCARD_W_CACHE_ITEM_TOO_BIG                         _HRESULT_TYPEDEF_(0x80100072)
+
+#define ERROR_AUDITING_DISABLED                            _HRESULT_TYPEDEF_(0xC0090001)
+#define ERROR_ALL_SIDS_FILTERED                            _HRESULT_TYPEDEF_(0xC0090002)
+
+#endif  /* __WINE_WINERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h
new file mode 100644
index 0000000..a03483d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h
@@ -0,0 +1,141 @@
+/* Definitions for the Windows Event Log (wevtapi.dll)
+ *
+ * Copyright 2012 André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINEVT_H
+#define __WINE_WINEVT_H
+
+#include <wtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef HANDLE EVT_HANDLE, *PEVT_HANDLE;
+
+typedef enum _EVT_CHANNEL_CONFIG_PROPERTY_ID {
+    EvtChannelConfigEnabled = 0,
+    EvtChannelConfigIsolation,
+    EvtChannelConfigType,
+    EvtChannelConfigOwningPublisher,
+    EvtChannelConfigClassicEventlog,
+    EvtChannelConfigAccess,
+    EvtChannelLoggingConfigRetention,
+    EvtChannelLoggingConfigAutoBackup,
+    EvtChannelLoggingConfigMaxSize,
+    EvtChannelLoggingConfigLogFilePath,
+    EvtChannelPublishingConfigLevel,
+    EvtChannelPublishingConfigKeywords,
+    EvtChannelPublishingConfigControlGuid,
+    EvtChannelPublishingConfigBufferSize,
+    EvtChannelPublishingConfigMinBuffers,
+    EvtChannelPublishingConfigMaxBuffers,
+    EvtChannelPublishingConfigLatency,
+    EvtChannelPublishingConfigClockType,
+    EvtChannelPublishingConfigSidType,
+    EvtChannelPublisherList,
+    EvtChannelPublishingConfigFileMax,
+    EvtChannelConfigPropertyIdEND
+} EVT_CHANNEL_CONFIG_PROPERTY_ID;
+
+typedef enum _EVT_SUBSCRIBE_NOTIFY_ACTION {
+    EvtSubscribeActionError = 0,
+    EvtSubscribeActionDeliver
+} EVT_SUBSCRIBE_NOTIFY_ACTION;
+
+typedef struct _EVT_VARIANT {
+    union {
+        BOOL        BooleanVal;
+        INT8        SByteVal;
+        INT16       Int16Val;
+        INT32       Int32Val;
+        INT64       Int64Val;
+        UINT8       ByteVal;
+        UINT16      UInt16Val;
+        UINT32      UInt32Val;
+        UINT64      UInt64Val;
+        FLOAT       SingleVal;
+        DOUBLE      DoubleVal;
+        ULONGLONG   FileTimeVal;
+        SYSTEMTIME* SysTimeVal;
+        GUID*       GuidVal;
+        LPCWSTR     StringVal;
+        LPCSTR      AnsiStringVal;
+        PBYTE       BinaryVal;
+        PSID        SidVal;
+        SIZE_T      SizeTVal;
+
+        BOOL*       BooleanArr;
+        INT8*       SByteArr;
+        INT16*      Int16Arr;
+        INT32*      Int32Arr;
+        INT64*      Int64Arr;
+        UINT8*      ByteArr;
+        UINT16*     UInt16Arr;
+        UINT32*     UInt32Arr;
+        UINT64*     UInt64Arr;
+        FLOAT*      SingleArr;
+        DOUBLE*     DoubleArr;
+        FILETIME*   FileTimeArr;
+        SYSTEMTIME* SysTimeArr;
+        GUID*       GuidArr;
+        LPWSTR*     StringArr;
+        LPSTR*      AnsiStringArr;
+        PSID*       SidArr;
+        SIZE_T*     SizeTArr;
+
+        EVT_HANDLE  EvtHandleVal;
+        LPCWSTR     XmlVal;
+        LPCWSTR*    XmlValArr;
+    } DUMMYUNIONNAME;
+
+    DWORD Count;
+    DWORD Type;
+} EVT_VARIANT, *PEVT_VARIANT;
+
+typedef DWORD (WINAPI *EVT_SUBSCRIBE_CALLBACK)(EVT_SUBSCRIBE_NOTIFY_ACTION Action,
+                                               PVOID UserContext, EVT_HANDLE Event);
+
+BOOL WINAPI EvtGetChannelConfigProperty(EVT_HANDLE ChannelConfig,
+                                        EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,
+                                        DWORD Flags, DWORD PropertyValueBufferSize,
+                                        PEVT_VARIANT PropertyValueBuffer,
+                                        PDWORD PropertyValueBufferUsed);
+BOOL WINAPI EvtSetChannelConfigProperty(EVT_HANDLE ChannelConfig,
+                                        EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,
+                                        DWORD Flags, PEVT_VARIANT PropertyValue);
+EVT_HANDLE WINAPI EvtSubscribe(EVT_HANDLE Session, HANDLE SignalEvent, LPCWSTR ChannelPath,
+                               LPCWSTR Query, EVT_HANDLE Bookmark, PVOID context,
+                               EVT_SUBSCRIBE_CALLBACK Callback, DWORD Flags);
+EVT_HANDLE WINAPI EvtOpenChannelConfig(EVT_HANDLE Session, LPCWSTR ChannelPath, DWORD Flags);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINEVT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h
new file mode 100644
index 0000000..b537bf3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h
@@ -0,0 +1,3809 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINGDI_
+#define _WINGDI_
+#ifndef NOGDI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _GDI32_
+#define WINGDIAPI
+#else
+#define WINGDIAPI DECLSPEC_IMPORT
+#endif
+
+typedef struct _ABCFLOAT {
+    FLOAT   abcfA;
+    FLOAT   abcfB;
+    FLOAT   abcfC;
+} ABCFLOAT, *PABCFLOAT, *LPABCFLOAT;
+
+#define FONTMAPPER_MAX 10
+
+typedef struct
+{
+    WORD   wFirst;
+    WORD   wSecond;
+    INT  iKernAmount;
+} KERNINGPAIR, *LPKERNINGPAIR;
+
+typedef struct tagPIXELFORMATDESCRIPTOR {
+    WORD  nSize;
+    WORD  nVersion;
+    DWORD dwFlags;
+    BYTE  iPixelType;
+    BYTE  cColorBits;
+    BYTE  cRedBits;
+    BYTE  cRedShift;
+    BYTE  cGreenBits;
+    BYTE  cGreenShift;
+    BYTE  cBlueBits;
+    BYTE  cBlueShift;
+    BYTE  cAlphaBits;
+    BYTE  cAlphaShift;
+    BYTE  cAccumBits;
+    BYTE  cAccumRedBits;
+    BYTE  cAccumGreenBits;
+    BYTE  cAccumBlueBits;
+    BYTE  cAccumAlphaBits;
+    BYTE  cDepthBits;
+    BYTE  cStencilBits;
+    BYTE  cAuxBuffers;
+    BYTE  iLayerType;
+    BYTE  bReserved;
+    DWORD dwLayerMask;
+    DWORD dwVisibleMask;
+    DWORD dwDamageMask;
+} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
+
+#define PFD_TYPE_RGBA        0
+#define PFD_TYPE_COLORINDEX  1
+
+#define PFD_MAIN_PLANE       0
+#define PFD_OVERLAY_PLANE    1
+#define PFD_UNDERLAY_PLANE   (-1)
+
+#define PFD_DOUBLEBUFFER          0x00000001
+#define PFD_STEREO                0x00000002
+#define PFD_DRAW_TO_WINDOW        0x00000004
+#define PFD_DRAW_TO_BITMAP        0x00000008
+#define PFD_SUPPORT_GDI           0x00000010
+#define PFD_SUPPORT_OPENGL        0x00000020
+#define PFD_GENERIC_FORMAT        0x00000040
+#define PFD_NEED_PALETTE          0x00000080
+#define PFD_NEED_SYSTEM_PALETTE   0x00000100
+#define PFD_SWAP_EXCHANGE         0x00000200
+#define PFD_SWAP_COPY             0x00000400
+#define PFD_SWAP_LAYER_BUFFERS    0x00000800
+#define PFD_GENERIC_ACCELERATED   0x00001000
+#define PFD_SUPPORT_COMPOSITION   0x00008000 /* Vista stuff */
+
+#define PFD_DEPTH_DONTCARE        0x20000000
+#define PFD_DOUBLEBUFFER_DONTCARE 0x40000000
+#define PFD_STEREO_DONTCARE       0x80000000
+
+typedef struct tagCOLORADJUSTMENT
+{
+	WORD   caSize;
+	WORD   caFlags;
+	WORD   caIlluminantIndex;
+	WORD   caRedGamma;
+	WORD   caGreenGamma;
+	WORD   caBlueGamma;
+	WORD   caReferenceBlack;
+	WORD   caReferenceWhite;
+	SHORT  caContrast;
+	SHORT  caBrightness;
+	SHORT  caColorfulness;
+	SHORT  caRedGreenTint;
+} COLORADJUSTMENT, *PCOLORADJUSTMENT, *LPCOLORADJUSTMENT;
+
+#define CA_NEGATIVE          0x0001
+#define CA_LOG_FILTER        0x0002
+
+#define ILLUMINANT_DEVICE_DEFAULT   0
+#define ILLUMINANT_A                1
+#define ILLUMINANT_B                2
+#define ILLUMINANT_C                3
+#define ILLUMINANT_D50              4
+#define ILLUMINANT_D55              5
+#define ILLUMINANT_D65              6
+#define ILLUMINANT_D75              7
+#define ILLUMINANT_F2               8
+#define ILLUMINANT_MAX_INDEX        ILLUMINANT_F2
+
+#define ILLUMINANT_TUNGSTEN         ILLUMINANT_A
+#define ILLUMINANT_DAYLIGHT         ILLUMINANT_C
+#define ILLUMINANT_FLUORESCENT      ILLUMINANT_F2
+#define ILLUMINANT_NTSC             ILLUMINANT_C
+
+#define RGB_GAMMA_MIN               (WORD)02500
+#define RGB_GAMMA_MAX               (WORD)65000
+
+#define REFERENCE_WHITE_MIN         (WORD)6000
+#define REFERENCE_WHITE_MAX         (WORD)10000
+#define REFERENCE_BLACK_MIN         (WORD)0
+#define REFERENCE_BLACK_MAX         (WORD)4000
+
+#define COLOR_ADJ_MIN               ((SHORT)-100)
+#define COLOR_ADJ_MAX               (SHORT) 100
+
+typedef LONG FXPT16DOT16, *LPFXPT16DOT16;
+typedef LONG FXPT2DOT30, *LPFXPT2DOT30;
+typedef LONG LCSCSTYPE;
+typedef LONG LCSGAMUTMATCH;
+
+#define LCS_sRGB                    0x73524742  /* 'sRGB' */
+#define LCS_WINDOWS_COLOR_SPACE     0x57696e20  /* 'Win ' */
+
+#define LCS_CALIBRATED_RGB    __MSABI_LONG(0x00000000)
+#define LCS_DEVICE_RGB        __MSABI_LONG(0x00000001)
+#define LCS_DEVICE_CMYK       __MSABI_LONG(0x00000002)
+
+#define LCS_GM_BUSINESS       __MSABI_LONG(0x00000001)
+#define LCS_GM_GRAPHICS       __MSABI_LONG(0x00000002)
+#define LCS_GM_IMAGES         __MSABI_LONG(0x00000004)
+
+#define CM_OUT_OF_GAMUT       255
+#define CM_IN_GAMUT           0
+
+typedef struct tagCIEXYZ
+{
+  FXPT2DOT30 ciexyzX;
+  FXPT2DOT30 ciexyzY;
+  FXPT2DOT30 ciexyzZ;
+} CIEXYZ, *LPCIEXYZ;
+
+typedef struct tagCIEXYZTRIPLE
+{
+  CIEXYZ ciexyzRed;
+  CIEXYZ ciexyzGreen;
+  CIEXYZ ciexyzBlue;
+} CIEXYZTRIPLE, *LPCIEXYZTRIPLE;
+
+typedef struct tagLOGCOLORSPACEA
+{
+  DWORD lcsSignature;
+  DWORD lcsVersion;
+  DWORD lcsSize;
+  LCSCSTYPE lcsCSType;
+  LCSGAMUTMATCH lcsIntent;
+  CIEXYZTRIPLE lcsEndpoints;
+  DWORD lcsGammaRed;
+  DWORD lcsGammaGreen;
+  DWORD lcsGammaBlue;
+  CHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
+
+ typedef struct tagLOGCOLORSPACEW
+{
+  DWORD lcsSignature;
+  DWORD lcsVersion;
+  DWORD lcsSize;
+  LCSCSTYPE lcsCSType;
+  LCSGAMUTMATCH lcsIntent;
+  CIEXYZTRIPLE lcsEndpoints;
+  DWORD lcsGammaRed;
+  DWORD lcsGammaGreen;
+  DWORD lcsGammaBlue;
+  WCHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
+
+DECL_WINELIB_TYPE_AW(LPLOGCOLORSPACE)
+DECL_WINELIB_TYPE_AW(LOGCOLORSPACE)
+
+#define DC_FIELDS		1
+#define DC_PAPERS		2
+#define DC_PAPERSIZE		3
+#define DC_MINEXTENT		4
+#define DC_MAXEXTENT		5
+#define DC_BINS			6
+#define DC_DUPLEX		7
+#define DC_SIZE			8
+#define DC_EXTRA		9
+#define DC_VERSION		10
+#define DC_DRIVER		11
+#define DC_BINNAMES		12
+#define DC_ENUMRESOLUTIONS	13
+#define DC_FILEDEPENDENCIES	14
+#define DC_TRUETYPE		15
+#define DC_PAPERNAMES		16
+#define DC_ORIENTATION		17
+#define DC_COPIES		18
+#define DC_BINADJUST            19
+#define DC_EMF_COMPLIANT        20
+#define DC_DATATYPE_PRODUCED    21
+#define DC_COLLATE              22
+#define DC_MANUFACTURER         23
+#define DC_MODEL                24
+#define DC_PERSONALITY          25
+#define DC_PRINTRATE            26
+#define DC_PRINTRATEUNIT        27
+#define DC_PRINTERMEM           28
+#define DC_MEDIAREADY           29
+#define DC_STAPLE               30
+#define DC_PRINTRATEPPM         31
+#define DC_COLORDEVICE          32
+#define DC_NUP                  33
+#define DC_MEDIATYPENAMES       34
+#define DC_MEDIATYPES           35
+
+#define DCTT_BITMAP             __MSABI_LONG(0x00000001)
+#define DCTT_DOWNLOAD           __MSABI_LONG(0x00000002)
+#define DCTT_SUBDEV             __MSABI_LONG(0x00000004)
+#define DCTT_DOWNLOAD_OUTLINE   __MSABI_LONG(0x00000008)
+
+#define DCBA_FACEUPNONE         0x0000
+#define DCBA_FACEUPCENTER       0x0001
+#define DCBA_FACEUPLEFT         0x0002
+#define DCBA_FACEUPRIGHT        0x0003
+#define DCBA_FACEDOWNNONE       0x0100
+#define DCBA_FACEDOWNCENTER     0x0101
+#define DCBA_FACEDOWNLEFT       0x0102
+#define DCBA_FACEDOWNRIGHT      0x0103
+
+#define PRINTRATEUNIT_PPM       1
+#define PRINTRATEUNIT_CPS       2
+#define PRINTRATEUNIT_LPM       3
+#define PRINTRATEUNIT_IPM       4
+
+/* Flag returned from Escape QUERYDIBSUPPORT */
+#define	QDI_SETDIBITS		1
+#define	QDI_GETDIBITS		2
+#define	QDI_DIBTOSCREEN		4
+#define	QDI_STRETCHDIB		8
+
+
+/* GDI Escape commands */
+#define	NEWFRAME		1
+#define	ABORTDOC		2
+#define	NEXTBAND		3
+#define	SETCOLORTABLE		4
+#define	GETCOLORTABLE		5
+#define	FLUSHOUTPUT		6
+#define	DRAFTMODE		7
+#define	QUERYESCSUPPORT		8
+#define	SETABORTPROC		9
+#define	STARTDOC		10
+#define	ENDDOC			11
+#define	GETPHYSPAGESIZE		12
+#define	GETPRINTINGOFFSET	13
+#define	GETSCALINGFACTOR	14
+#define	MFCOMMENT		15
+#define	GETPENWIDTH		16
+#define	SETCOPYCOUNT		17
+#define	SELECTPAPERSOURCE	18
+#define	DEVICEDATA		19
+#define	PASSTHROUGH		19
+#define	GETTECHNOLGY		20
+#define	GETTECHNOLOGY		20 /* yes, both of them */
+#define	SETLINECAP		21
+#define	SETLINEJOIN		22
+#define	SETMITERLIMIT		23
+#define	BANDINFO		24
+#define	DRAWPATTERNRECT		25
+#define	GETVECTORPENSIZE	26
+#define	GETVECTORBRUSHSIZE	27
+#define	ENABLEDUPLEX		28
+#define	GETSETPAPERBINS		29
+#define	GETSETPRINTORIENT	30
+#define	ENUMPAPERBINS		31
+#define	SETDIBSCALING		32
+#define	EPSPRINTING		33
+#define	ENUMPAPERMETRICS	34
+#define	GETSETPAPERMETRICS	35
+#define	POSTSCRIPT_DATA		37
+#define	POSTSCRIPT_IGNORE	38
+#define	MOUSETRAILS		39
+#define	GETDEVICEUNITS		42
+
+#define	GETEXTENDEDTEXTMETRICS	256
+#define	GETEXTENTTABLE		257
+#define	GETPAIRKERNTABLE	258
+#define	GETTRACKKERNTABLE	259
+#define	EXTTEXTOUT		512
+#define	GETFACENAME		513
+#define	DOWNLOADFACE		514
+#define	ENABLERELATIVEWIDTHS	768
+#define	ENABLEPAIRKERNING	769
+#define	SETKERNTRACK		770
+#define	SETALLJUSTVALUES	771
+#define	SETCHARSET		772
+
+#define	STRETCHBLT		2048
+#define	GETSETSCREENPARAMS	3072
+#define	QUERYDIBSUPPORT		3073
+#define	BEGIN_PATH		4096
+#define	CLIP_TO_PATH		4097
+#define	END_PATH		4098
+#define	EXT_DEVICE_CAPS		4099
+#define	RESTORE_CTM		4100
+#define	SAVE_CTM		4101
+#define	SET_ARC_DIRECTION	4102
+#define	SET_BACKGROUND_COLOR	4103
+#define	SET_POLY_MODE		4104
+#define	SET_SCREEN_ANGLE	4105
+#define	SET_SPREAD		4106
+#define	TRANSFORM_CTM		4107
+#define	SET_CLIP_BOX		4108
+#define	SET_BOUNDS		4109
+#define	SET_MIRROR_MODE		4110
+#define	OPENCHANNEL		4110
+#define	DOWNLOADHEADER		4111
+#define CLOSECHANNEL		4112
+#define	POSTSCRIPT_PASSTHROUGH	4115
+#define	ENCAPSULATED_POSTSCRIPT	4116
+#define	POSTSCRIPT_IDENTIFY	4117
+#define	POSTSCRIPT_INJECTION	4118
+#define	CHECKJPEGFORMAT		4119
+#define	CHECKPNGFORMAT		4120
+#define	GET_PS_FEATURESETTING	4121
+#define	GDIPLUS_TS_QUERYVER	4122
+#define	GDIPLUS_TS_RECORD	4123
+
+/* for POSTSCRIPT_IDENTIFY */
+#define PSIDENT_GDICENTRIC	0
+#define PSIDENT_PSCENTRIC	1
+
+
+#define QDI_SETDIBITS           1
+#define QDI_GETDIBITS           2
+#define QDI_DIBTOSCREEN         4
+#define QDI_STRETCHDIB          8
+
+/* Spooler Error Codes */
+#define	SP_NOTREPORTED	0x4000
+#define	SP_ERROR	(-1)
+#define	SP_APPABORT	(-2)
+#define	SP_USERABORT	(-3)
+#define	SP_OUTOFDISK	(-4)
+#define	SP_OUTOFMEMORY	(-5)
+
+#define PR_JOBSTATUS     0
+
+  /* Raster operations */
+
+#define R2_BLACK         1
+#define R2_NOTMERGEPEN   2
+#define R2_MASKNOTPEN    3
+#define R2_NOTCOPYPEN    4
+#define R2_MASKPENNOT    5
+#define R2_NOT           6
+#define R2_XORPEN        7
+#define R2_NOTMASKPEN    8
+#define R2_MASKPEN       9
+#define R2_NOTXORPEN    10
+#define R2_NOP          11
+#define R2_MERGENOTPEN  12
+#define R2_COPYPEN      13
+#define R2_MERGEPENNOT  14
+#define R2_MERGEPEN     15
+#define R2_WHITE        16
+#define R2_LAST         16
+
+#define MAKEROP4(fore,back) (DWORD)((((back)<<8)&0xFF000000)|(fore))
+
+#define SRCCOPY         0xcc0020
+#define SRCPAINT        0xee0086
+#define SRCAND          0x8800c6
+#define SRCINVERT       0x660046
+#define SRCERASE        0x440328
+#define NOTSRCCOPY      0x330008
+#define NOTSRCERASE     0x1100a6
+#define MERGECOPY       0xc000ca
+#define MERGEPAINT      0xbb0226
+#define PATCOPY         0xf00021
+#define PATPAINT        0xfb0a09
+#define PATINVERT       0x5a0049
+#define DSTINVERT       0x550009
+#define BLACKNESS       0x000042
+#define WHITENESS       0xff0062
+
+  /* StretchBlt() modes */
+#define BLACKONWHITE         1
+#define WHITEONBLACK         2
+#define COLORONCOLOR	     3
+#define HALFTONE             4
+#define MAXSTRETCHBLTMODE    4
+
+#define STRETCH_ANDSCANS     BLACKONWHITE
+#define STRETCH_ORSCANS      WHITEONBLACK
+#define STRETCH_DELETESCANS  COLORONCOLOR
+#define STRETCH_HALFTONE     HALFTONE
+
+  /* Colors */
+
+#define RGB(r,g,b)          ((COLORREF)((BYTE)(r) | ((BYTE)(g) << 8) | ((BYTE)(b) << 16)))
+#define PALETTERGB(r,g,b)   (0x02000000 | RGB(r,g,b))
+#define PALETTEINDEX(i)     ((COLORREF)(0x01000000 | (WORD)(i)))
+
+#define GetRValue(rgb)      ((BYTE)  (rgb) )
+#define GetGValue(rgb)      ((BYTE) ((rgb) >> 8))
+#define GetBValue(rgb)      ((BYTE) ((rgb) >> 16))
+
+#define GetKValue(cmyk)     ((BYTE)  (cmyk) )
+#define GetYValue(cmyk)     ((BYTE) ((cmyk) >> 8))
+#define GetMValue(cmyk)     ((BYTE) ((cmyk) >> 16))
+#define GetCValue(cmyk)     ((BYTE) ((cmyk) >> 24))
+
+#define CMYK(c,m,y,k)       ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24)))
+
+/* ICM stuff */
+typedef INT (CALLBACK *ICMENUMPROCA)(LPSTR lpszFilename,LPARAM lParam);
+typedef INT (CALLBACK *ICMENUMPROCW)(LPWSTR lpszFilename,LPARAM lParam);
+DECL_WINELIB_TYPE_AW(ICMENUMPROC)
+
+
+#define ICM_OFF   1
+#define ICM_ON    2
+#define ICM_QUERY 3
+
+  /* Bounds Accumulation APIs */
+#define DCB_RESET       0x0001
+#define DCB_ACCUMULATE  0x0002
+#define DCB_DIRTY       DCB_ACCUMULATE
+#define DCB_SET         (DCB_RESET | DCB_ACCUMULATE)
+#define DCB_ENABLE      0x0004
+#define DCB_DISABLE     0x0008
+
+typedef struct
+{
+    LONG paXCount;
+    LONG paYCount;
+    LONG paXExt;
+    LONG paYExt;
+    BYTE paRGBs;
+} PELARRAY, *PPELARRAY, *LPPELARRAY;
+
+  /* Bitmaps */
+
+typedef struct
+{
+    INT  bmType;
+    INT  bmWidth;
+    INT  bmHeight;
+    INT  bmWidthBytes;
+    WORD   bmPlanes;
+    WORD   bmBitsPixel;
+    LPVOID bmBits;
+} BITMAP, *PBITMAP, *LPBITMAP;
+
+
+  /* Brushes */
+
+typedef struct
+{
+    UINT       lbStyle;
+    COLORREF   lbColor;
+    ULONG_PTR  lbHatch;
+} LOGBRUSH, *PLOGBRUSH, *LPLOGBRUSH;
+
+typedef struct
+{
+    UINT       lbStyle;
+    COLORREF   lbColor;
+    ULONG      lbHatch;
+} LOGBRUSH32, *PLOGBRUSH32, *LPLOGBRUSH32;
+
+typedef LOGBRUSH PATTERN, *PPATTERN, *LPPATTERN;
+
+
+  /* Brush styles */
+#define BS_SOLID	    0
+#define BS_NULL		    1
+#define BS_HOLLOW	    1
+#define BS_HATCHED	    2
+#define BS_PATTERN	    3
+#define BS_INDEXED	    4
+#define	BS_DIBPATTERN	    5
+#define	BS_DIBPATTERNPT	    6
+#define BS_PATTERN8X8	    7
+#define	BS_DIBPATTERN8X8    8
+#define BS_MONOPATTERN      9
+
+  /* Hatch styles */
+#define HS_HORIZONTAL       0
+#define HS_VERTICAL         1
+#define HS_FDIAGONAL        2
+#define HS_BDIAGONAL        3
+#define HS_CROSS            4
+#define HS_DIAGCROSS        5
+#define HS_API_MAX          12
+
+  /* Fonts */
+
+#define LF_FACESIZE     32
+#define LF_FULLFACESIZE 64
+
+#define RASTER_FONTTYPE     0x0001
+#define DEVICE_FONTTYPE     0x0002
+#define TRUETYPE_FONTTYPE   0x0004
+
+typedef struct tagLOGFONTA
+{
+    LONG   lfHeight;
+    LONG   lfWidth;
+    LONG   lfEscapement;
+    LONG   lfOrientation;
+    LONG   lfWeight;
+    BYTE   lfItalic;
+    BYTE   lfUnderline;
+    BYTE   lfStrikeOut;
+    BYTE   lfCharSet;
+    BYTE   lfOutPrecision;
+    BYTE   lfClipPrecision;
+    BYTE   lfQuality;
+    BYTE   lfPitchAndFamily;
+    CHAR   lfFaceName[LF_FACESIZE];
+} LOGFONTA, *PLOGFONTA, *LPLOGFONTA;
+
+typedef struct tagLOGFONTW
+{
+    LONG   lfHeight;
+    LONG   lfWidth;
+    LONG   lfEscapement;
+    LONG   lfOrientation;
+    LONG   lfWeight;
+    BYTE   lfItalic;
+    BYTE   lfUnderline;
+    BYTE   lfStrikeOut;
+    BYTE   lfCharSet;
+    BYTE   lfOutPrecision;
+    BYTE   lfClipPrecision;
+    BYTE   lfQuality;
+    BYTE   lfPitchAndFamily;
+    WCHAR  lfFaceName[LF_FACESIZE];
+} LOGFONTW, *PLOGFONTW, *LPLOGFONTW;
+
+DECL_WINELIB_TYPE_AW(LOGFONT)
+DECL_WINELIB_TYPE_AW(PLOGFONT)
+DECL_WINELIB_TYPE_AW(LPLOGFONT)
+
+typedef struct
+{
+  LOGFONTA elfLogFont;
+  BYTE       elfFullName[LF_FULLFACESIZE];
+  BYTE       elfStyle[LF_FACESIZE];
+} ENUMLOGFONTA, *LPENUMLOGFONTA;
+
+typedef struct
+{
+  LOGFONTW elfLogFont;
+  WCHAR      elfFullName[LF_FULLFACESIZE];
+  WCHAR      elfStyle[LF_FACESIZE];
+} ENUMLOGFONTW, *LPENUMLOGFONTW;
+
+DECL_WINELIB_TYPE_AW(ENUMLOGFONT)
+DECL_WINELIB_TYPE_AW(LPENUMLOGFONT)
+
+typedef struct
+{
+  LOGFONTA elfLogFont;
+  BYTE       elfFullName[LF_FULLFACESIZE];
+  BYTE       elfStyle[LF_FACESIZE];
+  BYTE       elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXA,*LPENUMLOGFONTEXA;
+
+typedef struct
+{
+  LOGFONTW elfLogFont;
+  WCHAR      elfFullName[LF_FULLFACESIZE];
+  WCHAR      elfStyle[LF_FACESIZE];
+  WCHAR      elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXW,*LPENUMLOGFONTEXW;
+
+DECL_WINELIB_TYPE_AW(ENUMLOGFONTEX)
+DECL_WINELIB_TYPE_AW(LPENUMLOGFONTEX)
+
+#define MM_MAX_NUMAXES    16
+
+typedef struct
+{
+  DWORD      dvReserved;
+  DWORD      dvNumAxes;
+  LONG       dvValues[MM_MAX_NUMAXES];
+} DESIGNVECTOR, *PDESIGNVECTOR;
+
+typedef struct
+{
+  ENUMLOGFONTEXA    elfEnumLogfontEx;
+  DESIGNVECTOR      elfDesignVector;
+} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA;
+
+typedef struct
+{
+  ENUMLOGFONTEXW    elfEnumLogfontEx;
+  DESIGNVECTOR      elfDesignVector;
+} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW;
+
+DECL_WINELIB_TYPE_AW(ENUMLOGFONTEXDV)
+DECL_WINELIB_TYPE_AW(PENUMLOGFONTEXDV)
+
+/*
+ * The FONTSIGNATURE tells which Unicode ranges and which code pages
+ * have glyphs in a font.
+ *
+ * fsUsb  128-bit bitmap. The most significant bits are 10 (magic number).
+ *        The remaining 126 bits map the Unicode ISO 10646 subranges
+ *        for which the font provides glyphs.
+ *
+ * fsCsb  64-bit bitmap. The low 32 bits map the Windows codepages for
+ *        which the font provides glyphs. The high 32 bits are for
+ *        non Windows codepages.
+ */
+typedef struct
+{
+  DWORD fsUsb[4];
+  DWORD fsCsb[2];
+} FONTSIGNATURE, *PFONTSIGNATURE, *LPFONTSIGNATURE;
+
+typedef struct
+{
+  UINT	ciCharset; /* character set */
+  UINT	ciACP; /* ANSI code page */
+  FONTSIGNATURE	fs;
+} CHARSETINFO, *PCHARSETINFO, *LPCHARSETINFO;
+
+/* Flags for TranslateCharsetInfo */
+#define TCI_SRCCHARSET    1
+#define TCI_SRCCODEPAGE   2
+#define TCI_SRCFONTSIG    3
+
+typedef struct
+{
+    DWORD lsUsb[4];
+    DWORD lsCsbDefault[2];
+    DWORD lsCsbSupported[2];
+} LOCALESIGNATURE, *PLOCALESIGNATURE, *LPLOCALESIGNATURE;
+
+
+/* Flags for ModifyWorldTransform */
+#define MWT_IDENTITY      1
+#define MWT_LEFTMULTIPLY  2
+#define MWT_RIGHTMULTIPLY 3
+#define MWT_MIN           MWT_IDENTITY
+#define MWT_MAX           MWT_RIGHTMULTIPLY
+
+/* Object Definitions for EnumObjects() */
+#define OBJ_PEN             1
+#define OBJ_BRUSH           2
+#define OBJ_DC              3
+#define OBJ_METADC          4
+#define OBJ_PAL             5
+#define OBJ_FONT            6
+#define OBJ_BITMAP          7
+#define OBJ_REGION          8
+#define OBJ_METAFILE        9
+#define OBJ_MEMDC           10
+#define OBJ_EXTPEN          11
+#define OBJ_ENHMETADC       12
+#define OBJ_ENHMETAFILE     13
+#define OBJ_COLORSPACE      14
+
+typedef struct tagXFORM
+{
+    FLOAT  eM11;
+    FLOAT  eM12;
+    FLOAT  eM21;
+    FLOAT  eM22;
+    FLOAT  eDx;
+    FLOAT  eDy;
+} XFORM, *PXFORM, *LPXFORM;
+
+  /* lfWeight values */
+#define FW_DONTCARE	    0
+#define FW_THIN 	    100
+#define FW_EXTRALIGHT	    200
+#define FW_ULTRALIGHT	    200
+#define FW_LIGHT	    300
+#define FW_NORMAL	    400
+#define FW_REGULAR	    400
+#define FW_MEDIUM	    500
+#define FW_SEMIBOLD	    600
+#define FW_DEMIBOLD	    600
+#define FW_BOLD 	    700
+#define FW_EXTRABOLD	    800
+#define FW_ULTRABOLD	    800
+#define FW_HEAVY	    900
+#define FW_BLACK	    900
+
+  /* lfCharSet values */
+#define ANSI_CHARSET	      (BYTE)0   /* CP1252, ansi-0, iso8859-{1,15} */
+#define DEFAULT_CHARSET       (BYTE)1
+#define SYMBOL_CHARSET	      (BYTE)2
+#define SHIFTJIS_CHARSET      (BYTE)128 /* CP932 */
+#define HANGEUL_CHARSET       (BYTE)129 /* CP949, ksc5601.1987-0 */
+#define HANGUL_CHARSET        HANGEUL_CHARSET
+#define GB2312_CHARSET        (BYTE)134 /* CP936, gb2312.1980-0 */
+#define CHINESEBIG5_CHARSET   (BYTE)136 /* CP950, big5.et-0 */
+#define GREEK_CHARSET         (BYTE)161	/* CP1253 */
+#define TURKISH_CHARSET       (BYTE)162	/* CP1254, -iso8859-9 */
+#define HEBREW_CHARSET        (BYTE)177	/* CP1255, -iso8859-8 */
+#define ARABIC_CHARSET        (BYTE)178	/* CP1256, -iso8859-6 */
+#define BALTIC_CHARSET        (BYTE)186	/* CP1257, -iso8859-13 */
+#define VIETNAMESE_CHARSET    (BYTE)163 /* CP1258 */
+#define RUSSIAN_CHARSET       (BYTE)204	/* CP1251, -iso8859-5 */
+#define EE_CHARSET	      (BYTE)238	/* CP1250, -iso8859-2 */
+#define EASTEUROPE_CHARSET    EE_CHARSET
+#define THAI_CHARSET	      (BYTE)222 /* CP874, iso8859-11, tis620 */
+#define JOHAB_CHARSET         (BYTE)130 /* korean (johab) CP1361 */
+#define MAC_CHARSET           (BYTE)77
+#define OEM_CHARSET	      (BYTE)255
+/* I don't know if the values of *_CHARSET macros are defined in Windows
+ * or if we can choose them as we want. -- srtxg
+ */
+#define VISCII_CHARSET        (BYTE)240 /* viscii1.1-1 */
+#define TCVN_CHARSET          (BYTE)241 /* tcvn-0 */
+#define KOI8_CHARSET          (BYTE)242 /* koi8-{r,u,ru} */
+#define ISO3_CHARSET          (BYTE)243 /* iso8859-3 */
+#define ISO4_CHARSET          (BYTE)244 /* iso8859-4 */
+#define ISO10_CHARSET         (BYTE)245 /* iso8859-10 */
+#define CELTIC_CHARSET        (BYTE)246 /* iso8859-14 */
+
+#define FS_LATIN1              __MSABI_LONG(0x00000001)
+#define FS_LATIN2              __MSABI_LONG(0x00000002)
+#define FS_CYRILLIC            __MSABI_LONG(0x00000004)
+#define FS_GREEK               __MSABI_LONG(0x00000008)
+#define FS_TURKISH             __MSABI_LONG(0x00000010)
+#define FS_HEBREW              __MSABI_LONG(0x00000020)
+#define FS_ARABIC              __MSABI_LONG(0x00000040)
+#define FS_BALTIC              __MSABI_LONG(0x00000080)
+#define FS_VIETNAMESE          __MSABI_LONG(0x00000100)
+#define FS_THAI                __MSABI_LONG(0x00010000)
+#define FS_JISJAPAN            __MSABI_LONG(0x00020000)
+#define FS_CHINESESIMP         __MSABI_LONG(0x00040000)
+#define FS_WANSUNG             __MSABI_LONG(0x00080000)
+#define FS_CHINESETRAD         __MSABI_LONG(0x00100000)
+#define FS_JOHAB               __MSABI_LONG(0x00200000)
+#define FS_SYMBOL              __MSABI_LONG(0x80000000)
+
+  /* lfOutPrecision values */
+#define OUT_DEFAULT_PRECIS	0
+#define OUT_STRING_PRECIS	1
+#define OUT_CHARACTER_PRECIS	2
+#define OUT_STROKE_PRECIS	3
+#define OUT_TT_PRECIS		4
+#define OUT_DEVICE_PRECIS	5
+#define OUT_RASTER_PRECIS	6
+#define OUT_TT_ONLY_PRECIS	7
+#define OUT_OUTLINE_PRECIS      8
+
+  /* lfClipPrecision values */
+#define CLIP_DEFAULT_PRECIS     0x00
+#define CLIP_CHARACTER_PRECIS   0x01
+#define CLIP_STROKE_PRECIS      0x02
+#define CLIP_MASK		0x0F
+#define CLIP_LH_ANGLES		0x10
+#define CLIP_TT_ALWAYS		0x20
+#define CLIP_EMBEDDED		0x80
+
+  /* lfQuality values */
+#define DEFAULT_QUALITY        0
+#define DRAFT_QUALITY          1
+#define PROOF_QUALITY          2
+#define NONANTIALIASED_QUALITY 3
+#define ANTIALIASED_QUALITY    4
+#define CLEARTYPE_QUALITY          5
+#define CLEARTYPE_NATURAL_QUALITY  6
+
+  /* lfPitchAndFamily pitch values */
+#define DEFAULT_PITCH       0x00
+#define FIXED_PITCH         0x01
+#define VARIABLE_PITCH      0x02
+#define MONO_FONT           0x08
+
+#define FF_DONTCARE         0x00
+#define FF_ROMAN            0x10
+#define FF_SWISS            0x20
+#define FF_MODERN           0x30
+#define FF_SCRIPT           0x40
+#define FF_DECORATIVE       0x50
+
+#ifndef _TEXTMETRIC_DEFINED
+#define _TEXTMETRIC_DEFINED
+
+typedef struct tagTEXTMETRICA
+{
+    LONG      tmHeight;
+    LONG      tmAscent;
+    LONG      tmDescent;
+    LONG      tmInternalLeading;
+    LONG      tmExternalLeading;
+    LONG      tmAveCharWidth;
+    LONG      tmMaxCharWidth;
+    LONG      tmWeight;
+    LONG      tmOverhang;
+    LONG      tmDigitizedAspectX;
+    LONG      tmDigitizedAspectY;
+    BYTE      tmFirstChar;
+    BYTE      tmLastChar;
+    BYTE      tmDefaultChar;
+    BYTE      tmBreakChar;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;
+
+typedef struct tagTEXTMETRICW
+{
+    LONG      tmHeight;
+    LONG      tmAscent;
+    LONG      tmDescent;
+    LONG      tmInternalLeading;
+    LONG      tmExternalLeading;
+    LONG      tmAveCharWidth;
+    LONG      tmMaxCharWidth;
+    LONG      tmWeight;
+    LONG      tmOverhang;
+    LONG      tmDigitizedAspectX;
+    LONG      tmDigitizedAspectY;
+    WCHAR     tmFirstChar;
+    WCHAR     tmLastChar;
+    WCHAR     tmDefaultChar;
+    WCHAR     tmBreakChar;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;
+
+DECL_WINELIB_TYPE_AW(TEXTMETRIC)
+DECL_WINELIB_TYPE_AW(PTEXTMETRIC)
+DECL_WINELIB_TYPE_AW(LPTEXTMETRIC)
+#endif /* _TEXTMETRIC_DEFINED */
+
+
+typedef struct tagPANOSE
+{
+    BYTE bFamilyType;
+    BYTE bSerifStyle;
+    BYTE bWeight;
+    BYTE bProportion;
+    BYTE bContrast;
+    BYTE bStrokeVariation;
+    BYTE bArmStyle;
+    BYTE bLetterform;
+    BYTE bMidline;
+    BYTE bXHeight;
+} PANOSE, *LPPANOSE;
+
+#define PANOSE_COUNT                   10
+
+#define PAN_FAMILYTYPE_INDEX           0
+#define PAN_SERIFSTYLE_INDEX           1
+#define PAN_WEIGTH_INDEX               2
+#define PAN_PROPORTION_INDEX           3
+#define PAN_CONTRAST_INDEX             4
+#define PAN_STROKEVARIATION_INDEX      5
+#define PAN_ARMSTYLE_INDEX             6
+#define PAN_LETTERFORM_INDEX           7
+#define PAN_MIDLINE_INDEX              8
+#define PAN_XHEIGHT_INDEX              9
+
+#define PAN_CULTURE_LATIN              0
+
+#define PAN_ANY                        0
+#define PAN_NO_FIT                     1
+
+#define PAN_FAMILY_TEXT_DISPLAY        2
+#define PAN_FAMILY_SCRIPT              3
+#define PAN_FAMILY_DECORATIVE          4
+#define PAN_FAMILY_PICTORIAL           5
+
+#define PAN_SERIF_COVE                 2
+#define PAN_SERIF_OBTUSE_COVE          3
+#define PAN_SERIF_SQUARE_COVE          4
+#define PAN_SERIF_OBTUSE_SQUARE_COVE   5
+#define PAN_SERIF_SQUARE               6
+#define PAN_SERIF_THIN                 7
+#define PAN_SERIF_BONE                 8
+#define PAN_SERIF_EXAGGERATED          9
+#define PAN_SERIF_TRIANGLE             10
+#define PAN_SERIF_NORMAL_SANS          11
+#define PAN_SERIF_OBTUSE_SANS          12
+#define PAN_SERIF_PERP_SANS            13
+#define PAN_SERIF_FLARED               14
+#define PAN_SERIF_ROUNDED              15
+
+#define PAN_WEIGHT_VERY_LIGHT          2
+#define PAN_WEIGHT_LIGHT               3
+#define PAN_WEIGHT_THIN                4
+#define PAN_WEIGHT_BOOK                5
+#define PAN_WEIGHT_MEDIUM              6
+#define PAN_WEIGHT_DEMI                7
+#define PAN_WEIGHT_BOLD                8
+#define PAN_WEIGHT_HEAVY               9
+#define PAN_WEIGHT_BLACK               10
+#define PAN_WEIGHT_NORD                11
+
+#define PAN_PROP_OLD_STYLE             2
+#define PAN_PROP_MODERN                3
+#define PAN_PROP_EVEN_WIDTH            4
+#define PAN_PROP_EXPANDED              5
+#define PAN_PROP_CONDENSED             6
+#define PAN_PROP_VERY_EXPANDED         7
+#define PAN_PROP_VERY_CONDENSED        8
+#define PAN_PROP_MONOSPACED            9
+
+#define PAN_CONTRAST_NONE              2
+#define PAN_CONTRAST_VERY_LOW          3
+#define PAN_CONTRAST_LOW               4
+#define PAN_CONTRAST_MEDIUM_LOW        5
+#define PAN_CONTRAST_MEDIUM            6
+#define PAN_CONTRAST_MEDIUM_HIGH       7
+#define PAN_CONTRAST_HIGH              8
+#define PAN_CONTRAST_VERY_HIGH         9
+
+#define PAN_STROKE_GRADUAL_DIAG        2
+#define PAN_STROKE_GRADUAL_TRAN        3
+#define PAN_STROKE_GRADUAL_VERT        4
+#define PAN_STROKE_GRADUAL_HORZ        5
+#define PAN_STROKE_RAPID_VERT          6
+#define PAN_STROKE_RAPID_HORZ          7
+#define PAN_STROKE_INSTANT_VERT        8
+
+#define PAN_STRAIGHT_ARMS_HORZ         2
+#define PAN_STRAIGHT_ARMS_WEDGE        3
+#define PAN_STRAIGHT_ARMS_VERT         4
+#define PAN_STRAIGHT_ARMS_SINGLE_SERIF 5
+#define PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6
+#define PAN_BENT_ARMS_HORZ             7
+#define PAN_BENT_ARMS_WEDGE            8
+#define PAN_BENT_ARMS_VERT             9
+#define PAN_BENT_ARMS_SINGLE_SERIF     10
+#define PAN_BENT_ARMS_DOUBLE_SERIF     11
+
+#define PAN_LETT_NORMAL_COMPACT        2
+#define PAN_LETT_NORMAL_WEIGHTED       3
+#define PAN_LETT_NORMAL_BOXED          4
+#define PAN_LETT_NORMAL_FLATTENED      5
+#define PAN_LETT_NORMAL_ROUNDED        6
+#define PAN_LETT_NORMAL_OFF_CENTER     7
+#define PAN_LETT_NORMAL_SQUARE         8
+#define PAN_LETT_OBLIQUE_COMPACT       9
+#define PAN_LETT_OBLIQUE_WEIGHTED      10
+#define PAN_LETT_OBLIQUE_BOXED         11
+#define PAN_LETT_OBLIQUE_FLATTENED     12
+#define PAN_LETT_OBLIQUE_ROUNDED       13
+#define PAN_LETT_OBLIQUE_OFF_CENTER    14
+#define PAN_LETT_OBLIQUE_SQUARE        15
+
+#define PAN_MIDLINE_STANDARD_TRIMMED   2
+#define PAN_MIDLINE_STANDARD_POINTED   3
+#define PAN_MIDLINE_STANDARD_SERIFED   4
+#define PAN_MIDLINE_HIGH_TRIMMED       5
+#define PAN_MIDLINE_HIGH_POINTED       6
+#define PAN_MIDLINE_HIGH_SERIFED       7
+#define PAN_MIDLINE_CONSTANT_TRIMMED   8
+#define PAN_MIDLINE_CONSTANT_POINTED   9
+#define PAN_MIDLINE_CONSTANT_SERIFED   10
+#define PAN_MIDLINE_LOW_TRIMMED        11
+#define PAN_MIDLINE_LOW_POINTED        12
+#define PAN_MIDLINE_LOW_SERIFED        13
+
+#define PAN_XHEIGHT_CONSTANT_SMALL     2
+#define PAN_XHEIGHT_CONSTANT_STANDARD  3
+#define PAN_XHEIGHT_CONSTANT_LARGE     4
+#define PAN_XHEIGHT_DUCKING_SMALL      5
+#define PAN_XHEIGHT_DUCKING_STANDARD   6
+#define PAN_XHEIGHT_DUCKING_LARGE      7
+
+#define ELF_VENDOR_SIZE 4
+typedef struct
+{
+  LOGFONTA    elfLogFont;
+  BYTE        elfFullName[LF_FULLFACESIZE];
+  BYTE        elfStyle[LF_FACESIZE];
+  DWORD       elfVersion;
+  DWORD       elfStyleSize;
+  DWORD       elfMatch;
+  DWORD       elfReserved;
+  BYTE        elfVendorId[ELF_VENDOR_SIZE];
+  DWORD       elfCulture;
+  PANOSE      elfPanose;
+} EXTLOGFONTA, *PEXTLOGFONTA, *LPEXTLOGFONTA;
+
+typedef struct
+{
+  LOGFONTW    elfLogFont;
+  WCHAR       elfFullName[LF_FULLFACESIZE];
+  WCHAR       elfStyle[LF_FACESIZE];
+  DWORD       elfVersion;
+  DWORD       elfStyleSize;
+  DWORD       elfMatch;
+  DWORD       elfReserved;
+  BYTE        elfVendorId[ELF_VENDOR_SIZE];
+  DWORD       elfCulture;
+  PANOSE      elfPanose;
+} EXTLOGFONTW, *PEXTLOGFONTW, *LPEXTLOGFONTW;
+
+DECL_WINELIB_TYPE_AW(EXTLOGFONT)
+DECL_WINELIB_TYPE_AW(PEXTLOGFONT)
+DECL_WINELIB_TYPE_AW(LPEXTLOGFONT)
+
+#define ELF_VERSION         0
+#define ELF_CULTURE_LATIN   0
+
+typedef struct _OUTLINETEXTMETRICA
+{
+    UINT          otmSize;
+    TEXTMETRICA   otmTextMetrics;
+    BYTE            otmFiller;
+    PANOSE          otmPanoseNumber;
+    UINT          otmfsSelection;
+    UINT          otmfsType;
+    INT           otmsCharSlopeRise;
+    INT           otmsCharSlopeRun;
+    INT           otmItalicAngle;
+    UINT          otmEMSquare;
+    INT           otmAscent;
+    INT           otmDescent;
+    UINT          otmLineGap;
+    UINT          otmsCapEmHeight;
+    UINT          otmsXHeight;
+    RECT          otmrcFontBox;
+    INT           otmMacAscent;
+    INT           otmMacDescent;
+    UINT          otmMacLineGap;
+    UINT          otmusMinimumPPEM;
+    POINT         otmptSubscriptSize;
+    POINT         otmptSubscriptOffset;
+    POINT         otmptSuperscriptSize;
+    POINT         otmptSuperscriptOffset;
+    UINT          otmsStrikeoutSize;
+    INT           otmsStrikeoutPosition;
+    INT           otmsUnderscoreSize;
+    INT           otmsUnderscorePosition;
+    LPSTR           otmpFamilyName;
+    LPSTR           otmpFaceName;
+    LPSTR           otmpStyleName;
+    LPSTR           otmpFullName;
+} OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA;
+
+typedef struct _OUTLINETEXTMETRICW
+{
+    UINT          otmSize;
+    TEXTMETRICW   otmTextMetrics;
+    BYTE            otmFiller;
+    PANOSE          otmPanoseNumber;
+    UINT          otmfsSelection;
+    UINT          otmfsType;
+    INT           otmsCharSlopeRise;
+    INT           otmsCharSlopeRun;
+    INT           otmItalicAngle;
+    UINT          otmEMSquare;
+    INT           otmAscent;
+    INT           otmDescent;
+    UINT          otmLineGap;
+    UINT          otmsCapEmHeight;
+    UINT          otmsXHeight;
+    RECT          otmrcFontBox;
+    INT           otmMacAscent;
+    INT           otmMacDescent;
+    UINT          otmMacLineGap;
+    UINT          otmusMinimumPPEM;
+    POINT         otmptSubscriptSize;
+    POINT         otmptSubscriptOffset;
+    POINT         otmptSuperscriptSize;
+    POINT         otmptSuperscriptOffset;
+    UINT          otmsStrikeoutSize;
+    INT           otmsStrikeoutPosition;
+    INT           otmsUnderscoreSize;
+    INT           otmsUnderscorePosition;
+    LPSTR           otmpFamilyName;
+    LPSTR           otmpFaceName;
+    LPSTR           otmpStyleName;
+    LPSTR           otmpFullName;
+} OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW;
+
+DECL_WINELIB_TYPE_AW(OUTLINETEXTMETRIC)
+DECL_WINELIB_TYPE_AW(POUTLINETEXTMETRIC)
+DECL_WINELIB_TYPE_AW(LPOUTLINETEXTMETRIC)
+
+typedef struct
+{
+    INT       x;
+    INT       y;
+    UINT      n;
+    LPCSTR    lpstr;
+    UINT      uiFlags;
+    RECT      rcl;
+    INT       *pdx;
+} POLYTEXTA, *PPOLYTEXTA, *LPPOLYTEXTA;
+
+typedef struct
+{
+    INT       x;
+    INT       y;
+    UINT      n;
+    LPCWSTR   lpstr;
+    UINT      uiFlags;
+    RECT      rcl;
+    INT       *pdx;
+} POLYTEXTW, *PPOLYTEXTW, *LPPOLYTEXTW;
+
+DECL_WINELIB_TYPE_AW(POLYTEXT)
+DECL_WINELIB_TYPE_AW(PPOLYTEXT)
+DECL_WINELIB_TYPE_AW(LPPOLYTEXT)
+
+
+/* ntmFlags field flags */
+#define NTM_REGULAR     __MSABI_LONG(0x00000040)
+#define NTM_BOLD        __MSABI_LONG(0x00000020)
+#define NTM_ITALIC      __MSABI_LONG(0x00000001)
+
+#define NTM_NONNEGATIVE_AC  0x00010000
+#define NTM_PS_OPENTYPE     0x00020000
+#define NTM_TT_OPENTYPE     0x00040000
+#define NTM_MULTIPLEMASTER  0x00080000
+#define NTM_TYPE1           0x00100000
+#define NTM_DSIG            0x00200000
+
+
+typedef struct
+{
+    LONG      tmHeight;
+    LONG      tmAscent;
+    LONG      tmDescent;
+    LONG      tmInternalLeading;
+    LONG      tmExternalLeading;
+    LONG      tmAveCharWidth;
+    LONG      tmMaxCharWidth;
+    LONG      tmWeight;
+    LONG      tmOverhang;
+    LONG      tmDigitizedAspectX;
+    LONG      tmDigitizedAspectY;
+    BYTE      tmFirstChar;
+    BYTE      tmLastChar;
+    BYTE      tmDefaultChar;
+    BYTE      tmBreakChar;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+    DWORD     ntmFlags;
+    UINT    ntmSizeEM;
+    UINT    ntmCellHeight;
+    UINT    ntmAvgWidth;
+} NEWTEXTMETRICA, *PNEWTEXTMETRICA, *LPNEWTEXTMETRICA;
+
+typedef struct
+{
+    LONG      tmHeight;
+    LONG      tmAscent;
+    LONG      tmDescent;
+    LONG      tmInternalLeading;
+    LONG      tmExternalLeading;
+    LONG      tmAveCharWidth;
+    LONG      tmMaxCharWidth;
+    LONG      tmWeight;
+    LONG      tmOverhang;
+    LONG      tmDigitizedAspectX;
+    LONG      tmDigitizedAspectY;
+    WCHAR     tmFirstChar;
+    WCHAR     tmLastChar;
+    WCHAR     tmDefaultChar;
+    WCHAR     tmBreakChar;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+    DWORD     ntmFlags;
+    UINT      ntmSizeEM;
+    UINT      ntmCellHeight;
+    UINT      ntmAvgWidth;
+} NEWTEXTMETRICW, *PNEWTEXTMETRICW, *LPNEWTEXTMETRICW;
+
+DECL_WINELIB_TYPE_AW(NEWTEXTMETRIC)
+DECL_WINELIB_TYPE_AW(PNEWTEXTMETRIC)
+DECL_WINELIB_TYPE_AW(LPNEWTEXTMETRIC)
+
+typedef struct
+{
+    NEWTEXTMETRICA	ntmTm;
+    FONTSIGNATURE       ntmFontSig;
+} NEWTEXTMETRICEXA;
+
+typedef struct
+{
+    NEWTEXTMETRICW	ntmTm;
+    FONTSIGNATURE       ntmFontSig;
+} NEWTEXTMETRICEXW;
+
+DECL_WINELIB_TYPE_AW(NEWTEXTMETRICEX)
+
+#if defined(STRICT)
+
+#if !defined(NOTEXTMETRIC)
+typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM);
+typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const TEXTMETRICW *, DWORD, LPARAM);
+#else /* !defined(NOTEXTMETRIC) */
+typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const VOID *, DWORD, LPARAM);
+typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const VOID *, DWORD, LPARAM);
+#endif /* !defined(NOTEXTMETRIC) */
+DECL_WINELIB_TYPE_AW(OLDFONTENUMPROC)
+
+typedef OLDFONTENUMPROCA FONTENUMPROCA;
+typedef OLDFONTENUMPROCW FONTENUMPROCW;
+DECL_WINELIB_TYPE_AW(FONTENUMPROC)
+
+typedef INT (CALLBACK *GOBJENUMPROC)(LPVOID, LPARAM);
+typedef VOID (CALLBACK *LINEDDAPROC)(INT, INT, LPARAM);
+
+#else /* defined(STRICT) */
+
+typedef FARPROC OLDFONTENUMPROC;
+
+typedef FARPROC FONTENUMPROCA;
+typedef FARPROC FONTENUMPROCW;
+DECL_WINELIB_TYPE_AW(FONTENUMPROC)
+
+typedef FARPROC GOBJENUMPROC;
+typedef FARPROC LINEDDAPROC;
+
+#endif /* defined(STRICT) */
+
+  /* tmPitchAndFamily bits */
+#define TMPF_FIXED_PITCH    1		/* means variable pitch */
+#define TMPF_VECTOR	    2
+#define TMPF_TRUETYPE	    4
+#define TMPF_DEVICE	    8
+
+  /* Text alignment */
+#define TA_NOUPDATECP       0x00
+#define TA_UPDATECP         0x01
+#define TA_LEFT             0x00
+#define TA_RIGHT            0x02
+#define TA_CENTER           0x06
+#define TA_TOP              0x00
+#define TA_BOTTOM           0x08
+#define TA_BASELINE         0x18
+#define TA_RTLREADING        0x100
+#define TA_MASK             TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING
+
+#define VTA_BASELINE        TA_BASELINE
+#define VTA_LEFT            TA_BOTTOM
+#define VTA_RIGHT           TA_TOP
+#define VTA_CENTER          TA_CENTER
+#define VTA_BOTTOM          TA_RIGHT
+#define VTA_TOP             TA_LEFT
+
+
+  /* ExtTextOut() parameters */
+#define ETO_GRAYED          0x0001
+#define ETO_OPAQUE          0x0002
+#define ETO_CLIPPED         0x0004
+#define ETO_GLYPH_INDEX     0x0010
+#define ETO_RTLREADING      0x0080
+#define ETO_NUMERICSLOCAL   0x0400
+#define ETO_NUMERICSLATIN   0x0800
+#define ETO_IGNORELANGUAGE  0x1000
+#define ETO_PDY             0x2000
+
+#define ASPECT_FILTERING    0x0001
+
+  /* for GetGlyphIndices() */
+#define GGI_MARK_NONEXISTING_GLYPHS  0x0001
+
+typedef struct
+{
+    UINT	gmBlackBoxX;
+    UINT	gmBlackBoxY;
+    POINT	gmptGlyphOrigin;
+    SHORT	gmCellIncX;
+    SHORT	gmCellIncY;
+} GLYPHMETRICS, *LPGLYPHMETRICS;
+
+
+#define GGO_METRICS         0
+#define GGO_BITMAP          1
+#define GGO_NATIVE          2
+#define GGO_BEZIER          3
+#define GGO_GRAY2_BITMAP    4
+#define GGO_GRAY4_BITMAP    5
+#define GGO_GRAY8_BITMAP    6
+#define GGO_GLYPH_INDEX     0x80
+#define GGO_UNHINTED        0x100
+
+#ifdef __WINESRC__
+#define WINE_GGO_GRAY16_BITMAP 0x10
+#define WINE_GGO_HRGB_BITMAP   0x11
+#define WINE_GGO_HBGR_BITMAP   0x12
+#define WINE_GGO_VRGB_BITMAP   0x13
+#define WINE_GGO_VBGR_BITMAP   0x14
+#endif
+
+typedef struct
+{
+    WORD    fract;
+    SHORT   value;
+} FIXED;
+
+typedef struct tagPOINTFX
+{
+	FIXED x;
+	FIXED y;
+} POINTFX, *LPPOINTFX;
+
+typedef struct tagTTPOLYCURVE
+{
+	WORD wType;
+	WORD cpfx;
+	POINTFX apfx[1];
+} TTPOLYCURVE, *LPTTPOLYCURVE;
+
+typedef struct tagTTPOLYGONHEADER
+{
+	DWORD cb;
+	DWORD dwType;
+	POINTFX pfxStart;
+} TTPOLYGONHEADER, *LPTTPOLYGONHEADER;
+
+typedef struct
+{
+     FIXED  eM11;
+     FIXED  eM12;
+     FIXED  eM21;
+     FIXED  eM22;
+} MAT2, *LPMAT2;
+
+  /* for GetCharABCWidths() */
+typedef struct
+{
+    INT   abcA;
+    UINT  abcB;
+    INT   abcC;
+} ABC, *PABC, *LPABC;
+
+
+  /* for GetCharacterPlacement () */
+
+#define GCP_DBCS          0x0001
+#define GCP_REORDER       0x0002
+#define GCP_USEKERNING    0x0008
+#define GCP_GLYPHSHAPE    0x0010
+#define GCP_LIGATE        0x0020
+#define GCP_DIACRITIC     0x0100
+#define GCP_KASHIDA       0x0200
+#define GCP_ERROR         0x8000
+#define FLI_MASK          0x103b
+#define GCP_JUSTIFY         __MSABI_LONG(0x00010000)
+#define FLI_GLYPHS          __MSABI_LONG(0x00040000)
+#define GCP_CLASSIN         __MSABI_LONG(0x00080000)
+#define GCP_MAXEXTENT       __MSABI_LONG(0x00100000)
+#define GCP_JUSTIFYIN       __MSABI_LONG(0x00200000)
+#define GCP_DISPLAYZWG      __MSABI_LONG(0x00400000)
+#define GCP_SYMSWAPOFF      __MSABI_LONG(0x00800000)
+#define GCP_NUMERICOVERRIDE __MSABI_LONG(0x01000000)
+#define GCP_NEUTRALOVERRIDE __MSABI_LONG(0x02000000)
+#define GCP_NUMERICSLATIN   __MSABI_LONG(0x04000000)
+#define GCP_NUMERICSLOCAL   __MSABI_LONG(0x08000000)
+
+#define GCPCLASS_LATIN                     1
+#define GCPCLASS_HEBREW                    2
+#define GCPCLASS_ARABIC                    3
+#define GCPCLASS_NEUTRAL                   4
+#define GCPCLASS_LOCALNUMBER               5
+#define GCPCLASS_LATINNUMBER               6
+#define GCPCLASS_LATINNUMERICTERMINATOR    7
+#define GCPCLASS_LATINNUMERICSEPARATOR     8
+#define GCPCLASS_NUMERICSEPARATOR          9
+#define GCPCLASS_PREBOUNDLTR               0x80
+#define GCPCLASS_PREBOUNDRLT               0x40
+#define GCPCLASS_POSTBOUNDLTR              0x20
+#define GCPCLASS_POSTBOUNDRTL              0x10
+
+#define GCPGLYPH_LINKBEFORE                0x8000
+#define GCPGLYPH_LINKAFTER                 0x4000
+
+
+typedef struct tagGCP_RESULTSA{
+    DWORD  lStructSize;
+    LPSTR  lpOutString;
+    UINT   *lpOrder;
+    INT    *lpDx;
+    INT    *lpCaretPos;
+    LPSTR  lpClass;
+    LPWSTR lpGlyphs;
+    UINT   nGlyphs;
+    UINT   nMaxFit;
+} GCP_RESULTSA, *LPGCP_RESULTSA;
+
+typedef struct tagGCP_RESULTSW
+{
+    DWORD  lStructSize;
+    LPWSTR lpOutString;
+    UINT   *lpOrder;
+    INT    *lpDx;
+    INT    *lpCaretPos;
+    LPSTR  lpClass;
+    LPWSTR lpGlyphs;
+    UINT   nGlyphs;
+    UINT   nMaxFit;
+} GCP_RESULTSW, *LPGCP_RESULTSW;
+
+DECL_WINELIB_TYPE_AW(GCP_RESULTS)
+DECL_WINELIB_TYPE_AW(LPGCP_RESULTS)
+
+  /* Rasterizer status */
+typedef struct
+{
+    SHORT nSize;
+    SHORT wFlags;
+    SHORT nLanguageID;
+} RASTERIZER_STATUS, *LPRASTERIZER_STATUS;
+
+#define TT_AVAILABLE        0x0001
+#define TT_ENABLED          0x0002
+
+#define TT_PRIM_LINE    1
+#define TT_PRIM_QSPLINE 2
+#define TT_PRIM_CSPLINE 3
+#define TT_POLYGON_TYPE 24
+
+  /* OpenGL defines */
+typedef struct {
+  FLOAT      x;
+  FLOAT      y;
+} POINTFLOAT, *PPOINTFLOAT;
+
+typedef struct {
+  FLOAT      gmfBlackBoxX;
+  FLOAT      gmfBlackBoxY;
+  POINTFLOAT gmfptGlyphOrigin;
+  FLOAT      gmfCellIncX;
+  FLOAT      gmfCellIncY;
+} GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
+
+typedef struct {
+  WORD  nSize;
+  WORD  nVersion;
+  DWORD dwFlags;
+  BYTE  iPixelType;
+  BYTE  cColorBits;
+  BYTE  cRedBits;
+  BYTE  cRedShift;
+  BYTE  cGreenBits;
+  BYTE  cGreenShift;
+  BYTE  cBlueBits;
+  BYTE  cBlueShift;
+  BYTE  cAlphaBits;
+  BYTE  cAlphaShift;
+  BYTE  cAccumBits;
+  BYTE  cAccumRedBits;
+  BYTE  cAccumGreenBits;
+  BYTE  cAccumBlueBits;
+  BYTE  cAccumAlphaBits;
+  BYTE  cDepthBits;
+  BYTE  cStencilBits;
+  BYTE  cAuxBuffers;
+  BYTE  iLayerPlane;
+  BYTE  bReserved;
+  COLORREF crTransparent;
+} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
+
+/* Get/SetSystemPaletteUse() values */
+#define SYSPAL_ERROR        0
+#define SYSPAL_STATIC       1
+#define SYSPAL_NOSTATIC     2
+#define SYSPAL_NOSTATIC256  3
+    
+#ifndef _PALETTEENTRY_DEFINED
+#define _PALETTEENTRY_DEFINED
+typedef struct tagPALETTEENTRY
+{
+	BYTE peRed, peGreen, peBlue, peFlags;
+} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;
+#endif
+
+/* Logical palette entry flags */
+#define PC_RESERVED     0x01
+#define PC_EXPLICIT     0x02
+#define PC_NOCOLLAPSE   0x04
+
+#ifndef _LOGPALETTE_DEFINED
+#define _LOGPALETTE_DEFINED
+typedef struct tagLOGPALETTE
+{
+    WORD           palVersion;
+    WORD           palNumEntries;
+    PALETTEENTRY   palPalEntry[1];
+} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE, *NPLOGPALETTE;
+#endif
+
+  /* Pens */
+
+typedef struct
+{
+    UINT     lopnStyle;
+    POINT    lopnWidth;
+    COLORREF lopnColor;
+} LOGPEN, *LPLOGPEN;
+
+
+typedef struct tagEXTLOGPEN
+{
+    DWORD    elpPenStyle;
+    DWORD    elpWidth;
+    UINT     elpBrushStyle;
+    COLORREF elpColor;
+    ULONG_PTR elpHatch;
+    DWORD elpNumEntries;
+    DWORD elpStyleEntry[1];
+} EXTLOGPEN, *PEXTLOGPEN, *NPEXTLOGPEN, *LPEXTLOGPEN;
+
+#define PS_SOLID         0x00000000
+#define PS_DASH          0x00000001
+#define PS_DOT           0x00000002
+#define PS_DASHDOT       0x00000003
+#define PS_DASHDOTDOT    0x00000004
+#define PS_NULL          0x00000005
+#define PS_INSIDEFRAME   0x00000006
+#define PS_USERSTYLE     0x00000007
+#define PS_ALTERNATE     0x00000008
+#define PS_STYLE_MASK    0x0000000f
+
+#define PS_ENDCAP_ROUND  0x00000000
+#define PS_ENDCAP_SQUARE 0x00000100
+#define PS_ENDCAP_FLAT   0x00000200
+#define PS_ENDCAP_MASK   0x00000f00
+
+#define PS_JOIN_ROUND    0x00000000
+#define PS_JOIN_BEVEL    0x00001000
+#define PS_JOIN_MITER    0x00002000
+#define PS_JOIN_MASK     0x0000f000
+
+#define PS_COSMETIC      0x00000000
+#define PS_GEOMETRIC     0x00010000
+#define PS_TYPE_MASK     0x000f0000
+
+  /* Regions */
+
+#define ERROR             0
+#define NULLREGION        1
+#define SIMPLEREGION      2
+#define COMPLEXREGION     3
+#define RGN_ERROR         ERROR
+
+#define RGN_AND           1
+#define RGN_OR            2
+#define RGN_XOR           3
+#define RGN_DIFF          4
+#define RGN_COPY          5
+#define RGN_MIN           RGN_AND
+#define RGN_MAX           RGN_COPY
+
+#define SYSRGN            4
+
+  /* Device contexts */
+
+  /* Polygon modes */
+#define ALTERNATE         1
+#define WINDING           2
+#define POLYFILL_LAST     2
+
+/* Background modes */
+/* Apparently some broken svr4 includes define TRANSPARENT */
+#undef TRANSPARENT
+#define TRANSPARENT       1
+#define OPAQUE            2
+#define BKMODE_LAST       2
+
+  /* Graphics Modes */
+#define GM_COMPATIBLE     1
+#define GM_ADVANCED       2
+#define GM_LAST           2
+
+  /* Arc direction modes */
+#define AD_COUNTERCLOCKWISE 1
+#define AD_CLOCKWISE        2
+
+  /* Map modes */
+#define MM_TEXT		  1
+#define MM_LOMETRIC	  2
+#define MM_HIMETRIC	  3
+#define MM_LOENGLISH	  4
+#define MM_HIENGLISH	  5
+#define MM_TWIPS	  6
+#define MM_ISOTROPIC	  7
+#define MM_ANISOTROPIC	  8
+
+#define MM_MIN            MM_TEXT
+#define MM_MAX            MM_ANISOTROPIC
+#define MM_MAX_FIXEDSCALE MM_TWIPS
+
+  /* Coordinate modes */
+#define ABSOLUTE          1
+#define RELATIVE          2
+
+  /* Flood fill modes */
+#define FLOODFILLBORDER   0
+#define FLOODFILLSURFACE  1
+
+  /* Device parameters for GetDeviceCaps() */
+#define DRIVERVERSION     0
+#define TECHNOLOGY        2
+#define HORZSIZE          4
+#define VERTSIZE          6
+#define HORZRES           8
+#define VERTRES           10
+#define BITSPIXEL         12
+#define PLANES            14
+#define NUMBRUSHES        16
+#define NUMPENS           18
+#define NUMMARKERS        20
+#define NUMFONTS          22
+#define NUMCOLORS         24
+#define PDEVICESIZE       26
+#define CURVECAPS         28
+#define LINECAPS          30
+#define POLYGONALCAPS     32
+#define TEXTCAPS          34
+#define CLIPCAPS          36
+#define RASTERCAPS        38
+#define ASPECTX           40
+#define ASPECTY           42
+#define ASPECTXY          44
+#define LOGPIXELSX        88
+#define LOGPIXELSY        90
+#define CAPS1             94
+#define SIZEPALETTE       104
+#define NUMRESERVED       106
+#define COLORRES          108
+
+#define PHYSICALWIDTH     110
+#define PHYSICALHEIGHT    111
+#define PHYSICALOFFSETX   112
+#define PHYSICALOFFSETY   113
+#define SCALINGFACTORX    114
+#define SCALINGFACTORY    115
+#define VREFRESH          116
+#define DESKTOPVERTRES    117
+#define DESKTOPHORZRES    118
+#define BLTALIGNMENT      119
+#define SHADEBLENDCAPS    120
+#define COLORMGMTCAPS     121
+
+/* TECHNOLOGY */
+#define DT_PLOTTER        0
+#define DT_RASDISPLAY     1
+#define DT_RASPRINTER     2
+#define DT_RASCAMERA      3
+#define DT_CHARSTREAM     4
+#define DT_METAFILE       5
+#define DT_DISPFILE       6
+
+/* CURVECAPS */
+#define CC_NONE           0x0000
+#define CC_CIRCLES        0x0001
+#define CC_PIE            0x0002
+#define CC_CHORD          0x0004
+#define CC_ELLIPSES       0x0008
+#define CC_WIDE           0x0010
+#define CC_STYLED         0x0020
+#define CC_WIDESTYLED     0x0040
+#define CC_INTERIORS      0x0080
+#define CC_ROUNDRECT      0x0100
+
+/* LINECAPS */
+#define LC_NONE           0x0000
+#define LC_POLYLINE       0x0002
+#define LC_MARKER         0x0004
+#define LC_POLYMARKER     0x0008
+#define LC_WIDE           0x0010
+#define LC_STYLED         0x0020
+#define LC_WIDESTYLED     0x0040
+#define LC_INTERIORS      0x0080
+
+/* POLYGONALCAPS */
+#define PC_NONE           0x0000
+#define PC_POLYGON        0x0001
+#define PC_RECTANGLE      0x0002
+#define PC_WINDPOLYGON    0x0004
+#define PC_TRAPEZOID      0x0004
+#define PC_SCANLINE       0x0008
+#define PC_WIDE           0x0010
+#define PC_STYLED         0x0020
+#define PC_WIDESTYLED     0x0040
+#define PC_INTERIORS      0x0080
+#define PC_POLYPOLYGON    0x0100
+#define PC_PATHS          0x0200
+
+/* TEXTCAPS */
+#define TC_OP_CHARACTER   0x0001
+#define TC_OP_STROKE      0x0002
+#define TC_CP_STROKE      0x0004
+#define TC_CR_90          0x0008
+#define TC_CR_ANY         0x0010
+#define TC_SF_X_YINDEP    0x0020
+#define TC_SA_DOUBLE      0x0040
+#define TC_SA_INTEGER     0x0080
+#define TC_SA_CONTIN      0x0100
+#define TC_EA_DOUBLE      0x0200
+#define TC_IA_ABLE        0x0400
+#define TC_UA_ABLE        0x0800
+#define TC_SO_ABLE        0x1000
+#define TC_RA_ABLE        0x2000
+#define TC_VA_ABLE        0x4000
+#define TC_RESERVED       0x8000
+#define TC_SCROLLBLT      0x00010000
+
+/* CLIPCAPS */
+#define CP_NONE           0x0000
+#define CP_RECTANGLE      0x0001
+#define CP_REGION         0x0002
+
+/* RASTERCAPS */
+#define RC_NONE           0x0000
+#define RC_BITBLT         0x0001
+#define RC_BANDING        0x0002
+#define RC_SCALING        0x0004
+#define RC_BITMAP64       0x0008
+#define RC_GDI20_OUTPUT   0x0010
+#define RC_GDI20_STATE    0x0020
+#define RC_SAVEBITMAP     0x0040
+#define RC_DI_BITMAP      0x0080
+#define RC_PALETTE        0x0100
+#define RC_DIBTODEV       0x0200
+#define RC_BIGFONT        0x0400
+#define RC_STRETCHBLT     0x0800
+#define RC_FLOODFILL      0x1000
+#define RC_STRETCHDIB     0x2000
+#define RC_OP_DX_OUTPUT   0x4000
+#define RC_DEVBITS        0x8000
+
+/* CAPS1 */
+#define C1_TRANSPARENT    0x0001
+#define TC_TT_ABLE        0x0002
+#define C1_TT_CR_ANY      0x0004
+#define C1_EMF_COMPLIANT  0x0008
+#define C1_DIBENGINE      0x0010
+#define C1_GAMMA_RAMP     0x0040
+#define C1_REINIT_ABLE    0x0080
+#define C1_GLYPH_INDEX    0x0100
+#define C1_BIT_PACKED     0x0200
+#define C1_BYTE_PACKED    0x0400
+#define C1_COLORCURSOR    0x0800
+#define C1_CMYK_ABLE      0x1000
+#define C1_SLOW_CARD      0x2000
+
+/* SHADEBLENDCAPS */
+#define SB_NONE           0x0000
+#define SB_CONST_ALPHA    0x0001
+#define SB_PIXEL_ALPHA    0x0002
+#define SB_PREMULT_ALPHA  0x0004
+#define SB_GRAD_RECT      0x0010
+#define SB_GRAD_TRI       0x0020
+
+  /* Device-independent bitmaps */
+
+typedef struct tagRGBQUAD {
+  BYTE rgbBlue;
+  BYTE rgbGreen;
+  BYTE rgbRed;
+  BYTE rgbReserved;
+} RGBQUAD, *LPRGBQUAD;
+
+typedef struct tagRGBTRIPLE {
+  BYTE rgbtBlue;
+  BYTE rgbtGreen;
+  BYTE rgbtRed;
+} RGBTRIPLE;
+
+#include <pshpack2.h>
+typedef struct
+{
+    WORD    bfType;
+    DWORD   bfSize;
+    WORD    bfReserved1;
+    WORD    bfReserved2;
+    DWORD   bfOffBits;
+} BITMAPFILEHEADER, *PBITMAPFILEHEADER, *LPBITMAPFILEHEADER;
+#include <poppack.h>
+
+#define MAKEPOINTS(l)  (*((POINTS *)&(l)))
+
+typedef struct
+{
+    DWORD 	biSize;
+    LONG  	biWidth;
+    LONG  	biHeight;
+    WORD 	biPlanes;
+    WORD 	biBitCount;
+    DWORD 	biCompression;
+    DWORD 	biSizeImage;
+    LONG  	biXPelsPerMeter;
+    LONG  	biYPelsPerMeter;
+    DWORD 	biClrUsed;
+    DWORD 	biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;
+
+typedef struct
+{
+    DWORD        bV4Size;
+    LONG         bV4Width;
+    LONG         bV4Height;
+    WORD         bV4Planes;
+    WORD         bV4BitCount;
+    DWORD        bV4V4Compression;
+    DWORD        bV4SizeImage;
+    LONG         bV4XPelsPerMeter;
+    LONG         bV4YPelsPerMeter;
+    DWORD        bV4ClrUsed;
+    DWORD        bV4ClrImportant;
+    DWORD        bV4RedMask;
+    DWORD        bV4GreenMask;
+    DWORD        bV4BlueMask;
+    DWORD        bV4AlphaMask;
+    DWORD        bV4CSType;
+    CIEXYZTRIPLE bV4Endpoints;
+    DWORD        bV4GammaRed;
+    DWORD        bV4GammaGreen;
+    DWORD        bV4GammaBlue;
+} BITMAPV4HEADER, *PBITMAPV4HEADER;
+
+typedef struct {
+    DWORD        bV5Size;
+    LONG         bV5Width;
+    LONG         bV5Height;
+    WORD         bV5Planes;
+    WORD         bV5BitCount;
+    DWORD        bV5Compression;
+    DWORD        bV5SizeImage;
+    LONG         bV5XPelsPerMeter;
+    LONG         bV5YPelsPerMeter;
+    DWORD        bV5ClrUsed;
+    DWORD        bV5ClrImportant;
+    DWORD        bV5RedMask;
+    DWORD        bV5GreenMask;
+    DWORD        bV5BlueMask;
+    DWORD        bV5AlphaMask;
+    DWORD        bV5CSType;
+    CIEXYZTRIPLE bV5Endpoints;
+    DWORD        bV5GammaRed;
+    DWORD        bV5GammaGreen;
+    DWORD        bV5GammaBlue;
+    DWORD        bV5Intent;
+    DWORD        bV5ProfileData;
+    DWORD        bV5ProfileSize;
+    DWORD        bV5Reserved;
+} BITMAPV5HEADER, *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
+
+#define PROFILE_LINKED   0x4c494e4b     /* 'LINK' */
+#define PROFILE_EMBEDDED 0x4d424544     /* 'MBED' */
+
+
+  /* biCompression */
+#define BI_RGB           0
+#define BI_RLE8          1
+#define BI_RLE4          2
+#define BI_BITFIELDS     3
+#define BI_JPEG          4
+#define BI_PNG           5
+
+typedef struct tagBITMAPINFO
+{
+    BITMAPINFOHEADER bmiHeader;
+    RGBQUAD          bmiColors[1];
+} BITMAPINFO, *PBITMAPINFO, *LPBITMAPINFO;
+
+typedef struct
+{
+    DWORD   bcSize;
+    WORD    bcWidth;
+    WORD    bcHeight;
+    WORD    bcPlanes;
+    WORD    bcBitCount;
+} BITMAPCOREHEADER, *PBITMAPCOREHEADER, *LPBITMAPCOREHEADER;
+
+typedef struct
+{
+    BITMAPCOREHEADER bmciHeader;
+    RGBTRIPLE        bmciColors[1];
+} BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO;
+
+#define DIB_RGB_COLORS   0
+#define DIB_PAL_COLORS   1
+#define CBM_INIT         4
+
+typedef struct
+{
+	BITMAP		dsBm;
+	BITMAPINFOHEADER	dsBmih;
+	DWORD			dsBitfields[3];
+	HANDLE		dshSection;
+	DWORD			dsOffset;
+} DIBSECTION, *PDIBSECTION, *LPDIBSECTION;
+
+  /* Stock GDI objects for GetStockObject() */
+
+#define WHITE_BRUSH	    0
+#define LTGRAY_BRUSH	    1
+#define GRAY_BRUSH	    2
+#define DKGRAY_BRUSH	    3
+#define BLACK_BRUSH	    4
+#define NULL_BRUSH	    5
+#define HOLLOW_BRUSH	    5
+#define WHITE_PEN	    6
+#define BLACK_PEN	    7
+#define NULL_PEN	    8
+#define OEM_FIXED_FONT	    10
+#define ANSI_FIXED_FONT     11
+#define ANSI_VAR_FONT	    12
+#define SYSTEM_FONT	    13
+#define DEVICE_DEFAULT_FONT 14
+#define DEFAULT_PALETTE     15
+#define SYSTEM_FIXED_FONT   16
+#define DEFAULT_GUI_FONT    17
+#define DC_BRUSH            18
+#define DC_PEN              19
+
+#define STOCK_LAST          19
+
+#define CLR_INVALID         0xffffffff
+
+typedef USHORT COLOR16;
+
+typedef struct _TRIVERTEX
+{
+    LONG    x;
+    LONG    y;
+    COLOR16 Red;
+    COLOR16 Green;
+    COLOR16 Blue;
+    COLOR16 Alpha;
+} TRIVERTEX, *PTRIVERTEX, *LPTRIVERTEX;
+
+typedef struct _GRADIENT_TRIANGLE
+{
+    ULONG Vertex1;
+    ULONG Vertex2;
+    ULONG Vertex3;
+} GRADIENT_TRIANGLE, *PGRADIENT_TRIANGLE, *LPGRADIENT_TRIANGLE;
+
+typedef struct _GRADIENT_RECT
+{
+    ULONG UpperLeft;
+    ULONG LowerRight;
+} GRADIENT_RECT, *PGRADIENT_RECT, *LPGRADIENT_RECT;
+
+#define AC_SRC_OVER  0x00
+#define AC_SRC_ALPHA 0x01
+
+typedef struct _BLENDFUNCTION
+{
+    BYTE BlendOp;
+    BYTE BlendFlags;
+    BYTE SourceConstantAlpha;
+    BYTE AlphaFormat;
+} BLENDFUNCTION, *PBLENDFUNCTION;
+
+#define GRADIENT_FILL_RECT_H      0x00000000
+#define GRADIENT_FILL_RECT_V      0x00000001
+#define GRADIENT_FILL_TRIANGLE    0x00000002
+#define GRADIENT_FILL_OP_FLAG     0x000000ff
+
+
+/* Metafile header structure */
+#include <pshpack2.h>
+typedef struct
+{
+    WORD       mtType;
+    WORD       mtHeaderSize;
+    WORD       mtVersion;
+    DWORD      mtSize;
+    WORD       mtNoObjects;
+    DWORD      mtMaxRecord;
+    WORD       mtNoParameters;
+} METAHEADER, *PMETAHEADER, *LPMETAHEADER;
+#include <poppack.h>
+
+/* Metafile typical record structure */
+typedef struct
+{
+    DWORD      rdSize;
+    WORD       rdFunction;
+    WORD       rdParm[1];
+} METARECORD, *PMETARECORD, *LPMETARECORD;
+
+/* Handle table structure */
+
+typedef struct
+{
+    HGDIOBJ objectHandle[1];
+} HANDLETABLE, *PHANDLETABLE, *LPHANDLETABLE;
+
+
+/* Clipboard metafile picture structure */
+typedef struct
+{
+    LONG       mm;
+    LONG       xExt;
+    LONG       yExt;
+    HMETAFILE  hMF;
+} METAFILEPICT, *LPMETAFILEPICT;
+
+
+/* Metafile functions */
+#define META_SETBKCOLOR              0x0201
+#define META_SETBKMODE               0x0102
+#define META_SETMAPMODE              0x0103
+#define META_SETROP2                 0x0104
+#define META_SETRELABS               0x0105
+#define META_SETPOLYFILLMODE         0x0106
+#define META_SETSTRETCHBLTMODE       0x0107
+#define META_SETTEXTCHAREXTRA        0x0108
+#define META_SETTEXTCOLOR            0x0209
+#define META_SETTEXTJUSTIFICATION    0x020A
+#define META_SETWINDOWORG            0x020B
+#define META_SETWINDOWEXT            0x020C
+#define META_SETVIEWPORTORG          0x020D
+#define META_SETVIEWPORTEXT          0x020E
+#define META_OFFSETWINDOWORG         0x020F
+#define META_SCALEWINDOWEXT          0x0410
+#define META_OFFSETVIEWPORTORG       0x0211
+#define META_SCALEVIEWPORTEXT        0x0412
+#define META_LINETO                  0x0213
+#define META_MOVETO                  0x0214
+#define META_EXCLUDECLIPRECT         0x0415
+#define META_INTERSECTCLIPRECT       0x0416
+#define META_ARC                     0x0817
+#define META_ELLIPSE                 0x0418
+#define META_FLOODFILL               0x0419
+#define META_PIE                     0x081A
+#define META_RECTANGLE               0x041B
+#define META_ROUNDRECT               0x061C
+#define META_PATBLT                  0x061D
+#define META_SAVEDC                  0x001E
+#define META_SETPIXEL                0x041F
+#define META_OFFSETCLIPRGN           0x0220
+#define META_TEXTOUT                 0x0521
+#define META_BITBLT                  0x0922
+#define META_STRETCHBLT              0x0B23
+#define META_POLYGON                 0x0324
+#define META_POLYLINE                0x0325
+#define META_ESCAPE                  0x0626
+#define META_RESTOREDC               0x0127
+#define META_FILLREGION              0x0228
+#define META_FRAMEREGION             0x0429
+#define META_INVERTREGION            0x012A
+#define META_PAINTREGION             0x012B
+#define META_SELECTCLIPREGION        0x012C
+#define META_SELECTOBJECT            0x012D
+#define META_SETTEXTALIGN            0x012E
+#define META_DRAWTEXT                0x062F
+#define META_CHORD                   0x0830
+#define META_SETMAPPERFLAGS          0x0231
+#define META_EXTTEXTOUT              0x0A32
+#define META_SETDIBTODEV             0x0D33
+#define META_SELECTPALETTE           0x0234
+#define META_REALIZEPALETTE          0x0035
+#define META_ANIMATEPALETTE          0x0436
+#define META_SETPALENTRIES           0x0037
+#define META_POLYPOLYGON             0x0538
+#define META_RESIZEPALETTE           0x0139
+#define META_DIBBITBLT               0x0940
+#define META_DIBSTRETCHBLT           0x0B41
+#define META_DIBCREATEPATTERNBRUSH   0x0142
+#define META_STRETCHDIB              0x0F43
+#define META_EXTFLOODFILL            0x0548
+#define META_RESETDC                 0x014C
+#define META_STARTDOC                0x014D
+#define META_STARTPAGE               0x004F
+#define META_ENDPAGE                 0x0050
+#define META_ABORTDOC                0x0052
+#define META_ENDDOC                  0x005E
+#define META_DELETEOBJECT            0x01F0
+#define META_CREATEPALETTE           0x00F7
+#define META_CREATEBRUSH             0x00F8
+#define META_CREATEPATTERNBRUSH      0x01F9
+#define META_CREATEPENINDIRECT       0x02FA
+#define META_CREATEFONTINDIRECT      0x02FB
+#define META_CREATEBRUSHINDIRECT     0x02FC
+#define META_CREATEBITMAPINDIRECT    0x02FD
+#define META_CREATEBITMAP            0x06FE
+#define META_CREATEREGION            0x06FF
+#define META_UNKNOWN                 0x0529  /* FIXME: unknown meta magic */
+
+typedef INT (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,
+                                       INT,LPARAM);
+
+/* enhanced metafile structures and functions */
+
+/* note that ENHMETAHEADER is just a particular kind of ENHMETARECORD,
+   ie. the header is just the first record in the metafile */
+typedef struct {
+    DWORD iType;
+    DWORD nSize;
+    RECTL rclBounds;
+    RECTL rclFrame;
+    DWORD dSignature;
+    DWORD nVersion;
+    DWORD nBytes;
+    DWORD nRecords;
+    WORD  nHandles;
+    WORD  sReserved;
+    DWORD nDescription;
+    DWORD offDescription;
+    DWORD nPalEntries;
+    SIZEL szlDevice;
+    SIZEL szlMillimeters;
+    DWORD cbPixelFormat;
+    DWORD offPixelFormat;
+    DWORD bOpenGL;
+    SIZEL szlMicrometers;
+} ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
+
+typedef struct {
+    DWORD iType;
+    DWORD nSize;
+    DWORD dParm[1];
+} ENHMETARECORD, *LPENHMETARECORD;
+
+typedef struct {
+    DWORD iType;
+    DWORD nSize;
+} EMR, *PEMR;
+
+typedef struct {
+    POINTL ptlReference;
+    DWORD  nChars;
+    DWORD  offString;
+    DWORD  fOptions;
+    RECTL  rcl;
+    DWORD  offDx;
+} EMRTEXT, *PEMRTEXT;
+
+typedef struct {
+    EMR emr;
+} EMRABORTPATH,      *PEMRABORTPATH,
+  EMRBEGINPATH,      *PEMRBEGINPATH,
+  EMRENDPATH,        *PEMRENDPATH,
+  EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,
+  EMRFLATTENPATH,    *PEMRFLATTENPATH,
+  EMRWIDENPATH,      *PEMRWIDENPATH,
+  EMRSETMETARGN,     *PEMRSETMETARGN,
+  EMRSAVEDC,         *PEMRSAVEDC,
+  EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
+
+typedef struct {
+    EMR    emr;
+    POINTL ptlCenter;
+    DWORD  nRadius;
+    FLOAT  eStartAngle;
+    FLOAT  eSweepAngle;
+} EMRANGLEARC, *PEMRANGLEARC;
+
+typedef struct {
+    EMR    emr;
+    RECTL  rclBox;
+    POINTL ptlStart;
+    POINTL ptlEnd;
+} EMRARC,   *PEMRARC,
+  EMRARCTO, *PEMRARCTO,
+  EMRCHORD, *PEMRCHORD,
+  EMRPIE,   *PEMRPIE;
+
+typedef struct {
+    EMR      emr;
+    RECTL    rclBounds;
+    LONG     xDest;
+    LONG     yDest;
+    LONG     cxDest;
+    LONG     cyDest;
+    DWORD    dwRop;
+    LONG     xSrc;
+    LONG     ySrc;
+    XFORM    xformSrc;
+    COLORREF crBkColorSrc;
+    DWORD    iUsageSrc;
+    DWORD    offBmiSrc;
+    DWORD    cbBmiSrc;
+    DWORD    offBitsSrc;
+    DWORD    cbBitsSrc;
+} EMRBITBLT, *PEMRBITBLT;
+
+typedef struct {
+    EMR        emr;
+    DWORD      ihBrush;
+    LOGBRUSH32 lb;
+} EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
+
+typedef struct {
+    EMR            emr;
+    DWORD          ihCS;
+    LOGCOLORSPACEA lcs;
+} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
+
+typedef struct {
+  EMR            emr;
+  DWORD          ihCS;
+  LOGCOLORSPACEW lcs;
+  DWORD          dwFlags;
+  DWORD          cbData;
+  BYTE           Data[1];
+} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;
+
+typedef struct {
+    EMR   emr;
+    DWORD ihBrush;
+    DWORD iUsage;
+    DWORD offBmi;
+    DWORD cbBmi;
+    DWORD offBits;
+    DWORD cbBits;
+} EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;
+
+typedef struct {
+    EMR   emr;
+    DWORD ihBrush;
+    DWORD iUsage;
+    DWORD offBmi;
+    DWORD cbBmi;
+    DWORD offBits;
+    DWORD cbBits;
+} EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
+
+typedef struct {
+    EMR        emr;
+    DWORD      ihPal;
+    LOGPALETTE lgpl;
+} EMRCREATEPALETTE, *PEMRCREATEPALETTE;
+
+typedef struct {
+    EMR    emr;
+    DWORD  ihPen;
+    LOGPEN lopn;
+} EMRCREATEPEN, *PEMRCREATEPEN;
+
+typedef struct {
+    EMR           emr;
+    DWORD         ihCS;
+} EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE,
+  EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
+  EMRSETCOLORSPACE,    *PEMRSETCOLORSPACE;
+
+typedef struct {
+    EMR   emr;
+    DWORD ihObject;
+} EMRDELETEOBJECT, *PEMRDELETEOBJECT,
+  EMRSELECTOBJECT, *PEMRSELECTOBJECT;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBox;
+} EMRELLIPSE,   *PEMRELLIPSE,
+  EMRRECTANGLE, *PEMRRECTANGLE;
+
+typedef struct {
+    EMR   emr;
+    DWORD nPalEntries;
+    DWORD offPalEntries;
+    DWORD nSizeLast;
+} EMREOF, *PEMREOF;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclClip;
+} EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,
+  EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
+
+typedef struct {
+    EMR         emr;
+    DWORD       ihFont;
+    EXTLOGFONTW elfw;
+} EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;
+
+typedef struct {
+    EMR       emr;
+    DWORD     ihPen;
+    DWORD     offBmi;
+    DWORD     cbBmi;
+    DWORD     offBits;
+    DWORD     cbBits;
+    EXTLOGPEN elp;
+} EMREXTCREATEPEN, *PEMREXTCREATEPEN;
+
+typedef struct {
+    EMR      emr;
+    POINTL   ptlStart;
+    COLORREF crColor;
+    DWORD    iMode;
+} EMREXTFLOODFILL, *PEMREXTFLOODFILL;
+
+typedef struct {
+    EMR   emr;
+    DWORD cbRgnData;
+    DWORD iMode;
+    BYTE  RgnData[1];
+} EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
+
+typedef struct {
+    EMR     emr;
+    RECTL   rclBounds;
+    DWORD   iGraphicsMode;
+    FLOAT   exScale;
+    FLOAT   eyScale;
+    EMRTEXT emrtext;
+} EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
+  EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
+
+typedef struct {
+    EMR emr;
+    RECTL rclBounds;
+} EMRFILLPATH,          *PEMRFILLPATH,
+  EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
+  EMRSTROKEPATH,        *PEMRSTROKEPATH;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBounds;
+    DWORD cbRgnData;
+    DWORD ihBrush;
+    BYTE  RgnData[1];
+} EMRFILLRGN, *PEMRFILLRGN;
+
+typedef struct {
+    DWORD dSignature;
+    DWORD nVersion;
+    DWORD cbData;
+    DWORD offData;
+} EMRFORMAT, *PEMRFORMAT;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBounds;
+    DWORD cbRgnData;
+    DWORD ihBrush;
+    SIZEL szlStroke;
+    BYTE  RgnData[1];
+} EMRFRAMERGN, *PEMRFRAMERGN;
+
+typedef struct {
+    EMR   emr;
+    DWORD cbData;
+    BYTE  Data[1];
+} EMRGDICOMMENT, *PEMRGDICOMMENT;
+
+typedef struct {
+    EMR       emr;
+    RECTL     rclBounds;
+    DWORD     nVer;
+    DWORD     nTri;
+    ULONG     ulMode;
+    TRIVERTEX Ver[1];
+} EMRGRADIENTFILL, *PEMRGRADIENTFILL;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBounds;
+    DWORD cbRgnData;
+    BYTE  RgnData[1];
+} EMRINVERTRGN, *PEMRINVERTRGN,
+  EMRPAINTRGN,  *PEMRPAINTRGN;
+
+typedef struct {
+    EMR    emr;
+    POINTL ptl;
+} EMRLINETO,   *PEMRLINETO,
+  EMRMOVETOEX, *PEMRMOVETOEX;
+
+typedef struct {
+    EMR      emr;
+    RECTL    rclBounds;
+    LONG     xDest;
+    LONG     yDest;
+    LONG     cxDest;
+    LONG     cyDest;
+    DWORD    dwRop;
+    LONG     xSrc;
+    LONG     ySrc;
+    XFORM    xformSrc;
+    COLORREF crBkColorSrc;
+    DWORD    iUsageSrc;
+    DWORD    offBmiSrc;
+    DWORD    cbBmiSrc;
+    DWORD    offBitsSrc;
+    DWORD    cbBitsSrc;
+    LONG     xMask;
+    LONG     yMask;
+    DWORD    iUsageMask;
+    DWORD    offBmiMask;
+    DWORD    cbBmiMask;
+    DWORD    offBitsMask;
+    DWORD    cbBitsMask;
+} EMRMASKBLT, *PEMRMASKBLT;
+
+typedef struct {
+    EMR   emr;
+    XFORM xform;
+    DWORD iMode;
+} EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;
+
+typedef struct {
+    EMR    emr;
+    POINTL ptlOffset;
+} EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
+
+typedef struct {
+    EMR      emr;
+    RECTL    rclBounds;
+    POINTL   aptlDest[3];
+    LONG     xSrc;
+    LONG     ySrc;
+    LONG     cxSrc;
+    LONG     cySrc;
+    XFORM    xformSrc;
+    COLORREF crBkColorSrc;
+    DWORD    iUsageSrc;
+    DWORD    offBmiSrc;
+    DWORD    cbBmiSrc;
+    DWORD    offBitsSrc;
+    DWORD    cbBitsSrc;
+    LONG     xMask;
+    LONG     yMask;
+    DWORD    iUsageMask;
+    DWORD    offBmiMask;
+    DWORD    cbBmiMask;
+    DWORD    offBitsMask;
+    DWORD    cbBitsMask;
+} EMRPLGBLT, *PEMRPLGBLT;
+
+typedef struct {
+    EMR    emr;
+    RECTL  rclBounds;
+    DWORD  cptl;
+    POINTL aptl[1];
+} EMRPOLYLINE,     *PEMRPOLYLINE,
+  EMRPOLYBEZIER,   *PEMRPOLYBEZIER,
+  EMRPOLYGON,      *PEMRPOLYGON,
+  EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
+  EMRPOLYLINETO,   *PEMRPOLYLINETO;
+
+typedef struct {
+    EMR    emr;
+    RECTL  rclBounds;
+    DWORD  cpts;
+    POINTS apts[1];
+} EMRPOLYLINE16,     *PEMRPOLYLINE16,
+  EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,
+  EMRPOLYGON16,      *PEMRPOLYGON16,
+  EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
+  EMRPOLYLINETO16,   *PEMRPOLYLINETO16;
+
+typedef struct {
+    EMR    emr;
+    RECTL  rclBounds;
+    DWORD  cpts;
+    POINTS apts[1];
+    BYTE   abTypes[1];
+} EMRPOLYDRAW16, *PEMRPOLYDRAW16;
+
+typedef struct {
+    EMR     emr;
+    RECTL   rclBounds;
+    DWORD   nPolys;
+    DWORD   cpts;
+    DWORD   aPolyCounts[1];
+    POINTS  apts[1];
+} EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
+  EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;
+
+typedef struct {
+    EMR    emr;
+    RECTL  rclBounds;
+    DWORD  cptl;
+    POINTL aptl[1];
+    BYTE   abTypes[1];
+} EMRPOLYDRAW, *PEMRPOLYDRAW;
+
+typedef struct {
+    EMR     emr;
+    RECTL   rclBounds;
+    DWORD   nPolys;
+    DWORD   cptl;
+    DWORD   aPolyCounts[1];
+    POINTL  aptl[1];
+} EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
+  EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;
+
+typedef struct {
+    EMR     emr;
+    RECTL   rclBounds;
+    DWORD   iGraphicsMode;
+    FLOAT   exScale;
+    FLOAT   eyScale;
+    LONG    cStrings;
+    EMRTEXT aemrtext[1];
+} EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
+  EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
+
+typedef struct {
+    EMR   emr;
+    DWORD ihPal;
+    DWORD cEntries;
+} EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
+
+typedef struct {
+    EMR  emr;
+    LONG iRelative;
+} EMRRESTOREDC, *PEMRRESTOREDC;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBox;
+    SIZEL szlCorner;
+} EMRROUNDRECT, *PEMRROUNDRECT;
+
+typedef struct {
+    EMR  emr;
+    LONG xNum;
+    LONG xDenom;
+    LONG yNum;
+    LONG yDenom;
+} EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
+  EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;
+
+typedef struct {
+    EMR   emr;
+    DWORD iMode;
+} EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,
+  EMRSETBKMODE,         *PEMRSETBKMODE,
+  EMRSETMAPMODE,        *PEMRSETMAPMODE,
+  EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,
+  EMRSETROP2,           *PEMRSETROP2,
+  EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
+  EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN,
+  EMRSETICMMODE,        *PEMRSETICMMODE,
+  EMRSETLAYOUT,         *PEMRSETLAYOUT;
+
+typedef struct {
+    EMR   emr;
+    DWORD ihPal;
+} EMRSELECTPALETTE, *PEMRSELECTPALETTE;
+
+typedef struct {
+    EMR   emr;
+    DWORD iArcDirection;
+} EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
+
+typedef struct {
+    EMR      emr;
+    COLORREF crColor;
+} EMRSETBKCOLOR,   *PEMRSETBKCOLOR,
+  EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
+
+typedef struct {
+    EMR   emr;
+    POINTL ptlOrigin;
+} EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX,
+  EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
+  EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX;
+
+typedef struct {
+    EMR  emr;
+    COLORADJUSTMENT ColorAdjustment;
+} EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBounds;
+    LONG  xDest;
+    LONG  yDest;
+    LONG  xSrc;
+    LONG  ySrc;
+    LONG  cxSrc;
+    LONG  cySrc;
+    DWORD offBmiSrc;
+    DWORD cbBmiSrc;
+    DWORD offBitsSrc;
+    DWORD cbBitsSrc;
+    DWORD iUsageSrc;
+    DWORD iStartScan;
+    DWORD cScans;
+} EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
+
+typedef struct {
+    EMR   emr;
+    DWORD dwFlags;
+} EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
+
+typedef struct {
+    EMR   emr;
+    FLOAT eMiterLimit;
+} EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
+
+typedef struct {
+    EMR          emr;
+    DWORD        ihPal;
+    DWORD        iStart;
+    DWORD        cEntries;
+    PALETTEENTRY aPalEntries[1];
+} EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
+
+typedef struct {
+    EMR     emr;
+    POINTL  ptlPixel;
+    COLORREF crColor;
+} EMRSETPIXELV, *PEMRSETPIXELV;
+
+typedef struct {
+    EMR   emr;
+    SIZEL szlExtent;
+} EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
+  EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;
+
+typedef struct {
+    EMR   emr;
+    XFORM xform;
+} EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
+
+typedef struct {
+    EMR      emr;
+    RECTL    rclBounds;
+    LONG     xDest;
+    LONG     yDest;
+    LONG     cxDest;
+    LONG     cyDest;
+    DWORD    dwRop;
+    LONG     xSrc;
+    LONG     ySrc;
+    XFORM    xformSrc;
+    COLORREF crBkColorSrc;
+    DWORD    iUsageSrc;
+    DWORD    offBmiSrc;
+    DWORD    cbBmiSrc;
+    DWORD    offBitsSrc;
+    DWORD    cbBitsSrc;
+    LONG     cxSrc;
+    LONG     cySrc;
+} EMRSTRETCHBLT, *PEMRSTRETCHBLT;
+
+typedef struct {
+    EMR      emr;
+    RECTL    rclBounds;
+    LONG     xDest;
+    LONG     yDest;
+    LONG     cxDest;
+    LONG     cyDest;
+    DWORD    dwRop;
+    LONG     xSrc;
+    LONG     ySrc;
+    XFORM    xformSrc;
+    COLORREF crBkColorSrc;
+    DWORD    iUsageSrc;
+    DWORD    offBmiSrc;
+    DWORD    cbBmiSrc;
+    DWORD    offBitsSrc;
+    DWORD    cbBitsSrc;
+    LONG     cxSrc;
+    LONG     cySrc;
+} EMRALPHABLEND, *PEMRALPHABLEND;
+
+typedef struct {
+    EMR   emr;
+    RECTL rclBounds;
+    LONG  xDest;
+    LONG  yDest;
+    LONG  xSrc;
+    LONG  ySrc;
+    LONG  cxSrc;
+    LONG  cySrc;
+    DWORD offBmiSrc;
+    DWORD cbBmiSrc;
+    DWORD offBitsSrc;
+    DWORD cbBitsSrc;
+    DWORD iUsageSrc;
+    DWORD dwRop;
+    LONG  cxDest;
+    LONG  cyDest;
+} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
+
+typedef struct {
+    EMR                   emr;
+    PIXELFORMATDESCRIPTOR pfd;
+} EMRPIXELFORMAT, *PEMRPIXELFORMAT;
+
+typedef struct tagEMRGLSRECORD {
+  EMR   emr;
+  DWORD cbData;
+  BYTE  Data[1];
+} EMRGLSRECORD, *PEMRGLSRECORD;
+
+typedef struct {
+  EMR   emr;
+  RECTL rclBounds;
+  DWORD cbData;
+  BYTE  Data[1];
+} EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;
+
+typedef INT (CALLBACK *ENHMFENUMPROC)(HDC, HANDLETABLE *,
+                                      const ENHMETARECORD *, INT, LPARAM);
+
+#define EMR_HEADER	1
+#define EMR_POLYBEZIER	2
+#define EMR_POLYGON	3
+#define EMR_POLYLINE	4
+#define EMR_POLYBEZIERTO	5
+#define EMR_POLYLINETO	6
+#define EMR_POLYPOLYLINE	7
+#define EMR_POLYPOLYGON	8
+#define EMR_SETWINDOWEXTEX	9
+#define EMR_SETWINDOWORGEX	10
+#define EMR_SETVIEWPORTEXTEX	11
+#define EMR_SETVIEWPORTORGEX	12
+#define EMR_SETBRUSHORGEX	13
+#define EMR_EOF	14
+#define EMR_SETPIXELV	15
+#define EMR_SETMAPPERFLAGS	16
+#define EMR_SETMAPMODE	17
+#define EMR_SETBKMODE	18
+#define EMR_SETPOLYFILLMODE	19
+#define EMR_SETROP2	20
+#define EMR_SETSTRETCHBLTMODE	21
+#define EMR_SETTEXTALIGN	22
+#define EMR_SETCOLORADJUSTMENT	23
+#define EMR_SETTEXTCOLOR	24
+#define EMR_SETBKCOLOR	25
+#define EMR_OFFSETCLIPRGN	26
+#define EMR_MOVETOEX	27
+#define EMR_SETMETARGN	28
+#define EMR_EXCLUDECLIPRECT	29
+#define EMR_INTERSECTCLIPRECT	30
+#define EMR_SCALEVIEWPORTEXTEX	31
+#define EMR_SCALEWINDOWEXTEX	32
+#define EMR_SAVEDC	33
+#define EMR_RESTOREDC	34
+#define EMR_SETWORLDTRANSFORM	35
+#define EMR_MODIFYWORLDTRANSFORM	36
+#define EMR_SELECTOBJECT	37
+#define EMR_CREATEPEN	38
+#define EMR_CREATEBRUSHINDIRECT	39
+#define EMR_DELETEOBJECT	40
+#define EMR_ANGLEARC	41
+#define EMR_ELLIPSE	42
+#define EMR_RECTANGLE	43
+#define EMR_ROUNDRECT	44
+#define EMR_ARC	45
+#define EMR_CHORD	46
+#define EMR_PIE	47
+#define EMR_SELECTPALETTE	48
+#define EMR_CREATEPALETTE	49
+#define EMR_SETPALETTEENTRIES	50
+#define EMR_RESIZEPALETTE	51
+#define EMR_REALIZEPALETTE	52
+#define EMR_EXTFLOODFILL	53
+#define EMR_LINETO	54
+#define EMR_ARCTO	55
+#define EMR_POLYDRAW	56
+#define EMR_SETARCDIRECTION	57
+#define EMR_SETMITERLIMIT	58
+#define EMR_BEGINPATH	59
+#define EMR_ENDPATH	60
+#define EMR_CLOSEFIGURE	61
+#define EMR_FILLPATH	62
+#define EMR_STROKEANDFILLPATH	63
+#define EMR_STROKEPATH	64
+#define EMR_FLATTENPATH	65
+#define EMR_WIDENPATH	66
+#define EMR_SELECTCLIPPATH	67
+#define EMR_ABORTPATH	68
+#define EMR_GDICOMMENT	70
+#define EMR_FILLRGN	71
+#define EMR_FRAMERGN	72
+#define EMR_INVERTRGN	73
+#define EMR_PAINTRGN	74
+#define EMR_EXTSELECTCLIPRGN	75
+#define EMR_BITBLT	76
+#define EMR_STRETCHBLT	77
+#define EMR_MASKBLT	78
+#define EMR_PLGBLT	79
+#define EMR_SETDIBITSTODEVICE	80
+#define EMR_STRETCHDIBITS	81
+#define EMR_EXTCREATEFONTINDIRECTW	82
+#define EMR_EXTTEXTOUTA	83
+#define EMR_EXTTEXTOUTW	84
+#define EMR_POLYBEZIER16	85
+#define EMR_POLYGON16	86
+#define EMR_POLYLINE16	87
+#define EMR_POLYBEZIERTO16	88
+#define EMR_POLYLINETO16	89
+#define EMR_POLYPOLYLINE16	90
+#define EMR_POLYPOLYGON16	91
+#define EMR_POLYDRAW16	92
+#define EMR_CREATEMONOBRUSH	93
+#define EMR_CREATEDIBPATTERNBRUSHPT	94
+#define EMR_EXTCREATEPEN	95
+#define EMR_POLYTEXTOUTA	96
+#define EMR_POLYTEXTOUTW	97
+#define EMR_SETICMMODE	98
+#define EMR_CREATECOLORSPACE	99
+#define EMR_SETCOLORSPACE	100
+#define EMR_DELETECOLORSPACE	101
+#define EMR_GLSRECORD	102
+#define EMR_GLSBOUNDEDRECORD	103
+#define EMR_PIXELFORMAT 104
+#define EMR_DRAWESCAPE 	105
+#define EMR_EXTESCAPE	106
+#define EMR_STARTDOC	107
+#define EMR_SMALLTEXTOUT	108
+#define EMR_FORCEUFIMAPPING	109
+#define EMR_NAMEDESCAPE	110
+#define EMR_COLORCORRECTPALETTE	111
+#define EMR_SETICMPROFILEA	112
+#define EMR_SETICMPROFILEW	113
+#define EMR_ALPHABLEND	114
+#define EMR_SETLAYOUT	115
+#define EMR_TRANSPARENTBLT	116
+#define EMR_RESERVED_117	117
+#define EMR_GRADIENTFILL	118
+#define EMR_SETLINKEDUFI	119
+#define EMR_SETTEXTJUSTIFICATION	120
+#define EMR_COLORMATCHTOTARGETW	121
+#define EMR_CREATECOLORSPACEW	122
+
+#define EMR_MIN 1
+#define EMR_MAX 122
+
+#define ENHMETA_SIGNATURE	1179469088
+#define ENHMETA_STOCK_OBJECT	0x80000000
+
+#define GDICOMMENT_IDENTIFIER         0x43494447
+#define GDICOMMENT_WINDOWS_METAFILE   0x80000001
+#define GDICOMMENT_BEGINGROUP         0x00000002
+#define GDICOMMENT_ENDGROUP           0x00000003
+#define GDICOMMENT_MULTIFORMATS       0x40000004
+#define GDICOMMENT_UNICODE_STRING     0x00000040
+#define GDICOMMENT_UNICODE_END        0x00000080
+#define EPS_SIGNATURE                 0x46535045
+
+#define CCHDEVICENAME 32
+#define CCHFORMNAME   32
+
+typedef struct
+{
+    BYTE   dmDeviceName[CCHDEVICENAME];
+    WORD   dmSpecVersion;
+    WORD   dmDriverVersion;
+    WORD   dmSize;
+    WORD   dmDriverExtra;
+    DWORD  dmFields;
+    union {
+      struct {
+	short  dmOrientation;
+	short  dmPaperSize;
+	short  dmPaperLength;
+	short  dmPaperWidth;
+        short  dmScale;
+        short  dmCopies;
+        short  dmDefaultSource;
+        short  dmPrintQuality;
+      } DUMMYSTRUCTNAME1;
+      struct {
+        POINTL dmPosition;
+        DWORD dmDisplayOrientation;
+        DWORD dmDisplayFixedOutput;
+      } DUMMYSTRUCTNAME2;
+    } DUMMYUNIONNAME1;
+    short  dmColor;
+    short  dmDuplex;
+    short  dmYResolution;
+    short  dmTTOption;
+    short  dmCollate;
+    BYTE   dmFormName[CCHFORMNAME];
+    WORD   dmLogPixels;
+    DWORD  dmBitsPerPel;
+    DWORD  dmPelsWidth;
+    DWORD  dmPelsHeight;
+    union {
+      DWORD dmDisplayFlags;
+      DWORD dmNup;
+    } DUMMYUNIONNAME2;
+    DWORD  dmDisplayFrequency;
+    DWORD  dmICMMethod;
+    DWORD  dmICMIntent;
+    DWORD  dmMediaType;
+    DWORD  dmDitherType;
+    DWORD  dmReserved1;
+    DWORD  dmReserved2;
+    DWORD  dmPanningWidth;
+    DWORD  dmPanningHeight;
+} DEVMODEA, *PDEVMODEA, *LPDEVMODEA;
+
+typedef struct
+{
+    WCHAR  dmDeviceName[CCHDEVICENAME];
+    WORD   dmSpecVersion;
+    WORD   dmDriverVersion;
+    WORD   dmSize;
+    WORD   dmDriverExtra;
+    DWORD  dmFields;
+    union {
+      struct {
+	short  dmOrientation;
+	short  dmPaperSize;
+	short  dmPaperLength;
+	short  dmPaperWidth;
+        short  dmScale;
+        short  dmCopies;
+        short  dmDefaultSource;
+        short  dmPrintQuality;
+      } DUMMYSTRUCTNAME1;
+      struct {
+        POINTL dmPosition;
+        DWORD dmDisplayOrientation;
+        DWORD dmDisplayFixedOutput;
+      } DUMMYSTRUCTNAME2;
+    } DUMMYUNIONNAME1;
+    short  dmColor;
+    short  dmDuplex;
+    short  dmYResolution;
+    short  dmTTOption;
+    short  dmCollate;
+    WCHAR  dmFormName[CCHFORMNAME];
+    WORD   dmLogPixels;
+    DWORD  dmBitsPerPel;
+    DWORD  dmPelsWidth;
+    DWORD  dmPelsHeight;
+    union {
+      DWORD dmDisplayFlags;
+      DWORD dmNup;
+    } DUMMYUNIONNAME2;
+    DWORD  dmDisplayFrequency;
+    DWORD  dmICMMethod;
+    DWORD  dmICMIntent;
+    DWORD  dmMediaType;
+    DWORD  dmDitherType;
+    DWORD  dmReserved1;
+    DWORD  dmReserved2;
+    DWORD  dmPanningWidth;
+    DWORD  dmPanningHeight;
+} DEVMODEW, *PDEVMODEW, *LPDEVMODEW;
+
+DECL_WINELIB_TYPE_AW(DEVMODE)
+DECL_WINELIB_TYPE_AW(PDEVMODE)
+DECL_WINELIB_TYPE_AW(LPDEVMODE)
+
+#define DM_SPECVERSION  0x401
+#define DM_UPDATE	1
+#define DM_COPY		2
+#define DM_PROMPT	4
+#define DM_MODIFY	8
+
+#define DM_IN_BUFFER      DM_MODIFY
+#define DM_IN_PROMPT      DM_PROMPT
+#define DM_OUT_BUFFER     DM_COPY
+#define DM_OUT_DEFAULT    DM_UPDATE
+
+#define DM_ORIENTATION          __MSABI_LONG(0x00000001)
+#define DM_PAPERSIZE            __MSABI_LONG(0x00000002)
+#define DM_PAPERLENGTH          __MSABI_LONG(0x00000004)
+#define DM_PAPERWIDTH           __MSABI_LONG(0x00000008)
+#define DM_SCALE                __MSABI_LONG(0x00000010)
+#define DM_POSITION             __MSABI_LONG(0x00000020)
+#define DM_NUP                  __MSABI_LONG(0x00000040)
+#define DM_DISPLAYORIENTATION   __MSABI_LONG(0x00000080)
+#define DM_COPIES               __MSABI_LONG(0x00000100)
+#define DM_DEFAULTSOURCE        __MSABI_LONG(0x00000200)
+#define DM_PRINTQUALITY         __MSABI_LONG(0x00000400)
+#define DM_COLOR                __MSABI_LONG(0x00000800)
+#define DM_DUPLEX               __MSABI_LONG(0x00001000)
+#define DM_YRESOLUTION          __MSABI_LONG(0x00002000)
+#define DM_TTOPTION             __MSABI_LONG(0x00004000)
+#define DM_COLLATE              __MSABI_LONG(0x00008000)
+#define DM_FORMNAME             __MSABI_LONG(0x00010000)
+#define DM_LOGPIXELS            __MSABI_LONG(0x00020000)
+#define DM_BITSPERPEL           __MSABI_LONG(0x00040000)
+#define DM_PELSWIDTH            __MSABI_LONG(0x00080000)
+#define DM_PELSHEIGHT           __MSABI_LONG(0x00100000)
+#define DM_DISPLAYFLAGS         __MSABI_LONG(0x00200000)
+#define DM_DISPLAYFREQUENCY     __MSABI_LONG(0x00400000)
+#define DM_ICMMETHOD            __MSABI_LONG(0x00800000)
+#define DM_ICMINTENT            __MSABI_LONG(0x01000000)
+#define DM_MEDIATYPE            __MSABI_LONG(0x02000000)
+#define DM_DITHERTYPE           __MSABI_LONG(0x04000000)
+#define DM_PANNINGWIDTH         __MSABI_LONG(0x08000000)
+#define DM_PANNINGHEIGHT        __MSABI_LONG(0x10000000)
+#define DM_DISPLAYFIXEDOUTPUT   __MSABI_LONG(0x20000000)
+
+#define DM_GRAYSCALE            1
+#define DM_INTERLACED           2
+#define DMDISPLAYFLAGS_TEXTMODE 4
+
+#define DMORIENT_PORTRAIT	1
+#define DMORIENT_LANDSCAPE	2
+
+#define DMPAPER_FIRST              DMPAPER_LETTER
+#define DMPAPER_LETTER		   1
+#define DMPAPER_LETTERSMALL        2
+#define DMPAPER_TABLOID            3
+#define DMPAPER_LEDGER             4
+#define DMPAPER_LEGAL		   5
+#define DMPAPER_STATEMENT          6
+#define DMPAPER_EXECUTIVE	   7
+#define DMPAPER_A3		   8
+#define DMPAPER_A4		   9
+#define DMPAPER_A4SMALL            10
+#define DMPAPER_A5		   11
+#define DMPAPER_B4                 12
+#define DMPAPER_B5                 13
+#define DMPAPER_FOLIO              14
+#define DMPAPER_QUARTO             15
+#define DMPAPER_10X14              16
+#define DMPAPER_11X17              17
+#define DMPAPER_NOTE               18
+#define DMPAPER_ENV_9              19
+#define DMPAPER_ENV_10		   20
+#define DMPAPER_ENV_11             21
+#define DMPAPER_ENV_12             22
+#define DMPAPER_ENV_14             23
+#define DMPAPER_CSHEET             24
+#define DMPAPER_DSHEET             25
+#define DMPAPER_ESHEET             26
+#define DMPAPER_ENV_DL		   27
+#define DMPAPER_ENV_C5		   28
+#define DMPAPER_ENV_C3             29
+#define DMPAPER_ENV_C4             30
+#define DMPAPER_ENV_C6             31
+#define DMPAPER_ENV_C65            32
+#define DMPAPER_ENV_B4             33
+#define DMPAPER_ENV_B5		   34
+#define DMPAPER_ENV_B6             35
+#define DMPAPER_ENV_ITALY          36
+#define DMPAPER_ENV_MONARCH	   37
+#define DMPAPER_ENV_PERSONAL       38
+#define DMPAPER_FANFOLD_US         39
+#define DMPAPER_FANFOLD_STD_GERMAN 40
+#define DMPAPER_FANFOLD_LGL_GERMAN 41
+#define DMPAPER_ISO_B4             42
+#define DMPAPER_JAPANESE_POSTCARD  43
+#define DMPAPER_9X11               44
+#define DMPAPER_10X11              45
+#define DMPAPER_15X11              46
+#define DMPAPER_ENV_INVITE         47
+#define DMPAPER_RESERVED_48        48
+#define DMPAPER_RESERVED_49        49
+#define DMPAPER_LETTER_EXTRA       50
+#define DMPAPER_LEGAL_EXTRA        51
+#define DMPAPER_TABLOID_EXTRA      52
+#define DMPAPER_A4_EXTRA           53
+#define DMPAPER_LETTER_TRANSVERSE  54
+#define DMPAPER_A4_TRANSVERSE      55
+#define DMPAPER_LETTER_EXTRA_TRANSVERSE 56
+#define DMPAPER_A_PLUS             57
+#define DMPAPER_B_PLUS             58
+#define DMPAPER_LETTER_PLUS        59
+#define DMPAPER_A4_PLUS            60
+#define DMPAPER_A5_TRANSVERSE      61
+#define DMPAPER_B5_TRANSVERSE      62
+#define DMPAPER_A3_EXTRA           63
+#define DMPAPER_A5_EXTRA           64
+#define DMPAPER_B5_EXTRA           65
+#define DMPAPER_A2                 66
+#define DMPAPER_A3_TRANSVERSE      67
+#define DMPAPER_A3_EXTRA_TRANSVERSE           68
+#define DMPAPER_DBL_JAPANESE_POSTCARD         69
+#define DMPAPER_A6                 70
+#define DMPAPER_JENV_KAKU2         71
+#define DMPAPER_JENV_KAKU3         72
+#define DMPAPER_JENV_CHOU3         73
+#define DMPAPER_JENV_CHOU4         74
+#define DMPAPER_LETTER_ROTATED     75
+#define DMPAPER_A3_ROTATED         76
+#define DMPAPER_A4_ROTATED         77
+#define DMPAPER_A5_ROTATED         78
+#define DMPAPER_B4_JIS_ROTATED     79
+#define DMPAPER_B5_JIS_ROTATED     80
+#define DMPAPER_JAPANESE_POSTCARD_ROTATED     81
+#define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82
+#define DMPAPER_A6_ROTATED         83
+#define DMPAPER_JENV_KAKU2_ROTATED 84
+#define DMPAPER_JENV_KAKU3_ROTATED 85
+#define DMPAPER_JENV_CHOU3_ROTATED 86
+#define DMPAPER_JENV_CHOU4_ROTATED 87
+#define DMPAPER_B6_JIS             88
+#define DMPAPER_B6_JIS_ROTATED     89
+#define DMPAPER_12X11              90
+#define DMPAPER_JENV_YOU4          91
+#define DMPAPER_JENV_YOU4_ROTATED  92
+#define DMPAPER_P16K               93
+#define DMPAPER_P32K               94
+#define DMPAPER_P32KBIG            95
+#define DMPAPER_PENV_1             96
+#define DMPAPER_PENV_2             97
+#define DMPAPER_PENV_3             98
+#define DMPAPER_PENV_4             99
+#define DMPAPER_PENV_5             100
+#define DMPAPER_PENV_6             101
+#define DMPAPER_PENV_7             102
+#define DMPAPER_PENV_8             103
+#define DMPAPER_PENV_9             104
+#define DMPAPER_PENV_10            105
+#define DMPAPER_P16K_ROTATED       106
+#define DMPAPER_P32K_ROTATED       107
+#define DMPAPER_P32KBIG_ROTATED    108
+#define DMPAPER_PENV_1_ROTATED     109
+#define DMPAPER_PENV_2_ROTATED     110
+#define DMPAPER_PENV_3_ROTATED     111
+#define DMPAPER_PENV_4_ROTATED     112
+#define DMPAPER_PENV_5_ROTATED     113
+#define DMPAPER_PENV_6_ROTATED     114
+#define DMPAPER_PENV_7_ROTATED     115
+#define DMPAPER_PENV_8_ROTATED     116
+#define DMPAPER_PENV_9_ROTATED     117
+#define DMPAPER_PENV_10_ROTATED    118
+
+#define DMPAPER_LAST               DMPAPER_PENV_10_ROTATED
+#define DMPAPER_USER               256
+
+#define DMBIN_FIRST             DMBIN_UPPER
+#define DMBIN_UPPER		1
+#define DMBIN_ONLYONE           1
+#define DMBIN_LOWER		2
+#define DMBIN_MIDDLE		3
+#define DMBIN_MANUAL		4
+#define DMBIN_ENVELOPE		5
+#define DMBIN_ENVMANUAL		6
+#define DMBIN_AUTO		7
+#define DMBIN_TRACTOR           8
+#define DMBIN_SMALLFMT          9
+#define DMBIN_LARGEFMT          10
+#define DMBIN_LARGECAPACITY	11
+#define DMBIN_CASSETTE          14
+#define DMBIN_FORMSOURCE        15
+#define DMBIN_LAST              DMBIN_FORMSOURCE
+#define DMBIN_USER              256
+
+#define DMRES_DRAFT             (-1)
+#define DMRES_LOW               (-2)
+#define DMRES_MEDIUM            (-3)
+#define DMRES_HIGH              (-4)
+
+#define DMCOLOR_MONOCHROME	1
+#define DMCOLOR_COLOR		2
+
+#define DMDUP_SIMPLEX           1
+#define DMDUP_VERTICAL          2
+#define DMDUP_HORIZONTAL        3
+
+#define DMTT_BITMAP		1
+#define DMTT_DOWNLOAD		2
+#define DMTT_SUBDEV		3
+#define DMTT_DOWNLOAD_OUTLINE   4
+
+#define DMCOLLATE_FALSE         0
+#define DMCOLLATE_TRUE          1
+
+#define DMICMMETHOD_NONE        1
+#define DMICMMETHOD_SYSTEM      2
+#define DMICMMETHOD_DRIVER      3
+#define DMICMMETHOD_DEVICE      4
+#define DMICMMETHOD_USER        256
+
+#define DMICM_SATURATE          1
+#define DMICM_CONTRAST          2
+#define DMICM_COLORMETRIC       3
+#define DMICM_USER              256
+
+#define DMMEDIA_STANDARD        1
+#define DMMEDIA_TRANSPARENCY    2
+#define DMMEDIA_GLOSSY          3
+#define DMMEDIA_USER            256
+
+#define DMDITHER_NONE           1
+#define DMDITHER_COARSE         2
+#define DMDITHER_FINE           3
+#define DMDITHER_LINEART        4
+#define DMDITHER_GRAYSCALE      5
+#define DMDITHER_USER           256
+
+#define DMDO_DEFAULT            0
+#define DMDO_90                 1
+#define DMDO_180                2
+#define DMDO_270                3
+
+#define DMDFO_DEFAULT           0
+#define DMDFO_STRETCH           1
+#define DMDFO_CENTER            2
+
+typedef struct
+{
+    INT    cbSize;
+    LPCSTR   lpszDocName;
+    LPCSTR   lpszOutput;
+    LPCSTR   lpszDatatype;
+    DWORD    fwType;
+} DOCINFOA, *LPDOCINFOA;
+
+typedef struct
+{
+    INT    cbSize;
+    LPCWSTR  lpszDocName;
+    LPCWSTR  lpszOutput;
+    LPCWSTR  lpszDatatype;
+    DWORD    fwType;
+} DOCINFOW, *LPDOCINFOW;
+
+DECL_WINELIB_TYPE_AW(DOCINFO)
+DECL_WINELIB_TYPE_AW(LPDOCINFO)
+
+#define DI_APPBANDING     0x0001
+
+/* Flags for PolyDraw and GetPath */
+#define PT_CLOSEFIGURE          0x0001
+#define PT_LINETO               0x0002
+#define PT_BEZIERTO             0x0004
+#define PT_MOVETO               0x0006
+
+#define	RDH_RECTANGLES  1
+
+typedef struct _RGNDATAHEADER {
+    DWORD	dwSize;
+    DWORD	iType;
+    DWORD	nCount;
+    DWORD	nRgnSize;
+    RECT	rcBound;
+} RGNDATAHEADER,*PRGNDATAHEADER;
+
+typedef struct _RGNDATA {
+    RGNDATAHEADER	rdh;
+    char		Buffer[1];
+} RGNDATA,*PRGNDATA,*LPRGNDATA;
+
+typedef BOOL (CALLBACK *ABORTPROC)(HDC, INT);
+
+typedef struct {
+    DWORD	cb;
+    CHAR	DeviceName[32];
+    CHAR	DeviceString[128];
+    DWORD	StateFlags;
+    CHAR	DeviceID[128];
+    CHAR	DeviceKey[128];
+} DISPLAY_DEVICEA,*PDISPLAY_DEVICEA,*LPDISPLAY_DEVICEA;
+
+typedef struct {
+    DWORD	cb;
+    WCHAR	DeviceName[32];
+    WCHAR	DeviceString[128];
+    DWORD	StateFlags;
+    WCHAR	DeviceID[128];
+    WCHAR	DeviceKey[128];
+} DISPLAY_DEVICEW,*PDISPLAY_DEVICEW,*LPDISPLAY_DEVICEW;
+DECL_WINELIB_TYPE_AW(DISPLAY_DEVICE)
+DECL_WINELIB_TYPE_AW(PDISPLAY_DEVICE)
+DECL_WINELIB_TYPE_AW(LPDISPLAY_DEVICE)
+
+/* DISPLAY_DEVICE.StateFlags (?)*/
+#define	DISPLAY_DEVICE_ATTACHED_TO_DESKTOP	0x00000001
+#define	DISPLAY_DEVICE_MULTI_DRIVER		0x00000002
+#define	DISPLAY_DEVICE_PRIMARY_DEVICE		0x00000004
+#define	DISPLAY_DEVICE_MIRRORING_DRIVER		0x00000008
+#define	DISPLAY_DEVICE_VGA_COMPATIBLE		0x00000010
+
+#define GDI_ERROR                               (~0u)
+#define HGDI_ERROR                              ((HANDLE)~(ULONG_PTR)0)
+
+/* AddFontResourceEx flags */
+#define FR_PRIVATE  0x10
+#define FR_NOT_ENUM 0x20
+
+/* Mirroring flags */
+#define LAYOUT_LTR                         0x00000000
+#define LAYOUT_RTL                         0x00000001
+#define LAYOUT_BITMAPORIENTATIONPRESERVED  0x00000008
+#define NOMIRRORBITMAP                     0x80000000
+
+/* For DRAWPATTERNRECT Escape */
+typedef struct _DRAWPATRECT
+{
+    POINT ptPosition;
+    POINT ptSize;
+    WORD  wStyle;
+    WORD  wPattern;
+} DRAWPATRECT, *PDRAWPATRECT;
+
+typedef struct tagWCRANGE {
+  WCHAR  wcLow;
+  USHORT cGlyphs;
+} WCRANGE, *PWCRANGE, *LPWCRANGE;
+
+typedef struct tagGLYPHSET {
+  DWORD    cbThis;
+  DWORD    flAccel;
+  DWORD    cGlyphsSupported;
+  DWORD    cRanges;
+  WCRANGE  ranges[1];
+} GLYPHSET, *PGLYPHSET, *LPGLYPHSET;
+
+#define GS_8BIT_INDICES 0x00000001
+
+WINGDIAPI INT         WINAPI AbortDoc(HDC);
+WINGDIAPI BOOL        WINAPI AbortPath(HDC);
+WINGDIAPI INT         WINAPI AddFontResourceA(LPCSTR);
+WINGDIAPI INT         WINAPI AddFontResourceW(LPCWSTR);
+#define                      AddFontResource WINELIB_NAME_AW(AddFontResource)
+WINGDIAPI INT         WINAPI AddFontResourceExA(LPCSTR, DWORD, PVOID);
+WINGDIAPI INT         WINAPI AddFontResourceExW(LPCWSTR, DWORD, PVOID);
+#define                      AddFontResourceEx WINELIB_NAME_AW(AddFontResourceEx)
+WINGDIAPI HANDLE      WINAPI AddFontMemResourceEx(PVOID, DWORD, PVOID, DWORD *);
+WINGDIAPI BOOL        WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+WINGDIAPI BOOL        WINAPI AngleArc(HDC, INT, INT, DWORD, FLOAT, FLOAT);
+WINGDIAPI BOOL        WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*);
+WINGDIAPI BOOL        WINAPI Arc(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
+WINGDIAPI BOOL        WINAPI ArcTo(HDC, INT, INT, INT, INT, INT, INT, INT, INT);
+WINGDIAPI BOOL        WINAPI BeginPath(HDC);
+WINGDIAPI BOOL        WINAPI BitBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,DWORD);
+WINGDIAPI INT         WINAPI ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR*);
+WINGDIAPI BOOL        WINAPI Chord(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
+WINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
+WINGDIAPI BOOL        WINAPI CloseFigure(HDC);
+WINGDIAPI HMETAFILE   WINAPI CloseMetaFile(HDC);
+WINGDIAPI INT         WINAPI CombineRgn(HRGN,HRGN,HRGN,INT);
+WINGDIAPI BOOL        WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *);
+WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR);
+WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);
+#define                      CopyEnhMetaFile WINELIB_NAME_AW(CopyEnhMetaFile)
+WINGDIAPI HMETAFILE   WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);
+WINGDIAPI HMETAFILE   WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
+#define                      CopyMetaFile WINELIB_NAME_AW(CopyMetaFile)
+WINGDIAPI HBITMAP     WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID);
+WINGDIAPI HBITMAP     WINAPI CreateBitmapIndirect(const BITMAP*);
+WINGDIAPI HBRUSH      WINAPI CreateBrushIndirect(const LOGBRUSH*);
+WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
+WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);
+#define                      CreateColorSpace WINELIB_NAME_AW(CreateColorSpace)
+WINGDIAPI HBITMAP     WINAPI CreateCompatibleBitmap(HDC,INT,INT);
+WINGDIAPI HDC         WINAPI CreateCompatibleDC(HDC);
+WINGDIAPI HDC         WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+WINGDIAPI HDC         WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+#define                      CreateDC WINELIB_NAME_AW(CreateDC)
+WINGDIAPI HBITMAP     WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,LPCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI HBRUSH      WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);
+WINGDIAPI HBRUSH      WINAPI CreateDIBPatternBrushPt(const void*,UINT);
+WINGDIAPI HBITMAP     WINAPI CreateDIBSection(HDC, const BITMAPINFO *, UINT, void **, HANDLE, DWORD offset);
+WINGDIAPI HBITMAP     WINAPI CreateDiscardableBitmap(HDC,INT,INT);
+WINGDIAPI HRGN        WINAPI CreateEllipticRgn(INT,INT,INT,INT);
+WINGDIAPI HRGN        WINAPI CreateEllipticRgnIndirect(const RECT *);
+WINGDIAPI HDC         WINAPI CreateEnhMetaFileA(HDC,LPCSTR,const RECT*,LPCSTR);
+WINGDIAPI HDC         WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,const RECT*,LPCWSTR);
+#define                      CreateEnhMetaFile WINELIB_NAME_AW(CreateEnhMetaFile)
+WINGDIAPI HFONT       WINAPI CreateFontA(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR);
+WINGDIAPI HFONT       WINAPI CreateFontW(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR);
+#define                      CreateFont WINELIB_NAME_AW(CreateFont)
+WINGDIAPI HFONT       WINAPI CreateFontIndirectA(const LOGFONTA*);
+WINGDIAPI HFONT       WINAPI CreateFontIndirectW(const LOGFONTW*);
+#define                      CreateFontIndirect WINELIB_NAME_AW(CreateFontIndirect)
+WINGDIAPI HFONT       WINAPI CreateFontIndirectExA(const ENUMLOGFONTEXDVA*);
+WINGDIAPI HFONT       WINAPI CreateFontIndirectExW(const ENUMLOGFONTEXDVW*);
+#define                      CreateFontIndirectEx WINELIB_NAME_AW(CreateFontIndirectEx)
+WINGDIAPI HPALETTE    WINAPI CreateHalftonePalette(HDC);
+WINGDIAPI HBRUSH      WINAPI CreateHatchBrush(INT,COLORREF);
+WINGDIAPI HDC         WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+WINGDIAPI HDC         WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+#define                      CreateIC WINELIB_NAME_AW(CreateIC)
+WINGDIAPI HDC         WINAPI CreateMetaFileA(LPCSTR);
+WINGDIAPI HDC         WINAPI CreateMetaFileW(LPCWSTR);
+#define                      CreateMetaFile WINELIB_NAME_AW(CreateMetaFile)
+WINGDIAPI HPALETTE    WINAPI CreatePalette(const LOGPALETTE*);
+WINGDIAPI HBRUSH      WINAPI CreatePatternBrush(HBITMAP);
+WINGDIAPI HPEN        WINAPI CreatePen(INT,INT,COLORREF);
+WINGDIAPI HPEN        WINAPI CreatePenIndirect(const LOGPEN*);
+WINGDIAPI HRGN        WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT);
+WINGDIAPI HRGN        WINAPI CreatePolygonRgn(const POINT*,INT,INT);
+WINGDIAPI HRGN        WINAPI CreateRectRgn(INT,INT,INT,INT);
+WINGDIAPI HRGN        WINAPI CreateRectRgnIndirect(const RECT*);
+WINGDIAPI HRGN        WINAPI CreateRoundRectRgn(INT,INT,INT,INT,INT,INT);
+WINGDIAPI BOOL        WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR);
+WINGDIAPI BOOL        WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+#define                      CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource)
+WINGDIAPI HBRUSH      WINAPI CreateSolidBrush(COLORREF);
+WINGDIAPI BOOL        WINAPI DPtoLP(HDC,LPPOINT,INT);
+WINGDIAPI BOOL        WINAPI DeleteColorSpace(HCOLORSPACE);
+WINGDIAPI BOOL        WINAPI DeleteDC(HDC);
+WINGDIAPI BOOL        WINAPI DeleteEnhMetaFile(HENHMETAFILE);
+WINGDIAPI BOOL        WINAPI DeleteMetaFile(HMETAFILE);
+WINGDIAPI BOOL        WINAPI DeleteObject(HGDIOBJ);
+WINGDIAPI INT         WINAPI DescribePixelFormat(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);
+WINGDIAPI INT         WINAPI DrawEscape(HDC,INT,INT,LPCSTR);
+WINGDIAPI BOOL        WINAPI Ellipse(HDC,INT,INT,INT,INT);
+WINGDIAPI INT         WINAPI EndDoc(HDC);
+WINGDIAPI BOOL        WINAPI EndPath(HDC);
+WINGDIAPI BOOL        WINAPI EnumEnhMetaFile(HDC,HENHMETAFILE,ENHMFENUMPROC,LPVOID,const RECT*);
+WINGDIAPI INT         WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+WINGDIAPI INT         WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
+#define                      EnumFontFamilies WINELIB_NAME_AW(EnumFontFamilies)
+WINGDIAPI INT         WINAPI EnumFontFamiliesExA(HDC,LPLOGFONTA,FONTENUMPROCA,LPARAM,DWORD);
+WINGDIAPI INT         WINAPI EnumFontFamiliesExW(HDC,LPLOGFONTW,FONTENUMPROCW,LPARAM,DWORD);
+#define                      EnumFontFamiliesEx WINELIB_NAME_AW(EnumFontFamiliesEx)
+WINGDIAPI INT         WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+WINGDIAPI INT         WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
+#define                      EnumFonts WINELIB_NAME_AW(EnumFonts)
+WINGDIAPI INT         WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM);
+WINGDIAPI INT         WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM);
+#define                      EnumICMProfiles WINELIB_NAME_AW(EnumICMProfiles)
+WINGDIAPI BOOL        WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);
+WINGDIAPI INT         WINAPI EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM);
+WINGDIAPI BOOL        WINAPI EqualRgn(HRGN,HRGN);
+WINGDIAPI INT         WINAPI Escape(HDC,INT,INT,LPCSTR,LPVOID);
+WINGDIAPI INT         WINAPI ExcludeClipRect(HDC,INT,INT,INT,INT);
+WINGDIAPI HPEN        WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*);
+WINGDIAPI HRGN        WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*);
+WINGDIAPI INT         WINAPI ExtEscape(HDC,INT,INT,LPCSTR,INT,LPSTR);
+WINGDIAPI BOOL        WINAPI ExtFloodFill(HDC,INT,INT,COLORREF,UINT);
+WINGDIAPI INT         WINAPI ExtSelectClipRgn(HDC,HRGN,INT);
+WINGDIAPI BOOL        WINAPI ExtTextOutA(HDC,INT,INT,UINT,const RECT*,LPCSTR,UINT,const INT*);
+WINGDIAPI BOOL        WINAPI ExtTextOutW(HDC,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);
+#define                      ExtTextOut WINELIB_NAME_AW(ExtTextOut)
+WINGDIAPI BOOL        WINAPI FillPath(HDC);
+WINGDIAPI BOOL        WINAPI FillRgn(HDC,HRGN,HBRUSH);
+WINGDIAPI BOOL        WINAPI FixBrushOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL        WINAPI FlattenPath(HDC);
+WINGDIAPI BOOL        WINAPI FloodFill(HDC,INT,INT,COLORREF);
+WINGDIAPI BOOL        WINAPI FrameRgn(HDC,HRGN,HBRUSH,INT,INT);
+WINGDIAPI BOOL        WINAPI GdiAlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+WINGDIAPI BOOL        WINAPI GdiComment(HDC,UINT,const BYTE *);
+WINGDIAPI DEVMODEW *  WINAPI GdiConvertToDevmodeW(const DEVMODEA *);
+WINGDIAPI BOOL        WINAPI GdiFlush(void);
+WINGDIAPI LONG        WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *);
+WINGDIAPI DWORD       WINAPI GdiGetCodePage(HDC);
+WINGDIAPI BOOL        WINAPI GdiGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
+WINGDIAPI BOOL        WINAPI GdiIsMetaFileDC(HDC);
+WINGDIAPI BOOL        WINAPI GdiIsMetaPrintDC(HDC);
+WINGDIAPI BOOL        WINAPI GdiIsPlayMetafileDC(HDC);
+WINGDIAPI BOOL        WINAPI GdiTransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
+WINGDIAPI INT         WINAPI GetArcDirection(HDC);
+WINGDIAPI BOOL        WINAPI GetAspectRatioFilterEx(HDC,LPSIZE);
+WINGDIAPI LONG        WINAPI GetBitmapBits(HBITMAP,LONG,LPVOID);
+WINGDIAPI BOOL        WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetBrushOrgEx(HDC,LPPOINT);
+WINGDIAPI COLORREF    WINAPI GetBkColor(HDC);
+WINGDIAPI INT         WINAPI GetBkMode(HDC);
+WINGDIAPI UINT        WINAPI GetBoundsRect(HDC,LPRECT,UINT);
+WINGDIAPI BOOL        WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC);
+WINGDIAPI BOOL        WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC);
+#define                      GetCharABCWidths WINELIB_NAME_AW(GetCharABCWidths)
+WINGDIAPI BOOL        WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT);
+WINGDIAPI BOOL        WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT);
+#define                      GetCharABCWidthsFloat WINELIB_NAME_AW(GetCharABCWidthsFloat)
+WINGDIAPI BOOL        WINAPI GetCharABCWidthsI(HDC,UINT,UINT,LPWORD,LPABC);
+WINGDIAPI DWORD       WINAPI GetCharacterPlacementA(HDC,LPCSTR,INT,INT,GCP_RESULTSA*,DWORD);
+WINGDIAPI DWORD       WINAPI GetCharacterPlacementW(HDC,LPCWSTR,INT,INT,GCP_RESULTSW*,DWORD);
+#define                      GetCharacterPlacement WINELIB_NAME_AW(GetCharacterPlacement)
+WINGDIAPI BOOL        WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL        WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT);
+#define                      GetCharWidth32 WINELIB_NAME_AW(GetCharWidth32)
+WINGDIAPI BOOL        WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL        WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT);
+WINGDIAPI BOOL        WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT);
+#define                      GetCharWidth WINELIB_NAME_AW(GetCharWidth)
+WINGDIAPI BOOL        WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT);
+WINGDIAPI BOOL        WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT);
+#define                      GetCharWidthFloat WINELIB_NAME_AW(GetCharWidthFloat)
+WINGDIAPI INT         WINAPI GetClipBox(HDC,LPRECT);
+WINGDIAPI INT         WINAPI GetClipRgn(HDC,HRGN);
+WINGDIAPI BOOL        WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);
+WINGDIAPI HCOLORSPACE WINAPI GetColorSpace(HDC);
+WINGDIAPI HGDIOBJ     WINAPI GetCurrentObject(HDC,UINT);
+WINGDIAPI BOOL        WINAPI GetCurrentPositionEx(HDC,LPPOINT);
+WINGDIAPI INT         WINAPI GetDeviceCaps(HDC,INT);
+WINGDIAPI BOOL        WINAPI GetDeviceGammaRamp(HDC,LPVOID);
+WINGDIAPI COLORREF    WINAPI GetDCBrushColor(HDC);
+WINGDIAPI BOOL        WINAPI GetDCOrgEx(HDC,LPPOINT);
+WINGDIAPI COLORREF    WINAPI GetDCPenColor(HDC);
+WINGDIAPI UINT        WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
+WINGDIAPI INT         WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,LPVOID,LPBITMAPINFO,UINT);
+WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR);
+WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR);
+#define                      GetEnhMetaFile WINELIB_NAME_AW(GetEnhMetaFile)
+WINGDIAPI UINT        WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE);
+WINGDIAPI UINT        WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE,UINT,LPSTR);
+WINGDIAPI UINT        WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE,UINT,LPWSTR);
+#define                      GetEnhMetaFileDescription WINELIB_NAME_AW(GetEnhMetaFileDescription)
+WINGDIAPI UINT        WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER);
+WINGDIAPI UINT        WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY);
+WINGDIAPI DWORD       WINAPI GetFontData(HDC,DWORD,DWORD,LPVOID,DWORD);
+WINGDIAPI DWORD       WINAPI GetFontLanguageInfo(HDC);
+WINGDIAPI DWORD       WINAPI GetFontUnicodeRanges(HDC,LPGLYPHSET);
+WINGDIAPI DWORD       WINAPI GetGlyphIndicesA(HDC,LPCSTR,INT,LPWORD,DWORD);
+WINGDIAPI DWORD       WINAPI GetGlyphIndicesW(HDC,LPCWSTR,INT,LPWORD,DWORD);
+#define                    GetGlyphIndices WINELIB_NAME_AW(GetGlyphIndices)
+WINGDIAPI DWORD       WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+WINGDIAPI DWORD       WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+#define                      GetGlyphOutline WINELIB_NAME_AW(GetGlyphOutline)
+WINGDIAPI INT         WINAPI GetGraphicsMode(HDC);
+WINGDIAPI BOOL        WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR);
+WINGDIAPI BOOL        WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR);
+#define                      GetICMProfile WINELIB_NAME_AW(GetICMProfile)
+WINGDIAPI DWORD       WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR);
+WINGDIAPI DWORD       WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR);
+#define                      GetKerningPairs WINELIB_NAME_AW(GetKerningPairs)
+WINGDIAPI DWORD       WINAPI GetLayout(HDC);
+WINGDIAPI BOOL        WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD);
+WINGDIAPI BOOL        WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD);
+#define                      GetLogColorSpace WINELIB_NAME_AW(GetLogColorSpace)
+WINGDIAPI INT         WINAPI GetMapMode(HDC);
+WINGDIAPI HMETAFILE   WINAPI GetMetaFileA(LPCSTR);
+WINGDIAPI HMETAFILE   WINAPI GetMetaFileW(LPCWSTR);
+#define                      GetMetaFile WINELIB_NAME_AW(GetMetaFile)
+WINGDIAPI UINT        WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,LPVOID);
+WINGDIAPI INT         WINAPI GetMetaRgn(HDC,HRGN);
+WINGDIAPI BOOL        WINAPI GetMiterLimit(HDC, PFLOAT);
+WINGDIAPI DWORD       WINAPI GetNearestColor(HDC,DWORD);
+WINGDIAPI UINT        WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF);
+WINGDIAPI INT         WINAPI GetObjectA(HGDIOBJ,INT,LPVOID);
+WINGDIAPI INT         WINAPI GetObjectW(HGDIOBJ,INT,LPVOID);
+#define                      GetObject WINELIB_NAME_AW(GetObject)
+WINGDIAPI DWORD       WINAPI GetObjectType(HGDIOBJ);
+WINGDIAPI UINT        WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA);
+WINGDIAPI UINT        WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW);
+#define                      GetOutlineTextMetrics WINELIB_NAME_AW(GetOutlineTextMetrics)
+WINGDIAPI UINT        WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY);
+WINGDIAPI INT         WINAPI GetPath(HDC,LPPOINT,LPBYTE,INT);
+WINGDIAPI COLORREF    WINAPI GetPixel(HDC,INT,INT);
+WINGDIAPI INT         WINAPI GetPixelFormat(HDC);
+WINGDIAPI INT         WINAPI GetPolyFillMode(HDC);
+WINGDIAPI INT         WINAPI GetRandomRgn(HDC,HRGN,INT);
+WINGDIAPI BOOL        WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);
+WINGDIAPI DWORD       WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA);
+WINGDIAPI INT         WINAPI GetRelAbs(HDC,DWORD);
+WINGDIAPI INT         WINAPI GetRgnBox(HRGN,LPRECT);
+WINGDIAPI INT         WINAPI GetROP2(HDC);
+WINGDIAPI HGDIOBJ     WINAPI GetStockObject(INT);
+WINGDIAPI INT         WINAPI GetStretchBltMode(HDC);
+WINGDIAPI UINT        WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY);
+WINGDIAPI UINT        WINAPI GetSystemPaletteUse(HDC);
+WINGDIAPI UINT        WINAPI GetTextAlign(HDC);
+WINGDIAPI INT         WINAPI GetTextCharacterExtra(HDC);
+WINGDIAPI UINT        WINAPI GetTextCharset(HDC);
+WINGDIAPI UINT        WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD);
+WINGDIAPI COLORREF    WINAPI GetTextColor(HDC);
+WINGDIAPI BOOL        WINAPI GetTextExtentExPointA(HDC,LPCSTR,INT,INT,LPINT,LPINT,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetTextExtentExPointW(HDC,LPCWSTR,INT,INT,LPINT,LPINT,LPSIZE);
+#define                      GetTextExtentExPoint WINELIB_NAME_AW(GetTextExtentExPoint)
+WINGDIAPI BOOL        WINAPI GetTextExtentPointA(HDC,LPCSTR,INT,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetTextExtentPointW(HDC,LPCWSTR,INT,LPSIZE);
+#define                      GetTextExtentPoint WINELIB_NAME_AW(GetTextExtentPoint)
+WINGDIAPI BOOL        WINAPI GetTextExtentPoint32A(HDC,LPCSTR,INT,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetTextExtentPoint32W(HDC,LPCWSTR,INT,LPSIZE);
+#define                      GetTextExtentPoint32 WINELIB_NAME_AW(GetTextExtentPoint32)
+WINGDIAPI BOOL        WINAPI GetTextExtentExPointI(HDC,const WORD*,INT,INT,LPINT,LPINT,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetTextExtentPointI(HDC,const WORD*,INT,LPSIZE);
+WINGDIAPI INT         WINAPI GetTextFaceA(HDC,INT,LPSTR);
+WINGDIAPI INT         WINAPI GetTextFaceW(HDC,INT,LPWSTR);
+#define                      GetTextFace WINELIB_NAME_AW(GetTextFace)
+WINGDIAPI BOOL        WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA);
+WINGDIAPI BOOL        WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW);
+#define                      GetTextMetrics WINELIB_NAME_AW(GetTextMetrics)
+WINGDIAPI BOOL        WINAPI GetTransform(HDC,DWORD,XFORM*);
+WINGDIAPI BOOL        WINAPI GetViewportExtEx(HDC,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetViewportOrgEx(HDC,LPPOINT);
+WINGDIAPI BOOL        WINAPI GetWindowExtEx(HDC,LPSIZE);
+WINGDIAPI BOOL        WINAPI GetWindowOrgEx(HDC,LPPOINT);
+WINGDIAPI UINT        WINAPI GetWinMetaFileBits(HENHMETAFILE,UINT,LPBYTE,INT,HDC);
+WINGDIAPI BOOL        WINAPI GetWorldTransform(HDC,LPXFORM);
+WINGDIAPI BOOL        WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
+WINGDIAPI INT         WINAPI IntersectClipRect(HDC,INT,INT,INT,INT);
+WINGDIAPI BOOL        WINAPI InvertRgn(HDC,HRGN);
+WINGDIAPI BOOL        WINAPI LineDDA(INT,INT,INT,INT,LINEDDAPROC,LPARAM);
+WINGDIAPI BOOL        WINAPI LineTo(HDC,INT,INT);
+WINGDIAPI BOOL        WINAPI LPtoDP(HDC,LPPOINT,INT);
+WINGDIAPI BOOL        WINAPI MaskBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,HBITMAP,INT,INT,DWORD);
+WINGDIAPI BOOL        WINAPI MirrorRgn(HWND,HRGN);
+WINGDIAPI BOOL        WINAPI ModifyWorldTransform(HDC,const XFORM *, DWORD);
+WINGDIAPI BOOL        WINAPI MoveToEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI INT         WINAPI OffsetClipRgn(HDC,INT,INT);
+WINGDIAPI INT         WINAPI OffsetRgn(HRGN,INT,INT);
+WINGDIAPI BOOL        WINAPI OffsetViewportOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL        WINAPI OffsetWindowOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL        WINAPI PaintRgn(HDC,HRGN);
+WINGDIAPI BOOL        WINAPI PatBlt(HDC,INT,INT,INT,INT,DWORD);
+WINGDIAPI HRGN        WINAPI PathToRegion(HDC);
+WINGDIAPI BOOL        WINAPI Pie(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
+WINGDIAPI BOOL        WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,const RECT*);
+WINGDIAPI BOOL        WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT);
+WINGDIAPI BOOL        WINAPI PlayMetaFile(HDC,HMETAFILE);
+WINGDIAPI BOOL        WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT);
+WINGDIAPI BOOL        WINAPI PlgBlt(HDC,const POINT*,HDC,INT,INT,INT,INT,HBITMAP,INT,INT);
+WINGDIAPI BOOL        WINAPI PolyBezier(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL        WINAPI PolyBezierTo(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL        WINAPI PolyDraw(HDC,const POINT*,const BYTE*,DWORD);
+WINGDIAPI BOOL        WINAPI PolyPolygon(HDC,const POINT*,const INT*,UINT);
+WINGDIAPI BOOL        WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD);
+WINGDIAPI BOOL        WINAPI Polygon(HDC,const POINT*,INT);
+WINGDIAPI BOOL        WINAPI Polyline(HDC,const POINT*,INT);
+WINGDIAPI BOOL        WINAPI PolylineTo(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL        WINAPI PtInRegion(HRGN,INT,INT);
+WINGDIAPI BOOL        WINAPI PtVisible(HDC,INT,INT);
+WINGDIAPI UINT        WINAPI RealizePalette(HDC);
+WINGDIAPI BOOL        WINAPI Rectangle(HDC,INT,INT,INT,INT);
+WINGDIAPI BOOL        WINAPI RectInRegion(HRGN,const RECT *);
+WINGDIAPI BOOL        WINAPI RectVisible(HDC,const RECT*);
+WINGDIAPI BOOL        WINAPI RemoveFontMemResourceEx(HANDLE);
+WINGDIAPI BOOL        WINAPI RemoveFontResourceA(LPCSTR);
+WINGDIAPI BOOL        WINAPI RemoveFontResourceW(LPCWSTR);
+#define                      RemoveFontResource WINELIB_NAME_AW(RemoveFontResource)
+WINGDIAPI BOOL        WINAPI RemoveFontResourceExA(LPCSTR, DWORD, PVOID);
+WINGDIAPI BOOL        WINAPI RemoveFontResourceExW(LPCWSTR, DWORD, PVOID);
+#define                      RemoveFontResourceEx WINELIB_NAME_AW(RemoveFontResourceEx)
+WINGDIAPI HDC         WINAPI ResetDCA(HDC,const DEVMODEA *);
+WINGDIAPI HDC         WINAPI ResetDCW(HDC,const DEVMODEW *);
+#define                      ResetDC WINELIB_NAME_AW(ResetDC)
+WINGDIAPI BOOL        WINAPI ResizePalette(HPALETTE,UINT);
+WINGDIAPI BOOL        WINAPI RestoreDC(HDC,INT);
+WINGDIAPI BOOL        WINAPI RoundRect(HDC,INT,INT,INT,INT,INT,INT);
+WINGDIAPI INT         WINAPI SaveDC(HDC);
+WINGDIAPI BOOL        WINAPI ScaleViewportExtEx(HDC,INT,INT,INT,INT,LPSIZE);
+WINGDIAPI BOOL        WINAPI ScaleWindowExtEx(HDC,INT,INT,INT,INT,LPSIZE);
+WINGDIAPI BOOL        WINAPI SelectClipPath(HDC,INT);
+WINGDIAPI INT         WINAPI SelectClipRgn(HDC,HRGN);
+WINGDIAPI HGDIOBJ     WINAPI SelectObject(HDC,HGDIOBJ);
+WINGDIAPI HPALETTE    WINAPI SelectPalette(HDC,HPALETTE,BOOL);
+WINGDIAPI INT         WINAPI SetAbortProc(HDC,ABORTPROC);
+WINGDIAPI INT         WINAPI SetArcDirection(HDC,INT);
+WINGDIAPI LONG        WINAPI SetBitmapBits(HBITMAP,LONG,LPCVOID);
+WINGDIAPI BOOL        WINAPI SetBitmapDimensionEx(HBITMAP,INT,INT,LPSIZE);
+WINGDIAPI COLORREF    WINAPI SetBkColor(HDC,COLORREF);
+WINGDIAPI INT         WINAPI SetBkMode(HDC,INT);
+WINGDIAPI UINT        WINAPI SetBoundsRect(HDC,const RECT*,UINT);
+WINGDIAPI BOOL        WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL        WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);
+WINGDIAPI HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE);
+WINGDIAPI BOOL        WINAPI SetDeviceGammaRamp(HDC,LPVOID);
+WINGDIAPI COLORREF    WINAPI SetDCBrushColor(HDC,COLORREF);
+WINGDIAPI COLORREF    WINAPI SetDCPenColor(HDC, COLORREF);
+WINGDIAPI UINT        WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*);
+WINGDIAPI INT         WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI INT         WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *);
+WINGDIAPI INT         WINAPI SetGraphicsMode(HDC,INT);
+WINGDIAPI INT         WINAPI SetICMMode(HDC,INT);
+WINGDIAPI BOOL        WINAPI SetICMProfileA(HDC,LPSTR);
+WINGDIAPI BOOL        WINAPI SetICMProfileW(HDC,LPWSTR);
+#define                      SetICMProfile WINELIB_NAME_AW(SetICMProfile)
+WINGDIAPI DWORD       WINAPI SetLayout(HDC,DWORD);
+WINGDIAPI INT         WINAPI SetMapMode(HDC,INT);
+WINGDIAPI DWORD       WINAPI SetMapperFlags(HDC,DWORD);
+WINGDIAPI HMETAFILE   WINAPI SetMetaFileBitsEx(UINT,const BYTE*);
+WINGDIAPI INT         WINAPI SetMetaRgn(HDC);
+WINGDIAPI BOOL        WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);
+WINGDIAPI UINT        WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,const PALETTEENTRY*);
+WINGDIAPI COLORREF    WINAPI SetPixel(HDC,INT,INT,COLORREF);
+WINGDIAPI BOOL        WINAPI SetPixelV(HDC,INT,INT,COLORREF);
+WINGDIAPI BOOL        WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*);
+WINGDIAPI INT         WINAPI SetPolyFillMode(HDC,INT);
+WINGDIAPI BOOL        WINAPI SetRectRgn(HRGN,INT,INT,INT,INT);
+WINGDIAPI INT         WINAPI SetRelAbs(HDC,INT);
+WINGDIAPI INT         WINAPI SetROP2(HDC,INT);
+WINGDIAPI INT         WINAPI SetStretchBltMode(HDC,INT);
+WINGDIAPI UINT        WINAPI SetSystemPaletteUse(HDC,UINT);
+WINGDIAPI UINT        WINAPI SetTextAlign(HDC,UINT);
+WINGDIAPI INT         WINAPI SetTextCharacterExtra(HDC,INT);
+WINGDIAPI COLORREF    WINAPI SetTextColor(HDC,COLORREF);
+WINGDIAPI BOOL        WINAPI SetTextJustification(HDC,INT,INT);
+WINGDIAPI BOOL        WINAPI SetViewportExtEx(HDC,INT,INT,LPSIZE);
+WINGDIAPI BOOL        WINAPI SetViewportOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL        WINAPI SetWindowExtEx(HDC,INT,INT,LPSIZE);
+WINGDIAPI BOOL        WINAPI SetWindowOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,const BYTE*,HDC,const METAFILEPICT *);
+WINGDIAPI BOOL        WINAPI SetWorldTransform(HDC,const XFORM*);
+WINGDIAPI INT         WINAPI StartDocA(HDC,const DOCINFOA*);
+WINGDIAPI INT         WINAPI StartDocW(HDC,const DOCINFOW*);
+#define                      StartDoc WINELIB_NAME_AW(StartDoc)
+WINGDIAPI INT         WINAPI StartPage(HDC);
+WINGDIAPI INT         WINAPI EndPage(HDC);
+WINGDIAPI BOOL        WINAPI StretchBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,INT,INT,DWORD);
+WINGDIAPI INT         WINAPI StretchDIBits(HDC,INT,INT,INT,INT,INT,INT,INT,INT,const VOID*,const BITMAPINFO*,UINT,DWORD);
+WINGDIAPI BOOL        WINAPI StrokeAndFillPath(HDC);
+WINGDIAPI BOOL        WINAPI StrokePath(HDC);
+WINGDIAPI BOOL        WINAPI SwapBuffers(HDC);
+WINGDIAPI BOOL        WINAPI TextOutA(HDC,INT,INT,LPCSTR,INT);
+WINGDIAPI BOOL        WINAPI TextOutW(HDC,INT,INT,LPCWSTR,INT);
+#define                      TextOut WINELIB_NAME_AW(TextOut)
+WINGDIAPI BOOL        WINAPI TranslateCharsetInfo(LPDWORD,LPCHARSETINFO,DWORD);
+WINGDIAPI BOOL        WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
+WINGDIAPI BOOL        WINAPI UnrealizeObject(HGDIOBJ);
+WINGDIAPI BOOL        WINAPI UpdateColors(HDC);
+WINGDIAPI BOOL        WINAPI UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT);
+WINGDIAPI BOOL        WINAPI UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT);
+#define                      UpdateICMRegKey WINELIB_NAME_AW(UpdateICMRegKey)
+WINGDIAPI BOOL        WINAPI WidenPath(HDC);
+WINGDIAPI BOOL        WINAPI PolyTextOutA(HDC,const POLYTEXTA*,INT);
+WINGDIAPI BOOL        WINAPI PolyTextOutW(HDC,const POLYTEXTW*,INT);
+#define                      PolyTextOut WINELIB_NAME_AW(PolyTextOut)
+
+/* These defines are used by wglSwapLayerBuffers */
+#define WGL_SWAP_MAIN_PLANE (1 <<  0)
+#define WGL_SWAP_OVERLAY1   (1 <<  1)
+#define WGL_SWAP_OVERLAY2   (1 <<  2)
+#define WGL_SWAP_OVERLAY3   (1 <<  3)
+#define WGL_SWAP_OVERLAY4   (1 <<  4)
+#define WGL_SWAP_OVERLAY5   (1 <<  5)
+#define WGL_SWAP_OVERLAY6   (1 <<  6)
+#define WGL_SWAP_OVERLAY7   (1 <<  7)
+#define WGL_SWAP_OVERLAY8   (1 <<  8)
+#define WGL_SWAP_OVERLAY9   (1 <<  9)
+#define WGL_SWAP_OVERLAY10  (1 << 10)
+#define WGL_SWAP_OVERLAY11  (1 << 11)
+#define WGL_SWAP_OVERLAY12  (1 << 12)
+#define WGL_SWAP_OVERLAY13  (1 << 13)
+#define WGL_SWAP_OVERLAY14  (1 << 14)
+#define WGL_SWAP_OVERLAY15  (1 << 15)
+#define WGL_SWAP_UNDERLAY1  (1 << 16)
+#define WGL_SWAP_UNDERLAY2  (1 << 17)
+#define WGL_SWAP_UNDERLAY3  (1 << 18)
+#define WGL_SWAP_UNDERLAY4  (1 << 19)
+#define WGL_SWAP_UNDERLAY5  (1 << 20)
+#define WGL_SWAP_UNDERLAY6  (1 << 21)
+#define WGL_SWAP_UNDERLAY7  (1 << 22)
+#define WGL_SWAP_UNDERLAY8  (1 << 23)
+#define WGL_SWAP_UNDERLAY9  (1 << 24)
+#define WGL_SWAP_UNDERLAY10 (1 << 25)
+#define WGL_SWAP_UNDERLAY11 (1 << 26)
+#define WGL_SWAP_UNDERLAY12 (1 << 27)
+#define WGL_SWAP_UNDERLAY13 (1 << 28)
+#define WGL_SWAP_UNDERLAY14 (1 << 29)
+#define WGL_SWAP_UNDERLAY15 (1 << 30)
+
+#define WGL_FONT_LINES      0
+#define WGL_FONT_POLYGONS   1
+
+/* WGL prototypes */
+WINGDIAPI HGLRC   WINAPI wglCreateContext(HDC);
+WINGDIAPI HGLRC   WINAPI wglCreateLayerContext(HDC,INT);
+WINGDIAPI BOOL    WINAPI wglCopyContext(HGLRC,HGLRC,UINT);
+WINGDIAPI BOOL    WINAPI wglDeleteContext(HGLRC);
+WINGDIAPI BOOL    WINAPI wglDescribeLayerPlane(HDC,INT,INT,UINT,LPLAYERPLANEDESCRIPTOR);
+WINGDIAPI HGLRC   WINAPI wglGetCurrentContext(void);
+WINGDIAPI HDC     WINAPI wglGetCurrentDC(void);
+WINGDIAPI INT     WINAPI wglGetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *);
+WINGDIAPI PROC    WINAPI wglGetProcAddress(LPCSTR);
+WINGDIAPI BOOL    WINAPI wglMakeCurrent(HDC,HGLRC);
+WINGDIAPI BOOL    WINAPI wglRealizeLayerPalette(HDC,INT,BOOL);
+WINGDIAPI INT     WINAPI wglSetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *);
+WINGDIAPI BOOL    WINAPI wglShareLists(HGLRC,HGLRC);
+WINGDIAPI BOOL    WINAPI wglSwapLayerBuffers(HDC,UINT);
+WINGDIAPI BOOL    WINAPI wglUseFontBitmapsA(HDC,DWORD,DWORD,DWORD);
+WINGDIAPI BOOL    WINAPI wglUseFontBitmapsW(HDC,DWORD,DWORD,DWORD);
+#define                  wglUseFontBitmaps WINELIB_NAME_AW(wglUseFontBitmaps)
+WINGDIAPI BOOL    WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);
+WINGDIAPI BOOL    WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);
+#define                  wglUseFontOutlines WINELIB_NAME_AW(wglUseFontOutlines)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !NOGDI */
+#endif /* _WINGDI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h
new file mode 100644
index 0000000..b3fbef5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h
@@ -0,0 +1,593 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINHTTP_H
+#define __WINE_WINHTTP_H
+
+#ifdef _WIN64
+#include <pshpack8.h>
+#else
+#include <pshpack4.h>
+#endif
+
+#define WINHTTPAPI
+#define BOOLAPI WINHTTPAPI BOOL WINAPI
+
+
+typedef LPVOID HINTERNET;
+typedef HINTERNET *LPHINTERNET;
+
+#define INTERNET_DEFAULT_PORT           0
+#define INTERNET_DEFAULT_HTTP_PORT      80
+#define INTERNET_DEFAULT_HTTPS_PORT     443
+typedef WORD INTERNET_PORT;
+typedef INTERNET_PORT *LPINTERNET_PORT;
+
+#define INTERNET_SCHEME_HTTP            1
+#define INTERNET_SCHEME_HTTPS           2
+typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME;
+
+#define ICU_ESCAPE  0x80000000
+
+/* flags for WinHttpOpen */
+#define WINHTTP_FLAG_ASYNC                  0x10000000
+
+/* flags for WinHttpOpenRequest */
+#define WINHTTP_FLAG_ESCAPE_PERCENT         0x00000004
+#define WINHTTP_FLAG_NULL_CODEPAGE          0x00000008
+#define WINHTTP_FLAG_ESCAPE_DISABLE         0x00000040
+#define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY   0x00000080
+#define WINHTTP_FLAG_BYPASS_PROXY_CACHE     0x00000100
+#define WINHTTP_FLAG_REFRESH                WINHTTP_FLAG_BYPASS_PROXY_CACHE
+#define WINHTTP_FLAG_SECURE                 0x00800000
+
+#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY   0
+#define WINHTTP_ACCESS_TYPE_NO_PROXY        1
+#define WINHTTP_ACCESS_TYPE_NAMED_PROXY     3
+
+#define WINHTTP_NO_PROXY_NAME               NULL
+#define WINHTTP_NO_PROXY_BYPASS             NULL
+
+#define WINHTTP_NO_REFERER                  NULL
+#define WINHTTP_DEFAULT_ACCEPT_TYPES        NULL
+
+#define WINHTTP_NO_ADDITIONAL_HEADERS       NULL
+#define WINHTTP_NO_REQUEST_DATA             NULL
+
+#define WINHTTP_HEADER_NAME_BY_INDEX        NULL
+#define WINHTTP_NO_OUTPUT_BUFFER            NULL
+#define WINHTTP_NO_HEADER_INDEX             NULL
+
+#define WINHTTP_ADDREQ_INDEX_MASK                    0x0000FFFF
+#define WINHTTP_ADDREQ_FLAGS_MASK                    0xFFFF0000
+#define WINHTTP_ADDREQ_FLAG_ADD_IF_NEW               0x10000000
+#define WINHTTP_ADDREQ_FLAG_ADD                      0x20000000
+#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA      0x40000000
+#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON  0x01000000
+#define WINHTTP_ADDREQ_FLAG_COALESCE                 WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
+#define WINHTTP_ADDREQ_FLAG_REPLACE                  0x80000000
+
+#define WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH 0
+
+/* flags for WinHttp{Set/Query}Options */
+#define WINHTTP_FIRST_OPTION                         WINHTTP_OPTION_CALLBACK
+#define WINHTTP_OPTION_CALLBACK                       1
+#define WINHTTP_OPTION_RESOLVE_TIMEOUT                2
+#define WINHTTP_OPTION_CONNECT_TIMEOUT                3
+#define WINHTTP_OPTION_CONNECT_RETRIES                4
+#define WINHTTP_OPTION_SEND_TIMEOUT                   5
+#define WINHTTP_OPTION_RECEIVE_TIMEOUT                6
+#define WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT       7
+#define WINHTTP_OPTION_HANDLE_TYPE                    9
+#define WINHTTP_OPTION_READ_BUFFER_SIZE              12
+#define WINHTTP_OPTION_WRITE_BUFFER_SIZE             13
+#define WINHTTP_OPTION_PARENT_HANDLE                 21
+#define WINHTTP_OPTION_EXTENDED_ERROR                24
+#define WINHTTP_OPTION_SECURITY_FLAGS                31
+#define WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT   32
+#define WINHTTP_OPTION_URL                           34
+#define WINHTTP_OPTION_SECURITY_KEY_BITNESS          36
+#define WINHTTP_OPTION_PROXY                         38
+#define WINHTTP_OPTION_USER_AGENT                    41
+#define WINHTTP_OPTION_CONTEXT_VALUE                 45
+#define WINHTTP_OPTION_CLIENT_CERT_CONTEXT           47
+#define WINHTTP_OPTION_REQUEST_PRIORITY              58
+#define WINHTTP_OPTION_HTTP_VERSION                  59
+#define WINHTTP_OPTION_DISABLE_FEATURE               63
+#define WINHTTP_OPTION_CODEPAGE                      68
+#define WINHTTP_OPTION_MAX_CONNS_PER_SERVER          73
+#define WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER      74
+#define WINHTTP_OPTION_AUTOLOGON_POLICY              77
+#define WINHTTP_OPTION_SERVER_CERT_CONTEXT           78
+#define WINHTTP_OPTION_ENABLE_FEATURE                79
+#define WINHTTP_OPTION_WORKER_THREAD_COUNT           80
+#define WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT      81
+#define WINHTTP_OPTION_PASSPORT_COBRANDING_URL       82
+#define WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH       83
+#define WINHTTP_OPTION_SECURE_PROTOCOLS              84
+#define WINHTTP_OPTION_ENABLETRACING                 85
+#define WINHTTP_OPTION_PASSPORT_SIGN_OUT             86
+#define WINHTTP_OPTION_PASSPORT_RETURN_URL           87
+#define WINHTTP_OPTION_REDIRECT_POLICY               88
+#define WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS  89
+#define WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE      90
+#define WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE      91
+#define WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE       92
+#define WINHTTP_OPTION_CONNECTION_INFO               93
+#define WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST       94
+#define WINHTTP_OPTION_SPN                           96
+#define WINHTTP_OPTION_GLOBAL_PROXY_CREDS            97
+#define WINHTTP_OPTION_GLOBAL_SERVER_CREDS           98
+#define WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT           99
+#define WINHTTP_OPTION_REJECT_USERPWD_IN_URL         100
+#define WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS 101
+#define WINHTTP_LAST_OPTION                          WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS
+#define WINHTTP_OPTION_USERNAME                      0x1000
+#define WINHTTP_OPTION_PASSWORD                      0x1001
+#define WINHTTP_OPTION_PROXY_USERNAME                0x1002
+#define WINHTTP_OPTION_PROXY_PASSWORD                0x1003
+
+#define WINHTTP_CONNS_PER_SERVER_UNLIMITED 0xFFFFFFFF
+
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM   0
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW      1
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH     2
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT  WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM
+
+#define WINHTTP_OPTION_REDIRECT_POLICY_NEVER                        0
+#define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP       1
+#define WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS                       2
+#define WINHTTP_OPTION_REDIRECT_POLICY_LAST            WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS
+#define WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT         WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP
+
+#define WINHTTP_DISABLE_PASSPORT_AUTH    0x00000000
+#define WINHTTP_ENABLE_PASSPORT_AUTH     0x10000000
+#define WINHTTP_DISABLE_PASSPORT_KEYRING 0x20000000
+#define WINHTTP_ENABLE_PASSPORT_KEYRING  0x40000000
+
+#define WINHTTP_DISABLE_COOKIES                   0x00000001
+#define WINHTTP_DISABLE_REDIRECTS                 0x00000002
+#define WINHTTP_DISABLE_AUTHENTICATION            0x00000004
+#define WINHTTP_DISABLE_KEEP_ALIVE                0x00000008
+#define WINHTTP_ENABLE_SSL_REVOCATION             0x00000001
+#define WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION   0x00000002
+#define WINHTTP_DISABLE_SPN_SERVER_PORT           0x00000000
+#define WINHTTP_ENABLE_SPN_SERVER_PORT            0x00000001
+#define WINHTTP_OPTION_SPN_MASK                   WINHTTP_ENABLE_SPN_SERVER_PORT
+
+/* Options for WinHttpOpenRequest */
+#define WINHTTP_NO_REFERER             NULL
+#define WINHTTP_DEFAULT_ACCEPT_TYPES   NULL
+
+/* Options for WinHttpSendRequest */
+#define WINHTTP_NO_ADDITIONAL_HEADERS   NULL
+#define WINHTTP_NO_REQUEST_DATA         NULL
+
+/* WinHTTP error codes */
+#define WINHTTP_ERROR_BASE                                  12000
+#define ERROR_WINHTTP_OUT_OF_HANDLES                        (WINHTTP_ERROR_BASE + 1)
+#define ERROR_WINHTTP_TIMEOUT                               (WINHTTP_ERROR_BASE + 2)
+#define ERROR_WINHTTP_INTERNAL_ERROR                        (WINHTTP_ERROR_BASE + 4)
+#define ERROR_WINHTTP_INVALID_URL                           (WINHTTP_ERROR_BASE + 5)
+#define ERROR_WINHTTP_UNRECOGNIZED_SCHEME                   (WINHTTP_ERROR_BASE + 6)
+#define ERROR_WINHTTP_NAME_NOT_RESOLVED                     (WINHTTP_ERROR_BASE + 7)
+#define ERROR_WINHTTP_INVALID_OPTION                        (WINHTTP_ERROR_BASE + 9)
+#define ERROR_WINHTTP_OPTION_NOT_SETTABLE                   (WINHTTP_ERROR_BASE + 11)
+#define ERROR_WINHTTP_SHUTDOWN                              (WINHTTP_ERROR_BASE + 12)
+#define ERROR_WINHTTP_LOGIN_FAILURE                         (WINHTTP_ERROR_BASE + 15)
+#define ERROR_WINHTTP_OPERATION_CANCELLED                   (WINHTTP_ERROR_BASE + 17)
+#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE                 (WINHTTP_ERROR_BASE + 18)
+#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE                (WINHTTP_ERROR_BASE + 19)
+#define ERROR_WINHTTP_CANNOT_CONNECT                        (WINHTTP_ERROR_BASE + 29)
+#define ERROR_WINHTTP_CONNECTION_ERROR                      (WINHTTP_ERROR_BASE + 30)
+#define ERROR_WINHTTP_RESEND_REQUEST                        (WINHTTP_ERROR_BASE + 32)
+#define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID              (WINHTTP_ERROR_BASE + 37)
+#define ERROR_WINHTTP_SECURE_CERT_CN_INVALID                (WINHTTP_ERROR_BASE + 38)
+#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED               (WINHTTP_ERROR_BASE + 44)
+#define ERROR_WINHTTP_SECURE_INVALID_CA                     (WINHTTP_ERROR_BASE + 45)
+#define ERROR_WINHTTP_SECURE_CERT_REV_FAILED                (WINHTTP_ERROR_BASE + 57)
+#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN               (WINHTTP_ERROR_BASE + 100)
+#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND               (WINHTTP_ERROR_BASE + 101)
+#define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND                (WINHTTP_ERROR_BASE + 102)
+#define ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN                (WINHTTP_ERROR_BASE + 103)
+#define ERROR_WINHTTP_HEADER_NOT_FOUND                      (WINHTTP_ERROR_BASE + 150)
+#define ERROR_WINHTTP_INVALID_SERVER_RESPONSE               (WINHTTP_ERROR_BASE + 152)
+#define ERROR_WINHTTP_INVALID_HEADER                        (WINHTTP_ERROR_BASE + 153)
+#define ERROR_WINHTTP_INVALID_QUERY_REQUEST                 (WINHTTP_ERROR_BASE + 154)
+#define ERROR_WINHTTP_HEADER_ALREADY_EXISTS                 (WINHTTP_ERROR_BASE + 155)
+#define ERROR_WINHTTP_REDIRECT_FAILED                       (WINHTTP_ERROR_BASE + 156)
+#define ERROR_WINHTTP_SECURE_CHANNEL_ERROR                  (WINHTTP_ERROR_BASE + 157)
+#define ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT                 (WINHTTP_ERROR_BASE + 166)
+#define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT             (WINHTTP_ERROR_BASE + 167)
+#define ERROR_WINHTTP_SECURE_INVALID_CERT                   (WINHTTP_ERROR_BASE + 169)
+#define ERROR_WINHTTP_SECURE_CERT_REVOKED                   (WINHTTP_ERROR_BASE + 170)
+#define ERROR_WINHTTP_NOT_INITIALIZED                       (WINHTTP_ERROR_BASE + 172)
+#define ERROR_WINHTTP_SECURE_FAILURE                        (WINHTTP_ERROR_BASE + 175)
+#define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR              (WINHTTP_ERROR_BASE + 178)
+#define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE               (WINHTTP_ERROR_BASE + 179)
+#define ERROR_WINHTTP_AUTODETECTION_FAILED                  (WINHTTP_ERROR_BASE + 180)
+#define ERROR_WINHTTP_HEADER_COUNT_EXCEEDED                 (WINHTTP_ERROR_BASE + 181)
+#define ERROR_WINHTTP_HEADER_SIZE_OVERFLOW                  (WINHTTP_ERROR_BASE + 182)
+#define ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW (WINHTTP_ERROR_BASE + 183)
+#define ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW               (WINHTTP_ERROR_BASE + 184)
+#define ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY            (WINHTTP_ERROR_BASE + 185)
+#define ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY     (WINHTTP_ERROR_BASE + 186)
+#define WINHTTP_ERROR_LAST                                  (WINHTTP_ERROR_BASE + 186)
+
+/* WinHttp status codes */
+#define HTTP_STATUS_CONTINUE            100
+#define HTTP_STATUS_SWITCH_PROTOCOLS    101
+#define HTTP_STATUS_OK                  200
+#define HTTP_STATUS_CREATED             201
+#define HTTP_STATUS_ACCEPTED            202
+#define HTTP_STATUS_PARTIAL             203
+#define HTTP_STATUS_NO_CONTENT          204
+#define HTTP_STATUS_RESET_CONTENT       205
+#define HTTP_STATUS_PARTIAL_CONTENT     206
+#define HTTP_STATUS_WEBDAV_MULTI_STATUS 207
+#define HTTP_STATUS_AMBIGUOUS           300
+#define HTTP_STATUS_MOVED               301
+#define HTTP_STATUS_REDIRECT            302
+#define HTTP_STATUS_REDIRECT_METHOD     303
+#define HTTP_STATUS_NOT_MODIFIED        304
+#define HTTP_STATUS_USE_PROXY           305
+#define HTTP_STATUS_REDIRECT_KEEP_VERB  307
+#define HTTP_STATUS_BAD_REQUEST         400
+#define HTTP_STATUS_DENIED              401
+#define HTTP_STATUS_PAYMENT_REQ         402
+#define HTTP_STATUS_FORBIDDEN           403
+#define HTTP_STATUS_NOT_FOUND           404
+#define HTTP_STATUS_BAD_METHOD          405
+#define HTTP_STATUS_NONE_ACCEPTABLE     406
+#define HTTP_STATUS_PROXY_AUTH_REQ      407
+#define HTTP_STATUS_REQUEST_TIMEOUT     408
+#define HTTP_STATUS_CONFLICT            409
+#define HTTP_STATUS_GONE                410
+#define HTTP_STATUS_LENGTH_REQUIRED     411
+#define HTTP_STATUS_PRECOND_FAILED      412
+#define HTTP_STATUS_REQUEST_TOO_LARGE   413
+#define HTTP_STATUS_URI_TOO_LONG        414
+#define HTTP_STATUS_UNSUPPORTED_MEDIA   415
+#define HTTP_STATUS_RETRY_WITH          449
+#define HTTP_STATUS_SERVER_ERROR        500
+#define HTTP_STATUS_NOT_SUPPORTED       501
+#define HTTP_STATUS_BAD_GATEWAY         502
+#define HTTP_STATUS_SERVICE_UNAVAIL     503
+#define HTTP_STATUS_GATEWAY_TIMEOUT     504
+#define HTTP_STATUS_VERSION_NOT_SUP     505
+#define HTTP_STATUS_FIRST               HTTP_STATUS_CONTINUE
+#define HTTP_STATUS_LAST                HTTP_STATUS_VERSION_NOT_SUP
+
+#define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100
+#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000
+#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID    0x00001000
+#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE   0x00000200
+#define SECURITY_FLAG_SECURE                    0x00000001
+#define SECURITY_FLAG_STRENGTH_WEAK             0x10000000
+#define SECURITY_FLAG_STRENGTH_MEDIUM           0x40000000
+#define SECURITY_FLAG_STRENGTH_STRONG           0x20000000
+
+#define ICU_NO_ENCODE          0x20000000
+#define ICU_DECODE             0x10000000
+#define ICU_NO_META            0x08000000
+#define ICU_ENCODE_SPACES_ONLY 0x04000000
+#define ICU_BROWSER_MODE       0x02000000
+#define ICU_ENCODE_PERCENT     0x00001000
+
+/* Query flags */
+#define WINHTTP_QUERY_MIME_VERSION                 0
+#define WINHTTP_QUERY_CONTENT_TYPE                 1
+#define WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING    2
+#define WINHTTP_QUERY_CONTENT_ID                   3
+#define WINHTTP_QUERY_CONTENT_DESCRIPTION          4
+#define WINHTTP_QUERY_CONTENT_LENGTH               5
+#define WINHTTP_QUERY_CONTENT_LANGUAGE             6
+#define WINHTTP_QUERY_ALLOW                        7
+#define WINHTTP_QUERY_PUBLIC                       8
+#define WINHTTP_QUERY_DATE                         9
+#define WINHTTP_QUERY_EXPIRES                      10
+#define WINHTTP_QUERY_LAST_MODIFIED                11
+#define WINHTTP_QUERY_MESSAGE_ID                   12
+#define WINHTTP_QUERY_URI                          13
+#define WINHTTP_QUERY_DERIVED_FROM                 14
+#define WINHTTP_QUERY_COST                         15
+#define WINHTTP_QUERY_LINK                         16
+#define WINHTTP_QUERY_PRAGMA                       17
+#define WINHTTP_QUERY_VERSION                      18
+#define WINHTTP_QUERY_STATUS_CODE                  19
+#define WINHTTP_QUERY_STATUS_TEXT                  20
+#define WINHTTP_QUERY_RAW_HEADERS                  21
+#define WINHTTP_QUERY_RAW_HEADERS_CRLF             22
+#define WINHTTP_QUERY_CONNECTION                   23
+#define WINHTTP_QUERY_ACCEPT                       24
+#define WINHTTP_QUERY_ACCEPT_CHARSET               25
+#define WINHTTP_QUERY_ACCEPT_ENCODING              26
+#define WINHTTP_QUERY_ACCEPT_LANGUAGE              27
+#define WINHTTP_QUERY_AUTHORIZATION                28
+#define WINHTTP_QUERY_CONTENT_ENCODING             29
+#define WINHTTP_QUERY_FORWARDED                    30
+#define WINHTTP_QUERY_FROM                         31
+#define WINHTTP_QUERY_IF_MODIFIED_SINCE            32
+#define WINHTTP_QUERY_LOCATION                     33
+#define WINHTTP_QUERY_ORIG_URI                     34
+#define WINHTTP_QUERY_REFERER                      35
+#define WINHTTP_QUERY_RETRY_AFTER                  36
+#define WINHTTP_QUERY_SERVER                       37
+#define WINHTTP_QUERY_TITLE                        38
+#define WINHTTP_QUERY_USER_AGENT                   39
+#define WINHTTP_QUERY_WWW_AUTHENTICATE             40
+#define WINHTTP_QUERY_PROXY_AUTHENTICATE           41
+#define WINHTTP_QUERY_ACCEPT_RANGES                42
+#define WINHTTP_QUERY_SET_COOKIE                   43
+#define WINHTTP_QUERY_COOKIE                       44
+#define WINHTTP_QUERY_REQUEST_METHOD               45
+#define WINHTTP_QUERY_REFRESH                      46
+#define WINHTTP_QUERY_CONTENT_DISPOSITION          47
+#define WINHTTP_QUERY_AGE                          48
+#define WINHTTP_QUERY_CACHE_CONTROL                49
+#define WINHTTP_QUERY_CONTENT_BASE                 50
+#define WINHTTP_QUERY_CONTENT_LOCATION             51
+#define WINHTTP_QUERY_CONTENT_MD5                  52
+#define WINHTTP_QUERY_CONTENT_RANGE                53
+#define WINHTTP_QUERY_ETAG                         54
+#define WINHTTP_QUERY_HOST                         55
+#define WINHTTP_QUERY_IF_MATCH                     56
+#define WINHTTP_QUERY_IF_NONE_MATCH                57
+#define WINHTTP_QUERY_IF_RANGE                     58
+#define WINHTTP_QUERY_IF_UNMODIFIED_SINCE          59
+#define WINHTTP_QUERY_MAX_FORWARDS                 60
+#define WINHTTP_QUERY_PROXY_AUTHORIZATION          61
+#define WINHTTP_QUERY_RANGE                        62
+#define WINHTTP_QUERY_TRANSFER_ENCODING            63
+#define WINHTTP_QUERY_UPGRADE                      64
+#define WINHTTP_QUERY_VARY                         65
+#define WINHTTP_QUERY_VIA                          66
+#define WINHTTP_QUERY_WARNING                      67
+#define WINHTTP_QUERY_EXPECT                       68
+#define WINHTTP_QUERY_PROXY_CONNECTION             69
+#define WINHTTP_QUERY_UNLESS_MODIFIED_SINCE        70
+#define WINHTTP_QUERY_PROXY_SUPPORT                75
+#define WINHTTP_QUERY_AUTHENTICATION_INFO          76
+#define WINHTTP_QUERY_PASSPORT_URLS                77
+#define WINHTTP_QUERY_PASSPORT_CONFIG              78
+#define WINHTTP_QUERY_MAX                          78
+#define WINHTTP_QUERY_CUSTOM                       65535
+#define WINHTTP_QUERY_FLAG_REQUEST_HEADERS         0x80000000
+#define WINHTTP_QUERY_FLAG_SYSTEMTIME              0x40000000
+#define WINHTTP_QUERY_FLAG_NUMBER                  0x20000000
+
+/* Callback options */
+#define WINHTTP_CALLBACK_STATUS_RESOLVING_NAME          0x00000001
+#define WINHTTP_CALLBACK_STATUS_NAME_RESOLVED           0x00000002
+#define WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER    0x00000004
+#define WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER     0x00000008
+#define WINHTTP_CALLBACK_STATUS_SENDING_REQUEST         0x00000010
+#define WINHTTP_CALLBACK_STATUS_REQUEST_SENT            0x00000020
+#define WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE      0x00000040
+#define WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED       0x00000080
+#define WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION      0x00000100
+#define WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED       0x00000200
+#define WINHTTP_CALLBACK_STATUS_HANDLE_CREATED          0x00000400
+#define WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING          0x00000800
+#define WINHTTP_CALLBACK_STATUS_DETECTING_PROXY         0x00001000
+#define WINHTTP_CALLBACK_STATUS_REDIRECT                0x00004000
+#define WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE   0x00008000
+#define WINHTTP_CALLBACK_STATUS_SECURE_FAILURE          0x00010000
+#define WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE       0x00020000
+#define WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE          0x00040000
+#define WINHTTP_CALLBACK_STATUS_READ_COMPLETE           0x00080000
+#define WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE          0x00100000
+#define WINHTTP_CALLBACK_STATUS_REQUEST_ERROR           0x00200000
+#define WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE    0x00400000
+#define WINHTTP_CALLBACK_FLAG_RESOLVE_NAME              (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED)
+#define WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER         (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER)
+#define WINHTTP_CALLBACK_FLAG_SEND_REQUEST              (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT)
+#define WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE          (WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED)
+#define WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION          (WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED)
+#define WINHTTP_CALLBACK_FLAG_HANDLES                   (WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING)
+#define WINHTTP_CALLBACK_FLAG_DETECTING_PROXY           WINHTTP_CALLBACK_STATUS_DETECTING_PROXY
+#define WINHTTP_CALLBACK_FLAG_REDIRECT                  WINHTTP_CALLBACK_STATUS_REDIRECT
+#define WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE     WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
+#define WINHTTP_CALLBACK_FLAG_SECURE_FAILURE            WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
+#define WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE      WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
+#define WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE         WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
+#define WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE            WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
+#define WINHTTP_CALLBACK_FLAG_READ_COMPLETE             WINHTTP_CALLBACK_STATUS_READ_COMPLETE
+#define WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE            WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
+#define WINHTTP_CALLBACK_FLAG_REQUEST_ERROR             WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
+#define WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS           (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE \
+                                                        | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WINHTTP_CALLBACK_STATUS_READ_COMPLETE          \
+                                                        | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR)
+#define WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS         0xffffffff
+#define WINHTTP_INVALID_STATUS_CALLBACK                 ((WINHTTP_STATUS_CALLBACK)(-1))
+
+#define API_RECEIVE_RESPONSE          (1)
+#define API_QUERY_DATA_AVAILABLE      (2)
+#define API_READ_DATA                 (3)
+#define API_WRITE_DATA                (4)
+#define API_SEND_REQUEST              (5)
+
+#define WINHTTP_HANDLE_TYPE_SESSION                  1
+#define WINHTTP_HANDLE_TYPE_CONNECT                  2
+#define WINHTTP_HANDLE_TYPE_REQUEST                  3
+
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED         0x00000001
+#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT            0x00000002
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED            0x00000004
+#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA              0x00000008
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID         0x00000010
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID       0x00000020
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE        0x00000040
+#define WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR  0x80000000
+
+#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL2  0x00000008
+#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL3  0x00000020
+#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1  0x00000080
+#define WINHTTP_FLAG_SECURE_PROTOCOL_ALL   (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 | WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1)
+
+#define WINHTTP_AUTH_SCHEME_BASIC      0x00000001
+#define WINHTTP_AUTH_SCHEME_NTLM       0x00000002
+#define WINHTTP_AUTH_SCHEME_PASSPORT   0x00000004
+#define WINHTTP_AUTH_SCHEME_DIGEST     0x00000008
+#define WINHTTP_AUTH_SCHEME_NEGOTIATE  0x00000010
+
+#define WINHTTP_AUTH_TARGET_SERVER     0x00000000
+#define WINHTTP_AUTH_TARGET_PROXY      0x00000001
+
+#define WINHTTP_TIME_FORMAT_BUFSIZE    62
+
+typedef struct
+{
+    DWORD   dwStructSize;
+    LPWSTR  lpszScheme;
+    DWORD   dwSchemeLength;
+    INTERNET_SCHEME nScheme;
+    LPWSTR  lpszHostName;
+    DWORD   dwHostNameLength;
+    INTERNET_PORT nPort;
+    LPWSTR  lpszUserName;
+    DWORD   dwUserNameLength;
+    LPWSTR  lpszPassword;
+    DWORD   dwPasswordLength;
+    LPWSTR  lpszUrlPath;
+    DWORD   dwUrlPathLength;
+    LPWSTR  lpszExtraInfo;
+    DWORD   dwExtraInfoLength;
+} URL_COMPONENTS, *LPURL_COMPONENTS;
+typedef URL_COMPONENTS URL_COMPONENTSW;
+typedef LPURL_COMPONENTS LPURL_COMPONENTSW;
+
+typedef struct
+{
+    DWORD_PTR dwResult;
+    DWORD dwError;
+} WINHTTP_ASYNC_RESULT, *LPWINHTTP_ASYNC_RESULT;
+
+typedef struct
+{
+    FILETIME ftExpiry;
+    FILETIME ftStart;
+    LPWSTR lpszSubjectInfo;
+    LPWSTR lpszIssuerInfo;
+    LPWSTR lpszProtocolName;
+    LPWSTR lpszSignatureAlgName;
+    LPWSTR lpszEncryptionAlgName;
+    DWORD dwKeySize;
+} WINHTTP_CERTIFICATE_INFO;
+
+typedef struct
+{
+    DWORD dwAccessType;
+    LPWSTR lpszProxy;
+    LPWSTR lpszProxyBypass;
+} WINHTTP_PROXY_INFO, *LPWINHTTP_PROXY_INFO;
+typedef WINHTTP_PROXY_INFO WINHTTP_PROXY_INFOW;
+typedef LPWINHTTP_PROXY_INFO LPWINHTTP_PROXY_INFOW;
+
+typedef struct
+{
+    BOOL   fAutoDetect;
+    LPWSTR lpszAutoConfigUrl;
+    LPWSTR lpszProxy;
+    LPWSTR lpszProxyBypass;
+} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;
+
+typedef VOID (CALLBACK *WINHTTP_STATUS_CALLBACK)(HINTERNET,DWORD_PTR,DWORD,LPVOID,DWORD);
+
+#define WINHTTP_AUTO_DETECT_TYPE_DHCP   0x00000001
+#define WINHTTP_AUTO_DETECT_TYPE_DNS_A  0x00000002
+
+#define WINHTTP_AUTOPROXY_AUTO_DETECT           0x00000001
+#define WINHTTP_AUTOPROXY_CONFIG_URL            0x00000002
+#define WINHTTP_AUTOPROXY_RUN_INPROCESS         0x00010000
+#define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY   0x00020000
+
+typedef struct
+{
+    DWORD dwFlags;
+    DWORD dwAutoDetectFlags;
+    LPCWSTR lpszAutoConfigUrl;
+    LPVOID lpvReserved;
+    DWORD dwReserved;
+    BOOL fAutoLogonIfChallenged;
+} WINHTTP_AUTOPROXY_OPTIONS;
+
+typedef struct
+{
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+} HTTP_VERSION_INFO, *LPHTTP_VERSION_INFO;
+
+#ifdef _WS2DEF_
+typedef struct
+{
+    DWORD cbSize;
+    SOCKADDR_STORAGE LocalAddress;
+    SOCKADDR_STORAGE RemoteAddress;
+} WINHTTP_CONNECTION_INFO;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL        WINAPI WinHttpAddRequestHeaders(HINTERNET,LPCWSTR,DWORD,DWORD);
+BOOL        WINAPI WinHttpDetectAutoProxyConfigUrl(DWORD,LPWSTR*);
+BOOL        WINAPI WinHttpCheckPlatform(void);
+BOOL        WINAPI WinHttpCloseHandle(HINTERNET);
+HINTERNET   WINAPI WinHttpConnect(HINTERNET,LPCWSTR,INTERNET_PORT,DWORD);
+BOOL        WINAPI WinHttpCrackUrl(LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS);
+BOOL        WINAPI WinHttpCreateUrl(LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD);
+BOOL        WINAPI WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);
+BOOL        WINAPI WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG*);
+BOOL        WINAPI WinHttpGetProxyForUrl(HINTERNET,LPCWSTR,WINHTTP_AUTOPROXY_OPTIONS*,WINHTTP_PROXY_INFO*);
+HINTERNET   WINAPI WinHttpOpen(LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD);
+HINTERNET   WINAPI WinHttpOpenRequest(HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD);
+BOOL        WINAPI WinHttpQueryAuthParams(HINTERNET,DWORD,LPVOID*);
+BOOL        WINAPI WinHttpQueryAuthSchemes(HINTERNET,LPDWORD,LPDWORD,LPDWORD);
+BOOL        WINAPI WinHttpQueryDataAvailable(HINTERNET,LPDWORD);
+BOOL        WINAPI WinHttpQueryHeaders(HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD);
+BOOL        WINAPI WinHttpQueryOption(HINTERNET,DWORD,LPVOID,LPDWORD);
+BOOL        WINAPI WinHttpReadData(HINTERNET,LPVOID,DWORD,LPDWORD);
+BOOL        WINAPI WinHttpReceiveResponse(HINTERNET,LPVOID);
+BOOL        WINAPI WinHttpSendRequest(HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR);
+BOOL        WINAPI WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);
+BOOL        WINAPI WinHttpSetCredentials(HINTERNET,DWORD,DWORD,LPCWSTR,LPCWSTR,LPVOID);
+BOOL        WINAPI WinHttpSetOption(HINTERNET,DWORD,LPVOID,DWORD);
+WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(HINTERNET,WINHTTP_STATUS_CALLBACK,DWORD,DWORD_PTR);
+BOOL        WINAPI WinHttpSetTimeouts(HINTERNET,int,int,int,int);
+BOOL        WINAPI WinHttpTimeFromSystemTime(const SYSTEMTIME *,LPWSTR);
+BOOL        WINAPI WinHttpTimeToSystemTime(LPCWSTR,SYSTEMTIME*);
+BOOL        WINAPI WinHttpWriteData(HINTERNET,LPCVOID,DWORD,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif  /* __WINE_WINHTTP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h
new file mode 100644
index 0000000..7cc4afc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h
@@ -0,0 +1,1739 @@
+/*
+ * Copyright (C) 2000 Ulrich Czekalla
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WININET_H_
+#define _WINE_WININET_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INTERNETAPI
+#define BOOLAPI INTERNETAPI BOOL WINAPI
+
+typedef LPVOID HINTERNET;
+typedef HINTERNET * LPHINTERNET;
+
+typedef WORD INTERNET_PORT;
+typedef INTERNET_PORT * LPINTERNET_PORT;
+
+
+#define INTERNET_INVALID_PORT_NUMBER    0
+
+#define INTERNET_DEFAULT_FTP_PORT       21
+#define INTERNET_DEFAULT_GOPHER_PORT    70
+#define INTERNET_DEFAULT_HTTP_PORT      80
+#define INTERNET_DEFAULT_HTTPS_PORT     443
+#define INTERNET_DEFAULT_SOCKS_PORT     1080
+
+#define INTERNET_MAX_HOST_NAME_LENGTH   256
+#define INTERNET_MAX_USER_NAME_LENGTH   128
+#define INTERNET_MAX_PASSWORD_LENGTH    128
+#define INTERNET_MAX_PORT_NUMBER_LENGTH 5
+#define INTERNET_MAX_PORT_NUMBER_VALUE  65535
+#define INTERNET_MAX_PATH_LENGTH        2048
+#define INTERNET_MAX_SCHEME_LENGTH      32
+#define INTERNET_MAX_URL_LENGTH         (INTERNET_MAX_SCHEME_LENGTH + sizeof("://")+ INTERNET_MAX_PATH_LENGTH)
+#define INTERNET_KEEP_ALIVE_UNKNOWN     ((DWORD)-1)
+#define INTERNET_KEEP_ALIVE_ENABLED     1
+#define INTERNET_KEEP_ALIVE_DISABLED    0
+#define INTERNET_REQFLAG_FROM_CACHE     0x00000001
+#define INTERNET_REQFLAG_ASYNC          0x00000002
+#define INTERNET_REQFLAG_VIA_PROXY      0x00000004
+#define INTERNET_REQFLAG_NO_HEADERS     0x00000008
+#define INTERNET_REQFLAG_PASSIVE        0x00000010
+#define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040
+#define INTERNET_FLAG_RELOAD            0x80000000
+#define INTERNET_FLAG_RAW_DATA          0x40000000
+#define INTERNET_FLAG_EXISTING_CONNECT  0x20000000
+#define INTERNET_FLAG_ASYNC             0x10000000
+#define INTERNET_FLAG_PASSIVE           0x08000000
+#define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000
+#define INTERNET_FLAG_DONT_CACHE        INTERNET_FLAG_NO_CACHE_WRITE
+#define INTERNET_FLAG_MAKE_PERSISTENT   0x02000000
+#define INTERNET_FLAG_FROM_CACHE        0x01000000
+#define INTERNET_FLAG_OFFLINE           INTERNET_FLAG_FROM_CACHE
+#define INTERNET_FLAG_SECURE            0x00800000
+#define INTERNET_FLAG_KEEP_CONNECTION   0x00400000
+#define INTERNET_FLAG_NO_AUTO_REDIRECT  0x00200000
+#define INTERNET_FLAG_READ_PREFETCH     0x00100000
+#define INTERNET_FLAG_NO_COOKIES        0x00080000
+#define INTERNET_FLAG_NO_AUTH           0x00040000
+#define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP   0x00008000
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS  0x00004000
+#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000
+#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID    0x00001000
+#define INTERNET_FLAG_RESYNCHRONIZE     0x00000800
+#define INTERNET_FLAG_HYPERLINK         0x00000400
+#define INTERNET_FLAG_NO_UI             0x00000200
+#define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100
+#define INTERNET_FLAG_CACHE_ASYNC       0x00000080
+#define INTERNET_FLAG_FORMS_SUBMIT      0x00000040
+#define INTERNET_FLAG_NEED_FILE         0x00000010
+#define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE
+#define INTERNET_FLAG_TRANSFER_ASCII    FTP_TRANSFER_TYPE_ASCII
+#define INTERNET_FLAG_TRANSFER_BINARY   FTP_TRANSFER_TYPE_BINARY
+#define SECURITY_INTERNET_MASK  (INTERNET_FLAG_IGNORE_CERT_CN_INVALID|\
+INTERNET_FLAG_IGNORE_CERT_DATE_INVALID|\
+INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|\
+INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP)
+
+#define INTERNET_FLAGS_MASK     (INTERNET_FLAG_RELOAD \
+                                | INTERNET_FLAG_RAW_DATA            \
+                                | INTERNET_FLAG_EXISTING_CONNECT    \
+                                | INTERNET_FLAG_ASYNC               \
+                                | INTERNET_FLAG_PASSIVE             \
+                                | INTERNET_FLAG_NO_CACHE_WRITE      \
+                                | INTERNET_FLAG_MAKE_PERSISTENT     \
+                                | INTERNET_FLAG_FROM_CACHE          \
+                                | INTERNET_FLAG_SECURE              \
+                                | INTERNET_FLAG_KEEP_CONNECTION     \
+                                | INTERNET_FLAG_NO_AUTO_REDIRECT    \
+                                | INTERNET_FLAG_READ_PREFETCH       \
+                                | INTERNET_FLAG_NO_COOKIES          \
+                                | INTERNET_FLAG_NO_AUTH             \
+                                | INTERNET_FLAG_CACHE_IF_NET_FAIL   \
+                                | SECURITY_INTERNET_MASK            \
+                                | INTERNET_FLAG_RESYNCHRONIZE       \
+                                | INTERNET_FLAG_HYPERLINK           \
+                                | INTERNET_FLAG_NO_UI               \
+                                | INTERNET_FLAG_PRAGMA_NOCACHE      \
+                                | INTERNET_FLAG_CACHE_ASYNC         \
+                                | INTERNET_FLAG_FORMS_SUBMIT        \
+                                | INTERNET_FLAG_NEED_FILE           \
+                                | INTERNET_FLAG_TRANSFER_BINARY     \
+                                | INTERNET_FLAG_TRANSFER_ASCII      \
+                                )
+
+#define INTERNET_ERROR_MASK_INSERT_CDROM                    0x1
+#define INTERNET_ERROR_MASK_COMBINED_SEC_CERT               0x2
+#define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG               0x4
+#define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8
+
+#define INTERNET_OPTIONS_MASK   (~INTERNET_FLAGS_MASK)
+#define WININET_API_FLAG_ASYNC          0x00000001
+#define WININET_API_FLAG_SYNC           0x00000004
+#define WININET_API_FLAG_USE_CONTEXT    0x00000008
+#define INTERNET_NO_CALLBACK            0
+
+typedef enum {
+    INTERNET_SCHEME_PARTIAL = -2,
+    INTERNET_SCHEME_UNKNOWN = -1,
+    INTERNET_SCHEME_DEFAULT = 0,
+    INTERNET_SCHEME_FTP,
+    INTERNET_SCHEME_GOPHER,
+    INTERNET_SCHEME_HTTP,
+    INTERNET_SCHEME_HTTPS,
+    INTERNET_SCHEME_FILE,
+    INTERNET_SCHEME_NEWS,
+    INTERNET_SCHEME_MAILTO,
+    INTERNET_SCHEME_SOCKS,
+    INTERNET_SCHEME_JAVASCRIPT,
+    INTERNET_SCHEME_VBSCRIPT,
+    INTERNET_SCHEME_RES,
+    INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
+    INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES
+} INTERNET_SCHEME,* LPINTERNET_SCHEME;
+
+typedef struct {
+    DWORD_PTR dwResult;
+    DWORD dwError;
+} INTERNET_ASYNC_RESULT,* LPINTERNET_ASYNC_RESULT;
+
+typedef struct {
+    DWORD dwAccessType;
+    LPCSTR lpszProxy;
+    LPCSTR lpszProxyBypass;
+} INTERNET_PROXY_INFOA,* LPINTERNET_PROXY_INFOA;
+
+typedef struct {
+    DWORD dwAccessType;
+    LPCWSTR lpszProxy;
+    LPCWSTR lpszProxyBypass;
+} INTERNET_PROXY_INFOW,* LPINTERNET_PROXY_INFOW;
+
+
+DECL_WINELIB_TYPE_AW(INTERNET_PROXY_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_PROXY_INFO)
+
+typedef struct {
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+} INTERNET_VERSION_INFO,* LPINTERNET_VERSION_INFO;
+
+typedef struct {
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+} HTTP_VERSION_INFO,* LPHTTP_VERSION_INFO;
+
+typedef struct {
+    DWORD dwConnectedState;
+    DWORD dwFlags;
+} INTERNET_CONNECTED_INFO,* LPINTERNET_CONNECTED_INFO;
+
+#define ISO_FORCE_DISCONNECTED  0x00000001
+
+typedef struct {
+    DWORD   dwStructSize;
+    LPSTR   lpszScheme;
+    DWORD   dwSchemeLength;
+    INTERNET_SCHEME nScheme;
+    LPSTR   lpszHostName;
+    DWORD   dwHostNameLength;
+    INTERNET_PORT nPort;
+    LPSTR   lpszUserName;
+    DWORD   dwUserNameLength;
+    LPSTR   lpszPassword;
+    DWORD   dwPasswordLength;
+    LPSTR   lpszUrlPath;
+    DWORD   dwUrlPathLength;
+    LPSTR   lpszExtraInfo;
+    DWORD   dwExtraInfoLength;
+} URL_COMPONENTSA,* LPURL_COMPONENTSA;
+
+typedef struct {
+    DWORD   dwStructSize;
+    LPWSTR  lpszScheme;
+    DWORD   dwSchemeLength;
+    INTERNET_SCHEME nScheme;
+    LPWSTR  lpszHostName;
+    DWORD   dwHostNameLength;
+    INTERNET_PORT nPort;
+    LPWSTR  lpszUserName;
+    DWORD   dwUserNameLength;
+    LPWSTR  lpszPassword;
+    DWORD   dwPasswordLength;
+    LPWSTR  lpszUrlPath;
+    DWORD   dwUrlPathLength;
+    LPWSTR  lpszExtraInfo;
+    DWORD   dwExtraInfoLength;
+} URL_COMPONENTSW,* LPURL_COMPONENTSW;
+
+DECL_WINELIB_TYPE_AW(URL_COMPONENTS)
+DECL_WINELIB_TYPE_AW(LPURL_COMPONENTS)
+
+typedef struct {
+    FILETIME ftExpiry;
+    FILETIME ftStart;
+    LPSTR lpszSubjectInfo;
+    LPSTR lpszIssuerInfo;
+    LPSTR lpszProtocolName;
+    LPSTR lpszSignatureAlgName;
+    LPSTR lpszEncryptionAlgName;
+    DWORD dwKeySize;
+
+} INTERNET_CERTIFICATE_INFOA,* LPINTERNET_CERTIFICATE_INFOA;
+
+typedef struct {
+    FILETIME ftExpiry;
+    FILETIME ftStart;
+    LPWSTR lpszSubjectInfo;
+    LPWSTR lpszIssuerInfo;
+    LPWSTR lpszProtocolName;
+    LPWSTR lpszSignatureAlgName;
+    LPWSTR lpszEncryptionAlgName;
+    DWORD dwKeySize;
+
+} INTERNET_CERTIFICATE_INFOW,* LPINTERNET_CERTIFICATE_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CERTIFICATE_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CERTIFICATE_INFO)
+
+typedef struct _INTERNET_BUFFERSA {
+    DWORD dwStructSize;
+    struct _INTERNET_BUFFERSA * Next;
+    LPCSTR   lpcszHeader;
+    DWORD dwHeadersLength;
+    DWORD dwHeadersTotal;
+    LPVOID lpvBuffer;
+    DWORD dwBufferLength;
+    DWORD dwBufferTotal;
+    DWORD dwOffsetLow;
+    DWORD dwOffsetHigh;
+} INTERNET_BUFFERSA,* LPINTERNET_BUFFERSA;
+
+typedef struct _INTERNET_BUFFERSW {
+    DWORD dwStructSize;
+    struct _INTERNET_BUFFERSW * Next;
+    LPCWSTR  lpcszHeader;
+    DWORD dwHeadersLength;
+    DWORD dwHeadersTotal;
+    LPVOID lpvBuffer;
+    DWORD dwBufferLength;
+    DWORD dwBufferTotal;
+    DWORD dwOffsetLow;
+    DWORD dwOffsetHigh;
+} INTERNET_BUFFERSW,* LPINTERNET_BUFFERSW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_BUFFERS)
+DECL_WINELIB_TYPE_AW(LPINTERNET_BUFFERS)
+
+#define GROUP_OWNER_STORAGE_SIZE 4
+#define GROUPNAME_MAX_LENGTH 120
+
+typedef struct _INTERNET_CACHE_GROUP_INFOA {
+    DWORD dwGroupSize;
+    DWORD dwGroupFlags;
+    DWORD dwGroupType;
+    DWORD dwDiskUsage;
+    DWORD dwDiskQuota;
+    DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+    CHAR  szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOA, * LPINTERNET_CACHE_GROUP_INFOA;
+
+typedef struct _INTERNET_CACHE_GROUP_INFOW {
+    DWORD dwGroupSize;
+    DWORD dwGroupFlags;
+    DWORD dwGroupType;
+    DWORD dwDiskUsage;
+    DWORD dwDiskQuota;
+    DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+    WCHAR szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOW, *LPINTERNET_CACHE_GROUP_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_GROUP_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_GROUP_INFO)
+
+typedef struct _INTERNET_PER_CONN_OPTIONA {
+    DWORD dwOption;
+    union {
+        DWORD    dwValue;
+        LPSTR    pszValue;
+        FILETIME ftValue;
+    } Value;
+} INTERNET_PER_CONN_OPTIONA, *LPINTERNET_PER_CONN_OPTIONA;
+
+typedef struct _INTERNET_PER_CONN_OPTIONW {
+    DWORD dwOption;
+    union {
+        DWORD    dwValue;
+        LPWSTR   pszValue;
+        FILETIME ftValue;
+    } Value;
+} INTERNET_PER_CONN_OPTIONW, *LPINTERNET_PER_CONN_OPTIONW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION)
+DECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION)
+
+#define INTERNET_PER_CONN_FLAGS                        1
+#define INTERNET_PER_CONN_PROXY_SERVER                 2
+#define INTERNET_PER_CONN_PROXY_BYPASS                 3
+#define INTERNET_PER_CONN_AUTOCONFIG_URL               4
+#define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS          5
+#define INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL     6
+#define INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS 7
+#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME  8
+#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL   9
+
+/* Values for INTERNET_PER_CONN_FLAGS */
+#define PROXY_TYPE_DIRECT         0x00000001
+#define PROXY_TYPE_PROXY          0x00000002
+#define PROXY_TYPE_AUTO_PROXY_URL 0x00000004
+#define PROXY_TYPE_AUTO_DETECT    0x00000008
+/* Values for INTERNET_PER_CONN_AUTODISCOVERY_FLAGS */
+#define AUTO_PROXY_FLAG_USER_SET                0x00000001
+#define AUTO_PROXY_FLAG_ALWAYS_DETECT           0x00000002
+#define AUTO_PROXY_FLAG_DETECTION_RUN           0x00000004
+#define AUTO_PROXY_FLAG_MIGRATED                0x00000008
+#define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT 0x00000010
+#define AUTO_PROXY_FLAG_CACHE_INIT_RUN          0x00000020
+#define AUTO_PROXY_FLAG_DETECTION_SUSPECT       0x00000040
+
+typedef struct _INTERNET_PER_CONN_OPTION_LISTA {
+    DWORD                       dwSize;
+    LPSTR                       pszConnection;
+    DWORD                       dwOptionCount;
+    DWORD                       dwOptionError;
+    LPINTERNET_PER_CONN_OPTIONA pOptions;
+} INTERNET_PER_CONN_OPTION_LISTA, *LPINTERNET_PER_CONN_OPTION_LISTA;
+
+typedef struct _INTERNET_PER_CONN_OPTION_LISTW {
+    DWORD                       dwSize;
+    LPWSTR                      pszConnection;
+    DWORD                       dwOptionCount;
+    DWORD                       dwOptionError;
+    LPINTERNET_PER_CONN_OPTIONW pOptions;
+} INTERNET_PER_CONN_OPTION_LISTW, *LPINTERNET_PER_CONN_OPTION_LISTW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION_LIST)
+DECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION_LIST)
+
+typedef struct _INTERNET_DIAGNOSTIC_SOCKET_INFO
+{
+    DWORD_PTR Socket;
+    DWORD     SourcePort;
+    DWORD     DestPort;
+    DWORD     Flags;
+} INTERNET_DIAGNOSTIC_SOCKET_INFO, *LPINTERNET_DIAGNOSTIC_SOCKET_INFO;
+
+#define IDSI_FLAG_KEEP_ALIVE 0x00000001
+#define IDSI_FLAG_SECURE     0x00000002
+#define IDSI_FLAG_PROXY      0x00000004
+#define IDSI_FLAG_TUNNEL     0x00000008
+
+BOOLAPI InternetTimeFromSystemTimeA(const SYSTEMTIME *,DWORD ,LPSTR ,DWORD);
+BOOLAPI InternetTimeFromSystemTimeW(const SYSTEMTIME *,DWORD ,LPWSTR ,DWORD);
+#define InternetTimeFromSystemTime WINELIB_NAME_AW(InternetTimeFromSystemTime)
+
+#define INTERNET_RFC1123_FORMAT    0
+#define INTERNET_RFC1123_BUFSIZE   30
+
+BOOLAPI InternetTimeToSystemTimeA(LPCSTR ,SYSTEMTIME *,DWORD);
+BOOLAPI InternetTimeToSystemTimeW(LPCWSTR ,SYSTEMTIME *,DWORD);
+#define InternetTimeToSystemTime WINELIB_NAME_AW(InternetTimeToSystemTime)
+
+BOOLAPI InternetCrackUrlA(LPCSTR ,DWORD ,DWORD ,LPURL_COMPONENTSA);
+BOOLAPI InternetCrackUrlW(LPCWSTR ,DWORD ,DWORD ,LPURL_COMPONENTSW);
+#define InternetCrackUrl  WINELIB_NAME_AW(InternetCrackUrl)
+
+BOOLAPI InternetCreateUrlA(LPURL_COMPONENTSA ,DWORD ,LPSTR ,LPDWORD);
+BOOLAPI InternetCreateUrlW(LPURL_COMPONENTSW ,DWORD ,LPWSTR ,LPDWORD);
+#define InternetCreateUrl WINELIB_NAME_AW(InternetCreateUrl)
+
+BOOLAPI InternetCanonicalizeUrlA(LPCSTR ,LPSTR ,LPDWORD ,DWORD);
+BOOLAPI InternetCanonicalizeUrlW(LPCWSTR ,LPWSTR ,LPDWORD ,DWORD);
+#define InternetCanonicalizeUrl  WINELIB_NAME_AW(InternetCanonicalizeUrl)
+
+BOOLAPI InternetCombineUrlA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD ,DWORD);
+BOOLAPI InternetCombineUrlW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD ,DWORD);
+#define InternetCombineUrl  WINELIB_NAME_AW(InternetCombineUrl)
+
+#define ICU_ESCAPE      0x80000000
+#define ICU_USERNAME    0x40000000
+#define ICU_NO_ENCODE   0x20000000
+#define ICU_DECODE      0x10000000
+#define ICU_NO_META     0x08000000
+#define ICU_ENCODE_SPACES_ONLY 0x04000000
+#define ICU_BROWSER_MODE 0x02000000
+#define ICU_ENCODE_PERCENT 0x00001000
+
+INTERNETAPI HINTERNET WINAPI InternetOpenA(LPCSTR ,DWORD ,LPCSTR ,LPCSTR ,DWORD);
+INTERNETAPI HINTERNET WINAPI InternetOpenW(LPCWSTR ,DWORD ,LPCWSTR ,LPCWSTR ,DWORD);
+#define InternetOpen  WINELIB_NAME_AW(InternetOpen)
+
+#define INTERNET_OPEN_TYPE_PRECONFIG                    0
+#define INTERNET_OPEN_TYPE_DIRECT                       1
+#define INTERNET_OPEN_TYPE_PROXY                        3
+#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4
+#define PRE_CONFIG_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PRECONFIG
+#define LOCAL_INTERNET_ACCESS       INTERNET_OPEN_TYPE_DIRECT
+#define CERN_PROXY_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PROXY
+
+BOOLAPI InternetCloseHandle(HINTERNET);
+
+INTERNETAPI HINTERNET WINAPI InternetConnectA(HINTERNET ,LPCSTR ,INTERNET_PORT ,
+	LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR );
+INTERNETAPI HINTERNET WINAPI InternetConnectW(HINTERNET ,LPCWSTR ,INTERNET_PORT ,
+	LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR );
+#define InternetConnect  WINELIB_NAME_AW(InternetConnect)
+
+#define INTERNET_SERVICE_URL    0
+#define INTERNET_SERVICE_FTP    1
+#define INTERNET_SERVICE_GOPHER 2
+#define INTERNET_SERVICE_HTTP   3
+
+#define InternetConnectUrl(hInternet,lpszUrl,dwFlags,dwContext) \
+    InternetConnect(hInternet,\
+                    lpszUrl,\
+                    INTERNET_INVALID_PORT_NUMBER,\
+                    NULL,\
+                    NULL,\
+                    INTERNET_SERVICE_URL,\
+                    dwFlags,\
+                    dwContext                       \
+                    )
+
+INTERNETAPI HINTERNET WINAPI InternetOpenUrlA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI InternetOpenUrlW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR);
+#define InternetOpenUrl  WINELIB_NAME_AW(InternetOpenUrl)
+
+BOOLAPI InternetReadFile( HINTERNET ,LPVOID ,DWORD ,LPDWORD );
+INTERNETAPI BOOL WINAPI InternetReadFileExA( HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR );
+INTERNETAPI BOOL WINAPI InternetReadFileExW( HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR );
+#define InternetReadFileEx  WINELIB_NAME_AW(InternetReadFileEx)
+
+#define IRF_ASYNC       WININET_API_FLAG_ASYNC
+#define IRF_SYNC        WININET_API_FLAG_SYNC
+#define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
+#define IRF_NO_WAIT     0x00000008
+
+INTERNETAPI DWORD WINAPI InternetSetFilePointer(HINTERNET ,LONG ,PVOID ,DWORD ,DWORD_PTR);
+BOOLAPI InternetWriteFile(HINTERNET ,LPCVOID ,DWORD ,LPDWORD);
+BOOLAPI InternetQueryDataAvailable(HINTERNET ,LPDWORD ,DWORD ,DWORD_PTR);
+BOOLAPI InternetFindNextFileA(HINTERNET ,LPVOID);
+BOOLAPI InternetFindNextFileW(HINTERNET ,LPVOID);
+#define InternetFindNextFile  WINELIB_NAME_AW(InternetFindNextFile)
+
+BOOLAPI InternetQueryOptionA(HINTERNET ,DWORD ,LPVOID ,LPDWORD);
+BOOLAPI InternetQueryOptionW(HINTERNET ,DWORD ,LPVOID ,LPDWORD);
+#define InternetQueryOption  WINELIB_NAME_AW(InternetQueryOption)
+
+BOOLAPI InternetSetOptionA(HINTERNET ,DWORD ,LPVOID ,DWORD);
+BOOLAPI InternetSetOptionW(HINTERNET ,DWORD ,LPVOID ,DWORD);
+#define InternetSetOption  WINELIB_NAME_AW(InternetSetOption)
+
+BOOLAPI InternetSetOptionExA(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD);
+BOOLAPI InternetSetOptionExW(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD);
+#define InternetSetOptionEx  WINELIB_NAME_AW(InternetSetOptionEx)
+
+BOOLAPI InternetLockRequestFile(HINTERNET ,HANDLE *);
+BOOLAPI InternetUnlockRequestFile(HANDLE);
+
+#define ISO_GLOBAL      0x00000001
+#define ISO_REGISTRY    0x00000002
+
+#define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY)
+#define INTERNET_OPTION_CALLBACK                1
+#define INTERNET_OPTION_CONNECT_TIMEOUT         2
+#define INTERNET_OPTION_CONNECT_RETRIES         3
+#define INTERNET_OPTION_CONNECT_BACKOFF         4
+#define INTERNET_OPTION_SEND_TIMEOUT            5
+#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT    INTERNET_OPTION_SEND_TIMEOUT
+#define INTERNET_OPTION_RECEIVE_TIMEOUT         6
+#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT
+#define INTERNET_OPTION_DATA_SEND_TIMEOUT       7
+#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT    8
+#define INTERNET_OPTION_HANDLE_TYPE             9
+#define INTERNET_OPTION_LISTEN_TIMEOUT          11
+#define INTERNET_OPTION_READ_BUFFER_SIZE        12
+#define INTERNET_OPTION_WRITE_BUFFER_SIZE       13
+#define INTERNET_OPTION_ASYNC_ID                15
+#define INTERNET_OPTION_ASYNC_PRIORITY          16
+#define INTERNET_OPTION_PARENT_HANDLE           21
+#define INTERNET_OPTION_KEEP_CONNECTION         22
+#define INTERNET_OPTION_REQUEST_FLAGS           23
+#define INTERNET_OPTION_EXTENDED_ERROR          24
+#define INTERNET_OPTION_OFFLINE_MODE            26
+#define INTERNET_OPTION_CACHE_STREAM_HANDLE     27
+#define INTERNET_OPTION_USERNAME                28
+#define INTERNET_OPTION_PASSWORD                29
+#define INTERNET_OPTION_ASYNC                   30
+#define INTERNET_OPTION_SECURITY_FLAGS          31
+#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32
+#define INTERNET_OPTION_DATAFILE_NAME           33
+#define INTERNET_OPTION_URL                     34
+#define INTERNET_OPTION_SECURITY_CERTIFICATE    35
+#define INTERNET_OPTION_SECURITY_KEY_BITNESS    36
+#define INTERNET_OPTION_REFRESH                 37
+#define INTERNET_OPTION_PROXY                   38
+#define INTERNET_OPTION_SETTINGS_CHANGED        39
+#define INTERNET_OPTION_VERSION                 40
+#define INTERNET_OPTION_USER_AGENT              41
+#define INTERNET_OPTION_END_BROWSER_SESSION     42
+#define INTERNET_OPTION_PROXY_USERNAME          43
+#define INTERNET_OPTION_PROXY_PASSWORD          44
+#define INTERNET_OPTION_CONTEXT_VALUE           45
+#define INTERNET_OPTION_CONNECT_LIMIT           46
+#define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47
+#define INTERNET_OPTION_POLICY                  48
+#define INTERNET_OPTION_DISCONNECTED_TIMEOUT    49
+#define INTERNET_OPTION_CONNECTED_STATE         50
+#define INTERNET_OPTION_IDLE_STATE              51
+#define INTERNET_OPTION_OFFLINE_SEMANTICS       52
+#define INTERNET_OPTION_SECONDARY_CACHE_KEY     53
+#define INTERNET_OPTION_CALLBACK_FILTER         54
+#define INTERNET_OPTION_CONNECT_TIME            55
+#define INTERNET_OPTION_SEND_THROUGHPUT         56
+#define INTERNET_OPTION_RECEIVE_THROUGHPUT      57
+#define INTERNET_OPTION_REQUEST_PRIORITY        58
+#define INTERNET_OPTION_HTTP_VERSION            59
+#define INTERNET_OPTION_RESET_URLCACHE_SESSION  60
+#define INTERNET_OPTION_ERROR_MASK              62
+#define INTERNET_OPTION_FROM_CACHE_TIMEOUT      63
+#define INTERNET_OPTION_BYPASS_EDITED_ENTRY     64
+#define INTERNET_OPTION_HTTP_DECODING           65
+#define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO  67
+#define INTERNET_OPTION_CODEPAGE                68
+#define INTERNET_OPTION_CACHE_TIMESTAMPS        69
+#define INTERNET_OPTION_DISABLE_AUTODIAL        70
+#define INTERNET_OPTION_MAX_CONNS_PER_SERVER    73
+#define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74
+#define INTERNET_OPTION_PER_CONNECTION_OPTION   75
+#define INTERNET_OPTION_DIGEST_AUTH_UNLOAD      76
+#define INTERNET_OPTION_IGNORE_OFFLINE          77
+#define INTERNET_OPTION_IDENTITY                78
+#define INTERNET_OPTION_REMOVE_IDENTITY         79
+#define INTERNET_OPTION_ALTER_IDENTITY          80
+#define INTERNET_OPTION_SUPPRESS_BEHAVIOR       81
+#define INTERNET_OPTION_AUTODIAL_MODE           82
+#define INTERNET_OPTION_AUTODIAL_CONNECTION     83
+#define INTERNET_OPTION_CLIENT_CERT_CONTEXT     84
+#define INTERNET_OPTION_AUTH_FLAGS              85
+#define INTERNET_OPTION_COOKIES_3RD_PARTY       86
+#define INTERNET_OPTION_DISABLE_PASSPORT_AUTH   87
+#define INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY 88
+#define INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT 89
+#define INTERNET_OPTION_ENABLE_PASSPORT_AUTH    90
+
+#define INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS 91
+#define INTERNET_OPTION_ACTIVATE_WORKER_THREADS           92
+#define INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS    93
+#define INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH         94
+
+#define INTERNET_OPTION_PROXY_SETTINGS_CHANGED  95
+#define INTERNET_OPTION_DATAFILE_EXT            96
+
+#define INTERNET_OPTION_CODEPAGE_PATH           100
+#define INTERNET_OPTION_CODEPAGE_EXTRA          101
+#define INTERNET_OPTION_IDN                     102
+#define INTERNET_OPTION_MAX_CONNS_PER_PROXY     103
+#define INTERNET_OPTION_SUPPRESS_SERVER_AUTH    104
+#define INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT 105
+
+
+#define INTERNET_FIRST_OPTION                   INTERNET_OPTION_CALLBACK
+#define INTERNET_LAST_OPTION                    INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT
+
+#define INTERNET_PRIORITY_FOREGROUND            1000
+#define INTERNET_HANDLE_TYPE_INTERNET           1
+#define INTERNET_HANDLE_TYPE_CONNECT_FTP        2
+#define INTERNET_HANDLE_TYPE_CONNECT_GOPHER     3
+#define INTERNET_HANDLE_TYPE_CONNECT_HTTP       4
+#define INTERNET_HANDLE_TYPE_FTP_FIND           5
+#define INTERNET_HANDLE_TYPE_FTP_FIND_HTML      6
+#define INTERNET_HANDLE_TYPE_FTP_FILE           7
+#define INTERNET_HANDLE_TYPE_FTP_FILE_HTML      8
+#define INTERNET_HANDLE_TYPE_GOPHER_FIND        9
+#define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML   10
+#define INTERNET_HANDLE_TYPE_GOPHER_FILE        11
+#define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML   12
+#define INTERNET_HANDLE_TYPE_HTTP_REQUEST       13
+#define SECURITY_FLAG_SECURE                    0x00000001
+#define SECURITY_FLAG_STRENGTH_WEAK             0x10000000
+#define SECURITY_FLAG_STRENGTH_MEDIUM           0x40000000
+#define SECURITY_FLAG_STRENGTH_STRONG           0x20000000
+#define SECURITY_FLAG_UNKNOWNBIT                0x80000000
+#define SECURITY_FLAG_NORMALBITNESS             SECURITY_FLAG_STRENGTH_WEAK
+#define SECURITY_FLAG_SSL                       0x00000002
+#define SECURITY_FLAG_SSL3                      0x00000004
+#define SECURITY_FLAG_PCT                       0x00000008
+#define SECURITY_FLAG_PCT4                      0x00000010
+#define SECURITY_FLAG_IETFSSL4                  0x00000020
+#define SECURITY_FLAG_40BIT                     SECURITY_FLAG_STRENGTH_WEAK
+#define SECURITY_FLAG_128BIT                    SECURITY_FLAG_STRENGTH_STRONG
+#define SECURITY_FLAG_56BIT                     SECURITY_FLAG_STRENGTH_MEDIUM
+#define SECURITY_FLAG_IGNORE_REVOCATION         0x00000080
+#define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100
+#define SECURITY_FLAG_IGNORE_WRONG_USAGE        0x00000200
+#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID    INTERNET_FLAG_IGNORE_CERT_CN_INVALID
+#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
+#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
+#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
+#define SECURITY_SET_MASK       (SECURITY_FLAG_IGNORE_REVOCATION |\
+                                 SECURITY_FLAG_IGNORE_UNKNOWN_CA |\
+                                 SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\
+                                 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\
+                                 SECURITY_FLAG_IGNORE_WRONG_USAGE)
+
+
+
+BOOLAPI InternetGetLastResponseInfoA(LPDWORD ,LPSTR ,LPDWORD);
+BOOLAPI InternetGetLastResponseInfoW(LPDWORD ,LPWSTR ,LPDWORD);
+#define InternetGetLastResponseInfo  WINELIB_NAME_AW(InternetGetLastResponseInfo)
+
+typedef VOID (CALLBACK *INTERNET_STATUS_CALLBACK)(HINTERNET ,DWORD_PTR ,DWORD ,
+	LPVOID ,DWORD);
+
+typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK;
+
+INTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackA(HINTERNET ,INTERNET_STATUS_CALLBACK);
+INTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackW(HINTERNET ,INTERNET_STATUS_CALLBACK);
+#define InternetSetStatusCallback WINELIB_NAME_AW(InternetSetStatusCallback)
+
+#define INTERNET_STATUS_RESOLVING_NAME          10
+#define INTERNET_STATUS_NAME_RESOLVED           11
+#define INTERNET_STATUS_CONNECTING_TO_SERVER    20
+#define INTERNET_STATUS_CONNECTED_TO_SERVER     21
+#define INTERNET_STATUS_SENDING_REQUEST         30
+#define INTERNET_STATUS_REQUEST_SENT            31
+#define INTERNET_STATUS_RECEIVING_RESPONSE      40
+#define INTERNET_STATUS_RESPONSE_RECEIVED       41
+#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED   42
+#define INTERNET_STATUS_PREFETCH                43
+#define INTERNET_STATUS_CLOSING_CONNECTION      50
+#define INTERNET_STATUS_CONNECTION_CLOSED       51
+#define INTERNET_STATUS_HANDLE_CREATED          60
+#define INTERNET_STATUS_HANDLE_CLOSING          70
+#define INTERNET_STATUS_DETECTING_PROXY         80
+#define INTERNET_STATUS_REQUEST_COMPLETE        100
+#define INTERNET_STATUS_REDIRECT                110
+#define INTERNET_STATUS_INTERMEDIATE_RESPONSE   120
+#define INTERNET_STATUS_USER_INPUT_REQUIRED     140
+#define INTERNET_STATUS_STATE_CHANGE            200
+#define INTERNET_STATUS_COOKIE_SENT             320
+#define INTERNET_STATUS_COOKIE_RECEIVED         321
+#define INTERNET_STATUS_PRIVACY_IMPACTED        324
+#define INTERNET_STATUS_P3P_HEADER              325
+#define INTERNET_STATUS_P3P_POLICYREF           326
+#define INTERNET_STATUS_COOKIE_HISTORY          327
+#define INTERNET_STATE_CONNECTED                0x00000001
+#define INTERNET_STATE_DISCONNECTED             0x00000002
+#define INTERNET_STATE_DISCONNECTED_BY_USER     0x00000010
+#define INTERNET_STATE_IDLE                     0x00000100
+#define INTERNET_STATE_BUSY                     0x00000200
+
+#define INTERNET_INVALID_STATUS_CALLBACK        ((INTERNET_STATUS_CALLBACK)(-1))
+
+#define FTP_TRANSFER_TYPE_UNKNOWN   0x00000000
+#define FTP_TRANSFER_TYPE_ASCII     0x00000001
+#define FTP_TRANSFER_TYPE_BINARY    0x00000002
+#define FTP_TRANSFER_TYPE_MASK      (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)
+
+BOOLAPI FtpCommandA(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET *);
+BOOLAPI FtpCommandW(HINTERNET, BOOL, DWORD, LPCWSTR, DWORD_PTR, HINTERNET *);
+#define FtpCommand  WINELIB_NAME_AW(FtpCommand)
+
+INTERNETAPI HINTERNET WINAPI FtpFindFirstFileA(HINTERNET ,LPCSTR ,
+	LPWIN32_FIND_DATAA ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI FtpFindFirstFileW(HINTERNET ,LPCWSTR ,
+	LPWIN32_FIND_DATAW ,DWORD ,DWORD_PTR);
+#define FtpFindFirstFile  WINELIB_NAME_AW(FtpFindFirstFile)
+
+BOOLAPI FtpGetFileA(HINTERNET ,LPCSTR ,LPCSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR);
+BOOLAPI FtpGetFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR);
+#define FtpGetFile  WINELIB_NAME_AW(FtpGetFile)
+
+DWORD WINAPI FtpGetFileSize(HINTERNET, LPDWORD);
+
+BOOLAPI FtpPutFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR);
+BOOLAPI FtpPutFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR);
+#define FtpPutFile  WINELIB_NAME_AW(FtpPutFile)
+
+BOOLAPI FtpDeleteFileA(HINTERNET ,LPCSTR);
+BOOLAPI FtpDeleteFileW(HINTERNET ,LPCWSTR);
+#define FtpDeleteFile  WINELIB_NAME_AW(FtpDeleteFile)
+
+BOOLAPI FtpRenameFileA(HINTERNET ,LPCSTR ,LPCSTR);
+BOOLAPI FtpRenameFileW(HINTERNET ,LPCWSTR ,LPCWSTR);
+#define FtpRenameFile  WINELIB_NAME_AW(FtpRenameFile)
+
+INTERNETAPI HINTERNET WINAPI FtpOpenFileA(HINTERNET ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI FtpOpenFileW(HINTERNET ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR);
+#define FtpOpenFile  WINELIB_NAME_AW(FtpOpenFile)
+
+BOOLAPI FtpCreateDirectoryA(HINTERNET ,LPCSTR);
+BOOLAPI FtpCreateDirectoryW(HINTERNET ,LPCWSTR);
+#define FtpCreateDirectory  WINELIB_NAME_AW(FtpCreateDirectory)
+
+BOOLAPI FtpRemoveDirectoryA(HINTERNET ,LPCSTR);
+BOOLAPI FtpRemoveDirectoryW(HINTERNET ,LPCWSTR);
+#define FtpRemoveDirectory  WINELIB_NAME_AW(FtpRemoveDirectory)
+
+BOOLAPI FtpSetCurrentDirectoryA(HINTERNET ,LPCSTR);
+BOOLAPI FtpSetCurrentDirectoryW(HINTERNET ,LPCWSTR);
+#define FtpSetCurrentDirectory  WINELIB_NAME_AW(FtpSetCurrentDirectory)
+
+BOOLAPI FtpGetCurrentDirectoryA(HINTERNET ,LPSTR ,LPDWORD);
+BOOLAPI FtpGetCurrentDirectoryW(HINTERNET ,LPWSTR ,LPDWORD);
+#define FtpGetCurrentDirectory  WINELIB_NAME_AW(FtpGetCurrentDirectory)
+
+#define MAX_GOPHER_DISPLAY_TEXT     128
+#define MAX_GOPHER_SELECTOR_TEXT    256
+#define MAX_GOPHER_HOST_NAME        INTERNET_MAX_HOST_NAME_LENGTH
+#define MAX_GOPHER_LOCATOR_LENGTH   (1                                  \
+                                    + MAX_GOPHER_DISPLAY_TEXT           \
+                                    + 1                                 \
+                                    + MAX_GOPHER_SELECTOR_TEXT          \
+                                    + 1                                 \
+                                    + MAX_GOPHER_HOST_NAME              \
+                                    + 1                                 \
+                                    + INTERNET_MAX_PORT_NUMBER_LENGTH   \
+                                    + 1                                 \
+                                    + 1                                 \
+                                    + 2                                 \
+                                    )
+
+
+typedef struct {
+    CHAR   DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
+    DWORD GopherType;
+    DWORD SizeLow;
+    DWORD SizeHigh;
+    FILETIME LastModificationTime;
+    CHAR   Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
+} GOPHER_FIND_DATAA,* LPGOPHER_FIND_DATAA;
+
+typedef struct {
+    WCHAR  DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
+    DWORD GopherType;
+    DWORD SizeLow;
+    DWORD SizeHigh;
+    FILETIME LastModificationTime;
+    WCHAR  Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
+} GOPHER_FIND_DATAW,* LPGOPHER_FIND_DATAW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_FIND_DATA)
+DECL_WINELIB_TYPE_AW(LPGOPHER_FIND_DATA)
+
+#define GOPHER_TYPE_TEXT_FILE       0x00000001
+#define GOPHER_TYPE_DIRECTORY       0x00000002
+#define GOPHER_TYPE_CSO             0x00000004
+#define GOPHER_TYPE_ERROR           0x00000008
+#define GOPHER_TYPE_MAC_BINHEX      0x00000010
+#define GOPHER_TYPE_DOS_ARCHIVE     0x00000020
+#define GOPHER_TYPE_UNIX_UUENCODED  0x00000040
+#define GOPHER_TYPE_INDEX_SERVER    0x00000080
+#define GOPHER_TYPE_TELNET          0x00000100
+#define GOPHER_TYPE_BINARY          0x00000200
+#define GOPHER_TYPE_REDUNDANT       0x00000400
+#define GOPHER_TYPE_TN3270          0x00000800
+#define GOPHER_TYPE_GIF             0x00001000
+#define GOPHER_TYPE_IMAGE           0x00002000
+#define GOPHER_TYPE_BITMAP          0x00004000
+#define GOPHER_TYPE_MOVIE           0x00008000
+#define GOPHER_TYPE_SOUND           0x00010000
+#define GOPHER_TYPE_HTML            0x00020000
+#define GOPHER_TYPE_PDF             0x00040000
+#define GOPHER_TYPE_CALENDAR        0x00080000
+#define GOPHER_TYPE_INLINE          0x00100000
+#define GOPHER_TYPE_UNKNOWN         0x20000000
+#define GOPHER_TYPE_ASK             0x40000000
+#define GOPHER_TYPE_GOPHER_PLUS     0x80000000
+
+#define IS_GOPHER_FILE(type)            (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) != 0)
+#define IS_GOPHER_DIRECTORY(type)       (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) != 0)
+#define IS_GOPHER_PHONE_SERVER(type)    (BOOL)(((type) & GOPHER_TYPE_CSO) != 0)
+#define IS_GOPHER_ERROR(type)           (BOOL)(((type) & GOPHER_TYPE_ERROR) != 0)
+#define IS_GOPHER_INDEX_SERVER(type)    (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) != 0)
+#define IS_GOPHER_TELNET_SESSION(type)  (BOOL)(((type) & GOPHER_TYPE_TELNET) != 0)
+#define IS_GOPHER_BACKUP_SERVER(type)   (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) != 0)
+#define IS_GOPHER_TN3270_SESSION(type)  (BOOL)(((type) & GOPHER_TYPE_TN3270) != 0)
+#define IS_GOPHER_ASK(type)             (BOOL)(((type) & GOPHER_TYPE_ASK) != 0)
+#define IS_GOPHER_PLUS(type)            (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) != 0)
+#define IS_GOPHER_TYPE_KNOWN(type)      (BOOL)(!((type) & GOPHER_TYPE_UNKNOWN))
+#define GOPHER_TYPE_FILE_MASK       (GOPHER_TYPE_TEXT_FILE \
+                                    | GOPHER_TYPE_MAC_BINHEX        \
+                                    | GOPHER_TYPE_DOS_ARCHIVE       \
+                                    | GOPHER_TYPE_UNIX_UUENCODED    \
+                                    | GOPHER_TYPE_BINARY            \
+                                    | GOPHER_TYPE_GIF               \
+                                    | GOPHER_TYPE_IMAGE             \
+                                    | GOPHER_TYPE_BITMAP            \
+                                    | GOPHER_TYPE_MOVIE             \
+                                    | GOPHER_TYPE_SOUND             \
+                                    | GOPHER_TYPE_HTML              \
+                                    | GOPHER_TYPE_PDF               \
+                                    | GOPHER_TYPE_CALENDAR          \
+                                    | GOPHER_TYPE_INLINE            \
+                                    )
+
+
+typedef struct {
+    LPCSTR Comment;
+    LPCSTR EmailAddress;
+} GOPHER_ADMIN_ATTRIBUTE_TYPEA,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Comment;
+    LPCWSTR EmailAddress;
+} GOPHER_ADMIN_ATTRIBUTE_TYPEW,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ADMIN_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ADMIN_ATTRIBUTE_TYPE)
+
+typedef struct {
+    FILETIME DateAndTime;
+} GOPHER_MOD_DATE_ATTRIBUTE_TYPE,* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;
+
+typedef struct {
+    DWORD Ttl;
+} GOPHER_TTL_ATTRIBUTE_TYPE,* LPGOPHER_TTL_ATTRIBUTE_TYPE;
+
+typedef struct {
+    INT Score;
+} GOPHER_SCORE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_ATTRIBUTE_TYPE;
+
+typedef struct {
+    INT LowerBound;
+    INT UpperBound;
+} GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
+
+typedef struct {
+    LPCSTR Site;
+} GOPHER_SITE_ATTRIBUTE_TYPEA,* LPGOPHER_SITE_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Site;
+} GOPHER_SITE_ATTRIBUTE_TYPEW,* LPGOPHER_SITE_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_SITE_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_SITE_ATTRIBUTE_TYPE)
+
+typedef struct {
+    LPCSTR Organization;
+} GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Organization;
+} GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ORGANIZATION_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE)
+
+typedef struct {
+    LPCSTR Location;
+} GOPHER_LOCATION_ATTRIBUTE_TYPEA,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Location;
+} GOPHER_LOCATION_ATTRIBUTE_TYPEW,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_LOCATION_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_LOCATION_ATTRIBUTE_TYPE)
+
+typedef struct {
+    INT DegreesNorth;
+    INT MinutesNorth;
+    INT SecondsNorth;
+    INT DegreesEast;
+    INT MinutesEast;
+    INT SecondsEast;
+} GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,* LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
+
+typedef struct {
+    INT Zone;
+} GOPHER_TIMEZONE_ATTRIBUTE_TYPE,* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;
+
+typedef struct {
+    LPCSTR Provider;
+} GOPHER_PROVIDER_ATTRIBUTE_TYPEA,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Provider;
+} GOPHER_PROVIDER_ATTRIBUTE_TYPEW,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_PROVIDER_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_PROVIDER_ATTRIBUTE_TYPE)
+
+typedef struct {
+    LPCSTR Version;
+} GOPHER_VERSION_ATTRIBUTE_TYPEA,* LPGOPHER_VERSION_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Version;
+} GOPHER_VERSION_ATTRIBUTE_TYPEW,* LPGOPHER_VERSION_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_VERSION_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_VERSION_ATTRIBUTE_TYPE)
+
+typedef struct {
+    LPCSTR ShortAbstract;
+    LPCSTR AbstractFile;
+} GOPHER_ABSTRACT_ATTRIBUTE_TYPEA,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR ShortAbstract;
+    LPCWSTR AbstractFile;
+} GOPHER_ABSTRACT_ATTRIBUTE_TYPEW,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ABSTRACT_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE)
+
+typedef struct {
+    LPCSTR ContentType;
+    LPCSTR Language;
+    DWORD Size;
+} GOPHER_VIEW_ATTRIBUTE_TYPEA,* LPGOPHER_VIEW_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR ContentType;
+    LPCWSTR Language;
+    DWORD Size;
+} GOPHER_VIEW_ATTRIBUTE_TYPEW,* LPGOPHER_VIEW_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_VIEW_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_VIEW_ATTRIBUTE_TYPE)
+
+typedef struct {
+    BOOL TreeWalk;
+} GOPHER_VERONICA_ATTRIBUTE_TYPE,* LPGOPHER_VERONICA_ATTRIBUTE_TYPE;
+
+typedef struct {
+    LPCSTR QuestionType;
+    LPCSTR QuestionText;
+} GOPHER_ASK_ATTRIBUTE_TYPEA,* LPGOPHER_ASK_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR QuestionType;
+    LPCWSTR QuestionText;
+} GOPHER_ASK_ATTRIBUTE_TYPEW,* LPGOPHER_ASK_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ASK_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ASK_ATTRIBUTE_TYPE)
+
+typedef struct {
+    LPCSTR Text;
+} GOPHER_UNKNOWN_ATTRIBUTE_TYPEA,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    LPCWSTR Text;
+} GOPHER_UNKNOWN_ATTRIBUTE_TYPEW,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_UNKNOWN_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE)
+
+typedef struct {
+    DWORD CategoryId;
+    DWORD AttributeId;
+    union {
+        GOPHER_ADMIN_ATTRIBUTE_TYPEA Admin;
+        GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
+        GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
+        GOPHER_SCORE_ATTRIBUTE_TYPE Score;
+        GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
+        GOPHER_SITE_ATTRIBUTE_TYPEA Site;
+        GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA Organization;
+        GOPHER_LOCATION_ATTRIBUTE_TYPEA Location;
+        GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
+        GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
+        GOPHER_PROVIDER_ATTRIBUTE_TYPEA Provider;
+        GOPHER_VERSION_ATTRIBUTE_TYPEA Version;
+        GOPHER_ABSTRACT_ATTRIBUTE_TYPEA Abstract;
+        GOPHER_VIEW_ATTRIBUTE_TYPEA View;
+        GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
+        GOPHER_ASK_ATTRIBUTE_TYPEA Ask;
+        GOPHER_UNKNOWN_ATTRIBUTE_TYPEA Unknown;
+    } AttributeType;
+} GOPHER_ATTRIBUTE_TYPEA, *LPGOPHER_ATTRIBUTE_TYPEA;
+
+typedef struct {
+    DWORD CategoryId;
+    DWORD AttributeId;
+    union {
+        GOPHER_ADMIN_ATTRIBUTE_TYPEW Admin;
+        GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
+        GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
+        GOPHER_SCORE_ATTRIBUTE_TYPE Score;
+        GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
+        GOPHER_SITE_ATTRIBUTE_TYPEW Site;
+        GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW Organization;
+        GOPHER_LOCATION_ATTRIBUTE_TYPEW Location;
+        GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
+        GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
+        GOPHER_PROVIDER_ATTRIBUTE_TYPEW Provider;
+        GOPHER_VERSION_ATTRIBUTE_TYPEW Version;
+        GOPHER_ABSTRACT_ATTRIBUTE_TYPEW Abstract;
+        GOPHER_VIEW_ATTRIBUTE_TYPEW View;
+        GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
+        GOPHER_ASK_ATTRIBUTE_TYPEW Ask;
+        GOPHER_UNKNOWN_ATTRIBUTE_TYPEW Unknown;
+    } AttributeType;
+} GOPHER_ATTRIBUTE_TYPEW, *LPGOPHER_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ATTRIBUTE_TYPE)
+
+#define MAX_GOPHER_CATEGORY_NAME    128
+#define MAX_GOPHER_ATTRIBUTE_NAME   128
+#define MIN_GOPHER_ATTRIBUTE_LENGTH 256
+
+#define GOPHER_INFO_CATEGORY        TEXT("+INFO")
+#define GOPHER_ADMIN_CATEGORY       TEXT("+ADMIN")
+#define GOPHER_VIEWS_CATEGORY       TEXT("+VIEWS")
+#define GOPHER_ABSTRACT_CATEGORY    TEXT("+ABSTRACT")
+#define GOPHER_VERONICA_CATEGORY    TEXT("+VERONICA")
+#define GOPHER_ADMIN_ATTRIBUTE      TEXT("Admin")
+#define GOPHER_MOD_DATE_ATTRIBUTE   TEXT("Mod-Date")
+#define GOPHER_TTL_ATTRIBUTE        TEXT("TTL")
+#define GOPHER_SCORE_ATTRIBUTE      TEXT("Score")
+#define GOPHER_RANGE_ATTRIBUTE      TEXT("Score-range")
+#define GOPHER_SITE_ATTRIBUTE       TEXT("Site")
+#define GOPHER_ORG_ATTRIBUTE        TEXT("Org")
+#define GOPHER_LOCATION_ATTRIBUTE   TEXT("Loc")
+#define GOPHER_GEOG_ATTRIBUTE       TEXT("Geog")
+#define GOPHER_TIMEZONE_ATTRIBUTE   TEXT("TZ")
+#define GOPHER_PROVIDER_ATTRIBUTE   TEXT("Provider")
+#define GOPHER_VERSION_ATTRIBUTE    TEXT("Version")
+#define GOPHER_ABSTRACT_ATTRIBUTE   TEXT("Abstract")
+#define GOPHER_VIEW_ATTRIBUTE       TEXT("View")
+#define GOPHER_TREEWALK_ATTRIBUTE   TEXT("treewalk")
+
+#define GOPHER_ATTRIBUTE_ID_BASE        0xabcccc00
+
+#define GOPHER_CATEGORY_ID_ALL          (GOPHER_ATTRIBUTE_ID_BASE + 1)
+#define GOPHER_CATEGORY_ID_INFO         (GOPHER_ATTRIBUTE_ID_BASE + 2)
+#define GOPHER_CATEGORY_ID_ADMIN        (GOPHER_ATTRIBUTE_ID_BASE + 3)
+#define GOPHER_CATEGORY_ID_VIEWS        (GOPHER_ATTRIBUTE_ID_BASE + 4)
+#define GOPHER_CATEGORY_ID_ABSTRACT     (GOPHER_ATTRIBUTE_ID_BASE + 5)
+#define GOPHER_CATEGORY_ID_VERONICA     (GOPHER_ATTRIBUTE_ID_BASE + 6)
+#define GOPHER_CATEGORY_ID_ASK          (GOPHER_ATTRIBUTE_ID_BASE + 7)
+#define GOPHER_CATEGORY_ID_UNKNOWN      (GOPHER_ATTRIBUTE_ID_BASE + 8)
+
+#define GOPHER_ATTRIBUTE_ID_ALL         (GOPHER_ATTRIBUTE_ID_BASE + 9)
+#define GOPHER_ATTRIBUTE_ID_ADMIN       (GOPHER_ATTRIBUTE_ID_BASE + 10)
+#define GOPHER_ATTRIBUTE_ID_MOD_DATE    (GOPHER_ATTRIBUTE_ID_BASE + 11)
+#define GOPHER_ATTRIBUTE_ID_TTL         (GOPHER_ATTRIBUTE_ID_BASE + 12)
+#define GOPHER_ATTRIBUTE_ID_SCORE       (GOPHER_ATTRIBUTE_ID_BASE + 13)
+#define GOPHER_ATTRIBUTE_ID_RANGE       (GOPHER_ATTRIBUTE_ID_BASE + 14)
+#define GOPHER_ATTRIBUTE_ID_SITE        (GOPHER_ATTRIBUTE_ID_BASE + 15)
+#define GOPHER_ATTRIBUTE_ID_ORG         (GOPHER_ATTRIBUTE_ID_BASE + 16)
+#define GOPHER_ATTRIBUTE_ID_LOCATION    (GOPHER_ATTRIBUTE_ID_BASE + 17)
+#define GOPHER_ATTRIBUTE_ID_GEOG        (GOPHER_ATTRIBUTE_ID_BASE + 18)
+#define GOPHER_ATTRIBUTE_ID_TIMEZONE    (GOPHER_ATTRIBUTE_ID_BASE + 19)
+#define GOPHER_ATTRIBUTE_ID_PROVIDER    (GOPHER_ATTRIBUTE_ID_BASE + 20)
+#define GOPHER_ATTRIBUTE_ID_VERSION     (GOPHER_ATTRIBUTE_ID_BASE + 21)
+#define GOPHER_ATTRIBUTE_ID_ABSTRACT    (GOPHER_ATTRIBUTE_ID_BASE + 22)
+#define GOPHER_ATTRIBUTE_ID_VIEW        (GOPHER_ATTRIBUTE_ID_BASE + 23)
+#define GOPHER_ATTRIBUTE_ID_TREEWALK    (GOPHER_ATTRIBUTE_ID_BASE + 24)
+#define GOPHER_ATTRIBUTE_ID_UNKNOWN     (GOPHER_ATTRIBUTE_ID_BASE + 25)
+
+BOOLAPI GopherCreateLocatorA(LPCSTR ,INTERNET_PORT ,LPCSTR ,
+	LPCSTR ,DWORD ,LPSTR ,LPDWORD);
+BOOLAPI GopherCreateLocatorW(LPCWSTR ,INTERNET_PORT ,LPCWSTR ,
+	LPCWSTR ,DWORD ,LPWSTR ,LPDWORD);
+#define GopherCreateLocator  WINELIB_NAME_AW(GopherCreateLocator)
+
+BOOLAPI GopherGetLocatorTypeA(LPCSTR ,LPDWORD);
+BOOLAPI GopherGetLocatorTypeW(LPCWSTR ,LPDWORD);
+#define GopherGetLocatorType  WINELIB_NAME_AW(GopherGetLocatorType)
+
+INTERNETAPI HINTERNET WINAPI GopherFindFirstFileA(HINTERNET ,LPCSTR ,
+	LPCSTR ,LPGOPHER_FIND_DATAA ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI GopherFindFirstFileW(HINTERNET ,LPCWSTR ,
+	LPCWSTR ,LPGOPHER_FIND_DATAW ,DWORD ,DWORD_PTR);
+#define GopherFindFirstFile  WINELIB_NAME_AW(GopherFindFirstFile)
+
+INTERNETAPI HINTERNET WINAPI GopherOpenFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI GopherOpenFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR);
+#define GopherOpenFile  WINELIB_NAME_AW(GopherOpenFile)
+
+typedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORA)(LPGOPHER_ATTRIBUTE_TYPEA ,DWORD);
+typedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORW)(LPGOPHER_ATTRIBUTE_TYPEW ,DWORD);
+
+DECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_ENUMERATOR)
+
+BOOLAPI GopherGetAttributeA(HINTERNET ,LPCSTR ,LPCSTR ,LPBYTE ,
+	DWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORA ,DWORD_PTR);
+BOOLAPI GopherGetAttributeW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPBYTE ,
+	DWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORW ,DWORD_PTR);
+#define GopherGetAttribute  WINELIB_NAME_AW(GopherGetAttribute)
+
+#define HTTP_MAJOR_VERSION      1
+#define HTTP_MINOR_VERSION      0
+#define HTTP_VERSION            TEXT("HTTP/1.0")
+#define HTTP_QUERY_MIME_VERSION                 0
+#define HTTP_QUERY_CONTENT_TYPE                 1
+#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING    2
+#define HTTP_QUERY_CONTENT_ID                   3
+#define HTTP_QUERY_CONTENT_DESCRIPTION          4
+#define HTTP_QUERY_CONTENT_LENGTH               5
+#define HTTP_QUERY_CONTENT_LANGUAGE             6
+#define HTTP_QUERY_ALLOW                        7
+#define HTTP_QUERY_PUBLIC                       8
+#define HTTP_QUERY_DATE                         9
+#define HTTP_QUERY_EXPIRES                      10
+#define HTTP_QUERY_LAST_MODIFIED                11
+#define HTTP_QUERY_MESSAGE_ID                   12
+#define HTTP_QUERY_URI                          13
+#define HTTP_QUERY_DERIVED_FROM                 14
+#define HTTP_QUERY_COST                         15
+#define HTTP_QUERY_LINK                         16
+#define HTTP_QUERY_PRAGMA                       17
+#define HTTP_QUERY_VERSION                      18
+#define HTTP_QUERY_STATUS_CODE                  19
+#define HTTP_QUERY_STATUS_TEXT                  20
+#define HTTP_QUERY_RAW_HEADERS                  21
+#define HTTP_QUERY_RAW_HEADERS_CRLF             22
+#define HTTP_QUERY_CONNECTION                   23
+#define HTTP_QUERY_ACCEPT                       24
+#define HTTP_QUERY_ACCEPT_CHARSET               25
+#define HTTP_QUERY_ACCEPT_ENCODING              26
+#define HTTP_QUERY_ACCEPT_LANGUAGE              27
+#define HTTP_QUERY_AUTHORIZATION                28
+#define HTTP_QUERY_CONTENT_ENCODING             29
+#define HTTP_QUERY_FORWARDED                    30
+#define HTTP_QUERY_FROM                         31
+#define HTTP_QUERY_IF_MODIFIED_SINCE            32
+#define HTTP_QUERY_LOCATION                     33
+#define HTTP_QUERY_ORIG_URI                     34
+#define HTTP_QUERY_REFERER                      35
+#define HTTP_QUERY_RETRY_AFTER                  36
+#define HTTP_QUERY_SERVER                       37
+#define HTTP_QUERY_TITLE                        38
+#define HTTP_QUERY_USER_AGENT                   39
+#define HTTP_QUERY_WWW_AUTHENTICATE             40
+#define HTTP_QUERY_PROXY_AUTHENTICATE           41
+#define HTTP_QUERY_ACCEPT_RANGES                42
+#define HTTP_QUERY_SET_COOKIE                   43
+#define HTTP_QUERY_COOKIE                       44
+#define HTTP_QUERY_REQUEST_METHOD               45
+#define HTTP_QUERY_REFRESH                      46
+#define HTTP_QUERY_CONTENT_DISPOSITION          47
+#define HTTP_QUERY_AGE                          48
+#define HTTP_QUERY_CACHE_CONTROL                49
+#define HTTP_QUERY_CONTENT_BASE                 50
+#define HTTP_QUERY_CONTENT_LOCATION             51
+#define HTTP_QUERY_CONTENT_MD5                  52
+#define HTTP_QUERY_CONTENT_RANGE                53
+#define HTTP_QUERY_ETAG                         54
+#define HTTP_QUERY_HOST                         55
+#define HTTP_QUERY_IF_MATCH                     56
+#define HTTP_QUERY_IF_NONE_MATCH                57
+#define HTTP_QUERY_IF_RANGE                     58
+#define HTTP_QUERY_IF_UNMODIFIED_SINCE          59
+#define HTTP_QUERY_MAX_FORWARDS                 60
+#define HTTP_QUERY_PROXY_AUTHORIZATION          61
+#define HTTP_QUERY_RANGE                        62
+#define HTTP_QUERY_TRANSFER_ENCODING            63
+#define HTTP_QUERY_UPGRADE                      64
+#define HTTP_QUERY_VARY                         65
+#define HTTP_QUERY_VIA                          66
+#define HTTP_QUERY_WARNING                      67
+#define HTTP_QUERY_EXPECT                       68
+#define HTTP_QUERY_PROXY_CONNECTION             69
+#define HTTP_QUERY_UNLESS_MODIFIED_SINCE        70
+#define HTTP_QUERY_ECHO_REQUEST                 71
+#define HTTP_QUERY_ECHO_REPLY                   72
+#define HTTP_QUERY_ECHO_HEADERS                 73
+#define HTTP_QUERY_ECHO_HEADERS_CRLF            74
+#define HTTP_QUERY_PROXY_SUPPORT                75
+#define HTTP_QUERY_AUTHENTICATION_INFO          76
+#define HTTP_QUERY_PASSPORT_URLS                77
+#define HTTP_QUERY_PASSPORT_CONFIG              78
+#define HTTP_QUERY_MAX                          78
+#define HTTP_QUERY_CUSTOM                       65535
+#define HTTP_QUERY_FLAG_REQUEST_HEADERS         0x80000000
+#define HTTP_QUERY_FLAG_SYSTEMTIME              0x40000000
+#define HTTP_QUERY_FLAG_NUMBER                  0x20000000
+#define HTTP_QUERY_FLAG_COALESCE                0x10000000
+#define HTTP_QUERY_MODIFIER_FLAGS_MASK          (HTTP_QUERY_FLAG_REQUEST_HEADERS \
+                                                | HTTP_QUERY_FLAG_SYSTEMTIME        \
+                                                | HTTP_QUERY_FLAG_NUMBER            \
+                                                | HTTP_QUERY_FLAG_COALESCE          \
+                                                )
+#define HTTP_QUERY_HEADER_MASK                  (~HTTP_QUERY_MODIFIER_FLAGS_MASK)
+
+#define HTTP_STATUS_CONTINUE            100
+#define HTTP_STATUS_SWITCH_PROTOCOLS    101
+#define HTTP_STATUS_OK                  200
+#define HTTP_STATUS_CREATED             201
+#define HTTP_STATUS_ACCEPTED            202
+#define HTTP_STATUS_PARTIAL             203
+#define HTTP_STATUS_NO_CONTENT          204
+#define HTTP_STATUS_RESET_CONTENT       205
+#define HTTP_STATUS_PARTIAL_CONTENT     206
+#define HTTP_STATUS_AMBIGUOUS           300
+#define HTTP_STATUS_MOVED               301
+#define HTTP_STATUS_REDIRECT            302
+#define HTTP_STATUS_REDIRECT_METHOD     303
+#define HTTP_STATUS_NOT_MODIFIED        304
+#define HTTP_STATUS_USE_PROXY           305
+#define HTTP_STATUS_REDIRECT_KEEP_VERB  307
+#define HTTP_STATUS_BAD_REQUEST         400
+#define HTTP_STATUS_DENIED              401
+#define HTTP_STATUS_PAYMENT_REQ         402
+#define HTTP_STATUS_FORBIDDEN           403
+#define HTTP_STATUS_NOT_FOUND           404
+#define HTTP_STATUS_BAD_METHOD          405
+#define HTTP_STATUS_NONE_ACCEPTABLE     406
+#define HTTP_STATUS_PROXY_AUTH_REQ      407
+#define HTTP_STATUS_REQUEST_TIMEOUT     408
+#define HTTP_STATUS_CONFLICT            409
+#define HTTP_STATUS_GONE                410
+#define HTTP_STATUS_LENGTH_REQUIRED     411
+#define HTTP_STATUS_PRECOND_FAILED      412
+#define HTTP_STATUS_REQUEST_TOO_LARGE   413
+#define HTTP_STATUS_URI_TOO_LONG        414
+#define HTTP_STATUS_UNSUPPORTED_MEDIA   415
+#define HTTP_STATUS_SERVER_ERROR        500
+#define HTTP_STATUS_NOT_SUPPORTED       501
+#define HTTP_STATUS_BAD_GATEWAY         502
+#define HTTP_STATUS_SERVICE_UNAVAIL     503
+#define HTTP_STATUS_GATEWAY_TIMEOUT     504
+#define HTTP_STATUS_VERSION_NOT_SUP     505
+#define HTTP_STATUS_FIRST               HTTP_STATUS_CONTINUE
+#define HTTP_STATUS_LAST                HTTP_STATUS_VERSION_NOT_SUP
+
+
+INTERNETAPI HINTERNET WINAPI HttpOpenRequestA(HINTERNET ,LPCSTR ,LPCSTR ,LPCSTR ,
+	LPCSTR ,LPCSTR * ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI HttpOpenRequestW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPCWSTR ,
+	LPCWSTR ,LPCWSTR * ,DWORD ,DWORD_PTR);
+#define HttpOpenRequest  WINELIB_NAME_AW(HttpOpenRequest)
+
+BOOLAPI HttpAddRequestHeadersA(HINTERNET ,LPCSTR ,DWORD ,DWORD);
+BOOLAPI HttpAddRequestHeadersW(HINTERNET ,LPCWSTR ,DWORD ,DWORD);
+#define HttpAddRequestHeaders  WINELIB_NAME_AW(HttpAddRequestHeaders)
+
+#define HTTP_ADDREQ_INDEX_MASK      0x0000FFFF
+#define HTTP_ADDREQ_FLAGS_MASK      0xFFFF0000
+#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
+#define HTTP_ADDREQ_FLAG_ADD        0x20000000
+#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA       0x40000000
+#define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON   0x01000000
+#define HTTP_ADDREQ_FLAG_COALESCE                  HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
+#define HTTP_ADDREQ_FLAG_REPLACE    0x80000000
+
+BOOLAPI HttpSendRequestA(HINTERNET ,LPCSTR ,DWORD ,LPVOID ,DWORD);
+BOOLAPI HttpSendRequestW(HINTERNET ,LPCWSTR ,DWORD ,LPVOID ,DWORD);
+#define HttpSendRequest  WINELIB_NAME_AW(HttpSendRequest)
+
+INTERNETAPI BOOL WINAPI HttpSendRequestExA(HINTERNET ,LPINTERNET_BUFFERSA ,
+	LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR);
+INTERNETAPI BOOL WINAPI HttpSendRequestExW(HINTERNET ,LPINTERNET_BUFFERSW ,
+	LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR);
+#define HttpSendRequestEx  WINELIB_NAME_AW(HttpSendRequestEx)
+
+#define HSR_ASYNC       WININET_API_FLAG_ASYNC
+#define HSR_SYNC        WININET_API_FLAG_SYNC
+#define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
+#define HSR_INITIATE    0x00000008
+#define HSR_DOWNLOAD    0x00000010
+#define HSR_CHUNKED     0x00000020
+
+INTERNETAPI BOOL WINAPI HttpEndRequestA(HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR);
+INTERNETAPI BOOL WINAPI HttpEndRequestW(HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR);
+#define HttpEndRequest  WINELIB_NAME_AW(HttpEndRequest)
+
+BOOLAPI HttpQueryInfoA(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD);
+BOOLAPI HttpQueryInfoW(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD);
+#define HttpQueryInfo  WINELIB_NAME_AW(HttpQueryInfo)
+
+BOOLAPI InternetClearAllPerSiteCookieDecisions(VOID);
+
+BOOLAPI InternetEnumPerSiteCookieDecisionA(LPSTR,ULONG *,ULONG *,ULONG);
+BOOLAPI InternetEnumPerSiteCookieDecisionW(LPWSTR,ULONG *,ULONG *,ULONG);
+#define InternetEnumPerSiteCookieDecision WINELIB_NAME_AW(InternetEnumPerSiteCookieDecision)
+
+#define INTERNET_COOKIE_IS_SECURE       0x00000001
+#define INTERNET_COOKIE_IS_SESSION      0x00000002
+#define INTERNET_COOKIE_THIRD_PARTY     0x00000010
+#define INTERNET_COOKIE_PROMPT_REQUIRED 0x00000020
+#define INTERNET_COOKIE_EVALUATE_P3P    0x00000040
+#define INTERNET_COOKIE_APPLY_P3P       0x00000080
+#define INTERNET_COOKIE_P3P_ENABLED     0x00000100
+#define INTERNET_COOKIE_IS_RESTRICTED   0x00000200
+#define INTERNET_COOKIE_IE6             0x00000400
+#define INTERNET_COOKIE_IS_LEGACY       0x00000800
+
+BOOLAPI InternetGetCookieExA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD,LPVOID);
+BOOLAPI InternetGetCookieExW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD,LPVOID);
+#define InternetGetCookieEx WINELIB_NAME_AW(InternetGetCookieEx)
+
+DWORD WINAPI InternetSetCookieExA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD_PTR);
+DWORD WINAPI InternetSetCookieExW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD_PTR);
+#define InternetSetCookieEx WINELIB_NAME_AW(InternetSetCookieEx)
+
+BOOLAPI InternetGetPerSiteCookieDecisionA(LPCSTR,ULONG *);
+BOOLAPI InternetGetPerSiteCookieDecisionW(LPCWSTR,ULONG *);
+#define InternetGetPerSiteCookieDecision WINELIB_NAME_AW(InternetGetPerSiteCookieDecision)
+
+BOOLAPI InternetSetPerSiteCookieDecisionA(LPCSTR,DWORD);
+BOOLAPI InternetSetPerSiteCookieDecisionW(LPCWSTR,DWORD);
+#define InternetSetPerSiteCookieDecision WINELIB_NAME_AW(InternetSetPerSiteCookieDecision)
+
+BOOLAPI InternetSetCookieA(LPCSTR ,LPCSTR ,LPCSTR);
+BOOLAPI InternetSetCookieW(LPCWSTR ,LPCWSTR ,LPCWSTR);
+#define InternetSetCookie  WINELIB_NAME_AW(InternetSetCookie)
+
+BOOLAPI InternetGetCookieA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD);
+BOOLAPI InternetGetCookieW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD);
+#define InternetGetCookie  WINELIB_NAME_AW(InternetGetCookie)
+
+INTERNETAPI DWORD WINAPI InternetAttemptConnect(DWORD);
+BOOLAPI InternetCheckConnectionA(LPCSTR ,DWORD ,DWORD);
+BOOLAPI InternetCheckConnectionW(LPCWSTR ,DWORD ,DWORD);
+#define InternetCheckConnection  WINELIB_NAME_AW(InternetCheckConnection)
+
+#define FLAG_ICC_FORCE_CONNECTION       0x00000001
+
+#define FLAGS_ERROR_UI_FILTER_FOR_ERRORS        0x01
+#define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS     0x02
+#define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA      0x04
+#define FLAGS_ERROR_UI_FLAGS_NO_UI              0x08
+#define FLAGS_ERROR_UI_SERIALIZE_DIALOGS        0x10
+
+DWORD InternetAuthNotifyCallback ( DWORD_PTR ,DWORD ,LPVOID );
+typedef DWORD (CALLBACK *PFN_AUTH_NOTIFY) (DWORD_PTR,DWORD,LPVOID);
+
+typedef struct
+{
+    DWORD            cbStruct;
+    DWORD            dwOptions;
+    PFN_AUTH_NOTIFY  pfnNotify;
+    DWORD_PTR        dwContext;
+}
+INTERNET_AUTH_NOTIFY_DATA;
+
+
+INTERNETAPI DWORD WINAPI InternetErrorDlg(HWND ,HINTERNET ,DWORD ,DWORD ,LPVOID *);
+INTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingA(HWND ,LPSTR ,LPSTR ,BOOL);
+INTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingW(HWND ,LPWSTR ,LPWSTR ,BOOL);
+#define InternetConfirmZoneCrossing WINELIB_NAME_AW(InternetConfirmZoneCrossing)
+
+#define PRIVACY_TEMPLATE_NO_COOKIES  0
+#define PRIVACY_TEMPLATE_HIGH        1
+#define PRIVACY_TEMPLATE_MEDIUM_HIGH 2
+#define PRIVACY_TEMPLATE_MEDIUM      3
+#define PRIVACY_TEMPLATE_MEDIUM_LOW  4
+#define PRIVACY_TEMPLATE_LOW         5
+#define PRIVACY_TEMPLATE_CUSTOM      100
+#define PRIVACY_TEMPLATE_ADVANCED    101
+
+#define PRIVACY_TEMPLATE_MAX         PRIVACY_TEMPLATE_LOW
+
+#define PRIVACY_TYPE_FIRST_PARTY 0
+#define PRIVACY_TYPE_THIRD_PARTY 1
+
+INTERNETAPI DWORD WINAPI PrivacySetZonePreferenceW(DWORD,DWORD,DWORD,LPCWSTR);
+INTERNETAPI DWORD WINAPI PrivacyGetZonePreferenceW(DWORD,DWORD,LPDWORD,LPWSTR,LPDWORD);
+
+#define INTERNET_ERROR_BASE                     12000
+
+#define ERROR_INTERNET_OUT_OF_HANDLES           (INTERNET_ERROR_BASE + 1)
+#define ERROR_INTERNET_TIMEOUT                  (INTERNET_ERROR_BASE + 2)
+#define ERROR_INTERNET_EXTENDED_ERROR           (INTERNET_ERROR_BASE + 3)
+#define ERROR_INTERNET_INTERNAL_ERROR           (INTERNET_ERROR_BASE + 4)
+#define ERROR_INTERNET_INVALID_URL              (INTERNET_ERROR_BASE + 5)
+#define ERROR_INTERNET_UNRECOGNIZED_SCHEME      (INTERNET_ERROR_BASE + 6)
+#define ERROR_INTERNET_NAME_NOT_RESOLVED        (INTERNET_ERROR_BASE + 7)
+#define ERROR_INTERNET_PROTOCOL_NOT_FOUND       (INTERNET_ERROR_BASE + 8)
+#define ERROR_INTERNET_INVALID_OPTION           (INTERNET_ERROR_BASE + 9)
+#define ERROR_INTERNET_BAD_OPTION_LENGTH        (INTERNET_ERROR_BASE + 10)
+#define ERROR_INTERNET_OPTION_NOT_SETTABLE      (INTERNET_ERROR_BASE + 11)
+#define ERROR_INTERNET_SHUTDOWN                 (INTERNET_ERROR_BASE + 12)
+#define ERROR_INTERNET_INCORRECT_USER_NAME      (INTERNET_ERROR_BASE + 13)
+#define ERROR_INTERNET_INCORRECT_PASSWORD       (INTERNET_ERROR_BASE + 14)
+#define ERROR_INTERNET_LOGIN_FAILURE            (INTERNET_ERROR_BASE + 15)
+#define ERROR_INTERNET_INVALID_OPERATION        (INTERNET_ERROR_BASE + 16)
+#define ERROR_INTERNET_OPERATION_CANCELLED      (INTERNET_ERROR_BASE + 17)
+#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE    (INTERNET_ERROR_BASE + 18)
+#define ERROR_INTERNET_INCORRECT_HANDLE_STATE   (INTERNET_ERROR_BASE + 19)
+#define ERROR_INTERNET_NOT_PROXY_REQUEST        (INTERNET_ERROR_BASE + 20)
+#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21)
+#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER   (INTERNET_ERROR_BASE + 22)
+#define ERROR_INTERNET_NO_DIRECT_ACCESS         (INTERNET_ERROR_BASE + 23)
+#define ERROR_INTERNET_NO_CONTEXT               (INTERNET_ERROR_BASE + 24)
+#define ERROR_INTERNET_NO_CALLBACK              (INTERNET_ERROR_BASE + 25)
+#define ERROR_INTERNET_REQUEST_PENDING          (INTERNET_ERROR_BASE + 26)
+#define ERROR_INTERNET_INCORRECT_FORMAT         (INTERNET_ERROR_BASE + 27)
+#define ERROR_INTERNET_ITEM_NOT_FOUND           (INTERNET_ERROR_BASE + 28)
+#define ERROR_INTERNET_CANNOT_CONNECT           (INTERNET_ERROR_BASE + 29)
+#define ERROR_INTERNET_CONNECTION_ABORTED       (INTERNET_ERROR_BASE + 30)
+#define ERROR_INTERNET_CONNECTION_RESET         (INTERNET_ERROR_BASE + 31)
+#define ERROR_INTERNET_FORCE_RETRY              (INTERNET_ERROR_BASE + 32)
+#define ERROR_INTERNET_INVALID_PROXY_REQUEST    (INTERNET_ERROR_BASE + 33)
+#define ERROR_INTERNET_NEED_UI                  (INTERNET_ERROR_BASE + 34)
+#define ERROR_INTERNET_HANDLE_EXISTS            (INTERNET_ERROR_BASE + 36)
+#define ERROR_INTERNET_SEC_CERT_DATE_INVALID    (INTERNET_ERROR_BASE + 37)
+#define ERROR_INTERNET_SEC_CERT_CN_INVALID      (INTERNET_ERROR_BASE + 38)
+#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR   (INTERNET_ERROR_BASE + 39)
+#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR   (INTERNET_ERROR_BASE + 40)
+#define ERROR_INTERNET_MIXED_SECURITY           (INTERNET_ERROR_BASE + 41)
+#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE   (INTERNET_ERROR_BASE + 42)
+#define ERROR_INTERNET_POST_IS_NON_SECURE       (INTERNET_ERROR_BASE + 43)
+#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED  (INTERNET_ERROR_BASE + 44)
+#define ERROR_INTERNET_INVALID_CA               (INTERNET_ERROR_BASE + 45)
+#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP    (INTERNET_ERROR_BASE + 46)
+#define ERROR_INTERNET_ASYNC_THREAD_FAILED      (INTERNET_ERROR_BASE + 47)
+#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE   (INTERNET_ERROR_BASE + 48)
+#define ERROR_INTERNET_DIALOG_PENDING           (INTERNET_ERROR_BASE + 49)
+#define ERROR_INTERNET_RETRY_DIALOG             (INTERNET_ERROR_BASE + 50)
+#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR  (INTERNET_ERROR_BASE + 52)
+#define ERROR_INTERNET_INSERT_CDROM             (INTERNET_ERROR_BASE + 53)
+#define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED    (INTERNET_ERROR_BASE + 54)
+#define ERROR_INTERNET_SEC_CERT_ERRORS          (INTERNET_ERROR_BASE + 55)
+#define ERROR_INTERNET_SEC_CERT_NO_REV          (INTERNET_ERROR_BASE + 56)
+#define ERROR_INTERNET_SEC_CERT_REV_FAILED      (INTERNET_ERROR_BASE + 57)
+#define ERROR_FTP_TRANSFER_IN_PROGRESS          (INTERNET_ERROR_BASE + 110)
+#define ERROR_FTP_DROPPED                       (INTERNET_ERROR_BASE + 111)
+#define ERROR_FTP_NO_PASSIVE_MODE               (INTERNET_ERROR_BASE + 112)
+#define ERROR_GOPHER_PROTOCOL_ERROR             (INTERNET_ERROR_BASE + 130)
+#define ERROR_GOPHER_NOT_FILE                   (INTERNET_ERROR_BASE + 131)
+#define ERROR_GOPHER_DATA_ERROR                 (INTERNET_ERROR_BASE + 132)
+#define ERROR_GOPHER_END_OF_DATA                (INTERNET_ERROR_BASE + 133)
+#define ERROR_GOPHER_INVALID_LOCATOR            (INTERNET_ERROR_BASE + 134)
+#define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE     (INTERNET_ERROR_BASE + 135)
+#define ERROR_GOPHER_NOT_GOPHER_PLUS            (INTERNET_ERROR_BASE + 136)
+#define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND        (INTERNET_ERROR_BASE + 137)
+#define ERROR_GOPHER_UNKNOWN_LOCATOR            (INTERNET_ERROR_BASE + 138)
+#define ERROR_HTTP_HEADER_NOT_FOUND             (INTERNET_ERROR_BASE + 150)
+#define ERROR_HTTP_DOWNLEVEL_SERVER             (INTERNET_ERROR_BASE + 151)
+#define ERROR_HTTP_INVALID_SERVER_RESPONSE      (INTERNET_ERROR_BASE + 152)
+#define ERROR_HTTP_INVALID_HEADER               (INTERNET_ERROR_BASE + 153)
+#define ERROR_HTTP_INVALID_QUERY_REQUEST        (INTERNET_ERROR_BASE + 154)
+#define ERROR_HTTP_HEADER_ALREADY_EXISTS        (INTERNET_ERROR_BASE + 155)
+#define ERROR_HTTP_REDIRECT_FAILED              (INTERNET_ERROR_BASE + 156)
+#define ERROR_HTTP_NOT_REDIRECTED               (INTERNET_ERROR_BASE + 160)
+#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION    (INTERNET_ERROR_BASE + 161)
+#define ERROR_HTTP_COOKIE_DECLINED              (INTERNET_ERROR_BASE + 162)
+#define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION  (INTERNET_ERROR_BASE + 168)
+#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR   (INTERNET_ERROR_BASE + 157)
+#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE     (INTERNET_ERROR_BASE + 158)
+#define ERROR_INTERNET_TCPIP_NOT_INSTALLED      (INTERNET_ERROR_BASE + 159)
+#define ERROR_INTERNET_DISCONNECTED             (INTERNET_ERROR_BASE + 163)
+#define ERROR_INTERNET_SERVER_UNREACHABLE       (INTERNET_ERROR_BASE + 164)
+#define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 165)
+#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT    (INTERNET_ERROR_BASE + 166)
+#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT (INTERNET_ERROR_BASE + 167)
+#define ERROR_INTERNET_SEC_INVALID_CERT    (INTERNET_ERROR_BASE + 169)
+#define ERROR_INTERNET_SEC_CERT_REVOKED    (INTERNET_ERROR_BASE + 170)
+#define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK  (INTERNET_ERROR_BASE + 171)
+#define ERROR_INTERNET_NOT_INITIALIZED            (INTERNET_ERROR_BASE + 172)
+#define ERROR_INTERNET_NEED_MSN_SSPI_PKG          (INTERNET_ERROR_BASE + 173)
+#define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY  (INTERNET_ERROR_BASE + 174)
+#define ERROR_INTERNET_DECODING_FAILED            (INTERNET_ERROR_BASE + 175)
+#define INTERNET_ERROR_LAST                       ERROR_INTERNET_DECODING_FAILED
+
+
+#define NORMAL_CACHE_ENTRY              0x00000001
+#define STICKY_CACHE_ENTRY              0x00000004
+#define EDITED_CACHE_ENTRY              0x00000008
+#define COOKIE_CACHE_ENTRY              0x00100000
+#define URLHISTORY_CACHE_ENTRY          0x00200000
+#define TRACK_OFFLINE_CACHE_ENTRY       0x00000010
+#define TRACK_ONLINE_CACHE_ENTRY        0x00000020
+#define SPARSE_CACHE_ENTRY              0x00010000
+
+#define URLCACHE_FIND_DEFAULT_FILTER    NORMAL_CACHE_ENTRY             \
+                                    |   COOKIE_CACHE_ENTRY             \
+                                    |   URLHISTORY_CACHE_ENTRY         \
+                                    |   TRACK_OFFLINE_CACHE_ENTRY      \
+                                    |   TRACK_ONLINE_CACHE_ENTRY       \
+                                    |   STICKY_CACHE_ENTRY
+
+
+typedef struct _INTERNET_CACHE_ENTRY_INFOA {
+    DWORD dwStructSize;
+    LPSTR lpszSourceUrlName;
+    LPSTR   lpszLocalFileName;
+    DWORD CacheEntryType;
+    DWORD dwUseCount;
+    DWORD dwHitRate;
+    DWORD dwSizeLow;
+    DWORD dwSizeHigh;
+    FILETIME LastModifiedTime;
+    FILETIME ExpireTime;
+    FILETIME LastAccessTime;
+    FILETIME LastSyncTime;
+
+    LPBYTE lpHeaderInfo;
+    DWORD dwHeaderInfoSize;
+    LPSTR lpszFileExtension;
+    union {
+      DWORD dwReserved;
+      DWORD dwExemptDelta;
+    } DUMMYUNIONNAME;
+} INTERNET_CACHE_ENTRY_INFOA,* LPINTERNET_CACHE_ENTRY_INFOA;
+
+typedef struct _INTERNET_CACHE_ENTRY_INFOW {
+    DWORD dwStructSize;
+    LPWSTR lpszSourceUrlName;
+    LPWSTR  lpszLocalFileName;
+    DWORD CacheEntryType;
+    DWORD dwUseCount;
+    DWORD dwHitRate;
+    DWORD dwSizeLow;
+    DWORD dwSizeHigh;
+    FILETIME LastModifiedTime;
+    FILETIME ExpireTime;
+    FILETIME LastAccessTime;
+    FILETIME LastSyncTime;
+
+    LPBYTE lpHeaderInfo;
+    DWORD dwHeaderInfoSize;
+    LPWSTR  lpszFileExtension;
+    union {
+      DWORD dwReserved;
+      DWORD dwExemptDelta;
+    } DUMMYUNIONNAME;
+} INTERNET_CACHE_ENTRY_INFOW,* LPINTERNET_CACHE_ENTRY_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_ENTRY_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_ENTRY_INFO)
+
+typedef struct _INTERNET_CACHE_TIMESTAMPS
+{
+    FILETIME ftExpires;
+    FILETIME ftLastModified;
+} INTERNET_CACHE_TIMESTAMPS, *LPINTERNET_CACHE_TIMESTAMPS;
+
+BOOLAPI CreateUrlCacheEntryA(LPCSTR ,DWORD ,LPCSTR ,LPSTR ,DWORD);
+BOOLAPI CreateUrlCacheEntryW(LPCWSTR ,DWORD ,LPCWSTR ,LPWSTR ,DWORD);
+#define CreateUrlCacheEntry  WINELIB_NAME_AW(CreateUrlCacheEntry)
+
+BOOLAPI CommitUrlCacheEntryA(LPCSTR,LPCSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCSTR,LPCSTR);
+BOOLAPI CommitUrlCacheEntryW(LPCWSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPWSTR,DWORD,LPCWSTR,LPCWSTR);
+#define CommitUrlCacheEntry  WINELIB_NAME_AW(CommitUrlCacheEntry)
+
+BOOLAPI ResumeSuspendedDownload(HINTERNET, DWORD);
+
+BOOLAPI RetrieveUrlCacheEntryFileA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,DWORD);
+BOOLAPI RetrieveUrlCacheEntryFileW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,DWORD);
+#define RetrieveUrlCacheEntryFile  WINELIB_NAME_AW(RetrieveUrlCacheEntryFile)
+
+BOOLAPI UnlockUrlCacheEntryFileA(LPCSTR ,DWORD);
+BOOLAPI UnlockUrlCacheEntryFileW(LPCWSTR ,DWORD);
+#define UnlockUrlCacheEntryFile  WINELIB_NAME_AW(UnlockUrlCacheEntryFile)
+
+INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamA(LPCSTR ,
+	LPINTERNET_CACHE_ENTRY_INFOA , LPDWORD ,BOOL ,DWORD);
+INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,
+	LPDWORD ,BOOL ,DWORD);
+#define RetrieveUrlCacheEntryStream  WINELIB_NAME_AW(RetrieveUrlCacheEntryStream)
+
+BOOLAPI ReadUrlCacheEntryStream( HANDLE ,DWORD ,LPVOID ,LPDWORD ,DWORD );
+BOOLAPI UnlockUrlCacheEntryStream( HANDLE ,DWORD );
+BOOLAPI GetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);
+BOOLAPI GetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
+#define GetUrlCacheEntryInfo  WINELIB_NAME_AW(GetUrlCacheEntryInfo)
+
+BOOLAPI GetUrlCacheEntryInfoExA(
+    LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPSTR ,LPDWORD ,LPVOID ,DWORD);
+BOOLAPI GetUrlCacheEntryInfoExW(
+    LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPWSTR ,LPDWORD ,LPVOID ,DWORD);
+#define GetUrlCacheEntryInfoEx  WINELIB_NAME_AW(GetUrlCacheEntryInfoEx)
+
+#define CACHE_ENTRY_ATTRIBUTE_FC    0x00000004
+#define CACHE_ENTRY_HITRATE_FC      0x00000010
+#define CACHE_ENTRY_MODTIME_FC      0x00000040
+#define CACHE_ENTRY_EXPTIME_FC      0x00000080
+#define CACHE_ENTRY_ACCTIME_FC      0x00000100
+#define CACHE_ENTRY_SYNCTIME_FC     0x00000200
+#define CACHE_ENTRY_HEADERINFO_FC   0x00000400
+#define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800
+
+
+BOOLAPI SetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,DWORD);
+BOOLAPI SetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,DWORD);
+#define SetUrlCacheEntryInfo  WINELIB_NAME_AW(SetUrlCacheEntryInfo)
+
+typedef LONGLONG GROUPID;
+
+INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD,LPVOID);
+BOOLAPI DeleteUrlCacheGroup(GROUPID ,DWORD ,LPVOID);
+
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheGroup(DWORD,DWORD,LPVOID,DWORD,GROUPID*,LPVOID);
+BOOLAPI FindNextUrlCacheGroup(HANDLE,GROUPID*,LPVOID);
+
+BOOLAPI GetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPDWORD,LPVOID);
+BOOLAPI GetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPDWORD,LPVOID);
+#define GetUrlCacheGroupAttribute  WINELIB_NAME_AW(GetUrlCacheGroupAttribute)
+
+#define INTERNET_CACHE_GROUP_ADD      0
+#define INTERNET_CACHE_GROUP_REMOVE   1
+
+BOOLAPI SetUrlCacheEntryGroupA(LPCSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);
+BOOLAPI SetUrlCacheEntryGroupW(LPCWSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);
+#define SetUrlCacheEntryGroup  WINELIB_NAME_AW(SetUrlCacheEntryGroup)
+
+BOOLAPI SetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPVOID);
+BOOLAPI SetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPVOID);
+#define SetUrlCacheGroupAttribute  WINELIB_NAME_AW(SetUrlCacheGroupAttribute)
+
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExA(
+    LPCSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExW(
+    LPCWSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );
+#define FindFirstUrlCacheEntryEx  WINELIB_NAME_AW(FindFirstUrlCacheEntryEx)
+
+BOOLAPI FindNextUrlCacheEntryExA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID);
+BOOLAPI FindNextUrlCacheEntryExW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID);
+#define FindNextUrlCacheEntryEx  WINELIB_NAME_AW(FindNextUrlCacheEntryEx)
+
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
+#define FindFirstUrlCacheEntry  WINELIB_NAME_AW(FindFirstUrlCacheEntry)
+
+BOOLAPI FindNextUrlCacheEntryA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);
+BOOLAPI FindNextUrlCacheEntryW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
+#define FindNextUrlCacheEntry  WINELIB_NAME_AW(FindNextUrlCacheEntry)
+
+BOOLAPI FindCloseUrlCache(HANDLE);
+
+BOOLAPI DeleteUrlCacheEntryA(LPCSTR);
+BOOLAPI DeleteUrlCacheEntryW(LPCWSTR);
+#define DeleteUrlCacheEntry  WINELIB_NAME_AW(DeleteUrlCacheEntry)
+
+/* FCS_ flags and FreeUrlCacheSpace are no longer documented */
+#define FCS_PERCENT_CACHE_SPACE  0  /* guessed value */
+#define FCS_PERCENT_DISK_SPACE   1  /* guessed value */
+#define FCS_ABSOLUTE_SIZE        2  /* guessed value */
+
+BOOLAPI FreeUrlCacheSpaceA(LPCSTR ,DWORD ,DWORD);
+BOOLAPI FreeUrlCacheSpaceW(LPCWSTR ,DWORD ,DWORD);
+#define FreeUrlCacheSpace  WINELIB_NAME_AW(FreeUrlCacheSpace)
+
+
+INTERNETAPI DWORD WINAPI InternetDialA(HWND ,LPSTR ,DWORD ,DWORD_PTR* ,DWORD);
+INTERNETAPI DWORD WINAPI InternetDialW(HWND ,LPWSTR ,DWORD ,DWORD_PTR* ,DWORD);
+#define InternetDial WINELIB_NAME_AW(InternetDial)
+
+
+#define INTERNET_DIAL_UNATTENDED       0x8000
+
+INTERNETAPI DWORD WINAPI InternetHangUp(DWORD_PTR ,DWORD);
+BOOLAPI CreateMD5SSOHash(PWSTR,PWSTR,PWSTR,PBYTE);
+
+#define INTERENT_GOONLINE_REFRESH 0x00000001
+#define INTERENT_GOONLINE_MASK 0x00000001
+INTERNETAPI BOOL WINAPI InternetGoOnlineA(LPSTR ,HWND ,DWORD);
+INTERNETAPI BOOL WINAPI InternetGoOnlineW(LPWSTR ,HWND ,DWORD);
+#define InternetGoOnline  WINELIB_NAME_AW(InternetGoOnline)
+INTERNETAPI BOOL WINAPI InternetAutodial(DWORD,HWND);
+
+#define INTERNET_AUTODIAL_FORCE_ONLINE          1
+#define INTERNET_AUTODIAL_FORCE_UNATTENDED      2
+#define INTERNET_AUTODIAL_FAILIFSECURITYCHECK   4
+
+#define INTERNET_AUTODIAL_FLAGS_MASK (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK)
+INTERNETAPI BOOL WINAPI InternetAutodialHangup(DWORD);
+INTERNETAPI BOOL WINAPI InternetGetConnectedState(LPDWORD ,DWORD);
+
+#define INTERNET_CONNECTION_MODEM           1
+#define INTERNET_CONNECTION_LAN             2
+#define INTERNET_CONNECTION_PROXY           4
+#define INTERNET_CONNECTION_MODEM_BUSY      8
+
+typedef DWORD (CALLBACK *PFN_DIAL_HANDLER) (HWND,LPCSTR,DWORD,LPDWORD);
+
+#define INTERNET_CUSTOMDIAL_CONNECT         0
+#define INTERNET_CUSTOMDIAL_UNATTENDED      1
+#define INTERNET_CUSTOMDIAL_DISCONNECT      2
+#define INTERNET_CUSTOMDIAL_SHOWOFFLINE     4
+#define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1
+#define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   2
+#define INTERNET_CUSTOMDIAL_CAN_HANGUP          4
+
+INTERNETAPI BOOL WINAPI InternetSetDialStateA(LPCSTR ,DWORD ,DWORD);
+INTERNETAPI BOOL WINAPI InternetSetDialStateW(LPCWSTR ,DWORD ,DWORD);
+#define InternetSetDialState WINELIB_NAME_AW(InternetSetDialState)
+#define INTERNET_DIALSTATE_DISCONNECTED     1
+
+BOOL WINAPI InternetGetConnectedStateExA(LPDWORD, LPSTR, DWORD, DWORD);
+BOOL WINAPI InternetGetConnectedStateExW(LPDWORD, LPWSTR, DWORD, DWORD);
+#define InternetGetConnectedStateEx WINELIB_NAME_AW(InternetGetConnectedStateEx)
+
+BOOL WINAPI InternetInitializeAutoProxyDll(DWORD);
+BOOL WINAPI DetectAutoProxyUrl(LPSTR, DWORD, DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h
new file mode 100644
index 0000000..1aac46d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WININETI_H_
+#define _WINE_WININETI_H_
+
+/* FIXME: #include <iedial.h> */
+#include <schannel.h>
+#include <sspi.h>
+
+typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYA
+{
+    CHAR CachePath[MAX_PATH];
+    DWORD dwCacheSize;
+} INTERNET_CACHE_CONFIG_PATH_ENTRYA, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYA;
+
+typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYW
+{
+    WCHAR CachePath[MAX_PATH];
+    DWORD dwCacheSize;
+} INTERNET_CACHE_CONFIG_PATH_ENTRYW, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_PATH_ENTRY)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_PATH_ENTRY)
+
+typedef struct _INTERNET_CACHE_CONFIG_INFOA
+{
+    DWORD dwStructSize;
+    DWORD dwContainer;
+    DWORD dwQuota;
+    DWORD dwReserved4;
+    BOOL fPerUser;
+    DWORD dwSyncMode;
+    DWORD dwNumCachePaths;
+    __C89_NAMELESS union
+    {
+        __C89_NAMELESS struct
+        {
+            CHAR CachePath[MAX_PATH];
+            DWORD dwCacheSize;
+        } __C89_NAMELESSSTRUCTNAME;
+        INTERNET_CACHE_CONFIG_PATH_ENTRYA CachePaths[ANYSIZE_ARRAY];
+    } __C89_NAMELESSUNIONNAME;
+    DWORD dwNormalUsage;
+    DWORD dwExemptUsage;
+} INTERNET_CACHE_CONFIG_INFOA, *LPINTERNET_CACHE_CONFIG_INFOA;
+
+typedef struct _INTERNET_CACHE_CONFIG_INFOW
+{
+    DWORD dwStructSize;
+    DWORD dwContainer;
+    DWORD dwQuota;
+    DWORD dwReserved4;
+    BOOL  fPerUser;
+    DWORD dwSyncMode;
+    DWORD dwNumCachePaths;
+    __C89_NAMELESS union
+    {
+        __C89_NAMELESS struct
+        {
+            WCHAR CachePath[MAX_PATH];
+            DWORD dwCacheSize;
+        } __C89_NAMELESSSTRUCTNAME;
+        INTERNET_CACHE_CONFIG_PATH_ENTRYW CachePaths[ANYSIZE_ARRAY];
+    } __C89_NAMELESSUNIONNAME;
+    DWORD dwNormalUsage;
+    DWORD dwExemptUsage;
+} INTERNET_CACHE_CONFIG_INFOW, *LPINTERNET_CACHE_CONFIG_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_INFO)
+
+typedef enum {
+    WININET_SYNC_MODE_NEVER = 0,
+    WININET_SYNC_MODE_ON_EXPIRY,
+    WININET_SYNC_MODE_ONCE_PER_SESSION,
+    WININET_SYNC_MODE_ALWAYS,
+    WININET_SYNC_MODE_AUTOMATIC,
+    WININET_SYNC_MODE_DEFAULT = WININET_SYNC_MODE_AUTOMATIC
+} WININET_SYNC_MODE;
+
+/* Flags for GetUrlCacheConfigInfoA/W and SetUrlCacheConfigInfoA/W */
+#define CACHE_CONFIG_FORCE_CLEANUP_FC        0x00000020
+#define CACHE_CONFIG_DISK_CACHE_PATHS_FC     0x00000040
+#define CACHE_CONFIG_SYNC_MODE_FC            0x00000080
+#define CACHE_CONFIG_CONTENT_PATHS_FC        0x00000100
+#define CACHE_CONFIG_COOKIES_PATHS_FC        0x00000200
+#define CACHE_CONFIG_HISTORY_PATHS_FC        0x00000400
+#define CACHE_CONFIG_QUOTA_FC                0x00000800
+#define CACHE_CONFIG_USER_MODE_FC            0x00001000
+#define CACHE_CONFIG_CONTENT_USAGE_FC        0x00002000
+#define CACHE_CONFIG_STICKY_CONTENT_USAGE_FC 0x00004000
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD       WINAPI DeleteIE3Cache(HWND,HINSTANCE,LPSTR,int);
+BOOL        WINAPI GetDiskInfoA(PCSTR,PDWORD,PDWORDLONG,PDWORDLONG);
+BOOL        WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,LPDWORD,DWORD);
+BOOL        WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,LPDWORD,DWORD);
+#define     GetUrlCacheConfigInfo WINELIB_NAME_AW(GetUrlCacheConfigInfo)
+BOOL        WINAPI IncrementUrlCacheHeaderData(DWORD,LPDWORD);
+BOOL        WINAPI InternetQueryFortezzaStatus(DWORD*,DWORD_PTR);
+BOOL        WINAPI IsUrlCacheEntryExpiredA(LPCSTR,DWORD,FILETIME*);
+BOOL        WINAPI IsUrlCacheEntryExpiredW(LPCWSTR,DWORD,FILETIME*);
+#define     IsUrlCacheEntryExpired WINELIB_NAME_AW(IsUrlCacheEntryExpired)
+BOOL        WINAPI SetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,DWORD);
+BOOL        WINAPI SetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,DWORD);
+#define     SetUrlCacheConfigInfo WINELIB_NAME_AW(SetUrlCacheConfigInfo)
+BOOL        WINAPI InternetGetSecurityInfoByURLA(LPSTR,PCCERT_CHAIN_CONTEXT*,DWORD*);
+BOOL        WINAPI InternetGetSecurityInfoByURLW(LPCWSTR,PCCERT_CHAIN_CONTEXT*,DWORD*);
+#define     InternetGetSecurityInfoByURL WINELIB_NAME_AW(InternetGetSecurityInfoByURL)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINE_WININETI_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h
new file mode 100644
index 0000000..9f3cd76
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h
@@ -0,0 +1,480 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINIOCTL_H
+#define __WINE_WINIOCTL_H
+
+#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
+    (DWORD)((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
+)
+
+#define DEVICE_TYPE DWORD
+
+#define FILE_DEVICE_BEEP                0x00000001
+#define FILE_DEVICE_CD_ROM              0x00000002
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM  0x00000003
+#define FILE_DEVICE_CONTROLLER          0x00000004
+#define FILE_DEVICE_DATALINK            0x00000005
+#define FILE_DEVICE_DFS                 0x00000006
+#define FILE_DEVICE_DISK                0x00000007
+#define FILE_DEVICE_DISK_FILE_SYSTEM    0x00000008
+#define FILE_DEVICE_FILE_SYSTEM         0x00000009
+#define FILE_DEVICE_INPORT_PORT         0x0000000a
+#define FILE_DEVICE_KEYBOARD            0x0000000b
+#define FILE_DEVICE_MAILSLOT            0x0000000c
+#define FILE_DEVICE_MIDI_IN             0x0000000d
+#define FILE_DEVICE_MIDI_OUT            0x0000000e
+#define FILE_DEVICE_MOUSE               0x0000000f
+#define FILE_DEVICE_MULTI_UNC_PROVIDER  0x00000010
+#define FILE_DEVICE_NAMED_PIPE          0x00000011
+#define FILE_DEVICE_NETWORK             0x00000012
+#define FILE_DEVICE_NETWORK_BROWSER     0x00000013
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
+#define FILE_DEVICE_NULL                0x00000015
+#define FILE_DEVICE_PARALLEL_PORT       0x00000016
+#define FILE_DEVICE_PHYSICAL_NETCARD    0x00000017
+#define FILE_DEVICE_PRINTER             0x00000018
+#define FILE_DEVICE_SCANNER             0x00000019
+#define FILE_DEVICE_SERIAL_MOUSE_PORT   0x0000001a
+#define FILE_DEVICE_SERIAL_PORT         0x0000001b
+#define FILE_DEVICE_SCREEN              0x0000001c
+#define FILE_DEVICE_SOUND               0x0000001d
+#define FILE_DEVICE_STREAMS             0x0000001e
+#define FILE_DEVICE_TAPE                0x0000001f
+#define FILE_DEVICE_TAPE_FILE_SYSTEM    0x00000020
+#define FILE_DEVICE_TRANSPORT           0x00000021
+#define FILE_DEVICE_UNKNOWN             0x00000022
+#define FILE_DEVICE_VIDEO               0x00000023
+#define FILE_DEVICE_VIRTUAL_DISK        0x00000024
+#define FILE_DEVICE_WAVE_IN             0x00000025
+#define FILE_DEVICE_WAVE_OUT            0x00000026
+#define FILE_DEVICE_8042_PORT           0x00000027
+#define FILE_DEVICE_NETWORK_REDIRECTOR  0x00000028
+#define FILE_DEVICE_BATTERY             0x00000029
+#define FILE_DEVICE_BUS_EXTENDER        0x0000002a
+#define FILE_DEVICE_MODEM               0x0000002b
+#define FILE_DEVICE_VDM                 0x0000002c
+#define FILE_DEVICE_MASS_STORAGE        0x0000002d
+#define FILE_DEVICE_SMB                 0x0000002e
+#define FILE_DEVICE_KS                  0x0000002f
+#define FILE_DEVICE_CHANGER             0x00000030
+#define FILE_DEVICE_SMARTCARD           0x00000031
+#define FILE_DEVICE_ACPI                0x00000032
+#define FILE_DEVICE_DVD                 0x00000033
+#define FILE_DEVICE_FULLSCREEN_VIDEO    0x00000034
+#define FILE_DEVICE_DFS_FILE_SYSTEM     0x00000035
+#define FILE_DEVICE_DFS_VOLUME          0x00000036
+#define FILE_DEVICE_SERENUM             0x00000037
+#define FILE_DEVICE_TERMSRV             0x00000038
+#define FILE_DEVICE_KSEC                0x00000039
+
+#define METHOD_BUFFERED                 0
+#define METHOD_IN_DIRECT                1
+#define METHOD_OUT_DIRECT               2
+#define METHOD_NEITHER                  3
+
+#define FILE_ANY_ACCESS                 0
+#define FILE_SPECIAL_ACCESS             0
+#define FILE_READ_ACCESS                FILE_READ_DATA  /* file & pipe */
+#define FILE_WRITE_ACCESS               FILE_WRITE_DATA /* file & pipe */
+
+#define FSCTL_REQUEST_OPLOCK_LEVEL_1             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_OPLOCK_LEVEL_2             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_BATCH_OPLOCK               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPBATCH_ACK_CLOSE_PENDING          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_NOTIFY                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_LOCK_VOLUME                        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_UNLOCK_VOLUME                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DISMOUNT_VOLUME                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_VOLUME_MOUNTED                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_PATHNAME_VALID                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_VOLUME_DIRTY                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_RETRIEVAL_POINTERS           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  14, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_GET_COMPRESSION                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_COMPRESSION                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_MARK_AS_SYSTEM_HIVE                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  19, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACK_NO_2              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_INVALIDATE_VOLUMES                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_FAT_BPB                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_FILTER_OPLOCK              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_FILESYSTEM_GET_STATISTICS          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_VOLUME_DATA               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_FILE_RECORD               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_VOLUME_BITMAP                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  27, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_GET_RETRIEVAL_POINTERS             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  28, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_MOVE_FILE                          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_IS_VOLUME_DIRTY                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_HFS_INFORMATION                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_ALLOW_EXTENDED_DASD_IO             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  32, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_READ_PROPERTY_DATA                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  33, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_WRITE_PROPERTY_DATA                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  34, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_FIND_FILES_BY_SID                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  35, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_DUMP_PROPERTY_DATA                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  37, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_SET_OBJECT_ID                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_GET_OBJECT_ID                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  39, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_OBJECT_ID                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_REPARSE_POINT                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_GET_REPARSE_POINT                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  42, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_REPARSE_POINT               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_ENUM_USN_DATA                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  44, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_SECURITY_ID_CHECK                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  45, METHOD_NEITHER,  FILE_READ_DATA)
+#define FSCTL_READ_USN_JOURNAL                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  46, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_SET_OBJECT_ID_EXTENDED             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_CREATE_OR_GET_OBJECT_ID            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  48, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_SPARSE                         CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_ZERO_DATA                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  50, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_QUERY_ALLOCATED_RANGES             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  51, METHOD_NEITHER,  FILE_READ_DATA)
+#define FSCTL_ENABLE_UPGRADE                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  52, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_ENCRYPTION                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  53, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_ENCRYPTION_FSCTL_IO                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  54, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_WRITE_RAW_ENCRYPTED                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  55, METHOD_NEITHER,  FILE_SPECIAL_ACCESS)
+#define FSCTL_READ_RAW_ENCRYPTED                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  56, METHOD_NEITHER,  FILE_SPECIAL_ACCESS)
+#define FSCTL_CREATE_USN_JOURNAL                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  57, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_READ_FILE_USN_DATA                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  58, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_WRITE_USN_CLOSE_RECORD             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  59, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_EXTEND_VOLUME                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  60, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_USN_JOURNAL                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  61, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_USN_JOURNAL                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  62, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_HANDLE                        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  63, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SIS_COPYFILE                       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  64, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SIS_LINK_FILES                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_HSM_MSG                            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_HSM_DATA                           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  68, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_RECALL_FILE                        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  69, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_READ_FROM_PLEX                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  71, METHOD_OUT_DIRECT,FILE_READ_DATA)
+#define FSCTL_FILE_PREFETCH                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_MAKE_MEDIA_COMPATIBLE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  76, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_DEFECT_MANAGEMENT              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  77, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_QUERY_SPARING_INFO                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  78, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_ON_DISK_VOLUME_INFO          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  79, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_VOLUME_COMPRESSION_STATE       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_TXFS_MODIFY_RM                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  81, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_QUERY_RM_INFORMATION          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  82, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_ROLLFORWARD_REDO              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  84, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_ROLLFORWARD_UNDO              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  85, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_START_RM                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  86, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_SHUTDOWN_RM                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  87, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_READ_BACKUP_INFORMATION       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  88, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  89, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_CREATE_SECONDARY_RM           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  90, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_GET_METADATA_INFO             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  91, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_GET_TRANSACTED_VERSION        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  92, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_CREATE_MINIVERSION            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  95, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_TRANSACTION_ACTIVE            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  99, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_SET_ZERO_ON_DEALLOCATION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_REPAIR                         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_REPAIR                         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_WAIT_FOR_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_INITIATE_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_CSC_INTERNAL                       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER,  FILE_ANY_ACCESS)
+#define FSCTL_SHRINK_VOLUME                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_SHORT_NAME_BEHAVIOR            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_LIST_TRANSACTIONS             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_QUERY_PAGEFILE_ENCRYPTION          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_PIPE_ASSIGN_EVENT         CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_DISCONNECT           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_LISTEN               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_PEEK                 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_QUERY_EVENT          CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_TRANSCEIVE           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_WAIT                 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_IMPERSONATE          CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_SET_CLIENT_PROCESS   CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_INTERNAL_READ        CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_INTERNAL_WRITE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_TRANSCEIVE  CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
+
+#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
+#define IOCTL_STORAGE_CHECK_VERIFY       CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_CHECK_VERIFY2      CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MEDIA_REMOVAL      CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECT_MEDIA        CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA         CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA2        CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RESERVE            CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RELEASE            CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_FIND_NEW_DEVICES   CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECTION_CONTROL   CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MCN_CONTROL        CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_GET_MEDIA_TYPES         CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX      CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_HOTPLUG_INFO        CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_SET_HOTPLUG_INFO        CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_RESET_BUS          CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RESET_DEVICE       CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_BREAK_RESERVATION  CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_PERSISTENT_RESERVE_IN   CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT  CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER  CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_BASE                 FILE_DEVICE_DISK
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY   CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_GET_PARTITION_INFO   CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_PARTITION_INFO   CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_LAYOUT     CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_DRIVE_LAYOUT     CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_VERIFY               CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_FORMAT_TRACKS        CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_REASSIGN_BLOCKS      CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_PERFORMANCE          CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_IS_WRITABLE          CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_LOGGING              CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_FORMAT_TRACKS_EX     CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_STRUCTURE  CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_DATA       CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_RESET      CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_REQUEST_STRUCTURE    CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_REQUEST_DATA         CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_CHECK_VERIFY         CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_MEDIA_REMOVAL        CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_EJECT_MEDIA          CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_LOAD_MEDIA           CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_RESERVE              CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_RELEASE              CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_FIND_NEW_DEVICES     CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_GET_MEDIA_TYPES      CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+#define IOCTL_DISK_CONTROLLER_NUMBER    CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define SMART_GET_VERSION               CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define SMART_SEND_DRIVE_COMMAND        CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define SMART_RCV_DRIVE_DATA            CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_BASE ((DWORD)'V')
+#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS      CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SERIAL_LSRMST_INSERT      CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+
+/* Return Codes... should these be the same as something somewhere? */
+#define PARTITION_ENTRY_UNUSED          0x00      /* Entry unused */
+#define PARTITION_FAT_12                0x01      /* 12-bit FAT entries */
+#define PARTITION_XENIX_1               0x02      /* Xenix */
+#define PARTITION_XENIX_2               0x03      /* Xenix */
+#define PARTITION_FAT_16                0x04      /* 16-bit FAT entries */
+#define PARTITION_EXTENDED              0x05      /* Extended partition entry */
+#define PARTITION_HUGE                  0x06      /* Huge partition MS-DOS V4 */
+#define PARTITION_IFS                   0x07      /* IFS Partition */
+#define PARTITION_FAT32                 0x0B      /* FAT32 */
+#define PARTITION_FAT32_XINT13          0x0C      /* FAT32 using extended int13 services */
+#define PARTITION_XINT13                0x0E      /* Win95 partition using extended int13 services */
+#define PARTITION_XINT13_EXTENDED       0x0F      /* Same as type 5 but uses extended int13 services */
+#define PARTITION_PREP                  0x41      /* PowerPC Reference Platform (PReP) Boot Partition */
+#define PARTITION_LDM                   0x42      /* Logical Disk Manager partition */
+#define PARTITION_UNIX                  0x63      /* Unix */
+
+typedef enum _MEDIA_TYPE {
+    Unknown, F5_1Pt2_512, F3_1Pt44_512, F3_2Pt88_512, F3_20Pt8_512, F3_720_512, F5_360_512,
+    F5_320_512, F5_320_1024, F5_180_512, F5_160_512, RemovableMedia, FixedMedia, F3_120M_512,
+    F3_640_512, F5_640_512, F5_720_512, F3_1Pt2_512, F3_1Pt23_1024, F5_1Pt23_1024, F3_128Mb_512,
+    F3_230Mb_512, F8_256_128
+} MEDIA_TYPE, *PMEDIA_TYPE;
+
+typedef struct _FORMAT_PARAMETERS {
+   MEDIA_TYPE           MediaType;
+   DWORD                StartCylinderNumber;
+   DWORD                EndCylinderNumber;
+   DWORD                StartHeadNumber;
+   DWORD                EndHeadNumber;
+} FORMAT_PARAMETERS, *PFORMAT_PARAMETERS;
+
+typedef WORD   BAD_TRACK_NUMBER;
+typedef WORD   *PBAD_TRACK_NUMBER;
+
+typedef struct _FORMAT_EX_PARAMETERS {
+   MEDIA_TYPE           MediaType;
+   DWORD                StartCylinderNumber;
+   DWORD                EndCylinderNumber;
+   DWORD                StartHeadNumber;
+   DWORD                EndHeadNumber;
+   WORD                 FormatGapLength;
+   WORD                 SectorsPerTrack;
+   WORD                 SectorNumber[1];
+} FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS;
+
+typedef struct _DISK_GEOMETRY {
+    LARGE_INTEGER       Cylinders;
+    MEDIA_TYPE          MediaType;
+    DWORD               TracksPerCylinder;
+    DWORD               SectorsPerTrack;
+    DWORD               BytesPerSector;
+} DISK_GEOMETRY, *PDISK_GEOMETRY;
+
+typedef struct _DISK_GEOMETRY_EX {
+    DISK_GEOMETRY       Geometry;
+    LARGE_INTEGER       DiskSize;
+    BYTE                Data[1];
+} DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX;
+
+typedef struct _PARTITION_INFORMATION {
+    LARGE_INTEGER       StartingOffset;
+    LARGE_INTEGER       PartitionLength;
+    DWORD               HiddenSectors;
+    DWORD               PartitionNumber;
+    BYTE                PartitionType;
+    BOOLEAN             BootIndicator;
+    BOOLEAN             RecognizedPartition;
+    BOOLEAN             RewritePartition;
+} PARTITION_INFORMATION, *PPARTITION_INFORMATION;
+
+typedef struct _SET_PARTITION_INFORMATION {
+    BYTE                PartitionType;
+} SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
+
+typedef struct _DRIVE_LAYOUT_INFORMATION {
+    DWORD               PartitionCount;
+    DWORD               Signature;
+    PARTITION_INFORMATION PartitionEntry[1];
+} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
+
+typedef struct _VERIFY_INFORMATION {
+    LARGE_INTEGER       StartingOffset;
+    DWORD               Length;
+} VERIFY_INFORMATION, *PVERIFY_INFORMATION;
+
+typedef struct _REASSIGN_BLOCKS {
+    WORD                Reserved;
+    WORD                Count;
+    DWORD               BlockNumber[1];
+} REASSIGN_BLOCKS, *PREASSIGN_BLOCKS;
+
+/* Start: _WIN32_WINNT >= 0x0400 */
+
+typedef struct _DISK_CONTROLLER_NUMBER {
+    DWORD               ControllerNumber;
+    DWORD               DiskNumber;
+} DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
+
+/* VOLUME_GET_VOLUME_DISK_EXTENTS */
+typedef struct _DISK_EXTENT {
+    DWORD               DiskNumber;
+    LARGE_INTEGER       StartingOffset;
+    LARGE_INTEGER       ExtentLength;
+} DISK_EXTENT;
+
+typedef struct _VOLUME_DISK_EXTENTS {
+    DWORD               NumberOfDiskExtents;
+    DISK_EXTENT         Extents[1];
+} VOLUME_DISK_EXTENTS;
+
+typedef struct RETRIEVAL_POINTERS_BUFFER {
+    DWORD         ExtentCount;
+    LARGE_INTEGER StartingVcn;
+    struct {
+        LARGE_INTEGER NextVcn;
+        LARGE_INTEGER Lcn;
+    } Extents[1];
+} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
+
+/* End: _WIN32_WINNT >= 0x0400 */
+
+/*
+ *	NT I/O-Manager
+ */
+
+/*
+ * structures for NtQueryVolumeInformationFile
+ * (wdm.h)
+ */
+
+/* FileFsVolumeInformation = 1 */
+typedef struct _FILE_FS_VOLUME_INFORMATION {
+	LARGE_INTEGER	VolumeCreationTime;
+	ULONG		VolumeSerialNumber;
+	ULONG		VolumeLabelLength;
+	BOOLEAN		SupportsObjects;
+	WCHAR		VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+/* FileFsLabelInformation = 2 */
+/*
+ unknown
+*/
+
+/* FileFsSizeInformation = 3 */
+typedef struct _FILE_FS_SIZE_INFORMATION {
+	LARGE_INTEGER	TotalAllocationUnits;
+	LARGE_INTEGER	AvailableAllocationUnits;
+	ULONG		SectorsPerAllocationUnit;
+	ULONG		BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+/* FileFsDeviceInformation = 4 */
+typedef struct _FILE_FS_DEVICE_INFORMATION {
+	DEVICE_TYPE DeviceType;
+	ULONG Characteristics;
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+/* FileFsAttributeInformation = 5 */
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
+	ULONG	FileSystemAttribute;
+	LONG	MaximumComponentNameLength;
+	ULONG	FileSystemNameLength;
+	WCHAR	FileSystemName[1];
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
+    LARGE_INTEGER   Timeout;
+    ULONG           NameLength;
+    BOOLEAN         TimeoutSpecified;
+    WCHAR           Name[1];
+} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
+
+typedef struct _FILE_PIPE_PEEK_BUFFER {
+    ULONG   NamedPipeState;
+    ULONG   ReadDataAvailable;
+    ULONG   NumberOfMessages;
+    ULONG   MessageLength;
+    CHAR    Data[1];
+} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
+
+/* Device GUIDs */
+#ifdef DEFINE_GUID
+
+DEFINE_GUID(GUID_DEVINTERFACE_COMPORT, 0x86E0D1E0, 0x8089,
+ 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73);
+DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325,
+ 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);
+
+/* obsolete GUID names */
+#define GUID_CLASS_COMPORT          GUID_DEVINTERFACE_COMPORT
+#define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
+
+#endif /* DEFINE_GUID */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h
new file mode 100644
index 0000000..a90bbb8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h
@@ -0,0 +1,653 @@
+/*
+ * Copyright 2005 Hans Leidekker
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINLDAP_H
+#define __WINE_WINLDAP_H
+
+#include <windef.h>
+#include <schnlsp.h>
+
+#ifndef LDAPAPI
+#define LDAPAPI __cdecl
+#endif
+
+
+typedef enum {
+    LDAP_SUCCESS                    =   0x00,
+    LDAP_OPERATIONS_ERROR           =   0x01,
+    LDAP_PROTOCOL_ERROR             =   0x02,
+    LDAP_TIMELIMIT_EXCEEDED         =   0x03,
+    LDAP_SIZELIMIT_EXCEEDED         =   0x04,
+    LDAP_COMPARE_FALSE              =   0x05,
+    LDAP_COMPARE_TRUE               =   0x06,
+    LDAP_AUTH_METHOD_NOT_SUPPORTED  =   0x07,
+    LDAP_STRONG_AUTH_REQUIRED       =   0x08,
+    LDAP_REFERRAL_V2                =   0x09,
+    LDAP_PARTIAL_RESULTS            =   0x09,
+    LDAP_REFERRAL                   =   0x0a,
+    LDAP_ADMIN_LIMIT_EXCEEDED       =   0x0b,
+    LDAP_UNAVAILABLE_CRIT_EXTENSION =   0x0c,
+    LDAP_CONFIDENTIALITY_REQUIRED   =   0x0d,
+    LDAP_SASL_BIND_IN_PROGRESS      =   0x0e,
+
+    LDAP_NO_SUCH_ATTRIBUTE          =   0x10,
+    LDAP_UNDEFINED_TYPE             =   0x11,
+    LDAP_INAPPROPRIATE_MATCHING     =   0x12,
+    LDAP_CONSTRAINT_VIOLATION       =   0x13,
+    LDAP_ATTRIBUTE_OR_VALUE_EXISTS  =   0x14,
+    LDAP_INVALID_SYNTAX             =   0x15,
+
+    LDAP_NO_SUCH_OBJECT             =   0x20,
+    LDAP_ALIAS_PROBLEM              =   0x21,
+    LDAP_INVALID_DN_SYNTAX          =   0x22,
+    LDAP_IS_LEAF                    =   0x23,
+    LDAP_ALIAS_DEREF_PROBLEM        =   0x24,
+
+    LDAP_INAPPROPRIATE_AUTH         =   0x30,
+    LDAP_INVALID_CREDENTIALS        =   0x31,
+    LDAP_INSUFFICIENT_RIGHTS        =   0x32,
+    LDAP_BUSY                       =   0x33,
+    LDAP_UNAVAILABLE                =   0x34,
+    LDAP_UNWILLING_TO_PERFORM       =   0x35,
+    LDAP_LOOP_DETECT                =   0x36,
+    LDAP_SORT_CONTROL_MISSING       =   0x3C,
+    LDAP_OFFSET_RANGE_ERROR         =   0x3D,
+
+    LDAP_NAMING_VIOLATION           =   0x40,
+    LDAP_OBJECT_CLASS_VIOLATION     =   0x41,
+    LDAP_NOT_ALLOWED_ON_NONLEAF     =   0x42,
+    LDAP_NOT_ALLOWED_ON_RDN         =   0x43,
+    LDAP_ALREADY_EXISTS             =   0x44,
+    LDAP_NO_OBJECT_CLASS_MODS       =   0x45,
+    LDAP_RESULTS_TOO_LARGE          =   0x46,
+    LDAP_AFFECTS_MULTIPLE_DSAS      =   0x47,
+
+    LDAP_VIRTUAL_LIST_VIEW_ERROR    =   0x4c,
+
+    LDAP_OTHER                      =   0x50,
+    LDAP_SERVER_DOWN                =   0x51,
+    LDAP_LOCAL_ERROR                =   0x52,
+    LDAP_ENCODING_ERROR             =   0x53,
+    LDAP_DECODING_ERROR             =   0x54,
+    LDAP_TIMEOUT                    =   0x55,
+    LDAP_AUTH_UNKNOWN               =   0x56,
+    LDAP_FILTER_ERROR               =   0x57,
+    LDAP_USER_CANCELLED             =   0x58,
+    LDAP_PARAM_ERROR                =   0x59,
+    LDAP_NO_MEMORY                  =   0x5a,
+    LDAP_CONNECT_ERROR              =   0x5b,
+    LDAP_NOT_SUPPORTED              =   0x5c,
+    LDAP_NO_RESULTS_RETURNED        =   0x5e,
+    LDAP_CONTROL_NOT_FOUND          =   0x5d,
+    LDAP_MORE_RESULTS_TO_RETURN     =   0x5f,
+
+    LDAP_CLIENT_LOOP                =   0x60,
+    LDAP_REFERRAL_LIMIT_EXCEEDED    =   0x61
+} LDAP_RETCODE;
+
+#define LDAP_SCOPE_BASE         0x00
+#define LDAP_SCOPE_ONELEVEL     0x01
+#define LDAP_SCOPE_SUBTREE      0x02
+
+typedef struct berelement
+{
+    PCHAR opaque;
+} BerElement;
+
+#define LDAP_OPT_API_INFO               0x00
+#define LDAP_OPT_DESC                   0x01
+#define LDAP_OPT_DEREF                  0x02
+#define LDAP_OPT_SIZELIMIT              0x03
+#define LDAP_OPT_TIMELIMIT              0x04
+#define LDAP_OPT_THREAD_FN_PTRS         0x05
+#define LDAP_OPT_REBIND_FN              0x06
+#define LDAP_OPT_REBIND_ARG             0x07
+#define LDAP_OPT_REFERRALS              0x08
+#define LDAP_OPT_RESTART                0x09
+#define LDAP_OPT_SSL                    0x0a
+#define LDAP_OPT_IO_FN_PTRS             0x0b
+#define LDAP_OPT_CACHE_FN_PTRS          0x0d
+#define LDAP_OPT_CACHE_STRATEGY         0x0e
+#define LDAP_OPT_CACHE_ENABLE           0x0f
+#define LDAP_OPT_REFERRAL_HOP_LIMIT     0x10
+#define LDAP_OPT_PROTOCOL_VERSION       0x11
+#define LDAP_OPT_VERSION                0x11
+#define LDAP_OPT_API_FEATURE_INFO       0x15
+#define LDAP_OPT_HOST_NAME              0x30
+#define LDAP_OPT_ERROR_NUMBER           0x31
+#define LDAP_OPT_ERROR_STRING           0x32
+#define LDAP_OPT_SERVER_ERROR           0x33
+#define LDAP_OPT_SERVER_EXT_ERROR       0x34
+#define LDAP_OPT_PING_KEEP_ALIVE        0x36
+#define LDAP_OPT_PING_WAIT_TIME         0x37
+#define LDAP_OPT_PING_LIMIT             0x38
+#define LDAP_OPT_DNSDOMAIN_NAME         0x3b
+#define LDAP_OPT_GETDSNAME_FLAGS        0x3d
+#define LDAP_OPT_HOST_REACHABLE         0x3e
+#define LDAP_OPT_PROMPT_CREDENTIALS     0x3f
+#define LDAP_OPT_TCP_KEEPALIVE          0x40
+#define LDAP_OPT_FAST_CONCURRENT_BIND   0x41
+#define LDAP_OPT_SEND_TIMEOUT           0x42
+#define LDAP_OPT_REFERRAL_CALLBACK      0x70
+#define LDAP_OPT_CLIENT_CERTIFICATE     0x80
+#define LDAP_OPT_SERVER_CERTIFICATE     0x81
+#define LDAP_OPT_AUTO_RECONNECT         0x91
+#define LDAP_OPT_SSPI_FLAGS             0x92
+#define LDAP_OPT_SSL_INFO               0x93
+#define LDAP_OPT_REF_DEREF_CONN_PER_MSG 0x94
+#define LDAP_OPT_TLS                    LDAP_OPT_SSL
+#define LDAP_OPT_TLS_INFO               LDAP_OPT_SSL_INFO
+#define LDAP_OPT_SIGN                   0x95
+#define LDAP_OPT_ENCRYPT                0x96
+#define LDAP_OPT_SASL_METHOD            0x97
+#define LDAP_OPT_AREC_EXCLUSIVE         0x98
+#define LDAP_OPT_SECURITY_CONTEXT       0x99
+#define LDAP_OPT_ROOTDSE_CACHE          0x9a
+
+#define LDAP_OPT_ON                     ((void *)1)
+#define LDAP_OPT_OFF                    ((void *)0)
+
+#define LDAP_VERSION1   1
+#define LDAP_VERSION2   2
+#define LDAP_VERSION3   3
+#define LDAP_VERSION    LDAP_VERSION2
+
+#define LDAP_MSG_ONE        0
+#define LDAP_MSG_ALL        1
+#define LDAP_MSG_RECEIVED   2
+
+#define LDAP_RES_BIND           0x61
+#define LDAP_RES_SEARCH_ENTRY   0x64
+#define LDAP_RES_SEARCH_RESULT  0x65
+#define LDAP_RES_MODIFY         0x67
+#define LDAP_RES_ADD            0x69
+#define LDAP_RES_DELETE         0x6b
+#define LDAP_RES_MODRDN         0x6d
+#define LDAP_RES_COMPARE        0x6f
+#define LDAP_RES_SESSION        0x72
+#define LDAP_RES_REFERRAL       0x73
+#define LDAP_RES_EXTENDED       0x78
+#define LDAP_RES_ANY            (-1)
+
+typedef struct ldap
+{
+    struct
+    {
+        UINT_PTR sb_sd;
+        UCHAR Reserved1[41];
+        ULONG_PTR sb_naddr;
+        UCHAR Reserved2[24];
+    } ld_sb;
+
+    PCHAR ld_host;
+    ULONG ld_version;
+    UCHAR ld_lberoptions;
+    ULONG ld_deref;
+    ULONG ld_timelimit;
+    ULONG ld_sizelimit;
+    ULONG ld_errno;
+    PCHAR ld_matched;
+    PCHAR ld_error;
+    ULONG ld_msgid;
+    UCHAR Reserved3[25];
+    ULONG ld_cldaptries;
+    ULONG ld_cldaptimeout;
+    ULONG ld_refhoplimit;
+    ULONG ld_options;
+} LDAP, *PLDAP;
+
+#define LDAP_MOD_ADD        0x00
+#define LDAP_MOD_DELETE     0x01
+#define LDAP_MOD_REPLACE    0x02
+#define LDAP_MOD_BVALUES    0x80
+
+typedef struct ldapmodA {
+    ULONG mod_op;
+    PCHAR mod_type;
+    union {
+        PCHAR *modv_strvals;
+        struct berval **modv_bvals;
+    } mod_vals;
+} LDAPModA, *PLDAPModA;
+
+typedef struct ldapmodW {
+    ULONG mod_op;
+    PWCHAR mod_type;
+    union {
+        PWCHAR *modv_strvals;
+        struct berval **modv_bvals;
+    } mod_vals;
+} LDAPModW, *PLDAPModW;
+
+DECL_WINELIB_TYPE_AW(LDAPMod)
+DECL_WINELIB_TYPE_AW(PLDAPMod)
+
+typedef struct l_timeval
+{
+    LONG tv_sec;
+    LONG tv_usec;
+} LDAP_TIMEVAL, *PLDAP_TIMEVAL;
+
+typedef struct ldapmsg
+{
+    ULONG lm_msgid;
+    ULONG lm_msgtype;
+
+    PVOID lm_ber;
+
+    struct ldapmsg *lm_chain;
+    struct ldapmsg *lm_next;
+    ULONG lm_time;
+
+    PLDAP Connection;
+    PVOID Request;
+    ULONG lm_returncode;
+    USHORT lm_referral;
+    BOOLEAN lm_chased;
+    BOOLEAN lm_eom;
+    BOOLEAN ConnectionReferenced;
+} LDAPMessage, *PLDAPMessage;
+
+#define LAPI_MAJOR_VER1     1
+#define LAPI_MINOR_VER1     1
+
+typedef struct ldap_version_info
+{
+    ULONG lv_size;
+    ULONG lv_major;
+    ULONG lv_minor;
+} LDAP_VERSION_INFO, *PLDAP_VERSION_INFO;
+
+typedef struct berval
+{
+    ULONG bv_len;
+    PCHAR bv_val;
+} LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue;
+
+typedef struct ldapcontrolA
+{
+    PCHAR ldctl_oid;
+    struct berval ldctl_value;
+    BOOLEAN ldctl_iscritical;
+} LDAPControlA, *PLDAPControlA;
+
+typedef struct ldapcontrolW
+{
+    PWCHAR ldctl_oid;
+    struct berval ldctl_value;
+    BOOLEAN ldctl_iscritical;
+} LDAPControlW, *PLDAPControlW;
+
+DECL_WINELIB_TYPE_AW(LDAPControl)
+DECL_WINELIB_TYPE_AW(PLDAPControl)
+
+typedef struct ldapvlvinfo
+{
+    int ldvlv_version;
+    ULONG ldvlv_before_count;
+    ULONG ldvlv_after_count;
+    ULONG ldvlv_offset;
+    ULONG ldvlv_count;
+    PBERVAL ldvlv_attrvalue;
+    PBERVAL ldvlv_context;
+    VOID *ldvlv_extradata;
+} LDAPVLVInfo, *PLDAPVLVInfo;
+
+typedef struct ldapsearch LDAPSearch, *PLDAPSearch;
+
+typedef struct ldapsortkeyA
+{
+    PCHAR sk_attrtype;
+    PCHAR sk_matchruleoid;
+    BOOLEAN sk_reverseorder;
+} LDAPSortKeyA, *PLDAPSortKeyA;
+
+typedef struct ldapsortkeyW
+{
+    PWCHAR sk_attrtype;
+    PWCHAR sk_matchruleoid;
+    BOOLEAN sk_reverseorder;
+} LDAPSortKeyW, *PLDAPSortKeyW;
+
+DECL_WINELIB_TYPE_AW(LDAPSortKey)
+DECL_WINELIB_TYPE_AW(PLDAPSortKey)
+
+#define LDAP_API_INFO_VERSION     1
+
+typedef struct ldapapiinfoA
+{
+    int ldapai_info_version;
+    int ldapai_api_version;
+    int ldapai_protocol_version;
+    char **ldapai_extensions;
+    char *ldapai_vendor_name;
+    int ldapai_vendor_version;
+} LDAPAPIInfoA;
+
+typedef struct ldapapiinfoW
+{
+    int ldapai_info_version;
+    int ldapai_api_version;
+    int ldapai_protocol_version;
+    PWCHAR *ldapai_extensions;
+    PWCHAR ldapai_vendor_name;
+    int ldapai_vendor_version;
+} LDAPAPIInfoW;
+
+DECL_WINELIB_TYPE_AW(LDAPAPIInfo)
+
+#define LDAP_FEATURE_INFO_VERSION    1
+
+typedef struct ldap_apifeature_infoA
+{
+    int ldapaif_info_version;
+    char *ldapaif_name;
+    int ldapaif_version;
+} LDAPAPIFeatureInfoA;
+
+typedef struct ldap_apifeature_infoW
+{
+    int ldapaif_info_version;
+    PWCHAR ldapaif_name;
+    int ldapaif_version;
+} LDAPAPIFeatureInfoW;
+
+DECL_WINELIB_TYPE_AW(LDAPAPIFeatureInfo)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+LDAP * CDECL cldap_openA(PCHAR,ULONG);
+LDAP * CDECL cldap_openW(PWCHAR,ULONG);
+#define    cldap_open WINELIB_NAME_AW(cldap_open)
+ULONG CDECL ldap_abandon(LDAP*,ULONG);
+ULONG CDECL ldap_addA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_addW(LDAP*,PWCHAR,LDAPModW*[]);
+#define    ldap_add WINELIB_NAME_AW(ldap_add)
+ULONG CDECL ldap_add_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_add_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define    ldap_add_ext WINELIB_NAME_AW(ldap_add_ext)
+ULONG CDECL ldap_add_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_add_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
+#define    ldap_add_ext_s WINELIB_NAME_AW(ldap_add_ext_s)
+ULONG CDECL ldap_add_sA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_add_sW(LDAP*,PWCHAR,LDAPModW*[]);
+#define    ldap_add_s WINELIB_NAME_AW(ldap_add_s)
+ULONG CDECL ldap_bindA(LDAP*,PCHAR,PCHAR,ULONG);
+ULONG CDECL ldap_bindW(LDAP*,PWCHAR,PWCHAR,ULONG);
+#define    ldap_bind WINELIB_NAME_AW(ldap_bind)
+ULONG CDECL ldap_bind_sA(LDAP*,PCHAR,PCHAR,ULONG);
+ULONG CDECL ldap_bind_sW(LDAP*,PWCHAR,PWCHAR,ULONG);
+#define    ldap_bind_s WINELIB_NAME_AW(ldap_bind_s)
+ULONG CDECL ldap_check_filterA(LDAP*,PCHAR);
+ULONG CDECL ldap_check_filterW(LDAP*,PWCHAR);
+#define    ldap_check_filter WINELIB_NAME_AW(ldap_check_filter)
+ULONG CDECL ldap_cleanup(HANDLE);
+ULONG CDECL ldap_close_extended_op(LDAP*,ULONG);
+LDAP* CDECL ldap_conn_from_msg(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_compareA(LDAP*,PCHAR,PCHAR,PCHAR);
+ULONG CDECL ldap_compareW(LDAP*,PWCHAR,PWCHAR,PWCHAR);
+#define    ldap_compare WINELIB_NAME_AW(ldap_compare)
+ULONG CDECL ldap_compare_extA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_compare_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define    ldap_compare_ext WINELIB_NAME_AW(ldap_compare_ext)
+ULONG CDECL ldap_compare_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_compare_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*);
+#define    ldap_compare_ext_s WINELIB_NAME_AW(ldap_compare_ext_s)
+ULONG CDECL ldap_compare_sA(LDAP*,PCHAR,PCHAR,PCHAR);
+ULONG CDECL ldap_compare_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR);
+#define    ldap_compare_s WINELIB_NAME_AW(ldap_compare_s)
+ULONG CDECL ldap_connect(LDAP*,struct l_timeval*);
+ULONG CDECL ldap_control_freeA(LDAPControlA*);
+ULONG CDECL ldap_control_freeW(LDAPControlW*);
+#define    ldap_control_free WINELIB_NAME_AW(ldap_control_free)
+ULONG CDECL ldap_controls_freeA(LDAPControlA**);
+ULONG CDECL ldap_controls_freeW(LDAPControlW**);
+#define    ldap_controls_free WINELIB_NAME_AW(ldap_controls_free)
+ULONG CDECL ldap_count_entries(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_count_references(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_count_values_len(struct berval**);
+ULONG CDECL ldap_count_valuesA(PCHAR*);
+ULONG CDECL ldap_count_valuesW(PWCHAR*);
+#define    ldap_count_values WINELIB_NAME_AW(ldap_count_values)
+ULONG CDECL ldap_create_page_controlA(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlA*);
+ULONG CDECL ldap_create_page_controlW(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlW*);
+#define    ldap_create_page_control WINELIB_NAME_AW(ldap_create_page_control)
+ULONG CDECL ldap_create_sort_controlA(PLDAP,PLDAPSortKeyA*,UCHAR,PLDAPControlA*);
+ULONG CDECL ldap_create_sort_controlW(PLDAP,PLDAPSortKeyW*,UCHAR,PLDAPControlW*);
+#define    ldap_create_sort_control WINELIB_NAME_AW(ldap_create_sort_control)
+INT CDECL  ldap_create_vlv_controlA(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlA*);
+INT CDECL  ldap_create_vlv_controlW(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlW*);
+#define    ldap_create_vlv_control WINELIB_NAME_AW(ldap_create_vlv_control)
+ULONG CDECL ldap_deleteA(LDAP*,PCHAR);
+ULONG CDECL ldap_deleteW(LDAP*,PWCHAR);
+#define    ldap_delete WINELIB_NAME_AW(ldap_delete)
+ULONG CDECL ldap_delete_extA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_delete_extW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define    ldap_delete_ext WINELIB_NAME_AW(ldap_delete_ext)
+ULONG CDECL ldap_delete_ext_sA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_delete_ext_sW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*);
+#define    ldap_delete_ext_s WINELIB_NAME_AW(ldap_delete_ext_s)
+ULONG CDECL ldap_delete_sA(LDAP*,PCHAR);
+ULONG CDECL ldap_delete_sW(LDAP*,PWCHAR);
+#define    ldap_delete_s WINELIB_NAME_AW(ldap_delete_s)
+PCHAR CDECL ldap_dn2ufnA(PCHAR);
+PWCHAR CDECL ldap_dn2ufnW(PWCHAR);
+#define    ldap_dn2ufn WINELIB_NAME_AW(ldap_dn2ufn)
+ULONG CDECL ldap_encode_sort_controlA(PLDAP,PLDAPSortKeyA*,PLDAPControlA,BOOLEAN);
+ULONG CDECL ldap_encode_sort_controlW(PLDAP,PLDAPSortKeyW*,PLDAPControlW,BOOLEAN);
+#define    ldap_encode_sort_control WINELIB_NAME_AW(ldap_encode_sort_control)
+PCHAR CDECL ldap_err2stringA(ULONG);
+PWCHAR CDECL ldap_err2stringW(ULONG);
+#define    ldap_err2string WINELIB_NAME_AW(ldap_err2string)
+ULONG CDECL ldap_escape_filter_elementA(PCHAR,ULONG,PCHAR,ULONG);
+ULONG CDECL ldap_escape_filter_elementW(PCHAR,ULONG,PWCHAR,ULONG);
+#define    ldap_escape_filter_element WINELIB_NAME_AW(ldap_escape_filter_element)
+PCHAR* CDECL ldap_explode_dnA(PCHAR,ULONG);
+PWCHAR* CDECL ldap_explode_dnW(PWCHAR,ULONG);
+#define    ldap_explode_dn WINELIB_NAME_AW(ldap_explode_dn)
+ULONG CDECL ldap_extended_operationA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_extended_operationW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define    ldap_extended_operation WINELIB_NAME_AW(ldap_extended_operation)
+ULONG CDECL ldap_extended_operation_sA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,PCHAR*,struct berval**);
+ULONG CDECL ldap_extended_operation_sW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,PWCHAR*,struct berval**);
+#define    ldap_extended_operation_s WINELIB_NAME_AW(ldap_extended_operation_s)
+PCHAR CDECL ldap_first_attributeA(LDAP*,LDAPMessage*,BerElement**);
+PWCHAR CDECL ldap_first_attributeW(LDAP*,LDAPMessage*,BerElement**);
+#define    ldap_first_attribute WINELIB_NAME_AW(ldap_first_attribute)
+LDAPMessage* CDECL ldap_first_entry(LDAP*,LDAPMessage*);
+LDAPMessage* CDECL ldap_first_reference(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_free_controlsA(LDAPControlA**);
+ULONG CDECL ldap_free_controlsW(LDAPControlW**);
+#define    ldap_free_controls WINELIB_NAME_AW(ldap_free_controls)
+PCHAR CDECL ldap_get_dnA(LDAP*,LDAPMessage*);
+PWCHAR CDECL ldap_get_dnW(LDAP*,LDAPMessage*);
+#define    ldap_get_dn WINELIB_NAME_AW(ldap_get_dn)
+ULONG CDECL ldap_get_next_page(PLDAP,PLDAPSearch,ULONG,ULONG*);
+ULONG CDECL ldap_get_next_page_s(PLDAP,PLDAPSearch,struct l_timeval*,ULONG,ULONG*,LDAPMessage**);
+ULONG CDECL ldap_get_optionA(LDAP*,int,void*);
+ULONG CDECL ldap_get_optionW(LDAP*,int,void*);
+#define    ldap_get_option WINELIB_NAME_AW(ldap_get_option)
+ULONG CDECL ldap_get_paged_count(LDAP*,PLDAPSearch,ULONG*,LDAPMessage*);
+PCHAR* CDECL ldap_get_valuesA(LDAP*,LDAPMessage*,PCHAR);
+PWCHAR* CDECL ldap_get_valuesW(LDAP*,LDAPMessage*,PWCHAR);
+#define    ldap_get_values WINELIB_NAME_AW(ldap_get_values)
+struct berval ** CDECL ldap_get_values_lenA(LDAP*,LDAPMessage*,PCHAR);
+struct berval ** CDECL ldap_get_values_lenW(LDAP*,LDAPMessage*,PWCHAR);
+#define    ldap_get_values_len WINELIB_NAME_AW(ldap_get_values_len)
+LDAP* CDECL ldap_initA(const PCHAR,ULONG);
+LDAP* CDECL ldap_initW(const PWCHAR,ULONG);
+#define    ldap_init WINELIB_NAME_AW(ldap_init)
+VOID CDECL ldap_memfreeA(PCHAR);
+VOID CDECL ldap_memfreeW(PWCHAR);
+#define    ldap_memfree WINELIB_NAME_AW(ldap_memfree)
+ULONG CDECL ldap_modifyA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_modifyW(LDAP*,PWCHAR,LDAPModW*[]);
+#define    ldap_modify WINELIB_NAME_AW(ldap_modify)
+ULONG CDECL ldap_modify_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_modify_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define    ldap_modify_ext WINELIB_NAME_AW(ldap_modify_ext)
+ULONG CDECL ldap_modify_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_modify_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
+#define    ldap_modify_ext_s WINELIB_NAME_AW(ldap_modify_ext_s)
+ULONG CDECL ldap_modify_sA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_modify_sW(LDAP*,PWCHAR,LDAPModW*[]);
+#define    ldap_modify_s WINELIB_NAME_AW(ldap_modify_s)
+ULONG CDECL ldap_modrdnA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_modrdnW(LDAP*,PWCHAR,PWCHAR);
+#define    ldap_modrdn WINELIB_NAME_AW(ldap_modrdn)
+ULONG CDECL ldap_modrdn2A(LDAP*,PCHAR,PCHAR,INT);
+ULONG CDECL ldap_modrdn2W(LDAP*,PWCHAR,PWCHAR,INT);
+#define    ldap_modrdn2 WINELIB_NAME_AW(ldap_modrdn2)
+ULONG CDECL ldap_modrdn2_sA(LDAP*,PCHAR,PCHAR,INT);
+ULONG CDECL ldap_modrdn2_sW(LDAP*,PWCHAR,PWCHAR,INT);
+#define    ldap_modrdn2_s WINELIB_NAME_AW(ldap_modrdn2_s)
+ULONG CDECL ldap_modrdn_sA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_modrdn_sW(LDAP*,PWCHAR,PWCHAR);
+#define    ldap_modrdn_s WINELIB_NAME_AW(ldap_modrdn_s)
+ULONG CDECL ldap_msgfree(LDAPMessage*);
+PCHAR CDECL ldap_next_attributeA(LDAP*,LDAPMessage*,BerElement*);
+PWCHAR CDECL ldap_next_attributeW(LDAP*,LDAPMessage*,BerElement*);
+#define    ldap_next_attribute WINELIB_NAME_AW(ldap_next_attribute)
+LDAPMessage * CDECL ldap_next_entry(LDAP*,LDAPMessage*);
+LDAP * CDECL ldap_openA(PCHAR,ULONG);
+LDAP * CDECL ldap_openW(PWCHAR,ULONG);
+#define    ldap_open WINELIB_NAME_AW(ldap_open)
+ULONG CDECL ldap_parse_extended_resultA(LDAP*,LDAPMessage*,PCHAR*,struct berval**,BOOLEAN);
+ULONG CDECL ldap_parse_extended_resultW(LDAP*,LDAPMessage*,PWCHAR*,struct berval**,BOOLEAN);
+#define    ldap_parse_extended_result WINELIB_NAME_AW(ldap_parse_extended_result)
+ULONG CDECL ldap_parse_page_controlA(LDAP*,PLDAPControlA*,ULONG*,struct berval**);
+ULONG CDECL ldap_parse_page_controlW(LDAP*,PLDAPControlW*,ULONG*,struct berval**);
+#define    ldap_parse_page_control WINELIB_NAME_AW(ldap_parse_page_control)
+ULONG CDECL ldap_parse_referenceA(LDAP*,LDAPMessage*,PCHAR**);
+ULONG CDECL ldap_parse_referenceW(LDAP*,LDAPMessage*,PWCHAR**);
+#define    ldap_parse_reference WINELIB_NAME_AW(ldap_parse_reference)
+ULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG);
+ULONG CDECL ldap_parse_resultA(LDAP*,LDAPMessage*,ULONG*,PCHAR*,PCHAR*,PCHAR**,PLDAPControlA**,BOOLEAN);
+ULONG CDECL ldap_parse_resultW(LDAP*,LDAPMessage*,ULONG*,PWCHAR*,PWCHAR*,PWCHAR**,PLDAPControlW**,BOOLEAN);
+#define    ldap_parse_result WINELIB_NAME_AW(ldap_parse_result)
+ULONG CDECL ldap_parse_sort_controlA(LDAP*,PLDAPControlA*,ULONG*,PCHAR*);
+ULONG CDECL ldap_parse_sort_controlW(LDAP*,PLDAPControlW*,ULONG*,PWCHAR*);
+#define    ldap_parse_sort_control WINELIB_NAME_AW(ldap_parse_sort_control)
+INT CDECL ldap_parse_vlv_controlA(PLDAP,PLDAPControlA*,PULONG,PULONG,PBERVAL*,PINT);
+INT CDECL ldap_parse_vlv_controlW(PLDAP,PLDAPControlW*,PULONG,PULONG,PBERVAL*,PINT);
+#define    ldap_parse_vlv_control WINELIB_NAME_AW(ldap_parse_vlv_control)
+void CDECL ldap_perror(LDAP*,const PCHAR);
+ULONG CDECL ldap_rename_extA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_rename_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define    ldap_rename_ext WINELIB_NAME_AW(ldap_rename_ext)
+ULONG CDECL ldap_rename_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_rename_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*);
+#define    ldap_rename_ext_s WINELIB_NAME_AW(ldap_rename_ext_s)
+ULONG CDECL ldap_result(LDAP*,ULONG,ULONG,struct l_timeval*,LDAPMessage**);
+ULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG);
+ULONG CDECL ldap_sasl_bindA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*);
+ULONG CDECL ldap_sasl_bindW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,int*);
+#define    ldap_sasl_bind WINELIB_NAME_AW(ldap_sasl_bind)
+ULONG CDECL ldap_sasl_bind_sA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,PBERVAL*);
+ULONG CDECL ldap_sasl_bind_sW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,PBERVAL*);
+#define    ldap_sasl_bind_s WINELIB_NAME_AW(ldap_sasl_bind_s)
+ULONG CDECL ldap_simple_bindA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_simple_bindW(LDAP*,PWCHAR,PWCHAR);
+#define    ldap_simple_bind WINELIB_NAME_AW(ldap_simple_bind)
+ULONG CDECL ldap_simple_bind_sA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_simple_bind_sW(LDAP*,PWCHAR,PWCHAR);
+#define    ldap_simple_bind_s WINELIB_NAME_AW(ldap_simple_bind_s)
+ULONG CDECL ldap_search_abandon_page(PLDAP,PLDAPSearch);
+ULONG CDECL ldap_searchA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG);
+ULONG CDECL ldap_searchW(LDAP*,PWCHAR,ULONG,PWCHAR,PCHAR[],ULONG);
+#define    ldap_search WINELIB_NAME_AW(ldap_search)
+ULONG CDECL ldap_search_extA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,
+    PLDAPControlA*,ULONG,ULONG,ULONG*);
+ULONG CDECL ldap_search_extW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,
+    PLDAPControlW*,ULONG,ULONG,ULONG*);
+#define    ldap_search_ext WINELIB_NAME_AW(ldap_search_ext)
+ULONG CDECL ldap_search_ext_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,
+    PLDAPControlA*,struct l_timeval*,ULONG,LDAPMessage**);
+ULONG CDECL ldap_search_ext_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,
+    PLDAPControlW*,struct l_timeval*,ULONG,LDAPMessage**);
+#define    ldap_search_ext_s WINELIB_NAME_AW(ldap_search_ext_s)
+PLDAPSearch CDECL ldap_search_init_pageA(PLDAP,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,
+    PLDAPControlA*,ULONG,ULONG,PLDAPSortKeyA*);
+PLDAPSearch CDECL ldap_search_init_pageW(PLDAP,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,
+    PLDAPControlW*,ULONG,ULONG, PLDAPSortKeyW*);
+#define    ldap_search_init_page WINELIB_NAME_AW(ldap_search_init_page)
+ULONG CDECL ldap_search_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,LDAPMessage**);
+ULONG CDECL ldap_search_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,LDAPMessage**);
+#define    ldap_search_s WINELIB_NAME_AW(ldap_search_s)
+ULONG CDECL ldap_search_stA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,
+    struct l_timeval*,LDAPMessage**);
+ULONG CDECL ldap_search_stW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,
+    struct l_timeval*,LDAPMessage**);
+#define    ldap_search_st WINELIB_NAME_AW(ldap_search_st)
+ULONG CDECL ldap_set_optionA(LDAP*,int,void*);
+ULONG CDECL ldap_set_optionW(LDAP*,int,void*);
+#define    ldap_set_option WINELIB_NAME_AW(ldap_set_option)
+LDAP * CDECL ldap_sslinitA(PCHAR,ULONG,int);
+LDAP * CDECL ldap_sslinitW(PWCHAR,ULONG,int);
+#define    ldap_sslinit WINELIB_NAME_AW(ldap_sslinit)
+ULONG CDECL ldap_start_tls_sA(LDAP*,PULONG,LDAPMessage**,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_start_tls_sW(LDAP*,PULONG,LDAPMessage**,PLDAPControlW*,PLDAPControlW*);
+#define    ldap_start_tls_s WINELIB_NAME_AW(ldap_start_tls_s)
+ULONG CDECL ldap_startup(PLDAP_VERSION_INFO,HANDLE*);
+BOOLEAN CDECL ldap_stop_tls_s(LDAP*);
+ULONG CDECL ldap_ufn2dnA(PCHAR,PCHAR*);
+ULONG CDECL ldap_ufn2dnW(PWCHAR,PWCHAR*);
+#define    ldap_ufn2dn WINELIB_NAME_AW(ldap_ufn2dn)
+ULONG CDECL ldap_unbind(LDAP*);
+ULONG CDECL ldap_unbind_s(LDAP*);
+ULONG CDECL ldap_value_freeA(PCHAR*);
+ULONG CDECL ldap_value_freeW(PWCHAR*);
+#define    ldap_value_free WINELIB_NAME_AW(ldap_value_free)
+ULONG CDECL ldap_value_free_len(struct berval**);
+
+BerElement* CDECL ber_alloc_t(INT);
+BERVAL* CDECL ber_bvdup(BERVAL*);
+void CDECL ber_bvecfree(PBERVAL*);
+void CDECL ber_bvfree(BERVAL*);
+ULONG CDECL ber_first_element(BerElement*,ULONG*,CHAR**);
+INT CDECL ber_flatten(BerElement*,PBERVAL*);
+void CDECL ber_free(BerElement*,INT);
+BerElement* CDECL ber_init(BERVAL*);
+ULONG CDECL ber_next_element(BerElement*,ULONG*,CHAR*);
+ULONG CDECL ber_peek_tag(BerElement*,ULONG*);
+INT CDECL ber_printf(BerElement*,PCHAR,...);
+ULONG CDECL ber_skip_tag(BerElement*,ULONG*);
+INT CDECL ber_scanf(BerElement*,PCHAR,...);
+
+ULONG CDECL LdapGetLastError(void);
+ULONG CDECL LdapMapErrorToWin32(ULONG);
+int CDECL LdapUnicodeToUTF8(LPCWSTR,int,LPSTR,int);
+int CDECL LdapUTF8ToUnicode(LPCSTR,int,LPWSTR,int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINLDAP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h
new file mode 100644
index 0000000..86ab917
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINNETWK_H_
+#define _WINNETWK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Network types
+ */
+
+#define WNNC_NET_MSNET      0x00010000
+#define WNNC_NET_LANMAN     0x00020000
+#define WNNC_NET_NETWARE    0x00030000
+#define WNNC_NET_VINES      0x00040000
+#define WNNC_NET_10NET      0x00050000
+#define WNNC_NET_LOCUS      0x00060000
+#define WNNC_NET_SUN_PC_NFS 0x00070000
+#define WNNC_NET_LANSTEP    0x00080000
+#define WNNC_NET_9TILES     0x00090000
+#define WNNC_NET_LANTASTIC  0x000A0000
+#define WNNC_NET_AS400      0x000B0000
+#define WNNC_NET_FTP_NFS    0x000C0000
+#define WNNC_NET_PATHWORKS  0x000D0000
+#define WNNC_NET_LIFENET    0x000E0000
+#define WNNC_NET_POWERLAN   0x000F0000
+#define WNNC_NET_BWNFS      0x00100000
+#define WNNC_NET_COGENT     0x00110000
+#define WNNC_NET_FARALLON   0x00120000
+#define WNNC_NET_APPLETALK  0x00130000
+#define WNNC_NET_INTERGRAPH 0x00140000
+
+/*
+ *  Network resources
+ */
+
+#define RESOURCE_CONNECTED      0x00000001
+#define RESOURCE_GLOBALNET      0x00000002
+#define RESOURCE_REMEMBERED     0x00000003
+#define RESOURCE_RECENT         0x00000004
+#define RESOURCE_CONTEXT        0x00000005
+
+#define RESOURCETYPE_ANY        0x00000000
+#define RESOURCETYPE_DISK       0x00000001
+#define RESOURCETYPE_PRINT      0x00000002
+#define RESOURCETYPE_RESERVED   0x00000008
+#define RESOURCETYPE_UNKNOWN    0xFFFFFFFF
+
+#define RESOURCEUSAGE_CONNECTABLE   0x00000001
+#define RESOURCEUSAGE_CONTAINER     0x00000002
+#define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004
+#define RESOURCEUSAGE_SIBLING       0x00000008
+#define RESOURCEUSAGE_ATTACHED      0x00000010
+#define RESOURCEUSAGE_ALL           (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED)
+#define RESOURCEUSAGE_RESERVED      0x80000000
+
+#define RESOURCEDISPLAYTYPE_GENERIC        0x00000000
+#define RESOURCEDISPLAYTYPE_DOMAIN         0x00000001
+#define RESOURCEDISPLAYTYPE_SERVER         0x00000002
+#define RESOURCEDISPLAYTYPE_SHARE          0x00000003
+#define RESOURCEDISPLAYTYPE_FILE           0x00000004
+#define RESOURCEDISPLAYTYPE_GROUP          0x00000005
+#define RESOURCEDISPLAYTYPE_NETWORK        0x00000006
+#define RESOURCEDISPLAYTYPE_ROOT           0x00000007
+#define RESOURCEDISPLAYTYPE_SHAREADMIN     0x00000008
+#define RESOURCEDISPLAYTYPE_DIRECTORY      0x00000009
+#define RESOURCEDISPLAYTYPE_TREE           0x0000000A
+
+typedef struct {
+	DWORD	dwScope;
+	DWORD	dwType;
+	DWORD	dwDisplayType;
+	DWORD	dwUsage;
+	LPSTR	lpLocalName;
+	LPSTR	lpRemoteName;
+	LPSTR	lpComment ;
+	LPSTR	lpProvider;
+} NETRESOURCEA,*LPNETRESOURCEA;
+
+typedef struct {
+	DWORD	dwScope;
+	DWORD	dwType;
+	DWORD	dwDisplayType;
+	DWORD	dwUsage;
+	LPWSTR	lpLocalName;
+	LPWSTR	lpRemoteName;
+	LPWSTR	lpComment ;
+	LPWSTR	lpProvider;
+} NETRESOURCEW,*LPNETRESOURCEW;
+
+DECL_WINELIB_TYPE_AW(NETRESOURCE)
+DECL_WINELIB_TYPE_AW(LPNETRESOURCE)
+
+
+/*
+ *  Network connections
+ */
+
+#define NETPROPERTY_PERSISTENT       1
+
+#define CONNECT_UPDATE_PROFILE      0x00000001
+#define CONNECT_UPDATE_RECENT       0x00000002
+#define CONNECT_TEMPORARY           0x00000004
+#define CONNECT_INTERACTIVE         0x00000008
+#define CONNECT_PROMPT              0x00000010
+#define CONNECT_NEED_DRIVE          0x00000020
+#define CONNECT_REFCOUNT            0x00000040
+#define CONNECT_REDIRECT            0x00000080
+#define CONNECT_LOCALDRIVE          0x00000100
+#define CONNECT_CURRENT_MEDIA       0x00000200
+
+DWORD WINAPI WNetAddConnectionA(LPCSTR,LPCSTR,LPCSTR);
+DWORD WINAPI WNetAddConnectionW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define      WNetAddConnection WINELIB_NAME_AW(WNetAddConnection)
+DWORD WINAPI WNetAddConnection2A(LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI WNetAddConnection2W(LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
+#define      WNetAddConnection2 WINELIB_NAME_AW(WNetAddConnection2)
+DWORD WINAPI WNetAddConnection3A(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI WNetAddConnection3W(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
+#define      WNetAddConnection3 WINELIB_NAME_AW(WNetAddConnection3)
+DWORD WINAPI WNetCancelConnectionA(LPCSTR,BOOL);
+DWORD WINAPI WNetCancelConnectionW(LPCWSTR,BOOL);
+#define      WNetCancelConnection WINELIB_NAME_AW(WNetCancelConnection)
+DWORD WINAPI WNetCancelConnection2A(LPCSTR,DWORD,BOOL);
+DWORD WINAPI WNetCancelConnection2W(LPCWSTR,DWORD,BOOL);
+#define      WNetCancelConnection2 WINELIB_NAME_AW(WNetCancelConnection2)
+DWORD WINAPI WNetGetConnectionA(LPCSTR,LPSTR,LPDWORD);
+DWORD WINAPI WNetGetConnectionW(LPCWSTR,LPWSTR,LPDWORD);
+#define      WNetGetConnection WINELIB_NAME_AW(WNetGetConnection)
+DWORD WINAPI WNetGetLastErrorA(LPDWORD,LPSTR,DWORD,LPSTR,DWORD);
+DWORD WINAPI WNetGetLastErrorW(LPDWORD,LPWSTR,DWORD,LPWSTR,DWORD);
+#define      WNetGetLastError WINELIB_NAME_AW(WNetGetLastError)
+DWORD WINAPI WNetRestoreConnectionA(HWND,LPCSTR);
+DWORD WINAPI WNetRestoreConnectionW(HWND,LPCWSTR);
+#define      WNetRestoreConnection WINELIB_NAME_AW(WNetRestoreConnection)
+DWORD WINAPI WNetUseConnectionA(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD,LPSTR,LPDWORD,LPDWORD);
+DWORD WINAPI WNetUseConnectionW(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPDWORD,LPDWORD);
+#define      WNetUseConnection WINELIB_NAME_AW(WNetUseConnection)
+DWORD WINAPI WNetSetConnectionA(LPCSTR,DWORD,LPVOID);
+DWORD WINAPI WNetSetConnectionW(LPCWSTR,DWORD,LPVOID);
+#define      WNetSetConnection WINELIB_NAME_AW(WNetSetConnection)
+
+/*
+ *  Network connection dialogs
+ */
+
+typedef struct {
+    DWORD cbStructure;       /* size of this structure in bytes */
+    HWND hwndOwner;          /* owner window for the dialog */
+    LPNETRESOURCEA lpConnRes;/* Requested Resource info    */
+    DWORD dwFlags;           /* flags (see below) */
+    DWORD dwDevNum;          /* number of devices connected to */
+} CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA;
+typedef struct {
+    DWORD cbStructure;       /* size of this structure in bytes */
+    HWND hwndOwner;          /* owner window for the dialog */
+    LPNETRESOURCEW lpConnRes;/* Requested Resource info    */
+    DWORD dwFlags;           /* flags (see below) */
+    DWORD dwDevNum;          /* number of devices connected to */
+} CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW;
+
+DECL_WINELIB_TYPE_AW(CONNECTDLGSTRUCT)
+DECL_WINELIB_TYPE_AW(LPCONNECTDLGSTRUCT)
+
+#define CONNDLG_RO_PATH     0x00000001 /* Resource path should be read-only    */
+#define CONNDLG_CONN_POINT  0x00000002 /* Netware -style movable connection point enabled */
+#define CONNDLG_USE_MRU     0x00000004 /* Use MRU combobox  */
+#define CONNDLG_HIDE_BOX    0x00000008 /* Hide persistent connect checkbox  */
+#define CONNDLG_PERSIST     0x00000010 /* Force persistent connection */
+#define CONNDLG_NOT_PERSIST 0x00000020 /* Force connection NOT persistent */
+
+typedef struct {
+    DWORD           cbStructure;      /* size of this structure in bytes */
+    HWND            hwndOwner;        /* owner window for the dialog */
+    LPSTR           lpLocalName;      /* local device name */
+    LPSTR           lpRemoteName;     /* network resource name */
+    DWORD           dwFlags;          /* flags */
+} DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA;
+typedef struct {
+    DWORD           cbStructure;      /* size of this structure in bytes */
+    HWND            hwndOwner;        /* owner window for the dialog */
+    LPWSTR          lpLocalName;      /* local device name */
+    LPWSTR          lpRemoteName;     /* network resource name */
+    DWORD           dwFlags;          /* flags */
+} DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW;
+
+DECL_WINELIB_TYPE_AW(DISCDLGSTRUCT)
+DECL_WINELIB_TYPE_AW(LPDISCDLGSTRUCT)
+
+#define DISC_UPDATE_PROFILE         0x00000001
+#define DISC_NO_FORCE               0x00000040
+
+DWORD WINAPI WNetConnectionDialog(HWND,DWORD);
+DWORD WINAPI WNetDisconnectDialog(HWND,DWORD);
+DWORD WINAPI WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA);
+DWORD WINAPI WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW);
+#define      WNetConnectionDialog1 WINELIB_NAME_AW(WNetConnectionDialog1)
+DWORD WINAPI WNetDisconnectDialog1A(LPDISCDLGSTRUCTA);
+DWORD WINAPI WNetDisconnectDialog1W(LPDISCDLGSTRUCTW);
+#define      WNetDisconnectDialog1 WINELIB_NAME_AW(WNetDisconnectDialog1)
+
+/*
+ *  Network browsing
+ */
+
+DWORD WINAPI WNetOpenEnumA(DWORD,DWORD,DWORD,LPNETRESOURCEA,LPHANDLE);
+DWORD WINAPI WNetOpenEnumW(DWORD,DWORD,DWORD,LPNETRESOURCEW,LPHANDLE);
+#define      WNetOpenEnum WINELIB_NAME_AW(WNetOpenEnum)
+DWORD WINAPI WNetEnumResourceA(HANDLE,LPDWORD,LPVOID,LPDWORD);
+DWORD WINAPI WNetEnumResourceW(HANDLE,LPDWORD,LPVOID,LPDWORD);
+#define      WNetEnumResource WINELIB_NAME_AW(WNetEnumResource)
+DWORD WINAPI WNetGetResourceInformationA(LPNETRESOURCEA,LPVOID,LPDWORD,LPSTR*);
+DWORD WINAPI WNetGetResourceInformationW(LPNETRESOURCEW,LPVOID,LPDWORD,LPWSTR*);
+#define      WNetGetResourceInformation WINELIB_NAME_AW(WNetGetResourceInformation)
+DWORD WINAPI WNetGetResourceParentA(LPNETRESOURCEA,LPVOID,LPDWORD);
+DWORD WINAPI WNetGetResourceParentW(LPNETRESOURCEW,LPVOID,LPDWORD);
+#define      WNetGetResourceParent WINELIB_NAME_AW(WNetGetResourceParent)
+DWORD WINAPI WNetCloseEnum(HANDLE);
+
+/*
+ *  Universal naming
+ */
+
+#define UNIVERSAL_NAME_INFO_LEVEL   0x00000001
+#define REMOTE_NAME_INFO_LEVEL      0x00000002
+
+typedef struct {
+    LPSTR    lpUniversalName;
+} UNIVERSAL_NAME_INFOA, *LPUNIVERSAL_NAME_INFOA;
+typedef struct {
+    LPWSTR   lpUniversalName;
+} UNIVERSAL_NAME_INFOW, *LPUNIVERSAL_NAME_INFOW;
+
+DECL_WINELIB_TYPE_AW(UNIVERSAL_NAME_INFO)
+DECL_WINELIB_TYPE_AW(LPUNIVERSAL_NAME_INFO)
+
+typedef struct {
+    LPSTR    lpUniversalName;
+    LPSTR    lpConnectionName;
+    LPSTR    lpRemainingPath;
+}REMOTE_NAME_INFOA, *LPREMOTE_NAME_INFOA;
+typedef struct {
+    LPWSTR   lpUniversalName;
+    LPWSTR   lpConnectionName;
+    LPWSTR   lpRemainingPath;
+}REMOTE_NAME_INFOW, *LPREMOTE_NAME_INFOW;
+
+DECL_WINELIB_TYPE_AW(REMOTE_NAME_INFO)
+DECL_WINELIB_TYPE_AW(LPREMOTE_NAME_INFO)
+
+DWORD WINAPI WNetGetUniversalNameA(LPCSTR,DWORD,LPVOID,LPDWORD);
+DWORD WINAPI WNetGetUniversalNameW(LPCWSTR,DWORD,LPVOID,LPDWORD);
+#define      WNetGetUniversalName WINELIB_NAME_AW(WNetGetUniversalName)
+
+/*
+ *  Other
+ */
+
+DWORD WINAPI WNetGetUserA(LPCSTR,LPSTR,LPDWORD);
+DWORD WINAPI WNetGetUserW(LPCWSTR,LPWSTR,LPDWORD);
+#define      WNetGetUser WINELIB_NAME_AW(WNetGetUser)
+
+#define WNFMT_MULTILINE         0x01
+#define WNFMT_ABBREVIATED       0x02
+#define WNFMT_INENUM            0x10
+#define WNFMT_CONNECTION        0x20
+
+DWORD WINAPI WNetGetProviderNameA(DWORD,LPSTR,LPDWORD);
+DWORD WINAPI WNetGetProviderNameW(DWORD,LPWSTR,LPDWORD);
+#define      WNetGetProviderName WINELIB_NAME_AW(WNetGetProviderName)
+
+typedef struct {
+    DWORD cbStructure;
+    DWORD dwProviderVersion;
+    DWORD dwStatus;
+    DWORD dwCharacteristics;
+    DWORD dwHandle;
+    WORD  wNetType;
+    DWORD dwPrinters;
+    DWORD dwDrives;
+} NETINFOSTRUCT, *LPNETINFOSTRUCT;
+
+#define NETINFO_DLL16       0x00000001
+#define NETINFO_DISKRED     0x00000004
+#define NETINFO_PRINTERRED  0x00000008
+
+DWORD WINAPI WNetGetNetworkInformationA(LPCSTR,LPNETINFOSTRUCT);
+DWORD WINAPI WNetGetNetworkInformationW(LPCWSTR,LPNETINFOSTRUCT);
+#define      WNetGetNetworkInformation WINELIB_NAME_AW(WNetGetNetworkInformation)
+
+
+/*
+ *  Status codes
+ */
+
+#define WN_SUCCESS                      NO_ERROR
+#define WN_NO_ERROR                     NO_ERROR
+#define WN_NOT_SUPPORTED                ERROR_NOT_SUPPORTED
+#define WN_CANCEL                       ERROR_CANCELLED
+#define WN_RETRY                        ERROR_RETRY
+#define WN_NET_ERROR                    ERROR_UNEXP_NET_ERR
+#define WN_MORE_DATA                    ERROR_MORE_DATA
+#define WN_BAD_POINTER                  ERROR_INVALID_ADDRESS
+#define WN_BAD_VALUE                    ERROR_INVALID_PARAMETER
+#define WN_BAD_USER                     ERROR_BAD_USERNAME
+#define WN_BAD_PASSWORD                 ERROR_INVALID_PASSWORD
+#define WN_ACCESS_DENIED                ERROR_ACCESS_DENIED
+#define WN_FUNCTION_BUSY                ERROR_BUSY
+#define WN_WINDOWS_ERROR                ERROR_UNEXP_NET_ERR
+#define WN_OUT_OF_MEMORY                ERROR_NOT_ENOUGH_MEMORY
+#define WN_NO_NETWORK                   ERROR_NO_NETWORK
+#define WN_EXTENDED_ERROR               ERROR_EXTENDED_ERROR
+#define WN_BAD_LEVEL                    ERROR_INVALID_LEVEL
+#define WN_BAD_HANDLE                   ERROR_INVALID_HANDLE
+#define WN_NOT_INITIALIZING             ERROR_ALREADY_INITIALIZED
+#define WN_NO_MORE_DEVICES              ERROR_NO_MORE_DEVICES
+
+#define WN_NOT_CONNECTED                ERROR_NOT_CONNECTED
+#define WN_OPEN_FILES                   ERROR_OPEN_FILES
+#define WN_DEVICE_IN_USE                ERROR_DEVICE_IN_USE
+#define WN_BAD_NETNAME                  ERROR_BAD_NET_NAME
+#define WN_BAD_LOCALNAME                ERROR_BAD_DEVICE
+#define WN_ALREADY_CONNECTED            ERROR_ALREADY_ASSIGNED
+#define WN_DEVICE_ERROR                 ERROR_GEN_FAILURE
+#define WN_CONNECTION_CLOSED            ERROR_CONNECTION_UNAVAIL
+#define WN_NO_NET_OR_BAD_PATH           ERROR_NO_NET_OR_BAD_PATH
+#define WN_BAD_PROVIDER                 ERROR_BAD_PROVIDER
+#define WN_CANNOT_OPEN_PROFILE          ERROR_CANNOT_OPEN_PROFILE
+#define WN_BAD_PROFILE                  ERROR_BAD_PROFILE
+#define WN_BAD_DEV_TYPE                 ERROR_BAD_DEV_TYPE
+#define WN_DEVICE_ALREADY_REMEMBERED    ERROR_DEVICE_ALREADY_REMEMBERED
+
+#define WN_NO_MORE_ENTRIES              ERROR_NO_MORE_ITEMS
+#define WN_NOT_CONTAINER                ERROR_NOT_CONTAINER
+
+#define WN_NOT_AUTHENTICATED            ERROR_NOT_AUTHENTICATED
+#define WN_NOT_LOGGED_ON                ERROR_NOT_LOGGED_ON
+#define WN_NOT_VALIDATED                ERROR_NO_LOGON_SERVERS
+
+
+/*
+ *  Multinet (for Shell)
+ */
+
+typedef struct {
+	DWORD	cbStructure;
+	DWORD	dwFlags;
+	DWORD	dwSpeed;
+	DWORD	dwDelay;
+	DWORD	dwOptDataSize;
+} NETCONNECTINFOSTRUCT,*LPNETCONNECTINFOSTRUCT;
+
+#define WNCON_FORNETCARD        0x00000001
+#define WNCON_NOTROUTED         0x00000002
+#define WNCON_SLOWLINK          0x00000004
+#define WNCON_DYNAMIC           0x00000008
+
+DWORD WINAPI MultinetGetConnectionPerformanceA(LPNETRESOURCEA,LPNETCONNECTINFOSTRUCT);
+DWORD WINAPI MultinetGetConnectionPerformanceW(LPNETRESOURCEW,LPNETCONNECTINFOSTRUCT);
+#define      MultinetGetConnectionPerformance WINELIB_NAME_AW(MultinetGetConnectionPerformance)
+DWORD WINAPI MultinetGetErrorTextA(DWORD,DWORD,DWORD);
+DWORD WINAPI MultinetGetErrorTextW(DWORD,DWORD,DWORD);
+#define      MultinetGetErrorText WINELIB_NAME_AW(MultinetGetErrorText)
+
+/*
+ * Password cache
+ */
+
+/* WNetEnumCachedPasswords */
+typedef struct tagPASSWORD_CACHE_ENTRY
+{
+	WORD cbEntry;
+	WORD cbResource;
+	WORD cbPassword;
+	BYTE iEntry;
+	BYTE nType;
+	BYTE abResource[1];
+} PASSWORD_CACHE_ENTRY;
+
+typedef BOOL (CALLBACK *ENUMPASSWORDPROC)(PASSWORD_CACHE_ENTRY *, DWORD);
+UINT WINAPI WNetEnumCachedPasswords( LPSTR, WORD, BYTE, ENUMPASSWORDPROC, DWORD);
+DWORD WINAPI WNetGetCachedPassword( LPSTR, WORD, LPSTR, LPWORD, BYTE );
+DWORD WINAPI WNetCachePassword( LPSTR, WORD, LPSTR, WORD, BYTE, WORD );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINNETWK_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h
new file mode 100644
index 0000000..185a502
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h
@@ -0,0 +1,896 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINNLS_H
+#define __WINE_WINNLS_H
+#ifndef NONLS
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _NORMALIZE_
+# define WINNORMALIZEAPI DECLSPEC_IMPORT
+#else
+# define WINNORMALIZEAPI
+#endif
+
+/* Country codes */
+#define CTRY_DEFAULT            (0)
+#define CTRY_ALBANIA            (355)
+#define CTRY_ALGERIA            (213)
+#define CTRY_ARGENTINA          (54)
+#define CTRY_ARMENIA            (374)
+#define CTRY_AUSTRALIA          (61)
+#define CTRY_AUSTRIA            (43)
+#define CTRY_AZERBAIJAN         (994)
+#define CTRY_BAHRAIN            (973)
+#define CTRY_BELARUS            (375)
+#define CTRY_BELGIUM            (32)
+#define CTRY_BELIZE             (501)
+#define CTRY_BOLIVIA            (591)
+#define CTRY_BRAZIL             (55)
+#define CTRY_BRUNEI_DARUSSALAM  (673)
+#define CTRY_BULGARIA           (359)
+#define CTRY_CANADA             (2)
+#define CTRY_CARIBBEAN          (1)
+#define CTRY_CHILE              (56)
+#define CTRY_COLOMBIA           (57)
+#define CTRY_COSTA_RICA         (506)
+#define CTRY_CROATIA            (385)
+#define CTRY_CZECH              (420)
+#define CTRY_DENMARK            (45)
+#define CTRY_DOMINICAN_REPUBLIC (1)
+#define CTRY_ECUADOR            (593)
+#define CTRY_EGYPT              (20)
+#define CTRY_EL_SALVADOR        (503)
+#define CTRY_ESTONIA            (372)
+#define CTRY_FAEROE_ISLANDS     (298)
+#define CTRY_FINLAND            (358)
+#define CTRY_FRANCE             (33)
+#define CTRY_GEORGIA            (995)
+#define CTRY_GERMANY            (49)
+#define CTRY_GREECE             (30)
+#define CTRY_GUATEMALA          (502)
+#define CTRY_HONDURAS           (504)
+#define CTRY_HONG_KONG          (852)
+#define CTRY_HUNGARY            (36)
+#define CTRY_ICELAND            (354)
+#define CTRY_INDIA              (91)
+#define CTRY_INDONESIA          (62)
+#define CTRY_IRAN               (981)
+#define CTRY_IRAQ               (964)
+#define CTRY_IRELAND            (353)
+#define CTRY_ISRAEL             (972)
+#define CTRY_ITALY              (39)
+#define CTRY_JAMAICA            (1)
+#define CTRY_JAPAN              (81)
+#define CTRY_JORDAN             (962)
+#define CTRY_KAZAKSTAN          (7)
+#define CTRY_KENYA              (254)
+#define CTRY_KUWAIT             (965)
+#define CTRY_KYRGYZSTAN         (996)
+#define CTRY_LATVIA             (371)
+#define CTRY_LEBANON            (961)
+#define CTRY_LIBYA              (218)
+#define CTRY_LIECHTENSTEIN      (41)
+#define CTRY_LITHUANIA          (370)
+#define CTRY_LUXEMBOURG         (352)
+#define CTRY_MACAU              (853)
+#define CTRY_MACEDONIA          (389)
+#define CTRY_MALAYSIA           (60)
+#define CTRY_MALDIVES           (960)
+#define CTRY_MEXICO             (52)
+#define CTRY_MONACO             (33)
+#define CTRY_MONGOLIA           (976)
+#define CTRY_MOROCCO            (212)
+#define CTRY_NETHERLANDS        (31)
+#define CTRY_NEW_ZEALAND        (64)
+#define CTRY_NICARAGUA          (505)
+#define CTRY_NORWAY             (47)
+#define CTRY_OMAN               (968)
+#define CTRY_PAKISTAN           (92)
+#define CTRY_PANAMA             (507)
+#define CTRY_PARAGUAY           (595)
+#define CTRY_PERU               (51)
+#define CTRY_PHILIPPINES        (63)
+#define CTRY_POLAND             (48)
+#define CTRY_PORTUGAL           (351)
+#define CTRY_PRCHINA            (86)
+#define CTRY_PUERTO_RICO        (1)
+#define CTRY_QATAR              (974)
+#define CTRY_ROMANIA            (40)
+#define CTRY_RUSSIA             (7)
+#define CTRY_SAUDI_ARABIA       (966)
+#define CTRY_SERBIA             (381)
+#define CTRY_SINGAPORE          (65)
+#define CTRY_SLOVAK             (421)
+#define CTRY_SLOVENIA           (386)
+#define CTRY_SOUTH_AFRICA       (27)
+#define CTRY_SOUTH_KOREA        (82)
+#define CTRY_SPAIN              (34)
+#define CTRY_SWEDEN             (46)
+#define CTRY_SWITZERLAND        (41)
+#define CTRY_SYRIA              (963)
+#define CTRY_TAIWAN             (886)
+#define CTRY_TATARSTAN          (7)
+#define CTRY_THAILAND           (66)
+#define CTRY_TRINIDAD_Y_TOBAGO  (1)
+#define CTRY_TUNISIA            (216)
+#define CTRY_TURKEY             (90)
+#define CTRY_UAE                (971)
+#define CTRY_UKRAINE            (380)
+#define CTRY_UNITED_KINGDOM     (44)
+#define CTRY_UNITED_STATES      (1)
+#define CTRY_URUGUAY            (598)
+#define CTRY_UZBEKISTAN         (7)
+#define CTRY_VENEZUELA          (58)
+#define CTRY_VIET_NAM           (84)
+#define CTRY_YEMEN              (967)
+#define CTRY_ZIMBABWE           (263)
+
+#define MB_PRECOMPOSED              0x01
+#define MB_COMPOSITE                0x02
+#define MB_USEGLYPHCHARS            0x04
+#define MB_ERR_INVALID_CHARS        0x08
+
+#define LGRPID_INSTALLED            0x1
+#define LGRPID_SUPPORTED            0x2
+
+#define LCID_INSTALLED              0x1
+#define LCID_SUPPORTED              0x2
+#define LCID_ALTERNATE_SORTS        0x4
+
+#define LOCALE_ALL                  0x00
+#define LOCALE_WINDOWS              0x01
+#define LOCALE_SUPPLEMENTAL         0x02
+#define LOCALE_ALTERNATE_SORTS      0x04
+#define LOCALE_REPLACEMENT          0x08
+#define LOCALE_NEUTRALDATA          0x10
+#define LOCALE_SPECIFICDATA         0x20
+
+/* Locale flags */
+#define LOCALE_NOUSEROVERRIDE         0x80000000
+#define LOCALE_USE_CP_ACP             0x40000000
+#define LOCALE_RETURN_NUMBER          0x20000000
+#define LOCALE_RETURN_GENITIVE_NAMES  0x10000000
+
+/* Locale information types */
+#define LOCALE_ILANGUAGE            0x0001
+#define LOCALE_SLANGUAGE            0x0002
+#define LOCALE_SENGLANGUAGE         0x1001
+#define LOCALE_SENGLISHLANGUAGENAME 0x1001
+#define LOCALE_SABBREVLANGNAME      0x0003
+#define LOCALE_SNATIVELANGNAME      0x0004
+#define LOCALE_SNATIVELANGUAGENAME  0x0004
+#define LOCALE_ICOUNTRY             0x0005
+#define LOCALE_SCOUNTRY             0x0006
+#define LOCALE_SLOCALIZEDCOUNTRYNAME 0x0006
+#define LOCALE_SENGCOUNTRY          0x1002
+#define LOCALE_SENGLISHCOUNTRYNAME  0x1002
+#define LOCALE_SABBREVCTRYNAME      0x0007
+#define LOCALE_SNATIVECTRYNAME      0x0008
+#define LOCALE_SNATIVECOUNTRYNAME   0x0008
+#define LOCALE_IDEFAULTLANGUAGE     0x0009
+#define LOCALE_IDEFAULTCOUNTRY      0x000A
+#define LOCALE_IDEFAULTCODEPAGE     0x000B
+#define LOCALE_IDEFAULTANSICODEPAGE 0x1004
+#define LOCALE_IDEFAULTMACCODEPAGE  0x1011
+#define LOCALE_SLIST                0x000C
+#define LOCALE_IMEASURE             0x000D
+#define LOCALE_SDECIMAL             0x000E
+#define LOCALE_STHOUSAND            0x000F
+#define LOCALE_SGROUPING            0x0010
+#define LOCALE_IDIGITS              0x0011
+#define LOCALE_ILZERO               0x0012
+#define LOCALE_INEGNUMBER           0x1010
+#define LOCALE_SNATIVEDIGITS        0x0013
+#define LOCALE_SCURRENCY            0x0014
+#define LOCALE_SINTLSYMBOL          0x0015
+#define LOCALE_SMONDECIMALSEP       0x0016
+#define LOCALE_SMONTHOUSANDSEP      0x0017
+#define LOCALE_SMONGROUPING         0x0018
+#define LOCALE_ICURRDIGITS          0x0019
+#define LOCALE_IINTLCURRDIGITS      0x001A
+#define LOCALE_ICURRENCY            0x001B
+#define LOCALE_INEGCURR             0x001C
+#define LOCALE_SDATE                0x001D
+#define LOCALE_STIME                0x001E
+#define LOCALE_SSHORTDATE           0x001F
+#define LOCALE_SLONGDATE            0x0020
+#define LOCALE_STIMEFORMAT          0x1003
+#define LOCALE_IDATE                0x0021
+#define LOCALE_ILDATE               0x0022
+#define LOCALE_ITIME                0x0023
+#define LOCALE_ITIMEMARKPOSN        0x1005
+#define LOCALE_ICENTURY             0x0024
+#define LOCALE_ITLZERO              0x0025
+#define LOCALE_IDAYLZERO            0x0026
+#define LOCALE_IMONLZERO            0x0027
+#define LOCALE_S1159                0x0028
+#define LOCALE_S2359                0x0029
+#define LOCALE_ICALENDARTYPE        0x1009
+#define LOCALE_IOPTIONALCALENDAR    0x100B
+#define LOCALE_IFIRSTDAYOFWEEK      0x100C
+#define LOCALE_IFIRSTWEEKOFYEAR     0x100D
+#define LOCALE_SDAYNAME1            0x002A
+#define LOCALE_SDAYNAME2            0x002B
+#define LOCALE_SDAYNAME3            0x002C
+#define LOCALE_SDAYNAME4            0x002D
+#define LOCALE_SDAYNAME5            0x002E
+#define LOCALE_SDAYNAME6            0x002F
+#define LOCALE_SDAYNAME7            0x0030
+#define LOCALE_SABBREVDAYNAME1      0x0031
+#define LOCALE_SABBREVDAYNAME2      0x0032
+#define LOCALE_SABBREVDAYNAME3      0x0033
+#define LOCALE_SABBREVDAYNAME4      0x0034
+#define LOCALE_SABBREVDAYNAME5      0x0035
+#define LOCALE_SABBREVDAYNAME6      0x0036
+#define LOCALE_SABBREVDAYNAME7      0x0037
+#define LOCALE_SMONTHNAME1          0x0038
+#define LOCALE_SMONTHNAME2          0x0039
+#define LOCALE_SMONTHNAME3          0x003A
+#define LOCALE_SMONTHNAME4          0x003B
+#define LOCALE_SMONTHNAME5          0x003C
+#define LOCALE_SMONTHNAME6          0x003D
+#define LOCALE_SMONTHNAME7          0x003E
+#define LOCALE_SMONTHNAME8          0x003F
+#define LOCALE_SMONTHNAME9          0x0040
+#define LOCALE_SMONTHNAME10         0x0041
+#define LOCALE_SMONTHNAME11         0x0042
+#define LOCALE_SMONTHNAME12         0x0043
+#define LOCALE_SMONTHNAME13         0x100E
+#define LOCALE_SABBREVMONTHNAME1    0x0044
+#define LOCALE_SABBREVMONTHNAME2    0x0045
+#define LOCALE_SABBREVMONTHNAME3    0x0046
+#define LOCALE_SABBREVMONTHNAME4    0x0047
+#define LOCALE_SABBREVMONTHNAME5    0x0048
+#define LOCALE_SABBREVMONTHNAME6    0x0049
+#define LOCALE_SABBREVMONTHNAME7    0x004A
+#define LOCALE_SABBREVMONTHNAME8    0x004B
+#define LOCALE_SABBREVMONTHNAME9    0x004C
+#define LOCALE_SABBREVMONTHNAME10   0x004D
+#define LOCALE_SABBREVMONTHNAME11   0x004E
+#define LOCALE_SABBREVMONTHNAME12   0x004F
+#define LOCALE_SABBREVMONTHNAME13   0x100F
+#define LOCALE_SPOSITIVESIGN        0x0050
+#define LOCALE_SNEGATIVESIGN        0x0051
+#define LOCALE_IPOSSIGNPOSN         0x0052
+#define LOCALE_INEGSIGNPOSN         0x0053
+#define LOCALE_IPOSSYMPRECEDES      0x0054
+#define LOCALE_IPOSSEPBYSPACE       0x0055
+#define LOCALE_INEGSYMPRECEDES      0x0056
+#define LOCALE_INEGSEPBYSPACE       0x0057
+#define	LOCALE_FONTSIGNATURE        0x0058
+#define LOCALE_SISO639LANGNAME      0x0059
+#define LOCALE_SISO3166CTRYNAME     0x005A
+#define LOCALE_IGEOID               0x005B
+#define LOCALE_SNAME                0x005C
+#define LOCALE_SDURATION            0x005D
+#define LOCALE_SKEYBOARDSTOINSTALL  0x005E
+#define LOCALE_SSHORTESTDAYNAME1    0x0060
+#define LOCALE_SSHORTESTDAYNAME2    0x0061
+#define LOCALE_SSHORTESTDAYNAME3    0x0062
+#define LOCALE_SSHORTESTDAYNAME4    0x0063
+#define LOCALE_SSHORTESTDAYNAME5    0x0064
+#define LOCALE_SSHORTESTDAYNAME6    0x0065
+#define LOCALE_SSHORTESTDAYNAME7    0x0066
+#define LOCALE_SISO639LANGNAME2     0x0067
+#define LOCALE_SISO3166CTRYNAME2    0x0068
+#define LOCALE_SNAN                 0x0069
+#define LOCALE_SPOSINFINITY         0x006A
+#define LOCALE_SNEGINFINITY         0x006B
+#define LOCALE_SSCRIPTS             0x006C
+#define LOCALE_SPARENT              0x006D
+#define LOCALE_SCONSOLEFALLBACKNAME 0x006E
+#define LOCALE_SLANGDISPLAYNAME     0x006F
+#define LOCALE_SLOCALIZEDLANGUAGENAME 0x006F
+#define LOCALE_IREADINGLAYOUT       0x0070
+#define LOCALE_INEUTRAL             0x0071
+#define LOCALE_SENGLISHDISPLAYNAME  0x0072
+#define LOCALE_SNATIVEDISPLAYNAME   0x0073
+#define LOCALE_INEGATIVEPERCENT     0x0074
+#define LOCALE_IPOSITIVEPERCENT     0x0075
+#define LOCALE_SPERCENT             0x0076
+#define LOCALE_SPERMILLE            0x0077
+#define LOCALE_SMONTHDAY            0x0078
+#define LOCALE_SSHORTTIME           0x0079
+#define LOCALE_SOPENTYPELANGUAGETAG 0X007A
+#define LOCALE_SSORTLOCALE          0x007B
+
+#define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012
+#define LOCALE_IPAPERSIZE             0x100A
+#define LOCALE_SENGCURRNAME           0x1007
+#define LOCALE_SNATIVECURRNAME        0x1008
+#define LOCALE_SYEARMONTH             0x1006
+#define LOCALE_SSORTNAME              0x1013
+#define LOCALE_IDIGITSUBSTITUTION     0x1014
+
+/* Locale name special values */
+#if defined(__GNUC__)
+# define LOCALE_NAME_INVARIANT      (const WCHAR []){ 0 }
+#elif defined(_MSC_VER)
+# define LOCALE_NAME_INVARIANT      L""
+#else
+static const WCHAR LOCALE_NAME_INVARIANT[] = { 0 };
+#endif
+
+#if defined(__GNUC__)
+# define LOCALE_NAME_SYSTEM_DEFAULT      (const WCHAR []){'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0}
+#elif defined(_MSC_VER)
+# define LOCALE_NAME_SYSTEM_DEFAULT      L"!sys-default-locale"
+#else
+static const WCHAR LOCALE_NAME_SYSTEM_DEFAULT[] = {'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0};
+#endif
+
+#define LOCALE_NAME_USER_DEFAULT    NULL
+
+#define LOCALE_IDEFAULTUNIXCODEPAGE   0x1030 /* Wine extension */
+
+#define NORM_IGNORECASE            0x00000001
+#define NORM_IGNORENONSPACE        0x00000002
+#define NORM_IGNORESYMBOLS         0x00000004
+#define SORT_DIGITSASNUMBERS       0x00000008
+#define LINGUISTIC_IGNORECASE      0x00000010
+#define LINGUISTIC_IGNOREDIACRITIC 0x00000020
+#define SORT_STRINGSORT            0x00001000 /* Take punctuation into account */
+#define NORM_IGNOREKANATYPE        0x00010000
+#define NORM_IGNOREWIDTH           0x00020000
+#define NORM_LINGUISTIC_CASING     0x08000000
+
+#define CP_ACP        0
+#define CP_OEMCP      1
+#define CP_MACCP      2
+#define CP_THREAD_ACP 3
+#define CP_SYMBOL     42
+#define CP_UTF7       65000
+#define CP_UTF8       65001
+
+#define CP_UNIXCP     65010 /* Wine extension */
+
+#define CP_INSTALLED 0x1
+#define CP_SUPPORTED 0x2
+
+#define HIGH_SURROGATE_START 0xd800
+#define HIGH_SURROGATE_END   0xdbff
+#define LOW_SURROGATE_START  0xdc00
+#define LOW_SURROGATE_END    0xdfff
+
+#define IS_HIGH_SURROGATE(ch)       ((ch) >= HIGH_SURROGATE_START && (ch) <= HIGH_SURROGATE_END)
+#define IS_LOW_SURROGATE(ch)        ((ch) >= LOW_SURROGATE_START  && (ch) <= LOW_SURROGATE_END)
+#define IS_SURROGATE_PAIR(high,low) (IS_HIGH_SURROGATE(high) && IS_LOW_SURROGATE(low))
+
+#define WC_DISCARDNS         0x0010
+#define WC_SEPCHARS          0x0020
+#define WC_DEFAULTCHAR       0x0040
+#define WC_ERR_INVALID_CHARS 0x0080
+#define WC_COMPOSITECHECK    0x0200
+#define WC_NO_BEST_FIT_CHARS 0x0400
+
+#define MAP_FOLDCZONE        0x0010
+#define MAP_PRECOMPOSED      0x0020
+#define MAP_COMPOSITE        0x0040
+#define MAP_FOLDDIGITS       0x0080
+#define MAP_EXPAND_LIGATURES 0x2000
+
+
+/* String mapping flags */
+#define LCMAP_LOWERCASE  0x00000100	/* Make lower-case */
+#define LCMAP_UPPERCASE  0x00000200	/* Make upper-case */
+#define LCMAP_SORTKEY    0x00000400	/* Create a sort key */
+#define LCMAP_BYTEREV    0x00000800	/* Reverse the result */
+
+#define LCMAP_HIRAGANA   0x00100000	/* Transform Japanese katakana into hiragana */
+#define LCMAP_KATAKANA   0x00200000	/* Transform Japanese hiragana into katakana */
+#define LCMAP_HALFWIDTH  0x00400000	/* Use single byte chars in output */
+#define LCMAP_FULLWIDTH  0x00800000	/* Use double byte chars in output */
+
+#define LCMAP_LINGUISTIC_CASING   0x01000000 /* Change case by using language context */
+#define LCMAP_SIMPLIFIED_CHINESE  0x02000000 /* Transform Chinese traditional into simplified */
+#define LCMAP_TRADITIONAL_CHINESE 0x04000000 /* Transform Chinese simplified into traditional */
+
+/* Date and time formatting flags */
+#define DATE_SHORTDATE          0x01  /* Short date format */
+#define DATE_LONGDATE           0x02  /* Long date format */
+#define DATE_USE_ALT_CALENDAR   0x04  /* Use an Alternate calendar */
+#define DATE_YEARMONTH          0x08  /* Year/month format */
+#define DATE_LTRREADING         0x10  /* Add LTR reading marks */
+#define DATE_RTLREADING         0x20  /* Add RTL reading marks */
+
+#define TIME_FORCE24HOURFORMAT  0x08  /* Always use 24 hour clock */
+#define TIME_NOTIMEMARKER       0x04  /* show no AM/PM */
+#define TIME_NOSECONDS          0x02  /* show no seconds */
+#define TIME_NOMINUTESORSECONDS 0x01  /* show no minutes either */
+
+/* Unicode char type flags */
+#define	CT_CTYPE1		0x0001	/* usual ctype */
+#define	CT_CTYPE2		0x0002	/* bidirectional layout info */
+#define	CT_CTYPE3		0x0004	/* textprocessing info */
+
+/* Type 1 flags */
+#define C1_UPPER		0x0001
+#define C1_LOWER		0x0002
+#define C1_DIGIT		0x0004
+#define C1_SPACE		0x0008
+#define C1_PUNCT		0x0010
+#define C1_CNTRL		0x0020
+#define C1_BLANK		0x0040
+#define C1_XDIGIT		0x0080
+#define C1_ALPHA		0x0100
+#define C1_DEFINED		0x0200
+
+/* Type 2 flags */
+#define	C2_LEFTTORIGHT		0x0001
+#define	C2_RIGHTTOLEFT		0x0002
+#define	C2_EUROPENUMBER		0x0003
+#define	C2_EUROPESEPARATOR	0x0004
+#define	C2_EUROPETERMINATOR	0x0005
+#define	C2_ARABICNUMBER		0x0006
+#define	C2_COMMONSEPARATOR	0x0007
+#define	C2_BLOCKSEPARATOR	0x0008
+#define	C2_SEGMENTSEPARATOR	0x0009
+#define	C2_WHITESPACE		0x000A
+#define	C2_OTHERNEUTRAL		0x000B
+#define	C2_NOTAPPLICABLE	0x0000
+
+/* Type 3 flags */
+#define	C3_NONSPACING		0x0001
+#define	C3_DIACRITIC		0x0002
+#define	C3_VOWELMARK		0x0004
+#define	C3_SYMBOL		0x0008
+#define	C3_KATAKANA		0x0010
+#define	C3_HIRAGANA		0x0020
+#define	C3_HALFWIDTH		0x0040
+#define	C3_FULLWIDTH		0x0080
+#define	C3_IDEOGRAPH		0x0100
+#define	C3_KASHIDA		0x0200
+#define	C3_LEXICAL		0x0400
+#define	C3_ALPHA		0x8000
+#define	C3_NOTAPPLICABLE	0x0000
+
+/* Code page information.
+ */
+#define MAX_LEADBYTES     12
+#define MAX_DEFAULTCHAR   2
+
+/* Defines for calendar handling */
+#define CAL_NOUSEROVERRIDE     LOCALE_NOUSEROVERRIDE
+#define CAL_USE_CP_ACP         LOCALE_USE_CP_ACP
+#define CAL_RETURN_NUMBER      LOCALE_RETURN_NUMBER
+
+#define CAL_ICALINTVALUE       0x01
+#define CAL_SCALNAME           0x02
+#define CAL_IYEAROFFSETRANGE   0x03
+#define CAL_SERASTRING         0x04
+#define CAL_SSHORTDATE         0x05
+#define CAL_SLONGDATE          0x06
+#define CAL_SDAYNAME1          0x07
+#define CAL_SDAYNAME2          0x08
+#define CAL_SDAYNAME3          0x09
+#define CAL_SDAYNAME4          0x0a
+#define CAL_SDAYNAME5          0x0b
+#define CAL_SDAYNAME6          0x0c
+#define CAL_SDAYNAME7          0x0d
+#define CAL_SABBREVDAYNAME1    0x0e
+#define CAL_SABBREVDAYNAME2    0x0f
+#define CAL_SABBREVDAYNAME3    0x10
+#define CAL_SABBREVDAYNAME4    0x11
+#define CAL_SABBREVDAYNAME5    0x12
+#define CAL_SABBREVDAYNAME6    0x13
+#define CAL_SABBREVDAYNAME7    0x14
+#define CAL_SMONTHNAME1        0x15
+#define CAL_SMONTHNAME2        0x16
+#define CAL_SMONTHNAME3        0x17
+#define CAL_SMONTHNAME4        0x18
+#define CAL_SMONTHNAME5        0x19
+#define CAL_SMONTHNAME6        0x1a
+#define CAL_SMONTHNAME7        0x1b
+#define CAL_SMONTHNAME8        0x1c
+#define CAL_SMONTHNAME9        0x1d
+#define CAL_SMONTHNAME10       0x1e
+#define CAL_SMONTHNAME11       0x1f
+#define CAL_SMONTHNAME12       0x20
+#define CAL_SMONTHNAME13       0x21
+#define CAL_SABBREVMONTHNAME1  0x22
+#define CAL_SABBREVMONTHNAME2  0x23
+#define CAL_SABBREVMONTHNAME3  0x24
+#define CAL_SABBREVMONTHNAME4  0x25
+#define CAL_SABBREVMONTHNAME5  0x26
+#define CAL_SABBREVMONTHNAME6  0x27
+#define CAL_SABBREVMONTHNAME7  0x28
+#define CAL_SABBREVMONTHNAME8  0x29
+#define CAL_SABBREVMONTHNAME9  0x2a
+#define CAL_SABBREVMONTHNAME10 0x2b
+#define CAL_SABBREVMONTHNAME11 0x2c
+#define CAL_SABBREVMONTHNAME12 0x2d
+#define CAL_SABBREVMONTHNAME13 0x2e
+#define CAL_SYEARMONTH         0x2f
+#define CAL_ITWODIGITYEARMAX   0x30
+
+/* Calendar types */
+#define CAL_GREGORIAN              1
+#define CAL_GREGORIAN_US           2
+#define CAL_JAPAN                  3
+#define CAL_TAIWAN                 4
+#define CAL_KOREA                  5
+#define CAL_HIJRI                  6
+#define CAL_THAI                   7
+#define CAL_HEBREW                 8
+#define CAL_GREGORIAN_ME_FRENCH    9
+#define CAL_GREGORIAN_ARABIC       10
+#define CAL_GREGORIAN_XLIT_ENGLISH 11
+#define CAL_GREGORIAN_XLIT_FRENCH  12
+
+/* EnumCalendarInfo Flags */
+#define ENUM_ALL_CALENDARS 0xffffffff /* Enumerate all calendars within a locale */
+
+/* CompareString results */
+#define CSTR_LESS_THAN    1
+#define CSTR_EQUAL        2
+#define CSTR_GREATER_THAN 3
+
+/*
+ * Language Group IDs.
+ * Resources in kernel32 are LGRPID_xxx+0x2000 because low values were used by LOCALE_xxx
+ * This is done because resources in win2k kernel32 / winxp kernel32 are not even
+ * stored the same way.
+ */
+#define LGRPID_WESTERN_EUROPE      0x01 /* Includes US and Africa */
+#define LGRPID_CENTRAL_EUROPE      0x02
+#define LGRPID_BALTIC              0x03
+#define LGRPID_GREEK               0x04
+#define LGRPID_CYRILLIC            0x05
+#define LGRPID_TURKISH             0x06
+#define LGRPID_JAPANESE            0x07
+#define LGRPID_KOREAN              0x08
+#define LGRPID_TRADITIONAL_CHINESE 0x09
+#define LGRPID_SIMPLIFIED_CHINESE  0x0A
+#define LGRPID_THAI                0x0B
+#define LGRPID_HEBREW              0x0C
+#define LGRPID_ARABIC              0x0D
+#define LGRPID_VIETNAMESE          0x0E
+#define LGRPID_INDIC               0x0F
+#define LGRPID_GEORGIAN            0x10
+#define LGRPID_ARMENIAN            0x11
+
+/* IDN defines. */
+#define IDN_ALLOW_UNASSIGNED        0x1
+#define IDN_USE_STD3_ASCII_RULES    0x2
+
+/* Types
+ */
+
+typedef enum _NORM_FORM {
+    NormalizationOther  = 0,
+    NormalizationC      = 0x1,
+    NormalizationD      = 0x2,
+    NormalizationKC     = 0x5,
+    NormalizationKD     = 0x6
+} NORM_FORM;
+
+typedef DWORD CALID;
+typedef DWORD CALTYPE;
+typedef LONG  GEOID;
+typedef DWORD GEOCLASS;
+typedef DWORD GEOTYPE;
+typedef DWORD LCTYPE;
+typedef DWORD LGRPID;
+
+typedef struct
+{
+    UINT MaxCharSize;
+    BYTE DefaultChar[MAX_DEFAULTCHAR];
+    BYTE LeadByte[MAX_LEADBYTES];
+} CPINFO, *LPCPINFO;
+
+typedef struct
+{
+    UINT MaxCharSize;
+    BYTE DefaultChar[MAX_DEFAULTCHAR];
+    BYTE LeadByte[MAX_LEADBYTES];
+    WCHAR UnicodeDefaultChar;
+    UINT CodePage;
+    CHAR CodePageName[MAX_PATH];
+} CPINFOEXA, *LPCPINFOEXA;
+
+typedef struct
+{
+    UINT MaxCharSize;
+    BYTE DefaultChar[MAX_DEFAULTCHAR];
+    BYTE LeadByte[MAX_LEADBYTES];
+    WCHAR UnicodeDefaultChar;
+    UINT CodePage;
+    WCHAR CodePageName[MAX_PATH];
+} CPINFOEXW, *LPCPINFOEXW;
+
+DECL_WINELIB_TYPE_AW(CPINFOEX)
+DECL_WINELIB_TYPE_AW(LPCPINFOEX)
+
+typedef struct _numberfmtA {
+    UINT NumDigits;
+    UINT LeadingZero;
+    UINT Grouping;
+    LPSTR lpDecimalSep;
+    LPSTR lpThousandSep;
+    UINT NegativeOrder;
+} NUMBERFMTA, *LPNUMBERFMTA;
+
+typedef struct _numberfmtW {
+    UINT NumDigits;
+    UINT LeadingZero;
+    UINT Grouping;
+    LPWSTR lpDecimalSep;
+    LPWSTR lpThousandSep;
+    UINT NegativeOrder;
+} NUMBERFMTW, *LPNUMBERFMTW;
+
+DECL_WINELIB_TYPE_AW(NUMBERFMT)
+DECL_WINELIB_TYPE_AW(LPNUMBERFMT)
+
+typedef struct _currencyfmtA
+{
+    UINT NumDigits;
+    UINT LeadingZero;
+    UINT Grouping;
+    LPSTR lpDecimalSep;
+    LPSTR lpThousandSep;
+    UINT NegativeOrder;
+    UINT PositiveOrder;
+    LPSTR lpCurrencySymbol;
+} CURRENCYFMTA, *LPCURRENCYFMTA;
+
+typedef struct _currencyfmtW
+{
+    UINT NumDigits;
+    UINT LeadingZero;
+    UINT Grouping;
+    LPWSTR lpDecimalSep;
+    LPWSTR lpThousandSep;
+    UINT NegativeOrder;
+    UINT PositiveOrder;
+    LPWSTR lpCurrencySymbol;
+} CURRENCYFMTW, *LPCURRENCYFMTW;
+
+DECL_WINELIB_TYPE_AW(CURRENCYFMT)
+DECL_WINELIB_TYPE_AW(LPCURRENCYFMT)
+
+typedef struct _nlsversioninfo {
+    DWORD dwNLSVersionInfoSize;
+    DWORD dwNLSVersion;
+    DWORD dwDefinedVersion;
+} NLSVERSIONINFO, *LPNLSVERSIONINFO;
+
+typedef struct _nlsversioninfoex {
+    DWORD dwNLSVersionInfoSize;
+    DWORD dwNLSVersion;
+    DWORD dwDefinedVersion;
+    DWORD dwEffectiveId;
+    GUID  guidCustomVersion;
+} NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX;
+
+/* Define a bunch of callback types */
+
+#if defined(STRICT)
+typedef BOOL    (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
+typedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXA)(LPSTR,CALID);
+typedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXW)(LPWSTR,CALID);
+typedef BOOL    (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR);
+typedef BOOL    (CALLBACK *DATEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK *DATEFMT_ENUMPROCW)(LPWSTR);
+typedef BOOL    (CALLBACK *DATEFMT_ENUMPROCEXA)(LPSTR,CALID);
+typedef BOOL    (CALLBACK *DATEFMT_ENUMPROCEXW)(LPWSTR,CALID);
+typedef BOOL    (CALLBACK *GEO_ENUMPROC)(GEOID);
+typedef BOOL    (CALLBACK *LANGGROUPLOCALE_ENUMPROCA)(LGRPID,LCID,LPSTR,LONG_PTR);
+typedef BOOL    (CALLBACK *LANGGROUPLOCALE_ENUMPROCW)(LGRPID,LCID,LPWSTR,LONG_PTR);
+typedef BOOL    (CALLBACK *LANGUAGEGROUP_ENUMPROCA)(LGRPID,LPSTR,LPSTR,DWORD,LONG_PTR);
+typedef BOOL    (CALLBACK *LANGUAGEGROUP_ENUMPROCW)(LGRPID,LPWSTR,LPWSTR,DWORD,LONG_PTR);
+typedef BOOL    (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
+typedef BOOL    (CALLBACK *LOCALE_ENUMPROCEX)(LPWSTR, DWORD, LPARAM);
+typedef BOOL    (CALLBACK *TIMEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL    (CALLBACK *TIMEFMT_ENUMPROCW)(LPWSTR);
+typedef BOOL    (CALLBACK *UILANGUAGE_ENUMPROCA)(LPSTR,LONG_PTR);
+typedef BOOL    (CALLBACK *UILANGUAGE_ENUMPROCW)(LPWSTR,LONG_PTR);
+#else
+typedef FARPROC CALINFO_ENUMPROCA;
+typedef FARPROC CALINFO_ENUMPROCW;
+typedef FARPROC CALINFO_ENUMPROCEXA;
+typedef FARPROC CALINFO_ENUMPROCEXW;
+typedef FARPROC CODEPAGE_ENUMPROCA;
+typedef FARPROC CODEPAGE_ENUMPROCW;
+typedef FARPROC DATEFMT_ENUMPROCA;
+typedef FARPROC DATEFMT_ENUMPROCW;
+typedef FARPROC DATEFMT_ENUMPROCEXA;
+typedef FARPROC DATEFMT_ENUMPROCEXW;
+typedef FARPROC GEO_ENUMPROC;
+typedef FARPROC LANGGROUPLOCALE_ENUMPROCA;
+typedef FARPROC LANGGROUPLOCALE_ENUMPROCW;
+typedef FARPROC LANGUAGEGROUP_ENUMPROCA;
+typedef FARPROC LANGUAGEGROUP_ENUMPROCW;
+typedef FARPROC LOCALE_ENUMPROCA;
+typedef FARPROC LOCALE_ENUMPROCW;
+typedef FARPROC TIMEFMT_ENUMPROCA;
+typedef FARPROC TIMEFMT_ENUMPROCW;
+typedef FARPROC UILANGUAGE_ENUMPROCA;
+typedef FARPROC UILANGUAGE_ENUMPROCW;
+#endif /* STRICT */
+
+DECL_WINELIB_TYPE_AW(CALINFO_ENUMPROC)
+DECL_WINELIB_TYPE_AW(CALINFO_ENUMPROCEX)
+DECL_WINELIB_TYPE_AW(CODEPAGE_ENUMPROC)
+DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)
+DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROCEX)
+DECL_WINELIB_TYPE_AW(LANGGROUPLOCALE_ENUMPROC)
+DECL_WINELIB_TYPE_AW(LANGUAGEGROUP_ENUMPROC)
+DECL_WINELIB_TYPE_AW(LOCALE_ENUMPROC)
+DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)
+DECL_WINELIB_TYPE_AW(UILANGUAGE_ENUMPROC)
+
+/* Geographic Information types */
+enum SYSGEOTYPE
+{
+    GEO_NATION = 1,
+    GEO_LATITUDE,
+    GEO_LONGITUDE,
+    GEO_ISO2,
+    GEO_ISO3,
+    GEO_RFC1766,
+    GEO_LCID,
+    GEO_FRIENDLYNAME,
+    GEO_OFFICIALNAME,
+    GEO_TIMEZONES,
+    GEO_OFFICIALLANGUAGES
+};
+
+enum SYSGEOCLASS
+{
+    GEOCLASS_REGION = 14,
+    GEOCLASS_NATION = 16
+};
+
+#define GEOID_NOT_AVAILABLE (-1)
+
+
+/* NLS Functions.
+ */
+
+WINBASEAPI INT         WINAPI CompareStringA(LCID,DWORD,LPCSTR,INT,LPCSTR,INT);
+WINBASEAPI INT         WINAPI CompareStringW(LCID,DWORD,LPCWSTR,INT,LPCWSTR,INT);
+#define                       CompareString WINELIB_NAME_AW(CompareString)
+WINBASEAPI INT         WINAPI CompareStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPCWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM);
+WINBASEAPI LCID        WINAPI ConvertDefaultLocale(LCID);
+WINBASEAPI BOOL        WINAPI EnumCalendarInfoA(CALINFO_ENUMPROCA,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL        WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW,LCID,CALID,CALTYPE);
+#define                       EnumCalendarInfo WINELIB_NAME_AW(EnumCalendarInfo)
+WINBASEAPI BOOL        WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL        WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE);
+#define                       EnumCalendarInfoEx WINELIB_NAME_AW(EnumCalendarInfoEx)
+WINBASEAPI BOOL        WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD);
+WINBASEAPI BOOL        WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);
+#define                       EnumDateFormats WINELIB_NAME_AW(EnumDateFormats)
+WINBASEAPI BOOL        WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD);
+WINBASEAPI BOOL        WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD);
+#define                       EnumDateFormatsEx WINELIB_NAME_AW(EnumDateFormatsEx)
+WINBASEAPI BOOL        WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);
+WINBASEAPI BOOL        WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);
+#define                       EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)
+WINBASEAPI BOOL        WINAPI EnumSystemGeoID(GEOCLASS,GEOID,GEO_ENUMPROC);
+WINBASEAPI BOOL        WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);
+WINBASEAPI BOOL        WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD);
+#define                       EnumSystemLocales WINELIB_NAME_AW(EnumSystemLocales)
+WINBASEAPI BOOL        WINAPI EnumSystemLocalesEx(LOCALE_ENUMPROCEX,DWORD,LPARAM,LPVOID);
+WINBASEAPI BOOL        WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA,DWORD,LONG_PTR);
+WINBASEAPI BOOL        WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW,DWORD,LONG_PTR);
+#define                       EnumSystemLanguageGroups WINELIB_NAME_AW(EnumSystemLanguageGroups)
+WINBASEAPI BOOL        WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA,LGRPID,DWORD,LONG_PTR);
+WINBASEAPI BOOL        WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW,LGRPID,DWORD,LONG_PTR);
+#define                       EnumLanguageGroupLocales WINELIB_NAME_AW(EnumLanguageGroupLocales)
+WINBASEAPI BOOL        WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA,LCID,DWORD);
+WINBASEAPI BOOL        WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW,LCID,DWORD);
+#define                       EnumTimeFormats WINELIB_NAME_AW(EnumTimeFormats)
+WINBASEAPI BOOL        WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA,DWORD,LONG_PTR);
+WINBASEAPI BOOL        WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW,DWORD,LONG_PTR);
+#define                       EnumUILanguages WINELIB_NAME_AW(EnumUILanguages)
+WINBASEAPI INT         WINAPI FoldStringA(DWORD,LPCSTR,INT,LPSTR,INT);
+WINBASEAPI INT         WINAPI FoldStringW(DWORD,LPCWSTR,INT,LPWSTR,INT);
+#define                       FoldString WINELIB_NAME_AW(FoldString)
+WINBASEAPI UINT        WINAPI GetACP(void);
+WINBASEAPI BOOL        WINAPI GetCPInfo(UINT,LPCPINFO);
+WINBASEAPI BOOL        WINAPI GetCPInfoExA(UINT,DWORD,LPCPINFOEXA);
+WINBASEAPI BOOL        WINAPI GetCPInfoExW(UINT,DWORD,LPCPINFOEXW);
+#define                       GetCPInfoEx WINELIB_NAME_AW(GetCPInfoEx)
+WINBASEAPI INT         WINAPI GetCalendarInfoA(LCID,DWORD,DWORD,LPSTR,INT,LPDWORD);
+WINBASEAPI INT         WINAPI GetCalendarInfoW(LCID,DWORD,DWORD,LPWSTR,INT,LPDWORD);
+#define                       GetCalendarInfo WINELIB_NAME_AW(GetCalendarInfo)
+WINBASEAPI INT         WINAPI GetCurrencyFormatA(LCID,DWORD,LPCSTR,const CURRENCYFMTA*,LPSTR,INT);
+WINBASEAPI INT         WINAPI GetCurrencyFormatW(LCID,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,INT);
+#define                       GetCurrencyFormat WINELIB_NAME_AW(GetCurrencyFormat)
+WINBASEAPI INT         WINAPI GetDateFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT);
+WINBASEAPI INT         WINAPI GetDateFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);
+#define                       GetDateFormat WINELIB_NAME_AW(GetDateFormat)
+WINBASEAPI INT         WINAPI GetGeoInfoA(GEOID,GEOTYPE,LPSTR,INT,LANGID);
+WINBASEAPI INT         WINAPI GetGeoInfoW(GEOID,GEOTYPE,LPWSTR,INT,LANGID);
+#define                       GetGeoInfo WINELIB_NAME_AW(GetGeoInfo)
+WINBASEAPI INT         WINAPI GetLocaleInfoA(LCID,LCTYPE,LPSTR,INT);
+WINBASEAPI INT         WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,INT);
+#define                       GetLocaleInfo WINELIB_NAME_AW(GetLocaleInfo)
+WINBASEAPI INT         WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,INT);
+WINBASEAPI INT         WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT);
+#define                       GetNumberFormat WINELIB_NAME_AW(GetNumberFormat)
+WINBASEAPI UINT        WINAPI GetOEMCP(void);
+WINBASEAPI BOOL        WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,INT,LPWORD);
+WINBASEAPI BOOL        WINAPI GetStringTypeW(DWORD,LPCWSTR,INT,LPWORD);
+WINBASEAPI BOOL        WINAPI GetStringTypeExA(LCID,DWORD,LPCSTR,INT,LPWORD);
+WINBASEAPI BOOL        WINAPI GetStringTypeExW(LCID,DWORD,LPCWSTR,INT,LPWORD);
+#define                       GetStringTypeEx WINELIB_NAME_AW(GetStringTypeEx)
+WINBASEAPI LANGID      WINAPI GetSystemDefaultLangID(void);
+WINBASEAPI LCID        WINAPI GetSystemDefaultLCID(void);
+WINBASEAPI LANGID      WINAPI GetSystemDefaultUILanguage(void);
+WINBASEAPI LCID        WINAPI GetThreadLocale(void);
+WINBASEAPI INT         WINAPI GetTimeFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT);
+WINBASEAPI INT         WINAPI GetTimeFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);
+#define                       GetTimeFormat WINELIB_NAME_AW(GetTimeFormat)
+WINBASEAPI LANGID      WINAPI GetUserDefaultLangID(void);
+WINBASEAPI LCID        WINAPI GetUserDefaultLCID(void);
+WINBASEAPI INT         WINAPI GetUserDefaultLocaleName(LPWSTR,int);
+WINBASEAPI LANGID      WINAPI GetUserDefaultUILanguage(void);
+WINBASEAPI GEOID       WINAPI GetUserGeoID(GEOCLASS);
+WINNORMALIZEAPI INT    WINAPI IdnToAscii(DWORD,LPCWSTR,INT,LPWSTR,INT);
+WINNORMALIZEAPI INT    WINAPI IdnToNameprepUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT);
+WINNORMALIZEAPI INT    WINAPI IdnToUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT);
+WINBASEAPI BOOL        WINAPI IsDBCSLeadByte(BYTE);
+WINBASEAPI BOOL        WINAPI IsDBCSLeadByteEx(UINT,BYTE);
+WINNORMALIZEAPI BOOL   WINAPI IsNormalizedString(NORM_FORM,LPCWSTR,INT);
+WINBASEAPI BOOL        WINAPI IsValidCodePage(UINT);
+WINBASEAPI BOOL        WINAPI IsValidLocale(LCID,DWORD);
+WINBASEAPI BOOL        WINAPI IsValidLanguageGroup(LGRPID,DWORD);
+WINBASEAPI INT         WINAPI LCIDToLocaleName(LCID,LPWSTR,INT,DWORD);
+WINBASEAPI INT         WINAPI LCMapStringA(LCID,DWORD,LPCSTR,INT,LPSTR,INT);
+WINBASEAPI INT         WINAPI LCMapStringW(LCID,DWORD,LPCWSTR,INT,LPWSTR,INT);
+#define                       LCMapString WINELIB_NAME_AW(LCMapString)
+WINBASEAPI INT         WINAPI LCMapStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM);
+WINBASEAPI LCID        WINAPI LocaleNameToLCID(LPCWSTR,DWORD);
+WINBASEAPI INT         WINAPI MultiByteToWideChar(UINT,DWORD,LPCSTR,INT,LPWSTR,INT);
+WINNORMALIZEAPI INT    WINAPI NormalizeString(NORM_FORM,LPCWSTR,INT,LPWSTR,INT);
+WINBASEAPI INT         WINAPI SetCalendarInfoA(LCID,CALID,CALTYPE,LPCSTR);
+WINBASEAPI INT         WINAPI SetCalendarInfoW(LCID,CALID,CALTYPE,LPCWSTR);
+#define                       SetCalendarInfo WINELIB_NAME_AW(SetCalendarInfo)
+WINBASEAPI BOOL        WINAPI SetLocaleInfoA(LCID,LCTYPE,LPCSTR);
+WINBASEAPI BOOL        WINAPI SetLocaleInfoW(LCID,LCTYPE,LPCWSTR);
+#define                       SetLocaleInfo WINELIB_NAME_AW(SetLocaleInfo)
+WINBASEAPI BOOL        WINAPI SetThreadLocale(LCID);
+WINBASEAPI BOOL        WINAPI SetUserGeoID(GEOID);
+WINBASEAPI INT         WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,INT,LPSTR,INT,LPCSTR,LPBOOL);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !NONLS */
+#endif  /* __WINE_WINNLS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h
new file mode 100644
index 0000000..da65cd8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2005 Diego Petteno
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINNLS32_
+#define _WINNLS32_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UINT        WINAPI WINNLSGetIMEHotkey(HWND);
+BOOL        WINAPI WINNLSEnableIME(HWND, BOOL);
+BOOL        WINAPI WINNLSGetEnableStatus(HWND);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _WINNLS32_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h
new file mode 100644
index 0000000..6778125
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h
@@ -0,0 +1,5525 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINNT_
+#define _WINNT_
+
+#include <basetsd.h>
+#include <guiddef.h>
+
+#ifndef RC_INVOKED
+#include <ctype.h>
+#include <stddef.h>
+#include <string.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _NTSYSTEM_
+#define NTSYSAPI
+#else
+#define NTSYSAPI DECLSPEC_IMPORT
+#endif
+
+#define NTAPI __stdcall
+
+#ifndef MIDL_PASS
+# if defined(_MSC_VER)
+#  define DECLSPEC_IMPORT __declspec(dllimport)
+# elif defined(__MINGW32__) || defined(__CYGWIN__)
+#  define DECLSPEC_IMPORT __attribute__((dllimport))
+# else
+#  define DECLSPEC_IMPORT DECLSPEC_HIDDEN
+# endif
+#else
+# define DECLSPEC_IMPORT
+#endif
+
+#ifndef DECLSPEC_NORETURN
+# if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
+#  define DECLSPEC_NORETURN __declspec(noreturn)
+# elif defined(__GNUC__)
+#  define DECLSPEC_NORETURN __attribute__((noreturn))
+# else
+#  define DECLSPEC_NORETURN
+# endif
+#endif
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+#  define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+#  define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+#ifndef DECLSPEC_CACHEALIGN
+# define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128)
+#endif
+
+#ifndef DECLSPEC_UUID
+# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus)
+#  define DECLSPEC_UUID(x) __declspec(uuid(x))
+# else
+#  define DECLSPEC_UUID(x)
+# endif
+#endif
+
+#ifndef DECLSPEC_NOVTABLE
+# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
+#  define DECLSPEC_NOVTABLE __declspec(novtable)
+# else
+#  define DECLSPEC_NOVTABLE
+# endif
+#endif
+
+#ifndef DECLSPEC_SELECTANY
+#if defined(_MSC_VER) && (_MSC_VER >= 1100)
+#define DECLSPEC_SELECTANY __declspec(selectany)
+#else
+#define DECLSPEC_SELECTANY
+#endif
+#endif
+
+#ifndef NOP_FUNCTION
+# if defined(_MSC_VER) && (_MSC_VER >= 1210)
+#  define NOP_FUNCTION __noop
+# else
+#  define NOP_FUNCTION (void)0
+# endif
+#endif
+
+#ifndef DECLSPEC_ADDRSAFE
+# if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
+#  define DECLSPEC_ADDRSAFE __declspec(address_safe)
+# else
+#  define DECLSPEC_ADDRSAFE
+# endif
+#endif
+
+#ifndef FORCEINLINE
+# if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#  define FORCEINLINE __forceinline
+# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+#  define FORCEINLINE inline __attribute__((always_inline))
+# else
+#  define FORCEINLINE inline
+# endif
+#endif
+
+#ifndef DECLSPEC_DEPRECATED
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+#  define DECLSPEC_DEPRECATED __declspec(deprecated)
+#  define DEPRECATE_SUPPORTED
+# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+#  define DECLSPEC_DEPRECATED __attribute__((deprecated))
+#  define DEPRECATE_SUPPORTED
+# else
+#  define DECLSPEC_DEPRECATED
+#  undef  DEPRECATE_SUPPORTED
+# endif
+#endif
+
+/* a couple of useful Wine extensions */
+
+#ifdef _MSC_VER
+# define DECLSPEC_EXPORT __declspec(dllexport)
+#elif defined(__MINGW32__)
+# define DECLSPEC_EXPORT __attribute__((dllexport))
+#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define DECLSPEC_EXPORT __attribute__((visibility ("default")))
+#else
+# define DECLSPEC_EXPORT
+#endif
+
+#if defined(__MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define DECLSPEC_HIDDEN
+#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
+#else
+# define DECLSPEC_HIDDEN
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+#define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
+#else
+#define __WINE_ALLOC_SIZE(x)
+#endif
+
+/* Anonymous union/struct handling */
+
+#ifndef NONAMELESSSTRUCT
+# ifdef __GNUC__
+   /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */
+#  if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))
+#   define NONAMELESSSTRUCT
+#  endif
+# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+#  define NONAMELESSSTRUCT
+# endif
+#endif  /* NONAMELESSSTRUCT */
+
+#ifndef NONAMELESSUNION
+# ifdef __GNUC__
+   /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */
+#  if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))
+#   define NONAMELESSUNION
+#  endif
+# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+#  define NONAMELESSUNION
+# endif
+#endif  /* NONAMELESSUNION */
+
+#undef DUMMYSTRUCTNAME
+#undef DUMMYSTRUCTNAME1
+#undef DUMMYSTRUCTNAME2
+#undef DUMMYSTRUCTNAME3
+#undef DUMMYSTRUCTNAME4
+#undef DUMMYSTRUCTNAME5
+#ifndef NONAMELESSSTRUCT
+#define DUMMYSTRUCTNAME
+#define DUMMYSTRUCTNAME1
+#define DUMMYSTRUCTNAME2
+#define DUMMYSTRUCTNAME3
+#define DUMMYSTRUCTNAME4
+#define DUMMYSTRUCTNAME5
+#else /* !defined(NONAMELESSSTRUCT) */
+#define DUMMYSTRUCTNAME   s
+#define DUMMYSTRUCTNAME1  s1
+#define DUMMYSTRUCTNAME2  s2
+#define DUMMYSTRUCTNAME3  s3
+#define DUMMYSTRUCTNAME4  s4
+#define DUMMYSTRUCTNAME5  s5
+#endif /* !defined(NONAMELESSSTRUCT) */
+
+#undef DUMMYUNIONNAME
+#undef DUMMYUNIONNAME1
+#undef DUMMYUNIONNAME2
+#undef DUMMYUNIONNAME3
+#undef DUMMYUNIONNAME4
+#undef DUMMYUNIONNAME5
+#undef DUMMYUNIONNAME6
+#undef DUMMYUNIONNAME7
+#undef DUMMYUNIONNAME8
+#ifndef NONAMELESSUNION
+#define DUMMYUNIONNAME
+#define DUMMYUNIONNAME1
+#define DUMMYUNIONNAME2
+#define DUMMYUNIONNAME3
+#define DUMMYUNIONNAME4
+#define DUMMYUNIONNAME5
+#define DUMMYUNIONNAME6
+#define DUMMYUNIONNAME7
+#define DUMMYUNIONNAME8
+#else /* !defined(NONAMELESSUNION) */
+#define DUMMYUNIONNAME   u
+#define DUMMYUNIONNAME1  u1
+#define DUMMYUNIONNAME2  u2
+#define DUMMYUNIONNAME3  u3
+#define DUMMYUNIONNAME4  u4
+#define DUMMYUNIONNAME5  u5
+#define DUMMYUNIONNAME6  u6
+#define DUMMYUNIONNAME7  u7
+#define DUMMYUNIONNAME8  u8
+#endif /* !defined(NONAMELESSUNION) */
+
+#undef __C89_NAMELESS
+#undef __C89_NAMELESSSTRUCTNAME
+#undef __C89_NAMELESSSTRUCTNAME1
+#undef __C89_NAMELESSSTRUCTNAME2
+#undef __C89_NAMELESSSTRUCTNAME3
+#undef __C89_NAMELESSSTRUCTNAME4
+#undef __C89_NAMELESSSTRUCTNAME5
+#undef __C89_NAMELESSUNIONNAME
+#undef __C89_NAMELESSUNIONNAME1
+#undef __C89_NAMELESSUNIONNAME2
+#undef __C89_NAMELESSUNIONNAME3
+#undef __C89_NAMELESSUNIONNAME4
+#undef __C89_NAMELESSUNIONNAME5
+#undef __C89_NAMELESSUNIONNAME6
+#undef __C89_NAMELESSUNIONNAME7
+#undef __C89_NAMELESSUNIONNAME8
+
+#if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION)
+# ifdef __GNUC__
+   /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
+#  if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
+#   define __C89_NAMELESS __extension__
+#  endif
+# elif defined(_MSC_VER)
+#  define __C89_NAMELESS
+# endif
+#endif
+
+#ifdef __C89_NAMELESS
+#  define __C89_NAMELESSSTRUCTNAME
+#  define __C89_NAMELESSSTRUCTNAME1
+#  define __C89_NAMELESSSTRUCTNAME2
+#  define __C89_NAMELESSSTRUCTNAME3
+#  define __C89_NAMELESSSTRUCTNAME4
+#  define __C89_NAMELESSSTRUCTNAME5
+#  define __C89_NAMELESSUNIONNAME
+#  define __C89_NAMELESSUNIONNAME1
+#  define __C89_NAMELESSUNIONNAME2
+#  define __C89_NAMELESSUNIONNAME3
+#  define __C89_NAMELESSUNIONNAME4
+#  define __C89_NAMELESSUNIONNAME5
+#  define __C89_NAMELESSUNIONNAME6
+#  define __C89_NAMELESSUNIONNAME7
+#  define __C89_NAMELESSUNIONNAME8
+#else
+#  define __C89_NAMELESS
+#  define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
+#  define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
+#  define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
+#  define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
+#  define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
+#  define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
+#  define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
+#  define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
+#  define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
+#  define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
+#  define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
+#  define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
+#  define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
+#  define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
+#  define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
+#endif
+
+/* C99 restrict support */
+
+#if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
+# if defined(_MSC_VER) && defined(_M_MRX000)
+#  define RESTRICTED_POINTER __restrict
+# elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
+#  define RESTRICTED_POINTER __restrict
+# else
+#  define RESTRICTED_POINTER
+# endif
+#else
+# define RESTRICTED_POINTER
+#endif
+
+/* C99 unaligned support */
+
+#ifndef UNALIGNED
+#if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))
+# define UNALIGNED __unaligned
+# ifdef _WIN64
+#  define UNALIGNED64 __unaligned
+# else
+#  define UNALIGNED64
+# endif
+#else
+# define UNALIGNED
+# define UNALIGNED64
+#endif
+#endif
+
+/* Alignment macros */
+
+#if defined(_WIN64) || (defined(_MSC_VER) && defined(_M_ALPHA)) || defined(__alpha__)
+#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
+#define MEMORY_ALLOCATION_ALIGNMENT 16
+#else
+#define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
+#define MEMORY_ALLOCATION_ALIGNMENT 8
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
+# define TYPE_ALIGNMENT(t) __alignof(t)
+#elif defined(__GNUC__)
+# define TYPE_ALIGNMENT(t) __alignof__(t)
+#else
+# define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
+#endif
+
+#ifdef _WIN64
+# define PROBE_ALIGNMENT(_s) \
+    (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \
+    TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
+# define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
+#else
+# define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
+#endif
+
+/* Compile time assertion */
+
+#if defined(_MSC_VER)
+# define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
+#else
+# define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
+#endif
+
+/* Eliminate Microsoft C/C++ compiler warning 4715 */
+#if defined(_MSC_VER) && (_MSC_VER > 1200)
+# define DEFAULT_UNREACHABLE default: __assume(0)
+#elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
+# define DEFAULT_UNREACHABLE default: __builtin_unreachable()
+#else
+# define DEFAULT_UNREACHABLE default:
+#endif
+
+/* Error Masks */
+#define APPLICATION_ERROR_MASK       0x20000000
+#define ERROR_SEVERITY_SUCCESS       0x00000000
+#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
+#define ERROR_SEVERITY_WARNING       0x80000000
+#define ERROR_SEVERITY_ERROR         0xC0000000
+
+#ifdef __cplusplus
+#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
+extern "C++" { \
+    inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
+    inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
+    inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
+    inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
+    inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
+    inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
+    inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
+}
+#else
+#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
+#endif
+
+/* Microsoft's macros for declaring functions */
+
+#ifdef __cplusplus
+# define EXTERN_C    extern "C"
+#else
+# define EXTERN_C    extern
+#endif
+
+#define STDMETHODCALLTYPE       __stdcall
+#define STDMETHODVCALLTYPE      __cdecl
+#define STDAPICALLTYPE          __stdcall
+#define STDAPIVCALLTYPE         __cdecl
+
+#define STDAPI                  EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(type)           EXTERN_C type STDAPICALLTYPE
+#define STDMETHODIMP            HRESULT STDMETHODCALLTYPE
+#define STDMETHODIMP_(type)     type STDMETHODCALLTYPE
+#define STDAPIV                 EXTERN_C HRESULT STDAPIVCALLTYPE
+#define STDAPIV_(type)          EXTERN_C type STDAPIVCALLTYPE
+#define STDMETHODIMPV           HRESULT STDMETHODVCALLTYPE
+#define STDMETHODIMPV_(type)    type STDMETHODVCALLTYPE
+
+/* Define the basic types */
+#ifndef VOID
+#define VOID void
+#endif
+typedef VOID           *PVOID;
+typedef VOID           *PVOID64;
+typedef BYTE            BOOLEAN,    *PBOOLEAN;
+typedef char            CHAR,       *PCHAR;
+typedef short           SHORT,      *PSHORT;
+#ifdef _MSC_VER
+typedef long            LONG,       *PLONG;
+#else
+typedef int             LONG,       *PLONG;
+#endif
+
+/* Some systems might have wchar_t, but we really need 16 bit characters */
+#ifdef WINE_UNICODE_NATIVE
+typedef wchar_t         WCHAR,      *PWCHAR;
+#else
+typedef unsigned short  WCHAR,      *PWCHAR;
+#endif
+
+typedef ULONG           UCSCHAR;
+#define MIN_UCSCHAR                 (0)
+#define MAX_UCSCHAR                 (0x0010ffff)
+#define UCSCHAR_INVALID_CHARACTER   (0xffffffff)
+
+/* 'Extended/Wide' numerical types */
+#ifndef _ULONGLONG_
+# define _ULONGLONG_
+# ifdef _MSC_VER
+typedef signed __int64   LONGLONG,  *PLONGLONG;
+typedef unsigned __int64 ULONGLONG, *PULONGLONG;
+# else
+typedef signed __int64   DECLSPEC_ALIGN(8) LONGLONG,   *PLONGLONG;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONGLONG,  *PULONGLONG;
+# endif
+#endif
+
+#ifndef _DWORDLONG_
+# define _DWORDLONG_
+# ifdef _MSC_VER
+typedef ULONGLONG DWORDLONG, *PDWORDLONG;
+# else
+typedef ULONGLONG   DECLSPEC_ALIGN(8) DWORDLONG,   *PDWORDLONG;
+# endif
+#endif
+
+/* ANSI string types */
+typedef CHAR           *PCH,        *LPCH,      *PNZCH;
+typedef const CHAR     *PCCH,       *LPCCH,     *PCNZCH;
+typedef CHAR           *PSTR,       *LPSTR,     *NPSTR;
+typedef const CHAR     *PCSTR,      *LPCSTR;
+typedef CHAR           *PZZSTR;
+typedef const CHAR     *PCZZSTR;
+
+/* Unicode string types */
+typedef const WCHAR    *PCWCHAR,    *LPCUWCHAR, *PCUWCHAR;
+typedef WCHAR          *PWCH,       *LPWCH;
+typedef const WCHAR    *PCWCH,      *LPCWCH;
+typedef WCHAR          *PNZWCH,     *PUNZWCH;
+typedef const WCHAR    *PCNZWCH,    *PCUNZWCH;
+typedef WCHAR          *PWSTR,      *LPWSTR,    *NWPSTR;
+typedef const WCHAR    *PCWSTR,     *LPCWSTR;
+typedef WCHAR          *PZZWSTR,    *PUZZWSTR;
+typedef const WCHAR    *PCZZWSTR,   *PCUZZWSTR;
+typedef PWSTR          *PZPWSTR;
+typedef PCWSTR         *PZPCWSTR;
+
+/* Neutral character and string types */
+/* These are only defined for Winelib, i.e. _not_ defined for
+ * the emulator. The reason is they depend on the UNICODE
+ * macro which only exists in the user's code.
+ */
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+# ifndef _TCHAR_DEFINED
+typedef WCHAR           TCHAR,      *PTCHAR;
+# define _TCHAR_DEFINED
+#endif
+typedef LPWCH           PTCH,        LPTCH;
+typedef LPCWCH          PCTCH,       LPCTCH;
+typedef LPWSTR          PTSTR,       LPTSTR;
+typedef LPCWSTR         PCTSTR,      LPCTSTR;
+typedef LPWSTR          PUTSTR,      LPUTSTR;
+typedef LPCWSTR         PCUTSTR,     LPCUTSTR;
+typedef PNZWCH          PNZTCH;
+typedef PUNZWCH         PUNZTCH;
+typedef PCNZWCH         PCNZTCH;
+typedef PCUNZWCH        PCUNZTCH;
+typedef PZZWSTR         PZZTSTR;
+typedef PCZZWSTR        PCZZTSTR;
+typedef PUZZWSTR        PUZZTSTR;
+typedef PCUZZWSTR       PCUZZTSTR;
+# else  /* UNICODE */
+# ifndef _TCHAR_DEFINED
+typedef CHAR            TCHAR,      *PTCHAR;
+# define _TCHAR_DEFINED
+# endif
+typedef LPCH            PTCH,        LPTCH;
+typedef LPCCH           PCTCH,       LPCTCH;
+typedef LPSTR           PTSTR,       LPTSTR;
+typedef LPCSTR          PCTSTR,      LPCTSTR;
+typedef PNZCH           PNZTCH,      PUNZTCH;
+typedef PCNZCH          PCNZTCH,     PCUNZTCH;
+typedef PZZSTR          PZZTSTR,     PUZZTSTR;
+typedef PCZZSTR         PCZZTSTR,    PCUZZTSTR;
+# endif /* UNICODE */
+#endif   /* WINE_NO_UNICODE_MACROS */
+
+/* UCS string types */
+typedef UCSCHAR         *PUCSCHAR,  *PUUCSCHAR;
+typedef const UCSCHAR   *PCUCSCHAR, *PCUUCSCHAR;
+typedef UCSCHAR         *PUCSSTR,   *PUUCSSTR;
+typedef const UCSCHAR   *PCUCSSTR,  *PCUUCSSTR;
+
+/* Misc common WIN32 types */
+typedef char            CCHAR;
+typedef DWORD           LCID,       *PLCID;
+typedef WORD            LANGID;
+typedef DWORD		EXECUTION_STATE;
+#ifndef _HRESULT_DEFINED
+#define _HRESULT_DEFINED
+typedef LONG            HRESULT;
+#endif
+
+/* Handle type */
+
+typedef void *HANDLE;
+typedef HANDLE *PHANDLE, *LPHANDLE;
+
+#ifdef STRICT
+#define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a
+#else /*STRICT*/
+#define DECLARE_HANDLE(a) typedef HANDLE a
+#endif /*STRICT*/
+
+typedef BYTE  FCHAR;
+typedef WORD  FSHORT;
+typedef DWORD FLONG;
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+#  define __MSABI_LONG(x)         x ## l
+# else
+#  define __MSABI_LONG(x)         x
+# endif
+#endif
+
+/* Defines */
+
+#ifndef WIN32_NO_STATUS
+
+#define STATUS_WAIT_0                    ((DWORD) 0x00000000)
+#define STATUS_ABANDONED_WAIT_0          ((DWORD) 0x00000080)
+#define STATUS_USER_APC                  ((DWORD) 0x000000C0)
+#define STATUS_TIMEOUT                   ((DWORD) 0x00000102)
+#define STATUS_PENDING                   ((DWORD) 0x00000103)
+#define STATUS_SEGMENT_NOTIFICATION      ((DWORD) 0x40000005)
+#define STATUS_GUARD_PAGE_VIOLATION      ((DWORD) 0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT     ((DWORD) 0x80000002)
+#define STATUS_BREAKPOINT                ((DWORD) 0x80000003)
+#define STATUS_SINGLE_STEP               ((DWORD) 0x80000004)
+#define STATUS_ACCESS_VIOLATION          ((DWORD) 0xC0000005)
+#define STATUS_IN_PAGE_ERROR             ((DWORD) 0xC0000006)
+#define STATUS_INVALID_HANDLE            ((DWORD) 0xC0000008)
+#define STATUS_NO_MEMORY                 ((DWORD) 0xC0000017)
+#define STATUS_ILLEGAL_INSTRUCTION       ((DWORD) 0xC000001D)
+#define STATUS_NONCONTINUABLE_EXCEPTION  ((DWORD) 0xC0000025)
+#define STATUS_INVALID_DISPOSITION       ((DWORD) 0xC0000026)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((DWORD) 0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND    ((DWORD) 0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((DWORD) 0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT      ((DWORD) 0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION   ((DWORD) 0xC0000090)
+#define STATUS_FLOAT_OVERFLOW            ((DWORD) 0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK         ((DWORD) 0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW           ((DWORD) 0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((DWORD) 0xC0000094)
+#define STATUS_INTEGER_OVERFLOW          ((DWORD) 0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION    ((DWORD) 0xC0000096)
+#define STATUS_STACK_OVERFLOW            ((DWORD) 0xC00000FD)
+#define STATUS_CONTROL_C_EXIT            ((DWORD) 0xC000013A)
+#define STATUS_FLOAT_MULTIPLE_FAULTS     ((DWORD) 0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS      ((DWORD) 0xC00002B5)
+#define STATUS_REG_NAT_CONSUMPTION       ((DWORD) 0xC00002C9)
+#define STATUS_SXS_EARLY_DEACTIVATION    ((DWORD) 0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION  ((DWORD) 0xC0150010)
+
+/* status values for ContinueDebugEvent */
+#define DBG_EXCEPTION_HANDLED       ((DWORD) 0x00010001)
+#define DBG_CONTINUE                ((DWORD) 0x00010002)
+#define DBG_TERMINATE_THREAD        ((DWORD) 0x40010003)
+#define DBG_TERMINATE_PROCESS       ((DWORD) 0x40010004)
+#define DBG_CONTROL_C               ((DWORD) 0x40010005)
+#define DBG_CONTROL_BREAK           ((DWORD) 0x40010008)
+#define DBG_COMMAND_EXCEPTION       ((DWORD) 0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED   ((DWORD) 0x80010001)
+
+#endif /* WIN32_NO_STATUS */
+
+/* Argument 1 passed to the DllEntryProc. */
+#define	DLL_PROCESS_DETACH	0	/* detach process (unload library) */
+#define	DLL_PROCESS_ATTACH	1	/* attach process (load library) */
+#define	DLL_THREAD_ATTACH	2	/* attach new thread */
+#define	DLL_THREAD_DETACH	3	/* detach thread */
+#ifdef __WINESRC__
+#define DLL_WINE_PREATTACH      8       /* called before process attach for Wine builtins */
+#endif
+
+/* u.x.wProcessorArchitecture (NT) */
+#define PROCESSOR_ARCHITECTURE_INTEL	0
+#define PROCESSOR_ARCHITECTURE_MIPS	1
+#define PROCESSOR_ARCHITECTURE_ALPHA	2
+#define PROCESSOR_ARCHITECTURE_PPC	3
+#define PROCESSOR_ARCHITECTURE_SHX	4
+#define PROCESSOR_ARCHITECTURE_ARM	5
+#define PROCESSOR_ARCHITECTURE_IA64     6
+#define PROCESSOR_ARCHITECTURE_ALPHA64  7
+#define PROCESSOR_ARCHITECTURE_MSIL     8
+#define PROCESSOR_ARCHITECTURE_AMD64    9
+#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64    10
+#define PROCESSOR_ARCHITECTURE_UNKNOWN	0xFFFF
+
+/* dwProcessorType */
+#define PROCESSOR_INTEL_386      386
+#define PROCESSOR_INTEL_486      486
+#define PROCESSOR_INTEL_PENTIUM  586
+#define PROCESSOR_INTEL_860      860
+#define PROCESSOR_INTEL_IA64     2200
+#define PROCESSOR_AMD_X8664      8664
+#define PROCESSOR_MIPS_R2000     2000
+#define PROCESSOR_MIPS_R3000     3000
+#define PROCESSOR_MIPS_R4000     4000
+#define PROCESSOR_ALPHA_21064    21064
+#define PROCESSOR_PPC_601        601
+#define PROCESSOR_PPC_603        603
+#define PROCESSOR_PPC_604        604
+#define PROCESSOR_PPC_620        620
+#define PROCESSOR_HITACHI_SH3    10003
+#define PROCESSOR_HITACHI_SH3E   10004
+#define PROCESSOR_HITACHI_SH4    10005
+#define PROCESSOR_MOTOROLA_821   821
+#define PROCESSOR_SHx_SH3        103
+#define PROCESSOR_SHx_SH4        104
+#define PROCESSOR_STRONGARM      2577
+#define PROCESSOR_ARM720         1824    /* 0x720 */
+#define PROCESSOR_ARM820         2080    /* 0x820 */
+#define PROCESSOR_ARM920         2336    /* 0x920 */
+#define PROCESSOR_ARM_7TDMI      70001
+#define PROCESSOR_OPTIL          18767
+
+#ifdef _WIN64
+#define MAXIMUM_PROCESSORS       64
+#else
+#define MAXIMUM_PROCESSORS       32
+#endif
+
+typedef struct _MEMORY_BASIC_INFORMATION
+{
+    LPVOID   BaseAddress;
+    LPVOID   AllocationBase;
+    DWORD    AllocationProtect;
+    SIZE_T   RegionSize;
+    DWORD    State;
+    DWORD    Protect;
+    DWORD    Type;
+} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
+
+#define	PAGE_NOACCESS		0x01
+#define	PAGE_READONLY		0x02
+#define	PAGE_READWRITE		0x04
+#define	PAGE_WRITECOPY		0x08
+#define	PAGE_EXECUTE		0x10
+#define	PAGE_EXECUTE_READ	0x20
+#define	PAGE_EXECUTE_READWRITE	0x40
+#define	PAGE_EXECUTE_WRITECOPY	0x80
+#define	PAGE_GUARD		0x100
+#define	PAGE_NOCACHE		0x200
+#define	PAGE_WRITECOMBINE	0x400
+
+#define MEM_COMMIT              0x00001000
+#define MEM_RESERVE             0x00002000
+#define MEM_DECOMMIT            0x00004000
+#define MEM_RELEASE             0x00008000
+#define MEM_FREE                0x00010000
+#define MEM_PRIVATE             0x00020000
+#define MEM_MAPPED              0x00040000
+#define MEM_RESET               0x00080000
+#define MEM_TOP_DOWN            0x00100000
+#define MEM_WRITE_WATCH         0x00200000
+#define MEM_PHYSICAL            0x00400000
+#define MEM_LARGE_PAGES         0x20000000
+#define MEM_4MB_PAGES           0x80000000
+
+#define SEC_FILE                0x00800000
+#define SEC_IMAGE               0x01000000
+#define SEC_RESERVE             0x04000000
+#define SEC_COMMIT              0x08000000
+#define SEC_NOCACHE             0x10000000
+#define SEC_LARGE_PAGES         0x80000000
+#define MEM_IMAGE               SEC_IMAGE
+
+#define WRITE_WATCH_FLAG_RESET  0x00000001
+
+
+#define MINCHAR       0x80
+#define MAXCHAR       0x7f
+#define MINSHORT      0x8000
+#define MAXSHORT      0x7fff
+#define MINLONG       0x80000000
+#define MAXLONG       0x7fffffff
+#define MAXBYTE       0xff
+#define MAXWORD       0xffff
+#define MAXDWORD      0xffffffff
+
+#define UNICODE_STRING_MAX_CHARS 32767
+
+#define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))
+
+#define CONTAINING_RECORD(address, type, field) \
+  ((type *)((PCHAR)(address) - offsetof(type, field)))
+
+/* Types */
+
+typedef struct _LIST_ENTRY {
+  struct _LIST_ENTRY *Flink;
+  struct _LIST_ENTRY *Blink;
+} LIST_ENTRY, *PLIST_ENTRY, * RESTRICTED_POINTER PRLIST_ENTRY;
+
+typedef struct _SINGLE_LIST_ENTRY {
+  struct _SINGLE_LIST_ENTRY *Next;
+} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
+
+#ifdef _WIN64
+
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY;
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
+    PSLIST_ENTRY Next;
+} SLIST_ENTRY;
+
+typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
+    struct {
+        ULONGLONG Alignment;
+        ULONGLONG Region;
+    } DUMMYSTRUCTNAME;
+    struct {
+        ULONGLONG Depth:16;
+        ULONGLONG Sequence:9;
+        ULONGLONG NextEntry:39;
+        ULONGLONG HeaderType:1;
+        ULONGLONG Init:1;
+        ULONGLONG Reserved:59;
+        ULONGLONG Region:3;
+    } Header8;
+    struct {
+        ULONGLONG Depth:16;
+        ULONGLONG Sequence:48;
+        ULONGLONG HeaderType:1;
+        ULONGLONG Init:1;
+        ULONGLONG Reserved:2;
+        ULONGLONG NextEntry:60;
+    } Header16;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+#else
+
+#undef SLIST_ENTRY /* for Mac OS */
+#define SLIST_ENTRY SINGLE_LIST_ENTRY
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+
+typedef union _SLIST_HEADER {
+    ULONGLONG Alignment;
+    struct {
+        SLIST_ENTRY Next;
+        WORD Depth;
+        WORD Sequence;
+    } DUMMYSTRUCTNAME;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+#endif
+
+NTSYSAPI PSLIST_ENTRY WINAPI RtlFirstEntrySList(const SLIST_HEADER*);
+NTSYSAPI VOID         WINAPI RtlInitializeSListHead(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedFlushSList(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPopEntrySList(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+NTSYSAPI WORD         WINAPI RtlQueryDepthSList(PSLIST_HEADER);
+
+
+/* Heap flags */
+
+#define HEAP_NO_SERIALIZE               0x00000001
+#define HEAP_GROWABLE                   0x00000002
+#define HEAP_GENERATE_EXCEPTIONS        0x00000004
+#define HEAP_ZERO_MEMORY                0x00000008
+#define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010
+#define HEAP_TAIL_CHECKING_ENABLED      0x00000020
+#define HEAP_FREE_CHECKING_ENABLED      0x00000040
+#define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
+#define HEAP_CREATE_ALIGN_16            0x00010000
+#define HEAP_CREATE_ENABLE_TRACING      0x00020000
+#define HEAP_CREATE_ENABLE_EXECUTE      0x00040000
+
+/* This flag allows it to create heaps shared by all processes under win95,
+   FIXME: correct name */
+#define HEAP_SHARED                     0x04000000
+
+typedef enum _HEAP_INFORMATION_CLASS {
+    HeapCompatibilityInformation,
+} HEAP_INFORMATION_CLASS;
+
+/* Processor feature flags.  */
+#define PF_FLOATING_POINT_PRECISION_ERRATA	0
+#define PF_FLOATING_POINT_EMULATED		1
+#define PF_COMPARE_EXCHANGE_DOUBLE		2
+#define PF_MMX_INSTRUCTIONS_AVAILABLE		3
+#define PF_PPC_MOVEMEM_64BIT_OK			4
+#define PF_ALPHA_BYTE_INSTRUCTIONS		5
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE		6
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE		7
+#define PF_RDTSC_INSTRUCTION_AVAILABLE		8
+#define PF_PAE_ENABLED				9
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE	10
+#define PF_SSE_DAZ_MODE_AVAILABLE		11
+#define PF_NX_ENABLED				12
+#define PF_SSE3_INSTRUCTIONS_AVAILABLE		13
+#define PF_COMPARE_EXCHANGE128			14
+#define PF_COMPARE64_EXCHANGE128		15
+#define PF_CHANNELS_ENABLED			16
+#define PF_XSAVE_ENABLED			17
+#define PF_ARM_VFP_32_REGISTERS_AVAILABLE       18
+#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE      19
+#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION     20
+#define PF_VIRT_FIRMWARE_ENABLED                21
+#define PF_RDWRFSGSBASE_AVAILABLE               22
+
+
+/* Execution state flags */
+#define ES_SYSTEM_REQUIRED    0x00000001
+#define ES_DISPLAY_REQUIRED   0x00000002
+#define ES_USER_PRESENT       0x00000004
+#define ES_CONTINUOUS         0x80000000
+
+/* The Win32 register context */
+
+/* i386 context definitions */
+#ifdef __i386__
+
+#define SIZE_OF_80387_REGISTERS      80
+
+typedef struct _FLOATING_SAVE_AREA
+{
+    DWORD   ControlWord;
+    DWORD   StatusWord;
+    DWORD   TagWord;
+    DWORD   ErrorOffset;
+    DWORD   ErrorSelector;
+    DWORD   DataOffset;
+    DWORD   DataSelector;
+    BYTE    RegisterArea[SIZE_OF_80387_REGISTERS];
+    DWORD   Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+
+#define MAXIMUM_SUPPORTED_EXTENSION     512
+
+typedef struct _CONTEXT
+{
+    DWORD   ContextFlags;
+
+    /* These are selected by CONTEXT_DEBUG_REGISTERS */
+    DWORD   Dr0;
+    DWORD   Dr1;
+    DWORD   Dr2;
+    DWORD   Dr3;
+    DWORD   Dr6;
+    DWORD   Dr7;
+
+    /* These are selected by CONTEXT_FLOATING_POINT */
+    FLOATING_SAVE_AREA FloatSave;
+
+    /* These are selected by CONTEXT_SEGMENTS */
+    DWORD   SegGs;
+    DWORD   SegFs;
+    DWORD   SegEs;
+    DWORD   SegDs;
+
+    /* These are selected by CONTEXT_INTEGER */
+    DWORD   Edi;
+    DWORD   Esi;
+    DWORD   Ebx;
+    DWORD   Edx;
+    DWORD   Ecx;
+    DWORD   Eax;
+
+    /* These are selected by CONTEXT_CONTROL */
+    DWORD   Ebp;
+    DWORD   Eip;
+    DWORD   SegCs;
+    DWORD   EFlags;
+    DWORD   Esp;
+    DWORD   SegSs;
+
+    BYTE    ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+
+#define CONTEXT_X86       0x00010000
+#define CONTEXT_i386      CONTEXT_X86
+#define CONTEXT_i486      CONTEXT_X86
+
+#define CONTEXT_CONTROL   (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
+#define CONTEXT_INTEGER   (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
+#define CONTEXT_SEGMENTS  (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
+#define CONTEXT_FLOATING_POINT  (CONTEXT_i386 | 0x0008) /* 387 state */
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
+        CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+#endif  /* __i386__ */
+
+typedef struct _LDT_ENTRY {
+    WORD	LimitLow;
+    WORD	BaseLow;
+    union {
+        struct {
+            BYTE    BaseMid;
+            BYTE    Flags1;
+            BYTE    Flags2;
+            BYTE    BaseHi;
+        } Bytes;
+        struct {
+            unsigned    BaseMid: 8;
+            unsigned    Type : 5;
+            unsigned    Dpl : 2;
+            unsigned    Pres : 1;
+            unsigned    LimitHi : 4;
+            unsigned    Sys : 1;
+            unsigned    Reserved_0 : 1;
+            unsigned    Default_Big : 1;
+            unsigned    Granularity : 1;
+            unsigned    BaseHi : 8;
+        } Bits;
+    } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY;
+
+/* x86-64 context definitions */
+#if defined(__x86_64__)
+
+#define CONTEXT_AMD64   0x00100000
+
+#define CONTEXT_CONTROL   (CONTEXT_AMD64 | 0x0001)
+#define CONTEXT_INTEGER   (CONTEXT_AMD64 | 0x0002)
+#define CONTEXT_SEGMENTS  (CONTEXT_AMD64 | 0x0004)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_AMD64 | 0x0008)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+    ULONGLONG Low;
+    LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct _XMM_SAVE_AREA32 {
+    WORD ControlWord;        /* 000 */
+    WORD StatusWord;         /* 002 */
+    BYTE TagWord;            /* 004 */
+    BYTE Reserved1;          /* 005 */
+    WORD ErrorOpcode;        /* 006 */
+    DWORD ErrorOffset;       /* 008 */
+    WORD ErrorSelector;      /* 00c */
+    WORD Reserved2;          /* 00e */
+    DWORD DataOffset;        /* 010 */
+    WORD DataSelector;       /* 014 */
+    WORD Reserved3;          /* 016 */
+    DWORD MxCsr;             /* 018 */
+    DWORD MxCsr_Mask;        /* 01c */
+    M128A FloatRegisters[8]; /* 020 */
+    M128A XmmRegisters[16];  /* 0a0 */
+    BYTE Reserved4[96];      /* 1a0 */
+} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+
+typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+    DWORD64 P1Home;          /* 000 */
+    DWORD64 P2Home;          /* 008 */
+    DWORD64 P3Home;          /* 010 */
+    DWORD64 P4Home;          /* 018 */
+    DWORD64 P5Home;          /* 020 */
+    DWORD64 P6Home;          /* 028 */
+
+    /* Control flags */
+    DWORD ContextFlags;      /* 030 */
+    DWORD MxCsr;             /* 034 */
+
+    /* Segment */
+    WORD SegCs;              /* 038 */
+    WORD SegDs;              /* 03a */
+    WORD SegEs;              /* 03c */
+    WORD SegFs;              /* 03e */
+    WORD SegGs;              /* 040 */
+    WORD SegSs;              /* 042 */
+    DWORD EFlags;            /* 044 */
+
+    /* Debug */
+    DWORD64 Dr0;             /* 048 */
+    DWORD64 Dr1;             /* 050 */
+    DWORD64 Dr2;             /* 058 */
+    DWORD64 Dr3;             /* 060 */
+    DWORD64 Dr6;             /* 068 */
+    DWORD64 Dr7;             /* 070 */
+
+    /* Integer */
+    DWORD64 Rax;             /* 078 */
+    DWORD64 Rcx;             /* 080 */
+    DWORD64 Rdx;             /* 088 */
+    DWORD64 Rbx;             /* 090 */
+    DWORD64 Rsp;             /* 098 */
+    DWORD64 Rbp;             /* 0a0 */
+    DWORD64 Rsi;             /* 0a8 */
+    DWORD64 Rdi;             /* 0b0 */
+    DWORD64 R8;              /* 0b8 */
+    DWORD64 R9;              /* 0c0 */
+    DWORD64 R10;             /* 0c8 */
+    DWORD64 R11;             /* 0d0 */
+    DWORD64 R12;             /* 0d8 */
+    DWORD64 R13;             /* 0e0 */
+    DWORD64 R14;             /* 0e8 */
+    DWORD64 R15;             /* 0f0 */
+
+    /* Counter */
+    DWORD64 Rip;             /* 0f8 */
+
+    /* Floating point */
+    union {
+        XMM_SAVE_AREA32 FltSave;  /* 100 */
+        struct {
+            M128A Header[2];      /* 100 */
+            M128A Legacy[8];      /* 120 */
+            M128A Xmm0;           /* 1a0 */
+            M128A Xmm1;           /* 1b0 */
+            M128A Xmm2;           /* 1c0 */
+            M128A Xmm3;           /* 1d0 */
+            M128A Xmm4;           /* 1e0 */
+            M128A Xmm5;           /* 1f0 */
+            M128A Xmm6;           /* 200 */
+            M128A Xmm7;           /* 210 */
+            M128A Xmm8;           /* 220 */
+            M128A Xmm9;           /* 230 */
+            M128A Xmm10;          /* 240 */
+            M128A Xmm11;          /* 250 */
+            M128A Xmm12;          /* 260 */
+            M128A Xmm13;          /* 270 */
+            M128A Xmm14;          /* 280 */
+            M128A Xmm15;          /* 290 */
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+
+    /* Vector */
+    M128A VectorRegister[26];     /* 300 */
+    DWORD64 VectorControl;        /* 4a0 */
+
+    /* Debug control */
+    DWORD64 DebugControl;         /* 4a8 */
+    DWORD64 LastBranchToRip;      /* 4b0 */
+    DWORD64 LastBranchFromRip;    /* 4b8 */
+    DWORD64 LastExceptionToRip;   /* 4c0 */
+    DWORD64 LastExceptionFromRip; /* 4c8 */
+} CONTEXT;
+
+typedef struct _RUNTIME_FUNCTION
+{
+    DWORD BeginAddress;
+    DWORD EndAddress;
+    DWORD UnwindData;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY
+{
+    ULONG64 ImageBase;
+    PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+#define UNWIND_HISTORY_TABLE_NONE 0
+#define UNWIND_HISTORY_TABLE_GLOBAL 1
+#define UNWIND_HISTORY_TABLE_LOCAL 2
+
+typedef struct _UNWIND_HISTORY_TABLE
+{
+    ULONG Count;
+    UCHAR Search;
+    ULONG64 LowAddress;
+    ULONG64 HighAddress;
+    UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+
+typedef struct _KNONVOLATILE_CONTEXT_POINTERS
+{
+    union
+    {
+        PM128A FloatingContext[16];
+        struct
+        {
+            PM128A Xmm0;
+            PM128A Xmm1;
+            PM128A Xmm2;
+            PM128A Xmm3;
+            PM128A Xmm4;
+            PM128A Xmm5;
+            PM128A Xmm6;
+            PM128A Xmm7;
+            PM128A Xmm8;
+            PM128A Xmm9;
+            PM128A Xmm10;
+            PM128A Xmm11;
+            PM128A Xmm12;
+            PM128A Xmm13;
+            PM128A Xmm14;
+            PM128A Xmm15;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+
+    union
+    {
+        PULONG64 IntegerContext[16];
+        struct
+        {
+            PULONG64 Rax;
+            PULONG64 Rcx;
+            PULONG64 Rdx;
+            PULONG64 Rbx;
+            PULONG64 Rsp;
+            PULONG64 Rbp;
+            PULONG64 Rsi;
+            PULONG64 Rdi;
+            PULONG64 R8;
+            PULONG64 R9;
+            PULONG64 R10;
+            PULONG64 R11;
+            PULONG64 R12;
+            PULONG64 R13;
+            PULONG64 R14;
+            PULONG64 R15;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME2;
+} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+
+BOOLEAN CDECL            RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD64);
+BOOLEAN CDECL            RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
+PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(DWORD64,DWORD64*,UNWIND_HISTORY_TABLE*);
+PVOID WINAPI             RtlVirtualUnwind(ULONG,ULONG64,ULONG64,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG64*,KNONVOLATILE_CONTEXT_POINTERS*);
+
+#define UNW_FLAG_NHANDLER  0
+#define UNW_FLAG_EHANDLER  1
+#define UNW_FLAG_UHANDLER  2
+#define UNW_FLAG_CHAININFO 4
+
+#endif /* __x86_64__ */
+
+/* IA64 context definitions */
+#ifdef __ia64__
+
+#define CONTEXT_IA64                  0x00080000
+#define CONTEXT_CONTROL               (CONTEXT_IA64 | 0x00000001)
+#define CONTEXT_LOWER_FLOATING_POINT  (CONTEXT_IA64 | 0x00000002)
+#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004)
+#define CONTEXT_INTEGER               (CONTEXT_IA64 | 0x00000008)
+#define CONTEXT_DEBUG                 (CONTEXT_IA64 | 0x00000010)
+#define CONTEXT_IA32_CONTROL          (CONTEXT_IA64 | 0x00000020)
+#define CONTEXT_FLOATING_POINT        (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
+#define CONTEXT_FULL                  (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
+#define CONTEXT_ALL                   (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
+
+#define CONTEXT_EXCEPTION_ACTIVE      0x8000000
+#define CONTEXT_SERVICE_ACTIVE        0x10000000
+#define CONTEXT_EXCEPTION_REQUEST     0x40000000
+#define CONTEXT_EXCEPTION_REPORTING   0x80000000
+
+typedef struct _CONTEXT
+{
+    DWORD ContextFlags;
+    DWORD Fill1[3];
+    ULONGLONG DbI0;
+    ULONGLONG DbI1;
+    ULONGLONG DbI2;
+    ULONGLONG DbI3;
+    ULONGLONG DbI4;
+    ULONGLONG DbI5;
+    ULONGLONG DbI6;
+    ULONGLONG DbI7;
+    ULONGLONG DbD0;
+    ULONGLONG DbD1;
+    ULONGLONG DbD2;
+    ULONGLONG DbD3;
+    ULONGLONG DbD4;
+    ULONGLONG DbD5;
+    ULONGLONG DbD6;
+    ULONGLONG DbD7;
+    FLOAT128 FltS0;
+    FLOAT128 FltS1;
+    FLOAT128 FltS2;
+    FLOAT128 FltS3;
+    FLOAT128 FltT0;
+    FLOAT128 FltT1;
+    FLOAT128 FltT2;
+    FLOAT128 FltT3;
+    FLOAT128 FltT4;
+    FLOAT128 FltT5;
+    FLOAT128 FltT6;
+    FLOAT128 FltT7;
+    FLOAT128 FltT8;
+    FLOAT128 FltT9;
+    FLOAT128 FltS4;
+    FLOAT128 FltS5;
+    FLOAT128 FltS6;
+    FLOAT128 FltS7;
+    FLOAT128 FltS8;
+    FLOAT128 FltS9;
+    FLOAT128 FltS10;
+    FLOAT128 FltS11;
+    FLOAT128 FltS12;
+    FLOAT128 FltS13;
+    FLOAT128 FltS14;
+    FLOAT128 FltS15;
+    FLOAT128 FltS16;
+    FLOAT128 FltS17;
+    FLOAT128 FltS18;
+    FLOAT128 FltS19;
+    FLOAT128 FltF32;
+    FLOAT128 FltF33;
+    FLOAT128 FltF34;
+    FLOAT128 FltF35;
+    FLOAT128 FltF36;
+    FLOAT128 FltF37;
+    FLOAT128 FltF38;
+    FLOAT128 FltF39;
+    FLOAT128 FltF40;
+    FLOAT128 FltF41;
+    FLOAT128 FltF42;
+    FLOAT128 FltF43;
+    FLOAT128 FltF44;
+    FLOAT128 FltF45;
+    FLOAT128 FltF46;
+    FLOAT128 FltF47;
+    FLOAT128 FltF48;
+    FLOAT128 FltF49;
+    FLOAT128 FltF50;
+    FLOAT128 FltF51;
+    FLOAT128 FltF52;
+    FLOAT128 FltF53;
+    FLOAT128 FltF54;
+    FLOAT128 FltF55;
+    FLOAT128 FltF56;
+    FLOAT128 FltF57;
+    FLOAT128 FltF58;
+    FLOAT128 FltF59;
+    FLOAT128 FltF60;
+    FLOAT128 FltF61;
+    FLOAT128 FltF62;
+    FLOAT128 FltF63;
+    FLOAT128 FltF64;
+    FLOAT128 FltF65;
+    FLOAT128 FltF66;
+    FLOAT128 FltF67;
+    FLOAT128 FltF68;
+    FLOAT128 FltF69;
+    FLOAT128 FltF70;
+    FLOAT128 FltF71;
+    FLOAT128 FltF72;
+    FLOAT128 FltF73;
+    FLOAT128 FltF74;
+    FLOAT128 FltF75;
+    FLOAT128 FltF76;
+    FLOAT128 FltF77;
+    FLOAT128 FltF78;
+    FLOAT128 FltF79;
+    FLOAT128 FltF80;
+    FLOAT128 FltF81;
+    FLOAT128 FltF82;
+    FLOAT128 FltF83;
+    FLOAT128 FltF84;
+    FLOAT128 FltF85;
+    FLOAT128 FltF86;
+    FLOAT128 FltF87;
+    FLOAT128 FltF88;
+    FLOAT128 FltF89;
+    FLOAT128 FltF90;
+    FLOAT128 FltF91;
+    FLOAT128 FltF92;
+    FLOAT128 FltF93;
+    FLOAT128 FltF94;
+    FLOAT128 FltF95;
+    FLOAT128 FltF96;
+    FLOAT128 FltF97;
+    FLOAT128 FltF98;
+    FLOAT128 FltF99;
+    FLOAT128 FltF100;
+    FLOAT128 FltF101;
+    FLOAT128 FltF102;
+    FLOAT128 FltF103;
+    FLOAT128 FltF104;
+    FLOAT128 FltF105;
+    FLOAT128 FltF106;
+    FLOAT128 FltF107;
+    FLOAT128 FltF108;
+    FLOAT128 FltF109;
+    FLOAT128 FltF110;
+    FLOAT128 FltF111;
+    FLOAT128 FltF112;
+    FLOAT128 FltF113;
+    FLOAT128 FltF114;
+    FLOAT128 FltF115;
+    FLOAT128 FltF116;
+    FLOAT128 FltF117;
+    FLOAT128 FltF118;
+    FLOAT128 FltF119;
+    FLOAT128 FltF120;
+    FLOAT128 FltF121;
+    FLOAT128 FltF122;
+    FLOAT128 FltF123;
+    FLOAT128 FltF124;
+    FLOAT128 FltF125;
+    FLOAT128 FltF126;
+    FLOAT128 FltF127;
+    ULONGLONG StFPSR;
+    ULONGLONG IntGp;
+    ULONGLONG IntT0;
+    ULONGLONG IntT1;
+    ULONGLONG IntS0;
+    ULONGLONG IntS1;
+    ULONGLONG IntS2;
+    ULONGLONG IntS3;
+    ULONGLONG IntV0;
+    ULONGLONG IntT2;
+    ULONGLONG IntT3;
+    ULONGLONG IntT4;
+    ULONGLONG IntSp;
+    ULONGLONG IntTeb;
+    ULONGLONG IntT5;
+    ULONGLONG IntT6;
+    ULONGLONG IntT7;
+    ULONGLONG IntT8;
+    ULONGLONG IntT9;
+    ULONGLONG IntT10;
+    ULONGLONG IntT11;
+    ULONGLONG IntT12;
+    ULONGLONG IntT13;
+    ULONGLONG IntT14;
+    ULONGLONG IntT15;
+    ULONGLONG IntT16;
+    ULONGLONG IntT17;
+    ULONGLONG IntT18;
+    ULONGLONG IntT19;
+    ULONGLONG IntT20;
+    ULONGLONG IntT21;
+    ULONGLONG IntT22;
+    ULONGLONG IntNats;
+    ULONGLONG Preds;
+    ULONGLONG BrRp;
+    ULONGLONG BrS0;
+    ULONGLONG BrS1;
+    ULONGLONG BrS2;
+    ULONGLONG BrS3;
+    ULONGLONG BrS4;
+    ULONGLONG BrT0;
+    ULONGLONG BrT1;
+    ULONGLONG ApUNAT;
+    ULONGLONG ApLC;
+    ULONGLONG ApEC;
+    ULONGLONG ApCCV;
+    ULONGLONG ApDCR;
+    ULONGLONG RsPFS;
+    ULONGLONG RsBSP;
+    ULONGLONG RsBSPSTORE;
+    ULONGLONG RsRSC;
+    ULONGLONG RsRNAT;
+    ULONGLONG StIPSR;
+    ULONGLONG StIIP;
+    ULONGLONG StIFS;
+    ULONGLONG StFCR;
+    ULONGLONG Eflag;
+    ULONGLONG SegCSD;
+    ULONGLONG SegSSD;
+    ULONGLONG Cflag;
+    ULONGLONG StFSR;
+    ULONGLONG StFIR;
+    ULONGLONG StFDR;
+    ULONGLONG UNUSEDPACK;
+} CONTEXT, *PCONTEXT;
+
+typedef struct _RUNTIME_FUNCTION
+{
+    ULONG BeginAddress;
+    ULONG EndAddress;
+    ULONG UnwindInfoAddress;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+
+typedef struct _FRAME_POINTERS {
+  ULONGLONG MemoryStackFp;
+  ULONGLONG BackingStoreFp;
+} FRAME_POINTERS, *PFRAME_POINTERS;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
+  ULONG64 ImageBase;
+  ULONG64 Gp;
+  PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+typedef struct _UNWIND_HISTORY_TABLE {
+  ULONG Count;
+  UCHAR Search;
+  ULONG64 LowAddress;
+  ULONG64 HighAddress;
+  UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+
+typedef struct _KNONVOLATILE_CONTEXT_POINTERS
+{
+    PFLOAT128  FltS0;
+    PFLOAT128  FltS1;
+    PFLOAT128  FltS2;
+    PFLOAT128  FltS3;
+    PFLOAT128  HighFloatingContext[10];
+    PFLOAT128  FltS4;
+    PFLOAT128  FltS5;
+    PFLOAT128  FltS6;
+    PFLOAT128  FltS7;
+    PFLOAT128  FltS8;
+    PFLOAT128  FltS9;
+    PFLOAT128  FltS10;
+    PFLOAT128  FltS11;
+    PFLOAT128  FltS12;
+    PFLOAT128  FltS13;
+    PFLOAT128  FltS14;
+    PFLOAT128  FltS15;
+    PFLOAT128  FltS16;
+    PFLOAT128  FltS17;
+    PFLOAT128  FltS18;
+    PFLOAT128  FltS19;
+    PULONGLONG IntS0;
+    PULONGLONG IntS1;
+    PULONGLONG IntS2;
+    PULONGLONG IntS3;
+    PULONGLONG IntSp;
+    PULONGLONG IntS0Nat;
+    PULONGLONG IntS1Nat;
+    PULONGLONG IntS2Nat;
+    PULONGLONG IntS3Nat;
+    PULONGLONG IntSpNat;
+    PULONGLONG Preds;
+    PULONGLONG BrRp;
+    PULONGLONG BrS0;
+    PULONGLONG BrS1;
+    PULONGLONG BrS2;
+    PULONGLONG BrS3;
+    PULONGLONG BrS4;
+    PULONGLONG ApUNAT;
+    PULONGLONG ApLC;
+    PULONGLONG ApEC;
+    PULONGLONG RsPFS;
+    PULONGLONG StFSR;
+    PULONGLONG StFIR;
+    PULONGLONG StFDR;
+    PULONGLONG Cflag;
+} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+
+ULONGLONG WINAPI RtlVirtualUnwind(ULONGLONG,ULONGLONG,RUNTIME_FUNCTION*,CONTEXT*,BOOLEAN*,FRAME_POINTERS*,KNONVOLATILE_CONTEXT_POINTERS*);
+
+#endif /* __ia64__ */
+
+/* Alpha context definitions */
+#if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__)
+
+#define CONTEXT_ALPHA   0x00020000
+
+#define CONTEXT_CONTROL         (CONTEXT_ALPHA | 0x00000001)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_ALPHA | 0x00000002)
+#define CONTEXT_INTEGER         (CONTEXT_ALPHA | 0x00000004)
+#define CONTEXT_FULL  (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT
+{
+    /* selected by CONTEXT_FLOATING_POINT */
+    ULONGLONG FltF0;
+    ULONGLONG FltF1;
+    ULONGLONG FltF2;
+    ULONGLONG FltF3;
+    ULONGLONG FltF4;
+    ULONGLONG FltF5;
+    ULONGLONG FltF6;
+    ULONGLONG FltF7;
+    ULONGLONG FltF8;
+    ULONGLONG FltF9;
+    ULONGLONG FltF10;
+    ULONGLONG FltF11;
+    ULONGLONG FltF12;
+    ULONGLONG FltF13;
+    ULONGLONG FltF14;
+    ULONGLONG FltF15;
+    ULONGLONG FltF16;
+    ULONGLONG FltF17;
+    ULONGLONG FltF18;
+    ULONGLONG FltF19;
+    ULONGLONG FltF20;
+    ULONGLONG FltF21;
+    ULONGLONG FltF22;
+    ULONGLONG FltF23;
+    ULONGLONG FltF24;
+    ULONGLONG FltF25;
+    ULONGLONG FltF26;
+    ULONGLONG FltF27;
+    ULONGLONG FltF28;
+    ULONGLONG FltF29;
+    ULONGLONG FltF30;
+    ULONGLONG FltF31;
+
+    /* selected by CONTEXT_INTEGER */
+    ULONGLONG IntV0;
+    ULONGLONG IntT0;
+    ULONGLONG IntT1;
+    ULONGLONG IntT2;
+    ULONGLONG IntT3;
+    ULONGLONG IntT4;
+    ULONGLONG IntT5;
+    ULONGLONG IntT6;
+    ULONGLONG IntT7;
+    ULONGLONG IntS0;
+    ULONGLONG IntS1;
+    ULONGLONG IntS2;
+    ULONGLONG IntS3;
+    ULONGLONG IntS4;
+    ULONGLONG IntS5;
+    ULONGLONG IntFp;
+    ULONGLONG IntA0;
+    ULONGLONG IntA1;
+    ULONGLONG IntA2;
+    ULONGLONG IntA3;
+    ULONGLONG IntA4;
+    ULONGLONG IntA5;
+    ULONGLONG IntT8;
+    ULONGLONG IntT9;
+    ULONGLONG IntT10;
+    ULONGLONG IntT11;
+    ULONGLONG IntRa;
+    ULONGLONG IntT12;
+    ULONGLONG IntAt;
+    ULONGLONG IntGp;
+    ULONGLONG IntSp;
+    ULONGLONG IntZero;
+
+    /* selected by CONTEXT_FLOATING_POINT */
+    ULONGLONG Fpcr;
+    ULONGLONG SoftFpcr;
+
+    /* selected by CONTEXT_CONTROL */
+    ULONGLONG Fir;
+    DWORD Psr;
+    DWORD ContextFlags;
+    DWORD Fill[4];
+} CONTEXT;
+
+#define _QUAD_PSR_OFFSET   HighSoftFpcr
+#define _QUAD_FLAGS_OFFSET HighFir
+
+#endif  /* _ALPHA_ */
+
+#ifdef __arm__
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_ARM    0x0200000
+#define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001)
+#define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_ARM | 0x00000004)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _RUNTIME_FUNCTION
+{
+    DWORD BeginAddress;
+    union {
+        DWORD UnwindData;
+        struct {
+            DWORD Flag : 2;
+            DWORD FunctionLength : 11;
+            DWORD Ret : 2;
+            DWORD H : 1;
+            DWORD Reg : 3;
+            DWORD R : 1;
+            DWORD L : 1;
+            DWORD C : 1;
+            DWORD StackAdjust : 10;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY
+{
+    DWORD ImageBase;
+    PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+typedef struct _UNWIND_HISTORY_TABLE
+{
+    DWORD Count;
+    BYTE  LocalHint;
+    BYTE  GlobalHint;
+    BYTE  Search;
+    BYTE  Once;
+    DWORD LowAddress;
+    DWORD HighAddress;
+    UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+
+typedef struct _CONTEXT {
+	/* The flags values within this flag control the contents of
+	   a CONTEXT record.
+
+	   If the context record is used as an input parameter, then
+	   for each portion of the context record controlled by a flag
+	   whose value is set, it is assumed that that portion of the
+	   context record contains valid context. If the context record
+	   is being used to modify a thread's context, then only that
+	   portion of the threads context will be modified.
+
+	   If the context record is used as an IN OUT parameter to capture
+	   the context of a thread, then only those portions of the thread's
+	   context corresponding to set flags will be returned.
+
+	   The context record is never used as an OUT only parameter. */
+
+	ULONG ContextFlags;
+
+	/* This section is specified/returned if the ContextFlags word contains
+	   the flag CONTEXT_INTEGER. */
+	ULONG R0;
+	ULONG R1;
+	ULONG R2;
+	ULONG R3;
+	ULONG R4;
+	ULONG R5;
+	ULONG R6;
+	ULONG R7;
+	ULONG R8;
+	ULONG R9;
+	ULONG R10;
+	ULONG Fp;
+	ULONG Ip;
+
+	/* These are selected by CONTEXT_CONTROL */
+	ULONG Sp;
+	ULONG Lr;
+	ULONG Pc;
+	ULONG Cpsr;
+} CONTEXT;
+
+BOOLEAN CDECL            RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD);
+BOOLEAN CDECL            RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
+PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*);
+
+#endif /* __arm__ */
+
+#ifdef __aarch64__
+/*
+ * FIXME:
+ *
+ * There is not yet an official CONTEXT structure defined for the AArch64
+ * architecture, so I just made one up.
+ *
+ */
+
+#define CONTEXT_ARM64           0x2000000
+#define CONTEXT_CONTROL         (CONTEXT_ARM64 | 0x00000001)
+#define CONTEXT_INTEGER         (CONTEXT_ARM64 | 0x00000002)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_ARM64 | 0x00000004)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT {
+    ULONG ContextFlags;
+
+    /* This section is specified/returned if the ContextFlags word contains
+       the flag CONTEXT_INTEGER. */
+    ULONGLONG X0;
+    ULONGLONG X1;
+    ULONGLONG X2;
+    ULONGLONG X3;
+    ULONGLONG X4;
+    ULONGLONG X5;
+    ULONGLONG X6;
+    ULONGLONG X7;
+    ULONGLONG X8;
+    ULONGLONG X9;
+    ULONGLONG X10;
+    ULONGLONG X11;
+    ULONGLONG X12;
+    ULONGLONG X13;
+    ULONGLONG X14;
+    ULONGLONG X15;
+    ULONGLONG X16;
+    ULONGLONG X17;
+    ULONGLONG X18;
+    ULONGLONG X19;
+    ULONGLONG X20;
+    ULONGLONG X21;
+    ULONGLONG X22;
+    ULONGLONG X23;
+    ULONGLONG X24;
+    ULONGLONG X25;
+    ULONGLONG X26;
+    ULONGLONG X27;
+    ULONGLONG X28;
+    ULONGLONG X29;
+    ULONGLONG X30;
+
+    /* These are selected by CONTEXT_CONTROL */
+    ULONGLONG Sp;
+    ULONGLONG Pc;
+    ULONGLONG PState;
+
+    /* These are selected by CONTEXT_FLOATING_POINT */
+    /* FIXME */
+} CONTEXT;
+
+#endif /* __aarch64__ */
+
+
+/* Mips context definitions */
+#if defined(_MIPS_) || defined(__MIPS__) || defined(__mips__)
+
+#define CONTEXT_R4000   0x00010000
+
+#define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002)
+#define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT
+{
+    DWORD Argument[4];
+    /* These are selected by CONTEXT_FLOATING_POINT */
+    DWORD FltF0;
+    DWORD FltF1;
+    DWORD FltF2;
+    DWORD FltF3;
+    DWORD FltF4;
+    DWORD FltF5;
+    DWORD FltF6;
+    DWORD FltF7;
+    DWORD FltF8;
+    DWORD FltF9;
+    DWORD FltF10;
+    DWORD FltF11;
+    DWORD FltF12;
+    DWORD FltF13;
+    DWORD FltF14;
+    DWORD FltF15;
+    DWORD FltF16;
+    DWORD FltF17;
+    DWORD FltF18;
+    DWORD FltF19;
+    DWORD FltF20;
+    DWORD FltF21;
+    DWORD FltF22;
+    DWORD FltF23;
+    DWORD FltF24;
+    DWORD FltF25;
+    DWORD FltF26;
+    DWORD FltF27;
+    DWORD FltF28;
+    DWORD FltF29;
+    DWORD FltF30;
+    DWORD FltF31;
+
+    /* These are selected by CONTEXT_INTEGER */
+    DWORD IntZero;
+    DWORD IntAt;
+    DWORD IntV0;
+    DWORD IntV1;
+    DWORD IntA0;
+    DWORD IntA1;
+    DWORD IntA2;
+    DWORD IntA3;
+    DWORD IntT0;
+    DWORD IntT1;
+    DWORD IntT2;
+    DWORD IntT3;
+    DWORD IntT4;
+    DWORD IntT5;
+    DWORD IntT6;
+    DWORD IntT7;
+    DWORD IntS0;
+    DWORD IntS1;
+    DWORD IntS2;
+    DWORD IntS3;
+    DWORD IntS4;
+    DWORD IntS5;
+    DWORD IntS6;
+    DWORD IntS7;
+    DWORD IntT8;
+    DWORD IntT9;
+    DWORD IntK0;
+    DWORD IntK1;
+    DWORD IntGp;
+    DWORD IntSp;
+    DWORD IntS8;
+    DWORD IntRa;
+    DWORD IntLo;
+    DWORD IntHi;
+
+    /* These are selected by CONTEXT_FLOATING_POINT */
+    DWORD Fsr;
+
+    /* These are selected by CONTEXT_CONTROL */
+    DWORD Fir;
+    DWORD Psr;
+
+    DWORD ContextFlags;
+    DWORD Fill[2];
+} CONTEXT;
+
+#endif  /* _MIPS_ */
+
+/* PowerPC context definitions */
+#ifdef __powerpc__
+
+#define CONTEXT_CONTROL         0x0001
+#define CONTEXT_FLOATING_POINT  0x0002
+#define CONTEXT_INTEGER         0x0004
+#define CONTEXT_DEBUG_REGISTERS 0x0008
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT    0
+#define EXCEPTION_WRITE_FAULT   1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct
+{
+    /* These are selected by CONTEXT_FLOATING_POINT */
+    double Fpr0;
+    double Fpr1;
+    double Fpr2;
+    double Fpr3;
+    double Fpr4;
+    double Fpr5;
+    double Fpr6;
+    double Fpr7;
+    double Fpr8;
+    double Fpr9;
+    double Fpr10;
+    double Fpr11;
+    double Fpr12;
+    double Fpr13;
+    double Fpr14;
+    double Fpr15;
+    double Fpr16;
+    double Fpr17;
+    double Fpr18;
+    double Fpr19;
+    double Fpr20;
+    double Fpr21;
+    double Fpr22;
+    double Fpr23;
+    double Fpr24;
+    double Fpr25;
+    double Fpr26;
+    double Fpr27;
+    double Fpr28;
+    double Fpr29;
+    double Fpr30;
+    double Fpr31;
+    double Fpscr;
+
+    /* These are selected by CONTEXT_INTEGER */
+    DWORD Gpr0;
+    DWORD Gpr1;
+    DWORD Gpr2;
+    DWORD Gpr3;
+    DWORD Gpr4;
+    DWORD Gpr5;
+    DWORD Gpr6;
+    DWORD Gpr7;
+    DWORD Gpr8;
+    DWORD Gpr9;
+    DWORD Gpr10;
+    DWORD Gpr11;
+    DWORD Gpr12;
+    DWORD Gpr13;
+    DWORD Gpr14;
+    DWORD Gpr15;
+    DWORD Gpr16;
+    DWORD Gpr17;
+    DWORD Gpr18;
+    DWORD Gpr19;
+    DWORD Gpr20;
+    DWORD Gpr21;
+    DWORD Gpr22;
+    DWORD Gpr23;
+    DWORD Gpr24;
+    DWORD Gpr25;
+    DWORD Gpr26;
+    DWORD Gpr27;
+    DWORD Gpr28;
+    DWORD Gpr29;
+    DWORD Gpr30;
+    DWORD Gpr31;
+
+    DWORD Cr;
+    DWORD Xer;
+
+    /* These are selected by CONTEXT_CONTROL */
+    DWORD Msr;
+    DWORD Iar; /* Instruction Address Register , aka PC ... */
+    DWORD Lr;
+    DWORD Ctr;
+
+    DWORD ContextFlags;
+    
+    DWORD Dar;   /* Fault registers for coredump */
+    DWORD Dsisr; 
+    DWORD Trap;  /* number of powerpc exception taken */
+
+    /* These are selected by CONTEXT_DEBUG_REGISTERS */
+    DWORD Dr0;
+    DWORD Dr1;
+    DWORD Dr2;
+    DWORD Dr3;
+    DWORD Dr4;
+    DWORD Dr5;
+    DWORD Dr6;
+    DWORD Dr7;
+} CONTEXT;
+
+typedef struct _STACK_FRAME_HEADER
+{
+    DWORD BackChain;
+    DWORD GlueSaved1;
+    DWORD GlueSaved2;
+    DWORD Reserved1;
+    DWORD Spare1;
+    DWORD Spare2;
+
+    DWORD Parameter0;
+    DWORD Parameter1;
+    DWORD Parameter2;
+    DWORD Parameter3;
+    DWORD Parameter4;
+    DWORD Parameter5;
+    DWORD Parameter6;
+    DWORD Parameter7;
+} STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER;
+
+#endif  /* __powerpc__ */
+
+#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
+#error You need to define a CONTEXT for your CPU
+#endif
+
+typedef CONTEXT *PCONTEXT;
+
+NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
+
+/*
+ * Product types
+ */
+#define PRODUCT_UNDEFINED                               0x00000000
+#define PRODUCT_ULTIMATE                                0x00000001
+#define PRODUCT_HOME_BASIC                              0x00000002
+#define PRODUCT_HOME_PREMIUM                            0x00000003
+#define PRODUCT_ENTERPRISE                              0x00000004
+#define PRODUCT_HOME_BASIC_N                            0x00000005
+#define PRODUCT_BUSINESS                                0x00000006
+#define PRODUCT_STANDARD_SERVER                         0x00000007
+#define PRODUCT_DATACENTER_SERVER                       0x00000008
+#define PRODUCT_SMALLBUSINESS_SERVER                    0x00000009
+#define PRODUCT_ENTERPRISE_SERVER                       0x0000000A
+#define PRODUCT_STARTER                                 0x0000000B
+#define PRODUCT_DATACENTER_SERVER_CORE                  0x0000000C
+#define PRODUCT_STANDARD_SERVER_CORE                    0x0000000D
+#define PRODUCT_ENTERPRISE_SERVER_CORE                  0x0000000E
+#define PRODUCT_ENTERPRISE_SERVER_IA64                  0x0000000F
+#define PRODUCT_BUSINESS_N                              0x00000010
+#define PRODUCT_WEB_SERVER                              0x00000011
+#define PRODUCT_CLUSTER_SERVER                          0x00000012
+#define PRODUCT_HOME_SERVER                             0x00000013
+#define PRODUCT_STORAGE_EXPRESS_SERVER                  0x00000014
+#define PRODUCT_STORAGE_STANDARD_SERVER                 0x00000015
+#define PRODUCT_STORAGE_WORKGROUP_SERVER                0x00000016
+#define PRODUCT_STORAGE_ENTERPRISE_SERVER               0x00000017
+#define PRODUCT_SERVER_FOR_SMALLBUSINESS                0x00000018
+#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM            0x00000019
+#define PRODUCT_HOME_PREMIUM_N                          0x0000001A
+#define PRODUCT_ENTERPRISE_N                            0x0000001B
+#define PRODUCT_ULTIMATE_N                              0x0000001C
+#define PRODUCT_WEB_SERVER_CORE                         0x0000001D
+#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT        0x0000001E
+#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY          0x0000001F
+#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING         0x00000020
+#define PRODUCT_SERVER_FOUNDATION                       0x00000021
+#define PRODUCT_HOME_PREMIUM_SERVER                     0x00000022
+#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V              0x00000023
+#define PRODUCT_STANDARD_SERVER_V                       0x00000024
+#define PRODUCT_DATACENTER_SERVER_V                     0x00000025
+#define PRODUCT_SERVER_V                                0x00000025
+#define PRODUCT_ENTERPRISE_SERVER_V                     0x00000026
+#define PRODUCT_DATACENTER_SERVER_CORE_V                0x00000027
+#define PRODUCT_STANDARD_SERVER_CORE_V                  0x00000028
+#define PRODUCT_ENTERPRISE_SERVER_CORE_V                0x00000029
+#define PRODUCT_HYPERV                                  0x0000002A
+#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE             0x0000002B
+#define PRODUCT_STORAGE_STANDARD_SERVER_CORE            0x0000002C
+#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE           0x0000002D
+#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE          0x0000002E
+#define PRODUCT_STARTER_N                               0x0000002F
+#define PRODUCT_PROFESSIONAL                            0x00000030
+#define PRODUCT_PROFESSIONAL_N                          0x00000031
+#define PRODUCT_SB_SOLUTION_SERVER                      0x00000032
+#define PRODUCT_SERVER_FOR_SB_SOLUTIONS                 0x00000033
+#define PRODUCT_STANDARD_SERVER_SOLUTIONS               0x00000034
+#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE          0x00000035
+#define PRODUCT_SB_SOLUTION_SERVER_EM                   0x00000036
+#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM              0x00000037
+#define PRODUCT_SOLUTION_EMBEDDEDSERVER                 0x00000038
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT           0x0000003B
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL           0x0000003C
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC        0x0000003D
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC        0x0000003E
+#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE       0x0000003F
+#define PRODUCT_CLUSTER_SERVER_V                        0x00000040
+#define PRODUCT_EMBEDDED                                0x00000041
+#define PRODUCT_STARTER_E                               0x00000042
+#define PRODUCT_HOME_BASIC_E                            0x00000043
+#define PRODUCT_HOME_PREMIUM_E                          0x00000044
+#define PRODUCT_PROFESSIONAL_E                          0x00000045
+#define PRODUCT_ENTERPRISE_E                            0x00000046
+#define PRODUCT_ULTIMATE_E                              0x00000047
+#define PRODUCT_ENTERPRISE_EVALUATION                   0x00000048
+#define PRODUCT_MULTIPOINT_STANDARD_SERVER              0x0000004C
+#define PRODUCT_MULTIPOINT_PREMIUM_SERVER               0x0000004D
+#define PRODUCT_STANDARD_EVALUATION_SERVER              0x0000004F
+#define PRODUCT_DATACENTER_EVALUATION_SERVER            0x00000050
+#define PRODUCT_ENTERPRISE_N_EVALUATION                 0x00000054
+#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER     0x0000005F
+#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER      0x00000060
+#define PRODUCT_CORE_ARM                                0x00000061
+#define PRODUCT_CORE_N                                  0x00000062
+#define PRODUCT_CORE_COUNTRYSPECIFIC                    0x00000063
+#define PRODUCT_CORE_LANGUAGESPECIFIC                   0x00000064
+#define PRODUCT_CORE                                    0x00000065
+#define PRODUCT_PROFESSIONAL_WMC                        0x00000067
+#define PRODUCT_UNLICENSED                              0xABCDABCD
+
+
+/*
+ * Language IDs
+ */
+
+#define MAKELCID(l, s)		(MAKELONG(l, s))
+
+#define MAKELANGID(p, s)        ((((WORD)(s))<<10) | (WORD)(p))
+#define PRIMARYLANGID(l)        ((WORD)(l) & 0x3ff)
+#define SUBLANGID(l)            ((WORD)(l) >> 10)
+
+#define LANGIDFROMLCID(lcid)	((WORD)(lcid))
+#define SORTIDFROMLCID(lcid)	((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))
+
+#define LANG_SYSTEM_DEFAULT	(MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
+#define LANG_USER_DEFAULT	(MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
+#define LOCALE_SYSTEM_DEFAULT	(MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
+#define LOCALE_USER_DEFAULT	(MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
+#define LOCALE_NEUTRAL		(MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
+#define LOCALE_INVARIANT	(MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
+#define LOCALE_CUSTOM_DEFAULT      (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))
+#define LOCALE_CUSTOM_UNSPECIFIED  (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))
+#define LOCALE_CUSTOM_UI_DEFAULT   (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))
+#define LOCALE_NAME_MAX_LENGTH     85
+
+
+#define UNREFERENCED_PARAMETER(u)	(void)(u)
+#define DBG_UNREFERENCED_PARAMETER(u)	(void)(u)
+#define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)
+
+#include <winnt.rh>
+
+
+/*
+ * Definitions for IsTextUnicode()
+ */
+
+#define IS_TEXT_UNICODE_ASCII16		   0x0001
+#define IS_TEXT_UNICODE_STATISTICS         0x0002
+#define IS_TEXT_UNICODE_CONTROLS           0x0004
+#define IS_TEXT_UNICODE_SIGNATURE	   0x0008
+#define IS_TEXT_UNICODE_UNICODE_MASK       0x000F
+#define IS_TEXT_UNICODE_REVERSE_ASCII16	   0x0010
+#define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
+#define IS_TEXT_UNICODE_REVERSE_CONTROLS   0x0040
+#define IS_TEXT_UNICODE_REVERSE_SIGNATURE  0x0080
+#define IS_TEXT_UNICODE_REVERSE_MASK       0x00F0
+#define IS_TEXT_UNICODE_ILLEGAL_CHARS	   0x0100
+#define IS_TEXT_UNICODE_ODD_LENGTH	   0x0200
+#define IS_TEXT_UNICODE_DBCS_LEADBYTE      0x0400
+#define IS_TEXT_UNICODE_NOT_UNICODE_MASK   0x0F00
+#define IS_TEXT_UNICODE_NULL_BYTES         0x1000
+#define IS_TEXT_UNICODE_NOT_ASCII_MASK     0xF000
+
+#define MAXIMUM_WAIT_OBJECTS 64
+#define MAXIMUM_SUSPEND_COUNT 127
+
+#define WT_EXECUTEDEFAULT              0x00
+#define WT_EXECUTEINIOTHREAD           0x01
+#define WT_EXECUTEINUITHREAD           0x02
+#define WT_EXECUTEINWAITTHREAD         0x04
+#define WT_EXECUTEONLYONCE             0x08
+#define WT_EXECUTELONGFUNCTION         0x10
+#define WT_EXECUTEINTIMERTHREAD        0x20
+#define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
+#define WT_EXECUTEINPERSISTENTTHREAD   0x80
+#define WT_EXECUTEINLONGTHREAD         0x10
+#define WT_EXECUTEDELETEWAIT           0x08
+#define WT_TRANSFER_IMPERSONATION      0x0100
+
+
+#define EXCEPTION_CONTINUABLE        0
+#define EXCEPTION_NONCONTINUABLE     0x01
+
+/*
+ * The exception record used by Win32 to give additional information
+ * about exception to exception handlers.
+ */
+
+#define EXCEPTION_MAXIMUM_PARAMETERS 15
+
+typedef struct _EXCEPTION_RECORD
+{
+    DWORD    ExceptionCode;
+    DWORD    ExceptionFlags;
+    struct  _EXCEPTION_RECORD *ExceptionRecord;
+
+    PVOID    ExceptionAddress;
+    DWORD    NumberParameters;
+    ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
+
+/*
+ * The exception pointers structure passed to exception filters
+ * in except() and the UnhandledExceptionFilter().
+ */
+
+typedef struct _EXCEPTION_POINTERS
+{
+  PEXCEPTION_RECORD  ExceptionRecord;
+  PCONTEXT           ContextRecord;
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+
+
+/*
+ * The exception frame, used for registering exception handlers
+ * Win32 cares only about this, but compilers generally emit
+ * larger exception frames for their own use.
+ */
+
+struct _EXCEPTION_REGISTRATION_RECORD;
+
+typedef DWORD (*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct _EXCEPTION_REGISTRATION_RECORD*,
+                                    PCONTEXT,struct _EXCEPTION_REGISTRATION_RECORD **);
+
+typedef struct _EXCEPTION_REGISTRATION_RECORD
+{
+  struct _EXCEPTION_REGISTRATION_RECORD *Prev;
+  PEXCEPTION_HANDLER       Handler;
+} EXCEPTION_REGISTRATION_RECORD;
+
+/*
+ * function pointer to an exception filter
+ */
+
+typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo);
+
+typedef struct _NT_TIB
+{
+	struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+	PVOID StackBase;
+	PVOID StackLimit;
+	PVOID SubSystemTib;
+	union {
+          PVOID FiberData;
+          DWORD Version;
+	} DUMMYUNIONNAME;
+	PVOID ArbitraryUserPointer;
+	struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
+struct _TEB;
+
+#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+{
+    struct _TEB *teb;
+    __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
+    return teb;
+}
+#elif defined(__i386__) && defined(_MSC_VER)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+{
+  struct _TEB *teb;
+  __asm mov eax, fs:[0x18];
+  __asm mov teb, eax;
+  return teb;
+}
+#elif defined(__x86_64__) && defined(__GNUC__)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+{
+    struct _TEB *teb;
+    __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb));
+    return teb;
+}
+#else
+extern struct _TEB * WINAPI NtCurrentTeb(void);
+#endif
+
+#ifdef NONAMELESSUNION
+#define GetCurrentFiber()  (((NT_TIB *)NtCurrentTeb())->u.FiberData)
+#else
+#define GetCurrentFiber()  (((NT_TIB *)NtCurrentTeb())->FiberData)
+#endif
+#define GetFiberData()     (*(void **)GetCurrentFiber())
+
+#define TLS_MINIMUM_AVAILABLE 64
+
+/*
+ * File formats definitions
+ */
+
+#include <pshpack2.h>
+typedef struct _IMAGE_DOS_HEADER {
+    WORD  e_magic;      /* 00: MZ Header signature */
+    WORD  e_cblp;       /* 02: Bytes on last page of file */
+    WORD  e_cp;         /* 04: Pages in file */
+    WORD  e_crlc;       /* 06: Relocations */
+    WORD  e_cparhdr;    /* 08: Size of header in paragraphs */
+    WORD  e_minalloc;   /* 0a: Minimum extra paragraphs needed */
+    WORD  e_maxalloc;   /* 0c: Maximum extra paragraphs needed */
+    WORD  e_ss;         /* 0e: Initial (relative) SS value */
+    WORD  e_sp;         /* 10: Initial SP value */
+    WORD  e_csum;       /* 12: Checksum */
+    WORD  e_ip;         /* 14: Initial IP value */
+    WORD  e_cs;         /* 16: Initial (relative) CS value */
+    WORD  e_lfarlc;     /* 18: File address of relocation table */
+    WORD  e_ovno;       /* 1a: Overlay number */
+    WORD  e_res[4];     /* 1c: Reserved words */
+    WORD  e_oemid;      /* 24: OEM identifier (for e_oeminfo) */
+    WORD  e_oeminfo;    /* 26: OEM information; e_oemid specific */
+    WORD  e_res2[10];   /* 28: Reserved words */
+    DWORD e_lfanew;     /* 3c: Offset to extended header */
+} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
+#include <poppack.h>
+
+#define IMAGE_DOS_SIGNATURE    0x5A4D     /* MZ   */
+#define IMAGE_OS2_SIGNATURE    0x454E     /* NE   */
+#define IMAGE_OS2_SIGNATURE_LE 0x454C     /* LE   */
+#define IMAGE_OS2_SIGNATURE_LX 0x584C     /* LX */
+#define IMAGE_VXD_SIGNATURE    0x454C     /* LE   */
+#define IMAGE_NT_SIGNATURE     0x00004550 /* PE00 */
+
+/*
+ * This is the Windows executable (NE) header.
+ * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
+ */
+#include <pshpack2.h>
+typedef struct
+{
+    WORD  ne_magic;             /* 00 NE signature 'NE' */
+    BYTE  ne_ver;               /* 02 Linker version number */
+    BYTE  ne_rev;               /* 03 Linker revision number */
+    WORD  ne_enttab;            /* 04 Offset to entry table relative to NE */
+    WORD  ne_cbenttab;          /* 06 Length of entry table in bytes */
+    LONG  ne_crc;               /* 08 Checksum */
+    WORD  ne_flags;             /* 0c Flags about segments in this file */
+    WORD  ne_autodata;          /* 0e Automatic data segment number */
+    WORD  ne_heap;              /* 10 Initial size of local heap */
+    WORD  ne_stack;             /* 12 Initial size of stack */
+    DWORD ne_csip;              /* 14 Initial CS:IP */
+    DWORD ne_sssp;              /* 18 Initial SS:SP */
+    WORD  ne_cseg;              /* 1c # of entries in segment table */
+    WORD  ne_cmod;              /* 1e # of entries in module reference tab. */
+    WORD  ne_cbnrestab;         /* 20 Length of nonresident-name table     */
+    WORD  ne_segtab;            /* 22 Offset to segment table */
+    WORD  ne_rsrctab;           /* 24 Offset to resource table */
+    WORD  ne_restab;            /* 26 Offset to resident-name table */
+    WORD  ne_modtab;            /* 28 Offset to module reference table */
+    WORD  ne_imptab;            /* 2a Offset to imported name table */
+    DWORD ne_nrestab;           /* 2c Offset to nonresident-name table */
+    WORD  ne_cmovent;           /* 30 # of movable entry points */
+    WORD  ne_align;             /* 32 Logical sector alignment shift count */
+    WORD  ne_cres;              /* 34 # of resource segments */
+    BYTE  ne_exetyp;            /* 36 Flags indicating target OS */
+    BYTE  ne_flagsothers;       /* 37 Additional information flags */
+    WORD  ne_pretthunks;        /* 38 Offset to return thunks */
+    WORD  ne_psegrefbytes;      /* 3a Offset to segment ref. bytes */
+    WORD  ne_swaparea;          /* 3c Reserved by Microsoft */
+    WORD  ne_expver;            /* 3e Expected Windows version number */
+} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;
+#include <poppack.h>
+
+#include <pshpack2.h>
+typedef struct _IMAGE_VXD_HEADER {
+  WORD  e32_magic;
+  BYTE  e32_border;
+  BYTE  e32_worder;
+  DWORD e32_level;
+  WORD  e32_cpu;
+  WORD  e32_os;
+  DWORD e32_ver;
+  DWORD e32_mflags;
+  DWORD e32_mpages;
+  DWORD e32_startobj;
+  DWORD e32_eip;
+  DWORD e32_stackobj;
+  DWORD e32_esp;
+  DWORD e32_pagesize;
+  DWORD e32_lastpagesize;
+  DWORD e32_fixupsize;
+  DWORD e32_fixupsum;
+  DWORD e32_ldrsize;
+  DWORD e32_ldrsum;
+  DWORD e32_objtab;
+  DWORD e32_objcnt;
+  DWORD e32_objmap;
+  DWORD e32_itermap;
+  DWORD e32_rsrctab;
+  DWORD e32_rsrccnt;
+  DWORD e32_restab;
+  DWORD e32_enttab;
+  DWORD e32_dirtab;
+  DWORD e32_dircnt;
+  DWORD e32_fpagetab;
+  DWORD e32_frectab;
+  DWORD e32_impmod;
+  DWORD e32_impmodcnt;
+  DWORD e32_impproc;
+  DWORD e32_pagesum;
+  DWORD e32_datapage;
+  DWORD e32_preload;
+  DWORD e32_nrestab;
+  DWORD e32_cbnrestab;
+  DWORD e32_nressum;
+  DWORD e32_autodata;
+  DWORD e32_debuginfo;
+  DWORD e32_debuglen;
+  DWORD e32_instpreload;
+  DWORD e32_instdemand;
+  DWORD e32_heapsize;
+  BYTE  e32_res3[12];
+  DWORD e32_winresoff;
+  DWORD e32_winreslen;
+  WORD  e32_devid;
+  WORD  e32_ddkver;
+} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
+#include <poppack.h>
+
+/* These defines describe the meanings of the bits in the Characteristics
+   field */
+
+#define IMAGE_FILE_RELOCS_STRIPPED	0x0001 /* No relocation info */
+#define IMAGE_FILE_EXECUTABLE_IMAGE	0x0002
+#define IMAGE_FILE_LINE_NUMS_STRIPPED   0x0004
+#define IMAGE_FILE_LOCAL_SYMS_STRIPPED  0x0008
+#define IMAGE_FILE_AGGRESIVE_WS_TRIM	0x0010
+#define IMAGE_FILE_LARGE_ADDRESS_AWARE	0x0020
+#define IMAGE_FILE_16BIT_MACHINE	0x0040
+#define IMAGE_FILE_BYTES_REVERSED_LO	0x0080
+#define IMAGE_FILE_32BIT_MACHINE	0x0100
+#define IMAGE_FILE_DEBUG_STRIPPED	0x0200
+#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP	0x0400
+#define IMAGE_FILE_NET_RUN_FROM_SWAP	0x0800
+#define IMAGE_FILE_SYSTEM		0x1000
+#define IMAGE_FILE_DLL			0x2000
+#define IMAGE_FILE_UP_SYSTEM_ONLY	0x4000
+#define IMAGE_FILE_BYTES_REVERSED_HI	0x8000
+
+/* These are the settings of the Machine field. */
+#define	IMAGE_FILE_MACHINE_UNKNOWN	0
+#define	IMAGE_FILE_MACHINE_I860		0x014d
+#define	IMAGE_FILE_MACHINE_I386		0x014c
+#define	IMAGE_FILE_MACHINE_R3000	0x0162
+#define	IMAGE_FILE_MACHINE_R4000	0x0166
+#define	IMAGE_FILE_MACHINE_R10000	0x0168
+#define	IMAGE_FILE_MACHINE_WCEMIPSV2	0x0169
+#define	IMAGE_FILE_MACHINE_ALPHA	0x0184
+#define	IMAGE_FILE_MACHINE_SH3		0x01a2
+#define	IMAGE_FILE_MACHINE_SH3DSP	0x01a3
+#define	IMAGE_FILE_MACHINE_SH3E		0x01a4
+#define	IMAGE_FILE_MACHINE_SH4		0x01a6
+#define	IMAGE_FILE_MACHINE_SH5		0x01a8
+#define	IMAGE_FILE_MACHINE_ARM		0x01c0
+#define	IMAGE_FILE_MACHINE_THUMB	0x01c2
+#define	IMAGE_FILE_MACHINE_ARMNT	0x01c4
+#define	IMAGE_FILE_MACHINE_ARM64	0xaa64
+#define	IMAGE_FILE_MACHINE_AM33		0x01d3
+#define	IMAGE_FILE_MACHINE_POWERPC	0x01f0
+#define	IMAGE_FILE_MACHINE_POWERPCFP	0x01f1
+#define	IMAGE_FILE_MACHINE_IA64		0x0200
+#define	IMAGE_FILE_MACHINE_MIPS16	0x0266
+#define	IMAGE_FILE_MACHINE_ALPHA64	0x0284
+#define	IMAGE_FILE_MACHINE_MIPSFPU	0x0366
+#define	IMAGE_FILE_MACHINE_MIPSFPU16	0x0466
+#define	IMAGE_FILE_MACHINE_AXP64	IMAGE_FILE_MACHINE_ALPHA64
+#define	IMAGE_FILE_MACHINE_TRICORE	0x0520
+#define	IMAGE_FILE_MACHINE_CEF		0x0cef
+#define	IMAGE_FILE_MACHINE_EBC		0x0ebc
+#define	IMAGE_FILE_MACHINE_AMD64	0x8664
+#define	IMAGE_FILE_MACHINE_M32R		0x9041
+#define	IMAGE_FILE_MACHINE_CEE		0xc0ee
+
+#define	IMAGE_SIZEOF_FILE_HEADER		20
+#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER	56
+#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER	28
+#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 	224
+#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 	240
+#define IMAGE_SIZEOF_SHORT_NAME 		8
+#define IMAGE_SIZEOF_SECTION_HEADER 		40
+#define IMAGE_SIZEOF_SYMBOL 			18
+#define IMAGE_SIZEOF_AUX_SYMBOL 		18
+#define IMAGE_SIZEOF_RELOCATION 		10
+#define IMAGE_SIZEOF_BASE_RELOCATION 		8
+#define IMAGE_SIZEOF_LINENUMBER 		6
+#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 	60
+
+/* Possible Magic values */
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC      0x10b
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC      0x20b
+#define IMAGE_ROM_OPTIONAL_HDR_MAGIC       0x107
+
+#ifdef _WIN64
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC     IMAGE_NT_OPTIONAL_HDR64_MAGIC
+#else
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC     IMAGE_NT_OPTIONAL_HDR32_MAGIC
+#endif
+
+/* These are indexes into the DataDirectory array */
+#define IMAGE_FILE_EXPORT_DIRECTORY		0
+#define IMAGE_FILE_IMPORT_DIRECTORY		1
+#define IMAGE_FILE_RESOURCE_DIRECTORY		2
+#define IMAGE_FILE_EXCEPTION_DIRECTORY		3
+#define IMAGE_FILE_SECURITY_DIRECTORY		4
+#define IMAGE_FILE_BASE_RELOCATION_TABLE	5
+#define IMAGE_FILE_DEBUG_DIRECTORY		6
+#define IMAGE_FILE_DESCRIPTION_STRING		7
+#define IMAGE_FILE_MACHINE_VALUE		8  /* Mips */
+#define IMAGE_FILE_THREAD_LOCAL_STORAGE		9
+#define IMAGE_FILE_CALLBACK_DIRECTORY		10
+
+/* Directory Entries, indices into the DataDirectory array */
+
+#define	IMAGE_DIRECTORY_ENTRY_EXPORT		0
+#define	IMAGE_DIRECTORY_ENTRY_IMPORT		1
+#define	IMAGE_DIRECTORY_ENTRY_RESOURCE		2
+#define	IMAGE_DIRECTORY_ENTRY_EXCEPTION		3
+#define	IMAGE_DIRECTORY_ENTRY_SECURITY		4
+#define	IMAGE_DIRECTORY_ENTRY_BASERELOC		5
+#define	IMAGE_DIRECTORY_ENTRY_DEBUG		6
+#define	IMAGE_DIRECTORY_ENTRY_COPYRIGHT		7
+#define	IMAGE_DIRECTORY_ENTRY_GLOBALPTR		8   /* (MIPS GP) */
+#define	IMAGE_DIRECTORY_ENTRY_TLS		9
+#define	IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG	10
+#define	IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT	11
+#define	IMAGE_DIRECTORY_ENTRY_IAT		12  /* Import Address Table */
+#define	IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT	13
+#define	IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR	14
+
+/* Subsystem Values */
+
+#define	IMAGE_SUBSYSTEM_UNKNOWN			0
+#define	IMAGE_SUBSYSTEM_NATIVE			1
+#define	IMAGE_SUBSYSTEM_WINDOWS_GUI		2	/* Windows GUI subsystem */
+#define	IMAGE_SUBSYSTEM_WINDOWS_CUI		3	/* Windows character subsystem */
+#define	IMAGE_SUBSYSTEM_OS2_CUI			5
+#define	IMAGE_SUBSYSTEM_POSIX_CUI		7
+#define	IMAGE_SUBSYSTEM_NATIVE_WINDOWS		8	/* native Win9x driver */
+#define	IMAGE_SUBSYSTEM_WINDOWS_CE_GUI		9	/* Windows CE subsystem */
+#define	IMAGE_SUBSYSTEM_EFI_APPLICATION		10
+#define	IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER	11
+#define	IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER	12
+#define	IMAGE_SUBSYSTEM_EFI_ROM			13
+#define	IMAGE_SUBSYSTEM_XBOX			14
+#define	IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION	16
+
+/* DLL Characteristics */
+#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          0x0040
+#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       0x0080
+#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT             0x0100
+#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          0x0200
+#define IMAGE_DLLCHARACTERISTICS_NO_SEH                0x0400
+#define IMAGE_DLLCHARACTERISTICS_NO_BIND               0x0800
+#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            0x2000
+#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
+
+typedef struct _IMAGE_FILE_HEADER {
+  WORD  Machine;
+  WORD  NumberOfSections;
+  DWORD TimeDateStamp;
+  DWORD PointerToSymbolTable;
+  DWORD NumberOfSymbols;
+  WORD  SizeOfOptionalHeader;
+  WORD  Characteristics;
+} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
+
+typedef struct _IMAGE_DATA_DIRECTORY {
+  DWORD VirtualAddress;
+  DWORD Size;
+} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
+
+#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
+
+typedef struct _IMAGE_OPTIONAL_HEADER64 {
+  WORD  Magic; /* 0x20b */
+  BYTE MajorLinkerVersion;
+  BYTE MinorLinkerVersion;
+  DWORD SizeOfCode;
+  DWORD SizeOfInitializedData;
+  DWORD SizeOfUninitializedData;
+  DWORD AddressOfEntryPoint;
+  DWORD BaseOfCode;
+  ULONGLONG ImageBase;
+  DWORD SectionAlignment;
+  DWORD FileAlignment;
+  WORD MajorOperatingSystemVersion;
+  WORD MinorOperatingSystemVersion;
+  WORD MajorImageVersion;
+  WORD MinorImageVersion;
+  WORD MajorSubsystemVersion;
+  WORD MinorSubsystemVersion;
+  DWORD Win32VersionValue;
+  DWORD SizeOfImage;
+  DWORD SizeOfHeaders;
+  DWORD CheckSum;
+  WORD Subsystem;
+  WORD DllCharacteristics;
+  ULONGLONG SizeOfStackReserve;
+  ULONGLONG SizeOfStackCommit;
+  ULONGLONG SizeOfHeapReserve;
+  ULONGLONG SizeOfHeapCommit;
+  DWORD LoaderFlags;
+  DWORD NumberOfRvaAndSizes;
+  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
+
+typedef struct _IMAGE_NT_HEADERS64 {
+  DWORD Signature;
+  IMAGE_FILE_HEADER FileHeader;
+  IMAGE_OPTIONAL_HEADER64 OptionalHeader;
+} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
+
+typedef struct _IMAGE_OPTIONAL_HEADER {
+
+  /* Standard fields */
+
+  WORD  Magic; /* 0x10b or 0x107 */	/* 0x00 */
+  BYTE  MajorLinkerVersion;
+  BYTE  MinorLinkerVersion;
+  DWORD SizeOfCode;
+  DWORD SizeOfInitializedData;
+  DWORD SizeOfUninitializedData;
+  DWORD AddressOfEntryPoint;		/* 0x10 */
+  DWORD BaseOfCode;
+  DWORD BaseOfData;
+
+  /* NT additional fields */
+
+  DWORD ImageBase;
+  DWORD SectionAlignment;		/* 0x20 */
+  DWORD FileAlignment;
+  WORD  MajorOperatingSystemVersion;
+  WORD  MinorOperatingSystemVersion;
+  WORD  MajorImageVersion;
+  WORD  MinorImageVersion;
+  WORD  MajorSubsystemVersion;		/* 0x30 */
+  WORD  MinorSubsystemVersion;
+  DWORD Win32VersionValue;
+  DWORD SizeOfImage;
+  DWORD SizeOfHeaders;
+  DWORD CheckSum;			/* 0x40 */
+  WORD  Subsystem;
+  WORD  DllCharacteristics;
+  DWORD SizeOfStackReserve;
+  DWORD SizeOfStackCommit;
+  DWORD SizeOfHeapReserve;		/* 0x50 */
+  DWORD SizeOfHeapCommit;
+  DWORD LoaderFlags;
+  DWORD NumberOfRvaAndSizes;
+  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /* 0x60 */
+  /* 0xE0 */
+} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
+
+typedef struct _IMAGE_NT_HEADERS {
+  DWORD Signature; /* "PE"\0\0 */	/* 0x00 */
+  IMAGE_FILE_HEADER FileHeader;		/* 0x04 */
+  IMAGE_OPTIONAL_HEADER32 OptionalHeader;	/* 0x18 */
+} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
+
+#ifdef _WIN64
+typedef IMAGE_NT_HEADERS64  IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
+#else
+typedef IMAGE_NT_HEADERS32  IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
+#endif
+
+#define IMAGE_SIZEOF_SHORT_NAME 8
+
+typedef struct _IMAGE_SECTION_HEADER {
+  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
+  union {
+    DWORD PhysicalAddress;
+    DWORD VirtualSize;
+  } Misc;
+  DWORD VirtualAddress;
+  DWORD SizeOfRawData;
+  DWORD PointerToRawData;
+  DWORD PointerToRelocations;
+  DWORD PointerToLinenumbers;
+  WORD  NumberOfRelocations;
+  WORD  NumberOfLinenumbers;
+  DWORD Characteristics;
+} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
+
+#define	IMAGE_SIZEOF_SECTION_HEADER 40
+
+#define IMAGE_FIRST_SECTION(ntheader) \
+  ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \
+                           ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))
+
+/* These defines are for the Characteristics bitfield. */
+/* #define IMAGE_SCN_TYPE_REG			0x00000000 - Reserved */
+/* #define IMAGE_SCN_TYPE_DSECT			0x00000001 - Reserved */
+/* #define IMAGE_SCN_TYPE_NOLOAD		0x00000002 - Reserved */
+/* #define IMAGE_SCN_TYPE_GROUP			0x00000004 - Reserved */
+#define IMAGE_SCN_TYPE_NO_PAD			0x00000008 /* Reserved */
+/* #define IMAGE_SCN_TYPE_COPY			0x00000010 - Reserved */
+
+#define IMAGE_SCN_CNT_CODE			0x00000020
+#define IMAGE_SCN_CNT_INITIALIZED_DATA		0x00000040
+#define IMAGE_SCN_CNT_UNINITIALIZED_DATA	0x00000080
+
+#define	IMAGE_SCN_LNK_OTHER			0x00000100
+#define	IMAGE_SCN_LNK_INFO			0x00000200
+/* #define	IMAGE_SCN_TYPE_OVER		0x00000400 - Reserved */
+#define	IMAGE_SCN_LNK_REMOVE			0x00000800
+#define	IMAGE_SCN_LNK_COMDAT			0x00001000
+
+/* 						0x00002000 - Reserved */
+/* #define IMAGE_SCN_MEM_PROTECTED 		0x00004000 - Obsolete */
+#define	IMAGE_SCN_MEM_FARDATA			0x00008000
+
+/* #define IMAGE_SCN_MEM_SYSHEAP		0x00010000 - Obsolete */
+#define	IMAGE_SCN_MEM_PURGEABLE			0x00020000
+#define	IMAGE_SCN_MEM_16BIT			0x00020000
+#define	IMAGE_SCN_MEM_LOCKED			0x00040000
+#define	IMAGE_SCN_MEM_PRELOAD			0x00080000
+
+#define	IMAGE_SCN_ALIGN_1BYTES			0x00100000
+#define	IMAGE_SCN_ALIGN_2BYTES			0x00200000
+#define	IMAGE_SCN_ALIGN_4BYTES			0x00300000
+#define	IMAGE_SCN_ALIGN_8BYTES			0x00400000
+#define	IMAGE_SCN_ALIGN_16BYTES			0x00500000  /* Default */
+#define	IMAGE_SCN_ALIGN_32BYTES			0x00600000
+#define	IMAGE_SCN_ALIGN_64BYTES			0x00700000
+#define	IMAGE_SCN_ALIGN_128BYTES		0x00800000
+#define	IMAGE_SCN_ALIGN_256BYTES		0x00900000
+#define	IMAGE_SCN_ALIGN_512BYTES		0x00A00000
+#define	IMAGE_SCN_ALIGN_1024BYTES		0x00B00000
+#define	IMAGE_SCN_ALIGN_2048BYTES		0x00C00000
+#define	IMAGE_SCN_ALIGN_4096BYTES		0x00D00000
+#define	IMAGE_SCN_ALIGN_8192BYTES		0x00E00000
+/* 						0x00F00000 - Unused */
+#define	IMAGE_SCN_ALIGN_MASK			0x00F00000
+
+#define IMAGE_SCN_LNK_NRELOC_OVFL		0x01000000
+
+
+#define IMAGE_SCN_MEM_DISCARDABLE		0x02000000
+#define IMAGE_SCN_MEM_NOT_CACHED		0x04000000
+#define IMAGE_SCN_MEM_NOT_PAGED			0x08000000
+#define IMAGE_SCN_MEM_SHARED			0x10000000
+#define IMAGE_SCN_MEM_EXECUTE			0x20000000
+#define IMAGE_SCN_MEM_READ			0x40000000
+#define IMAGE_SCN_MEM_WRITE			0x80000000
+
+#include <pshpack2.h>
+
+typedef struct _IMAGE_SYMBOL {
+    union {
+        BYTE    ShortName[8];
+        struct {
+            DWORD   Short;
+            DWORD   Long;
+        } Name;
+        DWORD   LongName[2];
+    } N;
+    DWORD   Value;
+    SHORT   SectionNumber;
+    WORD    Type;
+    BYTE    StorageClass;
+    BYTE    NumberOfAuxSymbols;
+} IMAGE_SYMBOL;
+typedef IMAGE_SYMBOL *PIMAGE_SYMBOL;
+
+#define IMAGE_SIZEOF_SYMBOL 18
+
+typedef struct _IMAGE_LINENUMBER {
+    union {
+        DWORD   SymbolTableIndex;
+        DWORD   VirtualAddress;
+    } Type;
+    WORD    Linenumber;
+} IMAGE_LINENUMBER;
+typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER;
+
+#define IMAGE_SIZEOF_LINENUMBER  6
+
+typedef union _IMAGE_AUX_SYMBOL {
+    struct {
+        DWORD    TagIndex;
+        union {
+            struct {
+                WORD    Linenumber;
+                WORD    Size;
+            } LnSz;
+           DWORD    TotalSize;
+        } Misc;
+        union {
+            struct {
+                DWORD    PointerToLinenumber;
+                DWORD    PointerToNextFunction;
+            } Function;
+            struct {
+                WORD     Dimension[4];
+            } Array;
+        } FcnAry;
+        WORD    TvIndex;
+    } Sym;
+    struct {
+        BYTE    Name[IMAGE_SIZEOF_SYMBOL];
+    } File;
+    struct {
+        DWORD   Length;
+        WORD    NumberOfRelocations;
+        WORD    NumberOfLinenumbers;
+        DWORD   CheckSum;
+        SHORT   Number;
+        BYTE    Selection;
+    } Section;
+} IMAGE_AUX_SYMBOL;
+typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL;
+
+#define IMAGE_SIZEOF_AUX_SYMBOL 18
+
+#include <poppack.h>
+
+#define IMAGE_SYM_UNDEFINED           (SHORT)0
+#define IMAGE_SYM_ABSOLUTE            (SHORT)-1
+#define IMAGE_SYM_DEBUG               (SHORT)-2
+
+#define IMAGE_SYM_TYPE_NULL                 0x0000
+#define IMAGE_SYM_TYPE_VOID                 0x0001
+#define IMAGE_SYM_TYPE_CHAR                 0x0002
+#define IMAGE_SYM_TYPE_SHORT                0x0003
+#define IMAGE_SYM_TYPE_INT                  0x0004
+#define IMAGE_SYM_TYPE_LONG                 0x0005
+#define IMAGE_SYM_TYPE_FLOAT                0x0006
+#define IMAGE_SYM_TYPE_DOUBLE               0x0007
+#define IMAGE_SYM_TYPE_STRUCT               0x0008
+#define IMAGE_SYM_TYPE_UNION                0x0009
+#define IMAGE_SYM_TYPE_ENUM                 0x000A
+#define IMAGE_SYM_TYPE_MOE                  0x000B
+#define IMAGE_SYM_TYPE_BYTE                 0x000C
+#define IMAGE_SYM_TYPE_WORD                 0x000D
+#define IMAGE_SYM_TYPE_UINT                 0x000E
+#define IMAGE_SYM_TYPE_DWORD                0x000F
+#define IMAGE_SYM_TYPE_PCODE                0x8000
+
+#define IMAGE_SYM_DTYPE_NULL                0
+#define IMAGE_SYM_DTYPE_POINTER             1
+#define IMAGE_SYM_DTYPE_FUNCTION            2
+#define IMAGE_SYM_DTYPE_ARRAY               3
+
+#define IMAGE_SYM_CLASS_END_OF_FUNCTION     (BYTE )-1
+#define IMAGE_SYM_CLASS_NULL                0x0000
+#define IMAGE_SYM_CLASS_AUTOMATIC           0x0001
+#define IMAGE_SYM_CLASS_EXTERNAL            0x0002
+#define IMAGE_SYM_CLASS_STATIC              0x0003
+#define IMAGE_SYM_CLASS_REGISTER            0x0004
+#define IMAGE_SYM_CLASS_EXTERNAL_DEF        0x0005
+#define IMAGE_SYM_CLASS_LABEL               0x0006
+#define IMAGE_SYM_CLASS_UNDEFINED_LABEL     0x0007
+#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT    0x0008
+#define IMAGE_SYM_CLASS_ARGUMENT            0x0009
+#define IMAGE_SYM_CLASS_STRUCT_TAG          0x000A
+#define IMAGE_SYM_CLASS_MEMBER_OF_UNION     0x000B
+#define IMAGE_SYM_CLASS_UNION_TAG           0x000C
+#define IMAGE_SYM_CLASS_TYPE_DEFINITION     0x000D
+#define IMAGE_SYM_CLASS_UNDEFINED_STATIC    0x000E
+#define IMAGE_SYM_CLASS_ENUM_TAG            0x000F
+#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM      0x0010
+#define IMAGE_SYM_CLASS_REGISTER_PARAM      0x0011
+#define IMAGE_SYM_CLASS_BIT_FIELD           0x0012
+
+#define IMAGE_SYM_CLASS_FAR_EXTERNAL        0x0044
+#define IMAGE_SYM_CLASS_BLOCK               0x0064
+#define IMAGE_SYM_CLASS_FUNCTION            0x0065
+#define IMAGE_SYM_CLASS_END_OF_STRUCT       0x0066
+#define IMAGE_SYM_CLASS_FILE                0x0067
+#define IMAGE_SYM_CLASS_SECTION             0x0068
+#define IMAGE_SYM_CLASS_WEAK_EXTERNAL       0x0069
+
+#define N_BTMASK                            0x000F
+#define N_TMASK                             0x0030
+#define N_TMASK1                            0x00C0
+#define N_TMASK2                            0x00F0
+#define N_BTSHFT                            4
+#define N_TSHIFT                            2
+
+#define BTYPE(x) ((x) & N_BTMASK)
+
+#ifndef ISPTR
+#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
+#endif
+
+#ifndef ISFCN
+#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
+#endif
+
+#ifndef ISARY
+#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
+#endif
+
+#ifndef ISTAG
+#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
+#endif
+
+#ifndef INCREF
+#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
+#endif
+#ifndef DECREF
+#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
+#endif
+
+#define IMAGE_COMDAT_SELECT_NODUPLICATES    1
+#define IMAGE_COMDAT_SELECT_ANY             2
+#define IMAGE_COMDAT_SELECT_SAME_SIZE       3
+#define IMAGE_COMDAT_SELECT_EXACT_MATCH     4
+#define IMAGE_COMDAT_SELECT_ASSOCIATIVE     5
+#define IMAGE_COMDAT_SELECT_LARGEST         6
+#define IMAGE_COMDAT_SELECT_NEWEST          7
+
+#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY  1
+#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY    2
+#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS      3
+
+/* Export module directory */
+
+typedef struct _IMAGE_EXPORT_DIRECTORY {
+	DWORD	Characteristics;
+	DWORD	TimeDateStamp;
+	WORD	MajorVersion;
+	WORD	MinorVersion;
+	DWORD	Name;
+	DWORD	Base;
+	DWORD	NumberOfFunctions;
+	DWORD	NumberOfNames;
+	DWORD	AddressOfFunctions;
+	DWORD	AddressOfNames;
+	DWORD	AddressOfNameOrdinals;
+} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
+
+/* Import name entry */
+typedef struct _IMAGE_IMPORT_BY_NAME {
+	WORD	Hint;
+	BYTE	Name[1];
+} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
+
+#include <pshpack8.h>
+/* Import thunk */
+typedef struct _IMAGE_THUNK_DATA64 {
+	union {
+		ULONGLONG ForwarderString;
+		ULONGLONG Function;
+		ULONGLONG Ordinal;
+		ULONGLONG AddressOfData;
+	} u1;
+} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;
+#include <poppack.h>
+
+typedef struct _IMAGE_THUNK_DATA32 {
+	union {
+		DWORD ForwarderString;
+		DWORD Function;
+		DWORD Ordinal;
+		DWORD AddressOfData;
+	} u1;
+} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
+
+/* Import module directory */
+
+typedef struct _IMAGE_IMPORT_DESCRIPTOR {
+	union {
+		DWORD	Characteristics; /* 0 for terminating null import descriptor  */
+		DWORD	OriginalFirstThunk;	/* RVA to original unbound IAT */
+	} DUMMYUNIONNAME;
+	DWORD	TimeDateStamp;	/* 0 if not bound,
+				 * -1 if bound, and real date\time stamp
+				 *    in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
+				 * (new BIND)
+				 * otherwise date/time stamp of DLL bound to
+				 * (Old BIND)
+				 */
+	DWORD	ForwarderChain;	/* -1 if no forwarders */
+	DWORD	Name;
+	/* RVA to IAT (if bound this IAT has actual addresses) */
+	DWORD	FirstThunk;
+} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
+
+#define IMAGE_ORDINAL_FLAG64             (((ULONGLONG)0x80000000 << 32) | 0x00000000)
+#define IMAGE_ORDINAL_FLAG32             0x80000000
+#define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
+#define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
+#define IMAGE_ORDINAL64(ordinal)         ((ordinal) & 0xffff)
+#define IMAGE_ORDINAL32(ordinal)         ((ordinal) & 0xffff)
+
+#ifdef _WIN64
+#define IMAGE_ORDINAL_FLAG              IMAGE_ORDINAL_FLAG64
+#define IMAGE_SNAP_BY_ORDINAL(Ordinal)  IMAGE_SNAP_BY_ORDINAL64(Ordinal)
+#define IMAGE_ORDINAL(Ordinal)          IMAGE_ORDINAL64(Ordinal)
+typedef IMAGE_THUNK_DATA64              IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA64             PIMAGE_THUNK_DATA;
+#else
+#define IMAGE_ORDINAL_FLAG              IMAGE_ORDINAL_FLAG32
+#define IMAGE_SNAP_BY_ORDINAL(Ordinal)  IMAGE_SNAP_BY_ORDINAL32(Ordinal)
+#define IMAGE_ORDINAL(Ordinal)          IMAGE_ORDINAL32(Ordinal)
+typedef IMAGE_THUNK_DATA32              IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA32             PIMAGE_THUNK_DATA;
+#endif
+
+typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
+{
+    DWORD   TimeDateStamp;
+    WORD    OffsetModuleName;
+    WORD    NumberOfModuleForwarderRefs;
+/* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
+} IMAGE_BOUND_IMPORT_DESCRIPTOR,  *PIMAGE_BOUND_IMPORT_DESCRIPTOR;
+
+typedef struct _IMAGE_BOUND_FORWARDER_REF
+{
+    DWORD   TimeDateStamp;
+    WORD    OffsetModuleName;
+    WORD    Reserved;
+} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
+
+typedef struct _IMAGE_BASE_RELOCATION
+{
+	DWORD	VirtualAddress;
+	DWORD	SizeOfBlock;
+	/* WORD	TypeOffset[1]; */
+} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
+
+#include <pshpack2.h>
+
+typedef struct _IMAGE_RELOCATION
+{
+    union {
+        DWORD   VirtualAddress;
+        DWORD   RelocCount;
+    } DUMMYUNIONNAME;
+    DWORD   SymbolTableIndex;
+    WORD    Type;
+} IMAGE_RELOCATION, *PIMAGE_RELOCATION;
+
+#include <poppack.h>
+
+#define IMAGE_SIZEOF_RELOCATION 10
+
+typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
+{
+    union
+    {
+        DWORD AllAttributes;
+        struct
+        {
+            DWORD RvaBased:1;
+            DWORD ReservedAttributes:31;
+        } DUMMYSTRUCTNAME;
+    } Attributes;
+
+    DWORD DllNameRVA;
+    DWORD ModuleHandleRVA;
+    DWORD ImportAddressTableRVA;
+    DWORD ImportNameTableRVA;
+    DWORD BoundImportAddressTableRVA;
+    DWORD UnloadInformationTableRVA;
+    DWORD TimeDateStamp;
+} IMAGE_DELAYLOAD_DESCRIPTOR, *PIMAGE_DELAYLOAD_DESCRIPTOR;
+typedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR;
+
+/* generic relocation types */
+#define IMAGE_REL_BASED_ABSOLUTE 		0
+#define IMAGE_REL_BASED_HIGH			1
+#define IMAGE_REL_BASED_LOW			2
+#define IMAGE_REL_BASED_HIGHLOW			3
+#define IMAGE_REL_BASED_HIGHADJ			4
+#define IMAGE_REL_BASED_MIPS_JMPADDR		5
+#define IMAGE_REL_BASED_ARM_MOV32A		5 /* yes, 5 too */
+#define IMAGE_REL_BASED_ARM_MOV32		5 /* yes, 5 too */
+#define IMAGE_REL_BASED_SECTION			6
+#define	IMAGE_REL_BASED_REL			7
+#define	IMAGE_REL_BASED_ARM_MOV32T		7 /* yes, 7 too */
+#define IMAGE_REL_BASED_THUMB_MOV32		7 /* yes, 7 too */
+#define IMAGE_REL_BASED_MIPS_JMPADDR16		9
+#define IMAGE_REL_BASED_IA64_IMM64		9 /* yes, 9 too */
+#define IMAGE_REL_BASED_DIR64			10
+#define IMAGE_REL_BASED_HIGH3ADJ		11
+
+/* I386 relocation types */
+#define	IMAGE_REL_I386_ABSOLUTE			0
+#define	IMAGE_REL_I386_DIR16			1
+#define	IMAGE_REL_I386_REL16			2
+#define	IMAGE_REL_I386_DIR32			6
+#define	IMAGE_REL_I386_DIR32NB			7
+#define	IMAGE_REL_I386_SEG12			9
+#define	IMAGE_REL_I386_SECTION			10
+#define	IMAGE_REL_I386_SECREL			11
+#define	IMAGE_REL_I386_TOKEN			12
+#define	IMAGE_REL_I386_SECREL7			13
+#define	IMAGE_REL_I386_REL32			20
+
+/* MIPS relocation types */
+#define IMAGE_REL_MIPS_ABSOLUTE		0x0000
+#define IMAGE_REL_MIPS_REFHALF		0x0001
+#define IMAGE_REL_MIPS_REFWORD		0x0002
+#define IMAGE_REL_MIPS_JMPADDR		0x0003
+#define IMAGE_REL_MIPS_REFHI		0x0004
+#define IMAGE_REL_MIPS_REFLO		0x0005
+#define IMAGE_REL_MIPS_GPREL		0x0006
+#define IMAGE_REL_MIPS_LITERAL		0x0007
+#define IMAGE_REL_MIPS_SECTION		0x000A
+#define IMAGE_REL_MIPS_SECREL		0x000B
+#define IMAGE_REL_MIPS_SECRELLO		0x000C
+#define IMAGE_REL_MIPS_SECRELHI		0x000D
+#define IMAGE_REL_MIPS_TOKEN		0x000E
+#define IMAGE_REL_MIPS_JMPADDR16	0x0010
+#define IMAGE_REL_MIPS_REFWORDNB	0x0022
+#define IMAGE_REL_MIPS_PAIR		0x0025
+
+/* ALPHA relocation types */
+#define IMAGE_REL_ALPHA_ABSOLUTE	0x0000
+#define IMAGE_REL_ALPHA_REFLONG		0x0001
+#define IMAGE_REL_ALPHA_REFQUAD		0x0002
+#define IMAGE_REL_ALPHA_GPREL		0x0003
+#define IMAGE_REL_ALPHA_LITERAL		0x0004
+#define IMAGE_REL_ALPHA_LITUSE		0x0005
+#define IMAGE_REL_ALPHA_GPDISP		0x0006
+#define IMAGE_REL_ALPHA_BRADDR		0x0007
+#define IMAGE_REL_ALPHA_HINT		0x0008
+#define IMAGE_REL_ALPHA_INLINE_REFLONG	0x0009
+#define IMAGE_REL_ALPHA_REFHI		0x000A
+#define IMAGE_REL_ALPHA_REFLO		0x000B
+#define IMAGE_REL_ALPHA_PAIR		0x000C
+#define IMAGE_REL_ALPHA_MATCH		0x000D
+#define IMAGE_REL_ALPHA_SECTION		0x000E
+#define IMAGE_REL_ALPHA_SECREL		0x000F
+#define IMAGE_REL_ALPHA_REFLONGNB	0x0010
+#define IMAGE_REL_ALPHA_SECRELLO	0x0011
+#define IMAGE_REL_ALPHA_SECRELHI	0x0012
+#define IMAGE_REL_ALPHA_REFQ3		0x0013
+#define IMAGE_REL_ALPHA_REFQ2		0x0014
+#define IMAGE_REL_ALPHA_REFQ1		0x0015
+#define IMAGE_REL_ALPHA_GPRELLO		0x0016
+#define IMAGE_REL_ALPHA_GPRELHI		0x0017
+
+/* PowerPC relocation types */
+#define IMAGE_REL_PPC_ABSOLUTE          0x0000
+#define IMAGE_REL_PPC_ADDR64            0x0001
+#define IMAGE_REL_PPC_ADDR            0x0002
+#define IMAGE_REL_PPC_ADDR24            0x0003
+#define IMAGE_REL_PPC_ADDR16            0x0004
+#define IMAGE_REL_PPC_ADDR14            0x0005
+#define IMAGE_REL_PPC_REL24             0x0006
+#define IMAGE_REL_PPC_REL14             0x0007
+#define IMAGE_REL_PPC_TOCREL16          0x0008
+#define IMAGE_REL_PPC_TOCREL14          0x0009
+#define IMAGE_REL_PPC_ADDR32NB          0x000A
+#define IMAGE_REL_PPC_SECREL            0x000B
+#define IMAGE_REL_PPC_SECTION           0x000C
+#define IMAGE_REL_PPC_IFGLUE            0x000D
+#define IMAGE_REL_PPC_IMGLUE            0x000E
+#define IMAGE_REL_PPC_SECREL16          0x000F
+#define IMAGE_REL_PPC_REFHI             0x0010
+#define IMAGE_REL_PPC_REFLO             0x0011
+#define IMAGE_REL_PPC_PAIR              0x0012
+#define IMAGE_REL_PPC_SECRELLO          0x0013
+#define IMAGE_REL_PPC_SECRELHI          0x0014
+#define IMAGE_REL_PPC_GPREL		0x0015
+#define IMAGE_REL_PPC_TOKEN             0x0016
+#define IMAGE_REL_PPC_TYPEMASK          0x00FF
+/* modifier bits */
+#define IMAGE_REL_PPC_NEG               0x0100
+#define IMAGE_REL_PPC_BRTAKEN           0x0200
+#define IMAGE_REL_PPC_BRNTAKEN          0x0400
+#define IMAGE_REL_PPC_TOCDEFN           0x0800
+
+/* SH3 relocation types */
+#define IMAGE_REL_SH3_ABSOLUTE          0x0000
+#define IMAGE_REL_SH3_DIRECT16          0x0001
+#define IMAGE_REL_SH3_DIRECT          0x0002
+#define IMAGE_REL_SH3_DIRECT8           0x0003
+#define IMAGE_REL_SH3_DIRECT8_WORD      0x0004
+#define IMAGE_REL_SH3_DIRECT8_LONG      0x0005
+#define IMAGE_REL_SH3_DIRECT4           0x0006
+#define IMAGE_REL_SH3_DIRECT4_WORD      0x0007
+#define IMAGE_REL_SH3_DIRECT4_LONG      0x0008
+#define IMAGE_REL_SH3_PCREL8_WORD       0x0009
+#define IMAGE_REL_SH3_PCREL8_LONG       0x000A
+#define IMAGE_REL_SH3_PCREL12_WORD      0x000B
+#define IMAGE_REL_SH3_STARTOF_SECTION   0x000C
+#define IMAGE_REL_SH3_SIZEOF_SECTION    0x000D
+#define IMAGE_REL_SH3_SECTION           0x000E
+#define IMAGE_REL_SH3_SECREL            0x000F
+#define IMAGE_REL_SH3_DIRECT32_NB       0x0010
+#define IMAGE_REL_SH3_GPREL4_LONG       0x0011
+#define IMAGE_REL_SH3_TOKEN             0x0012
+
+/* ARM relocation types */
+#define IMAGE_REL_ARM_ABSOLUTE		0x0000
+#define IMAGE_REL_ARM_ADDR		0x0001
+#define IMAGE_REL_ARM_ADDR32NB		0x0002
+#define IMAGE_REL_ARM_BRANCH24		0x0003
+#define IMAGE_REL_ARM_BRANCH11		0x0004
+#define IMAGE_REL_ARM_TOKEN		0x0005
+#define IMAGE_REL_ARM_GPREL12		0x0006
+#define IMAGE_REL_ARM_GPREL7		0x0007
+#define IMAGE_REL_ARM_BLX24		0x0008
+#define IMAGE_REL_ARM_BLX11		0x0009
+#define IMAGE_REL_ARM_SECTION		0x000E
+#define IMAGE_REL_ARM_SECREL		0x000F
+#define IMAGE_REL_ARM_MOV32A		0x0010
+#define IMAGE_REL_ARM_MOV32T		0x0011
+#define IMAGE_REL_ARM_BRANCH20T	0x0012
+#define IMAGE_REL_ARM_BRANCH24T	0x0014
+#define IMAGE_REL_ARM_BLX23T		0x0015
+
+/* IA64 relocation types */
+#define IMAGE_REL_IA64_ABSOLUTE		0x0000
+#define IMAGE_REL_IA64_IMM14		0x0001
+#define IMAGE_REL_IA64_IMM22		0x0002
+#define IMAGE_REL_IA64_IMM64		0x0003
+#define IMAGE_REL_IA64_DIR		0x0004
+#define IMAGE_REL_IA64_DIR64		0x0005
+#define IMAGE_REL_IA64_PCREL21B		0x0006
+#define IMAGE_REL_IA64_PCREL21M		0x0007
+#define IMAGE_REL_IA64_PCREL21F		0x0008
+#define IMAGE_REL_IA64_GPREL22		0x0009
+#define IMAGE_REL_IA64_LTOFF22		0x000A
+#define IMAGE_REL_IA64_SECTION		0x000B
+#define IMAGE_REL_IA64_SECREL22		0x000C
+#define IMAGE_REL_IA64_SECREL64I	0x000D
+#define IMAGE_REL_IA64_SECREL		0x000E
+#define IMAGE_REL_IA64_LTOFF64		0x000F
+#define IMAGE_REL_IA64_DIR32NB		0x0010
+#define IMAGE_REL_IA64_SREL14		0x0011
+#define IMAGE_REL_IA64_SREL22		0x0012
+#define IMAGE_REL_IA64_SREL32		0x0013
+#define IMAGE_REL_IA64_UREL32		0x0014
+#define IMAGE_REL_IA64_PCREL60X	0x0015
+#define IMAGE_REL_IA64_PCREL60B	0x0016
+#define IMAGE_REL_IA64_PCREL60F	0x0017
+#define IMAGE_REL_IA64_PCREL60I	0x0018
+#define IMAGE_REL_IA64_PCREL60M	0x0019
+#define IMAGE_REL_IA64_IMMGPREL64	0x001A
+#define IMAGE_REL_IA64_TOKEN		0x001B
+#define IMAGE_REL_IA64_GPREL32		0x001C
+#define IMAGE_REL_IA64_ADDEND		0x001F
+
+/* AMD64 relocation types */
+#define IMAGE_REL_AMD64_ABSOLUTE        0x0000
+#define IMAGE_REL_AMD64_ADDR64          0x0001
+#define IMAGE_REL_AMD64_ADDR32          0x0002
+#define IMAGE_REL_AMD64_ADDR32NB        0x0003
+#define IMAGE_REL_AMD64_REL32           0x0004
+#define IMAGE_REL_AMD64_REL32_1         0x0005
+#define IMAGE_REL_AMD64_REL32_2         0x0006
+#define IMAGE_REL_AMD64_REL32_3         0x0007
+#define IMAGE_REL_AMD64_REL32_4         0x0008
+#define IMAGE_REL_AMD64_REL32_5         0x0009
+#define IMAGE_REL_AMD64_SECTION         0x000A
+#define IMAGE_REL_AMD64_SECREL          0x000B
+#define IMAGE_REL_AMD64_SECREL7         0x000C
+#define IMAGE_REL_AMD64_TOKEN           0x000D
+#define IMAGE_REL_AMD64_SREL32          0x000E
+#define IMAGE_REL_AMD64_PAIR            0x000F
+#define IMAGE_REL_AMD64_SSPAN32         0x0010
+
+/* archive format */
+
+#define IMAGE_ARCHIVE_START_SIZE             8
+#define IMAGE_ARCHIVE_START                  "!<arch>\n"
+#define IMAGE_ARCHIVE_END                    "`\n"
+#define IMAGE_ARCHIVE_PAD                    "\n"
+#define IMAGE_ARCHIVE_LINKER_MEMBER          "/               "
+#define IMAGE_ARCHIVE_LONGNAMES_MEMBER       "//              "
+
+typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
+{
+    BYTE     Name[16];
+    BYTE     Date[12];
+    BYTE     UserID[6];
+    BYTE     GroupID[6];
+    BYTE     Mode[8];
+    BYTE     Size[10];
+    BYTE     EndHeader[2];
+} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;
+
+#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
+
+typedef struct _IMPORT_OBJECT_HEADER
+{
+    WORD     Sig1;
+    WORD     Sig2;
+    WORD     Version;
+    WORD     Machine;
+    DWORD    TimeDateStamp;
+    DWORD    SizeOfData;
+    union
+    {
+        WORD Ordinal;
+        WORD Hint;
+    } DUMMYUNIONNAME;
+    WORD     Type : 2;
+    WORD     NameType : 3;
+    WORD     Reserved : 11;
+} IMPORT_OBJECT_HEADER;
+
+#define IMPORT_OBJECT_HDR_SIG2  0xffff
+
+typedef enum IMPORT_OBJECT_TYPE
+{
+    IMPORT_OBJECT_CODE = 0,
+    IMPORT_OBJECT_DATA = 1,
+    IMPORT_OBJECT_CONST = 2
+} IMPORT_OBJECT_TYPE;
+
+typedef enum IMPORT_OBJECT_NAME_TYPE
+{
+    IMPORT_OBJECT_ORDINAL = 0,
+    IMPORT_OBJECT_NAME = 1,
+    IMPORT_OBJECT_NAME_NO_PREFIX = 2,
+    IMPORT_OBJECT_NAME_UNDECORATE = 3
+} IMPORT_OBJECT_NAME_TYPE;
+
+typedef struct _ANON_OBJECT_HEADER
+{
+    WORD     Sig1;
+    WORD     Sig2;
+    WORD     Version;
+    WORD     Machine;
+    DWORD    TimeDateStamp;
+    CLSID    ClassID;
+    DWORD    SizeOfData;
+} ANON_OBJECT_HEADER;
+
+/*
+ * Resource directory stuff
+ */
+typedef struct _IMAGE_RESOURCE_DIRECTORY {
+	DWORD	Characteristics;
+	DWORD	TimeDateStamp;
+	WORD	MajorVersion;
+	WORD	MinorVersion;
+	WORD	NumberOfNamedEntries;
+	WORD	NumberOfIdEntries;
+	/*  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
+} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
+
+#define	IMAGE_RESOURCE_NAME_IS_STRING		0x80000000
+#define	IMAGE_RESOURCE_DATA_IS_DIRECTORY	0x80000000
+
+typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
+	union {
+		struct {
+#ifdef BITFIELDS_BIGENDIAN
+			unsigned NameIsString:1;
+			unsigned NameOffset:31;
+#else
+			unsigned NameOffset:31;
+			unsigned NameIsString:1;
+#endif
+		} DUMMYSTRUCTNAME;
+		DWORD   Name;
+#ifdef WORDS_BIGENDIAN
+		WORD    __pad;
+		WORD    Id;
+#else
+		WORD    Id;
+		WORD    __pad;
+#endif
+	} DUMMYUNIONNAME;
+	union {
+		DWORD   OffsetToData;
+		struct {
+#ifdef BITFIELDS_BIGENDIAN
+			unsigned DataIsDirectory:1;
+			unsigned OffsetToDirectory:31;
+#else
+			unsigned OffsetToDirectory:31;
+			unsigned DataIsDirectory:1;
+#endif
+		} DUMMYSTRUCTNAME2;
+	} DUMMYUNIONNAME2;
+} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
+
+
+typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
+	WORD	Length;
+	CHAR	NameString[ 1 ];
+} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
+
+typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
+	WORD	Length;
+	WCHAR	NameString[ 1 ];
+} IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
+
+typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
+	DWORD	OffsetToData;
+	DWORD	Size;
+	DWORD	CodePage;
+	DWORD	Reserved;
+} IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
+
+
+typedef VOID (CALLBACK *PIMAGE_TLS_CALLBACK)(
+	LPVOID DllHandle,DWORD Reason,LPVOID Reserved
+);
+
+typedef struct _IMAGE_TLS_DIRECTORY64 {
+    ULONGLONG   StartAddressOfRawData;
+    ULONGLONG   EndAddressOfRawData;
+    ULONGLONG   AddressOfIndex;
+    ULONGLONG   AddressOfCallBacks;
+    DWORD       SizeOfZeroFill;
+    DWORD       Characteristics;
+} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
+
+typedef struct _IMAGE_TLS_DIRECTORY32 {
+    DWORD   StartAddressOfRawData;
+    DWORD   EndAddressOfRawData;
+    DWORD   AddressOfIndex;
+    DWORD   AddressOfCallBacks;
+    DWORD   SizeOfZeroFill;
+    DWORD   Characteristics;
+} IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32;
+
+#ifdef _WIN64
+typedef IMAGE_TLS_DIRECTORY64           IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY64          PIMAGE_TLS_DIRECTORY;
+#else
+typedef IMAGE_TLS_DIRECTORY32           IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY32          PIMAGE_TLS_DIRECTORY;
+#endif
+
+typedef struct _IMAGE_DEBUG_DIRECTORY {
+  DWORD Characteristics;
+  DWORD TimeDateStamp;
+  WORD  MajorVersion;
+  WORD  MinorVersion;
+  DWORD Type;
+  DWORD SizeOfData;
+  DWORD AddressOfRawData;
+  DWORD PointerToRawData;
+} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
+
+#define IMAGE_DEBUG_TYPE_UNKNOWN        0
+#define IMAGE_DEBUG_TYPE_COFF           1
+#define IMAGE_DEBUG_TYPE_CODEVIEW       2
+#define IMAGE_DEBUG_TYPE_FPO            3
+#define IMAGE_DEBUG_TYPE_MISC           4
+#define IMAGE_DEBUG_TYPE_EXCEPTION      5
+#define IMAGE_DEBUG_TYPE_FIXUP          6
+#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC    7
+#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC  8
+#define IMAGE_DEBUG_TYPE_BORLAND        9
+#define IMAGE_DEBUG_TYPE_RESERVED10    10
+#define IMAGE_DEBUG_TYPE_CLSID         11
+
+typedef enum ReplacesCorHdrNumericDefines
+{
+    COMIMAGE_FLAGS_ILONLY           = 0x00000001,
+    COMIMAGE_FLAGS_32BITREQUIRED    = 0x00000002,
+    COMIMAGE_FLAGS_IL_LIBRARY       = 0x00000004,
+    COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
+    COMIMAGE_FLAGS_TRACKDEBUGDATA   = 0x00010000,
+
+    COR_VERSION_MAJOR_V2       = 2,
+    COR_VERSION_MAJOR          = COR_VERSION_MAJOR_V2,
+    COR_VERSION_MINOR          = 0,
+    COR_DELETED_NAME_LENGTH    = 8,
+    COR_VTABLEGAP_NAME_LENGTH  = 8,
+
+    NATIVE_TYPE_MAX_CB = 1,
+    COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xff,
+
+    IMAGE_COR_MIH_METHODRVA  = 0x01,
+    IMAGE_COR_MIH_EHRVA      = 0x02,
+    IMAGE_COR_MIH_BASICBLOCK = 0x08,
+
+    COR_VTABLE_32BIT             = 0x01,
+    COR_VTABLE_64BIT             = 0x02,
+    COR_VTABLE_FROM_UNMANAGED    = 0x04,
+    COR_VTABLE_CALL_MOST_DERIVED = 0x10,
+
+    IMAGE_COR_EATJ_THUNK_SIZE = 32,
+
+    MAX_CLASS_NAME   = 1024,
+    MAX_PACKAGE_NAME = 1024,
+} ReplacesCorHdrNumericDefines;
+
+typedef struct IMAGE_COR20_HEADER
+{
+    DWORD cb;
+    WORD  MajorRuntimeVersion;
+    WORD  MinorRuntimeVersion;
+
+    IMAGE_DATA_DIRECTORY MetaData;
+    DWORD Flags;
+    union {
+        DWORD EntryPointToken;
+        DWORD EntryPointRVA;
+    } DUMMYUNIONNAME;
+
+    IMAGE_DATA_DIRECTORY Resources;
+    IMAGE_DATA_DIRECTORY StrongNameSignature;
+    IMAGE_DATA_DIRECTORY CodeManagerTable;
+    IMAGE_DATA_DIRECTORY VTableFixups;
+    IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
+    IMAGE_DATA_DIRECTORY ManagedNativeHeader;
+
+} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
+
+typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
+  DWORD NumberOfSymbols;
+  DWORD LvaToFirstSymbol;
+  DWORD NumberOfLinenumbers;
+  DWORD LvaToFirstLinenumber;
+  DWORD RvaToFirstByteOfCode;
+  DWORD RvaToLastByteOfCode;
+  DWORD RvaToFirstByteOfData;
+  DWORD RvaToLastByteOfData;
+} IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;
+
+#define FRAME_FPO       0
+#define FRAME_TRAP      1
+#define FRAME_TSS       2
+#define FRAME_NONFPO    3
+
+typedef struct _FPO_DATA {
+  DWORD ulOffStart;
+  DWORD cbProcSize;
+  DWORD cdwLocals;
+  WORD  cdwParams;
+  WORD  cbProlog : 8;
+  WORD  cbRegs   : 3;
+  WORD  fHasSEH  : 1;
+  WORD  fUseBP   : 1;
+  WORD  reserved : 1;
+  WORD  cbFrame  : 2;
+} FPO_DATA, *PFPO_DATA;
+
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
+  DWORD Size;
+  DWORD TimeDateStamp;
+  WORD  MajorVersion;
+  WORD  MinorVersion;
+  DWORD GlobalFlagsClear;
+  DWORD GlobalFlagsSet;
+  DWORD CriticalSectionDefaultTimeout;
+  DWORD DeCommitFreeBlockThreshold;
+  DWORD DeCommitTotalFreeThreshold;
+  PVOID LockPrefixTable;
+  DWORD MaximumAllocationSize;
+  DWORD VirtualMemoryThreshold;
+  DWORD ProcessHeapFlags;
+  DWORD ProcessAffinityMask;
+  WORD  CSDVersion;
+  WORD  Reserved1;
+  PVOID EditList;
+  DWORD SecurityCookie;
+  DWORD SEHandlerTable;
+  DWORD SEHandlerCount;
+} IMAGE_LOAD_CONFIG_DIRECTORY, *PIMAGE_LOAD_CONFIG_DIRECTORY;
+
+typedef struct _IMAGE_FUNCTION_ENTRY {
+  DWORD StartingAddress;
+  DWORD EndingAddress;
+  DWORD EndOfPrologue;
+} IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY;
+
+#define IMAGE_DEBUG_MISC_EXENAME    1
+
+typedef struct _IMAGE_DEBUG_MISC {
+    DWORD       DataType;
+    DWORD       Length;
+    BYTE        Unicode;
+    BYTE        Reserved[ 3 ];
+    BYTE        Data[ 1 ];
+} IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;
+
+/* This is the structure that appears at the very start of a .DBG file. */
+
+typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
+	WORD	Signature;
+	WORD	Flags;
+	WORD	Machine;
+	WORD	Characteristics;
+	DWORD	TimeDateStamp;
+	DWORD	CheckSum;
+	DWORD	ImageBase;
+	DWORD	SizeOfImage;
+	DWORD	NumberOfSections;
+	DWORD	ExportedNamesSize;
+	DWORD	DebugDirectorySize;
+	DWORD	SectionAlignment;
+	DWORD	Reserved[ 2 ];
+} IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
+
+#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
+
+
+typedef struct tagMESSAGE_RESOURCE_ENTRY {
+	WORD	Length;
+	WORD	Flags;
+	BYTE	Text[1];
+} MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
+#define	MESSAGE_RESOURCE_UNICODE	0x0001
+
+typedef struct tagMESSAGE_RESOURCE_BLOCK {
+	DWORD	LowId;
+	DWORD	HighId;
+	DWORD	OffsetToEntries;
+} MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
+
+typedef struct tagMESSAGE_RESOURCE_DATA {
+	DWORD			NumberOfBlocks;
+	MESSAGE_RESOURCE_BLOCK	Blocks[ 1 ];
+} MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
+
+/*
+ * Here follows typedefs for security and tokens.
+ */
+
+/*
+ * First a constant for the following typedefs.
+ */
+
+#define ANYSIZE_ARRAY   1
+
+/* FIXME:  Orphan.  What does it point to? */
+typedef PVOID PACCESS_TOKEN;
+typedef PVOID PSECURITY_DESCRIPTOR;
+typedef PVOID PSID;
+
+typedef enum _TOKEN_ELEVATION_TYPE {
+  TokenElevationTypeDefault = 1,
+  TokenElevationTypeFull,
+  TokenElevationTypeLimited
+} TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
+
+/*
+ * TOKEN_INFORMATION_CLASS
+ */
+
+typedef enum _TOKEN_INFORMATION_CLASS {
+  TokenUser = 1,
+  TokenGroups,
+  TokenPrivileges,
+  TokenOwner,
+  TokenPrimaryGroup,
+  TokenDefaultDacl,
+  TokenSource,
+  TokenType,
+  TokenImpersonationLevel,
+  TokenStatistics,
+  TokenRestrictedSids,
+  TokenSessionId,
+  TokenGroupsAndPrivileges,
+  TokenSessionReference,
+  TokenSandBoxInert,
+  TokenAuditPolicy,
+  TokenOrigin,
+  TokenElevationType,
+  TokenLinkedToken,
+  TokenElevation,
+  TokenHasRestrictions,
+  TokenAccessInformation,
+  TokenVirtualizationAllowed,
+  TokenVirtualizationEnabled,
+  TokenIntegrityLevel,
+  TokenUIAccess,
+  TokenMandatoryPolicy,
+  TokenLogonSid,
+  MaxTokenInfoClass
+} TOKEN_INFORMATION_CLASS;
+
+#define TOKEN_TOKEN_ADJUST_DEFAULT   0x0080
+#define TOKEN_ADJUST_GROUPS          0x0040
+#define TOKEN_ADJUST_PRIVILEGES      0x0020
+#define TOKEN_ADJUST_SESSIONID       0x0100
+#define TOKEN_ASSIGN_PRIMARY         0x0001
+#define TOKEN_DUPLICATE              0x0002
+#define TOKEN_EXECUTE                STANDARD_RIGHTS_EXECUTE
+#define TOKEN_IMPERSONATE            0x0004
+#define TOKEN_QUERY                  0x0008
+#define TOKEN_QUERY_SOURCE           0x0010
+#define TOKEN_ADJUST_DEFAULT         0x0080
+#define TOKEN_READ                   (STANDARD_RIGHTS_READ|TOKEN_QUERY)
+#define TOKEN_WRITE                  (STANDARD_RIGHTS_WRITE     | \
+					TOKEN_ADJUST_PRIVILEGES | \
+					TOKEN_ADJUST_GROUPS | \
+					TOKEN_ADJUST_DEFAULT )
+#define TOKEN_ALL_ACCESS             (STANDARD_RIGHTS_REQUIRED | \
+					TOKEN_ASSIGN_PRIMARY | \
+					TOKEN_DUPLICATE | \
+					TOKEN_IMPERSONATE | \
+					TOKEN_QUERY | \
+					TOKEN_QUERY_SOURCE | \
+					TOKEN_ADJUST_PRIVILEGES | \
+					TOKEN_ADJUST_GROUPS | \
+					TOKEN_ADJUST_SESSIONID | \
+					TOKEN_ADJUST_DEFAULT )
+
+#ifndef _SECURITY_DEFINED
+#define _SECURITY_DEFINED
+
+
+typedef DWORD ACCESS_MASK, *PACCESS_MASK;
+
+typedef struct _GENERIC_MAPPING {
+    ACCESS_MASK GenericRead;
+    ACCESS_MASK GenericWrite;
+    ACCESS_MASK GenericExecute;
+    ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+
+#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
+#define SID_IDENTIFIER_AUTHORITY_DEFINED
+typedef struct {
+    BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
+#endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
+
+#ifndef SID_DEFINED
+#define SID_DEFINED
+typedef struct _SID {
+    BYTE Revision;
+    BYTE SubAuthorityCount;
+    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+    DWORD SubAuthority[1];
+} SID,*PISID;
+#endif /* !defined(SID_DEFINED) */
+
+#define	SID_REVISION			(1)	/* Current revision */
+#define	SID_MAX_SUB_AUTHORITIES		(15)	/* current max subauths */
+#define	SID_RECOMMENDED_SUB_AUTHORITIES	(1)	/* recommended subauths */
+
+#define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
+
+/*
+ * ACL
+ */
+
+#define ACL_REVISION1 1
+#define ACL_REVISION2 2
+#define ACL_REVISION3 3
+#define ACL_REVISION4 4
+
+#define MIN_ACL_REVISION ACL_REVISION2
+#define MAX_ACL_REVISION ACL_REVISION4
+
+#define ACL_REVISION 2
+
+typedef struct _ACL {
+    BYTE AclRevision;
+    BYTE Sbz1;
+    WORD AclSize;
+    WORD AceCount;
+    WORD Sbz2;
+} ACL, *PACL;
+
+typedef enum _ACL_INFORMATION_CLASS
+{
+  AclRevisionInformation = 1, 
+  AclSizeInformation
+} ACL_INFORMATION_CLASS;
+
+typedef struct _ACL_REVISION_INFORMATION
+{
+    DWORD AclRevision;
+} ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
+
+typedef struct _ACL_SIZE_INFORMATION
+{
+    DWORD AceCount;
+    DWORD AclBytesInUse;
+    DWORD AclBytesFree;
+} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
+
+/* SECURITY_DESCRIPTOR */
+#define	SECURITY_DESCRIPTOR_REVISION	1
+#define	SECURITY_DESCRIPTOR_REVISION1	1
+
+
+/*
+ * Privilege Names
+ */
+#define SE_CREATE_TOKEN_NAME		TEXT("SeCreateTokenPrivilege")
+#define SE_ASSIGNPRIMARYTOKEN_NAME	TEXT("SeAssignPrimaryTokenPrivilege")
+#define SE_LOCK_MEMORY_NAME		TEXT("SeLockMemoryPrivilege")
+#define SE_INCREASE_QUOTA_NAME		TEXT("SeIncreaseQuotaPrivilege")
+#define SE_UNSOLICITED_INPUT_NAME	TEXT("SeUnsolicitedInputPrivilege")
+#define SE_MACHINE_ACCOUNT_NAME 	TEXT("SeMachineAccountPrivilege")
+#define SE_TCB_NAME			TEXT("SeTcbPrivilege")
+#define SE_SECURITY_NAME		TEXT("SeSecurityPrivilege")
+#define SE_TAKE_OWNERSHIP_NAME		TEXT("SeTakeOwnershipPrivilege")
+#define SE_LOAD_DRIVER_NAME		TEXT("SeLoadDriverPrivilege")
+#define SE_SYSTEM_PROFILE_NAME		TEXT("SeSystemProfilePrivilege")
+#define SE_SYSTEMTIME_NAME		TEXT("SeSystemtimePrivilege")
+#define SE_PROF_SINGLE_PROCESS_NAME	TEXT("SeProfileSingleProcessPrivilege")
+#define SE_INC_BASE_PRIORITY_NAME	TEXT("SeIncreaseBasePriorityPrivilege")
+#define SE_CREATE_PAGEFILE_NAME 	TEXT("SeCreatePagefilePrivilege")
+#define SE_CREATE_PERMANENT_NAME	TEXT("SeCreatePermanentPrivilege")
+#define SE_BACKUP_NAME 			TEXT("SeBackupPrivilege")
+#define SE_RESTORE_NAME			TEXT("SeRestorePrivilege")
+#define SE_SHUTDOWN_NAME		TEXT("SeShutdownPrivilege")
+#define SE_DEBUG_NAME			TEXT("SeDebugPrivilege")
+#define SE_AUDIT_NAME			TEXT("SeAuditPrivilege")
+#define SE_SYSTEM_ENVIRONMENT_NAME	TEXT("SeSystemEnvironmentPrivilege")
+#define SE_CHANGE_NOTIFY_NAME		TEXT("SeChangeNotifyPrivilege")
+#define SE_REMOTE_SHUTDOWN_NAME		TEXT("SeRemoteShutdownPrivilege")
+#define SE_UNDOCK_NAME                  TEXT("SeUndockPrivilege")
+#define SE_ENABLE_DELEGATION_NAME       TEXT("SeEnableDelegationPrivilege")
+#define SE_MANAGE_VOLUME_NAME           TEXT("SeManageVolumePrivilege")
+#define SE_IMPERSONATE_NAME             TEXT("SeImpersonatePrivilege")
+#define SE_CREATE_GLOBAL_NAME           TEXT("SeCreateGlobalPrivilege")
+
+#define SE_GROUP_MANDATORY          0x00000001
+#define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
+#define SE_GROUP_ENABLED            0x00000004
+#define SE_GROUP_OWNER              0x00000008
+#define SE_GROUP_USE_FOR_DENY_ONLY  0x00000010
+#define SE_GROUP_INTEGRITY          0x00000020
+#define SE_GROUP_INTEGRITY_ENABLED  0x00000040
+#define SE_GROUP_LOGON_ID           0xC0000000
+#define SE_GROUP_RESOURCE           0x20000000
+#define SE_GROUP_VALID_ATTRIBUTES   0xE000007F
+
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
+#define SE_PRIVILEGE_ENABLED 		0x00000002
+#define SE_PRIVILEGE_REMOVED		0x00000004
+#define SE_PRIVILEGE_USED_FOR_ACCESS 	0x80000000
+
+#define PRIVILEGE_SET_ALL_NECESSARY     1
+
+#define SE_OWNER_DEFAULTED		0x00000001
+#define SE_GROUP_DEFAULTED		0x00000002
+#define SE_DACL_PRESENT			0x00000004
+#define SE_DACL_DEFAULTED		0x00000008
+#define SE_SACL_PRESENT			0x00000010
+#define SE_SACL_DEFAULTED		0x00000020
+#define SE_DACL_AUTO_INHERIT_REQ	0x00000100
+#define SE_SACL_AUTO_INHERIT_REQ	0x00000200
+#define SE_DACL_AUTO_INHERITED		0x00000400
+#define SE_SACL_AUTO_INHERITED		0x00000800
+#define SE_DACL_PROTECTED 		0x00001000
+#define SE_SACL_PROTECTED 		0x00002000
+#define SE_RM_CONTROL_VALID		0x00004000
+#define SE_SELF_RELATIVE		0x00008000
+
+typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+
+/* The security descriptor structure */
+typedef struct {
+    BYTE Revision;
+    BYTE Sbz1;
+    SECURITY_DESCRIPTOR_CONTROL Control;
+    DWORD Owner;
+    DWORD Group;
+    DWORD Sacl;
+    DWORD Dacl;
+} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
+
+typedef struct {
+    BYTE Revision;
+    BYTE Sbz1;
+    SECURITY_DESCRIPTOR_CONTROL Control;
+    PSID Owner;
+    PSID Group;
+    PACL Sacl;
+    PACL Dacl;
+} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+
+#define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR))
+
+#endif /* _SECURITY_DEFINED */
+
+/*
+ * SID_AND_ATTRIBUTES
+ */
+
+typedef struct _SID_AND_ATTRIBUTES {
+  PSID  Sid;
+  DWORD Attributes;
+} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
+
+/* security entities */
+#define SECURITY_NULL_RID                       __MSABI_LONG(0x00000000)
+#define SECURITY_WORLD_RID                      __MSABI_LONG(0x00000000)
+#define SECURITY_LOCAL_RID                      __MSABI_LONG(0X00000000)
+
+#define SECURITY_NULL_SID_AUTHORITY		{0,0,0,0,0,0}
+
+/* S-1-1 */
+#define SECURITY_WORLD_SID_AUTHORITY		{0,0,0,0,0,1}
+
+/* S-1-2 */
+#define SECURITY_LOCAL_SID_AUTHORITY		{0,0,0,0,0,2}
+
+/* S-1-3 */
+#define SECURITY_CREATOR_SID_AUTHORITY		{0,0,0,0,0,3}
+#define SECURITY_CREATOR_OWNER_RID              __MSABI_LONG(0x00000000)
+#define SECURITY_CREATOR_GROUP_RID              __MSABI_LONG(0x00000001)
+#define SECURITY_CREATOR_OWNER_SERVER_RID       __MSABI_LONG(0x00000002)
+#define SECURITY_CREATOR_GROUP_SERVER_RID       __MSABI_LONG(0x00000003)
+
+/* S-1-4 */
+#define SECURITY_NON_UNIQUE_AUTHORITY		{0,0,0,0,0,4}
+
+/* S-1-5 */
+#define SECURITY_NT_AUTHORITY			{0,0,0,0,0,5}
+#define SECURITY_DIALUP_RID                     __MSABI_LONG(0x00000001)
+#define SECURITY_NETWORK_RID                    __MSABI_LONG(0x00000002)
+#define SECURITY_BATCH_RID                      __MSABI_LONG(0x00000003)
+#define SECURITY_INTERACTIVE_RID                __MSABI_LONG(0x00000004)
+#define SECURITY_LOGON_IDS_RID                  __MSABI_LONG(0x00000005)
+#define SECURITY_SERVICE_RID                    __MSABI_LONG(0x00000006)
+#define SECURITY_ANONYMOUS_LOGON_RID            __MSABI_LONG(0x00000007)
+#define SECURITY_PROXY_RID                      __MSABI_LONG(0x00000008)
+#define SECURITY_ENTERPRISE_CONTROLLERS_RID     __MSABI_LONG(0x00000009)
+#define SECURITY_SERVER_LOGON_RID               SECURITY_ENTERPRISE_CONTROLLERS_RID
+#define SECURITY_PRINCIPAL_SELF_RID             __MSABI_LONG(0x0000000A)
+#define SECURITY_AUTHENTICATED_USER_RID         __MSABI_LONG(0x0000000B)
+#define SECURITY_RESTRICTED_CODE_RID            __MSABI_LONG(0x0000000C)
+#define SECURITY_TERMINAL_SERVER_RID            __MSABI_LONG(0x0000000D)
+#define SECURITY_REMOTE_LOGON_RID               __MSABI_LONG(0x0000000E)
+#define SECURITY_THIS_ORGANIZATION_RID          __MSABI_LONG(0x0000000F)
+#define SECURITY_LOCAL_SYSTEM_RID               __MSABI_LONG(0x00000012)
+#define SECURITY_LOCAL_SERVICE_RID              __MSABI_LONG(0x00000013)
+#define SECURITY_NETWORK_SERVICE_RID            __MSABI_LONG(0x00000014)
+#define SECURITY_NT_NON_UNIQUE                  __MSABI_LONG(0x00000015)
+#define SECURITY_BUILTIN_DOMAIN_RID             __MSABI_LONG(0x00000020)
+
+#define SECURITY_PACKAGE_BASE_RID               __MSABI_LONG(0x00000040)
+#define SECURITY_PACKAGE_NTLM_RID               __MSABI_LONG(0x0000000A)
+#define SECURITY_PACKAGE_SCHANNEL_RID           __MSABI_LONG(0x0000000E)
+#define SECURITY_PACKAGE_DIGEST_RID             __MSABI_LONG(0x00000015)
+#define SECURITY_MAX_ALWAYS_FILTERED            __MSABI_LONG(0x000003E7)
+#define SECURITY_MIN_NEVER_FILTERED             __MSABI_LONG(0x000003E8)
+#define SECURITY_OTHER_ORGANIZATION_RID         __MSABI_LONG(0x000003E8)
+
+#define FOREST_USER_RID_MAX                     __MSABI_LONG(0x000001F3)
+#define DOMAIN_USER_RID_ADMIN                   __MSABI_LONG(0x000001F4)
+#define DOMAIN_USER_RID_GUEST                   __MSABI_LONG(0x000001F5)
+#define DOMAIN_USER_RID_KRBTGT                  __MSABI_LONG(0x000001F6)
+#define DOMAIN_USER_RID_MAX                     __MSABI_LONG(0x000003E7)
+
+#define DOMAIN_GROUP_RID_ADMINS                 __MSABI_LONG(0x00000200)
+#define DOMAIN_GROUP_RID_USERS                  __MSABI_LONG(0x00000201)
+#define DOMAIN_GROUP_RID_GUESTS                 __MSABI_LONG(0x00000202)
+#define DOMAIN_GROUP_RID_COMPUTERS              __MSABI_LONG(0x00000203)
+#define DOMAIN_GROUP_RID_CONTROLLERS            __MSABI_LONG(0x00000204)
+#define DOMAIN_GROUP_RID_CERT_ADMINS            __MSABI_LONG(0x00000205)
+#define DOMAIN_GROUP_RID_SCHEMA_ADMINS          __MSABI_LONG(0x00000206)
+#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS      __MSABI_LONG(0x00000207)
+#define DOMAIN_GROUP_RID_POLICY_ADMINS          __MSABI_LONG(0x00000208)
+
+#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
+#define SECURITY_MANDATORY_UNTRUSTED_RID        __MSABI_LONG(0x00000000)
+#define SECURITY_MANDATORY_LOW_RID              __MSABI_LONG(0x00001000)
+#define SECURITY_MANDATORY_MEDIUM_RID           __MSABI_LONG(0x00002000)
+#define SECURITY_MANDATORY_HIGH_RID             __MSABI_LONG(0x00003000)
+#define SECURITY_MANDATORY_SYSTEM_RID           __MSABI_LONG(0x00004000)
+#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)
+
+#define DOMAIN_ALIAS_RID_ADMINS                 __MSABI_LONG(0x00000220)
+#define DOMAIN_ALIAS_RID_USERS                  __MSABI_LONG(0x00000221)
+#define DOMAIN_ALIAS_RID_GUESTS                 __MSABI_LONG(0x00000222)
+#define DOMAIN_ALIAS_RID_POWER_USERS            __MSABI_LONG(0x00000223)
+
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS            __MSABI_LONG(0x00000224)
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS             __MSABI_LONG(0x00000225)
+#define DOMAIN_ALIAS_RID_PRINT_OPS              __MSABI_LONG(0x00000226)
+#define DOMAIN_ALIAS_RID_BACKUP_OPS             __MSABI_LONG(0x00000227)
+
+#define DOMAIN_ALIAS_RID_REPLICATOR             __MSABI_LONG(0x00000228)
+#define DOMAIN_ALIAS_RID_RAS_SERVERS            __MSABI_LONG(0x00000229)
+#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS       __MSABI_LONG(0x0000022A)
+#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS   __MSABI_LONG(0x0000022B)
+#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)
+#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)
+
+#define DOMAIN_ALIAS_RID_MONITORING_USERS       __MSABI_LONG(0x0000022E)
+#define DOMAIN_ALIAS_RID_LOGGING_USERS          __MSABI_LONG(0x0000022F)
+#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS    __MSABI_LONG(0x00000230)
+#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS     __MSABI_LONG(0x00000231)
+#define DOMAIN_ALIAS_RID_DCOM_USERS             __MSABI_LONG(0x00000232)
+
+#define SECURITY_SERVER_LOGON_RID		SECURITY_ENTERPRISE_CONTROLLERS_RID
+
+#define SECURITY_PACKAGE_RID_COUNT              __MSABI_LONG(2)
+#define SECURITY_LOGON_IDS_RID_COUNT            __MSABI_LONG(3)
+
+typedef enum {
+    WinNullSid                                  = 0,
+    WinWorldSid                                 = 1,
+    WinLocalSid                                 = 2,
+    WinCreatorOwnerSid                          = 3,
+    WinCreatorGroupSid                          = 4,
+    WinCreatorOwnerServerSid                    = 5,
+    WinCreatorGroupServerSid                    = 6,
+    WinNtAuthoritySid                           = 7,
+    WinDialupSid                                = 8,
+    WinNetworkSid                               = 9,
+    WinBatchSid                                 = 10,
+    WinInteractiveSid                           = 11,
+    WinServiceSid                               = 12,
+    WinAnonymousSid                             = 13,
+    WinProxySid                                 = 14,
+    WinEnterpriseControllersSid                 = 15,
+    WinSelfSid                                  = 16,
+    WinAuthenticatedUserSid                     = 17,
+    WinRestrictedCodeSid                        = 18,
+    WinTerminalServerSid                        = 19,
+    WinRemoteLogonIdSid                         = 20,
+    WinLogonIdsSid                              = 21,
+    WinLocalSystemSid                           = 22,
+    WinLocalServiceSid                          = 23,
+    WinNetworkServiceSid                        = 24,
+    WinBuiltinDomainSid                         = 25,
+    WinBuiltinAdministratorsSid                 = 26,
+    WinBuiltinUsersSid                          = 27,
+    WinBuiltinGuestsSid                         = 28,
+    WinBuiltinPowerUsersSid                     = 29,
+    WinBuiltinAccountOperatorsSid               = 30,
+    WinBuiltinSystemOperatorsSid                = 31,
+    WinBuiltinPrintOperatorsSid                 = 32,
+    WinBuiltinBackupOperatorsSid                = 33,
+    WinBuiltinReplicatorSid                     = 34,
+    WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+    WinBuiltinRemoteDesktopUsersSid             = 36,
+    WinBuiltinNetworkConfigurationOperatorsSid  = 37,
+    WinAccountAdministratorSid                  = 38,
+    WinAccountGuestSid                          = 39,
+    WinAccountKrbtgtSid                         = 40,
+    WinAccountDomainAdminsSid                   = 41,
+    WinAccountDomainUsersSid                    = 42,
+    WinAccountDomainGuestsSid                   = 43,
+    WinAccountComputersSid                      = 44,
+    WinAccountControllersSid                    = 45,
+    WinAccountCertAdminsSid                     = 46,
+    WinAccountSchemaAdminsSid                   = 47,
+    WinAccountEnterpriseAdminsSid               = 48,
+    WinAccountPolicyAdminsSid                   = 49,
+    WinAccountRasAndIasServersSid               = 50,
+    WinNTLMAuthenticationSid                    = 51,
+    WinDigestAuthenticationSid                  = 52,
+    WinSChannelAuthenticationSid                = 53,
+    WinThisOrganizationSid                      = 54,
+    WinOtherOrganizationSid                     = 55,
+    WinBuiltinIncomingForestTrustBuildersSid    = 56,
+    WinBuiltinPerfMonitoringUsersSid            = 57,
+    WinBuiltinPerfLoggingUsersSid               = 58,
+    WinBuiltinAuthorizationAccessSid            = 59,
+    WinBuiltinTerminalServerLicenseServersSid   = 60,
+    WinBuiltinDCOMUsersSid                      = 61,
+    WinBuiltinIUsersSid                         = 62,
+    WinIUserSid                                 = 63,
+    WinBuiltinCryptoOperatorsSid                = 64,
+    WinUntrustedLabelSid                        = 65,
+    WinLowLabelSid                              = 66,
+    WinMediumLabelSid                           = 67,
+    WinHighLabelSid                             = 68,
+    WinSystemLabelSid                           = 69,
+    WinWriteRestrictedCodeSid                   = 70,
+    WinCreatorOwnerRightsSid                    = 71,
+    WinCacheablePrincipalsGroupSid              = 72,
+    WinNonCacheablePrincipalsGroupSid           = 73,
+    WinEnterpriseReadonlyControllersSid         = 74,
+    WinAccountReadonlyControllersSid            = 75,
+    WinBuiltinEventLogReadersGroup              = 76,
+    WinNewEnterpriseReadonlyControllersSid      = 77,
+    WinBuiltinCertSvcDComAccessGroup            = 78,
+    WinMediumPlusLabelSid                       = 79,
+    WinLocalLogonSid                            = 80,
+    WinConsoleLogonSid                          = 81,
+    WinThisOrganizationCertificateSid           = 82,
+} WELL_KNOWN_SID_TYPE;
+
+/*
+ * TOKEN_USER
+ */
+
+typedef struct _TOKEN_USER {
+    SID_AND_ATTRIBUTES User;
+} TOKEN_USER, *PTOKEN_USER;
+
+/*
+ * TOKEN_GROUPS
+ */
+
+typedef struct _TOKEN_GROUPS {
+    DWORD GroupCount;
+    SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
+} TOKEN_GROUPS, *PTOKEN_GROUPS;
+
+/*
+ * LUID_AND_ATTRIBUTES
+ */
+
+typedef union _LARGE_INTEGER {
+    struct {
+#ifdef WORDS_BIGENDIAN
+        LONG     HighPart;
+        DWORD    LowPart;
+#else
+        DWORD    LowPart;
+        LONG     HighPart;
+#endif
+    } u;
+#ifndef NONAMELESSSTRUCT
+    struct {
+#ifdef WORDS_BIGENDIAN
+        LONG     HighPart;
+        DWORD    LowPart;
+#else
+        DWORD    LowPart;
+        LONG     HighPart;
+#endif
+    };
+#endif
+    LONGLONG QuadPart;
+} LARGE_INTEGER, *PLARGE_INTEGER;
+
+typedef union _ULARGE_INTEGER {
+    struct {
+#ifdef WORDS_BIGENDIAN
+        DWORD    HighPart;
+        DWORD    LowPart;
+#else
+        DWORD    LowPart;
+        DWORD    HighPart;
+#endif
+    } u;
+#ifndef NONAMELESSSTRUCT
+    struct {
+#ifdef WORDS_BIGENDIAN
+        DWORD    HighPart;
+        DWORD    LowPart;
+#else
+        DWORD    LowPart;
+        DWORD    HighPart;
+#endif
+    };
+#endif
+    ULONGLONG QuadPart;
+} ULARGE_INTEGER, *PULARGE_INTEGER;
+
+/*
+ * Locally Unique Identifier
+ */
+
+typedef struct _LUID {
+    DWORD LowPart;
+    LONG HighPart;
+} LUID, *PLUID;
+
+#include <pshpack4.h>
+typedef struct _LUID_AND_ATTRIBUTES {
+  LUID   Luid;
+  DWORD  Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#include <poppack.h>
+
+/*
+ * PRIVILEGE_SET
+ */
+
+typedef struct _PRIVILEGE_SET {
+    DWORD PrivilegeCount;
+    DWORD Control;
+    LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET, *PPRIVILEGE_SET;
+
+/*
+ * TOKEN_PRIVILEGES
+ */
+
+typedef struct _TOKEN_PRIVILEGES {
+  DWORD PrivilegeCount;
+  LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
+} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
+
+/*
+ * TOKEN_OWNER
+ */
+
+typedef struct _TOKEN_OWNER {
+  PSID Owner;
+} TOKEN_OWNER, *PTOKEN_OWNER;
+
+/*
+ * TOKEN_PRIMARY_GROUP
+ */
+
+typedef struct _TOKEN_PRIMARY_GROUP {
+  PSID PrimaryGroup;
+} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
+
+
+/*
+ * TOKEN_DEFAULT_DACL
+ */
+
+typedef struct _TOKEN_DEFAULT_DACL {
+  PACL DefaultDacl;
+} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
+
+/*
+ * TOKEN_SOURCE
+ */
+
+#define TOKEN_SOURCE_LENGTH 8
+
+typedef struct _TOKEN_SOURCE {
+  char SourceName[TOKEN_SOURCE_LENGTH];
+  LUID SourceIdentifier;
+} TOKEN_SOURCE, *PTOKEN_SOURCE;
+
+/*
+ * TOKEN_TYPE
+ */
+
+typedef enum tagTOKEN_TYPE {
+  TokenPrimary = 1,
+  TokenImpersonation
+} TOKEN_TYPE;
+
+/*
+ * SECURITY_IMPERSONATION_LEVEL
+ */
+
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+  SecurityAnonymous,
+  SecurityIdentification,
+  SecurityImpersonation,
+  SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
+
+#define SECURITY_DYNAMIC_TRACKING   (TRUE)
+#define SECURITY_STATIC_TRACKING    (FALSE)
+
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
+	* PSECURITY_CONTEXT_TRACKING_MODE;
+/*
+ *	Quality of Service
+ */
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+  DWORD				Length;
+  SECURITY_IMPERSONATION_LEVEL	ImpersonationLevel;
+  SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+  BOOLEAN			EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+
+/*
+ * TOKEN_STATISTICS
+ */
+
+#include <pshpack4.h>
+typedef struct _TOKEN_STATISTICS {
+  LUID  TokenId;
+  LUID  AuthenticationId;
+  LARGE_INTEGER ExpirationTime;
+  TOKEN_TYPE    TokenType;
+  SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+  DWORD DynamicCharged;
+  DWORD DynamicAvailable;
+  DWORD GroupCount;
+  DWORD PrivilegeCount;
+  LUID  ModifiedId;
+} TOKEN_STATISTICS;
+#include <poppack.h>
+
+typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
+  DWORD                 SidCount;
+  DWORD                 SidLength;
+  PSID_AND_ATTRIBUTES   Sids;
+  DWORD                 RestrictedSidCount;
+  DWORD                 RestrictedSidLength;
+  PSID_AND_ATTRIBUTES   RestrictedSids;
+  DWORD                 PrivilegeCount;
+  DWORD                 PrivilegeLength;
+  PLUID_AND_ATTRIBUTES  Privileges;
+  LUID                  AuthenticationId;
+} TOKEN_GROUPS_AND_PRIVILEGES, * PTOKEN_GROUPS_AND_PRIVILEGES;
+
+typedef struct _TOKEN_ORIGIN {
+  LUID  OriginatingLogonSession;
+} TOKEN_ORIGIN, * PTOKEN_ORIGIN;
+
+typedef struct _TOKEN_LINKED_TOKEN {
+  HANDLE LinkedToken;
+} TOKEN_LINKED_TOKEN, * PTOKEN_LINKED_TOKEN;
+
+typedef struct _TOKEN_ELEVATION {
+  DWORD TokenIsElevated;
+} TOKEN_ELEVATION, * PTOKEN_ELEVATION;
+
+typedef struct _TOKEN_MANDATORY_LABEL {
+  SID_AND_ATTRIBUTES Label;
+} TOKEN_MANDATORY_LABEL, * PTOKEN_MANDATORY_LABEL;
+
+/*
+ *	ACLs of NT
+ */
+
+/* ACEs, directly starting after an ACL */
+typedef struct _ACE_HEADER {
+	BYTE	AceType;
+	BYTE	AceFlags;
+	WORD	AceSize;
+} ACE_HEADER,*PACE_HEADER;
+
+/* AceType */
+#define	ACCESS_ALLOWED_ACE_TYPE		0
+#define	ACCESS_DENIED_ACE_TYPE		1
+#define	SYSTEM_AUDIT_ACE_TYPE		2
+#define	SYSTEM_ALARM_ACE_TYPE		3
+
+/* inherit AceFlags */
+#define	OBJECT_INHERIT_ACE		0x01
+#define	CONTAINER_INHERIT_ACE		0x02
+#define	NO_PROPAGATE_INHERIT_ACE	0x04
+#define	INHERIT_ONLY_ACE		0x08
+#define	INHERITED_ACE		        0x10
+#define	VALID_INHERIT_FLAGS		0x1F
+
+/* AceFlags mask for what events we (should) audit */
+#define	SUCCESSFUL_ACCESS_ACE_FLAG	0x40
+#define	FAILED_ACCESS_ACE_FLAG		0x80
+
+/* different ACEs depending on AceType
+ * SidStart marks the begin of a SID
+ * so the thing finally looks like this:
+ * 0: ACE_HEADER
+ * 4: ACCESS_MASK
+ * 8... : SID
+ */
+typedef struct _ACCESS_ALLOWED_ACE {
+	ACE_HEADER	Header;
+	DWORD		Mask;
+	DWORD		SidStart;
+} ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;
+
+typedef struct _ACCESS_DENIED_ACE {
+	ACE_HEADER	Header;
+	DWORD		Mask;
+	DWORD		SidStart;
+} ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;
+
+typedef struct _SYSTEM_AUDIT_ACE {
+	ACE_HEADER	Header;
+	DWORD		Mask;
+	DWORD		SidStart;
+} SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;
+
+typedef struct _SYSTEM_ALARM_ACE {
+	ACE_HEADER	Header;
+	DWORD		Mask;
+	DWORD		SidStart;
+} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
+
+typedef enum tagSID_NAME_USE {
+	SidTypeUser = 1,
+	SidTypeGroup,
+	SidTypeDomain,
+	SidTypeAlias,
+	SidTypeWellKnownGroup,
+	SidTypeDeletedAccount,
+	SidTypeInvalid,
+	SidTypeUnknown
+} SID_NAME_USE,*PSID_NAME_USE;
+
+#define ACE_OBJECT_TYPE_PRESENT 0x1
+#define ACE_INHERITED_OBJECT_TYPE_PRESENT   0x2
+
+/* Access rights */
+
+/* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
+#undef  DELETE
+#define DELETE                     0x00010000
+#define READ_CONTROL               0x00020000
+#define WRITE_DAC                  0x00040000
+#define WRITE_OWNER                0x00080000
+#define SYNCHRONIZE                0x00100000
+#define STANDARD_RIGHTS_REQUIRED   0x000f0000
+
+#define STANDARD_RIGHTS_READ       READ_CONTROL
+#define STANDARD_RIGHTS_WRITE      READ_CONTROL
+#define STANDARD_RIGHTS_EXECUTE    READ_CONTROL
+
+#define STANDARD_RIGHTS_ALL        0x001f0000
+
+#define SPECIFIC_RIGHTS_ALL        0x0000ffff
+
+#define GENERIC_READ               0x80000000
+#define GENERIC_WRITE              0x40000000
+#define GENERIC_EXECUTE            0x20000000
+#define GENERIC_ALL                0x10000000
+
+#define MAXIMUM_ALLOWED            0x02000000
+#define ACCESS_SYSTEM_SECURITY     0x01000000
+
+#define EVENT_QUERY_STATE          0x0001
+#define EVENT_MODIFY_STATE         0x0002
+#define EVENT_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+#define SEMAPHORE_MODIFY_STATE     0x0002
+#define SEMAPHORE_ALL_ACCESS       (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+#define MUTANT_QUERY_STATE         0x0001
+#define MUTANT_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
+
+#define JOB_OBJECT_ASSIGN_PROCESS           0x0001
+#define JOB_OBJECT_SET_ATTRIBUTES           0x0002
+#define JOB_OBJECT_QUERY                    0x0004
+#define JOB_OBJECT_TERMINATE                0x0008
+#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES  0x0010
+#define JOB_OBJECT_ALL_ACCESS               (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1f)
+
+#define TIMER_QUERY_STATE          0x0001
+#define TIMER_MODIFY_STATE         0x0002
+#define TIMER_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+#define PROCESS_TERMINATE          0x0001
+#define PROCESS_CREATE_THREAD      0x0002
+#define PROCESS_VM_OPERATION       0x0008
+#define PROCESS_VM_READ            0x0010
+#define PROCESS_VM_WRITE           0x0020
+#define PROCESS_DUP_HANDLE         0x0040
+#define PROCESS_CREATE_PROCESS     0x0080
+#define PROCESS_SET_QUOTA          0x0100
+#define PROCESS_SET_INFORMATION    0x0200
+#define PROCESS_QUERY_INFORMATION  0x0400
+#define PROCESS_SUSPEND_RESUME     0x0800
+#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
+#define PROCESS_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
+
+#define THREAD_TERMINATE           0x0001
+#define THREAD_SUSPEND_RESUME      0x0002
+#define THREAD_GET_CONTEXT         0x0008
+#define THREAD_SET_CONTEXT         0x0010
+#define THREAD_SET_INFORMATION     0x0020
+#define THREAD_QUERY_INFORMATION   0x0040
+#define THREAD_SET_THREAD_TOKEN    0x0080
+#define THREAD_IMPERSONATE         0x0100
+#define THREAD_DIRECT_IMPERSONATION 0x0200
+#define THREAD_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
+
+#define THREAD_BASE_PRIORITY_LOWRT  15
+#define THREAD_BASE_PRIORITY_MAX    2
+#define THREAD_BASE_PRIORITY_MIN   -2
+#define THREAD_BASE_PRIORITY_IDLE  -15
+
+typedef struct _QUOTA_LIMITS {
+    SIZE_T PagedPoolLimit;
+    SIZE_T NonPagedPoolLimit;
+    SIZE_T MinimumWorkingSetSize;
+    SIZE_T MaximumWorkingSetSize;
+    SIZE_T PagefileLimit;
+    LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS, *PQUOTA_LIMITS;
+
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+
+typedef struct _QUOTA_LIMITS_EX {
+    SIZE_T PagedPoolLimit;
+    SIZE_T NonPagedPoolLimit;
+    SIZE_T MinimumWorkingSetSize;
+    SIZE_T MaximumWorkingSetSize;
+    SIZE_T PagefileLimit;
+    LARGE_INTEGER TimeLimit;
+    SIZE_T Reserved1;
+    SIZE_T Reserved2;
+    SIZE_T Reserved3;
+    SIZE_T Reserved4;
+    DWORD Flags;
+    DWORD Reserved5;
+} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
+
+#define SECTION_QUERY              0x0001
+#define SECTION_MAP_WRITE          0x0002
+#define SECTION_MAP_READ           0x0004
+#define SECTION_MAP_EXECUTE        0x0008
+#define SECTION_EXTEND_SIZE        0x0010
+#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
+#define SECTION_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|0x01f)
+
+#define FILE_READ_DATA            0x0001    /* file & pipe */
+#define FILE_LIST_DIRECTORY       0x0001    /* directory */
+#define FILE_WRITE_DATA           0x0002    /* file & pipe */
+#define FILE_ADD_FILE             0x0002    /* directory */
+#define FILE_APPEND_DATA          0x0004    /* file */
+#define FILE_ADD_SUBDIRECTORY     0x0004    /* directory */
+#define FILE_CREATE_PIPE_INSTANCE 0x0004    /* named pipe */
+#define FILE_READ_EA              0x0008    /* file & directory */
+#define FILE_READ_PROPERTIES      FILE_READ_EA
+#define FILE_WRITE_EA             0x0010    /* file & directory */
+#define FILE_WRITE_PROPERTIES     FILE_WRITE_EA
+#define FILE_EXECUTE              0x0020    /* file */
+#define FILE_TRAVERSE             0x0020    /* directory */
+#define FILE_DELETE_CHILD         0x0040    /* directory */
+#define FILE_READ_ATTRIBUTES      0x0080    /* all */
+#define FILE_WRITE_ATTRIBUTES     0x0100    /* all */
+#define FILE_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
+
+#define FILE_GENERIC_READ         (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
+                                   FILE_READ_ATTRIBUTES | FILE_READ_EA | \
+                                   SYNCHRONIZE)
+#define FILE_GENERIC_WRITE        (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
+                                   FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
+                                   FILE_APPEND_DATA | SYNCHRONIZE)
+#define FILE_GENERIC_EXECUTE      (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
+                                   FILE_READ_ATTRIBUTES | SYNCHRONIZE)
+
+#define DUPLICATE_CLOSE_SOURCE     0x00000001
+#define DUPLICATE_SAME_ACCESS      0x00000002
+
+/* File attribute flags */
+#define FILE_SHARE_READ                    0x00000001
+#define FILE_SHARE_WRITE                   0x00000002
+#define FILE_SHARE_DELETE                  0x00000004
+
+#define FILE_ATTRIBUTE_READONLY            0x00000001
+#define FILE_ATTRIBUTE_HIDDEN              0x00000002
+#define FILE_ATTRIBUTE_SYSTEM              0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY           0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE             0x00000020
+#define FILE_ATTRIBUTE_DEVICE              0x00000040
+#define FILE_ATTRIBUTE_NORMAL              0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY           0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE         0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT       0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED          0x00000800
+#define FILE_ATTRIBUTE_OFFLINE             0x00001000
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
+#define FILE_ATTRIBUTE_ENCRYPTED           0x00004000
+
+/* File notification flags */
+#define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
+#define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004
+#define FILE_NOTIFY_CHANGE_SIZE         0x00000008
+#define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
+#define FILE_NOTIFY_CHANGE_CREATION     0x00000040
+#define FILE_NOTIFY_CHANGE_EA           0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY     0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
+
+#define FILE_ACTION_ADDED               0x00000001
+#define FILE_ACTION_REMOVED             0x00000002
+#define FILE_ACTION_MODIFIED            0x00000003
+#define FILE_ACTION_RENAMED_OLD_NAME    0x00000004
+#define FILE_ACTION_RENAMED_NEW_NAME    0x00000005
+#define FILE_ACTION_ADDED_STREAM        0x00000006
+#define FILE_ACTION_REMOVED_STREAM      0x00000007
+#define FILE_ACTION_MODIFIED_STREAM     0x00000008
+
+#define FILE_CASE_SENSITIVE_SEARCH      0x00000001
+#define FILE_CASE_PRESERVED_NAMES       0x00000002
+#define FILE_UNICODE_ON_DISK            0x00000004
+#define FILE_PERSISTENT_ACLS            0x00000008
+#define FILE_FILE_COMPRESSION           0x00000010
+#define FILE_VOLUME_QUOTAS              0x00000020
+#define FILE_SUPPORTS_SPARSE_FILES      0x00000040
+#define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
+#define FILE_VOLUME_IS_COMPRESSED       0x00008000
+#define FILE_SUPPORTS_OBJECT_IDS        0x00010000
+#define FILE_SUPPORTS_ENCRYPTION        0x00020000
+#define FILE_NAMED_STREAMS              0x00040000
+#define FILE_READ_ONLY_VOLUME           0x00080000
+
+/* File alignments (NT) */
+#define	FILE_BYTE_ALIGNMENT		0x00000000
+#define	FILE_WORD_ALIGNMENT		0x00000001
+#define	FILE_LONG_ALIGNMENT		0x00000003
+#define	FILE_QUAD_ALIGNMENT		0x00000007
+#define	FILE_OCTA_ALIGNMENT		0x0000000f
+#define	FILE_32_BYTE_ALIGNMENT		0x0000001f
+#define	FILE_64_BYTE_ALIGNMENT		0x0000003f
+#define	FILE_128_BYTE_ALIGNMENT		0x0000007f
+#define	FILE_256_BYTE_ALIGNMENT		0x000000ff
+#define	FILE_512_BYTE_ALIGNMENT		0x000001ff
+
+#define MAILSLOT_NO_MESSAGE             ((DWORD)-1)
+#define MAILSLOT_WAIT_FOREVER           ((DWORD)-1)
+
+#define REG_NONE		0	/* no type */
+#define REG_SZ			1	/* string type (ASCII) */
+#define REG_EXPAND_SZ		2	/* string, includes %ENVVAR% (expanded by caller) (ASCII) */
+#define REG_BINARY		3	/* binary format, callerspecific */
+/* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
+#define REG_DWORD		4	/* DWORD in little endian format */
+#define REG_DWORD_LITTLE_ENDIAN	4	/* DWORD in little endian format */
+#define REG_DWORD_BIG_ENDIAN	5	/* DWORD in big endian format  */
+#define REG_LINK		6	/* symbolic link (UNICODE) */
+#define REG_MULTI_SZ		7	/* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
+#define REG_RESOURCE_LIST	8	/* resource list? huh? */
+#define REG_FULL_RESOURCE_DESCRIPTOR	9	/* full resource descriptor? huh? */
+#define REG_RESOURCE_REQUIREMENTS_LIST	10
+#define REG_QWORD		11	/* QWORD in little endian format */
+#define REG_QWORD_LITTLE_ENDIAN	11	/* QWORD in little endian format */
+
+/* ----------------------------- begin power management --------------------- */
+
+typedef enum _LATENCY_TIME {
+	LT_DONT_CARE,
+	LT_LOWEST_LATENCY
+} LATENCY_TIME, *PLATENCY_TIME;
+
+#define DISCHARGE_POLICY_CRITICAL 	0
+#define DISCHARGE_POLICY_LOW		1
+#define NUM_DISCHARGE_POLICIES		4
+
+#define PO_THROTTLE_NONE		0
+#define PO_THROTTLE_CONSTANT		1
+#define PO_THROTTLE_DEGRADE		2
+#define PO_THROTTLE_ADAPTIVE		3
+
+typedef enum _POWER_ACTION {
+	PowerActionNone = 0,
+	PowerActionReserved,
+	PowerActionSleep,
+	PowerActionHibernate,
+	PowerActionShutdown,
+	PowerActionShutdownReset,
+	PowerActionShutdownOff,
+	PowerActionWarmEject
+} POWER_ACTION,
+*PPOWER_ACTION;
+
+typedef enum _SYSTEM_POWER_STATE {
+	PowerSystemUnspecified = 0,
+	PowerSystemWorking = 1,
+	PowerSystemSleeping1 = 2,
+	PowerSystemSleeping2 = 3,
+	PowerSystemSleeping3 = 4,
+	PowerSystemHibernate = 5,
+	PowerSystemShutdown = 6,
+	PowerSystemMaximum = 7
+} SYSTEM_POWER_STATE,
+*PSYSTEM_POWER_STATE;
+
+typedef enum _DEVICE_POWER_STATE {
+    PowerDeviceUnspecified,
+    PowerDeviceD0,
+    PowerDeviceD1,
+    PowerDeviceD2,
+    PowerDeviceD3,
+    PowerDeviceMaximum
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+
+typedef enum _POWER_INFORMATION_LEVEL {
+        SystemPowerPolicyAc,
+        SystemPowerPolicyDc,
+        VerifySystemPolicyAc,
+        VerifySystemPolicyDc,
+        SystemPowerCapabilities,
+        SystemBatteryState,
+        SystemPowerStateHandler,
+        ProcessorStateHandler,
+        SystemPowerPolicyCurrent,
+        AdministratorPowerPolicy,
+        SystemReserveHiberFile,
+        ProcessorInformation,
+        SystemPowerInformation,
+        ProcessorStateHandler2,
+        LastWakeTime,
+        LastSleepTime,
+        SystemExecutionState,
+        SystemPowerStateNotifyHandler,
+        ProcessorPowerPolicyAc,
+        ProcessorPowerPolicyDc,
+        VerifyProcessorPowerPolicyAc,
+        VerifyProcessorPowerPolicyDc,
+        ProcessorPowerPolicyCurrent
+} POWER_INFORMATION_LEVEL;
+
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+	SYSTEM_POWER_STATE MinSleep;
+	SYSTEM_POWER_STATE MaxSleep;
+	ULONG MinVideoTimeout;
+	ULONG MaxVideoTimeout;
+	ULONG MinSpindownTimeout;
+	ULONG MaxSpindownTimeout;
+} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
+
+typedef struct {
+	ULONG Granularity;
+	ULONG Capacity;
+} BATTERY_REPORTING_SCALE,
+*PBATTERY_REPORTING_SCALE;
+
+typedef struct {
+	POWER_ACTION Action;
+	ULONG Flags;
+	ULONG EventCode;
+} POWER_ACTION_POLICY,
+*PPOWER_ACTION_POLICY;
+
+typedef struct _PROCESSOR_POWER_INFORMATION {
+	ULONG Number;
+	ULONG MaxMhz;
+	ULONG CurrentMhz;
+	ULONG MhzLimit;
+	ULONG MaxIdleState;
+	ULONG CurrentIdleState;
+} PROCESSOR_POWER_INFORMATION,
+*PPROCESSOR_POWER_INFORMATION;
+
+typedef struct _PROCESSOR_POWER_POLICY_INFO {
+	ULONG TimeCheck;
+	ULONG DemoteLimit;
+	ULONG PromoteLimit;
+	UCHAR DemotePercent;
+	UCHAR PromotePercent;
+	UCHAR Spare[2];
+	ULONG AllowDemotion:1;
+	ULONG AllowPromotion:1;
+	ULONG Reserved:30;
+} PROCESSOR_POWER_POLICY_INFO,
+*PPROCESSOR_POWER_POLICY_INFO;
+
+typedef struct _PROCESSOR_POWER_POLICY {
+	DWORD Revision;
+	BYTE DynamicThrottle;
+	BYTE Spare[3];
+	DWORD DisableCStates:1;
+	DWORD Reserved:31;
+	DWORD PolicyCount;
+	PROCESSOR_POWER_POLICY_INFO Policy[3];
+} PROCESSOR_POWER_POLICY,
+*PPROCESSOR_POWER_POLICY;
+
+typedef struct {
+	BOOLEAN AcOnLine;
+	BOOLEAN BatteryPresent;
+	BOOLEAN Charging;
+	BOOLEAN Discharging;
+	BOOLEAN Spare1[4];
+	ULONG MaxCapacity;
+	ULONG RemainingCapacity;
+	ULONG Rate;
+	ULONG EstimatedTime;
+	ULONG DefaultAlert1;
+	ULONG DefaultAlert2;
+} SYSTEM_BATTERY_STATE,
+*PSYSTEM_BATTERY_STATE;
+
+typedef struct {
+	BOOLEAN PowerButtonPresent;
+	BOOLEAN SleepButtonPresent;
+	BOOLEAN LidPresent;
+	BOOLEAN SystemS1;
+	BOOLEAN SystemS2;
+	BOOLEAN SystemS3;
+	BOOLEAN SystemS4;
+	BOOLEAN SystemS5;
+	BOOLEAN HiberFilePresent;
+	BOOLEAN FullWake;
+	BOOLEAN VideoDimPresent;
+	BOOLEAN ApmPresent;
+	BOOLEAN UpsPresent;
+	BOOLEAN ThermalControl;
+	BOOLEAN ProcessorThrottle;
+	UCHAR ProcessorMinThrottle;
+	UCHAR ProcessorMaxThrottle;
+	UCHAR spare2[4];
+	BOOLEAN DiskSpinDown;
+	UCHAR spare3[8];
+	BOOLEAN SystemBatteriesPresent;
+	BOOLEAN BatteriesAreShortTerm;
+	BATTERY_REPORTING_SCALE BatteryScale[3];
+	SYSTEM_POWER_STATE AcOnLineWake;
+	SYSTEM_POWER_STATE SoftLidWake;
+	SYSTEM_POWER_STATE RtcWake;
+	SYSTEM_POWER_STATE MinDeviceWakeState;
+	SYSTEM_POWER_STATE DefaultLowLatencyWake;
+} SYSTEM_POWER_CAPABILITIES,
+*PSYSTEM_POWER_CAPABILITIES;
+
+typedef struct _SYSTEM_POWER_INFORMATION {
+	ULONG MaxIdlenessAllowed;
+	ULONG Idleness;
+	ULONG TimeRemaining;
+	UCHAR CoolingMode;
+} SYSTEM_POWER_INFORMATION,
+*PSYSTEM_POWER_INFORMATION;
+
+typedef struct _SYSTEM_POWER_LEVEL {
+	BOOLEAN Enable;
+	UCHAR Spare[3];
+	ULONG BatteryLevel;
+	POWER_ACTION_POLICY PowerPolicy;
+	SYSTEM_POWER_STATE MinSystemState;
+} SYSTEM_POWER_LEVEL,
+*PSYSTEM_POWER_LEVEL;
+
+typedef struct _SYSTEM_POWER_POLICY {
+	ULONG Revision;
+	POWER_ACTION_POLICY PowerButton;
+	POWER_ACTION_POLICY SleepButton;
+	POWER_ACTION_POLICY LidClose;
+	SYSTEM_POWER_STATE LidOpenWake;
+	ULONG Reserved;
+	POWER_ACTION_POLICY Idle;
+	ULONG IdleTimeout;
+	UCHAR IdleSensitivity;
+	UCHAR DynamicThrottle;
+	UCHAR Spare2[2];
+	SYSTEM_POWER_STATE MinSleep;
+	SYSTEM_POWER_STATE MaxSleep;
+	SYSTEM_POWER_STATE ReducedLatencySleep;
+	ULONG WinLogonFlags;
+	ULONG Spare3;
+	ULONG DozeS4Timeout;
+	ULONG BroadcastCapacityResolution;
+	SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+	ULONG VideoTimeout;
+	BOOLEAN VideoDimDisplay;
+	ULONG VideoReserved[3];
+	ULONG SpindownTimeout;
+	BOOLEAN OptimizeForPower;
+	UCHAR FanThrottleTolerance;
+	UCHAR ForcedThrottle;
+	UCHAR MinThrottle;
+	POWER_ACTION_POLICY OverThrottled;
+} SYSTEM_POWER_POLICY,
+*PSYSTEM_POWER_POLICY;
+
+typedef union _FILE_SEGMENT_ELEMENT {
+	PVOID64 Buffer;
+	ULONGLONG Alignment;
+} FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+typedef struct _FILE_NOTIFY_INFORMATION {
+	DWORD NextEntryOffset;
+	DWORD Action;
+	DWORD FileNameLength;
+	WCHAR FileName[1];
+} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
+
+/* ----------------------------- begin tape storage --------------------- */
+
+#define TAPE_FIXED_PARTITIONS     0
+#define TAPE_SELECT_PARTITIONS    1
+#define TAPE_INITIATOR_PARTITIONS 2
+#define TAPE_ERASE_SHORT 0
+#define TAPE_ERASE_LONG  1
+#define TAPE_LOAD    0
+#define TAPE_UNLOAD  1
+#define TAPE_TENSION 2
+#define TAPE_LOCK    3
+#define TAPE_UNLOCK  4
+#define TAPE_FORMAT  5
+#define TAPE_SETMARKS  0
+#define TAPE_FILEMARKS 1
+#define TAPE_SHORT_FILEMARKS 2
+#define TAPE_LONG_FILEMARKS  3
+#define TAPE_REWIND                0
+#define TAPE_ABSOLUTE_BLOCK        1
+#define TAPE_LOGICAL_BLOCK         2
+#define TAPE_PSEUDO_LOGICAL_BLOCK  3
+#define TAPE_SPACE_END_OF_DATA     4
+#define TAPE_SPACE_RELATIVE_BLOCKS 5
+#define TAPE_SPACE_FILEMARKS       6
+#define TAPE_SPACE_SEQUENTIAL_FMKS 7
+#define TAPE_SPACE_SETMARKS        8
+#define TAPE_SPACE_SEQUENTIAL_SMKS 9
+
+typedef struct _TAPE_CREATE_PARTITION {
+    DWORD Method;
+    DWORD Count;
+    DWORD Size;
+} TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION;
+
+typedef struct _TAPE_ERASE {
+    DWORD Type;
+    BOOLEAN Immediate;
+} TAPE_ERASE, *PTAPE_ERASE;
+
+typedef struct _TAPE_PREPARE {
+    DWORD Operation;
+    BOOLEAN Immediate;
+} TAPE_PREPARE, *PTAPE_PREPARE;
+
+typedef struct _TAPE_SET_DRIVE_PARAMETERS {
+    BOOLEAN ECC;
+    BOOLEAN Compression;
+    BOOLEAN DataPadding;
+    BOOLEAN ReportSetmarks;
+    ULONG EOTWarningZoneSize;
+} TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_SET_MEDIA_PARAMETERS {
+    ULONG BlockSize;
+} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS;
+
+typedef struct _TAPE_WRITE_MARKS {
+    DWORD Type;
+    DWORD Count;
+    BOOLEAN Immediate;
+} TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS;
+
+typedef struct _TAPE_GET_POSITION {
+    ULONG Type;
+    ULONG Partition;
+    ULONG OffsetLow;
+    ULONG OffsetHigh;
+} TAPE_GET_POSITION, *PTAPE_GET_POSITION;
+
+typedef struct _TAPE_SET_POSITION {
+    ULONG Method;
+    ULONG Partition;
+    LARGE_INTEGER Offset;
+    BOOLEAN Immediate;
+} TAPE_SET_POSITION, *PTAPE_SET_POSITION;
+
+typedef struct _TAPE_GET_DRIVE_PARAMETERS {
+    BOOLEAN ECC;
+    BOOLEAN Compression;
+    BOOLEAN DataPadding;
+    BOOLEAN ReportSetmarks;
+    DWORD DefaultBlockSize;
+    DWORD MaximumBlockSize;
+    DWORD MinimumBlockSize;
+    DWORD MaximumPartitionCount;
+    DWORD FeaturesLow;
+    DWORD FeaturesHigh;
+    DWORD EOTWarningZoneSize;
+} TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_GET_MEDIA_PARAMETERS {
+    LARGE_INTEGER Capacity;
+    LARGE_INTEGER Remaining;
+    DWORD BlockSize;
+    DWORD PartitionCount;
+    BOOLEAN WriteProtected;
+} TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS;
+
+/* ----------------------------- begin registry ----------------------------- */
+
+/* Registry security values */
+#define OWNER_SECURITY_INFORMATION	0x00000001
+#define GROUP_SECURITY_INFORMATION	0x00000002
+#define DACL_SECURITY_INFORMATION	0x00000004
+#define SACL_SECURITY_INFORMATION	0x00000008
+
+#define REG_OPTION_RESERVED		0x00000000
+#define REG_OPTION_NON_VOLATILE		0x00000000
+#define REG_OPTION_VOLATILE		0x00000001
+#define REG_OPTION_CREATE_LINK		0x00000002
+#define REG_OPTION_BACKUP_RESTORE	0x00000004 /* FIXME */
+#define REG_OPTION_OPEN_LINK		0x00000008
+#define REG_LEGAL_OPTION	       (REG_OPTION_RESERVED|  \
+					REG_OPTION_NON_VOLATILE|  \
+					REG_OPTION_VOLATILE|  \
+					REG_OPTION_CREATE_LINK|  \
+					REG_OPTION_BACKUP_RESTORE|  \
+					REG_OPTION_OPEN_LINK)
+
+
+#define REG_CREATED_NEW_KEY	0x00000001
+#define REG_OPENED_EXISTING_KEY	0x00000002
+
+/* For RegNotifyChangeKeyValue */
+#define REG_NOTIFY_CHANGE_NAME       0x01
+#define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
+#define REG_NOTIFY_CHANGE_LAST_SET   0x04
+#define REG_NOTIFY_CHANGE_SECURITY   0x08
+
+#define KEY_QUERY_VALUE		0x00000001
+#define KEY_SET_VALUE		0x00000002
+#define KEY_CREATE_SUB_KEY	0x00000004
+#define KEY_ENUMERATE_SUB_KEYS	0x00000008
+#define KEY_NOTIFY		0x00000010
+#define KEY_CREATE_LINK		0x00000020
+#define KEY_WOW64_64KEY         0x00000100
+#define KEY_WOW64_32KEY         0x00000200
+#define KEY_WOW64_RES           0x00000300
+
+/* for RegKeyRestore flags */
+#define REG_WHOLE_HIVE_VOLATILE 0x00000001
+#define REG_REFRESH_HIVE        0x00000002
+#define REG_NO_LAZY_FLUSH       0x00000004
+#define REG_FORCE_RESTORE       0x00000008
+
+#define KEY_READ	      ((STANDARD_RIGHTS_READ|  \
+				KEY_QUERY_VALUE|  \
+				KEY_ENUMERATE_SUB_KEYS|  \
+				KEY_NOTIFY)  \
+				& (~SYNCHRONIZE)  \
+			      )
+#define KEY_WRITE	      ((STANDARD_RIGHTS_WRITE|  \
+				KEY_SET_VALUE|  \
+				KEY_CREATE_SUB_KEY)  \
+				& (~SYNCHRONIZE)  \
+			      )
+#define KEY_EXECUTE           ((KEY_READ) & (~SYNCHRONIZE))
+#define KEY_ALL_ACCESS        ((STANDARD_RIGHTS_ALL|  \
+				KEY_QUERY_VALUE|  \
+				KEY_SET_VALUE|  \
+				KEY_CREATE_SUB_KEY|  \
+				KEY_ENUMERATE_SUB_KEYS|  \
+				KEY_NOTIFY|  \
+				KEY_CREATE_LINK)  \
+				& (~SYNCHRONIZE)  \
+			      )
+/* ------------------------------ end registry ------------------------------ */
+
+
+#define EVENTLOG_SUCCESS                0x0000
+#define EVENTLOG_ERROR_TYPE             0x0001
+#define EVENTLOG_WARNING_TYPE           0x0002
+#define EVENTLOG_INFORMATION_TYPE       0x0004
+#define EVENTLOG_AUDIT_SUCCESS          0x0008
+#define EVENTLOG_AUDIT_FAILURE          0x0010
+
+#define EVENTLOG_SEQUENTIAL_READ        0x0001
+#define EVENTLOG_SEEK_READ              0x0002
+#define EVENTLOG_FORWARDS_READ          0x0004
+#define EVENTLOG_BACKWARDS_READ         0x0008
+
+typedef struct _EVENTLOGRECORD {
+    DWORD  Length;
+    DWORD  Reserved;
+    DWORD  RecordNumber;
+    DWORD  TimeGenerated;
+    DWORD  TimeWritten;
+    DWORD  EventID;
+    WORD   EventType;
+    WORD   NumStrings;
+    WORD   EventCategory;
+    WORD   ReservedFlags;
+    DWORD  ClosingRecordNumber;
+    DWORD  StringOffset;
+    DWORD  UserSidLength;
+    DWORD  UserSidOffset;
+    DWORD  DataLength;
+    DWORD  DataOffset;
+} EVENTLOGRECORD, *PEVENTLOGRECORD;
+
+#define SERVICE_BOOT_START   0x00000000
+#define SERVICE_SYSTEM_START 0x00000001
+#define SERVICE_AUTO_START   0x00000002
+#define SERVICE_DEMAND_START 0x00000003
+#define SERVICE_DISABLED     0x00000004
+
+#define SERVICE_ERROR_IGNORE   0x00000000
+#define SERVICE_ERROR_NORMAL   0x00000001
+#define SERVICE_ERROR_SEVERE   0x00000002
+#define SERVICE_ERROR_CRITICAL 0x00000003
+
+/* Service types */
+#define SERVICE_KERNEL_DRIVER      0x00000001
+#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
+#define SERVICE_ADAPTER            0x00000004
+#define SERVICE_RECOGNIZER_DRIVER  0x00000008
+
+#define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \
+                         SERVICE_RECOGNIZER_DRIVER )
+
+#define SERVICE_WIN32_OWN_PROCESS   0x00000010
+#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
+#define SERVICE_WIN32  (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
+
+#define SERVICE_INTERACTIVE_PROCESS 0x00000100
+
+#define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \
+                           SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )
+
+
+typedef enum _CM_SERVICE_NODE_TYPE
+{
+  DriverType               = SERVICE_KERNEL_DRIVER,
+  FileSystemType           = SERVICE_FILE_SYSTEM_DRIVER,
+  Win32ServiceOwnProcess   = SERVICE_WIN32_OWN_PROCESS,
+  Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
+  AdapterType              = SERVICE_ADAPTER,
+  RecognizerType           = SERVICE_RECOGNIZER_DRIVER
+} SERVICE_NODE_TYPE;
+
+typedef enum _CM_SERVICE_LOAD_TYPE
+{
+  BootLoad    = SERVICE_BOOT_START,
+  SystemLoad  = SERVICE_SYSTEM_START,
+  AutoLoad    = SERVICE_AUTO_START,
+  DemandLoad  = SERVICE_DEMAND_START,
+  DisableLoad = SERVICE_DISABLED
+} SERVICE_LOAD_TYPE;
+
+typedef enum _CM_ERROR_CONTROL_TYPE
+{
+  IgnoreError   = SERVICE_ERROR_IGNORE,
+  NormalError   = SERVICE_ERROR_NORMAL,
+  SevereError   = SERVICE_ERROR_SEVERE,
+  CriticalError = SERVICE_ERROR_CRITICAL
+} SERVICE_ERROR_TYPE;
+
+
+
+#define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))
+#define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))
+#define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))
+#define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))
+#define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))
+
+#include <guiddef.h>
+
+typedef struct _OBJECT_TYPE_LIST {
+    WORD   Level;
+    WORD   Sbz;
+    GUID *ObjectType;
+} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
+
+typedef struct _RTL_CRITICAL_SECTION_DEBUG
+{
+  WORD   Type;
+  WORD   CreatorBackTraceIndex;
+  struct _RTL_CRITICAL_SECTION *CriticalSection;
+  LIST_ENTRY ProcessLocksList;
+  DWORD EntryCount;
+  DWORD ContentionCount;
+#ifdef __WINESRC__  /* in Wine we store the name here */
+  DWORD_PTR Spare[8/sizeof(DWORD_PTR)];
+#else
+  DWORD Spare[ 2 ];
+#endif
+} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
+
+typedef struct _RTL_CRITICAL_SECTION {
+    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
+    LONG LockCount;
+    LONG RecursionCount;
+    HANDLE OwningThread;
+    HANDLE LockSemaphore;
+    ULONG_PTR SpinCount;
+}  RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
+
+#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000
+#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN  0x2000000
+#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT   0x4000000
+#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS      0xFF000000
+#define RTL_CRITICAL_SECTION_FLAG_RESERVED      (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000)
+
+typedef struct _RTL_SRWLOCK {
+    PVOID Ptr;
+} RTL_SRWLOCK, *PRTL_SRWLOCK;
+
+#define RTL_SRWLOCK_INIT {0}
+
+typedef struct _RTL_CONDITION_VARIABLE {
+    PVOID Ptr;
+} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
+#define RTL_CONDITION_VARIABLE_INIT {0}
+#define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED  0x1
+
+typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
+typedef VOID (NTAPI * PFLS_CALLBACK_FUNCTION) ( PVOID );
+
+#define RTL_RUN_ONCE_INIT {0}
+typedef union _RTL_RUN_ONCE {
+    PVOID Ptr;
+} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
+
+#define RTL_RUN_ONCE_CHECK_ONLY     0x00000001
+#define RTL_RUN_ONCE_ASYNC          0x00000002
+#define RTL_RUN_ONCE_INIT_FAILED    0x00000004
+
+typedef DWORD WINAPI RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE, PVOID, PVOID*);
+typedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN;
+NTSYSAPI VOID WINAPI RtlRunOnceInitialize(PRTL_RUN_ONCE);
+NTSYSAPI DWORD WINAPI RtlRunOnceExecuteOnce(PRTL_RUN_ONCE,PRTL_RUN_ONCE_INIT_FN,PVOID,PVOID*);
+NTSYSAPI DWORD WINAPI RtlRunOnceBeginInitialize(PRTL_RUN_ONCE, DWORD, PVOID*);
+NTSYSAPI DWORD WINAPI RtlRunOnceComplete(PRTL_RUN_ONCE, DWORD, PVOID);
+
+#include <pshpack8.h>
+typedef struct _IO_COUNTERS {
+    ULONGLONG DECLSPEC_ALIGN(8) ReadOperationCount;
+    ULONGLONG DECLSPEC_ALIGN(8) WriteOperationCount;
+    ULONGLONG DECLSPEC_ALIGN(8) OtherOperationCount;
+    ULONGLONG DECLSPEC_ALIGN(8) ReadTransferCount;
+    ULONGLONG DECLSPEC_ALIGN(8) WriteTransferCount;
+    ULONGLONG DECLSPEC_ALIGN(8) OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+#include <poppack.h>
+
+typedef struct {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	CHAR szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+
+typedef struct {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	WCHAR szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+DECL_WINELIB_TYPE_AW(OSVERSIONINFO)
+DECL_WINELIB_TYPE_AW(POSVERSIONINFO)
+DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO)
+
+typedef struct {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	CHAR szCSDVersion[128];
+	WORD wServicePackMajor;
+	WORD wServicePackMinor;
+	WORD wSuiteMask;
+	BYTE wProductType;
+	BYTE wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	WCHAR szCSDVersion[128];
+	WORD wServicePackMajor;
+	WORD wServicePackMinor;
+	WORD wSuiteMask;
+	BYTE wProductType;
+	BYTE wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX)
+DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX)
+DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX)
+
+NTSYSAPI ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
+
+#define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
+
+#define VER_PLATFORM_WIN32s                     0
+#define VER_PLATFORM_WIN32_WINDOWS              1
+#define VER_PLATFORM_WIN32_NT                   2
+
+#define	VER_MINORVERSION			0x00000001
+#define	VER_MAJORVERSION			0x00000002
+#define	VER_BUILDNUMBER				0x00000004
+#define	VER_PLATFORMID				0x00000008
+#define	VER_SERVICEPACKMINOR			0x00000010
+#define	VER_SERVICEPACKMAJOR			0x00000020
+#define	VER_SUITENAME				0x00000040
+#define	VER_PRODUCT_TYPE			0x00000080
+
+#define	VER_NT_WORKSTATION			1
+#define	VER_NT_DOMAIN_CONTROLLER		2
+#define	VER_NT_SERVER				3
+
+#define	VER_SUITE_SMALLBUSINESS			0x00000001
+#define	VER_SUITE_ENTERPRISE			0x00000002
+#define	VER_SUITE_BACKOFFICE			0x00000004
+#define	VER_SUITE_COMMUNICATIONS		0x00000008
+#define	VER_SUITE_TERMINAL			0x00000010
+#define	VER_SUITE_SMALLBUSINESS_RESTRICTED	0x00000020
+#define	VER_SUITE_EMBEDDEDNT			0x00000040
+#define	VER_SUITE_DATACENTER			0x00000080
+#define	VER_SUITE_SINGLEUSERTS			0x00000100
+#define	VER_SUITE_PERSONAL			0x00000200
+#define	VER_SUITE_BLADE				0x00000400
+#define	VER_SUITE_EMBEDDED_RESTRICTED		0x00000800
+#define	VER_SUITE_SECURITY_APPLIANCE		0x00001000
+#define VER_SUITE_STORAGE_SERVER                0x00002000
+#define VER_SUITE_COMPUTE_SERVER                0x00004000
+#define VER_SUITE_WH_SERVER                     0x00008000
+
+#define	VER_EQUAL				1
+#define	VER_GREATER				2
+#define	VER_GREATER_EQUAL			3
+#define	VER_LESS				4
+#define	VER_LESS_EQUAL				5
+#define	VER_AND					6
+#define	VER_OR					7
+
+typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
+    DWORD dwFlags;
+    DWORD ulFormatVersion;
+    DWORD ulAssemblyCount;
+    DWORD ulRootManifestPathType;
+    DWORD ulRootManifestPathChars;
+    DWORD ulRootConfigurationPathType;
+    DWORD ulRootConfigurationPathChars;
+    DWORD ulAppDirPathType;
+    DWORD ulAppDirPathChars;
+    PCWSTR lpRootManifestPath;
+    PCWSTR lpRootConfigurationPath;
+    PCWSTR lpAppDirPath;
+} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;
+
+typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
+    DWORD ulFlags;
+    DWORD ulEncodedAssemblyIdentityLength;
+    DWORD ulManifestPathType;
+    DWORD ulManifestPathLength;
+    LARGE_INTEGER liManifestLastWriteTime;
+    DWORD ulPolicyPathType;
+    DWORD ulPolicyPathLength;
+    LARGE_INTEGER liPolicyLastWriteTime;
+    DWORD ulMetadataSatelliteRosterIndex;
+    DWORD ulManifestVersionMajor;
+    DWORD ulManifestVersionMinor;
+    DWORD ulPolicyVersionMajor;
+    DWORD ulPolicyVersionMinor;
+    DWORD ulAssemblyDirectoryNameLength;
+    PCWSTR lpAssemblyEncodedAssemblyIdentity;
+    PCWSTR lpAssemblyManifestPath;
+    PCWSTR lpAssemblyPolicyPath;
+    PCWSTR lpAssemblyDirectoryName;
+    DWORD  ulFileCount;
+} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+
+typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
+    DWORD ulAssemblyIndex;
+    DWORD ulFileIndexInAssembly;
+} ACTIVATION_CONTEXT_QUERY_INDEX, *PACTIVATION_CONTEXT_QUERY_INDEX;
+
+typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
+
+typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
+    DWORD ulFlags;
+    DWORD ulFilenameLength;
+    DWORD ulPathLength;
+    PCWSTR lpFileName;
+    PCWSTR lpFilePath;
+} ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION;
+
+typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
+
+typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
+    ActivationContextBasicInformation                       = 1,
+    ActivationContextDetailedInformation                    = 2,
+    AssemblyDetailedInformationInActivationContext          = 3,
+    FileInformationInAssemblyOfAssemblyInActivationContext  = 4,
+    MaxActivationContextInfoClass,
+
+    AssemblyDetailedInformationInActivationContxt          = 3,
+    FileInformationInAssemblyOfAssemblyInActivationContxt  = 4
+} ACTIVATION_CONTEXT_INFO_CLASS;
+
+#define ACTIVATION_CONTEXT_PATH_TYPE_NONE         1
+#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE   2
+#define ACTIVATION_CONTEXT_PATH_TYPE_URL          3
+#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF  4
+
+#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION          1
+#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION               2
+#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION      3
+#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION        4
+#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION     5
+#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION  6
+#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION        7
+#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE    8
+#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES                9
+
+typedef enum _JOBOBJECTINFOCLASS
+{
+    JobObjectBasicAccountingInformation = 1,
+    JobObjectBasicLimitInformation,
+    JobObjectBasicProcessIdList,
+    JobObjectBasicUIRestrictions,
+    JobObjectSecurityLimitInformation,
+    JobObjectEndOfJobTimeInformation,
+    JobObjectAssociateCompletionPortInformation,
+    JobObjectBasicAndIoAccountingInformation,
+    JobObjectExtendedLimitInformation,
+    JobObjectJobSetInformation,
+    MaxJobObjectInfoClass
+} JOBOBJECTINFOCLASS;
+
+typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
+{
+    RelationProcessorCore    = 0,
+    RelationNumaNode         = 1,
+    RelationCache            = 2,
+    RelationProcessorPackage = 3,
+    RelationGroup            = 4,
+    RelationAll              = 0xffff
+} LOGICAL_PROCESSOR_RELATIONSHIP;
+
+typedef enum _PROCESSOR_CACHE_TYPE
+{
+    CacheUnified,
+    CacheInstruction,
+    CacheData,
+    CacheTrace
+} PROCESSOR_CACHE_TYPE;
+
+typedef struct _PROCESSOR_GROUP_INFO
+{
+    BYTE MaximumProcessorCount;
+    BYTE ActiveProcessorCount;
+    BYTE Reserved[38];
+    KAFFINITY ActiveProcessorMask;
+} PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
+
+typedef struct _CACHE_DESCRIPTOR
+{
+    BYTE Level;
+    BYTE Associativity;
+    WORD LineSize;
+    DWORD Size;
+    PROCESSOR_CACHE_TYPE Type;
+} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
+
+typedef struct _GROUP_AFFINITY
+{
+    KAFFINITY Mask;
+    WORD Group;
+    WORD Reserved[3];
+} GROUP_AFFINITY, *PGROUP_AFFINITY;
+
+typedef struct _PROCESSOR_NUMBER
+{
+    WORD Group;
+    BYTE Number;
+    BYTE Reserved;
+} PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
+
+typedef struct _PROCESSOR_RELATIONSHIP
+{
+    BYTE Flags;
+    BYTE Reserved[21];
+    WORD GroupCount;
+    GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
+} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
+
+
+typedef struct _NUMA_NODE_RELATIONSHIP
+{
+    DWORD NodeNumber;
+    BYTE Reserved[20];
+    GROUP_AFFINITY GroupMask;
+} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
+
+typedef struct _CACHE_RELATIONSHIP
+{
+    BYTE Level;
+    BYTE Associativity;
+    WORD LineSize;
+    PROCESSOR_CACHE_TYPE Type;
+    BYTE Reserved[20];
+    GROUP_AFFINITY GroupMask;
+} CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
+
+typedef struct _GROUP_RELATIONSHIP
+{
+    WORD MaximumGroupCount;
+    WORD ActiveGroupCount;
+    BYTE Reserved[20];
+    PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
+} GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
+{
+    ULONG_PTR ProcessorMask;
+    LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+    union
+    {
+        struct
+        {
+            BYTE Flags;
+        } ProcessorCore;
+        struct
+        {
+            DWORD NodeNumber;
+        } NumaNode;
+        CACHE_DESCRIPTOR Cache;
+        ULONGLONG Reserved[2];
+    } DUMMYUNIONNAME;
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
+{
+    LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+    DWORD Size;
+    union
+    {
+        PROCESSOR_RELATIONSHIP Processor;
+        NUMA_NODE_RELATIONSHIP NumaNode;
+        CACHE_RELATIONSHIP Cache;
+        GROUP_RELATIONSHIP Group;
+    } DUMMYUNIONNAME;
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
+
+NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _WINNT_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
new file mode 100644
index 0000000..1013a24
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
@@ -0,0 +1,450 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+
+/* These are only defined for Winelib, i.e. _not_ defined for
+ * the emulator. The reason is they depend on the UNICODE
+ * macro which only exists in the user's code.
+ */
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+#  define __TEXT(string) L##string
+# else
+#  define __TEXT(string) string
+# endif
+# define TEXT(string) __TEXT(string)
+#endif
+
+
+/* Language definitions */
+#define LANG_NEUTRAL        0x00
+#define LANG_INVARIANT      0x7f
+
+#define LANG_AFRIKAANS      0x36
+#define LANG_ALBANIAN       0x1c
+#define LANG_ALSATIAN       0x84
+#define LANG_AMHARIC        0x5e
+#define LANG_ARABIC         0x01
+#define LANG_ARMENIAN       0x2b
+#define LANG_ASSAMESE       0x4d
+#define LANG_AZERI          0x2c
+#define LANG_BASHKIR        0x6d
+#define LANG_BASQUE         0x2d
+#define LANG_BELARUSIAN     0x23
+#define LANG_BENGALI        0x45
+#define LANG_BOSNIAN        0x1a
+#define LANG_BOSNIAN_NEUTRAL      0x781a
+#define LANG_BRETON         0x7e
+#define LANG_BULGARIAN      0x02
+#define LANG_CATALAN        0x03
+#define LANG_CHINESE        0x04
+#define LANG_CHINESE_SIMPLIFIED   0x0004
+#define LANG_CHINESE_TRADITIONAL  0x7c04
+#define LANG_CORSICAN       0x83
+#define LANG_CROATIAN       0x1a
+#define LANG_CZECH          0x05
+#define LANG_DANISH         0x06
+#define LANG_DARI           0x8c
+#define LANG_DIVEHI         0x65
+#define LANG_DUTCH          0x13
+#define LANG_ENGLISH        0x09
+#define LANG_ESTONIAN       0x25
+#define LANG_FAEROESE       0x38
+#define LANG_FARSI          LANG_PERSIAN
+#define LANG_FILIPINO       0x64
+#define LANG_FINNISH        0x0b
+#define LANG_FRENCH         0x0c
+#define LANG_FRISIAN        0x62
+#define LANG_GALICIAN       0x56
+#define LANG_GEORGIAN       0x37
+#define LANG_GERMAN         0x07
+#define LANG_GREEK          0x08
+#define LANG_GREENLANDIC    0x6f
+#define LANG_GUJARATI       0x47
+#define LANG_HAUSA          0x68
+#define LANG_HEBREW         0x0d
+#define LANG_HINDI          0x39
+#define LANG_HUNGARIAN      0x0e
+#define LANG_ICELANDIC      0x0f
+#define LANG_IGBO           0x70
+#define LANG_INDONESIAN     0x21
+#define LANG_INUKTITUT      0x5d
+#define LANG_IRISH          0x3c
+#define LANG_ITALIAN        0x10
+#define LANG_JAPANESE       0x11
+#define LANG_KANNADA        0x4b
+#define LANG_KASHMIRI       0x60
+#define LANG_KAZAK          0x3f
+#define LANG_KHMER          0x53
+#define LANG_KICHE          0x86
+#define LANG_KINYARWANDA    0x87
+#define LANG_KONKANI        0x57
+#define LANG_KOREAN         0x12
+#define LANG_KYRGYZ         0x40
+#define LANG_LAO            0x54
+#define LANG_LATVIAN        0x26
+#define LANG_LITHUANIAN     0x27
+#define LANG_LOWER_SORBIAN  0x2e
+#define LANG_LUXEMBOURGISH  0x6e
+#define LANG_MACEDONIAN     0x2f
+#define LANG_MALAY          0x3e
+#define LANG_MALAYALAM      0x4c
+#define LANG_MALTESE        0x3a
+#define LANG_MANIPURI       0x58
+#define LANG_MAORI          0x81
+#define LANG_MAPUDUNGUN     0x7a
+#define LANG_MARATHI        0x4e
+#define LANG_MOHAWK         0x7c
+#define LANG_MONGOLIAN      0x50
+#define LANG_NEPALI         0x61
+#define LANG_NORWEGIAN      0x14
+#define LANG_OCCITAN        0x82
+#define LANG_ORIYA          0x48
+#define LANG_PASHTO         0x63
+#define LANG_PERSIAN        0x29
+#define LANG_POLISH         0x15
+#define LANG_PORTUGUESE     0x16
+#define LANG_PUNJABI        0x46
+#define LANG_QUECHUA        0x6b
+#define LANG_ROMANIAN       0x18
+#define LANG_ROMANSH        0x17
+#define LANG_RUSSIAN        0x19
+#define LANG_SAMI           0x3b
+#define LANG_SANSKRIT       0x4f
+#define LANG_SCOTTISH_GAELIC 0x91
+#define LANG_SERBIAN        0x1a
+#define LANG_SERBIAN_NEUTRAL      0x7c1a
+#define LANG_SINDHI         0x59
+#define LANG_SINHALESE      0x5b
+#define LANG_SLOVAK         0x1b
+#define LANG_SLOVENIAN      0x24
+#define LANG_SOTHO          0x6c
+#define LANG_SPANISH        0x0a
+#define LANG_SWAHILI        0x41
+#define LANG_SWEDISH        0x1d
+#define LANG_SYRIAC         0x5a
+#define LANG_TAJIK          0x28
+#define LANG_TAMAZIGHT      0x5f
+#define LANG_TAMIL          0x49
+#define LANG_TATAR          0x44
+#define LANG_TELUGU         0x4a
+#define LANG_THAI           0x1e
+#define LANG_TIBETAN        0x51
+#define LANG_TIGRIGNA       0x73
+#define LANG_TSWANA         0x32
+#define LANG_TURKISH        0x1f
+#define LANG_TURKMEN        0x42
+#define LANG_UIGHUR         0x80
+#define LANG_UKRAINIAN      0x22
+#define LANG_UPPER_SORBIAN  0x2e
+#define LANG_URDU           0x20
+#define LANG_UZBEK          0x43
+#define LANG_VIETNAMESE     0x2a
+#define LANG_WELSH          0x52
+#define LANG_WOLOF          0x88
+#define LANG_XHOSA          0x34
+#define LANG_YAKUT          0x85
+#define LANG_YI             0x78
+#define LANG_YORUBA         0x6a
+#define LANG_ZULU           0x35
+
+/* These are documented by the MSDN but are missing from the Windows header */
+#define LANG_MALAGASY       0x8d
+
+/* FIXME: these are not defined anywhere */
+#define LANG_SUTU           0x30
+#define LANG_TSONGA         0x31
+#define LANG_VENDA          0x33
+
+/* non standard; keep the number high enough (but < 0xff) */
+#define LANG_ESPERANTO			 0x8f
+#define LANG_WALON			 0x90
+#define LANG_CORNISH                     0x92
+#define LANG_MANX_GAELIC                 0x94
+
+/* Sublanguage definitions */
+#define SUBLANG_NEUTRAL                  0x00    /* language neutral */
+#define SUBLANG_DEFAULT                  0x01    /* user default */
+#define SUBLANG_SYS_DEFAULT              0x02    /* system default */
+#define SUBLANG_CUSTOM_DEFAULT           0x03
+#define SUBLANG_CUSTOM_UNSPECIFIED       0x04
+#define SUBLANG_UI_CUSTOM_DEFAULT        0x05
+
+#define SUBLANG_AFRIKAANS_SOUTH_AFRICA     0x01
+#define SUBLANG_ALBANIAN_ALBANIA           0x01
+#define SUBLANG_ALSATIAN_FRANCE            0x01
+#define SUBLANG_AMHARIC_ETHIOPIA           0x01
+#define SUBLANG_ARABIC_SAUDI_ARABIA        0x01
+#define SUBLANG_ARABIC_IRAQ                0x02
+#define SUBLANG_ARABIC_EGYPT               0x03
+#define SUBLANG_ARABIC_LIBYA               0x04
+#define SUBLANG_ARABIC_ALGERIA             0x05
+#define SUBLANG_ARABIC_MOROCCO             0x06
+#define SUBLANG_ARABIC_TUNISIA             0x07
+#define SUBLANG_ARABIC_OMAN                0x08
+#define SUBLANG_ARABIC_YEMEN               0x09
+#define SUBLANG_ARABIC_SYRIA               0x0a
+#define SUBLANG_ARABIC_JORDAN              0x0b
+#define SUBLANG_ARABIC_LEBANON             0x0c
+#define SUBLANG_ARABIC_KUWAIT              0x0d
+#define SUBLANG_ARABIC_UAE                 0x0e
+#define SUBLANG_ARABIC_BAHRAIN             0x0f
+#define SUBLANG_ARABIC_QATAR               0x10
+#define SUBLANG_ARMENIAN_ARMENIA           0x01
+#define SUBLANG_ASSAMESE_INDIA             0x01
+#define SUBLANG_AZERI_LATIN                0x01
+#define SUBLANG_AZERI_CYRILLIC             0x02
+#define SUBLANG_BASHKIR_RUSSIA             0x01
+#define SUBLANG_BASQUE_BASQUE              0x01
+#define SUBLANG_BELARUSIAN_BELARUS         0x01
+#define SUBLANG_BENGALI_INDIA              0x01
+#define SUBLANG_BENGALI_BANGLADESH         0x02
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
+#define SUBLANG_BRETON_FRANCE              0x01
+#define SUBLANG_BULGARIAN_BULGARIA         0x01
+#define SUBLANG_CATALAN_CATALAN            0x01
+#define SUBLANG_CHINESE_TRADITIONAL        0x01
+#define SUBLANG_CHINESE_SIMPLIFIED         0x02
+#define SUBLANG_CHINESE_HONGKONG           0x03
+#define SUBLANG_CHINESE_SINGAPORE          0x04
+#define SUBLANG_CHINESE_MACAU              0x05
+#define SUBLANG_CORSICAN_FRANCE            0x01
+#define SUBLANG_CROATIAN_CROATIA           0x01
+#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
+#define SUBLANG_CZECH_CZECH_REPUBLIC       0x01
+#define SUBLANG_DANISH_DENMARK             0x01
+#define SUBLANG_DARI_AFGHANISTAN           0x01
+#define SUBLANG_DIVEHI_MALDIVES            0x01
+#define SUBLANG_DUTCH                      0x01
+#define SUBLANG_DUTCH_BELGIAN              0x02
+#define SUBLANG_ENGLISH_US                 0x01
+#define SUBLANG_ENGLISH_UK                 0x02
+#define SUBLANG_ENGLISH_AUS                0x03
+#define SUBLANG_ENGLISH_CAN                0x04
+#define SUBLANG_ENGLISH_NZ                 0x05
+#define SUBLANG_ENGLISH_EIRE               0x06
+#define SUBLANG_ENGLISH_SOUTH_AFRICA       0x07
+#define SUBLANG_ENGLISH_JAMAICA            0x08
+#define SUBLANG_ENGLISH_CARIBBEAN          0x09
+#define SUBLANG_ENGLISH_BELIZE             0x0a
+#define SUBLANG_ENGLISH_TRINIDAD           0x0b
+#define SUBLANG_ENGLISH_ZIMBABWE           0x0c
+#define SUBLANG_ENGLISH_PHILIPPINES        0x0d
+#define SUBLANG_ENGLISH_INDIA              0x10
+#define SUBLANG_ENGLISH_MALAYSIA           0x11
+#define SUBLANG_ENGLISH_SINGAPORE          0x12
+#define SUBLANG_ESTONIAN_ESTONIA           0x01
+#define SUBLANG_FAEROESE_FAROE_ISLANDS     0x01
+#define SUBLANG_FILIPINO_PHILIPPINES       0x01
+#define SUBLANG_FINNISH_FINLAND            0x01
+#define SUBLANG_FRENCH                     0x01
+#define SUBLANG_FRENCH_BELGIAN             0x02
+#define SUBLANG_FRENCH_CANADIAN            0x03
+#define SUBLANG_FRENCH_SWISS               0x04
+#define SUBLANG_FRENCH_LUXEMBOURG          0x05
+#define SUBLANG_FRENCH_MONACO              0x06
+#define SUBLANG_FRISIAN_NETHERLANDS        0x01
+#define SUBLANG_GALICIAN_GALICIAN          0x01
+#define SUBLANG_GEORGIAN_GEORGIA           0x01
+#define SUBLANG_GERMAN                     0x01
+#define SUBLANG_GERMAN_SWISS               0x02
+#define SUBLANG_GERMAN_AUSTRIAN            0x03
+#define SUBLANG_GERMAN_LUXEMBOURG          0x04
+#define SUBLANG_GERMAN_LIECHTENSTEIN       0x05
+#define SUBLANG_GREEK_GREECE               0x01
+#define SUBLANG_GREENLANDIC_GREENLAND      0x01
+#define SUBLANG_GUJARATI_INDIA             0x01
+#define SUBLANG_HAUSA_NIGERIA_LATIN        0x01
+#define SUBLANG_HEBREW_ISRAEL              0x01
+#define SUBLANG_HINDI_INDIA                0x01
+#define SUBLANG_HUNGARIAN_HUNGARY          0x01
+#define SUBLANG_ICELANDIC_ICELAND          0x01
+#define SUBLANG_IGBO_NIGERIA               0x01
+#define SUBLANG_INDONESIAN_INDONESIA       0x01
+#define SUBLANG_INUKTITUT_CANADA           0x01
+#define SUBLANG_INUKTITUT_CANADA_LATIN     0x02
+#define SUBLANG_IRISH_IRELAND              0x02
+#define SUBLANG_ITALIAN                    0x01
+#define SUBLANG_ITALIAN_SWISS              0x02
+#define SUBLANG_JAPANESE_JAPAN             0x01
+#define SUBLANG_KANNADA_INDIA              0x01
+#define SUBLANG_KASHMIRI_SASIA             0x02
+#define SUBLANG_KASHMIRI_INDIA             0x02
+#define SUBLANG_KAZAK_KAZAKHSTAN           0x01
+#define SUBLANG_KHMER_CAMBODIA             0x01
+#define SUBLANG_KICHE_GUATEMALA            0x01
+#define SUBLANG_KINYARWANDA_RWANDA         0X01
+#define SUBLANG_KONKANI_INDIA              0x01
+#define SUBLANG_KOREAN                     0x01
+#define SUBLANG_KYRGYZ_KYRGYZSTAN          0x01
+#define SUBLANG_LAO_LAO                    0x01
+#define SUBLANG_LATVIAN_LATVIA             0x01
+#define SUBLANG_LITHUANIAN                 0x01
+#define SUBLANG_LOWER_SORBIAN_GERMANY      0x02
+#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG   0x01
+#define SUBLANG_MACEDONIAN_MACEDONIA       0x01
+#define SUBLANG_MALAY_MALAYSIA             0x01
+#define SUBLANG_MALAY_BRUNEI_DARUSSALAM    0x02
+#define SUBLANG_MALAYALAM_INDIA            0x01
+#define SUBLANG_MALTESE_MALTA              0x01
+#define SUBLANG_MAORI_NEW_ZEALAND          0x01
+#define SUBLANG_MAPUDUNGUN_CHILE           0x01
+#define SUBLANG_MARATHI_INDIA              0x01
+#define SUBLANG_MOHAWK_MOHAWK              0x01
+#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
+#define SUBLANG_MONGOLIAN_PRC              0x02
+#define SUBLANG_NEPALI_INDIA               0x02
+#define SUBLANG_NEPALI_NEPAL               0x01
+#define SUBLANG_NORWEGIAN_BOKMAL           0x01
+#define SUBLANG_NORWEGIAN_NYNORSK          0x02
+#define SUBLANG_OCCITAN_FRANCE             0x01
+#define SUBLANG_ORIYA_INDIA                0x01
+#define SUBLANG_PASHTO_AFGHANISTAN         0x01
+#define SUBLANG_PERSIAN_IRAN               0x01
+#define SUBLANG_POLISH_POLAND              0x01
+#define SUBLANG_PORTUGUESE                 0x02
+#define SUBLANG_PORTUGUESE_BRAZILIAN       0x01
+#define SUBLANG_PUNJABI_INDIA              0x01
+#define SUBLANG_QUECHUA_BOLIVIA            0x01
+#define SUBLANG_QUECHUA_ECUADOR            0x02
+#define SUBLANG_QUECHUA_PERU               0x03
+#define SUBLANG_ROMANIAN_ROMANIA           0x01
+#define SUBLANG_ROMANSH_SWITZERLAND        0x01
+#define SUBLANG_RUSSIAN_RUSSIA             0x01
+#define SUBLANG_SAMI_NORTHERN_NORWAY       0x01
+#define SUBLANG_SAMI_NORTHERN_SWEDEN       0x02
+#define SUBLANG_SAMI_NORTHERN_FINLAND      0x03
+#define SUBLANG_SAMI_LULE_NORWAY           0x04
+#define SUBLANG_SAMI_LULE_SWEDEN           0x05
+#define SUBLANG_SAMI_SOUTHERN_NORWAY       0x06
+#define SUBLANG_SAMI_SOUTHERN_SWEDEN       0x07
+#define SUBLANG_SAMI_SKOLT_FINLAND         0x08
+#define SUBLANG_SAMI_INARI_FINLAND         0x09
+#define SUBLANG_SANSKRIT_INDIA             0x01
+#define SUBLANG_SCOTTISH_GAELIC            0x01
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
+#define SUBLANG_SERBIAN_CROATIA            0x01
+#define SUBLANG_SERBIAN_LATIN              0x02
+#define SUBLANG_SERBIAN_CYRILLIC           0x03
+#define SUBLANG_SERBIAN_SERBIA_LATIN       0x09
+#define SUBLANG_SERBIAN_SERBIA_CYRILLIC    0x0a
+#define SUBLANG_SERBIAN_MONTENEGRO_LATIN   0x0b
+#define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0x0c
+#define SUBLANG_SINDHI_INDIA               0x01
+#define SUBLANG_SINDHI_AFGHANISTAN         0x02
+#define SUBLANG_SINDHI_PAKISTAN            SUBLANG_SINDHI_AFGHANISTAN
+#define SUBLANG_SINHALESE_SRI_LANKA        0x01
+#define SUBLANG_SLOVAK_SLOVAKIA            0x01
+#define SUBLANG_SLOVENIAN_SLOVENIA         0x01
+#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
+#define SUBLANG_SPANISH                    0x01
+#define SUBLANG_SPANISH_MEXICAN            0x02
+#define SUBLANG_SPANISH_MODERN             0x03
+#define SUBLANG_SPANISH_GUATEMALA          0x04
+#define SUBLANG_SPANISH_COSTA_RICA         0x05
+#define SUBLANG_SPANISH_PANAMA             0x06
+#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+#define SUBLANG_SPANISH_VENEZUELA          0x08
+#define SUBLANG_SPANISH_COLOMBIA           0x09
+#define SUBLANG_SPANISH_PERU               0x0a
+#define SUBLANG_SPANISH_ARGENTINA          0x0b
+#define SUBLANG_SPANISH_ECUADOR            0x0c
+#define SUBLANG_SPANISH_CHILE              0x0d
+#define SUBLANG_SPANISH_URUGUAY            0x0e
+#define SUBLANG_SPANISH_PARAGUAY           0x0f
+#define SUBLANG_SPANISH_BOLIVIA            0x10
+#define SUBLANG_SPANISH_EL_SALVADOR        0x11
+#define SUBLANG_SPANISH_HONDURAS           0x12
+#define SUBLANG_SPANISH_NICARAGUA          0x13
+#define SUBLANG_SPANISH_PUERTO_RICO        0x14
+#define SUBLANG_SPANISH_US                 0x15
+#define SUBLANG_SWAHILI_KENYA              0x01
+#define SUBLANG_SWEDISH                    0x01
+#define SUBLANG_SWEDISH_FINLAND            0x02
+#define SUBLANG_SYRIAC_SYRIA               0x01
+#define SUBLANG_TAJIK_TAJIKISTAN           0x01
+#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN    0x02
+#define SUBLANG_TAMIL_INDIA                0x01
+#define SUBLANG_TATAR_RUSSIA               0x01
+#define SUBLANG_TELUGU_INDIA               0x01
+#define SUBLANG_THAI_THAILAND              0x01
+#define SUBLANG_TIBETAN_PRC                0x01
+#define SUBLANG_TIBETAN_BHUTAN             0x02
+#define SUBLANG_TIGRIGNA_ERITREA           0x02
+#define SUBLANG_TSWANA_SOUTH_AFRICA        0x01
+#define SUBLANG_TURKISH_TURKEY             0x01
+#define SUBLANG_TURKMEN_TURKMENISTAN       0x01
+#define SUBLANG_UIGHUR_PRC                 0x01
+#define SUBLANG_UKRAINIAN_UKRAINE          0x01
+#define SUBLANG_UPPER_SORBIAN_GERMANY      0x01
+#define SUBLANG_URDU_PAKISTAN              0x01
+#define SUBLANG_URDU_INDIA                 0x02
+#define SUBLANG_UZBEK_LATIN                0x01
+#define SUBLANG_UZBEK_CYRILLIC             0x02
+#define SUBLANG_VIETNAMESE_VIETNAM         0x01
+#define SUBLANG_WELSH_UNITED_KINGDOM       0x01
+#define SUBLANG_WOLOF_SENEGAL              0x01
+#define SUBLANG_XHOSA_SOUTH_AFRICA         0x01
+#define SUBLANG_YAKUT_RUSSIA               0x01
+#define SUBLANG_YI_PRC                     0x01
+#define SUBLANG_YORUBA_NIGERIA             0x01
+#define SUBLANG_ZULU_SOUTH_AFRICA          0x01
+
+/* These are documented by the MSDN but are missing from the Windows header */
+#define SUBLANG_ENGLISH_IRELAND            SUBLANG_ENGLISH_EIRE
+#define SUBLANG_HAUSA_NIGERIA              SUBLANG_HAUSA_NIGERIA_LATIN
+#define SUBLANG_LAO_LAO_PDR                SUBLANG_LAO_LAO
+#define SUBLANG_PORTUGUESE_PORTUGAL        SUBLANG_PORTUGUESE
+#define SUBLANG_SWAHILI                    SUBLANG_SWAHILI_KENYA
+#define SUBLANG_SWEDISH_SWEDEN             SUBLANG_SWEDISH
+#define SUBLANG_SYRIAC                     SUBLANG_SYRIAC_SYRIA
+
+/* FIXME: these are not defined anywhere */
+#define SUBLANG_DUTCH_SURINAM              0x03
+#define SUBLANG_ROMANIAN_MOLDAVIA          0x02
+#define SUBLANG_RUSSIAN_MOLDAVIA           0x02
+#define SUBLANG_LITHUANIAN_CLASSIC         0x02
+#define SUBLANG_MANX_GAELIC                0x01
+
+
+/*
+ * Sort definitions
+ */
+
+#define SORT_DEFAULT                     0x0
+#define SORT_INVARIANT_MATH              0x1
+#define SORT_JAPANESE_XJIS               0x0
+#define SORT_JAPANESE_UNICODE            0x1
+#define SORT_JAPANESE_RADICALSTROKE      0x4
+#define SORT_CHINESE_BIG5                0x0
+#define SORT_CHINESE_PRCP                0x0
+#define SORT_CHINESE_UNICODE             0x1
+#define SORT_CHINESE_PRC                 0x2
+#define SORT_CHINESE_BOPOMOFO            0x3
+#define SORT_CHINESE_RADICALSTROKE       0x4
+#define SORT_KOREAN_KSC                  0x0
+#define SORT_KOREAN_UNICODE              0x1
+#define SORT_GERMAN_PHONE_BOOK           0x1
+#define SORT_HUNGARIAN_DEFAULT           0x0
+#define SORT_HUNGARIAN_TECHNICAL         0x1
+#define SORT_GEORGIAN_TRADITIONAL        0x0
+#define SORT_GEORGIAN_MODERN             0x1
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h
new file mode 100644
index 0000000..e09f97b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h
@@ -0,0 +1,79 @@
+/*
+ * Performance Monitor
+ *
+ * Copyright 2007 Hans Leidekker
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINPERF_
+#define _WINPERF_
+
+#define PERF_SIZE_DWORD         0x00000000
+#define PERF_SIZE_LARGE         0x00000100
+#define PERF_SIZE_ZERO          0x00000200
+#define PERF_SIZE_VARIABLE_LEN  0x00000300
+
+#define PERF_TYPE_NUMBER        0x00000000
+#define PERF_TYPE_COUNTER       0x00000400
+#define PERF_TYPE_TEXT          0x00000800
+#define PERF_TYPE_ZERO          0x00000C00
+
+#define PERF_NUMBER_HEX         0x00000000
+#define PERF_NUMBER_DECIMAL     0x00010000
+#define PERF_NUMBER_DEC_1000    0x00020000
+
+#define PERF_COUNTER_VALUE      0x00000000
+#define PERF_COUNTER_RATE       0x00010000
+#define PERF_COUNTER_FRACTION   0x00020000
+#define PERF_COUNTER_BASE       0x00030000
+#define PERF_COUNTER_ELAPSED    0x00040000
+#define PERF_COUNTER_QUEUELEN   0x00050000
+#define PERF_COUNTER_HISTOGRAM  0x00060000
+#define PERF_COUNTER_PRECISION  0x00070000
+
+#define PERF_TEXT_UNICODE       0x00000000
+#define PERF_TEXT_ASCII         0x00010000
+
+#define PERF_TIMER_TICK         0x00000000
+#define PERF_TIMER_100NS        0x00100000
+#define PERF_OBJECT_TIMER       0x00200000
+
+#define PERF_DELTA_COUNTER      0x00400000
+#define PERF_DELTA_BASE         0x00800000
+#define PERF_INVERSE_COUNTER    0x01000000
+#define PERF_MULTI_COUNTER      0x02000000
+
+#define PERF_DISPLAY_NO_SUFFIX  0x00000000
+#define PERF_DISPLAY_PER_SEC    0x10000000
+#define PERF_DISPLAY_PERCENT    0x20000000
+#define PERF_DISPLAY_SECONDS    0x30000000
+#define PERF_DISPLAY_NOSHOW     0x40000000
+
+#define PERF_DETAIL_NOVICE      100
+#define PERF_DETAIL_ADVANCED    200
+#define PERF_DETAIL_EXPERT      300
+#define PERF_DETAIL_WIZARD      400
+
+#endif /* _WINPERF_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h
new file mode 100644
index 0000000..f4ed39a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h
@@ -0,0 +1,195 @@
+/*
+ * Win32 registry defines (see also winnt.h)
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINREG_H
+#define __WINE_WINREG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define HKEY_CLASSES_ROOT       ((HKEY)(LONG_PTR)(LONG)0x80000000)
+#define HKEY_CURRENT_USER       ((HKEY)(LONG_PTR)(LONG)0x80000001)
+#define HKEY_LOCAL_MACHINE      ((HKEY)(LONG_PTR)(LONG)0x80000002)
+#define HKEY_USERS              ((HKEY)(LONG_PTR)(LONG)0x80000003)
+#define HKEY_PERFORMANCE_DATA   ((HKEY)(LONG_PTR)(LONG)0x80000004)
+#define HKEY_CURRENT_CONFIG     ((HKEY)(LONG_PTR)(LONG)0x80000005)
+#define HKEY_DYN_DATA           ((HKEY)(LONG_PTR)(LONG)0x80000006)
+
+/*
+ *	registry provider structs
+ */
+typedef struct value_entA
+{   LPSTR	ve_valuename;
+    DWORD	ve_valuelen;
+    DWORD_PTR	ve_valueptr;
+    DWORD	ve_type;
+} VALENTA, *PVALENTA;
+
+typedef struct value_entW {
+    LPWSTR	ve_valuename;
+    DWORD	ve_valuelen;
+    DWORD_PTR	ve_valueptr;
+    DWORD	ve_type;
+} VALENTW, *PVALENTW;
+
+typedef ACCESS_MASK REGSAM;
+typedef LONG LSTATUS;
+
+/*
+ * InitiateSystemShutdown() reasons
+ */
+#include <reason.h>
+
+#define REASON_OTHER            (SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER)
+#define REASON_UNKNOWN          SHTDN_REASON_UNKNOWN
+#define REASON_LEGACY_API       SHTDN_REASON_LEGACY_API
+#define REASON_PLANNED_FLAG     SHTDN_REASON_FLAG_PLANNED
+
+#define MAX_SHUTDOWN_TIMEOUT    (10*365*24*60*60)
+
+/*
+ * RegGetValue() restrictions
+ */
+
+#define RRF_RT_REG_NONE         (1 << 0)
+#define RRF_RT_REG_SZ           (1 << 1)
+#define RRF_RT_REG_EXPAND_SZ    (1 << 2)
+#define RRF_RT_REG_BINARY       (1 << 3)
+#define RRF_RT_REG_DWORD        (1 << 4)
+#define RRF_RT_REG_MULTI_SZ     (1 << 5)
+#define RRF_RT_REG_QWORD        (1 << 6)
+#define RRF_RT_DWORD            (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
+#define RRF_RT_QWORD            (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
+#define RRF_RT_ANY              0xffff
+#define RRF_NOEXPAND            (1 << 28)
+#define RRF_ZEROONFAILURE       (1 << 29)
+
+WINADVAPI BOOL      WINAPI AbortSystemShutdownA(LPSTR);
+WINADVAPI BOOL      WINAPI AbortSystemShutdownW(LPWSTR);
+#define                    AbortSystemShutdown WINELIB_NAME_AW(AbortSystemShutdown)
+WINADVAPI BOOL      WINAPI InitiateSystemShutdownA(LPSTR,LPSTR,DWORD,BOOL,BOOL);
+WINADVAPI BOOL      WINAPI InitiateSystemShutdownW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL);
+#define                    InitiateSystemShutdown WINELIB_NAME_AW(InitiateSystemShutdown);
+WINADVAPI BOOL      WINAPI InitiateSystemShutdownExA(LPSTR,LPSTR,DWORD,BOOL,BOOL,DWORD);
+WINADVAPI BOOL      WINAPI InitiateSystemShutdownExW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL,DWORD);
+#define                    InitiateSystemShutdownEx WINELIB_NAME_AW(InitiateSystemShutdownEx);
+WINADVAPI LSTATUS   WINAPI RegCloseKey(HKEY);
+WINADVAPI LSTATUS   WINAPI RegConnectRegistryA(LPCSTR,HKEY,PHKEY);
+WINADVAPI LSTATUS   WINAPI RegConnectRegistryW(LPCWSTR,HKEY,PHKEY);
+#define                    RegConnectRegistry WINELIB_NAME_AW(RegConnectRegistry)
+WINADVAPI LSTATUS   WINAPI RegCreateKeyA(HKEY,LPCSTR,PHKEY);
+WINADVAPI LSTATUS   WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY);
+#define                    RegCreateKey WINELIB_NAME_AW(RegCreateKey)
+WINADVAPI LSTATUS   WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD);
+WINADVAPI LSTATUS   WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD);
+#define                    RegCreateKeyEx WINELIB_NAME_AW(RegCreateKeyEx)
+WINADVAPI LSTATUS   WINAPI RegDeleteKeyA(HKEY,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegDeleteKeyW(HKEY,LPCWSTR);
+#define                    RegDeleteKey WINELIB_NAME_AW(RegDeleteKey)
+WINADVAPI LSTATUS   WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);
+WINADVAPI LSTATUS   WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);
+#define                    RegDeleteKeyEx WINELIB_NAME_AW(RegDeleteKeyEx)
+WINADVAPI LSTATUS   WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR);
+#define                    RegDeleteKeyValue WINELIB_NAME_AW(RegDeleteKeyValue)
+WINADVAPI LSTATUS   WINAPI RegDeleteTreeA(HKEY,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegDeleteTreeW(HKEY,LPCWSTR);
+#define                    RegDeleteTree WINELIB_NAME_AW(RegDeleteTree)
+WINADVAPI LSTATUS   WINAPI RegDeleteValueA(HKEY,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegDeleteValueW(HKEY,LPCWSTR);
+#define                    RegDeleteValue WINELIB_NAME_AW(RegDeleteValue)
+WINADVAPI LSTATUS   WINAPI RegDisablePredefinedCache(void);
+WINADVAPI LSTATUS   WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD);
+WINADVAPI LSTATUS   WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD);
+#define                    RegEnumKey WINELIB_NAME_AW(RegEnumKey)
+WINADVAPI LSTATUS   WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,LPDWORD,LPFILETIME);
+WINADVAPI LSTATUS   WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,LPDWORD,LPFILETIME);
+#define                    RegEnumKeyEx WINELIB_NAME_AW(RegEnumKeyEx)
+WINADVAPI LSTATUS   WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+WINADVAPI LSTATUS   WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+#define                    RegEnumValue WINELIB_NAME_AW(RegEnumValue)
+WINADVAPI LSTATUS   WINAPI RegFlushKey(HKEY);
+WINADVAPI LSTATUS   WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,LPDWORD);
+WINADVAPI LSTATUS   WINAPI RegGetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);
+WINADVAPI LSTATUS   WINAPI RegGetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPDWORD,PVOID,LPDWORD);
+#define                    RegGetValue WINELIB_NAME_AW(RegGetValue)
+WINADVAPI LSTATUS   WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR);
+#define                    RegLoadKey WINELIB_NAME_AW(RegLoadKey)
+WINADVAPI LSTATUS   WINAPI RegLoadMUIStringA(HKEY,LPCSTR,LPSTR,DWORD,LPDWORD,DWORD,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegLoadMUIStringW(HKEY,LPCWSTR,LPWSTR,DWORD,LPDWORD,DWORD,LPCWSTR);
+#define                    RegLoadMUIString WINELIB_NAME_AW(RegLoadMUIString)
+WINADVAPI LSTATUS   WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL);
+WINADVAPI LSTATUS   WINAPI RegOpenCurrentUser(REGSAM,PHKEY);
+WINADVAPI LSTATUS   WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY);
+WINADVAPI LSTATUS   WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY);
+#define                    RegOpenKey WINELIB_NAME_AW(RegOpenKey)
+WINADVAPI LSTATUS   WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY);
+WINADVAPI LSTATUS   WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY);
+#define                    RegOpenKeyEx WINELIB_NAME_AW(RegOpenKeyEx)
+WINADVAPI LSTATUS   WINAPI RegOpenUserClassesRoot(HANDLE,DWORD,REGSAM,PHKEY);
+WINADVAPI LSTATUS   WINAPI RegOverridePredefKey(HKEY,HKEY);
+WINADVAPI LSTATUS   WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);
+WINADVAPI LSTATUS   WINAPI RegQueryInfoKeyA(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);
+#define                    RegQueryInfoKey WINELIB_NAME_AW(RegQueryInfoKey)
+WINADVAPI LSTATUS   WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD);
+WINADVAPI LSTATUS   WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD);
+#define                    RegQueryMultipleValues WINELIB_NAME_AW(RegQueryMultipleValues)
+WINADVAPI LSTATUS   WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,LPLONG);
+WINADVAPI LSTATUS   WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,LPLONG);
+#define                    RegQueryValue WINELIB_NAME_AW(RegQueryValue)
+WINADVAPI LSTATUS   WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+WINADVAPI LSTATUS   WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+#define                    RegQueryValueEx WINELIB_NAME_AW(RegQueryValueEx)
+WINADVAPI LSTATUS   WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR);
+#define                    RegReplaceKey WINELIB_NAME_AW(RegReplaceKey)
+WINADVAPI LSTATUS   WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD);
+WINADVAPI LSTATUS   WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD);
+#define                    RegRestoreKey WINELIB_NAME_AW(RegRestoreKey)
+WINADVAPI LSTATUS   WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINADVAPI LSTATUS   WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES);
+#define                    RegSaveKey WINELIB_NAME_AW(RegSaveKey)
+WINADVAPI LSTATUS   WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI LSTATUS   WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
+WINADVAPI LSTATUS   WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD);
+#define                    RegSetValue WINELIB_NAME_AW(RegSetValue)
+WINADVAPI LSTATUS   WINAPI RegSetValueExA(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);
+WINADVAPI LSTATUS   WINAPI RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE*,DWORD);
+#define                    RegSetValueEx WINELIB_NAME_AW(RegSetValueEx)
+WINADVAPI LSTATUS   WINAPI RegUnLoadKeyA(HKEY,LPCSTR);
+WINADVAPI LSTATUS   WINAPI RegUnLoadKeyW(HKEY,LPCWSTR);
+#define                    RegUnLoadKey WINELIB_NAME_AW(RegUnLoadKey)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_WINREG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h
new file mode 100644
index 0000000..a702f4e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINRESRC_
+#define _WINRESRC_
+
+#ifndef WINVER
+#define WINVER 0x0500
+#endif
+
+#ifndef _WIN32_IE
+#define _WIN32_IE 0x0501
+#endif
+
+#ifndef _WIN32_WINDOWS
+#define _WIN32_WINDOWS 0x0410
+#endif
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
+#include <winuser.rh>
+#include <commctrl.rh>
+#include <dde.rh>
+#include <winnt.rh>
+#include <dlgs.h>
+#include <winver.h>
+
+#endif /* _WINRESRC_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h
new file mode 100644
index 0000000..9d8d53d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h
@@ -0,0 +1,89 @@
+/*
+ * Winsafer definitions
+ *
+ * Copyright (C) 2009 Nikolay Sivov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSAFER_H
+#define __WINE_WINSAFER_H
+
+#include <guiddef.h>
+#include <wincrypt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DECLARE_HANDLE(SAFER_LEVEL_HANDLE);
+
+#define SAFER_SCOPEID_MACHINE  1
+#define SAFER_SCOPEID_USER     2
+
+#define SAFER_LEVELID_DISALLOWED   0x00000
+#define SAFER_LEVELID_UNTRUSTED    0x01000
+#define SAFER_LEVELID_CONSTRAINED  0x10000
+#define SAFER_LEVELID_NORMALUSER   0x20000
+#define SAFER_LEVELID_FULLYTRUSTED 0x40000
+
+#define SAFER_LEVEL_OPEN   1
+
+WINADVAPI BOOL WINAPI SaferCreateLevel(DWORD,DWORD,DWORD,SAFER_LEVEL_HANDLE*,LPVOID);
+
+typedef enum _SAFER_POLICY_INFO_CLASS {
+    SaferPolicyLevelList = 1,
+    SaferPolicyEnableTransparentEnforcement,
+    SaferPolicyDefaultLevel,
+    SaferPolicyEvaluateUserScope,
+    SaferPolicyScopeFlags
+} SAFER_POLICY_INFO_CLASS;
+
+typedef enum _SAFER_OBJECT_INFO_CLASS {
+    SaferObjectLevelId = 1,
+    SaferObjectScopeId,
+    SaferObjectFriendlyName,
+    SaferObjectDescription,
+    SaferObjectBuiltin,
+    SaferObjectDisallowed,
+    SaferObjectDisableMaxPrivilege,
+    SaferObjectInvertDeletedPrivileges,
+    SaferObjectDeletedPrivileges,
+    SaferObjectDefaultOwner,
+    SaferObjectSidsToDisable,
+    SaferObjectRestrictedSidsInverted,
+    SaferObjectRestrictedSidsAdded,
+    SaferObjectAllIdentificationGuids,
+    SaferObjectSingleIdentification,
+    SaferObjectExtendedError
+} SAFER_OBJECT_INFO_CLASS;
+
+WINADVAPI BOOL WINAPI SaferGetPolicyInformation(DWORD,SAFER_POLICY_INFO_CLASS,DWORD,PVOID,PDWORD,LPVOID);
+WINADVAPI BOOL WINAPI SaferSetLevelInformation(SAFER_LEVEL_HANDLE,SAFER_OBJECT_INFO_CLASS,LPVOID,DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINSAFER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h
new file mode 100644
index 0000000..49a9ca5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h
@@ -0,0 +1,164 @@
+/*
+ * Winscard definitions
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSCARD_H
+#define __WINE_WINSCARD_H
+
+#include <wtypes.h>
+#include <winioctl.h>
+#include <winsmcrd.h>
+#include <scarderr.h>
+
+/* Valid scopes for contexts */
+#define SCARD_SCOPE_USER     0
+#define SCARD_SCOPE_TERMINAL 1
+#define SCARD_SCOPE_SYSTEM   2
+
+#ifndef _LPCBYTE_DEFINED
+#define _LPCBYTE_DEFINED
+typedef const BYTE *LPCBYTE;
+#endif
+
+typedef ULONG_PTR SCARDCONTEXT, *PSCARDCONTEXT, *LPSCARDCONTEXT;
+typedef ULONG_PTR SCARDHANDLE,  *PSCARDHANDLE,  *LPSCARDHANDLE;
+
+typedef struct _SCARD_ATRMASK
+{
+    DWORD cbAtr;
+    BYTE  rgbAtr[36];
+    BYTE  rgbMask[36];
+} SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
+
+typedef struct
+{
+    LPCSTR szReader;
+    LPVOID pvUserData;
+    DWORD  dwCurrentState;
+    DWORD  dwEventState;
+    DWORD  cbAtr;
+    BYTE   rgbAtr[36];
+} SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;
+typedef struct
+{
+    LPCWSTR szReader;
+    LPVOID  pvUserData;
+    DWORD   dwCurrentState;
+    DWORD   dwEventState;
+    DWORD   cbAtr;
+    BYTE    rgbAtr[36];
+} SCARD_READERSTATEW, *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW;
+DECL_WINELIB_TYPE_AW(SCARD_READERSTATE)
+DECL_WINELIB_TYPE_AW(PSCARD_READERSTATE)
+DECL_WINELIB_TYPE_AW(LPSCARD_READERSTATE)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE      WINAPI SCardAccessStartedEvent(void);
+LONG        WINAPI SCardAddReaderToGroupA(SCARDCONTEXT,LPCSTR,LPCSTR);
+LONG        WINAPI SCardAddReaderToGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR);
+#define     SCardAddReaderToGroup WINELIB_NAME_AW(SCardAddReaderToGroup)
+LONG        WINAPI SCardBeginTransaction(SCARDHANDLE);
+LONG        WINAPI SCardCancel(SCARDCONTEXT);
+LONG        WINAPI SCardConnectA(SCARDCONTEXT,LPCSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD);
+LONG        WINAPI SCardConnectW(SCARDCONTEXT,LPCWSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD);
+#define     SCardConnect WINELIB_NAME_AW(SCardConnect)
+LONG        WINAPI SCardControl(SCARDHANDLE,DWORD,LPCVOID,DWORD,LPVOID,DWORD,LPDWORD);
+LONG        WINAPI SCardDisconnect(SCARDHANDLE,DWORD);
+LONG        WINAPI SCardEndTransaction(SCARDHANDLE,DWORD);
+LONG        WINAPI SCardEstablishContext(DWORD,LPCVOID,LPCVOID,LPSCARDCONTEXT);
+LONG        WINAPI SCardForgetCardTypeA(SCARDCONTEXT,LPCSTR);
+LONG        WINAPI SCardForgetCardTypeW(SCARDCONTEXT,LPCWSTR);
+#define     SCardForgetCardType WINELIB_NAME_AW(SCardForgetCardType)
+LONG        WINAPI SCardForgetReaderA(SCARDCONTEXT,LPCSTR);
+LONG        WINAPI SCardForgetReaderW(SCARDCONTEXT,LPCWSTR);
+#define     SCardForgetReader WINELIB_NAME_AW(SCardForgetReader)
+LONG        WINAPI SCardForgetReaderGroupA(SCARDCONTEXT,LPCSTR);
+LONG        WINAPI SCardForgetReaderGroupW(SCARDCONTEXT,LPCWSTR);
+#define     SCardForgetReaderGroup WINELIB_NAME_AW(SCardForgetReaderGroup)
+LONG        WINAPI SCardFreeMemory(SCARDCONTEXT,LPCVOID);
+LONG        WINAPI SCardGetAttrib(SCARDHANDLE,DWORD,LPBYTE,LPDWORD);
+LONG        WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPSTR,LPDWORD);
+LONG        WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPWSTR,LPDWORD);
+#define     SCardGetCardTypeProviderName WINELIB_NAME_AW(SCardGetCardTypeProviderName)
+LONG        WINAPI SCardGetProviderIdA(SCARDCONTEXT,LPCSTR,LPGUID);
+LONG        WINAPI SCardGetProviderIdW(SCARDCONTEXT,LPCWSTR,LPGUID);
+#define     SCardGetProviderId WINELIB_NAME_AW(SCardGetProviderId)
+LONG        WINAPI SCardGetStatusChangeA(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEA,DWORD);
+LONG        WINAPI SCardGetStatusChangeW(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEW,DWORD);
+#define     SCardGetStatusChange WINELIB_NAME_AW(SCardGetStatusChange)
+LONG        WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT,LPCSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD);
+LONG        WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT,LPCWSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD);
+#define     SCardIntroduceCardType WINELIB_NAME_AW(SCardIntroduceCardType)
+LONG        WINAPI SCardIntroduceReaderA(SCARDCONTEXT,LPCSTR,LPCSTR);
+LONG        WINAPI SCardIntroduceReaderW(SCARDCONTEXT,LPCWSTR,LPCWSTR);
+#define     SCardIntroduceReader WINELIB_NAME_AW(SCardIntroduceReader)
+LONG        WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT,LPCSTR);
+LONG        WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT,LPCWSTR);
+#define     SCardIntroduceReaderGroup WINELIB_NAME_AW(SCardIntroduceReaderGroup)
+LONG        WINAPI SCardIsValidContext(SCARDCONTEXT);
+LONG        WINAPI SCardListCardsA(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPSTR,LPDWORD);
+LONG        WINAPI SCardListCardsW(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPWSTR,LPDWORD);
+#define     SCardListCards WINELIB_NAME_AW(SCardListCards)
+LONG        WINAPI SCardListInterfacesA(SCARDCONTEXT,LPCSTR,LPGUID,LPDWORD);
+LONG        WINAPI SCardListInterfacesW(SCARDCONTEXT,LPCWSTR,LPGUID,LPDWORD);
+#define     SCardListInterfaces WINELIB_NAME_AW(SCardListInterfaces)
+LONG        WINAPI SCardListReadersA(SCARDCONTEXT,LPCSTR,LPSTR,LPDWORD);
+LONG        WINAPI SCardListReadersW(SCARDCONTEXT,LPCWSTR,LPWSTR,LPDWORD);
+#define     SCardListReaders WINELIB_NAME_AW(SCardListReaders)
+LONG        WINAPI SCardListReaderGroupsA(SCARDCONTEXT,LPSTR,LPDWORD);
+LONG        WINAPI SCardListReaderGroupsW(SCARDCONTEXT,LPWSTR,LPDWORD);
+#define     SCardListReaderGroups WINELIB_NAME_AW(SCardListReaderGroups)
+LONG        WINAPI SCardLocateCardsA(SCARDCONTEXT,LPCSTR,LPSCARD_READERSTATEA,DWORD);
+LONG        WINAPI SCardLocateCardsW(SCARDCONTEXT,LPCWSTR,LPSCARD_READERSTATEW,DWORD);
+#define     SCardLocateCards WINELIB_NAME_AW(SCardLocateCards)
+LONG        WINAPI SCardLocateCardsByATRA(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEA,DWORD);
+LONG        WINAPI SCardLocateCardsByATRW(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEW,DWORD);
+#define     SCardLocateCardsByATR WINELIB_NAME_AW(SCardLocateCardsByATR)
+LONG        WINAPI SCardReconnect(SCARDHANDLE,DWORD,DWORD,DWORD,LPDWORD);
+LONG        WINAPI SCardReleaseContext(SCARDCONTEXT);
+void        WINAPI SCardReleaseStartedEvent(void);
+LONG        WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT,LPCSTR,LPCSTR);
+LONG        WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR);
+#define     SCardRemoveReaderFromGroup WINELIB_NAME_AW(SCardRemoveReaderFromGroup)
+LONG        WINAPI SCardSetAttrib(SCARDHANDLE,DWORD,LPCBYTE,DWORD);
+LONG        WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPCSTR);
+LONG        WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPCWSTR);
+#define     SCardSetCardTypeProviderName WINELIB_NAME_AW(SCardSetCardTypeProviderName)
+LONG        WINAPI SCardState(SCARDHANDLE,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+LONG        WINAPI SCardStatusA(SCARDHANDLE,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+LONG        WINAPI SCardStatusW(SCARDHANDLE,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+#define     SCardStatus WINELIB_NAME_AW(SCardStatus)
+LONG        WINAPI SCardTransmit(SCARDHANDLE,LPCSCARD_IO_REQUEST,LPCBYTE,DWORD,LPSCARD_IO_REQUEST,LPBYTE,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINSCARD_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h
new file mode 100644
index 0000000..3a880c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h
@@ -0,0 +1,46 @@
+/*
+ * Winscard definitions
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSMCRD_H
+#define __WINE_WINSMCRD_H
+
+#define SCARD_PROTOCOL_UNDEFINED        0x00000000
+#define SCARD_PROTOCOL_OPTIMAL          0x00000000
+#define SCARD_PROTOCOL_T0               0x00000001
+#define SCARD_PROTOCOL_T1               0x00000002
+#define SCARD_PROTOCOL_RAW              0x00010000
+#define SCARD_PROTOCOL_DEFAULT          0x80000000
+#define SCARD_PROTOCOL_Tx               (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
+
+typedef struct _SCARD_IO_REQUEST
+{
+    DWORD dwProtocol;
+    DWORD cbPciLength;
+} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
+
+#endif  /* __WINE_WINSMCRD_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h
new file mode 100644
index 0000000..39874e0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2013 Hans Leidekker for CodeWeavers.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSNMP_H
+#define __WINE_WINSNMP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int          smiINT, *smiLPINT;
+typedef smiINT       smiINT32, *smiLPINT32;
+typedef unsigned int smiUINT32, *smiLPUINT32;
+typedef smiUINT32    SNMPAPI_STATUS;
+
+#define SNMPAPI_NO_SUPPORT  0
+#define SNMPAPI_V1_SUPPORT  1
+#define SNMPAPI_V2_SUPPORT  2
+#define SNMPAPI_M2M_SUPPORT 3
+
+#define SNMPAPI_TRANSLATED      0
+#define SNMPAPI_UNTRANSLATED_V1 1
+#define SNMPAPI_UNTRANSLATED_V2 2
+
+#define SNMPAPI_OFF 0
+#define SNMPAPI_ON  1
+
+#define SNMPAPI_FAILURE 0
+#define SNMPAPI_SUCCESS 1
+
+SNMPAPI_STATUS WINAPI SnmpCleanup(void);
+SNMPAPI_STATUS WINAPI SnmpSetRetransmitMode(smiUINT32);
+SNMPAPI_STATUS WINAPI SnmpSetTranslateMode(smiUINT32);
+SNMPAPI_STATUS WINAPI SnmpStartup(smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINSNMP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h
new file mode 100644
index 0000000..9e90684
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h
@@ -0,0 +1,1057 @@
+/* WINSOCK.H--definitions to be used with the WINSOCK.DLL
+ *
+ * This header file corresponds to version 1.1 of the Windows Sockets
+ * specification.
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifdef __WINESRC__
+# ifndef __WINE_WINSOCK2__
+#  error Please use Winsock2 in Wine
+# endif
+#endif
+
+#ifndef __WINE_WINSOCKAPI_STDLIB_H
+#define __WINE_WINSOCKAPI_STDLIB_H
+
+/*
+ * This section defines the items that conflict with the Unix headers.
+ */
+#ifndef USE_WS_PREFIX
+/* We are not using the WS_ prefix we risk getting conflicts for
+ * everything related to select.
+ */
+# ifdef FD_CLR
+/* Too late, the Unix version of stdlib.h was included before winsock.h.
+ * This means select and all the related stuff is already defined and we
+ * cannot override types and function prototypes.
+ * All we can do is disable all these symbols so that they are not used
+ * inadvertently.
+ */
+#  include <sys/types.h>
+#  undef FD_SETSIZE
+#  undef FD_CLR
+#  undef FD_SET
+#  undef FD_ZERO
+#  undef FD_ISSET
+
+#  define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+#  define FD_CLR     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+#  define FD_SET     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+#  define FD_ZERO    Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+#  define FD_ISSET   Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+#  define fd_set     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+#  define select     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# elif defined(RLIM_INFINITY)
+/* On Darwin stdlib.h includes sys/resource.h which defines timeval but not the fd_set macros */
+#  define fd_set unix_fd_set
+#  include <sys/types.h>
+#  include <time.h>
+#  include <stdlib.h>
+#  undef fd_set
+#  undef FD_SETSIZE
+#  undef FD_CLR
+#  undef FD_SET
+#  undef FD_ZERO
+#  undef FD_ISSET
+#  define select     Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
+#  define timeval    Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
+# else  /* FD_CLR */
+/* stdlib.h has not been included yet so it's not too late. Include it now
+ * making sure that none of the select symbols is affected. Then we can
+ * define them with our own values.
+ */
+#  define fd_set unix_fd_set
+#  define timeval unix_timeval
+#  define select unix_select
+#  define socklen_t unix_socklen_t
+#  define u_long unix_u_long
+#  include <sys/types.h>
+#  include <time.h>
+#  include <stdlib.h>
+#  undef fd_set
+#  undef timeval
+#  undef select
+#  undef socklen_t
+#  undef u_long
+#  undef FD_SETSIZE
+#  undef FD_CLR
+#  undef FD_SET
+#  undef FD_ZERO
+#  undef FD_ISSET
+#  undef _TIMEVAL_DEFINED
+
+#  define WS_DEFINE_SELECT
+# endif /* FD_CLR */
+
+#else
+# define WS_DEFINE_SELECT
+# include <sys/types.h>
+# include <stdlib.h>
+#endif /* !USE_WS_PREFIX */
+
+#endif /* __WINE_WINSOCKAPI_STDLIB_H */
+
+#include <windows.h>
+
+#ifndef _WINSOCKAPI_
+#define _WINSOCKAPI_
+
+#include <inaddr.h>
+
+#ifdef USE_WS_PREFIX
+typedef unsigned char  WS_u_char;
+typedef unsigned short WS_u_short;
+typedef unsigned int   WS_u_int;
+typedef ULONG          WS_u_long;
+#elif (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__)) && !defined(_BSDTYPES_DEFINED)
+/* MinGW doesn't define the u_xxx types */
+typedef unsigned char  u_char;
+typedef unsigned short u_short;
+typedef unsigned int   u_int;
+typedef ULONG          u_long;
+#define _BSDTYPES_DEFINED
+#else
+#define u_long ULONG  /* make sure we don't use the system u_long */
+#endif
+
+#ifdef USE_WS_PREFIX
+# define WS(x)    WS_##x
+#else
+# define WS(x)    x
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*
+ * Address families
+ */
+#ifndef USE_WS_PREFIX
+#define AF_UNSPEC                  0
+#define AF_UNIX                    1
+#define AF_INET                    2
+#define AF_IMPLINK                 3
+#define AF_PUP                     4
+#define AF_CHAOS                   5
+#define AF_NS                      6
+#define AF_IPX                     AF_NS
+#define AF_ISO                     7
+#define AF_OSI                     AF_ISO
+#define AF_ECMA                    8
+#define AF_DATAKIT                 9
+#define AF_CCITT                   10
+#define AF_SNA                     11
+#define AF_DECnet                  12
+#define AF_DLI                     13
+#define AF_LAT                     14
+#define AF_HYLINK                  15
+#define AF_APPLETALK               16
+#define AF_NETBIOS                 17
+#define AF_VOICEVIEW               18
+#define AF_FIREFOX                 19
+#define AF_UNKNOWN1                20
+#define AF_BAN                     21
+#define AF_ATM                     22
+#define AF_INET6                   23
+#define AF_CLUSTER                 24
+#define AF_12844                   25
+#define AF_IRDA                    26
+#define AF_MAX                     27
+#define PF_UNSPEC                  AF_UNSPEC
+#define PF_UNIX                    AF_UNIX
+#define PF_INET                    AF_INET
+#define PF_IMPLINK                 AF_IMPLINK
+#define PF_PUP                     AF_PUP
+#define PF_CHAOS                   AF_CHAOS
+#define PF_NS                      AF_NS
+#define PF_IPX                     AF_IPX
+#define PF_ISO                     AF_ISO
+#define PF_OSI                     AF_OSI
+#define PF_ECMA                    AF_ECMA
+#define PF_DATAKIT                 AF_DATAKIT
+#define PF_CCITT                   AF_CCITT
+#define PF_SNA                     AF_SNA
+#define PF_DECnet                  AF_DECnet
+#define PF_DLI                     AF_DLI
+#define PF_LAT                     AF_LAT
+#define PF_HYLINK                  AF_HYLINK
+#define PF_APPLETALK               AF_APPLETALK
+#define PF_VOICEVIEW               AF_VOICEVIEW
+#define PF_FIREFOX                 AF_FIREFOX
+#define PF_UNKNOWN1                AF_UNKNOWN1
+#define PF_BAN                     AF_BAN
+#define PF_MAX                     AF_MAX
+#else /* USE_WS_PREFIX */
+#define WS_AF_UNSPEC               0
+#define WS_AF_UNIX                 1
+#define WS_AF_INET                 2
+#define WS_AF_IMPLINK              3
+#define WS_AF_PUP                  4
+#define WS_AF_CHAOS                5
+#define WS_AF_NS                   6
+#define WS_AF_IPX                  WS_AF_NS
+#define WS_AF_ISO                  7
+#define WS_AF_OSI                  AF_ISO
+#define WS_AF_ECMA                 8
+#define WS_AF_DATAKIT              9
+#define WS_AF_CCITT                10
+#define WS_AF_SNA                  11
+#define WS_AF_DECnet               12
+#define WS_AF_DLI                  13
+#define WS_AF_LAT                  14
+#define WS_AF_HYLINK               15
+#define WS_AF_APPLETALK            16
+#define WS_AF_NETBIOS              17
+#define WS_AF_VOICEVIEW            18
+#define WS_AF_FIREFOX              19
+#define WS_AF_UNKNOWN1             20
+#define WS_AF_BAN                  21
+#define WS_AF_ATM                  22
+#define WS_AF_INET6                23
+#define WS_AF_CLUSTER              24
+#define WS_AF_12844                25
+#define WS_AF_IRDA                 26
+#define WS_AF_MAX                  27
+#endif /* USE_WS_PREFIX */
+
+/*
+ * Types
+ */
+#ifndef USE_WS_PREFIX
+#define SOCK_STREAM                1
+#define SOCK_DGRAM                 2
+#define SOCK_RAW                   3
+#define SOCK_RDM                   4
+#define SOCK_SEQPACKET             5
+#else /* USE_WS_PREFIX */
+#define WS_SOCK_STREAM             1
+#define WS_SOCK_DGRAM              2
+#define WS_SOCK_RAW                3
+#define WS_SOCK_RDM                4
+#define WS_SOCK_SEQPACKET          5
+#endif /* USE_WS_PREFIX */
+
+
+/*
+ * Protocols
+ */
+#ifndef USE_WS_PREFIX
+#define IPPROTO_IP                 0
+#define IPPROTO_ICMP               1
+#define IPPROTO_IGMP               2
+#define IPPROTO_GGP                3
+#define IPPROTO_TCP                6
+#define IPPROTO_UDP                17
+#define IPPROTO_IDP                22
+#define IPPROTO_IPV6               41
+#define IPPROTO_ND                 77
+#define IPPROTO_RAW                255
+#define IPPROTO_MAX                256
+#else /* USE_WS_PREFIX */
+#define WS_IPPROTO_IP              0
+#define WS_IPPROTO_ICMP            1
+#define WS_IPPROTO_IGMP            2
+#define WS_IPPROTO_GGP             3
+#define WS_IPPROTO_TCP             6
+#define WS_IPPROTO_UDP             17
+#define WS_IPPROTO_IDP             22
+#define WS_IPPROTO_IPV6            41
+#define WS_IPPROTO_ND              77
+#define WS_IPPROTO_RAW             255
+#define WS_IPPROTO_MAX             256
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(protoent)
+{
+    char* p_name;
+    char** p_aliases;
+    short p_proto;
+} PROTOENT, *PPROTOENT, *LPPROTOENT;
+
+
+
+/*
+ * Networks
+ */
+struct WS(netent)
+{
+    char* n_name;                  /* official name of net */
+    char** n_aliases;              /* alias list */
+    short n_addrtype;              /* net address type */
+    ULONG n_net;                   /* network # */
+};
+
+
+/*
+ * Services
+ */
+#ifndef USE_WS_PREFIX
+#define IPPORT_ECHO                7
+#define IPPORT_DISCARD             9
+#define IPPORT_SYSTAT              11
+#define IPPORT_DAYTIME             13
+#define IPPORT_NETSTAT             15
+#define IPPORT_FTP                 21
+#define IPPORT_TELNET              23
+#define IPPORT_SMTP                25
+#define IPPORT_TIMESERVER          37
+#define IPPORT_NAMESERVER          42
+#define IPPORT_WHOIS               43
+#define IPPORT_MTP                 57
+#define IPPORT_TFTP                69
+#define IPPORT_RJE                 77
+#define IPPORT_FINGER              79
+#define IPPORT_TTYLINK             87
+#define IPPORT_SUPDUP              95
+#define IPPORT_EXECSERVER          512
+#define IPPORT_LOGINSERVER         513
+#define IPPORT_CMDSERVER           514
+#define IPPORT_EFSSERVER           520
+#define IPPORT_BIFFUDP             512
+#define IPPORT_WHOSERVER           513
+#define IPPORT_ROUTESERVER         520
+#define IPPORT_RESERVED            1024
+#else /* USE_WS_PREFIX */
+#define WS_IPPORT_ECHO             7
+#define WS_IPPORT_DISCARD          9
+#define WS_IPPORT_SYSTAT           11
+#define WS_IPPORT_DAYTIME          13
+#define WS_IPPORT_NETSTAT          15
+#define WS_IPPORT_FTP              21
+#define WS_IPPORT_TELNET           23
+#define WS_IPPORT_SMTP             25
+#define WS_IPPORT_TIMESERVER       37
+#define WS_IPPORT_NAMESERVER       42
+#define WS_IPPORT_WHOIS            43
+#define WS_IPPORT_MTP              57
+#define WS_IPPORT_TFTP             69
+#define WS_IPPORT_RJE              77
+#define WS_IPPORT_FINGER           79
+#define WS_IPPORT_TTYLINK          87
+#define WS_IPPORT_SUPDUP           95
+#define WS_IPPORT_EXECSERVER       512
+#define WS_IPPORT_LOGINSERVER      513
+#define WS_IPPORT_CMDSERVER        514
+#define WS_IPPORT_EFSSERVER        520
+#define WS_IPPORT_BIFFUDP          512
+#define WS_IPPORT_WHOSERVER        513
+#define WS_IPPORT_ROUTESERVER      520
+#define WS_IPPORT_RESERVED         1024
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(servent)
+{
+    char* s_name;                  /* official service name */
+    char** s_aliases;              /* alias list */
+#ifdef _WIN64
+    char* s_proto;                 /* protocol to use */
+    short s_port;                  /* port # */
+#else
+    short s_port;                  /* port # */
+    char* s_proto;                 /* protocol to use */
+#endif
+} SERVENT, *PSERVENT, *LPSERVENT;
+
+
+
+/*
+ * Hosts
+ */
+
+typedef struct WS(hostent)
+{
+    char* h_name;                  /* official name of host */
+    char** h_aliases;              /* alias list */
+    short h_addrtype;              /* host address type */
+    short h_length;                /* length of address */
+    char** h_addr_list;            /* list of addresses from name server */
+#define h_addr h_addr_list[0]      /* address, for backward compat */
+} HOSTENT, *PHOSTENT, *LPHOSTENT;
+
+
+/*
+ * Sockets
+ */
+
+typedef UINT_PTR SOCKET;
+
+/*
+ * This is used instead of -1, since the
+ * SOCKET type is unsigned.
+ */
+#define INVALID_SOCKET             (SOCKET)(~0)
+#define SOCKET_ERROR               (-1)
+
+typedef struct WS(sockaddr)
+{
+        WS(u_short) sa_family;
+        char        sa_data[14];
+} SOCKADDR, *PSOCKADDR, *LPSOCKADDR;
+
+typedef struct WS(linger)
+{
+    WS(u_short) l_onoff;           /* option on/off */
+    WS(u_short) l_linger;          /* linger time */
+} LINGER, *PLINGER, *LPLINGER;
+
+/*
+ * Select
+ */
+
+#ifdef WS_DEFINE_SELECT
+/* Define our own version of select and the associated types and macros */
+
+# ifndef USE_WS_PREFIX
+#  ifndef FD_SETSIZE
+#   define FD_SETSIZE              64
+#  endif
+# else
+#  ifndef WS_FD_SETSIZE
+#   define WS_FD_SETSIZE           64
+#  endif
+# endif
+
+typedef struct WS(fd_set)
+{
+    WS(u_int) fd_count;            /* how many are SET? */
+# ifndef USE_WS_PREFIX
+    SOCKET fd_array[FD_SETSIZE];   /* an array of SOCKETs */
+# else
+    SOCKET fd_array[WS_FD_SETSIZE];/* an array of SOCKETs */
+# endif
+} WS(fd_set), FD_SET, *PFD_SET, *LPFD_SET;
+
+#ifndef _TIMEVAL_DEFINED
+#define _TIMEVAL_DEFINED
+typedef struct WS(timeval)
+{
+    LONG    tv_sec;                /* seconds */
+    LONG    tv_usec;               /* and microseconds */
+} TIMEVAL, *PTIMEVAL, *LPTIMEVAL;
+#endif
+
+#define __WS_FD_CLR(fd, set, cast) do { \
+    unsigned int __i; \
+    for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
+    { \
+        if (((cast*)(set))->fd_array[__i] == fd) \
+        { \
+            while (__i < ((cast*)(set))->fd_count-1) \
+            { \
+                ((cast*)(set))->fd_array[__i] = \
+                    ((cast*)(set))->fd_array[__i+1]; \
+                __i++; \
+            } \
+            ((cast*)(set))->fd_count--; \
+            break; \
+        } \
+    } \
+} while(0)
+#define __WS_FD_SET1(fd, set, cast) do { \
+    if (((cast*)(set))->fd_count < FD_SETSIZE) \
+        ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd); \
+} while(0)
+/* This version checks if the filedesc is already in the list, and appends it
+ * only if it's not the case
+ */
+#define __WS_FD_SET2(fd, set, cast) do { \
+    unsigned int __i; \
+    for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
+    { \
+        if (((cast*)(set))->fd_array[__i]==(fd)) \
+            break; \
+    } \
+    if (__i == ((cast*)(set))->fd_count && ((cast*)(set))->fd_count < FD_SETSIZE) \
+    { \
+        ((cast*)(set))->fd_count++; \
+        ((cast*)(set))->fd_array[__i]=(fd);\
+    } \
+} while(0)
+
+#ifndef __WINE_WINSOCK2__
+#define __WS_FD_SET(fd, set, cast) __WS_FD_SET1((fd),(set), cast)
+#else
+#define __WS_FD_SET(fd, set, cast) __WS_FD_SET2((fd),(set), cast)
+#endif
+
+#ifndef USE_WS_PREFIX
+#define FD_CLR(fd, set)      __WS_FD_CLR((fd),(set), fd_set)
+#define FD_SET(fd, set)      __WS_FD_SET((fd),(set), fd_set)
+#define FD_ZERO(set)         (((fd_set*)(set))->fd_count=0)
+#define FD_ISSET(fd, set)    __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set))
+#else
+#define WS_FD_CLR(fd, set)   __WS_FD_CLR((fd),(set), WS_fd_set)
+#define WS_FD_SET(fd, set)   __WS_FD_SET((fd),(set), WS_fd_set)
+#define WS_FD_ZERO(set)      (((WS_fd_set*)(set))->fd_count=0)
+#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set))
+#endif
+
+int WINAPI __WSAFDIsSet(SOCKET,WS(fd_set)*);
+
+#endif /* WS_DEFINE_SELECT */
+
+/* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */
+#ifndef USE_WS_PREFIX
+
+#undef htonl
+#undef htons
+#undef ntohl
+#undef ntohs
+
+#ifdef WORDS_BIGENDIAN
+
+#define htonl(l) ((ULONG)(l))
+#define htons(s) ((u_short)(s))
+#define ntohl(l) ((ULONG)(l))
+#define ntohs(s) ((u_short)(s))
+
+#else  /* WORDS_BIGENDIAN */
+
+static inline u_short __wine_ushort_swap(u_short s)
+{
+    return (s >> 8) | (s << 8);
+}
+static inline ULONG __wine_ulong_swap(ULONG l)
+{
+    return ((ULONG)__wine_ushort_swap((u_short)l) << 16) | __wine_ushort_swap((u_short)(l >> 16));
+}
+#define htonl(l) __wine_ulong_swap(l)
+#define htons(s) __wine_ushort_swap(s)
+#define ntohl(l) __wine_ulong_swap(l)
+#define ntohs(s) __wine_ushort_swap(s)
+
+#endif  /* WORDS_BIGENDIAN */
+
+#endif  /* USE_WS_PREFIX */
+
+/*
+ * Internet address (old style... should be updated)
+ */
+
+#ifndef USE_WS_PREFIX
+#define IN_CLASSA_NSHIFT           24
+#define IN_CLASSA_MAX              128
+#define IN_CLASSA_NET              0xff000000
+#define IN_CLASSA_HOST             0x00ffffff
+#define IN_CLASSA(i)               (((LONG)(i) & 0x80000000) == 0)
+#define IN_CLASSB_NSHIFT           16
+#define IN_CLASSB_MAX              65536
+#define IN_CLASSB_NET              0xffff0000
+#define IN_CLASSB_HOST             0x0000ffff
+#define IN_CLASSB(i)               (((LONG)(i) & 0xc0000000) == 0x80000000)
+#define IN_CLASSC_NSHIFT           8
+#define IN_CLASSC_NET              0xffffff00
+#define IN_CLASSC_HOST             0x000000ff
+#define IN_CLASSC(i)               (((LONG)(i) & 0xe0000000) == 0xc0000000)
+#else
+#define WS_IN_CLASSA_NSHIFT        24
+#define WS_IN_CLASSA_MAX           128
+#define WS_IN_CLASSA_NET           0xff000000
+#define WS_IN_CLASSA_HOST          0x00ffffff
+#define WS_IN_CLASSA(i)            (((LONG)(i) & 0x80000000) == 0)
+#define WS_IN_CLASSB_NSHIFT        16
+#define WS_IN_CLASSB_MAX           65536
+#define WS_IN_CLASSB_NET           0xffff0000
+#define WS_IN_CLASSB_HOST          0x0000ffff
+#define WS_IN_CLASSB(i)            (((LONG)(i) & 0xc0000000) == 0x80000000)
+#define WS_IN_CLASSC_NSHIFT        8
+#define WS_IN_CLASSC_NET           0xffffff00
+#define WS_IN_CLASSC_HOST          0x000000ff
+#define WS_IN_CLASSC(i)            (((LONG)(i) & 0xe0000000) == 0xc0000000)
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define INADDR_ANY                 ((ULONG)0x00000000)
+#define INADDR_LOOPBACK            0x7f000001
+#define INADDR_BROADCAST           ((ULONG)0xffffffff)
+#define INADDR_NONE                0xffffffff
+#else
+#define WS_INADDR_ANY              ((ULONG)0x00000000)
+#define WS_INADDR_LOOPBACK         0x7f000001
+#define WS_INADDR_BROADCAST        ((ULONG)0xffffffff)
+#define WS_INADDR_NONE             0xffffffff
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(sockaddr_in)
+{
+    short              sin_family;
+    WS(u_short)        sin_port;
+    struct WS(in_addr) sin_addr;
+    char               sin_zero[8];
+} SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;
+
+/*
+ * Multicast group information
+ */
+
+#if !defined(__WINE_WINSOCK2__)
+struct WS(ip_mreq)
+{
+    struct WS(in_addr) imr_multiaddr;
+    struct WS(in_addr) imr_interface;
+};
+#endif
+
+/*
+ * WSAStartup
+ */
+#define WSADESCRIPTION_LEN      256
+#define WSASYS_STATUS_LEN       128
+
+typedef struct WS(WSAData)
+{
+    WORD                    wVersion;
+    WORD                    wHighVersion;
+#ifdef _WIN64
+    WORD                    iMaxSockets;
+    WORD                    iMaxUdpDg;
+    char                   *lpVendorInfo;
+    char                    szDescription[WSADESCRIPTION_LEN+1];
+    char                    szSystemStatus[WSASYS_STATUS_LEN+1];
+#else
+    char                    szDescription[WSADESCRIPTION_LEN+1];
+    char                    szSystemStatus[WSASYS_STATUS_LEN+1];
+    WORD                    iMaxSockets;
+    WORD                    iMaxUdpDg;
+    char                   *lpVendorInfo;
+#endif
+} WSADATA, *LPWSADATA;
+
+
+
+/*
+ * {get,set}sockopt
+ */
+#ifndef USE_WS_PREFIX
+#define SOL_SOCKET                 0xffff
+#define SO_DEBUG                   0x0001
+#define SO_ACCEPTCONN              0x0002
+#define SO_REUSEADDR               0x0004
+#define SO_EXCLUSIVEADDRUSE        ((u_int)(~SO_REUSEADDR))
+#define SO_KEEPALIVE               0x0008
+#define SO_DONTROUTE               0x0010
+#define SO_BROADCAST               0x0020
+#define SO_USELOOPBACK             0x0040
+#define SO_LINGER                  0x0080
+#define SO_OOBINLINE               0x0100
+#define SO_DONTLINGER              ((u_int)(~SO_LINGER))
+#define SO_SNDBUF                  0x1001
+#define SO_RCVBUF                  0x1002
+#define SO_SNDLOWAT                0x1003
+#define SO_RCVLOWAT                0x1004
+#define SO_SNDTIMEO                0x1005
+#define SO_RCVTIMEO                0x1006
+#define SO_ERROR                   0x1007
+#define SO_TYPE                    0x1008
+
+
+#define IOCPARM_MASK               0x7f
+#define IOC_VOID                   0x20000000
+#define IOC_OUT                    0x40000000
+#define IOC_IN                     0x80000000
+#define IOC_INOUT                  (IOC_IN|IOC_OUT)
+
+#define _IO(x,y)    (IOC_VOID|((x)<<8)|(y))
+#define _IOR(x,y,t) (IOC_OUT|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define _IOW(x,y,t) (IOC_IN|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+
+#else
+
+#define WS_SOL_SOCKET              0xffff
+#define WS_SO_DEBUG                0x0001
+#define WS_SO_ACCEPTCONN           0x0002
+#define WS_SO_REUSEADDR            0x0004
+#define WS_SO_EXCLUSIVEADDRUSE     ((WS_u_int)(~WS_SO_REUSEADDR))
+#define WS_SO_KEEPALIVE            0x0008
+#define WS_SO_DONTROUTE            0x0010
+#define WS_SO_BROADCAST            0x0020
+#define WS_SO_USELOOPBACK          0x0040
+#define WS_SO_LINGER               0x0080
+#define WS_SO_OOBINLINE            0x0100
+#define WS_SO_DONTLINGER           ((WS_u_int)(~WS_SO_LINGER))
+#define WS_SO_SNDBUF               0x1001
+#define WS_SO_RCVBUF               0x1002
+#define WS_SO_SNDLOWAT             0x1003
+#define WS_SO_RCVLOWAT             0x1004
+#define WS_SO_SNDTIMEO             0x1005
+#define WS_SO_RCVTIMEO             0x1006
+#define WS_SO_ERROR                0x1007
+#define WS_SO_TYPE                 0x1008
+
+#define WS_IOCPARM_MASK            0x7f
+#define WS_IOC_VOID                0x20000000
+#define WS_IOC_OUT                 0x40000000
+#define WS_IOC_IN                  0x80000000
+#define WS_IOC_INOUT               (WS_IOC_IN|WS_IOC_OUT)
+
+#define WS__IO(x,y)    (WS_IOC_VOID|((x)<<8)|(y))
+#define WS__IOR(x,y,t) (WS_IOC_OUT|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define WS__IOW(x,y,t) (WS_IOC_IN|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
+
+#endif
+
+/* IPPROTO_TCP options */
+#ifndef USE_WS_PREFIX
+#define TCP_NODELAY                1
+#else
+#define WS_TCP_NODELAY             1
+#endif
+
+/* IPPROTO_IP options */
+#ifndef __WINE_WINSOCK2__    /* WinSock2 has different values for the IP_ constants */
+# ifndef USE_WS_PREFIX
+#  define IP_OPTIONS             1
+#  define IP_MULTICAST_IF        2
+#  define IP_MULTICAST_TTL       3
+#  define IP_MULTICAST_LOOP      4
+#  define IP_ADD_MEMBERSHIP      5
+#  define IP_DROP_MEMBERSHIP     6
+#  define IP_TTL                 7
+#  define IP_TOS                 8
+#  define IP_DONTFRAGMENT        9
+# else
+#  define WS_IP_OPTIONS          1
+#  define WS_IP_MULTICAST_IF     2
+#  define WS_IP_MULTICAST_TTL    3
+#  define WS_IP_MULTICAST_LOOP   4
+#  define WS_IP_ADD_MEMBERSHIP   5
+#  define WS_IP_DROP_MEMBERSHIP  6
+#  define WS_IP_TTL              7
+#  define WS_IP_TOS              8
+#  define WS_IP_DONTFRAGMENT     9
+# endif
+#endif
+
+
+/*
+ * Socket I/O flags (supported by spec 1.1)
+ */
+#ifndef USE_WS_PREFIX
+#define FIONREAD                   _IOR('f', 127, ULONG)
+#define FIONBIO                    _IOW('f', 126, ULONG)
+#define FIOASYNC                   _IOW('f', 125, ULONG)
+#define SIOCSHIWAT                 _IOW('s',  0, ULONG)
+#define SIOCGHIWAT                 _IOR('s',  1, ULONG)
+#define SIOCSLOWAT                 _IOW('s',  2, ULONG)
+#define SIOCGLOWAT                 _IOR('s',  3, ULONG)
+#define SIOCATMARK                 _IOR('s',  7, ULONG)
+#else
+#define WS_FIONREAD                WS__IOR('f', 127, ULONG)
+#define WS_FIONBIO                 WS__IOW('f', 126, ULONG)
+#define WS_FIOASYNC                WS__IOW('f', 125, ULONG)
+#define WS_SIOCSHIWAT              WS__IOW('s',  0, ULONG)
+#define WS_SIOCGHIWAT              WS__IOR('s',  1, ULONG)
+#define WS_SIOCSLOWAT              WS__IOW('s',  2, ULONG)
+#define WS_SIOCGLOWAT              WS__IOR('s',  3, ULONG)
+#define WS_SIOCATMARK              WS__IOR('s',  7, ULONG)
+#endif
+
+/*
+ * Maximum queue length specifiable by listen.
+ */
+#ifndef USE_WS_PREFIX
+#define SOMAXCONN                  5
+
+#define MSG_OOB                    0x0001
+#define MSG_PEEK                   0x0002
+#define MSG_DONTROUTE              0x0004
+#define MSG_WAITALL                0x0008
+#define MSG_INTERRUPT              0x0010
+#define MSG_PARTIAL                0x8000
+#define MSG_MAXIOVLEN              16
+#else /* USE_WS_PREFIX */
+#define WS_SOMAXCONN               5
+
+#define WS_MSG_OOB                 0x0001
+#define WS_MSG_PEEK                0x0002
+#define WS_MSG_DONTROUTE           0x0004
+#define WS_MSG_WAITALL             0x0008
+#define WS_MSG_INTERRUPT           0x0010
+#define WS_MSG_PARTIAL             0x8000
+#define WS_MSG_MAXIOVLEN           16
+#endif /* USE_WS_PREFIX */
+
+/*
+ * Define constant based on rfc883, used by gethostbyxxxx() calls.
+ */
+#ifndef USE_WS_PREFIX
+#define MAXGETHOSTSTRUCT           1024
+#else
+#define MAXGETHOSTSTRUCT           1024
+#endif
+
+
+/*
+ * Define flags to be used with the WSAAsyncSelect() call.
+ */
+#define FD_READ                    0x00000001
+#define FD_WRITE                   0x00000002
+#define FD_OOB                     0x00000004
+#define FD_ACCEPT                  0x00000008
+#define FD_CONNECT                 0x00000010
+#define FD_CLOSE                   0x00000020
+
+/* internal per-socket flags */
+#ifdef __WINESRC__
+#define FD_WINE_LISTENING          0x10000000
+#define FD_WINE_NONBLOCKING        0x20000000
+#define FD_WINE_CONNECTED          0x40000000
+#define FD_WINE_RAW                0x80000000
+#define FD_WINE_INTERNAL           0xFFFF0000
+#endif
+
+/*
+ * All Windows Sockets error constants are biased by WSABASEERR from
+ * the "normal". They are also defined in winerror.h.
+ */
+#define WSABASEERR                 10000
+/*
+ * Windows Sockets definitions of regular Microsoft C error constants
+ */
+#define WSAEINTR                   (WSABASEERR+4)
+#define WSAEBADF                   (WSABASEERR+9)
+#define WSAEACCES                  (WSABASEERR+13)
+#define WSAEFAULT                  (WSABASEERR+14)
+#define WSAEINVAL                  (WSABASEERR+22)
+#define WSAEMFILE                  (WSABASEERR+24)
+
+/*
+ * Windows Sockets definitions of regular Berkeley error constants
+ */
+#define WSAEWOULDBLOCK             (WSABASEERR+35)
+#define WSAEINPROGRESS             (WSABASEERR+36)
+#define WSAEALREADY                (WSABASEERR+37)
+#define WSAENOTSOCK                (WSABASEERR+38)
+#define WSAEDESTADDRREQ            (WSABASEERR+39)
+#define WSAEMSGSIZE                (WSABASEERR+40)
+#define WSAEPROTOTYPE              (WSABASEERR+41)
+#define WSAENOPROTOOPT             (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT         (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT         (WSABASEERR+44)
+#define WSAEOPNOTSUPP              (WSABASEERR+45)
+#define WSAEPFNOSUPPORT            (WSABASEERR+46)
+#define WSAEAFNOSUPPORT            (WSABASEERR+47)
+#define WSAEADDRINUSE              (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL           (WSABASEERR+49)
+#define WSAENETDOWN                (WSABASEERR+50)
+#define WSAENETUNREACH             (WSABASEERR+51)
+#define WSAENETRESET               (WSABASEERR+52)
+#define WSAECONNABORTED            (WSABASEERR+53)
+#define WSAECONNRESET              (WSABASEERR+54)
+#define WSAENOBUFS                 (WSABASEERR+55)
+#define WSAEISCONN                 (WSABASEERR+56)
+#define WSAENOTCONN                (WSABASEERR+57)
+#define WSAESHUTDOWN               (WSABASEERR+58)
+#define WSAETOOMANYREFS            (WSABASEERR+59)
+#define WSAETIMEDOUT               (WSABASEERR+60)
+#define WSAECONNREFUSED            (WSABASEERR+61)
+#define WSAELOOP                   (WSABASEERR+62)
+#define WSAENAMETOOLONG            (WSABASEERR+63)
+#define WSAEHOSTDOWN               (WSABASEERR+64)
+#define WSAEHOSTUNREACH            (WSABASEERR+65)
+#define WSAENOTEMPTY               (WSABASEERR+66)
+#define WSAEPROCLIM                (WSABASEERR+67)
+#define WSAEUSERS                  (WSABASEERR+68)
+#define WSAEDQUOT                  (WSABASEERR+69)
+#define WSAESTALE                  (WSABASEERR+70)
+#define WSAEREMOTE                 (WSABASEERR+71)
+
+/*
+ * Extended Windows Sockets error constant definitions
+ */
+#define WSASYSNOTREADY             (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED         (WSABASEERR+92)
+#define WSANOTINITIALISED          (WSABASEERR+93)
+#define WSAEDISCON                 (WSABASEERR+101)
+#define WSAENOMORE                 (WSABASEERR+102)
+#define WSAECANCELLED              (WSABASEERR+103)
+#define WSAEINVALIDPROCTABLE       (WSABASEERR+104)
+#define WSAEINVALIDPROVIDER        (WSABASEERR+105)
+#define WSAEPROVIDERFAILEDINIT     (WSABASEERR+106)
+#define WSASYSCALLFAILURE          (WSABASEERR+107)
+#define WSASERVICE_NOT_FOUND       (WSABASEERR+108)
+#define WSATYPE_NOT_FOUND          (WSABASEERR+109)
+#define WSA_E_NO_MORE              (WSABASEERR+110)
+#define WSA_E_CANCELLED            (WSABASEERR+111)
+#define WSAEREFUSED                (WSABASEERR+112)
+
+/*
+ * Error return codes from gethostbyname() and gethostbyaddr()
+ * (when using the resolver). Note that these errors are
+ * retrieved via WSAGetLastError() and must therefore follow
+ * the rules for avoiding clashes with error numbers from
+ * specific implementations or language run-time systems.
+ * For this reason the codes are based at WSABASEERR+1001.
+ * Note also that [WSA]NO_ADDRESS is defined only for
+ * compatibility purposes.
+ */
+
+#ifndef USE_WS_PREFIX
+#define h_errno                    WSAGetLastError()
+#else
+#define WS_h_errno                 WSAGetLastError()
+#endif
+
+/* Authoritative Answer: Host not found */
+#define WSAHOST_NOT_FOUND          (WSABASEERR+1001)
+
+/* Non-Authoritative: Host not found, or SERVERFAIL */
+#define WSATRY_AGAIN               (WSABASEERR+1002)
+
+/* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
+#define WSANO_RECOVERY             (WSABASEERR+1003)
+
+/* Valid name, no data record of requested type */
+#define WSANO_DATA                 (WSABASEERR+1004)
+
+/* no address, look for MX record */
+#define WSANO_ADDRESS              WSANO_DATA
+
+#ifndef USE_WS_PREFIX
+#define HOST_NOT_FOUND             WSAHOST_NOT_FOUND
+#define TRY_AGAIN                  WSATRY_AGAIN
+#define NO_RECOVERY                WSANO_RECOVERY
+#define NO_DATA                    WSANO_DATA
+#define NO_ADDRESS                 WSANO_ADDRESS
+#endif /* USE_WS_PREFIX */
+
+
+
+/*
+ * Windows message parameter composition and decomposition
+ * macros.
+ */
+
+/*
+ * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
+ * when constructing the response to a WSAAsyncGetXByY() routine.
+ */
+#define WSAMAKEASYNCREPLY(buflen,error)     MAKELONG(buflen,error)
+/*
+ * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
+ * when constructing the response to WSAAsyncSelect().
+ */
+#define WSAMAKESELECTREPLY(event,error)     MAKELONG(event,error)
+/*
+ * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
+ * to extract the buffer length from the lParam in the response
+ * to a WSAGetXByY().
+ */
+#define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
+/*
+ * WSAGETASYNCERROR is intended for use by the Windows Sockets application
+ * to extract the error code from the lParam in the response
+ * to a WSAGetXByY().
+ */
+#define WSAGETASYNCERROR(lParam)            HIWORD(lParam)
+/*
+ * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
+ * to extract the event code from the lParam in the response
+ * to a WSAAsyncSelect().
+ */
+#define WSAGETSELECTEVENT(lParam)           LOWORD(lParam)
+/*
+ * WSAGETSELECTERROR is intended for use by the Windows Sockets application
+ * to extract the error code from the lParam in the response
+ * to a WSAAsyncSelect().
+ */
+#define WSAGETSELECTERROR(lParam)           HIWORD(lParam)
+
+
+
+/*
+ * Prototypes
+ *
+ * Remember to keep this section in sync with the
+ * "Winsock Function Typedefs" section in winsock2.h.
+ */
+#if !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES
+HANDLE WINAPI WSAAsyncGetHostByAddr(HWND,WS(u_int),const char*,int,int,char*,int);
+HANDLE WINAPI WSAAsyncGetHostByName(HWND,WS(u_int),const char*,char*,int);
+HANDLE WINAPI WSAAsyncGetProtoByName(HWND,WS(u_int),const char*,char*,int);
+HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND,WS(u_int),int,char*,int);
+HANDLE WINAPI WSAAsyncGetServByName(HWND,WS(u_int),const char*,const char*,char*,int);
+HANDLE WINAPI WSAAsyncGetServByPort(HWND,WS(u_int),int,const char*,char*,int);
+int WINAPI WSAAsyncSelect(SOCKET,HWND,WS(u_int),LONG);
+int WINAPI WSACancelAsyncRequest(HANDLE);
+int WINAPI WSACancelBlockingCall(void);
+int WINAPI WSACleanup(void);
+int WINAPI WSAGetLastError(void);
+BOOL WINAPI WSAIsBlocking(void);
+FARPROC WINAPI WSASetBlockingHook(FARPROC);
+void WINAPI WSASetLastError(int);
+int WINAPI WSAStartup(WORD,LPWSADATA);
+int WINAPI WSAUnhookBlockingHook(void);
+
+SOCKET WINAPI WS(accept)(SOCKET,struct WS(sockaddr)*,int*);
+int WINAPI WS(bind)(SOCKET,const struct WS(sockaddr)*,int);
+int WINAPI WS(closesocket)(SOCKET);
+int WINAPI WS(connect)(SOCKET,const struct WS(sockaddr)*,int);
+struct WS(hostent)* WINAPI WS(gethostbyaddr)(const char*,int,int);
+struct WS(hostent)* WINAPI WS(gethostbyname)(const char*);
+int WINAPI WS(getpeername)(SOCKET,struct WS(sockaddr)*,int*);
+struct WS(protoent)* WINAPI WS(getprotobyname)(const char*);
+struct WS(protoent)* WINAPI WS(getprotobynumber)(int);
+#ifdef WS_DEFINE_SELECT
+int WINAPI WS(select)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);
+#endif
+struct WS(servent)* WINAPI WS(getservbyname)(const char*,const char*);
+struct WS(servent)* WINAPI WS(getservbyport)(int,const char*);
+int WINAPI WS(getsockname)(SOCKET,struct WS(sockaddr)*,int*);
+int WINAPI WS(getsockopt)(SOCKET,int,int,char*,int*);
+ULONG WINAPI WS(inet_addr)(const char*);
+char* WINAPI WS(inet_ntoa)(struct WS(in_addr));
+int WINAPI WS(ioctlsocket)(SOCKET,LONG,ULONG*);
+int WINAPI WS(listen)(SOCKET,int);
+int WINAPI WS(recv)(SOCKET,char*,int,int);
+int WINAPI WS(recvfrom)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);
+int WINAPI WS(send)(SOCKET,const char*,int,int);
+int WINAPI WS(sendto)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);
+int WINAPI WS(setsockopt)(SOCKET,int,int,const char*,int);
+int WINAPI WS(shutdown)(SOCKET,int);
+SOCKET WINAPI WS(socket)(int,int,int);
+
+#if defined(__MINGW32__) || defined (_MSC_VER)
+/* gethostname is not defined on Unix because of conflicts with unistd.h */
+int WINAPI WS(gethostname)(char*,int);
+#endif
+
+#endif /* !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef __WINE_WINSOCK2__
+#undef WS
+#undef WS_API_PROTOTYPES
+#undef WS_API_TYPEDEFS
+#endif
+
+#endif  /* _WINSOCKAPI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h
new file mode 100644
index 0000000..aec1ccb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h
@@ -0,0 +1,768 @@
+/*
+ * Winsock 2 definitions - used for ws2_32.dll
+ *
+ * Copyright (C) 1999 Ove Kaaven
+ * Copyright (C) 2001 Francois Gouget
+ *
+ * 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
+ *
+ * FIXME: Still missing required Winsock 2 definitions.
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINSOCK2API_
+#define _WINSOCK2API_
+
+/*
+ * Setup phase
+ */
+
+/* Everything common between winsock.h and winsock2.h */
+#ifndef INCL_WINSOCK_API_PROTOTYPES
+#define INCL_WINSOCK_API_PROTOTYPES 1
+#define WS_API_PROTOTYPES          1
+#else
+#define WS_API_PROTOTYPES          INCL_WINSOCK_API_PROTOTYPES
+#endif
+
+#ifndef INCL_WINSOCK_API_TYPEDEFS
+#define INCL_WINSOCK_API_TYPEDEFS  0
+#define WS_API_TYPEDEFS            0
+#else
+#define WS_API_TYPEDEFS            INCL_WINSOCK_API_TYPEDEFS
+#endif
+
+#define __WINE_WINSOCK2__
+#include <winsock.h>
+#undef  __WINE_WINSOCK2__
+
+#include <ws2def.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+
+#ifndef USE_WS_PREFIX
+#define SO_GROUP_ID                0x2001
+#define SO_GROUP_PRIORITY          0x2002
+#define SO_MAX_MSG_SIZE            0x2003
+#define SO_PROTOCOL_INFOA          0x2004
+#define SO_PROTOCOL_INFOW          0x2005
+#define SO_PROTOCOL_INFO           WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO)
+#define PVD_CONFIG                 0x3001
+#define SO_CONDITIONAL_ACCEPT      0x3002
+#else
+#define WS_SO_GROUP_ID             0x2001
+#define WS_SO_GROUP_PRIORITY       0x2002
+#define WS_SO_MAX_MSG_SIZE         0x2003
+#define WS_SO_PROTOCOL_INFOA       0x2004
+#define WS_SO_PROTOCOL_INFOW       0x2005
+#define WS_SO_PROTOCOL_INFO        WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO)
+#define WS_PVD_CONFIG              0x3001
+#define WS_SO_CONDITIONAL_ACCEPT   0x3002
+#endif
+
+/* protocol types */
+
+#define FROM_PROTOCOL_INFO       (-1)
+
+#ifndef USE_WS_PREFIX
+#define SOCK_STREAM                1
+#define SOCK_DGRAM                 2
+#define SOCK_RAW                   3
+#define SOCK_RDM                   4
+#define SOCK_SEQPACKET             5
+#else /* USE_WS_PREFIX */
+#define WS_SOCK_STREAM             1
+#define WS_SOCK_DGRAM              2
+#define WS_SOCK_RAW                3
+#define WS_SOCK_RDM                4
+#define WS_SOCK_SEQPACKET          5
+#endif /* USE_WS_PREFIX */
+
+/* option flags per socket */
+
+#define FD_MAX_EVENTS              10
+#define FD_READ_BIT                0
+#define FD_WRITE_BIT               1
+#define FD_OOB_BIT                 2
+#define FD_ACCEPT_BIT              3
+#define FD_CONNECT_BIT             4
+#define FD_CLOSE_BIT               5
+
+/* Constants for LPCONDITIONPROC */
+#define CF_ACCEPT                  0x0000
+#define CF_REJECT                  0x0001
+#define CF_DEFER                   0x0002
+
+/* Constants for shutdown() */
+#define SD_RECEIVE                 0x00
+#define SD_SEND                    0x01
+#define SD_BOTH                    0x02
+
+/* Constants for WSAIoctl() */
+#ifdef USE_WS_PREFIX
+#define WS_IOC_UNIX                0x00000000
+#define WS_IOC_WS2                 0x08000000
+#define WS_IOC_PROTOCOL            0x10000000
+#define WS_IOC_VENDOR              0x18000000
+#define WS_IOC_VOID                0x20000000
+#define WS_IOC_OUT                 0x40000000
+#define WS_IOC_IN                  0x80000000
+#define WS_IOC_INOUT               (WS_IOC_IN|WS_IOC_OUT)
+#define _WSAIO(x,y)                (WS_IOC_VOID|(x)|(y))
+#define _WSAIOR(x,y)               (WS_IOC_OUT|(x)|(y))
+#define _WSAIOW(x,y)               (WS_IOC_IN|(x)|(y))
+#define _WSAIORW(x,y)              (WS_IOC_INOUT|(x)|(y))
+#define WS_SIO_ASSOCIATE_HANDLE               _WSAIOW(WS_IOC_WS2,1)
+#define WS_SIO_ENABLE_CIRCULAR_QUEUEING       _WSAIO(WS_IOC_WS2,2)
+#define WS_SIO_FIND_ROUTE                     _WSAIOR(WS_IOC_WS2,3)
+#define WS_SIO_FLUSH                          _WSAIO(WS_IOC_WS2,4)
+#define WS_SIO_GET_BROADCAST_ADDRESS          _WSAIOR(WS_IOC_WS2,5)
+#define WS_SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(WS_IOC_WS2,6)
+#define WS_SIO_GET_QOS                        _WSAIORW(WS_IOC_WS2,7)
+#define WS_SIO_GET_GROUP_QOS                  _WSAIORW(WS_IOC_WS2,8)
+#define WS_SIO_MULTIPOINT_LOOPBACK            _WSAIOW(WS_IOC_WS2,9)
+#define WS_SIO_MULTICAST_SCOPE                _WSAIOW(WS_IOC_WS2,10)
+#define WS_SIO_SET_QOS                        _WSAIOW(WS_IOC_WS2,11)
+#define WS_SIO_SET_GROUP_QOS                  _WSAIOW(WS_IOC_WS2,12)
+#define WS_SIO_TRANSLATE_HANDLE               _WSAIORW(WS_IOC_WS2,13)
+#define WS_SIO_ROUTING_INTERFACE_QUERY        _WSAIORW(WS_IOC_WS2,20)
+#define WS_SIO_ROUTING_INTERFACE_CHANGE       _WSAIOW(WS_IOC_WS2,21)
+#define WS_SIO_ADDRESS_LIST_QUERY             _WSAIOR(WS_IOC_WS2,22)
+#define WS_SIO_ADDRESS_LIST_CHANGE            _WSAIO(WS_IOC_WS2,23)
+#define WS_SIO_QUERY_TARGET_PNP_HANDLE        _WSAIOR(WS_IOC_WS2,24)
+#define WS_SIO_GET_INTERFACE_LIST             WS__IOR('t', 127, ULONG)
+#else /* USE_WS_PREFIX */
+#undef IOC_VOID
+#undef IOC_IN
+#undef IOC_OUT
+#undef IOC_INOUT
+#define IOC_UNIX                   0x00000000
+#define IOC_WS2                    0x08000000
+#define IOC_PROTOCOL               0x10000000
+#define IOC_VENDOR                 0x18000000
+#define IOC_VOID                   0x20000000
+#define IOC_OUT                    0x40000000
+#define IOC_IN                     0x80000000
+#define IOC_INOUT                  (IOC_IN|IOC_OUT)
+#define _WSAIO(x,y)                (IOC_VOID|(x)|(y))
+#define _WSAIOR(x,y)               (IOC_OUT|(x)|(y))
+#define _WSAIOW(x,y)               (IOC_IN|(x)|(y))
+#define _WSAIORW(x,y)              (IOC_INOUT|(x)|(y))
+#define SIO_ASSOCIATE_HANDLE       _WSAIOW(IOC_WS2,1)
+#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
+#define SIO_FIND_ROUTE             _WSAIOR(IOC_WS2,3)
+#define SIO_FLUSH                  _WSAIO(IOC_WS2,4)
+#define SIO_GET_BROADCAST_ADDRESS  _WSAIOR(IOC_WS2,5)
+#define SIO_GET_EXTENSION_FUNCTION_POINTER  _WSAIORW(IOC_WS2,6)
+#define SIO_GET_QOS                _WSAIORW(IOC_WS2,7)
+#define SIO_GET_GROUP_QOS          _WSAIORW(IOC_WS2,8)
+#define SIO_MULTIPOINT_LOOPBACK    _WSAIOW(IOC_WS2,9)
+#define SIO_MULTICAST_SCOPE        _WSAIOW(IOC_WS2,10)
+#define SIO_SET_QOS                _WSAIOW(IOC_WS2,11)
+#define SIO_SET_GROUP_QOS          _WSAIOW(IOC_WS2,12)
+#define SIO_TRANSLATE_HANDLE       _WSAIORW(IOC_WS2,13)
+#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
+#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
+#define SIO_ADDRESS_LIST_QUERY     _WSAIOR(IOC_WS2,22)
+#define SIO_ADDRESS_LIST_CHANGE    _WSAIO(IOC_WS2,23)
+#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24)
+#define SIO_GET_INTERFACE_LIST     _IOR ('t', 127, ULONG)
+#endif /* USE_WS_PREFIX */
+
+/* Constants for WSAIoctl() */
+#define WSA_FLAG_OVERLAPPED        0x01
+#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02
+#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04
+#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08
+#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10
+
+/* Constants for WSAJoinLeaf() */
+#define JL_SENDER_ONLY    0x01
+#define JL_RECEIVER_ONLY  0x02
+#define JL_BOTH           0x04
+
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#define MAX_PROTOCOL_CHAIN         7
+#define BASE_PROTOCOL              1
+#define LAYERED_PROTOCOL           0
+
+typedef struct _WSAPROTOCOLCHAIN
+{
+    int ChainLen;                  /* the length of the chain,     */
+                                   /* length = 0 means layered protocol, */
+                                   /* length = 1 means base protocol, */
+                                   /* length > 1 means protocol chain */
+    DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */
+} WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN;
+
+/* constants used in dwProviderFlags from struct WSAPROTOCOL_INFO */
+#define PFL_MULTIPLE_PROTO_ENTRIES          0x00000001
+#define PFL_RECOMMENDED_PROTO_ENTRY         0x00000002
+#define PFL_HIDDEN                          0x00000004
+#define PFL_MATCHES_PROTOCOL_ZERO           0x00000008
+
+#define XP1_CONNECTIONLESS                  0x00000001
+#define XP1_GUARANTEED_DELIVERY             0x00000002
+#define XP1_GUARANTEED_ORDER                0x00000004
+#define XP1_MESSAGE_ORIENTED                0x00000008
+#define XP1_PSEUDO_STREAM                   0x00000010
+#define XP1_GRACEFUL_CLOSE                  0x00000020
+#define XP1_EXPEDITED_DATA                  0x00000040
+#define XP1_CONNECT_DATA                    0x00000080
+#define XP1_DISCONNECT_DATA                 0x00000100
+#define XP1_SUPPORT_BROADCAST               0x00000200
+#define XP1_SUPPORT_MULTIPOINT              0x00000400
+#define XP1_MULTIPOINT_CONTROL_PLANE        0x00000800
+#define XP1_MULTIPOINT_DATA_PLANE           0x00001000
+#define XP1_QOS_SUPPORTED                   0x00002000
+#define XP1_INTERRUPT                       0x00004000
+#define XP1_UNI_SEND                        0x00008000
+#define XP1_UNI_RECV                        0x00010000
+#define XP1_IFS_HANDLES                     0x00020000
+#define XP1_PARTIAL_MESSAGE                 0x00040000
+
+#define BIGENDIAN                           0x0000
+#define LITTLEENDIAN                        0x0001
+
+#define SECURITY_PROTOCOL_NONE              0x0000
+
+#define WSAPROTOCOL_LEN  255
+typedef struct _WSAPROTOCOL_INFOA
+{
+    DWORD dwServiceFlags1;
+    DWORD dwServiceFlags2;
+    DWORD dwServiceFlags3;
+    DWORD dwServiceFlags4;
+    DWORD dwProviderFlags;
+    GUID ProviderId;
+    DWORD dwCatalogEntryId;
+    WSAPROTOCOLCHAIN ProtocolChain;
+    int iVersion;
+    int iAddressFamily;
+    int iMaxSockAddr;
+    int iMinSockAddr;
+    int iSocketType;
+    int iProtocol;
+    int iProtocolMaxOffset;
+    int iNetworkByteOrder;
+    int iSecurityScheme;
+    DWORD dwMessageSize;
+    DWORD dwProviderReserved;
+    CHAR szProtocol[WSAPROTOCOL_LEN+1];
+} WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA;
+
+typedef struct _WSAPROTOCOL_INFOW
+{
+    DWORD dwServiceFlags1;
+    DWORD dwServiceFlags2;
+    DWORD dwServiceFlags3;
+    DWORD dwServiceFlags4;
+    DWORD dwProviderFlags;
+    GUID ProviderId;
+    DWORD dwCatalogEntryId;
+    WSAPROTOCOLCHAIN ProtocolChain;
+    int iVersion;
+    int iAddressFamily;
+    int iMaxSockAddr;
+    int iMinSockAddr;
+    int iSocketType;
+    int iProtocol;
+    int iProtocolMaxOffset;
+    int iNetworkByteOrder;
+    int iSecurityScheme;
+    DWORD dwMessageSize;
+    DWORD dwProviderReserved;
+    WCHAR szProtocol[WSAPROTOCOL_LEN+1];
+} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
+
+DECL_WINELIB_TYPE_AW(WSAPROTOCOL_INFO)
+DECL_WINELIB_TYPE_AW(LPWSAPROTOCOL_INFO)
+
+typedef struct _WSANETWORKEVENTS
+{
+    LONG lNetworkEvents;
+    int iErrorCode[FD_MAX_EVENTS];
+} WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
+
+typedef struct _WSANSClassInfoA
+{
+    LPSTR lpszName;
+    DWORD dwNameSpace;
+    DWORD dwValueType;
+    DWORD dwValueSize;
+    LPVOID lpValue;
+} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
+
+typedef struct _WSANSClassInfoW
+{
+    LPSTR lpszName;
+    DWORD dwNameSpace;
+    DWORD dwValueType;
+    DWORD dwValueSize;
+    LPVOID lpValue;
+} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
+
+DECL_WINELIB_TYPE_AW(WSANSCLASSINFO)
+DECL_WINELIB_TYPE_AW(PWSANSCLASSINFO)
+DECL_WINELIB_TYPE_AW(LPWSANSCLASSINFO)
+
+typedef struct _WSAServiceClassInfoA
+{
+    LPGUID lpServiceClassId;
+    LPSTR lpszServiceClassName;
+    DWORD dwCount;
+    LPWSANSCLASSINFOA lpClassInfos;
+} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
+
+typedef struct _WSAServiceClassInfoW
+{
+    LPGUID lpServiceClassId;
+    LPWSTR lpszServiceClassName;
+    DWORD dwCount;
+    LPWSANSCLASSINFOW lpClassInfos;
+} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
+
+
+DECL_WINELIB_TYPE_AW(WSASERVICECLASSINFO)
+DECL_WINELIB_TYPE_AW(PWSASERVICECLASSINFO)
+DECL_WINELIB_TYPE_AW(LPWSASERVICECLASSINFO)
+
+#define WSAEVENT      HANDLE
+#define LPWSAEVENT    LPHANDLE
+#define WSAOVERLAPPED OVERLAPPED
+typedef struct _OVERLAPPED* LPWSAOVERLAPPED;
+
+#define WSA_IO_PENDING             (ERROR_IO_PENDING)
+#define WSA_IO_INCOMPLETE          (ERROR_IO_INCOMPLETE)
+#define WSA_INVALID_HANDLE         (ERROR_INVALID_HANDLE)
+#define WSA_INVALID_PARAMETER      (ERROR_INVALID_PARAMETER)
+#define WSA_NOT_ENOUGH_MEMORY      (ERROR_NOT_ENOUGH_MEMORY)
+#define WSA_OPERATION_ABORTED      (ERROR_OPERATION_ABORTED)
+
+#define WSA_INVALID_EVENT          ((WSAEVENT)NULL)
+#define WSA_MAXIMUM_WAIT_EVENTS    (MAXIMUM_WAIT_OBJECTS)
+#define WSA_WAIT_FAILED            ((DWORD)-1)
+#define WSA_WAIT_EVENT_0           (WAIT_OBJECT_0)
+#define WSA_WAIT_IO_COMPLETION     (WAIT_IO_COMPLETION)
+#define WSA_WAIT_TIMEOUT           (WAIT_TIMEOUT)
+#define WSA_INFINITE               (INFINITE)
+
+typedef unsigned int   GROUP;
+#define SG_UNCONSTRAINED_GROUP   0x01
+#define SG_CONSTRAINED_GROUP     0x02
+
+/*
+ * FLOWSPEC and SERVICETYPE should eventually move to qos.h
+ */
+
+typedef ULONG   SERVICETYPE;
+
+typedef struct _FLOWSPEC {
+       unsigned int      TokenRate;
+       unsigned int      TokenBucketSize;
+       unsigned int      PeakBandwidth;
+       unsigned int      Latency;
+       unsigned int      DelayVariation;
+       SERVICETYPE       ServiceType;
+       unsigned int      MaxSduSize;
+       unsigned int      MinimumPolicedSize;
+   } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
+
+typedef struct _QUALITYOFSERVICE {
+        FLOWSPEC           SendingFlowspec;
+        FLOWSPEC           ReceivingFlowspec;
+        WSABUF             ProviderSpecific;
+   } QOS, *LPQOS;
+
+typedef int (CALLBACK *LPCONDITIONPROC)
+(
+    LPWSABUF lpCallerId,
+    LPWSABUF lpCallerData,
+    LPQOS lpSQOS,
+    LPQOS lpGQOS,
+    LPWSABUF lpCalleeId,
+    LPWSABUF lpCalleeData,
+    GROUP *g,
+    DWORD_PTR dwCallbackData
+);
+
+typedef void (CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE)
+(
+    DWORD dwError,
+    DWORD cbTransferred,
+    LPWSAOVERLAPPED lpOverlapped,
+    DWORD dwFlags
+);
+
+#ifndef _tagBLOB_DEFINED
+#define _tagBLOB_DEFINED
+#define _BLOB_DEFINED
+#define _LPBLOB_DEFINED
+typedef struct _BLOB {
+        ULONG   cbSize;
+        BYTE   *pBlobData;
+} BLOB, *LPBLOB;
+#endif
+
+/*   addressfamily protocol pairs */
+typedef struct _AFPROTOCOLS {
+        INT     iAddressFamily;
+        INT     iProtocol;
+} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
+
+/* client query definitions */
+typedef enum _WSAEcomparator {
+        COMP_EQUAL = 0,
+        COMP_NOTLESS
+} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
+
+typedef struct _WSAVersion {
+        DWORD           dwVersion;
+        WSAECOMPARATOR  ecHow;
+} WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
+
+
+typedef struct _WSAQuerySetA {
+        DWORD           dwSize;
+        LPSTR           lpszServiceInstanceName;
+        LPGUID          lpServiceClassId;
+        LPWSAVERSION    lpVersion;
+        LPSTR           lpszComment;
+        DWORD           dwNameSpace;
+        LPGUID          lpNSProviderId;
+        LPSTR           lpszContext;
+        DWORD           dwNumberOfProtocols;
+        LPAFPROTOCOLS   lpafpProtocols;
+        LPSTR           lpszQueryString;
+        DWORD           dwNumberOfCsAddrs;
+        LPCSADDR_INFO   lpcsaBuffer;
+        DWORD           dwOutputFlags;
+        LPBLOB          lpBlob;
+} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
+
+typedef struct _WSAQuerySetW {
+        DWORD           dwSize;
+        LPWSTR          lpszServiceInstanceName;
+        LPGUID          lpServiceClassId;
+        LPWSAVERSION    lpVersion;
+        LPWSTR          lpszComment;
+        DWORD           dwNameSpace;
+        LPGUID          lpNSProviderId;
+        LPWSTR          lpszContext;
+        DWORD           dwNumberOfProtocols;
+        LPAFPROTOCOLS   lpafpProtocols;
+        LPWSTR          lpszQueryString;
+        DWORD           dwNumberOfCsAddrs;
+        LPCSADDR_INFO   lpcsaBuffer;
+        DWORD           dwOutputFlags;
+        LPBLOB          lpBlob;
+} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
+
+DECL_WINELIB_TYPE_AW(WSAQUERYSET)
+DECL_WINELIB_TYPE_AW(PWSAQUERYSET)
+DECL_WINELIB_TYPE_AW(LPWSAQUERYSET)
+
+typedef enum _WSAESETSERVICEOP {
+        RNRSERVICE_REGISTER = 0,
+        RNRSERVICE_DEREGISTER,
+        RNRSERVICE_DELETE
+} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
+
+typedef struct _WSANAMESPACE_INFOA {
+        GUID    NSProviderId;
+        DWORD   dwNameSpace;
+        BOOL    fActive;
+        DWORD   dwVersion;
+        LPSTR   lpszIdentifier;
+} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
+
+typedef struct _WSANAMESPACE_INFOW {
+        GUID    NSProviderId;
+        DWORD   dwNameSpace;
+        BOOL    fActive;
+        DWORD   dwVersion;
+        LPWSTR  lpszIdentifier;
+} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
+
+DECL_WINELIB_TYPE_AW(WSANAMESPACE_INFO)
+DECL_WINELIB_TYPE_AW(PWSANAMESPACE_INFO)
+DECL_WINELIB_TYPE_AW(LPWSANAMESPACE_INFO)
+
+typedef enum _WSACOMPLETIONTYPE {
+    NSP_NOTIFY_IMMEDIATELY = 0,
+    NSP_NOTIFY_HWND = 1,
+    NSP_NOTIFY_EVENT = 2,
+    NSP_NOTIFY_PORT = 3,
+    NSP_NOTIFY_APC = 4
+} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE;
+
+typedef struct _WSACOMPLETION {
+    WSACOMPLETIONTYPE Type;
+    union {
+        struct {
+            HWND hWnd;
+            UINT uMsg;
+            WPARAM context;
+        } WindowMessage;
+        struct {
+            LPWSAOVERLAPPED lpOverlapped;
+        } Event;
+        struct {
+            LPWSAOVERLAPPED lpOverlapped;
+            LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
+        } Apc;
+        struct {
+            LPWSAOVERLAPPED lpOverlapped;
+            HANDLE hPort;
+            ULONG_PTR Key;
+        } Port;
+    } Parameters;
+} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;
+
+/*
+ * Winsock Function Typedefs
+ *
+ * Remember to keep this section in sync with the
+ * "Prototypes" section in winsock.h.
+ */
+#if WS_API_TYPEDEFS
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYADDR)(HWND,WS(u_int),const char*,int,int,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYNAME)(HWND,WS(u_int),const char*,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNAME)(HWND,WS(u_int),const char*,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND,WS(u_int),int,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYNAME)(HWND,WS(u_int),const char*,const char*,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYPORT)(HWND,WS(u_int),int,const char*,char*,int);
+typedef int (WINAPI *LPFN_WSAASYNCSELECT)(SOCKET,HWND,WS(u_int),LONG);
+typedef int (WINAPI *LPFN_WSACANCELASYNCREQUEST)(HANDLE);
+typedef int (WINAPI *LPFN_WSACANCELBLOCKINGCALL)(void);
+typedef int (WINAPI *LPFN_WSACLEANUP)(void);
+typedef int (WINAPI *LPFN_WSAGETLASTERROR)(void);
+typedef BOOL (WINAPI *LPFN_WSAISBLOCKING)(void);
+typedef FARPROC (WINAPI *LPFN_WSASETBLOCKINGHOOK)(FARPROC);
+typedef void (WINAPI *LPFN_WSASETLASTERROR)(int);
+typedef int (WINAPI *LPFN_WSASTARTUP)(WORD,LPWSADATA);
+typedef int (WINAPI *LPFN_WSAUNHOOKBLOCKINGHOOK)(void);
+
+typedef SOCKET (WINAPI *LPFN_ACCEPT)(SOCKET,struct WS(sockaddr)*,int*);
+typedef int (WINAPI *LPFN_BIND)(SOCKET,const struct WS(sockaddr)*,int);
+typedef int (WINAPI *LPFN_CLOSESOCKET)(SOCKET);
+typedef int (WINAPI *LPFN_CONNECT)(SOCKET,const struct WS(sockaddr)*,int);
+typedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYADDR)(const char*,int,int);
+typedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYNAME)(const char*);
+typedef int (WINAPI *LPFN_GETHOSTNAME)(char*,int);
+typedef int (WINAPI *LPFN_GETPEERNAME)(SOCKET,struct WS(sockaddr)*,int*);
+typedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNAME)(const char*);
+typedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNUMBER)(int);
+#ifdef WS_DEFINE_SELECT
+typedef int (WINAPI* LPFN_SELECT)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);
+#endif
+typedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYNAME)(const char*,const char*);
+typedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYPORT)(int,const char*);
+typedef int (WINAPI *LPFN_GETSOCKNAME)(SOCKET,struct WS(sockaddr)*,int*);
+typedef int (WINAPI *LPFN_GETSOCKOPT)(SOCKET,int,int,char*,int*);
+typedef ULONG (WINAPI *LPFN_HTONL)(ULONG);
+typedef WS(u_short) (WINAPI *LPFN_HTONS)(WS(u_short));
+typedef ULONG (WINAPI *LPFN_INET_ADDR)(const char*);
+typedef char* (WINAPI *LPFN_INET_NTOA)(struct WS(in_addr));
+typedef int (WINAPI *LPFN_IOCTLSOCKET)(SOCKET,LONG,ULONG*);
+typedef int (WINAPI *LPFN_LISTEN)(SOCKET,int);
+typedef ULONG (WINAPI *LPFN_NTOHL)(ULONG);
+typedef WS(u_short) (WINAPI *LPFN_NTOHS)(WS(u_short));
+typedef int (WINAPI *LPFN_RECV)(SOCKET,char*,int,int);
+typedef int (WINAPI *LPFN_RECVFROM)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);
+typedef int (WINAPI *LPFN_SEND)(SOCKET,const char*,int,int);
+typedef int (WINAPI *LPFN_SENDTO)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);
+typedef int (WINAPI *LPFN_SETSOCKOPT)(SOCKET,int,int,const char*,int);
+typedef int (WINAPI *LPFN_SHUTDOWN)(SOCKET,int);
+typedef SOCKET (WINAPI *LPFN_SOCKET)(int,int,int);
+#endif /* WS_API_TYPEDEFS */
+
+
+
+/*
+ * Winsock2 Prototypes
+ *
+ * Remember to keep this section in sync with the
+ * "Winsock2 Function Typedefs" section below.
+ */
+#if WS_API_PROTOTYPES
+SOCKET WINAPI WSAAccept(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR);
+INT WINAPI WSAAddressToStringA(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD);
+INT WINAPI WSAAddressToStringW(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);
+#define WSAAddressToString         WINELIB_NAME_AW(WSAAddressToString)
+BOOL WINAPI WSACloseEvent(WSAEVENT);
+int WINAPI WSAConnect(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS);
+WSAEVENT WINAPI WSACreateEvent(void);
+INT WINAPI WSADuplicateSocketA(SOCKET,DWORD,LPWSAPROTOCOL_INFOA);
+INT WINAPI WSADuplicateSocketW(SOCKET,DWORD,LPWSAPROTOCOL_INFOW);
+#define WSADuplicateSocket         WINELIB_NAME_AW(WSADuplicateSocket)
+INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD,LPWSANAMESPACE_INFOA);
+INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD,LPWSANAMESPACE_INFOW);
+#define WSAEnumNameSpaceProviders  WINELIB_NAME_AW(WSAEnumNameSpaceProviders)
+int WINAPI WSAEnumNetworkEvents(SOCKET,WSAEVENT,LPWSANETWORKEVENTS);
+int WINAPI WSAEnumProtocolsA(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD);
+int WINAPI WSAEnumProtocolsW(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD);
+#define WSAEnumProtocols           WINELIB_NAME_AW(WSAEnumProtocols)
+int WINAPI WSAEventSelect(SOCKET,WSAEVENT,LONG);
+BOOL WINAPI WSAGetOverlappedResult(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD);
+BOOL WINAPI WSAGetQOSByName(SOCKET,LPWSABUF,LPQOS);
+INT WINAPI WSAGetServiceClassInfoA(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA);
+INT WINAPI WSAGetServiceClassInfoW(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
+#define WSAGetServiceClassInfo     WINELIB_NAME_AW(WSAGetServiceClassInfo)
+INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID,LPSTR,LPDWORD);
+INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID,LPWSTR,LPDWORD);
+#define WSAGetServiceClassNameByClassId WINELIB_NAME_AW(WSAGetServiceClassNameByClassId)
+int WINAPI WSAHtonl(SOCKET,ULONG,ULONG*);
+int WINAPI WSAHtons(SOCKET,WS(u_short),WS(u_short)*);
+int WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);
+int WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);
+#define WSAInstallServiceClass     WINELIB_NAME_AW(WSAInstallServiceClass)
+int WINAPI WSAIoctl(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+SOCKET WINAPI WSAJoinLeaf(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);
+INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA,DWORD,LPHANDLE);
+INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW,DWORD,LPHANDLE);
+#define WSALookupServiceBegin      WINELIB_NAME_AW(WSALookupServiceBegin)
+INT WINAPI WSALookupServiceEnd(HANDLE);
+INT WINAPI WSALookupServiceNextA(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA);
+INT WINAPI WSALookupServiceNextW(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW);
+#define WSALookupServiceNext       WINELIB_NAME_AW(WSALookupServiceNext) 
+int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);
+int WINAPI WSANtohl(SOCKET,ULONG,ULONG*);
+int WINAPI WSANtohs(SOCKET,WS(u_short),WS(u_short)*);
+INT WINAPI WSAProviderConfigChange(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+int WINAPI WSARecv(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+int WINAPI WSARecvDisconnect(SOCKET,LPWSABUF);
+int WINAPI WSARecvFrom(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+INT WINAPI WSARemoveServiceClass(LPGUID);
+BOOL WINAPI WSAResetEvent(WSAEVENT);
+int WINAPI WSASend(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+int WINAPI WSASendDisconnect(SOCKET,LPWSABUF);
+int WINAPI WSASendTo(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+BOOL WINAPI WSASetEvent(WSAEVENT);
+INT WINAPI WSASetServiceA(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD);
+INT WINAPI WSASetServiceW(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
+#define WSASetService   WINELIB_NAME_AW(WSASetService)
+SOCKET WINAPI WSASocketA(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD);
+SOCKET WINAPI WSASocketW(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD);
+#define WSASocket WINELIB_NAME_AW(WSASocket)
+INT WINAPI WSAStringToAddressA(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);
+INT WINAPI WSAStringToAddressW(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT);
+#define WSAStringToAddress WINELIB_NAME_AW(WSAStringToAddress)
+DWORD WINAPI WSAWaitForMultipleEvents(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL);
+#endif /* WS_API_PROTOTYPES */
+
+
+
+/*
+ * Winsock2 Function Typedefs
+ *
+ * Remember to keep this section in sync with the
+ * "Winsock2 Prototypes" section above.
+ */
+#if WS_API_TYPEDEFS
+typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR);
+typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD);
+typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);
+#define LPFN_WSAADDRESSTOSTRING    WINELIB_NAME_AW(LPFN_WSAADDRESSTOSTRING)
+typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT);
+typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS);
+typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void);
+typedef INT (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET,DWORD,LPWSAPROTOCOL_INFOA);
+typedef INT (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW);
+#define LPFN_WSADUPLICATESOCKET    WINELIB_NAME_AW(LPFN_WSADUPLICATESOCKET)
+typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD,LPWSANAMESPACE_INFOA);
+typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD,LPWSANAMESPACE_INFOW);
+#define LPFN_WSAENUMNAMESPACEPROVIDERS WINELIB_NAME_AW(LPFN_WSAENUMNAMESPACEPROVIDERS)
+typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS);
+typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD);
+typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD);
+#define LPFN_WSAENUMPROTOCOLS      WINELIB_NAME_AW(LPFN_WSAENUMPROTOCOLS)
+typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET,WSAEVENT,LONG);
+typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD);
+typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
+#define LPFN_LPFNWSAGETSERVICECLASSINFO WINELIB_NAME_AW(LPFN_LPFNWSAGETSERVICECLASSINFO)
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID,LPSTR,LPDWORD);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID,LPWSTR,LPDWORD);
+#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID WINELIB_NAME_AW(LPFN_WSAGETSERVICECLASSNAMEBYCLASSID)
+typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET,ULONG,ULONG*);
+typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET,WS(u_short),WS(u_short)*);
+typedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA);
+typedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW);
+typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSAJOINLEAF)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA,DWORD,LPHANDLE);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW,DWORD,LPHANDLE);
+#define LPFN_WSALOOKUPSERVICEBEGIN WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICEBEGIN);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW);
+#define LPFN_WSALOOKUPSERVICENEXT WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICENEXT)
+typedef int (WINAPI *LPFN_WSANSPIOCTL)(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);
+typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET,ULONG,ULONG*);
+typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET,WS(u_short),WS(u_short)*);
+typedef INT (WINAPI *LPFN_WSAPROVIDERCONFIGCHANGE)(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSARECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET,LPWSABUF);
+typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID);
+typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT);
+typedef int (WINAPI *LPFN_WSASEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET,LPWSABUF);
+typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT);
+typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD);
+typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
+#define LPFN_WSASETSERVICE WINELIB_NAME_AW(LPFN_WSASETSERVICE)
+typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD);
+typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD);
+typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);
+typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);
+#define LPFN_WSASOCKET             WINELIB_NAME_AW(LPFN_WSASOCKET)
+#define LPFN_WSASTRINGTOADDRESS    WINELIB_NAME_AW(LPFN_WSASTRINGTOADDRESS)
+typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL);
+#endif /* WS_API_TYPEDEFS */
+
+
+/* Condition function return values */
+#define CF_ACCEPT       0x0000
+#define CF_REJECT       0x0001
+#define CF_DEFER        0x0002
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef WS
+#undef WS_API_PROTOTYPES
+#undef WS_API_TYPEDEFS
+
+#endif /* __WINSOCK2API__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h
new file mode 100644
index 0000000..fae9a3f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h
@@ -0,0 +1,1822 @@
+/* Definitions for printing
+ *
+ * Copyright 1998 Huw Davies, Andreas Mohr
+ *
+ * Portions Copyright (c) 1999 Corel Corporation
+ *                             (Paul Quinn, Albert Den Haan)
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSPOOL_H
+#define __WINE_WINSPOOL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DEFINES */
+
+#define PRINTER_ATTRIBUTE_QUEUED            0x00000001
+#define PRINTER_ATTRIBUTE_DIRECT            0x00000002
+#define PRINTER_ATTRIBUTE_DEFAULT           0x00000004
+#define PRINTER_ATTRIBUTE_SHARED            0x00000008
+#define PRINTER_ATTRIBUTE_NETWORK           0x00000010
+#define PRINTER_ATTRIBUTE_HIDDEN            0x00000020
+#define PRINTER_ATTRIBUTE_LOCAL             0x00000040
+#define PRINTER_ATTRIBUTE_ENABLE_DEVQ       0x00000080
+#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS   0x00000100
+#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
+#define PRINTER_ATTRIBUTE_WORK_OFFLINE      0x00000400
+#define PRINTER_ATTRIBUTE_ENABLE_BIDI       0x00000800
+#define PRINTER_ATTRIBUTE_RAW_ONLY          0x00001000
+#define PRINTER_ATTRIBUTE_PUBLISHED         0x00002000
+
+#define PRINTER_CONTROL_PAUSE      1
+#define PRINTER_CONTROL_RESUME     2
+#define PRINTER_CONTROL_PURGE      3
+#define PRINTER_CONTROL_SET_STATUS 4
+
+#define PRINTER_ENUM_DEFAULT     0x00000001
+#define PRINTER_ENUM_LOCAL       0x00000002
+#define PRINTER_ENUM_CONNECTIONS 0x00000004
+#define PRINTER_ENUM_FAVORITE    0x00000004
+#define PRINTER_ENUM_NAME        0x00000008
+#define PRINTER_ENUM_REMOTE      0x00000010
+#define PRINTER_ENUM_SHARED      0x00000020
+#define PRINTER_ENUM_NETWORK     0x00000040
+
+#define PRINTER_ENUM_EXPAND      0x00004000
+#define PRINTER_ENUM_CONTAINER   0x00008000
+
+#define PRINTER_ENUM_ICONMASK    0x00ff0000
+#define PRINTER_ENUM_ICON1       0x00010000
+#define PRINTER_ENUM_ICON2       0x00020000
+#define PRINTER_ENUM_ICON3       0x00040000
+#define PRINTER_ENUM_ICON4       0x00080000
+#define PRINTER_ENUM_ICON5       0x00100000
+#define PRINTER_ENUM_ICON6       0x00200000
+#define PRINTER_ENUM_ICON7       0x00400000
+#define PRINTER_ENUM_ICON8       0x00800000
+#define PRINTER_ENUM_HIDE        0x01000000
+
+
+/* various printer statuses */
+#define PRINTER_STATUS_PAUSED            0x00000001
+#define PRINTER_STATUS_ERROR             0x00000002
+#define PRINTER_STATUS_PENDING_DELETION  0x00000004
+#define PRINTER_STATUS_PAPER_JAM         0x00000008
+#define PRINTER_STATUS_PAPER_OUT         0x00000010
+#define PRINTER_STATUS_MANUAL_FEED       0x00000020
+#define PRINTER_STATUS_PAPER_PROBLEM     0x00000040
+#define PRINTER_STATUS_OFFLINE           0x00000080
+#define PRINTER_STATUS_IO_ACTIVE         0x00000100
+#define PRINTER_STATUS_BUSY              0x00000200
+#define PRINTER_STATUS_PRINTING          0x00000400
+#define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800
+#define PRINTER_STATUS_NOT_AVAILABLE     0x00001000
+#define PRINTER_STATUS_WAITING           0x00002000
+#define PRINTER_STATUS_PROCESSING        0x00004000
+#define PRINTER_STATUS_INITIALIZING      0x00008000
+#define PRINTER_STATUS_WARMING_UP        0x00010000
+#define PRINTER_STATUS_TONER_LOW         0x00020000
+#define PRINTER_STATUS_NO_TONER          0x00040000
+#define PRINTER_STATUS_PAGE_PUNT         0x00080000
+#define PRINTER_STATUS_USER_INTERVENTION 0x00100000
+#define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000
+#define PRINTER_STATUS_DOOR_OPEN         0x00400000
+#define PRINTER_STATUS_SERVER_UNKNOWN    0x00800000
+#define PRINTER_STATUS_POWER_SAVE        0x01000000
+#define PRINTER_STATUS_SERVER_OFFLINE    0x02000000
+#define PRINTER_STATUS_DRIVER_UPDATE_NEEDED 0x04000000
+
+#define NO_PRIORITY  0
+#define MAX_PRIORITY 99
+#define MIN_PRIORITY 1
+#define DEF_PRIORITY 1
+
+#define JOB_CONTROL_PAUSE             1
+#define JOB_CONTROL_RESUME            2
+#define JOB_CONTROL_CANCEL            3
+#define JOB_CONTROL_RESTART           4
+#define JOB_CONTROL_DELETE            5
+#define JOB_CONTROL_SENT_TO_PRINTER   6
+#define JOB_CONTROL_LAST_PAGE_EJECTED 7
+
+#define JOB_STATUS_PAUSED       0x0001
+#define JOB_STATUS_ERROR        0x0002
+#define JOB_STATUS_DELETING     0x0004
+#define JOB_STATUS_SPOOLING     0x0008
+#define JOB_STATUS_PRINTING     0x0010
+#define JOB_STATUS_OFFLINE      0x0020
+#define JOB_STATUS_PAPEROUT     0x0040
+#define JOB_STATUS_PRINTED      0x0080
+#define JOB_STATUS_DELETED      0x0100
+#define JOB_STATUS_BLOCKED_DEVQ 0x0200
+#define JOB_STATUS_USER_INTERVENTION 0x0400
+
+#define JOB_POSITION_UNSPECIFIED 1
+
+#define DI_CHANNEL 1
+#define DI_READ_SPOOL_JOB 3
+
+#define FORM_USER    0
+#define FORM_BUILTIN 1
+#define FORM_PRINTER 2
+
+#define PORT_TYPE_WRITE        1
+#define PORT_TYPE_READ         2
+#define PORT_TYPE_REDIRECTED   4
+#define PORT_TYPE_NET_ATTACHED 8
+
+#define PORT_STATUS_TYPE_ERROR   1
+#define PORT_STATUS_TYPE_WARNING 2
+#define PORT_STATUS_TYPE_INFO    3
+
+#define PORT_STATUS_OFFLINE           1
+#define PORT_STATUS_PAPER_JAM         2
+#define PORT_STATUS_PAPER_OUT         3
+#define PORT_STATUS_OUTPUT_BIN_FULL   4
+#define PORT_STATUS_PAPER_PROBLEM     5
+#define PORT_STATUS_NO_TONER          6
+#define PORT_STATUS_DOOR_OPEN         7
+#define PORT_STATUS_USER_INTERVENTION 8
+#define PORT_STATUS_OUT_OF_MEMORY     9
+#define PORT_STATUS_TONER_LOW         10
+#define PORT_STATUS_WARMING_UP        11
+#define PORT_STATUS_POWER_SAVE        12
+
+#define PRINTER_NOTIFY_TYPE 0
+#define JOB_NOTIFY_TYPE     1
+
+#define PRINTER_NOTIFY_FIELD_SERVER_NAME     0x00
+#define PRINTER_NOTIFY_FIELD_PRINTER_NAME    0x01
+#define PRINTER_NOTIFY_FIELD_SHARE_NAME      0x02
+#define PRINTER_NOTIFY_FIELD_PORT_NAME       0x03
+#define PRINTER_NOTIFY_FIELD_DRIVER_NAME     0x04
+#define PRINTER_NOTIFY_FIELD_COMMENT         0x05
+#define PRINTER_NOTIFY_FIELD_LOCATION        0x06
+#define PRINTER_NOTIFY_FIELD_DEVMODE         0x07
+#define PRINTER_NOTIFY_FIELD_SEPFILE         0x08
+#define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 0x09
+#define PRINTER_NOTIFY_FIELD_PARAMETERS      0x0a
+#define PRINTER_NOTIFY_FIELD_DATATYPE        0x0b
+#define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c
+#define PRINTER_NOTIFY_FIELD_ATTRIBUTES      0x0d
+#define PRINTER_NOTIFY_FIELD_PRIORITY        0x0e
+#define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 0x0f
+#define PRINTER_NOTIFY_FIELD_START_TIME      0x10
+#define PRINTER_NOTIFY_FIELD_UNTIL_TIME      0x11
+#define PRINTER_NOTIFY_FIELD_STATUS          0x12
+#define PRINTER_NOTIFY_FIELD_STATUS_STRING   0x13
+#define PRINTER_NOTIFY_FIELD_CJOBS           0x14
+#define PRINTER_NOTIFY_FIELD_AVERAGE_PPM     0x15
+#define PRINTER_NOTIFY_FIELD_TOTAL_PAGES     0x16
+#define PRINTER_NOTIFY_FIELD_PAGES_PRINTED   0x17
+#define PRINTER_NOTIFY_FIELD_TOTAL_BYTES     0x18
+#define PRINTER_NOTIFY_FIELD_BYTES_PRINTED   0x19
+
+#define JOB_NOTIFY_FIELD_PRINTER_NAME    0x00
+#define JOB_NOTIFY_FIELD_MACHINE_NAME    0x01
+#define JOB_NOTIFY_FIELD_PORT_NAME       0x02
+#define JOB_NOTIFY_FIELD_USER_NAME       0x03
+#define JOB_NOTIFY_FIELD_NOTIFY_NAME     0x04
+#define JOB_NOTIFY_FIELD_DATATYPE        0x05
+#define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 0x06
+#define JOB_NOTIFY_FIELD_PARAMETERS      0x07
+#define JOB_NOTIFY_FIELD_DRIVER_NAME     0x08
+#define JOB_NOTIFY_FIELD_DEVMODE         0x09
+#define JOB_NOTIFY_FIELD_STATUS          0x0a
+#define JOB_NOTIFY_FIELD_STATUS_STRING   0x0b
+#define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c
+#define JOB_NOTIFY_FIELD_DOCUMENT        0x0d
+#define JOB_NOTIFY_FIELD_PRIORITY        0x0e
+#define JOB_NOTIFY_FIELD_POSITION        0x0f
+#define JOB_NOTIFY_FIELD_SUBMITTED       0x10
+#define JOB_NOTIFY_FIELD_START_TIME      0x11
+#define JOB_NOTIFY_FIELD_UNTIL_TIME      0x12
+#define JOB_NOTIFY_FIELD_TIME            0x13
+#define JOB_NOTIFY_FIELD_TOTAL_PAGES     0x14
+#define JOB_NOTIFY_FIELD_PAGES_PRINTED   0x15
+#define JOB_NOTIFY_FIELD_TOTAL_BYTES     0x16
+#define JOB_NOTIFY_FIELD_BYTES_PRINTED   0x17
+
+#define PRINTER_NOTIFY_OPTIONS_REFRESH   1
+#define PRINTER_NOTIFY_INFO_DISCARDED    1
+
+#define PRINTER_CHANGE_ADD_PRINTER               0x00000001
+#define PRINTER_CHANGE_SET_PRINTER               0x00000002
+#define PRINTER_CHANGE_DELETE_PRINTER            0x00000004
+#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008
+#define PRINTER_CHANGE_PRINTER                   0x000000ff
+#define PRINTER_CHANGE_ADD_JOB                   0x00000100
+#define PRINTER_CHANGE_SET_JOB                   0x00000200
+#define PRINTER_CHANGE_DELETE_JOB                0x00000400
+#define PRINTER_CHANGE_WRITE_JOB                 0x00000800
+#define PRINTER_CHANGE_JOB                       0x0000ff00
+#define PRINTER_CHANGE_ADD_FORM                  0x00010000
+#define PRINTER_CHANGE_SET_FORM                  0x00020000
+#define PRINTER_CHANGE_DELETE_FORM               0x00040000
+#define PRINTER_CHANGE_FORM                      0x00070000
+#define PRINTER_CHANGE_ADD_PORT                  0x00100000
+#define PRINTER_CHANGE_CONFIGURE_PORT            0x00200000
+#define PRINTER_CHANGE_DELETE_PORT               0x00400000
+#define PRINTER_CHANGE_PORT                      0x00700000
+#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR       0x01000000
+#define PRINTER_CHANGE_DELETE_PRINTER_PROCESSOR  0x04000000
+#define PRINTER_CHANGE_PRINT_PROCESSOR           0x07000000
+#define PRINTER_CHANGE_ADD_PRINTER_DRIVER        0x10000000
+#define PRINTER_CHANGE_SET_PRINTER_DRIVER        0x20000000
+#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER     0x40000000
+#define PRINTER_CHANGE_PRINTER_DRIVER            0x70000000
+#define PRINTER_CHANGE_TIMEOUT                   0x80000000
+#define PRINTER_CHANGE_ALL                       0x7777ffff
+
+#define PRINTER_ERROR_INFORMATION   0x80000000
+#define PRINTER_ERROR_WARNING       0x40000000
+#define PRINTER_ERROR_SEVERE        0x20000000
+
+#define PRINTER_ERROR_OUTODPAPER    0x00000001
+#define PRINTER_ERROR_JAM           0x00000002
+#define PRINTER_ERROR_OUTOFTONER    0x00000004
+
+/* Access Rights for Printserver, Printers and Printjobs */
+#define SERVER_ACCESS_ADMINISTER    0x00000001
+#define SERVER_ACCESS_ENUMERATE     0x00000002
+#define SERVER_READ        (STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE)
+#define SERVER_WRITE       (STANDARD_RIGHTS_WRITE | \
+                            SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
+#define SERVER_EXECUTE     (STANDARD_RIGHTS_EXECUTE |  SERVER_ACCESS_ENUMERATE)
+#define SERVER_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | \
+                            SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
+
+#define PRINTER_ACCESS_ADMINISTER   0x00000004
+#define PRINTER_ACCESS_USE          0x00000008
+#define PRINTER_READ        (STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE)
+#define PRINTER_WRITE       (STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE)
+#define PRINTER_EXECUTE     (STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE)
+#define PRINTER_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | \
+                             PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE)
+
+#define JOB_ACCESS_ADMINISTER       0x00000010
+#define JOB_READ            (STANDARD_RIGHTS_READ | JOB_ACCESS_ADMINISTER)
+#define JOB_WRITE           (STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER)
+#define JOB_EXECUTE         (STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER)
+#define JOB_ALL_ACCESS      (STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER)
+
+
+/* Flags for printer drivers */
+#define DRIVER_KERNELMODE       0x00000001
+#define DRIVER_USERMODE         0x00000002
+
+#define APD_STRICT_UPGRADE      0x00000001
+#define APD_STRICT_DOWNGRADE    0x00000002
+#define APD_COPY_ALL_FILES      0x00000004
+#define APD_COPY_NEW_FILES      0x00000008
+#define APD_COPY_FROM_DIRECTORY 0x00000010
+
+#define DPD_DELETE_UNUSED_FILES     0x00000001
+#define DPD_DELETE_SPECIFIC_VERSION 0x00000002
+#define DPD_DELETE_ALL_FILES        0x00000004
+
+/* dwAction for PRINTER_INFO_7 */
+#define DSPRINT_PUBLISH     0x00000001
+#define DSPRINT_UPDATE      0x00000002
+#define DSPRINT_UNPUBLISH   0x00000004
+#define DSPRINT_REPUBLISH   0x00000008
+#define DSPRINT_PENDING     0x80000000
+
+/* ##################################### */
+
+/* TYPES */
+typedef struct _PRINTER_DEFAULTSA {
+  LPSTR        pDatatype;
+  LPDEVMODEA pDevMode;
+  ACCESS_MASK  DesiredAccess;
+} PRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
+
+typedef struct _PRINTER_DEFAULTSW {
+  LPWSTR       pDatatype;
+  LPDEVMODEW pDevMode;
+  ACCESS_MASK  DesiredAccess;
+} PRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
+
+DECL_WINELIB_TYPE_AW(PRINTER_DEFAULTS)
+DECL_WINELIB_TYPE_AW(LPPRINTER_DEFAULTS)
+
+typedef struct _DRIVER_INFO_1A {
+  LPSTR     pName;
+} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
+
+typedef struct _DRIVER_INFO_1W {
+  LPWSTR    pName;
+} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_1)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_1)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_1)
+
+typedef struct _DRIVER_INFO_2A {
+  DWORD     cVersion;
+  LPSTR     pName;
+  LPSTR     pEnvironment;
+  LPSTR     pDriverPath;
+  LPSTR     pDataFile;
+  LPSTR     pConfigFile;
+} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
+
+typedef struct _DRIVER_INFO_2W {
+  DWORD     cVersion;
+  LPWSTR    pName;
+  LPWSTR    pEnvironment;
+  LPWSTR    pDriverPath;
+  LPWSTR    pDataFile;
+  LPWSTR    pConfigFile;
+} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_2)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_2)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_2)
+
+typedef struct _DRIVER_INFO_3A {
+  DWORD cVersion;
+  LPSTR pName;
+  LPSTR pEnvironment;
+  LPSTR pDriverPath;
+  LPSTR pDataFile;
+  LPSTR pConfigFile;
+  LPSTR pHelpFile;
+  LPSTR pDependentFiles;
+  LPSTR pMonitorName;
+  LPSTR pDefaultDataType;
+} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
+
+typedef struct _DRIVER_INFO_3W {
+  DWORD cVersion;
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDriverPath;
+  LPWSTR pDataFile;
+  LPWSTR pConfigFile;
+  LPWSTR pHelpFile;
+  LPWSTR pDependentFiles;
+  LPWSTR pMonitorName;
+  LPWSTR pDefaultDataType;
+} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_3)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_3)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_3)
+
+typedef struct _DRIVER_INFO_4A {
+  DWORD cVersion;
+  LPSTR pName;
+  LPSTR pEnvironment;
+  LPSTR pDriverPath;
+  LPSTR pDataFile;
+  LPSTR pConfigFile;
+  LPSTR pHelpFile;
+  LPSTR pDependentFiles;
+  LPSTR pMonitorName;
+  LPSTR pDefaultDataType;
+  LPSTR pszzPreviousNames;
+} DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A;
+
+typedef struct _DRIVER_INFO_4W {
+  DWORD cVersion;
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDriverPath;
+  LPWSTR pDataFile;
+  LPWSTR pConfigFile;
+  LPWSTR pHelpFile;
+  LPWSTR pDependentFiles;
+  LPWSTR pMonitorName;
+  LPWSTR pDefaultDataType;
+  LPWSTR pszzPreviousNames;
+} DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_4)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_4)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_4)
+
+
+typedef struct _DRIVER_INFO_5A {
+  DWORD cVersion;
+  LPSTR pName;
+  LPSTR pEnvironment;
+  LPSTR pDriverPath;
+  LPSTR pDataFile;
+  LPSTR pConfigFile;
+  DWORD dwDriverAttributes;
+  DWORD dwConfigVersion;
+  DWORD dwDriverVersion;
+} DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A;
+
+typedef struct _DRIVER_INFO_5W {
+  DWORD  cVersion;
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDriverPath;
+  LPWSTR pDataFile;
+  LPWSTR pConfigFile;
+  DWORD  dwDriverAttributes;
+  DWORD  dwConfigVersion;
+  DWORD  dwDriverVersion;
+} DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_5)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_5)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_5)
+
+typedef struct _DRIVER_INFO_6A {
+  DWORD     cVersion;
+  LPSTR     pName;
+  LPSTR     pEnvironment;
+  LPSTR     pDriverPath;
+  LPSTR     pDataFile;
+  LPSTR     pConfigFile;
+  LPSTR     pHelpFile;
+  LPSTR     pDependentFiles;
+  LPSTR     pMonitorName;
+  LPSTR     pDefaultDataType;
+  LPSTR     pszzPreviousNames;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  LPSTR     pszMfgName;
+  LPSTR     pszOEMUrl;
+  LPSTR     pszHardwareID;
+  LPSTR     pszProvider;
+} DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A;
+
+typedef struct _DRIVER_INFO_6W {
+  DWORD     cVersion;
+  LPWSTR    pName;
+  LPWSTR    pEnvironment;
+  LPWSTR    pDriverPath;
+  LPWSTR    pDataFile;
+  LPWSTR    pConfigFile;
+  LPWSTR    pHelpFile;
+  LPWSTR    pDependentFiles;
+  LPWSTR    pMonitorName;
+  LPWSTR    pDefaultDataType;
+  LPWSTR    pszzPreviousNames;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  LPWSTR    pszMfgName;
+  LPWSTR    pszOEMUrl;
+  LPWSTR    pszHardwareID;
+  LPWSTR    pszProvider;
+} DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_6)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_6)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_6)
+
+/* DRIVER_INFO_7 is not defined in native winspool.h and not found in the www */
+
+typedef struct _DRIVER_INFO_8A {
+  DWORD     cVersion;
+  LPSTR     pName;
+  LPSTR     pEnvironment;
+  LPSTR     pDriverPath;
+  LPSTR     pDataFile;
+  LPSTR     pConfigFile;
+  LPSTR     pHelpFile;
+  LPSTR     pDependentFiles;
+  LPSTR     pMonitorName;
+  LPSTR     pDefaultDataType;
+  LPSTR     pszzPreviousNames;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  LPSTR     pszMfgName;
+  LPSTR     pszOEMUrl;
+  LPSTR     pszHardwareID;
+  LPSTR     pszProvider;
+  LPSTR     pszPrintProcessor;
+  LPSTR     pszVendorSetup;
+  LPSTR     pszzColorProfiles;
+  LPSTR     pszInfPath;
+  DWORD     dwPrinterDriverAttributes;
+  LPSTR     pszzCoreDriverDependencies;
+  FILETIME  ftMinInboxDriverVerDate;
+  DWORDLONG dwlMinInboxDriverVerVersion;
+} DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;
+
+typedef struct _DRIVER_INFO_8W {
+  DWORD     cVersion;
+  LPWSTR    pName;
+  LPWSTR    pEnvironment;
+  LPWSTR    pDriverPath;
+  LPWSTR    pDataFile;
+  LPWSTR    pConfigFile;
+  LPWSTR    pHelpFile;
+  LPWSTR    pDependentFiles;
+  LPWSTR    pMonitorName;
+  LPWSTR    pDefaultDataType;
+  LPWSTR    pszzPreviousNames;
+  FILETIME  ftDriverDate;
+  DWORDLONG dwlDriverVersion;
+  LPWSTR    pszMfgName;
+  LPWSTR    pszOEMUrl;
+  LPWSTR    pszHardwareID;
+  LPWSTR    pszProvider;
+  LPWSTR    pszPrintProcessor;
+  LPWSTR    pszVendorSetup;
+  LPWSTR    pszzColorProfiles;
+  LPWSTR    pszInfPath;
+  DWORD     dwPrinterDriverAttributes;
+  LPWSTR    pszzCoreDriverDependencies;
+  FILETIME  ftMinInboxDriverVerDate;
+  DWORDLONG dwlMinInboxDriverVerVersion;
+} DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_8)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_8)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_8)
+
+
+typedef struct _PRINTER_INFO_1A {
+  DWORD   Flags;
+  LPSTR   pDescription;
+  LPSTR   pName;
+  LPSTR   pComment;
+} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
+
+typedef struct _PRINTER_INFO_1W {
+  DWORD   Flags;
+  LPWSTR  pDescription;
+  LPWSTR  pName;
+  LPWSTR  pComment;
+} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_1)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_1)
+
+/* FIXME: winspool.h declares some structure members with the name Status.
+ * unfortunately <X11/ICE/ICElib.h> #defines Status to the type 'int'
+ * therefore the following hack */
+#ifndef Status
+
+typedef struct _PRINTER_INFO_2A {
+  LPSTR     pServerName;
+  LPSTR     pPrinterName;
+  LPSTR     pShareName;
+  LPSTR     pPortName;
+  LPSTR     pDriverName;
+  LPSTR     pComment;
+  LPSTR     pLocation;
+  LPDEVMODEA pDevMode;
+  LPSTR     pSepFile;
+  LPSTR     pPrintProcessor;
+  LPSTR     pDatatype;
+  LPSTR     pParameters;
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  DWORD   Attributes;
+  DWORD   Priority;
+  DWORD   DefaultPriority;
+  DWORD   StartTime;
+  DWORD   UntilTime;
+  DWORD   Status;
+  DWORD   cJobs;
+  DWORD   AveragePPM;
+} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
+
+typedef struct _PRINTER_INFO_2W {
+  LPWSTR    pServerName;
+  LPWSTR    pPrinterName;
+  LPWSTR    pShareName;
+  LPWSTR    pPortName;
+  LPWSTR    pDriverName;
+  LPWSTR    pComment;
+  LPWSTR    pLocation;
+  LPDEVMODEW pDevMode;
+  LPWSTR    pSepFile;
+  LPWSTR    pPrintProcessor;
+  LPWSTR    pDatatype;
+  LPWSTR    pParameters;
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  DWORD   Attributes;
+  DWORD   Priority;
+  DWORD   DefaultPriority;
+  DWORD   StartTime;
+  DWORD   UntilTime;
+  DWORD   Status;
+  DWORD   cJobs;
+  DWORD   AveragePPM;
+} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_2)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_2)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_2)
+
+typedef struct _PRINTER_INFO_3 {
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+} PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;
+
+typedef struct _PRINTER_INFO_4A {
+  LPSTR     pPrinterName;
+  LPSTR     pServerName;
+  DWORD     Attributes;
+} PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;
+
+typedef struct _PRINTER_INFO_4W {
+  LPWSTR     pPrinterName;
+  LPWSTR     pServerName;
+  DWORD     Attributes;
+} PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_4)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_4)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_4)
+
+typedef struct _PRINTER_INFO_5A {
+  LPSTR     pPrinterName;
+  LPSTR     pPortName;
+  DWORD     Attributes;
+  DWORD     DeviceNotSelectedTimeout;
+  DWORD     TransmissionRetryTimeout;
+} PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;
+
+typedef struct _PRINTER_INFO_5W {
+  LPWSTR    pPrinterName;
+  LPWSTR    pPortName;
+  DWORD     Attributes;
+  DWORD     DeviceNotSelectedTimeout;
+  DWORD     TransmissionRetryTimeout;
+} PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_5)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_5)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_5)
+
+typedef struct _PRINTER_INFO_6 {
+  DWORD dwStatus;
+} PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;
+
+typedef struct _PRINTER_INFO_7A {
+  LPSTR     pszObjectGUID;
+  DWORD     dwAction;
+} PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A;
+
+typedef struct _PRINTER_INFO_7W {
+  LPWSTR    pszObjectGUID;
+  DWORD     dwAction;
+} PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_7)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_7)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_7)
+
+typedef struct _PRINTER_INFO_8A {
+  LPDEVMODEA pDevMode;
+} PRINTER_INFO_8A, *PPRINTER_INFO_8A, *LPPRINTER_INFO_8A;
+
+typedef struct _PRINTER_INFO_8W {
+  LPDEVMODEW pDevMode;
+} PRINTER_INFO_8W, *PPRINTER_INFO_8W, *LPPRINTER_INFO_8W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_8)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_8)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_8)
+
+typedef struct _PRINTER_INFO_9A {
+  LPDEVMODEA pDevMode;
+} PRINTER_INFO_9A, *PPRINTER_INFO_9A, *LPPRINTER_INFO_9A;
+
+typedef struct _PRINTER_INFO_9W {
+  LPDEVMODEW pDevMode;
+} PRINTER_INFO_9W, *PPRINTER_INFO_9W, *LPPRINTER_INFO_9W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_9)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_9)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_9)
+
+
+typedef struct _JOB_INFO_1A {
+  DWORD JobId;
+  LPSTR pPrinterName;
+  LPSTR pMachineName;
+  LPSTR pUserName;
+  LPSTR pDocument;
+  LPSTR pDatatype;
+  LPSTR pStatus;
+  DWORD Status;
+  DWORD Priority;
+  DWORD Position;
+  DWORD TotalPages;
+  DWORD PagesPrinted;
+  SYSTEMTIME Submitted;
+} JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
+
+typedef struct _JOB_INFO_1W {
+  DWORD JobId;
+  LPWSTR pPrinterName;
+  LPWSTR pMachineName;
+  LPWSTR pUserName;
+  LPWSTR pDocument;
+  LPWSTR pDatatype;
+  LPWSTR pStatus;
+  DWORD Status;
+  DWORD Priority;
+  DWORD Position;
+  DWORD TotalPages;
+  DWORD PagesPrinted;
+  SYSTEMTIME Submitted;
+} JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(JOB_INFO_1)
+DECL_WINELIB_TYPE_AW(PJOB_INFO_1)
+DECL_WINELIB_TYPE_AW(LPJOB_INFO_1)
+
+typedef struct _JOB_INFO_2A {
+  DWORD JobId;
+  LPSTR pPrinterName;
+  LPSTR pMachineName;
+  LPSTR pUserName;
+  LPSTR pDocument;
+  LPSTR pNotifyName;
+  LPSTR pDatatype;
+  LPSTR pPrintProcessor;
+  LPSTR pParameters;
+  LPSTR pDriverName;
+  LPDEVMODEA pDevMode;
+  LPSTR pStatus;
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  DWORD Status;
+  DWORD Priority;
+  DWORD Position;
+  DWORD StartTime;
+  DWORD UntilTime;
+  DWORD TotalPages;
+  DWORD Size;
+  SYSTEMTIME Submitted;
+  DWORD Time;
+  DWORD PagesPrinted;
+} JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
+
+typedef struct _JOB_INFO_2W {
+  DWORD JobId;
+  LPWSTR pPrinterName;
+  LPWSTR pMachineName;
+  LPWSTR pUserName;
+  LPWSTR pDocument;
+  LPWSTR pNotifyName;
+  LPWSTR pDatatype;
+  LPWSTR pPrintProcessor;
+  LPWSTR pParameters;
+  LPWSTR pDriverName;
+  LPDEVMODEW pDevMode;
+  LPWSTR pStatus;
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  DWORD Status;
+  DWORD Priority;
+  DWORD Position;
+  DWORD StartTime;
+  DWORD UntilTime;
+  DWORD TotalPages;
+  DWORD Size;
+  SYSTEMTIME Submitted;
+  DWORD Time;
+  DWORD PagesPrinted;
+} JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(JOB_INFO_2)
+DECL_WINELIB_TYPE_AW(PJOB_INFO_2)
+DECL_WINELIB_TYPE_AW(LPJOB_INFO_2)
+
+typedef struct _JOB_INFO_3 {
+  DWORD JobId;
+  DWORD NextJobId;
+  DWORD Reserved;
+} JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;
+
+typedef struct _ADDJOB_INFO_1A {
+  LPSTR Path;
+  DWORD JobId;
+} ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
+
+typedef struct _ADDJOB_INFO_1W {
+  LPWSTR Path;
+  DWORD  JobId;
+} ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(ADDJOB_INFO_1)
+DECL_WINELIB_TYPE_AW(PADDJOB_INFO_1)
+DECL_WINELIB_TYPE_AW(LPADDJOB_INFO_1)
+
+typedef struct _DOC_INFO_1A {
+  LPSTR pDocName;
+  LPSTR pOutputFile;
+  LPSTR pDatatype;
+} DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
+
+typedef struct _DOC_INFO_1W {
+  LPWSTR pDocName;
+  LPWSTR pOutputFile;
+  LPWSTR pDatatype;
+} DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(DOC_INFO_1)
+DECL_WINELIB_TYPE_AW(PDOC_INFO_1)
+DECL_WINELIB_TYPE_AW(LPDOC_INFO_1)
+
+typedef struct _DOC_INFO_2A {
+  LPSTR pDocName;
+  LPSTR pOutputFile;
+  LPSTR pDatatype;
+  DWORD dwMode;
+  DWORD JobId;
+} DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;
+
+typedef struct _DOC_INFO_2W {
+  LPWSTR pDocName;
+  LPWSTR pOutputFile;
+  LPWSTR pDatatype;
+  DWORD dwMode;
+  DWORD JobId;
+} DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(DOC_INFO_2)
+DECL_WINELIB_TYPE_AW(PDOC_INFO_2)
+DECL_WINELIB_TYPE_AW(LPDOC_INFO_2)
+
+typedef struct _FORM_INFO_1A {
+  DWORD Flags;
+  LPSTR pName;
+  SIZEL Size;
+  RECTL ImageableArea;
+} FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
+
+typedef struct _FORM_INFO_1W {
+  DWORD Flags;
+  LPWSTR pName;
+  SIZEL Size;
+  RECTL ImageableArea;
+} FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(FORM_INFO_1)
+DECL_WINELIB_TYPE_AW(PFORM_INFO_1)
+DECL_WINELIB_TYPE_AW(LPFORM_INFO_1)
+
+typedef struct _FORM_INFO_2A {
+  DWORD  Flags;
+  LPSTR  pName;
+  SIZEL  Size;
+  RECTL  ImageableArea;
+  LPCSTR pKeyword;
+  DWORD  StringType;
+  LPSTR  pMuiDll;
+  DWORD  dwResourceId;
+  LPSTR  pDisplayName;
+  LANGID wLangId;
+} FORM_INFO_2A, *PFORM_INFO_2A, *LPFORM_INFO_2A;
+
+typedef struct _FORM_INFO_2W {
+  DWORD  Flags;
+  LPWSTR pName;
+  SIZEL  Size;
+  RECTL  ImageableArea;
+  LPCSTR pKeyword;
+  DWORD  StringType;
+  LPWSTR pMuiDll;
+  DWORD  dwResourceId;
+  LPWSTR pDisplayName;
+  LANGID wLangId;
+} FORM_INFO_2W, *PFORM_INFO_2W, *LPFORM_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(FORM_INFO_2)
+DECL_WINELIB_TYPE_AW(PFORM_INFO_2)
+DECL_WINELIB_TYPE_AW(LPFORM_INFO_2)
+
+typedef struct _PRINTPROCESSOR_INFO_1A {
+  LPSTR pName;
+} PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A,
+  *LPPRINTPROCESSOR_INFO_1A;
+
+typedef struct _PRINTPROCESSOR_INFO_1W {
+  LPWSTR pName;
+} PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W,
+  *LPPRINTPROCESSOR_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PRINTPROCESSOR_INFO_1)
+DECL_WINELIB_TYPE_AW(PPRINTPROCESSOR_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPRINTPROCESSOR_INFO_1)
+
+typedef struct _PORT_INFO_1A {
+  LPSTR pName;
+} PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
+
+typedef struct _PORT_INFO_1W {
+  LPWSTR pName;
+} PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PORT_INFO_1)
+DECL_WINELIB_TYPE_AW(PPORT_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPORT_INFO_1)
+
+typedef struct _PORT_INFO_2A {
+  LPSTR pPortName;
+  LPSTR pMonitorName;
+  LPSTR pDescription;
+  DWORD fPortType;
+  DWORD Reserved;
+} PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;
+
+typedef struct _PORT_INFO_2W {
+  LPWSTR pPortName;
+  LPWSTR pMonitorName;
+  LPWSTR pDescription;
+  DWORD  fPortType;
+  DWORD  Reserved;
+} PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(PORT_INFO_2)
+DECL_WINELIB_TYPE_AW(PPORT_INFO_2)
+DECL_WINELIB_TYPE_AW(LPPORT_INFO_2)
+
+typedef struct _PORT_INFO_3A {
+  DWORD dwStatus;
+  LPSTR pszStatus;
+  DWORD dwSeverity;
+} PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;
+
+typedef struct _PORT_INFO_3W {
+  DWORD  dwStatus;
+  LPWSTR pszStatus;
+  DWORD  dwSeverity;
+} PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;
+
+DECL_WINELIB_TYPE_AW(PORT_INFO_3)
+DECL_WINELIB_TYPE_AW(PPORT_INFO_3)
+DECL_WINELIB_TYPE_AW(LPPORT_INFO_3)
+
+typedef struct _MONITOR_INFO_1A {
+  LPSTR pName;
+} MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
+
+typedef struct _MONITOR_INFO_1W {
+  LPWSTR pName;
+} MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(MONITOR_INFO_1)
+DECL_WINELIB_TYPE_AW(PMONITOR_INFO_1)
+DECL_WINELIB_TYPE_AW(LPMONITOR_INFO_1)
+
+#endif /* Status */
+
+
+typedef struct _MONITOR_INFO_2A {
+  LPSTR pName;
+  LPSTR pEnvironment;
+  LPSTR pDLLName;
+} MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
+
+typedef struct _MONITOR_INFO_2W {
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDLLName;
+} MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(MONITOR_INFO_2)
+DECL_WINELIB_TYPE_AW(PMONITOR_INFO_2)
+DECL_WINELIB_TYPE_AW(LPMONITOR_INFO_2)
+
+typedef struct _DATATYPES_INFO_1A {
+  LPSTR pName;
+} DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
+
+typedef struct _DATATYPES_INFO_1W {
+  LPWSTR pName;
+} DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(DATATYPES_INFO_1)
+DECL_WINELIB_TYPE_AW(PDATATYPES_INFO_1)
+DECL_WINELIB_TYPE_AW(LPDATATYPES_INFO_1)
+
+typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
+  WORD  Type;
+  WORD  Reserved0;
+  DWORD Reserved1;
+  DWORD Reserved2;
+  DWORD Count;
+  PWORD pFields;
+} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE,
+*LPPRINTER_NOTIFY_OPTIONS_TYPE;
+
+typedef struct _PRINTER_NOTIFY_OPTIONS {
+  DWORD Version;
+  DWORD Flags;
+  DWORD Count;
+  PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
+} PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;
+
+typedef struct _PRINTER_NOTIFY_INFO_DATA {
+  WORD Type;
+  WORD Field;
+  DWORD Reserved;
+  DWORD Id;
+  union {
+    DWORD adwData[2];
+    struct {
+      DWORD cbBuf;
+      LPVOID pBuf;
+    } Data;
+  } NotifyData;
+} PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA,
+*LPPRINTER_NOTIFY_INFO_DATA;
+
+typedef struct _PRINTER_NOTIFY_INFO {
+  DWORD Version;
+  DWORD Flags;
+  DWORD Count;
+  PRINTER_NOTIFY_INFO_DATA aData[1];
+} PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;
+
+typedef struct _PROVIDOR_INFO_1A {
+  LPSTR pName;
+  LPSTR pEnvironment;
+  LPSTR pDLLName;
+} PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
+
+typedef struct _PROVIDOR_INFO_1W {
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDLLName;
+} PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PROVIDOR_INFO_1)
+DECL_WINELIB_TYPE_AW(PPROVIDOR_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPROVIDOR_INFO_1)
+
+typedef struct _PRINTER_ENUM_VALUESA {
+  LPSTR	 pValueName;
+  DWORD  cbValueName;
+  DWORD  dwType;
+  LPBYTE pData;
+  DWORD  cbData;
+} PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA;
+
+typedef struct _PRINTER_ENUM_VALUESW {
+  LPWSTR pValueName;
+  DWORD  cbValueName;
+  DWORD  dwType;
+  LPBYTE pData;
+  DWORD  cbData;
+} PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW;
+
+DECL_WINELIB_TYPE_AW(PRINTER_ENUM_VALUES)
+DECL_WINELIB_TYPE_AW(PPRINTER_ENUM_VALUES)
+
+typedef enum {
+ BIDI_NULL = 0,
+ BIDI_INT,
+ BIDI_FLOAT,
+ BIDI_BOOL,
+ BIDI_STRING,
+ BIDI_TEXT,
+ BIDI_ENUM,
+ BIDI_BLOB
+} BIDI_TYPE;
+
+typedef struct _BINARY_CONTAINER {
+ DWORD  cbBuf;
+ LPBYTE pData;
+} BINARY_CONTAINER, *PBINARY_CONTAINER;
+
+typedef struct _BIDI_DATA {
+ DWORD  dwBidiType;
+ union
+ {
+   BOOL             bData;
+   INT              iData;
+   LPWSTR           sData;
+   FLOAT            fData;
+   BINARY_CONTAINER biData;
+ } u;
+} BIDI_DATA, *LPBIDI_DATA, *PBIDI_DATA;
+
+typedef struct _BIDI_REQUEST_DATA {
+ DWORD      dwReqNumber;
+ LPWSTR     pSchema;
+ BIDI_DATA  data;
+} BIDI_REQUEST_DATA, *LPBIDI_REQUEST_DATA, *PBIDI_REQUEST_DATA;
+
+typedef struct _BIDI_REQUEST_CONTAINER {
+ DWORD              Version;
+ DWORD              Flags;
+ DWORD              Count;
+ BIDI_REQUEST_DATA  aData[1];
+} BIDI_REQUEST_CONTAINER, *LPBIDI_REQUEST_CONTAINER, *PBIDI_REQUEST_CONTAINER;
+
+typedef struct _BIDI_RESPONSE_DATA {
+ DWORD      dwResult;
+ DWORD      dwReqNumber;
+ LPWSTR     pSchema;
+ BIDI_DATA  data;
+} BIDI_RESPONSE_DATA, *LPBIDI_RESPONSE_DATA, *PBIDI_RESPONSE_DATA;
+
+typedef struct _BIDI_RESPONSE_CONTAINER {
+ DWORD              Version;
+ DWORD              Flags;
+ DWORD              Count;
+ BIDI_RESPONSE_DATA aData[1];
+} BIDI_RESPONSE_CONTAINER, *LPBIDI_RESPONSE_CONTAINER, *PBIDI_RESPONSE_CONTAINER;
+
+/* string constants */
+
+#define SPLREG_DEFAULT_SPOOL_DIRECTORYA "DefaultSpoolDirectory"
+#ifdef _MSC_VER
+#define SPLREG_DEFAULT_SPOOL_DIRECTORYW L"DefaultSpoolDirectory"
+#elif defined(__GNUC__)
+#define SPLREG_DEFAULT_SPOOL_DIRECTORYW (const WCHAR[]){'D','e','f','a','u','l','t','S','p','o','o','l','D','i','r','e','c','t','o','r','y',0}
+#else
+static const WCHAR SPLREG_DEFAULT_SPOOL_DIRECTORYW[] = {'D','e','f','a','u','l','t','S','p','o','o','l','D','i','r','e','c','t','o','r','y',0};
+#endif
+#define SPLREG_DEFAULT_SPOOL_DIRECTORY WINELIB_NAME_AW(SPLREG_DEFAULT_SPOOL_DIRECTORY)
+
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTA "PortThreadPriorityDefault"
+#ifdef _MSC_VER
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW L"PortThreadPriorityDefault"
+#elif defined(__GNUC__)
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW (const WCHAR[]){'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0}
+#else
+static const WCHAR SPLREG_PORT_THREAD_PRIORITY_DEFAULTW[] = {'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0};
+#endif
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY_DEFAULT)
+
+#define SPLREG_PORT_THREAD_PRIORITYA "PortThreadPriority"
+#ifdef _MSC_VER
+#define SPLREG_PORT_THREAD_PRIORITYW L"PortThreadPriority"
+#elif defined(__GNUC__)
+#define SPLREG_PORT_THREAD_PRIORITYW (const WCHAR[]){'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0}
+#else
+static const WCHAR SPLREG_PORT_THREAD_PRIORITYW[] = {'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0};
+#endif
+#define SPLREG_PORT_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY)
+
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTA "SchedulerThreadPriorityDefault"
+#ifdef _MSC_VER
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW L"SchedulerThreadPriorityDefault"
+#elif defined(__GNUC__)
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW (const WCHAR[]){'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0}
+#else
+static const WCHAR SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW[] = {'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0};
+#endif
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT)
+
+#define SPLREG_SCHEDULER_THREAD_PRIORITYA "SchedulerThreadPriority"
+#ifdef _MSC_VER
+#define SPLREG_SCHEDULER_THREAD_PRIORITYW L"SchedulerThreadPriority"
+#elif defined(__GNUC__)
+#define SPLREG_SCHEDULER_THREAD_PRIORITYW (const WCHAR[]){'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0}
+#else
+static const WCHAR SPLREG_SCHEDULER_THREAD_PRIORITYW[] = {'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0};
+#endif
+#define SPLREG_SCHEDULER_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY)
+
+#define SPLREG_BEEP_ENABLEDA "BeepEnabled"
+#ifdef _MSC_VER
+#define SPLREG_BEEP_ENABLEDW L"BeepEnabled"
+#elif defined(__GNUC__)
+#define SPLREG_BEEP_ENABLEDW (const WCHAR[]){'B','e','e','p','E','n','a','b','l','e','d',0}
+#else
+static const WCHAR SPLREG_BEEP_ENABLEDW[] = {'B','e','e','p','E','n','a','b','l','e','d',0};
+#endif
+#define SPLREG_BEEP_ENABLED WINELIB_NAME_AW(SPLREG_BEEP_ENABLED)
+
+#define SPLREG_NET_POPUPA "NetPopup"
+#ifdef _MSC_VER
+#define SPLREG_NET_POPUPW L"NetPopup"
+#elif defined(__GNUC__)
+#define SPLREG_NET_POPUPW (const WCHAR[]){'N','e','t','P','o','p','u','p',0}
+#else
+static const WCHAR SPLREG_NET_POPUPW[] = {'N','e','t','P','o','p','u','p',0};
+#endif
+#define SPLREG_NET_POPUP WINELIB_NAME_AW(SPLREG_NET_POPUP)
+
+#define SPLREG_RETRY_POPUPA "RetryPopup"
+#ifdef _MSC_VER
+#define SPLREG_RETRY_POPUPW L"RetryPopup"
+#elif defined(__GNUC__)
+#define SPLREG_RETRY_POPUPW (const WCHAR[]){'R','e','t','r','y','P','o','p','u','p',0}
+#else
+static const WCHAR SPLREG_RETRY_POPUPW[] = {'R','e','t','r','y','P','o','p','u','p',0};
+#endif
+#define SPLREG_RETRY_POPUP WINELIB_NAME_AW(SPLREG_RETRY_POPUP)
+
+#define SPLREG_NET_POPUP_TO_COMPUTERA "NetPopupToComputer"
+#ifdef _MSC_VER
+#define SPLREG_NET_POPUP_TO_COMPUTERW L"NetPopupToComputer"
+#elif defined(__GNUC__)
+#define SPLREG_NET_POPUP_TO_COMPUTERW (const WCHAR[]){'N','e','t','P','o','p','u','p','T','o','C','o','m','p','u','t','e','r',0}
+#else
+static const WCHAR SPLREG_NET_POPUP_TO_COMPUTERW[] = {'N','e','t','P','o','p','u','p','T','o','C','o','m','p','u','t','e','r',0};
+#endif
+#define SPLREG_NET_POPUP_TO_COMPUTER WINELIB_NAME_AW(SPLREG_NET_POPUP_TO_COMPUTER)
+
+#define SPLREG_EVENT_LOGA "EventLog"
+#ifdef _MSC_VER
+#define SPLREG_EVENT_LOGW L"EventLog"
+#elif defined(__GNUC__)
+#define SPLREG_EVENT_LOGW (const WCHAR[]){'E','v','e','n','t','L','o','g',0}
+#else
+static const WCHAR SPLREG_EVENT_LOGW[] = {'E','v','e','n','t','L','o','g',0};
+#endif
+#define SPLREG_EVENT_LOG WINELIB_NAME_AW(SPLREG_EVENT_LOG)
+
+#define SPLREG_MAJOR_VERSIONA "MajorVersion"
+#ifdef _MSC_VER
+#define SPLREG_MAJOR_VERSIONW L"MajorVersion"
+#elif defined(__GNUC__)
+#define SPLREG_MAJOR_VERSIONW (const WCHAR[]){'M','a','j','o','r','V','e','r','s','i','o','n',0}
+#else
+static const WCHAR SPLREG_MAJOR_VERSIONW[] = {'M','a','j','o','r','V','e','r','s','i','o','n',0};
+#endif
+#define SPLREG_MAJOR_VERSION WINELIB_NAME_AW(SPLREG_MAJOR_VERSION)
+
+#define SPLREG_MINOR_VERSIONA "MinorVersion"
+#ifdef _MSC_VER
+#define SPLREG_MINOR_VERSIONW L"MinorVersion"
+#elif defined(__GNUC__)
+#define SPLREG_MINOR_VERSIONW (const WCHAR[]){'M','i','n','o','r','V','e','r','s','i','o','n',0}
+#else
+static const WCHAR SPLREG_MINOR_VERSIONW[] = {'M','i','n','o','r','V','e','r','s','i','o','n',0};
+#endif
+#define SPLREG_MINOR_VERSION WINELIB_NAME_AW(SPLREG_MINOR_VERSION)
+
+#define SPLREG_ARCHITECTUREA "Architecture"
+#ifdef _MSC_VER
+#define SPLREG_ARCHITECTUREW L"Architecture"
+#elif defined(__GNUC__)
+#define SPLREG_ARCHITECTUREW (const WCHAR[]){'A','r','c','h','i','t','e','c','t','u','r','e',0}
+#else
+static const WCHAR SPLREG_ARCHITECTUREW[] = {'A','r','c','h','i','t','e','c','t','u','r','e',0};
+#endif
+#define SPLREG_ARCHITECTURE WINELIB_NAME_AW(SPLREG_ARCHITECTURE)
+
+#define SPLREG_OS_VERSIONA "OSVersion"
+#ifdef _MSC_VER
+#define SPLREG_OS_VERSIONW L"OSVersion"
+#elif defined(__GNUC__)
+#define SPLREG_OS_VERSIONW (const WCHAR[]){'O','S','V','e','r','s','i','o','n',0}
+#else
+static const WCHAR SPLREG_OS_VERSIONW[] = {'O','S','V','e','r','s','i','o','n',0};
+#endif
+#define SPLREG_OS_VERSION WINELIB_NAME_AW(SPLREG_OS_VERSION)
+
+#define SPLREG_OS_VERSIONEXA "OSVersionEx"
+#ifdef _MSC_VER
+#define SPLREG_OS_VERSIONEXW L"OSVersionEx"
+#elif defined(__GNUC__)
+#define SPLREG_OS_VERSIONEXW (const WCHAR[]){'O','S','V','e','r','s','i','o','n','E','x',0}
+#else
+static const WCHAR SPLREG_OS_VERSIONEXW[] = {'O','S','V','e','r','s','i','o','n','E','x',0};
+#endif
+#define SPLREG_OS_VERSIONEX WINELIB_NAME_AW(SPLREG_OS_VERSIONEX)
+
+#define SPLREG_DS_PRESENTA "DsPresent"
+#ifdef _MSC_VER
+#define SPLREG_DS_PRESENTW L"DsPresent"
+#elif defined(__GNUC__)
+#define SPLREG_DS_PRESENTW (const WCHAR[]){'D','s','P','r','e','s','e','n','t',0}
+#else
+static const WCHAR SPLREG_DS_PRESENTW[] = {'D','s','P','r','e','s','e','n','t',0};
+#endif
+#define SPLREG_DS_PRESENT WINELIB_NAME_AW(SPLREG_DS_PRESENT)
+
+#define SPLREG_DS_PRESENT_FOR_USERA "DsPresentForUser"
+#ifdef _MSC_VER
+#define SPLREG_DS_PRESENT_FOR_USERW L"DsPresentForUser"
+#elif defined(__GNUC__)
+#define SPLREG_DS_PRESENT_FOR_USERW (const WCHAR[]){'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0}
+#else
+static const WCHAR SPLREG_DS_PRESENT_FOR_USERW[] = {'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0};
+#endif
+#define SPLREG_DS_PRESENT_FOR_USER WINELIB_NAME_AW(SPLREG_DS_PRESENT_FOR_USER)
+
+#define SPLREG_REMOTE_FAXA "RemoteFax"
+#ifdef _MSC_VER
+#define SPLREG_REMOTE_FAXW L"RemoteFax"
+#elif defined(__GNUC__)
+#define SPLREG_REMOTE_FAXW (const WCHAR[]){'R','e','m','o','t','e','F','a','x',0}
+#else
+static const WCHAR SPLREG_REMOTE_FAXW[] = {'R','e','m','o','t','e','F','a','x',0};
+#endif
+#define SPLREG_REMOTE_FAX WINELIB_NAME_AW(SPLREG_REMOTE_FAX)
+
+#define SPLREG_RESTART_JOB_ON_POOL_ERRORA "RestartJobOnPoolError"
+#ifdef _MSC_VER
+#define SPLREG_RESTART_JOB_ON_POOL_ERRORW L"RestartJobOnPoolError"
+#elif defined(__GNUC__)
+#define SPLREG_RESTART_JOB_ON_POOL_ERRORW (const WCHAR[]){'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','r','r','o','r',0}
+#else
+static const WCHAR SPLREG_RESTART_JOB_ON_POOL_ERRORW[] = {'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','r','r','o','r',0};
+#endif
+#define SPLREG_RESTART_JOB_ON_POOL_ERROR WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ERROR)
+
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDA "RestartJobOnPoolEnabled"
+#ifdef _MSC_VER
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW L"RestartJobOnPoolEnabled"
+#elif defined(__GNUC__)
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW (const WCHAR[]){'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','n','a','b','l','e','d',0}
+#else
+static const WCHAR SPLREG_RESTART_JOB_ON_POOL_ENABLEDW[] = {'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','n','a','b','l','e','d',0};
+#endif
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLED WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ENABLED)
+
+#define SPLREG_DNS_MACHINE_NAMEA "DNSMachineName"
+#ifdef _MSC_VER
+#define SPLREG_DNS_MACHINE_NAMEW L"DNSMachineName"
+#elif defined(__GNUC__)
+#define SPLREG_DNS_MACHINE_NAMEW (const WCHAR[]){'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0}
+#else
+static const WCHAR SPLREG_DNS_MACHINE_NAMEW[] = {'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0};
+#endif
+#define SPLREG_DNS_MACHINE_NAME WINELIB_NAME_AW(SPLREG_DNS_MACHINE_NAME)
+
+#define SPLREG_ALLOW_USER_MANAGEFORMSA "AllowUserManageForms"
+#ifdef _MSC_VER
+#define SPLREG_ALLOW_USER_MANAGEFORMSW L"AllowUserManageForms"
+#elif defined(__GNUC__)
+#define SPLREG_ALLOW_USER_MANAGEFORMSW (const WCHAR[]){'A','l','l','o','w','U','s','e','r','M','a','n','a','g','e','F','o','r','m','s',0}
+#else
+static const WCHAR SPLREG_ALLOW_USER_MANAGEFORMSW[] = {'A','l','l','o','w','U','s','e','r','M','a','n','a','g','e','F','o','r','m','s',0};
+#endif
+#define SPLREG_ALLOW_USER_MANAGEFORMS WINELIB_NAME_AW(SPLREG_ALLOW_USER_MANAGEFORMS)
+
+#define SPLREG_WEBSHAREMGMTA "WebShareMgmt"
+#ifdef _MSC_VER
+#define SPLREG_WEBSHAREMGMTW L"WebShareMgmt"
+#elif defined(__GNUC__)
+#define SPLREG_WEBSHAREMGMTW (const WCHAR[]){'W','e','b','S','h','a','r','e','M','g','m','t',0}
+#else
+static const WCHAR SPLREG_WEBSHAREMGMTW[] = {'W','e','b','S','h','a','r','e','M','g','m','t',0};
+#endif
+#define SPLREG_WEBSHAREMGMT WINELIB_NAME_AW(SPLREG_WEBSHAREMGMT)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSA "PrintDriverIsolationGroups"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW L"PrintDriverIsolationGroups"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','G','r','o','u','p','s',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','G','r','o','u','p','s',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPS WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_GROUPS)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEA "PrintDriverIsolationTimeBeforeRecycle"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW L"PrintDriverIsolationTimeBeforeRecycle"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','T','i','m','e','B','e','f','o','r','e','R','e','c','y','c','l','e',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','T','i','m','e','B','e','f','o','r','e','R','e','c','y','c','l','e',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEA "PrintDriverIsolationMaxobjsBeforeRecycle"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW L"PrintDriverIsolationMaxobjsBeforeRecycle"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','M','a','x','o','b','j','s','B','e','f','o','r','e','R','e','c','y','c','l','e',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','M','a','x','o','b','j','s','B','e','f','o','r','e','R','e','c','y','c','l','e',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTA "PrintDriverIsolationIdleTimeout"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW L"PrintDriverIsolationIdleTimeout"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','I','d','l','e','T','i','m','e','o','u','t',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','I','d','l','e','T','i','m','e','o','u','t',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYA "PrintDriverIsolationExecutionPolicy"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW L"PrintDriverIsolationExecutionPolicy"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','E','x','e','c','u','t','i','o','n','P','o','l','i','c','y',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','E','x','e','c','u','t','i','o','n','P','o','l','i','c','y',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYA "PrintDriverIsolationOverrideCompat"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW L"PrintDriverIsolationOverrideCompat"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','O','v','e','r','r','i','d','e','C','o','m','p','a','t',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','O','v','e','r','r','i','d','e','C','o','m','p','a','t',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY)
+
+/* DECLARATIONS */
+INT WINAPI DeviceCapabilitiesA(LPCSTR pDevice,LPCSTR pPort,WORD fwCapability,
+			       LPSTR pOutput, LPDEVMODEA pDevMode);
+INT WINAPI DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort,
+			       WORD fwCapability, LPWSTR pOutput,
+			       const DEVMODEW *pDevMode);
+
+#define DeviceCapabilities WINELIB_NAME_AW(DeviceCapabilities)
+
+LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,
+                                LPSTR pDeviceName, LPDEVMODEA pDevModeOutput,
+				LPDEVMODEA pDevModeInput,DWORD fMode );
+LONG WINAPI DocumentPropertiesW(HWND hWnd, HANDLE hPrinter,
+				LPWSTR pDeviceName,
+				LPDEVMODEW pDevModeOutput,
+				LPDEVMODEW pDevModeInput, DWORD fMode);
+
+#define DocumentProperties WINELIB_NAME_AW(DocumentProperties)
+
+BOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter,
+			     LPPRINTER_DEFAULTSA pDefault);
+BOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter,
+			     LPPRINTER_DEFAULTSW pDefault);
+
+#define OpenPrinter WINELIB_NAME_AW(OpenPrinter)
+
+BOOL WINAPI ResetPrinterA(HANDLE hPrinter, LPPRINTER_DEFAULTSA pDefault);
+BOOL WINAPI ResetPrinterW(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
+#define ResetPrinter WINELIB_NAME_AW(ResetPrinter)
+
+BOOL WINAPI ClosePrinter (HANDLE phPrinter);
+
+BOOL WINAPI EnumJobsA(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
+		      DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
+		      LPDWORD pcReturned);
+BOOL WINAPI EnumJobsW(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
+		      DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
+		      LPDWORD pcReturned);
+#define EnumJobs WINELIB_NAME_AW(EnumJobs)
+
+BOOL  WINAPI EnumPrintersA(DWORD dwType, LPSTR lpszName,
+			       DWORD dwLevel, LPBYTE lpbPrinters,
+			       DWORD cbBuf, LPDWORD lpdwNeeded,
+			       LPDWORD lpdwReturned);
+BOOL  WINAPI EnumPrintersW(DWORD dwType, LPWSTR lpszName,
+			       DWORD dwLevel, LPBYTE lpbPrinters,
+			       DWORD cbBuf, LPDWORD lpdwNeeded,
+			       LPDWORD lpdwReturned);
+#define EnumPrinters WINELIB_NAME_AW(EnumPrinters)
+
+BOOL WINAPI PrinterProperties(HWND hWnd, HANDLE hPrinter);
+
+BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
+BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
+#define GetPrinterDriverDirectory WINELIB_NAME_AW(GetPrinterDriverDirectory)
+
+BOOL WINAPI GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment,
+			      DWORD Level, LPBYTE pDriverInfo,
+			      DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment,
+			      DWORD Level, LPBYTE pDriverInfo,
+			      DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetPrinterDriver WINELIB_NAME_AW(GetPrinterDriver)
+
+BOOL WINAPI SetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+		    DWORD Command);
+BOOL WINAPI SetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+		    DWORD Command);
+#define SetJob WINELIB_NAME_AW(SetJob)
+
+BOOL WINAPI GetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+		    DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+		    DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetJob WINELIB_NAME_AW(GetJob)
+
+HANDLE WINAPI AddPrinterA(LPSTR pName, DWORD Level, LPBYTE pPrinter);
+HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter);
+#define AddPrinter WINELIB_NAME_AW(AddPrinter)
+
+BOOL WINAPI DeletePrinter(HANDLE hPrinter);
+
+BOOL WINAPI SetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+			DWORD Command);
+BOOL WINAPI SetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+			DWORD Command);
+#define SetPrinter WINELIB_NAME_AW(SetPrinter)
+
+BOOL WINAPI GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+			DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+			DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetPrinter WINELIB_NAME_AW(GetPrinter)
+
+BOOL WINAPI AddPrinterDriverA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo);
+BOOL WINAPI AddPrinterDriverW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo);
+#define AddPrinterDriver WINELIB_NAME_AW(AddPrinterDriver)
+
+BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo,
+                                DWORD dwFileCopyFlags);
+BOOL WINAPI AddPrinterDriverExW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo,
+                                DWORD dwFileCopyFlags);
+#define AddPrinterDriverEx WINELIB_NAME_AW(AddPrinterDriverEx)
+
+BOOL WINAPI EnumPrinterDriversA(LPSTR pName, LPSTR pEnvironment, DWORD Level,
+				LPBYTE pDriverInfo, DWORD cbBuf,
+				LPDWORD pcbNeeded, LPDWORD pcbReturned);
+BOOL WINAPI EnumPrinterDriversW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level,
+				LPBYTE pDriverInfo, DWORD cbBuf,
+				LPDWORD pcbNeeded, LPDWORD pcbReturned);
+#define EnumPrinterDrivers WINELIB_NAME_AW(EnumPrinterDrivers)
+
+BOOL WINAPI GetDefaultPrinterA(LPSTR pName, LPDWORD pcbNameSize);
+BOOL WINAPI GetDefaultPrinterW(LPWSTR pName, LPDWORD pcbNameSize);
+#define GetDefaultPrinter WINELIB_NAME_AW(GetDefaultPrinter)
+
+BOOL WINAPI SetDefaultPrinterA(LPCSTR);
+BOOL WINAPI SetDefaultPrinterW(LPCWSTR);
+#define SetDefaultPrinter WINELIB_NAME_AW(SetDefaultPrinter)
+
+BOOL WINAPI DeletePrinterDriverA(LPSTR pName, LPSTR pEnvironment,
+				 LPSTR pDriverName);
+BOOL WINAPI DeletePrinterDriverW(LPWSTR pName, LPWSTR pEnvironment,
+				 LPWSTR pDriverName);
+#define DeletePrinterDriver WINELIB_NAME_AW(DeletePrinterDriver)
+
+BOOL WINAPI DeletePrinterDriverExA(LPSTR pName, LPSTR pEnvironment,
+                                   LPSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag);
+BOOL WINAPI DeletePrinterDriverExW(LPWSTR pName, LPWSTR pEnvironment,
+                                   LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag);
+#define DeletePrinterDriverEx WINELIB_NAME_AW(DeletePrinterDriverEx)
+
+BOOL WINAPI AddPrintProcessorA(LPSTR pName, LPSTR pEnvironment,
+			       LPSTR pPathName, LPSTR pPrintProcessorName);
+BOOL WINAPI AddPrintProcessorW(LPWSTR pName, LPWSTR pEnvironment,
+			       LPWSTR pPathName, LPWSTR pPrintProcessorName);
+#define AddPrintProcessor WINELIB_NAME_AW(AddPrintProcessor)
+
+BOOL WINAPI EnumPrintProcessorsA(LPSTR pName, LPSTR pEnvironment,
+				 DWORD Level, LPBYTE pPrintProcessorInfo,
+				 DWORD cbBuf, LPDWORD pcbNeeded,
+				 LPDWORD pcbReturned);
+BOOL WINAPI EnumPrintProcessorsW(LPWSTR pName, LPWSTR pEnvironment,
+				 DWORD Level, LPBYTE pPrintProcessorInfo,
+				 DWORD cbBuf, LPDWORD pcbNeeded,
+				 LPDWORD pcbReturned);
+#define EnumPrintProcessors WINELIB_NAME_AW(EnumPrintProcessors)
+
+BOOL WINAPI GetPrintProcessorDirectoryA(LPSTR pName, LPSTR pEnvironment,
+					DWORD Level,
+					LPBYTE pPrintProcessorInfo,
+					DWORD cbBuf, LPDWORD pcbNeeded);
+
+BOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment,
+					DWORD Level,
+					LPBYTE pPrintProcessorInfo,
+					DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetPrintProcessorDirectory WINELIB_NAME_AW(GetPrintProcessorDirectory)
+
+BOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR pName,
+					 LPSTR pPrintProcessorName,
+					 DWORD Level, LPBYTE pDatatypes,
+					 DWORD cbBuf, LPDWORD pcbNeeded,
+					 LPDWORD pcbReturned);
+BOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR pName,
+					 LPWSTR pPrintProcessorName,
+					 DWORD Level, LPBYTE pDatatypes,
+					 DWORD cbBuf, LPDWORD pcbNeeded,
+					 LPDWORD pcbReturned);
+#define EnumPrintProcessorDatatypes WINELIB_NAME_AW(EnumPrintProcessorDatatypes)
+
+BOOL WINAPI DeletePrintProcessorA(LPSTR pName, LPSTR pEnvironment,
+				  LPSTR pPrintProcessorName);
+BOOL WINAPI DeletePrintProcessorW(LPWSTR pName, LPWSTR pEnvironment,
+				  LPWSTR pPrintProcessorName);
+#define DeletePrintProcessor WINELIB_NAME_AW(DeletePrintProcessor)
+
+DWORD WINAPI StartDocPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
+DWORD WINAPI StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
+#define StartDocPrinter WINELIB_NAME_AW(StartDocPrinter)
+
+BOOL WINAPI StartPagePrinter(HANDLE hPrinter);
+BOOL WINAPI WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+			 LPDWORD pcWritten);
+BOOL WINAPI EndPagePrinter(HANDLE hPrinter);
+BOOL WINAPI AbortPrinter(HANDLE hPrinter);
+BOOL WINAPI ReadPrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+			LPDWORD pNoBytesRead);
+BOOL WINAPI EndDocPrinter(HANDLE hPrinter);
+
+BOOL WINAPI AddJobA(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
+		    LPDWORD pcbNeeded);
+BOOL WINAPI AddJobW(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
+		    LPDWORD pcbNeeded);
+#define AddJob WINELIB_NAME_AW(AddJob)
+
+BOOL WINAPI ScheduleJob(HANDLE hPrinter, DWORD JobID);
+
+LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd, HANDLE hPrinter,
+					LPSTR pDeviceName,
+					PDEVMODEA pDevModeOutput,
+					PDEVMODEA pDevModeInput);
+LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd, HANDLE hPrinter,
+					LPWSTR pDeviceName,
+					PDEVMODEW pDevModeOutput,
+					PDEVMODEW pDevModeInput);
+#define AdvancedDocumentProperties WINELIB_NAME_AW(AdvancedDocumentProperties)
+
+DWORD WINAPI GetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, LPDWORD pType,
+			     LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+DWORD WINAPI GetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, LPDWORD pType,
+			     LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+#define GetPrinterData WINELIB_NAME_AW(GetPrinterData)
+
+DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+			       LPCSTR pValueName, LPDWORD pType,
+			       LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+			       LPCWSTR pValueName, LPDWORD pType,
+			       LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+#define GetPrinterDataEx WINELIB_NAME_AW(GetPrinterDataEx)
+
+DWORD WINAPI DeletePrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+                                  LPCSTR pValueName);
+DWORD WINAPI DeletePrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+                                  LPCWSTR pValueName);
+#define DeletePrinterDataEx WINELIB_NAME_AW(DeletePrinterDataEx)
+
+DWORD WINAPI SetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, DWORD Type,
+			     LPBYTE pData, DWORD cbData);
+DWORD WINAPI SetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, DWORD Type,
+			     LPBYTE pData, DWORD cbData);
+#define SetPrinterData WINELIB_NAME_AW(SetPrinterData)
+
+DWORD WINAPI SetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+			       LPCSTR pValueName, DWORD Type,
+			       LPBYTE pData, DWORD cbData);
+DWORD WINAPI SetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+			       LPCWSTR pValueName, DWORD Type,
+			       LPBYTE pData, DWORD cbData);
+#define SetPrinterDataEx WINELIB_NAME_AW(SetPrinterDataEx)
+
+DWORD WINAPI WaitForPrinterChange(HANDLE hPrinter, DWORD Flags);
+HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE hPrinter,
+						 DWORD fdwFlags,
+						 DWORD fdwOptions,
+						 LPVOID pPrinterNotifyOptions);
+BOOL WINAPI FindNextPrinterChangeNotification(HANDLE hChange,
+					      PDWORD pdwChange,
+					      LPVOID pvReserved,
+					      LPVOID *ppPrinterNotifyInfo);
+BOOL WINAPI FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pPrinterNotifyInfo);
+BOOL WINAPI FindClosePrinterChangeNotification(HANDLE hChange);
+
+DWORD WINAPI PrinterMessageBoxA(HANDLE hPrinter, DWORD Error, HWND hWnd,
+				LPSTR pText, LPSTR pCaption, DWORD dwType);
+DWORD WINAPI PrinterMessageBoxW(HANDLE hPrinter, DWORD Error, HWND hWnd,
+				LPWSTR pText, LPWSTR pCaption, DWORD dwType);
+#define PrinterMessageBox WINELIB_NAME_AW(PrinterMessageBox)
+
+BOOL WINAPI AddFormA(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
+BOOL WINAPI AddFormW(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
+#define AddForm WINELIB_NAME_AW(AddForm)
+
+BOOL WINAPI DeleteFormA(HANDLE hPrinter, LPSTR pFormName);
+BOOL WINAPI DeleteFormW(HANDLE hPrinter, LPWSTR pFormName);
+#define DeleteForm WINELIB_NAME_AW(DeleteForm)
+
+BOOL WINAPI GetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level,
+		     LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+		     LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetForm WINELIB_NAME_AW(GetForm)
+
+BOOL WINAPI SetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level,
+		     LPBYTE pForm);
+BOOL WINAPI SetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+		     LPBYTE pForm);
+#define SetForm WINELIB_NAME_AW(SetForm)
+
+BOOL WINAPI EnumFormsA(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf,
+		       LPDWORD pcbNeeded, LPDWORD pcReturned);
+BOOL WINAPI EnumFormsW(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf,
+		       LPDWORD pcbNeeded, LPDWORD pcReturned);
+#define EnumForms WINELIB_NAME_AW(EnumForms)
+
+BOOL WINAPI EnumMonitorsA(LPSTR pName, DWORD Level, LPBYTE pMonitors,
+			  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+BOOL WINAPI EnumMonitorsW(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
+			  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+#define EnumMonitors WINELIB_NAME_AW(EnumMonitors)
+
+DWORD WINAPI EnumPrinterDataA( HANDLE hPrinter, DWORD dwIndex, LPSTR pValueName,
+    DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData,
+    DWORD cbData, LPDWORD pcbData );
+DWORD WINAPI EnumPrinterDataW( HANDLE hPrinter, DWORD dwIndex, LPWSTR pValueName,
+    DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData,
+    DWORD cbData, LPDWORD pcbData );
+#define EnumPrinterData WINELIB_NAME_AW(EnumPrinterData)
+
+BOOL WINAPI AddMonitorA(LPSTR pName, DWORD Level, LPBYTE pMonitors);
+BOOL WINAPI AddMonitorW(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
+#define AddMonitor WINELIB_NAME_AW(AddMonitor)
+
+BOOL WINAPI DeleteMonitorA(LPSTR pName, LPSTR pEnvironment,
+			   LPSTR pMonitorName);
+BOOL WINAPI DeleteMonitorW(LPWSTR pName, LPWSTR pEnvironment,
+			   LPWSTR pMonitorName);
+#define DeleteMonitor WINELIB_NAME_AW(DeleteMonitor)
+
+BOOL WINAPI EnumPortsA(LPSTR pName, DWORD Level, LPBYTE pPorts,
+		       DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+BOOL WINAPI EnumPortsW(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+		       DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+#define EnumPorts WINELIB_NAME_AW(EnumPorts)
+
+BOOL WINAPI AddPortA(LPSTR pName, HWND hWnd, LPSTR pMonitorName);
+BOOL WINAPI AddPortW(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+#define AddPort WINELIB_NAME_AW(AddPort)
+
+BOOL WINAPI AddPortExA(LPSTR, DWORD, LPBYTE, LPSTR);
+BOOL WINAPI AddPortExW(LPWSTR, DWORD, LPBYTE, LPWSTR);
+#define AddPortEx WINELIB_NAME_AW(AddPortEx)
+
+BOOL WINAPI ConfigurePortA(LPSTR pName, HWND hWnd, LPSTR pPortName);
+BOOL WINAPI ConfigurePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+#define ConfigurePort WINELIB_NAME_AW(ConfigurePort)
+
+BOOL WINAPI DeletePortA(LPSTR pName, HWND hWnd, LPSTR pPortName);
+BOOL WINAPI DeletePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+#define DeletePort WINELIB_NAME_AW(DeletePort)
+
+BOOL WINAPI SetPortA(LPSTR pName, LPSTR pPortName, DWORD dwLevel,
+		     LPBYTE pPortInfo);
+BOOL WINAPI SetPortW(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,
+		     LPBYTE pPortInfo);
+#define SetPort WINELIB_NAME_AW(SetPort)
+
+BOOL WINAPI AddPrinterConnectionA(LPSTR pName);
+BOOL WINAPI AddPrinterConnectionW(LPWSTR pName);
+#define AddPrinterConnection WINELIB_NAME_AW(AddPrinterConnection)
+
+BOOL WINAPI DeletePrinterConnectionA(LPSTR pName);
+BOOL WINAPI DeletePrinterConnectionW(LPWSTR pName);
+#define DeletePrinterConnection WINELIB_NAME_AW(DeletePrinterConnection)
+
+HANDLE WINAPI ConnectToPrinterDlg(HWND hwnd, DWORD Flags);
+
+BOOL WINAPI AddPrintProvidorA(LPSTR pName, DWORD Level, LPBYTE pProvidorInfo);
+BOOL WINAPI AddPrintProvidorW(LPWSTR pName, DWORD Level, LPBYTE pProvidorInfo);
+#define AddPrintProvidor WINELIB_NAME_AW(AddPrintProvidor)
+
+BOOL WINAPI DeletePrintProvidorA(LPSTR pName, LPSTR pEnvironment,
+				 LPSTR pPrintProvidorName);
+BOOL WINAPI DeletePrintProvidorW(LPWSTR pName, LPWSTR pEnvironment,
+				 LPWSTR pPrintProvidorName);
+#define DeletePrintProvidor WINELIB_NAME_AW(DeletePrintProvidor)
+
+DWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+				LPBYTE pEnumValues, DWORD cbEnumValues,
+				LPDWORD pcbEnumValues, LPDWORD pnEnumValues);
+DWORD WINAPI EnumPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+				LPBYTE pEnumValues, DWORD cbEnumValues,
+				LPDWORD pcbEnumValues, LPDWORD pnEnumValues);
+#define EnumPrinterDataEx WINELIB_NAME_AW(EnumPrinterDataEx)
+
+LONG WINAPI ExtDeviceMode( HWND hWnd, HANDLE hInst, LPDEVMODEA pDevModeOutput,
+    LPSTR pDeviceName, LPSTR pPort, LPDEVMODEA pDevModeInput, LPSTR pProfile,
+    DWORD fMode);
+
+LPSTR WINAPI StartDocDlgA(HANDLE hPrinter, DOCINFOA *doc);
+LPWSTR WINAPI StartDocDlgW(HANDLE hPrinter, DOCINFOW *doc);
+#define StartDocDlg WINELIB_NAME_AW(StartDocDlg)
+
+BOOL WINAPI XcvDataW(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
+    DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
+    PDWORD pcbOutputNeeded, PDWORD pdwStatus);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif  /* __WINE_WINSPOOL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h
new file mode 100644
index 0000000..acb3a14
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h
@@ -0,0 +1,425 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSVC_H
+#define __WINE_WINSVC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef _ADVAPI32_
+#define WINADVAPI
+#else
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+/* Service database names */
+#define SERVICES_ACTIVE_DATABASEA     "ServicesActive"
+#define SERVICES_FAILED_DATABASEA     "ServicesFailed"
+
+#if defined(__GNUC__)
+# define SERVICES_ACTIVE_DATABASEW    (const WCHAR []){ 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }
+# define SERVICES_FAILED_DATABASEW    (const WCHAR []){ 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }
+#elif defined(_MSC_VER)
+# define SERVICES_ACTIVE_DATABASEW    L"ServicesActive"
+# define SERVICES_FAILED_DATABASEW    L"ServicesFailed"
+#endif
+
+#define SERVICES_ACTIVE_DATABASE      WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE )
+#define SERVICES_FAILED_DATABASE      WINELIB_NAME_AW( SERVICES_FAILED_DATABASE )
+
+/* Service State requests */
+#define SERVICE_ACTIVE                        0x00000001
+#define SERVICE_INACTIVE                      0x00000002
+#define SERVICE_STATE_ALL                     (SERVICE_ACTIVE | SERVICE_INACTIVE)
+
+/* Controls */
+#define SERVICE_CONTROL_STOP                  0x00000001
+#define SERVICE_CONTROL_PAUSE                 0x00000002
+#define SERVICE_CONTROL_CONTINUE              0x00000003
+#define SERVICE_CONTROL_INTERROGATE           0x00000004
+#define SERVICE_CONTROL_SHUTDOWN              0x00000005
+#define SERVICE_CONTROL_PARAMCHANGE           0x00000006
+#define SERVICE_CONTROL_NETBINDADD            0x00000007
+#define SERVICE_CONTROL_NETBINDREMOVE         0x00000008
+#define SERVICE_CONTROL_NETBINDENABLE         0x00000009
+#define SERVICE_CONTROL_NETBINDDISABLE        0x0000000A
+#define SERVICE_CONTROL_DEVICEEVENT           0x0000000B
+#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C
+#define SERVICE_CONTROL_POWEREVENT            0x0000000D
+#define SERVICE_CONTROL_SESSIONCHANGE         0x0000000E
+#define SERVICE_CONTROL_PRESHUTDOWN           0x0000000F
+
+/* Service State */
+#define SERVICE_STOPPED          0x00000001
+#define SERVICE_START_PENDING    0x00000002
+#define SERVICE_STOP_PENDING     0x00000003
+#define SERVICE_RUNNING          0x00000004
+#define SERVICE_CONTINUE_PENDING 0x00000005
+#define SERVICE_PAUSE_PENDING    0x00000006
+#define SERVICE_PAUSED           0x00000007
+
+/* Controls Accepted */
+#define SERVICE_ACCEPT_STOP                  0x00000001
+#define SERVICE_ACCEPT_PAUSE_CONTINUE        0x00000002
+#define SERVICE_ACCEPT_SHUTDOWN              0x00000004
+#define SERVICE_ACCEPT_PARAMCHANGE           0x00000008
+#define SERVICE_ACCEPT_NETBINDCHANGE         0x00000010
+#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020
+#define SERVICE_ACCEPT_POWEREVENT            0x00000040
+#define SERVICE_ACCEPT_SESSIONCHANGE         0x00000080
+#define SERVICE_ACCEPT_PRESHUTDOWN           0x00000100
+
+/* Service Control Manager Object access types */
+#define SC_MANAGER_CONNECT            0x0001
+#define SC_MANAGER_CREATE_SERVICE     0x0002
+#define SC_MANAGER_ENUMERATE_SERVICE  0x0004
+#define SC_MANAGER_LOCK               0x0008
+#define SC_MANAGER_QUERY_LOCK_STATUS  0x0010
+#define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020
+#define SC_MANAGER_ALL_ACCESS         ( STANDARD_RIGHTS_REQUIRED      | \
+                                        SC_MANAGER_CONNECT            | \
+                                        SC_MANAGER_CREATE_SERVICE     | \
+                                        SC_MANAGER_ENUMERATE_SERVICE  | \
+                                        SC_MANAGER_LOCK               | \
+                                        SC_MANAGER_QUERY_LOCK_STATUS  | \
+                                        SC_MANAGER_MODIFY_BOOT_CONFIG )
+
+#define SERVICE_QUERY_CONFIG         0x0001
+#define SERVICE_CHANGE_CONFIG        0x0002
+#define SERVICE_QUERY_STATUS         0x0004
+#define SERVICE_ENUMERATE_DEPENDENTS 0x0008
+#define SERVICE_START                0x0010
+#define SERVICE_STOP                 0x0020
+#define SERVICE_PAUSE_CONTINUE       0x0040
+#define SERVICE_INTERROGATE          0x0080
+#define SERVICE_USER_DEFINED_CONTROL 0x0100
+
+#define SERVICE_ALL_ACCESS           ( STANDARD_RIGHTS_REQUIRED     | \
+                                       SERVICE_QUERY_CONFIG         | \
+                                       SERVICE_CHANGE_CONFIG        | \
+                                       SERVICE_QUERY_STATUS         | \
+                                       SERVICE_ENUMERATE_DEPENDENTS | \
+                                       SERVICE_START                | \
+                                       SERVICE_STOP                 | \
+                                       SERVICE_PAUSE_CONTINUE       | \
+                                       SERVICE_INTERROGATE          | \
+                                       SERVICE_USER_DEFINED_CONTROL )
+
+#define SERVICE_NO_CHANGE 0xffffffff
+
+
+/* Handle types */
+
+DECLARE_HANDLE(SC_HANDLE);
+typedef SC_HANDLE *LPSC_HANDLE;
+DECLARE_HANDLE(SERVICE_STATUS_HANDLE);
+typedef LPVOID SC_LOCK;
+
+/* Service status structure */
+
+typedef struct _SERVICE_STATUS {
+  DWORD dwServiceType;
+  DWORD dwCurrentState;
+  DWORD dwControlsAccepted;
+  DWORD dwWin32ExitCode;
+  DWORD dwServiceSpecificExitCode;
+  DWORD dwCheckPoint;
+  DWORD dwWaitHint;
+} SERVICE_STATUS, *LPSERVICE_STATUS;
+
+/* Service status process structure */
+
+typedef struct _SERVICE_STATUS_PROCESS
+{
+  DWORD dwServiceType;
+  DWORD dwCurrentState;
+  DWORD dwControlsAccepted;
+  DWORD dwWin32ExitCode;
+  DWORD dwServiceSpecificExitCode;
+  DWORD dwCheckPoint;
+  DWORD dwWaitHint;
+  DWORD dwProcessId;
+  DWORD dwServiceFlags;
+} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
+
+typedef enum _SC_STATUS_TYPE {
+  SC_STATUS_PROCESS_INFO      = 0
+} SC_STATUS_TYPE;
+
+/* Service main function prototype */
+
+typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);
+typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);
+DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION)
+
+/* Service start table */
+
+typedef struct _SERVICE_TABLE_ENTRYA {
+    LPSTR                    lpServiceName;
+    LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
+} SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
+
+typedef struct _SERVICE_TABLE_ENTRYW {
+  LPWSTR                   lpServiceName;
+  LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
+} SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY)
+DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY)
+
+/* Service status enumeration structure */
+
+typedef struct _ENUM_SERVICE_STATUSA {
+  LPSTR          lpServiceName;
+  LPSTR          lpDisplayName;
+  SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
+
+typedef struct _ENUM_SERVICE_STATUSW {
+    LPWSTR         lpServiceName;
+    LPWSTR         lpDisplayName;
+    SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
+
+DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS)
+DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS)
+
+typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
+  LPSTR          lpServiceName;
+  LPSTR          lpDisplayName;
+  SERVICE_STATUS_PROCESS ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA;
+
+typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
+    LPWSTR         lpServiceName;
+    LPWSTR         lpDisplayName;
+    SERVICE_STATUS_PROCESS ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
+
+DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS_PROCESS)
+DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS_PROCESS)
+
+typedef enum _SC_ENUM_TYPE {
+    SC_ENUM_PROCESS_INFO      = 0
+} SC_ENUM_TYPE;
+
+typedef struct _QUERY_SERVICE_CONFIGA {
+    DWORD   dwServiceType;
+    DWORD   dwStartType;
+    DWORD   dwErrorControl;
+    LPSTR   lpBinaryPathName;
+    LPSTR   lpLoadOrderGroup;
+    DWORD   dwTagId;
+    LPSTR   lpDependencies;
+    LPSTR   lpServiceStartName;
+    LPSTR   lpDisplayName;
+} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
+
+typedef struct _QUERY_SERVICE_CONFIGW {
+    DWORD   dwServiceType;
+    DWORD   dwStartType;
+    DWORD   dwErrorControl;
+    LPWSTR  lpBinaryPathName;
+    LPWSTR  lpLoadOrderGroup;
+    DWORD   dwTagId;
+    LPWSTR  lpDependencies;
+    LPWSTR  lpServiceStartName;
+    LPWSTR  lpDisplayName;
+} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
+
+/* defines and structures for ChangeServiceConfig2 */
+#define SERVICE_CONFIG_DESCRIPTION              1
+#define SERVICE_CONFIG_FAILURE_ACTIONS          2
+#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO  3
+#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG     4
+#define SERVICE_CONFIG_SERVICE_SID_INFO         5
+#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
+#define SERVICE_CONFIG_PRESHUTDOWN_INFO         7
+
+
+typedef struct _SERVICE_DESCRIPTIONA {
+   LPSTR lpDescription;
+} SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;
+
+typedef struct _SERVICE_DESCRIPTIONW {
+   LPWSTR lpDescription;
+} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_DESCRIPTION)
+DECL_WINELIB_TYPE_AW(LPSERVICE_DESCRIPTION)
+
+typedef enum _SC_ACTION_TYPE {
+    SC_ACTION_NONE        = 0,
+    SC_ACTION_RESTART     = 1,
+    SC_ACTION_REBOOT      = 2,
+    SC_ACTION_RUN_COMMAND = 3
+} SC_ACTION_TYPE;
+
+typedef struct _SC_ACTION {
+   SC_ACTION_TYPE  Type;
+   DWORD       Delay;
+} SC_ACTION,*LPSC_ACTION;
+
+typedef struct _SERVICE_FAILURE_ACTIONSA {
+   DWORD   dwResetPeriod;
+   LPSTR   lpRebootMsg;
+   LPSTR   lpCommand;
+   DWORD   cActions;
+   SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
+
+typedef struct _SERVICE_FAILURE_ACTIONSW {
+   DWORD   dwResetPeriod;
+   LPWSTR  lpRebootMsg;
+   LPWSTR  lpCommand;
+   DWORD   cActions;
+   SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_FAILURE_ACTIONS)
+DECL_WINELIB_TYPE_AW(LPSERVICE_FAILURE_ACTIONS)
+
+typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
+    BOOL fDelayedAutostart;
+} SERVICE_DELAYED_AUTO_START_INFO,*LPSERVICE_DELAYED_AUTO_START_INFO;
+
+typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
+    BOOL fFailureActionsOnNonCrashFailures;
+} SERVICE_FAILURE_ACTIONS_FLAG,*LPSERVICE_FAILURE_ACTIONS_FLAG;
+
+typedef struct _SERVICE_SID_INFO {
+    DWORD dwServiceSidType;
+} SERVICE_SID_INFO,*LPSERVICE_SID_INFO;
+
+typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
+    LPSTR pmszRequiredPrivileges;
+} SERVICE_REQUIRED_PRIVILEGES_INFOA,*LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
+
+typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
+    LPWSTR pmszRequiredPrivileges;
+} SERVICE_REQUIRED_PRIVILEGES_INFOW,*LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_REQUIRED_PRIVILEGES_INFO)
+DECL_WINELIB_TYPE_AW(LPSERVICE_REQUIRED_PRIVILEGES_INFO)
+
+typedef struct _SERVICE_PRESHUTDOWN_INFO {
+    DWORD dwPreshutdownTimeout;
+} SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO;
+
+typedef struct _QUERY_SERVICE_LOCK_STATUSA
+{
+  DWORD fIsLocked;
+  LPSTR lpLockOwner;
+  DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
+
+typedef struct _QUERY_SERVICE_LOCK_STATUSW
+{
+  DWORD fIsLocked;
+  LPWSTR lpLockOwner;
+  DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
+
+DECL_WINELIB_TYPE_AW(QUERY_SERVICE_LOCK_STATUS)
+
+/* Service control handler function prototype */
+
+typedef VOID (WINAPI *LPHANDLER_FUNCTION)(DWORD);
+typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);
+
+/* API function prototypes */
+
+WINADVAPI BOOL        WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI BOOL        WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+#define                      ChangeServiceConfig WINELIB_NAME_AW(ChangeServiceConfig)
+WINADVAPI BOOL        WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID);
+WINADVAPI BOOL        WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID);
+#define                      ChangeServiceConfig2 WINELIB_NAME_AW(ChangeServiceConfig2)
+WINADVAPI BOOL        WINAPI CloseServiceHandle(SC_HANDLE);
+WINADVAPI BOOL        WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);
+WINADVAPI SC_HANDLE   WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI SC_HANDLE   WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+#define                      CreateService WINELIB_NAME_AW(CreateService)
+WINADVAPI BOOL        WINAPI DeleteService(SC_HANDLE);
+WINADVAPI BOOL        WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD);
+WINADVAPI BOOL        WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD);
+#define                      EnumDependentServices WINELIB_NAME_AW(EnumDependentServices)
+WINADVAPI BOOL        WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD,LPDWORD);
+WINADVAPI BOOL        WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD,LPDWORD);
+#define                      EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)
+WINADVAPI BOOL        WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR);
+WINADVAPI BOOL        WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR);
+#define                      EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)
+WINADVAPI BOOL        WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);
+WINADVAPI BOOL        WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define                      GetServiceDisplayName WINELIB_NAME_AW(GetServiceDisplayName)
+WINADVAPI BOOL        WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);
+WINADVAPI BOOL        WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define                      GetServiceKeyName WINELIB_NAME_AW(GetServiceKeyName)
+WINADVAPI SC_LOCK     WINAPI LockServiceDatabase(SC_HANDLE);
+WINADVAPI BOOL        WINAPI NotifyBootConfigStatus(BOOL);
+WINADVAPI SC_HANDLE   WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
+WINADVAPI SC_HANDLE   WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
+#define                      OpenSCManager WINELIB_NAME_AW(OpenSCManager)
+WINADVAPI SC_HANDLE   WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);
+WINADVAPI SC_HANDLE   WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);
+#define                      OpenService WINELIB_NAME_AW(OpenService)
+WINADVAPI BOOL        WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS);
+WINADVAPI BOOL        WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD);
+WINADVAPI BOOL        WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,LPDWORD);
+WINADVAPI BOOL        WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,LPDWORD);
+#define                      QueryServiceConfig WINELIB_NAME_AW(QueryServiceConfig)
+WINADVAPI BOOL        WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+WINADVAPI BOOL        WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+#define                      QueryServiceConfig2 WINELIB_NAME_AW(QueryServiceConfig2)
+WINADVAPI BOOL        WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,LPDWORD);
+WINADVAPI BOOL        WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,LPDWORD);
+#define                      QueryServiceLockStatus WINELIB_NAME_AW(QueryServiceLockStatus)
+WINADVAPI BOOL        WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION);
+#define                      RegisterServiceCtrlHandler WINELIB_NAME_AW(RegisterServiceCtrlHandler)
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID);
+#define                      RegisterServiceCtrlHandlerEx WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx)
+WINADVAPI BOOL        WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI BOOL        WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS);
+WINADVAPI BOOL        WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);
+WINADVAPI BOOL        WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);
+#define                      StartService WINELIB_NAME_AW(StartService)
+WINADVAPI BOOL        WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA*);
+WINADVAPI BOOL        WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW*);
+#define                      StartServiceCtrlDispatcher WINELIB_NAME_AW(StartServiceCtrlDispatcher)
+WINADVAPI BOOL        WINAPI UnlockServiceDatabase(SC_LOCK);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* !defined(__WINE_WINSVC_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl
new file mode 100644
index 0000000..48edb9f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2010 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+interface IAssemblyCache;
+interface IAssemblyCacheItem;
+interface IAssemblyName;
+
+typedef struct _FUSION_INSTALL_REFERENCE_
+{
+    DWORD   cbSize;
+    DWORD   dwFlags;
+    GUID    guidScheme;
+    LPCWSTR szIdentifier;
+    LPCWSTR szNonCannonicalData;
+} FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
+
+typedef struct _ASSEMBLY_INFO
+{
+    ULONG          cbAssemblyInfo;
+    DWORD          dwAssemblyFlags;
+    ULARGE_INTEGER uliAssemblySizeInKB;
+    LPWSTR         pszCurrentAssemblyPathBuf;
+    ULONG          cchBuf;
+} ASSEMBLY_INFO;
+
+typedef const struct _FUSION_INSTALL_REFERENCE_ *LPCFUSION_INSTALL_REFERENCE;
+
+[
+    object,
+    uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
+    pointer_default(unique),
+    local
+]
+interface IAssemblyCache : IUnknown
+{
+    HRESULT UninstallAssembly(
+        [in] DWORD flags,
+        [in] LPCWSTR name,
+        [in] LPCFUSION_INSTALL_REFERENCE ref,
+        [out, optional] ULONG *disp);
+
+    HRESULT QueryAssemblyInfo(
+        [in] DWORD flags,
+        [in] LPCWSTR name,
+        [in, out] ASSEMBLY_INFO *info);
+
+    HRESULT CreateAssemblyCacheItem(
+        [in] DWORD flags,
+        [in] PVOID reserved,
+        [out] IAssemblyCacheItem **item,
+        [in, optional] LPCWSTR name);
+
+    HRESULT Reserved(
+        [out] IUnknown **reserved);
+
+    HRESULT InstallAssembly(
+        [in] DWORD flags,
+        [in] LPCWSTR path,
+        [in] LPCFUSION_INSTALL_REFERENCE ref);
+}
+
+[
+    object,
+    uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
+    pointer_default(unique),
+    local
+]
+interface IAssemblyCacheItem : IUnknown
+{
+    HRESULT CreateStream(
+        [in] DWORD flags,
+        [in] LPCWSTR name,
+        [in] DWORD format,
+        [in] DWORD format_flags,
+        [out] IStream **stream,
+        [in, optional] ULARGE_INTEGER *max_size);
+
+    HRESULT Commit(
+        [in] DWORD flags,
+        [out, optional] ULONG *disp);
+
+    HRESULT AbortItem();
+}
+
+[
+    object,
+    uuid(cd193bc0-b4bc-11D2-9833-00c04fc31d2e),
+    pointer_default(unique),
+    local
+]
+interface IAssemblyName : IUnknown
+{
+    typedef [public] enum
+    {
+        ASM_NAME_PUBLIC_KEY,
+        ASM_NAME_PUBLIC_KEY_TOKEN,
+        ASM_NAME_HASH_VALUE,
+        ASM_NAME_NAME,
+        ASM_NAME_MAJOR_VERSION,
+        ASM_NAME_MINOR_VERSION,
+        ASM_NAME_BUILD_NUMBER,
+        ASM_NAME_REVISION_NUMBER,
+        ASM_NAME_CULTURE,
+        ASM_NAME_PROCESSOR_ID_ARRAY,
+        ASM_NAME_OSINFO_ARRAY,
+        ASM_NAME_HASH_ALGID,
+        ASM_NAME_ALIAS,
+        ASM_NAME_CODEBASE_URL,
+        ASM_NAME_CODEBASE_LASTMOD,
+        ASM_NAME_NULL_PUBLIC_KEY,
+        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
+        ASM_NAME_CUSTOM,
+        ASM_NAME_NULL_CUSTOM,
+        ASM_NAME_MVID,
+        ASM_NAME_MAX_PARAMS
+    } ASM_NAME;
+
+    typedef [public] enum
+    {
+        ASM_DISPLAYF_VERSION               = 0x1,
+        ASM_DISPLAYF_CULTURE               = 0x2,
+        ASM_DISPLAYF_PUBLIC_KEY_TOKEN      = 0x4,
+        ASM_DISPLAYF_PUBLIC_KEY            = 0x8,
+        ASM_DISPLAYF_CUSTOM                = 0x10,
+        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
+        ASM_DISPLAYF_LANGUAGEID            = 0x40
+    } ASM_DISPLAY_FLAGS;
+
+    HRESULT SetProperty(
+        [in] DWORD id,
+        [in] LPVOID property,
+        [in] DWORD size);
+
+    HRESULT GetProperty(
+        [in] DWORD id,
+        [out] LPVOID buffer,
+        [in][out] LPDWORD buflen);
+
+    HRESULT Finalize();
+
+    HRESULT GetDisplayName(
+        [out] LPWSTR buffer,
+        [in][out] LPDWORD buflen,
+        [in] DWORD flags);
+
+    HRESULT Reserved(
+        [in] REFIID riid,
+        [in] IUnknown *pUnkReserved1,
+        [in] IUnknown *pUnkReserved2,
+        [in] LPCOLESTR szReserved,
+        [in] LONGLONG llReserved,
+        [in] LPVOID pvReserved,
+        [in] DWORD cbReserved,
+        [out] LPVOID *ppReserved);
+
+    HRESULT GetName(
+        [in][out] LPDWORD buflen,
+        [out] LPWSTR buffer);
+
+    HRESULT GetVersion(
+        [out] LPDWORD hi,
+        [out] LPDWORD low);
+
+    HRESULT IsEqual(
+        [in] IAssemblyName *name,
+        [in] DWORD flags);
+
+    HRESULT Clone(
+        [out] IAssemblyName **name);
+}
+
+typedef [unique] IAssemblyName *LPASSEMBLYNAME;
+typedef [public] enum
+{
+    CANOF_PARSE_DISPLAY_NAME = 0x1,
+    CANOF_SET_DEFAULT_VALUES = 0x2
+} CREATE_ASM_NAME_OBJ_FLAGS;
+
+cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME *,LPCWSTR,DWORD,LPVOID);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h
new file mode 100644
index 0000000..1cafea1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h
@@ -0,0 +1,797 @@
+/*
+ * Copyright (C) 1991-1998 by LCS/Telegraphics
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTAB_H
+#define __WINE_WINTAB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/***********************************************************************
+ * Messages 
+ */
+#ifndef NOWTMESSAGES
+
+#define WT_DEFBASE    0x7FF0
+#define WT_MAXOFFSET  0xF
+
+#define _WT_PACKET(b)      ((b)+0)
+#define _WT_CTXOPEN(b)     ((b)+1)
+#define _WT_CTXCLOSE(b)    ((b)+2)
+#define _WT_CTXUPDATE(b)   ((b)+3)
+#define _WT_CTXOVERLAP(b)  ((b)+4)
+#define _WT_PROXIMITY(b)   ((b)+5)
+#define _WT_INFOCHANGE(b)  ((b)+6)
+#define _WT_CSRCHANGE(b)   ((b)+7)  /* 1.1 */
+#define _WT_MAX(b)         ((b)+WT_MAXOFFSET)
+
+#define WT_PACKET      _WT_PACKET(WT_DEFBASE)
+#define WT_CTXOPEN     _WT_CTXOPEN(WT_DEFBASE)
+#define WT_CTXCLOSE    _WT_CTXCLOSE(WT_DEFBASE)
+#define WT_CTXUPDATE   _WT_CTXUPDATE(WT_DEFBASE)
+#define WT_CTXOVERLAP  _WT_CTXOVERLAP(WT_DEFBASE)
+#define WT_PROXIMITY   _WT_PROXIMITY(WT_DEFBASE)
+#define WT_INFOCHANGE  _WT_INFOCHANGE(WT_DEFBASE)
+#define WT_CSRCHANGE   _WT_CSRCHANGE(WT_DEFBASE)  /* 1.1 */
+#define WT_MAX         _WT_MAX(WT_DEFBASE)
+
+#endif
+
+/***********************************************************************
+ * COMMON DATA DEFS
+ */
+
+DECLARE_HANDLE(HMGR);     /* manager handle */
+DECLARE_HANDLE(HCTX);     /* context handle */
+DECLARE_HANDLE(HWTHOOK);  /* hook handle */
+
+typedef DWORD WTPKT;   /* packet mask */
+
+#ifndef NOWTPKT
+
+/* WTPKT bits */
+#define PK_CONTEXT           0x0001  /* reporting context */
+#define PK_STATUS            0x0002  /* status bits */
+#define PK_TIME              0x0004  /* time stamp */
+#define PK_CHANGED           0x0008  /* change bit vector */
+#define PK_SERIAL_NUMBER     0x0010  /* packet serial number */
+#define PK_CURSOR            0x0020  /* reporting cursor */
+#define PK_BUTTONS           0x0040  /* button information */
+#define PK_X                 0x0080  /* x axis */
+#define PK_Y                 0x0100  /* y axis */
+#define PK_Z                 0x0200  /* z axis */
+#define PK_NORMAL_PRESSURE   0x0400  /* normal or tip pressure */
+#define PK_TANGENT_PRESSURE  0x0800  /* tangential or barrel pressure */
+#define PK_ORIENTATION       0x1000  /* orientation info: tilts */
+#define PK_ROTATION          0x2000  /* rotation info; 1.1 */
+
+#endif
+
+typedef DWORD FIX32; /* fixed-point arithmetic type */
+
+#ifndef NOFIX32
+
+#define INT(x) HIWORD(x)
+#define FRAC(x) LOWORD(x)
+
+#define CASTFIX32(x) ((FIX32)((x)*65536L))
+
+#define ROUND(x) (INT(x) + (FRAC(x) > (WORD)0x8000))
+
+#define FIX_MUL(c, a, b) \
+    (c = (((DWORD)FRAC(a) * FRAC(b)) >> 16) + \
+           (DWORD)INT(a) * FRAC(b) + \
+           (DWORD)INT(b) * FRAC(a) + \
+          ((DWORD)INT(a) * INT(b) << 16))
+
+#ifdef _WINDLL
+# define FIX_DIV_SC static
+#else
+# define FIX_DIV_SC
+# endif
+
+#define FIX_DIV(c, a, b) \
+    { \
+        FIX_DIV_SC DWORD temp, rem, btemp; \
+        \
+        /* fraction done bytewise */ \
+        temp = ((a / b) << 16); \
+        rem = a % b;   \
+        btemp = b; \
+        if (INT(btemp) < 256) { \
+            rem <<= 8; \
+        } else { \
+            btemp >>= 8; \
+        } \
+        temp += ((rem / btemp) << 8); \
+        rem %= btemp; \
+        rem <<= 8; \
+        temp += rem / btemp; \
+        c = temp; \
+    }
+
+#endif
+
+/***********************************************************************
+ * INFO DATA DEFS
+ */
+
+#ifndef NOWTINFO
+
+#ifndef NOWTAXIS
+
+typedef struct tagAXIS {
+    LONG   axMin;
+    LONG   axMax;
+    UINT   axUnits;
+    FIX32  axResolution;
+} AXIS, *PAXIS, *NPAXIS, *LPAXIS;
+
+/* unit specifiers */
+#define TU_NONE         0
+#define TU_INCHES       1
+#define TU_CENTIMETERS  2
+#define TU_CIRCLE       3
+
+#endif
+
+#ifndef NOWTSYSBUTTONS
+
+/* system button assignment values */
+#define SBN_NONE       0x00
+#define SBN_LCLICK     0x01
+#define SBN_LDBLCLICK  0x02
+#define SBN_LDRAG      0x03
+#define SBN_RCLICK     0x04
+#define SBN_RDBLCLICK  0x05
+#define SBN_RDRAG      0x06
+#define SBN_MCLICK     0x07
+#define SBN_MDBLCLICK  0x08
+#define SBN_MDRAG      0x09
+
+/* for Pen Windows */
+#define SBN_PTCLICK     0x10
+#define SBN_PTDBLCLICK  0x20
+#define SBN_PTDRAG      0x30
+#define SBN_PNCLICK     0x40
+#define SBN_PNDBLCLICK  0x50
+#define SBN_PNDRAG      0x60
+#define SBN_P1CLICK     0x70
+#define SBN_P1DBLCLICK  0x80
+#define SBN_P1DRAG      0x90
+#define SBN_P2CLICK     0xA0
+#define SBN_P2DBLCLICK  0xB0
+#define SBN_P2DRAG      0xC0
+#define SBN_P3CLICK     0xD0
+#define SBN_P3DBLCLICK  0xE0
+#define SBN_P3DRAG      0xF0
+
+#endif
+
+#ifndef NOWTCAPABILITIES
+
+/* hardware capabilities */
+#define HWC_INTEGRATED      0x0001
+#define HWC_TOUCH           0x0002
+#define HWC_HARDPROX        0x0004
+#define HWC_PHYSID_CURSORS  0x0008  /* 1.1 */
+#endif
+
+#ifndef NOWTIFC
+
+#ifndef NOWTCURSORS 
+
+/* cursor capabilities */
+#define CRC_MULTIMODE  0x0001  /* 1.1 */
+#define CRC_AGGREGATE  0x0002  /* 1.1 */
+#define CRC_INVERT     0x0004  /* 1.1 */
+
+#endif 
+
+/* info categories */
+#define WTI_INTERFACE    1
+#define IFC_WINTABID     1
+#define IFC_SPECVERSION  2
+#define IFC_IMPLVERSION  3
+#define IFC_NDEVICES     4
+#define IFC_NCURSORS     5
+#define IFC_NCONTEXTS    6
+#define IFC_CTXOPTIONS   7
+#define IFC_CTXSAVESIZE  8
+#define IFC_NEXTENSIONS  9
+#define IFC_NMANAGERS    10
+#define IFC_MAX          10
+
+#endif
+
+#ifndef NOWTSTATUS
+
+#define WTI_STATUS     2
+#define STA_CONTEXTS   1
+#define STA_SYSCTXS    2
+#define STA_PKTRATE    3
+#define STA_PKTDATA    4
+#define STA_MANAGERS   5
+#define STA_SYSTEM     6
+#define STA_BUTTONUSE  7
+#define STA_SYSBTNUSE  8
+#define STA_MAX        8
+
+#endif
+
+#ifndef NOWTDEFCONTEXT
+
+#define WTI_DEFCONTEXT  3
+#define WTI_DEFSYSCTX   4
+#define WTI_DDCTXS      400 /* 1.1 */
+#define WTI_DSCTXS      500 /* 1.1 */
+#define CTX_NAME        1
+#define CTX_OPTIONS     2
+#define CTX_STATUS      3
+#define CTX_LOCKS       4
+#define CTX_MSGBASE     5
+#define CTX_DEVICE      6
+#define CTX_PKTRATE     7
+#define CTX_PKTDATA     8
+#define CTX_PKTMODE     9
+#define CTX_MOVEMASK    10
+#define CTX_BTNDNMASK   11
+#define CTX_BTNUPMASK   12
+#define CTX_INORGX      13
+#define CTX_INORGY      14
+#define CTX_INORGZ      15
+#define CTX_INEXTX      16
+#define CTX_INEXTY      17
+#define CTX_INEXTZ      18
+#define CTX_OUTORGX     19
+#define CTX_OUTORGY     20
+#define CTX_OUTORGZ     21
+#define CTX_OUTEXTX     22
+#define CTX_OUTEXTY     23
+#define CTX_OUTEXTZ     24
+#define CTX_SENSX       25
+#define CTX_SENSY       26
+#define CTX_SENSZ       27
+#define CTX_SYSMODE     28
+#define CTX_SYSORGX     29
+#define CTX_SYSORGY     30
+#define CTX_SYSEXTX     31
+#define CTX_SYSEXTY     32
+#define CTX_SYSSENSX    33
+#define CTX_SYSSENSY    34
+#define CTX_MAX         34
+
+#endif
+
+#ifndef NOWTDEVICES
+
+#define WTI_DEVICES      100
+#define DVC_NAME         1
+#define DVC_HARDWARE     2
+#define DVC_NCSRTYPES    3
+#define DVC_FIRSTCSR     4
+#define DVC_PKTRATE      5
+#define DVC_PKTDATA      6
+#define DVC_PKTMODE      7
+#define DVC_CSRDATA      8
+#define DVC_XMARGIN      9
+#define DVC_YMARGIN      10
+#define DVC_ZMARGIN      11
+#define DVC_X            12
+#define DVC_Y            13
+#define DVC_Z            14
+#define DVC_NPRESSURE    15
+#define DVC_TPRESSURE    16
+#define DVC_ORIENTATION  17
+#define DVC_ROTATION     18  /* 1.1 */
+#define DVC_PNPID        19  /* 1.1 */
+#define DVC_MAX          19
+
+#endif
+
+#ifndef NOWTCURSORS
+
+#define WTI_CURSORS      200
+#define CSR_NAME         1
+#define CSR_ACTIVE       2
+#define CSR_PKTDATA      3
+#define CSR_BUTTONS      4
+#define CSR_BUTTONBITS   5
+#define CSR_BTNNAMES     6
+#define CSR_BUTTONMAP    7
+#define CSR_SYSBTNMAP    8
+#define CSR_NPBUTTON     9
+#define CSR_NPBTNMARKS   10
+#define CSR_NPRESPONSE   11
+#define CSR_TPBUTTON     12
+#define CSR_TPBTNMARKS   13
+#define CSR_TPRESPONSE   14
+#define CSR_PHYSID       15  /* 1.1 */
+#define CSR_MODE         16  /* 1.1 */
+#define CSR_MINPKTDATA   17  /* 1.1 */
+#define CSR_MINBUTTONS   18  /* 1.1 */
+#define CSR_CAPABILITIES 19  /* 1.1 */
+/* from http://www.wacomeng.com/devsupport/ibmpc/wacomwindevfaq.html */
+#define CSR_TYPE        20
+#define CSR_MAX         20
+
+#endif
+
+#ifndef NOWTEXTENSIONS
+
+#define WTI_EXTENSIONS  300
+#define EXT_NAME        1
+#define EXT_TAG         2
+#define EXT_MASK        3
+#define EXT_SIZE        4
+#define EXT_AXES        5
+#define EXT_DEFAULT     6
+#define EXT_DEFCONTEXT  7
+#define EXT_DEFSYSCTX   8
+#define EXT_CURSORS     9 
+#define EXT_MAX         109  /* Allow 100 cursors */
+
+#endif
+
+#endif
+
+/***********************************************************************
+ * CONTEXT DATA DEFS
+ */
+
+#define LCNAMELEN 40
+#define LC_NAMELEN 40
+
+typedef struct tagLOGCONTEXTA {
+    char   lcName[LCNAMELEN];
+    UINT   lcOptions;
+    UINT   lcStatus;
+    UINT   lcLocks;
+    UINT   lcMsgBase;
+    UINT   lcDevice;
+    UINT   lcPktRate;
+    WTPKT  lcPktData;
+    WTPKT  lcPktMode;
+    WTPKT  lcMoveMask;
+    DWORD  lcBtnDnMask;
+    DWORD  lcBtnUpMask;
+    LONG   lcInOrgX;
+    LONG   lcInOrgY;
+    LONG   lcInOrgZ;
+    LONG   lcInExtX;
+    LONG   lcInExtY;
+    LONG   lcInExtZ;
+    LONG   lcOutOrgX;
+    LONG   lcOutOrgY;
+    LONG   lcOutOrgZ;
+    LONG   lcOutExtX;
+    LONG   lcOutExtY;
+    LONG   lcOutExtZ;
+    FIX32  lcSensX;
+    FIX32  lcSensY;
+    FIX32  lcSensZ;
+    BOOL   lcSysMode;
+    int    lcSysOrgX;
+    int    lcSysOrgY;
+    int    lcSysExtX;
+    int    lcSysExtY;
+    FIX32  lcSysSensX;
+    FIX32  lcSysSensY;
+} LOGCONTEXTA, *PLOGCONTEXTA, *NPLOGCONTEXTA, *LPLOGCONTEXTA;
+
+typedef struct tagLOGCONTEXTW {
+    WCHAR  lcName[LCNAMELEN];
+    UINT   lcOptions;
+    UINT   lcStatus;
+    UINT   lcLocks;
+    UINT   lcMsgBase;
+    UINT   lcDevice;
+    UINT   lcPktRate;
+    WTPKT  lcPktData;
+    WTPKT  lcPktMode;
+    WTPKT  lcMoveMask;
+    DWORD  lcBtnDnMask;
+    DWORD  lcBtnUpMask;
+    LONG   lcInOrgX;
+    LONG   lcInOrgY;
+    LONG   lcInOrgZ;
+    LONG   lcInExtX;
+    LONG   lcInExtY;
+    LONG   lcInExtZ;
+    LONG   lcOutOrgX;
+    LONG   lcOutOrgY;
+    LONG   lcOutOrgZ;
+    LONG   lcOutExtX;
+    LONG   lcOutExtY;
+    LONG   lcOutExtZ;
+    FIX32  lcSensX;
+    FIX32  lcSensY;
+    FIX32  lcSensZ;
+    BOOL   lcSysMode;
+    int    lcSysOrgX;
+    int    lcSysOrgY;
+    int    lcSysExtX;
+    int    lcSysExtY;
+    FIX32  lcSysSensX;
+    FIX32  lcSysSensY;
+} LOGCONTEXTW, *PLOGCONTEXTW, *NPLOGCONTEXTW, *LPLOGCONTEXTW;
+
+DECL_WINELIB_TYPE_AW(LOGCONTEXT)
+DECL_WINELIB_TYPE_AW(PLOGCONTEXT)
+DECL_WINELIB_TYPE_AW(NPLOGCONTEXT)
+DECL_WINELIB_TYPE_AW(LPLOGCONTEXT)
+
+/* context option values */
+#define CXO_SYSTEM       0x0001
+#define CXO_PEN          0x0002
+#define CXO_MESSAGES     0x0004
+#define CXO_MARGIN       0x8000
+#define CXO_MGNINSIDE    0x4000
+#define CXO_CSRMESSAGES  0x0008  /* 1.1 */
+
+/* context status values */
+#define CXS_DISABLED  0x0001
+#define CXS_OBSCURED  0x0002
+#define CXS_ONTOP     0x0004
+
+/* context lock values */
+#define CXL_INSIZE       0x0001
+#define CXL_INASPECT     0x0002
+#define CXL_SENSITIVITY  0x0004
+#define CXL_MARGIN       0x0008
+#define CXL_SYSOUT       0x0010
+
+/***********************************************************************
+ * EVENT DATA DEFS
+ */
+
+/* For packet structure definition, see pktdef.h */
+
+/* packet status values */
+#define TPS_PROXIMITY  0x0001
+#define TPS_QUEUE_ERR  0x0002
+#define TPS_MARGIN     0x0004
+#define TPS_GRAB       0x0008
+#define TPS_INVERT     0x0010  /* 1.1 */
+
+typedef struct tagORIENTATION {
+    int orAzimuth;
+    int orAltitude;
+    int orTwist;
+} ORIENTATION, *PORIENTATION, *NPORIENTATION, *LPORIENTATION;
+
+typedef struct tagROTATION {  /* 1.1 */
+    int roPitch;
+    int roRoll;
+    int roYaw;
+} ROTATION, *PROTATION, *NPROTATION, *LPROTATION;
+
+/* grandfather in obsolete member names. */
+#define rotPitch  roPitch
+#define rotRoll   roRoll
+#define rotYaw    roYaw
+
+/* relative buttons */
+#define TBN_NONE  0
+#define TBN_UP    1
+#define TBN_DOWN  2
+
+/***********************************************************************
+ * DEVICE CONFIG CONSTANTS
+ */
+
+#ifndef NOWTDEVCFG
+
+#define WTDC_NONE     0
+#define WTDC_CANCEL   1
+#define WTDC_OK       2
+#define WTDC_RESTART  3
+
+#endif
+
+/***********************************************************************
+ * HOOK CONSTANTS
+ */
+
+#ifndef NOWTHOOKS
+
+#define WTH_PLAYBACK  1
+#define WTH_RECORD    2
+
+#define WTHC_GETLPLPFN   (-3)
+#define WTHC_LPLPFNNEXT  (-2)
+#define WTHC_LPFNNEXT    (-1)
+#define WTHC_ACTION      0
+#define WTHC_GETNEXT     1
+#define WTHC_SKIP        2
+
+#endif
+
+/***********************************************************************
+ * PREFERENCE FUNCTION CONSTANTS
+ */
+
+#ifndef NOWTPREF
+
+#define WTP_LPDEFAULT  ((LPVOID)-1L)
+#define WTP_DWDEFAULT  ((DWORD)-1L)
+
+#endif
+
+/***********************************************************************
+ * EXTENSION TAGS AND CONSTANTS
+ */
+
+#ifndef NOWTEXTENSIONS
+
+/* constants for use with pktdef.h */
+#define PKEXT_ABSOLUTE    1
+#define PKEXT_RELATIVE    2
+
+/* Extension tags. */
+#define WTX_OBT       0  /* Out of bounds tracking */
+#define WTX_FKEYS     1  /* Function keys */
+#define WTX_TILT      2  /* Raw Cartesian tilt; 1.1 */
+#define WTX_CSRMASK   3  /* select input by cursor type; 1.1 */
+#define WTX_XBTNMASK  4  /* Extended button mask; 1.1 */
+
+typedef struct tagXBTNMASK {
+    BYTE xBtnDnMask[32];
+    BYTE xBtnUpMask[32];
+} XBTNMASK;
+
+typedef struct tagTILT {  /* 1.1 */
+    int tiltX;
+    int tiltY;
+} TILT;
+
+#endif
+
+/***********************************************************************
+ * Functions
+ */
+
+#ifndef NOWTCALLBACKS
+
+#ifndef NOWTMANAGERFXNS
+
+/* callback function types */
+typedef BOOL (WINAPI * WTENUMPROC)(HCTX, LPARAM);  /* changed CALLBACK->WINAPI, 1.1 */
+typedef BOOL (WINAPI * WTCONFIGPROC)(HCTX, HWND);
+typedef LRESULT (WINAPI * WTHOOKPROC)(int, WPARAM, LPARAM);
+typedef WTHOOKPROC *LPWTHOOKPROC;
+
+#endif
+
+#endif
+
+#ifndef NOWTFUNCTIONS
+
+#ifndef NOWTBASICFXNS
+/* BASIC FUNCTIONS */
+
+#define ORD_WTInfoA       20
+#define ORD_WTInfoW       1020
+#define ORD_WTInfo        WINELIB_NAME_AW(ORD_WTInfo)
+#define ORD_WTOpenA       21
+#define ORD_WTOpenW       1021
+#define ORD_WTOpen        WINELIB_NAME_AW(ORD_WTOpen)
+#define ORD_WTClose       22
+#define ORD_WTPacketsGet  23
+#define ORD_WTPacket      24
+
+UINT WINAPI WTInfoA(UINT, UINT, LPVOID);
+UINT WINAPI WTInfoW(UINT, UINT, LPVOID);
+#define WTInfo WINELIB_NAME_AW(WTInfo)
+HCTX WINAPI WTOpenA(HWND, LPLOGCONTEXTA, BOOL);
+HCTX WINAPI WTOpenW(HWND, LPLOGCONTEXTW, BOOL);
+#define WTOpen WINELIB_NAME_AW(WTOpen)
+BOOL WINAPI WTClose(HCTX);
+int  WINAPI WTPacketsGet(HCTX, int, LPVOID);
+BOOL WINAPI WTPacket(HCTX, UINT, LPVOID);
+
+#endif
+
+#ifndef NOWTVISIBILITYFXNS
+/* VISIBILITY FUNCTIONS */
+
+#define ORD_WTEnable   40
+#define ORD_WTOverlap  41
+
+BOOL WINAPI WTEnable(HCTX, BOOL);
+BOOL WINAPI WTOverlap(HCTX, BOOL);
+
+#endif
+
+#ifndef NOWTCTXEDITFXNS
+/* CONTEXT EDITING FUNCTIONS */
+
+#define ORD_WTConfig   60
+#define ORD_WTGetA     61
+#define ORD_WTGetW     1061
+#define ORD_WTGet      WINELIB_NAME_AW(ORD_WTGet)
+#define ORD_WTSetA     62
+#define ORD_WTSetW     1062
+#define ORD_WTSet      WINELIB_NAME_AW(ORD_WTSet)
+#define ORD_WTExtGet   63
+#define ORD_WTExtSet   64
+#define ORD_WTSave     65
+#define ORD_WTRestore  66
+
+BOOL WINAPI WTConfig(HCTX, HWND);
+BOOL WINAPI WTGetA(HCTX, LPLOGCONTEXTA);
+BOOL WINAPI WTGetW(HCTX, LPLOGCONTEXTW);
+#define WTGet WINELIB_NAME_AW(WTGet)
+BOOL WINAPI WTSetA(HCTX, LPLOGCONTEXTA);
+BOOL WINAPI WTSetW(HCTX, LPLOGCONTEXTW);
+#define WTSet WINELIB_NAME_AW(WTSet)
+BOOL WINAPI WTExtGet(HCTX, UINT, LPVOID);
+BOOL WINAPI WTExtSet(HCTX, UINT, LPVOID);
+BOOL WINAPI WTSave(HCTX, LPVOID);
+HCTX WINAPI WTRestore(HWND, LPVOID, BOOL);
+
+#endif
+
+#ifndef NOWTQUEUEFXNS
+/* ADVANCED PACKET AND QUEUE FUNCTIONS */
+
+#define ORD_WTPacketsPeek   80
+#define ORD_WTDataGet       81
+#define ORD_WTDataPeek      82
+#define ORD_WTQueueSizeGet  84
+#define ORD_WTQueueSizeSet  85
+
+int WINAPI WTPacketsPeek(HCTX, int, LPVOID);
+int WINAPI WTDataGet(HCTX, UINT, UINT, int, LPVOID, LPINT);
+int WINAPI WTDataPeek(HCTX, UINT, UINT, int, LPVOID, LPINT);
+int WINAPI WTQueueSizeGet(HCTX);
+BOOL WINAPI WTQueueSizeSet(HCTX, int);
+
+#endif
+
+#ifndef NOWTHMGRFXNS
+/* MANAGER HANDLE FUNCTIONS */
+
+#define ORD_WTMgrOpen   100
+#define ORD_WTMgrClose  101
+
+HMGR WINAPI WTMgrOpen(HWND, UINT);
+BOOL WINAPI WTMgrClose(HMGR);
+
+#endif
+
+#ifndef NOWTMGRCTXFXNS
+/* MANAGER CONTEXT FUNCTIONS */
+
+#define ORD_WTMgrContextEnum   120
+#define ORD_WTMgrContextOwner  121
+#define ORD_WTMgrDefContext    122
+#define ORD_WTMgrDefContextEx  206
+
+BOOL WINAPI WTMgrContextEnum(HMGR, WTENUMPROC, LPARAM);
+HWND WINAPI WTMgrContextOwner(HMGR, HCTX);
+HCTX WINAPI WTMgrDefContext(HMGR, BOOL);
+HCTX WINAPI WTMgrDefContextEx(HMGR, UINT, BOOL);  /* 1.1 */
+
+#endif
+
+#ifndef NOWTMGRCONFIGFXNS
+/* MANAGER CONFIG BOX  FUNCTIONS */
+
+#define ORD_WTMgrDeviceConfig 140
+
+UINT WINAPI WTMgrDeviceConfig(HMGR, UINT, HWND);
+
+#endif
+
+#ifndef NOWTMGRHOOKFXNS
+/* MANAGER PACKET HOOK FUNCTIONS */
+
+/* OBSOLETE IN WIN32! */
+
+#endif
+
+#ifndef NOWTMGRPREFFXNS
+/* MANAGER PREFERENCE DATA FUNCTIONS */
+
+#define ORD_WTMgrExt                  180
+#define ORD_WTMgrCsrEnable            181
+#define ORD_WTMgrCsrButtonMap         182
+#define ORD_WTMgrCsrPressureBtnMarks  183
+#define ORD_WTMgrCsrPressureResponse  184
+#define ORD_WTMgrCsrExt               185
+
+BOOL WINAPI WTMgrExt(HMGR, UINT, LPVOID);
+BOOL WINAPI WTMgrCsrEnable(HMGR, UINT, BOOL);
+BOOL WINAPI WTMgrCsrButtonMap(HMGR, UINT, LPBYTE, LPBYTE);
+BOOL WINAPI WTMgrCsrPressureBtnMarks(HMGR, UINT, DWORD, DWORD);
+BOOL WINAPI WTMgrCsrPressureResponse(HMGR, UINT, UINT *, UINT *);
+BOOL WINAPI WTMgrCsrExt(HMGR, UINT, UINT, LPVOID);
+
+#endif
+
+/***********************************************************************
+ * Win32 replacements for non-portable functions.
+ */
+
+#ifndef NOWTQUEUEFXNS
+/* ADVANCED PACKET AND QUEUE FUNCTIONS */
+
+#define ORD_WTQueuePacketsEx  200
+
+BOOL WINAPI WTQueuePacketsEx(HCTX, UINT *, UINT *);
+
+#endif
+
+#ifndef NOWTMGRCONFIGFXNS
+/* MANAGER CONFIG BOX FUNCTIONS */
+
+#define ORD_WTMgrConfigReplaceExA  202
+#define ORD_WTMgrConfigReplaceExW  1202
+#define ORD_WTMgrConfigReplaceEx   WINELIB_NAME_AW(ORD_WTMgrConfigReplaceEx)
+
+BOOL WINAPI WTMgrConfigReplaceExA(HMGR, BOOL, LPSTR, LPSTR);
+BOOL WINAPI WTMgrConfigReplaceExW(HMGR, BOOL, LPWSTR, LPSTR);
+#define WTMgrConfigReplaceEx WINELIB_NAME_AW(WTMgrConfigReplaceEx)
+
+#endif
+
+#ifndef NOWTMGRHOOKFXNS
+/* MANAGER PACKET HOOK FUNCTIONS */
+
+#define ORD_WTMgrPacketHookExA   203
+#define ORD_WTMgrPacketHookExW   1203
+#define ORD_WTMgrPacketHookEx    WINELIB_NAME_AW(ORD_WTMgrPacketHookEx)
+#define ORD_WTMgrPacketUnhook    204
+#define ORD_WTMgrPacketHookNext  205
+
+HWTHOOK WINAPI WTMgrPacketHookExA(HMGR, int, LPSTR, LPSTR);
+HWTHOOK WINAPI WTMgrPacketHookExW(HMGR, int, LPWSTR, LPSTR);
+#define WTMgrPacketHookEx WINELIB_NAME_AW(WTMgrPacketHookEx)
+BOOL    WINAPI WTMgrPacketUnhook(HWTHOOK);
+LRESULT WINAPI WTMgrPacketHookNext(HWTHOOK, int, WPARAM, LPARAM);
+
+#endif
+
+#ifndef NOWTMGRPREFFXNS
+/* MANAGER PREFERENCE DATA FUNCTIONS */
+
+#define ORD_WTMgrCsrPressureBtnMarksEx  201
+
+BOOL WINAPI WTMgrCsrPressureBtnMarksEx(HMGR, UINT, UINT *, UINT *);
+
+#endif
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* defined(__WINE_WINTAB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h
new file mode 100644
index 0000000..d660033
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1991-1998 by LCS/Telegraphics
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTABX_H
+#define __WINE_WINTABX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/***********************************************************************
+ * Wintab message crackers
+ */
+
+#ifndef HANDLE_MSG
+# define HANDLE_MSG(hwnd, message, fn) \
+    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
+#endif
+
+/* void Cls_OnWintabPacket(HWND hwnd, HCTX hCtx, UINT sn) */
+#define HANDLE_WT_PACKET(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(lParam), (UINT)(wParam)), 0L)
+#define FORWARD__WT_PACKET(hwnd, bs, hCtx, sn, fn) \
+    (void)(fn)((hwnd), _WT_PACKET(bs), (WPARAM)(UINT)(sn), (LPARAM)(HCTX)(hCtx))
+#define FORWARD_WT_PACKET(hwnd, hCtx, sn, fn) \
+    FORWARD__WT_PACKET(hwnd, WT_DEFBASE, hCtx, sn, fn)
+
+/* void Cls_OnWintabCtxOpen(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXOPEN(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXOPEN(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXOPEN(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXOPEN(hwnd, hCtx, sf, fn) \
+    FORWARD__WT_CTXOPEN(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxClose(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXCLOSE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXCLOSE(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXCLOSE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXCLOSE(hwnd, hCtx, sf, fn) \
+    FORWARD__WT_CTXCLOSE(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxUpdate(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXUPDATE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXUPDATE(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXUPDATE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXUPDATE(hwnd, hCtx, sf, fn) \
+    FORWARD__WT_CTXUPDATE(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxOverlap(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXOVERLAP(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXOVERLAP(hwnd, bs, hCtx, sf, fn) \
+    (void)(fn)((hwnd), _WT_CTXOVERLAP(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXOVERLAP(hwnd, hCtx, sf, fn) \
+    FORWARD__WT_CTXOVERLAP(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabProximity(HWND hwnd, HCTX hCtx, BOOL cp, BOOL hp) */
+#define HANDLE_WT_PROXIMITY(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HCTX)(wParam), (BOOL)LOWORD(lParam),  (BOOL)HIWORD(lParam)), 0L)
+#define FORWARD__WT_PROXIMITY(hwnd, bs, hCtx, cp, hp, fn) \
+    (void)(fn)((hwnd), _WT_PROXIMITY(bs), (WPARAM)(HCTX)(hCtx), MAKELPARAM((cp), (hp))
+#define FORWARD_WT_PROXIMITY(hwnd, hCtx, sf, fn) \
+    FORWARD__WT_PROXIMITY(hwnd, WT_DEFBASE, hCtx, cp, hp, fn)
+
+/* void Cls_OnWintabInfoChange(HWND hwnd, HMGR hMgr, UINT c, UINT i) */
+#define HANDLE_WT_INFOCHANGE(hwnd, wParam, lParam, fn) \
+    ((fn)((hwnd), (HMGR)(wParam), (UINT)LOWORD(lParam),  (UINT)HIWORD(lParam)), 0L)
+#define FORWARD__WT_INFOCHANGE(hwnd, bs, hMgr, cp, hp, fn) \
+    (void)(fn)((hwnd), _WT_INFOCHANGE(bs), (WPARAM)(HMGR)(hMgr), MAKELPARAM((c), (i))
+#define FORWARD_WT_INFOCHANGE(hwnd, hMgr, sf, fn) \
+    FORWARD__WT_INFOCHANGE(hwnd, WT_DEFBASE, hMgr, cp, hp, fn)
+
+/***********************************************************************
+ * Alternate porting layer macros
+ */
+
+#define GET_WT_PACKET_HCTX(wp, lp)    ((HCTX)lp)
+#define GET_WT_PACKET_SERIAL(wp, lp)  (wp)
+#define GET_WT_PACKET_MPS(h, s)       (s), (LPARAM)(h)
+
+#define GET_WT_CTXOPEN_HCTX(wp, lp)    ((HCTX)wp)
+#define GET_WT_CTXOPEN_STATUS(wp, lp)  ((UINT)lp)
+#define GET_WT_CTXOPEN_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXCLOSE_HCTX(wp, lp)    ((HCTX)wp)
+#define GET_WT_CTXCLOSE_STATUS(wp, lp)  ((UINT)lp)
+#define GET_WT_CTXCLOSE_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXUPDATE_HCTX(wp, lp)    ((HCTX)wp)
+#define GET_WT_CTXUPDATE_STATUS(wp, lp)  ((UINT)lp)
+#define GET_WT_CTXUPDATE_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXOVERLAP_HCTX(wp, lp)    ((HCTX)wp)
+#define GET_WT_CTXOVERLAP_STATUS(wp, lp)  ((UINT)lp)
+#define GET_WT_CTXOVERLAP_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_PROXIMITY_HCTX(wp, lp)      ((HCTX)wp)
+#define GET_WT_PROXIMITY_CTXPROX(wp, lp)   LOWORD(lp)
+#define GET_WT_PROXIMITY_HARDPROX(wp, lp)  HIWORD(lp)
+#define GET_WT_PROXIMITY_MPS(h, fc, fh)    (WPARAM)(h), MAKELONG(fc, fh)
+
+#define GET_WT_INFOCHANGE_HMGR(wp, lp)      ((HMGR)wp)
+#define GET_WT_INFOCHANGE_CATEGORY(wp, lp)  LOWORD(lp)
+#define GET_WT_INFOCHANGE_INDEX(wp, lp)     HIWORD(lp)
+#define GET_WT_INFOCHANGE_MPS(h, c, i)      (WPARAM)(h), MAKELONG(c, i)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* defined(__WINE_WINTABX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h
new file mode 100644
index 0000000..6b59d24
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h
@@ -0,0 +1,2708 @@
+/*
+ * Internal NT APIs and data structures
+ *
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTERNL_H
+#define __WINE_WINTERNL_H
+
+#include <windef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+
+/**********************************************************************
+ * Fundamental types and data structures
+ */
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+
+typedef const char *PCSZ;
+
+typedef short CSHORT;
+typedef CSHORT *PCSHORT;
+
+#ifndef __STRING_DEFINED__
+#define __STRING_DEFINED__
+typedef struct _STRING {
+  USHORT Length;
+  USHORT MaximumLength;
+  PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+
+typedef STRING ANSI_STRING;
+typedef PSTRING PANSI_STRING;
+typedef const STRING *PCANSI_STRING;
+
+typedef STRING OEM_STRING;
+typedef PSTRING POEM_STRING;
+typedef const STRING *PCOEM_STRING;
+
+#ifndef __UNICODE_STRING_DEFINED__
+#define __UNICODE_STRING_DEFINED__
+typedef struct _UNICODE_STRING {
+  USHORT Length;        /* bytes */
+  USHORT MaximumLength; /* bytes */
+  PWSTR  Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+typedef const UNICODE_STRING *PCUNICODE_STRING;
+
+#ifndef _FILETIME_
+#define _FILETIME_
+/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
+typedef struct _FILETIME
+{
+#ifdef WORDS_BIGENDIAN
+  DWORD  dwHighDateTime;
+  DWORD  dwLowDateTime;
+#else
+  DWORD  dwLowDateTime;
+  DWORD  dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#endif /* _FILETIME_ */
+
+/*
+ * RTL_SYSTEM_TIME and RTL_TIME_ZONE_INFORMATION are the same as
+ * the SYSTEMTIME and TIME_ZONE_INFORMATION structures defined
+ * in winbase.h, however we need to define them separately so
+ * winternl.h doesn't depend on winbase.h.  They are used by
+ * RtlQueryTimeZoneInformation and RtlSetTimeZoneInformation.
+ * The names are guessed; if anybody knows the real names, let me know.
+ */
+typedef struct _RTL_SYSTEM_TIME {
+    WORD wYear;
+    WORD wMonth;
+    WORD wDayOfWeek;
+    WORD wDay;
+    WORD wHour;
+    WORD wMinute;
+    WORD wSecond;
+    WORD wMilliseconds;
+} RTL_SYSTEM_TIME, *PRTL_SYSTEM_TIME;
+
+typedef struct _RTL_TIME_ZONE_INFORMATION {
+    LONG Bias;
+    WCHAR StandardName[32];
+    RTL_SYSTEM_TIME StandardDate;
+    LONG StandardBias;
+    WCHAR DaylightName[32];
+    RTL_SYSTEM_TIME DaylightDate;
+    LONG DaylightBias;
+} RTL_TIME_ZONE_INFORMATION, *PRTL_TIME_ZONE_INFORMATION;
+
+typedef struct _CLIENT_ID
+{
+   HANDLE UniqueProcess;
+   HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+typedef struct _CURDIR
+{
+    UNICODE_STRING DosPath;
+    PVOID Handle;
+} CURDIR, *PCURDIR;
+
+typedef struct RTL_DRIVE_LETTER_CURDIR
+{
+    USHORT              Flags;
+    USHORT              Length;
+    ULONG               TimeStamp;
+    UNICODE_STRING      DosPath;
+} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
+
+typedef struct tagRTL_BITMAP {
+    ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
+    PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef const RTL_BITMAP *PCRTL_BITMAP;
+
+typedef struct tagRTL_BITMAP_RUN {
+    ULONG StartingIndex; /* Bit position at which run starts */
+    ULONG NumberOfBits;  /* Size of the run in bits */
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
+
+typedef struct _RTL_USER_PROCESS_PARAMETERS
+{
+    ULONG               AllocationSize;
+    ULONG               Size;
+    ULONG               Flags;
+    ULONG               DebugFlags;
+    HANDLE              ConsoleHandle;
+    ULONG               ConsoleFlags;
+    HANDLE              hStdInput;
+    HANDLE              hStdOutput;
+    HANDLE              hStdError;
+    CURDIR              CurrentDirectory;
+    UNICODE_STRING      DllPath;
+    UNICODE_STRING      ImagePathName;
+    UNICODE_STRING      CommandLine;
+    PWSTR               Environment;
+    ULONG               dwX;
+    ULONG               dwY;
+    ULONG               dwXSize;
+    ULONG               dwYSize;
+    ULONG               dwXCountChars;
+    ULONG               dwYCountChars;
+    ULONG               dwFillAttribute;
+    ULONG               dwFlags;
+    ULONG               wShowWindow;
+    UNICODE_STRING      WindowTitle;
+    UNICODE_STRING      Desktop;
+    UNICODE_STRING      ShellInfo;
+    UNICODE_STRING      RuntimeInfo;
+    RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
+} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+
+/* value for Flags field (FIXME: not the correct name) */
+#define PROCESS_PARAMS_FLAG_NORMALIZED 1
+
+typedef struct _PEB_LDR_DATA
+{
+    ULONG               Length;
+    BOOLEAN             Initialized;
+    PVOID               SsHandle;
+    LIST_ENTRY          InLoadOrderModuleList;
+    LIST_ENTRY          InMemoryOrderModuleList;
+    LIST_ENTRY          InInitializationOrderModuleList;
+} PEB_LDR_DATA, *PPEB_LDR_DATA;
+
+typedef struct _GDI_TEB_BATCH
+{
+    ULONG  Offset;
+    HANDLE HDC;
+    ULONG  Buffer[0x136];
+} GDI_TEB_BATCH;
+
+typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
+{
+    struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
+    struct _ACTIVATION_CONTEXT                 *ActivationContext;
+    ULONG                                       Flags;
+} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
+
+typedef struct _ACTIVATION_CONTEXT_STACK
+{
+    ULONG                               Flags;
+    ULONG                               NextCookieSequenceNumber;
+    RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame;
+    LIST_ENTRY                          FrameListCache;
+} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
+
+/***********************************************************************
+ * PEB data structure
+ */
+typedef struct _PEB
+{                                                                 /* win32/win64 */
+    BOOLEAN                      InheritedAddressSpace;             /* 000/000 */
+    BOOLEAN                      ReadImageFileExecOptions;          /* 001/001 */
+    BOOLEAN                      BeingDebugged;                     /* 002/002 */
+    BOOLEAN                      SpareBool;                         /* 003/003 */
+    HANDLE                       Mutant;                            /* 004/008 */
+    HMODULE                      ImageBaseAddress;                  /* 008/010 */
+    PPEB_LDR_DATA                LdrData;                           /* 00c/018 */
+    RTL_USER_PROCESS_PARAMETERS *ProcessParameters;                 /* 010/020 */
+    PVOID                        SubSystemData;                     /* 014/028 */
+    HANDLE                       ProcessHeap;                       /* 018/030 */
+    PRTL_CRITICAL_SECTION        FastPebLock;                       /* 01c/038 */
+    PVOID /*PPEBLOCKROUTINE*/    FastPebLockRoutine;                /* 020/040 */
+    PVOID /*PPEBLOCKROUTINE*/    FastPebUnlockRoutine;              /* 024/048 */
+    ULONG                        EnvironmentUpdateCount;            /* 028/050 */
+    PVOID                        KernelCallbackTable;               /* 02c/058 */
+    ULONG                        Reserved[2];                       /* 030/060 */
+    PVOID /*PPEB_FREE_BLOCK*/    FreeList;                          /* 038/068 */
+    ULONG                        TlsExpansionCounter;               /* 03c/070 */
+    PRTL_BITMAP                  TlsBitmap;                         /* 040/078 */
+    ULONG                        TlsBitmapBits[2];                  /* 044/080 */
+    PVOID                        ReadOnlySharedMemoryBase;          /* 04c/088 */
+    PVOID                        ReadOnlySharedMemoryHeap;          /* 050/090 */
+    PVOID                       *ReadOnlyStaticServerData;          /* 054/098 */
+    PVOID                        AnsiCodePageData;                  /* 058/0a0 */
+    PVOID                        OemCodePageData;                   /* 05c/0a8 */
+    PVOID                        UnicodeCaseTableData;              /* 060/0b0 */
+    ULONG                        NumberOfProcessors;                /* 064/0b8 */
+    ULONG                        NtGlobalFlag;                      /* 068/0bc */
+    LARGE_INTEGER                CriticalSectionTimeout;            /* 070/0c0 */
+    SIZE_T                       HeapSegmentReserve;                /* 078/0c8 */
+    SIZE_T                       HeapSegmentCommit;                 /* 07c/0d0 */
+    SIZE_T                       HeapDeCommitTotalFreeThreshold;    /* 080/0d8 */
+    SIZE_T                       HeapDeCommitFreeBlockThreshold;    /* 084/0e0 */
+    ULONG                        NumberOfHeaps;                     /* 088/0e8 */
+    ULONG                        MaximumNumberOfHeaps;              /* 08c/0ec */
+    PVOID                       *ProcessHeaps;                      /* 090/0f0 */
+    PVOID                        GdiSharedHandleTable;              /* 094/0f8 */
+    PVOID                        ProcessStarterHelper;              /* 098/100 */
+    PVOID                        GdiDCAttributeList;                /* 09c/108 */
+    PVOID                        LoaderLock;                        /* 0a0/110 */
+    ULONG                        OSMajorVersion;                    /* 0a4/118 */
+    ULONG                        OSMinorVersion;                    /* 0a8/11c */
+    ULONG                        OSBuildNumber;                     /* 0ac/120 */
+    ULONG                        OSPlatformId;                      /* 0b0/124 */
+    ULONG                        ImageSubSystem;                    /* 0b4/128 */
+    ULONG                        ImageSubSystemMajorVersion;        /* 0b8/12c */
+    ULONG                        ImageSubSystemMinorVersion;        /* 0bc/130 */
+    ULONG                        ImageProcessAffinityMask;          /* 0c0/134 */
+    HANDLE                       GdiHandleBuffer[28];               /* 0c4/138 */
+    ULONG                        unknown[6];                        /* 134/218 */
+    PVOID                        PostProcessInitRoutine;            /* 14c/230 */
+    PRTL_BITMAP                  TlsExpansionBitmap;                /* 150/238 */
+    ULONG                        TlsExpansionBitmapBits[32];        /* 154/240 */
+    ULONG                        SessionId;                         /* 1d4/2c0 */
+    ULARGE_INTEGER               AppCompatFlags;                    /* 1d8/2c8 */
+    ULARGE_INTEGER               AppCompatFlagsUser;                /* 1e0/2d0 */
+    PVOID                        ShimData;                          /* 1e8/2d8 */
+    PVOID                        AppCompatInfo;                     /* 1ec/2e0 */
+    UNICODE_STRING               CSDVersion;                        /* 1f0/2e8 */
+    PVOID                        ActivationContextData;             /* 1f8/2f8 */
+    PVOID                        ProcessAssemblyStorageMap;         /* 1fc/300 */
+    PVOID                        SystemDefaultActivationData;       /* 200/308 */
+    PVOID                        SystemAssemblyStorageMap;          /* 204/310 */
+    SIZE_T                       MinimumStackCommit;                /* 208/318 */
+    PVOID                       *FlsCallback;                       /* 20c/320 */
+    LIST_ENTRY                   FlsListHead;                       /* 210/328 */
+    PRTL_BITMAP                  FlsBitmap;                         /* 218/338 */
+    ULONG                        FlsBitmapBits[4];                  /* 21c/340 */
+} PEB, *PPEB;
+
+
+/***********************************************************************
+ * TEB data structure
+ */
+typedef struct _TEB
+{                                                                 /* win32/win64 */
+    NT_TIB                       Tib;                               /* 000/0000 */
+    PVOID                        EnvironmentPointer;                /* 01c/0038 */
+    CLIENT_ID                    ClientId;                          /* 020/0040 */
+    PVOID                        ActiveRpcHandle;                   /* 028/0050 */
+    PVOID                        ThreadLocalStoragePointer;         /* 02c/0058 */
+    PPEB                         Peb;                               /* 030/0060 */
+    ULONG                        LastErrorValue;                    /* 034/0068 */
+    ULONG                        CountOfOwnedCriticalSections;      /* 038/006c */
+    PVOID                        CsrClientThread;                   /* 03c/0070 */
+    PVOID                        Win32ThreadInfo;                   /* 040/0078 */
+    ULONG                        Win32ClientInfo[31];               /* 044/0080 used for user32 private data in Wine */
+    PVOID                        WOW32Reserved;                     /* 0c0/0100 */
+    ULONG                        CurrentLocale;                     /* 0c4/0108 */
+    ULONG                        FpSoftwareStatusRegister;          /* 0c8/010c */
+    PVOID                        SystemReserved1[54];               /* 0cc/0110 used for kernel32 private data in Wine */
+    LONG                         ExceptionCode;                     /* 1a4/02c0 */
+    ACTIVATION_CONTEXT_STACK     ActivationContextStack;            /* 1a8/02c8 */
+    BYTE                         SpareBytes1[24];                   /* 1bc/02e8 used for ntdll private data in Wine */
+    PVOID                        SystemReserved2[10];               /* 1d4/0300 used for ntdll private data in Wine */
+    GDI_TEB_BATCH                GdiTebBatch;                       /* 1fc/0350 used for vm86 private data in Wine */
+    HANDLE                       gdiRgn;                            /* 6dc/0838 */
+    HANDLE                       gdiPen;                            /* 6e0/0840 */
+    HANDLE                       gdiBrush;                          /* 6e4/0848 */
+    CLIENT_ID                    RealClientId;                      /* 6e8/0850 */
+    HANDLE                       GdiCachedProcessHandle;            /* 6f0/0860 */
+    ULONG                        GdiClientPID;                      /* 6f4/0868 */
+    ULONG                        GdiClientTID;                      /* 6f8/086c */
+    PVOID                        GdiThreadLocaleInfo;               /* 6fc/0870 */
+    ULONG                        UserReserved[5];                   /* 700/0878 */
+    PVOID                        glDispachTable[280];               /* 714/0890 */
+    PVOID                        glReserved1[26];                   /* b74/1150 */
+    PVOID                        glReserved2;                       /* bdc/1220 */
+    PVOID                        glSectionInfo;                     /* be0/1228 */
+    PVOID                        glSection;                         /* be4/1230 */
+    PVOID                        glTable;                           /* be8/1238 */
+    PVOID                        glCurrentRC;                       /* bec/1240 */
+    PVOID                        glContext;                         /* bf0/1248 */
+    ULONG                        LastStatusValue;                   /* bf4/1250 */
+    UNICODE_STRING               StaticUnicodeString;               /* bf8/1258 used by advapi32 */
+    WCHAR                        StaticUnicodeBuffer[261];          /* c00/1268 used by advapi32 */
+    PVOID                        DeallocationStack;                 /* e0c/1478 */
+    PVOID                        TlsSlots[64];                      /* e10/1480 */
+    LIST_ENTRY                   TlsLinks;                          /* f10/1680 */
+    PVOID                        Vdm;                               /* f18/1690 */
+    PVOID                        ReservedForNtRpc;                  /* f1c/1698 */
+    PVOID                        DbgSsReserved[2];                  /* f20/16a0 */
+    ULONG                        HardErrorDisabled;                 /* f28/16b0 */
+    PVOID                        Instrumentation[16];               /* f2c/16b8 */
+    PVOID                        WinSockData;                       /* f6c/1738 */
+    ULONG                        GdiBatchCount;                     /* f70/1740 */
+    ULONG                        Spare2;                            /* f74/1744 */
+    PVOID                        Spare3;                            /* f78/1748 */
+    PVOID                        Spare4;                            /* f7c/1750 */
+    PVOID                        ReservedForOle;                    /* f80/1758 */
+    ULONG                        WaitingOnLoaderLock;               /* f84/1760 */
+    PVOID                        Reserved5[3];                      /* f88/1768 */
+    PVOID                       *TlsExpansionSlots;                 /* f94/1780 */
+    ULONG                        ImpersonationLocale;               /* f98/1788 */
+    ULONG                        IsImpersonating;                   /* f9c/178c */
+    PVOID                        NlsCache;                          /* fa0/1790 */
+    PVOID                        ShimData;                          /* fa4/1798 */
+    ULONG                        HeapVirtualAffinity;               /* fa8/17a0 */
+    PVOID                        CurrentTransactionHandle;          /* fac/17a8 */
+    PVOID                        ActiveFrame;                       /* fb0/17b0 */
+#ifdef _WIN64
+    PVOID                        unknown[2];                        /*     17b8 */
+#endif
+    PVOID                       *FlsSlots;                          /* fb4/17c8 */
+} TEB, *PTEB;
+
+/***********************************************************************
+ * Enums
+ */
+
+typedef enum _FILE_INFORMATION_CLASS {
+    FileDirectoryInformation = 1,
+    FileFullDirectoryInformation,
+    FileBothDirectoryInformation,
+    FileBasicInformation,
+    FileStandardInformation,
+    FileInternalInformation,
+    FileEaInformation,
+    FileAccessInformation,
+    FileNameInformation,
+    FileRenameInformation,
+    FileLinkInformation,
+    FileNamesInformation,
+    FileDispositionInformation,
+    FilePositionInformation,
+    FileFullEaInformation,
+    FileModeInformation,
+    FileAlignmentInformation,
+    FileAllInformation,
+    FileAllocationInformation,
+    FileEndOfFileInformation,
+    FileAlternateNameInformation,
+    FileStreamInformation,
+    FilePipeInformation,
+    FilePipeLocalInformation,
+    FilePipeRemoteInformation,
+    FileMailslotQueryInformation,
+    FileMailslotSetInformation,
+    FileCompressionInformation,
+    FileObjectIdInformation,
+    FileCompletionInformation,
+    FileMoveClusterInformation,
+    FileQuotaInformation,
+    FileReparsePointInformation,
+    FileNetworkOpenInformation,
+    FileAttributeTagInformation,
+    FileTrackingInformation,
+    FileIdBothDirectoryInformation,
+    FileIdFullDirectoryInformation,
+    FileValidDataLengthInformation,
+    FileShortNameInformation = 40,
+    /* 41, 42, 43 undocumented */
+    FileSfioReserveInformation = 44,
+    FileSfioVolumeInformation = 45,
+    FileHardLinkInformation = 46,
+    /* 47 undocumented */
+    FileNormalizedNameInformation = 48,
+    /* 49 undocumented */
+    FileIdGlobalTxDirectoryInformation = 50,
+    /* 51, 52, 53 undocumented */
+    FileStandardLinkInformation = 54,
+    FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+typedef struct _FILE_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    ULONG               EaSize;
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
+  FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
+
+typedef struct _FILE_ID_FULL_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    ULONG               EaSize;
+    LARGE_INTEGER       FileId;
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    ULONG               EaSize;
+    CHAR                ShortNameLength;
+    WCHAR               ShortName[12];
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
+  FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+
+typedef struct _FILE_ID_BOTH_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    ULONG               EaSize;
+    CHAR                ShortNameLength;
+    WCHAR               ShortName[12];
+    LARGE_INTEGER       FileId;
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_BASIC_INFORMATION {
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    ULONG FileAttributes;
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+
+typedef struct _FILE_STANDARD_INFORMATION {
+    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER EndOfFile;
+    ULONG NumberOfLinks;
+    BOOLEAN DeletePending;
+    BOOLEAN Directory;
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+
+typedef struct _FILE_INTERNAL_INFORMATION {
+    LARGE_INTEGER IndexNumber;
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+
+typedef struct _FILE_EA_INFORMATION {
+    ULONG EaSize;
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
+
+typedef struct _FILE_ACCESS_INFORMATION {
+    ACCESS_MASK AccessFlags;
+} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
+
+typedef struct _FILE_NAME_INFORMATION {
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION {
+    BOOLEAN Replace;
+    HANDLE RootDir;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
+typedef struct _FILE_NAMES_INFORMATION {
+    ULONG NextEntryOffset;
+    ULONG FileIndex;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION {
+    BOOLEAN DoDeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_POSITION_INFORMATION {
+    LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_ALIGNMENT_INFORMATION {
+    ULONG AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
+
+typedef struct _FILE_ALLOCATION_INFORMATION {
+    LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+    LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER EndOfFile;
+    ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef struct _FILE_FULL_EA_INFORMATION {
+    ULONG NextEntryOffset;
+    UCHAR Flags;
+    UCHAR EaNameLength;
+    USHORT EaValueLength;
+    CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+typedef struct _FILE_MODE_INFORMATION {
+    ULONG Mode;
+} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
+
+typedef struct _FILE_STREAM_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG StreamNameLength;
+    LARGE_INTEGER StreamSize;
+    LARGE_INTEGER StreamAllocationSize;
+    WCHAR StreamName[1];
+} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
+{
+    ULONG FileAttributes;
+    ULONG ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
+    ULONG MaximumMessageSize;
+    ULONG MailslotQuota;
+    ULONG NextMessageSize;
+    ULONG MessagesAvailable;
+    LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_SET_INFORMATION {
+    LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
+
+typedef struct _FILE_PIPE_LOCAL_INFORMATION {
+    ULONG NamedPipeType;
+    ULONG NamedPipeConfiguration;
+    ULONG MaximumInstances;
+    ULONG CurrentInstances;
+    ULONG InboundQuota;
+    ULONG ReadDataAvailable;
+    ULONG OutboundQuota;
+    ULONG WriteQuotaAvailable;
+    ULONG NamedPipeState;
+    ULONG NamedPipeEnd;
+} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
+
+typedef struct _FILE_ALL_INFORMATION {
+    FILE_BASIC_INFORMATION     BasicInformation;
+    FILE_STANDARD_INFORMATION  StandardInformation;
+    FILE_INTERNAL_INFORMATION  InternalInformation;
+    FILE_EA_INFORMATION        EaInformation;
+    FILE_ACCESS_INFORMATION    AccessInformation;
+    FILE_POSITION_INFORMATION  PositionInformation;
+    FILE_MODE_INFORMATION      ModeInformation;
+    FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+    FILE_NAME_INFORMATION      NameInformation;
+} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
+
+typedef enum _FSINFOCLASS {
+    FileFsVolumeInformation = 1,
+    FileFsLabelInformation,
+    FileFsSizeInformation,
+    FileFsDeviceInformation,
+    FileFsAttributeInformation,
+    FileFsControlInformation,
+    FileFsFullSizeInformation,
+    FileFsObjectIdInformation,
+    FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+typedef enum _KEY_INFORMATION_CLASS {
+    KeyBasicInformation,
+    KeyNodeInformation,
+    KeyFullInformation,
+    KeyNameInformation
+} KEY_INFORMATION_CLASS;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS {
+    KeyValueBasicInformation,
+    KeyValueFullInformation,
+    KeyValuePartialInformation,
+    KeyValueFullInformationAlign64,
+    KeyValuePartialInformationAlign64
+} KEY_VALUE_INFORMATION_CLASS;
+
+typedef enum _OBJECT_INFORMATION_CLASS {
+    ObjectBasicInformation,
+    ObjectNameInformation,
+    ObjectTypeInformation,
+    ObjectAllInformation,
+    ObjectDataInformation
+} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
+
+typedef enum _PROCESSINFOCLASS {
+    ProcessBasicInformation = 0,
+    ProcessQuotaLimits = 1,
+    ProcessIoCounters = 2,
+    ProcessVmCounters = 3,
+    ProcessTimes = 4,
+    ProcessBasePriority = 5,
+    ProcessRaisePriority = 6,
+    ProcessDebugPort = 7,
+    ProcessExceptionPort = 8,
+    ProcessAccessToken = 9,
+    ProcessLdtInformation = 10,
+    ProcessLdtSize = 11,
+    ProcessDefaultHardErrorMode = 12,
+    ProcessIoPortHandlers = 13,
+    ProcessPooledUsageAndLimits = 14,
+    ProcessWorkingSetWatch = 15,
+    ProcessUserModeIOPL = 16,
+    ProcessEnableAlignmentFaultFixup = 17,
+    ProcessPriorityClass = 18,
+    ProcessWx86Information = 19,
+    ProcessHandleCount = 20,
+    ProcessAffinityMask = 21,
+    ProcessPriorityBoost = 22,
+    ProcessDeviceMap = 23,
+    ProcessSessionInformation = 24,
+    ProcessForegroundInformation = 25,
+    ProcessWow64Information = 26,
+    ProcessImageFileName = 27,
+    ProcessLUIDDeviceMapsEnabled = 28,
+    ProcessBreakOnTermination = 29,
+    ProcessDebugObjectHandle = 30,
+    ProcessDebugFlags = 31,
+    ProcessHandleTracing = 32,
+    ProcessExecuteFlags = 34,
+    MaxProcessInfoClass
+} PROCESSINFOCLASS, PROCESS_INFORMATION_CLASS;
+
+#define MEM_EXECUTE_OPTION_DISABLE   0x01
+#define MEM_EXECUTE_OPTION_ENABLE    0x02
+#define MEM_EXECUTE_OPTION_PERMANENT 0x08
+
+typedef enum _SECTION_INHERIT {
+    ViewShare = 1,
+    ViewUnmap = 2
+} SECTION_INHERIT;
+
+typedef enum _SYSTEM_INFORMATION_CLASS {
+    SystemBasicInformation = 0,
+    SystemCpuInformation = 1,
+    SystemPerformanceInformation = 2,
+    SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
+    Unknown4,
+    SystemProcessInformation = 5,
+    Unknown6,
+    Unknown7,
+    SystemProcessorPerformanceInformation = 8,
+    Unknown9,
+    Unknown10,
+    SystemModuleInformation = 11,
+    Unknown12,
+    Unknown13,
+    Unknown14,
+    Unknown15,
+    SystemHandleInformation = 16,
+    Unknown17,
+    SystemPageFileInformation = 18,
+    Unknown19,
+    Unknown20,
+    SystemCacheInformation = 21,
+    Unknown22,
+    SystemInterruptInformation = 23,
+    SystemDpcBehaviourInformation = 24,
+    SystemFullMemoryInformation = 25,
+    SystemNotImplemented6 = 25,
+    SystemLoadImage = 26,
+    SystemUnloadImage = 27,
+    SystemTimeAdjustmentInformation = 28,
+    SystemTimeAdjustment = 28,
+    SystemSummaryMemoryInformation = 29,
+    SystemNotImplemented7 = 29,
+    SystemNextEventIdInformation = 30,
+    SystemNotImplemented8 = 30,
+    SystemEventIdsInformation = 31,
+    SystemCrashDumpInformation = 32,
+    SystemExceptionInformation = 33,
+    SystemCrashDumpStateInformation = 34,
+    SystemKernelDebuggerInformation = 35,
+    SystemContextSwitchInformation = 36,
+    SystemRegistryQuotaInformation = 37,
+    SystemCurrentTimeZoneInformation = 44,
+    SystemTimeZoneInformation = 44,
+    SystemLookasideInformation = 45,
+    SystemSetTimeSlipEvent = 46,
+    SystemCreateSession = 47,
+    SystemDeleteSession = 48,
+    SystemInvalidInfoClass4 = 49,
+    SystemRangeStartInformation = 50,
+    SystemVerifierInformation = 51,
+    SystemAddVerifier = 52,
+    SystemSessionProcessesInformation	= 53,
+    Unknown54,
+    Unknown55,
+    Unknown56,
+    Unknown57,
+    Unknown58,
+    Unknown59,
+    Unknown60,
+    Unknown61,
+    Unknown62,
+    Unknown63,
+    Unknown64,
+    Unknown65,
+    Unknown66,
+    Unknown67,
+    Unknown68,
+    Unknown69,
+    Unknown70,
+    Unknown71,
+    Unknown72,
+    SystemLogicalProcessorInformation = 73,
+    SystemInformationClassMax
+} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
+
+typedef enum _TIMER_TYPE {
+    NotificationTimer,
+    SynchronizationTimer
+} TIMER_TYPE;
+
+typedef enum _THREADINFOCLASS {
+    ThreadBasicInformation,
+    ThreadTimes,
+    ThreadPriority,
+    ThreadBasePriority,
+    ThreadAffinityMask,
+    ThreadImpersonationToken,
+    ThreadDescriptorTableEntry,
+    ThreadEnableAlignmentFaultFixup,
+    ThreadEventPair_Reusable,
+    ThreadQuerySetWin32StartAddress,
+    ThreadZeroTlsCell,
+    ThreadPerformanceCount,
+    ThreadAmILastThread,
+    ThreadIdealProcessor,
+    ThreadPriorityBoost,
+    ThreadSetTlsArrayAddress,
+    ThreadIsIoPending,
+    ThreadHideFromDebugger,
+    MaxThreadInfoClass
+} THREADINFOCLASS;
+
+typedef struct _THREAD_BASIC_INFORMATION
+{
+    NTSTATUS  ExitStatus;
+    PVOID     TebBaseAddress;
+    CLIENT_ID ClientId;
+    ULONG_PTR AffinityMask;
+    LONG      Priority;
+    LONG      BasePriority;
+} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
+
+typedef struct _THREAD_DESCRIPTOR_INFORMATION
+{
+    DWORD       Selector;
+    LDT_ENTRY   Entry;
+} THREAD_DESCRIPTOR_INFORMATION, *PTHREAD_DESCRIPTOR_INFORMATION;
+
+typedef struct _KERNEL_USER_TIMES {
+    LARGE_INTEGER  CreateTime;
+    LARGE_INTEGER  ExitTime;
+    LARGE_INTEGER  KernelTime;
+    LARGE_INTEGER  UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
+
+typedef enum _WINSTATIONINFOCLASS {
+    WinStationInformation = 8
+} WINSTATIONINFOCLASS;
+
+typedef enum _MEMORY_INFORMATION_CLASS {
+    MemoryBasicInformation,
+    MemoryWorkingSetList,
+    MemorySectionName,
+    MemoryBasicVlmInformation
+} MEMORY_INFORMATION_CLASS;
+
+typedef struct _MEMORY_SECTION_NAME
+{
+    UNICODE_STRING SectionFileName;
+} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
+
+typedef enum _MUTANT_INFORMATION_CLASS
+{
+    MutantBasicInformation
+} MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
+
+typedef struct _MUTANT_BASIC_INFORMATION {
+    LONG        CurrentCount;
+    BOOLEAN     OwnedByCaller;
+    BOOLEAN     AbandonedState;
+} MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
+
+typedef enum _TIMER_INFORMATION_CLASS
+{
+    TimerBasicInformation = 0
+} TIMER_INFORMATION_CLASS;
+
+typedef struct _TIMER_BASIC_INFORMATION
+{
+    LARGE_INTEGER RemainingTime;
+    BOOLEAN       TimerState;
+} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
+
+
+/* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
+typedef enum
+{
+    INVALID_PATH = 0,
+    UNC_PATH,              /* "//foo" */
+    ABSOLUTE_DRIVE_PATH,   /* "c:/foo" */
+    RELATIVE_DRIVE_PATH,   /* "c:foo" */
+    ABSOLUTE_PATH,         /* "/foo" */
+    RELATIVE_PATH,         /* "foo" */
+    DEVICE_PATH,           /* "//./foo" */
+    UNC_DOT_PATH           /* "//." */
+} DOS_PATHNAME_TYPE;
+
+
+/***********************************************************************
+ * Types and data structures
+ */
+
+/* This is used by NtQuerySystemInformation */
+typedef struct _SYSTEM_THREAD_INFORMATION
+{                                    /* win32/win64 */
+    LARGE_INTEGER KernelTime;          /* 00/00 */
+    LARGE_INTEGER UserTime;            /* 08/08 */
+    LARGE_INTEGER CreateTime;          /* 10/10 */
+    DWORD         dwTickCount;         /* 18/18 */
+    LPVOID        StartAddress;        /* 1c/20 */
+    CLIENT_ID     ClientId;            /* 20/28 */
+    DWORD         dwCurrentPriority;   /* 28/38 */
+    DWORD         dwBasePriority;      /* 2c/3c */
+    DWORD         dwContextSwitches;   /* 30/40 */
+    DWORD         dwThreadState;       /* 34/44 */
+    DWORD         dwWaitReason;        /* 38/48 */
+    DWORD         dwUnknown;           /* 3c/4c */
+} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
+
+typedef struct _IO_STATUS_BLOCK {
+  union {
+    NTSTATUS Status;
+    PVOID Pointer;
+  } DUMMYUNIONNAME;
+
+  ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
+
+typedef struct _KEY_BASIC_INFORMATION {
+    LARGE_INTEGER LastWriteTime;
+    ULONG         TitleIndex;
+    ULONG         NameLength;
+    WCHAR         Name[1];
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+typedef struct _KEY_NODE_INFORMATION
+{
+    LARGE_INTEGER LastWriteTime;
+    ULONG         TitleIndex;
+    ULONG         ClassOffset;
+    ULONG         ClassLength;
+    ULONG         NameLength;
+    WCHAR         Name[1];
+   /* Class[1]; */
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+
+typedef struct _KEY_FULL_INFORMATION
+{
+    LARGE_INTEGER LastWriteTime;
+    ULONG         TitleIndex;
+    ULONG         ClassOffset;
+    ULONG         ClassLength;
+    ULONG         SubKeys;
+    ULONG         MaxNameLen;
+    ULONG         MaxClassLen;
+    ULONG         Values;
+    ULONG         MaxValueNameLen;
+    ULONG         MaxValueDataLen;
+    WCHAR         Class[1];
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+
+typedef struct _KEY_NAME_INFORMATION {
+    ULONG         NameLength;
+    WCHAR         Name[1];
+} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
+
+typedef struct _KEY_VALUE_ENTRY
+{
+    PUNICODE_STRING ValueName;
+    ULONG           DataLength;
+    ULONG           DataOffset;
+    ULONG           Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION {
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG NameLength;
+    WCHAR Name[1];
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+typedef struct _KEY_VALUE_FULL_INFORMATION {
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG DataOffset;
+    ULONG DataLength;
+    ULONG NameLength;
+    WCHAR Name[1];
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG DataLength;
+    UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+#ifndef __OBJECT_ATTRIBUTES_DEFINED__
+#define __OBJECT_ATTRIBUTES_DEFINED__
+typedef struct _OBJECT_ATTRIBUTES {
+  ULONG Length;
+  HANDLE RootDirectory;
+  PUNICODE_STRING ObjectName;
+  ULONG Attributes;
+  PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */
+  PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
+
+typedef struct _OBJECT_DATA_INFORMATION {
+    BOOLEAN InheritHandle;
+    BOOLEAN ProtectFromClose;
+} OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
+
+typedef struct _OBJECT_BASIC_INFORMATION {
+    ULONG  Attributes;
+    ACCESS_MASK  GrantedAccess;
+    ULONG  HandleCount;
+    ULONG  PointerCount;
+    ULONG  PagedPoolUsage;
+    ULONG  NonPagedPoolUsage;
+    ULONG  Reserved[3];
+    ULONG  NameInformationLength;
+    ULONG  TypeInformationLength;
+    ULONG  SecurityDescriptorLength;
+    LARGE_INTEGER  CreateTime;
+} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
+
+typedef struct _OBJECT_NAME_INFORMATION {
+    UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+typedef struct __OBJECT_TYPE_INFORMATION {
+    UNICODE_STRING TypeName;
+    ULONG Reserved [22];
+} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
+
+typedef struct _PROCESS_BASIC_INFORMATION {
+#ifdef __WINESRC__
+    DWORD_PTR ExitStatus;
+    PPEB PebBaseAddress;
+    DWORD_PTR AffinityMask;
+    DWORD_PTR BasePriority;
+    ULONG_PTR UniqueProcessId;
+    ULONG_PTR InheritedFromUniqueProcessId;
+#else
+    PVOID Reserved1;
+    PPEB PebBaseAddress;
+    PVOID Reserved2[2];
+    ULONG_PTR UniqueProcessId;
+    PVOID Reserved3;
+#endif
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
+
+#define PROCESS_PRIOCLASS_IDLE          1
+#define PROCESS_PRIOCLASS_NORMAL        2
+#define PROCESS_PRIOCLASS_HIGH          3
+#define PROCESS_PRIOCLASS_REALTIME      4
+#define PROCESS_PRIOCLASS_BELOW_NORMAL  5
+#define PROCESS_PRIOCLASS_ABOVE_NORMAL  6
+
+typedef struct _PROCESS_PRIORITY_CLASS {
+    BOOLEAN     Foreground;
+    UCHAR       PriorityClass;
+} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
+
+typedef struct _RTL_HEAP_DEFINITION {
+    ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
+
+    ULONG Unknown[11];
+} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
+
+typedef struct _RTL_RWLOCK {
+    RTL_CRITICAL_SECTION rtlCS;
+
+    HANDLE hSharedReleaseSemaphore;
+    UINT   uSharedWaiters;
+
+    HANDLE hExclusiveReleaseSemaphore;
+    UINT   uExclusiveWaiters;
+
+    INT    iNumberActive;
+    HANDLE hOwningThreadId;
+    DWORD  dwTimeoutBoost;
+    PVOID  pDebugInfo;
+} RTL_RWLOCK, *LPRTL_RWLOCK;
+
+/* System Information Class 0x00 */
+
+typedef struct _SYSTEM_BASIC_INFORMATION {
+#ifdef __WINESRC__
+    DWORD     unknown;
+    ULONG     KeMaximumIncrement;
+    ULONG     PageSize;
+    ULONG     MmNumberOfPhysicalPages;
+    ULONG     MmLowestPhysicalPage;
+    ULONG     MmHighestPhysicalPage;
+    ULONG_PTR AllocationGranularity;
+    PVOID     LowestUserAddress;
+    PVOID     HighestUserAddress;
+    ULONG_PTR ActiveProcessorsAffinityMask;
+    BYTE      NumberOfProcessors;
+#else
+    BYTE Reserved1[24];
+    PVOID Reserved2[4];
+    CCHAR NumberOfProcessors;
+#endif
+} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
+
+/* System Information Class 0x01 */
+
+typedef struct _SYSTEM_CPU_INFORMATION {
+    WORD Architecture;
+    WORD Level;
+    WORD Revision;       /* combination of CPU model and stepping */
+    WORD Reserved;       /* always zero */
+    DWORD FeatureSet;    /* see bit flags below */
+} SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;
+
+/* definitions of bits in the Feature set for the x86 processors */
+#define CPU_FEATURE_VME    0x00000005   /* Virtual 86 Mode Extensions */
+#define CPU_FEATURE_TSC    0x00000002   /* Time Stamp Counter available */
+#define CPU_FEATURE_CMOV   0x00000008   /* Conditional Move instruction*/
+#define CPU_FEATURE_PGE    0x00000014   /* Page table Entry Global bit */ 
+#define CPU_FEATURE_PSE    0x00000024   /* Page Size Extension */
+#define CPU_FEATURE_MTRR   0x00000040   /* Memory Type Range Registers */
+#define CPU_FEATURE_CX8    0x00000080   /* Compare and eXchange 8 byte instr. */
+#define CPU_FEATURE_MMX    0x00000100   /* Multi Media eXtensions */
+#define CPU_FEATURE_X86    0x00000200   /* seems to be always ON, on the '86 */
+#define CPU_FEATURE_PAT    0x00000400   /* Page Attribute Table */
+#define CPU_FEATURE_FXSR   0x00000800   /* FXSAVE and FXSTORE instructions */
+#define CPU_FEATURE_SEP    0x00001000   /* SYSENTER and SYSEXIT instructions */
+#define CPU_FEATURE_SSE    0x00002000   /* SSE extensions (ext. MMX) */
+#define CPU_FEATURE_3DNOW  0x00004000   /* 3DNOW instructions available */
+#define CPU_FEATURE_SSE2   0x00010000   /* SSE2 extensions (XMMI64) */
+#define CPU_FEATURE_DS     0x00020000   /* Debug Store */
+#define CPU_FEATURE_HTT    0x00040000   /* Hyper Threading Technology */
+
+/* System Information Class 0x02 */
+
+/* Documented in "Windows NT/2000 Native API Reference" by Gary Nebbett. */
+typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
+    LARGE_INTEGER IdleTime;
+    LARGE_INTEGER ReadTransferCount;
+    LARGE_INTEGER WriteTransferCount;
+    LARGE_INTEGER OtherTransferCount;
+    ULONG ReadOperationCount;
+    ULONG WriteOperationCount;
+    ULONG OtherOperationCount;
+    ULONG AvailablePages;
+    ULONG TotalCommittedPages;
+    ULONG TotalCommitLimit;
+    ULONG PeakCommitment;
+    ULONG PageFaults;
+    ULONG WriteCopyFaults;
+    ULONG TransitionFaults;
+    ULONG Reserved1;
+    ULONG DemandZeroFaults;
+    ULONG PagesRead;
+    ULONG PageReadIos;
+    ULONG Reserved2[2];
+    ULONG PagefilePagesWritten;
+    ULONG PagefilePageWriteIos;
+    ULONG MappedFilePagesWritten;
+    ULONG MappedFilePageWriteIos;
+    ULONG PagedPoolUsage;
+    ULONG NonPagedPoolUsage;
+    ULONG PagedPoolAllocs;
+    ULONG PagedPoolFrees;
+    ULONG NonPagedPoolAllocs;
+    ULONG NonPagedPoolFrees;
+    ULONG TotalFreeSystemPtes;
+    ULONG SystemCodePage;
+    ULONG TotalSystemDriverPages;
+    ULONG TotalSystemCodePages;
+    ULONG SmallNonPagedLookasideListAllocateHits;
+    ULONG SmallPagedLookasideListAllocateHits;
+    ULONG Reserved3;
+    ULONG MmSystemCachePage;
+    ULONG PagedPoolPage;
+    ULONG SystemDriverPage;
+    ULONG FastReadNoWait;
+    ULONG FastReadWait;
+    ULONG FastReadResourceMiss;
+    ULONG FastReadNotPossible;
+    ULONG FastMdlReadNoWait;
+    ULONG FastMdlReadWait;
+    ULONG FastMdlReadResourceMiss;
+    ULONG FastMdlReadNotPossible;
+    ULONG MapDataNoWait;
+    ULONG MapDataWait;
+    ULONG MapDataNoWaitMiss;
+    ULONG MapDataWaitMiss;
+    ULONG PinMappedDataCount;
+    ULONG PinReadNoWait;
+    ULONG PinReadWait;
+    ULONG PinReadNoWaitMiss;
+    ULONG PinReadWaitMiss;
+    ULONG CopyReadNoWait;
+    ULONG CopyReadWait;
+    ULONG CopyReadNoWaitMiss;
+    ULONG CopyReadWaitMiss;
+    ULONG MdlReadNoWait;
+    ULONG MdlReadWait;
+    ULONG MdlReadNoWaitMiss;
+    ULONG MdlReadWaitMiss;
+    ULONG ReadAheadIos;
+    ULONG LazyWriteIos;
+    ULONG LazyWritePages;
+    ULONG DataFlushes;
+    ULONG DataPages;
+    ULONG ContextSwitches;
+    ULONG FirstLevelTbFills;
+    ULONG SecondLevelTbFills;
+    ULONG SystemCalls;
+} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
+
+/* System Information Class 0x03 */
+
+typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
+#ifdef __WINESRC__
+    LARGE_INTEGER liKeBootTime;
+    LARGE_INTEGER liKeSystemTime;
+    LARGE_INTEGER liExpTimeZoneBias;
+    ULONG uCurrentTimeZoneId;
+    DWORD dwUnknown1[5];
+#else
+    BYTE Reserved1[48];
+#endif
+} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
+
+/* System Information Class 0x08 */
+
+typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
+    LARGE_INTEGER IdleTime;
+    LARGE_INTEGER KernelTime;
+    LARGE_INTEGER UserTime;
+    LARGE_INTEGER Reserved1[2];
+    ULONG Reserved2;
+} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
+
+/* System Information Class 0x0b */
+
+typedef struct _SYSTEM_DRIVER_INFORMATION {
+    PVOID pvAddress;
+    DWORD dwUnknown1;
+    DWORD dwUnknown2;
+    DWORD dwEntryIndex;
+    DWORD dwUnknown3;
+    char szName[MAX_PATH + 1];
+} SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
+
+/* System Information Class 0x10 */
+
+typedef struct _SYSTEM_HANDLE_ENTRY {
+    ULONG  OwnerPid;
+    BYTE   ObjectType;
+    BYTE   HandleFlags;
+    USHORT HandleValue;
+    PVOID  ObjectPointer;
+    ULONG  AccessMask;
+} SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
+
+typedef struct _SYSTEM_HANDLE_INFORMATION {
+    ULONG               Count;
+    SYSTEM_HANDLE_ENTRY Handle[1];
+} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
+
+/* System Information Class 0x15 */
+
+typedef struct _SYSTEM_CACHE_INFORMATION {
+    ULONG CurrentSize;
+    ULONG PeakSize;
+    ULONG PageFaultCount;
+    ULONG MinimumWorkingSet;
+    ULONG MaximumWorkingSet;
+    ULONG unused[4];
+#ifdef _WIN64
+    ULONG unknown64[7];
+#endif
+} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
+
+/* System Information Class 0x17 */
+
+typedef struct _SYSTEM_INTERRUPT_INFORMATION {
+    BYTE Reserved1[24];
+} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
+
+typedef struct _SYSTEM_CONFIGURATION_INFO {
+    union {
+        ULONG	OemId;
+        struct {
+	    WORD ProcessorArchitecture;
+	    WORD Reserved;
+	} tag1;
+    } tag2;
+    ULONG PageSize;
+    PVOID MinimumApplicationAddress;
+    PVOID MaximumApplicationAddress;
+    ULONG ActiveProcessorMask;
+    ULONG NumberOfProcessors;
+    ULONG ProcessorType;
+    ULONG AllocationGranularity;
+    WORD  ProcessorLevel;
+    WORD  ProcessorRevision;
+} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
+
+typedef struct _SYSTEM_EXCEPTION_INFORMATION {
+    BYTE Reserved1[16];
+} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
+
+typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
+    BYTE Reserved1[32];
+} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
+
+typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
+	BOOLEAN  DebuggerEnabled;
+	BOOLEAN  DebuggerNotPresent;
+} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
+
+/* System Information Class 0x05 */
+
+typedef struct _VM_COUNTERS_ {
+    SIZE_T PeakVirtualSize;
+    SIZE_T VirtualSize;
+    ULONG  PageFaultCount;
+    SIZE_T PeakWorkingSetSize;
+    SIZE_T WorkingSetSize;
+    SIZE_T QuotaPeakPagedPoolUsage;
+    SIZE_T QuotaPagedPoolUsage;
+    SIZE_T QuotaPeakNonPagedPoolUsage;
+    SIZE_T QuotaNonPagedPoolUsage;
+    SIZE_T PagefileUsage;
+    SIZE_T PeakPagefileUsage;
+    SIZE_T PrivatePageCount;
+} VM_COUNTERS, *PVM_COUNTERS;
+
+typedef struct _SYSTEM_PROCESS_INFORMATION {
+#ifdef __WINESRC__                  /* win32/win64 */
+    ULONG NextEntryOffset;             /* 00/00 */
+    DWORD dwThreadCount;               /* 04/04 */
+    DWORD dwUnknown1[6];               /* 08/08 */
+    LARGE_INTEGER CreationTime;        /* 20/20 */
+    LARGE_INTEGER UserTime;            /* 28/28 */
+    LARGE_INTEGER KernelTime;          /* 30/30 */
+    UNICODE_STRING ProcessName;        /* 38/38 */
+    DWORD dwBasePriority;              /* 40/48 */
+    HANDLE UniqueProcessId;            /* 44/50 */
+    HANDLE ParentProcessId;            /* 48/58 */
+    ULONG HandleCount;                 /* 4c/60 */
+    ULONG SessionId;                   /* 50/64 */
+    DWORD dwUnknown4;                  /* 54/68 */
+    VM_COUNTERS vmCounters;            /* 58/70 */
+    IO_COUNTERS ioCounters;            /* 88/d0 */
+    SYSTEM_THREAD_INFORMATION ti[1];   /* b8/100 */
+#else
+    ULONG NextEntryOffset;             /* 00/00 */
+    BYTE Reserved1[52];                /* 04/04 */
+    PVOID Reserved2[3];                /* 38/38 */
+    HANDLE UniqueProcessId;            /* 44/50 */
+    PVOID Reserved3;                   /* 48/58 */
+    ULONG HandleCount;                 /* 4c/60 */
+    BYTE Reserved4[4];                 /* 50/64 */
+    PVOID Reserved5[11];               /* 54/68 */
+    SIZE_T PeakPagefileUsage;          /* 80/c0 */
+    SIZE_T PrivatePageCount;           /* 84/c8 */
+    LARGE_INTEGER Reserved6[6];        /* 88/d0 */
+#endif
+} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
+
+typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
+    ULONG RegistryQuotaAllowed;
+    ULONG RegistryQuotaUsed;
+    PVOID Reserved1;
+} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
+
+typedef struct _SYSTEM_TIME_ADJUSTMENT {
+    ULONG   TimeAdjustment;
+    BOOLEAN TimeAdjustmentDisabled;
+} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
+
+typedef struct _TIME_FIELDS
+{   CSHORT Year;
+    CSHORT Month;
+    CSHORT Day;
+    CSHORT Hour;
+    CSHORT Minute;
+    CSHORT Second;
+    CSHORT Milliseconds;
+    CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+typedef struct _WINSTATIONINFORMATIONW {
+  BYTE Reserved2[70];
+  ULONG LogonId;
+  BYTE Reserved3[1140];
+} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
+
+typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
+
+typedef struct _LDR_RESOURCE_INFO
+{
+    ULONG_PTR Type;
+    ULONG_PTR Name;
+    ULONG Language;
+} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
+
+
+/* debug buffer definitions */
+
+typedef struct _DEBUG_BUFFER {
+  HANDLE SectionHandle;
+  PVOID  SectionBase;
+  PVOID  RemoteSectionBase;
+  ULONG  SectionBaseDelta;
+  HANDLE EventPairHandle;
+  ULONG  Unknown[2];
+  HANDLE RemoteThreadHandle;
+  ULONG  InfoClassMask;
+  ULONG  SizeOfInfo;
+  ULONG  AllocatedSize;
+  ULONG  SectionSize;
+  PVOID  ModuleInformation;
+  PVOID  BackTraceInformation;
+  PVOID  HeapInformation;
+  PVOID  LockInformation;
+  PVOID  Reserved[8];
+} DEBUG_BUFFER, *PDEBUG_BUFFER;
+
+#define PDI_MODULES                       0x01
+#define PDI_BACKTRACE                     0x02
+#define PDI_HEAPS                         0x04
+#define PDI_HEAP_TAGS                     0x08
+#define PDI_HEAP_BLOCKS                   0x10
+#define PDI_LOCKS                         0x20
+
+typedef struct _DEBUG_MODULE_INFORMATION {
+  ULONG  Reserved[2];
+  ULONG  Base;
+  ULONG  Size;
+  ULONG  Flags;
+  USHORT Index;
+  USHORT Unknown;
+  USHORT LoadCount;
+  USHORT ModuleNameOffset;
+  CHAR   ImageName[256];
+} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
+
+typedef struct _DEBUG_HEAP_INFORMATION {
+  ULONG  Base;
+  ULONG  Flags;
+  USHORT Granularity;
+  USHORT Unknown;
+  ULONG  Allocated;
+  ULONG  Committed;
+  ULONG  TagCount;
+  ULONG  BlockCount;
+  ULONG  Reserved[7];
+  PVOID  Tags;
+  PVOID  Blocks;
+} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
+
+typedef struct _DEBUG_LOCK_INFORMATION {
+  PVOID  Address;
+  USHORT Type;
+  USHORT CreatorBackTraceIndex;
+  ULONG  OwnerThreadId;
+  ULONG  ActiveCount;
+  ULONG  ContentionCount;
+  ULONG  EntryCount;
+  ULONG  RecursionCount;
+  ULONG  NumberOfSharedWaiters;
+  ULONG  NumberOfExclusiveWaiters;
+} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
+
+typedef struct _PORT_MESSAGE_HEADER {
+  USHORT DataSize;
+  USHORT MessageSize;
+  USHORT MessageType;
+  USHORT VirtualRangesOffset;
+  CLIENT_ID ClientId;
+  ULONG MessageId;
+  ULONG SectionSize;
+} PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
+
+typedef unsigned short RTL_ATOM, *PRTL_ATOM;
+
+/* Wine doesn't implement atom table as NT does:
+ * - in NT, atom tables are user space tables, which ntdll directly accesses
+ * - on Wine, (even local) atom tables are wineserver objects, hence a HANDLE
+ */
+typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;
+
+typedef enum _ATOM_INFORMATION_CLASS {
+   AtomBasicInformation         = 0,
+   AtomTableInformation         = 1,
+} ATOM_INFORMATION_CLASS;
+
+typedef struct _ATOM_BASIC_INFORMATION {
+   USHORT       ReferenceCount;
+   USHORT       Pinned;
+   USHORT       NameLength;
+   WCHAR        Name[1];
+} ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
+
+/* FIXME: names probably not correct */
+typedef struct _RTL_HANDLE
+{
+    struct _RTL_HANDLE * Next;
+} RTL_HANDLE;
+
+/* FIXME: names probably not correct */
+typedef struct _RTL_HANDLE_TABLE
+{
+    ULONG MaxHandleCount;  /* 0x00 */
+    ULONG HandleSize;      /* 0x04 */
+    ULONG Unused[2];       /* 0x08-0x0c */
+    PVOID NextFree;        /* 0x10 */
+    PVOID FirstHandle;     /* 0x14 */
+    PVOID ReservedMemory;  /* 0x18 */
+    PVOID MaxHandle;       /* 0x1c */
+} RTL_HANDLE_TABLE;
+
+/***********************************************************************
+ * Defines
+ */
+
+/* flags for NtCreateFile and NtOpenFile */
+#define FILE_DIRECTORY_FILE             0x00000001
+#define FILE_WRITE_THROUGH              0x00000002
+#define FILE_SEQUENTIAL_ONLY            0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING  0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT       0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT    0x00000020
+#define FILE_NON_DIRECTORY_FILE         0x00000040
+#define FILE_CREATE_TREE_CONNECTION     0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED       0x00000100
+#define FILE_NO_EA_KNOWLEDGE            0x00000200
+#define FILE_OPEN_FOR_RECOVERY          0x00000400
+#define FILE_RANDOM_ACCESS              0x00000800
+#define FILE_DELETE_ON_CLOSE            0x00001000
+#define FILE_OPEN_BY_FILE_ID            0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT     0x00004000
+#define FILE_NO_COMPRESSION             0x00008000
+#define FILE_RESERVE_OPFILTER           0x00100000
+#define FILE_TRANSACTED_MODE            0x00200000
+#define FILE_OPEN_OFFLINE_FILE          0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY  0x00800000
+
+#define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS  0x000031a7
+
+/* status for NtCreateFile or NtOpenFile */
+#define FILE_SUPERSEDED                 0
+#define FILE_OPENED                     1
+#define FILE_CREATED                    2
+#define FILE_OVERWRITTEN                3
+#define FILE_EXISTS                     4
+#define FILE_DOES_NOT_EXIST             5
+
+/* disposition for NtCreateFile */
+#define FILE_SUPERSEDE                  0
+#define FILE_OPEN                       1
+#define FILE_CREATE                     2
+#define FILE_OPEN_IF                    3
+#define FILE_OVERWRITE                  4
+#define FILE_OVERWRITE_IF               5
+#define FILE_MAXIMUM_DISPOSITION        5
+
+/* Characteristics of a File System */
+#define FILE_REMOVABLE_MEDIA            0x00000001
+#define FILE_READ_ONLY_DEVICE           0x00000002
+#define FILE_FLOPPY_DISKETTE            0x00000004
+#define FILE_WRITE_ONE_MEDIA            0x00000008
+#define FILE_REMOTE_DEVICE              0x00000010
+#define FILE_DEVICE_IS_MOUNTED          0x00000020
+#define FILE_VIRTUAL_VOLUME             0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME  0x00000080
+#define FILE_DEVICE_SECURE_OPEN         0x00000100
+
+/* options for NtCreateNamedPipeFile */
+#define FILE_PIPE_INBOUND               0x00000000
+#define FILE_PIPE_OUTBOUND              0x00000001
+#define FILE_PIPE_FULL_DUPLEX           0x00000002
+
+/* options for pipe's type */
+#define FILE_PIPE_TYPE_MESSAGE          0x00000001
+#define FILE_PIPE_TYPE_BYTE             0x00000000
+/* and client / server end */
+#define FILE_PIPE_SERVER_END            0x00000001
+#define FILE_PIPE_CLIENT_END            0x00000000
+
+#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
+
+#define LOGONID_CURRENT    ((ULONG)-1)
+
+#define OBJ_INHERIT          0x00000002
+#define OBJ_PERMANENT        0x00000010
+#define OBJ_EXCLUSIVE        0x00000020
+#define OBJ_CASE_INSENSITIVE 0x00000040
+#define OBJ_OPENIF           0x00000080
+#define OBJ_OPENLINK         0x00000100
+#define OBJ_KERNEL_HANDLE    0x00000200
+#define OBJ_VALID_ATTRIBUTES 0x000003F2
+
+#define SERVERNAME_CURRENT ((HANDLE)NULL)
+
+typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
+typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
+typedef DWORD (CALLBACK *PRTL_WORK_ITEM_ROUTINE)(LPVOID); /* FIXME: not the right name */
+typedef void (NTAPI *RTL_WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN); /* FIXME: not the right name */
+
+
+/* DbgPrintEx default levels */
+#define DPFLTR_ERROR_LEVEL     0
+#define DPFLTR_WARNING_LEVEL   1
+#define DPFLTR_TRACE_LEVEL     2
+#define DPFLTR_INFO_LEVEL      3
+#define DPFLTR_MASK    0x8000000
+
+/* Well-known LUID values */
+#define SE_MIN_WELL_KNOWN_PRIVILEGE       2
+#define SE_CREATE_TOKEN_PRIVILEGE         2
+#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE   3
+#define SE_LOCK_MEMORY_PRIVILEGE          4
+#define SE_INCREASE_QUOTA_PRIVILEGE       5
+#define SE_UNSOLICITED_INPUT_PRIVILEGE    6 /* obsolete */
+#define SE_MACHINE_ACCOUNT_PRIVILEGE      6
+#define SE_TCB_PRIVILEGE                  7
+#define SE_SECURITY_PRIVILEGE             8
+#define SE_TAKE_OWNERSHIP_PRIVILEGE       9
+#define SE_LOAD_DRIVER_PRIVILEGE         10
+#define SE_SYSTEM_PROFILE_PRIVILEGE      11
+#define SE_SYSTEMTIME_PRIVILEGE          12
+#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
+#define SE_INC_BASE_PRIORITY_PRIVILEGE   14
+#define SE_CREATE_PAGEFILE_PRIVILEGE     15
+#define SE_CREATE_PERMANENT_PRIVILEGE    16
+#define SE_BACKUP_PRIVILEGE              17
+#define SE_RESTORE_PRIVILEGE             18
+#define SE_SHUTDOWN_PRIVILEGE            19
+#define SE_DEBUG_PRIVILEGE               20
+#define SE_AUDIT_PRIVILEGE               21
+#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE  22
+#define SE_CHANGE_NOTIFY_PRIVILEGE       23
+#define SE_REMOTE_SHUTDOWN_PRIVILEGE     24
+#define SE_UNDOCK_PRIVILEGE              25
+#define SE_SYNC_AGENT_PRIVILEGE          26
+#define SE_ENABLE_DELEGATION_PRIVILEGE   27
+#define SE_MANAGE_VOLUME_PRIVILEGE       28
+#define SE_IMPERSONATE_PRIVILEGE         29
+#define SE_CREATE_GLOBAL_PRIVILEGE       30
+#define SE_MAX_WELL_KNOWN_PRIVILEGE      SE_CREATE_GLOBAL_PRIVILEGE
+
+/* NtGlobalFlag bits */
+#define FLG_STOP_ON_EXCEPTION            0x00000001
+#define FLG_SHOW_LDR_SNAPS               0x00000002
+#define FLG_DEBUG_INITIAL_COMMAND        0x00000004
+#define FLG_STOP_ON_HUNG_GUI             0x00000008
+#define FLG_HEAP_ENABLE_TAIL_CHECK       0x00000010
+#define FLG_HEAP_ENABLE_FREE_CHECK       0x00000020
+#define FLG_HEAP_VALIDATE_PARAMETERS     0x00000040
+#define FLG_HEAP_VALIDATE_ALL            0x00000080
+#define FLG_APPLICATION_VERIFIER         0x00000100
+#define FLG_POOL_ENABLE_TAGGING          0x00000400
+#define FLG_HEAP_ENABLE_TAGGING          0x00000800
+#define FLG_USER_STACK_TRACE_DB          0x00001000
+#define FLG_KERNEL_STACK_TRACE_DB        0x00002000
+#define FLG_MAINTAIN_OBJECT_TYPELIST     0x00004000
+#define FLG_HEAP_ENABLE_TAG_BY_DLL       0x00008000
+#define FLG_DISABLE_STACK_EXTENSION      0x00010000
+#define FLG_ENABLE_CSRDEBUG              0x00020000
+#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD    0x00040000
+#define FLG_DISABLE_PAGE_KERNEL_STACKS   0x00080000
+#define FLG_ENABLE_SYSTEM_CRIT_BREAKS    0x00100000
+#define FLG_HEAP_DISABLE_COALESCING      0x00200000
+#define FLG_ENABLE_CLOSE_EXCEPTIONS      0x00400000
+#define FLG_ENABLE_EXCEPTION_LOGGING     0x00800000
+#define FLG_ENABLE_HANDLE_TYPE_TAGGING   0x01000000
+#define FLG_HEAP_PAGE_ALLOCS             0x02000000
+#define FLG_DEBUG_INITIAL_COMMAND_EX     0x04000000
+#define FLG_DISABLE_DBGPRINT             0x08000000
+#define FLG_CRITSEC_EVENT_CREATION       0x10000000
+#define FLG_LDR_TOP_DOWN                 0x20000000
+#define FLG_ENABLE_HANDLE_EXCEPTIONS     0x40000000
+#define FLG_DISABLE_PROTDLLS             0x80000000
+
+/* Rtl*Registry* functions structs and defines */
+#define RTL_REGISTRY_ABSOLUTE             0
+#define RTL_REGISTRY_SERVICES             1
+#define RTL_REGISTRY_CONTROL              2
+#define RTL_REGISTRY_WINDOWS_NT           3
+#define RTL_REGISTRY_DEVICEMAP            4
+#define RTL_REGISTRY_USER                 5
+
+#define RTL_REGISTRY_HANDLE       0x40000000
+#define RTL_REGISTRY_OPTIONAL     0x80000000
+
+#define RTL_QUERY_REGISTRY_SUBKEY         0x00000001
+#define RTL_QUERY_REGISTRY_TOPKEY         0x00000002
+#define RTL_QUERY_REGISTRY_REQUIRED       0x00000004
+#define RTL_QUERY_REGISTRY_NOVALUE        0x00000008
+#define RTL_QUERY_REGISTRY_NOEXPAND       0x00000010
+#define RTL_QUERY_REGISTRY_DIRECT         0x00000020
+#define RTL_QUERY_REGISTRY_DELETE         0x00000040
+
+typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,
+                                                        ULONG  ValueType,
+                                                        PVOID  ValueData,
+                                                        ULONG  ValueLength,
+                                                        PVOID  Context,
+                                                        PVOID  EntryContext);
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE
+{
+  PRTL_QUERY_REGISTRY_ROUTINE  QueryRoutine;
+  ULONG  Flags;
+  PWSTR  Name;
+  PVOID  EntryContext;
+  ULONG  DefaultType;
+  PVOID  DefaultData;
+  ULONG  DefaultLength;
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
+
+typedef struct _KEY_MULTIPLE_VALUE_INFORMATION
+{
+  PUNICODE_STRING ValueName;
+  ULONG DataLength;
+  ULONG DataOffset;
+  ULONG Type;
+} KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;
+
+typedef VOID (CALLBACK *PRTL_OVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPVOID);
+
+typedef VOID (CALLBACK *PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );
+
+typedef enum _EVENT_TYPE {
+  NotificationEvent,
+  SynchronizationEvent
+} EVENT_TYPE, *PEVENT_TYPE;
+
+typedef enum _EVENT_INFORMATION_CLASS {
+  EventBasicInformation
+} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
+
+typedef struct _EVENT_BASIC_INFORMATION {
+  EVENT_TYPE EventType;
+  LONG EventState;
+} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
+
+typedef enum _SEMAPHORE_INFORMATION_CLASS {
+  SemaphoreBasicInformation
+} SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
+
+typedef struct _SEMAPHORE_BASIC_INFORMATION {
+  ULONG CurrentCount;
+  ULONG MaximumCount;
+} SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
+
+typedef enum _SECTION_INFORMATION_CLASS
+{
+  SectionBasicInformation,
+  SectionImageInformation,
+} SECTION_INFORMATION_CLASS;
+
+typedef struct _SECTION_BASIC_INFORMATION {
+  ULONG BaseAddress;
+  ULONG Attributes;
+  LARGE_INTEGER Size;
+} SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
+
+typedef struct _SECTION_IMAGE_INFORMATION {
+  PVOID EntryPoint;
+  ULONG StackZeroBits;
+  ULONG StackReserved;
+  ULONG StackCommit;
+  ULONG ImageSubsystem;
+  WORD SubsystemVersionLow;
+  WORD SubsystemVersionHigh;
+  ULONG Unknown1;
+  ULONG ImageCharacteristics;
+  ULONG ImageMachineType;
+  ULONG Unknown2[3];
+} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
+
+typedef struct _LPC_SECTION_WRITE {
+  ULONG Length;
+  HANDLE SectionHandle;
+  ULONG SectionOffset;
+  ULONG ViewSize;
+  PVOID ViewBase;
+  PVOID TargetViewBase;
+} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
+
+typedef struct _LPC_SECTION_READ {
+  ULONG Length;
+  ULONG ViewSize;
+  PVOID ViewBase;
+} LPC_SECTION_READ, *PLPC_SECTION_READ;
+
+typedef struct _LPC_MESSAGE {
+  USHORT DataSize;
+  USHORT MessageSize;
+  USHORT MessageType;
+  USHORT VirtualRangesOffset;
+  CLIENT_ID ClientId;
+  ULONG_PTR MessageId;
+  ULONG_PTR SectionSize;
+  UCHAR Data[ANYSIZE_ARRAY];
+} LPC_MESSAGE, *PLPC_MESSAGE;
+
+typedef enum _SHUTDOWN_ACTION {
+  ShutdownNoReboot,
+  ShutdownReboot,
+  ShutdownPowerOff
+} SHUTDOWN_ACTION, *PSHUTDOWN_ACTION;
+
+typedef enum _KPROFILE_SOURCE {
+  ProfileTime,
+  ProfileAlignmentFixup,
+  ProfileTotalIssues,
+  ProfilePipelineDry,
+  ProfileLoadInstructions,
+  ProfilePipelineFrozen,
+  ProfileBranchInstructions,
+  ProfileTotalNonissues,
+  ProfileDcacheMisses,
+  ProfileIcacheMisses,
+  ProfileCacheMisses,
+  ProfileBranchMispredictions,
+  ProfileStoreInstructions,
+  ProfileFpInstructions,
+  ProfileIntegerInstructions,
+  Profile2Issue,
+  Profile3Issue,
+  Profile4Issue,
+  ProfileSpecialInstructions,
+  ProfileTotalCycles,
+  ProfileIcacheIssues,
+  ProfileDcacheAccesses,
+  ProfileMemoryBarrierCycles,
+  ProfileLoadLinkedIssues,
+  ProfileMaximum
+} KPROFILE_SOURCE, *PKPROFILE_SOURCE;
+
+typedef struct _DIRECTORY_BASIC_INFORMATION {
+  UNICODE_STRING ObjectName;
+  UNICODE_STRING ObjectTypeName;
+} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
+
+typedef struct _INITIAL_TEB {
+  PVOID StackBase;
+  PVOID StackLimit;
+  PVOID StackCommit;
+  PVOID StackCommitMax;
+  PVOID StackReserved;
+} INITIAL_TEB, *PINITIAL_TEB;
+
+typedef enum _PORT_INFORMATION_CLASS {
+  PortNoInformation
+} PORT_INFORMATION_CLASS, *PPORT_INFORMATION_CLASS;
+
+typedef enum _IO_COMPLETION_INFORMATION_CLASS {
+  IoCompletionBasicInformation
+} IO_COMPLETION_INFORMATION_CLASS, *PIO_COMPLETION_INFORMATION_CLASS;
+
+typedef struct _FILE_COMPLETION_INFORMATION {
+    HANDLE CompletionPort;
+    ULONG_PTR CompletionKey;
+} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
+
+#define IO_COMPLETION_QUERY_STATE  0x0001
+#define IO_COMPLETION_MODIFY_STATE 0x0002
+#define IO_COMPLETION_ALL_ACCESS   (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+typedef enum _HARDERROR_RESPONSE_OPTION {
+  OptionAbortRetryIgnore,
+  OptionOk,
+  OptionOkCancel,
+  OptionRetryCancel,
+  OptionYesNo,
+  OptionYesNoCancel,
+  OptionShutdownSystem
+} HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
+
+typedef enum _HARDERROR_RESPONSE {
+  ResponseReturnToCaller,
+  ResponseNotHandled,
+  ResponseAbort,
+  ResponseCancel,
+  ResponseIgnore,
+  ResponseNo,
+  ResponseOk,
+  ResponseRetry,
+  ResponseYes
+} HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
+
+typedef enum _SYSDBG_COMMAND {
+  SysDbgQueryModuleInformation,
+  SysDbgQueryTraceInformation,
+  SysDbgSetTracepoint,
+  SysDbgSetSpecialCall,
+  SysDbgClearSpecialCalls,
+  SysDbgQuerySpecialCalls,
+  SysDbgBreakPoint,
+  SysDbgQueryVersion,
+  SysDbgReadVirtual,
+  SysDbgWriteVirtual,
+  SysDbgReadPhysical,
+  SysDbgWritePhysical,
+  SysDbgReadControlSpace,
+  SysDbgWriteControlSpace,
+  SysDbgReadIoSpace,
+  SysDbgWriteIoSpace,
+  SysDbgReadMsr,
+  SysDbgWriteMsr,
+  SysDbgReadBusData,
+  SysDbgWriteBusData
+} SYSDBG_COMMAND, *PSYSDBG_COMMAND;
+
+
+/*************************************************************************
+ * Loader structures
+ *
+ * Those are not part of standard Winternl.h
+ */
+typedef struct _LDR_MODULE
+{
+    LIST_ENTRY          InLoadOrderModuleList;
+    LIST_ENTRY          InMemoryOrderModuleList;
+    LIST_ENTRY          InInitializationOrderModuleList;
+    void*               BaseAddress;
+    void*               EntryPoint;
+    ULONG               SizeOfImage;
+    UNICODE_STRING      FullDllName;
+    UNICODE_STRING      BaseDllName;
+    ULONG               Flags;
+    SHORT               LoadCount;
+    SHORT               TlsIndex;
+    HANDLE              SectionHandle;
+    ULONG               CheckSum;
+    ULONG               TimeDateStamp;
+    HANDLE              ActivationContext;
+} LDR_MODULE, *PLDR_MODULE;
+
+/* those defines are (some of the) regular LDR_MODULE.Flags values */
+#define LDR_IMAGE_IS_DLL                0x00000004
+#define LDR_LOAD_IN_PROGRESS            0x00001000
+#define LDR_UNLOAD_IN_PROGRESS          0x00002000
+#define LDR_NO_DLL_CALLS                0x00040000
+#define LDR_PROCESS_ATTACHED            0x00080000
+#define LDR_MODULE_REBASED              0x00200000
+
+/* these ones is Wine specific */
+#define LDR_DONT_RESOLVE_REFS           0x40000000
+#define LDR_WINE_INTERNAL               0x80000000
+
+/* FIXME: to be checked */
+#define MAXIMUM_FILENAME_LENGTH 256
+
+typedef struct _SYSTEM_MODULE
+{
+    PVOID               Reserved1;                      /* 00/00 */
+    PVOID               Reserved2;                      /* 04/08 */
+    PVOID               ImageBaseAddress;               /* 08/10 */
+    ULONG               ImageSize;                      /* 0c/18 */
+    ULONG               Flags;                          /* 10/1c */
+    WORD                Id;                             /* 14/20 */
+    WORD                Rank;                           /* 16/22 */
+    WORD                Unknown;                        /* 18/24 */
+    WORD                NameOffset;                     /* 1a/26 */
+    BYTE                Name[MAXIMUM_FILENAME_LENGTH];  /* 1c/28 */
+} SYSTEM_MODULE, *PSYSTEM_MODULE;
+
+typedef struct _SYSTEM_MODULE_INFORMATION
+{
+    ULONG               ModulesCount;
+    SYSTEM_MODULE       Modules[1]; /* FIXME: should be Modules[0] */
+} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
+
+/***********************************************************************
+ * Function declarations
+ */
+
+#if defined(__i386__) && defined(__GNUC__)
+static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
+static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
+#else  /* __i386__ && __GNUC__ */
+NTSYSAPI void WINAPI DbgBreakPoint(void);
+NTSYSAPI void WINAPI DbgUserBreakPoint(void);
+#endif  /* __i386__ && __GNUC__ */
+NTSYSAPI NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
+NTSYSAPI NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
+NTSYSAPI NTSTATUS  WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
+NTSYSAPI NTSTATUS  WINAPI LdrAddRefDll(ULONG,HMODULE);
+NTSYSAPI NTSTATUS  WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
+NTSYSAPI NTSTATUS  WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
+NTSYSAPI NTSTATUS  WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
+NTSYSAPI NTSTATUS  WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
+NTSYSAPI NTSTATUS  WINAPI LdrGetDllHandle(LPCWSTR, ULONG, const UNICODE_STRING*, HMODULE*);
+NTSYSAPI NTSTATUS  WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
+NTSYSAPI void      WINAPI LdrInitializeThunk(void*,ULONG_PTR,ULONG_PTR,ULONG_PTR);
+NTSYSAPI NTSTATUS  WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
+NTSYSAPI NTSTATUS  WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
+IMAGE_BASE_RELOCATION * WINAPI LdrProcessRelocationBlock(void*,UINT,USHORT*,INT_PTR);
+NTSYSAPI NTSTATUS  WINAPI LdrQueryImageFileExecutionOptions(const UNICODE_STRING*,LPCWSTR,ULONG,void*,ULONG,ULONG*);
+NTSYSAPI NTSTATUS  WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
+NTSYSAPI void      WINAPI LdrShutdownProcess(void);
+NTSYSAPI void      WINAPI LdrShutdownThread(void);
+NTSYSAPI NTSTATUS  WINAPI LdrUnloadDll(HMODULE);
+NTSYSAPI NTSTATUS  WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
+NTSYSAPI NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
+NTSYSAPI NTSTATUS  WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
+NTSYSAPI NTSTATUS  WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+NTSYSAPI NTSTATUS  WINAPI NtAlertResumeThread(HANDLE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtAlertThread(HANDLE ThreadHandle);
+NTSYSAPI NTSTATUS  WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
+NTSYSAPI NTSTATUS  WINAPI NtAllocateUuids(PULARGE_INTEGER,PULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtAreMappedFilesTheSame(PVOID,PVOID);
+NTSYSAPI NTSTATUS  WINAPI NtAssignProcessToJobObject(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtCallbackReturn(PVOID,ULONG,NTSTATUS);
+NTSYSAPI NTSTATUS  WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
+NTSYSAPI NTSTATUS  WINAPI NtCancelIoFileEx(HANDLE,PIO_STATUS_BLOCK,PIO_STATUS_BLOCK);
+NTSYSAPI NTSTATUS  WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
+NTSYSAPI NTSTATUS  WINAPI NtClearEvent(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtClose(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtCompleteConnectPort(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtContinue(PCONTEXT,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,EVENT_TYPE,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtCreateEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtCreateJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtCreateKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtCreatePagingFile(PUNICODE_STRING,PLARGE_INTEGER,PLARGE_INTEGER,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtCreateProcess(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,BOOLEAN,HANDLE,HANDLE,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtCreateProfile(PHANDLE,HANDLE,PVOID,ULONG,ULONG,PVOID,ULONG,KPROFILE_SOURCE,KAFFINITY);
+NTSYSAPI NTSTATUS  WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
+NTSYSAPI NTSTATUS  WINAPI NtCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI NtCreateThread(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PCONTEXT,PINITIAL_TEB,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
+NTSYSAPI NTSTATUS  WINAPI NtCreateToken(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,TOKEN_TYPE,PLUID,PLARGE_INTEGER,PTOKEN_USER,PTOKEN_GROUPS,PTOKEN_PRIVILEGES,PTOKEN_OWNER,PTOKEN_PRIMARY_GROUP,PTOKEN_DEFAULT_DACL,PTOKEN_SOURCE);
+NTSYSAPI NTSTATUS  WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtDeleteAtom(RTL_ATOM);
+NTSYSAPI NTSTATUS  WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtDeleteKey(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *);
+NTSYSAPI NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtDisplayString(PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSYSAPI NTSTATUS  WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtExtendSection(HANDLE,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
+NTSYSAPI NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
+NTSYSAPI NTSTATUS  WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+NTSYSAPI NTSTATUS  WINAPI NtFlushKey(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtFlushWriteBuffer(VOID);
+NTSYSAPI NTSTATUS  WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtGetContextThread(HANDLE,CONTEXT*);
+NTSYSAPI NTSTATUS  WINAPI NtGetPlugPlayEvent(ULONG,ULONG,PVOID,ULONG);
+NTSYSAPI ULONG     WINAPI NtGetTickCount(VOID);
+NTSYSAPI NTSTATUS  WINAPI NtGetWriteWatch(HANDLE,ULONG,PVOID,SIZE_T,PVOID*,ULONG_PTR*,ULONG*);
+NTSYSAPI NTSTATUS  WINAPI NtImpersonateAnonymousToken(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
+NTSYSAPI NTSTATUS  WINAPI NtInitializeRegistry(BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtIsProcessInJob(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtListenPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtLoadDriver(const UNICODE_STRING *);
+NTSYSAPI NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
+NTSYSAPI NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtMakeTemporaryObject(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtNotifyChangeDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,ULONG,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSYSAPI NTSTATUS  WINAPI NtOpenEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtOpenJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSYSAPI NTSTATUS  WINAPI NtOpenKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenObjectAuditAlarm(PUNICODE_STRING,PHANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,ACCESS_MASK,PPRIVILEGE_SET,BOOLEAN,BOOLEAN,PBOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS  WINAPI NtOpenProcessTokenEx(HANDLE,DWORD,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS  WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSYSAPI NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
+NTSYSAPI NTSTATUS  WINAPI NtOpenThreadTokenEx(HANDLE,DWORD,BOOLEAN,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS  WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS  WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtPrivilegeObjectAuditAlarm(PUNICODE_STRING,HANDLE,HANDLE,ULONG,PPRIVILEGE_SET,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtPrivilegedServiceAuditAlarm(PUNICODE_STRING,PUNICODE_STRING,HANDLE,PPRIVILEGE_SET,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG,ULONG*);
+NTSYSAPI NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
+NTSYSAPI NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryDefaultUILanguage(LANGID*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PULONG,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationPort(HANDLE,PORT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryInstallUILanguage(LANGID*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryIntervalProfile(KPROFILE_SOURCE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryIoCompletion(HANDLE,IO_COMPLETION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSYSAPI NTSTATUS  WINAPI NtQueryMultipleValueKey(HANDLE,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryOpenSubKeys(POBJECT_ATTRIBUTES,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySystemEnvironmentValue(PUNICODE_STRING,PWCHAR,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryTimerResolution(PULONG,PULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSYSAPI NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS  WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
+NTSYSAPI NTSTATUS  WINAPI NtRaiseHardError(NTSTATUS,ULONG,PUNICODE_STRING,PVOID*,HARDERROR_RESPONSE_OPTION,PHARDERROR_RESPONSE);
+NTSYSAPI NTSTATUS  WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtReadFileScatter(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtReadRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS  WINAPI NtRegisterThreadTerminatePort(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtReleaseKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtReleaseMutant(HANDLE,PLONG);
+NTSYSAPI NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtRemoveIoCompletion(HANDLE,PULONG_PTR,PULONG_PTR,PIO_STATUS_BLOCK,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtReplyPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtReplyWaitReceivePortEx(HANDLE,PVOID*,PPORT_MESSAGE,PPORT_MESSAGE,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS  WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtRequestPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtResetWriteWatch(HANDLE,PVOID,SIZE_T);
+NTSYSAPI NTSTATUS  WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtResumeThread(HANDLE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSaveKey(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
+NTSYSAPI NTSTATUS  WINAPI NtSetDefaultHardErrorPort(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
+NTSYSAPI NTSTATUS  WINAPI NtSetDefaultUILanguage(LANGID);
+NTSYSAPI NTSTATUS  WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetHighEventPair(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSetHighWaitLowEventPair(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSetHighWaitLowThread(VOID);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE);
+NTSYSAPI NTSTATUS  WINAPI NtSetIoCompletion(HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T);
+NTSYSAPI NTSTATUS  WINAPI NtSetLdtEntries(ULONG,LDT_ENTRY,ULONG,LDT_ENTRY);
+NTSYSAPI NTSTATUS  WINAPI NtSetLowEventPair(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSetLowWaitHighEventPair(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSetLowWaitHighThread(VOID);
+NTSYSAPI NTSTATUS  WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+NTSYSAPI NTSTATUS  WINAPI NtSetSystemEnvironmentValue(PUNICODE_STRING,PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetSystemPowerState(POWER_ACTION,SYSTEM_POWER_STATE,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
+NTSYSAPI NTSTATUS  WINAPI NtSetTimerResolution(ULONG,BOOLEAN,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS  WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtShutdownSystem(SHUTDOWN_ACTION);
+NTSYSAPI NTSTATUS  WINAPI NtStartProfile(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtStopProfile(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtSuspendThread(HANDLE,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtSystemDebugControl(SYSDBG_COMMAND,PVOID,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtTerminateJobObject(HANDLE,NTSTATUS);
+NTSYSAPI NTSTATUS  WINAPI NtTerminateProcess(HANDLE,LONG);
+NTSYSAPI NTSTATUS  WINAPI NtTerminateThread(HANDLE,LONG);
+NTSYSAPI NTSTATUS  WINAPI NtTestAlert(VOID);
+NTSYSAPI NTSTATUS  WINAPI NtUnloadDriver(const UNICODE_STRING *);
+NTSYSAPI NTSTATUS  WINAPI NtUnloadKey(POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS  WINAPI NtUnloadKeyEx(POBJECT_ATTRIBUTES,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS  WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
+NTSYSAPI NTSTATUS  WINAPI NtVdmControl(ULONG,PVOID);
+NTSYSAPI NTSTATUS  WINAPI NtWaitForKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS  WINAPI NtWaitHighEventPair(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtWaitLowEventPair(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtWriteFileGather(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtWriteRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS  WINAPI NtYieldExecution(void);
+
+NTSYSAPI void      WINAPI RtlAcquirePebLock(void);
+NTSYSAPI BYTE      WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
+NTSYSAPI BYTE      WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
+NTSYSAPI void      WINAPI RtlAcquireSRWLockExclusive(RTL_SRWLOCK*);
+NTSYSAPI void      WINAPI RtlAcquireSRWLockShared(RTL_SRWLOCK*);
+NTSYSAPI NTSTATUS  WINAPI RtlActivateActivationContext(DWORD,HANDLE,ULONG_PTR*);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
+NTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
+NTSYSAPI void      WINAPI RtlAddRefActivationContext(HANDLE);
+NTSYSAPI PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
+NTSYSAPI NTSTATUS  WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
+NTSYSAPI RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
+NTSYSAPI PVOID     WINAPI RtlAllocateHeap(HANDLE,ULONG,SIZE_T) __WINE_ALLOC_SIZE(3);
+NTSYSAPI WCHAR     WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
+NTSYSAPI DWORD     WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
+NTSYSAPI NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
+NTSYSAPI NTSTATUS  WINAPI RtlAppendStringToString(STRING *,const STRING *);
+NTSYSAPI NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
+NTSYSAPI NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
+NTSYSAPI BOOLEAN   WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
+NTSYSAPI BOOLEAN   WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
+NTSYSAPI BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
+NTSYSAPI void      WINAPI RtlClearAllBits(PRTL_BITMAP);
+NTSYSAPI void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateActivationContext(HANDLE*,const void*);
+NTSYSAPI PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);
+NTSYSAPI ULONG     WINAPI RtlCompactHeap(HANDLE,ULONG);
+NTSYSAPI LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
+NTSYSAPI LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlCompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,ULONG,PULONG,PVOID);
+NTSYSAPI DWORD     WINAPI RtlComputeCrc32(DWORD,const BYTE*,INT);
+NTSYSAPI NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
+NTSYSAPI void      WINAPI RtlCopyLuid(PLUID,const LUID*);
+NTSYSAPI void      WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
+NTSYSAPI BOOLEAN   WINAPI RtlCopySid(DWORD,PSID,PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlCopySecurityDescriptor(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR);
+NTSYSAPI void      WINAPI RtlCopyString(STRING*,const STRING*);
+NTSYSAPI void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
+NTSYSAPI HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,SIZE_T,SIZE_T,PVOID,PRTL_HEAP_DEFINITION);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateTimerQueue(PHANDLE);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateTimer(PHANDLE, HANDLE, RTL_WAITORTIMERCALLBACKFUNC, PVOID, DWORD, DWORD, ULONG);
+NTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
+NTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
+NTSYSAPI NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
+NTSYSAPI void      WINAPI RtlDeactivateActivationContext(DWORD,ULONG_PTR);
+NTSYSAPI PVOID     WINAPI RtlDecodePointer(PVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlDecompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteAce(PACL,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
+NTSYSAPI void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteSecurityObject(PSECURITY_DESCRIPTOR*);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteTimer(HANDLE, HANDLE, HANDLE);
+NTSYSAPI NTSTATUS  WINAPI RtlDeleteTimerQueueEx(HANDLE, HANDLE);
+NTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
+NTSYSAPI NTSTATUS  WINAPI RtlDeregisterWait(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI RtlDeregisterWaitEx(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS  WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
+NTSYSAPI NTSTATUS  WINAPI RtlDestroyEnvironment(PWSTR);
+NTSYSAPI NTSTATUS  WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
+NTSYSAPI HANDLE    WINAPI RtlDestroyHeap(HANDLE);
+NTSYSAPI void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
+NTSYSAPI NTSTATUS  WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);
+NTSYSAPI DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
+NTSYSAPI BOOLEAN   WINAPI RtlDllShutdownInProgress(void);
+NTSYSAPI BOOLEAN   WINAPI RtlDoesFileExists_U(LPCWSTR);
+NTSYSAPI BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
+NTSYSAPI ULONG     WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
+NTSYSAPI WCHAR     WINAPI RtlDowncaseUnicodeChar(WCHAR);
+NTSYSAPI NTSTATUS  WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI void      WINAPI RtlDumpResource(LPRTL_RWLOCK);
+NTSYSAPI NTSTATUS  WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
+NTSYSAPI PVOID     WINAPI RtlEncodePointer(PVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI void      WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI BOOLEAN   WINAPI RtlEqualLuid(const LUID*,const LUID*);
+NTSYSAPI BOOL      WINAPI RtlEqualPrefixSid(PSID,PSID);
+NTSYSAPI BOOL      WINAPI RtlEqualSid(PSID,PSID);
+NTSYSAPI BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
+NTSYSAPI BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI void      DECLSPEC_NORETURN WINAPI RtlExitUserProcess(ULONG);
+NTSYSAPI void      DECLSPEC_NORETURN WINAPI RtlExitUserThread(ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlExpandEnvironmentStrings_U(PCWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
+NTSYSAPI NTSTATUS  WINAPI RtlFindActivationContextSectionString(ULONG,const GUID*,ULONG,const UNICODE_STRING*,PVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlFindActivationContextSectionGuid(ULONG,const GUID*,ULONG,const GUID*,PVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
+NTSYSAPI ULONG     WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG     WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG     WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
+NTSYSAPI ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI ULONG     WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);
+NTSYSAPI ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
+NTSYSAPI ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
+NTSYSAPI CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);
+NTSYSAPI ULONG     WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI ULONG     WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG     WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG     WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
+NTSYSAPI BOOLEAN   WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
+NTSYSAPI NTSTATUS  WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,__ms_va_list *,LPWSTR,ULONG);
+NTSYSAPI void      WINAPI RtlFreeAnsiString(PANSI_STRING);
+NTSYSAPI BOOLEAN   WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
+NTSYSAPI BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
+NTSYSAPI void      WINAPI RtlFreeOemString(POEM_STRING);
+NTSYSAPI DWORD     WINAPI RtlFreeSid(PSID);
+NTSYSAPI void      WINAPI RtlFreeThreadActivationContextStack(void);
+NTSYSAPI void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
+NTSYSAPI NTSTATUS  WINAPI RtlGetActiveActivationContext(HANDLE*);
+NTSYSAPI NTSTATUS  WINAPI RtlGetCompressionWorkSpaceSize(USHORT,PULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
+NTSYSAPI PEB *     WINAPI RtlGetCurrentPeb(void);
+NTSYSAPI NTSTATUS  WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
+NTSYSAPI ULONG     WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
+NTSYSAPI NTSTATUS  WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlGetLastNtStatus(void);
+NTSYSAPI DWORD     WINAPI RtlGetLastWin32Error(void);
+NTSYSAPI DWORD     WINAPI RtlGetLongestNtPathLength(void);
+NTSYSAPI ULONG     WINAPI RtlGetNtGlobalFlags(void);
+NTSYSAPI BOOLEAN   WINAPI RtlGetNtProductType(LPDWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
+NTSYSAPI ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
+NTSYSAPI DWORD     WINAPI RtlGetThreadErrorMode(void);
+NTSYSAPI NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
+NTSYSAPI NTSTATUS  WINAPI RtlGUIDFromString(PUNICODE_STRING,GUID*);
+NTSYSAPI PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
+NTSYSAPI PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
+NTSYSAPI PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
+NTSYSAPI PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
+NTSYSAPI PVOID     WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
+NTSYSAPI NTSTATUS  WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
+NTSYSAPI void      WINAPI RtlInitString(PSTRING,PCSZ);
+NTSYSAPI void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
+NTSYSAPI NTSTATUS  WINAPI RtlInitAnsiStringEx(PANSI_STRING,PCSZ);
+NTSYSAPI void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
+NTSYSAPI NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
+NTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSectionEx(RTL_CRITICAL_SECTION *,ULONG,ULONG);
+NTSYSAPI void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
+NTSYSAPI void      WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
+NTSYSAPI void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
+NTSYSAPI void      WINAPI RtlInitializeSRWLock(RTL_SRWLOCK*);
+NTSYSAPI BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+NTSYSAPI NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
+NTSYSAPI NTSTATUS  WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
+NTSYSAPI NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
+NTSYSAPI BOOLEAN   WINAPI RtlIsActivationContextActive(HANDLE);
+NTSYSAPI ULONG     WINAPI RtlIsDosDeviceName_U(PCWSTR);
+NTSYSAPI BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
+NTSYSAPI BOOLEAN   WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
+NTSYSAPI BOOLEAN   WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
+NTSYSAPI BOOLEAN   WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
+NTSYSAPI NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI DWORD     WINAPI RtlLengthRequiredSid(DWORD);
+NTSYSAPI ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
+NTSYSAPI DWORD     WINAPI RtlLengthSid(PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
+NTSYSAPI BOOLEAN   WINAPI RtlLockHeap(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
+NTSYSAPI NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
+NTSYSAPI void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
+NTSYSAPI NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
+NTSYSAPI NTSTATUS  WINAPI RtlNewSecurityObject(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOLEAN,HANDLE,PGENERIC_MAPPING);
+NTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
+NTSYSAPI ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);
+NTSYSAPI ULONG     WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
+NTSYSAPI ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
+NTSYSAPI ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
+NTSYSAPI UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE);
+NTSYSAPI PVOID     WINAPI RtlPcToFileHeader(PVOID,PVOID*);
+NTSYSAPI NTSTATUS  WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
+NTSYSAPI BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
+NTSYSAPI BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryInformationActivationContext(ULONG,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlQueryTimeZoneInformation(RTL_TIME_ZONE_INFORMATION*);
+NTSYSAPI NTSTATUS  WINAPI RtlQueueWorkItem(PRTL_WORK_ITEM_ROUTINE,PVOID,ULONG);
+NTSYSAPI void      WINAPI RtlRaiseException(PEXCEPTION_RECORD);
+NTSYSAPI void      WINAPI RtlRaiseStatus(NTSTATUS);
+NTSYSAPI ULONG     WINAPI RtlRandom(PULONG);
+NTSYSAPI PVOID     WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,SIZE_T);
+NTSYSAPI NTSTATUS  WINAPI RtlRegisterWait(PHANDLE,HANDLE,RTL_WAITORTIMERCALLBACKFUNC,PVOID,ULONG,ULONG);
+NTSYSAPI void      WINAPI RtlReleaseActivationContext(HANDLE);
+NTSYSAPI void      WINAPI RtlReleasePebLock(void);
+NTSYSAPI void      WINAPI RtlReleaseResource(LPRTL_RWLOCK);
+NTSYSAPI void      WINAPI RtlReleaseSRWLockExclusive(RTL_SRWLOCK*);
+NTSYSAPI void      WINAPI RtlReleaseSRWLockShared(RTL_SRWLOCK*);
+NTSYSAPI ULONG     WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
+NTSYSAPI void      WINAPI RtlRestoreLastWin32Error(DWORD);
+NTSYSAPI void      WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
+NTSYSAPI void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
+NTSYSAPI NTSTATUS  WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
+NTSYSAPI void      WINAPI RtlSetAllBits(PRTL_BITMAP);
+NTSYSAPI void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG     WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlSetControlSecurityDescriptor(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);
+NTSYSAPI NTSTATUS  WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
+NTSYSAPI void      WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
+NTSYSAPI NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
+NTSYSAPI NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlSetIoCompletionCallback(HANDLE,PRTL_OVERLAPPED_COMPLETION_ROUTINE,ULONG);
+NTSYSAPI void      WINAPI RtlSetLastWin32Error(DWORD);
+NTSYSAPI void      WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
+NTSYSAPI NTSTATUS  WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlSetThreadErrorMode(DWORD,LPDWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*);
+NTSYSAPI SIZE_T    WINAPI RtlSizeHeap(HANDLE,ULONG,const void*);
+NTSYSAPI NTSTATUS  WINAPI RtlStringFromGUID(REFGUID,PUNICODE_STRING);
+NTSYSAPI LPDWORD   WINAPI RtlSubAuthoritySid(PSID,DWORD);
+NTSYSAPI LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);
+NTSYSAPI NTSTATUS  WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
+NTSYSAPI void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
+NTSYSAPI BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
+NTSYSAPI void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
+NTSYSAPI BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
+NTSYSAPI BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
+NTSYSAPI BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
+NTSYSAPI DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
+NTSYSAPI DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
+NTSYSAPI NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI ULONG     WINAPI RtlUniform(PULONG);
+NTSYSAPI BOOLEAN   WINAPI RtlUnlockHeap(HANDLE);
+NTSYSAPI void      WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
+#ifdef __x86_64__
+NTSYSAPI void      WINAPI RtlUnwindEx(PVOID,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
+#elif defined(__ia64__)
+NTSYSAPI void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
+NTSYSAPI void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
+#endif
+NTSYSAPI WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);
+NTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI NTSTATUS  WINAPI RtlUpdateTimer(HANDLE, HANDLE, DWORD, DWORD);
+NTSYSAPI CHAR      WINAPI RtlUpperChar(CHAR);
+NTSYSAPI void      WINAPI RtlUpperString(STRING *,const STRING *);
+NTSYSAPI NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+NTSYSAPI BOOLEAN   WINAPI RtlValidAcl(PACL);
+NTSYSAPI BOOLEAN   WINAPI RtlValidSid(PSID);
+NTSYSAPI BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
+NTSYSAPI NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);
+NTSYSAPI NTSTATUS  WINAPI RtlWow64EnableFsRedirection(BOOLEAN);
+NTSYSAPI NTSTATUS  WINAPI RtlWow64EnableFsRedirectionEx(ULONG,ULONG*);
+NTSYSAPI NTSTATUS  WINAPI RtlWriteRegistryValue(ULONG,PCWSTR,PCWSTR,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlZombifyActivationContext(HANDLE);
+NTSYSAPI NTSTATUS  WINAPI RtlpNtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlpNtEnumerateSubKey(HANDLE,UNICODE_STRING *, ULONG);
+NTSYSAPI NTSTATUS  WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS  WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS  WINAPI vDbgPrintEx(ULONG,ULONG,LPCSTR,__ms_va_list);
+NTSYSAPI NTSTATUS  WINAPI vDbgPrintExWithPrefix(LPCSTR,ULONG,ULONG,LPCSTR,__ms_va_list);
+
+/* 32-bit only functions */
+
+#ifndef _WIN64
+NTSYSAPI LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
+NTSYSAPI ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
+NTSYSAPI LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);
+NTSYSAPI ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
+NTSYSAPI UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
+NTSYSAPI LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
+NTSYSAPI LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
+NTSYSAPI LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
+NTSYSAPI LONGLONG  WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
+NTSYSAPI LONGLONG  WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
+NTSYSAPI ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
+NTSYSAPI LONGLONG  WINAPI RtlLargeIntegerNegate(LONGLONG);
+NTSYSAPI LONGLONG  WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
+NTSYSAPI LONGLONG  WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
+NTSYSAPI LONGLONG  WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
+NTSYSAPI NTSTATUS  WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
+#endif
+
+/* Wine internal functions */
+
+NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
+                                                   UINT disposition, BOOLEAN check_case );
+NTSYSAPI NTSTATUS CDECL wine_unix_to_nt_file_name( const ANSI_STRING *name, UNICODE_STRING *nt );
+
+
+/***********************************************************************
+ * Inline functions
+ */
+
+#define InitializeObjectAttributes(p,n,a,r,s) \
+    do { \
+        (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
+        (p)->RootDirectory = r; \
+        (p)->Attributes = a; \
+        (p)->ObjectName = n; \
+        (p)->SecurityDescriptor = s; \
+        (p)->SecurityQualityOfService = NULL; \
+    } while (0)
+
+#define NtCurrentProcess() ((HANDLE)-1)
+
+#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
+#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
+#define RtlStoreUlong(p,v)  do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
+#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
+#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
+#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
+#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
+
+static inline BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
+{
+    if (lpBits && ulBit < lpBits->SizeOfBitMap &&
+        lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
+        return TRUE;
+    return FALSE;
+}
+
+/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
+static inline USHORT RtlUshortByteSwap(USHORT s)
+{
+    return (s >> 8) | (s << 8);
+}
+static inline ULONG RtlUlongByteSwap(ULONG i)
+{
+#if defined(__i386__) && defined(__GNUC__)
+    ULONG ret;
+    __asm__("bswap %0" : "=r" (ret) : "0" (i) );
+    return ret;
+#else
+    return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
+#endif
+}
+
+/* list manipulation macros */
+#define InitializeListHead(le)  (void)((le)->Flink = (le)->Blink = (le))
+#define InsertHeadList(le,e)    do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
+#define InsertTailList(le,e)    do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
+#define IsListEmpty(le)         ((le)->Flink == (le))
+#define RemoveEntryList(e)      do { PLIST_ENTRY f = (e)->Flink, b = (e)->Blink; f->Blink = b; b->Flink = f; (e)->Flink = (e)->Blink = NULL; } while (0)
+static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
+{
+    PLIST_ENTRY f, b, e;
+
+    e = le->Flink;
+    f = le->Flink->Flink;
+    b = le->Flink->Blink;
+    f->Blink = b;
+    b->Flink = f;
+
+    if (e != le) e->Flink = e->Blink = NULL;
+    return e;
+}
+static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
+{
+    PLIST_ENTRY f, b, e;
+
+    e = le->Blink;
+    f = le->Blink->Flink;
+    b = le->Blink->Blink;
+    f->Blink = b;
+    b->Flink = f;
+
+    if (e != le) e->Flink = e->Blink = NULL;
+    return e;
+}
+
+
+#ifdef __WINESRC__
+
+/* FIXME: private structure for vm86 mode, stored in teb->GdiTebBatch */
+typedef struct
+{
+    DWORD        dpmi_vif;
+    DWORD        vm86_pending;
+} WINE_VM86_TEB_INFO;
+
+static inline WINE_VM86_TEB_INFO *get_vm86_teb_info(void)
+{
+    return (WINE_VM86_TEB_INFO *)&NtCurrentTeb()->GdiTebBatch;
+}
+
+/* The thread information for 16-bit threads */
+/* NtCurrentTeb()->SubSystemTib points to this */
+typedef struct
+{
+    void           *unknown;    /* 00 unknown */
+    UNICODE_STRING *exe_name;   /* 04 exe module name */
+
+    /* the following fields do not exist under Windows */
+    UNICODE_STRING  exe_str;    /* exe name string pointed to by exe_name */
+    CURDIR          curdir;     /* current directory */
+    WCHAR           curdir_buffer[MAX_PATH];
+} WIN16_SUBSYSTEM_TIB;
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif  /* __WINE_WINTERNL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h
new file mode 100644
index 0000000..88660ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h
@@ -0,0 +1,633 @@
+/*
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTRUST_H
+#define __WINE_WINTRUST_H
+
+#include <wincrypt.h>
+
+
+#include <pshpack8.h>
+
+typedef struct WINTRUST_FILE_INFO_
+{
+    DWORD   cbStruct;
+    LPCWSTR pcwszFilePath;
+    HANDLE  hFile;
+    GUID*   pgKnownSubject;
+} WINTRUST_FILE_INFO, *PWINTRUST_FILE_INFO;
+
+typedef struct WINTRUST_CATALOG_INFO_
+{
+    DWORD         cbStruct;
+    DWORD         dwCatalogVersion;
+    LPCWSTR       pcwszCatalogFilePath;
+    LPCWSTR       pcwszMemberTag;
+    LPCWSTR       pcwszMemberFilePath;
+    HANDLE        hMemberFile;
+    BYTE*         pbCalculatedFileHash;
+    DWORD         cbCalculatedFileHash;
+    PCCTL_CONTEXT pcCatalogContext;
+} WINTRUST_CATALOG_INFO, *PWINTRUST_CATALOG_INFO;
+
+typedef struct WINTRUST_BLOB_INFO_
+{
+    DWORD   cbStruct;
+    GUID    gSubject;
+    LPCWSTR pcwszDisplayName;
+    DWORD   cbMemObject;
+    BYTE*   pbMemObject;
+    DWORD   cbMemSignedMsg;
+    BYTE*   pbMemSignedMsg;
+} WINTRUST_BLOB_INFO, *PWINTRUST_BLOB_INFO;
+
+typedef struct WINTRUST_SGNR_INFO_
+{
+    DWORD             cbStruct;
+    LPCWSTR           pcwszDisplayName;
+    CMSG_SIGNER_INFO* psSignerInfo;
+    DWORD             chStores;
+    HCERTSTORE*       pahStores;
+} WINTRUST_SGNR_INFO, *PWINTRUST_SGNR_INFO;
+
+typedef struct WINTRUST_CERT_INFO_
+{
+    DWORD         cbStruct;
+    LPCWSTR       pcwszDisplayName;
+    CERT_CONTEXT* psCertContext;
+    DWORD         chStores;
+    HCERTSTORE*   pahStores;
+    DWORD         dwFlags;
+    FILETIME*     psftVerifyAsOf;
+} WINTRUST_CERT_INFO, *PWINTRUST_CERT_INFO;
+
+#define WTCI_DONT_OPEN_STORES 0x00000001
+#define WTCI_OPEN_ONLY_ROOT   0x00000002
+
+/* dwUIChoice */
+#define WTD_UI_ALL                1
+#define WTD_UI_NONE               2
+#define WTD_UI_NOBAD              3
+#define WTD_UI_NOGOOD             4
+/* fdwRevocationChecks */
+#define WTD_REVOKE_NONE           0
+#define WTD_REVOKE_WHOLECHAIN     1
+/* dwUnionChoice */
+#define WTD_CHOICE_FILE           1
+#define WTD_CHOICE_CATALOG        2
+#define WTD_CHOICE_BLOB           3
+#define WTD_CHOICE_SIGNER         4
+#define WTD_CHOICE_CERT           5
+
+typedef struct _WINTRUST_DATA
+{
+    DWORD  cbStruct;
+    LPVOID pPolicyCallbackData;
+    LPVOID pSIPClientData;
+    DWORD  dwUIChoice;
+    DWORD  fdwRevocationChecks;
+    DWORD  dwUnionChoice;
+    union
+    {
+        struct WINTRUST_FILE_INFO_*    pFile;
+        struct WINTRUST_CATALOG_INFO_* pCatalog;
+        struct WINTRUST_BLOB_INFO_*    pBlob;
+        struct WINTRUST_SGNR_INFO_*    pSgnr;
+        struct WINTRUST_CERT_INFO_*    pCert;
+    } DUMMYUNIONNAME;
+
+    DWORD  dwStateAction;
+    HANDLE hWVTStateData;
+    WCHAR* pwszURLReference;
+    DWORD  dwProvFlags;
+    DWORD  dwUIContext;
+} WINTRUST_DATA, *PWINTRUST_DATA;
+
+#define WTD_STATEACTION_IGNORE           0
+#define WTD_STATEACTION_VERIFY           1
+#define WTD_STATEACTION_CLOSE            2
+#define WTD_STATEACTION_AUTO_CACHE       3
+#define WTD_STATEACTION_AUTO_CACHE_FLUSH 4
+
+#define WTD_PROV_FLAGS_MASK                     0x0000ffff
+#define WTD_USE_IE4_TRUST_FLAG                  0x00000001
+#define WTD_NO_IE4_CHAIN_FLAG                   0x00000002
+#define WTD_NO_POLICY_USAGE_FLAG                0x00000004
+#define WTD_REVOCATION_CHECK_NONE               0x00000010
+#define WTD_REVOCATION_CHECK_END_CERT           0x00000020
+#define WTD_REVOCATION_CHECK_CHAIN              0x00000040
+#define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000080
+#define WTD_SAFER_FLAG                          0x00000100
+#define WTD_HASH_ONLY_FLAG                      0x00000200
+#define WTD_USE_DEFAULT_OSVER_CHECK             0x00000400
+#define WTD_LIFETIME_SIGNING_FLAG               0x00000800
+#define WTD_CACHE_ONLY_URL_RETRIEVAL            0x00001000
+
+#define WTD_UICONTEXT_EXECUTE 0
+#define WTD_UICONTEXT_INSTALL 1
+
+typedef struct _CRYPT_TRUST_REG_ENTRY
+{
+    DWORD cbStruct;
+    WCHAR *pwszDLLName;
+    WCHAR *pwszFunctionName;
+} CRYPT_TRUST_REG_ENTRY, *PCRYPT_TRUST_REG_ENTRY;
+
+typedef struct _CRYPT_REGISTER_ACTIONID
+{
+    DWORD cbStruct;
+    CRYPT_TRUST_REG_ENTRY sInitProvider;
+    CRYPT_TRUST_REG_ENTRY sObjectProvider;
+    CRYPT_TRUST_REG_ENTRY sSignatureProvider;
+    CRYPT_TRUST_REG_ENTRY sCertificateProvider;
+    CRYPT_TRUST_REG_ENTRY sCertificatePolicyProvider;
+    CRYPT_TRUST_REG_ENTRY sFinalPolicyProvider;
+    CRYPT_TRUST_REG_ENTRY sTestPolicyProvider;
+    CRYPT_TRUST_REG_ENTRY sCleanupProvider;
+} CRYPT_REGISTER_ACTIONID, *PCRYPT_REGISTER_ACTIONID;
+
+typedef struct _CRYPT_PROVIDER_REGDEFUSAGE
+{
+    DWORD cbStruct;
+    GUID  *pgActionID;
+    WCHAR *pwszDllName;
+    char  *pwszLoadCallbackDataFunctionName;
+    char  *pwszFreeCallbackDataFunctionName;
+} CRYPT_PROVIDER_REGDEFUSAGE, *PCRYPT_PROVIDER_REGDEFUSAGE;
+
+typedef struct _CRYPT_PROVUI_DATA {
+    DWORD cbStruct;
+    DWORD dwFinalError;
+    WCHAR *pYesButtonText;
+    WCHAR *pNoButtonText;
+    WCHAR *pMoreInfoButtonText;
+    WCHAR *pAdvancedLinkText;
+    WCHAR *pCopyActionText;
+    WCHAR *pCopyActionTextNoTS;
+    WCHAR *pCopyActionTextNotSigned;
+} CRYPT_PROVUI_DATA, *PCRYPT_PROVUI_DATA;
+
+typedef struct _CRYPT_PROVIDER_CERT {
+    DWORD               cbStruct;
+    PCCERT_CONTEXT      pCert;
+    BOOL                fCommercial;
+    BOOL                fTrustedRoot;
+    BOOL                fSelfSigned;
+    BOOL                fTestCert;
+    DWORD               dwRevokedReason;
+    DWORD               dwConfidence;
+    DWORD               dwError;
+    CTL_CONTEXT        *pTrustListContext;
+    BOOL                fTrustListSignerCert;
+    PCCTL_CONTEXT       pCtlContext;
+    DWORD               dwCtlError;
+    BOOL                fIsCyclic;
+    PCERT_CHAIN_ELEMENT pChainElement;
+} CRYPT_PROVIDER_CERT, *PCRYPT_PROVIDER_CERT;
+
+#define CERT_CONFIDENCE_SIG       0x10000000
+#define CERT_CONFIDENCE_TIME      0x01000000
+#define CERT_CONFIDENCE_TIMENEST  0x00100000
+#define CERT_CONFIDENCE_AUTHIDEXT 0x00010000
+#define CERT_CONFIDENCE_HYGIENE   0x00001000
+#define CERT_CONFIDENCE_HIGHEST   0x11111000
+
+typedef struct _CRYPT_PROVIDER_SGNR {
+    DWORD                cbStruct;
+    FILETIME             sftVerifyAsOf;
+    DWORD                csCertChain;
+    CRYPT_PROVIDER_CERT *pasCertChain;
+    DWORD                dwSignerType;
+    CMSG_SIGNER_INFO    *psSigner;
+    DWORD                dwError;
+    DWORD                csCounterSigners;
+    struct _CRYPT_PROVIDER_SGNR *pasCounterSigners;
+    PCCERT_CHAIN_CONTEXT pChainContext;
+} CRYPT_PROVIDER_SGNR, *PCRYPT_PROVIDER_SGNR;
+
+#define SGNR_TYPE_TIMESTAMP 0x00000010
+
+typedef struct _CRYPT_PROVIDER_PRIVDATA {
+    DWORD cbStruct;
+    GUID  gProviderID;
+    DWORD cbProvData;
+    void *pvProvData;
+} CRYPT_PROVIDER_PRIVDATA, *PCRYPT_PROVIDER_PRIVDATA;
+
+struct _CRYPT_PROVIDER_DATA;
+
+#define TRUSTERROR_STEP_WVTPARAMS               0
+#define TRUSTERROR_STEP_FILEIO                  2
+#define TRUSTERROR_STEP_SIP                     3
+#define TRUSTERROR_STEP_SIPSUBJINFO             5
+#define TRUSTERROR_STEP_CATALOGFILE             6
+#define TRUSTERROR_STEP_CERTSTORE               7
+#define TRUSTERROR_STEP_MESSAGE                 8
+#define TRUSTERROR_STEP_MSG_SIGNERCOUNT         9
+#define TRUSTERROR_STEP_MSG_INNERCNTTYPE       10
+#define TRUSTERROR_STEP_MSG_INNERCNT           11
+#define TRUSTERROR_STEP_MSG_STORE              12
+#define TRUSTERROR_STEP_MSG_SIGNERINFO         13
+#define TRUSTERROR_STEP_MSG_SIGNERCERT         14
+#define TRUSTERROR_STEP_MSG_CERTCHAIN          15
+#define TRUSTERROR_STEP_MSG_COUNTERSIGINFO     16
+#define TRUSTERROR_STEP_MSG_COUNTERSIGCERT     17
+#define TRUSTERROR_STEP_VERIFY_MSGHASH         18
+#define TRUSTERROR_STEP_VERIFY_MSGINDIRECTDATA 19
+#define TRUSTERROR_STEP_FINAL_WVTINIT          30
+#define TRUSTERROR_STEP_FINAL_INITPROV         31
+#define TRUSTERROR_STEP_FINAL_OBJPROV          32
+#define TRUSTERROR_STEP_FINAL_SIGPROV          33
+#define TRUSTERROR_STEP_FINAL_CERTPROV         34
+#define TRUSTERROR_STEP_FINAL_CERTCHKPROV      35
+#define TRUSTERROR_STEP_FINAL_POLICYPROV       36
+#define TRUSTERROR_STEP_FINAL_UIPROV           37
+
+#define TRUSTERROR_MAX_STEPS                   38
+
+typedef void * (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CPD_MEM_ALLOC)(DWORD cbSize);
+typedef void (WINAPI *PFN_CPD_MEM_FREE)(void *pvMem2Free);
+typedef BOOL (WINAPI *PFN_CPD_ADD_STORE)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ HCERTSTORE hStore2Add);
+typedef BOOL (WINAPI *PFN_CPD_ADD_SGNR)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ BOOL fCounterSigner, DWORD idxSigner, struct _CRYPT_PROVIDER_SGNR *pSgnr2Add);
+typedef BOOL (WINAPI *PFN_CPD_ADD_CERT)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner,
+ PCCERT_CONTEXT pCert2Add);
+typedef BOOL (WINAPI *PFN_CPD_ADD_PRIVDATA)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ struct _CRYPT_PROVIDER_PRIVDATA *pPrivData2Add);
+typedef HRESULT (WINAPI *PFN_PROVIDER_INIT_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_OBJTRUST_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_SIGTRUST_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_CERTTRUST_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_FINALPOLICY_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_TESTFINALPOLICY_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_CLEANUP_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef BOOL (WINAPI *PFN_PROVIDER_CERTCHKPOLICY_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner,
+ BOOL fCounterSignerChain, DWORD idxCounterSigner);
+
+typedef struct _CRYPT_PROVIDER_FUNCTIONS {
+    DWORD cbStruct;
+    PFN_CPD_MEM_ALLOC    pfnAlloc;
+    PFN_CPD_MEM_FREE     pfnFree;
+    PFN_CPD_ADD_STORE    pfnAddStore2Chain;
+    PFN_CPD_ADD_SGNR     pfnAddSgnr2Chain;
+    PFN_CPD_ADD_CERT     pfnAddCert2Chain;
+    PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain;
+    PFN_PROVIDER_INIT_CALL            pfnInitialize;
+    PFN_PROVIDER_OBJTRUST_CALL        pfnObjectTrust;
+    PFN_PROVIDER_SIGTRUST_CALL        pfnSignatureTrust;
+    PFN_PROVIDER_CERTTRUST_CALL       pfnCertificateTrust;
+    PFN_PROVIDER_FINALPOLICY_CALL     pfnFinalPolicy;
+    PFN_PROVIDER_CERTCHKPOLICY_CALL   pfnCertCheckPolicy;
+    PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy;
+    struct _CRYPT_PROVUI_FUNCS       *psUIpfns;
+    PFN_PROVIDER_CLEANUP_CALL         pfnCleanupPolicy;
+} CRYPT_PROVIDER_FUNCTIONS, *PCRYPT_PROVIDER_FUNCTIONS;
+
+struct SIP_DISPATCH_INFO_;
+struct SIP_SUBJECTINFO_;
+struct SIP_INDIRECT_DATA_;
+
+typedef struct _PROVDATA_SIP {
+    DWORD cbStruct;
+    GUID  gSubject;
+    struct SIP_DISPATCH_INFO_ *pSip;
+    struct SIP_DISPATCH_INFO_ *pCATSip;
+    struct SIP_SUBJECTINFO_   *psSipSubjectInfo;
+    struct SIP_SUBJECTINFO_   *psSipCATSubjectInfo;
+    struct SIP_INDIRECT_DATA_ *psIndirectData;
+} PROVDATA_SIP, *PPROVDATA_SIP;
+
+typedef struct _CRYPT_PROVIDER_DATA {
+    DWORD                     cbStruct;
+    WINTRUST_DATA            *pWintrustData;
+    BOOL                      fOpenedFile;
+    HWND                      hWndParent;
+    GUID                     *pgActionID;
+    HCRYPTPROV                hProv;
+    DWORD                     dwError;
+    DWORD                     dwRegSecuritySettings;
+    DWORD                     dwRegPolicySettings;
+    CRYPT_PROVIDER_FUNCTIONS *psPfns;
+    DWORD                     cdwTrustStepErrors;
+    DWORD                    *padwTrustStepErrors;
+    DWORD                     chStores;
+    HCERTSTORE               *pahStores;
+    DWORD                     dwEncoding;
+    HCRYPTMSG                 hMsg;
+    DWORD                     csSigners;
+    CRYPT_PROVIDER_SGNR      *pasSigners;
+    DWORD                     csProvPrivData;
+    CRYPT_PROVIDER_PRIVDATA  *pasProvPrivData;
+    DWORD                     dwSubjectChoice;
+    union {
+        struct _PROVDATA_SIP        *pPDSip;
+    } DUMMYUNIONNAME;
+    char                     *pszUsageOID;
+    BOOL                      fRecallWithState;
+    FILETIME                  sftSystemTime;
+    char                      *pszCTLSignerUsageOID;
+    DWORD                     dwProvFlags;
+    DWORD                     dwFinalError;
+    PCERT_USAGE_MATCH         pRequestUsage;
+    DWORD                     dwTrustPubSettings;
+    DWORD                     dwUIStateFlags;
+} CRYPT_PROVIDER_DATA, *PCRYPT_PROVIDER_DATA;
+
+#define CPD_CHOICE_SIP 1
+
+#define CPD_USE_NT5_CHAIN_FLAG                  0x80000000
+#define CPD_REVOCATION_CHECK_NONE               0x00010000
+#define CPD_REVOCATION_CHECK_END_CERT           0x00020000
+#define CPD_REVOCATION_CHECK_CHAIN              0x00040000
+#define CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00080000
+
+#define CPD_UISTATE_MODE_PROMPT 0x00000000
+#define CPD_UISTATE_MODE_BLOCK  0x00000001
+#define CPD_UISTATE_MODE_ALLOW  0x00000002
+#define CPD_UISTATE_MODE_MASK   0x00000003
+
+typedef BOOL (*PFN_PROVUI_CALL)(HWND hWndSecurityDialog,
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+
+typedef struct _CRYPT_PROVUI_FUNCS {
+    DWORD cbStruct;
+    CRYPT_PROVUI_DATA psUIData;
+    PFN_PROVUI_CALL pfnOnMoreInfoClick;
+    PFN_PROVUI_CALL pfnOnMoreInfoClickDefault;
+    PFN_PROVUI_CALL pfnOnAdvancedClick;
+    PFN_PROVUI_CALL pfnOnAdvancedClickDefault;
+} CRYPT_PROVUI_FUNCS, *PCRYPT_PROVUI_FUNCS;
+
+#include <poppack.h>
+
+#define WVT_OFFSETOF(t,f)     ((ULONG)((ULONG_PTR)(&((t*)0)->f)))
+#define WVT_ISINSTRUCT(t,s,f) (WVT_OFFSETOF(t,f) + sizeof(((t*)0)->f) <= (s))
+#define WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(t,s,f) WVT_ISINSTRUCT(t,s,f)
+
+#define WTPF_TRUSTTEST            0x00000020
+#define WTPF_TESTCANBEVALID       0x00000080
+#define WTPF_IGNOREEXPIRATION     0x00000100
+#define WTPF_IGNOREREVOKATION     0x00000200
+#define WTPF_OFFLINEOK_IND        0x00000400
+#define WTPF_OFFLINEOK_COM        0x00000800
+#define WTPF_OFFLINEOKNBU_IND     0x00001000
+#define WTPF_OFFLINEOKNBU_COM     0x00002000
+#define WTPF_VERIFY_V1_OFF        0x00010000
+#define WTPF_IGNOREREVOCATIONONTS 0x00020000
+#define WTPF_ALLOWONLYPERTRUST    0x00040000
+
+#define WT_ADD_ACTION_ID_RET_RESULT_FLAG 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__GNUC__)
+#define WT_PROVIDER_CERTTRUST_FUNCTION (const WCHAR []) \
+    {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
+#elif defined(_MSC_VER)
+#define WT_PROVIDER_CERTTRUST_FUNCTION L"WintrustCertificateTrust"
+#else
+static const WCHAR WT_PROVIDER_CERTTRUST_FUNCTION[] =
+    {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
+#endif
+
+BOOL      WINAPI WintrustAddActionID(GUID*,DWORD,CRYPT_REGISTER_ACTIONID*);
+BOOL      WINAPI WintrustRemoveActionID(GUID*);
+BOOL      WINAPI WintrustLoadFunctionPointers(GUID*,CRYPT_PROVIDER_FUNCTIONS*);
+BOOL      WINAPI WintrustAddDefaultForUsage(const char*,CRYPT_PROVIDER_REGDEFUSAGE*);
+void      WINAPI WintrustGetRegPolicyFlags(DWORD*);
+BOOL      WINAPI WintrustSetRegPolicyFlags(DWORD);
+LONG      WINAPI WinVerifyTrust(HWND,GUID*,LPVOID);
+HRESULT   WINAPI WinVerifyTrustEx(HWND,GUID*,WINTRUST_DATA*);
+
+CRYPT_PROVIDER_CERT * WINAPI WTHelperGetProvCertFromChain(
+ CRYPT_PROVIDER_SGNR *pSgnr, DWORD idxCert);
+CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain(
+ CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,
+ DWORD idxCounterSigner);
+CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData);
+CRYPT_PROVIDER_PRIVDATA * WINAPI WTHelperGetProvPrivateDataFromChain(CRYPT_PROVIDER_DATA *,GUID *);
+
+#define SPC_INDIRECT_DATA_OBJID      "1.3.6.1.4.1.311.2.1.4"
+#define SPC_SP_AGENCY_INFO_OBJID     "1.3.6.1.4.1.311.2.1.10"
+#define SPC_STATEMENT_TYPE_OBJID     "1.3.6.1.4.1.311.2.1.11"
+#define SPC_SP_OPUS_INFO_OBJID       "1.3.6.1.4.1.311.2.1.12"
+#define SPC_CERT_EXTENSIONS_OBJID    "1.3.6.1.4.1.311.2.1.14"
+#define SPC_PE_IMAGE_DATA_OBJID      "1.3.6.1.4.1.311.2.1.15"
+#define SPC_RAW_FILE_DATA_OBJID      "1.3.6.1.4.1.311.2.1.18"
+#define SPC_STRUCTURED_STORAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.19"
+#define SPC_JAVA_CLASS_DATA_OBJID    "1.3.6.1.4.1.311.2.1.20"
+#define SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.21"
+#define SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.22"
+#define SPC_CAB_DATA_OBJID           "1.3.6.1.4.1.311.2.1.25"
+#define SPC_GLUE_RDN_OBJID           "1.3.6.1.4.1.311.2.1.25"
+#define SPC_MINIMAL_CRITERIA_OBJID   "1.3.6.1.4.1.311.2.1.26"
+#define SPC_FINANCIAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.27"
+#define SPC_LINK_OBJID               "1.3.6.1.4.1.311.2.1.28"
+#define SPC_SIGINFO_OBJID            "1.3.6.1.4.1.311.2.1.30"
+#define CAT_NAMEVALUE_OBJID          "1.3.6.1.4.1.311.12.2.1"
+#define CAT_MEMBERINFO_OBJID         "1.3.6.1.4.1.311.12.2.2"
+
+#define SPC_SP_AGENCY_INFO_STRUCT        ((LPCSTR) 2000)
+#define SPC_MINIMAL_CRITERIA_STRUCT      ((LPCSTR) 2001)
+#define SPC_FINANCIAL_CRITERIA_STRUCT    ((LPCSTR) 2002)
+#define SPC_INDIRECT_DATA_CONTENT_STRUCT ((LPCSTR) 2003)
+#define SPC_PE_IMAGE_DATA_STRUCT         ((LPCSTR) 2004)
+#define SPC_LINK_STRUCT                  ((LPCSTR) 2005)
+#define SPC_STATEMENT_TYPE_STRUCT        ((LPCSTR) 2006)
+#define SPC_SP_OPUS_INFO_STRUCT          ((LPCSTR) 2007)
+#define SPC_CAB_DATA_STRUCT              ((LPCSTR) 2008)
+#define SPC_JAVA_CLASS_DATA_STRUCT       ((LPCSTR) 2009)
+#define SPC_SIGINFO_STRUCT               ((LPCSTR) 2130)
+#define CAT_NAMEVALUE_STRUCT             ((LPCSTR) 2221)
+#define CAT_MEMBERINFO_STRUCT            ((LPCSTR) 2222)
+
+#define SPC_UUID_LENGTH 16
+typedef BYTE SPC_UUID[SPC_UUID_LENGTH];
+
+typedef struct _SPC_SERIALIZED_OBJECT
+{
+    SPC_UUID        ClassId;
+    CRYPT_DATA_BLOB SerializedData;
+} SPC_SERIALIZED_OBJECT, *PSPC_SERIALIZED_OBJECT;
+
+typedef struct SPC_SIGINFO_
+{
+    DWORD dwSipVersion;
+    GUID  gSIPGuid;
+    DWORD dwReserved1;
+    DWORD dwReserved2;
+    DWORD dwReserved3;
+    DWORD dwReserved4;
+    DWORD dwReserved5;
+} SPC_SIGINFO, *PSPC_SIGINFO;
+
+#define SPC_URL_LINK_CHOICE     1
+#define SPC_MONIKER_LINK_CHOICE 2
+#define SPC_FILE_LINK_CHOICE    3
+
+typedef struct SPC_LINK_
+{
+    DWORD dwLinkChoice;
+    union
+    {
+        LPWSTR                pwszUrl;
+        SPC_SERIALIZED_OBJECT Moniker;
+        LPWSTR                pwszFile;
+    } DUMMYUNIONNAME;
+} SPC_LINK, *PSPC_LINK;
+
+typedef struct _SPC_PE_IMAGE_DATA
+{
+    CRYPT_BIT_BLOB Flags;
+    PSPC_LINK      pFile;
+} SPC_PE_IMAGE_DATA, *PSPC_PE_IMAGE_DATA;
+
+typedef struct _SPC_INDIRECT_DATA_CONTENT
+{
+    CRYPT_ATTRIBUTE_TYPE_VALUE Data;
+    CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
+    CRYPT_HASH_BLOB            Digest;
+} SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT;
+
+typedef struct _SPC_FINANCIAL_CRITERIA
+{
+    BOOL fFinancialInfoAvailable;
+    BOOL fMeetsCriteria;
+} SPC_FINANCIAL_CRITERIA, *PSPC_FINANCIAL_CRITERIA;
+
+typedef struct _SPC_IMAGE
+{
+    struct SPC_LINK_ *pImageLink;
+    CRYPT_DATA_BLOB   Bitmap;
+    CRYPT_DATA_BLOB   Metafile;
+    CRYPT_DATA_BLOB   EnhancedMetafile;
+    CRYPT_DATA_BLOB   GifFile;
+} SPC_IMAGE, *PSPC_IMAGE;
+
+typedef struct _SPC_SP_AGENCY_INFO
+{
+    struct SPC_LINK_ *pPolicyInformation;
+    LPWSTR            pwszPolicyDisplayText;
+    PSPC_IMAGE        pLogoImage;
+    struct SPC_LINK_ *pLogoLink;
+} SPC_SP_AGENCY_INFO, *PSPC_SP_AGENCY_INFO;
+
+typedef struct _SPC_STATEMENT_TYPE
+{
+    DWORD  cKeyPurposeId;
+    LPSTR *rgpszKeyPurposeId;
+} SPC_STATEMENT_TYPE, *PSPC_STATEMENT_TYPE;
+
+typedef struct _SPC_SP_OPUS_INFO
+{
+    LPCWSTR           pwszProgramName;
+    struct SPC_LINK_ *pMoreInfo;
+    struct SPC_LINK_ *pPublisherInfo;
+} SPC_SP_OPUS_INFO, *PSPC_SP_OPUS_INFO;
+
+typedef struct _CAT_NAMEVALUE
+{
+    LPWSTR          pwszTag;
+    DWORD           fdwFlags;
+    CRYPT_DATA_BLOB Value;
+} CAT_NAMEVALUE, *PCAT_NAMEVALUE;
+
+typedef struct _CAT_MEMBERINFO
+{
+    LPWSTR pwszSubjGuid;
+    DWORD  dwCertVersion;
+} CAT_MEMBERINFO, *PCAT_MEMBERINFO;
+
+/* PSDK protects the remaining defines with WT_DEFINE_ALL_APIS, but it's
+ * defined by default.  No need to protect against bad headers from old PSDKs.
+ */
+
+typedef struct _WIN_CERTIFICATE {
+  DWORD dwLength;
+  WORD  wRevision;                   /*  WIN_CERT_REVISION_xxx */
+  WORD  wCertificateType;            /*  WIN_CERT_TYPE_xxx */
+  BYTE  bCertificate[ANYSIZE_ARRAY];
+} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;
+
+#define WIN_CERT_REVISION_1_0 0x0100
+#define WIN_CERT_REVISION_2_0 0x0200
+
+#define WIN_CERT_TYPE_X509             0x0001 /* X.509 Certificate */
+#define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */
+#define WIN_CERT_TYPE_RESERVED_1       0x0003 /* Reserved */
+#define WIN_CERT_TYPE_TS_STACK_SIGNED  0x0004
+
+typedef LPVOID WIN_TRUST_SUBJECT;
+
+typedef struct _WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT
+{
+    HANDLE            hClientToken;
+    GUID             *SubjectType;
+    WIN_TRUST_SUBJECT Subject;
+} WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT,
+ *LPWIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT;
+
+typedef struct _WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY
+{
+    GUID             *SubjectType;
+    WIN_TRUST_SUBJECT Subject;
+} WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY,
+ *LPWIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY;
+
+typedef struct _WIN_TRUST_SUBJECT_FILE
+{
+    HANDLE  hFile;
+    LPCWSTR lpPath;
+} WIN_TRUST_SUBJECT_FILE, *LPWIN_TRUST_SUBJECT_FILE;
+
+typedef struct _WIN_TRUST_SUBJECT_FILE_AND_DISPLAY
+{
+    HANDLE  hFile;
+    LPCWSTR lpPath;
+    LPCWSTR lpDisplayName;
+} WIN_TRUST_SUBJECT_FILE_AND_DISPLAY, *LPWIN_TRUST_SUBJECT_FILE_AND_DISPLAY;
+
+#define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE \
+     { 0x64b9d180, 0x8da2, 0x11cf, { 0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb }}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h
new file mode 100644
index 0000000..a3f6f34
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h
@@ -0,0 +1,4043 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINUSER_
+#define _WINUSER_
+
+#if !defined(_USER32_)
+#define WINUSERAPI DECLSPEC_IMPORT
+#else
+#define WINUSERAPI
+#endif
+
+#ifndef RC_INVOKED
+#include <stdarg.h>
+#endif
+#include <winuser.rh>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define a bunch of callback types */
+
+#if defined(STRICT)
+typedef INT_PTR (CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM);
+typedef BOOL    (CALLBACK *DRAWSTATEPROC)(HDC,LPARAM,WPARAM,int,int);
+typedef INT     (CALLBACK *EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
+typedef INT     (CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
+typedef BOOL    (CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,INT);
+typedef LRESULT (CALLBACK *HOOKPROC)(INT,WPARAM,LPARAM);
+typedef BOOL    (CALLBACK *NAMEENUMPROCA)(LPSTR,LPARAM);
+typedef BOOL    (CALLBACK *NAMEENUMPROCW)(LPWSTR,LPARAM);
+typedef BOOL    (CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
+typedef BOOL    (CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
+typedef BOOL    (CALLBACK *PROPENUMPROCEXA)(HWND,LPSTR,HANDLE,ULONG_PTR);
+typedef BOOL    (CALLBACK *PROPENUMPROCEXW)(HWND,LPWSTR,HANDLE,ULONG_PTR);
+typedef VOID    (CALLBACK *SENDASYNCPROC)(HWND,UINT,ULONG_PTR,LRESULT);
+typedef VOID    (CALLBACK *TIMERPROC)(HWND,UINT,UINT_PTR,DWORD);
+typedef VOID    (CALLBACK *WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,
+                                         DWORD,DWORD);
+typedef BOOL    (CALLBACK *WNDENUMPROC)(HWND,LPARAM);
+
+#else
+typedef FARPROC DLGPROC;
+typedef FARPROC DRAWSTATEPROC;
+typedef FARPROC EDITWORDBREAKPROCA;
+typedef FARPROC EDITWORDBREAKPROCW;
+typedef FARPROC GRAYSTRINGPROC;
+typedef FARPROC HOOKPROC;
+typedef FARPROC NAMEENUMPROCA;
+typedef FARPROC NAMEENUMPROCW;
+typedef FARPROC PROPENUMPROCA;
+typedef FARPROC PROPENUMPROCW;
+typedef FARPROC PROPENUMPROCEXA;
+typedef FARPROC PROPENUMPROCEXW;
+typedef FARPROC SENDASYNCPROC;
+typedef FARPROC TIMERPROC;
+typedef FARPROC WINEVENTPROC;
+typedef FARPROC WNDENUMPROC;
+#endif /* STRICT */
+
+typedef NAMEENUMPROCA WINSTAENUMPROCA;
+typedef NAMEENUMPROCA DESKTOPENUMPROCA;
+typedef NAMEENUMPROCW WINSTAENUMPROCW;
+typedef NAMEENUMPROCW DESKTOPENUMPROCW;
+
+typedef LRESULT (CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);
+
+DECL_WINELIB_TYPE_AW(DESKTOPENUMPROC)
+DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
+DECL_WINELIB_TYPE_AW(NAMEENUMPROC)
+DECL_WINELIB_TYPE_AW(PROPENUMPROC)
+DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
+DECL_WINELIB_TYPE_AW(WINSTAENUMPROC)
+
+
+typedef HANDLE HDWP;
+
+#define UOI_FLAGS       1
+#define UOI_NAME        2
+#define UOI_TYPE        3
+#define UOI_USER_SID    4
+
+#define WSF_VISIBLE     1
+#define DF_ALLOWOTHERACCOUNTHOOK  1
+
+typedef struct tagUSEROBJECTFLAGS {
+    BOOL fInherit;
+    BOOL fReserved;
+    DWORD dwFlags;
+} USEROBJECTFLAGS, *PUSEROBJECTFLAGS;
+
+typedef struct tagBSMINFO {
+    UINT  cbSize;
+    HDESK hdesk;
+    HWND  hwnd;
+    LUID  luid;
+} BSMINFO, *PBSMINFO;
+
+/* Window stations */
+#define WINSTA_ENUMDESKTOPS         0x0001
+#define WINSTA_READATTRIBUTES       0x0002
+#define WINSTA_ACCESSCLIPBOARD      0x0004
+#define WINSTA_CREATEDESKTOP        0x0008
+#define WINSTA_WRITEATTRIBUTES      0x0010
+#define WINSTA_ACCESSGLOBALATOMS    0x0020
+#define WINSTA_EXITWINDOWS          0x0040
+#define WINSTA_ENUMERATE            0x0100
+#define WINSTA_READSCREEN           0x0200
+#define WINSTA_ALL_ACCESS           0x037f
+
+/* Desktops */
+#define DESKTOP_READOBJECTS         0x0001
+#define DESKTOP_CREATEWINDOW        0x0002
+#define DESKTOP_CREATEMENU          0x0004
+#define DESKTOP_HOOKCONTROL         0x0008
+#define DESKTOP_JOURNALRECORD       0x0010
+#define DESKTOP_JOURNALPLAYBACK     0x0020
+#define DESKTOP_ENUMERATE           0x0040
+#define DESKTOP_WRITEOBJECTS        0x0080
+#define DESKTOP_SWITCHDESKTOP       0x0100
+
+
+/* flags for FILTERKEYS dwFlags field */
+#define FKF_AVAILABLE       0x00000002
+#define FKF_CLICKON         0x00000040
+#define FKF_FILTERKEYSON    0x00000001
+#define FKF_HOTKEYACTIVE    0x00000004
+#define FKF_HOTKEYSOUND     0x00000010
+#define FKF_CONFIRMHOTKEY   0x00000008
+#define FKF_INDICATOR       0x00000020
+
+typedef struct tagFILTERKEYS
+{
+    UINT   cbSize;
+    DWORD  dwFlags;
+    DWORD  iWaitMSec;
+    DWORD  iDelayMSec;
+    DWORD  iRepeatMSec;
+    DWORD  iBounceMSec;
+} FILTERKEYS, *LPFILTERKEYS;
+
+/* flags for TOGGLEKEYS dwFlags field */
+#define TKF_AVAILABLE       0x00000002
+#define TKF_CONFIRMHOTKEY   0x00000008
+#define TKF_HOTKEYACTIVE    0x00000004
+#define TKF_HOTKEYSOUND     0x00000010
+#define TKF_TOGGLEKEYSON    0x00000001
+
+typedef struct tagTOGGLEKEYS
+{
+    DWORD   cbSize;
+    DWORD   dwFlags;
+} TOGGLEKEYS, *LPTOGGLEKEYS;
+
+/* flags for MOUSEKEYS dwFlags field */
+#define MKF_AVAILABLE       0x00000002
+#define MKF_CONFIRMHOTKEY   0x00000008
+#define MKF_HOTKEYACTIVE    0x00000004
+#define MKF_HOTKEYSOUND     0x00000010
+#define MKF_INDICATOR       0x00000020
+#define MKF_MOUSEKEYSON     0x00000001
+#define MKF_MODIFIERS       0x00000040
+#define MKF_REPLACENUMBERS  0x00000080
+
+typedef struct tagMOUSEKEYS
+{
+    UINT    cbSize;
+    DWORD   dwFlags;
+    DWORD   iMaxSpeed;
+    DWORD   iTimeToMaxSpeed;
+    DWORD   iCtrlSpeed;
+    DWORD   dwReserved1;
+    DWORD   dwReserved2;
+} MOUSEKEYS, *LPMOUSEKEYS;
+
+/* struct and defines for GetMouseMovePointsEx */
+#define GMMP_USE_DISPLAY_POINTS 1
+#define GMMP_USE_HIGH_RESOLUTION_POINTS 2
+
+typedef struct tagMOUSEMOVEPOINT {
+    int x;
+    int y;
+    DWORD time;
+    ULONG_PTR dwExtraInfo;
+} MOUSEMOVEPOINT,*PMOUSEMOVEPOINT,*LPMOUSEMOVEPOINT;
+
+/* flags for STICKYKEYS dwFlags field */
+#define SKF_AUDIBLEFEEDBACK 0x00000040
+#define SKF_AVAILABLE       0x00000002
+#define SKF_CONFIRMHOTKEY   0x00000008
+#define SKF_HOTKEYACTIVE    0x00000004
+#define SKF_HOTKEYSOUND     0x00000010
+#define SKF_INDICATOR       0x00000020
+#define SKF_STICKYKEYSON    0x00000001
+#define SKF_TRISTATE        0x00000080
+#define SKF_TWOKEYSOFF      0x00000100
+
+typedef struct tagSTICKYKEYS
+{
+    DWORD   cbSize;
+    DWORD   dwFlags;
+} STICKYKEYS, *LPSTICKYKEYS;
+
+/* flags for ACCESSTIMEOUT dwFlags field */
+#define ATF_ONOFFFEEDBACK   0x00000002
+#define ATF_AVAILABLE       0x00000004
+#define ATF_TIMEOUTON       0x00000001
+
+typedef struct tagACCESSTIMEOUT
+{
+    UINT    cbSize;
+    DWORD   dwFlags;
+    DWORD   iTimeOutMSec;
+} ACCESSTIMEOUT, *LPACCESSTIMEOUT;
+
+/* flags for SERIALKEYS dwFlags field */
+#define SERKF_ACTIVE        0x00000008
+#define SERKF_AVAILABLE     0x00000002
+#define SERKF_INDICATOR     0x00000004
+#define SERKF_SERIALKEYSON  0x00000001
+
+typedef struct tagSERIALKEYSA
+{
+    UINT  cbSize;
+    DWORD  dwFlags;
+    LPSTR  lpszActivePort;
+    LPSTR  lpszPort;
+    UINT  iBaudRate;
+    UINT  iPortState;
+    UINT  iActive;
+} SERIALKEYSA, *LPSERIALKEYSA;
+
+typedef struct tagSERIALKEYSW {
+    UINT  cbSize;
+    DWORD   dwFlags;
+    LPWSTR  lpszActivePort;
+    LPWSTR  lpszPort;
+    UINT   iBaudRate;
+    UINT   iPortState;
+    UINT   iActive;
+} SERIALKEYSW,*LPSERIALKEYSW;
+
+DECL_WINELIB_TYPE_AW(SERIALKEYS)
+DECL_WINELIB_TYPE_AW(LPSERIALKEYS)
+
+/* flags for SOUNDSENTRY dwFlags field */
+#define SSF_AVAILABLE       0x00000002
+#define SSF_SOUNDSENTRYON   0x00000001
+
+#define SSTF_BORDER         0x00000002
+#define SSTF_CHARS          0x00000001
+#define SSTF_DISPLAY        0x00000003
+#define SSTF_NONE           0x00000000
+
+#define SSGF_DISPLAY        0x00000003
+#define SSGF_NONE           0x00000000
+
+#define SSWF_DISPLAY        0x00000003
+#define SSWF_NONE           0x00000000
+#define SSWF_TITLE          0x00000001
+#define SSWF_WINDOW         0x00000002
+
+typedef struct tagSOUNDSENTRYA
+{
+    UINT  cbSize;
+    DWORD  dwFlags;
+    DWORD  iFSTextEffect;
+    DWORD  iFSTextEffectMSec;
+    DWORD  iFSTextEffectColorBits;
+    DWORD  iFSGrafEffect;
+    DWORD  iFSGrafEffectMSec;
+    DWORD  iFSGrafEffectColor;
+    DWORD  iWindowsEffect;
+    DWORD  iWindowsEffectMSec;
+    LPSTR  lpszWindowsEffectDLL;
+    DWORD  iWindowsEffectOrdinal;
+} SOUNDSENTRYA, *LPSOUNDSENTRYA;
+
+typedef struct tagSOUNDSENTRYW
+{
+    UINT  cbSize;
+    DWORD  dwFlags;
+    DWORD  iFSTextEffect;
+    DWORD  iFSTextEffectMSec;
+    DWORD  iFSTextEffectColorBits;
+    DWORD  iFSGrafEffect;
+    DWORD  iFSGrafEffectMSec;
+    DWORD  iFSGrafEffectColor;
+    DWORD  iWindowsEffect;
+    DWORD  iWindowsEffectMSec;
+    LPWSTR  lpszWindowsEffectDLL;
+    DWORD  iWindowsEffectOrdinal;
+} SOUNDSENTRYW, *LPSOUNDSENTRYW;
+
+DECL_WINELIB_TYPE_AW(SOUNDSENTRY)
+DECL_WINELIB_TYPE_AW(LPSOUNDSENTRY)
+
+/* flags for HIGHCONTRAST dwFlags field */
+#define HCF_HIGHCONTRASTON  0x00000001
+#define HCF_AVAILABLE       0x00000002
+#define HCF_HOTKEYACTIVE    0x00000004
+#define HCF_CONFIRMHOTKEY   0x00000008
+#define HCF_HOTKEYSOUND     0x00000010
+#define HCF_INDICATOR       0x00000020
+#define HCF_HOTKEYAVAILABLE 0x00000040
+
+typedef struct tagHIGHCONTRASTA
+{
+    UINT  cbSize;
+    DWORD   dwFlags;
+    LPSTR   lpszDefaultScheme;
+} HIGHCONTRASTA, *LPHIGHCONTRASTA;
+
+typedef struct tagHIGHCONTRASTW
+{
+    UINT  cbSize;
+    DWORD   dwFlags;
+    LPWSTR  lpszDefaultScheme;
+} HIGHCONTRASTW, *LPHIGHCONTRASTW;
+
+DECL_WINELIB_TYPE_AW(HIGHCONTRAST)
+DECL_WINELIB_TYPE_AW(LPHIGHCONTRAST)
+
+typedef struct tagEVENTMSG
+{
+    UINT  message;
+    UINT  paramL;
+    UINT  paramH;
+    DWORD   time;
+    HWND  hwnd;
+} EVENTMSG, *PEVENTMSG, *LPEVENTMSG;
+
+/* WH_KEYBOARD_LL structure */
+typedef struct tagKBDLLHOOKSTRUCT
+{
+    DWORD   vkCode;
+    DWORD   scanCode;
+    DWORD   flags;
+    DWORD   time;
+    ULONG_PTR dwExtraInfo;
+} KBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
+
+#define LLKHF_EXTENDED   (KF_EXTENDED >> 8)
+#define LLKHF_INJECTED   0x00000010
+#define LLKHF_ALTDOWN    (KF_ALTDOWN >> 8)
+#define LLKHF_UP         (KF_UP >> 8)
+
+/* WH_MOUSE_LL structure */
+typedef struct tagMSLLHOOKSTRUCT
+{
+    POINT   pt;
+    DWORD   mouseData;
+    DWORD   flags;
+    DWORD   time;
+    ULONG_PTR dwExtraInfo;
+} MSLLHOOKSTRUCT, *LPMSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;
+
+#define LLMHF_INJECTED  0x00000001
+
+    /* Mouse hook structure */
+
+typedef struct
+{
+    POINT pt;
+    HWND  hwnd;
+    UINT  wHitTestCode;
+    ULONG_PTR dwExtraInfo;
+} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;
+
+
+    /* Hardware hook structure */
+
+typedef struct
+{
+    HWND    hwnd;
+    UINT    message;
+    WPARAM  wParam;
+    LPARAM  lParam;
+} HARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT;
+
+
+  /* Debug hook structure */
+
+typedef struct tagDEBUGHOOKINFO
+{
+    DWORD       idThread;
+    DWORD       idThreadInstaller;
+    LPARAM      lParam;
+    WPARAM    wParam;
+    INT       code;
+} DEBUGHOOKINFO, *PDEBUGHOOKINFO, *LPDEBUGHOOKINFO;
+
+#define HKL_PREV   0
+#define HKL_NEXT   1
+
+#define KLF_ACTIVATE       0x00000001
+#define KLF_SUBSTITUTE_OK  0x00000002
+#define KLF_UNLOADPREVIOUS 0x00000004
+#define KLF_REORDER        0x00000008
+#define KLF_REPLACELANG    0x00000010
+#define KLF_NOTELLSHELL    0x00000080
+#define KLF_SETFORPROCESS  0x00000100
+#define KLF_SHIFTLOCK      0x00010000
+#define KLF_RESET          0x40000000
+
+#define KL_NAMELENGTH      9
+
+typedef struct tagMOUSEINPUT
+{
+    LONG    dx;
+    LONG    dy;
+    DWORD   mouseData;
+    DWORD   dwFlags;
+    DWORD   time;
+    ULONG_PTR dwExtraInfo;
+} MOUSEINPUT, *PMOUSEINPUT, *LPMOUSEINPUT;
+
+typedef struct tagKEYBDINPUT
+{
+    WORD    wVk;
+    WORD    wScan;
+    DWORD   dwFlags;
+    DWORD   time;
+    ULONG_PTR dwExtraInfo;
+} KEYBDINPUT, *PKEYBDINPUT, *LPKEYBDINPUT;
+
+typedef struct tagHARDWAREINPUT
+{
+    DWORD   uMsg;
+    WORD    wParamL;
+    WORD    wParamH;
+} HARDWAREINPUT, *PHARDWAREINPUT, *LPHARDWAREINPUT;
+
+#define INPUT_MOUSE     0
+#define INPUT_KEYBOARD  1
+#define INPUT_HARDWARE  2
+
+typedef struct tagINPUT
+{
+    DWORD type;
+    union
+    {
+        MOUSEINPUT      mi;
+        KEYBDINPUT      ki;
+        HARDWAREINPUT   hi;
+    } DUMMYUNIONNAME;
+} INPUT, *PINPUT, *LPINPUT;
+
+DECLARE_HANDLE(HRAWINPUT);
+
+typedef struct tagRAWINPUTDEVICELIST
+{
+    HANDLE hDevice;
+    DWORD dwType;
+} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;
+
+typedef struct tagRAWHID {
+    DWORD dwSizeHid;
+    DWORD dwCount;
+    BYTE bRawData;
+} RAWHID, *LPRAWHID;
+
+typedef struct tagRAWKEYBOARD {
+    USHORT MakeCode;
+    USHORT Flags;
+    USHORT Reserved;
+    USHORT VKey;
+    UINT Message;
+    ULONG ExtraInformation;
+} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
+
+typedef struct tagRAWMOUSE {
+    USHORT usFlags;
+    union {
+        ULONG ulButtons;
+        struct {
+            USHORT usButtonFlags;
+            USHORT usButtonData;
+        } DUMMYSTRUCTNAME;
+    } DUMMYUNIONNAME;
+    ULONG ulRawButtons;
+    LONG  lLastX;
+    LONG  lLastY;
+    ULONG ulExtraInformation;
+} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
+
+typedef struct tagRAWINPUTHEADER {
+    DWORD dwType;
+    DWORD dwSize;
+    HANDLE hDevice;
+    WPARAM wParam;
+} RAWINPUTHEADER, *PRAWINPUTHEADER;
+
+typedef struct tagRAWINPUT {
+    RAWINPUTHEADER header;
+    union {
+        RAWMOUSE    mouse;
+        RAWKEYBOARD keyboard;
+        RAWHID      hid;
+    } data;
+} RAWINPUT, *PRAWINPUT, *LPRAWINPUT;
+
+typedef struct tagRAWINPUTDEVICE {
+    USHORT usUsagePage;
+    USHORT usUsage;
+    DWORD dwFlags;
+    HWND hwndTarget;
+} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE;
+
+typedef struct tagRID_DEVICE_INFO_MOUSE {
+    DWORD dwId;
+    DWORD dwNumberOfButtons;
+    DWORD dwSampleRate;
+    BOOL fHasHorizontalWheel;
+} RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE;
+
+typedef struct tagRID_DEVICE_INFO_KEYBOARD {
+    DWORD dwType;
+    DWORD dwSubType;
+    DWORD dwKeyboardMode;
+    DWORD dwNumberOfFunctionKeys;
+    DWORD dwNumberOfIndicators;
+    DWORD dwNumberOfKeysTotal;
+} RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD;
+
+typedef struct tagRID_DEVICE_INFO_HID {
+    DWORD dwVendorId;
+    DWORD dwProductId;
+    DWORD dwVersionNumber;
+    USHORT usUsagePage;
+    USHORT usUsage;
+} RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID;
+
+typedef struct tagRID_DEVICE_INFO {
+    DWORD    cbSize;
+    DWORD    dwType;
+    union {
+        RID_DEVICE_INFO_MOUSE     mouse;
+        RID_DEVICE_INFO_KEYBOARD  keyboard;
+        RID_DEVICE_INFO_HID       hid;
+    } DUMMYUNIONNAME;
+} RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO;
+
+#define GET_RAWINPUT_CODE_WPARAM(wParam) ((wParam) & 0xff)
+
+#define RIM_INPUT     0
+#define RIM_INPUTSINK 1
+
+#define RIM_TYPEMOUSE    0
+#define RIM_TYPEKEYBOARD 1
+#define RIM_TYPEHID      2
+
+#define RI_MOUSE_LEFT_BUTTON_DOWN   0x0001
+#define RI_MOUSE_LEFT_BUTTON_UP     0x0002
+#define RI_MOUSE_RIGHT_BUTTON_DOWN  0x0004
+#define RI_MOUSE_RIGHT_BUTTON_UP    0x0008
+#define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010
+#define RI_MOUSE_MIDDLE_BUTTON_UP   0x0020
+
+#define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_1_UP   RI_MOUSE_LEFT_BUTTON_UP
+#define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_2_UP   RI_MOUSE_RIGHT_BUTTON_UP
+#define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_3_UP   RI_MOUSE_MIDDLE_BUTTON_UP
+
+#define RI_MOUSE_BUTTON_4_DOWN    0x0040
+#define RI_MOUSE_BUTTON_4_UP      0x0080
+#define RI_MOUSE_BUTTON_5_DOWN    0x0100
+#define RI_MOUSE_BUTTON_5_UP      0x0200
+#define RI_MOUSE_WHEEL            0x0400
+#define RI_MOUSE_HORIZONTAL_WHEEL 0x0800
+
+#define MOUSE_MOVE_RELATIVE      0x00
+#define MOUSE_MOVE_ABSOLUTE      0x01
+#define MOUSE_VIRTUAL_DESKTOP    0x02
+#define MOUSE_ATTRIBUTES_CHANGED 0x04
+#define MOUSE_MOVE_NOCOALESCE    0x08
+
+#define KEYBOARD_OVERRUN_MAKE_CODE 0xFF
+
+#define RI_KEY_MAKE            0x00
+#define RI_KEY_BREAK           0x01
+#define RI_KEY_E0              0x02
+#define RI_KEY_E1              0x04
+#define RI_KEY_TERMSRV_SET_LED 0x08
+#define RI_KEY_TERMSRV_SHADOW  0x10
+
+#define RAWINPUT_ALIGN(x) (((x) + sizeof(DWORD_PTR) - 1) & ~(sizeof(DWORD_PTR) - 1))
+#define NEXTRAWINPUTBLOCK(ptr) ((PRAWINPUT)RAWINPUT_ALIGN((ULONG_PTR)((PBYTE)(ptr) + (ptr)->header.dwSize)))
+
+#define RID_INPUT  0x10000003
+#define RID_HEADER 0x10000005
+
+#define RIDI_PREPARSEDDATA 0x20000005
+#define RIDI_DEVICENAME    0x20000007
+#define RIDI_DEVICEINFO    0x2000000b
+
+#define RIDEV_REMOVE       0x00000001
+#define RIDEV_EXCLUDE      0x00000010
+#define RIDEV_PAGEONLY     0x00000020
+#define RIDEV_NOLEGACY     0x00000030
+#define RIDEV_INPUTSINK    0x00000100
+#define RIDEV_CAPTUREMOUSE 0x00000200
+#define RIDEV_NOHOTKEYS    0x00000200
+#define RIDEV_APPKEYS      0x00000400
+#define RIDEV_EXINPUTSINK  0x00001000
+#define RIDEV_DEVNOTIFY    0x00002000
+#define RIDEV_EXMODEMASK   0x000000F0
+
+#define RIDEV_EXMODE(mode) ((mode) & RIDEV_EXMODEMASK)
+
+#define GIDC_ARRIVAL 1
+#define GIDC_REMOVAL 2
+
+#if (_WIN32_WINNT >= 0x0601)
+#define GET_DEVICE_CHANGE_WPARAM(wParam) (LOWORD(wParam))
+#elif (_WIN32_WINNT >= 0x0501)
+#define GET_DEVICE_CHANGE_LPARAM(lParam) (LOWORD(lParam))
+#endif
+
+typedef struct tagGUITHREADINFO
+{
+    DWORD   cbSize;
+    DWORD   flags;
+    HWND    hwndActive;
+    HWND    hwndFocus;
+    HWND    hwndCapture;
+    HWND    hwndMenuOwner;
+    HWND    hwndMoveSize;
+    HWND    hwndCaret;
+    RECT    rcCaret;
+} GUITHREADINFO, *PGUITHREADINFO, *LPGUITHREADINFO;
+
+#define GUI_CARETBLINKING   0x00000001
+#define GUI_INMOVESIZE      0x00000002
+#define GUI_INMENUMODE      0x00000004
+#define GUI_SYSTEMMENUMODE  0x00000008
+#define GUI_POPUPMENUMODE   0x00000010
+#define GUI_16BITTASK       0x00000020
+
+
+/***** Dialogs *****/
+
+/* Gcc on Solaris has a version of this that we don't care about */
+#undef FSHIFT
+
+#define	FVIRTKEY	TRUE          /* Assumed to be == TRUE */
+#define	FNOINVERT	0x02
+#define	FSHIFT		0x04
+#define	FCONTROL	0x08
+#define	FALT		0x10
+
+
+typedef struct tagANIMATIONINFO
+{
+       UINT          cbSize;
+       INT           iMinAnimate;
+} ANIMATIONINFO, *LPANIMATIONINFO;
+
+typedef struct tagNMHDR
+{
+    HWND  hwndFrom;
+    UINT_PTR idFrom;
+    UINT  code;
+} NMHDR, *LPNMHDR;
+
+typedef struct tagDRAWTEXTPARAMS
+{
+	UINT	cbSize;
+	INT	iTabLength;
+	INT	iLeftMargin;
+	INT	iRightMargin;
+	UINT	uiLengthDrawn;
+} DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS;
+
+typedef struct
+{
+  LPARAM        lParam;
+  WPARAM      wParam;
+  UINT        message;
+  HWND        hwnd;
+} CWPSTRUCT, *PCWPSTRUCT, *LPCWPSTRUCT;
+
+typedef struct
+{
+  LRESULT       lResult;
+  LPARAM        lParam;
+  WPARAM      wParam;
+  DWORD         message;
+  HWND        hwnd;
+} CWPRETSTRUCT, *PCWPRETSTRUCT, *LPCWPRETSTRUCT;
+
+typedef struct tagWINDOWPLACEMENT
+{
+    UINT   length;
+    UINT   flags;
+    UINT   showCmd;
+    POINT  ptMinPosition;
+    POINT  ptMaxPosition;
+    RECT   rcNormalPosition;
+} WINDOWPLACEMENT, *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;
+
+
+  /* WINDOWPLACEMENT flags */
+#define WPF_SETMINPOSITION      0x0001
+#define WPF_RESTORETOMAXIMIZED  0x0002
+
+/***** Dialogs *****/
+
+#define IS_INTRESOURCE(x)   (((ULONG_PTR)(x) >> 16) == 0)
+#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
+#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
+
+#ifndef RC_INVOKED
+# ifdef WINE_NO_UNICODE_MACROS /* force using a cast */
+#  define MAKEINTRESOURCE(i) ((ULONG_PTR)((WORD)(i)))
+# else
+#  define MAKEINTRESOURCE WINELIB_NAME_AW(MAKEINTRESOURCE)
+# endif
+#endif
+
+/* Predefined resource types */
+#define RT_CURSOR         MAKEINTRESOURCE(1)
+#define RT_BITMAP         MAKEINTRESOURCE(2)
+#define RT_ICON           MAKEINTRESOURCE(3)
+#define RT_MENU           MAKEINTRESOURCE(4)
+#define RT_DIALOG         MAKEINTRESOURCE(5)
+#define RT_STRING         MAKEINTRESOURCE(6)
+#define RT_FONTDIR        MAKEINTRESOURCE(7)
+#define RT_FONT           MAKEINTRESOURCE(8)
+#define RT_ACCELERATOR    MAKEINTRESOURCE(9)
+#define RT_RCDATA         MAKEINTRESOURCE(10)
+#define RT_MESSAGETABLE   MAKEINTRESOURCE(11)
+#define RT_GROUP_CURSOR   MAKEINTRESOURCE(12)
+#define RT_GROUP_ICON     MAKEINTRESOURCE(14)
+#define RT_VERSION        MAKEINTRESOURCE(16)
+#define RT_DLGINCLUDE     MAKEINTRESOURCE(17)
+#define RT_PLUGPLAY       MAKEINTRESOURCE(19)
+#define RT_VXD            MAKEINTRESOURCE(20)
+#define RT_ANICURSOR      MAKEINTRESOURCE(21)
+#define RT_ANIICON        MAKEINTRESOURCE(22)
+#define RT_HTML           MAKEINTRESOURCE(23)
+
+
+  /* cbWndExtra bytes for dialog class */
+#define DLGWINDOWEXTRA      30
+
+
+  /* Dialog messages */
+#define DM_GETDEFID         (WM_USER+0)
+#define DM_SETDEFID         (WM_USER+1)
+#define DM_REPOSITION       (WM_USER+2)
+
+#define DC_HASDEFID         0x534b
+
+/* Bit flags for DRAWITEMSTRUCT.CtlType */
+#define ODT_MENU        1
+#define ODT_LISTBOX     2
+#define ODT_COMBOBOX    3
+#define ODT_BUTTON      4
+#define ODT_STATIC      5
+
+/* Bit flags for DRAWITEMSTRUCT.itemAction */
+#define ODA_DRAWENTIRE 0x1
+#define ODA_SELECT     0x2
+#define ODA_FOCUS      0x4
+
+/* Bit flags for DRAWITEMSTRUCT.itemState */
+#define ODS_SELECTED     0x0001 /* Selected */
+#define ODS_GRAYED       0x0002 /* Grayed (Menus only) */
+#define ODS_DISABLED     0x0004 /* Disabled */
+#define ODS_CHECKED      0x0008 /* Checked (Menus only) */
+#define ODS_FOCUS        0x0010 /* Has focus */
+#define ODS_DEFAULT      0x0020 /* Default */
+#define ODS_HOTLIGHT     0x0040 /* Highlighted when under mouse */
+#define ODS_INACTIVE     0x0080 /* Inactive */
+#define ODS_NOACCEL      0x0100 /* No keyboard accelerator */
+#define ODS_NOFOCUSRECT  0x0200 /* No focus rectangle */
+#define ODS_COMBOBOXEDIT 0x1000 /* Edit of a combo box */
+
+#ifndef NOCOLOR
+
+#define COLOR_SCROLLBAR		    0
+#define COLOR_BACKGROUND	    1
+#define COLOR_ACTIVECAPTION	    2
+#define COLOR_INACTIVECAPTION	    3
+#define COLOR_MENU		    4
+#define COLOR_WINDOW		    5
+#define COLOR_WINDOWFRAME	    6
+#define COLOR_MENUTEXT		    7
+#define COLOR_WINDOWTEXT	    8
+#define COLOR_CAPTIONTEXT  	    9
+#define COLOR_ACTIVEBORDER	   10
+#define COLOR_INACTIVEBORDER	   11
+#define COLOR_APPWORKSPACE	   12
+#define COLOR_HIGHLIGHT		   13
+#define COLOR_HIGHLIGHTTEXT	   14
+#define COLOR_BTNFACE              15
+#define COLOR_BTNSHADOW            16
+#define COLOR_GRAYTEXT             17
+#define COLOR_BTNTEXT		   18
+#define COLOR_INACTIVECAPTIONTEXT  19
+#define COLOR_BTNHIGHLIGHT         20
+/* win95 colors */
+#define COLOR_3DDKSHADOW           21
+#define COLOR_3DLIGHT              22
+#define COLOR_INFOTEXT             23
+#define COLOR_INFOBK               24
+#define COLOR_DESKTOP              COLOR_BACKGROUND
+#define COLOR_3DFACE               COLOR_BTNFACE
+#define COLOR_3DSHADOW             COLOR_BTNSHADOW
+#define COLOR_3DHIGHLIGHT          COLOR_BTNHIGHLIGHT
+#define COLOR_3DHILIGHT            COLOR_BTNHIGHLIGHT
+#define COLOR_BTNHILIGHT           COLOR_BTNHIGHLIGHT
+/* win98 colors */
+#define COLOR_ALTERNATEBTNFACE         25  /* undocumented, constant name unknown */
+#define COLOR_HOTLIGHT                 26
+#define COLOR_GRADIENTACTIVECAPTION    27
+#define COLOR_GRADIENTINACTIVECAPTION  28
+/* win2k/xp colors */
+#define COLOR_MENUHILIGHT              29
+#define COLOR_MENUBAR                  30
+
+  /* WM_CTLCOLOR values */
+#define CTLCOLOR_MSGBOX             0
+#define CTLCOLOR_EDIT               1
+#define CTLCOLOR_LISTBOX            2
+#define CTLCOLOR_BTN                3
+#define CTLCOLOR_DLG                4
+#define CTLCOLOR_SCROLLBAR          5
+#define CTLCOLOR_STATIC             6
+
+WINUSERAPI COLORREF WINAPI GetSysColor(INT);
+WINUSERAPI BOOL     WINAPI SetSysColors(INT,const INT*,const COLORREF*);
+
+#endif /* NOCOLOR */
+
+/* IMESTATUS type */
+#define EMSIS_COMPOSITIONSTRING 1
+
+/* IMESTATUS type specific data */
+#define EIMES_GETCOMPSTRATONCE         0x0001
+#define EIMES_CANCELCOMPSTRINFOCUS     0x0002
+#define EIMES_COMPLETECOMPSTRKILLFOCUS 0x0004
+
+/* EDITWORDBREAKPROC code values */
+#define WB_LEFT         0
+#define WB_RIGHT        1
+#define WB_ISDELIMITER  2
+
+/* Edit control notification codes */
+#define EN_SETFOCUS     0x0100
+#define EN_KILLFOCUS    0x0200
+#define EN_CHANGE       0x0300
+#define EN_UPDATE       0x0400
+#define EN_ERRSPACE     0x0500
+#define EN_MAXTEXT      0x0501
+#define EN_HSCROLL      0x0601
+#define EN_VSCROLL      0x0602
+
+/* New since win95 : EM_SETMARGIN parameters */
+#define EC_LEFTMARGIN	0x0001
+#define EC_RIGHTMARGIN	0x0002
+#define EC_USEFONTINFO	0xffff
+
+
+  /* GetSystemMetrics() codes */
+#define SM_CXSCREEN	       0
+#define SM_CYSCREEN            1
+#define SM_CXVSCROLL           2
+#define SM_CYHSCROLL	       3
+#define SM_CYCAPTION	       4
+#define SM_CXBORDER	       5
+#define SM_CYBORDER	       6
+#define SM_CXDLGFRAME	       7
+#define SM_CYDLGFRAME	       8
+#define SM_CYVTHUMB	       9
+#define SM_CXHTHUMB	      10
+#define SM_CXICON	      11
+#define SM_CYICON	      12
+#define SM_CXCURSOR	      13
+#define SM_CYCURSOR	      14
+#define SM_CYMENU	      15
+#define SM_CXFULLSCREEN       16
+#define SM_CYFULLSCREEN       17
+#define SM_CYKANJIWINDOW      18
+#define SM_MOUSEPRESENT       19
+#define SM_CYVSCROLL	      20
+#define SM_CXHSCROLL	      21
+#define SM_DEBUG	      22
+#define SM_SWAPBUTTON	      23
+#define SM_RESERVED1	      24
+#define SM_RESERVED2	      25
+#define SM_RESERVED3	      26
+#define SM_RESERVED4	      27
+#define SM_CXMIN	      28
+#define SM_CYMIN	      29
+#define SM_CXSIZE	      30
+#define SM_CYSIZE	      31
+#define SM_CXFRAME	      32
+#define SM_CYFRAME	      33
+#define SM_CXMINTRACK	      34
+#define SM_CYMINTRACK	      35
+#define SM_CXDOUBLECLK        36
+#define SM_CYDOUBLECLK        37
+#define SM_CXICONSPACING      38
+#define SM_CYICONSPACING      39
+#define SM_MENUDROPALIGNMENT  40
+#define SM_PENWINDOWS         41
+#define SM_DBCSENABLED        42
+#define SM_CMOUSEBUTTONS      43
+#define SM_CXFIXEDFRAME	      SM_CXDLGFRAME
+#define SM_CYFIXEDFRAME	      SM_CYDLGFRAME
+#define SM_CXSIZEFRAME	      SM_CXFRAME
+#define SM_CYSIZEFRAME	      SM_CYFRAME
+#define SM_SECURE	      44
+#define SM_CXEDGE	      45
+#define SM_CYEDGE	      46
+#define SM_CXMINSPACING	      47
+#define SM_CYMINSPACING	      48
+#define SM_CXSMICON	      49
+#define SM_CYSMICON	      50
+#define SM_CYSMCAPTION	      51
+#define SM_CXSMSIZE	      52
+#define SM_CYSMSIZE	      53
+#define SM_CXMENUSIZE	      54
+#define SM_CYMENUSIZE	      55
+#define SM_ARRANGE	      56
+#define SM_CXMINIMIZED	      57
+#define SM_CYMINIMIZED	      58
+#define SM_CXMAXTRACK	      59
+#define SM_CYMAXTRACK	      60
+#define SM_CXMAXIMIZED	      61
+#define SM_CYMAXIMIZED	      62
+#define SM_NETWORK	      63
+#define SM_CLEANBOOT	      67
+#define SM_CXDRAG	      68
+#define SM_CYDRAG	      69
+#define SM_SHOWSOUNDS	      70
+#define SM_CXMENUCHECK	      71
+#define SM_CYMENUCHECK	      72
+#define SM_SLOWMACHINE	      73
+#define SM_MIDEASTENABLED     74
+#define SM_MOUSEWHEELPRESENT  75
+#define SM_XVIRTUALSCREEN     76
+#define SM_YVIRTUALSCREEN     77
+#define SM_CXVIRTUALSCREEN    78
+#define SM_CYVIRTUALSCREEN    79
+#define SM_CMONITORS          80
+#define SM_SAMEDISPLAYFORMAT  81
+#define SM_IMMENABLED         82
+#define SM_CXFOCUSBORDER      83
+#define SM_CYFOCUSBORDER      84
+#define SM_TABLETPC           86
+#define SM_MEDIACENTER        87
+#define SM_STARTER            88
+#define SM_SERVERR2           89
+#define SM_CMETRICS           90
+#define SM_MOUSEHORIZONTALWHEELPRESENT 91
+
+#define SM_REMOTESESSION        0x1000
+#define SM_SHUTTINGDOWN         0x2000
+#define SM_REMOTECONTROL        0x2001
+#define SM_CARETBLINKINGENABLED 0x2002
+
+#define PMB_ACTIVE      0x00000001
+
+
+/* wParam for WM_POWERBROADCAST */
+#define PBT_APMQUERYSUSPEND       0x0000
+#define PBT_APMQUERYSTANDBY       0x0001
+#define PBT_APMQUERYSUSPENDFAILED 0x0002
+#define PBT_APMQUERYSTANDBYFAILED 0x0003
+#define PBT_APMSUSPEND            0x0004
+#define PBT_APMSTANDBY            0x0005
+#define PBT_APMRESUMECRITICAL     0x0006
+#define PBT_APMRESUMESUSPEND      0x0007
+#define PBT_APMRESUMESTANDBY      0x0008
+#define PBT_APMBATTERYLOW         0x0009
+#define PBT_APMPOWERSTATUSCHANGE  0x000A
+#define PBT_APMOEMEVENT           0x000B
+#define PBT_APMRESUMEAUTOMATIC    0x0012
+
+#define PBTF_APMRESUMEFROMFAILURE       0x00000001
+
+
+/* MsgWaitForMultipleObjectsEx flags */
+#define MWMO_WAITALL         0x0001
+#define MWMO_ALERTABLE       0x0002
+#define MWMO_INPUTAVAILABLE  0x0004
+
+/* WM_GETDLGCODE values */
+#define DLGC_WANTARROWS      0x0001
+#define DLGC_WANTTAB         0x0002
+#define DLGC_WANTALLKEYS     0x0004
+#define DLGC_WANTMESSAGE     0x0004
+#define DLGC_HASSETSEL       0x0008
+#define DLGC_DEFPUSHBUTTON   0x0010
+#define DLGC_UNDEFPUSHBUTTON 0x0020
+#define DLGC_RADIOBUTTON     0x0040
+#define DLGC_WANTCHARS       0x0080
+#define DLGC_STATIC          0x0100
+#define DLGC_BUTTON          0x2000
+
+/* Used for EnumDisplaySettingsEx */
+#define ENUM_CURRENT_SETTINGS  ((DWORD) -1)
+#define ENUM_REGISTRY_SETTINGS ((DWORD) -2)
+
+#define EDS_RAWMODE       0x00000002
+#define EDS_ROTATEDMODE   0x00000004
+
+/* Used for PrintWindow */
+#define PW_CLIENTONLY   0x00000001
+
+/****** Window classes ******/
+
+typedef struct tagCREATESTRUCTA
+{
+    LPVOID      lpCreateParams;
+    HINSTANCE hInstance;
+    HMENU     hMenu;
+    HWND      hwndParent;
+    INT       cy;
+    INT       cx;
+    INT       y;
+    INT       x;
+    LONG        style;
+    LPCSTR      lpszName;
+    LPCSTR      lpszClass;
+    DWORD       dwExStyle;
+} CREATESTRUCTA, *LPCREATESTRUCTA;
+
+typedef struct tagCREATESTRUCTW
+{
+    LPVOID      lpCreateParams;
+    HINSTANCE hInstance;
+    HMENU     hMenu;
+    HWND      hwndParent;
+    INT       cy;
+    INT       cx;
+    INT       y;
+    INT       x;
+    LONG        style;
+    LPCWSTR     lpszName;
+    LPCWSTR     lpszClass;
+    DWORD       dwExStyle;
+} CREATESTRUCTW, *LPCREATESTRUCTW;
+
+DECL_WINELIB_TYPE_AW(CREATESTRUCT)
+DECL_WINELIB_TYPE_AW(LPCREATESTRUCT)
+
+typedef struct tagPAINTSTRUCT
+{
+    HDC   hdc;
+    BOOL  fErase;
+    RECT  rcPaint;
+    BOOL  fRestore;
+    BOOL  fIncUpdate;
+    BYTE  rgbReserved[32];
+} PAINTSTRUCT, *PPAINTSTRUCT, *LPPAINTSTRUCT;
+
+typedef struct tagCLIENTCREATESTRUCT
+{
+    HMENU   hWindowMenu;
+    UINT    idFirstChild;
+} CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT;
+
+
+typedef struct tagMDICREATESTRUCTA
+{
+    LPCSTR       szClass;
+    LPCSTR       szTitle;
+    HINSTANCE  hOwner;
+    INT        x;
+    INT        y;
+    INT        cx;
+    INT        cy;
+    DWORD        style;
+    LPARAM       lParam;
+} MDICREATESTRUCTA, *LPMDICREATESTRUCTA;
+
+typedef struct tagMDICREATESTRUCTW
+{
+    LPCWSTR      szClass;
+    LPCWSTR      szTitle;
+    HINSTANCE  hOwner;
+    INT        x;
+    INT        y;
+    INT        cx;
+    INT        cy;
+    DWORD        style;
+    LPARAM       lParam;
+} MDICREATESTRUCTW, *LPMDICREATESTRUCTW;
+
+DECL_WINELIB_TYPE_AW(MDICREATESTRUCT)
+DECL_WINELIB_TYPE_AW(LPMDICREATESTRUCT)
+
+#define MDITILE_VERTICAL     0x0000
+#define MDITILE_HORIZONTAL   0x0001
+#define MDITILE_SKIPDISABLED 0x0002
+#define MDITILE_ZORDER       0x0004
+
+#define MDIS_ALLCHILDSTYLES  0x0001
+
+typedef struct tagSTYLESTRUCT {
+    DWORD   styleOld;
+    DWORD   styleNew;
+} STYLESTRUCT, *LPSTYLESTRUCT;
+
+#define WC_DIALOG  MAKEINTATOM(0x8002)
+
+  /* Offsets for GetWindowLong() and GetWindowWord() */
+#define GWL_EXSTYLE         (-20)
+#define GWL_STYLE           (-16)
+#if !defined _WIN64 && !defined __WINESRC__
+# define GWL_USERDATA        (-21)
+# define GWL_ID              (-12)
+# define GWL_HWNDPARENT      (-8)
+# define GWL_HINSTANCE       (-6)
+# define GWL_WNDPROC         (-4)
+# define DWL_MSGRESULT       0
+# define DWL_DLGPROC         4
+# define DWL_USER            8
+#endif /* _WIN64 && __WINESRC__ */
+
+  /* Offsets for GetWindowLongPtr() and SetWindowLongPtr() */
+#define GWLP_USERDATA        (-21)
+#define GWLP_ID              (-12)
+#define GWLP_HWNDPARENT      (-8)
+#define GWLP_HINSTANCE       (-6)
+#define GWLP_WNDPROC         (-4)
+#define DWLP_MSGRESULT       0
+#define DWLP_DLGPROC         DWLP_MSGRESULT + sizeof(LRESULT)
+#define DWLP_USER            DWLP_DLGPROC + sizeof(DLGPROC)
+
+  /* GetWindow() constants */
+#define GW_HWNDFIRST	0
+#define GW_HWNDLAST	1
+#define GW_HWNDNEXT	2
+#define GW_HWNDPREV	3
+#define GW_OWNER	4
+#define GW_CHILD	5
+
+/* GetAncestor() constants */
+#define GA_PARENT       1
+#define GA_ROOT         2
+#define GA_ROOTOWNER    3
+
+  /* WM_GETMINMAXINFO struct */
+typedef struct tagMINMAXINFO
+{
+    POINT   ptReserved;
+    POINT   ptMaxSize;
+    POINT   ptMaxPosition;
+    POINT   ptMinTrackSize;
+    POINT   ptMaxTrackSize;
+} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO;
+
+
+  /* RedrawWindow() flags */
+#define RDW_INVALIDATE       0x0001
+#define RDW_INTERNALPAINT    0x0002
+#define RDW_ERASE            0x0004
+#define RDW_VALIDATE         0x0008
+#define RDW_NOINTERNALPAINT  0x0010
+#define RDW_NOERASE          0x0020
+#define RDW_NOCHILDREN       0x0040
+#define RDW_ALLCHILDREN      0x0080
+#define RDW_UPDATENOW        0x0100
+#define RDW_ERASENOW         0x0200
+#define RDW_FRAME            0x0400
+#define RDW_NOFRAME          0x0800
+
+/* debug flags */
+#define DBGFILL_ALLOC  0xfd
+#define DBGFILL_FREE   0xfb
+#define DBGFILL_BUFFER 0xf9
+#define DBGFILL_STACK  0xf7
+
+  /* WM_WINDOWPOSCHANGING/CHANGED struct */
+typedef struct tagWINDOWPOS
+{
+    HWND  hwnd;
+    HWND  hwndInsertAfter;
+    INT   x;
+    INT   y;
+    INT   cx;
+    INT   cy;
+    UINT  flags;
+} WINDOWPOS, *PWINDOWPOS, *LPWINDOWPOS;
+
+
+  /* WM_NCCALCSIZE parameter structure */
+typedef struct
+{
+    RECT       rgrc[3];
+    WINDOWPOS *lppos;
+} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS;
+
+
+#define PRF_CHECKVISIBLE    __MSABI_LONG(0x00000001)
+#define PRF_NONCLIENT       __MSABI_LONG(0x00000002)
+#define PRF_CLIENT          __MSABI_LONG(0x00000004)
+#define PRF_ERASEBKGND      __MSABI_LONG(0x00000008)
+#define PRF_CHILDREN        __MSABI_LONG(0x00000010)
+#define PRF_OWNED           __MSABI_LONG(0x00000020)
+
+  /* Offsets for GetClassLong() and GetClassWord() */
+#if !defined _WIN64 && !defined __WINESRC__
+# define GCL_MENUNAME       (-8)
+# define GCL_HBRBACKGROUND  (-10)
+# define GCL_HCURSOR        (-12)
+# define GCL_HICON          (-14)
+# define GCL_HMODULE        (-16)
+# define GCL_WNDPROC        (-24)
+# define GCL_HICONSM        (-34)
+#endif /* _WIN64 && __WINESRC__ */
+
+#define GCL_CBWNDEXTRA      (-18)
+#define GCL_CBCLSEXTRA      (-20)
+#define GCL_STYLE           (-26)
+#define GCW_ATOM            (-32)
+
+#define GCLP_MENUNAME       (-8)
+#define GCLP_HBRBACKGROUND  (-10)
+#define GCLP_HCURSOR        (-12)
+#define GCLP_HICON          (-14)
+#define GCLP_HMODULE        (-16)
+#define GCLP_WNDPROC        (-24)
+#define GCLP_HICONSM        (-34)
+
+/* BroadcastSystemMessage flags */
+#define BSM_ALLCOMPONENTS        0x00000000
+#define BSM_VXDS                 0x00000001
+#define BSM_NETDRIVER            0x00000002
+#define BSM_INSTALLABLEDRIVERS   0x00000004
+#define BSM_APPLICATIONS         0x00000008
+#define BSM_ALLDESKTOPS          0x00000010
+
+#define BSF_QUERY                0x00000001
+#define BSF_IGNORECURRENTTASK    0x00000002
+#define BSF_FLUSHDISK            0x00000004
+#define BSF_NOHANG               0x00000008
+#define BSF_POSTMESSAGE          0x00000010
+#define BSF_FORCEIFHUNG          0x00000020
+#define BSF_NOTIMEOUTIFNOTHUNG   0x00000040
+#define BSF_ALLOWSFW             0x00000080
+#define BSF_SENDNOTIFYMESSAGE    0x00000100
+#define BSF_RETURNHDESK          0x00000200
+#define BSF_LUID                 0x00000400
+
+#define BROADCAST_QUERY_DENY     0x424D5144
+
+/***** Window hooks *****/
+
+  /* Hook values */
+#define WH_MIN		    (-1)
+#define WH_MSGFILTER	    (-1)
+#define WH_JOURNALRECORD    0
+#define WH_JOURNALPLAYBACK  1
+#define WH_KEYBOARD	    2
+#define WH_GETMESSAGE	    3
+#define WH_CALLWNDPROC	    4
+#define WH_CBT		    5
+#define WH_SYSMSGFILTER	    6
+#define WH_MOUSE	    7
+#define WH_HARDWARE	    8
+#define WH_DEBUG	    9
+#define WH_SHELL            10
+#define WH_FOREGROUNDIDLE   11
+#define WH_CALLWNDPROCRET   12
+#define WH_KEYBOARD_LL      13
+#define WH_MOUSE_LL         14
+#define WH_MAX              14
+
+#define WH_MINHOOK          WH_MIN
+#define WH_MAXHOOK          WH_MAX
+
+  /* Hook action codes */
+#define HC_ACTION           0
+#define HC_GETNEXT          1
+#define HC_SKIP             2
+#define HC_NOREMOVE         3
+#define HC_NOREM            HC_NOREMOVE
+#define HC_SYSMODALON       4
+#define HC_SYSMODALOFF      5
+
+  /* CallMsgFilter() values */
+#define MSGF_DIALOGBOX      0
+#define MSGF_MESSAGEBOX     1
+#define MSGF_MENU           2
+#define MSGF_MOVE           3
+#define MSGF_SIZE           4
+#define MSGF_SCROLLBAR      5
+#define MSGF_NEXTWINDOW     6
+#define MSGF_MAX            8
+#define MSGF_USER           0x1000
+#define MSGF_DDEMGR         0x8001
+
+typedef struct tagWNDCLASSA
+{
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
+    LPCSTR      lpszMenuName;
+    LPCSTR      lpszClassName;
+} WNDCLASSA, *PWNDCLASSA, *LPWNDCLASSA;
+
+typedef struct tagWNDCLASSW
+{
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
+    LPCWSTR     lpszMenuName;
+    LPCWSTR     lpszClassName;
+} WNDCLASSW, *PWNDCLASSW, *LPWNDCLASSW;
+
+DECL_WINELIB_TYPE_AW(WNDCLASS)
+DECL_WINELIB_TYPE_AW(PWNDCLASS)
+DECL_WINELIB_TYPE_AW(LPWNDCLASS)
+
+typedef struct tagCOPYDATASTRUCT {
+    ULONG_PTR dwData;
+    DWORD cbData;
+    PVOID lpData;
+} COPYDATASTRUCT, *PCOPYDATASTRUCT;
+
+typedef struct tagMDINEXTMENU {
+    HMENU hmenuIn;
+    HMENU hmenuNext;
+    HWND  hwndNext;
+} MDINEXTMENU, *PMDINEXTMENU, *LPMDINEXTMENU;
+
+typedef struct tagMULTIKEYHELPA
+{
+    DWORD   mkSize;
+    CHAR    mkKeylist;
+    CHAR    szKeyphrase[1];
+} MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;
+
+typedef struct tagMULTIKEYHELPW
+{
+    DWORD   mkSize;
+    WCHAR   mkKeylist;
+    WCHAR   szKeyphrase[1];
+} MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;
+
+DECL_WINELIB_TYPE_AW(MULTIKEYHELP)
+DECL_WINELIB_TYPE_AW(PMULTIKEYHELP)
+DECL_WINELIB_TYPE_AW(LPMULTIKEYHELP)
+
+typedef struct tagHELPWININFOA {
+	int wStructSize;
+	int x;
+	int y;
+	int dx;
+	int dy;
+	int wMax;
+	CHAR rgchMember[2];
+} HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA;
+
+typedef struct tagHELPWININFOW {
+	int wStructSize;
+	int x;
+	int y;
+	int dx;
+	int dy;
+	int wMax;
+	WCHAR rgchMember[2];
+} HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;
+
+DECL_WINELIB_TYPE_AW(HELPWININFO)
+DECL_WINELIB_TYPE_AW(PHELPWININFO)
+DECL_WINELIB_TYPE_AW(LPHELPWININFO)
+
+
+     /* ChangeDisplaySettings return codes */
+
+#define DISP_CHANGE_SUCCESSFUL 0
+#define DISP_CHANGE_RESTART    1
+#define DISP_CHANGE_FAILED     (-1)
+#define DISP_CHANGE_BADMODE    (-2)
+#define DISP_CHANGE_NOTUPDATED (-3)
+#define DISP_CHANGE_BADFLAGS   (-4)
+#define DISP_CHANGE_BADPARAM   (-5)
+#define DISP_CHANGE_BADDUALVIEW (-6)
+
+/* ChangeDisplaySettings.dwFlags */
+#define	CDS_UPDATEREGISTRY	0x00000001
+#define	CDS_TEST		0x00000002
+#define	CDS_FULLSCREEN		0x00000004
+#define	CDS_GLOBAL		0x00000008
+#define	CDS_SET_PRIMARY		0x00000010
+#define	CDS_VIDEOPARAMETERS	0x00000020
+#define	CDS_NORESET		0x10000000
+#define	CDS_SETRECT		0x20000000
+#define	CDS_RESET		0x40000000
+
+typedef struct tagWNDCLASSEXA
+{
+    UINT      cbSize;
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
+    LPCSTR      lpszMenuName;
+    LPCSTR      lpszClassName;
+    HICON     hIconSm;
+} WNDCLASSEXA, *PWNDCLASSEXA, *LPWNDCLASSEXA;
+
+typedef struct tagWNDCLASSEXW
+{
+    UINT      cbSize;
+    UINT      style;
+    WNDPROC   lpfnWndProc;
+    INT       cbClsExtra;
+    INT       cbWndExtra;
+    HINSTANCE hInstance;
+    HICON     hIcon;
+    HCURSOR   hCursor;
+    HBRUSH    hbrBackground;
+    LPCWSTR     lpszMenuName;
+    LPCWSTR     lpszClassName;
+    HICON     hIconSm;
+} WNDCLASSEXW, *PWNDCLASSEXW, *LPWNDCLASSEXW;
+
+DECL_WINELIB_TYPE_AW(WNDCLASSEX)
+DECL_WINELIB_TYPE_AW(PWNDCLASSEX)
+DECL_WINELIB_TYPE_AW(LPWNDCLASSEX)
+
+typedef struct tagMSG
+{
+    HWND    hwnd;
+    UINT    message;
+    WPARAM  wParam;
+    LPARAM    lParam;
+    DWORD     time;
+    POINT   pt;
+} MSG, *PMSG, *LPMSG;
+
+#define POINTSTOPOINT(pt, pts) { (pt).x = (pts).x; (pt).y = (pts).y; }
+#define POINTTOPOINTS(pt)      (MAKELONG((short)((pt).x), (short)((pt).y)))
+
+#define MAKELPARAM(low,high)   ((LPARAM)(DWORD)MAKELONG(low,high))
+#define MAKEWPARAM(low,high)   ((WPARAM)(DWORD)MAKELONG(low,high))
+#define MAKELRESULT(low,high)  ((LRESULT)(DWORD)MAKELONG(low,high))
+
+/* Cursors / Icons */
+
+typedef struct _ICONINFO {
+	BOOL		fIcon;
+	DWORD		xHotspot;
+	DWORD		yHotspot;
+	HBITMAP	hbmMask;
+	HBITMAP	hbmColor;
+} ICONINFO, *PICONINFO;
+
+typedef struct _ICONINFOEXA
+{
+    DWORD     cbSize;
+    BOOL      fIcon;
+    DWORD     xHotspot;
+    DWORD     yHotspot;
+    HBITMAP   hbmMask;
+    HBITMAP   hbmColor;
+    WORD      wResID;
+    CHAR      szModName[MAX_PATH];
+    CHAR      szResName[MAX_PATH];
+} ICONINFOEXA, *PICONINFOEXA;
+
+typedef struct _ICONINFOEXW
+{
+    DWORD     cbSize;
+    BOOL      fIcon;
+    DWORD     xHotspot;
+    DWORD     yHotspot;
+    HBITMAP   hbmMask;
+    HBITMAP   hbmColor;
+    WORD      wResID;
+    WCHAR     szModName[MAX_PATH];
+    WCHAR     szResName[MAX_PATH];
+} ICONINFOEXW, *PICONINFOEXW;
+
+DECL_WINELIB_TYPE_AW(ICONINFOEX)
+DECL_WINELIB_TYPE_AW(PICONINFOEX)
+
+typedef struct tagCURSORINFO
+{
+    DWORD cbSize;
+    DWORD flags;
+    HCURSOR hCursor;
+    POINT ptScreenPos;
+} CURSORINFO, *PCURSORINFO, *LPCURSORINFO;
+
+#define CURSOR_SHOWING 0x00000001
+
+/* this is the 6 byte accel struct used in Win32 when presented to the user */
+typedef struct tagACCEL
+{
+#ifdef WORDS_BIGENDIAN
+    WORD   fVirt;
+    WORD   key;
+    DWORD  cmd;
+#else
+    BYTE   fVirt;
+    WORD   key;
+    WORD   cmd;
+#endif
+} ACCEL, *LPACCEL;
+
+
+/* Flags for TrackPopupMenu */
+#define TPM_LEFTBUTTON    0x0000
+#define TPM_RECURSE       0x0001
+#define TPM_RIGHTBUTTON   0x0002
+#define TPM_LEFTALIGN     0x0000
+#define TPM_CENTERALIGN   0x0004
+#define TPM_RIGHTALIGN    0x0008
+#define TPM_TOPALIGN      0x0000
+#define TPM_VCENTERALIGN  0x0010
+#define TPM_BOTTOMALIGN   0x0020
+#define TPM_HORIZONTAL    0x0000
+#define TPM_VERTICAL      0x0040
+#define TPM_NONOTIFY      0x0080
+#define TPM_RETURNCMD     0x0100
+#define TPM_HORPOSANIMATION 0x0400
+#define TPM_HORNEGANIMATION 0x0800
+#define TPM_VERPOSANIMATION 0x1000
+#define TPM_VERNEGANIMATION 0x2000
+#define TPM_NOANIMATION     0x4000
+#define TPM_LAYOUTRTL       0x8000
+
+typedef struct tagTPMPARAMS
+{
+    UINT   cbSize;
+    RECT   rcExclude;
+} TPMPARAMS, *LPTPMPARAMS;
+
+
+/*
+ * Combobox information
+ */
+typedef struct tagCOMBOBOXINFO
+{
+    DWORD cbSize;
+    RECT  rcItem;
+    RECT  rcButton;
+    DWORD stateButton;
+    HWND  hwndCombo;
+    HWND  hwndItem;
+    HWND  hwndList;
+} COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;
+
+typedef struct tagMENUITEMINFOA {
+  UINT    cbSize;
+  UINT    fMask;
+  UINT    fType;
+  UINT    fState;
+  UINT    wID;
+  HMENU   hSubMenu;
+  HBITMAP hbmpChecked;
+  HBITMAP hbmpUnchecked;
+  ULONG_PTR dwItemData;
+  LPSTR   dwTypeData;
+  UINT    cch;
+  HBITMAP hbmpItem;
+} MENUITEMINFOA, *LPMENUITEMINFOA;
+
+typedef struct tagMENUITEMINFOW {
+  UINT    cbSize;
+  UINT    fMask;
+  UINT    fType;
+  UINT    fState;
+  UINT    wID;
+  HMENU   hSubMenu;
+  HBITMAP hbmpChecked;
+  HBITMAP hbmpUnchecked;
+  ULONG_PTR dwItemData;
+  LPWSTR  dwTypeData;
+  UINT    cch;
+  HBITMAP hbmpItem;
+} MENUITEMINFOW, *LPMENUITEMINFOW;
+
+DECL_WINELIB_TYPE_AW(MENUITEMINFO)
+DECL_WINELIB_TYPE_AW(LPMENUITEMINFO)
+typedef const MENUITEMINFOA *LPCMENUITEMINFOA;
+typedef const MENUITEMINFOW *LPCMENUITEMINFOW;
+DECL_WINELIB_TYPE_AW(LPCMENUITEMINFO)
+
+typedef struct tagMENUBARINFO {
+  DWORD cbSize;
+  RECT  rcBar;
+  HMENU hMenu;
+  HWND  hwndMenu;
+  BOOL  fBarFocused:1;
+  BOOL  fFocused:1;
+} MENUBARINFO, *PMENUBARINFO, *LPMENUBARINFO;
+
+typedef struct tagMENUINFO {
+  DWORD   cbSize;
+  DWORD   fMask;
+  DWORD   dwStyle;
+  UINT    cyMax;
+  HBRUSH  hbrBack;
+  DWORD   dwContextHelpID;
+  ULONG_PTR dwMenuData;
+} MENUINFO, *LPMENUINFO;
+
+typedef const MENUINFO *LPCMENUINFO;
+
+#define MIM_MAXHEIGHT		0x00000001
+#define MIM_BACKGROUND		0x00000002
+#define MIM_HELPID		0x00000004
+#define MIM_MENUDATA		0x00000008
+#define MIM_STYLE		0x00000010
+#define MIM_APPLYTOSUBMENUS	0x80000000
+
+#define MNS_NOCHECK             0x80000000
+#define MNS_MODELESS            0x40000000
+#define MNS_DRAGDROP            0x20000000
+#define MNS_AUTODISMISS         0x10000000
+#define MNS_NOTIFYBYPOS         0x08000000
+#define MNS_CHECKORBMP          0x04000000
+
+typedef struct {
+  WORD versionNumber;
+  WORD offset;
+} MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER;
+
+
+typedef struct {
+  WORD mtOption;
+  WORD mtID;
+  WCHAR mtString[1];
+} MENUITEMTEMPLATE, *PMENUITEMTEMPLATE;
+
+
+typedef VOID   MENUTEMPLATE;
+typedef PVOID *LPMENUTEMPLATE;
+
+/* Field specifiers for MENUITEMINFO[AW] type.  */
+#define MIIM_STATE       0x00000001
+#define MIIM_ID          0x00000002
+#define MIIM_SUBMENU     0x00000004
+#define MIIM_CHECKMARKS  0x00000008
+#define MIIM_TYPE        0x00000010
+#define MIIM_DATA        0x00000020
+#define MIIM_STRING      0x00000040
+#define MIIM_BITMAP      0x00000080
+#define MIIM_FTYPE       0x00000100
+
+#define HBMMENU_CALLBACK	((HBITMAP) -1)
+#define HBMMENU_SYSTEM		((HBITMAP)  1)
+#define HBMMENU_MBAR_RESTORE	((HBITMAP)  2)
+#define HBMMENU_MBAR_MINIMIZE	((HBITMAP)  3)
+#define HBMMENU_MBAR_CLOSE	((HBITMAP)  5)
+#define HBMMENU_MBAR_CLOSE_D	((HBITMAP)  6)
+#define HBMMENU_MBAR_MINIMIZE_D	((HBITMAP)  7)
+#define HBMMENU_POPUP_CLOSE	((HBITMAP)  8)
+#define HBMMENU_POPUP_RESTORE	((HBITMAP)  9)
+#define HBMMENU_POPUP_MAXIMIZE	((HBITMAP) 10)
+#define HBMMENU_POPUP_MINIMIZE	((HBITMAP) 11)
+
+/* WM_H/VSCROLL commands */
+#define SB_LINEUP           0
+#define SB_LINELEFT         0
+#define SB_LINEDOWN         1
+#define SB_LINERIGHT        1
+#define SB_PAGEUP           2
+#define SB_PAGELEFT         2
+#define SB_PAGEDOWN         3
+#define SB_PAGERIGHT        3
+#define SB_THUMBPOSITION    4
+#define SB_THUMBTRACK       5
+#define SB_TOP              6
+#define SB_LEFT             6
+#define SB_BOTTOM           7
+#define SB_RIGHT            7
+#define SB_ENDSCROLL        8
+
+/* Scroll bar selection constants */
+#define SB_HORZ             0
+#define SB_VERT             1
+#define SB_CTL              2
+#define SB_BOTH             3
+
+/* EnableScrollBar() flags */
+#define ESB_ENABLE_BOTH     0x0000
+#define ESB_DISABLE_BOTH    0x0003
+
+#define ESB_DISABLE_LEFT    0x0001
+#define ESB_DISABLE_RIGHT   0x0002
+
+#define ESB_DISABLE_UP      0x0001
+#define ESB_DISABLE_DOWN    0x0002
+
+#define ESB_DISABLE_LTUP    ESB_DISABLE_LEFT
+#define ESB_DISABLE_RTDN    ESB_DISABLE_RIGHT
+
+/* Static Control Messages */
+#define STM_SETICON       0x0170
+#define STM_GETICON       0x0171
+#define STM_SETIMAGE        0x0172
+#define STM_GETIMAGE        0x0173
+#define STM_MSGMAX          0x0174
+
+#define STN_CLICKED         0
+#define STN_DBLCLK          1
+#define STN_ENABLE          2
+#define STN_DISABLE         3
+
+/* Scrollbar messages */
+#define SBM_SETPOS             0x00e0
+#define SBM_GETPOS             0x00e1
+#define SBM_SETRANGE           0x00e2
+#define SBM_GETRANGE           0x00e3
+#define SBM_ENABLE_ARROWS      0x00e4
+#define SBM_SETRANGEREDRAW     0x00e6
+#define SBM_SETSCROLLINFO      0x00e9
+#define SBM_GETSCROLLINFO      0x00ea
+#define SBM_GETSCROLLBARINFO   0x00eb
+
+/* Scrollbar info */
+typedef struct tagSCROLLINFO
+{
+    UINT    cbSize;
+    UINT    fMask;
+    INT     nMin;
+    INT     nMax;
+    UINT    nPage;
+    INT     nPos;
+    INT     nTrackPos;
+} SCROLLINFO, *LPSCROLLINFO;
+
+typedef const SCROLLINFO *LPCSCROLLINFO;
+
+#define CCHILDREN_SCROLLBAR 5
+
+typedef struct tagSCROLLBARINFO
+{
+    DWORD   cbSize;             /* Size of SCROLLBARINFO struct */
+    RECT    rcScrollBar;        /* Coordinates of the scroll bar */
+    INT     dxyLineButton;      /* Height or width */
+    INT     xyThumbTop;         /* Position of the top or the left */
+    INT     xyThumbBottom;      /* Position of the bottom or the right */
+    INT     reserved;
+    DWORD   rgstate[CCHILDREN_SCROLLBAR+1];
+} SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO;
+
+/* GetScrollInfo() flags */
+#define SIF_RANGE           0x0001
+#define SIF_PAGE            0x0002
+#define SIF_POS             0x0004
+#define SIF_DISABLENOSCROLL 0x0008
+#define SIF_TRACKPOS        0x0010
+#define SIF_ALL             (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)
+
+/* Listbox messages */
+#define LB_ADDSTRING           0x0180
+#define LB_INSERTSTRING        0x0181
+#define LB_DELETESTRING        0x0182
+#define LB_SELITEMRANGEEX      0x0183
+#define LB_RESETCONTENT        0x0184
+#define LB_SETSEL              0x0185
+#define LB_SETCURSEL           0x0186
+#define LB_GETSEL              0x0187
+#define LB_GETCURSEL           0x0188
+#define LB_GETTEXT             0x0189
+#define LB_GETTEXTLEN          0x018a
+#define LB_GETCOUNT            0x018b
+#define LB_SELECTSTRING        0x018c
+#define LB_DIR                 0x018d
+#define LB_GETTOPINDEX         0x018e
+#define LB_FINDSTRING          0x018f
+#define LB_GETSELCOUNT         0x0190
+#define LB_GETSELITEMS         0x0191
+#define LB_SETTABSTOPS         0x0192
+#define LB_GETHORIZONTALEXTENT 0x0193
+#define LB_SETHORIZONTALEXTENT 0x0194
+#define LB_SETCOLUMNWIDTH      0x0195
+#define LB_ADDFILE             0x0196
+#define LB_SETTOPINDEX         0x0197
+#define LB_GETITEMRECT         0x0198
+#define LB_GETITEMDATA         0x0199
+#define LB_SETITEMDATA         0x019a
+#define LB_SELITEMRANGE        0x019b
+#define LB_SETANCHORINDEX      0x019c
+#define LB_GETANCHORINDEX      0x019d
+#define LB_SETCARETINDEX       0x019e
+#define LB_GETCARETINDEX       0x019f
+#define LB_SETITEMHEIGHT       0x01a0
+#define LB_GETITEMHEIGHT       0x01a1
+#define LB_FINDSTRINGEXACT     0x01a2
+#define LB_CARETON             0x01a3
+#define LB_CARETOFF            0x01a4
+#define LB_SETLOCALE           0x01a5
+#define LB_GETLOCALE           0x01a6
+#define LB_SETCOUNT            0x01a7
+#define LB_INITSTORAGE         0x01a8
+#define LB_ITEMFROMPOINT       0x01a9
+#define LB_GETLISTBOXINFO      0x01b2
+#define LB_MSGMAX              0x01b3
+
+/* Listbox notification codes */
+#define LBN_ERRSPACE        (-2)
+#define LBN_SELCHANGE       1
+#define LBN_DBLCLK          2
+#define LBN_SELCANCEL       3
+#define LBN_SETFOCUS        4
+#define LBN_KILLFOCUS       5
+
+/* Listbox message return values */
+#define LB_OKAY             0
+#define LB_ERR              (-1)
+#define LB_ERRSPACE         (-2)
+
+#define LB_CTLCODE          __MSABI_LONG(0)
+
+/* Combo box messages */
+#define CB_GETEDITSEL            0x0140
+#define CB_LIMITTEXT             0x0141
+#define CB_SETEDITSEL            0x0142
+#define CB_ADDSTRING             0x0143
+#define CB_DELETESTRING          0x0144
+#define CB_DIR                   0x0145
+#define CB_GETCOUNT              0x0146
+#define CB_GETCURSEL             0x0147
+#define CB_GETLBTEXT             0x0148
+#define CB_GETLBTEXTLEN          0x0149
+#define CB_INSERTSTRING          0x014a
+#define CB_RESETCONTENT          0x014b
+#define CB_FINDSTRING            0x014c
+#define CB_SELECTSTRING          0x014d
+#define CB_SETCURSEL             0x014e
+#define CB_SHOWDROPDOWN          0x014f
+#define CB_GETITEMDATA           0x0150
+#define CB_SETITEMDATA           0x0151
+#define CB_GETDROPPEDCONTROLRECT 0x0152
+#define CB_SETITEMHEIGHT         0x0153
+#define CB_GETITEMHEIGHT         0x0154
+#define CB_SETEXTENDEDUI         0x0155
+#define CB_GETEXTENDEDUI         0x0156
+#define CB_GETDROPPEDSTATE       0x0157
+#define CB_FINDSTRINGEXACT       0x0158
+#define CB_SETLOCALE             0x0159
+#define CB_GETLOCALE             0x015a
+#define CB_GETTOPINDEX           0x015b
+#define CB_SETTOPINDEX           0x015c
+#define CB_GETHORIZONTALEXTENT   0x015d
+#define CB_SETHORIZONTALEXTENT   0x015e
+#define CB_GETDROPPEDWIDTH       0x015f
+#define CB_SETDROPPEDWIDTH       0x0160
+#define CB_INITSTORAGE           0x0161
+#define CB_MULTIPLEADDSTRING     0x0163
+#define CB_GETCOMBOBOXINFO       0x0164
+#define CB_MSGMAX                0x0165
+
+/* Combo box notification codes */
+#define CBN_ERRSPACE        (-1)
+#define CBN_SELCHANGE       1
+#define CBN_DBLCLK          2
+#define CBN_SETFOCUS        3
+#define CBN_KILLFOCUS       4
+#define CBN_EDITCHANGE      5
+#define CBN_EDITUPDATE      6
+#define CBN_DROPDOWN        7
+#define CBN_CLOSEUP         8
+#define CBN_SELENDOK        9
+#define CBN_SELENDCANCEL    10
+
+/* Combo box message return values */
+#define CB_OKAY             0
+#define CB_ERR              (-1)
+#define CB_ERRSPACE         (-2)
+
+#define MB_OK			0x00000000
+#define MB_OKCANCEL		0x00000001
+#define MB_ABORTRETRYIGNORE	0x00000002
+#define MB_YESNOCANCEL		0x00000003
+#define MB_YESNO		0x00000004
+#define MB_RETRYCANCEL		0x00000005
+#define MB_CANCELTRYCONTINUE	0x00000006
+#define MB_TYPEMASK		0x0000000F
+
+#define MB_ICONHAND		0x00000010
+#define MB_ICONQUESTION		0x00000020
+#define MB_ICONEXCLAMATION	0x00000030
+#define MB_ICONASTERISK		0x00000040
+#define	MB_USERICON		0x00000080
+#define MB_ICONMASK		0x000000F0
+
+#define MB_ICONINFORMATION	MB_ICONASTERISK
+#define MB_ICONSTOP		MB_ICONHAND
+#define MB_ICONWARNING		MB_ICONEXCLAMATION
+#define MB_ICONERROR		MB_ICONHAND
+
+#define MB_DEFBUTTON1		0x00000000
+#define MB_DEFBUTTON2		0x00000100
+#define MB_DEFBUTTON3		0x00000200
+#define MB_DEFBUTTON4		0x00000300
+#define MB_DEFMASK		0x00000F00
+
+#define MB_APPLMODAL		0x00000000
+#define MB_SYSTEMMODAL		0x00001000
+#define MB_TASKMODAL		0x00002000
+#define MB_MODEMASK		0x00003000
+
+#define MB_HELP			0x00004000
+#define MB_NOFOCUS		0x00008000
+#define MB_MISCMASK		0x0000C000
+
+#define MB_SETFOREGROUND	0x00010000
+#define MB_DEFAULT_DESKTOP_ONLY	0x00020000
+#define MB_SERVICE_NOTIFICATION	0x00040000
+#define MB_TOPMOST		0x00040000
+#define MB_RIGHT		0x00080000
+#define MB_RTLREADING		0x00100000
+
+#define	HELPINFO_WINDOW		0x0001
+#define	HELPINFO_MENUITEM	0x0002
+
+/* Structure pointed to by lParam of WM_HELP */
+typedef struct tagHELPINFO
+{
+    UINT	cbSize;		/* Size in bytes of this struct  */
+    INT	iContextType;	/* Either HELPINFO_WINDOW or HELPINFO_MENUITEM */
+    INT	iCtrlId;	/* Control Id or a Menu item Id. */
+    HANDLE	hItemHandle;	/* hWnd of control or hMenu.     */
+    DWORD_PTR	dwContextId;	/* Context Id associated with this item */
+    POINT	MousePos;	/* Mouse Position in screen co-ordinates */
+}  HELPINFO,*LPHELPINFO;
+
+typedef void (CALLBACK *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo);
+
+typedef struct tagMSGBOXPARAMSA
+{
+    UINT	cbSize;
+    HWND	hwndOwner;
+    HINSTANCE	hInstance;
+    LPCSTR	lpszText;
+    LPCSTR	lpszCaption;
+    DWORD	dwStyle;
+    LPCSTR	lpszIcon;
+    DWORD_PTR	dwContextHelpId;
+    MSGBOXCALLBACK	lpfnMsgBoxCallback;
+    DWORD	dwLanguageId;
+} MSGBOXPARAMSA, *PMSGBOXPARAMSA, *LPMSGBOXPARAMSA;
+
+typedef struct tagMSGBOXPARAMSW
+{
+    UINT	cbSize;
+    HWND	hwndOwner;
+    HINSTANCE	hInstance;
+    LPCWSTR	lpszText;
+    LPCWSTR	lpszCaption;
+    DWORD	dwStyle;
+    LPCWSTR	lpszIcon;
+    DWORD_PTR	dwContextHelpId;
+    MSGBOXCALLBACK	lpfnMsgBoxCallback;
+    DWORD	dwLanguageId;
+} MSGBOXPARAMSW, *PMSGBOXPARAMSW, *LPMSGBOXPARAMSW;
+
+DECL_WINELIB_TYPE_AW(MSGBOXPARAMS)
+DECL_WINELIB_TYPE_AW(PMSGBOXPARAMS)
+DECL_WINELIB_TYPE_AW(LPMSGBOXPARAMS)
+
+#define MONITOR_DEFAULTTONULL       0x00000000
+#define MONITOR_DEFAULTTOPRIMARY    0x00000001
+#define MONITOR_DEFAULTTONEAREST    0x00000002
+
+#define MONITORINFOF_PRIMARY        0x00000001
+
+#ifndef CCHDEVICENAME
+#define CCHDEVICENAME 32
+#endif
+
+typedef struct tagMONITORINFO
+{
+    DWORD cbSize;
+    RECT  rcMonitor;
+    RECT  rcWork;
+    DWORD dwFlags;
+} MONITORINFO, *LPMONITORINFO;
+
+typedef struct tagMONITORINFOEXA
+{   /* the 4 first entries are the same as MONITORINFO */
+    DWORD	cbSize;	
+    RECT	rcMonitor;
+    RECT	rcWork;
+    DWORD	dwFlags;
+    CHAR        szDevice[CCHDEVICENAME];
+} MONITORINFOEXA, *LPMONITORINFOEXA;
+
+typedef struct tagMONITORINFOEXW
+{   /* the 4 first entries are the same as MONITORINFO */
+    DWORD	cbSize;
+    RECT	rcMonitor;
+    RECT	rcWork;
+    DWORD	dwFlags;
+    WCHAR       szDevice[CCHDEVICENAME];
+} MONITORINFOEXW, *LPMONITORINFOEXW;
+
+DECL_WINELIB_TYPE_AW(MONITORINFOEX)
+DECL_WINELIB_TYPE_AW(LPMONITORINFOEX)
+
+typedef BOOL  (CALLBACK *MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM);
+
+#include <pshpack2.h>
+
+typedef struct tagDLGTEMPLATE
+{
+    DWORD style;
+    DWORD dwExtendedStyle;
+    WORD cdit;
+    short x;
+    short y;
+    short cx;
+    short cy;
+} DLGTEMPLATE;
+
+typedef DLGTEMPLATE *LPDLGTEMPLATEA;
+typedef DLGTEMPLATE *LPDLGTEMPLATEW;
+DECL_WINELIB_TYPE_AW(LPDLGTEMPLATE)
+typedef const DLGTEMPLATE *LPCDLGTEMPLATEA;
+typedef const DLGTEMPLATE *LPCDLGTEMPLATEW;
+DECL_WINELIB_TYPE_AW(LPCDLGTEMPLATE)
+
+typedef struct tagDLGITEMTEMPLATE
+{
+    DWORD style;
+    DWORD dwExtendedStyle;
+    short x;
+    short y;
+    short cx;
+    short cy;
+    WORD id;
+} DLGITEMTEMPLATE;
+
+typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA;
+typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW;
+DECL_WINELIB_TYPE_AW(PDLGITEMTEMPLATE)
+typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA;
+typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW;
+DECL_WINELIB_TYPE_AW(LPDLGITEMTEMPLATE)
+
+#include <poppack.h>
+
+  /* CBT hook values */
+#define HCBT_MOVESIZE	    0
+#define HCBT_MINMAX	    1
+#define HCBT_QS 	    2
+#define HCBT_CREATEWND	    3
+#define HCBT_DESTROYWND	    4
+#define HCBT_ACTIVATE	    5
+#define HCBT_CLICKSKIPPED   6
+#define HCBT_KEYSKIPPED     7
+#define HCBT_SYSCOMMAND	    8
+#define HCBT_SETFOCUS	    9
+
+  /* CBT hook structures */
+
+typedef struct tagCBT_CREATEWNDA
+{
+    CREATESTRUCTA *lpcs;
+    HWND           hwndInsertAfter;
+} CBT_CREATEWNDA, *LPCBT_CREATEWNDA;
+
+typedef struct tagCBT_CREATEWNDW
+{
+    CREATESTRUCTW *lpcs;
+    HWND           hwndInsertAfter;
+} CBT_CREATEWNDW, *LPCBT_CREATEWNDW;
+
+DECL_WINELIB_TYPE_AW(CBT_CREATEWND)
+DECL_WINELIB_TYPE_AW(LPCBT_CREATEWND)
+
+typedef struct tagCBTACTIVATESTRUCT
+{
+    BOOL    fMouse;
+    HWND    hWndActive;
+} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT;
+
+
+/* modifiers for RegisterHotKey */
+#define	MOD_ALT		0x0001
+#define	MOD_CONTROL	0x0002
+#define	MOD_SHIFT	0x0004
+#define	MOD_WIN		0x0008
+
+/* ids for RegisterHotKey */
+#define	IDHOT_SNAPWINDOW	(-1)    /* SHIFT-PRINTSCRN  */
+#define	IDHOT_SNAPDESKTOP	(-2)    /* PRINTSCRN        */
+
+  /* keybd_event flags */
+#define KEYEVENTF_EXTENDEDKEY        0x0001
+#define KEYEVENTF_KEYUP              0x0002
+#define KEYEVENTF_UNICODE            0x0004
+#define KEYEVENTF_SCANCODE           0x0008
+
+  /* mouse_event flags */
+#define MOUSEEVENTF_MOVE            0x0001
+#define MOUSEEVENTF_LEFTDOWN        0x0002
+#define MOUSEEVENTF_LEFTUP          0x0004
+#define MOUSEEVENTF_RIGHTDOWN       0x0008
+#define MOUSEEVENTF_RIGHTUP         0x0010
+#define MOUSEEVENTF_MIDDLEDOWN      0x0020
+#define MOUSEEVENTF_MIDDLEUP        0x0040
+#define MOUSEEVENTF_XDOWN           0x0080
+#define MOUSEEVENTF_XUP             0x0100
+#define MOUSEEVENTF_WHEEL           0x0800
+#define MOUSEEVENTF_HWHEEL          0x1000
+#define MOUSEEVENTF_MOVE_NOCOALESCE 0x2000
+#define MOUSEEVENTF_VIRTUALDESK     0x4000
+#define MOUSEEVENTF_ABSOLUTE        0x8000
+
+/* ExitWindows() flags */
+#define EW_RESTARTWINDOWS   0x0042
+#define EW_REBOOTSYSTEM     0x0043
+#define EW_EXITANDEXECAPP   0x0044
+
+/* ExitWindowsEx() flags */
+#define EWX_LOGOFF           0
+#define EWX_SHUTDOWN         1
+#define EWX_REBOOT           2
+#define EWX_FORCE            4
+#define EWX_POWEROFF         8
+#define EWX_FORCEIFHUNG     16
+
+/* SetLastErrorEx types */
+#define	SLE_ERROR	0x00000001
+#define	SLE_MINORERROR	0x00000002
+#define	SLE_WARNING	0x00000003
+
+/* Predefined resources */
+#define IDI_APPLICATION    MAKEINTRESOURCE(32512)
+#define IDI_HAND           MAKEINTRESOURCE(32513)
+#define IDI_QUESTION       MAKEINTRESOURCE(32514)
+#define IDI_EXCLAMATION    MAKEINTRESOURCE(32515)
+#define IDI_ASTERISK       MAKEINTRESOURCE(32516)
+#define IDI_WINLOGO        MAKEINTRESOURCE(32517)
+
+#define IDI_WARNING        IDI_EXCLAMATION
+#define IDI_ERROR          IDI_HAND
+#define IDI_INFORMATION    IDI_ASTERISK
+
+#define IDC_ARROW          MAKEINTRESOURCE(32512)
+#define IDC_IBEAM          MAKEINTRESOURCE(32513)
+#define IDC_WAIT           MAKEINTRESOURCE(32514)
+#define IDC_CROSS          MAKEINTRESOURCE(32515)
+#define IDC_UPARROW        MAKEINTRESOURCE(32516)
+#define IDC_SIZE           MAKEINTRESOURCE(32640)
+#define IDC_ICON           MAKEINTRESOURCE(32641)
+#define IDC_SIZENWSE       MAKEINTRESOURCE(32642)
+#define IDC_SIZENESW       MAKEINTRESOURCE(32643)
+#define IDC_SIZEWE         MAKEINTRESOURCE(32644)
+#define IDC_SIZENS         MAKEINTRESOURCE(32645)
+#define IDC_SIZEALL        MAKEINTRESOURCE(32646)
+#define IDC_NO             MAKEINTRESOURCE(32648)
+#define IDC_HAND           MAKEINTRESOURCE(32649)
+#define IDC_APPSTARTING    MAKEINTRESOURCE(32650)
+#define IDC_HELP           MAKEINTRESOURCE(32651)
+
+#define MNC_IGNORE 0
+#define MNC_CLOSE 1
+#define MNC_EXECUTE 2
+#define MNC_SELECT 3
+
+/* SystemParametersInfo */
+#define SPI_GETBEEP               1
+#define SPI_SETBEEP               2
+#define SPI_GETMOUSE              3
+#define SPI_SETMOUSE              4
+#define SPI_GETBORDER             5
+#define SPI_SETBORDER             6
+#define SPI_GETKEYBOARDSPEED      10
+#define SPI_SETKEYBOARDSPEED      11
+#define SPI_LANGDRIVER            12
+#define SPI_ICONHORIZONTALSPACING 13
+#define SPI_GETSCREENSAVETIMEOUT  14
+#define SPI_SETSCREENSAVETIMEOUT  15
+#define SPI_GETSCREENSAVEACTIVE   16
+#define SPI_SETSCREENSAVEACTIVE   17
+#define SPI_GETGRIDGRANULARITY    18
+#define SPI_SETGRIDGRANULARITY    19
+#define SPI_SETDESKWALLPAPER      20
+#define SPI_SETDESKPATTERN        21
+#define SPI_GETKEYBOARDDELAY      22
+#define SPI_SETKEYBOARDDELAY      23
+#define SPI_ICONVERTICALSPACING   24
+#define SPI_GETICONTITLEWRAP      25
+#define SPI_SETICONTITLEWRAP      26
+#define SPI_GETMENUDROPALIGNMENT  27
+#define SPI_SETMENUDROPALIGNMENT  28
+#define SPI_SETDOUBLECLKWIDTH     29
+#define SPI_SETDOUBLECLKHEIGHT    30
+#define SPI_GETICONTITLELOGFONT   31
+#define SPI_SETDOUBLECLICKTIME    32
+#define SPI_SETMOUSEBUTTONSWAP    33
+#define SPI_SETICONTITLELOGFONT   34
+#define SPI_GETFASTTASKSWITCH     35
+#define SPI_SETFASTTASKSWITCH     36
+#define SPI_SETDRAGFULLWINDOWS    37
+#define SPI_GETDRAGFULLWINDOWS    38
+#define SPI_GETNONCLIENTMETRICS   41
+#define SPI_SETNONCLIENTMETRICS   42
+#define SPI_GETMINIMIZEDMETRICS   43
+#define SPI_SETMINIMIZEDMETRICS   44
+#define SPI_GETICONMETRICS        45
+#define SPI_SETICONMETRICS        46
+#define SPI_SETWORKAREA           47
+#define SPI_GETWORKAREA           48
+#define SPI_SETPENWINDOWS         49
+#define SPI_GETFILTERKEYS         50
+#define SPI_SETFILTERKEYS         51
+#define SPI_GETTOGGLEKEYS         52
+#define SPI_SETTOGGLEKEYS         53
+#define SPI_GETMOUSEKEYS          54
+#define SPI_SETMOUSEKEYS          55
+#define SPI_GETSHOWSOUNDS         56
+#define SPI_SETSHOWSOUNDS         57
+#define SPI_GETSTICKYKEYS         58
+#define SPI_SETSTICKYKEYS         59
+#define SPI_GETACCESSTIMEOUT      60
+#define SPI_SETACCESSTIMEOUT      61
+#define SPI_GETSERIALKEYS         62
+#define SPI_SETSERIALKEYS         63
+#define SPI_GETSOUNDSENTRY        64
+#define SPI_SETSOUNDSENTRY        65
+#define SPI_GETHIGHCONTRAST       66
+#define SPI_SETHIGHCONTRAST       67
+#define SPI_GETKEYBOARDPREF       68
+#define SPI_SETKEYBOARDPREF       69
+#define SPI_GETSCREENREADER       70
+#define SPI_SETSCREENREADER       71
+#define SPI_GETANIMATION          72
+#define SPI_SETANIMATION          73
+#define SPI_GETFONTSMOOTHING      74
+#define SPI_SETFONTSMOOTHING      75
+#define SPI_SETDRAGWIDTH          76
+#define SPI_SETDRAGHEIGHT         77
+#define SPI_SETHANDHELD           78
+#define SPI_GETLOWPOWERTIMEOUT    79
+#define SPI_GETPOWEROFFTIMEOUT    80
+#define SPI_SETLOWPOWERTIMEOUT    81
+#define SPI_SETPOWEROFFTIMEOUT    82
+#define SPI_GETLOWPOWERACTIVE     83
+#define SPI_GETPOWEROFFACTIVE     84
+#define SPI_SETLOWPOWERACTIVE     85
+#define SPI_SETPOWEROFFACTIVE     86
+#define SPI_SETCURSORS            87
+#define SPI_SETICONS              88
+#define SPI_GETDEFAULTINPUTLANG   89
+#define SPI_SETDEFAULTINPUTLANG   90
+#define SPI_SETLANGTOGGLE         91
+#define SPI_GETWINDOWSEXTENSION   92
+#define SPI_SETMOUSETRAILS        93
+#define SPI_GETMOUSETRAILS        94
+#define SPI_GETSNAPTODEFBUTTON    95
+#define SPI_SETSNAPTODEFBUTTON    96
+#define SPI_SETSCREENSAVERRUNNING 97
+#define SPI_SCREENSAVERRUNNING    SPI_SETSCREENSAVERRUNNING
+#define SPI_GETMOUSEHOVERWIDTH    98
+#define SPI_SETMOUSEHOVERWIDTH    99
+#define SPI_GETMOUSEHOVERHEIGHT   100
+#define SPI_SETMOUSEHOVERHEIGHT   101
+#define SPI_GETMOUSEHOVERTIME     102
+#define SPI_SETMOUSEHOVERTIME     103
+#define SPI_GETWHEELSCROLLLINES   104
+#define SPI_SETWHEELSCROLLLINES   105
+#define SPI_GETMENUSHOWDELAY      106
+#define SPI_SETMENUSHOWDELAY      107
+#define SPI_GETWHEELSCROLLCHARS   108
+#define SPI_SETWHEELSCROLLCHARS   109
+#define SPI_GETSHOWIMEUI          110
+#define SPI_SETSHOWIMEUI          111
+#define SPI_GETMOUSESPEED         112
+#define SPI_SETMOUSESPEED         113
+#define SPI_GETSCREENSAVERRUNNING 114
+#define SPI_GETDESKWALLPAPER      115
+
+#define SPI_GETACTIVEWINDOWTRACKING    0x1000
+#define SPI_SETACTIVEWINDOWTRACKING    0x1001
+#define SPI_GETMENUANIMATION           0x1002
+#define SPI_SETMENUANIMATION           0x1003
+#define SPI_GETCOMBOBOXANIMATION       0x1004
+#define SPI_SETCOMBOBOXANIMATION       0x1005
+#define SPI_GETLISTBOXSMOOTHSCROLLING  0x1006
+#define SPI_SETLISTBOXSMOOTHSCROLLING  0x1007
+#define SPI_GETGRADIENTCAPTIONS        0x1008
+#define SPI_SETGRADIENTCAPTIONS        0x1009
+#define SPI_GETKEYBOARDCUES            0x100A
+#define SPI_SETKEYBOARDCUES            0x100B
+#define SPI_GETMENUUNDERLINES          SPI_GETKEYBOARDCUES
+#define SPI_SETMENUUNDERLINES          SPI_SETKEYBOARDCUES
+#define SPI_GETACTIVEWNDTRKZORDER      0x100C
+#define SPI_SETACTIVEWNDTRKZORDER      0x100D
+#define SPI_GETHOTTRACKING             0x100E
+#define SPI_SETHOTTRACKING             0x100F
+#define SPI_GETMENUFADE                0x1012
+#define SPI_SETMENUFADE                0x1013
+#define SPI_GETSELECTIONFADE           0x1014
+#define SPI_SETSELECTIONFADE           0x1015
+#define SPI_GETTOOLTIPANIMATION        0x1016
+#define SPI_SETTOOLTIPANIMATION        0x1017
+#define SPI_GETTOOLTIPFADE             0x1018
+#define SPI_SETTOOLTIPFADE             0x1019
+#define SPI_GETCURSORSHADOW            0x101A
+#define SPI_SETCURSORSHADOW            0x101B
+#define SPI_GETMOUSESONAR              0x101C
+#define SPI_SETMOUSESONAR              0x101D
+#define SPI_GETMOUSECLICKLOCK          0x101E
+#define SPI_SETMOUSECLICKLOCK          0x101F
+#define SPI_GETMOUSEVANISH             0x1020
+#define SPI_SETMOUSEVANISH             0x1021
+#define SPI_GETFLATMENU                0x1022
+#define SPI_SETFLATMENU                0x1023
+#define SPI_GETDROPSHADOW              0x1024
+#define SPI_SETDROPSHADOW              0x1025
+#define SPI_GETBLOCKSENDINPUTRESETS    0x1026
+#define SPI_SETBLOCKSENDINPUTRESETS    0x1027
+#define SPI_GETUIEFFECTS               0x103E
+#define SPI_SETUIEFFECTS               0x103F
+#define SPI_GETDISABLEOVERLAPPEDCONTENT 0x1040
+#define SPI_SETDISABLEOVERLAPPEDCONTENT 0x1041
+#define SPI_GETCLIENTAREAANIMATION     0x1042
+#define SPI_SETCLIENTAREAANIMATION     0x1043
+#define SPI_GETCLEARTYPE               0x1048
+#define SPI_SETCLEARTYPE               0x1049
+#define SPI_GETSPEECHRECOGNITION       0x104A
+#define SPI_SETSPEECHRECOGNITION       0x104B
+#define SPI_GETFOREGROUNDLOCKTIMEOUT   0x2000
+#define SPI_SETFOREGROUNDLOCKTIMEOUT   0x2001
+#define SPI_GETACTIVEWNDTRKTIMEOUT     0x2002
+#define SPI_SETACTIVEWNDTRKTIMEOUT     0x2003
+#define SPI_GETFOREGROUNDFLASHCOUNT    0x2004
+#define SPI_SETFOREGROUNDFLASHCOUNT    0x2005
+#define SPI_GETCARETWIDTH              0x2006
+#define SPI_SETCARETWIDTH              0x2007
+#define SPI_GETMOUSECLICKLOCKTIME      0x2008
+#define SPI_SETMOUSECLICKLOCKTIME      0x2009
+#define SPI_GETFONTSMOOTHINGTYPE       0x200A
+#define SPI_SETFONTSMOOTHINGTYPE       0x200B
+#define SPI_GETFONTSMOOTHINGCONTRAST   0x200C
+#define SPI_SETFONTSMOOTHINGCONTRAST   0x200D
+#define SPI_GETFOCUSBORDERWIDTH        0x200E
+#define SPI_SETFOCUSBORDERWIDTH        0x200F
+#define SPI_GETFOCUSBORDERHEIGHT       0x2010
+#define SPI_SETFOCUSBORDERHEIGHT       0x2011
+#define SPI_GETFONTSMOOTHINGORIENTATION 0x2012
+#define SPI_SETFONTSMOOTHINGORIENTATION 0x2013
+
+#define FE_FONTSMOOTHINGSTANDARD       0x0001
+#define FE_FONTSMOOTHINGCLEARTYPE      0x0002
+#define FE_FONTSMOOTHINGDOCKING        0x8000
+
+#define FE_FONTSMOOTHINGORIENTATIONBGR 0x0000
+#define FE_FONTSMOOTHINGORIENTATIONRGB 0x0001
+
+#define SETWALLPAPER_DEFAULT           ((LPWSTR)-1)
+
+/* SystemParametersInfo flags */
+
+#define SPIF_UPDATEINIFILE              1
+#define SPIF_SENDWININICHANGE           2
+#define SPIF_SENDCHANGE                 SPIF_SENDWININICHANGE
+
+#if defined(_WINGDI_) && !defined(NOGDI)
+typedef struct tagNONCLIENTMETRICSA {
+	UINT		cbSize;
+	INT		iBorderWidth;
+	INT		iScrollWidth;
+	INT		iScrollHeight;
+	INT		iCaptionWidth;
+	INT		iCaptionHeight;
+	LOGFONTA	lfCaptionFont;
+	INT		iSmCaptionWidth;
+	INT		iSmCaptionHeight;
+	LOGFONTA	lfSmCaptionFont;
+	INT		iMenuWidth;
+	INT		iMenuHeight;
+	LOGFONTA	lfMenuFont;
+	LOGFONTA	lfStatusFont;
+	LOGFONTA	lfMessageFont;
+	INT		iPaddedBorderWidth;
+} NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, *LPNONCLIENTMETRICSA;
+
+typedef struct tagNONCLIENTMETRICSW {
+	UINT		cbSize;
+	INT		iBorderWidth;
+	INT		iScrollWidth;
+	INT		iScrollHeight;
+	INT		iCaptionWidth;
+	INT		iCaptionHeight;
+	LOGFONTW	lfCaptionFont;
+	INT		iSmCaptionWidth;
+	INT		iSmCaptionHeight;
+	LOGFONTW	lfSmCaptionFont;
+	INT		iMenuWidth;
+	INT		iMenuHeight;
+	LOGFONTW	lfMenuFont;
+	LOGFONTW	lfStatusFont;
+	LOGFONTW	lfMessageFont;
+	INT		iPaddedBorderWidth;
+} NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, *LPNONCLIENTMETRICSW;
+
+DECL_WINELIB_TYPE_AW(NONCLIENTMETRICS)
+DECL_WINELIB_TYPE_AW(PNONCLIENTMETRICS)
+DECL_WINELIB_TYPE_AW(LPNONCLIENTMETRICS)
+
+typedef struct tagICONMETRICSA {
+    UINT cbSize;
+    int iHorzSpacing;
+    int iVertSpacing;
+    int iTitleWrap;
+    LOGFONTA lfFont;
+} ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA;
+
+typedef struct tagICONMETRICSW {
+    UINT cbSize;
+    int iHorzSpacing;
+    int iVertSpacing;
+    int iTitleWrap;
+    LOGFONTW lfFont;
+} ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW;
+
+DECL_WINELIB_TYPE_AW(ICONMETRICS)
+DECL_WINELIB_TYPE_AW(PICONMETRICS)
+DECL_WINELIB_TYPE_AW(LPICONMETRICS)
+
+typedef struct tagUPDATELAYEREDWINDOWINFO
+{
+    DWORD                cbSize;
+    HDC                  hdcDst;
+    POINT const*         pptDst;
+    SIZE const*          psize;
+    HDC                  hdcSrc;
+    POINT const*         pptSrc;
+    COLORREF             crKey;
+    BLENDFUNCTION const* pblend;
+    DWORD                dwFlags;
+    RECT const*          prcDirty;
+} UPDATELAYEREDWINDOWINFO, *PUPDATELAYEREDWINDOWINFO;
+
+#endif /* defined(_WINGDI_) && !defined(NOGDI) */
+
+#define ARW_BOTTOMLEFT              __MSABI_LONG(0x0000)
+#define ARW_BOTTOMRIGHT             __MSABI_LONG(0x0001)
+#define ARW_TOPLEFT                 __MSABI_LONG(0x0002)
+#define ARW_TOPRIGHT                __MSABI_LONG(0x0003)
+#define ARW_STARTMASK               __MSABI_LONG(0x0003)
+#define ARW_STARTRIGHT              __MSABI_LONG(0x0001)
+#define ARW_STARTTOP                __MSABI_LONG(0x0002)
+
+#define ARW_LEFT                    __MSABI_LONG(0x0000)
+#define ARW_RIGHT                   __MSABI_LONG(0x0000)
+#define ARW_UP                      __MSABI_LONG(0x0004)
+#define ARW_DOWN                    __MSABI_LONG(0x0004)
+#define ARW_HIDE                    __MSABI_LONG(0x0008)
+
+typedef struct tagMINIMIZEDMETRICS {
+    UINT cbSize;
+    int iWidth;
+    int iHorzGap;
+    int iVertGap;
+    int iArrange;
+} MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;
+
+
+/* Window scrolling */
+#define SW_SCROLLCHILDREN      0x0001
+#define SW_INVALIDATE          0x0002
+#define SW_ERASE               0x0004
+
+/* CreateWindow() coordinates */
+#define CW_USEDEFAULT ((INT)0x80000000)
+
+/* ChildWindowFromPointEx Flags */
+#define CWP_ALL                0x0000
+#define CWP_SKIPINVISIBLE      0x0001
+#define CWP_SKIPDISABLED       0x0002
+#define CWP_SKIPTRANSPARENT    0x0004
+
+  /* PeekMessage() options */
+#define PM_NOREMOVE       0x0000
+#define PM_REMOVE         0x0001
+#define PM_NOYIELD        0x0002
+#define PM_QS_INPUT       (QS_INPUT << 16)
+#define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
+#define PM_QS_PAINT       (QS_PAINT << 16)
+#define PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)
+
+/* SetTimer() limits */
+#define USER_TIMER_MINIMUM 0x0000000A
+#define USER_TIMER_MAXIMUM 0x7FFFFFFF
+
+/* AnimateWindow() flags */
+#define AW_SLIDE        0x00040000
+#define AW_ACTIVATE     0x00020000
+#define AW_BLEND        0x00080000
+#define AW_HIDE         0x00010000
+#define AW_CENTER       0x00000010
+#define AW_HOR_POSITIVE 0x00000001
+#define AW_HOR_NEGATIVE 0x00000002
+#define AW_VER_POSITIVE 0x00000004
+#define AW_VER_NEGATIVE 0x00000008
+
+/* FlashWindowEx() flags */
+#define FLASHW_STOP      0x00000000
+#define FLASHW_CAPTION   0x00000001
+#define FLASHW_TRAY      0x00000002
+#define FLASHW_ALL       (FLASHW_CAPTION|FLASHW_TRAY)
+#define FLASHW_TIMER     0x00000004
+#define FLASHW_TIMERNOFG 0x0000000C
+
+typedef struct {
+    UINT cbSize;
+    HWND hwnd;
+    DWORD dwFlags;
+    UINT uCount;
+    DWORD dwTimeout;
+} FLASHWINFO, *PFLASHWINFO;
+
+/* SetLayeredWindowAttributes() flags */
+#define LWA_COLORKEY        0x00000001
+#define LWA_ALPHA           0x00000002
+
+/* UpdateLayeredWindow() flags */
+#define ULW_COLORKEY        0x00000001
+#define ULW_ALPHA           0x00000002
+#define ULW_OPAQUE          0x00000004
+#define ULW_EX_NORESIZE     0x00000008
+
+/* SetWindowPos() and WINDOWPOS flags */
+#define SWP_NOSIZE          0x0001
+#define SWP_NOMOVE          0x0002
+#define SWP_NOZORDER        0x0004
+#define SWP_NOREDRAW        0x0008
+#define SWP_NOACTIVATE      0x0010
+#define SWP_FRAMECHANGED    0x0020  /* The frame changed: send WM_NCCALCSIZE */
+#define SWP_SHOWWINDOW      0x0040
+#define SWP_HIDEWINDOW      0x0080
+#define SWP_NOCOPYBITS      0x0100
+#define SWP_NOOWNERZORDER   0x0200  /* Don't do owner Z ordering */
+
+#define SWP_DRAWFRAME       SWP_FRAMECHANGED
+#define SWP_NOREPOSITION    SWP_NOOWNERZORDER
+
+#define SWP_NOSENDCHANGING  0x0400
+#define SWP_DEFERERASE      0x2000
+#define SWP_ASYNCWINDOWPOS  0x4000
+
+/* undocumented SWP flags - from SDK 3.1 */
+#define SWP_NOCLIENTSIZE    0x0800
+#define SWP_NOCLIENTMOVE    0x1000
+#define SWP_STATECHANGED    0x8000
+
+#define HWND_DESKTOP        ((HWND)0)
+#define HWND_BROADCAST      ((HWND)0xffff)
+
+/* SetWindowPos() hwndInsertAfter field values */
+#define HWND_TOP            ((HWND)0)
+#define HWND_BOTTOM         ((HWND)1)
+#define HWND_TOPMOST        ((HWND)-1)
+#define HWND_NOTOPMOST      ((HWND)-2)
+#define HWND_MESSAGE        ((HWND)-3)
+
+/* GetDCEx flags */
+#define DCX_WINDOW           0x00000001
+#define DCX_CACHE            0x00000002
+#define DCX_NORESETATTRS     0x00000004
+#define DCX_CLIPCHILDREN     0x00000008
+#define DCX_CLIPSIBLINGS     0x00000010
+#define DCX_PARENTCLIP       0x00000020
+#define DCX_EXCLUDERGN       0x00000040
+#define DCX_INTERSECTRGN     0x00000080
+#define DCX_EXCLUDEUPDATE    0x00000100
+#define DCX_INTERSECTUPDATE  0x00000200
+#define DCX_LOCKWINDOWUPDATE 0x00000400
+#define DCX_USESTYLE         0x00010000
+#define DCX_NORECOMPUTE      0x00100000
+#define DCX_VALIDATE         0x00200000
+
+
+
+/* for GetMenuDefaultItem */
+#define GMDI_USEDISABLED    __MSABI_LONG(0x0001)
+#define GMDI_GOINTOPOPUPS   __MSABI_LONG(0x0002)
+
+/* DrawText() flags */
+#define DT_TOP                  0x00000000
+#define DT_LEFT                 0x00000000
+#define DT_CENTER               0x00000001
+#define DT_RIGHT                0x00000002
+#define DT_VCENTER              0x00000004
+#define DT_BOTTOM               0x00000008
+#define DT_WORDBREAK            0x00000010
+#define DT_SINGLELINE           0x00000020
+#define DT_EXPANDTABS           0x00000040
+#define DT_TABSTOP              0x00000080
+#define DT_NOCLIP               0x00000100
+#define DT_EXTERNALLEADING      0x00000200
+#define DT_CALCRECT             0x00000400
+#define DT_NOPREFIX             0x00000800
+#define DT_INTERNAL             0x00001000
+#define DT_EDITCONTROL          0x00002000
+#define DT_PATH_ELLIPSIS        0x00004000
+#define DT_END_ELLIPSIS         0x00008000
+#define DT_MODIFYSTRING         0x00010000
+#define DT_RTLREADING           0x00020000
+#define DT_WORD_ELLIPSIS        0x00040000
+#define DT_NOFULLWIDTHCHARBREAK 0x00080000
+#define DT_HIDEPREFIX           0x00100000
+#define DT_PREFIXONLY           0x00200000
+
+/* DrawCaption()/DrawCaptionTemp() flags */
+#define DC_ACTIVE		0x0001
+#define DC_SMALLCAP		0x0002
+#define DC_ICON			0x0004
+#define DC_TEXT			0x0008
+#define DC_INBUTTON		0x0010
+#define DC_GRADIENT             0x0020
+#define DC_BUTTONS              0x1000
+
+/* DrawEdge() flags */
+#define BDR_RAISEDOUTER    0x0001
+#define BDR_SUNKENOUTER    0x0002
+#define BDR_RAISEDINNER    0x0004
+#define BDR_SUNKENINNER    0x0008
+
+#define BDR_OUTER          0x0003
+#define BDR_INNER          0x000c
+#define BDR_RAISED         0x0005
+#define BDR_SUNKEN         0x000a
+
+#define EDGE_RAISED        (BDR_RAISEDOUTER | BDR_RAISEDINNER)
+#define EDGE_SUNKEN        (BDR_SUNKENOUTER | BDR_SUNKENINNER)
+#define EDGE_ETCHED        (BDR_SUNKENOUTER | BDR_RAISEDINNER)
+#define EDGE_BUMP          (BDR_RAISEDOUTER | BDR_SUNKENINNER)
+
+/* border flags */
+#define BF_LEFT            0x0001
+#define BF_TOP             0x0002
+#define BF_RIGHT           0x0004
+#define BF_BOTTOM          0x0008
+#define BF_DIAGONAL        0x0010
+#define BF_MIDDLE          0x0800  /* Fill in the middle */
+#define BF_SOFT            0x1000  /* For softer buttons */
+#define BF_ADJUST          0x2000  /* Calculate the space left over */
+#define BF_FLAT            0x4000  /* For flat rather than 3D borders */
+#define BF_MONO            0x8000  /* For monochrome borders */
+#define BF_TOPLEFT         (BF_TOP | BF_LEFT)
+#define BF_TOPRIGHT        (BF_TOP | BF_RIGHT)
+#define BF_BOTTOMLEFT      (BF_BOTTOM | BF_LEFT)
+#define BF_BOTTOMRIGHT     (BF_BOTTOM | BF_RIGHT)
+#define BF_RECT            (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM)
+#define BF_DIAGONAL_ENDTOPRIGHT     (BF_DIAGONAL | BF_TOP | BF_RIGHT)
+#define BF_DIAGONAL_ENDTOPLEFT      (BF_DIAGONAL | BF_TOP | BF_LEFT)
+#define BF_DIAGONAL_ENDBOTTOMLEFT   (BF_DIAGONAL | BF_BOTTOM | BF_LEFT)
+#define BF_DIAGONAL_ENDBOTTOMRIGHT  (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT)
+
+/* DrawFrameControl() uType's */
+
+#define DFC_CAPTION             1
+#define DFC_MENU                2
+#define DFC_SCROLL              3
+#define DFC_BUTTON              4
+#define DFC_POPUPMENU           5
+
+/* uState's */
+
+#define DFCS_CAPTIONCLOSE       0x0000
+#define DFCS_CAPTIONMIN         0x0001
+#define DFCS_CAPTIONMAX         0x0002
+#define DFCS_CAPTIONRESTORE     0x0003
+#define DFCS_CAPTIONHELP        0x0004		/* Windows 95 only */
+
+#define DFCS_MENUARROW          0x0000
+#define DFCS_MENUCHECK          0x0001
+#define DFCS_MENUBULLET         0x0002
+#define DFCS_MENUARROWRIGHT     0x0004
+
+#define DFCS_SCROLLUP            0x0000
+#define DFCS_SCROLLDOWN          0x0001
+#define DFCS_SCROLLLEFT          0x0002
+#define DFCS_SCROLLRIGHT         0x0003
+#define DFCS_SCROLLCOMBOBOX      0x0005
+#define DFCS_SCROLLSIZEGRIP      0x0008
+#define DFCS_SCROLLSIZEGRIPRIGHT 0x0010
+
+#define DFCS_BUTTONCHECK        0x0000
+#define DFCS_BUTTONRADIOIMAGE   0x0001
+#define DFCS_BUTTONRADIOMASK    0x0002		/* to draw nonsquare button */
+#define DFCS_BUTTONRADIO        0x0004
+#define DFCS_BUTTON3STATE       0x0008
+#define DFCS_BUTTONPUSH         0x0010
+
+/* additional state of the control */
+
+#define DFCS_INACTIVE           0x0100
+#define DFCS_PUSHED             0x0200
+#define DFCS_CHECKED            0x0400
+#define DFCS_TRANSPARENT        0x0800
+#define DFCS_HOT                0x1000
+#define DFCS_ADJUSTRECT         0x2000		/* exclude surrounding edge */
+#define DFCS_FLAT               0x4000
+#define DFCS_MONO               0x8000
+
+
+/* Image type */
+#define	DST_COMPLEX	0x0000
+#define	DST_TEXT	0x0001
+#define	DST_PREFIXTEXT	0x0002
+#define	DST_ICON	0x0003
+#define	DST_BITMAP	0x0004
+
+/* State type */
+#define	DSS_NORMAL	0x0000
+#define	DSS_UNION	0x0010  /* Gray string appearance */
+#define	DSS_DISABLED	0x0020
+#define	DSS_DEFAULT	0x0040  /* Make it bold */
+#define	DSS_MONO	0x0080
+#define	DSS_HIDEPREFIX	0x0200
+#define	DSS_PREFIXONLY	0x0400
+#define	DSS_RIGHT	0x8000
+
+/* UserObjectInformation classes */
+#define UOI_FLAGS 1
+#define UOI_NAME 2
+#define UOI_TYPE 3
+#define UOI_USER_SID 4
+
+
+/* Sent as the lParam of a WM_DRAWITEM message to instruct how an
+ * owner drawn control is to be drawn */
+typedef struct tagDRAWITEMSTRUCT
+{
+    UINT      CtlType;    /* Type of control (ODT_* flags from "winuser.h") */
+    UINT      CtlID;      /* Control ID */
+    UINT      itemID;     /* Menu item ID */
+    UINT      itemAction; /* Action to perform (ODA_* flags from "winuser.h") */
+    UINT      itemState;  /* Item state (ODS_* flags from "winuser.h") */
+    HWND      hwndItem;   /* Control window */
+    HDC       hDC;        /* Device context to draw to */
+    RECT      rcItem;     /* Position of the control in hDC */
+    ULONG_PTR itemData;   /* Extra data added by the application, if any */
+} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;
+
+
+typedef struct tagMEASUREITEMSTRUCT
+{
+    UINT      CtlType;
+    UINT      CtlID;
+    UINT      itemID;
+    UINT      itemWidth;
+    UINT      itemHeight;
+    ULONG_PTR itemData;
+} MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;
+
+
+typedef struct tagDELETEITEMSTRUCT
+{
+    UINT     CtlType;
+    UINT     CtlID;
+    UINT     itemID;
+    HWND     hwndItem;
+    ULONG_PTR itemData;
+} DELETEITEMSTRUCT, *PDELETEITEMSTRUCT, *LPDELETEITEMSTRUCT;
+
+
+typedef struct tagCOMPAREITEMSTRUCT
+{
+    UINT      CtlType;
+    UINT      CtlID;
+    HWND      hwndItem;
+    UINT      itemID1;
+    ULONG_PTR itemData1;
+    UINT      itemID2;
+    ULONG_PTR itemData2;
+    DWORD     dwLocaleId;
+} COMPAREITEMSTRUCT, *PCOMPAREITEMSTRUCT, *LPCOMPAREITEMSTRUCT;
+
+
+/* WM_KEYUP/DOWN/CHAR HIWORD(lParam) flags */
+#define KF_EXTENDED         0x0100
+#define KF_DLGMODE          0x0800
+#define KF_MENUMODE         0x1000
+#define KF_ALTDOWN          0x2000
+#define KF_REPEAT           0x4000
+#define KF_UP               0x8000
+
+
+/* MapVirtualKey translation types */
+#define MAPVK_VK_TO_VSC     0
+#define MAPVK_VSC_TO_VK     1
+#define MAPVK_VK_TO_CHAR    2
+#define MAPVK_VSC_TO_VK_EX  3
+#define MAPVK_VK_TO_VSC_EX  4
+
+
+
+typedef struct tagTRACKMOUSEEVENT {
+    DWORD cbSize;
+    DWORD dwFlags;
+    HWND  hwndTrack;
+    DWORD dwHoverTime;
+} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
+
+  /* Queue status flags */
+#define QS_KEY		0x0001
+#define QS_MOUSEMOVE	0x0002
+#define QS_MOUSEBUTTON	0x0004
+#define QS_MOUSE	(QS_MOUSEMOVE | QS_MOUSEBUTTON)
+#define QS_POSTMESSAGE	0x0008
+#define QS_TIMER	0x0010
+#define QS_PAINT	0x0020
+#define QS_SENDMESSAGE	0x0040
+#define QS_HOTKEY	0x0080
+#define QS_ALLPOSTMESSAGE 0x0100
+#define QS_RAWINPUT       0x0400
+#define QS_INPUT	(QS_MOUSE | QS_KEY | QS_RAWINPUT)
+#define QS_ALLEVENTS	(QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY)
+#define QS_ALLINPUT     (QS_ALLEVENTS | QS_SENDMESSAGE)
+
+/* Extra (undocumented) queue wake bits - see "Undoc. Windows" */
+#define QS_SMRESULT      0x8000
+
+/* InSendMessageEx flags */
+#define ISMEX_NOSEND      0x00000000
+#define ISMEX_SEND        0x00000001
+#define ISMEX_NOTIFY      0x00000002
+#define ISMEX_CALLBACK    0x00000004
+#define ISMEX_REPLIED     0x00000008
+
+#define DDL_READWRITE	0x0000
+#define DDL_READONLY	0x0001
+#define DDL_HIDDEN	0x0002
+#define DDL_SYSTEM	0x0004
+#define DDL_DIRECTORY	0x0010
+#define DDL_ARCHIVE	0x0020
+
+#define DDL_POSTMSGS	0x2000
+#define DDL_DRIVES	0x4000
+#define DDL_EXCLUSIVE	0x8000
+
+  /* Shell hook values */
+#define HSHELL_WINDOWCREATED       1
+#define HSHELL_WINDOWDESTROYED     2
+#define HSHELL_ACTIVATESHELLWINDOW 3
+#define HSHELL_WINDOWACTIVATED     4
+#define HSHELL_GETMINRECT          5
+#define HSHELL_REDRAW              6
+#define HSHELL_TASKMAN             7
+#define HSHELL_LANGUAGE            8
+#define HSHELL_SYSMENU             9
+#define HSHELL_ENDTASK             10
+#define HSHELL_ACCESSIBILITYSTATE  11
+#define HSHELL_APPCOMMAND          12
+#define HSHELL_WINDOWREPLACED      13
+#define HSHELL_WINDOWREPLACING     14
+
+#define HSHELL_HIGHBIT             0x8000
+#define HSHELL_FLASH               (HSHELL_REDRAW|HSHELL_HIGHBIT)
+#define HSHELL_RUDEAPPACTIVATED    (HSHELL_WINDOWACTIVATED|HSHELL_HIGHBIT)
+
+/* App commands */
+#define APPCOMMAND_BROWSER_BACKWARD                  1
+#define APPCOMMAND_BROWSER_FORWARD                   2
+#define APPCOMMAND_BROWSER_REFRESH                   3
+#define APPCOMMAND_BROWSER_STOP                      4
+#define APPCOMMAND_BROWSER_SEARCH                    5
+#define APPCOMMAND_BROWSER_FAVORITES                 6
+#define APPCOMMAND_BROWSER_HOME                      7
+#define APPCOMMAND_VOLUME_MUTE                       8
+#define APPCOMMAND_VOLUME_DOWN                       9
+#define APPCOMMAND_VOLUME_UP                         10
+#define APPCOMMAND_MEDIA_NEXTTRACK                   11
+#define APPCOMMAND_MEDIA_PREVIOUSTRACK               12
+#define APPCOMMAND_MEDIA_STOP                        13
+#define APPCOMMAND_MEDIA_PLAY_PAUSE                  14
+#define APPCOMMAND_LAUNCH_MAIL                       15
+#define APPCOMMAND_LAUNCH_MEDIA_SELECT               16
+#define APPCOMMAND_LAUNCH_APP1                       17
+#define APPCOMMAND_LAUNCH_APP2                       18
+#define APPCOMMAND_BASS_DOWN                         19
+#define APPCOMMAND_BASS_BOOST                        20
+#define APPCOMMAND_BASS_UP                           21
+#define APPCOMMAND_TREBLE_DOWN                       22
+#define APPCOMMAND_TREBLE_UP                         23
+#define APPCOMMAND_MICROPHONE_VOLUME_MUTE            24
+#define APPCOMMAND_MICROPHONE_VOLUME_DOWN            25
+#define APPCOMMAND_MICROPHONE_VOLUME_UP              26
+#define APPCOMMAND_HELP                              27
+#define APPCOMMAND_FIND                              28
+#define APPCOMMAND_NEW                               29
+#define APPCOMMAND_OPEN                              30
+#define APPCOMMAND_CLOSE                             31
+#define APPCOMMAND_SAVE                              32
+#define APPCOMMAND_PRINT                             33
+#define APPCOMMAND_UNDO                              34
+#define APPCOMMAND_REDO                              35
+#define APPCOMMAND_COPY                              36
+#define APPCOMMAND_CUT                               37
+#define APPCOMMAND_PASTE                             38
+#define APPCOMMAND_REPLY_TO_MAIL                     39
+#define APPCOMMAND_FORWARD_MAIL                      40
+#define APPCOMMAND_SEND_MAIL                         41
+#define APPCOMMAND_SPELL_CHECK                       42
+#define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 43
+#define APPCOMMAND_MIC_ON_OFF_TOGGLE                 44
+#define APPCOMMAND_CORRECTION_LIST                   45
+#define APPCOMMAND_MEDIA_PLAY                        46
+#define APPCOMMAND_MEDIA_PAUSE                       47
+#define APPCOMMAND_MEDIA_RECORD                      48
+#define APPCOMMAND_MEDIA_FAST_FORWARD                49
+#define APPCOMMAND_MEDIA_REWIND                      50
+#define APPCOMMAND_MEDIA_CHANNEL_UP                  51
+#define APPCOMMAND_MEDIA_CHANNEL_DOWN                52
+#define APPCOMMAND_DELETE                            53
+#define APPCOMMAND_DWM_FLIP3D                        54
+
+#define FAPPCOMMAND_MOUSE 0x8000
+#define FAPPCOMMAND_KEY   0
+#define FAPPCOMMAND_OEM   0x1000
+#define FAPPCOMMAND_MASK  0xF000
+
+#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))
+#define GET_DEVICE_LPARAM(lParam)     ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))
+#define GET_MOUSEORKEY_LPARAM         GET_DEVICE_LPARAM
+#define GET_FLAGS_LPARAM(lParam)      (LOWORD(lParam))
+#define GET_KEYSTATE_LPARAM(lParam)   GET_FLAGS_LPARAM(lParam)
+
+
+/* types of LoadImage */
+#define IMAGE_BITMAP	0
+#define IMAGE_ICON	1
+#define IMAGE_CURSOR	2
+#define IMAGE_ENHMETAFILE	3
+
+/* loadflags to LoadImage */
+#define LR_DEFAULTCOLOR		0x0000
+#define LR_MONOCHROME		0x0001
+#define LR_COLOR		0x0002
+#define LR_COPYRETURNORG	0x0004
+#define LR_COPYDELETEORG	0x0008
+#define LR_LOADFROMFILE		0x0010
+#define LR_LOADTRANSPARENT	0x0020
+#define LR_DEFAULTSIZE		0x0040
+#define LR_VGA_COLOR		0x0080
+#define LR_LOADMAP3DCOLORS	0x1000
+#define	LR_CREATEDIBSECTION	0x2000
+#define LR_COPYFROMRESOURCE	0x4000
+#define LR_SHARED		0x8000
+
+/* Flags for DrawIconEx.  */
+#define DI_MASK                 0x0001
+#define DI_IMAGE                0x0002
+#define DI_NORMAL               (DI_MASK | DI_IMAGE)
+#define DI_COMPAT               0x0004
+#define DI_DEFAULTSIZE          0x0008
+#define DI_NOMIRROR             0x0010
+
+/* RegisterDeviceNotification stuff */
+typedef  PVOID           HDEVNOTIFY;
+typedef  HDEVNOTIFY     *PHDEVNOTIFY;
+
+#define DEVICE_NOTIFY_WINDOW_HANDLE     0x00000000
+
+/* used for GetWindowInfo() */
+
+#define WS_ACTIVECAPTION    0x0001
+
+typedef struct tagWINDOWINFO {
+    DWORD cbSize;
+    RECT  rcWindow;
+    RECT  rcClient;
+    DWORD dwStyle;
+    DWORD dwExStyle;
+    DWORD dwWindowStatus;
+    UINT  cxWindowBorders;
+    UINT  cyWindowBorders;
+    ATOM  atomWindowType;
+    WORD  wCreatorVersion;
+} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
+
+/* used for GetTitleBarInfo() */
+
+#define CCHILDREN_TITLEBAR      5
+
+typedef struct tagTITLEBARINFO {
+    DWORD cbSize;
+    RECT  rcTitleBar;
+    DWORD rgstate[CCHILDREN_TITLEBAR+1];
+} TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;
+
+/* used by GetLastInputInfo */
+typedef struct tagLASTINPUTINFO {
+    UINT cbSize;
+    DWORD dwTime;
+} LASTINPUTINFO, *PLASTINPUTINFO;
+
+/* used by GetAltTabInfo */
+typedef struct
+{
+    DWORD cbSize;
+    INT cItems;
+    INT cColumns;
+    INT cRows;
+    INT iColFocus;
+    INT iRowFocus;
+    INT cxItem;
+    INT cyItem;
+    POINT ptStart;
+} ALTTABINFO, *PALTTABINFO, *LPALTTABINFO;
+
+/* SetWinEventHook() flags */
+#define WINEVENT_OUTOFCONTEXT   0x0
+#define WINEVENT_SKIPOWNTHREAD  0x1
+#define WINEVENT_SKIPOWNPROCESS 0x2
+#define WINEVENT_INCONTEXT      0x4
+
+#define ENDSESSION_LOGOFF    0x80000000
+
+/* Object Id's */
+#define CHILDID_SELF      0
+#define INDEXID_OBJECT    0
+#define INDEXID_CONTAINER 0
+
+/* System object Id's */
+#define OBJID_WINDOW            0
+#define OBJID_SYSMENU           -1
+#define OBJID_TITLEBAR          -2
+#define OBJID_MENU              -3
+#define OBJID_CLIENT            -4
+#define OBJID_VSCROLL           -5
+#define OBJID_HSCROLL           -6
+#define OBJID_SIZEGRIP          -7
+#define OBJID_CARET             -8
+#define OBJID_CURSOR            -9
+#define OBJID_ALERT             -10
+#define OBJID_SOUND             -11
+#define OBJID_QUERYCLASSNAMEIDX -12
+#define OBJID_NATIVEOM          -16
+
+/* User event Id limits */
+#define EVENT_MIN 0x00000001
+#define EVENT_MAX 0x7FFFFFFF
+
+/* System events */
+#define EVENT_SYSTEM_SOUND            0x01
+#define EVENT_SYSTEM_ALERT            0x02
+#define EVENT_SYSTEM_FOREGROUND       0x03
+#define EVENT_SYSTEM_MENUSTART        0x04
+#define EVENT_SYSTEM_MENUEND          0x05
+#define EVENT_SYSTEM_MENUPOPUPSTART   0x06
+#define EVENT_SYSTEM_MENUPOPUPEND     0x07
+#define EVENT_SYSTEM_CAPTURESTART     0x08
+#define EVENT_SYSTEM_CAPTUREEND       0x09
+#define EVENT_SYSTEM_MOVESIZESTART    0x0A
+#define EVENT_SYSTEM_MOVESIZEEND      0x0B
+#define EVENT_SYSTEM_CONTEXTHELPSTART 0x0C
+#define EVENT_SYSTEM_CONTEXTHELPEND   0x0D
+#define EVENT_SYSTEM_DRAGDROPSTART    0x0E
+#define EVENT_SYSTEM_DRAGDROPEND      0x0F
+#define EVENT_SYSTEM_DIALOGSTART      0x10
+#define EVENT_SYSTEM_DIALOGEND        0x11
+#define EVENT_SYSTEM_SCROLLINGSTART   0x12
+#define EVENT_SYSTEM_SCROLLINGEND     0x13
+#define EVENT_SYSTEM_SWITCHSTART      0x14
+#define EVENT_SYSTEM_SWITCHEND        0x15
+#define EVENT_SYSTEM_MINIMIZESTART    0x16
+#define EVENT_SYSTEM_MINIMIZEEND      0x17
+
+/* Console events */
+#define EVENT_CONSOLE_CARET             0x4001
+#define EVENT_CONSOLE_UPDATE_REGION     0x4002
+#define EVENT_CONSOLE_UPDATE_SIMPLE     0x4003
+#define EVENT_CONSOLE_UPDATE_SCROLL     0x4004
+#define EVENT_CONSOLE_LAYOUT            0x4005
+#define EVENT_CONSOLE_START_APPLICATION 0x4006
+#define EVENT_CONSOLE_END_APPLICATION   0x4007
+
+#define CONSOLE_APPLICATION_16BIT 0x1
+#define CONSOLE_CARET_SELECTION   0x1
+#define CONSOLE_CARET_VISIBLE     0x2
+
+/* Object events */
+#define EVENT_OBJECT_CREATE            0x8000
+#define EVENT_OBJECT_DESTROY           0x8001
+#define EVENT_OBJECT_SHOW              0x8002
+#define EVENT_OBJECT_HIDE              0x8003
+#define EVENT_OBJECT_REORDER           0x8004
+#define EVENT_OBJECT_FOCUS             0x8005
+#define EVENT_OBJECT_SELECTION         0x8006
+#define EVENT_OBJECT_SELECTIONADD      0x8007
+#define EVENT_OBJECT_SELECTIONREMOVE   0x8008
+#define EVENT_OBJECT_SELECTIONWITHIN   0x8009
+#define EVENT_OBJECT_STATECHANGE       0x800A
+#define EVENT_OBJECT_LOCATIONCHANGE    0x800B
+#define EVENT_OBJECT_NAMECHANGE        0x800C
+#define EVENT_OBJECT_DESCRIPTIONCHANGE 0x800D
+#define EVENT_OBJECT_VALUECHANGE       0x800E
+#define EVENT_OBJECT_PARENTCHANGE      0x800F
+#define EVENT_OBJECT_HELPCHANGE        0x8010
+#define EVENT_OBJECT_DEFACTIONCHANGE   0x8011
+#define EVENT_OBJECT_ACCELERATORCHANGE 0x8012
+
+/* Sound events */
+#define SOUND_SYSTEM_STARTUP      1
+#define SOUND_SYSTEM_SHUTDOWN     2
+#define SOUND_SYSTEM_BEEP         3
+#define SOUND_SYSTEM_ERROR        4
+#define SOUND_SYSTEM_QUESTION     5
+#define SOUND_SYSTEM_WARNING      6
+#define SOUND_SYSTEM_INFORMATION  7
+#define SOUND_SYSTEM_MAXIMIZE     8
+#define SOUND_SYSTEM_MINIMIZE     9
+#define SOUND_SYSTEM_RESTOREUP   10
+#define SOUND_SYSTEM_RESTOREDOWN 11
+#define SOUND_SYSTEM_APPSTART    12
+#define SOUND_SYSTEM_FAULT       13
+#define SOUND_SYSTEM_APPEND      14
+#define SOUND_SYSTEM_MENUCOMMAND 15
+#define SOUND_SYSTEM_MENUPOPUP   16
+#define CSOUND_SYSTEM            16
+
+/* Alert events */
+#define ALERT_SYSTEM_INFORMATIONAL 1
+#define ALERT_SYSTEM_WARNING       2
+#define ALERT_SYSTEM_ERROR         3
+#define ALERT_SYSTEM_QUERY         4
+#define ALERT_SYSTEM_CRITICAL      5
+#define CALERT_SYSTEM              6
+
+/* System state flags */
+#define STATE_SYSTEM_UNAVAILABLE     0x00000001
+#define STATE_SYSTEM_SELECTED        0x00000002
+#define STATE_SYSTEM_FOCUSED         0x00000004
+#define STATE_SYSTEM_PRESSED         0x00000008
+#define STATE_SYSTEM_CHECKED         0x00000010
+#define STATE_SYSTEM_MIXED           0x00000020
+#define STATE_SYSTEM_INDETERMINATE   STATE_SYSTEM_MIXED
+#define STATE_SYSTEM_READONLY        0x00000040
+#define STATE_SYSTEM_HOTTRACKED      0x00000080
+#define STATE_SYSTEM_DEFAULT         0x00000100
+#define STATE_SYSTEM_EXPANDED        0x00000200
+#define STATE_SYSTEM_COLLAPSED       0x00000400
+#define STATE_SYSTEM_BUSY            0x00000800
+#define STATE_SYSTEM_FLOATING        0x00001000
+#define STATE_SYSTEM_MARQUEED        0x00002000
+#define STATE_SYSTEM_ANIMATED        0x00004000
+#define STATE_SYSTEM_INVISIBLE       0x00008000
+#define STATE_SYSTEM_OFFSCREEN       0x00010000
+#define STATE_SYSTEM_SIZEABLE        0x00020000
+#define STATE_SYSTEM_MOVEABLE        0x00040000
+#define STATE_SYSTEM_SELFVOICING     0x00080000
+#define STATE_SYSTEM_FOCUSABLE       0x00100000
+#define STATE_SYSTEM_SELECTABLE      0x00200000
+#define STATE_SYSTEM_LINKED          0x00400000
+#define STATE_SYSTEM_TRAVERSED       0x00800000
+#define STATE_SYSTEM_MULTISELECTABLE 0x01000000
+#define STATE_SYSTEM_EXTSELECTABLE   0x02000000
+#define STATE_SYSTEM_ALERT_LOW       0x04000000
+#define STATE_SYSTEM_ALERT_MEDIUM    0x08000000
+#define STATE_SYSTEM_ALERT_HIGH      0x10000000
+#define STATE_SYSTEM_PROTECTED       0x20000000
+#define STATE_SYSTEM_VALID           0x3FFFFFFF
+
+/* Lock codes for LockSetForegroundWindow */
+#define LSFW_LOCK   1
+#define LSFW_UNLOCK 2
+
+/* Values for AllowSetForegroundWindow */
+#define ASFW_ANY    ((DWORD)-1)
+
+#define     EnumTaskWindows(handle,proc,lparam) \
+            EnumThreadWindows(handle,proc,lparam)
+#define     OemToAnsiA OemToCharA
+#define     OemToAnsiW OemToCharW
+#define     OemToAnsi WINELIB_NAME_AW(OemToAnsi)
+#define     OemToAnsiBuffA OemToCharBuffA
+#define     OemToAnsiBuffW OemToCharBuffW
+#define     OemToAnsiBuff WINELIB_NAME_AW(OemToAnsiBuff)
+#define     AnsiToOemA CharToOemA
+#define     AnsiToOemW CharToOemW
+#define     AnsiToOem WINELIB_NAME_AW(AnsiToOem)
+#define     AnsiToOemBuffA CharToOemBuffA
+#define     AnsiToOemBuffW CharToOemBuffW
+#define     AnsiToOemBuff WINELIB_NAME_AW(AnsiToOemBuff)
+
+#if defined(_WINGDI_) && !defined(NOGDI)
+WINUSERAPI LONG        WINAPI ChangeDisplaySettingsA(LPDEVMODEA,DWORD);
+WINUSERAPI LONG        WINAPI ChangeDisplaySettingsW(LPDEVMODEW,DWORD);
+#define                       ChangeDisplaySettings WINELIB_NAME_AW(ChangeDisplaySettings)
+WINUSERAPI LONG        WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);
+WINUSERAPI LONG        WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
+#define                       ChangeDisplaySettingsEx WINELIB_NAME_AW(ChangeDisplaySettingsEx)
+WINUSERAPI HDESK       WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+WINUSERAPI HDESK       WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+#define                       CreateDesktop WINELIB_NAME_AW(CreateDesktop)
+WINUSERAPI BOOL        WINAPI EnumDisplayDevicesA(LPCSTR,DWORD,LPDISPLAY_DEVICEA,DWORD);
+WINUSERAPI BOOL        WINAPI EnumDisplayDevicesW(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD);
+#define                       EnumDisplayDevices WINELIB_NAME_AW(EnumDisplayDevices)
+WINUSERAPI BOOL        WINAPI EnumDisplaySettingsA(LPCSTR,DWORD,LPDEVMODEA);
+WINUSERAPI BOOL        WINAPI EnumDisplaySettingsW(LPCWSTR,DWORD,LPDEVMODEW);
+#define                       EnumDisplaySettings WINELIB_NAME_AW(EnumDisplaySettings)
+WINUSERAPI BOOL        WINAPI EnumDisplaySettingsExA(LPCSTR,DWORD,LPDEVMODEA,DWORD);
+WINUSERAPI BOOL        WINAPI EnumDisplaySettingsExW(LPCWSTR,DWORD,LPDEVMODEW,DWORD);
+#define                       EnumDisplaySettingsEx WINELIB_NAME_AW(EnumDisplaySettingsEx)
+WINUSERAPI BOOL        WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
+WINUSERAPI BOOL        WINAPI UpdateLayeredWindowIndirect(HWND,UPDATELAYEREDWINDOWINFO const*);
+#endif /* defined(_WINGDI_) && !defined(NOGDI) */
+
+WINUSERAPI HKL         WINAPI ActivateKeyboardLayout(HKL,UINT);
+WINUSERAPI BOOL        WINAPI AdjustWindowRect(LPRECT,DWORD,BOOL);
+WINUSERAPI BOOL        WINAPI AdjustWindowRectEx(LPRECT,DWORD,BOOL,DWORD);
+WINUSERAPI BOOL        WINAPI AllowSetForegroundWindow(DWORD);
+WINUSERAPI BOOL        WINAPI AnimateWindow(HWND,DWORD,DWORD);
+#define                       AnsiLowerA CharLowerA
+#define                       AnsiLowerW CharLowerW
+#define                       AnsiLower WINELIB_NAME_AW(AnsiLower)
+#define                       AnsiLowerBuffA CharLowerBuffA
+#define                       AnsiLowerBuffW CharLowerBuffW
+#define                       AnsiLowerBuff WINELIB_NAME_AW(AnsiLowerBuff)
+#define                       AnsiNextA CharNextA
+#define                       AnsiNextW CharNextW
+#define                       AnsiNext WINELIB_NAME_AW(AnsiNext)
+#define                       AnsiPrevA CharPrevA
+#define                       AnsiPrevW CharPrevW
+#define                       AnsiPrev WINELIB_NAME_AW(AnsiPrev)
+#define                       AnsiUpperA CharUpperA
+#define                       AnsiUpperW CharUpperW
+#define                       AnsiUpper WINELIB_NAME_AW(AnsiUpper)
+#define                       AnsiUpperBuffA CharUpperBuffA
+#define                       AnsiUpperBuffW CharUpperBuffW
+#define                       AnsiUpperBuff WINELIB_NAME_AW(AnsiUpperBuff)
+WINUSERAPI BOOL        WINAPI AnyPopup(void);
+WINUSERAPI BOOL        WINAPI AppendMenuA(HMENU,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL        WINAPI AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR);
+#define                       AppendMenu WINELIB_NAME_AW(AppendMenu)
+WINUSERAPI UINT        WINAPI ArrangeIconicWindows(HWND);
+WINUSERAPI BOOL        WINAPI AttachThreadInput(DWORD,DWORD,BOOL);
+WINUSERAPI HDWP        WINAPI BeginDeferWindowPos(INT);
+WINUSERAPI HDC         WINAPI BeginPaint(HWND,LPPAINTSTRUCT);
+WINUSERAPI BOOL        WINAPI BringWindowToTop(HWND);
+WINUSERAPI LONG        WINAPI BroadcastSystemMessageA(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+WINUSERAPI LONG        WINAPI BroadcastSystemMessageW(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+#define                       BroadcastSystemMessage WINELIB_NAME_AW(BroadcastSystemMessage)
+WINUSERAPI LONG        WINAPI BroadcastSystemMessageExA(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);
+WINUSERAPI LONG        WINAPI BroadcastSystemMessageExW(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);
+#define                       BroadcastSystemMessageEx WINELIB_NAME_AW(BroadcastSystemMessageEx)
+WINUSERAPI void        WINAPI CalcChildScroll(HWND, INT);
+WINUSERAPI BOOL        WINAPI CallMsgFilterA(LPMSG,INT);
+WINUSERAPI BOOL        WINAPI CallMsgFilterW(LPMSG,INT);
+#define                       CallMsgFilter WINELIB_NAME_AW(CallMsgFilter)
+WINUSERAPI LRESULT     WINAPI CallNextHookEx(HHOOK,INT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI CallWindowProcW(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+#define                       CallWindowProc WINELIB_NAME_AW(CallWindowProc)
+WINUSERAPI WORD        WINAPI CascadeWindows(HWND, UINT, const RECT *, UINT, const HWND *);
+WINUSERAPI BOOL        WINAPI ChangeClipboardChain(HWND,HWND);
+WINUSERAPI BOOL        WINAPI ChangeMenuA(HMENU,UINT,LPCSTR,UINT,UINT);
+WINUSERAPI BOOL        WINAPI ChangeMenuW(HMENU,UINT,LPCWSTR,UINT,UINT);
+#define                       ChangeMenu WINELIB_NAME_AW(ChangeMenu)
+WINUSERAPI LPSTR       WINAPI CharLowerA(LPSTR);
+WINUSERAPI LPWSTR      WINAPI CharLowerW(LPWSTR);
+#define                       CharLower WINELIB_NAME_AW(CharLower)
+WINUSERAPI DWORD       WINAPI CharLowerBuffA(LPSTR,DWORD);
+WINUSERAPI DWORD       WINAPI CharLowerBuffW(LPWSTR,DWORD);
+#define                       CharLowerBuff WINELIB_NAME_AW(CharLowerBuff)
+WINUSERAPI LPSTR       WINAPI CharNextA(LPCSTR);
+WINUSERAPI LPWSTR      WINAPI CharNextW(LPCWSTR);
+#define                       CharNext WINELIB_NAME_AW(CharNext)
+WINUSERAPI LPSTR       WINAPI CharNextExA(WORD,LPCSTR,DWORD);
+/* no CharNextExW (doesn't make sense) */
+WINUSERAPI LPSTR       WINAPI CharPrevA(LPCSTR,LPCSTR);
+WINUSERAPI LPWSTR      WINAPI CharPrevW(LPCWSTR,LPCWSTR);
+#define                       CharPrev WINELIB_NAME_AW(CharPrev)
+WINUSERAPI LPSTR       WINAPI CharPrevExA(WORD,LPCSTR,LPCSTR,DWORD);
+/* no CharPrevExW (doesn't make sense) */
+WINUSERAPI LPSTR       WINAPI CharUpperA(LPSTR);
+WINUSERAPI LPWSTR      WINAPI CharUpperW(LPWSTR);
+#define                       CharUpper WINELIB_NAME_AW(CharUpper)
+WINUSERAPI DWORD       WINAPI CharUpperBuffA(LPSTR,DWORD);
+WINUSERAPI DWORD       WINAPI CharUpperBuffW(LPWSTR,DWORD);
+#define                       CharUpperBuff WINELIB_NAME_AW(CharUpperBuff)
+WINUSERAPI BOOL        WINAPI CharToOemA(LPCSTR,LPSTR);
+WINUSERAPI BOOL        WINAPI CharToOemW(LPCWSTR,LPSTR);
+#define                       CharToOem WINELIB_NAME_AW(CharToOem)
+WINUSERAPI BOOL        WINAPI CharToOemBuffA(LPCSTR,LPSTR,DWORD);
+WINUSERAPI BOOL        WINAPI CharToOemBuffW(LPCWSTR,LPSTR,DWORD);
+#define                       CharToOemBuff WINELIB_NAME_AW(CharToOemBuff)
+WINUSERAPI BOOL        WINAPI CheckDlgButton(HWND,INT,UINT);
+WINUSERAPI DWORD       WINAPI CheckMenuItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL        WINAPI CheckMenuRadioItem(HMENU,UINT,UINT,UINT,UINT);
+WINUSERAPI BOOL        WINAPI CheckRadioButton(HWND,int,int,int);
+WINUSERAPI HWND        WINAPI ChildWindowFromPoint(HWND,POINT);
+WINUSERAPI HWND        WINAPI ChildWindowFromPointEx(HWND,POINT,UINT);
+WINUSERAPI BOOL        WINAPI ClientToScreen(HWND,LPPOINT);
+WINUSERAPI BOOL        WINAPI ClipCursor(const RECT*);
+WINUSERAPI BOOL        WINAPI CloseClipboard(void);
+WINUSERAPI BOOL        WINAPI CloseDesktop(HDESK);
+WINUSERAPI BOOL        WINAPI CloseWindow(HWND);
+WINUSERAPI BOOL        WINAPI CloseWindowStation(HWINSTA);
+WINUSERAPI INT         WINAPI CopyAcceleratorTableA(HACCEL,LPACCEL,INT);
+WINUSERAPI INT         WINAPI CopyAcceleratorTableW(HACCEL,LPACCEL,INT);
+#define                       CopyAcceleratorTable WINELIB_NAME_AW(CopyAcceleratorTable)
+#define                       CopyCursor(cur) ((HCURSOR)CopyIcon((HICON)(cur)))
+WINUSERAPI HICON       WINAPI CopyIcon(HICON);
+WINUSERAPI HANDLE      WINAPI CopyImage(HANDLE,UINT,INT,INT,UINT);
+WINUSERAPI BOOL        WINAPI CopyRect(RECT*,const RECT*);
+WINUSERAPI INT         WINAPI CountClipboardFormats(void);
+WINUSERAPI HACCEL      WINAPI CreateAcceleratorTableA(LPACCEL,INT);
+WINUSERAPI HACCEL      WINAPI CreateAcceleratorTableW(LPACCEL,INT);
+#define                       CreateAcceleratorTable WINELIB_NAME_AW(CreateAcceleratorTable)
+WINUSERAPI HICON       WINAPI CreateIconIndirect(PICONINFO);
+WINUSERAPI BOOL        WINAPI CreateCaret(HWND,HBITMAP,INT,INT);
+WINUSERAPI HCURSOR     WINAPI CreateCursor(HINSTANCE,INT,INT,INT,INT,LPCVOID,LPCVOID);
+#define                       CreateDialogA(inst,ptr,hwnd,dlg) CreateDialogParamA(inst,ptr,hwnd,dlg,0)
+#define                       CreateDialogW(inst,ptr,hwnd,dlg) CreateDialogParamW(inst,ptr,hwnd,dlg,0)
+#define                       CreateDialog WINELIB_NAME_AW(CreateDialog)
+#define                       CreateDialogIndirectA(inst,ptr,hwnd,dlg) CreateDialogIndirectParamA(inst,ptr,hwnd,dlg,0)
+#define                       CreateDialogIndirectW(inst,ptr,hwnd,dlg) CreateDialogIndirectParamW(inst,ptr,hwnd,dlg,0)
+#define                       CreateDialogIndirect WINELIB_NAME_AW(CreateDialogIndirect)
+WINUSERAPI HWND        WINAPI CreateDialogIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND        WINAPI CreateDialogIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM);
+#define                       CreateDialogIndirectParam WINELIB_NAME_AW(CreateDialogIndirectParam)
+WINUSERAPI HWND        WINAPI CreateDialogParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND        WINAPI CreateDialogParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+#define                       CreateDialogParam WINELIB_NAME_AW(CreateDialogParam)
+WINUSERAPI HICON       WINAPI CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,LPCVOID,LPCVOID);
+WINUSERAPI HICON       WINAPI CreateIconFromResource(LPBYTE,UINT,BOOL,DWORD);
+WINUSERAPI HICON       WINAPI CreateIconFromResourceEx(LPBYTE,UINT,BOOL,DWORD,INT,INT,UINT);
+WINUSERAPI HMENU       WINAPI CreateMenu(void);
+WINUSERAPI HMENU       WINAPI CreatePopupMenu(void);
+#define                       CreateWindowA(className,titleName,style,x,y,width,height,parent,menu,instance,param) CreateWindowExA(0,className,titleName,style,x,y,width,height,parent,menu,instance,param)
+#define                       CreateWindowW(className,titleName,style,x,y,width,height,parent,menu,instance,param) CreateWindowExW(0,className,titleName,style,x,y,width,height,parent,menu,instance,param)
+#define                       CreateWindow WINELIB_NAME_AW(CreateWindow)
+WINUSERAPI HWND        WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID);
+WINUSERAPI HWND        WINAPI CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID);
+#define                       CreateWindowEx WINELIB_NAME_AW(CreateWindowEx)
+WINUSERAPI HWINSTA     WINAPI CreateWindowStationA(LPCSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+WINUSERAPI HWINSTA     WINAPI CreateWindowStationW(LPCWSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+#define                       CreateWindowStation WINELIB_NAME_AW(CreateWindowStation)
+WINUSERAPI HWND        WINAPI CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM);
+WINUSERAPI HWND        WINAPI CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM);
+#define                       CreateMDIWindow WINELIB_NAME_AW(CreateMDIWindow)
+WINUSERAPI LRESULT     WINAPI DefDlgProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI DefDlgProcW(HWND,UINT,WPARAM,LPARAM);
+#define                       DefDlgProc WINELIB_NAME_AW(DefDlgProc)
+WINUSERAPI HDWP        WINAPI DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT);
+WINUSERAPI LRESULT     WINAPI DefFrameProcA(HWND,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI DefFrameProcW(HWND,HWND,UINT,WPARAM,LPARAM);
+#define                       DefFrameProc WINELIB_NAME_AW(DefFrameProc)
+#define                       DefHookProc(code,wparam,lparam,phhook) CallNextHookEx(*(phhook),code,wparam,lparam)
+WINUSERAPI LRESULT     WINAPI DefMDIChildProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI DefMDIChildProcW(HWND,UINT,WPARAM,LPARAM);
+#define                       DefMDIChildProc WINELIB_NAME_AW(DefMDIChildProc)
+WINUSERAPI LRESULT     WINAPI DefRawInputProc(PRAWINPUT*,INT,UINT);
+WINUSERAPI LRESULT     WINAPI DefWindowProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI DefWindowProcW(HWND,UINT,WPARAM,LPARAM);
+#define                       DefWindowProc WINELIB_NAME_AW(DefWindowProc)
+WINUSERAPI BOOL        WINAPI DeleteMenu(HMENU,UINT,UINT);
+WINUSERAPI BOOL        WINAPI DestroyAcceleratorTable(HACCEL);
+WINUSERAPI BOOL        WINAPI DestroyCaret(void);
+WINUSERAPI BOOL        WINAPI DestroyCursor(HCURSOR);
+WINUSERAPI BOOL        WINAPI DestroyIcon(HICON);
+WINUSERAPI BOOL        WINAPI DestroyMenu(HMENU);
+WINUSERAPI BOOL        WINAPI DestroyWindow(HWND);
+#define                       DialogBoxA(inst,template,owner,func) DialogBoxParamA(inst,template,owner,func,0)
+#define                       DialogBoxW(inst,template,owner,func) DialogBoxParamW(inst,template,owner,func,0)
+#define                       DialogBox WINELIB_NAME_AW(DialogBox)
+#define                       DialogBoxIndirectA(inst,template,owner,func) DialogBoxIndirectParamA(inst,template,owner,func,0)
+#define                       DialogBoxIndirectW(inst,template,owner,func) DialogBoxIndirectParamW(inst,template,owner,func,0)
+#define                       DialogBoxIndirect WINELIB_NAME_AW(DialogBoxIndirect)
+WINUSERAPI INT_PTR     WINAPI DialogBoxIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM);
+WINUSERAPI INT_PTR     WINAPI DialogBoxIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM);
+#define                       DialogBoxIndirectParam WINELIB_NAME_AW(DialogBoxIndirectParam)
+WINUSERAPI INT_PTR     WINAPI DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI INT_PTR     WINAPI DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+#define                       DialogBoxParam WINELIB_NAME_AW(DialogBoxParam)
+WINUSERAPI LRESULT     WINAPI DispatchMessageA(const MSG*);
+WINUSERAPI LRESULT     WINAPI DispatchMessageW(const MSG*);
+#define                       DispatchMessage WINELIB_NAME_AW(DispatchMessage)
+WINUSERAPI INT         WINAPI DlgDirListA(HWND,LPSTR,INT,INT,UINT);
+WINUSERAPI INT         WINAPI DlgDirListW(HWND,LPWSTR,INT,INT,UINT);
+#define                       DlgDirList WINELIB_NAME_AW(DlgDirList)
+WINUSERAPI INT         WINAPI DlgDirListComboBoxA(HWND,LPSTR,INT,INT,UINT);
+WINUSERAPI INT         WINAPI DlgDirListComboBoxW(HWND,LPWSTR,INT,INT,UINT);
+#define                       DlgDirListComboBox WINELIB_NAME_AW(DlgDirListComboBox)
+WINUSERAPI BOOL        WINAPI DlgDirSelectComboBoxExA(HWND,LPSTR,INT,INT);
+WINUSERAPI BOOL        WINAPI DlgDirSelectComboBoxExW(HWND,LPWSTR,INT,INT);
+#define                       DlgDirSelectComboBoxEx WINELIB_NAME_AW(DlgDirSelectComboBoxEx)
+WINUSERAPI BOOL        WINAPI DlgDirSelectExA(HWND,LPSTR,INT,INT);
+WINUSERAPI BOOL        WINAPI DlgDirSelectExW(HWND,LPWSTR,INT,INT);
+#define                       DlgDirSelectEx WINELIB_NAME_AW(DlgDirSelectEx)
+WINUSERAPI BOOL        WINAPI DragDetect(HWND,POINT);
+WINUSERAPI DWORD       WINAPI DragObject(HWND,HWND,UINT,ULONG_PTR,HCURSOR);
+WINUSERAPI BOOL        WINAPI DrawAnimatedRects(HWND,int,const RECT*,const RECT*);
+WINUSERAPI BOOL        WINAPI DrawCaption(HWND,HDC,const RECT*,UINT);
+WINUSERAPI BOOL        WINAPI DrawCaptionTempA(HWND,HDC,const RECT*,HFONT,HICON,LPCSTR,UINT);
+WINUSERAPI BOOL        WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT);
+#define                       DrawCaptionTemp WINELIB_NAME_AW(DrawCaptionTemp)
+WINUSERAPI BOOL        WINAPI DrawEdge(HDC,LPRECT,UINT,UINT);
+WINUSERAPI BOOL        WINAPI DrawFocusRect(HDC,const RECT*);
+WINUSERAPI BOOL        WINAPI DrawFrameControl(HDC,LPRECT,UINT,UINT);
+WINUSERAPI BOOL        WINAPI DrawIcon(HDC,INT,INT,HICON);
+WINUSERAPI BOOL        WINAPI DrawIconEx(HDC,INT,INT,HICON,INT,INT,UINT,HBRUSH,UINT);
+WINUSERAPI BOOL        WINAPI DrawMenuBar(HWND);
+WINUSERAPI BOOL        WINAPI DrawStateA(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);
+WINUSERAPI BOOL        WINAPI DrawStateW(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);
+#define                       DrawState WINELIB_NAME_AW(DrawState)
+WINUSERAPI INT         WINAPI DrawTextA(HDC,LPCSTR,INT,LPRECT,UINT);
+WINUSERAPI INT         WINAPI DrawTextW(HDC,LPCWSTR,INT,LPRECT,UINT);
+#define                       DrawText WINELIB_NAME_AW(DrawText)
+WINUSERAPI INT         WINAPI DrawTextExA(HDC,LPSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS);
+WINUSERAPI INT         WINAPI DrawTextExW(HDC,LPWSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS);
+#define                       DrawTextEx WINELIB_NAME_AW(DrawTextEx)
+WINUSERAPI BOOL        WINAPI EmptyClipboard(void);
+WINUSERAPI BOOL        WINAPI EnableMenuItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL        WINAPI EnableScrollBar(HWND,UINT,UINT);
+WINUSERAPI BOOL        WINAPI EnableWindow(HWND,BOOL);
+WINUSERAPI BOOL        WINAPI EndDeferWindowPos(HDWP);
+WINUSERAPI BOOL        WINAPI EndDialog(HWND,INT_PTR);
+WINUSERAPI BOOL        WINAPI EndMenu(void);
+WINUSERAPI BOOL        WINAPI EndPaint(HWND,const PAINTSTRUCT*);
+WINUSERAPI BOOL        WINAPI EnumChildWindows(HWND,WNDENUMPROC,LPARAM);
+WINUSERAPI UINT        WINAPI EnumClipboardFormats(UINT);
+WINUSERAPI BOOL        WINAPI EnumDesktopsA(HWINSTA,DESKTOPENUMPROCA,LPARAM);
+WINUSERAPI BOOL        WINAPI EnumDesktopsW(HWINSTA,DESKTOPENUMPROCW,LPARAM);
+#define                       EnumDesktops WINELIB_NAME_AW(EnumDesktops)
+WINUSERAPI BOOL        WINAPI EnumDesktopWindows(HDESK,WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL        WINAPI EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM);
+WINUSERAPI INT         WINAPI EnumPropsA(HWND,PROPENUMPROCA);
+WINUSERAPI INT         WINAPI EnumPropsW(HWND,PROPENUMPROCW);
+#define                       EnumProps WINELIB_NAME_AW(EnumProps)
+WINUSERAPI INT         WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM);
+WINUSERAPI INT         WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM);
+#define                       EnumPropsEx WINELIB_NAME_AW(EnumPropsEx)
+WINUSERAPI BOOL        WINAPI EnumThreadWindows(DWORD,WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL        WINAPI EnumWindows(WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL        WINAPI EnumWindowStationsA(WINSTAENUMPROCA,LPARAM);
+WINUSERAPI BOOL        WINAPI EnumWindowStationsW(WINSTAENUMPROCW,LPARAM);
+#define                       EnumWindowStations WINELIB_NAME_AW(EnumWindowStations)
+WINUSERAPI BOOL        WINAPI EqualRect(const RECT*,const RECT*);
+WINUSERAPI INT         WINAPI ExcludeUpdateRgn(HDC,HWND);
+#define                       ExitWindows(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff)
+WINUSERAPI BOOL        WINAPI ExitWindowsEx(UINT,DWORD);
+WINUSERAPI INT         WINAPI FillRect(HDC,const RECT*,HBRUSH);
+WINUSERAPI HWND        WINAPI FindWindowA(LPCSTR,LPCSTR);
+WINUSERAPI HWND        WINAPI FindWindowW(LPCWSTR,LPCWSTR);
+#define                       FindWindow WINELIB_NAME_AW(FindWindow)
+WINUSERAPI HWND        WINAPI FindWindowExA(HWND,HWND,LPCSTR,LPCSTR);
+WINUSERAPI HWND        WINAPI FindWindowExW(HWND,HWND,LPCWSTR,LPCWSTR);
+#define                       FindWindowEx WINELIB_NAME_AW(FindWindowEx)
+WINUSERAPI BOOL        WINAPI FlashWindow(HWND,BOOL);
+WINUSERAPI BOOL        WINAPI FlashWindowEx(PFLASHWINFO);
+WINUSERAPI INT         WINAPI FrameRect(HDC,const RECT*,HBRUSH);
+WINUSERAPI HWND        WINAPI GetActiveWindow(void);
+WINUSERAPI BOOL        WINAPI GetAltTabInfoA(HWND,INT,PALTTABINFO,LPSTR,UINT);
+WINUSERAPI BOOL        WINAPI GetAltTabInfoW(HWND,INT,PALTTABINFO,LPWSTR,UINT);
+#define                       GetAltTabInfo WINELIB_NAME_AW(GetAltTabInfo)
+WINUSERAPI HWND        WINAPI GetAncestor(HWND,UINT);
+WINUSERAPI DWORD       WINAPI GetAppCompatFlags(HTASK);
+WINUSERAPI SHORT       WINAPI GetAsyncKeyState(INT);
+WINUSERAPI HWND        WINAPI GetCapture(void);
+WINUSERAPI UINT        WINAPI GetCaretBlinkTime(void);
+WINUSERAPI BOOL        WINAPI GetCaretPos(LPPOINT);
+WINUSERAPI BOOL        WINAPI GetClassInfoA(HINSTANCE,LPCSTR,WNDCLASSA *);
+WINUSERAPI BOOL        WINAPI GetClassInfoW(HINSTANCE,LPCWSTR,WNDCLASSW *);
+#define                       GetClassInfo WINELIB_NAME_AW(GetClassInfo)
+WINUSERAPI BOOL        WINAPI GetClassInfoExA(HINSTANCE,LPCSTR,WNDCLASSEXA *);
+WINUSERAPI BOOL        WINAPI GetClassInfoExW(HINSTANCE,LPCWSTR,WNDCLASSEXW *);
+#define                       GetClassInfoEx WINELIB_NAME_AW(GetClassInfoEx)
+WINUSERAPI DWORD       WINAPI GetClassLongA(HWND,INT);
+WINUSERAPI DWORD       WINAPI GetClassLongW(HWND,INT);
+#define                       GetClassLong WINELIB_NAME_AW(GetClassLong)
+#ifdef _WIN64
+WINUSERAPI ULONG_PTR   WINAPI GetClassLongPtrA(HWND,INT);
+WINUSERAPI ULONG_PTR   WINAPI GetClassLongPtrW(HWND,INT);
+#else
+#define                       GetClassLongPtrA GetClassLongA
+#define                       GetClassLongPtrW GetClassLongW
+#endif
+#define                       GetClassLongPtr WINELIB_NAME_AW(GetClassLongPtr)
+WINUSERAPI INT         WINAPI GetClassNameA(HWND,LPSTR,INT);
+WINUSERAPI INT         WINAPI GetClassNameW(HWND,LPWSTR,INT);
+#define                       GetClassName WINELIB_NAME_AW(GetClassName)
+WINUSERAPI WORD        WINAPI GetClassWord(HWND,INT);
+WINUSERAPI BOOL        WINAPI GetClientRect(HWND,LPRECT);
+WINUSERAPI HANDLE      WINAPI GetClipboardData(UINT);
+WINUSERAPI INT         WINAPI GetClipboardFormatNameA(UINT,LPSTR,INT);
+WINUSERAPI INT         WINAPI GetClipboardFormatNameW(UINT,LPWSTR,INT);
+#define                       GetClipboardFormatName WINELIB_NAME_AW(GetClipboardFormatName)
+WINUSERAPI HWND        WINAPI GetClipboardOwner(void);
+WINUSERAPI DWORD       WINAPI GetClipboardSequenceNumber(VOID);
+WINUSERAPI HWND        WINAPI GetClipboardViewer(void);
+WINUSERAPI BOOL        WINAPI GetClipCursor(LPRECT);
+WINUSERAPI BOOL        WINAPI GetComboBoxInfo(HWND,PCOMBOBOXINFO);
+WINUSERAPI HCURSOR     WINAPI GetCursor(void);
+WINUSERAPI BOOL        WINAPI GetCursorInfo(PCURSORINFO);
+WINUSERAPI HCURSOR     WINAPI GetCursorFrameInfo(HCURSOR,DWORD,DWORD,DWORD*,DWORD*);
+WINUSERAPI BOOL        WINAPI GetCursorPos(LPPOINT);
+WINUSERAPI HDC         WINAPI GetDC(HWND);
+WINUSERAPI HDC         WINAPI GetDCEx(HWND,HRGN,DWORD);
+WINUSERAPI HWND        WINAPI GetDesktopWindow(void);
+WINUSERAPI DWORD       WINAPI GetDialogBaseUnits(void);
+WINUSERAPI INT         WINAPI GetDlgCtrlID(HWND);
+WINUSERAPI HWND        WINAPI GetDlgItem(HWND,INT);
+WINUSERAPI UINT        WINAPI GetDlgItemInt(HWND,INT,BOOL*,BOOL);
+WINUSERAPI UINT        WINAPI GetDlgItemTextA(HWND,INT,LPSTR,INT);
+WINUSERAPI UINT        WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT);
+#define                       GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)
+WINUSERAPI UINT        WINAPI GetDoubleClickTime(void);
+WINUSERAPI HWND        WINAPI GetFocus(void);
+WINUSERAPI HWND        WINAPI GetForegroundWindow(void);
+WINUSERAPI BOOL        WINAPI GetGUIThreadInfo(DWORD,GUITHREADINFO*);
+WINUSERAPI BOOL        WINAPI GetIconInfo(HICON,PICONINFO);
+WINUSERAPI BOOL        WINAPI GetIconInfoExA(HICON,ICONINFOEXA*);
+WINUSERAPI BOOL        WINAPI GetIconInfoExW(HICON,ICONINFOEXW*);
+#define                       GetIconInfoEx WINELIB_NAME_AW(GetIconInfoEx)
+WINUSERAPI BOOL        WINAPI GetInputState(void);
+WINUSERAPI UINT        WINAPI GetInternalWindowPos(HWND,LPRECT,LPPOINT);
+WINUSERAPI UINT        WINAPI GetKBCodePage(void);
+WINUSERAPI HKL         WINAPI GetKeyboardLayout(DWORD);
+WINUSERAPI UINT        WINAPI GetKeyboardLayoutList(INT,HKL *);
+WINUSERAPI BOOL        WINAPI GetKeyboardState(LPBYTE);
+WINUSERAPI INT         WINAPI GetKeyboardType(INT);
+WINUSERAPI INT         WINAPI GetKeyNameTextA(LONG,LPSTR,INT);
+WINUSERAPI INT         WINAPI GetKeyNameTextW(LONG,LPWSTR,INT);
+#define                       GetKeyNameText WINELIB_NAME_AW(GetKeyNameText)
+WINUSERAPI BOOL        WINAPI GetKeyboardLayoutNameA(LPSTR);
+WINUSERAPI BOOL        WINAPI GetKeyboardLayoutNameW(LPWSTR);
+#define                       GetKeyboardLayoutName WINELIB_NAME_AW(GetKeyboardLayoutName)
+WINUSERAPI SHORT       WINAPI GetKeyState(INT);
+WINUSERAPI HWND        WINAPI GetLastActivePopup(HWND);
+WINUSERAPI BOOL        WINAPI GetLastInputInfo(PLASTINPUTINFO);
+WINUSERAPI UINT        WINAPI GetRawInputBuffer(PRAWINPUT,PUINT,UINT);
+WINUSERAPI UINT        WINAPI GetRawInputData(HRAWINPUT,UINT,LPVOID,PUINT,UINT);
+WINUSERAPI UINT        WINAPI GetRawInputDeviceInfoA(HANDLE,UINT,LPVOID,PUINT);
+WINUSERAPI UINT        WINAPI GetRawInputDeviceInfoW(HANDLE,UINT,LPVOID,PUINT);
+#define                       GetRawInputDeviceInfo WINELIB_NAME_AW(GetRawInputDeviceInfo)
+WINUSERAPI UINT        WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UINT);
+WINUSERAPI UINT        WINAPI GetRegisteredRawInputDevices(PRAWINPUTDEVICE,PUINT,UINT);
+WINUSERAPI BOOL        WINAPI GetLayeredWindowAttributes(HWND,COLORREF*,BYTE*,DWORD*);
+WINUSERAPI HMENU       WINAPI GetMenu(HWND);
+WINUSERAPI BOOL        WINAPI GetMenuBarInfo(HWND,LONG,LONG,PMENUBARINFO);
+WINUSERAPI DWORD       WINAPI GetMenuCheckMarkDimensions(void);
+WINUSERAPI DWORD       WINAPI GetMenuContextHelpId(HMENU);
+WINUSERAPI UINT        WINAPI GetMenuDefaultItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL        WINAPI GetMenuInfo(HMENU,LPMENUINFO);
+WINUSERAPI INT         WINAPI GetMenuItemCount(HMENU);
+WINUSERAPI UINT        WINAPI GetMenuItemID(HMENU,INT);
+WINUSERAPI BOOL        WINAPI GetMenuItemInfoA(HMENU,UINT,BOOL,MENUITEMINFOA*);
+WINUSERAPI BOOL        WINAPI GetMenuItemInfoW(HMENU,UINT,BOOL,MENUITEMINFOW*);
+#define                       GetMenuItemInfo WINELIB_NAME_AW(GetMenuItemInfo)
+WINUSERAPI BOOL        WINAPI GetMenuItemRect(HWND,HMENU,UINT,LPRECT);
+WINUSERAPI UINT        WINAPI GetMenuState(HMENU,UINT,UINT);
+WINUSERAPI INT         WINAPI GetMenuStringA(HMENU,UINT,LPSTR,INT,UINT);
+WINUSERAPI INT         WINAPI GetMenuStringW(HMENU,UINT,LPWSTR,INT,UINT);
+#define                       GetMenuString WINELIB_NAME_AW(GetMenuString)
+WINUSERAPI BOOL        WINAPI GetMessageA(LPMSG,HWND,UINT,UINT);
+WINUSERAPI BOOL        WINAPI GetMessageW(LPMSG,HWND,UINT,UINT);
+#define                       GetMessage WINELIB_NAME_AW(GetMessage)
+WINUSERAPI LPARAM      WINAPI GetMessageExtraInfo(void);
+WINUSERAPI DWORD       WINAPI GetMessagePos(void);
+WINUSERAPI LONG        WINAPI GetMessageTime(void);
+WINUSERAPI BOOL        WINAPI GetMonitorInfoA(HMONITOR,LPMONITORINFO);
+WINUSERAPI BOOL        WINAPI GetMonitorInfoW(HMONITOR,LPMONITORINFO);
+#define                       GetMonitorInfo WINELIB_NAME_AW(GetMonitorInfo)
+WINUSERAPI HWND        WINAPI GetNextDlgGroupItem(HWND,HWND,BOOL);
+WINUSERAPI HWND        WINAPI GetNextDlgTabItem(HWND,HWND,BOOL);
+#define                       GetNextWindow GetWindow
+WINUSERAPI HWND        WINAPI GetOpenClipboardWindow(void);
+WINUSERAPI HWND        WINAPI GetParent(HWND);
+WINUSERAPI INT         WINAPI GetPriorityClipboardFormat(UINT*,INT);
+WINUSERAPI BOOL        WINAPI GetProcessDefaultLayout(DWORD*);
+WINUSERAPI HANDLE      WINAPI GetPropA(HWND,LPCSTR);
+WINUSERAPI HANDLE      WINAPI GetPropW(HWND,LPCWSTR);
+#define                       GetProp WINELIB_NAME_AW(GetProp)
+WINUSERAPI DWORD       WINAPI GetQueueStatus(UINT);
+WINUSERAPI BOOL        WINAPI GetScrollInfo(HWND,INT,LPSCROLLINFO);
+WINUSERAPI BOOL        WINAPI GetScrollBarInfo(HWND,LONG,LPSCROLLBARINFO);
+WINUSERAPI INT         WINAPI GetScrollPos(HWND,INT);
+WINUSERAPI BOOL        WINAPI GetScrollRange(HWND,INT,LPINT,LPINT);
+WINUSERAPI HWND        WINAPI GetShellWindow(void);
+WINUSERAPI HMENU       WINAPI GetSubMenu(HMENU,INT);
+WINUSERAPI HBRUSH      WINAPI GetSysColorBrush(INT);
+#define                       GetSysModalWindow() ((HWND)0)
+WINUSERAPI HMENU       WINAPI GetSystemMenu(HWND,BOOL);
+WINUSERAPI INT         WINAPI GetSystemMetrics(INT);
+WINUSERAPI DWORD       WINAPI GetTabbedTextExtentA(HDC,LPCSTR,INT,INT,const INT*);
+WINUSERAPI DWORD       WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,INT,INT,const INT*);
+#define                       GetTabbedTextExtent WINELIB_NAME_AW(GetTabbedTextExtent)
+WINUSERAPI BOOL        WINAPI GetTitleBarInfo(HWND,PTITLEBARINFO);
+WINUSERAPI HDESK       WINAPI GetThreadDesktop(DWORD);
+WINUSERAPI HWND        WINAPI GetTopWindow(HWND);
+WINUSERAPI BOOL        WINAPI GetUpdateRect(HWND,LPRECT,BOOL);
+WINUSERAPI INT         WINAPI GetUpdateRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL        WINAPI GetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD,LPDWORD);
+WINUSERAPI BOOL        WINAPI GetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD,LPDWORD);
+#define                       GetUserObjectInformation WINELIB_NAME_AW(GetUserObjectInformation)
+WINUSERAPI BOOL        WINAPI GetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINUSERAPI HWND        WINAPI GetWindow(HWND,UINT);
+WINUSERAPI DWORD       WINAPI GetWindowContextHelpId(HWND);
+WINUSERAPI HDC         WINAPI GetWindowDC(HWND);
+WINUSERAPI BOOL        WINAPI GetWindowInfo(HWND, PWINDOWINFO);
+WINUSERAPI LONG        WINAPI GetWindowLongA(HWND,INT);
+WINUSERAPI LONG        WINAPI GetWindowLongW(HWND,INT);
+#define                       GetWindowLong WINELIB_NAME_AW(GetWindowLong)
+#ifdef _WIN64
+WINUSERAPI LONG_PTR    WINAPI GetWindowLongPtrA(HWND,INT);
+WINUSERAPI LONG_PTR    WINAPI GetWindowLongPtrW(HWND,INT);
+#else
+#define                       GetWindowLongPtrA GetWindowLongA
+#define                       GetWindowLongPtrW GetWindowLongW
+#endif
+#define                       GetWindowLongPtr WINELIB_NAME_AW(GetWindowLongPtr)
+WINUSERAPI UINT        WINAPI GetWindowModuleFileNameA(HWND,LPSTR,UINT);
+WINUSERAPI UINT        WINAPI GetWindowModuleFileNameW(HWND,LPWSTR,UINT);
+#define                       GetWindowModuleFileName WINELIB_NAME_AW(GetWindowModuleFileName)
+WINUSERAPI BOOL        WINAPI GetWindowPlacement(HWND,LPWINDOWPLACEMENT);
+WINUSERAPI BOOL        WINAPI GetWindowRect(HWND,LPRECT);
+WINUSERAPI INT         WINAPI GetWindowRgn(HWND,HRGN);
+WINUSERAPI HWINSTA     WINAPI GetProcessWindowStation(void);
+#define                       GetWindowTask(hwnd) ((HTASK)GetWindowThreadProcessId(hwnd,NULL))
+WINUSERAPI INT         WINAPI GetWindowTextA(HWND,LPSTR,INT);
+WINUSERAPI INT         WINAPI GetWindowTextW(HWND,LPWSTR,INT);
+#define                       GetWindowText WINELIB_NAME_AW(GetWindowText)
+WINUSERAPI INT         WINAPI GetWindowTextLengthA(HWND);
+WINUSERAPI INT         WINAPI GetWindowTextLengthW(HWND);
+#define                       GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength)
+WINUSERAPI DWORD       WINAPI GetWindowThreadProcessId(HWND,LPDWORD);
+WINUSERAPI WORD        WINAPI GetWindowWord(HWND,INT);
+WINUSERAPI BOOL        WINAPI GrayStringA(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT);
+WINUSERAPI BOOL        WINAPI GrayStringW(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT);
+#define                       GrayString WINELIB_NAME_AW(GrayString)
+WINUSERAPI BOOL        WINAPI HideCaret(HWND);
+WINUSERAPI BOOL        WINAPI HiliteMenuItem(HWND,HMENU,UINT,UINT);
+WINUSERAPI BOOL        WINAPI InflateRect(LPRECT,INT,INT);
+WINUSERAPI BOOL        WINAPI InSendMessage(void);
+WINUSERAPI DWORD       WINAPI InSendMessageEx(LPVOID);
+WINUSERAPI BOOL        WINAPI InsertMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL        WINAPI InsertMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR);
+#define                       InsertMenu WINELIB_NAME_AW(InsertMenu)
+WINUSERAPI BOOL        WINAPI InsertMenuItemA(HMENU,UINT,BOOL,const MENUITEMINFOA*);
+WINUSERAPI BOOL        WINAPI InsertMenuItemW(HMENU,UINT,BOOL,const MENUITEMINFOW*);
+#define                       InsertMenuItem WINELIB_NAME_AW(InsertMenuItem)
+WINUSERAPI INT         WINAPI InternalGetWindowText(HWND,LPWSTR,INT);
+WINUSERAPI BOOL        WINAPI IntersectRect(LPRECT,const RECT*,const RECT*);
+WINUSERAPI BOOL        WINAPI InvalidateRect(HWND,const RECT*,BOOL);
+WINUSERAPI BOOL        WINAPI InvalidateRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL        WINAPI InvertRect(HDC,const RECT*);
+WINUSERAPI BOOL        WINAPI IsCharAlphaA(CHAR);
+WINUSERAPI BOOL        WINAPI IsCharAlphaW(WCHAR);
+#define                       IsCharAlpha WINELIB_NAME_AW(IsCharAlpha)
+WINUSERAPI BOOL        WINAPI IsCharAlphaNumericA(CHAR);
+WINUSERAPI BOOL        WINAPI IsCharAlphaNumericW(WCHAR);
+#define                       IsCharAlphaNumeric WINELIB_NAME_AW(IsCharAlphaNumeric)
+WINUSERAPI BOOL        WINAPI IsCharLowerA(CHAR);
+WINUSERAPI BOOL        WINAPI IsCharLowerW(WCHAR);
+#define                       IsCharLower WINELIB_NAME_AW(IsCharLower)
+WINUSERAPI BOOL        WINAPI IsCharUpperA(CHAR);
+WINUSERAPI BOOL        WINAPI IsCharUpperW(WCHAR);
+#define                       IsCharUpper WINELIB_NAME_AW(IsCharUpper)
+WINUSERAPI BOOL        WINAPI IsChild(HWND,HWND);
+WINUSERAPI BOOL        WINAPI IsClipboardFormatAvailable(UINT);
+WINUSERAPI BOOL        WINAPI IsDialogMessageA(HWND,LPMSG);
+WINUSERAPI BOOL        WINAPI IsDialogMessageW(HWND,LPMSG);
+#define                       IsDialogMessage WINELIB_NAME_AW(IsDialogMessage)
+WINUSERAPI UINT        WINAPI IsDlgButtonChecked(HWND,int);
+WINUSERAPI BOOL        WINAPI IsGUIThread(BOOL);
+WINUSERAPI BOOL        WINAPI IsHungAppWindow(HWND);
+WINUSERAPI BOOL        WINAPI IsIconic(HWND);
+WINUSERAPI BOOL        WINAPI IsMenu(HMENU);
+WINUSERAPI BOOL        WINAPI IsRectEmpty(const RECT*);
+WINUSERAPI BOOL        WINAPI IsWinEventHookInstalled(DWORD);
+WINUSERAPI BOOL        WINAPI IsWindow(HWND);
+WINUSERAPI BOOL        WINAPI IsWindowEnabled(HWND);
+WINUSERAPI BOOL        WINAPI IsWindowUnicode(HWND);
+WINUSERAPI BOOL        WINAPI IsWindowVisible(HWND);
+WINUSERAPI BOOL        WINAPI IsZoomed(HWND);
+WINUSERAPI BOOL        WINAPI KillSystemTimer(HWND,UINT_PTR);
+WINUSERAPI BOOL        WINAPI KillTimer(HWND,UINT_PTR);
+WINUSERAPI HACCEL      WINAPI LoadAcceleratorsA(HINSTANCE,LPCSTR);
+WINUSERAPI HACCEL      WINAPI LoadAcceleratorsW(HINSTANCE,LPCWSTR);
+#define                       LoadAccelerators WINELIB_NAME_AW(LoadAccelerators)
+WINUSERAPI HBITMAP     WINAPI LoadBitmapA(HINSTANCE,LPCSTR);
+WINUSERAPI HBITMAP     WINAPI LoadBitmapW(HINSTANCE,LPCWSTR);
+#define                       LoadBitmap WINELIB_NAME_AW(LoadBitmap)
+WINUSERAPI HCURSOR     WINAPI LoadCursorA(HINSTANCE,LPCSTR);
+WINUSERAPI HCURSOR     WINAPI LoadCursorW(HINSTANCE,LPCWSTR);
+#define                       LoadCursor WINELIB_NAME_AW(LoadCursor)
+WINUSERAPI HCURSOR     WINAPI LoadCursorFromFileA(LPCSTR);
+WINUSERAPI HCURSOR     WINAPI LoadCursorFromFileW(LPCWSTR);
+#define                       LoadCursorFromFile WINELIB_NAME_AW(LoadCursorFromFile)
+WINUSERAPI HICON       WINAPI LoadIconA(HINSTANCE,LPCSTR);
+WINUSERAPI HICON       WINAPI LoadIconW(HINSTANCE,LPCWSTR);
+#define                       LoadIcon WINELIB_NAME_AW(LoadIcon)
+WINUSERAPI HANDLE      WINAPI LoadImageA(HINSTANCE,LPCSTR,UINT,INT,INT,UINT);
+WINUSERAPI HANDLE      WINAPI LoadImageW(HINSTANCE,LPCWSTR,UINT,INT,INT,UINT);
+#define                       LoadImage WINELIB_NAME_AW(LoadImage)
+WINUSERAPI HKL         WINAPI LoadKeyboardLayoutA(LPCSTR,UINT);
+WINUSERAPI HKL         WINAPI LoadKeyboardLayoutW(LPCWSTR,UINT);
+#define                       LoadKeyboardLayout WINELIB_NAME_AW(LoadKeyboardLayout)
+WINUSERAPI HMENU       WINAPI LoadMenuA(HINSTANCE,LPCSTR);
+WINUSERAPI HMENU       WINAPI LoadMenuW(HINSTANCE,LPCWSTR);
+#define                       LoadMenu WINELIB_NAME_AW(LoadMenu)
+WINUSERAPI HMENU       WINAPI LoadMenuIndirectA(LPCVOID);
+WINUSERAPI HMENU       WINAPI LoadMenuIndirectW(LPCVOID);
+#define                       LoadMenuIndirect WINELIB_NAME_AW(LoadMenuIndirect)
+WINUSERAPI INT         WINAPI LoadStringA(HINSTANCE,UINT,LPSTR,INT);
+WINUSERAPI INT         WINAPI LoadStringW(HINSTANCE,UINT,LPWSTR,INT);
+#define                       LoadString WINELIB_NAME_AW(LoadString)
+WINUSERAPI BOOL        WINAPI LockSetForegroundWindow(UINT);
+WINUSERAPI BOOL        WINAPI LockWindowUpdate(HWND);
+WINUSERAPI INT         WINAPI LookupIconIdFromDirectory(LPBYTE,BOOL);
+WINUSERAPI INT         WINAPI LookupIconIdFromDirectoryEx(LPBYTE,BOOL,INT,INT,UINT);
+WINUSERAPI UINT        WINAPI MapVirtualKeyA(UINT,UINT);
+WINUSERAPI UINT        WINAPI MapVirtualKeyW(UINT,UINT);
+#define                       MapVirtualKey WINELIB_NAME_AW(MapVirtualKey)
+WINUSERAPI UINT        WINAPI MapVirtualKeyExA(UINT,UINT,HKL);
+WINUSERAPI UINT        WINAPI MapVirtualKeyExW(UINT,UINT,HKL);
+#define                       MapVirtualKeyEx WINELIB_NAME_AW(MapVirtualKeyEx)
+WINUSERAPI BOOL        WINAPI MapDialogRect(HWND,LPRECT);
+WINUSERAPI INT         WINAPI MapWindowPoints(HWND,HWND,LPPOINT,UINT);
+WINUSERAPI INT         WINAPI MenuItemFromPoint(HWND,HMENU,POINT);
+WINUSERAPI BOOL        WINAPI MessageBeep(UINT);
+WINUSERAPI INT         WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);
+WINUSERAPI INT         WINAPI MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT);
+#define                       MessageBox WINELIB_NAME_AW(MessageBox)
+WINUSERAPI INT         WINAPI MessageBoxExA(HWND,LPCSTR,LPCSTR,UINT,WORD);
+WINUSERAPI INT         WINAPI MessageBoxExW(HWND,LPCWSTR,LPCWSTR,UINT,WORD);
+#define                       MessageBoxEx WINELIB_NAME_AW(MessageBoxEx)
+WINUSERAPI INT         WINAPI MessageBoxIndirectA(LPMSGBOXPARAMSA);
+WINUSERAPI INT         WINAPI MessageBoxIndirectW(LPMSGBOXPARAMSW);
+#define                       MessageBoxIndirect WINELIB_NAME_AW(MessageBoxIndirect)
+WINUSERAPI BOOL        WINAPI ModifyMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL        WINAPI ModifyMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR);
+#define                       ModifyMenu WINELIB_NAME_AW(ModifyMenu)
+WINUSERAPI HMONITOR    WINAPI MonitorFromPoint(POINT,DWORD);
+WINUSERAPI HMONITOR    WINAPI MonitorFromRect(LPRECT,DWORD);
+WINUSERAPI HMONITOR    WINAPI MonitorFromWindow(HWND,DWORD);
+WINUSERAPI BOOL        WINAPI MoveWindow(HWND,INT,INT,INT,INT,BOOL);
+WINUSERAPI DWORD       WINAPI MsgWaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD,DWORD);
+WINUSERAPI DWORD       WINAPI MsgWaitForMultipleObjectsEx(DWORD,const HANDLE*,DWORD,DWORD,DWORD);
+WINUSERAPI VOID        WINAPI NotifyWinEvent(DWORD,HWND,LONG,LONG);
+WINUSERAPI DWORD       WINAPI OemKeyScan(WORD);
+WINUSERAPI BOOL        WINAPI OemToCharA(LPCSTR,LPSTR);
+WINUSERAPI BOOL        WINAPI OemToCharW(LPCSTR,LPWSTR);
+#define                       OemToChar WINELIB_NAME_AW(OemToChar)
+WINUSERAPI BOOL        WINAPI OemToCharBuffA(LPCSTR,LPSTR,DWORD);
+WINUSERAPI BOOL        WINAPI OemToCharBuffW(LPCSTR,LPWSTR,DWORD);
+#define                       OemToCharBuff WINELIB_NAME_AW(OemToCharBuff)
+WINUSERAPI BOOL        WINAPI OffsetRect(LPRECT,INT,INT);
+WINUSERAPI BOOL        WINAPI OpenClipboard(HWND);
+WINUSERAPI HDESK       WINAPI OpenDesktopA(LPCSTR,DWORD,BOOL,ACCESS_MASK);
+WINUSERAPI HDESK       WINAPI OpenDesktopW(LPCWSTR,DWORD,BOOL,ACCESS_MASK);
+#define                       OpenDesktop WINELIB_NAME_AW(OpenDesktop)
+WINUSERAPI BOOL        WINAPI OpenIcon(HWND);
+WINUSERAPI HDESK       WINAPI OpenInputDesktop(DWORD,BOOL,ACCESS_MASK);
+WINUSERAPI HWINSTA     WINAPI OpenWindowStationA(LPCSTR,BOOL,ACCESS_MASK);
+WINUSERAPI HWINSTA     WINAPI OpenWindowStationW(LPCWSTR,BOOL,ACCESS_MASK);
+#define                       OpenWindowStation WINELIB_NAME_AW(OpenWindowStation)
+WINUSERAPI BOOL        WINAPI PaintDesktop(HDC);
+WINUSERAPI BOOL        WINAPI PeekMessageA(LPMSG,HWND,UINT,UINT,UINT);
+WINUSERAPI BOOL        WINAPI PeekMessageW(LPMSG,HWND,UINT,UINT,UINT);
+#define                       PeekMessage WINELIB_NAME_AW(PeekMessage)
+#define                       PostAppMessageA(thread,msg,wparam,lparam) PostThreadMessageA((DWORD)(thread),msg,wparam,lparam)
+#define                       PostAppMessageW(thread,msg,wparam,lparam) PostThreadMessageW((DWORD)(thread),msg,wparam,lparam)
+#define                       PostAppMessage WINELIB_NAME_AW(PostAppMessage)
+WINUSERAPI BOOL        WINAPI PostMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL        WINAPI PostMessageW(HWND,UINT,WPARAM,LPARAM);
+#define                       PostMessage WINELIB_NAME_AW(PostMessage)
+WINUSERAPI void        WINAPI PostQuitMessage(INT);
+WINUSERAPI BOOL        WINAPI PostThreadMessageA(DWORD,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL        WINAPI PostThreadMessageW(DWORD,UINT,WPARAM,LPARAM);
+#define                       PostThreadMessage WINELIB_NAME_AW(PostThreadMessage)
+WINUSERAPI UINT        WINAPI PrivateExtractIconExA(LPCSTR,int,HICON*,HICON*,UINT);
+WINUSERAPI UINT        WINAPI PrivateExtractIconExW(LPCWSTR,int,HICON*,HICON*,UINT);
+WINUSERAPI UINT        WINAPI PrivateExtractIconsA(LPCSTR,int,int,int,HICON*,UINT*,UINT,UINT);
+WINUSERAPI UINT        WINAPI PrivateExtractIconsW(LPCWSTR,int,int,int,HICON*,UINT*,UINT,UINT);
+WINUSERAPI BOOL        WINAPI PtInRect(const RECT*,POINT);
+WINUSERAPI HWND        WINAPI RealChildWindowFromPoint(HWND,POINT);
+WINUSERAPI UINT        WINAPI RealGetWindowClassA(HWND,LPSTR,UINT);
+WINUSERAPI UINT        WINAPI RealGetWindowClassW(HWND,LPWSTR,UINT);
+#define                       RealGetWindowClass WINELIB_NAME_AW(RealGetWindowClass)
+WINUSERAPI BOOL        WINAPI RedrawWindow(HWND,const RECT*,HRGN,UINT);
+WINUSERAPI ATOM        WINAPI RegisterClassA(const WNDCLASSA *);
+WINUSERAPI ATOM        WINAPI RegisterClassW(const WNDCLASSW *);
+#define                       RegisterClass WINELIB_NAME_AW(RegisterClass)
+WINUSERAPI ATOM        WINAPI RegisterClassExA(const WNDCLASSEXA *);
+WINUSERAPI ATOM        WINAPI RegisterClassExW(const WNDCLASSEXW *);
+#define                       RegisterClassEx WINELIB_NAME_AW(RegisterClassEx)
+WINUSERAPI UINT        WINAPI RegisterClipboardFormatA(LPCSTR);
+WINUSERAPI UINT        WINAPI RegisterClipboardFormatW(LPCWSTR);
+#define                       RegisterClipboardFormat WINELIB_NAME_AW(RegisterClipboardFormat)
+WINUSERAPI HDEVNOTIFY  WINAPI RegisterDeviceNotificationA(HANDLE,LPVOID,DWORD);
+WINUSERAPI HDEVNOTIFY  WINAPI RegisterDeviceNotificationW(HANDLE,LPVOID,DWORD);
+#define                       RegisterDeviceNotification WINELIB_NAME_AW(RegisterDeviceNotification)
+WINUSERAPI BOOL        WINAPI RegisterHotKey(HWND,INT,UINT,UINT);
+WINUSERAPI BOOL        WINAPI RegisterRawInputDevices(PRAWINPUTDEVICE,UINT,UINT);
+WINUSERAPI UINT        WINAPI RegisterWindowMessageA(LPCSTR);
+WINUSERAPI UINT        WINAPI RegisterWindowMessageW(LPCWSTR);
+#define                       RegisterWindowMessage WINELIB_NAME_AW(RegisterWindowMessage)
+WINUSERAPI BOOL        WINAPI ReleaseCapture(void);
+WINUSERAPI INT         WINAPI ReleaseDC(HWND,HDC);
+WINUSERAPI BOOL        WINAPI RemoveMenu(HMENU,UINT,UINT);
+WINUSERAPI HANDLE      WINAPI RemovePropA(HWND,LPCSTR);
+WINUSERAPI HANDLE      WINAPI RemovePropW(HWND,LPCWSTR);
+#define                       RemoveProp WINELIB_NAME_AW(RemoveProp)
+WINUSERAPI BOOL        WINAPI ReplyMessage(LRESULT);
+WINUSERAPI BOOL        WINAPI ScreenToClient(HWND,LPPOINT);
+WINUSERAPI VOID        WINAPI ScrollChildren(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL        WINAPI ScrollDC(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT);
+WINUSERAPI BOOL        WINAPI ScrollWindow(HWND,INT,INT,const RECT*,const RECT*);
+WINUSERAPI INT         WINAPI ScrollWindowEx(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);
+WINUSERAPI LRESULT     WINAPI SendDlgItemMessageA(HWND,INT,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI SendDlgItemMessageW(HWND,INT,UINT,WPARAM,LPARAM);
+#define                       SendDlgItemMessage WINELIB_NAME_AW(SendDlgItemMessage)
+WINUSERAPI UINT        WINAPI SendInput(UINT,LPINPUT,int);
+WINUSERAPI LRESULT     WINAPI SendMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT     WINAPI SendMessageW(HWND,UINT,WPARAM,LPARAM);
+#define                       SendMessage WINELIB_NAME_AW(SendMessage)
+WINUSERAPI BOOL        WINAPI SendMessageCallbackA(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR);
+WINUSERAPI BOOL        WINAPI SendMessageCallbackW(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR);
+#define                       SendMessageCallback WINELIB_NAME_AW(SendMessageCallback)
+WINUSERAPI LRESULT     WINAPI SendMessageTimeoutA(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);
+WINUSERAPI LRESULT     WINAPI SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);
+#define                       SendMessageTimeout WINELIB_NAME_AW(SendMessageTimeout)
+WINUSERAPI BOOL        WINAPI SendNotifyMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL        WINAPI SendNotifyMessageW(HWND,UINT,WPARAM,LPARAM);
+#define                       SendNotifyMessage WINELIB_NAME_AW(SendNotifyMessage)
+WINUSERAPI HWND        WINAPI SetActiveWindow(HWND);
+WINUSERAPI HWND        WINAPI SetCapture(HWND);
+WINUSERAPI BOOL        WINAPI SetCaretBlinkTime(UINT);
+WINUSERAPI BOOL        WINAPI SetCaretPos(INT,INT);
+WINUSERAPI DWORD       WINAPI SetClassLongA(HWND,INT,LONG);
+WINUSERAPI DWORD       WINAPI SetClassLongW(HWND,INT,LONG);
+#define                       SetClassLong WINELIB_NAME_AW(SetClassLong)
+#ifdef _WIN64
+WINUSERAPI ULONG_PTR   WINAPI SetClassLongPtrA(HWND,INT,LONG_PTR);
+WINUSERAPI ULONG_PTR   WINAPI SetClassLongPtrW(HWND,INT,LONG_PTR);
+#else
+#define                       SetClassLongPtrA SetClassLongA
+#define                       SetClassLongPtrW SetClassLongW
+#endif
+#define                       SetClassLongPtr WINELIB_NAME_AW(SetClassLongPtr)
+WINUSERAPI WORD        WINAPI SetClassWord(HWND,INT,WORD);
+WINUSERAPI HANDLE      WINAPI SetClipboardData(UINT,HANDLE);
+WINUSERAPI HWND        WINAPI SetClipboardViewer(HWND);
+WINUSERAPI HCURSOR     WINAPI SetCursor(HCURSOR);
+WINUSERAPI BOOL        WINAPI SetCursorPos(INT,INT);
+WINUSERAPI VOID        WINAPI SetDebugErrorLevel(DWORD);
+WINUSERAPI BOOL        WINAPI SetDeskWallPaper(LPCSTR);
+WINUSERAPI BOOL        WINAPI SetDlgItemInt(HWND,INT,UINT,BOOL);
+WINUSERAPI BOOL        WINAPI SetDlgItemTextA(HWND,INT,LPCSTR);
+WINUSERAPI BOOL        WINAPI SetDlgItemTextW(HWND,INT,LPCWSTR);
+#define                       SetDlgItemText WINELIB_NAME_AW(SetDlgItemText)
+WINUSERAPI BOOL        WINAPI SetDoubleClickTime(UINT);
+WINUSERAPI HWND        WINAPI SetFocus(HWND);
+WINUSERAPI BOOL        WINAPI SetForegroundWindow(HWND);
+WINUSERAPI void        WINAPI SetInternalWindowPos(HWND,UINT,LPRECT,LPPOINT);
+WINUSERAPI BOOL        WINAPI SetKeyboardState(LPBYTE);
+WINUSERAPI VOID        WINAPI SetLastErrorEx(DWORD,DWORD);
+WINUSERAPI BOOL        WINAPI SetLayeredWindowAttributes(HWND,COLORREF,BYTE,DWORD);
+WINUSERAPI BOOL        WINAPI SetMenu(HWND,HMENU);
+WINUSERAPI BOOL        WINAPI SetMenuContextHelpId(HMENU,DWORD);
+WINUSERAPI BOOL        WINAPI SetMenuDefaultItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL        WINAPI SetMenuInfo(HMENU,LPCMENUINFO);
+WINUSERAPI BOOL        WINAPI SetMenuItemBitmaps(HMENU,UINT,UINT,HBITMAP,HBITMAP);
+WINUSERAPI BOOL        WINAPI SetMenuItemInfoA(HMENU,UINT,BOOL,const MENUITEMINFOA*);
+WINUSERAPI BOOL        WINAPI SetMenuItemInfoW(HMENU,UINT,BOOL,const MENUITEMINFOW*);
+#define                       SetMenuItemInfo WINELIB_NAME_AW(SetMenuItemInfo)
+WINUSERAPI LPARAM      WINAPI SetMessageExtraInfo(LPARAM);
+WINUSERAPI BOOL        WINAPI SetMessageQueue(INT);
+WINUSERAPI BOOL        WINAPI SetProcessDefaultLayout(DWORD);
+WINUSERAPI BOOL        WINAPI SetProcessWindowStation(HWINSTA);
+WINUSERAPI HWND        WINAPI SetParent(HWND,HWND);
+WINUSERAPI BOOL        WINAPI SetPropA(HWND,LPCSTR,HANDLE);
+WINUSERAPI BOOL        WINAPI SetPropW(HWND,LPCWSTR,HANDLE);
+#define                       SetProp WINELIB_NAME_AW(SetProp)
+WINUSERAPI BOOL        WINAPI SetRect(LPRECT,INT,INT,INT,INT);
+WINUSERAPI BOOL        WINAPI SetRectEmpty(LPRECT);
+WINUSERAPI INT         WINAPI SetScrollInfo(HWND,INT,const SCROLLINFO*,BOOL);
+WINUSERAPI INT         WINAPI SetScrollPos(HWND,INT,INT,BOOL);
+WINUSERAPI BOOL        WINAPI SetScrollRange(HWND,INT,INT,INT,BOOL);
+#define                       SetSysModalWindow(hwnd) ((HWND)0)
+WINUSERAPI BOOL        WINAPI SetSystemCursor(HCURSOR,DWORD);
+WINUSERAPI BOOL        WINAPI SetSystemMenu(HWND,HMENU);
+WINUSERAPI UINT_PTR    WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC);
+WINUSERAPI BOOL        WINAPI SetThreadDesktop(HDESK);
+WINUSERAPI UINT_PTR    WINAPI SetTimer(HWND,UINT_PTR,UINT,TIMERPROC);
+WINUSERAPI BOOL        WINAPI SetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD);
+WINUSERAPI BOOL        WINAPI SetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD);
+#define                       SetUserObjectInformation WINELIB_NAME_AW(SetUserObjectInformation)
+WINUSERAPI BOOL        WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINUSERAPI BOOL        WINAPI SetWindowContextHelpId(HWND,DWORD);
+WINUSERAPI LONG        WINAPI SetWindowLongA(HWND,INT,LONG);
+WINUSERAPI LONG        WINAPI SetWindowLongW(HWND,INT,LONG);
+#define                       SetWindowLong WINELIB_NAME_AW(SetWindowLong)
+#ifdef _WIN64
+WINUSERAPI LONG_PTR    WINAPI SetWindowLongPtrA(HWND,INT,LONG_PTR);
+WINUSERAPI LONG_PTR    WINAPI SetWindowLongPtrW(HWND,INT,LONG_PTR);
+#else
+#define                       SetWindowLongPtrA SetWindowLongA
+#define                       SetWindowLongPtrW SetWindowLongW
+#endif
+#define                       SetWindowLongPtr WINELIB_NAME_AW(SetWindowLongPtr)
+WINUSERAPI BOOL        WINAPI SetWindowPlacement(HWND,const WINDOWPLACEMENT*);
+WINUSERAPI HHOOK       WINAPI SetWindowsHookA(INT,HOOKPROC);
+WINUSERAPI HHOOK       WINAPI SetWindowsHookW(INT,HOOKPROC);
+#define                       SetWindowsHook WINELIB_NAME_AW(SetWindowsHook)
+WINUSERAPI HHOOK       WINAPI SetWindowsHookExA(INT,HOOKPROC,HINSTANCE,DWORD);
+WINUSERAPI HHOOK       WINAPI SetWindowsHookExW(INT,HOOKPROC,HINSTANCE,DWORD);
+#define                       SetWindowsHookEx WINELIB_NAME_AW(SetWindowsHookEx)
+WINUSERAPI BOOL        WINAPI SetWindowPos(HWND,HWND,INT,INT,INT,INT,UINT);
+WINUSERAPI INT         WINAPI SetWindowRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL        WINAPI SetWindowTextA(HWND,LPCSTR);
+WINUSERAPI BOOL        WINAPI SetWindowTextW(HWND,LPCWSTR);
+#define                       SetWindowText WINELIB_NAME_AW(SetWindowText)
+WINUSERAPI WORD        WINAPI SetWindowWord(HWND,INT,WORD);
+WINUSERAPI HWINEVENTHOOK WINAPI SetWinEventHook(DWORD,DWORD,HMODULE,WINEVENTPROC,DWORD,DWORD,DWORD);
+WINUSERAPI BOOL        WINAPI ShowCaret(HWND);
+WINUSERAPI INT         WINAPI ShowCursor(BOOL);
+WINUSERAPI BOOL        WINAPI ShowScrollBar(HWND,INT,BOOL);
+WINUSERAPI BOOL        WINAPI ShowOwnedPopups(HWND,BOOL);
+WINUSERAPI BOOL        WINAPI ShowWindow(HWND,INT);
+WINUSERAPI BOOL        WINAPI ShowWindowAsync(HWND,INT);
+WINUSERAPI BOOL        WINAPI SubtractRect(LPRECT,const RECT*,const RECT*);
+WINUSERAPI BOOL        WINAPI SwapMouseButton(BOOL);
+WINUSERAPI BOOL        WINAPI SwitchDesktop(HDESK);
+WINUSERAPI VOID        WINAPI SwitchToThisWindow(HWND,BOOL);
+WINUSERAPI BOOL        WINAPI SystemParametersInfoA(UINT,UINT,LPVOID,UINT);
+WINUSERAPI BOOL        WINAPI SystemParametersInfoW(UINT,UINT,LPVOID,UINT);
+#define                       SystemParametersInfo WINELIB_NAME_AW(SystemParametersInfo)
+WINUSERAPI LONG        WINAPI TabbedTextOutA(HDC,INT,INT,LPCSTR,INT,INT,const INT*,INT);
+WINUSERAPI LONG        WINAPI TabbedTextOutW(HDC,INT,INT,LPCWSTR,INT,INT,const INT*,INT);
+#define                       TabbedTextOut WINELIB_NAME_AW(TabbedTextOut)
+WINUSERAPI WORD        WINAPI TileWindows (HWND,UINT,const RECT *,UINT,const HWND *);
+WINUSERAPI INT         WINAPI ToAscii(UINT,UINT,const BYTE *,LPWORD,UINT);
+WINUSERAPI INT         WINAPI ToAsciiEx(UINT,UINT,const BYTE *,LPWORD,UINT,HKL);
+WINUSERAPI INT         WINAPI ToUnicode(UINT,UINT,const BYTE *,LPWSTR,int,UINT);
+WINUSERAPI INT         WINAPI ToUnicodeEx(UINT,UINT,const BYTE *,LPWSTR,int,UINT,HKL);
+WINUSERAPI BOOL        WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT);
+WINUSERAPI BOOL        WINAPI TrackPopupMenu(HMENU,UINT,INT,INT,INT,HWND,const RECT*);
+WINUSERAPI BOOL        WINAPI TrackPopupMenuEx(HMENU,UINT,INT,INT,HWND,LPTPMPARAMS);
+WINUSERAPI INT         WINAPI TranslateAcceleratorA(HWND,HACCEL,LPMSG);
+WINUSERAPI INT         WINAPI TranslateAcceleratorW(HWND,HACCEL,LPMSG);
+#define                       TranslateAccelerator WINELIB_NAME_AW(TranslateAccelerator)
+WINUSERAPI BOOL        WINAPI TranslateMDISysAccel(HWND,LPMSG);
+WINUSERAPI BOOL        WINAPI TranslateMessage(const MSG*);
+WINUSERAPI BOOL        WINAPI UnhookWinEvent(HWINEVENTHOOK);
+WINUSERAPI BOOL        WINAPI UnhookWindowsHook(INT,HOOKPROC);
+WINUSERAPI BOOL        WINAPI UnhookWindowsHookEx(HHOOK);
+WINUSERAPI BOOL        WINAPI UnloadKeyboardLayout(HKL);
+WINUSERAPI BOOL        WINAPI UnionRect(LPRECT,const RECT*,const RECT*);
+WINUSERAPI BOOL        WINAPI UnregisterClassA(LPCSTR,HINSTANCE);
+WINUSERAPI BOOL        WINAPI UnregisterClassW(LPCWSTR,HINSTANCE);
+#define                       UnregisterClass WINELIB_NAME_AW(UnregisterClass)
+WINUSERAPI BOOL        WINAPI UnregisterDeviceNotification(HDEVNOTIFY);
+WINUSERAPI BOOL        WINAPI UnregisterHotKey(HWND,INT);
+WINUSERAPI BOOL        WINAPI UpdateWindow(HWND);
+WINUSERAPI BOOL        WINAPI UserHandleGrantAccess(HANDLE,HANDLE,BOOL);
+WINUSERAPI UINT        WINAPI UserRealizePalette(HDC);
+WINUSERAPI BOOL        WINAPI ValidateRect(HWND,const RECT*);
+WINUSERAPI BOOL        WINAPI ValidateRgn(HWND,HRGN);
+WINUSERAPI SHORT       WINAPI VkKeyScanA(CHAR);
+WINUSERAPI SHORT       WINAPI VkKeyScanW(WCHAR);
+#define                       VkKeyScan WINELIB_NAME_AW(VkKeyScan)
+WINUSERAPI WORD        WINAPI VkKeyScanExA(CHAR, HKL);
+WINUSERAPI WORD        WINAPI VkKeyScanExW(WCHAR, HKL);
+#define                       VkKeyScanEx WINELIB_NAME_AW(VkKeyScanEx)
+WINUSERAPI DWORD       WINAPI WaitForInputIdle(HANDLE,DWORD);
+WINUSERAPI BOOL        WINAPI WaitMessage(void);
+WINUSERAPI HWND        WINAPI WindowFromDC(HDC);
+WINUSERAPI HWND        WINAPI WindowFromPoint(POINT);
+WINUSERAPI BOOL        WINAPI WinHelpA(HWND,LPCSTR,UINT,ULONG_PTR);
+WINUSERAPI BOOL        WINAPI WinHelpW(HWND,LPCWSTR,UINT,ULONG_PTR);
+#define                       WinHelp WINELIB_NAME_AW(WinHelp)
+WINUSERAPI VOID        WINAPI keybd_event(BYTE,BYTE,DWORD,ULONG_PTR);
+WINUSERAPI VOID        WINAPI mouse_event(DWORD,DWORD,DWORD,DWORD,ULONG_PTR);
+WINUSERAPI INT        WINAPIV wsprintfA(LPSTR,LPCSTR,...);
+WINUSERAPI INT        WINAPIV wsprintfW(LPWSTR,LPCWSTR,...);
+#define                       wsprintf WINELIB_NAME_AW(wsprintf)
+WINUSERAPI INT         WINAPI wvsprintfA(LPSTR,LPCSTR,__ms_va_list);
+WINUSERAPI INT         WINAPI wvsprintfW(LPWSTR,LPCWSTR,__ms_va_list);
+#define                       wvsprintf WINELIB_NAME_AW(wvsprintf)
+
+/* Undocumented functions */
+
+/* NOTE: This is SYSTEM.3, not USER.182, which is also named KillSystemTimer */
+WORD        WINAPI SYSTEM_KillSystemTimer( WORD );
+
+#ifdef __WINESRC__
+WINUSERAPI BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINUSER_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
new file mode 100644
index 0000000..1d2a0bb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
@@ -0,0 +1,1342 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+#  define __MSABI_LONG(x)         x ## l
+# else
+#  define __MSABI_LONG(x)         x
+# endif
+#endif
+
+#ifdef RC_INVOKED
+# define MAKEINTRESOURCE(i)       i
+#endif
+
+
+#define RT_MANIFEST                                        MAKEINTRESOURCE(24)
+#define CREATEPROCESS_MANIFEST_RESOURCE_ID                 MAKEINTRESOURCE(1)
+#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID                MAKEINTRESOURCE(2)
+#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)
+#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(1)
+#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(16)
+
+
+/*** ShowWindow() codes ***/
+#define SW_HIDE                0
+#define SW_SHOWNORMAL          1
+#define SW_NORMAL              SW_SHOWNORMAL
+#define SW_SHOWMINIMIZED       2
+#define SW_SHOWMAXIMIZED       3
+#define SW_MAXIMIZE            SW_SHOWMAXIMIZED
+#define SW_SHOWNOACTIVATE      4
+#define SW_SHOW                5
+#define SW_MINIMIZE            6
+#define SW_SHOWMINNOACTIVE     7
+#define SW_SHOWNA              8
+#define SW_RESTORE             9
+#define SW_SHOWDEFAULT         10
+#define SW_FORCEMINIMIZE       11
+#define SW_MAX                 11
+#define SW_NORMALNA            0xCC /* Undocumented. Flag in MinMaximize */
+
+/* Obsolete ShowWindow() codes for compatibility */
+#define HIDE_WINDOW            SW_HIDE
+#define SHOW_OPENWINDOW        SW_SHOWNORMAL
+#define SHOW_ICONWINDOW        SW_SHOWMINIMIZED
+#define SHOW_FULLSCREEN        SW_SHOWMAXIMIZED
+#define SHOW_OPENNOACTIVATE    SW_SHOWNOACTIVATE
+
+/* WM_SHOWWINDOW lParam codes */
+#define SW_PARENTCLOSING       1
+#define SW_OTHERZOOM           2
+#define SW_PARENTOPENING       3
+#define SW_OTHERUNZOOM         4
+
+
+/*** Virtual key codes ***/
+#define VK_LBUTTON             0x01
+#define VK_RBUTTON             0x02
+#define VK_CANCEL              0x03
+#define VK_MBUTTON             0x04
+#define VK_XBUTTON1            0x05
+#define VK_XBUTTON2            0x06
+/*                             0x07  Undefined */
+#define VK_BACK                0x08
+#define VK_TAB                 0x09
+/*                             0x0A-0x0B  Undefined */
+#define VK_CLEAR               0x0C
+#define VK_RETURN              0x0D
+/*                             0x0E-0x0F  Undefined */
+#define VK_SHIFT               0x10
+#define VK_CONTROL             0x11
+#define VK_MENU                0x12
+#define VK_PAUSE               0x13
+#define VK_CAPITAL             0x14
+
+#define VK_KANA                0x15
+#define VK_HANGEUL             VK_KANA
+#define VK_HANGUL              VK_KANA
+#define VK_JUNJA               0x17
+#define VK_FINAL               0x18
+#define VK_HANJA               0x19
+#define VK_KANJI               VK_HANJA
+
+/*                             0x1A       Undefined */
+#define VK_ESCAPE              0x1B
+
+#define VK_CONVERT             0x1C
+#define VK_NONCONVERT          0x1D
+#define VK_ACCEPT              0x1E
+#define VK_MODECHANGE          0x1F
+
+#define VK_SPACE               0x20
+#define VK_PRIOR               0x21
+#define VK_NEXT                0x22
+#define VK_END                 0x23
+#define VK_HOME                0x24
+#define VK_LEFT                0x25
+#define VK_UP                  0x26
+#define VK_RIGHT               0x27
+#define VK_DOWN                0x28
+#define VK_SELECT              0x29
+#define VK_PRINT               0x2A /* OEM specific in Windows 3.1 SDK */
+#define VK_EXECUTE             0x2B
+#define VK_SNAPSHOT            0x2C
+#define VK_INSERT              0x2D
+#define VK_DELETE              0x2E
+#define VK_HELP                0x2F
+/* VK_0 - VK-9                 0x30-0x39  Use ASCII instead */
+/*                             0x3A-0x40  Undefined */
+/* VK_A - VK_Z                 0x41-0x5A  Use ASCII instead */
+#define VK_LWIN                0x5B
+#define VK_RWIN                0x5C
+#define VK_APPS                0x5D
+/*                             0x5E Unassigned */
+#define VK_SLEEP               0x5F
+#define VK_NUMPAD0             0x60
+#define VK_NUMPAD1             0x61
+#define VK_NUMPAD2             0x62
+#define VK_NUMPAD3             0x63
+#define VK_NUMPAD4             0x64
+#define VK_NUMPAD5             0x65
+#define VK_NUMPAD6             0x66
+#define VK_NUMPAD7             0x67
+#define VK_NUMPAD8             0x68
+#define VK_NUMPAD9             0x69
+#define VK_MULTIPLY            0x6A
+#define VK_ADD                 0x6B
+#define VK_SEPARATOR           0x6C
+#define VK_SUBTRACT            0x6D
+#define VK_DECIMAL             0x6E
+#define VK_DIVIDE              0x6F
+#define VK_F1                  0x70
+#define VK_F2                  0x71
+#define VK_F3                  0x72
+#define VK_F4                  0x73
+#define VK_F5                  0x74
+#define VK_F6                  0x75
+#define VK_F7                  0x76
+#define VK_F8                  0x77
+#define VK_F9                  0x78
+#define VK_F10                 0x79
+#define VK_F11                 0x7A
+#define VK_F12                 0x7B
+#define VK_F13                 0x7C
+#define VK_F14                 0x7D
+#define VK_F15                 0x7E
+#define VK_F16                 0x7F
+#define VK_F17                 0x80
+#define VK_F18                 0x81
+#define VK_F19                 0x82
+#define VK_F20                 0x83
+#define VK_F21                 0x84
+#define VK_F22                 0x85
+#define VK_F23                 0x86
+#define VK_F24                 0x87
+/*                             0x88-0x8F  Unassigned */
+#define VK_NUMLOCK             0x90
+#define VK_SCROLL              0x91
+#define VK_OEM_NEC_EQUAL       0x92
+#define VK_OEM_FJ_JISHO        0x92
+#define VK_OEM_FJ_MASSHOU      0x93
+#define VK_OEM_FJ_TOUROKU      0x94
+#define VK_OEM_FJ_LOYA         0x95
+#define VK_OEM_FJ_ROYA         0x96
+/*                             0x97-0x9F  Unassigned */
+/*
+ * differencing between right and left shift/control/alt key.
+ * Used only by GetAsyncKeyState() and GetKeyState().
+ */
+#define VK_LSHIFT              0xA0
+#define VK_RSHIFT              0xA1
+#define VK_LCONTROL            0xA2
+#define VK_RCONTROL            0xA3
+#define VK_LMENU               0xA4
+#define VK_RMENU               0xA5
+
+#define VK_BROWSER_BACK        0xA6
+#define VK_BROWSER_FORWARD     0xA7
+#define VK_BROWSER_REFRESH     0xA8
+#define VK_BROWSER_STOP        0xA9
+#define VK_BROWSER_SEARCH      0xAA
+#define VK_BROWSER_FAVORITES   0xAB
+#define VK_BROWSER_HOME        0xAC
+#define VK_VOLUME_MUTE         0xAD
+#define VK_VOLUME_DOWN         0xAE
+#define VK_VOLUME_UP           0xAF
+#define VK_MEDIA_NEXT_TRACK    0xB0
+#define VK_MEDIA_PREV_TRACK    0xB1
+#define VK_MEDIA_STOP          0xB2
+#define VK_MEDIA_PLAY_PAUSE    0xB3
+#define VK_LAUNCH_MAIL         0xB4
+#define VK_LAUNCH_MEDIA_SELECT 0xB5
+#define VK_LAUNCH_APP1         0xB6
+#define VK_LAUNCH_APP2         0xB7
+
+/*                             0xB8-0xB9  Unassigned */
+#define VK_OEM_1               0xBA
+#define VK_OEM_PLUS            0xBB
+#define VK_OEM_COMMA           0xBC
+#define VK_OEM_MINUS           0xBD
+#define VK_OEM_PERIOD          0xBE
+#define VK_OEM_2               0xBF
+#define VK_OEM_3               0xC0
+/*                             0xC1-0xDA  Unassigned */
+#define VK_OEM_4               0xDB
+#define VK_OEM_5               0xDC
+#define VK_OEM_6               0xDD
+#define VK_OEM_7               0xDE
+#define VK_OEM_8               0xDF
+/*                             0xE0       OEM specific */
+#define VK_OEM_AX              0xE1  /* "AX" key on Japanese AX keyboard */
+#define VK_OEM_102             0xE2  /* "<>" or "\|" on RT 102-key keyboard */
+#define VK_ICO_HELP            0xE3  /* Help key on ICO */
+#define VK_ICO_00              0xE4  /* 00 key on ICO */
+#define VK_PROCESSKEY          0xE5
+#define VK_ICO_CLEAR           0xE6
+
+#define VK_PACKET              0xE7
+/*                             0xE8       Unassigned */
+
+#define VK_OEM_RESET           0xE9
+#define VK_OEM_JUMP            0xEA
+#define VK_OEM_PA1             0xEB
+#define VK_OEM_PA2             0xEC
+#define VK_OEM_PA3             0xED
+#define VK_OEM_WSCTRL          0xEE
+#define VK_OEM_CUSEL           0xEF
+#define VK_OEM_ATTN            0xF0
+#define VK_OEM_FINISH          0xF1
+#define VK_OEM_COPY            0xF2
+#define VK_OEM_AUTO            0xF3
+#define VK_OEM_ENLW            0xF4
+#define VK_OEM_BACKTAB         0xF5
+#define VK_ATTN                0xF6
+#define VK_CRSEL               0xF7
+#define VK_EXSEL               0xF8
+#define VK_EREOF               0xF9
+#define VK_PLAY                0xFA
+#define VK_ZOOM                0xFB
+#define VK_NONAME              0xFC
+#define VK_PA1                 0xFD
+#define VK_OEM_CLEAR           0xFE
+/*                             0xFF       Unassigned */
+
+
+/*** Messages ***/
+#ifndef NOWINMESSAGES
+#define WM_NULL                0x0000
+#define WM_CREATE              0x0001
+#define WM_DESTROY             0x0002
+#define WM_MOVE                0x0003
+#define WM_SIZEWAIT            0x0004 /* DDK / Win16 */
+#define WM_SIZE                0x0005
+#define WM_ACTIVATE            0x0006
+
+/* WM_ACTIVATE wParam values */
+#define WA_INACTIVE            0
+#define WA_ACTIVE              1
+#define WA_CLICKACTIVE         2
+
+#define WM_SETFOCUS            0x0007
+#define WM_KILLFOCUS           0x0008
+#define WM_SETVISIBLE          0x0009 /* DDK / Win16 */
+#define WM_ENABLE              0x000a
+#define WM_SETREDRAW           0x000b
+#define WM_SETTEXT             0x000c
+#define WM_GETTEXT             0x000d
+#define WM_GETTEXTLENGTH       0x000e
+#define WM_PAINT               0x000f
+#define WM_CLOSE               0x0010
+#define WM_QUERYENDSESSION     0x0011
+#define WM_QUIT                0x0012
+#define WM_QUERYOPEN           0x0013
+#define WM_ERASEBKGND          0x0014
+#define WM_SYSCOLORCHANGE      0x0015
+#define WM_ENDSESSION          0x0016
+#define WM_SYSTEMERROR         0x0017 /* DDK / Win16 */
+#define WM_SHOWWINDOW          0x0018
+#define WM_CTLCOLOR            0x0019 /* Added from windowsx.h */
+#define WM_WININICHANGE        0x001a
+#define WM_SETTINGCHANGE       WM_WININICHANGE
+#define WM_DEVMODECHANGE       0x001b
+#define WM_ACTIVATEAPP         0x001c
+#define WM_FONTCHANGE          0x001d
+#define WM_TIMECHANGE          0x001e
+#define WM_CANCELMODE          0x001f
+#define WM_SETCURSOR           0x0020
+#define WM_MOUSEACTIVATE       0x0021
+#define WM_CHILDACTIVATE       0x0022
+#define WM_QUEUESYNC           0x0023
+#define WM_GETMINMAXINFO       0x0024
+
+#define WM_PAINTICON           0x0026
+#define WM_ICONERASEBKGND      0x0027
+#define WM_NEXTDLGCTL          0x0028
+#define WM_ALTTABACTIVE        0x0029 /* DDK / Win16 */
+#define WM_SPOOLERSTATUS       0x002a
+#define WM_DRAWITEM            0x002b
+#define WM_MEASUREITEM         0x002c
+#define WM_DELETEITEM          0x002d
+#define WM_VKEYTOITEM          0x002e
+#define WM_CHARTOITEM          0x002f
+#define WM_SETFONT             0x0030
+#define WM_GETFONT             0x0031
+#define WM_SETHOTKEY           0x0032
+#define WM_GETHOTKEY           0x0033
+#define WM_FILESYSCHANGE       0x0034 /* DDK / Win16 */
+#define WM_ISACTIVEICON        0x0035 /* DDK / Win16 */
+#define WM_QUERYPARKICON       0x0036 /* Undocumented */
+#define WM_QUERYDRAGICON       0x0037
+#define WM_QUERYSAVESTATE      0x0038 /* Undocumented */
+#define WM_COMPAREITEM         0x0039
+#define WM_TESTING             0x003a /* DDK / Win16 */
+
+#define WM_GETOBJECT           0x003d
+
+#define WM_ACTIVATESHELLWINDOW 0x003e /* FIXME: Wine-only */
+
+#define WM_COMPACTING          0x0041
+
+#define WM_COMMNOTIFY          0x0044
+#define WM_WINDOWPOSCHANGING   0x0046
+#define WM_WINDOWPOSCHANGED    0x0047
+
+#define WM_POWER               0x0048
+
+/* For WM_POWER */
+#define PWR_OK                 1
+#define PWR_FAIL               (-1)
+#define PWR_SUSPENDREQUEST     1
+#define PWR_SUSPENDRESUME      2
+#define PWR_CRITICALRESUME     3
+
+/* Win32 4.0 messages */
+#define WM_COPYDATA            0x004a
+#define WM_CANCELJOURNAL       0x004b
+#define WM_KEYF1               0x004d /* DDK / Win16 */
+#define WM_NOTIFY              0x004e
+#define WM_INPUTLANGCHANGEREQUEST 0x0050
+#define WM_INPUTLANGCHANGE     0x0051
+#define WM_TCARD               0x0052
+#define WM_HELP                0x0053
+#define WM_USERCHANGED         0x0054
+#define WM_NOTIFYFORMAT        0x0055
+
+/* WM_NOTIFYFORMAT commands and return values */
+#define NFR_ANSI               1
+#define NFR_UNICODE            2
+#define NF_QUERY               3
+#define NF_REQUERY             4
+
+#define WM_CONTEXTMENU         0x007b
+#define WM_STYLECHANGING       0x007c
+#define WM_STYLECHANGED        0x007d
+#define WM_DISPLAYCHANGE       0x007e
+#define WM_GETICON             0x007f
+#define WM_SETICON             0x0080
+
+/* Non-client system messages */
+#define WM_NCCREATE            0x0081
+#define WM_NCDESTROY           0x0082
+#define WM_NCCALCSIZE          0x0083
+#define WM_NCHITTEST           0x0084
+#define WM_NCPAINT             0x0085
+#define WM_NCACTIVATE          0x0086
+
+#define WM_GETDLGCODE          0x0087
+#define WM_SYNCPAINT           0x0088
+#define WM_SYNCTASK            0x0089 /* DDK / Win16 */
+
+/* Non-client mouse messages */
+#define WM_NCMOUSEMOVE         0x00a0
+#define WM_NCLBUTTONDOWN       0x00a1
+#define WM_NCLBUTTONUP         0x00a2
+#define WM_NCLBUTTONDBLCLK     0x00a3
+#define WM_NCRBUTTONDOWN       0x00a4
+#define WM_NCRBUTTONUP         0x00a5
+#define WM_NCRBUTTONDBLCLK     0x00a6
+#define WM_NCMBUTTONDOWN       0x00a7
+#define WM_NCMBUTTONUP         0x00a8
+#define WM_NCMBUTTONDBLCLK     0x00a9
+
+#define WM_NCXBUTTONDOWN       0x00ab
+#define WM_NCXBUTTONUP         0x00ac
+#define WM_NCXBUTTONDBLCLK     0x00ad
+
+/* Raw input */
+#define WM_INPUT_DEVICE_CHANGE 0x00fe
+#define WM_INPUT               0x00ff
+
+/* Keyboard messages */
+#define WM_KEYFIRST            0x0100
+#define WM_KEYDOWN             WM_KEYFIRST
+#define WM_KEYUP               0x0101
+#define WM_CHAR                0x0102
+#define WM_DEADCHAR            0x0103
+#define WM_SYSKEYDOWN          0x0104
+#define WM_SYSKEYUP            0x0105
+#define WM_SYSCHAR             0x0106
+#define WM_SYSDEADCHAR         0x0107
+#define WM_UNICHAR             0x0109
+#define WM_KEYLAST             WM_UNICHAR
+
+#define UNICODE_NOCHAR         0xffff
+
+/* Win32 4.0 messages for IME */
+#define WM_IME_STARTCOMPOSITION 0x010d
+#define WM_IME_ENDCOMPOSITION  0x010e
+#define WM_IME_COMPOSITION     0x010f
+#define WM_IME_KEYLAST         0x010f
+
+#define WM_INITDIALOG          0x0110
+#define WM_COMMAND             0x0111
+#define WM_SYSCOMMAND          0x0112
+#define WM_TIMER               0x0113
+
+/* Scroll messages */
+#define WM_HSCROLL             0x0114
+#define WM_VSCROLL             0x0115
+
+/* Menu messages */
+#define WM_INITMENU            0x0116
+#define WM_INITMENUPOPUP       0x0117
+#define WM_GESTURE             0x0119
+#define WM_GESTURENOTIFY       0x011A
+
+#define WM_MENUSELECT          0x011F
+#define WM_MENUCHAR            0x0120
+#define WM_ENTERIDLE           0x0121
+
+#define WM_MENURBUTTONUP       0x0122
+#define WM_MENUDRAG            0x0123
+#define WM_MENUGETOBJECT       0x0124
+#define WM_UNINITMENUPOPUP     0x0125
+#define WM_MENUCOMMAND         0x0126
+
+#define WM_CHANGEUISTATE       0x0127
+#define WM_UPDATEUISTATE       0x0128
+#define WM_QUERYUISTATE        0x0129
+
+/* UI flags for WM_*UISTATE */
+/* for low-order word of wparam */
+#define UIS_SET                1
+#define UIS_CLEAR              2
+#define UIS_INITIALIZE         3
+/* for hi-order word of wparam */
+#define UISF_HIDEFOCUS         0x1
+#define UISF_HIDEACCEL         0x2
+#define UISF_ACTIVE            0x4
+
+#define WM_LBTRACKPOINT        0x0131 /* DDK / Win16 */
+
+/* Win32 CTLCOLOR messages */
+#define WM_CTLCOLORMSGBOX      0x0132
+#define WM_CTLCOLOREDIT        0x0133
+#define WM_CTLCOLORLISTBOX     0x0134
+#define WM_CTLCOLORBTN         0x0135
+#define WM_CTLCOLORDLG         0x0136
+#define WM_CTLCOLORSCROLLBAR   0x0137
+#define WM_CTLCOLORSTATIC      0x0138
+
+#define MN_GETHMENU            0x01E1
+
+/* Mouse messages */
+#define WM_MOUSEFIRST          0x0200
+#define WM_MOUSEMOVE           WM_MOUSEFIRST
+#define WM_LBUTTONDOWN         0x0201
+#define WM_LBUTTONUP           0x0202
+#define WM_LBUTTONDBLCLK       0x0203
+#define WM_RBUTTONDOWN         0x0204
+#define WM_RBUTTONUP           0x0205
+#define WM_RBUTTONDBLCLK       0x0206
+#define WM_MBUTTONDOWN         0x0207
+#define WM_MBUTTONUP           0x0208
+#define WM_MBUTTONDBLCLK       0x0209
+#define WM_MOUSEWHEEL          0x020A
+#define WM_XBUTTONDOWN         0x020B
+#define WM_XBUTTONUP           0x020C
+#define WM_XBUTTONDBLCLK       0x020D
+#define WM_MOUSEHWHEEL         0x020E
+#define WM_MOUSELAST           WM_MOUSEHWHEEL
+
+/* Macros for the mouse messages */
+#define WHEEL_DELTA            120
+#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
+#define WHEEL_PAGESCROLL       (UINT_MAX)
+
+#define GET_KEYSTATE_WPARAM(wParam)     (LOWORD(wParam))
+#define GET_NCHITTEST_WPARAM(wParam)    ((short)LOWORD(wParam))
+#define GET_XBUTTON_WPARAM(wParam)      (HIWORD(wParam))
+#define XBUTTON1               0x0001
+#define XBUTTON2               0x0002
+
+#define WM_PARENTNOTIFY        0x0210
+#define WM_ENTERMENULOOP       0x0211
+#define WM_EXITMENULOOP        0x0212
+#define WM_NEXTMENU            0x0213
+
+/* Win32 4.0 messages */
+#define WM_SIZING              0x0214
+#define WM_CAPTURECHANGED      0x0215
+#define WM_MOVING              0x0216
+#define WM_POWERBROADCAST      0x0218
+#define WM_DEVICECHANGE        0x0219
+/* MDI messages */
+#define WM_MDICREATE           0x0220
+#define WM_MDIDESTROY          0x0221
+#define WM_MDIACTIVATE         0x0222
+#define WM_MDIRESTORE          0x0223
+#define WM_MDINEXT             0x0224
+#define WM_MDIMAXIMIZE         0x0225
+#define WM_MDITILE             0x0226
+#define WM_MDICASCADE          0x0227
+#define WM_MDIICONARRANGE      0x0228
+#define WM_MDIGETACTIVE        0x0229
+#define WM_MDISETMENU          0x0230
+#define WM_MDIREFRESHMENU      0x0234
+
+/* D&D messages */
+#define WM_DROPOBJECT          0x022A /* DDK / Win16 */
+#define WM_QUERYDROPOBJECT     0x022B /* DDK / Win16 */
+#define WM_BEGINDRAG           0x022C /* DDK / Win16 */
+#define WM_DRAGLOOP            0x022D /* DDK / Win16 */
+#define WM_DRAGSELECT          0x022E /* DDK / Win16 */
+#define WM_DRAGMOVE            0x022F /* DDK / Win16 */
+
+#define WM_ENTERSIZEMOVE       0x0231
+#define WM_EXITSIZEMOVE        0x0232
+#define WM_DROPFILES           0x0233
+
+#define WM_TOUCH               0x0240
+
+/* Win32 4.0 messages for IME */
+#define WM_IME_SETCONTEXT      0x0281
+#define WM_IME_NOTIFY          0x0282
+#define WM_IME_CONTROL         0x0283
+#define WM_IME_COMPOSITIONFULL 0x0284
+#define WM_IME_SELECT          0x0285
+#define WM_IME_CHAR            0x0286
+/* Win32 5.0 messages for IME */
+#define WM_IME_REQUEST         0x0288
+
+/* Win32 4.0 messages for IME */
+#define WM_IME_KEYDOWN         0x0290
+#define WM_IME_KEYUP           0x0291
+
+#define WM_NCMOUSEHOVER        0x02A0
+#define WM_MOUSEHOVER          0x02A1
+#define WM_MOUSELEAVE          0x02A3
+#define WM_NCMOUSELEAVE        0x02A2
+
+#define WM_WTSSESSION_CHANGE   0x02B1
+
+#define WM_TABLET_FIRST        0x02c0
+#define WM_TABLET_LAST         0x02df
+
+/* Clipboard command messages */
+#define WM_CUT                 0x0300
+#define WM_COPY                0x0301
+#define WM_PASTE               0x0302
+#define WM_CLEAR               0x0303
+#define WM_UNDO                0x0304
+
+/* Clipboard owner messages */
+#define WM_RENDERFORMAT        0x0305
+#define WM_RENDERALLFORMATS    0x0306
+#define WM_DESTROYCLIPBOARD    0x0307
+
+/* Clipboard viewer messages */
+#define WM_DRAWCLIPBOARD       0x0308
+#define WM_PAINTCLIPBOARD      0x0309
+#define WM_VSCROLLCLIPBOARD    0x030A
+#define WM_SIZECLIPBOARD       0x030B
+#define WM_ASKCBFORMATNAME     0x030C
+#define WM_CHANGECBCHAIN       0x030D
+#define WM_HSCROLLCLIPBOARD    0x030E
+
+#define WM_QUERYNEWPALETTE     0x030F
+#define WM_PALETTEISCHANGING   0x0310
+#define WM_PALETTECHANGED      0x0311
+#define WM_HOTKEY              0x0312
+
+#define WM_PRINT               0x0317
+#define WM_PRINTCLIENT         0x0318
+#define WM_APPCOMMAND          0x0319
+#define WM_THEMECHANGED        0x031A
+#define WM_CLIPBOARDUPDATE     0x031D
+
+#define WM_DWMCOMPOSITIONCHANGED 0x031E
+#define WM_DWMNCRENDERINGCHANGED 0x031F
+#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320
+#define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321
+#define WM_DWMSENDICONICTHUMBNAIL 0x0323
+#define WM_DWMSENDICONICLIVEPREVIEWBITMAP 0x0326
+
+#define WM_GETTITLEBARINFOEX   0x033F
+
+#define WM_HANDHELDFIRST       0x0358
+#define WM_HANDHELDLAST        0x035F
+
+#define WM_AFXFIRST            0x0360
+#define WM_AFXLAST             0x037F
+
+#define WM_PENWINFIRST         0x0380
+#define WM_PENWINLAST          0x038F
+
+#define WM_USER                0x0400
+
+#define WM_APP                 0x8000
+
+
+/* wParam for WM_SIZING message */
+#define WMSZ_LEFT              1
+#define WMSZ_RIGHT             2
+#define WMSZ_TOP               3
+#define WMSZ_TOPLEFT           4
+#define WMSZ_TOPRIGHT          5
+#define WMSZ_BOTTOM            6
+#define WMSZ_BOTTOMLEFT        7
+#define WMSZ_BOTTOMRIGHT       8
+
+/* WM_NCHITTEST return codes */
+#define HTERROR                (-2)
+#define HTTRANSPARENT          (-1)
+#define HTNOWHERE              0
+#define HTCLIENT               1
+#define HTCAPTION              2
+#define HTSYSMENU              3
+#define HTSIZE                 4
+#define HTGROWBOX              HTSIZE
+#define HTMENU                 5
+#define HTHSCROLL              6
+#define HTVSCROLL              7
+#define HTMINBUTTON            8
+#define HTREDUCE               HTMINBUTTON
+#define HTMAXBUTTON            9
+#define HTZOOM                 HTMAXBUTTON
+#define HTLEFT                 10
+#define HTSIZEFIRST            HTLEFT
+#define HTRIGHT                11
+#define HTTOP                  12
+#define HTTOPLEFT              13
+#define HTTOPRIGHT             14
+#define HTBOTTOM               15
+#define HTBOTTOMLEFT           16
+#define HTBOTTOMRIGHT          17
+#define HTSIZELAST             HTBOTTOMRIGHT
+#define HTBORDER               18
+#define HTOBJECT               19
+#define HTCLOSE                20
+#define HTHELP                 21
+
+/* SendMessageTimeout flags */
+#define SMTO_NORMAL            0x0000
+#define SMTO_BLOCK             0x0001
+#define SMTO_ABORTIFHUNG       0x0002
+#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
+#define SMTO_ERRORONEXIT       0x0020
+
+/* WM_MOUSEACTIVATE return values */
+#define MA_ACTIVATE            1
+#define MA_ACTIVATEANDEAT      2
+#define MA_NOACTIVATE          3
+#define MA_NOACTIVATEANDEAT    4
+
+/* WM_GETICON/WM_SETICON params values */
+#define ICON_SMALL             0
+#define ICON_BIG               1
+#define ICON_SMALL2            2
+
+/* WM_SIZE message wParam values */
+#define SIZE_RESTORED          0
+#define SIZE_MINIMIZED         1
+#define SIZE_MAXIMIZED         2
+#define SIZE_MAXSHOW           3
+#define SIZE_MAXHIDE           4
+#define SIZENORMAL             SIZE_RESTORED
+#define SIZEICONIC             SIZE_MINIMIZED
+#define SIZEFULLSCREEN         SIZE_MAXIMIZED
+#define SIZEZOOMSHOW           SIZE_MAXSHOW
+#define SIZEZOOMHIDE           SIZE_MAXHIDE
+
+/* WM_NCCALCSIZE return flags */
+#define WVR_ALIGNTOP           0x0010
+#define WVR_ALIGNLEFT          0x0020
+#define WVR_ALIGNBOTTOM        0x0040
+#define WVR_ALIGNRIGHT         0x0080
+#define WVR_HREDRAW            0x0100
+#define WVR_VREDRAW            0x0200
+#define WVR_REDRAW             (WVR_HREDRAW | WVR_VREDRAW)
+#define WVR_VALIDRECTS         0x0400
+
+/* Key status flags for mouse events */
+#ifndef NOKEYSTATES
+#define MK_LBUTTON             0x0001
+#define MK_RBUTTON             0x0002
+#define MK_SHIFT               0x0004
+#define MK_CONTROL             0x0008
+#define MK_MBUTTON             0x0010
+#define MK_XBUTTON1            0x0020
+#define MK_XBUTTON2            0x0040
+#endif /* NOKEYSTATES */
+
+#ifndef NOTRACKMOUSEEVENT
+#define TME_HOVER              0x00000001
+#define TME_LEAVE              0x00000002
+#define TME_NONCLIENT          0x00000010
+#define TME_QUERY              0x40000000
+#define TME_CANCEL             0x80000000
+#define HOVER_DEFAULT          0xFFFFFFFF
+#endif /* NOTRACKMOUSEEVENT */
+
+#endif /* NOWINMESSAGES */
+
+
+/*** Window Styles ***/
+#ifndef NOWINSTYLES
+#define WS_OVERLAPPED          __MSABI_LONG(0x00000000)
+#define WS_POPUP               __MSABI_LONG(0x80000000)
+#define WS_CHILD               __MSABI_LONG(0x40000000)
+#define WS_MINIMIZE            __MSABI_LONG(0x20000000)
+#define WS_VISIBLE             __MSABI_LONG(0x10000000)
+#define WS_DISABLED            __MSABI_LONG(0x08000000)
+#define WS_CLIPSIBLINGS        __MSABI_LONG(0x04000000)
+#define WS_CLIPCHILDREN        __MSABI_LONG(0x02000000)
+#define WS_MAXIMIZE            __MSABI_LONG(0x01000000)
+#define WS_BORDER              __MSABI_LONG(0x00800000)
+#define WS_DLGFRAME            __MSABI_LONG(0x00400000)
+#define WS_VSCROLL             __MSABI_LONG(0x00200000)
+#define WS_HSCROLL             __MSABI_LONG(0x00100000)
+#define WS_SYSMENU             __MSABI_LONG(0x00080000)
+#define WS_THICKFRAME          __MSABI_LONG(0x00040000)
+#define WS_GROUP               __MSABI_LONG(0x00020000)
+#define WS_TABSTOP             __MSABI_LONG(0x00010000)
+#define WS_MINIMIZEBOX         __MSABI_LONG(0x00020000)
+#define WS_MAXIMIZEBOX         __MSABI_LONG(0x00010000)
+#define WS_CAPTION             (WS_BORDER | WS_DLGFRAME)
+#define WS_TILED               WS_OVERLAPPED
+#define WS_ICONIC              WS_MINIMIZE
+#define WS_SIZEBOX             WS_THICKFRAME
+#define WS_OVERLAPPEDWINDOW    (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME| WS_MINIMIZEBOX | WS_MAXIMIZEBOX)
+#define WS_POPUPWINDOW         (WS_POPUP | WS_BORDER | WS_SYSMENU)
+#define WS_CHILDWINDOW         WS_CHILD
+#define WS_TILEDWINDOW         WS_OVERLAPPEDWINDOW
+#endif /* NOWINSTYLES */
+
+
+/*** Window extended styles ***/
+#ifndef NOWINSTYLES
+#define WS_EX_DLGMODALFRAME    __MSABI_LONG(0x00000001)
+#define WS_EX_DRAGDETECT       __MSABI_LONG(0x00000002) /* Undocumented */
+#define WS_EX_NOPARENTNOTIFY   __MSABI_LONG(0x00000004)
+#define WS_EX_TOPMOST          __MSABI_LONG(0x00000008)
+#define WS_EX_ACCEPTFILES      __MSABI_LONG(0x00000010)
+#define WS_EX_TRANSPARENT      __MSABI_LONG(0x00000020)
+#define WS_EX_MDICHILD         __MSABI_LONG(0x00000040)
+#define WS_EX_TOOLWINDOW       __MSABI_LONG(0x00000080)
+#define WS_EX_WINDOWEDGE       __MSABI_LONG(0x00000100)
+#define WS_EX_CLIENTEDGE       __MSABI_LONG(0x00000200)
+#define WS_EX_CONTEXTHELP      __MSABI_LONG(0x00000400)
+#define WS_EX_RIGHT            __MSABI_LONG(0x00001000)
+#define WS_EX_LEFT             __MSABI_LONG(0x00000000)
+#define WS_EX_RTLREADING       __MSABI_LONG(0x00002000)
+#define WS_EX_LTRREADING       __MSABI_LONG(0x00000000)
+#define WS_EX_LEFTSCROLLBAR    __MSABI_LONG(0x00004000)
+#define WS_EX_RIGHTSCROLLBAR   __MSABI_LONG(0x00000000)
+#define WS_EX_CONTROLPARENT    __MSABI_LONG(0x00010000)
+#define WS_EX_STATICEDGE       __MSABI_LONG(0x00020000)
+#define WS_EX_APPWINDOW        __MSABI_LONG(0x00040000)
+#define WS_EX_LAYERED          __MSABI_LONG(0x00080000)
+#define WS_EX_NOINHERITLAYOUT  __MSABI_LONG(0x00100000)
+#define WS_EX_LAYOUTRTL        __MSABI_LONG(0x00400000)
+#define WS_EX_COMPOSITED       __MSABI_LONG(0x02000000)
+#define WS_EX_NOACTIVATE       __MSABI_LONG(0x08000000)
+
+#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
+#define WS_EX_PALETTEWINDOW    (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
+#endif /* NOWINSTYLES */
+
+
+/*** Class styles ***/
+#ifndef NOWINSTYLES
+#define CS_VREDRAW             0x00000001
+#define CS_HREDRAW             0x00000002
+#define CS_KEYCVTWINDOW        0x00000004 /* DDK / Win16 */
+#define CS_DBLCLKS             0x00000008
+#define CS_OWNDC               0x00000020
+#define CS_CLASSDC             0x00000040
+#define CS_PARENTDC            0x00000080
+#define CS_NOKEYCVT            0x00000100 /* DDK / Win16 */
+#define CS_NOCLOSE             0x00000200
+#define CS_SAVEBITS            0x00000800
+#define CS_BYTEALIGNCLIENT     0x00001000
+#define CS_BYTEALIGNWINDOW     0x00002000
+#define CS_GLOBALCLASS         0x00004000
+#define CS_IME                 0x00010000
+#define CS_DROPSHADOW          0x00020000
+#endif /* NOWINSTYLES */
+
+
+/*** Predefined Clipboard Formats ***/
+#ifndef NOCLIPBOARD
+#define CF_TEXT                1
+#define CF_BITMAP              2
+#define CF_METAFILEPICT        3
+#define CF_SYLK                4
+#define CF_DIF                 5
+#define CF_TIFF                6
+#define CF_OEMTEXT             7
+#define CF_DIB                 8
+#define CF_PALETTE             9
+#define CF_PENDATA             10
+#define CF_RIFF                11
+#define CF_WAVE                12
+#define CF_UNICODETEXT         13
+#define CF_ENHMETAFILE         14
+#define CF_HDROP               15
+#define CF_LOCALE              16
+#define CF_DIBV5               17
+#define CF_MAX                 18
+
+#define CF_OWNERDISPLAY        0x0080
+#define CF_DSPTEXT             0x0081
+#define CF_DSPBITMAP           0x0082
+#define CF_DSPMETAFILEPICT     0x0083
+#define CF_DSPENHMETAFILE      0x008E
+
+/* "Private" formats don't get GlobalFree()'d */
+#define CF_PRIVATEFIRST        0x0200
+#define CF_PRIVATELAST         0x02FF
+
+/* "GDIOBJ" formats do get DeleteObject()'d */
+#define CF_GDIOBJFIRST         0x0300
+#define CF_GDIOBJLAST          0x03FF
+#endif /* NOCLIPBOARD */
+
+
+/*** Menu flags ***/
+#ifndef NOMENUS
+#define MF_INSERT              __MSABI_LONG(0x00000000)
+#define MF_CHANGE              __MSABI_LONG(0x00000080)
+#define MF_APPEND              __MSABI_LONG(0x00000100)
+#define MF_DELETE              __MSABI_LONG(0x00000200)
+#define MF_REMOVE              __MSABI_LONG(0x00001000)
+#define MF_END                 __MSABI_LONG(0x00000080)
+
+#define MF_ENABLED             __MSABI_LONG(0x00000000)
+#define MF_GRAYED              __MSABI_LONG(0x00000001)
+#define MF_DISABLED            __MSABI_LONG(0x00000002)
+#define MF_STRING              __MSABI_LONG(0x00000000)
+#define MF_BITMAP              __MSABI_LONG(0x00000004)
+#define MF_UNCHECKED           __MSABI_LONG(0x00000000)
+#define MF_CHECKED             __MSABI_LONG(0x00000008)
+#define MF_POPUP               __MSABI_LONG(0x00000010)
+#define MF_MENUBARBREAK        __MSABI_LONG(0x00000020)
+#define MF_MENUBREAK           __MSABI_LONG(0x00000040)
+#define MF_UNHILITE            __MSABI_LONG(0x00000000)
+#define MF_HILITE              __MSABI_LONG(0x00000080)
+#define MF_OWNERDRAW           __MSABI_LONG(0x00000100)
+#define MF_USECHECKBITMAPS     __MSABI_LONG(0x00000200)
+#define MF_BYCOMMAND           __MSABI_LONG(0x00000000)
+#define MF_BYPOSITION          __MSABI_LONG(0x00000400)
+#define MF_SEPARATOR           __MSABI_LONG(0x00000800)
+#define MF_DEFAULT             __MSABI_LONG(0x00001000)
+#define MF_SYSMENU             __MSABI_LONG(0x00002000)
+#define MF_HELP                __MSABI_LONG(0x00004000)
+#define MF_RIGHTJUSTIFY        __MSABI_LONG(0x00004000)
+#define MF_MOUSESELECT         __MSABI_LONG(0x00008000)
+
+/* Flags for extended menu item types */
+#define MFT_STRING             MF_STRING
+#define MFT_BITMAP             MF_BITMAP
+#define MFT_MENUBARBREAK       MF_MENUBARBREAK
+#define MFT_MENUBREAK          MF_MENUBREAK
+#define MFT_OWNERDRAW          MF_OWNERDRAW
+#define MFT_RADIOCHECK         __MSABI_LONG(0x00000200)
+#define MFT_SEPARATOR          MF_SEPARATOR
+#define MFT_RIGHTORDER         __MSABI_LONG(0x00002000)
+#define MFT_RIGHTJUSTIFY       MF_RIGHTJUSTIFY
+
+/* Flags for extended menu item states */
+#define MFS_GRAYED             __MSABI_LONG(0x00000003)
+#define MFS_DISABLED           MFS_GRAYED
+#define MFS_CHECKED            MF_CHECKED
+#define MFS_HILITE             MF_HILITE
+#define MFS_ENABLED            MF_ENABLED
+#define MFS_UNCHECKED          MF_UNCHECKED
+#define MFS_UNHILITE           MF_UNHILITE
+#define MFS_DEFAULT            MF_DEFAULT
+
+/* DDK / Win16 defines */
+#define MFS_MASK               __MSABI_LONG(0x0000108B)
+#define MFS_HOTTRACKDRAWN      __MSABI_LONG(0x10000000)
+#define MFS_CACHEDBMP          __MSABI_LONG(0x20000000)
+#define MFS_BOTTOMGAPDROP      __MSABI_LONG(0x40000000)
+#define MFS_TOPGAPDROP         __MSABI_LONG(0x80000000)
+#define MFS_GAPDROP            (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP)
+#endif /* NOMENUS */
+
+
+/*** WM_SYSCOMMAND parameters ***/
+#ifndef NOSYSCOMMANDS
+/* At least HP-UX defines it in /usr/include/sys/signal.h */
+# ifdef SC_SIZE
+#  undef SC_SIZE
+# endif
+#define SC_SIZE                0xf000
+#define SC_MOVE                0xf010
+#define SC_MINIMIZE            0xf020
+#define SC_MAXIMIZE            0xf030
+#define SC_NEXTWINDOW          0xf040
+#define SC_PREVWINDOW          0xf050
+#define SC_CLOSE               0xf060
+#define SC_VSCROLL             0xf070
+#define SC_HSCROLL             0xf080
+#define SC_MOUSEMENU           0xf090
+#define SC_KEYMENU             0xf100
+#define SC_ARRANGE             0xf110
+#define SC_RESTORE             0xf120
+#define SC_TASKLIST            0xf130
+#define SC_SCREENSAVE          0xf140
+#define SC_HOTKEY              0xf150
+
+/* Win32 4.0 */
+#define SC_DEFAULT             0xf160
+#define SC_MONITORPOWER        0xf170
+#define SC_CONTEXTHELP         0xf180
+#define SC_SEPARATOR           0xf00f
+
+#define GET_SC_WPARAM(wParam)  ((int)wParam & 0xfff0)
+#define SCF_ISSECURE           0x0001
+
+/* Obsolete names */
+#define SC_ICON               SC_MINIMIZE
+#define SC_ZOOM               SC_MAXIMIZE
+#endif /* NOSYSCOMMANDS */
+
+
+/*** OEM Resource Ordinal Numbers ***/
+#ifdef OEMRESOURCE
+#define OBM_RDRVERT            32559
+#define OBM_RDRHORZ            32660
+#define OBM_RDR2DIM            32661
+#define OBM_TRTYPE             32732 /* FIXME: Wine-only */
+#define OBM_LFARROWI           32734
+#define OBM_RGARROWI           32735
+#define OBM_DNARROWI           32736
+#define OBM_UPARROWI           32737
+#define OBM_COMBO              32738
+#define OBM_MNARROW            32739
+#define OBM_LFARROWD           32740
+#define OBM_RGARROWD           32741
+#define OBM_DNARROWD           32742
+#define OBM_UPARROWD           32743
+#define OBM_RESTORED           32744
+#define OBM_ZOOMD              32745
+#define OBM_REDUCED            32746
+#define OBM_RESTORE            32747
+#define OBM_ZOOM               32748
+#define OBM_REDUCE             32749
+#define OBM_LFARROW            32750
+#define OBM_RGARROW            32751
+#define OBM_DNARROW            32752
+#define OBM_UPARROW            32753
+#define OBM_CLOSE              32754
+#define OBM_OLD_RESTORE        32755
+#define OBM_OLD_ZOOM           32756
+#define OBM_OLD_REDUCE         32757
+#define OBM_BTNCORNERS         32758
+#define OBM_CHECKBOXES         32759
+#define OBM_CHECK              32760
+#define OBM_BTSIZE             32761
+#define OBM_OLD_LFARROW        32762
+#define OBM_OLD_RGARROW        32763
+#define OBM_OLD_DNARROW        32764
+#define OBM_OLD_UPARROW        32765
+#define OBM_SIZE               32766
+#define OBM_OLD_CLOSE          32767
+
+#define OCR_NORMAL             32512
+#define OCR_IBEAM              32513
+#define OCR_WAIT               32514
+#define OCR_CROSS              32515
+#define OCR_UP                 32516
+#define OCR_SIZE               32640
+#define OCR_ICON               32641
+#define OCR_SIZENWSE           32642
+#define OCR_SIZENESW           32643
+#define OCR_SIZEWE             32644
+#define OCR_SIZENS             32645
+#define OCR_SIZEALL            32646
+#define OCR_ICOCUR             32647
+#define OCR_NO                 32648
+#define OCR_HAND               32649
+#define OCR_APPSTARTING        32650
+#define OCR_HELP               32651 /* DDK / Win16 */
+#define OCR_RDRVERT            32652 /* DDK / Win16 */
+#define OCR_RDRHORZ            32653 /* DDK / Win16 */
+#define OCR_DRAGOBJECT         OCR_RDRHORZ /* FIXME: Wine-only */
+#define OCR_RDR2DIM            32654 /* DDK / Win16 */
+#define OCR_RDRNORTH           32655 /* DDK / Win16 */
+#define OCR_RDRSOUTH           32656 /* DDK / Win16 */
+#define OCR_RDRWEST            32657 /* DDK / Win16 */
+#define OCR_RDREAST            32658 /* DDK / Win16 */
+#define OCR_RDRNORTHWEST       32659 /* DDK / Win16 */
+#define OCR_RDRNORTHEAST       32660 /* DDK / Win16 */
+#define OCR_RDRSOUTHWEST       32661 /* DDK / Win16 */
+#define OCR_RDRSOUTHEAST       32662 /* DDK / Win16 */
+
+#define OIC_SAMPLE             32512
+#define OIC_HAND               32513
+#define OIC_ERROR              OIC_HAND
+#define OIC_QUES               32514
+#define OIC_BANG               32515
+#define OIC_WARNING            OIC_BANG
+#define OIC_NOTE               32516
+#define OIC_INFORMATION        OIC_NOTE
+#define OIC_WINLOGO            32517
+#define OIC_SHIELD             32518
+#endif /* OEMRESOURCE */
+
+
+/*** Predefined resources ***/
+#ifndef NOICONS
+#define IDI_APPLICATION        MAKEINTRESOURCE(32512)
+#define IDI_HAND               MAKEINTRESOURCE(32513)
+#define IDI_QUESTION           MAKEINTRESOURCE(32514)
+#define IDI_EXCLAMATION        MAKEINTRESOURCE(32515)
+#define IDI_ASTERISK           MAKEINTRESOURCE(32516)
+#define IDI_WINLOGO            MAKEINTRESOURCE(32517)
+#define IDI_SHIELD             MAKEINTRESOURCE(32518)
+
+#define IDI_WARNING            IDI_EXCLAMATION
+#define IDI_ERROR              IDI_HAND
+#define IDI_INFORMATION        IDI_ASTERISK
+#endif /* NOICONS */
+
+
+/*** Standard dialog button IDs ***/
+#define IDOK                   1
+#define IDCANCEL               2
+#define IDABORT                3
+#define IDRETRY                4
+#define IDIGNORE               5
+#define IDYES                  6
+#define IDNO                   7
+#define IDCLOSE                8
+#define IDHELP                 9
+#define IDTRYAGAIN             10
+#define IDCONTINUE             11
+#ifndef IDTIMEOUT
+#define IDTIMEOUT              32000
+#endif
+
+
+/*** Edit control styles ***/
+#ifndef NOWINSTYLES
+#define ES_LEFT                __MSABI_LONG(0x00000000)
+#define ES_CENTER              __MSABI_LONG(0x00000001)
+#define ES_RIGHT               __MSABI_LONG(0x00000002)
+#define ES_MULTILINE           __MSABI_LONG(0x00000004)
+#define ES_UPPERCASE           __MSABI_LONG(0x00000008)
+#define ES_LOWERCASE           __MSABI_LONG(0x00000010)
+#define ES_PASSWORD            __MSABI_LONG(0x00000020)
+#define ES_AUTOVSCROLL         __MSABI_LONG(0x00000040)
+#define ES_AUTOHSCROLL         __MSABI_LONG(0x00000080)
+#define ES_NOHIDESEL           __MSABI_LONG(0x00000100)
+#define ES_COMBO               __MSABI_LONG(0x00000200) /* Undocumented. Parent is a combobox */
+#define ES_OEMCONVERT          __MSABI_LONG(0x00000400)
+#define ES_READONLY            __MSABI_LONG(0x00000800)
+#define ES_WANTRETURN          __MSABI_LONG(0x00001000)
+#define ES_NUMBER              __MSABI_LONG(0x00002000)
+#endif /* NOWINSTYLES */
+
+
+/*** Edit control messages ***/
+#ifndef NOWINMESSAGES
+#define EM_GETSEL              0x00b0
+#define EM_SETSEL              0x00b1
+#define EM_GETRECT             0x00b2
+#define EM_SETRECT             0x00b3
+#define EM_SETRECTNP           0x00b4
+#define EM_SCROLL              0x00b5
+#define EM_LINESCROLL          0x00b6
+#define EM_SCROLLCARET         0x00b7
+#define EM_GETMODIFY           0x00b8
+#define EM_SETMODIFY           0x00b9
+#define EM_GETLINECOUNT        0x00ba
+#define EM_LINEINDEX           0x00bb
+#define EM_SETHANDLE           0x00bc
+#define EM_GETHANDLE           0x00bd
+#define EM_GETTHUMB            0x00be
+/* Unassigned 0x00bf and 0x00c0 */
+#define EM_LINELENGTH          0x00c1
+#define EM_REPLACESEL          0x00c2
+#define EM_SETFONT             0x00c3 /* DDK / Win16 */
+#define EM_GETLINE             0x00c4
+#define EM_LIMITTEXT           0x00c5
+#define EM_SETLIMITTEXT        EM_LIMITTEXT
+#define EM_CANUNDO             0x00c6
+#define EM_UNDO                0x00c7
+#define EM_FMTLINES            0x00c8
+#define EM_LINEFROMCHAR        0x00c9
+#define EM_SETWORDBREAK        0x00ca /* DDK / Win16 */
+#define EM_SETTABSTOPS         0x00cb
+#define EM_SETPASSWORDCHAR     0x00cc
+#define EM_EMPTYUNDOBUFFER     0x00cd
+#define EM_GETFIRSTVISIBLELINE 0x00ce
+#define EM_SETREADONLY         0x00cf
+#define EM_SETWORDBREAKPROC    0x00d0
+#define EM_GETWORDBREAKPROC    0x00d1
+#define EM_GETPASSWORDCHAR     0x00d2
+#define EM_SETMARGINS          0x00d3
+#define EM_GETMARGINS          0x00d4
+#define EM_GETLIMITTEXT        0x00d5
+#define EM_POSFROMCHAR         0x00d6
+#define EM_CHARFROMPOS         0x00d7
+#define EM_SETIMESTATUS        0x00d8
+#define EM_GETIMESTATUS        0x00d9
+#endif /* NOWINMESSAGES */
+
+
+/*** Button control styles ***/
+#define BS_PUSHBUTTON          __MSABI_LONG(0x00000000)
+#define BS_DEFPUSHBUTTON       __MSABI_LONG(0x00000001)
+#define BS_CHECKBOX            __MSABI_LONG(0x00000002)
+#define BS_AUTOCHECKBOX        __MSABI_LONG(0x00000003)
+#define BS_RADIOBUTTON         __MSABI_LONG(0x00000004)
+#define BS_3STATE              __MSABI_LONG(0x00000005)
+#define BS_AUTO3STATE          __MSABI_LONG(0x00000006)
+#define BS_GROUPBOX            __MSABI_LONG(0x00000007)
+#define BS_USERBUTTON          __MSABI_LONG(0x00000008)
+#define BS_AUTORADIOBUTTON     __MSABI_LONG(0x00000009)
+#define BS_PUSHBOX             __MSABI_LONG(0x0000000A)
+#define BS_OWNERDRAW           __MSABI_LONG(0x0000000B)
+#define BS_TYPEMASK            __MSABI_LONG(0x0000000F)
+#define BS_LEFTTEXT            __MSABI_LONG(0x00000020)
+#define BS_RIGHTBUTTON         BS_LEFTTEXT
+
+#define BS_TEXT                __MSABI_LONG(0x00000000)
+#define BS_ICON                __MSABI_LONG(0x00000040)
+#define BS_BITMAP              __MSABI_LONG(0x00000080)
+#define BS_LEFT                __MSABI_LONG(0x00000100)
+#define BS_RIGHT               __MSABI_LONG(0x00000200)
+#define BS_CENTER              __MSABI_LONG(0x00000300)
+#define BS_TOP                 __MSABI_LONG(0x00000400)
+#define BS_BOTTOM              __MSABI_LONG(0x00000800)
+#define BS_VCENTER             __MSABI_LONG(0x00000C00)
+#define BS_PUSHLIKE            __MSABI_LONG(0x00001000)
+#define BS_MULTILINE           __MSABI_LONG(0x00002000)
+#define BS_NOTIFY              __MSABI_LONG(0x00004000)
+#define BS_FLAT                __MSABI_LONG(0x00008000)
+
+
+/*** Button notification codes ***/
+#define BN_CLICKED             0
+#define BN_PAINT               1
+#define BN_HILITE              2
+#define BN_PUSHED              BN_HILITE
+#define BN_UNHILITE            3
+#define BN_UNPUSHED            BN_UNHILITE
+#define BN_DISABLE             4
+#define BN_DOUBLECLICKED       5
+#define BN_DBLCLK              BN_DOUBLECLICKED
+#define BN_SETFOCUS            6
+#define BN_KILLFOCUS           7
+
+
+/*** Win32 button control messages ***/
+#define BM_GETCHECK            0x00f0
+#define BM_SETCHECK            0x00f1
+#define BM_GETSTATE            0x00f2
+#define BM_SETSTATE            0x00f3
+#define BM_SETSTYLE            0x00f4
+#define BM_CLICK               0x00f5
+#define BM_GETIMAGE            0x00f6
+#define BM_SETIMAGE            0x00f7
+#define BM_SETDONTCLICK        0x00f8
+
+/* Button states */
+#define BST_UNCHECKED          0x0000
+#define BST_CHECKED            0x0001
+#define BST_INDETERMINATE      0x0002
+#define BST_PUSHED             0x0004
+#define BST_FOCUS              0x0008
+
+/*** Static Control Styles ***/
+#define SS_LEFT                __MSABI_LONG(0x00000000)
+#define SS_CENTER              __MSABI_LONG(0x00000001)
+#define SS_RIGHT               __MSABI_LONG(0x00000002)
+#define SS_ICON                __MSABI_LONG(0x00000003)
+#define SS_BLACKRECT           __MSABI_LONG(0x00000004)
+#define SS_GRAYRECT            __MSABI_LONG(0x00000005)
+#define SS_WHITERECT           __MSABI_LONG(0x00000006)
+#define SS_BLACKFRAME          __MSABI_LONG(0x00000007)
+#define SS_GRAYFRAME           __MSABI_LONG(0x00000008)
+#define SS_WHITEFRAME          __MSABI_LONG(0x00000009)
+#define SS_USERITEM            __MSABI_LONG(0x0000000A)
+#define SS_SIMPLE              __MSABI_LONG(0x0000000B)
+#define SS_LEFTNOWORDWRAP      __MSABI_LONG(0x0000000C)
+#define SS_OWNERDRAW           __MSABI_LONG(0x0000000D)
+#define SS_BITMAP              __MSABI_LONG(0x0000000E)
+#define SS_ENHMETAFILE         __MSABI_LONG(0x0000000F)
+#define SS_ETCHEDHORZ          __MSABI_LONG(0x00000010)
+#define SS_ETCHEDVERT          __MSABI_LONG(0x00000011)
+#define SS_ETCHEDFRAME         __MSABI_LONG(0x00000012)
+#define SS_TYPEMASK            __MSABI_LONG(0x0000001F)
+
+#define SS_REALSIZECONTROL     __MSABI_LONG(0x00000040)
+#define SS_NOPREFIX            __MSABI_LONG(0x00000080)
+#define SS_NOTIFY              __MSABI_LONG(0x00000100)
+#define SS_CENTERIMAGE         __MSABI_LONG(0x00000200)
+#define SS_RIGHTJUST           __MSABI_LONG(0x00000400)
+#define SS_REALSIZEIMAGE       __MSABI_LONG(0x00000800)
+#define SS_SUNKEN              __MSABI_LONG(0x00001000)
+#define SS_EDITCONTROL         __MSABI_LONG(0x00002000)
+#define SS_ENDELLIPSIS         __MSABI_LONG(0x00004000)
+#define SS_PATHELLIPSIS        __MSABI_LONG(0x00008000)
+#define SS_WORDELLIPSIS        __MSABI_LONG(0x0000C000)
+#define SS_ELLIPSISMASK        SS_WORDELLIPSIS
+
+
+/*** Dialog styles ***/
+#define DS_ABSALIGN            __MSABI_LONG(0x00000001)
+#define DS_SYSMODAL            __MSABI_LONG(0x00000002)
+#define DS_3DLOOK              __MSABI_LONG(0x00000004) /* win95 */
+#define DS_FIXEDSYS            __MSABI_LONG(0x00000008) /* win95 */
+#define DS_NOFAILCREATE        __MSABI_LONG(0x00000010) /* win95 */
+#define DS_LOCALEDIT           __MSABI_LONG(0x00000020)
+#define DS_SETFONT             __MSABI_LONG(0x00000040)
+#define DS_MODALFRAME          __MSABI_LONG(0x00000080)
+#define DS_NOIDLEMSG           __MSABI_LONG(0x00000100)
+#define DS_SETFOREGROUND       __MSABI_LONG(0x00000200) /* win95 */
+#define DS_CONTROL             __MSABI_LONG(0x00000400) /* win95 */
+#define DS_CENTER              __MSABI_LONG(0x00000800) /* win95 */
+#define DS_CENTERMOUSE         __MSABI_LONG(0x00001000) /* win95 */
+#define DS_CONTEXTHELP         __MSABI_LONG(0x00002000) /* win95 */
+#define DS_USEPIXELS           __MSABI_LONG(0x00008000)
+#define DS_SHELLFONT           (DS_SETFONT | DS_FIXEDSYS)
+
+
+/*** Listbox styles ***/
+#ifndef NOWINSTYLES
+#define LBS_NOTIFY             __MSABI_LONG(0x00000001)
+#define LBS_SORT               __MSABI_LONG(0x00000002)
+#define LBS_NOREDRAW           __MSABI_LONG(0x00000004)
+#define LBS_MULTIPLESEL        __MSABI_LONG(0x00000008)
+#define LBS_OWNERDRAWFIXED     __MSABI_LONG(0x00000010)
+#define LBS_OWNERDRAWVARIABLE  __MSABI_LONG(0x00000020)
+#define LBS_HASSTRINGS         __MSABI_LONG(0x00000040)
+#define LBS_USETABSTOPS        __MSABI_LONG(0x00000080)
+#define LBS_NOINTEGRALHEIGHT   __MSABI_LONG(0x00000100)
+#define LBS_MULTICOLUMN        __MSABI_LONG(0x00000200)
+#define LBS_WANTKEYBOARDINPUT  __MSABI_LONG(0x00000400)
+#define LBS_EXTENDEDSEL        __MSABI_LONG(0x00000800)
+#define LBS_DISABLENOSCROLL    __MSABI_LONG(0x00001000)
+#define LBS_NODATA             __MSABI_LONG(0x00002000)
+#define LBS_NOSEL              __MSABI_LONG(0x00004000)
+#define LBS_COMBOBOX           __MSABI_LONG(0x00008000)
+#define LBS_STANDARD           (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
+#endif /* NOWINSTYLES */
+
+/*** Combo box styles ***/
+#ifndef NOWINSTYLES
+#define CBS_SIMPLE             __MSABI_LONG(0x00000001)
+#define CBS_DROPDOWN           __MSABI_LONG(0x00000002)
+#define CBS_DROPDOWNLIST       __MSABI_LONG(0x00000003)
+#define CBS_OWNERDRAWFIXED     __MSABI_LONG(0x00000010)
+#define CBS_OWNERDRAWVARIABLE  __MSABI_LONG(0x00000020)
+#define CBS_AUTOHSCROLL        __MSABI_LONG(0x00000040)
+#define CBS_OEMCONVERT         __MSABI_LONG(0x00000080)
+#define CBS_SORT               __MSABI_LONG(0x00000100)
+#define CBS_HASSTRINGS         __MSABI_LONG(0x00000200)
+#define CBS_NOINTEGRALHEIGHT   __MSABI_LONG(0x00000400)
+#define CBS_DISABLENOSCROLL    __MSABI_LONG(0x00000800)
+
+#define CBS_UPPERCASE          __MSABI_LONG(0x00002000)
+#define CBS_LOWERCASE          __MSABI_LONG(0x00004000)
+#endif /* NOWINSTYLES */
+
+
+/*** Scrollbar styles ***/
+#ifndef NOWINSTYLES
+#define SBS_HORZ               __MSABI_LONG(0x00000000)
+#define SBS_VERT               __MSABI_LONG(0x00000001)
+#define SBS_TOPALIGN           __MSABI_LONG(0x00000002)
+#define SBS_LEFTALIGN          __MSABI_LONG(0x00000002)
+#define SBS_BOTTOMALIGN        __MSABI_LONG(0x00000004)
+#define SBS_RIGHTALIGN         __MSABI_LONG(0x00000004)
+#define SBS_SIZEBOXTOPLEFTALIGN __MSABI_LONG(0x00000002)
+#define SBS_SIZEBOXBOTTOMRIGHTALIGN __MSABI_LONG(0x00000004)
+#define SBS_SIZEBOX            __MSABI_LONG(0x00000008)
+#define SBS_SIZEGRIP           __MSABI_LONG(0x00000010)
+#endif /* NOWINSTYLES */
+
+/*** WinHelp commands ***/
+#define HELP_CONTEXT           __MSABI_LONG(0x00000001)
+#define HELP_QUIT              __MSABI_LONG(0x00000002)
+#define HELP_INDEX             __MSABI_LONG(0x00000003)
+#define HELP_CONTENTS          HELP_INDEX
+#define HELP_HELPONHELP        __MSABI_LONG(0x00000004)
+#define HELP_SETINDEX          __MSABI_LONG(0x00000005)
+#define HELP_SETCONTENTS       HELP_SETINDEX
+#define HELP_CONTEXTPOPUP      __MSABI_LONG(0x00000008)
+#define HELP_FORCEFILE         __MSABI_LONG(0x00000009)
+#define HELP_KEY               __MSABI_LONG(0x00000101)
+#define HELP_COMMAND           __MSABI_LONG(0x00000102)
+#define HELP_PARTIALKEY        __MSABI_LONG(0x00000105)
+#define HELP_MULTIKEY          __MSABI_LONG(0x00000201)
+#define HELP_SETWINPOS         __MSABI_LONG(0x00000203)
+
+#define HELP_CONTEXTMENU       0x000a
+#define HELP_FINDER            0x000b
+#define HELP_WM_HELP           0x000c
+#define HELP_SETPOPUP_POS      0x000d
+#define HELP_TCARD_DATA        0x0010
+#define HELP_TCARD_OTHER_CALLER 0x0011
+#define HELP_TCARD             0x8000
+
+#define IDH_NO_HELP            28440
+#define IDH_MISSING_CONTEXT    28441
+#define IDH_GENERIC_HELP_BUTTON 28442
+#define IDH_OK                 28443
+#define IDH_CANCEL             28444
+#define IDH_HELP               28445
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h
new file mode 100644
index 0000000..471be1f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h
@@ -0,0 +1,74 @@
+/* Definitions for the VERsion info library (VER.DLL)
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINVER_H
+#define __WINE_WINVER_H
+
+/* FIXME: #include <specstrings.h> */
+#include <verrsrc.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef RC_INVOKED
+
+/* function prototypes */
+
+DWORD       WINAPI VerFindFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT,LPSTR,PUINT);
+DWORD       WINAPI VerFindFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT,LPWSTR,PUINT);
+#define     VerFindFile WINELIB_NAME_AW(VerFindFile)
+DWORD       WINAPI VerInstallFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT);
+DWORD       WINAPI VerInstallFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT);
+#define     VerInstallFile WINELIB_NAME_AW(VerInstallFile)
+DWORD       WINAPI VerLanguageNameA(DWORD,LPSTR,DWORD);
+DWORD       WINAPI VerLanguageNameW(DWORD,LPWSTR,DWORD);
+#define     VerLanguageName WINELIB_NAME_AW(VerLanguageName)
+BOOL        WINAPI VerQueryValueA(LPCVOID,LPCSTR,LPVOID*,PUINT);
+BOOL        WINAPI VerQueryValueW(LPCVOID,LPCWSTR,LPVOID*,PUINT);
+#define     VerQueryValue WINELIB_NAME_AW(VerQueryValue)
+DWORD       WINAPI GetFileVersionInfoSizeA(LPCSTR,LPDWORD);
+DWORD       WINAPI GetFileVersionInfoSizeW(LPCWSTR,LPDWORD);
+#define     GetFileVersionInfoSize WINELIB_NAME_AW(GetFileVersionInfoSize)
+BOOL        WINAPI GetFileVersionInfoA(LPCSTR,DWORD,DWORD,LPVOID);
+BOOL        WINAPI GetFileVersionInfoW(LPCWSTR,DWORD,DWORD,LPVOID);
+#define     GetFileVersionInfo WINELIB_NAME_AW(GetFileVersionInfo)
+DWORD       WINAPI GetFileVersionInfoSizeExA(DWORD,LPCSTR,LPDWORD);
+DWORD       WINAPI GetFileVersionInfoSizeExW(DWORD,LPCWSTR,LPDWORD);
+#define     GetFileVersionInfoSizeEx WINELIB_NAME_AW(GetFileVersionInfoSizeEx)
+BOOL        WINAPI GetFileVersionInfoExA(DWORD,LPCSTR,DWORD,DWORD,LPVOID);
+BOOL        WINAPI GetFileVersionInfoExW(DWORD,LPCWSTR,DWORD,DWORD,LPVOID);
+#define     GetFileVersionInfoEx WINELIB_NAME_AW(GetFileVersionInfoEx)
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h
new file mode 100644
index 0000000..da86060
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WMISTR_
+#define _WMISTR_
+
+typedef enum
+{
+    WMI_GET_ALL_DATA = 0,
+    WMI_GET_SINGLE_INSTANCE = 1,
+    WMI_SET_SINGLE_INSTANCE = 2,
+    WMI_SET_SINGLE_ITEM = 3,
+    WMI_ENABLE_EVENTS = 4,
+    WMI_DISABLE_EVENTS = 5,
+    WMI_ENABLE_CONNECTION = 6,
+    WMI_DISABLE_CONNECTION = 7,
+    WMI_REGINFO = 8,
+    WMI_EXECUTE_METHOD = 9,
+} WMIDPREQUESTCODE;
+
+typedef struct _WNODE_HEADER
+{
+    ULONG BufferSize;
+    ULONG ProvicerId;
+    union
+    {
+        ULONG64 HistoricalContext;
+        struct
+        {
+            ULONG Version;
+            ULONG Linkage;
+        } DUMMYSTRUCTNAME;
+
+    } DUMMYUNIONNAME;
+    union
+    {
+        HANDLE KernelHandle;
+        LARGE_INTEGER TimeStamp;
+    } DUMMYUNIONNAME2;
+    GUID Guid;
+    ULONG ClientContext;
+    ULONG Flags;
+} WNODE_HEADER, *PWNODE_HEADER;
+
+#endif /* _WMISTR_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl
new file mode 100644
index 0000000..0aaae0c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2012 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+interface IWbemPath;
+interface IWbemPathKeyList;
+
+typedef [v1_enum] enum tag_WBEM_PATH_STATUS_FLAG
+{
+    WBEMPATH_INFO_ANON_LOCAL_MACHINE    = 0x1,
+    WBEMPATH_INFO_HAS_MACHINE_NAME      = 0x2,
+    WBEMPATH_INFO_IS_CLASS_REF          = 0x4,
+    WBEMPATH_INFO_IS_INST_REF           = 0x8,
+    WBEMPATH_INFO_HAS_SUBSCOPES         = 0x10,
+    WBEMPATH_INFO_IS_COMPOUND           = 0x20,
+    WBEMPATH_INFO_HAS_V2_REF_PATHS      = 0x40,
+    WBEMPATH_INFO_HAS_IMPLIED_KEY       = 0x80,
+    WBEMPATH_INFO_CONTAINS_SINGLETON    = 0x100,
+    WBEMPATH_INFO_V1_COMPLIANT          = 0x200,
+    WBEMPATH_INFO_V2_COMPLIANT          = 0x400,
+    WBEMPATH_INFO_CIM_COMPLIANT         = 0x800,
+    WBEMPATH_INFO_IS_SINGLETON          = 0x1000,
+    WBEMPATH_INFO_IS_PARENT             = 0x2000,
+    WBEMPATH_INFO_SERVER_NAMESPACE_ONLY = 0x4000,
+    WBEMPATH_INFO_NATIVE_PATH           = 0x8000,
+    WBEMPATH_INFO_WMI_PATH              = 0x10000,
+    WBEMPATH_INFO_PATH_HAD_SERVER       = 0x20000
+} tag_WBEM_PATH_STATUS_FLAG;
+
+typedef [v1_enum] enum tag_WBEM_PATH_CREATE_FLAG
+{
+    WBEMPATH_CREATE_ACCEPT_RELATIVE     = 0x1,
+    WBEMPATH_CREATE_ACCEPT_ABSOLUTE     = 0x2,
+    WBEMPATH_CREATE_ACCEPT_ALL          = 0x4,
+    WBEMPATH_TREAT_SINGLE_IDENT_AS_NS   = 0x8
+} tag_WBEM_PATH_CREATE_FLAG;
+
+typedef [v1_enum] enum tag_WBEM_GET_TEXT_FLAGS
+{
+    WBEMPATH_COMPRESSED                     = 0x1,
+    WBEMPATH_GET_RELATIVE_ONLY              = 0x2,
+    WBEMPATH_GET_SERVER_TOO                 = 0x4,
+    WBEMPATH_GET_SERVER_AND_NAMESPACE_ONLY  = 0x8,
+    WBEMPATH_GET_NAMESPACE_ONLY             = 0x10,
+    WBEMPATH_GET_ORIGINAL                   = 0x20
+} tag_WBEM_GET_TEXT_FLAGS;
+
+[
+    local,
+    object,
+    uuid(9ae62877-7544-4bb0-aa26-a13824659ed6)
+]
+interface IWbemPathKeyList : IUnknown
+{
+    HRESULT GetCount(
+        [out] ULONG *puKeyCount);
+
+    HRESULT SetKey(
+        [in,string] LPCWSTR wszName,
+        [in] ULONG uFlags,
+        [in] ULONG uCimType,
+        [in] LPVOID pKeyVal);
+
+    HRESULT SetKey2(
+        [in,string] LPCWSTR wszName,
+        [in] ULONG uFlags,
+        [in] ULONG uCimType,
+        [in] VARIANT *pKeyVal);
+
+    HRESULT GetKey(
+        [in] ULONG uKeyIx,
+        [in] ULONG uFlags,
+        [in,out] ULONG *puNameBufSize,
+        [in,out] LPWSTR pszKeyName,
+        [in,out] ULONG *puKeyValBufSize,
+        [in,out] LPVOID pKeyVal,
+        [out] ULONG *puApparentCimType);
+
+    HRESULT GetKey2(
+        [in] ULONG uKeyIx,
+        [in] ULONG uFlags,
+        [in,out] ULONG *puNameBufSize,
+        [in,out] LPWSTR pszKeyName,
+        [in,out] VARIANT *pKeyValue,
+        [out] ULONG *puApparentCimType);
+
+    HRESULT RemoveKey(
+        [in,string] LPCWSTR wszName,
+        [in] ULONG uFlags);
+
+    HRESULT RemoveAllKeys(
+        [in] ULONG uFlags);
+
+    HRESULT MakeSingleton([in] boolean bSet);
+
+    HRESULT GetInfo(
+        [in] ULONG uRequestedInfo,
+        [out] ULONGLONG *puResponse);
+
+    HRESULT GetText(
+        [in] long lFlags,
+        [in,out] ULONG *puBuffLength,
+        [in,out,string] LPWSTR pszText);
+};
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetClassName")
+cpp_quote("#endif")
+
+[
+    local,
+    object,
+    uuid(3bc15af2-736c-477e-9e51-238af8667dcc)
+]
+interface IWbemPath : IUnknown
+{
+    HRESULT SetText(
+        [in] ULONG uMode,
+        [in] LPCWSTR pszPath);
+
+    HRESULT GetText(
+        [in] long lFlags,
+        [in,out] ULONG *puBuffLength,
+        [in,out,string] LPWSTR pszText);
+
+    HRESULT GetInfo(
+        [in] ULONG uRequestedInfo,
+        [out] ULONGLONG *puResponse);
+
+    HRESULT SetServer(
+        [in,string] LPCWSTR Name);
+
+    HRESULT GetServer(
+        [in,out] ULONG *puNameBufLength,
+        [in,out,string] LPWSTR pName);
+
+    HRESULT GetNamespaceCount(
+        [out] ULONG *puCount);
+
+    HRESULT SetNamespaceAt(
+        [in] ULONG uIndex,
+        [in,string] LPCWSTR pszName);
+
+    HRESULT GetNamespaceAt(
+        [in] ULONG uIndex,
+        [in,out] ULONG *puNameBufLength,
+        [in,out,string] LPWSTR pName);
+
+    HRESULT RemoveNamespaceAt(
+        [in] ULONG uIndex);
+
+    HRESULT RemoveAllNamespaces();
+
+    HRESULT GetScopeCount(
+        [out] ULONG *puCount);
+
+    HRESULT SetScope(
+        [in] ULONG uIndex,
+        [in] LPWSTR pszClass);
+
+    HRESULT SetScopeFromText(
+        [in] ULONG uIndex,
+        [in] LPWSTR pszText);
+
+    HRESULT GetScope(
+        [in] ULONG uIndex,
+        [in,out] ULONG *puClassNameBufSize,
+        [in,out] LPWSTR pszClass,
+        [out] IWbemPathKeyList **pKeyList);
+
+    HRESULT GetScopeAsText(
+        [in] ULONG uIndex,
+        [in,out] ULONG *puTextBufSize,
+        [in,out] LPWSTR pszText);
+
+    HRESULT RemoveScope(
+        [in] ULONG uIndex);
+
+    HRESULT RemoveAllScopes();
+
+    HRESULT SetClassName(
+        [in,string] LPCWSTR Name);
+
+    HRESULT GetClassName(
+        [in,out] ULONG *puBuffLength,
+        [in,out,string] LPWSTR pszName);
+
+    HRESULT GetKeyList(
+        [out] IWbemPathKeyList **pOut);
+
+    HRESULT CreateClassPart(
+        [in] long lFlags,
+        [in,string] LPCWSTR Name);
+
+    HRESULT DeleteClassPart(
+        [in] long lFlags);
+
+    BOOL IsRelative(
+        [in,string] LPWSTR wszMachine,
+        [in,string] LPWSTR wszNamespace);
+
+    BOOL IsRelativeOrChild(
+        [in,string] LPWSTR wszMachine,
+        [in,string] LPWSTR wszNamespace,
+        [in] long lFlags);
+
+    BOOL IsLocal(
+        [in,string] LPCWSTR wszMachine);
+
+    BOOL IsSameClassName(
+        [in,string] LPCWSTR wszClass);
+};
+
+[
+    uuid(cf4cc405-e2c5-4ddd-b3ce-5e7582d8c9fa)
+]
+coclass WbemDefPath
+{
+    interface IWbemPath;
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl
new file mode 100644
index 0000000..92ef97e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012 André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+[
+    object,
+    uuid(e1cd3524-03d7-11d2-9eed-006097d2d7cf),
+    pointer_default(unique),
+    local
+]
+interface INSSBuffer : IUnknown
+{
+    HRESULT GetLength(
+        [out] DWORD *pdwLength);
+    HRESULT SetLength(
+        [in] DWORD dwLength);
+
+    HRESULT GetMaxLength(
+        [out] DWORD *pdwLength);
+
+    HRESULT GetBuffer(
+        [out] BYTE **ppdwBuffer);
+
+    HRESULT GetBufferAndLength(
+        [out] BYTE **ppdwBuffer,
+        [out] DWORD *pdwLength);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl
new file mode 100644
index 0000000..59abe14
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl
@@ -0,0 +1,395 @@
+/*
+ * Copyright 2012 André Hentschel
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "wmsbuffer.idl";
+/* import "drmexternals.idl"; */
+
+typedef unsigned __int64 QWORD;
+
+typedef struct _WMMediaType
+{
+    GUID majortype;
+    GUID subtype;
+    BOOL bFixedSizeSamples;
+    BOOL bTemporalCompression;
+    ULONG lSampleSize;
+    GUID formattype;
+    IUnknown *pUnk;
+    ULONG cbFormat;
+    [size_is(cbFormat)] BYTE *pbFormat;
+} WM_MEDIA_TYPE;
+
+typedef enum WMT_ATTR_DATATYPE
+{
+    WMT_TYPE_DWORD      = 0,
+    WMT_TYPE_STRING     = 1,
+    WMT_TYPE_BINARY     = 2,
+    WMT_TYPE_BOOL       = 3,
+    WMT_TYPE_QWORD      = 4,
+    WMT_TYPE_WORD       = 5,
+    WMT_TYPE_GUID       = 6,
+} WMT_ATTR_DATATYPE;
+
+typedef enum WMT_STATUS
+{
+    WMT_ERROR                       =  0,
+    WMT_OPENED                      =  1,
+    WMT_BUFFERING_START             =  2,
+    WMT_BUFFERING_STOP              =  3,
+    WMT_EOF                         =  4,
+    WMT_END_OF_FILE                 =  4,
+    WMT_END_OF_SEGMENT              =  5,
+    WMT_END_OF_STREAMING            =  6,
+    WMT_LOCATING                    =  7,
+    WMT_CONNECTING                  =  8,
+    WMT_NO_RIGHTS                   =  9,
+    WMT_MISSING_CODEC               = 10,
+    WMT_STARTED                     = 11,
+    WMT_STOPPED                     = 12,
+    WMT_CLOSED                      = 13,
+    WMT_STRIDING                    = 14,
+    WMT_TIMER                       = 15,
+    WMT_INDEX_PROGRESS              = 16,
+    WMT_SAVEAS_START                = 17,
+    WMT_SAVEAS_STOP                 = 18,
+    WMT_NEW_SOURCEFLAGS             = 19,
+    WMT_NEW_METADATA                = 20,
+    WMT_BACKUPRESTORE_BEGIN         = 21,
+    WMT_SOURCE_SWITCH               = 22,
+    WMT_ACQUIRE_LICENSE             = 23,
+    WMT_INDIVIDUALIZE               = 24,
+    WMT_NEEDS_INDIVIDUALIZATION     = 25,
+    WMT_NO_RIGHTS_EX                = 26,
+    WMT_BACKUPRESTORE_END           = 27,
+    WMT_BACKUPRESTORE_CONNECTING    = 28,
+    WMT_BACKUPRESTORE_DISCONNECTING = 29,
+    WMT_ERROR_WITHURL               = 30,
+    WMT_RESTRICTED_LICENSE          = 31,
+    WMT_CLIENT_CONNECT              = 32,
+    WMT_CLIENT_DISCONNECT           = 33,
+    WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34,
+    WMT_RECONNECT_START             = 35,
+    WMT_RECONNECT_END               = 36,
+    WMT_CLIENT_CONNECT_EX           = 37,
+    WMT_CLIENT_DISCONNECT_EX        = 38,
+    WMT_SET_FEC_SPAN                = 39,
+    WMT_PREROLL_READY               = 40,
+    WMT_PREROLL_COMPLETE            = 41,
+    WMT_CLIENT_PROPERTIES           = 42,
+    WMT_LICENSEURL_SIGNATURE_STATE  = 43,
+    WMT_INIT_PLAYLIST_BURN          = 44,
+    WMT_TRANSCRYPTOR_INIT           = 45,
+    WMT_TRANSCRYPTOR_SEEKED         = 46,
+    WMT_TRANSCRYPTOR_READ           = 47,
+    WMT_TRANSCRYPTOR_CLOSED         = 48,
+    WMT_PROXIMITY_RESULT            = 49,
+    WMT_PROXIMITY_COMPLETED         = 50,
+    WMT_CONTENT_ENABLER             = 51
+} WMT_STATUS;
+
+typedef enum WMT_STREAM_SELECTION
+{
+    WMT_OFF               = 0,
+    WMT_CLEANPOINT_ONLY   = 1,
+    WMT_ON                = 2,
+} WMT_STREAM_SELECTION;
+
+
+[
+    object,
+    uuid(6d7cdc70-9888-11d3-8edc-00c04f6109cf),
+    pointer_default(unique),
+    local
+]
+interface IWMStatusCallback : IUnknown
+{
+    HRESULT OnStatus(
+        [in] WMT_STATUS Status,
+        [in] HRESULT hr,
+        [in] WMT_ATTR_DATATYPE dwType,
+        [in] BYTE *pValue,
+        [in] void *pvContext);
+};
+
+[
+    object,
+    uuid(96406bd8-2b2b-11d3-b36b-00c04f6108ff),
+    pointer_default(unique),
+    local
+]
+interface IWMReaderCallback : IWMStatusCallback
+{
+    HRESULT OnSample(
+        [in] DWORD dwOutputNum,
+        [in] QWORD cnsSampleTime,
+        [in] QWORD cnsSampleDuration,
+        [in] DWORD dwFlags,
+        [in] INSSBuffer *pSample,
+        [in] void *pvContext);
+};
+
+[
+    object,
+    uuid(96406bce-2b2b-11d3-b36b-00c04f6108ff),
+    pointer_default(unique),
+    local
+]
+interface IWMMediaProps : IUnknown
+{
+    HRESULT GetType(
+        [out] GUID *pguidType);
+
+    HRESULT GetMediaType(
+        [out] WM_MEDIA_TYPE *pType,
+        [in, out] DWORD *pcbType);
+
+    HRESULT SetMediaType(
+        [in] WM_MEDIA_TYPE *pType);
+};
+
+[
+    object,
+    uuid(96406bd7-2b2b-11d3-b36b-00c04f6108ff),
+    pointer_default(unique),
+    local
+]
+interface IWMOutputMediaProps : IWMMediaProps
+{
+    HRESULT GetStreamGroupName(
+        [out, size_is(*pcchName)] WCHAR *pwszName,
+        [in, out] WORD *pcchName);
+
+    HRESULT GetConnectionName(
+        [out, size_is(*pcchName)] WCHAR *pwszName,
+        [in, out] WORD *pcchName);
+};
+
+[
+    object,
+    uuid(96406bd9-2b2b-11d3-b36b-00c04f6108ff),
+    pointer_default(unique),
+    local
+]
+interface IWMMetadataEditor : IUnknown
+{
+    HRESULT Open(
+        [in] const WCHAR *pwszFilename);
+
+    HRESULT Close();
+
+    HRESULT Flush();
+};
+
+[
+    object,
+    uuid(96406bd6-2b2b-11d3-b36b-00c04f6108ff),
+    pointer_default(unique),
+    local
+]
+interface IWMReader : IUnknown
+{
+    HRESULT Open(
+        [in] const WCHAR *pwszURL,
+        [in] IWMReaderCallback *pCallback,
+        [in] void *pvContext);
+
+    HRESULT Close();
+
+    HRESULT GetOutputCount(
+        [out] DWORD *pcOutputs);
+
+    HRESULT GetOutputProps(
+        [in] DWORD dwOutputNum,
+        [out] IWMOutputMediaProps **ppOutput);
+
+    HRESULT SetOutputProps(
+        [in] DWORD dwOutputNum,
+        [in] IWMOutputMediaProps *pOutput);
+
+    HRESULT GetOutputFormatCount(
+        [in] DWORD dwOutputNumber,
+        [out] DWORD *pcFormats);
+
+    HRESULT GetOutputFormat(
+        [in] DWORD dwOutputNumber,
+        [in] DWORD dwFormatNumber,
+        [out] IWMOutputMediaProps** ppProps);
+
+    HRESULT Start(
+        [in] QWORD cnsStart,
+        [in] QWORD cnsDuration,
+        [in] float fRate,
+        [in] void *pvContext);
+
+    HRESULT Stop();
+
+    HRESULT Pause();
+
+    HRESULT Resume();
+};
+
+[
+    object,
+    uuid(9397f121-7705-4dc9-b049-98b698188414),
+    pointer_default( unique ),
+    local
+]
+interface IWMSyncReader : IUnknown
+{
+    HRESULT Open(
+        [in] const WCHAR *pwszFilename);
+
+    HRESULT Close();
+
+    HRESULT SetRange(
+        [in] QWORD cnsStartTime,
+        [in] LONGLONG cnsDuration);
+
+    HRESULT SetRangeByFrame(
+        [in] WORD wStreamNum,
+        [in] QWORD qwFrameNumber,
+        [in] LONGLONG cFramesToRead);
+
+    HRESULT GetNextSample(
+        [in] WORD wStreamNum,
+        [out] INSSBuffer **ppSample,
+        [out] QWORD *pcnsSampleTime,
+        [out] QWORD *pcnsDuration,
+        [out] DWORD *pdwFlags,
+        [out] DWORD *pdwOutputNum,
+        [out] WORD *pwStreamNum);
+
+    HRESULT SetStreamsSelected(
+        [in] WORD cStreamCount,
+        [in] WORD *pwStreamNumbers,
+        [in] WMT_STREAM_SELECTION *pSelections);
+
+    HRESULT GetStreamSelected(
+        [in] WORD wStreamNum,
+        [out] WMT_STREAM_SELECTION *pSelection);
+
+    HRESULT SetReadStreamSamples(
+        [in] WORD wStreamNum,
+        [in] BOOL fCompressed);
+
+    HRESULT GetReadStreamSamples(
+        [in] WORD wStreamNum,
+        [out] BOOL *pfCompressed);
+
+    HRESULT GetOutputSetting(
+        [in] DWORD dwOutputNum,
+        [in] LPCWSTR pszName,
+        [out] WMT_ATTR_DATATYPE *pType,
+        [out, size_is(*pcbLength)] BYTE *pValue,
+        [in, out] WORD *pcbLength);
+
+    HRESULT SetOutputSetting(
+        [in] DWORD dwOutputNum,
+        [in] LPCWSTR pszName,
+        [in] WMT_ATTR_DATATYPE Type,
+        [in, size_is(cbLength)] const BYTE *pValue,
+        [in] WORD cbLength);
+
+    HRESULT GetOutputCount(
+        [out] DWORD *pcOutputs);
+
+    HRESULT GetOutputProps(
+        [in] DWORD dwOutputNum,
+        [out] IWMOutputMediaProps **ppOutput);
+
+    HRESULT SetOutputProps(
+        [in] DWORD dwOutputNum,
+        [in] IWMOutputMediaProps *pOutput);
+
+    HRESULT GetOutputFormatCount(
+        [in] DWORD dwOutputNum,
+        [out] DWORD *pcFormats);
+
+    HRESULT GetOutputFormat(
+        [in] DWORD dwOutputNum,
+        [in] DWORD dwFormatNum,
+        [out] IWMOutputMediaProps **ppProps);
+
+    HRESULT GetOutputNumberForStream(
+        [in] WORD wStreamNum,
+        [out] DWORD *pdwOutputNum);
+
+    HRESULT GetStreamNumberForOutput(
+        [in] DWORD dwOutputNum,
+        [out] WORD *pwStreamNum);
+
+    HRESULT GetMaxOutputSampleSize(
+        [in] DWORD dwOutput,
+        [out] DWORD *pcbMax);
+
+    HRESULT GetMaxStreamSampleSize(
+        [in] WORD wStream,
+        [out] DWORD *pcbMax);
+
+    HRESULT OpenStream(
+        [in] IStream *pStream);
+};
+
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_Base,   0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIATYPE_Video,     0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB1,   0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB4,   0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB8,   0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB565, 0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB555, 0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB24,  0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB32,  0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_I420,   0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_IYUV,   0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YV12,   0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YUY2,   0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_P422,   0x32323450,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_UYVY,   0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVYU,   0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVU9,   0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_VIDEOIMAGE, 0x1d4a45f2,0xe5f6,0x4b44,0x83,0x88,0xf0,0xae,0x5c,0x0e,0x0c,0x37);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP43,   0x3334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP4S,   0x5334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_M4S2,   0x3253344d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV1,   0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV2,   0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS1,   0x3153534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea);")
+cpp_quote("EXTERN_GUID(WMMEDIATYPE_Audio,     0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_PCM,    0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_DRM,    0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudioV9,        0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudio_Lossless, 0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS2,   0x3253534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP1,  0x0000000a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP2,  0x0000000b,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV3,   0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVP,   0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVP2,   0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVA,   0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVC1,   0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h
new file mode 100644
index 0000000..7b2e1ff
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WNASPI32_H__
+#define __WNASPI32_H__
+
+/* This file should be 100% source compatible according to MS docs and
+ * Adaptec docs */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* #ifdef __cplusplus */
+
+/* SCSI Miscellaneous Stuff */
+#define SENSE_LEN			14
+#define SRB_DIR_SCSI			0x00
+#define SRB_POSTING			0x01
+#define SRB_ENABLE_RESIDUAL_COUNT	0x04
+#define SRB_DIR_IN			0x08
+#define SRB_DIR_OUT			0x10
+
+/* ASPI Command Definitions */
+#define SC_HA_INQUIRY			0x00
+#define SC_GET_DEV_TYPE			0x01
+#define SC_EXEC_SCSI_CMD		0x02
+#define SC_ABORT_SRB			0x03
+#define SC_RESET_DEV			0x04
+#define SC_SET_HA_PARMS			0x05
+#define SC_GET_DISK_INFO		0x06
+
+/* SRB status codes */
+#define SS_PENDING			0x00
+#define SS_COMP				0x01
+#define SS_ABORTED			0x02
+#define SS_ABORT_FAIL			0x03
+#define SS_ERR				0x04
+
+#define SS_INVALID_CMD			0x80
+#define SS_INVALID_HA			0x81
+#define SS_NO_DEVICE			0x82
+
+#define SS_INVALID_SRB			0xE0
+#define SS_OLD_MANAGER			0xE1
+#define SS_BUFFER_ALIGN			0xE1 /* Win32 */
+#define SS_ILLEGAL_MODE			0xE2
+#define SS_NO_ASPI			0xE3
+#define SS_FAILED_INIT			0xE4
+#define SS_ASPI_IS_BUSY			0xE5
+#define SS_BUFFER_TO_BIG		0xE6
+#define SS_MISMATCHED_COMPONENTS	0xE7 /* DLLs/EXE version mismatch */
+#define SS_NO_ADAPTERS			0xE8
+#define SS_INSUFFICIENT_RESOURCES	0xE9
+#define SS_ASPI_IS_SHUTDOWN		0xEA
+#define SS_BAD_INSTALL			0xEB
+
+
+/* Host status codes */
+#define HASTAT_OK			0x00
+#define HASTAT_SEL_TO			0x11
+#define HASTAT_DO_DU			0x12
+#define HASTAT_BUS_FREE			0x13
+#define HASTAT_PHASE_ERR		0x14
+
+#define HASTAT_TIMEOUT			0x09
+#define HASTAT_COMMAND_TIMEOUT		0x0B
+#define HASTAT_MESSAGE_REJECT		0x0D
+#define HASTAT_BUS_RESET		0x0E
+#define HASTAT_PARITY_ERROR		0x0F
+#define HASTAT_REQUEST_SENSE_FAILED	0x10
+
+
+/* Additional definitions */
+/* SCSI Miscellaneous Stuff */
+#define SRB_EVENT_NOTIFY		0x40
+#define RESIDUAL_COUNT_SUPPORTED	0x02
+#define MAX_SRB_TIMEOUT			1080001u
+#define DEFAULT_SRB_TIMEOUT		1080001u
+
+/* These are defined by MS but not adaptec */
+#define SRB_DATA_SG_LIST		0x02
+#define WM_ASPIPOST			0x4D42
+
+
+/* ASPI Command Definitions */
+#define SC_RESCAN_SCSI_BUS		0x07
+#define SC_GETSET_TIMEOUTS		0x08
+
+/* SRB Status.. MS defined */
+#define SS_SECURITY_VIOLATION		0xE2 /* Replaces SS_INVALID_MODE */
+/*** END DEFS */
+
+#include <pshpack1.h>
+
+/* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */
+typedef struct tagSRB32_HaInquiry {
+ BYTE  SRB_Cmd;                 /* 00 ASPI command code = SC_HA_INQUIRY */
+ BYTE  SRB_Status;              /* 01 ASPI command status byte */
+ BYTE  SRB_HaId;                /* 02 ASPI host adapter number */
+ BYTE  SRB_Flags;               /* 03 ASPI request flags */
+ DWORD  SRB_Hdr_Rsvd;           /* 04 Reserved, MUST = 0 */
+ BYTE  HA_Count;                /* 08 Number of host adapters present */
+ BYTE  HA_SCSI_ID;              /* 09 SCSI ID of host adapter */
+ BYTE  HA_ManagerId[16];        /* 0A String describing the manager */
+ BYTE  HA_Identifier[16];       /* 1A String describing the host adapter */
+ BYTE  HA_Unique[16];           /* 2A Host Adapter Unique parameters */
+ WORD  HA_Rsvd1;
+} SRB_HaInquiry, *PSRB_HaInquiry;
+
+/* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */
+typedef struct tagSRB32_GDEVBlock {
+ BYTE  SRB_Cmd;                 /* 00 ASPI command code = SC_GET_DEV_TYPE */
+ BYTE  SRB_Status;              /* 01 ASPI command status byte */
+ BYTE  SRB_HaId;                /* 02 ASPI host adapter number */
+ BYTE  SRB_Flags;               /* 03 Reserved */
+ DWORD  SRB_Hdr_Rsvd;           /* 04 Reserved */
+ BYTE  SRB_Target;              /* 08 Target's SCSI ID */
+ BYTE  SRB_Lun;                 /* 09 Target's LUN number */
+ BYTE  SRB_DeviceType;          /* 0A Target's peripheral device type */
+ BYTE  SRB_Rsvd1;
+} SRB_GDEVBlock, *PSRB_GDEVBlock;
+
+/* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */
+typedef struct tagSRB32_ExecSCSICmd {
+  BYTE        SRB_Cmd;            /* 00 ASPI command code = SC_EXEC_SCSI_CMD */
+  BYTE        SRB_Status;         /* 01 ASPI command status byte */
+  BYTE        SRB_HaId;           /* 02 ASPI host adapter number */
+  BYTE        SRB_Flags;          /* 03 ASPI request flags */
+  DWORD       SRB_Hdr_Rsvd;       /* 04 Reserved */
+  BYTE        SRB_Target;         /* 08 Target's SCSI ID */
+  BYTE        SRB_Lun;            /* 09 Target's LUN number */
+  WORD        SRB_Rsvd1;          /* 0A Reserved for Alignment */
+  DWORD       SRB_BufLen;         /* 0C Data Allocation Length */
+  BYTE        *SRB_BufPointer;    /* 10 Data Buffer Point */
+  BYTE        SRB_SenseLen;       /* 14 Sense Allocation Length */
+  BYTE        SRB_CDBLen;         /* 15 CDB Length */
+  BYTE        SRB_HaStat;         /* 16 Host Adapter Status */
+  BYTE        SRB_TargStat;       /* 17 Target Status */
+  void        (*SRB_PostProc)( struct tagSRB32_ExecSCSICmd * ); /* 18 Post routine */
+  void        *SRB_Rsvd2;         /* 1C Reserved */
+  BYTE        SRB_Rsvd3[16];      /* 20 Reserved for expansion */
+  BYTE        CDBByte[16];        /* 30 SCSI CDB */
+  BYTE        SenseArea[SENSE_LEN+2];  /* 40 Request sense buffer - var length */
+} SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
+
+/* SRB - ABORT AN ARB - SC_ABORT_SRB */
+typedef struct tagSRB32_Abort {
+  BYTE        SRB_Cmd;            /* 00 ASPI command code = SC_ABORT_SRB */
+  BYTE        SRB_Status;         /* 01 ASPI command status byte */
+  BYTE        SRB_HaId;           /* 02 ASPI host adapter number */
+  BYTE        SRB_Flags;          /* 03 Reserved */
+  DWORD       SRB_Hdr_Rsvd;       /* 04 Reserved, MUST = 0 */
+  VOID       *SRB_ToAbort;        /* 08 Pointer to SRB to abort */
+} SRB_Abort, *PSRB_Abort;
+
+/* SRB - BUS DEVICE RESET - SC_RESET_DEV */
+typedef struct tagSRB32_BusDeviceReset {
+ BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_RESET_DEV */
+ BYTE         SRB_Status;               /* 01 ASPI command status byte */
+ BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */
+ BYTE         SRB_Flags;                /* 03 Reserved */
+ DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */
+ BYTE         SRB_Target;               /* 08 Target's SCSI ID */
+ BYTE         SRB_Lun;                  /* 09 Target's LUN number */
+ BYTE         SRB_Rsvd1[12];            /* 0A Reserved for Alignment */
+ BYTE         SRB_HaStat;               /* 16 Host Adapter Status */
+ BYTE         SRB_TargStat;             /* 17 Target Status */
+ void         (*SRB_PostProc)( struct tagSRB32_BusDeviceReset * ); /* 18 Post routine */
+ void         *SRB_Rsvd2;               /* 1c Reserved */
+ BYTE         SRB_Rsvd3[32];            /* 20 Reserved */
+} SRB_BusDeviceReset, *PSRB_BusDeviceReset;
+
+/* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */
+typedef struct tagSRB32_GetDiskInfo {
+ BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_RESET_DEV */
+ BYTE         SRB_Status;               /* 01 ASPI command status byte */
+ BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */
+ BYTE         SRB_Flags;                /* 03 Reserved */
+ DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */
+ BYTE         SRB_Target;               /* 08 Target's SCSI ID */
+ BYTE         SRB_Lun;                  /* 09 Target's LUN number */
+ BYTE         SRB_DriveFlags;           /* 0A Driver flags */
+ BYTE         SRB_Int13HDriveInfo;      /* 0B Host Adapter Status */
+ BYTE         SRB_Heads;                /* 0C Preferred number of heads trans */
+ BYTE         SRB_Sectors;              /* 0D Preferred number of sectors trans */
+ BYTE         SRB_Rsvd1[10];            /* 0E Reserved */
+} SRB_GetDiskInfo, *PSRB_GetDiskInfo;
+
+/* SRB header */
+typedef struct tagSRB32_Header {
+ BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_RESET_DEV */
+ BYTE         SRB_Status;               /* 01 ASPI command status byte */
+ BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */
+ BYTE         SRB_Flags;                /* 03 Reserved */
+ DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */
+} SRB_Header, *PSRB_Header;
+
+typedef union tagSRB32 {
+    SRB_Header          common;
+    SRB_HaInquiry       inquiry;
+    SRB_ExecSCSICmd     cmd;
+    SRB_Abort           abort;
+    SRB_BusDeviceReset  reset;
+    SRB_GDEVBlock       devtype;
+    SRB_GetDiskInfo	diskinfo;
+} SRB, *PSRB, *LPSRB;
+
+typedef struct tagASPI32BUFF {
+    LPBYTE AB_BufPointer;	/* pointer to buffer */
+    DWORD AB_BufLen;		/* length of buffer */
+    DWORD AB_ZeroFill;		/* set to 1 if zeroing */
+    DWORD AB_Reserved;		/* 0 */
+} ASPI32BUFF, *PASPI32BUFF;
+
+#include <poppack.h>
+
+/* Prototypes */
+extern DWORD __cdecl SendASPI32Command (PSRB);
+extern DWORD __cdecl GetASPI32SupportInfo (void);
+extern DWORD __cdecl GetASPI32DLLVersion(void);
+extern BOOL  __cdecl GetASPI32Buffer(PASPI32BUFF pab);
+
+#ifdef __cplusplus
+}
+#endif /* #ifdef __cplusplus */
+
+#endif /* __WNASPI32_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h
new file mode 100644
index 0000000..0022737
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h
@@ -0,0 +1,167 @@
+/*
+ * WOW Generic Thunk API
+ *
+ * Copyright (C) 1999 Ulrich Weigand
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WOWNT32_H_
+#define _WOWNT32_H_
+
+#ifdef __WINESRC__
+/* under Wine use the kernel functions directly so we don't have to import wow32 */
+#define WOWCallback16 K32WOWCallback16
+#define WOWCallback16Ex K32WOWCallback16Ex
+#define WOWDirectedYield16 K32WOWDirectedYield16
+#define WOWGetVDMPointer K32WOWGetVDMPointer
+#define WOWGetVDMPointerFix K32WOWGetVDMPointerFix
+#define WOWGetVDMPointerUnfix K32WOWGetVDMPointerUnfix
+#define WOWGlobalAlloc16 K32WOWGlobalAlloc16
+#define WOWGlobalAllocLock16 K32WOWGlobalAllocLock16
+#define WOWGlobalFree16 K32WOWGlobalFree16
+#define WOWGlobalLock16 K32WOWGlobalLock16
+#define WOWGlobalLockSize16 K32WOWGlobalLockSize16
+#define WOWGlobalUnlock16 K32WOWGlobalUnlock16
+#define WOWGlobalUnlockFree16 K32WOWGlobalUnlockFree16
+#define WOWHandle16 K32WOWHandle16
+#define WOWHandle32 K32WOWHandle32
+#define WOWYield16 K32WOWYield16
+#endif
+
+LPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL);
+LPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL);
+VOID   WINAPI WOWGetVDMPointerUnfix(DWORD);
+
+WORD   WINAPI WOWGlobalAlloc16(WORD,DWORD);
+WORD   WINAPI WOWGlobalFree16(WORD);
+DWORD  WINAPI WOWGlobalLock16(WORD);
+BOOL   WINAPI WOWGlobalUnlock16(WORD);
+DWORD  WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *);
+WORD   WINAPI WOWGlobalUnlockFree16(DWORD);
+DWORD  WINAPI WOWGlobalLockSize16(WORD,PDWORD);
+
+VOID   WINAPI WOWYield16(VOID);
+VOID   WINAPI WOWDirectedYield16(WORD);
+
+typedef enum
+{
+    WOW_TYPE_HWND,
+    WOW_TYPE_HMENU,
+    WOW_TYPE_HDWP,
+    WOW_TYPE_HDROP,
+    WOW_TYPE_HDC,
+    WOW_TYPE_HFONT,
+    WOW_TYPE_HMETAFILE,
+    WOW_TYPE_HRGN,
+    WOW_TYPE_HBITMAP,
+    WOW_TYPE_HBRUSH,
+    WOW_TYPE_HPALETTE,
+    WOW_TYPE_HPEN,
+    WOW_TYPE_HACCEL,
+    WOW_TYPE_HTASK,
+    WOW_TYPE_FULLHWND
+
+} WOW_HANDLE_TYPE;
+
+HANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);
+WORD   WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
+
+#ifdef __WINESRC__
+/* under Wine we use optimized versions where we can */
+#define HWND_32(h16)      ((HWND)      (ULONG_PTR)(h16))
+#define HMENU_32(h16)     ((HMENU)     (ULONG_PTR)(h16))
+#define HDWP_32(h16)      ((HDWP)      (ULONG_PTR)(h16))
+#define HDROP_32(h16)     ((HDROP)     (ULONG_PTR)(h16))
+#define HDC_32(h16)       ((HDC)       (ULONG_PTR)(h16))
+#define HFONT_32(h16)     ((HFONT)     (ULONG_PTR)(h16))
+#define HRGN_32(h16)      ((HRGN)      (ULONG_PTR)(h16))
+#define HBITMAP_32(h16)   ((HBITMAP)   (ULONG_PTR)(h16))
+#define HBRUSH_32(h16)    ((HBRUSH)    (ULONG_PTR)(h16))
+#define HPALETTE_32(h16)  ((HPALETTE)  (ULONG_PTR)(h16))
+#define HPEN_32(h16)      ((HPEN)      (ULONG_PTR)(h16))
+#define HACCEL_32(h16)    ((HACCEL)    (ULONG_PTR)(h16))
+
+#define HWND_16(h32)      (LOWORD(h32))
+#define HMENU_16(h32)     (LOWORD(h32))
+#define HDWP_16(h32)      (LOWORD(h32))
+#define HDROP_16(h32)     (LOWORD(h32))
+#define HDC_16(h32)       (LOWORD(h32))
+#define HFONT_16(h32)     (LOWORD(h32))
+#define HRGN_16(h32)      (LOWORD(h32))
+#define HBITMAP_16(h32)   (LOWORD(h32))
+#define HBRUSH_16(h32)    (LOWORD(h32))
+#define HPALETTE_16(h32)  (LOWORD(h32))
+#define HPEN_16(h32)      (LOWORD(h32))
+#define HACCEL_16(h32)    (LOWORD(h32))
+
+#else  /* __WINESRC__ */
+
+#define HWND_32(h16)      ((HWND)      (WOWHandle32(h16, WOW_TYPE_HWND)))
+#define HMENU_32(h16)     ((HMENU)     (WOWHandle32(h16, WOW_TYPE_HMENU)))
+#define HDWP_32(h16)      ((HDWP)      (WOWHandle32(h16, WOW_TYPE_HDWP)))
+#define HDROP_32(h16)     ((HDROP)     (WOWHandle32(h16, WOW_TYPE_HDROP)))
+#define HDC_32(h16)       ((HDC)       (WOWHandle32(h16, WOW_TYPE_HDC)))
+#define HFONT_32(h16)     ((HFONT)     (WOWHandle32(h16, WOW_TYPE_HFONT)))
+#define HRGN_32(h16)      ((HRGN)      (WOWHandle32(h16, WOW_TYPE_HRGN)))
+#define HBITMAP_32(h16)   ((HBITMAP)   (WOWHandle32(h16, WOW_TYPE_HBITMAP)))
+#define HBRUSH_32(h16)    ((HBRUSH)    (WOWHandle32(h16, WOW_TYPE_HBRUSH)))
+#define HPALETTE_32(h16)  ((HPALETTE)  (WOWHandle32(h16, WOW_TYPE_HPALETTE)))
+#define HPEN_32(h16)      ((HPEN)      (WOWHandle32(h16, WOW_TYPE_HPEN)))
+#define HACCEL_32(h16)    ((HACCEL)    (WOWHandle32(h16, WOW_TYPE_HACCEL)))
+
+#define HWND_16(h32)      (WOWHandle16(h32, WOW_TYPE_HWND))
+#define HMENU_16(h32)     (WOWHandle16(h32, WOW_TYPE_HMENU))
+#define HDWP_16(h32)      (WOWHandle16(h32, WOW_TYPE_HDWP))
+#define HDROP_16(h32)     (WOWHandle16(h32, WOW_TYPE_HDROP))
+#define HDC_16(h32)       (WOWHandle16(h32, WOW_TYPE_HDC))
+#define HFONT_16(h32)     (WOWHandle16(h32, WOW_TYPE_HFONT))
+#define HRGN_16(h32)      (WOWHandle16(h32, WOW_TYPE_HRGN))
+#define HBITMAP_16(h32)   (WOWHandle16(h32, WOW_TYPE_HBITMAP))
+#define HBRUSH_16(h32)    (WOWHandle16(h32, WOW_TYPE_HBRUSH))
+#define HPALETTE_16(h32)  (WOWHandle16(h32, WOW_TYPE_HPALETTE))
+#define HPEN_16(h32)      (WOWHandle16(h32, WOW_TYPE_HPEN))
+#define HACCEL_16(h32)    (WOWHandle16(h32, WOW_TYPE_HACCEL))
+
+#endif  /* __WINESRC__ */
+
+#define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE)))
+#define HTASK_32(h16)     ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK)))
+#define FULLHWND_32(h16)  ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND)))
+
+#define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE))
+#define HTASK_16(h32)     (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK))
+
+#define WCB16_PASCAL     0
+#define WCB16_CDECL      1
+#define WCB16_MAX_CBARGS 16
+
+/* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */
+#define WCB16_REGS       2
+#define WCB16_REGS_LONG  4  /* function uses 32-bit lret */
+
+DWORD WINAPI WOWCallback16(DWORD,DWORD);
+BOOL  WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);
+
+#endif /* _WOWNT32_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl
new file mode 100644
index 0000000..99d5fef
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2011 Jacek Caban 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+    uuid(8fdf6ca1-0189-47e4-b670-1a8a4636e340),
+    object
+]
+interface IWPCSettings : IUnknown
+{
+    HRESULT IsLoggingRequired(
+            [out] BOOL *pfRequired);
+
+    HRESULT GetLastSettingsChangeTime(
+            [out] SYSTEMTIME *pTime) ;
+
+    HRESULT GetRestrictions(
+            [out] DWORD *pdwRestrictions);
+}
+
+[
+    uuid(95e87780-e158-489e-b452-bbb850790715),
+    object
+]
+interface IWPCGamesSettings : IWPCSettings
+{
+    HRESULT IsBlocked(
+            [in] GUID guidAppID,
+            [out] DWORD *pdwReasons);
+}
+
+[
+    uuid(ffccbdb8-0992-4c30-b0f1-1cbb09c240aa),
+    object
+]
+interface IWPCWebSettings : IWPCSettings
+{
+    typedef enum tagWPCFLAG_WEB_SETTING {
+        WPCFLAG_WEB_SETTING_NOTBLOCKED = 0,
+        WPCFLAG_WEB_SETTING_DOWNLOADSBLOCKED = 1
+    } WPCFLAG_WEB_SETTING;
+
+    HRESULT GetSettings(
+            [out] DWORD *pdwSettings);
+
+    HRESULT RequestURLOverride(
+            [in] HWND hWnd,
+            [in] LPCWSTR pcszURL,
+            [in] DWORD cURLs,
+            [in] LPCWSTR *ppcszSubURLs,
+            [out] BOOL *pfChanged);
+}
+
+typedef enum tagWPCFLAG_VISIBILITY {
+    WPCFLAG_WPC_VISIBLE = 0,
+    WPCFLAG_WPC_HIDDEN = 1
+} WPCFLAG_VISIBILITY;
+
+[
+    uuid(4FF40A0F-3F3B-4d7c-A41B-4F39D7B44D05),
+    object
+]
+interface IWindowsParentalControlsCore : IUnknown
+{
+    HRESULT GetVisibility(
+            [out] WPCFLAG_VISIBILITY *peVisibility) ;
+
+    HRESULT GetUserSettings(
+            [in] LPCWSTR pcszSID,
+            [out] IWPCSettings **ppSettings);
+
+    HRESULT GetWebSettings(
+            [in] LPCWSTR pcszSID,
+            [out] IWPCWebSettings **ppSettings);
+
+    HRESULT GetWebFilterInfo(
+            [out] GUID *pguidID,
+            [in] LPWSTR *ppszName);
+}
+
+[
+    uuid(4ff40a0f-3f3b-4d7c-a41b-4f39d7b44d05),
+    object
+]
+interface IWindowsParentalControls : IWindowsParentalControlsCore
+{
+    HRESULT GetGamesSettings(
+            [in] LPCWSTR pcszSID,
+            [out] IWPCGamesSettings **ppSettings) ;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h
new file mode 100644
index 0000000..21c11a2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2009 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WS2DEF_
+#define _WS2DEF_
+
+#include <inaddr.h>
+
+#ifdef USE_WS_PREFIX
+#define WS(x)    WS_##x
+#else
+#define WS(x)    x
+#endif
+
+#ifndef __CSADDR_DEFINED__
+#define __CSADDR_DEFINED__
+
+typedef struct _SOCKET_ADDRESS {
+        LPSOCKADDR      lpSockaddr;
+        INT             iSockaddrLength;
+} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
+
+typedef struct _CSADDR_INFO {
+        SOCKET_ADDRESS  LocalAddr;
+        SOCKET_ADDRESS  RemoteAddr;
+        INT             iSocketType;
+        INT             iProtocol;
+} CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO;
+#endif
+
+#ifdef USE_WS_PREFIX
+#define WS__SS_MAXSIZE 128
+#define WS__SS_ALIGNSIZE (sizeof(__int64))
+#define WS__SS_PAD1SIZE (WS__SS_ALIGNSIZE - sizeof(short))
+#define WS__SS_PAD2SIZE (WS__SS_MAXSIZE - 2 * WS__SS_ALIGNSIZE)
+#else
+#define _SS_MAXSIZE 128
+#define _SS_ALIGNSIZE (sizeof(__int64))
+#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short))
+#define _SS_PAD2SIZE (_SS_MAXSIZE - 2 * _SS_ALIGNSIZE)
+#endif
+
+typedef struct WS(sockaddr_storage) {
+        short ss_family;
+        char __ss_pad1[WS(_SS_PAD1SIZE)];
+        __int64 DECLSPEC_ALIGN(8) __ss_align;
+        char __ss_pad2[WS(_SS_PAD2SIZE)];
+} SOCKADDR_STORAGE, *PSOCKADDR_STORAGE, *LPSOCKADDR_STORAGE;
+
+/*socket address list */
+typedef struct _SOCKET_ADDRESS_LIST {
+        INT             iAddressCount;
+        SOCKET_ADDRESS  Address[1];
+} SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST;
+
+typedef enum {
+    ScopeLevelInterface    = 1,
+    ScopeLevelLink         = 2,
+    ScopeLevelSubnet       = 3,
+    ScopeLevelAdmin        = 4,
+    ScopeLevelSite         = 5,
+    ScopeLevelOrganization = 8,
+    ScopeLevelGlobal       = 14
+} SCOPE_LEVEL;
+
+typedef struct _WSABUF
+{
+    ULONG len;
+    CHAR* buf;
+} WSABUF, *LPWSABUF;
+
+typedef struct _WSAMSG {
+    LPSOCKADDR  name;
+    INT         namelen;
+    LPWSABUF    lpBuffers;
+    DWORD       dwBufferCount;
+    WSABUF      Control;
+    DWORD       dwFlags;
+} WSAMSG, *PWSAMSG, *LPWSAMSG;
+
+/*
+ * Macros for retrieving control message data returned by WSARecvMsg()
+ */
+#define WSA_CMSG_DATA(cmsg)     ((UCHAR*)((WSACMSGHDR*)(cmsg)+1))
+#define WSA_CMSG_FIRSTHDR(mhdr) ((mhdr)->Control.len >= sizeof(WSACMSGHDR) ? (WSACMSGHDR *) (mhdr)->Control.buf : (WSACMSGHDR *) 0)
+#define WSA_CMSG_ALIGN(len)     (((len) + sizeof(SIZE_T) - 1) & ~(sizeof(SIZE_T) - 1))
+/*
+ * Next Header: If the response is too short (or the next message in the response
+ * is too short) then return NULL, otherwise return the next control message.
+ */
+#define WSA_CMSG_NXTHDR(mhdr,cmsg) \
+        (!(cmsg) ? WSA_CMSG_FIRSTHDR(mhdr) : \
+         ((mhdr)->Control.len < sizeof(WSACMSGHDR) ? NULL : \
+         (((unsigned char*)(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))+1) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \
+          (((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)+WSA_CMSG_ALIGN(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))->cmsg_len) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \
+           (WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len))))))
+
+#endif /* _WS2DEF_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h
new file mode 100644
index 0000000..dbb832d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2009 Robert Shearman
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WS2IPDEF__
+#define __WS2IPDEF__
+
+#include <in6addr.h>
+
+#ifdef USE_WS_PREFIX
+#define WS(x)    WS_##x
+#else
+#define WS(x)    x
+#endif
+
+typedef struct WS(sockaddr_in6_old)
+{
+   SHORT    sin6_family;
+   USHORT   sin6_port;
+   ULONG    sin6_flowinfo;
+   IN6_ADDR sin6_addr;
+} SOCKADDR_IN6_OLD,*PSOCKADDR_IN6_OLD, *LPSOCKADDR_IN6_OLD;
+
+typedef union sockaddr_gen
+{
+   struct WS(sockaddr) Address;
+   struct WS(sockaddr_in)  AddressIn;
+   struct WS(sockaddr_in6_old) AddressIn6;
+} WS(sockaddr_gen);
+
+/* Structure to keep interface specific information */
+typedef struct _INTERFACE_INFO
+{
+    ULONG             iiFlags;             /* Interface flags */
+    WS(sockaddr_gen)  iiAddress;           /* Interface address */
+    WS(sockaddr_gen)  iiBroadcastAddress;  /* Broadcast address */
+    WS(sockaddr_gen)  iiNetmask;           /* Network mask */
+} INTERFACE_INFO, * LPINTERFACE_INFO;
+
+/* Possible flags for the  iiFlags - bitmask  */
+#ifndef USE_WS_PREFIX
+#define IFF_UP                0x00000001 /* Interface is up */
+#define IFF_BROADCAST         0x00000002 /* Broadcast is  supported */
+#define IFF_LOOPBACK          0x00000004 /* this is loopback interface */
+#define IFF_POINTTOPOINT      0x00000008 /* this is point-to-point interface */
+#define IFF_MULTICAST         0x00000010 /* multicast is supported */
+#else
+#define WS_IFF_UP             0x00000001 /* Interface is up */
+#define WS_IFF_BROADCAST      0x00000002 /* Broadcast is  supported */
+#define WS_IFF_LOOPBACK       0x00000004 /* this is loopback interface */
+#define WS_IFF_POINTTOPOINT   0x00000008 /* this is point-to-point interface */
+#define WS_IFF_MULTICAST      0x00000010 /* multicast is supported */
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define IP_OPTIONS                      1
+#define IP_HDRINCL                      2
+#define IP_TOS                          3
+#define IP_TTL                          4
+#define IP_MULTICAST_IF                 9
+#define IP_MULTICAST_TTL                10
+#define IP_MULTICAST_LOOP               11
+#define IP_ADD_MEMBERSHIP               12
+#define IP_DROP_MEMBERSHIP              13
+#define IP_DONTFRAGMENT                 14
+#define IP_ADD_SOURCE_MEMBERSHIP        15
+#define IP_DROP_SOURCE_MEMBERSHIP       16
+#define IP_BLOCK_SOURCE                 17
+#define IP_UNBLOCK_SOURCE               18
+#define IP_PKTINFO                      19
+#define IP_HOPLIMIT                     21
+#define IP_RECEIVE_BROADCAST            22
+#define IP_RECVIF                       24
+#define IP_RECVDSTADDR                  25
+#define IP_IFLIST                       28
+#define IP_ADD_IFLIST                   29
+#define IP_DEL_IFLIST                   30
+#define IP_UNICAST_IF                   31
+#define IP_RTHDR                        32
+#define IP_RECVRTHDR                    38
+#else
+#define WS_IP_OPTIONS                   1
+#define WS_IP_HDRINCL                   2
+#define WS_IP_TOS                       3
+#define WS_IP_TTL                       4
+#define WS_IP_MULTICAST_IF              9
+#define WS_IP_MULTICAST_TTL             10
+#define WS_IP_MULTICAST_LOOP            11
+#define WS_IP_ADD_MEMBERSHIP            12
+#define WS_IP_DROP_MEMBERSHIP           13
+#define WS_IP_DONTFRAGMENT              14
+#define WS_IP_ADD_SOURCE_MEMBERSHIP     15
+#define WS_IP_DROP_SOURCE_MEMBERSHIP    16
+#define WS_IP_BLOCK_SOURCE              17
+#define WS_IP_UNBLOCK_SOURCE            18
+#define WS_IP_PKTINFO                   19
+#define WS_IP_HOPLIMIT                  21
+#define WS_IP_RECEIVE_BROADCAST         22
+#define WS_IP_RECVIF                    24
+#define WS_IP_RECVDSTADDR               25
+#define WS_IP_IFLIST                    28
+#define WS_IP_ADD_IFLIST                29
+#define WS_IP_DEL_IFLIST                30
+#define WS_IP_UNICAST_IF                31
+#define WS_IP_RTHDR                     32
+#define WS_IP_RECVRTHDR                 38
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(sockaddr_in6)
+{
+   SHORT    sin6_family;
+   USHORT   sin6_port;
+   ULONG    sin6_flowinfo;
+   IN6_ADDR sin6_addr;
+   ULONG    sin6_scope_id;
+} SOCKADDR_IN6,*PSOCKADDR_IN6, *LPSOCKADDR_IN6;
+
+/*
+ * Multicast group information
+ */
+
+typedef struct WS(ip_mreq)
+{
+    struct WS(in_addr) imr_multiaddr;
+    struct WS(in_addr) imr_interface;
+} WS(IP_MREQ), *WS(PIP_MREQ);
+
+typedef struct WS(ip_mreq_source) {
+    struct WS(in_addr) imr_multiaddr;
+    struct WS(in_addr) imr_sourceaddr;
+    struct WS(in_addr) imr_interface;
+} WS(IP_MREQ_SOURCE), *WS(PIP_MREQ_SOURCE);
+
+typedef struct WS(ip_msfilter) {
+    struct WS(in_addr) imsf_multiaddr;
+    struct WS(in_addr) imsf_interface;
+    ULONG              imsf_fmode;
+    ULONG              imsf_numsrc;
+    struct WS(in_addr) imsf_slist[1];
+} WS(IP_MSFILTER), *WS(PIP_MSFILTER);
+
+typedef struct WS(in_pktinfo) {
+    IN_ADDR ipi_addr;
+    UINT    ipi_ifindex;
+} IN_PKTINFO, *PIN_PKTINFO;
+
+#ifndef USE_WS_PREFIX
+#define IPV6_OPTIONS                    1
+#define IPV6_HDRINCL                    2
+#define IPV6_UNICAST_HOPS               4
+#define IPV6_MULTICAST_IF               9
+#define IPV6_MULTICAST_HOPS             10
+#define IPV6_MULTICAST_LOOP             11
+#define IPV6_ADD_MEMBERSHIP             12
+#define IPV6_JOIN_GROUP                 IPV6_ADD_MEMBERSHIP
+#define IPV6_DROP_MEMBERSHIP            13
+#define IPV6_LEAVE_GROUP                IPV6_DROP_MEMBERSHIP
+#define IPV6_DONTFRAG                   14
+#define IPV6_PKTINFO                    19
+#define IPV6_HOPLIMIT                   21
+#define IPV6_PROTECTION_LEVEL           23
+#define IPV6_RECVIF                     24
+#define IPV6_RECVDSTADDR                25
+#define IPV6_CHECKSUM                   26
+#define IPV6_V6ONLY                     27
+#define IPV6_IFLIST                     28
+#define IPV6_ADD_IFLIST                 29
+#define IPV6_DEL_IFLIST                 30
+#define IPV6_UNICAST_IF                 31
+#define IPV6_RTHDR                      32
+#define IPV6_RECVRTHDR                  38
+#else
+#define WS_IPV6_OPTIONS                 1
+#define WS_IPV6_HDRINCL                 2
+#define WS_IPV6_UNICAST_HOPS            4
+#define WS_IPV6_MULTICAST_IF            9
+#define WS_IPV6_MULTICAST_HOPS          10
+#define WS_IPV6_MULTICAST_LOOP          11
+#define WS_IPV6_ADD_MEMBERSHIP          12
+#define WS_IPV6_DROP_MEMBERSHIP         13
+#define WS_IPV6_LEAVE_GROUP             WS_IPV6_DROP_MEMBERSHIP
+#define WS_IPV6_DONTFRAG                14
+#define WS_IPV6_PKTINFO                 19
+#define WS_IPV6_HOPLIMIT                21
+#define WS_IPV6_PROTECTION_LEVEL        23
+#define WS_IPV6_RECVIF                  24
+#define WS_IPV6_RECVDSTADDR             25
+#define WS_IPV6_CHECKSUM                26
+#define WS_IPV6_V6ONLY                  27
+#define WS_IPV6_IFLIST                  28
+#define WS_IPV6_ADD_IFLIST              29
+#define WS_IPV6_DEL_IFLIST              30
+#define WS_IPV6_UNICAST_IF              31
+#define WS_IPV6_RTHDR                   32
+#define WS_IPV6_RECVRTHDR               38
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define TCP_OFFLOAD_NO_PREFERENCE       0
+#define TCP_OFFLOAD_NOT_PREFERRED       1
+#define TCP_OFFLOAD_PREFERRED           2
+#else
+#define WS_TCP_OFFLOAD_NO_PREFERENCE    0
+#define WS_TCP_OFFLOAD_NOT_PREFERRED    1
+#define WS_TCP_OFFLOAD_PREFERRED        2
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+/* TCP_NODELAY is defined elsewhere */
+#define TCP_EXPEDITED_1122              2
+#define TCP_KEEPALIVE                   3
+#define TCP_MAXSEG                      4
+#define TCP_MAXRT                       5
+#define TCP_STDURG                      6
+#define TCP_NOURG                       7
+#define TCP_ATMARK                      8
+#define TCP_NOSYNRETRIES                9
+#define TCP_TIMESTAMPS                  10
+#define TCP_OFFLOAD_PREFERENCE          11
+#define TCP_CONGESTION_ALGORITHM        12
+#define TCP_DELAY_FIN_ACK               13
+#else
+/* WS_TCP_NODELAY is defined elsewhere */
+#define WS_TCP_EXPEDITED_1122           2
+#define WS_TCP_KEEPALIVE                3
+#define WS_TCP_MAXSEG                   4
+#define WS_TCP_MAXRT                    5
+#define WS_TCP_STDURG                   6
+#define WS_TCP_NOURG                    7
+#define WS_TCP_ATMARK                   8
+#define WS_TCP_NOSYNRETRIES             9
+#define WS_TCP_TIMESTAMPS               10
+#define WS_TCP_OFFLOAD_PREFERENCE       11
+#define WS_TCP_CONGESTION_ALGORITHM     12
+#define WS_TCP_DELAY_FIN_ACK            13
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define INET_ADDRSTRLEN         22
+#define INET6_ADDRSTRLEN        65
+#define IN6ADDR_ANY_INIT        { 0 }
+#define IN6ADDR_LOOPBACK_INIT   { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
+#else
+#define WS_INET_ADDRSTRLEN      22
+#define WS_INET6_ADDRSTRLEN     65
+#define WS_IN6ADDR_ANY_INIT     { 0 }
+#define WS_IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
+#endif /* USE_WS_PREFIX */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline BOOL WS(IN6_IS_ADDR_LOOPBACK) ( const IN6_ADDR *a )
+{
+    return (BOOL)((a->s6_words[0] == 0) &&
+                  (a->s6_words[1] == 0) &&
+                  (a->s6_words[2] == 0) &&
+                  (a->s6_words[3] == 0) &&
+                  (a->s6_words[4] == 0) &&
+                  (a->s6_words[5] == 0) &&
+                  (a->s6_words[6] == 0) &&
+                  (a->s6_words[7] == 0x0100));
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WS2IPDEF__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h
new file mode 100644
index 0000000..1e510fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h
@@ -0,0 +1,63 @@
+/*
+ * WS2SPI.H -- definitions to be used with the WinSock service provider.
+ *
+ * Copyright (C) 2001 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINSOCK2SPI_
+#define _WINSOCK2SPI_
+
+#ifndef _WINSOCK2API_
+#include <winsock2.h>
+#endif /* !defined(_WINSOCK2API_) */
+
+#include <pshpack4.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef BOOL (WINAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM);
+
+WSAEVENT WINAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
+INT      WINAPI WSCInstallProvider(const LPGUID,LPCWSTR,const LPWSAPROTOCOL_INFOW,
+                                   DWORD,LPINT);
+INT      WINAPI WSCDeinstallProvider(LPGUID,LPINT);
+INT      WINAPI WSCEnableNSProvider(LPGUID,BOOL);
+INT      WINAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT);
+INT      WINAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT);
+INT      WINAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID);
+INT      WINAPI WSCUnInstallNameSpace(LPGUID);
+INT      WINAPI WSCUpdateProvider(LPGUID, const WCHAR *, const LPWSAPROTOCOL_INFOW, DWORD, LPINT);
+INT      WINAPI WSCWriteProviderOrder(LPDWORD,DWORD);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#include <poppack.h>
+
+#endif /* !defined(_WINSOCK2SPI_) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h
new file mode 100644
index 0000000..572142d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2001 Francois Gouget
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WS2TCPIP__
+#define __WS2TCPIP__
+
+#include <winsock2.h>
+#include <ws2ipdef.h>
+#include <limits.h>
+
+#ifdef USE_WS_PREFIX
+#define WS(x)    WS_##x
+#else
+#define WS(x)    x
+#endif
+
+/* for addrinfo calls */
+typedef struct WS(addrinfo)
+{
+    int                ai_flags;
+    int                ai_family;
+    int                ai_socktype;
+    int                ai_protocol;
+    size_t             ai_addrlen;
+    char *             ai_canonname;
+    struct WS(sockaddr)*   ai_addr;
+    struct WS(addrinfo)*   ai_next;
+} ADDRINFOA, *PADDRINFOA;
+
+typedef struct WS(addrinfoW)
+{
+    int                ai_flags;
+    int                ai_family;
+    int                ai_socktype;
+    int                ai_protocol;
+    size_t             ai_addrlen;
+    PWSTR              ai_canonname;
+    struct WS(sockaddr)*   ai_addr;
+    struct WS(addrinfoW)*   ai_next;
+} ADDRINFOW, *PADDRINFOW;
+
+typedef int WS(socklen_t);
+
+typedef ADDRINFOA ADDRINFO, *LPADDRINFO;
+
+/* Possible Windows flags for getaddrinfo() */
+#ifndef USE_WS_PREFIX
+# define AI_PASSIVE                0x00000001
+# define AI_CANONNAME              0x00000002
+# define AI_NUMERICHOST            0x00000004
+# define AI_ADDRCONFIG             0x00000400
+# define AI_NON_AUTHORITATIVE      0x00004000
+# define AI_SECURE                 0x00008000
+# define AI_RETURN_PREFERRED_NAMES 0x00010000
+/* getaddrinfo error codes */
+# define EAI_AGAIN	WSATRY_AGAIN
+# define EAI_BADFLAGS	WSAEINVAL
+# define EAI_FAIL	WSANO_RECOVERY
+# define EAI_FAMILY	WSAEAFNOSUPPORT
+# define EAI_MEMORY	WSA_NOT_ENOUGH_MEMORY
+# define EAI_NODATA	EAI_NONAME
+# define EAI_NONAME	WSAHOST_NOT_FOUND
+# define EAI_SERVICE	WSATYPE_NOT_FOUND
+# define EAI_SOCKTYPE	WSAESOCKTNOSUPPORT
+#else
+# define WS_AI_PASSIVE                0x00000001
+# define WS_AI_CANONNAME              0x00000002
+# define WS_AI_NUMERICHOST            0x00000004
+# define WS_AI_ADDRCONFIG             0x00000400
+# define WS_AI_NON_AUTHORITATIVE      0x00004000
+# define WS_AI_SECURE                 0x00008000
+# define WS_AI_RETURN_PREFERRED_NAMES 0x00010000
+/* getaddrinfo error codes */
+# define WS_EAI_AGAIN	WSATRY_AGAIN
+# define WS_EAI_BADFLAGS	WSAEINVAL
+# define WS_EAI_FAIL	WSANO_RECOVERY
+# define WS_EAI_FAMILY	WSAEAFNOSUPPORT
+# define WS_EAI_MEMORY	WSA_NOT_ENOUGH_MEMORY
+# define WS_EAI_NODATA	WS_EAI_NONAME
+# define WS_EAI_NONAME	WSAHOST_NOT_FOUND
+# define WS_EAI_SERVICE	WSATYPE_NOT_FOUND
+# define WS_EAI_SOCKTYPE	WSAESOCKTNOSUPPORT
+#endif
+
+#ifndef USE_WS_PREFIX
+# define NI_MAXHOST         1025
+# define NI_MAXSERV         32
+#else
+# define WS_NI_MAXHOST      1025
+# define WS_NI_MAXSERV      32
+#endif
+
+/* Possible Windows flags for getnameinfo() */
+#ifndef USE_WS_PREFIX
+# define NI_NOFQDN          0x01
+# define NI_NUMERICHOST     0x02
+# define NI_NAMEREQD        0x04
+# define NI_NUMERICSERV     0x08
+# define NI_DGRAM           0x10
+#else
+# define WS_NI_NOFQDN       0x01
+# define WS_NI_NUMERICHOST  0x02
+# define WS_NI_NAMEREQD     0x04
+# define WS_NI_NUMERICSERV  0x08
+# define WS_NI_DGRAM        0x10
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GAI_STRERROR_BUFFER_SIZE        1024
+
+static inline char *gai_strerrorA(int errcode)
+{
+    static char buffer[GAI_STRERROR_BUFFER_SIZE + 1];
+
+    /* FIXME: should format message from system, ignoring inserts in neutral
+     * language */
+    buffer[0] = '\0';
+
+    return buffer;
+}
+
+static inline WCHAR *gai_strerrorW(int errcode)
+{
+    static WCHAR buffer[GAI_STRERROR_BUFFER_SIZE + 1];
+
+    /* FIXME: should format message from system, ignoring inserts in neutral
+     * language */
+    buffer[0] = '\0';
+
+    return buffer;
+}
+
+#ifdef USE_WS_PREFIX
+# define WS_gai_strerror WINELIB_NAME_AW(gai_strerror)
+#elif defined(WINE_NO_UNICODE_MACROS)
+# define gai_strerror gai_strerrorA
+#else
+# define gai_strerror WINELIB_NAME_AW(gai_strerror)
+#endif
+
+void WINAPI WS(freeaddrinfo)(LPADDRINFO);
+#define     FreeAddrInfoA WS(freeaddrinfo)
+void WINAPI FreeAddrInfoW(PADDRINFOW);
+#define     FreeAddrInfo WINELIB_NAME_AW(FreeAddrInfo)
+int WINAPI  WS(getaddrinfo)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**);
+#define     GetAddrInfoA WS(getaddrinfo)
+int WINAPI  GetAddrInfoW(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*);
+#define     GetAddrInfo WINELIB_NAME_AW(GetAddrInfo)
+int WINAPI  WS(getnameinfo)(const SOCKADDR*,WS(socklen_t),PCHAR,DWORD,PCHAR,DWORD,INT);
+#define     GetNameInfoA WS(getnameinfo)
+INT WINAPI  GetNameInfoW(const SOCKADDR*,WS(socklen_t),PWCHAR,DWORD,PWCHAR,DWORD,INT);
+#define     GetNameInfo WINELIB_NAME_AW(GetNameInfo)
+PCSTR WINAPI WS(inet_ntop)(INT,PVOID,PSTR,SIZE_T);
+#define     InetNtopA WS(inet_ntop)
+PCWSTR WINAPI InetNtopW(INT,PVOID,PWSTR,SIZE_T);
+#define     InetNtop WINELIB_NAME_AW(InetNtop)
+int WINAPI  WS(inet_pton)(INT,PCSTR,PVOID);
+#define     InetPtonA WS(inet_pton)
+int WINAPI  InetPtonW(INT,PCWSTR,PVOID);
+#define     InetPton WINELIB_NAME_AW(InetPton)
+
+/*
+ * Ws2tcpip Function Typedefs
+ *
+ * Remember to keep this section in sync with the
+ * prototypes above.
+ */
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef void (WINAPI *LPFN_FREEADDRINFO)(LPADDRINFO);
+#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
+typedef void (WINAPI *LPFN_FREEADDRINFOW)(PADDRINFOW);
+#define LPFN_FREEADDRINFOT WINELIB_NAME_AW(LPFN_FREEADDRINFO)
+typedef int (WINAPI *LPFN_GETADDRINFO)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**);
+#define LPFN_GETADDRINFOA LPFN_GETADDRINFO
+typedef int (WINAPI *LPFN_GETADDRINFOW)(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*);
+#define LPFN_GETADDRINFOT WINELIB_NAME_AW(LPFN_GETADDRINFO)
+typedef int (WINAPI *LPFN_GETNAMEINFO)(const struct sockaddr*,socklen_t,char*,DWORD,char*,DWORD,int);
+#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
+typedef int (WINAPI *LPFN_GETNAMEINFOW)(const SOCKADDR*,socklen_t,PWCHAR,DWORD,PWCHAR,DWORD,INT);
+#define LPFN_GETNAMEINFOT WINELIB_NAME_AW(LPFN_GETNAMEINFO)
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WS2TCPIP__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h
new file mode 100644
index 0000000..c069e94
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2001 Stefan Leichter
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WSHISOTP_
+#define _WINE_WSHISOTP_
+
+
+/*
+ * constants
+ */
+#define ISOPROTO_TP4       29
+#define ISOPROTO_TP        ISOPROTO_TP4
+
+
+#endif /* _WINE_WSHISOTP_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h
new file mode 100644
index 0000000..7c08988
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2001 Stefan Leichter
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WSIPX_
+#define _WINE_WSIPX_
+
+#ifdef USE_WS_PREFIX
+# define WS(x)    WS_##x
+#else
+# define WS(x)    x
+#endif
+
+typedef struct WS_sockaddr_ipx
+{
+    short sa_family;
+    char sa_netnum[4];
+    char sa_nodenum[6];
+    unsigned short sa_socket;
+} SOCKADDR_IPX, *PSOCKADDR_IPX, *LPSOCKADDR_IPX;
+
+/*
+ * constants
+ */
+#define NSPROTO_IPX                 1000
+#define NSPROTO_SPX                 1256
+#define NSPROTO_SPXII               1257
+
+#undef WS
+#endif /* _WINE_WSIPX_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h
new file mode 100644
index 0000000..6517d1f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2003,2004 Roderick Colenbrander
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WSNWLINK_
+#define _WSNWLINK_
+
+#define IPX_PTYPE 0x4000
+#define IPX_FILTERPTYPE 0x4001
+#define IPX_DSTYPE 0x4002
+#define IPX_STOPFILTERPTYPE 0x4003
+#define IPX_EXTENDED_ADDRESS 0x4004
+#define IPX_RECVHDR 0x4005
+#define IPX_MAXSIZE 0x4006
+#define IPX_ADDRESS 0x4007
+#define IPX_GETNETINFO 0x4008
+#define IPX_GETNETINFO_NORIP 0x4009
+#define IPX_SPXGETCONNECTIONSTATUS 0x400b
+#define IPX_ADDRESS_NOTIFY 0x400c
+#define IPX_MAX_ADAPTER_NUM 0x400d
+#define IPX_RERIPNETNUMBER 0x400e
+#define IPX_RECEIVE_BROADCAST 0x400f
+#define IPX_IMMEDIATESPXACK 0x4010
+
+typedef struct _IPX_ADDRESS_DATA {
+    INT   adapternum;
+    UCHAR netnum[4];
+    UCHAR nodenum[6];
+    BOOLEAN wan;
+    BOOLEAN status;
+    INT maxpkt;
+    ULONG linkspeed;
+} IPX_ADDRESS_DATA, *PIPX_ADDRESS_DATA;
+
+#endif /* _WSNWLINK_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h
new file mode 100644
index 0000000..5904cac
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2005 Ulrich Czekalla (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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WTSAPI32_H
+#define __WINE_WTSAPI32_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef enum _WTS_VIRTUAL_CLASS
+{
+    WTSVirtualClientData,
+    WTSVirtualFileHandle
+} WTS_VIRTUAL_CLASS;
+
+typedef enum tagWTS_INFO_CLASS
+{
+    WTSInitialProgram,
+    WTSApplicationName,
+    WTSWorkingDirectory,
+    WTSOEMId,
+    WTSSessionId,
+    WTSUserName,
+    WTSWinStationName,
+    WTSDomainName,
+    WTSConnectState,
+    WTSClientBuildNumber,
+    WTSClientName,
+    WTSClientDirectory,
+    WTSClientProductId,
+    WTSClientHardwareId,
+    WTSClientAddress,
+    WTSClientDisplay,
+    WTSClientProtocolType,
+} WTS_INFO_CLASS;
+
+typedef enum _WTS_CONNECTSTATE_CLASS
+{
+    WTSActive,
+    WTSConnected,
+    WTSConnectQuery,
+    WTSShadow,
+    WTSDisconnected,
+    WTSIdle,
+    WTSListen,
+    WTSReset,
+    WTSDown,
+    WTSInit
+} WTS_CONNECTSTATE_CLASS;
+
+typedef enum _WTS_CONFIG_CLASS
+{
+    WTSUserConfigInitialProgram,
+    WTSUserConfigWorkingDirectory,
+    WTSUserConfigInheritInitialProgram,
+    WTSUserConfigAllowLogonTerminalServer,
+    WTSUserConfigTimeoutSettingsConnections,
+    WTSUserConfigTimeoutSettingsDisconnections,
+    WTSUserConfigTimeoutSettingsIdle,
+    WTSUserConfigDeviceClientDrives,
+    WTSUserConfigDeviceClientPrinters,
+    WTSUserConfigDeviceClientDefaultPrinter,
+    WTSUserConfigBrokenTimeoutSettings,
+    WTSUserConfigModemCallbackSettings,
+    WTSUserConfigModemCallbackPhoneNumber,
+    WTSUserConfigShadowSettings,
+    WTSUserConfigTerminalServerProfilePath,
+    WTSUserConfigTerminalServerHomeDirectory,
+    WTSUserConfigfTerminalServerRemoteHomeDir
+} WTS_CONFIG_CLASS;
+
+typedef struct _WTS_PROCESS_INFOA
+{
+    DWORD SessionId;
+    DWORD ProcessId;
+    LPSTR pProcessName;
+    PSID pUserSid;
+} WTS_PROCESS_INFOA, *PWTS_PROCESS_INFOA;
+
+typedef struct _WTS_PROCESS_INFOW
+{
+    DWORD SessionId;
+    DWORD ProcessId;
+    LPWSTR pProcessName;
+    PSID pUserSid;
+} WTS_PROCESS_INFOW, *PWTS_PROCESS_INFOW;
+
+DECL_WINELIB_TYPE_AW(WTS_PROCESS_INFO)
+DECL_WINELIB_TYPE_AW(PWTS_PROCESS_INFO)
+
+typedef struct _WTS_SESSION_INFOA
+{
+    DWORD SessionId;
+    LPSTR pWinStationName;
+    WTS_CONNECTSTATE_CLASS State;
+} WTS_SESSION_INFOA, *PWTS_SESSION_INFOA;
+
+typedef struct _WTS_SESSION_INFOW
+{
+    DWORD SessionId;
+    LPWSTR pWinStationName;
+    WTS_CONNECTSTATE_CLASS State;
+} WTS_SESSION_INFOW, *PWTS_SESSION_INFOW;
+
+DECL_WINELIB_TYPE_AW(WTS_SESSION_INFO)
+DECL_WINELIB_TYPE_AW(PWTS_SESSION_INFO)
+
+typedef struct _WTS_SERVER_INFOA
+{
+    LPSTR pServerName;
+} WTS_SERVER_INFOA, *PWTS_SERVER_INFOA;
+
+typedef struct _WTS_SERVER_INFOW
+{
+    LPWSTR pServerName;
+} WTS_SERVER_INFOW, *PWTS_SERVER_INFOW;
+
+DECL_WINELIB_TYPE_AW(WTS_SERVER_INFO)
+DECL_WINELIB_TYPE_AW(PWTS_SERVER_INFO)
+
+void WINAPI WTSCloseServer(HANDLE);
+BOOL WINAPI WTSConnectSessionA(ULONG, ULONG, PSTR, BOOL);
+BOOL WINAPI WTSConnectSessionW(ULONG, ULONG, PWSTR, BOOL);
+#define     WTSConnectSession WINELIB_NAME_AW(WTSConnectSession)
+BOOL WINAPI WTSDisconnectSession(HANDLE, DWORD, BOOL);
+BOOL WINAPI WTSEnumerateProcessesA(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOA *, DWORD *);
+BOOL WINAPI WTSEnumerateProcessesW(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOW *, DWORD *);
+#define     WTSEnumerateProcesses WINELIB_NAME_AW(WTSEnumerateProcesses)
+BOOL WINAPI WTSEnumerateServersA( LPSTR, DWORD, DWORD, PWTS_SERVER_INFOA*, DWORD*);
+BOOL WINAPI WTSEnumerateServersW( LPWSTR, DWORD, DWORD, PWTS_SERVER_INFOW*, DWORD*);
+#define     WTSEnumerateServers WINELIB_NAME_AW(WTSEnumerateServers)
+BOOL WINAPI WTSEnumerateSessionsA(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOA *, DWORD *);
+BOOL WINAPI WTSEnumerateSessionsW(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOW *, DWORD *);
+#define     WTSEnumerateSessions WINELIB_NAME_AW(WTSEnumerateSessions)
+void WINAPI WTSFreeMemory(PVOID);
+HANDLE WINAPI WTSOpenServerA(LPSTR);
+HANDLE WINAPI WTSOpenServerW(LPWSTR);
+#define     WTSOpenServer WINELIB_NAME_AW(WTSOpenServer)
+BOOL WINAPI WTSQuerySessionInformationA(HANDLE, DWORD, WTS_INFO_CLASS, LPSTR *, DWORD *);
+BOOL WINAPI WTSQuerySessionInformationW(HANDLE, DWORD, WTS_INFO_CLASS, LPWSTR *, DWORD *);
+#define     WTSQuerySessionInformation WINELIB_NAME_AW(WTSQuerySessionInformation)
+BOOL WINAPI WTSQueryUserConfigA(LPSTR,LPSTR,WTS_CONFIG_CLASS,LPSTR*,DWORD*);
+BOOL WINAPI WTSQueryUserConfigW(LPWSTR,LPWSTR,WTS_CONFIG_CLASS,LPWSTR*,DWORD*);
+#define     WTSQueryUserConfig WINELIB_NAME_AW(WTSQueryUserConfig)
+BOOL WINAPI WTSQueryUserToken(ULONG, PHANDLE);
+BOOL WINAPI WTSRegisterSessionNotification(HWND, DWORD);
+BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE, HWND, DWORD);
+BOOL WINAPI WTSStartRemoteControlSessionA(LPSTR, ULONG, BYTE, USHORT);
+BOOL WINAPI WTSStartRemoteControlSessionW(LPWSTR, ULONG, BYTE, USHORT);
+#define     WTSStartRemoteControlSession WINELIB_NAME_AW(WTSStartRemoteControlSession)
+BOOL WINAPI WTSStopRemoteControlSession(ULONG);
+BOOL WINAPI WTSTerminateProcess(HANDLE, DWORD, DWORD);
+BOOL WINAPI WTSUnRegisterSessionNotification(HWND);
+BOOL WINAPI WTSUnRegisterSessionNotificationEx(HANDLE, HWND);
+BOOL WINAPI WTSWaitSystemEvent(HANDLE, DWORD, DWORD*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h
new file mode 100644
index 0000000..39c3ac5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h
@@ -0,0 +1,767 @@
+/*** Autogenerated by WIDL 1.1.36 from wtypes.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WTYPES_H
+#define __WIDL_WTYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <basetsd.h>
+#include <guiddef.h>
+
+/* Forward declarations */
+
+
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+/*****************************************************************************
+ * IWinTypes interface (v0.1)
+ */
+#ifndef __IWinTypes_INTERFACE_DEFINED__
+#define __IWinTypes_INTERFACE_DEFINED__
+
+extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec;
+extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec;
+#if 0 /* winnt.h */
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef ULONG DWORD;
+typedef LONG BOOL;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef short SHORT;
+typedef unsigned short USHORT;
+typedef LONG LONG;
+typedef ULONG ULONG;
+typedef float FLOAT;
+typedef void *PVOID;
+typedef void *LPVOID;
+typedef DWORD *LPDWORD;
+typedef char CHAR;
+typedef CHAR *LPSTR;
+typedef const CHAR *LPCSTR;
+typedef wchar_t WCHAR;
+typedef WCHAR *LPWSTR;
+typedef const WCHAR *LPCWSTR;
+typedef boolean BOOLEAN;
+typedef DWORD COLORREF;
+typedef void *HANDLE;
+typedef void *HMODULE;
+typedef void *HINSTANCE;
+typedef void *HRGN;
+typedef void *HTASK;
+typedef void *HKEY;
+typedef void *HDESK;
+typedef void *HMF;
+typedef void *HEMF;
+typedef void *HPEN;
+typedef void *HRSRC;
+typedef void *HSTR;
+typedef void *HWINSTA;
+typedef void *HKL;
+typedef void *HGDIOBJ;
+typedef HANDLE HDWP;
+typedef LONG_PTR LRESULT;
+typedef LONG HRESULT;
+typedef DWORD LCID;
+typedef USHORT LANGID;
+typedef UINT64 DWORDLONG;
+typedef INT64 LONGLONG;
+typedef UINT64 ULONGLONG;
+typedef struct _LARGE_INTEGER {
+    LONGLONG QuadPart;
+} LARGE_INTEGER;
+typedef struct _ULARGE_INTEGER {
+    ULONGLONG QuadPart;
+} ULARGE_INTEGER;
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+    UCHAR Value[6];
+} SID_IDENTIFIER_AUTHORITY;
+typedef struct _SID_IDENTIFIER_AUTHORITY *PSID_IDENTIFIER_AUTHORITY;
+typedef struct _SID {
+    UCHAR Revision;
+    UCHAR SubAuthorityCount;
+    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+    ULONG SubAuthority[1];
+} SID;
+typedef struct _SID *PSID;
+typedef USHORT SECURITY_DESCRIPTOR_CONTROL;
+typedef USHORT *PSECURITY_DESCRIPTOR_CONTROL;
+typedef struct _ACL {
+    UCHAR AclRevision;
+    UCHAR Sbz1;
+    USHORT AclSize;
+    USHORT AceCount;
+    USHORT Sbz2;
+} ACL;
+typedef ACL *PACL;
+typedef struct _SECURITY_DESCRIPTOR {
+    UCHAR Revision;
+    UCHAR Sbz1;
+    SECURITY_DESCRIPTOR_CONTROL Control;
+    PSID Owner;
+    PSID Group;
+    PACL Sacl;
+    PACL Dacl;
+} SECURITY_DESCRIPTOR;
+typedef struct _SECURITY_DESCRIPTOR *PSECURITY_DESCRIPTOR;
+typedef struct _SECURITY_ATTRIBUTES {
+    DWORD nLength;
+    LPVOID lpSecurityDescriptor;
+    BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES;
+typedef struct _SECURITY_ATTRIBUTES *PSECURITY_ATTRIBUTES;
+typedef struct _SECURITY_ATTRIBUTES *LPSECURITY_ATTRIBUTES;
+typedef struct tagSIZE {
+    LONG cx;
+    LONG cy;
+} SIZE;
+typedef struct tagSIZE *PSIZE;
+typedef struct tagSIZE *LPSIZE;
+typedef SIZE SIZEL;
+typedef SIZE *PSIZEL;
+typedef SIZE *LPSIZEL;
+typedef struct tagPOINT {
+    LONG x;
+    LONG y;
+} POINT;
+typedef struct tagPOINT *PPOINT;
+typedef struct tagPOINT *LPPOINT;
+typedef struct _POINTL {
+    LONG x;
+    LONG y;
+} POINTL;
+typedef struct _POINTL *PPOINTL;
+typedef struct tagRECT {
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECT;
+typedef struct tagRECT *PRECT;
+typedef struct tagRECT *LPRECT;
+typedef const RECT *LPCRECT;
+typedef struct _RECTL {
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECTL;
+typedef struct _RECTL *PRECTL;
+typedef struct _RECTL *LPRECTL;
+typedef const RECTL *LPCRECTL;
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+#endif /* winnt.h */
+#ifdef _MSC_VER
+typedef double DOUBLE;
+#else
+typedef double DECLSPEC_ALIGN(8) DOUBLE;
+#endif
+#ifndef _PALETTEENTRY_DEFINED
+#define _PALETTEENTRY_DEFINED
+typedef struct tagPALETTEENTRY {
+    BYTE peRed;
+    BYTE peGreen;
+    BYTE peBlue;
+    BYTE peFlags;
+} PALETTEENTRY;
+typedef struct tagPALETTEENTRY *PPALETTEENTRY;
+typedef struct tagPALETTEENTRY *LPPALETTEENTRY;
+#endif
+#ifndef _LOGPALETTE_DEFINED
+#define _LOGPALETTE_DEFINED
+typedef struct tagLOGPALETTE {
+    WORD palVersion;
+    WORD palNumEntries;
+    PALETTEENTRY palPalEntry[1];
+} LOGPALETTE;
+typedef struct tagLOGPALETTE *PLOGPALETTE;
+typedef struct tagLOGPALETTE *LPLOGPALETTE;
+#endif
+#ifndef _SYSTEMTIME_
+#define _SYSTEMTIME_
+typedef struct _SYSTEMTIME {
+    WORD wYear;
+    WORD wMonth;
+    WORD wDayOfWeek;
+    WORD wDay;
+    WORD wHour;
+    WORD wMinute;
+    WORD wSecond;
+    WORD wMilliseconds;
+} SYSTEMTIME;
+typedef struct _SYSTEMTIME *PSYSTEMTIME;
+typedef struct _SYSTEMTIME *LPSYSTEMTIME;
+#endif
+#ifndef _FILETIME_
+#define _FILETIME_
+typedef struct _FILETIME {
+    DWORD dwLowDateTime;
+    DWORD dwHighDateTime;
+} FILETIME;
+typedef struct _FILETIME *PFILETIME;
+typedef struct _FILETIME *LPFILETIME;
+#endif
+#ifndef _TEXTMETRIC_DEFINED
+#define _TEXTMETRIC_DEFINED
+typedef struct tagTEXTMETRICA {
+    LONG tmHeight;
+    LONG tmAscent;
+    LONG tmDescent;
+    LONG tmInternalLeading;
+    LONG tmExternalLeading;
+    LONG tmAveCharWidth;
+    LONG tmMaxCharWidth;
+    LONG tmWeight;
+    LONG tmOverhang;
+    LONG tmDigitizedAspectX;
+    LONG tmDigitizedAspectY;
+    BYTE tmFirstChar;
+    BYTE tmLastChar;
+    BYTE tmDefaultChar;
+    BYTE tmBreakChar;
+    BYTE tmItalic;
+    BYTE tmUnderlined;
+    BYTE tmStruckOut;
+    BYTE tmPitchAndFamily;
+    BYTE tmCharSet;
+} TEXTMETRICA;
+typedef struct tagTEXTMETRICA *LPTEXTMETRICA;
+typedef struct tagTEXTMETRICA *PTEXTMETRICA;
+typedef struct tagTEXTMETRICW {
+    LONG tmHeight;
+    LONG tmAscent;
+    LONG tmDescent;
+    LONG tmInternalLeading;
+    LONG tmExternalLeading;
+    LONG tmAveCharWidth;
+    LONG tmMaxCharWidth;
+    LONG tmWeight;
+    LONG tmOverhang;
+    LONG tmDigitizedAspectX;
+    LONG tmDigitizedAspectY;
+    WCHAR tmFirstChar;
+    WCHAR tmLastChar;
+    WCHAR tmDefaultChar;
+    WCHAR tmBreakChar;
+    BYTE tmItalic;
+    BYTE tmUnderlined;
+    BYTE tmStruckOut;
+    BYTE tmPitchAndFamily;
+    BYTE tmCharSet;
+} TEXTMETRICW;
+typedef struct tagTEXTMETRICW *LPTEXTMETRICW;
+typedef struct tagTEXTMETRICW *PTEXTMETRICW;
+#endif
+typedef WCHAR OLECHAR;
+typedef OLECHAR *LPOLESTR;
+typedef const OLECHAR *LPCOLESTR;
+#ifndef __WINESRC__
+#define OLESTR(str) L##str
+#endif
+typedef LONG SCODE;
+typedef struct _COAUTHIDENTITY {
+    USHORT *User;
+    ULONG UserLength;
+    USHORT *Domain;
+    ULONG DomainLength;
+    USHORT *Password;
+    ULONG PasswordLength;
+    ULONG Flags;
+} COAUTHIDENTITY;
+typedef struct _COAUTHINFO {
+    DWORD dwAuthnSvc;
+    DWORD dwAuthzSvc;
+    LPWSTR pwszServerPrincName;
+    DWORD dwAuthnLevel;
+    DWORD dwImpersonationLevel;
+    COAUTHIDENTITY *pAuthIdentityData;
+    DWORD dwCapabilities;
+} COAUTHINFO;
+typedef enum tagMEMCTX {
+    MEMCTX_TASK = 1,
+    MEMCTX_SHARED = 2,
+    MEMCTX_MACSYSTEM = 3,
+    MEMCTX_UNKNOWN = -1,
+    MEMCTX_SAME = -2
+} MEMCTX;
+#ifndef _ROT_COMPARE_MAX_DEFINED
+#define _ROT_COMPARE_MAX_DEFINED
+#define ROT_COMPARE_MAX 2048
+#endif
+#ifndef _ROTFLAGS_DEFINED
+#define _ROTFLAGS_DEFINED
+#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1
+#define ROTFLAGS_ALLOWANYCLIENT 0x2
+#endif
+typedef enum tagCLSCTX {
+    CLSCTX_INPROC_SERVER = 0x1,
+    CLSCTX_INPROC_HANDLER = 0x2,
+    CLSCTX_LOCAL_SERVER = 0x4,
+    CLSCTX_INPROC_SERVER16 = 0x8,
+    CLSCTX_REMOTE_SERVER = 0x10,
+    CLSCTX_INPROC_HANDLER16 = 0x20,
+    CLSCTX_INPROC_SERVERX86 = 0x40,
+    CLSCTX_INPROC_HANDLERX86 = 0x80,
+    CLSCTX_ESERVER_HANDLER = 0x100,
+    CLSCTX_NO_CODE_DOWNLOAD = 0x400,
+    CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
+    CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
+    CLSCTX_NO_FAILURE_LOG = 0x4000,
+    CLSCTX_DISABLE_AAA = 0x8000,
+    CLSCTX_ENABLE_AAA = 0x10000,
+    CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
+} CLSCTX;
+#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)
+#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+typedef enum tagMSHLFLAGS {
+    MSHLFLAGS_NORMAL = 0,
+    MSHLFLAGS_TABLESTRONG = 1,
+    MSHLFLAGS_TABLEWEAK = 2,
+    MSHLFLAGS_NOPING = 4
+} MSHLFLAGS;
+typedef enum tagMSHCTX {
+    MSHCTX_LOCAL = 0,
+    MSHCTX_NOSHAREDMEM = 1,
+    MSHCTX_DIFFERENTMACHINE = 2,
+    MSHCTX_INPROC = 3,
+    MSHCTX_CROSSCTX = 4
+} MSHCTX;
+typedef struct _BYTE_BLOB {
+    ULONG clSize;
+    byte abData[1];
+} BYTE_BLOB;
+typedef BYTE_BLOB *UP_BYTE_BLOB;
+typedef struct _FLAGGED_BYTE_BLOB {
+    ULONG fFlags;
+    ULONG clSize;
+    byte abData[1];
+} FLAGGED_BYTE_BLOB;
+typedef FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
+typedef struct _FLAGGED_WORD_BLOB {
+    ULONG fFlags;
+    ULONG clSize;
+    unsigned short asData[1];
+} FLAGGED_WORD_BLOB;
+typedef FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
+typedef struct _BYTE_SIZEDARR {
+    ULONG clSize;
+    byte *pData;
+} BYTE_SIZEDARR;
+typedef struct _SHORT_SIZEDARR {
+    ULONG clSize;
+    unsigned short *pData;
+} WORD_SIZEDARR;
+typedef struct _LONG_SIZEDARR {
+    ULONG clSize;
+    ULONG *pData;
+} DWORD_SIZEDARR;
+typedef struct _HYPER_SIZEDARR {
+    ULONG clSize;
+    hyper *pData;
+} HYPER_SIZEDARR;
+#define WDT_INPROC_CALL (0x48746457)
+
+#define WDT_REMOTE_CALL (0x52746457)
+
+#define WDT_INPROC64_CALL (0x50746457)
+
+typedef struct _userCLIPFORMAT {
+    LONG fContext;
+    union {
+        DWORD dwValue;
+        LPWSTR pwszName;
+    } u;
+} userCLIPFORMAT;
+typedef userCLIPFORMAT *wireCLIPFORMAT;
+typedef WORD CLIPFORMAT;
+typedef struct tagRemHGLOBAL {
+    LONG fNullHGlobal;
+    ULONG cbData;
+    byte data[1];
+} RemHGLOBAL;
+typedef struct _userHGLOBAL {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        FLAGGED_BYTE_BLOB *hRemote;
+        INT64 hInproc64;
+    } u;
+} userHGLOBAL;
+typedef userHGLOBAL *wireHGLOBAL;
+typedef struct tagRemHMETAFILEPICT {
+    LONG mm;
+    LONG xExt;
+    LONG yExt;
+    ULONG cbData;
+    byte data[1];
+} RemHMETAFILEPICT;
+typedef struct _userHMETAFILE {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        BYTE_BLOB *hRemote;
+        INT64 hInproc64;
+    } u;
+} userHMETAFILE;
+typedef userHMETAFILE *wireHMETAFILE;
+typedef struct _remoteMETAFILEPICT {
+    LONG mm;
+    LONG xExt;
+    LONG yExt;
+    userHMETAFILE *hMF;
+} remoteMETAFILEPICT;
+typedef struct _userHMETAFILEPICT {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        remoteMETAFILEPICT *hRemote;
+        INT64 hInproc64;
+    } u;
+} userHMETAFILEPICT;
+typedef userHMETAFILEPICT *wireHMETAFILEPICT;
+typedef struct tagRemHENHMETAFILE {
+    ULONG cbData;
+    byte data[1];
+} RemHENHMETAFILE;
+typedef struct _userHENHMETAFILE {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        BYTE_BLOB *hRemote;
+        INT64 hInproc64;
+    } u;
+} userHENHMETAFILE;
+typedef userHENHMETAFILE *wireHENHMETAFILE;
+typedef struct tagRemHBITMAP {
+    ULONG cbData;
+    byte data[1];
+} RemHBITMAP;
+typedef struct _userBITMAP {
+    LONG bmType;
+    LONG bmWidth;
+    LONG bmHeight;
+    LONG bmWidthBytes;
+    WORD bmPlanes;
+    WORD bmBitsPixel;
+    ULONG cbSize;
+    byte pBuffer[1];
+} userBITMAP;
+typedef struct _userHBITMAP {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        userBITMAP *hRemote;
+        INT64 hInproc64;
+    } u;
+} userHBITMAP;
+typedef userHBITMAP *wireHBITMAP;
+typedef struct tagRemHPALETTE {
+    ULONG cbData;
+    byte data[1];
+} RemHPALETTE;
+typedef struct tagrpcLOGPALETTE {
+    WORD palVersion;
+    WORD palNumEntries;
+    PALETTEENTRY palPalEntry[1];
+} rpcLOGPALETTE;
+typedef struct _userHPALETTE {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        rpcLOGPALETTE *hRemote;
+        INT64 hInproc64;
+    } u;
+} userHPALETTE;
+typedef userHPALETTE *wireHPALETTE;
+#if 0
+typedef void *HGLOBAL;
+typedef HGLOBAL HLOCAL;
+typedef void *HBITMAP;
+typedef void *HPALETTE;
+typedef void *HENHMETAFILE;
+typedef void *HMETAFILE;
+#endif
+typedef void *HMETAFILEPICT;
+typedef struct _RemotableHandle {
+    LONG fContext;
+    union {
+        LONG hInproc;
+        LONG hRemote;
+    } u;
+} RemotableHandle;
+typedef RemotableHandle *wireHACCEL;
+typedef RemotableHandle *wireHBRUSH;
+typedef RemotableHandle *wireHDC;
+typedef RemotableHandle *wireHFONT;
+typedef RemotableHandle *wireHICON;
+typedef RemotableHandle *wireHMENU;
+typedef RemotableHandle *wireHWND;
+#if 0
+typedef void *HACCEL;
+typedef void *HBRUSH;
+typedef void *HDC;
+typedef void *HFONT;
+typedef void *HICON;
+typedef void *HMENU;
+typedef void *HWND;
+typedef HICON HCURSOR;
+typedef struct tagMSG {
+    HWND hwnd;
+    UINT message;
+    WPARAM wParam;
+    LPARAM lParam;
+    DWORD time;
+    POINT pt;
+} MSG;
+typedef struct tagMSG *PMSG;
+typedef struct tagMSG *NPMSG;
+typedef struct tagMSG *LPMSG;
+#endif
+#if 0
+typedef GUID *REFGUID;
+typedef IID *REFIID;
+typedef CLSID *REFCLSID;
+typedef FMTID *REFFMTID;
+#endif
+typedef enum tagDVASPECT {
+    DVASPECT_CONTENT = 1,
+    DVASPECT_THUMBNAIL = 2,
+    DVASPECT_ICON = 4,
+    DVASPECT_DOCPRINT = 8
+} DVASPECT;
+typedef enum tagSTGC {
+    STGC_DEFAULT = 0,
+    STGC_OVERWRITE = 1,
+    STGC_ONLYIFCURRENT = 2,
+    STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
+    STGC_CONSOLIDATE = 8
+} STGC;
+typedef enum tagSTGMOVE {
+    STGMOVE_MOVE = 0,
+    STGMOVE_COPY = 1,
+    STGMOVE_SHALLOWCOPY = 2
+} STGMOVE;
+typedef enum tagSTATFLAG {
+    STATFLAG_DEFAULT = 0,
+    STATFLAG_NONAME = 1,
+    STATFLAG_NOOPEN = 2
+} STATFLAG;
+#ifdef _MSC_VER
+typedef double DATE;
+#else
+typedef double DECLSPEC_ALIGN(8) DATE;
+#endif
+#if 0
+typedef struct tagCY {
+    LONGLONG int64;
+} CY;
+#else
+#ifndef _tagCY_DEFINED
+#define _tagCY_DEFINED
+typedef union tagCY {
+    struct {
+#ifdef WORDS_BIGENDIAN
+        LONG  Hi;
+        ULONG Lo;
+#else
+        ULONG Lo;
+        LONG  Hi;
+#endif
+    } DUMMYSTRUCTNAME;
+    LONGLONG int64;
+} CY;
+#endif
+#endif
+typedef CY *LPCY;
+#if 0
+typedef struct tagDEC {
+    USHORT wReserved;
+    BYTE scale;
+    BYTE sign;
+    ULONG Hi32;
+    ULONGLONG Lo64;
+} DECIMAL;
+#else
+typedef struct tagDEC {
+  USHORT wReserved;
+  union {
+    struct {
+      BYTE scale;
+      BYTE sign;
+    } DUMMYSTRUCTNAME;
+    USHORT signscale;
+  } DUMMYUNIONNAME;
+  ULONG Hi32;
+  union {
+    struct {
+#ifdef WORDS_BIGENDIAN
+      ULONG Mid32;
+      ULONG Lo32;
+#else
+      ULONG Lo32;
+      ULONG Mid32;
+#endif
+    } DUMMYSTRUCTNAME1;
+    ULONGLONG Lo64;
+  } DUMMYUNIONNAME1;
+} DECIMAL;
+#endif
+#define DECIMAL_NEG ((BYTE)0x80)
+#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)
+typedef DECIMAL *LPDECIMAL;
+typedef FLAGGED_WORD_BLOB *wireBSTR;
+typedef OLECHAR *BSTR;
+typedef BSTR *LPBSTR;
+typedef short VARIANT_BOOL;
+typedef VARIANT_BOOL _VARIANT_BOOL;
+#define VARIANT_TRUE  ((VARIANT_BOOL)0xFFFF)
+#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)
+typedef struct tagBSTRBLOB {
+    ULONG cbSize;
+    BYTE *pData;
+} BSTRBLOB;
+typedef struct tagBSTRBLOB *LPBSTRBLOB;
+#ifndef _tagBLOB_DEFINED
+#define _tagBLOB_DEFINED
+#define _BLOB_DEFINED
+#define _LPBLOB_DEFINED
+typedef struct tagBLOB {
+    ULONG cbSize;
+    BYTE *pBlobData;
+} BLOB;
+typedef struct tagBLOB *LPBLOB;
+#endif
+typedef struct tagCLIPDATA {
+    ULONG cbSize;
+    LONG ulClipFmt;
+    BYTE *pClipData;
+} CLIPDATA;
+#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))
+typedef ULONG PROPID;
+typedef unsigned short VARTYPE;
+enum VARENUM {
+    VT_EMPTY = 0,
+    VT_NULL = 1,
+    VT_I2 = 2,
+    VT_I4 = 3,
+    VT_R4 = 4,
+    VT_R8 = 5,
+    VT_CY = 6,
+    VT_DATE = 7,
+    VT_BSTR = 8,
+    VT_DISPATCH = 9,
+    VT_ERROR = 10,
+    VT_BOOL = 11,
+    VT_VARIANT = 12,
+    VT_UNKNOWN = 13,
+    VT_DECIMAL = 14,
+    VT_I1 = 16,
+    VT_UI1 = 17,
+    VT_UI2 = 18,
+    VT_UI4 = 19,
+    VT_I8 = 20,
+    VT_UI8 = 21,
+    VT_INT = 22,
+    VT_UINT = 23,
+    VT_VOID = 24,
+    VT_HRESULT = 25,
+    VT_PTR = 26,
+    VT_SAFEARRAY = 27,
+    VT_CARRAY = 28,
+    VT_USERDEFINED = 29,
+    VT_LPSTR = 30,
+    VT_LPWSTR = 31,
+    VT_RECORD = 36,
+    VT_INT_PTR = 37,
+    VT_UINT_PTR = 38,
+    VT_FILETIME = 64,
+    VT_BLOB = 65,
+    VT_STREAM = 66,
+    VT_STORAGE = 67,
+    VT_STREAMED_OBJECT = 68,
+    VT_STORED_OBJECT = 69,
+    VT_BLOB_OBJECT = 70,
+    VT_CF = 71,
+    VT_CLSID = 72,
+    VT_VERSIONED_STREAM = 73,
+    VT_BSTR_BLOB = 0xfff,
+    VT_VECTOR = 0x1000,
+    VT_ARRAY = 0x2000,
+    VT_BYREF = 0x4000,
+    VT_RESERVED = 0x8000,
+    VT_ILLEGAL = 0xffff,
+    VT_ILLEGALMASKED = 0xfff,
+    VT_TYPEMASK = 0xfff
+};
+
+typedef struct tagCSPLATFORM {
+    DWORD dwPlatformId;
+    DWORD dwVersionHi;
+    DWORD dwVersionLo;
+    DWORD dwProcessorArch;
+} CSPLATFORM;
+typedef struct tagQUERYCONTEXT {
+    DWORD dwContext;
+    CSPLATFORM Platform;
+    LCID Locale;
+    DWORD dwVersionHi;
+    DWORD dwVersionLo;
+} QUERYCONTEXT;
+typedef enum tagTYSPEC {
+    TYSPEC_CLSID = 0,
+    TYSPEC_FILEEXT = 1,
+    TYSPEC_MIMETYPE = 2,
+    TYSPEC_PROGID = 3,
+    TYSPEC_FILENAME = 4,
+    TYSPEC_PACKAGENAME = 5,
+    TYSPEC_OBJECTID = 6
+} TYSPEC;
+typedef struct __WIDL_wtypes_generated_name_00000000 {
+    DWORD tyspec;
+    union {
+        CLSID clsid;
+        LPOLESTR pFileExt;
+        LPOLESTR pMimeType;
+        LPOLESTR pProgId;
+        LPOLESTR pFileName;
+        struct {
+            LPOLESTR pPackageName;
+            GUID PolicyId;
+        } ByName;
+        struct {
+            GUID ObjectId;
+            GUID PolicyId;
+        } ByObjectId;
+    } tagged_union;
+} uCLSSPEC;
+#ifndef PROPERTYKEY_DEFINED
+#define PROPERTYKEY_DEFINED
+typedef struct _tagpropertykey {
+    GUID fmtid;
+    DWORD pid;
+} PROPERTYKEY;
+#endif /*PROPERTYKEY_DEFINED*/
+
+#endif  /* __IWinTypes_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WTYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl
new file mode 100644
index 0000000..bb76dc3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl
@@ -0,0 +1,848 @@
+/*
+ * Basic types used by COM interfaces
+ *
+ * Copyright 2002 Ove Kaaven
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "basetsd.h";
+import "guiddef.h";
+
+[
+  uuid(D3980A60-910C-1068-9341-00DD010F2F1C),
+  version(0.1),
+  pointer_default(unique)
+]
+
+interface IWinTypes
+{
+
+/******************** BASIC WIN32 TYPES ********************/
+cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */
+
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef long BOOL;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef short SHORT;
+typedef unsigned short USHORT;
+typedef long LONG;
+typedef unsigned long ULONG;
+typedef float FLOAT;
+
+typedef void *PVOID, *LPVOID;
+
+typedef DWORD *LPDWORD;
+
+typedef char CHAR;
+typedef [string] CHAR *LPSTR;
+typedef [string] const CHAR *LPCSTR;
+
+typedef wchar_t WCHAR;
+typedef [string] WCHAR *LPWSTR;
+typedef [string] const WCHAR *LPCWSTR;
+
+typedef boolean BOOLEAN;
+
+typedef DWORD COLORREF;
+
+typedef void *HANDLE;
+#define DECLARE_HANDLE(name) typedef void *name
+#define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name
+
+DECLARE_HANDLE(HMODULE);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HKEY);
+DECLARE_HANDLE(HDESK);
+DECLARE_HANDLE(HMF);
+DECLARE_HANDLE(HEMF);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRSRC);
+DECLARE_HANDLE(HSTR);
+DECLARE_HANDLE(HWINSTA);
+DECLARE_HANDLE(HKL);
+DECLARE_HANDLE(HGDIOBJ);
+
+typedef HANDLE HDWP;
+
+typedef LONG_PTR LRESULT;
+
+typedef LONG HRESULT;
+typedef DWORD LCID;
+typedef USHORT LANGID;
+
+typedef unsigned __int64 DWORDLONG;
+typedef __int64 LONGLONG;
+typedef unsigned __int64 ULONGLONG;
+
+typedef struct _LARGE_INTEGER {
+  LONGLONG QuadPart;
+} LARGE_INTEGER;
+
+typedef struct _ULARGE_INTEGER {
+  ULONGLONG QuadPart;
+} ULARGE_INTEGER;
+
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+  UCHAR Value[6];
+} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
+
+typedef struct _SID {
+  UCHAR Revision;
+  UCHAR SubAuthorityCount;
+  SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+  [size_is(SubAuthorityCount)] ULONG SubAuthority[*];
+} SID, *PSID;
+
+typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+
+typedef struct _ACL {
+  UCHAR AclRevision;
+  UCHAR Sbz1;
+  USHORT AclSize;
+  USHORT AceCount;
+  USHORT Sbz2;
+} ACL;
+typedef ACL *PACL;
+
+typedef struct _SECURITY_DESCRIPTOR {
+  UCHAR Revision;
+  UCHAR Sbz1;
+  SECURITY_DESCRIPTOR_CONTROL Control;
+  PSID Owner;
+  PSID Group;
+  PACL Sacl;
+  PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
+
+typedef struct _SECURITY_ATTRIBUTES
+{
+    DWORD nLength;
+    [size_is(nLength)] LPVOID lpSecurityDescriptor;
+    BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+
+typedef struct tagSIZE
+{
+    LONG cx;
+    LONG cy;
+} SIZE, *PSIZE, *LPSIZE;
+typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
+
+typedef struct tagPOINT
+{
+    LONG  x;
+    LONG  y;
+} POINT, *PPOINT, *LPPOINT;
+
+typedef struct _POINTL
+{
+    LONG x;
+    LONG y;
+} POINTL, *PPOINTL;
+
+typedef struct tagRECT
+{
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECT, *PRECT, *LPRECT;
+typedef const RECT *LPCRECT;
+
+typedef struct _RECTL
+{
+    LONG left;
+    LONG top;
+    LONG right;
+    LONG bottom;
+} RECTL, *PRECTL, *LPRECTL;
+typedef const RECTL *LPCRECTL;
+
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+
+cpp_quote("#endif /* winnt.h */")
+
+cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */
+typedef double DOUBLE;
+cpp_quote("#else")
+cpp_quote("typedef double DECLSPEC_ALIGN(8) DOUBLE;")
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _PALETTEENTRY_DEFINED")
+cpp_quote("#define _PALETTEENTRY_DEFINED")
+typedef struct tagPALETTEENTRY {
+  BYTE peRed;
+  BYTE peGreen;
+  BYTE peBlue;
+  BYTE peFlags;
+} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _LOGPALETTE_DEFINED")
+cpp_quote("#define _LOGPALETTE_DEFINED")
+typedef struct tagLOGPALETTE
+{
+  WORD palVersion;
+  WORD palNumEntries;
+  [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*];
+} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _SYSTEMTIME_")
+cpp_quote("#define _SYSTEMTIME_")
+typedef struct _SYSTEMTIME{
+        WORD wYear;
+        WORD wMonth;
+        WORD wDayOfWeek;
+        WORD wDay;
+        WORD wHour;
+        WORD wMinute;
+        WORD wSecond;
+        WORD wMilliseconds;
+} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _FILETIME_")
+cpp_quote("#define _FILETIME_")
+typedef struct _FILETIME {
+  DWORD dwLowDateTime;
+  DWORD dwHighDateTime;
+} FILETIME, *PFILETIME, *LPFILETIME;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _TEXTMETRIC_DEFINED")
+cpp_quote("#define _TEXTMETRIC_DEFINED")
+typedef struct tagTEXTMETRICA
+{
+    LONG      tmHeight;
+    LONG      tmAscent;
+    LONG      tmDescent;
+    LONG      tmInternalLeading;
+    LONG      tmExternalLeading;
+    LONG      tmAveCharWidth;
+    LONG      tmMaxCharWidth;
+    LONG      tmWeight;
+    LONG      tmOverhang;
+    LONG      tmDigitizedAspectX;
+    LONG      tmDigitizedAspectY;
+    BYTE      tmFirstChar;
+    BYTE      tmLastChar;
+    BYTE      tmDefaultChar;
+    BYTE      tmBreakChar;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;
+
+typedef struct tagTEXTMETRICW
+{
+    LONG      tmHeight;
+    LONG      tmAscent;
+    LONG      tmDescent;
+    LONG      tmInternalLeading;
+    LONG      tmExternalLeading;
+    LONG      tmAveCharWidth;
+    LONG      tmMaxCharWidth;
+    LONG      tmWeight;
+    LONG      tmOverhang;
+    LONG      tmDigitizedAspectX;
+    LONG      tmDigitizedAspectY;
+    WCHAR     tmFirstChar;
+    WCHAR     tmLastChar;
+    WCHAR     tmDefaultChar;
+    WCHAR     tmBreakChar;
+    BYTE      tmItalic;
+    BYTE      tmUnderlined;
+    BYTE      tmStruckOut;
+    BYTE      tmPitchAndFamily;
+    BYTE      tmCharSet;
+} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;
+cpp_quote("#endif")
+
+/******************** BASIC COM/OLE TYPES ********************/
+
+typedef WCHAR OLECHAR;
+typedef [string] OLECHAR *LPOLESTR;
+typedef [string] const OLECHAR *LPCOLESTR;
+cpp_quote("#ifndef __WINESRC__")
+cpp_quote("#define OLESTR(str) L##str")
+cpp_quote("#endif")
+
+typedef LONG SCODE;
+
+typedef struct _COAUTHIDENTITY {
+  [size_is(UserLength+1)] USHORT *User;
+  ULONG UserLength;
+  [size_is(DomainLength+1)] USHORT *Domain;
+  ULONG DomainLength;
+  [size_is(PasswordLength+1)] USHORT *Password;
+  ULONG PasswordLength;
+  ULONG Flags;
+} COAUTHIDENTITY;
+
+typedef struct _COAUTHINFO {
+  DWORD dwAuthnSvc;
+  DWORD dwAuthzSvc;
+  LPWSTR pwszServerPrincName;
+  DWORD dwAuthnLevel;
+  DWORD dwImpersonationLevel;
+  COAUTHIDENTITY *pAuthIdentityData;
+  DWORD dwCapabilities;
+} COAUTHINFO;
+
+typedef enum tagMEMCTX {
+  MEMCTX_TASK      = 1,
+  MEMCTX_SHARED    = 2,
+  MEMCTX_MACSYSTEM = 3,
+  MEMCTX_UNKNOWN   = -1,
+  MEMCTX_SAME      = -2
+} MEMCTX;
+
+cpp_quote("#ifndef _ROT_COMPARE_MAX_DEFINED")
+cpp_quote("#define _ROT_COMPARE_MAX_DEFINED")
+cpp_quote("#define ROT_COMPARE_MAX 2048")
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _ROTFLAGS_DEFINED")
+cpp_quote("#define _ROTFLAGS_DEFINED")
+cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1")
+cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2")
+cpp_quote("#endif")
+
+typedef enum tagCLSCTX {
+  CLSCTX_INPROC_SERVER        = 0x1,
+  CLSCTX_INPROC_HANDLER       = 0x2,
+  CLSCTX_LOCAL_SERVER         = 0x4,
+  CLSCTX_INPROC_SERVER16      = 0x8,
+  CLSCTX_REMOTE_SERVER        = 0x10,
+  CLSCTX_INPROC_HANDLER16     = 0x20,
+  CLSCTX_INPROC_SERVERX86     = 0x40,
+  CLSCTX_INPROC_HANDLERX86    = 0x80,
+  CLSCTX_ESERVER_HANDLER      = 0x100,
+  CLSCTX_NO_CODE_DOWNLOAD     = 0x400,
+  CLSCTX_NO_CUSTOM_MARSHAL    = 0x1000,
+  CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
+  CLSCTX_NO_FAILURE_LOG       = 0x4000,
+  CLSCTX_DISABLE_AAA          = 0x8000,
+  CLSCTX_ENABLE_AAA           = 0x10000,
+  CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
+} CLSCTX;
+
+cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)")
+cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
+cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
+
+typedef enum tagMSHLFLAGS {
+  MSHLFLAGS_NORMAL      = 0,
+  MSHLFLAGS_TABLESTRONG = 1,
+  MSHLFLAGS_TABLEWEAK   = 2,
+  MSHLFLAGS_NOPING      = 4
+} MSHLFLAGS;
+
+typedef enum tagMSHCTX {
+  MSHCTX_LOCAL            = 0,
+  MSHCTX_NOSHAREDMEM      = 1,
+  MSHCTX_DIFFERENTMACHINE = 2,
+  MSHCTX_INPROC           = 3,
+  MSHCTX_CROSSCTX         = 4
+} MSHCTX;
+
+/******************** BLOB TYPES ********************/
+
+typedef struct _BYTE_BLOB {
+  unsigned long clSize;
+  [size_is(clSize)] byte abData[];
+} BYTE_BLOB;
+typedef [unique] BYTE_BLOB *UP_BYTE_BLOB;
+
+typedef struct _FLAGGED_BYTE_BLOB {
+  unsigned long fFlags;
+  unsigned long clSize;
+  [size_is(clSize)] byte abData[];
+} FLAGGED_BYTE_BLOB;
+typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
+
+typedef struct _FLAGGED_WORD_BLOB {
+  unsigned long fFlags;
+  unsigned long clSize;
+  [size_is(clSize)] unsigned short asData[];
+} FLAGGED_WORD_BLOB;
+typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
+
+typedef struct _BYTE_SIZEDARR {
+  unsigned long clSize;
+  [size_is(clSize)] byte *pData;
+} BYTE_SIZEDARR;
+
+typedef struct _SHORT_SIZEDARR {
+  unsigned long clSize;
+  [size_is(clSize)] unsigned short *pData;
+} WORD_SIZEDARR;
+
+typedef struct _LONG_SIZEDARR {
+  unsigned long clSize;
+  [size_is(clSize)] unsigned long *pData;
+} DWORD_SIZEDARR;
+
+typedef struct _HYPER_SIZEDARR {
+  unsigned long clSize;
+  [size_is(clSize)] hyper *pData;
+} HYPER_SIZEDARR;
+
+/******************** GDI TYPES ********************/
+
+const unsigned long WDT_INPROC_CALL   = 0x48746457;
+const unsigned long WDT_REMOTE_CALL   = 0x52746457;
+const unsigned long WDT_INPROC64_CALL = 0x50746457;
+
+typedef union _userCLIPFORMAT switch(long fContext) u {
+  case WDT_INPROC_CALL: DWORD dwValue;
+  case WDT_REMOTE_CALL: LPWSTR pwszName;
+} userCLIPFORMAT;
+
+typedef [unique] userCLIPFORMAT *wireCLIPFORMAT;
+typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT;
+
+typedef struct tagRemHGLOBAL {
+  long fNullHGlobal;
+  unsigned long cbData;
+  [size_is(cbData)] byte data[];
+} RemHGLOBAL;
+
+typedef union _userHGLOBAL switch(long fContext) u {
+  case WDT_INPROC_CALL: long               hInproc;
+  case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote;
+  case WDT_INPROC64_CALL: __int64          hInproc64;
+} userHGLOBAL;
+
+typedef [unique] userHGLOBAL *wireHGLOBAL;
+
+typedef struct tagRemHMETAFILEPICT {
+  long mm;
+  long xExt;
+  long yExt;
+  unsigned long cbData;
+  [size_is(cbData)] byte data[];
+} RemHMETAFILEPICT;
+
+typedef union _userHMETAFILE switch(long fContext) u {
+  case WDT_INPROC_CALL: long       hInproc;
+  case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
+  case WDT_INPROC64_CALL: __int64  hInproc64;
+} userHMETAFILE;
+
+typedef [unique] userHMETAFILE *wireHMETAFILE;
+
+typedef struct _remoteMETAFILEPICT {
+  long mm;
+  long xExt;
+  long yExt;
+  userHMETAFILE *hMF;
+} remoteMETAFILEPICT;
+
+typedef union _userHMETAFILEPICT switch(long fContext) u {
+  case WDT_INPROC_CALL: long                hInproc;
+  case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote;
+  case WDT_INPROC64_CALL: __int64           hInproc64;
+} userHMETAFILEPICT;
+
+typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT;
+
+typedef struct tagRemHENHMETAFILE {
+  unsigned long cbData;
+  [size_is(cbData)] byte data[];
+} RemHENHMETAFILE;
+
+typedef union _userHENHMETAFILE switch(long fContext) u {
+  case WDT_INPROC_CALL: long       hInproc;
+  case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
+  case WDT_INPROC64_CALL: __int64  hInproc64;
+} userHENHMETAFILE;
+
+typedef [unique] userHENHMETAFILE *wireHENHMETAFILE;
+
+typedef struct tagRemHBITMAP
+{
+  unsigned long cbData;
+  [size_is(cbData)] byte data[];
+} RemHBITMAP;
+
+typedef struct _userBITMAP {
+  LONG bmType;
+  LONG bmWidth;
+  LONG bmHeight;
+  LONG bmWidthBytes;
+  WORD bmPlanes;
+  WORD bmBitsPixel;
+  ULONG cbSize;
+  [size_is(cbSize)] byte pBuffer[];
+} userBITMAP;
+
+typedef union _userHBITMAP switch(long fContext) u {
+  case WDT_INPROC_CALL: long        hInproc;
+  case WDT_REMOTE_CALL: userBITMAP *hRemote;
+  case WDT_INPROC64_CALL: __int64   hInproc64;
+} userHBITMAP;
+
+typedef [unique] userHBITMAP *wireHBITMAP;
+
+typedef struct tagRemHPALETTE {
+  unsigned long cbData;
+  [size_is(cbData)] byte data[];
+} RemHPALETTE;
+
+typedef struct tagrpcLOGPALETTE {
+  WORD palVersion;
+  WORD palNumEntries;
+  [size_is(palNumEntries)] PALETTEENTRY palPalEntry[];
+} rpcLOGPALETTE;
+
+typedef union _userHPALETTE switch(long fContext) u {
+  case WDT_INPROC_CALL: long           hInproc;
+  case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote;
+  case WDT_INPROC64_CALL: __int64      hInproc64;
+} userHPALETTE;
+
+typedef [unique] userHPALETTE *wireHPALETTE;
+
+cpp_quote("#if 0")
+DECLARE_WIREM_HANDLE(HGLOBAL);
+typedef HGLOBAL HLOCAL;
+DECLARE_WIREM_HANDLE(HBITMAP);
+DECLARE_WIREM_HANDLE(HPALETTE);
+DECLARE_WIREM_HANDLE(HENHMETAFILE);
+DECLARE_WIREM_HANDLE(HMETAFILE);
+cpp_quote("#endif")
+DECLARE_WIREM_HANDLE(HMETAFILEPICT);
+
+typedef union _RemotableHandle switch (long fContext) u
+{
+    case WDT_INPROC_CALL: long hInproc;
+    case WDT_REMOTE_CALL: long hRemote;
+} RemotableHandle;
+
+typedef [unique] RemotableHandle *wireHACCEL;
+typedef [unique] RemotableHandle *wireHBRUSH;
+typedef [unique] RemotableHandle *wireHDC;
+typedef [unique] RemotableHandle *wireHFONT;
+typedef [unique] RemotableHandle *wireHICON;
+typedef [unique] RemotableHandle *wireHMENU;
+typedef [unique] RemotableHandle *wireHWND;
+
+cpp_quote("#if 0") /* for IDL only (C/C++ defs are in windef.h) */
+DECLARE_WIREM_HANDLE(HACCEL);
+DECLARE_WIREM_HANDLE(HBRUSH);
+DECLARE_WIREM_HANDLE(HDC);
+DECLARE_WIREM_HANDLE(HFONT);
+DECLARE_WIREM_HANDLE(HICON);
+DECLARE_WIREM_HANDLE(HMENU);
+DECLARE_WIREM_HANDLE(HWND);
+
+typedef HICON HCURSOR;
+
+typedef struct tagMSG
+{
+    HWND   hwnd;
+    UINT   message;
+    WPARAM wParam;
+    LPARAM lParam;
+    DWORD  time;
+    POINT  pt;
+} MSG, *PMSG, *NPMSG, *LPMSG;
+
+cpp_quote("#endif")
+
+/******************** GUID TYPES ********************/
+
+cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */
+typedef GUID *REFGUID;
+typedef IID *REFIID;
+typedef CLSID *REFCLSID;
+typedef FMTID *REFFMTID;
+cpp_quote("#endif")
+
+/******************** MISC TYPES ********************/
+
+typedef enum tagDVASPECT {
+  DVASPECT_CONTENT   = 1,
+  DVASPECT_THUMBNAIL = 2,
+  DVASPECT_ICON      = 4,
+  DVASPECT_DOCPRINT  = 8
+} DVASPECT;
+
+typedef enum tagSTGC {
+  STGC_DEFAULT       = 0,
+  STGC_OVERWRITE     = 1,
+  STGC_ONLYIFCURRENT = 2,
+  STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
+  STGC_CONSOLIDATE   = 8
+} STGC;
+
+typedef enum tagSTGMOVE {
+  STGMOVE_MOVE        = 0,
+  STGMOVE_COPY        = 1,
+  STGMOVE_SHALLOWCOPY = 2
+} STGMOVE;
+
+typedef enum tagSTATFLAG {
+  STATFLAG_DEFAULT = 0,
+  STATFLAG_NONAME  = 1,
+  STATFLAG_NOOPEN  = 2
+} STATFLAG;
+
+/******************** OLE Automation ********************/
+
+cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */
+typedef double DATE;
+cpp_quote("#else")
+cpp_quote("typedef double DECLSPEC_ALIGN(8) DATE;")
+cpp_quote("#endif")
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagCY {
+  LONGLONG int64;
+} CY;
+cpp_quote("#else") /* C/C++ defs */
+cpp_quote("#ifndef _tagCY_DEFINED")
+cpp_quote("#define _tagCY_DEFINED")
+cpp_quote("typedef union tagCY {")
+cpp_quote("    struct {")
+cpp_quote("#ifdef WORDS_BIGENDIAN")
+cpp_quote("        LONG  Hi;")
+cpp_quote("        ULONG Lo;")
+cpp_quote("#else")
+cpp_quote("        ULONG Lo;")
+cpp_quote("        LONG  Hi;")
+cpp_quote("#endif")
+cpp_quote("    } DUMMYSTRUCTNAME;")
+cpp_quote("    LONGLONG int64;")
+cpp_quote("} CY;")
+cpp_quote("#endif")
+cpp_quote("#endif")
+
+typedef CY *LPCY;
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagDEC {
+  USHORT wReserved;
+  BYTE scale;
+  BYTE sign;
+  ULONG Hi32;
+  ULONGLONG Lo64;
+} DECIMAL;
+cpp_quote("#else") /* C/C++ defs */
+cpp_quote("typedef struct tagDEC {")
+cpp_quote("  USHORT wReserved;")
+cpp_quote("  union {")
+cpp_quote("    struct {")
+cpp_quote("      BYTE scale;")
+cpp_quote("      BYTE sign;")
+cpp_quote("    } DUMMYSTRUCTNAME;")
+cpp_quote("    USHORT signscale;")
+cpp_quote("  } DUMMYUNIONNAME;")
+cpp_quote("  ULONG Hi32;")
+cpp_quote("  union {")
+cpp_quote("    struct {")
+cpp_quote("#ifdef WORDS_BIGENDIAN")
+cpp_quote("      ULONG Mid32;")
+cpp_quote("      ULONG Lo32;")
+cpp_quote("#else")
+cpp_quote("      ULONG Lo32;")
+cpp_quote("      ULONG Mid32;")
+cpp_quote("#endif")
+cpp_quote("    } DUMMYSTRUCTNAME1;")
+cpp_quote("    ULONGLONG Lo64;")
+cpp_quote("  } DUMMYUNIONNAME1;")
+cpp_quote("} DECIMAL;")
+cpp_quote("#endif")
+cpp_quote("#define DECIMAL_NEG ((BYTE)0x80)")
+cpp_quote("#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)")
+
+typedef DECIMAL *LPDECIMAL;
+
+typedef [unique] FLAGGED_WORD_BLOB *wireBSTR;
+typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR;
+typedef BSTR *LPBSTR;
+
+typedef short VARIANT_BOOL;
+typedef VARIANT_BOOL _VARIANT_BOOL;
+cpp_quote("#define VARIANT_TRUE  ((VARIANT_BOOL)0xFFFF)")
+cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)")
+
+typedef struct tagBSTRBLOB {
+  ULONG cbSize;
+  [size_is(cbSize)] BYTE *pData;
+} BSTRBLOB, *LPBSTRBLOB;
+
+cpp_quote("#ifndef _tagBLOB_DEFINED")
+cpp_quote("#define _tagBLOB_DEFINED")
+cpp_quote("#define _BLOB_DEFINED")
+cpp_quote("#define _LPBLOB_DEFINED")
+typedef struct tagBLOB {
+  ULONG cbSize;
+  [size_is(cbSize)] BYTE *pBlobData;
+} BLOB, *LPBLOB;
+cpp_quote("#endif")
+
+typedef struct tagCLIPDATA {
+  ULONG cbSize;
+  long ulClipFmt;
+  [size_is(cbSize-sizeof(long))] BYTE *pClipData;
+} CLIPDATA;
+cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))")
+
+typedef ULONG PROPID;
+
+/******************** VARTYPE ********************/
+
+typedef unsigned short VARTYPE;
+enum VARENUM {
+  VT_EMPTY           = 0,
+  VT_NULL            = 1,
+  VT_I2              = 2,
+  VT_I4              = 3,
+  VT_R4              = 4,
+  VT_R8              = 5,
+  VT_CY              = 6,
+  VT_DATE            = 7,
+  VT_BSTR            = 8,
+  VT_DISPATCH        = 9,
+  VT_ERROR           = 10,
+  VT_BOOL            = 11,
+  VT_VARIANT         = 12,
+  VT_UNKNOWN         = 13,
+  VT_DECIMAL         = 14,
+  VT_I1              = 16,
+  VT_UI1             = 17,
+  VT_UI2             = 18,
+  VT_UI4             = 19,
+  VT_I8              = 20,
+  VT_UI8             = 21,
+  VT_INT             = 22,
+  VT_UINT            = 23,
+  VT_VOID            = 24,
+  VT_HRESULT         = 25,
+  VT_PTR             = 26,
+  VT_SAFEARRAY       = 27,
+  VT_CARRAY          = 28,
+  VT_USERDEFINED     = 29,
+  VT_LPSTR           = 30,
+  VT_LPWSTR          = 31,
+  VT_RECORD          = 36,
+  VT_INT_PTR         = 37,
+  VT_UINT_PTR        = 38,
+  VT_FILETIME        = 64,
+  VT_BLOB            = 65,
+  VT_STREAM          = 66,
+  VT_STORAGE         = 67,
+  VT_STREAMED_OBJECT = 68,
+  VT_STORED_OBJECT   = 69,
+  VT_BLOB_OBJECT     = 70,
+  VT_CF              = 71,
+  VT_CLSID           = 72,
+  VT_VERSIONED_STREAM= 73,
+  VT_BSTR_BLOB       = 0x0fff,
+  VT_VECTOR          = 0x1000,
+  VT_ARRAY           = 0x2000,
+  VT_BYREF           = 0x4000,
+  VT_RESERVED        = 0x8000,
+  VT_ILLEGAL         = 0xffff,
+  VT_ILLEGALMASKED   = 0x0fff,
+  VT_TYPEMASK        = 0x0fff
+};
+
+typedef struct tagCSPLATFORM
+{
+    DWORD dwPlatformId;
+    DWORD dwVersionHi;
+    DWORD dwVersionLo;
+    DWORD dwProcessorArch;
+} CSPLATFORM;
+
+typedef struct tagQUERYCONTEXT
+{
+    DWORD dwContext;
+    CSPLATFORM Platform;
+    LCID Locale;
+    DWORD dwVersionHi;
+    DWORD dwVersionLo;
+} QUERYCONTEXT;
+
+typedef [v1_enum] enum tagTYSPEC 
+{
+    TYSPEC_CLSID,
+    TYSPEC_FILEEXT,
+    TYSPEC_MIMETYPE,
+    TYSPEC_PROGID,
+    TYSPEC_FILENAME,
+    TYSPEC_PACKAGENAME,
+    TYSPEC_OBJECTID
+} TYSPEC;
+
+typedef union switch(DWORD tyspec)
+{
+    case TYSPEC_CLSID:
+        CLSID clsid;
+    case TYSPEC_FILEEXT:
+        LPOLESTR pFileExt;
+    case TYSPEC_MIMETYPE:
+        LPOLESTR pMimeType;
+    case TYSPEC_PROGID:
+        LPOLESTR pProgId;
+    case TYSPEC_FILENAME:
+        LPOLESTR pFileName;
+    case TYSPEC_PACKAGENAME:
+        struct
+        {
+            LPOLESTR pPackageName;
+            GUID PolicyId;
+        } ByName;
+    case TYSPEC_OBJECTID:
+        struct
+        {
+            GUID ObjectId;
+            GUID PolicyId;
+        } ByObjectId;
+} uCLSSPEC;
+
+cpp_quote("#ifndef PROPERTYKEY_DEFINED")
+cpp_quote("#define PROPERTYKEY_DEFINED")
+typedef struct _tagpropertykey
+{
+    GUID fmtid;
+    DWORD pid;
+} PROPERTYKEY;
+cpp_quote("#endif /*PROPERTYKEY_DEFINED*/")
+
+} /* interface IWinTypes */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl
new file mode 100644
index 0000000..b023085
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl
@@ -0,0 +1,1359 @@
+/*
+ * Copyright 2008 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+    helpstring("WUAPI 2.0 Type Library"),
+    uuid(b596cc9f-56e5-419e-a622-e01bb457431e),
+    version(2.0)
+]
+library WUApiLib {
+
+importlib("stdole2.tlb");
+
+interface ICategoryCollection;
+interface IStringCollection;
+interface IUpdateCollection;
+interface IUpdateDownloader;
+interface IUpdateInstaller;
+interface IUpdateSearcher;
+
+typedef [public] enum tagDownloadPriority
+{
+    dpLow    = 1,
+    dpNormal = 2,
+    dpHigh   = 3,
+} DownloadPriority;
+
+typedef [public] enum tagServerSelection
+{
+    ssDefault       = 0,
+    ssManagedServer = 1,
+    ssWindowsUpdate = 2,
+    ssOthers        = 3,
+} ServerSelection;
+
+typedef [public] enum tagAutomaticUpdatesNotificationLevel
+{
+    aunlNotConfigured,
+    aunlDisabled,
+    aunlNotifyBeforeDownload,
+    aunlNotifyBeforeInstallation,
+    aunlScheduledInstallation,
+} AutomaticUpdatesNotificationLevel;
+
+typedef [public] enum tagAutomaticUpdatesScheduledInstallationDay
+{
+    ausidEveryDay,
+    ausidEverySunday,
+    ausidEveryMonday,
+    ausidEveryTuesday,
+    ausidEveryWednesday,
+    ausidEveryThursday,
+    ausidEveryFriday,
+    ausidEverySaturday,
+} AutomaticUpdatesScheduledInstallationDay;
+
+typedef [public] enum tagDownloadPhase
+{
+    dphInitializing,
+    dphDownloading,
+    dphVerifying,
+} DownloadPhase;
+
+typedef [public] enum tagOperationResultCode
+{
+    orcNotStarted,
+    orcInProgress,
+    orcSucceeded,
+    orcSucceededWithErrors,
+    orcFailed,
+    orcAborted,
+} OperationResultCode;
+
+typedef [public] enum tagUpdateExceptionContext
+{
+    uecGeneral = 1,
+    uecWindowsDriver,
+    uecWindowsInstaller
+} UpdateExceptionContext;
+
+typedef [public] enum tagInstallationImpact
+{
+    iiNormal,
+    iiMinor,
+    iiRequiresExclusiveHandling
+} InstallationImpact;
+
+typedef [public] enum tagInstallationRebootBehavior
+{
+    irbNeverReboots,
+    irbAlwaysRequiresReboot,
+    irbCanRequestReboot
+} InstallationRebootBehavior;
+
+typedef [public] enum tagUpdateType
+{
+    utSoftware = 1,
+    utDriver
+} UpdateType;
+
+typedef [public] enum tagUpdateOperation
+{
+    uoInstallation = 1,
+    uoUninstallation
+} UpdateOperation;
+
+typedef [public] enum tagDeploymentAction
+{
+    daNone,
+    daInstallation,
+    daUninstallation,
+    daDetection
+} DeploymentAction;
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2),
+    pointer_default(unique)
+]
+interface IAutomaticUpdatesSettings : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT NotificationLevel( [out, retval] AutomaticUpdatesNotificationLevel *retval );
+
+    [propput, id(0x60020001)]
+    HRESULT NotificationLevel( [in] AutomaticUpdatesNotificationLevel value );
+
+    [propget, id(0x60020002)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Required( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT ScheduledInstallationDay( [out, retval] AutomaticUpdatesScheduledInstallationDay *retval );
+
+    [propput, id(0x60020004)]
+    HRESULT ScheduledInstallationDay( [in] AutomaticUpdatesScheduledInstallationDay value );
+
+    [propget, id(0x60020005)]
+    HRESULT ScheduledInstallationTime( [out, retval] LONG *retval );
+
+    [propput, id(0x60020005)]
+    HRESULT ScheduledInstallationTime( [in] LONG value );
+
+    [id(0x60020006)]
+    HRESULT Refresh();
+
+    [id(0x60020007)]
+    HRESULT Save();
+}
+
+[
+    object,
+    uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+    hidden
+]
+interface IAutomaticUpdates : IDispatch
+{
+    HRESULT DetectNow();
+    HRESULT Pause();
+    HRESULT Resume();
+    HRESULT ShowSettingsDialog();
+
+    [propget]
+    HRESULT Settings(
+        [out, retval] IAutomaticUpdatesSettings **retval);
+
+    [propget]
+    HRESULT ServiceEnabled(
+        [out, retval] VARIANT_BOOL *retval);
+
+    HRESULT EnableService();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8),
+    pointer_default(unique),
+]
+interface IWebProxy : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT Address( [out, retval] BSTR *retval );
+
+    [propput, id(0x60020001)]
+    HRESULT Address( [in] BSTR value );
+
+    [propget, id(0x60020002)]
+    HRESULT BypassList( [out, retval] IStringCollection **retval );
+
+    [propput, id(0x60020002)]
+    HRESULT BypassList( [in] IStringCollection *value );
+
+    [propget, id(0x60020003)]
+    HRESULT BypassProxyOnLocal( [out, retval] VARIANT_BOOL *retval );
+
+    [propput, id(0x60020003)]
+    HRESULT BypassProxyOnLocal( [in] VARIANT_BOOL value );
+
+    [propget, id(0x60020004)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020005)]
+    HRESULT UserName( [out, retval] BSTR *retval );
+
+    [propput, id(0x60020005)]
+    HRESULT UserName( [in] BSTR value );
+
+    [id(0x60020006)]
+    HRESULT SetPassword( [in] BSTR value );
+
+    [id(0x60020007)]
+    HRESULT PromptForCredentials( [in, unique] IUnknown *parentWindow,
+                                  [in] BSTR title );
+
+    [restricted, id(0x60020008)]
+    HRESULT PromptForCredentialsFromHwnd( [in, unique] HWND parentWindow,
+                                          [in] BSTR title );
+
+    [propget, id(0x60020009)]
+    HRESULT AutoDetect( [out, retval] VARIANT_BOOL *retval );
+
+    [propput, id(0x60020009)]
+    HRESULT AutoDetect( [in] VARIANT_BOOL value );
+}
+
+[
+    object,
+    uuid(816858a4-260d-4260-933a-2585f1abc76b),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface IUpdateSession : IDispatch
+{
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT ReadOnly(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propget]
+    HRESULT WebProxy(
+        [out, retval] IWebProxy **retval);
+
+    [propput]
+    HRESULT WebProxy(
+        [in, unique] IWebProxy *value);
+
+    HRESULT CreateUpdateSearcher(
+        [out, retval] IUpdateSearcher **retval);
+
+    HRESULT CreateUpdateDownloader(
+        [out, retval] IUpdateDownloader **retval);
+
+    HRESULT CreateUpdateInstaller(
+        [out, retval] IUpdateInstaller **retval);
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(7c907864-346c-4aeb-8f3f-57da289f969f),
+    pointer_default(unique),
+]
+interface IImageInformation : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AltText( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Height( [out, retval] LONG *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Source( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Width( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b),
+    pointer_default(unique),
+]
+interface ICategory : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Name( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020001)]
+    HRESULT CategoryID( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Children( [out, retval] ICategoryCollection **retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Description( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Image( [out, retval] IImageInformation **retval );
+
+    [propget, id(0x60020005)]
+    HRESULT Order( [out, retval] LONG *retval );
+
+    [propget, id(0x60020006)]
+    HRESULT Parent( [out, retval] ICategory **retval );
+
+    [propget, id(0x60020007)]
+    HRESULT Type( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020008)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37),
+    pointer_default(unique),
+]
+interface ICategoryCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                [out, retval] ICategory **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3),
+    pointer_default(unique),
+    hidden
+]
+interface IStringCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] BSTR *retval );
+
+    [propput, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                [in] BSTR value );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [id(0x60020003)]
+    HRESULT Add( [in] BSTR value,
+                 [out, retval] LONG *retval );
+
+    [id(0x60020004)]
+    HRESULT Clear();
+
+    [id(0x60020005)]
+    HRESULT Copy( [out, retval] IStringCollection **retval );
+
+    [id(0x60020006)]
+    HRESULT Insert( [in] LONG index,
+                    [in] BSTR value );
+
+    [id(0x60020007)]
+    HRESULT RemoveAt( [in] LONG index );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6),
+    pointer_default(unique),
+]
+interface IUpdateException : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Message( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Context( [out, retval] UpdateExceptionContext *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(503626a3-8e14-4729-9355-0fe664bd2321),
+    pointer_default(unique),
+]
+interface IUpdateExceptionCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdateException **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(46297823-9940-4c09-aed9-cd3ea6d05968),
+    pointer_default(unique)
+]
+interface IUpdateIdentity : IDispatch
+{
+    [propget, id(0x60020002)]
+    HRESULT RevisionNumber( [out, retval] LONG *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT UpdateID( [out, retval] BSTR *retval );
+}
+
+[
+    ,
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d9a59339-e245-4dbd-9686-4d5763e39624),
+    pointer_default(unique),
+]
+interface IInstallationBehavior : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT CanRequestUserInput( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT Impact( [out, retval] InstallationImpact *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT RebootBehavior( [out, retval] InstallationRebootBehavior *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT RequiresNetworkConnectivity( [out, retval] VARIANT_BOOL *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02),
+    pointer_default(unique),
+]
+interface IUpdateDownloadContent : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT DownloadUrl( [out, retval] BSTR *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba),
+    pointer_default(unique),
+]
+interface IUpdateDownloadContentCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdateDownloadContent **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(6a92b07a-d821-4682-b423-5c805022cc4d),
+    pointer_default(unique),
+]
+interface IUpdate : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Title( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020001)]
+    HRESULT AutoSelectOnWebSites( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT BundledUpdates( [out, retval] IUpdateCollection **retval );
+
+    [propget, id(0x60020003)]
+    HRESULT CanRequireSource( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Categories( [out, retval] ICategoryCollection **retval );
+
+    [propget, id(0x60020005)]
+    HRESULT Deadline( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020006)]
+    HRESULT DeltaCompressedContentAvailable( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020007)]
+    HRESULT DeltaCompressedContentPreferred( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020008)]
+    HRESULT Description( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020009)]
+    HRESULT EulaAccepted( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x6002000a)]
+    HRESULT EulaText( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000b)]
+    HRESULT HandlerID( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000c)]
+    HRESULT Identity( [out, retval] IUpdateIdentity **retval );
+
+    [propget, id(0x6002000d)]
+    HRESULT Image( [out, retval] IImageInformation **retval );
+
+    [propget, id(0x6002000e)]
+    HRESULT InstallationBehavior( [out, retval] IInstallationBehavior **retval );
+
+    [propget, id(0x6002000f)]
+    HRESULT IsBeta( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020010)]
+    HRESULT IsDownloaded( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020011)]
+    HRESULT IsHidden( [out, retval] VARIANT_BOOL *retval );
+
+    [propput, id(0x60020011)]
+    HRESULT IsHidden( [in] VARIANT_BOOL value );
+
+    [propget, id(0x60020012)]
+    HRESULT IsInstalled( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020013)]
+    HRESULT IsMandatory( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020014)]
+    HRESULT IsUninstallable( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020015)]
+    HRESULT Languages( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020016)]
+    HRESULT LastDeploymentChangeTime( [out, retval] DATE *retval );
+
+    [propget, id(0x60020017)]
+    HRESULT MaxDownloadSize( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020018)]
+    HRESULT MinDownloadSize( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020019)]
+    HRESULT MoreInfoUrls( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x6002001a)]
+    HRESULT MsrcSeverity( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002001b)]
+    HRESULT RecommendedCpuSpeed( [out, retval] LONG *retval );
+
+    [propget, id(0x6002001c)]
+    HRESULT RecommendedHardDiskSpace( [out, retval] LONG *retval );
+
+    [propget, id(0x6002001d)]
+    HRESULT RecommendedMemory( [out, retval] LONG *retval );
+
+    [propget, id(0x6002001e)]
+    HRESULT ReleaseNotes( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002001f)]
+    HRESULT SecurityBulletinIDs( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020021)]
+    HRESULT SupersededUpdateIDs( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020022)]
+    HRESULT SupportUrl( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020023)]
+    HRESULT Type( [out, retval] UpdateType *retval );
+
+    [propget, id(0x60020024)]
+    HRESULT UninstallationNotes( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020025)]
+    HRESULT UninstallationBehavior( [out, retval] IInstallationBehavior **retval );
+
+    [propget, id(0x60020026)]
+    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x60020028)]
+    HRESULT KBArticleIDs( [out, retval] IStringCollection **retval );
+
+    [id(0x60020027)]
+    HRESULT AcceptEula();
+
+    [propget, id(0x60020029)]
+    HRESULT DeploymentAction( [out, retval] DeploymentAction *retval );
+
+    [id(0x6002002a)]
+    HRESULT CopyFromCache( [in, ref] BSTR path,
+                           [in] VARIANT_BOOL toExtractCabFiles );
+
+    [propget, id(0x6002002b)]
+    HRESULT DownloadPriority( [out, retval] DownloadPriority *retval );
+
+    [propget, id(0x6002002c)]
+    HRESULT DownloadContents( [out, retval] IUpdateDownloadContentCollection **retval );
+}
+
+[
+
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(07f7438c-7709-4ca5-b518-91279288134e),
+    pointer_default(unique),
+    hidden
+]
+interface IUpdateCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdate **retval );
+
+    [propput, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [in] IUpdate *value );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+    [id(0x60020003)]
+    HRESULT Add( [in] IUpdate *value,
+                 [out, retval] LONG *retval );
+
+    [id(0x60020004)]
+    HRESULT Clear();
+
+    [id(0x60020005)]
+    HRESULT Copy( [out, retval] IUpdateCollection **retval );
+
+    [id(0x60020006)]
+    HRESULT Insert( [in] LONG index,
+                [in] IUpdate *value );
+
+    [id(0x60020007)]
+    HRESULT RemoveAt( [in] LONG index );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b),
+    pointer_default(unique),
+]
+interface ISearchJob : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+    [id(0x60020003)]
+    HRESULT CleanUp();
+
+    [id(0x60020004)]
+    HRESULT RequestAbort();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d40cff62-e08c-4498-941a-01e25f0fd33c),
+    pointer_default(unique),
+]
+interface ISearchResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT RootCategories( [out, retval] ICategoryCollection **retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Warnings( [out, retval] IUpdateExceptionCollection **retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff),
+    pointer_default(unique),
+]
+interface IUpdateHistoryEntry : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT Operation( [out, retval] UpdateOperation *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT Date( [out, retval] DATE *retval );
+
+    [propget, id(0x60020005)]
+    HRESULT UpdateIdentity( [out, retval] IUpdateIdentity **retval );
+
+    [propget, id(0x60020006)]
+    HRESULT Title( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020007)]
+    HRESULT Description( [out, retval] BSTR *retval );
+
+    [propget, id(0x60020008)]
+    HRESULT UnmappedResultCode( [out, retval] LONG *retval );
+
+    [propget, id(0x60020009)]
+    HRESULT ClientApplicationID( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000a)]
+    HRESULT ServerSelection( [out, retval] ServerSelection *retval );
+
+    [propget, id(0x6002000b)]
+    HRESULT ServiceID( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000c)]
+    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );
+
+    [propget, id(0x6002000d)]
+    HRESULT UninstallationNotes( [out, retval] BSTR *retval );
+
+    [propget, id(0x6002000e)]
+    HRESULT SupportUrl( [out, retval] BSTR *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(a7f04f3c-a290-435b-aadf-a116c3357a5c),
+    pointer_default(unique),
+]
+interface IUpdateHistoryEntryCollection : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT Item( [in] LONG index,
+                  [out, retval] IUpdateHistoryEntry **retval );
+
+    [propget, id(DISPID_NEWENUM)]
+    HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+    [propget, id(0x60020001)]
+    HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface IUpdateSearcher : IDispatch
+{
+    [propget]
+    HRESULT CanAutomaticallyUpgradeService(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT CanAutomaticallyUpgradeService(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT IncludePotentiallySupersededUpdates(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT IncludePotentiallySupersededUpdates(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT ServerSelection(
+        [out, retval] ServerSelection *retval);
+
+    [propput]
+    HRESULT ServerSelection(
+        [in] ServerSelection value);
+
+    HRESULT BeginSearch(
+        [in] BSTR criteria,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] ISearchJob **retval);
+
+    HRESULT EndSearch(
+        [in] ISearchJob *searchJob,
+        [out, retval] ISearchResult **retval);
+
+    HRESULT EscapeString(
+        [in] BSTR unescaped,
+        [out, retval] BSTR *retval);
+
+    HRESULT QueryHistory(
+        [in] LONG startIndex,
+        [in] LONG count,
+        [out, retval] IUpdateHistoryEntryCollection **retval);
+
+    HRESULT Search(
+        [in] BSTR criteria,
+        [out, retval] ISearchResult **retval);
+
+    [propget]
+    HRESULT Online(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT Online(
+        [in] VARIANT_BOOL value);
+
+    HRESULT GetTotalHistoryCount(
+        [out, retval] LONG *retval);
+
+    [propget]
+    HRESULT ServiceID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ServiceID(
+        [in] BSTR value);
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1),
+    pointer_default(unique),
+]
+interface IUpdateDownloadResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a),
+    pointer_default(unique),
+]
+interface IDownloadProgress : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT CurrentUpdateBytesDownloaded( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT CurrentUpdateBytesToDownload( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );
+
+    [propget, id(0x60020004)]
+    HRESULT PercentComplete( [out, retval] LONG *retval );
+
+    [propget, id(0x60020005)]
+    HRESULT TotalBytesDownloaded( [out, retval] DECIMAL *retval );
+
+    [propget, id(0x60020006)]
+    HRESULT TotalBytesToDownload( [out, retval] DECIMAL *retval );
+
+    [id(0x60020007)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateDownloadResult **retval );
+
+
+    [propget, id(0x60020008)]
+    HRESULT CurrentUpdateDownloadPhase( [out, retval] DownloadPhase *retval );
+
+    [propget, id(0x60020009)]
+    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(c574de85-7358-43f6-aae8-8697e62d8ba7),
+    pointer_default(unique),
+]
+interface IDownloadJob : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+    [id(0x60020004)]
+    HRESULT CleanUp();
+
+    [id(0x60020005)]
+    HRESULT GetProgress( [out, retval] IDownloadProgress **retval );
+
+    [id(0x60020006)]
+    HRESULT RequestAbort();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144),
+    pointer_default(unique),
+]
+interface IDownloadResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [id(0x60020003)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateDownloadResult **retval );
+}
+
+[
+    object,
+    uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+    hidden
+]
+interface IUpdateDownloader : IDispatch
+{
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT IsForced(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT IsForced(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT Priority(
+        [out, retval] DownloadPriority *retval);
+
+    [propput]
+    HRESULT Priority(
+        [in] DownloadPriority value);
+
+    [propget]
+    HRESULT Updates(
+        [out, retval] IUpdateCollection **retval);
+
+    [propput]
+    HRESULT Updates(
+        [in] IUpdateCollection *value);
+
+    HRESULT BeginDownload(
+        [in] IUnknown *onProgressChanged,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] IDownloadJob **retval);
+
+    HRESULT Download(
+        [out, retval] IDownloadResult **retval);
+
+    HRESULT EndDownload(
+        [in] IDownloadJob *value,
+        [out, retval] IDownloadResult **retval);
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad),
+    pointer_default(unique),
+]
+interface IUpdateInstallationResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(345c8244-43a3-4e32-a368-65f073b76f36),
+    pointer_default(unique),
+]
+interface IInstallationProgress : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT PercentComplete( [out, retval] LONG *retval );
+
+    [id(0x60020004)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateInstallationResult **retval );
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(5c209f0b-bad5-432a-9556-4699bed2638a),
+    pointer_default(unique),
+]
+interface IInstallationJob : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+    [id(0x60020004)]
+    HRESULT CleanUp();
+
+    [id(0x60020005)]
+    HRESULT GetProgress( [out, retval] IInstallationProgress **retval );
+
+    [id(0x60020006)]
+    HRESULT RequestAbort();
+}
+
+[
+    object,
+    oleautomation,
+    dual,
+    nonextensible,
+    uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a),
+    pointer_default(unique),
+]
+interface IInstallationResult : IDispatch
+{
+    [propget, id(0x60020001)]
+    HRESULT HResult( [out, retval] LONG *retval );
+
+    [propget, id(0x60020002)]
+    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );
+
+    [propget, id(0x60020003)]
+    HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+    [id(0x60020004)]
+    HRESULT GetUpdateResult( [in] LONG updateIndex,
+                             [out, retval] IUpdateInstallationResult **retval );
+}
+
+[
+    object,
+    uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),
+    oleautomation,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface IUpdateInstaller : IDispatch
+{
+    [propget]
+    HRESULT ClientApplicationID(
+        [out, retval] BSTR *retval);
+
+    [propput]
+    HRESULT ClientApplicationID(
+        [in] BSTR value);
+
+    [propget]
+    HRESULT IsForced(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT IsForced(
+        [in] VARIANT_BOOL value);
+
+    [propget, restricted]
+    HRESULT ParentHwnd(
+        [out, retval] HWND *retval);
+
+    [propput, restricted]
+    HRESULT ParentHwnd(
+        [in, unique] HWND value);
+
+    [propput]
+    HRESULT ParentWindow(
+        [in, unique] IUnknown *value);
+
+    [propget]
+    HRESULT ParentWindow(
+        [out, retval] IUnknown **retval);
+
+    [propget]
+    HRESULT Updates(
+        [out, retval] IUpdateCollection **retval);
+
+    [propput]
+    HRESULT Updates(
+        [in] IUpdateCollection *value);
+
+    HRESULT BeginInstall(
+        [in] IUnknown *onProgressChanged,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] IInstallationJob **retval);
+
+    HRESULT BeginUninstall(
+        [in] IUnknown *onProgressChanged,
+        [in] IUnknown *onCompleted,
+        [in] VARIANT state,
+        [out, retval] IInstallationJob **retval);
+
+    HRESULT EndInstall(
+        [in] IInstallationJob *value,
+        [out, retval] IInstallationResult **retval);
+
+    HRESULT EndUninstall(
+        [in] IInstallationJob *value,
+        [out, retval] IInstallationResult **retval);
+
+    HRESULT Install(
+        [out, retval] IInstallationResult **retval);
+
+    HRESULT RunWizard(
+        [in, defaultvalue("")] BSTR dialogTitle,
+        [out, retval] IInstallationResult **retval);
+
+    [propget]
+    HRESULT IsBusy(
+        [out, retval] VARIANT_BOOL *retval);
+
+    HRESULT Uninstall(
+        [out, retval] IInstallationResult **retval);
+
+    [propget]
+    HRESULT AllowSourcePrompts(
+        [out, retval] VARIANT_BOOL *retval);
+
+    [propput]
+    HRESULT AllowSourcePrompts(
+        [in] VARIANT_BOOL value);
+
+    [propget]
+    HRESULT RebootRequiredBeforeInstallation(
+        [out, retval] VARIANT_BOOL *retval);
+}
+
+[
+    object,
+    uuid(ADE87BF7-7B56-4275-8FAB-B9B0E591844B),
+    oleautomation,
+    hidden,
+    dual,
+    nonextensible,
+    pointer_default(unique),
+]
+interface ISystemInformation : IDispatch
+{
+    [propget]
+    HRESULT OemHardwareSupportLink(
+        [out, retval] BSTR *retval);
+
+    [propget]
+    HRESULT RebootRequired(
+        [out, retval] VARIANT_BOOL *retval);
+}
+
+[
+    helpstring("AutomaticUpdates Class"),
+    threading(both),
+    progid("Microsoft.Update.AutoUpdate.1"),
+    vi_progid("Microsoft.Update.AutoUpdate"),
+    uuid(bfe18e9c-6d87-4450-b37c-e02f0b373803)
+]
+coclass AutomaticUpdates { interface IAutomaticUpdates; }
+
+[
+    helpstring("UpdateSession Class"),
+    threading(both),
+    progid("Microsoft.Update.Session.1"),
+    vi_progid("Microsoft.Update.Session"),
+    uuid(4cb43d7f-7eee-4906-8698-60da1c38f2fe)
+]
+coclass UpdateSession { interface IUpdateSession; }
+
+[
+    helpstring("SystemInformation Class"),
+    threading(both),
+    progid("Microsoft.Update.SystemInfo.1"),
+    vi_progid("Microsoft.Update.SystemInfo"),
+    uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133)
+]
+coclass SystemInformation { interface ISystemInformation; }
+
+} /* WUApiLib */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h
new file mode 100644
index 0000000..4a363af
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2004 Chris Morgan
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _XCMC_H
+#define _XCMC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef char                CMC_sint8;
+typedef short               CMC_sint16;
+typedef LONG                CMC_sint32;
+typedef unsigned short int  CMC_uint16;
+typedef ULONG               CMC_uint32;
+typedef void*               CMC_buffer;
+typedef char*               CMC_string;
+
+typedef CMC_uint16          CMC_boolean;
+typedef CMC_sint32          CMC_enum;
+typedef CMC_uint32          CMC_return_code;
+typedef CMC_uint32          CMC_flags;
+typedef CMC_string          CMC_object_identifier;
+typedef CMC_uint32          CMC_session_id;
+typedef CMC_uint32          CMC_ui_id;
+
+#define CMC_FALSE   ((CMC_boolean)0)
+#define CMC_TRUE    ((CMC_boolean)1)
+
+#define CMC_SUCCESS                         ((CMC_return_code) 0)
+
+#define CMC_E_AMBIGUOUS_RECIPIENT           ((CMC_return_code) 1)
+#define CMC_E_ATTACHMENT_NOT_FOUND          ((CMC_return_code) 2)
+#define CMC_E_ATTACHMENT_OPEN_FAILURE       ((CMC_return_code) 3)
+#define CMC_E_ATTACHMENT_READ_FAILURE       ((CMC_return_code) 4)
+#define CMC_E_ATTACHMENT_WRITE_FAILURE      ((CMC_return_code) 5)
+#define CMC_E_COUNTED_STRING_UNSUPPORTED    ((CMC_return_code) 6)
+#define CMC_E_DISK_FULL                     ((CMC_return_code) 7)
+#define CMC_E_FAILURE                       ((CMC_return_code) 8)
+#define CMC_E_INSUFFICIENT_MEMORY           ((CMC_return_code) 9)
+#define CMC_E_INVALID_CONFIGURATION         ((CMC_return_code) 10)
+#define CMC_E_INVALID_ENUM                  ((CMC_return_code) 11)
+#define CMC_E_INVALID_FLAG                  ((CMC_return_code) 12)
+#define CMC_E_INVALID_MEMORY                ((CMC_return_code) 13)
+#define CMC_E_INVALID_MESSAGE_PARAMETER     ((CMC_return_code) 14)
+#define CMC_E_INVALID_MESSAGE_REFERENCE     ((CMC_return_code) 15)
+#define CMC_E_INVALID_PARAMETER             ((CMC_return_code) 16)
+#define CMC_E_INVALID_SESSION_ID            ((CMC_return_code) 17)
+#define CMC_E_INVALID_UI_ID                 ((CMC_return_code) 18)
+#define CMC_E_LOGON_FAILURE                 ((CMC_return_code) 19)
+#define CMC_E_MESSAGE_IN_USE                ((CMC_return_code) 20)
+#define CMC_E_NOT_SUPPORTED                 ((CMC_return_code) 21)
+#define CMC_E_PASSWORD_REQUIRED             ((CMC_return_code) 22)
+#define CMC_E_RECIPIENT_NOT_FOUND           ((CMC_return_code) 23)
+#define CMC_E_SERVICE_UNAVAILABLE           ((CMC_return_code) 24)
+#define CMC_E_TEXT_TOO_LARGE                ((CMC_return_code) 25)
+#define CMC_E_TOO_MANY_FILES                ((CMC_return_code) 26)
+#define CMC_E_TOO_MANY_RECIPIENTS           ((CMC_return_code) 27)
+#define CMC_E_UNABLE_TO_NOT_MARK_AS_READ    ((CMC_return_code) 28)
+#define CMC_E_UNRECOGNIZED_MESSAGE_TYPE     ((CMC_return_code) 29)
+#define CMC_E_UNSUPPORTED_ACTION            ((CMC_return_code) 30)
+#define CMC_E_UNSUPPORTED_CHARACTER_SET     ((CMC_return_code) 31)
+#define CMC_E_UNSUPPORTED_DATA_EXT          ((CMC_return_code) 32)
+#define CMC_E_UNSUPPORTED_FLAG              ((CMC_return_code) 33)
+#define CMC_E_UNSUPPORTED_FUNCTION_EXT      ((CMC_return_code) 34)
+#define CMC_E_UNSUPPORTED_VERSION           ((CMC_return_code) 35)
+#define CMC_E_USER_CANCEL                   ((CMC_return_code) 36)
+#define CMC_E_USER_NOT_LOGGED_ON            ((CMC_return_code) 37)
+
+#define CMC_ERROR_DISPLAYED                 ((CMC_return_code) 0x00008000)
+#define CMC_ERROR_RSV_MASK                  ((CMC_return_code) 0x0000FFFF)
+#define CMC_ERROR_IMPL_MASK                 ((CMC_return_code) 0xFFFF0000)
+
+typedef struct {
+    CMC_uint32          length;
+    char                string[1];
+} CMC_counted_string;
+
+typedef CMC_counted_string CMC_message_reference;
+
+typedef struct {
+    CMC_sint8  second;
+    CMC_sint8  minute;
+    CMC_sint8  hour;
+    CMC_sint8  day;
+    CMC_sint8  month;
+    CMC_sint8  year;
+    CMC_sint8  isdst;
+    CMC_sint8  unused1;
+    CMC_sint16 tmzone;
+    CMC_sint16 unused2;
+} CMC_time;
+
+#define CMC_NO_TIMEZONE ((CMC_sint16) 0x8000)
+
+
+typedef struct {
+    CMC_uint32 item_code;
+    CMC_uint32 item_data;
+    CMC_buffer item_reference;
+    CMC_flags  extension_flags;
+} CMC_extension;
+
+#define CMC_EXT_REQUIRED                    ((CMC_flags) 0x00010000)
+#define CMC_EXT_OUTPUT                      ((CMC_flags) 0x00020000)
+#define CMC_EXT_LAST_ELEMENT                ((CMC_flags) 0x80000000)
+#define CMC_EXT_RSV_FLAG_MASK               ((CMC_flags) 0xFFFF0000)
+#define CMC_EXT_ITEM_FLAG_MASK              ((CMC_flags) 0x0000FFFF)
+
+
+typedef struct CMC_attachment_s {
+    CMC_string              attach_title;
+    CMC_object_identifier   attach_type;
+    CMC_string              attach_filename;
+    CMC_flags               attach_flags;
+    CMC_extension          *attach_extensions;
+} CMC_attachment;
+
+#define CMC_ATT_APP_OWNS_FILE  ((CMC_flags) 1)
+#define CMC_ATT_LAST_ELEMENT   ((CMC_flags) 0x80000000)
+
+#define CMC_ATT_OID_BINARY      "? ? ? ? ? ?"
+#define CMC_ATT_OID_TEXT        "? ? ? ? ? ?"
+
+
+typedef struct {
+    CMC_string              name;
+    CMC_enum                name_type;
+    CMC_string              address;
+    CMC_enum                role;
+    CMC_flags               recip_flags;
+    CMC_extension          *recip_extensions;
+} CMC_recipient;
+
+#define CMC_TYPE_UNKNOWN                    ((CMC_enum) 0)
+#define CMC_TYPE_INDIVIDUAL                 ((CMC_enum) 1)
+#define CMC_TYPE_GROUP                      ((CMC_enum) 2)
+
+#define CMC_ROLE_TO                         ((CMC_enum) 0)
+#define CMC_ROLE_CC                         ((CMC_enum) 1)
+#define CMC_ROLE_BCC                        ((CMC_enum) 2)
+#define CMC_ROLE_ORIGINATOR                 ((CMC_enum) 3)
+#define CMC_ROLE_AUTHORIZING_USER           ((CMC_enum) 4)
+
+#define CMC_RECIP_IGNORE                    ((CMC_flags) 1)
+#define CMC_RECIP_LIST_TRUNCATED            ((CMC_flags) 2)
+#define CMC_RECIP_LAST_ELEMENT              ((CMC_flags) 0x80000000)
+
+
+typedef struct {
+    CMC_message_reference  *message_reference;
+    CMC_string              message_type;
+    CMC_string              subject;
+    CMC_time                time_sent;
+    CMC_string              text_note;
+    CMC_recipient          *recipients;
+    CMC_attachment         *attachments;
+    CMC_flags               message_flags;
+    CMC_extension          *message_extensions;
+} CMC_message;
+
+#define CMC_MSG_READ                        ((CMC_flags) 1)
+#define CMC_MSG_TEXT_NOTE_AS_FILE           ((CMC_flags) 2)
+#define CMC_MSG_UNSENT                      ((CMC_flags) 4)
+#define CMC_MSG_LAST_ELEMENT                ((CMC_flags) 0x80000000)
+
+
+typedef struct {
+    CMC_message_reference  *message_reference;
+    CMC_string              message_type;
+    CMC_string              subject;
+    CMC_time                time_sent;
+    CMC_uint32              byte_length;
+    CMC_recipient          *originator;
+    CMC_flags               summary_flags;
+    CMC_extension          *message_summary_extensions;
+} CMC_message_summary;
+
+#define CMC_SUM_READ                        ((CMC_flags) 1)
+#define CMC_SUM_UNSENT                      ((CMC_flags) 2)
+#define CMC_SUM_LAST_ELEMENT                ((CMC_flags) 0x80000000)
+
+#define CMC_ERROR_UI_ALLOWED                ((CMC_flags) 0x01000000)
+#define CMC_LOGON_UI_ALLOWED                ((CMC_flags) 0x02000000)
+#define CMC_COUNTED_STRING_TYPE             ((CMC_flags) 0x04000000)
+
+CMC_return_code WINAPI cmc_send(
+    CMC_session_id          session,
+    CMC_message            *message,
+    CMC_flags               send_flags,
+    CMC_ui_id               ui_id,
+    CMC_extension          *send_extensions
+);
+
+#define CMC_SEND_UI_REQUESTED               ((CMC_flags) 1)
+
+
+CMC_return_code WINAPI cmc_send_documents(
+    CMC_string              recipient_addresses,
+    CMC_string              subject,
+    CMC_string              text_note,
+    CMC_flags               send_doc_flags,
+    CMC_string              file_paths,
+    CMC_string              file_names,
+    CMC_string              delimiter,
+    CMC_ui_id               ui_id
+);
+
+#define CMC_FIRST_ATTACH_AS_TEXT_NOTE       ((CMC_flags) 2)
+
+
+CMC_return_code WINAPI cmc_act_on(
+    CMC_session_id          session,
+    CMC_message_reference  *message_reference,
+    CMC_enum                operation,
+    CMC_flags               act_on_flags,
+    CMC_ui_id               ui_id,
+    CMC_extension          *act_on_extensions
+);
+
+#define CMC_ACT_ON_EXTENDED                 ((CMC_enum) 0)
+#define CMC_ACT_ON_DELETE                   ((CMC_enum) 1)
+
+
+CMC_return_code WINAPI cmc_list(
+    CMC_session_id          session,
+    CMC_string              message_type,
+    CMC_flags               list_flags,
+    CMC_message_reference  *seed,
+    CMC_uint32             *count,
+    CMC_ui_id               ui_id,
+    CMC_message_summary   **result,
+    CMC_extension          *list_extensions
+);
+
+#define CMC_LIST_UNREAD_ONLY                ((CMC_flags) 1)
+#define CMC_LIST_MSG_REFS_ONLY              ((CMC_flags) 2)
+#define CMC_LIST_COUNT_ONLY                 ((CMC_flags) 4)
+
+#define CMC_LENGTH_UNKNOWN          0xFFFFFFFF
+
+
+CMC_return_code WINAPI cmc_read(
+    CMC_session_id          session,
+    CMC_message_reference  *message_reference,
+    CMC_flags               read_flags,
+    CMC_message           **message,
+    CMC_ui_id               ui_id,
+    CMC_extension          *read_extensions
+);
+
+#define CMC_DO_NOT_MARK_AS_READ             ((CMC_flags) 1)
+#define CMC_MSG_AND_ATT_HDRS_ONLY           ((CMC_flags) 2)
+#define CMC_READ_FIRST_UNREAD_MESSAGE       ((CMC_flags) 4)
+
+
+CMC_return_code WINAPI cmc_look_up(
+    CMC_session_id          session,
+    CMC_recipient          *recipient_in,
+    CMC_flags               look_up_flags,
+    CMC_ui_id               ui_id,
+    CMC_uint32             *count,
+    CMC_recipient         **recipient_out,
+    CMC_extension          *look_up_extensions
+);
+
+#define CMC_LOOKUP_RESOLVE_PREFIX_SEARCH    ((CMC_flags) 1)
+#define CMC_LOOKUP_RESOLVE_IDENTITY         ((CMC_flags) 2)
+#define CMC_LOOKUP_RESOLVE_UI               ((CMC_flags) 4)
+#define CMC_LOOKUP_DETAILS_UI               ((CMC_flags) 8)
+#define CMC_LOOKUP_ADDRESSING_UI            ((CMC_flags) 16)
+
+
+CMC_return_code WINAPI cmc_free( CMC_buffer memory );
+
+CMC_return_code WINAPI cmc_logoff(
+    CMC_session_id          session,
+    CMC_ui_id               ui_id,
+    CMC_flags               logoff_flags,
+    CMC_extension          *logoff_extensions
+);
+
+CMC_return_code WINAPI cmc_logon(
+    CMC_string              service,
+    CMC_string              user,
+    CMC_string              password,
+    CMC_object_identifier   character_set,
+    CMC_ui_id               ui_id,
+    CMC_uint16              caller_cmc_version,
+    CMC_flags               logon_flags,
+    CMC_session_id         *session,
+    CMC_extension          *logon_extensions
+);
+
+#define CMC_VERSION         ((CMC_uint16) 100)
+
+CMC_return_code WINAPI cmc_query_configuration(
+    CMC_session_id          session,
+    CMC_enum                item,
+    CMC_buffer              reference,
+    CMC_extension          *config_extensions
+);
+
+#define CMC_CONFIG_CHARACTER_SET            ((CMC_enum) 1)
+#define CMC_CONFIG_LINE_TERM                ((CMC_enum) 2)
+#define CMC_CONFIG_DEFAULT_SERVICE          ((CMC_enum) 3)
+#define CMC_CONFIG_DEFAULT_USER             ((CMC_enum) 4)
+#define CMC_CONFIG_REQ_PASSWORD             ((CMC_enum) 5)
+#define CMC_CONFIG_REQ_SERVICE              ((CMC_enum) 6)
+#define CMC_CONFIG_REQ_USER                 ((CMC_enum) 7)
+#define CMC_CONFIG_UI_AVAIL                 ((CMC_enum) 8)
+#define CMC_CONFIG_SUP_NOMKMSGREAD          ((CMC_enum) 9)
+#define CMC_CONFIG_SUP_COUNTED_STR          ((CMC_enum) 10)
+#define CMC_CONFIG_VER_IMPLEM               ((CMC_enum) 11)
+#define CMC_CONFIG_VER_SPEC                 ((CMC_enum) 12)
+
+#define CMC_LINE_TERM_CRLF                  ((CMC_enum) 0)
+#define CMC_LINE_TERM_CR                    ((CMC_enum) 1)
+#define CMC_LINE_TERM_LF                    ((CMC_enum) 2)
+
+#define CMC_REQUIRED_NO                     ((CMC_enum) 0)
+#define CMC_REQUIRED_YES                    ((CMC_enum) 1)
+#define CMC_REQUIRED_OPT                    ((CMC_enum) 2)
+
+#define CMC_CHAR_CP437                      "1 2 840 113556 3 2 437"
+#define CMC_CHAR_CP850                      "1 2 840 113556 3 2 85"
+#define CMC_CHAR_CP1252                     "1 2 840 113556 3 2 1252"
+#define CMC_CHAR_ISTRING                    "1 2 840 113556 3 2 0"
+#define CMC_CHAR_UNICODE                    "1 2 840 113556 3 2 1"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _XCMC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h
new file mode 100644
index 0000000..f2b064b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h
@@ -0,0 +1,248 @@
+/*
+ * The Wine project - Xinput Joystick Library
+ * Copyright 2008 Andrew Fenn
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_XINPUT_H
+#define __WINE_XINPUT_H
+
+#include <windef.h>
+
+/*
+ * Bitmasks for the joysticks buttons, determines what has
+ * been pressed on the joystick, these need to be mapped
+ * to whatever device you're using instead of an xbox 360
+ * joystick
+ */
+
+#define XINPUT_GAMEPAD_DPAD_UP          0x0001
+#define XINPUT_GAMEPAD_DPAD_DOWN        0x0002
+#define XINPUT_GAMEPAD_DPAD_LEFT        0x0004
+#define XINPUT_GAMEPAD_DPAD_RIGHT       0x0008
+#define XINPUT_GAMEPAD_START            0x0010
+#define XINPUT_GAMEPAD_BACK             0x0020
+#define XINPUT_GAMEPAD_LEFT_THUMB       0x0040
+#define XINPUT_GAMEPAD_RIGHT_THUMB      0x0080
+#define XINPUT_GAMEPAD_LEFT_SHOULDER    0x0100
+#define XINPUT_GAMEPAD_RIGHT_SHOULDER   0x0200
+#define XINPUT_GAMEPAD_A                0x1000
+#define XINPUT_GAMEPAD_B                0x2000
+#define XINPUT_GAMEPAD_X                0x4000
+#define XINPUT_GAMEPAD_Y                0x8000
+
+/*
+ * Defines the flags used to determine if the user is pushing
+ * down on a button, not holding a button, etc
+ */
+
+#define XINPUT_KEYSTROKE_KEYDOWN        0x0001
+#define XINPUT_KEYSTROKE_KEYUP          0x0002
+#define XINPUT_KEYSTROKE_REPEAT         0x0004
+
+/*
+ * Defines the codes which are returned by XInputGetKeystroke
+ */
+
+#define VK_PAD_A                        0x5800
+#define VK_PAD_B                        0x5801
+#define VK_PAD_X                        0x5802
+#define VK_PAD_Y                        0x5803
+#define VK_PAD_RSHOULDER                0x5804
+#define VK_PAD_LSHOULDER                0x5805
+#define VK_PAD_LTRIGGER                 0x5806
+#define VK_PAD_RTRIGGER                 0x5807
+#define VK_PAD_DPAD_UP                  0x5810
+#define VK_PAD_DPAD_DOWN                0x5811
+#define VK_PAD_DPAD_LEFT                0x5812
+#define VK_PAD_DPAD_RIGHT               0x5813
+#define VK_PAD_START                    0x5814
+#define VK_PAD_BACK                     0x5815
+#define VK_PAD_LTHUMB_PRESS             0x5816
+#define VK_PAD_RTHUMB_PRESS             0x5817
+#define VK_PAD_LTHUMB_UP                0x5820
+#define VK_PAD_LTHUMB_DOWN              0x5821
+#define VK_PAD_LTHUMB_RIGHT             0x5822
+#define VK_PAD_LTHUMB_LEFT              0x5823
+#define VK_PAD_LTHUMB_UPLEFT            0x5824
+#define VK_PAD_LTHUMB_UPRIGHT           0x5825
+#define VK_PAD_LTHUMB_DOWNRIGHT         0x5826
+#define VK_PAD_LTHUMB_DOWNLEFT          0x5827
+#define VK_PAD_RTHUMB_UP                0x5830
+#define VK_PAD_RTHUMB_DOWN              0x5831
+#define VK_PAD_RTHUMB_RIGHT             0x5832
+#define VK_PAD_RTHUMB_LEFT              0x5833
+#define VK_PAD_RTHUMB_UPLEFT            0x5834
+#define VK_PAD_RTHUMB_UPRIGHT           0x5835
+#define VK_PAD_RTHUMB_DOWNRIGHT         0x5836
+#define VK_PAD_RTHUMB_DOWNLEFT          0x5837
+
+/*
+ * Deadzones are for analogue joystick controls on the joypad
+ * which determine when input should be assumed to be in the
+ * middle of the pad. This is a threshold to stop a joypad
+ * controlling the game when the player isn't touching the
+ * controls.
+ */
+
+#define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE  7849
+#define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689
+#define XINPUT_GAMEPAD_TRIGGER_THRESHOLD    30
+
+
+/*
+ * Defines what type of abilities the type of joystick has
+ * DEVTYPE_GAMEPAD is available for all joysticks, however
+ * there may be more specific identifiers for other joysticks
+ * which are being used.
+ */
+
+#define XINPUT_DEVTYPE_GAMEPAD          0x01
+#define XINPUT_DEVSUBTYPE_GAMEPAD       0x01
+#define XINPUT_DEVSUBTYPE_WHEEL         0x02
+#define XINPUT_DEVSUBTYPE_ARCADE_STICK  0x03
+#define XINPUT_DEVSUBTYPE_FLIGHT_SICK   0x04
+#define XINPUT_DEVSUBTYPE_DANCE_PAD     0x05
+#define XINPUT_DEVSUBTYPE_GUITAR        0x06
+#define XINPUT_DEVSUBTYPE_DRUM_KIT      0x08
+
+/*
+ * These are used with the XInputGetCapabilities function to
+ * determine the abilities to the joystick which has been
+ * plugged in.
+ */
+
+#define XINPUT_CAPS_VOICE_SUPPORTED     0x0004
+#define XINPUT_FLAG_GAMEPAD             0x00000001
+
+/*
+ * Defines the status of the battery if one is used in the
+ * attached joystick. The first two define if the joystick
+ * supports a battery. Disconnected means that the joystick
+ * isn't connected. Wired shows that the joystick is a wired
+ * joystick.
+ */
+
+#define BATTERY_DEVTYPE_GAMEPAD         0x00
+#define BATTERY_DEVTYPE_HEADSET         0x01
+#define BATTERY_TYPE_DISCONNECTED       0x00
+#define BATTERY_TYPE_WIRED              0x01
+#define BATTERY_TYPE_ALKALINE           0x02
+#define BATTERY_TYPE_NIMH               0x03
+#define BATTERY_TYPE_UNKNOWN            0xFF
+#define BATTERY_LEVEL_EMPTY             0x00
+#define BATTERY_LEVEL_LOW               0x01
+#define BATTERY_LEVEL_MEDIUM            0x02
+#define BATTERY_LEVEL_FULL              0x03
+
+/*
+ * How many joysticks can be used with this library. Games that
+ * use the xinput library will not go over this number.
+ */
+
+#define XUSER_MAX_COUNT                 4
+#define XUSER_INDEX_ANY                 0x000000FF
+
+/*
+ * Defines the structure of an xbox 360 joystick.
+ */
+
+typedef struct _XINPUT_GAMEPAD {
+    WORD wButtons;
+    BYTE bLeftTrigger;
+    BYTE bRightTrigger;
+    SHORT sThumbLX;
+    SHORT sThumbLY;
+    SHORT sThumbRX;
+    SHORT sThumbRY;
+} XINPUT_GAMEPAD, *PXINPUT_GAMEPAD;
+
+typedef struct _XINPUT_STATE {
+    DWORD dwPacketNumber;
+    XINPUT_GAMEPAD Gamepad;
+} XINPUT_STATE, *PXINPUT_STATE;
+
+/*
+ * Defines the structure of how much vibration is set on both the
+ * right and left motors in a joystick. If you're not using a 360
+ * joystick you will have to map these to your device.
+ */
+
+typedef struct _XINPUT_VIBRATION {
+    WORD wLeftMotorSpeed;
+    WORD wRightMotorSpeed;
+} XINPUT_VIBRATION, *PXINPUT_VIBRATION;
+
+/*
+ * Defines the structure for what kind of abilities the joystick has
+ * such abilities are things such as if the joystick has the ability
+ * to send and receive audio, if the joystick is in fact a driving
+ * wheel or perhaps if the joystick is some kind of dance pad or
+ * guitar.
+ */
+
+typedef struct _XINPUT_CAPABILITIES {
+    BYTE Type;
+    BYTE SubType;
+    WORD Flags;
+    XINPUT_GAMEPAD Gamepad;
+    XINPUT_VIBRATION Vibration;
+} XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES;
+
+/*
+ * Defines the structure for a joystick input event which is
+ * retrieved using the function XInputGetKeystroke
+ */
+typedef struct _XINPUT_KEYSTROKE {
+    WORD VirtualKey;
+    WCHAR Unicode;
+    WORD Flags;
+    BYTE UserIndex;
+    BYTE HidCode;
+} XINPUT_KEYSTROKE, *PXINPUT_KEYSTROKE;
+
+typedef struct _XINPUT_BATTERY_INFORMATION
+{
+    BYTE BatteryType;
+    BYTE BatteryLevel;
+} XINPUT_BATTERY_INFORMATION, *PXINPUT_BATTERY_INFORMATION;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void WINAPI XInputEnable(BOOL);
+DWORD WINAPI XInputSetState(DWORD, XINPUT_VIBRATION*);
+DWORD WINAPI XInputGetState(DWORD, XINPUT_STATE*);
+DWORD WINAPI XInputGetKeystroke(DWORD, DWORD, PXINPUT_KEYSTROKE);
+DWORD WINAPI XInputGetCapabilities(DWORD, DWORD, XINPUT_CAPABILITIES*);
+DWORD WINAPI XInputGetDSoundAudioDeviceGuids(DWORD, GUID*, GUID*);
+DWORD WINAPI XInputGetBatteryInformation(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_XINPUT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h
new file mode 100644
index 0000000..7db0769
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* xmldom.idl is included by msxml.idl so it doesn't need a stand-alone header */
+#include <msxml.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl
new file mode 100644
index 0000000..90ad91c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl
@@ -0,0 +1,847 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <xmldomdid.h>
+#include <idispids.h>
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+
+cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
+cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
+typedef enum tagDOMNodeType {
+    NODE_INVALID,
+    NODE_ELEMENT,
+    NODE_ATTRIBUTE,
+    NODE_TEXT,
+    NODE_CDATA_SECTION,
+    NODE_ENTITY_REFERENCE,
+    NODE_ENTITY,
+    NODE_PROCESSING_INSTRUCTION,
+    NODE_COMMENT,
+    NODE_DOCUMENT,
+    NODE_DOCUMENT_TYPE,
+    NODE_DOCUMENT_FRAGMENT,
+    NODE_NOTATION
+} DOMNodeType;
+cpp_quote("#endif")
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+/*nonextensible,*/
+uuid(2933bf80-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNode : IDispatch
+{
+    [propget, id(DISPID_DOM_NODE_NODENAME)]
+    HRESULT nodeName( [out,retval] BSTR *name );
+
+    [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue( [out,retval] VARIANT *value );
+
+    [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+    HRESULT nodeValue( [in] VARIANT value );
+
+    [propget, id(DISPID_DOM_NODE_NODETYPE)]
+    HRESULT nodeType( [out,retval] DOMNodeType *type );
+
+    [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+    HRESULT parentNode( [out,retval] IXMLDOMNode **parent );
+
+    [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+    HRESULT childNodes( [out,retval] IXMLDOMNodeList **childList );
+
+    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+    HRESULT firstChild( [out,retval] IXMLDOMNode **firstChild );
+
+    [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+    HRESULT lastChild( [out,retval] IXMLDOMNode **lastChild );
+
+    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+    HRESULT previousSibling( [out,retval] IXMLDOMNode **previousSibling );
+
+    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+    HRESULT nextSibling( [out,retval] IXMLDOMNode **nextSibling );
+
+    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+    HRESULT attributes( [out,retval] IXMLDOMNamedNodeMap **attributeMap );
+
+    [id(DISPID_DOM_NODE_INSERTBEFORE)]
+    HRESULT insertBefore( [in] IXMLDOMNode * newChild,
+                          [in] VARIANT refChild,
+                          [out,retval] IXMLDOMNode **outNewChild );
+
+    [id(DISPID_DOM_NODE_REPLACECHILD)]
+    HRESULT replaceChild( [in] IXMLDOMNode *newChild,
+                          [in] IXMLDOMNode *oldChild,
+                          [out,retval] IXMLDOMNode **outOldChild );
+
+    [id(DISPID_DOM_NODE_REMOVECHILD)]
+    HRESULT removeChild( [in] IXMLDOMNode *childNode,
+                         [out,retval] IXMLDOMNode **oldChild );
+
+    [id(DISPID_DOM_NODE_APPENDCHILD)]
+    HRESULT appendChild( [in] IXMLDOMNode *newChild,
+                         [out,retval] IXMLDOMNode **outNewChild );
+
+    [id(DISPID_DOM_NODE_HASCHILDNODES)]
+    HRESULT hasChildNodes( [out,retval] VARIANT_BOOL *hasChild );
+
+    [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+    HRESULT ownerDocument( [out,retval] IXMLDOMDocument **DOMDocument );
+
+    [id(DISPID_DOM_NODE_CLONENODE)]
+    HRESULT cloneNode( [in] VARIANT_BOOL deep,
+                       [out,retval] IXMLDOMNode **cloneRoot );
+
+    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+    HRESULT nodeTypeString( [out,retval] BSTR *nodeType );
+
+    [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text( [out,retval] BSTR *text );
+
+    [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+    HRESULT text( [in] BSTR text );
+
+    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+    HRESULT specified( [out,retval] VARIANT_BOOL *isSpecified );
+
+    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+    HRESULT definition( [out,retval] IXMLDOMNode **definitionNode );
+
+    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue( [out,retval] VARIANT *typedValue );
+
+    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+    HRESULT nodeTypedValue( [in] VARIANT typedValue );
+
+    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType( [out,retval] VARIANT *dataTypeName );
+
+    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+    HRESULT dataType( [in] BSTR dataTypeName );
+
+    [propget, id(DISPID_XMLDOM_NODE_XML)]
+    HRESULT xml( [out,retval] BSTR *xmlString );
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+    HRESULT transformNode( [in] IXMLDOMNode *styleSheet,
+                           [out,retval] BSTR *xmlString );
+
+    [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+    HRESULT selectNodes( [in] BSTR queryString,
+                         [out,retval] IXMLDOMNodeList **resultList );
+
+    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+    HRESULT selectSingleNode( [in] BSTR queryString,
+                              [out,retval] IXMLDOMNode **resultNode );
+
+    [propget, id(DISPID_XMLDOM_NODE_PARSED)]
+    HRESULT parsed( [out,retval] VARIANT_BOOL *isParsed );
+
+    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+    HRESULT namespaceURI( [out,retval] BSTR *namespaceURI );
+
+    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+    HRESULT prefix( [out,retval] BSTR *prefixString );
+
+    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+    HRESULT baseName( [out,retval] BSTR *nameString );
+
+    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+    HRESULT transformNodeToObject( [in] IXMLDOMNode *stylesheet,
+                                   [in] VARIANT outputObject );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf81-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+    HRESULT doctype( [out,retval] IXMLDOMDocumentType **documentType );
+
+    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+    HRESULT implementation( [out,retval] IXMLDOMImplementation **impl );
+
+    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement( [out,retval] IXMLDOMElement **DOMElement );
+
+    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+    HRESULT documentElement( [in] IXMLDOMElement *DOMElement );
+
+    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+    HRESULT createElement( [in] BSTR tagname,
+                           [out,retval] IXMLDOMElement **element );
+
+    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+    HRESULT createDocumentFragment( [out,retval] IXMLDOMDocumentFragment **docFrag );
+
+    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+    HRESULT createTextNode( [in] BSTR data,
+                            [out,retval] IXMLDOMText **text );
+
+    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+    HRESULT createComment( [in] BSTR data,
+                           [out,retval] IXMLDOMComment **comment );
+
+    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+    HRESULT createCDATASection( [in] BSTR data,
+                                [out,retval] IXMLDOMCDATASection **cdata );
+
+    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+    HRESULT createProcessingInstruction( [in] BSTR target,
+                                         [in] BSTR data,
+                                         [out,retval] IXMLDOMProcessingInstruction **pi );
+
+    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+    HRESULT createAttribute( [in] BSTR name,
+                             [out,retval] IXMLDOMAttribute **attribute );
+
+    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+    HRESULT createEntityReference( [in] BSTR name,
+                                   [out,retval] IXMLDOMEntityReference **entityRef );
+
+    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName( [in] BSTR tagName,
+                                  [out,retval] IXMLDOMNodeList **resultList );
+
+    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+    HRESULT createNode( [in] VARIANT Type,
+                        [in] BSTR name,
+                        [in] BSTR namespaceURI,
+                        [out,retval] IXMLDOMNode **node );
+
+    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+    HRESULT nodeFromID( [in] BSTR idString,
+                        [out,retval] IXMLDOMNode **node );
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+    HRESULT load( [in] VARIANT xmlSource,
+                  [out,retval] VARIANT_BOOL *isSuccessful );
+
+    [propget, id(DISPID_READYSTATE)]
+    HRESULT readyState( [out,retval] LONG *value );
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+    HRESULT parseError( [out,retval] IXMLDOMParseError **errorObj );
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+    HRESULT url( [out,retval] BSTR *urlString );
+
+    /* FIXME: these is meant to be async, but widl parses that as a keyword */
+    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async( [out,retval] VARIANT_BOOL *isAsync );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+    HRESULT async( [in] VARIANT_BOOL isAsync );
+
+    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+    HRESULT abort();
+
+    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+    HRESULT loadXML( [in] BSTR bstrXML,
+                     [out,retval] VARIANT_BOOL *isSuccessful );
+
+    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+    HRESULT save( [in] VARIANT destination );
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse( [out,retval] VARIANT_BOOL *isValidating );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+    HRESULT validateOnParse( [in] VARIANT_BOOL isValidating );
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals( [out,retval] VARIANT_BOOL *isResolving );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+    HRESULT resolveExternals( [in] VARIANT_BOOL isValidating );
+
+    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace( [out,retval] VARIANT_BOOL *isPreserving );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+    HRESULT preserveWhiteSpace( [in] VARIANT_BOOL isPreserving );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange( [in] VARIANT readystatechangeSink );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable( [in] VARIANT ondataavailableSink );
+
+    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+    HRESULT ontransformnode( [in] VARIANT ontransformnodeSink );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf82-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT item( [in] LONG index,
+                  [out,retval] IXMLDOMNode **listItem );
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length( [out,retval] LONG *listLength );
+
+    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+    HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem );
+
+    [id(DISPID_XMLDOM_NODELIST_RESET)]
+    HRESULT reset();
+
+    [id(DISPID_NEWENUM)]
+    HRESULT _newEnum( [out,retval] IUnknown **ppUnk );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf83-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+    HRESULT getNamedItem( [in] BSTR name,
+                          [out,retval] IXMLDOMNode **namedItem );
+
+    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+    HRESULT setNamedItem( [in] IXMLDOMNode *newItem,
+                          [out,retval] IXMLDOMNode **namedItem );
+
+    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+    HRESULT removeNamedItem( [in] BSTR name,
+                             [out,retval] IXMLDOMNode **namedItem );
+
+    [propget, id(DISPID_VALUE)]
+    HRESULT item( [in] LONG index,
+                  [out,retval] IXMLDOMNode **listItem );
+
+    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+    HRESULT length( [out,retval] LONG *listLength );
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+    HRESULT getQualifiedItem( [in] BSTR baseName,
+                              [in] BSTR namespaceURI,
+                              [out,retval] IXMLDOMNode **qualifiedItem );
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+    HRESULT removeQualifiedItem( [in] BSTR baseName,
+                                 [in] BSTR namespaceURI,
+                                 [out,retval] IXMLDOMNode **qualifiedItem );
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+    HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem );
+
+    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+    HRESULT reset();
+
+    [id(DISPID_NEWENUM)]
+    HRESULT _newEnum( [out,retval] IUnknown **ppUnk );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(3efaa413-272f-11d2-836f-0000f87a7782),
+pointer_default(unique)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode
+{
+    /* empty */
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf84-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data( [out,retval] BSTR *data );
+
+    [propput, id(DISPID_DOM_DATA_DATA)]
+    HRESULT data( [in] BSTR data );
+
+    [propget, id(DISPID_DOM_DATA_LENGTH)]
+    HRESULT length( [out,retval] LONG *dataLength );
+
+    [id(DISPID_DOM_DATA_SUBSTRING)]
+    HRESULT substringData( [in] LONG offset,
+                           [in] LONG count,
+                           [out,retval] BSTR *data );
+
+    [id(DISPID_DOM_DATA_APPEND)]
+    HRESULT appendData( [in] BSTR data );
+
+    [id(DISPID_DOM_DATA_INSERT)]
+    HRESULT insertData( [in] LONG offset,
+                        [in] BSTR data );
+
+    [id(DISPID_DOM_DATA_DELETE)]
+    HRESULT deleteData( [in] LONG offset,
+                        [in] LONG count );
+
+    [id(DISPID_DOM_DATA_REPLACE)]
+    HRESULT replaceData( [in] LONG offset,
+                         [in] LONG count,
+                         [in] BSTR data );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf85-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMAttribute : IXMLDOMNode
+{
+    [propget,id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+    HRESULT name( [out,retval] BSTR *attributeName );
+
+    [propget,id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value( [out,retval] VARIANT *attributeValue );
+
+    [propput,id(DISPID_DOM_ATTRIBUTE_VALUE)]
+    HRESULT value( [in] VARIANT attributeValue );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf86-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMElement : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+    HRESULT tagName( [out,retval] BSTR *tagName );
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+    HRESULT getAttribute( [in] BSTR name,
+                          [out,retval] VARIANT * value );
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+    HRESULT setAttribute( [in] BSTR name,
+                          [in] VARIANT value );
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+    HRESULT removeAttribute( [in] BSTR name );
+
+    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+    HRESULT getAttributeNode( [in] BSTR name,
+                              [out, retval] IXMLDOMAttribute ** attributeNode );
+
+    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+    HRESULT setAttributeNode( [in] IXMLDOMAttribute *DOMAttribute,
+                              [out, retval] IXMLDOMAttribute ** attributeNode );
+
+    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+    HRESULT removeAttributeNode( [in] IXMLDOMAttribute *DOMAttribute,
+                              [out, retval] IXMLDOMAttribute ** attributeNode );
+
+    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+    HRESULT getElementsByTagName( [in] BSTR tagName,
+                              [out, retval] IXMLDOMNodeList ** resultList );
+
+    [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+    HRESULT normalize();
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf87-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMText : IXMLDOMCharacterData
+{
+    [id(DISPID_DOM_TEXT_SPLITTEXT)]
+    HRESULT splitText( [in] LONG offset,
+                       [out,retval] IXMLDOMText **rightHandTextNode );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf88-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData
+{
+    /* empty */
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf89-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_PI_TARGET)]
+    HRESULT target( [out, retval] BSTR *name );
+
+    [propget, id(DISPID_DOM_PI_DATA)]
+    HRESULT data( [out, retval] BSTR *value );
+
+    [propput, id(DISPID_DOM_PI_DATA)]
+    HRESULT data( [in] BSTR value );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf8a-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMCDATASection : IXMLDOMText
+{
+    /* empty */
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf8b-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+    HRESULT name( [out,retval] BSTR *rootName );
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+    HRESULT entities( [out,retval] IXMLDOMNamedNodeMap **entityMap );
+
+    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+    HRESULT notations( [out,retval] IXMLDOMNamedNodeMap **notationMap );
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8c-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNotation : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+    HRESULT publicId([out, retval] VARIANT *publicId);
+
+    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+    HRESULT systemId([out, retval] VARIANT *systemId);
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8d-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMEntity : IXMLDOMNode
+{
+    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+    HRESULT publicId([out, retval] VARIANT *publicId);
+
+    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+    HRESULT systemId([out, retval] VARIANT *systemId);
+
+    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+    HRESULT notationName([out, retval] BSTR *name);
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8e-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8f-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+    HRESULT hasFeature([in] BSTR feature, [in] BSTR version, [out, retval] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+/*nonextensible,*/
+helpstring("structure for reporting parse errors"),
+pointer_default(unique),
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+    [propget, id(DISPID_VALUE)]
+    HRESULT errorCode([retval, out] LONG *errCode);
+
+    [propget, id(DISPID_DOM_ERROR_URL)]
+    HRESULT url([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_REASON)]
+    HRESULT reason([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+    HRESULT srcText([retval, out] BSTR *p);
+
+    [propget, id(DISPID_DOM_ERROR_LINE)]
+    HRESULT line([retval, out] LONG *lineNo);
+
+    [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+    HRESULT linepos([retval, out] LONG * linePos);
+
+    [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+    HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+    hidden,
+    uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents
+{
+    properties:
+    methods:
+    [id(DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
+    HRESULT ondataavailable();
+
+    [id(DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
+    HRESULT onreadystatechange();
+}
+
+[
+    helpstring("XML DOM Document"),
+    progid("Microsoft.XMLDOM.1.0"),
+    vi_progid("Microsoft.XMLDOM"),
+    threading(both),
+    version(1.0),
+    uuid(2933bf90-7b36-11d2-b20e-00c04f983e60)
+]
+coclass DOMDocument
+{
+    [default] interface IXMLDOMDocument;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+    helpstring("Free Threaded XML DOM Document"),
+    progid("Microsoft.FreeThreadedXMLDOM.1.0"),
+    vi_progid("Microsoft.FreeThreadedXMLDOM"),
+    threading(both),
+    version(1.0),
+    uuid(2933bf91-7b36-11d2-b20e-00c04f983e60)
+]
+coclass DOMFreeThreadedDocument
+{
+    [default] interface IXMLDOMDocument;
+    [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+object,
+uuid(ed8c108d-4349-11d2-91a4-00c04f7969e8),
+odl,
+dual,
+oleautomation,
+pointer_default(unique)
+]
+interface IXMLHttpRequest : IDispatch
+{
+    [id(1)]
+    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl,
+                 [in, optional] VARIANT varAsync,
+                 [in, optional] VARIANT varUser,
+                 [in, optional] VARIANT varPassword);
+    [id(2)]
+    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+    [id(3)]
+    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR *pbstrValue);
+
+    [id(4)]
+    HRESULT getAllResponseHeaders([out, retval] BSTR *pbstrHeaders);
+
+    [id(5)]
+    HRESULT send([in, optional] VARIANT varBody);
+
+    [id(6)]
+    HRESULT abort();
+
+    [propget, id(7)]
+    HRESULT status([out, retval] LONG *plStatus);
+
+    [propget, id(8)]
+    HRESULT statusText([out, retval] BSTR *bstrStatus);
+
+    [propget, id(9)]
+    HRESULT responseXML([out, retval] IDispatch **ppBody);
+
+    [propget, id(10)]
+    HRESULT responseText([out, retval] BSTR *pbstrBody);
+
+    [propget, id(11)]
+    HRESULT responseBody([out, retval] VARIANT *pvarBody);
+
+    [propget, id(12)]
+    HRESULT responseStream([out, retval] VARIANT *pvarBody);
+
+    [propget, id(13)]
+    HRESULT readyState([out, retval] LONG *plState);
+
+    [propput, id(14)]
+    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+}
+
+[
+    helpstring("XML HTTP Request"),
+    progid("Microsoft.XMLHTTP.1.0"),
+    vi_progid("Microsoft.XMLHTTP"),
+    threading(apartment),
+    version(1.0),
+    uuid(ed8c108e-4349-11d2-91a4-00c04f7969e8)
+]
+coclass XMLHTTPRequest
+{
+    [default] interface IXMLHttpRequest;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h
new file mode 100644
index 0000000..7219dc1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __XMLDOMDID_H__
+#define __XMLDOMDID_H__
+
+#define DISPID_DOM_BASE 1
+#define DISPID_DOM_COLLECTION_BASE 1000000
+#define DISPID_DOM_COLLECTION_MAX 2999999
+
+#define DISPID_DOM_NODE 1
+#define DISPID_DOM_NODE_NODENAME 2
+#define DISPID_DOM_NODE_NODEVALUE 3
+#define DISPID_DOM_NODE_NODETYPE 4
+#define DISPID_DOM_NODE_NODETYPEENUM 5
+#define DISPID_DOM_NODE_PARENTNODE 6
+#define DISPID_DOM_NODE_CHILDNODES 7
+#define DISPID_DOM_NODE_FIRSTCHILD 8
+#define DISPID_DOM_NODE_LASTCHILD 9
+#define DISPID_DOM_NODE_PREVIOUSSIBLING 10
+#define DISPID_DOM_NODE_NEXTSIBLING 11
+#define DISPID_DOM_NODE_ATTRIBUTES 12
+#define DISPID_DOM_NODE_INSERTBEFORE 13
+#define DISPID_DOM_NODE_REPLACECHILD 14
+#define DISPID_DOM_NODE_REMOVECHILD 15
+#define DISPID_DOM_NODE_APPENDCHILD 16
+#define DISPID_DOM_NODE_HASCHILDNODES 17
+#define DISPID_DOM_NODE_OWNERDOC 18
+#define DISPID_DOM_NODE_CLONENODE 19
+
+#define DISPID_XMLDOM_NODE 20
+#define DISPID_XMLDOM_NODE_STRINGTYPE 21
+#define DISPID_XMLDOM_NODE_SPECIFIED 22
+#define DISPID_XMLDOM_NODE_DEFINITION 23
+#define DISPID_XMLDOM_NODE_TEXT 24
+#define DISPID_XMLDOM_NODE_NODETYPEDVALUE 25
+#define DISPID_XMLDOM_NODE_DATATYPE 26
+#define DISPID_XMLDOM_NODE_XML 27
+#define DISPID_XMLDOM_NODE_TRANSFORMNODE 28
+#define DISPID_XMLDOM_NODE_SELECTNODES 29
+#define DISPID_XMLDOM_NODE_SELECTSINGLENODE 30
+#define DISPID_XMLDOM_NODE_PARSED 31
+#define DISPID_XMLDOM_NODE_NAMESPACE 32
+#define DISPID_XMLDOM_NODE_PREFIX 33
+#define DISPID_XMLDOM_NODE_BASENAME 34
+#define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT 35
+#define DISPID_XMLDOM_NODE__TOP 36
+
+#define DISPID_DOM_DOCUMENT 37
+#define DISPID_DOM_DOCUMENT_DOCTYPE 38
+#define DISPID_DOM_DOCUMENT_IMPLEMENTATION 39
+#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT 40
+#define DISPID_DOM_DOCUMENT_CREATEELEMENT 41
+#define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT 42
+#define DISPID_DOM_DOCUMENT_CREATETEXTNODE 43
+#define DISPID_DOM_DOCUMENT_CREATECOMMENT 44
+#define DISPID_DOM_DOCUMENT_CREATECDATASECTION 45
+#define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 46
+#define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE 47
+#define DISPID_DOM_DOCUMENT_CREATEENTITY 48
+#define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE 49
+#define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME 50
+#define DISPID_DOM_DOCUMENT_TOP 51
+
+#define DISPID_XMLDOM_DOCUMENT 52
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE 53
+#define DISPID_XMLDOM_DOCUMENT_CREATENODE 54
+#define DISPID_XMLDOM_DOCUMENT_CREATENODEEX 55
+#define DISPID_XMLDOM_DOCUMENT_NODEFROMID 56
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES 57
+#define DISPID_XMLDOM_DOCUMENT_LOAD 58
+#define DISPID_XMLDOM_DOCUMENT_PARSEERROR 59
+#define DISPID_XMLDOM_DOCUMENT_URL 60
+#define DISPID_XMLDOM_DOCUMENT_ASYNC 61
+#define DISPID_XMLDOM_DOCUMENT_ABORT 62
+#define DISPID_XMLDOM_DOCUMENT_LOADXML 63
+#define DISPID_XMLDOM_DOCUMENT_SAVE 64
+#define DISPID_XMLDOM_DOCUMENT_VALIDATE 65
+#define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE 66
+#define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE 67
+#define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE 68
+#define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE 69
+#define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE 70
+#define DISPID_XMLDOM_DOCUMENT__TOP 71
+
+#define DISPID_DOM_NODELIST 72
+#define DISPID_DOM_NODELIST_ITEM 73
+#define DISPID_DOM_NODELIST_LENGTH 74
+
+#define DISPID_XMLDOM_NODELIST 75
+#define DISPID_XMLDOM_NODELIST_NEXTNODE 76
+#define DISPID_XMLDOM_NODELIST_RESET 77
+#define DISPID_XMLDOM_NODELIST_NEWENUM 78
+#define DISPID_XMLDOM_NODELIST__TOP 79
+
+#define DISPID_DOM_NAMEDNODEMAP 80
+#define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM 81
+#define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM 82
+#define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM 83
+
+#define DISPID_XMLDOM_NAMEDNODEMAP 84
+#define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM 85
+#define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM 86
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE 87
+#define DISPID_XMLDOM_NAMEDNODEMAP_RESET 88
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM 89
+#define DISPID_XMLDOM_NAMEDNODEMAP__TOP 90
+
+#define DISPID_DOM_W3CWRAPPERS 91
+
+#define DISPID_DOM_DOCUMENTFRAGMENT 92
+#define DISPID_DOM_DOCUMENTFRAGMENT__TOP 93
+
+#define DISPID_DOM_ELEMENT 94
+#define DISPID_DOM_ELEMENT_GETTAGNAME 95
+#define DISPID_DOM_ELEMENT_GETATTRIBUTES 96
+#define DISPID_DOM_ELEMENT_GETATTRIBUTE 97
+#define DISPID_DOM_ELEMENT_SETATTRIBUTE 98
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE 99
+#define DISPID_DOM_ELEMENT_GETATTRIBUTENODE 100
+#define DISPID_DOM_ELEMENT_SETATTRIBUTENODE 101
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE 102
+#define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME 103
+#define DISPID_DOM_ELEMENT_NORMALIZE 104
+#define DISPID_DOM_ELEMENT__TOP 105
+
+#define DISPID_DOM_DATA 106
+#define DISPID_DOM_DATA_DATA 107
+#define DISPID_DOM_DATA_LENGTH 108
+#define DISPID_DOM_DATA_SUBSTRING 109
+#define DISPID_DOM_DATA_APPEND 110
+#define DISPID_DOM_DATA_INSERT 111
+#define DISPID_DOM_DATA_DELETE 112
+#define DISPID_DOM_DATA_REPLACE 113
+#define DISPID_DOM_DATA__TOP 114
+
+#define DISPID_DOM_ATTRIBUTE 115
+#define DISPID_DOM_ATTRIBUTE_GETNAME 116
+#define DISPID_DOM_ATTRIBUTE_SPECIFIED 117
+#define DISPID_DOM_ATTRIBUTE_VALUE 118
+#define DISPID_DOM_ATTRIBUTE__TOP 119
+
+#define DISPID_DOM_TEXT 120
+#define DISPID_DOM_TEXT_SPLITTEXT 121
+#define DISPID_DOM_TEXT_JOINTEXT 122
+#define DISPID_DOM_TEXT__TOP 123
+
+#define DISPID_DOM_PI 124
+#define DISPID_DOM_PI_TARGET 125
+#define DISPID_DOM_PI_DATA 126
+#define DISPID_DOM_PI__TOP 127
+
+#define DISPID_DOM_DOCUMENTTYPE 128
+#define DISPID_DOM_DOCUMENTTYPE_NAME 129
+#define DISPID_DOM_DOCUMENTTYPE_ENTITIES 130
+#define DISPID_DOM_DOCUMENTTYPE_NOTATIONS 131
+#define DISPID_DOM_DOCUMENTTYPE__TOP 132
+
+#define DISPID_DOM_NOTATION 133
+#define DISPID_DOM_NOTATION_PUBLICID 134
+#define DISPID_DOM_NOTATION_SYSTEMID 135
+#define DISPID_DOM_NOTATION__TOP 136
+
+#define DISPID_DOM_ENTITY 137
+#define DISPID_DOM_ENTITY_PUBLICID 138
+#define DISPID_DOM_ENTITY_SYSTEMID 139
+#define DISPID_DOM_ENTITY_NOTATIONNAME 140
+#define DISPID_DOM_ENTITY__TOP 141
+
+#define DISPID_DOM_IMPLEMENTATION 142
+#define DISPID_DOM_IMPLEMENTATION_HASFEATURE 143
+#define DISPID_DOM_IMPLEMENTATION__TOP 144
+
+
+#define  DISPID_DOM_ERROR              0x000000b0
+#define  DISPID_DOM_ERROR_ERRORCODE    0x000000b1
+#define  DISPID_DOM_ERROR_URL          0x000000b2
+#define  DISPID_DOM_ERROR_REASON       0x000000b3
+#define  DISPID_DOM_ERROR_SRCTEXT      0x000000b4
+#define  DISPID_DOM_ERROR_LINE         0x000000b5
+#define  DISPID_DOM_ERROR_LINEPOS      0x000000b6
+#define  DISPID_DOM_ERROR_FILEPOS      0x000000b7
+#define  DISPID_DOM_ERROR__TOP         0x000000b8
+
+#define  DISPID_XMLDOMEVENT                    197
+#define  DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE
+#define  DISPID_XMLDOMEVENT_ONDATAAVAILABLE    198
+#define  DISPID_XMLDOMEVENT__TOP               199
+
+#endif /* __XMLDOMDID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl
new file mode 100644
index 0000000..3fcbc0e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <idispids.h>
+#include <xmldsodid.h>
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+interface IXMLDOMDocument;
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(310afa62-0575-11d2-9ca9-0060b0ec3d39),
+pointer_default(unique)
+]
+interface IXMLDSOControl : IDispatch
+{
+	[propget,id(DISPID_XMLDSO_DOCUMENT)] 
+        HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc);
+
+	[propput,id(DISPID_XMLDSO_DOCUMENT)] 
+        HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc);
+
+	[propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] 
+        HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible);
+
+	[propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] 
+        HRESULT JavaDSOCompatible([in]  BOOL fJavaDSOCompatible);
+
+	[propget, id(DISPID_READYSTATE)] 
+        HRESULT readyState([out, retval] long *state);
+}
+
+[
+    helpstring("XML Data Source Object"),
+    progid("Microsoft.XMLDSO.1.0"),
+    vi_progid("Microsoft.XMLDSO"),
+    threading(apartment),
+    version(1.0),
+    uuid(550dda30-0541-11d2-9ca9-0060b0ec3d39)
+]
+coclass XMLDSOControl
+{
+	[default] interface IXMLDSOControl;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h
new file mode 100644
index 0000000..550d46f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __XMLDSODID_H__
+#define __XMLDSODID_H__
+
+#define DISPID_XOBJ_MIN                 0x00010000
+#define DISPID_XOBJ_MAX                 0x0001FFFF
+#define DISPID_XOBJ_BASE                0x00010000
+
+#define  DISPID_XMLDSO                      0x00010000
+#define  DISPID_XMLDSO_DOCUMENT             0x00010001
+#define  DISPID_XMLDSO_JAVADSOCOMPATIBLE    0x00010002
+
+#endif /* __XMLDSODID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl
new file mode 100644
index 0000000..7b2a6a9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2010 Nikolay Sivov
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+typedef enum XmlNodeType {
+    XmlNodeType_None                  = 0,
+    XmlNodeType_Element               = 1,
+    XmlNodeType_Attribute             = 2,
+    XmlNodeType_Text                  = 3,
+    XmlNodeType_CDATA                 = 4,
+    XmlNodeType_ProcessingInstruction = 7,
+    XmlNodeType_Comment               = 8,
+    XmlNodeType_DocumentType          = 10,
+    XmlNodeType_Whitespace            = 13,
+    XmlNodeType_EndElement            = 15,
+    XmlNodeType_XmlDeclaration        = 17,
+    _XmlNodeType_Last                 = 17
+} XmlNodeType;
+
+/* IXmlReader */
+[
+  local,
+  object,
+  uuid(7279fc81-709d-4095-b63d-69fe4b0d9030),
+  pointer_default(unique)
+]
+interface IXmlReader : IUnknown
+{
+    HRESULT SetInput( [in] IUnknown *input);
+    HRESULT GetProperty( [in] UINT property, [out] LONG_PTR *value);
+    HRESULT SetProperty( [in] UINT property, [in] LONG_PTR value);
+    HRESULT Read( [out] XmlNodeType *node_type);
+    HRESULT GetNodeType( [out] XmlNodeType *node_type);
+    HRESULT MoveToFirstAttribute(void);
+    HRESULT MoveToNextAttribute(void);
+    HRESULT MoveToAttributeByName( [in] LPCWSTR local_name,
+                                   [in] LPCWSTR namespaceUri);
+    HRESULT MoveToElement(void);
+    HRESULT GetQualifiedName( [out] LPCWSTR *qualifiedName,
+                              [out] UINT *qualifiedName_length);
+    HRESULT GetNamespaceUri( [out] LPCWSTR *namespaceUri,
+                             [out] UINT *nnamespaceUri_length);
+    HRESULT GetLocalName( [out] LPCWSTR *local_name,
+                          [out] UINT *locale_name_length);
+    HRESULT GetPrefix( [out] LPCWSTR *prefix,
+                       [out] UINT *prefix_length);
+    HRESULT GetValue( [out] LPCWSTR *value,
+                      [out] UINT *value_length);
+    HRESULT ReadValueChunk( [out] WCHAR *buffer,
+                            [in]  UINT chunk_size,
+                            [in,out] UINT *read);
+    HRESULT GetBaseUri( [out] LPCWSTR *baseUri,
+                        [out] UINT *baseUri_length);
+    BOOL IsDefault(void);
+    BOOL IsEmptyElement(void);
+    HRESULT GetLineNumber( [out] UINT *lineNumber);
+    HRESULT GetLinePosition( [out] UINT *linePosition);
+    HRESULT GetAttributeCount( [out] UINT *attributeCount);
+    HRESULT GetDepth( [out] UINT *depth);
+    BOOL IsEOF(void);
+}
+
+/* IXmlResolver */
+[
+  local,
+  object,
+  uuid(7279fc82-709d-4095-b63d-69fe4b0d9030),
+  pointer_default(unique)
+]
+interface IXmlResolver : IUnknown
+{
+    HRESULT ResolveUri([in] LPCWSTR base_uri,
+                       [in] LPCWSTR public_id,
+                       [in] LPCWSTR system_id,
+                       [out] IUnknown **input);
+}
+
+/* IXmlReader state */
+typedef enum XmlReadState
+{
+    XmlReadState_Initial,
+    XmlReadState_Interactive,
+    XmlReadState_Error,
+    XmlReadState_EndOfFile,
+    XmlReadState_Closed
+} XmlReadState;
+
+/* conformance levels */
+typedef enum XmlConformanceLevel
+{
+    XmlConformanceLevel_Auto,
+    XmlConformanceLevel_Fragment,
+    XmlConformanceLevel_Document,
+    _XmlConformanceLevel_Last = XmlConformanceLevel_Document
+} XmlConformanceLevel;
+
+/* DTD processing mode */
+typedef enum DtdProcessing
+{
+    DtdProcessing_Prohibit,
+    DtdProcessing_Parse,
+    _DtdProcessing_Last = DtdProcessing_Parse
+} DtdProcessing;
+
+/* IXmlReader properties */
+typedef enum XmlReaderProperty
+{
+    XmlReaderProperty_MultiLanguage,
+    XmlReaderProperty_ConformanceLevel,
+    XmlReaderProperty_RandomAccess,
+    XmlReaderProperty_XmlResolver,
+    XmlReaderProperty_DtdProcessing,
+    XmlReaderProperty_ReadState,
+    XmlReaderProperty_MaxElementDepth,
+    XmlReaderProperty_MaxEntityExpansion,
+    _XmlReaderProperty_Last = XmlReaderProperty_MaxEntityExpansion
+} XmlReaderProperty;
+
+/* reader error codes */
+typedef enum XmlError
+{
+    MX_E_MX = 0xc00cee00,
+    MX_E_INPUTEND,
+    MX_E_ENCODING,
+    MX_E_ENCODINGSWITCH,
+    MX_E_ENCODINGSIGNATURE,
+    WC_E_WC = 0xc00cee20,
+    WC_E_WHITESPACE,
+    WC_E_SEMICOLON,
+    WC_E_GREATERTHAN,
+    WC_E_QUOTE,
+    WC_E_EQUAL,
+    WC_E_LESSTHAN,
+    WC_E_HEXDIGIT,
+    WC_E_DIGIT,
+    WC_E_LEFTBRACKET,
+    WC_E_LEFTPAREN,
+    WC_E_XMLCHARACTER,
+    WC_E_NAMECHARACTER,
+    WC_E_SYNTAX,
+    WC_E_CDSECT,
+    WC_E_COMMENT,
+    WC_E_CONDSECT,
+    WC_E_DECLATTLIST,
+    WC_E_DECLDOCTYPE,
+    WC_E_DECLELEMENT,
+    WC_E_DECLENTITY,
+    WC_E_DECLNOTATION,
+    WC_E_NDATA,
+    WC_E_PUBLIC,
+    WC_E_SYSTEM,
+    WC_E_NAME,
+    WC_E_ROOTELEMENT,
+    WC_E_ELEMENTMATCH,
+    WC_E_UNIQUEATTRIBUTE,
+    WC_E_TEXTXMLDECL,
+    WC_E_LEADINGXML,
+    WC_E_TEXTDECL,
+    WC_E_XMLDECL,
+    WC_E_ENCNAME,
+    WC_E_PUBLICID,
+    WC_E_PESINTERNALSUBSET,
+    WC_E_PESBETWEENDECLS,
+    WC_E_NORECURSION,
+    WC_E_ENTITYCONTENT,
+    WC_E_UNDECLAREDENTITY,
+    WC_E_PARSEDENTITY,
+    WC_E_NOEXTERNALENTITYREF,
+    WC_E_PI,
+    WC_E_SYSTEMID,
+    WC_E_QUESTIONMARK,
+    WC_E_CDSECTEND,
+    WC_E_MOREDATA,
+    WC_E_DTDPROHIBITED,
+    WC_E_INVALIDXMLSPACE,
+    NC_E_NC = 0xc00cee60,
+    NC_E_QNAMECHARACTER,
+    NC_E_QNAMECOLON,
+    NC_E_NAMECOLON,
+    NC_E_DECLAREDPREFIX,
+    NC_E_UNDECLAREDPREFIX,
+    NC_E_EMPTYURI,
+    NC_E_XMLPREFIXRESERVED,
+    NC_E_XMLNSPREFIXRESERVED,
+    NC_E_XMLURIRESERVED,
+    NC_E_XMLNSURIRESERVED,
+    SC_E_SC = 0xc00cee80,
+    SC_E_MAXELEMENTDEPTH,
+    SC_E_MAXENTITYEXPANSION,
+    WR_E_WR = 0xc00cef00,
+    WR_E_NONWHITESPACE,
+    WR_E_NSPREFIXDECLARED,
+    WR_E_NSPREFIXWITHEMPTYNSURI,
+    WR_E_DUPLICATEATTRIBUTE,
+    WR_E_XMLNSPREFIXDECLARATION,
+    WR_E_XMLPREFIXDECLARATION,
+    WR_E_XMLURIDECLARATION,
+    WR_E_XMLNSURIDECLARATION,
+    WR_E_NAMESPACEUNDECLARED,
+    WR_E_INVALIDXMLSPACE,
+    WR_E_INVALIDACTION,
+    WR_E_INVALIDSURROGATEPAIR,
+    XML_E_INVALID_DECIMAL = 0xc00ce01d,
+    XML_E_INVALID_HEXIDECIMAL,
+    XML_E_INVALID_UNICODE,
+    XML_E_INVALIDENCODING = 0xc00ce06e
+} XmlError;
+
+/* IXmlReader construction */
+cpp_quote("STDAPI CreateXmlReader(REFIID riid, void **ppvObject, IMalloc *pMalloc);")
+
+cpp_quote("typedef IUnknown IXmlReaderInput;")
+cpp_quote("STDAPI CreateXmlReaderInputWithEncodingName(IUnknown *stream, IMalloc *pMalloc,")
+cpp_quote("                                            LPCWSTR encoding, BOOL hint,")
+cpp_quote("                                            LPCWSTR base_uri, IXmlReaderInput **ppInput);")
+
+typedef enum XmlStandalone
+{
+    XmlStandalone_Omit,
+    XmlStandalone_Yes,
+    XmlStandalone_No,
+    _XmlStandalone_Last = XmlStandalone_No
+} XmlStandalone;
+
+typedef enum XmlWriterProperty
+{
+    XmlWriterProperty_MultiLanguage,
+    XmlWriterProperty_Indent,
+    XmlWriterProperty_ByteOrderMark,
+    XmlWriterProperty_OmitXmlDeclaration,
+    XmlWriterProperty_ConformanceLevel,
+    _XmlWriterProperty_Last = XmlWriterProperty_OmitXmlDeclaration
+} XmlWriterProperty;
+
+/* IXmlWriter */
+[
+  local,
+  object,
+  uuid(7279FC88-709D-4095-B63D-69FE4B0D9030),
+  pointer_default(unique)
+]
+interface IXmlWriter : IUnknown
+{
+    HRESULT SetOutput([in] IUnknown *pOutput);
+    HRESULT GetProperty([in] UINT nProperty, [out] LONG_PTR *ppValue);
+    HRESULT SetProperty([in] UINT nProperty, [in] LONG_PTR pValue);
+    HRESULT WriteAttributes([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);
+    HRESULT WriteAttributeString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,
+                                 [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue);
+    HRESULT WriteCData([in] LPCWSTR pwszText);
+    HRESULT WriteCharEntity([in] WCHAR wch);
+    HRESULT WriteChars([in] const WCHAR *pwch, [in] UINT cwch);
+    HRESULT WriteComment([in] LPCWSTR pwszComment);
+    HRESULT WriteDocType([in] LPCWSTR pwszName, [in] LPCWSTR pwszPublicId,
+                         [in] LPCWSTR pwszSystemId, [in] LPCWSTR pwszSubset);
+    HRESULT WriteElementString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,
+                               [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue);
+    HRESULT WriteEndDocument();
+    HRESULT WriteEndElement();
+    HRESULT WriteEntityRef([in] LPCWSTR pwszName);
+    HRESULT WriteFullEndElement();
+    HRESULT WriteName([in] LPCWSTR pwszName);
+    HRESULT WriteNmToken([in] LPCWSTR pwszNmToken);
+    HRESULT WriteNode([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);
+    HRESULT WriteNodeShallow([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);
+    HRESULT WriteProcessingInstruction([in] LPCWSTR pwszName, [in] LPCWSTR pwszText);
+    HRESULT WriteQualifiedName([in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri);
+    HRESULT WriteRaw([in] LPCWSTR pwszData);
+    HRESULT WriteRawChars([in] const WCHAR *pwch, [in] UINT cwch);
+    HRESULT WriteStartDocument([in] XmlStandalone standalone);
+    HRESULT WriteStartElement([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,
+                              [in]  LPCWSTR pwszNamespaceUri);
+    HRESULT WriteString([in] LPCWSTR pwszText);
+    HRESULT WriteSurrogateCharEntity([in] WCHAR wchLow, [in] WCHAR wchHigh);
+    HRESULT WriteWhitespace([in] LPCWSTR pwszWhitespace);
+    HRESULT Flush();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h
new file mode 100644
index 0000000..6e17674
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h
@@ -0,0 +1,55 @@
+/*
+ * Scroll wheel mouse definitions
+ *
+ * Copyright (C) 2000 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ZMOUSE_H
+#define __WINE_ZMOUSE_H
+
+#define MSH_MOUSEWHEEL "MSWHEEL_ROLLMSG"
+
+#define MOUSEZ_CLASSNAME  "MouseZ"
+#define MOUSEZ_TITLE      "Magellan MSWHEEL"
+
+#define MSH_WHEELMODULE_CLASS (MOUSEZ_CLASSNAME)
+#define MSH_WHEELMODULE_TITLE (MOUSEZ_TITLE)
+
+#define MSH_WHEELSUPPORT "MSH_WHEELSUPPORT_MSG"
+
+#define MSH_SCROLL_LINES "MSH_SCROLL_LINES_MSG"
+
+#define WHEEL_DELTA      120
+
+#ifndef WHEEL_PAGESCROLL
+#define WHEEL_PAGESCROLL  (UINT_MAX)
+#endif
+
+#ifndef SPI_SETWHEELSCROLLLINES
+#define SPI_SETWHEELSCROLLLINES   105
+#endif
+
+#endif  /* __WINE_ZMOUSE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c
new file mode 100644
index 0000000..dd6e1a5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c
@@ -0,0 +1,357 @@
+/* $Id: VBoxDbgGl.c $ */
+
+/** @file
+ * VBox wine & ogl debugging stuff
+ */
+
+/*
+ * Copyright (C) 2011-2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#include <iprt/ctype.h>
+
+#include <config.h>
+#include "../wined3d/wined3d_private.h"
+
+#include "VBoxDbgGl.h"
+
+DWORD g_VBoxDbgGlFCheckDrawPrim = 0;
+DWORD g_VBoxDbgGlFBreakDrawPrimIfCanNotMatch = 0;
+
+void dbglFree(void *pvData)
+{
+    HeapFree(GetProcessHeap(),  0, pvData);
+}
+
+void* dbglAlloc(DWORD cbSize)
+{
+    return HeapAlloc(GetProcessHeap(),  0, cbSize);
+}
+
+GLint dbglFmtGetNumComponents(GLenum format)
+{
+    switch(format)
+    {
+        case GL_COLOR_INDEX:
+        case GL_RED:
+        case GL_GREEN:
+        case GL_BLUE:
+        case GL_ALPHA:
+            return 1;
+        case GL_RGB:
+        case GL_BGR:
+            return 3;
+        case GL_RGBA:
+        case GL_BGRA:
+            return 4;
+        case GL_LUMINANCE:
+            return 1;
+        case GL_LUMINANCE_ALPHA:
+            return 2;
+        default:
+            Assert(0);
+            return 1;
+    }
+}
+
+GLint dbglFmtGetBpp(GLenum format, GLenum type)
+{
+    switch (type)
+    {
+        case GL_UNSIGNED_BYTE_3_3_2:
+            return 8;
+        case GL_UNSIGNED_BYTE_2_3_3_REV:
+            return 8;
+        case GL_UNSIGNED_SHORT_5_6_5:
+            return 16;
+        case GL_UNSIGNED_SHORT_5_6_5_REV:
+            return 16;
+        case GL_UNSIGNED_SHORT_4_4_4_4:
+            return 16;
+        case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+            return 16;
+        case GL_UNSIGNED_SHORT_5_5_5_1:
+            return 16;
+        case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+            return 16;
+        case GL_UNSIGNED_INT_8_8_8_8:
+            return 32;
+        case GL_UNSIGNED_INT_8_8_8_8_REV:
+            return 32;
+        case GL_UNSIGNED_INT_10_10_10_2:
+            return 32;
+        case GL_UNSIGNED_INT_2_10_10_10_REV:
+            return 32;
+        case GL_BYTE:
+        case GL_UNSIGNED_BYTE:
+            return dbglFmtGetNumComponents(format) * 8;
+        case GL_SHORT:
+        case GL_UNSIGNED_SHORT:
+            return dbglFmtGetNumComponents(format) * 16;
+        case GL_INT:
+        case GL_UNSIGNED_INT:
+        case GL_FLOAT:
+            return dbglFmtGetNumComponents(format) * 32;
+        case GL_DOUBLE:
+            return dbglFmtGetNumComponents(format) * 64;
+        case GL_2_BYTES:
+            return dbglFmtGetNumComponents(format) * 16;
+        case GL_3_BYTES:
+            return dbglFmtGetNumComponents(format) * 24;
+        case GL_4_BYTES:
+            return dbglFmtGetNumComponents(format) * 32;
+        default:
+            Assert(0);
+            return 8;
+    }
+}
+
+#define DBGL_OP(_op) gl##_op
+#define DBGL_FBO_OP(_op) gl_info->fbo_ops.gl##_op
+#define DBGL_EXT_OP(_op)  gl_info->gl##_op
+
+void dbglGetTexImage2D(const struct wined3d_gl_info *gl_info, GLint texTarget, GLint texName, GLint level, GLvoid **ppvImage, GLint *pw, GLint *ph, GLenum format, GLenum type)
+{
+    GLint ppb, pub, dstw, dsth, otex;
+    GLint pa, pr, psp, psr, ua, ur, usp, usr;
+    GLvoid *pvImage;
+    GLint rfb, dfb, rb, db;
+    GLint bpp = dbglFmtGetBpp(format, type);
+
+    DBGL_OP(GetIntegerv(GL_READ_FRAMEBUFFER_BINDING_EXT, &rfb));
+    DBGL_OP(GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING_EXT, &dfb));
+    DBGL_OP(GetIntegerv(GL_READ_BUFFER, &rb));
+    DBGL_OP(GetIntegerv(GL_DRAW_BUFFER, &db));
+
+    DBGL_FBO_OP(BindFramebuffer)(GL_READ_FRAMEBUFFER_BINDING_EXT, 0);
+    DBGL_FBO_OP(BindFramebuffer)(GL_DRAW_FRAMEBUFFER_BINDING_EXT, 0);
+    DBGL_OP(ReadBuffer(GL_BACK));
+    DBGL_OP(DrawBuffer(GL_BACK));
+
+    DBGL_OP(GetIntegerv(GL_PIXEL_PACK_BUFFER_BINDING_ARB, &ppb));
+    DBGL_OP(GetIntegerv(GL_PIXEL_UNPACK_BUFFER_BINDING_ARB, &pub));
+    DBGL_OP(GetIntegerv(GL_TEXTURE_BINDING_2D, &otex));
+
+    DBGL_OP(GetIntegerv(GL_PACK_ROW_LENGTH, &pr));
+    DBGL_OP(GetIntegerv(GL_PACK_ALIGNMENT, &pa));
+    DBGL_OP(GetIntegerv(GL_PACK_SKIP_PIXELS, &psp));
+    DBGL_OP(GetIntegerv(GL_PACK_SKIP_ROWS, &psr));
+
+    DBGL_OP(GetIntegerv(GL_UNPACK_ROW_LENGTH, &ur));
+    DBGL_OP(GetIntegerv(GL_UNPACK_ALIGNMENT, &ua));
+    DBGL_OP(GetIntegerv(GL_UNPACK_SKIP_PIXELS, &usp));
+    DBGL_OP(GetIntegerv(GL_UNPACK_SKIP_ROWS, &usr));
+
+    DBGL_OP(BindTexture(texTarget, texName));
+    DBGL_OP(GetTexLevelParameteriv(texTarget, level, GL_TEXTURE_WIDTH, &dstw));
+    DBGL_OP(GetTexLevelParameteriv(texTarget, level, GL_TEXTURE_HEIGHT, &dsth));
+
+    DBGL_OP(PixelStorei(GL_PACK_ROW_LENGTH, 0));
+    DBGL_OP(PixelStorei(GL_PACK_ALIGNMENT, 1));
+    DBGL_OP(PixelStorei(GL_PACK_SKIP_PIXELS, 0));
+    DBGL_OP(PixelStorei(GL_PACK_SKIP_ROWS, 0));
+
+    DBGL_OP(PixelStorei(GL_UNPACK_ROW_LENGTH, 0));
+    DBGL_OP(PixelStorei(GL_UNPACK_ALIGNMENT, 1));
+    DBGL_OP(PixelStorei(GL_UNPACK_SKIP_PIXELS, 0));
+    DBGL_OP(PixelStorei(GL_UNPACK_SKIP_ROWS, 0));
+
+    DBGL_EXT_OP(BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0));
+    DBGL_EXT_OP(BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
+
+    pvImage = dbglAlloc(((bpp*dstw + 7) >> 3)*dsth);
+    DBGL_OP(GetTexImage(texTarget, level, format, type, pvImage));
+
+    DBGL_OP(BindTexture(texTarget, otex));
+
+    DBGL_OP(PixelStorei(GL_PACK_ROW_LENGTH, pr));
+    DBGL_OP(PixelStorei(GL_PACK_ALIGNMENT, pa));
+    DBGL_OP(PixelStorei(GL_PACK_SKIP_PIXELS, psp));
+    DBGL_OP(PixelStorei(GL_PACK_SKIP_ROWS, psr));
+
+    DBGL_OP(PixelStorei(GL_UNPACK_ROW_LENGTH, ur));
+    DBGL_OP(PixelStorei(GL_UNPACK_ALIGNMENT, ua));
+    DBGL_OP(PixelStorei(GL_UNPACK_SKIP_PIXELS, usp));
+    DBGL_OP(PixelStorei(GL_UNPACK_SKIP_ROWS, usr));
+
+    DBGL_EXT_OP(BindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, ppb));
+    DBGL_EXT_OP(BindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pub));
+
+    DBGL_FBO_OP(BindFramebuffer)(GL_READ_FRAMEBUFFER_BINDING_EXT, rfb);
+    DBGL_FBO_OP(BindFramebuffer)(GL_DRAW_FRAMEBUFFER_BINDING_EXT, dfb);
+    DBGL_OP(ReadBuffer(rb));
+    DBGL_OP(DrawBuffer(db));
+
+    *ppvImage = pvImage;
+    *pw = dstw;
+    *ph = dsth;
+}
+
+DECLEXPORT(void) dbglPrint(const char *format, ... )
+{
+    va_list args;
+    static char txt[8092];
+
+    va_start( args, format );
+    vsprintf( txt, format, args );
+
+    OutputDebugString(txt);
+}
+
+void dbglDumpImage2D(const char* pszDesc, const void *pvData, uint32_t width, uint32_t height, uint32_t bpp, uint32_t pitch)
+{
+    dbglPrint("<?dml?><exec cmd=\"!vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d\">%s</exec>, ( !vbvdbg.ms 0x%p 0n%d 0n%d 0n%d 0n%d )\n",
+            pvData, width, height, bpp, pitch,
+            pszDesc,
+            pvData, width, height, bpp, pitch);
+}
+
+void dbglDumpTexImage2D(const struct wined3d_gl_info *gl_info, const char* pszDesc, GLint texTarget, GLint texName, GLint level, GLboolean fBreak)
+{
+    GLvoid *pvImage;
+    GLint w, h;
+    dbglGetTexImage2D(gl_info, texTarget, texName, level, &pvImage, &w, &h, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV);
+    dbglPrint("%s target(%d), name(%d), width(%d), height(%d)\n", pszDesc, texTarget, texName, w, h);
+    dbglDumpImage2D("texture data", pvImage, w, h, 32, (32 * w)/8);
+    if (fBreak)
+    {
+        Assert(0);
+    }
+    dbglFree(pvImage);
+}
+
+void dbglCmpTexImage2D(const struct wined3d_gl_info *gl_info, const char* pszDesc, GLint texTarget, GLint texName, GLint level, void *pvImage,
+        GLint width, GLint height, GLenum format, GLenum type)
+{
+    GLvoid *pvTexImg;
+    GLint w, h;
+    GLint bpp = dbglFmtGetBpp(format, type);
+    GLint pitch, texPitch;
+
+    dbglGetTexImage2D(gl_info, texTarget, texName, level, &pvTexImg, &w, &h, format, type);
+
+    pitch = ((bpp * width + 7) >> 3)/8;
+    texPitch = ((bpp * w + 7) >> 3)/8;
+
+    if (w != width)
+    {
+        dbglPrint("width mismatch was %d, but expected %d\n", w, width);
+        dbglDumpImage2D("expected texture data:", pvImage, width, height, bpp, pitch);
+        dbglDumpImage2D("stored texture data:", pvTexImg, w, h, bpp, texPitch);
+
+        Assert(0);
+
+        dbglFree(pvTexImg);
+        return;
+    }
+    if (h != height)
+    {
+        dbglPrint("height mismatch was %d, but expected %d\n", h, height);
+        dbglDumpImage2D("expected texture data:", pvImage, width, height, bpp, pitch);
+        dbglDumpImage2D("stored texture data:", pvTexImg, w, h, bpp, texPitch);
+
+        Assert(0);
+
+        dbglFree(pvTexImg);
+        return;
+    }
+
+    if (memcmp(pvImage, pvTexImg, w * h * 4))
+    {
+        dbglPrint("tex data mismatch\n");
+        dbglDumpImage2D("expected texture data:", pvImage, width, height, bpp, pitch);
+        dbglDumpImage2D("stored texture data:", pvTexImg, w, h, bpp, texPitch);
+
+        Assert(0);
+    }
+
+    dbglFree(pvTexImg);
+}
+
+void dbglCheckTexUnits(const struct wined3d_gl_info *gl_info, const struct IWineD3DDeviceImpl *pDevice, BOOL fBreakIfCanNotMatch)
+{
+    int iStage;
+    GLint ActiveTexUnit = 0;
+    GLint CheckTexUnit = 0;
+    DBGL_OP(GetIntegerv(GL_ACTIVE_TEXTURE, &ActiveTexUnit));
+
+    Assert(ActiveTexUnit >= GL_TEXTURE0);
+    Assert(ActiveTexUnit < GL_TEXTURE0 + RT_ELEMENTS(pDevice->stateBlock->textures));
+
+    CheckTexUnit = ActiveTexUnit;
+
+    for (iStage = 0; iStage < RT_ELEMENTS(pDevice->stateBlock->textures); ++iStage)
+    {
+        GLint curTex = 0;
+        int iLevel;
+        const IWineD3DTextureImpl *pTexture = (IWineD3DTextureImpl*)pDevice->stateBlock->textures[iStage];
+        if (!pTexture) continue;
+
+        Assert(!pTexture->baseTexture.is_srgb);
+
+        for (iLevel = 0; iLevel < (int)pTexture->baseTexture.levels; ++iLevel)
+        {
+            IWineD3DSurfaceImpl *pSurf = (IWineD3DSurfaceImpl*)pTexture->surfaces[iLevel];
+            Assert(pSurf);
+            if (CheckTexUnit != iStage + GL_TEXTURE0)
+            {
+                DBGL_EXT_OP(ActiveTextureARB(iStage + GL_TEXTURE0));
+                CheckTexUnit = iStage + GL_TEXTURE0;
+            }
+
+            Assert(pTexture->target == GL_TEXTURE_2D);
+
+            DBGL_OP(GetIntegerv(GL_TEXTURE_BINDING_2D, &curTex));
+            Assert(curTex);
+            Assert(pSurf->texture_name);
+            Assert(pSurf->texture_name == curTex);
+            Assert(pSurf->texture_name == pTexture->baseTexture.texture_rgb.name);
+            Assert(pSurf->texture_target == GL_TEXTURE_2D);
+            Assert(pTexture->target == pSurf->texture_target);
+            Assert(DBGL_OP(IsEnabled(pSurf->texture_target)));
+            Assert(pSurf->Flags & SFLAG_INTEXTURE);
+            if (pSurf->Flags & SFLAG_INSYSMEM && !pSurf->Flags & SFLAG_PBO)
+            {
+                Assert(pSurf->resource.allocatedMemory);
+                /* we can match GPU & our state */
+                dbglCmpTexImage2D(gl_info, "matching tex data state", pSurf->texture_target, pSurf->texture_name, iLevel, pSurf->resource.allocatedMemory,
+                        pSurf->currentDesc.Width, pSurf->currentDesc.Height, pSurf->resource.format_desc->glFormat, pSurf->resource.format_desc->glType);
+            }
+            else
+            {
+                GLint w,h;
+                if (fBreakIfCanNotMatch)
+                {
+                    GLvoid* pvImage;
+                    dbglGetTexImage2D(gl_info, pSurf->texture_target, pSurf->texture_name, iLevel, &pvImage, &w, &h, GL_BGRA, GL_UNSIGNED_BYTE);
+                    Assert(w == pSurf->currentDesc.Width);
+                    Assert(h == pSurf->currentDesc.Height);
+                    dbglDumpImage2D("matching texture data", pvImage, w, h, 32, (32 * w)/8);
+                    Assert(0);
+                    dbglFree(pvImage);
+                }
+                else
+                {
+                    /* just check width & height */
+                    /* since we already asserted current texture binding, we can just quiry its parameters */
+                    DBGL_OP(GetTexLevelParameteriv(pSurf->texture_target, iLevel, GL_TEXTURE_WIDTH, &w));
+                    DBGL_OP(GetTexLevelParameteriv(pSurf->texture_target, iLevel, GL_TEXTURE_HEIGHT, &h));
+                    Assert(w == pSurf->currentDesc.Width);
+                    Assert(h == pSurf->currentDesc.Height);
+                }
+            }
+        }
+    }
+
+    if (CheckTexUnit != ActiveTexUnit)
+    {
+        DBGL_EXT_OP(ActiveTextureARB(ActiveTexUnit));
+    }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h
new file mode 100644
index 0000000..db52616
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h
@@ -0,0 +1,43 @@
+/* $Id: VBoxDbgGl.h $ */
+
+/** @file
+ * VBox wine & ogl debugging stuff
+ */
+
+/*
+ * Copyright (C) 2011-2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___VBoxDbgGl_h__
+#define ___VBoxDbgGl_h__
+
+//#include <windows.h>
+//#include "../wined3d/wined3d_gl.h"
+
+void dbglGetTexImage2D(const struct wined3d_gl_info *gl_info, GLint texTarget, GLint texName, GLint level, GLvoid **ppvImage, GLint *pw, GLint *ph, GLenum format, GLenum type);
+void dbglDumpTexImage2D(const struct wined3d_gl_info *gl_info, const char* pszDesc, GLint texTarget, GLint texName, GLint level, GLboolean fBreak);
+void dbglCmpTexImage2D(const struct wined3d_gl_info *gl_info, const char* pszDesc, GLint texTarget, GLint texName, GLint level, void *pvImage, GLint width, GLint height, GLenum format, GLenum type);
+void dbglCheckTexUnits(const struct wined3d_gl_info *gl_info, const struct IWineD3DDeviceImpl *pDevice, BOOL fBreakIfCanNotMatch);
+
+#ifdef DEBUG_misha
+#define DBGL_CHECK_DRAWPRIM(_gl_info, _pDevice) do { \
+        if (g_VBoxDbgGlFCheckDrawPrim) { \
+            dbglCheckTexUnits((_gl_info), (_pDevice), g_VBoxDbgGlFBreakDrawPrimIfCanNotMatch); \
+        } \
+    } while (0)
+#else
+#define DBGL_CHECK_DRAWPRIM(_gl_info, _pDevice) do {} while (0)
+#endif
+
+extern DWORD g_VBoxDbgGlFCheckDrawPrim;
+extern DWORD g_VBoxDbgGlFBreakDrawPrimIfCanNotMatch;
+
+#endif /* #ifndef ___VBoxDbgGl_h__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h
new file mode 100644
index 0000000..c2283b5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h
@@ -0,0 +1,147 @@
+/** @file
+ *
+ * VBox extension to Wine D3D
+ *
+ * Copyright (C) 2010-2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef ___VBoxWineEx_h__
+#define ___VBoxWineEx_h__
+
+typedef enum
+{
+    VBOXWINEEX_SHRC_STATE_UNDEFINED = 0,
+    /* the underlying GL resource can not be used because it can be removed concurrently by other SHRC client */
+    VBOXWINEEX_SHRC_STATE_GL_DISABLE,
+    /* the given client is requested to delete the underlying GL resource on SHRC termination */
+    VBOXWINEEX_SHRC_STATE_GL_DELETE
+} VBOXWINEEX_SHRC_STATE;
+
+
+#ifndef IN_VBOXLIBWINE
+
+#define VBOXWINEEX_VERSION 1
+
+#ifndef IN_VBOXWINEEX
+# define VBOXWINEEX_DECL(_type)   __declspec(dllimport) _type WINAPI
+# else
+# define VBOXWINEEX_DECL(_type)  __declspec(dllexport) _type WINAPI
+#endif
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_CREATETEXTURE(IDirect3DDevice9Ex *iface,
+            UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format,
+            D3DPOOL pool, IDirect3DTexture9 **texture, HANDLE *shared_handle,
+            void **pavClientMem);
+typedef FNVBOXWINEEXD3DDEV9_CREATETEXTURE *PFNVBOXWINEEXD3DDEV9_CREATETEXTURE;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE(IDirect3DDevice9Ex *iface,
+            UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, 
+            D3DPOOL pool, IDirect3DCubeTexture9 **texture, HANDLE *shared_handle,
+            void **pavClientMem);
+typedef FNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE *PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_CREATEVOLUMETEXTURE(IDirect3DDevice9Ex *iface,
+            UINT width, UINT height, UINT depth, UINT levels, DWORD usage, D3DFORMAT Format, D3DPOOL Pool,
+            IDirect3DVolumeTexture9 **ppVolumeTexture, HANDLE *pSharedHandle,
+            void **pavClientMem);
+typedef FNVBOXWINEEXD3DDEV9_CREATEVOLUMETEXTURE *PFNVBOXWINEEXD3DDEV9_CREATEVOLUMETEXTURE;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_VOLBLT(IDirect3DDevice9Ex *iface,
+                                                    IDirect3DVolume9 *pSourceVolume, IDirect3DVolume9 *pDestinationVolume,
+                                                    const struct VBOXBOX3D *pSrcBoxArg,
+                                                    const struct VBOXPOINT3D *pDstPoin3D);
+typedef FNVBOXWINEEXD3DDEV9_VOLBLT *PFNVBOXWINEEXD3DDEV9_VOLBLT;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_VOLTEXBLT(IDirect3DDevice9Ex *iface,
+                                                    IDirect3DVolumeTexture9 *pSourceTexture, IDirect3DVolumeTexture9 *pDestinationTexture,
+                                                    const struct VBOXBOX3D *pSrcBoxArg,
+                                                    const struct VBOXPOINT3D *pDstPoin3D);
+typedef FNVBOXWINEEXD3DDEV9_VOLTEXBLT *PFNVBOXWINEEXD3DDEV9_VOLTEXBLT;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_FLUSH(IDirect3DDevice9Ex *iface);
+typedef FNVBOXWINEEXD3DDEV9_FLUSH *PFNVBOXWINEEXD3DDEV9_FLUSH;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_FLUSHTOHOST(IDirect3DDevice9Ex *iface);
+typedef FNVBOXWINEEXD3DDEV9_FLUSHTOHOST *PFNVBOXWINEEXD3DDEV9_FLUSHTOHOST;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_FINISH(IDirect3DDevice9Ex *iface);
+typedef FNVBOXWINEEXD3DDEV9_FINISH *PFNVBOXWINEEXD3DDEV9_FINISH;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_UPDATE(IDirect3DDevice9Ex *iface, D3DPRESENT_PARAMETERS * pParams, IDirect3DDevice9Ex **outIface);
+typedef FNVBOXWINEEXD3DDEV9_UPDATE *PFNVBOXWINEEXD3DDEV9_UPDATE;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_TERM(IDirect3DDevice9Ex *iface);
+typedef FNVBOXWINEEXD3DDEV9_TERM *PFNVBOXWINEEXD3DDEV9_TERM;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DRC9_SETSHRCSTATE(IDirect3DResource9 *iface, VBOXWINEEX_SHRC_STATE enmState);
+typedef FNVBOXWINEEXD3DRC9_SETSHRCSTATE *PFNVBOXWINEEXD3DRC9_SETSHRCSTATE;
+
+typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DSWAPCHAIN9_PRESENT(IDirect3DSwapChain9 *iface, IDirect3DSurface9 *surf);
+typedef FNVBOXWINEEXD3DSWAPCHAIN9_PRESENT *PFNVBOXWINEEXD3DSWAPCHAIN9_PRESENT;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9CreateTexture(IDirect3DDevice9Ex *iface,
+            UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format,
+            D3DPOOL pool, IDirect3DTexture9 **texture, HANDLE *shared_handle,
+            void **pavClientMem); /* <- extension arg to pass in the client memory buffer,
+                                 *    applicable ONLY for SYSMEM textures */
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9CreateCubeTexture(IDirect3DDevice9Ex *iface,
+            UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format,
+            D3DPOOL pool, IDirect3DCubeTexture9 **texture, HANDLE *shared_handle,
+            void **pavClientMem); /* <- extension arg to pass in the client memory buffer,
+                                 *    applicable ONLY for SYSMEM textures */
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9CreateVolumeTexture(IDirect3DDevice9Ex *iface,
+            UINT width, UINT height, UINT depth, UINT levels, DWORD usage, D3DFORMAT Format, D3DPOOL Pool,
+            IDirect3DVolumeTexture9 **ppVolumeTexture, HANDLE *pSharedHandle,
+            void **pavClientMem);
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9VolBlt(IDirect3DDevice9Ex *iface,
+                                                    IDirect3DVolume9 *pSourceVolume, IDirect3DVolume9 *pDestinationVolume,
+                                                    const struct VBOXBOX3D *pSrcBoxArg,
+                                                    const struct VBOXPOINT3D *pDstPoin3D);
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9VolTexBlt(IDirect3DDevice9Ex *iface,
+                                                    IDirect3DVolumeTexture9 *pSourceTexture, IDirect3DVolumeTexture9 *pDestinationTexture,
+                                                    const struct VBOXBOX3D *pSrcBoxArg,
+                                                    const struct VBOXPOINT3D *pDstPoin3D);
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9Flush(IDirect3DDevice9Ex *iface); /* perform glFlush */
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9Finish(IDirect3DDevice9Ex *iface); /* perform glFinish */
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9FlushToHost(IDirect3DDevice9Ex *iface); /* flash data to host */
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9Update(IDirect3DDevice9Ex *iface, D3DPRESENT_PARAMETERS * pParams,
+                                                    IDirect3DDevice9Ex **outIface); /* update device parameters */
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DDev9Term(IDirect3DDevice9Ex *iface);
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DRc9SetShRcState(IDirect3DResource9 *iface, VBOXWINEEX_SHRC_STATE enmState);
+
+VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DSwapchain9Present(IDirect3DSwapChain9 *iface,
+                                IDirect3DSurface9 *surf); /* use the given surface as a frontbuffer content source */
+
+typedef struct VBOXWINEEX_D3DPRESENT_PARAMETERS
+{
+    D3DPRESENT_PARAMETERS Base;
+    struct VBOXUHGSMI *pHgsmi;
+} VBOXWINEEX_D3DPRESENT_PARAMETERS, *PVBOXWINEEX_D3DPRESENT_PARAMETERS;
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef IN_VBOXLIBWINE */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/debug.c b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/debug.c
new file mode 100644
index 0000000..a35bb3d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/debug.c
@@ -0,0 +1,498 @@
+/*
+ * Management of the debugging channels
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <windows.h>
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "wine/debug.h"
+//#include "wine/library.h"
+
+#ifdef VBOX_WITH_WDDM
+#include <VBoxDispMpLogger.h>
+#include <iprt/err.h>
+#else
+#include <iprt/log.h>
+#endif
+
+static const char * const debug_classes[] = { "fixme", "err", "warn", "trace" };
+
+#define MAX_DEBUG_OPTIONS 256
+
+typedef DECLCALLBACK(void) FNVBOXWINELOGBACKDOOR(char* pcszStr);
+typedef FNVBOXWINELOGBACKDOOR *PFNVBOXWINELOGBACKDOOR;
+static PFNVBOXWINELOGBACKDOOR vbox_log_backdoor = NULL;
+static unsigned char default_flags = (1 << __WINE_DBCL_ERR) | (1 << __WINE_DBCL_FIXME) | (1 << __WINE_DBCL_WARN);
+static int nb_debug_options = -1;
+static struct __wine_debug_channel debug_options[MAX_DEBUG_OPTIONS];
+
+static struct __wine_debug_functions funcs;
+
+static void debug_init(void);
+
+static int cmp_name( const void *p1, const void *p2 )
+{
+    const char *name = p1;
+    const struct __wine_debug_channel *chan = p2;
+    return strcmp( name, chan->name );
+}
+
+/* get the flags to use for a given channel, possibly setting them too in case of lazy init */
+unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel )
+{
+    if (nb_debug_options == -1) debug_init();
+
+    if (nb_debug_options)
+    {
+        struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,
+                                                    sizeof(debug_options[0]), cmp_name );
+        if (opt) return opt->flags;
+    }
+    /* no option for this channel */
+    if (channel->flags & (1 << __WINE_DBCL_INIT)) channel->flags = default_flags;
+    return default_flags;
+}
+
+/* set the flags to use for a given channel; return 0 if the channel is not available to set */
+int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+                                  unsigned char set, unsigned char clear )
+{
+    if (nb_debug_options == -1) debug_init();
+
+    if (nb_debug_options)
+    {
+        struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,
+                                                    sizeof(debug_options[0]), cmp_name );
+        if (opt)
+        {
+            opt->flags = (opt->flags & ~clear) | set;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+/* add a new debug option at the end of the option list */
+static void add_option( const char *name, unsigned char set, unsigned char clear )
+{
+    int min = 0, max = nb_debug_options - 1, pos, res;
+
+    if (!name[0])  /* "all" option */
+    {
+        default_flags = (default_flags & ~clear) | set;
+        return;
+    }
+    if (strlen(name) >= sizeof(debug_options[0].name)) return;
+
+    while (min <= max)
+    {
+        pos = (min + max) / 2;
+        res = strcmp( name, debug_options[pos].name );
+        if (!res)
+        {
+            debug_options[pos].flags = (debug_options[pos].flags & ~clear) | set;
+            return;
+        }
+        if (res < 0) max = pos - 1;
+        else min = pos + 1;
+    }
+    if (nb_debug_options >= MAX_DEBUG_OPTIONS) return;
+
+    pos = min;
+    if (pos < nb_debug_options) memmove( &debug_options[pos + 1], &debug_options[pos],
+                                         (nb_debug_options - pos) * sizeof(debug_options[0]) );
+    strcpy( debug_options[pos].name, name );
+    debug_options[pos].flags = (default_flags & ~clear) | set;
+    nb_debug_options++;
+}
+
+/* parse a set of debugging option specifications and add them to the option list */
+static void parse_options( const char *str )
+{
+    char *opt, *next, *options;
+    unsigned int i;
+
+    if (!(options = strdup(str))) return;
+    for (opt = options; opt; opt = next)
+    {
+        const char *p;
+        unsigned char set = 0, clear = 0;
+
+        if ((next = strchr( opt, ',' ))) *next++ = 0;
+
+        p = opt + strcspn( opt, "+-" );
+        if (!p[0]) p = opt;  /* assume it's a debug channel name */
+
+        if (p > opt)
+        {
+            for (i = 0; i < sizeof(debug_classes)/sizeof(debug_classes[0]); i++)
+            {
+                int len = strlen(debug_classes[i]);
+                if (len != (p - opt)) continue;
+                if (!memcmp( opt, debug_classes[i], len ))  /* found it */
+                {
+                    if (*p == '+') set |= 1 << i;
+                    else clear |= 1 << i;
+                    break;
+                }
+            }
+            if (i == sizeof(debug_classes)/sizeof(debug_classes[0])) /* bad class name, skip it */
+                continue;
+        }
+        else
+        {
+            if (*p == '-') clear = ~0;
+            else set = ~0;
+        }
+        if (*p == '+' || *p == '-') p++;
+        if (!p[0]) continue;
+
+        if (!strcmp( p, "all" ))
+            default_flags = (default_flags & ~clear) | set;
+        else
+            add_option( p, set, clear );
+    }
+    free( options );
+}
+
+
+/* print the usage message */
+static void debug_usage(void)
+{
+    static const char usage[] =
+        "Syntax of the WINEDEBUG variable:\n"
+        "  WINEDEBUG=[class]+xxx,[class]-yyy,...\n\n"
+        "Example: WINEDEBUG=+all,warn-heap\n"
+        "    turns on all messages except warning heap messages\n"
+        "Available message classes: err, warn, fixme, trace\n";
+    write( 2, usage, sizeof(usage) - 1 );
+    exit(1);
+}
+
+#ifndef VBOX_WITH_WDDM
+static DECLCALLBACK(void) vbox_log_backdoor_rt(char* pcszStr)
+{
+    RTLogPrintf("%s", pcszStr);
+}
+#else
+static DECLCALLBACK(void) vbox_log_backdoor_dispmp(char* pcszStr)
+{
+    VBoxDispMpLoggerLog(pcszStr);
+}
+#endif
+static void vbox_log_v(const char *pszFormat, va_list args)
+{
+    if (vbox_log_backdoor)
+    {
+        static char buf[8092];
+        int offset = sprintf(buf, "[0x%lx.0x%lx] Wine Debug: ", GetCurrentProcessId(), GetCurrentThreadId());
+        vsprintf(buf + offset, pszFormat, args);
+        vbox_log_backdoor(buf);
+    }
+}
+
+/* initialize all options at startup */
+static void debug_init(void)
+{
+    char *wine_debug;
+
+    if (nb_debug_options != -1) return;  /* already initialized */
+    nb_debug_options = 0;
+    if ((wine_debug = getenv("WINEDEBUG")))
+    {
+        Assert(0);
+        if (!strcmp( wine_debug, "help" ))
+            debug_usage();
+        else if (getenv("WINEDEBUG_BACKDOOR"))
+        {
+#ifdef VBOX_WITH_WDDM
+            int rc = VBoxDispMpLoggerInit();
+            if (RT_SUCCESS(rc))
+                vbox_log_backdoor = vbox_log_backdoor_dispmp;
+//            else
+#else
+                vbox_log_backdoor = vbox_log_backdoor_rt;
+#endif
+        }
+        parse_options( wine_debug );
+    }
+}
+
+/* varargs wrapper for funcs.dbg_vprintf */
+int wine_dbg_printf( const char *format, ... )
+{
+    int ret;
+    va_list valist;
+
+    va_start(valist, format);
+    ret = funcs.dbg_vprintf( format, valist );
+    va_end(valist);
+    return ret;
+}
+
+/* printf with temp buffer allocation */
+const char *wine_dbg_sprintf( const char *format, ... )
+{
+    static const int max_size = 200;
+    char *ret;
+    int len;
+    va_list valist;
+
+    va_start(valist, format);
+    ret = funcs.get_temp_buffer( max_size );
+    len = vsnprintf( ret, max_size, format, valist );
+    if (len == -1 || len >= max_size) ret[max_size-1] = 0;
+    else funcs.release_temp_buffer( ret, len + 1 );
+    va_end(valist);
+    return ret;
+}
+
+
+/* varargs wrapper for funcs.dbg_vlog */
+int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                  const char *func, const char *format, ... )
+{
+    int ret;
+    va_list valist;
+
+    if (!(__wine_dbg_get_channel_flags( channel ) & (1 << cls))) return -1;
+
+    va_start(valist, format);
+    ret = funcs.dbg_vlog( cls, channel, func, format, valist );
+    va_end(valist);
+    return ret;
+}
+
+int interlocked_xchg_add( int *dest, int incr )
+{
+    return InterlockedExchangeAdd(dest, incr);
+}
+
+/* allocate some tmp string space */
+/* FIXME: this is not 100% thread-safe */
+static char *get_temp_buffer( size_t size )
+{
+    static char *list[32];
+    static int pos;
+    char *ret;
+    int idx;
+
+    idx = interlocked_xchg_add( &pos, 1 ) % (sizeof(list)/sizeof(list[0]));
+    if ((ret = realloc( list[idx], size ))) list[idx] = ret;
+    return ret;
+}
+
+
+/* release unused part of the buffer */
+static void release_temp_buffer( char *buffer, size_t size )
+{
+    /* don't bother doing anything */
+}
+
+
+/* default implementation of wine_dbgstr_an */
+static const char *default_dbgstr_an( const char *str, int n )
+{
+    static const char hex[16] = "0123456789abcdef";
+    char *dst, *res;
+    size_t size;
+
+    if (!((ULONG_PTR)str >> 16))
+    {
+        if (!str) return "(null)";
+        res = funcs.get_temp_buffer( 6 );
+        sprintf( res, "#%04x", LOWORD(str) );
+        return res;
+    }
+    if (n == -1) n = strlen(str);
+    if (n < 0) n = 0;
+    size = 10 + min( 300, n * 4 );
+    dst = res = funcs.get_temp_buffer( size );
+    *dst++ = '"';
+    while (n-- > 0 && dst <= res + size - 9)
+    {
+        unsigned char c = *str++;
+        switch (c)
+        {
+        case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+        case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+        case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+        case '"':  *dst++ = '\\'; *dst++ = '"'; break;
+        case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+        default:
+            if (c >= ' ' && c <= 126)
+                *dst++ = c;
+            else
+            {
+                *dst++ = '\\';
+                *dst++ = 'x';
+                *dst++ = hex[(c >> 4) & 0x0f];
+                *dst++ = hex[c & 0x0f];
+            }
+        }
+    }
+    *dst++ = '"';
+    if (n > 0)
+    {
+        *dst++ = '.';
+        *dst++ = '.';
+        *dst++ = '.';
+    }
+    *dst++ = 0;
+    funcs.release_temp_buffer( res, dst - res );
+    return res;
+}
+
+
+/* default implementation of wine_dbgstr_wn */
+static const char *default_dbgstr_wn( const WCHAR *str, int n )
+{
+    char *dst, *res;
+    size_t size;
+
+    if (!((ULONG_PTR)str >> 16))
+    {
+        if (!str) return "(null)";
+        res = funcs.get_temp_buffer( 6 );
+        sprintf( res, "#%04x", LOWORD(str) );
+        return res;
+    }
+    if (n == -1)
+    {
+        const WCHAR *end = str;
+        while (*end) end++;
+        n = end - str;
+    }
+    if (n < 0) n = 0;
+    size = 12 + min( 300, n * 5 );
+    dst = res = funcs.get_temp_buffer( size );
+    *dst++ = 'L';
+    *dst++ = '"';
+    while (n-- > 0 && dst <= res + size - 10)
+    {
+        WCHAR c = *str++;
+        switch (c)
+        {
+        case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+        case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+        case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+        case '"':  *dst++ = '\\'; *dst++ = '"'; break;
+        case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+        default:
+            if (c >= ' ' && c <= 126)
+                *dst++ = c;
+            else
+            {
+                *dst++ = '\\';
+                sprintf(dst,"%04x",c);
+                dst+=4;
+            }
+        }
+    }
+    *dst++ = '"';
+    if (n > 0)
+    {
+        *dst++ = '.';
+        *dst++ = '.';
+        *dst++ = '.';
+    }
+    *dst++ = 0;
+    funcs.release_temp_buffer( res, dst - res );
+    return res;
+}
+
+
+/* default implementation of wine_dbg_vprintf */
+static int default_dbg_vprintf( const char *format, va_list args )
+{
+    vbox_log_v(format, args);
+#ifdef DEBUG_leo
+    static FILE *output=NULL;
+    static int first_time = 1;
+
+    if (first_time)
+    {   
+        first_time = 0;
+        output = fopen( "winelog.txt", "w" );
+    }
+
+    if (output) vfprintf( output, format, args );
+#endif
+    return vfprintf( stdout, format, args );
+}
+
+
+/* default implementation of wine_dbg_vlog */
+static int default_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                             const char *func, const char *format, va_list args )
+{
+    int ret = 0;
+
+    if (cls < sizeof(debug_classes)/sizeof(debug_classes[0]))
+        ret += wine_dbg_printf( "%s:[%#x]:%s:%s ", debug_classes[cls], GetCurrentThreadId(), channel->name, func );
+    if (format)
+        ret += funcs.dbg_vprintf( format, args );
+    return ret;
+}
+
+/* wrappers to use the function pointers */
+
+const char *wine_dbgstr_an( const char * s, int n )
+{
+    return funcs.dbgstr_an(s, n);
+}
+
+const char *wine_dbgstr_wn( const WCHAR *s, int n )
+{
+    return funcs.dbgstr_wn(s, n);
+}
+
+void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+                               struct __wine_debug_functions *old_funcs, size_t size )
+{
+    if (old_funcs) memcpy( old_funcs, &funcs, min(sizeof(funcs),size) );
+    if (new_funcs) memcpy( &funcs, new_funcs, min(sizeof(funcs),size) );
+}
+
+static struct __wine_debug_functions funcs =
+{
+    get_temp_buffer,
+    release_temp_buffer,
+    default_dbgstr_an,
+    default_dbgstr_wn,
+    default_dbg_vprintf,
+    default_dbg_vlog
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/config.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/config.h
new file mode 100644
index 0000000..a639e36
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/config.h
@@ -0,0 +1,1275 @@
+/* include/config.h.  Generated from config.h.in by configure.  */
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+#include <stddef.h>
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH /* */
+
+/* Define to the file extension for executables. */
+#define EXEEXT ".exe"
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+/* #undef HAVE_ALSA_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+/* #undef HAVE_AL_AL_H */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+/* #undef HAVE_ARPA_NAMESER_H */
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+/* #undef HAVE_CAPI20_H */
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+/* #undef HAVE_CUPS_CUPS_H */
+
+/* Define to 1 if you have the <curses.h> header file. */
+/* #undef HAVE_CURSES_H */
+
+/* Define if you have the daylight variable */
+/* #undef HAVE_DAYLIGHT*/
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+/* #undef HAVE_DBUS_DBUS_H */
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+   file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+/* #undef HAVE_DLADDR */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H*/
+
+/* Define to 1 if you have the `dlopen' function. */
+/* #undef HAVE_DLOPEN*/
+
+/* Define to 1 if you have the <elf.h> header file. */
+/* #undef HAVE_ELF_H*/
+
+/* Define to 1 if you have the `epoll_create' function. */
+/* #undef HAVE_EPOLL_CREATE */
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+/* #undef HAVE_FONTCONFIG_FONTCONFIG_H */
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+/* #undef HAVE_FUTIMESAT */
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `getdirentries' function. */
+/* #undef HAVE_GETDIRENTRIES */
+
+/* Define to 1 if you have the `getnameinfo' function. */
+/* #undef HAVE_GETNAMEINFO */
+
+/* Define to 1 if you have the `getnetbyname' function. */
+/* #undef HAVE_GETNETBYNAME */
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+/* #undef HAVE_GETPAGESIZE */
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef HAVE_GETPWUID */
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+/* #undef HAVE_GETUID */
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+/* #undef HAVE_GRP_H */
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+/* #undef HAVE_GSM_GSM_H */
+
+/* Define to 1 if you have the <gsm.h> header file. */
+/* #undef HAVE_GSM_H */
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+/* #undef HAVE_HAL_LIBHAL_H */
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#define HAVE_IEEEFP_H 1
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define to 1 if you have the `isinf' function. */
+/* #undef HAVE_ISINF */
+
+/* Define to 1 if you have the `isnan' function. */
+/* #undef HAVE_ISNAN */
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+/* #undef HAVE_LBER_H */
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+/* #undef HAVE_LCMS_H */
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+/* #undef HAVE_LDAP_H */
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+/* #undef HAVE_LIBXML_PARSER_H */
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+/* #undef HAVE_LIBXSLT_PATTERN_H */
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+/* #undef HAVE_LIBXSLT_TRANSFORM_H */
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+/* #undef HAVE_LINK_H */
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+/* #undef HAVE_LINUX_22_JOYSTICK_API */
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+/* #undef HAVE_LINUX_CAPI_H */
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+/* #undef HAVE_LINUX_CDROM_H */
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+/* #undef HAVE_LINUX_HDREG_H */
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+/* #undef HAVE_LINUX_INPUT_H */
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+/* #undef HAVE_LINUX_IOCTL_H */
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+/* #undef HAVE_LINUX_IPX_H */
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+/* #undef HAVE_LINUX_IRDA_H */
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+/* #undef HAVE_LINUX_JOYSTICK_H */
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+/* #undef HAVE_LINUX_MAJOR_H */
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+/* #undef HAVE_LINUX_PARAM_H */
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+/* #undef HAVE_LINUX_SERIAL_H */
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+/* #undef HAVE_LINUX_TYPES_H */
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+/* #undef HAVE_MPG123_H */
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+/* #undef HAVE_NCURSES_H */
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+/* #undef HAVE_NETINET_IF_ETHER_H */
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+/* #undef HAVE_NETINET_IN_H */
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+/* #undef HAVE_NETINET_IN_SYSTM_H */
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+/* #undef HAVE_NETINET_IP_H */
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+/* #undef HAVE_NETINET_IP_ICMP_H */
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* #undef HAVE_NETINET_TCP_H */
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+/* #undef HAVE_NETINET_UDP_H */
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+/* #undef HAVE_NETIPX_IPX_H */
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+/* #undef HAVE_NET_IF_ARP_H */
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+/* #undef HAVE_NET_IF_H */
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+/* #undef HAVE_NET_ROUTE_H */
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+/* #undef HAVE_NS_MSG__MSG_PTR */
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+/* #undef HAVE_OPENSSL_ERR_H */
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+/* #undef HAVE_OPENSSL_SSL_H */
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+/* #undef HAVE_PID_T */
+
+/* Define to 1 if you have the `pipe2' function. */
+/* #undef HAVE_PIPE2 */
+
+/* Define to 1 if you have the <png.h> header file. */
+/* #undef HAVE_PNG_H */
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+/* #undef HAVE_PPDEV */
+
+/* Define to 1 if you have the `prctl' function. */
+/* #undef HAVE_PRCTL */
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+/* #undef HAVE_PTHREAD_GETATTR_NP */
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+/* #undef HAVE_PWD_H */
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+/* #undef HAVE_RESOLV */
+
+/* Define to 1 if you have the <resolv.h> header file. */
+/* #undef HAVE_RESOLV_H */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+/* #undef HAVE_SCHED_SETAFFINITY */
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+/* #undef HAVE_SCSI_SCSI_H */
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+/* #undef HAVE_SCSI_SCSI_IOCTL_H */
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+/* #undef HAVE_SCSI_SG_H */
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+/* #undef HAVE_SETRLIMIT */
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+/* #undef HAVE_SIGALTSTACK */
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T_SI_FD */
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+/* #undef HAVE_SNPRINTF */
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+#define HAVE_SPAWNVP 1
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+/* #undef HAVE_STDINT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+/* #undef HAVE_STROPTS_H */
+
+/* Define to 1 if you have the `strtold' function. */
+/* #undef HAVE_STRTOLD */
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+/* #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID */
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef HAVE_SYMLINK */
+
+/* Define to 1 if you have the <syscall.h> header file. */
+/* #undef HAVE_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+/* #undef HAVE_SYS_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#define HAVE_SYS_ELF32_H 1
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+/* #undef HAVE_SYS_EPOLL_H */
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+/* #undef HAVE_SYS_INOTIFY_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+/* #undef HAVE_SYS_MMAN_H */
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+/* #undef HAVE_SYS_PRCTL_H */
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+/* #undef HAVE_SYS_PTRACE_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef HAVE_SYS_RESOURCE_H */
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+/* #undef HAVE_SYS_SHM_H */
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+/* #undef HAVE_SYS_SIGNAL_H */
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+/* #undef HAVE_SYS_SOCKETVAR_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+/* #undef HAVE_SYS_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+/* #undef HAVE_SYS_USER_H */
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+/* #undef HAVE_SYS_UTSNAME_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+/* #undef HAVE_SYS_VM86_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+/* #undef HAVE_UCONTEXT_H */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+/* #undef HAVE_VSNPRINTF */
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_ZLIB 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+#define HAVE__PCLOSE 1
+
+/* Define to 1 if you have the `_popen' function. */
+#define HAVE__POPEN 1
+
+/* Define to 1 if you have the `_snprintf' function. */
+#define HAVE__SNPRINTF 1
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#define HAVE__SPAWNVP 1
+
+/* Define to 1 if you have the `_strdup' function. */
+#define HAVE__STRDUP 1
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#define HAVE__VSNPRINTF 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel at winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.dll"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl _" #name suffix "\n\t.def _" #name suffix "; .scl 2; .type 32; .endef\n_" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"
+
+/* Define to a macro to generate an assembly function with C calling
+   convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) "_" name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) "@" #args
+
+/* Define to a macro to generate an assembly function with stdcall calling
+   convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/d3d8.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/d3d8.h
new file mode 100644
index 0000000..cf1eff3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/d3d8.h
@@ -0,0 +1,1154 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8_H
+#define __WINE_D3D8_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION  0x0800
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef __WINESRC__
+# include <windows.h>
+#endif
+
+#include <d3d8types.h>
+#include <d3d8caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE                  0x00000002L
+#define D3DCREATE_MULTITHREADED                 0x00000004L
+#define D3DCREATE_PUREDEVICE                    0x00000010L
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L
+#define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN                         0x00000001L
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION              220
+#define D3DADAPTER_DEFAULT           0
+#define D3DENUM_NO_WHQL_LEVEL        2
+
+#define _FACD3D  0x876
+#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
+
+/*
+ * Direct3D Errors
+ */
+#define D3D_OK                                  S_OK
+#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
+
+#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D8,              0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);
+typedef struct IDirect3D8 *LPDIRECT3D8;
+
+DEFINE_GUID(IID_IDirect3DDevice8,        0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF);
+typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8;
+
+DEFINE_GUID(IID_IDirect3DResource8,      0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F);
+typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer8,  0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95);
+typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DVolume8,        0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0);
+typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;
+
+DEFINE_GUID(IID_IDirect3DSwapChain8,     0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD);
+typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;
+
+DEFINE_GUID(IID_IDirect3DSurface8,       0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD);
+typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer8,   0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86);
+typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture8,   0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E);
+typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DTexture8,       0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58);
+typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture8,   0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50);
+typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD);
+typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;
+
+/*****************************************************************************
+ * IDirect3D8 interface
+ */
+#define INTERFACE IDirect3D8
+DECLARE_INTERFACE_(IDirect3D8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D8 methods ***/
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;
+    STDMETHOD_(UINT,GetAdapterCount             )(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT  Adapter, DWORD  Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE;
+    STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT  Adapter) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT  Adapter, UINT  Mode, D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT  Adapter, D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT  Adapter, D3DDEVTYPE  CheckType, D3DFORMAT  DisplayFormat, D3DFORMAT  BackBufferFormat, BOOL  Windowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, DWORD  Usage, D3DRESOURCETYPE  RType, D3DFORMAT  CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  SurfaceFormat, BOOL  Windowed, D3DMULTISAMPLE_TYPE  MultiSampleType) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, D3DFORMAT  RenderTargetFormat, D3DFORMAT  DepthStencilFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DCAPS8 * pCaps) PURE;
+    STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT  Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType,HWND  hFocusWindow, DWORD  BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b)                    (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D8_AddRef(p)                                (p)->lpVtbl->AddRef(p)
+#define IDirect3D8_Release(p)                               (p)->lpVtbl->Release(p)
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D8_GetAdapterCount(p)                       (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->lpVtbl->GetAdapterModeCount(p,a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b)                    (p)->QueryInterface(a,b)
+#define IDirect3D8_AddRef(p)                                (p)->AddRef()
+#define IDirect3D8_Release(p)                               (p)->Release()
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->RegisterSoftwareDevice(a)
+#define IDirect3D8_GetAdapterCount(p)                       (p)->GetAdapterCount()
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->GetAdapterModeCount(a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->EnumAdapterModes(a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->GetAdapterMonitor(a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume8 interface
+ */
+#define INTERFACE IDirect3DVolume8
+DECLARE_INTERFACE_(IDirect3DVolume8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVolume8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid,CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID   refguid,void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE;
+    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox, DWORD  Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume8_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolume8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolume8_Release(p)                   (p)->Release()
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DVolume8_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)
+#define IDirect3DVolume8_UnlockBox(p)                 (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain8 interface
+ */
+#define INTERFACE IDirect3DSwapChain8
+DECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain8 methods ***/
+    STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect, CONST RECT * pDestRect, HWND  hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer, D3DBACKBUFFER_TYPE  Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c)             (p)->lpVtbl->Present(p,a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSwapChain8_Release(p)                   (p)->Release()
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c)             (p)->Present(a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface8 interface
+ */
+#define INTERFACE IDirect3DSurface8
+DECLARE_INTERFACE_(IDirect3DSurface8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSurface8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid,CONST void * pData,DWORD  SizeOfData,DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT * pLockedRect, CONST RECT * pRect,DWORD  Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface8_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSurface8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSurface8_Release(p)                   (p)->Release()
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DSurface8_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)
+#define IDirect3DSurface8_UnlockRect(p)                (p)->UnlockRect()
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource8 interface
+ */
+#define INTERFACE IDirect3DResource8
+DECLARE_INTERFACE_(IDirect3DResource8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource8_GetType(p)                   (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DResource8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DResource8_Release(p)                   (p)->Release()
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DResource8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DResource8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DResource8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DResource8_GetType(p)                   (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer8 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer8
+DECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DVertexBuffer8 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC  * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVertexBuffer8_Release(p)                   (p)->Release()
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVertexBuffer8_GetType(p)                   (p)->GetType()
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->Unlock()
+#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer8 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer8
+DECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DIndexBuffer8 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DIndexBuffer8_Release(p)                   (p)->Release()
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DIndexBuffer8_GetType(p)                   (p)->GetType()
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->Unlock()
+#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture8 interface
+ */
+#define INTERFACE IDirect3DBaseTexture8
+DECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DBaseTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DBaseTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DBaseTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture8 interface
+ */
+#define INTERFACE IDirect3DCubeTexture8
+DECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DCubeTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD  Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES  FaceType,CONST RECT * pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DCubeTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DCubeTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DCubeTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture8 interface
+ */
+#define INTERFACE IDirect3DTexture8
+DECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;
+    STDMETHOD(GetSurfaceLevel)(THIS_ UINT  Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE;
+    STDMETHOD(LockRect)(THIS_ UINT  Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD  Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ UINT  Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT * pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a)              (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a)              (p)->UnlockRect(a)
+#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture8 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture8
+DECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource8 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;
+    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;
+    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+    STDMETHOD_(void,PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture8 methods ***/
+    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;
+    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+    /*** IDirect3DVolumeTexture8 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DVOLUME_DESC * pDesc) PURE;
+    STDMETHOD(GetVolumeLevel)(THIS_ UINT  Level,IDirect3DVolume8 ** ppVolumeLevel) PURE;
+    STDMETHOD(LockBox)(THIS_ UINT  Level,D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox,DWORD  Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS_ UINT  Level) PURE;
+    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX * pDirtyBox) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture8_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolumeTexture8_Release(p)                   (p)->Release()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVolumeTexture8_GetType(p)                   (p)->GetType()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)
+#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->GetLOD()
+#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->GetLevelCount()
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice8 interface
+ */
+#define INTERFACE IDirect3DDevice8
+DECLARE_INTERFACE_(IDirect3DDevice8,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice8 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD  Bytes) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS  * pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT  XHotSpot, UINT  YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE;
+    STDMETHOD_(void,SetCursorPosition)(THIS_ UINT  XScreenSpace, UINT  YScreenSpace,DWORD  Flags) PURE;
+    STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL  bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect,CONST RECT * pDestRect,HWND  hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer,D3DBACKBUFFER_TYPE  Type,IDirect3DSurface8 ** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE;
+    STDMETHOD_(void,SetGammaRamp)(THIS_ DWORD  Flags,CONST D3DGAMMARAMP * pRamp) PURE;
+    STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT  Width,UINT  Height,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DTexture8 ** ppTexture) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT  Width,UINT  Height,UINT  Depth,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT  EdgeLength,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT  Length,DWORD  Usage,DWORD  FVF,D3DPOOL  Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT  Length,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,BOOL  Lockable,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CreateImageSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,IDirect3DSurface8 ** ppSurface) PURE;
+    STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 * pSourceSurface,CONST RECT * pSourceRectsArray,UINT  cRects,IDirect3DSurface8 * pDestinationSurface,CONST POINT * pDestPointsArray) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE;
+    STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD  Count,CONST D3DRECT * pRects,DWORD  Flags,D3DCOLOR  Color,float  Z,DWORD  Stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE  State,CONST D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE  State,D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE  State, CONST D3DMATRIX * pMatrix) PURE;
+    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT8 * pViewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL8 * pMaterial) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD  Index,CONST D3DLIGHT8 * pLight) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD  Index,D3DLIGHT8 * pLight) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD  Index,BOOL  Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD  Index,BOOL * pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD  Index,CONST float * pPlane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD  Index,float * pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD  Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD * pValue) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE;
+    STDMETHOD(ApplyStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(CaptureStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(DeleteStateBlock)(THIS_ DWORD  Token) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE  Type,DWORD * pToken) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS8 * pClipStatus) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 ** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 * pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD * pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD  Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE;
+    STDMETHOD(GetInfo)(THIS_ DWORD  DevInfoID,void * pDevInfoStruct,DWORD  DevInfoStructSize) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT  PaletteNumber,CONST PALETTEENTRY * pEntries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT  PaletteNumber,PALETTEENTRY * pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT  PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT  * PaletteNumber) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  StartVertex,UINT  PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  minIndex,UINT  NumVertices,UINT  startIndex,UINT  primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  PrimitiveCount,CONST void * pVertexStreamZeroData,UINT  VertexStreamZeroStride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  MinVertexIndex,UINT  NumVertexIndices,UINT  PrimitiveCount,CONST void * pIndexData,D3DFORMAT  IndexDataFormat,CONST void * pVertexStreamZeroData,UINT  VertexStreamZeroStride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT  SrcStartIndex,UINT  DestIndex,UINT  VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD  Flags) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD * pDeclaration,CONST DWORD * pFunction,DWORD * pHandle,DWORD  Usage) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE;
+    STDMETHOD(DeleteVertexShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD  Register,CONST void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT  Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT  BaseVertexIndex) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD * pFunction,DWORD * pHandle) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE;
+    STDMETHOD(DeletePixelShader)(THIS_ DWORD  Handle) PURE;
+    STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD  Register,CONST void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;
+    STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT  Handle,CONST float * pNumSegs,CONST D3DRECTPATCH_INFO * pRectPatchInfo) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT  Handle,CONST float * pNumSegs,CONST D3DTRIPATCH_INFO * pTriPatchInfo) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT  Handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice8_AddRef(p)                                 (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice8_Release(p)                                (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)
+#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice8_Reset(p,a)                                (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->lpVtbl->SetGammaRamp(p,a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->lpVtbl->GetGammaRamp(p,a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->lpVtbl->CopyRects(p,a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->lpVtbl->GetFrontBuffer(p,a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice8_BeginScene(p)                             (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice8_EndScene(p)                               (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice8_SetViewport(p,a)                          (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice8_GetViewport(p,a)                          (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->lpVtbl->GetInfo(p,a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->lpVtbl->processVertices(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->lpVtbl->DeleteVertexShader(p,a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->lpVtbl->SetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->lpVtbl->GetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->lpVtbl->SetIndices(p,a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->lpVtbl->GetIndices(p,a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->lpVtbl->DeletePixelShader(p,a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->lpVtbl->DeletePatch(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->QueryInterface(a,b)
+#define IDirect3DDevice8_AddRef(p)                                 (p)->AddRef()
+#define IDirect3DDevice8_Release(p)                                (p)->Release()
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->TestCooperativeLevel()
+#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->GetAvailableTextureMem()
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->ResourceManagerDiscardBytes(a)
+#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->GetDirect3D(a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->GetDeviceCaps(a)
+#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->GetDisplayMode(a)
+#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->GetCreationParameters(a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->ShowCursor(a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice8_Reset(p,a)                                (p)->Reset(a)
+#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->Present(a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->GetBackBuffer(a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->GetRasterStatus(a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->SetGammaRamp(a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->GetGammaRamp(a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->CreateTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->CreateCubeTexture(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->CreateVertexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->CreateIndexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->CreateRenderTarget(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->CreateDepthStencilSurface(a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->CreateImageSurface(a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->CopyRects(a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->UpdateTexture(a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->GetFrontBuffer(a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->GetRenderTarget(a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice8_BeginScene(p)                             (p)->BeginScene()
+#define IDirect3DDevice8_EndScene(p)                               (p)->EndScene()
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->SetTransform(a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->GetTransform(a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice8_SetViewport(p,a)                          (p)->SetViewport(a)
+#define IDirect3DDevice8_GetViewport(p,a)                          (p)->GetViewport(a)
+#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->SetMaterial(a)
+#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->GetMaterial(a)
+#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->SetLight(a,b)
+#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->GetLight(a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->LightEnable(a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->GetLightEnable(a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->SetClipPlane(a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->GetClipPlane(a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->SetRenderState(a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->GetRenderState(a,b)
+#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->BeginStateBlock()
+#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->EndStateBlock(a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->ApplyStateBlock(a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->CaptureStateBlock(a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->DeleteStateBlock(a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->SetClipStatus(a)
+#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->GetClipStatus(a)
+#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->GetTexture(a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->SetTexture(a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->ValidateDevice(a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->GetInfo(a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->DrawIndexedPrimitive(a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->processVertices(a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->CreateVertexShader(a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->SetVertexShader(a)
+#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->GetVertexShader(a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->DeleteVertexShader(a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->SetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->GetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->GetVertexShaderDeclaration(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->GetVertexShaderFunction(a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->SetStreamSource(a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->GetStreamSource(a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->SetIndices(a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->GetIndices(a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->SetPixelShader(a)
+#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->GetPixelShader(a)
+#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->DeletePixelShader(a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->SetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->GetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->GetPixelShaderFunction(a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->DeletePatch(a)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* defined(__cplusplus) */
+
+/* Define the main entrypoint as well */
+IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_D3D8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/d3d9.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/d3d9.h
new file mode 100644
index 0000000..0e13947
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/d3d9.h
@@ -0,0 +1,2047 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ *                         Raphael Junqueira
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9_H
+#define __WINE_D3D9_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION  0x0900
+#endif
+
+
+
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+# ifndef __WINESRC__
+# include <windows.h>
+# endif
+#endif
+#include <d3d9types.h>
+#include <d3d9caps.h>
+#ifdef VBOX_WINE_WITHOUT_LIBWINE
+# include <d3dhal.h>
+# include <d3dtypes.h>
+# include <d3dcaps.h>
+#endif
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE                  0x00000002L
+#define D3DCREATE_MULTITHREADED                 0x00000004L
+#define D3DCREATE_PUREDEVICE                    0x00000010L
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L
+#define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     0x00000100L
+#define D3DCREATE_ADAPTERGROUP_DEVICE           0x00000200L
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN                         0x00000001L
+
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION                         32
+#define D3DADAPTER_DEFAULT                      0
+#define D3DENUM_NO_WHQL_LEVEL                   0x00000002L
+#define D3DPRESENT_BACK_BUFFERS_MAX             3L
+#define D3DSGR_NO_CALIBRATION                   0x00000000L
+#define D3DSGR_CALIBRATE                        0x00000001L
+
+#define _FACD3D  0x876
+#define MAKE_D3DHRESULT( code )                 MAKE_HRESULT( 1, _FACD3D, code )
+#define MAKE_D3DSTATUS( code )                  MAKE_HRESULT( 0, _FACD3D, code )
+
+/*****************************************************************************
+ * Direct3D Errors
+ */
+#define D3D_OK                                  S_OK
+#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
+#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
+#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)
+#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D9,                   0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);
+typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;
+
+DEFINE_GUID(IID_IDirect3D9Ex,                 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);
+typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;
+
+DEFINE_GUID(IID_IDirect3DDevice9,             0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);
+typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;
+
+DEFINE_GUID(IID_IDirect3DDevice9Ex,           0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);
+typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;
+
+DEFINE_GUID(IID_IDirect3DResource9,           0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);
+typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer9,       0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);
+typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DVolume9,             0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);
+typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9,          0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);
+typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9Ex,        0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);
+typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;
+
+DEFINE_GUID(IID_IDirect3DSurface9,            0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);
+typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer9,        0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);
+typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture9,        0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);
+typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DTexture9,            0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);
+typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture9,        0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);
+typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture9,      0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);
+typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVertexDeclaration9,  0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);
+typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;
+
+DEFINE_GUID(IID_IDirect3DVertexShader9,       0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);
+typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;
+
+DEFINE_GUID(IID_IDirect3DPixelShader9,        0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);
+typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;
+
+DEFINE_GUID(IID_IDirect3DStateBlock9,         0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);
+typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;
+
+DEFINE_GUID(IID_IDirect3DQuery9,              0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);
+typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
+
+/*****************************************************************************
+ * IDirect3D9 interface
+ */
+#define INTERFACE IDirect3D9
+DECLARE_INTERFACE_(IDirect3D9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D9 methods ***/
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D9_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9_AddRef(p)             (p)->AddRef()
+#define IDirect3D9_Release(p)            (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9_GetAdapterCount(p)                         (p)->GetAdapterCount()
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3D9Ex interface
+ */
+#define INTERFACE IDirect3D9Ex
+DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3D9 methods ***/
+
+    /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that
+     * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's
+     * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9.
+     * This is probably because even in MS's header IDirect3D9Ex inherits from IDirect3D9, which makes the
+     * C++ inferface compatible, and nobody uses the C interface in Windows world.
+     */
+    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+
+    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+    /*** IDirect3D9Ex methods ***/
+    STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter) PURE;
+    STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter, UINT Mode, D3DDISPLAYMODEEX* pMode) PURE;
+    STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
+    STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;
+    STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3D9Ex_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+/*** IDirect3D9Ex methods ***/
+#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b)               (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d)              (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c)           (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)
+#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)
+#define IDirect3D9Ex_GetAdapterLUID(p,a,b)                      (p)->lpVtbl->GetAdapterLUID(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9Ex_AddRef(p)             (p)->AddRef()
+#define IDirect3D9Ex_Release(p)            (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->GetAdapterCount()
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume9 interface
+ */
+#define INTERFACE IDirect3DVolume9
+DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVolume9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;
+    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume9_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVolume9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVolume9_Release(p)                   (p)->Release()
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DVolume9_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)
+#define IDirect3DVolume9_UnlockBox(p)                 (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9 interface
+ */
+#define INTERFACE IDirect3DSwapChain9
+DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DSwapChain9 methods ***/
+    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->lpVtbl->GetPresentParameters(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSwapChain9_Release(p)                   (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->GetPresentParameters(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource9 interface
+ */
+#define INTERFACE IDirect3DResource9
+DECLARE_INTERFACE_(IDirect3DResource9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource9_GetType(p)                   (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DResource9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DResource9_Release(p)                   (p)->Release()
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DResource9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DResource9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DResource9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DResource9_GetType(p)                   (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface9 interface
+ */
+#define INTERFACE IDirect3DSurface9
+DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DSurface9 methods ***/
+    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS) PURE;
+    STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;
+    STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DSurface9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DSurface9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DSurface9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface9_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)
+#define IDirect3DSurface9_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
+#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DSurface9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DSurface9_Release(p)                   (p)->Release()
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DSurface9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DSurface9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DSurface9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DSurface9_GetType(p)                   (p)->GetType()
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->GetContainer(a,b)
+#define IDirect3DSurface9_GetDesc(p,a)                 (p)->GetDesc(a)
+#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)
+#define IDirect3DSurface9_UnlockRect(p)                (p)->UnlockRect()
+#define IDirect3DSurface9_GetDC(p,a)                   (p)->GetDC(a)
+#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->ReleaseDC(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer9 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer9
+DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DVertexBuffer9 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DVertexBuffer9_Release(p)                   (p)->Release()
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DVertexBuffer9_GetType(p)                   (p)->GetType()
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->Unlock()
+#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer9 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer9
+DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DIndexBuffer9 methods ***/
+    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+    STDMETHOD(Unlock)(THIS) PURE;
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->AddRef()
+#define IDirect3DIndexBuffer9_Release(p)                   (p)->Release()
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)
+#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->GetPriority()
+#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->PreLoad()
+#define IDirect3DIndexBuffer9_GetType(p)                   (p)->GetType()
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->Unlock()
+#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture9 interface
+ */
+#define INTERFACE IDirect3DBaseTexture9
+DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture9_AddRef(p)              (p)->AddRef()
+#define IDirect3DBaseTexture9_Release(p)             (p)->Release()
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->SetPriority(a)
+#define IDirect3DBaseTexture9_GetPriority(p)             (p)->GetPriority()
+#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->PreLoad()
+#define IDirect3DBaseTexture9_GetType(p)                 (p)->GetType()
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->SetLOD(a)
+#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->GetLOD()
+#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->GetLevelCount()
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture9 interface
+ */
+#define INTERFACE IDirect3DCubeTexture9
+DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DCubeTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;
+    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture9_AddRef(p)                   (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture9_Release(p)                  (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture9_GetPriority(p)              (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture9_GetType(p)                  (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture9_AddRef(p)                   (p)->AddRef()
+#define IDirect3DCubeTexture9_Release(p)                  (p)->Release()
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->GetDevice(a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->SetPriority(a)
+#define IDirect3DCubeTexture9_GetPriority(p)              (p)->GetPriority()
+#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->PreLoad()
+#define IDirect3DCubeTexture9_GetType(p)                  (p)->GetType()
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->SetLOD(a)
+#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->GetLOD()
+#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->GetLevelCount()
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->SetAutoGenFilterType(a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->GetAutoGenFilterType()
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->GenerateMipSubLevels()
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture9 interface
+ */
+#define INTERFACE IDirect3DTexture9
+DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;
+    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;
+    STDMETHOD(LockRect)(THIS_ UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture9_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture9_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a)            (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)
+#define IDirect3DTexture9_AddRef(p)                  (p)->AddRef()
+#define IDirect3DTexture9_Release(p)                 (p)->Release()
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a)             (p)->GetDevice(a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)
+#define IDirect3DTexture9_SetPriority(p,a)           (p)->SetPriority(a)
+#define IDirect3DTexture9_GetPriority(p)             (p)->GetPriority()
+#define IDirect3DTexture9_PreLoad(p)                 (p)->PreLoad()
+#define IDirect3DTexture9_GetType(p)                 (p)->GetType()
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a)                (p)->SetLOD(a)
+#define IDirect3DTexture9_GetLOD(p)                  (p)->GetLOD()
+#define IDirect3DTexture9_GetLevelCount(p)           (p)->GetLevelCount()
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()
+#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a)            (p)->UnlockRect(a)
+#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture9 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture9
+DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DResource9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+    STDMETHOD_(void, PreLoad)(THIS) PURE;
+    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+    /*** IDirect3DBaseTexture9 methods ***/
+    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+    /*** IDirect3DVolumeTexture9 methods ***/
+    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;
+    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;
+    STDMETHOD(LockBox)(THIS_ UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;
+    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture9_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexDeclaration9 interface
+ */
+#define INTERFACE IDirect3DVertexDeclaration9
+DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexDeclaration9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexDeclaration9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->lpVtbl->GetDeclaration(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->AddRef()
+#define IDirect3DVertexDeclaration9_Release(p)             (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->GetDeclaration(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexShader9 interface
+ */
+#define INTERFACE IDirect3DVertexShader9
+DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DVertexShader9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexShader9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DVertexShader9_AddRef(p)              (p)->AddRef()
+#define IDirect3DVertexShader9_Release(p)             (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DPixelShader9 interface
+ */
+#define INTERFACE IDirect3DPixelShader9
+DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DPixelShader9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DPixelShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DPixelShader9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DPixelShader9_AddRef(p)              (p)->AddRef()
+#define IDirect3DPixelShader9_Release(p)             (p)->Release()
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DStateBlock9 interface
+ */
+#define INTERFACE IDirect3DStateBlock9
+DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DStateBlock9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD(Capture)(THIS) PURE;
+    STDMETHOD(Apply)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DStateBlock9_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IDirect3DStateBlock9_Release(p)             (p)->lpVtbl->Release(p)
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DStateBlock9_Capture(p)             (p)->lpVtbl->Capture(p)
+#define IDirect3DStateBlock9_Apply(p)               (p)->lpVtbl->Apply(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)
+#define IDirect3DStateBlock9_AddRef(p)              (p)->AddRef()
+#define IDirect3DStateBlock9_Release(p)             (p)->Release()
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->GetDevice(a)
+#define IDirect3DStateBlock9_Capture(p)             (p)->Capture()
+#define IDirect3DStateBlock9_Apply(p)               (p)->Apply()
+#endif
+
+/*****************************************************************************
+ * IDirect3DQuery9 interface
+ */
+#define INTERFACE IDirect3DQuery9
+DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DQuery9 methods ***/
+    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+    STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;
+    STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;
+    STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;
+    STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)
+#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->AddRef()
+#define IDirect3DQuery9_Release(p) (p)->Release()
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DQuery9_GetType(p) (p)->GetType()
+#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()
+#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice9 interface
+ */
+#define INTERFACE IDirect3DDevice9
+DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice9 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(EvictManagedResources)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
+    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
+    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
+    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+    STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
+    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+    STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9_EndScene(p)                                   (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice9_Release(p)            (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()
+#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->EvictManagedResources()
+#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->GetDirect3D(a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->ShowCursor(a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9_Reset(p,a)                                    (p)->Reset(a)
+#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9_BeginScene(p)                                 (p)->BeginScene()
+#define IDirect3DDevice9_EndScene(p)                                   (p)->EndScene()
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->SetTransform(a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->GetTransform(a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9_SetViewport(p,a)                              (p)->SetViewport(a)
+#define IDirect3DDevice9_GetViewport(p,a)                              (p)->GetViewport(a)
+#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->SetMaterial(a)
+#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->GetMaterial(a)
+#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->SetLight(a,b)
+#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->GetLight(a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->LightEnable(a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->BeginStateBlock()
+#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->EndStateBlock(a)
+#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->SetClipStatus(a)
+#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->GetClipStatus(a)
+#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->GetTexture(a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->SetTexture(a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->ValidateDevice(a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->SetScissorRect(a)
+#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->GetScissorRect(a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)
+#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->GetNPatchMode()
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->SetFVF(a)
+#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->GetFVF(a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->SetVertexShader(a)
+#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->GetVertexShader(a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_SetIndices(p,a)                               (p)->SetIndices(a)
+#define IDirect3DDevice9_GetIndices(p,a)                               (p)->GetIndices(a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->SetPixelShader(a)
+#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->GetPixelShader(a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->DeletePatch(a)
+#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice9Ex interface
+ */
+#define INTERFACE IDirect3DDevice9Ex
+DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirect3DDevice9 methods ***/
+    STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+    STDMETHOD(EvictManagedResources)(THIS) PURE;
+    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
+    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
+    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
+    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
+    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+    STDMETHOD(BeginScene)(THIS) PURE;
+    STDMETHOD(EndScene)(THIS) PURE;
+    STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
+    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
+    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+    STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
+    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+    STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
+    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(BeginStateBlock)(THIS) PURE;
+    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+    STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
+    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+    STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;
+    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
+    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
+    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+    /* IDirect3DDevice9Ex methods */
+    STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;
+    STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,
+            IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,
+            D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;
+    STDMETHOD(PresentEx)(THIS_ CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags) PURE;
+    STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE;
+    STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;
+    STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;
+    STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;
+    STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;
+    STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE;
+    STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;
+    STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+    STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+    STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,
+            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,
+            IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;
+    STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;
+    STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9Ex_Release(p)            (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9Ex_EndScene(p)                                   (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->lpVtbl->PresentEx(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->lpVtbl->GetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->lpVtbl->SetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->lpVtbl->WaitForVBlank(p,a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->lpVtbl->CheckResourceResidency(p,a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->lpVtbl->SetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->lpVtbl->GetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->lpVtbl->CheckDeviceState(p,a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                 (p)->lpVtbl->ResetEx(p,a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9Ex_AddRef(p)             (p)->AddRef()
+#define IDirect3DDevice9Ex_Release(p)            (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->EvictManagedResources()
+#define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->GetDirect3D(a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->ShowCursor(a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->Reset(a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->BeginScene()
+#define IDirect3DDevice9Ex_EndScene(p)                                   (p)->EndScene()
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->SetTransform(a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->GetTransform(a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->SetViewport(a)
+#define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->GetViewport(a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->SetMaterial(a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->GetMaterial(a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->SetLight(a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->GetLight(a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->LightEnable(a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->BeginStateBlock()
+#define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->EndStateBlock(a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->SetClipStatus(a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->GetClipStatus(a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->GetTexture(a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->SetTexture(a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->ValidateDevice(a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->SetScissorRect(a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->GetScissorRect(a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->GetNPatchMode()
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->SetFVF(a)
+#define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->GetFVF(a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->SetVertexShader(a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->GetVertexShader(a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->SetIndices(a)
+#define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->GetIndices(a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->SetPixelShader(a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->GetPixelShader(a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->DeletePatch(a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->SetConvolutionMonoKernel(a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->ComposeRects(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->PresentEx(a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->GetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->SetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->WaitForVBlank(a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->CheckResourceResidency(a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->SetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->GetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->CheckDeviceState(a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                (p)->ResetEx(a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->GetDisplayModeEx(a,b,c)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* defined(__cplusplus) */
+
+int         WINAPI D3DPERF_BeginEvent(D3DCOLOR,LPCWSTR);
+int         WINAPI D3DPERF_EndEvent(void);
+DWORD       WINAPI D3DPERF_GetStatus(void);
+BOOL        WINAPI D3DPERF_QueryRepeatFrame(void);
+void        WINAPI D3DPERF_SetMarker(D3DCOLOR,LPCWSTR);
+void        WINAPI D3DPERF_SetOptions(DWORD);
+void        WINAPI D3DPERF_SetRegion(D3DCOLOR,LPCWSTR);
+
+/* Define the main entrypoint as well */
+IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+
+#endif /* __WINE_D3D9_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/debug.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/debug.h
new file mode 100644
index 0000000..e9d7c7b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/debug.h
@@ -0,0 +1,381 @@
+/*
+ * Wine debugging interface
+ *
+ * Copyright 1999 Patrik Stridvall
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_DEBUG_H
+#define __WINE_WINE_DEBUG_H
+
+#include <windows.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef VBOX_WINE_WITH_IPRT
+# include <iprt/assert.h>
+#else
+# define AssertBreakpoint() do { } while (0)
+# define Assert(_expr) do { } while (0)
+# ifdef DEBUG_misha
+#  include <iprt/cdefs.h>
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _GUID;
+
+#ifdef DEBUG
+# define VBOX_WINE_DEBUG
+#endif
+
+#ifdef VBOX_WINE_DEBUG
+# ifndef VBOX_WINE_DEBUG_DEFINES
+extern DWORD g_VBoxVDbgBreakOnD3DErr;
+# else
+#  ifdef DEBUG_misha
+#   define _ERR_BREAK_DEFAULT 1
+#  else
+#   define _ERR_BREAK_DEFAULT 0
+#  endif
+DWORD g_VBoxVDbgBreakOnD3DErr = _ERR_BREAK_DEFAULT;
+# endif
+
+# define _ERR_BREAK() Assert(0)
+# define _ERR_ASSERT(_e) Assert((_e))
+# define _ERR_CHECK_BREAK(_t) do { \
+        if (g_VBoxVDbgBreakOn##_t) { _ERR_BREAK(); } \
+    } while (0)
+# define _ERR_CHECK_ASSERT(_t, _e) do { \
+        if (g_VBoxVDbgBreakOn##_t) { _ERR_ASSERT(_e); } \
+    } while (0)
+
+# define ERR_D3D() _ERR_CHECK_BREAK(D3DErr)
+# define ASSERT_D3D(_e) _ERR_CHECK_ASSERT(D3DErr, _e)
+#else
+# define ERR_D3D() ERR("Error!");
+# define ASSERT_D3D(_e) do { \
+        if (!(_e)) \
+        { \
+            ERR("Error: Assertion failure expr (%s)", #_e); \
+        } \
+    } while (0)
+#endif /* #ifdef VBOX_WINE_DEBUG */
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+/*
+ * Internal definitions (do not use these directly)
+ */
+
+enum __wine_debug_class
+{
+    __WINE_DBCL_FIXME,
+    __WINE_DBCL_ERR,
+    __WINE_DBCL_WARN,
+    __WINE_DBCL_TRACE,
+
+    __WINE_DBCL_INIT = 7  /* lazy init flag */
+};
+
+struct __wine_debug_channel
+{
+    unsigned char flags;
+    char name[15];
+};
+
+#ifndef WINE_NO_TRACE_MSGS
+# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE))
+#else
+# define __WINE_GET_DEBUGGING_TRACE(dbch) 0
+#endif
+
+#ifndef WINE_NO_DEBUG_MSGS
+# define __WINE_GET_DEBUGGING_WARN(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_WARN))
+# if 0// && defined(DEBUG_misha)
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) (RT_BREAKPOINT(), ((dbch)->flags & (1 << __WINE_DBCL_FIXME)))
+# else
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME))
+# endif
+#else
+# define __WINE_GET_DEBUGGING_WARN(dbch)  0
+# if 0 && defined(DEBUG_misha)
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) (RT_BREAKPOINT(), 0)
+# else
+#  define __WINE_GET_DEBUGGING_FIXME(dbch) 0
+# endif
+#endif
+
+/* define error macro regardless of what is configured */
+#if defined(DEBUG_misha)
+#define __WINE_GET_DEBUGGING_ERR(dbch)  (RT_BREAKPOINT(), ((dbch)->flags & (1 << __WINE_DBCL_ERR)))
+#else
+#define __WINE_GET_DEBUGGING_ERR(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_ERR))
+#endif
+
+#define __WINE_GET_DEBUGGING(dbcl,dbch)  __WINE_GET_DEBUGGING##dbcl(dbch)
+
+#define __WINE_IS_DEBUG_ON(dbcl,dbch) \
+  (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl)))
+
+#ifdef __GNUC__
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+       struct __wine_debug_channel * const __dbch = (dbch); \
+       const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
+       __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(args...) \
+    wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(args...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(args...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(args...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#elif defined(__SUNPRO_C)
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+       struct __wine_debug_channel * const __dbch = (dbch); \
+       const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
+       __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(...) \
+   wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args)
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#else  /* !__GNUC__ && !__SUNPRO_C */
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+    (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \
+     (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
+     (void)0 : (void)wine_dbg_printf
+
+#define __WINE_PRINTF_ATTR(fmt, args)
+
+#endif  /* !__GNUC__ && !__SUNPRO_C */
+
+struct __wine_debug_functions
+{
+    char * (*get_temp_buffer)( size_t n );
+    void   (*release_temp_buffer)( char *buffer, size_t n );
+    const char * (*dbgstr_an)( const char * s, int n );
+    const char * (*dbgstr_wn)( const WCHAR *s, int n );
+    int (*dbg_vprintf)( const char *format, va_list args );
+    int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+                     const char *function, const char *format, va_list args );
+};
+
+extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel );
+extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+                                         unsigned char set, unsigned char clear );
+extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+                                      struct __wine_debug_functions *old_funcs, size_t size );
+
+/*
+ * Exported definitions and macros
+ */
+
+/* These functions return a printable version of a string, including
+   quotes.  The string will be valid for some time, but not indefinitely
+   as strings are re-used.  */
+extern const char *wine_dbgstr_an( const char * s, int n );
+extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
+extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+
+extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func,
+                         const char *format, ... ) __WINE_PRINTF_ATTR(4,5);
+
+static inline const char *wine_dbgstr_a( const char *s )
+{
+    return wine_dbgstr_an( s, -1 );
+}
+
+static inline const char *wine_dbgstr_w( const WCHAR *s )
+{
+    return wine_dbgstr_wn( s, -1 );
+}
+
+static inline const char *wine_dbgstr_guid( const GUID *id )
+{
+    if (!id) return "(null)";
+    if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( "<guid-0x%04hx>", (WORD)(ULONG_PTR)id );
+    return wine_dbg_sprintf( "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+                             id->Data1, id->Data2, id->Data3,
+                             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
+                             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
+}
+
+static inline const char *wine_dbgstr_point( const POINT *pt )
+{
+    if (!pt) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)", pt->x, pt->y );
+}
+
+static inline const char *wine_dbgstr_size( const SIZE *size )
+{
+    if (!size) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)", size->cx, size->cy );
+}
+
+static inline const char *wine_dbgstr_rect( const RECT *rect )
+{
+    if (!rect) return "(null)";
+    return wine_dbg_sprintf( "(%d,%d)-(%d,%d)", rect->left, rect->top,
+                             rect->right, rect->bottom );
+}
+
+static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
+{
+    if (sizeof(ll) > sizeof(unsigned long) && ll >> 32)
+        return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
+    else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
+}
+
+#ifndef WINE_TRACE
+#define WINE_TRACE                 __WINE_DPRINTF(_TRACE,__wine_dbch___default)
+#define WINE_TRACE_(ch)            __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)
+#endif
+#define WINE_TRACE_ON(ch)          __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)
+
+#ifndef WINE_WARN
+#define WINE_WARN                  __WINE_DPRINTF(_WARN,__wine_dbch___default)
+#define WINE_WARN_(ch)             __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)
+#endif
+#define WINE_WARN_ON(ch)           __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)
+
+#ifndef WINE_FIXME
+#define WINE_FIXME                 __WINE_DPRINTF(_FIXME,__wine_dbch___default)
+#define WINE_FIXME_(ch)            __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)
+#endif
+#define WINE_FIXME_ON(ch)          __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)
+
+#define WINE_ERR                   __WINE_DPRINTF(_ERR,__wine_dbch___default)
+#define WINE_ERR_(ch)              __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)
+#define WINE_ERR_ON(ch)            __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)
+
+#define WINE_DECLARE_DEBUG_CHANNEL(ch) \
+    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }
+#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \
+    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \
+    static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch
+
+#define WINE_DPRINTF               wine_dbg_printf
+#define WINE_MESSAGE               wine_dbg_printf
+
+#ifdef __WINESRC__
+/* Wine uses shorter names that are very likely to conflict with other software */
+
+static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
+static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
+static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); }
+static inline const char *debugstr_a( const char *s )  { return wine_dbgstr_an( s, -1 ); }
+static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+#define TRACE                      WINE_TRACE
+#define TRACE_(ch)                 WINE_TRACE_(ch)
+#define TRACE_ON(ch)               WINE_TRACE_ON(ch)
+
+#define WARN                       WINE_WARN
+#define WARN_(ch)                  WINE_WARN_(ch)
+#define WARN_ON(ch)                WINE_WARN_ON(ch)
+
+#define FIXME                      WINE_FIXME
+#define FIXME_(ch)                 WINE_FIXME_(ch)
+#define FIXME_ON(ch)               WINE_FIXME_ON(ch)
+
+#undef ERR  /* Solaris got an 'ERR' define in <sys/reg.h> */
+#define ERR                        WINE_ERR
+#define ERR_(ch)                   WINE_ERR_(ch)
+#define ERR_ON(ch)                 WINE_ERR_ON(ch)
+
+#define DPRINTF                    WINE_DPRINTF
+#define MESSAGE                    WINE_MESSAGE
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#if 0//def DEBUG_misha
+# define VBOXWINEDBG_SHADERS
+#endif
+
+#if defined(VBOXWINEDBG_SHADERS) || defined(VBOX_WINE_WITH_PROFILE)
+#include <stdio.h>
+#include <stdarg.h>
+
+void vboxWDbgPrintF(char * szString, ...);
+#endif
+
+#ifdef VBOXWINEDBG_SHADERS
+# define WDLOG(_m) do {\
+        vboxWDbgPrintF _m ; \
+    } while (0)
+#else
+
+# define WDLOG(_m) do { } while (0)
+#endif
+
+#endif  /* __WINE_WINE_DEBUG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/list.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/list.h
new file mode 100644
index 0000000..cdc61fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/list.h
@@ -0,0 +1,246 @@
+/*
+ * Linked lists support
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SERVER_LIST_H
+#define __WINE_SERVER_LIST_H
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+struct list
+{
+    struct list *next;
+    struct list *prev;
+};
+
+/* Define a list like so:
+ *
+ *   struct gadget
+ *   {
+ *       struct list  entry;   <-- doesn't have to be the first item in the struct
+ *       int          a, b;
+ *   };
+ *
+ *   static struct list global_gadgets = LIST_INIT( global_gadgets );
+ *
+ * or
+ *
+ *   struct some_global_thing
+ *   {
+ *       struct list gadgets;
+ *   };
+ *
+ *   list_init( &some_global_thing->gadgets );
+ *
+ * Manipulate it like this:
+ *
+ *   list_add_head( &global_gadgets, &new_gadget->entry );
+ *   list_remove( &new_gadget->entry );
+ *   list_add_after( &some_random_gadget->entry, &new_gadget->entry );
+ *
+ * And to iterate over it:
+ *
+ *   struct gadget *gadget;
+ *   LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
+ *   {
+ *       ...
+ *   }
+ *
+ */
+
+/* add an element after the specified one */
+static inline void list_add_after( struct list *elem, struct list *to_add )
+{
+    to_add->next = elem->next;
+    to_add->prev = elem;
+    elem->next->prev = to_add;
+    elem->next = to_add;
+}
+
+/* add an element before the specified one */
+static inline void list_add_before( struct list *elem, struct list *to_add )
+{
+    to_add->next = elem;
+    to_add->prev = elem->prev;
+    elem->prev->next = to_add;
+    elem->prev = to_add;
+}
+
+/* add element at the head of the list */
+static inline void list_add_head( struct list *list, struct list *elem )
+{
+    list_add_after( list, elem );
+}
+
+/* add element at the tail of the list */
+static inline void list_add_tail( struct list *list, struct list *elem )
+{
+    list_add_before( list, elem );
+}
+
+/* remove an element from its list */
+static inline void list_remove( struct list *elem )
+{
+    elem->next->prev = elem->prev;
+    elem->prev->next = elem->next;
+}
+
+/* get the next element */
+static inline struct list *list_next( const struct list *list, const struct list *elem )
+{
+    struct list *ret = elem->next;
+    if (elem->next == list) ret = NULL;
+    return ret;
+}
+
+/* get the previous element */
+static inline struct list *list_prev( const struct list *list, const struct list *elem )
+{
+    struct list *ret = elem->prev;
+    if (elem->prev == list) ret = NULL;
+    return ret;
+}
+
+/* get the first element */
+static inline struct list *list_head( const struct list *list )
+{
+    return list_next( list, list );
+}
+
+/* get the last element */
+static inline struct list *list_tail( const struct list *list )
+{
+    return list_prev( list, list );
+}
+
+/* check if a list is empty */
+static inline int list_empty( const struct list *list )
+{
+    return list->next == list;
+}
+
+/* initialize a list */
+static inline void list_init( struct list *list )
+{
+    list->next = list->prev = list;
+}
+
+/* count the elements of a list */
+static inline unsigned int list_count( const struct list *list )
+{
+    unsigned count = 0;
+    const struct list *ptr;
+    for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
+    return count;
+}
+
+/* move all elements from src to the tail of dst */
+static inline void list_move_tail( struct list *dst, struct list *src )
+{
+    if (list_empty(src)) return;
+
+    dst->prev->next = src->next;
+    src->next->prev = dst->prev;
+    dst->prev = src->prev;
+    src->prev->next = dst;
+    list_init(src);
+}
+
+/* move all elements from src to the head of dst */
+static inline void list_move_head( struct list *dst, struct list *src )
+{
+    if (list_empty(src)) return;
+
+    dst->next->prev = src->prev;
+    src->prev->next = dst->next;
+    dst->next = src->next;
+    src->next->prev = dst;
+    list_init(src);
+}
+
+/* iterate through the list */
+#define LIST_FOR_EACH(cursor,list) \
+    for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
+
+/* iterate through the list, with safety against removal */
+#define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \
+    for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
+         (cursor) != (list); \
+         (cursor) = (cursor2), (cursor2) = (cursor)->next)
+
+/* iterate through the list using a list entry */
+#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \
+    for ((elem) = LIST_ENTRY((list)->next, type, field); \
+         &(elem)->field != (list); \
+         (elem) = LIST_ENTRY((elem)->field.next, type, field))
+
+/* iterate through the list using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
+    for ((cursor) = LIST_ENTRY((list)->next, type, field), \
+         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \
+         &(cursor)->field != (list); \
+         (cursor) = (cursor2), \
+         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field))
+
+/* iterate through the list in reverse order */
+#define LIST_FOR_EACH_REV(cursor,list) \
+    for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
+
+/* iterate through the list in reverse order, with safety against removal */
+#define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
+    for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
+         (cursor) != (list); \
+         (cursor) = (cursor2), (cursor2) = (cursor)->prev)
+
+/* iterate through the list in reverse order using a list entry */
+#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
+    for ((elem) = LIST_ENTRY((list)->prev, type, field); \
+         &(elem)->field != (list); \
+         (elem) = LIST_ENTRY((elem)->field.prev, type, field))
+
+/* iterate through the list in reverse order using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
+    for ((cursor) = LIST_ENTRY((list)->prev, type, field), \
+         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \
+         &(cursor)->field != (list); \
+         (cursor) = (cursor2), \
+         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field))
+
+/* macros for statically initialized lists */
+#undef LIST_INIT
+#define LIST_INIT(list)  { &(list), &(list) }
+
+/* get pointer to object containing list element */
+#undef LIST_ENTRY
+#define LIST_ENTRY(elem, type, field) \
+    ((type *)((char *)(elem) - (unsigned long)(&((type *)0)->field)))
+
+#endif  /* __WINE_SERVER_LIST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/port.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/port.h
new file mode 100644
index 0000000..3c514f1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/port.h
@@ -0,0 +1,489 @@
+/*
+ * Wine porting definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_PORT_H
+#define __WINE_WINE_PORT_H
+
+#ifndef __WINE_CONFIG_H
+# error You must include config.h to use this header
+#endif
+
+#ifdef __WINE_BASETSD_H
+# error You must include port.h before all other headers
+#endif
+
+#define _GNU_SOURCE  /* for pread/pwrite */
+#include <fcntl.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+#ifdef HAVE_PROCESS_H
+# include <process.h>
+#endif
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+/* Can't use windef.h here, cause it'd cause problems with NONAMELESSUNION/STRUCT later */
+#ifndef inline
+#define inline
+#endif
+
+/****************************************************************
+ * Type definitions
+ */
+
+#if !defined(_MSC_VER) && !defined(__int64)
+#  if defined(__x86_64__) || defined(_WIN64)
+#    define __int64 long
+#  else
+#    define __int64 long long
+#  endif
+#endif
+
+#ifndef HAVE_MODE_T
+typedef int mode_t;
+#endif
+#ifndef HAVE_OFF_T
+typedef long off_t;
+#endif
+#ifndef HAVE_PID_T
+typedef int pid_t;
+#endif
+#ifndef HAVE_SIZE_T
+typedef unsigned int size_t;
+#endif
+#ifndef HAVE_SSIZE_T
+typedef int ssize_t;
+#endif
+#ifndef HAVE_FSBLKCNT_T
+typedef unsigned long fsblkcnt_t;
+#endif
+#ifndef HAVE_FSFILCNT_T
+typedef unsigned long fsfilcnt_t;
+#endif
+
+#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS
+struct statvfs
+{
+    unsigned long f_bsize;
+    unsigned long f_frsize;
+    fsblkcnt_t    f_blocks;
+    fsblkcnt_t    f_bfree;
+    fsblkcnt_t    f_bavail;
+    fsfilcnt_t    f_files;
+    fsfilcnt_t    f_ffree;
+    fsfilcnt_t    f_favail;
+    unsigned long f_fsid;
+    unsigned long f_flag;
+    unsigned long f_namemax;
+};
+#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */
+
+
+/****************************************************************
+ * Macro definitions
+ */
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+#define RTLD_LAZY    0x001
+#define RTLD_NOW     0x002
+#define RTLD_GLOBAL  0x100
+#endif
+
+#ifdef HAVE_ONE_ARG_MKDIR
+#define mkdir(path,mode) mkdir(path)
+#endif
+
+#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)
+#define ftruncate chsize
+#endif
+
+#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)
+#define popen _popen
+#endif
+
+#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)
+#define pclose _pclose
+#endif
+
+#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)
+#define strdup _strdup
+#endif
+
+#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)
+#define snprintf _snprintf
+#endif
+
+#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)
+#define vsnprintf _vsnprintf
+#endif
+
+#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)
+#define strtoll _strtoi64
+#endif
+
+#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)
+#define strtoull _strtoui64
+#endif
+
+#ifndef S_ISLNK
+# define S_ISLNK(mod) (0)
+#endif
+
+#ifndef S_ISSOCK
+# define S_ISSOCK(mod) (0)
+#endif
+
+#ifndef S_ISDIR
+# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)
+#endif
+
+#ifndef S_ISCHR
+# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)
+#endif
+
+#ifndef S_ISFIFO
+# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)
+#endif
+
+#ifndef S_ISREG
+# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)
+#endif
+
+/* So we open files in 64 bit access mode on Linux */
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK 0
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/****************************************************************
+ * Constants
+ */
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#ifndef M_PI_2
+#define M_PI_2 1.570796326794896619
+#endif
+
+
+/****************************************************************
+ * Function definitions (only when using libwine_port)
+ */
+
+#ifndef NO_LIBWINE_PORT
+
+#ifndef HAVE_FSTATVFS
+int fstatvfs( int fd, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_GETOPT_LONG
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+struct option;
+
+#ifndef HAVE_STRUCT_OPTION_NAME
+struct option
+{
+    const char *name;
+    int has_arg;
+    int *flag;
+    int val;
+};
+#endif
+
+extern int getopt_long (int ___argc, char *const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind);
+extern int getopt_long_only (int ___argc, char *const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind);
+#endif  /* HAVE_GETOPT_LONG */
+
+#ifndef HAVE_FFS
+int ffs( int x );
+#endif
+
+#ifndef HAVE_FUTIMES
+struct timeval;
+int futimes(int fd, const struct timeval *tv);
+#endif
+
+#ifndef HAVE_GETPAGESIZE
+size_t getpagesize(void);
+#endif  /* HAVE_GETPAGESIZE */
+
+#ifndef HAVE_GETTID
+pid_t gettid(void);
+#endif /* HAVE_GETTID */
+
+#ifndef HAVE_ISINF
+int isinf(double x);
+#endif
+
+#ifndef HAVE_ISNAN
+int isnan(double x);
+#endif
+
+#ifndef HAVE_LSTAT
+int lstat(const char *file_name, struct stat *buf);
+#endif /* HAVE_LSTAT */
+
+#ifndef HAVE_MEMMOVE
+void *memmove(void *dest, const void *src, size_t len);
+#endif /* !defined(HAVE_MEMMOVE) */
+
+#ifndef HAVE_POLL
+struct pollfd
+{
+    int fd;
+    short events;
+    short revents;
+};
+#define POLLIN   0x01
+#define POLLPRI  0x02
+#define POLLOUT  0x04
+#define POLLERR  0x08
+#define POLLHUP  0x10
+#define POLLNVAL 0x20
+int poll( struct pollfd *fds, unsigned int count, int timeout );
+#endif /* HAVE_POLL */
+
+#ifndef HAVE_PREAD
+ssize_t pread( int fd, void *buf, size_t count, off_t offset );
+#endif /* HAVE_PREAD */
+
+#ifndef HAVE_PWRITE
+ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );
+#endif /* HAVE_PWRITE */
+
+#ifndef HAVE_READLINK
+int readlink( const char *path, char *buf, size_t size );
+#endif /* HAVE_READLINK */
+
+#ifndef HAVE_STATVFS
+int statvfs( const char *path, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_STRNCASECMP
+# ifndef HAVE__STRNICMP
+int strncasecmp(const char *str1, const char *str2, size_t n);
+# else
+# define strncasecmp _strnicmp
+# endif
+#endif /* !defined(HAVE_STRNCASECMP) */
+
+#ifndef HAVE_STRERROR
+const char *strerror(int err);
+#endif /* !defined(HAVE_STRERROR) */
+
+#ifndef HAVE_STRCASECMP
+# ifndef HAVE__STRICMP
+int strcasecmp(const char *str1, const char *str2);
+# else
+# define strcasecmp _stricmp
+# endif
+#endif /* !defined(HAVE_STRCASECMP) */
+
+#ifndef HAVE_SYMLINK
+int symlink(const char *from, const char *to);
+#endif
+
+#ifndef HAVE_USLEEP
+int usleep (unsigned int useconds);
+#endif /* !defined(HAVE_USLEEP) */
+
+#ifdef __i386__
+static inline void *memcpy_unaligned( void *dst, const void *src, size_t size )
+{
+    return memcpy( dst, src, size );
+}
+#else
+extern void *memcpy_unaligned( void *dst, const void *src, size_t size );
+#endif /* __i386__ */
+
+extern int mkstemps(char *template, int suffix_len);
+
+/* Process creation flags */
+#ifndef _P_WAIT
+# define _P_WAIT    0
+# define _P_NOWAIT  1
+# define _P_OVERLAY 2
+# define _P_NOWAITO 3
+# define _P_DETACH  4
+#endif
+#ifndef HAVE_SPAWNVP
+extern int spawnvp(int mode, const char *cmdname, const char * const argv[]);
+#endif
+
+/* Interlocked functions */
+
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern inline int interlocked_xchg( int *dest, int val );
+extern inline void *interlocked_xchg_ptr( void **dest, void *val );
+extern inline int interlocked_xchg_add( int *dest, int incr );
+
+extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare )
+{
+    int ret;
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+    return ret;
+}
+
+extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )
+{
+    void *ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; cmpxchgq %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#else
+    __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+                          : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#endif
+    return ret;
+}
+
+extern inline int interlocked_xchg( int *dest, int val )
+{
+    int ret;
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+    return ret;
+}
+
+extern inline void *interlocked_xchg_ptr( void **dest, void *val )
+{
+    void *ret;
+#ifdef __x86_64__
+    __asm__ __volatile__( "lock; xchgq %0,(%1)"
+                          : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+    __asm__ __volatile__( "lock; xchgl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+#endif
+    return ret;
+}
+
+extern inline int interlocked_xchg_add( int *dest, int incr )
+{
+    int ret;
+    __asm__ __volatile__( "lock; xaddl %0,(%1)"
+                          : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+    return ret;
+}
+
+#ifdef __x86_64__
+extern inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                                    __int64 xchg_low, __int64 *compare );
+extern inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                                    __int64 xchg_low, __int64 *compare )
+{
+    unsigned char ret;
+    __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
+                          : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
+                            "=a" (compare[0]), "=d" (compare[1])
+                          : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
+                            "c" (xchg_high), "b" (xchg_low) );
+    return ret;
+}
+#endif
+
+#else  /* __GNUC__ */
+
+extern int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern int interlocked_xchg( int *dest, int val );
+extern void *interlocked_xchg_ptr( void **dest, void *val );
+extern int interlocked_xchg_add( int *dest, int incr );
+#ifdef _WIN64
+extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+                                             __int64 xchg_low, __int64 *compare );
+#endif
+
+#endif  /* __GNUC__ */
+
+#else /* NO_LIBWINE_PORT */
+
+#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable
+
+#define ffs                     __WINE_NOT_PORTABLE(ffs)
+#define fstatvfs                __WINE_NOT_PORTABLE(fstatvfs)
+#define futimes                 __WINE_NOT_PORTABLE(futimes)
+#define getopt_long             __WINE_NOT_PORTABLE(getopt_long)
+#define getopt_long_only        __WINE_NOT_PORTABLE(getopt_long_only)
+#define getpagesize             __WINE_NOT_PORTABLE(getpagesize)
+#define interlocked_cmpxchg     __WINE_NOT_PORTABLE(interlocked_cmpxchg)
+#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)
+#define interlocked_xchg        __WINE_NOT_PORTABLE(interlocked_xchg)
+#define interlocked_xchg_ptr    __WINE_NOT_PORTABLE(interlocked_xchg_ptr)
+#define interlocked_xchg_add    __WINE_NOT_PORTABLE(interlocked_xchg_add)
+#define lstat                   __WINE_NOT_PORTABLE(lstat)
+#define memcpy_unaligned        __WINE_NOT_PORTABLE(memcpy_unaligned)
+#undef memmove
+#define memmove                 __WINE_NOT_PORTABLE(memmove)
+#define pread                   __WINE_NOT_PORTABLE(pread)
+#define pwrite                  __WINE_NOT_PORTABLE(pwrite)
+#define spawnvp                 __WINE_NOT_PORTABLE(spawnvp)
+#define statvfs                 __WINE_NOT_PORTABLE(statvfs)
+#define strcasecmp              __WINE_NOT_PORTABLE(strcasecmp)
+#define strerror                __WINE_NOT_PORTABLE(strerror)
+#define strncasecmp             __WINE_NOT_PORTABLE(strncasecmp)
+#define usleep                  __WINE_NOT_PORTABLE(usleep)
+
+#endif /* NO_LIBWINE_PORT */
+
+#endif /* !defined(__WINE_WINE_PORT_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/rbtree.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/rbtree.h
new file mode 100644
index 0000000..cda5fd4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/rbtree.h
@@ -0,0 +1,357 @@
+/*
+ * Red-black search tree support
+ *
+ * Copyright 2009 Henri Verbeet
+ * Copyright 2009 Andrew Riedi
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_RBTREE_H
+#define __WINE_WINE_RBTREE_H
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+
+#define WINE_RB_ENTRY_VALUE(element, type, field) \
+    ((type *)((char *)(element) - FIELD_OFFSET(type, field)))
+
+struct wine_rb_entry
+{
+    struct wine_rb_entry *left;
+    struct wine_rb_entry *right;
+    unsigned int flags;
+};
+
+struct wine_rb_stack
+{
+    struct wine_rb_entry ***entries;
+    size_t count;
+    size_t size;
+};
+
+struct wine_rb_functions
+{
+    void *(*alloc)(size_t size);
+    void *(*realloc)(void *ptr, size_t size);
+    void (*free)(void *ptr);
+    int (*compare)(const void *key, const struct wine_rb_entry *entry);
+};
+
+struct wine_rb_tree
+{
+    const struct wine_rb_functions *functions;
+    struct wine_rb_entry *root;
+    struct wine_rb_stack stack;
+};
+
+typedef void (wine_rb_traverse_func_t)(struct wine_rb_entry *entry, void *context);
+
+#define WINE_RB_FLAG_RED                0x1
+#define WINE_RB_FLAG_STOP               0x2
+#define WINE_RB_FLAG_TRAVERSED_LEFT     0x4
+#define WINE_RB_FLAG_TRAVERSED_RIGHT    0x8
+
+static inline void wine_rb_stack_clear(struct wine_rb_stack *stack)
+{
+    stack->count = 0;
+}
+
+static inline void wine_rb_stack_push(struct wine_rb_stack *stack, struct wine_rb_entry **entry)
+{
+    stack->entries[stack->count++] = entry;
+}
+
+static inline int wine_rb_ensure_stack_size(struct wine_rb_tree *tree, size_t size)
+{
+    struct wine_rb_stack *stack = &tree->stack;
+
+    if (size > stack->size)
+    {
+        size_t new_size = stack->size << 1;
+        struct wine_rb_entry ***new_entries = tree->functions->realloc(stack->entries,
+                new_size * sizeof(*stack->entries));
+
+        if (!new_entries) return -1;
+
+        stack->entries = new_entries;
+        stack->size = new_size;
+    }
+
+    return 0;
+}
+
+static inline int wine_rb_is_red(struct wine_rb_entry *entry)
+{
+    return entry && (entry->flags & WINE_RB_FLAG_RED);
+}
+
+static inline void wine_rb_rotate_left(struct wine_rb_entry **entry)
+{
+    struct wine_rb_entry *e = *entry;
+    struct wine_rb_entry *right = e->right;
+
+    e->right = right->left;
+    right->left = e;
+    right->flags &= ~WINE_RB_FLAG_RED;
+    right->flags |= e->flags & WINE_RB_FLAG_RED;
+    e->flags |= WINE_RB_FLAG_RED;
+    *entry = right;
+}
+
+static inline void wine_rb_rotate_right(struct wine_rb_entry **entry)
+{
+    struct wine_rb_entry *e = *entry;
+    struct wine_rb_entry *left = e->left;
+
+    e->left = left->right;
+    left->right = e;
+    left->flags &= ~WINE_RB_FLAG_RED;
+    left->flags |= e->flags & WINE_RB_FLAG_RED;
+    e->flags |= WINE_RB_FLAG_RED;
+    *entry = left;
+}
+
+static inline void wine_rb_flip_color(struct wine_rb_entry *entry)
+{
+    entry->flags ^= WINE_RB_FLAG_RED;
+    entry->left->flags ^= WINE_RB_FLAG_RED;
+    entry->right->flags ^= WINE_RB_FLAG_RED;
+}
+
+static inline void wine_rb_fixup(struct wine_rb_stack *stack)
+{
+    while (stack->count)
+    {
+        struct wine_rb_entry **entry = stack->entries[stack->count - 1];
+
+        if ((*entry)->flags & WINE_RB_FLAG_STOP)
+        {
+            (*entry)->flags &= ~WINE_RB_FLAG_STOP;
+            return;
+        }
+
+        if (wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->left)) wine_rb_rotate_left(entry);
+        if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->left->left)) wine_rb_rotate_right(entry);
+        if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->right)) wine_rb_flip_color(*entry);
+        --stack->count;
+    }
+}
+
+static inline void wine_rb_move_red_left(struct wine_rb_entry **entry)
+{
+    wine_rb_flip_color(*entry);
+    if (wine_rb_is_red((*entry)->right->left))
+    {
+        wine_rb_rotate_right(&(*entry)->right);
+        wine_rb_rotate_left(entry);
+        wine_rb_flip_color(*entry);
+    }
+}
+
+static inline void wine_rb_move_red_right(struct wine_rb_entry **entry)
+{
+    wine_rb_flip_color(*entry);
+    if (wine_rb_is_red((*entry)->left->left))
+    {
+        wine_rb_rotate_right(entry);
+        wine_rb_flip_color(*entry);
+    }
+}
+
+static inline void wine_rb_postorder(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    struct wine_rb_entry **entry;
+
+    if (!tree->root) return;
+
+    for (entry = &tree->root;;)
+    {
+        struct wine_rb_entry *e = *entry;
+
+        if (e->left && !(e->flags & WINE_RB_FLAG_TRAVERSED_LEFT))
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            e->flags |= WINE_RB_FLAG_TRAVERSED_LEFT;
+            entry = &e->left;
+            continue;
+        }
+
+        if (e->right && !(e->flags & WINE_RB_FLAG_TRAVERSED_RIGHT))
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            e->flags |= WINE_RB_FLAG_TRAVERSED_RIGHT;
+            entry = &e->right;
+            continue;
+        }
+
+        e->flags &= ~(WINE_RB_FLAG_TRAVERSED_LEFT | WINE_RB_FLAG_TRAVERSED_RIGHT);
+        callback(e, context);
+
+        if (!tree->stack.count) break;
+        entry = tree->stack.entries[--tree->stack.count];
+    }
+}
+
+static inline int wine_rb_init(struct wine_rb_tree *tree, const struct wine_rb_functions *functions)
+{
+    tree->functions = functions;
+    tree->root = NULL;
+
+    tree->stack.entries = functions->alloc(16 * sizeof(*tree->stack.entries));
+    if (!tree->stack.entries) return -1;
+    tree->stack.size = 16;
+    tree->stack.count = 0;
+
+    return 0;
+}
+
+static inline void wine_rb_for_each_entry(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    wine_rb_postorder(tree, callback, context);
+}
+
+static inline void wine_rb_destroy(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+    /* Note that we use postorder here because the callback will likely free the entry. */
+    if (callback) wine_rb_postorder(tree, callback, context);
+
+    tree->root = NULL;
+    tree->functions->free(tree->stack.entries);
+}
+
+static inline struct wine_rb_entry *wine_rb_get(const struct wine_rb_tree *tree, const void *key)
+{
+    struct wine_rb_entry *entry = tree->root;
+    while (entry)
+    {
+        int c = tree->functions->compare(key, entry);
+        if (!c) return entry;
+        entry = c < 0 ? entry->left : entry->right;
+    }
+    return NULL;
+}
+
+static inline int wine_rb_put(struct wine_rb_tree *tree, const void *key, struct wine_rb_entry *entry)
+{
+    struct wine_rb_entry **parent = &tree->root;
+    size_t black_height = 1;
+
+    while (*parent)
+    {
+        int c;
+
+        if (!wine_rb_is_red(*parent)) ++black_height;
+
+        wine_rb_stack_push(&tree->stack, parent);
+
+        c = tree->functions->compare(key, *parent);
+        if (!c)
+        {
+            wine_rb_stack_clear(&tree->stack);
+            return -1;
+        }
+        else if (c < 0) parent = &(*parent)->left;
+        else parent = &(*parent)->right;
+    }
+
+    /* After insertion, the path length to any node should be <= (black_height + 1) * 2. */
+    if (wine_rb_ensure_stack_size(tree, black_height << 1) == -1)
+    {
+        wine_rb_stack_clear(&tree->stack);
+        return -1;
+    }
+
+    entry->flags = WINE_RB_FLAG_RED;
+    entry->left = NULL;
+    entry->right = NULL;
+    *parent = entry;
+
+    wine_rb_fixup(&tree->stack);
+    tree->root->flags &= ~WINE_RB_FLAG_RED;
+
+    return 0;
+}
+
+static inline void wine_rb_remove(struct wine_rb_tree *tree, const void *key)
+{
+    struct wine_rb_entry **entry = &tree->root;
+
+    while (*entry)
+    {
+        if (tree->functions->compare(key, *entry) < 0)
+        {
+            wine_rb_stack_push(&tree->stack, entry);
+            if (!wine_rb_is_red((*entry)->left) && !wine_rb_is_red((*entry)->left->left)) wine_rb_move_red_left(entry);
+            entry = &(*entry)->left;
+        }
+        else
+        {
+            if (wine_rb_is_red((*entry)->left)) wine_rb_rotate_right(entry);
+            if (!tree->functions->compare(key, *entry) && !(*entry)->right)
+            {
+                *entry = NULL;
+                break;
+            }
+            if (!wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->right->left))
+                wine_rb_move_red_right(entry);
+            if (!tree->functions->compare(key, *entry))
+            {
+                struct wine_rb_entry **e = &(*entry)->right;
+                struct wine_rb_entry *m = *e;
+                while (m->left) m = m->left;
+
+                wine_rb_stack_push(&tree->stack, entry);
+                (*entry)->flags |= WINE_RB_FLAG_STOP;
+
+                while ((*e)->left)
+                {
+                    wine_rb_stack_push(&tree->stack, e);
+                    if (!wine_rb_is_red((*e)->left) && !wine_rb_is_red((*e)->left->left)) wine_rb_move_red_left(e);
+                    e = &(*e)->left;
+                }
+                *e = NULL;
+                wine_rb_fixup(&tree->stack);
+
+                *m = **entry;
+                *entry = m;
+
+                break;
+            }
+            else
+            {
+                wine_rb_stack_push(&tree->stack, entry);
+                entry = &(*entry)->right;
+            }
+        }
+    }
+
+    wine_rb_fixup(&tree->stack);
+    if (tree->root) tree->root->flags &= ~WINE_RB_FLAG_RED;
+}
+
+#endif  /* __WINE_WINE_RBTREE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/unicode.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/unicode.h
new file mode 100644
index 0000000..9f3185c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/unicode.h
@@ -0,0 +1,355 @@
+/*
+ * Wine internal Unicode definitions
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_UNICODE_H
+#define __WINE_WINE_UNICODE_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINE_UNICODE_API
+# if defined(_MSC_VER) || defined(__MINGW32__)
+#  define WINE_UNICODE_API DECLSPEC_IMPORT
+# else
+#  define WINE_UNICODE_API
+# endif
+#endif
+
+/*#ifndef WINE_UNICODE_INLINE
+#define WINE_UNICODE_INLINE extern inline
+#endif*/
+#define WINE_UNICODE_INLINE static __inline
+
+/* code page info common to SBCS and DBCS */
+struct cp_info
+{
+    unsigned int          codepage;          /* codepage id */
+    unsigned int          char_size;         /* char size (1 or 2 bytes) */
+    WCHAR                 def_char;          /* default char value (can be double-byte) */
+    WCHAR                 def_unicode_char;  /* default Unicode char value */
+    const char           *name;              /* code page name */
+};
+
+struct sbcs_table
+{
+    struct cp_info        info;
+    const WCHAR          *cp2uni;            /* code page -> Unicode map */
+    const WCHAR          *cp2uni_glyphs;     /* code page -> Unicode map with glyph chars */
+    const unsigned char  *uni2cp_low;        /* Unicode -> code page map */
+    const unsigned short *uni2cp_high;
+};
+
+struct dbcs_table
+{
+    struct cp_info        info;
+    const WCHAR          *cp2uni;            /* code page -> Unicode map */
+    const unsigned char  *cp2uni_leadbytes;
+    const unsigned short *uni2cp_low;        /* Unicode -> code page map */
+    const unsigned short *uni2cp_high;
+    unsigned char         lead_bytes[12];    /* lead bytes ranges */
+};
+
+union cptable
+{
+    struct cp_info    info;
+    struct sbcs_table sbcs;
+    struct dbcs_table dbcs;
+};
+
+extern const union cptable *wine_cp_get_table( unsigned int codepage );
+extern const union cptable *wine_cp_enum_table( unsigned int index );
+
+extern int wine_cp_mbstowcs( const union cptable *table, int flags,
+                             const char *src, int srclen,
+                             WCHAR *dst, int dstlen );
+extern int wine_cp_wcstombs( const union cptable *table, int flags,
+                             const WCHAR *src, int srclen,
+                             char *dst, int dstlen, const char *defchar, int *used );
+extern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+
+extern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 );
+extern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen );
+
+extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );
+extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );
+extern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n );
+extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
+extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern int sprintfW( WCHAR *str, const WCHAR *format, ... );
+extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );
+extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );
+extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );
+
+#ifdef WINE_UNICODE_INLINE
+
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch );
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
+{
+    return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
+}
+
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];
+    return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];
+    return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
+}
+
+/* the character type contains the C1_* flags in the low 12 bits */
+/* and the C2_* type in the high 4 bits */
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch );
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )
+{
+    extern WINE_UNICODE_API const unsigned short wine_wctype_table[];
+    return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc );
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_CNTRL;
+}
+
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc );
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_PUNCT;
+}
+
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc );
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_SPACE;
+}
+
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_DIGIT;
+}
+
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_XDIGIT;
+}
+
+WINE_UNICODE_INLINE int islowerW( WCHAR wc );
+WINE_UNICODE_INLINE int islowerW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_LOWER;
+}
+
+WINE_UNICODE_INLINE int isupperW( WCHAR wc );
+WINE_UNICODE_INLINE int isupperW( WCHAR wc )
+{
+    return get_char_typeW(wc) & C1_UPPER;
+}
+
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc );
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc );
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc );
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isprintW( WCHAR wc );
+WINE_UNICODE_INLINE int isprintW( WCHAR wc )
+{
+    return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+/* some useful string manipulation routines */
+
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str );
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )
+{
+    const WCHAR *s = str;
+    while (*s) s++;
+    return s - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
+{
+    WCHAR *p = dst;
+    while ((*p++ = *src++));
+    return dst;
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead
+
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 );
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+    while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n );
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+{
+    if (n <= 0) return 0;
+    while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
+    return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
+{
+    strcpyW( dst + strlenW(dst), src );
+    return dst;
+}
+
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+{
+    do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);
+    return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
+{
+    WCHAR *ret = NULL;
+    do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
+{
+    for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;
+    return NULL;
+}
+
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )
+{
+    const WCHAR *ptr;
+    for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
+    return ptr - str;
+}
+
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject );
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )
+{
+    const WCHAR *ptr;
+    for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
+    return ptr - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )
+{
+    WCHAR *ret = str;
+    while ((*str = tolowerW(*str))) str++;
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )
+{
+    WCHAR *ret = str;
+    while ((*str = toupperW(*str))) str++;
+    return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+    const WCHAR *end;
+    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;
+    return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+    const WCHAR *end;
+    WCHAR *ret = NULL;
+    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;
+    return ret;
+}
+
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str );
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str )
+{
+    return strtolW( str, (WCHAR **)0, 10 );
+}
+
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str );
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str )
+{
+    return (int)atolW( str );
+}
+#endif //#ifdef WINE_UNICODE_INLINE
+
+#undef WINE_UNICODE_INLINE
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINE_UNICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/wined3d.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/wined3d.h
new file mode 100644
index 0000000..5dbf7a4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/libWineStub/include/wine/wined3d.h
@@ -0,0 +1,9725 @@
+/*** Autogenerated by WIDL 1.1.43 from ../../include/wine/wined3d.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WINED3D_H
+#define __WIDL_WINED3D_H
+
+#ifdef VBOX_WITH_WDDM
+#include "../../../vbox/VBoxWineEx.h"
+#endif
+
+# define DECLSPEC_HIDDEN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IWineD3DDeviceParent_FWD_DEFINED__
+#define __IWineD3DDeviceParent_FWD_DEFINED__
+typedef interface IWineD3DDeviceParent IWineD3DDeviceParent;
+#endif
+
+#ifndef __IWineD3DBase_FWD_DEFINED__
+#define __IWineD3DBase_FWD_DEFINED__
+typedef interface IWineD3DBase IWineD3DBase;
+#endif
+
+#ifndef __IWineD3D_FWD_DEFINED__
+#define __IWineD3D_FWD_DEFINED__
+typedef interface IWineD3D IWineD3D;
+#endif
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DRendertargetView_FWD_DEFINED__
+#define __IWineD3DRendertargetView_FWD_DEFINED__
+typedef interface IWineD3DRendertargetView IWineD3DRendertargetView;
+#endif
+
+#ifndef __IWineD3DPalette_FWD_DEFINED__
+#define __IWineD3DPalette_FWD_DEFINED__
+typedef interface IWineD3DPalette IWineD3DPalette;
+#endif
+
+#ifndef __IWineD3DClipper_FWD_DEFINED__
+#define __IWineD3DClipper_FWD_DEFINED__
+typedef interface IWineD3DClipper IWineD3DClipper;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DBaseTexture_FWD_DEFINED__
+#define __IWineD3DBaseTexture_FWD_DEFINED__
+typedef interface IWineD3DBaseTexture IWineD3DBaseTexture;
+#endif
+
+#ifndef __IWineD3DTexture_FWD_DEFINED__
+#define __IWineD3DTexture_FWD_DEFINED__
+typedef interface IWineD3DTexture IWineD3DTexture;
+#endif
+
+#ifndef __IWineD3DCubeTexture_FWD_DEFINED__
+#define __IWineD3DCubeTexture_FWD_DEFINED__
+typedef interface IWineD3DCubeTexture IWineD3DCubeTexture;
+#endif
+
+#ifndef __IWineD3DVolumeTexture_FWD_DEFINED__
+#define __IWineD3DVolumeTexture_FWD_DEFINED__
+typedef interface IWineD3DVolumeTexture IWineD3DVolumeTexture;
+#endif
+
+#ifndef __IWineD3DVertexDeclaration_FWD_DEFINED__
+#define __IWineD3DVertexDeclaration_FWD_DEFINED__
+typedef interface IWineD3DVertexDeclaration IWineD3DVertexDeclaration;
+#endif
+
+#ifndef __IWineD3DStateBlock_FWD_DEFINED__
+#define __IWineD3DStateBlock_FWD_DEFINED__
+typedef interface IWineD3DStateBlock IWineD3DStateBlock;
+#endif
+
+#ifndef __IWineD3DQuery_FWD_DEFINED__
+#define __IWineD3DQuery_FWD_DEFINED__
+typedef interface IWineD3DQuery IWineD3DQuery;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DBuffer_FWD_DEFINED__
+#define __IWineD3DBuffer_FWD_DEFINED__
+typedef interface IWineD3DBuffer IWineD3DBuffer;
+#endif
+
+#ifndef __IWineD3DBaseShader_FWD_DEFINED__
+#define __IWineD3DBaseShader_FWD_DEFINED__
+typedef interface IWineD3DBaseShader IWineD3DBaseShader;
+#endif
+
+#ifndef __IWineD3DVertexShader_FWD_DEFINED__
+#define __IWineD3DVertexShader_FWD_DEFINED__
+typedef interface IWineD3DVertexShader IWineD3DVertexShader;
+#endif
+
+#ifndef __IWineD3DGeometryShader_FWD_DEFINED__
+#define __IWineD3DGeometryShader_FWD_DEFINED__
+typedef interface IWineD3DGeometryShader IWineD3DGeometryShader;
+#endif
+
+#ifndef __IWineD3DPixelShader_FWD_DEFINED__
+#define __IWineD3DPixelShader_FWD_DEFINED__
+typedef interface IWineD3DPixelShader IWineD3DPixelShader;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+
+#if 0
+typedef HANDLE HMONITOR;
+typedef struct _RGNDATAHEADER {
+    DWORD dwSize;
+    DWORD iType;
+    DWORD nCount;
+    DWORD nRgnSize;
+    RECT rcBound;
+} RGNDATAHEADER;
+typedef struct _RGNDATA {
+    RGNDATAHEADER rdh;
+    char Buffer[1];
+} RGNDATA;
+typedef struct _LUID {
+    DWORD LowPart;
+    LONG HighPart;
+} LUID;
+typedef struct _LUID *PLUID;
+#endif
+#define WINED3D_OK                                  S_OK
+#define _FACWINED3D (0x876)
+
+#define MAKE_WINED3DSTATUS(code)                    MAKE_HRESULT(0, _FACWINED3D, code)
+#define WINED3DOK_NOAUTOGEN                         MAKE_WINED3DSTATUS(2159)
+#define MAKE_WINED3DHRESULT(code)                   MAKE_HRESULT(1, _FACWINED3D, code)
+#define WINED3DERR_WRONGTEXTUREFORMAT               MAKE_WINED3DHRESULT(2072)
+#define WINED3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_WINED3DHRESULT(2073)
+#define WINED3DERR_UNSUPPORTEDCOLORARG              MAKE_WINED3DHRESULT(2074)
+#define WINED3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_WINED3DHRESULT(2075)
+#define WINED3DERR_UNSUPPORTEDALPHAARG              MAKE_WINED3DHRESULT(2076)
+#define WINED3DERR_TOOMANYOPERATIONS                MAKE_WINED3DHRESULT(2077)
+#define WINED3DERR_CONFLICTINGTEXTUREFILTER         MAKE_WINED3DHRESULT(2078)
+#define WINED3DERR_UNSUPPORTEDFACTORVALUE           MAKE_WINED3DHRESULT(2079)
+#define WINED3DERR_CONFLICTINGRENDERSTATE           MAKE_WINED3DHRESULT(2081)
+#define WINED3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_WINED3DHRESULT(2082)
+#define WINED3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_WINED3DHRESULT(2086)
+#define WINED3DERR_DRIVERINTERNALERROR              MAKE_WINED3DHRESULT(2087)
+#define WINED3DERR_NOTFOUND                         MAKE_WINED3DHRESULT(2150)
+#define WINED3DERR_MOREDATA                         MAKE_WINED3DHRESULT(2151)
+#define WINED3DERR_DEVICELOST                       MAKE_WINED3DHRESULT(2152)
+#define WINED3DERR_DEVICENOTRESET                   MAKE_WINED3DHRESULT(2153)
+#define WINED3DERR_NOTAVAILABLE                     MAKE_WINED3DHRESULT(2154)
+#define WINED3DERR_OUTOFVIDEOMEMORY                 MAKE_WINED3DHRESULT(380)
+#define WINED3DERR_INVALIDDEVICE                    MAKE_WINED3DHRESULT(2155)
+#define WINED3DERR_INVALIDCALL                      MAKE_WINED3DHRESULT(2156)
+#define WINED3DERR_DRIVERINVALIDCALL                MAKE_WINED3DHRESULT(2157)
+#define WINED3DERR_WASSTILLDRAWING                  MAKE_WINED3DHRESULT(540)
+#define WINEDDERR_NOTAOVERLAYSURFACE                MAKE_WINED3DHRESULT(580)
+#define WINEDDERR_NOTLOCKED                         MAKE_WINED3DHRESULT(584)
+#define WINEDDERR_NODC                              MAKE_WINED3DHRESULT(586)
+#define WINEDDERR_DCALREADYCREATED                  MAKE_WINED3DHRESULT(620)
+#define WINEDDERR_NOTFLIPPABLE                      MAKE_WINED3DHRESULT(582)
+#define WINEDDERR_SURFACEBUSY                       MAKE_WINED3DHRESULT(430)
+#define WINEDDERR_INVALIDRECT                       MAKE_WINED3DHRESULT(150)
+#define WINEDDERR_NOCLIPLIST                        MAKE_WINED3DHRESULT(205)
+#define WINEDDERR_OVERLAYNOTVISIBLE                 MAKE_WINED3DHRESULT(577)
+typedef DWORD WINED3DCOLOR;
+typedef enum _WINED3DLIGHTTYPE {
+    WINED3DLIGHT_POINT = 1,
+    WINED3DLIGHT_SPOT = 2,
+    WINED3DLIGHT_DIRECTIONAL = 3,
+    WINED3DLIGHT_PARALLELPOINT = 4,
+    WINED3DLIGHT_GLSPOT = 5,
+    WINED3DLIGHT_FORCE_DWORD = 0x7fffffff
+} WINED3DLIGHTTYPE;
+typedef enum _WINED3DPRIMITIVETYPE {
+    WINED3DPT_UNDEFINED = 0,
+    WINED3DPT_POINTLIST = 1,
+    WINED3DPT_LINELIST = 2,
+    WINED3DPT_LINESTRIP = 3,
+    WINED3DPT_TRIANGLELIST = 4,
+    WINED3DPT_TRIANGLESTRIP = 5,
+    WINED3DPT_TRIANGLEFAN = 6,
+    WINED3DPT_LINELIST_ADJ = 10,
+    WINED3DPT_LINESTRIP_ADJ = 11,
+    WINED3DPT_TRIANGLELIST_ADJ = 12,
+    WINED3DPT_TRIANGLESTRIP_ADJ = 13,
+    WINED3DPT_FORCE_DWORD = 0x7fffffff
+} WINED3DPRIMITIVETYPE;
+typedef enum _WINED3DDEVTYPE {
+    WINED3DDEVTYPE_HAL = 1,
+    WINED3DDEVTYPE_REF = 2,
+    WINED3DDEVTYPE_SW = 3,
+    WINED3DDEVTYPE_NULLREF = 4,
+    WINED3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} WINED3DDEVTYPE;
+typedef enum _WINED3DDEGREETYPE {
+    WINED3DDEGREE_LINEAR = 1,
+    WINED3DDEGREE_QUADRATIC = 2,
+    WINED3DDEGREE_CUBIC = 3,
+    WINED3DDEGREE_QUINTIC = 5,
+    WINED3DDEGREE_FORCE_DWORD = 0x7fffffff
+} WINED3DDEGREETYPE;
+typedef enum _WINED3DFORMAT {
+    WINED3DFMT_UNKNOWN = 0,
+    WINED3DFMT_B8G8R8_UNORM = 1,
+    WINED3DFMT_B5G5R5X1_UNORM = 2,
+    WINED3DFMT_B4G4R4A4_UNORM = 3,
+    WINED3DFMT_B2G3R3_UNORM = 4,
+    WINED3DFMT_B2G3R3A8_UNORM = 5,
+    WINED3DFMT_B4G4R4X4_UNORM = 6,
+    WINED3DFMT_R8G8B8X8_UNORM = 7,
+    WINED3DFMT_B10G10R10A2_UNORM = 8,
+    WINED3DFMT_P8_UINT_A8_UNORM = 9,
+    WINED3DFMT_P8_UINT = 10,
+    WINED3DFMT_L8_UNORM = 11,
+    WINED3DFMT_L8A8_UNORM = 12,
+    WINED3DFMT_L4A4_UNORM = 13,
+    WINED3DFMT_R5G5_SNORM_L6_UNORM = 14,
+    WINED3DFMT_R8G8_SNORM_L8X8_UNORM = 15,
+    WINED3DFMT_R10G11B11_SNORM = 16,
+    WINED3DFMT_R10G10B10_SNORM_A2_UNORM = 17,
+    WINED3DFMT_D16_LOCKABLE = 18,
+    WINED3DFMT_D32_UNORM = 19,
+    WINED3DFMT_S1_UINT_D15_UNORM = 20,
+    WINED3DFMT_X8D24_UNORM = 21,
+    WINED3DFMT_S4X4_UINT_D24_UNORM = 22,
+    WINED3DFMT_L16_UNORM = 23,
+    WINED3DFMT_S8_UINT_D24_FLOAT = 24,
+    WINED3DFMT_VERTEXDATA = 25,
+    WINED3DFMT_R8G8_SNORM_Cx = 26,
+    WINED3DFMT_R32G32B32A32_TYPELESS = 27,
+    WINED3DFMT_R32G32B32A32_FLOAT = 28,
+    WINED3DFMT_R32G32B32A32_UINT = 29,
+    WINED3DFMT_R32G32B32A32_SINT = 30,
+    WINED3DFMT_R32G32B32_TYPELESS = 31,
+    WINED3DFMT_R32G32B32_FLOAT = 32,
+    WINED3DFMT_R32G32B32_UINT = 33,
+    WINED3DFMT_R32G32B32_SINT = 34,
+    WINED3DFMT_R16G16B16A16_TYPELESS = 35,
+    WINED3DFMT_R16G16B16A16_FLOAT = 36,
+    WINED3DFMT_R16G16B16A16_UNORM = 37,
+    WINED3DFMT_R16G16B16A16_UINT = 38,
+    WINED3DFMT_R16G16B16A16_SNORM = 39,
+    WINED3DFMT_R16G16B16A16_SINT = 40,
+    WINED3DFMT_R32G32_TYPELESS = 41,
+    WINED3DFMT_R32G32_FLOAT = 42,
+    WINED3DFMT_R32G32_UINT = 43,
+    WINED3DFMT_R32G32_SINT = 44,
+    WINED3DFMT_R32G8X24_TYPELESS = 45,
+    WINED3DFMT_D32_FLOAT_S8X24_UINT = 46,
+    WINED3DFMT_R32_FLOAT_X8X24_TYPELESS = 47,
+    WINED3DFMT_X32_TYPELESS_G8X24_UINT = 48,
+    WINED3DFMT_R10G10B10A2_TYPELESS = 49,
+    WINED3DFMT_R10G10B10A2_UNORM = 50,
+    WINED3DFMT_R10G10B10A2_UINT = 51,
+    WINED3DFMT_R10G10B10A2_SNORM = 52,
+    WINED3DFMT_R11G11B10_FLOAT = 53,
+    WINED3DFMT_R8G8B8A8_TYPELESS = 54,
+    WINED3DFMT_R8G8B8A8_UNORM = 55,
+    WINED3DFMT_R8G8B8A8_UNORM_SRGB = 56,
+    WINED3DFMT_R8G8B8A8_UINT = 57,
+    WINED3DFMT_R8G8B8A8_SNORM = 58,
+    WINED3DFMT_R8G8B8A8_SINT = 59,
+    WINED3DFMT_R16G16_TYPELESS = 60,
+    WINED3DFMT_R16G16_FLOAT = 61,
+    WINED3DFMT_R16G16_UNORM = 62,
+    WINED3DFMT_R16G16_UINT = 63,
+    WINED3DFMT_R16G16_SNORM = 64,
+    WINED3DFMT_R16G16_SINT = 65,
+    WINED3DFMT_R32_TYPELESS = 66,
+    WINED3DFMT_D32_FLOAT = 67,
+    WINED3DFMT_R32_FLOAT = 68,
+    WINED3DFMT_R32_UINT = 69,
+    WINED3DFMT_R32_SINT = 70,
+    WINED3DFMT_R24G8_TYPELESS = 71,
+    WINED3DFMT_D24_UNORM_S8_UINT = 72,
+    WINED3DFMT_R24_UNORM_X8_TYPELESS = 73,
+    WINED3DFMT_X24_TYPELESS_G8_UINT = 74,
+    WINED3DFMT_R8G8_TYPELESS = 75,
+    WINED3DFMT_R8G8_UNORM = 76,
+    WINED3DFMT_R8G8_UINT = 77,
+    WINED3DFMT_R8G8_SNORM = 78,
+    WINED3DFMT_R8G8_SINT = 79,
+    WINED3DFMT_R16_TYPELESS = 80,
+    WINED3DFMT_R16_FLOAT = 81,
+    WINED3DFMT_D16_UNORM = 82,
+    WINED3DFMT_R16_UNORM = 83,
+    WINED3DFMT_R16_UINT = 84,
+    WINED3DFMT_R16_SNORM = 85,
+    WINED3DFMT_R16_SINT = 86,
+    WINED3DFMT_R8_TYPELESS = 87,
+    WINED3DFMT_R8_UNORM = 88,
+    WINED3DFMT_R8_UINT = 89,
+    WINED3DFMT_R8_SNORM = 90,
+    WINED3DFMT_R8_SINT = 91,
+    WINED3DFMT_A8_UNORM = 92,
+    WINED3DFMT_R1_UNORM = 93,
+    WINED3DFMT_R9G9B9E5_SHAREDEXP = 94,
+    WINED3DFMT_R8G8_B8G8_UNORM = 95,
+    WINED3DFMT_G8R8_G8B8_UNORM = 96,
+    WINED3DFMT_BC1_TYPELESS = 97,
+    WINED3DFMT_BC1_UNORM = 98,
+    WINED3DFMT_BC1_UNORM_SRGB = 99,
+    WINED3DFMT_BC2_TYPELESS = 100,
+    WINED3DFMT_BC2_UNORM = 101,
+    WINED3DFMT_BC2_UNORM_SRGB = 102,
+    WINED3DFMT_BC3_TYPELESS = 103,
+    WINED3DFMT_BC3_UNORM = 104,
+    WINED3DFMT_BC3_UNORM_SRGB = 105,
+    WINED3DFMT_BC4_TYPELESS = 106,
+    WINED3DFMT_BC4_UNORM = 107,
+    WINED3DFMT_BC4_SNORM = 108,
+    WINED3DFMT_BC5_TYPELESS = 109,
+    WINED3DFMT_BC5_UNORM = 110,
+    WINED3DFMT_BC5_SNORM = 111,
+    WINED3DFMT_B5G6R5_UNORM = 112,
+    WINED3DFMT_B5G5R5A1_UNORM = 113,
+    WINED3DFMT_B8G8R8A8_UNORM = 114,
+    WINED3DFMT_B8G8R8X8_UNORM = 115,
+    WINED3DFMT_UYVY = (((ULONG)(unsigned char)'U' | ((ULONG)(unsigned char)'Y' << 8)) | ((ULONG)(unsigned char)'V' << 16)) | ((ULONG)(unsigned char)'Y' << 24),
+    WINED3DFMT_YUY2 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'U' << 8)) | ((ULONG)(unsigned char)'Y' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_YV12 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'1' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_DXT1 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+    WINED3DFMT_DXT2 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_DXT3 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'3' << 24),
+    WINED3DFMT_DXT4 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'4' << 24),
+    WINED3DFMT_DXT5 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'5' << 24),
+    WINED3DFMT_MULTI2_ARGB8 = (((ULONG)(unsigned char)'M' | ((ULONG)(unsigned char)'E' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+    WINED3DFMT_G8R8_G8B8 = (((ULONG)(unsigned char)'G' | ((ULONG)(unsigned char)'R' << 8)) | ((ULONG)(unsigned char)'G' << 16)) | ((ULONG)(unsigned char)'B' << 24),
+    WINED3DFMT_R8G8_B8G8 = (((ULONG)(unsigned char)'R' | ((ULONG)(unsigned char)'G' << 8)) | ((ULONG)(unsigned char)'B' << 16)) | ((ULONG)(unsigned char)'G' << 24),
+    WINED3DFMT_ATI2N = (((ULONG)(unsigned char)'A' | ((ULONG)(unsigned char)'T' << 8)) | ((ULONG)(unsigned char)'I' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+    WINED3DFMT_INST = (((ULONG)(unsigned char)'I' | ((ULONG)(unsigned char)'N' << 8)) | ((ULONG)(unsigned char)'S' << 16)) | ((ULONG)(unsigned char)'T' << 24),
+    WINED3DFMT_NVHU = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'U' << 24),
+    WINED3DFMT_NVHS = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'S' << 24),
+    WINED3DFMT_FORCE_DWORD = 0xffffffff
+} WINED3DFORMAT;
+typedef enum _WINED3DRENDERSTATETYPE {
+    WINED3DRS_ANTIALIAS = 2,
+    WINED3DRS_TEXTUREPERSPECTIVE = 4,
+    WINED3DRS_WRAPU = 5,
+    WINED3DRS_WRAPV = 6,
+    WINED3DRS_ZENABLE = 7,
+    WINED3DRS_FILLMODE = 8,
+    WINED3DRS_SHADEMODE = 9,
+    WINED3DRS_LINEPATTERN = 10,
+    WINED3DRS_MONOENABLE = 11,
+    WINED3DRS_ROP2 = 12,
+    WINED3DRS_PLANEMASK = 13,
+    WINED3DRS_ZWRITEENABLE = 14,
+    WINED3DRS_ALPHATESTENABLE = 15,
+    WINED3DRS_LASTPIXEL = 16,
+    WINED3DRS_SRCBLEND = 19,
+    WINED3DRS_DESTBLEND = 20,
+    WINED3DRS_CULLMODE = 22,
+    WINED3DRS_ZFUNC = 23,
+    WINED3DRS_ALPHAREF = 24,
+    WINED3DRS_ALPHAFUNC = 25,
+    WINED3DRS_DITHERENABLE = 26,
+    WINED3DRS_ALPHABLENDENABLE = 27,
+    WINED3DRS_FOGENABLE = 28,
+    WINED3DRS_SPECULARENABLE = 29,
+    WINED3DRS_ZVISIBLE = 30,
+    WINED3DRS_SUBPIXEL = 31,
+    WINED3DRS_SUBPIXELX = 32,
+    WINED3DRS_STIPPLEDALPHA = 33,
+    WINED3DRS_FOGCOLOR = 34,
+    WINED3DRS_FOGTABLEMODE = 35,
+    WINED3DRS_FOGSTART = 36,
+    WINED3DRS_FOGEND = 37,
+    WINED3DRS_FOGDENSITY = 38,
+    WINED3DRS_STIPPLEENABLE = 39,
+    WINED3DRS_EDGEANTIALIAS = 40,
+    WINED3DRS_COLORKEYENABLE = 41,
+    WINED3DRS_MIPMAPLODBIAS = 46,
+    WINED3DRS_ZBIAS = 47,
+    WINED3DRS_RANGEFOGENABLE = 48,
+    WINED3DRS_ANISOTROPY = 49,
+    WINED3DRS_FLUSHBATCH = 50,
+    WINED3DRS_TRANSLUCENTSORTINDEPENDENT = 51,
+    WINED3DRS_STENCILENABLE = 52,
+    WINED3DRS_STENCILFAIL = 53,
+    WINED3DRS_STENCILZFAIL = 54,
+    WINED3DRS_STENCILPASS = 55,
+    WINED3DRS_STENCILFUNC = 56,
+    WINED3DRS_STENCILREF = 57,
+    WINED3DRS_STENCILMASK = 58,
+    WINED3DRS_STENCILWRITEMASK = 59,
+    WINED3DRS_TEXTUREFACTOR = 60,
+    WINED3DRS_WRAP0 = 128,
+    WINED3DRS_WRAP1 = 129,
+    WINED3DRS_WRAP2 = 130,
+    WINED3DRS_WRAP3 = 131,
+    WINED3DRS_WRAP4 = 132,
+    WINED3DRS_WRAP5 = 133,
+    WINED3DRS_WRAP6 = 134,
+    WINED3DRS_WRAP7 = 135,
+    WINED3DRS_CLIPPING = 136,
+    WINED3DRS_LIGHTING = 137,
+    WINED3DRS_EXTENTS = 138,
+    WINED3DRS_AMBIENT = 139,
+    WINED3DRS_FOGVERTEXMODE = 140,
+    WINED3DRS_COLORVERTEX = 141,
+    WINED3DRS_LOCALVIEWER = 142,
+    WINED3DRS_NORMALIZENORMALS = 143,
+    WINED3DRS_COLORKEYBLENDENABLE = 144,
+    WINED3DRS_DIFFUSEMATERIALSOURCE = 145,
+    WINED3DRS_SPECULARMATERIALSOURCE = 146,
+    WINED3DRS_AMBIENTMATERIALSOURCE = 147,
+    WINED3DRS_EMISSIVEMATERIALSOURCE = 148,
+    WINED3DRS_VERTEXBLEND = 151,
+    WINED3DRS_CLIPPLANEENABLE = 152,
+    WINED3DRS_SOFTWAREVERTEXPROCESSING = 153,
+    WINED3DRS_POINTSIZE = 154,
+    WINED3DRS_POINTSIZE_MIN = 155,
+    WINED3DRS_POINTSPRITEENABLE = 156,
+    WINED3DRS_POINTSCALEENABLE = 157,
+    WINED3DRS_POINTSCALE_A = 158,
+    WINED3DRS_POINTSCALE_B = 159,
+    WINED3DRS_POINTSCALE_C = 160,
+    WINED3DRS_MULTISAMPLEANTIALIAS = 161,
+    WINED3DRS_MULTISAMPLEMASK = 162,
+    WINED3DRS_PATCHEDGESTYLE = 163,
+    WINED3DRS_PATCHSEGMENTS = 164,
+    WINED3DRS_DEBUGMONITORTOKEN = 165,
+    WINED3DRS_POINTSIZE_MAX = 166,
+    WINED3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+    WINED3DRS_COLORWRITEENABLE = 168,
+    WINED3DRS_TWEENFACTOR = 170,
+    WINED3DRS_BLENDOP = 171,
+    WINED3DRS_POSITIONDEGREE = 172,
+    WINED3DRS_NORMALDEGREE = 173,
+    WINED3DRS_SCISSORTESTENABLE = 174,
+    WINED3DRS_SLOPESCALEDEPTHBIAS = 175,
+    WINED3DRS_ANTIALIASEDLINEENABLE = 176,
+    WINED3DRS_MINTESSELLATIONLEVEL = 178,
+    WINED3DRS_MAXTESSELLATIONLEVEL = 179,
+    WINED3DRS_ADAPTIVETESS_X = 180,
+    WINED3DRS_ADAPTIVETESS_Y = 181,
+    WINED3DRS_ADAPTIVETESS_Z = 182,
+    WINED3DRS_ADAPTIVETESS_W = 183,
+    WINED3DRS_ENABLEADAPTIVETESSELLATION = 184,
+    WINED3DRS_TWOSIDEDSTENCILMODE = 185,
+    WINED3DRS_CCW_STENCILFAIL = 186,
+    WINED3DRS_CCW_STENCILZFAIL = 187,
+    WINED3DRS_CCW_STENCILPASS = 188,
+    WINED3DRS_CCW_STENCILFUNC = 189,
+    WINED3DRS_COLORWRITEENABLE1 = 190,
+    WINED3DRS_COLORWRITEENABLE2 = 191,
+    WINED3DRS_COLORWRITEENABLE3 = 192,
+    WINED3DRS_BLENDFACTOR = 193,
+    WINED3DRS_SRGBWRITEENABLE = 194,
+    WINED3DRS_DEPTHBIAS = 195,
+    WINED3DRS_WRAP8 = 198,
+    WINED3DRS_WRAP9 = 199,
+    WINED3DRS_WRAP10 = 200,
+    WINED3DRS_WRAP11 = 201,
+    WINED3DRS_WRAP12 = 202,
+    WINED3DRS_WRAP13 = 203,
+    WINED3DRS_WRAP14 = 204,
+    WINED3DRS_WRAP15 = 205,
+    WINED3DRS_SEPARATEALPHABLENDENABLE = 206,
+    WINED3DRS_SRCBLENDALPHA = 207,
+    WINED3DRS_DESTBLENDALPHA = 208,
+    WINED3DRS_BLENDOPALPHA = 209,
+    WINED3DRS_FORCE_DWORD = 0x7fffffff
+} WINED3DRENDERSTATETYPE;
+#define WINEHIGHEST_RENDER_STATE (WINED3DRS_BLENDOPALPHA)
+
+typedef enum _WINED3DBLEND {
+    WINED3DBLEND_ZERO = 1,
+    WINED3DBLEND_ONE = 2,
+    WINED3DBLEND_SRCCOLOR = 3,
+    WINED3DBLEND_INVSRCCOLOR = 4,
+    WINED3DBLEND_SRCALPHA = 5,
+    WINED3DBLEND_INVSRCALPHA = 6,
+    WINED3DBLEND_DESTALPHA = 7,
+    WINED3DBLEND_INVDESTALPHA = 8,
+    WINED3DBLEND_DESTCOLOR = 9,
+    WINED3DBLEND_INVDESTCOLOR = 10,
+    WINED3DBLEND_SRCALPHASAT = 11,
+    WINED3DBLEND_BOTHSRCALPHA = 12,
+    WINED3DBLEND_BOTHINVSRCALPHA = 13,
+    WINED3DBLEND_BLENDFACTOR = 14,
+    WINED3DBLEND_INVBLENDFACTOR = 15,
+    WINED3DBLEND_FORCE_DWORD = 0x7fffffff
+} WINED3DBLEND;
+typedef enum _WINED3DBLENDOP {
+    WINED3DBLENDOP_ADD = 1,
+    WINED3DBLENDOP_SUBTRACT = 2,
+    WINED3DBLENDOP_REVSUBTRACT = 3,
+    WINED3DBLENDOP_MIN = 4,
+    WINED3DBLENDOP_MAX = 5,
+    WINED3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} WINED3DBLENDOP;
+typedef enum _WINED3DVERTEXBLENDFLAGS {
+    WINED3DVBF_DISABLE = 0,
+    WINED3DVBF_1WEIGHTS = 1,
+    WINED3DVBF_2WEIGHTS = 2,
+    WINED3DVBF_3WEIGHTS = 3,
+    WINED3DVBF_TWEENING = 255,
+    WINED3DVBF_0WEIGHTS = 256
+} WINED3DVERTEXBLENDFLAGS;
+typedef enum _WINED3DCMPFUNC {
+    WINED3DCMP_NEVER = 1,
+    WINED3DCMP_LESS = 2,
+    WINED3DCMP_EQUAL = 3,
+    WINED3DCMP_LESSEQUAL = 4,
+    WINED3DCMP_GREATER = 5,
+    WINED3DCMP_NOTEQUAL = 6,
+    WINED3DCMP_GREATEREQUAL = 7,
+    WINED3DCMP_ALWAYS = 8,
+    WINED3DCMP_FORCE_DWORD = 0x7fffffff
+} WINED3DCMPFUNC;
+typedef enum _WINED3DZBUFFERTYPE {
+    WINED3DZB_FALSE = 0,
+    WINED3DZB_TRUE = 1,
+    WINED3DZB_USEW = 2,
+    WINED3DZB_FORCE_DWORD = 0x7fffffff
+} WINED3DZBUFFERTYPE;
+typedef enum _WINED3DFOGMODE {
+    WINED3DFOG_NONE = 0,
+    WINED3DFOG_EXP = 1,
+    WINED3DFOG_EXP2 = 2,
+    WINED3DFOG_LINEAR = 3,
+    WINED3DFOG_FORCE_DWORD = 0x7fffffff
+} WINED3DFOGMODE;
+typedef enum _WINED3DSHADEMODE {
+    WINED3DSHADE_FLAT = 1,
+    WINED3DSHADE_GOURAUD = 2,
+    WINED3DSHADE_PHONG = 3,
+    WINED3DSHADE_FORCE_DWORD = 0x7fffffff
+} WINED3DSHADEMODE;
+typedef enum _WINED3DFILLMODE {
+    WINED3DFILL_POINT = 1,
+    WINED3DFILL_WIREFRAME = 2,
+    WINED3DFILL_SOLID = 3,
+    WINED3DFILL_FORCE_DWORD = 0x7fffffff
+} WINED3DFILLMODE;
+typedef enum _WINED3DCULL {
+    WINED3DCULL_NONE = 1,
+    WINED3DCULL_CW = 2,
+    WINED3DCULL_CCW = 3,
+    WINED3DCULL_FORCE_DWORD = 0x7fffffff
+} WINED3DCULL;
+typedef enum _WINED3DSTENCILOP {
+    WINED3DSTENCILOP_KEEP = 1,
+    WINED3DSTENCILOP_ZERO = 2,
+    WINED3DSTENCILOP_REPLACE = 3,
+    WINED3DSTENCILOP_INCRSAT = 4,
+    WINED3DSTENCILOP_DECRSAT = 5,
+    WINED3DSTENCILOP_INVERT = 6,
+    WINED3DSTENCILOP_INCR = 7,
+    WINED3DSTENCILOP_DECR = 8,
+    WINED3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} WINED3DSTENCILOP;
+typedef enum _WINED3DMATERIALCOLORSOURCE {
+    WINED3DMCS_MATERIAL = 0,
+    WINED3DMCS_COLOR1 = 1,
+    WINED3DMCS_COLOR2 = 2,
+    WINED3DMCS_FORCE_DWORD = 0x7fffffff
+} WINED3DMATERIALCOLORSOURCE;
+typedef enum _WINED3DPATCHEDGESTYLE {
+    WINED3DPATCHEDGE_DISCRETE = 0,
+    WINED3DPATCHEDGE_CONTINUOUS = 1,
+    WINED3DPATCHEDGE_FORCE_DWORD = 0x7fffffff
+} WINED3DPATCHEDGESTYLE;
+typedef enum _WINED3DBACKBUFFER_TYPE {
+    WINED3DBACKBUFFER_TYPE_MONO = 0,
+    WINED3DBACKBUFFER_TYPE_LEFT = 1,
+    WINED3DBACKBUFFER_TYPE_RIGHT = 2,
+    WINED3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DBACKBUFFER_TYPE;
+typedef enum _WINED3DSWAPEFFECT {
+    WINED3DSWAPEFFECT_DISCARD = 1,
+    WINED3DSWAPEFFECT_FLIP = 2,
+    WINED3DSWAPEFFECT_COPY = 3,
+    WINED3DSWAPEFFECT_COPY_VSYNC = 4,
+    WINED3DSWAPEFFECT_FORCE_DWORD = 0xffffffff
+} WINED3DSWAPEFFECT;
+typedef enum _WINED3DSAMPLERSTATETYPE {
+    WINED3DSAMP_ADDRESSU = 1,
+    WINED3DSAMP_ADDRESSV = 2,
+    WINED3DSAMP_ADDRESSW = 3,
+    WINED3DSAMP_BORDERCOLOR = 4,
+    WINED3DSAMP_MAGFILTER = 5,
+    WINED3DSAMP_MINFILTER = 6,
+    WINED3DSAMP_MIPFILTER = 7,
+    WINED3DSAMP_MIPMAPLODBIAS = 8,
+    WINED3DSAMP_MAXMIPLEVEL = 9,
+    WINED3DSAMP_MAXANISOTROPY = 10,
+    WINED3DSAMP_SRGBTEXTURE = 11,
+    WINED3DSAMP_ELEMENTINDEX = 12,
+    WINED3DSAMP_DMAPOFFSET = 13,
+    WINED3DSAMP_FORCE_DWORD = 0x7fffffff
+} WINED3DSAMPLERSTATETYPE;
+#define WINED3D_HIGHEST_SAMPLER_STATE (WINED3DSAMP_DMAPOFFSET)
+
+typedef enum _WINED3DMULTISAMPLE_TYPE {
+    WINED3DMULTISAMPLE_NONE = 0,
+    WINED3DMULTISAMPLE_NONMASKABLE = 1,
+    WINED3DMULTISAMPLE_2_SAMPLES = 2,
+    WINED3DMULTISAMPLE_3_SAMPLES = 3,
+    WINED3DMULTISAMPLE_4_SAMPLES = 4,
+    WINED3DMULTISAMPLE_5_SAMPLES = 5,
+    WINED3DMULTISAMPLE_6_SAMPLES = 6,
+    WINED3DMULTISAMPLE_7_SAMPLES = 7,
+    WINED3DMULTISAMPLE_8_SAMPLES = 8,
+    WINED3DMULTISAMPLE_9_SAMPLES = 9,
+    WINED3DMULTISAMPLE_10_SAMPLES = 10,
+    WINED3DMULTISAMPLE_11_SAMPLES = 11,
+    WINED3DMULTISAMPLE_12_SAMPLES = 12,
+    WINED3DMULTISAMPLE_13_SAMPLES = 13,
+    WINED3DMULTISAMPLE_14_SAMPLES = 14,
+    WINED3DMULTISAMPLE_15_SAMPLES = 15,
+    WINED3DMULTISAMPLE_16_SAMPLES = 16,
+    WINED3DMULTISAMPLE_FORCE_DWORD = 0xffffffff
+} WINED3DMULTISAMPLE_TYPE;
+typedef enum _WINED3DTEXTURESTAGESTATETYPE {
+    WINED3DTSS_COLOROP = 0,
+    WINED3DTSS_COLORARG1 = 1,
+    WINED3DTSS_COLORARG2 = 2,
+    WINED3DTSS_ALPHAOP = 3,
+    WINED3DTSS_ALPHAARG1 = 4,
+    WINED3DTSS_ALPHAARG2 = 5,
+    WINED3DTSS_BUMPENVMAT00 = 6,
+    WINED3DTSS_BUMPENVMAT01 = 7,
+    WINED3DTSS_BUMPENVMAT10 = 8,
+    WINED3DTSS_BUMPENVMAT11 = 9,
+    WINED3DTSS_TEXCOORDINDEX = 10,
+    WINED3DTSS_BUMPENVLSCALE = 11,
+    WINED3DTSS_BUMPENVLOFFSET = 12,
+    WINED3DTSS_TEXTURETRANSFORMFLAGS = 13,
+    WINED3DTSS_COLORARG0 = 14,
+    WINED3DTSS_ALPHAARG0 = 15,
+    WINED3DTSS_RESULTARG = 16,
+    WINED3DTSS_CONSTANT = 17,
+    WINED3DTSS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURESTAGESTATETYPE;
+#define WINED3D_HIGHEST_TEXTURE_STATE (WINED3DTSS_CONSTANT)
+
+typedef enum _WINED3DTEXTURETRANSFORMFLAGS {
+    WINED3DTTFF_DISABLE = 0,
+    WINED3DTTFF_COUNT1 = 1,
+    WINED3DTTFF_COUNT2 = 2,
+    WINED3DTTFF_COUNT3 = 3,
+    WINED3DTTFF_COUNT4 = 4,
+    WINED3DTTFF_PROJECTED = 256,
+    WINED3DTTFF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURETRANSFORMFLAGS;
+typedef enum _WINED3DTEXTUREOP {
+    WINED3DTOP_DISABLE = 1,
+    WINED3DTOP_SELECTARG1 = 2,
+    WINED3DTOP_SELECTARG2 = 3,
+    WINED3DTOP_MODULATE = 4,
+    WINED3DTOP_MODULATE2X = 5,
+    WINED3DTOP_MODULATE4X = 6,
+    WINED3DTOP_ADD = 7,
+    WINED3DTOP_ADDSIGNED = 8,
+    WINED3DTOP_ADDSIGNED2X = 9,
+    WINED3DTOP_SUBTRACT = 10,
+    WINED3DTOP_ADDSMOOTH = 11,
+    WINED3DTOP_BLENDDIFFUSEALPHA = 12,
+    WINED3DTOP_BLENDTEXTUREALPHA = 13,
+    WINED3DTOP_BLENDFACTORALPHA = 14,
+    WINED3DTOP_BLENDTEXTUREALPHAPM = 15,
+    WINED3DTOP_BLENDCURRENTALPHA = 16,
+    WINED3DTOP_PREMODULATE = 17,
+    WINED3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+    WINED3DTOP_MODULATECOLOR_ADDALPHA = 19,
+    WINED3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+    WINED3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+    WINED3DTOP_BUMPENVMAP = 22,
+    WINED3DTOP_BUMPENVMAPLUMINANCE = 23,
+    WINED3DTOP_DOTPRODUCT3 = 24,
+    WINED3DTOP_MULTIPLYADD = 25,
+    WINED3DTOP_LERP = 26,
+    WINED3DTOP_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREOP;
+typedef enum _WINED3DTEXTUREADDRESS {
+    WINED3DTADDRESS_WRAP = 1,
+    WINED3DTADDRESS_MIRROR = 2,
+    WINED3DTADDRESS_CLAMP = 3,
+    WINED3DTADDRESS_BORDER = 4,
+    WINED3DTADDRESS_MIRRORONCE = 5,
+    WINED3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREADDRESS;
+typedef enum _WINED3DTRANSFORMSTATETYPE {
+    WINED3DTS_VIEW = 2,
+    WINED3DTS_PROJECTION = 3,
+    WINED3DTS_TEXTURE0 = 16,
+    WINED3DTS_TEXTURE1 = 17,
+    WINED3DTS_TEXTURE2 = 18,
+    WINED3DTS_TEXTURE3 = 19,
+    WINED3DTS_TEXTURE4 = 20,
+    WINED3DTS_TEXTURE5 = 21,
+    WINED3DTS_TEXTURE6 = 22,
+    WINED3DTS_TEXTURE7 = 23,
+    WINED3DTS_WORLD = 256,
+    WINED3DTS_WORLD1 = 257,
+    WINED3DTS_WORLD2 = 258,
+    WINED3DTS_WORLD3 = 259,
+    WINED3DTS_FORCE_DWORD = 0x7fffffff
+} WINED3DTRANSFORMSTATETYPE;
+#define WINED3DTS_WORLDMATRIX(index) (WINED3DTRANSFORMSTATETYPE)(index + 256)
+typedef enum _WINED3DBASISTYPE {
+    WINED3DBASIS_BEZIER = 0,
+    WINED3DBASIS_BSPLINE = 1,
+    WINED3DBASIS_INTERPOLATE = 2,
+    WINED3DBASIS_FORCE_DWORD = 0x7fffffff
+} WINED3DBASISTYPE;
+typedef enum _WINED3DCUBEMAP_FACES {
+    WINED3DCUBEMAP_FACE_POSITIVE_X = 0,
+    WINED3DCUBEMAP_FACE_NEGATIVE_X = 1,
+    WINED3DCUBEMAP_FACE_POSITIVE_Y = 2,
+    WINED3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+    WINED3DCUBEMAP_FACE_POSITIVE_Z = 4,
+    WINED3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+    WINED3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} WINED3DCUBEMAP_FACES;
+typedef enum _WINED3DTEXTUREFILTERTYPE {
+    WINED3DTEXF_NONE = 0,
+    WINED3DTEXF_POINT = 1,
+    WINED3DTEXF_LINEAR = 2,
+    WINED3DTEXF_ANISOTROPIC = 3,
+    WINED3DTEXF_FLATCUBIC = 4,
+    WINED3DTEXF_GAUSSIANCUBIC = 5,
+    WINED3DTEXF_PYRAMIDALQUAD = 6,
+    WINED3DTEXF_GAUSSIANQUAD = 7,
+    WINED3DTEXF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREFILTERTYPE;
+typedef enum _WINED3DRESOURCETYPE {
+    WINED3DRTYPE_SURFACE = 1,
+    WINED3DRTYPE_VOLUME = 2,
+    WINED3DRTYPE_TEXTURE = 3,
+    WINED3DRTYPE_VOLUMETEXTURE = 4,
+    WINED3DRTYPE_CUBETEXTURE = 5,
+    WINED3DRTYPE_BUFFER = 6,
+    WINED3DRTYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DRESOURCETYPE;
+#define WINED3DRTYPECOUNT (WINED3DRTYPE_BUFFER + 1)
+
+typedef enum _WINED3DPOOL {
+    WINED3DPOOL_DEFAULT = 0,
+    WINED3DPOOL_MANAGED = 1,
+    WINED3DPOOL_SYSTEMMEM = 2,
+    WINED3DPOOL_SCRATCH = 3,
+    WINED3DPOOL_FORCE_DWORD = 0x7fffffff
+} WINED3DPOOL;
+typedef enum _WINED3DQUERYTYPE {
+    WINED3DQUERYTYPE_VCACHE = 4,
+    WINED3DQUERYTYPE_RESOURCEMANAGER = 5,
+    WINED3DQUERYTYPE_VERTEXSTATS = 6,
+    WINED3DQUERYTYPE_EVENT = 8,
+    WINED3DQUERYTYPE_OCCLUSION = 9,
+    WINED3DQUERYTYPE_TIMESTAMP = 10,
+    WINED3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+    WINED3DQUERYTYPE_TIMESTAMPFREQ = 12,
+    WINED3DQUERYTYPE_PIPELINETIMINGS = 13,
+    WINED3DQUERYTYPE_INTERFACETIMINGS = 14,
+    WINED3DQUERYTYPE_VERTEXTIMINGS = 15,
+    WINED3DQUERYTYPE_PIXELTIMINGS = 16,
+    WINED3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+    WINED3DQUERYTYPE_CACHEUTILIZATION = 18
+} WINED3DQUERYTYPE;
+#define WINED3DISSUE_BEGIN (1 << 1)
+
+#define WINED3DISSUE_END (1 << 0)
+
+#define WINED3DGETDATA_FLUSH (1 << 0)
+
+typedef enum _WINED3DSTATEBLOCKTYPE {
+    WINED3DSBT_INIT = 0,
+    WINED3DSBT_ALL = 1,
+    WINED3DSBT_PIXELSTATE = 2,
+    WINED3DSBT_VERTEXSTATE = 3,
+    WINED3DSBT_RECORDED = 4,
+    WINED3DSBT_FORCE_DWORD = 0xffffffff
+} WINED3DSTATEBLOCKTYPE;
+typedef enum _WINED3DDECLMETHOD {
+    WINED3DDECLMETHOD_DEFAULT = 0,
+    WINED3DDECLMETHOD_PARTIALU = 1,
+    WINED3DDECLMETHOD_PARTIALV = 2,
+    WINED3DDECLMETHOD_CROSSUV = 3,
+    WINED3DDECLMETHOD_UV = 4,
+    WINED3DDECLMETHOD_LOOKUP = 5,
+    WINED3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} WINED3DDECLMETHOD;
+typedef enum _WINED3DDECLUSAGE {
+    WINED3DDECLUSAGE_POSITION = 0,
+    WINED3DDECLUSAGE_BLENDWEIGHT = 1,
+    WINED3DDECLUSAGE_BLENDINDICES = 2,
+    WINED3DDECLUSAGE_NORMAL = 3,
+    WINED3DDECLUSAGE_PSIZE = 4,
+    WINED3DDECLUSAGE_TEXCOORD = 5,
+    WINED3DDECLUSAGE_TANGENT = 6,
+    WINED3DDECLUSAGE_BINORMAL = 7,
+    WINED3DDECLUSAGE_TESSFACTOR = 8,
+    WINED3DDECLUSAGE_POSITIONT = 9,
+    WINED3DDECLUSAGE_COLOR = 10,
+    WINED3DDECLUSAGE_FOG = 11,
+    WINED3DDECLUSAGE_DEPTH = 12,
+    WINED3DDECLUSAGE_SAMPLE = 13
+} WINED3DDECLUSAGE;
+typedef enum _WINED3DSURFTYPE {
+    SURFACE_UNKNOWN = 0,
+    SURFACE_OPENGL = 1,
+    SURFACE_GDI = 2
+} WINED3DSURFTYPE;
+enum wined3d_sysval_semantic {
+    WINED3D_SV_DEPTH = 0xffffffff,
+    WINED3D_SV_TARGET0 = 0,
+    WINED3D_SV_TARGET1 = 1,
+    WINED3D_SV_TARGET2 = 2,
+    WINED3D_SV_TARGET3 = 3,
+    WINED3D_SV_TARGET4 = 4,
+    WINED3D_SV_TARGET5 = 5,
+    WINED3D_SV_TARGET6 = 6,
+    WINED3D_SV_TARGET7 = 7
+};
+
+#define WINED3DCOLORWRITEENABLE_RED (1 << 0)
+
+#define WINED3DCOLORWRITEENABLE_GREEN (1 << 1)
+
+#define WINED3DCOLORWRITEENABLE_BLUE (1 << 2)
+
+#define WINED3DCOLORWRITEENABLE_ALPHA (1 << 3)
+
+#define WINED3DADAPTER_DEFAULT (0)
+
+#define WINED3DENUM_NO_WHQL_LEVEL (2)
+
+#define WINED3DPRESENT_BACK_BUFFER_MAX (3)
+
+#define WINED3DTSS_TCI_PASSTHRU (0x0)
+
+#define WINED3DTSS_TCI_CAMERASPACENORMAL (0x10000)
+
+#define WINED3DTSS_TCI_CAMERASPACEPOSITION (0x20000)
+
+#define WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR (0x30000)
+
+#define WINED3DTSS_TCI_SPHEREMAP (0x40000)
+
+#define WINED3DTA_SELECTMASK (0xf)
+
+#define WINED3DTA_DIFFUSE (0x0)
+
+#define WINED3DTA_CURRENT (0x1)
+
+#define WINED3DTA_TEXTURE (0x2)
+
+#define WINED3DTA_TFACTOR (0x3)
+
+#define WINED3DTA_SPECULAR (0x4)
+
+#define WINED3DTA_TEMP (0x5)
+
+#define WINED3DTA_CONSTANT (0x6)
+
+#define WINED3DTA_COMPLEMENT (0x10)
+
+#define WINED3DTA_ALPHAREPLICATE (0x20)
+
+#define WINED3DPRESENTFLAG_LOCKABLE_BACKBUFFER (0x1)
+
+#define WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL (0x2)
+
+#define WINED3DPRESENTFLAG_DEVICECLIP (0x4)
+
+#define WINED3DPRESENTFLAG_VIDEO (0x10)
+
+#define WINED3DPRESENTFLAG_NOAUTOROTATE (0x20)
+
+#define WINED3DPRESENTFLAG_UNPRUNEDMODE (0x40)
+
+#define WINED3DDP_MAXTEXCOORD (8)
+
+#define WINED3DUSAGE_RENDERTARGET (0x1)
+
+#define WINED3DUSAGE_DEPTHSTENCIL (0x2)
+
+#define WINED3DUSAGE_WRITEONLY (0x8)
+
+#define WINED3DUSAGE_SOFTWAREPROCESSING (0x10)
+
+#define WINED3DUSAGE_DONOTCLIP (0x20)
+
+#define WINED3DUSAGE_POINTS (0x40)
+
+#define WINED3DUSAGE_RTPATCHES (0x80)
+
+#define WINED3DUSAGE_NPATCHES (0x100)
+
+#define WINED3DUSAGE_DYNAMIC (0x200)
+
+#define WINED3DUSAGE_AUTOGENMIPMAP (0x400)
+
+#define WINED3DUSAGE_DMAP (0x4000)
+
+#define WINED3DUSAGE_MASK (0x4fff)
+
+#define WINED3DUSAGE_STATICDECL (0x40000000)
+
+#define WINED3DUSAGE_OVERLAY (0x80000000)
+
+#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP (0x8000)
+
+#define WINED3DUSAGE_QUERY_FILTER (0x20000)
+
+#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x80000)
+
+#define WINED3DUSAGE_QUERY_SRGBREAD (0x10000)
+
+#define WINED3DUSAGE_QUERY_SRGBWRITE (0x40000)
+
+#define WINED3DUSAGE_QUERY_VERTEXTEXTURE (0x100000)
+
+#define WINED3DUSAGE_QUERY_WRAPANDMIP (0x200000)
+
+#define WINED3DUSAGE_QUERY_MASK (0x3f8000)
+
+#define WINED3DLOCK_READONLY (0x10)
+
+#define WINED3DLOCK_NOSYSLOCK (0x800)
+
+#define WINED3DLOCK_NOOVERWRITE (0x1000)
+
+#define WINED3DLOCK_DISCARD (0x2000)
+
+#define WINED3DLOCK_DONOTWAIT (0x4000)
+
+#define WINED3DLOCK_NO_DIRTY_UPDATE (0x8000)
+
+#define WINED3DPRESENT_RATE_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_ONE (0x1)
+
+#define WINED3DPRESENT_INTERVAL_TWO (0x2)
+
+#define WINED3DPRESENT_INTERVAL_THREE (0x4)
+
+#define WINED3DPRESENT_INTERVAL_FOUR (0x8)
+
+#define WINED3DPRESENT_INTERVAL_IMMEDIATE (0x80000000)
+
+#define WINED3DMAXUSERCLIPPLANES (32)
+
+#define WINED3DCLIPPLANE0 (1 << 0)
+
+#define WINED3DCLIPPLANE1 (1 << 1)
+
+#define WINED3DCLIPPLANE2 (1 << 2)
+
+#define WINED3DCLIPPLANE3 (1 << 3)
+
+#define WINED3DCLIPPLANE4 (1 << 4)
+
+#define WINED3DCLIPPLANE5 (1 << 5)
+
+#define WINED3DFVF_RESERVED0 (0x1)
+
+#define WINED3DFVF_POSITION_MASK (0x400e)
+
+#define WINED3DFVF_XYZ (0x2)
+
+#define WINED3DFVF_XYZRHW (0x4)
+
+#define WINED3DFVF_XYZB1 (0x6)
+
+#define WINED3DFVF_XYZB2 (0x8)
+
+#define WINED3DFVF_XYZB3 (0xa)
+
+#define WINED3DFVF_XYZB4 (0xc)
+
+#define WINED3DFVF_XYZB5 (0xe)
+
+#define WINED3DFVF_XYZW (0x4002)
+
+#define WINED3DFVF_NORMAL (0x10)
+
+#define WINED3DFVF_PSIZE (0x20)
+
+#define WINED3DFVF_DIFFUSE (0x40)
+
+#define WINED3DFVF_SPECULAR (0x80)
+
+#define WINED3DFVF_TEXCOUNT_MASK (0xf00)
+
+#define WINED3DFVF_TEXCOUNT_SHIFT (8)
+
+#define WINED3DFVF_TEX0 (0x0)
+
+#define WINED3DFVF_TEX1 (0x100)
+
+#define WINED3DFVF_TEX2 (0x200)
+
+#define WINED3DFVF_TEX3 (0x300)
+
+#define WINED3DFVF_TEX4 (0x400)
+
+#define WINED3DFVF_TEX5 (0x500)
+
+#define WINED3DFVF_TEX6 (0x600)
+
+#define WINED3DFVF_TEX7 (0x700)
+
+#define WINED3DFVF_TEX8 (0x800)
+
+#define WINED3DFVF_LASTBETA_UBYTE4 (0x1000)
+
+#define WINED3DFVF_LASTBETA_D3DCOLOR (0x8000)
+
+#define WINED3DFVF_RESERVED2 (0x6000)
+
+#define WINED3DFVF_TEXTUREFORMAT1 (3)
+
+#define WINED3DFVF_TEXTUREFORMAT2 (0)
+
+#define WINED3DFVF_TEXTUREFORMAT3 (1)
+
+#define WINED3DFVF_TEXTUREFORMAT4 (2)
+
+#define WINED3DFVF_TEXCOORDSIZE1(CoordIndex) (WINED3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE2(CoordIndex) (WINED3DFVF_TEXTUREFORMAT2)
+#define WINED3DFVF_TEXCOORDSIZE3(CoordIndex) (WINED3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE4(CoordIndex) (WINED3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define WINED3DCLEAR_TARGET (0x1)
+
+#define WINED3DCLEAR_ZBUFFER (0x2)
+
+#define WINED3DCLEAR_STENCIL (0x4)
+
+#define WINED3DSTREAMSOURCE_INDEXEDDATA (1 << 30)
+
+#define WINED3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define WINED3DSPD_IUNKNOWN (0x1)
+
+#define WINED3DCREATE_FPU_PRESERVE (0x2)
+
+#define WINED3DCREATE_PUREDEVICE (0x10)
+
+#define WINED3DCREATE_SOFTWARE_VERTEXPROCESSING (0x20)
+
+#define WINED3DCREATE_HARDWARE_VERTEXPROCESSING (0x40)
+
+#define WINED3DCREATE_MIXED_VERTEXPROCESSING (0x80)
+
+#define WINED3DCREATE_DISABLE_DRIVER_MANAGEMENT (0x100)
+
+#define WINED3DCREATE_ADAPTERGROUP_DEVICE (0x200)
+
+#define WINED3DDMAPSAMPLER (0x100)
+
+#define WINED3DVERTEXTEXTURESAMPLER0 (WINED3DDMAPSAMPLER + 1)
+
+#define WINED3DVERTEXTEXTURESAMPLER1 (WINED3DDMAPSAMPLER + 2)
+
+#define WINED3DVERTEXTEXTURESAMPLER2 (WINED3DDMAPSAMPLER + 3)
+
+#define WINED3DVERTEXTEXTURESAMPLER3 (WINED3DDMAPSAMPLER + 4)
+
+#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD (0x20)
+
+#define WINED3DCAPS3_LINEAR_TO_SRGB_PRESENTATION (0x80)
+
+#define WINED3DCAPS3_COPY_TO_VIDMEM (0x100)
+
+#define WINED3DCAPS3_COPY_TO_SYSTEMMEM (0x200)
+
+#define WINED3DCAPS3_RESERVED (0x8000001f)
+
+#define WINED3DDEVCAPS2_STREAMOFFSET (0x1)
+
+#define WINED3DDEVCAPS2_DMAPNPATCH (0x2)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSRTPATCH (0x4)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSNPATCH (0x8)
+
+#define WINED3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (0x10)
+
+#define WINED3DDEVCAPS2_PRESAMPLEDDMAPNPATCH (0x20)
+
+#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET (0x40)
+
+#define WINED3DDTCAPS_UBYTE4 (0x1)
+
+#define WINED3DDTCAPS_UBYTE4N (0x2)
+
+#define WINED3DDTCAPS_SHORT2N (0x4)
+
+#define WINED3DDTCAPS_SHORT4N (0x8)
+
+#define WINED3DDTCAPS_USHORT2N (0x10)
+
+#define WINED3DDTCAPS_USHORT4N (0x20)
+
+#define WINED3DDTCAPS_UDEC3 (0x40)
+
+#define WINED3DDTCAPS_DEC3N (0x80)
+
+#define WINED3DDTCAPS_FLOAT16_2 (0x100)
+
+#define WINED3DDTCAPS_FLOAT16_4 (0x200)
+
+#define WINED3DFVFCAPS_TEXCOORDCOUNTMASK (0xffff)
+
+#define WINED3DFVFCAPS_DONOTSTRIPELEMENTS (0x80000)
+
+#define WINED3DFVFCAPS_PSIZE (0x100000)
+
+#define WINED3DLINECAPS_TEXTURE (0x1)
+
+#define WINED3DLINECAPS_ZTEST (0x2)
+
+#define WINED3DLINECAPS_BLEND (0x4)
+
+#define WINED3DLINECAPS_ALPHACMP (0x8)
+
+#define WINED3DLINECAPS_FOG (0x10)
+
+#define WINED3DLINECAPS_ANTIALIAS (0x20)
+
+#define WINED3DMAX30SHADERINSTRUCTIONS (32768)
+
+#define WINED3DMIN30SHADERINSTRUCTIONS (512)
+
+#define WINED3DPBLENDCAPS_ZERO (0x1)
+
+#define WINED3DPBLENDCAPS_ONE (0x2)
+
+#define WINED3DPBLENDCAPS_SRCCOLOR (0x4)
+
+#define WINED3DPBLENDCAPS_INVSRCCOLOR (0x8)
+
+#define WINED3DPBLENDCAPS_SRCALPHA (0x10)
+
+#define WINED3DPBLENDCAPS_INVSRCALPHA (0x20)
+
+#define WINED3DPBLENDCAPS_DESTALPHA (0x40)
+
+#define WINED3DPBLENDCAPS_INVDESTALPHA (0x80)
+
+#define WINED3DPBLENDCAPS_DESTCOLOR (0x100)
+
+#define WINED3DPBLENDCAPS_INVDESTCOLOR (0x200)
+
+#define WINED3DPBLENDCAPS_SRCALPHASAT (0x400)
+
+#define WINED3DPBLENDCAPS_BOTHSRCALPHA (0x800)
+
+#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA (0x1000)
+
+#define WINED3DPBLENDCAPS_BLENDFACTOR (0x2000)
+
+#define WINED3DPCMPCAPS_NEVER (0x1)
+
+#define WINED3DPCMPCAPS_LESS (0x2)
+
+#define WINED3DPCMPCAPS_EQUAL (0x4)
+
+#define WINED3DPCMPCAPS_LESSEQUAL (0x8)
+
+#define WINED3DPCMPCAPS_GREATER (0x10)
+
+#define WINED3DPCMPCAPS_NOTEQUAL (0x20)
+
+#define WINED3DPCMPCAPS_GREATEREQUAL (0x40)
+
+#define WINED3DPCMPCAPS_ALWAYS (0x80)
+
+#define WINED3DPMISCCAPS_MASKZ (0x2)
+
+#define WINED3DPMISCCAPS_LINEPATTERNREP (0x4)
+
+#define WINED3DPMISCCAPS_CULLNONE (0x10)
+
+#define WINED3DPMISCCAPS_CULLCW (0x20)
+
+#define WINED3DPMISCCAPS_CULLCCW (0x40)
+
+#define WINED3DPMISCCAPS_COLORWRITEENABLE (0x80)
+
+#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS (0x100)
+
+#define WINED3DPMISCCAPS_CLIPTLVERTS (0x200)
+
+#define WINED3DPMISCCAPS_TSSARGTEMP (0x400)
+
+#define WINED3DPMISCCAPS_BLENDOP (0x800)
+
+#define WINED3DPMISCCAPS_NULLREFERENCE (0x1000)
+
+#define WINED3DPMISCCAPS_INDEPENDENTWRITEMASKS (0x4000)
+
+#define WINED3DPMISCCAPS_PERSTAGECONSTANT (0x8000)
+
+#define WINED3DPMISCCAPS_FOGANDSPECULARALPHA (0x10000)
+
+#define WINED3DPMISCCAPS_SEPARATEALPHABLEND (0x20000)
+
+#define WINED3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS (0x40000)
+
+#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING (0x80000)
+
+#define WINED3DPMISCCAPS_FOGVERTEXCLAMPED (0x100000)
+
+#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMTEMPS (32)
+
+#define WINED3DPS20_MIN_NUMTEMPS (12)
+
+#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS (512)
+
+#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS (96)
+
+#define WINED3DPS20CAPS_ARBITRARYSWIZZLE (0x1)
+
+#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS (0x2)
+
+#define WINED3DPS20CAPS_PREDICATION (0x4)
+
+#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT (0x8)
+
+#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (0x10)
+
+#define WINED3DPTADDRESSCAPS_WRAP (0x1)
+
+#define WINED3DPTADDRESSCAPS_MIRROR (0x2)
+
+#define WINED3DPTADDRESSCAPS_CLAMP (0x4)
+
+#define WINED3DPTADDRESSCAPS_BORDER (0x8)
+
+#define WINED3DPTADDRESSCAPS_INDEPENDENTUV (0x10)
+
+#define WINED3DPTADDRESSCAPS_MIRRORONCE (0x20)
+
+#define WINED3DSTENCILCAPS_KEEP (0x1)
+
+#define WINED3DSTENCILCAPS_ZERO (0x2)
+
+#define WINED3DSTENCILCAPS_REPLACE (0x4)
+
+#define WINED3DSTENCILCAPS_INCRSAT (0x8)
+
+#define WINED3DSTENCILCAPS_DECRSAT (0x10)
+
+#define WINED3DSTENCILCAPS_INVERT (0x20)
+
+#define WINED3DSTENCILCAPS_INCR (0x40)
+
+#define WINED3DSTENCILCAPS_DECR (0x80)
+
+#define WINED3DSTENCILCAPS_TWOSIDED (0x100)
+
+#define WINED3DTEXOPCAPS_DISABLE (0x1)
+
+#define WINED3DTEXOPCAPS_SELECTARG1 (0x2)
+
+#define WINED3DTEXOPCAPS_SELECTARG2 (0x4)
+
+#define WINED3DTEXOPCAPS_MODULATE (0x8)
+
+#define WINED3DTEXOPCAPS_MODULATE2X (0x10)
+
+#define WINED3DTEXOPCAPS_MODULATE4X (0x20)
+
+#define WINED3DTEXOPCAPS_ADD (0x40)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED (0x80)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED2X (0x100)
+
+#define WINED3DTEXOPCAPS_SUBTRACT (0x200)
+
+#define WINED3DTEXOPCAPS_ADDSMOOTH (0x400)
+
+#define WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA (0x800)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHA (0x1000)
+
+#define WINED3DTEXOPCAPS_BLENDFACTORALPHA (0x2000)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM (0x4000)
+
+#define WINED3DTEXOPCAPS_BLENDCURRENTALPHA (0x8000)
+
+#define WINED3DTEXOPCAPS_PREMODULATE (0x10000)
+
+#define WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR (0x20000)
+
+#define WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA (0x40000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR (0x80000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA (0x100000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAP (0x200000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE (0x400000)
+
+#define WINED3DTEXOPCAPS_DOTPRODUCT3 (0x800000)
+
+#define WINED3DTEXOPCAPS_MULTIPLYADD (0x1000000)
+
+#define WINED3DTEXOPCAPS_LERP (0x2000000)
+
+#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DVS20_MAX_NUMTEMPS (32)
+
+#define WINED3DVS20_MIN_NUMTEMPS (12)
+
+#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DVS20_MIN_STATICFLOWCONTROLDEPTH (1)
+
+#define WINED3DVS20CAPS_PREDICATION (0x1)
+
+#define WINED3DCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINED3DCAPS2_FULLSCREENGAMMA (0x20000)
+
+#define WINED3DCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINED3DCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINED3DCAPS2_RESERVED (0x2000000)
+
+#define WINED3DCAPS2_CANMANAGERESOURCE (0x10000000)
+
+#define WINED3DCAPS2_DYNAMICTEXTURES (0x20000000)
+
+#define WINED3DCAPS2_CANAUTOGENMIPMAP (0x40000000)
+
+#define WINED3DPRASTERCAPS_DITHER (0x1)
+
+#define WINED3DPRASTERCAPS_ROP2 (0x2)
+
+#define WINED3DPRASTERCAPS_XOR (0x4)
+
+#define WINED3DPRASTERCAPS_PAT (0x8)
+
+#define WINED3DPRASTERCAPS_ZTEST (0x10)
+
+#define WINED3DPRASTERCAPS_SUBPIXEL (0x20)
+
+#define WINED3DPRASTERCAPS_SUBPIXELX (0x40)
+
+#define WINED3DPRASTERCAPS_FOGVERTEX (0x80)
+
+#define WINED3DPRASTERCAPS_FOGTABLE (0x100)
+
+#define WINED3DPRASTERCAPS_STIPPLE (0x200)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTDEPENDENT (0x400)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT (0x800)
+
+#define WINED3DPRASTERCAPS_ANTIALIASEDGES (0x1000)
+
+#define WINED3DPRASTERCAPS_MIPMAPLODBIAS (0x2000)
+
+#define WINED3DPRASTERCAPS_ZBIAS (0x4000)
+
+#define WINED3DPRASTERCAPS_ZBUFFERLESSHSR (0x8000)
+
+#define WINED3DPRASTERCAPS_FOGRANGE (0x10000)
+
+#define WINED3DPRASTERCAPS_ANISOTROPY (0x20000)
+
+#define WINED3DPRASTERCAPS_WBUFFER (0x40000)
+
+#define WINED3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT (0x80000)
+
+#define WINED3DPRASTERCAPS_WFOG (0x100000)
+
+#define WINED3DPRASTERCAPS_ZFOG (0x200000)
+
+#define WINED3DPRASTERCAPS_COLORPERSPECTIVE (0x400000)
+
+#define WINED3DPRASTERCAPS_SCISSORTEST (0x1000000)
+
+#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS (0x2000000)
+
+#define WINED3DPRASTERCAPS_DEPTHBIAS (0x4000000)
+
+#define WINED3DPRASTERCAPS_MULTISAMPLE_TOGGLE (0x8000000)
+
+#define WINED3DPSHADECAPS_COLORFLATMONO (0x1)
+
+#define WINED3DPSHADECAPS_COLORFLATRGB (0x2)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDMONO (0x4)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDRGB (0x8)
+
+#define WINED3DPSHADECAPS_COLORPHONGMONO (0x10)
+
+#define WINED3DPSHADECAPS_COLORPHONGRGB (0x20)
+
+#define WINED3DPSHADECAPS_SPECULARFLATMONO (0x40)
+
+#define WINED3DPSHADECAPS_SPECULARFLATRGB (0x80)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDMONO (0x100)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB (0x200)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGMONO (0x400)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGRGB (0x800)
+
+#define WINED3DPSHADECAPS_ALPHAFLATBLEND (0x1000)
+
+#define WINED3DPSHADECAPS_ALPHAFLATSTIPPLED (0x2000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND (0x4000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDSTIPPLED (0x8000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGBLEND (0x10000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGSTIPPLED (0x20000)
+
+#define WINED3DPSHADECAPS_FOGFLAT (0x40000)
+
+#define WINED3DPSHADECAPS_FOGGOURAUD (0x80000)
+
+#define WINED3DPSHADECAPS_FOGPHONG (0x100000)
+
+#define WINED3DPTEXTURECAPS_PERSPECTIVE (0x1)
+
+#define WINED3DPTEXTURECAPS_POW2 (0x2)
+
+#define WINED3DPTEXTURECAPS_ALPHA (0x4)
+
+#define WINED3DPTEXTURECAPS_TRANSPARENCY (0x8)
+
+#define WINED3DPTEXTURECAPS_BORDER (0x10)
+
+#define WINED3DPTEXTURECAPS_SQUAREONLY (0x20)
+
+#define WINED3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE (0x40)
+
+#define WINED3DPTEXTURECAPS_ALPHAPALETTE (0x80)
+
+#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL (0x100)
+
+#define WINED3DPTEXTURECAPS_PROJECTED (0x400)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP (0x800)
+
+#define WINED3DPTEXTURECAPS_COLORKEYBLEND (0x1000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP (0x2000)
+
+#define WINED3DPTEXTURECAPS_MIPMAP (0x4000)
+
+#define WINED3DPTEXTURECAPS_MIPVOLUMEMAP (0x8000)
+
+#define WINED3DPTEXTURECAPS_MIPCUBEMAP (0x10000)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP_POW2 (0x20000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP_POW2 (0x40000)
+
+#define WINED3DPTEXTURECAPS_NOPROJECTEDBUMPENV (0x200000)
+
+#define WINED3DPTFILTERCAPS_NEAREST (0x1)
+
+#define WINED3DPTFILTERCAPS_LINEAR (0x2)
+
+#define WINED3DPTFILTERCAPS_MIPNEAREST (0x4)
+
+#define WINED3DPTFILTERCAPS_MIPLINEAR (0x8)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST (0x10)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR (0x20)
+
+#define WINED3DPTFILTERCAPS_MINFPOINT (0x100)
+
+#define WINED3DPTFILTERCAPS_MINFLINEAR (0x200)
+
+#define WINED3DPTFILTERCAPS_MINFANISOTROPIC (0x400)
+
+#define WINED3DPTFILTERCAPS_MIPFPOINT (0x10000)
+
+#define WINED3DPTFILTERCAPS_MIPFLINEAR (0x20000)
+
+#define WINED3DPTFILTERCAPS_MAGFPOINT (0x1000000)
+
+#define WINED3DPTFILTERCAPS_MAGFLINEAR (0x2000000)
+
+#define WINED3DPTFILTERCAPS_MAGFANISOTROPIC (0x4000000)
+
+#define WINED3DPTFILTERCAPS_MAGFPYRAMIDALQUAD (0x8000000)
+
+#define WINED3DPTFILTERCAPS_MAGFGAUSSIANQUAD (0x10000000)
+
+#define WINED3DVTXPCAPS_TEXGEN (0x1)
+
+#define WINED3DVTXPCAPS_MATERIALSOURCE7 (0x2)
+
+#define WINED3DVTXPCAPS_VERTEXFOG (0x4)
+
+#define WINED3DVTXPCAPS_DIRECTIONALLIGHTS (0x8)
+
+#define WINED3DVTXPCAPS_POSITIONALLIGHTS (0x10)
+
+#define WINED3DVTXPCAPS_LOCALVIEWER (0x20)
+
+#define WINED3DVTXPCAPS_TWEENING (0x40)
+
+#define WINED3DVTXPCAPS_TEXGEN_SPHEREMAP (0x100)
+
+#define WINED3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER (0x200)
+
+#define WINED3DCURSORCAPS_COLOR (0x1)
+
+#define WINED3DCURSORCAPS_LOWRES (0x2)
+
+#define WINED3DDEVCAPS_FLOATTLVERTEX (0x1)
+
+#define WINED3DDEVCAPS_SORTINCREASINGZ (0x2)
+
+#define WINED3DDEVCAPS_SORTDECREASINGZ (0x4)
+
+#define WINED3DDEVCAPS_SORTEXACT (0x8)
+
+#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY (0x10)
+
+#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY (0x20)
+
+#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY (0x40)
+
+#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY (0x80)
+
+#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY (0x100)
+
+#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY (0x200)
+
+#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX (0x400)
+
+#define WINED3DDEVCAPS_CANRENDERAFTERFLIP (0x800)
+
+#define WINED3DDEVCAPS_TEXTURENONLOCALVIDMEM (0x1000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2 (0x2000)
+
+#define WINED3DDEVCAPS_SEPARATETEXTUREMEMORIES (0x4000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX (0x8000)
+
+#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT (0x10000)
+
+#define WINED3DDEVCAPS_CANBLTSYSTONONLOCAL (0x20000)
+
+#define WINED3DDEVCAPS_HWRASTERIZATION (0x80000)
+
+#define WINED3DDEVCAPS_PUREDEVICE (0x100000)
+
+#define WINED3DDEVCAPS_QUINTICRTPATCHES (0x200000)
+
+#define WINED3DDEVCAPS_RTPATCHES (0x400000)
+
+#define WINED3DDEVCAPS_RTPATCHHANDLEZERO (0x800000)
+
+#define WINED3DDEVCAPS_NPATCHES (0x1000000)
+
+#define WINEDDBLTFX_ARITHSTRETCHY (0x1)
+
+#define WINEDDBLTFX_MIRRORLEFTRIGHT (0x2)
+
+#define WINEDDBLTFX_MIRRORUPDOWN (0x4)
+
+#define WINEDDBLTFX_NOTEARING (0x8)
+
+#define WINEDDBLTFX_ROTATE180 (0x10)
+
+#define WINEDDBLTFX_ROTATE270 (0x20)
+
+#define WINEDDBLTFX_ROTATE90 (0x40)
+
+#define WINEDDBLTFX_ZBUFFERRANGE (0x80)
+
+#define WINEDDBLTFX_ZBUFFERBASEDEST (0x100)
+
+#define WINEDDBLT_ALPHADEST (0x1)
+
+#define WINEDDBLT_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDBLT_ALPHADESTNEG (0x4)
+
+#define WINEDDBLT_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDBLT_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDBLT_ALPHASRC (0x20)
+
+#define WINEDDBLT_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDBLT_ALPHASRCNEG (0x80)
+
+#define WINEDDBLT_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDBLT_ASYNC (0x200)
+
+#define WINEDDBLT_COLORFILL (0x400)
+
+#define WINEDDBLT_DDFX (0x800)
+
+#define WINEDDBLT_DDROPS (0x1000)
+
+#define WINEDDBLT_KEYDEST (0x2000)
+
+#define WINEDDBLT_KEYDESTOVERRIDE (0x4000)
+
+#define WINEDDBLT_KEYSRC (0x8000)
+
+#define WINEDDBLT_KEYSRCOVERRIDE (0x10000)
+
+#define WINEDDBLT_ROP (0x20000)
+
+#define WINEDDBLT_ROTATIONANGLE (0x40000)
+
+#define WINEDDBLT_ZBUFFER (0x80000)
+
+#define WINEDDBLT_ZBUFFERDESTCONSTOVERRIDE (0x100000)
+
+#define WINEDDBLT_ZBUFFERDESTOVERRIDE (0x200000)
+
+#define WINEDDBLT_ZBUFFERSRCCONSTOVERRIDE (0x400000)
+
+#define WINEDDBLT_ZBUFFERSRCOVERRIDE (0x800000)
+
+#define WINEDDBLT_WAIT (0x1000000)
+
+#define WINEDDBLT_DEPTHFILL (0x2000000)
+
+#define WINEDDBLT_DONOTWAIT (0x8000000)
+
+#define WINEDDBLTFAST_NOCOLORKEY (0x0)
+
+#define WINEDDBLTFAST_SRCCOLORKEY (0x1)
+
+#define WINEDDBLTFAST_DESTCOLORKEY (0x2)
+
+#define WINEDDBLTFAST_WAIT (0x10)
+
+#define WINEDDBLTFAST_DONOTWAIT (0x20)
+
+#define WINEDDSD_CAPS (0x1)
+
+#define WINEDDSD_HEIGHT (0x2)
+
+#define WINEDDSD_WIDTH (0x4)
+
+#define WINEDDSD_PITCH (0x8)
+
+#define WINEDDSD_BACKBUFFERCOUNT (0x20)
+
+#define WINEDDSD_ZBUFFERBITDEPTH (0x40)
+
+#define WINEDDSD_ALPHABITDEPTH (0x80)
+
+#define WINEDDSD_LPSURFACE (0x800)
+
+#define WINEDDSD_PIXELFORMAT (0x1000)
+
+#define WINEDDSD_CKDESTOVERLAY (0x2000)
+
+#define WINEDDSD_CKDESTBLT (0x4000)
+
+#define WINEDDSD_CKSRCOVERLAY (0x8000)
+
+#define WINEDDSD_CKSRCBLT (0x10000)
+
+#define WINEDDSD_MIPMAPCOUNT (0x20000)
+
+#define WINEDDSD_REFRESHRATE (0x40000)
+
+#define WINEDDSD_LINEARSIZE (0x80000)
+
+#define WINEDDSD_TEXTURESTAGE (0x100000)
+
+#define WINEDDSD_FVF (0x200000)
+
+#define WINEDDSD_SRCVBHANDLE (0x400000)
+
+#define WINEDDSD_ALL (0x7ff9ee)
+
+#define WINEDDCKEY_COLORSPACE (0x1)
+
+#define WINEDDCKEY_DESTBLT (0x2)
+
+#define WINEDDCKEY_DESTOVERLAY (0x4)
+
+#define WINEDDCKEY_SRCBLT (0x8)
+
+#define WINEDDCKEY_SRCOVERLAY (0x10)
+
+#define WINEDDGBS_CANBLT (0x1)
+
+#define WINEDDGBS_ISBLTDONE (0x2)
+
+#define WINEDDGFS_CANFLIP (0x1)
+
+#define WINEDDGFS_ISFLIPDONE (0x2)
+
+#define WINEDDFLIP_WAIT (0x1)
+
+#define WINEDDFLIP_EVEN (0x2)
+
+#define WINEDDFLIP_ODD (0x4)
+
+#define WINEDDFLIP_NOVSYNC (0x8)
+
+#define WINEDDFLIP_STEREO (0x10)
+
+#define WINEDDFLIP_DONOTWAIT (0x20)
+
+#define WINEDDFLIP_INTERVAL2 (0x2000000)
+
+#define WINEDDFLIP_INTERVAL3 (0x3000000)
+
+#define WINEDDFLIP_INTERVAL4 (0x4000000)
+
+#define WINEDDOVER_ALPHADEST (0x1)
+
+#define WINEDDOVER_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDOVER_ALPHADESTNEG (0x4)
+
+#define WINEDDOVER_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDOVER_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDOVER_ALPHASRC (0x20)
+
+#define WINEDDOVER_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDOVER_ALPHASRCNEG (0x80)
+
+#define WINEDDOVER_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDOVER_HIDE (0x200)
+
+#define WINEDDOVER_KEYDEST (0x400)
+
+#define WINEDDOVER_KEYDESTOVERRIDE (0x800)
+
+#define WINEDDOVER_KEYSRC (0x1000)
+
+#define WINEDDOVER_KEYSRCOVERRIDE (0x2000)
+
+#define WINEDDOVER_SHOW (0x4000)
+
+#define WINEDDOVER_ADDDIRTYRECT (0x8000)
+
+#define WINEDDOVER_REFRESHDIRTYRECTS (0x10000)
+
+#define WINEDDOVER_REFRESHALL (0x20000)
+
+#define WINEDDOVER_DDFX (0x80000)
+
+#define WINEDDOVER_AUTOFLIP (0x100000)
+
+#define WINEDDOVER_BOB (0x200000)
+
+#define WINEDDOVER_OVERRIDEBOBWEAVE (0x400000)
+
+#define WINEDDOVER_INTERLEAVED (0x800000)
+
+#define WINEDDSCAPS_RESERVED1 (0x1)
+
+#define WINEDDSCAPS_ALPHA (0x2)
+
+#define WINEDDSCAPS_BACKBUFFER (0x4)
+
+#define WINEDDSCAPS_COMPLEX (0x8)
+
+#define WINEDDSCAPS_FLIP (0x10)
+
+#define WINEDDSCAPS_FRONTBUFFER (0x20)
+
+#define WINEDDSCAPS_OFFSCREENPLAIN (0x40)
+
+#define WINEDDSCAPS_OVERLAY (0x80)
+
+#define WINEDDSCAPS_PALETTE (0x100)
+
+#define WINEDDSCAPS_PRIMARYSURFACE (0x200)
+
+#define WINEDDSCAPS_PRIMARYSURFACELEFT (0x400)
+
+#define WINEDDSCAPS_SYSTEMMEMORY (0x800)
+
+#define WINEDDSCAPS_TEXTURE (0x1000)
+
+#define WINEDDSCAPS_3DDEVICE (0x2000)
+
+#define WINEDDSCAPS_VIDEOMEMORY (0x4000)
+
+#define WINEDDSCAPS_VISIBLE (0x8000)
+
+#define WINEDDSCAPS_WRITEONLY (0x10000)
+
+#define WINEDDSCAPS_ZBUFFER (0x20000)
+
+#define WINEDDSCAPS_OWNDC (0x40000)
+
+#define WINEDDSCAPS_LIVEVIDEO (0x80000)
+
+#define WINEDDSCAPS_HWCODEC (0x100000)
+
+#define WINEDDSCAPS_MODEX (0x200000)
+
+#define WINEDDSCAPS_MIPMAP (0x400000)
+
+#define WINEDDSCAPS_RESERVED2 (0x800000)
+
+#define WINEDDSCAPS_ALLOCONLOAD (0x4000000)
+
+#define WINEDDSCAPS_VIDEOPORT (0x8000000)
+
+#define WINEDDSCAPS_LOCALVIDMEM (0x10000000)
+
+#define WINEDDSCAPS_NONLOCALVIDMEM (0x20000000)
+
+#define WINEDDSCAPS_STANDARDVGAMODE (0x40000000)
+
+#define WINEDDSCAPS_OPTIMIZED (0x80000000)
+
+#define WINEDDCKEYCAPS_DESTBLT (0x1)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACE (0x2)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACEYUV (0x4)
+
+#define WINEDDCKEYCAPS_DESTBLTYUV (0x8)
+
+#define WINEDDCKEYCAPS_DESTOVERLAY (0x10)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACE (0x20)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACEYUV (0x40)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYONEACTIVE (0x80)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYYUV (0x100)
+
+#define WINEDDCKEYCAPS_SRCBLT (0x200)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACE (0x400)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACEYUV (0x800)
+
+#define WINEDDCKEYCAPS_SRCBLTYUV (0x1000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAY (0x2000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACE (0x4000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACEYUV (0x8000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYONEACTIVE (0x10000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYYUV (0x20000)
+
+#define WINEDDCKEYCAPS_NOCOSTOVERLAY (0x40000)
+
+#define WINEDDFXCAPS_BLTALPHA (0x1)
+
+#define WINEDDFXCAPS_OVERLAYALPHA (0x4)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHYN (0x10)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHY (0x20)
+
+#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT (0x40)
+
+#define WINEDDFXCAPS_BLTMIRRORUPDOWN (0x80)
+
+#define WINEDDFXCAPS_BLTROTATION (0x100)
+
+#define WINEDDFXCAPS_BLTROTATION90 (0x200)
+
+#define WINEDDFXCAPS_BLTSHRINKX (0x400)
+
+#define WINEDDFXCAPS_BLTSHRINKXN (0x800)
+
+#define WINEDDFXCAPS_BLTSHRINKY (0x1000)
+
+#define WINEDDFXCAPS_BLTSHRINKYN (0x2000)
+
+#define WINEDDFXCAPS_BLTSTRETCHX (0x4000)
+
+#define WINEDDFXCAPS_BLTSTRETCHXN (0x8000)
+
+#define WINEDDFXCAPS_BLTSTRETCHY (0x10000)
+
+#define WINEDDFXCAPS_BLTSTRETCHYN (0x20000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHY (0x40000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHYN (0x8)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKX (0x80000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKXN (0x100000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKY (0x200000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKYN (0x400000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHX (0x800000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHXN (0x1000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHY (0x2000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHYN (0x4000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORLEFTRIGHT (0x8000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORUPDOWN (0x10000000)
+
+#define WINEDDCAPS_3D (0x1)
+
+#define WINEDDCAPS_ALIGNBOUNDARYDEST (0x2)
+
+#define WINEDDCAPS_ALIGNSIZEDEST (0x4)
+
+#define WINEDDCAPS_ALIGNBOUNDARYSRC (0x8)
+
+#define WINEDDCAPS_ALIGNSIZESRC (0x10)
+
+#define WINEDDCAPS_ALIGNSTRIDE (0x20)
+
+#define WINEDDCAPS_BLT (0x40)
+
+#define WINEDDCAPS_BLTQUEUE (0x80)
+
+#define WINEDDCAPS_BLTFOURCC (0x100)
+
+#define WINEDDCAPS_BLTSTRETCH (0x200)
+
+#define WINEDDCAPS_GDI (0x400)
+
+#define WINEDDCAPS_OVERLAY (0x800)
+
+#define WINEDDCAPS_OVERLAYCANTCLIP (0x1000)
+
+#define WINEDDCAPS_OVERLAYFOURCC (0x2000)
+
+#define WINEDDCAPS_OVERLAYSTRETCH (0x4000)
+
+#define WINEDDCAPS_PALETTE (0x8000)
+
+#define WINEDDCAPS_PALETTEVSYNC (0x10000)
+
+#define WINEDDCAPS_READSCANLINE (0x20000)
+
+#define WINEDDCAPS_STEREOVIEW (0x40000)
+
+#define WINEDDCAPS_VBI (0x80000)
+
+#define WINEDDCAPS_ZBLTS (0x100000)
+
+#define WINEDDCAPS_ZOVERLAYS (0x200000)
+
+#define WINEDDCAPS_COLORKEY (0x400000)
+
+#define WINEDDCAPS_ALPHA (0x800000)
+
+#define WINEDDCAPS_COLORKEYHWASSIST (0x1000000)
+
+#define WINEDDCAPS_NOHARDWARE (0x2000000)
+
+#define WINEDDCAPS_BLTCOLORFILL (0x4000000)
+
+#define WINEDDCAPS_BANKSWITCHED (0x8000000)
+
+#define WINEDDCAPS_BLTDEPTHFILL (0x10000000)
+
+#define WINEDDCAPS_CANCLIP (0x20000000)
+
+#define WINEDDCAPS_CANCLIPSTRETCHED (0x40000000)
+
+#define WINEDDCAPS_CANBLTSYSMEM (0x80000000)
+
+#define WINEDDCAPS2_CERTIFIED (0x1)
+
+#define WINEDDCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINEDDCAPS2_VIDEOPORT (0x4)
+
+#define WINEDDCAPS2_AUTOFLIPOVERLAY (0x8)
+
+#define WINEDDCAPS2_CANBOBINTERLEAVED (0x10)
+
+#define WINEDDCAPS2_CANBOBNONINTERLEAVED (0x20)
+
+#define WINEDDCAPS2_COLORCONTROLOVERLAY (0x40)
+
+#define WINEDDCAPS2_COLORCONTROLPRIMARY (0x80)
+
+#define WINEDDCAPS2_CANDROPZ16BIT (0x100)
+
+#define WINEDDCAPS2_NONLOCALVIDMEM (0x200)
+
+#define WINEDDCAPS2_NONLOCALVIDMEMCAPS (0x400)
+
+#define WINEDDCAPS2_NOPAGELOCKREQUIRED (0x800)
+
+#define WINEDDCAPS2_WIDESURFACES (0x1000)
+
+#define WINEDDCAPS2_CANFLIPODDEVEN (0x2000)
+
+#define WINEDDCAPS2_CANBOBHARDWARE (0x4000)
+
+#define WINEDDCAPS2_COPYFOURCC (0x8000)
+
+#define WINEDDCAPS2_PRIMARYGAMMA (0x20000)
+
+#define WINEDDCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINEDDCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINEDDCAPS2_FLIPINTERVAL (0x200000)
+
+#define WINEDDCAPS2_FLIPNOVSYNC (0x400000)
+
+#define WINEDDCAPS2_CANMANAGETEXTURE (0x800000)
+
+#define WINEDDCAPS2_TEXMANINNONLOCALVIDMEM (0x1000000)
+
+#define WINEDDCAPS2_STEREO (0x2000000)
+
+#define WINEDDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL (0x4000000)
+
+#define WINEDDPCAPS_4BIT (0x1)
+
+#define WINEDDPCAPS_8BITENTRIES (0x2)
+
+#define WINEDDPCAPS_8BIT (0x4)
+
+#define WINEDDPCAPS_INITIALIZE (0x8)
+
+#define WINEDDPCAPS_PRIMARYSURFACE (0x10)
+
+#define WINEDDPCAPS_PRIMARYSURFACELEFT (0x20)
+
+#define WINEDDPCAPS_ALLOW256 (0x40)
+
+#define WINEDDPCAPS_VSYNC (0x80)
+
+#define WINEDDPCAPS_1BIT (0x100)
+
+#define WINEDDPCAPS_2BIT (0x200)
+
+#define WINEDDPCAPS_ALPHA (0x400)
+
+typedef struct _WINED3DDISPLAYMODE {
+    UINT Width;
+    UINT Height;
+    UINT RefreshRate;
+    WINED3DFORMAT Format;
+} WINED3DDISPLAYMODE;
+typedef enum _WINED3DSCANLINEORDERING {
+  WINED3DSCANLINEORDERING_UNKNOWN    = 0,
+  WINED3DSCANLINEORDERING_PROGRESSIVE   = 1,
+  WINED3DSCANLINEORDERING_INTERLACED    = 2
+} WINED3DSCANLINEORDERING;
+typedef struct _WINED3DDISPLAYMODEEX {
+    UINT Size;
+    UINT Width;
+    UINT Height;
+    UINT RefreshRate;
+    WINED3DFORMAT Format;
+    WINED3DSCANLINEORDERING ScanLineOrdering;
+} WINED3DDISPLAYMODEEX;
+typedef enum _WINED3DDISPLAYROTATION {
+  WINED3DDISPLAYROTATION_IDENTITY   = 1,
+  WINED3DDISPLAYROTATION_90         = 2,
+  WINED3DDISPLAYROTATION_180        = 3,
+  WINED3DDISPLAYROTATION_270        = 4
+} WINED3DDISPLAYROTATION;
+typedef struct _WINED3DCOLORVALUE {
+    float r;
+    float g;
+    float b;
+    float a;
+} WINED3DCOLORVALUE;
+typedef struct _WINED3DVECTOR {
+    float x;
+    float y;
+    float z;
+} WINED3DVECTOR;
+typedef struct _WINED3DMATRIX {
+    union {
+        struct {
+            float _11;
+            float _12;
+            float _13;
+            float _14;
+            float _21;
+            float _22;
+            float _23;
+            float _24;
+            float _31;
+            float _32;
+            float _33;
+            float _34;
+            float _41;
+            float _42;
+            float _43;
+            float _44;
+        } s;
+        float m[4][4];
+    } u;
+} WINED3DMATRIX;
+typedef struct _WINED3DRECT {
+    LONG x1;
+    LONG y1;
+    LONG x2;
+    LONG y2;
+} WINED3DRECT;
+typedef struct _WINED3DLIGHT {
+    WINED3DLIGHTTYPE Type;
+    WINED3DCOLORVALUE Diffuse;
+    WINED3DCOLORVALUE Specular;
+    WINED3DCOLORVALUE Ambient;
+    WINED3DVECTOR Position;
+    WINED3DVECTOR Direction;
+    float Range;
+    float Falloff;
+    float Attenuation0;
+    float Attenuation1;
+    float Attenuation2;
+    float Theta;
+    float Phi;
+} WINED3DLIGHT;
+typedef struct _WINED3DMATERIAL {
+    WINED3DCOLORVALUE Diffuse;
+    WINED3DCOLORVALUE Ambient;
+    WINED3DCOLORVALUE Specular;
+    WINED3DCOLORVALUE Emissive;
+    float Power;
+} WINED3DMATERIAL;
+typedef struct _WINED3DVIEWPORT {
+    DWORD X;
+    DWORD Y;
+    DWORD Width;
+    DWORD Height;
+    float MinZ;
+    float MaxZ;
+} WINED3DVIEWPORT;
+typedef struct _WINED3DGAMMARAMP {
+    WORD red[256];
+    WORD green[256];
+    WORD blue[256];
+} WINED3DGAMMARAMP;
+typedef struct _WINED3DLINEPATTERN {
+    WORD wRepeatFactor;
+    WORD wLinePattern;
+} WINED3DLINEPATTERN;
+typedef struct _WINEDD3DRECTPATCH_INFO {
+    UINT StartVertexOffsetWidth;
+    UINT StartVertexOffsetHeight;
+    UINT Width;
+    UINT Height;
+    UINT Stride;
+    WINED3DBASISTYPE Basis;
+    WINED3DDEGREETYPE Degree;
+} WINED3DRECTPATCH_INFO;
+typedef struct _WINED3DTRIPATCH_INFO {
+    UINT StartVertexOffset;
+    UINT NumVertices;
+    WINED3DBASISTYPE Basis;
+    WINED3DDEGREETYPE Degree;
+} WINED3DTRIPATCH_INFO;
+typedef struct _WINED3DADAPTER_IDENTIFIER {
+    char *driver;
+    UINT driver_size;
+    char *description;
+    UINT description_size;
+    char *device_name;
+    UINT device_name_size;
+    LARGE_INTEGER driver_version;
+    DWORD vendor_id;
+    DWORD device_id;
+    DWORD subsystem_id;
+    DWORD revision;
+    GUID device_identifier;
+    DWORD whql_level;
+    LUID adapter_luid;
+    SIZE_T video_memory;
+} WINED3DADAPTER_IDENTIFIER;
+typedef struct _WINED3DPRESENT_PARAMETERS {
+    UINT BackBufferWidth;
+    UINT BackBufferHeight;
+    WINED3DFORMAT BackBufferFormat;
+    UINT BackBufferCount;
+    WINED3DMULTISAMPLE_TYPE MultiSampleType;
+    DWORD MultiSampleQuality;
+    WINED3DSWAPEFFECT SwapEffect;
+    HWND hDeviceWindow;
+    BOOL Windowed;
+    BOOL EnableAutoDepthStencil;
+    WINED3DFORMAT AutoDepthStencilFormat;
+    DWORD Flags;
+    UINT FullScreen_RefreshRateInHz;
+    UINT PresentationInterval;
+    BOOL AutoRestoreDisplayMode;
+#ifdef VBOX_WITH_WDDM
+    struct VBOXUHGSMI *pHgsmi;
+#endif
+} WINED3DPRESENT_PARAMETERS;
+typedef struct _WINED3DSURFACE_DESC {
+    WINED3DFORMAT format;
+    WINED3DRESOURCETYPE resource_type;
+    DWORD usage;
+    WINED3DPOOL pool;
+    UINT size;
+    WINED3DMULTISAMPLE_TYPE multisample_type;
+    DWORD multisample_quality;
+    UINT width;
+    UINT height;
+} WINED3DSURFACE_DESC;
+typedef struct _WINED3DVOLUME_DESC {
+    WINED3DFORMAT Format;
+    WINED3DRESOURCETYPE Type;
+    DWORD Usage;
+    WINED3DPOOL Pool;
+    UINT Size;
+    UINT Width;
+    UINT Height;
+    UINT Depth;
+} WINED3DVOLUME_DESC;
+typedef struct _WINED3DCLIPSTATUS {
+    DWORD ClipUnion;
+    DWORD ClipIntersection;
+} WINED3DCLIPSTATUS;
+typedef struct _WINED3DVERTEXELEMENT {
+    WINED3DFORMAT format;
+    WORD input_slot;
+    WORD offset;
+    UINT output_slot;
+    BYTE method;
+    BYTE usage;
+    BYTE usage_idx;
+} WINED3DVERTEXELEMENT;
+typedef struct _WINED3DDEVICE_CREATION_PARAMETERS {
+    UINT AdapterOrdinal;
+    WINED3DDEVTYPE DeviceType;
+    HWND hFocusWindow;
+    DWORD BehaviorFlags;
+} WINED3DDEVICE_CREATION_PARAMETERS;
+typedef struct _WINED3DDEVINFO_BANDWIDTHTIMINGS {
+    float MaxBandwidthUtilized;
+    float FrontEndUploadMemoryUtilizedPercent;
+    float VertexRateUtilizedPercent;
+    float TriangleSetupRateUtilizedPercent;
+    float FillRateUtilizedPercent;
+} WINED3DDEVINFO_BANDWIDTHTIMINGS;
+typedef struct _WINED3DDEVINFO_CACHEUTILIZATION {
+    float TextureCacheHitRate;
+    float PostTransformVertexCacheHitRate;
+} WINED3DDEVINFO_CACHEUTILIZATION;
+typedef struct _WINED3DDEVINFO_INTERFACETIMINGS {
+    float WaitingForGPUToUseApplicationResourceTimePercent;
+    float WaitingForGPUToAcceptMoreCommandsTimePercent;
+    float WaitingForGPUToStayWithinLatencyTimePercent;
+    float WaitingForGPUExclusiveResourceTimePercent;
+    float WaitingForGPUOtherTimePercent;
+} WINED3DDEVINFO_INTERFACETIMINGS;
+typedef struct _WINED3DDEVINFO_PIPELINETIMINGS {
+    float VertexProcessingTimePercent;
+    float PixelProcessingTimePercent;
+    float OtherGPUProcessingTimePercent;
+    float GPUIdleTimePercent;
+} WINED3DDEVINFO_PIPELINETIMINGS;
+typedef struct _WINED3DDEVINFO_STAGETIMINGS {
+    float MemoryProcessingPercent;
+    float ComputationProcessingPercent;
+} WINED3DDEVINFO_STAGETIMINGS;
+typedef struct _WINED3DRASTER_STATUS {
+    BOOL InVBlank;
+    UINT ScanLine;
+} WINED3DRASTER_STATUS;
+typedef struct WINED3DRESOURCESTATS {
+    BOOL bThrashing;
+    DWORD ApproxBytesDownloaded;
+    DWORD NumEvicts;
+    DWORD NumVidCreates;
+    DWORD LastPri;
+    DWORD NumUsed;
+    DWORD NumUsedInVidMem;
+    DWORD WorkingSet;
+    DWORD WorkingSetBytes;
+    DWORD TotalManaged;
+    DWORD TotalBytes;
+} WINED3DRESOURCESTATS;
+typedef struct _WINED3DDEVINFO_RESOURCEMANAGER {
+    WINED3DRESOURCESTATS stats[7];
+} WINED3DDEVINFO_RESOURCEMANAGER;
+typedef struct _WINED3DDEVINFO_VERTEXSTATS {
+    DWORD NumRenderedTriangles;
+    DWORD NumExtraClippingTriangles;
+} WINED3DDEVINFO_VERTEXSTATS;
+typedef struct _WINED3DLOCKED_RECT {
+    INT Pitch;
+    void *pBits;
+} WINED3DLOCKED_RECT;
+typedef struct _WINED3DLOCKED_BOX {
+    INT RowPitch;
+    INT SlicePitch;
+    void *pBits;
+} WINED3DLOCKED_BOX;
+typedef struct _WINED3DBOX {
+    UINT Left;
+    UINT Top;
+    UINT Right;
+    UINT Bottom;
+    UINT Front;
+    UINT Back;
+} WINED3DBOX;
+typedef struct WINED3DDEVINFO_VCACHE {
+    DWORD Pattern;
+    DWORD OptMethod;
+    DWORD CacheSize;
+    DWORD MagicNumber;
+} WINED3DDEVINFO_VCACHE;
+typedef struct _WINED3DBUFFER_DESC {
+    WINED3DRESOURCETYPE Type;
+    DWORD Usage;
+    WINED3DPOOL Pool;
+    UINT Size;
+} WINED3DBUFFER_DESC;
+typedef struct WineDirect3DStridedData {
+    WINED3DFORMAT format;
+    const BYTE *lpData;
+    DWORD dwStride;
+} WineDirect3DStridedData;
+typedef struct WineDirect3DVertexStridedData {
+    WineDirect3DStridedData position;
+    WineDirect3DStridedData normal;
+    WineDirect3DStridedData diffuse;
+    WineDirect3DStridedData specular;
+    WineDirect3DStridedData texCoords[8];
+    BOOL position_transformed;
+} WineDirect3DVertexStridedData;
+typedef struct _WINED3DVSHADERCAPS2_0 {
+    DWORD Caps;
+    INT DynamicFlowControlDepth;
+    INT NumTemps;
+    INT StaticFlowControlDepth;
+} WINED3DVSHADERCAPS2_0;
+typedef struct _WINED3DPSHADERCAPS2_0 {
+    DWORD Caps;
+    INT DynamicFlowControlDepth;
+    INT NumTemps;
+    INT StaticFlowControlDepth;
+    INT NumInstructionSlots;
+} WINED3DPSHADERCAPS2_0;
+typedef struct _WINEDDCAPS {
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD CKeyCaps;
+    DWORD FXCaps;
+    DWORD FXAlphaCaps;
+    DWORD PalCaps;
+    DWORD SVCaps;
+    DWORD SVBCaps;
+    DWORD SVBCKeyCaps;
+    DWORD SVBFXCaps;
+    DWORD VSBCaps;
+    DWORD VSBCKeyCaps;
+    DWORD VSBFXCaps;
+    DWORD SSBCaps;
+    DWORD SSBCKeyCaps;
+    DWORD SSBFXCaps;
+    DWORD ddsCaps;
+    DWORD StrideAlign;
+} WINEDDCAPS;
+typedef struct _WINED3DCAPS {
+    WINED3DDEVTYPE DeviceType;
+    UINT AdapterOrdinal;
+    DWORD Caps;
+    DWORD Caps2;
+    DWORD Caps3;
+    DWORD PresentationIntervals;
+    DWORD CursorCaps;
+    DWORD DevCaps;
+    DWORD PrimitiveMiscCaps;
+    DWORD RasterCaps;
+    DWORD ZCmpCaps;
+    DWORD SrcBlendCaps;
+    DWORD DestBlendCaps;
+    DWORD AlphaCmpCaps;
+    DWORD ShadeCaps;
+    DWORD TextureCaps;
+    DWORD TextureFilterCaps;
+    DWORD CubeTextureFilterCaps;
+    DWORD VolumeTextureFilterCaps;
+    DWORD TextureAddressCaps;
+    DWORD VolumeTextureAddressCaps;
+    DWORD LineCaps;
+    DWORD MaxTextureWidth;
+    DWORD MaxTextureHeight;
+    DWORD MaxVolumeExtent;
+    DWORD MaxTextureRepeat;
+    DWORD MaxTextureAspectRatio;
+    DWORD MaxAnisotropy;
+    float MaxVertexW;
+    float GuardBandLeft;
+    float GuardBandTop;
+    float GuardBandRight;
+    float GuardBandBottom;
+    float ExtentsAdjust;
+    DWORD StencilCaps;
+    DWORD FVFCaps;
+    DWORD TextureOpCaps;
+    DWORD MaxTextureBlendStages;
+    DWORD MaxSimultaneousTextures;
+    DWORD VertexProcessingCaps;
+    DWORD MaxActiveLights;
+    DWORD MaxUserClipPlanes;
+    DWORD MaxVertexBlendMatrices;
+    DWORD MaxVertexBlendMatrixIndex;
+    float MaxPointSize;
+    DWORD MaxPrimitiveCount;
+    DWORD MaxVertexIndex;
+    DWORD MaxStreams;
+    DWORD MaxStreamStride;
+    DWORD VertexShaderVersion;
+    DWORD MaxVertexShaderConst;
+    DWORD PixelShaderVersion;
+    float PixelShader1xMaxValue;
+    DWORD DevCaps2;
+    float MaxNpatchTessellationLevel;
+    DWORD Reserved5;
+    UINT MasterAdapterOrdinal;
+    UINT AdapterOrdinalInGroup;
+    UINT NumberOfAdaptersInGroup;
+    DWORD DeclTypes;
+    DWORD NumSimultaneousRTs;
+    DWORD StretchRectFilterCaps;
+    WINED3DVSHADERCAPS2_0 VS20Caps;
+    WINED3DPSHADERCAPS2_0 PS20Caps;
+    DWORD VertexTextureFilterCaps;
+    DWORD MaxVShaderInstructionsExecuted;
+    DWORD MaxPShaderInstructionsExecuted;
+    DWORD MaxVertexShader30InstructionSlots;
+    DWORD MaxPixelShader30InstructionSlots;
+    DWORD Reserved2;
+    DWORD Reserved3;
+    WINEDDCAPS DirectDrawCaps;
+} WINED3DCAPS;
+typedef struct _WINEDDCOLORKEY {
+    DWORD dwColorSpaceLowValue;
+    DWORD dwColorSpaceHighValue;
+} WINEDDCOLORKEY;
+typedef struct _WINEDDCOLORKEY *LPWINEDDCOLORKEY;
+typedef struct _WINEDDBLTFX {
+    DWORD dwSize;
+    DWORD dwDDFX;
+    DWORD dwROP;
+    DWORD dwDDROP;
+    DWORD dwRotationAngle;
+    DWORD dwZBufferOpCode;
+    DWORD dwZBufferLow;
+    DWORD dwZBufferHigh;
+    DWORD dwZBufferBaseDest;
+    DWORD dwZDestConstBitDepth;
+    union {
+        DWORD dwZDestConst;
+        struct IWineD3DSurface *lpDDSZBufferDest;
+    } DUMMYUNIONNAME1;
+    DWORD dwZSrcConstBitDepth;
+    union {
+        DWORD dwZSrcConst;
+        struct IWineD3DSurface *lpDDSZBufferSrc;
+    } DUMMYUNIONNAME2;
+    DWORD dwAlphaEdgeBlendBitDepth;
+    DWORD dwAlphaEdgeBlend;
+    DWORD dwReserved;
+    DWORD dwAlphaDestConstBitDepth;
+    union {
+        DWORD dwAlphaDestConst;
+        struct IWineD3DSurface *lpDDSAlphaDest;
+    } DUMMYUNIONNAME3;
+    DWORD dwAlphaSrcConstBitDepth;
+    union {
+        DWORD dwAlphaSrcConst;
+        struct IWineD3DSurface *lpDDSAlphaSrc;
+    } DUMMYUNIONNAME4;
+    union {
+        DWORD dwFillColor;
+        DWORD dwFillDepth;
+        DWORD dwFillPixel;
+        struct IWineD3DSurface *lpDDSPattern;
+    } DUMMYUNIONNAME5;
+    WINEDDCOLORKEY ddckDestColorkey;
+    WINEDDCOLORKEY ddckSrcColorkey;
+} WINEDDBLTFX;
+typedef struct _WINEDDBLTFX *LPWINEDDBLTFX;
+typedef struct _WINEDDOVERLAYFX {
+    DWORD dwSize;
+    DWORD dwAlphaEdgeBlendBitDepth;
+    DWORD dwAlphaEdgeBlend;
+    DWORD dwReserved;
+    DWORD dwAlphaDestConstBitDepth;
+    union {
+        DWORD dwAlphaDestConst;
+        struct IWineD3DSurface *lpDDSAlphaDest;
+    } DUMMYUNIONNAME1;
+    DWORD dwAlphaSrcConstBitDepth;
+    union {
+        DWORD dwAlphaSrcConst;
+        struct IWineD3DSurface *lpDDSAlphaSrc;
+    } DUMMYUNIONNAME2;
+    WINEDDCOLORKEY dckDestColorkey;
+    WINEDDCOLORKEY dckSrcColorkey;
+    DWORD dwDDFX;
+    DWORD dwFlags;
+} WINEDDOVERLAYFX;
+struct wined3d_buffer_desc {
+    UINT byte_width;
+    DWORD usage;
+    UINT bind_flags;
+    UINT cpu_access_flags;
+    UINT misc_flags;
+};
+
+struct wined3d_shader_signature_element {
+    const char *semantic_name;
+    UINT semantic_idx;
+    enum wined3d_sysval_semantic sysval_semantic;
+    DWORD component_type;
+    UINT register_idx;
+    DWORD mask;
+};
+
+struct wined3d_shader_signature {
+    UINT element_count;
+    struct wined3d_shader_signature_element *elements;
+    char *string_data;
+};
+
+struct wined3d_parent_ops {
+    void (STDMETHODCALLTYPE *wined3d_object_destroyed)(void *parent);
+};
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDeviceParent interface
+ */
+#ifndef __IWineD3DDeviceParent_INTERFACE_DEFINED__
+#define __IWineD3DDeviceParent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDeviceParent, 0xaeb62dfc, 0xbdcb, 0x4f02, 0x95,0x19, 0x1e,0xee,0xa0,0x0c,0x15,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDeviceParent : public IUnknown
+{
+    virtual void STDMETHODCALLTYPE WineD3DDeviceCreated(
+        IWineD3DDevice *device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        DWORD usage,
+        WINED3DPOOL pool,
+        UINT level,
+        WINED3DCUBEMAP_FACES face,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRenderTarget(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL lockable,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilSurface(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL discard,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        UINT depth,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        DWORD usage,
+        IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain) = 0;
+
+};
+#else
+typedef struct IWineD3DDeviceParentVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DDeviceParent* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DDeviceParent* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DDeviceParent* This);
+
+    /*** IWineD3DDeviceParent methods ***/
+    void (STDMETHODCALLTYPE *WineD3DDeviceCreated)(
+        IWineD3DDeviceParent* This,
+        IWineD3DDevice *device);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        DWORD usage,
+        WINED3DPOOL pool,
+        UINT level,
+        WINED3DCUBEMAP_FACES face,
+        IWineD3DSurface **surface
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateRenderTarget)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL lockable,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDepthStencilSurface)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        BOOL discard,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+        IWineD3DDeviceParent* This,
+        IUnknown *superior,
+        UINT width,
+        UINT height,
+        UINT depth,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        DWORD usage,
+        IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+        IWineD3DDeviceParent* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain);
+
+    END_INTERFACE
+} IWineD3DDeviceParentVtbl;
+interface IWineD3DDeviceParent {
+    CONST_VTBL IWineD3DDeviceParentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDeviceParent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDeviceParent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDeviceParent_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DDeviceParent methods ***/
+#define IWineD3DDeviceParent_WineD3DDeviceCreated(This,device) (This)->lpVtbl->WineD3DDeviceCreated(This,device)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface)
+#endif
+#define IWineD3DDeviceParent_CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface) (This)->lpVtbl->CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface)
+#define IWineD3DDeviceParent_CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface) (This)->lpVtbl->CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume)
+#endif
+#define IWineD3DDeviceParent_CreateSwapChain(This,present_parameters,swapchain) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DDeviceParent_WineD3DDeviceCreated_Proxy(
+    IWineD3DDeviceParent* This,
+    IWineD3DDevice *device);
+void __RPC_STUB IWineD3DDeviceParent_WineD3DDeviceCreated_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSurface_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    DWORD usage,
+    WINED3DPOOL pool,
+    UINT level,
+    WINED3DCUBEMAP_FACES face,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateRenderTarget_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    BOOL lockable,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateDepthStencilSurface_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    BOOL discard,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateVolume_Proxy(
+    IWineD3DDeviceParent* This,
+    IUnknown *superior,
+    UINT width,
+    UINT height,
+    UINT depth,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    DWORD usage,
+    IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DDeviceParent_CreateVolume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSwapChain_Proxy(
+    IWineD3DDeviceParent* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters,
+    IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDeviceParent_CreateSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DDeviceParent_INTERFACE_DEFINED__ */
+
+typedef ULONG (STDMETHODCALLTYPE *D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
+typedef HRESULT (STDMETHODCALLTYPE *D3DCB_ENUMRESOURCES)(IWineD3DResource *resource,void *pData);
+/*****************************************************************************
+ * IWineD3DBase interface
+ */
+#ifndef __IWineD3DBase_INTERFACE_DEFINED__
+#define __IWineD3DBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBase, 0x46799311, 0x8e0e, 0x40ce, 0xb2,0xec, 0xdd,0xb9,0x9f,0x18,0xfc,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBase : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetParent(
+        IUnknown **parent) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBase* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBase* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBase* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBase* This,
+        IUnknown **parent);
+
+    END_INTERFACE
+} IWineD3DBaseVtbl;
+interface IWineD3DBase {
+    CONST_VTBL IWineD3DBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBase_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBase_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBase_GetParent_Proxy(
+    IWineD3DBase* This,
+    IUnknown **parent);
+void __RPC_STUB IWineD3DBase_GetParent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3D interface
+ */
+#ifndef __IWineD3D_INTERFACE_DEFINED__
+#define __IWineD3D_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3D, 0x108f9c44, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3D : public IWineD3DBase
+{
+    virtual UINT STDMETHODCALLTYPE GetAdapterCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RegisterSoftwareDevice(
+        void *pInitializeFunction) = 0;
+
+    virtual HMONITOR STDMETHODCALLTYPE GetAdapterMonitor(
+        UINT adapter_idx) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetAdapterModeCount(
+        UINT adapter_idx,
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumAdapterModes(
+        UINT adapter_idx,
+        WINED3DFORMAT format,
+        UINT mode_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayMode(
+        UINT adapter_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayModeEx(
+        UINT adapter_idx,
+        WINED3DDISPLAYMODEEX *mode,
+        WINED3DDISPLAYROTATION *rotation) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAdapterIdentifier(
+        UINT adapter_idx,
+        DWORD flags,
+        WINED3DADAPTER_IDENTIFIER *identifier) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceMultiSampleType(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT surface_format,
+        BOOL windowed,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD *quality_levels) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDepthStencilMatch(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        WINED3DFORMAT render_target_format,
+        WINED3DFORMAT depth_stencil_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceType(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT display_format,
+        WINED3DFORMAT backbuffer_format,
+        BOOL windowed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormat(
+        UINT adaper_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        DWORD usage,
+        WINED3DRESOURCETYPE resource_type,
+        WINED3DFORMAT check_format,
+        WINED3DSURFTYPE surface_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormatConversion(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT source_format,
+        WINED3DFORMAT target_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DCAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        HWND focus_window,
+        DWORD behaviour_flags,
+        IUnknown *parent,
+        IWineD3DDeviceParent *device_parent,
+        IWineD3DDevice **device) = 0;
+
+};
+#else
+typedef struct IWineD3DVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3D* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3D* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3D* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3D* This,
+        IUnknown **parent);
+
+    /*** IWineD3D methods ***/
+    UINT (STDMETHODCALLTYPE *GetAdapterCount)(
+        IWineD3D* This);
+
+    HRESULT (STDMETHODCALLTYPE *RegisterSoftwareDevice)(
+        IWineD3D* This,
+        void *pInitializeFunction);
+
+    HMONITOR (STDMETHODCALLTYPE *GetAdapterMonitor)(
+        IWineD3D* This,
+        UINT adapter_idx);
+
+    UINT (STDMETHODCALLTYPE *GetAdapterModeCount)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *EnumAdapterModes)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DFORMAT format,
+        UINT mode_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayMode)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayModeEx)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDISPLAYMODEEX *mode,
+        WINED3DDISPLAYROTATION *rotation);
+
+    HRESULT (STDMETHODCALLTYPE *GetAdapterIdentifier)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        DWORD flags,
+        WINED3DADAPTER_IDENTIFIER *identifier);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceMultiSampleType)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT surface_format,
+        BOOL windowed,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD *quality_levels);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDepthStencilMatch)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        WINED3DFORMAT render_target_format,
+        WINED3DFORMAT depth_stencil_format);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceType)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT display_format,
+        WINED3DFORMAT backbuffer_format,
+        BOOL windowed);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceFormat)(
+        IWineD3D* This,
+        UINT adaper_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT adapter_format,
+        DWORD usage,
+        WINED3DRESOURCETYPE resource_type,
+        WINED3DFORMAT check_format,
+        WINED3DSURFTYPE surface_type);
+
+    HRESULT (STDMETHODCALLTYPE *CheckDeviceFormatConversion)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DFORMAT source_format,
+        WINED3DFORMAT target_format);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        WINED3DCAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
+        IWineD3D* This,
+        UINT adapter_idx,
+        WINED3DDEVTYPE device_type,
+        HWND focus_window,
+        DWORD behaviour_flags,
+        IUnknown *parent,
+        IWineD3DDeviceParent *device_parent,
+        IWineD3DDevice **device);
+
+    END_INTERFACE
+} IWineD3DVtbl;
+interface IWineD3D {
+    CONST_VTBL IWineD3DVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3D_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3D_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3D_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3D_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3D methods ***/
+#define IWineD3D_GetAdapterCount(This) (This)->lpVtbl->GetAdapterCount(This)
+#define IWineD3D_RegisterSoftwareDevice(This,pInitializeFunction) (This)->lpVtbl->RegisterSoftwareDevice(This,pInitializeFunction)
+#define IWineD3D_GetAdapterMonitor(This,adapter_idx) (This)->lpVtbl->GetAdapterMonitor(This,adapter_idx)
+#define IWineD3D_GetAdapterModeCount(This,adapter_idx,format) (This)->lpVtbl->GetAdapterModeCount(This,adapter_idx,format)
+#define IWineD3D_EnumAdapterModes(This,adapter_idx,format,mode_idx,mode) (This)->lpVtbl->EnumAdapterModes(This,adapter_idx,format,mode_idx,mode)
+#define IWineD3D_GetAdapterDisplayMode(This,adapter_idx,mode) (This)->lpVtbl->GetAdapterDisplayMode(This,adapter_idx,mode)
+#define IWineD3D_GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation) (This)->lpVtbl->GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation)
+#define IWineD3D_GetAdapterIdentifier(This,adapter_idx,flags,identifier) (This)->lpVtbl->GetAdapterIdentifier(This,adapter_idx,flags,identifier)
+#define IWineD3D_CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels) (This)->lpVtbl->CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels)
+#define IWineD3D_CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format) (This)->lpVtbl->CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format)
+#define IWineD3D_CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed) (This)->lpVtbl->CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed)
+#define IWineD3D_CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type) (This)->lpVtbl->CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type)
+#define IWineD3D_CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format) (This)->lpVtbl->CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format)
+#define IWineD3D_GetDeviceCaps(This,adapter_idx,device_type,caps) (This)->lpVtbl->GetDeviceCaps(This,adapter_idx,device_type,caps)
+#define IWineD3D_CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device) (This)->lpVtbl->CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device)
+#endif
+
+#endif
+
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterCount_Proxy(
+    IWineD3D* This);
+void __RPC_STUB IWineD3D_GetAdapterCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_RegisterSoftwareDevice_Proxy(
+    IWineD3D* This,
+    void *pInitializeFunction);
+void __RPC_STUB IWineD3D_RegisterSoftwareDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HMONITOR STDMETHODCALLTYPE IWineD3D_GetAdapterMonitor_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx);
+void __RPC_STUB IWineD3D_GetAdapterMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterModeCount_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3D_GetAdapterModeCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_EnumAdapterModes_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DFORMAT format,
+    UINT mode_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_EnumAdapterModes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayMode_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_GetAdapterDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayModeEx_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDISPLAYMODEEX *mode,
+    WINED3DDISPLAYROTATION *rotation);
+void __RPC_STUB IWineD3D_GetAdapterDisplayModeEx_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterIdentifier_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    DWORD flags,
+    WINED3DADAPTER_IDENTIFIER *identifier);
+void __RPC_STUB IWineD3D_GetAdapterIdentifier_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceMultiSampleType_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT surface_format,
+    BOOL windowed,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD *quality_levels);
+void __RPC_STUB IWineD3D_CheckDeviceMultiSampleType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDepthStencilMatch_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT adapter_format,
+    WINED3DFORMAT render_target_format,
+    WINED3DFORMAT depth_stencil_format);
+void __RPC_STUB IWineD3D_CheckDepthStencilMatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceType_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT display_format,
+    WINED3DFORMAT backbuffer_format,
+    BOOL windowed);
+void __RPC_STUB IWineD3D_CheckDeviceType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormat_Proxy(
+    IWineD3D* This,
+    UINT adaper_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT adapter_format,
+    DWORD usage,
+    WINED3DRESOURCETYPE resource_type,
+    WINED3DFORMAT check_format,
+    WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3D_CheckDeviceFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormatConversion_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DFORMAT source_format,
+    WINED3DFORMAT target_format);
+void __RPC_STUB IWineD3D_CheckDeviceFormatConversion_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetDeviceCaps_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    WINED3DCAPS *caps);
+void __RPC_STUB IWineD3D_GetDeviceCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CreateDevice_Proxy(
+    IWineD3D* This,
+    UINT adapter_idx,
+    WINED3DDEVTYPE device_type,
+    HWND focus_window,
+    DWORD behaviour_flags,
+    IUnknown *parent,
+    IWineD3DDeviceParent *device_parent,
+    IWineD3DDevice **device);
+void __RPC_STUB IWineD3D_CreateDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3D_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DResource interface
+ */
+#ifndef __IWineD3DResource_INTERFACE_DEFINED__
+#define __IWineD3DResource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DResource, 0x1f3bfb34, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DResource : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
+        REFGUID guid,
+        void *data,
+        DWORD *data_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FreePrivateData(
+        REFGUID guid) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE SetPriority(
+        DWORD new_priority) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetPriority(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE PreLoad(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE UnLoad(
+        ) = 0;
+
+    virtual WINED3DRESOURCETYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DResourceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DResource* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DResource* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DResource* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DResource* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DResource* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DResource* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DResource* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DResource* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DResource* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DResource* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    END_INTERFACE
+} IWineD3DResourceVtbl;
+interface IWineD3DResource {
+    CONST_VTBL IWineD3DResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DResource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DResource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DResource_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DResource_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DResource_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DResource_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DResource_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DResource_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DResource_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DResource_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DResource_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DResource_GetType(This) (This)->lpVtbl->GetType(This)
+# ifdef VBOX_WITH_WDDM
+#  define IWineD3DResource_SetShRcState(This, enmState) (This)->lpVtbl->SetShRcState(This, enmState)
+# endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DResource_SetPrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid,
+    const void *data,
+    DWORD data_size,
+    DWORD flags);
+void __RPC_STUB IWineD3DResource_SetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_GetPrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid,
+    void *data,
+    DWORD *data_size);
+void __RPC_STUB IWineD3DResource_GetPrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_FreePrivateData_Proxy(
+    IWineD3DResource* This,
+    REFGUID guid);
+void __RPC_STUB IWineD3DResource_FreePrivateData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_SetPriority_Proxy(
+    IWineD3DResource* This,
+    DWORD new_priority);
+void __RPC_STUB IWineD3DResource_SetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_GetPriority_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetPriority_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_PreLoad_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_PreLoad_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_UnLoad_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_UnLoad_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DRESOURCETYPE STDMETHODCALLTYPE IWineD3DResource_GetType_Proxy(
+    IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DResource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DRendertargetView interface
+ */
+#ifndef __IWineD3DRendertargetView_INTERFACE_DEFINED__
+#define __IWineD3DRendertargetView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DRendertargetView, 0xf7d8abf4, 0xfb93, 0x43e4, 0x9c,0x96, 0x46,0x18,0xcf,0x9b,0x3c,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DRendertargetView : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetResource(
+        IWineD3DResource **resource) = 0;
+
+};
+#else
+typedef struct IWineD3DRendertargetViewVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DRendertargetView* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DRendertargetView* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DRendertargetView* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DRendertargetView* This,
+        IUnknown **parent);
+
+    /*** IWineD3DRendertargetView methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetResource)(
+        IWineD3DRendertargetView* This,
+        IWineD3DResource **resource);
+
+    END_INTERFACE
+} IWineD3DRendertargetViewVtbl;
+interface IWineD3DRendertargetView {
+    CONST_VTBL IWineD3DRendertargetViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DRendertargetView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DRendertargetView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DRendertargetView_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DRendertargetView_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DRendertargetView methods ***/
+#define IWineD3DRendertargetView_GetResource(This,resource) (This)->lpVtbl->GetResource(This,resource)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DRendertargetView_GetResource_Proxy(
+    IWineD3DRendertargetView* This,
+    IWineD3DResource **resource);
+void __RPC_STUB IWineD3DRendertargetView_GetResource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DRendertargetView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPalette interface
+ */
+#ifndef __IWineD3DPalette_INTERFACE_DEFINED__
+#define __IWineD3DPalette_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPalette, 0xf756720c, 0x32b9, 0x4439, 0xb5,0xa3, 0x1d,0x6c,0x97,0x03,0x7d,0x9e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPalette : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetEntries(
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCaps(
+        DWORD *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEntries(
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        const PALETTEENTRY *entries) = 0;
+
+};
+#else
+typedef struct IWineD3DPaletteVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DPalette* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DPalette* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DPalette* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DPalette* This,
+        IUnknown **parent);
+
+    /*** IWineD3DPalette methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetEntries)(
+        IWineD3DPalette* This,
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *GetCaps)(
+        IWineD3DPalette* This,
+        DWORD *caps);
+
+    HRESULT (STDMETHODCALLTYPE *SetEntries)(
+        IWineD3DPalette* This,
+        DWORD flags,
+        DWORD start,
+        DWORD count,
+        const PALETTEENTRY *entries);
+
+    END_INTERFACE
+} IWineD3DPaletteVtbl;
+interface IWineD3DPalette {
+    CONST_VTBL IWineD3DPaletteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPalette_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPalette_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPalette_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPalette_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DPalette methods ***/
+#define IWineD3DPalette_GetEntries(This,flags,start,count,entries) (This)->lpVtbl->GetEntries(This,flags,start,count,entries)
+#define IWineD3DPalette_GetCaps(This,caps) (This)->lpVtbl->GetCaps(This,caps)
+#define IWineD3DPalette_SetEntries(This,flags,start,count,entries) (This)->lpVtbl->SetEntries(This,flags,start,count,entries)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetEntries_Proxy(
+    IWineD3DPalette* This,
+    DWORD flags,
+    DWORD start,
+    DWORD count,
+    PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_GetEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetCaps_Proxy(
+    IWineD3DPalette* This,
+    DWORD *caps);
+void __RPC_STUB IWineD3DPalette_GetCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_SetEntries_Proxy(
+    IWineD3DPalette* This,
+    DWORD flags,
+    DWORD start,
+    DWORD count,
+    const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_SetEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DPalette_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DClipper interface
+ */
+#ifndef __IWineD3DClipper_INTERFACE_DEFINED__
+#define __IWineD3DClipper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DClipper, 0x8f2bceb1, 0xd338, 0x488c, 0xab,0x7f, 0x0e,0xc9,0x80,0xbf,0x5d,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DClipper : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetClipList(
+        const RECT *rect,
+        RGNDATA *clip_list,
+        DWORD *clip_list_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHWnd(
+        HWND *hwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsClipListChanged(
+        BOOL *changed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipList(
+        const RGNDATA *clip_list,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHWnd(
+        DWORD flags,
+        HWND hwnd) = 0;
+
+};
+#else
+typedef struct IWineD3DClipperVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DClipper* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DClipper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DClipper* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DClipper* This,
+        IUnknown **parent);
+
+    /*** IWineD3DClipper methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClipList)(
+        IWineD3DClipper* This,
+        const RECT *rect,
+        RGNDATA *clip_list,
+        DWORD *clip_list_size);
+
+    HRESULT (STDMETHODCALLTYPE *GetHWnd)(
+        IWineD3DClipper* This,
+        HWND *hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *IsClipListChanged)(
+        IWineD3DClipper* This,
+        BOOL *changed);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipList)(
+        IWineD3DClipper* This,
+        const RGNDATA *clip_list,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetHWnd)(
+        IWineD3DClipper* This,
+        DWORD flags,
+        HWND hwnd);
+
+    END_INTERFACE
+} IWineD3DClipperVtbl;
+interface IWineD3DClipper {
+    CONST_VTBL IWineD3DClipperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DClipper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DClipper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DClipper_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DClipper_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DClipper methods ***/
+#define IWineD3DClipper_GetClipList(This,rect,clip_list,clip_list_size) (This)->lpVtbl->GetClipList(This,rect,clip_list,clip_list_size)
+#define IWineD3DClipper_GetHWnd(This,hwnd) (This)->lpVtbl->GetHWnd(This,hwnd)
+#define IWineD3DClipper_IsClipListChanged(This,changed) (This)->lpVtbl->IsClipListChanged(This,changed)
+#define IWineD3DClipper_SetClipList(This,clip_list,flags) (This)->lpVtbl->SetClipList(This,clip_list,flags)
+#define IWineD3DClipper_SetHWnd(This,flags,hwnd) (This)->lpVtbl->SetHWnd(This,flags,hwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetClipList_Proxy(
+    IWineD3DClipper* This,
+    const RECT *rect,
+    RGNDATA *clip_list,
+    DWORD *clip_list_size);
+void __RPC_STUB IWineD3DClipper_GetClipList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetHWnd_Proxy(
+    IWineD3DClipper* This,
+    HWND *hwnd);
+void __RPC_STUB IWineD3DClipper_GetHWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_IsClipListChanged_Proxy(
+    IWineD3DClipper* This,
+    BOOL *changed);
+void __RPC_STUB IWineD3DClipper_IsClipListChanged_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetClipList_Proxy(
+    IWineD3DClipper* This,
+    const RGNDATA *clip_list,
+    DWORD flags);
+void __RPC_STUB IWineD3DClipper_SetClipList_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetHWnd_Proxy(
+    IWineD3DClipper* This,
+    DWORD flags,
+    HWND hwnd);
+void __RPC_STUB IWineD3DClipper_SetHWnd_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DClipper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSurface interface
+ */
+#ifndef __IWineD3DSurface_INTERFACE_DEFINED__
+#define __IWineD3DSurface_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSurface, 0x37cd5526, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSurface : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        REFIID riid,
+        void **container) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDC(
+        HDC *dc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
+        HDC dc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Flip(
+        IWineD3DSurface *override,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Blt(
+        const RECT *dst_rect,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD flags,
+        const WINEDDBLTFX *blt_fx,
+        WINED3DTEXTUREFILTERTYPE filter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBltStatus(
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFlipStatus(
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsLost(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Restore(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BltFast(
+        DWORD dst_x,
+        DWORD dst_y,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD trans) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPalette(
+        IWineD3DPalette **palette) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPalette(
+        IWineD3DPalette *palette) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RealizePalette(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetColorKey(
+        DWORD flags,
+        const WINEDDCOLORKEY *color_key) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetPitch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMem(
+        void *mem) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOverlayPosition(
+        LONG x,
+        LONG y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetOverlayPosition(
+        LONG *x,
+        LONG *y) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateOverlayZOrder(
+        DWORD flags,
+        IWineD3DSurface *ref) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateOverlay(
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const RECT *dst_rect,
+        DWORD flags,
+        const WINEDDOVERLAYFX *fx) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipper(
+        IWineD3DClipper *clipper) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipper(
+        IWineD3DClipper **clipper) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+        BOOL srgb_mode) = 0;
+
+    virtual void STDMETHODCALLTYPE BindTexture(
+        BOOL srgb) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SaveSnapshot(
+        const char *filename) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainer(
+        IWineD3DBase *container) = 0;
+
+    virtual const void * STDMETHODCALLTYPE GetData(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFormat(
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PrivateSetup(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE ModifyLocation(
+        DWORD location,
+        BOOL persistent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadLocation(
+        DWORD location,
+        const RECT *rect) = 0;
+
+    virtual WINED3DSURFTYPE STDMETHODCALLTYPE GetImplType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawOverlay(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DSurfaceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DSurface* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DSurface* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DSurface* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DSurface* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DSurface* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DSurface* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DSurface* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DSurface* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DSurface methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IWineD3DSurface* This,
+        REFIID riid,
+        void **container);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DSurface* This,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DSurface* This,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDC)(
+        IWineD3DSurface* This,
+        HDC *dc);
+
+    HRESULT (STDMETHODCALLTYPE *ReleaseDC)(
+        IWineD3DSurface* This,
+        HDC dc);
+
+    HRESULT (STDMETHODCALLTYPE *Flip)(
+        IWineD3DSurface* This,
+        IWineD3DSurface *override,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *Blt)(
+        IWineD3DSurface* This,
+        const RECT *dst_rect,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD flags,
+        const WINEDDBLTFX *blt_fx,
+        WINED3DTEXTUREFILTERTYPE filter);
+
+    HRESULT (STDMETHODCALLTYPE *GetBltStatus)(
+        IWineD3DSurface* This,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetFlipStatus)(
+        IWineD3DSurface* This,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *IsLost)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *Restore)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *BltFast)(
+        IWineD3DSurface* This,
+        DWORD dst_x,
+        DWORD dst_y,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        DWORD trans);
+
+    HRESULT (STDMETHODCALLTYPE *GetPalette)(
+        IWineD3DSurface* This,
+        IWineD3DPalette **palette);
+
+    HRESULT (STDMETHODCALLTYPE *SetPalette)(
+        IWineD3DSurface* This,
+        IWineD3DPalette *palette);
+
+    HRESULT (STDMETHODCALLTYPE *RealizePalette)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetColorKey)(
+        IWineD3DSurface* This,
+        DWORD flags,
+        const WINEDDCOLORKEY *color_key);
+
+    DWORD (STDMETHODCALLTYPE *GetPitch)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetMem)(
+        IWineD3DSurface* This,
+        void *mem);
+
+    HRESULT (STDMETHODCALLTYPE *SetOverlayPosition)(
+        IWineD3DSurface* This,
+        LONG x,
+        LONG y);
+
+    HRESULT (STDMETHODCALLTYPE *GetOverlayPosition)(
+        IWineD3DSurface* This,
+        LONG *x,
+        LONG *y);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateOverlayZOrder)(
+        IWineD3DSurface* This,
+        DWORD flags,
+        IWineD3DSurface *ref);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateOverlay)(
+        IWineD3DSurface* This,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const RECT *dst_rect,
+        DWORD flags,
+        const WINEDDOVERLAYFX *fx);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipper)(
+        IWineD3DSurface* This,
+        IWineD3DClipper *clipper);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipper)(
+        IWineD3DSurface* This,
+        IWineD3DClipper **clipper);
+
+    HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+        IWineD3DSurface* This,
+        BOOL srgb_mode);
+
+    void (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DSurface* This,
+        BOOL srgb);
+
+    HRESULT (STDMETHODCALLTYPE *SaveSnapshot)(
+        IWineD3DSurface* This,
+        const char *filename);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainer)(
+        IWineD3DSurface* This,
+        IWineD3DBase *container);
+
+    const void * (STDMETHODCALLTYPE *GetData)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetFormat)(
+        IWineD3DSurface* This,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *PrivateSetup)(
+        IWineD3DSurface* This);
+
+    void (STDMETHODCALLTYPE *ModifyLocation)(
+        IWineD3DSurface* This,
+        DWORD location,
+        BOOL persistent);
+
+    HRESULT (STDMETHODCALLTYPE *LoadLocation)(
+        IWineD3DSurface* This,
+        DWORD location,
+        const RECT *rect);
+
+    WINED3DSURFTYPE (STDMETHODCALLTYPE *GetImplType)(
+        IWineD3DSurface* This);
+
+    HRESULT (STDMETHODCALLTYPE *DrawOverlay)(
+        IWineD3DSurface* This);
+
+    END_INTERFACE
+} IWineD3DSurfaceVtbl;
+interface IWineD3DSurface {
+    CONST_VTBL IWineD3DSurfaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSurface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSurface_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSurface_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSurface_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DSurface_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DSurface_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DSurface_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DSurface_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DSurface_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DSurface_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DSurface_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DSurface_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DSurface methods ***/
+#define IWineD3DSurface_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DSurface_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DSurface_LockRect(This,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,locked_rect,rect,flags)
+#define IWineD3DSurface_UnlockRect(This) (This)->lpVtbl->UnlockRect(This)
+#define IWineD3DSurface_GetDC(This,dc) (This)->lpVtbl->GetDC(This,dc)
+#define IWineD3DSurface_ReleaseDC(This,dc) (This)->lpVtbl->ReleaseDC(This,dc)
+#define IWineD3DSurface_Flip(This,override,flags) (This)->lpVtbl->Flip(This,override,flags)
+#define IWineD3DSurface_Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter) (This)->lpVtbl->Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter)
+#define IWineD3DSurface_GetBltStatus(This,flags) (This)->lpVtbl->GetBltStatus(This,flags)
+#define IWineD3DSurface_GetFlipStatus(This,flags) (This)->lpVtbl->GetFlipStatus(This,flags)
+#define IWineD3DSurface_IsLost(This) (This)->lpVtbl->IsLost(This)
+#define IWineD3DSurface_Restore(This) (This)->lpVtbl->Restore(This)
+#define IWineD3DSurface_BltFast(This,dst_x,dst_y,src_surface,src_rect,trans) (This)->lpVtbl->BltFast(This,dst_x,dst_y,src_surface,src_rect,trans)
+#define IWineD3DSurface_GetPalette(This,palette) (This)->lpVtbl->GetPalette(This,palette)
+#define IWineD3DSurface_SetPalette(This,palette) (This)->lpVtbl->SetPalette(This,palette)
+#define IWineD3DSurface_RealizePalette(This) (This)->lpVtbl->RealizePalette(This)
+#define IWineD3DSurface_SetColorKey(This,flags,color_key) (This)->lpVtbl->SetColorKey(This,flags,color_key)
+#define IWineD3DSurface_GetPitch(This) (This)->lpVtbl->GetPitch(This)
+#define IWineD3DSurface_SetMem(This,mem) (This)->lpVtbl->SetMem(This,mem)
+#define IWineD3DSurface_SetOverlayPosition(This,x,y) (This)->lpVtbl->SetOverlayPosition(This,x,y)
+#define IWineD3DSurface_GetOverlayPosition(This,x,y) (This)->lpVtbl->GetOverlayPosition(This,x,y)
+#define IWineD3DSurface_UpdateOverlayZOrder(This,flags,ref) (This)->lpVtbl->UpdateOverlayZOrder(This,flags,ref)
+#define IWineD3DSurface_UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx) (This)->lpVtbl->UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx)
+#define IWineD3DSurface_SetClipper(This,clipper) (This)->lpVtbl->SetClipper(This,clipper)
+#define IWineD3DSurface_GetClipper(This,clipper) (This)->lpVtbl->GetClipper(This,clipper)
+#define IWineD3DSurface_LoadTexture(This,srgb_mode) (This)->lpVtbl->LoadTexture(This,srgb_mode)
+#define IWineD3DSurface_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DSurface_SaveSnapshot(This,filename) (This)->lpVtbl->SaveSnapshot(This,filename)
+#define IWineD3DSurface_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#define IWineD3DSurface_GetData(This) (This)->lpVtbl->GetData(This)
+#define IWineD3DSurface_SetFormat(This,format) (This)->lpVtbl->SetFormat(This,format)
+#define IWineD3DSurface_PrivateSetup(This) (This)->lpVtbl->PrivateSetup(This)
+#define IWineD3DSurface_ModifyLocation(This,location,persistent) (This)->lpVtbl->ModifyLocation(This,location,persistent)
+#define IWineD3DSurface_LoadLocation(This,location,rect) (This)->lpVtbl->LoadLocation(This,location,rect)
+#define IWineD3DSurface_GetImplType(This) (This)->lpVtbl->GetImplType(This)
+#define IWineD3DSurface_DrawOverlay(This) (This)->lpVtbl->DrawOverlay(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetContainer_Proxy(
+    IWineD3DSurface* This,
+    REFIID riid,
+    void **container);
+void __RPC_STUB IWineD3DSurface_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDesc_Proxy(
+    IWineD3DSurface* This,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DSurface_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LockRect_Proxy(
+    IWineD3DSurface* This,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UnlockRect_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDC_Proxy(
+    IWineD3DSurface* This,
+    HDC *dc);
+void __RPC_STUB IWineD3DSurface_GetDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_ReleaseDC_Proxy(
+    IWineD3DSurface* This,
+    HDC dc);
+void __RPC_STUB IWineD3DSurface_ReleaseDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Flip_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DSurface *override,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_Flip_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Blt_Proxy(
+    IWineD3DSurface* This,
+    const RECT *dst_rect,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    DWORD flags,
+    const WINEDDBLTFX *blt_fx,
+    WINED3DTEXTUREFILTERTYPE filter);
+void __RPC_STUB IWineD3DSurface_Blt_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetBltStatus_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetBltStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetFlipStatus_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetFlipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_IsLost_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_IsLost_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Restore_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_Restore_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_BltFast_Proxy(
+    IWineD3DSurface* This,
+    DWORD dst_x,
+    DWORD dst_y,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    DWORD trans);
+void __RPC_STUB IWineD3DSurface_BltFast_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetPalette_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DPalette **palette);
+void __RPC_STUB IWineD3DSurface_GetPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetPalette_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DPalette *palette);
+void __RPC_STUB IWineD3DSurface_SetPalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_RealizePalette_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_RealizePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetColorKey_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags,
+    const WINEDDCOLORKEY *color_key);
+void __RPC_STUB IWineD3DSurface_SetColorKey_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DSurface_GetPitch_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetPitch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetMem_Proxy(
+    IWineD3DSurface* This,
+    void *mem);
+void __RPC_STUB IWineD3DSurface_SetMem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetOverlayPosition_Proxy(
+    IWineD3DSurface* This,
+    LONG x,
+    LONG y);
+void __RPC_STUB IWineD3DSurface_SetOverlayPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetOverlayPosition_Proxy(
+    IWineD3DSurface* This,
+    LONG *x,
+    LONG *y);
+void __RPC_STUB IWineD3DSurface_GetOverlayPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlayZOrder_Proxy(
+    IWineD3DSurface* This,
+    DWORD flags,
+    IWineD3DSurface *ref);
+void __RPC_STUB IWineD3DSurface_UpdateOverlayZOrder_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlay_Proxy(
+    IWineD3DSurface* This,
+    const RECT *src_rect,
+    IWineD3DSurface *dst_surface,
+    const RECT *dst_rect,
+    DWORD flags,
+    const WINEDDOVERLAYFX *fx);
+void __RPC_STUB IWineD3DSurface_UpdateOverlay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetClipper_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DClipper *clipper);
+void __RPC_STUB IWineD3DSurface_SetClipper_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetClipper_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DClipper **clipper);
+void __RPC_STUB IWineD3DSurface_GetClipper_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadTexture_Proxy(
+    IWineD3DSurface* This,
+    BOOL srgb_mode);
+void __RPC_STUB IWineD3DSurface_LoadTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_BindTexture_Proxy(
+    IWineD3DSurface* This,
+    BOOL srgb);
+void __RPC_STUB IWineD3DSurface_BindTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SaveSnapshot_Proxy(
+    IWineD3DSurface* This,
+    const char *filename);
+void __RPC_STUB IWineD3DSurface_SaveSnapshot_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetContainer_Proxy(
+    IWineD3DSurface* This,
+    IWineD3DBase *container);
+void __RPC_STUB IWineD3DSurface_SetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+const void * STDMETHODCALLTYPE IWineD3DSurface_GetData_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetFormat_Proxy(
+    IWineD3DSurface* This,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3DSurface_SetFormat_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_PrivateSetup_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_PrivateSetup_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_ModifyLocation_Proxy(
+    IWineD3DSurface* This,
+    DWORD location,
+    BOOL persistent);
+void __RPC_STUB IWineD3DSurface_ModifyLocation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadLocation_Proxy(
+    IWineD3DSurface* This,
+    DWORD location,
+    const RECT *rect);
+void __RPC_STUB IWineD3DSurface_LoadLocation_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DSURFTYPE STDMETHODCALLTYPE IWineD3DSurface_GetImplType_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetImplType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_DrawOverlay_Proxy(
+    IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_DrawOverlay_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DSurface_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolume interface
+ */
+#ifndef __IWineD3DVolume_INTERFACE_DEFINED__
+#define __IWineD3DVolume_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolume, 0x24769ed8, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolume : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE GetContainer(
+        REFIID riid,
+        void **container) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DVOLUME_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockBox(
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+        int gl_level,
+        BOOL srgb_mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetContainer(
+        IWineD3DBase *container) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVolume* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVolume* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVolume* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVolume* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DVolume* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DVolume* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DVolume* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DVolume* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DVolume* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DVolume* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DVolume methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetContainer)(
+        IWineD3DVolume* This,
+        REFIID riid,
+        void **container);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DVolume* This,
+        WINED3DVOLUME_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *LockBox)(
+        IWineD3DVolume* This,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+        IWineD3DVolume* This);
+
+    HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+        IWineD3DVolume* This,
+        int gl_level,
+        BOOL srgb_mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetContainer)(
+        IWineD3DVolume* This,
+        IWineD3DBase *container);
+
+    END_INTERFACE
+} IWineD3DVolumeVtbl;
+interface IWineD3DVolume {
+    CONST_VTBL IWineD3DVolumeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolume_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolume_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolume_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolume_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolume_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolume_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolume_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolume_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolume_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolume_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DVolume methods ***/
+#define IWineD3DVolume_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DVolume_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DVolume_LockBox(This,locked_box,box,flags) (This)->lpVtbl->LockBox(This,locked_box,box,flags)
+#define IWineD3DVolume_UnlockBox(This) (This)->lpVtbl->UnlockBox(This)
+#define IWineD3DVolume_LoadTexture(This,gl_level,srgb_mode) (This)->lpVtbl->LoadTexture(This,gl_level,srgb_mode)
+#define IWineD3DVolume_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetContainer_Proxy(
+    IWineD3DVolume* This,
+    REFIID riid,
+    void **container);
+void __RPC_STUB IWineD3DVolume_GetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetDesc_Proxy(
+    IWineD3DVolume* This,
+    WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolume_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LockBox_Proxy(
+    IWineD3DVolume* This,
+    WINED3DLOCKED_BOX *locked_box,
+    const WINED3DBOX *box,
+    DWORD flags);
+void __RPC_STUB IWineD3DVolume_LockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_UnlockBox_Proxy(
+    IWineD3DVolume* This);
+void __RPC_STUB IWineD3DVolume_UnlockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LoadTexture_Proxy(
+    IWineD3DVolume* This,
+    int gl_level,
+    BOOL srgb_mode);
+void __RPC_STUB IWineD3DVolume_LoadTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_SetContainer_Proxy(
+    IWineD3DVolume* This,
+    IWineD3DBase *container);
+void __RPC_STUB IWineD3DVolume_SetContainer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVolume_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseTexture interface
+ */
+#ifndef __IWineD3DBaseTexture_INTERFACE_DEFINED__
+#define __IWineD3DBaseTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseTexture, 0x3c2aebf6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseTexture : public IWineD3DResource
+{
+    virtual DWORD STDMETHODCALLTYPE SetLOD(
+        DWORD new_lod) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetLOD(
+        ) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetLevelCount(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetAutoGenFilterType(
+        WINED3DTEXTUREFILTERTYPE filter_type) = 0;
+
+    virtual WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE GetAutoGenFilterType(
+        ) = 0;
+
+    virtual void STDMETHODCALLTYPE GenerateMipSubLevels(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE SetDirty(
+        BOOL dirty) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE GetDirty(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BindTexture(
+        BOOL srgb) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetTextureDimensions(
+        ) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE IsCondNP2(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBaseTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBaseTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBaseTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBaseTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DBaseTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DBaseTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DBaseTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DBaseTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DBaseTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DBaseTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DBaseTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DBaseTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DBaseTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DBaseTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DBaseTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DBaseTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DBaseTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DBaseTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DBaseTexture* This);
+
+    END_INTERFACE
+} IWineD3DBaseTextureVtbl;
+interface IWineD3DBaseTexture {
+    CONST_VTBL IWineD3DBaseTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBaseTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBaseTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBaseTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBaseTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBaseTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBaseTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBaseTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBaseTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DBaseTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DBaseTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DBaseTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DBaseTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DBaseTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DBaseTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DBaseTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DBaseTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DBaseTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DBaseTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DBaseTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_SetLOD_Proxy(
+    IWineD3DBaseTexture* This,
+    DWORD new_lod);
+void __RPC_STUB IWineD3DBaseTexture_SetLOD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLOD_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLOD_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLevelCount_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLevelCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_SetAutoGenFilterType_Proxy(
+    IWineD3DBaseTexture* This,
+    WINED3DTEXTUREFILTERTYPE filter_type);
+void __RPC_STUB IWineD3DBaseTexture_SetAutoGenFilterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE IWineD3DBaseTexture_GetAutoGenFilterType_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetAutoGenFilterType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DBaseTexture_GenerateMipSubLevels_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GenerateMipSubLevels_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_SetDirty_Proxy(
+    IWineD3DBaseTexture* This,
+    BOOL dirty);
+void __RPC_STUB IWineD3DBaseTexture_SetDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_GetDirty_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetDirty_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_BindTexture_Proxy(
+    IWineD3DBaseTexture* This,
+    BOOL srgb);
+void __RPC_STUB IWineD3DBaseTexture_BindTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DBaseTexture_GetTextureDimensions_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetTextureDimensions_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_IsCondNP2_Proxy(
+    IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_IsCondNP2_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBaseTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DTexture interface
+ */
+#ifndef __IWineD3DTexture_INTERFACE_DEFINED__
+#define __IWineD3DTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DTexture, 0x3e72cc1c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceLevel(
+        UINT level,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+        const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DTexture* This);
+
+    /*** IWineD3DTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DTexture* This,
+        UINT level,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceLevel)(
+        IWineD3DTexture* This,
+        UINT level,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DTexture* This,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DTexture* This,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+        IWineD3DTexture* This,
+        const RECT *dirty_rect);
+
+    END_INTERFACE
+} IWineD3DTextureVtbl;
+interface IWineD3DTexture {
+    CONST_VTBL IWineD3DTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DTexture methods ***/
+#define IWineD3DTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DTexture_GetSurfaceLevel(This,level,surface) (This)->lpVtbl->GetSurfaceLevel(This,level,surface)
+#define IWineD3DTexture_LockRect(This,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,level,locked_rect,rect,flags)
+#define IWineD3DTexture_UnlockRect(This,level) (This)->lpVtbl->UnlockRect(This,level)
+#define IWineD3DTexture_AddDirtyRect(This,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetLevelDesc_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetSurfaceLevel_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DTexture_GetSurfaceLevel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_LockRect_Proxy(
+    IWineD3DTexture* This,
+    UINT level,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DTexture_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_UnlockRect_Proxy(
+    IWineD3DTexture* This,
+    UINT level);
+void __RPC_STUB IWineD3DTexture_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_AddDirtyRect_Proxy(
+    IWineD3DTexture* This,
+    const RECT *dirty_rect);
+void __RPC_STUB IWineD3DTexture_AddDirtyRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DCubeTexture interface
+ */
+#ifndef __IWineD3DCubeTexture_INTERFACE_DEFINED__
+#define __IWineD3DCubeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DCubeTexture, 0x41752900, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DCubeTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DSURFACE_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCubeMapSurface(
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockRect(
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+        WINED3DCUBEMAP_FACES face,
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+        WINED3DCUBEMAP_FACES face,
+        const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DCubeTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DCubeTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DCubeTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DCubeTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DCubeTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DCubeTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DCubeTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DCubeTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DCubeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DCubeTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DCubeTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DCubeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DCubeTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DCubeTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DCubeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DCubeTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DCubeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DCubeTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DCubeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DCubeTexture* This);
+
+    /*** IWineD3DCubeTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DCubeTexture* This,
+        UINT level,
+        WINED3DSURFACE_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetCubeMapSurface)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *LockRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level,
+        WINED3DLOCKED_RECT *locked_rect,
+        const RECT *rect,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+        IWineD3DCubeTexture* This,
+        WINED3DCUBEMAP_FACES face,
+        const RECT *dirty_rect);
+
+    END_INTERFACE
+} IWineD3DCubeTextureVtbl;
+interface IWineD3DCubeTexture {
+    CONST_VTBL IWineD3DCubeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DCubeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DCubeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DCubeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DCubeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DCubeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DCubeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DCubeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DCubeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DCubeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DCubeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DCubeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DCubeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DCubeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DCubeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DCubeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DCubeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DCubeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DCubeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DCubeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DCubeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DCubeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DCubeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DCubeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DCubeTexture methods ***/
+#define IWineD3DCubeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DCubeTexture_GetCubeMapSurface(This,face,level,surface) (This)->lpVtbl->GetCubeMapSurface(This,face,level,surface)
+#define IWineD3DCubeTexture_LockRect(This,face,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,face,level,locked_rect,rect,flags)
+#define IWineD3DCubeTexture_UnlockRect(This,face,level) (This)->lpVtbl->UnlockRect(This,face,level)
+#define IWineD3DCubeTexture_AddDirtyRect(This,face,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,face,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetLevelDesc_Proxy(
+    IWineD3DCubeTexture* This,
+    UINT level,
+    WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DCubeTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetCubeMapSurface_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DCubeTexture_GetCubeMapSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_LockRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level,
+    WINED3DLOCKED_RECT *locked_rect,
+    const RECT *rect,
+    DWORD flags);
+void __RPC_STUB IWineD3DCubeTexture_LockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_UnlockRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    UINT level);
+void __RPC_STUB IWineD3DCubeTexture_UnlockRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_AddDirtyRect_Proxy(
+    IWineD3DCubeTexture* This,
+    WINED3DCUBEMAP_FACES face,
+    const RECT *dirty_rect);
+void __RPC_STUB IWineD3DCubeTexture_AddDirtyRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DCubeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture interface
+ */
+#ifndef __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+#define __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolumeTexture, 0x7b39470c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolumeTexture : public IWineD3DBaseTexture
+{
+    virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+        UINT level,
+        WINED3DVOLUME_DESC *desc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVolumeLevel(
+        UINT level,
+        IWineD3DVolume **volume) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LockBox(
+        UINT level,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+        UINT level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddDirtyBox(
+        const WINED3DBOX *dirty_box) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeTextureVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVolumeTexture* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVolumeTexture* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVolumeTexture* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVolumeTexture* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DVolumeTexture* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DVolumeTexture* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DVolumeTexture* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DVolumeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBaseTexture methods ***/
+    DWORD (STDMETHODCALLTYPE *SetLOD)(
+        IWineD3DVolumeTexture* This,
+        DWORD new_lod);
+
+    DWORD (STDMETHODCALLTYPE *GetLOD)(
+        IWineD3DVolumeTexture* This);
+
+    DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+        IWineD3DVolumeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+        IWineD3DVolumeTexture* This,
+        WINED3DTEXTUREFILTERTYPE filter_type);
+
+    WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+        IWineD3DVolumeTexture* This);
+
+    void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+        IWineD3DVolumeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *SetDirty)(
+        IWineD3DVolumeTexture* This,
+        BOOL dirty);
+
+    BOOL (STDMETHODCALLTYPE *GetDirty)(
+        IWineD3DVolumeTexture* This);
+
+    HRESULT (STDMETHODCALLTYPE *BindTexture)(
+        IWineD3DVolumeTexture* This,
+        BOOL srgb);
+
+    UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+        IWineD3DVolumeTexture* This);
+
+    BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+        IWineD3DVolumeTexture* This);
+
+    /*** IWineD3DVolumeTexture methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        WINED3DVOLUME_DESC *desc);
+
+    HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        IWineD3DVolume **volume);
+
+    HRESULT (STDMETHODCALLTYPE *LockBox)(
+        IWineD3DVolumeTexture* This,
+        UINT level,
+        WINED3DLOCKED_BOX *locked_box,
+        const WINED3DBOX *box,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+        IWineD3DVolumeTexture* This,
+        UINT level);
+
+    HRESULT (STDMETHODCALLTYPE *AddDirtyBox)(
+        IWineD3DVolumeTexture* This,
+        const WINED3DBOX *dirty_box);
+
+    END_INTERFACE
+} IWineD3DVolumeTextureVtbl;
+interface IWineD3DVolumeTexture {
+    CONST_VTBL IWineD3DVolumeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolumeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolumeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolumeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolumeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolumeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolumeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolumeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolumeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolumeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolumeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolumeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolumeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DVolumeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DVolumeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DVolumeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DVolumeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DVolumeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DVolumeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DVolumeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DVolumeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DVolumeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DVolumeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DVolumeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DVolumeTexture methods ***/
+#define IWineD3DVolumeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DVolumeTexture_GetVolumeLevel(This,level,volume) (This)->lpVtbl->GetVolumeLevel(This,level,volume)
+#define IWineD3DVolumeTexture_LockBox(This,level,locked_box,box,flags) (This)->lpVtbl->LockBox(This,level,locked_box,box,flags)
+#define IWineD3DVolumeTexture_UnlockBox(This,level) (This)->lpVtbl->UnlockBox(This,level)
+#define IWineD3DVolumeTexture_AddDirtyBox(This,dirty_box) (This)->lpVtbl->AddDirtyBox(This,dirty_box)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetLevelDesc_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolumeTexture_GetLevelDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetVolumeLevel_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DVolumeTexture_GetVolumeLevel_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_LockBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level,
+    WINED3DLOCKED_BOX *locked_box,
+    const WINED3DBOX *box,
+    DWORD flags);
+void __RPC_STUB IWineD3DVolumeTexture_LockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_UnlockBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    UINT level);
+void __RPC_STUB IWineD3DVolumeTexture_UnlockBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_AddDirtyBox_Proxy(
+    IWineD3DVolumeTexture* This,
+    const WINED3DBOX *dirty_box);
+void __RPC_STUB IWineD3DVolumeTexture_AddDirtyBox_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVolumeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration interface
+ */
+#ifndef __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+#define __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexDeclaration, 0x7cd55be6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexDeclaration : public IWineD3DBase
+{
+};
+#else
+typedef struct IWineD3DVertexDeclarationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVertexDeclaration* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVertexDeclaration* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVertexDeclaration* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVertexDeclaration* This,
+        IUnknown **parent);
+
+    END_INTERFACE
+} IWineD3DVertexDeclarationVtbl;
+interface IWineD3DVertexDeclaration {
+    CONST_VTBL IWineD3DVertexDeclarationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexDeclaration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexDeclaration_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexDeclaration_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexDeclaration_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DVertexDeclaration_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DStateBlock interface
+ */
+#ifndef __IWineD3DStateBlock_INTERFACE_DEFINED__
+#define __IWineD3DStateBlock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DStateBlock, 0x83b073ce, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DStateBlock : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE Capture(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Apply(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitStartupStateBlock(
+        ) = 0;
+
+};
+#else
+typedef struct IWineD3DStateBlockVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DStateBlock* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DStateBlock* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DStateBlock* This);
+
+    /*** IWineD3DStateBlock methods ***/
+    HRESULT (STDMETHODCALLTYPE *Capture)(
+        IWineD3DStateBlock* This);
+
+    HRESULT (STDMETHODCALLTYPE *Apply)(
+        IWineD3DStateBlock* This);
+
+    HRESULT (STDMETHODCALLTYPE *InitStartupStateBlock)(
+        IWineD3DStateBlock* This);
+
+    END_INTERFACE
+} IWineD3DStateBlockVtbl;
+interface IWineD3DStateBlock {
+    CONST_VTBL IWineD3DStateBlockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DStateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DStateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DStateBlock_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DStateBlock methods ***/
+#define IWineD3DStateBlock_Capture(This) (This)->lpVtbl->Capture(This)
+#define IWineD3DStateBlock_Apply(This) (This)->lpVtbl->Apply(This)
+#define IWineD3DStateBlock_InitStartupStateBlock(This) (This)->lpVtbl->InitStartupStateBlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Capture_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Capture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Apply_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Apply_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_InitStartupStateBlock_Proxy(
+    IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_InitStartupStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DStateBlock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DQuery interface
+ */
+#ifndef __IWineD3DQuery_INTERFACE_DEFINED__
+#define __IWineD3DQuery_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DQuery, 0x905ddbac, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DQuery : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetData(
+        void *data,
+        DWORD data_size,
+        DWORD flags) = 0;
+
+    virtual DWORD STDMETHODCALLTYPE GetDataSize(
+        ) = 0;
+
+    virtual WINED3DQUERYTYPE STDMETHODCALLTYPE GetType(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Issue(
+        DWORD flags) = 0;
+
+};
+#else
+typedef struct IWineD3DQueryVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DQuery* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DQuery* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DQuery* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DQuery* This,
+        IUnknown **parent);
+
+    /*** IWineD3DQuery methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetData)(
+        IWineD3DQuery* This,
+        void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    DWORD (STDMETHODCALLTYPE *GetDataSize)(
+        IWineD3DQuery* This);
+
+    WINED3DQUERYTYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DQuery* This);
+
+    HRESULT (STDMETHODCALLTYPE *Issue)(
+        IWineD3DQuery* This,
+        DWORD flags);
+
+    END_INTERFACE
+} IWineD3DQueryVtbl;
+interface IWineD3DQuery {
+    CONST_VTBL IWineD3DQueryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DQuery_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DQuery_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DQuery methods ***/
+#define IWineD3DQuery_GetData(This,data,data_size,flags) (This)->lpVtbl->GetData(This,data,data_size,flags)
+#define IWineD3DQuery_GetDataSize(This) (This)->lpVtbl->GetDataSize(This)
+#define IWineD3DQuery_GetType(This) (This)->lpVtbl->GetType(This)
+#define IWineD3DQuery_Issue(This,flags) (This)->lpVtbl->Issue(This,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_GetData_Proxy(
+    IWineD3DQuery* This,
+    void *data,
+    DWORD data_size,
+    DWORD flags);
+void __RPC_STUB IWineD3DQuery_GetData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DQuery_GetDataSize_Proxy(
+    IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetDataSize_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+WINED3DQUERYTYPE STDMETHODCALLTYPE IWineD3DQuery_GetType_Proxy(
+    IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_Issue_Proxy(
+    IWineD3DQuery* This,
+    DWORD flags);
+void __RPC_STUB IWineD3DQuery_Issue_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DQuery_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSwapChain interface
+ */
+#ifndef __IWineD3DSwapChain_INTERFACE_DEFINED__
+#define __IWineD3DSwapChain_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSwapChain, 0x34d01b10, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSwapChain : public IWineD3DBase
+{
+    virtual void STDMETHODCALLTYPE Destroy(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDevice(
+        IWineD3DDevice **device) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Present(
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDestWindowOverride(
+        HWND window) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+        IWineD3DSurface *dst_surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+        WINED3DRASTER_STATUS *raster_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPresentParameters(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGammaRamp(
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetGammaRamp(
+        WINED3DGAMMARAMP *ramp) = 0;
+
+};
+#else
+typedef struct IWineD3DSwapChainVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DSwapChain* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DSwapChain* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DSwapChain* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DSwapChain* This,
+        IUnknown **parent);
+
+    /*** IWineD3DSwapChain methods ***/
+    void (STDMETHODCALLTYPE *Destroy)(
+        IWineD3DSwapChain* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDevice)(
+        IWineD3DSwapChain* This,
+        IWineD3DDevice **device);
+
+    HRESULT (STDMETHODCALLTYPE *Present)(
+        IWineD3DSwapChain* This,
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *SetDestWindowOverride)(
+        IWineD3DSwapChain* This,
+        HWND window);
+
+    HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+        IWineD3DSwapChain* This,
+        IWineD3DSurface *dst_surface);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+        IWineD3DSwapChain* This,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+        IWineD3DSwapChain* This,
+        WINED3DRASTER_STATUS *raster_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+        IWineD3DSwapChain* This,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *GetPresentParameters)(
+        IWineD3DSwapChain* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetGammaRamp)(
+        IWineD3DSwapChain* This,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp);
+
+    HRESULT (STDMETHODCALLTYPE *GetGammaRamp)(
+        IWineD3DSwapChain* This,
+        WINED3DGAMMARAMP *ramp);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IWineD3DSwapChain* This);
+
+    HRESULT (STDMETHODCALLTYPE *PresentRt)(
+        IWineD3DSwapChain* This,
+        IWineD3DSurface* surf);
+#endif
+    END_INTERFACE
+} IWineD3DSwapChainVtbl;
+interface IWineD3DSwapChain {
+    CONST_VTBL IWineD3DSwapChainVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSwapChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSwapChain_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSwapChain_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSwapChain_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DSwapChain methods ***/
+#define IWineD3DSwapChain_Destroy(This) (This)->lpVtbl->Destroy(This)
+#define IWineD3DSwapChain_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#define IWineD3DSwapChain_Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags)
+#define IWineD3DSwapChain_SetDestWindowOverride(This,window) (This)->lpVtbl->SetDestWindowOverride(This,window)
+#define IWineD3DSwapChain_GetFrontBufferData(This,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,dst_surface)
+#define IWineD3DSwapChain_GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DSwapChain_GetRasterStatus(This,raster_status) (This)->lpVtbl->GetRasterStatus(This,raster_status)
+#define IWineD3DSwapChain_GetDisplayMode(This,mode) (This)->lpVtbl->GetDisplayMode(This,mode)
+#define IWineD3DSwapChain_GetPresentParameters(This,present_parameters) (This)->lpVtbl->GetPresentParameters(This,present_parameters)
+#define IWineD3DSwapChain_SetGammaRamp(This,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,flags,ramp)
+#define IWineD3DSwapChain_GetGammaRamp(This,ramp) (This)->lpVtbl->GetGammaRamp(This,ramp)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DSwapChain_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DSwapChain_PresentRt(This,surf) (This)->lpVtbl->PresentRt(This,surf)
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DSwapChain_Destroy_Proxy(
+    IWineD3DSwapChain* This);
+void __RPC_STUB IWineD3DSwapChain_Destroy_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDevice_Proxy(
+    IWineD3DSwapChain* This,
+    IWineD3DDevice **device);
+void __RPC_STUB IWineD3DSwapChain_GetDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_Present_Proxy(
+    IWineD3DSwapChain* This,
+    const RECT *src_rect,
+    const RECT *dst_rect,
+    HWND dst_window_override,
+    const RGNDATA *dirty_region,
+    DWORD flags);
+void __RPC_STUB IWineD3DSwapChain_Present_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetDestWindowOverride_Proxy(
+    IWineD3DSwapChain* This,
+    HWND window);
+void __RPC_STUB IWineD3DSwapChain_SetDestWindowOverride_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetFrontBufferData_Proxy(
+    IWineD3DSwapChain* This,
+    IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DSwapChain_GetFrontBufferData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetBackBuffer_Proxy(
+    IWineD3DSwapChain* This,
+    UINT backbuffer_idx,
+    WINED3DBACKBUFFER_TYPE backbuffer_type,
+    IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DSwapChain_GetBackBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetRasterStatus_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DSwapChain_GetRasterStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDisplayMode_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DSwapChain_GetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetPresentParameters_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DSwapChain_GetPresentParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetGammaRamp_Proxy(
+    IWineD3DSwapChain* This,
+    DWORD flags,
+    const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_SetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetGammaRamp_Proxy(
+    IWineD3DSwapChain* This,
+    WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_GetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DSwapChain_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBuffer interface
+ */
+#ifndef __IWineD3DBuffer_INTERFACE_DEFINED__
+#define __IWineD3DBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBuffer, 0xb3f028e8, 0x1a40, 0x4ab3, 0x92,0x92, 0x5b,0xf6,0xcf,0xd8,0x02,0x09);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBuffer : public IWineD3DResource
+{
+    virtual HRESULT STDMETHODCALLTYPE Map(
+        UINT offset,
+        UINT size,
+        BYTE **data,
+        DWORD flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Unmap(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDesc(
+        WINED3DBUFFER_DESC *desc) = 0;
+
+};
+#else
+typedef struct IWineD3DBufferVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBuffer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBuffer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBuffer* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBuffer* This,
+        IUnknown **parent);
+
+    /*** IWineD3DResource methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid,
+        const void *data,
+        DWORD data_size,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid,
+        void *data,
+        DWORD *data_size);
+
+    HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+        IWineD3DBuffer* This,
+        REFGUID guid);
+
+    DWORD (STDMETHODCALLTYPE *SetPriority)(
+        IWineD3DBuffer* This,
+        DWORD new_priority);
+
+    DWORD (STDMETHODCALLTYPE *GetPriority)(
+        IWineD3DBuffer* This);
+
+    void (STDMETHODCALLTYPE *PreLoad)(
+        IWineD3DBuffer* This);
+
+    void (STDMETHODCALLTYPE *UnLoad)(
+        IWineD3DBuffer* This);
+
+    WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+        IWineD3DBuffer* This);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+        IWineD3DResource* This,
+        VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+    /*** IWineD3DBuffer methods ***/
+    HRESULT (STDMETHODCALLTYPE *Map)(
+        IWineD3DBuffer* This,
+        UINT offset,
+        UINT size,
+        BYTE **data,
+        DWORD flags);
+
+    HRESULT (STDMETHODCALLTYPE *Unmap)(
+        IWineD3DBuffer* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetDesc)(
+        IWineD3DBuffer* This,
+        WINED3DBUFFER_DESC *desc);
+
+    END_INTERFACE
+} IWineD3DBufferVtbl;
+interface IWineD3DBuffer {
+    CONST_VTBL IWineD3DBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBuffer_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBuffer_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBuffer_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBuffer_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBuffer_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBuffer_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBuffer_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBuffer_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBuffer_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBuffer methods ***/
+#define IWineD3DBuffer_Map(This,offset,size,data,flags) (This)->lpVtbl->Map(This,offset,size,data,flags)
+#define IWineD3DBuffer_Unmap(This) (This)->lpVtbl->Unmap(This)
+#define IWineD3DBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Map_Proxy(
+    IWineD3DBuffer* This,
+    UINT offset,
+    UINT size,
+    BYTE **data,
+    DWORD flags);
+void __RPC_STUB IWineD3DBuffer_Map_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Unmap_Proxy(
+    IWineD3DBuffer* This);
+void __RPC_STUB IWineD3DBuffer_Unmap_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_GetDesc_Proxy(
+    IWineD3DBuffer* This,
+    WINED3DBUFFER_DESC *desc);
+void __RPC_STUB IWineD3DBuffer_GetDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseShader interface
+ */
+#ifndef __IWineD3DBaseShader_INTERFACE_DEFINED__
+#define __IWineD3DBaseShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseShader, 0xeac93065, 0xa4df, 0x446f, 0x86,0xa1, 0x9e,0xf2,0xbc,0xa4,0x0a,0x3c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseShader : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFunction(
+        void *data,
+        UINT *data_size) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DBaseShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DBaseShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DBaseShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DBaseShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DBaseShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DBaseShaderVtbl;
+interface IWineD3DBaseShader {
+    CONST_VTBL IWineD3DBaseShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DBaseShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBaseShader_GetFunction_Proxy(
+    IWineD3DBaseShader* This,
+    void *data,
+    UINT *data_size);
+void __RPC_STUB IWineD3DBaseShader_GetFunction_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DBaseShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexShader interface
+ */
+#ifndef __IWineD3DVertexShader_INTERFACE_DEFINED__
+#define __IWineD3DVertexShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexShader, 0x7f7a2b60, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexShader : public IWineD3DBaseShader
+{
+    virtual HRESULT STDMETHODCALLTYPE SetLocalConstantsF(
+        UINT start_idx,
+        const float *src_data,
+        UINT vector4f_count) = 0;
+
+};
+#else
+typedef struct IWineD3DVertexShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DVertexShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DVertexShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DVertexShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DVertexShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DVertexShader* This,
+        void *data,
+        UINT *data_size);
+
+    /*** IWineD3DVertexShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetLocalConstantsF)(
+        IWineD3DVertexShader* This,
+        UINT start_idx,
+        const float *src_data,
+        UINT vector4f_count);
+
+    END_INTERFACE
+} IWineD3DVertexShaderVtbl;
+interface IWineD3DVertexShader {
+    CONST_VTBL IWineD3DVertexShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DVertexShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+/*** IWineD3DVertexShader methods ***/
+#define IWineD3DVertexShader_SetLocalConstantsF(This,start_idx,src_data,vector4f_count) (This)->lpVtbl->SetLocalConstantsF(This,start_idx,src_data,vector4f_count)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVertexShader_SetLocalConstantsF_Proxy(
+    IWineD3DVertexShader* This,
+    UINT start_idx,
+    const float *src_data,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DVertexShader_SetLocalConstantsF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DVertexShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DGeometryShader interface
+ */
+#ifndef __IWineD3DGeometryShader_INTERFACE_DEFINED__
+#define __IWineD3DGeometryShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DGeometryShader, 0x8276c113, 0x388b, 0x49d1, 0xad,0x8b, 0xc9,0xdd,0x8b,0xcb,0xab,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DGeometryShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DGeometryShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DGeometryShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DGeometryShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DGeometryShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DGeometryShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DGeometryShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DGeometryShaderVtbl;
+interface IWineD3DGeometryShader {
+    CONST_VTBL IWineD3DGeometryShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DGeometryShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DGeometryShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DGeometryShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DGeometryShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DGeometryShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DGeometryShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPixelShader interface
+ */
+#ifndef __IWineD3DPixelShader_INTERFACE_DEFINED__
+#define __IWineD3DPixelShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPixelShader, 0x818503da, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPixelShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DPixelShaderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DPixelShader* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DPixelShader* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DPixelShader* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DPixelShader* This,
+        IUnknown **parent);
+
+    /*** IWineD3DBaseShader methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFunction)(
+        IWineD3DPixelShader* This,
+        void *data,
+        UINT *data_size);
+
+    END_INTERFACE
+} IWineD3DPixelShaderVtbl;
+interface IWineD3DPixelShader {
+    CONST_VTBL IWineD3DPixelShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPixelShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPixelShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPixelShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPixelShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DPixelShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif  /* __IWineD3DPixelShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DDevice interface
+ */
+#ifndef __IWineD3DDevice_INTERFACE_DEFINED__
+#define __IWineD3DDevice_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDevice, 0x6d10a2ce, 0x09d0, 0x4a53, 0xa4,0x27, 0x11,0x38,0x8f,0x9f,0x8c,0xa5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDevice : public IWineD3DBase
+{
+    virtual HRESULT STDMETHODCALLTYPE CreateBuffer(
+        struct wined3d_buffer_desc *desc,
+        const void *data,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        IWineD3DBuffer **buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexBuffer(
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **vertex_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateIndexBuffer(
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **index_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateStateBlock(
+        WINED3DSTATEBLOCKTYPE type,
+        IWineD3DStateBlock **stateblock,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        BOOL lockable,
+        BOOL discard,
+        UINT level,
+        IWineD3DSurface **surface,
+        DWORD usage,
+        WINED3DPOOL pool,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        WINED3DSURFTYPE surface_type,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateRendertargetView(
+        IWineD3DResource *resource,
+        IUnknown *parent,
+        IWineD3DRendertargetView **rendertarget_view) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateTexture(
+        UINT width,
+        UINT height,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolumeTexture(
+        UINT width,
+        UINT height,
+        UINT depth,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolumeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pavClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+        UINT width,
+        UINT height,
+        UINT depth,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolume **volume,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateCubeTexture(
+        UINT edge_length,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DCubeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateQuery(
+        WINED3DQUERYTYPE type,
+        IWineD3DQuery **query,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain,
+        IUnknown *parent,
+        WINED3DSURFTYPE surface_type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclaration(
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        const WINED3DVERTEXELEMENT *elements,
+        UINT element_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclarationFromFVF(
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        DWORD fvf) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateVertexShader(
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DVertexShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader(
+        const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DGeometryShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePixelShader(
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DPixelShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CreatePalette(
+        DWORD flags,
+        const PALETTEENTRY *palette_entry,
+        IWineD3DPalette **palette,
+        IUnknown *parent) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Init3D(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitGDI(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Uninit3D(
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UninitGDI(
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+    virtual void STDMETHODCALLTYPE SetMultithreaded(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EvictManagedResources(
+        ) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetAvailableTextureMem(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+        UINT swapchain_idx,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+        WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+        WINED3DCAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDirect3D(
+        IWineD3D **d3d) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+        UINT swapchain_idx,
+        WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDisplayMode(
+        UINT swapchain_idx,
+        const WINED3DDISPLAYMODE *mode) = 0;
+
+    virtual UINT STDMETHODCALLTYPE GetNumberOfSwapChains(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+        UINT swapchain_idx,
+        WINED3DRASTER_STATUS *raster_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSwapChain(
+        UINT swapchain_idx,
+        IWineD3DSwapChain **swapchain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDialogBoxMode(
+        BOOL enable_dialogs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCursorProperties(
+        UINT x_hotspot,
+        UINT y_hotspot,
+        IWineD3DSurface *cursor_surface) = 0;
+
+    virtual void STDMETHODCALLTYPE SetCursorPosition(
+        int x_screen_space,
+        int y_screen_space,
+        DWORD flags) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE ShowCursor(
+        BOOL show) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipPlane(
+        DWORD plane_idx,
+        const float *plane) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipPlane(
+        DWORD plane_idx,
+        float *plane) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipStatus(
+        const WINED3DCLIPSTATUS *clip_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipStatus(
+        WINED3DCLIPSTATUS *clip_status) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCurrentTexturePalette(
+        UINT palette_number) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentTexturePalette(
+        UINT *palette_number) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDepthStencilSurface(
+        IWineD3DSurface *depth_stencil) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDepthStencilSurface(
+        IWineD3DSurface **depth_stencil) = 0;
+
+    virtual void STDMETHODCALLTYPE SetGammaRamp(
+        UINT swapchain_idx,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual void STDMETHODCALLTYPE GetGammaRamp(
+        UINT swapchain_idx,
+        WINED3DGAMMARAMP *ramp) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetIndexBuffer(
+        IWineD3DBuffer *index_buffer,
+        WINED3DFORMAT format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetIndexBuffer(
+        IWineD3DBuffer **index_buffer) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetBaseVertexIndex(
+        INT base_index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetBaseVertexIndex(
+        INT *base_index) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLight(
+        DWORD light_idx,
+        const WINED3DLIGHT *light) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLight(
+        DWORD light_idx,
+        WINED3DLIGHT *light) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetLightEnable(
+        DWORD light_idx,
+        BOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLightEnable(
+        DWORD light_idx,
+        BOOL *enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMaterial(
+        const WINED3DMATERIAL *material) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMaterial(
+        WINED3DMATERIAL *material) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetNPatchMode(
+        float segments) = 0;
+
+    virtual float STDMETHODCALLTYPE GetNPatchMode(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPaletteEntries(
+        UINT palette_number,
+        const PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPaletteEntries(
+        UINT palette_number,
+        PALETTEENTRY *entries) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShader(
+        IWineD3DPixelShader *shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShader(
+        IWineD3DPixelShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantB(
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantB(
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantI(
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantI(
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantF(
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantF(
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderState(
+        WINED3DRENDERSTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderState(
+        WINED3DRENDERSTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRenderTarget(
+        DWORD render_target_idx,
+        IWineD3DSurface *render_target,
+        BOOL set_viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRenderTarget(
+        DWORD render_target_idx,
+        IWineD3DSurface **render_target) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetFrontBackBuffers(
+        IWineD3DSurface *front,
+        IWineD3DSurface *back) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSamplerState(
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSamplerState(
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetScissorRect(
+        const RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetScissorRect(
+        RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSoftwareVertexProcessing(
+        BOOL software) = 0;
+
+    virtual BOOL STDMETHODCALLTYPE GetSoftwareVertexProcessing(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSource(
+        UINT stream_idx,
+        IWineD3DBuffer *buffer,
+        UINT offset,
+        UINT stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSource(
+        UINT stream_idx,
+        IWineD3DBuffer **buffer,
+        UINT *offset,
+        UINT *stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetStreamSourceFreq(
+        UINT stream_idx,
+        UINT divider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetStreamSourceFreq(
+        UINT stream_idx,
+        UINT *divider) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTexture(
+        DWORD stage,
+        IWineD3DBaseTexture *texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTexture(
+        DWORD stage,
+        IWineD3DBaseTexture **texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTextureStageState(
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTextureStageState(
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD *value) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexDeclaration(
+        IWineD3DVertexDeclaration *declaration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexDeclaration(
+        IWineD3DVertexDeclaration **declaration) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShader(
+        IWineD3DVertexShader *shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShader(
+        IWineD3DVertexShader **shader) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantB(
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantB(
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantI(
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantI(
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantF(
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantF(
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetViewport(
+        const WINED3DVIEWPORT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetViewport(
+        WINED3DVIEWPORT *viewport) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MultiplyTransform(
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ValidateDevice(
+        DWORD *num_passes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ProcessVertices(
+        UINT src_start_idx,
+        UINT dst_idx,
+        UINT vertex_count,
+        IWineD3DBuffer *dest_buffer,
+        IWineD3DVertexDeclaration *declaration,
+        DWORD flags,
+        DWORD DestFVF) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginStateBlock(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndStateBlock(
+        IWineD3DStateBlock **stateblock) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginScene(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndScene(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Present(
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Clear(
+        DWORD rect_count,
+        const WINED3DRECT *rects,
+        DWORD flags,
+        WINED3DCOLOR color,
+        float z,
+        DWORD stencil) = 0;
+
+    virtual void STDMETHODCALLTYPE ClearRendertargetView(
+        IWineD3DRendertargetView *rendertarget_view,
+        const float color[4]) = 0;
+
+    virtual void STDMETHODCALLTYPE SetPrimitiveType(
+        WINED3DPRIMITIVETYPE primitive_topology) = 0;
+
+    virtual void STDMETHODCALLTYPE GetPrimitiveType(
+        WINED3DPRIMITIVETYPE *primitive_topology) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitive(
+        UINT start_vertex,
+        UINT vertex_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitive(
+        UINT start_idx,
+        UINT index_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveUP(
+        UINT vertex_count,
+        const void *stream_data,
+        UINT stream_stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveUP(
+        UINT index_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format,
+        const void *stream_data,
+        UINT stream_stride) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveStrided(
+        UINT vertex_count,
+        const WineDirect3DVertexStridedData *strided_data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveStrided(
+        UINT index_count,
+        const WineDirect3DVertexStridedData *strided_data,
+        UINT vertex_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawRectPatch(
+        UINT handle,
+        const float *num_segs,
+        const WINED3DRECTPATCH_INFO *rect_patch_info) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DrawTriPatch(
+        UINT handle,
+        const float *num_segs,
+        const WINED3DTRIPATCH_INFO *tri_patch_info) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DeletePatch(
+        UINT handle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ColorFill(
+        IWineD3DSurface *surface,
+        const WINED3DRECT *rect,
+        WINED3DCOLOR color) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateTexture(
+        IWineD3DBaseTexture *src_texture,
+        IWineD3DBaseTexture *dst_texture) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpdateSurface(
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const POINT *dst_point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+        UINT swapchain_idx,
+        IWineD3DSurface *dst_surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EnumResources(
+        HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+        void *data) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceFromDC(
+        HDC dc,
+        IWineD3DSurface **surface) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AcquireFocusWindow(
+        HWND window) = 0;
+
+    virtual void STDMETHODCALLTYPE ReleaseFocusWindow(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AddSwapChain(
+        IWineD3DSwapChain *swapchain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveSwapChain(
+        IWineD3DSwapChain *swapchain) = 0;
+
+#ifdef VBOX_WITH_WDDM
+    virtual HRESULT STDMETHODCALLTYPE Flush(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VolBlt(IWineD3DDevice *iface,
+            IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+            const WINED3DBOX *pSrcBoxArg,
+            const VBOXPOINT3D *pDstPoin3D
+            ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VolTexBlt(IWineD3DDevice *iface,
+            IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+            const WINED3DBOX *pSrcBoxArg,
+            const VBOXPOINT3D *pDstPoin3D
+            ) = 0;
+#endif
+};
+#else
+typedef struct IWineD3DDeviceVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IWineD3DDevice* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IWineD3DDevice* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IWineD3DDevice* This);
+
+    /*** IWineD3DBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetParent)(
+        IWineD3DDevice* This,
+        IUnknown **parent);
+
+    /*** IWineD3DDevice methods ***/
+    HRESULT (STDMETHODCALLTYPE *CreateBuffer)(
+        IWineD3DDevice* This,
+        struct wined3d_buffer_desc *desc,
+        const void *data,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        IWineD3DBuffer **buffer);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexBuffer)(
+        IWineD3DDevice* This,
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **vertex_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateIndexBuffer)(
+        IWineD3DDevice* This,
+        UINT length,
+        DWORD usage,
+        WINED3DPOOL pool,
+        IWineD3DBuffer **index_buffer,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateStateBlock)(
+        IWineD3DDevice* This,
+        WINED3DSTATEBLOCKTYPE type,
+        IWineD3DStateBlock **stateblock,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        WINED3DFORMAT format,
+        BOOL lockable,
+        BOOL discard,
+        UINT level,
+        IWineD3DSurface **surface,
+        DWORD usage,
+        WINED3DPOOL pool,
+        WINED3DMULTISAMPLE_TYPE multisample_type,
+        DWORD multisample_quality,
+        WINED3DSURFTYPE surface_type,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateRendertargetView)(
+        IWineD3DDevice* This,
+        IWineD3DResource *resource,
+        IUnknown *parent,
+        IWineD3DRendertargetView **rendertarget_view);
+
+    HRESULT (STDMETHODCALLTYPE *CreateTexture)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolumeTexture)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT depth,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolumeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+        IWineD3DDevice* This,
+        UINT width,
+        UINT height,
+        UINT depth,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DVolume **volume,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateCubeTexture)(
+        IWineD3DDevice* This,
+        UINT edge_length,
+        UINT levels,
+        DWORD usage,
+        WINED3DFORMAT format,
+        WINED3DPOOL pool,
+        IWineD3DCubeTexture **texture,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        );
+
+    HRESULT (STDMETHODCALLTYPE *CreateQuery)(
+        IWineD3DDevice* This,
+        WINED3DQUERYTYPE type,
+        IWineD3DQuery **query,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters,
+        IWineD3DSwapChain **swapchain,
+        IUnknown *parent,
+        WINED3DSURFTYPE surface_type);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        const WINED3DVERTEXELEMENT *elements,
+        UINT element_count);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexDeclarationFromFVF)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops,
+        DWORD fvf);
+
+    HRESULT (STDMETHODCALLTYPE *CreateVertexShader)(
+        IWineD3DDevice* This,
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DVertexShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreateGeometryShader)(
+        IWineD3DDevice* This,
+        const DWORD *byte_code,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DGeometryShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePixelShader)(
+        IWineD3DDevice* This,
+        const DWORD *function,
+        const struct wined3d_shader_signature *output_signature,
+        IWineD3DPixelShader **shader,
+        IUnknown *parent,
+        const struct wined3d_parent_ops *parent_ops);
+
+    HRESULT (STDMETHODCALLTYPE *CreatePalette)(
+        IWineD3DDevice* This,
+        DWORD flags,
+        const PALETTEENTRY *palette_entry,
+        IWineD3DPalette **palette,
+        IUnknown *parent);
+
+    HRESULT (STDMETHODCALLTYPE *Init3D)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *InitGDI)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *Uninit3D)(
+        IWineD3DDevice* This,
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+    HRESULT (STDMETHODCALLTYPE *UninitGDI)(
+        IWineD3DDevice* This,
+        ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+    void (STDMETHODCALLTYPE *SetMultithreaded)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EvictManagedResources)(
+        IWineD3DDevice* This);
+
+    UINT (STDMETHODCALLTYPE *GetAvailableTextureMem)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        UINT backbuffer_idx,
+        WINED3DBACKBUFFER_TYPE backbuffer_type,
+        IWineD3DSurface **backbuffer);
+
+    HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+        IWineD3DDevice* This,
+        WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+        IWineD3DDevice* This,
+        WINED3DCAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *GetDirect3D)(
+        IWineD3DDevice* This,
+        IWineD3D **d3d);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DDISPLAYMODE *mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetDisplayMode)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        const WINED3DDISPLAYMODE *mode);
+
+    UINT (STDMETHODCALLTYPE *GetNumberOfSwapChains)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DRASTER_STATUS *raster_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetSwapChain)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        IWineD3DSwapChain **swapchain);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IWineD3DDevice* This,
+        WINED3DPRESENT_PARAMETERS *present_parameters);
+
+    HRESULT (STDMETHODCALLTYPE *SetDialogBoxMode)(
+        IWineD3DDevice* This,
+        BOOL enable_dialogs);
+
+    HRESULT (STDMETHODCALLTYPE *SetCursorProperties)(
+        IWineD3DDevice* This,
+        UINT x_hotspot,
+        UINT y_hotspot,
+        IWineD3DSurface *cursor_surface);
+
+    void (STDMETHODCALLTYPE *SetCursorPosition)(
+        IWineD3DDevice* This,
+        int x_screen_space,
+        int y_screen_space,
+        DWORD flags);
+
+    BOOL (STDMETHODCALLTYPE *ShowCursor)(
+        IWineD3DDevice* This,
+        BOOL show);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipPlane)(
+        IWineD3DDevice* This,
+        DWORD plane_idx,
+        const float *plane);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipPlane)(
+        IWineD3DDevice* This,
+        DWORD plane_idx,
+        float *plane);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipStatus)(
+        IWineD3DDevice* This,
+        const WINED3DCLIPSTATUS *clip_status);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipStatus)(
+        IWineD3DDevice* This,
+        WINED3DCLIPSTATUS *clip_status);
+
+    HRESULT (STDMETHODCALLTYPE *SetCurrentTexturePalette)(
+        IWineD3DDevice* This,
+        UINT palette_number);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentTexturePalette)(
+        IWineD3DDevice* This,
+        UINT *palette_number);
+
+    HRESULT (STDMETHODCALLTYPE *SetDepthStencilSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *depth_stencil);
+
+    HRESULT (STDMETHODCALLTYPE *GetDepthStencilSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface **depth_stencil);
+
+    void (STDMETHODCALLTYPE *SetGammaRamp)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        DWORD flags,
+        const WINED3DGAMMARAMP *ramp);
+
+    void (STDMETHODCALLTYPE *GetGammaRamp)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        WINED3DGAMMARAMP *ramp);
+
+    HRESULT (STDMETHODCALLTYPE *SetIndexBuffer)(
+        IWineD3DDevice* This,
+        IWineD3DBuffer *index_buffer,
+        WINED3DFORMAT format);
+
+    HRESULT (STDMETHODCALLTYPE *GetIndexBuffer)(
+        IWineD3DDevice* This,
+        IWineD3DBuffer **index_buffer);
+
+    HRESULT (STDMETHODCALLTYPE *SetBaseVertexIndex)(
+        IWineD3DDevice* This,
+        INT base_index);
+
+    HRESULT (STDMETHODCALLTYPE *GetBaseVertexIndex)(
+        IWineD3DDevice* This,
+        INT *base_index);
+
+    HRESULT (STDMETHODCALLTYPE *SetLight)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        const WINED3DLIGHT *light);
+
+    HRESULT (STDMETHODCALLTYPE *GetLight)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        WINED3DLIGHT *light);
+
+    HRESULT (STDMETHODCALLTYPE *SetLightEnable)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        BOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *GetLightEnable)(
+        IWineD3DDevice* This,
+        DWORD light_idx,
+        BOOL *enable);
+
+    HRESULT (STDMETHODCALLTYPE *SetMaterial)(
+        IWineD3DDevice* This,
+        const WINED3DMATERIAL *material);
+
+    HRESULT (STDMETHODCALLTYPE *GetMaterial)(
+        IWineD3DDevice* This,
+        WINED3DMATERIAL *material);
+
+    HRESULT (STDMETHODCALLTYPE *SetNPatchMode)(
+        IWineD3DDevice* This,
+        float segments);
+
+    float (STDMETHODCALLTYPE *GetNPatchMode)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetPaletteEntries)(
+        IWineD3DDevice* This,
+        UINT palette_number,
+        const PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+        IWineD3DDevice* This,
+        UINT palette_number,
+        PALETTEENTRY *entries);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShader)(
+        IWineD3DDevice* This,
+        IWineD3DPixelShader *shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShader)(
+        IWineD3DDevice* This,
+        IWineD3DPixelShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderState)(
+        IWineD3DDevice* This,
+        WINED3DRENDERSTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderState)(
+        IWineD3DDevice* This,
+        WINED3DRENDERSTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetRenderTarget)(
+        IWineD3DDevice* This,
+        DWORD render_target_idx,
+        IWineD3DSurface *render_target,
+        BOOL set_viewport);
+
+    HRESULT (STDMETHODCALLTYPE *GetRenderTarget)(
+        IWineD3DDevice* This,
+        DWORD render_target_idx,
+        IWineD3DSurface **render_target);
+
+    HRESULT (STDMETHODCALLTYPE *SetFrontBackBuffers)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *front,
+        IWineD3DSurface *back);
+
+    HRESULT (STDMETHODCALLTYPE *SetSamplerState)(
+        IWineD3DDevice* This,
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetSamplerState)(
+        IWineD3DDevice* This,
+        DWORD sampler_idx,
+        WINED3DSAMPLERSTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetScissorRect)(
+        IWineD3DDevice* This,
+        const RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *GetScissorRect)(
+        IWineD3DDevice* This,
+        RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *SetSoftwareVertexProcessing)(
+        IWineD3DDevice* This,
+        BOOL software);
+
+    BOOL (STDMETHODCALLTYPE *GetSoftwareVertexProcessing)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSource)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        IWineD3DBuffer *buffer,
+        UINT offset,
+        UINT stride);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSource)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        IWineD3DBuffer **buffer,
+        UINT *offset,
+        UINT *stride);
+
+    HRESULT (STDMETHODCALLTYPE *SetStreamSourceFreq)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        UINT divider);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamSourceFreq)(
+        IWineD3DDevice* This,
+        UINT stream_idx,
+        UINT *divider);
+
+    HRESULT (STDMETHODCALLTYPE *SetTexture)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        IWineD3DBaseTexture *texture);
+
+    HRESULT (STDMETHODCALLTYPE *GetTexture)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        IWineD3DBaseTexture **texture);
+
+    HRESULT (STDMETHODCALLTYPE *SetTextureStageState)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD value);
+
+    HRESULT (STDMETHODCALLTYPE *GetTextureStageState)(
+        IWineD3DDevice* This,
+        DWORD stage,
+        WINED3DTEXTURESTAGESTATETYPE state,
+        DWORD *value);
+
+    HRESULT (STDMETHODCALLTYPE *SetTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *GetTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration *declaration);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexDeclaration)(
+        IWineD3DDevice* This,
+        IWineD3DVertexDeclaration **declaration);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShader)(
+        IWineD3DDevice* This,
+        IWineD3DVertexShader *shader);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShader)(
+        IWineD3DDevice* This,
+        IWineD3DVertexShader **shader);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantB)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        BOOL *constants,
+        UINT bool_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantI)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        int *constants,
+        UINT vector4i_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        const float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantF)(
+        IWineD3DDevice* This,
+        UINT start_register,
+        float *constants,
+        UINT vector4f_count);
+
+    HRESULT (STDMETHODCALLTYPE *SetViewport)(
+        IWineD3DDevice* This,
+        const WINED3DVIEWPORT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *GetViewport)(
+        IWineD3DDevice* This,
+        WINED3DVIEWPORT *viewport);
+
+    HRESULT (STDMETHODCALLTYPE *MultiplyTransform)(
+        IWineD3DDevice* This,
+        WINED3DTRANSFORMSTATETYPE state,
+        const WINED3DMATRIX *matrix);
+
+    HRESULT (STDMETHODCALLTYPE *ValidateDevice)(
+        IWineD3DDevice* This,
+        DWORD *num_passes);
+
+    HRESULT (STDMETHODCALLTYPE *ProcessVertices)(
+        IWineD3DDevice* This,
+        UINT src_start_idx,
+        UINT dst_idx,
+        UINT vertex_count,
+        IWineD3DBuffer *dest_buffer,
+        IWineD3DVertexDeclaration *declaration,
+        DWORD flags,
+        DWORD DestFVF);
+
+    HRESULT (STDMETHODCALLTYPE *BeginStateBlock)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndStateBlock)(
+        IWineD3DDevice* This,
+        IWineD3DStateBlock **stateblock);
+
+    HRESULT (STDMETHODCALLTYPE *BeginScene)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *EndScene)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *Present)(
+        IWineD3DDevice* This,
+        const RECT *src_rect,
+        const RECT *dst_rect,
+        HWND dst_window_override,
+        const RGNDATA *dirty_region);
+
+    HRESULT (STDMETHODCALLTYPE *Clear)(
+        IWineD3DDevice* This,
+        DWORD rect_count,
+        const WINED3DRECT *rects,
+        DWORD flags,
+        WINED3DCOLOR color,
+        float z,
+        DWORD stencil);
+
+    void (STDMETHODCALLTYPE *ClearRendertargetView)(
+        IWineD3DDevice* This,
+        IWineD3DRendertargetView *rendertarget_view,
+        const float color[4]);
+
+    void (STDMETHODCALLTYPE *SetPrimitiveType)(
+        IWineD3DDevice* This,
+        WINED3DPRIMITIVETYPE primitive_topology);
+
+    void (STDMETHODCALLTYPE *GetPrimitiveType)(
+        IWineD3DDevice* This,
+        WINED3DPRIMITIVETYPE *primitive_topology);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitive)(
+        IWineD3DDevice* This,
+        UINT start_vertex,
+        UINT vertex_count);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitive)(
+        IWineD3DDevice* This,
+        UINT start_idx,
+        UINT index_count);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitiveUP)(
+        IWineD3DDevice* This,
+        UINT vertex_count,
+        const void *stream_data,
+        UINT stream_stride);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveUP)(
+        IWineD3DDevice* This,
+        UINT index_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format,
+        const void *stream_data,
+        UINT stream_stride);
+
+    HRESULT (STDMETHODCALLTYPE *DrawPrimitiveStrided)(
+        IWineD3DDevice* This,
+        UINT vertex_count,
+        const WineDirect3DVertexStridedData *strided_data);
+
+    HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveStrided)(
+        IWineD3DDevice* This,
+        UINT index_count,
+        const WineDirect3DVertexStridedData *strided_data,
+        UINT vertex_count,
+        const void *index_data,
+        WINED3DFORMAT index_data_format);
+
+    HRESULT (STDMETHODCALLTYPE *DrawRectPatch)(
+        IWineD3DDevice* This,
+        UINT handle,
+        const float *num_segs,
+        const WINED3DRECTPATCH_INFO *rect_patch_info);
+
+    HRESULT (STDMETHODCALLTYPE *DrawTriPatch)(
+        IWineD3DDevice* This,
+        UINT handle,
+        const float *num_segs,
+        const WINED3DTRIPATCH_INFO *tri_patch_info);
+
+    HRESULT (STDMETHODCALLTYPE *DeletePatch)(
+        IWineD3DDevice* This,
+        UINT handle);
+
+    HRESULT (STDMETHODCALLTYPE *ColorFill)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *surface,
+        const WINED3DRECT *rect,
+        WINED3DCOLOR color);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateTexture)(
+        IWineD3DDevice* This,
+        IWineD3DBaseTexture *src_texture,
+        IWineD3DBaseTexture *dst_texture);
+
+    HRESULT (STDMETHODCALLTYPE *UpdateSurface)(
+        IWineD3DDevice* This,
+        IWineD3DSurface *src_surface,
+        const RECT *src_rect,
+        IWineD3DSurface *dst_surface,
+        const POINT *dst_point);
+
+    HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+        IWineD3DDevice* This,
+        UINT swapchain_idx,
+        IWineD3DSurface *dst_surface);
+
+    HRESULT (STDMETHODCALLTYPE *EnumResources)(
+        IWineD3DDevice* This,
+        HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+        void *data);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceFromDC)(
+        IWineD3DDevice* This,
+        HDC dc,
+        IWineD3DSurface **surface);
+
+    HRESULT (STDMETHODCALLTYPE *AcquireFocusWindow)(
+        IWineD3DDevice* This,
+        HWND window);
+
+    void (STDMETHODCALLTYPE *ReleaseFocusWindow)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *AddSwapChain)(
+        IWineD3DDevice* This,
+        IWineD3DSwapChain *swapchain);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveSwapChain)(
+        IWineD3DDevice* This,
+        IWineD3DSwapChain *swapchain);
+
+#ifdef VBOX_WITH_WDDM
+    HRESULT (STDMETHODCALLTYPE *Flush)(
+        IWineD3DDevice* This);
+
+    HRESULT (STDMETHODCALLTYPE *VolBlt)(IWineD3DDevice *iface,
+            IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+            const WINED3DBOX *pSrcBoxArg,
+            const struct VBOXPOINT3D *pDstPoin3D
+            );
+
+    HRESULT (STDMETHODCALLTYPE *VolTexBlt)(IWineD3DDevice *iface,
+            IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+            const WINED3DBOX *pSrcBoxArg,
+            const struct VBOXPOINT3D *pDstPoin3D
+            );
+
+    HRESULT (STDMETHODCALLTYPE *FlushToHost)(
+            IWineD3DDevice *iface);
+
+    HRESULT (STDMETHODCALLTYPE *Finish)(
+        IWineD3DDevice* This);
+#endif
+
+    END_INTERFACE
+} IWineD3DDeviceVtbl;
+interface IWineD3DDevice {
+    CONST_VTBL IWineD3DDeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDevice_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DDevice_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DDevice methods ***/
+#define IWineD3DDevice_CreateBuffer(This,desc,data,parent,parent_ops,buffer) (This)->lpVtbl->CreateBuffer(This,desc,data,parent,parent_ops,buffer)
+#define IWineD3DDevice_CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops) (This)->lpVtbl->CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops) (This)->lpVtbl->CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateStateBlock(This,type,stateblock,parent) (This)->lpVtbl->CreateStateBlock(This,type,stateblock,parent)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateRendertargetView(This,resource,parent,rendertarget_view) (This)->lpVtbl->CreateRendertargetView(This,resource,parent,rendertarget_view)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateQuery(This,type,query,parent) (This)->lpVtbl->CreateQuery(This,type,query,parent)
+#define IWineD3DDevice_CreateSwapChain(This,present_parameters,swapchain,parent,surface_type) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain,parent,surface_type)
+#define IWineD3DDevice_CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count) (This)->lpVtbl->CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count)
+#define IWineD3DDevice_CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf) (This)->lpVtbl->CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf)
+#define IWineD3DDevice_CreateVertexShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateVertexShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePixelShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreatePixelShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePalette(This,flags,palette_entry,palette,parent) (This)->lpVtbl->CreatePalette(This,flags,palette_entry,palette,parent)
+#define IWineD3DDevice_Init3D(This,present_parameters) (This)->lpVtbl->Init3D(This,present_parameters)
+#define IWineD3DDevice_InitGDI(This,present_parameters) (This)->lpVtbl->InitGDI(This,present_parameters)
+#define IWineD3DDevice_Uninit3D(This,destroy_swapchain_callback) (This)->lpVtbl->Uninit3D(This,destroy_swapchain_callback)
+#define IWineD3DDevice_UninitGDI(This,destroy_swapchain_callback) (This)->lpVtbl->UninitGDI(This,destroy_swapchain_callback)
+#define IWineD3DDevice_SetMultithreaded(This) (This)->lpVtbl->SetMultithreaded(This)
+#define IWineD3DDevice_EvictManagedResources(This) (This)->lpVtbl->EvictManagedResources(This)
+#define IWineD3DDevice_GetAvailableTextureMem(This) (This)->lpVtbl->GetAvailableTextureMem(This)
+#define IWineD3DDevice_GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DDevice_GetCreationParameters(This,creation_parameters) (This)->lpVtbl->GetCreationParameters(This,creation_parameters)
+#define IWineD3DDevice_GetDeviceCaps(This,caps) (This)->lpVtbl->GetDeviceCaps(This,caps)
+#define IWineD3DDevice_GetDirect3D(This,d3d) (This)->lpVtbl->GetDirect3D(This,d3d)
+#define IWineD3DDevice_GetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->GetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_SetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->SetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_GetNumberOfSwapChains(This) (This)->lpVtbl->GetNumberOfSwapChains(This)
+#define IWineD3DDevice_GetRasterStatus(This,swapchain_idx,raster_status) (This)->lpVtbl->GetRasterStatus(This,swapchain_idx,raster_status)
+#define IWineD3DDevice_GetSwapChain(This,swapchain_idx,swapchain) (This)->lpVtbl->GetSwapChain(This,swapchain_idx,swapchain)
+#define IWineD3DDevice_Reset(This,present_parameters) (This)->lpVtbl->Reset(This,present_parameters)
+#define IWineD3DDevice_SetDialogBoxMode(This,enable_dialogs) (This)->lpVtbl->SetDialogBoxMode(This,enable_dialogs)
+#define IWineD3DDevice_SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface) (This)->lpVtbl->SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface)
+#define IWineD3DDevice_SetCursorPosition(This,x_screen_space,y_screen_space,flags) (This)->lpVtbl->SetCursorPosition(This,x_screen_space,y_screen_space,flags)
+#define IWineD3DDevice_ShowCursor(This,show) (This)->lpVtbl->ShowCursor(This,show)
+#define IWineD3DDevice_SetClipPlane(This,plane_idx,plane) (This)->lpVtbl->SetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_GetClipPlane(This,plane_idx,plane) (This)->lpVtbl->GetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_SetClipStatus(This,clip_status) (This)->lpVtbl->SetClipStatus(This,clip_status)
+#define IWineD3DDevice_GetClipStatus(This,clip_status) (This)->lpVtbl->GetClipStatus(This,clip_status)
+#define IWineD3DDevice_SetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->SetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_GetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->GetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_SetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->SetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_GetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->GetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_SetGammaRamp(This,swapchain_idx,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,swapchain_idx,flags,ramp)
+#define IWineD3DDevice_GetGammaRamp(This,swapchain_idx,ramp) (This)->lpVtbl->GetGammaRamp(This,swapchain_idx,ramp)
+#define IWineD3DDevice_SetIndexBuffer(This,index_buffer,format) (This)->lpVtbl->SetIndexBuffer(This,index_buffer,format)
+#define IWineD3DDevice_GetIndexBuffer(This,index_buffer) (This)->lpVtbl->GetIndexBuffer(This,index_buffer)
+#define IWineD3DDevice_SetBaseVertexIndex(This,base_index) (This)->lpVtbl->SetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_GetBaseVertexIndex(This,base_index) (This)->lpVtbl->GetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_SetLight(This,light_idx,light) (This)->lpVtbl->SetLight(This,light_idx,light)
+#define IWineD3DDevice_GetLight(This,light_idx,light) (This)->lpVtbl->GetLight(This,light_idx,light)
+#define IWineD3DDevice_SetLightEnable(This,light_idx,enable) (This)->lpVtbl->SetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_GetLightEnable(This,light_idx,enable) (This)->lpVtbl->GetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_SetMaterial(This,material) (This)->lpVtbl->SetMaterial(This,material)
+#define IWineD3DDevice_GetMaterial(This,material) (This)->lpVtbl->GetMaterial(This,material)
+#define IWineD3DDevice_SetNPatchMode(This,segments) (This)->lpVtbl->SetNPatchMode(This,segments)
+#define IWineD3DDevice_GetNPatchMode(This) (This)->lpVtbl->GetNPatchMode(This)
+#define IWineD3DDevice_SetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->SetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_GetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_SetPixelShader(This,shader) (This)->lpVtbl->SetPixelShader(This,shader)
+#define IWineD3DDevice_GetPixelShader(This,shader) (This)->lpVtbl->GetPixelShader(This,shader)
+#define IWineD3DDevice_SetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetRenderState(This,state,value) (This)->lpVtbl->SetRenderState(This,state,value)
+#define IWineD3DDevice_GetRenderState(This,state,value) (This)->lpVtbl->GetRenderState(This,state,value)
+#define IWineD3DDevice_SetRenderTarget(This,render_target_idx,render_target,set_viewport) (This)->lpVtbl->SetRenderTarget(This,render_target_idx,render_target,set_viewport)
+#define IWineD3DDevice_GetRenderTarget(This,render_target_idx,render_target) (This)->lpVtbl->GetRenderTarget(This,render_target_idx,render_target)
+#define IWineD3DDevice_SetFrontBackBuffers(This,front,back) (This)->lpVtbl->SetFrontBackBuffers(This,front,back)
+#define IWineD3DDevice_SetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->SetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_GetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->GetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_SetScissorRect(This,rect) (This)->lpVtbl->SetScissorRect(This,rect)
+#define IWineD3DDevice_GetScissorRect(This,rect) (This)->lpVtbl->GetScissorRect(This,rect)
+#define IWineD3DDevice_SetSoftwareVertexProcessing(This,software) (This)->lpVtbl->SetSoftwareVertexProcessing(This,software)
+#define IWineD3DDevice_GetSoftwareVertexProcessing(This) (This)->lpVtbl->GetSoftwareVertexProcessing(This)
+#define IWineD3DDevice_SetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->SetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_GetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->GetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_SetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->SetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_GetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->GetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_SetTexture(This,stage,texture) (This)->lpVtbl->SetTexture(This,stage,texture)
+#define IWineD3DDevice_GetTexture(This,stage,texture) (This)->lpVtbl->GetTexture(This,stage,texture)
+#define IWineD3DDevice_SetTextureStageState(This,stage,state,value) (This)->lpVtbl->SetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_GetTextureStageState(This,stage,state,value) (This)->lpVtbl->GetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_SetTransform(This,state,matrix) (This)->lpVtbl->SetTransform(This,state,matrix)
+#define IWineD3DDevice_GetTransform(This,state,matrix) (This)->lpVtbl->GetTransform(This,state,matrix)
+#define IWineD3DDevice_SetVertexDeclaration(This,declaration) (This)->lpVtbl->SetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_GetVertexDeclaration(This,declaration) (This)->lpVtbl->GetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_SetVertexShader(This,shader) (This)->lpVtbl->SetVertexShader(This,shader)
+#define IWineD3DDevice_GetVertexShader(This,shader) (This)->lpVtbl->GetVertexShader(This,shader)
+#define IWineD3DDevice_SetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetViewport(This,viewport) (This)->lpVtbl->SetViewport(This,viewport)
+#define IWineD3DDevice_GetViewport(This,viewport) (This)->lpVtbl->GetViewport(This,viewport)
+#define IWineD3DDevice_MultiplyTransform(This,state,matrix) (This)->lpVtbl->MultiplyTransform(This,state,matrix)
+#define IWineD3DDevice_ValidateDevice(This,num_passes) (This)->lpVtbl->ValidateDevice(This,num_passes)
+#define IWineD3DDevice_ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF) (This)->lpVtbl->ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF)
+#define IWineD3DDevice_BeginStateBlock(This) (This)->lpVtbl->BeginStateBlock(This)
+#define IWineD3DDevice_EndStateBlock(This,stateblock) (This)->lpVtbl->EndStateBlock(This,stateblock)
+#define IWineD3DDevice_BeginScene(This) (This)->lpVtbl->BeginScene(This)
+#define IWineD3DDevice_EndScene(This) (This)->lpVtbl->EndScene(This)
+#define IWineD3DDevice_Present(This,src_rect,dst_rect,dst_window_override,dirty_region) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region)
+#define IWineD3DDevice_Clear(This,rect_count,rects,flags,color,z,stencil) (This)->lpVtbl->Clear(This,rect_count,rects,flags,color,z,stencil)
+#define IWineD3DDevice_ClearRendertargetView(This,rendertarget_view,color) (This)->lpVtbl->ClearRendertargetView(This,rendertarget_view,color)
+#define IWineD3DDevice_SetPrimitiveType(This,primitive_topology) (This)->lpVtbl->SetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_GetPrimitiveType(This,primitive_topology) (This)->lpVtbl->GetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_DrawPrimitive(This,start_vertex,vertex_count) (This)->lpVtbl->DrawPrimitive(This,start_vertex,vertex_count)
+#define IWineD3DDevice_DrawIndexedPrimitive(This,start_idx,index_count) (This)->lpVtbl->DrawIndexedPrimitive(This,start_idx,index_count)
+#define IWineD3DDevice_DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride) (This)->lpVtbl->DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride)
+#define IWineD3DDevice_DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride) (This)->lpVtbl->DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride)
+#define IWineD3DDevice_DrawPrimitiveStrided(This,vertex_count,strided_data) (This)->lpVtbl->DrawPrimitiveStrided(This,vertex_count,strided_data)
+#define IWineD3DDevice_DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format) (This)->lpVtbl->DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format)
+#define IWineD3DDevice_DrawRectPatch(This,handle,num_segs,rect_patch_info) (This)->lpVtbl->DrawRectPatch(This,handle,num_segs,rect_patch_info)
+#define IWineD3DDevice_DrawTriPatch(This,handle,num_segs,tri_patch_info) (This)->lpVtbl->DrawTriPatch(This,handle,num_segs,tri_patch_info)
+#define IWineD3DDevice_DeletePatch(This,handle) (This)->lpVtbl->DeletePatch(This,handle)
+#define IWineD3DDevice_ColorFill(This,surface,rect,color) (This)->lpVtbl->ColorFill(This,surface,rect,color)
+#define IWineD3DDevice_UpdateTexture(This,src_texture,dst_texture) (This)->lpVtbl->UpdateTexture(This,src_texture,dst_texture)
+#define IWineD3DDevice_UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point) (This)->lpVtbl->UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point)
+#define IWineD3DDevice_GetFrontBufferData(This,swapchain_idx,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,swapchain_idx,dst_surface)
+#define IWineD3DDevice_EnumResources(This,callback,data) (This)->lpVtbl->EnumResources(This,callback,data)
+#define IWineD3DDevice_GetSurfaceFromDC(This,dc,surface) (This)->lpVtbl->GetSurfaceFromDC(This,dc,surface)
+#define IWineD3DDevice_AcquireFocusWindow(This,window) (This)->lpVtbl->AcquireFocusWindow(This,window)
+#define IWineD3DDevice_ReleaseFocusWindow(This) (This)->lpVtbl->ReleaseFocusWindow(This)
+#define IWineD3DDevice_AddSwapChain(This,swapchain) (This)->lpVtbl->AddSwapChain(This,swapchain)
+#define IWineD3DDevice_RemoveSwapChain(This,swapchain) (This)->lpVtbl->RemoveSwapChain(This,swapchain)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DDevice_VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_FlushToHost(This) (This)->lpVtbl->FlushToHost(This)
+#define IWineD3DDevice_Finish(This) (This)->lpVtbl->Finish(This)
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateBuffer_Proxy(
+    IWineD3DDevice* This,
+    struct wined3d_buffer_desc *desc,
+    const void *data,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    IWineD3DBuffer **buffer);
+void __RPC_STUB IWineD3DDevice_CreateBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT length,
+    DWORD usage,
+    WINED3DPOOL pool,
+    IWineD3DBuffer **vertex_buffer,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT length,
+    DWORD usage,
+    WINED3DPOOL pool,
+    IWineD3DBuffer **index_buffer,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateStateBlock_Proxy(
+    IWineD3DDevice* This,
+    WINED3DSTATEBLOCKTYPE type,
+    IWineD3DStateBlock **stateblock,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSurface_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    WINED3DFORMAT format,
+    BOOL lockable,
+    BOOL discard,
+    UINT level,
+    IWineD3DSurface **surface,
+    DWORD usage,
+    WINED3DPOOL pool,
+    WINED3DMULTISAMPLE_TYPE multisample_type,
+    DWORD multisample_quality,
+    WINED3DSURFTYPE surface_type,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateRendertargetView_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DResource *resource,
+    IUnknown *parent,
+    IWineD3DRendertargetView **rendertarget_view);
+void __RPC_STUB IWineD3DDevice_CreateRendertargetView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolumeTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT depth,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DVolumeTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolumeTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolume_Proxy(
+    IWineD3DDevice* This,
+    UINT width,
+    UINT height,
+    UINT depth,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DVolume **volume,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolume_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateCubeTexture_Proxy(
+    IWineD3DDevice* This,
+    UINT edge_length,
+    UINT levels,
+    DWORD usage,
+    WINED3DFORMAT format,
+    WINED3DPOOL pool,
+    IWineD3DCubeTexture **texture,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateCubeTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateQuery_Proxy(
+    IWineD3DDevice* This,
+    WINED3DQUERYTYPE type,
+    IWineD3DQuery **query,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateQuery_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSwapChain_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters,
+    IWineD3DSwapChain **swapchain,
+    IUnknown *parent,
+    WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3DDevice_CreateSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    const WINED3DVERTEXELEMENT *elements,
+    UINT element_count);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclarationFromFVF_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops,
+    DWORD fvf);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclarationFromFVF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *function,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DVertexShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateGeometryShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *byte_code,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DGeometryShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateGeometryShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePixelShader_Proxy(
+    IWineD3DDevice* This,
+    const DWORD *function,
+    const struct wined3d_shader_signature *output_signature,
+    IWineD3DPixelShader **shader,
+    IUnknown *parent,
+    const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreatePixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePalette_Proxy(
+    IWineD3DDevice* This,
+    DWORD flags,
+    const PALETTEENTRY *palette_entry,
+    IWineD3DPalette **palette,
+    IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreatePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Init3D_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Init3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_InitGDI_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_InitGDI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Uninit3D_Proxy(
+    IWineD3DDevice* This,
+    ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_Uninit3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UninitGDI_Proxy(
+    IWineD3DDevice* This,
+    ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_UninitGDI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetMultithreaded_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_SetMultithreaded_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EvictManagedResources_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EvictManagedResources_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetAvailableTextureMem_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetAvailableTextureMem_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBackBuffer_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    UINT backbuffer_idx,
+    WINED3DBACKBUFFER_TYPE backbuffer_type,
+    IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DDevice_GetBackBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCreationParameters_Proxy(
+    IWineD3DDevice* This,
+    WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+void __RPC_STUB IWineD3DDevice_GetCreationParameters_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDeviceCaps_Proxy(
+    IWineD3DDevice* This,
+    WINED3DCAPS *caps);
+void __RPC_STUB IWineD3DDevice_GetDeviceCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDirect3D_Proxy(
+    IWineD3DDevice* This,
+    IWineD3D **d3d);
+void __RPC_STUB IWineD3DDevice_GetDirect3D_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDisplayMode_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_GetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDisplayMode_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    const WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_SetDisplayMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetNumberOfSwapChains_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNumberOfSwapChains_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRasterStatus_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DDevice_GetRasterStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSwapChain_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDevice_GetSwapChain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Reset_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Reset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDialogBoxMode_Proxy(
+    IWineD3DDevice* This,
+    BOOL enable_dialogs);
+void __RPC_STUB IWineD3DDevice_SetDialogBoxMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCursorProperties_Proxy(
+    IWineD3DDevice* This,
+    UINT x_hotspot,
+    UINT y_hotspot,
+    IWineD3DSurface *cursor_surface);
+void __RPC_STUB IWineD3DDevice_SetCursorProperties_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetCursorPosition_Proxy(
+    IWineD3DDevice* This,
+    int x_screen_space,
+    int y_screen_space,
+    DWORD flags);
+void __RPC_STUB IWineD3DDevice_SetCursorPosition_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_ShowCursor_Proxy(
+    IWineD3DDevice* This,
+    BOOL show);
+void __RPC_STUB IWineD3DDevice_ShowCursor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipPlane_Proxy(
+    IWineD3DDevice* This,
+    DWORD plane_idx,
+    const float *plane);
+void __RPC_STUB IWineD3DDevice_SetClipPlane_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipPlane_Proxy(
+    IWineD3DDevice* This,
+    DWORD plane_idx,
+    float *plane);
+void __RPC_STUB IWineD3DDevice_GetClipPlane_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipStatus_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_SetClipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipStatus_Proxy(
+    IWineD3DDevice* This,
+    WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_GetClipStatus_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCurrentTexturePalette_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number);
+void __RPC_STUB IWineD3DDevice_SetCurrentTexturePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCurrentTexturePalette_Proxy(
+    IWineD3DDevice* This,
+    UINT *palette_number);
+void __RPC_STUB IWineD3DDevice_GetCurrentTexturePalette_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDepthStencilSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *depth_stencil);
+void __RPC_STUB IWineD3DDevice_SetDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDepthStencilSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface **depth_stencil);
+void __RPC_STUB IWineD3DDevice_GetDepthStencilSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetGammaRamp_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    DWORD flags,
+    const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_SetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetGammaRamp_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_GetGammaRamp_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBuffer *index_buffer,
+    WINED3DFORMAT format);
+void __RPC_STUB IWineD3DDevice_SetIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetIndexBuffer_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBuffer **index_buffer);
+void __RPC_STUB IWineD3DDevice_GetIndexBuffer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetBaseVertexIndex_Proxy(
+    IWineD3DDevice* This,
+    INT base_index);
+void __RPC_STUB IWineD3DDevice_SetBaseVertexIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBaseVertexIndex_Proxy(
+    IWineD3DDevice* This,
+    INT *base_index);
+void __RPC_STUB IWineD3DDevice_GetBaseVertexIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLight_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    const WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_SetLight_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLight_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_GetLight_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLightEnable_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    BOOL enable);
+void __RPC_STUB IWineD3DDevice_SetLightEnable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLightEnable_Proxy(
+    IWineD3DDevice* This,
+    DWORD light_idx,
+    BOOL *enable);
+void __RPC_STUB IWineD3DDevice_GetLightEnable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetMaterial_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_SetMaterial_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetMaterial_Proxy(
+    IWineD3DDevice* This,
+    WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_GetMaterial_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetNPatchMode_Proxy(
+    IWineD3DDevice* This,
+    float segments);
+void __RPC_STUB IWineD3DDevice_SetNPatchMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+float STDMETHODCALLTYPE IWineD3DDevice_GetNPatchMode_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNPatchMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPaletteEntries_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number,
+    const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_SetPaletteEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPaletteEntries_Proxy(
+    IWineD3DDevice* This,
+    UINT palette_number,
+    PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_GetPaletteEntries_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DPixelShader *shader);
+void __RPC_STUB IWineD3DDevice_SetPixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DPixelShader **shader);
+void __RPC_STUB IWineD3DDevice_GetPixelShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderState_Proxy(
+    IWineD3DDevice* This,
+    WINED3DRENDERSTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetRenderState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderState_Proxy(
+    IWineD3DDevice* This,
+    WINED3DRENDERSTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetRenderState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderTarget_Proxy(
+    IWineD3DDevice* This,
+    DWORD render_target_idx,
+    IWineD3DSurface *render_target,
+    BOOL set_viewport);
+void __RPC_STUB IWineD3DDevice_SetRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderTarget_Proxy(
+    IWineD3DDevice* This,
+    DWORD render_target_idx,
+    IWineD3DSurface **render_target);
+void __RPC_STUB IWineD3DDevice_GetRenderTarget_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetFrontBackBuffers_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *front,
+    IWineD3DSurface *back);
+void __RPC_STUB IWineD3DDevice_SetFrontBackBuffers_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSamplerState_Proxy(
+    IWineD3DDevice* This,
+    DWORD sampler_idx,
+    WINED3DSAMPLERSTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetSamplerState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSamplerState_Proxy(
+    IWineD3DDevice* This,
+    DWORD sampler_idx,
+    WINED3DSAMPLERSTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetSamplerState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetScissorRect_Proxy(
+    IWineD3DDevice* This,
+    const RECT *rect);
+void __RPC_STUB IWineD3DDevice_SetScissorRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetScissorRect_Proxy(
+    IWineD3DDevice* This,
+    RECT *rect);
+void __RPC_STUB IWineD3DDevice_GetScissorRect_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSoftwareVertexProcessing_Proxy(
+    IWineD3DDevice* This,
+    BOOL software);
+void __RPC_STUB IWineD3DDevice_SetSoftwareVertexProcessing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_GetSoftwareVertexProcessing_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetSoftwareVertexProcessing_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSource_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    IWineD3DBuffer *buffer,
+    UINT offset,
+    UINT stride);
+void __RPC_STUB IWineD3DDevice_SetStreamSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSource_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    IWineD3DBuffer **buffer,
+    UINT *offset,
+    UINT *stride);
+void __RPC_STUB IWineD3DDevice_GetStreamSource_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSourceFreq_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    UINT divider);
+void __RPC_STUB IWineD3DDevice_SetStreamSourceFreq_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSourceFreq_Proxy(
+    IWineD3DDevice* This,
+    UINT stream_idx,
+    UINT *divider);
+void __RPC_STUB IWineD3DDevice_GetStreamSourceFreq_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTexture_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    IWineD3DBaseTexture *texture);
+void __RPC_STUB IWineD3DDevice_SetTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTexture_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    IWineD3DBaseTexture **texture);
+void __RPC_STUB IWineD3DDevice_GetTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTextureStageState_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    WINED3DTEXTURESTAGESTATETYPE state,
+    DWORD value);
+void __RPC_STUB IWineD3DDevice_SetTextureStageState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTextureStageState_Proxy(
+    IWineD3DDevice* This,
+    DWORD stage,
+    WINED3DTEXTURESTAGESTATETYPE state,
+    DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetTextureStageState_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_SetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_GetTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration *declaration);
+void __RPC_STUB IWineD3DDevice_SetVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexDeclaration_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexDeclaration **declaration);
+void __RPC_STUB IWineD3DDevice_GetVertexDeclaration_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexShader *shader);
+void __RPC_STUB IWineD3DDevice_SetVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShader_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DVertexShader **shader);
+void __RPC_STUB IWineD3DDevice_GetVertexShader_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantB_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    BOOL *constants,
+    UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantB_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantI_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    int *constants,
+    UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantI_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    const float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantF_Proxy(
+    IWineD3DDevice* This,
+    UINT start_register,
+    float *constants,
+    UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantF_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetViewport_Proxy(
+    IWineD3DDevice* This,
+    const WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_SetViewport_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetViewport_Proxy(
+    IWineD3DDevice* This,
+    WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_GetViewport_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_MultiplyTransform_Proxy(
+    IWineD3DDevice* This,
+    WINED3DTRANSFORMSTATETYPE state,
+    const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_MultiplyTransform_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ValidateDevice_Proxy(
+    IWineD3DDevice* This,
+    DWORD *num_passes);
+void __RPC_STUB IWineD3DDevice_ValidateDevice_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ProcessVertices_Proxy(
+    IWineD3DDevice* This,
+    UINT src_start_idx,
+    UINT dst_idx,
+    UINT vertex_count,
+    IWineD3DBuffer *dest_buffer,
+    IWineD3DVertexDeclaration *declaration,
+    DWORD flags,
+    DWORD DestFVF);
+void __RPC_STUB IWineD3DDevice_ProcessVertices_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginStateBlock_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndStateBlock_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DStateBlock **stateblock);
+void __RPC_STUB IWineD3DDevice_EndStateBlock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginScene_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginScene_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndScene_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EndScene_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Present_Proxy(
+    IWineD3DDevice* This,
+    const RECT *src_rect,
+    const RECT *dst_rect,
+    HWND dst_window_override,
+    const RGNDATA *dirty_region);
+void __RPC_STUB IWineD3DDevice_Present_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Clear_Proxy(
+    IWineD3DDevice* This,
+    DWORD rect_count,
+    const WINED3DRECT *rects,
+    DWORD flags,
+    WINED3DCOLOR color,
+    float z,
+    DWORD stencil);
+void __RPC_STUB IWineD3DDevice_Clear_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ClearRendertargetView_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DRendertargetView *rendertarget_view,
+    const float color[4]);
+void __RPC_STUB IWineD3DDevice_ClearRendertargetView_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetPrimitiveType_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRIMITIVETYPE primitive_topology);
+void __RPC_STUB IWineD3DDevice_SetPrimitiveType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetPrimitiveType_Proxy(
+    IWineD3DDevice* This,
+    WINED3DPRIMITIVETYPE *primitive_topology);
+void __RPC_STUB IWineD3DDevice_GetPrimitiveType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitive_Proxy(
+    IWineD3DDevice* This,
+    UINT start_vertex,
+    UINT vertex_count);
+void __RPC_STUB IWineD3DDevice_DrawPrimitive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitive_Proxy(
+    IWineD3DDevice* This,
+    UINT start_idx,
+    UINT index_count);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitive_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveUP_Proxy(
+    IWineD3DDevice* This,
+    UINT vertex_count,
+    const void *stream_data,
+    UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveUP_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveUP_Proxy(
+    IWineD3DDevice* This,
+    UINT index_count,
+    const void *index_data,
+    WINED3DFORMAT index_data_format,
+    const void *stream_data,
+    UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveUP_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveStrided_Proxy(
+    IWineD3DDevice* This,
+    UINT vertex_count,
+    const WineDirect3DVertexStridedData *strided_data);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveStrided_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveStrided_Proxy(
+    IWineD3DDevice* This,
+    UINT index_count,
+    const WineDirect3DVertexStridedData *strided_data,
+    UINT vertex_count,
+    const void *index_data,
+    WINED3DFORMAT index_data_format);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveStrided_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawRectPatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle,
+    const float *num_segs,
+    const WINED3DRECTPATCH_INFO *rect_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawRectPatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawTriPatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle,
+    const float *num_segs,
+    const WINED3DTRIPATCH_INFO *tri_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawTriPatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DeletePatch_Proxy(
+    IWineD3DDevice* This,
+    UINT handle);
+void __RPC_STUB IWineD3DDevice_DeletePatch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ColorFill_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *surface,
+    const WINED3DRECT *rect,
+    WINED3DCOLOR color);
+void __RPC_STUB IWineD3DDevice_ColorFill_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateTexture_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DBaseTexture *src_texture,
+    IWineD3DBaseTexture *dst_texture);
+void __RPC_STUB IWineD3DDevice_UpdateTexture_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateSurface_Proxy(
+    IWineD3DDevice* This,
+    IWineD3DSurface *src_surface,
+    const RECT *src_rect,
+    IWineD3DSurface *dst_surface,
+    const POINT *dst_point);
+void __RPC_STUB IWineD3DDevice_UpdateSurface_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetFrontBufferData_Proxy(
+    IWineD3DDevice* This,
+    UINT swapchain_idx,
+    IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DDevice_GetFrontBufferData_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EnumResources_Proxy(
+    IWineD3DDevice* This,
+    HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+    void *data);
+void __RPC_STUB IWineD3DDevice_EnumResources_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSurfaceFromDC_Proxy(
+    IWineD3DDevice* This,
+    HDC dc,
+    IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDevice_GetSurfaceFromDC_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_AcquireFocusWindow_Proxy(
+    IWineD3DDevice* This,
+    HWND window);
+void __RPC_STUB IWineD3DDevice_AcquireFocusWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ReleaseFocusWindow_Proxy(
+    IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_ReleaseFocusWindow_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IWineD3DDevice_INTERFACE_DEFINED__ */
+
+IWineD3D * STDMETHODCALLTYPE  WineDirect3DCreate(UINT dxVersion,IUnknown *parent);
+
+IWineD3DClipper * STDMETHODCALLTYPE  WineDirect3DCreateClipper(IUnknown *parent);
+
+#ifdef VBOX_WINE_NO_LOCK
+#define wined3d_mutex_lock() do {} while (0)
+#define wined3d_mutex_unlock() do {} while (0)
+#else
+void STDMETHODCALLTYPE  wined3d_mutex_lock(void);
+
+void STDMETHODCALLTYPE  wined3d_mutex_unlock(void);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WINED3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h b/src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h
new file mode 100644
index 0000000..a1f8a5b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h
@@ -0,0 +1,4569 @@
+/*
+ * Direct3D wine OpenGL include file
+ *
+ * Copyright 2002-2003 The wine-d3d team
+ * Copyright 2002-2004 Jason Edmeades
+ *                     Raphael Junqueira
+ * Copyright 2007 Roderick Colenbrander
+ *
+ * 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
+ *
+ *
+ * Most OpenGL 1.0/1.1/1.2/1.3 constants/types come from the Mesa-project:
+ * Copyright (C) 1999-2006  Brian Paul
+ *
+ * From the Mesa-license:
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINED3D_GL_H
+#define __WINE_WINED3D_GL_H
+
+#ifdef USE_WIN32_OPENGL
+#define WINE_GLAPI __stdcall
+#else
+#define WINE_GLAPI
+#endif
+
+/****************************************************
+ * OpenGL 1.0/1.1/1.2/1.3
+ *     types, #defines and function pointers
+ ****************************************************/
+
+/* Types */
+typedef unsigned int    GLbitfield;
+typedef unsigned char   GLboolean;
+typedef signed char     GLbyte;
+typedef unsigned char   GLubyte;
+typedef short           GLshort;
+typedef unsigned short  GLushort;
+typedef int             GLint;
+typedef unsigned int    GLuint;
+typedef unsigned int    GLenum;
+typedef float           GLfloat;
+typedef int             GLsizei;
+typedef float           GLclampf;
+typedef double          GLdouble;
+typedef double          GLclampd;
+typedef void            GLvoid;
+typedef ptrdiff_t       GLintptr;
+typedef ptrdiff_t       GLsizeiptr;
+typedef INT64           GLint64;
+typedef UINT64          GLuint64;
+typedef struct __GLsync *GLsync;
+
+/* Booleans */
+#define GL_FALSE                                0x0
+#define GL_TRUE                                 0x1
+
+/* Data types */
+#define GL_BYTE                                 0x1400
+#define GL_UNSIGNED_BYTE                        0x1401
+#define GL_SHORT                                0x1402
+#define GL_UNSIGNED_SHORT                       0x1403
+#define GL_INT                                  0x1404
+#define GL_UNSIGNED_INT                         0x1405
+#define GL_FLOAT                                0x1406
+#define GL_DOUBLE                               0x140A
+#define GL_2_BYTES                              0x1407
+#define GL_3_BYTES                              0x1408
+#define GL_4_BYTES                              0x1409
+
+/* Errors */
+#define GL_NO_ERROR                             0x0
+#define GL_INVALID_VALUE                        0x0501
+#define GL_INVALID_ENUM                         0x0500
+#define GL_INVALID_OPERATION                    0x0502
+#define GL_STACK_OVERFLOW                       0x0503
+#define GL_STACK_UNDERFLOW                      0x0504
+#define GL_OUT_OF_MEMORY                        0x0505
+
+/* Utility */
+#define GL_VENDOR                               0x1F00
+#define GL_RENDERER                             0x1F01
+#define GL_VERSION                              0x1F02
+#define GL_EXTENSIONS                           0x1F03
+
+/* Accumulation buffer */
+#define GL_ACCUM_RED_BITS                       0x0D58
+#define GL_ACCUM_GREEN_BITS                     0x0D59
+#define GL_ACCUM_BLUE_BITS                      0x0D5A
+#define GL_ACCUM_ALPHA_BITS                     0x0D5B
+#define GL_ACCUM_CLEAR_VALUE                    0x0B80
+#define GL_ACCUM                                0x0100
+#define GL_ADD                                  0x0104
+#define GL_LOAD                                 0x0101
+#define GL_MULT                                 0x0103
+#define GL_RETURN                               0x0102
+
+/* Alpha testing */
+#define GL_ALPHA_TEST                           0x0BC0
+#define GL_ALPHA_TEST_REF                       0x0BC2
+#define GL_ALPHA_TEST_FUNC                      0x0BC1
+
+/* Blending */
+#define GL_BLEND                                0x0BE2
+#define GL_BLEND_SRC                            0x0BE1
+#define GL_BLEND_DST                            0x0BE0
+#define GL_ZERO                                 0x0
+#define GL_ONE                                  0x1
+#define GL_SRC_COLOR                            0x0300
+#define GL_ONE_MINUS_SRC_COLOR                  0x0301
+#define GL_SRC_ALPHA                            0x0302
+#define GL_ONE_MINUS_SRC_ALPHA                  0x0303
+#define GL_DST_ALPHA                            0x0304
+#define GL_ONE_MINUS_DST_ALPHA                  0x0305
+#define GL_DST_COLOR                            0x0306
+#define GL_ONE_MINUS_DST_COLOR                  0x0307
+#define GL_SRC_ALPHA_SATURATE                   0x0308
+#define GL_CONSTANT_COLOR                       0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR             0x8002
+#define GL_CONSTANT_ALPHA                       0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA             0x8004
+
+/* Buffers, Pixel Drawing/Reading */
+#define GL_NONE                                 0x0
+#define GL_FRONT_LEFT                           0x0400
+#define GL_FRONT_RIGHT                          0x0401
+#define GL_BACK_LEFT                            0x0402
+#define GL_BACK_RIGHT                           0x0403
+#define GL_FRONT                                0x0404
+#define GL_BACK                                 0x0405
+#define GL_LEFT                                 0x0406
+#define GL_RIGHT                                0x0407
+#define GL_FRONT_AND_BACK                       0x0408
+#define GL_AUX0                                 0x0409
+#define GL_AUX1                                 0x040A
+#define GL_AUX2                                 0x040B
+#define GL_AUX3                                 0x040C
+#define GL_COLOR_INDEX                          0x1900
+#define GL_RED                                  0x1903
+#define GL_GREEN                                0x1904
+#define GL_BLUE                                 0x1905
+#define GL_ALPHA                                0x1906
+#define GL_LUMINANCE                            0x1909
+#define GL_LUMINANCE_ALPHA                      0x190A
+#define GL_ALPHA_BITS                           0x0D55
+#define GL_RED_BITS                             0x0D52
+#define GL_GREEN_BITS                           0x0D53
+#define GL_BLUE_BITS                            0x0D54
+#define GL_INDEX_BITS                           0x0D51
+#define GL_SUBPIXEL_BITS                        0x0D50
+#define GL_AUX_BUFFERS                          0x0C00
+#define GL_READ_BUFFER                          0x0C02
+#define GL_DRAW_BUFFER                          0x0C01
+#define GL_DOUBLEBUFFER                         0x0C32
+#define GL_STEREO                               0x0C33
+#define GL_BITMAP                               0x1A00
+#define GL_COLOR                                0x1800
+#define GL_DEPTH                                0x1801
+#define GL_STENCIL                              0x1802
+#define GL_DITHER                               0x0BD0
+#define GL_RGB                                  0x1907
+#define GL_RGBA                                 0x1908
+
+/* Clipping */
+#define GL_CLIP_PLANE0                          0x3000
+#define GL_CLIP_PLANE1                          0x3001
+#define GL_CLIP_PLANE2                          0x3002
+#define GL_CLIP_PLANE3                          0x3003
+#define GL_CLIP_PLANE4                          0x3004
+#define GL_CLIP_PLANE5                          0x3005
+
+/* Depth buffer */
+#define GL_NEVER                                0x0200
+#define GL_LESS                                 0x0201
+#define GL_EQUAL                                0x0202
+#define GL_LEQUAL                               0x0203
+#define GL_GREATER                              0x0204
+#define GL_NOTEQUAL                             0x0205
+#define GL_GEQUAL                               0x0206
+#define GL_ALWAYS                               0x0207
+#define GL_DEPTH_TEST                           0x0B71
+#define GL_DEPTH_BITS                           0x0D56
+#define GL_DEPTH_CLEAR_VALUE                    0x0B73
+#define GL_DEPTH_FUNC                           0x0B74
+#define GL_DEPTH_RANGE                          0x0B70
+#define GL_DEPTH_WRITEMASK                      0x0B72
+#define GL_DEPTH_COMPONENT                      0x1902
+
+/* Evaluators */
+#define GL_AUTO_NORMAL                          0x0D80
+#define GL_MAP1_COLOR_4                         0x0D90
+#define GL_MAP1_GRID_DOMAIN                     0x0DD0
+#define GL_MAP1_GRID_SEGMENTS                   0x0DD1
+#define GL_MAP1_INDEX                           0x0D91
+#define GL_MAP1_NORMAL                          0x0D92
+#define GL_MAP1_TEXTURE_COORD_1                 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2                 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3                 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4                 0x0D96
+#define GL_MAP1_VERTEX_3                        0x0D97
+#define GL_MAP1_VERTEX_4                        0x0D98
+#define GL_MAP2_COLOR_4                         0x0DB0
+#define GL_MAP2_GRID_DOMAIN                     0x0DD2
+#define GL_MAP2_GRID_SEGMENTS                   0x0DD3
+#define GL_MAP2_INDEX                           0x0DB1
+#define GL_MAP2_NORMAL                          0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1                 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2                 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3                 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4                 0x0DB6
+#define GL_MAP2_VERTEX_3                        0x0DB7
+#define GL_MAP2_VERTEX_4                        0x0DB8
+#define GL_COEFF                                0x0A00
+#define GL_DOMAIN                               0x0A02
+#define GL_ORDER                                0x0A01
+
+/* Feedback */
+#define GL_2D                                   0x0600
+#define GL_3D                                   0x0601
+#define GL_3D_COLOR                             0x0602
+#define GL_3D_COLOR_TEXTURE                     0x0603
+#define GL_4D_COLOR_TEXTURE                     0x0604
+#define GL_POINT_TOKEN                          0x0701
+#define GL_LINE_TOKEN                           0x0702
+#define GL_LINE_RESET_TOKEN                     0x0707
+#define GL_POLYGON_TOKEN                        0x0703
+#define GL_BITMAP_TOKEN                         0x0704
+#define GL_DRAW_PIXEL_TOKEN                     0x0705
+#define GL_COPY_PIXEL_TOKEN                     0x0706
+#define GL_PASS_THROUGH_TOKEN                   0x0700
+#define GL_FEEDBACK_BUFFER_POINTER              0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE                 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE                 0x0DF2
+
+/* Fog */
+#define GL_FOG                                  0x0B60
+#define GL_FOG_MODE                             0x0B65
+#define GL_FOG_DENSITY                          0x0B62
+#define GL_FOG_COLOR                            0x0B66
+#define GL_FOG_INDEX                            0x0B61
+#define GL_FOG_START                            0x0B63
+#define GL_FOG_END                              0x0B64
+#define GL_LINEAR                               0x2601
+#define GL_EXP                                  0x0800
+#define GL_EXP2                                 0x0801
+
+/* Gets */
+#define GL_ATTRIB_STACK_DEPTH                   0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH            0x0BB1
+#define GL_COLOR_CLEAR_VALUE                    0x0C22
+#define GL_COLOR_WRITEMASK                      0x0C23
+#define GL_CURRENT_INDEX                        0x0B01
+#define GL_CURRENT_COLOR                        0x0B00
+#define GL_CURRENT_NORMAL                       0x0B02
+#define GL_CURRENT_RASTER_COLOR                 0x0B04
+#define GL_CURRENT_RASTER_DISTANCE              0x0B09
+#define GL_CURRENT_RASTER_INDEX                 0x0B05
+#define GL_CURRENT_RASTER_POSITION              0x0B07
+#define GL_CURRENT_RASTER_TEXTURE_COORDS        0x0B06
+#define GL_CURRENT_RASTER_POSITION_VALID        0x0B08
+#define GL_CURRENT_TEXTURE_COORDS               0x0B03
+#define GL_INDEX_CLEAR_VALUE                    0x0C20
+#define GL_INDEX_MODE                           0x0C30
+#define GL_INDEX_WRITEMASK                      0x0C21
+#define GL_MODELVIEW_MATRIX                     0x0BA6
+#define GL_MODELVIEW_STACK_DEPTH                0x0BA3
+#define GL_NAME_STACK_DEPTH                     0x0D70
+#define GL_PROJECTION_MATRIX                    0x0BA7
+#define GL_PROJECTION_STACK_DEPTH               0x0BA4
+#define GL_RENDER_MODE                          0x0C40
+#define GL_RGBA_MODE                            0x0C31
+#define GL_TEXTURE_MATRIX                       0x0BA8
+#define GL_TEXTURE_STACK_DEPTH                  0x0BA5
+#define GL_VIEWPORT                             0x0BA2
+
+/* Hints */
+#define GL_FOG_HINT                             0x0C54
+#define GL_LINE_SMOOTH_HINT                     0x0C52
+#define GL_PERSPECTIVE_CORRECTION_HINT          0x0C50
+#define GL_POINT_SMOOTH_HINT                    0x0C51
+#define GL_POLYGON_SMOOTH_HINT                  0x0C53
+#define GL_DONT_CARE                            0x1100
+#define GL_FASTEST                              0x1101
+#define GL_NICEST                               0x1102
+
+/* Implementation limits */
+#define GL_MAX_LIST_NESTING                     0x0B31
+#define GL_MAX_ATTRIB_STACK_DEPTH               0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH            0x0D36
+#define GL_MAX_NAME_STACK_DEPTH                 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH           0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH              0x0D39
+#define GL_MAX_EVAL_ORDER                       0x0D30
+#define GL_MAX_LIGHTS                           0x0D31
+#define GL_MAX_CLIP_PLANES                      0x0D32
+#define GL_MAX_TEXTURE_SIZE                     0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE                  0x0D34
+#define GL_MAX_VIEWPORT_DIMS                    0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH        0x0D3B
+
+/* Lighting */
+#define GL_LIGHTING                             0x0B50
+#define GL_LIGHT0                               0x4000
+#define GL_LIGHT1                               0x4001
+#define GL_LIGHT2                               0x4002
+#define GL_LIGHT3                               0x4003
+#define GL_LIGHT4                               0x4004
+#define GL_LIGHT5                               0x4005
+#define GL_LIGHT6                               0x4006
+#define GL_LIGHT7                               0x4007
+#define GL_SPOT_EXPONENT                        0x1205
+#define GL_SPOT_CUTOFF                          0x1206
+#define GL_CONSTANT_ATTENUATION                 0x1207
+#define GL_LINEAR_ATTENUATION                   0x1208
+#define GL_QUADRATIC_ATTENUATION                0x1209
+#define GL_AMBIENT                              0x1200
+#define GL_DIFFUSE                              0x1201
+#define GL_SPECULAR                             0x1202
+#define GL_SHININESS                            0x1601
+#define GL_EMISSION                             0x1600
+#define GL_POSITION                             0x1203
+#define GL_SPOT_DIRECTION                       0x1204
+#define GL_AMBIENT_AND_DIFFUSE                  0x1602
+#define GL_COLOR_INDEXES                        0x1603
+#define GL_LIGHT_MODEL_TWO_SIDE                 0x0B52
+#define GL_LIGHT_MODEL_LOCAL_VIEWER             0x0B51
+#define GL_LIGHT_MODEL_AMBIENT                  0x0B53
+#define GL_FRONT_AND_BACK                       0x0408
+#define GL_SHADE_MODEL                          0x0B54
+#define GL_FLAT                                 0x1D00
+#define GL_SMOOTH                               0x1D01
+#define GL_COLOR_MATERIAL                       0x0B57
+#define GL_COLOR_MATERIAL_FACE                  0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER             0x0B56
+#define GL_NORMALIZE                            0x0BA1
+
+/* Lines */
+#define GL_LINE_SMOOTH                          0x0B20
+#define GL_LINE_STIPPLE                         0x0B24
+#define GL_LINE_STIPPLE_PATTERN                 0x0B25
+#define GL_LINE_STIPPLE_REPEAT                  0x0B26
+#define GL_LINE_WIDTH                           0x0B21
+#define GL_LINE_WIDTH_GRANULARITY               0x0B23
+#define GL_LINE_WIDTH_RANGE                     0x0B22
+
+/* Logic Ops */
+#define GL_LOGIC_OP                             0x0BF1
+#define GL_INDEX_LOGIC_OP                       0x0BF1
+#define GL_COLOR_LOGIC_OP                       0x0BF2
+#define GL_LOGIC_OP_MODE                        0x0BF0
+#define GL_CLEAR                                0x1500
+#define GL_SET                                  0x150F
+#define GL_COPY                                 0x1503
+#define GL_COPY_INVERTED                        0x150C
+#define GL_NOOP                                 0x1505
+#define GL_INVERT                               0x150A
+#define GL_AND                                  0x1501
+#define GL_NAND                                 0x150E
+#define GL_OR                                   0x1507
+#define GL_NOR                                  0x1508
+#define GL_XOR                                  0x1506
+#define GL_EQUIV                                0x1509
+#define GL_AND_REVERSE                          0x1502
+#define GL_AND_INVERTED                         0x1504
+#define GL_OR_REVERSE                           0x150B
+#define GL_OR_INVERTED                          0x150D
+
+/* Matrix Mode */
+#define GL_MATRIX_MODE                          0x0BA0
+#define GL_MODELVIEW                            0x1700
+#define GL_PROJECTION                           0x1701
+#define GL_TEXTURE                              0x1702
+
+/* Pixel Mode / Transfer */
+#define GL_MAP_COLOR                            0x0D10
+#define GL_MAP_STENCIL                          0x0D11
+#define GL_INDEX_SHIFT                          0x0D12
+#define GL_INDEX_OFFSET                         0x0D13
+#define GL_RED_SCALE                            0x0D14
+#define GL_RED_BIAS                             0x0D15
+#define GL_GREEN_SCALE                          0x0D18
+#define GL_GREEN_BIAS                           0x0D19
+#define GL_BLUE_SCALE                           0x0D1A
+#define GL_BLUE_BIAS                            0x0D1B
+#define GL_ALPHA_SCALE                          0x0D1C
+#define GL_ALPHA_BIAS                           0x0D1D
+#define GL_DEPTH_SCALE                          0x0D1E
+#define GL_DEPTH_BIAS                           0x0D1F
+#define GL_PIXEL_MAP_S_TO_S_SIZE                0x0CB1
+#define GL_PIXEL_MAP_I_TO_I_SIZE                0x0CB0
+#define GL_PIXEL_MAP_I_TO_R_SIZE                0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE                0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE                0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE                0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE                0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE                0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE                0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE                0x0CB9
+#define GL_PIXEL_MAP_S_TO_S                     0x0C71
+#define GL_PIXEL_MAP_I_TO_I                     0x0C70
+#define GL_PIXEL_MAP_I_TO_R                     0x0C72
+#define GL_PIXEL_MAP_I_TO_G                     0x0C73
+#define GL_PIXEL_MAP_I_TO_B                     0x0C74
+#define GL_PIXEL_MAP_I_TO_A                     0x0C75
+#define GL_PIXEL_MAP_R_TO_R                     0x0C76
+#define GL_PIXEL_MAP_G_TO_G                     0x0C77
+#define GL_PIXEL_MAP_B_TO_B                     0x0C78
+#define GL_PIXEL_MAP_A_TO_A                     0x0C79
+#define GL_PACK_ALIGNMENT                       0x0D05
+#define GL_PACK_LSB_FIRST                       0x0D01
+#define GL_PACK_ROW_LENGTH                      0x0D02
+#define GL_PACK_SKIP_PIXELS                     0x0D04
+#define GL_PACK_SKIP_ROWS                       0x0D03
+#define GL_PACK_SWAP_BYTES                      0x0D00
+#define GL_UNPACK_ALIGNMENT                     0x0CF5
+#define GL_UNPACK_LSB_FIRST                     0x0CF1
+#define GL_UNPACK_ROW_LENGTH                    0x0CF2
+#define GL_UNPACK_SKIP_PIXELS                   0x0CF4
+#define GL_UNPACK_SKIP_ROWS                     0x0CF3
+#define GL_UNPACK_SWAP_BYTES                    0x0CF0
+#define GL_ZOOM_X                               0x0D16
+#define GL_ZOOM_Y                               0x0D17
+
+/* Points */
+#define GL_POINT_SMOOTH                         0x0B10
+#define GL_POINT_SIZE                           0x0B11
+#define GL_POINT_SIZE_GRANULARITY               0x0B13
+#define GL_POINT_SIZE_RANGE                     0x0B12
+
+/* Polygons */
+#define GL_POINT                                0x1B00
+#define GL_LINE                                 0x1B01
+#define GL_FILL                                 0x1B02
+#define GL_CW                                   0x0900
+#define GL_CCW                                  0x0901
+#define GL_FRONT                                0x0404
+#define GL_BACK                                 0x0405
+#define GL_POLYGON_MODE                         0x0B40
+#define GL_POLYGON_SMOOTH                       0x0B41
+#define GL_POLYGON_STIPPLE                      0x0B42
+#define GL_EDGE_FLAG                            0x0B43
+#define GL_CULL_FACE                            0x0B44
+#define GL_CULL_FACE_MODE                       0x0B45
+#define GL_FRONT_FACE                           0x0B46
+#define GL_POLYGON_OFFSET_FACTOR                0x8038
+#define GL_POLYGON_OFFSET_UNITS                 0x2A00
+#define GL_POLYGON_OFFSET_POINT                 0x2A01
+#define GL_POLYGON_OFFSET_LINE                  0x2A02
+#define GL_POLYGON_OFFSET_FILL                  0x8037
+
+/* Primitives */
+#define GL_POINTS                               0x0000
+#define GL_LINES                                0x0001
+#define GL_LINE_LOOP                            0x0002
+#define GL_LINE_STRIP                           0x0003
+#define GL_TRIANGLES                            0x0004
+#define GL_TRIANGLE_STRIP                       0x0005
+#define GL_TRIANGLE_FAN                         0x0006
+#define GL_QUADS                                0x0007
+#define GL_QUAD_STRIP                           0x0008
+#define GL_POLYGON                              0x0009
+
+/* Push/Pop bits */
+#define GL_CURRENT_BIT                          0x00000001
+#define GL_POINT_BIT                            0x00000002
+#define GL_LINE_BIT                             0x00000004
+#define GL_POLYGON_BIT                          0x00000008
+#define GL_POLYGON_STIPPLE_BIT                  0x00000010
+#define GL_PIXEL_MODE_BIT                       0x00000020
+#define GL_LIGHTING_BIT                         0x00000040
+#define GL_FOG_BIT                              0x00000080
+#define GL_DEPTH_BUFFER_BIT                     0x00000100
+#define GL_ACCUM_BUFFER_BIT                     0x00000200
+#define GL_STENCIL_BUFFER_BIT                   0x00000400
+#define GL_VIEWPORT_BIT                         0x00000800
+#define GL_TRANSFORM_BIT                        0x00001000
+#define GL_ENABLE_BIT                           0x00002000
+#define GL_COLOR_BUFFER_BIT                     0x00004000
+#define GL_HINT_BIT                             0x00008000
+#define GL_EVAL_BIT                             0x00010000
+#define GL_LIST_BIT                             0x00020000
+#define GL_TEXTURE_BIT                          0x00040000
+#define GL_SCISSOR_BIT                          0x00080000
+#define GL_ALL_ATTRIB_BITS                      0x000FFFFF
+
+/* Render Mode */
+#define GL_FEEDBACK                             0x1C01
+#define GL_RENDER                               0x1C00
+#define GL_SELECT                               0x1C02
+
+/* Scissor box */
+#define GL_SCISSOR_TEST                         0x0C11
+#define GL_SCISSOR_BOX                          0x0C10
+
+/* Stencil */
+#define GL_STENCIL_TEST                         0x0B90
+#define GL_STENCIL_WRITEMASK                    0x0B98
+#define GL_STENCIL_BITS                         0x0D57
+#define GL_STENCIL_FUNC                         0x0B92
+#define GL_STENCIL_VALUE_MASK                   0x0B93
+#define GL_STENCIL_REF                          0x0B97
+#define GL_STENCIL_FAIL                         0x0B94
+#define GL_STENCIL_PASS_DEPTH_PASS              0x0B96
+#define GL_STENCIL_PASS_DEPTH_FAIL              0x0B95
+#define GL_STENCIL_CLEAR_VALUE                  0x0B91
+#define GL_STENCIL_INDEX                        0x1901
+#define GL_KEEP                                 0x1E00
+#define GL_REPLACE                              0x1E01
+#define GL_INCR                                 0x1E02
+#define GL_DECR                                 0x1E03
+
+/* Texture mapping */
+#define GL_TEXTURE_ENV                          0x2300
+#define GL_TEXTURE_ENV_MODE                     0x2200
+#define GL_TEXTURE_1D                           0x0DE0
+#define GL_TEXTURE_2D                           0x0DE1
+#define GL_TEXTURE_WRAP_S                       0x2802
+#define GL_TEXTURE_WRAP_T                       0x2803
+#define GL_TEXTURE_MAG_FILTER                   0x2800
+#define GL_TEXTURE_MIN_FILTER                   0x2801
+#define GL_TEXTURE_ENV_COLOR                    0x2201
+#define GL_TEXTURE_GEN_S                        0x0C60
+#define GL_TEXTURE_GEN_T                        0x0C61
+#define GL_TEXTURE_GEN_MODE                     0x2500
+#define GL_TEXTURE_BORDER_COLOR                 0x1004
+#define GL_TEXTURE_WIDTH                        0x1000
+#define GL_TEXTURE_HEIGHT                       0x1001
+#define GL_TEXTURE_BORDER                       0x1005
+#define GL_TEXTURE_COMPONENTS                   0x1003
+#define GL_TEXTURE_RED_SIZE                     0x805C
+#define GL_TEXTURE_GREEN_SIZE                   0x805D
+#define GL_TEXTURE_BLUE_SIZE                    0x805E
+#define GL_TEXTURE_ALPHA_SIZE                   0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE               0x8060
+#define GL_TEXTURE_INTENSITY_SIZE               0x8061
+#define GL_NEAREST_MIPMAP_NEAREST               0x2700
+#define GL_NEAREST_MIPMAP_LINEAR                0x2702
+#define GL_LINEAR_MIPMAP_NEAREST                0x2701
+#define GL_LINEAR_MIPMAP_LINEAR                 0x2703
+#define GL_OBJECT_LINEAR                        0x2401
+#define GL_OBJECT_PLANE                         0x2501
+#define GL_EYE_LINEAR                           0x2400
+#define GL_EYE_PLANE                            0x2502
+#define GL_SPHERE_MAP                           0x2402
+#define GL_DECAL                                0x2101
+#define GL_MODULATE                             0x2100
+#define GL_NEAREST                              0x2600
+#define GL_REPEAT                               0x2901
+#define GL_CLAMP                                0x2900
+#define GL_S                                    0x2000
+#define GL_T                                    0x2001
+#define GL_R                                    0x2002
+#define GL_Q                                    0x2003
+#define GL_TEXTURE_GEN_R                        0x0C62
+#define GL_TEXTURE_GEN_Q                        0x0C63
+
+/* Vertex Arrays */
+#define GL_VERTEX_ARRAY                         0x8074
+#define GL_NORMAL_ARRAY                         0x8075
+#define GL_COLOR_ARRAY                          0x8076
+#define GL_INDEX_ARRAY                          0x8077
+#define GL_TEXTURE_COORD_ARRAY                  0x8078
+#define GL_EDGE_FLAG_ARRAY                      0x8079
+#define GL_VERTEX_ARRAY_SIZE                    0x807A
+#define GL_VERTEX_ARRAY_TYPE                    0x807B
+#define GL_VERTEX_ARRAY_STRIDE                  0x807C
+#define GL_NORMAL_ARRAY_TYPE                    0x807E
+#define GL_NORMAL_ARRAY_STRIDE                  0x807F
+#define GL_COLOR_ARRAY_SIZE                     0x8081
+#define GL_COLOR_ARRAY_TYPE                     0x8082
+#define GL_COLOR_ARRAY_STRIDE                   0x8083
+#define GL_INDEX_ARRAY_TYPE                     0x8085
+#define GL_INDEX_ARRAY_STRIDE                   0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE             0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE             0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE           0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE               0x808C
+#define GL_VERTEX_ARRAY_POINTER                 0x808E
+#define GL_NORMAL_ARRAY_POINTER                 0x808F
+#define GL_COLOR_ARRAY_POINTER                  0x8090
+#define GL_INDEX_ARRAY_POINTER                  0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER          0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER              0x8093
+#define GL_V2F                                  0x2A20
+#define GL_V3F                                  0x2A21
+#define GL_C4UB_V2F                             0x2A22
+#define GL_C4UB_V3F                             0x2A23
+#define GL_C3F_V3F                              0x2A24
+#define GL_N3F_V3F                              0x2A25
+#define GL_C4F_N3F_V3F                          0x2A26
+#define GL_T2F_V3F                              0x2A27
+#define GL_T4F_V4F                              0x2A28
+#define GL_T2F_C4UB_V3F                         0x2A29
+#define GL_T2F_C3F_V3F                          0x2A2A
+#define GL_T2F_N3F_V3F                          0x2A2B
+#define GL_T2F_C4F_N3F_V3F                      0x2A2C
+#define GL_T4F_C4F_N3F_V4F                      0x2A2D
+
+/* OpenGL 1.1 */
+#define GL_PROXY_TEXTURE_1D                     0x8063
+#define GL_PROXY_TEXTURE_2D                     0x8064
+#define GL_TEXTURE_PRIORITY                     0x8066
+#define GL_TEXTURE_RESIDENT                     0x8067
+#define GL_TEXTURE_BINDING_1D                   0x8068
+#define GL_TEXTURE_BINDING_2D                   0x8069
+#define GL_TEXTURE_INTERNAL_FORMAT              0x1003
+#define GL_ALPHA4                               0x803B
+#define GL_ALPHA8                               0x803C
+#define GL_ALPHA12                              0x803D
+#define GL_ALPHA16                              0x803E
+#define GL_LUMINANCE4                           0x803F
+#define GL_LUMINANCE8                           0x8040
+#define GL_LUMINANCE12                          0x8041
+#define GL_LUMINANCE16                          0x8042
+#define GL_LUMINANCE4_ALPHA4                    0x8043
+#define GL_LUMINANCE6_ALPHA2                    0x8044
+#define GL_LUMINANCE8_ALPHA8                    0x8045
+#define GL_LUMINANCE12_ALPHA4                   0x8046
+#define GL_LUMINANCE12_ALPHA12                  0x8047
+#define GL_LUMINANCE16_ALPHA16                  0x8048
+#define GL_INTENSITY                            0x8049
+#define GL_INTENSITY4                           0x804A
+#define GL_INTENSITY8                           0x804B
+#define GL_INTENSITY12                          0x804C
+#define GL_INTENSITY16                          0x804D
+#define GL_R3_G3_B2                             0x2A10
+#define GL_RGB4                                 0x804F
+#define GL_RGB5                                 0x8050
+#define GL_RGB8                                 0x8051
+#define GL_RGB10                                0x8052
+#define GL_RGB12                                0x8053
+#define GL_RGB16                                0x8054
+#define GL_RGBA2                                0x8055
+#define GL_RGBA4                                0x8056
+#define GL_RGB5_A1                              0x8057
+#define GL_RGBA8                                0x8058
+#define GL_RGB10_A2                             0x8059
+#define GL_RGBA12                               0x805A
+#define GL_RGBA16                               0x805B
+#define GL_CLIENT_PIXEL_STORE_BIT               0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT              0x00000002
+#define GL_ALL_CLIENT_ATTRIB_BITS               0xFFFFFFFF
+#define GL_CLIENT_ALL_ATTRIB_BITS               0xFFFFFFFF
+
+/* OpenGL 1.2 constants */
+#define GL_PACK_SKIP_IMAGES               0x806B
+#define GL_PACK_IMAGE_HEIGHT              0x806C
+#define GL_UNPACK_SKIP_IMAGES             0x806D
+#define GL_UNPACK_IMAGE_HEIGHT            0x806E
+#define GL_TEXTURE_3D                     0x806F
+#define GL_PROXY_TEXTURE_3D               0x8070
+#define GL_TEXTURE_DEPTH                  0x8071
+#define GL_TEXTURE_WRAP_R                 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE            0x8073
+#define GL_BGR                            0x80E0
+#define GL_BGRA                           0x80E1
+#define GL_UNSIGNED_BYTE_3_3_2            0x8032
+#define GL_UNSIGNED_BYTE_2_3_3_REV        0x8362
+#define GL_UNSIGNED_SHORT_5_6_5           0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV       0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV     0x8365
+#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV     0x8366
+#define GL_UNSIGNED_INT_8_8_8_8           0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_REV       0x8367
+#define GL_UNSIGNED_INT_10_10_10_2        0x8036
+#define GL_UNSIGNED_INT_2_10_10_10_REV    0x8368
+#define GL_RESCALE_NORMAL                 0x803A
+#define GL_TEXTURE_BINDING_3D             0x806A
+#define GL_LIGHT_MODEL_COLOR_CONTROL      0x81F8
+#define GL_SINGLE_COLOR                   0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR        0x81FA
+#define GL_CLAMP_TO_EDGE                  0x812F
+#define GL_TEXTURE_MIN_LOD                0x813A
+#define GL_TEXTURE_MAX_LOD                0x813B
+#define GL_TEXTURE_BASE_LEVEL             0x813C
+#define GL_TEXTURE_MAX_LEVEL              0x813D
+#define GL_MAX_ELEMENTS_VERTICES          0x80E8
+#define GL_MAX_ELEMENTS_INDICES           0x80E9
+#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
+
+/* OpenGL 1.3 constants */
+#define GL_ACTIVE_TEXTURE                 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1
+#define GL_MAX_TEXTURE_UNITS              0x84E2
+#define GL_TEXTURE0                       0x84C0
+#define GL_TEXTURE1                       0x84C1
+#define GL_TEXTURE2                       0x84C2
+#define GL_TEXTURE3                       0x84C3
+#define GL_TEXTURE4                       0x84C4
+#define GL_TEXTURE5                       0x84C5
+#define GL_TEXTURE6                       0x84C6
+#define GL_TEXTURE7                       0x84C7
+#define GL_TEXTURE8                       0x84C8
+#define GL_TEXTURE9                       0x84C9
+#define GL_TEXTURE10                      0x84CA
+#define GL_TEXTURE11                      0x84CB
+#define GL_TEXTURE12                      0x84CC
+#define GL_TEXTURE13                      0x84CD
+#define GL_TEXTURE14                      0x84CE
+#define GL_TEXTURE15                      0x84CF
+#define GL_TEXTURE16                      0x84D0
+#define GL_TEXTURE17                      0x84D1
+#define GL_TEXTURE18                      0x84D2
+#define GL_TEXTURE19                      0x84D3
+#define GL_TEXTURE20                      0x84D4
+#define GL_TEXTURE21                      0x84D5
+#define GL_TEXTURE22                      0x84D6
+#define GL_TEXTURE23                      0x84D7
+#define GL_TEXTURE24                      0x84D8
+#define GL_TEXTURE25                      0x84D9
+#define GL_TEXTURE26                      0x84DA
+#define GL_TEXTURE27                      0x84DB
+#define GL_TEXTURE28                      0x84DC
+#define GL_TEXTURE29                      0x84DD
+#define GL_TEXTURE30                      0x84DE
+#define GL_TEXTURE31                      0x84DF
+#define GL_NORMAL_MAP                     0x8511
+#define GL_REFLECTION_MAP                 0x8512
+#define GL_TEXTURE_CUBE_MAP               0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP         0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C
+#define GL_COMBINE                        0x8570
+#define GL_COMBINE_RGB                    0x8571
+#define GL_COMBINE_ALPHA                  0x8572
+#define GL_RGB_SCALE                      0x8573
+#define GL_ADD_SIGNED                     0x8574
+#define GL_INTERPOLATE                    0x8575
+#define GL_CONSTANT                       0x8576
+#define GL_PRIMARY_COLOR                  0x8577
+#define GL_PREVIOUS                       0x8578
+#define GL_SOURCE0_RGB                    0x8580
+#define GL_SOURCE1_RGB                    0x8581
+#define GL_SOURCE2_RGB                    0x8582
+#define GL_SOURCE0_ALPHA                  0x8588
+#define GL_SOURCE1_ALPHA                  0x8589
+#define GL_SOURCE2_ALPHA                  0x858A
+#define GL_OPERAND0_RGB                   0x8590
+#define GL_OPERAND1_RGB                   0x8591
+#define GL_OPERAND2_RGB                   0x8592
+#define GL_OPERAND0_ALPHA                 0x8598
+#define GL_OPERAND1_ALPHA                 0x8599
+#define GL_OPERAND2_ALPHA                 0x859A
+#define GL_SUBTRACT                       0x84E7
+#define GL_TRANSPOSE_MODELVIEW_MATRIX     0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX    0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX       0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX         0x84E6
+#define GL_COMPRESSED_ALPHA               0x84E9
+#define GL_COMPRESSED_LUMINANCE           0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA     0x84EB
+#define GL_COMPRESSED_INTENSITY           0x84EC
+#define GL_COMPRESSED_RGB                 0x84ED
+#define GL_COMPRESSED_RGBA                0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT       0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE  0x86A0
+#define GL_TEXTURE_COMPRESSED             0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3
+#define GL_DOT3_RGB                       0x86AE
+#define GL_DOT3_RGBA                      0x86AF
+#define GL_CLAMP_TO_BORDER                0x812D
+#define GL_MULTISAMPLE                    0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE            0x809F
+#define GL_SAMPLE_COVERAGE                0x80A0
+#define GL_SAMPLE_BUFFERS                 0x80A8
+#define GL_SAMPLES                        0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT         0x80AB
+#define GL_MULTISAMPLE_BIT                0x20000000
+
+/* GL_VERSION_2_0 */
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+#define GL_BLEND_EQUATION_RGB                               GL_BLEND_EQUATION
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED                      0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE                         0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE                       0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE                         0x8625
+#define GL_CURRENT_VERTEX_ATTRIB                            0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE                        0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE                          0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER                      0x8645
+#define GL_STENCIL_BACK_FUNC                                0x8800
+#define GL_STENCIL_BACK_FAIL                                0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL                     0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS                     0x8803
+#define GL_MAX_DRAW_BUFFERS                                 0x8824
+#define GL_DRAW_BUFFER0                                     0x8825
+#define GL_DRAW_BUFFER1                                     0x8826
+#define GL_DRAW_BUFFER2                                     0x8827
+#define GL_DRAW_BUFFER3                                     0x8828
+#define GL_DRAW_BUFFER4                                     0x8829
+#define GL_DRAW_BUFFER5                                     0x882a
+#define GL_DRAW_BUFFER6                                     0x882b
+#define GL_DRAW_BUFFER7                                     0x882c
+#define GL_DRAW_BUFFER8                                     0x882d
+#define GL_DRAW_BUFFER9                                     0x882e
+#define GL_DRAW_BUFFER10                                    0x882f
+#define GL_DRAW_BUFFER11                                    0x8830
+#define GL_DRAW_BUFFER12                                    0x8831
+#define GL_DRAW_BUFFER13                                    0x8832
+#define GL_DRAW_BUFFER14                                    0x8833
+#define GL_DRAW_BUFFER15                                    0x8834
+#define GL_BLEND_EQUATION_ALPHA                             0x883d
+#define GL_POINT_SPRITE                                     0x8861
+#define GL_COORD_REPLACE                                    0x8862
+#define GL_MAX_VERTEX_ATTRIBS                               0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED                   0x886a
+#define GL_MAX_TEXTURE_COORDS                               0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS                          0x8872
+#define GL_FRAGMENT_SHADER                                  0x8b30
+#define GL_VERTEX_SHADER                                    0x8b31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS                  0x8b49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS                    0x8b4a
+#define GL_MAX_VARYING_FLOATS                               0x8b4b
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS                   0x8b4c
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS                 0x8b4d
+#define GL_SHADER_TYPE                                      0x8b4f
+#define GL_FLOAT_VEC2                                       0x8b50
+#define GL_FLOAT_VEC3                                       0x8b51
+#define GL_FLOAT_VEC4                                       0x8b52
+#define GL_INT_VEC2                                         0x8b53
+#define GL_INT_VEC3                                         0x8b54
+#define GL_INT_VEC4                                         0x8b55
+#define GL_BOOL                                             0x8b56
+#define GL_BOOL_VEC2                                        0x8b57
+#define GL_BOOL_VEC3                                        0x8b58
+#define GL_BOOL_VEC4                                        0x8b59
+#define GL_FLOAT_MAT2                                       0x8b5a
+#define GL_FLOAT_MAT3                                       0x8b5b
+#define GL_FLOAT_MAT4                                       0x8b5c
+#define GL_SAMPLER_1D                                       0x8b5d
+#define GL_SAMPLER_2D                                       0x8b5e
+#define GL_SAMPLER_3D                                       0x8b5f
+#define GL_SAMPLER_CUBE                                     0x8b60
+#define GL_SAMPLER_1D_SHADOW                                0x8b61
+#define GL_SAMPLER_2D_SHADOW                                0x8b62
+#define GL_DELETE_STATUS                                    0x8b80
+#define GL_COMPILE_STATUS                                   0x8b81
+#define GL_LINK_STATUS                                      0x8b82
+#define GL_VALIDATE_STATUS                                  0x8b83
+#define GL_INFO_LOG_LENGTH                                  0x8b84
+#define GL_ATTACHED_SHADERS                                 0x8b85
+#define GL_ACTIVE_UNIFORMS                                  0x8b86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH                        0x8b87
+#define GL_SHADER_SOURCE_LENGTH                             0x8b88
+#define GL_ACTIVE_ATTRIBUTES                                0x8b89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH                      0x8b8a
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT                  0x8b8b
+#define GL_SHADING_LANGUAGE_VERSION                         0x8b8c
+#define GL_CURRENT_PROGRAM                                  0x8b8d
+#define GL_POINT_SPRITE_COORD_ORIGIN                        0x8ca0
+#define GL_LOWER_LEFT                                       0x8ca1
+#define GL_UPPER_LEFT                                       0x8ca2
+#define GL_STENCIL_BACK_REF                                 0x8ca3
+#define GL_STENCIL_BACK_VALUE_MASK                          0x8ca4
+#define GL_STENCIL_BACK_WRITEMASK                           0x8ca5
+typedef char GLchar;
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha);
+typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs);
+typedef void (WINE_GLAPI *PGLFNSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (WINE_GLAPI *PGLFNSTENCILFUNCSEPARATEPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (WINE_GLAPI *PGLFNSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask);
+typedef void (WINE_GLAPI *PGLFNATTACHSHADERPROC)(GLuint program, GLuint shader);
+typedef void (WINE_GLAPI *PGLFNBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNCOMPILESHADERPROC)(GLuint shader);
+typedef GLuint (WINE_GLAPI *PGLFNCREATEPROGRAMPROC)(void);
+typedef GLuint (WINE_GLAPI *PGLFNCREATESHADERPROC)(GLenum type);
+typedef void (WINE_GLAPI *PGLFNDELETEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNDELETESHADERPROC)(GLuint shader);
+typedef void (WINE_GLAPI *PGLFNDETACHSHADERPROC)(GLuint program, GLuint shader);
+typedef void (WINE_GLAPI *PGLFNDISABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNENABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNGETACTIVEATTRIBPROC)(GLuint program,
+        GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETACTIVEUNIFORMPROC)(GLuint program,
+        GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+typedef GLint (WINE_GLAPI *PGLFNGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMINFOLOGPROC)(GLuint program,
+        GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (WINE_GLAPI *PGLFNGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (WINE_GLAPI *PGLFNGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (WINE_GLAPI *PGLFNGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (WINE_GLAPI *PGLFNISPROGRAMPROC)(GLuint program);
+typedef GLboolean (WINE_GLAPI *PGLFNISSHADERPROC)(GLuint shader);
+typedef void (WINE_GLAPI *PGLFNLINKPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNSHADERSOURCEPROC)(GLuint shader,
+        GLsizei count, const GLchar* *string, const GLint *length);
+typedef void (WINE_GLAPI *PGLFNUSEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1FPROC)(GLint location, GLfloat v0);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1IPROC)(GLint location, GLint v0);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2IPROC)(GLint location, GLint v0, GLint v1);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX2FVPROC)(GLint location,
+        GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX3FVPROC)(GLint location,
+        GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX4FVPROC)(GLint location,
+        GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNVALIDATEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DPROC)(GLuint index, GLdouble x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FPROC)(GLuint index, GLfloat x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SPROC)(GLuint index, GLshort x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBPOINTERPROC)(GLuint index,
+        GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+
+void (WINE_GLAPI *glAccum)(GLenum op, GLfloat value) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glAlphaFunc)(GLenum func, GLclampf ref) DECLSPEC_HIDDEN;
+GLboolean (WINE_GLAPI *glAreTexturesResident)(GLsizei n, const GLuint *textures, GLboolean *residences) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glArrayElement)(GLint i) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glBegin)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glBindTexture)(GLenum target, GLuint texture) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glBitmap)(GLsizei width, GLsizei height, GLfloat xorig,
+        GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glBlendFunc)(GLenum sfactor, GLenum dfactor) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCallList)(GLuint list) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCallLists)(GLsizei n, GLenum type, const GLvoid *lists) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClear)(GLbitfield mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClearDepth)(GLclampd depth) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClearIndex)(GLfloat c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClearStencil)(GLint s) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glClipPlane)(GLenum plane, const GLdouble *equation) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3b)(GLbyte red, GLbyte green, GLbyte blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3bv)(const GLbyte *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3d)(GLdouble red, GLdouble green, GLdouble blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3f)(GLfloat red, GLfloat green, GLfloat blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3i)(GLint red, GLint green, GLint blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3s)(GLshort red, GLshort green, GLshort blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3ub)(GLubyte red, GLubyte green, GLubyte blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3ubv)(const GLubyte *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3ui)(GLuint red, GLuint green, GLuint blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3uiv)(const GLuint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3us)(GLushort red, GLushort green, GLushort blue) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor3usv)(const GLushort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4b)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4bv)(const GLbyte *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4d)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4i)(GLint red, GLint green, GLint blue, GLint alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4s)(GLshort red, GLshort green, GLshort blue, GLshort alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4ubv)(const GLubyte *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4uiv)(const GLuint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColor4usv)(const GLushort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColorMaterial)(GLenum face, GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCopyPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCopyTexImage1D)(GLenum target, GLint level,
+        GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCopyTexImage2D)(GLenum target, GLint level,
+        GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCopyTexSubImage1D)(GLenum target, GLint level,
+        GLint xoffset, GLint x, GLint y, GLsizei width) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCopyTexSubImage2D)(GLenum target, GLint level,
+        GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glCullFace)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDeleteLists)(GLuint list, GLsizei range) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDeleteTextures)(GLsizei n, const GLuint *textures) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDepthFunc)(GLenum func) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDepthMask)(GLboolean flag) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDepthRange)(GLclampd nearParam, GLclampd farParam) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDisable)(GLenum cap) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDisableWINE)(GLenum cap) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDisableClientState)(GLenum array) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDrawArrays)(GLenum mode, GLint first, GLsizei count) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDrawBuffer)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glDrawPixels)(GLsizei width, GLsizei height, GLenum format,
+        GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEdgeFlag)(GLboolean flag) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEdgeFlagPointer)(GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEdgeFlagv)(const GLboolean *flag) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEnable)(GLenum cap) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEnableWINE)(GLenum cap) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEnableClientState)(GLenum array) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEnd)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEndList)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord1d)(GLdouble u) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord1dv)(const GLdouble *u) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord1f)(GLfloat u) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord1fv)(const GLfloat *u) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord2d)(GLdouble u, GLdouble v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord2dv)(const GLdouble *u) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord2f)(GLfloat u, GLfloat v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalCoord2fv)(const GLfloat *u) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalMesh1)(GLenum mode, GLint i1, GLint i2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalPoint1)(GLint i) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glEvalPoint2)(GLint i, GLint j) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFeedbackBuffer)(GLsizei size, GLenum type, GLfloat *buffer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFogf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFogfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFogi)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFogiv)(GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFrontFace)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glFrustum)(GLdouble left, GLdouble right, GLdouble bottom,
+        GLdouble top, GLdouble zNear, GLdouble zFar) DECLSPEC_HIDDEN;
+GLuint (WINE_GLAPI *glGenLists)(GLsizei range) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGenTextures)(GLsizei n, GLuint *textures) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetBooleanv)(GLenum pname, GLboolean *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetClipPlane)(GLenum plane, GLdouble *equation) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetDoublev)(GLenum pname, GLdouble *params) DECLSPEC_HIDDEN;
+GLenum (WINE_GLAPI *glGetError)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetFloatv)(GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetIntegerv)(GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetLightfv)(GLenum light, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetLightiv)(GLenum light, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetMapdv)(GLenum target, GLenum query, GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetMapfv)(GLenum target, GLenum query, GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetMapiv)(GLenum target, GLenum query, GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetMaterialfv)(GLenum face, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetMaterialiv)(GLenum face, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetPixelMapfv)(GLenum map, GLfloat *values) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetPixelMapuiv)(GLenum map, GLuint *values) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetPixelMapusv)(GLenum map, GLushort *values) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetPointerv)(GLenum pname, GLvoid **params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetPolygonStipple)(GLubyte *mask) DECLSPEC_HIDDEN;
+const GLubyte * (WINE_GLAPI *glGetString)(GLenum name) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexEnvfv)(GLenum target, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexEnviv)(GLenum target, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexGendv)(GLenum coord, GLenum pname, GLdouble *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexGenfv)(GLenum coord, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexGeniv)(GLenum coord, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexImage)(GLenum target, GLint level, GLenum format,
+        GLenum type, GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glGetTexParameteriv)(GLenum target, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glHint)(GLenum target, GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexMask)(GLuint mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexPointer)(GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexd)(GLdouble c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexdv)(const GLdouble *c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexf)(GLfloat c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexfv)(const GLfloat *c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexi)(GLint c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexiv)(const GLint *c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexs)(GLshort c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexsv)(const GLshort *c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexub)(GLubyte c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glIndexubv)(const GLubyte *c) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glInitNames)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glInterleavedArrays)(GLenum format, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+GLboolean (WINE_GLAPI *glIsEnabled)(GLenum cap) DECLSPEC_HIDDEN;
+GLboolean (WINE_GLAPI *glIsList)(GLuint list) DECLSPEC_HIDDEN;
+GLboolean (WINE_GLAPI *glIsTexture)(GLuint texture) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightModelf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightModelfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightModeli)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightModeliv)(GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightf)(GLenum light, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightfv)(GLenum light, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLighti)(GLenum light, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLightiv)(GLenum light, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLineStipple)(GLint factor, GLushort pattern) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLineWidth)(GLfloat width) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glListBase)(GLuint base) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLoadIdentity)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLoadMatrixd)(const GLdouble *m) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLoadMatrixf)(const GLfloat *m) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLoadName)(GLuint name) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glLogicOp)(GLenum opcode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMap1d)(GLenum target, GLdouble u1, GLdouble u2,
+        GLint stride, GLint order, const GLdouble *points) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMap1f)(GLenum target, GLfloat u1, GLfloat u2, GLint stride,
+        GLint order, const GLfloat *points) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMap2d)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
+        GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMap2f)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
+        GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMapGrid1d)(GLint un, GLdouble u1, GLdouble u2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMapGrid1f)(GLint un, GLfloat u1, GLfloat u2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMapGrid2d)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMapGrid2f)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMaterialf)(GLenum face, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMaterialfv)(GLenum face, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMateriali)(GLenum face, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMaterialiv)(GLenum face, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMatrixMode)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMultMatrixd)(const GLdouble *m) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glMultMatrixf)(const GLfloat *m) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNewList)(GLuint list, GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3b)(GLbyte nx, GLbyte ny, GLbyte nz) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3bv)(const GLbyte *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3d)(GLdouble nx, GLdouble ny, GLdouble nz) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3i)(GLint nx, GLint ny, GLint nz) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3s)(GLshort nx, GLshort ny, GLshort nz) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormal3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glNormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glOrtho)(GLdouble left, GLdouble right, GLdouble bottom,
+        GLdouble top, GLdouble zNear, GLdouble zFar) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPassThrough)(GLfloat token) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelMapfv)(GLenum map, GLint mapsize, const GLfloat *values) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelMapuiv)(GLenum map, GLint mapsize, const GLuint *values) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelMapusv)(GLenum map, GLint mapsize, const GLushort *values) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelStoref)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelStorei)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelTransferf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelTransferi)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPixelZoom)(GLfloat xfactor, GLfloat yfactor) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPointSize)(GLfloat size) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPolygonMode)(GLenum face, GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPolygonOffset)(GLfloat factor, GLfloat units) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPolygonStipple)(const GLubyte *mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPopAttrib)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPopClientAttrib)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPopMatrix)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPopName)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPrioritizeTextures)(GLsizei n, const GLuint *textures, const GLclampf *priorities) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPushAttrib)(GLbitfield mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPushClientAttrib)(GLbitfield mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPushMatrix)(void) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPushName)(GLuint name) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2d)(GLdouble x, GLdouble y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2f)(GLfloat x, GLfloat y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2i)(GLint x, GLint y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2s)(GLshort x, GLshort y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos2sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3d)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3f)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3i)(GLint x, GLint y, GLint z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3s)(GLshort x, GLshort y, GLshort z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4i)(GLint x, GLint y, GLint z, GLint w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4s)(GLshort x, GLshort y, GLshort z, GLshort w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRasterPos4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glReadBuffer)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height,
+        GLenum format, GLenum type, GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRectd)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRectdv)(const GLdouble *v1, const GLdouble *v2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRectf)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRectfv)(const GLfloat *v1, const GLfloat *v2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRecti)(GLint x1, GLint y1, GLint x2, GLint y2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRectiv)(const GLint *v1, const GLint *v2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRects)(GLshort x1, GLshort y1, GLshort x2, GLshort y2) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRectsv)(const GLshort *v1, const GLshort *v2) DECLSPEC_HIDDEN;
+GLint (WINE_GLAPI *glRenderMode)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRotated)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glScaled)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glScalef)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glScissor)(GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glSelectBuffer)(GLsizei size, GLuint *buffer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glShadeModel)(GLenum mode) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glStencilFunc)(GLenum func, GLint ref, GLuint mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glStencilMask)(GLuint mask) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1d)(GLdouble s) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1f)(GLfloat s) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1i)(GLint s) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1s)(GLshort s) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord1sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2d)(GLdouble s, GLdouble t) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2f)(GLfloat s, GLfloat t) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2i)(GLint s, GLint t) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2s)(GLshort s, GLshort t) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord2sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3d)(GLdouble s, GLdouble t, GLdouble r) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3f)(GLfloat s, GLfloat t, GLfloat r) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3i)(GLint s, GLint t, GLint r) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3s)(GLshort s, GLshort t, GLshort r) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4i)(GLint s, GLint t, GLint r, GLint q) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoord4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexEnvf)(GLenum target, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexEnvfv)(GLenum target, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexEnvi)(GLenum target, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexEnviv)(GLenum target, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexGend)(GLenum coord, GLenum pname, GLdouble param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexGendv)(GLenum coord, GLenum pname, const GLdouble *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexGenf)(GLenum coord, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexGenfv)(GLenum coord, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexGeni)(GLenum coord, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexGeniv)(GLenum coord, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width,
+        GLint border, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width,
+        GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexParameterf)(GLenum target, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexParameterfv)(GLenum target, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexParameteri)(GLenum target, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexParameteriv)(GLenum target, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexSubImage1D)(GLenum target, GLint level, GLint xoffset,
+        GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+        GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTranslated)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glTranslatef)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2d)(GLdouble x, GLdouble y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2f)(GLfloat x, GLfloat y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2i)(GLint x, GLint y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2s)(GLshort x, GLshort y) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex2sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3d)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3f)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3i)(GLint x, GLint y, GLint z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3s)(GLshort x, GLshort y, GLshort z) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4i)(GLint x, GLint y, GLint z, GLint w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4iv)(const GLint *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4s)(GLshort x, GLshort y, GLshort z, GLshort w) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertex4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
+void (WINE_GLAPI *glPointParameterfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+
+/* glFinish and glFlush are always loaded from opengl32.dll, thus they always have
+ * __stdcall calling convention.
+ *
+ * They are wgl functions and must not be called inside the gl lock, give them a
+ * name that makes this clear
+ */
+void (__stdcall *wglFinish)(void) DECLSPEC_HIDDEN;
+void (__stdcall *wglFlush)(void) DECLSPEC_HIDDEN;
+
+/* WGL functions */
+BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN;
+HGLRC (WINAPI *pwglGetCurrentContext)(void) DECLSPEC_HIDDEN;
+HDC (WINAPI *pwglGetCurrentDC)(void) DECLSPEC_HIDDEN;
+PROC (WINAPI *pwglGetProcAddress)(LPCSTR) DECLSPEC_HIDDEN;
+BOOL (WINAPI *pwglMakeCurrent)(HDC, HGLRC) DECLSPEC_HIDDEN;
+BOOL (WINAPI *pwglSwapLayerBuffers)(HDC, UINT) DECLSPEC_HIDDEN;
+BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN;
+BOOL (WINAPI *pwglChoosePixelFormat)(HDC, const PIXELFORMATDESCRIPTOR *) DECLSPEC_HIDDEN;
+int (WINAPI *pwglDescribePixelFormat)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR) DECLSPEC_HIDDEN;
+int (WINAPI *pwglGetPixelFormat)(HDC) DECLSPEC_HIDDEN;
+BOOL (WINAPI *pwglSetPixelFormat)(HDC, int, const PIXELFORMATDESCRIPTOR *) DECLSPEC_HIDDEN;
+
+struct VBOXUHGSMI;
+HGLRC (WINAPI *pVBoxCreateContext)(HDC, struct VBOXUHGSMI*) DECLSPEC_HIDDEN;
+void (WINAPI *pVBoxFlushToHost)(HGLRC) DECLSPEC_HIDDEN;
+
+#if defined(VBOX_WITH_WDDM) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+# define VBOX_WINE_WITH_DIRECT_VBOXOGL
+#endif
+
+#ifdef VBOX_WINE_WITH_DIRECT_VBOXOGL
+/* make sure we used stuff from VBoxOGL
+ * we do it this way to avoid extra modifications to Wine code */
+
+/* We're directly using wglMakeCurrent calls skipping GDI layer, which causes GDI SwapBuffers to fail trying to
+ * call glFinish, which doesn't have any context set. So we use wglSwapLayerBuffers directly as well.
+ */
+# define SwapBuffers(_hdc) pwglSwapLayerBuffers((_hdc), WGL_SWAP_MAIN_PLANE)
+
+/* we avoid using GDI32!*PixelFormat API and use VBoxOGL stuff directly
+ * because SetPixelFormat may eventually lead to opengl32 setting its own window proc via SetWindowLongPtr
+ * thus wined3d_[un]register_window stuff will become screwed up leading to infinite recursion or other misbehave */
+# define ChoosePixelFormat pwglChoosePixelFormat
+# define DescribePixelFormat pwglDescribePixelFormat
+# define GetPixelFormat pwglGetPixelFormat
+# define SetPixelFormat pwglSetPixelFormat
+#endif
+
+#define GL_FUNCS_GEN \
+    USE_GL_FUNC(glAccum) \
+    USE_GL_FUNC(glAlphaFunc) \
+    USE_GL_FUNC(glAreTexturesResident) \
+    USE_GL_FUNC(glArrayElement) \
+    USE_GL_FUNC(glBegin) \
+    USE_GL_FUNC(glBindTexture) \
+    USE_GL_FUNC(glBitmap) \
+    USE_GL_FUNC(glBlendFunc) \
+    USE_GL_FUNC(glCallList) \
+    USE_GL_FUNC(glCallLists) \
+    USE_GL_FUNC(glClear) \
+    USE_GL_FUNC(glClearAccum) \
+    USE_GL_FUNC(glClearColor) \
+    USE_GL_FUNC(glClearDepth) \
+    USE_GL_FUNC(glClearIndex) \
+    USE_GL_FUNC(glClearStencil) \
+    USE_GL_FUNC(glClipPlane) \
+    USE_GL_FUNC(glColor3b) \
+    USE_GL_FUNC(glColor3bv) \
+    USE_GL_FUNC(glColor3d) \
+    USE_GL_FUNC(glColor3dv) \
+    USE_GL_FUNC(glColor3f) \
+    USE_GL_FUNC(glColor3fv) \
+    USE_GL_FUNC(glColor3i) \
+    USE_GL_FUNC(glColor3iv) \
+    USE_GL_FUNC(glColor3s) \
+    USE_GL_FUNC(glColor3sv) \
+    USE_GL_FUNC(glColor3ub) \
+    USE_GL_FUNC(glColor3ubv) \
+    USE_GL_FUNC(glColor3ui) \
+    USE_GL_FUNC(glColor3uiv) \
+    USE_GL_FUNC(glColor3us) \
+    USE_GL_FUNC(glColor3usv) \
+    USE_GL_FUNC(glColor4b) \
+    USE_GL_FUNC(glColor4bv) \
+    USE_GL_FUNC(glColor4d) \
+    USE_GL_FUNC(glColor4dv) \
+    USE_GL_FUNC(glColor4f) \
+    USE_GL_FUNC(glColor4fv) \
+    USE_GL_FUNC(glColor4i) \
+    USE_GL_FUNC(glColor4iv) \
+    USE_GL_FUNC(glColor4s) \
+    USE_GL_FUNC(glColor4sv) \
+    USE_GL_FUNC(glColor4ub) \
+    USE_GL_FUNC(glColor4ubv) \
+    USE_GL_FUNC(glColor4ui) \
+    USE_GL_FUNC(glColor4uiv) \
+    USE_GL_FUNC(glColor4us) \
+    USE_GL_FUNC(glColor4usv) \
+    USE_GL_FUNC(glColorMask) \
+    USE_GL_FUNC(glColorMaterial) \
+    USE_GL_FUNC(glColorPointer) \
+    USE_GL_FUNC(glCopyPixels) \
+    USE_GL_FUNC(glCopyTexImage1D) \
+    USE_GL_FUNC(glCopyTexImage2D) \
+    USE_GL_FUNC(glCopyTexSubImage1D) \
+    USE_GL_FUNC(glCopyTexSubImage2D) \
+    USE_GL_FUNC(glCullFace) \
+    USE_GL_FUNC(glDeleteLists) \
+    USE_GL_FUNC(glDeleteTextures) \
+    USE_GL_FUNC(glDepthFunc) \
+    USE_GL_FUNC(glDepthMask) \
+    USE_GL_FUNC(glDepthRange) \
+    USE_GL_FUNC(glDisable) \
+    USE_GL_FUNC(glDisableClientState) \
+    USE_GL_FUNC(glDrawArrays) \
+    USE_GL_FUNC(glDrawBuffer) \
+    USE_GL_FUNC(glDrawElements) \
+    USE_GL_FUNC(glDrawPixels) \
+    USE_GL_FUNC(glEdgeFlag) \
+    USE_GL_FUNC(glEdgeFlagPointer) \
+    USE_GL_FUNC(glEdgeFlagv) \
+    USE_GL_FUNC(glEnable) \
+    USE_GL_FUNC(glEnableClientState) \
+    USE_GL_FUNC(glEnd) \
+    USE_GL_FUNC(glEndList) \
+    USE_GL_FUNC(glEvalCoord1d) \
+    USE_GL_FUNC(glEvalCoord1dv) \
+    USE_GL_FUNC(glEvalCoord1f) \
+    USE_GL_FUNC(glEvalCoord1fv) \
+    USE_GL_FUNC(glEvalCoord2d) \
+    USE_GL_FUNC(glEvalCoord2dv) \
+    USE_GL_FUNC(glEvalCoord2f) \
+    USE_GL_FUNC(glEvalCoord2fv) \
+    USE_GL_FUNC(glEvalMesh1) \
+    USE_GL_FUNC(glEvalMesh2) \
+    USE_GL_FUNC(glEvalPoint1) \
+    USE_GL_FUNC(glEvalPoint2) \
+    USE_GL_FUNC(glFeedbackBuffer) \
+    USE_GL_FUNC(glFogf) \
+    USE_GL_FUNC(glFogfv) \
+    USE_GL_FUNC(glFogi) \
+    USE_GL_FUNC(glFogiv) \
+    USE_GL_FUNC(glFrontFace) \
+    USE_GL_FUNC(glFrustum) \
+    USE_GL_FUNC(glGenLists) \
+    USE_GL_FUNC(glGenTextures) \
+    USE_GL_FUNC(glGetBooleanv) \
+    USE_GL_FUNC(glGetClipPlane) \
+    USE_GL_FUNC(glGetDoublev) \
+    USE_GL_FUNC(glGetError) \
+    USE_GL_FUNC(glGetFloatv) \
+    USE_GL_FUNC(glGetIntegerv) \
+    USE_GL_FUNC(glGetLightfv) \
+    USE_GL_FUNC(glGetLightiv) \
+    USE_GL_FUNC(glGetMapdv) \
+    USE_GL_FUNC(glGetMapfv) \
+    USE_GL_FUNC(glGetMapiv) \
+    USE_GL_FUNC(glGetMaterialfv) \
+    USE_GL_FUNC(glGetMaterialiv) \
+    USE_GL_FUNC(glGetPixelMapfv) \
+    USE_GL_FUNC(glGetPixelMapuiv) \
+    USE_GL_FUNC(glGetPixelMapusv) \
+    USE_GL_FUNC(glGetPointerv) \
+    USE_GL_FUNC(glGetPolygonStipple) \
+    USE_GL_FUNC(glGetString) \
+    USE_GL_FUNC(glGetTexEnvfv) \
+    USE_GL_FUNC(glGetTexEnviv) \
+    USE_GL_FUNC(glGetTexGendv) \
+    USE_GL_FUNC(glGetTexGenfv) \
+    USE_GL_FUNC(glGetTexGeniv) \
+    USE_GL_FUNC(glGetTexImage) \
+    USE_GL_FUNC(glGetTexLevelParameterfv) \
+    USE_GL_FUNC(glGetTexLevelParameteriv) \
+    USE_GL_FUNC(glGetTexParameterfv) \
+    USE_GL_FUNC(glGetTexParameteriv) \
+    USE_GL_FUNC(glHint) \
+    USE_GL_FUNC(glIndexMask) \
+    USE_GL_FUNC(glIndexPointer) \
+    USE_GL_FUNC(glIndexd) \
+    USE_GL_FUNC(glIndexdv) \
+    USE_GL_FUNC(glIndexf) \
+    USE_GL_FUNC(glIndexfv) \
+    USE_GL_FUNC(glIndexi) \
+    USE_GL_FUNC(glIndexiv) \
+    USE_GL_FUNC(glIndexs) \
+    USE_GL_FUNC(glIndexsv) \
+    USE_GL_FUNC(glIndexub) \
+    USE_GL_FUNC(glIndexubv) \
+    USE_GL_FUNC(glInitNames) \
+    USE_GL_FUNC(glInterleavedArrays) \
+    USE_GL_FUNC(glIsEnabled) \
+    USE_GL_FUNC(glIsList) \
+    USE_GL_FUNC(glIsTexture) \
+    USE_GL_FUNC(glLightModelf) \
+    USE_GL_FUNC(glLightModelfv) \
+    USE_GL_FUNC(glLightModeli) \
+    USE_GL_FUNC(glLightModeliv) \
+    USE_GL_FUNC(glLightf) \
+    USE_GL_FUNC(glLightfv) \
+    USE_GL_FUNC(glLighti) \
+    USE_GL_FUNC(glLightiv) \
+    USE_GL_FUNC(glLineStipple) \
+    USE_GL_FUNC(glLineWidth) \
+    USE_GL_FUNC(glListBase) \
+    USE_GL_FUNC(glLoadIdentity) \
+    USE_GL_FUNC(glLoadMatrixd) \
+    USE_GL_FUNC(glLoadMatrixf) \
+    USE_GL_FUNC(glLoadName) \
+    USE_GL_FUNC(glLogicOp) \
+    USE_GL_FUNC(glMap1d) \
+    USE_GL_FUNC(glMap1f) \
+    USE_GL_FUNC(glMap2d) \
+    USE_GL_FUNC(glMap2f) \
+    USE_GL_FUNC(glMapGrid1d) \
+    USE_GL_FUNC(glMapGrid1f) \
+    USE_GL_FUNC(glMapGrid2d) \
+    USE_GL_FUNC(glMapGrid2f) \
+    USE_GL_FUNC(glMaterialf) \
+    USE_GL_FUNC(glMaterialfv) \
+    USE_GL_FUNC(glMateriali) \
+    USE_GL_FUNC(glMaterialiv) \
+    USE_GL_FUNC(glMatrixMode) \
+    USE_GL_FUNC(glMultMatrixd) \
+    USE_GL_FUNC(glMultMatrixf) \
+    USE_GL_FUNC(glNewList) \
+    USE_GL_FUNC(glNormal3b) \
+    USE_GL_FUNC(glNormal3bv) \
+    USE_GL_FUNC(glNormal3d) \
+    USE_GL_FUNC(glNormal3dv) \
+    USE_GL_FUNC(glNormal3f) \
+    USE_GL_FUNC(glNormal3fv) \
+    USE_GL_FUNC(glNormal3i) \
+    USE_GL_FUNC(glNormal3iv) \
+    USE_GL_FUNC(glNormal3s) \
+    USE_GL_FUNC(glNormal3sv) \
+    USE_GL_FUNC(glNormalPointer) \
+    USE_GL_FUNC(glOrtho) \
+    USE_GL_FUNC(glPassThrough) \
+    USE_GL_FUNC(glPixelMapfv) \
+    USE_GL_FUNC(glPixelMapuiv) \
+    USE_GL_FUNC(glPixelMapusv) \
+    USE_GL_FUNC(glPixelStoref) \
+    USE_GL_FUNC(glPixelStorei) \
+    USE_GL_FUNC(glPixelTransferf) \
+    USE_GL_FUNC(glPixelTransferi) \
+    USE_GL_FUNC(glPixelZoom) \
+    USE_GL_FUNC(glPointSize) \
+    USE_GL_FUNC(glPolygonMode) \
+    USE_GL_FUNC(glPolygonOffset) \
+    USE_GL_FUNC(glPolygonStipple) \
+    USE_GL_FUNC(glPopAttrib) \
+    USE_GL_FUNC(glPopClientAttrib) \
+    USE_GL_FUNC(glPopMatrix) \
+    USE_GL_FUNC(glPopName) \
+    USE_GL_FUNC(glPrioritizeTextures) \
+    USE_GL_FUNC(glPushAttrib) \
+    USE_GL_FUNC(glPushClientAttrib) \
+    USE_GL_FUNC(glPushMatrix) \
+    USE_GL_FUNC(glPushName) \
+    USE_GL_FUNC(glRasterPos2d) \
+    USE_GL_FUNC(glRasterPos2dv) \
+    USE_GL_FUNC(glRasterPos2f) \
+    USE_GL_FUNC(glRasterPos2fv) \
+    USE_GL_FUNC(glRasterPos2i) \
+    USE_GL_FUNC(glRasterPos2iv) \
+    USE_GL_FUNC(glRasterPos2s) \
+    USE_GL_FUNC(glRasterPos2sv) \
+    USE_GL_FUNC(glRasterPos3d) \
+    USE_GL_FUNC(glRasterPos3dv) \
+    USE_GL_FUNC(glRasterPos3f) \
+    USE_GL_FUNC(glRasterPos3fv) \
+    USE_GL_FUNC(glRasterPos3i) \
+    USE_GL_FUNC(glRasterPos3iv) \
+    USE_GL_FUNC(glRasterPos3s) \
+    USE_GL_FUNC(glRasterPos3sv) \
+    USE_GL_FUNC(glRasterPos4d) \
+    USE_GL_FUNC(glRasterPos4dv) \
+    USE_GL_FUNC(glRasterPos4f) \
+    USE_GL_FUNC(glRasterPos4fv) \
+    USE_GL_FUNC(glRasterPos4i) \
+    USE_GL_FUNC(glRasterPos4iv) \
+    USE_GL_FUNC(glRasterPos4s) \
+    USE_GL_FUNC(glRasterPos4sv) \
+    USE_GL_FUNC(glReadBuffer) \
+    USE_GL_FUNC(glReadPixels) \
+    USE_GL_FUNC(glRectd) \
+    USE_GL_FUNC(glRectdv) \
+    USE_GL_FUNC(glRectf) \
+    USE_GL_FUNC(glRectfv) \
+    USE_GL_FUNC(glRecti) \
+    USE_GL_FUNC(glRectiv) \
+    USE_GL_FUNC(glRects) \
+    USE_GL_FUNC(glRectsv) \
+    USE_GL_FUNC(glRenderMode) \
+    USE_GL_FUNC(glRotated) \
+    USE_GL_FUNC(glRotatef) \
+    USE_GL_FUNC(glScaled) \
+    USE_GL_FUNC(glScalef) \
+    USE_GL_FUNC(glScissor) \
+    USE_GL_FUNC(glSelectBuffer) \
+    USE_GL_FUNC(glShadeModel) \
+    USE_GL_FUNC(glStencilFunc) \
+    USE_GL_FUNC(glStencilMask) \
+    USE_GL_FUNC(glStencilOp) \
+    USE_GL_FUNC(glTexCoord1d) \
+    USE_GL_FUNC(glTexCoord1dv) \
+    USE_GL_FUNC(glTexCoord1f) \
+    USE_GL_FUNC(glTexCoord1fv) \
+    USE_GL_FUNC(glTexCoord1i) \
+    USE_GL_FUNC(glTexCoord1iv) \
+    USE_GL_FUNC(glTexCoord1s) \
+    USE_GL_FUNC(glTexCoord1sv) \
+    USE_GL_FUNC(glTexCoord2d) \
+    USE_GL_FUNC(glTexCoord2dv) \
+    USE_GL_FUNC(glTexCoord2f) \
+    USE_GL_FUNC(glTexCoord2fv) \
+    USE_GL_FUNC(glTexCoord2i) \
+    USE_GL_FUNC(glTexCoord2iv) \
+    USE_GL_FUNC(glTexCoord2s) \
+    USE_GL_FUNC(glTexCoord2sv) \
+    USE_GL_FUNC(glTexCoord3d) \
+    USE_GL_FUNC(glTexCoord3dv) \
+    USE_GL_FUNC(glTexCoord3f) \
+    USE_GL_FUNC(glTexCoord3fv) \
+    USE_GL_FUNC(glTexCoord3i) \
+    USE_GL_FUNC(glTexCoord3iv) \
+    USE_GL_FUNC(glTexCoord3s) \
+    USE_GL_FUNC(glTexCoord3sv) \
+    USE_GL_FUNC(glTexCoord4d) \
+    USE_GL_FUNC(glTexCoord4dv) \
+    USE_GL_FUNC(glTexCoord4f) \
+    USE_GL_FUNC(glTexCoord4fv) \
+    USE_GL_FUNC(glTexCoord4i) \
+    USE_GL_FUNC(glTexCoord4iv) \
+    USE_GL_FUNC(glTexCoord4s) \
+    USE_GL_FUNC(glTexCoord4sv) \
+    USE_GL_FUNC(glTexCoordPointer) \
+    USE_GL_FUNC(glTexEnvf) \
+    USE_GL_FUNC(glTexEnvfv) \
+    USE_GL_FUNC(glTexEnvi) \
+    USE_GL_FUNC(glTexEnviv) \
+    USE_GL_FUNC(glTexGend) \
+    USE_GL_FUNC(glTexGendv) \
+    USE_GL_FUNC(glTexGenf) \
+    USE_GL_FUNC(glTexGenfv) \
+    USE_GL_FUNC(glTexGeni) \
+    USE_GL_FUNC(glTexGeniv) \
+    USE_GL_FUNC(glTexImage1D) \
+    USE_GL_FUNC(glTexImage2D) \
+    USE_GL_FUNC(glTexParameterf) \
+    USE_GL_FUNC(glTexParameterfv) \
+    USE_GL_FUNC(glTexParameteri) \
+    USE_GL_FUNC(glTexParameteriv) \
+    USE_GL_FUNC(glTexSubImage1D) \
+    USE_GL_FUNC(glTexSubImage2D) \
+    USE_GL_FUNC(glTranslated) \
+    USE_GL_FUNC(glTranslatef) \
+    USE_GL_FUNC(glVertex2d) \
+    USE_GL_FUNC(glVertex2dv) \
+    USE_GL_FUNC(glVertex2f) \
+    USE_GL_FUNC(glVertex2fv) \
+    USE_GL_FUNC(glVertex2i) \
+    USE_GL_FUNC(glVertex2iv) \
+    USE_GL_FUNC(glVertex2s) \
+    USE_GL_FUNC(glVertex2sv) \
+    USE_GL_FUNC(glVertex3d) \
+    USE_GL_FUNC(glVertex3dv) \
+    USE_GL_FUNC(glVertex3f) \
+    USE_GL_FUNC(glVertex3fv) \
+    USE_GL_FUNC(glVertex3i) \
+    USE_GL_FUNC(glVertex3iv) \
+    USE_GL_FUNC(glVertex3s) \
+    USE_GL_FUNC(glVertex3sv) \
+    USE_GL_FUNC(glVertex4d) \
+    USE_GL_FUNC(glVertex4dv) \
+    USE_GL_FUNC(glVertex4f) \
+    USE_GL_FUNC(glVertex4fv) \
+    USE_GL_FUNC(glVertex4i) \
+    USE_GL_FUNC(glVertex4iv) \
+    USE_GL_FUNC(glVertex4s) \
+    USE_GL_FUNC(glVertex4sv) \
+    USE_GL_FUNC(glVertexPointer) \
+    USE_GL_FUNC(glViewport) \
+    USE_GL_FUNC(glPointParameterfv) \
+
+#define WGL_FUNCS_GEN \
+    USE_WGL_FUNC(wglDeleteContext) \
+    USE_WGL_FUNC(wglGetCurrentContext) \
+    USE_WGL_FUNC(wglGetCurrentDC) \
+    USE_WGL_FUNC(wglGetProcAddress) \
+    USE_WGL_FUNC(wglMakeCurrent) \
+    USE_WGL_FUNC(wglShareLists) \
+    USE_WGL_FUNC(wglSwapLayerBuffers) \
+    USE_WGL_FUNC(wglChoosePixelFormat) \
+    USE_WGL_FUNC(wglDescribePixelFormat) \
+    USE_WGL_FUNC(wglGetPixelFormat) \
+    USE_WGL_FUNC(wglSetPixelFormat)
+
+#define VBOX_FUNCS_GEN \
+    USE_WGL_FUNC(VBoxCreateContext) \
+    USE_WGL_FUNC(VBoxFlushToHost)
+
+/* OpenGL extensions. */
+typedef enum wined3d_gl_extension
+{
+    WINED3D_GL_EXT_NONE,
+
+    /* APPLE */
+    APPLE_CLIENT_STORAGE,
+    APPLE_FENCE,
+    APPLE_FLOAT_PIXELS,
+    APPLE_FLUSH_BUFFER_RANGE,
+    APPLE_FLUSH_RENDER,
+    APPLE_YCBCR_422,
+    /* ARB */
+    ARB_COLOR_BUFFER_FLOAT,
+    ARB_DEPTH_BUFFER_FLOAT,
+    ARB_DEPTH_CLAMP,
+    ARB_DEPTH_TEXTURE,
+    ARB_DRAW_BUFFERS,
+    ARB_FRAGMENT_PROGRAM,
+    ARB_FRAGMENT_SHADER,
+    ARB_FRAMEBUFFER_OBJECT,
+    ARB_GEOMETRY_SHADER4,
+    ARB_HALF_FLOAT_PIXEL,
+    ARB_HALF_FLOAT_VERTEX,
+    ARB_IMAGING,
+    ARB_MAP_BUFFER_RANGE,
+    ARB_MULTISAMPLE,
+    ARB_MULTITEXTURE,
+    ARB_OCCLUSION_QUERY,
+    ARB_PIXEL_BUFFER_OBJECT,
+    ARB_POINT_PARAMETERS,
+    ARB_POINT_SPRITE,
+    ARB_PROVOKING_VERTEX,
+    ARB_SHADER_OBJECTS,
+    ARB_SHADER_TEXTURE_LOD,
+    ARB_SHADING_LANGUAGE_100,
+    ARB_SYNC,
+    ARB_TEXTURE_BORDER_CLAMP,
+    ARB_TEXTURE_COMPRESSION,
+    ARB_TEXTURE_CUBE_MAP,
+    ARB_TEXTURE_ENV_ADD,
+    ARB_TEXTURE_ENV_COMBINE,
+    ARB_TEXTURE_ENV_DOT3,
+    ARB_TEXTURE_FLOAT,
+    ARB_TEXTURE_MIRRORED_REPEAT,
+    ARB_TEXTURE_NON_POWER_OF_TWO,
+    ARB_TEXTURE_RECTANGLE,
+    ARB_TEXTURE_RG,
+    ARB_VERTEX_ARRAY_BGRA,
+    ARB_VERTEX_BLEND,
+    ARB_VERTEX_BUFFER_OBJECT,
+    ARB_VERTEX_PROGRAM,
+    ARB_VERTEX_SHADER,
+    /* ATI */
+    ATI_FRAGMENT_SHADER,
+    ATI_SEPARATE_STENCIL,
+    ATI_TEXTURE_COMPRESSION_3DC,
+    ATI_TEXTURE_ENV_COMBINE3,
+    ATI_TEXTURE_MIRROR_ONCE,
+    /* EXT */
+    EXT_BLEND_COLOR,
+    EXT_BLEND_EQUATION_SEPARATE,
+    EXT_BLEND_FUNC_SEPARATE,
+    EXT_BLEND_MINMAX,
+    EXT_DRAW_BUFFERS2,
+    EXT_FOG_COORD,
+    EXT_FRAMEBUFFER_BLIT,
+    EXT_FRAMEBUFFER_MULTISAMPLE,
+    EXT_FRAMEBUFFER_OBJECT,
+    EXT_GPU_PROGRAM_PARAMETERS,
+    EXT_GPU_SHADER4,
+    EXT_PACKED_DEPTH_STENCIL,
+    EXT_PALETTED_TEXTURE,
+    EXT_POINT_PARAMETERS,
+    EXT_PROVOKING_VERTEX,
+    EXT_SECONDARY_COLOR,
+    EXT_STENCIL_TWO_SIDE,
+    EXT_STENCIL_WRAP,
+    EXT_TEXTURE3D,
+    EXT_TEXTURE_COMPRESSION_RGTC,
+    EXT_TEXTURE_COMPRESSION_S3TC,
+    EXT_TEXTURE_ENV_ADD,
+    EXT_TEXTURE_ENV_COMBINE,
+    EXT_TEXTURE_ENV_DOT3,
+    EXT_TEXTURE_FILTER_ANISOTROPIC,
+    EXT_TEXTURE_LOD_BIAS,
+    EXT_TEXTURE_SRGB,
+    EXT_VERTEX_ARRAY_BGRA,
+    /* NVIDIA */
+    NV_DEPTH_CLAMP,
+    NV_FENCE,
+    NV_FOG_DISTANCE,
+    NV_FRAGMENT_PROGRAM,
+    NV_FRAGMENT_PROGRAM2,
+    NV_FRAGMENT_PROGRAM_OPTION,
+    NV_HALF_FLOAT,
+    NV_LIGHT_MAX_EXPONENT,
+    NV_REGISTER_COMBINERS,
+    NV_REGISTER_COMBINERS2,
+    NV_TEXGEN_REFLECTION,
+    NV_TEXTURE_ENV_COMBINE4,
+    NV_TEXTURE_SHADER,
+    NV_TEXTURE_SHADER2,
+    NV_VERTEX_PROGRAM,
+    NV_VERTEX_PROGRAM1_1,
+    NV_VERTEX_PROGRAM2,
+    NV_VERTEX_PROGRAM2_OPTION,
+    NV_VERTEX_PROGRAM3,
+    /* SGI */
+    SGIS_GENERATE_MIPMAP,
+    SGI_VIDEO_SYNC,
+    /* WGL extensions */
+    WGL_ARB_PIXEL_FORMAT,
+    WGL_WINE_PIXEL_FORMAT_PASSTHROUGH,
+
+    VBOX_SHARED_CONTEXTS,
+
+    /* Internally used */
+    WINE_NORMALIZED_TEXRECT,
+
+    WINED3D_GL_EXT_COUNT,
+} GL_SupportedExt;
+
+/* GL_APPLE_client_storage */
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#define GL_UNPACK_CLIENT_STORAGE_APPLE                      0x85b2
+#endif
+
+/* GL_APPLE_fence */
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#define GL_DRAW_PIXELS_APPLE                                0x8a0a
+#define GL_FENCE_APPLE                                      0x8a0b
+#endif
+typedef void (WINE_GLAPI *PGLFNGENFENCESAPPLEPROC)(GLsizei, GLuint *);
+typedef void (WINE_GLAPI *PGLFNDELETEFENCESAPPLEPROC)(GLuint, const GLuint *);
+typedef void (WINE_GLAPI *PGLFNSETFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTFENCEAPPLEPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNISFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTOBJECTAPPLEPROC)(GLenum, GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHOBJECTAPPLEPROC)(GLenum, GLuint);
+
+/* GL_APPLE_float_pixels */
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#define GL_HALF_APPLE                                       0x140b
+#define GL_COLOR_FLOAT_APPLE                                0x8a0f
+#define GL_RGBA_FLOAT32_APPLE                               0x8814
+#define GL_RGB_FLOAT32_APPLE                                0x8815
+#define GL_ALPHA_FLOAT32_APPLE                              0x8816
+#define GL_INTENSITY_FLOAT32_APPLE                          0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE                          0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE                    0x8819
+#define GL_RGBA_FLOAT16_APPLE                               0x881a
+#define GL_RGB_FLOAT16_APPLE                                0x881b
+#define GL_ALPHA_FLOAT16_APPLE                              0x881c
+#define GL_INTENSITY_FLOAT16_APPLE                          0x881d
+#define GL_LUMINANCE_FLOAT16_APPLE                          0x881e
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE                    0x881f
+#endif
+
+/* GL_APPLE_flush_buffer_range */
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE                   0x8a12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE                      0x8a13
+typedef void (WINE_GLAPI *PGLFNBUFFERPARAMETERIAPPLE)(GLenum target, GLenum pname, GLint param);
+typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+
+/* GL_APPLE_flush_render */
+typedef void (WINE_GLAPI *PGLFNFLUSHRENDERAPPLEPROC)(void);
+typedef void (WINE_GLAPI *PGLFNFINISHRENDERAPPLEPROC)(void);
+
+/* GL_APPLE_ycbcr_422 */
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#define GL_YCBCR_422_APPLE                                  0x85b9
+#define UNSIGNED_SHORT_8_8_APPLE                            0x85ba
+#define UNSIGNED_SHORT_8_8_REV_APPLE                        0x85bb
+#endif
+
+/* GL_ARB_color_buffer_float */
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#define GL_RGBA_FLOAT_MODE_ARB                              0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB                           0x891a
+#define GL_CLAMP_FRAGMENT_COLOR_ARB                         0x891b
+#define GL_CLAMP_READ_COLOR_ARB                             0x891c
+#define GL_FIXED_ONLY_ARB                                   0x891d
+#endif
+typedef void (WINE_GLAPI *PGLFNCLAMPCOLORARBPROC)(GLenum target, GLenum clamp);
+
+/* GL_ARB_depth_buffer_float */
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#define GL_DEPTH_COMPONENT32F                               0x8cac
+#define GL_DEPTH32F_STENCIL8                                0x8cad
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV                   0x8dad
+#endif
+
+/* GL_ARB_depth_clamp */
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#define GL_DEPTH_CLAMP                                      0x864f
+#endif
+
+/* GL_ARB_depth_texture */
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#define GL_DEPTH_COMPONENT16_ARB                            0x81a5
+#define GL_DEPTH_COMPONENT24_ARB                            0x81a6
+#define GL_DEPTH_COMPONENT32_ARB                            0x81a7
+#define GL_TEXTURE_DEPTH_SIZE_ARB                           0x884a
+#define GL_DEPTH_TEXTURE_MODE_ARB                           0x884b
+#endif
+
+/* GL_ARB_draw_buffers */
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ARB                             0x8824
+#define GL_DRAW_BUFFER0_ARB                                 0x8825
+#define GL_DRAW_BUFFER1_ARB                                 0x8826
+#define GL_DRAW_BUFFER2_ARB                                 0x8827
+#define GL_DRAW_BUFFER3_ARB                                 0x8828
+#define GL_DRAW_BUFFER4_ARB                                 0x8829
+#define GL_DRAW_BUFFER5_ARB                                 0x882a
+#define GL_DRAW_BUFFER6_ARB                                 0x882b
+#define GL_DRAW_BUFFER7_ARB                                 0x882c
+#define GL_DRAW_BUFFER8_ARB                                 0x882d
+#define GL_DRAW_BUFFER9_ARB                                 0x882e
+#define GL_DRAW_BUFFER10_ARB                                0x882f
+#define GL_DRAW_BUFFER11_ARB                                0x8830
+#define GL_DRAW_BUFFER12_ARB                                0x8831
+#define GL_DRAW_BUFFER13_ARB                                0x8832
+#define GL_DRAW_BUFFER14_ARB                                0x8833
+#define GL_DRAW_BUFFER15_ARB                                0x8834
+#endif
+typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSARBPROC)(GLsizei n, const GLenum *bufs);
+
+/* GL_ARB_fragment_program */
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+#define GL_FRAGMENT_PROGRAM_ARB                             0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB                     0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB                     0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB                     0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB              0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB              0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB              0x880a
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB                 0x880b
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB                 0x880c
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB                 0x880d
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB          0x880e
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB          0x880f
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB          0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB                           0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB                      0x8872
+/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
+#endif
+
+/* GL_ARB_fragment_shader */
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ARB                              0x8b30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB              0x8b49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB              0x8b8b
+#endif
+
+/* GL_ARB_framebuffer_object */
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#define GL_FRAMEBUFFER                                      0x8d40
+#define GL_READ_FRAMEBUFFER                                 0x8ca8
+#define GL_DRAW_FRAMEBUFFER                                 0x8ca9
+#define GL_RENDERBUFFER                                     0x8d41
+#define GL_STENCIL_INDEX1                                   0x8d46
+#define GL_STENCIL_INDEX4                                   0x8d47
+#define GL_STENCIL_INDEX8                                   0x8d48
+#define GL_STENCIL_INDEX16                                  0x8d49
+#define GL_RENDERBUFFER_WIDTH                               0x8d42
+#define GL_RENDERBUFFER_HEIGHT                              0x8d43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT                     0x8d44
+#define GL_RENDERBUFFER_RED_SIZE                            0x8d50
+#define GL_RENDERBUFFER_GREEN_SIZE                          0x8d51
+#define GL_RENDERBUFFER_BLUE_SIZE                           0x8d52
+#define GL_RENDERBUFFER_ALPHA_SIZE                          0x8d53
+#define GL_RENDERBUFFER_DEPTH_SIZE                          0x8d54
+#define GL_RENDERBUFFER_STENCIL_SIZE                        0x8d55
+#define GL_RENDERBUFFER_SAMPLES                             0x8cab
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE               0x8cd0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME               0x8cd1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL             0x8cd2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE     0x8cd3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER             0x8cd4
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING            0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE            0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE                  0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE                0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE                 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE                0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE                0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE              0x8217
+#define GL_SRGB                                             0x8c40
+#define GL_UNSIGNED_NORMALIZED                              0x8c17
+#define GL_FRAMEBUFFER_DEFAULT                              0x8218
+#define GL_INDEX                                            0x8222
+#define GL_COLOR_ATTACHMENT0                                0x8ce0
+#define GL_COLOR_ATTACHMENT1                                0x8ce1
+#define GL_COLOR_ATTACHMENT2                                0x8ce2
+#define GL_COLOR_ATTACHMENT3                                0x8ce3
+#define GL_COLOR_ATTACHMENT4                                0x8ce4
+#define GL_COLOR_ATTACHMENT5                                0x8ce5
+#define GL_COLOR_ATTACHMENT6                                0x8ce6
+#define GL_COLOR_ATTACHMENT7                                0x8ce7
+#define GL_COLOR_ATTACHMENT8                                0x8ce8
+#define GL_COLOR_ATTACHMENT9                                0x8ce9
+#define GL_COLOR_ATTACHMENT10                               0x8cea
+#define GL_COLOR_ATTACHMENT11                               0x8ceb
+#define GL_COLOR_ATTACHMENT12                               0x8cec
+#define GL_COLOR_ATTACHMENT13                               0x8ced
+#define GL_COLOR_ATTACHMENT14                               0x8cee
+#define GL_COLOR_ATTACHMENT15                               0x8cef
+#define GL_DEPTH_ATTACHMENT                                 0x8d00
+#define GL_STENCIL_ATTACHMENT                               0x8d20
+#define GL_DEPTH_STENCIL_ATTACHMENT                         0x821a
+#define GL_MAX_SAMPLES                                      0x8d57
+#define GL_FRAMEBUFFER_COMPLETE                             0x8cd5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT                0x8cd6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT        0x8cd7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER               0x8cdb
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER               0x8cdc
+#define GL_FRAMEBUFFER_UNSUPPORTED                          0x8cdd
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE               0x8d56
+#define GL_FRAMEBUFFER_UNDEFINED                            0x8219
+#define GL_FRAMEBUFFER_BINDING                              0x8ca6
+#define GL_DRAW_FRAMEBUFFER_BINDING                         0x8ca6
+#define GL_READ_FRAMEBUFFER_BINDING                         0x8caa
+#define GL_RENDERBUFFER_BINDING                             0x8ca7
+#define GL_MAX_COLOR_ATTACHMENTS                            0x8cdf
+#define GL_MAX_RENDERBUFFER_SIZE                            0x84e8
+#define GL_INVALID_FRAMEBUFFER_OPERATION                    0x0506
+#define GL_DEPTH_STENCIL                                    0x84f9
+#define GL_UNSIGNED_INT_24_8                                0x84fa
+#define GL_DEPTH24_STENCIL8                                 0x88f0
+#define GL_TEXTURE_STENCIL_SIZE                             0x88f1
+#endif
+typedef GLboolean (WINE_GLAPI *PGLFNGLISRENDERBUFFERPROC)(GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat,
+        GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples,
+        GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (WINE_GLAPI *PGLFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);
+typedef GLenum (WINE_GLAPI *PGLFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment,
+        GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment,
+        GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment,
+        GLenum textarget, GLuint texture, GLint level, GLint layer);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment,
+        GLuint texture, GLint level, GLint layer);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment,
+        GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment,
+        GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+        GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (WINE_GLAPI *PGLFNGLGENERATEMIPMAPPROC)(GLenum target);
+
+/* GL_ARB_geometry_shader4 */
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#define GL_GEOMETRY_SHADER_ARB                              0x8dd9
+#define GL_GEOMETRY_VERTICES_OUT_ARB                        0x8dda
+#define GL_GEOMETRY_INPUT_TYPE_ARB                          0x8ddb
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB                         0x8ddc
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB             0x8c29
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB              0x8ddd
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB                0x8dde
+#define GL_MAX_VARYING_COMPONENTS_ARB                       0x8b4b
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB              0x8ddf
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB                 0x8de0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB         0x8de1
+#define GL_LINES_ADJACENCY_ARB                              0x000a
+#define GL_LINE_STRIP_ADJACENCY_ARB                         0x000b
+#define GL_TRIANGLES_ADJACENCY_ARB                          0x000c
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB                     0x000d
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB         0x8da8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB           0x8da9
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB               0x8da7
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER             0x8cd4
+#define GL_PROGRAM_POINT_SIZE_ARB                           0x8642
+#endif
+typedef void (WINE_GLAPI *PGLFNPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value);
+typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment,
+        GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment,
+        GLuint texture, GLint level, GLint layer);
+typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment,
+        GLuint texture, GLint level, GLenum face);
+
+/* GL_ARB_half_float_pixel */
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+#define GL_HALF_FLOAT_ARB                                   0x140b
+#endif
+
+/* GL_ARB_half_float_vertex */
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+/* No _ARB, see extension spec */
+#define GL_HALF_FLOAT                                       0x140b
+#endif
+
+/* GL_ARB_imaging */
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+#define GL_CONSTANT_COLOR                                   0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR                         0x8002
+#define GL_CONSTANT_ALPHA                                   0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA                         0x8004
+#define GL_BLEND_COLOR                                      0x8005
+#define GL_FUNC_ADD                                         0x8006
+#define GL_MIN                                              0x8007
+#define GL_MAX                                              0x8008
+#define GL_BLEND_EQUATION                                   0x8009
+#define GL_FUNC_SUBTRACT                                    0x800a
+#define GL_FUNC_REVERSE_SUBTRACT                            0x800b
+#define GL_CONVOLUTION_1D                                   0x8010
+#define GL_CONVOLUTION_2D                                   0x8011
+#define GL_SEPARABLE_2D                                     0x8012
+#define GL_CONVOLUTION_BORDER_MODE                          0x8013
+#define GL_CONVOLUTION_FILTER_SCALE                         0x8014
+#define GL_CONVOLUTION_FILTER_BIAS                          0x8015
+#define GL_REDUCE                                           0x8016
+#define GL_CONVOLUTION_FORMAT                               0x8017
+#define GL_CONVOLUTION_WIDTH                                0x8018
+#define GL_CONVOLUTION_HEIGHT                               0x8019
+#define GL_MAX_CONVOLUTION_WIDTH                            0x801a
+#define GL_MAX_CONVOLUTION_HEIGHT                           0x801b
+#define GL_POST_CONVOLUTION_RED_SCALE                       0x801d
+#define GL_POST_CONVOLUTION_GREEN_SCALE                     0x801f
+#define GL_POST_CONVOLUTION_BLUE_SCALE                      0x801e
+#define GL_POST_CONVOLUTION_ALPHA_SCALE                     0x801f
+#define GL_POST_CONVOLUTION_RED_BIAS                        0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS                      0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS                       0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS                      0x8023
+#define GL_HISTOGRAM                                        0x8024
+#define GL_PROXY_HISTOGRAM                                  0x8025
+#define GL_HISTOGRAM_WIDTH                                  0x8026
+#define GL_HISTOGRAM_FORMAT                                 0x8027
+#define GL_HISTOGRAM_RED_SIZE                               0x8028
+#define GL_HISTOGRAM_GREEN_SIZE                             0x8029
+#define GL_HISTOGRAM_BLUE_SIZE                              0x802a
+#define GL_HISTOGRAM_ALPHA_SIZE                             0x802b
+#define GL_HISTOGRAM_LUMINANCE_SIZE                         0x802c
+#define GL_HISTOGRAM_SINK                                   0x802d
+#define GL_MINMAX                                           0x802e
+#define GL_MINMAX_FORMAT                                    0x802f
+#define GL_MINMAX_SINK                                      0x8030
+#define GL_TABLE_TOO_LARGE                                  0x8031
+#define GL_COLOR_MATRIX                                     0x80b1
+#define GL_COLOR_MATRIX_STACK_DEPTH                         0x80b2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH                     0x80b3
+#define GL_POST_COLOR_MATRIX_RED_SCALE                      0x80b4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE                    0x80b5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE                     0x80b6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE                    0x80b7
+#define GL_POST_COLOR_MATRIX_RED_BIAS                       0x80b8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS                     0x80b9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS                      0x80ba
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS                     0x80bb
+#define GL_COLOR_TABLE                                      0x80d0
+#define GL_POST_CONVOLUTION_COLOR_TABLE                     0x80d1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE                    0x80d2
+#define GL_PROXY_COLOR_TABLE                                0x80d3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE               0x80d4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE              0x80d5
+#define GL_COLOR_TABLE_SCALE                                0x80d6
+#define GL_COLOR_TABLE_BIAS                                 0x80d7
+#define GL_COLOR_TABLE_FORMAT                               0x80d8
+#define GL_COLOR_TABLE_WIDTH                                0x80d9
+#define GL_COLOR_TABLE_RED_SIZE                             0x80da
+#define GL_COLOR_TABLE_GREEN_SIZE                           0x80db
+#define GL_COLOR_TABLE_BLUE_SIZE                            0x80dc
+#define GL_COLOR_TABLE_ALPHA_SIZE                           0x80dd
+#define GL_COLOR_TABLE_LUMINANCE_SIZE                       0x80de
+#define GL_COLOR_TABLE_INTENSITY_SIZE                       0x80df
+#define GL_CONSTANT_BORDER                                  0x8151
+#define GL_REPLICATE_BORDER                                 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR                         0x8154
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDCOLORPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONPROC)(GLenum mode);
+
+/* GL_ARB_map_buffer_range */
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#define GL_MAP_READ_BIT                                     0x0001
+#define GL_MAP_WRITE_BIT                                    0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT                         0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT                        0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT                           0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT                           0x0020
+#endif
+typedef GLvoid *(WINE_GLAPI *PGLFNMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length);
+
+/* GL_ARB_multisample */
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#define GL_MULTISAMPLE_ARB                                  0x809d
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB                     0x809e
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB                          0x809f
+#define GL_SAMPLE_COVERAGE_ARB                              0x80a0
+#define GL_SAMPLE_BUFFERS_ARB                               0x80a8
+#define GL_SAMPLES_ARB                                      0x80a9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB                        0x80aa
+#define GL_SAMPLE_COVERAGE_INVERT_ARB                       0x80ab
+#define GL_MULTISAMPLE_BIT_ARB                              0x20000000
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLSAMPLECOVERAGEARBPROC)(GLclampf value, GLboolean invert);
+
+/* GL_ARB_multitexture */
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#define GL_TEXTURE0_ARB                                     0x84c0
+#define GL_TEXTURE1_ARB                                     0x84c1
+#define GL_TEXTURE2_ARB                                     0x84c2
+#define GL_TEXTURE3_ARB                                     0x84c3
+#define GL_TEXTURE4_ARB                                     0x84c4
+#define GL_TEXTURE5_ARB                                     0x84c5
+#define GL_TEXTURE6_ARB                                     0x84c6
+#define GL_TEXTURE7_ARB                                     0x84c7
+#define GL_TEXTURE8_ARB                                     0x84c8
+#define GL_TEXTURE9_ARB                                     0x84c9
+#define GL_TEXTURE10_ARB                                    0x84ca
+#define GL_TEXTURE11_ARB                                    0x84cb
+#define GL_TEXTURE12_ARB                                    0x84cc
+#define GL_TEXTURE13_ARB                                    0x84cd
+#define GL_TEXTURE14_ARB                                    0x84ce
+#define GL_TEXTURE15_ARB                                    0x84cf
+#define GL_TEXTURE16_ARB                                    0x84d0
+#define GL_TEXTURE17_ARB                                    0x84d1
+#define GL_TEXTURE18_ARB                                    0x84d2
+#define GL_TEXTURE19_ARB                                    0x84d3
+#define GL_TEXTURE20_ARB                                    0x84d4
+#define GL_TEXTURE21_ARB                                    0x84d5
+#define GL_TEXTURE22_ARB                                    0x84d6
+#define GL_TEXTURE23_ARB                                    0x84d7
+#define GL_TEXTURE24_ARB                                    0x84d8
+#define GL_TEXTURE25_ARB                                    0x84d9
+#define GL_TEXTURE26_ARB                                    0x84da
+#define GL_TEXTURE27_ARB                                    0x84db
+#define GL_TEXTURE28_ARB                                    0x84dc
+#define GL_TEXTURE29_ARB                                    0x84dd
+#define GL_TEXTURE30_ARB                                    0x84de
+#define GL_TEXTURE31_ARB                                    0x84df
+#define GL_ACTIVE_TEXTURE_ARB                               0x84e0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB                        0x84e1
+#define GL_MAX_TEXTURE_UNITS_ARB                            0x84e2
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLACTIVETEXTUREARBPROC)(GLenum texture);
+typedef void (WINE_GLAPI *WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FARBPROC)(GLenum target,
+        GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort *v);
+
+/* GL_ARB_occlusion_query */
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#define GL_SAMPLES_PASSED_ARB                               0x8914
+#define GL_QUERY_COUNTER_BITS_ARB                           0x8864
+#define GL_CURRENT_QUERY_ARB                                0x8865
+#define GL_QUERY_RESULT_ARB                                 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB                       0x8867
+#endif
+typedef void (WINE_GLAPI *PGLFNGENQUERIESARBPROC)(GLsizei n, GLuint *queries);
+typedef void (WINE_GLAPI *PGLFNDELETEQUERIESARBPROC)(GLsizei n, const GLuint *queries);
+typedef GLboolean (WINE_GLAPI *PGLFNISQUERYARBPROC)(GLuint query);
+typedef void (WINE_GLAPI *PGLFNBEGINQUERYARBPROC)(GLenum target, GLuint query);
+typedef void (WINE_GLAPI *PGLFNENDQUERYARBPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETQUERYOBJECTIVARBPROC)(GLuint query, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETQUERYOBJECTUIVARBPROC)(GLuint query, GLenum pname, GLuint *params);
+
+/* GL_ARB_pixel_buffer_object */
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_ARB                            0x88eb
+#define GL_PIXEL_UNPACK_BUFFER_ARB                          0x88ec
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB                    0x88ed
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB                  0x88ef
+#endif
+
+/* GL_ARB_point_parameters */
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#define GL_POINT_SIZE_MIN_ARB                               0x8126
+#define GL_POINT_SIZE_MAX_ARB                               0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB                    0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB                   0x8129
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat *params);
+
+/* GL_ARB_point_sprite */
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#define GL_POINT_SPRITE_ARB                                 0x8861
+#define GL_COORD_REPLACE_ARB                                0x8862
+#endif
+
+/* GL_ARB_provoking_vertex */
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#define GL_FIRST_VERTEX_CONVENTION                          0x8e4d
+#define GL_LAST_VERTEX_CONVENTION                           0x8e4e
+#define GL_PROVOKING_VERTEX                                 0x8e4f
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION         0x8e4c
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPROVOKINGVERTEXPROC)(GLenum mode);
+
+/* GL_ARB_shader_objects */
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+typedef char GLcharARB;
+#ifdef RT_OS_DARWIN
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+#define GL_PROGRAM_OBJECT_ARB                               0x8b40
+#define GL_OBJECT_TYPE_ARB                                  0x8b4e
+#define GL_OBJECT_SUBTYPE_ARB                               0x8b4f
+#define GL_OBJECT_DELETE_STATUS_ARB                         0x8b80
+#define GL_OBJECT_COMPILE_STATUS_ARB                        0x8b81
+#define GL_OBJECT_LINK_STATUS_ARB                           0x8b82
+#define GL_OBJECT_VALIDATE_STATUS_ARB                       0x8b83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB                       0x8b84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB                      0x8b85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB                       0x8b86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB             0x8b87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB                  0x8b88
+#define GL_SHADER_OBJECT_ARB                                0x8b48
+#define GL_FLOAT_VEC2_ARB                                   0x8b50
+#define GL_FLOAT_VEC3_ARB                                   0x8b51
+#define GL_FLOAT_VEC4_ARB                                   0x8b52
+#define GL_INT_VEC2_ARB                                     0x8b53
+#define GL_INT_VEC3_ARB                                     0x8b54
+#define GL_INT_VEC4_ARB                                     0x8b55
+#define GL_BOOL_ARB                                         0x8b56
+#define GL_BOOL_VEC2_ARB                                    0x8b57
+#define GL_BOOL_VEC3_ARB                                    0x8b58
+#define GL_BOOL_VEC4_ARB                                    0x8b59
+#define GL_FLOAT_MAT2_ARB                                   0x8b5a
+#define GL_FLOAT_MAT3_ARB                                   0x8b5b
+#define GL_FLOAT_MAT4_ARB                                   0x8b5c
+#define GL_SAMPLER_1D_ARB                                   0x8b5d
+#define GL_SAMPLER_2D_ARB                                   0x8b5e
+#define GL_SAMPLER_3D_ARB                                   0x8b5f
+#define GL_SAMPLER_CUBE_ARB                                 0x8b60
+#define GL_SAMPLER_1D_SHADOW_ARB                            0x8b61
+#define GL_SAMPLER_2D_SHADOW_ARB                            0x8b62
+#define GL_SAMPLER_2D_RECT_ARB                              0x8b63
+#define GL_SAMPELR_2D_RECT_SHADOW_ARB                       0x8b64
+#endif
+
+/* GL_ARB_shading_language_100 */
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#define GL_SHADING_LANGUAGE_VERSION_ARB                     0x8b8c
+#endif
+
+/* GL_ARB_sync */
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#define GL_MAX_SERVER_WAIT_TIMEOUT              0x9111
+#define GL_OBJECT_TYPE                          0x9112
+#define GL_SYNC_CONDITION                       0x9113
+#define GL_SYNC_STATUS                          0x9114
+#define GL_SYNC_FLAGS                           0x9115
+#define GL_SYNC_FENCE                           0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE           0x9117
+#define GL_UNSIGNALED                           0x9118
+#define GL_SIGNALED                             0x9119
+#define GL_SYNC_FLUSH_COMMANDS_BIT              0x00000001
+#define GL_TIMEOUT_IGNORED                      0xffffffffffffffffULL
+#define GL_ALREADY_SIGNALED                     0x911a
+#define GL_TIMEOUT_EXPIRED                      0x911b
+#define GL_CONDITION_SATISFIED                  0x911c
+#define GL_WAIT_FAILED                          0x911d
+#endif
+typedef GLsync (WINE_GLAPI *PGLFNFENCESYNCPROC)(GLenum condition, GLbitfield flags);
+typedef GLboolean (WINE_GLAPI *PGLFNISSYNCPROC)(GLsync sync);
+typedef GLvoid (WINE_GLAPI *PGLFNDELETESYNCPROC)(GLsync sync);
+typedef GLenum (WINE_GLAPI *PGLFNCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef GLvoid (WINE_GLAPI *PGLFNWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef GLvoid (WINE_GLAPI *PGLFNGETINTEGER64VPROC)(GLenum pname, GLint64 *params);
+typedef GLvoid (WINE_GLAPI *PGLFNGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufsize,
+        GLsizei *length, GLint *values);
+
+/* GL_ARB_texture_border_clamp */
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB                              0x812d
+#endif
+
+/* GL_ARB_texture_cube_map */
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#define GL_NORMAL_MAP_ARB                                   0x8511
+#define GL_REFLECTION_MAP_ARB                               0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB                             0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB                     0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB                  0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB                  0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB                  0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB                  0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB                  0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB                  0x851a
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB                       0x851b
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB                    0x851c
+#endif
+
+/* GL_ARB_texture_env_dot3 */
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#define GL_DOT3_RGB_ARB                                     0x86ae
+#define GL_DOT3_RGBA_ARB                                    0x86af
+#endif
+
+/* GL_ARB_texture_float */
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#define GL_RGBA32F_ARB                                      0x8814
+#define GL_RGB32F_ARB                                       0x8815
+#define GL_RGBA16F_ARB                                      0x881a
+#define GL_RGB16F_ARB                                       0x881b
+#endif
+
+/* GL_ARB_texture_mirrored_repeat */
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB                              0x8370
+#endif
+
+/* GL_ARB_texture_rectangle */
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_ARB                            0x84f5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB                    0x84f6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB                      0x84f7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB                   0x84f8
+#define GL_SAMPLER_2D_RECT_ARB                              0x8b63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB                       0x8b64
+#endif
+
+/* GL_ARB_texture_rg */
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#define GL_RG                                               0x8227
+#define GL_RG_INTEGER                                       0x8228
+#define GL_R8                                               0x8229
+#define GL_R16                                              0x822a
+#define GL_RG8                                              0x822b
+#define GL_RG16                                             0x822c
+#define GL_R16F                                             0x822d
+#define GL_R32F                                             0x822e
+#define GL_RG16F                                            0x822f
+#define GL_RG32F                                            0x8230
+#define GL_R8I                                              0x8231
+#define GL_R8UI                                             0x8232
+#define GL_R16I                                             0x8233
+#define GL_R16UI                                            0x8234
+#define GL_R32I                                             0x8235
+#define GL_R32UI                                            0x8236
+#define GL_RG8I                                             0x8237
+#define GL_RG8UI                                            0x8238
+#define GL_RG16I                                            0x8239
+#define GL_RG16UI                                           0x823a
+#define GL_RG32I                                            0x823b
+#define GL_RG32UI                                           0x823c
+#endif
+
+/* GL_ARB_vertex_blend */
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#define GL_MAX_VERTEX_UNITS_ARB                             0x86a4
+#define GL_ACTIVE_VERTEX_UNITS_ARB                          0x86a5
+#define GL_WEIGHT_SUM_UNITY_ARB                             0x86a6
+#define GL_VERTEX_BLEND_ARB                                 0x86a7
+#define GL_CURRENT_WEIGHT_ARB                               0x86a8
+#define GL_WEIGHT_ARRAY_TYPE_ARB                            0x86a9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB                          0x86aa
+#define GL_WEIGHT_ARRAY_SIZE_ARB                            0x86ab
+#define GL_WEIGHT_ARRAY_POINTER_ARB                         0x86ac
+#define GL_WEIGHT_ARRAY_ARB                                 0x86ad
+#define GL_MODELVIEW0_ARB                                   0x1700
+#define GL_MODELVIEW1_ARB                                   0x850a
+#define GL_MODELVIEW2_ARB                                   0x8722
+#define GL_MODELVIEW3_ARB                                   0x8723
+#define GL_MODELVIEW4_ARB                                   0x8724
+#define GL_MODELVIEW5_ARB                                   0x8725
+#define GL_MODELVIEW6_ARB                                   0x8726
+#define GL_MODELVIEW7_ARB                                   0x8727
+#define GL_MODELVIEW8_ARB                                   0x8728
+#define GL_MODELVIEW9_ARB                                   0x8729
+#define GL_MODELVIEW10_ARB                                  0x872a
+#define GL_MODELVIEW11_ARB                                  0x872b
+#define GL_MODELVIEW12_ARB                                  0x872c
+#define GL_MODELVIEW13_ARB                                  0x872d
+#define GL_MODELVIEW14_ARB                                  0x872e
+#define GL_MODELVIEW15_ARB                                  0x872f
+#define GL_MODELVIEW16_ARB                                  0x8730
+#define GL_MODELVIEW17_ARB                                  0x8731
+#define GL_MODELVIEW18_ARB                                  0x8732
+#define GL_MODELVIEW19_ARB                                  0x8733
+#define GL_MODELVIEW20_ARB                                  0x8734
+#define GL_MODELVIEW21_ARB                                  0x8735
+#define GL_MODELVIEW22_ARB                                  0x8736
+#define GL_MODELVIEW23_ARB                                  0x8737
+#define GL_MODELVIEW24_ARB                                  0x8738
+#define GL_MODELVIEW25_ARB                                  0x8739
+#define GL_MODELVIEW26_ARB                                  0x873a
+#define GL_MODELVIEW27_ARB                                  0x873b
+#define GL_MODELVIEW28_ARB                                  0x873c
+#define GL_MODELVIEW29_ARB                                  0x873d
+#define GL_MODELVIEW30_ARB                                  0x873e
+#define GL_MODELVIEW31_ARB                                  0x873f
+#endif
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTPOINTERARB)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTBV)(GLint size, const GLbyte *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTSV)(GLint size, const GLshort *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTIV)(GLint size, const GLint *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTFV)(GLint size, const GLfloat *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTDV)(GLint size, const GLdouble *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUBV)(GLint size, const GLubyte *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUSV)(GLint size, const GLushort *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUIV)(GLint size, const GLuint *weights);
+typedef void (WINE_GLAPI *PGLFNGLVERTEXBLENDARB)(GLint count);
+
+/* GL_ARB_vertex_buffer_object */
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+#define GL_BUFFER_SIZE_ARB                                  0x8764
+#define GL_BUFFER_USAGE_ARB                                 0x8765
+#define GL_ARRAY_BUFFER_ARB                                 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB                         0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB                         0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB                 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB                  0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB                  0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB                   0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB                   0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB           0x889a
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB               0x889b
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB         0x889c
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB          0x889d
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB                  0x889e
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB           0x889f
+#define GL_READ_ONLY_ARB                                    0x88b8
+#define GL_WRITE_ONLY_ARB                                   0x88b9
+#define GL_READ_WRITE_ARB                                   0x88ba
+#define GL_BUFFER_ACCESS_ARB                                0x88bb
+#define GL_BUFFER_MAPPED_ARB                                0x88bc
+#define GL_BUFFER_MAP_POINTER_ARB                           0x88bd
+#define GL_STREAM_DRAW_ARB                                  0x88e0
+#define GL_STREAM_READ_ARB                                  0x88e1
+#define GL_STREAM_COPY_ARB                                  0x88e2
+#define GL_STATIC_DRAW_ARB                                  0x88e4
+#define GL_STATIC_READ_ARB                                  0x88e5
+#define GL_STATIC_COPY_ARB                                  0x88e6
+#define GL_DYNAMIC_DRAW_ARB                                 0x88e8
+#define GL_DYNAMIC_READ_ARB                                 0x88e9
+#define GL_DYNAMIC_COPY_ARB                                 0x88ea
+#endif
+typedef void (WINE_GLAPI *PGLFNBINDBUFFERARBPROC)(GLenum target, GLuint buffer);
+typedef void (WINE_GLAPI *PGLFNDELETEBUFFERSARBPROC)(GLsizei n, const GLuint *buffers);
+typedef void (WINE_GLAPI *PGLFNGENBUFFERSARBPROC)(GLsizei n, GLuint *buffers);
+typedef GLboolean (WINE_GLAPI *PGLFNISBUFFERARBPROC)(GLuint buffer);
+typedef void (WINE_GLAPI *PGLFNBUFFERDATAARBPROC)(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (WINE_GLAPI *PGLFNBUFFERSUBDATAARBPROC)(GLenum target,
+        GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef GLvoid* (WINE_GLAPI *PGLFNMAPBUFFERARBPROC)(GLenum  target, GLenum access);
+typedef GLboolean (WINE_GLAPI *PGLFNUNMAPBUFFERARBPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, GLvoid* *params);
+
+/* GL_ARB_vertex_program */
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#define GL_VERTEX_PROGRAM_ARB                               0x8620
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB                    0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB                      0x8643
+#define GL_COLOR_SUM_ARB                                    0x8458
+#define GL_PROGRAM_FORMAT_ASCII_ARB                         0x8875
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB                  0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB                     0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB                   0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB                     0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB               0x886a
+#define GL_CURRENT_VERTEX_ATTRIB_ARB                        0x8626
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB                  0x8645
+#define GL_PROGRAM_LENGTH_ARB                               0x8627
+#define GL_PROGRAM_FORMAT_ARB                               0x8876
+#define GL_PROGRAM_BINDING_ARB                              0x8677
+#define GL_PROGRAM_INSTRUCTIONS_ARB                         0x88a0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB                     0x88a1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB                  0x88a2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB              0x88a3
+#define GL_PROGRAM_TEMPORARIES_ARB                          0x88a4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB                      0x88a5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB                   0x88a6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB               0x88a7
+#define GL_PROGRAM_PARAMETERS_ARB                           0x88a8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB                       0x88a9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB                    0x88aa
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB                0x88ab
+#define GL_PROGRAM_ATTRIBS_ARB                              0x88ac
+#define GL_MAX_PROGRAM_ATTRIBS_ARB                          0x88ad
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB                       0x88ae
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB                   0x88af
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB                    0x88b0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB                0x88b1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB             0x88b2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB         0x88b3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB                 0x88b4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB                   0x88b5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB                  0x88b6
+#define GL_PROGRAM_STRING_ARB                               0x8628
+#define GL_PROGRAM_ERROR_POSITION_ARB                       0x864b
+#define GL_CURRENT_MATRIX_ARB                               0x8641
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB                     0x88b7
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB                   0x8640
+#define GL_MAX_VERTEX_ATTRIBS_ARB                           0x8869
+#define GL_MAX_PROGRAM_MATRICES_ARB                         0x862f
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB               0x862e
+#define GL_PROGRAM_ERROR_STRING_ARB                         0x8874
+#define GL_MATRIX0_ARB                                      0x88c0
+#define GL_MATRIX1_ARB                                      0x88c1
+#define GL_MATRIX2_ARB                                      0x88c2
+#define GL_MATRIX3_ARB                                      0x88c3
+#define GL_MATRIX4_ARB                                      0x88c4
+#define GL_MATRIX5_ARB                                      0x88c5
+#define GL_MATRIX6_ARB                                      0x88c6
+#define GL_MATRIX7_ARB                                      0x88c7
+#define GL_MATRIX8_ARB                                      0x88c8
+#define GL_MATRIX9_ARB                                      0x88c9
+#define GL_MATRIX10_ARB                                     0x88ca
+#define GL_MATRIX11_ARB                                     0x88cb
+#define GL_MATRIX12_ARB                                     0x88cc
+#define GL_MATRIX13_ARB                                     0x88cd
+#define GL_MATRIX14_ARB                                     0x88ce
+#define GL_MATRIX15_ARB                                     0x88cf
+#define GL_MATRIX16_ARB                                     0x88d0
+#define GL_MATRIX17_ARB                                     0x88d1
+#define GL_MATRIX18_ARB                                     0x88d2
+#define GL_MATRIX19_ARB                                     0x88d3
+#define GL_MATRIX20_ARB                                     0x88d4
+#define GL_MATRIX21_ARB                                     0x88d5
+#define GL_MATRIX22_ARB                                     0x88d6
+#define GL_MATRIX23_ARB                                     0x88d7
+#define GL_MATRIX24_ARB                                     0x88d8
+#define GL_MATRIX25_ARB                                     0x88d9
+#define GL_MATRIX26_ARB                                     0x88da
+#define GL_MATRIX27_ARB                                     0x88db
+#define GL_MATRIX28_ARB                                     0x88dc
+#define GL_MATRIX29_ARB                                     0x88dd
+#define GL_MATRIX30_ARB                                     0x88de
+#define GL_MATRIX31_ARB                                     0x88df
+#endif
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size,
+        GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+typedef void (WINE_GLAPI *PGLFNENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+typedef void (WINE_GLAPI *PGLFNBINDPROGRAMARBPROC)(GLenum target, GLuint program);
+typedef void (WINE_GLAPI *PGLFNDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint *programs);
+typedef void (WINE_GLAPI *PGLFNGENPROGRAMSARBPROC)(GLsizei n, GLuint *programs);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4DARBPROC)(GLenum target,
+        GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4FARBPROC)(GLenum target,
+        GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target,
+        GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target,
+        GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, GLvoid *string);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (WINE_GLAPI *PGLFNISPROGRAMARBPROC)(GLuint program);
+
+/* GL_ARB_vertex_shader */
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#define GL_VERTEX_SHADER_ARB                                0x8b31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB                0x8b4a
+#define GL_MAX_VARYING_FLOATS_ARB                           0x8b4b
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB               0x8b4c
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB             0x8b4d
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB                     0x8b89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB           0x8b8a
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef GLint (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index,
+        GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4FARBPROC)(GLint location,
+        GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location,
+        GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location,
+        GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location,
+        GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETINFOLOGARBPROC)(GLhandleARB obj,
+        GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType);
+typedef void (WINE_GLAPI *WINED3D_PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj,
+        GLsizei count, const GLcharARB* *string, const GLint *length);
+typedef void (WINE_GLAPI *WINED3D_PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC)(void);
+typedef void (WINE_GLAPI *WINED3D_PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj,
+        GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLGETHANDLEARBPROC)(GLenum pname);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj,
+        GLsizei maxLength, GLsizei *length, GLcharARB *source);
+typedef void (WINE_GLAPI *WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj,
+        GLuint index, const GLcharARB *name);
+typedef GLint (WINE_GLAPI *WINED3D_PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name);
+
+/* GL_ATI_fragment_shader */
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ATI                              0x8920
+#define GL_REG_0_ATI                                        0x8921
+#define GL_REG_1_ATI                                        0x8922
+#define GL_REG_2_ATI                                        0x8923
+#define GL_REG_3_ATI                                        0x8924
+#define GL_REG_4_ATI                                        0x8925
+#define GL_REG_5_ATI                                        0x8926
+#define GL_CON_0_ATI                                        0x8941
+#define GL_CON_1_ATI                                        0x8942
+#define GL_CON_2_ATI                                        0x8943
+#define GL_CON_3_ATI                                        0x8944
+#define GL_CON_4_ATI                                        0x8945
+#define GL_CON_5_ATI                                        0x8946
+#define GL_CON_6_ATI                                        0x8947
+#define GL_CON_7_ATI                                        0x8948
+#define GL_MOV_ATI                                          0x8961
+#define GL_ADD_ATI                                          0x8963
+#define GL_MUL_ATI                                          0x8964
+#define GL_SUB_ATI                                          0x8965
+#define GL_DOT3_ATI                                         0x8966
+#define GL_DOT4_ATI                                         0x8967
+#define GL_MAD_ATI                                          0x8968
+#define GL_LERP_ATI                                         0x8969
+#define GL_CND_ATI                                          0x896a
+#define GL_CND0_ATI                                         0x896b
+#define GL_DOT2_ADD_ATI                                     0x896c
+#define GL_SECONDARY_INTERPOLATOR_ATI                       0x896d
+#define GL_SWIZZLE_STR_ATI                                  0x8976
+#define GL_SWIZZLE_STQ_ATI                                  0x8977
+#define GL_SWIZZLE_STR_DR_ATI                               0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI                               0x8979
+#define GL_RED_BIT_ATI                                      0x00000001
+#define GL_GREEN_BIT_ATI                                    0x00000002
+#define GL_BLUE_BIT_ATI                                     0x00000004
+#define GL_2X_BIT_ATI                                       0x00000001
+#define GL_4X_BIT_ATI                                       0x00000002
+#define GL_8X_BIT_ATI                                       0x00000004
+#define GL_HALF_BIT_ATI                                     0x00000008
+#define GL_QUARTER_BIT_ATI                                  0x00000010
+#define GL_EIGHTH_BIT_ATI                                   0x00000020
+#define GL_SATURATE_BIT_ATI                                 0x00000040
+#define GL_COMP_BIT_ATI                                     0x00000002
+#define GL_NEGATE_BIT_ATI                                   0x00000004
+#define GL_BIAS_BIT_ATI                                     0x00000008
+#endif
+typedef GLuint (WINE_GLAPI *PGLFNGENFRAGMENTSHADERSATI)(GLuint range);
+typedef void (WINE_GLAPI *PGLFNBINDFRAGMENTSHADERATI)(GLuint id);
+typedef void (WINE_GLAPI *PGLFNDELETEFRAGMENTSHADERATI)(GLuint id);
+typedef void (WINE_GLAPI *PGLFNBEGINFRAGMENTSHADERATI)(void);
+typedef void (WINE_GLAPI *PGLFNENDFRAGMENTSHADERATI)(void);
+typedef void (WINE_GLAPI *PGLFNPASSTEXCOORDATI)(GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (WINE_GLAPI *PGLFNSAMPLEMAPATI)(GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP1ATI)(GLenum op, GLuint dst, GLuint dstMask,
+        GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP2ATI)(GLenum op, GLuint dst, GLuint dstMask,
+        GLuint dstMod, GLuint arg1, GLuint arg1Rep,
+        GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
+        GLuint arg2Mod);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP3ATI)(GLenum op, GLuint dst, GLuint dstMask,
+        GLuint dstMod, GLuint arg1, GLuint arg1Rep,
+        GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
+        GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
+        GLuint arg3Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP1ATI)(GLenum op, GLuint dst, GLuint dstMod,
+        GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP2ATI)(GLenum op, GLuint dst, GLuint dstMod,
+        GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
+        GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP3ATI)(GLenum op, GLuint dst, GLuint dstMod,
+        GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
+        GLuint arg2, GLuint arg2Rep, GLuint arg2Mod,
+        GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (WINE_GLAPI *PGLFNSETFRAGMENTSHADERCONSTANTATI)(GLuint dst, const GLfloat *value);
+
+/* GL_ATI_separate_stencil */
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#define GL_STENCIL_BACK_FUNC_ATI                            0x8800
+#define GL_STENCIL_BACK_FAIL_ATI                            0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI                 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI                 0x8803
+#endif
+typedef void (WINE_GLAPI *PGLFNSTENCILOPSEPARATEATIPROC)(GLenum, GLenum, GLenum, GLenum);
+typedef void (WINE_GLAPI *PGLFNSTENCILFUNCSEPARATEATIPROC)(GLenum, GLenum, GLint, GLuint);
+
+/* GL_ATI_texture_compression_3dc */
+#ifndef GL_ATI_texture_compression_3dc
+#define GL_ATI_texture_compression_3dc 1
+#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI               0x8837
+#endif
+
+/* GL_ATI_texture_env_combine3 */
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI                                 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI                          0x8745
+#define GL_MODULATE_SUBTRACT_ATI                            0x8746
+/* #define ONE */
+/* #define ZERO */
+#endif
+
+/* GL_ATI_texture_mirror_once */
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#define GL_MIRROR_CLAMP_ATI                                 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI                         0x8743
+#endif
+
+/* GL_EXT_blend_equation_separate */
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha);
+
+/* GL_EXT_blend_func_separate */
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#define GL_BLEND_DST_RGB_EXT                                0x80c8
+#define GL_BLEND_SRC_RGB_EXT                                0x80c9
+#define GL_BLEND_DST_ALPHA_EXT                              0x80ca
+#define GL_BLEND_SRC_ALPHA_EXT                              0x80cb
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB,
+        GLenum sfactorAlpha, GLenum dfactorAlpha);
+
+/* GL_EXT_draw_buffers2 */
+typedef GLvoid (WINE_GLAPI *PGLFNCOLORMASKINDEXEDEXTPROC)(GLuint buffer_idx, GLboolean r, GLboolean g,
+        GLboolean b, GLboolean a);
+typedef GLvoid (WINE_GLAPI *PGLFNGETBOOLEANINDEXEDVEXTPROC)(GLenum param, GLuint index, GLboolean *value);
+typedef GLvoid (WINE_GLAPI *PGLFNGETINTEGERINDEXEDVEXTPROC)(GLenum param, GLuint index, GLint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNENABLEINDEXEDEXTPROC)(GLenum target, GLuint index);
+typedef GLvoid (WINE_GLAPI *PGLFNDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index);
+typedef GLboolean (WINE_GLAPI *PGLFNISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index);
+
+/* GL_EXT_fog_coord */
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#define GL_FOG_COORDINATE_SOURCE_EXT                        0x8450
+#define GL_FOG_COORDINATE_EXT                               0x8451
+#define GL_FRAGMENT_DEPTH_EXT                               0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT                       0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT                    0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT                  0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT                 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT                         0x8457
+#endif
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDFEXTPROC)(GLfloat coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDFVEXTPROC)(const GLfloat *coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDDEXTPROC)(GLdouble coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDDVEXTPROC)(const GLdouble *coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, GLvoid *data);
+
+/* GL_EXT_framebuffer_blit */
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#define GL_READ_FRAMEBUFFER_EXT                             0x8ca8
+#define GL_DRAW_FRAMEBUFFER_EXT                             0x8ca9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT                     0x8ca6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT                     0x8caa
+#endif
+typedef void (WINE_GLAPI *PGLFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+        GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+
+/* GL_EXT_framebuffer_multisample */
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_EXT                         0x8cab
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT           0x8d56
+#define GL_MAX_SAMPLES_EXT                                  0x8d57
+#endif
+typedef void (WINE_GLAPI *PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples,
+        GLenum internalformat, GLsizei width, GLsizei height);
+
+/* GL_EXT_framebuffer_object */
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#define GL_FRAMEBUFFER_EXT                                  0x8d40
+#define GL_RENDERBUFFER_EXT                                 0x8d41
+#define GL_STENCIL_INDEX1_EXT                               0x8d46
+#define GL_STENCIL_INDEX4_EXT                               0x8d47
+#define GL_STENCIL_INDEX8_EXT                               0x8d48
+#define GL_STENCIL_INDEX16_EXT                              0x8d49
+#define GL_RENDERBUFFER_WIDTH_EXT                           0x8d42
+#define GL_RENDERBUFFER_HEIGHT_EXT                          0x8d43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT                 0x8d44
+#define GL_RENDERBUFFER_RED_SIZE_EXT                        0x8d50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT                      0x8d51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT                       0x8d52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT                      0x8d53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT                      0x8d54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT                    0x8d55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT           0x8cd0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT           0x8cd1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT         0x8cd2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8cd3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT    0x8cd4
+#define GL_COLOR_ATTACHMENT0_EXT                            0x8ce0
+#define GL_COLOR_ATTACHMENT1_EXT                            0x8ce1
+#define GL_COLOR_ATTACHMENT2_EXT                            0x8ce2
+#define GL_COLOR_ATTACHMENT3_EXT                            0x8ce3
+#define GL_COLOR_ATTACHMENT4_EXT                            0x8ce4
+#define GL_COLOR_ATTACHMENT5_EXT                            0x8ce5
+#define GL_COLOR_ATTACHMENT6_EXT                            0x8ce6
+#define GL_COLOR_ATTACHMENT7_EXT                            0x8ce7
+#define GL_COLOR_ATTACHMENT8_EXT                            0x8ce8
+#define GL_COLOR_ATTACHMENT9_EXT                            0x8ce9
+#define GL_COLOR_ATTACHMENT10_EXT                           0x8cea
+#define GL_COLOR_ATTACHMENT11_EXT                           0x8ceb
+#define GL_COLOR_ATTACHMENT12_EXT                           0x8cec
+#define GL_COLOR_ATTACHMENT13_EXT                           0x8ced
+#define GL_COLOR_ATTACHMENT14_EXT                           0x8cee
+#define GL_COLOR_ATTACHMENT15_EXT                           0x8cef
+#define GL_DEPTH_ATTACHMENT_EXT                             0x8d00
+#define GL_STENCIL_ATTACHMENT_EXT                           0x8d20
+#define GL_FRAMEBUFFER_COMPLETE_EXT                         0x8cd5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT            0x8cd6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT    0x8cd7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT            0x8cd9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT               0x8cda
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT           0x8cdb
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT           0x8cdc
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT                      0x8cdd
+#define GL_FRAMEBUFFER_BINDING_EXT                          0x8ca6
+#define GL_RENDERBUFFER_BINDING_EXT                         0x8ca7
+#define GL_MAX_COLOR_ATTACHMENTS_EXT                        0x8cdF
+#define GL_MAX_RENDERBUFFER_SIZE_EXT                        0x84e8
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT                0x0506
+#endif
+typedef GLboolean (WINE_GLAPI *PGLFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target,
+        GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (WINE_GLAPI *PGLFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint *framebuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint *framebuffers);
+typedef GLenum (WINE_GLAPI *PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment,
+        GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment,
+        GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment,
+        GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment,
+        GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target,
+        GLenum attachment, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGLGENERATEMIPMAPEXTPROC)(GLenum target);
+
+/* GL_EXT_gpu_program_parameters */
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target,
+        GLuint index, GLsizei count, const float *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target,
+        GLuint index, GLsizei count, const float *params);
+#endif
+
+/* GL_EXT_gpu_shader4 */
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT                  0x88fd
+#define GL_SAMPLER_1D_ARRAY_EXT                             0x8dc0
+#define GL_SAMPLER_2D_ARRAY_EXT                             0x8dc1
+#define GL_SAMPLER_BUFFER_EXT                               0x8dc2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT                      0x8dc3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT                      0x8dc4
+#define GL_SAMPLER_CUBE_SHADOW_EXT                          0x8dc5
+#define GL_UNSIGNED_INT_VEC2_EXT                            0x8dc6
+#define GL_UNSIGNED_INT_VEC3_EXT                            0x8dc7
+#define GL_UNSIGNED_INT_VEC4_EXT                            0x8dc8
+#define GL_INT_SAMPLER_1D_EXT                               0x8dc9
+#define GL_INT_SAMPLER_2D_EXT                               0x8dca
+#define GL_INT_SAMPLER_3D_EXT                               0x8dcb
+#define GL_INT_SAMPLER_CUBE_EXT                             0x8dcc
+#define GL_INT_SAMPLER_2D_RECT_EXT                          0x8dcd
+#define GL_INT_SAMPLER_1D_ARRAY_EXT                         0x8dce
+#define GL_INT_SAMPLER_2D_ARRAY_EXT                         0x8dcf
+#define GL_INT_SAMPLER_BUFFER_EXT                           0x8dd0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT                      0x8dd1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT                      0x8dd2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT                      0x8dd3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT                    0x8dd4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT                 0x8dd5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT                0x8dd6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT                0x8dd7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT                  0x8dd8
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT                     0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT                     0x8905
+#endif
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type,
+        GLsizei stride, const GLvoid *pointer);
+typedef GLvoid (WINE_GLAPI *PGLFNGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM1UIEXTPROC)(GLint location, GLuint v0);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, const GLuint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color_number, const GLchar *name);
+typedef GLint (WINE_GLAPI *PGLFNGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar *name);
+
+/* GL_EXT_packed_depth_stencil */
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_EXT                                0x84f9
+#define GL_UNSIGNED_INT_24_8_EXT                            0x84fa
+#define GL_DEPTH24_STENCIL8_EXT                             0x88f0
+#define GL_TEXTURE_STENCIL_SIZE_EXT                         0x88f1
+#endif
+
+/* GL_EXT_paletted_texture */
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#define GL_COLOR_INDEX1_EXT                                 0x80e2
+#define GL_COLOR_INDEX2_EXT                                 0x80e3
+#define GL_COLOR_INDEX4_EXT                                 0x80e4
+#define GL_COLOR_INDEX8_EXT                                 0x80e5
+#define GL_COLOR_INDEX12_EXT                                0x80e6
+#define GL_COLOR_INDEX16_EXT                                0x80e7
+#define GL_TEXTURE_INDEX_SIZE_EXT                           0x80ed
+#endif
+typedef void (WINE_GLAPI *PGLFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat,
+        GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+
+/* GL_EXT_point_parameters */
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#define GL_POINT_SIZE_MIN_EXT                               0x8126
+#define GL_POINT_SIZE_MAX_EXT                               0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT                    0x8128
+#define GL_DISTANCE_ATTENUATION_EXT                         0x8129
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat *params);
+
+/* GL_EXT_provoking_vertex */
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+#define GL_FIRST_VERTEX_CONVENTION_EXT                      0x8e4d
+#define GL_LAST_VERTEX_CONVENTION_EXT                       0x8e4e
+#define GL_PROVOKING_VERTEX_EXT                             0x8e4f
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT     0x8e4c
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode);
+
+/* GL_EXT_secondary_color */
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#define GL_COLOR_SUM_EXT                                    0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT                      0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT                   0x845a
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT                   0x845b
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT                 0x845c
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT                0x845d
+#define GL_SECONDARY_COLOR_ARRAY_EXT                        0x845e
+#endif
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type,
+        GLsizei stride, const GLvoid *pointer);
+
+/* GL_EXT_stencil_two_side */
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#define GL_STENCIL_TEST_TWO_SIDE_EXT                        0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT                          0x8911
+#endif
+typedef void (WINE_GLAPI *PGLFNACTIVESTENCILFACEEXTPROC)(GLenum face);
+
+/* GL_EXT_stencil_wrap */
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#define GL_INCR_WRAP_EXT                                    0x8507
+#define GL_DECR_WRAP_EXT                                    0x8508
+#endif
+
+/* GL_EXT_texture3D */
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#define GL_PACK_SKIP_IMAGES_EXT                             0x806b
+#define GL_PACK_IMAGE_HEIGHT_EXT                            0x806c
+#define GL_UNPACK_SKIP_IMAGES_EXT                           0x806d
+#define GL_UNPACK_IMAGE_HEIGHT_EXT                          0x806e
+#define GL_TEXTURE_3D_EXT                                   0x806f
+#define GL_PROXY_TEXTURE_3D_EXT                             0x8070
+#define GL_TEXTURE_DEPTH_EXT                                0x8071
+#define GL_TEXTURE_WRAP_R_EXT                               0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT                          0x8073
+#endif
+typedef void (WINE_GLAPI *PGLFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat,
+        GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (WINE_GLAPI *PGLFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+        GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+
+/* GL_EXT_texture_compression_rgtc */
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#define GL_COMPRESSED_RED_RGTC1_EXT                         0x8dbb
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT                  0x8dbc
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT                   0x8dbd
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT            0x8dbe
+#endif
+
+/* GL_EXT_texture_compression_s3tc */
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT                     0x83f0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                    0x83f1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT                    0x83f2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT                    0x83f3
+#endif
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat,
+        GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat,
+        GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat,
+        GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level,
+        GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
+        GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+        GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset,
+        GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img);
+
+/* GL_EXT_texture_env_combine */
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#define GL_COMBINE_EXT                                      0x8570
+#define GL_COMBINE_RGB_EXT                                  0x8571
+#define GL_COMBINE_ALPHA_EXT                                0x8572
+#define GL_RGB_SCALE_EXT                                    0x8573
+#define GL_ADD_SIGNED_EXT                                   0x8574
+#define GL_INTERPOLATE_EXT                                  0x8575
+#define GL_SUBTRACT_EXT                                     0x84e7
+#define GL_CONSTANT_EXT                                     0x8576
+#define GL_PRIMARY_COLOR_EXT                                0x8577
+#define GL_PREVIOUS_EXT                                     0x8578
+#define GL_SOURCE0_RGB_EXT                                  0x8580
+#define GL_SOURCE1_RGB_EXT                                  0x8581
+#define GL_SOURCE2_RGB_EXT                                  0x8582
+#define GL_SOURCE3_RGB_EXT                                  0x8583
+#define GL_SOURCE4_RGB_EXT                                  0x8584
+#define GL_SOURCE5_RGB_EXT                                  0x8585
+#define GL_SOURCE6_RGB_EXT                                  0x8586
+#define GL_SOURCE7_RGB_EXT                                  0x8587
+#define GL_SOURCE0_ALPHA_EXT                                0x8588
+#define GL_SOURCE1_ALPHA_EXT                                0x8589
+#define GL_SOURCE2_ALPHA_EXT                                0x858a
+#define GL_SOURCE3_ALPHA_EXT                                0x858b
+#define GL_SOURCE4_ALPHA_EXT                                0x858c
+#define GL_SOURCE5_ALPHA_EXT                                0x858d
+#define GL_SOURCE6_ALPHA_EXT                                0x858e
+#define GL_SOURCE7_ALPHA_EXT                                0x858f
+#define GL_OPERAND0_RGB_EXT                                 0x8590
+#define GL_OPERAND1_RGB_EXT                                 0x8591
+#define GL_OPERAND2_RGB_EXT                                 0x8592
+#define GL_OPERAND3_RGB_EXT                                 0x8593
+#define GL_OPERAND4_RGB_EXT                                 0x8594
+#define GL_OPERAND5_RGB_EXT                                 0x8595
+#define GL_OPERAND6_RGB_EXT                                 0x8596
+#define GL_OPERAND7_RGB_EXT                                 0x8597
+#define GL_OPERAND0_ALPHA_EXT                               0x8598
+#define GL_OPERAND1_ALPHA_EXT                               0x8599
+#define GL_OPERAND2_ALPHA_EXT                               0x859a
+#define GL_OPERAND3_ALPHA_EXT                               0x859b
+#define GL_OPERAND4_ALPHA_EXT                               0x859c
+#define GL_OPERAND5_ALPHA_EXT                               0x859d
+#define GL_OPERAND6_ALPHA_EXT                               0x859e
+#define GL_OPERAND7_ALPHA_EXT                               0x859f
+#endif
+
+/* GL_EXT_texture_env_dot3 */
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#define GL_DOT3_RGB_EXT                                     0x8740
+#define GL_DOT3_RGBA_EXT                                    0x8741
+#endif
+
+/* GL_EXT_texture_filter_anisotropic */
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT                       0x84fe
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                   0x84ff
+#endif
+
+/* GL_EXT_texture_lod_bias */
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT                         0x84fd
+#define GL_TEXTURE_FILTER_CONTROL_EXT                       0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT                             0x8501
+#endif
+
+/* GL_EXT_texture_sRGB */
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#define GL_SRGB_EXT                                         0x8c40
+#define GL_SRGB8_EXT                                        0x8c41
+#define GL_SRGB_ALPHA_EXT                                   0x8c42
+#define GL_SRGB8_ALPHA8_EXT                                 0x8c43
+#define GL_SLUMINANCE_ALPHA_EXT                             0x8c44
+#define GL_SLUMINANCE8_ALPHA8_EXT                           0x8c45
+#define GL_SLUMINANCE_EXT                                   0x8c46
+#define GL_SLUMINANCE8_EXT                                  0x8c47
+#define GL_COMPRESSED_SRGB_EXT                              0x8c48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT                        0x8c49
+#define GL_COMPRESSED_SLUMINANCE_EXT                        0x8c4a
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT                  0x8c4b
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT                    0x8c4c
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT              0x8c4d
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT              0x8c4e
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT              0x8c4f
+#endif
+
+/* GL_NV_depth_clamp */
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#define GL_DEPTH_CLAMP_NV                                   0x864f
+#endif
+
+/* GL_NV_fence */
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV                                 0x84f2
+#define GL_FENCE_STATUS_NV                                  0x84f3
+#define GL_FENCE_CONDITION_NV                               0x84f4
+#endif
+typedef void (WINE_GLAPI *PGLFNGENFENCESNVPROC)(GLsizei, GLuint *);
+typedef void (WINE_GLAPI *PGLFNDELETEFENCESNVPROC)(GLuint, const GLuint *);
+typedef void (WINE_GLAPI *PGLFNSETFENCENVPROC)(GLuint, GLenum);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTFENCENVPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHFENCENVPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNISFENCENVPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNGETFENCEIVNVPROC)(GLuint, GLenum, GLint *);
+
+/* GL_NV_fog_distance */
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#define GL_FOG_DISTANCE_MODE_NV                             0x855a
+#define GL_EYE_RADIAL_NV                                    0x855b
+#define GL_EYE_PLANE_ABSOLUTE_NV                            0x855c
+/* reuse GL_EYE_PLANE */
+#endif
+
+/* GL_NV_half_float */
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+typedef unsigned short GLhalfNV;
+#define GL_HALF_FLOAT_NV                                    0x140b
+#endif
+typedef void (WINE_GLAPI *PGLFNVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y);
+typedef void (WINE_GLAPI *PGLFNVERTEX2HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (WINE_GLAPI *PGLFNVERTEX3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (WINE_GLAPI *PGLFNVERTEX4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (WINE_GLAPI *PGLFNNORMAL3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (WINE_GLAPI *PGLFNCOLOR3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (WINE_GLAPI *PGLFNCOLOR4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD1HNVPROC)(GLhalfNV s);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD1HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD2HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNFOGCOORDHNVPROC)(GLhalfNV fog);
+typedef void (WINE_GLAPI *PGLFNFOGCOORDHVNVPROC)(const GLhalfNV *fog);
+typedef void (WINE_GLAPI *PGLFNSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (WINE_GLAPI *PGLFNSECONDARYCOLOR3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXWEIGHTHNVPROC)(GLhalfNV weight);
+typedef void (WINE_GLAPI *PGLFNVERTEXWEIGHTHVNVPROC)(const GLhalfNV *weight);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+
+/* GL_NV_light_max_exponent */
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#define GL_MAX_SHININESS_NV                                 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV                             0x8505
+#endif
+
+/* GL_NV_register_combiners */
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#define GL_REGISTER_COMBINERS_NV                            0x8522
+#define GL_VARIABLE_A_NV                                    0x8523
+#define GL_VARIABLE_B_NV                                    0x8524
+#define GL_VARIABLE_C_NV                                    0x8525
+#define GL_VARIABLE_D_NV                                    0x8526
+#define GL_VARIABLE_E_NV                                    0x8527
+#define GL_VARIABLE_F_NV                                    0x8528
+#define GL_VARIABLE_G_NV                                    0x8529
+#define GL_CONSTANT_COLOR0_NV                               0x852a
+#define GL_CONSTANT_COLOR1_NV                               0x852b
+#define GL_PRIMARY_COLOR_NV                                 0x852c
+#define GL_SECONDARY_COLOR_NV                               0x852d
+#define GL_SPARE0_NV                                        0x852e
+#define GL_SPARE1_NV                                        0x852f
+#define GL_DISCARD_NV                                       0x8530
+#define GL_E_TIMES_F_NV                                     0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV                   0x8532
+#define GL_UNSIGNED_IDENTITY_NV                             0x8536
+#define GL_UNSIGNED_INVERT_NV                               0x8537
+#define GL_EXPAND_NORMAL_NV                                 0x8538
+#define GL_EXPAND_NEGATE_NV                                 0x8539
+#define GL_HALF_BIAS_NORMAL_NV                              0x853a
+#define GL_HALF_BIAS_NEGATE_NV                              0x853b
+#define GL_SIGNED_IDENTITY_NV                               0x853c
+#define GL_SIGNED_NEGATE_NV                                 0x853d
+#define GL_SCALE_BY_TWO_NV                                  0x853e
+#define GL_SCALE_BY_FOUR_NV                                 0x853f
+#define GL_SCALE_BY_ONE_HALF_NV                             0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV                     0x8541
+#define GL_COMBINER_INPUT_NV                                0x8542
+#define GL_COMBINER_MAPPING_NV                              0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV                      0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV                       0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV                       0x8546
+#define GL_COMBINER_MUX_SUM_NV                              0x8547
+#define GL_COMBINER_SCALE_NV                                0x8548
+#define GL_COMBINER_BIAS_NV                                 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV                            0x854a
+#define GL_COMBINER_CD_OUTPUT_NV                            0x854b
+#define GL_COMBINER_SUM_OUTPUT_NV                           0x854c
+#define GL_MAX_GENERAL_COMBINERS_NV                         0x854d
+#define GL_NUM_GENERAL_COMBINERS_NV                         0x854e
+#define GL_COLOR_SUM_CLAMP_NV                               0x854f
+#define GL_COMBINER0_NV                                     0x8550
+#define GL_COMBINER1_NV                                     0x8551
+#define GL_COMBINER2_NV                                     0x8552
+#define GL_COMBINER3_NV                                     0x8553
+#define GL_COMBINER4_NV                                     0x8554
+#define GL_COMBINER5_NV                                     0x8555
+#define GL_COMBINER6_NV                                     0x8556
+#define GL_COMBINER7_NV                                     0x8557
+/* reuse GL_TEXTURE0_ARB */
+/* reuse GL_TEXTURE1_ARB */
+/* reuse GL_ZERO */
+/* reuse GL_NONE */
+/* reuse GL_FOG */
+#endif
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param);
+typedef void (WINE_GLAPI *PGLFNCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion,
+        GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (WINE_GLAPI *PGLFNCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion,
+        GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias,
+        GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (WINE_GLAPI *PGLFNFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input,
+        GLenum mapping, GLenum componentUsage);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion,
+        GLenum variable, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion,
+        GLenum variable, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion,
+        GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion,
+        GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint *params);
+
+/* GL_NV_register_combiners2 */
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#define GL_PER_STAGE_CONSTANTS_NV                           0x8535
+#endif
+typedef void (WINE_GLAPI *PGLFNCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat *params);
+
+/* GL_NV_texgen_reflection */
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#define GL_NORMAL_MAP_NV                                    0x8511
+#define GL_REFLECTION_MAP_NV                                0x8512
+#endif
+
+/* GL_NV_texture_env_combine4 */
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#define GL_COMBINE4_NV                                      0x8503
+#define GL_SOURCE3_RGB_NV                                   0x8583
+#define GL_SOURCE3_ALPHA_NV                                 0x858b
+#define GL_OPERAND3_RGB_NV                                  0x8593
+#define GL_OPERAND3_ALPHA_NV                                0x859b
+#endif
+
+/* GL_NV_texture_shader */
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV                      0x864c
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV                0x864d
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV                 0x864e
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV             0x86d9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV                        0x86da
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV                    0x86db
+#define GL_DSDT_MAG_INTENSITY_NV                            0x86dc
+#define GL_SHADER_CONSISTENT_NV                             0x86dd
+#define GL_TEXTURE_SHADER_NV                                0x86de
+#define GL_SHADER_OPERATION_NV                              0x86df
+#define GL_CULL_MODES_NV                                    0x86e0
+#define GL_OFFSET_TEXTURE_MATRIX_NV                         0x86e1
+#define GL_OFFSET_TEXTURE_SCALE_NV                          0x86e2
+#define GL_OFFSET_TEXTURE_BIAS_NV                           0x86e3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV                      GL_OFFSET_TEXTURE_MATRIX_NV
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV                       GL_OFFSET_TEXTURE_SCALE_NV
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV                        GL_OFFSET_TEXTURE_BIAS_NV
+#define GL_PREVIOUS_TEXTURE_INPUT_NV                        0x86e4
+#define GL_CONST_EYE_NV                                     0x86e5
+#define GL_PASS_THROUGH_NV                                  0x86e6
+#define GL_CULL_FRAGMENT_NV                                 0x86e7
+#define GL_OFFSET_TEXTURE_2D_NV                             0x86e8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV                       0x86e9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV                       0x86ea
+#define GL_DOT_PRODUCT_NV                                   0x86ec
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV                     0x86ed
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV                        0x86ee
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV                  0x86f0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV                  0x86f1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV                  0x86f2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV        0x86f3
+#define GL_HILO_NV                                          0x86f4
+#define GL_DSDT_NV                                          0x86f5
+#define GL_DSDT_MAG_NV                                      0x86f6
+#define GL_DSDT_MAG_VIB_NV                                  0x86f7
+#define GL_HILO16_NV                                        0x86f8
+#define GL_SIGNED_HILO_NV                                   0x86f9
+#define GL_SIGNED_HILO16_NV                                 0x86fa
+#define GL_SIGNED_RGBA_NV                                   0x86fb
+#define GL_SIGNED_RGBA8_NV                                  0x86fc
+#define GL_SIGNED_RGB_NV                                    0x86fe
+#define GL_SIGNED_RGB8_NV                                   0x86ff
+#define GL_SIGNED_LUMINANCE_NV                              0x8701
+#define GL_SIGNED_LUMINANCE8_NV                             0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV                        0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV                      0x8704
+#define GL_SIGNED_ALPHA_NV                                  0x8705
+#define GL_SIGNED_ALPHA8_NV                                 0x8706
+#define GL_SIGNED_INTENSITY_NV                              0x8707
+#define GL_SIGNED_INTENSITY8_NV                             0x8708
+#define GL_DSDT8_NV                                         0x8709
+#define GL_DSDT8_MAG8_NV                                    0x870a
+#define GL_DSDT8_MAG8_INTENSITY8_NV                         0x870b
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV                     0x870c
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV                   0x870d
+#define GL_HI_SCALE_NV                                      0x870e
+#define GL_LO_SCALE_NV                                      0x870f
+#define GL_DS_SCALE_NV                                      0x8710
+#define GL_DT_SCALE_NV                                      0x8711
+#define GL_MAGNITUDE_SCALE_NV                               0x8712
+#define GL_VIBRANCE_SCALE_NV                                0x8713
+#define GL_HI_BIAS_NV                                       0x8714
+#define GL_LO_BIAS_NV                                       0x8715
+#define GL_DS_BIAS_NV                                       0x8716
+#define GL_DT_BIAS_NV                                       0x8717
+#define GL_MAGNITUDE_BIAS_NV                                0x8718
+#define GL_VIBRANCE_BIAS_NV                                 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV                         0x871a
+#define GL_TEXTURE_HI_SIZE_NV                               0x871b
+#define GL_TEXTURE_LO_SIZE_NV                               0x871c
+#define GL_TEXTURE_DS_SIZE_NV                               0x871d
+#define GL_TEXTURE_DT_SIZE_NV                               0x871e
+#define GL_TEXTURE_MAG_SIZE_NV                              0x871f
+#endif
+
+/* GL_NV_texture_shader2 */
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV                        0x86ef
+#endif
+
+/* GL_NV_vertex_program2_option */
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV                 0x88f4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV                        0x88f5
+#endif
+
+/* GL_SGIS_generate_mipmap */
+#ifndef GLX_SGIS_generate_mipmap
+#define GLX_SGIS_generate_mipmap 1
+#define GL_GENERATE_MIPMAP_SGIS                             0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS                        0x8192
+#endif
+
+/* GLX_SGI_video_sync */
+typedef int (WINE_GLAPI *PGLXFNGETVIDEOSYNCSGIPROC)(unsigned int *);
+typedef int (WINE_GLAPI *PGLXFNWAITVIDEOSYNCSGIPROC)(int, int, unsigned int *);
+
+/* WGL_ARB_extensions_string */
+typedef const char *(WINAPI *WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
+
+/* WGL_ARB_multisample */
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#define WGL_SAMPLE_BUFFERS_ARB                              0x2041
+#define WGL_SAMPLES_ARB                                     0x2042
+#endif
+
+/* WGL_ARB_pixel_format */
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_ARB                        0x2000
+#define WGL_DRAW_TO_WINDOW_ARB                              0x2001
+#define WGL_DRAW_TO_BITMAP_ARB                              0x2002
+#define WGL_ACCELERATION_ARB                                0x2003
+#define WGL_NEED_PALETTE_ARB                                0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB                         0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB                          0x2006
+#define WGL_SWAP_METHOD_ARB                                 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB                             0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB                            0x2009
+#define WGL_TRANSPARENT_ARB                                 0x200a
+#define WGL_TRANSPARENT_RED_VALUE_ARB                       0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB                     0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB                      0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB                     0x203a
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB                     0x203b
+#define WGL_SHARE_DEPTH_ARB                                 0x200c
+#define WGL_SHARE_STENCIL_ARB                               0x200d
+#define WGL_SHARE_ACCUM_ARB                                 0x200e
+#define WGL_SUPPORT_GDI_ARB                                 0x200f
+#define WGL_SUPPORT_OPENGL_ARB                              0x2010
+#define WGL_DOUBLE_BUFFER_ARB                               0x2011
+#define WGL_STEREO_ARB                                      0x2012
+#define WGL_PIXEL_TYPE_ARB                                  0x2013
+#define WGL_COLOR_BITS_ARB                                  0x2014
+#define WGL_RED_BITS_ARB                                    0x2015
+#define WGL_RED_SHIFT_ARB                                   0x2016
+#define WGL_GREEN_BITS_ARB                                  0x2017
+#define WGL_GREEN_SHIFT_ARB                                 0x2018
+#define WGL_BLUE_BITS_ARB                                   0x2019
+#define WGL_BLUE_SHIFT_ARB                                  0x201a
+#define WGL_ALPHA_BITS_ARB                                  0x201b
+#define WGL_ALPHA_SHIFT_ARB                                 0x201c
+#define WGL_ACCUM_BITS_ARB                                  0x201d
+#define WGL_ACCUM_RED_BITS_ARB                              0x201e
+#define WGL_ACCUM_GREEN_BITS_ARB                            0x201f
+#define WGL_ACCUM_BLUE_BITS_ARB                             0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB                            0x2021
+#define WGL_DEPTH_BITS_ARB                                  0x2022
+#define WGL_STENCIL_BITS_ARB                                0x2023
+#define WGL_AUX_BUFFERS_ARB                                 0x2024
+#define WGL_NO_ACCELERATION_ARB                             0x2025
+#define WGL_GENERIC_ACCELERATION_ARB                        0x2026
+#define WGL_FULL_ACCELERATION_ARB                           0x2027
+#define WGL_SWAP_EXCHANGE_ARB                               0x2028
+#define WGL_SWAP_COPY_ARB                                   0x2029
+#define WGL_SWAP_UNDEFINED_ARB                              0x202a
+#define WGL_TYPE_RGBA_ARB                                   0x202b
+#define WGL_TYPE_COLORINDEX_ARB                             0x202c
+#endif
+typedef BOOL (WINAPI *WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat,
+        int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI *WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat,
+        int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI *WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int *piAttribIList,
+        const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+
+/* WGL_ARB_pixel_format_float */
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#define WGL_TYPE_RGBA_FLOAT_ARB                             0x21a0
+#endif
+
+/* WGL_WINE_pixel_format_passthrough */
+typedef BOOL (WINAPI *WINED3D_PFNWGLSETPIXELFORMATWINE)(HDC hdc, int iPixelFormat,
+        const PIXELFORMATDESCRIPTOR *ppfd);
+
+/*Global resource ids sharing*/
+#define GL_SHARE_CONTEXT_RESOURCES_CR 0x8B27
+/*do flush for the command buffer of a thread the context was previusly current for*/
+#define GL_FLUSH_ON_THREAD_SWITCH_CR  0x8B28
+/*report that the shared resource is used by this context, the parameter value is a texture name*/
+#define GL_RCUSAGE_TEXTURE_SET_CR     0x8B29
+/*report that the shared resource is no longer used by this context, the parameter value is a texture name*/
+#define GL_RCUSAGE_TEXTURE_CLEAR_CR   0x8B2A
+/*configures host to create windows initially hidden*/
+#define GL_HOST_WND_CREATED_HIDDEN    0x8B2B
+
+typedef void (WINE_GLAPI *PGLFNCHROMIUMPARAMETERUCR)(GLenum param, GLint value);
+
+# define VBOXWDDM_GL_EXT_FUNCS_GEN \
+        USE_GL_FUNC(PGLFNCHROMIUMPARAMETERUCR, \
+                glChromiumParameteriCR,                VBOX_SHARED_CONTEXTS,            NULL) \
+
+
+#define GL_EXT_FUNCS_GEN \
+    /* GL_APPLE_fence */ \
+    USE_GL_FUNC(PGLFNGENFENCESAPPLEPROC, \
+            glGenFencesAPPLE,                           APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNDELETEFENCESAPPLEPROC, \
+            glDeleteFencesAPPLE,                        APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNSETFENCEAPPLEPROC, \
+            glSetFenceAPPLE,                            APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNTESTFENCEAPPLEPROC, \
+            glTestFenceAPPLE,                           APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNFINISHFENCEAPPLEPROC, \
+            glFinishFenceAPPLE,                         APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNISFENCEAPPLEPROC, \
+            glIsFenceAPPLE,                             APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNTESTOBJECTAPPLEPROC, \
+            glTestObjectAPPLE,                          APPLE_FENCE,                    NULL) \
+    USE_GL_FUNC(PGLFNFINISHOBJECTAPPLEPROC, \
+            glFinishObjectAPPLE,                        APPLE_FENCE,                    NULL) \
+    /* GL_APPLE_flush_buffer_range */ \
+    USE_GL_FUNC(PGLFNBUFFERPARAMETERIAPPLE, \
+            glBufferParameteriAPPLE,                    APPLE_FLUSH_BUFFER_RANGE,       NULL) \
+    USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE, \
+            glFlushMappedBufferRangeAPPLE,              APPLE_FLUSH_BUFFER_RANGE,       NULL) \
+    /* GL_APPLE_flush_render */ \
+    USE_GL_FUNC(PGLFNFLUSHRENDERAPPLEPROC, \
+            glFlushRenderAPPLE,                         APPLE_FLUSH_RENDER,             NULL) \
+    USE_GL_FUNC(PGLFNFINISHRENDERAPPLEPROC, \
+            glFinishRenderAPPLE,                        APPLE_FLUSH_RENDER,             NULL) \
+    /* GL_ARB_color_buffer_float */ \
+    USE_GL_FUNC(PGLFNCLAMPCOLORARBPROC, \
+            glClampColorARB,                            ARB_COLOR_BUFFER_FLOAT,         NULL) \
+    /* GL_ARB_draw_buffers */ \
+    USE_GL_FUNC(PGLFNDRAWBUFFERSARBPROC, \
+            glDrawBuffersARB,                           ARB_DRAW_BUFFERS,               NULL) \
+    /* GL_ARB_framebuffer_object */ \
+    USE_GL_FUNC(PGLFNGLISRENDERBUFFERPROC, \
+            glIsRenderbuffer,                           ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLBINDRENDERBUFFERPROC, \
+            glBindRenderbuffer,                         ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSPROC, \
+            glDeleteRenderbuffers,                      ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSPROC, \
+            glGenRenderbuffers,                         ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEPROC, \
+            glRenderbufferStorage,                      ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC, \
+            glRenderbufferStorageMultisample,           ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVPROC, \
+            glGetRenderbufferParameteriv,               ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLISFRAMEBUFFERPROC, \
+            glIsFramebuffer,                            ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFERPROC, \
+            glBindFramebuffer,                          ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSPROC, \
+            glDeleteFramebuffers,                       ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSPROC, \
+            glGenFramebuffers,                          ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSPROC, \
+            glCheckFramebufferStatus,                   ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DPROC, \
+            glFramebufferTexture1D,                     ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DPROC, \
+            glFramebufferTexture2D,                     ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DPROC, \
+            glFramebufferTexture3D,                     ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURELAYERPROC,     \
+            glFramebufferTextureLayer,                  ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFERPROC, \
+            glFramebufferRenderbuffer,                  ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC, \
+            glGetFramebufferAttachmentParameteriv,      ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFERPROC, \
+            glBlitFramebuffer,                          ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGENERATEMIPMAPPROC, \
+            glGenerateMipmap,                           ARB_FRAMEBUFFER_OBJECT,         NULL) \
+    /* GL_ARB_geometry_shader4 */ \
+    USE_GL_FUNC(PGLFNPROGRAMPARAMETERIARBPROC, \
+            glProgramParameteriARB,                     ARB_GEOMETRY_SHADER4,           NULL) \
+    USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREARBPROC, \
+            glFramebufferTextureARB,                    ARB_GEOMETRY_SHADER4,           NULL) \
+    USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTURELAYERARBPROC, \
+            glFramebufferTextureLayerARB,               ARB_GEOMETRY_SHADER4,           NULL) \
+    USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREFACEARBPROC, \
+            glFramebufferTextureFaceARB,                ARB_GEOMETRY_SHADER4,           NULL) \
+    /* GL_ARB_imaging, GL_EXT_blend_minmax */ \
+    USE_GL_FUNC(PGLFNBLENDCOLORPROC, \
+            glBlendColorEXT,                            EXT_BLEND_COLOR,                NULL) \
+    USE_GL_FUNC(PGLFNBLENDEQUATIONPROC, \
+            glBlendEquationEXT,                         EXT_BLEND_MINMAX,               NULL) \
+    /* GL_ARB_map_buffer_range */ \
+    USE_GL_FUNC(PGLFNMAPBUFFERRANGEPROC, \
+            glMapBufferRange,                           ARB_MAP_BUFFER_RANGE,           NULL) \
+    USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEPROC, \
+            glFlushMappedBufferRange,                   ARB_MAP_BUFFER_RANGE,           NULL) \
+    /* GL_ARB_multisample */ \
+    USE_GL_FUNC(WINED3D_PFNGLSAMPLECOVERAGEARBPROC, \
+            glSampleCoverageARB,                        ARB_MULTISAMPLE,                NULL) \
+    /* GL_ARB_multitexture */ \
+    USE_GL_FUNC(WINED3D_PFNGLACTIVETEXTUREARBPROC, \
+            glActiveTextureARB,                         ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC, \
+            glClientActiveTextureARB,                   ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FARBPROC, \
+            glMultiTexCoord1fARB,                       ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FVARBPROC, \
+            glMultiTexCoord1fvARB,                      ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FARBPROC, \
+            glMultiTexCoord2fARB,                       ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FVARBPROC, \
+            glMultiTexCoord2fvARB,                      ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FARBPROC, \
+            glMultiTexCoord3fARB,                       ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FVARBPROC, \
+            glMultiTexCoord3fvARB,                      ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FARBPROC, \
+            glMultiTexCoord4fARB,                       ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FVARBPROC, \
+            glMultiTexCoord4fvARB,                      ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2SVARBPROC, \
+            glMultiTexCoord2svARB,                      ARB_MULTITEXTURE,               NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4SVARBPROC, \
+            glMultiTexCoord4svARB,                      ARB_MULTITEXTURE,               NULL) \
+    /* GL_ARB_occlusion_query */ \
+    USE_GL_FUNC(PGLFNGENQUERIESARBPROC, \
+            glGenQueriesARB,                            ARB_OCCLUSION_QUERY,            NULL) \
+    USE_GL_FUNC(PGLFNDELETEQUERIESARBPROC, \
+            glDeleteQueriesARB,                         ARB_OCCLUSION_QUERY,            NULL) \
+    USE_GL_FUNC(PGLFNBEGINQUERYARBPROC, \
+            glBeginQueryARB,                            ARB_OCCLUSION_QUERY,            NULL) \
+    USE_GL_FUNC(PGLFNENDQUERYARBPROC, \
+            glEndQueryARB,                              ARB_OCCLUSION_QUERY,            NULL) \
+    USE_GL_FUNC(PGLFNGETQUERYOBJECTIVARBPROC, \
+            glGetQueryObjectivARB,                      ARB_OCCLUSION_QUERY,            NULL) \
+    USE_GL_FUNC(PGLFNGETQUERYOBJECTUIVARBPROC, \
+            glGetQueryObjectuivARB,                     ARB_OCCLUSION_QUERY,            NULL) \
+    /* GL_ARB_point_parameters */ \
+    USE_GL_FUNC(PGLFNGLPOINTPARAMETERFARBPROC, \
+            glPointParameterfARB,                       ARB_POINT_PARAMETERS,           NULL) \
+    USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVARBPROC, \
+            glPointParameterfvARB,                      ARB_POINT_PARAMETERS,           NULL) \
+    /* GL_ARB_provoking_vertex */ \
+    USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXPROC, \
+            glProvokingVertex,                          ARB_PROVOKING_VERTEX,           NULL) \
+    /* GL_ARB_shader_objects */ \
+    USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, \
+            glGetObjectParameterivARB,                  ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC, \
+            glGetObjectParameterfvARB,                  ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC, \
+            glGetUniformLocationARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETACTIVEUNIFORMARBPROC, \
+            glGetActiveUniformARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, \
+            glUniform1iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IARBPROC, \
+            glUniform2iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IARBPROC, \
+            glUniform3iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IARBPROC, \
+            glUniform4iARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FARBPROC, \
+            glUniform1fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FARBPROC, \
+            glUniform2fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FARBPROC, \
+            glUniform3fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FARBPROC, \
+            glUniform4fARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FVARBPROC, \
+            glUniform1fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FVARBPROC, \
+            glUniform2fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FVARBPROC, \
+            glUniform3fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FVARBPROC, \
+            glUniform4fvARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IVARBPROC, \
+            glUniform1ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IVARBPROC, \
+            glUniform2ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IVARBPROC, \
+            glUniform3ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IVARBPROC, \
+            glUniform4ivARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC, \
+            glUniformMatrix2fvARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC, \
+            glUniformMatrix3fvARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC, \
+            glUniformMatrix4fvARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMFVARBPROC, \
+            glGetUniformfvARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMIVARBPROC, \
+            glGetUniformivARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETINFOLOGARBPROC, \
+            glGetInfoLogARB,                            ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC, \
+            glUseProgramObjectARB,                      ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCREATESHADEROBJECTARBPROC, \
+            glCreateShaderObjectARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLSHADERSOURCEARBPROC, \
+            glShaderSourceARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCOMPILESHADERARBPROC, \
+            glCompileShaderARB,                         ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC, \
+            glCreateProgramObjectARB,                   ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLATTACHOBJECTARBPROC, \
+            glAttachObjectARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLLINKPROGRAMARBPROC, \
+            glLinkProgramARB,                           ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLDETACHOBJECTARBPROC, \
+            glDetachObjectARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLDELETEOBJECTARBPROC, \
+            glDeleteObjectARB,                          ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLVALIDATEPROGRAMARBPROC, \
+            glValidateProgramARB,                       ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC, \
+            glGetAttachedObjectsARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETHANDLEARBPROC, \
+            glGetHandleARB,                             ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETSHADERSOURCEARBPROC, \
+            glGetShaderSourceARB,                       ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC, \
+            glBindAttribLocationARB,                    ARB_SHADER_OBJECTS,             NULL) \
+    USE_GL_FUNC(WINED3D_PFNGLGETATTRIBLOCATIONARBPROC, \
+            glGetAttribLocationARB,                     ARB_SHADER_OBJECTS,             NULL) \
+    /* GL_ARB_sync */ \
+    USE_GL_FUNC(PGLFNFENCESYNCPROC, \
+            glFenceSync,                                ARB_SYNC,                       NULL) \
+    USE_GL_FUNC(PGLFNISSYNCPROC, \
+            glIsSync,                                   ARB_SYNC,                       NULL) \
+    USE_GL_FUNC(PGLFNDELETESYNCPROC, \
+            glDeleteSync,                               ARB_SYNC,                       NULL) \
+    USE_GL_FUNC(PGLFNCLIENTWAITSYNCPROC, \
+            glClientWaitSync,                           ARB_SYNC,                       NULL) \
+    USE_GL_FUNC(PGLFNWAITSYNCPROC, \
+            glWaitSync,                                 ARB_SYNC,                       NULL) \
+    USE_GL_FUNC(PGLFNGETINTEGER64VPROC, \
+            glGetInteger64v,                            ARB_SYNC,                       NULL) \
+    USE_GL_FUNC(PGLFNGETSYNCIVPROC, \
+            glGetSynciv,                                ARB_SYNC,                       NULL) \
+    /* GL_ARB_texture_compression */ \
+    USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE2DPROC, \
+            glCompressedTexImage2DARB,                  ARB_TEXTURE_COMPRESSION,        NULL) \
+    USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE3DPROC, \
+            glCompressedTexImage3DARB,                  ARB_TEXTURE_COMPRESSION,        NULL) \
+    USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC, \
+            glCompressedTexSubImage2DARB,               ARB_TEXTURE_COMPRESSION,        NULL) \
+    USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC, \
+            glCompressedTexSubImage3DARB,               ARB_TEXTURE_COMPRESSION,        NULL) \
+    USE_GL_FUNC(PGLFNGETCOMPRESSEDTEXIMAGEPROC, \
+            glGetCompressedTexImageARB,                 ARB_TEXTURE_COMPRESSION,        NULL) \
+    /* GL_ARB_vertex_blend */ \
+    USE_GL_FUNC(PGLFNGLWEIGHTPOINTERARB, \
+            glWeightPointerARB,                         ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTBV, \
+            glWeightbvARB,                              ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTSV, \
+            glWeightsvARB,                              ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTIV, \
+            glWeightivARB,                              ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTFV, \
+            glWeightfvARB,                              ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTDV, \
+            glWeightdvARB,                              ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTUBV, \
+            glWeightubvARB,                             ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTUSV, \
+            glWeightusvARB,                             ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLWEIGHTUIV, \
+            glWeightuivARB,                             ARB_VERTEX_BLEND,               NULL) \
+    USE_GL_FUNC(PGLFNGLVERTEXBLENDARB, \
+            glVertexBlendARB,                           ARB_VERTEX_BLEND,               NULL) \
+    /* GL_ARB_vertex_buffer_object */ \
+    USE_GL_FUNC(PGLFNBINDBUFFERARBPROC, \
+            glBindBufferARB,                            ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNDELETEBUFFERSARBPROC, \
+            glDeleteBuffersARB,                         ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNGENBUFFERSARBPROC, \
+            glGenBuffersARB,                            ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNISBUFFERARBPROC, \
+            glIsBufferARB,                              ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNBUFFERDATAARBPROC, \
+            glBufferDataARB,                            ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNBUFFERSUBDATAARBPROC, \
+            glBufferSubDataARB,                         ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNGETBUFFERSUBDATAARBPROC, \
+            glGetBufferSubDataARB,                      ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNMAPBUFFERARBPROC, \
+            glMapBufferARB,                             ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNUNMAPBUFFERARBPROC, \
+            glUnmapBufferARB,                           ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNGETBUFFERPARAMETERIVARBPROC, \
+            glGetBufferParameterivARB,                  ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    USE_GL_FUNC(PGLFNGETBUFFERPOINTERVARBPROC, \
+            glGetBufferPointervARB,                     ARB_VERTEX_BUFFER_OBJECT,       NULL) \
+    /* GL_ARB_vertex_program */ \
+    USE_GL_FUNC(PGLFNGENPROGRAMSARBPROC, \
+            glGenProgramsARB,                           ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNBINDPROGRAMARBPROC, \
+            glBindProgramARB,                           ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNPROGRAMSTRINGARBPROC, \
+            glProgramStringARB,                         ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNDELETEPROGRAMSARBPROC, \
+            glDeleteProgramsARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNPROGRAMENVPARAMETER4FVARBPROC, \
+            glProgramEnvParameter4fvARB,                ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETER4FVARBPROC, \
+            glProgramLocalParameter4fvARB,              ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBPOINTERARBPROC, \
+            glVertexAttribPointerARB,                   ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNENABLEVERTEXATTRIBARRAYARBPROC, \
+            glEnableVertexAttribArrayARB,               ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNDISABLEVERTEXATTRIBARRAYARBPROC, \
+            glDisableVertexAttribArrayARB,              ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1DARBPROC, \
+            glVertexAttrib1dARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1DVARBPROC, \
+            glVertexAttrib1dvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1FARBPROC, \
+            glVertexAttrib1fARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1FVARBPROC, \
+            glVertexAttrib1fvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1SARBPROC, \
+            glVertexAttrib1sARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1SVARBPROC, \
+            glVertexAttrib1svARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2DARBPROC, \
+            glVertexAttrib2dARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2DVARBPROC, \
+            glVertexAttrib2dvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2FARBPROC, \
+            glVertexAttrib2fARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2FVARBPROC, \
+            glVertexAttrib2fvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2SARBPROC, \
+            glVertexAttrib2sARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2SVARBPROC, \
+            glVertexAttrib2svARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3DARBPROC, \
+            glVertexAttrib3dARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3DVARBPROC, \
+            glVertexAttrib3dvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3FARBPROC, \
+            glVertexAttrib3fARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3FVARBPROC, \
+            glVertexAttrib3fvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3SARBPROC, \
+            glVertexAttrib3sARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3SVARBPROC, \
+            glVertexAttrib3svARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NBVARBPROC, \
+            glVertexAttrib4NbvARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NIVARBPROC, \
+            glVertexAttrib4NivARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NSVARBPROC, \
+            glVertexAttrib4NsvARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBARBPROC, \
+            glVertexAttrib4NubARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBVARBPROC, \
+            glVertexAttrib4NubvARB,                     ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NUIVARBPROC, \
+            glVertexAttrib4NuivARB,                     ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4NUSVARBPROC, \
+            glVertexAttrib4NusvARB,                     ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4BVARBPROC, \
+            glVertexAttrib4bvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4DARBPROC, \
+            glVertexAttrib4dARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4DVARBPROC, \
+            glVertexAttrib4dvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4FARBPROC, \
+            glVertexAttrib4fARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4FVARBPROC, \
+            glVertexAttrib4fvARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4IVARBPROC, \
+            glVertexAttrib4ivARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4SARBPROC, \
+            glVertexAttrib4sARB,                        ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4SVARBPROC, \
+            glVertexAttrib4svARB,                       ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4UBVARBPROC, \
+            glVertexAttrib4ubvARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4UIVARBPROC, \
+            glVertexAttrib4uivARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4USVARBPROC, \
+            glVertexAttrib4usvARB,                      ARB_VERTEX_PROGRAM,             NULL) \
+    USE_GL_FUNC(PGLFNGETPROGRAMIVARBPROC, \
+            glGetProgramivARB,                          ARB_VERTEX_PROGRAM,             NULL) \
+    /* GL_ATI_fragment_shader */ \
+    USE_GL_FUNC(PGLFNGENFRAGMENTSHADERSATI, \
+            glGenFragmentShadersATI,                    ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNBINDFRAGMENTSHADERATI, \
+            glBindFragmentShaderATI,                    ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNDELETEFRAGMENTSHADERATI, \
+            glDeleteFragmentShaderATI,                  ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNBEGINFRAGMENTSHADERATI, \
+            glBeginFragmentShaderATI,                   ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNENDFRAGMENTSHADERATI, \
+            glEndFragmentShaderATI,                     ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNPASSTEXCOORDATI, \
+            glPassTexCoordATI,                          ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNSAMPLEMAPATI, \
+            glSampleMapATI,                             ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNCOLORFRAGMENTOP1ATI, \
+            glColorFragmentOp1ATI,                      ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNCOLORFRAGMENTOP2ATI, \
+            glColorFragmentOp2ATI,                      ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNCOLORFRAGMENTOP3ATI, \
+            glColorFragmentOp3ATI,                      ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNALPHAFRAGMENTOP1ATI, \
+            glAlphaFragmentOp1ATI,                      ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNALPHAFRAGMENTOP2ATI, \
+            glAlphaFragmentOp2ATI,                      ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNALPHAFRAGMENTOP3ATI, \
+            glAlphaFragmentOp3ATI,                      ATI_FRAGMENT_SHADER,            NULL) \
+    USE_GL_FUNC(PGLFNSETFRAGMENTSHADERCONSTANTATI, \
+            glSetFragmentShaderConstantATI,             ATI_FRAGMENT_SHADER,            NULL) \
+    /* GL_ATI_separate_stencil */ \
+    USE_GL_FUNC(PGLFNSTENCILOPSEPARATEATIPROC, \
+            glStencilOpSeparateATI,                     ATI_SEPARATE_STENCIL,           NULL) \
+    USE_GL_FUNC(PGLFNSTENCILFUNCSEPARATEATIPROC, \
+            glStencilFuncSeparateATI,                   ATI_SEPARATE_STENCIL,           NULL) \
+    /* GL_EXT_blend_equation_separate */ \
+    USE_GL_FUNC(PGLFNBLENDFUNCSEPARATEEXTPROC, \
+            glBlendFuncSeparateEXT,                     EXT_BLEND_FUNC_SEPARATE,        NULL) \
+    /* GL_EXT_blend_func_separate */ \
+    USE_GL_FUNC(PGLFNBLENDEQUATIONSEPARATEEXTPROC, \
+            glBlendEquationSeparateEXT,                 EXT_BLEND_EQUATION_SEPARATE,    NULL) \
+    /* GL_EXT_draw_buffers2 */ \
+    USE_GL_FUNC(PGLFNCOLORMASKINDEXEDEXTPROC, \
+            glColorMaskIndexedEXT,                      EXT_DRAW_BUFFERS2,              NULL) \
+    USE_GL_FUNC(PGLFNGETBOOLEANINDEXEDVEXTPROC, \
+            glGetBooleanIndexedvEXT,                    EXT_DRAW_BUFFERS2,              NULL) \
+    USE_GL_FUNC(PGLFNGETINTEGERINDEXEDVEXTPROC, \
+            glGetIntegerIndexedvEXT,                    EXT_DRAW_BUFFERS2,              NULL) \
+    USE_GL_FUNC(PGLFNENABLEINDEXEDEXTPROC, \
+            glEnableIndexedEXT,                         EXT_DRAW_BUFFERS2,              NULL) \
+    USE_GL_FUNC(PGLFNDISABLEINDEXEDEXTPROC, \
+            glDisableIndexedEXT,                        EXT_DRAW_BUFFERS2,              NULL) \
+    USE_GL_FUNC(PGLFNISENABLEDINDEXEDEXTPROC, \
+            glIsEnabledIndexedEXT,                      EXT_DRAW_BUFFERS2,              NULL) \
+    /* GL_EXT_fog_coord */ \
+    USE_GL_FUNC(PGLFNGLFOGCOORDFEXTPROC, \
+            glFogCoordfEXT,                             EXT_FOG_COORD,                  NULL) \
+    USE_GL_FUNC(PGLFNGLFOGCOORDFVEXTPROC, \
+            glFogCoordfvEXT,                            EXT_FOG_COORD,                  NULL) \
+    USE_GL_FUNC(PGLFNGLFOGCOORDDEXTPROC, \
+            glFogCoorddEXT,                             EXT_FOG_COORD,                  NULL) \
+    USE_GL_FUNC(PGLFNGLFOGCOORDDVEXTPROC, \
+            glFogCoorddvEXT,                            EXT_FOG_COORD,                  NULL) \
+    USE_GL_FUNC(PGLFNGLFOGCOORDPOINTEREXTPROC, \
+            glFogCoordPointerEXT,                       EXT_FOG_COORD,                  NULL) \
+    /* GL_EXT_framebuffer_blit */ \
+    USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFEREXTPROC, \
+            glBlitFramebufferEXT,                       EXT_FRAMEBUFFER_BLIT,           NULL) \
+    /* GL_EXT_framebuffer_multisample */ \
+    USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, \
+            glRenderbufferStorageMultisampleEXT,        EXT_FRAMEBUFFER_MULTISAMPLE,    NULL) \
+    /* GL_EXT_framebuffer_object */ \
+    USE_GL_FUNC(PGLFNGLISRENDERBUFFEREXTPROC, \
+            glIsRenderbufferEXT,                        EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLBINDRENDERBUFFEREXTPROC, \
+            glBindRenderbufferEXT,                      EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSEXTPROC, \
+            glDeleteRenderbuffersEXT,                   EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSEXTPROC, \
+            glGenRenderbuffersEXT,                      EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEEXTPROC, \
+            glRenderbufferStorageEXT,                   EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLISFRAMEBUFFEREXTPROC, \
+            glIsFramebufferEXT,                         EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFEREXTPROC, \
+            glBindFramebufferEXT,                       EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSEXTPROC, \
+            glDeleteFramebuffersEXT,                    EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSEXTPROC, \
+            glGenFramebuffersEXT,                       EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, \
+            glCheckFramebufferStatusEXT,                EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC, \
+            glFramebufferTexture1DEXT,                  EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC, \
+            glFramebufferTexture2DEXT,                  EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC, \
+            glFramebufferTexture3DEXT,                  EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, \
+            glFramebufferRenderbufferEXT,               EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGENERATEMIPMAPEXTPROC, \
+            glGenerateMipmapEXT,                        EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, \
+            glGetRenderbufferParameterivEXT,            EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, \
+            glGetFramebufferAttachmentParameterivEXT,   EXT_FRAMEBUFFER_OBJECT,         NULL) \
+    /* GL_EXT_gpu_program_parameters */ \
+    USE_GL_FUNC(PGLFNPROGRAMENVPARAMETERS4FVEXTPROC, \
+            glProgramEnvParameters4fvEXT,               EXT_GPU_PROGRAM_PARAMETERS,     NULL) \
+    USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC, \
+            glProgramLocalParameters4fvEXT,             EXT_GPU_PROGRAM_PARAMETERS,     NULL) \
+    /* GL_EXT_gpu_shader4 */\
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI1IEXTPROC, \
+            glVertexAttribI1iEXT,                       EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI2IEXTPROC, \
+            glVertexAttribI2iEXT,                       EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI3IEXTPROC, \
+            glVertexAttribI3iEXT,                       EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4IEXTPROC, \
+            glVertexAttribI4iEXT,                       EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI1UIEXTPROC, \
+            glVertexAttribI1uiEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI2UIEXTPROC, \
+            glVertexAttribI2uiEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI3UIEXTPROC, \
+            glVertexAttribI3uiEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4UIEXTPROC, \
+            glVertexAttribI4uiEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI1IVEXTPROC, \
+            glVertexAttribI1ivEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI2IVEXTPROC, \
+            glVertexAttribI2ivEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI3IVEXTPROC, \
+            glVertexAttribI3ivEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4IVEXTPROC, \
+            glVertexAttribI4ivEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI1UIVEXTPROC, \
+            glVertexAttribI1uivEXT,                     EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI2UIVEXTPROC, \
+            glVertexAttribI2uivEXT,                     EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI3UIVEXTPROC, \
+            glVertexAttribI3uivEXT,                     EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4UIVEXTPROC, \
+            glVertexAttribI4uivEXT,                     EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4BVEXTPROC, \
+            glVertexAttribI4bvEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4SVEXTPROC, \
+            glVertexAttribI4svEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4UBVEXTPROC, \
+            glVertexAttribI4ubvEXT,                     EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBI4USVEXTPROC, \
+            glVertexAttribI4usvEXT,                     EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBIPOINTEREXTPROC, \
+            glVertexAttribIPointerEXT,                  EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNGETVERTEXATTRIBIIVEXTPROC, \
+            glVertexAttribIivEXT,                       EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNGETVERTEXATTRIBIUIVEXTPROC, \
+            glVertexAttribIuivEXT,                      EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM1UIEXTPROC, \
+            glUniform1uiEXT,                            EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM2UIEXTPROC, \
+            glUniform2uiEXT,                            EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM3UIEXTPROC, \
+            glUniform3uiEXT,                            EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM4UIEXTPROC, \
+            glUniform4uiEXT,                            EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM1UIVEXTPROC, \
+            glUniform1uivEXT,                           EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM2UIVEXTPROC, \
+            glUniform2uivEXT,                           EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM3UIVEXTPROC, \
+            glUniform3uivEXT,                           EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNUNIFORM4UIVEXTPROC, \
+            glUniform4uivEXT,                           EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNGETUNIFORMUIVEXTPROC, \
+            glGetUniformuivEXT,                         EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNBINDFRAGDATALOCATIONEXTPROC, \
+            glBindFragDataLocationEXT,                  EXT_GPU_SHADER4,                NULL) \
+    USE_GL_FUNC(PGLFNGETFRAGDATALOCATIONEXTPROC, \
+            glGetFragDataLocationEXT,                   EXT_GPU_SHADER4,                NULL) \
+    /* GL_EXT_paletted_texture */ \
+    USE_GL_FUNC(PGLFNGLCOLORTABLEEXTPROC, \
+            glColorTableEXT,                            EXT_PALETTED_TEXTURE,           NULL) \
+    /* GL_EXT_point_parameters */ \
+    USE_GL_FUNC(PGLFNGLPOINTPARAMETERFEXTPROC, \
+            glPointParameterfEXT,                       EXT_POINT_PARAMETERS,           NULL) \
+    USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVEXTPROC, \
+            glPointParameterfvEXT,                      EXT_POINT_PARAMETERS,           NULL) \
+    /* GL_EXT_provoking_vertex */ \
+    USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXEXTPROC, \
+            glProvokingVertexEXT,                       EXT_PROVOKING_VERTEX,           NULL) \
+    /* GL_EXT_secondary_color */ \
+    USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBEXTPROC, \
+            glSecondaryColor3ubEXT,                     EXT_SECONDARY_COLOR,            NULL) \
+    USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBVEXTPROC, \
+            glSecondaryColor3ubvEXT,                    EXT_SECONDARY_COLOR,            NULL) \
+    USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FEXTPROC, \
+            glSecondaryColor3fEXT,                      EXT_SECONDARY_COLOR,            NULL) \
+    USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FVEXTPROC, \
+            glSecondaryColor3fvEXT,                     EXT_SECONDARY_COLOR,            NULL) \
+    USE_GL_FUNC(PGLFNGLSECONDARYCOLORPOINTEREXTPROC, \
+            glSecondaryColorPointerEXT,                 EXT_SECONDARY_COLOR,            NULL) \
+    /* GL_EXT_stencil_two_side */ \
+    USE_GL_FUNC(PGLFNACTIVESTENCILFACEEXTPROC, \
+            glActiveStencilFaceEXT,                     EXT_STENCIL_TWO_SIDE,           NULL) \
+    /* GL_EXT_texture3D */ \
+    USE_GL_FUNC(PGLFNGLTEXIMAGE3DEXTPROC, \
+            glTexImage3DEXT,                            EXT_TEXTURE3D,                  glTexImage3D) \
+    USE_GL_FUNC(PGLFNGLTEXSUBIMAGE3DEXTPROC, \
+            glTexSubImage3DEXT,                         EXT_TEXTURE3D,                  glTexSubImage3D) \
+    /* GL_NV_fence */ \
+    USE_GL_FUNC(PGLFNGENFENCESNVPROC, \
+            glGenFencesNV,                              NV_FENCE,                       NULL) \
+    USE_GL_FUNC(PGLFNDELETEFENCESNVPROC, \
+            glDeleteFencesNV,                           NV_FENCE,                       NULL) \
+    USE_GL_FUNC(PGLFNSETFENCENVPROC,    \
+            glSetFenceNV,                               NV_FENCE,                       NULL) \
+    USE_GL_FUNC(PGLFNTESTFENCENVPROC, \
+            glTestFenceNV,                              NV_FENCE,                       NULL) \
+    USE_GL_FUNC(PGLFNFINISHFENCENVPROC, \
+            glFinishFenceNV,                            NV_FENCE,                       NULL) \
+    USE_GL_FUNC(PGLFNISFENCENVPROC, \
+            glIsFenceNV,                                NV_FENCE,                       NULL) \
+    USE_GL_FUNC(PGLFNGETFENCEIVNVPROC, \
+            glGetFenceivNV,                             NV_FENCE,                       NULL) \
+    /* GL_NV_half_float */ \
+    USE_GL_FUNC(PGLFNVERTEX2HNVPROC, \
+            glVertex2hNV,                               NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEX2HVNVPROC, \
+            glVertex2hvNV,                              NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEX3HNVPROC, \
+            glVertex3hNV,                               NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEX3HVNVPROC, \
+            glVertex3hvNV,                              NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEX4HNVPROC, \
+            glVertex4hNV,                               NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEX4HVNVPROC, \
+            glVertex4hvNV,                              NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNNORMAL3HNVPROC, \
+            glNormal3hNV,                               NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNNORMAL3HVNVPROC, \
+            glNormal3hvNV,                              NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNCOLOR3HNVPROC, \
+            glColor3hNV,                                NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNCOLOR3HVNVPROC, \
+            glColor3hvNV,                               NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNCOLOR4HNVPROC, \
+            glColor4hNV,                                NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNCOLOR4HVNVPROC, \
+            glColor4hvNV,                               NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD1HNVPROC, \
+            glTexCoord1hNV,                             NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD1HVNVPROC, \
+            glTexCoord1hvNV,                            NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD2HNVPROC, \
+            glTexCoord2hNV,                             NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD2HVNVPROC, \
+            glTexCoord2hvNV,                            NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD3HNVPROC, \
+            glTexCoord3hNV,                             NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD3HVNVPROC, \
+            glTexCoord3hvNV,                            NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD4HNVPROC, \
+            glTexCoord4hNV,                             NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNTEXCOORD4HVNVPROC, \
+            glTexCoord4hvNV,                            NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD1HNVPROC, \
+            glMultiTexCoord1hNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD1HVNVPROC, \
+            glMultiTexCoord1hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD2HNVPROC, \
+            glMultiTexCoord2hNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD2HVNVPROC, \
+            glMultiTexCoord2hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD3HNVPROC, \
+            glMultiTexCoord3hNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD3HVNVPROC, \
+            glMultiTexCoord3hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD4HNVPROC, \
+            glMultiTexCoord4hNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNMULTITEXCOORD4HVNVPROC, \
+            glMultiTexCoord4hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNFOGCOORDHNVPROC, \
+            glFogCoordhNV,                              NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNFOGCOORDHVNVPROC, \
+            glFogCoordhvNV,                             NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNSECONDARYCOLOR3HNVPROC, \
+            glSecondaryColor3hNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNSECONDARYCOLOR3HVNVPROC, \
+            glSecondaryColor3hvNV,                      NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXWEIGHTHNVPROC, \
+            glVertexWeighthNV,                          NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXWEIGHTHVNVPROC, \
+            glVertexWeighthvNV,                         NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1HNVPROC, \
+            glVertexAttrib1hNV,                         NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB1HVNVPROC, \
+            glVertexAttrib1hvNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2HNVPROC, \
+            glVertexAttrib2hNV,                         NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB2HVNVPROC, \
+            glVertexAttrib2hvNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3HNVPROC, \
+            glVertexAttrib3hNV,                         NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB3HVNVPROC, \
+            glVertexAttrib3hvNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4HNVPROC, \
+            glVertexAttrib4hNV,                         NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIB4HVNVPROC, \
+            glVertexAttrib4hvNV,                        NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBS1HVNVPROC, \
+            glVertexAttribs1hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBS2HVNVPROC, \
+            glVertexAttribs2hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBS3HVNVPROC, \
+            glVertexAttribs3hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    USE_GL_FUNC(PGLFNVERTEXATTRIBS4HVNVPROC, \
+            glVertexAttribs4hvNV,                       NV_HALF_FLOAT,                  NULL) \
+    /* GL_NV_register_combiners */ \
+    USE_GL_FUNC(PGLFNCOMBINERINPUTNVPROC, \
+            glCombinerInputNV,                          NV_REGISTER_COMBINERS,          NULL) \
+    USE_GL_FUNC(PGLFNCOMBINEROUTPUTNVPROC, \
+            glCombinerOutputNV,                         NV_REGISTER_COMBINERS,          NULL) \
+    USE_GL_FUNC(PGLFNCOMBINERPARAMETERFNVPROC, \
+            glCombinerParameterfNV,                     NV_REGISTER_COMBINERS,          NULL) \
+    USE_GL_FUNC(PGLFNCOMBINERPARAMETERFVNVPROC, \
+            glCombinerParameterfvNV,                    NV_REGISTER_COMBINERS,          NULL) \
+    USE_GL_FUNC(PGLFNCOMBINERPARAMETERINVPROC, \
+            glCombinerParameteriNV,                     NV_REGISTER_COMBINERS,          NULL) \
+    USE_GL_FUNC(PGLFNCOMBINERPARAMETERIVNVPROC, \
+            glCombinerParameterivNV,                    NV_REGISTER_COMBINERS,          NULL) \
+    USE_GL_FUNC(PGLFNFINALCOMBINERINPUTNVPROC, \
+            glFinalCombinerInputNV,                     NV_REGISTER_COMBINERS,          NULL) \
+    /* GLX_SGI_video_sync */ \
+    USE_GL_FUNC(PGLXFNGETVIDEOSYNCSGIPROC, \
+            glXGetVideoSyncSGI,                         SGI_VIDEO_SYNC,                 NULL) \
+    USE_GL_FUNC(PGLXFNWAITVIDEOSYNCSGIPROC, \
+            glXWaitVideoSyncSGI,                        SGI_VIDEO_SYNC,                 NULL) \
+    VBOXWDDM_GL_EXT_FUNCS_GEN
+
+#define WGL_EXT_FUNCS_GEN \
+    USE_GL_FUNC(WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC,       wglGetExtensionsStringARB,      0, NULL) \
+    USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC,    wglGetPixelFormatAttribivARB,   0, NULL) \
+    USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC,    wglGetPixelFormatAttribfvARB,   0, NULL) \
+    USE_GL_FUNC(WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC,         wglChoosePixelFormatARB,        0, NULL) \
+    USE_GL_FUNC(WINED3D_PFNWGLSETPIXELFORMATWINE,               wglSetPixelFormatWINE,          0, NULL)
+
+#endif /* __WINE_WINED3D_GL */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h b/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h
new file mode 100644
index 0000000..fa3ebf5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h
@@ -0,0 +1,3432 @@
+/*
+ * Direct3D wine internal private include file
+ *
+ * Copyright 2002-2003 The wine-d3d team
+ * Copyright 2002-2003 Raphael Junqueira
+ * Copyright 2002-2003, 2004 Jason Edmeades
+ * Copyright 2005 Oliver Stieber
+ *
+ * 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
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINED3D_PRIVATE_H
+#define __WINE_WINED3D_PRIVATE_H
+
+#include <stdarg.h>
+#include <math.h>
+#include <limits.h>
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+#define COBJMACROS
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include "windef.h"
+#include "winbase.h"
+#include "winreg.h"
+#include "wingdi.h"
+#include "winuser.h"
+#else
+#include <windows.h>
+#endif
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include "objbase.h"
+#endif
+#include "wine/wined3d.h"
+#include "wined3d_gl.h"
+#include "wine/list.h"
+#include "wine/rbtree.h"
+
+#include "vboxext.h"
+
+#ifdef VBOX_WITH_VMSVGA
+#include "winoverride.h"
+#endif
+
+#ifdef VBOX_WITH_WDDM
+# include "vboxsharedrc.h"
+#endif
+
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+# define VBoxTlsRefGetImpl(_tls) (TlsGetValue((DWORD)(_tls)))
+# define VBoxTlsRefSetImpl(_tls, _val) (TlsSetValue((DWORD)(_tls), (_val)))
+# define VBoxTlsRefAssertImpl Assert
+# include <VBox/VBoxVideo3D.h>
+#endif
+
+/* Driver quirks */
+#define WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT       0x00000001
+#define WINED3D_QUIRK_SET_TEXCOORD_W            0x00000002
+#define WINED3D_QUIRK_GLSL_CLIP_VARYING         0x00000004
+#define WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA     0x00000008
+#define WINED3D_QUIRK_NV_CLIP_BROKEN            0x00000010
+#define WINED3D_QUIRK_FBO_TEX_UPDATE            0x00000020
+#define WINED3D_QUIRK_FULLSIZE_BLIT             0x00000040
+#define WINED3D_QUIRK_FORCE_BLIT                0x00000080
+
+/* Texture format fixups */
+
+enum fixup_channel_source
+{
+    CHANNEL_SOURCE_ZERO = 0,
+    CHANNEL_SOURCE_ONE = 1,
+    CHANNEL_SOURCE_X = 2,
+    CHANNEL_SOURCE_Y = 3,
+    CHANNEL_SOURCE_Z = 4,
+    CHANNEL_SOURCE_W = 5,
+    CHANNEL_SOURCE_COMPLEX0 = 6,
+    CHANNEL_SOURCE_COMPLEX1 = 7,
+};
+
+enum complex_fixup
+{
+    COMPLEX_FIXUP_NONE = 0,
+    COMPLEX_FIXUP_YUY2 = 1,
+    COMPLEX_FIXUP_UYVY = 2,
+    COMPLEX_FIXUP_YV12 = 3,
+    COMPLEX_FIXUP_P8   = 4,
+};
+
+#include <pshpack2.h>
+struct color_fixup_desc
+{
+    unsigned x_sign_fixup : 1;
+    unsigned x_source : 3;
+    unsigned y_sign_fixup : 1;
+    unsigned y_source : 3;
+    unsigned z_sign_fixup : 1;
+    unsigned z_source : 3;
+    unsigned w_sign_fixup : 1;
+    unsigned w_source : 3;
+};
+#include <poppack.h>
+
+static const struct color_fixup_desc COLOR_FIXUP_IDENTITY =
+        {0, CHANNEL_SOURCE_X, 0, CHANNEL_SOURCE_Y, 0, CHANNEL_SOURCE_Z, 0, CHANNEL_SOURCE_W};
+
+static inline struct color_fixup_desc create_color_fixup_desc(
+        int sign0, enum fixup_channel_source src0, int sign1, enum fixup_channel_source src1,
+        int sign2, enum fixup_channel_source src2, int sign3, enum fixup_channel_source src3)
+{
+    struct color_fixup_desc fixup =
+    {
+        sign0, src0,
+        sign1, src1,
+        sign2, src2,
+        sign3, src3,
+    };
+    return fixup;
+}
+
+static inline struct color_fixup_desc create_complex_fixup_desc(enum complex_fixup complex_fixup)
+{
+    struct color_fixup_desc fixup =
+    {
+        0, complex_fixup & (1 << 0) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+        0, complex_fixup & (1 << 1) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+        0, complex_fixup & (1 << 2) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+        0, complex_fixup & (1 << 3) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+    };
+    return fixup;
+}
+
+static inline BOOL is_identity_fixup(struct color_fixup_desc fixup)
+{
+    return !memcmp(&fixup, &COLOR_FIXUP_IDENTITY, sizeof(fixup));
+}
+
+static inline BOOL is_complex_fixup(struct color_fixup_desc fixup)
+{
+    return fixup.x_source == CHANNEL_SOURCE_COMPLEX0 || fixup.x_source == CHANNEL_SOURCE_COMPLEX1;
+}
+
+static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup)
+{
+    enum complex_fixup complex_fixup = 0;
+    if (fixup.x_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 0);
+    if (fixup.y_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 1);
+    if (fixup.z_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 2);
+    if (fixup.w_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 3);
+    return complex_fixup;
+}
+
+void *wined3d_rb_alloc(size_t size) DECLSPEC_HIDDEN;
+void *wined3d_rb_realloc(void *ptr, size_t size) DECLSPEC_HIDDEN;
+void wined3d_rb_free(void *ptr) DECLSPEC_HIDDEN;
+
+/* Device caps */
+#define MAX_PALETTES            65536
+#define MAX_STREAMS             16
+#define MAX_TEXTURES            8
+#define MAX_FRAGMENT_SAMPLERS   16
+#define MAX_VERTEX_SAMPLERS     4
+#define MAX_COMBINED_SAMPLERS   (MAX_FRAGMENT_SAMPLERS + MAX_VERTEX_SAMPLERS)
+#define MAX_ACTIVE_LIGHTS       8
+#define MAX_CLIPPLANES          WINED3DMAXUSERCLIPPLANES
+
+struct min_lookup
+{
+    GLenum mip[WINED3DTEXF_LINEAR + 1];
+};
+
+const struct min_lookup minMipLookup[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+const struct min_lookup minMipLookup_noFilter[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+const struct min_lookup minMipLookup_noMip[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+const GLenum magLookup[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+const GLenum magLookup_noFilter[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+
+static inline GLenum wined3d_gl_mag_filter(const GLenum mag_lookup[], WINED3DTEXTUREFILTERTYPE mag_filter)
+{
+    return mag_lookup[mag_filter];
+}
+
+static inline GLenum wined3d_gl_min_mip_filter(const struct min_lookup min_mip_lookup[],
+        WINED3DTEXTUREFILTERTYPE min_filter, WINED3DTEXTUREFILTERTYPE mip_filter)
+{
+    return min_mip_lookup[min_filter].mip[mip_filter];
+}
+
+/* float_16_to_32() and float_32_to_16() (see implementation in
+ * surface_base.c) convert 16 bit floats in the FLOAT16 data type
+ * to standard C floats and vice versa. They do not depend on the encoding
+ * of the C float, so they are platform independent, but slow. On x86 and
+ * other IEEE 754 compliant platforms the conversion can be accelerated by
+ * bit shifting the exponent and mantissa. There are also some SSE-based
+ * assembly routines out there.
+ *
+ * See GL_NV_half_float for a reference of the FLOAT16 / GL_HALF format
+ */
+static inline float float_16_to_32(const unsigned short *in) {
+    unsigned long fNaN = 0x7fc00000;
+    unsigned long fNegInf = 0xff800000;
+    unsigned long fInf = 0x7f800000;
+
+    const unsigned short s = ((*in) & 0x8000);
+    const unsigned short e = ((*in) & 0x7C00) >> 10;
+    const unsigned short m = (*in) & 0x3FF;
+    const float sgn = (s ? -1.0f : 1.0f);
+
+    if(e == 0) {
+        if(m == 0) return sgn * 0.0f; /* +0.0 or -0.0 */
+        else return sgn * pow(2, -14.0f) * ((float)m / 1024.0f);
+    } else if(e < 31) {
+        return sgn * pow(2, (float)e - 15.0f) * (1.0f + ((float)m / 1024.0f));
+    } else {
+        if(m == 0) return sgn>0? *(float*)(&fInf) : *(float*)(&fNegInf); //sgn / 0.0f; /* +INF / -INF */
+        else return *(float*)(&fNaN); //0.0f / 0.0f; /* NAN */
+    }
+}
+
+static inline float float_24_to_32(DWORD in)
+{
+    const float sgn = in & 0x800000 ? -1.0f : 1.0f;
+    const unsigned short e = (in & 0x780000) >> 19;
+    const unsigned short m = in & 0x7ffff;
+    unsigned long fNaN = 0x7fc00000;
+    unsigned long fNegInf = 0xff800000;
+    unsigned long fInf = 0x7f800000;
+
+    if (e == 0)
+    {
+        if (m == 0) return sgn * 0.0f; /* +0.0 or -0.0 */
+        else return sgn * pow(2, -6.0f) * ((float)m / 524288.0f);
+    }
+    else if (e < 15)
+    {
+        return sgn * pow(2, (float)e - 7.0f) * (1.0f + ((float)m / 524288.0f));
+    }
+    else
+    {
+        if (m == 0) return sgn>0? *(float*)(&fInf) : *(float*)(&fNegInf); //sgn / 0.0f; /* +INF / -INF */
+        else return *(float*)(&fNaN); //0.0f / 0.0f; /* NAN */
+    }
+}
+
+/**
+ * Settings
+ */
+#define VS_NONE    0
+#define VS_HW      1
+
+#define PS_NONE    0
+#define PS_HW      1
+
+#define VBO_NONE   0
+#define VBO_HW     1
+
+#define ORM_BACKBUFFER  0
+#define ORM_FBO         1
+
+#define SHADER_ARB  1
+#define SHADER_GLSL 2
+#define SHADER_ATI  3
+#define SHADER_NONE 4
+
+#define RTL_DISABLE   -1
+#define RTL_READDRAW   1
+#define RTL_READTEX    2
+
+#define PCI_VENDOR_NONE 0xffff /* e.g. 0x8086 for Intel and 0x10de for Nvidia */
+#define PCI_DEVICE_NONE 0xffff /* e.g. 0x14f for a Geforce6200 */
+
+/* NOTE: When adding fields to this structure, make sure to update the default
+ * values in wined3d_main.c as well. */
+typedef struct wined3d_settings_s {
+/* vertex and pixel shader modes */
+  int vs_mode;
+  int ps_mode;
+/* Ideally, we don't want the user to have to request GLSL.  If the hardware supports GLSL,
+    we should use it.  However, until it's fully implemented, we'll leave it as a registry
+    setting for developers. */
+  BOOL glslRequested;
+  int offscreen_rendering_mode;
+  int rendertargetlock_mode;
+  unsigned short pci_vendor_id;
+  unsigned short pci_device_id;
+/* Memory tracking and object counting */
+  unsigned int emulated_textureram;
+  char *logo;
+  int allow_multisampling;
+  BOOL strict_draw_ordering;
+} wined3d_settings_t;
+
+extern wined3d_settings_t wined3d_settings DECLSPEC_HIDDEN;
+
+typedef enum _WINED3DSAMPLER_TEXTURE_TYPE
+{
+    WINED3DSTT_UNKNOWN = 0,
+    WINED3DSTT_1D = 1,
+    WINED3DSTT_2D = 2,
+    WINED3DSTT_CUBE = 3,
+    WINED3DSTT_VOLUME = 4,
+} WINED3DSAMPLER_TEXTURE_TYPE;
+
+typedef enum _WINED3DSHADER_PARAM_REGISTER_TYPE
+{
+    WINED3DSPR_TEMP = 0,
+    WINED3DSPR_INPUT = 1,
+    WINED3DSPR_CONST = 2,
+    WINED3DSPR_ADDR = 3,
+    WINED3DSPR_TEXTURE = 3,
+    WINED3DSPR_RASTOUT = 4,
+    WINED3DSPR_ATTROUT = 5,
+    WINED3DSPR_TEXCRDOUT = 6,
+    WINED3DSPR_OUTPUT = 6,
+    WINED3DSPR_CONSTINT = 7,
+    WINED3DSPR_COLOROUT = 8,
+    WINED3DSPR_DEPTHOUT = 9,
+    WINED3DSPR_SAMPLER = 10,
+    WINED3DSPR_CONST2 = 11,
+    WINED3DSPR_CONST3 = 12,
+    WINED3DSPR_CONST4 = 13,
+    WINED3DSPR_CONSTBOOL = 14,
+    WINED3DSPR_LOOP = 15,
+    WINED3DSPR_TEMPFLOAT16 = 16,
+    WINED3DSPR_MISCTYPE = 17,
+    WINED3DSPR_LABEL = 18,
+    WINED3DSPR_PREDICATE = 19,
+    WINED3DSPR_IMMCONST,
+    WINED3DSPR_CONSTBUFFER,
+} WINED3DSHADER_PARAM_REGISTER_TYPE;
+
+enum wined3d_immconst_type
+{
+    WINED3D_IMMCONST_FLOAT,
+    WINED3D_IMMCONST_FLOAT4,
+};
+
+#define WINED3DSP_NOSWIZZLE (0 | (1 << 2) | (2 << 4) | (3 << 6))
+
+typedef enum _WINED3DSHADER_PARAM_SRCMOD_TYPE
+{
+    WINED3DSPSM_NONE = 0,
+    WINED3DSPSM_NEG = 1,
+    WINED3DSPSM_BIAS = 2,
+    WINED3DSPSM_BIASNEG = 3,
+    WINED3DSPSM_SIGN = 4,
+    WINED3DSPSM_SIGNNEG = 5,
+    WINED3DSPSM_COMP = 6,
+    WINED3DSPSM_X2 = 7,
+    WINED3DSPSM_X2NEG = 8,
+    WINED3DSPSM_DZ = 9,
+    WINED3DSPSM_DW = 10,
+    WINED3DSPSM_ABS = 11,
+    WINED3DSPSM_ABSNEG = 12,
+    WINED3DSPSM_NOT = 13,
+} WINED3DSHADER_PARAM_SRCMOD_TYPE;
+
+#define WINED3DSP_WRITEMASK_0   0x1 /* .x r */
+#define WINED3DSP_WRITEMASK_1   0x2 /* .y g */
+#define WINED3DSP_WRITEMASK_2   0x4 /* .z b */
+#define WINED3DSP_WRITEMASK_3   0x8 /* .w a */
+#define WINED3DSP_WRITEMASK_ALL 0xf /* all */
+
+typedef enum _WINED3DSHADER_PARAM_DSTMOD_TYPE
+{
+    WINED3DSPDM_NONE = 0,
+    WINED3DSPDM_SATURATE = 1,
+    WINED3DSPDM_PARTIALPRECISION = 2,
+    WINED3DSPDM_MSAMPCENTROID = 4,
+} WINED3DSHADER_PARAM_DSTMOD_TYPE;
+
+/* Undocumented opcode control to identify projective texture lookups in ps 2.0 and later */
+#define WINED3DSI_TEXLD_PROJECT 1
+#define WINED3DSI_TEXLD_BIAS    2
+
+typedef enum COMPARISON_TYPE
+{
+    COMPARISON_GT = 1,
+    COMPARISON_EQ = 2,
+    COMPARISON_GE = 3,
+    COMPARISON_LT = 4,
+    COMPARISON_NE = 5,
+    COMPARISON_LE = 6,
+} COMPARISON_TYPE;
+
+#define WINED3D_SM1_VS  0xfffe
+#define WINED3D_SM1_PS  0xffff
+#define WINED3D_SM4_PS  0x0000
+#define WINED3D_SM4_VS  0x0001
+#define WINED3D_SM4_GS  0x0002
+
+/* Shader version tokens, and shader end tokens */
+#define WINED3DPS_VERSION(major, minor) ((WINED3D_SM1_PS << 16) | ((major) << 8) | (minor))
+#define WINED3DVS_VERSION(major, minor) ((WINED3D_SM1_VS << 16) | ((major) << 8) | (minor))
+
+/* Shader backends */
+
+/* TODO: Make this dynamic, based on shader limits ? */
+#define MAX_ATTRIBS 16
+#define MAX_REG_ADDR 1
+#define MAX_REG_TEMP 32
+#define MAX_REG_TEXCRD 8
+#define MAX_REG_INPUT 12
+#define MAX_REG_OUTPUT 12
+#define MAX_CONST_I 16
+#define MAX_CONST_B 16
+
+/* FIXME: This needs to go up to 2048 for
+ * Shader model 3 according to msdn (and for software shaders) */
+#define MAX_LABELS 16
+
+#define SHADER_PGMSIZE 65535
+
+struct wined3d_shader_buffer
+{
+    char *buffer;
+    unsigned int bsize;
+    unsigned int lineNo;
+    BOOL newline;
+};
+
+enum WINED3D_SHADER_INSTRUCTION_HANDLER
+{
+    WINED3DSIH_ABS,
+    WINED3DSIH_ADD,
+    WINED3DSIH_BEM,
+    WINED3DSIH_BREAK,
+    WINED3DSIH_BREAKC,
+    WINED3DSIH_BREAKP,
+    WINED3DSIH_CALL,
+    WINED3DSIH_CALLNZ,
+    WINED3DSIH_CMP,
+    WINED3DSIH_CND,
+    WINED3DSIH_CRS,
+    WINED3DSIH_CUT,
+    WINED3DSIH_DCL,
+    WINED3DSIH_DEF,
+    WINED3DSIH_DEFB,
+    WINED3DSIH_DEFI,
+    WINED3DSIH_DP2ADD,
+    WINED3DSIH_DP3,
+    WINED3DSIH_DP4,
+    WINED3DSIH_DST,
+    WINED3DSIH_DSX,
+    WINED3DSIH_DSY,
+    WINED3DSIH_ELSE,
+    WINED3DSIH_EMIT,
+    WINED3DSIH_ENDIF,
+    WINED3DSIH_ENDLOOP,
+    WINED3DSIH_ENDREP,
+    WINED3DSIH_EXP,
+    WINED3DSIH_EXPP,
+    WINED3DSIH_FRC,
+    WINED3DSIH_IADD,
+    WINED3DSIH_IF,
+    WINED3DSIH_IFC,
+    WINED3DSIH_IGE,
+    WINED3DSIH_LABEL,
+    WINED3DSIH_LIT,
+    WINED3DSIH_LOG,
+    WINED3DSIH_LOGP,
+    WINED3DSIH_LOOP,
+    WINED3DSIH_LRP,
+    WINED3DSIH_LT,
+    WINED3DSIH_M3x2,
+    WINED3DSIH_M3x3,
+    WINED3DSIH_M3x4,
+    WINED3DSIH_M4x3,
+    WINED3DSIH_M4x4,
+    WINED3DSIH_MAD,
+    WINED3DSIH_MAX,
+    WINED3DSIH_MIN,
+    WINED3DSIH_MOV,
+    WINED3DSIH_MOVA,
+    WINED3DSIH_MUL,
+    WINED3DSIH_NOP,
+    WINED3DSIH_NRM,
+    WINED3DSIH_PHASE,
+    WINED3DSIH_POW,
+    WINED3DSIH_RCP,
+    WINED3DSIH_REP,
+    WINED3DSIH_RET,
+    WINED3DSIH_RSQ,
+    WINED3DSIH_SETP,
+    WINED3DSIH_SGE,
+    WINED3DSIH_SGN,
+    WINED3DSIH_SINCOS,
+    WINED3DSIH_SLT,
+    WINED3DSIH_SUB,
+    WINED3DSIH_TEX,
+    WINED3DSIH_TEXBEM,
+    WINED3DSIH_TEXBEML,
+    WINED3DSIH_TEXCOORD,
+    WINED3DSIH_TEXDEPTH,
+    WINED3DSIH_TEXDP3,
+    WINED3DSIH_TEXDP3TEX,
+    WINED3DSIH_TEXKILL,
+    WINED3DSIH_TEXLDD,
+    WINED3DSIH_TEXLDL,
+    WINED3DSIH_TEXM3x2DEPTH,
+    WINED3DSIH_TEXM3x2PAD,
+    WINED3DSIH_TEXM3x2TEX,
+    WINED3DSIH_TEXM3x3,
+    WINED3DSIH_TEXM3x3DIFF,
+    WINED3DSIH_TEXM3x3PAD,
+    WINED3DSIH_TEXM3x3SPEC,
+    WINED3DSIH_TEXM3x3TEX,
+    WINED3DSIH_TEXM3x3VSPEC,
+    WINED3DSIH_TEXREG2AR,
+    WINED3DSIH_TEXREG2GB,
+    WINED3DSIH_TEXREG2RGB,
+    WINED3DSIH_TABLE_SIZE
+};
+
+enum wined3d_shader_type
+{
+    WINED3D_SHADER_TYPE_PIXEL,
+    WINED3D_SHADER_TYPE_VERTEX,
+    WINED3D_SHADER_TYPE_GEOMETRY,
+};
+
+struct wined3d_shader_version
+{
+    enum wined3d_shader_type type;
+    BYTE major;
+    BYTE minor;
+};
+
+#define WINED3D_SHADER_VERSION(major, minor) (((major) << 8) | (minor))
+
+typedef struct shader_reg_maps
+{
+    struct wined3d_shader_version shader_version;
+    BYTE texcoord;                          /* MAX_REG_TEXCRD, 8 */
+    BYTE address;                           /* MAX_REG_ADDR, 1 */
+    WORD labels;                            /* MAX_LABELS, 16 */
+    DWORD temporary;                        /* MAX_REG_TEMP, 32 */
+    DWORD *constf;                          /* pixel, vertex */
+    DWORD texcoord_mask[MAX_REG_TEXCRD];    /* vertex < 3.0 */
+    WORD input_registers;                   /* max(MAX_REG_INPUT, MAX_ATTRIBS), 16 */
+    WORD output_registers;                  /* MAX_REG_OUTPUT, 12 */
+    WORD integer_constants;                 /* MAX_CONST_I, 16 */
+    WORD boolean_constants;                 /* MAX_CONST_B, 16 */
+    WORD local_int_consts;                  /* MAX_CONST_I, 16 */
+    WORD local_bool_consts;                 /* MAX_CONST_B, 16 */
+
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)];
+    BYTE bumpmat;                           /* MAX_TEXTURES, 8 */
+    BYTE luminanceparams;                   /* MAX_TEXTURES, 8 */
+
+    WORD usesnrm        : 1;
+    WORD vpos           : 1;
+    WORD usesdsx        : 1;
+    WORD usesdsy        : 1;
+    WORD usestexldd     : 1;
+    WORD usesmova       : 1;
+    WORD usesfacing     : 1;
+    WORD usesrelconstF  : 1;
+    WORD fog            : 1;
+    WORD usestexldl     : 1;
+    WORD usesifc        : 1;
+    WORD usescall       : 1;
+    WORD padding        : 4;
+
+    /* Whether or not loops are used in this shader, and nesting depth */
+    unsigned loop_depth;
+    unsigned highest_render_target;
+
+} shader_reg_maps;
+
+struct wined3d_shader_context
+{
+    IWineD3DBaseShader *shader;
+    const struct wined3d_gl_info *gl_info;
+    const struct shader_reg_maps *reg_maps;
+    struct wined3d_shader_buffer *buffer;
+    void *backend_data;
+};
+
+struct wined3d_shader_register
+{
+    WINED3DSHADER_PARAM_REGISTER_TYPE type;
+    UINT idx;
+    UINT array_idx;
+    const struct wined3d_shader_src_param *rel_addr;
+    enum wined3d_immconst_type immconst_type;
+    DWORD immconst_data[4];
+};
+
+struct wined3d_shader_dst_param
+{
+    struct wined3d_shader_register reg;
+    DWORD write_mask;
+    DWORD modifiers;
+    DWORD shift;
+};
+
+struct wined3d_shader_src_param
+{
+    struct wined3d_shader_register reg;
+    DWORD swizzle;
+    DWORD modifiers;
+};
+
+struct wined3d_shader_instruction
+{
+    const struct wined3d_shader_context *ctx;
+    enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+    DWORD flags;
+    BOOL coissue;
+    DWORD predicate;
+    UINT dst_count;
+    const struct wined3d_shader_dst_param *dst;
+    UINT src_count;
+    const struct wined3d_shader_src_param *src;
+};
+
+struct wined3d_shader_semantic
+{
+    WINED3DDECLUSAGE usage;
+    UINT usage_idx;
+    WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
+    struct wined3d_shader_dst_param reg;
+};
+
+struct wined3d_shader_attribute
+{
+    WINED3DDECLUSAGE usage;
+    UINT usage_idx;
+};
+
+struct wined3d_shader_loop_control
+{
+    unsigned int count;
+    unsigned int start;
+    int step;
+};
+
+struct wined3d_shader_frontend
+{
+    void *(*shader_init)(const DWORD *ptr, const struct wined3d_shader_signature *output_signature);
+    void (*shader_free)(void *data);
+    void (*shader_read_header)(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version);
+    void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, UINT *param_size);
+    void (*shader_read_src_param)(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+            struct wined3d_shader_src_param *src_rel_addr);
+    void (*shader_read_dst_param)(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+            struct wined3d_shader_src_param *dst_rel_addr);
+    void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic);
+    void (*shader_read_comment)(const DWORD **ptr, const char **comment, UINT *comment_size);
+    BOOL (*shader_is_end)(void *data, const DWORD **ptr);
+};
+
+extern const struct wined3d_shader_frontend sm1_shader_frontend DECLSPEC_HIDDEN;
+extern const struct wined3d_shader_frontend sm4_shader_frontend DECLSPEC_HIDDEN;
+
+typedef void (*SHADER_HANDLER)(const struct wined3d_shader_instruction *);
+
+struct shader_caps {
+    DWORD               VertexShaderVersion;
+    DWORD               MaxVertexShaderConst;
+
+    DWORD               PixelShaderVersion;
+    float               PixelShader1xMaxValue;
+    DWORD               MaxPixelShaderConst;
+
+    WINED3DVSHADERCAPS2_0   VS20Caps;
+    WINED3DPSHADERCAPS2_0   PS20Caps;
+
+    DWORD               MaxVShaderInstructionsExecuted;
+    DWORD               MaxPShaderInstructionsExecuted;
+    DWORD               MaxVertexShader30InstructionSlots;
+    DWORD               MaxPixelShader30InstructionSlots;
+
+    BOOL                VSClipping;
+};
+
+enum tex_types
+{
+    tex_1d       = 0,
+    tex_2d       = 1,
+    tex_3d       = 2,
+    tex_cube     = 3,
+    tex_rect     = 4,
+    tex_type_count = 5,
+};
+
+enum vertexprocessing_mode {
+    fixedfunction,
+    vertexshader,
+    pretransformed
+};
+
+#define WINED3D_CONST_NUM_UNUSED ~0U
+
+enum fogmode {
+    FOG_OFF,
+    FOG_LINEAR,
+    FOG_EXP,
+    FOG_EXP2
+};
+
+struct wined3d_context;
+
+#define WINED3D_PSARGS_PROJECTED          (1<<3)
+#define WINED3D_PSARGS_TEXTRANSFORM_SHIFT 4
+#define WINED3D_PSARGS_TEXTRANSFORM_MASK  0xF
+
+/* Stateblock dependent parameters which have to be hardcoded
+ * into the shader code
+ */
+struct ps_compile_args {
+    struct color_fixup_desc     color_fixup[MAX_FRAGMENT_SAMPLERS];
+    enum vertexprocessing_mode  vp_mode;
+    enum fogmode                fog;
+    /* Projected textures(ps 1.0-1.3) */
+    WORD                        tex_transform;
+    /* Texture types(2D, Cube, 3D) in ps 1.x */
+    WORD                        srgb_correction;
+    WORD                        np2_fixup;
+    /* Bitmap for NP2 texcoord fixups (16 samplers max currently).
+       D3D9 has a limit of 16 samplers and the fixup is superfluous
+       in D3D10 (unconditional NP2 support mandatory). */
+    WORD                        t_mirror;
+};
+
+enum fog_src_type {
+    VS_FOG_Z        = 0,
+    VS_FOG_COORD    = 1
+};
+
+struct vs_compile_args {
+    BYTE                        fog_src;
+    BYTE                        clip_enabled;
+    WORD                        swizzle_map;   /* MAX_ATTRIBS, 16 */
+};
+
+typedef struct {
+    void (*shader_handle_instruction)(const struct wined3d_shader_instruction *);
+    void (*shader_select)(const struct wined3d_context *context, BOOL usePS, BOOL useVS);
+    void (*shader_select_depth_blt)(IWineD3DDevice *iface, enum tex_types tex_type);
+    void (*shader_deselect_depth_blt)(IWineD3DDevice *iface);
+    void (*shader_update_float_vertex_constants)(IWineD3DDevice *iface, UINT start, UINT count);
+    void (*shader_update_float_pixel_constants)(IWineD3DDevice *iface, UINT start, UINT count);
+    void (*shader_load_constants)(const struct wined3d_context *context, char usePS, char useVS);
+    void (*shader_load_np2fixup_constants)(IWineD3DDevice *iface, char usePS, char useVS);
+    void (*shader_destroy)(IWineD3DBaseShader *iface);
+    HRESULT (*shader_alloc_private)(IWineD3DDevice *iface);
+    void (*shader_free_private)(IWineD3DDevice *iface);
+    BOOL (*shader_dirtifyable_constants)(IWineD3DDevice *iface);
+    void (*shader_get_caps)(const struct wined3d_gl_info *gl_info, struct shader_caps *caps);
+    BOOL (*shader_color_fixup_supported)(struct color_fixup_desc fixup);
+    void (*shader_add_instruction_modifiers)(const struct wined3d_shader_instruction *ins);
+} shader_backend_t;
+
+extern const shader_backend_t glsl_shader_backend DECLSPEC_HIDDEN;
+extern const shader_backend_t arb_program_shader_backend DECLSPEC_HIDDEN;
+extern const shader_backend_t none_shader_backend DECLSPEC_HIDDEN;
+
+/* X11 locking */
+
+extern void (* CDECL wine_tsx11_lock_ptr)(void) DECLSPEC_HIDDEN;
+extern void (* CDECL wine_tsx11_unlock_ptr)(void) DECLSPEC_HIDDEN;
+
+/* As GLX relies on X, this is needed */
+extern int num_lock DECLSPEC_HIDDEN;
+
+#if 0
+#define ENTER_GL() ++num_lock; if (num_lock > 1) FIXME("Recursive use of GL lock to: %d\n", num_lock); wine_tsx11_lock_ptr()
+#define LEAVE_GL() if (num_lock != 1) FIXME("Recursive use of GL lock: %d\n", num_lock); --num_lock; wine_tsx11_unlock_ptr()
+#else
+#define ENTER_GL() wine_tsx11_lock_ptr()
+#define LEAVE_GL() wine_tsx11_unlock_ptr()
+#endif
+
+/*****************************************************************************
+ * Defines
+ */
+
+/* GL related defines */
+/* ------------------ */
+#define GL_EXTCALL(FuncName)          (GLINFO_LOCATION.FuncName)
+
+#define D3DCOLOR_B_R(dw) (((dw) >> 16) & 0xFF)
+#define D3DCOLOR_B_G(dw) (((dw) >>  8) & 0xFF)
+#define D3DCOLOR_B_B(dw) (((dw) >>  0) & 0xFF)
+#define D3DCOLOR_B_A(dw) (((dw) >> 24) & 0xFF)
+
+#define D3DCOLOR_R(dw) (((float) (((dw) >> 16) & 0xFF)) / 255.0f)
+#define D3DCOLOR_G(dw) (((float) (((dw) >>  8) & 0xFF)) / 255.0f)
+#define D3DCOLOR_B(dw) (((float) (((dw) >>  0) & 0xFF)) / 255.0f)
+#define D3DCOLOR_A(dw) (((float) (((dw) >> 24) & 0xFF)) / 255.0f)
+
+#define D3DCOLORTOGLFLOAT4(dw, vec) do { \
+  (vec)[0] = D3DCOLOR_R(dw); \
+  (vec)[1] = D3DCOLOR_G(dw); \
+  (vec)[2] = D3DCOLOR_B(dw); \
+  (vec)[3] = D3DCOLOR_A(dw); \
+} while(0)
+
+/* DirectX Device Limits */
+/* --------------------- */
+#define MAX_MIP_LEVELS 32  /* Maximum number of mipmap levels. */
+#define HIGHEST_TRANSFORMSTATE WINED3DTS_WORLDMATRIX(255) /* Highest value in WINED3DTRANSFORMSTATETYPE */
+
+/* Checking of API calls */
+/* --------------------- */
+#ifndef WINE_NO_DEBUG_MSGS
+# ifdef VBOX_WITH_VMSVGA
+# define checkGLcall(A)                                              \
+do {                                                                \
+    GLint err;                                                      \
+    if(!__WINE_IS_DEBUG_ON(_FIXME, __wine_dbch___default)) break;   \
+    err = glGetError();                                             \
+    if (err == GL_NO_ERROR) {                                       \
+       TRACE("%s call ok %s / %d\n", A, __FILE__, __LINE__);        \
+                                                                    \
+    } else {                                                     \
+        ERR(">>>>>>>>>>>>>>>>> %s (%#x) from %s @ %s / %d\n",       \
+            debug_glerror(err), err, A, __FILE__, __LINE__);        \
+    } \
+} while(0)
+# else
+# define checkGLcall(A)                                              \
+do {                                                                \
+    GLint err;                                                      \
+    if(!__WINE_IS_DEBUG_ON(_FIXME, __wine_dbch___default)) break;   \
+    err = glGetError();                                             \
+    if (err == GL_NO_ERROR) {                                       \
+       TRACE("%s call ok %s / %d\n", A, __FILE__, __LINE__);        \
+                                                                    \
+    } else do {                                                     \
+        ERR(">>>>>>>>>>>>>>>>> %s (%#x) from %s @ %s / %d\n",       \
+            debug_glerror(err), err, A, __FILE__, __LINE__);        \
+       err = glGetError();                                          \
+    } while (err != GL_NO_ERROR);                                   \
+} while(0)
+# endif 
+#else
+#define checkGLcall(A) do {} while(0)
+#endif
+
+/* Trace routines / diagnostics */
+/* ---------------------------- */
+
+/* Dump out a matrix and copy it */
+#define conv_mat(mat,gl_mat)                                                                \
+do {                                                                                        \
+    TRACE("%f %f %f %f\n", (mat)->u.s._11, (mat)->u.s._12, (mat)->u.s._13, (mat)->u.s._14); \
+    TRACE("%f %f %f %f\n", (mat)->u.s._21, (mat)->u.s._22, (mat)->u.s._23, (mat)->u.s._24); \
+    TRACE("%f %f %f %f\n", (mat)->u.s._31, (mat)->u.s._32, (mat)->u.s._33, (mat)->u.s._34); \
+    TRACE("%f %f %f %f\n", (mat)->u.s._41, (mat)->u.s._42, (mat)->u.s._43, (mat)->u.s._44); \
+    memcpy(gl_mat, (mat), 16 * sizeof(float));                                              \
+} while (0)
+
+/* Trace vector and strided data information */
+#define TRACE_STRIDED(si, name) do { if (si->use_map & (1 << name)) \
+        TRACE( #name "=(data:%p, stride:%d, format:%#x, vbo %d, stream %u)\n", \
+        si->elements[name].data, si->elements[name].stride, si->elements[name].format_desc->format, \
+        si->elements[name].buffer_object, si->elements[name].stream_idx); } while(0)
+
+/* Advance declaration of structures to satisfy compiler */
+typedef struct IWineD3DStateBlockImpl IWineD3DStateBlockImpl;
+typedef struct IWineD3DSurfaceImpl    IWineD3DSurfaceImpl;
+typedef struct IWineD3DPaletteImpl    IWineD3DPaletteImpl;
+typedef struct IWineD3DDeviceImpl     IWineD3DDeviceImpl;
+typedef struct IWineD3DSwapChainImpl  IWineD3DSwapChainImpl;
+
+/* Global variables */
+extern const float identity[16] DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * Compilable extra diagnostics
+ */
+
+/* TODO: Confirm each of these works when wined3d move completed */
+#if 0 /* NOTE: Must be 0 in cvs */
+  /* To avoid having to get gigabytes of trace, the following can be compiled in, and at the start
+     of each frame, a check is made for the existence of C:\D3DTRACE, and if it exists d3d trace
+     is enabled, and if it doesn't exist it is disabled. */
+# define FRAME_DEBUGGING
+  /*  Adding in the SINGLE_FRAME_DEBUGGING gives a trace of just what makes up a single frame, before
+      the file is deleted                                                                            */
+# if 1 /* NOTE: Must be 1 in cvs, as this is mostly more useful than a trace from program start */
+#  define SINGLE_FRAME_DEBUGGING
+# endif
+  /* The following, when enabled, lets you see the makeup of the frame, by drawprimitive calls.
+     It can only be enabled when FRAME_DEBUGGING is also enabled
+     The contents of the back buffer are written into /tmp/backbuffer_* after each primitive
+     array is drawn.                                                                            */
+# if 0 /* NOTE: Must be 0 in cvs, as this give a lot of ppm files when compiled in */
+#  define SHOW_FRAME_MAKEUP 1
+# endif
+  /* The following, when enabled, lets you see the makeup of the all the textures used during each
+     of the drawprimitive calls. It can only be enabled when SHOW_FRAME_MAKEUP is also enabled.
+     The contents of the textures assigned to each stage are written into
+     /tmp/texture_*_<Stage>.ppm after each primitive array is drawn.                            */
+# if 0 /* NOTE: Must be 0 in cvs, as this give a lot of ppm files when compiled in */
+#  define SHOW_TEXTURE_MAKEUP 0
+# endif
+extern BOOL isOn;
+extern BOOL isDumpingFrames;
+extern LONG primCounter;
+#endif
+
+enum wined3d_ffp_idx
+{
+    WINED3D_FFP_POSITION = 0,
+    WINED3D_FFP_BLENDWEIGHT = 1,
+    WINED3D_FFP_BLENDINDICES = 2,
+    WINED3D_FFP_NORMAL = 3,
+    WINED3D_FFP_PSIZE = 4,
+    WINED3D_FFP_DIFFUSE = 5,
+    WINED3D_FFP_SPECULAR = 6,
+    WINED3D_FFP_TEXCOORD0 = 7,
+    WINED3D_FFP_TEXCOORD1 = 8,
+    WINED3D_FFP_TEXCOORD2 = 9,
+    WINED3D_FFP_TEXCOORD3 = 10,
+    WINED3D_FFP_TEXCOORD4 = 11,
+    WINED3D_FFP_TEXCOORD5 = 12,
+    WINED3D_FFP_TEXCOORD6 = 13,
+    WINED3D_FFP_TEXCOORD7 = 14,
+};
+
+enum wined3d_ffp_emit_idx
+{
+    WINED3D_FFP_EMIT_FLOAT1 = 0,
+    WINED3D_FFP_EMIT_FLOAT2 = 1,
+    WINED3D_FFP_EMIT_FLOAT3 = 2,
+    WINED3D_FFP_EMIT_FLOAT4 = 3,
+    WINED3D_FFP_EMIT_D3DCOLOR = 4,
+    WINED3D_FFP_EMIT_UBYTE4 = 5,
+    WINED3D_FFP_EMIT_SHORT2 = 6,
+    WINED3D_FFP_EMIT_SHORT4 = 7,
+    WINED3D_FFP_EMIT_UBYTE4N = 8,
+    WINED3D_FFP_EMIT_SHORT2N = 9,
+    WINED3D_FFP_EMIT_SHORT4N = 10,
+    WINED3D_FFP_EMIT_USHORT2N = 11,
+    WINED3D_FFP_EMIT_USHORT4N = 12,
+    WINED3D_FFP_EMIT_UDEC3 = 13,
+    WINED3D_FFP_EMIT_DEC3N = 14,
+    WINED3D_FFP_EMIT_FLOAT16_2 = 15,
+    WINED3D_FFP_EMIT_FLOAT16_4 = 16,
+    WINED3D_FFP_EMIT_COUNT = 17
+};
+
+struct wined3d_stream_info_element
+{
+    const struct wined3d_format_desc *format_desc;
+    GLsizei stride;
+    const BYTE *data;
+    UINT stream_idx;
+    GLuint buffer_object;
+};
+
+struct wined3d_stream_info
+{
+    struct wined3d_stream_info_element elements[MAX_ATTRIBS];
+    BOOL position_transformed;
+    WORD swizzle_map; /* MAX_ATTRIBS, 16 */
+    WORD use_map; /* MAX_ATTRIBS, 16 */
+};
+
+/*****************************************************************************
+ * Prototypes
+ */
+
+/* Routine common to the draw primitive and draw indexed primitive routines */
+void drawPrimitive(IWineD3DDevice *iface, UINT index_count,
+        UINT start_idx, UINT idxBytes, const void *idxData) DECLSPEC_HIDDEN;
+DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) DECLSPEC_HIDDEN;
+
+typedef void (WINE_GLAPI *glAttribFunc)(const void *data);
+typedef void (WINE_GLAPI *glMultiTexCoordFunc)(GLenum unit, const void *data);
+extern glAttribFunc position_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glAttribFunc diffuse_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glAttribFunc specular_func_3ubv DECLSPEC_HIDDEN;
+extern glAttribFunc specular_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glAttribFunc normal_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+
+#define eps 1e-8
+
+#define GET_TEXCOORD_SIZE_FROM_FVF(d3dvtVertexType, tex_num) \
+    (((((d3dvtVertexType) >> (16 + (2 * (tex_num)))) + 1) & 0x03) + 1)
+
+/* Routines and structures related to state management */
+
+#define STATE_RENDER(a) (a)
+#define STATE_IS_RENDER(a) ((a) >= STATE_RENDER(1) && (a) <= STATE_RENDER(WINEHIGHEST_RENDER_STATE))
+
+#define STATE_TEXTURESTAGE(stage, num) (STATE_RENDER(WINEHIGHEST_RENDER_STATE) + 1 + (stage) * (WINED3D_HIGHEST_TEXTURE_STATE + 1) + (num))
+#define STATE_IS_TEXTURESTAGE(a) ((a) >= STATE_TEXTURESTAGE(0, 1) && (a) <= STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE))
+
+/* + 1 because samplers start with 0 */
+#define STATE_SAMPLER(num) (STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE) + 1 + (num))
+#define STATE_IS_SAMPLER(num) ((num) >= STATE_SAMPLER(0) && (num) <= STATE_SAMPLER(MAX_COMBINED_SAMPLERS - 1))
+
+#define STATE_PIXELSHADER (STATE_SAMPLER(MAX_COMBINED_SAMPLERS - 1) + 1)
+#define STATE_IS_PIXELSHADER(a) ((a) == STATE_PIXELSHADER)
+
+#define STATE_TRANSFORM(a) (STATE_PIXELSHADER + (a))
+#define STATE_IS_TRANSFORM(a) ((a) >= STATE_TRANSFORM(1) && (a) <= STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(255)))
+
+#define STATE_STREAMSRC (STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(255)) + 1)
+#define STATE_IS_STREAMSRC(a) ((a) == STATE_STREAMSRC)
+#define STATE_INDEXBUFFER (STATE_STREAMSRC + 1)
+#define STATE_IS_INDEXBUFFER(a) ((a) == STATE_INDEXBUFFER)
+
+#define STATE_VDECL (STATE_INDEXBUFFER + 1)
+#define STATE_IS_VDECL(a) ((a) == STATE_VDECL)
+
+#define STATE_VSHADER (STATE_VDECL + 1)
+#define STATE_IS_VSHADER(a) ((a) == STATE_VSHADER)
+
+#define STATE_VIEWPORT (STATE_VSHADER + 1)
+#define STATE_IS_VIEWPORT(a) ((a) == STATE_VIEWPORT)
+
+#define STATE_VERTEXSHADERCONSTANT (STATE_VIEWPORT + 1)
+#define STATE_PIXELSHADERCONSTANT (STATE_VERTEXSHADERCONSTANT + 1)
+#define STATE_IS_VERTEXSHADERCONSTANT(a) ((a) == STATE_VERTEXSHADERCONSTANT)
+#define STATE_IS_PIXELSHADERCONSTANT(a) ((a) == STATE_PIXELSHADERCONSTANT)
+
+#define STATE_ACTIVELIGHT(a) (STATE_PIXELSHADERCONSTANT + (a) + 1)
+#define STATE_IS_ACTIVELIGHT(a) ((a) >= STATE_ACTIVELIGHT(0) && (a) < STATE_ACTIVELIGHT(MAX_ACTIVE_LIGHTS))
+
+#define STATE_SCISSORRECT (STATE_ACTIVELIGHT(MAX_ACTIVE_LIGHTS - 1) + 1)
+#define STATE_IS_SCISSORRECT(a) ((a) == STATE_SCISSORRECT)
+
+#define STATE_CLIPPLANE(a) (STATE_SCISSORRECT + 1 + (a))
+#define STATE_IS_CLIPPLANE(a) ((a) >= STATE_CLIPPLANE(0) && (a) <= STATE_CLIPPLANE(MAX_CLIPPLANES - 1))
+
+#define STATE_MATERIAL (STATE_CLIPPLANE(MAX_CLIPPLANES))
+#define STATE_IS_MATERIAL(a) ((a) == STATE_MATERIAL)
+
+#define STATE_FRONTFACE (STATE_MATERIAL + 1)
+#define STATE_IS_FRONTFACE(a) ((a) == STATE_FRONTFACE)
+
+#define STATE_HIGHEST (STATE_FRONTFACE)
+
+enum fogsource {
+    FOGSOURCE_FFP,
+    FOGSOURCE_VS,
+    FOGSOURCE_COORD,
+};
+
+#define WINED3D_MAX_FBO_ENTRIES 64
+
+struct wined3d_occlusion_query
+{
+    struct list entry;
+    GLuint id;
+    struct wined3d_context *context;
+};
+
+union wined3d_gl_query_object
+{
+    GLuint id;
+    GLsync sync;
+};
+
+struct wined3d_event_query
+{
+    struct list entry;
+    union wined3d_gl_query_object object;
+    struct wined3d_context *context;
+};
+
+enum wined3d_event_query_result
+{
+    WINED3D_EVENT_QUERY_OK,
+    WINED3D_EVENT_QUERY_WAITING,
+    WINED3D_EVENT_QUERY_NOT_STARTED,
+    WINED3D_EVENT_QUERY_WRONG_THREAD,
+    WINED3D_EVENT_QUERY_ERROR
+};
+
+void wined3d_event_query_destroy(struct wined3d_event_query *query) DECLSPEC_HIDDEN;
+enum wined3d_event_query_result wined3d_event_query_test(struct wined3d_event_query *query, IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+enum wined3d_event_query_result wined3d_event_query_finish(struct wined3d_event_query *query, IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+void wined3d_event_query_issue(struct wined3d_event_query *query, IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+HRESULT wined3d_event_query_supported(const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+
+struct wined3d_context
+{
+    const struct wined3d_gl_info *gl_info;
+    /* State dirtification
+     * dirtyArray is an array that contains markers for dirty states. numDirtyEntries states are dirty, their numbers are in indices
+     * 0...numDirtyEntries - 1. isStateDirty is a redundant copy of the dirtyArray. Technically only one of them would be needed,
+     * but with the help of both it is easy to find out if a state is dirty(just check the array index), and for applying dirty states
+     * only numDirtyEntries array elements have to be checked, not STATE_HIGHEST states.
+     */
+    DWORD                   dirtyArray[STATE_HIGHEST + 1]; /* Won't get bigger than that, a state is never marked dirty 2 times */
+    DWORD                   numDirtyEntries;
+    DWORD isStateDirty[STATE_HIGHEST / (sizeof(DWORD) * CHAR_BIT) + 1]; /* Bitmap to find out quickly if a state is dirty */
+
+#ifdef VBOX_WITH_WDDM
+    IWineD3DDeviceImpl    *device;
+    IWineD3DSwapChainImpl *currentSwapchain;
+#else
+    IWineD3DSwapChainImpl *swapchain;
+#endif
+
+    IWineD3DSurface *current_rt;
+    DWORD                   tid;    /* Thread ID which owns this context at the moment */
+
+    /* Stores some information about the context state for optimization */
+    WORD render_offscreen : 1;
+    WORD draw_buffer_dirty : 1;
+    WORD last_was_rhw : 1;              /* true iff last draw_primitive was in xyzrhw mode */
+    WORD last_was_pshader : 1;
+    WORD last_was_vshader : 1;
+    WORD namedArraysLoaded : 1;
+    WORD numberedArraysLoaded : 1;
+    WORD last_was_blit : 1;
+    WORD last_was_ckey : 1;
+    WORD fog_coord : 1;
+    WORD fog_enabled : 1;
+    WORD num_untracked_materials : 2;   /* Max value 2 */
+    WORD current : 1;
+#if !defined(VBOX_WINE_WITH_SINGLE_CONTEXT) && !defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+    WORD destroyed : 1;
+#endif
+    WORD valid : 1;
+    BYTE texShaderBumpMap;              /* MAX_TEXTURES, 8 */
+    BYTE lastWasPow2Texture;            /* MAX_TEXTURES, 8 */
+    DWORD                   numbered_array_mask;
+    GLenum                  tracking_parm;     /* Which source is tracking current colour         */
+    GLenum                  untracked_materials[2];
+    UINT                    blit_w, blit_h;
+    enum fogsource          fog_source;
+
+    char                    *vshader_const_dirty, *pshader_const_dirty;
+
+    /* The actual opengl context */
+    UINT level;
+    HGLRC restore_ctx;
+    HDC restore_dc;
+    HGLRC                   glCtx;
+#ifndef VBOX_WITH_WDDM
+    HWND                    win_handle;
+    HDC                     hdc;
+#endif
+
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+    VBOXTLSREFDATA
+#endif
+
+#ifdef VBOX_WITH_VMSVGA
+    IWineD3DDeviceImpl     *pDeviceContext;
+    BOOL                    fChangedVertexShaderConstant;
+    BOOL                    fChangedPixelShaderConstant;
+    BOOL                    fChangedVertexShader;
+    BOOL                    fChangedPixelShader;
+#endif
+    int pixel_format;
+    GLint                   aux_buffers;
+
+    /* FBOs */
+    UINT                    fbo_entry_count;
+    struct list             fbo_list;
+    struct list             fbo_destroy_list;
+    struct fbo_entry        *current_fbo;
+    GLuint                  src_fbo;
+    GLuint                  dst_fbo;
+    GLuint                  fbo_read_binding;
+    GLuint                  fbo_draw_binding;
+    BOOL rebind_fbo;
+
+    /* Queries */
+    GLuint *free_occlusion_queries;
+    UINT free_occlusion_query_size;
+    UINT free_occlusion_query_count;
+    struct list occlusion_queries;
+
+    union wined3d_gl_query_object *free_event_queries;
+    UINT free_event_query_size;
+    UINT free_event_query_count;
+    struct list event_queries;
+
+    /* Extension emulation */
+    GLint                   gl_fog_source;
+    GLfloat                 fog_coord_value;
+    GLfloat                 color[4], fogstart, fogend, fogcolor[4];
+    GLuint                  dummy_arbfp_prog;
+};
+
+typedef void (*APPLYSTATEFUNC)(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3d_context *ctx);
+
+struct StateEntry
+{
+    DWORD representative;
+    APPLYSTATEFUNC apply;
+};
+
+struct StateEntryTemplate
+{
+    DWORD state;
+    struct StateEntry content;
+    GL_SupportedExt extension;
+};
+
+struct fragment_caps
+{
+    DWORD PrimitiveMiscCaps;
+    DWORD TextureOpCaps;
+    DWORD MaxTextureBlendStages;
+    DWORD MaxSimultaneousTextures;
+};
+
+struct fragment_pipeline
+{
+    void (*enable_extension)(IWineD3DDevice *iface, BOOL enable);
+    void (*get_caps)(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps);
+    HRESULT (*alloc_private)(IWineD3DDevice *iface);
+    void (*free_private)(IWineD3DDevice *iface);
+    BOOL (*color_fixup_supported)(struct color_fixup_desc fixup);
+    const struct StateEntryTemplate *states;
+    BOOL ffp_proj_control;
+};
+
+extern const struct StateEntryTemplate misc_state_template[] DECLSPEC_HIDDEN;
+extern const struct StateEntryTemplate ffp_vertexstate_template[] DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline ffp_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline atifs_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline arbfp_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline nvts_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline nvrc_fragment_pipeline DECLSPEC_HIDDEN;
+
+/* "Base" state table */
+HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_multistate_funcs,
+        const struct wined3d_gl_info *gl_info, const struct StateEntryTemplate *vertex,
+        const struct fragment_pipeline *fragment, const struct StateEntryTemplate *misc) DECLSPEC_HIDDEN;
+
+enum blit_operation
+{
+    BLIT_OP_BLIT,
+    BLIT_OP_COLOR_FILL
+};
+
+/* Shaders for color conversions in blits */
+struct blit_shader
+{
+    HRESULT (*alloc_private)(IWineD3DDevice *iface);
+    void (*free_private)(IWineD3DDevice *iface);
+    HRESULT (*set_shader)(IWineD3DDevice *iface, IWineD3DSurfaceImpl *surface);
+    void (*unset_shader)(IWineD3DDevice *iface);
+    BOOL (*blit_supported)(const struct wined3d_gl_info *gl_info, enum blit_operation blit_op,
+                           const RECT *src_rect, DWORD src_usage, WINED3DPOOL src_pool, const struct wined3d_format_desc *src_format_desc,
+                           const RECT *dst_rect, DWORD dst_usage, WINED3DPOOL dst_pool, const struct wined3d_format_desc *dst_format_desc);
+    HRESULT (*color_fill)(IWineD3DDeviceImpl *device, IWineD3DSurfaceImpl *dst_surface, const RECT *dst_rect, DWORD fill_color);
+};
+
+extern const struct blit_shader ffp_blit DECLSPEC_HIDDEN;
+extern const struct blit_shader arbfp_blit DECLSPEC_HIDDEN;
+extern const struct blit_shader cpu_blit DECLSPEC_HIDDEN;
+
+/* Temporary blit_shader helper functions */
+HRESULT arbfp_blit_surface(IWineD3DDeviceImpl *device, IWineD3DSurfaceImpl *src_surface, const RECT *src_rect,
+                           IWineD3DSurfaceImpl *dst_surface, const RECT *dst_rect_in, enum blit_operation blit_op,
+                           DWORD Filter) DECLSPEC_HIDDEN;
+
+typedef enum ContextUsage {
+    CTXUSAGE_RESOURCELOAD       = 1,    /* Only loads textures: No State is applied */
+    CTXUSAGE_DRAWPRIM           = 2,    /* OpenGL states are set up for blitting DirectDraw surfaces */
+    CTXUSAGE_BLIT               = 3,    /* OpenGL states are set up 3D drawing */
+    CTXUSAGE_CLEAR              = 4,    /* Drawable and states are set up for clearing */
+} ContextUsage;
+
+struct wined3d_context *context_acquire(IWineD3DDeviceImpl *This,
+        IWineD3DSurface *target, enum ContextUsage usage) DECLSPEC_HIDDEN;
+void context_alloc_event_query(struct wined3d_context *context,
+        struct wined3d_event_query *query) DECLSPEC_HIDDEN;
+void context_alloc_occlusion_query(struct wined3d_context *context,
+        struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
+void context_resource_released(IWineD3DDevice *iface,
+        IWineD3DResource *resource, WINED3DRESOURCETYPE type) DECLSPEC_HIDDEN;
+void context_bind_fbo(struct wined3d_context *context, GLenum target, GLuint *fbo) DECLSPEC_HIDDEN;
+void context_attach_depth_stencil_fbo(struct wined3d_context *context,
+        GLenum fbo_target, IWineD3DSurfaceImpl *depth_stencil, BOOL use_render_buffer) DECLSPEC_HIDDEN;
+void context_attach_surface_fbo(const struct wined3d_context *context,
+        GLenum fbo_target, DWORD idx, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN;
+struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,
+        const struct wined3d_format_desc *ds_format_desc
+#ifdef VBOX_WITH_WDDM
+                , struct VBOXUHGSMI *pHgsmi
+#endif
+        ) DECLSPEC_HIDDEN;
+struct IWineD3DDeviceImpl *context_get_device(const struct wined3d_context *context); DECLSPEC_HIDDEN;
+#ifdef VBOX_WITH_WDDM
+struct wined3d_context *context_find_create(IWineD3DDeviceImpl *device, IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,
+        const struct wined3d_format_desc *ds_format_desc) DECLSPEC_HIDDEN;
+BOOL context_acquire_context(struct wined3d_context * context, IWineD3DSurface *target, enum ContextUsage usage, BOOL bReValidate) DECLSPEC_HIDDEN;
+#endif
+void context_destroy(IWineD3DDeviceImpl *This, struct wined3d_context *context) DECLSPEC_HIDDEN;
+void context_free_event_query(struct wined3d_event_query *query) DECLSPEC_HIDDEN;
+void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
+struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN;
+DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
+void context_release(struct wined3d_context *context) DECLSPEC_HIDDEN;
+BOOL context_set_current(struct wined3d_context *ctx) DECLSPEC_HIDDEN;
+void context_set_draw_buffer(struct wined3d_context *context, GLenum buffer) DECLSPEC_HIDDEN;
+void context_set_tls_idx(DWORD idx) DECLSPEC_HIDDEN;
+void context_surface_update(struct wined3d_context *context, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN;
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+void context_clear_on_thread_detach();
+#endif
+/* Macros for doing basic GPU detection based on opengl capabilities */
+#define WINE_D3D6_CAPABLE(gl_info) (gl_info->supported[ARB_MULTITEXTURE])
+#define WINE_D3D7_CAPABLE(gl_info) (gl_info->supported[ARB_TEXTURE_COMPRESSION] && gl_info->supported[ARB_TEXTURE_CUBE_MAP] && gl_info->supported[ARB_TEXTURE_ENV_DOT3])
+#define WINE_D3D8_CAPABLE(gl_info) WINE_D3D7_CAPABLE(gl_info) && (gl_info->supported[ARB_MULTISAMPLE] && gl_info->supported[ARB_TEXTURE_BORDER_CLAMP])
+#define WINE_D3D9_CAPABLE(gl_info) WINE_D3D8_CAPABLE(gl_info) && (gl_info->supported[ARB_FRAGMENT_PROGRAM] && gl_info->supported[ARB_VERTEX_SHADER])
+#define WINE_D3D10_CAPABLE(gl_info) WINE_D3D9_CAPABLE(gl_info) && (gl_info->supported[EXT_GPU_SHADER4])
+
+/*****************************************************************************
+ * Internal representation of a light
+ */
+struct wined3d_light_info
+{
+    WINED3DLIGHT OriginalParms; /* Note D3D8LIGHT == D3D9LIGHT */
+    DWORD        OriginalIndex;
+    LONG         glIndex;
+    BOOL         enabled;
+
+    /* Converted parms to speed up swapping lights */
+    float                         lightPosn[4];
+    float                         lightDirn[4];
+    float                         exponent;
+    float                         cutoff;
+
+    struct list entry;
+};
+
+/* The default light parameters */
+extern const WINED3DLIGHT WINED3D_default_light DECLSPEC_HIDDEN;
+
+typedef struct WineD3D_PixelFormat
+{
+    int iPixelFormat; /* WGL pixel format */
+    int iPixelType; /* WGL pixel type e.g. WGL_TYPE_RGBA_ARB, WGL_TYPE_RGBA_FLOAT_ARB or WGL_TYPE_COLORINDEX_ARB */
+    int redSize, greenSize, blueSize, alphaSize, colorSize;
+    int depthSize, stencilSize;
+    BOOL windowDrawable;
+    BOOL doubleBuffer;
+    int auxBuffers;
+    int numSamples;
+} WineD3D_PixelFormat;
+
+enum wined3d_gl_vendor
+{
+    GL_VENDOR_UNKNOWN,
+    GL_VENDOR_APPLE,
+    GL_VENDOR_FGLRX,
+    GL_VENDOR_INTEL,
+    GL_VENDOR_MESA,
+    GL_VENDOR_NVIDIA,
+};
+
+
+enum wined3d_pci_vendor
+{
+    HW_VENDOR_SOFTWARE                 = 0x0000,
+    HW_VENDOR_ATI                      = 0x1002,
+    HW_VENDOR_NVIDIA                   = 0x10de,
+    HW_VENDOR_INTEL                    = 0x8086,
+};
+
+enum wined3d_pci_device
+{
+    CARD_WINE                       = 0x0000,
+
+    CARD_ATI_RAGE_128PRO            = 0x5246,
+    CARD_ATI_RADEON_7200            = 0x5144,
+    CARD_ATI_RADEON_8500            = 0x514c,
+    CARD_ATI_RADEON_9500            = 0x4144,
+    CARD_ATI_RADEON_XPRESS_200M     = 0x5955,
+    CARD_ATI_RADEON_X700            = 0x5e4c,
+    CARD_ATI_RADEON_X1600           = 0x71c2,
+    CARD_ATI_RADEON_HD2350          = 0x94c7,
+    CARD_ATI_RADEON_HD2600          = 0x9581,
+    CARD_ATI_RADEON_HD2900          = 0x9400,
+    CARD_ATI_RADEON_HD3200          = 0x9620,
+    CARD_ATI_RADEON_HD4350          = 0x954f,
+    CARD_ATI_RADEON_HD4550          = 0x9540,
+    CARD_ATI_RADEON_HD4600          = 0x9495,
+    CARD_ATI_RADEON_HD4650          = 0x9498,
+    CARD_ATI_RADEON_HD4670          = 0x9490,
+    CARD_ATI_RADEON_HD4700          = 0x944e,
+    CARD_ATI_RADEON_HD4770          = 0x94b3,
+    CARD_ATI_RADEON_HD4800          = 0x944c, /* Picked one value between 9440, 944c, 9442, 9460 */
+    CARD_ATI_RADEON_HD4830          = 0x944c,
+    CARD_ATI_RADEON_HD4850          = 0x9442,
+    CARD_ATI_RADEON_HD4870          = 0x9440,
+    CARD_ATI_RADEON_HD4890          = 0x9460,
+    CARD_ATI_RADEON_HD5700          = 0x68BE, /* Picked HD5750 */
+    CARD_ATI_RADEON_HD5750          = 0x68BE,
+    CARD_ATI_RADEON_HD5770          = 0x68B8,
+    CARD_ATI_RADEON_HD5800          = 0x6898, /* Picked HD5850 */
+    CARD_ATI_RADEON_HD5850          = 0x6898,
+    CARD_ATI_RADEON_HD5870          = 0x6899,
+
+    CARD_NVIDIA_RIVA_128            = 0x0018,
+    CARD_NVIDIA_RIVA_TNT            = 0x0020,
+    CARD_NVIDIA_RIVA_TNT2           = 0x0028,
+    CARD_NVIDIA_GEFORCE             = 0x0100,
+    CARD_NVIDIA_GEFORCE2_MX         = 0x0110,
+    CARD_NVIDIA_GEFORCE2            = 0x0150,
+    CARD_NVIDIA_GEFORCE3            = 0x0200,
+    CARD_NVIDIA_GEFORCE4_MX         = 0x0170,
+    CARD_NVIDIA_GEFORCE4_TI4200     = 0x0253,
+    CARD_NVIDIA_GEFORCEFX_5200      = 0x0320,
+    CARD_NVIDIA_GEFORCEFX_5600      = 0x0312,
+    CARD_NVIDIA_GEFORCEFX_5800      = 0x0302,
+    CARD_NVIDIA_GEFORCE_6200        = 0x014f,
+    CARD_NVIDIA_GEFORCE_6600GT      = 0x0140,
+    CARD_NVIDIA_GEFORCE_6800        = 0x0041,
+    CARD_NVIDIA_GEFORCE_7400        = 0x01d8,
+    CARD_NVIDIA_GEFORCE_7300        = 0x01d7, /* GeForce Go 7300 */
+    CARD_NVIDIA_GEFORCE_7600        = 0x0391,
+    CARD_NVIDIA_GEFORCE_7800GT      = 0x0092,
+    CARD_NVIDIA_GEFORCE_8100        = 0x084F,
+    CARD_NVIDIA_GEFORCE_8200        = 0x0849, /* Other PCI ID 0x084B */
+    CARD_NVIDIA_GEFORCE_8300GS      = 0x0423,
+    CARD_NVIDIA_GEFORCE_8400GS      = 0x0404,
+    CARD_NVIDIA_GEFORCE_8500GT      = 0x0421,
+    CARD_NVIDIA_GEFORCE_8600GT      = 0x0402,
+    CARD_NVIDIA_GEFORCE_8600MGT     = 0x0407,
+    CARD_NVIDIA_GEFORCE_8800GTS     = 0x0193,
+    CARD_NVIDIA_GEFORCE_9200        = 0x086d,
+    CARD_NVIDIA_GEFORCE_9400GT      = 0x042c,
+    CARD_NVIDIA_GEFORCE_9500GT      = 0x0640,
+    CARD_NVIDIA_GEFORCE_9600GT      = 0x0622,
+    CARD_NVIDIA_GEFORCE_9800GT      = 0x0614,
+    CARD_NVIDIA_GEFORCE_GTX260      = 0x05e2,
+    CARD_NVIDIA_GEFORCE_GTX275      = 0x05e6,
+    CARD_NVIDIA_GEFORCE_GTX280      = 0x05e1,
+    CARD_NVIDIA_GEFORCE_GT240       = 0x0ca3,
+
+    CARD_INTEL_845G                 = 0x2562,
+    CARD_INTEL_I830G                = 0x3577,
+    CARD_INTEL_I855G                = 0x3582,
+    CARD_INTEL_I865G                = 0x2572,
+    CARD_INTEL_I915G                = 0x2582,
+    CARD_INTEL_I915GM               = 0x2592,
+    CARD_INTEL_I945GM               = 0x27a2, /* Same as GMA 950? */
+    CARD_INTEL_X3100                = 0x2a02, /* Found in Macs. Same as GMA 965? */
+    CARD_INTEL_SBHD                 = 0x0126, /* SundyBridge HD */
+};
+
+struct wined3d_fbo_ops
+{
+    PGLFNGLISRENDERBUFFERPROC                       glIsRenderbuffer;
+    PGLFNGLBINDRENDERBUFFERPROC                     glBindRenderbuffer;
+    PGLFNGLDELETERENDERBUFFERSPROC                  glDeleteRenderbuffers;
+    PGLFNGLGENRENDERBUFFERSPROC                     glGenRenderbuffers;
+    PGLFNGLRENDERBUFFERSTORAGEPROC                  glRenderbufferStorage;
+    PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC         glRenderbufferStorageMultisample;
+    PGLFNGLGETRENDERBUFFERPARAMETERIVPROC           glGetRenderbufferParameteriv;
+    PGLFNGLISFRAMEBUFFERPROC                        glIsFramebuffer;
+    PGLFNGLBINDFRAMEBUFFERPROC                      glBindFramebuffer;
+    PGLFNGLDELETEFRAMEBUFFERSPROC                   glDeleteFramebuffers;
+    PGLFNGLGENFRAMEBUFFERSPROC                      glGenFramebuffers;
+    PGLFNGLCHECKFRAMEBUFFERSTATUSPROC               glCheckFramebufferStatus;
+    PGLFNGLFRAMEBUFFERTEXTURE1DPROC                 glFramebufferTexture1D;
+    PGLFNGLFRAMEBUFFERTEXTURE2DPROC                 glFramebufferTexture2D;
+    PGLFNGLFRAMEBUFFERTEXTURE3DPROC                 glFramebufferTexture3D;
+    PGLFNGLFRAMEBUFFERRENDERBUFFERPROC              glFramebufferRenderbuffer;
+    PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC  glGetFramebufferAttachmentParameteriv;
+    PGLFNGLBLITFRAMEBUFFERPROC                      glBlitFramebuffer;
+    PGLFNGLGENERATEMIPMAPPROC                       glGenerateMipmap;
+};
+
+struct wined3d_gl_limits
+{
+    UINT buffers;
+    UINT lights;
+    UINT textures;
+    UINT texture_stages;
+    UINT fragment_samplers;
+    UINT vertex_samplers;
+    UINT combined_samplers;
+    UINT general_combiners;
+    UINT sampler_stages;
+    UINT clipplanes;
+    UINT texture_size;
+    UINT texture3d_size;
+    float pointsize_max;
+    float pointsize_min;
+    UINT point_sprite_units;
+    UINT blends;
+    UINT anisotropy;
+    float shininess;
+
+    UINT glsl_varyings;
+    UINT glsl_vs_float_constants;
+    UINT glsl_ps_float_constants;
+
+    UINT arb_vs_float_constants;
+    UINT arb_vs_native_constants;
+    UINT arb_vs_instructions;
+    UINT arb_vs_temps;
+    UINT arb_ps_float_constants;
+    UINT arb_ps_local_constants;
+    UINT arb_ps_native_constants;
+    UINT arb_ps_instructions;
+    UINT arb_ps_temps;
+};
+
+struct wined3d_gl_info
+{
+    DWORD glsl_version;
+    UINT vidmem;
+    struct wined3d_gl_limits limits;
+    DWORD reserved_glsl_constants;
+    DWORD quirks;
+    BOOL supported[WINED3D_GL_EXT_COUNT];
+    GLint wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP + 1];
+
+    struct wined3d_fbo_ops fbo_ops;
+#define USE_GL_FUNC(type, pfn, ext, replace) type pfn;
+    /* GL function pointers */
+    GL_EXT_FUNCS_GEN
+    /* WGL function pointers */
+    WGL_EXT_FUNCS_GEN
+#undef USE_GL_FUNC
+
+    struct wined3d_format_desc *gl_formats;
+};
+
+struct wined3d_driver_info
+{
+    enum wined3d_pci_vendor vendor;
+    enum wined3d_pci_device device;
+    const char *name;
+    const char *description;
+    DWORD version_high;
+    DWORD version_low;
+};
+
+/* The adapter structure */
+struct wined3d_adapter
+{
+    UINT ordinal;
+    BOOL                    opengl;
+    POINT                   monitorPoint;
+    struct wined3d_gl_info  gl_info;
+    struct wined3d_driver_info driver_info;
+    WCHAR                   DeviceName[CCHDEVICENAME]; /* DeviceName for use with e.g. ChangeDisplaySettings */
+    int                     nCfgs;
+    WineD3D_PixelFormat     *cfgs;
+    BOOL                    brokenStencil; /* Set on cards which only offer mixed depth+stencil */
+#ifndef VBOX_WITH_WDDM
+    unsigned int            TextureRam; /* Amount of texture memory both video ram + AGP/TurboCache/HyperMemory/.. */
+    unsigned int            UsedTextureRam;
+#endif
+    LUID luid;
+
+    const struct fragment_pipeline *fragment_pipe;
+    const shader_backend_t *shader_backend;
+    const struct blit_shader *blitter;
+};
+
+BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) DECLSPEC_HIDDEN;
+BOOL initPixelFormatsNoGL(struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+#ifndef VBOX_WITH_WDDM
+extern long WineD3DAdapterChangeGLRam(IWineD3DDeviceImpl *D3DDevice, long glram) DECLSPEC_HIDDEN;
+#endif
+extern void add_gl_compat_wrappers(struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * High order patch management
+ */
+struct WineD3DRectPatch
+{
+    UINT                            Handle;
+    float                          *mem;
+    WineDirect3DVertexStridedData   strided;
+    WINED3DRECTPATCH_INFO           RectPatchInfo;
+    float                           numSegs[4];
+    char                            has_normals, has_texcoords;
+    struct list                     entry;
+};
+
+HRESULT tesselate_rectpatch(IWineD3DDeviceImpl *This, struct WineD3DRectPatch *patch) DECLSPEC_HIDDEN;
+
+enum projection_types
+{
+    proj_none    = 0,
+    proj_count3  = 1,
+    proj_count4  = 2
+};
+
+enum dst_arg
+{
+    resultreg    = 0,
+    tempreg      = 1
+};
+
+/*****************************************************************************
+ * Fixed function pipeline replacements
+ */
+#define ARG_UNUSED          0xff
+
+struct texture_stage_op
+{
+    unsigned                cop : 8;
+    unsigned                carg1 : 8;
+    unsigned                carg2 : 8;
+    unsigned                carg0 : 8;
+
+    unsigned                aop : 8;
+    unsigned                aarg1 : 8;
+    unsigned                aarg2 : 8;
+    unsigned                aarg0 : 8;
+
+    struct color_fixup_desc color_fixup;
+    unsigned                tex_type : 3;
+    unsigned                dst : 1;
+    unsigned                projected : 2;
+    unsigned                padding : 10;
+};
+
+struct ffp_frag_settings {
+    struct texture_stage_op     op[MAX_TEXTURES];
+    enum fogmode fog;
+    /* Use shorts instead of chars to get dword alignment */
+    unsigned short sRGB_write;
+    unsigned short emul_clipplanes;
+};
+
+struct ffp_frag_desc
+{
+    struct wine_rb_entry entry;
+    struct ffp_frag_settings    settings;
+};
+
+extern const struct wine_rb_functions wined3d_ffp_frag_program_rb_functions DECLSPEC_HIDDEN;
+extern const struct wined3d_parent_ops wined3d_null_parent_ops DECLSPEC_HIDDEN;
+
+void gen_ffp_frag_op(IWineD3DStateBlockImpl *stateblock, struct ffp_frag_settings *settings,
+        BOOL ignore_textype) DECLSPEC_HIDDEN;
+const struct ffp_frag_desc *find_ffp_frag_shader(const struct wine_rb_tree *fragment_shaders,
+        const struct ffp_frag_settings *settings) DECLSPEC_HIDDEN;
+void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *desc) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3D implementation structure
+ */
+typedef struct IWineD3DImpl
+{
+    /* IUnknown fields */
+    const IWineD3DVtbl     *lpVtbl;
+    LONG                    ref;     /* Note: Ref counting not required */
+
+    /* WineD3D Information */
+    IUnknown               *parent;
+    UINT                    dxVersion;
+
+    UINT adapter_count;
+    struct wined3d_adapter adapters[1];
+} IWineD3DImpl;
+
+HRESULT wined3d_init(IWineD3DImpl *wined3d, UINT version, IUnknown *parent) DECLSPEC_HIDDEN;
+#ifndef VBOX_WITH_WDDM
+BOOL wined3d_register_window(HWND window, struct IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+void wined3d_unregister_window(HWND window, struct IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDevice implementation structure
+ */
+#define WINED3D_UNMAPPED_STAGE ~0U
+
+/* Multithreaded flag. Removed from the public header to signal that IWineD3D::CreateDevice ignores it */
+#define WINED3DCREATE_MULTITHREADED 0x00000004
+
+#ifdef VBOX_WINE_WITH_PROFILE
+
+#include <iprt/time.h>
+
+#define VBOXWINEPROFILE_GET_TIME_NANO() RTTimeNanoTS()
+#define VBOXWINEPROFILE_GET_TIME_MILLI() RTTimeMilliTS()
+
+# define PRLOG(_m) do {\
+        vboxWDbgPrintF _m ; \
+    } while (0)
+
+typedef struct VBOXWINEPROFILE_ELEMENT
+{
+    uint64_t u64Time;
+    uint32_t cu32Calls;
+} VBOXWINEPROFILE_ELEMENT, *PVBOXWINEPROFILE_ELEMENT;
+
+typedef struct VBOXWINEPROFILE_HASHMAP_ELEMENT
+{
+    VBOXEXT_HASHMAP_ENTRY MapEntry;
+    VBOXWINEPROFILE_ELEMENT Data;
+} VBOXWINEPROFILE_HASHMAP_ELEMENT, *PVBOXWINEPROFILE_HASHMAP_ELEMENT;
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(_p) ((PVBOXWINEPROFILE_HASHMAP_ELEMENT)(((uint8_t*)(_p)) - RT_OFFSETOF(VBOXWINEPROFILE_HASHMAP_ELEMENT, MapEntry)))
+
+#define VBOXWINEPROFILE_ELEMENT_DUMP(_p, _pn) do { \
+        PRLOG(("%s: t(%u);c(%u)\n", \
+            (_pn), \
+            (uint32_t)((_p)->u64Time / 1000000), \
+            (_p)->cu32Calls \
+            )); \
+    } while (0)
+
+#define VBOXWINEPROFILE_ELEMENT_RESET(_p) do { \
+        memset(_p, 0, sizeof (*(_p))); \
+    } while (0)
+
+#define VBOXWINEPROFILE_ELEMENT_STEP(_p, _t) do { \
+        (_p)->u64Time += (_t); \
+        ++(_p)->cu32Calls; \
+    } while (0)
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_CREATE()  ( (PVBOXWINEPROFILE_HASHMAP_ELEMENT)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof (VBOXWINEPROFILE_HASHMAP_ELEMENT)) )
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_TERM(_pe) do { \
+        HeapFree(GetProcessHeap(), 0, (_pe)); \
+    } while (0)
+
+DECLINLINE(PVBOXWINEPROFILE_HASHMAP_ELEMENT) vboxWineProfileHashMapElementGet(PVBOXEXT_HASHMAP pMap, void *pvKey)
+{
+    PVBOXEXT_HASHMAP_ENTRY pEntry = VBoxExtHashGet(pMap, pvKey);
+    if (pEntry)
+    {
+        return VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pEntry);
+    }
+    else
+    {
+        PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_CREATE();
+        Assert(pElement);
+        if (pElement)
+            VBoxExtHashPut(pMap, pvKey, &pElement->MapEntry);
+        return pElement;
+    }
+}
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_STEP(_pm, _pk, _t) do { \
+        PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = vboxWineProfileHashMapElementGet(_pm, _pk); \
+        VBOXWINEPROFILE_ELEMENT_STEP(&pElement->Data, _t); \
+    } while (0)
+
+static DECLCALLBACK(bool) vboxWineProfileElementResetCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
+{
+    PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pValue);
+    VBOXWINEPROFILE_ELEMENT_RESET(&pElement->Data);
+    return true;
+}
+
+static DECLCALLBACK(bool) vboxWineProfileElementDumpCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
+{
+    PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pValue);
+    char *pName = (char*)pvVisitor;
+    PRLOG(("%s[%d]:", pName, (uint32_t)pvKey));
+    VBOXWINEPROFILE_ELEMENT_DUMP(&pElement->Data, "");
+    return true;
+}
+
+#define VBOXWINEPROFILE_HASHMAP_RESET(_pm) do { \
+        VBoxExtHashVisit((_pm), vboxWineProfileElementResetCb, NULL); \
+    } while (0)
+
+#define VBOXWINEPROFILE_HASHMAP_DUMP(_pm, _pn) do { \
+        VBoxExtHashVisit((_pm), vboxWineProfileElementDumpCb, (_pn)); \
+    } while (0)
+
+static DECLCALLBACK(bool) vboxWineProfileElementCleanupCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
+{
+    PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pValue);
+    VBOXWINEPROFILE_HASHMAP_ELEMENT_TERM(pElement);
+    return true;
+}
+
+#define VBOXWINEPROFILE_HASHMAP_TERM(_pm) do { \
+        VBoxExtHashCleanup((_pm), vboxWineProfileElementCleanupCb, NULL); \
+        VBoxExtHashVisit((_pm), vboxWineProfileElementResetCb, NULL); \
+    } while (0)
+
+typedef struct VBOXWINEPROFILE_DRAWPRIM
+{
+    uint64_t u64LoadLocationTime;
+    uint64_t u64CtxAcquireTime;
+    uint64_t u64PostProcess;
+    VBOXEXT_HASHMAP MapDrawPrimSlowVs;
+    VBOXEXT_HASHMAP MapDrawPrimSlow;
+    VBOXEXT_HASHMAP MapDrawPrimStrided;
+    VBOXEXT_HASHMAP MapDrawPrimFast;
+    uint32_t cu32Calls;
+} VBOXWINEPROFILE_DRAWPRIM, *PVBOXWINEPROFILE_DRAWPRIM;
+
+#define VBOXWINEPROFILE_DRAWPRIM_RESET_NEXT(_p) do { \
+        (_p)->u64LoadLocationTime = 0; \
+        (_p)->u64CtxAcquireTime = 0; \
+        (_p)->u64PostProcess = 0; \
+        VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimSlowVs); \
+        VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimSlow); \
+        VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimStrided); \
+        VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimFast); \
+    } while (0)
+
+static DECLCALLBACK(uint32_t) vboxWineProfileDrawPrimHashMapHash(void *pvKey)
+{
+    return (uint32_t)pvKey;
+}
+
+static DECLCALLBACK(bool) vboxWineProfileDrawPrimHashMapEqual(void *pvKey1, void *pvKey2)
+{
+    return ((uint32_t)pvKey1) == ((uint32_t)pvKey2);
+}
+
+#define VBOXWINEPROFILE_DRAWPRIM_INIT(_p) do { \
+        memset((_p), 0, sizeof (*(_p))); \
+        VBoxExtHashInit(&(_p)->MapDrawPrimSlowVs, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+        VBoxExtHashInit(&(_p)->MapDrawPrimSlow, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+        VBoxExtHashInit(&(_p)->MapDrawPrimStrided, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+        VBoxExtHashInit(&(_p)->MapDrawPrimFast, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+    } while (0)
+
+#define VBOXWINEPROFILE_DRAWPRIM_TERM(_p) do { \
+        memset((_p), 0, sizeof (*(_p))); \
+        VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimSlowVs); \
+        VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimSlow); \
+        VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimStrided); \
+        VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimFast); \
+    } while (0)
+#else
+# define PRLOG(_m) do {} while (0)
+#endif
+struct IWineD3DDeviceImpl
+{
+    /* IUnknown fields      */
+    const IWineD3DDeviceVtbl *lpVtbl;
+    LONG                    ref;     /* Note: Ref counting not required */
+
+    /* WineD3D Information  */
+    IUnknown               *parent;
+    IWineD3DDeviceParent   *device_parent;
+    IWineD3D *wined3d;
+    struct wined3d_adapter *adapter;
+
+    /* Window styles to restore when switching fullscreen mode */
+    LONG                    style;
+    LONG                    exStyle;
+
+    /* X and GL Information */
+    GLint                   maxConcurrentLights;
+    GLenum                  offscreenBuffer;
+
+    /* Selected capabilities */
+    int vs_selected_mode;
+    int ps_selected_mode;
+    const shader_backend_t *shader_backend;
+    void *shader_priv;
+    void *fragment_priv;
+    void *blit_priv;
+    struct StateEntry StateTable[STATE_HIGHEST + 1];
+    /* Array of functions for states which are handled by more than one pipeline part */
+    APPLYSTATEFUNC *multistate_funcs[STATE_HIGHEST + 1];
+    const struct fragment_pipeline *frag_pipe;
+    const struct blit_shader *blitter;
+
+    unsigned int max_ffp_textures;
+    DWORD d3d_vshader_constantF, d3d_pshader_constantF; /* Advertised d3d caps, not GL ones */
+    DWORD vs_clipping;
+
+    WORD view_ident : 1;                /* true iff view matrix is identity */
+    WORD untransformed : 1;
+    WORD vertexBlendUsed : 1;           /* To avoid needless setting of the blend matrices */
+    WORD isRecordingState : 1;
+    WORD isInDraw : 1;
+    WORD bCursorVisible : 1;
+    WORD haveHardwareCursor : 1;
+    WORD d3d_initialized : 1;
+    WORD inScene : 1;                   /* A flag to check for proper BeginScene / EndScene call pairs */
+    WORD softwareVertexProcessing : 1;  /* process vertex shaders using software or hardware */
+    WORD useDrawStridedSlow : 1;
+    WORD instancedDraw : 1;
+    WORD filter_messages : 1;
+    WORD padding : 3;
+
+    BYTE fixed_function_usage_map;      /* MAX_TEXTURES, 8 */
+
+#define DDRAW_PITCH_ALIGNMENT 8
+#define D3D8_PITCH_ALIGNMENT 4
+    unsigned char           surface_alignment; /* Line Alignment of surfaces                      */
+
+    /* State block related */
+    IWineD3DStateBlockImpl *stateBlock;
+    IWineD3DStateBlockImpl *updateStateBlock;
+
+    /* Internal use fields  */
+    WINED3DDEVICE_CREATION_PARAMETERS createParms;
+    WINED3DDEVTYPE                  devType;
+#ifndef VBOX_WITH_WDDM
+    HWND focus_window;
+#endif
+
+    IWineD3DSwapChain     **swapchains;
+    UINT                    NumberOfSwapChains;
+
+    struct list             resources; /* a linked list to track resources created by the device */
+    struct list             shaders;   /* a linked list to track shaders (pixel and vertex)      */
+    unsigned int            highest_dirty_ps_const, highest_dirty_vs_const;
+
+    /* Render Target Support */
+    IWineD3DSurface       **render_targets;
+    IWineD3DSurface        *auto_depth_stencil_buffer;
+    IWineD3DSurface        *stencilBufferTarget;
+
+    /* palettes texture management */
+    UINT                    NumberOfPalettes;
+    PALETTEENTRY            **palettes;
+    UINT                    currentPalette;
+
+    /* For rendering to a texture using glCopyTexImage */
+    GLenum                  *draw_buffers;
+    GLuint                  depth_blt_texture;
+    GLuint                  depth_blt_rb;
+    UINT                    depth_blt_rb_w;
+    UINT                    depth_blt_rb_h;
+
+    /* Cursor management */
+    UINT                    xHotSpot;
+    UINT                    yHotSpot;
+    UINT                    xScreenSpace;
+    UINT                    yScreenSpace;
+    UINT                    cursorWidth, cursorHeight;
+    GLuint                  cursorTexture;
+    HCURSOR                 hardwareCursor;
+
+    /* The Wine logo surface */
+    IWineD3DSurface        *logo_surface;
+
+    /* Textures for when no other textures are mapped */
+    UINT                          dummyTextureName[MAX_TEXTURES];
+
+    /* DirectDraw stuff */
+    DWORD ddraw_width, ddraw_height;
+    WINED3DFORMAT ddraw_format;
+
+    /* Final position fixup constant */
+    float                       posFixup[4];
+#ifdef VBOX_WITH_VMSVGA
+    UINT                        rtHeight;
+#endif
+
+    /* With register combiners we can skip junk texture stages */
+    DWORD                     texUnitMap[MAX_COMBINED_SAMPLERS];
+    DWORD                     rev_tex_unit_map[MAX_COMBINED_SAMPLERS];
+
+    /* Stream source management */
+    struct wined3d_stream_info strided_streams;
+    const WineDirect3DVertexStridedData *up_strided;
+    struct wined3d_event_query *buffer_queries[MAX_ATTRIBS];
+    unsigned int num_buffer_queries;
+
+    /* Context management */
+    struct wined3d_context **contexts;
+    UINT                    numContexts;
+
+#ifdef VBOX_WITH_WDDM
+    struct VBOXUHGSMI *pHgsmi;
+#endif
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+    VBOXEXT_HASHCACHE vshaderCache;
+    VBOXEXT_HASHCACHE pshaderCache;
+#endif
+
+#ifdef VBOX_WINE_WITH_PROFILE
+    VBOXWINEPROFILE_DRAWPRIM DrawPrimProfile;
+#endif
+
+    /* High level patch management */
+#define PATCHMAP_SIZE 43
+#define PATCHMAP_HASHFUNC(x) ((x) % PATCHMAP_SIZE) /* Primitive and simple function */
+    struct list             patches[PATCHMAP_SIZE];
+    struct WineD3DRectPatch *currentPatch;
+};
+
+BOOL device_context_add(IWineD3DDeviceImpl *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
+void device_context_remove(IWineD3DDeviceImpl *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
+HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
+        UINT adapter_idx, WINED3DDEVTYPE device_type, HWND focus_window, DWORD flags,
+        IUnknown *parent, IWineD3DDeviceParent *device_parent) DECLSPEC_HIDDEN;
+void device_preload_textures(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+#ifndef VBOX_WITH_WDDM
+LRESULT device_process_message(IWineD3DDeviceImpl *device, HWND window,
+        UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN;
+#else
+void device_cleanup_durtify_texture_target(IWineD3DDeviceImpl *This, GLuint texture_target);
+#endif
+void device_resource_add(IWineD3DDeviceImpl *This, IWineD3DResource *resource) DECLSPEC_HIDDEN;
+void device_resource_released(IWineD3DDeviceImpl *This, IWineD3DResource *resource) DECLSPEC_HIDDEN;
+void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
+        BOOL use_vshader, struct wined3d_stream_info *stream_info, BOOL *fixup) DECLSPEC_HIDDEN;
+void device_update_stream_info(IWineD3DDeviceImpl *device, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *target, DWORD Count,
+        const WINED3DRECT *pRects, DWORD Flags, WINED3DCOLOR Color, float Z, DWORD Stencil) DECLSPEC_HIDDEN;
+void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) DECLSPEC_HIDDEN;
+void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state) DECLSPEC_HIDDEN;
+
+static inline BOOL isStateDirty(struct wined3d_context *context, DWORD state)
+{
+    DWORD idx = state / (sizeof(*context->isStateDirty) * CHAR_BIT);
+    BYTE shift = state & ((sizeof(*context->isStateDirty) * CHAR_BIT) - 1);
+    return context->isStateDirty[idx] & (1 << shift);
+}
+
+/* Support for IWineD3DResource ::Set/Get/FreePrivateData. */
+typedef struct PrivateData
+{
+    struct list entry;
+
+    GUID tag;
+    DWORD flags; /* DDSPD_* */
+
+    union
+    {
+        LPVOID data;
+        LPUNKNOWN object;
+    } ptr;
+
+    DWORD size;
+} PrivateData;
+
+/*****************************************************************************
+ * IWineD3DResource implementation structure
+ */
+typedef struct IWineD3DResourceClass
+{
+    /* IUnknown fields */
+    LONG                    ref;     /* Note: Ref counting not required */
+
+    /* WineD3DResource Information */
+    IUnknown               *parent;
+    WINED3DRESOURCETYPE     resourceType;
+    IWineD3DDeviceImpl *device;
+    WINED3DPOOL             pool;
+    UINT                    size;
+    DWORD                   usage;
+    const struct wined3d_format_desc *format_desc;
+    DWORD                   priority;
+    BYTE                   *allocatedMemory; /* Pointer to the real data location */
+    BYTE                   *heapMemory; /* Pointer to the HeapAlloced block of memory */
+#ifdef VBOX_WITH_WDDM
+    DWORD                   sharerc_flags; /* shared resource flags */
+    DWORD                   sharerc_handle; /* shared resource handle */
+    DWORD                   sharerc_locks; /* lock count */
+#endif
+    struct list             privateData;
+    struct list             resource_list_entry;
+    const struct wined3d_parent_ops *parent_ops;
+} IWineD3DResourceClass;
+
+typedef struct IWineD3DResourceImpl
+{
+    /* IUnknown & WineD3DResource Information     */
+    const IWineD3DResourceVtbl *lpVtbl;
+    IWineD3DResourceClass   resource;
+} IWineD3DResourceImpl;
+
+void resource_cleanup(IWineD3DResource *iface) DECLSPEC_HIDDEN;
+HRESULT resource_free_private_data(IWineD3DResource *iface, REFGUID guid) DECLSPEC_HIDDEN;
+HRESULT resource_get_parent(IWineD3DResource *iface, IUnknown **parent) DECLSPEC_HIDDEN;
+DWORD resource_get_priority(IWineD3DResource *iface) DECLSPEC_HIDDEN;
+HRESULT resource_get_private_data(IWineD3DResource *iface, REFGUID guid,
+        void *data, DWORD *data_size) DECLSPEC_HIDDEN;
+HRESULT resource_init(IWineD3DResource *iface, WINED3DRESOURCETYPE resource_type,
+        IWineD3DDeviceImpl *device, UINT size, DWORD usage, const struct wined3d_format_desc *format_desc,
+        WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+WINED3DRESOURCETYPE resource_get_type(IWineD3DResource *iface) DECLSPEC_HIDDEN;
+DWORD resource_set_priority(IWineD3DResource *iface, DWORD new_priority) DECLSPEC_HIDDEN;
+HRESULT resource_set_private_data(IWineD3DResource *iface, REFGUID guid,
+        const void *data, DWORD data_size, DWORD flags) DECLSPEC_HIDDEN;
+
+#ifdef VBOX_WITH_WDDM
+HRESULT WINAPI IWineD3DResourceImpl_SetShRcState(IWineD3DResource *iface, VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+/* Tests show that the start address of resources is 32 byte aligned */
+#define RESOURCE_ALIGNMENT 16
+
+/*****************************************************************************
+ * IWineD3DBaseTexture D3D- > openGL state map lookups
+ */
+
+typedef enum winetexturestates {
+    WINED3DTEXSTA_ADDRESSU       = 0,
+    WINED3DTEXSTA_ADDRESSV       = 1,
+    WINED3DTEXSTA_ADDRESSW       = 2,
+    WINED3DTEXSTA_BORDERCOLOR    = 3,
+    WINED3DTEXSTA_MAGFILTER      = 4,
+    WINED3DTEXSTA_MINFILTER      = 5,
+    WINED3DTEXSTA_MIPFILTER      = 6,
+    WINED3DTEXSTA_MAXMIPLEVEL    = 7,
+    WINED3DTEXSTA_MAXANISOTROPY  = 8,
+    WINED3DTEXSTA_SRGBTEXTURE    = 9,
+    WINED3DTEXSTA_ELEMENTINDEX   = 10,
+    WINED3DTEXSTA_DMAPOFFSET     = 11,
+    WINED3DTEXSTA_TSSADDRESSW    = 12,
+    MAX_WINETEXTURESTATES        = 13,
+} winetexturestates;
+
+enum WINED3DSRGB
+{
+    SRGB_ANY                                = 0,    /* Uses the cached value(e.g. external calls) */
+    SRGB_RGB                                = 1,    /* Loads the rgb texture */
+    SRGB_SRGB                               = 2,    /* Loads the srgb texture */
+    SRGB_BOTH                               = 3,    /* Loads both textures */
+};
+
+struct gl_texture
+{
+    DWORD                   states[MAX_WINETEXTURESTATES];
+    BOOL                    dirty;
+    GLuint                  name;
+};
+
+/*****************************************************************************
+ * IWineD3DBaseTexture implementation structure (extends IWineD3DResourceImpl)
+ */
+typedef struct IWineD3DBaseTextureClass
+{
+    struct gl_texture       texture_rgb, texture_srgb;
+    UINT                    levels;
+    float                   pow2Matrix[16];
+    UINT                    LOD;
+    WINED3DTEXTUREFILTERTYPE filterType;
+    LONG                    bindCount;
+    DWORD                   sampler;
+    BOOL                    is_srgb;
+    BOOL                    pow2Matrix_identity;
+    BOOL                    t_mirror;
+    const struct min_lookup *minMipLookup;
+    const GLenum            *magLookup;
+    void                    (*internal_preload)(IWineD3DBaseTexture *iface, enum WINED3DSRGB srgb);
+} IWineD3DBaseTextureClass;
+
+void surface_internal_preload(IWineD3DSurface *iface, enum WINED3DSRGB srgb) DECLSPEC_HIDDEN;
+BOOL surface_init_sysmem(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+BOOL surface_is_offscreen(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+void surface_prepare_texture(IWineD3DSurfaceImpl *surface,
+        const struct wined3d_gl_info *gl_info, BOOL srgb) DECLSPEC_HIDDEN;
+#ifdef VBOX_WITH_WDDM
+void surface_setup_location_onopen(IWineD3DSurfaceImpl *This) DECLSPEC_HIDDEN;
+#endif
+
+typedef struct IWineD3DBaseTextureImpl
+{
+    /* IUnknown & WineD3DResource Information     */
+    const IWineD3DBaseTextureVtbl *lpVtbl;
+    IWineD3DResourceClass     resource;
+    IWineD3DBaseTextureClass  baseTexture;
+
+} IWineD3DBaseTextureImpl;
+
+void basetexture_apply_state_changes(IWineD3DBaseTexture *iface,
+        const DWORD textureStates[WINED3D_HIGHEST_TEXTURE_STATE + 1],
+        const DWORD samplerStates[WINED3D_HIGHEST_SAMPLER_STATE + 1],
+        const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+void basetexture_state_init(IWineD3DBaseTexture *iface, struct gl_texture *gl_tex);
+HRESULT basetexture_bind(IWineD3DBaseTexture *iface, BOOL srgb, BOOL *set_surface_desc) DECLSPEC_HIDDEN;
+void basetexture_cleanup(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+void basetexture_generate_mipmaps(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+WINED3DTEXTUREFILTERTYPE basetexture_get_autogen_filter_type(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+BOOL basetexture_get_dirty(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+DWORD basetexture_get_level_count(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+DWORD basetexture_get_lod(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT levels, WINED3DRESOURCETYPE resource_type,
+        IWineD3DDeviceImpl *device, UINT size, DWORD usage, const struct wined3d_format_desc *format_desc,
+        WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTexture *iface,
+        WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;
+BOOL basetexture_set_dirty(IWineD3DBaseTexture *iface, BOOL dirty) DECLSPEC_HIDDEN;
+DWORD basetexture_set_lod(IWineD3DBaseTexture *iface, DWORD new_lod) DECLSPEC_HIDDEN;
+void basetexture_unload(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+
+#ifdef VBOX_WITH_WDDM
+#define texture_gl_delete(_o, _t) do { \
+        if (VBOXSHRC_IS_SHARED(_o)) GL_EXTCALL(glChromiumParameteriCR(GL_RCUSAGE_TEXTURE_CLEAR_CR, _t)); \
+        else glDeleteTextures(1, &_t);  \
+    } while (0)
+#else
+#define texture_gl_delete(_o, _t) do { \
+        glDeleteTextures(1, &_t);  \
+    } while (0)
+
+#endif
+/*****************************************************************************
+ * IWineD3DTexture implementation structure (extends IWineD3DBaseTextureImpl)
+ */
+typedef struct IWineD3DTextureImpl
+{
+    /* IUnknown & WineD3DResource/WineD3DBaseTexture Information     */
+    const IWineD3DTextureVtbl *lpVtbl;
+    IWineD3DResourceClass     resource;
+    IWineD3DBaseTextureClass  baseTexture;
+
+    /* IWineD3DTexture */
+    IWineD3DSurface          *surfaces[MAX_MIP_LEVELS];
+    UINT                      target;
+    BOOL                      cond_np2;
+
+} IWineD3DTextureImpl;
+
+void texture_state_init(IWineD3DTexture *iface, struct gl_texture *gl_tex);
+HRESULT texture_init(IWineD3DTextureImpl *texture, UINT width, UINT height, UINT levels,
+        IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DCubeTexture implementation structure (extends IWineD3DBaseTextureImpl)
+ */
+typedef struct IWineD3DCubeTextureImpl
+{
+    /* IUnknown & WineD3DResource/WineD3DBaseTexture Information     */
+    const IWineD3DCubeTextureVtbl *lpVtbl;
+    IWineD3DResourceClass     resource;
+    IWineD3DBaseTextureClass  baseTexture;
+
+    /* IWineD3DCubeTexture */
+    IWineD3DSurface          *surfaces[6][MAX_MIP_LEVELS];
+} IWineD3DCubeTextureImpl;
+
+HRESULT cubetexture_init(IWineD3DCubeTextureImpl *texture, UINT edge_length, UINT levels,
+        IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+
+typedef struct _WINED3DVOLUMET_DESC
+{
+    UINT                    Width;
+    UINT                    Height;
+    UINT                    Depth;
+} WINED3DVOLUMET_DESC;
+
+/*****************************************************************************
+ * IWineD3DVolume implementation structure (extends IUnknown)
+ */
+typedef struct IWineD3DVolumeImpl
+{
+    /* IUnknown & WineD3DResource fields */
+    const IWineD3DVolumeVtbl  *lpVtbl;
+    IWineD3DResourceClass      resource;
+
+    /* WineD3DVolume Information */
+    WINED3DVOLUMET_DESC      currentDesc;
+    IWineD3DBase            *container;
+    BOOL                    lockable;
+    BOOL                    locked;
+    WINED3DBOX              lockedBox;
+    WINED3DBOX              dirtyBox;
+    BOOL                    dirty;
+} IWineD3DVolumeImpl;
+
+void volume_add_dirty_box(IWineD3DVolume *iface, const WINED3DBOX *dirty_box) DECLSPEC_HIDDEN;
+HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT width,
+        UINT height, UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture implementation structure (extends IWineD3DBaseTextureImpl)
+ */
+typedef struct IWineD3DVolumeTextureImpl
+{
+    /* IUnknown & WineD3DResource/WineD3DBaseTexture Information     */
+    const IWineD3DVolumeTextureVtbl *lpVtbl;
+    IWineD3DResourceClass     resource;
+    IWineD3DBaseTextureClass  baseTexture;
+
+    /* IWineD3DVolumeTexture */
+    IWineD3DVolume           *volumes[MAX_MIP_LEVELS];
+} IWineD3DVolumeTextureImpl;
+
+HRESULT volumetexture_init(IWineD3DVolumeTextureImpl *texture, UINT width, UINT height,
+        UINT depth, UINT levels, IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format,
+        WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void **pavClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+
+typedef struct _WINED3DSURFACET_DESC
+{
+    WINED3DMULTISAMPLE_TYPE MultiSampleType;
+    DWORD                   MultiSampleQuality;
+    UINT                    Width;
+    UINT                    Height;
+} WINED3DSURFACET_DESC;
+
+/*****************************************************************************
+ * Structure for DIB Surfaces (GetDC and GDI surfaces)
+ */
+typedef struct wineD3DSurface_DIB {
+    HBITMAP DIBsection;
+    void* bitmap_data;
+    UINT bitmap_size;
+    HGDIOBJ holdbitmap;
+    BOOL client_memory;
+} wineD3DSurface_DIB;
+
+typedef struct {
+    struct list entry;
+    GLuint id;
+    UINT width;
+    UINT height;
+} renderbuffer_entry_t;
+
+struct fbo_entry
+{
+    struct list entry;
+    IWineD3DSurfaceImpl **render_targets;
+    IWineD3DSurfaceImpl *depth_stencil;
+    BOOL attached;
+    GLuint id;
+};
+
+/*****************************************************************************
+ * IWineD3DClipp implementation structure
+ */
+typedef struct IWineD3DClipperImpl
+{
+    const IWineD3DClipperVtbl *lpVtbl;
+    LONG ref;
+
+    IUnknown *Parent;
+    HWND hWnd;
+} IWineD3DClipperImpl;
+
+
+/*****************************************************************************
+ * IWineD3DSurface implementation structure
+ */
+struct IWineD3DSurfaceImpl
+{
+    /* IUnknown & IWineD3DResource Information     */
+    const IWineD3DSurfaceVtbl *lpVtbl;
+    IWineD3DResourceClass     resource;
+
+    /* IWineD3DSurface fields */
+    IWineD3DBase              *container;
+    WINED3DSURFACET_DESC      currentDesc;
+    IWineD3DPaletteImpl       *palette; /* D3D7 style palette handling */
+    PALETTEENTRY              *palette9; /* D3D8/9 style palette handling */
+
+    /* TODO: move this off into a management class(maybe!) */
+    DWORD                      Flags;
+
+    UINT                      pow2Width;
+    UINT                      pow2Height;
+
+    /* A method to retrieve the drawable size. Not in the Vtable to make it changeable */
+    void (*get_drawable_size)(struct wined3d_context *context, UINT *width, UINT *height);
+
+    /* PBO */
+    GLuint                    pbo;
+    GLuint texture_name;
+    GLuint texture_name_srgb;
+    GLint texture_level;
+    GLenum texture_target;
+
+    RECT                      lockedRect;
+    RECT                      dirtyRect;
+    int                       lockCount;
+#define MAXLOCKCOUNT          50 /* After this amount of locks do not free the sysmem copy */
+
+    /* For GetDC */
+    wineD3DSurface_DIB        dib;
+    HDC                       hDC;
+
+    /* Color keys for DDraw */
+    WINEDDCOLORKEY            DestBltCKey;
+    WINEDDCOLORKEY            DestOverlayCKey;
+    WINEDDCOLORKEY            SrcOverlayCKey;
+    WINEDDCOLORKEY            SrcBltCKey;
+    DWORD                     CKeyFlags;
+
+    WINEDDCOLORKEY            glCKey;
+
+    struct list               renderbuffers;
+    renderbuffer_entry_t      *current_renderbuffer;
+
+    /* DirectDraw clippers */
+    IWineD3DClipper           *clipper;
+
+    /* DirectDraw Overlay handling */
+    RECT                      overlay_srcrect;
+    RECT                      overlay_destrect;
+    IWineD3DSurfaceImpl       *overlay_dest;
+    struct list               overlays;
+    struct list               overlay_entry;
+
+#ifdef VBOX_WITH_WDDM
+    struct IWineD3DSwapChain  *presentSwapchain;
+#endif
+};
+
+extern const IWineD3DSurfaceVtbl IWineD3DSurface_Vtbl DECLSPEC_HIDDEN;
+extern const IWineD3DSurfaceVtbl IWineGDISurface_Vtbl DECLSPEC_HIDDEN;
+
+UINT surface_calculate_size(const struct wined3d_format_desc *format_desc,
+        UINT alignment, UINT width, UINT height) DECLSPEC_HIDDEN;
+void surface_gdi_cleanup(IWineD3DSurfaceImpl *This) DECLSPEC_HIDDEN;
+HRESULT surface_init(IWineD3DSurfaceImpl *surface, WINED3DSURFTYPE surface_type, UINT alignment,
+        UINT width, UINT height, UINT level, BOOL lockable, BOOL discard, WINED3DMULTISAMPLE_TYPE multisample_type,
+        UINT multisample_quality, IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format,
+        WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+        , HANDLE *shared_handle
+        , void *pvClientMem
+#endif
+        ) DECLSPEC_HIDDEN;
+
+/* Predeclare the shared Surface functions */
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_QueryInterface(IWineD3DSurface *iface,
+        REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN;
+ULONG WINAPI IWineD3DBaseSurfaceImpl_AddRef(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetParent(IWineD3DSurface *iface, IUnknown **pParent) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetPrivateData(IWineD3DSurface *iface,
+        REFGUID refguid, const void *pData, DWORD SizeOfData, DWORD Flags) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetPrivateData(IWineD3DSurface *iface,
+        REFGUID refguid, void *pData, DWORD *pSizeOfData) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_FreePrivateData(IWineD3DSurface *iface, REFGUID refguid) DECLSPEC_HIDDEN;
+DWORD WINAPI IWineD3DBaseSurfaceImpl_SetPriority(IWineD3DSurface *iface, DWORD PriorityNew) DECLSPEC_HIDDEN;
+DWORD WINAPI IWineD3DBaseSurfaceImpl_GetPriority(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+WINED3DRESOURCETYPE WINAPI IWineD3DBaseSurfaceImpl_GetType(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetContainer(IWineD3DSurface* iface,
+        REFIID riid, void **ppContainer) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetDesc(IWineD3DSurface *iface, WINED3DSURFACE_DESC *pDesc) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetBltStatus(IWineD3DSurface *iface, DWORD Flags) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetFlipStatus(IWineD3DSurface *iface, DWORD Flags) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_IsLost(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_Restore(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetPalette(IWineD3DSurface *iface, IWineD3DPalette **Pal) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetPalette(IWineD3DSurface *iface, IWineD3DPalette *Pal) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetColorKey(IWineD3DSurface *iface,
+        DWORD Flags, const WINEDDCOLORKEY *CKey) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetContainer(IWineD3DSurface *iface, IWineD3DBase *container) DECLSPEC_HIDDEN;
+DWORD WINAPI IWineD3DBaseSurfaceImpl_GetPitch(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_RealizePalette(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetOverlayPosition(IWineD3DSurface *iface, LONG X, LONG Y) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetOverlayPosition(IWineD3DSurface *iface, LONG *X, LONG *Y) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_UpdateOverlayZOrder(IWineD3DSurface *iface,
+        DWORD Flags, IWineD3DSurface *Ref) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_UpdateOverlay(IWineD3DSurface *iface, const RECT *SrcRect,
+        IWineD3DSurface *DstSurface, const RECT *DstRect, DWORD Flags, const WINEDDOVERLAYFX *FX) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetClipper(IWineD3DSurface *iface, IWineD3DClipper *clipper) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetClipper(IWineD3DSurface *iface, IWineD3DClipper **clipper) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetFormat(IWineD3DSurface *iface, WINED3DFORMAT format) DECLSPEC_HIDDEN;
+HRESULT IWineD3DBaseSurfaceImpl_CreateDIBSection(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_Blt(IWineD3DSurface *iface, const RECT *DestRect, IWineD3DSurface *SrcSurface,
+        const RECT *SrcRect, DWORD Flags, const WINEDDBLTFX *DDBltFx, WINED3DTEXTUREFILTERTYPE Filter) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_BltFast(IWineD3DSurface *iface, DWORD dstx, DWORD dsty,
+        IWineD3DSurface *Source, const RECT *rsrc, DWORD trans) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DLOCKED_RECT *pLockedRect,
+        const RECT *pRect, DWORD Flags) DECLSPEC_HIDDEN;
+void WINAPI IWineD3DBaseSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL srgb) DECLSPEC_HIDDEN;
+const void *WINAPI IWineD3DBaseSurfaceImpl_GetData(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+
+void get_drawable_size_swapchain(struct wined3d_context *context, UINT *width, UINT *height) DECLSPEC_HIDDEN;
+void get_drawable_size_backbuffer(struct wined3d_context *context, UINT *width, UINT *height) DECLSPEC_HIDDEN;
+void get_drawable_size_fbo(struct wined3d_context *context, UINT *width, UINT *height) DECLSPEC_HIDDEN;
+
+void draw_textured_quad(IWineD3DSurfaceImpl *src_surface, const RECT *src_rect,
+                        const RECT *dst_rect, WINED3DTEXTUREFILTERTYPE Filter) DECLSPEC_HIDDEN;
+void flip_surface(IWineD3DSurfaceImpl *front, IWineD3DSurfaceImpl *back) DECLSPEC_HIDDEN;
+
+/* Surface flags: */
+#define SFLAG_CONVERTED     0x00000002 /* Converted for color keying or Palettized */
+#define SFLAG_DIBSECTION    0x00000004 /* Has a DIB section attached for GetDC */
+#define SFLAG_LOCKABLE      0x00000008 /* Surface can be locked */
+#define SFLAG_DISCARD       0x00000010 /* ??? */
+#define SFLAG_LOCKED        0x00000020 /* Surface is locked atm */
+#define SFLAG_INTEXTURE     0x00000040 /* The GL texture contains the newest surface content */
+#define SFLAG_INSRGBTEX     0x00000080 /* The GL srgb texture contains the newest surface content */
+#define SFLAG_INDRAWABLE    0x00000100 /* The gl drawable contains the most up to date data */
+#define SFLAG_INSYSMEM      0x00000200 /* The system memory copy is most up to date */
+#define SFLAG_NONPOW2       0x00000400 /* Surface sizes are not a power of 2 */
+#define SFLAG_DYNLOCK       0x00000800 /* Surface is often locked by the app */
+#define SFLAG_DCINUSE       0x00001000 /* Set between GetDC and ReleaseDC calls */
+#define SFLAG_LOST          0x00002000 /* Surface lost flag for DDraw */
+#define SFLAG_USERPTR       0x00004000 /* The application allocated the memory for this surface */
+#define SFLAG_GLCKEY        0x00008000 /* The gl texture was created with a color key */
+#define SFLAG_CLIENT        0x00010000 /* GL_APPLE_client_storage is used on that texture */
+#define SFLAG_ALLOCATED     0x00020000 /* A gl texture is allocated for this surface */
+#define SFLAG_SRGBALLOCATED 0x00040000 /* A srgb gl texture is allocated for this surface */
+#define SFLAG_PBO           0x00080000 /* Has a PBO attached for speeding up data transfers for dynamically locked surfaces */
+#define SFLAG_NORMCOORD     0x00100000 /* Set if the GL texture coords are normalized(non-texture rectangle) */
+#define SFLAG_DS_ONSCREEN   0x00200000 /* Is a depth stencil, last modified onscreen */
+#define SFLAG_DS_OFFSCREEN  0x00400000 /* Is a depth stencil, last modified offscreen */
+#define SFLAG_INOVERLAYDRAW 0x00800000 /* Overlay drawing is in progress. Recursion prevention */
+#define SFLAG_SWAPCHAIN     0x01000000 /* The surface is part of a swapchain */
+
+#ifdef VBOX_WITH_WDDM
+# define SFLAG_CLIENTMEM     0x10000000 /* SYSMEM surface using client-supplied memory buffer */
+# define SFLAG_DONOTFREE_VBOXWDDM SFLAG_CLIENTMEM
+#else
+# define SFLAG_DONOTFREE_VBOXWDDM 0
+#endif
+
+/* In some conditions the surface memory must not be freed:
+ * SFLAG_CONVERTED: Converting the data back would take too long
+ * SFLAG_DIBSECTION: The dib code manages the memory
+ * SFLAG_LOCKED: The app requires access to the surface data
+ * SFLAG_DYNLOCK: Avoid freeing the data for performance
+ * SFLAG_PBO: PBOs don't use 'normal' memory. It is either allocated by the driver or must be NULL.
+ * SFLAG_CLIENT: OpenGL uses our memory as backup
+ */
+#define SFLAG_DONOTFREE     (SFLAG_CONVERTED  | \
+                             SFLAG_DIBSECTION | \
+                             SFLAG_LOCKED     | \
+                             SFLAG_DYNLOCK    | \
+                             SFLAG_USERPTR    | \
+                             SFLAG_PBO        | \
+                             SFLAG_CLIENT     | \
+                             SFLAG_DONOTFREE_VBOXWDDM \
+                             )
+
+#define SFLAG_LOCATIONS     (SFLAG_INSYSMEM   | \
+                             SFLAG_INTEXTURE  | \
+                             SFLAG_INDRAWABLE | \
+                             SFLAG_INSRGBTEX)
+
+#define SFLAG_DS_LOCATIONS  (SFLAG_DS_ONSCREEN | \
+                             SFLAG_DS_OFFSCREEN)
+#define SFLAG_DS_DISCARDED   SFLAG_DS_LOCATIONS
+
+typedef enum {
+    NO_CONVERSION,
+    CONVERT_PALETTED,
+    CONVERT_PALETTED_CK,
+    CONVERT_CK_565,
+    CONVERT_CK_5551,
+    CONVERT_CK_4444,
+    CONVERT_CK_4444_ARGB,
+    CONVERT_CK_1555,
+    CONVERT_555,
+    CONVERT_CK_RGB24,
+    CONVERT_CK_8888,
+    CONVERT_CK_8888_ARGB,
+    CONVERT_RGB32_888,
+    CONVERT_V8U8,
+    CONVERT_L6V5U5,
+    CONVERT_X8L8V8U8,
+    CONVERT_Q8W8V8U8,
+    CONVERT_V16U16,
+    CONVERT_A4L4,
+    CONVERT_G16R16,
+    CONVERT_R16G16F,
+    CONVERT_R32G32F,
+    CONVERT_D15S1,
+    CONVERT_D24X4S4,
+    CONVERT_D24FS8,
+} CONVERT_TYPES;
+
+HRESULT d3dfmt_get_conv(IWineD3DSurfaceImpl *This, BOOL need_alpha_ck, BOOL use_texturing,
+                        struct wined3d_format_desc *desc, CONVERT_TYPES *convert) DECLSPEC_HIDDEN;
+void d3dfmt_p8_init_palette(IWineD3DSurfaceImpl *This, BYTE table[256][4], BOOL colorkey) DECLSPEC_HIDDEN;
+
+BOOL palette9_changed(IWineD3DSurfaceImpl *This) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration implementation structure
+ */
+
+struct wined3d_vertex_declaration_element
+{
+    const struct wined3d_format_desc *format_desc;
+    BOOL ffp_valid;
+    WORD input_slot;
+    WORD offset;
+    UINT output_slot;
+    BYTE method;
+    BYTE usage;
+    BYTE usage_idx;
+};
+
+typedef struct IWineD3DVertexDeclarationImpl {
+    /* IUnknown  Information */
+    const IWineD3DVertexDeclarationVtbl *lpVtbl;
+    LONG                    ref;
+
+    IUnknown                *parent;
+    const struct wined3d_parent_ops *parent_ops;
+    IWineD3DDeviceImpl *device;
+
+    struct wined3d_vertex_declaration_element *elements;
+    UINT element_count;
+
+    DWORD                   streams[MAX_STREAMS];
+    UINT                    num_streams;
+    BOOL                    position_transformed;
+    BOOL                    half_float_conv_needed;
+} IWineD3DVertexDeclarationImpl;
+
+HRESULT vertexdeclaration_init(IWineD3DVertexDeclarationImpl *declaration, IWineD3DDeviceImpl *device,
+        const WINED3DVERTEXELEMENT *elements, UINT element_count,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DStateBlock implementation structure
+ */
+
+/* Internal state Block for Begin/End/Capture/Create/Apply info  */
+/*   Note: Very long winded but gl Lists are not flexible enough */
+/*   to resolve everything we need, so doing it manually for now */
+typedef struct SAVEDSTATES {
+    DWORD transform[(HIGHEST_TRANSFORMSTATE >> 5) + 1];
+    WORD streamSource;                          /* MAX_STREAMS, 16 */
+    WORD streamFreq;                            /* MAX_STREAMS, 16 */
+    DWORD renderState[(WINEHIGHEST_RENDER_STATE >> 5) + 1];
+    DWORD textureState[MAX_TEXTURES];           /* WINED3D_HIGHEST_TEXTURE_STATE + 1, 18 */
+    WORD samplerState[MAX_COMBINED_SAMPLERS];   /* WINED3D_HIGHEST_SAMPLER_STATE + 1, 14 */
+    DWORD clipplane;                            /* WINED3DMAXUSERCLIPPLANES, 32 */
+    WORD pixelShaderConstantsB;                 /* MAX_CONST_B, 16 */
+    WORD pixelShaderConstantsI;                 /* MAX_CONST_I, 16 */
+    BOOL *pixelShaderConstantsF;
+    WORD vertexShaderConstantsB;                /* MAX_CONST_B, 16 */
+    WORD vertexShaderConstantsI;                /* MAX_CONST_I, 16 */
+    BOOL *vertexShaderConstantsF;
+    DWORD textures : 20;                        /* MAX_COMBINED_SAMPLERS, 20 */
+    DWORD primitive_type : 1;
+    DWORD indices : 1;
+    DWORD material : 1;
+    DWORD viewport : 1;
+    DWORD vertexDecl : 1;
+    DWORD pixelShader : 1;
+    DWORD vertexShader : 1;
+    DWORD scissorRect : 1;
+    DWORD padding : 4;
+} SAVEDSTATES;
+
+struct StageState {
+    DWORD stage;
+    DWORD state;
+};
+
+struct IWineD3DStateBlockImpl
+{
+    /* IUnknown fields */
+    const IWineD3DStateBlockVtbl *lpVtbl;
+    LONG                      ref;     /* Note: Ref counting not required */
+
+    /* IWineD3DStateBlock information */
+    IWineD3DDeviceImpl *device;
+    WINED3DSTATEBLOCKTYPE     blockType;
+
+    /* Array indicating whether things have been set or changed */
+    SAVEDSTATES               changed;
+
+    /* Vertex Shader Declaration */
+    IWineD3DVertexDeclaration *vertexDecl;
+
+    IWineD3DVertexShader      *vertexShader;
+
+    /* Vertex Shader Constants */
+    BOOL                       vertexShaderConstantB[MAX_CONST_B];
+    INT                        vertexShaderConstantI[MAX_CONST_I * 4];
+    float                     *vertexShaderConstantF;
+
+    /* primitive type */
+    GLenum gl_primitive_type;
+
+    /* Stream Source */
+    BOOL                      streamIsUP;
+    UINT                      streamStride[MAX_STREAMS];
+    UINT                      streamOffset[MAX_STREAMS + 1 /* tesselated pseudo-stream */ ];
+    IWineD3DBuffer           *streamSource[MAX_STREAMS];
+    UINT                      streamFreq[MAX_STREAMS + 1];
+    UINT                      streamFlags[MAX_STREAMS + 1];     /*0 | WINED3DSTREAMSOURCE_INSTANCEDATA | WINED3DSTREAMSOURCE_INDEXEDDATA  */
+
+    /* Indices */
+    IWineD3DBuffer*           pIndexData;
+    WINED3DFORMAT             IndexFmt;
+    INT                       baseVertexIndex;
+    INT                       loadBaseVertexIndex; /* non-indexed drawing needs 0 here, indexed baseVertexIndex */
+
+    /* Transform */
+    WINED3DMATRIX             transforms[HIGHEST_TRANSFORMSTATE + 1];
+
+    /* Light hashmap . Collisions are handled using standard wine double linked lists */
+#define LIGHTMAP_SIZE 43 /* Use of a prime number recommended. Set to 1 for a linked list! */
+#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE) /* Primitive and simple function */
+    struct list               lightMap[LIGHTMAP_SIZE]; /* Hash map containing the lights */
+    const struct wined3d_light_info *activeLights[MAX_ACTIVE_LIGHTS]; /* Map of opengl lights to d3d lights */
+
+    /* Clipping */
+    double                    clipplane[MAX_CLIPPLANES][4];
+    WINED3DCLIPSTATUS         clip_status;
+
+    /* ViewPort */
+    WINED3DVIEWPORT           viewport;
+
+    /* Material */
+    WINED3DMATERIAL           material;
+
+    /* Pixel Shader */
+    IWineD3DPixelShader      *pixelShader;
+
+    /* Pixel Shader Constants */
+    BOOL                       pixelShaderConstantB[MAX_CONST_B];
+    INT                        pixelShaderConstantI[MAX_CONST_I * 4];
+    float                     *pixelShaderConstantF;
+
+    /* RenderState */
+    DWORD                     renderState[WINEHIGHEST_RENDER_STATE + 1];
+
+    /* Texture */
+    IWineD3DBaseTexture      *textures[MAX_COMBINED_SAMPLERS];
+
+    /* Texture State Stage */
+    DWORD                     textureState[MAX_TEXTURES][WINED3D_HIGHEST_TEXTURE_STATE + 1];
+    DWORD                     lowest_disabled_stage;
+    /* Sampler States */
+    DWORD                     samplerState[MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
+
+    /* Scissor test rectangle */
+    RECT                      scissorRect;
+
+    /* Contained state management */
+    DWORD                     contained_render_states[WINEHIGHEST_RENDER_STATE + 1];
+    unsigned int              num_contained_render_states;
+    DWORD                     contained_transform_states[HIGHEST_TRANSFORMSTATE + 1];
+    unsigned int              num_contained_transform_states;
+    DWORD                     contained_vs_consts_i[MAX_CONST_I];
+    unsigned int              num_contained_vs_consts_i;
+    DWORD                     contained_vs_consts_b[MAX_CONST_B];
+    unsigned int              num_contained_vs_consts_b;
+    DWORD                     *contained_vs_consts_f;
+    unsigned int              num_contained_vs_consts_f;
+    DWORD                     contained_ps_consts_i[MAX_CONST_I];
+    unsigned int              num_contained_ps_consts_i;
+    DWORD                     contained_ps_consts_b[MAX_CONST_B];
+    unsigned int              num_contained_ps_consts_b;
+    DWORD                     *contained_ps_consts_f;
+    unsigned int              num_contained_ps_consts_f;
+    struct StageState         contained_tss_states[MAX_TEXTURES * (WINED3D_HIGHEST_TEXTURE_STATE + 1)];
+    unsigned int              num_contained_tss_states;
+    struct StageState         contained_sampler_states[MAX_COMBINED_SAMPLERS * WINED3D_HIGHEST_SAMPLER_STATE];
+    unsigned int              num_contained_sampler_states;
+};
+
+HRESULT stateblock_init(IWineD3DStateBlockImpl *stateblock,
+        IWineD3DDeviceImpl *device, WINED3DSTATEBLOCKTYPE type) DECLSPEC_HIDDEN;
+void stateblock_init_contained_states(IWineD3DStateBlockImpl *object) DECLSPEC_HIDDEN;
+
+static inline void stateblock_apply_state(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context)
+{
+    const struct StateEntry *statetable = stateblock->device->StateTable;
+    DWORD rep = statetable[state].representative;
+    statetable[rep].apply(rep, stateblock, context);
+}
+
+/* Direct3D terminology with little modifications. We do not have an issued state
+ * because only the driver knows about it, but we have a created state because d3d
+ * allows GetData on a created issue, but opengl doesn't
+ */
+enum query_state {
+    QUERY_CREATED,
+    QUERY_SIGNALLED,
+    QUERY_BUILDING
+};
+/*****************************************************************************
+ * IWineD3DQueryImpl implementation structure (extends IUnknown)
+ */
+typedef struct IWineD3DQueryImpl
+{
+    const IWineD3DQueryVtbl  *lpVtbl;
+    LONG                      ref;     /* Note: Ref counting not required */
+
+    IUnknown                 *parent;
+    IWineD3DDeviceImpl *device;
+
+    /* IWineD3DQuery fields */
+    enum query_state         state;
+    WINED3DQUERYTYPE         type;
+    /* TODO: Think about using a IUnknown instead of a void* */
+    void                     *extendedData;
+} IWineD3DQueryImpl;
+
+HRESULT query_init(IWineD3DQueryImpl *query, IWineD3DDeviceImpl *device,
+        WINED3DQUERYTYPE type, IUnknown *parent) DECLSPEC_HIDDEN;
+
+/* IWineD3DBuffer */
+
+/* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other
+ * fixed function semantics as D3DCOLOR or FLOAT16 */
+enum wined3d_buffer_conversion_type
+{
+    CONV_NONE,
+    CONV_D3DCOLOR,
+    CONV_POSITIONT,
+    CONV_FLOAT16_2, /* Also handles FLOAT16_4 */
+};
+
+struct wined3d_map_range
+{
+    UINT offset;
+    UINT size;
+};
+
+#define WINED3D_BUFFER_OPTIMIZED    0x01    /* Optimize has been called for the buffer */
+#define WINED3D_BUFFER_HASDESC      0x02    /* A vertex description has been found */
+#define WINED3D_BUFFER_CREATEBO     0x04    /* Attempt to create a buffer object next PreLoad */
+#define WINED3D_BUFFER_DOUBLEBUFFER 0x08    /* Use a vbo and local allocated memory */
+#define WINED3D_BUFFER_FLUSH        0x10    /* Manual unmap flushing */
+#define WINED3D_BUFFER_DISCARD      0x20    /* A DISCARD lock has occurred since the last PreLoad */
+#define WINED3D_BUFFER_NOSYNC       0x40    /* All locks since the last PreLoad had NOOVERWRITE set */
+#define WINED3D_BUFFER_APPLESYNC    0x80    /* Using sync as in GL_APPLE_flush_buffer_range */
+
+struct wined3d_buffer
+{
+    const struct IWineD3DBufferVtbl *vtbl;
+    IWineD3DResourceClass resource;
+
+    struct wined3d_buffer_desc desc;
+
+    GLuint buffer_object;
+    GLenum buffer_object_usage;
+    GLenum buffer_type_hint;
+    UINT buffer_object_size;
+    LONG bind_count;
+    DWORD flags;
+
+    LONG lock_count;
+    struct wined3d_map_range *maps;
+    ULONG maps_size, modified_areas;
+    struct wined3d_event_query *query;
+
+    /* conversion stuff */
+    UINT decl_change_count, full_conversion_count;
+    UINT draw_count;
+    UINT stride;                                            /* 0 if no conversion */
+    UINT conversion_stride;                                 /* 0 if no shifted conversion */
+    enum wined3d_buffer_conversion_type *conversion_map;    /* NULL if no conversion */
+    /* Extra load offsets, for FLOAT16 conversion */
+    UINT *conversion_shift;                                 /* NULL if no shifted conversion */
+};
+
+const BYTE *buffer_get_memory(IWineD3DBuffer *iface, GLuint *buffer_object) DECLSPEC_HIDDEN;
+BYTE *buffer_get_sysmem(struct wined3d_buffer *This) DECLSPEC_HIDDEN;
+HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
+        UINT size, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool, GLenum bind_hint,
+        const char *data, IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+/* IWineD3DRendertargetView */
+struct wined3d_rendertarget_view
+{
+    const struct IWineD3DRendertargetViewVtbl *vtbl;
+    LONG refcount;
+
+    IWineD3DResource *resource;
+    IUnknown *parent;
+};
+
+void wined3d_rendertarget_view_init(struct wined3d_rendertarget_view *view,
+        IWineD3DResource *resource, IUnknown *parent) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DSwapChainImpl implementation structure (extends IUnknown)
+ */
+
+struct IWineD3DSwapChainImpl
+{
+    /*IUnknown part*/
+    const IWineD3DSwapChainVtbl *lpVtbl;
+    LONG                      ref;     /* Note: Ref counting not required */
+
+    IUnknown                 *parent;
+    IWineD3DDeviceImpl *device;
+
+    /* IWineD3DSwapChain fields */
+    IWineD3DSurface         **backBuffer;
+    IWineD3DSurface          *frontBuffer;
+    WINED3DPRESENT_PARAMETERS presentParms;
+    DWORD                     orig_width, orig_height;
+    WINED3DFORMAT             orig_fmt;
+    WINED3DGAMMARAMP          orig_gamma;
+    BOOL                      render_to_fbo;
+    const struct wined3d_format_desc *ds_format;
+
+    long prev_time, frames;   /* Performance tracking */
+    unsigned int vSyncCounter;
+
+#ifndef VBOX_WITH_WDDM
+    struct wined3d_context **context;
+    unsigned int            num_contexts;
+    HWND                    win_handle;
+    HWND device_window;
+    HDC hDC;
+#else
+    HWND                    win_handle;
+    HDC                     hDC;
+    IWineD3DSurface         *presentRt;
+#endif
+};
+
+const IWineD3DSwapChainVtbl IWineGDISwapChain_Vtbl DECLSPEC_HIDDEN;
+void x11_copy_to_screen(IWineD3DSwapChainImpl *This, const RECT *rc) DECLSPEC_HIDDEN;
+
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_QueryInterface(IWineD3DSwapChain *iface,
+        REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN;
+ULONG WINAPI IWineD3DBaseSwapChainImpl_AddRef(IWineD3DSwapChain *iface) DECLSPEC_HIDDEN;
+ULONG WINAPI IWineD3DBaseSwapChainImpl_Release(IWineD3DSwapChain *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetParent(IWineD3DSwapChain *iface, IUnknown **ppParent) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetFrontBufferData(IWineD3DSwapChain *iface,
+        IWineD3DSurface *pDestSurface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, UINT iBackBuffer,
+        WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface **ppBackBuffer) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *iface,
+        WINED3DRASTER_STATUS *pRasterStatus) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface,
+        WINED3DDISPLAYMODE *pMode) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetDevice(IWineD3DSwapChain *iface,
+        IWineD3DDevice **ppDevice) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetPresentParameters(IWineD3DSwapChain *iface,
+        WINED3DPRESENT_PARAMETERS *pPresentationParameters) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_SetGammaRamp(IWineD3DSwapChain *iface,
+        DWORD Flags, const WINED3DGAMMARAMP *pRamp) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetGammaRamp(IWineD3DSwapChain *iface,
+        WINED3DGAMMARAMP *pRamp) DECLSPEC_HIDDEN;
+
+struct wined3d_context *swapchain_create_context_for_thread(IWineD3DSwapChain *iface) DECLSPEC_HIDDEN;
+HRESULT swapchain_init(IWineD3DSwapChainImpl *swapchain, WINED3DSURFTYPE surface_type,
+        IWineD3DDeviceImpl *device, WINED3DPRESENT_PARAMETERS *present_parameters, IUnknown *parent) DECLSPEC_HIDDEN;
+void swapchain_restore_fullscreen_window(IWineD3DSwapChainImpl *swapchain) DECLSPEC_HIDDEN;
+void swapchain_setup_fullscreen_window(IWineD3DSwapChainImpl *swapchain, UINT w, UINT h) DECLSPEC_HIDDEN;
+
+#define DEFAULT_REFRESH_RATE 0
+
+/*****************************************************************************
+ * Utility function prototypes
+ */
+
+/* Trace routines */
+const char *debug_d3dformat(WINED3DFORMAT fmt) DECLSPEC_HIDDEN;
+const char *debug_d3ddevicetype(WINED3DDEVTYPE devtype) DECLSPEC_HIDDEN;
+const char *debug_d3dresourcetype(WINED3DRESOURCETYPE res) DECLSPEC_HIDDEN;
+const char *debug_d3dusage(DWORD usage) DECLSPEC_HIDDEN;
+const char *debug_d3dusagequery(DWORD usagequery) DECLSPEC_HIDDEN;
+const char *debug_d3ddeclmethod(WINED3DDECLMETHOD method) DECLSPEC_HIDDEN;
+const char *debug_d3ddeclusage(BYTE usage) DECLSPEC_HIDDEN;
+const char *debug_d3dprimitivetype(WINED3DPRIMITIVETYPE PrimitiveType) DECLSPEC_HIDDEN;
+const char *debug_d3drenderstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dsamplerstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dtexturefiltertype(WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;
+const char *debug_d3dtexturestate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dtstype(WINED3DTRANSFORMSTATETYPE tstype) DECLSPEC_HIDDEN;
+const char *debug_d3dpool(WINED3DPOOL pool) DECLSPEC_HIDDEN;
+const char *debug_fbostatus(GLenum status) DECLSPEC_HIDDEN;
+const char *debug_glerror(GLenum error) DECLSPEC_HIDDEN;
+const char *debug_d3dbasis(WINED3DBASISTYPE basis) DECLSPEC_HIDDEN;
+const char *debug_d3ddegree(WINED3DDEGREETYPE order) DECLSPEC_HIDDEN;
+const char *debug_d3dtop(WINED3DTEXTUREOP d3dtop) DECLSPEC_HIDDEN;
+void dump_color_fixup_desc(struct color_fixup_desc fixup) DECLSPEC_HIDDEN;
+const char *debug_surflocation(DWORD flag) DECLSPEC_HIDDEN;
+
+/* Color conversion routines */
+DWORD color_convert_argb_to_fmt(DWORD color, WINED3DFORMAT destfmt) DECLSPEC_HIDDEN;
+
+/* Routines for GL <-> D3D values */
+GLenum StencilOp(DWORD op) DECLSPEC_HIDDEN;
+GLenum CompareFunc(DWORD func) DECLSPEC_HIDDEN;
+BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, WINED3DTEXTUREOP op,
+        DWORD arg1, DWORD arg2, DWORD arg3) DECLSPEC_HIDDEN;
+void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEXTUREOP op,
+        DWORD arg1, DWORD arg2, DWORD arg3, INT texture_idx, DWORD dst) DECLSPEC_HIDDEN;
+void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords,
+        BOOL transformed, WINED3DFORMAT coordtype, BOOL ffp_can_disable_proj) DECLSPEC_HIDDEN;
+void texture_activate_dimensions(DWORD stage, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void sampler_texdim(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void tex_alphaop(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void apply_pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fogcolor(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fogdensity(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fogstartend(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fog_fragpart(DWORD state, IWineD3DStateBlockImpl *stateblock,
+        struct wined3d_context *context) DECLSPEC_HIDDEN;
+
+void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect) DECLSPEC_HIDDEN;
+GLenum surface_get_gl_buffer(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
+void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location) DECLSPEC_HIDDEN;
+void surface_set_compatible_renderbuffer(IWineD3DSurface *iface,
+        unsigned int width, unsigned int height) DECLSPEC_HIDDEN;
+void surface_set_texture_name(IWineD3DSurface *iface, GLuint name, BOOL srgb_name) DECLSPEC_HIDDEN;
+void surface_set_texture_target(IWineD3DSurface *iface, GLenum target) DECLSPEC_HIDDEN;
+
+BOOL getColorBits(const struct wined3d_format_desc *format_desc,
+        short *redSize, short *greenSize, short *blueSize, short *alphaSize, short *totalSize) DECLSPEC_HIDDEN;
+BOOL getDepthStencilBits(const struct wined3d_format_desc *format_desc,
+        short *depthSize, short *stencilSize) DECLSPEC_HIDDEN;
+
+/* Math utils */
+void multiply_matrix(WINED3DMATRIX *dest, const WINED3DMATRIX *src1, const WINED3DMATRIX *src2) DECLSPEC_HIDDEN;
+UINT wined3d_log2i(UINT32 x) DECLSPEC_HIDDEN;
+unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN;
+
+void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN;
+
+typedef struct local_constant {
+    struct list entry;
+    unsigned int idx;
+    DWORD value[4];
+} local_constant;
+
+typedef struct SHADER_LIMITS {
+    unsigned int temporary;
+    unsigned int texcoord;
+    unsigned int sampler;
+    unsigned int constant_int;
+    unsigned int constant_float;
+    unsigned int constant_bool;
+    unsigned int address;
+    unsigned int packed_output;
+    unsigned int packed_input;
+    unsigned int attributes;
+    unsigned int label;
+} SHADER_LIMITS;
+
+/* Keeps track of details for TEX_M#x# shader opcodes which need to
+ * maintain state information between multiple codes */
+typedef struct SHADER_PARSE_STATE {
+    unsigned int current_row;
+    DWORD texcoord_w[2];
+} SHADER_PARSE_STATE;
+
+#ifdef __GNUC__
+#define PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+#else
+#define PRINTF_ATTR(fmt,args)
+#endif
+
+/* Base Shader utility functions. */
+int shader_addline(struct wined3d_shader_buffer *buffer, const char *fmt, ...) PRINTF_ATTR(2,3) DECLSPEC_HIDDEN;
+int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *fmt, va_list args) DECLSPEC_HIDDEN;
+
+/* Vertex shader utility functions */
+extern BOOL vshader_get_input(IWineD3DVertexShader *iface,
+        BYTE usage_req, BYTE usage_idx_req, unsigned int *regnum) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IDirect3DBaseShader implementation structure
+ */
+typedef struct IWineD3DBaseShaderClass
+{
+    LONG                            ref;
+    SHADER_LIMITS                   limits;
+    SHADER_PARSE_STATE              parse_state;
+    DWORD                          *function;
+    UINT                            functionLength;
+    UINT                            cur_loop_depth, cur_loop_regno;
+    BOOL                            load_local_constsF;
+    const struct wined3d_shader_frontend *frontend;
+    void *frontend_data;
+    void *backend_data;
+
+    IUnknown *parent;
+    const struct wined3d_parent_ops *parent_ops;
+
+    /* Programs this shader is linked with */
+    struct list linked_programs;
+
+    /* Immediate constants (override global ones) */
+    struct list constantsB;
+    struct list constantsF;
+    struct list constantsI;
+    shader_reg_maps reg_maps;
+
+    struct wined3d_shader_signature_element input_signature[max(MAX_ATTRIBS, MAX_REG_INPUT)];
+    struct wined3d_shader_signature_element output_signature[MAX_REG_OUTPUT];
+
+    /* Pointer to the parent device */
+    IWineD3DDevice *device;
+    struct list     shader_list_entry;
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+    VBOXEXT_HASHCACHE_ENTRY CacheEntry;
+    uint32_t u32CacheDataInited;
+    uint32_t u32Hash;
+#endif
+} IWineD3DBaseShaderClass;
+
+typedef struct IWineD3DBaseShaderImpl {
+    /* IUnknown */
+    const IWineD3DBaseShaderVtbl    *lpVtbl;
+
+    /* IWineD3DBaseShader */
+    IWineD3DBaseShaderClass         baseShader;
+} IWineD3DBaseShaderImpl;
+
+void shader_buffer_clear(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
+BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
+void shader_buffer_free(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
+void shader_dump_src_param(const struct wined3d_shader_src_param *param,
+        const struct wined3d_shader_version *shader_version) DECLSPEC_HIDDEN;
+void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
+        const struct wined3d_shader_version *shader_version) DECLSPEC_HIDDEN;
+unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max) DECLSPEC_HIDDEN;
+void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
+        const shader_reg_maps *reg_maps, const DWORD *pFunction, void *backend_ctx) DECLSPEC_HIDDEN;
+BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage) DECLSPEC_HIDDEN;
+
+static inline BOOL shader_is_pshader_version(enum wined3d_shader_type type)
+{
+    return type == WINED3D_SHADER_TYPE_PIXEL;
+}
+
+static inline BOOL shader_is_vshader_version(enum wined3d_shader_type type)
+{
+    return type == WINED3D_SHADER_TYPE_VERTEX;
+}
+
+static inline BOOL shader_is_scalar(const struct wined3d_shader_register *reg)
+{
+    switch (reg->type)
+    {
+        case WINED3DSPR_RASTOUT:
+            /* oFog & oPts */
+            if (reg->idx != 0) return TRUE;
+            /* oPos */
+            return FALSE;
+
+        case WINED3DSPR_DEPTHOUT:   /* oDepth */
+        case WINED3DSPR_CONSTBOOL:  /* b# */
+        case WINED3DSPR_LOOP:       /* aL */
+        case WINED3DSPR_PREDICATE:  /* p0 */
+            return TRUE;
+
+        case WINED3DSPR_MISCTYPE:
+            switch(reg->idx)
+            {
+                case 0: /* vPos */
+                    return FALSE;
+                case 1: /* vFace */
+                    return TRUE;
+                default:
+                    return FALSE;
+            }
+
+        case WINED3DSPR_IMMCONST:
+            switch(reg->immconst_type)
+            {
+                case WINED3D_IMMCONST_FLOAT:
+                    return TRUE;
+                default:
+                    return FALSE;
+            }
+
+        default:
+            return FALSE;
+    }
+}
+
+static inline BOOL shader_constant_is_local(IWineD3DBaseShaderImpl* This, DWORD reg) {
+    local_constant* lconst;
+
+    if(This->baseShader.load_local_constsF) return FALSE;
+    LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry) {
+        if(lconst->idx == reg) return TRUE;
+    }
+    return FALSE;
+
+}
+
+/*****************************************************************************
+ * IDirect3DVertexShader implementation structures
+ */
+typedef struct IWineD3DVertexShaderImpl {
+    /* IUnknown parts */
+    const IWineD3DVertexShaderVtbl *lpVtbl;
+
+    /* IWineD3DBaseShader */
+    IWineD3DBaseShaderClass     baseShader;
+
+    /* Vertex shader attributes. */
+    struct wined3d_shader_attribute attributes[MAX_ATTRIBS];
+
+    UINT                       min_rel_offset, max_rel_offset;
+    UINT                       rel_offset;
+} IWineD3DVertexShaderImpl;
+
+void find_vs_compile_args(IWineD3DVertexShaderImpl *shader, IWineD3DStateBlockImpl *stateblock,
+        struct vs_compile_args *args) DECLSPEC_HIDDEN;
+HRESULT vertexshader_init(IWineD3DVertexShaderImpl *shader, IWineD3DDeviceImpl *device,
+        const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+struct wined3d_geometryshader
+{
+    const struct IWineD3DGeometryShaderVtbl *vtbl;
+    IWineD3DBaseShaderClass base_shader;
+};
+
+HRESULT geometryshader_init(struct wined3d_geometryshader *shader, IWineD3DDeviceImpl *device,
+        const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IDirect3DPixelShader implementation structure
+ */
+
+/* Using additional shader constants (uniforms in GLSL / program environment
+ * or local parameters in ARB) is costly:
+ * ARB only knows float4 parameters and GLSL compiler are not really smart
+ * when it comes to efficiently pack float2 uniforms, so no space is wasted
+ * (in fact most compilers map a float2 to a full float4 uniform).
+ *
+ * For NP2 texcoord fixup we only need 2 floats (width and height) for each
+ * 2D texture used in the shader. We therefore pack fixup info for 2 textures
+ * into a single shader constant (uniform / program parameter).
+ *
+ * This structure is shared between the GLSL and the ARB backend.*/
+struct ps_np2fixup_info {
+    unsigned char     idx[MAX_FRAGMENT_SAMPLERS]; /* indices to the real constant */
+    WORD              active; /* bitfield indicating if we can apply the fixup */
+    WORD              num_consts;
+};
+
+typedef struct IWineD3DPixelShaderImpl {
+    /* IUnknown parts */
+    const IWineD3DPixelShaderVtbl *lpVtbl;
+
+    /* IWineD3DBaseShader */
+    IWineD3DBaseShaderClass     baseShader;
+
+    /* Pixel shader input semantics */
+    DWORD                 input_reg_map[MAX_REG_INPUT];
+    BOOL                  input_reg_used[MAX_REG_INPUT];
+    unsigned int declared_in_count;
+
+    /* Some information about the shader behavior */
+    char                        vpos_uniform;
+
+    BOOL                        color0_mov;
+    DWORD                       color0_reg;
+
+} IWineD3DPixelShaderImpl;
+
+HRESULT pixelshader_init(IWineD3DPixelShaderImpl *shader, IWineD3DDeviceImpl *device,
+        const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+        IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+void pixelshader_update_samplers(struct shader_reg_maps *reg_maps,
+        IWineD3DBaseTexture * const *textures) DECLSPEC_HIDDEN;
+void find_ps_compile_args(IWineD3DPixelShaderImpl *shader, IWineD3DStateBlockImpl *stateblock,
+        struct ps_compile_args *args) DECLSPEC_HIDDEN;
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+IWineD3DVertexShaderImpl * vertexshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DVertexShaderImpl *object) DECLSPEC_HIDDEN;
+IWineD3DPixelShaderImpl * pixelshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DPixelShaderImpl *object) DECLSPEC_HIDDEN;
+void shader_chaches_init(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+void shader_chaches_term(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+#endif
+
+/* sRGB correction constants */
+static const float srgb_cmp = 0.0031308f;
+static const float srgb_mul_low = 12.92f;
+static const float srgb_pow = 0.41666f;
+static const float srgb_mul_high = 1.055f;
+static const float srgb_sub_high = 0.055f;
+
+/*****************************************************************************
+ * IWineD3DPalette implementation structure
+ */
+struct IWineD3DPaletteImpl {
+    /* IUnknown parts */
+    const IWineD3DPaletteVtbl  *lpVtbl;
+    LONG                       ref;
+
+    IUnknown                   *parent;
+    IWineD3DDeviceImpl *device;
+
+    /* IWineD3DPalette */
+    HPALETTE                   hpal;
+    WORD                       palVersion;     /*|               */
+    WORD                       palNumEntries;  /*|  LOGPALETTE   */
+    PALETTEENTRY               palents[256];   /*|               */
+    /* This is to store the palette in 'screen format' */
+    int                        screen_palents[256];
+    DWORD                      Flags;
+};
+
+HRESULT wined3d_palette_init(IWineD3DPaletteImpl *palette, IWineD3DDeviceImpl *device,
+        DWORD flags, const PALETTEENTRY *entries, IUnknown *parent) DECLSPEC_HIDDEN;
+
+/* DirectDraw utility functions */
+extern WINED3DFORMAT pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * Pixel format management
+ */
+
+/* WineD3D pixel format flags */
+#define WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING 0x1
+#define WINED3DFMT_FLAG_FILTERING                0x2
+#define WINED3DFMT_FLAG_DEPTH                    0x4
+#define WINED3DFMT_FLAG_STENCIL                  0x8
+#define WINED3DFMT_FLAG_RENDERTARGET             0x10
+#define WINED3DFMT_FLAG_FOURCC                   0x20
+#define WINED3DFMT_FLAG_FBO_ATTACHABLE           0x40
+#define WINED3DFMT_FLAG_COMPRESSED               0x80
+#define WINED3DFMT_FLAG_GETDC                    0x100
+#define WINED3DFMT_FLAG_FLOAT                    0x200
+
+struct wined3d_format_desc
+{
+    WINED3DFORMAT format;
+    DWORD red_mask;
+    DWORD green_mask;
+    DWORD blue_mask;
+    DWORD alpha_mask;
+    UINT byte_count;
+    WORD depth_size;
+    WORD stencil_size;
+
+    UINT block_width;
+    UINT block_height;
+    UINT block_byte_count;
+
+    enum wined3d_ffp_emit_idx emit_idx;
+    GLint component_count;
+    GLenum gl_vtx_type;
+    GLint gl_vtx_format;
+    GLboolean gl_normalized;
+    unsigned int component_size;
+
+    GLint glInternal;
+    GLint glGammaInternal;
+    GLint rtInternal;
+    GLint glFormat;
+    GLint glType;
+    UINT  conv_byte_count;
+    unsigned int Flags;
+    float heightscale;
+    struct color_fixup_desc color_fixup;
+    void (*convert)(const BYTE *src, BYTE *dst, UINT pitch, UINT width, UINT height);
+};
+
+const struct wined3d_format_desc *getFormatDescEntry(WINED3DFORMAT fmt,
+        const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+
+static inline BOOL use_vs(IWineD3DStateBlockImpl *stateblock)
+{
+    /* Check stateblock->vertexDecl to allow this to be used from
+     * IWineD3DDeviceImpl_FindTexUnitMap(). This is safe because
+     * stateblock->vertexShader implies a vertex declaration instead of ddraw
+     * style strided data. */
+    return (stateblock->vertexShader
+            && !((IWineD3DVertexDeclarationImpl *)stateblock->vertexDecl)->position_transformed
+            && stateblock->device->vs_selected_mode != SHADER_NONE);
+}
+
+static inline BOOL use_ps(IWineD3DStateBlockImpl *stateblock)
+{
+    return (stateblock->pixelShader && stateblock->device->ps_selected_mode != SHADER_NONE);
+}
+
+void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface,
+        const RECT *src_rect, IWineD3DSurface *dst_surface, const RECT *dst_rect,
+        const WINED3DTEXTUREFILTERTYPE filter) DECLSPEC_HIDDEN;
+
+/* The WNDCLASS-Name for the fake window which we use to retrieve the GL capabilities */
+#define WINED3D_OPENGL_WINDOW_CLASS_NAME "WineD3D_OpenGL"
+
+#define WINEMAKEFOURCC(ch0, ch1, ch2, ch3) \
+        ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+        ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+
+#define MAKEDWORD_VERSION(maj, min) (((maj & 0xffff) << 16) | (min & 0xffff))
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/winoverride.h b/src/VBox/Devices/Graphics/shaderlib/winoverride.h
new file mode 100644
index 0000000..c555dbc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/winoverride.h
@@ -0,0 +1,33 @@
+/* $Id: winoverride.h $ */
+/** @file
+ * DevVMWare/Shaderlib - Wine Function Portability Overrides
+ */
+
+/*
+ * Copyright (C) 2013-2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef __WINOVERRIDE_H__
+#define __WINOVERRIDE_H__
+
+#define GetProcessHeap()    ((HANDLE)0)
+#define HeapAlloc           VBoxHeapAlloc
+#define HeapFree            VBoxHeapFree
+#define HeapReAlloc         VBoxHeapReAlloc
+#define DebugBreak          VBoxDebugBreak
+
+LPVOID      WINAPI VBoxHeapAlloc(HANDLE hHeap, DWORD heaptype, SIZE_T size);
+BOOL        WINAPI VBoxHeapFree(HANDLE hHeap, DWORD heaptype, LPVOID ptr);
+LPVOID      WINAPI VBoxHeapReAlloc(HANDLE hHeap,DWORD heaptype, LPVOID ptr, SIZE_T size);
+void VBoxDebugBreak(void);
+
+#endif /* !__WINOVERRIDE_H__ */
+
diff --git a/src/VBox/Devices/Graphics/vmsvga/backdoor_def.h b/src/VBox/Devices/Graphics/vmsvga/backdoor_def.h
new file mode 100644
index 0000000..8ac6160
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga/backdoor_def.h
@@ -0,0 +1,126 @@
+/**********************************************************
+ * Copyright 1998-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * backdoor_def.h --
+ *
+ *    This contains constants that define the backdoor I/O port, a
+ *    simple hypercall mechanism that is used by VMware Tools.
+ */
+
+
+#ifndef _BACKDOOR_DEF_H_
+#define _BACKDOOR_DEF_H_
+
+#define BDOOR_MAGIC 0x564D5868
+
+#define BDOOR_PORT 0x5658
+
+#define BDOOR_CMD_GETMHZ                1
+#define BDOOR_CMD_APMFUNCTION           2
+#define BDOOR_CMD_GETDISKGEO            3
+#define BDOOR_CMD_GETPTRLOCATION        4
+#define BDOOR_CMD_SETPTRLOCATION        5
+#define BDOOR_CMD_GETSELLENGTH          6
+#define BDOOR_CMD_GETNEXTPIECE          7
+#define BDOOR_CMD_SETSELLENGTH          8
+#define BDOOR_CMD_SETNEXTPIECE          9
+#define BDOOR_CMD_GETVERSION            10
+#define BDOOR_CMD_GETDEVICELISTELEMENT  11
+#define BDOOR_CMD_TOGGLEDEVICE          12
+#define BDOOR_CMD_GETGUIOPTIONS         13
+#define BDOOR_CMD_SETGUIOPTIONS         14
+#define BDOOR_CMD_GETSCREENSIZE         15
+#define BDOOR_CMD_MONITOR_CONTROL       16
+#define BDOOR_CMD_GETHWVERSION          17
+#define BDOOR_CMD_OSNOTFOUND            18
+#define BDOOR_CMD_GETUUID               19
+#define BDOOR_CMD_GETMEMSIZE            20
+#define BDOOR_CMD_HOSTCOPY              21 /* Devel only */
+#define BDOOR_CMD_SERVICE_VM            22 /* prototype only */
+#define BDOOR_CMD_GETTIME               23 /* Deprecated. Use GETTIMEFULL. */
+#define BDOOR_CMD_STOPCATCHUP           24
+#define BDOOR_CMD_PUTCHR                25 /* Devel only */
+#define BDOOR_CMD_ENABLE_MSG            26 /* Devel only */
+#define BDOOR_CMD_GOTO_TCL              27 /* Devel only */
+#define BDOOR_CMD_INITPCIOPROM          28
+#define BDOOR_CMD_INT13                 29
+#define BDOOR_CMD_MESSAGE               30
+#define BDOOR_CMD_RSVD0                 31
+#define BDOOR_CMD_RSVD1                 32
+#define BDOOR_CMD_RSVD2                 33
+#define BDOOR_CMD_ISACPIDISABLED        34
+#define BDOOR_CMD_TOE                   35 /* Not in use */
+#define BDOOR_CMD_ISMOUSEABSOLUTE       36
+#define BDOOR_CMD_PATCH_SMBIOS_STRUCTS  37
+#define BDOOR_CMD_MAPMEM                38 /* Devel only */
+#define BDOOR_CMD_ABSPOINTER_DATA       39
+#define BDOOR_CMD_ABSPOINTER_STATUS     40
+#define BDOOR_CMD_ABSPOINTER_COMMAND    41
+#define BDOOR_CMD_TIMER_SPONGE          42
+#define BDOOR_CMD_PATCH_ACPI_TABLES     43
+#define BDOOR_CMD_DEVEL_FAKEHARDWARE    44 /* Debug only - needed in beta */
+#define BDOOR_CMD_GETHZ                 45
+#define BDOOR_CMD_GETTIMEFULL           46
+#define BDOOR_CMD_STATELOGGER           47
+#define BDOOR_CMD_CHECKFORCEBIOSSETUP   48
+#define BDOOR_CMD_LAZYTIMEREMULATION    49
+#define BDOOR_CMD_BIOSBBS               50
+#define BDOOR_CMD_VASSERT               51
+#define BDOOR_CMD_ISGOSDARWIN           52
+#define BDOOR_CMD_DEBUGEVENT            53
+#define BDOOR_CMD_OSNOTMACOSXSERVER     54
+#define BDOOR_CMD_GETTIMEFULL_WITH_LAG  55
+#define BDOOR_CMD_ACPI_HOTPLUG_DEVICE   56
+#define BDOOR_CMD_ACPI_HOTPLUG_MEMORY   57
+#define BDOOR_CMD_ACPI_HOTPLUG_CBRET    58
+#define BDOOR_CMD_GET_HOST_VIDEO_MODES  59
+#define BDOOR_CMD_ACPI_HOTPLUG_CPU      60
+#define BDOOR_CMD_MAX                   61
+
+/*
+ * High-bandwidth backdoor port.
+ */
+
+#define BDOORHB_PORT 0x5659
+
+#define BDOORHB_CMD_MESSAGE 0
+#define BDOORHB_CMD_VASSERT 1
+#define BDOORHB_CMD_MAX 2
+
+/*
+ * There is another backdoor which allows access to certain TSC-related
+ * values using otherwise illegal PMC indices when the pseudo_perfctr
+ * control flag is set.
+ */
+
+#define BDOOR_PMC_HW_TSC      0x10000
+#define BDOOR_PMC_REAL_NS     0x10001
+#define BDOOR_PMC_APPARENT_NS 0x10002
+
+#define IS_BDOOR_PMC(index)  (((index) | 3) == 0x10003)
+#define BDOOR_CMD(ecx)       ((ecx) & 0xffff)
+
+#endif /* _BACKDOOR_DEF_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga3d_caps.h b/src/VBox/Devices/Graphics/vmsvga/svga3d_caps.h
index 0f90699..b2f53fc 100644
--- a/src/VBox/Devices/Graphics/vmsvga/svga3d_caps.h
+++ b/src/VBox/Devices/Graphics/vmsvga/svga3d_caps.h
@@ -1,11 +1,139 @@
+/**********************************************************
+ * Copyright 2007-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
 /*
- * VMware SVGA II 3D capability definitions
+ * svga3d_caps.h --
+ *
+ *       Definitions for SVGA3D hardware capabilities.  Capabilities
+ *       are used to query for optional rendering features during
+ *       driver initialization. The capability data is stored as very
+ *       basic key/value dictionary within the "FIFO register" memory
+ *       area at the beginning of BAR2.
+ *
+ *       Note that these definitions are only for 3D capabilities.
+ *       The SVGA device also has "device capabilities" and "FIFO
+ *       capabilities", which are non-3D-specific and are stored as
+ *       bitfields rather than key/value pairs.
  */
 
 #ifndef _SVGA3D_CAPS_H_
 #define _SVGA3D_CAPS_H_
 
+#define SVGA_FIFO_3D_CAPS_SIZE   (SVGA_FIFO_3D_CAPS_LAST - \
+                                  SVGA_FIFO_3D_CAPS + 1)
+
+
+/*
+ * SVGA3dCapsRecordType
+ *
+ *    Record types that can be found in the caps block.
+ *    Related record types are grouped together numerically so that
+ *    SVGA3dCaps_FindRecord() can be applied on a range of record
+ *    types.
+ */
+
+typedef enum {
+   SVGA3DCAPS_RECORD_UNKNOWN        = 0,
+   SVGA3DCAPS_RECORD_DEVCAPS_MIN    = 0x100,
+   SVGA3DCAPS_RECORD_DEVCAPS        = 0x100,
+   SVGA3DCAPS_RECORD_DEVCAPS_MAX    = 0x1ff
+} SVGA3dCapsRecordType;
+
+
+/*
+ * SVGA3dCapsRecordHeader
+ *
+ *    Header field leading each caps block record. Contains the offset (in
+ *    register words, NOT bytes) to the next caps block record (or the end
+ *    of caps block records which will be a zero word) and the record type
+ *    as defined above.
+ */
+
+typedef
+struct SVGA3dCapsRecordHeader {
+   uint32_t length;
+   SVGA3dCapsRecordType type;
+}
+SVGA3dCapsRecordHeader;
+
+
+/*
+ * SVGA3dCapsRecord
+ *
+ *    Caps block record; "data" is a placeholder for the actual data structure
+ *    contained within the record; for example a record containing a FOOBAR
+ *    structure would be of size "sizeof(SVGA3dCapsRecordHeader) +
+ *    sizeof(FOOBAR)".
+ */
+
+typedef
+struct SVGA3dCapsRecord {
+   SVGA3dCapsRecordHeader header;
+   uint32_t data[1];
+}
+SVGA3dCapsRecord;
+
+
+typedef uint32_t SVGA3dCapPair[2];
+
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * SVGA3dCaps_FindRecord
+ *
+ *    Finds the record with the highest-valued type within the given range
+ *    in the caps block.
+ *
+ *    Result: pointer to found record, or NULL if not found.
+ *
+ *----------------------------------------------------------------------
+ */
+#if 0
+static INLINE SVGA3dCapsRecord *
+SVGA3dCaps_FindRecord(const uint32_t *capsBlock,
+                      SVGA3dCapsRecordType recordTypeMin,
+                      SVGA3dCapsRecordType recordTypeMax)
+{
+   SVGA3dCapsRecord *record, *found = NULL;
+   uint32_t offset;
 
+   /*
+    * Search linearly through the caps block records for the specified type.
+    */
+   for (offset = 0; capsBlock[offset] != 0; offset += capsBlock[offset]) {
+      record = (SVGA3dCapsRecord *) (capsBlock + offset);
+      if ((record->header.type >= recordTypeMin) &&
+          (record->header.type <= recordTypeMax) &&
+          (!found || (record->header.type > found->header.type))) {
+         found = record;
+      }
+   }
 
-#endif /* _SVGA3D_CAPS_H_ */
+   return found;
+}
+#endif
 
+#endif // _SVGA3D_CAPS_H_
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h b/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h
index 3991d38..0aef830 100644
--- a/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h
+++ b/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h
@@ -1,14 +1,1029 @@
+/**********************************************************
+ * Copyright 1998-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
 /*
- * VMware SVGA II 3D definitions
+ * svga3d_reg.h --
+ *
+ *       SVGA 3D hardware definitions
  */
 
 #ifndef _SVGA3D_REG_H_
 #define _SVGA3D_REG_H_
 
+#include "svga_reg.h"
+
+
+/*
+ * 3D Hardware Version
+ *
+ *   The hardware version is stored in the SVGA_FIFO_3D_HWVERSION fifo
+ *   register.   Is set by the host and read by the guest.  This lets
+ *   us make new guest drivers which are backwards-compatible with old
+ *   SVGA hardware revisions.  It does not let us support old guest
+ *   drivers.  Good enough for now.
+ *
+ */
+
+#define SVGA3D_MAKE_HWVERSION(major, minor)      (((major) << 16) | ((minor) & 0xFF))
+#define SVGA3D_MAJOR_HWVERSION(version)          ((version) >> 16)
+#define SVGA3D_MINOR_HWVERSION(version)          ((version) & 0xFF)
+
+typedef enum {
+   SVGA3D_HWVERSION_WS5_RC1   = SVGA3D_MAKE_HWVERSION(0, 1),
+   SVGA3D_HWVERSION_WS5_RC2   = SVGA3D_MAKE_HWVERSION(0, 2),
+   SVGA3D_HWVERSION_WS51_RC1  = SVGA3D_MAKE_HWVERSION(0, 3),
+   SVGA3D_HWVERSION_WS6_B1    = SVGA3D_MAKE_HWVERSION(1, 1),
+   SVGA3D_HWVERSION_FUSION_11 = SVGA3D_MAKE_HWVERSION(1, 4),
+   SVGA3D_HWVERSION_WS65_B1   = SVGA3D_MAKE_HWVERSION(2, 0),
+   SVGA3D_HWVERSION_WS8_B1    = SVGA3D_MAKE_HWVERSION(2, 1),
+   SVGA3D_HWVERSION_CURRENT   = SVGA3D_HWVERSION_WS8_B1
+} SVGA3dHardwareVersion;
+
+/*
+ * Generic Types
+ */
+
+typedef uint32_t SVGA3dBool; /* 32-bit Bool definition */
+#define SVGA3D_NUM_CLIPPLANES                   6
+#define SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS  8
+#define SVGA3D_MAX_CONTEXT_IDS                  256
+#define SVGA3D_MAX_SURFACE_IDS                  (32 * 1024)
+
+/*
+ * Surface formats.
+ *
+ * If you modify this list, be sure to keep GLUtil.c in sync. It
+ * includes the internal format definition of each surface in
+ * GLUtil_ConvertSurfaceFormat, and it contains a table of
+ * human-readable names in GLUtil_GetFormatName.
+ */
+
+typedef enum SVGA3dSurfaceFormat {
+   SVGA3D_FORMAT_INVALID               = 0,
+
+   SVGA3D_X8R8G8B8                     = 1,
+   SVGA3D_A8R8G8B8                     = 2,
+
+   SVGA3D_R5G6B5                       = 3,
+   SVGA3D_X1R5G5B5                     = 4,
+   SVGA3D_A1R5G5B5                     = 5,
+   SVGA3D_A4R4G4B4                     = 6,
+
+   SVGA3D_Z_D32                        = 7,
+   SVGA3D_Z_D16                        = 8,
+   SVGA3D_Z_D24S8                      = 9,
+   SVGA3D_Z_D15S1                      = 10,
+
+   SVGA3D_LUMINANCE8                   = 11,
+   SVGA3D_LUMINANCE4_ALPHA4            = 12,
+   SVGA3D_LUMINANCE16                  = 13,
+   SVGA3D_LUMINANCE8_ALPHA8            = 14,
+
+   SVGA3D_DXT1                         = 15,
+   SVGA3D_DXT2                         = 16,
+   SVGA3D_DXT3                         = 17,
+   SVGA3D_DXT4                         = 18,
+   SVGA3D_DXT5                         = 19,
+
+   SVGA3D_BUMPU8V8                     = 20,
+   SVGA3D_BUMPL6V5U5                   = 21,
+   SVGA3D_BUMPX8L8V8U8                 = 22,
+   SVGA3D_BUMPL8V8U8                   = 23,
+
+   SVGA3D_ARGB_S10E5                   = 24,   /* 16-bit floating-point ARGB */
+   SVGA3D_ARGB_S23E8                   = 25,   /* 32-bit floating-point ARGB */
+
+   SVGA3D_A2R10G10B10                  = 26,
+
+   /* signed formats */
+   SVGA3D_V8U8                         = 27,
+   SVGA3D_Q8W8V8U8                     = 28,
+   SVGA3D_CxV8U8                       = 29,
+
+   /* mixed formats */
+   SVGA3D_X8L8V8U8                     = 30,
+   SVGA3D_A2W10V10U10                  = 31,
+
+   SVGA3D_ALPHA8                       = 32,
+
+   /* Single- and dual-component floating point formats */
+   SVGA3D_R_S10E5                      = 33,
+   SVGA3D_R_S23E8                      = 34,
+   SVGA3D_RG_S10E5                     = 35,
+   SVGA3D_RG_S23E8                     = 36,
+
+   /*
+    * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+    * the most efficient format to use when creating new surfaces
+    * expressly for index or vertex data.
+    */
+
+   SVGA3D_BUFFER                       = 37,
+
+   SVGA3D_Z_D24X8                      = 38,
+
+   SVGA3D_V16U16                       = 39,
+
+   SVGA3D_G16R16                       = 40,
+   SVGA3D_A16B16G16R16                 = 41,
+
+   /* Packed Video formats */
+   SVGA3D_UYVY                         = 42,
+   SVGA3D_YUY2                         = 43,
+
+   /* Planar video formats */
+   SVGA3D_NV12                         = 44,
+
+   /* Video format with alpha */
+   SVGA3D_AYUV                         = 45,
+
+   SVGA3D_BC4_UNORM                    = 108,
+   SVGA3D_BC5_UNORM                    = 111,
+
+   /* Advanced D3D9 depth formats. */
+   SVGA3D_Z_DF16                       = 118,
+   SVGA3D_Z_DF24                       = 119,
+   SVGA3D_Z_D24S8_INT                  = 120,
+
+   SVGA3D_FORMAT_MAX
+} SVGA3dSurfaceFormat;
+
+typedef uint32_t SVGA3dColor; /* a, r, g, b */
+
+/*
+ * These match the D3DFORMAT_OP definitions used by Direct3D. We need
+ * them so that we can query the host for what the supported surface
+ * operations are (when we're using the D3D backend, in particular),
+ * and so we can send those operations to the guest.
+ */
+typedef enum {
+   SVGA3DFORMAT_OP_TEXTURE                               = 0x00000001,
+   SVGA3DFORMAT_OP_VOLUMETEXTURE                         = 0x00000002,
+   SVGA3DFORMAT_OP_CUBETEXTURE                           = 0x00000004,
+   SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET                = 0x00000008,
+   SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET              = 0x00000010,
+   SVGA3DFORMAT_OP_ZSTENCIL                              = 0x00000040,
+   SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH   = 0x00000080,
+
+/*
+ * This format can be used as a render target if the current display mode
+ * is the same depth if the alpha channel is ignored. e.g. if the device
+ * can render to A8R8G8B8 when the display mode is X8R8G8B8, then the
+ * format op list entry for A8R8G8B8 should have this cap.
+ */
+   SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET  = 0x00000100,
+
+/*
+ * This format contains DirectDraw support (including Flip).  This flag
+ * should not to be set on alpha formats.
+ */
+   SVGA3DFORMAT_OP_DISPLAYMODE                           = 0x00000400,
+
+/*
+ * The rasterizer can support some level of Direct3D support in this format
+ * and implies that the driver can create a Context in this mode (for some
+ * render target format).  When this flag is set, the SVGA3DFORMAT_OP_DISPLAYMODE
+ * flag must also be set.
+ */
+   SVGA3DFORMAT_OP_3DACCELERATION                        = 0x00000800,
+
+/*
+ * This is set for a private format when the driver has put the bpp in
+ * the structure.
+ */
+   SVGA3DFORMAT_OP_PIXELSIZE                             = 0x00001000,
+
+/*
+ * Indicates that this format can be converted to any RGB format for which
+ * SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB is specified
+ */
+   SVGA3DFORMAT_OP_CONVERT_TO_ARGB                       = 0x00002000,
+
+/*
+ * Indicates that this format can be used to create offscreen plain surfaces.
+ */
+   SVGA3DFORMAT_OP_OFFSCREENPLAIN                        = 0x00004000,
+
+/*
+ * Indicated that this format can be read as an SRGB texture (meaning that the
+ * sampler will linearize the looked up data)
+ */
+   SVGA3DFORMAT_OP_SRGBREAD                              = 0x00008000,
+
+/*
+ * Indicates that this format can be used in the bumpmap instructions
+ */
+   SVGA3DFORMAT_OP_BUMPMAP                               = 0x00010000,
+
+/*
+ * Indicates that this format can be sampled by the displacement map sampler
+ */
+   SVGA3DFORMAT_OP_DMAP                                  = 0x00020000,
+
+/*
+ * Indicates that this format cannot be used with texture filtering
+ */
+   SVGA3DFORMAT_OP_NOFILTER                              = 0x00040000,
+
+/*
+ * Indicates that format conversions are supported to this RGB format if
+ * SVGA3DFORMAT_OP_CONVERT_TO_ARGB is specified in the source format.
+ */
+   SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB                    = 0x00080000,
+
+/*
+ * Indicated that this format can be written as an SRGB target (meaning that the
+ * pixel pipe will DE-linearize data on output to format)
+ */
+   SVGA3DFORMAT_OP_SRGBWRITE                             = 0x00100000,
+
+/*
+ * Indicates that this format cannot be used with alpha blending
+ */
+   SVGA3DFORMAT_OP_NOALPHABLEND                          = 0x00200000,
+
+/*
+ * Indicates that the device can auto-generated sublevels for resources
+ * of this format
+ */
+   SVGA3DFORMAT_OP_AUTOGENMIPMAP                         = 0x00400000,
+
+/*
+ * Indicates that this format can be used by vertex texture sampler
+ */
+   SVGA3DFORMAT_OP_VERTEXTEXTURE                         = 0x00800000,
+
+/*
+ * Indicates that this format supports neither texture coordinate wrap
+ * modes, nor mipmapping
+ */
+   SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP                  = 0x01000000
+} SVGA3dFormatOp;
+
+/*
+ * This structure is a conversion of SVGA3DFORMAT_OP_*.
+ * Entries must be located at the same position.
+ */
+typedef union {
+   uint32_t value;
+   struct {
+      uint32_t texture : 1;
+      uint32_t volumeTexture : 1;
+      uint32_t cubeTexture : 1;
+      uint32_t offscreenRenderTarget : 1;
+      uint32_t sameFormatRenderTarget : 1;
+      uint32_t unknown1 : 1;
+      uint32_t zStencil : 1;
+      uint32_t zStencilArbitraryDepth : 1;
+      uint32_t sameFormatUpToAlpha : 1;
+      uint32_t unknown2 : 1;
+      uint32_t displayMode : 1;
+      uint32_t acceleration3d : 1;
+      uint32_t pixelSize : 1;
+      uint32_t convertToARGB : 1;
+      uint32_t offscreenPlain : 1;
+      uint32_t sRGBRead : 1;
+      uint32_t bumpMap : 1;
+      uint32_t dmap : 1;
+      uint32_t noFilter : 1;
+      uint32_t memberOfGroupARGB : 1;
+      uint32_t sRGBWrite : 1;
+      uint32_t noAlphaBlend : 1;
+      uint32_t autoGenMipMap : 1;
+      uint32_t vertexTexture : 1;
+      uint32_t noTexCoordWrapNorMip : 1;
+   } s;
+} SVGA3dSurfaceFormatCaps;
+
+/*
+ * SVGA_3D_CMD_SETRENDERSTATE Types.  All value types
+ * must fit in a uint32_t.
+ */
+
+typedef enum {
+   SVGA3D_RS_INVALID                   = 0,
+   SVGA3D_RS_ZENABLE                   = 1,     /* SVGA3dBool */
+   SVGA3D_RS_ZWRITEENABLE              = 2,     /* SVGA3dBool */
+   SVGA3D_RS_ALPHATESTENABLE           = 3,     /* SVGA3dBool */
+   SVGA3D_RS_DITHERENABLE              = 4,     /* SVGA3dBool */
+   SVGA3D_RS_BLENDENABLE               = 5,     /* SVGA3dBool */
+   SVGA3D_RS_FOGENABLE                 = 6,     /* SVGA3dBool */
+   SVGA3D_RS_SPECULARENABLE            = 7,     /* SVGA3dBool */
+   SVGA3D_RS_STENCILENABLE             = 8,     /* SVGA3dBool */
+   SVGA3D_RS_LIGHTINGENABLE            = 9,     /* SVGA3dBool */
+   SVGA3D_RS_NORMALIZENORMALS          = 10,    /* SVGA3dBool */
+   SVGA3D_RS_POINTSPRITEENABLE         = 11,    /* SVGA3dBool */
+   SVGA3D_RS_POINTSCALEENABLE          = 12,    /* SVGA3dBool */
+   SVGA3D_RS_STENCILREF                = 13,    /* uint32_t */
+   SVGA3D_RS_STENCILMASK               = 14,    /* uint32_t */
+   SVGA3D_RS_STENCILWRITEMASK          = 15,    /* uint32_t */
+   SVGA3D_RS_FOGSTART                  = 16,    /* float */
+   SVGA3D_RS_FOGEND                    = 17,    /* float */
+   SVGA3D_RS_FOGDENSITY                = 18,    /* float */
+   SVGA3D_RS_POINTSIZE                 = 19,    /* float */
+   SVGA3D_RS_POINTSIZEMIN              = 20,    /* float */
+   SVGA3D_RS_POINTSIZEMAX              = 21,    /* float */
+   SVGA3D_RS_POINTSCALE_A              = 22,    /* float */
+   SVGA3D_RS_POINTSCALE_B              = 23,    /* float */
+   SVGA3D_RS_POINTSCALE_C              = 24,    /* float */
+   SVGA3D_RS_FOGCOLOR                  = 25,    /* SVGA3dColor */
+   SVGA3D_RS_AMBIENT                   = 26,    /* SVGA3dColor */
+   SVGA3D_RS_CLIPPLANEENABLE           = 27,    /* SVGA3dClipPlanes */
+   SVGA3D_RS_FOGMODE                   = 28,    /* SVGA3dFogMode */
+   SVGA3D_RS_FILLMODE                  = 29,    /* SVGA3dFillMode */
+   SVGA3D_RS_SHADEMODE                 = 30,    /* SVGA3dShadeMode */
+   SVGA3D_RS_LINEPATTERN               = 31,    /* SVGA3dLinePattern */
+   SVGA3D_RS_SRCBLEND                  = 32,    /* SVGA3dBlendOp */
+   SVGA3D_RS_DSTBLEND                  = 33,    /* SVGA3dBlendOp */
+   SVGA3D_RS_BLENDEQUATION             = 34,    /* SVGA3dBlendEquation */
+   SVGA3D_RS_CULLMODE                  = 35,    /* SVGA3dFace */
+   SVGA3D_RS_ZFUNC                     = 36,    /* SVGA3dCmpFunc */
+   SVGA3D_RS_ALPHAFUNC                 = 37,    /* SVGA3dCmpFunc */
+   SVGA3D_RS_STENCILFUNC               = 38,    /* SVGA3dCmpFunc */
+   SVGA3D_RS_STENCILFAIL               = 39,    /* SVGA3dStencilOp */
+   SVGA3D_RS_STENCILZFAIL              = 40,    /* SVGA3dStencilOp */
+   SVGA3D_RS_STENCILPASS               = 41,    /* SVGA3dStencilOp */
+   SVGA3D_RS_ALPHAREF                  = 42,    /* float (0.0 .. 1.0) */
+   SVGA3D_RS_FRONTWINDING              = 43,    /* SVGA3dFrontWinding */
+   SVGA3D_RS_COORDINATETYPE            = 44,    /* SVGA3dCoordinateType */
+   SVGA3D_RS_ZBIAS                     = 45,    /* float */
+   SVGA3D_RS_RANGEFOGENABLE            = 46,    /* SVGA3dBool */
+   SVGA3D_RS_COLORWRITEENABLE          = 47,    /* SVGA3dColorMask */
+   SVGA3D_RS_VERTEXMATERIALENABLE      = 48,    /* SVGA3dBool */
+   SVGA3D_RS_DIFFUSEMATERIALSOURCE     = 49,    /* SVGA3dVertexMaterial */
+   SVGA3D_RS_SPECULARMATERIALSOURCE    = 50,    /* SVGA3dVertexMaterial */
+   SVGA3D_RS_AMBIENTMATERIALSOURCE     = 51,    /* SVGA3dVertexMaterial */
+   SVGA3D_RS_EMISSIVEMATERIALSOURCE    = 52,    /* SVGA3dVertexMaterial */
+   SVGA3D_RS_TEXTUREFACTOR             = 53,    /* SVGA3dColor */
+   SVGA3D_RS_LOCALVIEWER               = 54,    /* SVGA3dBool */
+   SVGA3D_RS_SCISSORTESTENABLE         = 55,    /* SVGA3dBool */
+   SVGA3D_RS_BLENDCOLOR                = 56,    /* SVGA3dColor */
+   SVGA3D_RS_STENCILENABLE2SIDED       = 57,    /* SVGA3dBool */
+   SVGA3D_RS_CCWSTENCILFUNC            = 58,    /* SVGA3dCmpFunc */
+   SVGA3D_RS_CCWSTENCILFAIL            = 59,    /* SVGA3dStencilOp */
+   SVGA3D_RS_CCWSTENCILZFAIL           = 60,    /* SVGA3dStencilOp */
+   SVGA3D_RS_CCWSTENCILPASS            = 61,    /* SVGA3dStencilOp */
+   SVGA3D_RS_VERTEXBLEND               = 62,    /* SVGA3dVertexBlendFlags */
+   SVGA3D_RS_SLOPESCALEDEPTHBIAS       = 63,    /* float */
+   SVGA3D_RS_DEPTHBIAS                 = 64,    /* float */
+
+
+   /*
+    * Output Gamma Level
+    *
+    * Output gamma effects the gamma curve of colors that are output from the
+    * rendering pipeline.  A value of 1.0 specifies a linear color space. If the
+    * value is <= 0.0, gamma correction is ignored and linear color space is
+    * used.
+    */
+
+   SVGA3D_RS_OUTPUTGAMMA               = 65,    /* float */
+   SVGA3D_RS_ZVISIBLE                  = 66,    /* SVGA3dBool */
+   SVGA3D_RS_LASTPIXEL                 = 67,    /* SVGA3dBool */
+   SVGA3D_RS_CLIPPING                  = 68,    /* SVGA3dBool */
+   SVGA3D_RS_WRAP0                     = 69,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP1                     = 70,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP2                     = 71,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP3                     = 72,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP4                     = 73,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP5                     = 74,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP6                     = 75,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP7                     = 76,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP8                     = 77,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP9                     = 78,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP10                    = 79,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP11                    = 80,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP12                    = 81,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP13                    = 82,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP14                    = 83,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_WRAP15                    = 84,    /* SVGA3dWrapFlags */
+   SVGA3D_RS_MULTISAMPLEANTIALIAS      = 85,    /* SVGA3dBool */
+   SVGA3D_RS_MULTISAMPLEMASK           = 86,    /* uint32_t */
+   SVGA3D_RS_INDEXEDVERTEXBLENDENABLE  = 87,    /* SVGA3dBool */
+   SVGA3D_RS_TWEENFACTOR               = 88,    /* float */
+   SVGA3D_RS_ANTIALIASEDLINEENABLE     = 89,    /* SVGA3dBool */
+   SVGA3D_RS_COLORWRITEENABLE1         = 90,    /* SVGA3dColorMask */
+   SVGA3D_RS_COLORWRITEENABLE2         = 91,    /* SVGA3dColorMask */
+   SVGA3D_RS_COLORWRITEENABLE3         = 92,    /* SVGA3dColorMask */
+   SVGA3D_RS_SEPARATEALPHABLENDENABLE  = 93,    /* SVGA3dBool */
+   SVGA3D_RS_SRCBLENDALPHA             = 94,    /* SVGA3dBlendOp */
+   SVGA3D_RS_DSTBLENDALPHA             = 95,    /* SVGA3dBlendOp */
+   SVGA3D_RS_BLENDEQUATIONALPHA        = 96,    /* SVGA3dBlendEquation */
+   SVGA3D_RS_TRANSPARENCYANTIALIAS     = 97,    /* SVGA3dTransparencyAntialiasType */
+   SVGA3D_RS_LINEAA                    = 98,    /* SVGA3dBool */
+   SVGA3D_RS_LINEWIDTH                 = 99,    /* float */
+   SVGA3D_RS_MAX
+} SVGA3dRenderStateName;
+
+typedef enum {
+   SVGA3D_TRANSPARENCYANTIALIAS_NORMAL            = 0,
+   SVGA3D_TRANSPARENCYANTIALIAS_ALPHATOCOVERAGE   = 1,
+   SVGA3D_TRANSPARENCYANTIALIAS_SUPERSAMPLE       = 2,
+   SVGA3D_TRANSPARENCYANTIALIAS_MAX
+} SVGA3dTransparencyAntialiasType;
+
+typedef enum {
+   SVGA3D_VERTEXMATERIAL_NONE     = 0,    /* Use the value in the current material */
+   SVGA3D_VERTEXMATERIAL_DIFFUSE  = 1,    /* Use the value in the diffuse component */
+   SVGA3D_VERTEXMATERIAL_SPECULAR = 2     /* Use the value in the specular component */
+} SVGA3dVertexMaterial;
+
+typedef enum {
+   SVGA3D_FILLMODE_INVALID = 0,
+   SVGA3D_FILLMODE_POINT   = 1,
+   SVGA3D_FILLMODE_LINE    = 2,
+   SVGA3D_FILLMODE_FILL    = 3,
+   SVGA3D_FILLMODE_MAX
+} SVGA3dFillModeType;
+
+
+typedef
+union {
+   struct {
+      uint16_t   mode;       /* SVGA3dFillModeType */
+      uint16_t   face;       /* SVGA3dFace */
+   } s;
+   uint32_t uintValue;
+} SVGA3dFillMode;
+
+typedef enum {
+   SVGA3D_SHADEMODE_INVALID = 0,
+   SVGA3D_SHADEMODE_FLAT    = 1,
+   SVGA3D_SHADEMODE_SMOOTH  = 2,
+   SVGA3D_SHADEMODE_PHONG   = 3,     /* Not supported */
+   SVGA3D_SHADEMODE_MAX
+} SVGA3dShadeMode;
+
+typedef
+union {
+   struct {
+      uint16_t repeat;
+      uint16_t pattern;
+   } s;
+   uint32_t uintValue;
+} SVGA3dLinePattern;
+
+typedef enum {
+   SVGA3D_BLENDOP_INVALID            = 0,
+   SVGA3D_BLENDOP_ZERO               = 1,
+   SVGA3D_BLENDOP_ONE                = 2,
+   SVGA3D_BLENDOP_SRCCOLOR           = 3,
+   SVGA3D_BLENDOP_INVSRCCOLOR        = 4,
+   SVGA3D_BLENDOP_SRCALPHA           = 5,
+   SVGA3D_BLENDOP_INVSRCALPHA        = 6,
+   SVGA3D_BLENDOP_DESTALPHA          = 7,
+   SVGA3D_BLENDOP_INVDESTALPHA       = 8,
+   SVGA3D_BLENDOP_DESTCOLOR          = 9,
+   SVGA3D_BLENDOP_INVDESTCOLOR       = 10,
+   SVGA3D_BLENDOP_SRCALPHASAT        = 11,
+   SVGA3D_BLENDOP_BLENDFACTOR        = 12,
+   SVGA3D_BLENDOP_INVBLENDFACTOR     = 13,
+   SVGA3D_BLENDOP_MAX
+} SVGA3dBlendOp;
+
+typedef enum {
+   SVGA3D_BLENDEQ_INVALID            = 0,
+   SVGA3D_BLENDEQ_ADD                = 1,
+   SVGA3D_BLENDEQ_SUBTRACT           = 2,
+   SVGA3D_BLENDEQ_REVSUBTRACT        = 3,
+   SVGA3D_BLENDEQ_MINIMUM            = 4,
+   SVGA3D_BLENDEQ_MAXIMUM            = 5,
+   SVGA3D_BLENDEQ_MAX
+} SVGA3dBlendEquation;
+
+typedef enum {
+   SVGA3D_FRONTWINDING_INVALID = 0,
+   SVGA3D_FRONTWINDING_CW      = 1,
+   SVGA3D_FRONTWINDING_CCW     = 2,
+   SVGA3D_FRONTWINDING_MAX
+} SVGA3dFrontWinding;
+
+typedef enum {
+   SVGA3D_FACE_INVALID  = 0,
+   SVGA3D_FACE_NONE     = 1,
+   SVGA3D_FACE_FRONT    = 2,
+   SVGA3D_FACE_BACK     = 3,
+   SVGA3D_FACE_FRONT_BACK = 4,
+   SVGA3D_FACE_MAX
+} SVGA3dFace;
+
+/*
+ * The order and the values should not be changed
+ */
+
+typedef enum {
+   SVGA3D_CMP_INVALID              = 0,
+   SVGA3D_CMP_NEVER                = 1,
+   SVGA3D_CMP_LESS                 = 2,
+   SVGA3D_CMP_EQUAL                = 3,
+   SVGA3D_CMP_LESSEQUAL            = 4,
+   SVGA3D_CMP_GREATER              = 5,
+   SVGA3D_CMP_NOTEQUAL             = 6,
+   SVGA3D_CMP_GREATEREQUAL         = 7,
+   SVGA3D_CMP_ALWAYS               = 8,
+   SVGA3D_CMP_MAX
+} SVGA3dCmpFunc;
+
+/*
+ * SVGA3D_FOGFUNC_* specifies the fog equation, or PER_VERTEX which allows
+ * the fog factor to be specified in the alpha component of the specular
+ * (a.k.a. secondary) vertex color.
+ */
+typedef enum {
+   SVGA3D_FOGFUNC_INVALID          = 0,
+   SVGA3D_FOGFUNC_EXP              = 1,
+   SVGA3D_FOGFUNC_EXP2             = 2,
+   SVGA3D_FOGFUNC_LINEAR           = 3,
+   SVGA3D_FOGFUNC_PER_VERTEX       = 4
+} SVGA3dFogFunction;
+
+/*
+ * SVGA3D_FOGTYPE_* specifies if fog factors are computed on a per-vertex
+ * or per-pixel basis.
+ */
+typedef enum {
+   SVGA3D_FOGTYPE_INVALID          = 0,
+   SVGA3D_FOGTYPE_VERTEX           = 1,
+   SVGA3D_FOGTYPE_PIXEL            = 2,
+   SVGA3D_FOGTYPE_MAX              = 3
+} SVGA3dFogType;
+
+/*
+ * SVGA3D_FOGBASE_* selects depth or range-based fog. Depth-based fog is
+ * computed using the eye Z value of each pixel (or vertex), whereas range-
+ * based fog is computed using the actual distance (range) to the eye.
+ */
+typedef enum {
+   SVGA3D_FOGBASE_INVALID          = 0,
+   SVGA3D_FOGBASE_DEPTHBASED       = 1,
+   SVGA3D_FOGBASE_RANGEBASED       = 2,
+   SVGA3D_FOGBASE_MAX              = 3
+} SVGA3dFogBase;
+
+typedef enum {
+   SVGA3D_STENCILOP_INVALID        = 0,
+   SVGA3D_STENCILOP_KEEP           = 1,
+   SVGA3D_STENCILOP_ZERO           = 2,
+   SVGA3D_STENCILOP_REPLACE        = 3,
+   SVGA3D_STENCILOP_INCRSAT        = 4,
+   SVGA3D_STENCILOP_DECRSAT        = 5,
+   SVGA3D_STENCILOP_INVERT         = 6,
+   SVGA3D_STENCILOP_INCR           = 7,
+   SVGA3D_STENCILOP_DECR           = 8,
+   SVGA3D_STENCILOP_MAX
+} SVGA3dStencilOp;
+
+typedef enum {
+   SVGA3D_CLIPPLANE_0              = (1 << 0),
+   SVGA3D_CLIPPLANE_1              = (1 << 1),
+   SVGA3D_CLIPPLANE_2              = (1 << 2),
+   SVGA3D_CLIPPLANE_3              = (1 << 3),
+   SVGA3D_CLIPPLANE_4              = (1 << 4),
+   SVGA3D_CLIPPLANE_5              = (1 << 5),
+   SVGA3D_CLIPPLANE_MAX            = SVGA3D_CLIPPLANE_5
+} SVGA3dClipPlanes;
+
+typedef enum {
+   SVGA3D_CLEAR_COLOR              = 0x1,
+   SVGA3D_CLEAR_DEPTH              = 0x2,
+   SVGA3D_CLEAR_STENCIL            = 0x4
+} SVGA3dClearFlag;
+
+typedef enum {
+   SVGA3D_RT_DEPTH                 = 0,
+   SVGA3D_RT_STENCIL               = 1,
+   SVGA3D_RT_COLOR0                = 2,
+   SVGA3D_RT_COLOR1                = 3,
+   SVGA3D_RT_COLOR2                = 4,
+   SVGA3D_RT_COLOR3                = 5,
+   SVGA3D_RT_COLOR4                = 6,
+   SVGA3D_RT_COLOR5                = 7,
+   SVGA3D_RT_COLOR6                = 8,
+   SVGA3D_RT_COLOR7                = 9,
+   SVGA3D_RT_MAX,
+   SVGA3D_RT_INVALID               = ((uint32_t)-1)
+} SVGA3dRenderTargetType;
+
+#define SVGA3D_MAX_RT_COLOR (SVGA3D_RT_COLOR7 - SVGA3D_RT_COLOR0 + 1)
+
+typedef
+union {
+   struct {
+      uint32_t  red   : 1;
+      uint32_t  green : 1;
+      uint32_t  blue  : 1;
+      uint32_t  alpha : 1;
+   } s;
+   uint32_t uintValue;
+} SVGA3dColorMask;
+
+typedef enum {
+   SVGA3D_VBLEND_DISABLE            = 0,
+   SVGA3D_VBLEND_1WEIGHT            = 1,
+   SVGA3D_VBLEND_2WEIGHT            = 2,
+   SVGA3D_VBLEND_3WEIGHT            = 3
+} SVGA3dVertexBlendFlags;
+
+typedef enum {
+   SVGA3D_WRAPCOORD_0   = 1 << 0,
+   SVGA3D_WRAPCOORD_1   = 1 << 1,
+   SVGA3D_WRAPCOORD_2   = 1 << 2,
+   SVGA3D_WRAPCOORD_3   = 1 << 3,
+   SVGA3D_WRAPCOORD_ALL = 0xF
+} SVGA3dWrapFlags;
+
+/*
+ * SVGA_3D_CMD_TEXTURESTATE Types.  All value types
+ * must fit in a uint32_t.
+ */
+
+typedef enum {
+   SVGA3D_TS_INVALID                    = 0,
+   SVGA3D_TS_BIND_TEXTURE               = 1,    /* SVGA3dSurfaceId */
+   SVGA3D_TS_COLOROP                    = 2,    /* SVGA3dTextureCombiner */
+   SVGA3D_TS_COLORARG1                  = 3,    /* SVGA3dTextureArgData */
+   SVGA3D_TS_COLORARG2                  = 4,    /* SVGA3dTextureArgData */
+   SVGA3D_TS_ALPHAOP                    = 5,    /* SVGA3dTextureCombiner */
+   SVGA3D_TS_ALPHAARG1                  = 6,    /* SVGA3dTextureArgData */
+   SVGA3D_TS_ALPHAARG2                  = 7,    /* SVGA3dTextureArgData */
+   SVGA3D_TS_ADDRESSU                   = 8,    /* SVGA3dTextureAddress */
+   SVGA3D_TS_ADDRESSV                   = 9,    /* SVGA3dTextureAddress */
+   SVGA3D_TS_MIPFILTER                  = 10,   /* SVGA3dTextureFilter */
+   SVGA3D_TS_MAGFILTER                  = 11,   /* SVGA3dTextureFilter */
+   SVGA3D_TS_MINFILTER                  = 12,   /* SVGA3dTextureFilter */
+   SVGA3D_TS_BORDERCOLOR                = 13,   /* SVGA3dColor */
+   SVGA3D_TS_TEXCOORDINDEX              = 14,   /* uint32_t */
+   SVGA3D_TS_TEXTURETRANSFORMFLAGS      = 15,   /* SVGA3dTexTransformFlags */
+   SVGA3D_TS_TEXCOORDGEN                = 16,   /* SVGA3dTextureCoordGen */
+   SVGA3D_TS_BUMPENVMAT00               = 17,   /* float */
+   SVGA3D_TS_BUMPENVMAT01               = 18,   /* float */
+   SVGA3D_TS_BUMPENVMAT10               = 19,   /* float */
+   SVGA3D_TS_BUMPENVMAT11               = 20,   /* float */
+   SVGA3D_TS_TEXTURE_MIPMAP_LEVEL       = 21,   /* uint32_t */
+   SVGA3D_TS_TEXTURE_LOD_BIAS           = 22,   /* float */
+   SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL  = 23,   /* uint32_t */
+   SVGA3D_TS_ADDRESSW                   = 24,   /* SVGA3dTextureAddress */
+
+
+   /*
+    * Sampler Gamma Level
+    *
+    * Sampler gamma effects the color of samples taken from the sampler.  A
+    * value of 1.0 will produce linear samples.  If the value is <= 0.0 the
+    * gamma value is ignored and a linear space is used.
+    */
+
+   SVGA3D_TS_GAMMA                      = 25,   /* float */
+   SVGA3D_TS_BUMPENVLSCALE              = 26,   /* float */
+   SVGA3D_TS_BUMPENVLOFFSET             = 27,   /* float */
+   SVGA3D_TS_COLORARG0                  = 28,   /* SVGA3dTextureArgData */
+   SVGA3D_TS_ALPHAARG0                  = 29,   /* SVGA3dTextureArgData */
+   SVGA3D_TS_MAX
+} SVGA3dTextureStateName;
+
+typedef enum {
+   SVGA3D_TC_INVALID                   = 0,
+   SVGA3D_TC_DISABLE                   = 1,
+   SVGA3D_TC_SELECTARG1                = 2,
+   SVGA3D_TC_SELECTARG2                = 3,
+   SVGA3D_TC_MODULATE                  = 4,
+   SVGA3D_TC_ADD                       = 5,
+   SVGA3D_TC_ADDSIGNED                 = 6,
+   SVGA3D_TC_SUBTRACT                  = 7,
+   SVGA3D_TC_BLENDTEXTUREALPHA         = 8,
+   SVGA3D_TC_BLENDDIFFUSEALPHA         = 9,
+   SVGA3D_TC_BLENDCURRENTALPHA         = 10,
+   SVGA3D_TC_BLENDFACTORALPHA          = 11,
+   SVGA3D_TC_MODULATE2X                = 12,
+   SVGA3D_TC_MODULATE4X                = 13,
+   SVGA3D_TC_DSDT                      = 14,
+   SVGA3D_TC_DOTPRODUCT3               = 15,
+   SVGA3D_TC_BLENDTEXTUREALPHAPM       = 16,
+   SVGA3D_TC_ADDSIGNED2X               = 17,
+   SVGA3D_TC_ADDSMOOTH                 = 18,
+   SVGA3D_TC_PREMODULATE               = 19,
+   SVGA3D_TC_MODULATEALPHA_ADDCOLOR    = 20,
+   SVGA3D_TC_MODULATECOLOR_ADDALPHA    = 21,
+   SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR = 22,
+   SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA = 23,
+   SVGA3D_TC_BUMPENVMAPLUMINANCE       = 24,
+   SVGA3D_TC_MULTIPLYADD               = 25,
+   SVGA3D_TC_LERP                      = 26,
+   SVGA3D_TC_MAX
+} SVGA3dTextureCombiner;
+
+#define SVGA3D_TC_CAP_BIT(svga3d_tc_op) (svga3d_tc_op ? (1 << (svga3d_tc_op - 1)) : 0)
+
+typedef enum {
+   SVGA3D_TEX_ADDRESS_INVALID    = 0,
+   SVGA3D_TEX_ADDRESS_WRAP       = 1,
+   SVGA3D_TEX_ADDRESS_MIRROR     = 2,
+   SVGA3D_TEX_ADDRESS_CLAMP      = 3,
+   SVGA3D_TEX_ADDRESS_BORDER     = 4,
+   SVGA3D_TEX_ADDRESS_MIRRORONCE = 5,
+   SVGA3D_TEX_ADDRESS_EDGE       = 6,
+   SVGA3D_TEX_ADDRESS_MAX
+} SVGA3dTextureAddress;
+
+/*
+ * SVGA3D_TEX_FILTER_NONE as the minification filter means mipmapping is
+ * disabled, and the rasterizer should use the magnification filter instead.
+ */
+typedef enum {
+   SVGA3D_TEX_FILTER_NONE           = 0,
+   SVGA3D_TEX_FILTER_NEAREST        = 1,
+   SVGA3D_TEX_FILTER_LINEAR         = 2,
+   SVGA3D_TEX_FILTER_ANISOTROPIC    = 3,
+   SVGA3D_TEX_FILTER_FLATCUBIC      = 4, // Deprecated, not implemented
+   SVGA3D_TEX_FILTER_GAUSSIANCUBIC  = 5, // Deprecated, not implemented
+   SVGA3D_TEX_FILTER_PYRAMIDALQUAD  = 6, // Not currently implemented
+   SVGA3D_TEX_FILTER_GAUSSIANQUAD   = 7, // Not currently implemented
+   SVGA3D_TEX_FILTER_MAX
+} SVGA3dTextureFilter;
+
+typedef enum {
+   SVGA3D_TEX_TRANSFORM_OFF    = 0,
+   SVGA3D_TEX_TRANSFORM_S      = (1 << 0),
+   SVGA3D_TEX_TRANSFORM_T      = (1 << 1),
+   SVGA3D_TEX_TRANSFORM_R      = (1 << 2),
+   SVGA3D_TEX_TRANSFORM_Q      = (1 << 3),
+   SVGA3D_TEX_PROJECTED        = (1 << 15)
+} SVGA3dTexTransformFlags;
+
+typedef enum {
+   SVGA3D_TEXCOORD_GEN_OFF              = 0,
+   SVGA3D_TEXCOORD_GEN_EYE_POSITION     = 1,
+   SVGA3D_TEXCOORD_GEN_EYE_NORMAL       = 2,
+   SVGA3D_TEXCOORD_GEN_REFLECTIONVECTOR = 3,
+   SVGA3D_TEXCOORD_GEN_SPHERE           = 4,
+   SVGA3D_TEXCOORD_GEN_MAX
+} SVGA3dTextureCoordGen;
+
+/*
+ * Texture argument constants for texture combiner
+ */
+typedef enum {
+   SVGA3D_TA_INVALID    = 0,
+   SVGA3D_TA_CONSTANT   = 1,
+   SVGA3D_TA_PREVIOUS   = 2,
+   SVGA3D_TA_DIFFUSE    = 3,
+   SVGA3D_TA_TEXTURE    = 4,
+   SVGA3D_TA_SPECULAR   = 5,
+   SVGA3D_TA_MAX
+} SVGA3dTextureArgData;
+
+#define SVGA3D_TM_MASK_LEN 4
+
+/* Modifiers for texture argument constants defined above. */
+typedef enum {
+   SVGA3D_TM_NONE       = 0,
+   SVGA3D_TM_ALPHA      = (1 << SVGA3D_TM_MASK_LEN),
+   SVGA3D_TM_ONE_MINUS  = (2 << SVGA3D_TM_MASK_LEN)
+} SVGA3dTextureArgModifier;
+
+#define SVGA3D_INVALID_ID         ((uint32_t)-1)
+#define SVGA3D_MAX_CLIP_PLANES    6
+
+/*
+ * This is the limit to the number of fixed-function texture
+ * transforms and texture coordinates we can support. It does *not*
+ * correspond to the number of texture image units (samplers) we
+ * support!
+ */
+#define SVGA3D_MAX_TEXTURE_COORDS 8
+
+/*
+ * Vertex declarations
+ *
+ * Notes:
+ *
+ * SVGA3D_DECLUSAGE_POSITIONT is for pre-transformed vertices. If you
+ * draw with any POSITIONT vertex arrays, the programmable vertex
+ * pipeline will be implicitly disabled. Drawing will take place as if
+ * no vertex shader was bound.
+ */
+
+typedef enum {
+   SVGA3D_DECLUSAGE_POSITION     = 0,
+   SVGA3D_DECLUSAGE_BLENDWEIGHT,       //  1
+   SVGA3D_DECLUSAGE_BLENDINDICES,      //  2
+   SVGA3D_DECLUSAGE_NORMAL,            //  3
+   SVGA3D_DECLUSAGE_PSIZE,             //  4
+   SVGA3D_DECLUSAGE_TEXCOORD,          //  5
+   SVGA3D_DECLUSAGE_TANGENT,           //  6
+   SVGA3D_DECLUSAGE_BINORMAL,          //  7
+   SVGA3D_DECLUSAGE_TESSFACTOR,        //  8
+   SVGA3D_DECLUSAGE_POSITIONT,         //  9
+   SVGA3D_DECLUSAGE_COLOR,             // 10
+   SVGA3D_DECLUSAGE_FOG,               // 11
+   SVGA3D_DECLUSAGE_DEPTH,             // 12
+   SVGA3D_DECLUSAGE_SAMPLE,            // 13
+   SVGA3D_DECLUSAGE_MAX
+} SVGA3dDeclUsage;
+
+typedef enum {
+   SVGA3D_DECLMETHOD_DEFAULT     = 0,
+   SVGA3D_DECLMETHOD_PARTIALU,
+   SVGA3D_DECLMETHOD_PARTIALV,
+   SVGA3D_DECLMETHOD_CROSSUV,          // Normal
+   SVGA3D_DECLMETHOD_UV,
+   SVGA3D_DECLMETHOD_LOOKUP,           // Lookup a displacement map
+   SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED  // Lookup a pre-sampled displacement map
+} SVGA3dDeclMethod;
+
+typedef enum {
+   SVGA3D_DECLTYPE_FLOAT1        =  0,
+   SVGA3D_DECLTYPE_FLOAT2        =  1,
+   SVGA3D_DECLTYPE_FLOAT3        =  2,
+   SVGA3D_DECLTYPE_FLOAT4        =  3,
+   SVGA3D_DECLTYPE_D3DCOLOR      =  4,
+   SVGA3D_DECLTYPE_UBYTE4        =  5,
+   SVGA3D_DECLTYPE_SHORT2        =  6,
+   SVGA3D_DECLTYPE_SHORT4        =  7,
+   SVGA3D_DECLTYPE_UBYTE4N       =  8,
+   SVGA3D_DECLTYPE_SHORT2N       =  9,
+   SVGA3D_DECLTYPE_SHORT4N       = 10,
+   SVGA3D_DECLTYPE_USHORT2N      = 11,
+   SVGA3D_DECLTYPE_USHORT4N      = 12,
+   SVGA3D_DECLTYPE_UDEC3         = 13,
+   SVGA3D_DECLTYPE_DEC3N         = 14,
+   SVGA3D_DECLTYPE_FLOAT16_2     = 15,
+   SVGA3D_DECLTYPE_FLOAT16_4     = 16,
+   SVGA3D_DECLTYPE_MAX
+} SVGA3dDeclType;
+
+/*
+ * This structure is used for the divisor for geometry instancing;
+ * it's a direct translation of the Direct3D equivalent.
+ */
+typedef union {
+   struct {
+      /*
+       * For index data, this number represents the number of instances to draw.
+       * For instance data, this number represents the number of
+       * instances/vertex in this stream
+       */
+      uint32_t count : 30;
+
+      /*
+       * This is 1 if this is supposed to be the data that is repeated for
+       * every instance.
+       */
+      uint32_t indexedData : 1;
+
+      /*
+       * This is 1 if this is supposed to be the per-instance data.
+       */
+      uint32_t instanceData : 1;
+   } s;
+
+   uint32_t value;
+} SVGA3dVertexDivisor;
+
+typedef enum {
+   SVGA3D_PRIMITIVE_INVALID                     = 0,
+   SVGA3D_PRIMITIVE_TRIANGLELIST                = 1,
+   SVGA3D_PRIMITIVE_POINTLIST                   = 2,
+   SVGA3D_PRIMITIVE_LINELIST                    = 3,
+   SVGA3D_PRIMITIVE_LINESTRIP                   = 4,
+   SVGA3D_PRIMITIVE_TRIANGLESTRIP               = 5,
+   SVGA3D_PRIMITIVE_TRIANGLEFAN                 = 6,
+   SVGA3D_PRIMITIVE_MAX
+} SVGA3dPrimitiveType;
+
+typedef enum {
+   SVGA3D_COORDINATE_INVALID                   = 0,
+   SVGA3D_COORDINATE_LEFTHANDED                = 1,
+   SVGA3D_COORDINATE_RIGHTHANDED               = 2,
+   SVGA3D_COORDINATE_MAX
+} SVGA3dCoordinateType;
+
+typedef enum {
+   SVGA3D_TRANSFORM_INVALID                     = 0,
+   SVGA3D_TRANSFORM_WORLD                       = 1,
+   SVGA3D_TRANSFORM_VIEW                        = 2,
+   SVGA3D_TRANSFORM_PROJECTION                  = 3,
+   SVGA3D_TRANSFORM_TEXTURE0                    = 4,
+   SVGA3D_TRANSFORM_TEXTURE1                    = 5,
+   SVGA3D_TRANSFORM_TEXTURE2                    = 6,
+   SVGA3D_TRANSFORM_TEXTURE3                    = 7,
+   SVGA3D_TRANSFORM_TEXTURE4                    = 8,
+   SVGA3D_TRANSFORM_TEXTURE5                    = 9,
+   SVGA3D_TRANSFORM_TEXTURE6                    = 10,
+   SVGA3D_TRANSFORM_TEXTURE7                    = 11,
+   SVGA3D_TRANSFORM_WORLD1                      = 12,
+   SVGA3D_TRANSFORM_WORLD2                      = 13,
+   SVGA3D_TRANSFORM_WORLD3                      = 14,
+   SVGA3D_TRANSFORM_MAX
+} SVGA3dTransformType;
+
+typedef enum {
+   SVGA3D_LIGHTTYPE_INVALID                     = 0,
+   SVGA3D_LIGHTTYPE_POINT                       = 1,
+   SVGA3D_LIGHTTYPE_SPOT1                       = 2, /* 1-cone, in degrees */
+   SVGA3D_LIGHTTYPE_SPOT2                       = 3, /* 2-cone, in radians */
+   SVGA3D_LIGHTTYPE_DIRECTIONAL                 = 4,
+   SVGA3D_LIGHTTYPE_MAX
+} SVGA3dLightType;
+
+typedef enum {
+   SVGA3D_CUBEFACE_POSX                         = 0,
+   SVGA3D_CUBEFACE_NEGX                         = 1,
+   SVGA3D_CUBEFACE_POSY                         = 2,
+   SVGA3D_CUBEFACE_NEGY                         = 3,
+   SVGA3D_CUBEFACE_POSZ                         = 4,
+   SVGA3D_CUBEFACE_NEGZ                         = 5
+} SVGA3dCubeFace;
+
+typedef enum {
+   SVGA3D_SHADERTYPE_VS                         = 1,
+   SVGA3D_SHADERTYPE_PS                         = 2,
+   SVGA3D_SHADERTYPE_MAX
+} SVGA3dShaderType;
+
+typedef enum {
+   SVGA3D_CONST_TYPE_FLOAT                      = 0,
+   SVGA3D_CONST_TYPE_INT                        = 1,
+   SVGA3D_CONST_TYPE_BOOL                       = 2
+} SVGA3dShaderConstType;
+
+#define SVGA3D_MAX_SURFACE_FACES                6
+
+typedef enum {
+   SVGA3D_STRETCH_BLT_POINT                     = 0,
+   SVGA3D_STRETCH_BLT_LINEAR                    = 1,
+   SVGA3D_STRETCH_BLT_MAX
+} SVGA3dStretchBltMode;
+
+typedef enum {
+   SVGA3D_QUERYTYPE_OCCLUSION                   = 0,
+   SVGA3D_QUERYTYPE_MAX
+} SVGA3dQueryType;
+
+typedef enum {
+   SVGA3D_QUERYSTATE_PENDING     = 0,      /* Waiting on the host (set by guest) */
+   SVGA3D_QUERYSTATE_SUCCEEDED   = 1,      /* Completed successfully (set by host) */
+   SVGA3D_QUERYSTATE_FAILED      = 2,      /* Completed unsuccessfully (set by host) */
+   SVGA3D_QUERYSTATE_NEW         = 3       /* Never submitted (For guest use only) */
+} SVGA3dQueryState;
+
+typedef enum {
+   SVGA3D_WRITE_HOST_VRAM        = 1,
+   SVGA3D_READ_HOST_VRAM         = 2
+} SVGA3dTransferType;
+
+/*
+ * The maximum number of vertex arrays we're guaranteed to support in
+ * SVGA_3D_CMD_DRAWPRIMITIVES.
+ */
+#define SVGA3D_MAX_VERTEX_ARRAYS   32
+
+/*
+ * The maximum number of primitive ranges we're guaranteed to support
+ * in SVGA_3D_CMD_DRAWPRIMITIVES.
+ */
+#define SVGA3D_MAX_DRAW_PRIMITIVE_RANGES 32
+
+/*
+ * Identifiers for commands in the command FIFO.
+ *
+ * IDs between 1000 and 1039 (inclusive) were used by obsolete versions of
+ * the SVGA3D protocol and remain reserved; they should not be used in the
+ * future.
+ *
+ * IDs between 1040 and 1999 (inclusive) are available for use by the
+ * current SVGA3D protocol.
+ *
+ * FIFO clients other than SVGA3D should stay below 1000, or at 2000
+ * and up.
+ */
+
 #define SVGA_3D_CMD_LEGACY_BASE            1000
 #define SVGA_3D_CMD_BASE                   1040
 
-#define SVGA_3D_CMD_SURFACE_DEFINE         SVGA_3D_CMD_BASE + 0
+#define SVGA_3D_CMD_SURFACE_DEFINE         SVGA_3D_CMD_BASE + 0     // Deprecated
 #define SVGA_3D_CMD_SURFACE_DESTROY        SVGA_3D_CMD_BASE + 1
 #define SVGA_3D_CMD_SURFACE_COPY           SVGA_3D_CMD_BASE + 2
 #define SVGA_3D_CMD_SURFACE_STRETCHBLT     SVGA_3D_CMD_BASE + 3
@@ -26,7 +1041,7 @@
 #define SVGA_3D_CMD_SETVIEWPORT            SVGA_3D_CMD_BASE + 15
 #define SVGA_3D_CMD_SETCLIPPLANE           SVGA_3D_CMD_BASE + 16
 #define SVGA_3D_CMD_CLEAR                  SVGA_3D_CMD_BASE + 17
-#define SVGA_3D_CMD_PRESENT                SVGA_3D_CMD_BASE + 18
+#define SVGA_3D_CMD_PRESENT                SVGA_3D_CMD_BASE + 18    // Deprecated
 #define SVGA_3D_CMD_SHADER_DEFINE          SVGA_3D_CMD_BASE + 19
 #define SVGA_3D_CMD_SHADER_DESTROY         SVGA_3D_CMD_BASE + 20
 #define SVGA_3D_CMD_SET_SHADER             SVGA_3D_CMD_BASE + 21
@@ -36,7 +1051,7 @@
 #define SVGA_3D_CMD_BEGIN_QUERY            SVGA_3D_CMD_BASE + 25
 #define SVGA_3D_CMD_END_QUERY              SVGA_3D_CMD_BASE + 26
 #define SVGA_3D_CMD_WAIT_FOR_QUERY         SVGA_3D_CMD_BASE + 27
-#define SVGA_3D_CMD_PRESENT_READBACK       SVGA_3D_CMD_BASE + 28
+#define SVGA_3D_CMD_PRESENT_READBACK       SVGA_3D_CMD_BASE + 28    // Deprecated
 #define SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN SVGA_3D_CMD_BASE + 29
 #define SVGA_3D_CMD_SURFACE_DEFINE_V2      SVGA_3D_CMD_BASE + 30
 #define SVGA_3D_CMD_GENERATE_MIPMAPS       SVGA_3D_CMD_BASE + 31
@@ -46,11 +1061,837 @@
 
 #define SVGA_3D_CMD_FUTURE_MAX             2000
 
-typedef enum
-{
-   SVGA3D_WRITE_HOST_VRAM        = 1,
-   SVGA3D_READ_HOST_VRAM         = 2
-} SVGA3dTransferType;
+/*
+ * Common substructures used in multiple FIFO commands:
+ */
 
-#endif /* _SVGA3D_REG_H_ */
+typedef struct {
+   union {
+      struct {
+         uint16_t  function;       // SVGA3dFogFunction
+         uint8_t   type;           // SVGA3dFogType
+         uint8_t   base;           // SVGA3dFogBase
+      } s;
+      uint32_t     uintValue;
+   };
+} SVGA3dFogMode;
+
+/*
+ * Uniquely identify one image (a 1D/2D/3D array) from a surface. This
+ * is a surface ID as well as face/mipmap indices.
+ */
+
+typedef
+struct SVGA3dSurfaceImageId {
+   uint32_t               sid;
+   uint32_t               face;
+   uint32_t               mipmap;
+} SVGA3dSurfaceImageId;
+
+typedef
+struct SVGA3dGuestImage {
+   SVGAGuestPtr         ptr;
+
+   /*
+    * A note on interpretation of pitch: This value of pitch is the
+    * number of bytes between vertically adjacent image
+    * blocks. Normally this is the number of bytes between the first
+    * pixel of two adjacent scanlines. With compressed textures,
+    * however, this may represent the number of bytes between
+    * compression blocks rather than between rows of pixels.
+    *
+    * XXX: Compressed textures currently must be tightly packed in guest memory.
+    *
+    * If the image is 1-dimensional, pitch is ignored.
+    *
+    * If 'pitch' is zero, the SVGA3D device calculates a pitch value
+    * assuming each row of blocks is tightly packed.
+    */
+   uint32_t pitch;
+} SVGA3dGuestImage;
+
+
+/*
+ * FIFO command format definitions:
+ */
+
+/*
+ * The data size header following cmdNum for every 3d command
+ */
+typedef
+struct {
+   /* uint32_t               id; duplicate*/
+   uint32_t               size;
+} SVGA3dCmdHeader;
+
+/*
+ * A surface is a hierarchy of host VRAM surfaces: 1D, 2D, or 3D, with
+ * optional mipmaps and cube faces.
+ */
+
+typedef
+struct {
+   uint32_t               width;
+   uint32_t               height;
+   uint32_t               depth;
+} SVGA3dSize;
+
+typedef enum {
+   SVGA3D_SURFACE_CUBEMAP              = (1 << 0),
+   SVGA3D_SURFACE_HINT_STATIC          = (1 << 1),
+   SVGA3D_SURFACE_HINT_DYNAMIC         = (1 << 2),
+   SVGA3D_SURFACE_HINT_INDEXBUFFER     = (1 << 3),
+   SVGA3D_SURFACE_HINT_VERTEXBUFFER    = (1 << 4),
+   SVGA3D_SURFACE_HINT_TEXTURE         = (1 << 5),
+   SVGA3D_SURFACE_HINT_RENDERTARGET    = (1 << 6),
+   SVGA3D_SURFACE_HINT_DEPTHSTENCIL    = (1 << 7),
+   SVGA3D_SURFACE_HINT_WRITEONLY       = (1 << 8),
+   SVGA3D_SURFACE_MASKABLE_ANTIALIAS   = (1 << 9),
+   SVGA3D_SURFACE_AUTOGENMIPMAPS       = (1 << 10)
+} SVGA3dSurfaceFlags;
+
+typedef
+struct {
+   uint32_t               numMipLevels;
+} SVGA3dSurfaceFace;
+
+typedef
+struct {
+   uint32_t                      sid;
+   SVGA3dSurfaceFlags          surfaceFlags;
+   SVGA3dSurfaceFormat         format;
+   /*
+    * If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
+    * structures must have the same value of numMipLevels field.
+    * Otherwise, all but the first SVGA3dSurfaceFace structures must have the
+    * numMipLevels set to 0.
+    */
+   SVGA3dSurfaceFace           face[SVGA3D_MAX_SURFACE_FACES];
+   /*
+    * Followed by an SVGA3dSize structure for each mip level in each face.
+    *
+    * A note on surface sizes: Sizes are always specified in pixels,
+    * even if the true surface size is not a multiple of the minimum
+    * block size of the surface's format. For example, a 3x3x1 DXT1
+    * compressed texture would actually be stored as a 4x4x1 image in
+    * memory.
+    */
+} SVGA3dCmdDefineSurface;       /* SVGA_3D_CMD_SURFACE_DEFINE */
+
+typedef
+struct {
+   uint32_t                      sid;
+   SVGA3dSurfaceFlags          surfaceFlags;
+   SVGA3dSurfaceFormat         format;
+   /*
+    * If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
+    * structures must have the same value of numMipLevels field.
+    * Otherwise, all but the first SVGA3dSurfaceFace structures must have the
+    * numMipLevels set to 0.
+    */
+   SVGA3dSurfaceFace           face[SVGA3D_MAX_SURFACE_FACES];
+   uint32_t                      multisampleCount;
+   SVGA3dTextureFilter         autogenFilter;
+   /*
+    * Followed by an SVGA3dSize structure for each mip level in each face.
+    *
+    * A note on surface sizes: Sizes are always specified in pixels,
+    * even if the true surface size is not a multiple of the minimum
+    * block size of the surface's format. For example, a 3x3x1 DXT1
+    * compressed texture would actually be stored as a 4x4x1 image in
+    * memory.
+    */
+} SVGA3dCmdDefineSurface_v2;     /* SVGA_3D_CMD_SURFACE_DEFINE_V2 */
+
+typedef
+struct {
+   uint32_t               sid;
+} SVGA3dCmdDestroySurface;      /* SVGA_3D_CMD_SURFACE_DESTROY */
+
+typedef
+struct {
+   uint32_t               cid;
+} SVGA3dCmdDefineContext;       /* SVGA_3D_CMD_CONTEXT_DEFINE */
+
+typedef
+struct {
+   uint32_t               cid;
+} SVGA3dCmdDestroyContext;      /* SVGA_3D_CMD_CONTEXT_DESTROY */
 
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dClearFlag      clearFlag;
+   uint32_t               color;
+   float                depth;
+   uint32_t               stencil;
+   /* Followed by variable number of SVGA3dRect structures */
+} SVGA3dCmdClear;               /* SVGA_3D_CMD_CLEAR */
+
+typedef
+struct SVGA3dCopyRect {
+   uint32_t               x;
+   uint32_t               y;
+   uint32_t               w;
+   uint32_t               h;
+   uint32_t               srcx;
+   uint32_t               srcy;
+} SVGA3dCopyRect;
+
+typedef
+struct SVGA3dCopyBox {
+   uint32_t               x;
+   uint32_t               y;
+   uint32_t               z;
+   uint32_t               w;
+   uint32_t               h;
+   uint32_t               d;
+   uint32_t               srcx;
+   uint32_t               srcy;
+   uint32_t               srcz;
+} SVGA3dCopyBox;
+
+typedef
+struct {
+   uint32_t               x;
+   uint32_t               y;
+   uint32_t               w;
+   uint32_t               h;
+} SVGA3dRect;
+
+typedef
+struct {
+   uint32_t               x;
+   uint32_t               y;
+   uint32_t               z;
+   uint32_t               w;
+   uint32_t               h;
+   uint32_t               d;
+} SVGA3dBox;
+
+typedef
+struct {
+   uint32_t               x;
+   uint32_t               y;
+   uint32_t               z;
+} SVGA3dPoint;
+
+typedef
+struct {
+   SVGA3dLightType      type;
+   SVGA3dBool           inWorldSpace;
+   float                diffuse[4];
+   float                specular[4];
+   float                ambient[4];
+   float                position[4];
+   float                direction[4];
+   float                range;
+   float                falloff;
+   float                attenuation0;
+   float                attenuation1;
+   float                attenuation2;
+   float                theta;
+   float                phi;
+} SVGA3dLightData;
+
+typedef
+struct {
+   uint32_t               sid;
+   /* Followed by variable number of SVGA3dCopyRect structures */
+} SVGA3dCmdPresent;             /* SVGA_3D_CMD_PRESENT */
+
+typedef
+struct {
+   SVGA3dRenderStateName   state;
+   union {
+      uint32_t               uintValue;
+      float                floatValue;
+   };
+} SVGA3dRenderState;
+
+typedef
+struct {
+   uint32_t               cid;
+   /* Followed by variable number of SVGA3dRenderState structures */
+} SVGA3dCmdSetRenderState;      /* SVGA_3D_CMD_SETRENDERSTATE */
+
+typedef
+struct {
+   uint32_t                 cid;
+   SVGA3dRenderTargetType type;
+   SVGA3dSurfaceImageId   target;
+} SVGA3dCmdSetRenderTarget;     /* SVGA_3D_CMD_SETRENDERTARGET */
+
+typedef
+struct {
+   SVGA3dSurfaceImageId  src;
+   SVGA3dSurfaceImageId  dest;
+   /* Followed by variable number of SVGA3dCopyBox structures */
+} SVGA3dCmdSurfaceCopy;               /* SVGA_3D_CMD_SURFACE_COPY */
+
+typedef
+struct {
+   SVGA3dSurfaceImageId  src;
+   SVGA3dSurfaceImageId  dest;
+   SVGA3dBox             boxSrc;
+   SVGA3dBox             boxDest;
+   SVGA3dStretchBltMode  mode;
+} SVGA3dCmdSurfaceStretchBlt;         /* SVGA_3D_CMD_SURFACE_STRETCHBLT */
+
+typedef
+struct {
+   /*
+    * If the discard flag is present in a surface DMA operation, the host may
+    * discard the contents of the current mipmap level and face of the target
+    * surface before applying the surface DMA contents.
+    */
+   uint32_t discard : 1;
+
+   /*
+    * If the unsynchronized flag is present, the host may perform this upload
+    * without syncing to pending reads on this surface.
+    */
+   uint32_t unsynchronized : 1;
+
+   /*
+    * Guests *MUST* set the reserved bits to 0 before submitting the command
+    * suffix as future flags may occupy these bits.
+    */
+   uint32_t reserved : 30;
+} SVGA3dSurfaceDMAFlags;
+
+typedef
+struct {
+   SVGA3dGuestImage      guest;
+   SVGA3dSurfaceImageId  host;
+   SVGA3dTransferType    transfer;
+   /*
+    * Followed by variable number of SVGA3dCopyBox structures. For consistency
+    * in all clipping logic and coordinate translation, we define the
+    * "source" in each copyBox as the guest image and the
+    * "destination" as the host image, regardless of transfer
+    * direction.
+    *
+    * For efficiency, the SVGA3D device is free to copy more data than
+    * specified. For example, it may round copy boxes outwards such
+    * that they lie on particular alignment boundaries.
+    */
+} SVGA3dCmdSurfaceDMA;                /* SVGA_3D_CMD_SURFACE_DMA */
+
+/*
+ * SVGA3dCmdSurfaceDMASuffix --
+ *
+ *    This is a command suffix that will appear after a SurfaceDMA command in
+ *    the FIFO.  It contains some extra information that hosts may use to
+ *    optimize performance or protect the guest.  This suffix exists to preserve
+ *    backwards compatibility while also allowing for new functionality to be
+ *    implemented.
+ */
+
+typedef
+struct {
+   uint32_t suffixSize;
+
+   /*
+    * The maximum offset is used to determine the maximum offset from the
+    * guestPtr base address that will be accessed or written to during this
+    * surfaceDMA.  If the suffix is supported, the host will respect this
+    * boundary while performing surface DMAs.
+    *
+    * Defaults to MAX_uint32_t
+    */
+   uint32_t maximumOffset;
+
+   /*
+    * A set of flags that describes optimizations that the host may perform
+    * while performing this surface DMA operation.  The guest should never rely
+    * on behaviour that is different when these flags are set for correctness.
+    *
+    * Defaults to 0
+    */
+   SVGA3dSurfaceDMAFlags flags;
+} SVGA3dCmdSurfaceDMASuffix;
+
+/*
+ * SVGA_3D_CMD_DRAW_PRIMITIVES --
+ *
+ *   This command is the SVGA3D device's generic drawing entry point.
+ *   It can draw multiple ranges of primitives, optionally using an
+ *   index buffer, using an arbitrary collection of vertex buffers.
+ *
+ *   Each SVGA3dVertexDecl defines a distinct vertex array to bind
+ *   during this draw call. The declarations specify which surface
+ *   the vertex data lives in, what that vertex data is used for,
+ *   and how to interpret it.
+ *
+ *   Each SVGA3dPrimitiveRange defines a collection of primitives
+ *   to render using the same vertex arrays. An index buffer is
+ *   optional.
+ */
+
+typedef
+struct {
+   /*
+    * A range hint is an optional specification for the range of indices
+    * in an SVGA3dArray that will be used. If 'last' is zero, it is assumed
+    * that the entire array will be used.
+    *
+    * These are only hints. The SVGA3D device may use them for
+    * performance optimization if possible, but it's also allowed to
+    * ignore these values.
+    */
+   uint32_t               first;
+   uint32_t               last;
+} SVGA3dArrayRangeHint;
+
+typedef
+struct {
+   /*
+    * Define the origin and shape of a vertex or index array. Both
+    * 'offset' and 'stride' are in bytes. The provided surface will be
+    * reinterpreted as a flat array of bytes in the same format used
+    * by surface DMA operations. To avoid unnecessary conversions, the
+    * surface should be created with the SVGA3D_BUFFER format.
+    *
+    * Index 0 in the array starts 'offset' bytes into the surface.
+    * Index 1 begins at byte 'offset + stride', etc. Array indices may
+    * not be negative.
+    */
+   uint32_t               surfaceId;
+   uint32_t               offset;
+   uint32_t               stride;
+} SVGA3dArray;
+
+typedef
+struct {
+   /*
+    * Describe a vertex array's data type, and define how it is to be
+    * used by the fixed function pipeline or the vertex shader. It
+    * isn't useful to have two VertexDecls with the same
+    * VertexArrayIdentity in one draw call.
+    */
+   SVGA3dDeclType       type;
+   SVGA3dDeclMethod     method;
+   SVGA3dDeclUsage      usage;
+   uint32_t               usageIndex;
+} SVGA3dVertexArrayIdentity;
+
+typedef
+struct {
+   SVGA3dVertexArrayIdentity  identity;
+   SVGA3dArray                array;
+   SVGA3dArrayRangeHint       rangeHint;
+} SVGA3dVertexDecl;
+
+typedef
+struct {
+   /*
+    * Define a group of primitives to render, from sequential indices.
+    *
+    * The value of 'primitiveType' and 'primitiveCount' imply the
+    * total number of vertices that will be rendered.
+    */
+   SVGA3dPrimitiveType  primType;
+   uint32_t               primitiveCount;
+
+   /*
+    * Optional index buffer. If indexArray.surfaceId is
+    * SVGA3D_INVALID_ID, we render without an index buffer. Rendering
+    * without an index buffer is identical to rendering with an index
+    * buffer containing the sequence [0, 1, 2, 3, ...].
+    *
+    * If an index buffer is in use, indexWidth specifies the width in
+    * bytes of each index value. It must be less than or equal to
+    * indexArray.stride.
+    *
+    * (Currently, the SVGA3D device requires index buffers to be tightly
+    * packed. In other words, indexWidth == indexArray.stride)
+    */
+   SVGA3dArray          indexArray;
+   uint32_t               indexWidth;
+
+   /*
+    * Optional index bias. This number is added to all indices from
+    * indexArray before they are used as vertex array indices. This
+    * can be used in multiple ways:
+    *
+    *  - When not using an indexArray, this bias can be used to
+    *    specify where in the vertex arrays to begin rendering.
+    *
+    *  - A positive number here is equivalent to increasing the
+    *    offset in each vertex array.
+    *
+    *  - A negative number can be used to render using a small
+    *    vertex array and an index buffer that contains large
+    *    values. This may be used by some applications that
+    *    crop a vertex buffer without modifying their index
+    *    buffer.
+    *
+    * Note that rendering with a negative bias value may be slower and
+    * use more memory than rendering with a positive or zero bias.
+    */
+   int32_t                indexBias;
+} SVGA3dPrimitiveRange;
+
+typedef
+struct {
+   uint32_t               cid;
+   uint32_t               numVertexDecls;
+   uint32_t               numRanges;
+
+   /*
+    * There are two variable size arrays after the
+    * SVGA3dCmdDrawPrimitives structure. In order,
+    * they are:
+    *
+    * 1. SVGA3dVertexDecl, quantity 'numVertexDecls', but no more than
+    *    SVGA3D_MAX_VERTEX_ARRAYS;
+    * 2. SVGA3dPrimitiveRange, quantity 'numRanges', but no more than
+    *    SVGA3D_MAX_DRAW_PRIMITIVE_RANGES;
+    * 3. Optionally, SVGA3dVertexDivisor, quantity 'numVertexDecls' (contains
+    *    the frequency divisor for the corresponding vertex decl).
+    */
+} SVGA3dCmdDrawPrimitives;      /* SVGA_3D_CMD_DRAWPRIMITIVES */
+
+typedef
+struct {
+   uint32_t                   stage;
+   SVGA3dTextureStateName   name;
+   union {
+      uint32_t                value;
+      float                 floatValue;
+   };
+} SVGA3dTextureState;
+
+typedef
+struct {
+   uint32_t               cid;
+   /* Followed by variable number of SVGA3dTextureState structures */
+} SVGA3dCmdSetTextureState;      /* SVGA_3D_CMD_SETTEXTURESTATE */
+
+typedef
+struct {
+   uint32_t                   cid;
+   SVGA3dTransformType      type;
+   float                    matrix[16];
+} SVGA3dCmdSetTransform;          /* SVGA_3D_CMD_SETTRANSFORM */
+
+typedef
+struct {
+   float                min;
+   float                max;
+} SVGA3dZRange;
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dZRange         zRange;
+} SVGA3dCmdSetZRange;             /* SVGA_3D_CMD_SETZRANGE */
+
+typedef
+struct {
+   float                diffuse[4];
+   float                ambient[4];
+   float                specular[4];
+   float                emissive[4];
+   float                shininess;
+} SVGA3dMaterial;
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dFace           face;
+   SVGA3dMaterial       material;
+} SVGA3dCmdSetMaterial;           /* SVGA_3D_CMD_SETMATERIAL */
+
+typedef
+struct {
+   uint32_t               cid;
+   uint32_t               index;
+   SVGA3dLightData      data;
+} SVGA3dCmdSetLightData;           /* SVGA_3D_CMD_SETLIGHTDATA */
+
+typedef
+struct {
+   uint32_t               cid;
+   uint32_t               index;
+   uint32_t               enabled;
+} SVGA3dCmdSetLightEnabled;      /* SVGA_3D_CMD_SETLIGHTENABLED */
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dRect           rect;
+} SVGA3dCmdSetViewport;           /* SVGA_3D_CMD_SETVIEWPORT */
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dRect           rect;
+} SVGA3dCmdSetScissorRect;         /* SVGA_3D_CMD_SETSCISSORRECT */
+
+typedef
+struct {
+   uint32_t               cid;
+   uint32_t               index;
+   float                plane[4];
+} SVGA3dCmdSetClipPlane;           /* SVGA_3D_CMD_SETCLIPPLANE */
+
+typedef
+struct {
+   uint32_t               cid;
+   uint32_t               shid;
+   SVGA3dShaderType     type;
+   /* Followed by variable number of DWORDs for shader bycode */
+} SVGA3dCmdDefineShader;           /* SVGA_3D_CMD_SHADER_DEFINE */
+
+typedef
+struct {
+   uint32_t               cid;
+   uint32_t               shid;
+   SVGA3dShaderType     type;
+} SVGA3dCmdDestroyShader;         /* SVGA_3D_CMD_SHADER_DESTROY */
+
+typedef
+struct {
+   uint32_t                  cid;
+   uint32_t                  reg;     /* register number */
+   SVGA3dShaderType        type;
+   SVGA3dShaderConstType   ctype;
+   uint32_t                  values[4];
+} SVGA3dCmdSetShaderConst;        /* SVGA_3D_CMD_SET_SHADER_CONST */
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dShaderType     type;
+   uint32_t               shid;
+} SVGA3dCmdSetShader;             /* SVGA_3D_CMD_SET_SHADER */
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dQueryType      type;
+} SVGA3dCmdBeginQuery;           /* SVGA_3D_CMD_BEGIN_QUERY */
+
+typedef
+struct {
+   uint32_t               cid;
+   SVGA3dQueryType      type;
+   SVGAGuestPtr         guestResult;  /* Points to an SVGA3dQueryResult structure */
+} SVGA3dCmdEndQuery;                  /* SVGA_3D_CMD_END_QUERY */
+
+typedef
+struct {
+   uint32_t               cid;          /* Same parameters passed to END_QUERY */
+   SVGA3dQueryType      type;
+   SVGAGuestPtr         guestResult;
+} SVGA3dCmdWaitForQuery;              /* SVGA_3D_CMD_WAIT_FOR_QUERY */
+
+typedef
+struct {
+   uint32_t               totalSize;    /* Set by guest before query is ended. */
+   SVGA3dQueryState     state;        /* Set by host or guest. See SVGA3dQueryState. */
+   union {                            /* Set by host on exit from PENDING state */
+      uint32_t            result32;
+   };
+} SVGA3dQueryResult;
+
+/*
+ * SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN --
+ *
+ *    This is a blit from an SVGA3D surface to a Screen Object. Just
+ *    like GMR-to-screen blits, this blit may be directed at a
+ *    specific screen or to the virtual coordinate space.
+ *
+ *    The blit copies from a rectangular region of an SVGA3D surface
+ *    image to a rectangular region of a screen or screens.
+ *
+ *    This command takes an optional variable-length list of clipping
+ *    rectangles after the body of the command. If no rectangles are
+ *    specified, there is no clipping region. The entire destRect is
+ *    drawn to. If one or more rectangles are included, they describe
+ *    a clipping region. The clip rectangle coordinates are measured
+ *    relative to the top-left corner of destRect.
+ *
+ *    This clipping region serves multiple purposes:
+ *
+ *      - It can be used to perform an irregularly shaped blit more
+ *        efficiently than by issuing many separate blit commands.
+ *
+ *      - It is equivalent to allowing blits with non-integer
+ *        source coordinates. You could blit just one half-pixel
+ *        of a source, for example, by specifying a larger
+ *        destination rectangle than you need, then removing
+ *        part of it using a clip rectangle.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT
+ *
+ * Limitations:
+ *
+ *    - Currently, no backend supports blits from a mipmap or face
+ *      other than the first one.
+ */
+
+typedef
+struct {
+   SVGA3dSurfaceImageId srcImage;
+   SVGASignedRect       srcRect;
+   uint32_t               destScreenId; /* Screen ID or SVGA_ID_INVALID for virt. coords */
+   SVGASignedRect       destRect;     /* Supports scaling if src/rest different size */
+   /* Clipping: zero or more SVGASignedRects follow */
+} SVGA3dCmdBlitSurfaceToScreen;         /* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN */
+
+typedef
+struct {
+   uint32_t               sid;
+   SVGA3dTextureFilter  filter;
+} SVGA3dCmdGenerateMipmaps;             /* SVGA_3D_CMD_GENERATE_MIPMAPS */
+
+
+/*
+ * Capability query index.
+ *
+ * Notes:
+ *
+ *   1. SVGA3D_DEVCAP_MAX_TEXTURES reflects the maximum number of
+ *      fixed-function texture units available. Each of these units
+ *      work in both FFP and Shader modes, and they support texture
+ *      transforms and texture coordinates. The host may have additional
+ *      texture image units that are only usable with shaders.
+ *
+ *   2. The BUFFER_FORMAT capabilities are deprecated, and they always
+ *      return TRUE. Even on physical hardware that does not support
+ *      these formats natively, the SVGA3D device will provide an emulation
+ *      which should be invisible to the guest OS.
+ *
+ *      In general, the SVGA3D device should support any operation on
+ *      any surface format, it just may perform some of these
+ *      operations in software depending on the capabilities of the
+ *      available physical hardware.
+ *
+ *      XXX: In the future, we will add capabilities that describe in
+ *      detail what formats are supported in hardware for what kinds
+ *      of operations.
+ */
+
+typedef enum {
+   SVGA3D_DEVCAP_3D                                = 0,
+   SVGA3D_DEVCAP_MAX_LIGHTS                        = 1,
+   SVGA3D_DEVCAP_MAX_TEXTURES                      = 2,  /* See note (1) */
+   SVGA3D_DEVCAP_MAX_CLIP_PLANES                   = 3,
+   SVGA3D_DEVCAP_VERTEX_SHADER_VERSION             = 4,
+   SVGA3D_DEVCAP_VERTEX_SHADER                     = 5,
+   SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION           = 6,
+   SVGA3D_DEVCAP_FRAGMENT_SHADER                   = 7,
+   SVGA3D_DEVCAP_MAX_RENDER_TARGETS                = 8,
+   SVGA3D_DEVCAP_S23E8_TEXTURES                    = 9,
+   SVGA3D_DEVCAP_S10E5_TEXTURES                    = 10,
+   SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND             = 11,
+   SVGA3D_DEVCAP_D16_BUFFER_FORMAT                 = 12, /* See note (2) */
+   SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT               = 13, /* See note (2) */
+   SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT               = 14, /* See note (2) */
+   SVGA3D_DEVCAP_QUERY_TYPES                       = 15,
+   SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING         = 16,
+   SVGA3D_DEVCAP_MAX_POINT_SIZE                    = 17,
+   SVGA3D_DEVCAP_MAX_SHADER_TEXTURES               = 18,
+   SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH                 = 19,
+   SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT                = 20,
+   SVGA3D_DEVCAP_MAX_VOLUME_EXTENT                 = 21,
+   SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT                = 22,
+   SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO          = 23,
+   SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY            = 24,
+   SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT               = 25,
+   SVGA3D_DEVCAP_MAX_VERTEX_INDEX                  = 26,
+   SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS    = 27,
+   SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS  = 28,
+   SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS           = 29,
+   SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS         = 30,
+   SVGA3D_DEVCAP_TEXTURE_OPS                       = 31,
+   SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8               = 32,
+   SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8               = 33,
+   SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10            = 34,
+   SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5               = 35,
+   SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5               = 36,
+   SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4               = 37,
+   SVGA3D_DEVCAP_SURFACEFMT_R5G6B5                 = 38,
+   SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16            = 39,
+   SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8      = 40,
+   SVGA3D_DEVCAP_SURFACEFMT_ALPHA8                 = 41,
+   SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8             = 42,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D16                  = 43,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8                = 44,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8                = 45,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT1                   = 46,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT2                   = 47,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT3                   = 48,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT4                   = 49,
+   SVGA3D_DEVCAP_SURFACEFMT_DXT5                   = 50,
+   SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8           = 51,
+   SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10            = 52,
+   SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8               = 53,
+   SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8               = 54,
+   SVGA3D_DEVCAP_SURFACEFMT_CxV8U8                 = 55,
+   SVGA3D_DEVCAP_SURFACEFMT_R_S10E5                = 56,
+   SVGA3D_DEVCAP_SURFACEFMT_R_S23E8                = 57,
+   SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5               = 58,
+   SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8               = 59,
+   SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5             = 60,
+   SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8             = 61,
+   SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES        = 63,
+
+   /*
+    * Note that MAX_SIMULTANEOUS_RENDER_TARGETS is a maximum count of color
+    * render targets.  This does no include the depth or stencil targets.
+    */
+   SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS   = 64,
+
+   SVGA3D_DEVCAP_SURFACEFMT_V16U16                 = 65,
+   SVGA3D_DEVCAP_SURFACEFMT_G16R16                 = 66,
+   SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16           = 67,
+   SVGA3D_DEVCAP_SURFACEFMT_UYVY                   = 68,
+   SVGA3D_DEVCAP_SURFACEFMT_YUY2                   = 69,
+   SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES    = 70,
+   SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES       = 71,
+   SVGA3D_DEVCAP_ALPHATOCOVERAGE                   = 72,
+   SVGA3D_DEVCAP_SUPERSAMPLE                       = 73,
+   SVGA3D_DEVCAP_AUTOGENMIPMAPS                    = 74,
+   SVGA3D_DEVCAP_SURFACEFMT_NV12                   = 75,
+   SVGA3D_DEVCAP_SURFACEFMT_AYUV                   = 76,
+
+   /*
+    * This is the maximum number of SVGA context IDs that the guest
+    * can define using SVGA_3D_CMD_CONTEXT_DEFINE.
+    */
+   SVGA3D_DEVCAP_MAX_CONTEXT_IDS                   = 77,
+
+   /*
+    * This is the maximum number of SVGA surface IDs that the guest
+    * can define using SVGA_3D_CMD_SURFACE_DEFINE*.
+    */
+   SVGA3D_DEVCAP_MAX_SURFACE_IDS                   = 78,
+
+   SVGA3D_DEVCAP_SURFACEFMT_Z_DF16                 = 79,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_DF24                 = 80,
+   SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT            = 81,
+
+   SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM              = 82,
+   SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM              = 83,
+
+   /*
+    * Don't add new caps into the previous section; the values in this
+    * enumeration must not change. You can put new values right before
+    * SVGA3D_DEVCAP_MAX.
+    */
+   SVGA3D_DEVCAP_MAX                                  /* This must be the last index. */
+} SVGA3dDevCapIndex;
+
+typedef union {
+   bool   b;
+   uint32_t u;
+   int32_t  i;
+   float  f;
+} SVGA3dDevCapResult;
+
+#endif /* _SVGA3D_REG_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga3d_shaderdefs.h b/src/VBox/Devices/Graphics/vmsvga/svga3d_shaderdefs.h
new file mode 100644
index 0000000..c84ba1a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga/svga3d_shaderdefs.h
@@ -0,0 +1,522 @@
+/**********************************************************
+ * Copyright 2007-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_shaderdefs.h --
+ *
+ * SVGA3D byte code format and limit definitions.
+ *
+ * The format of the byte code directly corresponds to that defined
+ * by Microsoft DirectX SDK 9.0c (file d3d9types.h). The format can
+ * also be extended so that different shader formats can be supported
+ * for example GLSL, ARB vp/fp, NV/ATI shader formats, etc.
+ *
+ */
+
+#ifndef __SVGA3D_SHADER_DEFS__
+#define __SVGA3D_SHADER_DEFS__
+
+/* SVGA3D shader hardware limits. */
+
+#define SVGA3D_INPUTREG_MAX            16
+#define SVGA3D_OUTPUTREG_MAX           12
+#define SVGA3D_VERTEX_SAMPLERREG_MAX   4
+#define SVGA3D_PIXEL_SAMPLERREG_MAX    16
+#define SVGA3D_SAMPLERREG_MAX          (SVGA3D_PIXEL_SAMPLERREG_MAX+\
+                                        SVGA3D_VERTEX_SAMPLERREG_MAX)
+#define SVGA3D_TEMPREG_MAX             32
+#define SVGA3D_CONSTREG_MAX            256
+#define SVGA3D_CONSTINTREG_MAX         16
+#define SVGA3D_CONSTBOOLREG_MAX        16
+#define SVGA3D_ADDRREG_MAX             1
+#define SVGA3D_PREDREG_MAX             1
+
+/* SVGA3D byte code specific limits */
+
+#define SVGA3D_MAX_SRC_REGS      4
+#define SVGA3D_MAX_NESTING_LEVEL 32
+
+/* SVGA3D version information. */
+
+#define SVGA3D_VS_TYPE  0xFFFE
+#define SVGA3D_PS_TYPE  0xFFFF
+
+typedef struct {
+   union {
+      struct {
+         uint32_t minor : 8;
+         uint32_t major : 8;
+         uint32_t type : 16;
+      } s;
+
+      uint32_t value;
+   };
+} SVGA3dShaderVersion;
+
+#define SVGA3D_VS_10 ((SVGA3D_VS_TYPE << 16) | 1 << 8)
+#define SVGA3D_VS_11 (SVGA3D_VS_10 | 1)
+#define SVGA3D_VS_20 ((SVGA3D_VS_TYPE << 16) | 2 << 8)
+#define SVGA3D_VS_30 ((SVGA3D_VS_TYPE << 16) | 3 << 8)
+
+#define SVGA3D_PS_10 ((SVGA3D_PS_TYPE << 16) | 1 << 8)
+#define SVGA3D_PS_11 (SVGA3D_PS_10 | 1)
+#define SVGA3D_PS_12 (SVGA3D_PS_10 | 2)
+#define SVGA3D_PS_13 (SVGA3D_PS_10 | 3)
+#define SVGA3D_PS_14 (SVGA3D_PS_10 | 4)
+#define SVGA3D_PS_20 ((SVGA3D_PS_TYPE << 16) | 2 << 8)
+#define SVGA3D_PS_30 ((SVGA3D_PS_TYPE << 16) | 3 << 8)
+
+/* The *_ENABLED are for backwards compatibility with old drivers */
+typedef enum {
+   SVGA3DPSVERSION_NONE = 0,
+   SVGA3DPSVERSION_ENABLED = 1,
+   SVGA3DPSVERSION_11 = 3,
+   SVGA3DPSVERSION_12 = 5,
+   SVGA3DPSVERSION_13 = 7,
+   SVGA3DPSVERSION_14 = 9,
+   SVGA3DPSVERSION_20 = 11,
+   SVGA3DPSVERSION_30 = 13,
+   SVGA3DPSVERSION_40 = 15,
+   SVGA3DPSVERSION_MAX
+} SVGA3dPixelShaderVersion;
+
+typedef enum {
+   SVGA3DVSVERSION_NONE = 0,
+   SVGA3DVSVERSION_ENABLED = 1,
+   SVGA3DVSVERSION_11 = 3,
+   SVGA3DVSVERSION_20 = 5,
+   SVGA3DVSVERSION_30 = 7,
+   SVGA3DVSVERSION_40 = 9,
+   SVGA3DVSVERSION_MAX
+} SVGA3dVertexShaderVersion;
+
+/* SVGA3D instruction op codes. */
+
+typedef enum {
+   SVGA3DOP_NOP = 0,
+   SVGA3DOP_MOV,
+   SVGA3DOP_ADD,
+   SVGA3DOP_SUB,
+   SVGA3DOP_MAD,
+   SVGA3DOP_MUL,
+   SVGA3DOP_RCP,
+   SVGA3DOP_RSQ,
+   SVGA3DOP_DP3,
+   SVGA3DOP_DP4,
+   SVGA3DOP_MIN,
+   SVGA3DOP_MAX,
+   SVGA3DOP_SLT,
+   SVGA3DOP_SGE,
+   SVGA3DOP_EXP,
+   SVGA3DOP_LOG,
+   SVGA3DOP_LIT,
+   SVGA3DOP_DST,
+   SVGA3DOP_LRP,
+   SVGA3DOP_FRC,
+   SVGA3DOP_M4x4,
+   SVGA3DOP_M4x3,
+   SVGA3DOP_M3x4,
+   SVGA3DOP_M3x3,
+   SVGA3DOP_M3x2,
+   SVGA3DOP_CALL,
+   SVGA3DOP_CALLNZ,
+   SVGA3DOP_LOOP,
+   SVGA3DOP_RET,
+   SVGA3DOP_ENDLOOP,
+   SVGA3DOP_LABEL,
+   SVGA3DOP_DCL,
+   SVGA3DOP_POW,
+   SVGA3DOP_CRS,
+   SVGA3DOP_SGN,
+   SVGA3DOP_ABS,
+   SVGA3DOP_NRM,
+   SVGA3DOP_SINCOS,
+   SVGA3DOP_REP,
+   SVGA3DOP_ENDREP,
+   SVGA3DOP_IF,
+   SVGA3DOP_IFC,
+   SVGA3DOP_ELSE,
+   SVGA3DOP_ENDIF,
+   SVGA3DOP_BREAK,
+   SVGA3DOP_BREAKC,
+   SVGA3DOP_MOVA,
+   SVGA3DOP_DEFB,
+   SVGA3DOP_DEFI,
+   SVGA3DOP_TEXCOORD = 64,
+   SVGA3DOP_TEXKILL,
+   SVGA3DOP_TEX,
+   SVGA3DOP_TEXBEM,
+   SVGA3DOP_TEXBEML,
+   SVGA3DOP_TEXREG2AR,
+   SVGA3DOP_TEXREG2GB = 70,
+   SVGA3DOP_TEXM3x2PAD,
+   SVGA3DOP_TEXM3x2TEX,
+   SVGA3DOP_TEXM3x3PAD,
+   SVGA3DOP_TEXM3x3TEX,
+   SVGA3DOP_RESERVED0,
+   SVGA3DOP_TEXM3x3SPEC,
+   SVGA3DOP_TEXM3x3VSPEC,
+   SVGA3DOP_EXPP,
+   SVGA3DOP_LOGP,
+   SVGA3DOP_CND = 80,
+   SVGA3DOP_DEF,
+   SVGA3DOP_TEXREG2RGB,
+   SVGA3DOP_TEXDP3TEX,
+   SVGA3DOP_TEXM3x2DEPTH,
+   SVGA3DOP_TEXDP3,
+   SVGA3DOP_TEXM3x3,
+   SVGA3DOP_TEXDEPTH,
+   SVGA3DOP_CMP,
+   SVGA3DOP_BEM,
+   SVGA3DOP_DP2ADD = 90,
+   SVGA3DOP_DSX,
+   SVGA3DOP_DSY,
+   SVGA3DOP_TEXLDD,
+   SVGA3DOP_SETP,
+   SVGA3DOP_TEXLDL,
+   SVGA3DOP_BREAKP = 96,
+   SVGA3DOP_LAST_INST,
+   SVGA3DOP_PHASE = 0xFFFD,
+   SVGA3DOP_COMMENT = 0xFFFE,
+   SVGA3DOP_END = 0xFFFF
+} SVGA3dShaderOpCodeType;
+
+/* SVGA3D operation control/comparison function types */
+
+typedef enum {
+   SVGA3DOPCONT_NONE,
+   SVGA3DOPCONT_PROJECT,   /* Projective texturing */
+   SVGA3DOPCONT_BIAS       /* Texturing with a LOD bias */
+} SVGA3dShaderOpCodeControlFnType;
+
+typedef enum {
+   SVGA3DOPCOMP_RESERVED0 = 0,
+   SVGA3DOPCOMP_GT,
+   SVGA3DOPCOMP_EQ,
+   SVGA3DOPCOMP_GE,
+   SVGA3DOPCOMP_LT,
+   SVGA3DOPCOMPC_NE,
+   SVGA3DOPCOMP_LE,
+   SVGA3DOPCOMP_RESERVED1
+} SVGA3dShaderOpCodeCompFnType;
+
+/* SVGA3D register types */
+
+typedef enum {
+    SVGA3DREG_TEMP = 0,       /* Temporary register file */
+    SVGA3DREG_INPUT,          /* Input register file */
+    SVGA3DREG_CONST,          /* Constant register file */
+    SVGA3DREG_ADDR,           /* Address register for VS */
+    SVGA3DREG_TEXTURE = 3,    /* Texture register file for PS */
+    SVGA3DREG_RASTOUT,        /* Rasterizer register file */
+    SVGA3DREG_ATTROUT,        /* Attribute output register file */
+    SVGA3DREG_TEXCRDOUT,      /* Texture coordinate output register file */
+    SVGA3DREG_OUTPUT = 6,     /* Output register file for VS 3.0+ */
+    SVGA3DREG_CONSTINT,       /* Constant integer vector register file */
+    SVGA3DREG_COLOROUT,       /* Color output register file */
+    SVGA3DREG_DEPTHOUT,       /* Depth output register file */
+    SVGA3DREG_SAMPLER,        /* Sampler state register file */
+    SVGA3DREG_CONST2,         /* Constant register file 2048 - 4095 */
+    SVGA3DREG_CONST3,         /* Constant register file 4096 - 6143 */
+    SVGA3DREG_CONST4,         /* Constant register file 6144 - 8191 */
+    SVGA3DREG_CONSTBOOL,      /* Constant boolean register file */
+    SVGA3DREG_LOOP,           /* Loop counter register file */
+    SVGA3DREG_TEMPFLOAT16,    /* 16-bit float temp register file */
+    SVGA3DREG_MISCTYPE,       /* Miscellaneous (single) registers */
+    SVGA3DREG_LABEL,          /* Label */
+    SVGA3DREG_PREDICATE       /* Predicate register */
+} SVGA3dShaderRegType;
+
+/* SVGA3D rasterizer output register types */
+
+typedef enum {
+   SVGA3DRASTOUT_POSITION = 0,
+   SVGA3DRASTOUT_FOG,
+   SVGA3DRASTOUT_PSIZE
+} SVGA3dShaderRastOutRegType;
+
+/* SVGA3D miscellaneous register types */
+
+typedef enum {
+   SVGA3DMISCREG_POSITION = 0,   /* Input position x,y,z,rhw (PS) */
+   SVGA3DMISCREG_FACE            /* Floating point primitive area (PS) */
+} SVGA3DShaderMiscRegType;
+
+/* SVGA3D sampler types */
+
+typedef enum {
+   SVGA3DSAMP_UNKNOWN = 0, /* Uninitialized value */
+   SVGA3DSAMP_2D = 2,      /* dcl_2d s# (for declaring a 2-D texture) */
+   SVGA3DSAMP_CUBE,        /* dcl_cube s# (for declaring a cube texture) */
+   SVGA3DSAMP_VOLUME       /* dcl_volume s# (for declaring a volume texture) */
+} SVGA3dShaderSamplerType;
+
+/* SVGA3D sampler format classes */
+
+typedef enum {
+   SVGA3DSAMPFORMAT_ARGB,        /* ARGB formats */
+   SVGA3DSAMPFORMAT_V8U8,        /* Sign and normalize (SNORM) V & U */
+   SVGA3DSAMPFORMAT_Q8W8V8U8,    /* SNORM all */
+   SVGA3DSAMPFORMAT_CxV8U8,      /* SNORM V & U, C=SQRT(1-U^2-V^2) */
+   SVGA3DSAMPFORMAT_X8L8V8U8,    /* SNORM V & U */
+   SVGA3DSAMPFORMAT_A2W10V10U10, /* SNORM W, V & U */
+   SVGA3DSAMPFORMAT_DXT_PMA,     /* DXT pre-multiplied alpha */
+   SVGA3DSAMPFORMAT_YUV,         /* YUV video format */
+   SVGA3DSAMPFORMAT_UYVY,        /* UYVY video format */
+   SVGA3DSAMPFORMAT_Rx,          /* R16F/32F */
+   SVGA3DSAMPFORMAT_RxGx,        /* R16FG16F, R32FG32F */
+   SVGA3DSAMPFORMAT_V16U16       /* SNORM all */
+} SVGA3DShaderSamplerFormatClass;
+
+/* SVGA3D write mask */
+
+#define SVGA3DWRITEMASK_0    1 /* Component 0 (X;Red) */
+#define SVGA3DWRITEMASK_1    2 /* Component 1 (Y;Green) */
+#define SVGA3DWRITEMASK_2    4 /* Component 2 (Z;Blue) */
+#define SVGA3DWRITEMASK_3    8 /* Component 3 (W;Alpha) */
+#define SVGA3DWRITEMASK_ALL 15 /* All components */
+
+/* SVGA3D destination modifiers */
+
+#define SVGA3DDSTMOD_NONE              0 /* nop */
+#define SVGA3DDSTMOD_SATURATE          1 /* clamp to [0, 1] */
+#define SVGA3DDSTMOD_PARTIALPRECISION  2 /* Partial precision hint */
+
+/*
+ * Relevant to multisampling only:
+ * When the pixel center is not covered, sample
+ * attribute or compute gradients/LOD
+ * using multisample "centroid" location.
+ * "Centroid" is some location within the covered
+ * region of the pixel.
+ */
+
+#define SVGA3DDSTMOD_MSAMPCENTROID     4
+
+/* SVGA3D source swizzle */
+
+#define SVGA3DSWIZZLE_REPLICATEX 0x00
+#define SVGA3DSWIZZLE_REPLICATEY 0x55
+#define SVGA3DSWIZZLE_REPLICATEZ 0xAA
+#define SVGA3DSWIZZLE_REPLICATEW 0xFF
+#define SVGA3DSWIZZLE_NONE       0xE4
+#define SVGA3DSWIZZLE_YZXW       0xC9
+#define SVGA3DSWIZZLE_ZXYW       0xD2
+#define SVGA3DSWIZZLE_WXYZ       0x1B
+
+/* SVGA3D source modifiers */
+
+typedef enum {
+    SVGA3DSRCMOD_NONE = 0, /* nop */
+    SVGA3DSRCMOD_NEG,      /* negate */
+    SVGA3DSRCMOD_BIAS,     /* bias */
+    SVGA3DSRCMOD_BIASNEG,  /* bias and negate */
+    SVGA3DSRCMOD_SIGN,     /* sign */
+    SVGA3DSRCMOD_SIGNNEG,  /* sign and negate */
+    SVGA3DSRCMOD_COMP,     /* complement */
+    SVGA3DSRCMOD_X2,       /* x2 */
+    SVGA3DSRCMOD_X2NEG,    /* x2 and negate */
+    SVGA3DSRCMOD_DZ,       /* divide through by z component */
+    SVGA3DSRCMOD_DW,       /* divide through by w component */
+    SVGA3DSRCMOD_ABS,      /* abs() */
+    SVGA3DSRCMOD_ABSNEG,   /* -abs() */
+    SVGA3DSRCMOD_NOT       /* ! (for predicate register) */
+} SVGA3dShaderSrcModType;
+
+/* SVGA3D instruction token */
+
+typedef struct {
+   union {
+      struct {
+         uint32_t comment_op : 16;
+         uint32_t comment_size : 16;
+      } s;
+
+      struct {
+         uint32_t op : 16;
+         uint32_t control : 3;
+         uint32_t reserved2 : 5;
+         uint32_t size : 4;
+         uint32_t predicated : 1;
+         uint32_t reserved1 : 1;
+         uint32_t coissue : 1;
+         uint32_t reserved0 : 1;
+      } s1;
+
+      uint32_t value;
+   };
+} SVGA3dShaderInstToken;
+
+/* SVGA3D destination parameter token */
+
+typedef struct {
+   union {
+      struct {
+         uint32_t num : 11;
+         uint32_t type_upper : 2;
+         uint32_t relAddr : 1;
+         uint32_t reserved1 : 2;
+         uint32_t mask : 4;
+         uint32_t dstMod : 4;
+         uint32_t shfScale : 4;
+         uint32_t type_lower : 3;
+         uint32_t reserved0 : 1;
+      } s;
+
+      uint32_t value;
+   };
+} SVGA3dShaderDestToken;
+
+/* SVGA3D source parameter token */
+
+typedef struct {
+   union {
+      struct {
+         uint32_t num : 11;
+         uint32_t type_upper : 2;
+         uint32_t relAddr : 1;
+         uint32_t reserved1 : 2;
+         uint32_t swizzle : 8;
+         uint32_t srcMod : 4;
+         uint32_t type_lower : 3;
+         uint32_t reserved0 : 1;
+      } s;
+
+      uint32_t value;
+   };
+} SVGA3dShaderSrcToken;
+
+/* SVGA3DOP_DCL parameter tokens */
+
+typedef struct {
+   union {
+      struct {
+         union {
+            struct {
+               uint32_t usage : 5;
+               uint32_t reserved1 : 11;
+               uint32_t index : 4;
+               uint32_t reserved0 : 12;
+            } s; /* input / output declaration */
+
+            struct {
+               uint32_t reserved3 : 27;
+               uint32_t type : 4;
+               uint32_t reserved2 : 1;
+            } s1; /* sampler declaration */
+         };
+
+         SVGA3dShaderDestToken dst;
+      } s2;
+
+      uint32_t values[2];
+   };
+} SVGA3DOpDclArgs;
+
+/* SVGA3DOP_DEF parameter tokens */
+
+typedef struct {
+   union {
+      struct {
+         SVGA3dShaderDestToken dst;
+
+         union {
+            float constValues[4];
+            int constIValues[4];
+            bool constBValue;
+         };
+      } s;
+
+      uint32_t values[5];
+   };
+} SVGA3DOpDefArgs;
+
+/* SVGA3D shader token */
+
+typedef union {
+   uint32_t value;
+   SVGA3dShaderInstToken inst;
+   SVGA3dShaderDestToken dest;
+   SVGA3dShaderSrcToken src;
+} SVGA3dShaderToken;
+
+/* SVGA3D shader program */
+
+typedef struct {
+   SVGA3dShaderVersion version;
+   /* SVGA3dShaderToken stream */
+} SVGA3dShaderProgram;
+
+
+#if 0
+/* SVGA3D version specific register assignments */
+
+static const uint32_t SVGA3D_INPUT_REG_POSITION_VS11 = 0;
+static const uint32_t SVGA3D_INPUT_REG_PSIZE_VS11 = 1;
+static const uint32_t SVGA3D_INPUT_REG_FOG_VS11 = 3;
+static const uint32_t SVGA3D_INPUT_REG_FOG_MASK_VS11 = SVGA3DWRITEMASK_3;
+static const uint32_t SVGA3D_INPUT_REG_COLOR_BASE_VS11 = 2;
+static const uint32_t SVGA3D_INPUT_REG_TEXCOORD_BASE_VS11 = 4;
+
+static const uint32_t SVGA3D_INPUT_REG_COLOR_BASE_PS11 = 0;
+static const uint32_t SVGA3D_INPUT_REG_TEXCOORD_BASE_PS11 = 2;
+static const uint32_t SVGA3D_OUTPUT_REG_DEPTH_PS11 = 0;
+static const uint32_t SVGA3D_OUTPUT_REG_COLOR_PS11 = 1;
+
+static const uint32_t SVGA3D_INPUT_REG_COLOR_BASE_PS20 = 0;
+static const uint32_t SVGA3D_INPUT_REG_COLOR_NUM_PS20 = 2;
+static const uint32_t SVGA3D_INPUT_REG_TEXCOORD_BASE_PS20 = 2;
+static const uint32_t SVGA3D_INPUT_REG_TEXCOORD_NUM_PS20 = 8;
+static const uint32_t SVGA3D_OUTPUT_REG_COLOR_BASE_PS20 = 1;
+static const uint32_t SVGA3D_OUTPUT_REG_COLOR_NUM_PS20 = 4;
+static const uint32_t SVGA3D_OUTPUT_REG_DEPTH_BASE_PS20 = 0;
+static const uint32_t SVGA3D_OUTPUT_REG_DEPTH_NUM_PS20 = 1;
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * SVGA3dShaderGetRegType --
+ *
+ *      As the register type is split into two non sequential fields,
+ *      this function provides an useful way of accessing the actual
+ *      register type without having to manually concatenate the
+ *      type_upper and type_lower fields.
+ *
+ * Results:
+ *      Returns the register type.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static INLINE SVGA3dShaderRegType
+SVGA3dShaderGetRegType(uint32_t token)
+{
+   SVGA3dShaderSrcToken src;
+   src.value = token;
+   return (SVGA3dShaderRegType)(src.type_upper << 3 | src.type_lower);
+}
+#endif
+
+#endif /* __SVGA3D_SHADER_DEFS__ */
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga_escape.h b/src/VBox/Devices/Graphics/vmsvga/svga_escape.h
index b96705c..bbda7c1 100644
--- a/src/VBox/Devices/Graphics/vmsvga/svga_escape.h
+++ b/src/VBox/Devices/Graphics/vmsvga/svga_escape.h
@@ -1,11 +1,89 @@
+/**********************************************************
+ * Copyright 2007-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
 /*
- * SVGA escape commands
+ * svga_escape.h --
+ *
+ *    Definitions for our own (vendor-specific) SVGA Escape commands.
  */
 
 #ifndef _SVGA_ESCAPE_H_
 #define _SVGA_ESCAPE_H_
 
+
+/*
+ * Namespace IDs for the escape command
+ */
+
 #define SVGA_ESCAPE_NSID_VMWARE 0x00000000
+#define SVGA_ESCAPE_NSID_DEVEL  0xFFFFFFFF
+
+
+/*
+ * Within SVGA_ESCAPE_NSID_VMWARE, we multiplex commands according to
+ * the first DWORD of escape data (after the nsID and size). As a
+ * guideline we're using the high word and low word as a major and
+ * minor command number, respectively.
+ *
+ * Major command number allocation:
+ *
+ *   0000: Reserved
+ *   0001: SVGA_ESCAPE_VMWARE_LOG (svga_binary_logger.h)
+ *   0002: SVGA_ESCAPE_VMWARE_VIDEO (svga_overlay.h)
+ *   0003: SVGA_ESCAPE_VMWARE_HINT (svga_escape.h)
+ */
+
+#define SVGA_ESCAPE_VMWARE_MAJOR_MASK  0xFFFF0000
+
+
+/*
+ * SVGA Hint commands.
+ *
+ * These escapes let the SVGA driver provide optional information to
+ * he host about the state of the guest or guest applications. The
+ * host can use these hints to make user interface or performance
+ * decisions.
+ *
+ * Notes:
+ *
+ *   - SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN is deprecated for guests
+ *     that use the SVGA Screen Object extension. Instead of sending
+ *     this escape, use the SVGA_SCREEN_FULLSCREEN_HINT flag on your
+ *     Screen Object.
+ */
+
+#define SVGA_ESCAPE_VMWARE_HINT               0x00030000
+#define SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN    0x00030001  // Deprecated
 
+typedef
+struct {
+   uint32_t command;
+   uint32_t fullscreen;
+   struct {
+      int32_t x, y;
+   } monitorPosition;
+} SVGAEscapeHintFullscreen;
 
 #endif /* _SVGA_ESCAPE_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga_overlay.h b/src/VBox/Devices/Graphics/vmsvga/svga_overlay.h
index 08aae92..42c804e 100644
--- a/src/VBox/Devices/Graphics/vmsvga/svga_overlay.h
+++ b/src/VBox/Devices/Graphics/vmsvga/svga_overlay.h
@@ -1,32 +1,201 @@
+/**********************************************************
+ * Copyright 2007-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
 /*
- * VMware SVGA video overlay definitions
+ * svga_overlay.h --
+ *
+ *    Definitions for video-overlay support.
  */
 
 #ifndef _SVGA_OVERLAY_H_
 #define _SVGA_OVERLAY_H_
 
+#include "svga_reg.h"
+
+/*
+ * Video formats we support
+ */
+
+#define VMWARE_FOURCC_YV12 0x32315659 // 'Y' 'V' '1' '2'
+#define VMWARE_FOURCC_YUY2 0x32595559 // 'Y' 'U' 'Y' '2'
+#define VMWARE_FOURCC_UYVY 0x59565955 // 'U' 'Y' 'V' 'Y'
+
+typedef enum {
+   SVGA_OVERLAY_FORMAT_INVALID = 0,
+   SVGA_OVERLAY_FORMAT_YV12 = VMWARE_FOURCC_YV12,
+   SVGA_OVERLAY_FORMAT_YUY2 = VMWARE_FOURCC_YUY2,
+   SVGA_OVERLAY_FORMAT_UYVY = VMWARE_FOURCC_UYVY
+} SVGAOverlayFormat;
+
+#define SVGA_VIDEO_COLORKEY_MASK             0x00ffffff
+
+#define SVGA_ESCAPE_VMWARE_VIDEO             0x00020000
+
 #define SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS    0x00020001
+        /* FIFO escape layout:
+         * Type, Stream Id, (Register Id, Value) pairs */
+
 #define SVGA_ESCAPE_VMWARE_VIDEO_FLUSH       0x00020002
+        /* FIFO escape layout:
+         * Type, Stream Id */
 
-typedef struct SVGAEscapeVideoSetRegs
-{
-   struct
-   {
+typedef
+struct SVGAEscapeVideoSetRegs {
+   struct {
       uint32_t cmdType;
       uint32_t streamId;
    } header;
 
-   struct
-   {
+   // May include zero or more items.
+   struct {
       uint32_t registerId;
       uint32_t value;
    } items[1];
 } SVGAEscapeVideoSetRegs;
 
-typedef struct SVGAEscapeVideoFlush
-{
+typedef
+struct SVGAEscapeVideoFlush {
    uint32_t cmdType;
    uint32_t streamId;
 } SVGAEscapeVideoFlush;
 
-#endif /* _SVGA_OVERLAY_H_ */
+
+/*
+ * Struct definitions for the video overlay commands built on
+ * SVGAFifoCmdEscape.
+ */
+typedef
+struct {
+   uint32_t command;
+   uint32_t overlay;
+} SVGAFifoEscapeCmdVideoBase;
+
+typedef
+struct {
+   SVGAFifoEscapeCmdVideoBase videoCmd;
+} SVGAFifoEscapeCmdVideoFlush;
+
+typedef
+struct {
+   SVGAFifoEscapeCmdVideoBase videoCmd;
+   struct {
+      uint32_t regId;
+      uint32_t value;
+   } items[1];
+} SVGAFifoEscapeCmdVideoSetRegs;
+
+typedef
+struct {
+   SVGAFifoEscapeCmdVideoBase videoCmd;
+   struct {
+      uint32_t regId;
+      uint32_t value;
+   } items[SVGA_VIDEO_NUM_REGS];
+} SVGAFifoEscapeCmdVideoSetAllRegs;
+
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * VMwareVideoGetAttributes --
+ *
+ *      Computes the size, pitches and offsets for YUV frames.
+ *
+ * Results:
+ *      TRUE on success; otherwise FALSE on failure.
+ *
+ * Side effects:
+ *      Pitches and offsets for the given YUV frame are put in 'pitches'
+ *      and 'offsets' respectively. They are both optional though.
+ *
+ *----------------------------------------------------------------------
+ */
+#if 0
+static INLINE Bool
+VMwareVideoGetAttributes(const SVGAOverlayFormat format,    // IN
+                         uint32_t *width,                     // IN / OUT
+                         uint32_t *height,                    // IN / OUT
+                         uint32_t *size,                      // OUT
+                         uint32_t *pitches,                   // OUT (optional)
+                         uint32_t *offsets)                   // OUT (optional)
+{
+    int tmp;
+
+    *width = (*width + 1) & ~1;
+
+    if (offsets) {
+        offsets[0] = 0;
+    }
+
+    switch (format) {
+    case VMWARE_FOURCC_YV12:
+       *height = (*height + 1) & ~1;
+       *size = (*width + 3) & ~3;
+
+       if (pitches) {
+          pitches[0] = *size;
+       }
+
+       *size *= *height;
+
+       if (offsets) {
+          offsets[1] = *size;
+       }
+
+       tmp = ((*width >> 1) + 3) & ~3;
+
+       if (pitches) {
+          pitches[1] = pitches[2] = tmp;
+       }
+
+       tmp *= (*height >> 1);
+       *size += tmp;
+
+       if (offsets) {
+          offsets[2] = *size;
+       }
+
+       *size += tmp;
+       break;
+
+    case VMWARE_FOURCC_YUY2:
+    case VMWARE_FOURCC_UYVY:
+       *size = *width * 2;
+
+       if (pitches) {
+          pitches[0] = *size;
+       }
+
+       *size *= *height;
+       break;
+
+    default:
+       return FALSE;
+    }
+
+    return TRUE;
+}
+#endif
+#endif // _SVGA_OVERLAY_H_
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga_reg.h b/src/VBox/Devices/Graphics/vmsvga/svga_reg.h
index 6a1c69b..b6aec7b 100644
--- a/src/VBox/Devices/Graphics/vmsvga/svga_reg.h
+++ b/src/VBox/Devices/Graphics/vmsvga/svga_reg.h
@@ -1,16 +1,73 @@
+/**********************************************************
+ * Copyright 1998-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
 /*
- * VMware SVGA II hardware definitions
+ * svga_reg.h --
+ *
+ *    Virtual hardware definitions for the VMware SVGA II device.
  */
 
 #ifndef _SVGA_REG_H_
 #define _SVGA_REG_H_
 
+/*
+ * PCI device IDs.
+ */
 #define PCI_VENDOR_ID_VMWARE            0x15AD
 #define PCI_DEVICE_ID_VMWARE_SVGA2      0x0405
 
-#define SVGA_IRQFLAG_ANY_FENCE            0x1
-#define SVGA_IRQFLAG_FIFO_PROGRESS        0x2
-#define SVGA_IRQFLAG_FENCE_GOAL           0x4
+/*
+ * SVGA_REG_ENABLE bit definitions.
+ */
+#define SVGA_REG_ENABLE_DISABLE     0
+#define SVGA_REG_ENABLE_ENABLE      1
+#define SVGA_REG_ENABLE_HIDE        2
+#define SVGA_REG_ENABLE_ENABLE_HIDE (SVGA_REG_ENABLE_ENABLE |\
+				     SVGA_REG_ENABLE_HIDE)
+
+/*
+ * Legal values for the SVGA_REG_CURSOR_ON register in old-fashioned
+ * cursor bypass mode. This is still supported, but no new guest
+ * drivers should use it.
+ */
+#define SVGA_CURSOR_ON_HIDE            0x0   /* Must be 0 to maintain backward compatibility */
+#define SVGA_CURSOR_ON_SHOW            0x1   /* Must be 1 to maintain backward compatibility */
+#define SVGA_CURSOR_ON_REMOVE_FROM_FB  0x2   /* Remove the cursor from the framebuffer because we need to see what's under it */
+#define SVGA_CURSOR_ON_RESTORE_TO_FB   0x3   /* Put the cursor back in the framebuffer so the user can see it */
+
+/*
+ * The maximum framebuffer size that can traced for e.g. guests in VESA mode.
+ * The changeMap in the monitor is proportional to this number. Therefore, we'd
+ * like to keep it as small as possible to reduce monitor overhead (using
+ * SVGA_VRAM_MAX_SIZE for this increases the size of the shared area by over
+ * 4k!).
+ *
+ * NB: For compatibility reasons, this value must be greater than 0xff0000.
+ *     See bug 335072.
+ */
+#define SVGA_FB_MAX_TRACEABLE_SIZE      0x1000000
 
 #define SVGA_MAX_PSEUDOCOLOR_DEPTH      8
 #define SVGA_MAX_PSEUDOCOLORS           (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH)
@@ -19,28 +76,43 @@
 #define SVGA_MAGIC         0x900000UL
 #define SVGA_MAKE_ID(ver)  (SVGA_MAGIC << 8 | (ver))
 
+/* Version 2 let the address of the frame buffer be unsigned on Win32 */
 #define SVGA_VERSION_2     2
 #define SVGA_ID_2          SVGA_MAKE_ID(SVGA_VERSION_2)
 
+/* Version 1 has new registers starting with SVGA_REG_CAPABILITIES so
+   PALETTE_BASE has moved */
 #define SVGA_VERSION_1     1
 #define SVGA_ID_1          SVGA_MAKE_ID(SVGA_VERSION_1)
 
+/* Version 0 is the initial version */
 #define SVGA_VERSION_0     0
 #define SVGA_ID_0          SVGA_MAKE_ID(SVGA_VERSION_0)
 
+/* "Invalid" value for all SVGA IDs. (Version ID, screen object ID, surface ID...) */
 #define SVGA_ID_INVALID    0xFFFFFFFF
 
+/* Port offsets, relative to BAR0 */
 #define SVGA_INDEX_PORT         0x0
 #define SVGA_VALUE_PORT         0x1
 #define SVGA_BIOS_PORT          0x2
 #define SVGA_IRQSTATUS_PORT     0x8
 
-#define SVGA_IRQFLAG_ANY_FENCE            0x1
-#define SVGA_IRQFLAG_FIFO_PROGRESS        0x2
-#define SVGA_IRQFLAG_FENCE_GOAL           0x4
+/*
+ * Interrupt source flags for IRQSTATUS_PORT and IRQMASK.
+ *
+ * Interrupts are only supported when the
+ * SVGA_CAP_IRQMASK capability is present.
+ */
+#define SVGA_IRQFLAG_ANY_FENCE            0x1    /* Any fence was passed */
+#define SVGA_IRQFLAG_FIFO_PROGRESS        0x2    /* Made forward progress in the FIFO */
+#define SVGA_IRQFLAG_FENCE_GOAL           0x4    /* SVGA_FIFO_FENCE_GOAL reached */
+
+/*
+ * Registers
+ */
 
-enum
-{
+enum {
    SVGA_REG_ID = 0,
    SVGA_REG_ENABLE = 1,
    SVGA_REG_WIDTH = 2,
@@ -48,271 +120,1436 @@ enum
    SVGA_REG_MAX_WIDTH = 4,
    SVGA_REG_MAX_HEIGHT = 5,
    SVGA_REG_DEPTH = 6,
-   SVGA_REG_BITS_PER_PIXEL = 7,
+   SVGA_REG_BITS_PER_PIXEL = 7,       /* Current bpp in the guest */
    SVGA_REG_PSEUDOCOLOR = 8,
    SVGA_REG_RED_MASK = 9,
    SVGA_REG_GREEN_MASK = 10,
    SVGA_REG_BLUE_MASK = 11,
    SVGA_REG_BYTES_PER_LINE = 12,
-   SVGA_REG_FB_START = 13,
+   SVGA_REG_FB_START = 13,            /* (Deprecated) */
    SVGA_REG_FB_OFFSET = 14,
    SVGA_REG_VRAM_SIZE = 15,
    SVGA_REG_FB_SIZE = 16,
+
+   /* ID 0 implementation only had the above registers, then the palette */
+
    SVGA_REG_CAPABILITIES = 17,
-   SVGA_REG_MEM_START = 18,
+   SVGA_REG_MEM_START = 18,           /* (Deprecated) */
    SVGA_REG_MEM_SIZE = 19,
-   SVGA_REG_CONFIG_DONE = 20,
-   SVGA_REG_SYNC = 21,
-   SVGA_REG_BUSY = 22,
-   SVGA_REG_GUEST_ID = 23,
-   SVGA_REG_CURSOR_ID = 24,
-   SVGA_REG_CURSOR_X = 25,
-   SVGA_REG_CURSOR_Y = 26,
-   SVGA_REG_CURSOR_ON = 27,
-   SVGA_REG_HOST_BITS_PER_PIXEL = 28,
-   SVGA_REG_SCRATCH_SIZE = 29,
-   SVGA_REG_MEM_REGS = 30,
-   SVGA_REG_NUM_DISPLAYS = 31,
-   SVGA_REG_PITCHLOCK = 32,
-   SVGA_REG_IRQMASK = 33,
-   SVGA_REG_NUM_GUEST_DISPLAYS = 34,
-   SVGA_REG_DISPLAY_ID = 35,
-   SVGA_REG_DISPLAY_IS_PRIMARY = 36,
-   SVGA_REG_DISPLAY_POSITION_X = 37,
-   SVGA_REG_DISPLAY_POSITION_Y = 38,
-   SVGA_REG_DISPLAY_WIDTH = 39,
-   SVGA_REG_DISPLAY_HEIGHT = 40,
+   SVGA_REG_CONFIG_DONE = 20,         /* Set when memory area configured */
+   SVGA_REG_SYNC = 21,                /* See "FIFO Synchronization Registers" */
+   SVGA_REG_BUSY = 22,                /* See "FIFO Synchronization Registers" */
+   SVGA_REG_GUEST_ID = 23,            /* Set guest OS identifier */
+   SVGA_REG_CURSOR_ID = 24,           /* (Deprecated) */
+   SVGA_REG_CURSOR_X = 25,            /* (Deprecated) */
+   SVGA_REG_CURSOR_Y = 26,            /* (Deprecated) */
+   SVGA_REG_CURSOR_ON = 27,           /* (Deprecated) */
+   SVGA_REG_HOST_BITS_PER_PIXEL = 28, /* (Deprecated) */
+   SVGA_REG_SCRATCH_SIZE = 29,        /* Number of scratch registers */
+   SVGA_REG_MEM_REGS = 30,            /* Number of FIFO registers */
+   SVGA_REG_NUM_DISPLAYS = 31,        /* (Deprecated) */
+   SVGA_REG_PITCHLOCK = 32,           /* Fixed pitch for all modes */
+   SVGA_REG_IRQMASK = 33,             /* Interrupt mask */
+
+   /* Legacy multi-monitor support */
+   SVGA_REG_NUM_GUEST_DISPLAYS = 34,/* Number of guest displays in X/Y direction */
+   SVGA_REG_DISPLAY_ID = 35,        /* Display ID for the following display attributes */
+   SVGA_REG_DISPLAY_IS_PRIMARY = 36,/* Whether this is a primary display */
+   SVGA_REG_DISPLAY_POSITION_X = 37,/* The display position x */
+   SVGA_REG_DISPLAY_POSITION_Y = 38,/* The display position y */
+   SVGA_REG_DISPLAY_WIDTH = 39,     /* The display's width */
+   SVGA_REG_DISPLAY_HEIGHT = 40,    /* The display's height */
+
+   /* See "Guest memory regions" below. */
    SVGA_REG_GMR_ID = 41,
    SVGA_REG_GMR_DESCRIPTOR = 42,
    SVGA_REG_GMR_MAX_IDS = 43,
    SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44,
-   SVGA_REG_TRACES = 45,
-   SVGA_REG_GMRS_MAX_PAGES = 46,
-   SVGA_REG_MEMORY_SIZE = 47,
-   SVGA_REG_TOP = 48,
-   SVGA_PALETTE_BASE = 1024,
+
+   SVGA_REG_TRACES = 45,            /* Enable trace-based updates even when FIFO is on */
+   SVGA_REG_GMRS_MAX_PAGES = 46,    /* Maximum number of 4KB pages for all GMRs */
+   SVGA_REG_MEMORY_SIZE = 47,       /* Total dedicated device memory excluding FIFO */
+   SVGA_REG_TOP = 48,               /* Must be 1 more than the last register */
+
+   SVGA_PALETTE_BASE = 1024,        /* Base of SVGA color map */
+   /* Next 768 (== 256*3) registers exist for colormap */
+
    SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS
+                                    /* Base of scratch registers */
+   /* Next reg[SVGA_REG_SCRATCH_SIZE] registers exist for scratch usage:
+      First 4 are reserved for VESA BIOS Extension; any remaining are for
+      the use of the current SVGA driver. */
 };
 
-enum
-{
-   SVGA_FIFO_MIN = 0,
-   SVGA_FIFO_MAX,
-   SVGA_FIFO_NEXT_CMD,
-   SVGA_FIFO_STOP,
-   SVGA_FIFO_CAPABILITIES = 4,
-   SVGA_FIFO_FLAGS,
-   SVGA_FIFO_FENCE,
-   SVGA_FIFO_3D_HWVERSION,
-   SVGA_FIFO_PITCHLOCK,
-   SVGA_FIFO_CURSOR_ON,
-   SVGA_FIFO_CURSOR_X,
-   SVGA_FIFO_CURSOR_Y,
-   SVGA_FIFO_CURSOR_COUNT,
-   SVGA_FIFO_CURSOR_LAST_UPDATED,
-   SVGA_FIFO_RESERVED,
-   SVGA_FIFO_CURSOR_SCREEN_ID,
-   SVGA_FIFO_DEAD,
-   SVGA_FIFO_3D_HWVERSION_REVISED,
-   SVGA_FIFO_3D_CAPS      = 32,
-   SVGA_FIFO_3D_CAPS_LAST = 32 + 255,
-   SVGA_FIFO_GUEST_3D_HWVERSION,
-   SVGA_FIFO_FENCE_GOAL,
-   SVGA_FIFO_BUSY,
-   SVGA_FIFO_NUM_REGS
-};
 
-typedef enum
-{
-   SVGA_CMD_INVALID_CMD           = 0,
-   SVGA_CMD_UPDATE                = 1,
-   SVGA_CMD_RECT_COPY             = 3,
-   SVGA_CMD_DEFINE_CURSOR         = 19,
-   SVGA_CMD_DEFINE_ALPHA_CURSOR   = 22,
-   SVGA_CMD_UPDATE_VERBOSE        = 25,
-   SVGA_CMD_FRONT_ROP_FILL        = 29,
-   SVGA_CMD_FENCE                 = 30,
-   SVGA_CMD_ESCAPE                = 33,
-   SVGA_CMD_DEFINE_SCREEN         = 34,
-   SVGA_CMD_DESTROY_SCREEN        = 35,
-   SVGA_CMD_DEFINE_GMRFB          = 36,
-   SVGA_CMD_BLIT_GMRFB_TO_SCREEN  = 37,
-   SVGA_CMD_BLIT_SCREEN_TO_GMRFB  = 38,
-   SVGA_CMD_ANNOTATION_FILL       = 39,
-   SVGA_CMD_ANNOTATION_COPY       = 40,
-   SVGA_CMD_DEFINE_GMR2           = 41,
-   SVGA_CMD_REMAP_GMR2            = 42,
-   SVGA_CMD_MAX
-} SVGAFifoCmdId;
+/*
+ * Guest memory regions (GMRs):
+ *
+ * This is a new memory mapping feature available in SVGA devices
+ * which have the SVGA_CAP_GMR bit set. Previously, there were two
+ * fixed memory regions available with which to share data between the
+ * device and the driver: the FIFO ('MEM') and the framebuffer. GMRs
+ * are our name for an extensible way of providing arbitrary DMA
+ * buffers for use between the driver and the SVGA device. They are a
+ * new alternative to framebuffer memory, usable for both 2D and 3D
+ * graphics operations.
+ *
+ * Since GMR mapping must be done synchronously with guest CPU
+ * execution, we use a new pair of SVGA registers:
+ *
+ *   SVGA_REG_GMR_ID --
+ *
+ *     Read/write.
+ *     This register holds the 32-bit ID (a small positive integer)
+ *     of a GMR to create, delete, or redefine. Writing this register
+ *     has no side-effects.
+ *
+ *   SVGA_REG_GMR_DESCRIPTOR --
+ *
+ *     Write-only.
+ *     Writing this register will create, delete, or redefine the GMR
+ *     specified by the above ID register. If this register is zero,
+ *     the GMR is deleted. Any pointers into this GMR (including those
+ *     currently being processed by FIFO commands) will be
+ *     synchronously invalidated.
+ *
+ *     If this register is nonzero, it must be the physical page
+ *     number (PPN) of a data structure which describes the physical
+ *     layout of the memory region this GMR should describe. The
+ *     descriptor structure will be read synchronously by the SVGA
+ *     device when this register is written. The descriptor need not
+ *     remain allocated for the lifetime of the GMR.
+ *
+ *     The guest driver should write SVGA_REG_GMR_ID first, then
+ *     SVGA_REG_GMR_DESCRIPTOR.
+ *
+ *   SVGA_REG_GMR_MAX_IDS --
+ *
+ *     Read-only.
+ *     The SVGA device may choose to support a maximum number of
+ *     user-defined GMR IDs. This register holds the number of supported
+ *     IDs. (The maximum supported ID plus 1)
+ *
+ *   SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH --
+ *
+ *     Read-only.
+ *     The SVGA device may choose to put a limit on the total number
+ *     of SVGAGuestMemDescriptor structures it will read when defining
+ *     a single GMR.
+ *
+ * The descriptor structure is an array of SVGAGuestMemDescriptor
+ * structures. Each structure may do one of three things:
+ *
+ *   - Terminate the GMR descriptor list.
+ *     (ppn==0, numPages==0)
+ *
+ *   - Add a PPN or range of PPNs to the GMR's virtual address space.
+ *     (ppn != 0, numPages != 0)
+ *
+ *   - Provide the PPN of the next SVGAGuestMemDescriptor, in order to
+ *     support multi-page GMR descriptor tables without forcing the
+ *     driver to allocate physically contiguous memory.
+ *     (ppn != 0, numPages == 0)
+ *
+ * Note that each physical page of SVGAGuestMemDescriptor structures
+ * can describe at least 2MB of guest memory. If the driver needs to
+ * use more than one page of descriptor structures, it must use one of
+ * its SVGAGuestMemDescriptors to point to an additional page.  The
+ * device will never automatically cross a page boundary.
+ *
+ * Once the driver has described a GMR, it is immediately available
+ * for use via any FIFO command that uses an SVGAGuestPtr structure.
+ * These pointers include a GMR identifier plus an offset into that
+ * GMR.
+ *
+ * The driver must check the SVGA_CAP_GMR bit before using the GMR
+ * registers.
+ */
+
+/*
+ * Special GMR IDs, allowing SVGAGuestPtrs to point to framebuffer
+ * memory as well.  In the future, these IDs could even be used to
+ * allow legacy memory regions to be redefined by the guest as GMRs.
+ *
+ * Using the guest framebuffer (GFB) at BAR1 for general purpose DMA
+ * is being phased out. Please try to use user-defined GMRs whenever
+ * possible.
+ */
+#define SVGA_GMR_NULL         ((uint32_t) -1)
+#define SVGA_GMR_FRAMEBUFFER  ((uint32_t) -2)  // Guest Framebuffer (GFB)
+
+typedef
+struct SVGAGuestMemDescriptor {
+   uint32_t ppn;
+   uint32_t numPages;
+} SVGAGuestMemDescriptor;
+
+typedef
+struct SVGAGuestPtr {
+   uint32_t gmrId;
+   uint32_t offset;
+} SVGAGuestPtr;
 
-typedef struct SVGAColorBGRX
-{
-   union
-   {
-      struct
-      {
+
+/*
+ * SVGAGMRImageFormat --
+ *
+ *    This is a packed representation of the source 2D image format
+ *    for a GMR-to-screen blit. Currently it is defined as an encoding
+ *    of the screen's color depth and bits-per-pixel, however, 16 bits
+ *    are reserved for future use to identify other encodings (such as
+ *    RGBA or higher-precision images).
+ *
+ *    Currently supported formats:
+ *
+ *       bpp depth  Format Name
+ *       --- -----  -----------
+ *        32    24  32-bit BGRX
+ *        24    24  24-bit BGR
+ *        16    16  RGB 5-6-5
+ *        16    15  RGB 5-5-5
+ *
+ */
+
+typedef
+struct SVGAGMRImageFormat {
+   union {
+      struct {
+         uint32_t bitsPerPixel : 8;
+         uint32_t colorDepth   : 8;
+         uint32_t reserved     : 16;  // Must be zero
+      } s;
+
+      uint32_t value;
+   };
+} SVGAGMRImageFormat;
+
+typedef
+struct SVGAGuestImage {
+   SVGAGuestPtr         ptr;
+
+   /*
+    * A note on interpretation of pitch: This value of pitch is the
+    * number of bytes between vertically adjacent image
+    * blocks. Normally this is the number of bytes between the first
+    * pixel of two adjacent scanlines. With compressed textures,
+    * however, this may represent the number of bytes between
+    * compression blocks rather than between rows of pixels.
+    *
+    * XXX: Compressed textures currently must be tightly packed in guest memory.
+    *
+    * If the image is 1-dimensional, pitch is ignored.
+    *
+    * If 'pitch' is zero, the SVGA3D device calculates a pitch value
+    * assuming each row of blocks is tightly packed.
+    */
+   uint32_t pitch;
+} SVGAGuestImage;
+
+/*
+ * SVGAColorBGRX --
+ *
+ *    A 24-bit color format (BGRX), which does not depend on the
+ *    format of the legacy guest framebuffer (GFB) or the current
+ *    GMRFB state.
+ */
+
+typedef
+struct SVGAColorBGRX {
+   union {
+      struct {
          uint32_t b : 8;
          uint32_t g : 8;
          uint32_t r : 8;
-         uint32_t x : 8;
+         uint32_t x : 8;  // Unused
       } s;
 
       uint32_t value;
    };
 } SVGAColorBGRX;
 
-typedef struct SVGASignedPoint
-{
+
+/*
+ * SVGASignedRect --
+ * SVGASignedPoint --
+ *
+ *    Signed rectangle and point primitives. These are used by the new
+ *    2D primitives for drawing to Screen Objects, which can occupy a
+ *    signed virtual coordinate space.
+ *
+ *    SVGASignedRect specifies a half-open interval: the (left, top)
+ *    pixel is part of the rectangle, but the (right, bottom) pixel is
+ *    not.
+ */
+
+typedef
+struct SVGASignedRect {
+   int32_t  left;
+   int32_t  top;
+   int32_t  right;
+   int32_t  bottom;
+} SVGASignedRect;
+
+typedef
+struct SVGASignedPoint {
    int32_t  x;
    int32_t  y;
 } SVGASignedPoint;
 
+
+/*
+ *  Capabilities
+ *
+ *  Note the holes in the bitfield. Missing bits have been deprecated,
+ *  and must not be reused. Those capabilities will never be reported
+ *  by new versions of the SVGA device.
+ *
+ * SVGA_CAP_GMR2 --
+ *    Provides asynchronous commands to define and remap guest memory
+ *    regions.  Adds device registers SVGA_REG_GMRS_MAX_PAGES and
+ *    SVGA_REG_MEMORY_SIZE.
+ *
+ * SVGA_CAP_SCREEN_OBJECT_2 --
+ *    Allow screen object support, and require backing stores from the
+ *    guest for each screen object.
+ */
+
 #define SVGA_CAP_NONE               0x00000000
 #define SVGA_CAP_RECT_COPY          0x00000002
 #define SVGA_CAP_CURSOR             0x00000020
-#define SVGA_CAP_CURSOR_BYPASS      0x00000040
-#define SVGA_CAP_CURSOR_BYPASS_2    0x00000080
+#define SVGA_CAP_CURSOR_BYPASS      0x00000040   // Legacy (Use Cursor Bypass 3 instead)
+#define SVGA_CAP_CURSOR_BYPASS_2    0x00000080   // Legacy (Use Cursor Bypass 3 instead)
 #define SVGA_CAP_8BIT_EMULATION     0x00000100
 #define SVGA_CAP_ALPHA_CURSOR       0x00000200
 #define SVGA_CAP_3D                 0x00004000
 #define SVGA_CAP_EXTENDED_FIFO      0x00008000
-#define SVGA_CAP_MULTIMON           0x00010000
+#define SVGA_CAP_MULTIMON           0x00010000   // Legacy multi-monitor support
 #define SVGA_CAP_PITCHLOCK          0x00020000
 #define SVGA_CAP_IRQMASK            0x00040000
-#define SVGA_CAP_DISPLAY_TOPOLOGY   0x00080000
+#define SVGA_CAP_DISPLAY_TOPOLOGY   0x00080000   // Legacy multi-monitor support
 #define SVGA_CAP_GMR                0x00100000
 #define SVGA_CAP_TRACES             0x00200000
 #define SVGA_CAP_GMR2               0x00400000
 #define SVGA_CAP_SCREEN_OBJECT_2    0x00800000
 
-#define SVGA_GMR_NULL         ((uint32_t) -1)
-#define SVGA_GMR_FRAMEBUFFER  ((uint32_t) -2)
 
-typedef struct SVGAGuestPtr
-{
-   uint32_t gmrId;
-   uint32_t offset;
-} SVGAGuestPtr;
+/*
+ * FIFO register indices.
+ *
+ * The FIFO is a chunk of device memory mapped into guest physmem.  It
+ * is always treated as 32-bit words.
+ *
+ * The guest driver gets to decide how to partition it between
+ * - FIFO registers (there are always at least 4, specifying where the
+ *   following data area is and how much data it contains; there may be
+ *   more registers following these, depending on the FIFO protocol
+ *   version in use)
+ * - FIFO data, written by the guest and slurped out by the VMX.
+ * These indices are 32-bit word offsets into the FIFO.
+ */
 
-typedef struct SVGAGMRImageFormat
-{
-   union
-   {
-      struct
-      {
-         uint32_t bitsPerPixel : 8;
-         uint32_t colorDepth   : 8;
-         uint32_t reserved     : 16;
-      } s;
+enum {
+   /*
+    * Block 1 (basic registers): The originally defined FIFO registers.
+    * These exist and are valid for all versions of the FIFO protocol.
+    */
 
-      uint32_t value;
-   };
-} SVGAGMRImageFormat;
+   SVGA_FIFO_MIN = 0,
+   SVGA_FIFO_MAX,       /* The distance from MIN to MAX must be at least 10K */
+   SVGA_FIFO_NEXT_CMD,
+   SVGA_FIFO_STOP,
 
-typedef struct SVGAGuestImage
-{
-   SVGAGuestPtr         ptr;
-   uint32_t pitch;
-} SVGAGuestImage;
+   /*
+    * Block 2 (extended registers): Mandatory registers for the extended
+    * FIFO.  These exist if the SVGA caps register includes
+    * SVGA_CAP_EXTENDED_FIFO; some of them are valid only if their
+    * associated capability bit is enabled.
+    *
+    * Note that when originally defined, SVGA_CAP_EXTENDED_FIFO implied
+    * support only for (FIFO registers) CAPABILITIES, FLAGS, and FENCE.
+    * This means that the guest has to test individually (in most cases
+    * using FIFO caps) for the presence of registers after this; the VMX
+    * can define "extended FIFO" to mean whatever it wants, and currently
+    * won't enable it unless there's room for that set and much more.
+    */
+
+   SVGA_FIFO_CAPABILITIES = 4,
+   SVGA_FIFO_FLAGS,
+   // Valid with SVGA_FIFO_CAP_FENCE:
+   SVGA_FIFO_FENCE,
+
+   /*
+    * Block 3a (optional extended registers): Additional registers for the
+    * extended FIFO, whose presence isn't actually implied by
+    * SVGA_CAP_EXTENDED_FIFO; these exist if SVGA_FIFO_MIN is high enough to
+    * leave room for them.
+    *
+    * These in block 3a, the VMX currently considers mandatory for the
+    * extended FIFO.
+    */
+
+   // Valid if exists (i.e. if extended FIFO enabled):
+   SVGA_FIFO_3D_HWVERSION,       /* See SVGA3dHardwareVersion in svga3d_reg.h */
+   // Valid with SVGA_FIFO_CAP_PITCHLOCK:
+   SVGA_FIFO_PITCHLOCK,
+
+   // Valid with SVGA_FIFO_CAP_CURSOR_BYPASS_3:
+   SVGA_FIFO_CURSOR_ON,          /* Cursor bypass 3 show/hide register */
+   SVGA_FIFO_CURSOR_X,           /* Cursor bypass 3 x register */
+   SVGA_FIFO_CURSOR_Y,           /* Cursor bypass 3 y register */
+   SVGA_FIFO_CURSOR_COUNT,       /* Incremented when any of the other 3 change */
+   SVGA_FIFO_CURSOR_LAST_UPDATED,/* Last time the host updated the cursor */
+
+   // Valid with SVGA_FIFO_CAP_RESERVE:
+   SVGA_FIFO_RESERVED,           /* Bytes past NEXT_CMD with real contents */
+
+   /*
+    * Valid with SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2:
+    *
+    * By default this is SVGA_ID_INVALID, to indicate that the cursor
+    * coordinates are specified relative to the virtual root. If this
+    * is set to a specific screen ID, cursor position is reinterpreted
+    * as a signed offset relative to that screen's origin.
+    */
+   SVGA_FIFO_CURSOR_SCREEN_ID,
+
+   /*
+    * Valid with SVGA_FIFO_CAP_DEAD
+    *
+    * An arbitrary value written by the host, drivers should not use it.
+    */
+   SVGA_FIFO_DEAD,
+
+   /*
+    * Valid with SVGA_FIFO_CAP_3D_HWVERSION_REVISED:
+    *
+    * Contains 3D HWVERSION (see SVGA3dHardwareVersion in svga3d_reg.h)
+    * on platforms that can enforce graphics resource limits.
+    */
+   SVGA_FIFO_3D_HWVERSION_REVISED,
+
+   /*
+    * XXX: The gap here, up until SVGA_FIFO_3D_CAPS, can be used for new
+    * registers, but this must be done carefully and with judicious use of
+    * capability bits, since comparisons based on SVGA_FIFO_MIN aren't
+    * enough to tell you whether the register exists: we've shipped drivers
+    * and products that used SVGA_FIFO_3D_CAPS but didn't know about some of
+    * the earlier ones.  The actual order of introduction was:
+    * - PITCHLOCK
+    * - 3D_CAPS
+    * - CURSOR_* (cursor bypass 3)
+    * - RESERVED
+    * So, code that wants to know whether it can use any of the
+    * aforementioned registers, or anything else added after PITCHLOCK and
+    * before 3D_CAPS, needs to reason about something other than
+    * SVGA_FIFO_MIN.
+    */
+
+   /*
+    * 3D caps block space; valid with 3D hardware version >=
+    * SVGA3D_HWVERSION_WS6_B1.
+    */
+   SVGA_FIFO_3D_CAPS      = 32,
+   SVGA_FIFO_3D_CAPS_LAST = 32 + 255,
+
+   /*
+    * End of VMX's current definition of "extended-FIFO registers".
+    * Registers before here are always enabled/disabled as a block; either
+    * the extended FIFO is enabled and includes all preceding registers, or
+    * it's disabled entirely.
+    *
+    * Block 3b (truly optional extended registers): Additional registers for
+    * the extended FIFO, which the VMX already knows how to enable and
+    * disable with correct granularity.
+    *
+    * Registers after here exist if and only if the guest SVGA driver
+    * sets SVGA_FIFO_MIN high enough to leave room for them.
+    */
+
+   // Valid if register exists:
+   SVGA_FIFO_GUEST_3D_HWVERSION, /* Guest driver's 3D version */
+   SVGA_FIFO_FENCE_GOAL,         /* Matching target for SVGA_IRQFLAG_FENCE_GOAL */
+   SVGA_FIFO_BUSY,               /* See "FIFO Synchronization Registers" */
+
+   /*
+    * Always keep this last.  This defines the maximum number of
+    * registers we know about.  At power-on, this value is placed in
+    * the SVGA_REG_MEM_REGS register, and we expect the guest driver
+    * to allocate this much space in FIFO memory for registers.
+    */
+    SVGA_FIFO_NUM_REGS
+};
+
+
+/*
+ * Definition of registers included in extended FIFO support.
+ *
+ * The guest SVGA driver gets to allocate the FIFO between registers
+ * and data.  It must always allocate at least 4 registers, but old
+ * drivers stopped there.
+ *
+ * The VMX will enable extended FIFO support if and only if the guest
+ * left enough room for all registers defined as part of the mandatory
+ * set for the extended FIFO.
+ *
+ * Note that the guest drivers typically allocate the FIFO only at
+ * initialization time, not at mode switches, so it's likely that the
+ * number of FIFO registers won't change without a reboot.
+ *
+ * All registers less than this value are guaranteed to be present if
+ * svgaUser->fifo.extended is set. Any later registers must be tested
+ * individually for compatibility at each use (in the VMX).
+ *
+ * This value is used only by the VMX, so it can change without
+ * affecting driver compatibility; keep it that way?
+ */
+#define SVGA_FIFO_EXTENDED_MANDATORY_REGS  (SVGA_FIFO_3D_CAPS_LAST + 1)
+
+
+/*
+ * FIFO Synchronization Registers
+ *
+ *  This explains the relationship between the various FIFO
+ *  sync-related registers in IOSpace and in FIFO space.
+ *
+ *  SVGA_REG_SYNC --
+ *
+ *       The SYNC register can be used in two different ways by the guest:
+ *
+ *         1. If the guest wishes to fully sync (drain) the FIFO,
+ *            it will write once to SYNC then poll on the BUSY
+ *            register. The FIFO is sync'ed once BUSY is zero.
+ *
+ *         2. If the guest wants to asynchronously wake up the host,
+ *            it will write once to SYNC without polling on BUSY.
+ *            Ideally it will do this after some new commands have
+ *            been placed in the FIFO, and after reading a zero
+ *            from SVGA_FIFO_BUSY.
+ *
+ *       (1) is the original behaviour that SYNC was designed to
+ *       support.  Originally, a write to SYNC would implicitly
+ *       trigger a read from BUSY. This causes us to synchronously
+ *       process the FIFO.
+ *
+ *       This behaviour has since been changed so that writing SYNC
+ *       will *not* implicitly cause a read from BUSY. Instead, it
+ *       makes a channel call which asynchronously wakes up the MKS
+ *       thread.
+ *
+ *       New guests can use this new behaviour to implement (2)
+ *       efficiently. This lets guests get the host's attention
+ *       without waiting for the MKS to poll, which gives us much
+ *       better CPU utilization on SMP hosts and on UP hosts while
+ *       we're blocked on the host GPU.
+ *
+ *       Old guests shouldn't notice the behaviour change. SYNC was
+ *       never guaranteed to process the entire FIFO, since it was
+ *       bounded to a particular number of CPU cycles. Old guests will
+ *       still loop on the BUSY register until the FIFO is empty.
+ *
+ *       Writing to SYNC currently has the following side-effects:
+ *
+ *         - Sets SVGA_REG_BUSY to TRUE (in the monitor)
+ *         - Asynchronously wakes up the MKS thread for FIFO processing
+ *         - The value written to SYNC is recorded as a "reason", for
+ *           stats purposes.
+ *
+ *       If SVGA_FIFO_BUSY is available, drivers are advised to only
+ *       write to SYNC if SVGA_FIFO_BUSY is FALSE. Drivers should set
+ *       SVGA_FIFO_BUSY to TRUE after writing to SYNC. The MKS will
+ *       eventually set SVGA_FIFO_BUSY on its own, but this approach
+ *       lets the driver avoid sending multiple asynchronous wakeup
+ *       messages to the MKS thread.
+ *
+ *  SVGA_REG_BUSY --
+ *
+ *       This register is set to TRUE when SVGA_REG_SYNC is written,
+ *       and it reads as FALSE when the FIFO has been completely
+ *       drained.
+ *
+ *       Every read from this register causes us to synchronously
+ *       process FIFO commands. There is no guarantee as to how many
+ *       commands each read will process.
+ *
+ *       CPU time spent processing FIFO commands will be billed to
+ *       the guest.
+ *
+ *       New drivers should avoid using this register unless they
+ *       need to guarantee that the FIFO is completely drained. It
+ *       is overkill for performing a sync-to-fence. Older drivers
+ *       will use this register for any type of synchronization.
+ *
+ *  SVGA_FIFO_BUSY --
+ *
+ *       This register is a fast way for the guest driver to check
+ *       whether the FIFO is already being processed. It reads and
+ *       writes at normal RAM speeds, with no monitor intervention.
+ *
+ *       If this register reads as TRUE, the host is guaranteeing that
+ *       any new commands written into the FIFO will be noticed before
+ *       the MKS goes back to sleep.
+ *
+ *       If this register reads as FALSE, no such guarantee can be
+ *       made.
+ *
+ *       The guest should use this register to quickly determine
+ *       whether or not it needs to wake up the host. If the guest
+ *       just wrote a command or group of commands that it would like
+ *       the host to begin processing, it should:
+ *
+ *         1. Read SVGA_FIFO_BUSY. If it reads as TRUE, no further
+ *            action is necessary.
+ *
+ *         2. Write TRUE to SVGA_FIFO_BUSY. This informs future guest
+ *            code that we've already sent a SYNC to the host and we
+ *            don't need to send a duplicate.
+ *
+ *         3. Write a reason to SVGA_REG_SYNC. This will send an
+ *            asynchronous wakeup to the MKS thread.
+ */
+
+
+/*
+ * FIFO Capabilities
+ *
+ *      Fence -- Fence register and command are supported
+ *      Accel Front -- Front buffer only commands are supported
+ *      Pitch Lock -- Pitch lock register is supported
+ *      Video -- SVGA Video overlay units are supported
+ *      Escape -- Escape command is supported
+ *
+ * XXX: Add longer descriptions for each capability, including a list
+ *      of the new features that each capability provides.
+ *
+ * SVGA_FIFO_CAP_SCREEN_OBJECT --
+ *
+ *    Provides dynamic multi-screen rendering, for improved Unity and
+ *    multi-monitor modes. With Screen Object, the guest can
+ *    dynamically create and destroy 'screens', which can represent
+ *    Unity windows or virtual monitors. Screen Object also provides
+ *    strong guarantees that DMA operations happen only when
+ *    guest-initiated. Screen Object deprecates the BAR1 guest
+ *    framebuffer (GFB) and all commands that work only with the GFB.
+ *
+ *    New registers:
+ *       FIFO_CURSOR_SCREEN_ID, VIDEO_DATA_GMRID, VIDEO_DST_SCREEN_ID
+ *
+ *    New 2D commands:
+ *       DEFINE_SCREEN, DESTROY_SCREEN, DEFINE_GMRFB, BLIT_GMRFB_TO_SCREEN,
+ *       BLIT_SCREEN_TO_GMRFB, ANNOTATION_FILL, ANNOTATION_COPY
+ *
+ *    New 3D commands:
+ *       BLIT_SURFACE_TO_SCREEN
+ *
+ *    New guarantees:
+ *
+ *       - The host will not read or write guest memory, including the GFB,
+ *         except when explicitly initiated by a DMA command.
+ *
+ *       - All DMA, including legacy DMA like UPDATE and PRESENT_READBACK,
+ *         is guaranteed to complete before any subsequent FENCEs.
+ *
+ *       - All legacy commands which affect a Screen (UPDATE, PRESENT,
+ *         PRESENT_READBACK) as well as new Screen blit commands will
+ *         all behave consistently as blits, and memory will be read
+ *         or written in FIFO order.
+ *
+ *         For example, if you PRESENT from one SVGA3D surface to multiple
+ *         places on the screen, the data copied will always be from the
+ *         SVGA3D surface at the time the PRESENT was issued in the FIFO.
+ *         This was not necessarily true on devices without Screen Object.
+ *
+ *         This means that on devices that support Screen Object, the
+ *         PRESENT_READBACK command should not be necessary unless you
+ *         actually want to read back the results of 3D rendering into
+ *         system memory. (And for that, the BLIT_SCREEN_TO_GMRFB
+ *         command provides a strict superset of functionality.)
+ *
+ *       - When a screen is resized, either using Screen Object commands or
+ *         legacy multimon registers, its contents are preserved.
+ *
+ * SVGA_FIFO_CAP_GMR2 --
+ *
+ *    Provides new commands to define and remap guest memory regions (GMR).
+ *
+ *    New 2D commands:
+ *       DEFINE_GMR2, REMAP_GMR2.
+ *
+ * SVGA_FIFO_CAP_3D_HWVERSION_REVISED --
+ *
+ *    Indicates new register SVGA_FIFO_3D_HWVERSION_REVISED exists.
+ *    This register may replace SVGA_FIFO_3D_HWVERSION on platforms
+ *    that enforce graphics resource limits.  This allows the platform
+ *    to clear SVGA_FIFO_3D_HWVERSION and disable 3D in legacy guest
+ *    drivers that do not limit their resources.
+ *
+ *    Note this is an alias to SVGA_FIFO_CAP_GMR2 because these indicators
+ *    are codependent (and thus we use a single capability bit).
+ *
+ * SVGA_FIFO_CAP_SCREEN_OBJECT_2 --
+ *
+ *    Modifies the DEFINE_SCREEN command to include a guest provided
+ *    backing store in GMR memory and the bytesPerLine for the backing
+ *    store.  This capability requires the use of a backing store when
+ *    creating screen objects.  However if SVGA_FIFO_CAP_SCREEN_OBJECT
+ *    is present then backing stores are optional.
+ *
+ * SVGA_FIFO_CAP_DEAD --
+ *
+ *    Drivers should not use this cap bit.  This cap bit can not be
+ *    reused since some hosts already expose it.
+ */
+
+#define SVGA_FIFO_CAP_NONE                  0
+#define SVGA_FIFO_CAP_FENCE             (1<<0)
+#define SVGA_FIFO_CAP_ACCELFRONT        (1<<1)
+#define SVGA_FIFO_CAP_PITCHLOCK         (1<<2)
+#define SVGA_FIFO_CAP_VIDEO             (1<<3)
+#define SVGA_FIFO_CAP_CURSOR_BYPASS_3   (1<<4)
+#define SVGA_FIFO_CAP_ESCAPE            (1<<5)
+#define SVGA_FIFO_CAP_RESERVE           (1<<6)
+#define SVGA_FIFO_CAP_SCREEN_OBJECT     (1<<7)
+#define SVGA_FIFO_CAP_GMR2              (1<<8)
+#define SVGA_FIFO_CAP_3D_HWVERSION_REVISED  SVGA_FIFO_CAP_GMR2
+#define SVGA_FIFO_CAP_SCREEN_OBJECT_2   (1<<9)
+#define SVGA_FIFO_CAP_DEAD              (1<<10)
+
+
+/*
+ * FIFO Flags
+ *
+ *      Accel Front -- Driver should use front buffer only commands
+ */
+
+#define SVGA_FIFO_FLAG_NONE                 0
+#define SVGA_FIFO_FLAG_ACCELFRONT       (1<<0)
+#define SVGA_FIFO_FLAG_RESERVED        (1<<31) // Internal use only
+
+/*
+ * FIFO reservation sentinel value
+ */
+
+#define SVGA_FIFO_RESERVED_UNKNOWN      0xffffffff
+
+
+/*
+ * Video overlay support
+ */
+
+#define SVGA_NUM_OVERLAY_UNITS 32
 
-#define SVGA_SCREEN_MUST_BE_SET     (1 << 0)
-#define SVGA_SCREEN_HAS_ROOT SVGA_SCREEN_MUST_BE_SET
-#define SVGA_SCREEN_IS_PRIMARY      (1 << 1)
-#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2)
+
+/*
+ * Video capabilities that the guest is currently using
+ */
+
+#define SVGA_VIDEO_FLAG_COLORKEY        0x0001
+
+
+/*
+ * Offsets for the video overlay registers
+ */
+
+enum {
+   SVGA_VIDEO_ENABLED = 0,
+   SVGA_VIDEO_FLAGS,
+   SVGA_VIDEO_DATA_OFFSET,
+   SVGA_VIDEO_FORMAT,
+   SVGA_VIDEO_COLORKEY,
+   SVGA_VIDEO_SIZE,          // Deprecated
+   SVGA_VIDEO_WIDTH,
+   SVGA_VIDEO_HEIGHT,
+   SVGA_VIDEO_SRC_X,
+   SVGA_VIDEO_SRC_Y,
+   SVGA_VIDEO_SRC_WIDTH,
+   SVGA_VIDEO_SRC_HEIGHT,
+   SVGA_VIDEO_DST_X,         // Signed int32
+   SVGA_VIDEO_DST_Y,         // Signed int32
+   SVGA_VIDEO_DST_WIDTH,
+   SVGA_VIDEO_DST_HEIGHT,
+   SVGA_VIDEO_PITCH_1,
+   SVGA_VIDEO_PITCH_2,
+   SVGA_VIDEO_PITCH_3,
+   SVGA_VIDEO_DATA_GMRID,    // Optional, defaults to SVGA_GMR_FRAMEBUFFER
+   SVGA_VIDEO_DST_SCREEN_ID, // Optional, defaults to virtual coords (SVGA_ID_INVALID)
+   SVGA_VIDEO_NUM_REGS
+};
+
+
+/*
+ * SVGA Overlay Units
+ *
+ *      width and height relate to the entire source video frame.
+ *      srcX, srcY, srcWidth and srcHeight represent subset of the source
+ *      video frame to be displayed.
+ */
+
+typedef struct SVGAOverlayUnit {
+   uint32_t enabled;
+   uint32_t flags;
+   uint32_t dataOffset;
+   uint32_t format;
+   uint32_t colorKey;
+   uint32_t size;
+   uint32_t width;
+   uint32_t height;
+   uint32_t srcX;
+   uint32_t srcY;
+   uint32_t srcWidth;
+   uint32_t srcHeight;
+   int32_t  dstX;
+   int32_t  dstY;
+   uint32_t dstWidth;
+   uint32_t dstHeight;
+   uint32_t pitches[3];
+   uint32_t dataGMRId;
+   uint32_t dstScreenId;
+} SVGAOverlayUnit;
+
+
+/*
+ * SVGAScreenObject --
+ *
+ *    This is a new way to represent a guest's multi-monitor screen or
+ *    Unity window. Screen objects are only supported if the
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT capability bit is set.
+ *
+ *    If Screen Objects are supported, they can be used to fully
+ *    replace the functionality provided by the framebuffer registers
+ *    (SVGA_REG_WIDTH, HEIGHT, etc.) and by SVGA_CAP_DISPLAY_TOPOLOGY.
+ *
+ *    The screen object is a struct with guaranteed binary
+ *    compatibility. New flags can be added, and the struct may grow,
+ *    but existing fields must retain their meaning.
+ *
+ *    Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2 are required fields of
+ *    a SVGAGuestPtr that is used to back the screen contents.  This
+ *    memory must come from the GFB.  The guest is not allowed to
+ *    access the memory and doing so will have undefined results.  The
+ *    backing store is required to be page aligned and the size is
+ *    padded to the next page boundry.  The number of pages is:
+ *       (bytesPerLine * size.width * 4 + PAGE_SIZE - 1) / PAGE_SIZE
+ *
+ *    The pitch in the backingStore is required to be at least large
+ *    enough to hold a 32bbp scanline.  It is recommended that the
+ *    driver pad bytesPerLine for a potential performance win.
+ *
+ *    The cloneCount field is treated as a hint from the guest that
+ *    the user wants this display to be cloned, countCount times.  A
+ *    value of zero means no cloning should happen.
+ */
+
+#define SVGA_SCREEN_MUST_BE_SET     (1 << 0) // Must be set or results undefined
+#define SVGA_SCREEN_HAS_ROOT SVGA_SCREEN_MUST_BE_SET // Deprecated
+#define SVGA_SCREEN_IS_PRIMARY      (1 << 1) // Guest considers this screen to be 'primary'
+#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2)  // Guest is running a fullscreen app here
+
+/*
+ * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2.  When the screen is
+ * deactivated the base layer is defined to lose all contents and
+ * become black.  When a screen is deactivated the backing store is
+ * optional.  When set backingPtr and bytesPerLine will be ignored.
+ */
 #define SVGA_SCREEN_DEACTIVATE  (1 << 3)
+
+/*
+ * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2.  When this flag is set
+ * the screen contents will be outputted as all black to the user
+ * though the base layer contents is preserved.  The screen base layer
+ * can still be read and written to like normal though the no visible
+ * effect will be seen by the user.  When the flag is changed the
+ * screen will be blanked or redrawn to the current contents as needed
+ * without any extra commands from the driver.  This flag only has an
+ * effect when the screen is not deactivated.
+ */
 #define SVGA_SCREEN_BLANKING (1 << 4)
 
-typedef struct SVGAScreenObject
-{
-   uint32_t structSize;
+typedef
+struct SVGAScreenObject {
+   uint32_t structSize;   // sizeof(SVGAScreenObject)
    uint32_t id;
    uint32_t flags;
-   struct
-   {
+   struct {
       uint32_t width;
       uint32_t height;
    } size;
-   struct
-   {
+   struct {
       int32_t x;
       int32_t y;
    } root;
+
+   /*
+    * Added and required by SVGA_FIFO_CAP_SCREEN_OBJECT_2, optional
+    * with SVGA_FIFO_CAP_SCREEN_OBJECT.
+    */
    SVGAGuestImage backingStore;
    uint32_t cloneCount;
 } SVGAScreenObject;
 
-typedef struct
-{
-   uint32_t screenId;
-} SVGAFifoCmdDestroyScreen;
 
-typedef struct
-{
+/*
+ *  Commands in the command FIFO:
+ *
+ *  Command IDs defined below are used for the traditional 2D FIFO
+ *  communication (not all commands are available for all versions of the
+ *  SVGA FIFO protocol).
+ *
+ *  Note the holes in the command ID numbers: These commands have been
+ *  deprecated, and the old IDs must not be reused.
+ *
+ *  Command IDs from 1000 to 1999 are reserved for use by the SVGA3D
+ *  protocol.
+ *
+ *  Each command's parameters are described by the comments and
+ *  structs below.
+ */
+
+typedef enum {
+   SVGA_CMD_INVALID_CMD           = 0,
+   SVGA_CMD_UPDATE                = 1,
+   SVGA_CMD_RECT_COPY             = 3,
+   SVGA_CMD_DEFINE_CURSOR         = 19,
+   SVGA_CMD_DEFINE_ALPHA_CURSOR   = 22,
+   SVGA_CMD_UPDATE_VERBOSE        = 25,
+   SVGA_CMD_FRONT_ROP_FILL        = 29,
+   SVGA_CMD_FENCE                 = 30,
+   SVGA_CMD_ESCAPE                = 33,
+   SVGA_CMD_DEFINE_SCREEN         = 34,
+   SVGA_CMD_DESTROY_SCREEN        = 35,
+   SVGA_CMD_DEFINE_GMRFB          = 36,
+   SVGA_CMD_BLIT_GMRFB_TO_SCREEN  = 37,
+   SVGA_CMD_BLIT_SCREEN_TO_GMRFB  = 38,
+   SVGA_CMD_ANNOTATION_FILL       = 39,
+   SVGA_CMD_ANNOTATION_COPY       = 40,
+   SVGA_CMD_DEFINE_GMR2           = 41,
+   SVGA_CMD_REMAP_GMR2            = 42,
+   SVGA_CMD_MAX
+} SVGAFifoCmdId;
+
+#define SVGA_CMD_MAX_DATASIZE       (256 * 1024)
+#define SVGA_CMD_MAX_ARGS           64
+
+
+/*
+ * SVGA_CMD_UPDATE --
+ *
+ *    This is a DMA transfer which copies from the Guest Framebuffer
+ *    (GFB) at BAR1 + SVGA_REG_FB_OFFSET to any screens which
+ *    intersect with the provided virtual rectangle.
+ *
+ *    This command does not support using arbitrary guest memory as a
+ *    data source- it only works with the pre-defined GFB memory.
+ *    This command also does not support signed virtual coordinates.
+ *    If you have defined screens (using SVGA_CMD_DEFINE_SCREEN) with
+ *    negative root x/y coordinates, the negative portion of those
+ *    screens will not be reachable by this command.
+ *
+ *    This command is not necessary when using framebuffer
+ *    traces. Traces are automatically enabled if the SVGA FIFO is
+ *    disabled, and you may explicitly enable/disable traces using
+ *    SVGA_REG_TRACES. With traces enabled, any write to the GFB will
+ *    automatically act as if a subsequent SVGA_CMD_UPDATE was issued.
+ *
+ *    Traces and SVGA_CMD_UPDATE are the only supported ways to render
+ *    pseudocolor screen updates. The newer Screen Object commands
+ *    only support true color formats.
+ *
+ * Availability:
+ *    Always available.
+ */
+
+typedef
+struct {
    uint32_t x;
    uint32_t y;
    uint32_t width;
    uint32_t height;
 } SVGAFifoCmdUpdate;
 
-typedef struct
-{
-   uint32_t fence;
-} SVGAFifoCmdFence;
 
-typedef struct
-{
-   uint32_t nsid;
-   uint32_t size;
-} SVGAFifoCmdEscape;
+/*
+ * SVGA_CMD_RECT_COPY --
+ *
+ *    Perform a rectangular DMA transfer from one area of the GFB to
+ *    another, and copy the result to any screens which intersect it.
+ *
+ * Availability:
+ *    SVGA_CAP_RECT_COPY
+ */
 
-typedef struct
-{
-   uint32_t id;
+typedef
+struct {
+   uint32_t srcX;
+   uint32_t srcY;
+   uint32_t destX;
+   uint32_t destY;
+   uint32_t width;
+   uint32_t height;
+} SVGAFifoCmdRectCopy;
+
+
+/*
+ * SVGA_CMD_DEFINE_CURSOR --
+ *
+ *    Provide a new cursor image, as an AND/XOR mask.
+ *
+ *    The recommended way to position the cursor overlay is by using
+ *    the SVGA_FIFO_CURSOR_* registers, supported by the
+ *    SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability.
+ *
+ * Availability:
+ *    SVGA_CAP_CURSOR
+ */
+
+typedef
+struct {
+   uint32_t id;             // Reserved, must be zero.
    uint32_t hotspotX;
    uint32_t hotspotY;
    uint32_t width;
    uint32_t height;
-   uint32_t andMaskDepth;
-   uint32_t xorMaskDepth;
+   uint32_t andMaskDepth;   // Value must be 1 or equal to BITS_PER_PIXEL
+   uint32_t xorMaskDepth;   // Value must be 1 or equal to BITS_PER_PIXEL
+   /*
+    * Followed by scanline data for AND mask, then XOR mask.
+    * Each scanline is padded to a 32-bit boundary.
+   */
 } SVGAFifoCmdDefineCursor;
 
-typedef struct
-{
-   uint32_t id;
+
+/*
+ * SVGA_CMD_DEFINE_ALPHA_CURSOR --
+ *
+ *    Provide a new cursor image, in 32-bit BGRA format.
+ *
+ *    The recommended way to position the cursor overlay is by using
+ *    the SVGA_FIFO_CURSOR_* registers, supported by the
+ *    SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability.
+ *
+ * Availability:
+ *    SVGA_CAP_ALPHA_CURSOR
+ */
+
+typedef
+struct {
+   uint32_t id;             // Reserved, must be zero.
    uint32_t hotspotX;
    uint32_t hotspotY;
    uint32_t width;
    uint32_t height;
+   /* Followed by scanline data */
 } SVGAFifoCmdDefineAlphaCursor;
 
-typedef struct
-{
-   SVGAScreenObject screen;
+
+/*
+ * SVGA_CMD_UPDATE_VERBOSE --
+ *
+ *    Just like SVGA_CMD_UPDATE, but also provide a per-rectangle
+ *    'reason' value, an opaque cookie which is used by internal
+ *    debugging tools. Third party drivers should not use this
+ *    command.
+ *
+ * Availability:
+ *    SVGA_CAP_EXTENDED_FIFO
+ */
+
+typedef
+struct {
+   uint32_t x;
+   uint32_t y;
+   uint32_t width;
+   uint32_t height;
+   uint32_t reason;
+} SVGAFifoCmdUpdateVerbose;
+
+
+/*
+ * SVGA_CMD_FRONT_ROP_FILL --
+ *
+ *    This is a hint which tells the SVGA device that the driver has
+ *    just filled a rectangular region of the GFB with a solid
+ *    color. Instead of reading these pixels from the GFB, the device
+ *    can assume that they all equal 'color'. This is primarily used
+ *    for remote desktop protocols.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_ACCELFRONT
+ */
+
+#define  SVGA_ROP_COPY                    0x03
+
+typedef
+struct {
+   uint32_t color;     // In the same format as the GFB
+   uint32_t x;
+   uint32_t y;
+   uint32_t width;
+   uint32_t height;
+   uint32_t rop;       // Must be SVGA_ROP_COPY
+} SVGAFifoCmdFrontRopFill;
+
+
+/*
+ * SVGA_CMD_FENCE --
+ *
+ *    Insert a synchronization fence.  When the SVGA device reaches
+ *    this command, it will copy the 'fence' value into the
+ *    SVGA_FIFO_FENCE register. It will also compare the fence against
+ *    SVGA_FIFO_FENCE_GOAL. If the fence matches the goal and the
+ *    SVGA_IRQFLAG_FENCE_GOAL interrupt is enabled, the device will
+ *    raise this interrupt.
+ *
+ * Availability:
+ *    SVGA_FIFO_FENCE for this command,
+ *    SVGA_CAP_IRQMASK for SVGA_FIFO_FENCE_GOAL.
+ */
+
+typedef
+struct {
+   uint32_t fence;
+} SVGAFifoCmdFence;
+
+
+/*
+ * SVGA_CMD_ESCAPE --
+ *
+ *    Send an extended or vendor-specific variable length command.
+ *    This is used for video overlay, third party plugins, and
+ *    internal debugging tools. See svga_escape.h
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_ESCAPE
+ */
+
+typedef
+struct {
+   uint32_t nsid;
+   uint32_t size;
+   /* followed by 'size' bytes of data */
+} SVGAFifoCmdEscape;
+
+
+/*
+ * SVGA_CMD_DEFINE_SCREEN --
+ *
+ *    Define or redefine an SVGAScreenObject. See the description of
+ *    SVGAScreenObject above.  The video driver is responsible for
+ *    generating new screen IDs. They should be small positive
+ *    integers. The virtual device will have an implementation
+ *    specific upper limit on the number of screen IDs
+ *    supported. Drivers are responsible for recycling IDs. The first
+ *    valid ID is zero.
+ *
+ *    - Interaction with other registers:
+ *
+ *    For backwards compatibility, when the GFB mode registers (WIDTH,
+ *    HEIGHT, PITCHLOCK, BITS_PER_PIXEL) are modified, the SVGA device
+ *    deletes all screens other than screen #0, and redefines screen
+ *    #0 according to the specified mode. Drivers that use
+ *    SVGA_CMD_DEFINE_SCREEN should destroy or redefine screen #0.
+ *
+ *    If you use screen objects, do not use the legacy multi-mon
+ *    registers (SVGA_REG_NUM_GUEST_DISPLAYS, SVGA_REG_DISPLAY_*).
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
+   SVGAScreenObject screen;   // Variable-length according to version
 } SVGAFifoCmdDefineScreen;
 
-typedef struct
-{
+
+/*
+ * SVGA_CMD_DESTROY_SCREEN --
+ *
+ *    Destroy an SVGAScreenObject. Its ID is immediately available for
+ *    re-use.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
+   uint32_t screenId;
+} SVGAFifoCmdDestroyScreen;
+
+
+/*
+ * SVGA_CMD_DEFINE_GMRFB --
+ *
+ *    This command sets a piece of SVGA device state called the
+ *    Guest Memory Region Framebuffer, or GMRFB. The GMRFB is a
+ *    piece of light-weight state which identifies the location and
+ *    format of an image in guest memory or in BAR1. The GMRFB has
+ *    an arbitrary size, and it doesn't need to match the geometry
+ *    of the GFB or any screen object.
+ *
+ *    The GMRFB can be redefined as often as you like. You could
+ *    always use the same GMRFB, you could redefine it before
+ *    rendering from a different guest screen, or you could even
+ *    redefine it before every blit.
+ *
+ *    There are multiple ways to use this command. The simplest way is
+ *    to use it to move the framebuffer either to elsewhere in the GFB
+ *    (BAR1) memory region, or to a user-defined GMR. This lets a
+ *    driver use a framebuffer allocated entirely out of normal system
+ *    memory, which we encourage.
+ *
+ *    Another way to use this command is to set up a ring buffer of
+ *    updates in GFB memory. If a driver wants to ensure that no
+ *    frames are skipped by the SVGA device, it is important that the
+ *    driver not modify the source data for a blit until the device is
+ *    done processing the command. One efficient way to accomplish
+ *    this is to use a ring of small DMA buffers. Each buffer is used
+ *    for one blit, then we move on to the next buffer in the
+ *    ring. The FENCE mechanism is used to protect each buffer from
+ *    re-use until the device is finished with that buffer's
+ *    corresponding blit.
+ *
+ *    This command does not affect the meaning of SVGA_CMD_UPDATE.
+ *    UPDATEs always occur from the legacy GFB memory area. This
+ *    command has no support for pseudocolor GMRFBs. Currently only
+ *    true-color 15, 16, and 24-bit depths are supported. Future
+ *    devices may expose capabilities for additional framebuffer
+ *    formats.
+ *
+ *    The default GMRFB value is undefined. Drivers must always send
+ *    this command at least once before performing any blit from the
+ *    GMRFB.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
+   SVGAGuestPtr        ptr;
+   uint32_t              bytesPerLine;
+   SVGAGMRImageFormat  format;
+} SVGAFifoCmdDefineGMRFB;
+
+
+/*
+ * SVGA_CMD_BLIT_GMRFB_TO_SCREEN --
+ *
+ *    This is a guest-to-host blit. It performs a DMA operation to
+ *    copy a rectangular region of pixels from the current GMRFB to
+ *    one or more Screen Objects.
+ *
+ *    The destination coordinate may be specified relative to a
+ *    screen's origin (if a screen ID is specified) or relative to the
+ *    virtual coordinate system's origin (if the screen ID is
+ *    SVGA_ID_INVALID). The actual destination may span zero or more
+ *    screens, in the case of a virtual destination rect or a rect
+ *    which extends off the edge of the specified screen.
+ *
+ *    This command writes to the screen's "base layer": the underlying
+ *    framebuffer which exists below any cursor or video overlays. No
+ *    action is necessary to explicitly hide or update any overlays
+ *    which exist on top of the updated region.
+ *
+ *    The SVGA device is guaranteed to finish reading from the GMRFB
+ *    by the time any subsequent FENCE commands are reached.
+ *
+ *    This command consumes an annotation. See the
+ *    SVGA_CMD_ANNOTATION_* commands for details.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
+   SVGASignedPoint  srcOrigin;
+   SVGASignedRect   destRect;
+   uint32_t           destScreenId;
+} SVGAFifoCmdBlitGMRFBToScreen;
+
+
+/*
+ * SVGA_CMD_BLIT_SCREEN_TO_GMRFB --
+ *
+ *    This is a host-to-guest blit. It performs a DMA operation to
+ *    copy a rectangular region of pixels from a single Screen Object
+ *    back to the current GMRFB.
+ *
+ *    Usage note: This command should be used rarely. It will
+ *    typically be inefficient, but it is necessary for some types of
+ *    synchronization between 3D (GPU) and 2D (CPU) rendering into
+ *    overlapping areas of a screen.
+ *
+ *    The source coordinate is specified relative to a screen's
+ *    origin. The provided screen ID must be valid. If any parameters
+ *    are invalid, the resulting pixel values are undefined.
+ *
+ *    This command reads the screen's "base layer". Overlays like
+ *    video and cursor are not included, but any data which was sent
+ *    using a blit-to-screen primitive will be available, no matter
+ *    whether the data's original source was the GMRFB or the 3D
+ *    acceleration hardware.
+ *
+ *    Note that our guest-to-host blits and host-to-guest blits aren't
+ *    symmetric in their current implementation. While the parameters
+ *    are identical, host-to-guest blits are a lot less featureful.
+ *    They do not support clipping: If the source parameters don't
+ *    fully fit within a screen, the blit fails. They must originate
+ *    from exactly one screen. Virtual coordinates are not directly
+ *    supported.
+ *
+ *    Host-to-guest blits do support the same set of GMRFB formats
+ *    offered by guest-to-host blits.
+ *
+ *    The SVGA device is guaranteed to finish writing to the GMRFB by
+ *    the time any subsequent FENCE commands are reached.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
+   SVGASignedPoint  destOrigin;
+   SVGASignedRect   srcRect;
+   uint32_t           srcScreenId;
+} SVGAFifoCmdBlitScreenToGMRFB;
+
+
+/*
+ * SVGA_CMD_ANNOTATION_FILL --
+ *
+ *    This is a blit annotation. This command stores a small piece of
+ *    device state which is consumed by the next blit-to-screen
+ *    command. The state is only cleared by commands which are
+ *    specifically documented as consuming an annotation. Other
+ *    commands (such as ESCAPEs for debugging) may intervene between
+ *    the annotation and its associated blit.
+ *
+ *    This annotation is a promise about the contents of the next
+ *    blit: The video driver is guaranteeing that all pixels in that
+ *    blit will have the same value, specified here as a color in
+ *    SVGAColorBGRX format.
+ *
+ *    The SVGA device can still render the blit correctly even if it
+ *    ignores this annotation, but the annotation may allow it to
+ *    perform the blit more efficiently, for example by ignoring the
+ *    source data and performing a fill in hardware.
+ *
+ *    This annotation is most important for performance when the
+ *    user's display is being remoted over a network connection.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
    SVGAColorBGRX  color;
 } SVGAFifoCmdAnnotationFill;
 
-typedef struct
-{
+
+/*
+ * SVGA_CMD_ANNOTATION_COPY --
+ *
+ *    This is a blit annotation. See SVGA_CMD_ANNOTATION_FILL for more
+ *    information about annotations.
+ *
+ *    This annotation is a promise about the contents of the next
+ *    blit: The video driver is guaranteeing that all pixels in that
+ *    blit will have the same value as those which already exist at an
+ *    identically-sized region on the same or a different screen.
+ *
+ *    Note that the source pixels for the COPY in this annotation are
+ *    sampled before applying the anqnotation's associated blit. They
+ *    are allowed to overlap with the blit's destination pixels.
+ *
+ *    The copy source rectangle is specified the same way as the blit
+ *    destination: it can be a rectangle which spans zero or more
+ *    screens, specified relative to either a screen or to the virtual
+ *    coordinate system's origin. If the source rectangle includes
+ *    pixels which are not from exactly one screen, the results are
+ *    undefined.
+ *
+ * Availability:
+ *    SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+struct {
    SVGASignedPoint  srcOrigin;
    uint32_t           srcScreenId;
 } SVGAFifoCmdAnnotationCopy;
 
-#define SVGA_FIFO_CAP_NONE                  0
-#define SVGA_FIFO_CAP_FENCE             (1<<0)
-#define SVGA_FIFO_CAP_ACCELFRONT        (1<<1)
-#define SVGA_FIFO_CAP_PITCHLOCK         (1<<2)
-#define SVGA_FIFO_CAP_VIDEO             (1<<3)
-#define SVGA_FIFO_CAP_CURSOR_BYPASS_3   (1<<4)
-#define SVGA_FIFO_CAP_ESCAPE            (1<<5)
-#define SVGA_FIFO_CAP_RESERVE           (1<<6)
-#define SVGA_FIFO_CAP_SCREEN_OBJECT     (1<<7)
-#define SVGA_FIFO_CAP_GMR2              (1<<8)
-#define SVGA_FIFO_CAP_3D_HWVERSION_REVISED  SVGA_FIFO_CAP_GMR2
-#define SVGA_FIFO_CAP_SCREEN_OBJECT_2   (1<<9)
-#define SVGA_FIFO_CAP_DEAD              (1<<10)
 
-#endif /* _SVGA_REG_H_ */
+/*
+ * SVGA_CMD_DEFINE_GMR2 --
+ *
+ *    Define guest memory region v2.  See the description of GMRs above.
+ *
+ * Availability:
+ *    SVGA_CAP_GMR2
+ */
+
+typedef
+struct {
+   uint32_t gmrId;
+   uint32_t numPages;
+}
+SVGAFifoCmdDefineGMR2;
+
+
+/*
+ * SVGA_CMD_REMAP_GMR2 --
+ *
+ *    Remap guest memory region v2.  See the description of GMRs above.
+ *
+ *    This command allows guest to modify a portion of an existing GMR by
+ *    invalidating it or reassigning it to different guest physical pages.
+ *    The pages are identified by physical page number (PPN).  The pages
+ *    are assumed to be pinned and valid for DMA operations.
+ *
+ *    Description of command flags:
+ *
+ *    SVGA_REMAP_GMR2_VIA_GMR: If enabled, references a PPN list in a GMR.
+ *       The PPN list must not overlap with the remap region (this can be
+ *       handled trivially by referencing a separate GMR).  If flag is
+ *       disabled, PPN list is appended to SVGARemapGMR command.
+ *
+ *    SVGA_REMAP_GMR2_PPN64: If set, PPN list is in PPN64 format, otherwise
+ *       it is in PPN32 format.
+ *
+ *    SVGA_REMAP_GMR2_SINGLE_PPN: If set, PPN list contains a single entry.
+ *       A single PPN can be used to invalidate a portion of a GMR or
+ *       map it to to a single guest scratch page.
+ *
+ * Availability:
+ *    SVGA_CAP_GMR2
+ */
+
+typedef enum {
+   SVGA_REMAP_GMR2_PPN32         = 0,
+   SVGA_REMAP_GMR2_VIA_GMR       = (1 << 0),
+   SVGA_REMAP_GMR2_PPN64         = (1 << 1),
+   SVGA_REMAP_GMR2_SINGLE_PPN    = (1 << 2)
+} SVGARemapGMR2Flags;
+
+typedef
+struct {
+   uint32_t gmrId;
+   SVGARemapGMR2Flags flags;
+   uint32_t offsetPages; // offset in pages to begin remap
+   uint32_t numPages; // number of pages to remap
+   /*
+    * Followed by additional data depending on SVGARemapGMR2Flags.
+    *
+    * If flag SVGA_REMAP_GMR2_VIA_GMR is set, single SVGAGuestPtr follows.
+    * Otherwise an array of page descriptors in PPN32 or PPN64 format
+    * (according to flag SVGA_REMAP_GMR2_PPN64) follows.  If flag
+    * SVGA_REMAP_GMR2_SINGLE_PPN is set, array contains a single entry.
+    */
+}
+SVGAFifoCmdRemapGMR2;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga/vmmouse_defs.h b/src/VBox/Devices/Graphics/vmsvga/vmmouse_defs.h
new file mode 100644
index 0000000..19ed959
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga/vmmouse_defs.h
@@ -0,0 +1,71 @@
+/**********************************************************
+ * Copyright 2002-2009 VMware, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * vmmouse_defs.h --
+ *
+ *     VMware Virtual Mouse Protocol definitions.
+ *
+ */
+
+#ifndef _VMMOUSE_DEFS_H_
+#define _VMMOUSE_DEFS_H_
+
+/*
+ * Command related defines
+ */
+#define VMMOUSE_CMD_READ_ID             0x45414552
+#define VMMOUSE_CMD_DISABLE             0x000000f5
+#define VMMOUSE_CMD_REQUEST_RELATIVE    0x4c455252
+#define VMMOUSE_CMD_REQUEST_ABSOLUTE    0x53424152
+
+/*
+ * Data related defines
+ */
+#define VMMOUSE_VERSION_ID_STR          "JUB4"
+#define VMMOUSE_VERSION_ID              0x3442554a
+
+/*
+ * Device related defines
+ */
+#define VMMOUSE_DATAPORT                96
+#define VMMOUSE_STATUSPORT              100
+#define VMMOUSE_IRQ                     12
+#define VMMOUSE_ERROR                   0xffff0000
+
+/*
+ * VMMouse Input packet flags
+ */
+#define VMMOUSE_MOVE_RELATIVE           1
+#define VMMOUSE_MOVE_ABSOLUTE           0
+
+/*
+ * VMMouse Input button flags
+ */
+#define VMMOUSE_LEFT_BUTTON             0x20
+#define VMMOUSE_RIGHT_BUTTON            0x10
+#define VMMOUSE_MIDDLE_BUTTON           0x08
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/glext.h b/src/VBox/Devices/Graphics/vmsvga_glext/glext.h
new file mode 100644
index 0000000..1abf982
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/glext.h
@@ -0,0 +1,13146 @@
+#ifndef __glext_h_
+#define __glext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** THIS FILE IS OBSOLETE. Please migrate away from using the
+** ".spec" files and the headers generated from them to the
+** XML Registry and headers generated from that. See
+**   http://www.opengl.org/registry/api/README.txt
+** for more information.
+** 
+** 
+** Copyright (c) 2007-2013 The Khronos Group Inc.
+** 
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+** 
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+** 
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glext.h last updated $Date: 2014-10-07 10:56:48 +0200 (Tue, 07 Oct 2014) $ */
+/* Current version at http://www.opengl.org/registry/ */
+#define GL_GLEXT_VERSION 87
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+#ifndef GL_VERSION_1_2
+#define GL_UNSIGNED_BYTE_3_3_2            0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
+#define GL_UNSIGNED_INT_8_8_8_8           0x8035
+#define GL_UNSIGNED_INT_10_10_10_2        0x8036
+#define GL_TEXTURE_BINDING_3D             0x806A
+#define GL_PACK_SKIP_IMAGES               0x806B
+#define GL_PACK_IMAGE_HEIGHT              0x806C
+#define GL_UNPACK_SKIP_IMAGES             0x806D
+#define GL_UNPACK_IMAGE_HEIGHT            0x806E
+#define GL_TEXTURE_3D                     0x806F
+#define GL_PROXY_TEXTURE_3D               0x8070
+#define GL_TEXTURE_DEPTH                  0x8071
+#define GL_TEXTURE_WRAP_R                 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE            0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV        0x8362
+#define GL_UNSIGNED_SHORT_5_6_5           0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV       0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV     0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV     0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV       0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV    0x8368
+#define GL_BGR                            0x80E0
+#define GL_BGRA                           0x80E1
+#define GL_MAX_ELEMENTS_VERTICES          0x80E8
+#define GL_MAX_ELEMENTS_INDICES           0x80E9
+#define GL_CLAMP_TO_EDGE                  0x812F
+#define GL_TEXTURE_MIN_LOD                0x813A
+#define GL_TEXTURE_MAX_LOD                0x813B
+#define GL_TEXTURE_BASE_LEVEL             0x813C
+#define GL_TEXTURE_MAX_LEVEL              0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY  0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY  0x0B23
+#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
+#define GL_RESCALE_NORMAL                 0x803A
+#define GL_LIGHT_MODEL_COLOR_CONTROL      0x81F8
+#define GL_SINGLE_COLOR                   0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR        0x81FA
+#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
+#endif
+
+#ifndef GL_ARB_imaging
+#define GL_CONSTANT_COLOR                 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002
+#define GL_CONSTANT_ALPHA                 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004
+#define GL_BLEND_COLOR                    0x8005
+#define GL_FUNC_ADD                       0x8006
+#define GL_MIN                            0x8007
+#define GL_MAX                            0x8008
+#define GL_BLEND_EQUATION                 0x8009
+#define GL_FUNC_SUBTRACT                  0x800A
+#define GL_FUNC_REVERSE_SUBTRACT          0x800B
+#define GL_CONVOLUTION_1D                 0x8010
+#define GL_CONVOLUTION_2D                 0x8011
+#define GL_SEPARABLE_2D                   0x8012
+#define GL_CONVOLUTION_BORDER_MODE        0x8013
+#define GL_CONVOLUTION_FILTER_SCALE       0x8014
+#define GL_CONVOLUTION_FILTER_BIAS        0x8015
+#define GL_REDUCE                         0x8016
+#define GL_CONVOLUTION_FORMAT             0x8017
+#define GL_CONVOLUTION_WIDTH              0x8018
+#define GL_CONVOLUTION_HEIGHT             0x8019
+#define GL_MAX_CONVOLUTION_WIDTH          0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT         0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE     0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE   0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE    0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE   0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS      0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS    0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS     0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS    0x8023
+#define GL_HISTOGRAM                      0x8024
+#define GL_PROXY_HISTOGRAM                0x8025
+#define GL_HISTOGRAM_WIDTH                0x8026
+#define GL_HISTOGRAM_FORMAT               0x8027
+#define GL_HISTOGRAM_RED_SIZE             0x8028
+#define GL_HISTOGRAM_GREEN_SIZE           0x8029
+#define GL_HISTOGRAM_BLUE_SIZE            0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE           0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE       0x802C
+#define GL_HISTOGRAM_SINK                 0x802D
+#define GL_MINMAX                         0x802E
+#define GL_MINMAX_FORMAT                  0x802F
+#define GL_MINMAX_SINK                    0x8030
+#define GL_TABLE_TOO_LARGE                0x8031
+#define GL_COLOR_MATRIX                   0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH       0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH   0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE    0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE  0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE   0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE  0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS     0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS   0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS    0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS   0x80BB
+#define GL_COLOR_TABLE                    0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE   0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE  0x80D2
+#define GL_PROXY_COLOR_TABLE              0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE              0x80D6
+#define GL_COLOR_TABLE_BIAS               0x80D7
+#define GL_COLOR_TABLE_FORMAT             0x80D8
+#define GL_COLOR_TABLE_WIDTH              0x80D9
+#define GL_COLOR_TABLE_RED_SIZE           0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE         0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE          0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE         0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE     0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE     0x80DF
+#define GL_CONSTANT_BORDER                0x8151
+#define GL_REPLICATE_BORDER               0x8153
+#define GL_CONVOLUTION_BORDER_COLOR       0x8154
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_TEXTURE0                       0x84C0
+#define GL_TEXTURE1                       0x84C1
+#define GL_TEXTURE2                       0x84C2
+#define GL_TEXTURE3                       0x84C3
+#define GL_TEXTURE4                       0x84C4
+#define GL_TEXTURE5                       0x84C5
+#define GL_TEXTURE6                       0x84C6
+#define GL_TEXTURE7                       0x84C7
+#define GL_TEXTURE8                       0x84C8
+#define GL_TEXTURE9                       0x84C9
+#define GL_TEXTURE10                      0x84CA
+#define GL_TEXTURE11                      0x84CB
+#define GL_TEXTURE12                      0x84CC
+#define GL_TEXTURE13                      0x84CD
+#define GL_TEXTURE14                      0x84CE
+#define GL_TEXTURE15                      0x84CF
+#define GL_TEXTURE16                      0x84D0
+#define GL_TEXTURE17                      0x84D1
+#define GL_TEXTURE18                      0x84D2
+#define GL_TEXTURE19                      0x84D3
+#define GL_TEXTURE20                      0x84D4
+#define GL_TEXTURE21                      0x84D5
+#define GL_TEXTURE22                      0x84D6
+#define GL_TEXTURE23                      0x84D7
+#define GL_TEXTURE24                      0x84D8
+#define GL_TEXTURE25                      0x84D9
+#define GL_TEXTURE26                      0x84DA
+#define GL_TEXTURE27                      0x84DB
+#define GL_TEXTURE28                      0x84DC
+#define GL_TEXTURE29                      0x84DD
+#define GL_TEXTURE30                      0x84DE
+#define GL_TEXTURE31                      0x84DF
+#define GL_ACTIVE_TEXTURE                 0x84E0
+#define GL_MULTISAMPLE                    0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE            0x809F
+#define GL_SAMPLE_COVERAGE                0x80A0
+#define GL_SAMPLE_BUFFERS                 0x80A8
+#define GL_SAMPLES                        0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT         0x80AB
+#define GL_TEXTURE_CUBE_MAP               0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP         0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C
+#define GL_COMPRESSED_RGB                 0x84ED
+#define GL_COMPRESSED_RGBA                0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT       0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE  0x86A0
+#define GL_TEXTURE_COMPRESSED             0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3
+#define GL_CLAMP_TO_BORDER                0x812D
+#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1
+#define GL_MAX_TEXTURE_UNITS              0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX     0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX    0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX       0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX         0x84E6
+#define GL_MULTISAMPLE_BIT                0x20000000
+#define GL_NORMAL_MAP                     0x8511
+#define GL_REFLECTION_MAP                 0x8512
+#define GL_COMPRESSED_ALPHA               0x84E9
+#define GL_COMPRESSED_LUMINANCE           0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA     0x84EB
+#define GL_COMPRESSED_INTENSITY           0x84EC
+#define GL_COMBINE                        0x8570
+#define GL_COMBINE_RGB                    0x8571
+#define GL_COMBINE_ALPHA                  0x8572
+#define GL_SOURCE0_RGB                    0x8580
+#define GL_SOURCE1_RGB                    0x8581
+#define GL_SOURCE2_RGB                    0x8582
+#define GL_SOURCE0_ALPHA                  0x8588
+#define GL_SOURCE1_ALPHA                  0x8589
+#define GL_SOURCE2_ALPHA                  0x858A
+#define GL_OPERAND0_RGB                   0x8590
+#define GL_OPERAND1_RGB                   0x8591
+#define GL_OPERAND2_RGB                   0x8592
+#define GL_OPERAND0_ALPHA                 0x8598
+#define GL_OPERAND1_ALPHA                 0x8599
+#define GL_OPERAND2_ALPHA                 0x859A
+#define GL_RGB_SCALE                      0x8573
+#define GL_ADD_SIGNED                     0x8574
+#define GL_INTERPOLATE                    0x8575
+#define GL_SUBTRACT                       0x84E7
+#define GL_CONSTANT                       0x8576
+#define GL_PRIMARY_COLOR                  0x8577
+#define GL_PREVIOUS                       0x8578
+#define GL_DOT3_RGB                       0x86AE
+#define GL_DOT3_RGBA                      0x86AF
+#endif
+
+#ifndef GL_VERSION_1_4
+#define GL_BLEND_DST_RGB                  0x80C8
+#define GL_BLEND_SRC_RGB                  0x80C9
+#define GL_BLEND_DST_ALPHA                0x80CA
+#define GL_BLEND_SRC_ALPHA                0x80CB
+#define GL_POINT_FADE_THRESHOLD_SIZE      0x8128
+#define GL_DEPTH_COMPONENT16              0x81A5
+#define GL_DEPTH_COMPONENT24              0x81A6
+#define GL_DEPTH_COMPONENT32              0x81A7
+#define GL_MIRRORED_REPEAT                0x8370
+#define GL_MAX_TEXTURE_LOD_BIAS           0x84FD
+#define GL_TEXTURE_LOD_BIAS               0x8501
+#define GL_INCR_WRAP                      0x8507
+#define GL_DECR_WRAP                      0x8508
+#define GL_TEXTURE_DEPTH_SIZE             0x884A
+#define GL_TEXTURE_COMPARE_MODE           0x884C
+#define GL_TEXTURE_COMPARE_FUNC           0x884D
+#define GL_POINT_SIZE_MIN                 0x8126
+#define GL_POINT_SIZE_MAX                 0x8127
+#define GL_POINT_DISTANCE_ATTENUATION     0x8129
+#define GL_GENERATE_MIPMAP                0x8191
+#define GL_GENERATE_MIPMAP_HINT           0x8192
+#define GL_FOG_COORDINATE_SOURCE          0x8450
+#define GL_FOG_COORDINATE                 0x8451
+#define GL_FRAGMENT_DEPTH                 0x8452
+#define GL_CURRENT_FOG_COORDINATE         0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE      0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE    0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER   0x8456
+#define GL_FOG_COORDINATE_ARRAY           0x8457
+#define GL_COLOR_SUM                      0x8458
+#define GL_CURRENT_SECONDARY_COLOR        0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE     0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE     0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE   0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER  0x845D
+#define GL_SECONDARY_COLOR_ARRAY          0x845E
+#define GL_TEXTURE_FILTER_CONTROL         0x8500
+#define GL_DEPTH_TEXTURE_MODE             0x884B
+#define GL_COMPARE_R_TO_TEXTURE           0x884E
+#endif
+
+#ifndef GL_VERSION_1_5
+#define GL_BUFFER_SIZE                    0x8764
+#define GL_BUFFER_USAGE                   0x8765
+#define GL_QUERY_COUNTER_BITS             0x8864
+#define GL_CURRENT_QUERY                  0x8865
+#define GL_QUERY_RESULT                   0x8866
+#define GL_QUERY_RESULT_AVAILABLE         0x8867
+#define GL_ARRAY_BUFFER                   0x8892
+#define GL_ELEMENT_ARRAY_BUFFER           0x8893
+#define GL_ARRAY_BUFFER_BINDING           0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING   0x8895
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY                      0x88B8
+#define GL_WRITE_ONLY                     0x88B9
+#define GL_READ_WRITE                     0x88BA
+#define GL_BUFFER_ACCESS                  0x88BB
+#define GL_BUFFER_MAPPED                  0x88BC
+#define GL_BUFFER_MAP_POINTER             0x88BD
+#define GL_STREAM_DRAW                    0x88E0
+#define GL_STREAM_READ                    0x88E1
+#define GL_STREAM_COPY                    0x88E2
+#define GL_STATIC_DRAW                    0x88E4
+#define GL_STATIC_READ                    0x88E5
+#define GL_STATIC_COPY                    0x88E6
+#define GL_DYNAMIC_DRAW                   0x88E8
+#define GL_DYNAMIC_READ                   0x88E9
+#define GL_DYNAMIC_COPY                   0x88EA
+#define GL_SAMPLES_PASSED                 0x8914
+#define GL_SRC1_ALPHA                     0x8589
+#define GL_VERTEX_ARRAY_BUFFER_BINDING    0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING    0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING     0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING     0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING    0x889E
+#define GL_FOG_COORD_SRC                  0x8450
+#define GL_FOG_COORD                      0x8451
+#define GL_CURRENT_FOG_COORD              0x8453
+#define GL_FOG_COORD_ARRAY_TYPE           0x8454
+#define GL_FOG_COORD_ARRAY_STRIDE         0x8455
+#define GL_FOG_COORD_ARRAY_POINTER        0x8456
+#define GL_FOG_COORD_ARRAY                0x8457
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D
+#define GL_SRC0_RGB                       0x8580
+#define GL_SRC1_RGB                       0x8581
+#define GL_SRC2_RGB                       0x8582
+#define GL_SRC0_ALPHA                     0x8588
+#define GL_SRC2_ALPHA                     0x858A
+#endif
+
+#ifndef GL_VERSION_2_0
+#define GL_BLEND_EQUATION_RGB             0x8009
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED    0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE       0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE     0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE       0x8625
+#define GL_CURRENT_VERTEX_ATTRIB          0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE      0x8642
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER    0x8645
+#define GL_STENCIL_BACK_FUNC              0x8800
+#define GL_STENCIL_BACK_FAIL              0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803
+#define GL_MAX_DRAW_BUFFERS               0x8824
+#define GL_DRAW_BUFFER0                   0x8825
+#define GL_DRAW_BUFFER1                   0x8826
+#define GL_DRAW_BUFFER2                   0x8827
+#define GL_DRAW_BUFFER3                   0x8828
+#define GL_DRAW_BUFFER4                   0x8829
+#define GL_DRAW_BUFFER5                   0x882A
+#define GL_DRAW_BUFFER6                   0x882B
+#define GL_DRAW_BUFFER7                   0x882C
+#define GL_DRAW_BUFFER8                   0x882D
+#define GL_DRAW_BUFFER9                   0x882E
+#define GL_DRAW_BUFFER10                  0x882F
+#define GL_DRAW_BUFFER11                  0x8830
+#define GL_DRAW_BUFFER12                  0x8831
+#define GL_DRAW_BUFFER13                  0x8832
+#define GL_DRAW_BUFFER14                  0x8833
+#define GL_DRAW_BUFFER15                  0x8834
+#define GL_BLEND_EQUATION_ALPHA           0x883D
+#define GL_MAX_VERTEX_ATTRIBS             0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_IMAGE_UNITS        0x8872
+#define GL_FRAGMENT_SHADER                0x8B30
+#define GL_VERTEX_SHADER                  0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS  0x8B4A
+#define GL_MAX_VARYING_FLOATS             0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE                    0x8B4F
+#define GL_FLOAT_VEC2                     0x8B50
+#define GL_FLOAT_VEC3                     0x8B51
+#define GL_FLOAT_VEC4                     0x8B52
+#define GL_INT_VEC2                       0x8B53
+#define GL_INT_VEC3                       0x8B54
+#define GL_INT_VEC4                       0x8B55
+#define GL_BOOL                           0x8B56
+#define GL_BOOL_VEC2                      0x8B57
+#define GL_BOOL_VEC3                      0x8B58
+#define GL_BOOL_VEC4                      0x8B59
+#define GL_FLOAT_MAT2                     0x8B5A
+#define GL_FLOAT_MAT3                     0x8B5B
+#define GL_FLOAT_MAT4                     0x8B5C
+#define GL_SAMPLER_1D                     0x8B5D
+#define GL_SAMPLER_2D                     0x8B5E
+#define GL_SAMPLER_3D                     0x8B5F
+#define GL_SAMPLER_CUBE                   0x8B60
+#define GL_SAMPLER_1D_SHADOW              0x8B61
+#define GL_SAMPLER_2D_SHADOW              0x8B62
+#define GL_DELETE_STATUS                  0x8B80
+#define GL_COMPILE_STATUS                 0x8B81
+#define GL_LINK_STATUS                    0x8B82
+#define GL_VALIDATE_STATUS                0x8B83
+#define GL_INFO_LOG_LENGTH                0x8B84
+#define GL_ATTACHED_SHADERS               0x8B85
+#define GL_ACTIVE_UNIFORMS                0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH      0x8B87
+#define GL_SHADER_SOURCE_LENGTH           0x8B88
+#define GL_ACTIVE_ATTRIBUTES              0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH    0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION       0x8B8C
+#define GL_CURRENT_PROGRAM                0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN      0x8CA0
+#define GL_LOWER_LEFT                     0x8CA1
+#define GL_UPPER_LEFT                     0x8CA2
+#define GL_STENCIL_BACK_REF               0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK        0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK         0x8CA5
+#define GL_VERTEX_PROGRAM_TWO_SIDE        0x8643
+#define GL_POINT_SPRITE                   0x8861
+#define GL_COORD_REPLACE                  0x8862
+#define GL_MAX_TEXTURE_COORDS             0x8871
+#endif
+
+#ifndef GL_VERSION_2_1
+#define GL_PIXEL_PACK_BUFFER              0x88EB
+#define GL_PIXEL_UNPACK_BUFFER            0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING      0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING    0x88EF
+#define GL_FLOAT_MAT2x3                   0x8B65
+#define GL_FLOAT_MAT2x4                   0x8B66
+#define GL_FLOAT_MAT3x2                   0x8B67
+#define GL_FLOAT_MAT3x4                   0x8B68
+#define GL_FLOAT_MAT4x2                   0x8B69
+#define GL_FLOAT_MAT4x3                   0x8B6A
+#define GL_SRGB                           0x8C40
+#define GL_SRGB8                          0x8C41
+#define GL_SRGB_ALPHA                     0x8C42
+#define GL_SRGB8_ALPHA8                   0x8C43
+#define GL_COMPRESSED_SRGB                0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA          0x8C49
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_SLUMINANCE_ALPHA               0x8C44
+#define GL_SLUMINANCE8_ALPHA8             0x8C45
+#define GL_SLUMINANCE                     0x8C46
+#define GL_SLUMINANCE8                    0x8C47
+#define GL_COMPRESSED_SLUMINANCE          0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA    0x8C4B
+#endif
+
+#ifndef GL_VERSION_3_0
+#define GL_COMPARE_REF_TO_TEXTURE         0x884E
+#define GL_CLIP_DISTANCE0                 0x3000
+#define GL_CLIP_DISTANCE1                 0x3001
+#define GL_CLIP_DISTANCE2                 0x3002
+#define GL_CLIP_DISTANCE3                 0x3003
+#define GL_CLIP_DISTANCE4                 0x3004
+#define GL_CLIP_DISTANCE5                 0x3005
+#define GL_CLIP_DISTANCE6                 0x3006
+#define GL_CLIP_DISTANCE7                 0x3007
+#define GL_MAX_CLIP_DISTANCES             0x0D32
+#define GL_MAJOR_VERSION                  0x821B
+#define GL_MINOR_VERSION                  0x821C
+#define GL_NUM_EXTENSIONS                 0x821D
+#define GL_CONTEXT_FLAGS                  0x821E
+#define GL_COMPRESSED_RED                 0x8225
+#define GL_COMPRESSED_RG                  0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001
+#define GL_RGBA32F                        0x8814
+#define GL_RGB32F                         0x8815
+#define GL_RGBA16F                        0x881A
+#define GL_RGB16F                         0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER    0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS       0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET       0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET       0x8905
+#define GL_CLAMP_READ_COLOR               0x891C
+#define GL_FIXED_ONLY                     0x891D
+#define GL_MAX_VARYING_COMPONENTS         0x8B4B
+#define GL_TEXTURE_1D_ARRAY               0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY         0x8C19
+#define GL_TEXTURE_2D_ARRAY               0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY         0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY       0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY       0x8C1D
+#define GL_R11F_G11F_B10F                 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV   0x8C3B
+#define GL_RGB9_E5                        0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV       0x8C3E
+#define GL_TEXTURE_SHARED_SIZE            0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS    0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED           0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD             0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS            0x8C8C
+#define GL_SEPARATE_ATTRIBS               0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER      0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI                       0x8D70
+#define GL_RGB32UI                        0x8D71
+#define GL_RGBA16UI                       0x8D76
+#define GL_RGB16UI                        0x8D77
+#define GL_RGBA8UI                        0x8D7C
+#define GL_RGB8UI                         0x8D7D
+#define GL_RGBA32I                        0x8D82
+#define GL_RGB32I                         0x8D83
+#define GL_RGBA16I                        0x8D88
+#define GL_RGB16I                         0x8D89
+#define GL_RGBA8I                         0x8D8E
+#define GL_RGB8I                          0x8D8F
+#define GL_RED_INTEGER                    0x8D94
+#define GL_GREEN_INTEGER                  0x8D95
+#define GL_BLUE_INTEGER                   0x8D96
+#define GL_RGB_INTEGER                    0x8D98
+#define GL_RGBA_INTEGER                   0x8D99
+#define GL_BGR_INTEGER                    0x8D9A
+#define GL_BGRA_INTEGER                   0x8D9B
+#define GL_SAMPLER_1D_ARRAY               0x8DC0
+#define GL_SAMPLER_2D_ARRAY               0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW        0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW        0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW            0x8DC5
+#define GL_UNSIGNED_INT_VEC2              0x8DC6
+#define GL_UNSIGNED_INT_VEC3              0x8DC7
+#define GL_UNSIGNED_INT_VEC4              0x8DC8
+#define GL_INT_SAMPLER_1D                 0x8DC9
+#define GL_INT_SAMPLER_2D                 0x8DCA
+#define GL_INT_SAMPLER_3D                 0x8DCB
+#define GL_INT_SAMPLER_CUBE               0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY           0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY           0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D        0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D        0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D        0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE      0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY  0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY  0x8DD7
+#define GL_QUERY_WAIT                     0x8E13
+#define GL_QUERY_NO_WAIT                  0x8E14
+#define GL_QUERY_BY_REGION_WAIT           0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT        0x8E16
+#define GL_BUFFER_ACCESS_FLAGS            0x911F
+#define GL_BUFFER_MAP_LENGTH              0x9120
+#define GL_BUFFER_MAP_OFFSET              0x9121
+/* Reuse tokens from ARB_depth_buffer_float */
+/* reuse GL_DEPTH_COMPONENT32F */
+/* reuse GL_DEPTH32F_STENCIL8 */
+/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */
+/* Reuse tokens from ARB_framebuffer_object */
+/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
+/* reuse GL_FRAMEBUFFER_DEFAULT */
+/* reuse GL_FRAMEBUFFER_UNDEFINED */
+/* reuse GL_DEPTH_STENCIL_ATTACHMENT */
+/* reuse GL_INDEX */
+/* reuse GL_MAX_RENDERBUFFER_SIZE */
+/* reuse GL_DEPTH_STENCIL */
+/* reuse GL_UNSIGNED_INT_24_8 */
+/* reuse GL_DEPTH24_STENCIL8 */
+/* reuse GL_TEXTURE_STENCIL_SIZE */
+/* reuse GL_TEXTURE_RED_TYPE */
+/* reuse GL_TEXTURE_GREEN_TYPE */
+/* reuse GL_TEXTURE_BLUE_TYPE */
+/* reuse GL_TEXTURE_ALPHA_TYPE */
+/* reuse GL_TEXTURE_DEPTH_TYPE */
+/* reuse GL_UNSIGNED_NORMALIZED */
+/* reuse GL_FRAMEBUFFER_BINDING */
+/* reuse GL_DRAW_FRAMEBUFFER_BINDING */
+/* reuse GL_RENDERBUFFER_BINDING */
+/* reuse GL_READ_FRAMEBUFFER */
+/* reuse GL_DRAW_FRAMEBUFFER */
+/* reuse GL_READ_FRAMEBUFFER_BINDING */
+/* reuse GL_RENDERBUFFER_SAMPLES */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+/* reuse GL_FRAMEBUFFER_COMPLETE */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
+/* reuse GL_FRAMEBUFFER_UNSUPPORTED */
+/* reuse GL_MAX_COLOR_ATTACHMENTS */
+/* reuse GL_COLOR_ATTACHMENT0 */
+/* reuse GL_COLOR_ATTACHMENT1 */
+/* reuse GL_COLOR_ATTACHMENT2 */
+/* reuse GL_COLOR_ATTACHMENT3 */
+/* reuse GL_COLOR_ATTACHMENT4 */
+/* reuse GL_COLOR_ATTACHMENT5 */
+/* reuse GL_COLOR_ATTACHMENT6 */
+/* reuse GL_COLOR_ATTACHMENT7 */
+/* reuse GL_COLOR_ATTACHMENT8 */
+/* reuse GL_COLOR_ATTACHMENT9 */
+/* reuse GL_COLOR_ATTACHMENT10 */
+/* reuse GL_COLOR_ATTACHMENT11 */
+/* reuse GL_COLOR_ATTACHMENT12 */
+/* reuse GL_COLOR_ATTACHMENT13 */
+/* reuse GL_COLOR_ATTACHMENT14 */
+/* reuse GL_COLOR_ATTACHMENT15 */
+/* reuse GL_DEPTH_ATTACHMENT */
+/* reuse GL_STENCIL_ATTACHMENT */
+/* reuse GL_FRAMEBUFFER */
+/* reuse GL_RENDERBUFFER */
+/* reuse GL_RENDERBUFFER_WIDTH */
+/* reuse GL_RENDERBUFFER_HEIGHT */
+/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */
+/* reuse GL_STENCIL_INDEX1 */
+/* reuse GL_STENCIL_INDEX4 */
+/* reuse GL_STENCIL_INDEX8 */
+/* reuse GL_STENCIL_INDEX16 */
+/* reuse GL_RENDERBUFFER_RED_SIZE */
+/* reuse GL_RENDERBUFFER_GREEN_SIZE */
+/* reuse GL_RENDERBUFFER_BLUE_SIZE */
+/* reuse GL_RENDERBUFFER_ALPHA_SIZE */
+/* reuse GL_RENDERBUFFER_DEPTH_SIZE */
+/* reuse GL_RENDERBUFFER_STENCIL_SIZE */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
+/* reuse GL_MAX_SAMPLES */
+/* Reuse tokens from ARB_framebuffer_sRGB */
+/* reuse GL_FRAMEBUFFER_SRGB */
+/* Reuse tokens from ARB_half_float_vertex */
+/* reuse GL_HALF_FLOAT */
+/* Reuse tokens from ARB_map_buffer_range */
+/* reuse GL_MAP_READ_BIT */
+/* reuse GL_MAP_WRITE_BIT */
+/* reuse GL_MAP_INVALIDATE_RANGE_BIT */
+/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */
+/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */
+/* reuse GL_MAP_UNSYNCHRONIZED_BIT */
+/* Reuse tokens from ARB_texture_compression_rgtc */
+/* reuse GL_COMPRESSED_RED_RGTC1 */
+/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */
+/* reuse GL_COMPRESSED_RG_RGTC2 */
+/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */
+/* Reuse tokens from ARB_texture_rg */
+/* reuse GL_RG */
+/* reuse GL_RG_INTEGER */
+/* reuse GL_R8 */
+/* reuse GL_R16 */
+/* reuse GL_RG8 */
+/* reuse GL_RG16 */
+/* reuse GL_R16F */
+/* reuse GL_R32F */
+/* reuse GL_RG16F */
+/* reuse GL_RG32F */
+/* reuse GL_R8I */
+/* reuse GL_R8UI */
+/* reuse GL_R16I */
+/* reuse GL_R16UI */
+/* reuse GL_R32I */
+/* reuse GL_R32UI */
+/* reuse GL_RG8I */
+/* reuse GL_RG8UI */
+/* reuse GL_RG16I */
+/* reuse GL_RG16UI */
+/* reuse GL_RG32I */
+/* reuse GL_RG32UI */
+/* Reuse tokens from ARB_vertex_array_object */
+/* reuse GL_VERTEX_ARRAY_BINDING */
+#define GL_CLAMP_VERTEX_COLOR             0x891A
+#define GL_CLAMP_FRAGMENT_COLOR           0x891B
+#define GL_ALPHA_INTEGER                  0x8D97
+/* Reuse tokens from ARB_framebuffer_object */
+/* reuse GL_TEXTURE_LUMINANCE_TYPE */
+/* reuse GL_TEXTURE_INTENSITY_TYPE */
+#endif
+
+#ifndef GL_VERSION_3_1
+#define GL_SAMPLER_2D_RECT                0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW         0x8B64
+#define GL_SAMPLER_BUFFER                 0x8DC2
+#define GL_INT_SAMPLER_2D_RECT            0x8DCD
+#define GL_INT_SAMPLER_BUFFER             0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT   0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER    0x8DD8
+#define GL_TEXTURE_BUFFER                 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE        0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER         0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_RECTANGLE              0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE      0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE        0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE     0x84F8
+#define GL_RED_SNORM                      0x8F90
+#define GL_RG_SNORM                       0x8F91
+#define GL_RGB_SNORM                      0x8F92
+#define GL_RGBA_SNORM                     0x8F93
+#define GL_R8_SNORM                       0x8F94
+#define GL_RG8_SNORM                      0x8F95
+#define GL_RGB8_SNORM                     0x8F96
+#define GL_RGBA8_SNORM                    0x8F97
+#define GL_R16_SNORM                      0x8F98
+#define GL_RG16_SNORM                     0x8F99
+#define GL_RGB16_SNORM                    0x8F9A
+#define GL_RGBA16_SNORM                   0x8F9B
+#define GL_SIGNED_NORMALIZED              0x8F9C
+#define GL_PRIMITIVE_RESTART              0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX        0x8F9E
+/* Reuse tokens from ARB_copy_buffer */
+/* reuse GL_COPY_READ_BUFFER */
+/* reuse GL_COPY_WRITE_BUFFER */
+/* Reuse tokens from ARB_draw_instanced (none) */
+/* Reuse tokens from ARB_uniform_buffer_object */
+/* reuse GL_UNIFORM_BUFFER */
+/* reuse GL_UNIFORM_BUFFER_BINDING */
+/* reuse GL_UNIFORM_BUFFER_START */
+/* reuse GL_UNIFORM_BUFFER_SIZE */
+/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */
+/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */
+/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */
+/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */
+/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */
+/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */
+/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */
+/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */
+/* reuse GL_ACTIVE_UNIFORM_BLOCKS */
+/* reuse GL_UNIFORM_TYPE */
+/* reuse GL_UNIFORM_SIZE */
+/* reuse GL_UNIFORM_NAME_LENGTH */
+/* reuse GL_UNIFORM_BLOCK_INDEX */
+/* reuse GL_UNIFORM_OFFSET */
+/* reuse GL_UNIFORM_ARRAY_STRIDE */
+/* reuse GL_UNIFORM_MATRIX_STRIDE */
+/* reuse GL_UNIFORM_IS_ROW_MAJOR */
+/* reuse GL_UNIFORM_BLOCK_BINDING */
+/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */
+/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */
+/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */
+/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */
+/* reuse GL_INVALID_INDEX */
+#endif
+
+#ifndef GL_VERSION_3_2
+#define GL_CONTEXT_CORE_PROFILE_BIT       0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_LINES_ADJACENCY                0x000A
+#define GL_LINE_STRIP_ADJACENCY           0x000B
+#define GL_TRIANGLES_ADJACENCY            0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY       0x000D
+#define GL_PROGRAM_POINT_SIZE             0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_GEOMETRY_SHADER                0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT          0x8916
+#define GL_GEOMETRY_INPUT_TYPE            0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE           0x8918
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES   0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS   0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS  0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS  0x9125
+#define GL_CONTEXT_PROFILE_MASK           0x9126
+/* reuse GL_MAX_VARYING_COMPONENTS */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+/* Reuse tokens from ARB_depth_clamp */
+/* reuse GL_DEPTH_CLAMP */
+/* Reuse tokens from ARB_draw_elements_base_vertex (none) */
+/* Reuse tokens from ARB_fragment_coord_conventions (none) */
+/* Reuse tokens from ARB_provoking_vertex */
+/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
+/* reuse GL_FIRST_VERTEX_CONVENTION */
+/* reuse GL_LAST_VERTEX_CONVENTION */
+/* reuse GL_PROVOKING_VERTEX */
+/* Reuse tokens from ARB_seamless_cube_map */
+/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */
+/* Reuse tokens from ARB_sync */
+/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */
+/* reuse GL_OBJECT_TYPE */
+/* reuse GL_SYNC_CONDITION */
+/* reuse GL_SYNC_STATUS */
+/* reuse GL_SYNC_FLAGS */
+/* reuse GL_SYNC_FENCE */
+/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */
+/* reuse GL_UNSIGNALED */
+/* reuse GL_SIGNALED */
+/* reuse GL_ALREADY_SIGNALED */
+/* reuse GL_TIMEOUT_EXPIRED */
+/* reuse GL_CONDITION_SATISFIED */
+/* reuse GL_WAIT_FAILED */
+/* reuse GL_TIMEOUT_IGNORED */
+/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */
+/* reuse GL_TIMEOUT_IGNORED */
+/* Reuse tokens from ARB_texture_multisample */
+/* reuse GL_SAMPLE_POSITION */
+/* reuse GL_SAMPLE_MASK */
+/* reuse GL_SAMPLE_MASK_VALUE */
+/* reuse GL_MAX_SAMPLE_MASK_WORDS */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE */
+/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */
+/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_TEXTURE_SAMPLES */
+/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */
+/* reuse GL_SAMPLER_2D_MULTISAMPLE */
+/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */
+/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */
+/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */
+/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */
+/* reuse GL_MAX_INTEGER_SAMPLES */
+/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */
+#endif
+
+#ifndef GL_VERSION_3_3
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR    0x88FE
+/* Reuse tokens from ARB_blend_func_extended */
+/* reuse GL_SRC1_COLOR */
+/* reuse GL_ONE_MINUS_SRC1_COLOR */
+/* reuse GL_ONE_MINUS_SRC1_ALPHA */
+/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */
+/* Reuse tokens from ARB_explicit_attrib_location (none) */
+/* Reuse tokens from ARB_occlusion_query2 */
+/* reuse GL_ANY_SAMPLES_PASSED */
+/* Reuse tokens from ARB_sampler_objects */
+/* reuse GL_SAMPLER_BINDING */
+/* Reuse tokens from ARB_shader_bit_encoding (none) */
+/* Reuse tokens from ARB_texture_rgb10_a2ui */
+/* reuse GL_RGB10_A2UI */
+/* Reuse tokens from ARB_texture_swizzle */
+/* reuse GL_TEXTURE_SWIZZLE_R */
+/* reuse GL_TEXTURE_SWIZZLE_G */
+/* reuse GL_TEXTURE_SWIZZLE_B */
+/* reuse GL_TEXTURE_SWIZZLE_A */
+/* reuse GL_TEXTURE_SWIZZLE_RGBA */
+/* Reuse tokens from ARB_timer_query */
+/* reuse GL_TIME_ELAPSED */
+/* reuse GL_TIMESTAMP */
+/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */
+/* reuse GL_INT_2_10_10_10_REV */
+#endif
+
+#ifndef GL_VERSION_4_0
+#define GL_SAMPLE_SHADING                 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE       0x8C37
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_TEXTURE_CUBE_MAP_ARRAY         0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY   0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY         0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW  0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY     0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+/* Reuse tokens from ARB_texture_query_lod (none) */
+/* Reuse tokens from ARB_draw_buffers_blend (none) */
+/* Reuse tokens from ARB_draw_indirect */
+/* reuse GL_DRAW_INDIRECT_BUFFER */
+/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */
+/* Reuse tokens from ARB_gpu_shader5 */
+/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */
+/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */
+/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */
+/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */
+/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */
+/* Reuse tokens from ARB_gpu_shader_fp64 */
+/* reuse GL_DOUBLE_VEC2 */
+/* reuse GL_DOUBLE_VEC3 */
+/* reuse GL_DOUBLE_VEC4 */
+/* reuse GL_DOUBLE_MAT2 */
+/* reuse GL_DOUBLE_MAT3 */
+/* reuse GL_DOUBLE_MAT4 */
+/* reuse GL_DOUBLE_MAT2x3 */
+/* reuse GL_DOUBLE_MAT2x4 */
+/* reuse GL_DOUBLE_MAT3x2 */
+/* reuse GL_DOUBLE_MAT3x4 */
+/* reuse GL_DOUBLE_MAT4x2 */
+/* reuse GL_DOUBLE_MAT4x3 */
+/* Reuse tokens from ARB_shader_subroutine */
+/* reuse GL_ACTIVE_SUBROUTINES */
+/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */
+/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */
+/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */
+/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */
+/* reuse GL_MAX_SUBROUTINES */
+/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */
+/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */
+/* reuse GL_COMPATIBLE_SUBROUTINES */
+/* Reuse tokens from ARB_tessellation_shader */
+/* reuse GL_PATCHES */
+/* reuse GL_PATCH_VERTICES */
+/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */
+/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */
+/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */
+/* reuse GL_TESS_GEN_MODE */
+/* reuse GL_TESS_GEN_SPACING */
+/* reuse GL_TESS_GEN_VERTEX_ORDER */
+/* reuse GL_TESS_GEN_POINT_MODE */
+/* reuse GL_ISOLINES */
+/* reuse GL_FRACTIONAL_ODD */
+/* reuse GL_FRACTIONAL_EVEN */
+/* reuse GL_MAX_PATCH_VERTICES */
+/* reuse GL_MAX_TESS_GEN_LEVEL */
+/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */
+/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */
+/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_PATCH_COMPONENTS */
+/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */
+/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */
+/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */
+/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */
+/* reuse GL_TESS_EVALUATION_SHADER */
+/* reuse GL_TESS_CONTROL_SHADER */
+/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */
+/* Reuse tokens from ARB_transform_feedback2 */
+/* reuse GL_TRANSFORM_FEEDBACK */
+/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
+/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
+/* reuse GL_TRANSFORM_FEEDBACK_BINDING */
+/* Reuse tokens from ARB_transform_feedback3 */
+/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */
+/* reuse GL_MAX_VERTEX_STREAMS */
+#endif
+
+#ifndef GL_VERSION_4_1
+/* Reuse tokens from ARB_ES2_compatibility */
+/* reuse GL_FIXED */
+/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */
+/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */
+/* reuse GL_LOW_FLOAT */
+/* reuse GL_MEDIUM_FLOAT */
+/* reuse GL_HIGH_FLOAT */
+/* reuse GL_LOW_INT */
+/* reuse GL_MEDIUM_INT */
+/* reuse GL_HIGH_INT */
+/* reuse GL_SHADER_COMPILER */
+/* reuse GL_SHADER_BINARY_FORMATS */
+/* reuse GL_NUM_SHADER_BINARY_FORMATS */
+/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */
+/* reuse GL_MAX_VARYING_VECTORS */
+/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */
+/* reuse GL_RGB565 */
+/* Reuse tokens from ARB_get_program_binary */
+/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */
+/* reuse GL_PROGRAM_BINARY_LENGTH */
+/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */
+/* reuse GL_PROGRAM_BINARY_FORMATS */
+/* Reuse tokens from ARB_separate_shader_objects */
+/* reuse GL_VERTEX_SHADER_BIT */
+/* reuse GL_FRAGMENT_SHADER_BIT */
+/* reuse GL_GEOMETRY_SHADER_BIT */
+/* reuse GL_TESS_CONTROL_SHADER_BIT */
+/* reuse GL_TESS_EVALUATION_SHADER_BIT */
+/* reuse GL_ALL_SHADER_BITS */
+/* reuse GL_PROGRAM_SEPARABLE */
+/* reuse GL_ACTIVE_PROGRAM */
+/* reuse GL_PROGRAM_PIPELINE_BINDING */
+/* Reuse tokens from ARB_shader_precision (none) */
+/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */
+/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */
+/* reuse GL_MAX_VIEWPORTS */
+/* reuse GL_VIEWPORT_SUBPIXEL_BITS */
+/* reuse GL_VIEWPORT_BOUNDS_RANGE */
+/* reuse GL_LAYER_PROVOKING_VERTEX */
+/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */
+/* reuse GL_UNDEFINED_VERTEX */
+#endif
+
+#ifndef GL_VERSION_4_2
+/* Reuse tokens from ARB_base_instance (none) */
+/* Reuse tokens from ARB_shading_language_420pack (none) */
+/* Reuse tokens from ARB_transform_feedback_instanced (none) */
+/* Reuse tokens from ARB_compressed_texture_pixel_storage */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE */
+/* reuse GL_PACK_COMPRESSED_BLOCK_WIDTH */
+/* reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT */
+/* reuse GL_PACK_COMPRESSED_BLOCK_DEPTH */
+/* reuse GL_PACK_COMPRESSED_BLOCK_SIZE */
+/* Reuse tokens from ARB_conservative_depth (none) */
+/* Reuse tokens from ARB_internalformat_query */
+/* reuse GL_NUM_SAMPLE_COUNTS */
+/* Reuse tokens from ARB_map_buffer_alignment */
+/* reuse GL_MIN_MAP_BUFFER_ALIGNMENT */
+/* Reuse tokens from ARB_shader_atomic_counters */
+/* reuse GL_ATOMIC_COUNTER_BUFFER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_BINDING */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_START */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_SIZE */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */
+/* reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_VERTEX_ATOMIC_COUNTERS */
+/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */
+/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */
+/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS */
+/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS */
+/* reuse GL_MAX_COMBINED_ATOMIC_COUNTERS */
+/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */
+/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */
+/* reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */
+/* reuse GL_UNSIGNED_INT_ATOMIC_COUNTER */
+/* Reuse tokens from ARB_shader_image_load_store */
+/* reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */
+/* reuse GL_ELEMENT_ARRAY_BARRIER_BIT */
+/* reuse GL_UNIFORM_BARRIER_BIT */
+/* reuse GL_TEXTURE_FETCH_BARRIER_BIT */
+/* reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */
+/* reuse GL_COMMAND_BARRIER_BIT */
+/* reuse GL_PIXEL_BUFFER_BARRIER_BIT */
+/* reuse GL_TEXTURE_UPDATE_BARRIER_BIT */
+/* reuse GL_BUFFER_UPDATE_BARRIER_BIT */
+/* reuse GL_FRAMEBUFFER_BARRIER_BIT */
+/* reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT */
+/* reuse GL_ATOMIC_COUNTER_BARRIER_BIT */
+/* reuse GL_ALL_BARRIER_BITS */
+/* reuse GL_MAX_IMAGE_UNITS */
+/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */
+/* reuse GL_IMAGE_BINDING_NAME */
+/* reuse GL_IMAGE_BINDING_LEVEL */
+/* reuse GL_IMAGE_BINDING_LAYERED */
+/* reuse GL_IMAGE_BINDING_LAYER */
+/* reuse GL_IMAGE_BINDING_ACCESS */
+/* reuse GL_IMAGE_1D */
+/* reuse GL_IMAGE_2D */
+/* reuse GL_IMAGE_3D */
+/* reuse GL_IMAGE_2D_RECT */
+/* reuse GL_IMAGE_CUBE */
+/* reuse GL_IMAGE_BUFFER */
+/* reuse GL_IMAGE_1D_ARRAY */
+/* reuse GL_IMAGE_2D_ARRAY */
+/* reuse GL_IMAGE_CUBE_MAP_ARRAY */
+/* reuse GL_IMAGE_2D_MULTISAMPLE */
+/* reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_INT_IMAGE_1D */
+/* reuse GL_INT_IMAGE_2D */
+/* reuse GL_INT_IMAGE_3D */
+/* reuse GL_INT_IMAGE_2D_RECT */
+/* reuse GL_INT_IMAGE_CUBE */
+/* reuse GL_INT_IMAGE_BUFFER */
+/* reuse GL_INT_IMAGE_1D_ARRAY */
+/* reuse GL_INT_IMAGE_2D_ARRAY */
+/* reuse GL_INT_IMAGE_CUBE_MAP_ARRAY */
+/* reuse GL_INT_IMAGE_2D_MULTISAMPLE */
+/* reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_1D */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D */
+/* reuse GL_UNSIGNED_INT_IMAGE_3D */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_RECT */
+/* reuse GL_UNSIGNED_INT_IMAGE_CUBE */
+/* reuse GL_UNSIGNED_INT_IMAGE_BUFFER */
+/* reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_MAX_IMAGE_SAMPLES */
+/* reuse GL_IMAGE_BINDING_FORMAT */
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */
+/* reuse GL_MAX_VERTEX_IMAGE_UNIFORMS */
+/* reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */
+/* reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */
+/* reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS */
+/* reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS */
+/* reuse GL_MAX_COMBINED_IMAGE_UNIFORMS */
+/* Reuse tokens from ARB_shading_language_packing (none) */
+/* Reuse tokens from ARB_texture_storage */
+/* reuse GL_TEXTURE_IMMUTABLE_FORMAT */
+#endif
+
+#ifndef GL_VERSION_4_3
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS  0x82E9
+#define GL_VERTEX_ATTRIB_ARRAY_LONG       0x874E
+/* Reuse tokens from ARB_arrays_of_arrays (none, GLSL only) */
+/* Reuse tokens from ARB_fragment_layer_viewport (none, GLSL only) */
+/* Reuse tokens from ARB_shader_image_size (none, GLSL only) */
+/* Reuse tokens from ARB_ES3_compatibility */
+/* reuse GL_COMPRESSED_RGB8_ETC2 */
+/* reuse GL_COMPRESSED_SRGB8_ETC2 */
+/* reuse GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */
+/* reuse GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */
+/* reuse GL_COMPRESSED_RGBA8_ETC2_EAC */
+/* reuse GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */
+/* reuse GL_COMPRESSED_R11_EAC */
+/* reuse GL_COMPRESSED_SIGNED_R11_EAC */
+/* reuse GL_COMPRESSED_RG11_EAC */
+/* reuse GL_COMPRESSED_SIGNED_RG11_EAC */
+/* reuse GL_PRIMITIVE_RESTART_FIXED_INDEX */
+/* reuse GL_ANY_SAMPLES_PASSED_CONSERVATIVE */
+/* reuse GL_MAX_ELEMENT_INDEX */
+/* Reuse tokens from ARB_clear_buffer_object (none) */
+/* Reuse tokens from ARB_compute_shader */
+/* reuse GL_COMPUTE_SHADER */
+/* reuse GL_MAX_COMPUTE_UNIFORM_BLOCKS */
+/* reuse GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */
+/* reuse GL_MAX_COMPUTE_IMAGE_UNIFORMS */
+/* reuse GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */
+/* reuse GL_MAX_COMPUTE_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTERS */
+/* reuse GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMPUTE_LOCAL_INVOCATIONS */
+/* reuse GL_MAX_COMPUTE_WORK_GROUP_COUNT */
+/* reuse GL_MAX_COMPUTE_WORK_GROUP_SIZE */
+/* reuse GL_COMPUTE_LOCAL_WORK_SIZE */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */
+/* reuse GL_DISPATCH_INDIRECT_BUFFER */
+/* reuse GL_DISPATCH_INDIRECT_BUFFER_BINDING */
+/* Reuse tokens from ARB_copy_image (none) */
+/* Reuse tokens from KHR_debug */
+/* reuse GL_DEBUG_OUTPUT_SYNCHRONOUS */
+/* reuse GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */
+/* reuse GL_DEBUG_CALLBACK_FUNCTION */
+/* reuse GL_DEBUG_CALLBACK_USER_PARAM */
+/* reuse GL_DEBUG_SOURCE_API */
+/* reuse GL_DEBUG_SOURCE_WINDOW_SYSTEM */
+/* reuse GL_DEBUG_SOURCE_SHADER_COMPILER */
+/* reuse GL_DEBUG_SOURCE_THIRD_PARTY */
+/* reuse GL_DEBUG_SOURCE_APPLICATION */
+/* reuse GL_DEBUG_SOURCE_OTHER */
+/* reuse GL_DEBUG_TYPE_ERROR */
+/* reuse GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */
+/* reuse GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */
+/* reuse GL_DEBUG_TYPE_PORTABILITY */
+/* reuse GL_DEBUG_TYPE_PERFORMANCE */
+/* reuse GL_DEBUG_TYPE_OTHER */
+/* reuse GL_MAX_DEBUG_MESSAGE_LENGTH */
+/* reuse GL_MAX_DEBUG_LOGGED_MESSAGES */
+/* reuse GL_DEBUG_LOGGED_MESSAGES */
+/* reuse GL_DEBUG_SEVERITY_HIGH */
+/* reuse GL_DEBUG_SEVERITY_MEDIUM */
+/* reuse GL_DEBUG_SEVERITY_LOW */
+/* reuse GL_DEBUG_TYPE_MARKER */
+/* reuse GL_DEBUG_TYPE_PUSH_GROUP */
+/* reuse GL_DEBUG_TYPE_POP_GROUP */
+/* reuse GL_DEBUG_SEVERITY_NOTIFICATION */
+/* reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH */
+/* reuse GL_DEBUG_GROUP_STACK_DEPTH */
+/* reuse GL_BUFFER */
+/* reuse GL_SHADER */
+/* reuse GL_PROGRAM */
+/* reuse GL_QUERY */
+/* reuse GL_PROGRAM_PIPELINE */
+/* reuse GL_SAMPLER */
+/* reuse GL_DISPLAY_LIST */
+/* reuse GL_MAX_LABEL_LENGTH */
+/* reuse GL_DEBUG_OUTPUT */
+/* reuse GL_CONTEXT_FLAG_DEBUG_BIT */
+/* reuse GL_STACK_UNDERFLOW */
+/* reuse GL_STACK_OVERFLOW */
+/* Reuse tokens from ARB_explicit_uniform_location */
+/* reuse GL_MAX_UNIFORM_LOCATIONS */
+/* Reuse tokens from ARB_framebuffer_no_attachments */
+/* reuse GL_FRAMEBUFFER_DEFAULT_WIDTH */
+/* reuse GL_FRAMEBUFFER_DEFAULT_HEIGHT */
+/* reuse GL_FRAMEBUFFER_DEFAULT_LAYERS */
+/* reuse GL_FRAMEBUFFER_DEFAULT_SAMPLES */
+/* reuse GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */
+/* reuse GL_MAX_FRAMEBUFFER_WIDTH */
+/* reuse GL_MAX_FRAMEBUFFER_HEIGHT */
+/* reuse GL_MAX_FRAMEBUFFER_LAYERS */
+/* reuse GL_MAX_FRAMEBUFFER_SAMPLES */
+/* Reuse tokens from ARB_internalformat_query2 */
+/* reuse GL_INTERNALFORMAT_SUPPORTED */
+/* reuse GL_INTERNALFORMAT_PREFERRED */
+/* reuse GL_INTERNALFORMAT_RED_SIZE */
+/* reuse GL_INTERNALFORMAT_GREEN_SIZE */
+/* reuse GL_INTERNALFORMAT_BLUE_SIZE */
+/* reuse GL_INTERNALFORMAT_ALPHA_SIZE */
+/* reuse GL_INTERNALFORMAT_DEPTH_SIZE */
+/* reuse GL_INTERNALFORMAT_STENCIL_SIZE */
+/* reuse GL_INTERNALFORMAT_SHARED_SIZE */
+/* reuse GL_INTERNALFORMAT_RED_TYPE */
+/* reuse GL_INTERNALFORMAT_GREEN_TYPE */
+/* reuse GL_INTERNALFORMAT_BLUE_TYPE */
+/* reuse GL_INTERNALFORMAT_ALPHA_TYPE */
+/* reuse GL_INTERNALFORMAT_DEPTH_TYPE */
+/* reuse GL_INTERNALFORMAT_STENCIL_TYPE */
+/* reuse GL_MAX_WIDTH */
+/* reuse GL_MAX_HEIGHT */
+/* reuse GL_MAX_DEPTH */
+/* reuse GL_MAX_LAYERS */
+/* reuse GL_MAX_COMBINED_DIMENSIONS */
+/* reuse GL_COLOR_COMPONENTS */
+/* reuse GL_DEPTH_COMPONENTS */
+/* reuse GL_STENCIL_COMPONENTS */
+/* reuse GL_COLOR_RENDERABLE */
+/* reuse GL_DEPTH_RENDERABLE */
+/* reuse GL_STENCIL_RENDERABLE */
+/* reuse GL_FRAMEBUFFER_RENDERABLE */
+/* reuse GL_FRAMEBUFFER_RENDERABLE_LAYERED */
+/* reuse GL_FRAMEBUFFER_BLEND */
+/* reuse GL_READ_PIXELS */
+/* reuse GL_READ_PIXELS_FORMAT */
+/* reuse GL_READ_PIXELS_TYPE */
+/* reuse GL_TEXTURE_IMAGE_FORMAT */
+/* reuse GL_TEXTURE_IMAGE_TYPE */
+/* reuse GL_GET_TEXTURE_IMAGE_FORMAT */
+/* reuse GL_GET_TEXTURE_IMAGE_TYPE */
+/* reuse GL_MIPMAP */
+/* reuse GL_MANUAL_GENERATE_MIPMAP */
+/* reuse GL_AUTO_GENERATE_MIPMAP */
+/* reuse GL_COLOR_ENCODING */
+/* reuse GL_SRGB_READ */
+/* reuse GL_SRGB_WRITE */
+/* reuse GL_FILTER */
+/* reuse GL_VERTEX_TEXTURE */
+/* reuse GL_TESS_CONTROL_TEXTURE */
+/* reuse GL_TESS_EVALUATION_TEXTURE */
+/* reuse GL_GEOMETRY_TEXTURE */
+/* reuse GL_FRAGMENT_TEXTURE */
+/* reuse GL_COMPUTE_TEXTURE */
+/* reuse GL_TEXTURE_SHADOW */
+/* reuse GL_TEXTURE_GATHER */
+/* reuse GL_TEXTURE_GATHER_SHADOW */
+/* reuse GL_SHADER_IMAGE_LOAD */
+/* reuse GL_SHADER_IMAGE_STORE */
+/* reuse GL_SHADER_IMAGE_ATOMIC */
+/* reuse GL_IMAGE_TEXEL_SIZE */
+/* reuse GL_IMAGE_COMPATIBILITY_CLASS */
+/* reuse GL_IMAGE_PIXEL_FORMAT */
+/* reuse GL_IMAGE_PIXEL_TYPE */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */
+/* reuse GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */
+/* reuse GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */
+/* reuse GL_TEXTURE_COMPRESSED_BLOCK_SIZE */
+/* reuse GL_CLEAR_BUFFER */
+/* reuse GL_TEXTURE_VIEW */
+/* reuse GL_VIEW_COMPATIBILITY_CLASS */
+/* reuse GL_FULL_SUPPORT */
+/* reuse GL_CAVEAT_SUPPORT */
+/* reuse GL_IMAGE_CLASS_4_X_32 */
+/* reuse GL_IMAGE_CLASS_2_X_32 */
+/* reuse GL_IMAGE_CLASS_1_X_32 */
+/* reuse GL_IMAGE_CLASS_4_X_16 */
+/* reuse GL_IMAGE_CLASS_2_X_16 */
+/* reuse GL_IMAGE_CLASS_1_X_16 */
+/* reuse GL_IMAGE_CLASS_4_X_8 */
+/* reuse GL_IMAGE_CLASS_2_X_8 */
+/* reuse GL_IMAGE_CLASS_1_X_8 */
+/* reuse GL_IMAGE_CLASS_11_11_10 */
+/* reuse GL_IMAGE_CLASS_10_10_10_2 */
+/* reuse GL_VIEW_CLASS_128_BITS */
+/* reuse GL_VIEW_CLASS_96_BITS */
+/* reuse GL_VIEW_CLASS_64_BITS */
+/* reuse GL_VIEW_CLASS_48_BITS */
+/* reuse GL_VIEW_CLASS_32_BITS */
+/* reuse GL_VIEW_CLASS_24_BITS */
+/* reuse GL_VIEW_CLASS_16_BITS */
+/* reuse GL_VIEW_CLASS_8_BITS */
+/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGB */
+/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGBA */
+/* reuse GL_VIEW_CLASS_S3TC_DXT3_RGBA */
+/* reuse GL_VIEW_CLASS_S3TC_DXT5_RGBA */
+/* reuse GL_VIEW_CLASS_RGTC1_RED */
+/* reuse GL_VIEW_CLASS_RGTC2_RG */
+/* reuse GL_VIEW_CLASS_BPTC_UNORM */
+/* reuse GL_VIEW_CLASS_BPTC_FLOAT */
+/* Reuse tokens from ARB_invalidate_subdata (none) */
+/* Reuse tokens from ARB_multi_draw_indirect (none) */
+/* Reuse tokens from ARB_program_interface_query */
+/* reuse GL_UNIFORM */
+/* reuse GL_UNIFORM_BLOCK */
+/* reuse GL_PROGRAM_INPUT */
+/* reuse GL_PROGRAM_OUTPUT */
+/* reuse GL_BUFFER_VARIABLE */
+/* reuse GL_SHADER_STORAGE_BLOCK */
+/* reuse GL_VERTEX_SUBROUTINE */
+/* reuse GL_TESS_CONTROL_SUBROUTINE */
+/* reuse GL_TESS_EVALUATION_SUBROUTINE */
+/* reuse GL_GEOMETRY_SUBROUTINE */
+/* reuse GL_FRAGMENT_SUBROUTINE */
+/* reuse GL_COMPUTE_SUBROUTINE */
+/* reuse GL_VERTEX_SUBROUTINE_UNIFORM */
+/* reuse GL_TESS_CONTROL_SUBROUTINE_UNIFORM */
+/* reuse GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */
+/* reuse GL_GEOMETRY_SUBROUTINE_UNIFORM */
+/* reuse GL_FRAGMENT_SUBROUTINE_UNIFORM */
+/* reuse GL_COMPUTE_SUBROUTINE_UNIFORM */
+/* reuse GL_TRANSFORM_FEEDBACK_VARYING */
+/* reuse GL_ACTIVE_RESOURCES */
+/* reuse GL_MAX_NAME_LENGTH */
+/* reuse GL_MAX_NUM_ACTIVE_VARIABLES */
+/* reuse GL_MAX_NUM_COMPATIBLE_SUBROUTINES */
+/* reuse GL_NAME_LENGTH */
+/* reuse GL_TYPE */
+/* reuse GL_ARRAY_SIZE */
+/* reuse GL_OFFSET */
+/* reuse GL_BLOCK_INDEX */
+/* reuse GL_ARRAY_STRIDE */
+/* reuse GL_MATRIX_STRIDE */
+/* reuse GL_IS_ROW_MAJOR */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_INDEX */
+/* reuse GL_BUFFER_BINDING */
+/* reuse GL_BUFFER_DATA_SIZE */
+/* reuse GL_NUM_ACTIVE_VARIABLES */
+/* reuse GL_ACTIVE_VARIABLES */
+/* reuse GL_REFERENCED_BY_VERTEX_SHADER */
+/* reuse GL_REFERENCED_BY_TESS_CONTROL_SHADER */
+/* reuse GL_REFERENCED_BY_TESS_EVALUATION_SHADER */
+/* reuse GL_REFERENCED_BY_GEOMETRY_SHADER */
+/* reuse GL_REFERENCED_BY_FRAGMENT_SHADER */
+/* reuse GL_REFERENCED_BY_COMPUTE_SHADER */
+/* reuse GL_TOP_LEVEL_ARRAY_SIZE */
+/* reuse GL_TOP_LEVEL_ARRAY_STRIDE */
+/* reuse GL_LOCATION */
+/* reuse GL_LOCATION_INDEX */
+/* reuse GL_IS_PER_PATCH */
+/* Reuse tokens from ARB_robust_buffer_access_behavior (none) */
+/* Reuse tokens from ARB_shader_storage_buffer_object */
+/* reuse GL_SHADER_STORAGE_BUFFER */
+/* reuse GL_SHADER_STORAGE_BUFFER_BINDING */
+/* reuse GL_SHADER_STORAGE_BUFFER_START */
+/* reuse GL_SHADER_STORAGE_BUFFER_SIZE */
+/* reuse GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */
+/* reuse GL_MAX_SHADER_STORAGE_BLOCK_SIZE */
+/* reuse GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */
+/* reuse GL_SHADER_STORAGE_BARRIER_BIT */
+/* reuse GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */
+/* Reuse tokens from ARB_stencil_texturing */
+/* reuse GL_DEPTH_STENCIL_TEXTURE_MODE */
+/* Reuse tokens from ARB_texture_buffer_range */
+/* reuse GL_TEXTURE_BUFFER_OFFSET */
+/* reuse GL_TEXTURE_BUFFER_SIZE */
+/* reuse GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */
+/* Reuse tokens from ARB_texture_query_levels (none) */
+/* Reuse tokens from ARB_texture_storage_multisample (none) */
+/* Reuse tokens from ARB_texture_view */
+/* reuse GL_TEXTURE_VIEW_MIN_LEVEL */
+/* reuse GL_TEXTURE_VIEW_NUM_LEVELS */
+/* reuse GL_TEXTURE_VIEW_MIN_LAYER */
+/* reuse GL_TEXTURE_VIEW_NUM_LAYERS */
+/* reuse GL_TEXTURE_IMMUTABLE_LEVELS */
+/* Reuse tokens from ARB_vertex_attrib_binding */
+/* reuse GL_VERTEX_ATTRIB_BINDING */
+/* reuse GL_VERTEX_ATTRIB_RELATIVE_OFFSET */
+/* reuse GL_VERTEX_BINDING_DIVISOR */
+/* reuse GL_VERTEX_BINDING_OFFSET */
+/* reuse GL_VERTEX_BINDING_STRIDE */
+/* reuse GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */
+/* reuse GL_MAX_VERTEX_ATTRIB_BINDINGS */
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_TEXTURE0_ARB                   0x84C0
+#define GL_TEXTURE1_ARB                   0x84C1
+#define GL_TEXTURE2_ARB                   0x84C2
+#define GL_TEXTURE3_ARB                   0x84C3
+#define GL_TEXTURE4_ARB                   0x84C4
+#define GL_TEXTURE5_ARB                   0x84C5
+#define GL_TEXTURE6_ARB                   0x84C6
+#define GL_TEXTURE7_ARB                   0x84C7
+#define GL_TEXTURE8_ARB                   0x84C8
+#define GL_TEXTURE9_ARB                   0x84C9
+#define GL_TEXTURE10_ARB                  0x84CA
+#define GL_TEXTURE11_ARB                  0x84CB
+#define GL_TEXTURE12_ARB                  0x84CC
+#define GL_TEXTURE13_ARB                  0x84CD
+#define GL_TEXTURE14_ARB                  0x84CE
+#define GL_TEXTURE15_ARB                  0x84CF
+#define GL_TEXTURE16_ARB                  0x84D0
+#define GL_TEXTURE17_ARB                  0x84D1
+#define GL_TEXTURE18_ARB                  0x84D2
+#define GL_TEXTURE19_ARB                  0x84D3
+#define GL_TEXTURE20_ARB                  0x84D4
+#define GL_TEXTURE21_ARB                  0x84D5
+#define GL_TEXTURE22_ARB                  0x84D6
+#define GL_TEXTURE23_ARB                  0x84D7
+#define GL_TEXTURE24_ARB                  0x84D8
+#define GL_TEXTURE25_ARB                  0x84D9
+#define GL_TEXTURE26_ARB                  0x84DA
+#define GL_TEXTURE27_ARB                  0x84DB
+#define GL_TEXTURE28_ARB                  0x84DC
+#define GL_TEXTURE29_ARB                  0x84DD
+#define GL_TEXTURE30_ARB                  0x84DE
+#define GL_TEXTURE31_ARB                  0x84DF
+#define GL_ACTIVE_TEXTURE_ARB             0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB   0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB     0x84E6
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_MULTISAMPLE_ARB                0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB   0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB        0x809F
+#define GL_SAMPLE_COVERAGE_ARB            0x80A0
+#define GL_SAMPLE_BUFFERS_ARB             0x80A8
+#define GL_SAMPLES_ARB                    0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB      0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB     0x80AB
+#define GL_MULTISAMPLE_BIT_ARB            0x20000000
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_NORMAL_MAP_ARB                 0x8511
+#define GL_REFLECTION_MAP_ARB             0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_COMPRESSED_ALPHA_ARB           0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB       0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB       0x84EC
+#define GL_COMPRESSED_RGB_ARB             0x84ED
+#define GL_COMPRESSED_RGBA_ARB            0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB   0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB         0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_CLAMP_TO_BORDER_ARB            0x812D
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_POINT_SIZE_MIN_ARB             0x8126
+#define GL_POINT_SIZE_MAX_ARB             0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB  0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_MAX_VERTEX_UNITS_ARB           0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB        0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB           0x86A6
+#define GL_VERTEX_BLEND_ARB               0x86A7
+#define GL_CURRENT_WEIGHT_ARB             0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB          0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB        0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB          0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB       0x86AC
+#define GL_WEIGHT_ARRAY_ARB               0x86AD
+#define GL_MODELVIEW0_ARB                 0x1700
+#define GL_MODELVIEW1_ARB                 0x850A
+#define GL_MODELVIEW2_ARB                 0x8722
+#define GL_MODELVIEW3_ARB                 0x8723
+#define GL_MODELVIEW4_ARB                 0x8724
+#define GL_MODELVIEW5_ARB                 0x8725
+#define GL_MODELVIEW6_ARB                 0x8726
+#define GL_MODELVIEW7_ARB                 0x8727
+#define GL_MODELVIEW8_ARB                 0x8728
+#define GL_MODELVIEW9_ARB                 0x8729
+#define GL_MODELVIEW10_ARB                0x872A
+#define GL_MODELVIEW11_ARB                0x872B
+#define GL_MODELVIEW12_ARB                0x872C
+#define GL_MODELVIEW13_ARB                0x872D
+#define GL_MODELVIEW14_ARB                0x872E
+#define GL_MODELVIEW15_ARB                0x872F
+#define GL_MODELVIEW16_ARB                0x8730
+#define GL_MODELVIEW17_ARB                0x8731
+#define GL_MODELVIEW18_ARB                0x8732
+#define GL_MODELVIEW19_ARB                0x8733
+#define GL_MODELVIEW20_ARB                0x8734
+#define GL_MODELVIEW21_ARB                0x8735
+#define GL_MODELVIEW22_ARB                0x8736
+#define GL_MODELVIEW23_ARB                0x8737
+#define GL_MODELVIEW24_ARB                0x8738
+#define GL_MODELVIEW25_ARB                0x8739
+#define GL_MODELVIEW26_ARB                0x873A
+#define GL_MODELVIEW27_ARB                0x873B
+#define GL_MODELVIEW28_ARB                0x873C
+#define GL_MODELVIEW29_ARB                0x873D
+#define GL_MODELVIEW30_ARB                0x873E
+#define GL_MODELVIEW31_ARB                0x873F
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_MATRIX_PALETTE_ARB             0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB       0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB     0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB         0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB       0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB    0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB    0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB  0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_COMBINE_ARB                    0x8570
+#define GL_COMBINE_RGB_ARB                0x8571
+#define GL_COMBINE_ALPHA_ARB              0x8572
+#define GL_SOURCE0_RGB_ARB                0x8580
+#define GL_SOURCE1_RGB_ARB                0x8581
+#define GL_SOURCE2_RGB_ARB                0x8582
+#define GL_SOURCE0_ALPHA_ARB              0x8588
+#define GL_SOURCE1_ALPHA_ARB              0x8589
+#define GL_SOURCE2_ALPHA_ARB              0x858A
+#define GL_OPERAND0_RGB_ARB               0x8590
+#define GL_OPERAND1_RGB_ARB               0x8591
+#define GL_OPERAND2_RGB_ARB               0x8592
+#define GL_OPERAND0_ALPHA_ARB             0x8598
+#define GL_OPERAND1_ALPHA_ARB             0x8599
+#define GL_OPERAND2_ALPHA_ARB             0x859A
+#define GL_RGB_SCALE_ARB                  0x8573
+#define GL_ADD_SIGNED_ARB                 0x8574
+#define GL_INTERPOLATE_ARB                0x8575
+#define GL_SUBTRACT_ARB                   0x84E7
+#define GL_CONSTANT_ARB                   0x8576
+#define GL_PRIMARY_COLOR_ARB              0x8577
+#define GL_PREVIOUS_ARB                   0x8578
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_DOT3_RGB_ARB                   0x86AE
+#define GL_DOT3_RGBA_ARB                  0x86AF
+#endif
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_ARB            0x8370
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_DEPTH_COMPONENT16_ARB          0x81A5
+#define GL_DEPTH_COMPONENT24_ARB          0x81A6
+#define GL_DEPTH_COMPONENT32_ARB          0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB         0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB         0x884B
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_TEXTURE_COMPARE_MODE_ARB       0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB       0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB       0x884E
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif
+
+#ifndef GL_ARB_window_pos
+#endif
+
+#ifndef GL_ARB_vertex_program
+#define GL_COLOR_SUM_ARB                  0x8458
+#define GL_VERTEX_PROGRAM_ARB             0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB   0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB   0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB      0x8626
+#define GL_PROGRAM_LENGTH_ARB             0x8627
+#define GL_PROGRAM_STRING_ARB             0x8628
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_PROGRAM_MATRICES_ARB       0x862F
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_CURRENT_MATRIX_ARB             0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB  0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB    0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_PROGRAM_ERROR_POSITION_ARB     0x864B
+#define GL_PROGRAM_BINDING_ARB            0x8677
+#define GL_MAX_VERTEX_ATTRIBS_ARB         0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ERROR_STRING_ARB       0x8874
+#define GL_PROGRAM_FORMAT_ASCII_ARB       0x8875
+#define GL_PROGRAM_FORMAT_ARB             0x8876
+#define GL_PROGRAM_INSTRUCTIONS_ARB       0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB   0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB        0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB    0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB         0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB     0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB  0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB            0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB        0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB     0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB  0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB   0x88B7
+#define GL_MATRIX0_ARB                    0x88C0
+#define GL_MATRIX1_ARB                    0x88C1
+#define GL_MATRIX2_ARB                    0x88C2
+#define GL_MATRIX3_ARB                    0x88C3
+#define GL_MATRIX4_ARB                    0x88C4
+#define GL_MATRIX5_ARB                    0x88C5
+#define GL_MATRIX6_ARB                    0x88C6
+#define GL_MATRIX7_ARB                    0x88C7
+#define GL_MATRIX8_ARB                    0x88C8
+#define GL_MATRIX9_ARB                    0x88C9
+#define GL_MATRIX10_ARB                   0x88CA
+#define GL_MATRIX11_ARB                   0x88CB
+#define GL_MATRIX12_ARB                   0x88CC
+#define GL_MATRIX13_ARB                   0x88CD
+#define GL_MATRIX14_ARB                   0x88CE
+#define GL_MATRIX15_ARB                   0x88CF
+#define GL_MATRIX16_ARB                   0x88D0
+#define GL_MATRIX17_ARB                   0x88D1
+#define GL_MATRIX18_ARB                   0x88D2
+#define GL_MATRIX19_ARB                   0x88D3
+#define GL_MATRIX20_ARB                   0x88D4
+#define GL_MATRIX21_ARB                   0x88D5
+#define GL_MATRIX22_ARB                   0x88D6
+#define GL_MATRIX23_ARB                   0x88D7
+#define GL_MATRIX24_ARB                   0x88D8
+#define GL_MATRIX25_ARB                   0x88D9
+#define GL_MATRIX26_ARB                   0x88DA
+#define GL_MATRIX27_ARB                   0x88DB
+#define GL_MATRIX28_ARB                   0x88DC
+#define GL_MATRIX29_ARB                   0x88DD
+#define GL_MATRIX30_ARB                   0x88DE
+#define GL_MATRIX31_ARB                   0x88DF
+#endif
+
+#ifndef GL_ARB_fragment_program
+#define GL_FRAGMENT_PROGRAM_ARB           0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB   0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB   0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB   0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB         0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB    0x8872
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_BUFFER_SIZE_ARB                0x8764
+#define GL_BUFFER_USAGE_ARB               0x8765
+#define GL_ARRAY_BUFFER_ARB               0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB       0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB       0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB                  0x88B8
+#define GL_WRITE_ONLY_ARB                 0x88B9
+#define GL_READ_WRITE_ARB                 0x88BA
+#define GL_BUFFER_ACCESS_ARB              0x88BB
+#define GL_BUFFER_MAPPED_ARB              0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB         0x88BD
+#define GL_STREAM_DRAW_ARB                0x88E0
+#define GL_STREAM_READ_ARB                0x88E1
+#define GL_STREAM_COPY_ARB                0x88E2
+#define GL_STATIC_DRAW_ARB                0x88E4
+#define GL_STATIC_READ_ARB                0x88E5
+#define GL_STATIC_COPY_ARB                0x88E6
+#define GL_DYNAMIC_DRAW_ARB               0x88E8
+#define GL_DYNAMIC_READ_ARB               0x88E9
+#define GL_DYNAMIC_COPY_ARB               0x88EA
+#endif
+
+#ifndef GL_ARB_occlusion_query
+#define GL_QUERY_COUNTER_BITS_ARB         0x8864
+#define GL_CURRENT_QUERY_ARB              0x8865
+#define GL_QUERY_RESULT_ARB               0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB     0x8867
+#define GL_SAMPLES_PASSED_ARB             0x8914
+#endif
+
+#ifndef GL_ARB_shader_objects
+#define GL_PROGRAM_OBJECT_ARB             0x8B40
+#define GL_SHADER_OBJECT_ARB              0x8B48
+#define GL_OBJECT_TYPE_ARB                0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB             0x8B4F
+#define GL_FLOAT_VEC2_ARB                 0x8B50
+#define GL_FLOAT_VEC3_ARB                 0x8B51
+#define GL_FLOAT_VEC4_ARB                 0x8B52
+#define GL_INT_VEC2_ARB                   0x8B53
+#define GL_INT_VEC3_ARB                   0x8B54
+#define GL_INT_VEC4_ARB                   0x8B55
+#define GL_BOOL_ARB                       0x8B56
+#define GL_BOOL_VEC2_ARB                  0x8B57
+#define GL_BOOL_VEC3_ARB                  0x8B58
+#define GL_BOOL_VEC4_ARB                  0x8B59
+#define GL_FLOAT_MAT2_ARB                 0x8B5A
+#define GL_FLOAT_MAT3_ARB                 0x8B5B
+#define GL_FLOAT_MAT4_ARB                 0x8B5C
+#define GL_SAMPLER_1D_ARB                 0x8B5D
+#define GL_SAMPLER_2D_ARB                 0x8B5E
+#define GL_SAMPLER_3D_ARB                 0x8B5F
+#define GL_SAMPLER_CUBE_ARB               0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB          0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB          0x8B62
+#define GL_SAMPLER_2D_RECT_ARB            0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB     0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB       0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB      0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB         0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB     0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB     0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB    0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB     0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+#endif
+
+#ifndef GL_ARB_vertex_shader
+#define GL_VERTEX_SHADER_ARB              0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB         0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB   0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+#endif
+
+#ifndef GL_ARB_fragment_shader
+#define GL_FRAGMENT_SHADER_ARB            0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+#endif
+
+#ifndef GL_ARB_shading_language_100
+#define GL_SHADING_LANGUAGE_VERSION_ARB   0x8B8C
+#endif
+
+#ifndef GL_ARB_texture_non_power_of_two
+#endif
+
+#ifndef GL_ARB_point_sprite
+#define GL_POINT_SPRITE_ARB               0x8861
+#define GL_COORD_REPLACE_ARB              0x8862
+#endif
+
+#ifndef GL_ARB_fragment_program_shadow
+#endif
+
+#ifndef GL_ARB_draw_buffers
+#define GL_MAX_DRAW_BUFFERS_ARB           0x8824
+#define GL_DRAW_BUFFER0_ARB               0x8825
+#define GL_DRAW_BUFFER1_ARB               0x8826
+#define GL_DRAW_BUFFER2_ARB               0x8827
+#define GL_DRAW_BUFFER3_ARB               0x8828
+#define GL_DRAW_BUFFER4_ARB               0x8829
+#define GL_DRAW_BUFFER5_ARB               0x882A
+#define GL_DRAW_BUFFER6_ARB               0x882B
+#define GL_DRAW_BUFFER7_ARB               0x882C
+#define GL_DRAW_BUFFER8_ARB               0x882D
+#define GL_DRAW_BUFFER9_ARB               0x882E
+#define GL_DRAW_BUFFER10_ARB              0x882F
+#define GL_DRAW_BUFFER11_ARB              0x8830
+#define GL_DRAW_BUFFER12_ARB              0x8831
+#define GL_DRAW_BUFFER13_ARB              0x8832
+#define GL_DRAW_BUFFER14_ARB              0x8833
+#define GL_DRAW_BUFFER15_ARB              0x8834
+#endif
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_TEXTURE_RECTANGLE_ARB          0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB  0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB    0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+#endif
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_RGBA_FLOAT_MODE_ARB            0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB         0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB       0x891B
+#define GL_CLAMP_READ_COLOR_ARB           0x891C
+#define GL_FIXED_ONLY_ARB                 0x891D
+#endif
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_HALF_FLOAT_ARB                 0x140B
+#endif
+
+#ifndef GL_ARB_texture_float
+#define GL_TEXTURE_RED_TYPE_ARB           0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB         0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB          0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB         0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB     0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB     0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB         0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB        0x8C17
+#define GL_RGBA32F_ARB                    0x8814
+#define GL_RGB32F_ARB                     0x8815
+#define GL_ALPHA32F_ARB                   0x8816
+#define GL_INTENSITY32F_ARB               0x8817
+#define GL_LUMINANCE32F_ARB               0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB         0x8819
+#define GL_RGBA16F_ARB                    0x881A
+#define GL_RGB16F_ARB                     0x881B
+#define GL_ALPHA16F_ARB                   0x881C
+#define GL_INTENSITY16F_ARB               0x881D
+#define GL_LUMINANCE16F_ARB               0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB         0x881F
+#endif
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_PIXEL_PACK_BUFFER_ARB          0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB        0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB  0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+#endif
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_DEPTH_COMPONENT32F             0x8CAC
+#define GL_DEPTH32F_STENCIL8              0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#endif
+
+#ifndef GL_ARB_draw_instanced
+#endif
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT            0x8218
+#define GL_FRAMEBUFFER_UNDEFINED          0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT       0x821A
+#define GL_MAX_RENDERBUFFER_SIZE          0x84E8
+#define GL_DEPTH_STENCIL                  0x84F9
+#define GL_UNSIGNED_INT_24_8              0x84FA
+#define GL_DEPTH24_STENCIL8               0x88F0
+#define GL_TEXTURE_STENCIL_SIZE           0x88F1
+#define GL_TEXTURE_RED_TYPE               0x8C10
+#define GL_TEXTURE_GREEN_TYPE             0x8C11
+#define GL_TEXTURE_BLUE_TYPE              0x8C12
+#define GL_TEXTURE_ALPHA_TYPE             0x8C13
+#define GL_TEXTURE_DEPTH_TYPE             0x8C16
+#define GL_UNSIGNED_NORMALIZED            0x8C17
+#define GL_FRAMEBUFFER_BINDING            0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING       0x8CA6
+#define GL_RENDERBUFFER_BINDING           0x8CA7
+#define GL_READ_FRAMEBUFFER               0x8CA8
+#define GL_DRAW_FRAMEBUFFER               0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING       0x8CAA
+#define GL_RENDERBUFFER_SAMPLES           0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE           0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED        0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS          0x8CDF
+#define GL_COLOR_ATTACHMENT0              0x8CE0
+#define GL_COLOR_ATTACHMENT1              0x8CE1
+#define GL_COLOR_ATTACHMENT2              0x8CE2
+#define GL_COLOR_ATTACHMENT3              0x8CE3
+#define GL_COLOR_ATTACHMENT4              0x8CE4
+#define GL_COLOR_ATTACHMENT5              0x8CE5
+#define GL_COLOR_ATTACHMENT6              0x8CE6
+#define GL_COLOR_ATTACHMENT7              0x8CE7
+#define GL_COLOR_ATTACHMENT8              0x8CE8
+#define GL_COLOR_ATTACHMENT9              0x8CE9
+#define GL_COLOR_ATTACHMENT10             0x8CEA
+#define GL_COLOR_ATTACHMENT11             0x8CEB
+#define GL_COLOR_ATTACHMENT12             0x8CEC
+#define GL_COLOR_ATTACHMENT13             0x8CED
+#define GL_COLOR_ATTACHMENT14             0x8CEE
+#define GL_COLOR_ATTACHMENT15             0x8CEF
+#define GL_DEPTH_ATTACHMENT               0x8D00
+#define GL_STENCIL_ATTACHMENT             0x8D20
+#define GL_FRAMEBUFFER                    0x8D40
+#define GL_RENDERBUFFER                   0x8D41
+#define GL_RENDERBUFFER_WIDTH             0x8D42
+#define GL_RENDERBUFFER_HEIGHT            0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT   0x8D44
+#define GL_STENCIL_INDEX1                 0x8D46
+#define GL_STENCIL_INDEX4                 0x8D47
+#define GL_STENCIL_INDEX8                 0x8D48
+#define GL_STENCIL_INDEX16                0x8D49
+#define GL_RENDERBUFFER_RED_SIZE          0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE        0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE         0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE        0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE        0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE      0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES                    0x8D57
+#define GL_INDEX                          0x8222
+#define GL_TEXTURE_LUMINANCE_TYPE         0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE         0x8C15
+#endif
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_FRAMEBUFFER_SRGB               0x8DB9
+#endif
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_LINES_ADJACENCY_ARB            0x000A
+#define GL_LINE_STRIP_ADJACENCY_ARB       0x000B
+#define GL_TRIANGLES_ADJACENCY_ARB        0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB   0x000D
+#define GL_PROGRAM_POINT_SIZE_ARB         0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_GEOMETRY_SHADER_ARB            0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB      0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB        0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB       0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+/* reuse GL_MAX_VARYING_COMPONENTS */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+#endif
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_HALF_FLOAT                     0x140B
+#endif
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+#endif
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_MAP_READ_BIT                   0x0001
+#define GL_MAP_WRITE_BIT                  0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT       0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT      0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT         0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT         0x0020
+#endif
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_TEXTURE_BUFFER_ARB             0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB    0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB     0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB      0x8C2E
+#endif
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_COMPRESSED_RED_RGTC1           0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1    0x8DBC
+#define GL_COMPRESSED_RG_RGTC2            0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2     0x8DBE
+#endif
+
+#ifndef GL_ARB_texture_rg
+#define GL_RG                             0x8227
+#define GL_RG_INTEGER                     0x8228
+#define GL_R8                             0x8229
+#define GL_R16                            0x822A
+#define GL_RG8                            0x822B
+#define GL_RG16                           0x822C
+#define GL_R16F                           0x822D
+#define GL_R32F                           0x822E
+#define GL_RG16F                          0x822F
+#define GL_RG32F                          0x8230
+#define GL_R8I                            0x8231
+#define GL_R8UI                           0x8232
+#define GL_R16I                           0x8233
+#define GL_R16UI                          0x8234
+#define GL_R32I                           0x8235
+#define GL_R32UI                          0x8236
+#define GL_RG8I                           0x8237
+#define GL_RG8UI                          0x8238
+#define GL_RG16I                          0x8239
+#define GL_RG16UI                         0x823A
+#define GL_RG32I                          0x823B
+#define GL_RG32UI                         0x823C
+#endif
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_VERTEX_ARRAY_BINDING           0x85B5
+#endif
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_UNIFORM_BUFFER                 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING         0x8A28
+#define GL_UNIFORM_BUFFER_START           0x8A29
+#define GL_UNIFORM_BUFFER_SIZE            0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS      0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS    0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS    0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS    0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS    0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE         0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS          0x8A36
+#define GL_UNIFORM_TYPE                   0x8A37
+#define GL_UNIFORM_SIZE                   0x8A38
+#define GL_UNIFORM_NAME_LENGTH            0x8A39
+#define GL_UNIFORM_BLOCK_INDEX            0x8A3A
+#define GL_UNIFORM_OFFSET                 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE           0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE          0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR           0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING          0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE        0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH      0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS  0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX                  0xFFFFFFFFu
+#endif
+
+#ifndef GL_ARB_compatibility
+/* ARB_compatibility just defines tokens from core 3.0 */
+#endif
+
+#ifndef GL_ARB_copy_buffer
+#define GL_COPY_READ_BUFFER_BINDING       0x8F36
+#define GL_COPY_READ_BUFFER               0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING      0x8F37
+#define GL_COPY_WRITE_BUFFER              0x8F37
+#endif
+
+#ifndef GL_ARB_shader_texture_lod
+#endif
+
+#ifndef GL_ARB_depth_clamp
+#define GL_DEPTH_CLAMP                    0x864F
+#endif
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#endif
+
+#ifndef GL_ARB_fragment_coord_conventions
+#endif
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION        0x8E4D
+#define GL_LAST_VERTEX_CONVENTION         0x8E4E
+#define GL_PROVOKING_VERTEX               0x8E4F
+#endif
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS      0x884F
+#endif
+
+#ifndef GL_ARB_sync
+#define GL_MAX_SERVER_WAIT_TIMEOUT        0x9111
+#define GL_OBJECT_TYPE                    0x9112
+#define GL_SYNC_CONDITION                 0x9113
+#define GL_SYNC_STATUS                    0x9114
+#define GL_SYNC_FLAGS                     0x9115
+#define GL_SYNC_FENCE                     0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE     0x9117
+#define GL_UNSIGNALED                     0x9118
+#define GL_SIGNALED                       0x9119
+#define GL_ALREADY_SIGNALED               0x911A
+#define GL_TIMEOUT_EXPIRED                0x911B
+#define GL_CONDITION_SATISFIED            0x911C
+#define GL_WAIT_FAILED                    0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT        0x00000001
+#define GL_TIMEOUT_IGNORED                0xFFFFFFFFFFFFFFFFull
+#endif
+
+#ifndef GL_ARB_texture_multisample
+#define GL_SAMPLE_POSITION                0x8E50
+#define GL_SAMPLE_MASK                    0x8E51
+#define GL_SAMPLE_MASK_VALUE              0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS          0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE         0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE   0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY   0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_SAMPLES                0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE         0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE     0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY   0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES      0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES      0x910F
+#define GL_MAX_INTEGER_SAMPLES            0x9110
+#endif
+
+#ifndef GL_ARB_vertex_array_bgra
+/* reuse GL_BGRA */
+#endif
+
+#ifndef GL_ARB_draw_buffers_blend
+#endif
+
+#ifndef GL_ARB_sample_shading
+#define GL_SAMPLE_SHADING_ARB             0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB   0x8C37
+#endif
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB     0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB     0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
+#endif
+
+#ifndef GL_ARB_texture_gather
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
+#endif
+
+#ifndef GL_ARB_texture_query_lod
+#endif
+
+#ifndef GL_ARB_shading_language_include
+#define GL_SHADER_INCLUDE_ARB             0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB        0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB          0x8DEA
+#endif
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+#endif
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_SRC1_COLOR                     0x88F9
+/* reuse GL_SRC1_ALPHA */
+#define GL_ONE_MINUS_SRC1_COLOR           0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA           0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS   0x88FC
+#endif
+
+#ifndef GL_ARB_explicit_attrib_location
+#endif
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ANY_SAMPLES_PASSED             0x8C2F
+#endif
+
+#ifndef GL_ARB_sampler_objects
+#define GL_SAMPLER_BINDING                0x8919
+#endif
+
+#ifndef GL_ARB_shader_bit_encoding
+#endif
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_RGB10_A2UI                     0x906F
+#endif
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_TEXTURE_SWIZZLE_R              0x8E42
+#define GL_TEXTURE_SWIZZLE_G              0x8E43
+#define GL_TEXTURE_SWIZZLE_B              0x8E44
+#define GL_TEXTURE_SWIZZLE_A              0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA           0x8E46
+#endif
+
+#ifndef GL_ARB_timer_query
+#define GL_TIME_ELAPSED                   0x88BF
+#define GL_TIMESTAMP                      0x8E28
+#endif
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */
+#define GL_INT_2_10_10_10_REV             0x8D9F
+#endif
+
+#ifndef GL_ARB_draw_indirect
+#define GL_DRAW_INDIRECT_BUFFER           0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING   0x8F43
+#endif
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_GEOMETRY_SHADER_INVOCATIONS    0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+/* reuse GL_MAX_VERTEX_STREAMS */
+#endif
+
+#ifndef GL_ARB_gpu_shader_fp64
+/* reuse GL_DOUBLE */
+#define GL_DOUBLE_VEC2                    0x8FFC
+#define GL_DOUBLE_VEC3                    0x8FFD
+#define GL_DOUBLE_VEC4                    0x8FFE
+#define GL_DOUBLE_MAT2                    0x8F46
+#define GL_DOUBLE_MAT3                    0x8F47
+#define GL_DOUBLE_MAT4                    0x8F48
+#define GL_DOUBLE_MAT2x3                  0x8F49
+#define GL_DOUBLE_MAT2x4                  0x8F4A
+#define GL_DOUBLE_MAT3x2                  0x8F4B
+#define GL_DOUBLE_MAT3x4                  0x8F4C
+#define GL_DOUBLE_MAT4x2                  0x8F4D
+#define GL_DOUBLE_MAT4x3                  0x8F4E
+#endif
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ACTIVE_SUBROUTINES             0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS     0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH   0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_MAX_SUBROUTINES                0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_NUM_COMPATIBLE_SUBROUTINES     0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES         0x8E4B
+/* reuse GL_UNIFORM_SIZE */
+/* reuse GL_UNIFORM_NAME_LENGTH */
+#endif
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_PATCHES                        0x000E
+#define GL_PATCH_VERTICES                 0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL      0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL      0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES   0x8E75
+#define GL_TESS_GEN_MODE                  0x8E76
+#define GL_TESS_GEN_SPACING               0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER          0x8E78
+#define GL_TESS_GEN_POINT_MODE            0x8E79
+/* reuse GL_TRIANGLES */
+/* reuse GL_QUADS */
+#define GL_ISOLINES                       0x8E7A
+/* reuse GL_EQUAL */
+#define GL_FRACTIONAL_ODD                 0x8E7B
+#define GL_FRACTIONAL_EVEN                0x8E7C
+/* reuse GL_CCW */
+/* reuse GL_CW */
+#define GL_MAX_PATCH_VERTICES             0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL             0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS      0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_TESS_EVALUATION_SHADER         0x8E87
+#define GL_TESS_CONTROL_SHADER            0x8E88
+#endif
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+/* reuse GL_RGB32F */
+/* reuse GL_RGB32UI */
+/* reuse GL_RGB32I */
+#endif
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_TRANSFORM_FEEDBACK             0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED      0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_ACTIVE      0x8E24
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING     0x8E25
+#endif
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+#define GL_MAX_VERTEX_STREAMS             0x8E71
+#endif
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_FIXED                          0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_LOW_FLOAT                      0x8DF0
+#define GL_MEDIUM_FLOAT                   0x8DF1
+#define GL_HIGH_FLOAT                     0x8DF2
+#define GL_LOW_INT                        0x8DF3
+#define GL_MEDIUM_INT                     0x8DF4
+#define GL_HIGH_INT                       0x8DF5
+#define GL_SHADER_COMPILER                0x8DFA
+#define GL_SHADER_BINARY_FORMATS          0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS      0x8DF9
+#define GL_MAX_VERTEX_UNIFORM_VECTORS     0x8DFB
+#define GL_MAX_VARYING_VECTORS            0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS   0x8DFD
+#define GL_RGB565                         0x8D62
+#endif
+
+#ifndef GL_ARB_get_program_binary
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH          0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS     0x87FE
+#define GL_PROGRAM_BINARY_FORMATS         0x87FF
+#endif
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_VERTEX_SHADER_BIT              0x00000001
+#define GL_FRAGMENT_SHADER_BIT            0x00000002
+#define GL_GEOMETRY_SHADER_BIT            0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT        0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT     0x00000010
+#define GL_ALL_SHADER_BITS                0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE              0x8258
+#define GL_ACTIVE_PROGRAM                 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING       0x825A
+#endif
+
+#ifndef GL_ARB_shader_precision
+#endif
+
+#ifndef GL_ARB_vertex_attrib_64bit
+/* reuse GL_RGB32I */
+/* reuse GL_DOUBLE_VEC2 */
+/* reuse GL_DOUBLE_VEC3 */
+/* reuse GL_DOUBLE_VEC4 */
+/* reuse GL_DOUBLE_MAT2 */
+/* reuse GL_DOUBLE_MAT3 */
+/* reuse GL_DOUBLE_MAT4 */
+/* reuse GL_DOUBLE_MAT2x3 */
+/* reuse GL_DOUBLE_MAT2x4 */
+/* reuse GL_DOUBLE_MAT3x2 */
+/* reuse GL_DOUBLE_MAT3x4 */
+/* reuse GL_DOUBLE_MAT4x2 */
+/* reuse GL_DOUBLE_MAT4x3 */
+#endif
+
+#ifndef GL_ARB_viewport_array
+/* reuse GL_SCISSOR_BOX */
+/* reuse GL_VIEWPORT */
+/* reuse GL_DEPTH_RANGE */
+/* reuse GL_SCISSOR_TEST */
+#define GL_MAX_VIEWPORTS                  0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS         0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE          0x825D
+#define GL_LAYER_PROVOKING_VERTEX         0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_UNDEFINED_VERTEX               0x8260
+/* reuse GL_FIRST_VERTEX_CONVENTION */
+/* reuse GL_LAST_VERTEX_CONVENTION */
+/* reuse GL_PROVOKING_VERTEX */
+#endif
+
+#ifndef GL_ARB_cl_event
+#define GL_SYNC_CL_EVENT_ARB              0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB     0x8241
+#endif
+
+#ifndef GL_ARB_debug_output
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB   0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB    0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB  0x8245
+#define GL_DEBUG_SOURCE_API_ARB           0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB   0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_ARB   0x824A
+#define GL_DEBUG_SOURCE_OTHER_ARB         0x824B
+#define GL_DEBUG_TYPE_ERROR_ARB           0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_ARB     0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB     0x8250
+#define GL_DEBUG_TYPE_OTHER_ARB           0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB   0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB  0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_ARB      0x9145
+#define GL_DEBUG_SEVERITY_HIGH_ARB        0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB      0x9147
+#define GL_DEBUG_SEVERITY_LOW_ARB         0x9148
+#endif
+
+#ifndef GL_ARB_robustness
+/* reuse GL_NO_ERROR */
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GL_LOSE_CONTEXT_ON_RESET_ARB      0x8252
+#define GL_GUILTY_CONTEXT_RESET_ARB       0x8253
+#define GL_INNOCENT_CONTEXT_RESET_ARB     0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_ARB      0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GL_NO_RESET_NOTIFICATION_ARB      0x8261
+#endif
+
+#ifndef GL_ARB_shader_stencil_export
+#endif
+
+#ifndef GL_ARB_base_instance
+#endif
+
+#ifndef GL_ARB_shading_language_420pack
+#endif
+
+#ifndef GL_ARB_transform_feedback_instanced
+#endif
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH  0x9127
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH  0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE   0x912A
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH    0x912B
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT   0x912C
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH    0x912D
+#define GL_PACK_COMPRESSED_BLOCK_SIZE     0x912E
+#endif
+
+#ifndef GL_ARB_conservative_depth
+#endif
+
+#ifndef GL_ARB_internalformat_query
+#define GL_NUM_SAMPLE_COUNTS              0x9380
+#endif
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_MIN_MAP_BUFFER_ALIGNMENT       0x90BC
+#endif
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ATOMIC_COUNTER_BUFFER          0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING  0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START    0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE     0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS     0x92D2
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS   0x92D5
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS   0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS   0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS  0x92D9
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER    0x92DB
+#endif
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT      0x00000002
+#define GL_UNIFORM_BARRIER_BIT            0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT      0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT            0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT       0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT     0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT      0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT        0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT     0x00001000
+#define GL_ALL_BARRIER_BITS               0xFFFFFFFF
+#define GL_MAX_IMAGE_UNITS                0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39
+#define GL_IMAGE_BINDING_NAME             0x8F3A
+#define GL_IMAGE_BINDING_LEVEL            0x8F3B
+#define GL_IMAGE_BINDING_LAYERED          0x8F3C
+#define GL_IMAGE_BINDING_LAYER            0x8F3D
+#define GL_IMAGE_BINDING_ACCESS           0x8F3E
+#define GL_IMAGE_1D                       0x904C
+#define GL_IMAGE_2D                       0x904D
+#define GL_IMAGE_3D                       0x904E
+#define GL_IMAGE_2D_RECT                  0x904F
+#define GL_IMAGE_CUBE                     0x9050
+#define GL_IMAGE_BUFFER                   0x9051
+#define GL_IMAGE_1D_ARRAY                 0x9052
+#define GL_IMAGE_2D_ARRAY                 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY           0x9054
+#define GL_IMAGE_2D_MULTISAMPLE           0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY     0x9056
+#define GL_INT_IMAGE_1D                   0x9057
+#define GL_INT_IMAGE_2D                   0x9058
+#define GL_INT_IMAGE_3D                   0x9059
+#define GL_INT_IMAGE_2D_RECT              0x905A
+#define GL_INT_IMAGE_CUBE                 0x905B
+#define GL_INT_IMAGE_BUFFER               0x905C
+#define GL_INT_IMAGE_1D_ARRAY             0x905D
+#define GL_INT_IMAGE_2D_ARRAY             0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY       0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE       0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D          0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D          0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D          0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT     0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE        0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER      0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY    0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY    0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C
+#define GL_MAX_IMAGE_SAMPLES              0x906D
+#define GL_IMAGE_BINDING_FORMAT           0x906E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS      0x90CA
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS    0x90CD
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS    0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS    0x90CF
+#endif
+
+#ifndef GL_ARB_shading_language_packing
+#endif
+
+#ifndef GL_ARB_texture_storage
+#define GL_TEXTURE_IMMUTABLE_FORMAT       0x912F
+#endif
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR   0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR   0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR   0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR   0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR   0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR   0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR   0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR   0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR  0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR  0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR  0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
+#endif
+
+#ifndef GL_KHR_debug
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS       0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION        0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM      0x8245
+#define GL_DEBUG_SOURCE_API               0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM     0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER   0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY       0x8249
+#define GL_DEBUG_SOURCE_APPLICATION       0x824A
+#define GL_DEBUG_SOURCE_OTHER             0x824B
+#define GL_DEBUG_TYPE_ERROR               0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR  0x824E
+#define GL_DEBUG_TYPE_PORTABILITY         0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE         0x8250
+#define GL_DEBUG_TYPE_OTHER               0x8251
+#define GL_DEBUG_TYPE_MARKER              0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP          0x8269
+#define GL_DEBUG_TYPE_POP_GROUP           0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION    0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH    0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH        0x826D
+#define GL_BUFFER                         0x82E0
+#define GL_SHADER                         0x82E1
+#define GL_PROGRAM                        0x82E2
+#define GL_QUERY                          0x82E3
+#define GL_PROGRAM_PIPELINE               0x82E4
+#define GL_SAMPLER                        0x82E6
+#define GL_DISPLAY_LIST                   0x82E7
+/* DISPLAY_LIST used in compatibility profile only */
+#define GL_MAX_LABEL_LENGTH               0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH       0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES      0x9144
+#define GL_DEBUG_LOGGED_MESSAGES          0x9145
+#define GL_DEBUG_SEVERITY_HIGH            0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM          0x9147
+#define GL_DEBUG_SEVERITY_LOW             0x9148
+#define GL_DEBUG_OUTPUT                   0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT         0x00000002
+/* reuse GL_STACK_UNDERFLOW */
+/* reuse GL_STACK_OVERFLOW */
+#endif
+
+#ifndef GL_ARB_arrays_of_arrays
+#endif
+
+#ifndef GL_ARB_clear_buffer_object
+#endif
+
+#ifndef GL_ARB_compute_shader
+#define GL_COMPUTE_SHADER                 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS     0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS     0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS    0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS  0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT   0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE    0x91BF
+#define GL_COMPUTE_LOCAL_WORK_SIZE        0x8267
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED
+#define GL_DISPATCH_INDIRECT_BUFFER       0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT             0x00000020
+#endif
+
+#ifndef GL_ARB_copy_image
+#endif
+
+#ifndef GL_ARB_texture_view
+#define GL_TEXTURE_VIEW_MIN_LEVEL         0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS        0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER         0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS        0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS       0x82DF
+#endif
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_VERTEX_ATTRIB_BINDING          0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET  0x82D5
+#define GL_VERTEX_BINDING_DIVISOR         0x82D6
+#define GL_VERTEX_BINDING_OFFSET          0x82D7
+#define GL_VERTEX_BINDING_STRIDE          0x82D8
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS     0x82DA
+#endif
+
+#ifndef GL_ARB_robustness_isolation
+#endif
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_COMPRESSED_RGB8_ETC2           0x9274
+#define GL_COMPRESSED_SRGB8_ETC2          0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC      0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_COMPRESSED_R11_EAC             0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC      0x9271
+#define GL_COMPRESSED_RG11_EAC            0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC     0x9273
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX  0x8D69
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_MAX_ELEMENT_INDEX              0x8D6B
+#endif
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_MAX_UNIFORM_LOCATIONS          0x826E
+#endif
+
+#ifndef GL_ARB_fragment_layer_viewport
+#endif
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH      0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT     0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS     0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES    0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH          0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT         0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS         0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES        0x9318
+#endif
+
+#ifndef GL_ARB_internalformat_query2
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */
+/* reuse GL_NUM_SAMPLE_COUNTS */
+/* reuse GL_RENDERBUFFER */
+/* reuse GL_SAMPLES */
+/* reuse GL_TEXTURE_1D */
+/* reuse GL_TEXTURE_1D_ARRAY */
+/* reuse GL_TEXTURE_2D */
+/* reuse GL_TEXTURE_2D_ARRAY */
+/* reuse GL_TEXTURE_3D */
+/* reuse GL_TEXTURE_CUBE_MAP */
+/* reuse GL_TEXTURE_CUBE_MAP_ARRAY */
+/* reuse GL_TEXTURE_RECTANGLE */
+/* reuse GL_TEXTURE_BUFFER */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_TEXTURE_COMPRESSED */
+#define GL_INTERNALFORMAT_SUPPORTED       0x826F
+#define GL_INTERNALFORMAT_PREFERRED       0x8270
+#define GL_INTERNALFORMAT_RED_SIZE        0x8271
+#define GL_INTERNALFORMAT_GREEN_SIZE      0x8272
+#define GL_INTERNALFORMAT_BLUE_SIZE       0x8273
+#define GL_INTERNALFORMAT_ALPHA_SIZE      0x8274
+#define GL_INTERNALFORMAT_DEPTH_SIZE      0x8275
+#define GL_INTERNALFORMAT_STENCIL_SIZE    0x8276
+#define GL_INTERNALFORMAT_SHARED_SIZE     0x8277
+#define GL_INTERNALFORMAT_RED_TYPE        0x8278
+#define GL_INTERNALFORMAT_GREEN_TYPE      0x8279
+#define GL_INTERNALFORMAT_BLUE_TYPE       0x827A
+#define GL_INTERNALFORMAT_ALPHA_TYPE      0x827B
+#define GL_INTERNALFORMAT_DEPTH_TYPE      0x827C
+#define GL_INTERNALFORMAT_STENCIL_TYPE    0x827D
+#define GL_MAX_WIDTH                      0x827E
+#define GL_MAX_HEIGHT                     0x827F
+#define GL_MAX_DEPTH                      0x8280
+#define GL_MAX_LAYERS                     0x8281
+#define GL_MAX_COMBINED_DIMENSIONS        0x8282
+#define GL_COLOR_COMPONENTS               0x8283
+#define GL_DEPTH_COMPONENTS               0x8284
+#define GL_STENCIL_COMPONENTS             0x8285
+#define GL_COLOR_RENDERABLE               0x8286
+#define GL_DEPTH_RENDERABLE               0x8287
+#define GL_STENCIL_RENDERABLE             0x8288
+#define GL_FRAMEBUFFER_RENDERABLE         0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A
+#define GL_FRAMEBUFFER_BLEND              0x828B
+#define GL_READ_PIXELS                    0x828C
+#define GL_READ_PIXELS_FORMAT             0x828D
+#define GL_READ_PIXELS_TYPE               0x828E
+#define GL_TEXTURE_IMAGE_FORMAT           0x828F
+#define GL_TEXTURE_IMAGE_TYPE             0x8290
+#define GL_GET_TEXTURE_IMAGE_FORMAT       0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE         0x8292
+#define GL_MIPMAP                         0x8293
+#define GL_MANUAL_GENERATE_MIPMAP         0x8294
+#define GL_AUTO_GENERATE_MIPMAP           0x8295
+#define GL_COLOR_ENCODING                 0x8296
+#define GL_SRGB_READ                      0x8297
+#define GL_SRGB_WRITE                     0x8298
+#define GL_SRGB_DECODE_ARB                0x8299
+#define GL_FILTER                         0x829A
+#define GL_VERTEX_TEXTURE                 0x829B
+#define GL_TESS_CONTROL_TEXTURE           0x829C
+#define GL_TESS_EVALUATION_TEXTURE        0x829D
+#define GL_GEOMETRY_TEXTURE               0x829E
+#define GL_FRAGMENT_TEXTURE               0x829F
+#define GL_COMPUTE_TEXTURE                0x82A0
+#define GL_TEXTURE_SHADOW                 0x82A1
+#define GL_TEXTURE_GATHER                 0x82A2
+#define GL_TEXTURE_GATHER_SHADOW          0x82A3
+#define GL_SHADER_IMAGE_LOAD              0x82A4
+#define GL_SHADER_IMAGE_STORE             0x82A5
+#define GL_SHADER_IMAGE_ATOMIC            0x82A6
+#define GL_IMAGE_TEXEL_SIZE               0x82A7
+#define GL_IMAGE_COMPATIBILITY_CLASS      0x82A8
+#define GL_IMAGE_PIXEL_FORMAT             0x82A9
+#define GL_IMAGE_PIXEL_TYPE               0x82AA
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE  0x82B3
+#define GL_CLEAR_BUFFER                   0x82B4
+#define GL_TEXTURE_VIEW                   0x82B5
+#define GL_VIEW_COMPATIBILITY_CLASS       0x82B6
+#define GL_FULL_SUPPORT                   0x82B7
+#define GL_CAVEAT_SUPPORT                 0x82B8
+#define GL_IMAGE_CLASS_4_X_32             0x82B9
+#define GL_IMAGE_CLASS_2_X_32             0x82BA
+#define GL_IMAGE_CLASS_1_X_32             0x82BB
+#define GL_IMAGE_CLASS_4_X_16             0x82BC
+#define GL_IMAGE_CLASS_2_X_16             0x82BD
+#define GL_IMAGE_CLASS_1_X_16             0x82BE
+#define GL_IMAGE_CLASS_4_X_8              0x82BF
+#define GL_IMAGE_CLASS_2_X_8              0x82C0
+#define GL_IMAGE_CLASS_1_X_8              0x82C1
+#define GL_IMAGE_CLASS_11_11_10           0x82C2
+#define GL_IMAGE_CLASS_10_10_10_2         0x82C3
+#define GL_VIEW_CLASS_128_BITS            0x82C4
+#define GL_VIEW_CLASS_96_BITS             0x82C5
+#define GL_VIEW_CLASS_64_BITS             0x82C6
+#define GL_VIEW_CLASS_48_BITS             0x82C7
+#define GL_VIEW_CLASS_32_BITS             0x82C8
+#define GL_VIEW_CLASS_24_BITS             0x82C9
+#define GL_VIEW_CLASS_16_BITS             0x82CA
+#define GL_VIEW_CLASS_8_BITS              0x82CB
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB       0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA      0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA      0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA      0x82CF
+#define GL_VIEW_CLASS_RGTC1_RED           0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG            0x82D1
+#define GL_VIEW_CLASS_BPTC_UNORM          0x82D2
+#define GL_VIEW_CLASS_BPTC_FLOAT          0x82D3
+#endif
+
+#ifndef GL_ARB_invalidate_subdata
+#endif
+
+#ifndef GL_ARB_multi_draw_indirect
+#endif
+
+#ifndef GL_ARB_program_interface_query
+#define GL_UNIFORM                        0x92E1
+#define GL_UNIFORM_BLOCK                  0x92E2
+#define GL_PROGRAM_INPUT                  0x92E3
+#define GL_PROGRAM_OUTPUT                 0x92E4
+#define GL_BUFFER_VARIABLE                0x92E5
+#define GL_SHADER_STORAGE_BLOCK           0x92E6
+/* reuse GL_ATOMIC_COUNTER_BUFFER */
+#define GL_VERTEX_SUBROUTINE              0x92E8
+#define GL_TESS_CONTROL_SUBROUTINE        0x92E9
+#define GL_TESS_EVALUATION_SUBROUTINE     0x92EA
+#define GL_GEOMETRY_SUBROUTINE            0x92EB
+#define GL_FRAGMENT_SUBROUTINE            0x92EC
+#define GL_COMPUTE_SUBROUTINE             0x92ED
+#define GL_VERTEX_SUBROUTINE_UNIFORM      0x92EE
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM    0x92F1
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM    0x92F2
+#define GL_COMPUTE_SUBROUTINE_UNIFORM     0x92F3
+#define GL_TRANSFORM_FEEDBACK_VARYING     0x92F4
+#define GL_ACTIVE_RESOURCES               0x92F5
+#define GL_MAX_NAME_LENGTH                0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES       0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8
+#define GL_NAME_LENGTH                    0x92F9
+#define GL_TYPE                           0x92FA
+#define GL_ARRAY_SIZE                     0x92FB
+#define GL_OFFSET                         0x92FC
+#define GL_BLOCK_INDEX                    0x92FD
+#define GL_ARRAY_STRIDE                   0x92FE
+#define GL_MATRIX_STRIDE                  0x92FF
+#define GL_IS_ROW_MAJOR                   0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX    0x9301
+#define GL_BUFFER_BINDING                 0x9302
+#define GL_BUFFER_DATA_SIZE               0x9303
+#define GL_NUM_ACTIVE_VARIABLES           0x9304
+#define GL_ACTIVE_VARIABLES               0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER    0x9306
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_REFERENCED_BY_GEOMETRY_SHADER  0x9309
+#define GL_REFERENCED_BY_FRAGMENT_SHADER  0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER   0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE           0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE         0x930D
+#define GL_LOCATION                       0x930E
+#define GL_LOCATION_INDEX                 0x930F
+#define GL_IS_PER_PATCH                   0x92E7
+/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */
+/* reuse GL_COMPATIBLE_SUBROUTINES */
+#endif
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#endif
+
+#ifndef GL_ARB_shader_image_size
+#endif
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_SHADER_STORAGE_BUFFER          0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING  0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START    0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE     0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE  0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT     0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39
+/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */
+#endif
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_DEPTH_STENCIL_TEXTURE_MODE     0x90EA
+#endif
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_TEXTURE_BUFFER_OFFSET          0x919D
+#define GL_TEXTURE_BUFFER_SIZE            0x919E
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#endif
+
+#ifndef GL_ARB_texture_query_levels
+#endif
+
+#ifndef GL_ARB_texture_storage_multisample
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_ABGR_EXT                       0x8000
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_CONSTANT_COLOR_EXT             0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT   0x8002
+#define GL_CONSTANT_ALPHA_EXT             0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT   0x8004
+#define GL_BLEND_COLOR_EXT                0x8005
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_POLYGON_OFFSET_EXT             0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT      0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT        0x8039
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_ALPHA4_EXT                     0x803B
+#define GL_ALPHA8_EXT                     0x803C
+#define GL_ALPHA12_EXT                    0x803D
+#define GL_ALPHA16_EXT                    0x803E
+#define GL_LUMINANCE4_EXT                 0x803F
+#define GL_LUMINANCE8_EXT                 0x8040
+#define GL_LUMINANCE12_EXT                0x8041
+#define GL_LUMINANCE16_EXT                0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT          0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT          0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT          0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT         0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT        0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT        0x8048
+#define GL_INTENSITY_EXT                  0x8049
+#define GL_INTENSITY4_EXT                 0x804A
+#define GL_INTENSITY8_EXT                 0x804B
+#define GL_INTENSITY12_EXT                0x804C
+#define GL_INTENSITY16_EXT                0x804D
+#define GL_RGB2_EXT                       0x804E
+#define GL_RGB4_EXT                       0x804F
+#define GL_RGB5_EXT                       0x8050
+#define GL_RGB8_EXT                       0x8051
+#define GL_RGB10_EXT                      0x8052
+#define GL_RGB12_EXT                      0x8053
+#define GL_RGB16_EXT                      0x8054
+#define GL_RGBA2_EXT                      0x8055
+#define GL_RGBA4_EXT                      0x8056
+#define GL_RGB5_A1_EXT                    0x8057
+#define GL_RGBA8_EXT                      0x8058
+#define GL_RGB10_A2_EXT                   0x8059
+#define GL_RGBA12_EXT                     0x805A
+#define GL_RGBA16_EXT                     0x805B
+#define GL_TEXTURE_RED_SIZE_EXT           0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT         0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT          0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT         0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT     0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT     0x8061
+#define GL_REPLACE_EXT                    0x8062
+#define GL_PROXY_TEXTURE_1D_EXT           0x8063
+#define GL_PROXY_TEXTURE_2D_EXT           0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT          0x8065
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_PACK_SKIP_IMAGES_EXT           0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E
+#define GL_TEXTURE_3D_EXT                 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT           0x8070
+#define GL_TEXTURE_DEPTH_EXT              0x8071
+#define GL_TEXTURE_WRAP_R_EXT             0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_FILTER4_SGIS                   0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS      0x8147
+#endif
+
+#ifndef GL_EXT_subtexture
+#endif
+
+#ifndef GL_EXT_copy_texture
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_HISTOGRAM_EXT                  0x8024
+#define GL_PROXY_HISTOGRAM_EXT            0x8025
+#define GL_HISTOGRAM_WIDTH_EXT            0x8026
+#define GL_HISTOGRAM_FORMAT_EXT           0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT         0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT       0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT        0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT       0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT   0x802C
+#define GL_HISTOGRAM_SINK_EXT             0x802D
+#define GL_MINMAX_EXT                     0x802E
+#define GL_MINMAX_FORMAT_EXT              0x802F
+#define GL_MINMAX_SINK_EXT                0x8030
+#define GL_TABLE_TOO_LARGE_EXT            0x8031
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_CONVOLUTION_1D_EXT             0x8010
+#define GL_CONVOLUTION_2D_EXT             0x8011
+#define GL_SEPARABLE_2D_EXT               0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT    0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT   0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT    0x8015
+#define GL_REDUCE_EXT                     0x8016
+#define GL_CONVOLUTION_FORMAT_EXT         0x8017
+#define GL_CONVOLUTION_WIDTH_EXT          0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT         0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT      0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT     0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT  0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+#endif
+
+#ifndef GL_SGI_color_matrix
+#define GL_COLOR_MATRIX_SGI               0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI   0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_COLOR_TABLE_SGI                0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI          0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI          0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI           0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI         0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI          0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI       0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI     0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI      0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI     0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_PIXEL_TEXTURE_SGIS             0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS         0x8356
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_PIXEL_TEX_GEN_SGIX             0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX        0x832B
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_PACK_SKIP_VOLUMES_SGIS         0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS          0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS       0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS        0x8133
+#define GL_TEXTURE_4D_SGIS                0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS          0x8135
+#define GL_TEXTURE_4DSIZE_SGIS            0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS            0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS       0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS        0x814F
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_TEXTURE_COLOR_TABLE_SGI        0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI  0x80BD
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_CMYK_EXT                       0x800C
+#define GL_CMYKA_EXT                      0x800D
+#define GL_PACK_CMYK_HINT_EXT             0x800E
+#define GL_UNPACK_CMYK_HINT_EXT           0x800F
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_TEXTURE_PRIORITY_EXT           0x8066
+#define GL_TEXTURE_RESIDENT_EXT           0x8067
+#define GL_TEXTURE_1D_BINDING_EXT         0x8068
+#define GL_TEXTURE_2D_BINDING_EXT         0x8069
+#define GL_TEXTURE_3D_BINDING_EXT         0x806A
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_DETAIL_TEXTURE_2D_SGIS         0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS             0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS       0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS       0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS      0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS       0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_LINEAR_SHARPEN_SGIS            0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS      0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS      0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_UNSIGNED_BYTE_3_3_2_EXT        0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT     0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT     0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT       0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT    0x8036
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_TEXTURE_MIN_LOD_SGIS           0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS           0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS        0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS         0x813D
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_MULTISAMPLE_SGIS               0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS      0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS       0x809F
+#define GL_SAMPLE_MASK_SGIS               0x80A0
+#define GL_1PASS_SGIS                     0x80A1
+#define GL_2PASS_0_SGIS                   0x80A2
+#define GL_2PASS_1_SGIS                   0x80A3
+#define GL_4PASS_0_SGIS                   0x80A4
+#define GL_4PASS_1_SGIS                   0x80A5
+#define GL_4PASS_2_SGIS                   0x80A6
+#define GL_4PASS_3_SGIS                   0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS            0x80A8
+#define GL_SAMPLES_SGIS                   0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS         0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS        0x80AB
+#define GL_SAMPLE_PATTERN_SGIS            0x80AC
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_RESCALE_NORMAL_EXT             0x803A
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_VERTEX_ARRAY_EXT               0x8074
+#define GL_NORMAL_ARRAY_EXT               0x8075
+#define GL_COLOR_ARRAY_EXT                0x8076
+#define GL_INDEX_ARRAY_EXT                0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT        0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT            0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT          0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT          0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT        0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT         0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT          0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT        0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT         0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT           0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT           0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT         0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT          0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT           0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT         0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT          0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT      0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT       0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT       0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT        0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT        0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT    0x8093
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_GENERATE_MIPMAP_SGIS           0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS      0x8192
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX     0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX    0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX     0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX    0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX     0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX         0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX   0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX    0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX    0x844F
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_TEXTURE_COMPARE_SGIX           0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX  0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX          0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX          0x819D
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_CLAMP_TO_EDGE_SGIS             0x812F
+#endif
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_CLAMP_TO_BORDER_SGIS           0x812D
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_FUNC_ADD_EXT                   0x8006
+#define GL_MIN_EXT                        0x8007
+#define GL_MAX_EXT                        0x8008
+#define GL_BLEND_EQUATION_EXT             0x8009
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_FUNC_SUBTRACT_EXT              0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT      0x800B
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_INTERLACE_SGIX                 0x8094
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX          0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX         0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX     0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX    0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX     0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX     0x8145
+#endif
+
+#ifndef GL_SGIS_texture_select
+#define GL_DUAL_ALPHA4_SGIS               0x8110
+#define GL_DUAL_ALPHA8_SGIS               0x8111
+#define GL_DUAL_ALPHA12_SGIS              0x8112
+#define GL_DUAL_ALPHA16_SGIS              0x8113
+#define GL_DUAL_LUMINANCE4_SGIS           0x8114
+#define GL_DUAL_LUMINANCE8_SGIS           0x8115
+#define GL_DUAL_LUMINANCE12_SGIS          0x8116
+#define GL_DUAL_LUMINANCE16_SGIS          0x8117
+#define GL_DUAL_INTENSITY4_SGIS           0x8118
+#define GL_DUAL_INTENSITY8_SGIS           0x8119
+#define GL_DUAL_INTENSITY12_SGIS          0x811A
+#define GL_DUAL_INTENSITY16_SGIS          0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS     0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS     0x811D
+#define GL_QUAD_ALPHA4_SGIS               0x811E
+#define GL_QUAD_ALPHA8_SGIS               0x811F
+#define GL_QUAD_LUMINANCE4_SGIS           0x8120
+#define GL_QUAD_LUMINANCE8_SGIS           0x8121
+#define GL_QUAD_INTENSITY4_SGIS           0x8122
+#define GL_QUAD_INTENSITY8_SGIS           0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS       0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS       0x8125
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SPRITE_SGIX                    0x8148
+#define GL_SPRITE_MODE_SGIX               0x8149
+#define GL_SPRITE_AXIS_SGIX               0x814A
+#define GL_SPRITE_TRANSLATION_SGIX        0x814B
+#define GL_SPRITE_AXIAL_SGIX              0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX     0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX        0x814E
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_POINT_SIZE_MIN_EXT             0x8126
+#define GL_POINT_SIZE_MAX_EXT             0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128
+#define GL_DISTANCE_ATTENUATION_EXT       0x8129
+#endif
+
+#ifndef GL_SGIS_point_parameters
+#define GL_POINT_SIZE_MIN_SGIS            0x8126
+#define GL_POINT_SIZE_MAX_SGIS            0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_DISTANCE_ATTENUATION_SGIS      0x8129
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX   0x8181
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX  0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_FRAMEZOOM_SGIX                 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX          0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX      0x818D
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX   0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX  0x00000002
+#define GL_GEOMETRY_DEFORMATION_SGIX      0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX       0x8195
+#define GL_DEFORMATIONS_MASK_SGIX         0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX     0x8197
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_REFERENCE_PLANE_SGIX           0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX  0x817E
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_DEPTH_COMPONENT16_SGIX         0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX         0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX         0x81A7
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_FOG_FUNC_SGIS                  0x812A
+#define GL_FOG_FUNC_POINTS_SGIS           0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS       0x812C
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_FOG_OFFSET_SGIX                0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX          0x8199
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_IMAGE_SCALE_X_HP               0x8155
+#define GL_IMAGE_SCALE_Y_HP               0x8156
+#define GL_IMAGE_TRANSLATE_X_HP           0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP           0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP          0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP       0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP       0x815B
+#define GL_IMAGE_MAG_FILTER_HP            0x815C
+#define GL_IMAGE_MIN_FILTER_HP            0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP          0x815E
+#define GL_CUBIC_HP                       0x815F
+#define GL_AVERAGE_HP                     0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP          0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_IGNORE_BORDER_HP               0x8150
+#define GL_CONSTANT_BORDER_HP             0x8151
+#define GL_REPLICATE_BORDER_HP            0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP    0x8154
+#endif
+
+#ifndef GL_INGR_palette_buffer
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_TEXTURE_ENV_BIAS_SGIX          0x80BE
+#endif
+
+#ifndef GL_EXT_color_subtable
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_VERTEX_DATA_HINT_PGI           0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI     0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI         0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI            0x1A22D
+#define GL_VERTEX23_BIT_PGI               0x00000004
+#define GL_VERTEX4_BIT_PGI                0x00000008
+#define GL_COLOR3_BIT_PGI                 0x00010000
+#define GL_COLOR4_BIT_PGI                 0x00020000
+#define GL_EDGEFLAG_BIT_PGI               0x00040000
+#define GL_INDEX_BIT_PGI                  0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI            0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI            0x00400000
+#define GL_MAT_EMISSION_BIT_PGI           0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI      0x01000000
+#define GL_MAT_SHININESS_BIT_PGI          0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI           0x04000000
+#define GL_NORMAL_BIT_PGI                 0x08000000
+#define GL_TEXCOORD1_BIT_PGI              0x10000000
+#define GL_TEXCOORD2_BIT_PGI              0x20000000
+#define GL_TEXCOORD3_BIT_PGI              0x40000000
+#define GL_TEXCOORD4_BIT_PGI              0x80000000
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI   0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI       0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI        0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI     0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI   0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI           0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI           0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI        0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI        0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI        0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI        0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI      0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI       0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI        0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI          0x1A219
+#define GL_CLIP_NEAR_HINT_PGI             0x1A220
+#define GL_CLIP_FAR_HINT_PGI              0x1A221
+#define GL_WIDE_LINE_HINT_PGI             0x1A222
+#define GL_BACK_NORMALS_HINT_PGI          0x1A223
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_COLOR_INDEX1_EXT               0x80E2
+#define GL_COLOR_INDEX2_EXT               0x80E3
+#define GL_COLOR_INDEX4_EXT               0x80E4
+#define GL_COLOR_INDEX8_EXT               0x80E5
+#define GL_COLOR_INDEX12_EXT              0x80E6
+#define GL_COLOR_INDEX16_EXT              0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT         0x80ED
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT  0x80F0
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_LIST_PRIORITY_SGIX             0x8182
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_IR_INSTRUMENT1_SGIX            0x817F
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX     0x8183
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_TEXTURE_LOD_BIAS_S_SGIX        0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX        0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX        0x8190
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SHADOW_AMBIENT_SGIX            0x80BF
+#endif
+
+#ifndef GL_EXT_index_texture
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_INDEX_MATERIAL_EXT             0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT   0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT        0x81BA
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_INDEX_TEST_EXT                 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT            0x81B6
+#define GL_INDEX_TEST_REF_EXT             0x81B7
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_IUI_V2F_EXT                    0x81AD
+#define GL_IUI_V3F_EXT                    0x81AE
+#define GL_IUI_N3F_V2F_EXT                0x81AF
+#define GL_IUI_N3F_V3F_EXT                0x81B0
+#define GL_T2F_IUI_V2F_EXT                0x81B1
+#define GL_T2F_IUI_V3F_EXT                0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT            0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT            0x81B4
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_CULL_VERTEX_EXT                0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT   0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_YCRCB_422_SGIX                 0x81BB
+#define GL_YCRCB_444_SGIX                 0x81BC
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_FRAGMENT_LIGHTING_SGIX         0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX   0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX       0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX         0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX     0x8406
+#define GL_LIGHT_ENV_MODE_SGIX            0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX           0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX           0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX           0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX           0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX           0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX           0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX           0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX           0x8413
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_TEXTURE_LIGHTING_MODE_HP       0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP       0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP        0x8169
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_MAX_ELEMENTS_VERTICES_EXT      0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT       0x80E9
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_PHONG_WIN                      0x80EA
+#define GL_PHONG_HINT_WIN                 0x80EB
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_FOG_SPECULAR_TEXTURE_WIN       0x80EC
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_FRAGMENT_MATERIAL_EXT          0x8349
+#define GL_FRAGMENT_NORMAL_EXT            0x834A
+#define GL_FRAGMENT_COLOR_EXT             0x834C
+#define GL_ATTENUATION_EXT                0x834D
+#define GL_SHADOW_ATTENUATION_EXT         0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT   0x834F
+#define GL_TEXTURE_LIGHT_EXT              0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT      0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+/* reuse GL_FRAGMENT_DEPTH_EXT */
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_ALPHA_MIN_SGIX                 0x8320
+#define GL_ALPHA_MAX_SGIX                 0x8321
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_BGR_EXT                        0x80E0
+#define GL_BGRA_EXT                       0x80E1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_ASYNC_MARKER_SGIX              0x8329
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_ASYNC_TEX_IMAGE_SGIX           0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX         0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX         0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX       0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX     0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX     0x8361
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_ASYNC_HISTOGRAM_SGIX           0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX       0x832D
+#endif
+
+#ifndef GL_INTEL_texture_scissor
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_PARALLEL_ARRAYS_INTEL          0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_OCCLUSION_TEST_HP              0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP       0x8166
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_PIXEL_TRANSFORM_2D_EXT         0x8330
+#define GL_PIXEL_MAG_FILTER_EXT           0x8331
+#define GL_PIXEL_MIN_FILTER_EXT           0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT         0x8333
+#define GL_CUBIC_EXT                      0x8334
+#define GL_AVERAGE_EXT                    0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT  0x8338
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_SHARED_TEXTURE_PALETTE_EXT     0x81FB
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT  0x81F8
+#define GL_SINGLE_COLOR_EXT               0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT    0x81FA
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_COLOR_SUM_EXT                  0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_PERTURB_EXT                    0x85AE
+#define GL_TEXTURE_NORMAL_EXT             0x85AF
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_FOG_COORDINATE_SOURCE_EXT      0x8450
+#define GL_FOG_COORDINATE_EXT             0x8451
+#define GL_FRAGMENT_DEPTH_EXT             0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT     0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT  0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT       0x8457
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_SCREEN_COORDINATES_REND        0x8490
+#define GL_INVERTED_SCREEN_W_REND         0x8491
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_TANGENT_ARRAY_EXT              0x8439
+#define GL_BINORMAL_ARRAY_EXT             0x843A
+#define GL_CURRENT_TANGENT_EXT            0x843B
+#define GL_CURRENT_BINORMAL_EXT           0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT         0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT       0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT        0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT      0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT      0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT     0x8443
+#define GL_MAP1_TANGENT_EXT               0x8444
+#define GL_MAP2_TANGENT_EXT               0x8445
+#define GL_MAP1_BINORMAL_EXT              0x8446
+#define GL_MAP2_BINORMAL_EXT              0x8447
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_COMBINE_EXT                    0x8570
+#define GL_COMBINE_RGB_EXT                0x8571
+#define GL_COMBINE_ALPHA_EXT              0x8572
+#define GL_RGB_SCALE_EXT                  0x8573
+#define GL_ADD_SIGNED_EXT                 0x8574
+#define GL_INTERPOLATE_EXT                0x8575
+#define GL_CONSTANT_EXT                   0x8576
+#define GL_PRIMARY_COLOR_EXT              0x8577
+#define GL_PREVIOUS_EXT                   0x8578
+#define GL_SOURCE0_RGB_EXT                0x8580
+#define GL_SOURCE1_RGB_EXT                0x8581
+#define GL_SOURCE2_RGB_EXT                0x8582
+#define GL_SOURCE0_ALPHA_EXT              0x8588
+#define GL_SOURCE1_ALPHA_EXT              0x8589
+#define GL_SOURCE2_ALPHA_EXT              0x858A
+#define GL_OPERAND0_RGB_EXT               0x8590
+#define GL_OPERAND1_RGB_EXT               0x8591
+#define GL_OPERAND2_RGB_EXT               0x8592
+#define GL_OPERAND0_ALPHA_EXT             0x8598
+#define GL_OPERAND1_ALPHA_EXT             0x8599
+#define GL_OPERAND2_ALPHA_EXT             0x859A
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_TRANSFORM_HINT_APPLE           0x85B1
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_UNPACK_CONSTANT_DATA_SUNX      0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX     0x81D6
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_GLOBAL_ALPHA_SUN               0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN        0x81DA
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_RESTART_SUN                    0x0001
+#define GL_REPLACE_MIDDLE_SUN             0x0002
+#define GL_REPLACE_OLDEST_SUN             0x0003
+#define GL_TRIANGLE_LIST_SUN              0x81D7
+#define GL_REPLACEMENT_CODE_SUN           0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN     0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN                   0x85C4
+#define GL_R1UI_C4UB_V3F_SUN              0x85C5
+#define GL_R1UI_C3F_V3F_SUN               0x85C6
+#define GL_R1UI_N3F_V3F_SUN               0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN           0x85C8
+#define GL_R1UI_T2F_V3F_SUN               0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN           0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN       0x85CB
+#endif
+
+#ifndef GL_SUN_vertex
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_BLEND_DST_RGB_EXT              0x80C8
+#define GL_BLEND_SRC_RGB_EXT              0x80C9
+#define GL_BLEND_DST_ALPHA_EXT            0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT            0x80CB
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_RED_MIN_CLAMP_INGR             0x8560
+#define GL_GREEN_MIN_CLAMP_INGR           0x8561
+#define GL_BLUE_MIN_CLAMP_INGR            0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR           0x8563
+#define GL_RED_MAX_CLAMP_INGR             0x8564
+#define GL_GREEN_MAX_CLAMP_INGR           0x8565
+#define GL_BLUE_MAX_CLAMP_INGR            0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR           0x8567
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INTERLACE_READ_INGR            0x8568
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_INCR_WRAP_EXT                  0x8507
+#define GL_DECR_WRAP_EXT                  0x8508
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_422_EXT                        0x80CC
+#define GL_422_REV_EXT                    0x80CD
+#define GL_422_AVERAGE_EXT                0x80CE
+#define GL_422_REV_AVERAGE_EXT            0x80CF
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NORMAL_MAP_NV                  0x8511
+#define GL_REFLECTION_MAP_NV              0x8512
+#endif
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_NORMAL_MAP_EXT                 0x8511
+#define GL_REFLECTION_MAP_EXT             0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT  0x851C
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_WRAP_BORDER_SUN                0x81D4
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT       0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT     0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT           0x8501
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_MODELVIEW0_STACK_DEPTH_EXT     0x0BA3
+#define GL_MODELVIEW1_STACK_DEPTH_EXT     0x8502
+#define GL_MODELVIEW0_MATRIX_EXT          0x0BA6
+#define GL_MODELVIEW1_MATRIX_EXT          0x8506
+#define GL_VERTEX_WEIGHTING_EXT           0x8509
+#define GL_MODELVIEW0_EXT                 0x1700
+#define GL_MODELVIEW1_EXT                 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT      0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT        0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT   0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT   0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_MAX_SHININESS_NV               0x8504
+#define GL_MAX_SPOT_EXPONENT_NV           0x8505
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_VERTEX_ARRAY_RANGE_NV          0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV    0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV  0x8521
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_REGISTER_COMBINERS_NV          0x8522
+#define GL_VARIABLE_A_NV                  0x8523
+#define GL_VARIABLE_B_NV                  0x8524
+#define GL_VARIABLE_C_NV                  0x8525
+#define GL_VARIABLE_D_NV                  0x8526
+#define GL_VARIABLE_E_NV                  0x8527
+#define GL_VARIABLE_F_NV                  0x8528
+#define GL_VARIABLE_G_NV                  0x8529
+#define GL_CONSTANT_COLOR0_NV             0x852A
+#define GL_CONSTANT_COLOR1_NV             0x852B
+#define GL_PRIMARY_COLOR_NV               0x852C
+#define GL_SECONDARY_COLOR_NV             0x852D
+#define GL_SPARE0_NV                      0x852E
+#define GL_SPARE1_NV                      0x852F
+#define GL_DISCARD_NV                     0x8530
+#define GL_E_TIMES_F_NV                   0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV           0x8536
+#define GL_UNSIGNED_INVERT_NV             0x8537
+#define GL_EXPAND_NORMAL_NV               0x8538
+#define GL_EXPAND_NEGATE_NV               0x8539
+#define GL_HALF_BIAS_NORMAL_NV            0x853A
+#define GL_HALF_BIAS_NEGATE_NV            0x853B
+#define GL_SIGNED_IDENTITY_NV             0x853C
+#define GL_SIGNED_NEGATE_NV               0x853D
+#define GL_SCALE_BY_TWO_NV                0x853E
+#define GL_SCALE_BY_FOUR_NV               0x853F
+#define GL_SCALE_BY_ONE_HALF_NV           0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541
+#define GL_COMBINER_INPUT_NV              0x8542
+#define GL_COMBINER_MAPPING_NV            0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV    0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546
+#define GL_COMBINER_MUX_SUM_NV            0x8547
+#define GL_COMBINER_SCALE_NV              0x8548
+#define GL_COMBINER_BIAS_NV               0x8549
+#define GL_COMBINER_AB_OUTPUT_NV          0x854A
+#define GL_COMBINER_CD_OUTPUT_NV          0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV         0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV       0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV       0x854E
+#define GL_COLOR_SUM_CLAMP_NV             0x854F
+#define GL_COMBINER0_NV                   0x8550
+#define GL_COMBINER1_NV                   0x8551
+#define GL_COMBINER2_NV                   0x8552
+#define GL_COMBINER3_NV                   0x8553
+#define GL_COMBINER4_NV                   0x8554
+#define GL_COMBINER5_NV                   0x8555
+#define GL_COMBINER6_NV                   0x8556
+#define GL_COMBINER7_NV                   0x8557
+/* reuse GL_TEXTURE0_ARB */
+/* reuse GL_TEXTURE1_ARB */
+/* reuse GL_ZERO */
+/* reuse GL_NONE */
+/* reuse GL_FOG */
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_FOG_DISTANCE_MODE_NV           0x855A
+#define GL_EYE_RADIAL_NV                  0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV          0x855C
+/* reuse GL_EYE_PLANE */
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_EMBOSS_LIGHT_NV                0x855D
+#define GL_EMBOSS_CONSTANT_NV             0x855E
+#define GL_EMBOSS_MAP_NV                  0x855F
+#endif
+
+#ifndef GL_NV_blend_square
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_COMBINE4_NV                    0x8503
+#define GL_SOURCE3_RGB_NV                 0x8583
+#define GL_SOURCE3_ALPHA_NV               0x858B
+#define GL_OPERAND3_RGB_NV                0x8593
+#define GL_OPERAND3_ALPHA_NV              0x859B
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#endif
+
+#ifndef GL_MESA_window_pos
+#endif
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_CULL_VERTEX_IBM                103050
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_VERTEX_ARRAY_LIST_IBM          103070
+#define GL_NORMAL_ARRAY_LIST_IBM          103071
+#define GL_COLOR_ARRAY_LIST_IBM           103072
+#define GL_INDEX_ARRAY_LIST_IBM           103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM   103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM       103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM  103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM   103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM   103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM    103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM    103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_PACK_SUBSAMPLE_RATE_SGIX       0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX     0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX      0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX      0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX      0x85A4
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_YCRCB_SGIX                     0x8318
+#define GL_YCRCBA_SGIX                    0x8319
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_COMPRESSED_RGB_FXT1_3DFX       0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX      0x86B1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_MULTISAMPLE_3DFX               0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX            0x86B3
+#define GL_SAMPLES_3DFX                   0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX           0x20000000
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_MULTISAMPLE_EXT                0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT        0x809F
+#define GL_SAMPLE_MASK_EXT                0x80A0
+#define GL_1PASS_EXT                      0x80A1
+#define GL_2PASS_0_EXT                    0x80A2
+#define GL_2PASS_1_EXT                    0x80A3
+#define GL_4PASS_0_EXT                    0x80A4
+#define GL_4PASS_1_EXT                    0x80A5
+#define GL_4PASS_2_EXT                    0x80A6
+#define GL_4PASS_3_EXT                    0x80A7
+#define GL_SAMPLE_BUFFERS_EXT             0x80A8
+#define GL_SAMPLES_EXT                    0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT          0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT         0x80AB
+#define GL_SAMPLE_PATTERN_EXT             0x80AC
+#define GL_MULTISAMPLE_BIT_EXT            0x20000000
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_VERTEX_PRECLIP_SGIX            0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX       0x83EF
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_CONVOLUTION_HINT_SGIX          0x8316
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_PACK_RESAMPLE_SGIX             0x842C
+#define GL_UNPACK_RESAMPLE_SGIX           0x842D
+#define GL_RESAMPLE_REPLICATE_SGIX        0x842E
+#define GL_RESAMPLE_ZERO_FILL_SGIX        0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX         0x8430
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_EYE_DISTANCE_TO_POINT_SGIS     0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS  0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS      0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS   0x81F3
+#define GL_EYE_POINT_SGIS                 0x81F4
+#define GL_OBJECT_POINT_SGIS              0x81F5
+#define GL_EYE_LINE_SGIS                  0x81F6
+#define GL_OBJECT_LINE_SGIS               0x81F7
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS   0x81EF
+#endif
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_DOT3_RGB_EXT                   0x8740
+#define GL_DOT3_RGBA_EXT                  0x8741
+#endif
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_MIRROR_CLAMP_ATI               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI       0x8743
+#endif
+
+#ifndef GL_NV_fence
+#define GL_ALL_COMPLETED_NV               0x84F2
+#define GL_FENCE_STATUS_NV                0x84F3
+#define GL_FENCE_CONDITION_NV             0x84F4
+#endif
+
+#ifndef GL_IBM_static_data
+#define GL_ALL_STATIC_DATA_IBM            103060
+#define GL_STATIC_VERTEX_ARRAY_IBM        103061
+#endif
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_IBM            0x8370
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_EVAL_2D_NV                     0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV          0x86C1
+#define GL_MAP_TESSELLATION_NV            0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV          0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV          0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV         0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV         0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV         0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV         0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV         0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV         0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV         0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV         0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV         0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV         0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV        0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV        0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV        0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV        0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV        0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV        0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV        0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV     0x86D7
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_DEPTH_STENCIL_NV               0x84F9
+#define GL_UNSIGNED_INT_24_8_NV           0x84FA
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_PER_STAGE_CONSTANTS_NV         0x8535
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_TEXTURE_RECTANGLE_NV           0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV   0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV     0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV  0x84F8
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV    0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV      0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV  0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV          0x86DC
+#define GL_SHADER_CONSISTENT_NV           0x86DD
+#define GL_TEXTURE_SHADER_NV              0x86DE
+#define GL_SHADER_OPERATION_NV            0x86DF
+#define GL_CULL_MODES_NV                  0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV       0x86E1
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV    0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV        0x86E2
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV     0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV         0x86E3
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV      0x86E3
+#define GL_PREVIOUS_TEXTURE_INPUT_NV      0x86E4
+#define GL_CONST_EYE_NV                   0x86E5
+#define GL_PASS_THROUGH_NV                0x86E6
+#define GL_CULL_FRAGMENT_NV               0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV           0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV     0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV     0x86EA
+#define GL_DOT_PRODUCT_NV                 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV   0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV      0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV                        0x86F4
+#define GL_DSDT_NV                        0x86F5
+#define GL_DSDT_MAG_NV                    0x86F6
+#define GL_DSDT_MAG_VIB_NV                0x86F7
+#define GL_HILO16_NV                      0x86F8
+#define GL_SIGNED_HILO_NV                 0x86F9
+#define GL_SIGNED_HILO16_NV               0x86FA
+#define GL_SIGNED_RGBA_NV                 0x86FB
+#define GL_SIGNED_RGBA8_NV                0x86FC
+#define GL_SIGNED_RGB_NV                  0x86FE
+#define GL_SIGNED_RGB8_NV                 0x86FF
+#define GL_SIGNED_LUMINANCE_NV            0x8701
+#define GL_SIGNED_LUMINANCE8_NV           0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV      0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV    0x8704
+#define GL_SIGNED_ALPHA_NV                0x8705
+#define GL_SIGNED_ALPHA8_NV               0x8706
+#define GL_SIGNED_INTENSITY_NV            0x8707
+#define GL_SIGNED_INTENSITY8_NV           0x8708
+#define GL_DSDT8_NV                       0x8709
+#define GL_DSDT8_MAG8_NV                  0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV       0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV   0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV                    0x870E
+#define GL_LO_SCALE_NV                    0x870F
+#define GL_DS_SCALE_NV                    0x8710
+#define GL_DT_SCALE_NV                    0x8711
+#define GL_MAGNITUDE_SCALE_NV             0x8712
+#define GL_VIBRANCE_SCALE_NV              0x8713
+#define GL_HI_BIAS_NV                     0x8714
+#define GL_LO_BIAS_NV                     0x8715
+#define GL_DS_BIAS_NV                     0x8716
+#define GL_DT_BIAS_NV                     0x8717
+#define GL_MAGNITUDE_BIAS_NV              0x8718
+#define GL_VIBRANCE_BIAS_NV               0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV       0x871A
+#define GL_TEXTURE_HI_SIZE_NV             0x871B
+#define GL_TEXTURE_LO_SIZE_NV             0x871C
+#define GL_TEXTURE_DS_SIZE_NV             0x871D
+#define GL_TEXTURE_DT_SIZE_NV             0x871E
+#define GL_TEXTURE_MAG_SIZE_NV            0x871F
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV      0x86EF
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_VERTEX_PROGRAM_NV              0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV        0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV           0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV           0x8625
+#define GL_CURRENT_ATTRIB_NV              0x8626
+#define GL_PROGRAM_LENGTH_NV              0x8627
+#define GL_PROGRAM_STRING_NV              0x8628
+#define GL_MODELVIEW_PROJECTION_NV        0x8629
+#define GL_IDENTITY_NV                    0x862A
+#define GL_INVERSE_NV                     0x862B
+#define GL_TRANSPOSE_NV                   0x862C
+#define GL_INVERSE_TRANSPOSE_NV           0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV          0x862F
+#define GL_MATRIX0_NV                     0x8630
+#define GL_MATRIX1_NV                     0x8631
+#define GL_MATRIX2_NV                     0x8632
+#define GL_MATRIX3_NV                     0x8633
+#define GL_MATRIX4_NV                     0x8634
+#define GL_MATRIX5_NV                     0x8635
+#define GL_MATRIX6_NV                     0x8636
+#define GL_MATRIX7_NV                     0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640
+#define GL_CURRENT_MATRIX_NV              0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643
+#define GL_PROGRAM_PARAMETER_NV           0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV        0x8645
+#define GL_PROGRAM_TARGET_NV              0x8646
+#define GL_PROGRAM_RESIDENT_NV            0x8647
+#define GL_TRACK_MATRIX_NV                0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV      0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV      0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX       0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX       0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX       0x836B
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SCALEBIAS_HINT_SGIX            0x8322
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_INTERLACE_OML                  0x8980
+#define GL_INTERLACE_READ_OML             0x8981
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_FORMAT_SUBSAMPLE_24_24_OML     0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML   0x8983
+#endif
+
+#ifndef GL_OML_resample
+#define GL_PACK_RESAMPLE_OML              0x8984
+#define GL_UNPACK_RESAMPLE_OML            0x8985
+#define GL_RESAMPLE_REPLICATE_OML         0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML         0x8987
+#define GL_RESAMPLE_AVERAGE_OML           0x8988
+#define GL_RESAMPLE_DECIMATE_OML          0x8989
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_DEPTH_STENCIL_TO_RGBA_NV       0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV       0x886F
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_BUMP_ROT_MATRIX_ATI            0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI       0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI         0x8777
+#define GL_BUMP_TEX_UNITS_ATI             0x8778
+#define GL_DUDV_ATI                       0x8779
+#define GL_DU8DV8_ATI                     0x877A
+#define GL_BUMP_ENVMAP_ATI                0x877B
+#define GL_BUMP_TARGET_ATI                0x877C
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_FRAGMENT_SHADER_ATI            0x8920
+#define GL_REG_0_ATI                      0x8921
+#define GL_REG_1_ATI                      0x8922
+#define GL_REG_2_ATI                      0x8923
+#define GL_REG_3_ATI                      0x8924
+#define GL_REG_4_ATI                      0x8925
+#define GL_REG_5_ATI                      0x8926
+#define GL_REG_6_ATI                      0x8927
+#define GL_REG_7_ATI                      0x8928
+#define GL_REG_8_ATI                      0x8929
+#define GL_REG_9_ATI                      0x892A
+#define GL_REG_10_ATI                     0x892B
+#define GL_REG_11_ATI                     0x892C
+#define GL_REG_12_ATI                     0x892D
+#define GL_REG_13_ATI                     0x892E
+#define GL_REG_14_ATI                     0x892F
+#define GL_REG_15_ATI                     0x8930
+#define GL_REG_16_ATI                     0x8931
+#define GL_REG_17_ATI                     0x8932
+#define GL_REG_18_ATI                     0x8933
+#define GL_REG_19_ATI                     0x8934
+#define GL_REG_20_ATI                     0x8935
+#define GL_REG_21_ATI                     0x8936
+#define GL_REG_22_ATI                     0x8937
+#define GL_REG_23_ATI                     0x8938
+#define GL_REG_24_ATI                     0x8939
+#define GL_REG_25_ATI                     0x893A
+#define GL_REG_26_ATI                     0x893B
+#define GL_REG_27_ATI                     0x893C
+#define GL_REG_28_ATI                     0x893D
+#define GL_REG_29_ATI                     0x893E
+#define GL_REG_30_ATI                     0x893F
+#define GL_REG_31_ATI                     0x8940
+#define GL_CON_0_ATI                      0x8941
+#define GL_CON_1_ATI                      0x8942
+#define GL_CON_2_ATI                      0x8943
+#define GL_CON_3_ATI                      0x8944
+#define GL_CON_4_ATI                      0x8945
+#define GL_CON_5_ATI                      0x8946
+#define GL_CON_6_ATI                      0x8947
+#define GL_CON_7_ATI                      0x8948
+#define GL_CON_8_ATI                      0x8949
+#define GL_CON_9_ATI                      0x894A
+#define GL_CON_10_ATI                     0x894B
+#define GL_CON_11_ATI                     0x894C
+#define GL_CON_12_ATI                     0x894D
+#define GL_CON_13_ATI                     0x894E
+#define GL_CON_14_ATI                     0x894F
+#define GL_CON_15_ATI                     0x8950
+#define GL_CON_16_ATI                     0x8951
+#define GL_CON_17_ATI                     0x8952
+#define GL_CON_18_ATI                     0x8953
+#define GL_CON_19_ATI                     0x8954
+#define GL_CON_20_ATI                     0x8955
+#define GL_CON_21_ATI                     0x8956
+#define GL_CON_22_ATI                     0x8957
+#define GL_CON_23_ATI                     0x8958
+#define GL_CON_24_ATI                     0x8959
+#define GL_CON_25_ATI                     0x895A
+#define GL_CON_26_ATI                     0x895B
+#define GL_CON_27_ATI                     0x895C
+#define GL_CON_28_ATI                     0x895D
+#define GL_CON_29_ATI                     0x895E
+#define GL_CON_30_ATI                     0x895F
+#define GL_CON_31_ATI                     0x8960
+#define GL_MOV_ATI                        0x8961
+#define GL_ADD_ATI                        0x8963
+#define GL_MUL_ATI                        0x8964
+#define GL_SUB_ATI                        0x8965
+#define GL_DOT3_ATI                       0x8966
+#define GL_DOT4_ATI                       0x8967
+#define GL_MAD_ATI                        0x8968
+#define GL_LERP_ATI                       0x8969
+#define GL_CND_ATI                        0x896A
+#define GL_CND0_ATI                       0x896B
+#define GL_DOT2_ADD_ATI                   0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI     0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI     0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI     0x896F
+#define GL_NUM_PASSES_ATI                 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI  0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI     0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI    0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI        0x8975
+#define GL_SWIZZLE_STR_ATI                0x8976
+#define GL_SWIZZLE_STQ_ATI                0x8977
+#define GL_SWIZZLE_STR_DR_ATI             0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI             0x8979
+#define GL_SWIZZLE_STRQ_ATI               0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI            0x897B
+#define GL_RED_BIT_ATI                    0x00000001
+#define GL_GREEN_BIT_ATI                  0x00000002
+#define GL_BLUE_BIT_ATI                   0x00000004
+#define GL_2X_BIT_ATI                     0x00000001
+#define GL_4X_BIT_ATI                     0x00000002
+#define GL_8X_BIT_ATI                     0x00000004
+#define GL_HALF_BIT_ATI                   0x00000008
+#define GL_QUARTER_BIT_ATI                0x00000010
+#define GL_EIGHTH_BIT_ATI                 0x00000020
+#define GL_SATURATE_BIT_ATI               0x00000040
+#define GL_COMP_BIT_ATI                   0x00000002
+#define GL_NEGATE_BIT_ATI                 0x00000004
+#define GL_BIAS_BIT_ATI                   0x00000008
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_PN_TRIANGLES_ATI               0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI    0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI   0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_STATIC_ATI                     0x8760
+#define GL_DYNAMIC_ATI                    0x8761
+#define GL_PRESERVE_ATI                   0x8762
+#define GL_DISCARD_ATI                    0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI         0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI        0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI        0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI        0x8767
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_VERTEX_SHADER_EXT              0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT      0x8781
+#define GL_OP_INDEX_EXT                   0x8782
+#define GL_OP_NEGATE_EXT                  0x8783
+#define GL_OP_DOT3_EXT                    0x8784
+#define GL_OP_DOT4_EXT                    0x8785
+#define GL_OP_MUL_EXT                     0x8786
+#define GL_OP_ADD_EXT                     0x8787
+#define GL_OP_MADD_EXT                    0x8788
+#define GL_OP_FRAC_EXT                    0x8789
+#define GL_OP_MAX_EXT                     0x878A
+#define GL_OP_MIN_EXT                     0x878B
+#define GL_OP_SET_GE_EXT                  0x878C
+#define GL_OP_SET_LT_EXT                  0x878D
+#define GL_OP_CLAMP_EXT                   0x878E
+#define GL_OP_FLOOR_EXT                   0x878F
+#define GL_OP_ROUND_EXT                   0x8790
+#define GL_OP_EXP_BASE_2_EXT              0x8791
+#define GL_OP_LOG_BASE_2_EXT              0x8792
+#define GL_OP_POWER_EXT                   0x8793
+#define GL_OP_RECIP_EXT                   0x8794
+#define GL_OP_RECIP_SQRT_EXT              0x8795
+#define GL_OP_SUB_EXT                     0x8796
+#define GL_OP_CROSS_PRODUCT_EXT           0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT         0x8798
+#define GL_OP_MOV_EXT                     0x8799
+#define GL_OUTPUT_VERTEX_EXT              0x879A
+#define GL_OUTPUT_COLOR0_EXT              0x879B
+#define GL_OUTPUT_COLOR1_EXT              0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT      0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT      0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT      0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT      0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT      0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT      0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT      0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT      0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT      0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT      0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT     0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT     0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT     0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT     0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT     0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT     0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT     0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT     0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT     0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT     0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT     0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT     0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT     0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT     0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT     0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT     0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT     0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT     0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT     0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT     0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT     0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT     0x87BC
+#define GL_OUTPUT_FOG_EXT                 0x87BD
+#define GL_SCALAR_EXT                     0x87BE
+#define GL_VECTOR_EXT                     0x87BF
+#define GL_MATRIX_EXT                     0x87C0
+#define GL_VARIANT_EXT                    0x87C1
+#define GL_INVARIANT_EXT                  0x87C2
+#define GL_LOCAL_CONSTANT_EXT             0x87C3
+#define GL_LOCAL_EXT                      0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT   0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT     0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT   0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT       0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT    0x87D4
+#define GL_X_EXT                          0x87D5
+#define GL_Y_EXT                          0x87D6
+#define GL_Z_EXT                          0x87D7
+#define GL_W_EXT                          0x87D8
+#define GL_NEGATIVE_X_EXT                 0x87D9
+#define GL_NEGATIVE_Y_EXT                 0x87DA
+#define GL_NEGATIVE_Z_EXT                 0x87DB
+#define GL_NEGATIVE_W_EXT                 0x87DC
+#define GL_ZERO_EXT                       0x87DD
+#define GL_ONE_EXT                        0x87DE
+#define GL_NEGATIVE_ONE_EXT               0x87DF
+#define GL_NORMALIZED_RANGE_EXT           0x87E0
+#define GL_FULL_RANGE_EXT                 0x87E1
+#define GL_CURRENT_VERTEX_EXT             0x87E2
+#define GL_MVP_MATRIX_EXT                 0x87E3
+#define GL_VARIANT_VALUE_EXT              0x87E4
+#define GL_VARIANT_DATATYPE_EXT           0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT       0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT         0x87E7
+#define GL_VARIANT_ARRAY_EXT              0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT      0x87E9
+#define GL_INVARIANT_VALUE_EXT            0x87EA
+#define GL_INVARIANT_DATATYPE_EXT         0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT       0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT    0x87ED
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_MAX_VERTEX_STREAMS_ATI         0x876B
+#define GL_VERTEX_STREAM0_ATI             0x876C
+#define GL_VERTEX_STREAM1_ATI             0x876D
+#define GL_VERTEX_STREAM2_ATI             0x876E
+#define GL_VERTEX_STREAM3_ATI             0x876F
+#define GL_VERTEX_STREAM4_ATI             0x8770
+#define GL_VERTEX_STREAM5_ATI             0x8771
+#define GL_VERTEX_STREAM6_ATI             0x8772
+#define GL_VERTEX_STREAM7_ATI             0x8773
+#define GL_VERTEX_SOURCE_ATI              0x8774
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ELEMENT_ARRAY_ATI              0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI         0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI      0x876A
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_QUAD_MESH_SUN                  0x8614
+#define GL_TRIANGLE_MESH_SUN              0x8615
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SLICE_ACCUM_SUN                0x85CC
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_MULTISAMPLE_FILTER_HINT_NV     0x8534
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_DEPTH_CLAMP_NV                 0x864F
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_PIXEL_COUNTER_BITS_NV          0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV  0x8865
+#define GL_PIXEL_COUNT_NV                 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV       0x8867
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_POINT_SPRITE_NV                0x8861
+#define GL_COORD_REPLACE_NV               0x8862
+#define GL_POINT_SPRITE_R_MODE_NV         0x8863
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV      0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV   0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV    0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV    0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV      0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV                       0x885E
+#define GL_SIGNED_HILO8_NV                0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV           0x8860
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#endif
+
+#ifndef GL_EXT_shadow_funcs
+#endif
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_STENCIL_TEST_TWO_SIDE_EXT      0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT        0x8911
+#endif
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_TEXT_FRAGMENT_SHADER_ATI       0x8200
+#endif
+
+#ifndef GL_APPLE_client_storage
+#define GL_UNPACK_CLIENT_STORAGE_APPLE    0x85B2
+#endif
+
+#ifndef GL_APPLE_element_array
+#define GL_ELEMENT_ARRAY_APPLE            0x8A0C
+#define GL_ELEMENT_ARRAY_TYPE_APPLE       0x8A0D
+#define GL_ELEMENT_ARRAY_POINTER_APPLE    0x8A0E
+#endif
+
+#ifndef GL_APPLE_fence
+#define GL_DRAW_PIXELS_APPLE              0x8A0A
+#define GL_FENCE_APPLE                    0x8A0B
+#endif
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_VERTEX_ARRAY_BINDING_APPLE     0x85B5
+#endif
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_VERTEX_ARRAY_RANGE_APPLE       0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_STORAGE_CLIENT_APPLE           0x85B4
+#define GL_STORAGE_CACHED_APPLE           0x85BE
+#define GL_STORAGE_SHARED_APPLE           0x85BF
+#endif
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_YCBCR_422_APPLE                0x85B9
+#define GL_UNSIGNED_SHORT_8_8_APPLE       0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE   0x85BB
+#endif
+
+#ifndef GL_S3_s3tc
+#define GL_RGB_S3TC                       0x83A0
+#define GL_RGB4_S3TC                      0x83A1
+#define GL_RGBA_S3TC                      0x83A2
+#define GL_RGBA4_S3TC                     0x83A3
+#define GL_RGBA_DXT5_S3TC                 0x83A4
+#define GL_RGBA4_DXT5_S3TC                0x83A5
+#endif
+
+#ifndef GL_ATI_draw_buffers
+#define GL_MAX_DRAW_BUFFERS_ATI           0x8824
+#define GL_DRAW_BUFFER0_ATI               0x8825
+#define GL_DRAW_BUFFER1_ATI               0x8826
+#define GL_DRAW_BUFFER2_ATI               0x8827
+#define GL_DRAW_BUFFER3_ATI               0x8828
+#define GL_DRAW_BUFFER4_ATI               0x8829
+#define GL_DRAW_BUFFER5_ATI               0x882A
+#define GL_DRAW_BUFFER6_ATI               0x882B
+#define GL_DRAW_BUFFER7_ATI               0x882C
+#define GL_DRAW_BUFFER8_ATI               0x882D
+#define GL_DRAW_BUFFER9_ATI               0x882E
+#define GL_DRAW_BUFFER10_ATI              0x882F
+#define GL_DRAW_BUFFER11_ATI              0x8830
+#define GL_DRAW_BUFFER12_ATI              0x8831
+#define GL_DRAW_BUFFER13_ATI              0x8832
+#define GL_DRAW_BUFFER14_ATI              0x8833
+#define GL_DRAW_BUFFER15_ATI              0x8834
+#endif
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_RGBA_FLOAT_MODE_ATI            0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+#endif
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_MODULATE_ADD_ATI               0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI        0x8745
+#define GL_MODULATE_SUBTRACT_ATI          0x8746
+#endif
+
+#ifndef GL_ATI_texture_float
+#define GL_RGBA_FLOAT32_ATI               0x8814
+#define GL_RGB_FLOAT32_ATI                0x8815
+#define GL_ALPHA_FLOAT32_ATI              0x8816
+#define GL_INTENSITY_FLOAT32_ATI          0x8817
+#define GL_LUMINANCE_FLOAT32_ATI          0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI    0x8819
+#define GL_RGBA_FLOAT16_ATI               0x881A
+#define GL_RGB_FLOAT16_ATI                0x881B
+#define GL_ALPHA_FLOAT16_ATI              0x881C
+#define GL_INTENSITY_FLOAT16_ATI          0x881D
+#define GL_LUMINANCE_FLOAT16_ATI          0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI    0x881F
+#endif
+
+#ifndef GL_NV_float_buffer
+#define GL_FLOAT_R_NV                     0x8880
+#define GL_FLOAT_RG_NV                    0x8881
+#define GL_FLOAT_RGB_NV                   0x8882
+#define GL_FLOAT_RGBA_NV                  0x8883
+#define GL_FLOAT_R16_NV                   0x8884
+#define GL_FLOAT_R32_NV                   0x8885
+#define GL_FLOAT_RG16_NV                  0x8886
+#define GL_FLOAT_RG32_NV                  0x8887
+#define GL_FLOAT_RGB16_NV                 0x8888
+#define GL_FLOAT_RGB32_NV                 0x8889
+#define GL_FLOAT_RGBA16_NV                0x888A
+#define GL_FLOAT_RGBA32_NV                0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV    0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV     0x888D
+#define GL_FLOAT_RGBA_MODE_NV             0x888E
+#endif
+
+#ifndef GL_NV_fragment_program
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV            0x8870
+#define GL_MAX_TEXTURE_COORDS_NV          0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV     0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV    0x8873
+#define GL_PROGRAM_ERROR_STRING_NV        0x8874
+#endif
+
+#ifndef GL_NV_half_float
+#define GL_HALF_FLOAT_NV                  0x140B
+#endif
+
+#ifndef GL_NV_pixel_data_range
+#define GL_WRITE_PIXEL_DATA_RANGE_NV      0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV       0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+#endif
+
+#ifndef GL_NV_primitive_restart
+#define GL_PRIMITIVE_RESTART_NV           0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV     0x8559
+#endif
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+#endif
+
+#ifndef GL_NV_vertex_program2
+#endif
+
+#ifndef GL_ATI_map_object_buffer
+#endif
+
+#ifndef GL_ATI_separate_stencil
+#define GL_STENCIL_BACK_FUNC_ATI          0x8800
+#define GL_STENCIL_BACK_FAIL_ATI          0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+#endif
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#endif
+
+#ifndef GL_OES_byte_coordinates
+#endif
+
+#ifndef GL_OES_fixed_point
+#define GL_FIXED_OES                      0x140C
+#endif
+
+#ifndef GL_OES_single_precision
+#endif
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_PALETTE4_RGB8_OES              0x8B90
+#define GL_PALETTE4_RGBA8_OES             0x8B91
+#define GL_PALETTE4_R5_G6_B5_OES          0x8B92
+#define GL_PALETTE4_RGBA4_OES             0x8B93
+#define GL_PALETTE4_RGB5_A1_OES           0x8B94
+#define GL_PALETTE8_RGB8_OES              0x8B95
+#define GL_PALETTE8_RGBA8_OES             0x8B96
+#define GL_PALETTE8_R5_G6_B5_OES          0x8B97
+#define GL_PALETTE8_RGBA4_OES             0x8B98
+#define GL_PALETTE8_RGB5_A1_OES           0x8B99
+#endif
+
+#ifndef GL_OES_read_format
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+#endif
+
+#ifndef GL_OES_query_matrix
+#endif
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_DEPTH_BOUNDS_TEST_EXT          0x8890
+#define GL_DEPTH_BOUNDS_EXT               0x8891
+#endif
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_MIRROR_CLAMP_EXT               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT       0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT     0x8912
+#endif
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_BLEND_EQUATION_RGB_EXT         0x8009
+#define GL_BLEND_EQUATION_ALPHA_EXT       0x883D
+#endif
+
+#ifndef GL_MESA_pack_invert
+#define GL_PACK_INVERT_MESA               0x8758
+#endif
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_UNSIGNED_SHORT_8_8_MESA        0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA    0x85BB
+#define GL_YCBCR_MESA                     0x8757
+#endif
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_PIXEL_PACK_BUFFER_EXT          0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT        0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT  0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+#endif
+
+#ifndef GL_NV_fragment_program_option
+#endif
+
+#ifndef GL_NV_fragment_program2
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV      0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV        0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV      0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV      0x88F8
+#endif
+
+#ifndef GL_NV_vertex_program2_option
+/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
+/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */
+#endif
+
+#ifndef GL_NV_vertex_program3
+/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
+#endif
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#define GL_MAX_RENDERBUFFER_SIZE_EXT      0x84E8
+#define GL_FRAMEBUFFER_BINDING_EXT        0x8CA6
+#define GL_RENDERBUFFER_BINDING_EXT       0x8CA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE_EXT       0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT    0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS_EXT      0x8CDF
+#define GL_COLOR_ATTACHMENT0_EXT          0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT          0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT          0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT          0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT          0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT          0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT          0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT          0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT          0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT          0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT         0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT         0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT         0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT         0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT         0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT         0x8CEF
+#define GL_DEPTH_ATTACHMENT_EXT           0x8D00
+#define GL_STENCIL_ATTACHMENT_EXT         0x8D20
+#define GL_FRAMEBUFFER_EXT                0x8D40
+#define GL_RENDERBUFFER_EXT               0x8D41
+#define GL_RENDERBUFFER_WIDTH_EXT         0x8D42
+#define GL_RENDERBUFFER_HEIGHT_EXT        0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
+#define GL_STENCIL_INDEX1_EXT             0x8D46
+#define GL_STENCIL_INDEX4_EXT             0x8D47
+#define GL_STENCIL_INDEX8_EXT             0x8D48
+#define GL_STENCIL_INDEX16_EXT            0x8D49
+#define GL_RENDERBUFFER_RED_SIZE_EXT      0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT    0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT     0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT    0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT    0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT  0x8D55
+#endif
+
+#ifndef GL_GREMEDY_string_marker
+#endif
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_DEPTH_STENCIL_EXT              0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT          0x84FA
+#define GL_DEPTH24_STENCIL8_EXT           0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT       0x88F1
+#endif
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_STENCIL_TAG_BITS_EXT           0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT    0x88F3
+#endif
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_SRGB_EXT                       0x8C40
+#define GL_SRGB8_EXT                      0x8C41
+#define GL_SRGB_ALPHA_EXT                 0x8C42
+#define GL_SRGB8_ALPHA8_EXT               0x8C43
+#define GL_SLUMINANCE_ALPHA_EXT           0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT         0x8C45
+#define GL_SLUMINANCE_EXT                 0x8C46
+#define GL_SLUMINANCE8_EXT                0x8C47
+#define GL_COMPRESSED_SRGB_EXT            0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT      0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT      0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT  0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+#endif
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_READ_FRAMEBUFFER_EXT           0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT           0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT   0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT   0x8CAA
+#endif
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_RENDERBUFFER_SAMPLES_EXT       0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT                0x8D57
+#endif
+
+#ifndef GL_MESAX_texture_stack
+#define GL_TEXTURE_1D_STACK_MESAX         0x8759
+#define GL_TEXTURE_2D_STACK_MESAX         0x875A
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX   0x875B
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX   0x875C
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
+#endif
+
+#ifndef GL_EXT_timer_query
+#define GL_TIME_ELAPSED_EXT               0x88BF
+#endif
+
+#ifndef GL_EXT_gpu_program_parameters
+#endif
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE    0x8A13
+#endif
+
+#ifndef GL_NV_gpu_program4
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV    0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV    0x8905
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV   0x8906
+#define GL_PROGRAM_RESULT_COMPONENTS_NV   0x8907
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
+#endif
+
+#ifndef GL_NV_geometry_program4
+#define GL_LINES_ADJACENCY_EXT            0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT       0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT        0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT   0x000D
+#define GL_GEOMETRY_PROGRAM_NV            0x8C26
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
+#define GL_GEOMETRY_VERTICES_OUT_EXT      0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_EXT        0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT       0x8DDC
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_PROGRAM_POINT_SIZE_EXT         0x8642
+#endif
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_GEOMETRY_SHADER_EXT            0x8DD9
+/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */
+/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */
+/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */
+/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
+#define GL_MAX_VARYING_COMPONENTS_EXT     0x8B4B
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+/* reuse GL_LINES_ADJACENCY_EXT */
+/* reuse GL_LINE_STRIP_ADJACENCY_EXT */
+/* reuse GL_TRIANGLES_ADJACENCY_EXT */
+/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+/* reuse GL_PROGRAM_POINT_SIZE_EXT */
+#endif
+
+#ifndef GL_NV_vertex_program4
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+#endif
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_SAMPLER_1D_ARRAY_EXT           0x8DC0
+#define GL_SAMPLER_2D_ARRAY_EXT           0x8DC1
+#define GL_SAMPLER_BUFFER_EXT             0x8DC2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT    0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT    0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW_EXT        0x8DC5
+#define GL_UNSIGNED_INT_VEC2_EXT          0x8DC6
+#define GL_UNSIGNED_INT_VEC3_EXT          0x8DC7
+#define GL_UNSIGNED_INT_VEC4_EXT          0x8DC8
+#define GL_INT_SAMPLER_1D_EXT             0x8DC9
+#define GL_INT_SAMPLER_2D_EXT             0x8DCA
+#define GL_INT_SAMPLER_3D_EXT             0x8DCB
+#define GL_INT_SAMPLER_CUBE_EXT           0x8DCC
+#define GL_INT_SAMPLER_2D_RECT_EXT        0x8DCD
+#define GL_INT_SAMPLER_1D_ARRAY_EXT       0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY_EXT       0x8DCF
+#define GL_INT_SAMPLER_BUFFER_EXT         0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT    0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT    0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT    0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT  0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#endif
+
+#ifndef GL_EXT_draw_instanced
+#endif
+
+#ifndef GL_EXT_packed_float
+#define GL_R11F_G11F_B10F_EXT             0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT     0x8C3C
+#endif
+
+#ifndef GL_EXT_texture_array
+#define GL_TEXTURE_1D_ARRAY_EXT           0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT     0x8C19
+#define GL_TEXTURE_2D_ARRAY_EXT           0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT     0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT   0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT   0x8C1D
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT   0x88FF
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+#endif
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_TEXTURE_BUFFER_EXT             0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT    0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT     0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_EXT      0x8C2E
+#endif
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+#endif
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_COMPRESSED_RED_RGTC1_EXT       0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#endif
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_RGB9_E5_EXT                    0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT   0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT        0x8C3F
+#endif
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_DEPTH_COMPONENT32F_NV          0x8DAB
+#define GL_DEPTH32F_STENCIL8_NV           0x8DAC
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV     0x8DAF
+#endif
+
+#ifndef GL_NV_fragment_program4
+#endif
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV  0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV  0x8E12
+#endif
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_FRAMEBUFFER_SRGB_EXT           0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x8DBA
+#endif
+
+#ifndef GL_NV_geometry_shader4
+#endif
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
+#endif
+
+#ifndef GL_EXT_draw_buffers2
+#endif
+
+#ifndef GL_NV_transform_feedback
+#define GL_BACK_PRIMARY_COLOR_NV          0x8C77
+#define GL_BACK_SECONDARY_COLOR_NV        0x8C78
+#define GL_TEXTURE_COORD_NV               0x8C79
+#define GL_CLIP_DISTANCE_NV               0x8C7A
+#define GL_VERTEX_ID_NV                   0x8C7B
+#define GL_PRIMITIVE_ID_NV                0x8C7C
+#define GL_GENERIC_ATTRIB_NV              0x8C7D
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV  0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
+#define GL_ACTIVE_VARYINGS_NV             0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV   0x8C82
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV   0x8C86
+#define GL_PRIMITIVES_GENERATED_NV        0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
+#define GL_RASTERIZER_DISCARD_NV          0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_NV         0x8C8C
+#define GL_SEPARATE_ATTRIBS_NV            0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV   0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
+#define GL_LAYER_NV                       0x8DAA
+#define GL_NEXT_BUFFER_NV                 -2
+#define GL_SKIP_COMPONENTS4_NV            -3
+#define GL_SKIP_COMPONENTS3_NV            -4
+#define GL_SKIP_COMPONENTS2_NV            -5
+#define GL_SKIP_COMPONENTS1_NV            -6
+#endif
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT  0x8DED
+#define GL_UNIFORM_BUFFER_EXT             0x8DEE
+#define GL_UNIFORM_BUFFER_BINDING_EXT     0x8DEF
+#endif
+
+#ifndef GL_EXT_texture_integer
+#define GL_RGBA32UI_EXT                   0x8D70
+#define GL_RGB32UI_EXT                    0x8D71
+#define GL_ALPHA32UI_EXT                  0x8D72
+#define GL_INTENSITY32UI_EXT              0x8D73
+#define GL_LUMINANCE32UI_EXT              0x8D74
+#define GL_LUMINANCE_ALPHA32UI_EXT        0x8D75
+#define GL_RGBA16UI_EXT                   0x8D76
+#define GL_RGB16UI_EXT                    0x8D77
+#define GL_ALPHA16UI_EXT                  0x8D78
+#define GL_INTENSITY16UI_EXT              0x8D79
+#define GL_LUMINANCE16UI_EXT              0x8D7A
+#define GL_LUMINANCE_ALPHA16UI_EXT        0x8D7B
+#define GL_RGBA8UI_EXT                    0x8D7C
+#define GL_RGB8UI_EXT                     0x8D7D
+#define GL_ALPHA8UI_EXT                   0x8D7E
+#define GL_INTENSITY8UI_EXT               0x8D7F
+#define GL_LUMINANCE8UI_EXT               0x8D80
+#define GL_LUMINANCE_ALPHA8UI_EXT         0x8D81
+#define GL_RGBA32I_EXT                    0x8D82
+#define GL_RGB32I_EXT                     0x8D83
+#define GL_ALPHA32I_EXT                   0x8D84
+#define GL_INTENSITY32I_EXT               0x8D85
+#define GL_LUMINANCE32I_EXT               0x8D86
+#define GL_LUMINANCE_ALPHA32I_EXT         0x8D87
+#define GL_RGBA16I_EXT                    0x8D88
+#define GL_RGB16I_EXT                     0x8D89
+#define GL_ALPHA16I_EXT                   0x8D8A
+#define GL_INTENSITY16I_EXT               0x8D8B
+#define GL_LUMINANCE16I_EXT               0x8D8C
+#define GL_LUMINANCE_ALPHA16I_EXT         0x8D8D
+#define GL_RGBA8I_EXT                     0x8D8E
+#define GL_RGB8I_EXT                      0x8D8F
+#define GL_ALPHA8I_EXT                    0x8D90
+#define GL_INTENSITY8I_EXT                0x8D91
+#define GL_LUMINANCE8I_EXT                0x8D92
+#define GL_LUMINANCE_ALPHA8I_EXT          0x8D93
+#define GL_RED_INTEGER_EXT                0x8D94
+#define GL_GREEN_INTEGER_EXT              0x8D95
+#define GL_BLUE_INTEGER_EXT               0x8D96
+#define GL_ALPHA_INTEGER_EXT              0x8D97
+#define GL_RGB_INTEGER_EXT                0x8D98
+#define GL_RGBA_INTEGER_EXT               0x8D99
+#define GL_BGR_INTEGER_EXT                0x8D9A
+#define GL_BGRA_INTEGER_EXT               0x8D9B
+#define GL_LUMINANCE_INTEGER_EXT          0x8D9C
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT    0x8D9D
+#define GL_RGBA_INTEGER_MODE_EXT          0x8D9E
+#endif
+
+#ifndef GL_GREMEDY_frame_terminator
+#endif
+
+#ifndef GL_NV_conditional_render
+#define GL_QUERY_WAIT_NV                  0x8E13
+#define GL_QUERY_NO_WAIT_NV               0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV        0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV     0x8E16
+#endif
+
+#ifndef GL_NV_present_video
+#define GL_FRAME_NV                       0x8E26
+#define GL_FIELDS_NV                      0x8E27
+#define GL_CURRENT_TIME_NV                0x8E28
+#define GL_NUM_FILL_STREAMS_NV            0x8E29
+#define GL_PRESENT_TIME_NV                0x8E2A
+#define GL_PRESENT_DURATION_NV            0x8E2B
+#endif
+
+#ifndef GL_EXT_transform_feedback
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT  0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F
+#define GL_INTERLEAVED_ATTRIBS_EXT        0x8C8C
+#define GL_SEPARATE_ATTRIBS_EXT           0x8C8D
+#define GL_PRIMITIVES_GENERATED_EXT       0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88
+#define GL_RASTERIZER_DISCARD_EXT         0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76
+#endif
+
+#ifndef GL_EXT_direct_state_access
+#define GL_PROGRAM_MATRIX_EXT             0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT   0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F
+#endif
+
+#ifndef GL_EXT_vertex_array_bgra
+/* reuse GL_BGRA */
+#endif
+
+#ifndef GL_EXT_texture_swizzle
+#define GL_TEXTURE_SWIZZLE_R_EXT          0x8E42
+#define GL_TEXTURE_SWIZZLE_G_EXT          0x8E43
+#define GL_TEXTURE_SWIZZLE_B_EXT          0x8E44
+#define GL_TEXTURE_SWIZZLE_A_EXT          0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT       0x8E46
+#endif
+
+#ifndef GL_NV_explicit_multisample
+#define GL_SAMPLE_POSITION_NV             0x8E50
+#define GL_SAMPLE_MASK_NV                 0x8E51
+#define GL_SAMPLE_MASK_VALUE_NV           0x8E52
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV        0x8E55
+#define GL_SAMPLER_RENDERBUFFER_NV        0x8E56
+#define GL_INT_SAMPLER_RENDERBUFFER_NV    0x8E57
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58
+#define GL_MAX_SAMPLE_MASK_WORDS_NV       0x8E59
+#endif
+
+#ifndef GL_NV_transform_feedback2
+#define GL_TRANSFORM_FEEDBACK_NV          0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV  0x8E25
+#endif
+
+#ifndef GL_ATI_meminfo
+#define GL_VBO_FREE_MEMORY_ATI            0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI        0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI   0x87FD
+#endif
+
+#ifndef GL_AMD_performance_monitor
+#define GL_COUNTER_TYPE_AMD               0x8BC0
+#define GL_COUNTER_RANGE_AMD              0x8BC1
+#define GL_UNSIGNED_INT64_AMD             0x8BC2
+#define GL_PERCENTAGE_AMD                 0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD   0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD        0x8BC5
+#define GL_PERFMON_RESULT_AMD             0x8BC6
+#endif
+
+#ifndef GL_AMD_texture_texture4
+#endif
+
+#ifndef GL_AMD_vertex_shader_tessellator
+#define GL_SAMPLER_BUFFER_AMD             0x9001
+#define GL_INT_SAMPLER_BUFFER_AMD         0x9002
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003
+#define GL_TESSELLATION_MODE_AMD          0x9004
+#define GL_TESSELLATION_FACTOR_AMD        0x9005
+#define GL_DISCRETE_AMD                   0x9006
+#define GL_CONTINUOUS_AMD                 0x9007
+#endif
+
+#ifndef GL_EXT_provoking_vertex
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION_EXT    0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT     0x8E4E
+#define GL_PROVOKING_VERTEX_EXT           0x8E4F
+#endif
+
+#ifndef GL_EXT_texture_snorm
+#define GL_ALPHA_SNORM                    0x9010
+#define GL_LUMINANCE_SNORM                0x9011
+#define GL_LUMINANCE_ALPHA_SNORM          0x9012
+#define GL_INTENSITY_SNORM                0x9013
+#define GL_ALPHA8_SNORM                   0x9014
+#define GL_LUMINANCE8_SNORM               0x9015
+#define GL_LUMINANCE8_ALPHA8_SNORM        0x9016
+#define GL_INTENSITY8_SNORM               0x9017
+#define GL_ALPHA16_SNORM                  0x9018
+#define GL_LUMINANCE16_SNORM              0x9019
+#define GL_LUMINANCE16_ALPHA16_SNORM      0x901A
+#define GL_INTENSITY16_SNORM              0x901B
+/* reuse GL_RED_SNORM */
+/* reuse GL_RG_SNORM */
+/* reuse GL_RGB_SNORM */
+/* reuse GL_RGBA_SNORM */
+/* reuse GL_R8_SNORM */
+/* reuse GL_RG8_SNORM */
+/* reuse GL_RGB8_SNORM */
+/* reuse GL_RGBA8_SNORM */
+/* reuse GL_R16_SNORM */
+/* reuse GL_RG16_SNORM */
+/* reuse GL_RGB16_SNORM */
+/* reuse GL_RGBA16_SNORM */
+/* reuse GL_SIGNED_NORMALIZED */
+#endif
+
+#ifndef GL_AMD_draw_buffers_blend
+#endif
+
+#ifndef GL_APPLE_texture_range
+#define GL_TEXTURE_RANGE_LENGTH_APPLE     0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE    0x85B8
+#define GL_TEXTURE_STORAGE_HINT_APPLE     0x85BC
+#define GL_STORAGE_PRIVATE_APPLE          0x85BD
+/* reuse GL_STORAGE_CACHED_APPLE */
+/* reuse GL_STORAGE_SHARED_APPLE */
+#endif
+
+#ifndef GL_APPLE_float_pixels
+#define GL_HALF_APPLE                     0x140B
+#define GL_RGBA_FLOAT32_APPLE             0x8814
+#define GL_RGB_FLOAT32_APPLE              0x8815
+#define GL_ALPHA_FLOAT32_APPLE            0x8816
+#define GL_INTENSITY_FLOAT32_APPLE        0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE        0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE  0x8819
+#define GL_RGBA_FLOAT16_APPLE             0x881A
+#define GL_RGB_FLOAT16_APPLE              0x881B
+#define GL_ALPHA_FLOAT16_APPLE            0x881C
+#define GL_INTENSITY_FLOAT16_APPLE        0x881D
+#define GL_LUMINANCE_FLOAT16_APPLE        0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE  0x881F
+#define GL_COLOR_FLOAT_APPLE              0x8A0F
+#endif
+
+#ifndef GL_APPLE_vertex_program_evaluators
+#define GL_VERTEX_ATTRIB_MAP1_APPLE       0x8A00
+#define GL_VERTEX_ATTRIB_MAP2_APPLE       0x8A01
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE  0x8A02
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE  0x8A06
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09
+#endif
+
+#ifndef GL_APPLE_aux_depth_stencil
+#define GL_AUX_DEPTH_STENCIL_APPLE        0x8A14
+#endif
+
+#ifndef GL_APPLE_object_purgeable
+#define GL_BUFFER_OBJECT_APPLE            0x85B3
+#define GL_RELEASED_APPLE                 0x8A19
+#define GL_VOLATILE_APPLE                 0x8A1A
+#define GL_RETAINED_APPLE                 0x8A1B
+#define GL_UNDEFINED_APPLE                0x8A1C
+#define GL_PURGEABLE_APPLE                0x8A1D
+#endif
+
+#ifndef GL_APPLE_row_bytes
+#define GL_PACK_ROW_BYTES_APPLE           0x8A15
+#define GL_UNPACK_ROW_BYTES_APPLE         0x8A16
+#endif
+
+#ifndef GL_APPLE_rgb_422
+#define GL_RGB_422_APPLE                  0x8A1F
+/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */
+/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+#endif
+
+#ifndef GL_NV_video_capture
+#define GL_VIDEO_BUFFER_NV                0x9020
+#define GL_VIDEO_BUFFER_BINDING_NV        0x9021
+#define GL_FIELD_UPPER_NV                 0x9022
+#define GL_FIELD_LOWER_NV                 0x9023
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV   0x9024
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV   0x9027
+#define GL_VIDEO_BUFFER_PITCH_NV          0x9028
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV  0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV  0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D
+#define GL_PARTIAL_SUCCESS_NV             0x902E
+#define GL_SUCCESS_NV                     0x902F
+#define GL_FAILURE_NV                     0x9030
+#define GL_YCBYCR8_422_NV                 0x9031
+#define GL_YCBAYCR8A_4224_NV              0x9032
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV  0x9033
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV  0x9035
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV       0x9037
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV   0x9038
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV  0x9039
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C
+#endif
+
+#ifndef GL_NV_copy_image
+#endif
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_ACTIVE_PROGRAM_EXT             0x8B8D
+#endif
+
+#ifndef GL_NV_parameter_buffer_object2
+#endif
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_BUFFER_GPU_ADDRESS_NV          0x8F1D
+#define GL_GPU_ADDRESS_NV                 0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV   0x8F35
+#endif
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
+#define GL_ELEMENT_ARRAY_UNIFIED_NV       0x8F1F
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
+#define GL_VERTEX_ARRAY_ADDRESS_NV        0x8F21
+#define GL_NORMAL_ARRAY_ADDRESS_NV        0x8F22
+#define GL_COLOR_ARRAY_ADDRESS_NV         0x8F23
+#define GL_INDEX_ARRAY_ADDRESS_NV         0x8F24
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV     0x8F26
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV     0x8F28
+#define GL_ELEMENT_ARRAY_ADDRESS_NV       0x8F29
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV  0x8F2A
+#define GL_VERTEX_ARRAY_LENGTH_NV         0x8F2B
+#define GL_NORMAL_ARRAY_LENGTH_NV         0x8F2C
+#define GL_COLOR_ARRAY_LENGTH_NV          0x8F2D
+#define GL_INDEX_ARRAY_LENGTH_NV          0x8F2E
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV  0x8F2F
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV      0x8F30
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
+#define GL_FOG_COORD_ARRAY_LENGTH_NV      0x8F32
+#define GL_ELEMENT_ARRAY_LENGTH_NV        0x8F33
+#define GL_DRAW_INDIRECT_UNIFIED_NV       0x8F40
+#define GL_DRAW_INDIRECT_ADDRESS_NV       0x8F41
+#define GL_DRAW_INDIRECT_LENGTH_NV        0x8F42
+#endif
+
+#ifndef GL_NV_texture_barrier
+#endif
+
+#ifndef GL_AMD_shader_stencil_export
+#endif
+
+#ifndef GL_AMD_seamless_cubemap_per_texture
+/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */
+#endif
+
+#ifndef GL_AMD_conservative_depth
+#endif
+
+#ifndef GL_EXT_shader_image_load_store
+#define GL_MAX_IMAGE_UNITS_EXT            0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39
+#define GL_IMAGE_BINDING_NAME_EXT         0x8F3A
+#define GL_IMAGE_BINDING_LEVEL_EXT        0x8F3B
+#define GL_IMAGE_BINDING_LAYERED_EXT      0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT        0x8F3D
+#define GL_IMAGE_BINDING_ACCESS_EXT       0x8F3E
+#define GL_IMAGE_1D_EXT                   0x904C
+#define GL_IMAGE_2D_EXT                   0x904D
+#define GL_IMAGE_3D_EXT                   0x904E
+#define GL_IMAGE_2D_RECT_EXT              0x904F
+#define GL_IMAGE_CUBE_EXT                 0x9050
+#define GL_IMAGE_BUFFER_EXT               0x9051
+#define GL_IMAGE_1D_ARRAY_EXT             0x9052
+#define GL_IMAGE_2D_ARRAY_EXT             0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT       0x9054
+#define GL_IMAGE_2D_MULTISAMPLE_EXT       0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056
+#define GL_INT_IMAGE_1D_EXT               0x9057
+#define GL_INT_IMAGE_2D_EXT               0x9058
+#define GL_INT_IMAGE_3D_EXT               0x9059
+#define GL_INT_IMAGE_2D_RECT_EXT          0x905A
+#define GL_INT_IMAGE_CUBE_EXT             0x905B
+#define GL_INT_IMAGE_BUFFER_EXT           0x905C
+#define GL_INT_IMAGE_1D_ARRAY_EXT         0x905D
+#define GL_INT_IMAGE_2D_ARRAY_EXT         0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT   0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT   0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT      0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT      0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT      0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT    0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT  0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C
+#define GL_MAX_IMAGE_SAMPLES_EXT          0x906D
+#define GL_IMAGE_BINDING_FORMAT_EXT       0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT  0x00000002
+#define GL_UNIFORM_BARRIER_BIT_EXT        0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT  0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020
+#define GL_COMMAND_BARRIER_BIT_EXT        0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT   0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT  0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT    0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000
+#define GL_ALL_BARRIER_BITS_EXT           0xFFFFFFFF
+#endif
+
+#ifndef GL_EXT_vertex_attrib_64bit
+/* reuse GL_DOUBLE */
+#define GL_DOUBLE_VEC2_EXT                0x8FFC
+#define GL_DOUBLE_VEC3_EXT                0x8FFD
+#define GL_DOUBLE_VEC4_EXT                0x8FFE
+#define GL_DOUBLE_MAT2_EXT                0x8F46
+#define GL_DOUBLE_MAT3_EXT                0x8F47
+#define GL_DOUBLE_MAT4_EXT                0x8F48
+#define GL_DOUBLE_MAT2x3_EXT              0x8F49
+#define GL_DOUBLE_MAT2x4_EXT              0x8F4A
+#define GL_DOUBLE_MAT3x2_EXT              0x8F4B
+#define GL_DOUBLE_MAT3x4_EXT              0x8F4C
+#define GL_DOUBLE_MAT4x2_EXT              0x8F4D
+#define GL_DOUBLE_MAT4x3_EXT              0x8F4E
+#endif
+
+#ifndef GL_NV_gpu_program5
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F
+#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44
+#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV  0x8F45
+#endif
+
+#ifndef GL_NV_gpu_shader5
+#define GL_INT64_NV                       0x140E
+#define GL_UNSIGNED_INT64_NV              0x140F
+#define GL_INT8_NV                        0x8FE0
+#define GL_INT8_VEC2_NV                   0x8FE1
+#define GL_INT8_VEC3_NV                   0x8FE2
+#define GL_INT8_VEC4_NV                   0x8FE3
+#define GL_INT16_NV                       0x8FE4
+#define GL_INT16_VEC2_NV                  0x8FE5
+#define GL_INT16_VEC3_NV                  0x8FE6
+#define GL_INT16_VEC4_NV                  0x8FE7
+#define GL_INT64_VEC2_NV                  0x8FE9
+#define GL_INT64_VEC3_NV                  0x8FEA
+#define GL_INT64_VEC4_NV                  0x8FEB
+#define GL_UNSIGNED_INT8_NV               0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV          0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV          0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV          0x8FEF
+#define GL_UNSIGNED_INT16_NV              0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV         0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV         0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV         0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV         0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV         0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV         0x8FF7
+#define GL_FLOAT16_NV                     0x8FF8
+#define GL_FLOAT16_VEC2_NV                0x8FF9
+#define GL_FLOAT16_VEC3_NV                0x8FFA
+#define GL_FLOAT16_VEC4_NV                0x8FFB
+/* reuse GL_PATCHES */
+#endif
+
+#ifndef GL_NV_shader_buffer_store
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
+/* reuse GL_READ_WRITE */
+/* reuse GL_WRITE_ONLY */
+#endif
+
+#ifndef GL_NV_tessellation_program5
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV   0x86D8
+#define GL_TESS_CONTROL_PROGRAM_NV        0x891E
+#define GL_TESS_EVALUATION_PROGRAM_NV     0x891F
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75
+#endif
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+/* reuse GL_INT64_NV */
+/* reuse GL_UNSIGNED_INT64_NV */
+#endif
+
+#ifndef GL_NV_multisample_coverage
+#define GL_COLOR_SAMPLES_NV               0x8E20
+/* reuse GL_SAMPLES_ARB */
+#endif
+
+#ifndef GL_AMD_name_gen_delete
+#define GL_DATA_BUFFER_AMD                0x9151
+#define GL_PERFORMANCE_MONITOR_AMD        0x9152
+#define GL_QUERY_OBJECT_AMD               0x9153
+#define GL_VERTEX_ARRAY_OBJECT_AMD        0x9154
+#define GL_SAMPLER_OBJECT_AMD             0x9155
+#endif
+
+#ifndef GL_AMD_debug_output
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD   0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD  0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_AMD      0x9145
+#define GL_DEBUG_SEVERITY_HIGH_AMD        0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD      0x9147
+#define GL_DEBUG_SEVERITY_LOW_AMD         0x9148
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD   0x9149
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F
+#define GL_DEBUG_CATEGORY_OTHER_AMD       0x9150
+#endif
+
+#ifndef GL_NV_vdpau_interop
+#define GL_SURFACE_STATE_NV               0x86EB
+#define GL_SURFACE_REGISTERED_NV          0x86FD
+#define GL_SURFACE_MAPPED_NV              0x8700
+#define GL_WRITE_DISCARD_NV               0x88BE
+#endif
+
+#ifndef GL_AMD_transform_feedback3_lines_triangles
+#endif
+
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_DEPTH_CLAMP_NEAR_AMD           0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD            0x901F
+#endif
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_TEXTURE_SRGB_DECODE_EXT        0x8A48
+#define GL_DECODE_EXT                     0x8A49
+#define GL_SKIP_DECODE_EXT                0x8A4A
+#endif
+
+#ifndef GL_NV_texture_multisample
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV    0x9045
+#define GL_TEXTURE_COLOR_SAMPLES_NV       0x9046
+#endif
+
+#ifndef GL_AMD_blend_minmax_factor
+#define GL_FACTOR_MIN_AMD                 0x901C
+#define GL_FACTOR_MAX_AMD                 0x901D
+#endif
+
+#ifndef GL_AMD_sample_positions
+#define GL_SUBSAMPLE_DISTANCE_AMD         0x883F
+#endif
+
+#ifndef GL_EXT_x11_sync_object
+#define GL_SYNC_X11_FENCE_EXT             0x90E1
+#endif
+
+#ifndef GL_AMD_multi_draw_indirect
+#endif
+
+#ifndef GL_EXT_framebuffer_multisample_blit_scaled
+#define GL_SCALED_RESOLVE_FASTEST_EXT     0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT      0x90BB
+#endif
+
+#ifndef GL_NV_path_rendering
+#define GL_PATH_FORMAT_SVG_NV             0x9070
+#define GL_PATH_FORMAT_PS_NV              0x9071
+#define GL_STANDARD_FONT_NAME_NV          0x9072
+#define GL_SYSTEM_FONT_NAME_NV            0x9073
+#define GL_FILE_NAME_NV                   0x9074
+#define GL_PATH_STROKE_WIDTH_NV           0x9075
+#define GL_PATH_END_CAPS_NV               0x9076
+#define GL_PATH_INITIAL_END_CAP_NV        0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV       0x9078
+#define GL_PATH_JOIN_STYLE_NV             0x9079
+#define GL_PATH_MITER_LIMIT_NV            0x907A
+#define GL_PATH_DASH_CAPS_NV              0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV       0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV      0x907D
+#define GL_PATH_DASH_OFFSET_NV            0x907E
+#define GL_PATH_CLIENT_LENGTH_NV          0x907F
+#define GL_PATH_FILL_MODE_NV              0x9080
+#define GL_PATH_FILL_MASK_NV              0x9081
+#define GL_PATH_FILL_COVER_MODE_NV        0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV      0x9083
+#define GL_PATH_STROKE_MASK_NV            0x9084
+#define GL_COUNT_UP_NV                    0x9088
+#define GL_COUNT_DOWN_NV                  0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV    0x908A
+#define GL_CONVEX_HULL_NV                 0x908B
+#define GL_BOUNDING_BOX_NV                0x908D
+#define GL_TRANSLATE_X_NV                 0x908E
+#define GL_TRANSLATE_Y_NV                 0x908F
+#define GL_TRANSLATE_2D_NV                0x9090
+#define GL_TRANSLATE_3D_NV                0x9091
+#define GL_AFFINE_2D_NV                   0x9092
+#define GL_AFFINE_3D_NV                   0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV         0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV         0x9098
+#define GL_UTF8_NV                        0x909A
+#define GL_UTF16_NV                       0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV          0x909D
+#define GL_PATH_COORD_COUNT_NV            0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV       0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV        0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV      0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV    0x90A2
+#define GL_SQUARE_NV                      0x90A3
+#define GL_ROUND_NV                       0x90A4
+#define GL_TRIANGULAR_NV                  0x90A5
+#define GL_BEVEL_NV                       0x90A6
+#define GL_MITER_REVERT_NV                0x90A7
+#define GL_MITER_TRUNCATE_NV              0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV          0x90A9
+#define GL_USE_MISSING_GLYPH_NV           0x90AA
+#define GL_PATH_ERROR_POSITION_NV         0x90AB
+#define GL_PATH_FOG_GEN_MODE_NV           0x90AC
+#define GL_ACCUM_ADJACENT_PAIRS_NV        0x90AD
+#define GL_ADJACENT_PAIRS_NV              0x90AE
+#define GL_FIRST_TO_REST_NV               0x90AF
+#define GL_PATH_GEN_MODE_NV               0x90B0
+#define GL_PATH_GEN_COEFF_NV              0x90B1
+#define GL_PATH_GEN_COLOR_FORMAT_NV       0x90B2
+#define GL_PATH_GEN_COMPONENTS_NV         0x90B3
+#define GL_PATH_STENCIL_FUNC_NV           0x90B7
+#define GL_PATH_STENCIL_REF_NV            0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV     0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV       0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV      0x90B4
+#define GL_MOVE_TO_RESETS_NV              0x90B5
+#define GL_MOVE_TO_CONTINUES_NV           0x90B6
+#define GL_CLOSE_PATH_NV                  0x00
+#define GL_MOVE_TO_NV                     0x02
+#define GL_RELATIVE_MOVE_TO_NV            0x03
+#define GL_LINE_TO_NV                     0x04
+#define GL_RELATIVE_LINE_TO_NV            0x05
+#define GL_HORIZONTAL_LINE_TO_NV          0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_VERTICAL_LINE_TO_NV            0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV   0x09
+#define GL_QUADRATIC_CURVE_TO_NV          0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV              0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV     0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV   0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV       0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV            0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV   0x13
+#define GL_SMALL_CW_ARC_TO_NV             0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV    0x15
+#define GL_LARGE_CCW_ARC_TO_NV            0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV   0x17
+#define GL_LARGE_CW_ARC_TO_NV             0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV    0x19
+#define GL_RESTART_PATH_NV                0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV    0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV     0xF4
+#define GL_RECT_NV                        0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV         0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV          0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV     0xFC
+#define GL_ARC_TO_NV                      0xFE
+#define GL_RELATIVE_ARC_TO_NV             0xFF
+#define GL_BOLD_BIT_NV                    0x01
+#define GL_ITALIC_BIT_NV                  0x02
+#define GL_GLYPH_WIDTH_BIT_NV             0x01
+#define GL_GLYPH_HEIGHT_BIT_NV            0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV       0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV       0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV       0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV       0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV       0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV       0x00100000
+#define GL_FONT_ASCENDER_BIT_NV           0x00200000
+#define GL_FONT_DESCENDER_BIT_NV          0x00400000
+#define GL_FONT_HEIGHT_BIT_NV             0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV  0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV        0x10000000
+/* reuse GL_PRIMARY_COLOR */
+/* reuse GL_PRIMARY_COLOR_NV */
+/* reuse GL_SECONDARY_COLOR_NV */
+#endif
+
+#ifndef GL_AMD_pinned_memory
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160
+#endif
+
+#ifndef GL_AMD_stencil_operation_extended
+#define GL_SET_AMD                        0x874A
+#define GL_REPLACE_VALUE_AMD              0x874B
+#define GL_STENCIL_OP_VALUE_AMD           0x874C
+#define GL_STENCIL_BACK_OP_VALUE_AMD      0x874D
+#endif
+
+#ifndef GL_AMD_vertex_shader_viewport_index
+#endif
+
+#ifndef GL_AMD_vertex_shader_layer
+#endif
+
+#ifndef GL_NV_bindless_texture
+#endif
+
+#ifndef GL_NV_shader_atomic_float
+#endif
+
+#ifndef GL_AMD_query_buffer_object
+#define GL_QUERY_BUFFER_AMD               0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD       0x9193
+#define GL_QUERY_RESULT_NO_WAIT_AMD       0x9194
+#endif
+
+#ifndef GL_NV_compute_program5
+#define GL_COMPUTE_PROGRAM_NV             0x90FB
+#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC
+#endif
+
+#ifndef GL_NV_shader_storage_buffer_object
+#endif
+
+#ifndef GL_NV_shader_atomic_counters
+#endif
+
+#ifndef GL_NV_deep_texture3D
+#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0
+#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV   0x90D1
+#endif
+
+#ifndef GL_NVX_conditional_render
+#endif
+
+#ifndef GL_AMD_sparse_texture
+#define GL_VIRTUAL_PAGE_SIZE_X_AMD        0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_AMD        0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_AMD        0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD    0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A
+#define GL_MIN_SPARSE_LEVEL_AMD           0x919B
+#define GL_MIN_LOD_WARNING_AMD            0x919C
+#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001
+#endif
+
+#ifndef GL_AMD_shader_trinary_minmax
+#endif
+
+#ifndef GL_INTEL_map_texture
+#define GL_TEXTURE_MEMORY_LAYOUT_INTEL    0x83FF
+#define GL_LAYOUT_DEFAULT_INTEL           0
+#define GL_LAYOUT_LINEAR_INTEL            1
+#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2
+#endif
+
+#ifndef GL_NV_draw_texture
+#endif
+
+
+/*************************************************************/
+
+#include <stddef.h>
+#ifndef GL_VERSION_2_0
+/* GL type for program/shader text */
+typedef char GLchar;
+#endif
+
+#ifndef GL_VERSION_1_5
+/* GL types for handling large vertex buffer objects */
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+/* GL types for handling large vertex buffer objects */
+typedef ptrdiff_t GLintptrARB;
+typedef ptrdiff_t GLsizeiptrARB;
+#endif
+
+#ifndef GL_ARB_shader_objects
+/* GL types for program/shader text and shader object handles */
+typedef char GLcharARB;
+typedef unsigned int GLhandleARB;
+#endif
+
+/* GL type for "half" precision (s10e5) float data in host memory */
+#ifndef GL_ARB_half_float_pixel
+typedef unsigned short GLhalfARB;
+#endif
+
+#ifndef GL_NV_half_float
+typedef unsigned short GLhalfNV;
+#endif
+
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glxext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GL_EXT_timer_query extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+/* Fallback if nothing above works */
+#include <inttypes.h>
+#endif
+#endif
+
+#ifndef GL_EXT_timer_query
+typedef int64_t GLint64EXT;
+typedef uint64_t GLuint64EXT;
+#endif
+
+#ifndef GL_ARB_sync
+typedef int64_t GLint64;
+typedef uint64_t GLuint64;
+typedef struct __GLsync *GLsync;
+#endif
+
+#ifndef GL_ARB_cl_event
+/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */
+struct _cl_context;
+struct _cl_event;
+#endif
+
+#ifndef GL_ARB_debug_output
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
+#endif
+
+#ifndef GL_AMD_debug_output
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
+#endif
+
+#ifndef GL_KHR_debug
+typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
+#endif
+
+#ifndef GL_NV_vdpau_interop
+typedef GLintptr GLvdpauSurfaceNV;
+#endif
+
+#ifndef GL_OES_fixed_point
+/* GLint must be 32 bits, a relatively safe assumption on modern CPUs */
+typedef GLint GLfixed;
+#endif
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glBlendEquation (GLenum mode);
+GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogram (GLenum target);
+GLAPI void APIENTRY glResetMinmax (GLenum target);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum texture);
+GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img);
+GLAPI void APIENTRY glClientActiveTexture (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+#endif
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);
+GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFogCoordf (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoordd (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2sv (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3sv (const GLshort *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQuery (GLuint id);
+GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQuery (GLenum target);
+GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer);
+GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target);
+GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params);
+#endif
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GLAPI void APIENTRY glCompileShader (GLuint shader);
+GLAPI GLuint APIENTRY glCreateProgram (void);
+GLAPI GLuint APIENTRY glCreateShader (GLenum type);
+GLAPI void APIENTRY glDeleteProgram (GLuint program);
+GLAPI void APIENTRY glDeleteShader (GLuint shader);
+GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer);
+GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
+GLAPI GLboolean APIENTRY glIsShader (GLuint shader);
+GLAPI void APIENTRY glLinkProgram (GLuint program);
+GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);
+GLAPI void APIENTRY glUseProgram (GLuint program);
+GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1i (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glValidateProgram (GLuint program);
+GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+/* OpenGL 3.0 also reuses entry points from these extensions: */
+/* ARB_framebuffer_object */
+/* ARB_map_buffer_range */
+/* ARB_vertex_array_object */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glEnablei (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisablei (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedback (void);
+GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp);
+GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRender (void);
+GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp);
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+#endif
+
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 1
+/* OpenGL 3.1 also reuses entry points from these extensions: */
+/* ARB_copy_buffer */
+/* ARB_uniform_buffer_object */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount);
+GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index);
+#endif
+
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+/* OpenGL 3.2 also reuses entry points from these extensions: */
+/* ARB_draw_elements_base_vertex */
+/* ARB_provoking_vertex */
+/* ARB_sync */
+/* ARB_texture_multisample */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif
+
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+/* OpenGL 3.3 also reuses entry points from these extensions: */
+/* ARB_blend_func_extended */
+/* ARB_sampler_objects */
+/* ARB_explicit_attrib_location, but it has none */
+/* ARB_occlusion_query2 (no entry points) */
+/* ARB_shader_bit_encoding (no entry points) */
+/* ARB_texture_rgb10_a2ui (no entry points) */
+/* ARB_texture_swizzle (no entry points) */
+/* ARB_timer_query */
+/* ARB_vertex_type_2_10_10_10_rev */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+#endif
+
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+/* OpenGL 4.0 also reuses entry points from these extensions: */
+/* ARB_texture_query_lod (no entry points) */
+/* ARB_draw_indirect */
+/* ARB_gpu_shader5 (no entry points) */
+/* ARB_gpu_shader_fp64 */
+/* ARB_shader_subroutine */
+/* ARB_tessellation_shader */
+/* ARB_texture_buffer_object_rgb32 (no entry points) */
+/* ARB_texture_cube_map_array (no entry points) */
+/* ARB_texture_gather (no entry points) */
+/* ARB_transform_feedback2 */
+/* ARB_transform_feedback3 */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShading (GLfloat value);
+GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 1
+/* OpenGL 4.1 reuses entry points from these extensions: */
+/* ARB_ES2_compatibility */
+/* ARB_get_program_binary */
+/* ARB_separate_shader_objects */
+/* ARB_shader_precision (no entry points) */
+/* ARB_vertex_attrib_64bit */
+/* ARB_viewport_array */
+#endif
+
+#ifndef GL_VERSION_4_2
+#define GL_VERSION_4_2 1
+/* OpenGL 4.2 reuses entry points from these extensions: */
+/* ARB_base_instance */
+/* ARB_shading_language_420pack (no entry points) */
+/* ARB_transform_feedback_instanced */
+/* ARB_compressed_texture_pixel_storage (no entry points) */
+/* ARB_conservative_depth (no entry points) */
+/* ARB_internalformat_query */
+/* ARB_map_buffer_alignment (no entry points) */
+/* ARB_shader_atomic_counters */
+/* ARB_shader_image_load_store */
+/* ARB_shading_language_packing (no entry points) */
+/* ARB_texture_storage */
+#endif
+
+#ifndef GL_VERSION_4_3
+#define GL_VERSION_4_3 1
+/* OpenGL 4.3 reuses entry points from these extensions: */
+/* ARB_arrays_of_arrays (no entry points, GLSL only) */
+/* ARB_fragment_layer_viewport (no entry points, GLSL only) */
+/* ARB_shader_image_size (no entry points, GLSL only) */
+/* ARB_ES3_compatibility (no entry points) */
+/* ARB_clear_buffer_object */
+/* ARB_compute_shader */
+/* ARB_copy_image */
+/* KHR_debug (includes ARB_debug_output commands promoted to KHR without suffixes) */
+/* ARB_explicit_uniform_location (no entry points) */
+/* ARB_framebuffer_no_attachments */
+/* ARB_internalformat_query2 */
+/* ARB_invalidate_subdata */
+/* ARB_multi_draw_indirect */
+/* ARB_program_interface_query */
+/* ARB_robust_buffer_access_behavior (no entry points) */
+/* ARB_shader_storage_buffer_object */
+/* ARB_stencil_texturing (no entry points) */
+/* ARB_texture_buffer_range */
+/* ARB_texture_query_levels (no entry points) */
+/* ARB_texture_storage_multisample */
+/* ARB_texture_view */
+/* ARB_vertex_attrib_binding */
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert);
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img);
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights);
+GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights);
+GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights);
+GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights);
+GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights);
+GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights);
+GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights);
+GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights);
+GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glVertexBlendARB (GLint count);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#endif
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#endif
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program);
+GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string);
+GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer);
+GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);
+#endif
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer);
+GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
+GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
+GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target);
+GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);
+#endif
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id);
+GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQueryARB (GLenum target);
+GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj);
+GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname);
+GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj);
+GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType);
+GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
+GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj);
+GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);
+GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj);
+GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj);
+GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params);
+GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
+typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
+typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
+typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#endif
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+#endif
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#endif
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#endif
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+#endif
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#endif
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+#endif
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
+#endif
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#endif
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+#endif
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+#endif
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#endif
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#endif
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#endif
+
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmap (GLenum target);
+GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+#endif
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
+#endif
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+#endif
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+#endif
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#endif
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArray (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+#endif
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_ARB_uniform_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices);
+GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif
+
+#ifndef GL_ARB_compatibility
+#define GL_ARB_compatibility 1
+#endif
+
+#ifndef GL_ARB_copy_buffer
+#define GL_ARB_copy_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#endif
+
+#ifndef GL_ARB_shader_texture_lod
+#define GL_ARB_shader_texture_lod 1
+#endif
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#endif
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#define GL_ARB_draw_elements_base_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);
+GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);
+#endif
+
+#ifndef GL_ARB_fragment_coord_conventions
+#define GL_ARB_fragment_coord_conventions 1
+#endif
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProvokingVertex (GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode);
+#endif
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map 1
+#endif
+
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GLAPI GLboolean APIENTRY glIsSync (GLsync sync);
+GLAPI void APIENTRY glDeleteSync (GLsync sync);
+GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+#endif
+
+#ifndef GL_ARB_texture_multisample
+#define GL_ARB_texture_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask);
+#endif
+
+#ifndef GL_ARB_vertex_array_bgra
+#define GL_ARB_vertex_array_bgra 1
+#endif
+
+#ifndef GL_ARB_draw_buffers_blend
+#define GL_ARB_draw_buffers_blend 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+
+#ifndef GL_ARB_sample_shading
+#define GL_ARB_sample_shading 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value);
+#endif
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_ARB_texture_cube_map_array 1
+#endif
+
+#ifndef GL_ARB_texture_gather
+#define GL_ARB_texture_gather 1
+#endif
+
+#ifndef GL_ARB_texture_query_lod
+#define GL_ARB_texture_query_lod 1
+#endif
+
+#ifndef GL_ARB_shading_language_include
+#define GL_ARB_shading_language_include 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length);
+GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc 1
+#endif
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_ARB_blend_func_extended 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name);
+#endif
+
+#ifndef GL_ARB_explicit_attrib_location
+#define GL_ARB_explicit_attrib_location 1
+#endif
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ARB_occlusion_query2 1
+#endif
+
+#ifndef GL_ARB_sampler_objects
+#define GL_ARB_sampler_objects 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler);
+GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_ARB_shader_bit_encoding
+#define GL_ARB_shader_bit_encoding 1
+#endif
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_ARB_texture_rgb10_a2ui 1
+#endif
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_ARB_texture_swizzle 1
+#endif
+
+#ifndef GL_ARB_timer_query
+#define GL_ARB_timer_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target);
+GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params);
+#endif
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+#define GL_ARB_vertex_type_2_10_10_10_rev 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+#endif
+
+#ifndef GL_ARB_draw_indirect
+#define GL_ARB_draw_indirect 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect);
+GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect);
+#endif
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_ARB_gpu_shader5 1
+#endif
+
+#ifndef GL_ARB_gpu_shader_fp64
+#define GL_ARB_gpu_shader_fp64 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x);
+GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params);
+#endif
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ARB_shader_subroutine 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices);
+GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params);
+GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices);
+typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+#endif
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_ARB_tessellation_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values);
+#endif
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+#define GL_ARB_texture_buffer_object_rgb32 1
+#endif
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_ARB_transform_feedback2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedback (void);
+GLAPI void APIENTRY glResumeTransformFeedback (void);
+GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);
+#endif
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_ARB_transform_feedback3 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream);
+GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id);
+GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);
+typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_ARB_ES2_compatibility 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReleaseShaderCompiler (void);
+GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);
+GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GLAPI void APIENTRY glClearDepthf (GLfloat d);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+#endif
+
+#ifndef GL_ARB_get_program_binary
+#define GL_ARB_get_program_binary 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
+GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
+GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
+typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+#endif
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_ARB_separate_shader_objects 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* const *strings);
+GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0);
+GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* const *strings);
+typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+#endif
+
+#ifndef GL_ARB_vertex_attrib_64bit
+#define GL_ARB_vertex_attrib_64bit 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+#endif
+
+#ifndef GL_ARB_viewport_array
+#define GL_ARB_viewport_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v);
+GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f);
+GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f);
+typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
+#endif
+
+#ifndef GL_ARB_cl_event
+#define GL_ARB_cl_event 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags);
+#endif
+
+#ifndef GL_ARB_debug_output
+#define GL_ARB_debug_output 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif
+
+#ifndef GL_ARB_robustness
+#define GL_ARB_robustness 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void);
+GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table);
+GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image);
+GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span);
+GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);
+GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);
+GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img);
+GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img);
+GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);
+typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img);
+typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+#endif
+
+#ifndef GL_ARB_shader_stencil_export
+#define GL_ARB_shader_stencil_export 1
+#endif
+
+#ifndef GL_ARB_base_instance
+#define GL_ARB_base_instance 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#endif
+
+#ifndef GL_ARB_shading_language_420pack
+#define GL_ARB_shading_language_420pack 1
+#endif
+
+#ifndef GL_ARB_transform_feedback_instanced
+#define GL_ARB_transform_feedback_instanced 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount);
+GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_ARB_compressed_texture_pixel_storage 1
+#endif
+
+#ifndef GL_ARB_conservative_depth
+#define GL_ARB_conservative_depth 1
+#endif
+
+#ifndef GL_ARB_internalformat_query
+#define GL_ARB_internalformat_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_ARB_map_buffer_alignment 1
+#endif
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ARB_shader_atomic_counters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_ARB_shader_image_load_store 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+#endif
+
+#ifndef GL_ARB_shading_language_packing
+#define GL_ARB_shading_language_packing 1
+#endif
+
+#ifndef GL_ARB_texture_storage
+#define GL_ARB_texture_storage 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_KHR_texture_compression_astc_ldr 1
+#endif
+
+#ifndef GL_KHR_debug
+#define GL_KHR_debug 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GLAPI void APIENTRY glPopDebugGroup (void);
+GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+
+#ifndef GL_ARB_arrays_of_arrays
+#define GL_ARB_arrays_of_arrays 1
+#endif
+
+#ifndef GL_ARB_clear_buffer_object
+#define GL_ARB_clear_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data);
+#endif
+
+#ifndef GL_ARB_compute_shader
+#define GL_ARB_compute_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+#endif
+
+#ifndef GL_ARB_copy_image
+#define GL_ARB_copy_image 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif
+
+#ifndef GL_ARB_texture_view
+#define GL_ARB_texture_view 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_ARB_vertex_attrib_binding 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+#endif
+
+#ifndef GL_ARB_robustness_isolation
+#define GL_ARB_robustness_isolation 1
+#endif
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_ARB_ES3_compatibility 1
+#endif
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_ARB_explicit_uniform_location 1
+#endif
+
+#ifndef GL_ARB_fragment_layer_viewport
+#define GL_ARB_fragment_layer_viewport 1
+#endif
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_ARB_framebuffer_no_attachments 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_internalformat_query2
+#define GL_ARB_internalformat_query2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+#endif
+
+#ifndef GL_ARB_invalidate_subdata
+#define GL_ARB_invalidate_subdata 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level);
+GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer);
+GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_ARB_multi_draw_indirect
+#define GL_ARB_multi_draw_indirect 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#endif
+
+#ifndef GL_ARB_program_interface_query
+#define GL_ARB_program_interface_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+#endif
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#define GL_ARB_robust_buffer_access_behavior 1
+#endif
+
+#ifndef GL_ARB_shader_image_size
+#define GL_ARB_shader_image_size 1
+#endif
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_ARB_shader_storage_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+#endif
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_ARB_stencil_texturing 1
+#endif
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_ARB_texture_buffer_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif
+
+#ifndef GL_ARB_texture_query_levels
+#define GL_ARB_texture_query_levels 1
+#endif
+
+#ifndef GL_ARB_texture_storage_multisample
+#define GL_ARB_texture_storage_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum target);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum target);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+#endif
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint i);
+GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer);
+GLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);
+typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#endif
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#endif
+
+#ifndef GL_SGIS_texture_select
+#define GL_SGIS_texture_select 1
+/* This used to be SGIX prefix, which was an error in the header */
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint factor);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield mask);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#endif
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#endif
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum mode);
+GLAPI void APIENTRY glTextureLightEXT (GLenum pname);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer);
+GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *v);
+GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *v);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_SGIX_fog_scale 1
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+
+#ifndef GL_INGR_blend_func_separate
+#define GL_INGR_blend_func_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#endif
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
+#endif
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);
+#endif
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#endif
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#endif
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence);
+GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFinishFenceNV (GLuint fence);
+GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#endif
+
+#ifndef GL_IBM_static_data
+#define GL_IBM_static_data 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target);
+#endif
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_IBM_texture_mirrored_repeat 1
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);
+GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);
+typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences);
+GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id);
+GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#endif
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle);
+GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);
+typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr);
+GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr);
+GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr);
+GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr);
+GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr);
+GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr);
+GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr);
+GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr);
+GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);
+typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);
+typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);
+typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+#endif
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+#endif
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+#endif
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#endif
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer);
+GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#endif
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences);
+GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence);
+GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name);
+GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);
+typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+#endif
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+#endif
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer);
+GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer);
+GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+#endif
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#endif
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+#endif
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);
+#endif
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_ATI_pixel_format_float 1
+/* This is really a WGL extension, but defines some associated GL enums.
+ * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string.
+ */
+#endif
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#endif
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+#endif
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+#endif
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#endif
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s);
+GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s);
+GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);
+GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);
+GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);
+GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);
+GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);
+GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);
+typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
+typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+#endif
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const GLvoid *pointer);
+GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+#endif
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveRestartNV (void);
+GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+#endif
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+#endif
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+#endif
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+#endif
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#endif
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_OES_byte_coordinates
+#define GL_OES_byte_coordinates 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s);
+GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t);
+GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord1bOES (GLbyte s);
+GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t);
+GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex2bOES (GLbyte x);
+GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y);
+GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z);
+GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s);
+typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x);
+typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y);
+typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z);
+typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords);
+#endif
+
+#ifndef GL_OES_fixed_point
+#define GL_OES_fixed_point 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value);
+GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref);
+GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearDepthxOES (GLfixed depth);
+GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);
+GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue);
+GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glColor3xvOES (const GLfixed *components);
+GLAPI void APIENTRY glColor4xvOES (const GLfixed *components);
+GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f);
+GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u);
+GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v);
+GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer);
+GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation);
+GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v);
+GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values);
+GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glIndexxOES (GLfixed component);
+GLAPI void APIENTRY glIndexxvOES (const GLfixed *component);
+GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glLineWidthxOES (GLfixed width);
+GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2);
+GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s);
+GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t);
+GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);
+GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glPassThroughxOES (GLfixed token);
+GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values);
+GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor);
+GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glPointSizexOES (GLfixed size);
+GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);
+GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2);
+GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert);
+GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glTexCoord1xOES (GLfixed s);
+GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t);
+GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glVertex2xOES (GLfixed x);
+GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value);
+typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref);
+typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);
+typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue);
+typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u);
+typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v);
+typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer);
+typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v);
+typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values);
+typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component);
+typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component);
+typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);
+typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2);
+typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);
+typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token);
+typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values);
+typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2);
+typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s);
+typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x);
+typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords);
+#endif
+
+#ifndef GL_OES_single_precision
+#define GL_OES_single_precision 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f);
+GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);
+GLAPI void APIENTRY glClearDepthfOES (GLclampf depth);
+GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f);
+typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);
+typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation);
+#endif
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_OES_compressed_paletted_texture 1
+#endif
+
+#ifndef GL_OES_read_format
+#define GL_OES_read_format 1
+#endif
+
+#ifndef GL_OES_query_matrix
+#define GL_OES_query_matrix 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent);
+#endif
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+#endif
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+#endif
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+#endif
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+#endif
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+#endif
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+#endif
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+#endif
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+#endif
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#endif
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+#endif
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+#endif
+
+#ifndef GL_GREMEDY_string_marker
+#define GL_GREMEDY_string_marker 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string);
+#endif
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#endif
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_EXT_stencil_clear_tag 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);
+#endif
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#endif
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_MESAX_texture_stack
+#define GL_MESAX_texture_stack 1
+#endif
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);
+#endif
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#endif
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+
+#ifndef GL_NV_gpu_program4
+#define GL_NV_gpu_program4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+#endif
+
+#ifndef GL_NV_geometry_program4
+#define GL_NV_geometry_program4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit);
+GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_EXT_geometry_shader4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+#endif
+
+#ifndef GL_NV_vertex_program4
+#define GL_NV_vertex_program4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+#endif
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_EXT_packed_float
+#define GL_EXT_packed_float 1
+#endif
+
+#ifndef GL_EXT_texture_array
+#define GL_EXT_texture_array 1
+#endif
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_EXT_texture_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc 1
+#endif
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#endif
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_EXT_texture_shared_exponent 1
+#endif
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_NV_depth_buffer_float 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glClearDepthdNV (GLdouble depth);
+GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
+#endif
+
+#ifndef GL_NV_fragment_program4
+#define GL_NV_fragment_program4 1
+#endif
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef GL_NV_geometry_shader4
+#define GL_NV_geometry_shader4 1
+#endif
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_NV_parameter_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#endif
+
+#ifndef GL_EXT_draw_buffers2
+#define GL_EXT_draw_buffers2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
+#endif
+
+#ifndef GL_NV_transform_feedback
+#define GL_NV_transform_feedback 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackNV (void);
+GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode);
+GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name);
+GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location);
+GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#endif
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_EXT_bindable_uniform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer);
+GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location);
+GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
+typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
+#endif
+
+#ifndef GL_EXT_texture_integer
+#define GL_EXT_texture_integer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
+typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#endif
+
+#ifndef GL_GREMEDY_frame_terminator
+#define GL_GREMEDY_frame_terminator 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameTerminatorGREMEDY (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);
+#endif
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRenderNV (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#endif
+
+#ifndef GL_NV_present_video
+#define GL_NV_present_video 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#endif
+
+#ifndef GL_EXT_transform_feedback
+#define GL_EXT_transform_feedback 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackEXT (void);
+GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#endif
+
+#ifndef GL_EXT_direct_state_access
+#define GL_EXT_direct_state_access 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixPopEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixPushEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture);
+GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data);
+GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data);
+GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img);
+GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
+GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img);
+GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string);
+GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer);
+GLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params);
+GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data);
+GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target);
+GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target);
+GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x);
+GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data);
+typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid *img);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid *img);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer);
+typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target);
+typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+#endif
+
+#ifndef GL_EXT_vertex_array_bgra
+#define GL_EXT_vertex_array_bgra 1
+#endif
+
+#ifndef GL_EXT_texture_swizzle
+#define GL_EXT_texture_swizzle 1
+#endif
+
+#ifndef GL_NV_explicit_multisample
+#define GL_NV_explicit_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask);
+GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer);
+#endif
+
+#ifndef GL_NV_transform_feedback2
+#define GL_NV_transform_feedback2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedbackNV (void);
+GLAPI void APIENTRY glResumeTransformFeedbackNV (void);
+GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id);
+#endif
+
+#ifndef GL_ATI_meminfo
+#define GL_ATI_meminfo 1
+#endif
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data);
+GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data);
+typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif
+
+#ifndef GL_AMD_texture_texture4
+#define GL_AMD_texture_texture4 1
+#endif
+
+#ifndef GL_AMD_vertex_shader_tessellator
+#define GL_AMD_vertex_shader_tessellator 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor);
+GLAPI void APIENTRY glTessellationModeAMD (GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_texture_snorm
+#define GL_EXT_texture_snorm 1
+#endif
+
+#ifndef GL_AMD_draw_buffers_blend
+#define GL_AMD_draw_buffers_blend 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#endif
+
+#ifndef GL_APPLE_texture_range
+#define GL_APPLE_texture_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer);
+GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params);
+#endif
+
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#endif
+
+#ifndef GL_APPLE_vertex_program_evaluators
+#define GL_APPLE_vertex_program_evaluators 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#endif
+
+#ifndef GL_APPLE_aux_depth_stencil
+#define GL_APPLE_aux_depth_stencil 1
+#endif
+
+#ifndef GL_APPLE_object_purgeable
+#define GL_APPLE_object_purgeable 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_APPLE_row_bytes
+#define GL_APPLE_row_bytes 1
+#endif
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+#endif
+
+#ifndef GL_NV_video_capture
+#define GL_NV_video_capture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#endif
+
+#ifndef GL_NV_copy_image
+#define GL_NV_copy_image 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program);
+GLAPI void APIENTRY glActiveProgramEXT (GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);
+#endif
+
+#ifndef GL_NV_parameter_buffer_object2
+#define GL_NV_parameter_buffer_object2 1
+#endif
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_NV_shader_buffer_load 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access);
+GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target);
+GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target);
+GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access);
+GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer);
+GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer);
+GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result);
+GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params);
+GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);
+typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_NV_vertex_buffer_unified_memory 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride);
+GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
+#endif
+
+#ifndef GL_NV_texture_barrier
+#define GL_NV_texture_barrier 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureBarrierNV (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
+#endif
+
+#ifndef GL_AMD_shader_stencil_export
+#define GL_AMD_shader_stencil_export 1
+#endif
+
+#ifndef GL_AMD_seamless_cubemap_per_texture
+#define GL_AMD_seamless_cubemap_per_texture 1
+#endif
+
+#ifndef GL_AMD_conservative_depth
+#define GL_AMD_conservative_depth 1
+#endif
+
+#ifndef GL_EXT_shader_image_load_store
+#define GL_EXT_shader_image_load_store 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers);
+#endif
+
+#ifndef GL_EXT_vertex_attrib_64bit
+#define GL_EXT_vertex_attrib_64bit 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+#endif
+
+#ifndef GL_NV_gpu_program5
+#define GL_NV_gpu_program5 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param);
+#endif
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);
+GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);
+GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);
+GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+
+#ifndef GL_NV_shader_buffer_store
+#define GL_NV_shader_buffer_store 1
+#endif
+
+#ifndef GL_NV_tessellation_program5
+#define GL_NV_tessellation_program5 1
+#endif
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+#define GL_NV_vertex_attrib_integer_64bit 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+#endif
+
+#ifndef GL_NV_multisample_coverage
+#define GL_NV_multisample_coverage 1
+#endif
+
+#ifndef GL_AMD_name_gen_delete
+#define GL_AMD_name_gen_delete 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names);
+GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names);
+GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names);
+typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names);
+typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name);
+#endif
+
+#ifndef GL_AMD_debug_output
+#define GL_AMD_debug_output 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#endif
+
+#ifndef GL_NV_vdpau_interop
+#define GL_NV_vdpau_interop 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress);
+GLAPI void APIENTRY glVDPAUFiniNV (void);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access);
+GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress);
+typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access);
+typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#endif
+
+#ifndef GL_AMD_transform_feedback3_lines_triangles
+#define GL_AMD_transform_feedback3_lines_triangles 1
+#endif
+
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_AMD_depth_clamp_separate 1
+#endif
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+#endif
+
+#ifndef GL_NV_texture_multisample
+#define GL_NV_texture_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#endif
+
+#ifndef GL_AMD_blend_minmax_factor
+#define GL_AMD_blend_minmax_factor 1
+#endif
+
+#ifndef GL_AMD_sample_positions
+#define GL_AMD_sample_positions 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val);
+#endif
+
+#ifndef GL_EXT_x11_sync_object
+#define GL_EXT_x11_sync_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#endif
+
+#ifndef GL_AMD_multi_draw_indirect
+#define GL_AMD_multi_draw_indirect 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride);
+#endif
+
+#ifndef GL_EXT_framebuffer_multisample_blit_scaled
+#define GL_EXT_framebuffer_multisample_blit_scaled 1
+#endif
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range);
+GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GLAPI GLboolean APIENTRY glIsPathNV (GLuint path);
+GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const GLvoid *pathString);
+GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathFogGenNV (GLenum genMode);
+GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value);
+GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid *coords);
+typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const GLvoid *pathString);
+typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+#endif
+
+#ifndef GL_AMD_pinned_memory
+#define GL_AMD_pinned_memory 1
+#endif
+
+#ifndef GL_AMD_stencil_operation_extended
+#define GL_AMD_stencil_operation_extended 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value);
+#endif
+
+#ifndef GL_AMD_vertex_shader_viewport_index
+#define GL_AMD_vertex_shader_viewport_index 1
+#endif
+
+#ifndef GL_AMD_vertex_shader_layer
+#define GL_AMD_vertex_shader_layer 1
+#endif
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#endif
+
+#ifndef GL_NV_shader_atomic_float
+#define GL_NV_shader_atomic_float 1
+#endif
+
+#ifndef GL_AMD_query_buffer_object
+#define GL_AMD_query_buffer_object 1
+#endif
+
+#ifndef GL_NV_compute_program5
+#define GL_NV_compute_program5 1
+#endif
+
+#ifndef GL_NV_shader_storage_buffer_object
+#define GL_NV_shader_storage_buffer_object 1
+#endif
+
+#ifndef GL_NV_shader_atomic_counters
+#define GL_NV_shader_atomic_counters 1
+#endif
+
+#ifndef GL_NV_deep_texture3D
+#define GL_NV_deep_texture3D 1
+#endif
+
+#ifndef GL_NVX_conditional_render
+#define GL_NVX_conditional_render 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id);
+GLAPI void APIENTRY glEndConditionalRenderNVX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void);
+#endif
+
+#ifndef GL_AMD_sparse_texture
+#define GL_AMD_sparse_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#endif
+
+#ifndef GL_AMD_shader_trinary_minmax
+#define GL_AMD_shader_trinary_minmax 1
+#endif
+
+#ifndef GL_INTEL_map_texture
+#define GL_INTEL_map_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture);
+GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level);
+GLAPI GLvoid* APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, const GLint *stride, const GLenum *layout);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level);
+typedef GLvoid* (APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, const GLint *stride, const GLenum *layout);
+#endif
+
+#ifndef GL_NV_draw_texture
+#define GL_NV_draw_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/glxext.h b/src/VBox/Devices/Graphics/vmsvga_glext/glxext.h
new file mode 100644
index 0000000..388c361
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/glxext.h
@@ -0,0 +1,1028 @@
+#ifndef __glxext_h_
+#define __glxext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** THIS FILE IS OBSOLETE. Please migrate away from using the
+** ".spec" files and the headers generated from them to the
+** XML Registry and headers generated from that. See
+**   http://www.opengl.org/registry/api/README.txt
+** for more information.
+** 
+** 
+** Copyright (c) 2007-2013 The Khronos Group Inc.
+** 
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+** 
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+** 
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glxext.h last updated 2013/06/10 */
+/* Current version at http://www.opengl.org/registry/ */
+#define GLX_GLXEXT_VERSION 36
+
+#ifndef GLX_VERSION_1_3
+#define GLX_WINDOW_BIT                     0x00000001
+#define GLX_PIXMAP_BIT                     0x00000002
+#define GLX_PBUFFER_BIT                    0x00000004
+#define GLX_RGBA_BIT                       0x00000001
+#define GLX_COLOR_INDEX_BIT                0x00000002
+#define GLX_PBUFFER_CLOBBER_MASK           0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT          0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT         0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT           0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT          0x00000008
+#define GLX_AUX_BUFFERS_BIT                0x00000010
+#define GLX_DEPTH_BUFFER_BIT               0x00000020
+#define GLX_STENCIL_BUFFER_BIT             0x00000040
+#define GLX_ACCUM_BUFFER_BIT               0x00000080
+#define GLX_CONFIG_CAVEAT                  0x20
+#define GLX_X_VISUAL_TYPE                  0x22
+#define GLX_TRANSPARENT_TYPE               0x23
+#define GLX_TRANSPARENT_INDEX_VALUE        0x24
+#define GLX_TRANSPARENT_RED_VALUE          0x25
+#define GLX_TRANSPARENT_GREEN_VALUE        0x26
+#define GLX_TRANSPARENT_BLUE_VALUE         0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE        0x28
+#define GLX_DONT_CARE                      0xFFFFFFFF
+#define GLX_NONE                           0x8000
+#define GLX_SLOW_CONFIG                    0x8001
+#define GLX_TRUE_COLOR                     0x8002
+#define GLX_DIRECT_COLOR                   0x8003
+#define GLX_PSEUDO_COLOR                   0x8004
+#define GLX_STATIC_COLOR                   0x8005
+#define GLX_GRAY_SCALE                     0x8006
+#define GLX_STATIC_GRAY                    0x8007
+#define GLX_TRANSPARENT_RGB                0x8008
+#define GLX_TRANSPARENT_INDEX              0x8009
+#define GLX_VISUAL_ID                      0x800B
+#define GLX_SCREEN                         0x800C
+#define GLX_NON_CONFORMANT_CONFIG          0x800D
+#define GLX_DRAWABLE_TYPE                  0x8010
+#define GLX_RENDER_TYPE                    0x8011
+#define GLX_X_RENDERABLE                   0x8012
+#define GLX_FBCONFIG_ID                    0x8013
+#define GLX_RGBA_TYPE                      0x8014
+#define GLX_COLOR_INDEX_TYPE               0x8015
+#define GLX_MAX_PBUFFER_WIDTH              0x8016
+#define GLX_MAX_PBUFFER_HEIGHT             0x8017
+#define GLX_MAX_PBUFFER_PIXELS             0x8018
+#define GLX_PRESERVED_CONTENTS             0x801B
+#define GLX_LARGEST_PBUFFER                0x801C
+#define GLX_WIDTH                          0x801D
+#define GLX_HEIGHT                         0x801E
+#define GLX_EVENT_MASK                     0x801F
+#define GLX_DAMAGED                        0x8020
+#define GLX_SAVED                          0x8021
+#define GLX_WINDOW                         0x8022
+#define GLX_PBUFFER                        0x8023
+#define GLX_PBUFFER_HEIGHT                 0x8040
+#define GLX_PBUFFER_WIDTH                  0x8041
+#endif
+
+#ifndef GLX_VERSION_1_4
+#define GLX_SAMPLE_BUFFERS                 100000
+#define GLX_SAMPLES                        100001
+#endif
+
+#ifndef GLX_ARB_get_proc_address
+#endif
+
+#ifndef GLX_ARB_multisample
+#define GLX_SAMPLE_BUFFERS_ARB             100000
+#define GLX_SAMPLES_ARB                    100001
+#endif
+
+#ifndef GLX_ARB_vertex_buffer_object
+#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095
+#endif
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_RGBA_FLOAT_TYPE_ARB            0x20B9
+#define GLX_RGBA_FLOAT_BIT_ARB             0x00000004
+#endif
+
+#ifndef GLX_ARB_framebuffer_sRGB
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB   0x20B2
+#endif
+
+#ifndef GLX_ARB_create_context
+#define GLX_CONTEXT_DEBUG_BIT_ARB          0x00000001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_MAJOR_VERSION_ARB      0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB      0x2092
+#define GLX_CONTEXT_FLAGS_ARB              0x2094
+#endif
+
+#ifndef GLX_ARB_create_context_profile
+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB   0x00000001
+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_PROFILE_MASK_ARB       0x9126
+#endif
+
+#ifndef GLX_ARB_create_context_robustness
+#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB  0x00000004
+#define GLX_LOSE_CONTEXT_ON_RESET_ARB      0x8252
+#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GLX_NO_RESET_NOTIFICATION_ARB      0x8261
+#endif
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SAMPLE_BUFFERS_SGIS            100000
+#define GLX_SAMPLES_SGIS                   100001
+#endif
+
+#ifndef GLX_EXT_visual_info
+#define GLX_X_VISUAL_TYPE_EXT              0x22
+#define GLX_TRANSPARENT_TYPE_EXT           0x23
+#define GLX_TRANSPARENT_INDEX_VALUE_EXT    0x24
+#define GLX_TRANSPARENT_RED_VALUE_EXT      0x25
+#define GLX_TRANSPARENT_GREEN_VALUE_EXT    0x26
+#define GLX_TRANSPARENT_BLUE_VALUE_EXT     0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE_EXT    0x28
+#define GLX_NONE_EXT                       0x8000
+#define GLX_TRUE_COLOR_EXT                 0x8002
+#define GLX_DIRECT_COLOR_EXT               0x8003
+#define GLX_PSEUDO_COLOR_EXT               0x8004
+#define GLX_STATIC_COLOR_EXT               0x8005
+#define GLX_GRAY_SCALE_EXT                 0x8006
+#define GLX_STATIC_GRAY_EXT                0x8007
+#define GLX_TRANSPARENT_RGB_EXT            0x8008
+#define GLX_TRANSPARENT_INDEX_EXT          0x8009
+#endif
+
+#ifndef GLX_SGI_swap_control
+#endif
+
+#ifndef GLX_SGI_video_sync
+#endif
+
+#ifndef GLX_SGI_make_current_read
+#endif
+
+#ifndef GLX_SGIX_video_source
+#endif
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_VISUAL_CAVEAT_EXT              0x20
+#define GLX_SLOW_VISUAL_EXT                0x8001
+#define GLX_NON_CONFORMANT_VISUAL_EXT      0x800D
+/* reuse GLX_NONE_EXT */
+#endif
+
+#ifndef GLX_EXT_import_context
+#define GLX_SHARE_CONTEXT_EXT              0x800A
+#define GLX_VISUAL_ID_EXT                  0x800B
+#define GLX_SCREEN_EXT                     0x800C
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_WINDOW_BIT_SGIX                0x00000001
+#define GLX_PIXMAP_BIT_SGIX                0x00000002
+#define GLX_RGBA_BIT_SGIX                  0x00000001
+#define GLX_COLOR_INDEX_BIT_SGIX           0x00000002
+#define GLX_DRAWABLE_TYPE_SGIX             0x8010
+#define GLX_RENDER_TYPE_SGIX               0x8011
+#define GLX_X_RENDERABLE_SGIX              0x8012
+#define GLX_FBCONFIG_ID_SGIX               0x8013
+#define GLX_RGBA_TYPE_SGIX                 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX          0x8015
+/* reuse GLX_SCREEN_EXT */
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_PBUFFER_BIT_SGIX               0x00000004
+#define GLX_BUFFER_CLOBBER_MASK_SGIX       0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX     0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX    0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT_SGIX      0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX     0x00000008
+#define GLX_AUX_BUFFERS_BIT_SGIX           0x00000010
+#define GLX_DEPTH_BUFFER_BIT_SGIX          0x00000020
+#define GLX_STENCIL_BUFFER_BIT_SGIX        0x00000040
+#define GLX_ACCUM_BUFFER_BIT_SGIX          0x00000080
+#define GLX_SAMPLE_BUFFERS_BIT_SGIX        0x00000100
+#define GLX_MAX_PBUFFER_WIDTH_SGIX         0x8016
+#define GLX_MAX_PBUFFER_HEIGHT_SGIX        0x8017
+#define GLX_MAX_PBUFFER_PIXELS_SGIX        0x8018
+#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX     0x8019
+#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX    0x801A
+#define GLX_PRESERVED_CONTENTS_SGIX        0x801B
+#define GLX_LARGEST_PBUFFER_SGIX           0x801C
+#define GLX_WIDTH_SGIX                     0x801D
+#define GLX_HEIGHT_SGIX                    0x801E
+#define GLX_EVENT_MASK_SGIX                0x801F
+#define GLX_DAMAGED_SGIX                   0x8020
+#define GLX_SAVED_SGIX                     0x8021
+#define GLX_WINDOW_SGIX                    0x8022
+#define GLX_PBUFFER_SGIX                   0x8023
+#endif
+
+#ifndef GLX_SGI_cushion
+#endif
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SYNC_FRAME_SGIX                0x00000000
+#define GLX_SYNC_SWAP_SGIX                 0x00000001
+#endif
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX     0x8024
+#endif
+
+#ifndef GLX_SGIX_swap_group
+#endif
+
+#ifndef GLX_SGIX_swap_barrier
+#endif
+
+#ifndef GLX_SGIS_blended_overlay
+#define GLX_BLENDED_RGBA_SGIS              0x8025
+#endif
+
+#ifndef GLX_SGIS_shared_multisample
+#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
+#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
+#endif
+
+#ifndef GLX_SUN_get_transparent_index
+#endif
+
+#ifndef GLX_3DFX_multisample
+#define GLX_SAMPLE_BUFFERS_3DFX            0x8050
+#define GLX_SAMPLES_3DFX                   0x8051
+#endif
+
+#ifndef GLX_MESA_copy_sub_buffer
+#endif
+
+#ifndef GLX_MESA_pixmap_colormap
+#endif
+
+#ifndef GLX_MESA_release_buffers
+#endif
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_3DFX_WINDOW_MODE_MESA          0x1
+#define GLX_3DFX_FULLSCREEN_MODE_MESA      0x2
+#endif
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_VISUAL_SELECT_GROUP_SGIX       0x8028
+#endif
+
+#ifndef GLX_OML_swap_method
+#define GLX_SWAP_METHOD_OML                0x8060
+#define GLX_SWAP_EXCHANGE_OML              0x8061
+#define GLX_SWAP_COPY_OML                  0x8062
+#define GLX_SWAP_UNDEFINED_OML             0x8063
+#endif
+
+#ifndef GLX_OML_sync_control
+#endif
+
+#ifndef GLX_NV_float_buffer
+#define GLX_FLOAT_COMPONENTS_NV            0x20B0
+#endif
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
+#define GLX_BAD_HYPERPIPE_CONFIG_SGIX      91
+#define GLX_BAD_HYPERPIPE_SGIX             92
+#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX    0x00000001
+#define GLX_HYPERPIPE_RENDER_PIPE_SGIX     0x00000002
+#define GLX_PIPE_RECT_SGIX                 0x00000001
+#define GLX_PIPE_RECT_LIMITS_SGIX          0x00000002
+#define GLX_HYPERPIPE_STEREO_SGIX          0x00000003
+#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX   0x00000004
+#define GLX_HYPERPIPE_ID_SGIX              0x8030
+#endif
+
+#ifndef GLX_MESA_agp_offset
+#endif
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT   0x20B1
+#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT    0x00000008
+#endif
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x20B2
+#endif
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_TEXTURE_1D_BIT_EXT             0x00000001
+#define GLX_TEXTURE_2D_BIT_EXT             0x00000002
+#define GLX_TEXTURE_RECTANGLE_BIT_EXT      0x00000004
+#define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
+#define GLX_BIND_TO_TEXTURE_RGBA_EXT       0x20D1
+#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT     0x20D2
+#define GLX_BIND_TO_TEXTURE_TARGETS_EXT    0x20D3
+#define GLX_Y_INVERTED_EXT                 0x20D4
+#define GLX_TEXTURE_FORMAT_EXT             0x20D5
+#define GLX_TEXTURE_TARGET_EXT             0x20D6
+#define GLX_MIPMAP_TEXTURE_EXT             0x20D7
+#define GLX_TEXTURE_FORMAT_NONE_EXT        0x20D8
+#define GLX_TEXTURE_FORMAT_RGB_EXT         0x20D9
+#define GLX_TEXTURE_FORMAT_RGBA_EXT        0x20DA
+#define GLX_TEXTURE_1D_EXT                 0x20DB
+#define GLX_TEXTURE_2D_EXT                 0x20DC
+#define GLX_TEXTURE_RECTANGLE_EXT          0x20DD
+#define GLX_FRONT_LEFT_EXT                 0x20DE
+#define GLX_FRONT_RIGHT_EXT                0x20DF
+#define GLX_BACK_LEFT_EXT                  0x20E0
+#define GLX_BACK_RIGHT_EXT                 0x20E1
+#define GLX_FRONT_EXT                      GLX_FRONT_LEFT_EXT
+#define GLX_BACK_EXT                       GLX_BACK_LEFT_EXT
+#define GLX_AUX0_EXT                       0x20E2
+#define GLX_AUX1_EXT                       0x20E3
+#define GLX_AUX2_EXT                       0x20E4
+#define GLX_AUX3_EXT                       0x20E5
+#define GLX_AUX4_EXT                       0x20E6
+#define GLX_AUX5_EXT                       0x20E7
+#define GLX_AUX6_EXT                       0x20E8
+#define GLX_AUX7_EXT                       0x20E9
+#define GLX_AUX8_EXT                       0x20EA
+#define GLX_AUX9_EXT                       0x20EB
+#endif
+
+#ifndef GLX_NV_present_video
+#define GLX_NUM_VIDEO_SLOTS_NV             0x20F0
+#endif
+
+#ifndef GLX_NV_video_out
+#define GLX_VIDEO_OUT_COLOR_NV             0x20C3
+#define GLX_VIDEO_OUT_ALPHA_NV             0x20C4
+#define GLX_VIDEO_OUT_DEPTH_NV             0x20C5
+#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV   0x20C6
+#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV   0x20C7
+#define GLX_VIDEO_OUT_FRAME_NV             0x20C8
+#define GLX_VIDEO_OUT_FIELD_1_NV           0x20C9
+#define GLX_VIDEO_OUT_FIELD_2_NV           0x20CA
+#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB
+#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC
+#endif
+
+#ifndef GLX_NV_swap_group
+#endif
+
+#ifndef GLX_NV_video_capture
+#define GLX_DEVICE_ID_NV                   0x20CD
+#define GLX_UNIQUE_ID_NV                   0x20CE
+#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV     0x20CF
+#endif
+
+#ifndef GLX_EXT_swap_control
+#define GLX_SWAP_INTERVAL_EXT              0x20F1
+#define GLX_MAX_SWAP_INTERVAL_EXT          0x20F2
+#endif
+
+#ifndef GLX_NV_copy_image
+#endif
+
+#ifndef GLX_INTEL_swap_event
+#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000
+#define GLX_EXCHANGE_COMPLETE_INTEL        0x8180
+#define GLX_COPY_COMPLETE_INTEL            0x8181
+#define GLX_FLIP_COMPLETE_INTEL            0x8182
+#endif
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_COVERAGE_SAMPLES_NV            100001
+#define GLX_COLOR_SAMPLES_NV               0x20B3
+#endif
+
+#ifndef GLX_AMD_gpu_association
+#define GLX_GPU_VENDOR_AMD                 0x1F00
+#define GLX_GPU_RENDERER_STRING_AMD        0x1F01
+#define GLX_GPU_OPENGL_VERSION_STRING_AMD  0x1F02
+#define GLX_GPU_FASTEST_TARGET_GPUS_AMD    0x21A2
+#define GLX_GPU_RAM_AMD                    0x21A3
+#define GLX_GPU_CLOCK_AMD                  0x21A4
+#define GLX_GPU_NUM_PIPES_AMD              0x21A5
+#define GLX_GPU_NUM_SIMD_AMD               0x21A6
+#define GLX_GPU_NUM_RB_AMD                 0x21A7
+#define GLX_GPU_NUM_SPI_AMD                0x21A8
+#endif
+
+#ifndef GLX_EXT_create_context_es2_profile
+#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT    0x00000004
+#endif
+
+#ifndef GLX_EXT_create_context_es_profile
+#define GLX_CONTEXT_ES_PROFILE_BIT_EXT     0x00000004
+#endif
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_LATE_SWAPS_TEAR_EXT            0x20F3
+#endif
+
+#ifndef GLX_EXT_buffer_age
+#define GLX_BACK_BUFFER_AGE_EXT            0x20F4
+#endif
+
+
+/*************************************************************/
+
+#ifndef GLX_ARB_get_proc_address
+typedef void (*__GLXextFuncPtr)(void);
+#endif
+
+#ifndef GLX_SGIX_video_source
+typedef XID GLXVideoSourceSGIX;
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+typedef XID GLXFBConfigIDSGIX;
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+typedef XID GLXPbufferSGIX;
+typedef struct {
+    int type;
+    unsigned long serial;	  /* # of last request processed by server */
+    Bool send_event;		  /* true if this came for SendEvent request */
+    Display *display;		  /* display the event was read from */
+    GLXDrawable drawable;	  /* i.d. of Drawable */
+    int event_type;		  /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
+    int draw_type;		  /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
+    unsigned int mask;	  /* mask indicating which buffers are affected*/
+    int x, y;
+    int width, height;
+    int count;		  /* if nonzero, at least this many more */
+} GLXBufferClobberEventSGIX;
+#endif
+
+#ifndef GLX_NV_video_output
+typedef unsigned int GLXVideoDeviceNV;
+#endif
+
+#ifndef GLX_NV_video_capture
+typedef XID GLXVideoCaptureDeviceNV;
+#endif
+
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GLX_OML_sync_control extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <inttypes.h>     /* Fallback option */
+#endif
+#endif
+
+#ifndef GLX_VERSION_1_3
+#define GLX_VERSION_1_3 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXFBConfig * glXGetFBConfigs (Display *dpy, int screen, int *nelements);
+extern GLXFBConfig * glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements);
+extern int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value);
+extern XVisualInfo * glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config);
+extern GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+extern void glXDestroyWindow (Display *dpy, GLXWindow win);
+extern GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+extern void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap);
+extern GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list);
+extern void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf);
+extern void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+extern GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+extern Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+extern GLXDrawable glXGetCurrentReadDrawable (void);
+extern Display * glXGetCurrentDisplay (void);
+extern int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value);
+extern void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+extern void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
+typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#endif
+
+#ifndef GLX_VERSION_1_4
+#define GLX_VERSION_1_4 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern __GLXextFuncPtr glXGetProcAddress (const GLubyte *procName);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
+#endif
+
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
+#endif
+
+#ifndef GLX_ARB_multisample
+#define GLX_ARB_multisample 1
+#endif
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_ARB_fbconfig_float 1
+#endif
+
+#ifndef GLX_ARB_framebuffer_sRGB
+#define GLX_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef GLX_ARB_create_context
+#define GLX_ARB_create_context 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#endif
+
+#ifndef GLX_ARB_create_context_profile
+#define GLX_ARB_create_context_profile 1
+#endif
+
+#ifndef GLX_ARB_create_context_robustness
+#define GLX_ARB_create_context_robustness 1
+#endif
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SGIS_multisample 1
+#endif
+
+#ifndef GLX_EXT_visual_info
+#define GLX_EXT_visual_info 1
+#endif
+
+#ifndef GLX_SGI_swap_control
+#define GLX_SGI_swap_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXSwapIntervalSGI (int interval);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+#endif
+
+#ifndef GLX_SGI_video_sync
+#define GLX_SGI_video_sync 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetVideoSyncSGI (unsigned int *count);
+extern int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
+typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
+#endif
+
+#ifndef GLX_SGI_make_current_read
+#define GLX_SGI_make_current_read 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+extern GLXDrawable glXGetCurrentReadDrawableSGI (void);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
+#endif
+
+#ifndef GLX_SGIX_video_source
+#define GLX_SGIX_video_source 1
+#ifdef _VL_H
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+extern void glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXVideoSourceSGIX ( * PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+typedef void ( * PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#endif /* _VL_H */
+#endif
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_EXT_visual_rating 1
+#endif
+
+#ifndef GLX_EXT_import_context
+#define GLX_EXT_import_context 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Display * glXGetCurrentDisplayEXT (void);
+extern int glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value);
+extern GLXContextID glXGetContextIDEXT (const GLXContext context);
+extern GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID);
+extern void glXFreeContextEXT (Display *dpy, GLXContext context);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Display * ( * PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
+typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
+typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
+typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
+typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_SGIX_fbconfig 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+extern GLXFBConfigSGIX * glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements);
+extern GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+extern GLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+extern XVisualInfo * glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config);
+extern GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
+typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_SGIX_pbuffer 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+extern void glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf);
+extern int glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+extern void glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask);
+extern void glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXPbufferSGIX ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
+typedef int ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
+typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#endif
+
+#ifndef GLX_SGI_cushion
+#define GLX_SGI_cushion 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCushionSGI (Display *dpy, Window window, float cushion);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
+#endif
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SGIX_video_resize 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window);
+extern int glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h);
+extern int glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+extern int glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+extern int glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
+typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
+typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
+#endif
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_SGIX_dmbuffer 1
+#ifdef _DM_BUFFER_H_
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#endif /* _DM_BUFFER_H_ */
+#endif
+
+#ifndef GLX_SGIX_swap_group
+#define GLX_SGIX_swap_group 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#endif
+
+#ifndef GLX_SGIX_swap_barrier
+#define GLX_SGIX_swap_barrier 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier);
+extern Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
+#endif
+
+#ifndef GLX_SUN_get_transparent_index
+#define GLX_SUN_get_transparent_index 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Status glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
+#endif
+
+#ifndef GLX_MESA_copy_sub_buffer
+#define GLX_MESA_copy_sub_buffer 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#endif
+
+#ifndef GLX_MESA_pixmap_colormap
+#define GLX_MESA_pixmap_colormap 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#endif
+
+#ifndef GLX_MESA_release_buffers
+#define GLX_MESA_release_buffers 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
+#endif
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_MESA_set_3dfx_mode 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXSet3DfxModeMESA (int mode);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
+#endif
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_SGIX_visual_select_group 1
+#endif
+
+#ifndef GLX_OML_swap_method
+#define GLX_OML_swap_method 1
+#endif
+
+#ifndef GLX_OML_sync_control
+#define GLX_OML_sync_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+extern Bool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+extern int64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+extern Bool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+extern Bool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#endif
+
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
+#endif
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_SGIX_hyperpipe 1
+
+typedef struct {
+    char    pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int     networkId;
+} GLXHyperpipeNetworkSGIX;
+
+typedef struct {
+    char    pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int     channel;
+    unsigned int
+      participationType;
+    int     timeSlice;
+} GLXHyperpipeConfigSGIX;
+
+typedef struct {
+    char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int srcXOrigin, srcYOrigin, srcWidth, srcHeight;
+    int destXOrigin, destYOrigin, destWidth, destHeight;
+} GLXPipeRect;
+
+typedef struct {
+    char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int XOrigin, YOrigin, maxHeight, maxWidth;
+} GLXPipeRectLimits;
+
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes);
+extern int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+extern GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes);
+extern int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId);
+extern int glXBindHyperpipeSGIX (Display *dpy, int hpId);
+extern int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+extern int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+extern int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
+typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
+typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#endif
+
+#ifndef GLX_MESA_agp_offset
+#define GLX_MESA_agp_offset 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern unsigned int glXGetAGPOffsetMESA (const void *pointer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);
+#endif
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_EXT_fbconfig_packed_float 1
+#endif
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_EXT_texture_from_pixmap 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+extern void glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer);
+#endif
+
+#ifndef GLX_NV_present_video
+#define GLX_NV_present_video 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern unsigned int * glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements);
+extern int glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef unsigned int * ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+#endif
+
+#ifndef GLX_NV_video_output
+#define GLX_NV_video_output 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+extern int glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
+extern int glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+extern int glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf);
+extern int glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+extern int glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
+typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+
+#ifndef GLX_NV_swap_group
+#define GLX_NV_swap_group 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group);
+extern Bool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier);
+extern Bool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+extern Bool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+extern Bool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count);
+extern Bool glXResetFrameCountNV (Display *dpy, int screen);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group);
+typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier);
+typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count);
+typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);
+#endif
+
+#ifndef GLX_NV_video_capture
+#define GLX_NV_video_capture 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+extern GLXVideoCaptureDeviceNV * glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements);
+extern void glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
+extern int glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+extern void glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
+typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
+#endif
+
+#ifndef GLX_EXT_swap_control
+#define GLX_EXT_swap_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);
+#endif
+
+#ifndef GLX_NV_copy_image
+#define GLX_NV_copy_image 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef GLX_INTEL_swap_event
+#define GLX_INTEL_swap_event 1
+#endif
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_NV_multisample_coverage 1
+#endif
+
+#ifndef GLX_EXT_create_context_es2_profile
+#define GLX_EXT_create_context_es2_profile 1
+#endif
+
+#ifndef GLX_EXT_create_context_es_profile
+#define GLX_EXT_create_context_es_profile 1
+#endif
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_EXT_swap_control_tear 1
+#endif
+
+#ifndef GLX_EXT_buffer_age
+#define GLX_EXT_buffer_age 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/wglext.h b/src/VBox/Devices/Graphics/vmsvga_glext/wglext.h
new file mode 100644
index 0000000..2db5896
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/wglext.h
@@ -0,0 +1,950 @@
+#ifndef __wglext_h_
+#define __wglext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** THIS FILE IS OBSOLETE. Please migrate away from using the
+** ".spec" files and the headers generated from them to the
+** XML Registry and headers generated from that. See
+**   http://www.opengl.org/registry/api/README.txt
+** for more information.
+** 
+** 
+** Copyright (c) 2007-2013 The Khronos Group Inc.
+** 
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+** 
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+** 
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number */
+/* wglext.h last updated 2013/06/10 */
+/* Current version at http://www.opengl.org/registry/ */
+#define WGL_WGLEXT_VERSION 26
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB  0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB       0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB     0x00000008
+#endif
+
+#ifndef WGL_ARB_multisample
+#define WGL_SAMPLE_BUFFERS_ARB         0x2041
+#define WGL_SAMPLES_ARB                0x2042
+#endif
+
+#ifndef WGL_ARB_extensions_string
+#endif
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_NUMBER_PIXEL_FORMATS_ARB   0x2000
+#define WGL_DRAW_TO_WINDOW_ARB         0x2001
+#define WGL_DRAW_TO_BITMAP_ARB         0x2002
+#define WGL_ACCELERATION_ARB           0x2003
+#define WGL_NEED_PALETTE_ARB           0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB    0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB     0x2006
+#define WGL_SWAP_METHOD_ARB            0x2007
+#define WGL_NUMBER_OVERLAYS_ARB        0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB       0x2009
+#define WGL_TRANSPARENT_ARB            0x200A
+#define WGL_TRANSPARENT_RED_VALUE_ARB  0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+#define WGL_SHARE_DEPTH_ARB            0x200C
+#define WGL_SHARE_STENCIL_ARB          0x200D
+#define WGL_SHARE_ACCUM_ARB            0x200E
+#define WGL_SUPPORT_GDI_ARB            0x200F
+#define WGL_SUPPORT_OPENGL_ARB         0x2010
+#define WGL_DOUBLE_BUFFER_ARB          0x2011
+#define WGL_STEREO_ARB                 0x2012
+#define WGL_PIXEL_TYPE_ARB             0x2013
+#define WGL_COLOR_BITS_ARB             0x2014
+#define WGL_RED_BITS_ARB               0x2015
+#define WGL_RED_SHIFT_ARB              0x2016
+#define WGL_GREEN_BITS_ARB             0x2017
+#define WGL_GREEN_SHIFT_ARB            0x2018
+#define WGL_BLUE_BITS_ARB              0x2019
+#define WGL_BLUE_SHIFT_ARB             0x201A
+#define WGL_ALPHA_BITS_ARB             0x201B
+#define WGL_ALPHA_SHIFT_ARB            0x201C
+#define WGL_ACCUM_BITS_ARB             0x201D
+#define WGL_ACCUM_RED_BITS_ARB         0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB       0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB        0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB       0x2021
+#define WGL_DEPTH_BITS_ARB             0x2022
+#define WGL_STENCIL_BITS_ARB           0x2023
+#define WGL_AUX_BUFFERS_ARB            0x2024
+#define WGL_NO_ACCELERATION_ARB        0x2025
+#define WGL_GENERIC_ACCELERATION_ARB   0x2026
+#define WGL_FULL_ACCELERATION_ARB      0x2027
+#define WGL_SWAP_EXCHANGE_ARB          0x2028
+#define WGL_SWAP_COPY_ARB              0x2029
+#define WGL_SWAP_UNDEFINED_ARB         0x202A
+#define WGL_TYPE_RGBA_ARB              0x202B
+#define WGL_TYPE_COLORINDEX_ARB        0x202C
+#endif
+
+#ifndef WGL_ARB_make_current_read
+#define ERROR_INVALID_PIXEL_TYPE_ARB   0x2043
+#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+#endif
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_DRAW_TO_PBUFFER_ARB        0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB     0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB      0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB     0x2030
+#define WGL_PBUFFER_LARGEST_ARB        0x2033
+#define WGL_PBUFFER_WIDTH_ARB          0x2034
+#define WGL_PBUFFER_HEIGHT_ARB         0x2035
+#define WGL_PBUFFER_LOST_ARB           0x2036
+#endif
+
+#ifndef WGL_ARB_render_texture
+#define WGL_BIND_TO_TEXTURE_RGB_ARB    0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB   0x2071
+#define WGL_TEXTURE_FORMAT_ARB         0x2072
+#define WGL_TEXTURE_TARGET_ARB         0x2073
+#define WGL_MIPMAP_TEXTURE_ARB         0x2074
+#define WGL_TEXTURE_RGB_ARB            0x2075
+#define WGL_TEXTURE_RGBA_ARB           0x2076
+#define WGL_NO_TEXTURE_ARB             0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB       0x2078
+#define WGL_TEXTURE_1D_ARB             0x2079
+#define WGL_TEXTURE_2D_ARB             0x207A
+#define WGL_MIPMAP_LEVEL_ARB           0x207B
+#define WGL_CUBE_MAP_FACE_ARB          0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB             0x2083
+#define WGL_FRONT_RIGHT_ARB            0x2084
+#define WGL_BACK_LEFT_ARB              0x2085
+#define WGL_BACK_RIGHT_ARB             0x2086
+#define WGL_AUX0_ARB                   0x2087
+#define WGL_AUX1_ARB                   0x2088
+#define WGL_AUX2_ARB                   0x2089
+#define WGL_AUX3_ARB                   0x208A
+#define WGL_AUX4_ARB                   0x208B
+#define WGL_AUX5_ARB                   0x208C
+#define WGL_AUX6_ARB                   0x208D
+#define WGL_AUX7_ARB                   0x208E
+#define WGL_AUX8_ARB                   0x208F
+#define WGL_AUX9_ARB                   0x2090
+#endif
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_TYPE_RGBA_FLOAT_ARB        0x21A0
+#endif
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
+#endif
+
+#ifndef WGL_ARB_create_context
+#define WGL_CONTEXT_DEBUG_BIT_ARB      0x00000001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB  0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB  0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB    0x2093
+#define WGL_CONTEXT_FLAGS_ARB          0x2094
+#define ERROR_INVALID_VERSION_ARB      0x2095
+#endif
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_CONTEXT_PROFILE_MASK_ARB   0x9126
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define ERROR_INVALID_PROFILE_ARB      0x2096
+#endif
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB  0x8252
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB  0x8261
+#endif
+
+#ifndef WGL_EXT_make_current_read
+#define ERROR_INVALID_PIXEL_TYPE_EXT   0x2043
+#endif
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_NUMBER_PIXEL_FORMATS_EXT   0x2000
+#define WGL_DRAW_TO_WINDOW_EXT         0x2001
+#define WGL_DRAW_TO_BITMAP_EXT         0x2002
+#define WGL_ACCELERATION_EXT           0x2003
+#define WGL_NEED_PALETTE_EXT           0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT    0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT     0x2006
+#define WGL_SWAP_METHOD_EXT            0x2007
+#define WGL_NUMBER_OVERLAYS_EXT        0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT       0x2009
+#define WGL_TRANSPARENT_EXT            0x200A
+#define WGL_TRANSPARENT_VALUE_EXT      0x200B
+#define WGL_SHARE_DEPTH_EXT            0x200C
+#define WGL_SHARE_STENCIL_EXT          0x200D
+#define WGL_SHARE_ACCUM_EXT            0x200E
+#define WGL_SUPPORT_GDI_EXT            0x200F
+#define WGL_SUPPORT_OPENGL_EXT         0x2010
+#define WGL_DOUBLE_BUFFER_EXT          0x2011
+#define WGL_STEREO_EXT                 0x2012
+#define WGL_PIXEL_TYPE_EXT             0x2013
+#define WGL_COLOR_BITS_EXT             0x2014
+#define WGL_RED_BITS_EXT               0x2015
+#define WGL_RED_SHIFT_EXT              0x2016
+#define WGL_GREEN_BITS_EXT             0x2017
+#define WGL_GREEN_SHIFT_EXT            0x2018
+#define WGL_BLUE_BITS_EXT              0x2019
+#define WGL_BLUE_SHIFT_EXT             0x201A
+#define WGL_ALPHA_BITS_EXT             0x201B
+#define WGL_ALPHA_SHIFT_EXT            0x201C
+#define WGL_ACCUM_BITS_EXT             0x201D
+#define WGL_ACCUM_RED_BITS_EXT         0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT       0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT        0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT       0x2021
+#define WGL_DEPTH_BITS_EXT             0x2022
+#define WGL_STENCIL_BITS_EXT           0x2023
+#define WGL_AUX_BUFFERS_EXT            0x2024
+#define WGL_NO_ACCELERATION_EXT        0x2025
+#define WGL_GENERIC_ACCELERATION_EXT   0x2026
+#define WGL_FULL_ACCELERATION_EXT      0x2027
+#define WGL_SWAP_EXCHANGE_EXT          0x2028
+#define WGL_SWAP_COPY_EXT              0x2029
+#define WGL_SWAP_UNDEFINED_EXT         0x202A
+#define WGL_TYPE_RGBA_EXT              0x202B
+#define WGL_TYPE_COLORINDEX_EXT        0x202C
+#endif
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_DRAW_TO_PBUFFER_EXT        0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT     0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT      0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT     0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT  0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
+#define WGL_PBUFFER_LARGEST_EXT        0x2033
+#define WGL_PBUFFER_WIDTH_EXT          0x2034
+#define WGL_PBUFFER_HEIGHT_EXT         0x2035
+#endif
+
+#ifndef WGL_EXT_depth_float
+#define WGL_DEPTH_FLOAT_EXT            0x2040
+#endif
+
+#ifndef WGL_3DFX_multisample
+#define WGL_SAMPLE_BUFFERS_3DFX        0x2060
+#define WGL_SAMPLES_3DFX               0x2061
+#endif
+
+#ifndef WGL_EXT_multisample
+#define WGL_SAMPLE_BUFFERS_EXT         0x2041
+#define WGL_SAMPLES_EXT                0x2042
+#endif
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+#endif
+
+#ifndef WGL_I3D_gamma
+#define WGL_GAMMA_TABLE_SIZE_I3D       0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D  0x204F
+#endif
+
+#ifndef WGL_I3D_genlock
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+#endif
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D      0x00000002
+#endif
+
+#ifndef WGL_I3D_swap_frame_lock
+#endif
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV   0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV    0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV         0x20A7
+#endif
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV       0x20A2
+#endif
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_TYPE_RGBA_FLOAT_ATI        0x21A0
+#endif
+
+#ifndef WGL_NV_float_buffer
+#define WGL_FLOAT_COMPONENTS_NV        0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV         0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV        0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV       0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV      0x20B8
+#endif
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_STEREO_EMITTER_ENABLE_3DL  0x2055
+#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
+#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
+#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
+#endif
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
+#endif
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
+#endif
+
+#ifndef WGL_NV_present_video
+#define WGL_NUM_VIDEO_SLOTS_NV         0x20F0
+#endif
+
+#ifndef WGL_NV_video_out
+#define WGL_BIND_TO_VIDEO_RGB_NV       0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV      0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV         0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV         0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV         0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define WGL_VIDEO_OUT_FRAME            0x20C8
+#define WGL_VIDEO_OUT_FIELD_1          0x20C9
+#define WGL_VIDEO_OUT_FIELD_2          0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
+#endif
+
+#ifndef WGL_NV_swap_group
+#endif
+
+#ifndef WGL_NV_gpu_affinity
+#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
+#endif
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_GPU_VENDOR_AMD             0x1F00
+#define WGL_GPU_RENDERER_STRING_AMD    0x1F01
+#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define WGL_GPU_RAM_AMD                0x21A3
+#define WGL_GPU_CLOCK_AMD              0x21A4
+#define WGL_GPU_NUM_PIPES_AMD          0x21A5
+#define WGL_GPU_NUM_SIMD_AMD           0x21A6
+#define WGL_GPU_NUM_RB_AMD             0x21A7
+#define WGL_GPU_NUM_SPI_AMD            0x21A8
+#endif
+
+#ifndef WGL_NV_video_capture
+#define WGL_UNIQUE_ID_NV               0x20CE
+#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+#endif
+
+#ifndef WGL_NV_copy_image
+#endif
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_COVERAGE_SAMPLES_NV        0x2042
+#define WGL_COLOR_SAMPLES_NV           0x20B9
+#endif
+
+#ifndef WGL_EXT_create_context_es2_profile
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+#endif
+
+#ifndef WGL_NV_DX_interop
+#define WGL_ACCESS_READ_ONLY_NV        0x00000000
+#define WGL_ACCESS_READ_WRITE_NV       0x00000001
+#define WGL_ACCESS_WRITE_DISCARD_NV    0x00000002
+#endif
+
+#ifndef WGL_NV_DX_interop2
+#endif
+
+#ifndef WGL_EXT_swap_control_tear
+#endif
+
+
+/*************************************************************/
+
+#ifndef WGL_ARB_pbuffer
+DECLARE_HANDLE(HPBUFFERARB);
+#endif
+#ifndef WGL_EXT_pbuffer
+DECLARE_HANDLE(HPBUFFEREXT);
+#endif
+#ifndef WGL_NV_present_video
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+#endif
+#ifndef WGL_NV_video_output
+DECLARE_HANDLE(HPVIDEODEV);
+#endif
+#ifndef WGL_NV_gpu_affinity
+DECLARE_HANDLE(HPGPUNV);
+DECLARE_HANDLE(HGPUNV);
+
+typedef struct _GPU_DEVICE {
+    DWORD  cb;
+    CHAR   DeviceName[32];
+    CHAR   DeviceString[128];
+    DWORD  Flags;
+    RECT   rcVirtualScreen;
+} GPU_DEVICE, *PGPU_DEVICE;
+#endif
+#ifndef WGL_NV_video_capture
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+#endif
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);
+extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);
+extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);
+extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#endif
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern const char * WINAPI wglGetExtensionsStringARB (HDC hdc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+#endif
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+extern BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+extern HDC WINAPI wglGetCurrentReadDCARB (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
+#endif
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);
+extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);
+extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);
+extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#endif
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef WGL_ARB_create_context
+#define WGL_ARB_create_context 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_ARB_create_context_profile 1
+#endif
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_ARB_create_context_robustness 1
+#endif
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);
+extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);
+extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);
+extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+#endif
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern const char * WINAPI wglGetExtensionsStringEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+extern HDC WINAPI wglGetCurrentReadDCEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);
+extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);
+extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);
+extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+extern BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglSwapIntervalEXT (int interval);
+extern int WINAPI wglGetSwapIntervalEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+#endif
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern void* WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+extern void WINAPI wglFreeMemoryNV (void *pointer);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+#endif
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+#endif
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+#endif
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+extern BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);
+extern INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+extern BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+extern BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);
+extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+#endif
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);
+extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+extern BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+extern BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnableGenlockI3D (HDC hDC);
+extern BOOL WINAPI wglDisableGenlockI3D (HDC hDC);
+extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);
+extern BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);
+extern BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);
+extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);
+extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);
+extern BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);
+extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);
+extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);
+extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);
+extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);
+extern BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);
+extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnableFrameLockI3D (void);
+extern BOOL WINAPI wglDisableFrameLockI3D (void);
+extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);
+extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
+#endif
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetFrameUsageI3D (float *pUsage);
+extern BOOL WINAPI wglBeginFrameTrackingI3D (void);
+extern BOOL WINAPI wglEndFrameTrackingI3D (void);
+extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+#endif
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+#endif
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_3DL_stereo_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
+#endif
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_EXT_pixel_format_packed_float 1
+#endif
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef WGL_NV_present_video
+#define WGL_NV_present_video 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+extern BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+extern BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_NV_video_output
+#define WGL_NV_video_output 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+extern BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);
+extern BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+extern BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);
+extern BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+extern BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+
+#ifndef WGL_NV_swap_group
+#define WGL_NV_swap_group 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);
+extern BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);
+extern BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);
+extern BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+extern BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);
+extern BOOL WINAPI wglResetFrameCountNV (HDC hDC);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);
+typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+#endif
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_NV_gpu_affinity 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);
+extern BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+extern HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);
+extern BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+extern BOOL WINAPI wglDeleteDCNV (HDC hdc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
+typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
+#endif
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_AMD_gpu_association 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);
+extern INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data);
+extern UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);
+extern HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);
+extern HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);
+extern BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);
+extern BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);
+extern HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);
+extern VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);
+typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data);
+typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);
+typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
+typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+
+#ifndef WGL_NV_video_capture
+#define WGL_NV_video_capture 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+extern UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+extern BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+extern BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+extern BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif
+
+#ifndef WGL_NV_copy_image
+#define WGL_NV_copy_image 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_NV_multisample_coverage 1
+#endif
+
+#ifndef WGL_NV_DX_interop
+#define WGL_NV_DX_interop 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle);
+extern HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice);
+extern BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice);
+extern HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+extern BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject);
+extern BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access);
+extern BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+extern BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle);
+typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice);
+typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);
+typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);
+typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif
+
+#ifndef WGL_NV_DX_interop2
+#define WGL_NV_DX_interop2 1
+#endif
+
+#ifndef WGL_EXT_swap_control_tear
+#define WGL_EXT_swap_control_tear 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Makefile.kmk b/src/VBox/Devices/Makefile.kmk
index 1d033db..1a963d7 100644
--- a/src/VBox/Devices/Makefile.kmk
+++ b/src/VBox/Devices/Makefile.kmk
@@ -236,20 +236,27 @@ if !defined(VBOX_ONLY_EXTPACKS)         # Goes on almost to the end of the file.
  endif
 
  ifdef VBOX_WITH_VMSVGA
-  VBoxDD_DEFS         += VBOX_WITH_VMSVGA
-  VBoxDD_SOURCES      += Graphics/DevVGA-SVGA.cpp
+  VBoxDD_DEFS           += VBOX_WITH_VMSVGA
+  VBoxDD_SOURCES        += Graphics/DevVGA-SVGA.cpp
  endif
  ifdef VBOX_WITH_VMSVGA3D
-  VBoxDD_DEFS         += VBOX_WITH_VMSVGA3D
-  VBoxDD_SOURCES      += Graphics/DevVGA-SVGA3d-shared.cpp
-  ifeq ($(KBUILD_TARGET),win)
-    VBoxDD_SOURCES += Graphics/DevVGA-SVGA3d-win.cpp
+  VBoxDD_DEFS           += VBOX_WITH_VMSVGA3D
+  VBoxDD_SOURCES        += Graphics/DevVGA-SVGA3d-shared.cpp
+  ifeq ($(KBUILD_TARGET),win) # (Disable this to work with OpenGL on Windows.)
+   VBoxDD_SOURCES       += Graphics/DevVGA-SVGA3d-win.cpp
+   VBoxDD_LIBS.win      += d3d9.lib
   else
-    VBoxDD_SOURCES += Graphics/DevVGA-SVGA3d-ogl.cpp
-    VBoxDD_LIBS    += $(PATH_STAGE_BIN)/vmsvgashader$(VBOX_SUFF_DLL)
+   VBoxDD_SOURCES       += Graphics/DevVGA-SVGA3d-ogl.cpp
+   if1of ($(KBUILD_TARGET),win)
+    VBoxDD_LIBS         += $(PATH_STAGE_LIB)/VBoxSVGA3D$(VBOX_SUFF_LIB)
+   else
+    VBoxDD_LIBS         += $(PATH_STAGE_BIN)/VBoxSVGA3D$(VBOX_SUFF_DLL)
+   endif
+   VBoxDD_LIBS.linux    += GL X11
+   VBoxDD_LIBS.win      += $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Opengl32.lib
+   VBoxDD_LDFLAGS.darwin += -framework OpenGL
   endif
-  VBoxDD_LIBS.win      += d3d9.lib
-  VBoxDD_LIBS.linux    += GL X11
+  Graphics/DevVGA-SVGA3d-ogl.cpp_CXXFLAGS.darwin = -F$(VBOX_PATH_MACOSX_SDK_10_7)/System/Library/Frameworks/
  endif
 
  ifdef VBOX_WITH_VDMA
@@ -348,7 +355,8 @@ if !defined(VBOX_ONLY_EXTPACKS)         # Goes on almost to the end of the file.
  	USB/DrvVUSBRootHub.cpp \
  	USB/VUSBDevice.cpp \
  	USB/VUSBReadAhead.cpp \
- 	USB/VUSBUrb.cpp
+ 	USB/VUSBUrb.cpp \
+ 	USB/VUSBSniffer.cpp
  endif
 
  # --- Networking bits. ---
@@ -846,7 +854,7 @@ if !defined(VBOX_ONLY_EXTPACKS)         # Goes on almost to the end of the file.
   ifdef VBOX_WITH_VMSVGA
    VBoxDDGC_DEFS         += VBOX_WITH_VMSVGA
    VBoxDDGC_SOURCES      += \
-    Graphics/DevVGA-SVGA.cpp
+ 	Graphics/DevVGA-SVGA.cpp
   endif
   ifdef VBOX_WITH_VMSVGA3D
    VBoxDDGC_DEFS         += VBOX_WITH_VMSVGA3D
@@ -995,7 +1003,7 @@ if !defined(VBOX_ONLY_EXTPACKS)         # Goes on almost to the end of the file.
  ifdef VBOX_WITH_VMSVGA
   VBoxDDR0_DEFS         += VBOX_WITH_VMSVGA
   VBoxDDR0_SOURCES      += \
-    Graphics/DevVGA-SVGA.cpp
+	Graphics/DevVGA-SVGA.cpp
  endif
  ifdef VBOX_WITH_VMSVGA3D
   VBoxDDR0_DEFS         += VBOX_WITH_VMSVGA3D
@@ -1238,5 +1246,91 @@ if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD)
  VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom
 endif # VBOX_WITH_EXTPACK_PUEL
 
+
+if defined(VBOX_WITH_VMSVGA3D) && !defined(VBOX_ONLY_EXTPACKS)
+ #
+ # Template used for VBoxSVGA3D.  (Stips away compiler options.)
+ #
+ TEMPLATE_VBoxSVGA3D         = VBoxSVGA3D
+ TEMPLATE_VBoxSVGA3D_EXTENDS = VBOXR3
+ TEMPLATE_VBoxSVGA3D_CFLAGS  = \
+ 	$(filter-out -pedantic -fno-common -Wstrict-prototypes,$(TEMPLATE_VBOXR3_CFLAGS))
+ TEMPLATE_VBoxSVGA3D_CXXFLAG = \
+ 	$(filter-out -pedantic -fno-common,$(TEMPLATE_VBOXR3_CXXFLAGS))
+ TEMPLATE_VBoxSVGA3D_CFLAGS.darwin  = \
+ 	$(filter-out -fno-common,$(TEMPLATE_VBOXR3_CFLAGS.darwin))
+ TEMPLATE_VBoxSVGA3D_LDFLAGS.darwin = \
+ 	-framework AppKit -framework OpenGL
+
+ #
+ # The shader library used by the SVGA3D implementation.
+ #
+ DLLS += VBoxSVGA3D
+ VBoxSVGA3D_TEMPLATE = VBoxSVGA3D
+ VBoxSVGA3D_SDKS         = ReorderCompilerIncs
+ VBoxSVGA3D_DEFS         = \
+ 	__WINESRC__ \
+ 	WINE_UNICODE_API="" \
+ 	_REENTRANT \
+ 	WINE_NOWINSOCK \
+ 	VBOX_WITH_VMSVGA \
+ 	VBOX_WITH_VMSVGA3D \
+ 	DLLDIR=\"\" \
+ 	BINDIR=\"\" \
+ 	LIB_TO_BINDIR=\"\" \
+ 	LIB_TO_DLLDIR=\"\" \
+ 	BIN_TO_DLLDIR=\"\" \
+ 	LIB_TO_DATADIR=\"\" \
+ 	BIN_TO_DATADIR=\"\" \
+ 	_USE_MATH_DEFINES \
+ 	VBOX_USING_WINDDK_W7_OR_LATER \
+ 	VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT \
+ 	IN_vmsvgashader_STATIC \
+ 	VBOX_WINE_WITH_IPRT
+ if "$(KBUILD_TYPE)" != "debug" || defined(VBOX_WINE_NO_DEBUG_MSGS)
+  VBoxSVGA3D_DEFS       += WINE_NO_DEBUG_MSGS
+ endif
+ VBoxSVGA3D_DEFS.x86    += __i386__
+ VBoxSVGA3D_DEFS.amd64  += __x86_64__
+ VBoxSVGA3D_DEFS.win    += \
+ 	USE_WIN32_OPENGL \
+ 	VBOX_WINE_WITHOUT_LIBWINE
+ # WINE relies on a gcc 4.4 feature but we have 4.2 on Darwin
+ VBoxSVGA3D_DEFS.darwin += \
+ 	__builtin_ms_va_list=va_list \
+ 	__stdcall= \
+ 	ms_abi=
+ # WTF IS THIS? -fno-pic?? doubt it.
+ VBoxSVGA3D_CFLAGS = \
+ 	$(filter-out -pedantic -Wattributes,$(VBoxR3DllWarnNoPic_CFLAGS))
+ VBoxSVGA3D_INCS.win    := \
+ 	Graphics/shaderlib/libWineStub/include
+ VBoxSVGA3D_INCS.linux  := \
+ 	Graphics/shaderlib/wine/include
+ VBoxSVGA3D_INCS.darwin := \
+ 	Graphics/shaderlib/wine/include
+ VBoxSVGA3D_SOURCES     := \
+ 	Graphics/shaderlib/glsl_shader.c \
+ 	Graphics/shaderlib/shader.c \
+ 	Graphics/shaderlib/shader_sm1.c \
+ 	Graphics/shaderlib/shader_sm4.c \
+ 	Graphics/shaderlib/shaderapi.c \
+ 	Graphics/shaderlib/utils.c \
+ 	Graphics/shaderlib/stateblock.c \
+ 	Graphics/shaderlib/directx.c \
+ 	Graphics/shaderlib/libWineStub/debug.c
+ VBoxSVGA3D_SOURCES.darwin  += \
+ 	Graphics/DevVGA-SVGA3d-cocoa.m
+ VBoxSVGA3D_LIBS        = \
+ 	$(LIB_RUNTIME)
+ VBoxSVGA3D_LIBS.win       += $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Opengl32.lib
+ if1of ($(KBUILD_TARGET), solaris linux freebsd)
+  VBoxSVGA3D_LIBS += GL
+ endif
+ VBoxSVGA3D_LDFLAGS.darwin += \
+ 	-install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxSVGA3D.dylib
+
+endif # defined(VBOX_WITH_VMSVGA3D) && !defined(VBOX_ONLY_EXTPACKS)
+
 include $(FILE_KBUILD_SUB_FOOTER)
 
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
index bc9f74d..b8c6a9f 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
@@ -853,7 +853,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcf8 class=DATA group=DGROUP
     db   'FATAL: ', 000h
     db   'bios_printf: unknown format', 00ah, 000h, 000h
     db   'ata-detect: Failed to detect ATA device', 00ah, 000h
-    db   'ata%d-%d: PCHS=%u/%d/%d LCHS=%u/%u/%u', 00ah, 000h
+    db   'ata%d-%d: PCHS=%u/%u/%u LCHS=%u/%u/%u', 00ah, 000h
     db   'ata-detect: Failed to detect ATAPI device', 00ah, 000h
     db   ' slave', 000h
     db   'master', 000h
@@ -949,14 +949,14 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcf8 class=DATA group=DGROUP
     db   '%s: SCSI_INQUIRY failed', 00ah, 000h
     db   '%s: SCSI_READ_CAPACITY failed', 00ah, 000h
     db   'Disk %d has an unsupported sector size of %u', 00ah, 000h
-    db   'SCSI %d-ID#%d: LCHS=%u/%u/%u %ld sectors', 00ah, 000h
+    db   'SCSI %d-ID#%d: LCHS=%u/%u/%u %lu sectors', 00ah, 000h
     db   'SCSI %d-ID#%d: CD/DVD-ROM', 00ah, 000h
     db   'ahci_read_sectors', 000h
     db   '%s: device_id out of range %d', 00ah, 000h
     db   'ahci_write_sectors', 000h
     db   'ahci_cmd_packet', 000h
     db   '%s: DATA_OUT not supported yet', 00ah, 000h
-    db   'AHCI %d-P#%d: PCHS=%u/%d/%d LCHS=%u/%u/%u %ld sectors', 00ah, 000h, 000h
+    db   'AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u %lu sectors', 00ah, 000h, 000h
     db   'Standby', 000h
     db   'Suspend', 000h
     db   'Shutdown', 000h
@@ -965,7 +965,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcf8 class=DATA group=DGROUP
 
 section CONST2 progbits vstart=0xda8 align=1 ; size=0x3fa class=DATA group=DGROUP
 _bios_cvs_version_string:                    ; 0xf0da8 LB 0x12
-    db  'VirtualBox 4.3.16', 000h
+    db  'VirtualBox 4.3.20', 000h
 _bios_prefix_string:                         ; 0xf0dba LB 0x8
     db  'BIOS: ', 000h, 000h
 _isotag:                                     ; 0xf0dc2 LB 0x6
@@ -16070,4 +16070,4 @@ dummy_iret:                                  ; 0xfff53 LB 0x9d
     db  'XM'
 cpu_reset:                                   ; 0xffff0 LB 0x10
     jmp far 0f000h:0e05bh                     ; ea 5b e0 00 f0
-    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 064h
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 003h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
index 420335c..6a481cc 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
@@ -1 +1 @@
-8837a8fb9d61c82a205aa261cbad2d96 *VBoxPcBios.rom
+ee569a1dd9437f09dd31efdf6fe2de72 *VBoxPcBios.rom
diff --git a/src/VBox/Devices/PC/DevACPI.cpp b/src/VBox/Devices/PC/DevACPI.cpp
index e5fee2b..740b5a2 100644
--- a/src/VBox/Devices/PC/DevACPI.cpp
+++ b/src/VBox/Devices/PC/DevACPI.cpp
@@ -2935,6 +2935,7 @@ static DECLCALLBACK(void) acpiR3Reset(PPDMDEVINS pDevIns)
 static DECLCALLBACK(void) acpiR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
 {
     ACPIState *pThis = PDMINS_2_DATA(pDevIns, ACPIState *);
+    pThis->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
     pThis->pPmTimerRC = TMTimerRCPtr(pThis->pPmTimerR3);
     NOREF(offDelta);
 }
diff --git a/src/VBox/Devices/PC/DevRTC.cpp b/src/VBox/Devices/PC/DevRTC.cpp
index 5cf0f1e..51028f7 100644
--- a/src/VBox/Devices/PC/DevRTC.cpp
+++ b/src/VBox/Devices/PC/DevRTC.cpp
@@ -237,8 +237,10 @@ static void rtc_timer_update(PRTCSTATE pThis, int64_t current_time)
     }
     else
     {
+#ifdef IN_RING3
         if (TMTimerIsActive(pThis->CTX_SUFF(pPeriodicTimer)) && pThis->cRelLogEntries++ < 64)
             LogRel(("RTC: stopped the periodic timer\n"));
+#endif
         TMTimerStop(pThis->CTX_SUFF(pPeriodicTimer));
     }
 }
diff --git a/src/VBox/Devices/PC/ipxe/Makefile.kmk b/src/VBox/Devices/PC/ipxe/Makefile.kmk
index a8b095b..91fb8b2 100644
--- a/src/VBox/Devices/PC/ipxe/Makefile.kmk
+++ b/src/VBox/Devices/PC/ipxe/Makefile.kmk
@@ -321,6 +321,8 @@ endif
 	src/net/udp/dhcp.c \
 	src/net/udp/dns.c \
 	src/net/udp/tftp.c \
+	src/net/tcp/http.c \
+	src/net/tcp/httpcore.c \
 	src/usr/autoboot.c \
 	src/usr/dhcpmgmt.c \
 	src/usr/ifmgmt.c \
diff --git a/src/VBox/Devices/PC/ipxe/src/config/general.h b/src/VBox/Devices/PC/ipxe/src/config/general.h
index ddf2f4e..5145fa8 100644
--- a/src/VBox/Devices/PC/ipxe/src/config/general.h
+++ b/src/VBox/Devices/PC/ipxe/src/config/general.h
@@ -55,7 +55,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
  */
 
 #define	DOWNLOAD_PROTO_TFTP	/* Trivial File Transfer Protocol */
-#undef	DOWNLOAD_PROTO_HTTP	/* Hypertext Transfer Protocol */
+#define	DOWNLOAD_PROTO_HTTP	/* Hypertext Transfer Protocol */
 #undef	DOWNLOAD_PROTO_HTTPS	/* Secure Hypertext Transfer Protocol */
 #undef	DOWNLOAD_PROTO_FTP	/* File Transfer Protocol */
 #undef	DOWNLOAD_PROTO_SLAM	/* Scalable Local Area Multicast */
diff --git a/src/VBox/Devices/Storage/DevAHCI.cpp b/src/VBox/Devices/Storage/DevAHCI.cpp
index d7e9911..875ae4d 100644
--- a/src/VBox/Devices/Storage/DevAHCI.cpp
+++ b/src/VBox/Devices/Storage/DevAHCI.cpp
@@ -943,6 +943,7 @@ static size_t ahciCopyToPrdtl(PPDMDEVINS pDevIns, PAHCIREQ pAhciReq,
 static size_t ahciCopyFromPrdtl(PPDMDEVINS pDevIns, PAHCIREQ pAhciReq,
                                 void *pvBuf, size_t cbBuf);
 static bool ahciCancelActiveTasks(PAHCIPort pAhciPort, PAHCIREQ pAhciReqExcept);
+static void ahciReqMemFree(PAHCIPort pAhciPort, PAHCIREQ pAhciReq, bool fForceFree);
 #endif
 RT_C_DECLS_END
 
@@ -1704,58 +1705,52 @@ static int HbaInterruptStatus_w(PAHCI ahci, uint32_t iReg, uint32_t u32Value)
     if (rc != VINF_SUCCESS)
         return rc;
 
-    /* Update interrupt status register first. */
-    ahci->regHbaIs |= ASMAtomicXchgU32(&ahci->u32PortsInterrupted, 0);
+    ahci->regHbaIs &= ~(u32Value);
 
-    if (u32Value > 0)
+    /*
+     * Update interrupt status register and check for ports who
+     * set the interrupt inbetween.
+     */
+    bool fClear = true;
+    ahci->regHbaIs |= ASMAtomicXchgU32(&ahci->u32PortsInterrupted, 0);
+    if (!ahci->regHbaIs)
     {
-        /*
-         * Clear the interrupt only if no port has signalled
-         * an interrupt and the guest has cleared all set interrupt
-         * notification bits.
-         */
-        bool fClear = true;
-
-        ahci->regHbaIs &= ~(u32Value);
+        unsigned i = 0;
 
-        fClear = !ahci->u32PortsInterrupted && !ahci->regHbaIs;
-        if (fClear)
+        /* Check if the cleared ports have a interrupt status bit set. */
+        while ((u32Value > 0) && (i < AHCI_MAX_NR_PORTS_IMPL))
         {
-            unsigned i = 0;
-
-            /* Check if the cleared ports have a interrupt status bit set. */
-            while ((u32Value > 0) && (i < AHCI_MAX_NR_PORTS_IMPL))
+            if (u32Value & 0x01)
             {
-                if (u32Value & 0x01)
-                {
-                    PAHCIPort pAhciPort = &ahci->ahciPort[i];
+                PAHCIPort pAhciPort = &ahci->ahciPort[i];
 
-                    if (pAhciPort->regIE & pAhciPort->regIS)
-                    {
-                        Log(("%s: Interrupt status of port %u set -> Set interrupt again\n", __FUNCTION__, i));
-                        ASMAtomicOrU32(&ahci->u32PortsInterrupted, 1 << i);
-                        fClear = false;
-                        break;
-                    }
+                if (pAhciPort->regIE & pAhciPort->regIS)
+                {
+                    Log(("%s: Interrupt status of port %u set -> Set interrupt again\n", __FUNCTION__, i));
+                    ASMAtomicOrU32(&ahci->u32PortsInterrupted, 1 << i);
+                    fClear = false;
+                    break;
                 }
-                u32Value = u32Value >> 1;
-                i++;
             }
+            u32Value >>= 1;
+            i++;
         }
+    }
+    else
+        fClear = false;
 
-        if (fClear)
-            ahciHbaClearInterrupt(ahci);
-        else
-        {
-            Log(("%s: Not clearing interrupt: u32PortsInterrupted=%#010x\n", __FUNCTION__, ahci->u32PortsInterrupted));
-            /*
-             * We need to set the interrupt again because the I/O APIC does not set it again even if the
-             * line is still high.
-             * We need to clear it first because the PCI bus only calls the interrupt controller if the state changes.
-             */
-            PDMDevHlpPCISetIrq(ahci->CTX_SUFF(pDevIns), 0, 0);
-            PDMDevHlpPCISetIrq(ahci->CTX_SUFF(pDevIns), 0, 1);
-        }
+    if (fClear)
+        ahciHbaClearInterrupt(ahci);
+    else
+    {
+        Log(("%s: Not clearing interrupt: u32PortsInterrupted=%#010x\n", __FUNCTION__, ahci->u32PortsInterrupted));
+        /*
+         * We need to set the interrupt again because the I/O APIC does not set it again even if the
+         * line is still high.
+         * We need to clear it first because the PCI bus only calls the interrupt controller if the state changes.
+         */
+        PDMDevHlpPCISetIrq(ahci->CTX_SUFF(pDevIns), 0, 0);
+        PDMDevHlpPCISetIrq(ahci->CTX_SUFF(pDevIns), 0, 1);
     }
 
     PDMCritSectLeave(&ahci->lock);
@@ -4638,6 +4633,17 @@ static AHCITXDIR atapiParseCmdVirtualATAPI(PAHCIPort pAhciPort, PAHCIREQ pAhciRe
                     PAHCI pAhci = pAhciPort->CTX_SUFF(pAhci);
                     PPDMDEVINS pDevIns = pAhci->CTX_SUFF(pDevIns);
 
+                    /*
+                     * Free the I/O memory of all cached tasks of this port
+                     * because the driver providing I/O memory allocation interface
+                     * is about to be destroyed.
+                     */
+                    for (uint32_t i = 0; i < AHCI_NR_COMMAND_SLOTS; i++)
+                    {
+                        if (pAhciPort->aCachedTasks[i])
+                            ahciReqMemFree(pAhciPort, pAhciPort->aCachedTasks[i], true /* fForceFree */);
+                    }
+
                     rc = VMR3ReqPriorityCallWait(PDMDevHlpGetVM(pDevIns), VMCPUID_ANY,
                                                  (PFNRT)pAhciPort->pDrvMount->pfnUnmount, 3,
                                                  pAhciPort->pDrvMount, false/*=fForce*/, true/*=fEject*/);
diff --git a/src/VBox/Devices/Storage/DevBusLogic.cpp b/src/VBox/Devices/Storage/DevBusLogic.cpp
index b0b52a1..e6d6a03 100644
--- a/src/VBox/Devices/Storage/DevBusLogic.cpp
+++ b/src/VBox/Devices/Storage/DevBusLogic.cpp
@@ -2236,7 +2236,8 @@ static int buslogicRegisterWrite(PBUSLOGIC pBusLogic, unsigned iRegister, uint8_
             if ((uVal == BUSLOGICCOMMAND_EXECUTE_MAILBOX_COMMAND) && (pBusLogic->uOperationCode == 0xff))
             {
                 /* If there are no mailboxes configured, don't even try to do anything. */
-                if (pBusLogic->cMailbox) {
+                if (pBusLogic->cMailbox)
+                {
                     ASMAtomicIncU32(&pBusLogic->cMailboxesReady);
                     if (!ASMAtomicXchgBool(&pBusLogic->fNotificationSend, true))
                     {
diff --git a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
index ab416f0..d301855 100644
--- a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
+++ b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
@@ -193,7 +193,7 @@ typedef struct LSILOGICSCSI
     /** Flag whether diagnostic access is enabled. */
     bool                 fDiagnosticEnabled;
     /** Flag whether a notification was send to R3. */
-    bool                 fNotificationSend;
+    bool                 fNotificationSent;
     /** Flag whether the guest enabled event notification from the IOC. */
     bool                 fEventNotificationEnabled;
     /** Flag whether the diagnostic address and RW registers are enabled. */
@@ -1282,19 +1282,22 @@ static int lsilogicRegisterWrite(PLSILOGICSCSI pThis, uint32_t offReg, uint32_t
             uNextWrite %= pThis->cRequestQueueEntries;
             ASMAtomicWriteU32(&pThis->uRequestQueueNextEntryFreeWrite, uNextWrite);
 
-            /* Send notification to R3 if there is not one send already. */
-            if (!ASMAtomicXchgBool(&pThis->fNotificationSend, true))
+            /* Send notification to R3 if there is not one sent already. Do this
+             * only if the worker thread is not sleeping or might go sleeping. */
+            if (!ASMAtomicXchgBool(&pThis->fNotificationSent, true))
             {
+                if (ASMAtomicReadBool(&pThis->fWrkThreadSleeping))
+                {
 #ifdef IN_RC
-                PPDMQUEUEITEMCORE pNotificationItem = PDMQueueAlloc(pThis->CTX_SUFF(pNotificationQueue));
-                AssertPtr(pNotificationItem);
-
-                PDMQueueInsert(pThis->CTX_SUFF(pNotificationQueue), pNotificationItem);
+                    PPDMQUEUEITEMCORE pNotificationItem = PDMQueueAlloc(pThis->CTX_SUFF(pNotificationQueue));
+                    AssertPtr(pNotificationItem);
+                    PDMQueueInsert(pThis->CTX_SUFF(pNotificationQueue), pNotificationItem);
 #else
-                LogFlowFunc(("Signal event semaphore\n"));
-                int rc = SUPSemEventSignal(pThis->pSupDrvSession, pThis->hEvtProcess);
-                AssertRC(rc);
+                    LogFlowFunc(("Signal event semaphore\n"));
+                    int rc = SUPSemEventSignal(pThis->pSupDrvSession, pThis->hEvtProcess);
+                    AssertRC(rc);
 #endif
+                }
             }
             break;
         }
@@ -4038,7 +4041,7 @@ static DECLCALLBACK(void) lsilogicR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp,
     pHlp->pfnPrintf(pHlp, "enmWhoInit=%u\n", pThis->enmWhoInit);
     pHlp->pfnPrintf(pHlp, "enmDoorbellState=%d\n", pThis->enmDoorbellState);
     pHlp->pfnPrintf(pHlp, "fDiagnosticEnabled=%RTbool\n", pThis->fDiagnosticEnabled);
-    pHlp->pfnPrintf(pHlp, "fNotificationSend=%RTbool\n", pThis->fNotificationSend);
+    pHlp->pfnPrintf(pHlp, "fNotificationSent=%RTbool\n", pThis->fNotificationSent);
     pHlp->pfnPrintf(pHlp, "fEventNotificationEnabled=%RTbool\n", pThis->fEventNotificationEnabled);
     pHlp->pfnPrintf(pHlp, "uInterruptMask=%#x\n", pThis->uInterruptMask);
     pHlp->pfnPrintf(pHlp, "uInterruptStatus=%#x\n", pThis->uInterruptStatus);
@@ -4163,11 +4166,9 @@ static DECLCALLBACK(int) lsilogicR3Worker(PPDMDEVINS pDevIns, PPDMTHREAD pThread
 
     while (pThread->enmState == PDMTHREADSTATE_RUNNING)
     {
-        bool fNotificationSend;
-
         ASMAtomicWriteBool(&pThis->fWrkThreadSleeping, true);
-        fNotificationSend = ASMAtomicXchgBool(&pThis->fNotificationSend, false);
-        if (!fNotificationSend)
+        bool fNotificationSent = ASMAtomicXchgBool(&pThis->fNotificationSent, false);
+        if (!fNotificationSent)
         {
             Assert(ASMAtomicReadBool(&pThis->fWrkThreadSleeping));
             rc = SUPSemEventWaitNoResume(pThis->pSupDrvSession, pThis->hEvtProcess, RT_INDEFINITE_WAIT);
@@ -4175,7 +4176,7 @@ static DECLCALLBACK(int) lsilogicR3Worker(PPDMDEVINS pDevIns, PPDMTHREAD pThread
             if (RT_UNLIKELY(pThread->enmState != PDMTHREADSTATE_RUNNING))
                 break;
             LogFlowFunc(("Woken up with rc=%Rrc\n", rc));
-            fNotificationSend = ASMAtomicXchgBool(&pThis->fNotificationSend, false);
+            ASMAtomicWriteBool(&pThis->fNotificationSent, false);
         }
 
         ASMAtomicWriteBool(&pThis->fWrkThreadSleeping, false);
@@ -4298,7 +4299,7 @@ static DECLCALLBACK(int) lsilogicR3WorkerWakeUp(PPDMDEVINS pDevIns, PPDMTHREAD p
  */
 static void lsilogicR3Kick(PLSILOGICSCSI pThis)
 {
-    if (pThis->fNotificationSend)
+    if (pThis->fNotificationSent)
     {
         /* Send a notifier to the PDM queue that there are pending requests. */
         PPDMQUEUEITEMCORE pItem = PDMQueueAlloc(pThis->CTX_SUFF(pNotificationQueue));
@@ -4359,7 +4360,7 @@ static DECLCALLBACK(int) lsilogicR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
     SSMR3PutU32   (pSSM, pThis->enmWhoInit);
     SSMR3PutU32   (pSSM, pThis->enmDoorbellState);
     SSMR3PutBool  (pSSM, pThis->fDiagnosticEnabled);
-    SSMR3PutBool  (pSSM, pThis->fNotificationSend);
+    SSMR3PutBool  (pSSM, pThis->fNotificationSent);
     SSMR3PutBool  (pSSM, pThis->fEventNotificationEnabled);
     SSMR3PutU32   (pSSM, pThis->uInterruptMask);
     SSMR3PutU32   (pSSM, pThis->uInterruptStatus);
@@ -4600,7 +4601,7 @@ static DECLCALLBACK(int) lsilogicR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM,
     else
         SSMR3GetU32(pSSM, (uint32_t *)&pThis->enmDoorbellState);
     SSMR3GetBool  (pSSM, &pThis->fDiagnosticEnabled);
-    SSMR3GetBool  (pSSM, &pThis->fNotificationSend);
+    SSMR3GetBool  (pSSM, &pThis->fNotificationSent);
     SSMR3GetBool  (pSSM, &pThis->fEventNotificationEnabled);
     SSMR3GetU32   (pSSM, (uint32_t *)&pThis->uInterruptMask);
     SSMR3GetU32   (pSSM, (uint32_t *)&pThis->uInterruptStatus);
@@ -4995,7 +4996,7 @@ static void lsilogicR3SuspendOrPowerOff(PPDMDEVINS pDevIns)
     {
         ASMAtomicWriteBool(&pThis->fSignalIdle, false);
 
-        AssertMsg(!pThis->fNotificationSend, ("The PDM Queue should be empty at this point\n"));
+        AssertMsg(!pThis->fNotificationSent, ("The PDM Queue should be empty at this point\n"));
 
         if (pThis->fRedo)
         {
@@ -5022,7 +5023,7 @@ static void lsilogicR3SuspendOrPowerOff(PPDMDEVINS pDevIns)
                     pThis->uRequestQueueNextEntryFreeWrite++;
                     pThis->uRequestQueueNextEntryFreeWrite %= pThis->cRequestQueueEntries;
 
-                    pThis->fNotificationSend = true;
+                    pThis->fNotificationSent = true;
                 }
                 else
                 {
diff --git a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp b/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
index c9487c9..d854d02 100644
--- a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
+++ b/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
@@ -498,6 +498,14 @@ static DECLCALLBACK(int) vusbRhSubmitUrb(PVUSBIROOTHUBCONNECTOR pInterface, PVUS
     }
 #endif
 
+    /* If there is a sniffer on the roothub record the URB there. */
+    if (pRh->hSniffer != VUSBSNIFFER_NIL)
+    {
+        int rc = VUSBSnifferRecordEvent(pRh->hSniffer, pUrb, VUSBSNIFFEREVENT_SUBMIT);
+        if (RT_FAILURE(rc))
+            LogRel(("VUSB: Capturing URB submit event on the root hub failed with %Rrc\n", rc));
+    }
+
     /*
      * The device was resolved when we allocated the URB.
      * Submit it to the device if we found it, if not fail with device-not-ready.
@@ -887,6 +895,8 @@ static DECLCALLBACK(void) vusbRhDestruct(PPDMDRVINS pDrvIns)
         RTStrFree(pRh->Hub.pszName);
         pRh->Hub.pszName = NULL;
     }
+    if (pRh->hSniffer != VUSBSNIFFER_NIL)
+        VUSBSnifferDestroy(pRh->hSniffer);
     RTCritSectDelete(&pRh->CritSectDevices);
     RTCritSectDelete(&pRh->CritSectFreeUrbs);
 }
@@ -906,7 +916,7 @@ static DECLCALLBACK(int) vusbRhConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uin
     /*
      * Validate configuration.
      */
-    if (!CFGMR3AreValuesValid(pCfg, "\0"))
+    if (!CFGMR3AreValuesValid(pCfg, "CaptureFilename\0"))
         return VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES;
 
     /*
@@ -927,6 +937,13 @@ static DECLCALLBACK(int) vusbRhConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uin
     if (RT_FAILURE(rc))
         return rc;
 
+    char *pszCaptureFilename = NULL;
+    rc = CFGMR3QueryStringAlloc(pCfg, "CaptureFilename", &pszCaptureFilename);
+    if (   RT_FAILURE(rc)
+        && rc != VERR_CFGM_VALUE_NOT_FOUND)
+        return PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS,
+                                   N_("Configuration error: Failed to query value of \"CaptureFilename\""));
+
     /*
      * Initialize the data members.
      */
@@ -957,6 +974,7 @@ static DECLCALLBACK(int) vusbRhConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uin
     pThis->IRhConnector.pfnCancelAllUrbs= vusbRhCancelAllUrbs;
     pThis->IRhConnector.pfnAttachDevice = vusbRhAttachDevice;
     pThis->IRhConnector.pfnDetachDevice = vusbRhDetachDevice;
+    pThis->hSniffer                     = VUSBSNIFFER_NIL;
     /*
      * Resolve interface(s).
      */
@@ -977,6 +995,16 @@ static DECLCALLBACK(int) vusbRhConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uin
     pThis->fHcVersions = pThis->pIRhPort->pfnGetUSBVersions(pThis->pIRhPort);
     Log(("vusbRhConstruct: fHcVersions=%u\n", pThis->fHcVersions));
 
+    if (pszCaptureFilename)
+    {
+        rc = VUSBSnifferCreate(&pThis->hSniffer, 0, pszCaptureFilename, NULL);
+        if (RT_FAILURE(rc))
+            return PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS,
+                                       N_("VUSBSniffer cannot open '%s' for writing. The directory must exist and it must be writable for the current user"));
+
+        MMR3HeapFree(pszCaptureFilename);
+    }
+
     /*
      * Register ourselves as a USB hub.
      * The current implementation uses the VUSBIRHCONFIG interface for communication.
diff --git a/src/VBox/Devices/USB/VUSBInternal.h b/src/VBox/Devices/USB/VUSBInternal.h
index da10db6..e2603bf 100644
--- a/src/VBox/Devices/USB/VUSBInternal.h
+++ b/src/VBox/Devices/USB/VUSBInternal.h
@@ -31,6 +31,8 @@
 #include <iprt/queueatomic.h>
 #include <iprt/req.h>
 
+#include "VUSBSniffer.h"
+
 RT_C_DECLS_BEGIN
 
 
@@ -378,14 +380,13 @@ typedef struct VUSBROOTHUB
     RTCRITSECT              CritSectFreeUrbs;
     /** Chain of free URBs. (Singly linked) */
     PVUSBURB                pFreeUrbs;
+    /** Sniffer instance for the root hub. */
+    VUSBSNIFFER             hSniffer;
     /** The number of URBs in the pool. */
     uint32_t                cUrbsInPool;
     /** Version of the attached Host Controller. */
     uint32_t                fHcVersions;
 #ifdef VBOX_WITH_STATISTICS
-#if HC_ARCH_BITS == 32
-    uint32_t                Alignment2; /**< Counters must be 64-bit aligned. */
-#endif
     VUSBROOTHUBTYPESTATS    Total;
     VUSBROOTHUBTYPESTATS    aTypes[VUSBXFERTYPE_MSG];
     STAMCOUNTER             StatIsocReqPkts;
diff --git a/src/VBox/Devices/USB/VUSBSniffer.cpp b/src/VBox/Devices/USB/VUSBSniffer.cpp
new file mode 100644
index 0000000..dfc55a5
--- /dev/null
+++ b/src/VBox/Devices/USB/VUSBSniffer.cpp
@@ -0,0 +1,746 @@
+/* $Id: VUSBSniffer.cpp $ */
+/** @file
+ * Virtual USB - Sniffer facility.
+ */
+
+/*
+ * Copyright (C) 2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_DRV_VUSB
+#include <VBox/log.h>
+#include <iprt/file.h>
+#include <iprt/mem.h>
+#include <iprt/buildconfig.h>
+#include <iprt/string.h>
+#include <iprt/system.h>
+#include <iprt/semaphore.h>
+#include <iprt/time.h>
+
+#include "VUSBSniffer.h"
+
+/*******************************************************************************
+*   Defined Constants And Macros                                               *
+*******************************************************************************/
+
+/** DumpFile Section Header Block type. */
+#define DUMPFILE_SHB_BLOCK_TYPE       UINT32_C(0x0a0d0d0a)
+/** The byte order magic value. */
+#define DUMPFILE_SHB_BYTE_ORDER_MAGIC UINT32_C(0x1a2b3c4d)
+/** Current major version. */
+#define DUMPFILE_SHB_VERSION_MAJOR    UINT16_C(1)
+/** Current minor version. */
+#define DUMPFILE_SHB_VERSION_MINOR    UINT16_C(0)
+
+/** Block type for the interface descriptor block. */
+#define DUMPFILE_IDB_BLOCK_TYPE       UINT32_C(0x00000001)
+/** USB link type. */
+#define DUMPFILE_IDB_LINK_TYPE_USB_LINUX_MMAPED UINT16_C(220)
+
+/** Block type for an enhanced packet block. */
+#define DUMPFILE_EPB_BLOCK_TYPE       UINT32_C(0x00000006)
+
+/** USB packet event types. */
+#define DUMPFILE_USB_EVENT_TYPE_SUBMIT   ('S')
+#define DUMPFILE_USB_EVENT_TYPE_COMPLETE ('C')
+#define DUMPFILE_USB_EVENT_TYPE_ERROR    ('E')
+
+#define DUMPFILE_OPTION_CODE_END      UINT16_C(0)
+#define DUMPFILE_OPTION_CODE_COMMENT  UINT16_C(1)
+
+#define DUMPFILE_OPTION_CODE_HARDWARE UINT16_C(2)
+#define DUMPFILE_OPTION_CODE_OS       UINT16_C(3)
+#define DUMPFILE_OPTION_CODE_USERAPP  UINT16_C(4)
+
+#define DUMPFILE_IDB_OPTION_TS_RESOLUTION UINT16_C(9)
+
+/*******************************************************************************
+*   DumpFile format structures                                                 *
+*******************************************************************************/
+
+/**
+ * DumpFile Block header.
+ */
+typedef struct DumpFileBlockHdr
+{
+    /** Block type. */
+    uint32_t            u32BlockType;
+    /** Block total length. */
+    uint32_t            u32BlockTotalLength;
+} DumpFileBlockHdr;
+/** Pointer to a block header. */
+typedef DumpFileBlockHdr *PDumpFileBlockHdr;
+
+/**
+ * DumpFile Option header.
+ */
+typedef struct DumpFileOptionHdr
+{
+    /** Option code. */
+    uint16_t            u16OptionCode;
+    /** Block total length. */
+    uint16_t            u16OptionLength;
+} DumpFileOptionHdr;
+/** Pointer to a option header. */
+typedef DumpFileOptionHdr *PDumpFileOptionHdr;
+
+/**
+ * DumpFile Section Header Block.
+ */
+typedef struct DumpFileShb
+{
+    /** Block header. */
+    DumpFileBlockHdr    Hdr;
+    /** Byte order magic. */
+    uint32_t            u32ByteOrderMagic;
+    /** Major version. */
+    uint16_t            u16VersionMajor;
+    /** Minor version. */
+    uint16_t            u16VersionMinor;
+    /** Section length. */
+    uint64_t            u64SectionLength;
+} DumpFileShb;
+/** Pointer to a Section Header Block. */
+typedef DumpFileShb *PDumpFileShb;
+
+/**
+ * DumpFile Interface description block.
+ */
+typedef struct DumpFileIdb
+{
+    /** Block header. */
+    DumpFileBlockHdr    Hdr;
+    /** Link type. */
+    uint16_t            u16LinkType;
+    /** Reserved. */
+    uint16_t            u16Reserved;
+    /** Maximum number of bytes dumped from each packet. */
+    uint32_t            u32SnapLen;
+} DumpFileIdb;
+/** Pointer to an Interface description block. */
+typedef DumpFileIdb *PDumpFileIdb;
+
+/**
+ * DumpFile Enhanced packet block.
+ */
+typedef struct DumpFileEpb
+{
+    /** Block header. */
+    DumpFileBlockHdr    Hdr;
+    /** Interface ID. */
+    uint32_t            u32InterfaceId;
+    /** Timestamp (high). */
+    uint32_t            u32TimestampHigh;
+    /** Timestamp (low). */
+    uint32_t            u32TimestampLow;
+    /** Captured packet length. */
+    uint32_t            u32CapturedLen;
+    /** Original packet length. */
+    uint32_t            u32PacketLen;
+} DumpFileEpb;
+/** Pointer to an Enhanced packet block. */
+typedef DumpFileEpb *PDumpFileEpb;
+
+/**
+ * USB setup URB data.
+ */
+typedef struct DumpFileUsbSetup
+{
+    uint8_t    bmRequestType;
+    uint8_t    bRequest;
+    uint16_t   wValue;
+    uint16_t   wIndex;
+    uint16_t   wLength;
+} DumpFileUsbSetup;
+typedef DumpFileUsbSetup *PDumpFileUsbSetup;
+
+/**
+ * USB Isochronous data.
+ */
+typedef struct DumpFileIsoRec
+{
+    int32_t    i32ErrorCount;
+    int32_t    i32NumDesc;
+} DumpFileIsoRec;
+typedef DumpFileIsoRec *PDumpFileIsoRec;
+
+/**
+ * USB packet header (Linux mmapped variant).
+ */
+typedef struct DumpFileUsbHeaderLnxMmapped
+{
+    /** Packet Id. */
+    uint64_t    u64Id;
+    /** Event type. */
+    uint8_t     u8EventType;
+    /** Transfer type. */
+    uint8_t     u8TransferType;
+    /** Endpoint number. */
+    uint8_t     u8EndpointNumber;
+    /** Device address. */
+    uint8_t     u8DeviceAddress;
+    /** Bus id. */
+    uint16_t    u16BusId;
+    /** Setup flag != 0 if the URB setup header is not present. */
+    uint8_t     u8SetupFlag;
+    /** Data present flag != 0 if the URB data is not present. */
+    uint8_t     u8DataFlag;
+    /** Timestamp (second part). */
+    uint64_t    u64TimestampSec;
+    /** Timestamp (us part). */
+    uint32_t    u32TimestampUSec;
+    /** Status. */
+    int32_t     i32Status;
+    /** URB length. */
+    uint32_t    u32UrbLength;
+    /** Recorded data length. */
+    uint32_t    u32DataLength;
+    /** Union of data for different URB types. */
+    union
+    {
+        DumpFileUsbSetup    UsbSetup;
+        DumpFileIsoRec      IsoRec;
+    } u;
+    int32_t     i32Interval;
+    int32_t     i32StartFrame;
+    /** Copy of transfer flags. */
+    uint32_t    u32XferFlags;
+    /** Number of isochronous descriptors. */
+    uint32_t    u32NumDesc;
+} DumpFileUsbHeaderLnxMmapped;
+/** Pointer to a USB packet header. */
+typedef DumpFileUsbHeaderLnxMmapped *PDumpFileUsbHeaderLnxMmapped;
+
+AssertCompileSize(DumpFileUsbHeaderLnxMmapped, 64);
+
+/**
+ * USB packet isochronous descriptor.
+ */
+typedef struct DumpFileUsbIsoDesc
+{
+    int32_t     i32Status;
+    uint32_t    u32Offset;
+    uint32_t    u32Len;
+    uint8_t     au8Padding[4];
+} DumpFileUsbIsoDesc;
+typedef DumpFileUsbIsoDesc *PDumpFileUsbIsoDesc;
+
+/*******************************************************************************
+*   Structures and Typedefs                                                    *
+*******************************************************************************/
+
+/**
+ * The internal VUSB sniffer state.
+ */
+typedef struct VUSBSNIFFERINT
+{
+    /** The file handle to dump to. */
+    RTFILE            hFile;
+    /** Current size of the block being written. */
+    uint32_t          cbBlockCur;
+    /** Maximum size allocated for the block. */
+    uint32_t          cbBlockMax;
+    /** Current block header. */
+    PDumpFileBlockHdr pBlockHdr;
+    /** Pointer to the block data which will be written on commit. */
+    uint8_t          *pbBlockData;
+    /** Fast Mutex protecting the state against concurrent access. */
+    RTSEMFASTMUTEX    hMtx;
+} VUSBSNIFFERINT;
+/** Pointer to the internal VUSB sniffer state. */
+typedef VUSBSNIFFERINT *PVUSBSNIFFERINT;
+
+/**
+ * Allocates additional space for the block.
+ *
+ * @returns Pointer to the new unused space or NULL if out of memory.
+ * @param   pThis           The VUSB sniffer instance.
+ * @param   cbAdditional    The additional memory requested.
+ */
+static void *vusbSnifferBlockAllocSpace(PVUSBSNIFFERINT pThis, uint32_t cbAdditional)
+{
+    /* Fast path where we have enough memory allocated. */
+    if (pThis->cbBlockCur + cbAdditional <= pThis->cbBlockMax)
+    {
+        void *pv = pThis->pbBlockData + pThis->cbBlockCur;
+        pThis->cbBlockCur += cbAdditional;
+        return pv;
+    }
+
+    /* Allocate additional memory. */
+    uint32_t cbNew = pThis->cbBlockCur + cbAdditional;
+    uint8_t *pbDataNew = (uint8_t *)RTMemRealloc(pThis->pbBlockData, cbNew);
+    if (pbDataNew)
+    {
+        pThis->pbBlockData = pbDataNew;
+        pThis->pBlockHdr   = (PDumpFileBlockHdr)pbDataNew;
+
+        void *pv = pThis->pbBlockData + pThis->cbBlockCur;
+        pThis->cbBlockCur = cbNew;
+        pThis->cbBlockMax = cbNew;
+        return pv;
+    }
+
+    return NULL;
+}
+
+/**
+ * Adds new data to the current block.
+ *
+ * @returns VBox status code.
+ * @param   pThis           The VUSB sniffer instance.
+ * @param   pvData          The data to add.
+ * @param   cbData          Amount of data to add.
+ */
+static int vusbSnifferBlockAddData(PVUSBSNIFFERINT pThis, const void *pvData, uint32_t cbData)
+{
+    int rc = VINF_SUCCESS;
+
+    Assert(pThis->cbBlockCur);
+    AssertPtr(pThis->pBlockHdr);
+
+    void *pv = vusbSnifferBlockAllocSpace(pThis, cbData);
+    if (pv)
+        memcpy(pv, pvData, cbData);
+    else
+        rc = VERR_NO_MEMORY;
+
+    return rc;
+}
+
+/**
+ * Aligns the current block data to a 32bit boundary.
+ *
+ * @returns VBox status code.
+ * @param   pThis           The VUSB sniffer instance.
+ */
+static int vusbSnifferBlockAlign(PVUSBSNIFFERINT pThis)
+{
+    int rc = VINF_SUCCESS;
+
+    Assert(pThis->cbBlockCur);
+
+    /* Pad to 32bits. */
+    uint8_t abPad[3] = { 0 };
+    uint32_t cbPad = RT_ALIGN_32(pThis->cbBlockCur, 4) - pThis->cbBlockCur;
+
+    Assert(cbPad <= 3);
+    if (cbPad)
+        rc = vusbSnifferBlockAddData(pThis, abPad, cbPad);
+
+    return rc;
+}
+
+/**
+ * Commits the current block to the capture file.
+ *
+ * @returns VBox status code.
+ * @param   pThis           The VUSB sniffer instance.
+ */
+static int vusbSnifferBlockCommit(PVUSBSNIFFERINT pThis)
+{
+    int rc = VINF_SUCCESS;
+
+    AssertPtr(pThis->pBlockHdr);
+
+    rc = vusbSnifferBlockAlign(pThis);
+    if (RT_SUCCESS(rc))
+    {
+        /* Update the block total length field. */
+        uint32_t *pcbTotalLength = (uint32_t *)vusbSnifferBlockAllocSpace(pThis, 4);
+        if (pcbTotalLength)
+        {
+            *pcbTotalLength = pThis->cbBlockCur;
+            pThis->pBlockHdr->u32BlockTotalLength = pThis->cbBlockCur;
+
+            /* Write the data. */
+            rc = RTFileWrite(pThis->hFile, pThis->pbBlockData, pThis->cbBlockCur, NULL);
+            pThis->cbBlockCur = 0;
+            pThis->pBlockHdr  = NULL;
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+
+    return rc;
+}
+
+/**
+ * Starts a new block for capturing.
+ *
+ * @returns VBox status code.
+ * @param   pThis           The VUSB sniffer instance.
+ * @param   pBlockHdr       Pointer to the block header for the new block.
+ * @param   cbData          Amount of data added with this block.
+ */
+static int vusbSnifferBlockNew(PVUSBSNIFFERINT pThis, PDumpFileBlockHdr pBlockHdr, uint32_t cbData)
+{
+    int rc = VINF_SUCCESS;
+
+    /* Validate we don't get called while another block is active. */
+    Assert(!pThis->cbBlockCur);
+    Assert(!pThis->pBlockHdr);
+    pThis->pBlockHdr = (PDumpFileBlockHdr)vusbSnifferBlockAllocSpace(pThis, cbData);
+    if (pThis->pBlockHdr)
+        memcpy(pThis->pBlockHdr, pBlockHdr, cbData);
+    else
+        rc = VERR_NO_MEMORY;
+
+    return rc;
+}
+
+/**
+ * Add a new option to the current block.
+ *
+ * @returns VBox status code.
+ * @param   pThis           The VUSB sniffer instance.
+ * @param   u16OptionCode   The option code identifying the type of option.
+ * @param   pvOption        Raw data for the option.
+ * @param   cbOption        Size of the optiob data.
+ */
+static int vusbSnifferAddOption(PVUSBSNIFFERINT pThis, uint16_t u16OptionCode, const void *pvOption, uint16_t cbOption)
+{
+    int rc = VINF_SUCCESS;
+    DumpFileOptionHdr OptHdr;
+
+    OptHdr.u16OptionCode   = u16OptionCode;
+    OptHdr.u16OptionLength = cbOption;
+    rc = vusbSnifferBlockAddData(pThis, &OptHdr, sizeof(OptHdr));
+    if (   RT_SUCCESS(rc)
+        && u16OptionCode != DUMPFILE_OPTION_CODE_END
+        && cbOption != 0)
+    {
+        rc = vusbSnifferBlockAddData(pThis, pvOption, cbOption);
+        if (RT_SUCCESS(rc))
+            rc = vusbSnifferBlockAlign(pThis);
+    }
+
+    return rc;
+}
+
+DECLHIDDEN(int) VUSBSnifferCreate(PVUSBSNIFFER phSniffer, uint32_t fFlags,
+                                  const char *pszCaptureFilename, const char *pszDesc)
+{
+    int rc = VINF_SUCCESS;
+    PVUSBSNIFFERINT pThis = NULL;
+
+    pThis = (PVUSBSNIFFERINT)RTMemAllocZ(sizeof(VUSBSNIFFERINT));
+    if (pThis)
+    {
+        pThis->hFile       = NIL_RTFILE;
+        pThis->cbBlockCur  = 0;
+        pThis->cbBlockMax  = 0;
+        pThis->pbBlockData = NULL;
+        pThis->hMtx        = NIL_RTSEMFASTMUTEX;
+
+        rc = RTSemFastMutexCreate(&pThis->hMtx);
+        if (RT_SUCCESS(rc))
+        {
+            rc = RTFileOpen(&pThis->hFile, pszCaptureFilename, RTFILE_O_DENY_NONE | RTFILE_O_CREATE_REPLACE | RTFILE_O_WRITE | RTFILE_O_READ);
+            if (RT_SUCCESS(rc))
+            {
+                /* Write header and link type blocks. */
+                DumpFileShb Shb;
+
+                Shb.Hdr.u32BlockType        = DUMPFILE_SHB_BLOCK_TYPE;
+                Shb.Hdr.u32BlockTotalLength = 0; /* Filled out by lower layer. */
+                Shb.u32ByteOrderMagic       = DUMPFILE_SHB_BYTE_ORDER_MAGIC;
+                Shb.u16VersionMajor         = DUMPFILE_SHB_VERSION_MAJOR;
+                Shb.u16VersionMinor         = DUMPFILE_SHB_VERSION_MINOR;
+                Shb.u64SectionLength        = UINT64_C(0xffffffffffffffff); /* -1 */
+
+                /* Write the blocks. */
+                rc = vusbSnifferBlockNew(pThis, &Shb.Hdr, sizeof(Shb));
+                if (RT_SUCCESS(rc))
+                {
+                    const char *pszOpt = RTBldCfgTargetDotArch();
+                    rc = vusbSnifferAddOption(pThis, DUMPFILE_OPTION_CODE_HARDWARE, pszOpt, strlen(pszOpt) + 1);
+                }
+
+                if (RT_SUCCESS(rc))
+                {
+                    char szTmp[512];
+                    size_t cbTmp = sizeof(szTmp);
+
+                    RT_ZERO(szTmp);
+
+                    /* Build the OS code. */
+                    rc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, cbTmp);
+                    if (RT_SUCCESS(rc))
+                    {
+                        size_t cb = strlen(szTmp);
+
+                        szTmp[cb] = ' ';
+                        rc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, &szTmp[cb + 1], cbTmp - (cb + 1));
+                        if (RT_SUCCESS(rc))
+                        {
+                            cb = strlen(szTmp);
+                            szTmp[cb] = ' ';
+                            rc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, &szTmp[cb + 1], cbTmp - (cb + 1));
+                        }
+                    }
+
+                    if (RT_SUCCESS(rc) || rc == VERR_BUFFER_OVERFLOW)
+                        rc = vusbSnifferAddOption(pThis, DUMPFILE_OPTION_CODE_OS, szTmp, strlen(szTmp) + 1);
+                    else
+                        rc = VINF_SUCCESS; /* Skip OS code if building the string failed. */
+                }
+
+                if (RT_SUCCESS(rc))
+                {
+                    /** @todo: Add product info. */
+                }
+
+                if (RT_SUCCESS(rc))
+                    rc = vusbSnifferAddOption(pThis, DUMPFILE_OPTION_CODE_END, NULL, 0);
+                if (RT_SUCCESS(rc))
+                    rc = vusbSnifferBlockCommit(pThis);
+
+                /* Write Interface descriptor block. */
+                if (RT_SUCCESS(rc))
+                {
+                    DumpFileIdb Idb;
+
+                    Idb.Hdr.u32BlockType        = DUMPFILE_IDB_BLOCK_TYPE;
+                    Idb.Hdr.u32BlockTotalLength = 0; /* Filled out by lower layer. */
+                    Idb.u16LinkType             = DUMPFILE_IDB_LINK_TYPE_USB_LINUX_MMAPED;
+                    Idb.u16Reserved             = 0;
+                    Idb.u32SnapLen              = UINT32_C(0xffffffff);
+
+                    rc = vusbSnifferBlockNew(pThis, &Idb.Hdr, sizeof(Idb));
+                    if (RT_SUCCESS(rc))
+                    {
+                        uint8_t u8TsResolution = 9; /* Nano second resolution. */
+                        /* Add timestamp resolution option. */
+                        rc = vusbSnifferAddOption(pThis, DUMPFILE_IDB_OPTION_TS_RESOLUTION,
+                                                  &u8TsResolution, sizeof(u8TsResolution));
+                    }
+                    if (RT_SUCCESS(rc))
+                        rc = vusbSnifferAddOption(pThis, DUMPFILE_OPTION_CODE_END, NULL, 0);
+                    if (RT_SUCCESS(rc))
+                        rc = vusbSnifferBlockCommit(pThis);
+                }
+
+                if (RT_SUCCESS(rc))
+                {
+                    *phSniffer = pThis;
+                    return VINF_SUCCESS;
+                }
+
+                RTFileClose(pThis->hFile);
+                pThis->hFile = NIL_RTFILE;
+                RTFileDelete(pszCaptureFilename);
+            }
+            RTSemFastMutexDestroy(pThis->hMtx);
+            pThis->hMtx = NIL_RTSEMFASTMUTEX;
+        }
+        RTMemFree(pThis);
+    }
+    else
+        rc = VERR_NO_MEMORY;
+
+    return rc;
+}
+
+/**
+ * Destroys the given VUSB sniffer instance.
+ *
+ * @returns nothing.
+ * @param   hSniffer              The sniffer instance to destroy.
+ */
+DECLHIDDEN(void) VUSBSnifferDestroy(VUSBSNIFFER hSniffer)
+{
+    PVUSBSNIFFERINT pThis = hSniffer;
+
+    int rc = RTSemFastMutexRequest(pThis->hMtx);
+    AssertRC(rc);
+
+    if (pThis->hFile != NIL_RTFILE)
+        RTFileClose(pThis->hFile);
+    if (pThis->pbBlockData)
+        RTMemFree(pThis->pbBlockData);
+
+    RTSemFastMutexRelease(pThis->hMtx);
+    RTSemFastMutexDestroy(pThis->hMtx);
+    RTMemFree(pThis);
+}
+
+/**
+ * Records an VUSB event.
+ *
+ * @returns VBox status code.
+ * @param   hSniffer              The sniffer instance.
+ * @param   pUrb                  The URB triggering the event.
+ * @param   enmEvent              The type of event to record.
+ */
+DECLHIDDEN(int) VUSBSnifferRecordEvent(VUSBSNIFFER hSniffer, PVUSBURB pUrb, VUSBSNIFFEREVENT enmEvent)
+{
+    int rc = VINF_SUCCESS;
+    PVUSBSNIFFERINT pThis = hSniffer;
+    DumpFileEpb Epb;
+    DumpFileUsbHeaderLnxMmapped UsbHdr;
+    DumpFileUsbSetup UsbSetup;
+    RTTIMESPEC TimeNow;
+    uint64_t u64TimestampEvent;
+    size_t cbUrbLength = 0;
+    uint32_t cbDataLength = 0;
+    uint32_t cbCapturedLength = sizeof(UsbHdr);
+    uint32_t cIsocPkts = 0;
+    uint8_t *pbData = NULL;
+
+    RTTimeNow(&TimeNow);
+    u64TimestampEvent = RTTimeSpecGetNano(&TimeNow);
+
+    /* Start with the enhanced packet block. */
+    Epb.Hdr.u32BlockType        = DUMPFILE_EPB_BLOCK_TYPE;
+    Epb.Hdr.u32BlockTotalLength = 0;
+    Epb.u32InterfaceId          = 0;
+    Epb.u32TimestampHigh        = (u64TimestampEvent >> 32) & UINT32_C(0xffffffff);
+    Epb.u32TimestampLow         = u64TimestampEvent & UINT32_C(0xffffffff);
+
+    UsbHdr.u64Id = (uint64_t)pUrb; /** @todo: check whether the pointer is a good ID. */
+    switch (enmEvent)
+    {
+        case VUSBSNIFFEREVENT_SUBMIT:
+            UsbHdr.u8EventType = DUMPFILE_USB_EVENT_TYPE_SUBMIT;
+            cbUrbLength = pUrb->cbData;
+            break;
+        case VUSBSNIFFEREVENT_COMPLETE:
+            UsbHdr.u8EventType = DUMPFILE_USB_EVENT_TYPE_COMPLETE;
+            cbUrbLength = pUrb->cbData;
+            break;
+        case VUSBSNIFFEREVENT_ERROR_SUBMIT:
+        case VUSBSNIFFEREVENT_ERROR_COMPLETE:
+            UsbHdr.u8EventType = DUMPFILE_USB_EVENT_TYPE_ERROR;
+            break;
+        default:
+            AssertMsgFailed(("Invalid event type %d\n", enmEvent));
+    }
+    cbDataLength = cbUrbLength;
+    pbData = &pUrb->abData[0];
+
+    switch (pUrb->enmType)
+    {
+        case VUSBXFERTYPE_ISOC:
+        {
+                int32_t i32ErrorCount = 0;
+
+                UsbHdr.u8TransferType = 0;
+                cIsocPkts = pUrb->cIsocPkts;
+                for (unsigned i = 0; i < cIsocPkts; i++)
+                    if (   pUrb->aIsocPkts[i].enmStatus != VUSBSTATUS_OK
+                        && pUrb->aIsocPkts[i].enmStatus != VUSBSTATUS_NOT_ACCESSED)
+                        i32ErrorCount++;
+
+                UsbHdr.u.IsoRec.i32ErrorCount = i32ErrorCount;
+                UsbHdr.u.IsoRec.i32NumDesc    = pUrb->cIsocPkts;
+                cbCapturedLength += cIsocPkts * sizeof(DumpFileUsbIsoDesc);
+                break;
+        }
+        case VUSBXFERTYPE_BULK:
+                UsbHdr.u8TransferType = 3;
+                break;
+        case VUSBXFERTYPE_INTR:
+                UsbHdr.u8TransferType = 1;
+                break;
+        case VUSBXFERTYPE_CTRL:
+        case VUSBXFERTYPE_MSG:
+                UsbHdr.u8TransferType = 2;
+                break;
+        default:
+            AssertMsgFailed(("invalid transfer type %d\n", pUrb->enmType));
+    }
+
+    if (pUrb->enmDir == VUSBDIRECTION_IN)
+    {
+        if (enmEvent == VUSBSNIFFEREVENT_SUBMIT)
+            cbDataLength = 0;
+    }
+    else if (pUrb->enmDir == VUSBDIRECTION_OUT)
+    {
+        if (   enmEvent == VUSBSNIFFEREVENT_COMPLETE
+            || pUrb->enmType == VUSBXFERTYPE_CTRL
+            || pUrb->enmType == VUSBXFERTYPE_MSG)
+            cbDataLength = 0;
+    }
+    else if (pUrb->enmDir == VUSBDIRECTION_SETUP)
+        cbDataLength -= sizeof(VUSBSETUP);
+
+    Epb.u32CapturedLen = cbCapturedLength + cbDataLength;
+    Epb.u32PacketLen   = cbCapturedLength + cbUrbLength;
+
+    UsbHdr.u8EndpointNumber = pUrb->EndPt | (pUrb->enmDir == VUSBDIRECTION_IN ? 0x80 : 0x00);
+    UsbHdr.u8DeviceAddress  = pUrb->DstAddress;
+    UsbHdr.u16BusId         = 0;
+    UsbHdr.u8DataFlag       = cbDataLength ? 0 : 1;
+    UsbHdr.u64TimestampSec  = u64TimestampEvent / RT_NS_1SEC_64;
+    UsbHdr.u32TimestampUSec = u64TimestampEvent / RT_NS_1US_64 - UsbHdr.u64TimestampSec * RT_US_1SEC;
+    UsbHdr.i32Status        = pUrb->enmStatus;
+    UsbHdr.u32UrbLength     = cbUrbLength;
+    UsbHdr.u32DataLength    = cbDataLength + cIsocPkts * sizeof(DumpFileUsbIsoDesc);
+    UsbHdr.i32Interval      = 0;
+    UsbHdr.i32StartFrame    = 0;
+    UsbHdr.u32XferFlags     = 0;
+    UsbHdr.u32NumDesc       = cIsocPkts;
+
+    if (   (pUrb->enmType == VUSBXFERTYPE_MSG || pUrb->enmType == VUSBXFERTYPE_CTRL)
+        && enmEvent == VUSBSNIFFEREVENT_SUBMIT)
+    {
+        PVUSBSETUP pSetup = (PVUSBSETUP)pUrb->abData;
+
+        UsbHdr.u.UsbSetup.bmRequestType = pSetup->bmRequestType;
+        UsbHdr.u.UsbSetup.bRequest      = pSetup->bRequest;
+        UsbHdr.u.UsbSetup.wValue        = pSetup->wValue;
+        UsbHdr.u.UsbSetup.wIndex        = pSetup->wIndex;
+        UsbHdr.u.UsbSetup.wLength       = pSetup->wLength;
+        UsbHdr.u8SetupFlag              = 0;
+    }
+    else
+        UsbHdr.u8SetupFlag  = '-'; /* Follow usbmon source here. */
+
+    /* Write the packet to the capture file. */
+    rc = RTSemFastMutexRequest(pThis->hMtx);
+    if (RT_SUCCESS(rc))
+    {
+        rc = vusbSnifferBlockNew(pThis, &Epb.Hdr, sizeof(Epb));
+        if (RT_SUCCESS(rc))
+            rc = vusbSnifferBlockAddData(pThis, &UsbHdr, sizeof(UsbHdr));
+
+        /* Add Isochronous descriptors now. */
+        for (unsigned i = 0; i < cIsocPkts && RT_SUCCESS(rc); i++)
+        {
+            DumpFileUsbIsoDesc IsoDesc;
+            IsoDesc.i32Status = pUrb->aIsocPkts[i].enmStatus;
+            IsoDesc.u32Offset = pUrb->aIsocPkts[i].off;
+            IsoDesc.u32Len    = pUrb->aIsocPkts[i].cb;
+            rc = vusbSnifferBlockAddData(pThis, &IsoDesc, sizeof(IsoDesc));
+        }
+
+        /* Record data. */
+        if (   RT_SUCCESS(rc)
+            && cbDataLength)
+            rc = vusbSnifferBlockAddData(pThis, pbData, cbDataLength);
+
+        if (RT_SUCCESS(rc))
+            rc = vusbSnifferAddOption(pThis, DUMPFILE_OPTION_CODE_END, NULL, 0);
+
+        if (RT_SUCCESS(rc))
+            rc = vusbSnifferBlockCommit(pThis);
+
+        RTSemFastMutexRelease(pThis->hMtx);
+    }
+
+    return rc;
+}
+
diff --git a/src/VBox/Devices/USB/VUSBSniffer.h b/src/VBox/Devices/USB/VUSBSniffer.h
new file mode 100644
index 0000000..9e9b763
--- /dev/null
+++ b/src/VBox/Devices/USB/VUSBSniffer.h
@@ -0,0 +1,87 @@
+/* $Id: VUSBSniffer.h $ */
+/** @file
+ * Virtual USB - Sniffer facility.
+ */
+
+/*
+ * Copyright (C) 2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___VUSBSniffer_h
+#define ___VUSBSniffer_h
+
+#include <VBox/cdefs.h>
+#include <VBox/types.h>
+#include <VBox/vusb.h>
+
+RT_C_DECLS_BEGIN
+
+/** Opauqe VUSB sniffer handle. */
+typedef struct VUSBSNIFFERINT *VUSBSNIFFER;
+/** Pointer to a VUSB sniffer handle. */
+typedef VUSBSNIFFER *PVUSBSNIFFER;
+
+/** NIL sniffer instance handle. */
+#define VUSBSNIFFER_NIL ((VUSBSNIFFER)0)
+
+/**
+ * VUSB Sniffer event types.
+ */
+typedef enum VUSBSNIFFEREVENT
+{
+    /** Invalid event. */
+    VUSBSNIFFEREVENT_INVALID = 0,
+    /** URB submit event. */
+    VUSBSNIFFEREVENT_SUBMIT,
+    /** URB complete event. */
+    VUSBSNIFFEREVENT_COMPLETE,
+    /** URB submit failed event. */
+    VUSBSNIFFEREVENT_ERROR_SUBMIT,
+    /** URB completed with error event. */
+    VUSBSNIFFEREVENT_ERROR_COMPLETE,
+    /** 32bit hack. */
+    VUSBSNIFFEREVENT_32BIT_HACK = 0x7fffffff
+} VUSBSNIFFEREVENT;
+
+/**
+ * Create a new VUSB sniffer instance dumping to the given capture file.
+ *
+ * @returns VBox status code.
+ * @param   phSniffer             Where to store the handle to the sniffer instance on success.
+ * @param   fFlags                Flags, reserved, must be 0.
+ * @param   pszCaptureFilename    The filename to use for capturing the sniffed data.
+ * @param   pszDesc               Optional description for the dump.
+ */
+DECLHIDDEN(int) VUSBSnifferCreate(PVUSBSNIFFER phSniffer, uint32_t fFlags,
+                                  const char *pszCaptureFilename, const char *pszDesc);
+
+/**
+ * Destroys the given VUSB sniffer instance.
+ *
+ * @returns nothing.
+ * @param   hSniffer              The sniffer instance to destroy.
+ */
+DECLHIDDEN(void) VUSBSnifferDestroy(VUSBSNIFFER hSniffer);
+
+/**
+ * Records an VUSB event.
+ *
+ * @returns VBox status code.
+ * @param   hSniffer              The sniffer instance.
+ * @param   pUrb                  The URB triggering the event.
+ * @param   enmEvent              The type of event to record.
+ */
+DECLHIDDEN(int) VUSBSnifferRecordEvent(VUSBSNIFFER hSniffer, PVUSBURB pUrb, VUSBSNIFFEREVENT enmEvent);
+
+
+RT_C_DECLS_END
+#endif
+
diff --git a/src/VBox/Devices/USB/VUSBUrb.cpp b/src/VBox/Devices/USB/VUSBUrb.cpp
index 853c129..389a6ab 100644
--- a/src/VBox/Devices/USB/VUSBUrb.cpp
+++ b/src/VBox/Devices/USB/VUSBUrb.cpp
@@ -1011,13 +1011,24 @@ void vusbUrbCompletionRh(PVUSBURB pUrb)
     AssertMsg(   pUrb->enmState == VUSBURBSTATE_REAPED
               || pUrb->enmState == VUSBURBSTATE_CANCELLED, ("%d\n", pUrb->enmState));
 
+    PVUSBROOTHUB pRh = vusbDevGetRh(pUrb->VUsb.pDev);
+    AssertPtrReturnVoid(pRh);
+
+    /* If there is a sniffer on the roothub record the completed URB there too. */
+    if (pRh->hSniffer != VUSBSNIFFER_NIL)
+    {
+        int rc = VUSBSnifferRecordEvent(pRh->hSniffer, pUrb,
+                                          pUrb->enmStatus == VUSBSTATUS_OK
+                                        ? VUSBSNIFFEREVENT_COMPLETE
+                                        : VUSBSNIFFEREVENT_ERROR_COMPLETE);
+        if (RT_FAILURE(rc))
+            LogRel(("VUSB: Capturing URB completion event on the root hub failed with %Rrc\n", rc));
+    }
 
 #ifdef VBOX_WITH_STATISTICS
     /*
      * Total and per-type submit statistics.
      */
-    PVUSBROOTHUB pRh = vusbDevGetRh(pUrb->VUsb.pDev);
-    AssertPtrReturnVoid(pRh);
     if (pUrb->enmType != VUSBXFERTYPE_MSG)
     {
         Assert(pUrb->enmType >= 0 && pUrb->enmType < (int)RT_ELEMENTS(pRh->aTypes));
@@ -1119,10 +1130,6 @@ void vusbUrbCompletionRh(PVUSBURB pUrb)
 #ifdef LOG_ENABLED
     vusbUrbTrace(pUrb, "vusbUrbCompletionRh", true);
 #endif
-#ifndef VBOX_WITH_STATISTICS
-    PVUSBROOTHUB pRh = vusbDevGetRh(pUrb->VUsb.pDev);
-    AssertPtrReturnVoid(pRh);
-#endif
 
     pRh->pIRhPort->pfnXferCompletion(pRh->pIRhPort, pUrb);
     if (pUrb->enmState == VUSBURBSTATE_REAPED)
diff --git a/src/VBox/Devices/VMMDev/VMMDev.cpp b/src/VBox/Devices/VMMDev/VMMDev.cpp
index 8ce46a8..534f103 100644
--- a/src/VBox/Devices/VMMDev/VMMDev.cpp
+++ b/src/VBox/Devices/VMMDev/VMMDev.cpp
@@ -335,8 +335,9 @@ static int vmmdevReqHandler_ReportGuestInfo(PVMMDEV pThis, VMMDevRequestHeader *
         /* Check additions interface version. */
         pThis->fu32AdditionsOk = VBOX_GUEST_INTERFACE_VERSION_OK(pThis->guestInfo.interfaceVersion);
 
-        LogRel(("Guest Additions information report: Interface = 0x%08X osType = 0x%08X\n",
-                pThis->guestInfo.interfaceVersion, pThis->guestInfo.osType));
+        LogRel(("Guest Additions information report: Interface = 0x%08X osType = 0x%08X (%u-bit)\n",
+                pThis->guestInfo.interfaceVersion, pThis->guestInfo.osType,
+                (pThis->guestInfo.osType & VBOXOSTYPE_x64) ? 64 : 32));
 
         if (pThis->pDrv && pThis->pDrv->pfnUpdateGuestInfo)
             pThis->pDrv->pfnUpdateGuestInfo(pThis->pDrv, &pThis->guestInfo);
@@ -3452,8 +3453,9 @@ static DECLCALLBACK(int) vmmdevLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uin
 
     if (pThis->fu32AdditionsOk)
     {
-        LogRel(("Guest Additions information report: additionsVersion = 0x%08X, osType = 0x%08X\n",
-                pThis->guestInfo.interfaceVersion, pThis->guestInfo.osType));
+        LogRel(("Guest Additions information report: additionsVersion = 0x%08X, osType = 0x%08X (%u-bit)\n",
+                pThis->guestInfo.interfaceVersion, pThis->guestInfo.osType,
+                (pThis->guestInfo.osType & VBOXOSTYPE_x64) ? 64 : 32));
         if (pThis->pDrv)
         {
             if (pThis->guestInfo2.uFullVersion && pThis->pDrv->pfnUpdateGuestInfo2)
diff --git a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
index 54b62a9..4d22bb6 100644
--- a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
+++ b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
@@ -334,7 +334,7 @@ int main()
     GEN_CHECK_OFF(VGASTATE, svga.cbFIFO);
     GEN_CHECK_OFF(VGASTATE, svga.BasePort);
     GEN_CHECK_OFF(VGASTATE, svga.pFIFOIOThread);
-    GEN_CHECK_OFF(VGASTATE, svga.iWidth);
+    GEN_CHECK_OFF(VGASTATE, svga.uWidth);
     GEN_CHECK_OFF(VGASTATE, svga.u32ActionFlags);
     GEN_CHECK_OFF(VGASTATE, svga.f3DEnabled);
     GEN_CHECK_OFF(VGASTATE, svga.fVRAMTracking);
@@ -1648,7 +1648,7 @@ int main()
     GEN_CHECK_OFF(LSILOGICSCSI, enmWhoInit);
     GEN_CHECK_OFF(LSILOGICSCSI, enmDoorbellState);
     GEN_CHECK_OFF(LSILOGICSCSI, fDiagnosticEnabled);
-    GEN_CHECK_OFF(LSILOGICSCSI, fNotificationSend);
+    GEN_CHECK_OFF(LSILOGICSCSI, fNotificationSent);
     GEN_CHECK_OFF(LSILOGICSCSI, fEventNotificationEnabled);
     GEN_CHECK_OFF(LSILOGICSCSI, fDiagRegsEnabled);
     GEN_CHECK_OFF(LSILOGICSCSI, pNotificationQueueR3);
diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h
index 04d316c..6e41c29 100644
--- a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h
+++ b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h
@@ -77,6 +77,15 @@ static const char main_key_us_intl[MAIN_LEN][2] =
 "zZ","xX","cC","vV","bB","nN","mM",",<",".>","/?","<>","\x0\x0","\x0\x0"
 };
 
+/* U.S. English, International, alternative 102nd key */
+static const char main_key_us_intl_alt102[MAIN_LEN][2] =
+{
+"PS","1!","2@","3#","4$","5%","6R","7&","8*","9(","0)","-_","=+",
+"qQ","wW","eE","rR","tT","yY","uU","iI","oO","pP","[{","]}",
+"aA","sS","dD","fF","gG","hH","jJ","kK","lL",";:","QW","\\|",
+"zZ","xX","cC","vV","bB","nN","mM",",<",".>","/?","\\|","\x0\x0","\x0\x0"
+};
+
 /* U.S. English, Dvorak */
 static const char main_key_us_dvorak[MAIN_LEN][2] =
 {
diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h
index 9f5f6d9..8177fbf 100644
--- a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h
+++ b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h
@@ -43,6 +43,7 @@
 
  {"U.S. English", &main_key_us},
  {"U.S. English, International (with dead keys)", &main_key_us_intl},
+ {"U.S. English, International, alternative 102nd key", &main_key_us_intl_alt102},
  {"U.S. English, Dvorak", &main_key_us_dvorak},
  {"U.S. English, Left handed Dvorak", &main_key_us_dvorak_l},
  {"U.S. English, Right handed Dvorak", &main_key_us_dvorak_r},
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
index aafb878..b53e923 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
@@ -1311,6 +1311,18 @@
         <source>Suggest a maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
         <translation>Setzt die maximale Größe des Gastbildschirms. Der Gast wird diese Angabe nur befolgen, wenn die Gasterweiterungen installiert sind.</translation>
     </message>
+    <message>
+        <source>Machine Windows:</source>
+        <translation>VM-Fenster:</translation>
+    </message>
+    <message>
+        <source>If checked, machine windows will be raised when the mouse pointer moves over them.</source>
+        <translation>Wird die Maus von einem Fenster eines Gastes auf ein anderes Fenster desselben Gastes bewegt, dann wird das neue Fenster automatisch aktiviert.</translation>
+    </message>
+    <message>
+        <source>&Raise Window Under Mouse</source>
+        <translation>Fenster unter Maus &aktivieren</translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsExtension</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
index c9c1176..1f5e81c 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
@@ -470,12 +470,12 @@
         <translation type="obsolete">Habilitar o inhabilitar conexiones de escritorio remoto (RDP) a esta máquina</translation>
     </message>
     <message>
-        <source>&Insert Guest Additions CD image...</source>
-        <translation>&Insertar imagen de CD de las«Guest Additions»...</translation>
+        <source>&Install Guest Additions...</source>
+        <translation type="obsolete">&Instalar «Guest Additions»...</translation>
     </message>
     <message>
-        <source>Insert the Guest Additions disk file into the virtual drive</source>
-        <translation>Insertar el archivo de disco de las «Guest Additions» en la unidad virtual</translation>
+        <source>Mount the Guest Additions installation image</source>
+        <translation type="obsolete">Montar la imagen de las «Guest Additions»</translation>
     </message>
     <message>
         <source>De&bug</source>
@@ -668,7 +668,7 @@
     </message>
     <message>
         <source>Ins&ert Ctrl-Alt-Backspace</source>
-        <translation>Ins&ertar Ctrl-Alt-Retroceso </translation>
+        <translation>Ins&ertar Ctrl-Alt-Retroceso</translation>
     </message>
     <message>
         <source>&File</source>
@@ -1038,26 +1038,24 @@
         <translation>Menú emergente</translation>
     </message>
     <message>
-        <source>&Insert Guest Additions CD image...</source>
-        <comment>new</comment>
-        <translation type="obsolete">&Instalar «Guest Additions»...</translation>
+        <source>Show Session Information Window</source>
+        <translation>Mostar Ventana de información de sesión</translation>
     </message>
     <message>
-        <source>Insert the Guest Additions disk file into the virtual drive</source>
-        <comment>new</comment>
-        <translation type="obsolete">Montar la imagen de las «Guest Additions»</translation>
+        <source>&Webcams</source>
+        <translation>&Cámaras web</translation>
     </message>
     <message>
-        <source>Show Session Information Window</source>
-        <translation>Mostrar la ventana de información de sesión</translation>
+        <source>&Insert Guest Additions CD image...</source>
+        <translation>&Insertar la imagen de CD de las «Guest Additions»...</translation>
     </message>
     <message>
-        <source>&Webcams</source>
-        <translation>&Cámaras web</translation>
+        <source>Insert the Guest Additions disk file into the virtual drive</source>
+        <translation>Insertar el archivo de disco de las «Guest Additions» en la unidad virtual</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished">Red</translation>
+        <translation>Red</translation>
     </message>
 </context>
 <context>
@@ -3908,7 +3906,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Holds the name for this network.</source>
-        <translation>Contiene el nombre de esta red.</translation>
+        <translation>Contiene el nombre para esta red.</translation>
     </message>
     <message>
         <source>Network &CIDR:</source>
@@ -4704,15 +4702,15 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>No supported webcams connected to the host PC</source>
-        <translation>No hay cámaras web soportadas conectadas al PC anfitrión</translation>
+        <translation>No hay cámaras web conectadas al PC anfitrión</translation>
     </message>
     <message>
         <source>Connect Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>Conectar adaptador de red</translation>
     </message>
     <message>
         <source>Connect Network Adapter %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Conectar adaptador de red %1</translation>
     </message>
 </context>
 <context>
@@ -5025,7 +5023,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Remote Display is currently enabled for this virtual machine. However, this requires the <b>%1</b> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>La pantalla remota está activada para esta máquina virtual. Sin embargo, esto requiere que <b>%1</b> esté instalado. Instale el «Extension Pack» desde el sitio de descarga de VirtualBox, de otra forma su MV se iniciará con la pantalla remota desactivada.</translation>
     </message>
 </context>
 <context>
@@ -5039,8 +5037,8 @@ p, li { white-space: pre-wrap; }
         <translation>Muestra la ruta donde serán almacenadas las instantáneas de esta máquina virtual. Tenga en cuenta que las instantáneas pueden ocupar mucho espacio en disco.</translation>
     </message>
     <message>
-        <source>&Basic</source>
-        <translation>&Básico</translation>
+        <source>Basi&c</source>
+        <translation type="obsolete">&Básico</translation>
     </message>
     <message>
         <source>&Name:</source>
@@ -5083,8 +5081,8 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Controla la cantidad de memoria de video proveída a la máquina virtual.</translation>
     </message>
     <message>
-        <source>&Advanced</source>
-        <translation>&Avanzado</translation>
+        <source>A&dvanced</source>
+        <translation type="obsolete">&Avanzado</translation>
     </message>
     <message>
         <source>Defines the boot device order. Use the checkboxes on the left to enable or disable individual boot devices. Move items up and down to change the device order.</source>
@@ -5139,8 +5137,8 @@ p, li { white-space: pre-wrap; }
         <translation>Carpeta &instantáneas:</translation>
     </message>
     <message>
-        <source>&Description</source>
-        <translation>&Descripción</translation>
+        <source>D&escription</source>
+        <translation type="obsolete">&Descripción</translation>
     </message>
     <message>
         <source>Holds the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS.</source>
@@ -5183,8 +5181,8 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">ha seleccionado un tipo de SO invitado de 64-bit para esta MV. Como estos invitados requieren hardware de virtualización (VT-x/AMD-V), esta característica se activará automáticamente.</translation>
     </message>
     <message>
-        <source>&Drag'n'Drop:</source>
-        <translation>&Arrastrar y soltar:</translation>
+        <source>D&rag'n'Drop:</source>
+        <translation type="obsolete">&Arrastrar y soltar:</translation>
     </message>
     <message>
         <source>Selects which data will be copied between the guest and the host OS by drag'n'drop. This feature requires Guest Additions to be installed in the guest OS.</source>
@@ -5210,6 +5208,22 @@ p, li { white-space: pre-wrap; }
         <source>Show at &Top of Screen</source>
         <translation>Mostrar en la parte &superior de la pantalla</translation>
     </message>
+    <message>
+        <source>&Basic</source>
+        <translation>&Básico</translation>
+    </message>
+    <message>
+        <source>&Advanced</source>
+        <translation>&Avanzado</translation>
+    </message>
+    <message>
+        <source>&Drag'n'Drop:</source>
+        <translation>&Arrastrar y soltar:</translation>
+    </message>
+    <message>
+        <source>&Description</source>
+        <translation>&Descripción</translation>
+    </message>
 </context>
 <context>
     <name>UIMachineSettingsNetwork</name>
@@ -6318,6 +6332,10 @@ p, li { white-space: pre-wrap; }
         <source>&Solid-state Drive</source>
         <translation>Unidad de estado &sólido</translation>
     </message>
+    <message>
+        <source>Add USB Controller</source>
+        <translation type="obsolete">Agregar controlador USB</translation>
+    </message>
 </context>
 <context>
     <name>UIMachineSettingsSystem</name>
@@ -7248,15 +7266,15 @@ p, li { white-space: pre-wrap; }
         <translation><p>¡Ocurrió un error durante la ejecución de la máquina virtual! Los detalles del error se muestran abajo. Puede intentar corregir el error y reanudar la ejecución de la máquina virtual.</p></translation>
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update the Guest Additions to the current version by choosing <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu.</p></source>
+        <source><p>The VirtualBox Guest Additions installed in the Guest OS are too old: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) will most likely stop working properly.</p><p>Please update the Guest Additions to the current version by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source>
         <translation type="obsolete"><p>Las «Guest Additions» instaladas en el SO huésped son muy viejas: la versión instalada es %1. La versión esperada es %2. Algunas funcionalidades que requieren adiciones del huésped (integración del ratón, autoredimensionamiento de la pantalla huésped) probablemente dejarán de funcionar apropiadamente.</p><p>Actualice las «Guest Additions» a la versión más reciente eligiendo <b>Instalar «Guest Additions»<b> desde el men [...]
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions installed in the Guest OS are outdated: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) may not work as expected.</p><p>It is recommended to update the Guest Additions to the current version  by choosing <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu.</p></source>
+        <source><p>The VirtualBox Guest Additions installed in the Guest OS are outdated: the installed version is %1, the expected version is %2. Some features that require Guest Additions (mouse integration, guest display auto-resize) may not work as expected.</p><p>It is recommended to update the Guest Additions to the current version  by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source>
         <translation type="obsolete"><p>Las «Guest Additions» instaladas en el SO huésped son muy viejas: la versión instalada es %1. La versión esperada es %2. Algunas funcionalidades que requieren adiciones del huésped (integración del ratón, autoredimensionamiento de la pantalla huésped) podrían dejarán de funcionar apropiadamente.</p><p>Se recomienda actualizar las «Guest Additions» a la versión más reciente eligiendo <b>Instalar «Guest Additions»<b> des [...]
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions installed in the Guest OS are too recent for this version of VirtualBox: the installed version is %1, the expected version is %2.</p><p>Using a newer version of Additions with an older version of VirtualBox is not supported. Please install the current version of the Guest Additions by choosing <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu.</p></source>
+        <source><p>The VirtualBox Guest Additions installed in the Guest OS are too recent for this version of VirtualBox: the installed version is %1, the expected version is %2.</p><p>Using a newer version of Additions with an older version of VirtualBox is not supported. Please install the current version of the Guest Additions by choosing <b>Install Guest Additions</b> from the <b>Devices</b> menu.</p></source>
         <translation type="obsolete"><p>Las «Guest Additions» instaladas en el SO huésped son demasiado nuevas para esta versión de VirtualBox: la versión instalada es %1. La versión esperada es %2.</p><p>Utilizar una versión más nueva de las «Guest Additions» con una versión más vieja de VirtualBox no está soportado. Instale la versión de las «Guest Additions» correspondiete a esta versión de VirtualBox eligiendo <b>Instalar «Guest Additions»<b> desde el me [...]
     </message>
     <message>
@@ -7401,9 +7419,9 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Descargar</translation>
     </message>
     <message>
-        <source>Insert</source>
+        <source>Mount</source>
         <comment>additions</comment>
-        <translation>Insertar</translation>
+        <translation type="obsolete">Montar</translation>
     </message>
     <message>
         <source><p>Host key is currently defined as <b>%1</b>.</p></source>
@@ -8074,7 +8092,7 @@ p, li { white-space: pre-wrap; }
         <translation>Fallo al desconectar el dispositivo de disquete (<nobr><b>%1</b></nobr>) de la ranura <i>%2</i> de la máquina <b>%3</b>.</translation>
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Machine</b> menu. If they are installed but the machine is not yet fully starte [...]
+        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Machine</b> menu. If they are installed but the machine is not yet fully started then s [...]
         <translation type="obsolete"><p>Las «Guest Additions» de VirtualBox no parece que estén disponibles en esta máquina virtual y las carpetas compartidas no pueden ser usadas sin ellas. Para usar las carpetas compartidas dentro de la máquina virtual instale las «Guest Additions» si no están instaladas o reinstalelas si no están funcionando correctamente, seleccionando <b>Instalar «Guest Additions»</b> del menú <b>Máquina</b>. Si están instaladas pero la [...]
     </message>
     <message numerus="yes">
@@ -8133,8 +8151,8 @@ p, li { white-space: pre-wrap; }
         <translation><p>Note que la unidad de almacenamiento de este medio no será borrada y podrá ser usada más tarde de nuevo.</p></translation>
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully starte [...]
-        <translation><p>Las «Guest Additions» de VirtualBox no parecen estar disponibles en esta máquina virtual y las carpetas compartidas no pueden ser usadas sin ellas. Para usar las carpetas compartidas dentro de la máquina virtual instale las «Guest Additions» si no están instaladas o reinstálelas si no están funcionando correctamente seleccionando <b>Insertar imagen de CD de las«Guest Additions»</b> del menú <b>Dispositivos</b>. Si están instaladas las [...]
+        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started then s [...]
+        <translation type="obsolete"><p>Las «Guest Additions» de VirtualBox no parecen estar disponibles en esta máquina virtual y las carpetas compartidas no pueden ser usadas sin ellas. Para usar las carpetas compartidas dentro de la máquina virtual instale las «Guest Additions»  si no están instaladas o reinstalelas si no están funcionando correctamente seleccionando <b>Instalar «Guest Additions»</b> del menú <b>Dispositivos</b>. Si están instaladas las c [...]
     </message>
     <message>
         <source><p>The virtual machine window will be now switched to <b>fullscreen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
@@ -8765,16 +8783,6 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete"><p>La pantalla de la máquina virtual está optimizada para trabajar en modo de color <b>%1&nbsp;bit</b>, sin embargo, el modo del pantalla de la máquina virtual está configurada como <b>%2&nbsp;bit</b>.</p><p>Abra el diálogo de las propiedades de pantalla en el SO invitado y seleccione un modo de color de <b>%3&nbsp;bit</b>, si está disponible, para obtener el mejor rendimiento posible e [...]
     </message>
     <message>
-        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully starte [...]
-        <comment>new</comment>
-        <translation type="obsolete"><p>Las «Guest Additions» de VirtualBox no parecen estar disponibles en esta máquina virtual y las carpetas compartidas no pueden ser usadas sin ellas. Para usar las carpetas compartidas dentro de la máquina virtual instale las «Guest Additions»  si no están instaladas o reinstalelas si no están funcionando correctamente seleccionando <b>Instalar «Guest Additions»</b> del menú <b>Dispositivos</b>. Si están instaladas las c [...]
-    </message>
-    <message>
-        <source>Insert</source>
-        <comment>additions-new</comment>
-        <translation type="obsolete">Montar</translation>
-    </message>
-    <message>
         <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
         <translation>Fallo al conectar la cámara web <b>%1</b> a la máquina virtual <b>%2</b>.</translation>
     </message>
@@ -8783,8 +8791,17 @@ p, li { white-space: pre-wrap; }
         <translation>Fallo al desconectar la cámara web <b>%1</b> de la máquina virtual <b>%2</b>.</translation>
     </message>
     <message>
+        <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully starte [...]
+        <translation><p>Las «Guest Additions» de VirtualBox no parecen estar disponibles en esta máquina virtual y las carpetas compartidas no pueden ser usadas. Para usar las carpetas compartidas en la máquina virtual instale las «Guest Additions» si no están instaladas o reinstalelas si no están funcionando correctamente seleccionando <b>Insertar la imagen de CD de las «Guest Additions»</b> desde el menú <b>Dispositivos</b>. Si están instaladas las carpeta [...]
+    </message>
+    <message>
+        <source>Insert</source>
+        <comment>additions</comment>
+        <translation>Insertar</translation>
+    </message>
+    <message>
         <source><p>The virtual screen is currently set to a <b>%1&nbsp;bit</b> color mode. For better performance please change this to <b>%2&nbsp;bit</b>. This can usually be done from the <b>Display</b> section of the guest operating system's Control Panel or System Settings.</p></source>
-        <translation><p>La pantalla virtual actualmente está establecida a un modo de color de <b>%1&nbsp;bit</b>. Para mejor rendimiento cambielo a <b>%2&nbsp;bit</b>. Esto puede hacerse desde la sección <b>Pantalla</b> del Panel de control o Preferencias del sistema del sistema operativo invitado.</p></translation>
+        <translation><p>La pantalla virtual tiene establecido un modo de color de <b>%1&nbsp;bit</b>. Para un mejor rendimiento cámbielo a <b>%2&nbsp;bit</b>. Esto puede hacerse desde la sección <b>Pantalla</b> del Panel de control del sistema operativo invitado o desde las Preferencias del sistema.</p></translation>
     </message>
 </context>
 <context>
@@ -8876,8 +8893,8 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>UINameAndSystemEditor</name>
     <message>
-        <source>&Name:</source>
-        <translation>&Nombre:</translation>
+        <source>N&ame:</source>
+        <translation type="obsolete">&Nombre:</translation>
     </message>
     <message>
         <source>Holds the name of the virtual machine.</source>
@@ -8907,6 +8924,10 @@ p, li { white-space: pre-wrap; }
         <source>Selects the operating system type that you plan to install into this virtual machine (called a guest operating system).</source>
         <translation>Selecciona el tipo del sistema operativo que planea instalar en esta máquina virtual (llamado sistema operativo invitado).</translation>
     </message>
+    <message>
+        <source>&Name:</source>
+        <translation>&Nombre:</translation>
+    </message>
 </context>
 <context>
     <name>UINetworkManagerDialog</name>
@@ -10040,7 +10061,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     </message>
     <message>
         <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is  a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to [...]
-        <translation><h3>¡Bienvenido a VirtualBox!</h3><p>La parte izquierda de esta ventana está destinada a mostrar la lista de máquinas virtuales de su computadora. En este momento esta lista está vacía porque todavía no se ha creado ninguna máquina virtual.<img src=:/welcome.png align=right/></p><p>Para crear una nueva máquina virtual presione el botón <b>Nueva</b> en la barra de herramientas principal localizada en la parte superior de [...]
+        <translation><h3>¡Bienvenido a VirtualBox!</h3><p>La parte izquierda de esta ventana está destinada a mostrar la lista de máquinas virtuales de su computadora. En este momento esta lista está vacía porque todavía no se ha creado ninguna máquina virtual.<img src=:/welcome.png align=right/></p><p>Para crear una nueva máquina virtual presione el botón <b>Nueva</b> en la barra de herramientas principal localizada en la parte superior de [...]
     </message>
     <message>
         <source>Manager</source>
@@ -10384,6 +10405,177 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     </message>
 </context>
 <context>
+    <name>UIVMInfoDialog</name>
+    <message>
+        <source>Session Information Dialog</source>
+        <translation type="obsolete">Diálogo de Información de Sesión</translation>
+    </message>
+    <message>
+        <source>&Close</source>
+        <translation type="obsolete">&Cerrar</translation>
+    </message>
+    <message>
+        <source>%1 - Session Information</source>
+        <translation type="obsolete">%1 - Información de sesión</translation>
+    </message>
+    <message>
+        <source>&Details</source>
+        <translation type="obsolete">&Detalles</translation>
+    </message>
+    <message>
+        <source>&Runtime</source>
+        <translation type="obsolete">Tiempo de &ejecución</translation>
+    </message>
+    <message>
+        <source>DMA Transfers</source>
+        <translation type="obsolete">Transferencias DMA</translation>
+    </message>
+    <message>
+        <source>PIO Transfers</source>
+        <translation type="obsolete">Transferencias PIO</translation>
+    </message>
+    <message>
+        <source>Data Read</source>
+        <translation type="obsolete">Datos leídos</translation>
+    </message>
+    <message>
+        <source>Data Written</source>
+        <translation type="obsolete">Datos escritos</translation>
+    </message>
+    <message>
+        <source>Data Transmitted</source>
+        <translation type="obsolete">Datos transmitidos</translation>
+    </message>
+    <message>
+        <source>Data Received</source>
+        <translation type="obsolete">Datos recibidos</translation>
+    </message>
+    <message>
+        <source>Enabled</source>
+        <translation type="obsolete">Habilitado</translation>
+    </message>
+    <message>
+        <source>Disabled</source>
+        <translation type="obsolete">Inhabilitado</translation>
+    </message>
+    <message>
+        <source>Runtime Attributes</source>
+        <translation type="obsolete">Atributos de tiempo de ejecución</translation>
+    </message>
+    <message>
+        <source>Screen Resolution</source>
+        <translation type="obsolete">Resolución de pantalla</translation>
+    </message>
+    <message>
+        <source>CD/DVD-ROM Statistics</source>
+        <translation type="obsolete">Estadísticas de CD/DVD-ROM</translation>
+    </message>
+    <message>
+        <source>Network Adapter Statistics</source>
+        <translation type="obsolete">Estadísticas del adaptador de red</translation>
+    </message>
+    <message>
+        <source>Not attached</source>
+        <translation type="obsolete">No conectado</translation>
+    </message>
+    <message>
+        <source>Version %1.%2</source>
+        <comment>guest additions</comment>
+        <translation type="obsolete">Versión %1.%2</translation>
+    </message>
+    <message>
+        <source>Not Detected</source>
+        <comment>guest additions</comment>
+        <translation type="obsolete">No detectado</translation>
+    </message>
+    <message>
+        <source>Not Detected</source>
+        <comment>guest os type</comment>
+        <translation type="obsolete">No detectado</translation>
+    </message>
+    <message>
+        <source>Guest Additions</source>
+        <translation type="obsolete">«Guest Additions»</translation>
+    </message>
+    <message>
+        <source>Guest OS Type</source>
+        <translation type="obsolete">Tipo de SO invitado</translation>
+    </message>
+    <message>
+        <source>Hard Disk Statistics</source>
+        <translation type="obsolete">Estadísticas del disco duro</translation>
+    </message>
+    <message>
+        <source>No Hard Disks</source>
+        <translation type="obsolete">No hay discos duros</translation>
+    </message>
+    <message>
+        <source>No Network Adapters</source>
+        <translation type="obsolete">No hay adaptadores de red</translation>
+    </message>
+    <message>
+        <source>Enabled</source>
+        <comment>nested paging</comment>
+        <translation type="obsolete">Habilitado</translation>
+    </message>
+    <message>
+        <source>Disabled</source>
+        <comment>nested paging</comment>
+        <translation type="obsolete">Inhabilitado</translation>
+    </message>
+    <message>
+        <source>Nested Paging</source>
+        <translation type="obsolete">Paginación anidada</translation>
+    </message>
+    <message>
+        <source>UIVMInfoDialog</source>
+        <translation type="obsolete">VBoxVMInformacionDlg</translation>
+    </message>
+    <message>
+        <source>Not Available</source>
+        <comment>details report (VRDP server port)</comment>
+        <translation type="obsolete">No disponible</translation>
+    </message>
+    <message>
+        <source>Storage Statistics</source>
+        <translation type="obsolete">Estadísticas de almacenamiento</translation>
+    </message>
+    <message>
+        <source>No Storage Devices</source>
+        <translation type="obsolete">No hay dispositivos de almacenamiento</translation>
+    </message>
+    <message>
+        <source>Network Statistics</source>
+        <translation type="obsolete">Estadísticas de red</translation>
+    </message>
+    <message>
+        <source>Nested Paging</source>
+        <comment>details report</comment>
+        <translation type="obsolete">Paginación anidada</translation>
+    </message>
+    <message>
+        <source>Not Available</source>
+        <comment>details report (VRDE server port)</comment>
+        <translation type="obsolete">No disponible</translation>
+    </message>
+    <message>
+        <source>Clipboard Mode</source>
+        <translation type="obsolete">Modo portapapeles</translation>
+    </message>
+    <message>
+        <source>Drag'n'Drop Mode</source>
+        <translation type="obsolete">Modo de arrastrar y soltar</translation>
+    </message>
+    <message>
+        <source>Configuration &Details</source>
+        <translation type="obsolete">Detalles de &configuración</translation>
+    </message>
+    <message>
+        <source>&Runtime Information</source>
+        <translation type="obsolete">Información de &ejecución</translation>
+    </message>
+</context>
+<context>
     <name>UIVMListView</name>
     <message>
         <source>Inaccessible</source>
@@ -10913,7 +11105,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     <name>UIWizardExportAppPageBasic3</name>
     <message>
         <source><p>Please choose a filename to export the OVF/OVA to.</p><p>If you use an <i>ova</i> extension, then all the files will be combined into one Open Virtualization Format Archive.</p><p>If you use an <i>ovf</i> extension, several files will be written separately.</p><p>Other extensions are not allowed.</p></source>
-        <translation><p>Seleccione un nombre de archivo para exportar el OVF/OVA.</p><p>Si usa una extensión <i>ova</i>, entonces todos los archivos se combinarán en un único Open Virtualization Format Archive.</p><p>Su usa una extesión <i>ovf</i>, varios archivos se escribirán separadamente.</p><p>No se permiten otras extensiones.</p>    </translation>
+        <translation><p>Seleccione un nombre de archivo para exportar el OVF/OVA.</p><p>Si usa una extensión <i>ova</i>, entonces todos los archivos se combinarán en un único Open Virtualization Format Archive.</p><p>Si usa una extesión <i>ovf</i>, varios archivos se escribirán separadamente.</p><p>No se permiten otras extensiones.</p>   </translation>
     </message>
     <message>
         <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source>
@@ -11140,7 +11332,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     </message>
     <message>
         <source>Please choose a descriptive name for the new virtual machine and select the type of operating system you intend to install on it. The name you choose will be used throughout VirtualBox to identify this machine.</source>
-        <translation>Seleccione un nombre descriptivo para la nueva máquina virtual y seleccione el tipo de sistema operativo que tiene intención de instalar en ella. El nombre que seleccione será usado por VirtualBox para identificar esta máquina.</translation>
+        <translation>Seleccione un nombre descriptivo para la nueva máquina virtual y el tipo de sistema operativo que tiene intención de instalar en ella. El nombre que seleccione será usado por VirtualBox para identificar esta máquina.</translation>
     </message>
     <message>
         <source>Memory size</source>
@@ -11598,11 +11790,11 @@ Versión %1</translation>
         <translation type="obsolete">Crear o modificar las carpetas compartidas</translation>
     </message>
     <message>
-        <source>&Insert Guest Additions CD image...</source>
+        <source>&Install Guest Additions...</source>
         <translation type="obsolete">&Instalar «Guest Additions»...</translation>
     </message>
     <message>
-        <source>Insert the Guest Additions disk file into the virtual drive</source>
+        <source>Mount the Guest Additions installation image</source>
         <translation type="obsolete">Montar la imagen de las «Guest Additions»</translation>
     </message>
     <message>
@@ -12474,7 +12666,7 @@ Versión %1</translation>
     </message>
     <message>
         <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
-        <translation>El valor actual predeterminado de la ruta será mostrado después de aceptar los cambios y abrir de nuevo este diálogo.</translation>
+        <translation>El valor de la ruta predeterminada será mostrada después de aceptar los cambios y abrir nuevamente este diálogo.</translation>
     </message>
     <message>
         <source><not selected></source>
@@ -12521,9 +12713,8 @@ Versión %1</translation>
         <translation>Ingrese aquí la ruta al archivo deseado.</translation>
     </message>
     <message>
-        <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
-        <comment>new</comment>
-        <translation type="obsolete">El valor de la ruta predeterminada será mostrada después de aceptar los cambios y abrir nuevamente este diálogo.</translation>
+        <source>The actual default path value will be displayed after accepting the changes and opening this dialog again.</source>
+        <translation type="obsolete">El valor de la actual ruta por defecto será mostrado después de aceptar los cambios y abrir de nuevo este diálogo.</translation>
     </message>
 </context>
 <context>
@@ -14492,6 +14683,11 @@ Versión %1</translation>
         <comment>StorageControllerType</comment>
         <translation type="obsolete">USB</translation>
     </message>
+    <message>
+        <source>USB Port %1</source>
+        <comment>StorageSlot</comment>
+        <translation type="obsolete">Puerto USB %1</translation>
+    </message>
 </context>
 <context>
     <name>VBoxGlobalSettings</name>
@@ -16755,24 +16951,20 @@ cualquier valor.</qt></translation>
 <context>
     <name>VBoxVMInformationDlg</name>
     <message>
-        <source>Session Information Dialog</source>
-        <translation type="obsolete">Diálogo de Información de Sesión</translation>
-    </message>
-    <message>
-        <source>&Close</source>
-        <translation type="obsolete">&Cerrar</translation>
+        <source>VBoxVMInformationDlg</source>
+        <translation>VBoxVMInformationDlg</translation>
     </message>
     <message>
-        <source>%1 - Session Information</source>
-        <translation>%1 - Información de sesión</translation>
+        <source>Configuration &Details</source>
+        <translation>Detalles de &configuración</translation>
     </message>
     <message>
-        <source>&Details</source>
-        <translation type="obsolete">&Detalles</translation>
+        <source>&Runtime Information</source>
+        <translation>Información de &ejecución</translation>
     </message>
     <message>
-        <source>&Runtime</source>
-        <translation type="obsolete">Tiempo de &ejecución</translation>
+        <source>%1 - Session Information</source>
+        <translation>%1 - Información de sesión</translation>
     </message>
     <message>
         <source>DMA Transfers</source>
@@ -16799,39 +16991,6 @@ cualquier valor.</qt></translation>
         <translation>Datos recibidos</translation>
     </message>
     <message>
-        <source>Enabled</source>
-        <translation type="obsolete">Habilitado</translation>
-    </message>
-    <message>
-        <source>Disabled</source>
-        <translation type="obsolete">Inhabilitado</translation>
-    </message>
-    <message>
-        <source>Runtime Attributes</source>
-        <translation>Atributos de tiempo de ejecución</translation>
-    </message>
-    <message>
-        <source>Screen Resolution</source>
-        <translation>Resolución de pantalla</translation>
-    </message>
-    <message>
-        <source>CD/DVD-ROM Statistics</source>
-        <translation type="obsolete">Estadísticas de CD/DVD-ROM</translation>
-    </message>
-    <message>
-        <source>Network Adapter Statistics</source>
-        <translation type="obsolete">Estadísticas del adaptador de red</translation>
-    </message>
-    <message>
-        <source>Not attached</source>
-        <translation type="obsolete">No conectado</translation>
-    </message>
-    <message>
-        <source>Version %1.%2</source>
-        <comment>guest additions</comment>
-        <translation type="obsolete">Versión %1.%2</translation>
-    </message>
-    <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
         <translation>No detectado</translation>
@@ -16842,47 +17001,33 @@ cualquier valor.</qt></translation>
         <translation>No detectado</translation>
     </message>
     <message>
-        <source>Guest Additions</source>
-        <translation>«Guest Additions»</translation>
-    </message>
-    <message>
-        <source>Guest OS Type</source>
-        <translation>Tipo de SO invitado</translation>
-    </message>
-    <message>
-        <source>Hard Disk Statistics</source>
-        <translation type="obsolete">Estadísticas del disco duro</translation>
-    </message>
-    <message>
-        <source>No Hard Disks</source>
-        <translation type="obsolete">No hay discos duros</translation>
+        <source>Not Available</source>
+        <comment>details report (VRDE server port)</comment>
+        <translation>No disponible</translation>
     </message>
     <message>
-        <source>No Network Adapters</source>
-        <translation>No hay adaptadores de red</translation>
+        <source>Runtime Attributes</source>
+        <translation>Atributos de tiempo de ejecución</translation>
     </message>
     <message>
-        <source>Enabled</source>
-        <comment>nested paging</comment>
-        <translation type="obsolete">Habilitado</translation>
+        <source>Screen Resolution</source>
+        <translation>Resolución de pantalla</translation>
     </message>
     <message>
-        <source>Disabled</source>
-        <comment>nested paging</comment>
-        <translation type="obsolete">Inhabilitado</translation>
+        <source>Clipboard Mode</source>
+        <translation>Modo portapapeles</translation>
     </message>
     <message>
-        <source>Nested Paging</source>
-        <translation type="obsolete">Paginación anidada</translation>
+        <source>Drag'n'Drop Mode</source>
+        <translation>Modo de arrastrar y soltar</translation>
     </message>
     <message>
-        <source>VBoxVMInformationDlg</source>
-        <translation>VBoxVMInformacionDlg</translation>
+        <source>Guest Additions</source>
+        <translation>«Guest Additions»</translation>
     </message>
     <message>
-        <source>Not Available</source>
-        <comment>details report (VRDP server port)</comment>
-        <translation type="obsolete">No disponible</translation>
+        <source>Guest OS Type</source>
+        <translation>Tipo de SO invitado</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
@@ -16897,30 +17042,8 @@ cualquier valor.</qt></translation>
         <translation>Estadísticas de red</translation>
     </message>
     <message>
-        <source>Nested Paging</source>
-        <comment>details report</comment>
-        <translation type="obsolete">Paginación anidada</translation>
-    </message>
-    <message>
-        <source>Not Available</source>
-        <comment>details report (VRDE server port)</comment>
-        <translation>No disponible</translation>
-    </message>
-    <message>
-        <source>Clipboard Mode</source>
-        <translation>Modo portapapeles</translation>
-    </message>
-    <message>
-        <source>Drag'n'Drop Mode</source>
-        <translation>Modo de arrastrar y soltar</translation>
-    </message>
-    <message>
-        <source>Configuration &Details</source>
-        <translation>Detalles de &configuración</translation>
-    </message>
-    <message>
-        <source>&Runtime Information</source>
-        <translation>Información de &ejecución</translation>
+        <source>No Network Adapters</source>
+        <translation>No hay adaptadores de red</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
index a0bf7df..b3754c4 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
@@ -94,6 +94,9 @@ const char* UIDefs::GUI_HiDPIOptimization = "GUI/HiDPI/Optimization";
 const char* UIDefs::GUI_RestrictedGlobalSettingsPages = "GUI/RestrictedGlobalSettingsPages";
 const char* UIDefs::GUI_RestrictedMachineSettingsPages = "GUI/RestrictedMachineSettingsPages";
 
+/* Settings dialogs: Display page stuff: */
+const char* UIDefs::GUI_ActivateHoveredMachineWindow = "GUI/ActivateHoveredMachineWindow";
+
 /* Mini tool-bar definitions: */
 const char* UIDefs::GUI_ShowMiniToolBar = "GUI/ShowMiniToolBar";
 const char* UIDefs::GUI_MiniToolBarAlignment = "GUI/MiniToolBarAlignment";
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
index fb7f330..532bfae 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
@@ -163,6 +163,9 @@ namespace UIDefs
     extern const char* GUI_RestrictedGlobalSettingsPages;
     extern const char* GUI_RestrictedMachineSettingsPages;
 
+    /* Settings dialogs: Display page stuff: */
+    extern const char* GUI_ActivateHoveredMachineWindow;
+
     /* Mini tool-bar declarations: */
     extern const char* GUI_ShowMiniToolBar;
     extern const char* GUI_MiniToolBarAlignment;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
index f622362..51f4a7b 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
@@ -3333,14 +3333,14 @@ QString VBoxGlobal::fullMediumFormatName(const QString &strBaseMediumFormatName)
 }
 
 /* static */
-bool VBoxGlobal::isApprovedByExtraData(CVirtualBox &vbox, const QString &strExtraDataKey)
+bool VBoxGlobal::isApprovedByExtraData(CVirtualBox &vbox, const QString &strExtraDataKey, bool fApprovedByDefault /* = false */)
 {
     /* Load corresponding extra-data value: */
     QString strExtraDataValue(vbox.GetExtraData(strExtraDataKey));
 
     /* 'false' if value was not set: */
     if (strExtraDataValue.isEmpty())
-        return false;
+        return fApprovedByDefault;
 
     /* Handle particular values: */
     return    strExtraDataValue.compare("true", Qt::CaseInsensitive) == 0
@@ -3350,14 +3350,14 @@ bool VBoxGlobal::isApprovedByExtraData(CVirtualBox &vbox, const QString &strExtr
 }
 
 /* static */
-bool VBoxGlobal::isApprovedByExtraData(CMachine &machine, const QString &strExtraDataKey)
+bool VBoxGlobal::isApprovedByExtraData(CMachine &machine, const QString &strExtraDataKey, bool fApprovedByDefault /* = false */)
 {
     /* Load corresponding extra-data value: */
     QString strExtraDataValue(machine.GetExtraData(strExtraDataKey));
 
     /* 'false' if value was not set: */
     if (strExtraDataValue.isEmpty())
-        return false;
+        return fApprovedByDefault;
 
     /* Handle particular values: */
     return    strExtraDataValue.compare("true", Qt::CaseInsensitive) == 0
@@ -3731,6 +3731,20 @@ QList<MachineSettingsPageType> VBoxGlobal::restrictedMachineSettingsPages(CMachi
     return result;
 }
 
+/* static */
+bool VBoxGlobal::activateHoveredMachineWindow(CVirtualBox &vbox)
+{
+    /* 'true' if activating is approved by the extra-data: */
+    return isApprovedByExtraData(vbox, GUI_ActivateHoveredMachineWindow, true);
+}
+
+/* static */
+void VBoxGlobal::setActivateHoveredMachineWindow(CVirtualBox &vbox, bool fActivate)
+{
+    /* "false" if activating is restricted, null-string otherwise: */
+    vbox.SetExtraData(GUI_ActivateHoveredMachineWindow, fActivate ? QString() : QString("false"));
+}
+
 #ifndef Q_WS_MAC
 /* static */
 QStringList VBoxGlobal::machineWindowIconNames(CMachine &machine)
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
index 25d36cd..cffd98e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
@@ -353,8 +353,8 @@ public:
     static QString fullMediumFormatName(const QString &strBaseMediumFormatName);
 
     /* Extra-data settings stuff: */
-    static bool isApprovedByExtraData(CVirtualBox &vbox, const QString &strExtraDataKey);
-    static bool isApprovedByExtraData(CMachine &machine, const QString &strExtraDataKey);
+    static bool isApprovedByExtraData(CVirtualBox &vbox, const QString &strExtraDataKey, bool fApprovedByDefault = false);
+    static bool isApprovedByExtraData(CMachine &machine, const QString &strExtraDataKey, bool fApprovedByDefault = false);
 #ifdef VBOX_GUI_WITH_NETWORK_MANAGER
     static bool shouldWeAllowApplicationUpdate(CVirtualBox &vbox);
 #endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
@@ -386,6 +386,8 @@ public:
     static MachineCloseAction restrictedMachineCloseActions(CMachine &machine);
     static QList<GlobalSettingsPageType> restrictedGlobalSettingsPages(CVirtualBox &vbox);
     static QList<MachineSettingsPageType> restrictedMachineSettingsPages(CMachine &machine);
+    static bool activateHoveredMachineWindow(CVirtualBox &vbox);
+    static void setActivateHoveredMachineWindow(CVirtualBox &vbox, bool fActivate);
 #ifndef Q_WS_MAC
     /** Except Mac OS X: Loads redefined machine-window icon names. */
     static QStringList machineWindowIconNames(CMachine &machine);
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp
index 68fb913..c16bdf8 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp
@@ -171,3 +171,119 @@ void WinHidDevicesBroadcastLeds(bool fNumLockOn, bool fCapsLockOn, bool fScrollL
     else
         LogRel2(("HID LEDs sync: broadcast failed\n"));
 }
+
+/** @brief doesCurrentLayoutHaveAltGr
+  *
+  * @return true if this keyboard layout has an AltGr key, false otherwise
+  * Check to see whether the current keyboard layout actually has an AltGr key
+  * by checking whether any of the keys which might do produce a symbol when
+  * AltGr (Control + Alt) is depressed. Generally this loop will exit pretty
+  * early (it exits on the first iteration for my German layout). If there is
+  * no AltGr key in the layout then it will run right through, but that should
+  * hopefully not happen very often.
+  * 
+  * In theory we could do this once and cache the result, but that involves
+  * tracking layout switches to invalidate the cache, and I don't think that the
+  * added complexity is worth the price. */
+static bool doesCurrentLayoutHaveAltGr()
+{
+    /** Keyboard state array with VK_CONTROL and VK_MENU depressed. */
+    const BYTE auKeyStates[256] =
+        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80 };
+    WORD ach;
+    unsigned i;
+
+    for (i = '0'; i <= VK_OEM_102; ++i)
+    {
+        if (ToAscii(i, 0, auKeyStates, &ach, 0))
+            break;
+        /* Skip ranges of virtual keys which are undefined or not relevant. */
+        if (i == '9')
+            i = 'A' - 1;
+        if (i == 'Z')
+            i = VK_OEM_1 - 1;
+        if (i == VK_OEM_3)
+            i = VK_OEM_4 - 1;
+        if (i == VK_OEM_8)
+            i = VK_OEM_102 - 1;
+    }
+    if (i > VK_OEM_102)
+        return false;
+    return true;
+}
+
+void WinAltGrMonitor::updateStateFromKeyEvent(unsigned iDownScanCode,
+                                              bool fKeyDown, bool fExtendedKey)
+{
+    LONG messageTime = GetMessageTime();
+    /* We do not want the make/break: */
+    AssertRelease(~iDownScanCode & 0x80);
+    /* Depending on m_enmFakeControlDetectionState: */
+    switch (m_enmFakeControlDetectionState)
+    {
+        case NONE:
+        case FAKE_CONTROL_DOWN:
+            if (   iDownScanCode == 0x1D /* left control */
+                && fKeyDown
+                && !fExtendedKey)
+                m_enmFakeControlDetectionState = LAST_EVENT_WAS_LEFT_CONTROL_DOWN;
+            else
+                m_enmFakeControlDetectionState = NONE;
+            break;
+        case LAST_EVENT_WAS_LEFT_CONTROL_DOWN:
+            if (   iDownScanCode == 0x38 /* Alt */
+                && fKeyDown
+                && fExtendedKey
+                && m_timeOfLastKeyEvent == messageTime
+                && doesCurrentLayoutHaveAltGr())
+            {
+                m_enmFakeControlDetectionState = FAKE_CONTROL_DOWN;
+                break;
+            }
+            else
+                m_enmFakeControlDetectionState = LEFT_CONTROL_DOWN;
+            /* Fall through. */
+        case LEFT_CONTROL_DOWN:
+            if (   iDownScanCode == 0x1D /* left control */
+                && !fKeyDown
+                && !fExtendedKey)
+                m_enmFakeControlDetectionState = NONE;
+            break;
+        default:
+            AssertReleaseMsgFailed(("Unknown AltGr detection state.\n"));
+    }
+    m_timeOfLastKeyEvent = messageTime;
+}
+
+bool WinAltGrMonitor::isLeftControlReleaseNeeded() const
+{
+    return m_enmFakeControlDetectionState == FAKE_CONTROL_DOWN;
+}
+
+bool WinAltGrMonitor::isCurrentEventDefinitelyFake(unsigned iDownScanCode,
+                                                   bool fKeyDown,
+                                                   bool fExtendedKey) const
+{
+    MSG peekMsg;
+    LONG messageTime = GetMessageTime();
+
+    if (   iDownScanCode != 0x1d /* scan code: Control */ || fExtendedKey)
+        return false;
+    if (!PeekMessage(&peekMsg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_NOREMOVE))
+        return false;
+
+	if (messageTime != peekMsg.time)
+	    return false;
+	if (   fKeyDown
+        && (peekMsg.message != WM_KEYDOWN && peekMsg.message != WM_SYSKEYDOWN))
+        return false;
+    if (   !fKeyDown
+        && (peekMsg.message != WM_KEYUP && peekMsg.message != WM_SYSKEYUP))
+        return false;
+    if (   ((RT_HIWORD(peekMsg.lParam) & 0xFF) != 0x38 /* scan code: Alt */)
+        || !(RT_HIWORD(peekMsg.lParam) & KF_EXTENDED))
+        return false;
+    if (!doesCurrentLayoutHaveAltGr())
+        return false;
+    return true;
+}
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h
index 4c33025..0e35d89 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h
@@ -29,5 +29,59 @@ void   WinHidDevicesBroadcastLeds(bool fNumLockOn, bool fCapsLockOn, bool fScrol
 
 bool winHidLedsInSync(bool fNumLockOn, bool fCapsLockOn, bool fScrollLockOn);
 
+/** Helper class to deal with Windows AltGr handling.
+  *
+  * Background: Windows sends AltGr key down and up events as two events: a
+  * left control event and a right alt one.  Since the left control event does
+  * not correspond to actually pressing or releasing the left control key we
+  * would like to detect it and handle it.  This class monitors all key down and
+  * up events and if it detects that a left control down event has been sendt
+  * although left control should be up it tells us to insert a left control up
+  * event into the event stream.  While this does not let us filter out the
+  * unwanted event at source, it should still make guest system keyboard handling
+  * work correctly. */
+class WinAltGrMonitor
+{
+public:
+
+    /** Constructor. */
+    WinAltGrMonitor() : m_enmFakeControlDetectionState(NONE), m_timeOfLastKeyEvent(0) {}
+
+    /** All key events should be fed to this method.
+      * @param iDownScanCode the scan code stripped of the make/break bit
+      * @param fKeyDown      is this a key down event?
+      * @param fExtended     is this an extended scan code? */
+    void updateStateFromKeyEvent(unsigned iDownScanCode, bool fKeyDown, bool fExtended);
+
+    /** Do we need to insert a left control up into the stream? */
+    bool isLeftControlReleaseNeeded() const;
+
+    /** Can we tell for sure at this point that the current message is a fake
+     * control event?  This method might fail to recognise a fake event, but
+     * should never incorrectly flag a non-fake one.
+     * @note We deliberately do not call this from the host combination editor
+     *       in an attempt to ensure that the other code path also gets enough
+     *       test coverage.
+     */
+    bool isCurrentEventDefinitelyFake(unsigned iDownScanCode,
+                                      bool fKeyDown,
+                                      bool fExtendedKey) const;
+
+private:
+
+    /** State detection for fake control events which we may have missed. */
+    enum
+    {
+        /** No interesting state. */
+        NONE,
+        /** The last keypress might be a fake control. */
+        LAST_EVENT_WAS_LEFT_CONTROL_DOWN,
+        /** Left control is down, so we ignore fake control events. */
+        LEFT_CONTROL_DOWN,
+        /** A fake control down event and no up was passed to the guest. */
+        FAKE_CONTROL_DOWN
+    } m_enmFakeControlDetectionState;
+    DWORD m_timeOfLastKeyEvent;
+};
 #endif /* __WinKeyboard_h__ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
index beb1b8d..e21bcc5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
@@ -40,6 +40,11 @@ NS_DECL_CLASSINFO (UIFrameBuffer)
 NS_IMPL_THREADSAFE_ISUPPORTS1_CI (UIFrameBuffer, IFramebuffer)
 #endif
 
+#ifdef Q_WS_X11
+# include <QX11Info>
+# include <X11/Xlib.h>
+#endif /* Q_WS_X11 */
+
 UIFrameBuffer::UIFrameBuffer(UIMachineView *pMachineView)
     : m_pMachineView(pMachineView)
     , m_width(0), m_height(0)
@@ -575,6 +580,12 @@ void UIFrameBuffer::setView(UIMachineView * pView)
     m_pMachineView = pView;
     m_WinId = (m_pMachineView && m_pMachineView->viewport()) ? (LONG64)m_pMachineView->viewport()->winId() : 0;
 
+#ifdef Q_WS_X11
+    /* Sync Qt and X11 Server. Notify server about newly
+     * created winId (see xTracker #7547). */
+    XSync(QX11Info::display(), false);
+#endif
+
     /* Connect handlers: */
     if (m_pMachineView)
         prepareConnections();
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
index 9b3bf5d..49a752b 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
@@ -63,6 +63,10 @@ const int XKeyRelease = KeyRelease;
 # include <Carbon/Carbon.h>
 #endif /* Q_WS_MAC */
 
+#ifdef Q_WS_WIN
+# include "WinKeyboard.h"
+#endif /* Q_WS_WIN */
+ 
 /* COM includes: */
 #include "CConsole.h"
 
@@ -161,6 +165,40 @@ void UIKeyboardHandler::cleanupListener(ulong uIndex)
     }
 }
 
+#ifdef Q_WS_X11
+struct CHECKFORX11FOCUSEVENTSDATA
+{
+    Window hWindow;
+    bool fEventFound;
+};
+
+static Bool checkForX11FocusEventsWorker(Display *pDisplay, XEvent *pEvent,
+                                         XPointer pArg)
+{
+    NOREF(pDisplay);
+    struct CHECKFORX11FOCUSEVENTSDATA *pStruct;
+    
+    pStruct = (struct CHECKFORX11FOCUSEVENTSDATA *)pArg;
+    if (   pEvent->xany.type == XFocusIn
+        || pEvent->xany.type == XFocusOut)
+        if (pEvent->xany.window == pStruct->hWindow)
+            pStruct->fEventFound = true;
+    return false;
+}
+
+bool UIKeyboardHandler::checkForX11FocusEvents(Window hWindow)
+{
+    XEvent dummy;
+    struct CHECKFORX11FOCUSEVENTSDATA data;
+
+    data.hWindow = hWindow;
+    data.fEventFound = false;
+    XCheckIfEvent(QX11Info::display(), &dummy, checkForX11FocusEventsWorker,
+                  (XPointer)&data);
+    return data.fEventFound;
+}
+#endif /* Q_WS_X11 */
+
 void UIKeyboardHandler::captureKeyboard(ulong uScreenId)
 {
     /* Do NOT capture keyboard if its captured already: */
@@ -201,18 +239,17 @@ void UIKeyboardHandler::captureKeyboard(ulong uScreenId)
                  * We can't be sure this shortcut will be released at all, so we will retry to grab keyboard for 50 times,
                  * and after we will just ignore that issue: */
                 int cTriesLeft = 50;
-                XEvent dummy;
-                while (cTriesLeft && XGrabKeyboard(QX11Info::display(), m_windows[m_iKeyboardCaptureViewIndex]->winId(), False, GrabModeAsync, GrabModeAsync, CurrentTime)) { --cTriesLeft; }
-                /* If the grab succeeds, X will insert a FocusIn event for this
-                 * window into the event queue.  If we have two windows they can
-                 * end up in an endless cycle of passing the focus back and
-                 * forward as there is always a pending FocusIn for each, and we
-                 * drop and re-take the grab each time the focus changes.  So we
-                 * remove the event again before Qt can see it. */
-                if (cTriesLeft > 0)
-                    XCheckTypedWindowEvent(QX11Info::display(),
-                            m_windows[m_iKeyboardCaptureViewIndex]->winId(),
-                            XFocusIn, &dummy);
+                Window hWindow;
+
+                /* Only do our keyboard grab if there are no other focus events
+                 * for this window on the queue.  This can prevent problems
+                 * including two windows fighting to grab the keyboard. */
+                hWindow = m_windows[m_iKeyboardCaptureViewIndex]->winId();
+                if (!checkForX11FocusEvents(hWindow))
+                    while (cTriesLeft && XGrabKeyboard(QX11Info::display(),
+                           hWindow, False, GrabModeAsync, GrabModeAsync,
+                           CurrentTime))
+                        --cTriesLeft;
                 break;
             }
             /* Should we try to grab keyboard in default case? I think - NO. */
@@ -373,75 +410,6 @@ void UIKeyboardHandler::winSkipKeyboardEvents(bool fSkip)
     m_fSkipKeyboardEvents = fSkip;
 }
 
-/**
- * @brief isSyntheticLCtrl
- * @param   pMsg  Windows WM_[SYS]KEY* event message structure
- * @return  true if this is a synthetic LCtrl event, false otherwise
- * This function is a heuristic to tell whether a key event is the first in
- * a synthetic LCtrl+RAlt sequence which Windows uses to signal AltGr.  Our
- * heuristic is in two parts.  First of all, we check whether there is a pending
- * RAlt key event matching this LCtrl event (i.e. both key up or both key down)
- * and if there is, we check whether the current layout has an AltGr key.  We
- * check this by looking to see if any of the layout-dependent keys has a symbol
- * associated when AltGr is pressed.
- */
-static bool isSyntheticLCtrl(MSG *pMsg)
-{
-    MSG peekMsg;
-    /** Keyboard state array with VK_CONTROL and VK_MENU depressed. */
-    const BYTE auKeyStates[256] =
-    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80 };
-    WORD ach;
-    unsigned i;
-
-    Assert(   pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN
-           || pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP);
-    if (   ((RT_HIWORD(pMsg->lParam) & 0xFF) != 0x1d /* scan code: Control */)
-        || RT_HIWORD(pMsg->lParam) & KF_EXTENDED)
-        return false;
-    if (!PeekMessage(&peekMsg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_NOREMOVE))
-        return false;
-    if (   (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN)
-        && (peekMsg.message != WM_KEYDOWN && peekMsg.message != WM_SYSKEYDOWN))
-        return false;
-    if (   (pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP)
-        && (peekMsg.message != WM_KEYUP && peekMsg.message != WM_SYSKEYUP))
-        return false;
-    if (   ((RT_HIWORD(peekMsg.lParam) & 0xFF) != 0x38 /* scan code: Alt */)
-        || !(RT_HIWORD(peekMsg.lParam) & KF_EXTENDED))
-        return false;
-    /* If we got this far then we have a key event which could potentially
-     * be a synthetic left control.  Now we check to see whether the current
-     * keyboard layout actually has an AltGr key by checking whether any of
-     * the keys which might do produce a symbol when AltGr (Control + Alt) is
-     * depressed.  Generally this loop will exit pretty early (it exits on the
-     * first iteration for my German layout).  If there is no AltGr key in the
-     * layout then it will run right through, but that should not happen very
-     * often as we should hardly ever reach the loop in that case.
-     *
-     * In theory we could do this once and cache the result, but that involves
-     * tracking layout switches to invalidate the cache, and I don't think
-     * that the added complexity is worth the price.
-     */
-    for (i = '0'; i <= VK_OEM_102; ++i)
-    {
-        if (ToAscii(i, 0, auKeyStates, &ach, 0))
-            break;
-        /* Skip ranges of virtual keys which are undefined or not relevant. */
-        if (i == '9')
-            i = 'A' - 1;
-        if (i == 'Z')
-            i = VK_OEM_1 - 1;
-        if (i == VK_OEM_3)
-            i = VK_OEM_4 - 1;
-        if (i == VK_OEM_8)
-            i = VK_OEM_102 - 1;
-    }
-    if (i > VK_OEM_102)
-        return false;
-    return true;
-}
-
 bool UIKeyboardHandler::winEventFilter(MSG *pMsg, ulong uScreenId)
 {
     /* Check if some system event should be filtered-out.
@@ -468,12 +436,6 @@ bool UIKeyboardHandler::winEventFilter(MSG *pMsg, ulong uScreenId)
                 break;
             }
 
-            if (isSyntheticLCtrl(pMsg))
-            {
-                fResult = true;
-                break;
-            }
-
             /* Scancodes 0x80 and 0x00 are ignored: */
             unsigned scan = (pMsg->lParam >> 16) & 0x7F;
             if (!scan)
@@ -490,6 +452,26 @@ bool UIKeyboardHandler::winEventFilter(MSG *pMsg, ulong uScreenId)
             if (!(pMsg->lParam & 0x80000000))
                 flags |= KeyPressed;
 
+            /* If present - why not just assert this? */
+            if (m_pAltGrMonitor)
+            {
+                /* Get the VM keyboard: */
+                CKeyboard keyboard = session().GetConsole().GetKeyboard();
+                Assert(!keyboard.isNull());
+
+                /* Bail out if we are sure that this is a fake left control. */
+                if (m_pAltGrMonitor->isCurrentEventDefinitelyFake(scan, flags & KeyPressed, flags & KeyExtended))
+                {
+                    fResult = true;
+                    break;
+                }
+                /* Update AltGR monitor state from key-event: */
+                m_pAltGrMonitor->updateStateFromKeyEvent(scan, flags & KeyPressed, flags & KeyExtended);
+                /* And release left Ctrl key early (if required): */
+                if (m_pAltGrMonitor->isLeftControlReleaseNeeded())
+                    keyboard.PutScancode(0x1D | 0x80);
+            }
+
             /* Check for special Korean keys. Based on the keyboard layout selected
              * on the host, the scancode in lParam might be 0x71/0x72 or 0xF1/0xF2.
              * In either case, we must deliver 0xF1/0xF2 scancode to the guest when
@@ -779,11 +761,13 @@ UIKeyboardHandler::UIKeyboardHandler(UIMachineLogic *pMachineLogic)
     , m_bIsHostkeyInCapture(false)
     , m_iKeyboardHookViewIndex(-1)
     , m_fSkipKeyboardEvents(false)
+    , m_pAltGrMonitor(0)
 #elif defined(Q_WS_MAC)
     , m_darwinKeyModifiers(0)
     , m_fKeyboardGrabbed(false)
     , m_iKeyboardGrabViewIndex(-1)
-#endif
+#endif /* Q_WS_MAC */
+    , m_cMonitors(1)
 {
     /* Prepare: */
     prepareCommon();
@@ -804,11 +788,18 @@ UIKeyboardHandler::~UIKeyboardHandler()
 
 void UIKeyboardHandler::prepareCommon()
 {
+#ifdef Q_WS_WIN
+    /* Prepare AltGR monitor: */
+    m_pAltGrMonitor = new WinAltGrMonitor;
+#endif /* Q_WS_WIN */
+
     /* Machine state-change updater: */
     connect(uisession(), SIGNAL(sigMachineStateChange()), this, SLOT(sltMachineStateChanged()));
 
     /* Pressed keys: */
     ::memset(m_pressedKeys, 0, sizeof(m_pressedKeys));
+
+    m_cMonitors = uisession()->session().GetMachine().GetMonitorCount();
 }
 
 void UIKeyboardHandler::loadSettings()
@@ -831,6 +822,10 @@ void UIKeyboardHandler::loadSettings()
 void UIKeyboardHandler::cleanupCommon()
 {
 #if defined(Q_WS_WIN)
+    /* Cleanup AltGR monitor: */
+    delete m_pAltGrMonitor;
+    m_pAltGrMonitor = 0;
+
     /* Cleaning keyboard-hook: */
     if (m_keyboardHook)
     {
@@ -842,7 +837,7 @@ void UIKeyboardHandler::cleanupCommon()
      * is released when closing this view. */
     if (m_fKeyboardGrabbed)
         darwinGrabKeyboardEvents(false);
-#endif
+#endif /* Q_WS_MAC */
 }
 
 /* Machine-logic getter: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
index 347f6af..d231642 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
@@ -41,7 +41,9 @@ class UIMachineLogic;
 class UIMachineWindow;
 class UIMachineView;
 class VBoxGlobalSettings;
-#ifdef Q_WS_X11
+#if defined(Q_WS_WIN)
+class WinAltGrMonitor;
+#elif defined(Q_WS_X11)
 typedef union  _XEvent XEvent;
 #endif /* Q_WS_X11 */
 
@@ -61,6 +63,9 @@ public:
     void cleanupListener(ulong uIndex);
 
     /* Commands to capture/release keyboard: */
+#ifdef Q_WS_X11
+    bool checkForX11FocusEvents(unsigned long hWindow);
+#endif
     void captureKeyboard(ulong uScreenId);
     void releaseKeyboard();
     void releaseAllPressedKeys(bool aReleaseHostKey = true);
@@ -84,6 +89,8 @@ public:
 #if defined(Q_WS_WIN)
     bool winEventFilter(MSG *pMsg, ulong uScreenId);
     void winSkipKeyboardEvents(bool fSkip);
+    /** Holds the object monitoring key event stream for problematic AltGr events. */
+    WinAltGrMonitor *m_pAltGrMonitor;
 #elif defined(Q_WS_X11)
     bool x11EventFilter(XEvent *pEvent, ulong uScreenId);
 #endif
@@ -191,7 +198,9 @@ protected:
     UInt32 m_darwinKeyModifiers;
     bool m_fKeyboardGrabbed;
     int m_iKeyboardGrabViewIndex;
-#endif
+#endif /* Q_WS_MAC */
+
+    ULONG m_cMonitors;
 };
 
 #endif // !___UIKeyboardHandler_h___
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
index ef80bed..b5d0f79 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
@@ -606,7 +606,8 @@ bool UIMouseHandler::eventFilter(QObject *pWatched, QEvent *pEvent)
                         pWatchedWidget->window()->activateWindow();
 #endif /* Q_WS_X11 */
                     /* Check if we should activate window under cursor: */
-                    if (!uisession()->isMouseCaptured() &&
+                    if (uisession()->activateHoveredMachineWindow() &&
+                        !uisession()->isMouseCaptured() &&
                         QApplication::activeWindow() &&
                         m_windows.values().contains(QApplication::activeWindow()) &&
                         m_windows.values().contains(pWatchedWidget->window()) &&
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
index e336f57..afeb422 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
@@ -80,7 +80,7 @@ void UIMultiScreenLayout::update()
     CMachine machine = m_pMachineLogic->session().GetMachine();
     CDisplay display = m_pMachineLogic->session().GetConsole().GetDisplay();
     bool fShouldWeAutoMountGuestScreens = VBoxGlobal::shouldWeAutoMountGuestScreens(machine, false);
-    LogRelFlow(("UIMultiScreenLayout::update: GUI/AutomountGuestScreens is %s.\n", fShouldWeAutoMountGuestScreens ? "enabled" : "disabled"));
+    LogRel(("UIMultiScreenLayout::update: GUI/AutomountGuestScreens is %s.\n", fShouldWeAutoMountGuestScreens ? "enabled" : "disabled"));
     QDesktopWidget *pDW = QApplication::desktop();
     foreach (int iGuestScreen, m_guestScreens)
     {
@@ -145,7 +145,7 @@ void UIMultiScreenLayout::update()
         else if (fShouldWeAutoMountGuestScreens)
         {
             /* Then we have to disable excessive guest-screen: */
-            LogRelFlow(("UIMultiScreenLayout::update: Disabling excessive guest-screen %d.\n", iGuestScreen));
+            LogRel(("UIMultiScreenLayout::update: Disabling excessive guest-screen %d.\n", iGuestScreen));
             display.SetVideoModeHint(iGuestScreen, false, false, 0, 0, 0, 0, 0);
         }
     }
@@ -177,8 +177,8 @@ void UIMultiScreenLayout::update()
                 pFrameBuffer->setAutoEnabled(true);
             }
             /* Re-enable guest-screen with proper resolution: */
-            LogRelFlow(("UIMultiScreenLayout::update: Enabling guest-screen %d with following resolution: %dx%d.\n",
-                        iGuestScreen, uWidth, uHeight));
+            LogRel(("UIMultiScreenLayout::update: Enabling guest-screen %d with following resolution: %dx%d.\n",
+                    iGuestScreen, uWidth, uHeight));
             display.SetVideoModeHint(iGuestScreen, true, false, 0, 0, uWidth, uHeight, 32);
         }
     }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
index 06785c4..9a836b4 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
@@ -135,6 +135,7 @@ UISession::UISession(UIMachine *pMachine, CSession &sessionReference)
     , m_mouseCapturePolicy(MouseCapturePolicy_Default)
     , m_guruMeditationHandlerType(GuruMeditationHandlerType_Default)
     , m_hiDPIOptimizationType(HiDPIOptimizationType_None)
+    , m_fActivateHoveredMachineWindow(false)
     , m_fIsExtensionPackUsable(false)
     , m_requestedVisualStateType(UIVisualStateType_Invalid)
 #ifdef Q_WS_WIN
@@ -1096,7 +1097,9 @@ void UISession::prepareMenuPool()
 
 void UISession::loadSessionSettings()
 {
-   /* Get uisession machine: */
+    /* Get vbox instance: */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+    /* Get uisession machine: */
     CMachine machine = session().GetConsole().GetMachine();
 
     /* Load extra-data settings: */
@@ -1154,6 +1157,9 @@ void UISession::loadSessionSettings()
         /* Determine HiDPI optimization type: */
         m_hiDPIOptimizationType = VBoxGlobal::hiDPIOptimizationType(machine);
 
+        /* Determine whether hovered machine-window should be activated: */
+        m_fActivateHoveredMachineWindow = VBoxGlobal::activateHoveredMachineWindow(vbox);
+
         /* Is there should be First RUN Wizard? */
         strSettings = machine.GetExtraData(GUI_FirstRun);
         if (strSettings == "yes")
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
index ae85a65..2f7b5d5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
@@ -114,6 +114,8 @@ public:
     GuruMeditationHandlerType guruMeditationHandlerType() const { return m_guruMeditationHandlerType; }
     /** Returns HiDPI optimization type. */
     HiDPIOptimizationType hiDPIOptimizationType() const { return m_hiDPIOptimizationType; }
+    /** Returns whether hovered machine-window should be activated. */
+    bool activateHoveredMachineWindow() const { return m_fActivateHoveredMachineWindow; }
     /** @} */
 
     /** @name Extension Pack stuff.
@@ -382,6 +384,8 @@ private:
     GuruMeditationHandlerType m_guruMeditationHandlerType;
     /** Holds HiDPI optimization type. */
     HiDPIOptimizationType m_hiDPIOptimizationType;
+    /** Holds whether hovered machine-window should be activated. */
+    bool m_fActivateHoveredMachineWindow;
     /** @} */
 
     /** @name Extension Pack variables.
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.cpp
index f4d11d5..7da5891 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.cpp
@@ -17,8 +17,9 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-/* Local includes: */
+/* GUI includes: */
 #include "UIGlobalSettingsDisplay.h"
+#include "VBoxGlobal.h"
 
 /* Display page constructor: */
 UIGlobalSettingsDisplay::UIGlobalSettingsDisplay()
@@ -49,8 +50,12 @@ void UIGlobalSettingsDisplay::loadToCacheFrom(QVariant &data)
     /* Fetch data to properties & settings: */
     UISettingsPageGlobal::fetchData(data);
 
+    /* Get VBox instance: */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+
     /* Load to cache: */
     m_cache.m_strMaxGuestResolution = m_settings.maxGuestRes();
+    m_cache.m_fActivateHoveredMachineWindow = VBoxGlobal::activateHoveredMachineWindow(vbox);
 
     /* Upload properties & settings to data: */
     UISettingsPageGlobal::uploadData(data);
@@ -83,6 +88,8 @@ void UIGlobalSettingsDisplay::getFromCache()
         m_pResolutionWidthSpin->setValue(iWidth);
         m_pResolutionHeightSpin->setValue(iHeight);
     }
+    /* Set state for corresponding check-box: */
+    m_pCheckBoxActivateOnMouseHover->setChecked(m_cache.m_fActivateHoveredMachineWindow);
 }
 
 /* Save data from corresponding widgets to cache,
@@ -107,6 +114,8 @@ void UIGlobalSettingsDisplay::putToCache()
         /* Else if both field attributes are non-zeroes => resolution set to "fixed": */
         m_cache.m_strMaxGuestResolution = QString("%1,%2").arg(m_pResolutionWidthSpin->value()).arg(m_pResolutionHeightSpin->value());
     }
+    /* Acquire state from corresponding check-box: */
+    m_cache.m_fActivateHoveredMachineWindow = m_pCheckBoxActivateOnMouseHover->isChecked();
 }
 
 /* Save data from cache to corresponding external object(s),
@@ -116,8 +125,12 @@ void UIGlobalSettingsDisplay::saveFromCacheTo(QVariant &data)
     /* Fetch data to properties & settings: */
     UISettingsPageGlobal::fetchData(data);
 
+    /* Get VBox instance: */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+
     /* Save from cache: */
     m_settings.setMaxGuestRes(m_cache.m_strMaxGuestResolution);
+    VBoxGlobal::setActivateHoveredMachineWindow(vbox, m_cache.m_fActivateHoveredMachineWindow);
 
     /* Upload properties & settings to data: */
     UISettingsPageGlobal::uploadData(data);
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.h b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.h
index 6f7dabc..a5d7383 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.h
@@ -27,6 +27,7 @@
 struct UISettingsCacheGlobalDisplay
 {
     QString m_strMaxGuestResolution;
+    bool m_fActivateHoveredMachineWindow;
 };
 
 /* Global settings / Display page: */
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.ui b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.ui
index 27786c9..41629e5 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.ui
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsDisplay.ui
@@ -93,7 +93,33 @@
      </property>
     </widget>
    </item>
-   <item row="3" column="0" colspan="2">
+   <item row="3" column="0">
+    <widget class="QLabel" name="m_pLabelMachineWindow">
+     <property name="text">
+      <string>Machine Windows:</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QCheckBox" name="m_pCheckBoxActivateOnMouseHover">
+     <property name="sizePolicy">
+      <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="whatsThis" >
+      <string>If checked, machine windows will be raised when the mouse pointer moves over them.</string>
+     </property>
+     <property name="text">
+      <string>&Raise Window Under Mouse</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="2">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
index 32e9e81..f324a35 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
@@ -36,6 +36,7 @@
 # undef LOBYTE
 # undef HIBYTE
 # include <windows.h>
+# include "WinKeyboard.h"
 #endif /* Q_WS_WIN */
 
 #ifdef Q_WS_X11
@@ -382,6 +383,9 @@ UIHostComboWrapper UIHostComboEditor::combo() const
 UIHostComboEditorPrivate::UIHostComboEditorPrivate()
     : m_pReleaseTimer(0)
     , m_fStartNewSequence(true)
+#ifdef Q_WS_WIN
+    , m_pAltGrMonitor(0)
+#endif /* Q_WS_WIN */
 {
     /* Configure widget: */
     setAttribute(Qt::WA_NativeWindow);
@@ -394,21 +398,26 @@ UIHostComboEditorPrivate::UIHostComboEditorPrivate()
     m_pReleaseTimer->setInterval(200);
     connect(m_pReleaseTimer, SIGNAL(timeout()), this, SLOT(sltReleasePendingKeys()));
 
-#ifdef Q_WS_X11
-    /* Initialize the X keyboard subsystem: */
-    initMappedX11Keyboard(QX11Info::display(), vboxGlobal().settings().publicProperty("GUI/RemapScancodes"));
-#endif /* Q_WS_X11 */
-
-#ifdef Q_WS_MAC
-    m_uDarwinKeyModifiers = 0;
-    UICocoaApplication::instance()->registerForNativeEvents(RT_BIT_32(10) | RT_BIT_32(11) | RT_BIT_32(12) /* NSKeyDown  | NSKeyUp | | NSFlagsChanged */, UIHostComboEditorPrivate::darwinEventHandlerProc, this);
-    ::DarwinGrabKeyboard(false /* just modifiers */);
-#endif /* Q_WS_MAC */
+#if defined(Q_WS_X11)
+     /* Initialize the X keyboard subsystem: */
+     initMappedX11Keyboard(QX11Info::display(), vboxGlobal().settings().publicProperty("GUI/RemapScancodes"));
+#elif defined(Q_WS_MAC)
+     m_uDarwinKeyModifiers = 0;
+     UICocoaApplication::instance()->registerForNativeEvents(RT_BIT_32(10) | RT_BIT_32(11) | RT_BIT_32(12) /* NSKeyDown  | NSKeyUp | | NSFlagsChanged */, UIHostComboEditorPrivate::darwinEventHandlerProc, this);
+     ::DarwinGrabKeyboard(false /* just modifiers */);
+#elif defined(Q_WS_WIN)
+    /* Prepare AltGR monitor: */
+    m_pAltGrMonitor = new WinAltGrMonitor;
+#endif /* Q_WS_WIN */
 }
 
 UIHostComboEditorPrivate::~UIHostComboEditorPrivate()
 {
-#ifdef Q_WS_MAC
+#if defined(Q_WS_WIN)
+    /* Cleanup AltGR monitor: */
+    delete m_pAltGrMonitor;
+    m_pAltGrMonitor = 0;
+#elif defined(Q_WS_MAC)
     ::DarwinReleaseKeyboard();
     UICocoaApplication::instance()->unregisterForNativeEvents(RT_BIT_32(10) | RT_BIT_32(11) | RT_BIT_32(12) /* NSKeyDown  | NSKeyUp | | NSFlagsChanged */, UIHostComboEditorPrivate::darwinEventHandlerProc, this);
 #endif /* Q_WS_MAC */
@@ -456,75 +465,6 @@ void UIHostComboEditorPrivate::sltClear()
 }
 
 #ifdef Q_WS_WIN
-/**
- * @brief isSyntheticLCtrl
- * @param   pMsg  Windows WM_[SYS]KEY* event message structure
- * @return  true if this is a synthetic LCtrl event, false otherwise
- * This function is a heuristic to tell whether a key event is the first in
- * a synthetic LCtrl+RAlt sequence which Windows uses to signal AltGr.  Our
- * heuristic is in two parts.  First of all, we check whether there is a pending
- * RAlt key event matching this LCtrl event (i.e. both key up or both key down)
- * and if there is, we check whether the current layout has an AltGr key.  We
- * check this by looking to see if any of the layout-dependent keys has a symbol
- * associated when AltGr is pressed.
- */
-static bool isSyntheticLCtrl(MSG *pMsg)
-{
-    MSG peekMsg;
-    /** Keyboard state array with VK_CONTROL and VK_MENU depressed. */
-    const BYTE auKeyStates[256] =
-    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80 };
-    WORD ach;
-    unsigned i;
-
-    Assert(   pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN
-           || pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP);
-    if (   ((RT_HIWORD(pMsg->lParam) & 0xFF) != 0x1d /* scan code: Control */)
-        || RT_HIWORD(pMsg->lParam) & KF_EXTENDED)
-        return false;
-    if (!PeekMessage(&peekMsg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_NOREMOVE))
-        return false;
-    if (   (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN)
-        && (peekMsg.message != WM_KEYDOWN && peekMsg.message != WM_SYSKEYDOWN))
-        return false;
-    if (   (pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP)
-        && (peekMsg.message != WM_KEYUP && peekMsg.message != WM_SYSKEYUP))
-        return false;
-    if (   ((RT_HIWORD(peekMsg.lParam) & 0xFF) != 0x38 /* scan code: Alt */)
-        || !(RT_HIWORD(peekMsg.lParam) & KF_EXTENDED))
-        return false;
-    /* If we got this far then we have a key event which could potentially
-     * be a synthetic left control.  Now we check to see whether the current
-     * keyboard layout actually has an AltGr key by checking whether any of
-     * the keys which might do produce a symbol when AltGr (Control + Alt) is
-     * depressed.  Generally this loop will exit pretty early (it exits on the
-     * first iteration for my German layout).  If there is no AltGr key in the
-     * layout then it will run right through, but that should not happen very
-     * often as we should hardly ever reach the loop in that case.
-     *
-     * In theory we could do this once and cache the result, but that involves
-     * tracking layout switches to invalidate the cache, and I don't think
-     * that the added complexity is worth the price.
-     */
-    for (i = '0'; i <= VK_OEM_102; ++i)
-    {
-        if (ToAscii(i, 0, auKeyStates, &ach, 0))
-            break;
-        /* Skip ranges of virtual keys which are undefined or not relevant. */
-        if (i == '9')
-            i = 'A' - 1;
-        if (i == 'Z')
-            i = VK_OEM_1 - 1;
-        if (i == VK_OEM_3)
-            i = VK_OEM_4 - 1;
-        if (i == VK_OEM_8)
-            i = VK_OEM_102 - 1;
-    }
-    if (i > VK_OEM_102)
-        return false;
-    return true;
-}
-
 bool UIHostComboEditorPrivate::winEvent(MSG *pMsg, long* /* pResult */)
 {
     switch (pMsg->message)
@@ -536,11 +476,26 @@ bool UIHostComboEditorPrivate::winEvent(MSG *pMsg, long* /* pResult */)
         {
             /* Get key-code: */
             int iKeyCode = UINativeHotKey::distinguishModifierVKey((int)pMsg->wParam, (int)pMsg->lParam);
+            unsigned iDownScanCode = (pMsg->lParam >> 16) & 0x7F;
+            bool fPressed = !(pMsg->lParam & 0x80000000);
+            bool fExtended = pMsg->lParam & 0x1000000;
 
-            /* If this is the first event in a synthetic AltGr = LCtrl+RAlt
-             * sequence then swallow it. */
-            if (isSyntheticLCtrl(pMsg))
-                return true;
+            /* If present - why not just assert this? */
+            if (m_pAltGrMonitor)
+            {
+                /* Update AltGR monitor state from key-event: */
+                m_pAltGrMonitor->updateStateFromKeyEvent(iDownScanCode, fPressed, fExtended);
+                /* And release left Ctrl key early (if required): */
+                if (m_pAltGrMonitor->isLeftControlReleaseNeeded())
+                {
+                    m_pressedKeys.remove(VK_LCONTROL);
+                    m_shownKeys.remove(VK_LCONTROL);
+                }
+                /* Fake LCtrl release events can also end up in the released
+                 * key set.  Detect them on the immediately following RAlt up. */
+                if (!m_pressedKeys.contains(VK_LCONTROL))
+                    m_releasedKeys.remove(VK_LCONTROL);
+            }
 
             /* Process the key event: */
             return processKeyEvent(iKeyCode, pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN);
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h
index a4a26a3..9813afc 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h
@@ -31,6 +31,9 @@
 /* Forward declarations: */
 class UIHostComboEditorPrivate;
 class QIToolButton;
+#ifdef Q_WS_WIN
+class WinAltGrMonitor;
+#endif /* Q_WS_WIN */
 
 /* Native hot-key namespace to unify
  * all the related hot-key processing stuff: */
@@ -172,11 +175,14 @@ private:
     QTimer* m_pReleaseTimer;
     bool m_fStartNewSequence;
 
-#ifdef Q_WS_MAC
-    /* The current modifier key mask. Used to figure out which modifier
-     * key was pressed when we get a kEventRawKeyModifiersChanged event. */
-    uint32_t m_uDarwinKeyModifiers;
-#endif /* Q_WS_MAC */
+#if defined(Q_WS_MAC)
+     /* The current modifier key mask. Used to figure out which modifier
+      * key was pressed when we get a kEventRawKeyModifiersChanged event. */
+     uint32_t m_uDarwinKeyModifiers;
+#elif defined(Q_WS_WIN)
+    /** Holds the object monitoring key event stream for problematic AltGr events. */
+    WinAltGrMonitor *m_pAltGrMonitor;
+#endif /* Q_WS_WIN */
 };
 
 #endif /* !___UIHostComboEditor_h___ */
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp
index 5fc2f70..7cf2690 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp
@@ -98,6 +98,9 @@ UIWizard::UIWizard(QWidget *pParent, UIWizardType type, UIWizardMode mode)
 #endif /* Q_WS_WIN */
 
 #ifdef Q_WS_MAC
+    /* Since wizards are now represented as Mac OS X Sheets
+     * we would like to have possibility to cancel them. */
+    setOption(QWizard::NoCancelButton, false);
     /* I'm really not sure why there shouldn't be any default button on Mac OS X.
      * This prevents the using of Enter to jump to the next page. */
     setOptions(options() ^ QWizard::NoDefaultButton);
diff --git a/src/VBox/GuestHost/OpenGL/util/error.c b/src/VBox/GuestHost/OpenGL/util/error.c
index 20bb9de..0fbaf05 100644
--- a/src/VBox/GuestHost/OpenGL/util/error.c
+++ b/src/VBox/GuestHost/OpenGL/util/error.c
@@ -1,3 +1,102 @@
+/* $Id: error.c $ */
+/** @file
+ * VBox crOpenGL error logging
+ */
+
+/*
+ * Copyright (C) 2014 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifdef VBOX
+
+#include <iprt/string.h>
+#include <iprt/stream.h>
+#ifndef IN_GUEST
+#define LOG_GROUP LOG_GROUP_SHARED_CROPENGL
+#endif
+#include <VBox/log.h>
+
+bool fWarningsEnabled = true;
+
+static void logMessage(const char *pszPrefix, const char *pszFormat, va_list va)
+{
+    char *pszMessage;
+    int rc = RTStrAPrintfV(&pszMessage, pszFormat, va);
+    if (RT_SUCCESS(rc))
+    {
+        LogRel(("%s%s\n", pszPrefix, pszMessage));
+#ifdef IN_GUEST
+        RTStrmPrintf(g_pStdErr, "%s%s\n", pszPrefix, pszMessage);
+#endif
+        RTStrFree(pszMessage);
+    }
+}
+
+static void logDebug(const char *pszPrefix, const char *pszFormat, va_list va)
+{
+    char *pszMessage;
+    int rc = RTStrAPrintfV(&pszMessage, pszFormat, va);
+    if (RT_SUCCESS(rc))
+    {
+        Log(("%s%s\n", pszPrefix, pszMessage));
+        RTStrFree(pszMessage);
+    }
+}
+
+DECLEXPORT(void) crError(const char *pszFormat, ... )
+{
+    va_list va;
+
+    va_start(va, pszFormat);
+    logMessage("OpenGL Error: ", pszFormat, va);
+    va_end(va);
+    AssertLogRelFailed();
+}
+
+DECLEXPORT(void) crEnableWarnings(int fEnabled)
+{
+    fWarningsEnabled = RT_BOOL(fEnabled);
+}
+
+DECLEXPORT(void) crWarning(const char *pszFormat, ... )
+{
+    if (fWarningsEnabled)
+    {
+        va_list va;
+
+        va_start(va, pszFormat);
+        logMessage("OpenGL Warning: ", pszFormat, va);
+        va_end(va);
+    }
+}
+
+DECLEXPORT(void) crInfo(const char *pszFormat, ... )
+{
+    va_list va;
+
+    va_start(va, pszFormat);
+    logMessage("OpenGL Info: ", pszFormat, va);
+    va_end(va);
+}
+
+DECLEXPORT(void) crDebug(const char *pszFormat, ... )
+{
+    va_list va;
+
+    va_start(va, pszFormat);
+    logDebug("OpenGL Debug: ", pszFormat, va);
+    va_end(va);
+}
+
+#else
+
 /* Copyright (c) 2001, Stanford University
  * All rights reserved
  *
@@ -606,3 +705,5 @@ BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
     return TRUE;
 }
 #endif
+
+#endif /* !VBOX */
diff --git a/src/VBox/GuestHost/OpenGL/util/net.c b/src/VBox/GuestHost/OpenGL/util/net.c
index 00216e3..17fde06 100644
--- a/src/VBox/GuestHost/OpenGL/util/net.c
+++ b/src/VBox/GuestHost/OpenGL/util/net.c
@@ -449,8 +449,10 @@ void crNetInit( CRNetReceiveFunc recvFunc, CRNetCloseFunc closeFunc )
         err = WSAStartup(wVersionRequested, &wsaData);
         if (err != 0)
             crError("Couldn't initialize sockets on WINDOWS");
+# ifndef VBOX
         //reinit hostname for debug messages as it's incorrect before WSAStartup gets called    
         __getHostInfo();
+# endif
 #endif
 
         cr_net.use_gm      = 0;
diff --git a/src/VBox/HostDrivers/Support/SUPLib.cpp b/src/VBox/HostDrivers/Support/SUPLib.cpp
index 026d478..beb357f 100644
--- a/src/VBox/HostDrivers/Support/SUPLib.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLib.cpp
@@ -2196,7 +2196,9 @@ static int supR3HardenedLdrLoadIt(const char *pszFilename, PRTLDRMOD phLdrMod, u
     /*
      * Verify the image file.
      */
-    int rc = supR3HardenedVerifyFixedFile(pszFilename, false /* fFatal */);
+    int rc = SUPR3HardenedVerifyInit();
+    if (RT_FAILURE(rc))
+        rc = supR3HardenedVerifyFixedFile(pszFilename, false /* fFatal */);
     if (RT_FAILURE(rc))
     {
         LogRel(("supR3HardenedLdrLoadIt: Verification of \"%s\" failed, rc=%Rrc\n", pszFilename, rc));
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
index 4f4780c..c3bcfdc 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
@@ -1017,7 +1017,7 @@ DECLHIDDEN(void) supR3HardenedLogV(const char *pszFormat, va_list va)
 {
 #ifdef RT_OS_WINDOWS
     if (   g_hStartupLog != NULL
-        && g_cbStartupLog < 128*_1M)
+        && g_cbStartupLog < 16*_1M)
     {
         char szBuf[5120];
         PCLIENT_ID pSelfId = &((PTEB)NtCurrentTeb())->ClientId;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp b/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp
index 129007a..37dfe0f 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp
@@ -52,13 +52,18 @@ int main(int argc, char **argv)
         { "--iterations",       'i', RTGETOPT_REQ_INT32 },
         { "--hex",              'h', RTGETOPT_REQ_NOTHING },
         { "--decimal",          'd', RTGETOPT_REQ_NOTHING },
-        { "--spin",             's', RTGETOPT_REQ_NOTHING }
+        { "--spin",             's', RTGETOPT_REQ_NOTHING },
+        { "--reference",        'r', RTGETOPT_REQ_UINT64 },  /* reference value of CpuHz, display the
+                                                              * difference in a separate column. */
     };
 
     uint32_t cIterations = 40;
     bool fHex = true;
     bool fSpin = false;
     int ch;
+    uint64_t uCpuHzRef = 0;
+    uint64_t uCpuHzOverallDeviation = 0;
+    uint32_t cCpuHzOverallDevCnt = 0;
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
     RTGetOptInit(&GetState, argc, argv, g_aOptions, RT_ELEMENTS(g_aOptions), 1, RTGETOPTINIT_FLAGS_NO_STD_OPTS);
@@ -82,6 +87,10 @@ int main(int argc, char **argv)
                 fSpin = true;
                 break;
 
+            case 'r':
+                uCpuHzRef = ValueUnion.u64;
+                break;
+
             default:
                 return RTGetOptPrintError(ch, &ValueUnion);
         }
@@ -96,19 +105,21 @@ int main(int argc, char **argv)
     {
         if (g_pSUPGlobalInfoPage)
         {
-            RTPrintf("tstGIP-2: cCpus=%d  u32UpdateHz=%RU32  u32UpdateIntervalNS=%RU32  u64NanoTSLastUpdateHz=%RX64  u32Mode=%d (%s) u32Version=%#x\n",
+            RTPrintf("tstGIP-2: cCpus=%d  u32UpdateHz=%RU32  u32UpdateIntervalNS=%RU32  u64NanoTSLastUpdateHz=%RX64  uCpuHzRef=%RU64  u32Mode=%d (%s) u32Version=%#x\n",
                      g_pSUPGlobalInfoPage->cCpus,
                      g_pSUPGlobalInfoPage->u32UpdateHz,
                      g_pSUPGlobalInfoPage->u32UpdateIntervalNS,
                      g_pSUPGlobalInfoPage->u64NanoTSLastUpdateHz,
+                     uCpuHzRef,
                      g_pSUPGlobalInfoPage->u32Mode,
                      g_pSUPGlobalInfoPage->u32Mode == SUPGIPMODE_SYNC_TSC       ? "sync"
                      : g_pSUPGlobalInfoPage->u32Mode == SUPGIPMODE_ASYNC_TSC    ? "async"
                      :                                                            "???",
                      g_pSUPGlobalInfoPage->u32Version);
             RTPrintf(fHex
-                     ? "tstGIP-2:     it: u64NanoTS        delta     u64TSC           UpIntTSC H  TransId           CpuHz TSC Interval History...\n"
-                     : "tstGIP-2:     it: u64NanoTS        delta     u64TSC             UpIntTSC H    TransId           CpuHz TSC Interval History...\n");
+                     ? "tstGIP-2:     it: u64NanoTS        delta     u64TSC           UpIntTSC H  TransId           CpuHz %sTSC Interval History...\n"
+                     : "tstGIP-2:     it: u64NanoTS        delta     u64TSC             UpIntTSC H    TransId           CpuHz %sTSC Interval History...\n",
+                     uCpuHzRef ? "  CpuHz deviation  " : "");
             static SUPGIPCPU s_aaCPUs[2][256];
             for (uint32_t i = 0; i < cIterations; i++)
             {
@@ -122,11 +133,32 @@ int main(int argc, char **argv)
                     if (    g_pSUPGlobalInfoPage->aCPUs[iCpu].u64CpuHz > 0
                         &&  g_pSUPGlobalInfoPage->aCPUs[iCpu].u64CpuHz != _4G + 1)
                     {
+                        char szCpuHzDeviation[32];
                         PSUPGIPCPU pPrevCpu = &s_aaCPUs[!(i & 1)][iCpu];
                         PSUPGIPCPU pCpu = &s_aaCPUs[i & 1][iCpu];
+                        if (uCpuHzRef)
+                        {
+                            int64_t iCpuHzDeviation = pCpu->u64CpuHz - uCpuHzRef;
+                            uint64_t uCpuHzDeviation = RT_ABS(iCpuHzDeviation);
+                            if (uCpuHzDeviation > 999999999)
+                                RTStrPrintf(szCpuHzDeviation, sizeof(szCpuHzDeviation), "%17s  ", "?");
+                            else
+                            {
+                                if (pCpu->u32TransactionId > 7)
+                                {
+                                    uCpuHzOverallDeviation += uCpuHzDeviation;
+                                    cCpuHzOverallDevCnt++;
+                                }
+                                uint32_t uPct = (uint32_t)(uCpuHzDeviation * 100000 / uCpuHzRef + 5);
+                                RTStrPrintf(szCpuHzDeviation, sizeof(szCpuHzDeviation), "%10RI64%3d.%02d%%  ",
+                                            iCpuHzDeviation, uPct / 1000, (uPct % 1000) / 10);
+                            }
+                        }
+                        else
+                            szCpuHzDeviation[0] = '\0';
                         RTPrintf(fHex
-                                 ? "tstGIP-2: %4d/%d: %016llx %09llx %016llx %08x %d %08x %15llu %08x %08x %08x %08x %08x %08x %08x %08x (%d)\n"
-                                 : "tstGIP-2: %4d/%d: %016llu %09llu %016llu %010u %d %010u %15llu %08x %08x %08x %08x %08x %08x %08x %08x (%d)\n",
+                                 ? "tstGIP-2: %4d/%d: %016llx %09llx %016llx %08x %d %08x %15llu %s%08x %08x %08x %08x %08x %08x %08x %08x (%d)\n"
+                                 : "tstGIP-2: %4d/%d: %016llu %09llu %016llu %010u %d %010u %15llu %s%08x %08x %08x %08x %08x %08x %08x %08x (%d)\n",
                                  i, iCpu,
                                  pCpu->u64NanoTS,
                                  i ? pCpu->u64NanoTS - pPrevCpu->u64NanoTS : 0,
@@ -135,6 +167,7 @@ int main(int argc, char **argv)
                                  pCpu->iTSCHistoryHead,
                                  pCpu->u32TransactionId,
                                  pCpu->u64CpuHz,
+                                 szCpuHzDeviation,
                                  pCpu->au32TSCHistory[0],
                                  pCpu->au32TSCHistory[1],
                                  pCpu->au32TSCHistory[2],
@@ -155,8 +188,20 @@ int main(int argc, char **argv)
                 if (!fSpin)
                     RTThreadSleep(9);
                 else
-                    while (u32TransactionId == *pu32TransactionId)
-                        /* nop */;
+                {
+                    if (pu32TransactionId)
+                    {
+                        while (u32TransactionId == *pu32TransactionId)
+                            ASMNopPause();
+                    }
+                    else
+                        RTThreadSleep(1);
+                }
+            }
+            if (uCpuHzRef)
+            {
+                uint32_t uPct = (uint32_t)(uCpuHzOverallDeviation * 100000 / cCpuHzOverallDevCnt / uCpuHzRef + 5);
+                RTPrintf("Overall CpuHz deviation: %d.%02d%%\n", uPct / 1000, (uPct % 1000) / 10);
             }
         }
         else
diff --git a/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp b/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
index 43f1d7f..8282562 100644
--- a/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
@@ -2698,6 +2698,7 @@ static int supdrvNtProtectProtectNewStubChild(PSUPDRVNTPROTECT pNtParent, HANDLE
         }
         else
             rc = VERR_WRONG_ORDER;
+        pNtChild->enmProcessKind = kSupDrvNtProtectKind_VmProcessDead;
         RTSpinlockRelease(g_hNtProtectLock);
 
         supdrvNtProtectRelease(pNtChild);
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h b/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h
index c20055e..1a27a1c 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h
@@ -132,8 +132,9 @@ DECLHIDDEN(int)  supHardenedWinVerifyImageByLdrMod(RTLDRMOD hLdrMod, PCRTUTF16 p
 #  define SUPHNTVI_F_ALLOW_CAT_FILE_VERIFICATION    RT_BIT(3)
 /** The file owner must be TrustedInstaller on Vista+. */
 #  define SUPHNTVI_F_TRUSTED_INSTALLER_OWNER        RT_BIT(4)
-/** Resource image, could be any bitness. */
-#  define SUPHNTVI_F_RESOURCE_IMAGE                 RT_BIT(30)
+/** Ignore the image architecture (otherwise it must match the verification
+ * code).  Used with resource images and such. */
+#  define SUPHNTVI_F_IGNORE_ARCHITECTURE            RT_BIT(30)
 /** Raw-mode context image, always 32-bit. */
 #  define SUPHNTVI_F_RC_IMAGE                       RT_BIT(31)
 /** @} */
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
index d7656b3..4d296a1 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
@@ -197,7 +197,7 @@ static uint32_t volatile                g_idActiveThread = UINT32_MAX;
 *******************************************************************************/
 #ifdef IN_RING3
 static int supR3HardNtViCallWinVerifyTrust(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags, PRTERRINFO pErrInfo,
-                                           PFNWINVERIFYTRUST pfnWinVerifyTrust);
+                                           PFNWINVERIFYTRUST pfnWinVerifyTrust, HRESULT *phrcWinVerifyTrust);
 static int supR3HardNtViCallWinVerifyTrustCatFile(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags, PRTERRINFO pErrInfo,
                                                   PFNWINVERIFYTRUST pfnWinVerifyTrust);
 #endif
@@ -1234,7 +1234,7 @@ DECLHIDDEN(int) supHardenedWinVerifyImageByHandle(HANDLE hFile, PCRTUTF16 pwszNa
          */
         RTLDRMOD hLdrMod;
         RTLDRARCH enmArch = fFlags & SUPHNTVI_F_RC_IMAGE ? RTLDRARCH_X86_32 : RTLDRARCH_HOST;
-        if (fFlags & SUPHNTVI_F_RESOURCE_IMAGE)
+        if (fFlags & SUPHNTVI_F_IGNORE_ARCHITECTURE)
             enmArch = RTLDRARCH_WHATEVER;
         rc = RTLdrOpenWithReader(&pNtViRdr->Core, RTLDR_O_FOR_VALIDATION, enmArch, &hLdrMod, pErrInfo);
         if (RT_SUCCESS(rc))
@@ -2082,14 +2082,14 @@ DECLHIDDEN(void) supR3HardenedWinResolveVerifyTrustApiAndHookThreadCreation(cons
     RTERRINFOSTATIC ErrInfoStatic;
     RTErrInfoInitStatic(&ErrInfoStatic);
     int rc = supR3HardNtViCallWinVerifyTrust(NULL, g_SupLibHardenedExeNtPath.UniStr.Buffer, 0,
-                                             &ErrInfoStatic.Core, pfnWinVerifyTrust);
+                                             &ErrInfoStatic.Core, pfnWinVerifyTrust, NULL);
     if (RT_FAILURE(rc))
         supR3HardenedFatalMsg(pszProgName, kSupInitOp_Integrity, rc,
                               "WinVerifyTrust failed on stub executable: %s", ErrInfoStatic.szMsg);
 # endif
 
     if (g_uNtVerCombined >= SUP_MAKE_NT_VER_SIMPLE(6, 0)) /* ntdll isn't signed on XP, assuming this is the case on W2K3 for now. */
-        supR3HardNtViCallWinVerifyTrust(NULL, L"\\SystemRoot\\System32\\ntdll.dll", 0, NULL, pfnWinVerifyTrust);
+        supR3HardNtViCallWinVerifyTrust(NULL, L"\\SystemRoot\\System32\\ntdll.dll", 0, NULL, pfnWinVerifyTrust, NULL);
     supR3HardNtViCallWinVerifyTrustCatFile(NULL, L"\\SystemRoot\\System32\\ntdll.dll", 0, NULL, pfnWinVerifyTrust);
 
     g_pfnWinVerifyTrust = pfnWinVerifyTrust;
@@ -2141,10 +2141,15 @@ static int supR3HardNtViNtToWinPath(PCRTUTF16 pwszNtName, PCRTUTF16 *ppwszWinPat
  * @param   fFlags              Flags, SUPHNTVI_F_XXX.
  * @param   pErrInfo            Pointer to error info structure. Optional.
  * @param   pfnWinVerifyTrust   Pointer to the API.
+ * @param   phrcWinVerifyTrust  Where to WinVerifyTrust error status on failure,
+ *                              optional.
  */
 static int supR3HardNtViCallWinVerifyTrust(HANDLE hFile, PCRTUTF16 pwszName, uint32_t fFlags, PRTERRINFO pErrInfo,
-                                           PFNWINVERIFYTRUST pfnWinVerifyTrust)
+                                           PFNWINVERIFYTRUST pfnWinVerifyTrust, HRESULT *phrcWinVerifyTrust)
 {
+    if (phrcWinVerifyTrust)
+        *phrcWinVerifyTrust = S_OK;
+
     /*
      * Convert the name into a Windows name.
      */
@@ -2222,6 +2227,8 @@ static int supR3HardNtViCallWinVerifyTrust(HANDLE hFile, PCRTUTF16 pwszName, uin
                                "WinVerifyTrust failed with hrc=%Rhrc on '%ls'", hrc, pwszName);
         SUP_DPRINTF(("supR3HardNtViCallWinVerifyTrust: WinVerifyTrust failed with %#x (%s) on '%ls'\n",
                      hrc, pszErrConst, pwszName));
+        if (phrcWinVerifyTrust)
+            *phrcWinVerifyTrust = hrc;
     }
 
     /* clean up state data. */
@@ -2610,12 +2617,27 @@ DECLHIDDEN(int) supHardenedWinVerifyImageTrust(HANDLE hFile, PCRTUTF16 pwszName,
                 }
                 else if (RT_SUCCESS(rc))
                 {
-                    /** @todo having trouble with a 32-bit windows box when letting these calls thru */
-                    rc = supR3HardNtViCallWinVerifyTrust(hFile, pwszName, fFlags, pErrInfo, g_pfnWinVerifyTrust);
+                    HRESULT hrcWinVerifyTrust;
+                    rc = supR3HardNtViCallWinVerifyTrust(hFile, pwszName, fFlags, pErrInfo, g_pfnWinVerifyTrust,
+                                                         &hrcWinVerifyTrust);
+
+                    /* DLLs signed with special roots, like "Microsoft Digital Media Authority 2005",
+                       may fail here because the root cert is not in the normal certificate stores
+                       (if any).  Our verification code has the basics of these certificates included
+                       and can verify them, which is why we end up here instead of in the
+                       VINF_LDRVI_NOT_SIGNED case above.  Current workaround is to do as above.
+                       (Intel graphics driver DLLs, like igdusc64.dll. */
+                    if (   RT_FAILURE(rc)
+                        && hrcWinVerifyTrust == CERT_E_CHAINING
+                        && (fFlags & SUPHNTVI_F_ALLOW_CAT_FILE_VERIFICATION))
+                    {
+                        rc = supR3HardNtViCallWinVerifyTrustCatFile(hFile, pwszName, fFlags, pErrInfo, g_pfnWinVerifyTrust);
+                        SUP_DPRINTF(("supR3HardNtViCallWinVerifyTrustCatFile -> %d (was CERT_E_CHAINING)\n", rc));
+                    }
                 }
                 else
                 {
-                    int rc2 = supR3HardNtViCallWinVerifyTrust(hFile, pwszName, fFlags, pErrInfo, g_pfnWinVerifyTrust);
+                    int rc2 = supR3HardNtViCallWinVerifyTrust(hFile, pwszName, fFlags, pErrInfo, g_pfnWinVerifyTrust, NULL);
                     AssertMsg(RT_FAILURE_NP(rc2),
                               ("rc=%Rrc, rc2=%Rrc %s", rc, rc2, pErrInfo ? pErrInfo->pszMsg : "<no-err-info>"));
                 }
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
index 4d7c91c..0c08b26 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
@@ -1834,7 +1834,7 @@ static int supHardNtLdrCacheNewEntry(PSUPHNTLDRCACHEENTRY pEntry, const char *ps
                     ? SUPHNTVI_F_TRUSTED_INSTALLER_OWNER | SUPHNTVI_F_ALLOW_CAT_FILE_VERIFICATION
                     : SUPHNTVI_F_REQUIRE_BUILD_CERT;
     if (f32bitResourceDll)
-        fFlags |= SUPHNTVI_F_RESOURCE_IMAGE;
+        fFlags |= SUPHNTVI_F_IGNORE_ARCHITECTURE;
 
     PSUPHNTVIRDR pNtViRdr;
     int rc = supHardNtViRdrCreate(hFile, pUniStrPath->Buffer, fFlags, &pNtViRdr);
@@ -1849,7 +1849,7 @@ static int supHardNtLdrCacheNewEntry(PSUPHNTLDRCACHEENTRY pEntry, const char *ps
      */
     RTLDRMOD hLdrMod;
     RTLDRARCH enmArch = fFlags & SUPHNTVI_F_RC_IMAGE ? RTLDRARCH_X86_32 : RTLDRARCH_HOST;
-    if (fFlags & SUPHNTVI_F_RESOURCE_IMAGE)
+    if (fFlags & SUPHNTVI_F_IGNORE_ARCHITECTURE)
         enmArch = RTLDRARCH_WHATEVER;
     rc = RTLdrOpenWithReader(&pNtViRdr->Core, RTLDR_O_FOR_VALIDATION, enmArch, &hLdrMod, pErrInfo);
     if (RT_FAILURE(rc))
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
index 5f7b467..87418c4 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
@@ -137,8 +137,9 @@ typedef struct VERIFIERCACHEENTRY
     uint32_t                uHash;
     /** The verification result. */
     int                     rc;
-    /** Used for shutting up errors after a while. */
-    uint32_t volatile       cErrorHits;
+    /** Used for shutting up load and error messages after a while so they don't
+     * flood the the log file and fill up the disk. */
+    uint32_t volatile       cHits;
     /** The validation flags (for WinVerifyTrust retry). */
     uint32_t                fFlags;
     /** Whether IndexNumber is valid  */
@@ -367,9 +368,9 @@ static uint32_t             g_fSupAdversaries = 0;
 /*******************************************************************************
 *   Internal Functions                                                         *
 *******************************************************************************/
-static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAccess, PULONG pfProtect,
+static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, bool fIgnoreArch, PULONG pfAccess, PULONG pfProtect,
                                          bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust,
-                                         bool *pfQuietFailure);
+                                         bool *pfQuiet);
 static void     supR3HardenedWinRegisterDllNotificationCallback(void);
 static void     supR3HardenedWinReInstallHooks(bool fFirst);
 DECLASM(void)   supR3HardenedEarlyProcessInitThunk(void);
@@ -619,7 +620,7 @@ static void supR3HardenedWinVerifyCacheInsert(PCUNICODE_STRING pUniStr, HANDLE h
         pEntry->uHash           = supR3HardenedWinVerifyCacheHashPath(pUniStr);
         pEntry->rc              = rc;
         pEntry->fFlags          = fFlags;
-        pEntry->cErrorHits      = 0;
+        pEntry->cHits           = 0;
         pEntry->fWinVerifyTrust = fWinVerifyTrust;
         pEntry->cbPath          = pUniStr->Length;
         memcpy(pEntry->wszPath, pUniStr->Buffer, pUniStr->Length);
@@ -1050,8 +1051,8 @@ static void supR3HardenedWinVerifyCacheProcessImportTodos(void)
                     ULONG fAccess = 0;
                     ULONG fProtect = 0;
                     bool  fCallRealApi = false;
-                    rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, &fAccess, &fProtect, &fCallRealApi,
-                                                    "Imports", false /*fAvoidWinVerifyTrust*/, NULL /*pfQuietFailure*/);
+                    rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, false /*fIgnoreArch*/, &fAccess, &fProtect,
+                                                    &fCallRealApi, "Imports", false /*fAvoidWinVerifyTrust*/, NULL /*pfQuiet*/);
                     NtClose(hFile);
                 }
                 else
@@ -1273,13 +1274,34 @@ static void supR3HardenedWinFix8dot3Path(HANDLE hFile, PUNICODE_STRING pUniStr)
 }
 
 
-static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAccess, PULONG pfProtect,
-                                         bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust,
-                                         bool *pfQuietFailure)
+/**
+ * Screens an image file or file mapped with execute access.
+ *
+ * @returns NT status code.
+ * @param   hFile                   The file handle.
+ * @param   fImage                  Set if image file mapping being made
+ *                                  (NtCreateSection thing).
+ * @param   fIgnoreArch             Using the DONT_RESOLVE_DLL_REFERENCES flag,
+ *                                  which also implies that DLL init / term code
+ *                                  isn't called, so the architecture should be
+ *                                  ignored.
+ * @param   pfAccess                Pointer to the NtCreateSection access flags,
+ *                                  so we can modify them if necessary.
+ * @param   pfProtect               Pointer to the NtCreateSection protection
+ *                                  flags, so we can modify them if necessary.
+ * @param   pfCallRealApi           Whether it's ok to go on to the real API.
+ * @param   pszCaller               Who is calling (for debugging / logging).
+ * @param   fAvoidWinVerifyTrust    Whether we should avoid WinVerifyTrust.
+ * @param   pfQuiet                 Where to return whether to be quiet about
+ *                                  this image in the log (i.e. we've seen it
+ *                                  lots of times already).  Optional.
+ */
+static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, bool fIgnoreArch, PULONG pfAccess, PULONG pfProtect,
+                                         bool *pfCallRealApi, const char *pszCaller, bool fAvoidWinVerifyTrust, bool *pfQuiet)
 {
     *pfCallRealApi = false;
-    if (pfQuietFailure)
-        *pfQuietFailure = false;
+    if (pfQuiet)
+        *pfQuiet = false;
 
     /*
      * Query the name of the file, making sure to zero terminator the
@@ -1313,6 +1335,12 @@ static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAcc
     PVERIFIERCACHEENTRY pCacheHit = supR3HardenedWinVerifyCacheLookup(&uBuf.UniStr, hFile);
     if (pCacheHit)
     {
+        /* Do hit accounting and figure whether we need to be quiet or not. */
+        uint32_t   cHits  = ASMAtomicIncU32(&pCacheHit->cHits);
+        bool const fQuiet = cHits >= 8 && !RT_IS_POWER_OF_TWO(cHits);
+        if (pfQuiet)
+            *pfQuiet = fQuiet;
+
         /* If we haven't done the WinVerifyTrust thing, do it if we can. */
         if (   !pCacheHit->fWinVerifyTrust
             && RT_SUCCESS(pCacheHit->rc)
@@ -1341,7 +1369,7 @@ static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAcc
                 SUP_DPRINTF(("supR3HardenedScreenImage/%s: cache hit (%Rrc) on %ls [avoiding WinVerifyTrust]\n",
                              pszCaller, pCacheHit->rc, pCacheHit->wszPath));
         }
-        else if (pCacheHit->cErrorHits < 16)
+        else if (!fQuiet || !pCacheHit->fWinVerifyTrust)
             SUP_DPRINTF(("supR3HardenedScreenImage/%s: cache hit (%Rrc) on %ls%s\n",
                          pszCaller, pCacheHit->rc, pCacheHit->wszPath, pCacheHit->fWinVerifyTrust ? "" : " [lacks WinVerifyTrust]"));
 
@@ -1352,15 +1380,10 @@ static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAcc
             return STATUS_SUCCESS;
         }
 
-        uint32_t cErrorHits = ASMAtomicIncU32(&pCacheHit->cErrorHits);
-        if (   cErrorHits < 8
-            || RT_IS_POWER_OF_TWO(cErrorHits))
+        if (!fQuiet)
             supR3HardenedError(VINF_SUCCESS, false,
-                               "supR3HardenedScreenImage/%s: cached rc=%Rrc fImage=%d fProtect=%#x fAccess=%#x cErrorHits=%u %ls\n",
-                               pszCaller, pCacheHit->rc, fImage, *pfProtect, *pfAccess, cErrorHits, uBuf.UniStr.Buffer);
-        else if (pfQuietFailure)
-            *pfQuietFailure = true;
-
+                               "supR3HardenedScreenImage/%s: cached rc=%Rrc fImage=%d fProtect=%#x fAccess=%#x cHits=%u %ls\n",
+                               pszCaller, pCacheHit->rc, fImage, *pfProtect, *pfAccess, cHits, uBuf.UniStr.Buffer);
         return STATUS_TRUST_FAILURE;
     }
 
@@ -1538,6 +1561,8 @@ static NTSTATUS supR3HardenedScreenImage(HANDLE hFile, bool fImage, PULONG pfAcc
      * Do the verification. For better error message we borrow what's
      * left of the path buffer for an RTERRINFO buffer.
      */
+    if (fIgnoreArch)
+        fFlags |= SUPHNTVI_F_IGNORE_ARCHITECTURE;
     RTERRINFO ErrInfo;
     RTErrInfoInit(&ErrInfo, (char *)&uBuf.abBuffer[cbNameBuf], sizeof(uBuf) - cbNameBuf);
 
@@ -1608,8 +1633,8 @@ DECLHIDDEN(void) supR3HardenedWinVerifyCachePreload(PCRTUTF16 pwszName)
     ULONG fProtect = 0;
     bool  fCallRealApi;
     //SUP_DPRINTF(("supR3HardenedWinVerifyCachePreload: scanning %ls\n", pwszName));
-    supR3HardenedScreenImage(hFile, false, &fAccess, &fProtect, &fCallRealApi, "preload", false /*fAvoidWinVerifyTrust*/,
-                             NULL /*pfQuietFailure*/);
+    supR3HardenedScreenImage(hFile, false, false /*fIgnoreArch*/, &fAccess, &fProtect, &fCallRealApi, "preload",
+                             false /*fAvoidWinVerifyTrust*/, NULL /*pfQuiet*/);
     //SUP_DPRINTF(("supR3HardenedWinVerifyCachePreload: done %ls\n", pwszName));
 
     NtClose(hFile);
@@ -1646,8 +1671,8 @@ supR3HardenedMonitor_NtCreateSection(PHANDLE phSection, ACCESS_MASK fAccess, POB
 
             bool fCallRealApi;
             //SUP_DPRINTF(("supR3HardenedMonitor_NtCreateSection: 1\n"));
-            NTSTATUS rcNt = supR3HardenedScreenImage(hFile, fImage, &fAccess, &fProtect, &fCallRealApi,
-                                                     "NtCreateSection", true /*fAvoidWinVerifyTrust*/, NULL /*pfQuietFailure*/);
+            NTSTATUS rcNt = supR3HardenedScreenImage(hFile, fImage, true /*fIgnoreArch*/, &fAccess, &fProtect, &fCallRealApi,
+                                                     "NtCreateSection", true /*fAvoidWinVerifyTrust*/, NULL /*pfQuiet*/);
             //SUP_DPRINTF(("supR3HardenedMonitor_NtCreateSection: 2 rcNt=%#x fCallRealApi=%#x\n", rcNt, fCallRealApi));
 
             RtlRestoreLastWin32Error(dwSavedLastError);
@@ -1722,8 +1747,9 @@ static NTSTATUS supR3HardenedCopyRedirectionResult(WCHAR *pwszPath, size_t cwcPa
 static NTSTATUS NTAPI
 supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_STRING pName, PHANDLE phMod)
 {
-    DWORD    dwSavedLastError = RtlGetLastWin32Error();
-    NTSTATUS rcNt;
+    DWORD                   dwSavedLastError = RtlGetLastWin32Error();
+    PUNICODE_STRING const   pOrgName = pName;
+    NTSTATUS                rcNt;
 
     /*
      * Make sure the DLL notification callback is registered.  If we could, we
@@ -1768,6 +1794,7 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
     /*
      * Absolute path?
      */
+    NTSTATUS        rcNtResolve     = STATUS_SUCCESS;
     bool            fSkipValidation = false;
     WCHAR           wszPath[260];
     static UNICODE_STRING const s_DefaultSuffix = RTNT_CONSTANT_UNISTR(L".dll");
@@ -1784,16 +1811,16 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
             && RTPATH_IS_SLASH(pName->Buffer[1]) )
        )
     {
-        rcNt = RtlDosApplyFileIsolationRedirection_Ustr(1 /*fFlags*/,
-                                                        pName,
-                                                        (PUNICODE_STRING)&s_DefaultSuffix,
-                                                        &UniStrStatic,
-                                                        &UniStrDynamic,
-                                                        &pUniStrResult,
-                                                        NULL /*pNewFlags*/,
-                                                        NULL /*pcbFilename*/,
-                                                        NULL /*pcbNeeded*/);
-        if (NT_SUCCESS(rcNt))
+        rcNtResolve = RtlDosApplyFileIsolationRedirection_Ustr(1 /*fFlags*/,
+                                                               pName,
+                                                               (PUNICODE_STRING)&s_DefaultSuffix,
+                                                               &UniStrStatic,
+                                                               &UniStrDynamic,
+                                                               &pUniStrResult,
+                                                               NULL /*pNewFlags*/,
+                                                               NULL /*pcbFilename*/,
+                                                               NULL /*pcbNeeded*/);
+        if (NT_SUCCESS(rcNtResolve))
         {
             UINT cwc;
             rcNt = supR3HardenedCopyRedirectionResult(wszPath, RT_ELEMENTS(wszPath), pUniStrResult, pName, &cwc);
@@ -1880,16 +1907,16 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
          * returns a full DOS path.
          */
         UINT cwc;
-        rcNt = RtlDosApplyFileIsolationRedirection_Ustr(1 /*fFlags*/,
-                                                        pName,
-                                                        (PUNICODE_STRING)&s_DefaultSuffix,
-                                                        &UniStrStatic,
-                                                        &UniStrDynamic,
-                                                        &pUniStrResult,
-                                                        NULL /*pNewFlags*/,
-                                                        NULL /*pcbFilename*/,
-                                                        NULL /*pcbNeeded*/);
-        if (NT_SUCCESS(rcNt))
+        rcNtResolve = RtlDosApplyFileIsolationRedirection_Ustr(1 /*fFlags*/,
+                                                               pName,
+                                                               (PUNICODE_STRING)&s_DefaultSuffix,
+                                                               &UniStrStatic,
+                                                               &UniStrDynamic,
+                                                               &pUniStrResult,
+                                                               NULL /*pNewFlags*/,
+                                                               NULL /*pcbFilename*/,
+                                                               NULL /*pcbNeeded*/);
+        if (NT_SUCCESS(rcNtResolve))
         {
             rcNt = supR3HardenedCopyRedirectionResult(wszPath, RT_ELEMENTS(wszPath), pUniStrResult, pName, &cwc);
             RtlFreeUnicodeString(&UniStrDynamic);
@@ -1932,13 +1959,10 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
         ResolvedName.Buffer = wszPath;
         ResolvedName.Length = (USHORT)(cwc * sizeof(WCHAR));
         ResolvedName.MaximumLength = ResolvedName.Length + sizeof(WCHAR);
-
-        SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: '%.*ls' -> '%.*ls' [rcNt=%#x]\n",
-                     (unsigned)pName->Length / sizeof(WCHAR), pName->Buffer,
-                     ResolvedName.Length / sizeof(WCHAR), ResolvedName.Buffer, rcNt));
         pName = &ResolvedName;
     }
 
+    bool fQuiet = false;
     if (!fSkipValidation)
     {
         /*
@@ -1981,16 +2005,20 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
             ULONG fAccess = 0;
             ULONG fProtect = 0;
             bool  fCallRealApi = false;
-            bool  fQuietFailure = false;
-            rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, &fAccess, &fProtect, &fCallRealApi,
-                                            "LdrLoadDll", false /*fAvoidWinVerifyTrust*/, &fQuietFailure);
+            rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, RT_VALID_PTR(pfFlags) && (*pfFlags & 0x2) /*fIgnoreArch*/,
+                                            &fAccess, &fProtect, &fCallRealApi,
+                                            "LdrLoadDll", false /*fAvoidWinVerifyTrust*/, &fQuiet);
             NtClose(hFile);
             if (!NT_SUCCESS(rcNt))
             {
-                if (!fQuietFailure)
+                if (!fQuiet)
                 {
-                    supR3HardenedError(VINF_SUCCESS, false, "supR3HardenedMonitor_LdrLoadDll: rejecting '%ls': rcNt=%#x\n",
-                                       wszPath, rcNt);
+                    if (pOrgName != pName)
+                        supR3HardenedError(VINF_SUCCESS, false, "supR3HardenedMonitor_LdrLoadDll: rejecting '%ls': rcNt=%#x\n",
+                                           wszPath, rcNt);
+                    else
+                        supR3HardenedError(VINF_SUCCESS, false, "supR3HardenedMonitor_LdrLoadDll: rejecting '%ls' (%.*ls): rcNt=%#x\n",
+                                           wszPath, pOrgName->Length / sizeof(WCHAR), pOrgName->Buffer, rcNt);
                     SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: returns rcNt=%#x '%ls'\n", rcNt, wszPath));
                 }
                 RtlRestoreLastWin32Error(dwSavedLastError);
@@ -2002,8 +2030,9 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
         else
         {
             DWORD dwErr = RtlGetLastWin32Error();
-            SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: error opening '%ls': %u (NtPath=%.*ls)\n",
-                         wszPath, dwErr, NtPathUniStr.Length / sizeof(RTUTF16), NtPathUniStr.Buffer));
+            SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: error opening '%ls': %u (NtPath=%.*ls; Input=%.*ls)\n",
+                         wszPath, dwErr, NtPathUniStr.Length / sizeof(RTUTF16), NtPathUniStr.Buffer,
+                         pOrgName->Length / sizeof(WCHAR), pOrgName->Buffer));
         }
         RTNtPathFree(&NtPathUniStr, &hRootDir);
     }
@@ -2011,9 +2040,21 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
     /*
      * Screened successfully enough.  Call the real thing.
      */
-    SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: pName=%.*ls *pfFlags=%#x pwszSearchPath=%p:%ls [calling]\n",
-                 (unsigned)pName->Length / sizeof(WCHAR), pName->Buffer, pfFlags ? *pfFlags : UINT32_MAX, pwszSearchPath,
-                 !((uintptr_t)pwszSearchPath & 1) && (uintptr_t)pwszSearchPath >= 0x2000U ? pwszSearchPath : L"<flags>"));
+    if (!fQuiet)
+    {
+        if (pOrgName != pName)
+            SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: pName=%.*ls (Input=%.*ls, rcNtResolve=%#x) *pfFlags=%#x pwszSearchPath=%p:%ls [calling]\n",
+                         (unsigned)pName->Length / sizeof(WCHAR), pName->Buffer,
+                         (unsigned)pOrgName->Length / sizeof(WCHAR), pOrgName->Buffer, rcNtResolve,
+                         pfFlags ? *pfFlags : UINT32_MAX, pwszSearchPath,
+                         !((uintptr_t)pwszSearchPath & 1) && (uintptr_t)pwszSearchPath >= 0x2000U ? pwszSearchPath : L"<flags>"));
+        else
+            SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: pName=%.*ls (rcNtResolve=%#x) *pfFlags=%#x pwszSearchPath=%p:%ls [calling]\n",
+                         (unsigned)pName->Length / sizeof(WCHAR), pName->Buffer, rcNtResolve,
+                         pfFlags ? *pfFlags : UINT32_MAX, pwszSearchPath,
+                         !((uintptr_t)pwszSearchPath & 1) && (uintptr_t)pwszSearchPath >= 0x2000U ? pwszSearchPath : L"<flags>"));
+    }
+
     RtlRestoreLastWin32Error(dwSavedLastError);
     rcNt = g_pfnLdrLoadDllReal(pwszSearchPath, pfFlags, pName, phMod);
 
@@ -2024,7 +2065,7 @@ supR3HardenedMonitor_LdrLoadDll(PWSTR pwszSearchPath, PULONG pfFlags, PUNICODE_S
 
     if (NT_SUCCESS(rcNt) && phMod)
         SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: returns rcNt=%#x hMod=%p '%ls'\n", rcNt, *phMod, wszPath));
-    else
+    else if (!NT_SUCCESS(rcNt) || !fQuiet)
         SUP_DPRINTF(("supR3HardenedMonitor_LdrLoadDll: returns rcNt=%#x '%ls'\n", rcNt, wszPath));
 
     supR3HardenedWinVerifyCacheProcessWvtTodos();
@@ -2115,7 +2156,7 @@ static VOID CALLBACK supR3HardenedDllNotificationCallback(ULONG ulReason, PCLDR_
         ULONG fProtect = 0;
         bool  fCallRealApi = false;
         bool  fQuietFailure = false;
-        rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, &fAccess, &fProtect, &fCallRealApi,
+        rcNt = supR3HardenedScreenImage(hFile, true /*fImage*/, true /*fIgnoreArch*/, &fAccess, &fProtect, &fCallRealApi,
                                         "LdrLoadDll", true /*fAvoidWinVerifyTrust*/, &fQuietFailure);
         NtClose(hFile);
         if (!NT_SUCCESS(rcNt))
diff --git a/src/VBox/Installer/darwin/Makefile.kmk b/src/VBox/Installer/darwin/Makefile.kmk
index e3bdfaa..27d85e0 100644
--- a/src/VBox/Installer/darwin/Makefile.kmk
+++ b/src/VBox/Installer/darwin/Makefile.kmk
@@ -407,6 +407,10 @@ if defined(VBOX_WITH_PYTHON) && !defined(VBOX_WITHOUT_VBOXPYTHON_FOR_OSX_10_7)
  VBOX_DI_VBAPP_DYLIBS += \
  	MacOS/VBoxPython2_7.so
 endif
+ifdef VBOX_WITH_VMSVGA3D
+ VBOX_DI_VBAPP_DYLIBS += \
+ 	MacOS/VBoxSVGA3D.dylib
+endif
 
 VBOX_DI_VBAPP_DYLIBS.x86 := \
 	MacOS/VBoxREM32.dylib \
diff --git a/src/VBox/Installer/linux/Makefile.kmk b/src/VBox/Installer/linux/Makefile.kmk
index 7811273..04571eb 100644
--- a/src/VBox/Installer/linux/Makefile.kmk
+++ b/src/VBox/Installer/linux/Makefile.kmk
@@ -166,6 +166,7 @@ VBOX_LNX_STRIP_BIN = \
 		VBoxOGLrenderspu.so \
 		$(if $(VBOX_WITH_QTGUI),VBoxTestOGL,) \
 		VBoxSharedCrOpenGL.so,) \
+	$(if $(VBOX_WITH_VMSVGA3D),VBoxSVGA3D.so,) \
 	$(if $(VBOX_WITH_PYTHON),$(notdir $(wildcard $(PATH_STAGE_BIN)/VBoxPython*.so)),) \
 	$(if $(VBOX_WITH_JXPCOM),libvboxjxpcom.so,) \
 	$(if $(and $(VBOX_WITH_EXTPACK_VNC),$(VBOX_WITHOUT_EXTPACK_VNC_PACKING)), \
diff --git a/src/VBox/Installer/linux/rpm/rules b/src/VBox/Installer/linux/rpm/rules
index adf5ce2..88a377c 100755
--- a/src/VBox/Installer/linux/rpm/rules
+++ b/src/VBox/Installer/linux/rpm/rules
@@ -152,6 +152,7 @@ bld_flags := AUTOCFG=$(current)/rpm/AutoConfig.kmk \
 	     PATH_OUT=$(builddir) \
 	     VBOX_WITHOUT_EXTPACK_PUEL_PACKING=1 \
 	     VBOX_WITHOUT_EXTPACK_VNC_PACKING=1 \
+	     $(if $(filter el5 el6 sles10.1,$(rpmrel)),,VBOX_WITH_VMSVGA3D=1) \
 	     VBOX_DO_STRIP= \
 	     VBOX_WITH_MULTIVERSION_PYTHON= \
 	     $(doc_dir) \
@@ -162,7 +163,7 @@ bld_flags := AUTOCFG=$(current)/rpm/AutoConfig.kmk \
 	     $(if $(VERBOSE),--print-directory KBUILD_VERBOSE=2,--no-print-directory) \
 	     $(if $(STAGEDISO),VBOX_WITHOUT_ADDITIONS=1,) \
 	     $(if $(BLEEDING_EDGE),VBOX_BLEEDING_EDGE=$(BLEEDING_EDGE),) \
-	     $(if $(filter el5 ol5 centos5 sles10.1,$(rpmrel)),,VBOX_WITH_SYSFS_BY_DEFAULT=1)
+	     $(if $(filter el5 ol5 centos5 sles10.1 sles11.0,$(rpmrel)),,VBOX_WITH_SYSFS_BY_DEFAULT=1)
 
 rpm/configure-stamp:
 	cd $(vboxroot) && ./configure --odir=$(current)/rpm $(cfg_flags)
diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk
index f1341e6..5cd9fcb 100644
--- a/src/VBox/Main/Makefile.kmk
+++ b/src/VBox/Main/Makefile.kmk
@@ -1011,7 +1011,7 @@ VBOX_JMSCOM_TARGET := $(PATH_TARGET)/vboxjmscom-gen
 VBOX_JMSCOM_GEN     = $(VBOX_JMSCOM_TARGET)/jmscomgen
 VBOX_JMSCOM_JDEST  := $(VBOX_JMSCOM_TARGET)/jdest
 VBOX_GLUE_XSLT_DIR := $(PATH_ROOT)/src/VBox/Main/glue
-VBOX_JACOB_DIR     := $(PATH_ROOT)/src/libs/jacob-1.15-M3
+VBOX_JACOB_DIR     := $(PATH_ROOT)/src/libs/jacob-1.17
 
 INSTALLS += VBoxJMscom-inst-jar
 VBoxJMscom-inst-jar_INST = $(INST_SDK)bindings/mscom/java/
@@ -1038,6 +1038,7 @@ $(VBOX_JMSCOM_GEN)/jmscomglue.list: \
 	$(call MSG_L1,Generating Java MSCOM glue files from XIDL)
 	$(QUIET)$(RM) -f $(wildcard $(VBOX_JMSCOM_GEN)/java/*.java)
 	$(QUIET)$(VBOX_XSLTPROC) \
+              --stringparam filelistonly ""                    \
               --stringparam G_vboxApiSuffix $(VBOX_API_SUFFIX) \
               --stringparam G_vboxGlueStyle mscom              \
               --stringparam G_vboxDirPrefix ""                 \
@@ -1046,15 +1047,14 @@ $(VBOX_JMSCOM_GEN)/jmscomglue.list: \
 	$(QUIET)echo $(VBOX_JMSCOM_GEN)/java/*.java > $@
 
 $$(VBOX_JMSCOM_JAR): $(VBOX_JMSCOM_GEN)/jmscomglue.list | $$(dir $$@)
-	$(call MSG_TOOL,javac,$(notdir $@),jmscomgen.list,)
+	$(call MSG_TOOL,javac,$(notdir $@),jmscomglue.list,)
 	$(QUIET)$(RM) -Rf $(VBOX_JMSCOM_JDEST)
 	$(QUIET)$(MKDIR) -p $(VBOX_JMSCOM_JDEST)
 	$(call MSG_TOOL,javac,$(notdir $@),...,)
-	$(VBOX_JAVAC) $(VBOX_JAVAC_OPTS) \
-                @$(VBOX_JMSCOM_GEN)/jmscomglue.list \
+	$(QUIET)$(VBOX_JAVAC) $(VBOX_JAVAC_OPTS) @$(VBOX_JMSCOM_GEN)/jmscomglue.list \
 		-d $(VBOX_JMSCOM_JDEST) -classpath "$(VBOX_JMSCOM_JDEST)$(VBOX_SEP)$(VBOX_JACOB_DIR)/jacob.jar"
 	$(call MSG_LINK,$(notdir $@),$@)
-	$(VBOX_JAR) cf $@ -C $(VBOX_JMSCOM_JDEST) .
+	$(QUIET)$(VBOX_JAR) cf $@ -C $(VBOX_JMSCOM_JDEST) .
 
 ## @todo compile TestVBox.java (see below) to have sanity checking
 
diff --git a/src/VBox/Main/glue/glue-java.xsl b/src/VBox/Main/glue/glue-java.xsl
index a1f47fc..b3b22a6 100644
--- a/src/VBox/Main/glue/glue-java.xsl
+++ b/src/VBox/Main/glue/glue-java.xsl
@@ -1366,7 +1366,10 @@
               <xsl:with-param name="forceelem" select="'yes'" />
             </xsl:call-template>
           </xsl:variable>
-          <xsl:value-of select="concat('Helper.unwrap2(', $elemgluetype, '.class, ', $elembacktype, '.class, ', $value, ')')"/>
+          <!-- Sometimes javac needs a boost of self-confidence regarding
+               varargs calls, and this (Object) cast makes sure that it calls
+               the varargs method - as if there is any other. -->
+          <xsl:value-of select="concat('(Object)Helper.unwrap2(', $elemgluetype, '.class, ', $elembacktype, '.class, ', $value, ')')"/>
         </xsl:when>
         <xsl:otherwise>
           <xsl:value-of select="concat('(', $value, ' != null) ? ', $value, '.getTypedWrapped() : null')" />
@@ -1453,7 +1456,7 @@
     </xsl:when>
 
     <xsl:when test="($idltype='octet') and ($safearray='yes')">
-      <xsl:value-of select="concat('Helper.encodeBase64(', $value, ')')"/>
+      <xsl:value-of select="$value"/>
     </xsl:when>
 
     <xsl:otherwise>
@@ -1579,7 +1582,7 @@
 
   <xsl:choose>
     <xsl:when test="($G_vboxGlueStyle='xpcom')">
-      <xsl:text>                </xsl:text>
+      <xsl:text>            </xsl:text>
       <xsl:if test="param[@dir='return']">
         <xsl:value-of select="concat($retval, ' = ')" />
       </xsl:if>
@@ -1624,7 +1627,7 @@
     </xsl:when>
 
     <xsl:when test="($G_vboxGlueStyle='mscom')">
-      <xsl:text>                </xsl:text>
+      <xsl:text>            </xsl:text>
       <xsl:if test="param[@dir='return']">
         <xsl:value-of select="concat($retval, ' = ')" />
       </xsl:if>
@@ -1994,7 +1997,7 @@
                                   '>();
')"/>
           </xsl:when>
           <xsl:otherwise>
-            <xsl:value-of select="concat('        ', $backrettype, ' retVal;
')"/>
+            <xsl:value-of select="concat('            ', $backrettype, ' retVal;
')"/>
           </xsl:otherwise>
         </xsl:choose>
       </xsl:if>
@@ -2045,7 +2048,7 @@
             <xsl:with-param name="safearray" select="$returnidlsafearray" />
           </xsl:call-template>
         </xsl:variable>
-        <xsl:value-of select="concat('        return ', $wrapped, ';
')" />
+        <xsl:value-of select="concat('            return ', $wrapped, ';
')" />
       </xsl:if>
       <xsl:call-template name="endExcWrapper"/>
 
@@ -2120,19 +2123,19 @@
           <xsl:with-param name="type" select="$ifname" />
         </xsl:call-template>
       </xsl:variable>
-      <xsl:text>      nsISupports nsobj = obj != null ? (nsISupports)obj.getWrapped() : null;
</xsl:text>
-      <xsl:text>      if (nsobj == null) return null;
</xsl:text>
-      <xsl:value-of select="concat('      ', $backtype, ' qiobj = Helper.queryInterface(nsobj, "{', $uuid, '}", ', $backtype, '.class);
')" />
-      <xsl:value-of select="concat('      return qiobj == null ? null : new ', $ifname, '(qiobj);
')" />
+      <xsl:text>        nsISupports nsobj = obj != null ? (nsISupports)obj.getWrapped() : null;
</xsl:text>
+      <xsl:text>        if (nsobj == null) return null;
</xsl:text>
+      <xsl:value-of select="concat('        ', $backtype, ' qiobj = Helper.queryInterface(nsobj, "{', $uuid, '}", ', $backtype, '.class);
')" />
+      <xsl:value-of select="concat('        return qiobj == null ? null : new ', $ifname, '(qiobj);
')" />
     </xsl:when>
 
     <xsl:when test="$G_vboxGlueStyle='mscom'">
-      <xsl:value-of select="concat('       return', ' obj == null ? null : new ', $ifname, '((com.jacob.com.Dispatch)obj.getWrapped());
')" />
+      <xsl:value-of select="concat('        return', ' obj == null ? null : new ', $ifname, '((com.jacob.com.Dispatch)obj.getWrapped());
')" />
     </xsl:when>
 
     <xsl:when test="$G_vboxGlueStyle='jaxws'">
       <!-- bad, need to check that we really can be casted to this type -->
-      <xsl:value-of select="concat('       return obj == null ?  null : new ', $ifname, '(obj.getWrapped(), obj.getRemoteWSPort());
')" />
+      <xsl:value-of select="concat('        return obj == null ?  null : new ', $ifname, '(obj.getWrapped(), obj.getRemoteWSPort());
')" />
     </xsl:when>
 
     <xsl:otherwise>
@@ -2331,14 +2334,14 @@
       <xsl:when test="($G_vboxGlueStyle='jaxws')">
         <xsl:value-of select="concat('    public ', $ifname, '(String wrapped, VboxPortType port)
')" />
         <xsl:text>    {
</xsl:text>
-        <xsl:text>          super(wrapped, port);
</xsl:text>
+        <xsl:text>        super(wrapped, port);
</xsl:text>
         <xsl:text>    }
</xsl:text>
       </xsl:when>
 
       <xsl:when test="($G_vboxGlueStyle='xpcom') or ($G_vboxGlueStyle='mscom')">
         <xsl:value-of select="concat('    public ', $ifname, '(',  $wrappedType, ' wrapped)
')" />
         <xsl:text>    {
</xsl:text>
-        <xsl:text>          super(wrapped);
</xsl:text>
+        <xsl:text>        super(wrapped);
</xsl:text>
         <xsl:text>    }
</xsl:text>
 
         <!-- Typed wrapped object accessor -->
@@ -3333,8 +3336,6 @@ public class Helper
     {
         if (values == null)
             return null;
-        if (values.length == 0)
-            return Collections.emptyList();
 
         List<Short> ret = new ArrayList<Short>(values.length);
         for (short v : values)
@@ -3348,8 +3349,6 @@ public class Helper
     {
         if (values == null)
             return null;
-        if (values.length == 0)
-            return Collections.emptyList();
 
         List<Integer> ret = new ArrayList<Integer>(values.length);
         for (int v : values)
@@ -3363,8 +3362,6 @@ public class Helper
     {
         if (values == null)
             return null;
-        if (values.length == 0)
-            return Collections.emptyList();
 
         List<Long> ret = new ArrayList<Long>(values.length);
         for (long v : values)
@@ -3378,8 +3375,6 @@ public class Helper
     {
         if (values == null)
             return null;
-        if (values.length == 0)
-            return Collections.emptyList();
 
         List<String> ret = new ArrayList<String>(values.length);
         for (String v : values)
@@ -3442,7 +3437,7 @@ public class Helper
             case Variant.VariantDispatch:
                 return wrapDispatch(wrapperClass, v.getDispatch());
             default:
-                throw new VBoxException("unhandled variant type " + vt);
+                throw new IllegalArgumentException("unhandled variant type " + vt);
         }
     }
 
@@ -4242,10 +4237,19 @@ import java.math.BigInteger;
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.ArrayList;
 import javax.xml.namespace.QName;
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Holder;
 import javax.xml.ws.WebServiceException;
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.net.Socket;
+import java.net.InetAddress;
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.SSLSocket;
 
 class PortPool
 {
@@ -4361,6 +4365,99 @@ class PortPool
 }
 
 
+class VBoxTLSSocketFactory extends SSLSocketFactory
+{
+    private final SSLSocketFactory sf;
+
+    private void setupSocket(SSLSocket s)
+    {
+        String[] oldproto = s.getEnabledProtocols();
+        List<String> protolist = new ArrayList<String>();
+        for (int i = 0; i < oldproto.length; i++)
+            if (oldproto[i].toUpperCase().startsWith("TLS"))
+                protolist.add(oldproto[i]);
+        String[] newproto = protolist.toArray(new String[protolist.size()]);
+        s.setEnabledProtocols(newproto);
+    }
+
+    public VBoxTLSSocketFactory()
+    {
+        SSLSocketFactory tmp = null;
+        try
+        {
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, null, null);
+            tmp = sc.getSocketFactory();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        sf = tmp;
+    }
+
+    public static SocketFactory getDefault()
+    {
+        return new VBoxTLSSocketFactory();
+    }
+
+    public Socket createSocket(Socket socket, String host, int port,
+                               boolean autoClose) throws IOException, UnknownHostException
+    {
+        SSLSocket s = (SSLSocket)sf.createSocket(socket, host, port, autoClose);
+        setupSocket(s);
+        return s;
+    }
+
+    public Socket createSocket() throws IOException
+    {
+        SSLSocket s = (SSLSocket)sf.createSocket();
+        setupSocket(s);
+        return s;
+    }
+
+    public Socket createSocket(InetAddress host, int port) throws IOException
+    {
+        SSLSocket s = (SSLSocket)sf.createSocket(host, port);
+        setupSocket(s);
+        return s;
+    }
+
+    public Socket createSocket(InetAddress address, int port,
+                               InetAddress localAddress, int localPort) throws IOException
+    {
+        SSLSocket s = (SSLSocket)sf.createSocket(address, port, localAddress, localPort);
+        setupSocket(s);
+        return s;
+    }
+
+    public Socket createSocket(String host, int port) throws IOException, UnknownHostException
+    {
+        SSLSocket s = (SSLSocket)sf.createSocket(host, port);
+        setupSocket(s);
+        return s;
+    }
+
+    public Socket createSocket(String host, int port,
+                               InetAddress localHost, int localPort) throws IOException, UnknownHostException
+    {
+        SSLSocket s = (SSLSocket)sf.createSocket(host, port, localHost, localPort);
+        setupSocket(s);
+        return s;
+    }
+
+    public String[] getDefaultCipherSuites()
+    {
+        return sf.getSupportedCipherSuites();
+    }
+
+    public String[] getSupportedCipherSuites()
+    {
+        return sf.getSupportedCipherSuites();
+    }
+}
+        
+
 public class VirtualBoxManager
 {
     private static PortPool pool = new PortPool(true);
@@ -4387,6 +4484,21 @@ public class VirtualBoxManager
         {
             ((BindingProvider)port).getRequestContext().
                 put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
+
+            // Unfortunately there is no official way to make JAX-WS use
+            // TLS only, which means that a rather tedious approach is
+            // unavoidable (implementing a TLS only SSLSocketFactory,
+            // because the default one associated with a TLS SSLContext
+            // happily uses SSLv2/3 handshakes, which make TLS servers
+            // drop the connection), and additionally a not standardized,
+            // shotgun approach is needed to make the relevant JAX-WS
+            // implementations use this factory.
+            VBoxTLSSocketFactory sf = new VBoxTLSSocketFactory();
+            ((BindingProvider)port).getRequestContext().
+                put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", sf);
+            ((BindingProvider)port).getRequestContext().
+                put("com.sun.xml.ws.transport.https.client.SSLSocketFactory", sf);
+
             String handle = port.iWebsessionManagerLogon(username, passwd);
             this.vbox = new IVirtualBox(handle, port);
         }
diff --git a/src/VBox/Main/src-client/ConsoleImpl2.cpp b/src/VBox/Main/src-client/ConsoleImpl2.cpp
index caed4be..f858b2d 100644
--- a/src/VBox/Main/src-client/ConsoleImpl2.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl2.cpp
@@ -527,7 +527,7 @@ static int SetBiosDiskInfo(ComPtr<IMachine> pMachine, PCFGMNODE pCfg, PCFGMNODE
 {
     HRESULT             hrc;
 #define MAX_DEVICES     30
-#define H()     AssertMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_GENERAL_FAILURE)
+#define H()     AssertLogRelMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR)
 
     LONG lPortLUN[MAX_BIOS_LUN_COUNT];
     LONG lPortUsed[MAX_DEVICES];
@@ -783,7 +783,7 @@ DECLCALLBACK(int) Console::configConstructor(PUVM pUVM, PVM pVM, void *pvConsole
 {
     LogFlowFuncEnter();
 
-    AssertReturn(pvConsole, VERR_GENERAL_FAILURE);
+    AssertReturn(pvConsole, VERR_INVALID_POINTER);
     ComObjPtr<Console> pConsole = static_cast<Console *>(pvConsole);
 
     AutoCaller autoCaller(pConsole);
@@ -837,7 +837,7 @@ int Console::configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
     Utf8Str         strTmp;
     Bstr            bstr;
 
-#define H()         AssertMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_GENERAL_FAILURE)
+#define H()         AssertLogRelMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR)
 
     /*
      * Get necessary objects and frequently used parameters.
@@ -1892,7 +1892,7 @@ int Console::configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
                 }
 
                 default:
-                    AssertMsgFailedReturn(("invalid storage controller type: %d\n", enmCtrlType), VERR_GENERAL_FAILURE);
+                    AssertLogRelMsgFailedReturn(("invalid storage controller type: %d\n", enmCtrlType), VERR_MAIN_CONFIG_CONSTRUCTOR_IPE);
             }
 
             /* Attach the media to the storage controllers. */
@@ -2945,7 +2945,7 @@ int Console::configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
     }
     catch (HRESULT hrcXcpt)
     {
-        AssertMsgFailedReturn(("hrc=%Rhrc\n", hrcXcpt), VERR_GENERAL_FAILURE);
+        AssertLogRelMsgFailedReturn(("hrc=%Rhrc\n", hrcXcpt), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR);
     }
 
 #ifdef VBOX_WITH_EXTPACK
@@ -3251,7 +3251,7 @@ int Console::configGraphicsController(PCFGMNODE pDevices,
         Bstr    bstr;
         const char *pcszDevice = "vga";
 
-#define H()         AssertMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_GENERAL_FAILURE)
+#define H()         AssertLogRelMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR)
         InsertConfigNode(pDevices, pcszDevice, &pDev);
         InsertConfigNode(pDev,     "0", &pInst);
         InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
@@ -3426,7 +3426,7 @@ int Console::configMediumAttachment(PCFGMNODE pCtlInst,
         Bstr    bstr;
 
 // #define RC_CHECK()  AssertMsgReturn(RT_SUCCESS(rc), ("rc=%Rrc\n", rc), rc)
-#define H()         AssertMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_GENERAL_FAILURE)
+#define H()         AssertLogRelMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR)
 
         LONG lDev;
         hrc = pMediumAtt->COMGETTER(Device)(&lDev);                                         H();
@@ -4172,7 +4172,7 @@ int Console::configNetwork(const char *pszDevice,
         HRESULT hrc;
         Bstr bstr;
 
-#define H()         AssertMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_GENERAL_FAILURE)
+#define H()         AssertLogRelMsgReturn(!FAILED(hrc), ("hrc=%Rhrc\n", hrc), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR)
 
         /*
          * Locking the object before doing VMR3* calls is quite safe here, since
@@ -5274,9 +5274,9 @@ int configSetGlobalPropertyFlags(VMMDev * const pVMMDev,
 /* static */ int Console::configGuestProperties(void *pvConsole, PUVM pUVM)
 {
 #ifdef VBOX_WITH_GUEST_PROPS
-    AssertReturn(pvConsole, VERR_GENERAL_FAILURE);
+    AssertReturn(pvConsole, VERR_INVALID_POINTER);
     ComObjPtr<Console> pConsole = static_cast<Console *>(pvConsole);
-    AssertReturn(pConsole->m_pVMMDev, VERR_GENERAL_FAILURE);
+    AssertReturn(pConsole->m_pVMMDev, VERR_INVALID_POINTER);
 
     /* Load the service */
     int rc = pConsole->m_pVMMDev->hgcmLoadService("VBoxGuestPropSvc", "VBoxGuestPropSvc");
@@ -5327,7 +5327,7 @@ int configSetGlobalPropertyFlags(VMMDev * const pVMMDev,
                                                       ComSafeArrayAsOutParam(valuesOut),
                                                       ComSafeArrayAsOutParam(timestampsOut),
                                                       ComSafeArrayAsOutParam(flagsOut));
-        AssertMsgReturn(SUCCEEDED(hrc), ("hrc=%Rhrc\n", hrc), VERR_GENERAL_FAILURE);
+        AssertLogRelMsgReturn(SUCCEEDED(hrc), ("hrc=%Rhrc\n", hrc), VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR);
         size_t cProps = namesOut.size();
         size_t cAlloc = cProps + 1;
         if (   valuesOut.size() != cProps
@@ -5431,7 +5431,7 @@ int configSetGlobalPropertyFlags(VMMDev * const pVMMDev,
 /* static */ int Console::configGuestControl(void *pvConsole)
 {
 #ifdef VBOX_WITH_GUEST_CONTROL
-    AssertReturn(pvConsole, VERR_GENERAL_FAILURE);
+    AssertReturn(pvConsole, VERR_INVALID_POINTER);
     ComObjPtr<Console> pConsole = static_cast<Console *>(pvConsole);
 
     /* Load the service */
diff --git a/src/VBox/Main/src-client/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp
index fed0ac3..6525c92 100644
--- a/src/VBox/Main/src-client/DisplayImpl.cpp
+++ b/src/VBox/Main/src-client/DisplayImpl.cpp
@@ -3510,6 +3510,15 @@ STDMETHODIMP Display::ViewportChanged(ULONG aScreenId, ULONG x, ULONG y, ULONG w
         }
     }
 #endif /* VBOX_WITH_CROGL && VBOX_WITH_HGCM */
+
+#ifdef VBOX_WITH_VMSVGA
+    /* The driver might not have been constructed yet */
+    if (mpDrv)
+    {
+        mpDrv->pUpPort->pfnSetViewPort(mpDrv->pUpPort, aScreenId, x, y, width, height);
+    }
+#endif
+
     return S_OK;
 }
 
diff --git a/src/VBox/Main/src-client/GuestDirectoryImpl.cpp b/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
index 52d0cf9..3ee8368 100644
--- a/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
+++ b/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
@@ -89,7 +89,7 @@ int GuestDirectory::init(Console *pConsole, GuestSession *pSession,
     {
         /* Start the directory process on the guest. */
         GuestProcessStartupInfo procInfo;
-        procInfo.mName      = Utf8StrFmt(tr("Reading directory \"%s\"", openInfo.mPath.c_str()));
+        procInfo.mName      = Utf8StrFmt(tr("Reading directory \"%s\""), openInfo.mPath.c_str());
         procInfo.mCommand   = Utf8Str(VBOXSERVICE_TOOL_LS);
         procInfo.mTimeoutMS = 5 * 60 * 1000; /* 5 minutes timeout. */
         procInfo.mFlags     = ProcessCreateFlag_WaitForStdOut;
diff --git a/src/VBox/Main/src-client/GuestSessionImpl.cpp b/src/VBox/Main/src-client/GuestSessionImpl.cpp
index 433ac05..63682f6 100644
--- a/src/VBox/Main/src-client/GuestSessionImpl.cpp
+++ b/src/VBox/Main/src-client/GuestSessionImpl.cpp
@@ -2774,8 +2774,8 @@ STDMETHODIMP GuestSession::DirectoryOpen(IN_BSTR aPath, IN_BSTR aFilter, ComSafe
         switch (rc)
         {
             case VERR_INVALID_PARAMETER:
-               hr = setError(VBOX_E_IPRT_ERROR, tr("Opening directory \"%s\" failed; invalid parameters given",
-                                                   Utf8Str(aPath).c_str()));
+               hr = setError(VBOX_E_IPRT_ERROR, tr("Opening directory \"%s\" failed; invalid parameters given"),
+                                                   Utf8Str(aPath).c_str());
                break;
 
             case VERR_GSTCTL_GUEST_ERROR:
@@ -2837,8 +2837,8 @@ STDMETHODIMP GuestSession::DirectoryQueryInfo(IN_BSTR aPath, IGuestFsObjInfo **a
                 break;
 
             case VERR_NOT_A_DIRECTORY:
-                hr = setError(VBOX_E_IPRT_ERROR, tr("Element \"%s\" exists but is not a directory",
-                                                    Utf8Str(aPath).c_str()));
+                hr = setError(VBOX_E_IPRT_ERROR, tr("Element \"%s\" exists but is not a directory"),
+                                                    Utf8Str(aPath).c_str());
                 break;
 
             default:
diff --git a/src/VBox/Main/src-server/VRDEServerImpl.cpp b/src/VBox/Main/src-server/VRDEServerImpl.cpp
index a717aff..f03f10e 100644
--- a/src/VBox/Main/src-server/VRDEServerImpl.cpp
+++ b/src/VBox/Main/src-server/VRDEServerImpl.cpp
@@ -396,6 +396,9 @@ STDMETHODIMP VRDEServer::SetVRDEProperty(IN_BSTR aKey, IN_BSTR aValue)
     {
         Bstr ports = aValue;
 
+        if (ports == Bstr("0"))
+            ports = VRDP_DEFAULT_PORT_STR;
+
         /* Verify the string. */
         int vrc = vrdpServerVerifyPortsString(ports);
         if (RT_FAILURE(vrc))
@@ -408,10 +411,7 @@ STDMETHODIMP VRDEServer::SetVRDEProperty(IN_BSTR aKey, IN_BSTR aValue)
              * stop. There is no fool proof here.
              */
             mData.backup();
-            if (ports == Bstr("0"))
-                mData->mProperties["TCP/Ports"] = VRDP_DEFAULT_PORT_STR;
-            else
-                mData->mProperties["TCP/Ports"] = ports;
+            mData->mProperties["TCP/Ports"] = ports;
 
             /* leave the lock before informing callbacks */
             alock.release();
diff --git a/src/VBox/Main/webservice/vboxweb.cpp b/src/VBox/Main/webservice/vboxweb.cpp
index 5debb96..647af79 100644
--- a/src/VBox/Main/webservice/vboxweb.cpp
+++ b/src/VBox/Main/webservice/vboxweb.cpp
@@ -5,7 +5,7 @@
  *      (plus static gSOAP server code) to implement the actual webservice
  *      server, to which clients can connect.
  *
- * Copyright (C) 2007-2013 Oracle Corporation
+ * Copyright (C) 2007-2014 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -843,7 +843,7 @@ void doQueuesLoop()
     soap_init(&soap);
 
 #ifdef WITH_OPENSSL
-    if (g_fSSL && soap_ssl_server_context(&soap, SOAP_SSL_DEFAULT, g_pcszKeyFile,
+    if (g_fSSL && soap_ssl_server_context(&soap, SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION | SOAP_TLSv1, g_pcszKeyFile,
                                          g_pcszPassword, g_pcszCACert, g_pcszCAPath,
                                          g_pcszDHFile, g_pcszRandFile, g_pcszSID))
     {
diff --git a/src/VBox/Main/webservice/webtest.cpp b/src/VBox/Main/webservice/webtest.cpp
index 78834c5..29f8b0a 100644
--- a/src/VBox/Main/webservice/webtest.cpp
+++ b/src/VBox/Main/webservice/webtest.cpp
@@ -3,7 +3,7 @@
  *      demo webservice client in C++. This mimics some of the
  *      functionality of VBoxManage for testing purposes.
  *
- * Copyright (C) 2006-2013 Oracle Corporation
+ * Copyright (C) 2006-2014 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -112,7 +112,7 @@ int main(int argc, char* argv[])
     // Use SOAP_SSL_NO_AUTHENTICATION here to accept broken server configs.
     // In a real world setup please use at least SOAP_SSL_DEFAULT and provide
     // the necessary CA certificate for validating the server's certificate.
-    if (fSSL && soap_ssl_client_context(&soap, SOAP_SSL_NO_AUTHENTICATION,
+    if (fSSL && soap_ssl_client_context(&soap, SOAP_SSL_NO_AUTHENTICATION | SOAP_TLSv1,
                                         NULL /*clientkey*/, NULL /*password*/,
                                         NULL /*cacert*/, NULL /*capath*/,
                                         NULL /*randfile*/))
diff --git a/src/VBox/Runtime/common/misc/http.cpp b/src/VBox/Runtime/common/misc/http.cpp
index 6e1e10b..6c8e294 100644
--- a/src/VBox/Runtime/common/misc/http.cpp
+++ b/src/VBox/Runtime/common/misc/http.cpp
@@ -487,6 +487,9 @@ RTR3DECL(int) rtHttpGet(RTHTTP hHttp, const char *pcszUrl, uint8_t **ppvResponse
     rcCurl = curl_easy_setopt(pHttpInt->pCurl, CURLOPT_NOPROGRESS, (long)0);
     if (CURL_FAILED(rcCurl))
         return VERR_INTERNAL_ERROR;
+    rcCurl = curl_easy_setopt(pHttpInt->pCurl, CURLOPT_SSLVERSION, (long)CURL_SSLVERSION_TLSv1);
+    if (CURL_FAILED(rcCurl))
+        return VERR_INVALID_PARAMETER;
 
     rcCurl = curl_easy_perform(pHttpInt->pCurl);
     int rc = rtHttpGetCalcStatus(pHttpInt, rcCurl);
diff --git a/src/VBox/Runtime/common/misc/s3.cpp b/src/VBox/Runtime/common/misc/s3.cpp
index 2155d9a..8defa73 100644
--- a/src/VBox/Runtime/common/misc/s3.cpp
+++ b/src/VBox/Runtime/common/misc/s3.cpp
@@ -996,6 +996,7 @@ RTR3DECL(int) RTS3PutKey(RTS3 hS3, const char *pszBucketName, const char *pszKey
     /* Set the callback which send the content */
     curl_easy_setopt(pS3Int->pCurl, CURLOPT_READFUNCTION, rtS3ReadFileCallback);
     curl_easy_setopt(pS3Int->pCurl, CURLOPT_READDATA, &hFile);
+    curl_easy_setopt(pS3Int->pCurl, CURLOPT_SSLVERSION, (long)CURL_SSLVERSION_TLSv1);
 
     /* Start the request */
     rc = rtS3Perform(pS3Int);
diff --git a/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h b/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h
index 042cfd8..033ea6d 100644
--- a/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h
+++ b/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2014 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -56,7 +56,7 @@ typedef struct RTR0SEMSOLWAIT
     /** The native timeout value. */
     union
     {
-        /** The timeout (abs lbolt) when fHighRes is false.  */
+        /** The timeout (in ticks) when fHighRes is false.  */
         clock_t     lTimeout;
     } u;
     /** Set if we use high resolution timeouts. */
@@ -107,8 +107,8 @@ DECLINLINE(int) rtR0SemSolWaitInit(PRTR0SEMSOLWAIT pWait, uint32_t fFlags, uint6
     if (!(fFlags & RTSEMWAIT_FLAGS_INDEFINITE))
     {
         if (fFlags & RTSEMWAIT_FLAGS_MILLISECS)
-            uTimeout = uTimeout < UINT64_MAX / UINT32_C(1000000) * UINT32_C(1000000)
-                     ? uTimeout * UINT32_C(1000000)
+            uTimeout = uTimeout < UINT64_MAX / RT_NS_1MS
+                     ? uTimeout * RT_NS_1MS
                      : UINT64_MAX;
         if (uTimeout == UINT64_MAX)
             fFlags |= RTSEMWAIT_FLAGS_INDEFINITE;
@@ -155,7 +155,7 @@ DECLINLINE(int) rtR0SemSolWaitInit(PRTR0SEMSOLWAIT pWait, uint32_t fFlags, uint6
                 fFlags |= RTSEMWAIT_FLAGS_INDEFINITE;
             else
             {
-                pWait->u.lTimeout = ddi_get_lbolt() + cTicks;
+                pWait->u.lTimeout = cTicks;
                 pWait->fHighRes = false;
             }
         }
diff --git a/src/VBox/Runtime/r0drv/solaris/thread2-r0drv-solaris.c b/src/VBox/Runtime/r0drv/solaris/thread2-r0drv-solaris.c
index d8f04b1..0d77396 100644
--- a/src/VBox/Runtime/r0drv/solaris/thread2-r0drv-solaris.c
+++ b/src/VBox/Runtime/r0drv/solaris/thread2-r0drv-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2014 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -112,7 +112,7 @@ DECLHIDDEN(int) rtThreadNativeCreate(PRTTHREADINT pThreadInt, PRTNATIVETHREAD pN
                                        0,                               /* Stack size */
                                        rtThreadNativeMain,              /* Thread function */
                                        pThreadInt,                      /* Function data */
-                                       sizeof(pThreadInt),              /* Data size */
+                                       0,                               /* Data size */
                                        (proc_t *)RTR0ProcHandleSelf(),  /* Process handle */
                                        TS_RUN,                          /* Ready to run */
                                        minclsyspri                      /* Priority */
diff --git a/src/VBox/Runtime/r3/linux/sched-linux.cpp b/src/VBox/Runtime/r3/linux/sched-linux.cpp
index 1e85af5..82eec1c 100644
--- a/src/VBox/Runtime/r3/linux/sched-linux.cpp
+++ b/src/VBox/Runtime/r3/linux/sched-linux.cpp
@@ -311,40 +311,23 @@ static void rtSchedNativeRestore(PSAVEDPRIORITY pSave)
 static int rtSchedRunThread(void *(*pfnThread)(void *pvArg), void *pvArg)
 {
     /*
-     * Setup thread attributes.
+     * Create the thread.
      */
-    pthread_attr_t  ThreadAttr;
-    int rc = pthread_attr_init(&ThreadAttr);
+    pthread_t Thread;
+    int rc = pthread_create(&Thread, NULL, pfnThread, pvArg);
     if (!rc)
     {
-        rc = pthread_attr_setdetachstate(&ThreadAttr, PTHREAD_CREATE_JOINABLE);
-        if (!rc)
+        /*
+         * Wait for the thread to finish.
+         */
+        void *pvRet = (void *)-1;
+        do
         {
-            rc = pthread_attr_setstacksize(&ThreadAttr, 128*1024);
-            if (!rc)
-            {
-                /*
-                 * Create the thread.
-                 */
-                pthread_t Thread;
-                rc = pthread_create(&Thread, &ThreadAttr, pfnThread, pvArg);
-                if (!rc)
-                {
-                    /*
-                     * Wait for the thread to finish.
-                     */
-                    void *pvRet = (void *)-1;
-                    do
-                    {
-                        rc = pthread_join(Thread, &pvRet);
-                    } while (errno == EINTR);
-                    if (rc)
-                        return RTErrConvertFromErrno(rc);
-                    return (int)(uintptr_t)pvRet;
-                }
-            }
-        }
-        pthread_attr_destroy(&ThreadAttr);
+            rc = pthread_join(Thread, &pvRet);
+        } while (errno == EINTR);
+        if (rc)
+            return RTErrConvertFromErrno(rc);
+        return (int)(uintptr_t)pvRet;
     }
     return RTErrConvertFromErrno(rc);
 }
diff --git a/src/VBox/Storage/VD.cpp b/src/VBox/Storage/VD.cpp
index 33e4fef..7d2832f 100644
--- a/src/VBox/Storage/VD.cpp
+++ b/src/VBox/Storage/VD.cpp
@@ -3021,6 +3021,7 @@ static int vdWriteHelperAsync(PVDIOCTX pIoCtx)
 
                 if (RT_FAILURE(rc) && (rc != VERR_VD_ASYNC_IO_IN_PROGRESS))
                 {
+                    vdIoCtxUnlockDisk(pDisk, pIoCtx, false /* fProcessDeferredReqs*/ );
                     vdIoCtxFree(pDisk, pIoCtxWrite);
                     break;
                 }
diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.cpp b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
index 26d876f..bde9f92 100644
--- a/src/VBox/VMM/VMMR0/HMSVMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
@@ -1142,7 +1142,7 @@ static void hmR0SvmLoadSharedCR0(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX pCtx)
         if (CPUMIsGuestFPUStateActive(pVCpu))
         {
             /* Catch floating point exceptions if we need to report them to the guest in a different way. */
-            if (!(u64GuestCR0 & X86_CR0_NE))
+            if (!(pCtx->cr0 & X86_CR0_NE))
             {
                 Log4(("hmR0SvmLoadGuestControlRegs: Intercepting Guest CR0.MP Old-style FPU handling!!!\n"));
                 fInterceptMF = true;
@@ -3091,10 +3091,7 @@ static void hmR0SvmPostRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, PSVMT
     }
 
     if (!(pVmcb->ctrl.u32InterceptCtrl1 & SVM_CTRL1_INTERCEPT_RDTSC))
-    {
-        /** @todo Find a way to fix hardcoding a guestimate.  */
-        TMCpuTickSetLastSeen(pVCpu, ASMReadTSC() + pVmcb->ctrl.u64TSCOffset - 0x400);
-    }
+        TMCpuTickSetLastSeen(pVCpu, ASMReadTSC() + pVmcb->ctrl.u64TSCOffset);
 
     STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatInGC, &pVCpu->hm.s.StatExit1, x);
     TMNotifyEndOfExecution(pVCpu);                              /* Notify TM that the guest is no longer running. */
diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
index cced81e..26d847b 100644
--- a/src/VBox/VMM/VMMR0/HMVMXR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
@@ -8115,9 +8115,7 @@ static void hmR0VmxPostRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXT
         if (pVCpu->hm.s.vmx.u32ProcCtls2 & VMX_VMCS_CTRL_PROC_EXEC2_RDTSCP)
             ASMWrMsr(MSR_K8_TSC_AUX, pVCpu->hm.s.u64HostTscAux);
 #endif
-        /** @todo Find a way to fix hardcoding a guestimate.  */
-        TMCpuTickSetLastSeen(pVCpu, ASMReadTSC()
-                             + pVCpu->hm.s.vmx.u64TSCOffset - 0x400   /* guestimate of world switch overhead in clock ticks */);
+        TMCpuTickSetLastSeen(pVCpu, ASMReadTSC() + pVCpu->hm.s.vmx.u64TSCOffset);
     }
 
     STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatInGC, &pVCpu->hm.s.StatExit1, x);
@@ -8387,42 +8385,46 @@ VMMR0DECL(int) VMXR0RunGuestCode(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 #ifndef HMVMX_USE_FUNCTION_TABLE
 DECLINLINE(int) hmR0VmxHandleExit(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient, uint32_t rcReason)
 {
+#ifdef DEBUG_ramshankar
+# define SVVMCS()       do { int rc2 = hmR0VmxSaveGuestState(pVCpu, pMixedCtx); AssertRC(rc2); } while (0)
+# define LDVMCS()       do { HMCPU_CF_SET(pVCpu, HM_CHANGED_ALL_GUEST); } while (0)
+#endif
     int rc;
     switch (rcReason)
     {
-        case VMX_EXIT_EPT_MISCONFIG:           rc = hmR0VmxExitEptMisconfig(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_EPT_VIOLATION:           rc = hmR0VmxExitEptViolation(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_IO_INSTR:                rc = hmR0VmxExitIoInstr(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_CPUID:                   rc = hmR0VmxExitCpuid(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_RDTSC:                   rc = hmR0VmxExitRdtsc(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_RDTSCP:                  rc = hmR0VmxExitRdtscp(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_APIC_ACCESS:             rc = hmR0VmxExitApicAccess(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_XCPT_OR_NMI:             rc = hmR0VmxExitXcptOrNmi(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_MOV_CRX:                 rc = hmR0VmxExitMovCRx(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_EXT_INT:                 rc = hmR0VmxExitExtInt(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_INT_WINDOW:              rc = hmR0VmxExitIntWindow(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_MWAIT:                   rc = hmR0VmxExitMwait(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_MONITOR:                 rc = hmR0VmxExitMonitor(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_TASK_SWITCH:             rc = hmR0VmxExitTaskSwitch(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_PREEMPT_TIMER:           rc = hmR0VmxExitPreemptTimer(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_RDMSR:                   rc = hmR0VmxExitRdmsr(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_WRMSR:                   rc = hmR0VmxExitWrmsr(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_MOV_DRX:                 rc = hmR0VmxExitMovDRx(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_TPR_BELOW_THRESHOLD:     rc = hmR0VmxExitTprBelowThreshold(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_HLT:                     rc = hmR0VmxExitHlt(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_INVD:                    rc = hmR0VmxExitInvd(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_INVLPG:                  rc = hmR0VmxExitInvlpg(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_RSM:                     rc = hmR0VmxExitRsm(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_MTF:                     rc = hmR0VmxExitMtf(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_PAUSE:                   rc = hmR0VmxExitPause(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_XDTR_ACCESS:             rc = hmR0VmxExitXdtrAccess(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_TR_ACCESS:               rc = hmR0VmxExitXdtrAccess(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_WBINVD:                  rc = hmR0VmxExitWbinvd(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_XSETBV:                  rc = hmR0VmxExitXsetbv(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_RDRAND:                  rc = hmR0VmxExitRdrand(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_INVPCID:                 rc = hmR0VmxExitInvpcid(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_GETSEC:                  rc = hmR0VmxExitGetsec(pVCpu, pMixedCtx, pVmxTransient); break;
-        case VMX_EXIT_RDPMC:                   rc = hmR0VmxExitRdpmc(pVCpu, pMixedCtx, pVmxTransient); break;
+        case VMX_EXIT_EPT_MISCONFIG:           /* SVVMCS(); */ rc = hmR0VmxExitEptMisconfig(pVCpu, pMixedCtx, pVmxTransient);      /* LDVMCS(); */ break;
+        case VMX_EXIT_EPT_VIOLATION:           /* SVVMCS(); */ rc = hmR0VmxExitEptViolation(pVCpu, pMixedCtx, pVmxTransient);      /* LDVMCS(); */ break;
+        case VMX_EXIT_IO_INSTR:                /* SVVMCS(); */ rc = hmR0VmxExitIoInstr(pVCpu, pMixedCtx, pVmxTransient);           /* LDVMCS(); */ break;
+        case VMX_EXIT_CPUID:                   /* SVVMCS(); */ rc = hmR0VmxExitCpuid(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */ break;
+        case VMX_EXIT_RDTSC:                   /* SVVMCS(); */ rc = hmR0VmxExitRdtsc(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */ break;
+        case VMX_EXIT_RDTSCP:                  /* SVVMCS(); */ rc = hmR0VmxExitRdtscp(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_APIC_ACCESS:             /* SVVMCS(); */ rc = hmR0VmxExitApicAccess(pVCpu, pMixedCtx, pVmxTransient);        /* LDVMCS(); */ break;
+        case VMX_EXIT_XCPT_OR_NMI:             /* SVVMCS(); */ rc = hmR0VmxExitXcptOrNmi(pVCpu, pMixedCtx, pVmxTransient);         /* LDVMCS(); */ break;
+        case VMX_EXIT_MOV_CRX:                 /* SVVMCS(); */ rc = hmR0VmxExitMovCRx(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_EXT_INT:                 /* SVVMCS(); */ rc = hmR0VmxExitExtInt(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_INT_WINDOW:              /* SVVMCS(); */ rc = hmR0VmxExitIntWindow(pVCpu, pMixedCtx, pVmxTransient);         /* LDVMCS(); */ break;
+        case VMX_EXIT_MWAIT:                   /* SVVMCS(); */ rc = hmR0VmxExitMwait(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */ break;
+        case VMX_EXIT_MONITOR:                 /* SVVMCS(); */ rc = hmR0VmxExitMonitor(pVCpu, pMixedCtx, pVmxTransient);           /* LDVMCS(); */ break;
+        case VMX_EXIT_TASK_SWITCH:             /* SVVMCS(); */ rc = hmR0VmxExitTaskSwitch(pVCpu, pMixedCtx, pVmxTransient);        /* LDVMCS(); */ break;
+        case VMX_EXIT_PREEMPT_TIMER:           /* SVVMCS(); */ rc = hmR0VmxExitPreemptTimer(pVCpu, pMixedCtx, pVmxTransient);      /* LDVMCS(); */ break;
+        case VMX_EXIT_RDMSR:                   /* SVVMCS(); */ rc = hmR0VmxExitRdmsr(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */ break;
+        case VMX_EXIT_WRMSR:                   /* SVVMCS(); */ rc = hmR0VmxExitWrmsr(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */ break;
+        case VMX_EXIT_MOV_DRX:                 /* SVVMCS(); */ rc = hmR0VmxExitMovDRx(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_TPR_BELOW_THRESHOLD:     /* SVVMCS(); */ rc = hmR0VmxExitTprBelowThreshold(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break;
+        case VMX_EXIT_HLT:                     /* SVVMCS(); */ rc = hmR0VmxExitHlt(pVCpu, pMixedCtx, pVmxTransient);               /* LDVMCS(); */ break;
+        case VMX_EXIT_INVD:                    /* SVVMCS(); */ rc = hmR0VmxExitInvd(pVCpu, pMixedCtx, pVmxTransient);              /* LDVMCS(); */ break;
+        case VMX_EXIT_INVLPG:                  /* SVVMCS(); */ rc = hmR0VmxExitInvlpg(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_RSM:                     /* SVVMCS(); */ rc = hmR0VmxExitRsm(pVCpu, pMixedCtx, pVmxTransient);               /* LDVMCS(); */ break;
+        case VMX_EXIT_MTF:                     /* SVVMCS(); */ rc = hmR0VmxExitMtf(pVCpu, pMixedCtx, pVmxTransient);               /* LDVMCS(); */ break;
+        case VMX_EXIT_PAUSE:                   /* SVVMCS(); */ rc = hmR0VmxExitPause(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */ break;
+        case VMX_EXIT_XDTR_ACCESS:             /* SVVMCS(); */ rc = hmR0VmxExitXdtrAccess(pVCpu, pMixedCtx, pVmxTransient);        /* LDVMCS(); */ break;
+        case VMX_EXIT_TR_ACCESS:               /* SVVMCS(); */ rc = hmR0VmxExitXdtrAccess(pVCpu, pMixedCtx, pVmxTransient);        /* LDVMCS(); */ break;
+        case VMX_EXIT_WBINVD:                  /* SVVMCS(); */ rc = hmR0VmxExitWbinvd(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_XSETBV:                  /* SVVMCS(); */ rc = hmR0VmxExitXsetbv(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_RDRAND:                  /* SVVMCS(); */ rc = hmR0VmxExitRdrand(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_INVPCID:                 /* SVVMCS(); */ rc = hmR0VmxExitInvpcid(pVCpu, pMixedCtx, pVmxTransient);           /* LDVMCS(); */ break;
+        case VMX_EXIT_GETSEC:                  /* SVVMCS(); */ rc = hmR0VmxExitGetsec(pVCpu, pMixedCtx, pVmxTransient);            /* LDVMCS(); */ break;
+        case VMX_EXIT_RDPMC:                   /* SVVMCS(); */ rc = hmR0VmxExitRdpmc(pVCpu, pMixedCtx, pVmxTransient);             /* LDVMCS(); */  break;
 
         case VMX_EXIT_TRIPLE_FAULT:            rc = hmR0VmxExitTripleFault(pVCpu, pMixedCtx, pVmxTransient); break;
         case VMX_EXIT_NMI_WINDOW:              rc = hmR0VmxExitNmiWindow(pVCpu, pMixedCtx, pVmxTransient); break;
@@ -9887,6 +9889,24 @@ HMVMX_EXIT_DECL hmR0VmxExitWrmsr(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT
     rc |= hmR0VmxSaveGuestRflags(pVCpu, pMixedCtx);
     rc |= hmR0VmxSaveGuestSegmentRegs(pVCpu, pMixedCtx);
     rc |= hmR0VmxSaveGuestAutoLoadStoreMsrs(pVCpu, pMixedCtx);
+
+    /*
+     * If MSR bitmaps are not supported, save those MSRs we are forced to intercept.
+     * When MSR bitmaps are available, we don't intercept these MSRs, see hmR0VmxSetupProcCtls().
+     */
+    if (!(pVCpu->hm.s.vmx.u32ProcCtls & VMX_VMCS_CTRL_PROC_EXEC_USE_MSR_BITMAPS))
+    {
+        switch (pMixedCtx->ecx)
+        {
+            case MSR_IA32_SYSENTER_CS:
+            case MSR_IA32_SYSENTER_EIP:
+            case MSR_IA32_SYSENTER_ESP: rc |= hmR0VmxSaveGuestSysenterMsrs(pVCpu, pMixedCtx); break;
+            case MSR_K8_FS_BASE:        rc |= hmR0VmxSaveGuestFSBaseMsr(pVCpu, pMixedCtx);    break;
+            case MSR_K8_GS_BASE:        rc |= hmR0VmxSaveGuestGSBaseMsr(pVCpu, pMixedCtx);    break;
+            /* case MSR_K8_LSTAR:   case MSR_K6_STAR: case MSR_K8_SF_MASK:
+               case MSR_K8_TSC_AUX: case MSR_K8_KERNEL_GS_BASE: done in hmR0VmxSaveGuestAutoLoadStoreMsrs() */
+        }
+    }
     AssertRCReturn(rc, rc);
     Log4(("ecx=%#RX32\n", pMixedCtx->ecx));
 
@@ -9926,6 +9946,9 @@ HMVMX_EXIT_DECL hmR0VmxExitWrmsr(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT
                 case MSR_IA32_SYSENTER_ESP: HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_SYSENTER_ESP_MSR); break;
                 case MSR_K8_FS_BASE:        /* no break */
                 case MSR_K8_GS_BASE:        HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_SEGMENT_REGS);     break;
+                case MSR_K8_LSTAR:
+                case MSR_K6_STAR:
+                case MSR_K8_SF_MASK:
                 case MSR_K8_KERNEL_GS_BASE: HMCPU_CF_SET(pVCpu, HM_CHANGED_VMX_GUEST_AUTO_MSRS);    break;
             }
         }
@@ -10406,6 +10429,16 @@ HMVMX_EXIT_DECL hmR0VmxExitTaskSwitch(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRAN
                 }
 
                 Log4(("Pending event on TaskSwitch uIntType=%#x uVector=%#x\n", uIntType, uVector));
+                STAM_COUNTER_INC(&pVCpu->hm.s.StatExitTaskSwitch);
+
+                /*
+                 * emR3ExecuteInstruction() will call IEMExecOne() which doesn't honor TRPM events. We could implement
+                 * IEMInjectTrpmEvent() but since IEM task-switching isn't backported to 4.3 it would return
+                 * VERR_IEM_ASPECT_NOT_IMPLEMENTED. What we really want is to just inject the event and not even try
+                 * emulate the instruction at RIP. At the moment for 4.3, only REM does this, so fallback directly to
+                 * REM here. See @bugref{7445} comment #25.
+                 */
+                return VINF_EM_RESCHEDULE_REM;
             }
         }
     }
diff --git a/src/libs/Makefile.kmk b/src/libs/Makefile.kmk
index 4ae7888..316d7f7 100644
--- a/src/libs/Makefile.kmk
+++ b/src/libs/Makefile.kmk
@@ -52,7 +52,7 @@ endif
 if !defined(VBOX_ONLY_SDK) \
  && (   "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
      || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
- include $(PATH_SUB_CURRENT)/openssl-1.0.1h/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/openssl-1.0.1j/Makefile.kmk
 endif
 
 # libjpeg for VRDP video redirection

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-virtualbox/virtualbox.git



More information about the Pkg-virtualbox-commits mailing list